「りも」トップページへ
インデックスページへ

「りも」デジタルノベルシステム
シナリオデータのバイナリ形式フォーマット

Jul.24.1999
れろれろ@ふみ
(國兼憲太郎)

○概要

シナリオデータはバイナリ形式で基本的に1バイト完結。
コマンドによって固定長や可変長の形式をとる。
2バイト以上の命令形態の場合、コマンド実行側で的確に追加分引数を 処理し他に影響を与えてはならない。

○帯域

データを1バイト読んできて、その数値範囲によって以下のような意味 合いを持つ。

・$00 〜 $7f : 辞書圧縮文字コード
使用頻度の高い128文字を辞書テーブル管理することによっ て1バイトで表記できるようにする。

・$80 : 未使用(リザーブ)

・$81 〜 $ed : SJIS文字コード
次の1バイトと必ず組になって2バイトのSJIS漢字コードを 表現する。
本当は $a0〜$df も空いているのだが処理の簡略化のため 当面無視。

・$ee 〜 $ff : シナリオコマンド
シナリオ進行用コマンドコード
帯域と拡張性のためマルチバイトコマンドが多い

なお文字は2バイト文字のみで、1バイト文字はサポートしない。 1バイト文字をサポートするためには辞書圧縮部分の仕様を排除する必要が ある。

○シナリオコマンドコードリファレンス

$ff --- 終了コード
シナリオを終了する。
とりあえずタイトルに戻る。

$fe --- 範囲終了(end)
スキップ時に必要、特に何もしない。

$fd --- 範囲開始(begin)
スキップ時に必要、特に何もしない。

$fc --- 画面クリア
画面の文字を消去する。

$fb --- グラフィック表示
マルチバイトコマンド。
$01 nnnn--nnnn番のグラフィックをバッファに転送
$02 nnnn--nnnn番のグラフィックをVRAMに転送
$03--バッファのグラフィックをVRAMに転送
$04--VRAMのグラフィックをバッファに転送
$05 nnnn xx yy--nnnn番のOBJをバッファの(xx,yy)に合成
$06 nnnn xx yy--nnnn番のOBJをVRAMの(xx,yy)に合成
# 画面フェードもそのうちに…

$fa --- サウンドリクエスト
マルチバイトコマンド。
$01 nn--nn番のBGMをリクエスト
$02 nn--nn番のSEをリクエスト
# フェードイン・アウトもそのうちに…

$f9 --- プレイヤー選択
マルチバイトコマンド。
コマンド直後の begin($fd)で始まり end($fc)までがコマンド アイテムとなる。選択肢の数はその範囲の中に何個のアイテム があるかで決まる。
→詳細は後述

$f8 --- 改ページ
キー待ちをした後に画面クリアを実行。

$f7 --- 改行
文字表示行を改行する。
なお改段落は空白と組み合わせて「改行+空白」と表現する。

$f6 --- 空白
一文字スキップし空白を作る。

$f5 --- キーウェイト
キー押下を要求し、それがなされるまで待つ。

$f4 --- 文字表示ウェイト
マルチバイトコマンド。
次の1バイト(0〜255)をウェイト値として、その時間だけ処理 を止める。キーキャンセル有り。

$f3 --- フラグチェック
マルチバイトコマンド
$01 nnnn {}--nnnn番のフラグがON(0以外)なら実行
$02 nnnn {}--nnnn番のフラグがOFF(0)なら実行
$03 nnnn mm {}--nnnn番のフラグがmmなら実行
$04 nnnn mm {}--nnnn番のフラグがmmでないなら実行
$05 nnnn mm {}--nnnn番のフラグがmmより大きい時実行
$06 nnnn mm {}--nnnn番のフラグがmmより小さい時実行

$f2 --- フラグセット
マルチバイトコマンド
$01 nnnn--nnnn番のフラグをONにする
$02 nnnn--nnnn番のフラグをOFFにする
$03 nnnn mm ll--nnnn番にmmをセット、0〜llの範囲で乱数加算
$04 nnnn mm ll--nnnn番にmmを加算、0〜llの範囲で乱数加算
$05 nnnn mm ll--nnnn番にmmを減算、0〜llの範囲で乱数加算

$f1 --- ジャンプ
次の2バイトにて飛び先のシナリオ番号を指定。
シナリオ番号と実アドレスの関係は本体側が把握。

○プレイヤー選択コマンド詳細

$f9 で示されるプレイヤー選択コマンドについて解説する。

$f9 のあとにはすぐ {}($fd,$fe)が続き、この範囲内にあるだけのアイテムが 選択肢となる。

選択肢個々はさらに {} で囲まれその個数が選択肢の数を表わす。 各アイテム内のフォーマットは以下の通り。

{nnnn mm 〜} -- 「〜」という文の選択肢
選択されたら nnnn番のフラグにmmをセット
〜は通常のSJISコードの羅列、辞書圧縮も有効
〜の終端は } の存在で判断


rero2@yuumu.rim.or.jp