DQ3 ストーリー変更(幽霊船5)

さて、肝心のボス戦イベントの実装を行います。「復活の玉」を持った状態で今まで話し掛けても戦闘にならなかった骸骨に話し掛けると戦闘になり(vsボーンプリズナー)、倒すとキャラクターが消えるので先に進めるようになり、舳先に近づくとボス達と戦闘となり、勝つとイベント終了、ということになります。今回は「一定座標にPCが到達するとイベントが発生」という発生方法を使用します。お手本はラスボス4連戦のバラモスブロス、バラモスゾンビとの戦闘部分です。まずはイベントのカウンタの設計から始めます。

カウンタ1000のトリガーはPCが指定座標に到達したらセットされる

カウンタ処理
1000モンスターのNPCが振り向く+ネクロマンサーのセリフ
2000グラコスのセリフ
3000くちぶえのBGM再生
4000後ろで寝転がっていた囚人、骸骨のNPCが起き上がってやってくる
5000ボス戦
6000ネクロマンサーのセリフ+消滅
7000グラコスのセリフ+消滅
8000その他ザコのNPCを消滅

イベントの概要は固まったので、後は実装するだけです。

  • SR: $0CF997 幽霊船追加イベント処理(新SR)
0CF997COPgoto $00FFE4
0CF998JSL $CCD276SR: $0CD276
0CF99CLDA #$08F0A=#$08F0X座標左端
0CF99FLDX #$0910X=#$0910X座標右端
0CF9A2LDY #$0908Y=#$0908Y座標
0CF9A5JSL $C75365SR: $075365PCが指定座標(X座標は範囲指定)に達しているか?(しているc=on)
0CF9A9BCS #$03if(c==on) goto $0CF9AE
0CF9ABBRA #$EBgoto $0CF998
0CF9ADNOP
0CF9AEJSL $CDADD8SR: $0DADD8カウンタに1000セット
0CF9B2JSL $CDAEE1SR: $0DAEE1カウンタが3000になるまで待機
0CF9B6LDA #$006CA=#$006C
0CF9B9JSL $C72FB2SR: $072FB2BGM再生
0CF9BDJSL $CDADF4SR: $0DADF4カウンタに4000セット
0CF9C1JSL $CDAF01SR: $0DAF01カウンタが5000になるまで待機
0CF9C5JSL $CDE490SR: $0DE490イベント戦闘(グラコス+ネクロマンサー)
0CF9C9LDA #$0002A=#$0002
0CF9CCTSB $35B1A or $35B1
0CF9CFJSL $CDAE02SR: $0DAE02カウンタに6000セット
0CF9D3JSL $CDAF31SR: $0DAF31カウンタが8000になるまで待機
0CF9D7LDA #$0017A=#$0017
0CF9DAJSL $C74B8CSR: $074B8C行動対象キャラクター指定
0CF9DEJSL $C75930SR: $075930キャラクター消滅
0CF9E2LDA #$0016A=#$0016
0CF9E5JSL $C74B8CSR: $074B8C行動対象キャラクター指定
0CF9E9JSL $C75930SR: $075930キャラクター消滅
0CF9EDLDA #$0015A=#$0015
0CF9F0JSL $C74B8CSR: $074B8C行動対象キャラクター指定
0CF9F4JSL $C75930SR: $075930キャラクター消滅
0CF9F8LDA #$0014A=#$0014
0CF9FBJSL $C74B8CSR: $074B8C行動対象キャラクター指定
0CF9FFJSL $C75930SR: $075930キャラクター消滅
0CFA03JSL $CDD65CSR: $0DD65CPC表示
0CFA07JSL $CCD383SR: $0CD383メニュー表示モードON?
0CFA0BJSL $CCD298SR: $0CD298イベント終了処理
0CFA0FRTLreturn

  • SR: $0CFA80 NPC1_MoveSR_0577(ネクロマンサーのNPC)(新SR)
0CFA80JSL $CCDADFSR: $0CDADF
0CFA84COPgoto $00FFE4
0CFA85JSL $CDAEB1SR: $0DAEB1カウンタが1000になるまで待機
0CFA89JSL $CCD940SR: $0CD940キャラクターを反時計回りで下を向かせる
0CFA8DJSL $CC73CFSR: $0C73CFキャラクターが足踏みする処理
0CFA91BRK $1002 ($0C1002)goto $00FFE6(メッセージ表示) #$1002
0CFA94JSL $CDACD2SR: $0DACD2
0CFA98JSL $CDADE6SR: $0DADE6カウンタに2000セット
0CFA9CJSL $CDAF11SR: $0DAF11カウンタが6000になるまで待機
0CFAA0JSL $CC73CFSR: $0C73CF
0CFAA4BRK $1008 ($0C1008)goto $00FFE6(メッセージ表示) #$1008
0CFAA7JSL $CDACD2SR: $0DACD2
0CFAABJSL $C1E32ESR: $01E32E 引数:1#$003FBGM再生
0CFAB1JSL $C75930SR: $075930キャラクター消滅
0CFAB5JSL $CDAE09SR: $0DAE09カウンタに7000セット
0CFAB9RTLreturn
  • SR: $0CFABA NPC1_MoveSR_0578(グラコスーのNPC)(新SR)
