本節では宿屋について述べる。
宿屋を表現する型オブジェクトおよび、宿屋の台詞配列群から構成されている。
アドレス $C30A98
に宿屋オブジェクトが配列されている。
宿代とは、一人当たりの宿泊費を値とする属性だ。 実際の宿泊費はこの値にパーティー内の生存者数を乗じた値となる。
位置とは、この宿屋に宿泊したあとにパーティーがどこへ移動させられるかを表すオブジェクトの ID を値とする属性だ。
TODO: $C89BB7
の節を参照する。
配列 $C3D2C3
の要素はメッセージ ID であり、配列長は 2 しかない。
「おおごえ」で現れる宿屋またはすごろくの宿屋の処理において、
宿屋の来店挨拶の台詞として参照されるものだ。
配列 $C3D2C7
の要素はメッセージ ID であり、配列長は 2 しかない。
「おおごえ」で現れる宿屋またはすごろくの宿屋の処理において、
宿泊費を告げる台詞として参照されるものだ。
配列 $C3D2CB
の要素はメッセージ ID であり、配列長は 2 しかない。
「おおごえ」で現れる宿屋またはすごろくの宿屋の処理において、
パーティーが宿泊しないときの宿屋の台詞として参照されるものだ。
配列 $C3D2CF
の要素はメッセージ ID であり、配列長は 2 しかない。
「おおごえ」で現れる宿屋またはすごろくの宿屋の処理において、
パーティーが利用しようとしたが、所持金が不足しているときの宿屋の反応の台詞として参照されるものだ。
配列 $C3D2D3
の要素はメッセージ ID であり、配列長は 2 しかない。
「おおごえ」で現れる宿屋またはすごろくの宿屋の処理における、
パーティーが宿泊する際の宿屋の台詞として参照されるものだ。
本作では宿屋の処理は三種類存在する。 街中にある宿屋、商人が使える「おおごえ」でフィールドで出現することがある宿屋、そして各すごろくにある宿屋マスの宿屋である。 いずれも、まず宿屋店主の挨拶があり、宿代を提示して……という一連の振る舞いが共通している。 ここではそれらの共通処理について説明していく。
街中にある宿屋は共通して $C3D0F8
サブルーチンを呼び出すことで実装してある。
このサブルーチンを呼び出す前に A レジスターに宿屋 ID をセットしておく。
フィールドで「おおごえ」を使うと出現する旅の宿屋は、
サブルーチン $C3D1D6
で実装されている。
このサブルーチンは X レジスターに 0 をセットしてから、
旅・すごろく宿屋共通サブルーチンを呼び出すだけで終わる。
すごろくの宿屋のマスに止まると、画面がいきなり変わって宿屋の処理に突入する。
セリフ部分からの処理はサブルーチン $C3D1F1
で実装されている。
このサブルーチンは X レジスターに 2 をセットしてから、
旅・すごろく宿屋共通サブルーチンを呼び出すだけで終わる。
サブルーチン $C3D20C
は、旅の宿屋とすごろくの宿屋の実装である。
このサブルーチンを呼び出す前に A レジスターと X レジスターに宿屋 ID と宿屋分類(旅かすごろくか)をそれぞれセットしておく。
処理の特徴を以下に列挙する。
宿屋のセリフ表示をサブルーチン $C1A95A
呼び出しで実現している。
これは A レジスターにメッセージ ID をセットしてから呼び出すものである。
例えば最初の台詞は LDA $C3D2C3,X
でメッセージ ID をセットする(先述)。
旅の宿屋とすごろくの宿屋の違いは、
この LDA
命令の X の違いに他ならない。
宿屋の第一声のセリフは昼夜を問わない。