4.18. 空間情報

4.18.1. 構造に関する構成要素
4.18.1.1. 配列 $C815BF: 空間最小単位
4.18.1.2. 構造体 $C8997A: ルーラ
4.18.1.3. 構造体 $C8A188: 場所
4.18.1.4. 構造体 $C8B314: 座標
4.18.2. 振る舞いに関する構成要素

本節では ROM における空間情報の構成について述べる。 ここで言う空間情報とは、パーティーがどこにいるのか、どこに移動しようとしているのか、 そもそも「どこ」をどのように表現するのかを定義するデータ全般を指すものとする。

4.18.1. 構造に関する構成要素

空間情報に関係するデータ構造について述べる。

図 4.35 空間情報に関するクラス図

空間情報に関するクラス図

4.18.1.1. 配列 $C815BF: 空間最小単位

アドレス $C815BF から 1 バイト長要素の配列が定義されている。 配列というよりは、フローミの呪文が取り扱う情報単位の ID から場所 ID への対応関係、または関数と解釈したほうがよい。

例を挙げると、この配列の添字 #$01FB から #$0200 まではすべて値が #$4E であり、これらはすべてスライム格闘場を意味している。 ただし、各要素は「格闘場エントランス→格闘場」、「格闘場地下会場→格闘場」、「格闘場地下控室→格闘場」……の相異なる対応をそれぞれ表現している。 付録の CSV ではコメントを念入りにいれてあるので、読者はそれを見て配列が表現しているモデルを把握して欲しい。

読者が PAR 機能が利用可能ならば、ぜひアドレス $7E5ED9 を観察して欲しい。 これが現在パーティーがいる空間単位配列の添字値を表している。

4.18.1.2. 構造体 $C8997A: ルーラ

アドレス $C8997A からは次の表が表現する サイズ 0x0B バイトの型のオブジェクトが 0xB8 個配列されている。 これらのオブジェクトはルーラの呪文を実現するのに必要な情報をいくつかの属性として保持する。

表 4.76 構造体 $C8997A

オフセット 属性
#$00 #$FFFF 名前
#$02 #$000F フィールド分類
#$02 #$1FF0 ルーラ座標
#$03 #$3FE0 船座標 0
#$04 #$7FC0 船座標 1
#$05 #$FF80 船座標 2
#$07 #$01FF 空飛ぶベッド座標
#$08 #$03FE ひょうたん島座標 0
#$09 #$07FC ひょうたん島座標 1

各属性の意味を次に説明する。

名前

ルーラメニューウィンドウの項目として表示するための文字列の ID を値とする属性だ。 文字列については 4.2 文字列 で述べる。

フィールド分類

この場所がどのフィールドにあるのかを示す値をとる属性だ。 ただし、データを見ると実情とそぐわない設定をされているオブジェクトがわずかに存在する。

表 4.77 フィールド分類

意味
#$00 n/a
#$01 上フィールド
#$02 下フィールド
#$04 海底
#$08 はざまの世界

ルーラ座標

パーティーがルーラを実行した直後の彼らの位置を表現する座標オブジェクト (4.18.1.4) の ID を値とする属性だ。

船座標 k (k = 0..2)

パーティーがルーラを実行した直後の船の位置を表現する座標オブジェクトの ID を値とする属性だ。 物語の進行状況によって、参照する k が決まる。

空飛ぶベッド座標

パーティーがルーラを実行した直後の空飛ぶベッドの位置を表現する座標オブジェクトの ID を値とする属性だ。

ひょうたん島座標 k (k = 0..1)

パーティーがルーラを実行した直後のひょうたん島の位置を表現する座標オブジェクトの ID を値とする属性だ。

4.18.1.3. 構造体 $C8A188: 場所

アドレス $C8A188 からは次の表が表現する型の、大きさ 8 バイト長のオブジェクトが 0x93 個配列されている。 これらのオブジェクトは先述した空間単位構成要素のいくつかを集約する構成要素を表現する。

表 4.78 構造体 $C8A188

オフセット 属性
#$00 #$000F フィールド分類
#$00 #$0010 タカのめ許可
#$00 #$3FC0 ルーラ番号
#$01 #$00C0 ルーラ判定
#$02 #$0001 リレミト許可
#$02 #$07FC 地図座標
#$03 #$0FF8 リレミト座標 0
#$04 #$1FF0 リレミト座標 1
#$05 #$0020 毒考慮
#$05 #$0040 おおごえ許可
#$06 #$FFFF 名前

各属性の意味を次に説明する。

フィールド分類

4.18.1.2 で述べたものと同じだ。

タカのめ許可

ブーリアン型属性であり、値が 1 であれば移動コマンドの「タカのめ」がこの場所では有効であることを意味する。

ルーラ番号

ルーラメニューウィンドウの項目番号を値とする属性だ。 フィールド分類属性値と関係なしに番号が割り振られていて、 例えば上フィールドの「ライフコッド」と下フィールドの「ダーマしんでん」はどちらも先頭の項目だが、 属性値は相異なる。

ルーラ判定

この場所でルーラを実行すると、どう振る舞うのかを示す値を取る属性だ。

表 4.79 ルーラ判定

意味
#$00 有効
#$01 天井に頭をぶつける
#$02 基本的には不思議な力でかき消される

リレミト許可

ブーリアン型属性であり、値が 1 であればリレミトの実行がこの場所では有効であることを意味する。

地図座標, リレミト座標 k (k = 0..1)

地図座標は「せかいちず」「ふしぎなちず」を開いたときの羽の位置を、 リレミト座標 k (k = 0..1) はリレミト実行時のパーティー位置を定義する座標オブジェクトの ID をそれぞれ取る属性だ。

毒考慮

ブーリアン型属性であり、値が 1 であれば毒状態のキャラクターが移動中にダメージを受けることを意味する。

おおごえ許可

ブーリアン型属性であり、値が 1 であれば移動コマンドの「おおごえ」がこの場所では有効であることを意味する。

名前

フローミの実行結果における場所の名前を表す文字列の ID を値とする属性だ。 文字列については 4.2 文字列 で述べる。

4.18.1.4. 構造体 $C8B314: 座標

アドレス $C8B314 からは次の表が表現する型の 5 バイト長オブジェクトが 0x1C9 個配列されている。これらのオブジェクトはパーティーが画面遷移直後に対象空間のどの座標に現れるのかを指定する。

表 4.80 構造体 $C8B314

オフセット 属性
#$00 #$03FF 空間最小単位
#$01 #$000C 座標配列
#$01 #$1FF0 MX
#$02 #$3FE0 MY
#$03 #$00C0 LV
#$04 #$001F 屋根区域
#$04 #$0060 向き
#$04 #$0080 (未使用)

各属性の意味は 4.19.1.7 構造体 $C834FC: 目的地点 で述べるものと同様だ。

4.18.2. 振る舞いに関する構成要素

TBW