フローチャートバイナリフォーマット
ここでは、フローチャートバイナリファイル(*.msbf)のフォーマットを解説します。 ブロックフォーマットに基づいて構成されるので、その解説も合わせてご覧ください。 フローチャートバイナリファイルを作成するには、 別途フローチャートプラグインをプロジェクトで利用できるようにする必要があります。
通常、このページに書かれている内容を気にする必要はありませんが、libmsを利用する上での理解の助けとなります。 バイナリフォーマットへアクセスする場合はlibmsのAPIを利用することで簡単に取得することが可能です。
フローチャートノードブロック(FLW3)
このブロックは、フローチャートノード(フローチャート上における、一つ分の箱)が どのように繋がっているかを保存しています。 なお、このブロックにはどのように繋がっているかの情報しか保存されません。 配置座標(位置情報)はすべて破棄されます。 フローチャートノードには、最初から順番にインデックス番号が割り当てられます。
フローチャートノードブロックヘッダー
FLW3の先頭には、MessageStudio共通のブロックヘッダーが配置されます。 この後に、フローチャートのノードと分岐先のケースの個数情報が保存されます。
| NODE NUM | このブロックに保存されるフローチャートノードの個数を示します。 0~65535個まで保存できます。 フローチャートのノード情報はブロック前半に保存されます。 |
| CASE NUM | このブロックに保存される分岐の数を示します。 フローチャートの分岐ノードでは、多くの分岐先を指定することが出来ます。 ブロックの後半に存在する、「飛び先インデックス情報」の数を示します。 |
| RESERVED | 予約領域。 将来ここの位置に何か情報が入るかもしれません。 |
個数情報の後にはフローチャートノード情報が配列として入ります。 一つ分のフローチャートノードは16バイトからなる固定長のデータとして保存され、 それがインデックス番号順に並んで保存されます。 この中で、分岐ノードは分岐数によっては16バイトを超えてしまうので、 この領域とは別に、分岐先情報が保存される領域が用意されています。
ノード情報は以下のような構造になっています。
| NODE TYPE | ノードの種類が入ります。 最初にこの領域を読み込んで、どのノードが指定されているかを判断してください。 | ||||||||||||||||
| PRM TYPE | パラメータの種類が入ります。
標準のフローチャートでは、分岐ノードとイベントノードにパラメータを指定できます。
|
||||||||||||||||
| 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)とよく似ていますのでそちらを参照してください。
はじめに
言語設定
メッセージ編集
共通のバイナリフォーマット