DQ3 ストーリー変更(メルキド襲撃6)

今回から肝心の戦闘部分を実装していきます。

流れとしては、

  1. 町の入り口にいるガライに話し掛ける。
  2. 「準備はいいか?」に対して「はい」と答えるとガライに銀の竪琴を渡す。
  3. イベント戦闘6連戦(ボス戦含む)
  4. 画面切り替わり、説明文章表示

というようにしました。実際にやってみてわかったんですが、いくつか問題点がありました。

  • 移動中も戦闘BGMなので戦闘終了→移動画面に切り替え→次の戦闘開始という部分で戦闘BGMの出だしのBGMがかなりの頻度で繰り返されることになるので、鬱陶しい。
  • 連戦中にPCの移動がないので、イベント自体の印象が地味www

2点目の問題については、今のところいい案が思いつかないのでとりあえず後回しにします。1点目の問題については、「ボス戦が終わるまでBGMの切り替えは一切行わない」とすることで対処します。

まずはイベント全体の枠を実装してしまいます。例によってイベントの設計を最初に行います。

カウンタ 処理
1000 ガライに銀の竪琴を渡す+ガライが指定座標に移動
2000 PCが指定座標に移動+ガライが銀の竪琴を弾き始める
3000 モンスター1出現
4000 連戦1戦目
5000 モンスター2出現
6000 連戦2戦目
7000 モンスター3出現
8000 連戦3戦目
9000 モンスター4出現
10000 連戦4戦目
11000 モンスター5出現
12000 連戦5戦目
13000 モンスター6出現
14000 連戦6戦目(ボス戦)
15000 モンスター6台詞+消滅
16000 兵士1のアクション
17000 兵士2のアクション
18000 画面をフェードアウトさせ、説明台詞を表示、PCを宿屋に移動

長いですねー。今回はカウンタを18000まで使います。最後の「説明台詞を表示」というのはボストロールを倒した後に表示されるアレと同じものです。

  • SR: $0A4AB2 メルキド進入時初期化処理
0A4AD7 JSL $CCF735 SR: $0CF735 メルキド特殊効果+イベント設定
0A4ADB-D NOP
  • SR: $0CF279 メルキド特殊効果+イベント設定(新SR)
0CF735 JSL $C77889 SR: $077889 引数:1#$CAE288 特殊効果設定?
0CF73C JSL $C7785F SR: $07785F 引数:1#$CCFD0A イベント設定
0CF743 RTL return
  • SR: $0CFA3D NPC1_TalkSR_0581(ガライのNPC)(新SR)
0CFA3D JSL $CCF2EE SR: $0CF2EE メルキド襲撃イベントを一度経験している(該当c=on)
0CFA41 BCS #$03 if(c==on) goto $0CFA46
0CFA43 BRK $100D ($0C100D) goto $00FFE6(メッセージ表示) #$100D
0CFA46 BRK $100E ($0C100E) goto $00FFE6(メッセージ表示) #$100E
0CFA49 JSL $CDAC66 SR: $0DAC66 はい/いいえ選択処理(はいc=on)
0CFA4D BCC #$02 if(c==off) goto $0CFA51
0CFA4F BRA #$04 goto $0CFA55
0CFA51 BRK $1017 ($0C1017) goto $00FFE6(メッセージ表示) #$1017
0CFA54 RTL return
0CFA55 JSL $CCF2EE SR: $0CF2EE メルキド襲撃イベントを一度経験している(該当c=on)
0CFA59 BCC #$08 if(c==off) goto $0CFA63
0CFA5B JSL $C737BE SR: $0737BE 引数:1#$1023 メッセージ表示
0CFA61 BRA #$10 goto $0CFA73
0CFA63 JSL $C737BE SR: $0737BE 引数:1#$1018 メッセージ表示
0CFA69 JSL $CCF1AF SR: $0CF1AF 銀の竪琴削除
0CFA6D LDA #$0008 A=#$0008
0CFA70 TSB $35B1 A or $35B1 メルキドにモンスター襲撃中に銀のたてごとをガライに渡した
0CFA73 JSL $CDADD8 SR: $0DADD8 カウンタに1000をセット
0CFA77 RTL return
  • SR: $0CF45A NPC1_MoveSR_0581(ガライのNPC)(新SR)
