Nintendo MessageStudio ヘルプ

# フローチャートバイナリフォーマット

ここでは、フローチャートバイナリファイル(*.msbf)のフォーマットを解説します。 ブロックフォーマットに基づいて構成されるので、その解説も合わせてご覧ください。 フローチャートバイナリファイルを作成するには、 別途フローチャートプラグインをプロジェクトで利用できるようにする必要があります。

通常、このページに書かれている内容を気にする必要はありませんが、libmsを利用する上での理解の助けとなります。 バイナリフォーマットへアクセスする場合はlibmsのAPIを利用することで簡単に取得することが可能です。

## フローチャートノードブロック(FLW3)

このブロックは、フローチャートノード(フローチャート上における、一つ分の箱)が どのように繋がっているかを保存しています。 なお、このブロックにはどのように繋がっているかの情報しか保存されません。 配置座標(位置情報)はすべて破棄されます。 フローチャートノードには、最初から順番にインデックス番号が割り当てられます。

### フローチャートノードブロックヘッダー

FLW3の先頭には、MessageStudio共通のブロックヘッダーが配置されます。 この後に、フローチャートのノードと分岐先のケースの個数情報が保存されます。

NODE NUM | このブロックに保存されるフローチャートノードの個数を示します。 0～65535個まで保存できます。 フローチャートのノード情報はブロック前半に保存されます。
CASE NUM | このブロックに保存される分岐の数を示します。 フローチャートの分岐ノードでは、多くの分岐先を指定することが出来ます。 ブロックの後半に存在する、「飛び先インデックス情報」の数を示します。
RESERVED | 予約領域。 将来ここの位置に何か情報が入るかもしれません。

個数情報の後にはフローチャートノード情報が配列として入ります。 一つ分のフローチャートノードは16バイトからなる固定長のデータとして保存され、 それがインデックス番号順に並んで保存されます。 この中で、分岐ノードは分岐数によっては16バイトを超えてしまうので、 この領域とは別に、分岐先情報が保存される領域が用意されています。

ノード情報は以下のような構造になっています。

NODE TYPE | ノードの種類が入ります。 最初にこの領域を読み込んで、どのノードが指定されているかを判断してください。
PRM TYPE | パラメータの種類が入ります。 標準のフローチャートでは、分岐ノードとイベントノードにパラメータを指定できます。
種類 | 説明
--- | ---
BYTE4 | PRM TYPEの値(0)をとります。パラメータ値は4バイトの数値として保存されています。
BYTE22 | PRM TYPEの値(1)をとります。パラメータ値は、2バイト-2バイトの２つ数値として保存されています。
BYTE211 | PRM TYPEの値(2)をとります。パラメータ値は、2バイト-1バイト-1バイトの３つ数値として保存されています。
BYTE112 | PRM TYPEの値(3)をとります。パラメータ値は、1バイト-1バイト-2バイトの４つ数値として保存されています。
BYTE1111 | PRM TYPEの値(4)をとります。パラメータ値は、1バイトの数値４つとして保存されています。
TEXT | PRM TYPEの値(5)をとります。パラメータ値は、データ領域から文字列へのオフセット値として保存されています。
LIST | PRM TYPEの値(6)をとります。パラメータ値は、選択したリストのアイテムが持つ値として保存されています。
PRM VALUE | パラメータの種類に応じたパラメータ値が入ります。数値／リストパラメータ値の場合には、この領域に値が直接保存されています。テキスト型のパラメータの場合には、ノード情報領域の後に続く、テキストパラメータ用の領域に格納される文字列へのオフセット値が保存さます。
NODE DATA | この部分には、NODE TYPEによって定義されたノードの種類によって意味が異なる、 ノードの固有情報が保存されます。 この意味については後述します。

### メッセージノード

NODE TYPEが1であるとき、それはメッセージノードであることを表します。

