DQ3 ストーリー変更(ラスボス3)

次に、特定のモンスターIDをターン終了時にスイッチさせる処理、オルテガがゾーマ初戦開始2ターン後に乱入してくる部分を実装します。 オルテガが乱入するかどうかはゾーマ戦開始直前に特定のフラグをONにしておき、そのフラグがONになっている戦闘中のみ2ターン経過後乱入処理を行うというようにします。

  • SR: $0CCB6F ゾーマの城B5FNPC情報設定
0CCBA0-2 NOP
0CCBA3 JSL $CDE76C SR: $0DE76C ゾーマの城5FNPC設定(サブ)
  • SR: $0DE76C ゾーマの城5FNPC設定(サブ)(新SR)
0DE76C LDA #$005F A=#$005F
0DE76F JSL $C758DE SR: $0758DE NPC2設定
0DE773 LDA #$05A5 A=#$05A5 オルテガのNPC
0DE776 JSL $C75828 SR: $075828 NPC1設定
0DE77A JSL $CDE7E6 SR: $0DE7E6 オルテガゾンビが出現する条件か(該当c=on)
0DE77E BCC #$07 if(c==off) goto $0DE787
0DE780 LDA #$05A6 A=#$05A6 オルテガのNPC
0DE783 JSL $C75828 SR: $075828 NPC1設定
0DE787 RTL return
  • SR: $0D5661 イベント戦闘(vsラスト4連戦)
0D594E JSL $C6F59F SR: $06F59F ゾーマ戦処理
  • SR: $06F59F ゾーマ戦処理(新SR)
06F59F PHA Push A
06F5A0 LDA $35B4 A=$35B4
06F5A3 AND #$0020 A&=#$0020 オルテガが竜の女王の石化の呪いを解いた
06F5A6 BNE #$06 if(z==off) goto $06F5AE
06F5A8 LDA #$0080 A=#$0080
06F5AB TSB $35B4 A or $35B4 オルテガが未出現でゾーマと戦闘中(テンポラリフラグ扱い)
06F5AE PLA Pull A
06F5AF JSL $C687A0 SR: $0687A0 イベント戦闘処理?
06F5B3 JSL $C907CC SR: $0907CC 引数:1#$35B4 引数:2#$7E 引数:3#$80 引数:4#$00 引数:5#$00 RAM上情報変更(OFF)
06F5BD LDA $35B5 A=$35B5
06F5C0 AND #$0001 A&=#$0001
06F5C3 BEQ #$14 if(z==on) goto $06F5D9
06F5C5 JSL $C907CC SR: $0907CC 引数:1#$35B5 引数:2#$7E 引数:3#$01 引数:4#$00 引数:5#$00 RAM上情報変更(OFF)
06F5CF LDA #$0002 A=#$0002
06F5D2 TSB $3554 A or $3554 ゾーマに1度挑んで全滅した?
06F5D5 JSL $CDF652 SR: $0DF652 オルテガにゾーマから逃がしてもらう処理
06F5D9 RTL return
  • SR: $02A41F ターン終了時処理(全体)
02A448 JSR $D8E8 SR: $02D8E8 ターン終了時処理
  • SR: $02D8E8 ターン終了時処理(新SR)
02D8E8 JSR $DDDD SR: $02DDDD オルテガがゾーマに攻撃をしかける処理(処理実行c=on)
02D8EB BCS #$0E if(c==on) goto $02D8FB
02D8ED JSL $C2B32F SR: $02B32F 戦闘終了時フラグセット?
02D8F1 BCS #$08 if(c==on) goto $02D8FB
02D8F3 JSR $DB85 SR: $02DB85 ターン終了時処理(毒ダメージ)
02D8F6 BCS #$03 if(c==on) goto $02D8FB
02D8F8 JSR $F32E SR: $02F32E ターン終了時処理(各キャラクターごと)
02D8FB RTS return
  • SR: $02A44E ターン終了時処理(各キャラクターごと)
02A475 JSR $DB7B SR: $02DB7B ターン終了時各キャラクター処理(自動回復+モンスターID切り替え)
  • SR: $02DB7B ターン終了時各キャラクター処理(自動回復+モンスターID切り替え)(新SR)
