遊び人の追加職業特性とも絡むのですが、「モンスター側の攻撃呪文系の耐性(弱点化)を固定情報ではなく戦闘中に動的に変更する」を実装します。属性ごとに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っぽいキャラクターも作成可能です。
コメント