#author("2017-07-02T17:14:38+09:00","","") *その2 [#mf806416] #contents **前回の復習 [#k83d7d7a] 前回説明した"KaitakuRunner"では、以下のような流れでMODを作りました。 -MODの名前を決め、My Games\Beyond the Sword(J)\Modsの下に、これから作るMODを格納するフォルダを作る。 -作ったフォルダの下に、BtSのAssetsフォルダ以下のディレクトリ構造を複写し、修正を行うファイルをコピーする。 -コピーしたファイルの内容を修正する。 どんな複雑なMODであっても、この点において作り方は同じです。 **MODの基本は「置き換え」 [#e1fe1642] Civ4のMODは''ファイルの置き換え''によって成り立っています。~ 繰り返しになりますが、重要なことなのでもう一度説明しましょう。 #ref(ModTutorial10.png,nolink) Civ4のゲーム内容に関するデータは、図の緑枠、"Assets"フォルダ以下に大量に配置されています。((図にはありませんが、Warlords(J)\Assets以下にもあります))~ 同様に、MODの内容に関するデータは、図の茶色枠、"Assets"フォルダ以下に配置されています。~ この緑枠部分の中身(青枠で括られたファイル)を、茶色枠部分の中身(赤枠で括られたファイル)で''置き換える''、というのがMODの働きです。~ '''(本当にファイルが置き換わるわけではありません。MODをロードしている間だけ、あたかも置き換えられたかのようにふるまう、という意味です。)'''~ ~ KaitakuRunner MODの場合は、赤枠内のファイルが CIV4UnitInfos.xml だけなので、これ1つだけが置き換えられましたが、大型MODであれば、Assets以下のほとんど全部が置き換えられるということもありうるでしょう。 以上より、MODを作る時は +変えたい内容が、Assets以下(緑枠内)のどのファイルに記述されているのか(=どのファイルを変更すればいいのか)を把握する。 +改変するファイルを、作成中MODフォルダ内(茶色枠内)の対応する場所にコピーする。 +そのファイルを編集する。 という手順を踏めばいいわけです。 ここで注意。~ [[その1>../その1#k01cb313]]で、元となるデータの場所は三箇所あると説明しました。CIV4UnitInfos.xmlは、この三箇所のAssetsそれぞれの下に存在します。~ 今作っているのはBtS用のMODなので、''BtSのフォルダ内''にあるファイル、つまり -&color(blueviolet){C:\Program Files\CYBERFRONT\Sid Meier's Civilization 4(J)\''Beyond the Sword(J)''\Assets\XML\Units\CIV4UnitInfos.xml}; をコピーしてください。他の CIV4UnitInfos.xml はゲームのバージョンが異なるため、BtSで追加されたユニットや、新たなルールに基づく性能の記述がありません。元にするファイルを間違うと、存在するはずのデータが存在しないがため、不具合を引き起こしてしまいます。 **XMLの「キー」を理解しよう [#g1845b88] 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に対応するキー''なのです。~ 実際の文字列は、&color(blueviolet){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>という要素)には''&color(olivedrab){&#38283;&#25299;&#32773;};''という日本語には見えないデータが記されていますが、これは「開拓者」という文字列を表しています。~ Civilization4のテキストデータ(&color(blueviolet){\Assets\XML\Text\};以下にあるxmlファイル)は、ISO-8859-1(Latin-1)という文字コードを使用しているため、日本語のマルチバイト文字をそのまま記述することができません。そのため、こうした特殊な表記法(数値文字参照といいます)を使っています。 '''(数値文字参照への変換は、以下のサイト等で行うことができます。)''' -[[文字列 → 数値実体参照変換:http://yasu.asuka.net/orkut/conv.html]] -[[みんなの知識【ちょっと便利帳】 - 文字列と数値文字参照(文字参照)の変換スクリプト - 機種依存文字文字化け防止:http://www.benricho.org/moji_conv/15.html]] -[[10進、16進文字コードin HTMLユニコード:http://code.cside.com/3rdpage/jp/unicode/converter.html]] これを見ると、"TXT_KEY_UNIT_SETTLER"というキーに対応する文字列は、英語では"Settler"、日本語では「開拓者」である、ということがわかります。 ***Latin-1について [#k56e5be6] さきほど、Civilization4のテキストデータはISO-8859-1(Latin-1)という文字コード使用していると述べましたが、これはウムラウト(ä)やサーカムフレックス(â)といった欧州文字を表現するための文字コードです。~ -参考: [[ISO/IEC 8859-1 - Wikipedia:http://ja.wikipedia.org/wiki/ISO/IEC_8859-1]] Latin-1は8bit(1byte)の符号化方式なので、2byte以上のマルチバイト文字を扱えません。そのため日本語版Civilization4では、前述の数値文字参照を用いて日本語を記述する方法を採っています。 さて、自分でMODを作るときも、こんな面倒な方法で日本語を書かなければならないのでしょうか?~ 実は、そんなことはありません。~ テキストデータを記述するxml(&color(blueviolet){\Assets\XML\Text\};以下に作るxmlファイル)に限っては、CIV4UnitInfos.xml のように元ファイルをコピーする必要はありません。自分で適当な名前のxmlファイルを作り、追加変更したいキーの内容だけを記述すれば済みます。~ 日本語用のMODを作るのであれば欧州文字は必要ないでしょうから、Latin-1に拘る必要はありません。 自分で新たに作成するファイルは、UTF-8やShift-JISなど日本で普及している文字コードで書いてしまえばよいのです。それで問題なく読み込んでくれます。~ **第2のMOD作り [#s4649aa9] 以上を踏まえて、KaitakuRunnerに続く第2のMODを作ってみることにしましょう!~ MOD名は…''"SuperWarrior"''とします。~ MODの内容は「ケチュア戦士の戦闘力を100にする」というものです。 ***前準備 [#s236287e] まず、&color(blueviolet){ドキュメント\My Games\Beyond the Sword(J)\Mods};の下に "SuperWarrior" というフォルダを作り、Assets以下のディレクトリ構造を再現します。~ ユニットを変更するわけですから、前回同様、CIV4UnitInfos.xmlが修正を行うべきファイルとなります。~ CIV4UnitInfos.xmlをSuperWarrior以下の然るべき場所へコピーしてください。下図のようになればOKです。~ #ref(ModTutorial11.png,,70%) ここまでは、[[その1>../その1#x49a1a0c]]と同じです。 ***キーを突き止める [#o608ca9a] 次に、コピーしたCIV4UnitInfos.xmlをテキストエディタで開いて、ケチュア戦士の戦闘力を書き換えます。~ ~ さあ、あとはこのファイルを開いて、ケチュア戦士の戦闘力を変更するだけです。~ では、やってみてください!~ ~ …と言われて、ふと気が付くでしょうか。~ 「ケチュア戦士のデータって、どこにあるんだ!?」~ なにせ、700KB超の巨大ファイルです。闇雲に探すだけではうまくいきません。ならばと、エディタの検索機能を使って「ケチュア」で検索しても、ヒットしません。当たり前ですね、前章で説明したように、「ケチュア戦士」という文字列は別のファイルで定義されており、このファイルにおいては、「ケチュア戦士」という''文字列を指し示すキー''を使って記述されているわけです。~ ~ つまり、ケチュア戦士の性能を変更するためには…~ ケチュア戦士に結びつく''何らかのキー''を、突き止めなくてはいけない''のです! ***キー一覧 [#gd2fc70e] ここで便利なページを紹介します。 -[[キー一覧>../../キー一覧#gd446123]] このページには、Civilization4からBeyond the Swordに至るまで、主要なゲーム内要素(指導者やユニットなど)のキーが網羅されています。~ このページを「ケチュア」で検索すると… |BGCOLOR(darkgray):|BGCOLOR(darkgray):|BGCOLOR(darkgray):|BGCOLOR(darkgray):|COLOR(darkgray):BGCOLOR(darkgray):|c |UNIT_TAOIST_MISSIONARY|UNITCLASS_TAOIST_MISSIONARY|Taoist Missionary|道教宣教師|道教伝道師| |BGCOLOR(cornsilk):|BGCOLOR(cornsilk):||||c |BGCOLOR(darkgray):UNIT_WARRIOR|UNITCLASS_WARRIOR|BGCOLOR(darkgray):Warrior|BGCOLOR(darkgray):戦士|BGCOLOR(darkgray):| |UNIT_INCAN_QUECHUA|~|Quechua|&color(,yellow){ケチュア};戦士|| |BGCOLOR(darkgray):|BGCOLOR(darkgray):|BGCOLOR(darkgray):|BGCOLOR(darkgray):|BGCOLOR(darkgray):|c |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行目)がヒットしましたね。~ #ref(ModTutorial12.png,,70%) ***データの変更 [#qdf55ca3] ケチュア戦士の性能を定義している箇所まで辿り着けました。~ いよいよ戦闘力を変更しましょう!~ ~ …と、またここで詰まってしまいます。~ 「戦闘力のパラメータって、どれだ!?」~ ケチュア戦士のデータと言っても、膨大です。テキストエディタで見ると、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に変更して上書き保存します。 #ref(ModTutorial14.png,,70%) '''(4576行目です! 1つのユニットは<UnitInfo>~</UnitInfo>で括られた範囲で定義されていることを忘れないで下さい。一画面には納まらない行数なので、うっかり取り違えて前後のユニットの<iCombat>を書き換えたりしないよう気をつけましょう。)'''~ ***完成 [#n5739a6a] これでめでたく、SuperWarrior MODの完成です!~ ~ さっそく遊んでみましょう。~ #ref(ModTutorial18.png,around,nolink) 戦闘力100のケチュア戦士が、この世界をゲームバランスごと壊滅させてくれます。 #clear #br #ref(ModTutorial16.png,around,nolink) ''棍棒で戦車の装甲を破壊するケチュア戦士の図(笑)。'' #clear このMODも、とりあえずアップロードしておきます。 #ref(SuperWarrior.zip) **まとめ [#p2ae7b82] 今回のまとめ。 -MODは、Assetsフォルダ以下のファイルを置き換えることで成り立っている。 -Civ4のXMLでは「キー」が多く使われている。 -ユニットや建造物などの性能を変更するMODを作るには、修正する対象のキーを知り、それがどこで定義されているかを調べる。 -キーや要素の意味は、[[キー一覧>../../キー一覧]]や[[ユニットの編集>../ユニットの編集]]のように、このWikiに載っていることが多いので活用しよう。 *コメント [#xa534a4b] #pcomment(reply)