02DB7B JSR $DCA8 SR: $02DCA8 勇者自動回復処理
02DB7E JSR $A47F SR: $02A47F 自然回復処理
02DB81 JSR $DD00 SR: $02DD00 モンスターID切り替え処理
02DB84 RTS return
  • SR: $02DD00 モンスターID切り替え処理
02DD00 STX $2428 $2428=X
02DD03 JSL $C2CAD9 SR: $02CAD9 引数:1#$203C 引数:2#$00FF 戦闘中PC情報取得
02DD0B CMP #$0005 A>=#$0005?
02DD0E BCS #$23 if(c==on) goto $02DD33
02DD10 JSL $C2CA5B SR: $02CA5B 引数:1#$2049 戦闘中PC情報取得
02DD16 JSR $DD34 SR: $02DD34 モンスターID切り替え(切り替えたc=on)
02DD19 BCC #$18 if(c==off) goto $02DD33
02DD1B PHA Push A
02DD1C JSL $C2CAD9 SR: $02CAD9 引数:1#$203C 引数:2#$00FF 戦闘中PC情報取得
02DD24 ASL A<<1
02DD25 TAY Y=A
02DD26 PLA Pull A
02DD27 JSL $C2CA98 SR: $02CA98 引数:1#$2049 戦闘中PC情報変更
02DD2D JSL $C2CA98 SR: $02CA98 引数:1#$204B 戦闘中PC情報変更
02DD33 RTS return
  • SR: $02DD34 モンスターID切り替え(切り替えたc=on)(新SR)
02DD34 CMP #$0088 A==#$0088? 光ゾーマ
02DD37 BEQ #$1B if(z==on) goto $02DD54
02DD39 CMP #$00B4 A==#$00B4? 光ゾーマ2
02DD3C BEQ #$1B if(z==on) goto $02DD59
02DD3E CMP #$00B5 A==#$00B5? 灰ゾーマ
02DD41 BEQ #$1B if(z==on) goto $02DD5E
02DD43 CMP #$00B6 A==#$00B6? 灰ゾーマ2
02DD46 BEQ #$1B if(z==on) goto $02DD63
02DD48 CMP #$00A6 A==#$00A6? ダークドレアム
02DD4B BEQ #$1B if(z==on) goto $02DD68
02DD4D CMP #$00A6 A==#$00A7? ダークドレアム2
02DD50 BEQ #$1B if(z==on) goto $02DD6D
02DD52 CLC c=off
02DD53 RTS return
02DD54 LDA #$00B4 A=#$00B4 光ゾーマ2
02DD57 BRA #$17 goto $02DD70
02DD59 LDA #$0088 A=#$0088 光ゾーマ
02DD5C BRA #$12 goto $02DD70
02DD5E LDA #$00B6 A=#$00B6 灰ゾーマ2
02DD61 BRA #$0D goto $02DD70
02DD63 LDA #$00B5 A=#$00B5 灰ゾーマ
02DD66 BRA #$08 goto $02DD70
02DD68 LDA #$00B7 A=#$00B7 ダークドレアム2
02DD6B BRA #$03 goto $02DD70
02DD6D LDA #$00A6 A=#$00A6 ダークドレアム
02DD70 SEC c=on
02DD71 RTS return
  • SR: $02DDDD オルテガがゾーマに攻撃をしかける処理(処理実行c=on)(新SR)
