5.10. シスターセーブ解析

5.10.1. 解析
5.10.1.1. シスターセーブ共通処理サブルーチン
5.10.1.2. シスターセーブ用台詞のメッセージ ID

シスターセーブとは、アリアハンのルイーダの酒場にいるシスターの行う、 冒険の書への記録サブルーチンを示す。 このシスターの「はなす」処理は冒険の進行状況とかを考慮した上で台詞がけっこう変わったりするが、 本節で見るのはそこではなく、その先のいつもの処理だ。

5.10.1. 解析

シスターセーブの「共通」処理サブルーチンという言い方は奇妙な感じがするが、 店屋教会などの、 各種共通処理サブルーチンと同列の扱いでコードを配置しているため、 特定の人物からのみしか利用されないとしても、これも共通処理と呼ぶことにする。

台詞表示にクセがあり、このシスターは一人しかいないので、 メッセージ ID は固定値のセットで実装して構わないはずだが、 なぜか LDA addr,X 命令でメッセージ ID を定数領域からロードしてから、 汎用メッセージ表示サブルーチン $C1A95A を利用している。

5.10.1.1. シスターセーブ共通処理サブルーチン

サブルーチン $C3C251 がシスターセーブ処理の主な実装だ。

  • 事前条件として、A レジスタの値に台詞種別 ID がセット済みであること。 ただし、すぐにわかるようにこのセットには実質的な意味はない。 (台詞の種類が一種類しかないから)

  • もし A レジスタの値が 1 以上ならば、A = 0 とする。

  • $2BB2X レジスタの両方に A レジスタの値(つまりゼロ)をセットする。

  • LDA $C3C2F6,X でシスターの台詞のメッセージ ID をロードし、 サブルーチン $C1A95A 呼び出しにより台詞 「あなたの旅の せいかを 冒険の書に きろくなさいますか?」 を表示する。

  • はい・いいえウィンドウを表示して、プレイヤーの入力を待つ。

    • キャンセル抜け or いいえ ⇒【終了】へ制御を移す。

    • それ以外 ⇒ 次へ制御を進める。

  • 汎用サブルーチン $C45E67 を呼び出す。 ウィンドウに冒険の書をリストする準備と思われるが、詳細は未解析。

  • LDA $C3C2FA,X でシスターの台詞のメッセージ ID をロードし、 サブルーチン $C1A95A 呼び出しにより台詞 「では なん番の冒険の書に書きとめますか?」 を表示する。

  • 冒険の書リストをウィンドウに表示して、プレイヤーの入力待ちとなる。

    • いずれかの冒険の書を選択した ⇒【セーブ】へ制御を進める。

    • それ以外 ⇒ 次へ制御を進める。

  • LDA $C3C2FE,X でシスターの台詞のメッセージ ID をロードし、 サブルーチン $C1A95A 呼び出しにより台詞 「おやめに なるのですね」 を表示する。 その後【終了】へ制御を移す。

  • 【セーブ】

    • 文脈から判断すれば、ここは選択した冒険の書に必要なデータを保存する処理だ。 逆アセンブルコードを以下に転載する。 バンク $C4 のサブルーチンは解析していないが、 冒険の書を解析したければ、見ればよい。 なお、$33A0$33A2 は、 最後に冒険の書にセーブした場所の情報のような値だと思われる。

      C3/C2AB:    ACA033      LDY $33A0
      C3/C2AE:    22CE2BC4    JSR $C42BCE         1
      C3/C2B2:    FD
      C3/C2B3:    ACA233      LDY $33A2
      C3/C2B6:    222C2CC4    JSR $C42C2C         2
      C3/C2BA:    FD
      C3/C2BB:    224E62C4    JSR $C4624E         3
      C3/C2BF:    FF
      

      1

      未解析サブルーチン。

      2

      未解析サブルーチン。

      3

      未解析サブルーチン。

    • 効果音 (ID: #$002B) を鳴らし、終わるまで待つ。

    • LDA $C3C2FC でシスターの台詞のメッセージ ID をロードし、 サブルーチン $C1A95A 呼び出しにより台詞 「たしかに きろくしました」 を表示する。次の【終了】に制御を進める。

  • 【終了】

    • LDA $C3C2F8,X でシスターの台詞のメッセージ ID をロードし、 サブルーチン $C1A95A 呼び出しにより台詞 「あなたの旅に神のごかごが ありますように」 を表示する。

    • サブルーチンの呼び出し元に制御を戻す。

5.10.1.2. シスターセーブ用台詞のメッセージ ID

共通処理サブルーチン内から LDA addr,X によって参照されるメッセージ ID を以下に載せる。

C3/C2F6:    4E0B  ; [D6][D1]あなたの旅の せいかを[AD]冒険の書に きろくなさいますか?[AC]
C3/C2F8:    4F0B  ; [D6][D1]あなたの旅に[AD]神のごかごが ありますように。[AC]
C3/C2FA:    500B  ; [D6][D1]では なん番の 冒険の書に[AD]書きとめますか?[AC]
C3/C2FC:    510B  ; [D6][D1]たしかに きろくしました。[AF][AC]
C3/C2FE:    520B  ; [D6][D1]おやめに なるのですね。[AF][AC]