メッセージバイナリフォーマット
ここでは、メッセージバイナリファイル(*.msbt)のフォーマットを解説します。 ブロックフォーマットに基づいて構成されるので、その解説も合わせてご覧ください。 メッセージバイナリファイルは、言語設定ごとに分かれてリソース化されます。 従って、ファイルを読み込むタイミングで言語設定にあわせたファイルをロードすることで、その言語に対応するモードでゲームを起動することが可能です。
通常、このページに書かれている内容を気にする必要はありませんが、libmsを利用する上での理解の助けとなります。 バイナリフォーマットへアクセスする場合はlibmsのAPIを利用することで簡単に取得することが可能です。
ラベルブロック(LBL1)
ラベルブロック(LBL1)は、ラベルと、それに対応したインデックス番号の関連付けが可能なブロックです。 インデックス番号とは、後述するテキストブロック(TXT2)における、メッセージの格納順序を表す連続した番号のことです。 インデックス番号は0から開始されます。
ラベル番号は、ASCIIコード範囲において255文字以内でつけることが可能で、MessageStudio上で設定することが可能です。 詳しくはメッセージ編集の基本操作をご覧ください。 このブロックは、ラベル文字列のハッシュ値によってルックアップするため、ラベルの数が増えても検索効率がそんなに変わりません。
ラベルブロックは、ブロックヘッダの後に以下のようなデータ構造を持ちます。
| HASH TABLE SIZE | ハッシュテーブルのサイズを記述します。
ハッシュテーブルのサイズはMessage Studio上で設定可能で、サイズによって速度とメモリ使用量の調整が可能です。
デフォルト値は101ですが、なるべく素数を設定してください。4バイトの情報です。 ハッシュテーブルの数値で設定した数だけ、以下の8バイトの情報が繰り返されます。 ハッシュテーブルサイズが101の場合、この部分が合計808バイトになります。 |
| TEXT NUM IN HASH n | ハッシュ値nに何個のラベルが含まれているかという情報を記述します。4バイトになります。 |
| OFFSET OF HASH n | ハッシュ値nのラベル情報へのオフセット値が4バイトで記述されます。 オフセットは、ブロックの先頭から数えられます。 上述した、ハッシュ値nに含まれるテキストの数が0である場合、このオフセット値は不定です。 |
上述の部分が終わった直後から、ラベルとインデックス番号の対応表のリストが記述されます。 プログラムは、ハッシュ値からブロック上のオフセットを求めた上で、この領域へアクセスします。
| L LEN | ラベルの長さを1バイトで記述します。 |
| LABEL NAME | ラベル名が記述されます。 ラベル名は、出力設定によらず必ずASCII文字列になり、前述のラベル長さの量だけ続きます。 |
| TEXT INDEX | テキストインデックス番号(TXT1ブロックにおける出現位置)が4バイトで記述されます。 |
上記のラベルとテキストインデックスの組み合わせは、順番にテキストの数だけ出現します。 求めたオフセット位置の直下に違うラベル情報が存在している場合があります。 これは、特定のハッシュ値に対して複数のラベルが登録されているからです。 その場合は読み飛ばして次のラベルと一致するかを確認します。
テキストブロック(TXT2)
テキストブロックには、ユーザーが実際に入力したテキスト情報が記述されます。 テキスト情報にはタグが含まれることがあります。 中身については別のページにまとめましたのでそちらをご覧ください。
| TEXT NUM | テキストの数が4バイトで入ります。 |
| OFFSET OF TEXT n | このブロックの先頭位置から数えて、テキストが開始されるオフセット値を4バイトで記述します。 この情報は、前述のテキストの個数の数だけ繰り返されます。 ただし、テキストの開始位置は、指定されたテキストエンコーディング形式の、一文字当たり最低バイト数でアライメントされます。 UTF-8ならばアライメントされず、UTF-16なら2バイト、UTF-32なら4バイト単位で切り上げられます。 |
| TEXT n | 実際のテキストの内容が入ります。 エンコーディング形式は、メッセージファイルのバイナリヘッダに設定されたものを利用します。 NULL終端です。 |
属性ブロック(ATR1)
テキストごとの属性情報を保存するためのブロックです。 ひとつのテキスト情報ごとに固定長の構造体としてデータを取得可能です。 データはプロジェクト設定ごとに異なるため、属性定義ヘッダファイル(*.h)か プロジェクトバイナリファイル(*.msbp)を出力してデータにアクセスしてください。
プロジェクトの属性情報の中に、NULL終端文字列型として定義されているものがあった場合、 可変長の文字列の代わりにその部分に4バイトの情報が入ります。 この値は、ブロック開始位置から文字列開始位置へのオフセットが保存されます。
| TEXT NUM | 最初の4バイトにはテキストの数が入ります。 |
| STRUCTURE SIZE | 一つ分の固定長データサイズがバイト単位で入ります。 これも4バイトの情報です。 |
| ATTRIBUTE n | 実際の属性データが入ります。 この情報は前述の固定長サイズ分ごとに、テキストの数だけ続きます。 |
はじめに
言語設定
メッセージ編集
共通のバイナリフォーマット