さて、イベントの実装の続きです。
- 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を無理矢理書き換えることにします。というわけで続きは次回。
コメント