DQ3 モンスターの攻撃呪文の耐性をダメージ減少率に変更する

もはやSFCDQ3の改造の定番とも言える「モンスターのダメージ系の呪文の耐性を成功確率からダメージ減少率に変える」を実装します。マップ編集の作業が辛すぎて、ついふらふらと気分転換がてら別の変更に手を出してしまいました(後日作業環境の整備の結果、マップ編集作業はかなり楽になりました)。また、オリジナルでは割合の数値は100%・75%?・30%・0%だったのを、150%(弱点)・100%(耐性なし)・50%(半減)・0%(無効)とし、弱点呪文の場合はダメージが増えるようにも設定できるようにします。150%というのはやりすぎなので125%くらいに調整するかもしれません。かなりのモンスターに弱点が設定されているFFとは違い、DQではあからさまに弱点がありそうなモンスターというのは炎や氷からできているモンスターくらいなのでいまいちそぐわないかもしれません。

  • SR: $0291A8 耐性によるダメージ0化処理
0291D3JSR $DAF9SR: $02DAF9耐性を考慮した呪文等結果処理
  • SR: $02DAF9 耐性を考慮した呪文等結果処理(新SR)
02DAF9JSR $DB02SR: $02DB02ダメージ系呪文を耐性を考慮してダメージ値調整(調整c=on)
02DAFCBCS #$03if(c==on) goto $02DB01
02DAFEJSR $A3EBSR: $02A3EB
02DB01RTSreturn

  • SR: $02DB02 ダメージ系呪文を耐性を考慮してダメージ値調整(調整c=on)(新SR)
02DB02JSR $DB3ESR: $02DB3E戦闘行動がダメージ値調整対象になるか
02DB05BCC #$35if(c==off) goto $02DB3C
02DB07LDA $23E8A=$23E8
02DB0ASTA $2428$2428=A
02DB0DLDA $23EEA=$23EE
02DB10STA $242A$242A=A
02DB13JSL $C2C240SR: $02C240 引数:1#$16
02DB18CMP #$0100A==#$0100?耐性値0
02DB1BBNE #$0Aif(z==off) goto $02DB27
02DB1DLDA $00A=DP($00)
02DB1FLSRA>>1
02DB20NOP(125%に抑えたい場合はここを4Aに変更する)
02DB21ADC $00A+=(DP($00)+c)
02DB23STA $00DP($00)=Aダメージ150%化
02DB25BRA #$13goto $02DB3A
02DB27CMP #$004CA==#$004C?
02DB2ABNE #$04if(z==off) goto $02DB30
02DB2CLSR $00DP($00)>>1ダメージ50%化
02DB2EBRA #$0Agoto $02DB3A
02DB30CMP #$0000A==#$0000?
02DB33BNE #$05if(z==off) goto $02DB3A
02DB35LDA #$0000A=#$0000
02DB38STA $00DP($00)=Aダメージ無効化
02DB3ASECc=on
02DB3BRTSreturn
02DB3CCLCc=off
02DB3DRTSreturn

(2009-10-06追記)
以下のSR: $02DB3Bは不完全なためhttps://retrogamehackers.net/dq3-battlesystem-mod-012/で修正しています。以下の実装は使用を推奨しません。

  • SR: $02DB3B 戦闘行動がダメージ値調整対象になるか(対象c=on)(新SR)
02DB3EPHXPush X
02DB3FLDX $23E8X=$7E23E8
02DB42STX $2428$7E2428=X
02DB45JSL $C2CAD9SR: $02CAD9 引数1:#$203C 引数2:#$00FFターゲットのグループ番号を取得
02DB4DCMP #$0005A>=#$0005?味方側か?
02DB50BCS #$30if(c==on) goto $02DB82
02DB52LDA $23EEA=$7E23EE戦闘行動IDチェック
02DB55CMP #$0006A>=#$0006?メラ未満か?
02DB58BCC #$28if(c==off) goto $02DB82
02DB5ACMP #$0018A>=#$0018?ザキ未満か?
02DB5DBCC #$20if(c==off) goto $02DB7F
02DB5FCMP #$0057A>=#$0057?ひのいき未満か?
02DB62BCC #$1Eif(c==off) goto $02DB82
02DB64CMP #$005DA>=#$005D?どくのいき未満か?
02DB67BCC #$16if(c==off) goto $02DB7F
02DB69CMP #$006CA>=#$006C?まどうしのつえ未満か?
02DB6CBCC #$14if(c==off) goto $02DB82
02DB6ECMP #$0073A>=#$0073?くさなぎのけん未満か?
02DB71BCC #$0Cif(c==off) goto $02DB7F
02DB73CMP #$010DA>=#$010D?しゃくねつ未満か?
02DB76BCC #$0Aif(c==off) goto $02DB82
02DB78CMP #$010EA>=#$010E?にらみつけ未満か?
02DB7BBCC #$02if(c==off) goto $02DB7F
02DB7DBRA #$03goto $02DB82
02DB7FSECc=on
02DB80BRA #$01goto $02DB83
02DB82CLCc=off
02DB83PLXPull X
02DB84RTSreturn

この変更に伴い、全モンスターの耐性を見直します。オリジナルでは0%と100%の間には30%、70%と2つ段階があったのに対し、今回の変更では0%と100%の間には50%だけになるので、オリジナルと全く同じ設定をする、というわけにはいきません。炎系呪文の耐性が30%で残りが70%のような場合には耐性を付けたい場合は全部50%を設定するしかないわけでこうした場合の濃淡が付けられないという欠点があります。どっか1ビット余計に使えればいいんですが。テストをして50%耐性のあるモンスターに使ってダメージが半減していればとりあえずOKです。

コメント

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