DQ3 専門職以外の攻撃呪文の効果を3/4化バグ修正

いちおう一通りストーリー変更は(ゾーマの城のマップ追加を除いて)終わったので、残りはバランス調整、バグ修正なのですが、ちょっとプレイしただけでバグがぽろぽろと見つかりますorz。以前スレでも指摘された「DQ6からの呪文効果エフェクトの移植」の必要性を遊び人のまねまねがらみで感じて調べているのですが、とんとわかりません(例によってDQ6とDQ3は互換性があるという前提のもとDQ3側しか調べていませんが。情報求ム)。というわけで若干モチベーションが下がり気味です。

はるか昔のエントリで実装した「専門職以外の攻撃呪文の効果を3/4にする」ですが、またしてもバグが見つかったので修正します。問題は「アイテムで攻撃呪文の効果を持つもの」が全て設定値の3/4になる、というものです。まあもともと強すぎたんだからいいじゃん、とは思わないでもないのですが、弱体化するんだったら数値設定の方を変えればいいわけで、意図しない動作という点ではバグなので修正します。従来の実装では3/4にするべきかの判断部分と3/4化する部分を一体にしていましたが、判断部分を別SRに切り出すことにします。

  • SR: $02D260 職業別攻撃呪文ダメージ調整
02D263 JSR $E362 SR: $02E362 3/4の調整対象か
02D266 BCC #$08 if(c==off) goto $02D270
02D268 LDA $00 A=DP($00)
02D26A LSR A>>1
02D26B ADC $00 A+=(DP($00)+c)
02D26D LSR A>>1
02D26E STA $00 DP($00)=A 3/4化処理
02D270 PLP Pull P Flag
02D271 PLX Pull X
02D272 PLA Pull A
02D273 JSR $8E70 SR: $028E70 ダメージ確定メイン
02D276 RTS return
  • SR: $02E362 戦闘行動が呪文ダメージ調整対象か(該当c=on)(新SR)
02E362 LDX $23EE X=$23EE
02E365 CPX #$012C X==#$012C?
02E368 BEQ #$57 if(z==on) goto $02E3C1
02E36A CPX #$012D X==#$012D?
02E36D BEQ #$52 if(z==on) goto $02E3C1
02E36F JSL $C2CC47 SR: $02CC47 引数:1#$0078 引数:2#$0040 戦闘行動がマホトーンに依存されるか
02E377 BEQ #$48 if(z==on) goto $02E3C1
02E379 LDX $23E4 X=$23E4
02E37C STX $2428 $2428=X
02E37F JSL $C2CAD9 SR: $02CAD9 引数:1#$203C 引数:2#$00FF
02E387 CMP #$0005 A>=#$0005? 行動主体がPCか
02E38A BCC #$35 if(c==off) goto $02E3C1
02E38C JSL $C2BE8A SR: $02BE8A 引数:1#$24
02E391 CMP #$0008 A==#$0008? 行動主体の職業が勇者か
02E394 BEQ #$2B if(z==on) goto $02E3C1
02E396 CMP #$0007 A==#$0007? 行動主体の職業が賢者か
02E399 BEQ #$26 if(z==on) goto $02E3C1
02E39B CMP #$0002 A==#$0002? 行動主体の職業が魔法使いか
02E39E BNE #$0F if(z==off) goto $02E3AF
02E3A0 LDA $23EE A=$23EE
02E3A3 CMP #$0013 A>=#$0013? 戦闘行動がバギ(#$13)未満
02E3A6 BCC #$19 if(c==off) goto $02E3C1
02E3A8 CMP #$0015 A>=#$0015? 戦闘行動がバギクロス(#$15)より上
02E3AB BCS #$14 if(c==on) goto $02E3C1
02E3AD BRA #$14 goto $02E3C3
02E3AF CMP #$0003 A==#$0003? 行動主体の職業が僧侶か
02E3B2 BNE #$0F if(z==off) goto $02E3C3
02E3B4 LDA $23EE A=$23EE
02E3B7 CMP #$0013 A>=#$0013? 戦闘行動がバギ(#$13)以上
02E3BA BCC #$07 if(c==off) goto $02E3C3
02E3BC CMP #$0016 A>=#$0016? 戦闘行動がライデイン(#$16)未満
02E3BF BCS #$02 if(c==on) goto $02E3C3
02E3C1 CLC c=off
02E3C2 RTS return
02E3C3 SEC c=on
02E3C4 RTS return

新たにやっていること自体は「戦闘行動がマホトーンに依存しない場合は調整対象にしない」だけです。判断部分を別SRに切り出したので今後変更の必要がある場合は判断部分を変えればいい、ということになるので、構成がすっきりしました。また、回復呪文に関しては、戦闘行動IDをピンポイントで見ているので特に判断部分を別SRにする必要はないだろうということで変更していません。