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

ラスボス編は若干やっつけ気味ですが今回で終わりです。初回ゾーマの城離脱後親父とのバトルが追加される部分の説明をしていませんが、大したこともしていないので省略します。次回からは未解説の各種ギミックの解説をします。

最後はゾーマに追加する戦闘行動「暗黒の波動」の実装です。ネオエクスデス(FF5)のグランドクロスと似たようなものですが、リボンなどの完全防御のアイテムがない分こっちのほうが脅威です。完全防御のアイテムを用意することも考えましたが、「完全に防ぐ手立てが無い」ほうが緊張感が保てると思ったので見送りました。暗黒の波動の効果は敵全体に対し、凍てつく波動+ラリホー+マホトーン+マヌーサ+メダパニとなります。凍てつく波動は必中ですが、残りは通常のそれぞれの呪文のオリジナルと同じ成功率を使用します。

  • SR: $02DEF4 暗黒の波動(新SR)
02DEF4 JSL $C29E44 SR: $029E44 凍てつく波動
02DEF8 PHA Push A
02DEF9 STZ $260C $260C=#$00
02DEFC LDA #$0030 A=#$0030 戦闘行動を差し替え
02DEFF STA $23EE $23EE=A
02DF02 JSR $DD72 SR: $02DD72 暗黒の波動(ラリホー)
02DF05 BCS #$06 if(c==on) goto $02DF0D
02DF07 LDA #$0001 A=#$0001
02DF0A TSB $260C A or $260C
02DF0D LDA #$0032 A=#$0032 戦闘行動を差し替え
02DF10 STA $23EE $23EE=A
02DF13 JSR $DFFA SR: $02DFFA 暗黒の波動(マホトーン)
02DF16 BCS #$06 if(c==on) goto $02DF1E
02DF18 LDA #$0002 A=#$0002
02DF1B TSB $260C A or $260C
02DF1E LDA #$0033 A=#$0033 戦闘行動を差し替え
02DF21 STA $23EE $23EE=A
02DF24 JSR $E03D SR: $02E03D 暗黒の波動(マヌーサ)
02DF27 BCS #$06 if(c==on) goto $02DF2F
02DF29 LDA #$0004 A=#$0004
02DF2C TSB $260C A or $260C
02DF2F LDA #$003F A=#$003F 戦闘行動を差し替え
02DF32 STA $23EE $23EE=A
02DF35 JSR $E07B SR: $02E07B 暗黒の波動(メダパニ)
02DF38 BCS #$06 if(c==on) goto $02DF40
02DF3A LDA #$0008 A=#$0008
02DF3D TSB $260C A or $260C
02DF40 LDA #$0120 A=#$0120
02DF43 STA $23EE $23EE=A
02DF46 LDA $260C A=$260C
02DF49 CMP #$000F A==#$000F?
02DF4C BNE #$08 if(z==off) goto $02DF56
02DF4E JSL $C1A867 SR: $01A867 引数:1#$000F 戦闘メッセージ表示
02DF54 BRA #$04 goto $02DF5A
02DF56 JSL $C2B977 SR: $02B977 パーティウィンドウ再描画?
02DF5A STZ $260C $260C=#$00
02DF5D PLA Pull A
02DF5E RTL return
  • SR: $02DD72 暗黒の波動(ラリホー)(新SR)
02DD72 LDY $23E8 Y=$23E8
02DD75 STY $2428 $2428=Y
02DD78 JSL $C2BE8A SR: $02BE8A 引数:1#$16
02DD7D BCS #$1B if(c==on) goto $02DD9A
02DD7F JSL $C2CAE0 SR: $02CAE0 引数:1#$2047 引数:2#$00FF 戦闘中PC情報取得
02DD87 BNE #$11 if(z==off) goto $02DD9A
02DD89 JSR $A3EB SR: $02A3EB 耐性を考慮して成否判定+PC側耐性計算?
02DD8C BCC #$0C if(c==off) goto $02DD9A
02DD8E JSL $C2B5D8 SR: $02B5D8
02DD92 JSL $C1A867 SR: $01A867 引数:1#$0041 戦闘メッセージ表示
02DD98 SEC c=on
02DD99 RTS return
02DD9A CLC c=off
02DD9B RTS return
  • SR: $02DFFA 暗黒の波動(マホトーン)(新SR)
