CIV4UnitClassInfos.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はプログラムですから、内部ではもちろんきっちりと区別しています。
どうなっているのか、図にしてみました。

続きを読む →

CIV4UnitInfos.xml

はじめに

CIV4UnitInfos.xmlの各項目について説明しています。

BtSパッケージ版では

C:\Program Files (x86)\CYBERFRONT\Sid Meier's Civilization 4(J)\Beyond the Sword(J)\Assets\XML\Units\CIV4UnitInfos.xml

にあります。

<Civ4UnitInfos>

ルートタグです。名前空間として、xmlns="x-schema:CIV4UnitSchema.xml"を指定します。

<UnitInfo>

このタグ1つが、ユニットの定義1つと対応しています。

以下<UnitInfo>の中身です。

続きを読む →

CvGameCoreDll.dllの作り方(2018-02)

より簡単な方法が公開されました。このページに従ってもできますが、
DoC全部入りパッケージ版も参照してください。

筆者の環境

  • Windows 10 64bit
  • Civ4 BtS 3.19 パッケージ版

必要なもの

Microsoft Visual C++ Toolkit 2003

http://kael.civfanatics.net/files/VCToolkitSetup.exe

Multi Threading Librarires

http://kael.civfanatics.net/files/msvcrt.lib
http://kael.civfanatics.net/files/msvcprt.lib
C:\Program Files (x86)\Microsoft Visual C++ Toolkit 2003\lib にコピーします。

Windows 7 SDK

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にチェックを入れておきます。

MakeFile 2.3

https://forums.civfanatics.com/attachments/makefile_2-3-zip.367602/

やってみる

続きを読む →

それからのPython 10

はじめに

  • その9のつづき
  • 簡単なスペルの仕組みをつくってみる
  • 4部作のうちの4回目
  • ついに各スペルの実装へ

湧き水

お待たせしました!個別のスペル処理です。まず湧き水を見てみましょう。

続きを読む →

それからのPython 9

はじめに

  • その8のつづき
  • 簡単なスペルの仕組みをつくってみる
  • 4部作のうちの3回目・Python共通編
  • クラスを活用する

スペル情報クラス

スペル情報クラスです。BuildingInfoやUnitInfoのスペル版のようなイメージで、
このクラスを通してスペルのいろいろな情報を取得することができるようにします。

続きを読む →

それからのPython 8

はじめに

  • その7のつづき
  • 簡単なスペルの仕組みをつくってみる
  • 4部作のうちの2回目・Python準備編
  • オブジェクト
  • リスト操作

Pythonファイル

Python側のファイル構成はいつもの感じです。
EntryPoints\CvEventInterface.pyはいずれかのKujira MODから使いまわします。
忘れてしまった方はこちらにも置いてあります。

└─kujira_promospell
    └─Assets
        ├─Python
        │  ├─KujiraEventManager.py
        │  │
        │  └─Entrypoints
        │      └─CvEventInterface.py
        │
        └─XML
            ├─Text
            │  └─Text_Kujira.xml
            │
            └─Units
                └─CIV4PromotionInfos.xml

続きを読む →

それからのPython 7

はじめに

  • その6のつづき
  • 簡単なスペルの仕組みをつくってみる
  • 4部作のうちの1回目・XML編

設計しよう

実際のMODの例として、簡単なスペルをつくっていきたいと思います。
簡単のために、以下の仕様でつくることにします。

  • スペルと昇進を1対1で対応させる
  • 発動条件は昇進を取得したとき一回きりとする
  • スペル昇進を取れるのは火器ユニットとする
  • 具体的なスペル効果は以下の3種類とする
  • 湧き水:砂漠が平原に変化する
  • 毒散布:周囲1マスの敵対ユニットに弱体化昇進『毒』(戦闘力-20%)を与える
  • 火炎幕:周囲1マスの敵対ユニットに最大HPの10%のダメージを与える
    ただしこれによって最大HPの60%を切ることはないようにする
  • 湧き水において砂漠以外で発動したときは不発になるが、昇進は戻ってこないようにする

続きを読む →

付録:継承2

はじめに 付録:継承1のつづき 続・継承について 今回は理論回です。この回に出てくるコードはすべてMODではなく ただのPythonプログラムになっ

続きを読む →

付録:継承1

はじめに 継承について 今回は理論回です。この回に出てくるコードはすべてMODではなく ただのPythonプログラムになっていますので、paiza

続きを読む →

それからのPython 6

はじめに

  • その5のつづき
  • もっともっとクラスをつかう
  • 別ファイルからもつかう

コードを読む

Civ4からあらかじめ提供されているクラスはまだまだあります。
今回はその中から比較的簡単で読みやすいクラスを例に
実際にコードを読み解いてみたいと思います。

続きを読む →

付録:getUnitList()

はじめに それからのPython その6の付録 全ユニットを列挙するには 読む 早速 C:\Program Files (x86)\CYBERFRONT\Sid Meier's Civilization 4(J)\Beyond the Sword(J)\Assets\Python\Pyhelpers.py 1 を開いて、 getUnitList()というメソッ

続きを読む →

それからのPython 5