02DDDD LDA $35B4 A=$35B4
02DDE0 AND #$0080 A&=#$0080 オルテガが未出現でゾーマと戦闘中(テンポラリフラグ扱い)
02DDE3 BEQ #$08 if(z==on) goto $02DDED
02DDE5 LDA $23D0 A=$23D0
02DDE8 CMP #$0001 A>=#$0001? 経過ターン数チェック
02DDEB BCS #$02 if(c==on) goto $02DDEF
02DDED CLC c=off
02DDEE RTS return
02DDEF JSR $DE6E SR: $02DE6E ゾーマ戦で行動主体を勇者に行動対象をゾーマにする
02DDF2 JSL $C1A867 SR: $01A867 引数:1#$017E 戦闘メッセージ表示
02DDF8 JSL $C1A867 SR: $01A867 引数:1#$017F 戦闘メッセージ表示
02DDFE JSL $C1A867 SR: $01A867 引数:1#$0180 戦闘メッセージ表示
02DE04 LDA #$005D A=#$005D
02DE07 JSL $C1E314 SR: $01E314 BGM再生
02DE0B JSL $C1A867 SR: $01A867 引数:1#$0181 戦闘メッセージ表示
02DE11 LDA #$8D72 A=#$8D72
02DE14 STA $4F4C $4F4C=A
02DE17 JSR $CF59 SR: $02CF59 行動対象の強制変更?
02DE1A LDA #$000E A=#$000E
02DE1D STA $4F68 $4F68=A
02DE20 INC $4F4E $4F4E++
02DE23 JSR $CF31 SR: $02CF31 攻撃時エフェクト実行
02DE26 JSL $C1E32E SR: $01E32E 引数:1#$005F 再生BGM設定?
02DE2C LDA $23E6 A=$23E6
02DE2F TAX X=A
02DE30 JSL $C2CAD9 SR: $02CAD9 引数:1#$203A 引数:2#$00FF 戦闘中PC情報取得
02DE38 TAX X=A
02DE39 JSL $C02ABA SR: $002ABA 引数:1#$C48726
02DE40 JSL $C48344 SR: $048344 エフェクト実行?
02DE44 JSL $C1A867 SR: $01A867 引数:1#$0182 戦闘メッセージ表示
02DE4A JSL $C1A867 SR: $01A867 引数:1#$0183 戦闘メッセージ表示
02DE50 JSL $C1A867 SR: $01A867 引数:1#$0184 戦闘メッセージ表示
02DE56 JSL $CDA15A SR: $0DA15A 現在のBGMフェードアウト?
02DE5A JSL $C1A867 SR: $01A867 引数:1#$0185 戦闘メッセージ表示
02DE60 LDA #$0020 A=#$0020
02DE63 TSB $35B4 A or $35B4 オルテガが竜の女王の石化の呪いを解いた
02DE66 LDA #$0001 A=#$0001
02DE69 TSB $35B5 A or $35B5 オルテガが竜の女王の石化の呪いを解いた(テンポラリフラグ扱い)
02DE6C SEC c=on
02DE6D RTS return
  • SR: $02DE6E ゾーマ戦で行動主体を勇者に行動対象をゾーマにする(新SR)
02DE6E LDY #$0000 Y=#$0000
02DE71 LDA $243E,Y A=$243E+Y
02DE74 AND #$00FF A&=#$00FF
02DE77 CMP #$0018 A>=#$0018?
02DE7A BCS #$2D if(c==on) goto $02DEA9
02DE7C STA $2428 $2428=A
02DE7F PHY Push Y
02DE80 TAY Y=A
02DE81 JSL $C2CAE0 SR: $02CAE0 引数:1#$203C 引数:2#$00FF 戦闘中PC情報取得
02DE89 CMP #$0005 A>=#$0005?
02DE8C BCC #$10 if(c==off) goto $02DE9E
02DE8E JSL $C2BE8A SR: $02BE8A 引数:1#$24
02DE93 CMP #$0008 A==#$0008?
02DE96 BNE #$0A if(z==off) goto $02DEA2
02DE98 TYA A=Y
02DE99 STA $23E4 $23E4=A
02DE9C BRA #$04 goto $02DEA2
02DE9E TYA A=Y
02DE9F STA $23E6 $23E6=A
02DEA2 PLY Pull Y
02DEA3 INY Y++
02DEA4 CPY #$0018 Y>=#$0018?
02DEA7 BCC #$C8 if(c==off) goto $02DE71
02DEA9 RTS return

このSRはオルテガの攻撃対象をゾーマに、またメッセージ中の会話の対象を勇者にセットするために必要です(オルテガから勇者への会話中の名前の呼びかけは行動主体[B7]にしているため)。あ、でもこれ勇者が死んでると間抜けですね。

  • SR: $0DF652 オルテガにゾーマから逃がしてもらう処理(新SR)
