Mount & Blade II: Bannerlord の MOD 制作には、XML の改変によるものや C# プログラミングによるものがありますが、ここでは C# による MOD 制作の初歩について解説していきます。
開発環境の準備
作業を始める前に、プログラミングのための環境を構築しましょう。
- Microsoft のサイトから Visual Studio Community のインストーラーをダウンロードして実行
- Visual Studio インストーラーで「.NET デスクトップ開発」を選択
- 一応、右側に「.NET Framework 4.7.2 開発ツール」が含まれていることを確認した上でインストール (インストールオプションの変更は特に必要ありません)
ちなみに、Visual Studio Community は無料で利用できますが、ライセンスが30日で切れてしまいます。使用を継続するには
Microsoft アカウントでサインインしなければなりません。アカウントの作成は
こちらから、サインインは Visual Studio 起動後に右上のアイコンから行えます。
練習用 MOD の準備
今回は、練習用に ExampleMod という名前で MOD を作っていきます。
配置場所
- [Bannerlord インストールフォルダ]\Modules に ExampleMod というフォルダを作成
- ExampleMod フォルダの中に bin、さらに bin の中に Win64_Shipping_Client というフォルダを作成
今回の例で言うと、最終的なディレクトリ階層は
[Bannerlord インストールフォルダ]\Modules\ExampleMod\bin\Win64_Shipping_Client
となります。
設定ファイル
以下をテキストエディタにコピペし、SubModule.xml というファイル名で ExampleMod フォルダの中に保存します。
<Module>
<Name value="Example Mod"/>
<Id value="ExampleMod"/>
<Version value="v1.0.0"/>
<SingleplayerModule value="true"/>
<MultiplayerModule value="false"/>
<DependedModules>
<DependedModule Id="Native"/>
<DependedModule Id="SandBoxCore"/>
<DependedModule Id="Sandbox"/>
<DependedModule Id="CustomBattle"/>
<DependedModule Id="StoryMode"/>
</DependedModules>
<SubModules>
<SubModule>
<Name value="ExampleMod"/>
<DLLName value="ExampleMod.dll"/>
<SubModuleClassType value="ExampleMod.MySubModule"/>
<Tags>
<Tag key="DedicatedServerType" value="none" />
<Tag key="IsNoRenderModeElement" value="false" />
</Tags>
</SubModule>
</SubModules>
<Xmls/>
</Module>
Visual Studio による作業
プロジェクトの作成と設定
1. 新しいプロジェクトの作成
ドロップダウンリストは、「すべての言語」を「C#」に、「すべてのプロジェクトの種類」を「ライブラリ」にします。
下の方に「クラスライブラリ (.NET Framework) C# クラスライブラリ(.dll)を作成するためのプロジェクトです」があるはずなので選択します (「クラスライブラリ .NET Standard または .NET Core を対象とする…」と間違えないように)。
2. プロジェクトの構成
プロジェクト名は、今回は練習用の ExampleMod です。フレームワークが 4.7.2 になっていることを確認しておきましょう。
3. 参照の設定
新規プロジェクトが作成されて Visual Studio が開いたら、プロジェクト(P) メニューから、参照の追加(R)... を選択します。
参照マネージャー下部の「参照(B)...」をクリックし、以下のフォルダにある DLL を全て追加し、OK を押してください。
- [Bannerlord インストールフォルダ]\bin\Win64_Shipping_Client (TaleWorlds.○○.dll だけ。ただし、TaleWorlds.Native.dll は選択しないでください。)
- [Bannerlord インストールフォルダ]\Modules\CustomBattle\bin\Win64_Shipping_Client
- [Bannerlord インストールフォルダ]\Modules\Native\bin\Win64_Shipping_Client
- [Bannerlord インストールフォルダ]\Modules\SandBox\bin\Win64_Shipping_Client
- [Bannerlord インストールフォルダ]\Modules\SandBoxCore\bin\Win64_Shipping_Client (筆者の環境ではここは空っぽ)
- [Bannerlord インストールフォルダ]\Modules\StoryMode\bin\Win64_Shipping_Client
コーディング
エディタのタブで Class1.cs をアクティブにします。
勝手にいくつか using されていると思うので、その下に
using TaleWorlds.Core;
using TaleWorlds.Localization;
using TaleWorlds.MountAndBlade;
を記述します。
次に、MBSubModuleBase を継承したクラスを public 宣言してください。この時のクラス名は、準備で作成した SubModule.xml の SubModuleClassType の項目と一致させる必要がありますので、今回は MySubModule となります。
MySubModule クラスに、OnSubModuleLoad() メソッドを protected オーバーライドします。
メソッドには
Module.CurrentModule.AddInitialStateOption(
new InitialStateOption(
"Message",
new TextObject("Message", null),
9990,
() => { InformationManager.DisplayMessage(new InformationMessage("Hello World")); },
() => { return (false, TextObject.Empty); }
)
);
と記述します。(e1.5.10にて InitialStateOption() の引数が変更されました)
コードの最終形は
using TaleWorlds.Core;
using TaleWorlds.Localization;
using TaleWorlds.MountAndBlade;
namespace ExampleMod
{
public class MySubModule : MBSubModuleBase
{
protected override void OnSubModuleLoad()
{
Module.CurrentModule.AddInitialStateOption(
"Message",
new TextObject
("Message",
null),
9990,
() => { InformationManager
.DisplayMessage(new InformationMessage
("Hello World")); },
() => { return (false, TextObject.Empty); }
)
);
}
}
}
となります。
コンパイル
- ビルド(B) メニューから、ExampleMod のビルド(U) を選択します
- ビルドが終わったら、出力先のフォルダ (デフォルトでは %UserProfile%\source\repos\ExampleMod\ExampleMod\bin\Debug) にある ExampleMod.dll を [Bannerlord インストールフォルダ]\Modules\ExampleMod\bin\Win64_Shipping_Client の中にコピペします
動作テスト
Bannerlord を起動し、ランチャーで Singleplayer -> Mods をクリックします。
リストに Example Mod があるはずなのでチェックを入れます。
PLAY ボタンを押すと
You're loading unverified code from: ExampleMod
と表示されますが、ここでは Confirm を押します。
ゲームのメニュー画面に Message の項目が追加されており、クリックすると Hello World と表示されるはずです。
以上で練習用 MOD は完成です。ランチャーで Example Mod のチェックを外しておきましょう。
最終更新:2021年07月15日 19:34