Modについてのあれこれ。FoModの作り方、Mod導入時のトラブル事例などのニッチな話を書いていきます。Moddersを公開しました。WinMergeとは、ファイルの差分を視覚的に表示してファイル間の違いや変更点を把握でき、可能な場合はファイルの編集も行える、オープンソースのファイル比較ツールです。WinMergeはテキスト形式ファイルの比較がめっぽう得意ですが、バイナリファイルの場合は内容をそのまま文字列として読み込んで単純比較するため、あまり役に立ちません。今回作成したプラグインは、TES/FO/TW3のモッディングでよく使うバイナリファイル形式をテキストに変換することによって、WinMergeでの比較・編集を可能にすることを目的としています。これらのプラグインを使って、たとえば次のような操作が行えます。.bsaを開いて中のファイルを比較WinMergeで.pexを開き、直接ソースコードを比較。Nexusでの反応は極めて薄く悲しい限りですが(まあ予想通りです)、xEdit以上にWinMergeを使っている私にとっては、個人的に手放せないプラグインとなりつつあります。MOD制作者でなくても、旧バージョンのMODと比較して変更点を把握する、ファイルレベルの競合を確かめるといった用途が考えられます。以下にプラグインの使い方をまとめておきます。Mods(要無料会員登録)からダウンロードします。どのページのファイルも同一です。(Skyrimのページにありますが、他のBethesdaゲームでもある程度は利用可能)インストール方法ダウンロードした7zファイルを開き、"MergePlugins"フォルダーをWinMergeのインストールフォルダーにコピーします。プラグインオプションの設定方法(全プラグイン共通)各プラグインにはオプション画面が用意されています。外部ツールのパスなど、設定が必須の項目もありますので、必ず一度は開いてチェックしてください。オプション画面を開いて設定を変更する方法は次のとおりです。プラグインの一覧からオプションを変更したいプラグインを選んでダブルクリックするか、[プラグインの設定]ボタンを押します。プラグインのオプション画面が表示されます。[OK]ボタンで設定を保存します。[Cancel]または右上の[X]ボタンで画面を閉じます。比較のみアーカイブ内のファイル一覧を比較します。アーカイブを展開して中のファイルを比較します。(Listing用)圧縮されたBSA(.bsa)の一覧取得時に、展開後のファイルサイズを取得せず、処理を高速化するかどうか。(Listing用)アーカイブファイルのMD5ハッシュ値を取得するかどうか。取得する(遅い)変更があるにもかかわらず、ファイル一覧もサイズも同一で「一致」判定される場合があります。MD5ハッシュを比較することで、コンテンツの一致を正確に比較できます。BSArch.exeのパス。展開する場合は必ず指定します。比較のみPapyrusスクリプトを逆コンパイルしてソースを比較します。Champollionはゲームの種類によって別のツールが提供されていて、別のゲームとの互換性がありません。本プラグインはPapyrusスクリプトの種別を判定して、自動的に適切な逆コンパイラを呼び出します。.pexファイルに格納されるプロパティ/変数/ステート/関数の順序はCKでの編集/コンパイル毎にランダムに入れ替わることがあります。ソートオプションを有効にすれば、コメントを除外して変数定義や関数定義を名前順にソートすることができ、より比較しやすくなります。比較のみPapyrusスクリプトソースのコメントを除去して変数定義や関数定義を名前順にソートすることで、より比較しやすくします。CreationKitでスクリプトフラグメントの追加や編集を行うと、ソース内の変数/関数定義順序がランダムに入れ替わり、単純にテキスト比較できない場合があります。このプラグインは、こうしたソースの比較に役立ちます。動作はBml_BethPapyrusDecomp.sctのソートオプションと同じなので割愛します。比較/編集/保存ローカライズ文字列ファイルに含まれているIDと文字列を比較します。WinMergeで編集した結果を元のファイルに保存することもできます。コードページがUTF-8の文字列については自動判別します。1252など)を判別します。それでも判別できない場合、オプションで設定されたコードページを仮定します。シフトJIS形式の文字列ファイルを扱う場合、オプション画面でデフォルトコードページに932を指定してください。ファイル先頭の#で始まるヘッダ行は保存時に利用されます。ヘッダ行を編集/削除しないでください。行の先頭から10進数の文字列で始まり、次にタブコードが続く行が文字列項目の先頭(区切り目)と見なされます。編集結果を保存した場合、文字列テーブル中の同一文字列を1項目にまとめて最適化します。このため、編集前と編集後のファイルを比較した場合、定義文字列が同じでもバイナリ比較結果に差異が生じる場合があります。最適化の様子はダンプモードを使って確認できます。コードページが判別できない場合に仮定するデフォルトのコードページ。デフォルトは1252。(65001)は自動判別されるため、ここには指定しないでください。codepageで設定したコードページを強制します。ファイル一覧ではなく、ファイル構造に関する詳細な情報を比較します。このオプションが有効な場合、編集結果の保存はできません。WinMergeで編集した結果を元のファイルに保存することもできます。ファイル先頭の#で始まるヘッダ行は保存時に利用されます。ヘッダ行を編集/削除しないでください。IDを16進数8桁(大文字小文字区別なし)で記述します。IDをソートして重複を取り除きます。IDをソートして重複を取り除きます。3のローカライズ文字列ファイルに含まれるIDや文字列を比較します。比較のみINIファイルのコメントを除去して、セクション名/エントリ名を名前順にソートすることにより、より比較しやすくします。コマンドラインツールMergePlugins/BmlToolsフォルダーには、プラグインで利用しているコマンドラインツールが格納されています。コマンドプロンプトやバッチファイルからこれらのツールを利用することもできます。プラグインでは利用されていない機能も用意されていますので、自由に使ってください。使い方とコマンド引数は引数を指定せずに実行すると表示されるコマンドヘルプ、または同じフォルダーにある.txtファイルを参照してください。INIファイルのコメントを除去してソートすることで比較しやすくする。toolを使って実現。PEXのデコンパイル結果のコメントを除去して変数定義や関数定義をソートするオプションの追加。