Modガイド



基本概念

Modとは

Modはmodifyingの略である。ハードウェアやソフトウェアを改造して本来の設計とは異なる機能を持たせる事だ。Civilization Vは最初からModとの親和性を念頭に置いて開発されている。Modはユニットや建物のコストを変更したり、AIの挙動を変えたり、新たな文明を追加したりできる。もっと複雑な、Civilizationのエンジンを使って全く別のゲームを実現するModなども可能だ。

本マニュアルではCivilization VのMod制作に必要な知識を紹介する。ただしソースコードそのものの改造や3Dアートワークの変更は含まない。

Civ4との違い

多くのゲームがModに対応しているが、Civilization IVは最初からModを念頭に置いて設計した事で新たな地平を開いた。ゲームのXMLデータベースはテキストエディタで編集でき、スクリプト言語pythonが使われた事でユーザーが関数やイベントを追加でき、ゲームのコアであるDLLもC++コンパイラで編集できた。これによりCivilization IVはただのゲームではなくModの土台となった。

しかしそのエンジンは強力ながら限界もあった。
1.Modを探したりインストールするのが手間だった。
2.複数のModを組み合わせるには相当の労力を要した。
3.pythonは強力な言語だったが、ゲームの処理速度をかなり落としてしまっていた。

Civilization VはIVを発展させ、上記3つの問題を解決した。Vにはゲーム内Modブラウザが組み込まれており、簡単にModを探してインストールできる。複数のModを同時に走らせるのも簡単になった。さらにpythonの代わりにLuaが用いられ、C++で書かれたコアエンジンとの親和性が高まった事で処理速度が向上した。

モジュール方式

Civ4ではModは既存のファイルを置き換える形だった。もしCiv4Civilizations.xmlがModに含まれていれば、オリジナルのCiv4Civilizations.xmlは使われなかった。Civ5では別の方式に変わっている。オリジナルのオブジェクトは全て自動的に継承され、使わない場合は明示的にそれを削除する(削除の方法は後述)。例えば南北戦争Modを作る場合、北部と南部を文明として加え、元々の文明は削除する。

この方式の利点はModがモジュールになる事だ。ゲームの全てのファイルはModに使わないと書かれていない限り必ず参照される。あるModがカナダ文明を追加し、別のModがドイツ文明を削除して別の文明を加え、更に別のModがアトランティス文明を加えるとする。これらのModは何の特別な処置も無しに同時に適用できるのだ。Modの数が増えれば、組み合わせ次第で様々な事ができる。

XML

XMLはデータを記述する言語であり、プログラム言語ではない。Civilization VではXMLはゲーム内の情報を格納するのに使われている。ユニットのコスト、指導者の名前、開始時点のユニットなどは全てXMLで定義されている。

XMLの良い所はテキストエディタで編集でき、プログラミングの知識も必要無い事だ。例えば下の開拓者を定義するXMLを見てみよう。
<Row>
  <Class>UNITCLASS_SETTLER</Class>
   <Type>UNIT_SETTLER</Type>
   <Moves>2</Moves> 
   <Capture>UNITCLASS_WORKER</Capture>
   <HurryCostModifier>33</HurryCostModifier>
   <Domain>DOMAIN_LAND</Domain>
   <DefaultUnitAI>UNITAI_SETTLE</DefaultUnitAI>
   <Description>TXT_KEY_UNIT_SETTLER</Description>
   <Civilopedia>TXT_KEY_CIV5_ANTIQUITY_SETTLER_TEXT</Civilopedia>
   <Strategy>TXT_KEY_UNIT_SETTLER_STRATEGY</Strategy>
   <Help>TXT_KEY_UNIT_HELP_SETTLER</Help>
   <Requirements>TXT_KEY_NO_ACTION_SETTLER_SIZE_LIMIT_HARDCODED</Requirements>
   <Food>true</Food>
   <Found>true</Found>
   <CombatLimit>0</CombatLimit>
   <UnitArtInfo>ART_DEF_UNIT__SETTLER</UnitArtInfo>
   <UnitArtInfoCulturalVariation>true</UnitArtInfoCulturalVariation>
   <PortraitIndex>0</PortraitIndex>
   <IconAtlas>UNIT_ATLAS_1</IconAtlas>
