ユーザ用ツール

サイト用ツール


技術資料

文書の過去の版を表示しています。


ハイハイスクールアドベンチャー技術資料

概要

この文書は、ハイハイスクールアドベンチャーの技術的な資料である。

データファイル構成

プログラム本体以外には以下のファイルを使用している。

  • シナリオデータファイル
  • 画面データファイル
    • 部屋データ
    • アイテムデータ
  • 語句辞書ファイル
  • 初期データ
  • 音データファイル
  • メッセージファイル1)

ゲームエンジン仕様

ゲームエンジンは、汎用のアドベンチャーゲームエンジンを目指してデザインしたものの、入出力と強く結びついた動作をきれいに落とし込み切れていないので事実上のハイハイスクールアドベンチャー専用エンジンとなっている。

シナリオデータは32bitを1単位としたバイナリデータの集合で、複数の条件語からなる条件節に続いて、アクション節が続く構成となっている。

エンジンは条件節を評価し、条件節内の全ての条件語を満たしたら、アクション節を実行する。 複数の条件節を満たす場合には先にある条件節が優先的にマッチし、以下のものは対象外となる。

ハイハイスクールアドベンチャーの場合は、基本的には、どの部屋で、どういうコマンドが渡されたのかを評価する形が最も一般的である。

条件にはワイルドカードがあり、例えば、どの部屋であっても、北へ移動しろというコマンドが来たら、アクションを起こすというような場合には、部屋番号に相当する部分にはワイルドカードを渡しておく。

フォーマット

76543210765432107654321076543210
actoppadtypidoffsetvalue
typid

actビットで、条件語(act=0)かアクション語(act=1)かを判別している。 opは条件やアクションを具体的に示す。 3bit 8種類を持つことができる。 padはパディングエリアで、この4bitは使用されていない。 typとidはペアで、typで示される種類のデータのid番目にアクセスする。 offsetは8ビットのデータとしても使われるし、typ(3)+id(5)としても使われる。 typ(id)同士を比較したり内容をコピーしたりするときには offsetをこのように分割する。 valueは8ビットのデータである。

条件語

条件語はactビットが0のものを指す。 条件語は以下のようなフォーマットを持つ。

76543210765432107654321076543210
0cond typ1id1typ2id2value

cond

condは以下の8種類がある。

意味
0NOP
1EQ
2NE
3GT
4GE
5LT
6LE
7未定義

オペランド

第一オペランドは typ1 + id1 であらわされ、第二オペランドは typ2 + id2または valueが使われる。 第二オペランドが typ2 + id2なのか valueなのかは、typ2によって決まる。

typは以下のものがある。

意味
0None (typ2ならvalueを使う)
1Fact
2Place
3System
4Vector

Factおよび Placeはフラグである。 ハイハイスクールアドベンチャーにおいては、Factは懐中電灯が使用中かとか、先生が出現しているかとかそいうい情報を、Placeはアイテムの場所を管理している。idは5ビットあるので32種類ずつ持つことができるが、そんなには使っていない。

Systemは文字通りシステム変数で、Vectorは部屋と部屋のリンク情報を管理している。

例えば、

76543210765432107654321076543210
0001----00100001000-----00001010

このビット列0x1021000A2)は、Fact(1) == 10 を意味している。

アクション語

アクション語は act == 1のものを指し、以下のようなフォーマットを持つ。

76543210765432107654321076543210
1action typ1id1typ2id2value

アクション

アクションは以下の8種類である。

意味
0Nop
1Move(部屋の移動)
2Asgn(値の代入)
3Mesg(メッセージの出力)
4Dlog(選択ダイアログの表示)
5Look(Look動作)
6Snd(音を鳴らす)
7Over(ゲームオーバー)

オペランド

画面データ仕様

語句辞書仕様

1)
QT版のみ
2)
do not care '-' を '0'にした場合の値
技術資料.1708409849.txt.gz · 最終更新: 2024/02/20 15:17 by araki