5.14. 宿屋

5.14.1. 構造に関する構成要素
5.14.1.1. 構造体 $C30A98: 宿屋
5.14.1.2. 配列 $C3D2C3: 最初の挨拶
5.14.1.3. 配列 $C3D2C7: 宿泊費の案内
5.14.1.4. 配列 $C3D2CB: 宿泊しないときの台詞
5.14.1.5. 配列 $C3D2CF: 所持金不足のときの台詞
5.14.1.6. 配列 $C3D2D3: 宿泊するときの台詞
5.14.1.7. 配列 $C3D2D7: 宿泊後の台詞
5.14.2. 振る舞いに関する構成要素
5.14.2.1. サブルーチン $C3D0F8: 普通の宿屋
5.14.2.2. サブルーチン $C3D1D6: 「おおごえ」で現れる旅の宿屋
5.14.2.3. サブルーチン $C3D1F1: すごろくの宿屋
5.14.2.4. サブルーチン $C3D20C: 旅・すごろく宿屋共通

本節では宿屋について述べる。

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

宿屋を表現する型オブジェクトおよび、宿屋の台詞配列群から構成されている。

5.14.1.1. 構造体 $C30A98: 宿屋

アドレス $C30A98 に宿屋オブジェクトが配列されている。

表 5.36 構造体 $C30A98

オフセット 属性
#$00 #$03FF 宿代
#$01 #$07FC 位置
#$02 #$0080 (未使用)

宿代

宿代とは、一人当たりの宿泊費を値とする属性だ。 実際の宿泊費はこの値にパーティー内の生存者数を乗じた値となる。

位置

位置とは、この宿屋に宿泊したあとにパーティーがどこへ移動させられるかを表すオブジェクトの ID を値とする属性だ。 TODO: $C89BB7 の節を参照する。

5.14.1.2. 配列 $C3D2C3: 最初の挨拶

配列 $C3D2C3 の要素はメッセージ ID であり、配列長は 2 しかない。 「おおごえ」で現れる宿屋またはすごろくの宿屋の処理において、 宿屋の来店挨拶の台詞として参照されるものだ。

5.14.1.3. 配列 $C3D2C7: 宿泊費の案内

配列 $C3D2C7 の要素はメッセージ ID であり、配列長は 2 しかない。 「おおごえ」で現れる宿屋またはすごろくの宿屋の処理において、 宿泊費を告げる台詞として参照されるものだ。

5.14.1.4. 配列 $C3D2CB: 宿泊しないときの台詞

配列 $C3D2CB の要素はメッセージ ID であり、配列長は 2 しかない。 「おおごえ」で現れる宿屋またはすごろくの宿屋の処理において、 パーティーが宿泊しないときの宿屋の台詞として参照されるものだ。

5.14.1.5. 配列 $C3D2CF: 所持金不足のときの台詞

配列 $C3D2CF の要素はメッセージ ID であり、配列長は 2 しかない。 「おおごえ」で現れる宿屋またはすごろくの宿屋の処理において、 パーティーが利用しようとしたが、所持金が不足しているときの宿屋の反応の台詞として参照されるものだ。

5.14.1.6. 配列 $C3D2D3: 宿泊するときの台詞

配列 $C3D2D3 の要素はメッセージ ID であり、配列長は 2 しかない。 「おおごえ」で現れる宿屋またはすごろくの宿屋の処理における、 パーティーが宿泊する際の宿屋の台詞として参照されるものだ。

5.14.1.7. 配列 $C3D2D7: 宿泊後の台詞

配列 の要素はメッセージ ID であり、配列長は 2 しかない。 「おおごえ」で現れる宿屋またはすごろくの宿屋の処理における、 パーティーが宿泊した後の宿屋の台詞として参照されるものだ。

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

本作では宿屋の処理は三種類存在する。 街中にある宿屋、商人が使える「おおごえ」でフィールドで出現することがある宿屋、そして各すごろくにある宿屋マスの宿屋である。 いずれも、まず宿屋店主の挨拶があり、宿代を提示して……という一連の振る舞いが共通している。 ここではそれらの共通処理について説明していく。

5.14.2.1. サブルーチン $C3D0F8: 普通の宿屋

街中にある宿屋は共通して $C3D0F8 サブルーチンを呼び出すことで実装してある。 このサブルーチンを呼び出す前に A レジスターに宿屋 ID をセットしておく。

5.14.2.2. サブルーチン $C3D1D6: 「おおごえ」で現れる旅の宿屋

フィールドで「おおごえ」を使うと出現する旅の宿屋は、 サブルーチン $C3D1D6 で実装されている。 このサブルーチンは X レジスターに 0 をセットしてから、 旅・すごろく宿屋共通サブルーチンを呼び出すだけで終わる。

5.14.2.3. サブルーチン $C3D1F1: すごろくの宿屋

すごろくの宿屋のマスに止まると、画面がいきなり変わって宿屋の処理に突入する。 セリフ部分からの処理はサブルーチン $C3D1F1 で実装されている。 このサブルーチンは X レジスターに 2 をセットしてから、 旅・すごろく宿屋共通サブルーチンを呼び出すだけで終わる。

5.14.2.4. サブルーチン $C3D20C: 旅・すごろく宿屋共通

サブルーチン $C3D20C は、旅の宿屋とすごろくの宿屋の実装である。 このサブルーチンを呼び出す前に A レジスターと X レジスターに宿屋 ID と宿屋分類(旅かすごろくか)をそれぞれセットしておく。

処理の特徴を以下に列挙する。

  • 宿屋のセリフ表示をサブルーチン $C1A95A 呼び出しで実現している。 これは A レジスターにメッセージ ID をセットしてから呼び出すものである。 例えば最初の台詞は LDA $C3D2C3,X でメッセージ ID をセットする(先述)。 旅の宿屋とすごろくの宿屋の違いは、 この LDA 命令の X の違いに他ならない。

  • 宿屋の第一声のセリフは昼夜を問わない。