DQ3 すごろくシステム変更2

ようやく無限回廊フロアの実装が終わりました。ロンダルキア同様フロア内に複数の分岐があり、ミスったら振り出しに戻り、の例のやつです。ところが、作り終わってから

無限回廊は自分にとっては全然無限じゃない

ということに気がつきました。自分で作ってるのでしょうがないわけですが、かわりに皆さんに味わってもらうことにします。readmeのネタバレには正解ルートを書いておくのでとっとと先に行きたい人はそちらを参照してください。だんだん1つのギミックの実装にかかる時間が長くなっているような気がする上に、まだあれこれと実装のメドのたたない変更をするつもりなのでいつになったらリリースできるかわかりませんが、手をつけにくいところを後回しにしているのでそれもしょうがないかなと自己弁護。

さて、まずは大枠の変更から手をつけます。まずはすごろく開始時に所持金を別領域に退避させ終了時に元に戻す部分に手をつけます。所持金の退避には3バイトあればOKなので、セーブデータを展開しているRAMの一部をテンポラリ用バッファとして使用します(あんまりよくないと思うのですが、他に確実に空いてそうなところを探すのが面倒だったので)。すごろく中かどうかを意味するフラグは$7E353Bの2ビット目なので、そのフラグをONにしている部分に処理を追加するようにします。

  • SR: $05FA24 すごろく中フラグon+所持金1化処理(新SR)
05FA24JSL $C90789SR: $090789 引数:1#$353D 引数:2#$7E 引数:3#$04 引数:4#$00 引数:5#$00すごろく中フラグON
05FA2ELDA $3696A=$3696
05FA31STA $35C0$35C0=A
05FA34LDA $3697A=$3697
05FA37STA $35C1$35C1=A所持金を退避
05FA3ALDA #$0001A=#$0001
05FA3DSTA $3696$3696=A
05FA40STZ $3697$3697=#$00所持金に1をセット
05FA43RTLreturn

  • SR: $0A3331 すごろく場1イベント処理?
0A333DJSL $C5FA24SR: $05FA24すごろく中フラグon+所持金1化処理(新SR)
0A3341NOP
0A3342NOP

…他変更箇所多数

  • SR: $05FA44 すごろく中フラグoff+所持金リストア処理(新SR)
05FA44JSL $C3FF09SR: $03FF09すごろく中かどうか(該当c=on)
05FA48BCC #$26if(c==off) goto $05FA70
05FA4AJSL $C907CCSR: $0907CC 引数:1#$353D 引数:2#$7E 引数:3#$04 引数:4#$00 引数:5#$00
05FA54JSL $C907CCSR: $0907CC 引数:1#$35B5 引数:2#$7E 引数:3#$38 引数:4#$00 引数:5#$00
05FA5ELDA $35C0A=$35C0
05FA61STA $3696$3696=A
05FA64LDA $35C1A=$35C1
05FA67STA $3697$3697=A所持金情報を戻す
05FA6ASTZ $35C0$35C0=#$00
05FA6DSTZ $35C1$35C1=#$00
05FA70RTLreturn

  • SR: $057FE7 落とし穴処理
05805AJSL $C5FA44SR: $05FA44すごろく中フラグoff+所持金リストア処理
05805ENOP
05805FNOP

…他変更箇所多数

(2010-06-11追記)
すごろく中フラグoff+所持金リストア処理をしないといけないのは以下のケースです。多分抜けはないと思いますがもしあったらバグ(もしくはここに記載漏れ)ですのでぜひお知らせを。

  • あがりになったとき
  • 落とし穴に落ちたとき
  • 残り回数がなくなったとき
  • 自発的に「やめる」を選んだとき
  • ダメージパネルでHPが0になったとき
  • 戦闘中に全滅したとき

すごろく中フラグoff+所持金リストア処理SRの中で現在すごろく中かチェックしている理由はこのフラグをクリアするSRが複数回呼ばれることがあるためです。チェックしないと所持金のリストア処理が2回行われ、すごろく終了後に所持金が0になってしまいます。もうひとつはすごろく中のゴールド獲得部分を「コイン」に変える作業ですが、基本メッセージの変更のみなので省略します。(戦闘終了後の部分については別途説明します)

スポンサーリンク

コメントを書く

メールアドレスが公開されることはありません。コメントは管理者の承認後表示されます。