= ゲームデータの作り方
このページでは、自力でゲームデータを作る方法を説明します。
== はじめに
!GameRandomizerのゲームデータは XML (extensible markup language) ファイル
で構成されます。
XMLデータはテキストなので、ファイルはテキストエディターを使えば編集できます。
XMLファイルはゲーム毎に、複数個のファイル ― 1個の '!__game.xml' (先頭は '_' 2つ)
ファイルおよび1個以上の拡張セットファイル ― を用意する必要があります。
XMLファイルはすべてUTF-8で記述してなくては__なりません__。
== '!__game.xml' ファイル
'!__game.xml' では、ゲームの基本的な情報を定義します。
以下は、'!__game.xml' の記述例です。
{{{
<?xml version="1.0" encoding="UTF-8"?>
<game id="dominion"
revision="1" format_version="1" language="ja" country="">
<game_title>ドミニオン</game_title>
<selection_size>10</selection_size>
</game>
}}}
行の先頭の空白文字は、省略可能です。
2行目は次のように書くこともできます。
{{{
<game id="dominion"
revision="1" format_version="1" language="en" country="">
}}}
空白文字が許されている箇所では、改行文字を挿入することもできます。
{{{
<game id="dominion"
revision="1"
format_version="1"
language="en"
country="">
}}}
'!__game.xml' ファイルの1行目は、XML宣言でなくては__なりません__。
以下の行をそのまま書いて下さい。
{{{
<?xml version="1.0" encoding="UTF-8"?>
}}}
ファイルの残り部分は、<game>...</game> ブロックです。
開始タグ <game> はいくつかの属性 (アトリビュート) を持っています。
{{{
<game id="dominion"
revision="1" format_version="1" language="en" country="">
}}}
以下に、属性を簡単なまとめを載せます。
||'''属性'''||'''説明'''||
||id||ゲームのID||
||revision||このXMLファイルの改版番号||
||format_version||XMLファイルの形式バージョン||
||language||言語コード||
||country||国コード||
'id' 属性の値は、すべてのゲームで固有のものでなければ__なりません__。
'revision' 属性は省略しても構いません。
!GameRandomizerはこの属性を無視しますが、ゲームデータを管理する
ために、この属性には適切な値を入れておく__べきです__。
始めは '1' とし、更新する度に一つずつ上げていって下さい。
'language' と 'country' 属性は、ゲームデータが指定した言語、指定した
国向けに記述されたものであることを表します。
!GameRandomizerは、Android deviceの言語・国の設定に適合したゲームデータ
だけを読み込みます。
(「設定」→「言語と入力」で、言語・国の設定を変更することができます。)
'language' の値は、ISO 639-1 言語コードの2文字形式を小文字で記述したもので
なければ__なりません__。
この例で使用している言語コード 'ja' は日本語を意味します。
言語コードの一覧は、次の場所で参照できます。
* [http://www.loc.gov/standards/iso639-2/php/code_list.php]
'country' の値は、ISO 3166-1 言語/地域コードを大文字で表したものでなければ
__なりません__。
国/地域コードの一覧は、以下の場所で参照できます。
* [http://www.iso.org/iso/iso-3166-1_decoding_table]
'language' と異なり、'country' は空 ("") でも構いません。
多くのケースで、'country' にセットする値で最も適しているのは、空です。
もし、中国語 (zh) のゲームデータを作るなら、'country' に 'CN' (中国 = 簡体中文)
もしくは 'TW' (台湾 = 繁体中文) をセットして下さい。
ゲームの基本情報は、<game>...</game> ブロックの中に記述します。
{{{
<game_title>ドミニオン</game_title>
<selection_size>10</selection_size>
}}}
<game_title>...</game_title> には、ゲームのタイトルを記します。
<selection_size>...</selection_size> には、!GameRandomizerが何種類のカード
を無作為に選ぶのかを記述して下さい。
値は0より大きな整数でなければ__なりません__。
== 拡張セットファイル
拡張セットファイル一つは、ゲームの拡張セット一つ (ドミニオンで言う「陰謀」「海辺」...)
を定義します。
!GameRandomizerは基本セット (ドミニオンでいう「ドミニオン」) と拡張セットを区別
しないため、基本セット用にも拡張セットファイルが必要です。
拡張セットファイルの例を示します。
{{{
<?xml version="1.0" encoding="UTF-8"?>
<expansion id="intrigue" game_id="dominion"
revision="1" format_version="1" language="ja" country="">
<preference>1020</preference>
<expansion_title>陰謀</expansion_title>
<card id="courtyard">
<title>中庭</title>
<price>2</price>
</card>
<card id="pawn">
<title>手先</title>
<price>2</price>
</card>
</expansion>
}}}
1行目はXML宣言で、これは '!__game.xml' と同じものです。
{{{
<?xml version="1.0" encoding="UTF-8"?>
}}}
ファイルの残り部分は、<expansion>...</expansion> ブロックです。
開始タグ <expansion> はいくつかの属性を持っています。
{{{
<game id="intrigue" game_id="dominion"
revision="1" format_version="1" language="ja" country="">
}}}
これら属性の意味は、次の通りです。
||'''属性'''||'''説明'''||
||id||拡張セットのID||
||game_id||ゲームのID||
||revision||このXMLファイルの改版番号||
||format_version||XMLファイルの形式バージョン||
||language||言語コード||
||country||国コード||
'revision'、'format_version'、'language'、'country' は、'!__game.xml'
における <game> タグのものと同じです。
値も、<game> タグと同じでなくては__なりません__。
'game_id' タグの値は、'!__game.xml' における <game> タグの 'id' 属性の値
と同じでなくては__なりません__。
'id' の値は、そのゲームの拡張セットで固有のものでなくては__なりません__。
拡張セットファイルのファイル名は、''id''.xmlでなくては__なりません__。
(この例では、ファイル名は 'intriguge.xml' でなくてはなりません。)
拡張セットの基本情報は、<expansion>...</expansion> ブロック内の先頭に
記します。
{{{
<preference>1020</preference>
<expansion_title>陰謀</expansion_title>
}}}
<preference>...</preference> タグの中の値は、整数でなくては__なりません__。
!GameRandomizerは拡張セットの一覧を表示する際、'preference' の値に
したがって拡張セットを並べます。
値は、そのゲームの拡張セットに固有のものである__べきです__。
<expansion_title>...</expansion_title> には、拡張セットのタイトルを記します。
<expansion>...</expansion> ブロックの残り部分で、その拡張セットが提供
しているカードをすべて定義します。
{{{
<card id="courtyard">
<title>中庭</title>
<price>2</price>
</card>
<card id="pawn">
<title>手先</title>
<price>2</price>
</card>
}}}
あくまでも記述例なので、この拡張セットではカードを2種類しか定義していません。
<card>...</card> ブロック1つでカード1種類を定義します。
<card> タグは、カードを識別するための属性 'id' を持ちます。
IDはそのゲームのカードすべてで固有のものでなくては__なりません__。
ただし、複数の拡張セットが同一のカードを提供している場合、それらのカード
には同一のIDを割り当てなければ__なりません__。
そうしないと、!GameRandomizerは、無作為に選ぶ際にそのカードを複数回
選んでしまいます。
<title>...</title> にはカードのタイトルを記述します。
<price>...</price> には、カードの価格 (コスト) を記します。
<price>...</price> に指定できる値は、整数に限定されません。
「?」、「X」、「3+」といった値もセットすることができます。
== フォルダとファイルのレイアウト
'!__game.xml' ファイルの <game> タグが次のようになっているものと
します。
{{{
<game id="dominion"
revision="1" format_version="1" language="ja" country="">
}}}
'!__game.xml' は 'dominion/en/!__game.xml' として配置されなければ
__なりません__。
{{{
+- dominion/
+- en/
+- __game.xml
}}}
トップフォルダ名 (「dominion」) は属性 'id' から決定され、サブフォルダ名
(「ja」) は属性 'language' から決定されます。
属性 'country' の値が空でない場合は、サブフォルダ名に 「_ + ''countryの値''」
をフォルダ名に足します。
たとえば、属性 'country' の値が "US" (アメリカ合衆国) であれば、適切な
サブフォルダ名は「en_US」になります。
{{{
+- dominion/
+- en_US/
+- __game.xml
}}}
'!__game.xml' と同じフォルダに、すべての拡張セットファイルを置きます。
{{{
+- dominion/
+- en/
+- __game.xml
+- dominion.xml
+- intrigue.xml
+- seaside.xml
+- alchemy.xml
}}}
以上で、ゲームデータは!GameRandomizerから利用できるようになります。