【自作MOD紹介】TES/FO/TW3のモッディングで便利かもしれないWinMerge用プラグイン (v1.3, 2019/12/28)
先日、TES/FO/TW3のモッディングで便利かもしれないWinMerge用プラグイン、WinMerge Plugins for TES-FO-TW3 Moddersを公開しました。
WinMergeとは、ファイルの差分を視覚的に表示してファイル間の違いや変更点を把握でき、可能な場合はファイルの編集も行える、オープンソースのファイル比較ツールです。
WinMergeはテキスト形式ファイルの比較がめっぽう得意ですが、バイナリファイルの場合は内容をそのまま文字列として読み込んで単純比較するため、あまり役に立ちません。
今回作成したプラグインは、TES/FO/TW3のモッディングでよく使うバイナリファイル形式をテキストに変換することによって、WinMergeでの比較・編集を可能にすることを目的としています。
これらのプラグインを使って、たとえば次のような操作が行えます。
- WinMergeで.7zファイルを比較 -> さらに.bsaを開いて中のファイルを比較
- WinMergeで.pexを開き、直接ソースコードを比較。さらにソース中の変数定義や関数定義を名前順にソートして比較
- WinMergeで.pscを開き、ソース中の変数定義や関数定義を名前順にソートして比較
- WinMergeで.stringsを開き、中の文字列を比較/編集
- WinMergeで.w3stringsを開き、中の文字列を比較/編集
- WinMergeでENBやSkyrim/Fallout4のiniファイルを開き、セクション名順/エントリ名順にソートして比較
正直Nexusでの反応は極めて薄く悲しい限りですが(まあ予想通りです)、xEdit以上にWinMergeを使っている私にとっては、個人的に手放せないプラグインとなりつつあります。
MOD制作者でなくても、旧バージョンのMODと比較して変更点を把握する、ファイルレベルの競合を確かめるといった用途が考えられます。ぜひ活用してください。
以下にプラグインの使い方をまとめておきます。
WinMerge Plugins for TES-FO-TW3 Modders 利用ガイド (v1.3版)
目次
- インストールと設定
- プラグインの詳細
- Bml_BethBSAList.sct - Bethesda アーカイブ (.bsa/.ba2)
- Bml_BethPapyrusDecomp.sct - Bethesda Papyrusスクリプト (.pex)
- Bml_BethPapyrusSorter.sct - Bethesda Papyrusソース (.psc)
- Bml_BethStrings.sct - Bethesda ローカライズ文字列ファイル (.strings/.dlstring/.ilstrings)
- Bml_BethSEQ.sct - Bethesda SEQファイル (.seq)
- Bml_TW3Strings.sct - The Witcher 3 ローカライズ文字列ファイル (.w3strings)
- Bml_BethIniFile.sct - ENB/Bethesdaゲーム/ツールのINIファイル (.ini)
- おまけ: コマンドラインツール
- ツールの変更履歴
- ライセンス
- 本ガイドの変更履歴
インストールと設定
前提プログラム
ダウンロード方法
Nexus Mods(要無料会員登録)からダウンロードします。
どのページのファイルも同一です。
オプションの外部ツール
- Bethesda Papyrusスクリプトのソースを比較する場合
- Bethesda BSA/BA2アーカイブを展開して中のファイルを比較する場合
- BSArch by zilav (FNVのページにありますが、TES/FO全ゲームで利用可能)
- The Witcher 3 ローカライズ文字列ファイルを比較する場合
- INIファイルを比較する場合
- Ini sort tool by icepanther (Skyrimのページにありますが、他のBethesdaゲームでもある程度は利用可能)
プラグインの詳細
Bml_BethBSAList.sct - Bethesda アーカイブ (.bsa/.ba2)
対象ゲーム: TES4/TES5/SSE/FO3/FNV/FO4/FO76
可能な操作: 比較のみ
アーカイブ内のファイル一覧を比較します。またはアーカイブを展開して中のファイルを比較します。
オプション
項目 | 説明 |
---|---|
Action | アーカイブの比較方法 Listing - ファイル一覧を比較(デフォルト) Extracting - 展開してファイルの内容を比較 |
Allow automatic unpacking | WinMergeの自動展開がオンのとき、自動展開を許可するかどうか オフ - 許可しない オン - 許可する(デフォルト) |
Quick Mode | (Listing用) 圧縮されたBSA(.bsa)の一覧取得時に、展開後のファイルサイズを取得せず、処理を高速化するかどうか。 オフ - 取得する(遅い) オン - 取得しない(高速、デフォルト) |
MD5 hash | (Listing用) アーカイブファイルのMD5ハッシュ値を取得するかどうか。 オフ - 取得しない(高速、デフォルト) オン - 取得する(遅い) 変更があるにもかかわらず、ファイル一覧もサイズも同一で「一致」判定される場合があります。MD5ハッシュを比較することで、コンテンツの一致を正確に比較できます。 |
BSArch.exe path | (Extracting用) BSA/BA2展開ツール BSArch.exeのパス。展開する場合は必ず指定します。 ツールのダウンロード: BSArch by zilav |
実行例
Bml_BethPapyrusDecomp.sct - Bethesda Papyrusスクリプト (.pex)
対象ゲーム: TES5/SSE/FO4/FO76?
可能な操作: 比較のみ
Papyrusスクリプトを逆コンパイルしてソースを比較します。
- Champollionはゲームの種類によって別のツールが提供されていて、別のゲームとの互換性がありません。本プラグインはPapyrusスクリプトの種別を判定して、自動的に適切な逆コンパイラを呼び出します。
- .pexファイルに格納されるプロパティ/変数/ステート/関数の順序はCKでの編集/コンパイル毎にランダムに入れ替わることがあります。ソートオプションを有効にすれば、コメントを除外して変数定義や関数定義を名前順にソートすることができ、より比較しやすくなります。
オプション
項目 | 説明 |
---|---|
Champollion.exe path (TES5/SSE) | Skyrim/Skyrim SE用のPapyrus逆コンパイラ Champollion.exeのパス ツールのダウンロード: Champollion a PEX to Papyrus decompiler by li1nx |
Champollion.exe path (FO4) | Fallout 4用のPapyrus逆コンパイラ Champollion.exeのパス ツールのダウンロード: Champollion a PEX to Papyrus decompiler by Orvid |
Sort out the source code | コメントを削除して変数定義や関数定義を名前順にソートするかどうか オフ - ソートしない(デフォルト) オン - ソートする |
Allow automatic unpacking | WinMergeの自動展開がオンのとき、自動展開を許可するかどうか オフ - 許可しない オン - 許可する(デフォルト) |
実行例
Bml_BethPapyrusSorter.sct - Bethesda Papyrusソース (.psc)
対象ゲーム: TES5/SSE/FO4/FO76?
可能な操作: 比較のみ
Papyrusスクリプトソースのコメントを除去して変数定義や関数定義を名前順にソートすることで、より比較しやすくします。
CreationKitでスクリプトフラグメントの追加や編集を行うと、ソース内の変数/関数定義順序がランダムに入れ替わり、単純にテキスト比較できない場合があります。このプラグインは、こうしたソースの比較に役立ちます。
実行例
動作はBml_BethPapyrusDecomp.sctのソートオプションと同じなので割愛します。
Bml_BethStrings.sct - Bethesda ローカライズ文字列ファイル (.strings/.dlstring/.ilstrings)
対象ゲーム: TES5/SSE/FO4/FO76
可能な操作: 比較/編集/保存
ローカライズ文字列ファイルに含まれているIDと文字列を比較します。
WinMergeで編集した結果を元のファイルに保存することもできます。
- コードページがUTF-8の文字列については自動判別します。その他のコードページの場合、ファイル名に含まれる言語名をキーにローカルコードページ(1251, 1252など)を判別します。それでも判別できない場合、オプションで設定されたコードページを仮定します。
- シフトJIS形式の文字列ファイルを扱う場合、オプション画面でデフォルトコードページに932を指定してください。
- ファイル先頭の#で始まるヘッダ行は保存時に利用されます。ヘッダ行を編集/削除しないでください。
- 行の先頭から10進数の文字列で始まり、次にタブコードが続く行が文字列項目の先頭(区切り目)と見なされます。
- 編集結果を保存した場合、文字列テーブル中の同一文字列を1項目にまとめて最適化します。このため、編集前と編集後のファイルを比較した場合、定義文字列が同じでもバイナリ比較結果に差異が生じる場合があります。最適化の様子はダンプモードを使って確認できます。
オプション
項目 | 説明 |
---|---|
Default codepage | コードページが判別できない場合に仮定するデフォルトのコードページ。 デフォルトは1252。 UTF-8 (65001)は自動判別されるため、ここには指定しないでください。 |
Force default codepage | コードページを自動判別せず、Default codepageで設定したコードページを強制します。 オフ - 強制しない(デフォルト) オン - 強制する |
Allow automatic unpacking | WinMergeの自動展開がオンのとき、自動展開を許可するかどうか オフ - 許可しない オン - 許可する(デフォルト) |
Dump mode | ファイル一覧ではなく、ファイル構造に関する詳細な情報を比較します。 このオプションが有効な場合、編集結果の保存はできません。 オフ - 通常モード(デフォルト) オン - ダンプモード |
実行例
Bml_BethSEQ.sct - Bethesda SEQファイル (.seq)
対象ゲーム: TES5/SSE (他のゲームには存在しないはず)
可能な操作: 比較/編集/保存
SEQファイルに含まれるクエストのForm IDを比較します。
WinMergeで編集した結果を元のファイルに保存することもできます。
- ファイル先頭の#で始まるヘッダ行は保存時に利用されます。ヘッダ行を編集/削除しないでください。
- Form IDを編集する場合、クエストのForm IDを16進数8桁(大文字小文字区別なし)で記述します。
オプション
項目 | 説明 |
---|---|
Optimize on Load | ファイルの読み込み時にForm IDをソートして重複を取り除きます。 オフ - 最適化しない(デフォルト) オン - 最適化する |
Optimize on Save | ファイルの保存時にForm IDをソートして重複を取り除きます。 オフ - 最適化しない オン - 最適化する(デフォルト) |
Allow automatic unpacking | WinMergeの自動展開がオンのとき、自動展開を許可するかどうか オフ - 許可しない オン - 許可する(デフォルト) |
実行例
Bml_TW3Strings.sct - The Witcher 3 ローカライズ文字列ファイル (.w3strings)
対象ゲーム: TW3
可能な操作: 比較のみ
The Witcher 3のローカライズ文字列ファイルに含まれるIDや文字列を比較します。
オプション
項目 | 説明 |
---|---|
w3strings encoder (w3strings.exe) path | ローカライズ文字列エンコーダー w3strings.exeのパス ツールのダウンロード: w3strings encoder by rmemr |
Allow automatic unpacking | WinMergeの自動展開がオンのとき、自動展開を許可するかどうか オフ - 許可しない オン - 許可する(デフォルト) |
実行例
Bml_BethIniFile.sct - ENB/Bethesdaゲーム/ツールのINIファイル (.ini)
対象ゲーム: ENB/TES5/SSE/FO4, TES3/TES4/FO3/FNV/FO76/TESConstuctionSet/GECK/CreationKit (ある程度は利用可能)
可能な操作: 比較のみ
INIファイルのコメントを除去して、セクション名/エントリ名を名前順にソートすることにより、より比較しやすくします。
オプション
項目 | 説明 |
---|---|
Ini sort tool ENBIniSorter.exe path | Ini sort tool ENBIniSorter.exeのパス ツールのダウンロード: Ini sort tool by icepanther |
Comment format | INIファイル中のコメント形式 Auto detect - 自動判別(推奨/デフォルト) ENB (//...) - "//"で始まる行をコメント扱い Skyrim - ";"で始まる行をコメント扱い Both - "//"または";"で始まる行をコメント扱い |
Processing only the following files | 以下のファイル名のみを処理対象にする: enb*.ini, Skyrim*.ini, Fallout*.ini, Oblivion*.ini, Morrowind*.ini, ConstructionSet*.ini, GECK*.ini, CreationKit*.ini |
Allow automatic unpacking | WinMergeの自動展開がオンのとき、自動展開を許可するかどうか オフ - 許可しない オン - 許可する(デフォルト) |
実行例
おまけ: コマンドラインツール
MergePlugins/BmlToolsフォルダーには、プラグインで利用しているコマンドラインツールが格納されています。
コマンドプロンプトやバッチファイルからこれらのツールを利用することもできます。
プラグインでは利用されていない機能も用意されていますので、自由に使ってください。
使い方とコマンド引数は引数を指定せずに実行すると表示されるコマンドヘルプ、または同じフォルダーにある.txtファイルを参照してください。
- BethBsaList.exe - Bethesdaアーカイブのファイル一覧表示
- BethSeqDecode.exe - Bethesda SEQファイルを.txt/.csvにデコード
- BethSeqEncode.exe - Bethesda SEQファイルを.txt/.csvからエンコード
- BethStrDecode.exe - Bethesda ローカライズ文字列ファイルを.txt/.csvにデコード
- BethStrEncode.exe - Bethesda ローカライズ文字列ファイルを.txt/.csvからエンコード
ツールの変更履歴
Version 1.3 (2019/12/28)
- Bml_BethIniFile.sct: 新プラグイン。INIファイルのコメントを除去してソートすることで比較しやすくする。icepanther氏のIni sort toolを使って実現。
Version 1.2 (2019/12/21)
- Bml_BethPapyrusDecomp.sct: PEXのデコンパイル結果のコメントを除去して変数定義や関数定義をソートするオプションの追加。より正確な比較に役立つ。
- Bml_BethPapyrusSorter.sct: 新プラグイン。PSC(Papyrusソース)のコメントを除去して変数定義や関数定義をソートする。より正確な比較に役立つ。
ライセンス
- プラグインファイル(.sct)のライセンスはWinMergeと同様にGPL v2.0です。ただし、コマンドラインツールを除きます。
- プラグインファイル(.sct)はGPL v2.0ライセンスに従って自由に再利用できます。
- コマンドラインツール(BmlToolsフォルダに格納されたexeファイルおよびその関連ファイル)を明示的な許可なく再配布することを禁じます。
本ガイドの変更履歴
- 2019/07/19(金曜日) : 初版 (v1.1に対応)
- 2019/12/28(土曜日) : 第2版 (v1.2/1.3に対応)
以上