はじめてのMOD作り その5

MOD/作成情報/はじめてのMOD作り その5
Last-modified: 2009-07-07 01:45:45

MOD/作成情報/はじめてのMOD作り その5 †

MOD/作成情報/はじめてのMOD作り その4の続き


信長MOD (続き) †

「はじめてのMOD作り」も、いよいよ最終回です。
集大成となる「信長MOD」を、完成させましょう!

前回は、CIV4LeaderHeadInfos.xmlまで作ったのでしたね。
編集対象ファイル7つのうち、残り6つの編集に進みましょう。

文明と指導者を関連付ける †

次は、XML\Civilizations\CIV4CivilizationInfos.xml*1 です。
このファイルは文明についての情報を定めています。XMLEditor.NETで開くと…、

ModTutorial46.png

ユニットや指導者のとき*2と同様の構造ですね。<CivilizationInfos>の下に、たくさんの<CivilizationInfo>がぶら下がっています。それぞれの<CivilizationInfo>の下に、ひとつの文明の情報が詰まっている…、と想像がつくでしょう。

日本文明は、<Type>タグの内容が "CIVILIZATION_JAPAN" のものです*3
その中に、文明を率いる指導者を定義している部分があります。日本文明の部分を見ると…、

<Leaders>
 <Leader>
  <LeaderName>LEADER_TOKUGAWA</LeaderName>
   <bLeaderAvailability>1</bLeaderAvailability>
  </Leader>
 <Leader>
</Leaders>


このように、指導者として徳川家康のみが定められています。
となると…、このMODでやるべきことは、分かりますね。
日本文明の指導者として、織田信長を追加しましょう。

家康の<Leader>部分をコピーして…、

ModTutorial38.png

貼り付け(次ノード)をして、信長の指導者キー LEADER_NOBUNAGAに書き換えます。必ず、 CIV4LeaderHeadInfos.xml で定めた指導者キーと一致させてください。

ModTutorial39.png

これで、CIV4CivilizationInfos.xml は修正完了です。

外交セリフを定義する &dagger;

3つめに編集するファイルは、CIV4DiplomacyInfos.xml。XML\GameInfo フォルダ内にあります。
このファイルでは、外交時にAIが言うセリフを定義しています。

Civ4では、ほとんどの外交セリフは各指導者共通で用いられており*4、信長も交渉成立時には「チャリン!」と言ってくれます。
そういう意味では原則として、信長を加えたからといって外交セリフに手を入れる必要はないわけですが…。

ところが、ひとつだけ、共通のセリフが存在しないものがあります。それは、「初回遭遇時」。
「5万人ずつの奴隷を生け贄として、この出会いを祝おうではないか!」などというセリフを吐けるのはモンテスマだけでしょう。同じように、初回遭遇時のセリフはすべて各指導者固有のもの。つまり、AI信長と遭遇しても、今のままでは話せるセリフが無いのです。
AI信長との初回遭遇時のセリフを定義してあげましょう。

CIV4DiplomacyInfos.xmlの説明にしたがい、このファイルをXMLエディタで開きます。
ます初回遭遇時のキー"AI_DIPLOCOMMENT_FIRST_CONTACT"*5がある部分を見つけ、既存の誰かの<Response>をコピーして、次ノードに貼り付け。
そして<LeaderType>の内容をLEADER_NOBUNAGAに、<DiplomacyText>内の<Text>の内容をAI_DIPLO_FIRST_CONTACT_LEADER_NOBUNAGA_1に変えます(要するに、コピー元キーの指導者名のところを"NOBUNAGA"に置き換える、といういつものやり方です)。

ModTutorial49.png


このファイルで定義しているのは、外交イベント(例:初回遭遇)と、その時のセリフのテキストキー"AI_DIPLO_FIRST_CONTACT_LEADER_NOBUNAGA_1"の対応だけです。
テキストキーに対応する実際のセリフは、このあと別のファイルで記述します。

このファイルを上書き保存しましょう。これでCIV4DiplomacyInfos.xmlの編集は完了です。

