DQ3 戦士の防御による後方キャラクターのダメージ低減率をレベルに応じて変化させる2

実装を始めます。ちなみに、今回からコメント部分の表記の一部(特にアドレス部分)が変更になります。

  • SR: $02D807 戦士防御時のダメージ軽減処理
02D896 CPY $2604 Y==$2604?
02D899 BEQ #$02 if(z==on) goto $02D89D
02D89B BCS #$F2 if(c==on) goto $02D88F
02D89D STY $2606 $2606=Y
02D8A0 LDA $2604 A=$2604
02D8A3 SEC c=on
02D8A4 SBC $2606 A-=($2606+c)
02D8A7 JSL $C2EEA6 SR: $02EEA6 戦士防御時の補正率分子取得
  • SR: $02EEA6 戦士防御時の補正率分子取得
02EEA6 PHA Push A
02EEA7 LDY $2606 Y=$2606
02EEAA LDA $243E,Y A=$243E+Y
02EEAD AND #$00FF A&=#$00FF 戦士の戦闘中ID取得
02EEB0 STA $2428 $2428=A
02EEB3 JSL $C2C240 SR: $02C240 引数:1#$0A 戦士のレベル取得
02EEB8 PHA Push A
02EEB9 LDX #$0000 X=#$0000 Xは構造体のインデックス
02EEBC JSL $C903EE SR: $0903EE 引数:1#$00 引数:2#$000A 引数:3#$C23CB2 引数:4#$0000 構造体アクセス 設定値の「レベル」を取得
02EEC8 CMP $01,S A==Stack($01)? 実際のレベルと比較
02EECA BEQ #$09 if(z==on) goto $02EED5
02EECC BCS #$06 if(c==on) goto $02EED4
02EECE INX X++
02EECF CPX #$0004 X>=#$0004?
02EED2 BCC #$E8 if(c==off) goto $02EEBC
02EED4 DEX X–
02EED5 PLA Pull A
02EED6 JSL $C9050D SR: $09050D 引数:1#$00 引数:2#$000A 引数:3#$C23CB2 引数:4#$30 構造体アクセス X番目の先頭アドレスをDP(第4引数)にセット
02EEE1 PLA Pull A 戦士から何人後ろかの値をPull
02EEE2 ASL A<<1
02EEE3 INC A++
02EEE4 INC A++
02EEE5 TAY Y=A
02EEE6 LDA $30 A=$(DP[$30])+Y Indirect Longでアクセス
02EEE8 RTL return

実装自体はこれで終わりです。もともとの実装をちょっと変えるだけなので変更量自体はたいしたことはありません。戦士が該当レベルになったら呪文習得のようなメッセージをだそうかと思っているんですが、どういう文面にしようか迷い中。また、補正値のほうは

戦士レベル 補正率1 補正率2 補正率3 補正率4
0 0100 0100 0100 0100
20 0180 0100 0100 00CC
35 0180 0100 00CC 00B3
50 0180 00CC 00B3 0099

というふうにするか、

戦士レベル 補正率1 補正率2 補正率3 補正率4
0 0100 0100 0100 0100
20 0180 00CC 0100 0100
35 0180 00CC 00B3 0100
50 0180 00CC 00B3 0099

というふうにしようか迷い中。後者のほうが一番守りたい最後尾に3段階目(レベルはともかく)にならないと効果が届かないので育てる意義があるかなあと。設定値を変えるだけで対応できるのでしばらく寝かせて考えます。