</Row>

上記によって開拓者が定義されている。定義は十数個の要素から成り、要素は開始タグ(<>で囲まれたもの、<Moves>など)と終了タグ(</>で囲まれたもの、</Moves>など)を持っている。開始タグと終了タグの間がデータである。この例では2、つまり移動力2というデータ。2を3にすれば開拓者の移動力は3になる。

<Row>と</Row>もタグである。開拓者の定義全体がこの要素の中の子要素である。

今はまだ全ての要素の意味が分からなくても慌てない様に。タグは読みやすく工夫されており、例えば<Domain>DOMAIN_LAND</DOMAIN>は開拓者が陸上ユニットである事を示している。<Capture>UNITCLASS_WORKER</Capture>は捕獲されると労働者に変わる事を表している。

要素の中に他の要素を入れる事もできる。上記の例ではRow要素が他の全ての要素を含んでいた。もっと複雑な例もある:

Mod1.jpg

上記のうち、青枠に囲まれた物がGameData要素である。赤枠に囲まれたのがSpecialists要素。Specialists要素の中には2つのRow要素が入っており、Row要素の中には様々な要素があり専門家ごとのパラメータを定義している。緑枠に囲まれた最初のRow要素は芸術家の定義であり、紫枠で囲まれた中はその中の一つのパラメータである。

スキーマ

スキーマはXML要素の定義である。例えば<Moves>タグが文字列データを持つか、論理型か、整数型かといった事を決定する(Movesは整数型である)。また要素のデフォルト値も設定する。記述が無い場合はこの値が使われるので、Civ4と違い全ての属性を一々書き込まなくても良くなった。

ユニットの属性のうち、前述の開拓者の定義には含まれていない物が大量にある。例えば開拓者が略奪を実行できるかどうかは記述が無い。これに関しては、Pillageという要素が次の様に定義されている:

  <Column name="Pillage" type="boolean" default="false"/>

このスキーマはPillage要素が論理型である事を示している。つまり<Pillage>true</Pillage>または<Pillage>false</Pillage>の形を取り、それ以外はあり得ない。またデフォルト値がfalseに設定されている。それゆえこれがfalseのユニットの定義にはこの要素を記述する必要が無い。そういうわけで開拓者の定義にはPillage要素が書かれていない。

オブジェクトにどんな属性があるかを知りたい場合、そのオブジェクトのスキーマを参照する。使われていない属性や、ゲーム中では使われていないがModには利用できる属性などもある。CIV5HurryInfos.xmlから例を引いてみよう:
      
<GameData>
  <!-- Table definition -->
   <Table name="HurryInfos">
       <Column name="ID" type="integer" primarykey="true" autoincrement="true"/>
       <Column name="Type" type="text" notnull="true" unique="true"/>
       <Column name="Description" type="text"/>    <Column name="PolicyPrereq" type="text" reference="Policies(Type)"/>
       <Column name="GoldPerProduction" type="integer" default="0"/>
       <Column name="ProductionPerPopulation" type="integer" default="0"/>
       <Column name="GoldPerBeaker" type="integer" default="0"/>
       <Column name="GoldPerCulture" type="integer" default="0"/>                    
   </Table>
   <!-- Table data -->
   <HurryInfos>
       <Row>
           <ID>0</ID>
           <Type>HURRY_POPULATION</Type>
           <Description>TXT_KEY_HURRY_POPULATION</Description>
           <PolicyPrereq>NULL</PolicyPrereq>
           <ProductionPerPopulation>60</ProductionPerPopulation>
       </Row>
       <Row>
           <Type>HURRY_GOLD</Type>
           <Description>TXT_KEY_HURRY_GOLD</Description>
           <PolicyPrereq>NULL</PolicyPrereq>
           <GoldPerProduction>6</GoldPerProduction>
       </Row>
   </HurryInfos>
</GameData>

上述の中の<Table name="HurryInfos">と</Table>の間がスキーマ定義である。8つの属性が定義されている。ID, Type, Description, PolicyPrereq, GoldPerProduction, ProductionPerPopulation, GoldPerBeaker, GoldPerCultureである。

個別の定義情報は<HurryInfos>と</HurryInfos>の間のRowでなされている。ここには2つのRowがあり、それぞれHURRY_POPULATION(人口を犠牲にして生産を加速)とHURRY_GOLD(金銭を支払って生産を加速)である。PolicyPrereq, GoldPerBeaker, GoldPerCultureの属性は全く使われていない。これらはModで使用できる。

またスキーマはそれが定義する情報と同じファイルの先頭に書き込む。別のファイルになっていたCiv4とは違うので注意せよ。

参照の理解

Civiliztionでは各要素が密接に絡み合っている。ユニットの定義はそれを解禁する技術を参照し、文明の定義はユニークユニットを参照し、指導者の定義は志向を参照する。このため1つの要素を削除しようとすると全ての場所から記述を削らねばならず少々厄介だ。

例えば、石油をゲームから削除するModを作るとする。CIV5Resource.xmlファイルから石油の項を消すだけでは上手く行かない。そういう風にするとロード時にエラーが発生する。地形改善の中に石油を対応する資源として定義しているものがあり、石油を必要とするユニットがあり、石油の産出を増やす志向があり、それらを読み込むときに不具合が起きるのだ。

要素を追加する場合にも同じことが起こる。文明を追加しても、そのユニークユニットや指導者の定義を作っていなければエラーが発生する。

何かを加える時は1つずつ、動く事を確かめながら。まずは既存の要素と組み合わせよう。新しい文明を作る時はまずLEADER_WASHINGTONを指導者に、UNIT_AMERICAN_B17をユニークユニットに設定し、上手く動いたら指導者とUUを加えよう。

XMLファイル構造

XMLファイルの本体はインストールしたフォルダの中の¥assets¥Gameplay¥XML¥に入っている。Civilization IVとは違い、ファイルを直接置き換えるのではないからこの構造はそこまで重要ではない。しかしどこにどんなファイルがあるか分かれば参照するのに便利だ。基本的にスキーマはファイルの頭で定義されており、そこを見ればどんな属性があるかも調べられる。

GlobalDefinex.xmlはゲーム内の様々な設定を含んでいる。開始年代、都市建設時の人口、都市ごとの施設数限界(デフォルトでは無制限)など。この数値を弄るだけで数百種類のルールを変更できる。

AIディレクトリはAIの設定に関するファイルが入っている。ソースコードを書き換える必要があったCivilization IVとは違い、XMLによって簡単にAIを改造できる。都市計画、経済計画、国家戦略(どんな勝利へ向かって進むか)、軍事戦略、戦術、外交、その他全般(拡張速度や金銭の価値判断など)といった物が含まれている。

BasicInfosディレクトリは基礎的な情報の定義が入っている。ユニットの戦闘タイプ、不可視タイプ、所属地形などなど。基本的にこれらはただの宣言であり(属性無しの名前付けのみ)、普通Modで変更はしない。ユニットに不可視属性を付ける場合などにここを参照しよう。

Buildingsには施設を定義する2つのファイルが入っている。1つは施設クラス、もう1つは施設そのものである。

施設クラスは施設の基本的な情報を定義する。例えば兵舎など。ただし1つの施設クラスには複数の施設が属する場合がある。兵舎クラスには兵舎とクレポストという2種類の施設が属していて、それぞれこの定義を参照している。これは文明固有の施設を実装する為の仕様だ。この様にする事で兵舎の代わりにクレポストを建てる文明を実現している。兵舎とクレポストは同じクラスに属していて、どちらにも共通する情報がここで定義されている。

全ての文明は開始時にBUILDINGCLASS_PALACEを与えられる。もし宮殿のUBを作ったら、それはBUILDING_PALACEではなくBUILDINGCLASS_PALACEに属する。これを持つ文明は開始時に宮殿の代わりにUBが建つ事になる。

Civilizationsには文明、都市国家、地域、文明固有能力の定義が入っている。Mod作りは大抵文明の追加から始まるので、これに関しては後で詳しく例を挙げて説明する。

Diplomacyには外交の会話テキストが入っている。

GameInfoには他に置き場所の無いファイルが全てぶち込まれている:

  • CIV5ArtStyleTypes.xmlは都市のArtStyleを定義している。名前を設定しているだけなので特別な事は無い。
  • CIV5Climates.xmlは気候タイプを定義する。乾燥、寒冷、温暖、熱帯など。マップ生成の際に使われる変数を保持している。マップスクリプトを新造するのに比べれば自由度は少ないが、密林・森林・山岳・砂漠などの多寡を変更したマップタイプを作る事ができる。
  • CIV5CultureLeveels.xmlは使われていない。
  • CIV5Cursors.xmlゲーム内で使われているカーソルアニメへのリンク。新たな.aniファイルを追加してリンクを書き込めば新しいカーソルが加わる。
  • CIV5EmphasizeInfos.xmlは使われていない。
  • CIV5Eras.xmlは基本的に遅い時代にゲームを開始した場合に参照される。開始時にどれだけのユニットがあるか、国庫はいくらか、古代遺跡は生成されるかなど。また通常の開始で後の年代に達した際の都市のアートワークの変化なども含まれている。EventChancePerTurnとSoundtrackSpace属性は使われていない。
  • CIV5Flavors.xmlはflavorタグの一覧である。タグは他のファイルで使われる。
  • CIV5ForceControlInfos.xmlは使われていない。
  • CIV5GameOptions.xmlはゲームオプションのタグを定義する。戦闘の迅速化、凶暴な蛮族など。
  • CIV5GameSpeeds.xmlはゲームの速度を定義する。建設速度や人口増加速度などを設定している。
  • CIV5GoodyHuts.xmlは古代遺跡に入った時の結果を定義する。どの結果がどれだけの確率で発生するかはCIV5HandicapInfos.xmlで難易度ごとに定義している。
  • CIV5HandicapInfos.xmlは難易度を定義する。ここを見れば難易度によって何が変わるかがすぐ分かる。例えば"EarliestBarbarianReleaseTurn"は開拓者レベルでは10000である。あまり弄る事は無い部分だが、人間に有利な仕組みを導入したときにAIを強化してバランスを取ったり、AIを強化した際にその分ボーナスを減らしたりできる。
  • CIV5HurryInfos.xmlは緊急生産の方法を定義する。人口や金銭による緊急生産の効率を変更する場合に用いる。
  • CIV5IconFontMapping.xmlはアイコン画像をアイコン表にマッピングする。
  • CIV5IconTextureAtlases.xmlはアイコン表とddsファイルの対応関係を記述する。アイコンを追加したり変更したい場合に便利。
  • CIV5MultiplayerOptions.xmlはマルチプレイのオプションを記述する。ここで定義されているのは文字列とデフォルト値のみで、実質的な管理はソースコードで行われている。ここに新しいオプション項目を追加しても、オプション一覧には表示されるが何の働きもしない。
  • CIV5PlayerOptions.xmlはマルチプレイ以外のオプションを記述する。こちらも実質管理はソースコードの管轄なので変更しても効果が無い。
  • CIV5Policies.xmlは社会政策を定義する。どの政策がどのカテゴリに属するかも含め、全ての属性が記述されている。社会政策の詳細を調べるのに便利。
  • CIV5PolicyBranchTypes.xmlは政策カテゴリの定義。ここに記述されている項目で実際の効用があるのは、あるカテゴリが他のカテゴリと衝突するかどうかのみである。カテゴリを追加したり削除する場合にも用いる。
  • CIV5Processes.xmlは富と研究の生産を定義する。効率を変更したい場合に用いる。
  • CIV5Projects.xmlはプロジェクト(ユートピア計画など)を定義する。スキーマにProject_ResourceQuantityRequirementsという属性があるが、これはゲーム本編では使われていない。Modには利用できる。
  • CIV5SeaLevels.xmlは海面の高さの設定による海タイルの増加を定義する。
  • CIV5SmallAwards.xmlはCiv5中で使われていない。勝利点や人口が閾値を超えた際の報告に関するファイルである。
  • CIV5Specialists.xmlは専門家を定義する。専門家による産出を変更したり、新しい種類を追加したりできる。

  • 最終更新:2010-11-21 15:05:38

このWIKIを編集するにはパスワード入力が必要です

認証パスワード