0DF652 LDA #$0019 A=#$0019
0DF655 JSL $C74B8C SR: $074B8C 行動対象キャラクター指定?
0DF659 LDA #$0041 A=#$0041
0DF65C LDX #$002C X=#$002C
0DF65F JSL $C75305 SR: $075305 キャラクター出現座標を指定
0DF663 JSL $CCD857 SR: $0CD857 キャラクターを上に向かせる
0DF667 LDA #$0041 A=#$0041
0DF66A LDX #$0030 X=#$0030
0DF66D JSL $C74279 SR: $074279 視点移動座標指定
0DF671 JSL $CDE0D0 SR: $0DE0D0
0DF675 LDA #$0020 A=#$0020
0DF678 JSL $C74B8C SR: $074B8C 行動対象キャラクター指定?
0DF67C LDA #$0041 A=#$0041
0DF67F LDX #$0030 X=#$0030
0DF682 JSL $C75305 SR: $075305 キャラクター出現座標を指定
0DF686 JSL $CDDC4D SR: $0DDC4D
0DF68A JSL $CDD806 SR: $0DD806
0DF68E LDX #$0004 X=#$0004
0DF691 LDA #$0008 A=#$0008
0DF694 JSL $C7891B SR: $07891B
0DF698 JSL $CDD682 SR: $0DD682 PC再描画?
0DF69C LDA $3402 A=$3402
0DF69F CMP #$1770 A>=#$1770?
0DF6A2 BCC #$02 if(c==off) goto $0DF6A6
0DF6A4 BRA #$03 goto $0DF6A9
0DF6A6 COP goto $00FFE4
0DF6A7 BRA #$F3 goto $0DF69C
0DF6A9 LDA #$0101 A=#$0101
0DF6AC LDX #$0000 X=#$0000
0DF6AF JSL $C733E5 SR: $0733E5
0DF6B3 JSL $CCD07D SR: $0CD07D
0DF6B7 LDA #$0006 A=#$0006
0DF6BA JSL $C74B39 SR: $074B39 処理にインターバルを置く?
0DF6BE JSL $CDC5F3 SR: $0DC5F3
0DF6C2 LDA #$0010 A=#$0010
0DF6C5 JSL $C74B39 SR: $074B39 処理にインターバルを置く?
0DF6C9 BRK $105B ($0D105B) goto $00FFE6(メッセージ表示) #$105B
0DF6CC JSL $CDACD2 SR: $0DACD2 キー入力でメッセージウィンドウを閉じる
0DF6D0 BRK $105C ($0D105C) goto $00FFE6(メッセージ表示) #$105C
0DF6D3 JSL $CDACD2 SR: $0DACD2 キー入力でメッセージウィンドウを閉じる
0DF6D7 BRK $105D ($0D105D) goto $00FFE6(メッセージ表示) #$105D
0DF6DA JSL $CDACD2 SR: $0DACD2 キー入力でメッセージウィンドウを閉じる
0DF6DE JSL $C1E32E SR: $01E32E 引数:1#$0065 再生BGM設定?
0DF6E4 JSL $C737BE SR: $0737BE 引数:1#$105E メッセージ表示
0DF6EA JSL $CC7B5A SR: $0C7B5A パーティ人数が1人か調べる(1人c=on)
0DF6EE BCS #$08 if(c==on) goto $0DF6F8
0DF6F0 JSL $C737BE SR: $0737BE 引数:1#$1060 メッセージ表示
0DF6F6 BRA #$06 goto $0DF6FE
0DF6F8 JSL $C737BE SR: $0737BE 引数:1#$105F メッセージ表示
0DF6FE LDA #$0020 A=#$0020
0DF701 JSL $C74B39 SR: $074B39 処理にインターバルを置く?
0DF705 LDA #$0019 A=#$0019
0DF708 JSL $C1E7D9 SR: $01E7D9 ルーラエフェクト処理(別バンク用)
0DF70C RTL return
  • SR: $01E7D9 ルーラエフェクト処理(別バンク用)(新SR)
01E7D9 REP #$30 m=off(A/M:16b) x=off(X/Y:16b)
01E7DB PEA #$7E7E Push #$7E7E
01E7DE PLB Pull DB
01E7DF PLB Pull DB
01E7E0 JSL $C1E32E SR: $01E32E 引数:1#$0096 再生BGM設定?
01E7E6 PHA Push A
01E7E7 JSR $D1AC SR: $01D1AC ルーラでPCが飛び上がる描画
01E7EA JSR $D19B SR: $01D19B ルーラによる時刻変更
01E7ED PLA Pull A
01E7EE JMP $0731E0 goto $0731E0

個々の部分の処理は特筆すべき点は特にありません。まあ今までやってきたことの総まとめといったところですね。