DQ3 モンスターの行動パターンに「強攻撃」「グループ攻撃」を追加する

最近のDQではおなじみ(っていっても8以降はプレイしたことないんですが)、「強攻撃」(ダメージ1.25倍?)と「グループ攻撃」(ダメージ1/2で全員対象、低減あり)を戦闘行動に追加します。これらの行動で通常の直接攻撃を差し替えるとかなりモンスター行動のバリエーションが豊かになるのではないかと。本家では改変度合い強すぎてバランスが大きく変わってしまうために絶対導入されないと思いますが。「強攻撃」はどこの攻略サイトを見ても「ダメージが1.25倍」と説明されていて、「行動主体者の攻撃力1.25倍」とは書いてありません。つまり、結果として最終的に算出されるダメージが1.25倍になるということのようです。まあDQ6の実装を見ればいいのですが、時間もないので「ダメージ基礎値を1.25倍する」ことにします。「ダメージ基礎値」というのは攻撃力-守備力/2のことです。例外としてダメージ基礎値がマイナス(FFXX)の場合には1.25倍しません。

  • SR: $02DBC9 直接攻撃(強)後半(新SR)
02DBC9JSR $DBD0SR: $02DBD0直接攻撃(強)基本ダメージ計算
02DBCCJSR $8E70SR: $028E70ダメージ確定メイン
02DBCFRTLreturn

  • SR: $02DBD0 直接攻撃(強)基本ダメージ計算(新SR)
02DBD0LDX $23E4X=$23E4
02DBD3LDY $23E8Y=$23E8
02DBD6JSL $C2CA62SR: $02CA62 引数:1#$2041守備力取得
02DBDCLSRA>>1
02DBDDPHAPush A
02DBDEJSL $C2CA5BSR: $02CA5B 引数:1#$203F攻撃力取得
02DBE4STA $02DP($02)=A
02DBE6PHAPush A
02DBE7LSRA>>1
02DBE8LSRA>>1
02DBE9LSRA>>1
02DBEASTA $04DP($04)=A
02DBECPLAPull A
02DBEDSECc=on
02DBEESBC $01,SA-=(Stack($01)+c)ダメージ基礎値作成
02DBF0BMI #$08if(n==on) goto $02DBFAn=onになっていれば1.25倍化処理を飛ばす
02DBF2PHAPush A
02DBF3LSRA>>1
02DBF4LSRA>>1
02DBF5STA $00DP($00)=A
02DBF7PLAPull A
02DBF8ADC $00A+=(DP($00)+c)ダメージ基礎値1.25倍
02DBFASTA $00DP($00)=A
02DBFCPLAPull A
02DBFDJSL $C2CAD9SR: $02CAD9 引数:1#$203C 引数:2#$00FF
02DC05CMP #$0005A>=#$0005?
02DC08BCS #$04if(c==on) goto $02DC0E
02DC0AJSR $8E0ESR: $028E0E
02DC0DRTSreturn
02DC0EJSR $8DEBSR: $028DEB
02DC11JSR $8E4ASR: $028E4A
02DC14RTSreturn

  • SR: $02E18B 直接攻撃(グループ)後半(新SR)
02E18BJSR $E192SR: $02E192直接攻撃(グループ)基本ダメージ計算
02E18EJSR $8E70SR: $028E70ダメージ確定メイン
02E191RTLreturn

  • SR: $02E192 直接攻撃(グループ)基本ダメージ計算(新SR)
02E192LDX $23E4X=$23E4
02E195LDY $23E8Y=$23E8
02E198JSL $C2CA62SR: $02CA62 引数:1#$2041
02E19ELSRA>>1
02E19FPHAPush A
02E1A0JSL $C2CA5BSR: $02CA5B 引数:1#$203F
02E1A6STA $02DP($02)=A
02E1A8PHAPush A
02E1A9LSRA>>1
02E1AALSRA>>1
02E1ABLSRA>>1
02E1ACSTA $04DP($04)=A
02E1AEPLAPull A
02E1AFSECc=on
02E1B0SBC $01,SA-=(Stack($01)+c)
02E1B2BMI #$01if(n==on) goto $02E1B5
02E1B4LSRA>>1ダメージ基礎値0.5倍
02E1B5STA $00DP($00)=A
02E1B7PLAPull A
02E1B8JSL $C2CAD9SR: $02CAD9 引数:1#$203C 引数:2#$00FF
02E1C0CMP #$0005A>=#$0005?
02E1C3BCS #$04if(c==on) goto $02E1C9
02E1C5JSR $8E0ESR: $028E0E
02E1C8RTSreturn
02E1C9JSR $8DEBSR: $028DEB
02E1CCJSR $8E4ASR: $028E4A
02E1CFRTSreturn

  • SR: $028F4B 複数攻撃武器ダメージ計算
028F4BJSR $E3F0SR: $02E3F0
028F4E-55NOP
028F56BCC #$1Dif(c==off) goto $028F75
  • SR: $02E3F0 戦闘行動が複数対象武器による低減対象か(該当c=on)
02E3F0LDA $23EEA=$23EE
02E3F3CMP #$00ACA==#$00AC?グループ攻撃か
02E3F6BEQ #$16if(z==on) goto $02E40E
02E3F8CMP #$00ADA==#$00AD?全体攻撃か
02E3FBBEQ #$11if(z==on) goto $02E40E
02E3FDCMP #$0121A==#$0121?げはげは笑いか
02E400BEQ #$0Cif(z==on) goto $02E40E
02E402CMP #$012FA==#$012F?なぎはらいか
02E405BEQ #$07if(z==on) goto $02E40E
02E407CMP #$0133A==#$0133?
02E40ABEQ #$02if(z==on) goto $02E40E
02E40CCLCc=off
02E40DRTSreturn
02E40ESECc=on
02E40FRTSreturn

やっていることはほとんどSR: $028DA9 直接攻撃後半と同じです。ダメージ基礎値を作成したときにネガティブフラグを見ないで1.25倍、0.5倍してしまうと(おそらく倍化処理中にネガティブフラグがoffになるためか)ダメージが5桁に到達しておかしなことになってしまいます。ネガティブフラグがonになるということは攻撃対象者の守備力が攻撃主体者の攻撃力を大幅に上回っていることになるので、倍化をスキップしても問題はないと思われます。今回はグラコス専用の「げはげは笑いながらなぎはらい」と通常の「なぎはらい」をモンスター側の打撃系グループ攻撃としました。ただ、「げはげは笑い」はグラコス先生に敬意を払ってダメージ計算は通常攻撃のものを使用しています(つまり通常の「なぎはらい」よりも強い)。

というわけで、通常攻撃のパターンが2パターン増えました。実際には「強攻撃」には表示メッセージ(「○○は××をいきなり わしづかみにした!」)のバリエーションを増やしているので、効果は同じでもう何種類かの戦闘行動を定義しています。これを通常攻撃しかパターンがないモンスターに割り当てました。

コメント

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