イベントの残りの実装を終わらせてしまいます。
- SR: $0CF500 NPC1_TalkSR_0573(ドン・ガアデとの会話処理)(新SR)
0CF500 | LDA $354A | A=$354A | |
---|---|---|---|
0CF503 | AND #$0020 | A&=#$0020 | 目覚めの粉を使っているか |
0CF506 | BNE #$03 | if(z==off) goto $0CF50B | |
0CF508 | JMP $F53B ($0CF53B) | goto $0CF53B | |
0CF50B | LDA $35B0 | A=$35B0 | |
0CF50E | AND #$0020 | A&=#$0020 | 橋が修復済みか |
0CF511 | BEQ #$0A | if(z==on) goto $0CF51D | |
0CF513 | BRK $0FED ($0C0FED) | goto $00FFE6(メッセージ表示) #$0FED | |
0CF516 | JSL $CDACD2 | SR: $0DACD2 | |
0CF51A | JMP $F53E ($0CF53E) | goto $0CF53E | |
0CF51D | LDA $35B0 | A=$35B0 | |
0CF520 | AND #$0008 | A&=#$0008 | ロマリアの橋修復失敗イベントをみているか |
0CF523 | BEQ #$10 | if(z==on) goto $0CF535 | |
0CF525 | BRK $0FEB ($0C0FEB) | goto $00FFE6(メッセージ表示) #$0FEB | |
0CF528 | LDA #$0010 | A=#$0010 | |
0CF52B | TSB $35B0 | A or $35B0 | |
0CF52E | JSL $CDADD8 | SR: $0DADD8 | |
0CF532 | JMP $F53E ($0CF53E) | goto $0CF53E | |
0CF535 | BRK $0FEC ($0C0FEC) | goto $00FFE6(メッセージ表示) #$0FEC | |
0CF538 | JMP $F53E ($0CF53E) | goto $0CF53E | |
0CF53B | BRK $0151 ($0C0151) | goto $00FFE6(メッセージ表示) #$0151 | |
0CF53E | RTL | return |
- SR: $0CF56E NPC1_MoveSR_0573(ドン・ガアデの移動処理)(新SR)
0CF56E | LDA $354A | A=$354A | |
---|---|---|---|
0CF571 | AND #$0020 | A&=#$0020 | 目覚めの粉を使っているか |
0CF574 | BEQ #$14 | if(z==on) goto $0CF58A | |
0CF576 | LDA $35B0 | A=$35B0 | |
0CF579 | AND #$0010 | A&=#$0010 | ドン・ガアデがロマリアに向かっているか |
0CF57C | BNE #$06 | if(z==off) goto $0CF584 | |
0CF57E | JSL $CCF5D0 | SR: $0CF5D0 | ドン・ガアデがルーラでロマリアに向かう処理 |
0CF582 | BRA #$04 | goto $0CF588 | |
0CF584 | JSL $CCDADF | SR: $0CDADF | |
0CF588 | BRA #$04 | goto $0CF58E | |
0CF58A | JSL $CCD17B | SR: $0CD17B | |
0CF58E | RTL | return |
- SR: $0CF5D0 ドン・ガアデがルーラでロマリアに向かう処理(新SR)
0CF5D0 | COP | goto $00FFE4 | |
---|---|---|---|
0CF5D1 | JSL $CDAEB1 | SR: $0DAEB1 | カウンタが1000になるまで待機 |
0CF5D5 | JSL $CC73CF | SR: $0C73CF | 足踏みをする処理 |
0CF5D9 | JSL $CDADE6 | SR: $0DADE6 | カウンタに2000をセット |
0CF5DD | JSL $CDAEE1 | SR: $0DAEE1 | カウンタが3000になるまで待機 |
0CF5E1 | JSL $C1E32E | SR: $01E32E 引数:1#$0054 | ルーラのBGM再生 |
0CF5E7 | LDX #$0000 | X=#$0000 | |
0CF5EA | LDA $DAA5,X | A=$DAA5+X | |
0CF5ED | BMI #$0A | if(n==on) goto $0CF5F9 | |
0CF5EF | STA $2F00,X | $2F00+X=A | |
0CF5F2 | INX | X++ | |
0CF5F3 | INX | X++ | |
0CF5F4 | CPX #$0008 | X>=#$0008? | |
0CF5F7 | BCC #$F1 | if(c==off) goto $0CF5EA | |
0CF5F9 | LDA #$0008 | A=#$0008 | |
0CF5FC | STA $DAA5 | $DAA5=A | |
0CF5FF | LDA #$FFFF | A=#$FFFF | |
0CF602 | STA $DAA7 | $DAA7=A | |
0CF605 | LDA #$FFFF | A=#$FFFF | |
0CF608 | STA $DAA9 | $DAA9=A | |
0CF60B | LDA #$FFFF | A=#$FFFF | |
0CF60E | STA $DAAB | $DAAB=A | |
0CF611 | JSL $C1E7D5 | SR: $01E7D5 | ルーラでキャラクターが飛び上がる処理 |
0CF615 | JSL $C75930 | SR: $075930 | |
0CF619 | LDX #$0000 | X=#$0000 | |
0CF61C | LDA $2F00,X | A=$2F00+X | |
0CF61F | BMI #$0D | if(n==on) goto $0CF62E | |
0CF621 | STA $DAA5,X | $DAA5+X=A | |
0CF624 | STZ $2F00,X | $2F00+X=#$00 | |
0CF627 | INX | X++ | |
0CF628 | INX | X++ | |
0CF629 | CPX #$0008 | X>=#$0008? | |
0CF62C | BCC #$EE | if(c==off) goto $0CF61C | |
0CF62E | RTL | return |
ちょっと解説を加えると、$7EDAA5-はルーラ(もしくはキメラの翼)で飛び上がる対象のキャラクターのマップ上でのIDがセットされているようです(他の用途にも使われているかもしれませんが不明)。通常はPCのIDがセットされているのですが、今回は飛び上がる対象が変わるので、飛び上がる演出をする直前にもともとセットされていた値を$7E2F00-に退避しておき、ドン・ガアデのID(#$0008)をセットし、演出後値を元に戻すということをしています。
- SR: $01E7D5 ルーラでキャラクターが飛び上がる処理(新SR)
01E7D5 | JSR $D1AC | SR: $01D1AC | ルーラでキャラクターが飛び上がる処理 |
---|---|---|---|
01E7D8 | RTL | return |
なんでこんなSRを作ったかというと、オリジナルから存在するSR: $01D1ACは同一バンク($01xxxx)からしかコールできません。それを忘れて「22 AC D1 C1」などと直接SR: $0CF5D0からコールしていたのでプログラムカウンタがずれてバグるという現象の原因がなかなかわからず悩まされました。DQ3SFCEditorにチェック機能をつけた方がよさそうです。
これでノアニール側のイベントの実装は終わりです。次回はロマリアに再び戻ってドン・ガアデが橋を直してくれたイベントを実装して長かった一連のイベントも終わりです。このイベントはフラグを立てるだけなので大したことはありません。
コメント