DQ3 ぐんたいよび実装1

今回からはぐんたいよびの実装を行うことにします。オリジナル(DQ6)はレベルx2.2のランダム4回攻撃でレベルx50Gを消費するというものです。所持金が足りないとなにもしないで帰ってしまいます。また、ボスには通用しないようですが、耐性が存在するのかは不明です。(ダークドレアムには効かなかった)。ここでのポイントは

  1. ダメージ値の計算をどうするか(バランス的な意味で)
  2. 終わった後の後処理(ゴールドを引く/帰ってしまったとメッセージ表示)
  3. 「ランダムで4回攻撃」をどう実装するか

です。というわけで順番に作業していきます。 ぐんたいよびは戦闘行動の$0114に定義しました。とりあえずは「敵全体を対象」にしておきます。呪文説明文を設定し、さらに以下の戦闘メッセージを3つ追加します。

  1. [BC][B7]は たたかいの のろしを あげた![B1]
  2. どこからともなく なぞのぐんたいが[AD]あつまってきた![B1][BC]
  3. [BC]しかし おかねが たりない![AD]ぐんたいは かえっていった![B1]

ここで[B1]を入れないとメッセージが一瞬で消えてしまいます。おそらく[B1]はメッセージ表示を何フレームか表示しつづけるためのコントロール文字と思われます。DQ6では1番目のメッセージが表示された後、2番目が続けて表示されます。王者の剣を使ったときと同じ(「とどろく らいめいが…」というメッセージが追加で表示される)ですね。これは特定の戦闘行動に対しては追加メッセージを表示するようになっているためです。

  • SR: $027F10 特殊行動Msg表示
027F10LDX #$0058X=#$0058
027F13LDA $23EEA=$23EE
027F16CMP $C2372C,XA==$02372C+X?
027F1ABEQ #$05if(z==on) goto $027F21
027F1CDEXX–
027F1DDEXX–
027F1EBPL #$F6if(n==off) goto $027F16
027F20RTSreturn
027F21JSR $7F25SR: $($027F25+X)
027F24RTSreturn
  • SR: $02D46D ぐんたいよび追加メッセージ表示
02D46DJSL $C1A867SR: $01A867 引数:1#$0178
02D473RTSreturn

以前メガザルのところで戦闘後追加処理を拡張しましたが、同様に拡張します。戦闘行動IDの配列を$02372C($027F25から)に移動し、呼び出されるSRの配列を$027F25($027F4Eから)に移動し、SR内で参照しているアドレスを変更します。さらに戦闘行動IDの最後に$114、SR配列の最後にぐんたいよびの追加メッセージ表示のアドレス下位2バイト($D46D)をセットします。これでぐんたいよびを実行したときに追加のメッセージが表示されるようになります。次にダメージを計算する処理を実装します。

  • SR: $02D4D5 ぐんたいよび
02D4D5JSL $C90AF7SR: $090AF7
02D4D9STA $00DP($00)=A
02D4DBLDA $2428A=$2428
02D4DEPHAPush A
02D4DFLDA $23E4A=$23E4
02D4E2STA $2428$2428=A
02D4E5JSL $C2C240SR: $02C240 引数:1#$0A
02D4EAXBAExchange A(HighByte) and A(LowByte)
02D4EBSEP #$20m=on(A/M:8b)
02D4EDLDA $00A=DP($00)
02D4EFREP #$20m=off(A/M:16b)
02D4F1JSL $C01098SR: $001098
02D4F5STA $00DP($00)=A
02D4F7PHXPush X
02D4F8LDX #$0000X=#$0000
02D4FBLDA #$0064A=#$0064
02D4FEJSL $C0121CSR: $00121C
02D502LDA $00A=DP($00)
02D504STA $23FA$23FA=A
02D507PLXPull X
02D508PEA #$2011Push #$2011
02D50BPEA #$0020Push #$0020
02D50EPEA #$7E00Push #$7E00
02D511JSL $C9029ESR: $09029E
02D515BEQ #$08if(z==on) goto $02D51F
02D517LDA $23FAA=$23FA
02D51ANOP
02D51BLSRA>>1
02D51CSTA $23FA$23FA=A
02D51FPLAPull A
02D520STA $2428$2428=A
02D523LDX $2428X=$2428
02D526JSL $C2CAD9SR: $02CAD9 引数:1#$203C 引数:2#$00FF
02D52ECMP #$0005A>=#$0005?
02D531BCS #$16if(c==on) goto $02D549
02D533JSL $C2CA5BSR: $02CA5B 引数:1#$2049
02D539TAYY=A
02D53AJSL $C2CC92SR: $02CC92 引数:1#$0024 引数:2#$0001
02D542CMP #$0001A==#$0001?
02D545BNE #$03if(z==off) goto $02D54A
02D547STZ $23FA$23FA=#$00
02D54AJSL $C29200SR: $029200
02D54ERTLreturn

オリジナルのまま(レベルx2.2)のダメージだとDQ3では高すぎるので、レベルx0.50~0.80にしました。数値設定構造体($022EE0-)では最小値50、最大値80で設定し、この範囲のランダム値を取得した後レベルと掛け合わせ100で割っています。$02D508からはイベント戦闘時にダメージを1/4にしています。$02D526からは対象がメタル系のときの処理です。メタル系のときは無効にしています。この処理を入れないとはぐれメタルにも大ダメージを与えて倒せてしまいます。判定条件を「メタル系であるか」にしているのでメタルスライム、はぐれメタルのほかにメタルキメラにも通じません。この状態で実行すると敵全部に順番にダメージを与えるところまでできていることがわかります。

20090513005334.jpg

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