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バイトの2つ数値として保存されています。
BYTE211 PRM TYPEの値(2)をとります。パラメータ値は、2バイト-1バイト-1バイトの3つ数値として保存されています。
BYTE112 PRM TYPEの値(3)をとります。パラメータ値は、1バイト-1バイト-2バイトの4つ数値として保存されています。
BYTE1111 PRM TYPEの値(4)をとります。パラメータ値は、1バイトの数値4つとして保存されています。
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 IDCONTENT IDで指定されるジャンプ先となるフローチャートファイル内におけるエントリーノードのインデックスです。
RESERVED(現在未使用)

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

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



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

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

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



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