#author("2017-06-08T01:09:30+09:00","","")
#author("2017-08-19T15:08:42+09:00","","")
[[MOD/作成方法]]

* アイコンの作り方 [#ue2242c3]
* 指導者アイコンの作り方 [#e78c2c5a]

指導者のアイコンを例に説明します。
※SDKを用いて、サンプルの「Starter - New Civilization and Leader」をベースに作っているものとしています。

** 画像の用意 [#gf1bec84]

まずは画像を用意しなくては話になりません。
指導者のアイコンは1辺が256,80,64,55,50,45,32ピクセルのサイズのものが必要になります。
画像の内容としては、バニラだと画像サイズより若干小さい円の中に指導者の顔、という感じになっています。

まずは一番大きな256x256の画像を作ります。フォーマットはdds(無圧縮/ABGR8/ミニマップあり)。
以降の説明ではこの一番大きな画像をhogehoge256.ddsとします。
以降の説明ではこの一番大きな画像をICON_LEADER_hogehoge256.ddsとします。

hogehoge256.ddsをリサイズしてほかのサイズを作成し、作り終えたらMOD開発環境のTextureフォルダへ。
ICON_LEADER_hogehoge256.ddsをリサイズしてほかのサイズを作成し、作り終えたらMOD開発環境のTextureフォルダへ。

 ちなみに筆者はGIMPにDDSを扱うプラグインを入れてやっています。
 公式の開発者の方々はPhotoshopを使っている様子です。
 (後述するtexファイルをみると元ファイル名に.psdとか書かれてますので、きっとそう)
** texファイルの用意 [#z2826bed]

(ファイルを見る限り自動作成できるような感じなんですが・・・すみませんわかりません。なのでバニラのファイルをコピーして改変で対処します。)

まず、モンテスマの指導者アイコンで使われているtexファイルをコピーします。
SDK Assetsから「Montezuma○○.tex」をMOD開発環境のTextureフォルダへコピーして、ファイル名は先ほど作った画像に合わせて変えてください。

この.texファイルは普通にテキストエディタで開くことができますので、中身を開いて二か所ほど作ったファイルに合わせて変更します。
256x256のものを例とすると、以下を変更することになります。
 	<m_DataFiles>
 		<Element>
 			<m_ID text="DDS"/>
 			<m_RelativePath text="Montezuma256.dds"/> ★ここ
 			<m_RelativePath text="ICON_LEADER_hogehoge256.dds"/> ★
 		</Element>
 	</m_DataFiles>
 	<m_Name text="Montezuma256"/> ★ここ
 	<m_Name text="ICON_LEADER_hogehoge256"/> ★
 	<m_Description text=""/>
 	<m_Tags>
 		<Element text="UserInterface"/>
 	</m_Tags>
 	<m_Groups/>
 </AssetObjects::TextureInstance>

数が多くて面倒ですが、全サイズ分変更して保存。

** XLPを書く [#u0d63446]

XLPというのは、アイコンを生成するための定義ファイルになります。
これもSDK Assetsからパクって作りましょう。
コピー元は
 Sid Meier's Civilization VI SDK Assets\pantry\XLPs\Icons.xlp
です。

指導者以外のアイコンも山ほど登録されていますが・・・モンテスマの指導者アイコンだけ抜き出すと以下になります。

 <?xml version="1.0" encoding="UTF-8" ?>
 <AssetObjects::XLP>
 	<m_Version>
 		<major>4</major>
 		<minor>0</minor>
 		<build>252</build>
 		<revision>195</revision>
 	</m_Version>
 	<m_ClassName text="UITexture"/>
 	<m_PackageName text="UI/Icons"/>
 	<m_PackageName text="UI/hogehoge_Icons"/> ★
 	<m_Entries>
 		<Element>
 			<m_EntryID text="Montezuma256"/>
 			<m_ObjectName text="Montezuma256"/>
 			<m_EntryID text="ICON_LEADER_hogehoge256"/> ★
 			<m_ObjectName text="ICON_LEADER_hogehoge256"/> ★
 		</Element>
 		<Element>
 			<m_EntryID text="Montezuma32"/>
 			<m_ObjectName text="Montezuma32"/>
 			<m_EntryID text="ICON_LEADER_hogehoge32"/> ★
 			<m_ObjectName text="ICON_LEADER_hogehoge32"/> ★
 		</Element>
 		<Element>
 			<m_EntryID text="Montezuma48"/>
 			<m_ObjectName text="Montezuma48"/>
 			<m_EntryID text="ICON_LEADER_hogehoge48"/> ★
 			<m_ObjectName text="ICON_LEADER_hogehoge48"/> ★
 		</Element>
 		<Element>
 			<m_EntryID text="Montezuma50"/>
 			<m_ObjectName text="Montezuma50"/>
 			<m_EntryID text="ICON_LEADER_hogehoge50"/> ★
 			<m_ObjectName text="ICON_LEADER_hogehoge50"/> ★
 		</Element>
 		<Element>
 			<m_EntryID text="Montezuma55"/>
 			<m_ObjectName text="Montezuma55"/>
 			<m_EntryID text="ICON_LEADER_hogehoge55"/> ★
 			<m_ObjectName text="ICON_LEADER_hogehoge55"/> ★
 		</Element>
 		<Element>
 			<m_EntryID text="Montezuma64"/>
 			<m_ObjectName text="Montezuma64"/>
 			<m_EntryID text="ICON_LEADER_hogehoge64"/> ★
 			<m_ObjectName text="ICON_LEADER_hogehoge64"/> ★
 		</Element>
 		<Element>
 			<m_EntryID text="Montezuma80"/>
 			<m_ObjectName text="Montezuma80"/>
 			<m_EntryID text="ICON_LEADER_hogehoge80"/> ★
 			<m_ObjectName text="ICON_LEADER_hogehoge80"/> ★
 		</Element>
 		<Element>
 			<m_EntryID text="Montezuma45"/>
 			<m_ObjectName text="Montezuma45"/>
 			<m_EntryID text="ICON_LEADER_hogehoge45"/> ★
 			<m_ObjectName text="ICON_LEADER_hogehoge45"/> ★
 		</Element>
 	</m_Entries>
 	<m_AllowedPlatforms>
 		<Element>WINDOWS</Element>
 		<Element>LINUX</Element>
 		<Element>MACOS</Element>
 		<Element>IOS</Element>
 	</m_AllowedPlatforms>
 </AssetObjects::XLP>

変更箇所は
- m_PackageName の text
-- UI/から後ろを「任意の名前」に変更(以降の説明ではfugaとします)
-- UI/から後ろを任意の名前に変更
- 各Element配下のm_EntryID、m_ObjectName の text
-- どちらもddsファイルと同じものにする

となります。
変更したらファイル名はm_PackageName の textと同じものにして、XLPsフォルダへ保存してください。

** Mod.Art.xmlへの登録 [#f2ec3aef]

Mod.Art.xmlへ「ビルド後に出来上がるblpファイルのパス」を追記します。
blpファイルのファイル名はfuga.blpになります。
blpファイルのファイルパスは「UI/hogehoge_Icons.blp」になります。
 		<Element>
 			<libraryName text="UITexture"/>
 			<relativePackagePaths>
 				<Element text="UILeaders"/>
 				<Element text="UI/fuga.blp"/> ★これ追加
 				<Element text="UI/hogehoge_Icons.blp"/> ★これ追加
 			</relativePackagePaths>
 		</Element>

** 開発環境へ登録 [#y5b84475]

作ったdds、tex、xlpをMODの開発環境へ登録します。
登録後の開発環境下はこうなっているはずです。

 Textures
 ├hogehoge256.dds
 ├hogehoge256.tex
 ├hogehoge80.dds



 └hogehoge32.tex
 XLPs
 └fuga.xlp
&ref(LeaderIcon.png);

さらにプロパティのInGameActionの項目のImportのところ(なければ追加)へddsファイルを登録します。
(↓の画像は現在筆者が作成中のMOD開発環境のものです。説明とファイル名が違いますがご容赦ください)
&ref(ImportDDS.png);
これでビルド時にアイコン生成が行われる際、画像が読み込まれるようになります。

** xmlを書く [#t9c0839f]

アイコンの定義(xml)を書きます。
NewLeader_Icons.xmlへ追加変更することになります。

新規ファイル作成でxmlを選んだら以下のように記述します。
 <?xml version="1.0" encoding="utf-8"?>
 <GameInfo>
 	<IconTextureAtlases>
 		<Row Name="ICON_ATLAS_HOGEHOGE" IconSize="32"  IconsPerRow="1" IconsPerColumn="1" Filename="hogehoge32"/>
 		<Row Name="ICON_ATLAS_HOGEHOGE" IconSize="45"  IconsPerRow="1" IconsPerColumn="1" Filename="hogehoge45"/>
 		<Row Name="ICON_ATLAS_HOGEHOGE" IconSize="50"  IconsPerRow="1" IconsPerColumn="1" Filename="hogehoge50"/>
 		<Row Name="ICON_ATLAS_HOGEHOGE" IconSize="55"  IconsPerRow="1" IconsPerColumn="1" Filename="hogehoge55"/>
 		<Row Name="ICON_ATLAS_HOGEHOGE" IconSize="64"  IconsPerRow="1" IconsPerColumn="1" Filename="hogehoge64"/>
 		<Row Name="ICON_ATLAS_HOGEHOGE" IconSize="80"  IconsPerRow="1" IconsPerColumn="1" Filename="hogehoge80"/>
 		<Row Name="ICON_ATLAS_HOGEHOGE" IconSize="256" IconsPerRow="1" IconsPerColumn="1" Filename="hogehoge256"/>
 	</IconTextureAtlases>
 <GameData>
 	<IconTextureAtlases> ★追加
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="32"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge32.dds"/> ★追加
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="45"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge45.dds"/> ★追加
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="50"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge50.dds"/> ★追加
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="55"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge55.dds"/> ★追加
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="64"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge64.dds"/> ★追加
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="80"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge80.dds"/> ★追加
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="256" IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge256.dds"/> ★追加
 	</IconTextureAtlases> ★追加
 	<IconDefinitions>
 		<Row Name="ICON_LEADER_HOGEHOGE" Atlas="ICON_ATLAS_HOGEHOGE" Index="0"/>
 		<Row Name="ICON_BUILDING_LITTER_BOX" Atlas="ICON_ATLAS_BUILDINGS" Index="0"/>
 		<Row Name="ICON_CIVILIZATION_FELINE" Atlas="ICON_ATLAS_CIVILIZATIONS" Index="0"/>
 		<Row Name="ICON_LEADER_JASPER_KITTY" Atlas="ICON_ATLAS_LEADER_HOGEHOGE" Index="0"/> ★変更
 	</IconDefinitions>
 </GameInfo>
 </GameData>

ちなみにアイコン画像というのは1サイズにつき複数のアイコンをタイルのように並べて1まとめにしておき、
xmlの定義の中で行数、列数を定めてindex(左上を0として真横が1、その横が2・・・)指定で呼び出せるようになっています。
今回は1アイコン単品なので1行1列のindexは0だけ、という形になります。

このxmlファイルはプロパティのFrontEnd ActionsのUpdateIcons、InGame ActionsのUpdateIconsの両方に追加します。
&ref(FrontEndUpdateIcons.png);

&ref(InGameUpdateIcons.png);
これで他のxmlから参照すると使えるようになります。

今回例としたのは指導者のアイコンですので、
実際に使う場合はConfig.xmlの<LeaderAbilityIcon>と<LeaderIcon>の値を変えればOKです。
 <?xml version="1.0" encoding="utf-8"?>
 <GameData>
 	<Players>
 		<Row>
 			<Domain>StandardPlayers</Domain>
 			<CivilizationType>CIVILIZATION_FELINE</CivilizationType>
 			<LeaderType>LEADER_JASPER_KITTY</LeaderType>
 			<CivilizationName>LOC_CIVILIZATION_FELINE_NAME</CivilizationName>
 			<CivilizationIcon>ICON_CIVILIZATION_FELINE</CivilizationIcon>
 			<LeaderName>LOC_LEADER_JASPER_KITTY_NAME</LeaderName>
 			<LeaderIcon>ICON_LEADER_JASPER_KITTY</LeaderIcon> ★ここの値を変える



 			<LeaderAbilityName>LOC_TRAIT_LEADER_JASPER_KITTY_NAME</LeaderAbilityName>
 			<LeaderAbilityDescription>LOC_TRAIT_LEADER_JASPER_KITTY_DESCRIPTION</LeaderAbilityDescription>
 			<LeaderAbilityIcon>ICON_LEADER_JASPER_KITTY</LeaderAbilityIcon> ★ここの値を変える
 			<Portrait>LEADER_JASPER_KITTY_NEUTRAL</Portrait>
 		</Row>
 	</Players>

注意点としては、ICONの定義名はICON_[LeaderTypeの定義名]にしておかないと、文明選択時には表示されますがゲーム内では表示がされません。
(未確認ですが、ゲーム内でICONを表示する際のluaスクリプトがICON_[LeaderType]決め打ちになっているものと思われます)

* ビルド [#oc218472]
** ビルド [#oc218472]
ビルドすると、ModのディレクトリにPlatformsというディレクトリが作られています。
 Platforms
 ├MacOS
 │└BLPs
 │  ├SHARED_DATA
 │  └UI
 │   └[任意に決めた名前].blp
 └Windows
  └BLPs
   ├SHARED_DATA
   └UI
    └[任意に決めた名前].blp

こんな感じになっているはずです。
あとはゲームを立ち上げて指導者を選ぼうとしてみてください。作ったアイコンが表示されているはずです。

* 成功例 [#u5321a34]
作成中のMODで少々恥ずかしいですが、うまくいった例をさらしておきます。
&ref(20170607231848_1.jpg);
&ref(LeaderIconSuccess.jpg);

他のアイコン(文明とか高級資源とかユニットのアイコンとか)も基本一緒です。
作りたいアイコンについて、バニラで使われているdds、tex、xlpをSDK Assetsからちゃんと探すことができれば、同じようにすると作れるはず。
チャレンジしてみてください。
** 備考 [#ofa0846a]
*** ビルドでこける場合 [#s359c591]

* ビルドでこける場合 [#s359c591]

MOD開発環境の中に「cooker.log」というのがありますので、そこにエラー内容が書かれています。(正直わかりにくいですけど)
大体の場合はtexファイル内のddsファイル名指定を間違えてるとかです。

*** サンプル [#j0d47538]

ここまで作業したものを以下に上げておきます。




このエントリーをはてなブックマークに追加