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

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

  • SR: $02C443 モンスター耐性情報設定_SR_0001(属性ID1:メラギラ系)
02C443JSR $E0D7SR: $02E0D7モンスター炎系呪文耐性取得
02C446-ANOP
02C44BRTSreturn

  • SR: $02E0D7 モンスター炎系呪文耐性取得(新SR)
02E0D7PHXPush X
02E0D8JSR $DAE1SR: $02DAE1
02E0DBLDA $2640,XA=$2640+X動的耐性設定値を取得
02E0DEAND #$0088A&=#$0088炎系耐性に設定があるか
02E0E1BNE #$0Aif(z==off) goto $02E0ED
02E0E3PLXPull X
02E0E4JSL $C2CC92SR: $02CC92 引数:1#$001E 引数:2#$0030
02E0ECRTSreturn
02E0EDPHAPush A
02E0EEAND #$0080A&=#$0080弱点化されている
02E0F1BEQ #$06if(z==on) goto $02E0F9
02E0F3PLAPull A
02E0F4LDA #$0000A=#$0000
02E0F7BRA #$09goto $02E102
02E0F9PLAPull A
02E0FAAND #$0008A&=#$0008無効化されている
02E0FDBEQ #$E4if(z==on) goto $02E0E3
02E0FFLDA #$0003A=#$0003
02E102PLXPull X
02E103RTSreturn

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

スポンサーリンク

コメントを書く

メールアドレスが公開されることはありません。コメントは管理者の承認後表示されます。