5.33. オルレラの泉

5.33.1. イベント開始サブルーチン
5.33.2. オルレラとの初回でのやりとり
5.33.3. オルレラとの二回目以降でのやりとり
[注意] 注意

この節は現在執筆中。

フィールド上で、ムオルの村辺りから海を渡り北東の湖の左下ら辺に足を踏み入れると、 画面が切り替わり、神秘的な雰囲気の泉が現れる。 そして、泉の中心付近に立ち入ると、先頭キャラクターが武器を泉に落としてしまい、 直ちに泉の精霊を自称するオルレラなる存在が出現する。

その後、パーティーメンバーとオルレラとの間で、落し物についての質疑応答が始まる。 これは有名な童話を下敷きにしているのは明白なのだが、 オリジナルの童話の結論とは異なり、嘘つきに取り返しの付かない損害を受けるわけでもなく、 また、正直者にありがたい利益があるわけでもない。

このイベントはそもそもファミコン版にはなかった。 リメイク版でわざわざ新しく導入したイベントであるハズなのに、 しかし実際プレイしてみると童話よりもつまらない結末になる。 これはどうしたことだろうか。 それとも、うまく立ち回れば意外な結果を引き起こせるのだろうか。 このイベントを処理するコードをおおまかに解析し、ある程度の真実を明らかにするのが本稿の目的だ。

5.33.1. イベント開始サブルーチン

オルレラの泉イベントを開始するサブルーチンコードの発見は、トレースログの単純な分析による。 このサブルーチンの呼び出しタイミングは、 パーティーがフィールドマップから、この泉のフロアへ進入した時点だとみなして構わない。

サブルーチン $CCED57 の処理コードを以下に示す。

CC/ED57:    AD5435      LDA $3554
CC/ED5A:    292000      AND #$0020
CC/ED5D:    D003        BNE $ED62
CC/ED5F:    4C69ED      JMP $ED69     1

CC/ED62:    2281A5CB    JSR $CBA581   2
CC/ED66:    4C6DED      JMP $ED6D

CC/ED69:    22D6A5CB    JSR $CBA5D6   3
CC/ED6D:    6B          RTL

1

変数 $7E3554 の特定のビットの ON/OFF により、呼び出すサブルーチンを選択する。 後述の通り、このフラグのセットはサブルーチン $CBA5D6 が行う(5.33.2 オルレラとの初回でのやりとり)。

2

オルレラ出現が二度目以降である場合、初回とは異なる会話になる。 それを実装するサブルーチンが $CBA5815.33.3 オルレラとの二回目以降でのやりとり)だ。

3

オルレラが初めてパーティーの前に姿を現わす場合の処理をするサブルーチン $CBA5D65.33.2 オルレラとの初回でのやりとり)を呼びだす。

5.33.2. オルレラとの初回でのやりとり

サブルーチン $CBA5D6 は、先頭キャラクターが武器を落としてから、 オルレラが出現して消えていくまでを処理する。 アセンブルコードを掲載しても面白くないゆえ、ポイントを以下に示すのみとする。

  • 先頭キャラクターが武器を泉に落とすところから、 オルレラが泉から姿を現し、名を名乗るシーンまではサブルーチン $CBA509 の呼び出しで実現している。

  • オルレラのイベント一連のサブルーチンで共通した方式なのだが、 台詞とナレーションの表示はすべて BRK 命令による。 すなわち、メッセージ ID を表す 2 バイトの仮想的な実引数を取るパターンだ。

  • サブルーチン $CDAC66 の呼び出しは、「はい・いいえ」ウィンドウの表示と入力待ち処理を実現する。 プレイヤーが「はい」を選択したときに限り、レジスターの Carry ビットが立つ。

  • 先頭キャラクターが落とした武器を示すアイテム ID が格納されているのは $7E362A だ。 一連の処理では、この値が「ひのきのぼう」または「まじんのオノ」であるときに、処理が分岐してくる。

  • このサブルーチンから呼びだすサブルーチンの中で、 オルレラが何かを行う処理がいくつかある。 それを呼び出しの起こるのが早い順番に挙げると、以下のようになる。

    $CBA509

    先頭キャラクターが武器を泉に落とすところから、 オルレラが泉から姿を現し、名を名乗るシーンまでを処理する。

    $CBA66B

    オルレラが泉に落とした武器そのものを返す処理。最も一般的な場合のもの。

    $CBA69F

    オルレラが「あなたは欲がないようですね」と言い、 「ひのきのぼう」を受け渡す処理。

    $CBA6D3

    再び泉に潜り、「まじんのオノ」を提示するところからの処理。 ここは少々込み入った処理になる。

5.33.3. オルレラとの二回目以降でのやりとり

サブルーチン $CBA581 は、パーティーが再び武器を泉に落としたときの処理を行う。 今度のオルレラは、すぐには武器を見つけてくれない。

  • 初回同様、最初にサブルーチン $CBA509 の呼び出しでオルレラの出現までの処理を行う。

  • 二度目以降はオルレラが「以前にも落としたのでは?」のような質問をするのがポイント。 ここで「はい・いいえ」ウィンドウを表示して、プレイヤーの回答を待つ。

  • このサブルーチンから呼びだすサブルーチンの中で、 オルレラが何かを行う処理がふたつある。

    $CBA786

    オルレラが落としたものを拾ってくると言い水に潜るが、 落し物が見つからなかったという展開になる場合の処理。 落とした武器がパーティーに戻るまでを制御する。

    $CBA6BB

    オルレラがわざと武器を再び落とされたことを知り、怒る結果になるときの処理。 怒りながらも、パーティーが落とした武器をそのまま返す。