DQ3 鎧以外にも特殊回避率を設定できるようにする

今回も質問コーナーです。

DQ3で鎧以外の装備品にも特殊回避率を設定したい

です。オリジナルの実装では、特殊回避率を持つ装備品は鎧3種のみなので、回避判定時には攻撃対象の鎧の装備品のチェックしか行っていません。例えばFFのディフェンダーのような武器を設定したい、という場合などはその他の装備品についても同様のチェックを行う必要があります。いろいろやり方はあると思いますが、おもいっきり横着したやり方で実装を行います。今回も戦闘部分の解析エントリ同様、DQ3 Extended 1.44xをベースにしています。

  • SR: $028690 直接攻撃回避判定
0286C3 JSR $E000 SR: $02E000 回避判定(特殊)
  • SR: $02E000 回避判定(特殊)(新SR)
02E000 JSR $E01C SR: $02E01C 回避判定(武器,特殊)
02E003 BCS #$01 if(c==on) goto $02E006
02E005 RTS return
02E006 JSR $875F SR: $02875F 回避判定(鎧,特殊)
02E009 BCS #$01 if(c==on) goto $02E00C
02E00B RTS return
02E00C JSR $E046 SR: $02E046 回避判定(盾,特殊)
02E00F BCS #$01 if(c==on) goto $02E012
02E011 RTS return
02E012 JSR $E070 SR: $02E070 回避判定(兜,特殊)
02E015 BCS #$01 if(c==on) goto $02E018
02E017 RTS return
02E018 JSR $E09A SR: $02E09A 回避判定(アクセサリ,特殊)
02E01B RTS return

(2011-05-20追記)
回避したか判定する部分が逆になっていました。c=offなら回避成功なので、c=onの時は次のアイテム種別で回避判定を行うように修正しました。

  • SR: $02E01C 回避判定(武器,特殊)(新SR)
02E01C PHX Push X
02E01D LDA #$0000 A=#$0000 装備品種別に武器をセット
02E020 JSL $C2B8AA SR: $02B8AA 装備品アイテムID取得
02E024 LDA $242C A=$242C
02E027 LDX #$003C X=#$003C 最終レコード開始オフセット
02E02A CMP $C2D220,X A==$02D220+X?
02E02E BEQ #$08 if(z==on) goto $02E038
02E030 DEX X–
02E031 DEX X–
02E032 DEX X–
02E033 DEX X–
02E034 BPL #$F4 if(n==off) goto $02E02A
02E036 BRA #$0B goto $02E043
02E038 LDA $C2D222,X A=$02D222+X
02E03C JSL $C0133E SR: $00133E
02E040 CLC c=off
02E041 BEQ #$01 if(z==on) goto $02E044
02E043 SEC c=on
02E044 PLX Pull X
02E045 RTS return

(2011-05-19追記)
「02E027 LDX #$003C」が「02E027 LDX #$0008」だったので修正

  • SR: $02E046 回避判定(盾,特殊)(新SR)
  • SR: $02E070 回避判定(兜,特殊)(新SR)
  • SR: $02E09A 回避判定(アクセサリ,特殊)(新SR)

ほとんど同じなので省略

動作確認をしていませんが、これで動くようになるはず。この実装では、特殊回避率を持つ異なる装備品を装備している場合に、それら全てに対して回避判定が行われます。従って、回避率の設定次第では回避率が100%になり、敵の攻撃が一切当たらなくなる可能性があります。