続き物です。
前回はマージにおける基本的な注意事項を書きました。あまり気軽にやりすぎると危ないよ、って話です。
今回は実際のMODを交え、具体的にマージしやすいMODと注意した方がいいMOD、やめたほうがいいMODの例を挙げていきます。結構長いです。
前回はこちら。
f4mod.hatenablog.com
- どんなMODがマージしやすい?
- 問題なくマージできるMOD
- 組み合わせ次第ではマージ可能なMOD
- マージに注意が必要なMOD
- マージを見送った方が良いMOD
- (おまけ)Game Settingカテゴリの取り扱いについて
どんなMODがマージしやすい?
基本スタンスは、『ごく小規模な追加or変更をしているMODをまとめる』のが、比較的安全かつ高効率だと思います。
例えば以下のようなMOD。
- 少数追加の武器、防具、アイテムMOD
- 拠点クラフトの少数追加系MOD
- Game Setting変更MOD
数が増えやすい割に構造を確認しやすいので、比較的楽にマージ可能です。
特に装備系であれは、セル配置やLeveled Listの追加が無く、入手方法がコンソールやクラフトのみのMODはまず安全です(競合リスクが無い)。とはいえ絶対ではないので、必ず構造確認してからマージしてください。
反面、
- バニラの武器、防具、アイテム改変MOD
- バランス調整(PerkやHP等)、オーバーホール系MOD
- セル改変系MOD
といった、バニラ改変がメインのMODは競合しやすいです。事前に競合潰してからマージしないと、後でリカバリ効かなくなる恐れがあります。
以下、構造確認の例を挙げていきます。
問題なくマージできるMOD
.38ハンドガンMOD、The M9 Standalone Pistolを例に。
esp内の全てのオブジェクトが新規作成(バニラへの上書きが無い、背景白)なので、競合要素が皆無。コンソール取得のみな為、セルやLeveled List変更も無いです。
メッシュ、テクスチャ、マテリアルもルーズファイルなので、マージ後もそのまま使えます。
こうした競合要因の無いMOD同士であれば、いくつマージしても問題無いです。単体リリースの武器MODが増えてきたら、纏めてしまうとesp数稼げます。
但しマージ後にプラグイン名とForm IDが変わると、セーブデータ内のM9は消失します。コンソールで要再取得。
組み合わせ次第ではマージ可能なMOD
ハッキングやロックピック等を簡単にするEasier Hacking with Options - Easy Lockpick - Guaranteed Pickpocketと、パワーアーマーのフュージョンコアの消費量を調整するConfigurable Power Armor Fusion Core Drainを例に。
いずれもゲーム設定を変更するMODです。ハッキング簡易化esp、ロックピック簡易化esp、フュージョンコア消費量5%のespのあわせて3つのマージを考えます。
バニラのレコードを変更している為、いずれも組み合わせ次第では競合が発生します。が、この場合はそれぞれ変更箇所が異なる為、競合ありません。3つ合わせてマージしても平気です。
iHackingMaxWords
は、背景白の新規オブジェクトじゃないの?と思った人は、最後のおまけコーナーを是非(マージとは関係無い話です)。こちらは対物ライフルMODのM82a3 AMR。バニラのLeveled ListとNPCを変更している為、場合によっては競合します。
マージに注意が必要なMOD
マージ可能ですが、単にマージしただけではトラブルになることもあります。要事前確認。
プラグインの競合対策
先程のフュージョンコア調整(消費量5%)MODと、ジェットパックのフュージョンコア消費を無くすReal working jet packのマージを考えます。
併用するからには、
- フュージョンコアはバニラの5%しか消費しない
- ジェットパックによる消費無し
という環境を期待する筈です。この前提で見ていきます。
マージ前のespを確認すると、赤字の所、2つ競合しています。
ジェットパックの消費は5%(Value=3.2)でなく、0%(Value=0)にしたいので、このロードオーダーは間違いです。RealJetpackが後でないと、ジェットパックの消費が0になりません。
この状態でマージすると、RealJetpackのレコードが潰されたespが作成されます。これではマージの意味がありません。
競合対策してからマージしないと後々面倒です。マージ前のプラグインが残っている間は比較検討できますが、マージプラグインのみでは何が悪いのか発見しづらくなります。
ba2アーカイブファイルの対処
前回に試した、バッグMODのSurvivalist Go-Bagsと、ドッグミートのボディアーマーを追加するK-9 Harnessのマージを再び。
プラグインには競合要因が無く、問題無くマージ可能です。ですがどちらのMODもba2のアーカイブファイルを使っている為、このままではマージ後にba2をロードすることができません。
対処方法は2種類。
- 元のMODのba2を全てルーズフォルダに展開
- 新たなba2ファイルに再圧縮
後の追加を考えるとルーズフォルダに置いておく方が楽ですが、ファイル管理の観点ではba2の方が楽ですかね。お好みでどうぞ。
ba2の再圧縮に関しては、僕が知らないだけで便利なツールあるかもですが・・・。少なくともルーズフォルダ展開後にCKで再圧縮すれば、作成可能です。前回の末尾に手順メモ載ってます。
iniファイルを含むMOD
例えばLong Range Bullet Holesのように、iniファイルを持ったMODもあります。これら追加のiniファイルは、Fallout4.iniの設定項目を上書き変更します。追加iniファイルの書式は、Fallout4.iniと一緒です。
iniファイルの中身を合体させて(1つだけならそのままで)、ba2同様にマージ後のプラグインとファイル名を合わせます。
プラグイン自体のマージ可否は、他と同じ判断基準にて。
マージを見送った方が良いMOD
マージによりトラブルや面倒が想定されるタイプです。注意や手間をかければ乗り切れる物から、絶対コケる物まで。
マスター指定対象のプラグイン
複数のMODが統合された結果、Form IDやプラグイン名が変わります。マスター指定されたプラグイン(親)に変更が発生すると、参照利用する側のプラグイン(子)が読み込みに失敗し、不具合になります。
Armorsmith Extended対応のバッグMODを例に。
AEで新設された所持重量増加モジュールを使う為、AEをマスター指定し、AEのKeywordxx000E3D
を設定してます。
この状況下で、AEに対して自作のヘルメットMODをマージしたくなりました。
ヘルメットのForm IDはxx000E3D
。別espなら問題無いですが、マージすることで上位2桁が同一になりますので・・・AEのKeywordと重複します。
マージ後にバッグMODのKeywordを再度見てみると・・・Keywordがヘルメットにすり替わってしまいました。
マージにより、参照先のForm IDのオブジェクトが変わってしまったことが原因です。勿論これでは想定通りに動きません。
これはかなり極端な例ですけども・・・マスター指定対象はマージしない方が安全です。
ハードコーディングを含むスクリプトのMOD
何かしらのMODのオプションとして、
『必須ではないけれど、導入されてれば自動的に使ってくれる』
という関係のMODがあれば、このタイプの可能性があります。
例えばこれ、Four Play(エロMOD)のプラグイン『Kidnapped』のスクリプト”FPK_Trigger.psc”の一部です。管理用MOD『Vinfamy's Control Panel』のオブジェクトをForm ID決め打ちで探すので、マージしてForm IDが変わってしまうと、トラブルが想定されます。
Function UpdateGlobals() FPK_Global_Chance.setValue((Game.GetFormFromFile(0x0100174D, "Vinfamy_CP.esp") as GlobalVariable).getValue()) FPK_Global_Night.setValue((Game.GetFormFromFile(0x0100174E, "Vinfamy_CP.esp") as GlobalVariable).getValue()) FPK_Global_Friendly.setValue((Game.GetFormFromFile(0x0100174F, "Vinfamy_CP.esp") as GlobalVariable).getValue()) FPK_Global_City.setValue((Game.GetFormFromFile(0x01001750, "Vinfamy_CP.esp") as GlobalVariable).getValue()) FPK_Global_Settlement.setValue((Game.GetFormFromFile(0x01001751, "Vinfamy_CP.esp") as GlobalVariable).getValue()) FPK_Global_Frequency.setValue((Game.GetFormFromFile(0x01001752, "Vinfamy_CP.esp") as GlobalVariable).getValue()) FPK_Global_Notif.setValue((Game.GetFormFromFile(0x01001753, "Vinfamy_CP.esp") as GlobalVariable).getValue()) EndFunction
※念の為書いておきますが、ハードコーディングを非難している訳ではないです。そもそもGetFormFromFile
はForm IDを直接指定するので、どのMODのスクリプトも同じだと思います。
バージョンアップが予想されるMOD
SSは、拠点クラフト系のMODをいくつかマージしたespです。電線管同士を壁を貫通して接続するMOD、Wall Pass-Through Power Conduitsがマージされています。
元のMODのバージョンアップをマージespに反映させるには、
- マージesp内の電線管のオブジェクトを全て削除
- 新バージョンを追加マージ
- Form IDを旧バージョンに合わせる
といった作業が必要で、そこそこ面倒。
削除せずに新バージョンを追加マージしちゃうと、別MODとして新旧共に残ります。Form IDを合わせなかった際は、クラフト済の電線管が拠点から消失します。
こういった手間からミスも考えられる為、バージョンアップが予想されるMODはマージしない方が楽かもです。
Constructible Object(生産レシピ)とか合わせなくても平気ですが、直接ゲーム内に現れるオブジェクト(コンソールのadditemやplaceatmeで扱えるような物)は、Form IDの変動で消失します。
継続利用が確定してないMOD
マージ後に一部アンインストールしたくなったら、手動で不要なオブジェクトを削除することになります。MOD単体からの再マージで済めば良いですが、何かしらレコード変更後だと、そうもいきません。
面倒な上に人的ミスも考慮すると、あまりお勧めしません。
大規模MOD同士のマージ
1つのプラグインにあまりの多くの機能を持たせてしまうと、トラブル発生時の原因特定が困難になります。あまり過度な巨大化は、運用上避けた方が良いと思います。
セーブデータへの悪影響を考慮
前述の通りForm IDやプラグイン名が変わる為、セーブデータ的には元のMODをアンインストールして同機能の別MODをインストールすることと同義になります。
つまりゲーム途中でマージすると、
- 所持したアイテムの消失
- 拠点に配置したオブジェクトの消失
- NPCやクエストの初期化
等の問題が想定されます。MODで追加された装備が手元から無くなるとか、拠点に建てた家から特定の壁が無くなったり。クラフトし直したりコンソールからの入手、クエストフラグを手動で立てる等の作業が必要になることも。リカバリ可能か検討した上で、マージした方がいいと思います。
(おまけ)Game Settingカテゴリの取り扱いについて
序盤の、ゲーム設定を変更する3つのMODをマージした際の話です。
一番上のiHackingMaxWords
は、背景白で一見すると新規オブジェクトに見えますが・・・元々存在するGame Settingであり、バニラ改変になります。
Fallout4.esm上に該当するForm IDは存在しないのですが、Editor IDによる識別で上書き可能となってます(プラグインの概念からするとハードコーディングぽく見えるけど、実際は書換え可能、みたいな感じ?)。
なので同じGame Settingを変更するプラグインが複数有れば、異なるForm ID同士で競合状態になります。
FO4Editで新たなGame Settingを見つけるのは無理ですが、CKならGameplay>settingsタブから探せます。
以上、おしまいです!