はじめに

  • その4のつづき
  • もっとクラスをつかう
  • 変数のスコープ

インスタンスの中のインスタンス

インスタンス変数にクラス型の変数を使う例を見てみましょう。

題材は、ちょっと賢い建造物クラスKujiraBuildingと、
それを用いて
《建造された都市で生産されたユニットだけでなく、
その都市で立ち止まったユニットにも衛生兵Ⅰを付与する赤十字》
をつくることです。

続きを読む →

それからのPython 4

はじめに

提供されているクラスを探訪してみる

新しいクラスをつくる体験をしたところで、
既存のクラスを使ってみる体験もしてみます。
APIリファレンスを見ながら、すすめていきましょう。

左上フレームにリストされているのが、クラス名(型名)です。
ためしにCyCityをクリックしてみましょう。
すると、右フレームにCyCity型のインスタンスメソッドがずらずらーっと出てきます。
CyCity型のメソッドだけでもずいぶん数があります。
流し読みしつつ、気になったのを見ていきましょう。

なお、色付き文字になっているのはです。例えば、
BOOL - ブール型(真と偽の2択)
INT - 数値型
VOID - なし(戻り値を返さないもの)
茶色 - なにかのID(基本的なふるまいはINTと同じ)
緑色 - クラス型
こんな具合です。

続きを読む →

それからのPython 3

はじめに

準備

kujira_classというMODを新しく作ります。

フォルダ構成

└─kujira_class
    └─Assets
        └─Python
            │─KujiraEventManager.py
            │
            └─Entrypoints
                 └─CvEventInterface.py

続きを読む →

それからのPython 2

はじめに

  • その1のつづき
  • いろいろ表示してみる

-4000年

gc.getGame().getGameTurnYear()により現在の年を取得します。
これによって得られる値は数値型ですから、フォーマット文字列により埋め込んで
Unicode文字列を作り、表示してあげます。

コードはこうなります…

続きを読む →

それからのPython 1

はじめに

これは何か

これは、
「はじめてのPythonMOD」シリーズの続きです。
もうちょっとPythonの書き方について勉強して、
より思い通りに記述できるようになろう、というのが大きな目的です。

これは何でないか

これは、前シリーズよりもさらに技術的な解説、Pythonの文法の解説に偏重しています。
また、「はじめてのPythonMOD」程度のMOD制作経験を前提としています。
コピペですぐ動くコードはあまりないかもしれません。

続きを読む →

はじめてのPythonMOD 7

はじめに

  • その6のつづき
  • XMLとPythonの合わせ技・Python編

Python

残った効果「都市圏内をすべて草原化する」なんてことは
XMLではできません。Pythonで実装していきましょう。

構想

いつもどおり、「いつ・どういう条件で・何をするか」を明らかにする必要があります。
「建造物が建ったとき」「それが肥沃化の神殿であれば」まではすぐにわかります。
「都市圏内を草原化する」……都市圏内とは何でしょうか?

続きを読む →

はじめてのPythonMOD 6

はじめに

  • その5のつづき
  • XMLとPythonの合わせ技・XML編
  • あくまでPythonのチュートリアルなので、XMLの詳しい話にはあまり踏み入りません

構想

これまでは既存の動作を変更してばかりでした。
Pythonでしかできない効果を持った新しい建造物を作りましょう!
とりあえず”いつもの”を作ります。

└─kujira_fert
    └─Assets
        └─Python
            ├─KujiraEventManager.py
            │
            └─Entrypoints
                 └─CvEventInterface.py

続きを読む →

はじめてのPythonMOD 5

はじめに

  • その4のつづき
  • リストと繰り返し
  • 他のイベント

今日のMOD

準備

例によってkujira_forというMODを作ります。
kujira_ifをフォルダごとコピーして、フォルダ名をリネームしましょう。

└─kujira_for
    └─Assets
        └─Python
            │─KujiraEventManager.py
            │
            └─Entrypoints
                 └─CvEventInterface.py

構想

《建造物が建設されたとき、その建造物がダンならば、
 都市と同じタイル上にいる全ユニットに教練Ⅰと教練Ⅱを与えるMOD》
を作りましょう。
捕まえるイベントをいつもと変えているほか、ユニットへの操作を入れています。

バニラの建造物によくある
「この都市で生産されたユニットに教練Ⅰと教練Ⅱ」
との違いに注意してください。
今作ろうとしているのはダンが建設完了したその瞬間に
都市直上にいたユニットに影響を与える一回限りの即時的な効果です。

続きを読む →

はじめてのPythonMOD 4

はじめに

  • その3のつづき
  • その3でMODひとつしか作れなかったので応用編の別立て

もう少し先へ

前半戦たるその3では
《都市が建設されたとき、所有者の志向が防衛志向ならば、その都市のタイルに弓兵を3体即座に作成するMOD》
を作りました。少し拡張してみましょう。

「弓兵固定ではなく、時代に合わせた防衛ユニットが出るようにしたい」

と思ったとします。が、少々厄介です。
というのも、「時代に合わせた防衛ユニット」という表現があいまいなのです。
これをプログラムするには「どういう条件で」「何が起こるのか」を具体的に定めるところから始めないといけません。

続きを読む →