02DFFA LDX $23E8 X=$23E8
02DFFD JSL $C2CAD9 SR: $02CAD9 引数:1#$2051 引数:2#$0002 戦闘中PC情報取得
02E005 BEQ #$02 if(z==on) goto $02E009
02E007 CLC c=off
02E008 RTS return
02E009 JSR $989B SR: $02989B 行動対象者のMPが0か?
02E00C BCS #$05 if(c==on) goto $02E013
02E00E JSR $A3EB SR: $02A3EB 耐性を考慮して成否判定+PC側耐性計算?
02E011 BCS #$02 if(c==on) goto $02E015
02E013 CLC c=off
02E014 RTS return
02E015 LDA #$0001 A=#$0001
02E018 JSL $C2CB70 SR: $02CB70 引数:1#$2051 引数:2#$0002 戦闘中PC情報変更
02E020 JSR $DD9C SR: $02DD9C 暗黒の波動効果メッセージ切り替え(味方,マホトーン)
02E023 PHA Push A
02E024 JSL $C2CAD9 SR: $02CAD9 引数:1#$203C 引数:2#$00FF 戦闘中PC情報取得
02E02C CMP #$0004 A>=#$0004?
02E02F BCS #$05 if(c==on) goto $02E036
02E031 JSR $DDB0 SR: $02DDB0 暗黒の波動効果メッセージ切り替え(敵,マホトーン)
02E034 STA $01,S Stack($01)=A
02E036 PLA Pull A
02E037 JSL $C1A87A SR: $01A87A 戦闘メッセージ表示
02E03B SEC c=on
02E03C RTS return
  • SR: $02E03D 暗黒の波動(マヌーサ)(新SR)
02E03D LDX $23E8 X=$23E8
02E040 JSL $C2CAD9 SR: $02CAD9 引数:1#$2051 引数:2#$0004 戦闘中PC情報取得
02E048 BEQ #$02 if(z==on) goto $02E04C
02E04A CLC c=off
02E04B RTS return
02E04C JSR $A3EB SR: $02A3EB 耐性を考慮して成否判定+PC側耐性計算?
02E04F BCS #$02 if(c==on) goto $02E053
02E051 CLC c=off
02E052 RTS return
02E053 LDA #$0001 A=#$0001
02E056 JSL $C2CB70 SR: $02CB70 引数:1#$2051 引数:2#$0004 戦闘中PC情報変更
02E05E JSR $E067 SR: $02E067 暗黒の波動効果メッセージ切り替え(マヌーサ)
02E061 JSL $C1A87A SR: $01A87A 戦闘メッセージ表示
02E065 SEC c=on
02E066 RTS return
  • SR: $02E07B 暗黒の波動(メダパニ)(新SR)
02E07B LDY $23E8 Y=$23E8
02E07E STY $2428 $2428=Y
02E081 JSL $C2BE8A SR: $02BE8A 引数:1#$28
02E086 BCC #$09 if(c==off) goto $02E091
02E088 JSR $E0C3 SR: $02E0C3 暗黒の波動効果メッセージ切り替え(メダパニ2)
02E08B JSL $C1A87A SR: $01A87A 戦闘メッセージ表示
02E08F SEC c=on
02E090 RTS return
02E091 JSL $C2CAE0 SR: $02CAE0 引数:1#$2051 引数:2#$0040 戦闘中PC情報取得
02E099 BNE #$05 if(z==off) goto $02E0A0
02E09B JSR $A3EB SR: $02A3EB 耐性を考慮して成否判定+PC側耐性計算?
02E09E BCS #$02 if(c==on) goto $02E0A2
02E0A0 CLC c=off
02E0A1 RTS return
02E0A2 JSL $C2B673 SR: $02B673 混乱直後の処理(戦闘行動変更?)
02E0A6 JSR $E0AF SR: $02E0AF 暗黒の波動効果メッセージ切り替え(メダパニ)
02E0A9 JSL $C1A87A SR: $01A87A 戦闘メッセージ表示
02E0AD SEC c=on
02E0AE RTS return
  • SR: $02DD9C 暗黒の波動効果メッセージ切り替え(味方,マホトーン)(新SR)
02DD9C LDA $260C A=$260C
02DD9F AND #$0001 A&=#$0001
02DDA2 CMP #$0001 A==#$0001?
02DDA5 BNE #$05 if(z==off) goto $02DDAC
02DDA7 LDA #$0067 A=#$0067
02DDAA BRA #$03 goto $02DDAF
02DDAC LDA #$0193 A=#$0193
02DDAF RTS return

取り立ててこれといって難しいことはしていないのですが、ポイントは「対象1人に着目したときに、メッセージ表示時に画面切り替えをする/しないのコントロールをする」というところです。オリジナルのメッセージを使用すると、メッセージの先頭に画面切り替え?のコントロール文字列[BD]が付加されているため、

○○は ねむってしまった!

画面切り替え

○○は まぼろしに つつまれた!

となってしまい、非常に見づらくなります。理想は

○○は ねむってしまった!

○○は まぼろしに つつまれた!

のように1人分は1画面に続けて表示したいところです。従って、面倒ですが「効果発生時に対象キャラクターの最初の効果発動の場合は[BD]付きのメッセージを表示し、すでに別の効果が発生している場合は[BD]なしのメッセージを表示する」という処理をすることで対応します。その切り替え処理をしているのがSR: $02DD9Cなどです(ラリホーは最初の効果なので必ず[BD]付きのメッセージを使用する)。同様にマヌーサ、メダパニにもメッセージ切り替えの処理をはさむことになります。