この記事のリンク先には広告が含まれています

Bed Rest For Food Poisoning 日本語化対応修正(RimWorld mod)

作成の経緯
  • 食中毒になったらベッドに向かうという、Bed Rest For Food Poisoningのmodを日本語環境で適用したいと思ったので、試行錯誤した
  • なお、RimWorldのmodは今まで作成したことはないので、以下が正しいかも不明
  • C#言語も、今まで扱ったことはない

調査

  • 日本語の環境で、そのままの状態では、何も起こらないことを確認した
  • コメントによると、「This mod is not compatible with non English game environments. If you want it to be compatible, you need to translate "initial" and "major" in the DLL into your language.」とのことで、日本語に翻訳する必要がありそうと思った
  • modフォルダにソースファイルを発見した
  • ソースファイル内に、"initial""major" の文字列を発見した
    [MustTranslate]とも書いてあり、やはり翻訳が必要の様だった
  • Assembliesフォルダに、DLLがある事を発見した。このMODはDLLの様だと思った
  • xmlファイルはない様で、単純には日本語適用できそうにない気がした
  • "initial""major"が何を意味するのか不明だったが、どうやら、食中毒(初期症状)、食中毒(重大)が、英語でFood posisoning(initial)、Food posisoning(major)の様で、カッコ内の文字列に対応しているようだった
  • 英語環境では、食中毒でベッドに行けることが分かった
  • DLL内文字列をバイナリエディタでいじれるか試してみたが、やっぱり無理だった
  • よって、日本語環境で適用するには、再コンパイルが必要である気がしたので、やってみた

Visual Studio 2022 コミュニティ インストール

  • クリーンインストールする機会があったので、参考までに。
  • もしもこのためだけにVS2022をインストールする奇特な人がいたら以下参考
  • Visual Studio 2022 コミュニティをダウンロード
  • ダウンロードしたインストーラーを起動
  • C#があればどれでもいいと思うが、.NETデスクトップ開発を選択する
    • 個別のコンポーネントで”.NET Framework 4.7.2″が含まれていることを確認する
  • インストールする

Bed Rest For Food Poisoning 再コンパイル

作業環境
  • Visual Studio Community 2022
RimWorld mod作成環境構築の参考リンク
  • Bed Rest For Food Poisoningのmodフォルダのソースファイルを一式コピー
    • 場所:\steam\steamapps\workshop\content\2941002567901366\1.5\Source
  • プロジェクトファイル「Source.csproj」を開く。以下環境設定
    1. ソリューションエクスプローラーのレンチアイコン[プロパティ]をダブルクリック
      • [アプリケーション]
        • [アセンブリ] と [名前空間] がBedRestForFoodPoisoningを確認
      • [ビルド]
        • [出力パス] が ..\Assemblies\ を確認
        • 「詳細」を開き、「デバッグ情報」を「なし」を確認
    2. 必要DLLの導入/設定
      • ソリューション エクスプローラーの「参照」を右クリックし「参照の追加」をクリック
        1. 「参照…」をクリック
        2. フォルダに移動
          • \steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed
        3. ファイル選択
          • Assembly-CSharp.dll
          • UnityEngine.CoreModule.dll
        4. 「追加」をクリック
        5. 「OK」をクリックして、参照マネージャーを閉じます
      • ソリューション エクスプローラーの「参照」内、[Assembly-CSharp] を右クリックし、[プロパティ] ペインをひらく
        • [プロパティ] ペインにて、[ローカルにコピー] を [False] に設定する
      • [UnityEngine.CoreModule] も、[プロパティ] ペインにて、[ローカルにコピー] を [False] に設定する
  • HarmonyModのDLL追加
    1. HarmonyMod(https://github.com/pardeike/HarmonyRimWorld)をダウンロードし、適当な場所にコピー
    2. 参照、追加で、\Current\Assemblies[0Harmony.dll] 、[HarmonyMod.dll] を追加
    3. [0Harmony] 、[HarmonyMod]の[プロパティ] ペインにて、[ローカルにコピー] を [False] に設定する
  • ここで、メニュー「ビルド」-「ソリューションのリビルド」してみる
    • ビルド後のコマンド[powershell -ExecutionPolicy Bypass ....\Deploy.ps1]が不明だが、Sourceフォルダ同階層のAssemblies フォルダーにDLLが更新作成できていれば成功
  • Patch_HealthAIUtility.csファイルを開き、"initial" 、 "major"を、"初期症状"、"重大"に変更する
    • 修正後
              [MustTranslate]
              private static string initial = "初期症状";
      
              [MustTranslate]
              private static string major = "重大";
      
  • 再リビルドし、DLLを入れ替える
  • 日本語環境で、食中毒(初期症状)、食中毒(重大)でベッドに行けるようになっていたら完了
疑問点
  • C#にて、DLLの参照は、DLL指定するだけで良いのか?
    • C++の、ヘッダファイルやライブラリファイルは不要になったのか?
  • RimWorldのmodは、”.NET Framework 4.7.2″である必要があるらしい

コメント