DQ3 ストーリー変更(光の鎧入手9)

残っている追加フロアとガライ離脱部分を実装します。追加フロア自体はイシスのほしふるうでわのあるフロアをそのまま使いまわします。また、ガライの離脱ですが、まあ普通に考えればDQ4のパノン離脱時のように「フィールドに出たら離脱」が自然なのですが、フィールド上のイベント処理のSRがいまいち理解できない(ほかにも処理が存在したのでどう間にはさめばいいかよくわからない)ため、やむを得ず光の鎧を入手直後に離脱するようにしました。敵地でひとりで出歩くなんて根性ありますねw。イベントは光の鎧入手直後、所定座標にPCが到達したときに発生させるようにします。当然ながらルーラ、リレミトは使用禁止です。

  • SR: $0DF255 バラモス城B2F進入時初期化処理(新SR)
0DF255 LDA #$00AD A=#$00AD
0DF258 JSL $C77365 SR: $077365 サブマップ画像情報取得
0DF25C JSL $CC997C SR: $0C997C
0DF260 JSL $CADEB9 SR: $0ADEB9 フロア階層設定(B2F)
0DF264 JSL $CADE4F SR: $0ADE4F ルーラ・キメラの翼使用不可(封印)設定
0DF268 JSL $C77843 SR: $077843 引数:1#$CDF28C 移動・宝箱・ドア・NPC情報設定用SRアドレス設定
0DF26F JSL $C7785F SR: $07785F 引数:1#$CDF2A2 イベント設定
0DF276 JSL $C7787B SR: $07787B 引数:1#$CDE326 特殊効果設定?
0DF27D JSL $C77889 SR: $077889 引数:1#$CAE51B 特殊効果設定?
0DF284 RTL return
  • SR: $0DF28C バラモス城B2F移動・宝箱・ドア・NPC情報設定
0DF28C LDX #$01B5 X=#$01B5
0DF28F JSL $C614BB SR: $0614BB 階段移動データ設定
0DF293 LDX #$014B X=#$014B 中身:光の鎧
0DF296 JSL $C66696 SR: $066696 宝箱アイテム設定
0DF29A LDA #$05A3 A=#$05A3 ガライ離脱時のNPC
0DF29D JSL $C75828 SR: $075828 NPC1設定
0DF2A1 RTL return

準備は出来たのでイベントの設計を行います。トリガーはPCが指定座標に到達したらセットされます。

カウンタ 処理
1000 ガライのNPC表示
2000 PC再描画し、5人目を透明表示にする
3000 ガライを階段に移動させ、消滅させる
4000 イベント終了処理
  • SR: $0DF2A2 バラモス城B2Fイベント処理
0DF2A2 LDA $35B4 A=$35B4
0DF2A5 AND #$0008 A&=#$0008 ガライと別れた
0DF2A8 BEQ #$06 if(z==on) goto $0DF2B0
0DF2AA JSL $CCD298 SR: $0CD298 イベント終了時処理?
0DF2AE BRA #$2C goto $0DF2DC
0DF2B0 COP goto $00FFE4
0DF2B1 JSL $CCD276 SR: $0CD276
0DF2B5 LDA #$08B0 A=#$08B0
0DF2B8 LDX #$08D0 X=#$08D0
0DF2BB LDY #$08F0 Y=#$08F0
0DF2BE JSL $C75365 SR: $075365 PCが指定座標(X座標は範囲指定)に到達しているか?(しているc=on)
0DF2C2 BCS #$02 if(c==on) goto $0DF2C6
0DF2C4 BRA #$EB goto $0DF2B1
0DF2C6 JSL $CDE6E1 SR: $0DE6E1 光の鎧を入手しているか(該当c=on)
0DF2CA BCC #$E5 if(c==off) goto $0DF2B1
0DF2CC JSL $CDADD8 SR: $0DADD8 カウンタに1000をセット
0DF2D0 JSL $CDAED1 SR: $0DAED1 カウンタが2000になるまで待機
0DF2D4 JSL $CDD682 SR: $0DD682 PC再描画?
0DF2D8 JSL $CDADED SR: $0DADED カウンタに3000をセット
0DF2DC JSL $CDAEF1 SR: $0DAEF1 カウンタが4000になるまで待機
0DF2E0 JSL $CCD298 SR: $0CD298 イベント終了時処理?
0DF2E4 RTL return
  • SR: $0DF546 NPC1_MoveSR_05A3(ガライのNPC)(新SR)
0DF546 COP goto $00FFE4
0DF547 JSL $CCD392 SR: $0CD392 キャラクターイベント中移動フラグON?
0DF54B JSL $CDAEB1 SR: $0DAEB1 カウンタが1000になるまで待機
0DF54F JSL $C4297C SR: $04297C 引数:1#$01 引数:2#$FF パーティ人数取得
0DF555 ASL A<<1
0DF556 TAY Y=A
0DF557 LDA $C5E5,Y A=$C5E5+Y
0DF55A PHA Push A
0DF55B LDX $C625,Y X=$C625+Y
0DF55E PHX Push X
0DF55F JSL $C7C85B SR: $07C85B 出現先座標をWX,WYで指定
0DF563 JSL $CCD847 SR: $0CD847 キャラクターを下に向かせる
0DF567 BRK $1055 ($0D1055) goto $00FFE6(メッセージ表示) #$1055
0DF56A JSL $CDACD2 SR: $0DACD2 キー入力でメッセージウィンドウを閉じる
0DF56E LDA #$0008 A=#$0008
0DF571 TSB $35B4 A or $35B4
0DF574 JSL $CDADE6 SR: $0DADE6 カウンタに2000をセット
0DF578 JSL $CDAEE1 SR: $0DAEE1 カウンタが3000になるまで待機
0DF57C PLX Pull X
0DF57D PLA Pull A
0DF57E CPX #$08F0 X>=#$08F0?
0DF581 BCS #$0E if(c==on) goto $0DF591
0DF583 LDX #$0018 X=#$0018
0DF586 LDA #$001D A=#$001D
0DF589 JSL $C75474 SR: $075474 キャラクター移動先座標指定
0DF58D JSL $CCD59D SR: $0CD59D 指定座標にY軸→X軸の順でキャラクター移動
0DF591 LDX #$0018 X=#$0018
0DF594 LDA #$0025 A=#$0025
0DF597 JSL $C75474 SR: $075474 キャラクター移動先座標指定
0DF59B JSL $CCD59D SR: $0CD59D 指定座標にY軸→X軸の順でキャラクター移動
0DF59F JSL $C1E32E SR: $01E32E 引数:1#$0053 再生BGM設定?
0DF5A5 JSL $C75930 SR: $075930 キャラクター消滅
0DF5A9 JSL $CDADF4 SR: $0DADF4 カウンタに4000をセット
0DF5AD RTL return

処理自体は特にこれといって特筆する点はありません。今まで説明したエッセンスの組み合わせで実装できます。これで光の鎧入手がらみの追加イベントは終わりです。実装は大変でしたが概ね事前の構想通り実現できました。