NODE TYPE | メッセージを表す値(1)をとります。
PRM TYPE | パラメータの種類が入ります(未使用です。)
PRM VALUE | パラメータの値が入ります。(未使用です。)
NEXT IDX | 次のノードへのインデックスです。 (存在しない場合は0xFFFFが入ります)
CONTENT ID | プロジェクトバイナリのコンテンツ情報ブロックに格納されているファイル名へのインデックスです。 (存在しない場合0xFFFFが入ります。)
TEXT IDX | メッセージバイナリファイル内部でのメッセージインデックスです。 (存在しない場合は0xFFFFが入ります)
RESERVED | （現在未使用）

### 分岐ノード

NODE TYPEが2であるとき、それは分岐ノードであることを表します。

NODE TYPE | 分岐を表す値(2)をとります。
PRM TYPE | パラメータの種類が入ります。
PRM VALUE | パラメータの値が入ります。
NEXT IDX | 次のノードへのインデックスです。 (分岐ノードでは使用しないので0xFFFFが入ります)
QUERY ID | プロジェクトで設定される分岐条件（クエリ）を表すIDです。
CASE NUM | 分岐の場合次のノードの候補は複数あります。 この値は次のノード候補となる分岐先の個数を表します。
CASE IDX | ノードインデックスから取得できる次のノードへのインデックスです。 分岐の場合は、このインデックスを先頭にCASE NUM分の候補が存在します。 (分岐が存在しない場合は、0xFFFFが入ります)
RESERVED | （現在未使用）

### イベントノード

NODE TYPEが3であるとき、それはイベントノードであることを表します。

NODE TYPE | イベントを表す値(3)をとります。
PRM TYPE | パラメータの種類が入ります。
PRM VALUE | パラメータの値が入ります。
NEXT INDEX | 次のノードへのインデックスです。 (存在しない場合は0xFFFFが入ります)
EVENT ID | プロジェクトで設定されるイベントを表すIDです。
RESERVED | （現在未使用）

### エントリノード

NODE TYPEが4であるとき、それはエントリノードであることを表します。

NODE TYPE | エントリを表す値(4)をとります。
PRM TYPE | パラメータの種類が入ります(未使用です。)
PRM VALUE | パラメータの値が入ります。(未使用です。)
NEXT INDEX | 次のノードへのインデックスです。 (存在しない場合は0xFFFFが入ります)
RESERVED | （現在未使用）

### ジャンプノード

NODE TYPEが5であるとき、それはジャンプノードであることを表します。

NODE TYPE | ジャンプを表す値(5)をとります。
PRM TYPE | パラメータの種類が入ります(未使用です。)
PRM VALUE | パラメータの値が入ります。(未使用です。)
NEXT INDEX | 次のノードへのインデックスです。 (存在しない場合は0xFFFFになります)
CONTENT ID | CONTENT IDで指定されるジャンプ先となるフローチャートファイル内におけるエントリーノードのインデックスです。
RESERVED | （現在未使用）

### 分岐情報とテキストパラメータ値

ノード情報の後に、フローチャートノードブロックヘッダーに指定されている分岐個数だけ、分岐ノードの分岐インデックスリストが入ります。分岐インデックスリスト後に、テキスト型のパラメータに対応する文字列が格納されています。

分岐先の情報は、すべて2バイトの配列になっています。 それぞれ分岐先のフローチャートノードインデックス番号を示し、 接続先がない場合は0xFFFFが入ります。

分岐情報に続く、テキスト型のパラメータ値は、NULL終端のASCII文字列となっています。この文字列は、ノードのパラメータのタイプがテキストの場合に取得されるパラメータ値を、データ部先頭からのオフセット値として利用することで取得できます。

## フローチャートエントリブロック(FEN1)

このブロックは、エントリノードの名称を元に、そのエントリノードの フローチャートノードインデックス番号を引くために存在するブロックです。 データ構造は基本的にメッセージバイナリファイル(*.msbt)の ラベルブロック(LBL1)とよく似ていますのでそちらを参照してください。

- はじめに
- 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
- 扱うファイルの拡張子一覧
- よくある質問