Thinking Skeever

Skyrim/The Witcher 3 Modについてのあれこれ。FoModの作り方、Mod導入時のトラブル事例などのニッチな話を書いていきます。a.k.a. BowmoreLover@nexusmods

【自作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版)

目次


f:id:thinkingskeever:20190719170013p:plain

インストールと設定

前提プログラム

ダウンロード方法

Nexus Mods(要無料会員登録)からダウンロードします。
どのページのファイルも同一です。

オプションの外部ツール

インストール方法

ダウンロードした7zファイルを開き、"MergePlugins"フォルダーをWinMergeのインストールフォルダーにコピーします。

f:id:thinkingskeever:20190719170056p:plain

プラグインオプションの設定方法(全プラグイン共通)

プラグインにはオプション画面が用意されています。外部ツールのパスなど、設定が必須の項目もありますので、必ず一度は開いてチェックしてください。
オプション画面を開いて設定を変更する方法は次のとおりです。

  1. WinMergeのメニュー [プラグイン]-[プラグインの設定] を選びます。
  2. プラグインの一覧からオプションを変更したいプラグインを選んでダブルクリックするか、[プラグインの設定]ボタンを押します。
  3. プラグインのオプション画面が表示されます。[OK]ボタンで設定を保存します。[Cancel]または右上の[X]ボタンで画面を閉じます。

f:id:thinkingskeever:20190719170116p:plain



プラグインの詳細

Bml_BethBSAList.sct - Bethesda アーカイブ (.bsa/.ba2)

対象ゲーム: TES4/TES5/SSE/FO3/FNV/FO4/FO76
可能な操作: 比較のみ

アーカイブ内のファイル一覧を比較します。またはアーカイブを展開して中のファイルを比較します。

オプション

f:id:thinkingskeever:20190719170315p:plain

項目 説明
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
実行例

f:id:thinkingskeever:20190719170405p:plain
BSA - ファイル一覧の比較
f:id:thinkingskeever:20190719170502p:plain
BA2 - ファイル一覧の比較
f:id:thinkingskeever:20190719170523p:plain
BSA - ファイルを展開して比較



Bml_BethPapyrusDecomp.sct - Bethesda Papyrusスクリプト (.pex)

対象ゲーム: TES5/SSE/FO4/FO76?
可能な操作: 比較のみ

Papyrusスクリプトを逆コンパイルしてソースを比較します。

  • Champollionはゲームの種類によって別のツールが提供されていて、別のゲームとの互換性がありません。本プラグインPapyrusスクリプトの種別を判定して、自動的に適切な逆コンパイラを呼び出します。
  • .pexファイルに格納されるプロパティ/変数/ステート/関数の順序はCKでの編集/コンパイル毎にランダムに入れ替わることがあります。ソートオプションを有効にすれば、コメントを除外して変数定義や関数定義を名前順にソートすることができ、より比較しやすくなります。
オプション

f:id:thinkingskeever:20191228191647p:plain

項目 説明
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の自動展開がオンのとき、自動展開を許可するかどうか
オフ - 許可しない
オン - 許可する(デフォルト)
実行例

f:id:thinkingskeever:20190719170628p:plain
PEX - SkyrimのPEX比較
f:id:thinkingskeever:20190719170659p:plain
PEX - Fallout 4のPEX比較
f:id:thinkingskeever:20191228191713p:plain
PEX - ソートのサンプル1(未ソート)
f:id:thinkingskeever:20191228191729p:plain
PEX - ソートのサンプル1(ソート済み)
f:id:thinkingskeever:20191228191744p:plain
PEX - ソートのサンプル2(未ソート)
f:id:thinkingskeever:20191228191755p:plain
PEX - ソートのサンプル2(ソート済み)



Bml_BethPapyrusSorter.sct - Bethesda Papyrusソース (.psc)

対象ゲーム: TES5/SSE/FO4/FO76?
可能な操作: 比較のみ

Papyrusスクリプトソースのコメントを除去して変数定義や関数定義を名前順にソートすることで、より比較しやすくします。
CreationKitでスクリプトフラグメントの追加や編集を行うと、ソース内の変数/関数定義順序がランダムに入れ替わり、単純にテキスト比較できない場合があります。このプラグインは、こうしたソースの比較に役立ちます。

オプション

f:id:thinkingskeever:20191228191813p:plain

項目 説明
Allow automatic unpacking WinMergeの自動展開がオンのとき、自動展開を許可するかどうか
オフ - 許可しない
オン - 許可する(デフォルト)
実行例

動作はBml_BethPapyrusDecomp.sctのソートオプションと同じなので割愛します。



Bml_BethStrings.sct - Bethesda ローカライズ文字列ファイル (.strings/.dlstring/.ilstrings)

対象ゲーム: TES5/SSE/FO4/FO76
可能な操作: 比較/編集/保存

