Nintendo MessageStudio ヘルプ

# メッセージバイナリフォーマット

ここでは、メッセージバイナリファイル(*.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 | 実際の属性データが入ります。 この情報は前述の固定長サイズ分ごとに、テキストの数だけ続きます。

- はじめに
- Message Studioの基礎
  - ゲーム製作のフロー
  - プロジェクトファイルについて
  - プロジェクトエクスプローラの操作
  - ウインドウ操作
  - 言語設定
  - カラーの設定
  - 属性の設定
- メッセージ編集
  - 基本操作
  - テキストの種類
  - クリップボードを利用した操作
  - 言語セルステータス
  - 表示のカスタマイズ
  - メッセージ一覧画面のTips
- タグ
  - 概要
  - タグを用いた編集
  - タグのソース文字列
  - タグ比較について
- 検索機能
  - 概要
  - 簡易検索
  - 詳細検索
  - 正規表現
- スペルチェック
  - スペルチェックについて
  - スペルチェックの利用方法
- ロールとパーミッション
  - 概要
  - ロールの追加とパーミッションの設定
  - ロールの選択
- メッセージの統計情報
  - 統計情報について
  - 統計情報の利用方法
- スタイル機能と幅計算
  - スタイルと幅計算について
  - テキスト幅の全体チェック
  - レンダリング方式について
  - スタイルの設定方法
- フォント
  - フォント機能の概要
  - フォントに関するワークフローについて
  - フォントの設定
- チーム管理機能
  - 概要
  - ファイル管理のされ方
  - チーム管理機能を利用する
  - 基本操作
  - コミットログを表示する
  - 差分(diff)を表示する
  - 競合とマージ
  - プロキシサーバの設定
  - サーバーの設定
- メタ情報の設定
  - メタ情報の設定について
  - 設定可能なメタ情報一覧
- リソースファイル関連
  - リソースについての概要
  - リソースファイルを出力する
  - 出力設定を行う
  - ビルドイベントについて
  - 共通のバイナリフォーマット
  - メッセージバイナリフォーマット
  - フローチャートバイナリフォーマット
  - プロジェクトバイナリフォーマット
    - プロジェクトバイナリフォーマット
    - カラー情報
    - コンテンツ情報
    - 属性情報
    - タグ情報
    - スタイル情報
  - タグについて
- マクロ文字列展開機能
  - マクロ文字列とは
  - 利用可能なマクロ一覧
- コマンドライン関連
  - コマンドライン制御について
  - /convertスイッチについて
- プラグインについて
  - プラグインの概要
  - プラグインの種類について
- プラグインの作成方法
  - 単純なプラグイン作成チュートリアル
  - 開発環境を利用しない作成方法
  - サンプルについて
- Message Studioのアセンブリ設定
  - Caspol：アセンブリセキュリティ設定
  - Ngen：ネイティブイメージ生成
- XML仕様
  - 概要
  - プロジェクトファイル（.msproj）のXML仕様
  - メッセージファイル（.mstxt）のXML仕様
- libmsについて
  - 概要
  - コンパイルの仕方
- 共通の関数
  - LMS_SetMemFuncs
- メッセージに関する関数
  - LMS_InitMessage
  - LMS_CloseMessage
  - LMS_SearchMessageBlockByName
  - LMS_GetMessageBlockInfoByName
  - LMS_GetTextNum
  - LMS_GetTextIndexByLabel
  - LMS_GetText
  - LMS_GetTextSize
  - LMS_GetTextByLabel
  - LMS_GetLabelByTextIndex
  - LMS_GetTextStyle
  - LMS_GetTextStyleByLabel
  - LMS_GetAttributeSize
  - LMS_GetAttribute
  - LMS_GetAttributeText
- フローチャートに関する関数
  - LMS_InitFlowchart
  - LMS_CloseFlowchart
  - LMS_GetNodeNum
  - LMS_GetEntryNodeIndex
  - LMS_GetNodeDataPtr
  - LMS_GetFlowNodeIndex
  - LMS_GetCaseIndexesFromBranchNode
  - LMS_GetFlowParamText
- プロジェクトに関する関数
  - LMS_InitProject
  - LMS_CloseProject
  - LMS_SearchProjectBlockByName
  - カラー情報に関する関数
    - LMS_GetColorIndexByName
    - LMS_GetColor
    - LMS_GetColorByName
    - LMS_GetColorNum
  - コンテンツ情報に関する関数
    - LMS_GetContentsNum
    - LMS_GetContentPath
  - 属性情報に関する関数
    - LMS_GetAttrInfoIndexByName
    - LMS_GetAttrType
    - LMS_GetAttrTypeByName
    - LMS_GetAttrOffset
    - LMS_GetAttrOffsetByName
    - LMS_GetAttrListItemName
    - LMS_GetAttrListItemNameByName
    - LMS_GetAttrNum
    - LMS_GetAttrListItemNum
  - タグ情報に関する関数
    - LMS_GetTagGroupName
    - LMS_GetTagName
    - LMS_GetTagParamName
    - LMS_GetTagParamType
    - LMS_GetTagListItemName
    - LMS_GetTagGroupNum
    - LMS_GetTagNum
    - LMS_GetTagParamNum
    - LMS_GetTagListItemNum
  - スタイル情報に関する関数
    - LMS_GetStyleIndexByName
    - LMS_GetRegionWidth
    - LMS_GetRegionWidthByName
    - LMS_GetLineNum
    - LMS_GetLineNumByName
    - LMS_GetFontIndex
    - LMS_GetFontIndexByName
    - LMS_GetStyleNum
- 扱うファイルの拡張子一覧
- よくある質問