前回説明した"KaitakuRunner"では、以下のような流れでMODを作りました。
どんな複雑なMODであっても、この点において作り方は同じです。
Civ4のMODはファイルの置き換えによって成り立っています。
繰り返しになりますが、重要なことなのでもう一度説明しましょう。
Civ4のゲーム内容に関するデータは、図の緑枠、"Assets"フォルダ以下に大量に配置されています。*1
同様に、MODの内容に関するデータは、図の茶色枠、"Assets"フォルダ以下に配置されています。
この緑枠部分の中身(青枠で括られたファイル)を、茶色枠部分の中身(赤枠で括られたファイル)で置き換える、というのがMODの働きです。
(本当にファイルが置き換わるわけではありません。MODをロードしている間だけ、あたかも置き換えられたかのようにふるまう、という意味です。)
KaitakuRunner MODの場合は、赤枠内のファイルが CIV4UnitInfos.xml だけなので、これ1つだけが置き換えられましたが、大型MODであれば、Assets以下のほとんど全部が置き換えられるということもありうるでしょう。
以上より、MODを作る時は
という手順を踏めばいいわけです。
ここで注意。
その1で、元となるデータの場所は三箇所あると説明しました。CIV4UnitInfos.xmlは、この三箇所のAssetsそれぞれの下に存在します。
今作っているのはBtS用のMODなので、BtSのフォルダ内にあるファイル、つまり
をコピーしてください。他の CIV4UnitInfos.xml はゲームのバージョンが異なるため、BtSで追加されたユニットや、新たなルールに基づく性能の記述がありません。元にするファイルを間違うと、存在するはずのデータが存在しないがため、不具合を引き起こしてしまいます。
XMLでは「キー」という概念が出てきます。
例として、前回編集したKaitakuRunner MODのXMLファイルであるCIV4UnitInfos.xmlをもう一度眺めてみましょう。
ここから先は、ユニットの編集?と見比べながら読み進めると分かりやすいかもしれません。
CIV4UnitInfos.xmlより抜粋
<UnitInfo> <Class>UNITCLASS_SETTLER</Class> <Type>UNIT_SETTLER</Type> : (中略) : <Description>TXT_KEY_UNIT_SETTLER</Description> : (中略) : </UnitInfo>
開始タグ<UnitInfo>から、終了タグ</UnitInfo>までが、1つのユニットの定義です。
この中で、Typeという要素の値(ここではUNIT_SETTLER)が、ユニットと1対1に対応するキーになります。つまり、開拓者というユニットは"UNIT_SETTLER"というキーで表せることになります。
(なお、このゲームのXMLにおけるキーは、半角英大文字[A-Z]とアンダーバー[_]からなる文字列である、と思っておけば間違いありません。)
こうすることで、複雑な性能を持つ1つ1つのユニットを表すのに、単に"UNIT_hogehoge"と書くだけで済むのです。
キーを持つのはユニットデータだけではありません。
上のXML文を見ると、Descriptionという要素に"TXT_KEY_UNIT_SETTLER"という内容(値)が定義されています。これは、このユニットの名称を表しており、実はテキストデータ(文字列)と1対1に対応するキーなのです。
実際の文字列は、C:\Program Files\CYBERFRONT\Sid Meier's Civilization 4(J)\Assets\XML\Text\CIV4GameTextInfos_Objects.xmlで定義されています。
CIV4GameTextInfos_Objects.xmlより抜粋
<TEXT> <Tag>TXT_KEY_UNIT_SETTLER</Tag> <English>Settler</English> : (中略) : <Japanese> <Text>開拓者</Text> : (中略) : </Japanese> </TEXT>
テキストデータのキーはTagという要素で定義されます。以降、言語ごとに実際の名称が記述されています。
日本語に対応する欄(<Japanese>という要素)には開拓者という日本語には見えないデータが記されていますが、これは「開拓者」という文字列を表しています。
Civilization4のテキストデータ(\Assets\XML\Text\以下にあるxmlファイル)は、ISO-8859-1(Latin-1)という文字コードを使用しているため、日本語のマルチバイト文字をそのまま記述することができません。そのため、こうした特殊な表記法(数値文字参照といいます)を使っています。
(数値文字参照への変換は、以下のサイト等で行うことができます。)
これを見ると、"TXT_KEY_UNIT_SETTLER"というキーに対応する文字列は、英語では"Settler"、日本語では「開拓者」である、ということがわかります。
さきほど、Civilization4のテキストデータはISO-8859-1(Latin-1)という文字コード使用していると述べましたが、これはウムラウト(ä)やサーカムフレックス(â)といった欧州文字を表現するための文字コードです。
Latin-1は8bit(1byte)の符号化方式なので、2byte以上のマルチバイト文字を扱えません。そのため日本語版Civilization4では、前述の数値文字参照を用いて日本語を記述する方法を採っています。
さて、自分でMODを作るときも、こんな面倒な方法で日本語を書かなければならないのでしょうか?
実は、そんなことはありません。
テキストデータを記述するxml(\Assets\XML\Text\以下に作るxmlファイル)に限っては、CIV4UnitInfos.xml のように元ファイルをコピーする必要はありません。自分で適当な名前のxmlファイルを作り、追加変更したいキーの内容だけを記述すれば済みます。
日本語用のMODを作るのであれば欧州文字は必要ないでしょうから、Latin-1に拘る必要はありません。
自分で新たに作成するファイルは、UTF-8やShift-JISなど日本で普及している文字コードで書いてしまえばよいのです。それで問題なく読み込んでくれます。
以上を踏まえて、KaitakuRunnerに続く第2のMODを作ってみることにしましょう!
MOD名は…"SuperWarrior"とします。
MODの内容は「ケチュア戦士の戦闘力を100にする」というものです。
まず、ドキュメント\My Games\Beyond the Sword(J)\Modsの下に "SuperWarrior" というフォルダを作り、Assets以下のディレクトリ構造を再現します。
ユニットを変更するわけですから、前回同様、CIV4UnitInfos.xmlが修正を行うべきファイルとなります。
CIV4UnitInfos.xmlをSuperWarrior以下の然るべき場所へコピーしてください。下図のようになればOKです。
ここまでは、その1と同じです。
次に、コピーしたCIV4UnitInfos.xmlをテキストエディタで開いて、ケチュア戦士の戦闘力を書き換えます。
さあ、あとはこのファイルを開いて、ケチュア戦士の戦闘力を変更するだけです。
では、やってみてください!
…と言われて、ふと気が付くでしょうか。
「ケチュア戦士のデータって、どこにあるんだ!?」
なにせ、700KB超の巨大ファイルです。闇雲に探すだけではうまくいきません。ならばと、エディタの検索機能を使って「ケチュア」で検索しても、ヒットしません。当たり前ですね、前章で説明したように、「ケチュア戦士」という文字列は別のファイルで定義されており、このファイルにおいては、「ケチュア戦士」という文字列を指し示すキーを使って記述されているわけです。
つまり、ケチュア戦士の性能を変更するためには…
ケチュア戦士に結びつく何らかのキーを、突き止めなくてはいけない''のです!
ここで便利なページを紹介します。
このページには、Civilization4からBeyond the Swordに至るまで、主要なゲーム内要素(指導者やユニットなど)のキーが網羅されています。
このページを「ケチュア」で検索すると…
UNIT_TAOIST_MISSIONARY | UNITCLASS_TAOIST_MISSIONARY | Taoist Missionary | 道教宣教師 | 道教伝道師 |
UNIT_WARRIOR | UNITCLASS_WARRIOR | Warrior | 戦士 | |
UNIT_INCAN_QUECHUA | Quechua | ケチュア戦士 | ||
UNIT_SWORDSMAN | UNITCLASS_SWORDSMAN | Swordsman | 剣士 | |
UNIT_AZTEC_JAGUAR | Jaguar | ジャガー戦士 |
見事ヒットしました。ケチュア戦士を表すユニットキーは、"UNIT_INCAN_QUECHUA"であることがわかります。
(UNITCLASS_WARRIORというキーもありますが、これは文明固有のユニットと代替元となったユニットをひとまとめにした「ユニットクラス」という概念のキーです。ユニットのキーとは全くの別物で、ケチュア戦士と1対1に対応するものではありません。そのため今回は無視します。)
キーが判明したので、コピーしたCIV4UnitInfos.xmlを"UNIT_INCAN_QUECHUA"で検索すると…ありました!
<Type>UNIT_INCAN_QUECHUA</Type>という行(4455行目)がヒットしましたね。
ケチュア戦士の性能を定義している箇所まで辿り着けました。
いよいよ戦闘力を変更しましょう!
…と、またここで詰まってしまいます。
「戦闘力のパラメータって、どれだ!?」
ケチュア戦士のデータと言っても、膨大です。テキストエディタで見ると、100行以上。しかも、よくわからない名前の要素がいっぱいあります。これを編集しろと言われても困ってしまいますね…。
ここでまた便利なページの紹介です。
このページの CIV4UnitInfos.xml の節を見てください。それぞれの要素が何を意味するのか説明してあります。
ユニットの戦闘力を表す要素は…ありました。<iCombat>です。
というわけで、あとは簡単です。
<Type>UNIT_INCAN_QUECHUA</Type>の先にある<iCombat>を探すと、
<UnitInfo> <Class>UNITCLASS_WARRIOR</Class> <Type>UNIT_INCAN_QUECHUA</Type> : (中略) : <iCombat>2</iCombat> : (中略) : </UnitInfo>
4576行目に見つかりました。2を100に変更して上書き保存します。
(4576行目です! 1つのユニットは<UnitInfo>~</UnitInfo>で括られた範囲で定義されていることを忘れないで下さい。一画面には納まらない行数なので、うっかり取り違えて前後のユニットの<iCombat>を書き換えたりしないよう気をつけましょう。)
これでめでたく、SuperWarrior MODの完成です!
さっそく遊んでみましょう。
戦闘力100のケチュア戦士が、この世界をゲームバランスごと壊滅させてくれます。
棍棒で戦車の装甲を破壊するケチュア戦士の図(笑)。
このMODも、とりあえずアップロードしておきます。
#ref(): File not found: "SuperWarrior.zip" at page "MOD/作成情報/はじめてのMOD作り/その2"
今回のまとめ。
コメントはありません。 Comments/MOD/作成情報/はじめてのMOD作り/その2?