Textフォルダ内のXMLのしくみ &dagger;

次は、 XML\Text\CIV4GameText_Objects_BTS.xml と XML\Text\CIV4GameText_Civilopedia_BTS.xml 、そして XML\Text\CIV4GameText_DiplomacyText_BTS.xml の3つです。
XMLTextディレクトリにあるXMLファイルは、Civ4で使われるさまざまな文字列(名称や文章)を定義しています。例えば「その2」で述べた通り、開拓者ユニットの名前キー(TXT_KEY_UNIT_SETTLER)に対応する文字列を、日本語で「開拓者」、英語で"Settler"などと定義しています。

信長MODならば、例えば新指導者の名前が「織田信長」であるという内容を書き加えることになるわけですが…。
今回は、次のような変則的な扱いにします。

1.CIV4GameText_Nobunaga.xmlという別名のファイルを作り、そこに文字列データを格納する。
XML\Textフォルダ内のファイルに限っては、本来のものとは別のファイルにデータを入れてもかまわないのです。そして、後に説明しますが、別ファイルにすれば文字エンコードを変換せず、直接日本語(シフトJIS)を入力できるので楽に作れます。*6
2.XMLEditor.NETではなく、テキストエディタを使う。
Textフォルダ内のファイルはXMLの構造が単純なため、XMLエディタでなくても編集ミスしにくいです。また、筆者の環境ではXMLEditor.NETの文字エンコードの設定変更がうまく働かなかったため。

1について、詳しく説明しましょう。XML\Textフォルダ内のファイルは、実はすべて全く同じ構造をしています。*7
この講座「その2」で示した例を再度取り上げましょう。
CIV4GameTextInfos_Objects.xmlより抜粋

<TEXT>
 <Tag>TXT_KEY_UNIT_SETTLER</Tag>
 <English>Settler</English>
(中略)
 <Japanese>
  <Text>&#38283;&#25299;&#32773;</Text>
(中略)
</TEXT>

注:"&amp;#38283;&amp;#25299;&amp;#32773;"=「開拓者」です。詳細は「その2」参照。

一つの<TEXT>タグの中にあるのは、<Tag>タグに入った文字列キーと、<English><Japanese>などに入った各国語の文字列。
文字列キーと、各国語文字列の対応という単純な構造です。
そして、このファイルは同じ構造の<TEXT>タグが並んでいるだけです。ユニット名だろうが指導者名だろうが技術名だろうが建造物名だろうが、おかまいなし。とにかく、文字列キーと実際の文字列の対応がズラズラっと横並びになっています。そしてファイル全体が<Civ4GameText>タグで囲まれて、おしまい。これだけです。
いえ、このファイルだけではありません。Textフォルダ内の全ファイルが、全く同じ構造をしているのですよ。シヴィロペディアにあるような長文でさえも、一つの<TEXT>にまとめて放り込まれています。とにかく<TEXT>、<TEXT>、<TEXT>……。それだけです。*8
ここからは推測ですが、おそらくCiv4のプログラムは、Textフォルダ内にあるキーと文字列の対応データを、ファイル名だとかデータの意味だとかを意識せずに、<TEXT>の羅列として全部まとめて読み込んでしまうのだと思います。
逆に言えば、文字列データを格納するファイルは、Textフォルダ内にありさえすれば、どんな名前のファイルに書かれていても変わらない、ということになります。
ユニット名だろうが技術名だろうが、「文字列データ」として同列に扱われるから、XMLの構造が単純になり、こういう気の利いたMOD作りが可能になる。「その2」で書いた「XMLでキーを使う利点」が、しっかり表れていますね。

文字エンコードに小細工 &dagger;

というわけで、上記の方針で文字列を定義していきましょう。
テキストエディタで、新規ファイル CIV4GameText_Nobunaga.xml の作成を開始します。
何でもいいので、XML\Textフォルダ*9内にある既存のXMLファイルを、テキストエディタで開いてみましょう。最初のほうは、

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- (数行省略)-->
<Civ4GameText xmlns="http://www.firaxis.com">
 <TEXT>

