banner: ‘Middlebrun Island’ by Superior Hiking (トリミング) under a Creative Commons Attribution 2.0.
1884 Words
カテゴリ: XML
CIV4ClassUnitInfos.xmlの各項目について説明しています。
BtSパッケージ版では
C:\Program Files (x86)\CYBERFRONT\Sid Meier's Civilization 4(J)\Beyond the Sword(J)\Assets\XML\Units\CIV4UnitClassInfos.xml
にあります。
ただ一口に「斧兵」といっても、個々の斧兵のことなのか、斧兵という種類のことなのか、
UUを含むのか含まないのか、どれのことなのか、いまいちよくわかりません。
雰囲気で察している方も多いのではないでしょうか。
Civ4はプログラムですから、内部ではもちろんきっちりと区別しています。
どうなっているのか、図にしてみました。
banner: ‘Middlebrun Island’ by Superior Hiking (トリミング) under a Creative Commons Attribution 2.0.
22042 Words
カテゴリ: XML
CIV4UnitInfos.xmlの各項目について説明しています。
BtSパッケージ版では
C:\Program Files (x86)\CYBERFRONT\Sid Meier's Civilization 4(J)\Beyond the Sword(J)\Assets\XML\Units\CIV4UnitInfos.xml
にあります。
ルートタグです。名前空間として、xmlns="x-schema:CIV4UnitSchema.xml"
を指定します。
このタグ1つが、ユニットの定義1つと対応しています。
以下<UnitInfo>の中身です。
811 Words
カテゴリ: C++
より簡単な方法が公開されました。このページに従ってもできますが、
DoC全部入りパッケージ版も参照してください。
http://kael.civfanatics.net/files/VCToolkitSetup.exe
http://kael.civfanatics.net/files/msvcrt.lib
http://kael.civfanatics.net/files/msvcprt.lib
C:\Program Files (x86)\Microsoft Visual C++ Toolkit 2003\lib にコピーします。
http://download.microsoft.com/download/F/1/0/F10113F5-B750-4969-A255-274341AC6BCE/GRMSDKX_EN_DVD.iso
古いPSDK-x86.exeがWindows10でインストールできないようなので
新し目のSDKをISOからインストールします。
64bit版はGRMSDKX_EN_DVD.isoです。名前が紛らわしいので注意しましょう。
マウントして、\Setup\SDKsetup.exeを実行します。
インストール中のInstllation Optionsで、Visual C++ Compilersにチェックを入れておきます。
https://forums.civfanatics.com/attachments/makefile_2-3-zip.367602/
banner: ‘I love nature and nature loves me …..’ by CLAUDIA DEA (トリミング) under a Creative Commons Attribution 2.0.
banner: ‘I love nature and nature loves me …..’ by CLAUDIA DEA (トリミング) under a Creative Commons Attribution 2.0.
スペル情報クラスです。BuildingInfoやUnitInfoのスペル版のようなイメージで、
このクラスを通してスペルのいろいろな情報を取得することができるようにします。
banner: ‘I love nature and nature loves me …..’ by CLAUDIA DEA (トリミング) under a Creative Commons Attribution 2.0.
Python側のファイル構成はいつもの感じです。
EntryPoints\CvEventInterface.pyはいずれかのKujira MODから使いまわします。
忘れてしまった方はこちらにも置いてあります。
└─kujira_promospell
└─Assets
├─Python
│ ├─KujiraEventManager.py
│ │
│ └─Entrypoints
│ └─CvEventInterface.py
│
└─XML
├─Text
│ └─Text_Kujira.xml
│
└─Units
└─CIV4PromotionInfos.xml
banner: ‘I love nature and nature loves me …..’ by CLAUDIA DEA (トリミング) under a Creative Commons Attribution 2.0.
実際のMODの例として、簡単なスペルをつくっていきたいと思います。
簡単のために、以下の仕様でつくることにします。
banner: ‘I love nature and nature loves me …..’ by CLAUDIA DEA (トリミング) under a Creative Commons Attribution 2.0.
Civ4からあらかじめ提供されているクラスはまだまだあります。
今回はその中から比較的簡単で読みやすいクラスを例に
実際にコードを読み解いてみたいと思います。
banner: ‘I love nature and nature loves me …..’ by CLAUDIA DEA (トリミング) under a Creative Commons Attribution 2.0.
インスタンス変数にクラス型の変数を使う例を見てみましょう。
題材は、ちょっと賢い建造物クラスKujiraBuilding
と、
それを用いて
《建造された都市で生産されたユニットだけでなく、
その都市で立ち止まったユニットにも衛生兵Ⅰを付与する赤十字》
をつくることです。
banner: ‘I love nature and nature loves me …..’ by CLAUDIA DEA (トリミング) under a Creative Commons Attribution 2.0.
新しいクラスをつくる体験をしたところで、
既存のクラスを使ってみる体験もしてみます。
APIリファレンスを見ながら、すすめていきましょう。
左上フレームにリストされているのが、クラス名(型名)です。
ためしにCyCityをクリックしてみましょう。
すると、右フレームにCyCity型のインスタンスメソッドがずらずらーっと出てきます。
CyCity型のメソッドだけでもずいぶん数があります。
流し読みしつつ、気になったのを見ていきましょう。
なお、色付き文字になっているのは型です。例えば、
BOOL - ブール型(真と偽の2択)
INT - 数値型
VOID - なし(戻り値を返さないもの)
茶色 - なにかのID(基本的なふるまいはINTと同じ)
緑色 - クラス型
こんな具合です。
banner: ‘I love nature and nature loves me …..’ by CLAUDIA DEA (トリミング) under a Creative Commons Attribution 2.0.
kujira_classというMODを新しく作ります。
└─kujira_class
└─Assets
└─Python
│─KujiraEventManager.py
│
└─Entrypoints
└─CvEventInterface.py
banner: ‘I love nature and nature loves me …..’ by CLAUDIA DEA (トリミング) under a Creative Commons Attribution 2.0.
gc.getGame().getGameTurnYear()
により現在の年を取得します。
これによって得られる値は数値型ですから、フォーマット文字列により埋め込んで
Unicode文字列を作り、表示してあげます。
コードはこうなります…
banner: ‘I love nature and nature loves me …..’ by CLAUDIA DEA (トリミング) under a Creative Commons Attribution 2.0.
これは、
「はじめてのPythonMOD」シリーズの続きです。
もうちょっとPythonの書き方について勉強して、
より思い通りに記述できるようになろう、というのが大きな目的です。
これは、前シリーズよりもさらに技術的な解説、Pythonの文法の解説に偏重しています。
また、「はじめてのPythonMOD」程度のMOD制作経験を前提としています。
コピペですぐ動くコードはあまりないかもしれません。
残った効果「都市圏内をすべて草原化する」なんてことは
XMLではできません。Pythonで実装していきましょう。
いつもどおり、「いつ・どういう条件で・何をするか」を明らかにする必要があります。
「建造物が建ったとき」「それが肥沃化の神殿であれば」まではすぐにわかります。
「都市圏内を草原化する」……都市圏内とは何でしょうか?
これまでは既存の動作を変更してばかりでした。
Pythonでしかできない効果を持った新しい建造物を作りましょう!
とりあえず"いつもの"を作ります。
└─kujira_fert
└─Assets
└─Python
├─KujiraEventManager.py
│
└─Entrypoints
└─CvEventInterface.py
例によってkujira_for
というMODを作ります。
kujira_if
をフォルダごとコピーして、フォルダ名をリネームしましょう。
└─kujira_for
└─Assets
└─Python
│─KujiraEventManager.py
│
└─Entrypoints
└─CvEventInterface.py
《建造物が建設されたとき、その建造物がダンならば、
都市と同じタイル上にいる全ユニットに教練Ⅰと教練Ⅱを与えるMOD》
を作りましょう。
捕まえるイベントをいつもと変えているほか、ユニットへの操作を入れています。
バニラの建造物によくある
「この都市で生産されたユニットに教練Ⅰと教練Ⅱ」
との違いに注意してください。
今作ろうとしているのはダンが建設完了したその瞬間に
都市直上にいたユニットに影響を与える一回限りの即時的な効果です。
前半戦たるその3では
《都市が建設されたとき、所有者の志向が防衛志向ならば、その都市のタイルに弓兵を3体即座に作成するMOD》
を作りました。少し拡張してみましょう。
「弓兵固定ではなく、時代に合わせた防衛ユニットが出るようにしたい」
と思ったとします。が、少々厄介です。
というのも、「時代に合わせた防衛ユニット」という表現があいまいなのです。
これをプログラムするには「どういう条件で」「何が起こるのか」を具体的に定めるところから始めないといけません。