0CF45A COP goto $00FFE4
0CF45B JSL $CDAEB1 SR: $0DAEB1 カウンタが1000になるまで待機
0CF45F JSL $CC73CF SR: $0C73CF キャラクターが足踏みをする処理
0CF463 LDX #$0030 X=#$0030
0CF466 LDA #$001E A=#$001E
0CF469 JSL $C75474 SR: $075474 キャラクター移動先座標指定
0CF46D JSL $CCD59D SR: $0CD59D 指定座標にY軸→X軸の順でキャラクター移動
0CF471 JSL $CCD857 SR: $0CD857 キャラクターを上に向かせる
0CF475 JSL $CDADE6 SR: $0DADE6 カウンタに2000をセット
0CF479 RTL return
  • SR: $0CFD0A メルキド追加イベント処理(新SR)
0CFD0A COP goto $00FFE4
0CFD0B JSL $CCE1D1 SR: $0CE1D1 イベント開始待ち?
0CFD0F JSL $CDAED1 SR: $0DAED1 カウンタが2000になるまで待機
0CFD13 JSL $CCD392 SR: $0CD392 キャラクターイベント中移動フラグON?
0CFD17 JSL $CCD346 SR: $0CD346 移動速度1倍速セット?
0CFD1B JSL $CDD687 SR: $0DD687 PC先頭キャラクターを移動対象にする?
0CFD1F LDX #$0032 X=#$0032
0CFD22 LDA #$001C A=#$001C
0CFD25 JSL $C75474 SR: $075474 キャラクター移動先座標指定
0CFD29 JSL $CCD58C SR: $0CD58C 指定座標にX軸→Y軸の順でキャラクター移動
0CFD2D JSL $C737BE SR: $0737BE 引数:1#$1019 メッセージ表示
0CFD33 JSL $CDACD2 SR: $0DACD2 キー入力でメッセージウィンドウを閉じる
0CFD37 JSL $CDADED SR: $0DADED カウンタに3000をセット
0CFD3B JSL $CDAEF1 SR: $0DAEF1 カウンタが4000になるまで待機
0CFD3F JSL $CDEA00 SR: $0DEA00 イベント戦闘(メルキド襲撃1戦目)
0CFD43 JSL $CDADFB SR: $0DADFB カウンタに5000をセット
0CFD47 JSL $CDAF11 SR: $0DAF11 カウンタが6000になるまで待機
0CFD4B JSL $CDEA3C SR: $0DEA3C イベント戦闘(メルキド襲撃2戦目)
0CFD4F JSL $CDAE09 SR: $0DAE09 カウンタに7000をセット
0CFD53 JSL $CDAF31 SR: $0DAF31 カウンタが8000になるまで待機
0CFD57 JSL $CDEA78 SR: $0DEA78 イベント戦闘(メルキド襲撃3戦目)
0CFD5B JSL $CDAE17 SR: $0DAE17 カウンタに9000をセット
0CFD5F JSL $CDAF51 SR: $0DAF51 カウンタが10000になるまで待機
0CFD63 JSL $CDEAB4 SR: $0DEAB4 イベント戦闘(メルキド襲撃4戦目)
0CFD67 JSL $CDAE25 SR: $0DAE25 カウンタに11000をセット
0CFD6B JSL $CDAF71 SR: $0DAF71 カウンタが12000になるまで待機
0CFD6F JSL $CDEAF0 SR: $0DEAF0 イベント戦闘(メルキド襲撃5戦目)
0CFD73 JSL $CDAE33 SR: $0DAE33 カウンタに13000をセット
0CFD77 JSL $CDAF91 SR: $0DAF91 カウンタが14000になるまで待機
0CFD7B LDA #$0000 A=#$0000
0CFD7E JSL $C778C1 SR: $0778C1 BGM設定
0CFD82 JSL $CDEB2C SR: $0DEB2C イベント戦闘(メルキド襲撃ボス戦)
0CFD86 JSL $CDAE41 SR: $0DAE41 カウンタに15000をセット
0CFD8A JSL $CDAFD1 SR: $0DAFD1 カウンタが18000になるまで待機
0CFD8E JSL $CDA12D SR: $0DA12D
0CFD92 JSL $CDC5C2 SR: $0DC5C2
0CFD96 LDA #$00B1 A=#$00B1
0CFD99 LDX #$0000 X=#$0000
0CFD9C JSL $C733E5 SR: $0733E5
0CFDA0 JSL $C047B2 SR: $0047B2 引数:1#$F6376B 特殊効果?
0CFDA7 JSL $C04835 SR: $004835 引数:1#$F6376B
0CFDAE BCC #$02 if(c==off) goto $0CFDB2
0CFDB0 BRA #$03 goto $0CFDB5
0CFDB2 COP goto $00FFE4
0CFDB3 BRA #$F2 goto $0CFDA7
0CFDB5 LDA #$0032 A=#$0032
0CFDB8 JSL $C74B39 SR: $074B39 処理にインターバルを置く?
0CFDBC JSL $CDC68B SR: $0DC68B
0CFDC0 JSL $CDC638 SR: $0DC638
0CFDC4 LDA #$0007 A=#$0007
0CFDC7 JSL $C1A988 SR: $01A988 引数:1#$101C メッセージ表示
0CFDCD JSL $CDC644 SR: $0DC644
0CFDD1 JSL $CDC638 SR: $0DC638
0CFDD5 LDA #$0007 A=#$0007
0CFDD8 JSL $C1A988 SR: $01A988 引数:1#$101D メッセージ表示
0CFDDE JSL $CDC644 SR: $0DC644
0CFDE2 JSL $CDA7EE SR: $0DA7EE 宿屋一泊BGM再生
0CFDE6 JSL $C3D332 SR: $03D332 生存者HPMP回復
0CFDEA JSL $CDA1B1 SR: $0DA1B1 現在のBGMをフェードアウトして町BGM再生(アレフガルド)
0CFDEE LDA #$0198 A=#$0198
0CFDF1 JSL $C7315E SR: $07315E マップ座標データアクセス
0CFDF5 JSL $CCD298 SR: $0CD298 イベント終了時処理?
0CFDF9 RTL return