こうなっています。 <!-- (数行省略)--> *10とある部分には著作権(Copyright)表示などがありますが、XMLにおいて<!--と-->で囲まれた部分は単なる「コメント」として扱われ、本質的な意味は無いので、気にする必要はありません。
ただし、本データ内に入れてしまうと誤作動の原因になるので、コメントを置きたい場合は冒頭や最後にしておいた方がいいでしょう。
このファイルの最後は、

 </TEXT>
</Civ4GameText>


これで終わっています。信長MODで作る新規ファイルも、この構造を真似ればいいわけですから、最初と最後をコピー&ペースト*11します。

そして、ここでひと工夫。
先頭行から encoding="ISO-8859-1"という部分を削除して、 <?xml version="1.0"?>としてしまいましょう。この手法は、MOD/日本語化 にもとづいています。

その意図を解説します。
encoding="ISO-8859-1"というのは、文字エンコードを西ヨーロッパ言語(ISO-8859-1)にするという意味です。これを指定していると、Civ4のプログラムはWindowsで普通に入力した日本語(システム設定に依存しますが、Shift JISになっている人が多いと思います)を読み取ってくれません。この場合、上に示した開拓者の例のように、Unicode実体参照に変換して書かなくてはいけないのです。
しかし、この指定を削除してやれば、Civ4日本語版のプログラムは、普通に入力された日本語をShift JISだと理解して、ちゃんと読み取ってくれるようになります。つまり、&amp;#38283;のような奇妙なものに変換する必要がなくなるわけです!
ただし、この方法を使う場合でも、本来の制御記号である半角の & # ; などを使用するとエラーの原因となるので注意してください。

参考:筆者は、encoding属性を消すのではなく encoding="Shift_JIS" と変更しています。*12実際それでも動作するようです。

これは、CIV4GameText_Nobunaga.xmlという新しいファイルを作る場合だからこそ可能なテクニックです。既存のファイルを修正する場合には通用しません。*13また、日本語・英語だけでなくドイツ語等にも対応したMODを作成したい場合にも使えないでしょう。

さて、これでCIV4GameText_Nobunaga.xmlの骨格ができあがりました。

<?xml version="1.0"?>
<Civ4GameText xmlns="http://www.firaxis.com">
 <TEXT>

 </TEXT>
</Civ4GameText>


文字列データの入力 &dagger;

あとは、中に文字列データを埋めていくだけです。

さあ、どんなデータが必要でしょうか?
信長MODという新指導者追加MODなのですから、指導者が増えることによって新しく必要となる文字列が何なのか、を考えるとよいでしょう。
答は「指導者の編集」のText関連の3つのファイルの説明に書いてありますが、以下の通りです。

グラフィック &dagger;

信長MOD作成も、いよいよ最終段階です。
今までは、XMLの改変だけでMODを作ろうとしてきました。しかし、新指導者の追加にあたっては、XMLだけではどうにもならない部分がひとつ存在します。

…そう、です。
グラフィック…こればかりは、XMLでは作れません。信長をCiv4の指導者として追加するため、外交画面などで現れる指導者・織田信長の絵をなんとか用意しなくてはなりません。あと、外交画面などで使われるボタン(指導者の顔の、小型画像)も必要です。

さて、どうするか。考えられる方法は、2つあります。

1.自分で絵を用意する
アニメーション(ジェスチャーなど)・レンダリング等は専門技術がない限り困難ですが、静止画ならば何とかなります。
2.他の既存指導者の絵を流用する
今回の場合、徳川家康の顔をそのまま、織田信長のものとして採用します。

ここでは、1の方法をとることにします。
そのためには元となる画像が必要です。狩野元秀が描いた有名な信長肖像画のような、著作権が期限切れとなっている画像ならば、利用しても問題ないでしょう。

これを元に、Civ4で使えるdds形式の画像を作る必要があります。その方法の解説を読みましょう。

参考:既存の指導者顔を使い回す場合 &dagger;

指導者画像を用意できない場合は、既存のものを使い回すことになります。
前節で示した方法の2番についても、参考として説明しておきます。

