作成の経緯
- 食中毒になったらベッドに向かうという、
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 再コンパイル
RimWorld mod作成環境構築の参考リンク
Bed Rest For Food Poisoningのmodフォルダのソースファイルを一式コピー- 場所:
\steam\steamapps\workshop\content\2941002567901366\1.5\Source
- 場所:
- プロジェクトファイル「
Source.csproj」を開く。以下環境設定- ソリューションエクスプローラーのレンチアイコン[プロパティ]をダブルクリック
- [アプリケーション]
- [アセンブリ] と [名前空間] が
BedRestForFoodPoisoningを確認
- [アセンブリ] と [名前空間] が
- [ビルド]
- [出力パス] が
..\Assemblies\を確認 - 「詳細」を開き、「デバッグ情報」を「なし」を確認
- [出力パス] が
- [アプリケーション]
- 必要DLLの導入/設定
- ソリューション エクスプローラーの「参照」を右クリックし「参照の追加」をクリック
- 「参照…」をクリック
- フォルダに移動
\steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed
- ファイル選択
Assembly-CSharp.dllUnityEngine.CoreModule.dll
- 「追加」をクリック
- 「OK」をクリックして、参照マネージャーを閉じます
- ソリューション エクスプローラーの「参照」内、
[Assembly-CSharp]を右クリックし、[プロパティ] ペインをひらく- [プロパティ] ペインにて、[ローカルにコピー] を [False] に設定する
[UnityEngine.CoreModule]も、[プロパティ] ペインにて、[ローカルにコピー] を [False] に設定する
- ソリューション エクスプローラーの「参照」を右クリックし「参照の追加」をクリック
- ソリューションエクスプローラーのレンチアイコン[プロパティ]をダブルクリック
- HarmonyModのDLL追加
- HarmonyMod(https://github.com/pardeike/HarmonyRimWorld)をダウンロードし、適当な場所にコピー
- 参照、追加で、
\Current\Assembliesの[0Harmony.dll]、[HarmonyMod.dll]を追加 [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″である必要があるらしい

コメント