DQ3 誘惑の剣に混乱の追加効果を付ける

久しぶりの質問コーナーです。質問内容は

DQ3で誘惑の剣で攻撃したときに混乱の追加効果を付けたい

です。質問者の方は途中までは到達していたようですが、実装方法は色々あるということでやってみることにします。

まず、そもそもDQ3にはモンスター側が使用してくる戦闘行動ID:3「眠り攻撃」、ID:4「毒攻撃」、ID:5「マヒ攻撃」というダメージ発生後に追加効果がつくものがあります。混乱についてもこの並びで捉えるのがいいでしょう。実装の方針としては以下のとおり。例によってベースはDQ3 Extended ver1.444を使用しています。

  1. 追加効果を持つ直接攻撃として「混乱攻撃」を戦闘行動に追加
  2. 直接攻撃コマンド選択直後に「誘惑の剣を装備している場合」のみ戦闘行動IDを「混乱攻撃に差し替える」

まずは混乱攻撃の戦闘行動の定義・実装を行います。戦闘行動ID:$112に$003の眠り攻撃の内容をコピーします。変えるべき点は2点、「属性ID」を24にするのとエフェクト開始アドレスを$8D72にするだけです。次に以下の固定長データの場所をサイズを増やすために移動し、レコード数を増やします。今回は混乱攻撃の成功率としてモンスターのメダパニ耐性の設定値を使用し、成功率は100%、87.5%、75%、0%とします。

移動前移動後増やすレコード数追加したレコードに設定する値
追加効果つきの直接攻撃戦闘行動ID$028903$02D260+1$0112
追加効果直接攻撃処理SR$028909$02D268+1$D270
モンスター耐性情報取得$02C403$02D300+1$D2AF
PC耐性情報取得$02BCB7$02D332+1$BCE7
モンスター耐性閾値$02C3DB移動なし+4(任意)$100,$E0,$C0,$00(任意)

固定長データの拡張に伴い、参照しているSRを変更します。

  • SR: $0288CF 眠り毒麻痺追加攻撃処理
0288ECLDX #$0006X=#$00064から変更
0288EFLDA $23EEA=$23EE
0288F2CMP $C2D260,XA==$02D260+X?開始アドレスを変更
0288FEJSR $D268SR: $($02D268+X)SR配列のアドレスを変更

  • SR: $02BC7D 耐性を考慮したダメージ値等計算(PC側)
02BC88CMP #$0019A>=#$0019?属性IDを追加したら合わせて変更しないとフリーズする
02BC8FJSR $D332SR: $($02D332+X)開始アドレスを変更

  • SR: $02C3BF モンスター固定情報取得SR_SR_000B
02C3CACMP #$0019A>=#$0019?属性IDを追加したら合わせて変更しないとフリーズする
02C3D1JSR $D300SR: $($02D300+X)開始アドレスを変更

次は混乱の追加効果の判定処理を実装します。

  • SR: $02D270 混乱追加処理(新SR)
02D270JSL $C2A406SR: $02A406耐性を考慮して成否判定(成功c=on)
02D274BCC #$1Cif(c==off) goto $02D292
02D276JSL $C2BE8ASR: $02BE8A 引数:1#$28混乱状態取得(混乱中c=on)
02D27BBCS #$0Fif(c==on) goto $02D28C
02D27DJSL $C2B673SR: $02B673混乱化+混乱直後の処理(戦闘行動変更?)
02D281JSL $C2B977SR: $02B977パーティウィンドウ再描画?
02D285JSL $C1A867SR: $01A867 引数:1#$0044戦闘メッセージ表示「混乱した」
02D28BRTSreturn
02D28CJSL $C1A867SR: $01A867 引数:1#$0045戦闘メッセージ表示「ますます混乱した」
02D292RTSreturn

混乱発生時にエフェクトを入れたらよりそれっぽくなると思いますが省略します。メダパニの場合はすでに混乱中のキャラクターにメダパニをかけた場合には必ず「ますます混乱した」と表示されますが、今回は追加効果が発生した場合に相手がすでに混乱中の場合にのみ表示するようにしました。

  • SR: $02D2AF 混乱追加効果耐性情報取得
02D2AFJSL $C2CC92SR: $02CC92 引数:1#$0021 引数:2#$000Cメダパニ耐性情報取得
02D2B7CLCc=off
02D2B8ADC #$0014A+=(#$0014+c)
02D2BBRTSreturn

これで「混乱の追加効果を持つ直接攻撃」が実装できました。次に戦闘コマンド入力で直接攻撃かつ装備が誘惑の剣なら戦闘行動IDを差し替えるようにします。

  • SR: $02D2BC 戦闘コマンド入力処理_直接攻撃(新SR)
02D2BCJSR $5EC3SR: $025EC3戦闘コマンド入力処理_直接攻撃
02D2BFBCS #$03if(c==on) goto $02D2C4
02D2C1JSR $D2C6SR: $02D2C6誘惑の剣装備時の直接攻撃戦闘行動ID差し替え
02D2C4CLCc=off
02D2C5RTSreturn
  • SR: $02D2C6 誘惑の剣装備時の直接攻撃戦闘行動ID差し替え(新SR)
02D2C6LDX $2428X=$2428
02D2C9LDA #$0000A=#$0000種別=武器をセット
02D2CCJSL $C2B8AASR: $02B8AA装備アイテムID取得
02D2D0LDA $242CA=$242C
02D2D3CMP #$0017A==#$0017?誘惑の剣を装備しているか
02D2D6BNE #$15if(z==off) goto $02D2ED
02D2D8JSL $C2CAD9SR: $02CAD9 引数:1#$2034 引数:2#$01FF戦闘行動ID取得
02D2E0JSR $D2EESR: $02D2EEID差し替え処理
02D2E3BCC #$08if(c==off) goto $02D2ED
02D2E5JSL $C2CB70SR: $02CB70 引数:1#$2034 引数:2#$01FF戦闘行動IDせっと
02D2EDRTSreturn
  • SR: $02D2EE ID差し替え処理(新SR)
02D2EECMP #$0001A==#$0001?
02D2F1BNE #$05if(z==off) goto $02D2F8
02D2F3LDA #$0112A=#$0112
02D2F6SECc=on
02D2F7RTSreturn
02D2F8CLCc=off
02D2F9RTSreturn

コメント

  1. Dt より:

    まどろみのけんを作ってみようと戦闘行動とその中身(ほぼ眠り攻撃のコピペで属性IDを10、効果発生時にエフェクト)
    を作ってみたのですが、追加効果が発生はすることはあるものの、攻撃そのものがミス連発する現象が起きてしまいます。
    ラリホー系耐性の高いモンスターほど攻撃がミスになっているようなのと、属性IDを0にすると攻撃のミス自体はなくなったので攻撃部分にまで耐性判定がされている?ような感じはするのですが。
    試しにオリジナルの眠り攻撃の属性IDと中身をまどろみのけん用に変えて差し替えて使ってみたところ
    望み通りの挙動になったのですが、原因が分かりません。

  2. Dt より:

    すみません、自己解決しました。
    「291A8 耐性を考慮してダメージ調整」に新しく作ったまどろみのけん用の戦闘行動IDを追加していなかったのが原因でした。

タイトルとURLをコピーしました