2015年05月20日

MODの仕組み

ETS2はどのようにして、MODを適用していくのかの説明をします。
ここを理解できれば、MODの競合やゲームが落ちる仕組みがわかると思います。

scsファイルの展開や、MODの置場等はwikiや、18輪皮置場さんに書いてあるので省略です。


ゲームを開始すると、プログラムはインストールしたフォルダにある「base.scs」を展開します。図では一部フォルダを省略してます。
ets1-1.jpg

次にdef.scsやdlc関係を読み込みます。
def.scsはbaseフォルダの直下に展開され、以下の様なフォルダ構成になります。MOD作成によく使用されている「game_data.sii」「economy_data.sii」も、このような構成で並びます。
ets1-2.jpg

次にプログラムはMODマネージャーでチェックを入れたMODファイルを展開します。
MODは下から上の順に展開されていきます。
↓はmod1を展開して、「game_data.sii」を書き換えた状態です。こうしてゲーム内のデータを修正することが出来ます。
フォルダ構成、名前が一致していないと当然書き換え出来ないのです。
ets1-3.jpg


MODで同名ファイルが存在すると次々に上書きされていきます。
↓はmod2で同名の「game_data.sii」があったため、mod1のファイルを上書きされてしまいました。
ets1-4.jpg
適応したいMODのファイル名先頭に「z」を付けたりして優先度を変える、というのはこういう仕組みだからです。
MODマネージャーが実装されたので、ファイル名の先頭にzを付けたりしなくても良くなりました。

そして全てのMODを展開し終えて、プログラムは上書きされた状態の各ファイルを読み込み、問題が無ければゲームを起動します。
問題があった場合、無視できる内容ならばそのまま起動するか、MODで書き換えられる前のデフォルトファイルを読み込み起動します(みたいな挙動をしてます)。

起動時に全部のファイルの整合性をチェックしてるわけではなく、ゲーム途中で必要なファイルがない、構文が間違ってるなどで強制終了することもあります。

上書きされたファイルの変数を変えられただけで、問題ないとプログラムが判断して動いているが、その場に行ってみるとおかしな事になってる例
(某氏の画像をお借りしました)
ets1-4a.jpg

強制終了したり、うまくModが動いていないな? という時はマイドキュメントのEuro Truck Simurator 2フォルダ内にあるgame.log.txtを参照してください。
起動から終了までミリ秒単位で状況を記録してくれているありがたいファイルです。
ここで<ERROR>となっているところが主な原因です。
※ERRORとなってても「water level〜」「Lisence Plate〜」は無視していいです。Water〜は天候に関するエラーで、Lisence〜は「出現している車に割り振るナンバーが足りない」っていうどうでもいい?エラーみたいです。
それに該当するファイルを含むModを調べれば解決策は出てくるかもしれません。

game_data.siiを上書きしていく様子をイメージしてみましたが、このファイルは多くのMODが書き換えを行っています。
それ故に競合の最も起こりやすい原因の一つなのです。


例をあげると、Map拡張のTSM等と、ノーダメージにするMODは同じ「game_data.sii」というファイルを修正しています。
TSMを優先にするとノーダメージは効かなくなり、ノーダメージを優先にするとMap画面の端のほうに画面が行かなくなるのはこのためです。

どうすれば競合しないで両立できるのか。MODの導入で悩ましい場面ですね。
どちらかのMODを諦めるしかないのでしょうか。


なんて悩む必要はなく、簡単なことなのです。
両方の内容を適用したファイルを作って一番最後に置けばいいのです。
TSMのgame_data.siiとノーダメージのgame_data.siiの差分をとってみました。
差分にはWinMergeというフリーソフトを使用しています。

カメラをどこまで拡大縮小するか、を定義している部分です。左がTSM、右がノーダメージModのです。右に大きくはみ出してしまってすいません;;
TSMはマップ拡張のため、数値を大きくとっていますが、ノーダメージModはデフォルトの値です。
ets1-5.jpg


今度はダメージを定義する場所です。TSMはデフォルトですが、ノーダメージModは「0」に書き換えてあります。
ets1-6.jpg


カメラ拡大縮小の変数をTSMの数値に、ダメージの変数を0と、両方の内容を適応したgame_data.siiファイルを用意し、Modを作成することで両方のMODに対応することが出来ました。
私の場合、こういう競合するファイルはまとめてしまい、「zzzzzzzzzzzzzzzzzzzz_config.scs」とかにして最後の最後になるように置いてます。



さいごに

各ファイルは公式がバージョンアップをする度に書き換えています。
新しく変数が増えてることもあれば、数値を変更しているのもあります。
従って、新しいバージョン出る度に差分を取って問題のある箇所を修正していくのはとてもめんどいのです。ヽ(`Д´)ノ

例としてノーダメージMODを選んでみましたが、これってゲームがつまらなくなるだけなのです。
よくets2.ltにNodamage Mod上げてる人いるけど、バージョン上がる度に数値0にしてるだけのModを「新しいバージョンに対応しました!」ってドヤ顔でアップしてると思うと笑えます。

posted by 因幡ここね at 00:26| Comment(0) | ETS2 設定
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: