今回も質問コーナーです。
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%になり、敵の攻撃が一切当たらなくなる可能性があります。
コメント