カウンタ18000以降の処理はいまいち詳細は不明で、サマンオサのボストロールを倒した後の処理をそのままコピって来てるだけです。

  • SR: $0DE56A NPC1_MoveSR_0584(モンスター1のNPC)(新SR)
0DE56A COP goto $00FFE4
0DE56B JSL $CDAEE1 SR: $0DAEE1 カウンタが3000になるまで待機
0DE56F JSL $CCD392 SR: $0CD392 キャラクターイベント中移動フラグON?
0DE573 JSL $CCD366 SR: $0CD366 移動速度5/3倍速セット?
0DE577 LDA #$0031 A=#$0031
0DE57A LDX #$000E X=#$000E
0DE57D JSL $C75305 SR: $075305 キャラクター出現座標を指定
0DE581 LDX #$0031 X=#$0031
0DE584 LDA #$0018 A=#$0018
0DE587 JSL $C75474 SR: $075474 キャラクター移動先座標指定
0DE58B JSL $CCD59D SR: $0CD59D 指定座標にY軸→X軸の順でキャラクター移動
0DE58F JSL $CDADF4 SR: $0DADF4 カウンタに4000をセット
0DE593 RTL return
  • SR: $0DE594 NPC1_MoveSR_0585(モンスター2のNPC)(新SR)
  • SR: $0DE5BE NPC1_MoveSR_0586(モンスター3のNPC)(新SR)
  • SR: $0DE5E8 NPC1_MoveSR_0587(モンスター4のNPC)(新SR)
  • SR: $0DE612 NPC1_MoveSR_0588(モンスター5のNPC)(新SR)
  • SR: $0DE660 NPC1_MoveSR_0589(モンスター6のNPC)(新SR)

同様の実装のため省略

以外と長くなってしまったため、肝心の戦闘部分のところまでたどり着けませんでした。次回説明することにします。