チュートリアル - XML,DLL,Pythonの連携

MOD/作成情報/チュートリアル - XML,DLL,Pythonの連携
Last-modified: 2009-06-03 19:16:31

MOD/作成情報/チュートリアル - XML,DLL,Pythonの連携 †

概要 †

girl.jpg

ユニットに性別を加えるMODの作成を通して、主にXML,DLL,Python間の連携について学びます。
Civilization Bts 3.13 日本語版を使用。

完成MODダウンロード †

file1167.zip

DLLのソースコードも同封

仕様の決定 †

ユニットの属性に性別を導入します。前人未到の18禁MOD開発への足掛かりであり妄想は広がりますが、初期段階としてまずは極力簡素な仕様を決めましょう。

これを作ります。

MODフォルダ作成 †

MOD名はSexにします。My Documents\My Games\Beyond the Sword(J)\MODS\Sex フォルダを作成。

XMLに要素を加える †

ユニットが性別をもつかどうかの情報をXMLに加えます。ユニットの種類ごとの情報は C:\Program Files\CYBERFRONT\Sid Meier's Civilization 4(J)\Beyond the Sword(J)\Assets\XML\Units\CIV4UnitInfos.xml に書かれていることはご存知でしょう。このXMLにおもむろに要素を加える、とその前に同じフォルダにある CIV4UnitSchema.xml を編集する必要があります。Schema(スキーマ)とはXMLの構造のことです。どの要素にどの要素が含まれているのか、例えば、UnitInfosタグにはUnitInfoが複数含まれていて……、という情報がこのファイルに書かれています。では MODS\Sex\Assets\XML\Units に CIV4UnitSchema.xml をコピーして、エディタで開いてください。"UnitInfo" で検索すると以下のような行が見つかります。

Civ4のコードの変数名にはハンガリアン記法が使われているので従っておきましょう。今回は性別を持つかどうかの真偽値なので boolean の b を頭に付けています。
続いて MODS\Sex\Assets\XML\Units に CIV4UnitInfos.xml をコピーして編集。各 UnitInfo に bHasSex 要素を加えます。

ここでゲームを起動してみましょう。ゲームには何の変化もありませんが、XMLの文法エラーがないことが確認できます。

DLLの編集 †

ユニットオブジェクトに性別属性を追加するためにDLLのC++コードを編集します。DLL作成環境のセットアップはMOD/作成情報/CvGameCoreDLL.dllの作り方を参照。今の段階では元のコードのコピペレベルの事しかしないので、XML編集に比べて格別難解ということはありません。

XML → DLL †

ロードしたCIV4UnitInfos.xmlのbHasSexの値をC++のコードから参照できるようにします。ユニット情報はCvInfo.h/.cppファイル中のCvUnitInfoに保存されるのでこれをいじります。他のXMLの変数がやっていることを真似すればOKです。Read/Writeの順番を一致させるよう気をつけましょう

CvUnitクラス拡張 †

続いて、ユニットクラスに性別フィールドを加えます。CvEnum.hで性別型定義を、CvUnitに性別フィールド・アクセサ・初期化コードを普通に書きます。

最後の行について。CvGame::getSorenRandNum(int iNum, const char* pszLog) は0以上iNum未満のランダムなintを返します。第2引数にはロギングのためランダム数の用途を書きます。

DLL → Python †

これでユニットに性別が付くようになりました。次はPythonからユニットオブジェクトの性別にアクセスできるようにします。ここまで編集したC++のクラス名はCvから始まっていましたが、これをCyに変えたものがPythonからDLLにアクセスするためのラッパークラスです。CyUnit に性別のアクセサを加えます。

ゲームのインターフェースに表示 †

メイン画面の左下のユニット表示欄をカスタマイズするため、C:\Program Files\CYBERFRONT\Sid Meier's Civilization 4(J)\Beyond the Sword(J)\Assets\Python\Screens\CvMainInterface.py を置き換えます。MODS\Assets\Python\Screens にコピーして編集。

これで完成です。ではゲームを起動してMODをロードしましょう。どこでつまづいたかを調べるのは結構大変なので、実際の開発の際は少しの修正ごとにこまめに確認することをお勧めします。

chu.jpg

ジャガ男さんとジャガ子さんが麦畑

以上です。お疲れ様でした。