0CFABECOPgoto $00FFE4
0CFABFJSL $CDAEB1SR: $0DAEB1カウンタが1000になるまで待機
0CFAC3JSL $CCD91CSR: $0CD91Cキャラクターを時計回りで下を向かせる
0CFAC7JSL $CDAED1SR: $0DAED1カウンタが2000になるまで待機
0CFACBJSL $CC73CFSR: $0C73CFキャラクターが足踏みする処理
0CFACFJSL $CC7B5ASR: $0C7B5Aパーティ人数が一人か調べる(一人c=on)
0CFAD3BCS #$05if(c==on) goto $0CFADA
0CFAD5BRK $1000 ($0C1000)goto $00FFE6(メッセージ表示) #$1000
0CFAD8BRA #$03goto $0CFADD
0CFADABRK $1001 ($0C1001)goto $00FFE6(メッセージ表示) #$1001
0CFADDJSL $CDACD2SR: $0DACD2
0CFAE1JSL $CDADEDSR: $0DADEDカウンタに3000セット
0CFAE5JSL $CDAF21SR: $0DAF21カウンタが7000になるまで待機
0CFAE9JSL $CC73CFSR: $0C73CFキャラクターが足踏みする処理
0CFAEDBRK $1009 ($0C1009)goto $00FFE6(メッセージ表示) #$1009
0CFAF0JSL $CDACD2SR: $0DACD2
0CFAF4JSL $C1E32ESR: $01E32E 引数:1#$003FBGM再生
0CFAFAJSL $C75930SR: $075930キャラクター消滅
0CFAFEJSL $CDAE10SR: $0DAE10カウンタに8000セット
0CFB02RTLreturn

  • SR: $0CF7E0 NPC1_MoveSR_0579(新SR)
0CF7E0JSL $CCDB10SR: $0CDB10
0CF7E4JSL $CCD196SR: $0CD196キャラクター横向き配置?
0CF7E8COPgoto $00FFE4
0CF7E9JSL $CDAEF1SR: $0DAEF1カウンタが4000になるまで待機
0CF7EDJSL $CCD392SR: $0CD392キャラクターイベント中移動フラグON?
0CF7F1JSL $CCD366SR: $0CD366移動速度5/3倍速セット?
0CF7F5LDA #$0022A=#$0022
0CF7F8LDX #$0033X=#$0033
0CF7FBJSL $C75305SR: $075305キャラクター出現座標を指定
0CF7FFJSL $CCD7B8SR: $0CD7B8
0CF803LDA #$0049A=#$0049
0CF806JSL $C74CD0SR: $074CD0キャラクター表示?
0CF80ALDX #$0021X=#$0021
0CF80DLDA #$0030A=#$0030
0CF810JSL $C75474SR: $075474キャラクター移動先座標指定
0CF814JSL $CCD59DSR: $0CD59D指定座標にY軸→X軸の順でキャラクター移動
0CF818LDX #$001CX=#$001C
0CF81BLDA #$002AA=#$002A
0CF81EJSL $C75474SR: $075474キャラクター移動先座標指定
0CF822JSL $CCD58CSR: $0CD58C指定座標にX軸→Y軸の順でキャラクター移動
0CF826JSL $CDADFBSR: $0DADFBカウンタに5000をセット
0CF82AJSL $CDAF31SR: $0DAF31カウンタが8000になるまで待機
0CF82ELDA #$0020A=#$0020
0CF831JSL $C74B39SR: $074B39処理にインターバルを置く?
0CF835JSL $C1E32ESR: $01E32E 引数:1#$003FBGM再生
0CF83BJSL $C75930SR: $075930キャラクター消滅
0CF83FRTLreturn

  • SR: $0CF894 NPC1_MoveSR_057C(新SR)
0CF894JSL $CCD1A7SR: $0CD1A7キャラクター横向き配置?
0CF898COPgoto $00FFE4
0CF899JSL $CDAEF1SR: $0DAEF1カウンタが4000になるまで待機
0CF89DJSL $CCD392SR: $0CD392キャラクターイベント中移動フラグON?
0CF8A1JSL $CCD35ESR: $0CD35E移動速度4/3倍速セット?
0CF8A5LDA #$0029A=#$0029
0CF8A8LDX #$002BX=#$002B
0CF8ABJSL $C75305SR: $075305キャラクター出現座標を指定
0CF8AFJSL $CCD7B8SR: $0CD7B8キャラクター表示?
0CF8B3LDA #$005CA=#$005C
0CF8B6JSL $C74CD0SR: $074CD0
0CF8BALDX #$0024X=#$0024
0CF8BDLDA #$002AA=#$002A
0CF8C0JSL $C75474SR: $075474キャラクター移動先座標指定
0CF8C4JSL $CCD58CSR: $0CD58C指定座標にX軸→Y軸の順でキャラクター移動
0CF8C8JSL $CDAF31SR: $0DAF31カウンタが8000になるまで待機
0CF8CCLDA #$0040A=#$0040
0CF8CFJSL $C74B39SR: $074B39処理にインターバルを置く?
0CF8D3JSL $C1E32ESR: $01E32E 引数:1#$003FBGM再生
0CF8D9JSL $C75930SR: $075930キャラクター消滅
0CF8DDRTLreturn
20090902031108.jpg20090902031105.jpg

今回のイベントを実装して1つわかったことがあります。「キャラクターイベント中移動フラグON」にすると、どうも通行属性が無視されるようで、移動経路に他のキャラクターがいても立ち止まらずに通り過ぎるようです。つまり、ロマリアの追加イベント中に通行属性をあれやこれや無理矢理変えていたのが不要になる、ということで、実際ロマリア東部の橋の修復失敗を報告に来る兵士のMoveSRの先頭でSR: $0CD392を呼んでおくと途中で立ち止まらなくなります。あれだけ苦労したのに、とも思いますが、スマートな解決策が見つかったのでよしとします。

とりあえず、これで幽霊船の追加イベントの実装は終わりです。範囲が限定されているので実装自体は比較的簡単でした。次回からはアレフガルドの変更に移ります。

コメント

タイトルとURLをコピーしました