Asset Expansion エラーという敵
今回はjsonとは違ってマルチプレイ対応MODについて書きます。
マルチプレイに対応していないMOD(武器,種族,バイオーム追加MODなど)をmodsファイルにインストールしていて、なおかつ同時に接続しているプレイヤーやサーバーのクライアントとのMODが一致していない場合、「Asset Expansion」によるエラーが起き、接続を行う事が出来ません。
このエラーは自分と相手のアセット(MOD含む)のファイルが不一致である事から引き起こされています。例えば種族追加MODであれば相手がそのMODをインストールしていない場合、MODによって新たに追加された種族の画像やコンフィグファイルが欠如している事が原因となります。
しかし、MODによるアセットへのファイルの追加や変更において、Asset Expansion エラーを引き起こさない部分もあります。これらはStarboundにおけるクライアント依存のファイル群で、MODを所持しているユーザーがエリアに存在しているときのみ作用するものがこれにあたります。
例えば、かなりゆるいものでいうとステータスエフェクトはクライアント依存のシステムです。
マルチプレイにおいて、Starboundのステータスエフェクトは、
相手プレイヤーから攻撃を受けた時にステータスエフェクトが指定されていた時、そのステータスエフェクト名と合致するステータスエフェクトを自分に適用する
というルールで動いてます。
そのため、いくら既存のステータスエフェクトのconfig(jsonフォーマット)ファイルやluaファイルを弄ろうと、Asset Expansion エラーは起きません。
例えば、stats/effects/burning/に格納されているburning.luaファイルの内容を空っぽにしたものをMODファイルに入れてマルチに参加した場合、相手から自分にburningが適用された場合には何も起きず、自分から相手にburningを適用した場合は(相手がburningのファイルをいじってなければ)バニラのburningが適用されます。
少し話がずれましたが、以上のことからステータスエフェクトは、自分にしか作用しないという特性上、クライアント管理のシステムとして割り当てられており、その結果ユーザーがどれだけ中身をいじったり、新たなステータスエフェクトを追加しようとAsset Expansion エラーは起きず、バニラサーバーにも問題なく入れます。
このように、Starboundのクライアント管理のシステム部分をうまく利用すればファイルを自分だけがインストールしていてもバニラマルチが行えるMODを作る事が可能です。