徳川家康の顔グラフィックデータ "ART_DEF_LEADER_TOKUGAWA" を定義した LeaderheadArtInfo をコピーして…、

ModTutorial42.png

末尾にそれを貼り付けて、<Type>タグの内容を ART_DEF_LEADER_TOKUGAWA から ART_DEF_LEADER_NOBUNAGA に変更する。

ModTutorial43.png

これだけで完了です。…そうでしょう?
信長のグラフィックを定義するキーであるART_DEF_LEADER_NOBUNAGA に対して、他のタグの内容が、徳川家康の顔や動きのデータのファイルの場所を指し示しているのですから、これでOKなのです。

ModTutorial44.png


完成 &dagger;

ついに、やっと、信長MODの完成です!


シヴィロペディア

ModTutorial54.png


自分で信長を使う

ModTutorial52.png


AI信長

ModTutorial53.png


さあ、プレイ開始です。存分に楽しみましょう!

MODの公開 &dagger;

MODを自分だけで楽しむぶんには、このまま遊べば問題ありません。
しかし、せっかくMODを作ったのですから、公開してみんなで楽しみを分け合いましょう。

まずは自分でMODのテストプレイを行い、改変した箇所がひととおり問題なく動作することを確認したほうがよいでしょう。
AIとしての挙動を確認したい場合は、「ゲームのカスタマイズ」で開始すると確実に登場させられるので利用しましょう。
そうしたら、公開作業に入ります。

説明書(Readme) &dagger;

MODを利用する人のために、説明書(Readme)を用意すると良いでしょう。
書くべき内容は、MODによってさまざまですが、一般的には以下のようなものが考えられます。

圧縮、アップロード、公開 &dagger;

MOD名フォルダ(Nobunaga)の内容を圧縮して、1つのファイルにします。(形式は何でもかまいません。筆者はzipを主に使っています)

そして、それをアップロードしましょう。
MODをアップロードする場所としては、以下のようなものがあります。*20(2008/9/4現在。リンク切れ等あれば適宜修正してください)

信長MOD まとめ &dagger;

「はじめてのMOD作り」その4~5で学んだ内容を、一般的な形でまとめておきます。これを応用すれば、別のMOD作りに役立つでしょう。

MODに関するあれこれ &dagger;

今までに書ききれなかったことを、トピックス的にまとめておきます。

MOD作りのアイディア &dagger;

「どんなMODを作りたいの?」
まずアイディアが無くては、MOD作りははじまりません。と言いますか、やりたいことがなければ無理にMOD作りを始めず、普通のCiv4をやればいいのです。

筆者としては、一言で言えるような、分かりやすいコンセプトを持ったMODを作ると良い、と思います。

MODデザイン上のアドバイスとして、CivFanaticsのHOW TO Design a Modを紹介します(英語ですが)。以下はそのごく一部の意訳です。

「デザイナーが完璧に仕上げたことを知るのは、つけ加えるものがなくなったときではなく、はぶくものがなくなったときである。」-アントワーヌ・サン=テグジュペリ
新しい建造物を加えるのは容易い。難しいのは、それを真に価値のあるものにすることだ。それは必要か?他に同様の働きをするものは存在しないのか?もし答がノーなら、それをなくすことを考えるべきだ。*23

XMLでできること、できないこと &dagger;

ここまでで習得したノウハウを活かせば、XMLを使って自由自在にCiv4のゲームシステムを改変することができます!
…と言えればいいのですが、実際にはXMLでできることとできないことがあります。

例えば、XML編集によって「特定の地形改善が都市に幸福[icon:happy]をもたらす」ようにすることは、無印では無理ですがBtSにおいては可能なようです。
「特定の地形改善が都市に衛生[icon:health]をもたらす」というのは、無印、BtSともにXMLだけでは不可能のようです。
これはどういうことかというと。
無印では、地形改善が都市に[icon:health][icon:happy]をもたらす、というのは存在しませんでした。*24そしてまた、資源・地形改善の編集を見れば分かるとおり、地形改善についての情報がある CIV4ImprovementInfos.xml には、地形改善がもたらす幸福、衛生という項目はありません。
BtSでは「保安林」の地形改善が導入され、地形改善が[icon:happy]をもたらす場合が存在するようになりました。そこで、XMLの構造も改定され、「この地形改善がもたらす幸福の数 <iHappiness> 」というタグが新設された、ということのようです。

