Nintendo MessageStudio ヘルプ

Message Studioを用いたゲーム制作

ゲームにおけるテキストの位置づけ

画面上にテキストを表示するために、まず必要になるのは、「何を表示するのか」「どう表示するのか」です。 もちろんこれらの内容はすべてプログラムに組み入れていく必要があります。 プログラムを組むには技術が必要なので、プログラマに作業を依頼しなければなりません。

「何を表示するのか」というのはもっとも重要な内容です。 これをプログラムに組み入れる場合、もっとも簡単な組み入れ方は、直接プログラムに埋め込んでしまう方法です。

const wchar_t* message = L"こんにちは、Message Studio!";
pTextPane->SetString( message );

上記のような内容をプログラムに入れれば、入力されたテキストを表示することができます。 これはとても単純な方法ですので実装してから動かすのに一番 時間がかかりません。 ところが、この手法で開発を進めてしまうと後々に重大な問題を引き起こしていきます。 たとえば、マーケティング部門の要望があり、このゲームの米国仕様を作成することになったとします。 プログラムは以下のように変更されます。

#if defined ( MYGAME_REGION_JP )
const wchar_t* message = L"こんにちは、Message Studio!";
#elif defined ( MYGAME_REGION_US )
const wchar_t* message = L"Hello, Message Studio!";
#endif

pTextPane->SetString( message );

さらに欧州版を作成することになったとします。 欧州はたくさんの国があるので言葉もたくさんあります!

#if defined ( MYGAME_REGION_JP )
const wchar_t* message = L"こんにちは、Message Studio!";
#elif defined ( MYGAME_REGION_US )
const wchar_t* message = L"Hello, Message Studio!";
#elif defined ( MYGAME_REGION_EU )
const wchar_t* message = NULL;
switch( g_langMode )
{
case SC_LANG_ENGLISH:
	message = L"Hello, Message Studio!";
	break;
case SC_LANG_GERMAN:
	message = L"Guten tag, Message Studio!";
	break;
case SC_LANG_FRENCH:
	message = L"Bonjour, Message Studio!";
	break;
case SC_LANG_SPANISH:
	message = L"Buenas tardes, Message Studio!";
	break;
case SC_LANG_ITALIAN:
	message = L"Ciao, Message Studio!";
	break;
case SC_LANG_DUTCH:
	message = L"Goedemiddag, Message Studio!";
	break;
default:
	MYGAME_FAIL( "UNKNOWN LANGUAGE!" );
	break;
}
#endif

pTextPane->SetString( message );

おっと、実は北米仕様では、さらにスペイン語とフランス語も必要です。 日本の開発者はよくこの点を忘れがちです。 …と、このようにただ単に挨拶を表示するだけでもローカライズを行おうと思うと こんなに長い記述が必要になってしまいます。 最初 楽をしようと思って直接テキストを書き込んだプログラマの思惑は一瞬にして崩壊してしまいます。 少なくともこんなプログラムは誰も読みたいとは思いません。

また、このままでは翻訳してもらうのも一苦労です。 翻訳してもらった結果を手動でプログラムに反映させなければなりません。 当然ミスも発生しますし、デバッグコストも増大します。

プログラムとデータを分離する

直接ゲームに文字列を埋め込むと、上記のように大変なことになってしまうことが分かりました。 そこで次に、テキストを外部リソースファイルとして管理してみることにします。 「リソースファイル」とは、ゲームで利用されるデータファイルのことです。 絵や音楽、3Dモデル情報などはすべて「リソースファイル」です。 テキスト情報もこれらの情報と同じようにファイルとしてゲームに読み込ませることが出来れば、開発コストを下げることが出来ます。

ゲームに組み込まれるリソースファイルは、なるべくゲームが効率よく動く形式であるべきです。 つまり速い速度でアクセスでき、なるべく小さなメモリで利用できることが望まれます。 一方で、編集中はなるべく効率よく編集できるほうがよいでしょう。

ここで、Message Studioを導入してみます。 Message Studioを導入すると上記のようなプログラマ中心のワークフローが以下のように変化します。

Message Studioがゲーム用に出力ファイルについてはリソースについてのページをご覧ください。

まとめ

Message Studioによって少しワークフローは複雑になってしまいましたが、 テキストを集中的に管理する人が人間からソフトウエアに変わったことに注目してください。 コンピュータなら何度でも同じ作業繰り返しやっても文句も言いませんし、病気になることもありません。 それに高速に動作します。

Message Studioでは、テキストの編集と各言語への翻訳作業を複数の開発者で同時に行うための機能を持っています (詳細は、チーム管理機能の概要ページをご覧ください)。 これにより、電子メールにファイルを添付してやりとりする必要もありません。 また、編集内容が競合してしまってもスムーズに解決することが出来ます。

プログラマは、テキスト管理の重圧から開放されましたが、 代わりに外部リソース化されたファイルを読み込む部分を実装する必要が出てきました。 この部分は、libmsという、マルチプラットフォーム対応のライブラリがあるため、リソースの解析作業はすべてこちらに一任できます。 つまり、他のリソースファイルと同じようにカートリッジやDVDからファイルを読み込んで、libmsに丸投げするだけでテキストを得ることが出来ます。