雉でもわかる旗の作り方

MOD/作成情報/雉でもわかる旗の作り方
Last-modified: 2012-08-15 20:22:46


はじめに †

以下は文明の旗の画像を作るためのチュートリアルです。
指導者画像とボタンの場合は、適切なサイズにリサイズ→DDSで保存→XML改変ととても簡単に改造することが出来ましたが、旗に関しては少し面倒かもしれません。
旗を作るのに際して重要なことは二つです。一つは文明のカラーと旗に使える色の関係、もう一つは「アルファチャンネル」を理解することです。
この二つともそれほど難しいことではないので、一度覚えてしまえばあとは楽に作業できるようになるはずです。

準備するもの †

・DDSファイルが扱えるペイントソフト
GIMP ttp://www.gimp.org/ (GIMP DDS plugin ttp://nifelheim.dyndns.org/~cocidius/dds/ が必要)
Paint.NET ttp://www.getpaint.net/redirect/wp/index.html
この2つがお勧め(どちらとも日本語に対応しています)
fanaticsではGIMPを使ってる人が多く、チュートリアルスレなどでもGIMPを使って解説されています。
しかし筆者はGIMPは重くて嫌いなのでPaint.NETを使用しています。なのでこの記事でもPaint.NETを使った方法を紹介しています。
GIMPとPaint.NETではアルファチャンネルの表示方法が異なります。
この記事ではPaint.NETを使って説明するので、GIMPを使う際には注意が必要です。

・元となる旗の画像
なんでもOK。
ただし旗の表示サイズは96*96くらいなのであまり大きすぎないものにしましょう。
今回は下の画像から新文明「上杉家」の旗を作ります。
なお、WLでは"Sid Meier's Civilization 4(J)"の部分をWarlords(J)に、BtSではBeyond the Sword(J)にそれぞれ読みかえてください。

uesugiflag.gif


文明のカラーを調べる †

旗がボタンや指導者画像と大きく異なる点は色が2色しか使えないという点です。
下の画像は既存の文明の旗で、左からアメリカ、イギリス、フランス、ドイツ、オランダの旗です。
アメリカなら星条旗をフランスやオランダなら三色旗を使えばよさそうですが、実際には旗には2色しか使えないという制限のためにこのような旗が使われているのです。

americaflag.jpg

ではその旗に使える2色はどこで決められているのかというと、/CYBERFRONT/Sid Meier's Civilization 4(J)/Assets/XML/Civilizations/CIV4CivilizationInfos.xmlの<DefaultPlayerColor>タグで決められています。
アメリカを例にとると<DefaultPlayerColor>タグは「PLAYERCOLOR_BLUE」になっています。
さらにこの「PLAYERCOLOR_BLUE」は/CYBERFRONT/Sid Meier's Civilization 4(J)/Assets/XML/Interface/CIV4PlayerColorInfo.xmlで定義されています。
ではCIV4PlayerColorInfos.xmlを開いてみましょう。

		<PlayerColorInfo>~
			<Type>PLAYERCOLOR_BLUE</Type>~
			<ColorTypePrimary>COLOR_PLAYER_BLUE</ColorTypePrimary>~
			<ColorTypeSecondary>COLOR_PLAYER_WHITE</ColorTypeSecondary>~
			<TextColorType>COLOR_PLAYER_BLUE_TEXT</TextColorType>~
		</PlayerColorInfo>~

この場合、プレイヤーカラー青を指定されている文明は青と白の2色を旗の色として使えます。
さらにプレイヤーカラーという単語がさしているように<ColorTypePrimary>で指定された色は文明のカラーとして国境線やユニットの色などにも使われています。
これ以降では<ColorTypePrimary>で指定された色をプライマリーカラー、<ColorTypeSecondary>で指定された色をセカンダリーカラーと呼んで説明します。

さて話を本題に戻しましょう。
上杉家の旗は白地に黒なので白と黒の2色を使うことにしたいと思います。
文明のカラーを黒にすると蛮族とかぶってしまうので、白をプライマリーカラー、黒をセカンダリーカラーにします。
CIV4PlayerColorInfo.xmlを見てこれと同じ組み合わせがあればそのまま使えるのですが、既存の「PLAYERCOLOR_WHITE」はプライマリー白・セカンダリー赤となっています。
そこで新しく「PLAYERCOLOR_UESUGI」を作ることにしましょう。
PlayerColorInfoで始まる部分をコピペして、プライマリー白・セカンダリー黒にします。
TextColorTypeというのはゲーム中で表示される文字の色なので基本的にプラーマリーカラーと同じ色でいいと思います。
今回の「PLAYERCOLOR_UESUGI」の場合はこのようになります。

		<PlayerColorInfo>~
			<Type>PLAYERCOLOR_UESUGI</Type>~
			<ColorTypePrimary>COLOR_PLAYER_WHITE</ColorTypePrimary>~
			<ColorTypeSecondary>COLOR_PLAYER_BLACK</ColorTypeSecondary>~
			<TextColorType>COLOR_PLAYER_WHITE_TEXT</TextColorType>~
		</PlayerColorInfo>~


なおゲーム内で使える色については/CYBERFRONT/Sid Meier's Civilization 4(J)/Beyond the Sword(J)/Assets/XML/Interface/CIV4ColorVals.xmlで定義されています。
新しい色を使いたい場合はこちらも編集する必要があります。

		<ColorVal>~
			<Type>COLOR_PLAYER_BLUE</Type>~
			<fRed>0.21</fRed>~
			<fGreen>0.40</fGreen>~
			<fBlue>1.00</fBlue>~
			<fAlpha>1.00</fAlpha>~
		</ColorVal>~

それぞれの値は指定したい色のRGBの数値を255で割ったものです。

colorbar.jpg

上記の色(COLOR_PLAYER_BLUE)を指定したい場合は
R:52/255=0.21、G:102/255=0.40、B:255/255=1.00、アルファチャンネル:255/255=1.00となります。

アルファチャンネルについて知る &dagger;

さて旗に使う色が決まったら次は旗の画像を作りましょう。
ここで重要になるのが「アルファチャンネル」というものです。
アルファチャンネルとは透明度のことを言います。
DDS形式の画像はRGBによる色の情報とは別に、完全な透明(無色)から完全な不透明(背景の色をまったく通さない)までの透明度の情報を持っています。
ではこのアルファチャンネルが旗にどのように使われているのか下の図を見てください。

orandaflag.jpg

これはオランダ(プライマリー:オレンジ、セカンダリー:黒)の旗の例です。
この図のように
プライマリカラー→旗の下地
セカンダリーカラー→図柄
という風に色が反映されます。
新しく旗を作るにはこの2枚目の図柄の画像を作ることになります。
ここで2枚目の画像を見てください。
2枚目の画像でライオンの周囲に白とグレーの市松模様がありますが、この部分がアルファチャンネルでの無色の部分です。
この図柄の画像で
色が指定されていて完全な不透明な部分→画像での色が何色だろうが全部セカンダリーカラーに変換
無色を指定している部分→下地が現れる、つまりプライマリカラーになる
となります。
なので無色に指定しないと下地のオレンジが見えなくなり真っ黒な旗になってしまいます。
これらのことをよく踏まえたうえで画像を作りましょう。

※GIMPのアルファチャンネルの表示について
Paint.NETでは無色の部分は市松模様で表示されていますが、
GIMPでは無色の部分は黒で表示されます。
以降の部分ではこの表示方法の違いに注意しながら読んで下さい。

画像を作る &dagger;

ではさっそく画像を作っていきたいと思います。

flag1.jpg

元となる画像を適当にトリミングしてから、まずは96*96にリサイズします。

flag2.jpg


flag3.jpg

指導者画像の場合と同じく旗は横に25%圧縮されて表示されるので
サイズ変更で128*96にリサイズします。

flag4.jpg


flag5.jpg

そして今度は「キャンパスサイズ変更」で128*128に。

flag6.jpg

こんな感じに少し横長になります。

flag7.jpg

このまま保存してしまうと、白の部分は透明ではないため下地が反映されません。
それどころか白い部分→色がついてる→セカンダリーカラーに変換、となり全面真っ黒の旗になってしまいます。
なのでこの白の部分を消して完全な透明にする必要があります。
Paint.NETでは消しゴムで消せば透明にすることが出来るのですが、それは非常に面倒くさい作業です。
なのでツールにある「魔法の杖」を使いましょう。

flag8.jpg

「魔法の杖」を選んで白い部分をクリックすると下のようになります。

flag9.jpg

この状態から「Ctrl+X(切り取り)」を押すことで一瞬で白い部分をすべて消すことが出来ます。

flag10.jpg

残った白い部分もすべて切り取ってこれで画像の完成です。

flag11.jpg


DDS形式で保存する &dagger;

できあがった128*128の画像ファイルを.ddsで保存します。

flag12.jpg

このさい必ずDXT3(明示的アルファ)にしてください。civではこの形式しか認識しません。

flag13.jpg

これで旗のDDSファイルが完成しました。

flag14.jpg

XMLを改変する &dagger;

画像が出来たら次にXMLを書き換えます。
改変する必要があるのは/CYBERFRONT/Sid Meier's Civilization 4(J)/Assets/XML/Art/CIV4ArtDefines_Civilization.xmlと/CYBERFRONT/Sid Meier's Civilization 4(J)/Assets/XML/Civilizations/CIV4CivilizationInfos.xmlの二つだけです。
まずはCIV4ArtDefines_Civilization.xml。
CivilizationArtInfoタグの部分を適当にコピペします。
Typeの部分を「ART_DEF_CIVILIZATION_文明名」に変更。
Pathに作ったDDSファイルを指定すればOK。
今回の上杉謙信の場合はこのようになります。

	<CivilizationArtInfo>~
			<Type>ART_DEF_CIVILIZATION_UESUGI</Type>~
			<Button>,Art/Interface/Buttons/Civilizations/Uesugi_button.dds</Button>~
			<Path>Art/Interface/TeamColor/uesugi_flag.dds</Path>~
			<bWhiteFlag>0</bWhiteFlag>~
		</CivilizationArtInfo>~

buttonタグ内は、「犬でも分かるボタンの作り方」を参考にして、60*60のボタンを新たに作り、設置・指定してください。なお、ボタンは2色にこだわる必要はありません。
また、bWhiteFlagというタグがありますが、この値を1にすると文明のカラーに関係なく旗の下地が白になります。
例えば上に上げたオランダの旗を例に取ると、文明のカラーはオレンジですが下地が白+図柄は黒という旗を作ることが出来ます。

次にCIV4CivilizationInfos.xml。
CivilizationInfosで新文明を作り、<ArtDefineTag>に「ART_DEF_CIVILIZATION_文明名」を指定します。残りのタグは「文明の編集」を参考に埋めてください。
これでXMLの改変は終了です。

完成 &dagger;

実際のゲーム中ではこんな感じになります。

flag15.jpg
flag16.jpg


補足 &dagger;

だいぶ説明が長くなってしまい分かりにくい部分が多くなってしまったかもしれません。
今回の説明でよく分からなかったという人には既存文明の文明のカラーを変更してみることをお奨めします。
いろいろなカラーに変更してそれを見比べればなんとなく分かってくると思います。
一度分かれば簡単なことなのでがんばって挑戦してみてください。

任意の画像を使って旗を作りたい場合 &dagger;

旗に使いたい画像を用意する
その画像全体にアルファチャンネルをかける
CIV4ArtDefines_Civilization.xml内の旗を適用させたい文明のbWhiteFlagタグの値を1にする
適切なフォルダに作った旗のddsファイルを配置する
終了

旗作成に関するページがここしか無いのでここに記しておく
詳しい原理は省略する、知りたければcivfanを参照すること