このように、元のCiv4においてゲームシステム上必要とされているパラメータは大抵、MODにおいてもXML編集で変更・追加が可能ですが、Civ4において必要でないパラメータは、MODでもXML編集だけでは変更できないことが多いです。例外はあります。「その文明が好む宗教」を設定したり、宗教ごとにその効果を変えたり、といった、Civ4では必要とされない概念がXMLだけのMODで実現可能です。

Civ4のXMLで使われるタグは決まっており、どのタグでも規定されていないパラメータは変更できない、というわけです。
たまに、「えっ、こんなこともできないの?」と思うこともありえますが、無いものは無いのです。XMLでの改変はあきらめましょう。

ただし、XML以外の部分も変更するのであれば、話は別です。Pythonスクリプトに手を加えることによって、XMLの解析・それに伴う処理自体を変更してしまえば、新しい概念を作ることができるでしょう。

CustomAssetsで使うMOD &dagger;

この文章では、主にMODSフォルダに入れて「このMODを使う」と意識的に指定するような使い方を想定してきました。
ただ、この使い方では、いちどに1種類のMODしか利用することができません。

インターフェースを改善するMODなど、常に使いたい、他のMODとも併用したいというMODは、CustomAssetsでの使用方法にしたがって、CustomAssetsに入れて利用しましょう。

MODを作る側としては、CustomAssetsでの利用を想定するかしないか決めて、適宜Readme等に書きましょう。
主にCustomAssetsに入れて使うことを想定したMODを作る場合は、MODSフォルダではなく、CustomAssetsフォルダをいったんからっぽにして(今までのCustomAssetsとその内容は別の場所に退避しておく)、そこで作成作業をすると良いでしょう。
フォルダの位置関係は、ドキュメント\My Games\Beyond the Sword(J)\MODS\Nobunaga\Assets\XML のかわりに、ドキュメント\My Games\Beyond the Sword(J)\CustomAssets\xml …という感じになります。(AssetsがCustomassetsに対応)

ちなみに、この記事で今まで作ったMODはCustomAssetsでの利用を想定していませんが、小さなMODですから、CustomAssetsに入れてもたぶん動作すると思います。

iniファイル &dagger;

Civ4を起動してMODをロードすると、MOD名フォルダ(例:Nobunaga)直下にiniファイル(例:Nobunaga.ini)が自動的に生成されます。
これはMODを使う際の環境設定ファイルです。今まで説明したような範囲のMODであれば、その内容を指定・編集する必要は特にないと思います。
大型MODで、CustomAssetsとの干渉を嫌う(CustomAssetsを使わせたくない)という場合であれば、 NoCustomAssets = 1 と指定してやるとよいでしょう。

さらなるMOD作りへ &dagger;

これで、語れることはほぼ書きつくしました。「はじめてのMOD作り」なんてタイトルのわりに、けっこう深いところまで来てしまった感じがします。
これまで学んだことを応用すれば、XMLの改変によるMOD作成ならば、かなりのことができるでしょう。例えるなら、我々のMOD技術は古代を終え、中世に入った、というところでしょうか。

しかし、MOD作りへの道はまだはるか遠く。Pythonスクリプトの仕様把握や改変、グラフィック・アニメーションやムービー、音楽、ゲームデザインやバランス調整、などなど、まだまだたくさんのテクノロジーが待っています。
ここから先は、日本語でのノウハウ解説情報がまだ少ないようです。CivFanaticsのMOD作成解説フォーラム など、英語情報を探索する覚悟が必要になってくるでしょう。

