本節ではデバッグに関するプログラム構成要素について述べる。 読者がデバッグモードを試す場合には、次のように設定するのが良いと思われる。
ゲームの途中ならば $C1FFFE
に対する値の上書きだけで構わない。
デバッグに関連するデータの構造について述べる。 データ自身については付録に収録したものを参照して欲しい。
アドレス $C1FFFE
の値によって一部プログラムの振る舞いが変化する。
製品版ではこのアドレスの値は #$0000
であり、これを標準モードや製品モードと呼ぶことにする。
このアドレスの値が #$0001
であれば、ゲームショーモード、
何か負の値、例えば #$FFFF
であれば、デバッグモードとそれぞれ呼ぶことにする。
デバッグコマンドとは、デバッグモードにおいて移動モードでコントローラーの L ボタンと押すと 表示されるメニューウィンドウにリストされているコマンド群のことを指すものとする。
アドレス $C8D4B0
に配列されているオブジェクトそれぞれがコマンドを表現する。
オブジェクトの型の詳細を次の表に示す。
各属性の詳細は次のとおり。
いんちきルーラとは、デバッグコマンドの一つであり、 現在地やキャラクターの MP に由来する制約を無視して指定の地点へ移動することを目的とするものだ。
詳細は 5.28.1.2 構造体 $C8A3AF
: ルーラ で述べる。
フラグショップとは、デバッグコマンドの一つであり、物語の進行状況を制御することを目的とするものだ。
アドレス $C8F7E5
に配列されているオブジェクトそれぞれがフラグを操作する処理コードのアドレスを保持している。
オブジェクトの型の詳細を次の表に示す。
各属性の詳細は 5.32.1.2 と同様だ。
デバッグモードでのさまざまな振る舞いについて述べる。
デバッグメニュー各コマンドの振る舞いについて簡単に述べる。
5.32.1.3 の冒頭の説明を参照。
だれの MP を消費することもなしにリレミト処理を行う。 リレミトが意味のあるところにいる限り、リレミト相当の処理を実行する。 ピラミッドの地下などでも機能する。 コマンドが成功しないときにはメッセージが表示される。
だれの MP を消費することもなしにラナルータ処理を行う。
ラナルータが禁止されていない限り、ラナルータ相当の処理を実行する。 ラナルータを成功させる要素が 4 つあるようだが、現在地にちなむもの以外は不明だ。
図のようなサブメニューを表示する。 選択する項目により、店屋の共通処理が始まる。
「ぶきや」「ぼうぐや」「どうぐや」「よろずや」の処理については 5.11 店屋 を、 「しんぷ」「シスター」は 5.14 教会、 「やどや」は 5.13 宿屋、 「ぎんこう」は 5.17 ゴールド銀行、 「なかまとうろくじょ」は 5.16 冒険者たちの登録所、 「ルイーダのさかば」は 5.15 ルイーダの酒場、 「ダーマのしんでん」は 5.18 転職、 「なまえかえや」は 5.19 命名神、 「かくとうじょう」「よそうや」「マッチメイク」は 5.20 格闘場、 「ふっかけみせや」は 5.12 ふっかけ店屋、 「メダルおじさん」は 5.22 メダルおじさん、 「シスターセーブ」「おうさま」は 5.10 王様 をそれぞれ参照。
レベルアップコマンドは、仲間キャラクター一人のレベルを変更する機能だ。
この項目を選択すると、コマンドウィンドウで「つよさ」を選択したときと同じサブウィンドウ群が出る。 さらにこの状態でキャラクターを選択すると、「つよさ」ウィンドウが出る代わりに、 数値入力ウィンドウが出現する(上記画像)。 ここで 1 から 99 までの値を入力すると、選択したキャラクターのレベルがその値となる。 キャラクターのパラメーターや、習得呪文もそれらしいものになる。 従ってレベルダウンも可能である。 0 の入力はキャンセル扱いになり、100 以上の値の入力は 99 が入力されたものとみなされる。
コードとしてはキャリーフラグをリセットするだけで、処理は本当に何もない。 デバッグコマンド「おみせ」から「ダーマ」を選択すればよいだろう。
せいかくコマンドは、仲間キャラクター一人の素の性格を変更する機能だ。
この項目を選択すると、コマンドウィンドウで「つよさ」を選択したときと同じサブウィンドウ群が出る。
さらにこの状態でキャラクターを選択すると、「つよさ」ウィンドウが出る代わりに、
性格リストウィンドウ (ID: #$A7
) が出現する(上記画像)。
どれか性格を選択すると、選択キャラクターの素の性格がそれに設定される。
おかねコマンドは、パーティーの所持金を変更する機能だ。
金額入力ウィンドウが出現する。 ここ値を入力すると、そのまま現在のパーティの所持金として設定される。
5.32.1.4 の冒頭の説明を参照。
各項目の詳細は後述する。
ひとじょうたいコマンドは、仲間キャラクター一人の「しに・まひ・どく」状態を 1 にする機能だ。 仲間キャラクターオブジェクトの属性については 5.4 仲間キャラクターオブジェクト で述べる。
「だれを」ウィンドウが出現して、パーティー内キャラクターのだれか一人を選択する。 キャラクターを選択すると、ステータスを「しに・まひ・どく」の中から設定することができる。
「しに」を選択すると、キャラクターの HP がゼロにすることで死なせる。 「まひ」「どく」はキャラクター状態ビットを ON にする処理である。
ゲームじょうたいコマンドは、現在地のある種の属性を表示する機能だ。
ウィンドウ (ID: #$7D
) が出現する。
例えば「ルーラ」では「できる」「できない」「あたまをぶつける」のどれかが表示される。
どうぐふくろコマンドは、ID が #$0000
から #$00E4
までのアイテムを一個ずつふくろに追加する機能だ。
実際には ID がゼロのアイテムはヌルアイテムなので、これは袋サブルーチンで除外される。
せんたくせんとうコマンドは、敵陣構成を指定して戦闘を開始する機能だ。 モンスターについては 5.5 モンスター で述べる。
まず、モンスターせんたくウィンドウ (ID: #$D1
) が出現する。
ここでモンスターを示す項目を選択すると、さらに数値入力ウィンドウが出現する。
数値を入力すると、再びモンスターせんたくウィンドウがアクティブになる。
モンスターと数値のペアを 4 回入力すると、さらに数値入力ウィンドウが出現する
(同じ場所に出てくるため、わかりにくい)。
ここで入力するのは戦闘背景 ID である。
ゼロを入力するとランダムに背景が決まり、
#$004A
以上の値を入力すると #$0049
を入力した扱いになる。
戦闘背景 ID を入力すると、戦闘モードに切り替わる。 登場するモンスターの群れは、先程指示したモンスターグループとなる。 各グループのモンスター頭数が、指定数値を考慮したものになっている。 画面背景も指定のものになっている。
タイルせんとうコマンドは、戦闘地域 ID を指定して戦闘を開始する機能だ。
戦闘地域オブジェクトについては 5.30.1.2 構造体 $C8ADD1
: 通常戦 で述べる。
数値入力ウィンドウが出現する。初期値は現在値が戦闘地域ならばその ID の値が既定値として表示されている。
ここで #$0069
未満の数値を入力すると、いきなり戦闘モードに切り替わり、
その敵陣構成は指定した ID に基づくものになっている。
モンスターをみるコマンドは、モンスターのアニメーションを確認する機能だ。 モンスターについては 5.5 モンスター で述べる。
画面が切り替わり、背景が戦闘背景 #$0001
になる。
ウィンドウにリストされているモンスターを選択すると、
そのモンスターのスプライトに関連するアニメーションの個数だけ数字がリストされたミニウィンドウが出現する。
ここで番号を選択すると、対応するアニメーションが再現される。
ぜんかいふくコマンドは、パーティー全員の毒・マヒ状態を回復してから HP と MP を完全に回復する。
死んでいるキャラクターにもこの回復を適用するが、 カンオケスプライトの更新は次のキャラクター再描画の機会まで発生しない。
名前とは裏腹に、このデバッグメニューウィンドウを消去して、 再びデバッグメニューウィンドウを表示するという処理になっている。
サウンドコマンドは、BGM と効果音を再生する機能だ。
まず数値入力ウィンドウが出現する。
ここで数値を入力すると、この値を ID とする BGM なり効果音なりが演奏される。
ゼロの入力は単に無視される。
入力値が #$017E
以上のときは、#$017E
が入力されたとして扱われる。
演奏ストップ機能はないらしい。
ほこうせっていコマンドは、キャンセル歩行モードを切り替える機能だ。
図のようなメッセージが出現する。
「はい」と答えると、キャンセル歩行ができる ($7E3500 |= #$0002
) ようになり、
「いいえ」はその逆 ($7E3500 &= ~#$0002
) となる。
キャンセル歩行が有効であるとは、SELECT ボタンを押しながら十字キーを押すことで、 壁や水場等の通過できない地形を通過することができる状態を指すようだ。 船で移動中の場合は、上陸しないでそのまま移動し続けることになる。
エンカウントせっていコマンドは、戦闘地域の移動中にランダムに戦闘が発生するかどうかを指定する機能だ。
図のようなメッセージが出現する。
「いいえ」と答えると、フィールドやダンジョンを歩いていても敵が一切出現しなく ($7E3500 &= ~#$0001
) なる。
「はい」はその逆 ($7E3500 |= #$0001
) である。
通常のゲームモードでは「はい」の状態である。
スタートフロアせっていコマンドは、冒険の書を選択してゲームを開始する地点をインチキフロアとするかどうかを指定する機能だ。 インチキフロアとは、勇者の家そっくりの謎の空間のことだ。
図のようなメッセージが出現する。
「はい」と答えると、
冒険の書を選択してゲームを開始する時点でのフロアが、
上述の謎空間 (ID: #$0001
) となるフラグ ($7E3500 |= #$0004
) が立つ。
「いいえ」はその逆となる。
ざひょうウィンドウコマンドは、座標ウィンドウ表示機能の有効性を切り替える機能だ。
図のようなメッセージが出現する。
「はい」と答えると、移動モードにおいて R ボタンを押したときに、
画面右下に現在の座標を表示するウィンドウ (ID: #$7C
) が出現するようになる。
ひとひょうじコマンドは、移動モードでパーティーキャラクターおよび「はなす」対象キャラクターのスプライト描画の有効性を切り替える機能だ。
図のようなメッセージが出現する。 「いいえ」と答えると、移動モードでパーティーキャラクターおよび「はなす」対象キャラクターのスプライトが描画されなくなる。 通常は「はい」の状態である。
ROMバージョンコマンドは、ウィンドウ #$B0
を表示する機能だ。
ROMバージョンの情報を示すウィンドウが画面右上に出現する。 デバッグモードでは、このデバッグメニューから表示しなくても、 冒険の書メニュー画面や、王様に冒険の書を記録させるときにもこの ROMバージョンウィンドウが出現する。
プレゼンようコマンドは、画面をエンディングの終盤付近(スタッフロール終了後くらい)に切り替える機能だ。
へんげのつえコマンドは、アイテムのへんげのつえを次に使うときに化けるスプライトを設定する機能だ。
数値入力ウィンドウが出現する。ここで 9 未満の数値を入力すればよい。
0 を入力することはデバッグ機能を使わないことを意味する。
1 から 8 までの入力は、ここから 1 を引いて配列 $C89839
の要素の位置を指定する。
この配列要素の値は 5.26.1.2 構造体 $C893D4
: 「はなす」対象分類 で述べるオブジェクトの ID だ。
デバッグモードが有効であると、通常のすごろくの振る舞いに加えて、次の操作を実現することができる。
すごろくコマンドウィンドウを出す前に L ボタンを押すと、図のように数値入力ウィンドウが出現する。 ここに 1 以上 6 以下の値を入力すると、次回以降、マス移動のためのサイコロの出目が入力値と同じになる。 0 を入力するか、入力をキャンセルすると、サイコロの出目は通常の振る舞い(ランダム)に戻る。
「?」マスに止まった直後、図のように数値入力ウィンドウが出現する。
ここで 49 未満の数値を入力すればよい。
0 を入力することはデバッグ機能を使わないことを意味する。
1 から 48 までの入力は、ここから 1 を引いて 5.31.1.4 構造体 $C8F1F4
: すごろくランダムイベント列 で述べる配列 ID とする。
この配列要素の値が 5.31.1.3 配列 $C8F188
: すごろくランダムイベントハンドラー で述べるハンドラーの ID となる。
「ぼうけんのしょ3」を新規作成すると、最後のステレオ・モノラル選択直後、 性格診断から始まらずに、図のフロア(テスト)からゲームが始まる。 勇者の性格は「まけずぎらい」であり、レベルがすでに 99 になっている。 そして、3 人の仲間「モツオ」「はげまる」「いんちき」とパーティーを組んでいる。 それぞれレベル 99 の戦士、魔法使い、遊び人だ。 いずれも呪文はすべて習得済みであり、性格が空白になっている。
おそらく $C1FFFE
の値が #$0001
であるビルドは、
SFC 版ドラクエ 3 の発売以前にゲームショー等でプログラムを動作させるためのものだと思われる。
製品ビルドとの振る舞いの違いには次のようなものがある。