DQ3 攻撃呪文系の耐性を動的に変更

遊び人の追加職業特性とも絡むのですが、「モンスター側の攻撃呪文系の耐性(弱点化)を固定情報ではなく戦闘中に動的に変更する」を実装します。属性ごとに1ビットずつ弱点化、無効化の情報を持ち、4属性(炎系・ヒャド系・バギ系・デイン系)分1バイトで管理するようにします(この機能の実装後にイオ系の耐性の固定情報を炎系呪文から分離させましたが、この部分に関しては面倒なので分けることはしないで共通とします)。7E2640から24バイトに戦闘に参加しているキャラクターのインデックスに対応するデータを保持するようにし、モンスター側の耐性情報を取得する際にはまずこの部分を参照し、何も設定されていなければ固定情報から取得したデータを使用する、というようにします。

  • SR: $02C443 モンスター耐性情報設定_SR_0001(属性ID1:メラギラ系)
02C443 JSR $E0D7 SR: $02E0D7 モンスター炎系呪文耐性取得
02C446-A NOP
02C44B RTS return
  • SR: $02E0D7 モンスター炎系呪文耐性取得(新SR)
02E0D7 PHX Push X
02E0D8 JSR $DAE1 SR: $02DAE1
02E0DB LDA $2640,X A=$2640+X 動的耐性設定値を取得
02E0DE AND #$0088 A&=#$0088 炎系耐性に設定があるか
02E0E1 BNE #$0A if(z==off) goto $02E0ED
02E0E3 PLX Pull X
02E0E4 JSL $C2CC92 SR: $02CC92 引数:1#$001E 引数:2#$0030
02E0EC RTS return
02E0ED PHA Push A
02E0EE AND #$0080 A&=#$0080 弱点化されている
02E0F1 BEQ #$06 if(z==on) goto $02E0F9
02E0F3 PLA Pull A
02E0F4 LDA #$0000 A=#$0000
02E0F7 BRA #$09 goto $02E102
02E0F9 PLA Pull A
02E0FA AND #$0008 A&=#$0008 無効化されている
02E0FD BEQ #$E4 if(z==on) goto $02E0E3
02E0FF LDA #$0003 A=#$0003
02E102 PLX Pull X
02E103 RTS return

他の属性についても基本同じことをするだけなので説明は省略します。動的耐性設定に関しては、上位4ビットを弱点化、下位4ビットを無効化とし、それぞれ左から炎系、ヒャド系、バギ系、デイン系の順で設定値がある、というようになっています。遊び人の遊びでモンスターに弱点を追加する場合は該当ビットにフラグを立てる処理をすれば良い、ということになります。無効化は実際には使用していませんが、プログラムを書けばターンごとに弱点を変えるようなFFっぽいキャラクターも作成可能です。