さて、肝心のボス戦イベントの実装を行います。「復活の玉」を持った状態で今まで話し掛けても戦闘にならなかった骸骨に話し掛けると戦闘になり(vsボーンプリズナー)、倒すとキャラクターが消えるので先に進めるようになり、舳先に近づくとボス達と戦闘となり、勝つとイベント終了、ということになります。今回は「一定座標にPCが到達するとイベントが発生」という発生方法を使用します。お手本はラスボス4連戦のバラモスブロス、バラモスゾンビとの戦闘部分です。まずはイベントのカウンタの設計から始めます。
カウンタ1000のトリガーはPCが指定座標に到達したらセットされる
カウンタ | 処理 |
---|---|
1000 | モンスターのNPCが振り向く+ネクロマンサーのセリフ |
2000 | グラコスのセリフ |
3000 | くちぶえのBGM再生 |
4000 | 後ろで寝転がっていた囚人、骸骨のNPCが起き上がってやってくる |
5000 | ボス戦 |
6000 | ネクロマンサーのセリフ+消滅 |
7000 | グラコスのセリフ+消滅 |
8000 | その他ザコのNPCを消滅 |
イベントの概要は固まったので、後は実装するだけです。
- SR: $0CF997 幽霊船追加イベント処理(新SR)
0CF997 | COP | goto $00FFE4 | |
---|---|---|---|
0CF998 | JSL $CCD276 | SR: $0CD276 | |
0CF99C | LDA #$08F0 | A=#$08F0 | X座標左端 |
0CF99F | LDX #$0910 | X=#$0910 | X座標右端 |
0CF9A2 | LDY #$0908 | Y=#$0908 | Y座標 |
0CF9A5 | JSL $C75365 | SR: $075365 | PCが指定座標(X座標は範囲指定)に達しているか?(しているc=on) |
0CF9A9 | BCS #$03 | if(c==on) goto $0CF9AE | |
0CF9AB | BRA #$EB | goto $0CF998 | |
0CF9AD | NOP | ||
0CF9AE | JSL $CDADD8 | SR: $0DADD8 | カウンタに1000セット |
0CF9B2 | JSL $CDAEE1 | SR: $0DAEE1 | カウンタが3000になるまで待機 |
0CF9B6 | LDA #$006C | A=#$006C | |
0CF9B9 | JSL $C72FB2 | SR: $072FB2 | BGM再生 |
0CF9BD | JSL $CDADF4 | SR: $0DADF4 | カウンタに4000セット |
0CF9C1 | JSL $CDAF01 | SR: $0DAF01 | カウンタが5000になるまで待機 |
0CF9C5 | JSL $CDE490 | SR: $0DE490 | イベント戦闘(グラコス+ネクロマンサー) |
0CF9C9 | LDA #$0002 | A=#$0002 | |
0CF9CC | TSB $35B1 | A or $35B1 | |
0CF9CF | JSL $CDAE02 | SR: $0DAE02 | カウンタに6000セット |
0CF9D3 | JSL $CDAF31 | SR: $0DAF31 | カウンタが8000になるまで待機 |
0CF9D7 | LDA #$0017 | A=#$0017 | |
0CF9DA | JSL $C74B8C | SR: $074B8C | 行動対象キャラクター指定 |
0CF9DE | JSL $C75930 | SR: $075930 | キャラクター消滅 |
0CF9E2 | LDA #$0016 | A=#$0016 | |
0CF9E5 | JSL $C74B8C | SR: $074B8C | 行動対象キャラクター指定 |
0CF9E9 | JSL $C75930 | SR: $075930 | キャラクター消滅 |
0CF9ED | LDA #$0015 | A=#$0015 | |
0CF9F0 | JSL $C74B8C | SR: $074B8C | 行動対象キャラクター指定 |
0CF9F4 | JSL $C75930 | SR: $075930 | キャラクター消滅 |
0CF9F8 | LDA #$0014 | A=#$0014 | |
0CF9FB | JSL $C74B8C | SR: $074B8C | 行動対象キャラクター指定 |
0CF9FF | JSL $C75930 | SR: $075930 | キャラクター消滅 |
0CFA03 | JSL $CDD65C | SR: $0DD65C | PC表示 |
0CFA07 | JSL $CCD383 | SR: $0CD383 | メニュー表示モードON? |
0CFA0B | JSL $CCD298 | SR: $0CD298 | イベント終了処理 |
0CFA0F | RTL | return |
- SR: $0CFA80 NPC1_MoveSR_0577(ネクロマンサーのNPC)(新SR)
0CFA80 | JSL $CCDADF | SR: $0CDADF | |
---|---|---|---|
0CFA84 | COP | goto $00FFE4 | |
0CFA85 | JSL $CDAEB1 | SR: $0DAEB1 | カウンタが1000になるまで待機 |
0CFA89 | JSL $CCD940 | SR: $0CD940 | キャラクターを反時計回りで下を向かせる |
0CFA8D | JSL $CC73CF | SR: $0C73CF | キャラクターが足踏みする処理 |
0CFA91 | BRK $1002 ($0C1002) | goto $00FFE6(メッセージ表示) #$1002 | |
0CFA94 | JSL $CDACD2 | SR: $0DACD2 | |
0CFA98 | JSL $CDADE6 | SR: $0DADE6 | カウンタに2000セット |
0CFA9C | JSL $CDAF11 | SR: $0DAF11 | カウンタが6000になるまで待機 |
0CFAA0 | JSL $CC73CF | SR: $0C73CF | |
0CFAA4 | BRK $1008 ($0C1008) | goto $00FFE6(メッセージ表示) #$1008 | |
0CFAA7 | JSL $CDACD2 | SR: $0DACD2 | |
0CFAAB | JSL $C1E32E | SR: $01E32E 引数:1#$003F | BGM再生 |
0CFAB1 | JSL $C75930 | SR: $075930 | キャラクター消滅 |
0CFAB5 | JSL $CDAE09 | SR: $0DAE09 | カウンタに7000セット |
0CFAB9 | RTL | return |
- SR: $0CFABA NPC1_MoveSR_0578(グラコスーのNPC)(新SR)
0CFABE | COP | goto $00FFE4 | |
---|---|---|---|
0CFABF | JSL $CDAEB1 | SR: $0DAEB1 | カウンタが1000になるまで待機 |
0CFAC3 | JSL $CCD91C | SR: $0CD91C | キャラクターを時計回りで下を向かせる |
0CFAC7 | JSL $CDAED1 | SR: $0DAED1 | カウンタが2000になるまで待機 |
0CFACB | JSL $CC73CF | SR: $0C73CF | キャラクターが足踏みする処理 |
0CFACF | JSL $CC7B5A | SR: $0C7B5A | パーティ人数が一人か調べる(一人c=on) |
0CFAD3 | BCS #$05 | if(c==on) goto $0CFADA | |
0CFAD5 | BRK $1000 ($0C1000) | goto $00FFE6(メッセージ表示) #$1000 | |
0CFAD8 | BRA #$03 | goto $0CFADD | |
0CFADA | BRK $1001 ($0C1001) | goto $00FFE6(メッセージ表示) #$1001 | |
0CFADD | JSL $CDACD2 | SR: $0DACD2 | |
0CFAE1 | JSL $CDADED | SR: $0DADED | カウンタに3000セット |
0CFAE5 | JSL $CDAF21 | SR: $0DAF21 | カウンタが7000になるまで待機 |
0CFAE9 | JSL $CC73CF | SR: $0C73CF | キャラクターが足踏みする処理 |
0CFAED | BRK $1009 ($0C1009) | goto $00FFE6(メッセージ表示) #$1009 | |
0CFAF0 | JSL $CDACD2 | SR: $0DACD2 | |
0CFAF4 | JSL $C1E32E | SR: $01E32E 引数:1#$003F | BGM再生 |
0CFAFA | JSL $C75930 | SR: $075930 | キャラクター消滅 |
0CFAFE | JSL $CDAE10 | SR: $0DAE10 | カウンタに8000セット |
0CFB02 | RTL | return |
- SR: $0CF7E0 NPC1_MoveSR_0579(新SR)
0CF7E0 | JSL $CCDB10 | SR: $0CDB10 | |
---|---|---|---|
0CF7E4 | JSL $CCD196 | SR: $0CD196 | キャラクター横向き配置? |
0CF7E8 | COP | goto $00FFE4 | |
0CF7E9 | JSL $CDAEF1 | SR: $0DAEF1 | カウンタが4000になるまで待機 |
0CF7ED | JSL $CCD392 | SR: $0CD392 | キャラクターイベント中移動フラグON? |
0CF7F1 | JSL $CCD366 | SR: $0CD366 | 移動速度5/3倍速セット? |
0CF7F5 | LDA #$0022 | A=#$0022 | |
0CF7F8 | LDX #$0033 | X=#$0033 | |
0CF7FB | JSL $C75305 | SR: $075305 | キャラクター出現座標を指定 |
0CF7FF | JSL $CCD7B8 | SR: $0CD7B8 | |
0CF803 | LDA #$0049 | A=#$0049 | |
0CF806 | JSL $C74CD0 | SR: $074CD0 | キャラクター表示? |
0CF80A | LDX #$0021 | X=#$0021 | |
0CF80D | LDA #$0030 | A=#$0030 | |
0CF810 | JSL $C75474 | SR: $075474 | キャラクター移動先座標指定 |
0CF814 | JSL $CCD59D | SR: $0CD59D | 指定座標にY軸→X軸の順でキャラクター移動 |
0CF818 | LDX #$001C | X=#$001C | |
0CF81B | LDA #$002A | A=#$002A | |
0CF81E | JSL $C75474 | SR: $075474 | キャラクター移動先座標指定 |
0CF822 | JSL $CCD58C | SR: $0CD58C | 指定座標にX軸→Y軸の順でキャラクター移動 |
0CF826 | JSL $CDADFB | SR: $0DADFB | カウンタに5000をセット |
0CF82A | JSL $CDAF31 | SR: $0DAF31 | カウンタが8000になるまで待機 |
0CF82E | LDA #$0020 | A=#$0020 | |
0CF831 | JSL $C74B39 | SR: $074B39 | 処理にインターバルを置く? |
0CF835 | JSL $C1E32E | SR: $01E32E 引数:1#$003F | BGM再生 |
0CF83B | JSL $C75930 | SR: $075930 | キャラクター消滅 |
0CF83F | RTL | return |
- SR: $0CF894 NPC1_MoveSR_057C(新SR)
0CF894 | JSL $CCD1A7 | SR: $0CD1A7 | キャラクター横向き配置? |
---|---|---|---|
0CF898 | COP | goto $00FFE4 | |
0CF899 | JSL $CDAEF1 | SR: $0DAEF1 | カウンタが4000になるまで待機 |
0CF89D | JSL $CCD392 | SR: $0CD392 | キャラクターイベント中移動フラグON? |
0CF8A1 | JSL $CCD35E | SR: $0CD35E | 移動速度4/3倍速セット? |
0CF8A5 | LDA #$0029 | A=#$0029 | |
0CF8A8 | LDX #$002B | X=#$002B | |
0CF8AB | JSL $C75305 | SR: $075305 | キャラクター出現座標を指定 |
0CF8AF | JSL $CCD7B8 | SR: $0CD7B8 | キャラクター表示? |
0CF8B3 | LDA #$005C | A=#$005C | |
0CF8B6 | JSL $C74CD0 | SR: $074CD0 | |
0CF8BA | LDX #$0024 | X=#$0024 | |
0CF8BD | LDA #$002A | A=#$002A | |
0CF8C0 | JSL $C75474 | SR: $075474 | キャラクター移動先座標指定 |
0CF8C4 | JSL $CCD58C | SR: $0CD58C | 指定座標にX軸→Y軸の順でキャラクター移動 |
0CF8C8 | JSL $CDAF31 | SR: $0DAF31 | カウンタが8000になるまで待機 |
0CF8CC | LDA #$0040 | A=#$0040 | |
0CF8CF | JSL $C74B39 | SR: $074B39 | 処理にインターバルを置く? |
0CF8D3 | JSL $C1E32E | SR: $01E32E 引数:1#$003F | BGM再生 |
0CF8D9 | JSL $C75930 | SR: $075930 | キャラクター消滅 |
0CF8DD | RTL | return |
今回のイベントを実装して1つわかったことがあります。「キャラクターイベント中移動フラグON」にすると、どうも通行属性が無視されるようで、移動経路に他のキャラクターがいても立ち止まらずに通り過ぎるようです。つまり、ロマリアの追加イベント中に通行属性をあれやこれや無理矢理変えていたのが不要になる、ということで、実際ロマリア東部の橋の修復失敗を報告に来る兵士のMoveSRの先頭でSR: $0CD392を呼んでおくと途中で立ち止まらなくなります。あれだけ苦労したのに、とも思いますが、スマートな解決策が見つかったのでよしとします。
とりあえず、これで幽霊船の追加イベントの実装は終わりです。範囲が限定されているので実装自体は比較的簡単でした。次回からはアレフガルドの変更に移ります。
コメント