DQ3 ストーリー変更(ロマリア~ノアニール9)

さて、イベントの実装の続きです。

  • SR: $BF10D ロマリア東部の橋の修復失敗報告処理(新SR)
0BF10D COP goto $00FFE4
0BF10E JSL $CCE1D1 SR: $0CE1D1 カウンタが2000になるまで待機
0BF112 JSL $CDAED1 SR: $0DAED1
0BF116 JSL $CCD37E SR: $0CD37E
0BF11A BRK $0FE5 ($0B0FE5) goto $00FFE6(メッセージ表示) #$0FE5
0BF11D JSL $CDACD2 SR: $0DACD2
0BF121 JSL $CDADED SR: $0DADED カウンタに3000をセット
0BF125 JSL $CDAEF1 SR: $0DAEF1 カウンタが4000になるまで待機
0BF129 BRK $0FE9 ($0B0FE9) goto $00FFE6(メッセージ表示) #$0FE9
0BF12C JSL $CDACD2 SR: $0DACD2
0BF130 JSL $CDADFB SR: $0DADFB カウンタに5000をセット
0BF134 JSL $CDAF11 SR: $0DAF11 カウンタが6000になるまで待機
0BF138 BRK $0FEA ($0B0FEA) goto $00FFE6(メッセージ表示) #$0FEA
0BF13B JSL $CDACD2 SR: $0DACD2
0BF13F JSL $CDAE09 SR: $0DAE09 カウンタに7000をセット
0BF143 JSL $CDAF31 SR: $0DAF31 カウンタが8000になるまで待機
0BF147 JSL $CDD65C SR: $0DD65C PC表示
0BF14B JSL $CDAE17 SR: $0DAE17 カウンタに7000をセット
0BF14F JSL $CDAF51 SR: $0DAF51 カウンタが10000になるまで待機
0BF153 LDA $354A A=$354A
0BF156 AND #$0020 A&=#$0020 ノアニールが開放済みか
0BF159 BNE #$05 if(z==off) goto $0BF160
0BF15B BRK $0FE7 ($0B0FE7) goto $00FFE6(メッセージ表示) #$0FE7
0BF15E BRA #$03 goto $0BF163
0BF160 BRK $0FEE ($0B0FEE) goto $00FFE6(メッセージ表示) #$0FEE
0BF163 JSL $CDACD2 SR: $0DACD2
0BF167 JSL $CCD383 SR: $0CD383
0BF16B JSL $CCD298 SR: $0CD298
0BF16F RTL return
  • SR: $0CF1D7 NPC1_MoveSR_056D(兵士のNPC)(新SR)
0CF1D7 COP goto $00FFE4
0CF1D8 JSL $CCD392 SR: $0CD392
0CF1DC JSL $CDAEE1 SR: $0DAEE1 カウンタが3000になるまで待機
0CF1E0 LDA #$0031 A=#$0031
0CF1E3 LDX #$0036 X=#$0036
0CF1E6 JSL $C75305 SR: $075305 キャラクター出現座標を指定
0CF1EA JSL $CCD857 SR: $0CD857 キャラクターを上に向かせる
0CF1EE LDX #$0031 X=#$0031
0CF1F1 LDA #$002A A=#$002A
0CF1F4 JSL $C75474 SR: $075474 キャラクター移動先座標を指定
0CF1F8 JSL $CCD59D SR: $0CD59D 指定座標にY軸→X軸の順でキャラクター移動
0CF1FC JSL $CDADF4 SR: $0DADF4 カウンタに4000をセット
0CF200 JSL $CDAF01 SR: $0DAF01 カウンタが5000になるまで待機
0CF204 JSL $CC73CF SR: $0C73CF
0CF208 BRK $0FE6 ($0C0FE6) goto $00FFE6(メッセージ表示) #$0FE6
0CF20B JSL $CDACD2 SR: $0DACD2
0CF20F JSL $CDAE02 SR: $0DAE02 カウンタに6000をセット
0CF213 JSL $CDAF21 SR: $0DAF21 カウンタが7000になるまで待機
0CF217 LDX #$0031 X=#$0031
0CF21A LDA #$0036 A=#$0036
0CF21D JSL $C75474 SR: $075474 キャラクター移動先座標を指定
0CF221 JSL $CCD59D SR: $0CD59D 指定座標にY軸→X軸の順でキャラクター移動
0CF225 JSL $C75930 SR: $075930 キャラクター消滅
0CF229 JSL $CDAE10 SR: $0DAE10 カウンタに8000をセット
0CF22D RTL return

基本的にはその7で定義したとおりにカウンタのセット/待機を実装していくだけです。しかしここで1点問題があります。報告に来る兵士は階段からまっすぐ($31, $2A)の座標までやってきますが、ロマリア王に話し掛ける直前にパーティがその進路にかかるように立っていた場合、

「キャラクターがそこにいる」という情報が残っているらしく、兵士が途中で立ち止まってしまいます(緑丸が到達指定座標)。

こうなると以降のイベントが一切進まなくなり、フリーズしたような状態になってしまいます。この問題を回避するにはキャラクターの座標情報を変更すればいいのですが、まっとうなやり方が結局わからなかったため、所定の場所のRAMを無理矢理書き換えることにします。というわけで続きは次回。