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

イベントの残りの実装を終わらせてしまいます。

  • SR: $0CF500 NPC1_TalkSR_0573(ドン・ガアデとの会話処理)(新SR)
0CF500LDA $354AA=$354A
0CF503AND #$0020A&=#$0020目覚めの粉を使っているか
0CF506BNE #$03if(z==off) goto $0CF50B
0CF508JMP $F53B ($0CF53B)goto $0CF53B
0CF50BLDA $35B0A=$35B0
0CF50EAND #$0020A&=#$0020橋が修復済みか
0CF511BEQ #$0Aif(z==on) goto $0CF51D
0CF513BRK $0FED ($0C0FED)goto $00FFE6(メッセージ表示) #$0FED
0CF516JSL $CDACD2SR: $0DACD2
0CF51AJMP $F53E ($0CF53E)goto $0CF53E
0CF51DLDA $35B0A=$35B0
0CF520AND #$0008A&=#$0008ロマリアの橋修復失敗イベントをみているか
0CF523BEQ #$10if(z==on) goto $0CF535
0CF525BRK $0FEB ($0C0FEB)goto $00FFE6(メッセージ表示) #$0FEB
0CF528LDA #$0010A=#$0010
0CF52BTSB $35B0A or $35B0
0CF52EJSL $CDADD8SR: $0DADD8
0CF532JMP $F53E ($0CF53E)goto $0CF53E
0CF535BRK $0FEC ($0C0FEC)goto $00FFE6(メッセージ表示) #$0FEC
0CF538JMP $F53E ($0CF53E)goto $0CF53E
0CF53BBRK $0151 ($0C0151)goto $00FFE6(メッセージ表示) #$0151
0CF53ERTLreturn

  • SR: $0CF56E NPC1_MoveSR_0573(ドン・ガアデの移動処理)(新SR)
0CF56ELDA $354AA=$354A
0CF571AND #$0020A&=#$0020目覚めの粉を使っているか
0CF574BEQ #$14if(z==on) goto $0CF58A
0CF576LDA $35B0A=$35B0
0CF579AND #$0010A&=#$0010ドン・ガアデがロマリアに向かっているか
0CF57CBNE #$06if(z==off) goto $0CF584
0CF57EJSL $CCF5D0SR: $0CF5D0ドン・ガアデがルーラでロマリアに向かう処理
0CF582BRA #$04goto $0CF588
0CF584JSL $CCDADFSR: $0CDADF
0CF588BRA #$04goto $0CF58E
0CF58AJSL $CCD17BSR: $0CD17B
0CF58ERTLreturn

  • SR: $0CF5D0 ドン・ガアデがルーラでロマリアに向かう処理(新SR)
0CF5D0COPgoto $00FFE4
0CF5D1JSL $CDAEB1SR: $0DAEB1カウンタが1000になるまで待機
0CF5D5JSL $CC73CFSR: $0C73CF足踏みをする処理
0CF5D9JSL $CDADE6SR: $0DADE6カウンタに2000をセット
0CF5DDJSL $CDAEE1SR: $0DAEE1カウンタが3000になるまで待機
0CF5E1JSL $C1E32ESR: $01E32E 引数:1#$0054ルーラのBGM再生
0CF5E7LDX #$0000X=#$0000
0CF5EALDA $DAA5,XA=$DAA5+X
0CF5EDBMI #$0Aif(n==on) goto $0CF5F9
0CF5EFSTA $2F00,X$2F00+X=A
0CF5F2INXX++
0CF5F3INXX++
0CF5F4CPX #$0008X>=#$0008?
0CF5F7BCC #$F1if(c==off) goto $0CF5EA
0CF5F9LDA #$0008A=#$0008
0CF5FCSTA $DAA5$DAA5=A
0CF5FFLDA #$FFFFA=#$FFFF
0CF602STA $DAA7$DAA7=A
0CF605LDA #$FFFFA=#$FFFF
0CF608STA $DAA9$DAA9=A
0CF60BLDA #$FFFFA=#$FFFF
0CF60ESTA $DAAB$DAAB=A
0CF611JSL $C1E7D5SR: $01E7D5ルーラでキャラクターが飛び上がる処理
0CF615JSL $C75930SR: $075930
0CF619LDX #$0000X=#$0000
0CF61CLDA $2F00,XA=$2F00+X
0CF61FBMI #$0Dif(n==on) goto $0CF62E
0CF621STA $DAA5,X$DAA5+X=A
0CF624STZ $2F00,X$2F00+X=#$00
0CF627INXX++
0CF628INXX++
0CF629CPX #$0008X>=#$0008?
0CF62CBCC #$EEif(c==off) goto $0CF61C
0CF62ERTLreturn

ちょっと解説を加えると、$7EDAA5-はルーラ(もしくはキメラの翼)で飛び上がる対象のキャラクターのマップ上でのIDがセットされているようです(他の用途にも使われているかもしれませんが不明)。通常はPCのIDがセットされているのですが、今回は飛び上がる対象が変わるので、飛び上がる演出をする直前にもともとセットされていた値を$7E2F00-に退避しておき、ドン・ガアデのID(#$0008)をセットし、演出後値を元に戻すということをしています。

  • SR: $01E7D5 ルーラでキャラクターが飛び上がる処理(新SR)
01E7D5JSR $D1ACSR: $01D1ACルーラでキャラクターが飛び上がる処理
01E7D8RTLreturn

なんでこんなSRを作ったかというと、オリジナルから存在するSR: $01D1ACは同一バンク($01xxxx)からしかコールできません。それを忘れて「22 AC D1 C1」などと直接SR: $0CF5D0からコールしていたのでプログラムカウンタがずれてバグるという現象の原因がなかなかわからず悩まされました。DQ3SFCEditorにチェック機能をつけた方がよさそうです。

20090828224037.jpg

これでノアニール側のイベントの実装は終わりです。次回はロマリアに再び戻ってドン・ガアデが橋を直してくれたイベントを実装して長かった一連のイベントも終わりです。このイベントはフラグを立てるだけなので大したことはありません。

スポンサーリンク

コメントを書く

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