ローカライズ文字列ファイルに含まれているIDと文字列を比較します。
WinMergeで編集した結果を元のファイルに保存することもできます。

  • コードページがUTF-8の文字列については自動判別します。その他のコードページの場合、ファイル名に含まれる言語名をキーにローカルコードページ(1251, 1252など)を判別します。それでも判別できない場合、オプションで設定されたコードページを仮定します。
  • シフトJIS形式の文字列ファイルを扱う場合、オプション画面でデフォルトコードページに932を指定してください。
  • ファイル先頭の#で始まるヘッダ行は保存時に利用されます。ヘッダ行を編集/削除しないでください。
  • 行の先頭から10進数の文字列で始まり、次にタブコードが続く行が文字列項目の先頭(区切り目)と見なされます。
  • 編集結果を保存した場合、文字列テーブル中の同一文字列を1項目にまとめて最適化します。このため、編集前と編集後のファイルを比較した場合、定義文字列が同じでもバイナリ比較結果に差異が生じる場合があります。最適化の様子はダンプモードを使って確認できます。
オプション

f:id:thinkingskeever:20190719170743p:plain

項目 説明
Default codepage コードページが判別できない場合に仮定するデフォルトのコードページ。
デフォルトは1252。
UTF-8 (65001)は自動判別されるため、ここには指定しないでください。
Force default codepage コードページを自動判別せず、Default codepageで設定したコードページを強制します。
オフ - 強制しない(デフォルト)
オン - 強制する
Allow automatic unpacking WinMergeの自動展開がオンのとき、自動展開を許可するかどうか
オフ - 許可しない
オン - 許可する(デフォルト)
Dump mode ファイル一覧ではなく、ファイル構造に関する詳細な情報を比較します。
このオプションが有効な場合、編集結果の保存はできません。
オフ - 通常モード(デフォルト)
オン - ダンプモード
実行例

f:id:thinkingskeever:20190719170835p:plain
.strings - 日本語の比較と編集
f:id:thinkingskeever:20190719170857p:plain
.strings - フランス語の比較と編集



Bml_BethSEQ.sct - Bethesda SEQファイル (.seq)

対象ゲーム: TES5/SSE (他のゲームには存在しないはず)
可能な操作: 比較/編集/保存

SEQファイルに含まれるクエストのForm IDを比較します。
WinMergeで編集した結果を元のファイルに保存することもできます。

  • ファイル先頭の#で始まるヘッダ行は保存時に利用されます。ヘッダ行を編集/削除しないでください。
  • Form IDを編集する場合、クエストのForm IDを16進数8桁(大文字小文字区別なし)で記述します。
オプション

f:id:thinkingskeever:20190719170920p:plain

項目 説明
Optimize on Load ファイルの読み込み時にForm IDをソートして重複を取り除きます。
オフ - 最適化しない(デフォルト)
オン - 最適化する
Optimize on Save ファイルの保存時にForm IDをソートして重複を取り除きます。
オフ - 最適化しない
オン - 最適化する(デフォルト)
Allow automatic unpacking WinMergeの自動展開がオンのとき、自動展開を許可するかどうか
オフ - 許可しない
オン - 許可する(デフォルト)
実行例

f:id:thinkingskeever:20190719170932p:plain
SEQ - 比較と編集


Bml_TW3Strings.sct - The Witcher 3 ローカライズ文字列ファイル (.w3strings)

対象ゲーム: TW3
可能な操作: 比較のみ

The Witcher 3のローカライズ文字列ファイルに含まれるIDや文字列を比較します。

オプション

f:id:thinkingskeever:20190719171017p:plain

項目 説明
w3strings encoder (w3strings.exe) path ローカライズ文字列エンコーダー w3strings.exeのパス
ツールのダウンロード: w3strings encoder by rmemr
Allow automatic unpacking WinMergeの自動展開がオンのとき、自動展開を許可するかどうか
オフ - 許可しない
オン - 許可する(デフォルト)
実行例

f:id:thinkingskeever:20190719171037p:plain
.w3strings - 英語の比較



Bml_BethIniFile.sct - ENB/Bethesdaゲーム/ツールのINIファイル (.ini)

対象ゲーム: ENB/TES5/SSE/FO4, TES3/TES4/FO3/FNV/FO76/TESConstuctionSet/GECK/CreationKit (ある程度は利用可能)
可能な操作: 比較のみ

INIファイルのコメントを除去して、セクション名/エントリ名を名前順にソートすることにより、より比較しやすくします。

オプション

f:id:thinkingskeever:20191228193048p:plain

項目 説明
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の自動展開がオンのとき、自動展開を許可するかどうか
オフ - 許可しない
オン - 許可する(デフォルト)
実行例

f:id:thinkingskeever:20191228193313p:plain
INI - Iniファイルの比較(プラグインなし)
f:id:thinkingskeever:20191228193331p:plain
INI - Iniファイルの比較(プラグインあり)



おまけ: コマンドラインツール

MergePlugins/BmlToolsフォルダーには、プラグインで利用しているコマンドラインツールが格納されています。
コマンドプロンプトやバッチファイルからこれらのツールを利用することもできます。
プラグインでは利用されていない機能も用意されていますので、自由に使ってください。
使い方とコマンド引数は引数を指定せずに実行すると表示されるコマンドヘルプ、または同じフォルダーにある.txtファイルを参照してください。



ツールの変更履歴

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に対応)

以上

Copyright (C) 2015-2020 ThinkingSkeever, All Rights Reserved.
ブログの記事内に記載されているメーカー名、製品名称等は、日本及びその他の国における各企業の商標または登録商標です。
リンクはご自由に。記事の転載はご遠慮ください。記事を引用する場合はトラックバックするか元のURLを明記してください。