「こんなMODを作りたいんだ!」という情熱をもって取り組み続ければ、いつか、Fall from Heaven IIRise of Mankindのような大作MODを作れるかもしれません。
その時はぜひ、いっしょにゲームを楽しませて下さい!

これにて、「はじめてのMOD作り」シリーズは完結です。
ご意見があればコメント欄にお寄せください。もし間違いを見つけたら、勝手に修正していただいても問題ありません、むしろ修正してもらえると助かります。
最後までおつきあい頂き、ありがとうございました。


おわりに &dagger;

最初は誰でも初心者です。Fall from Heaven IIのような高度なMODと自作品を比べたりせずに、できることからこつこつとやっていった方が結果的に長続きして、よいものが作り出せるでしょう。



*1 ファイルパスはNobunagaフォルダからの相対パスで書いています。この場合は、 ドキュメント\My Games\Beyond the Sword(J)\MODS\Nobunaga\Assets\XML\Civilizations\CIV4CivilizationInfos.xml となります。以下同様
*2 CIV4UnitInfos.xmlとCIV4LeaderHeadInfos.xml
*3 "JAPAN"で検索すれば早く発見できるでしょう
*4 実は、特定のAI指導者しかしゃべらないセリフもけっこうあります。熟練のCiv4プレイヤーでも聞いたことのないレアなセリフとかもあったりして。
*5 これが初回遭遇時の外交メッセージのキーだということを知るのに、ちょっと骨が折れました…。他キャラのメッセージ文字列からTextフォルダ内を文字列検索して外交メッセージのテキストキーを知り、そのテキストキーをもとにCIV4DiplomacyInfos.xml内を検索することで判明しました。
*6 Civ4の既存のText内ファイルは日本語やドイツ語その他が混在しており、ヘタに編集するとエディタの相性等から文字エンコード絡みのトラブルの元になるため、編集しないで済む方法があるならそれを採用するのが無難、という理由もあります。
*7 調べた限りでは、たぶん。
*8 正確に言えば、ドイツ語等の男性女性名詞を示す<Gender>や単数複数を示す<Plural>もありますが、日本語では関係ありません。無視できます
*9 Civ4インストールディレクトリ配下のAsset内にあるもの
*10 全角不等号で書いてますが本当は半角
*11 コメント行は消してもOK
*12 このファイルを読むプログラムに、「これはシフトJISのエンコードで書かれていますよ」と教えてあげているので、このほうが適切であると思います。
*13 「開拓者」を「入植者」に変更したいなどの場合。もっとも、開拓者の<TEXT>タグごと切り取って別のファイルに持っていくのなら可能かもしれませんが…。
*14 歴史上の日本人は英語で姓名の順に書かれることが多いようなので、Odaを先に、Nobunagaを後にしています。個人的には現代人もYAMADA, Taroみたいな書き方にするのが良いと思ってます。すごい余談ですが。
*15 <French /> というのは「空タグ」で、<French></French>と同じ意味です。
*16 前回定義した信長のペディアキー、つまり<Description>の内容と一致させます。
*17 自分の文明を表す言葉は他にも[OUR_EMPIRE]があり、その他[OUR_CIV_ADJ]など色々あって文法・文脈などに応じて使い分けられるようですが、未調査。
*18 XML\Art フォルダにコピーしましたよね、もう昔すぎて忘れたかもしれませんが…
*19 犬でも分かるボタンの作り方 や 2ch PCゲーム板 Civ4 MODスレ Vol.17 754など。
*20 ただし、いずれもアップロードできるファイルサイズには限界があります。大型MODを公開したい場合は、自分で大容量アップローダを探すなどしてください。
*21 いま見たら、信長MODがすでにありましたね。ネタかぶりが無いか、調査したつもりだったのですが…(汗)
*22 例えば信長のデータを加えるにあたってハンニバルのをコピー・貼り付けして編集したように
*23 筆者注:ゲーム性を度外視して、自分の思い入れにもとづいて新要素を作るなら、それもありだとは思いますが。
*24 森林により[icon:health]+0.5、というのは「特殊な地形」でありり「地形改善(労働者の仕事の成果)」ではありません。