DQ6 モンスター側エフェクトを実装する1(補助呪文系)

DQ3 K.MixにDQ6から移植したモンスターのうち、呪文エフェクトが必要なのは、グラコス(ヒャダルコ)、魔王の使い(呪文を使う方:ルカナン、スカラ、バギクロス)、ブースカ(メラゾーマ、イオナズン)、メタルキング(ベギラマ)*1、ダークドレアム(ギガデイン、メラゾーマ、バイキルト)ですが、今まではエフェクトが無いせいで違和感があったので(特にダークドレアム)、その違和感をなくしたいというのが目的です。エフェクトにも2種類あり、補助呪文等詠唱時にモンスター自体が明滅するエフェクト、攻撃呪文詠唱時に表示されるエフェクト(赤・青・黄の3色で小・中・大の全9バリエーション)の2つがあります。どちらもどういう理由かDQ3では実装されていません。DQ6では戦闘行動にこれらの情報を設定するフィールド(明滅するときの色など)があったりするのですが、今回移植するにあたっては対象がごく限定的であるため、モンスターID+戦闘行動決め打ちでプログラム中にハードコードして対応することにしました(DQ3のモンスターには実装しない)。

まずは比較的簡単な補助呪文エフェクトですが、DQ6では順番として

  1. モンスターがアニメーションする
  2. 呪文SEが発生する
  3. 明滅エフェクトが発生する

となっています。DQ3には明滅エフェクトを発生させるSRが存在しないようなので、行動SEを発生させた直後に明滅エフェクトを紛れ込ませることにします。

  • SR: $027939 1キャラクター分の戦闘行動実行処理
02794BJSR $EB84SR: $02EB84行動開始時SE再生+DQ6インポートモンスター補助呪文エフェクト処理

  • SR: $02EB84 行動開始時SE再生+DQ6インポートモンスター補助呪文エフェクト処理(新SR)
02EB84JSR $7983SR: $027983戦闘行動開始時の効果音を鳴らす
02EB87JSL $CF4BF4SR: $0F4BF4DQ6インポートモンスター補助呪文エフェクト処理
02EB8BRTSreturn

  • SR: $0F4BF4 DQ6インポートモンスター補助呪文エフェクト処理(新SR)
0F4BF4JSL $CF4B2ASR: $0F4B2Aダークドレアムバイキルト時エフェクト処理
0F4BF8JSL $CF4BB6SR: $0F4BB6魔王の使いスカラルカナン時エフェクト処理
0F4BFCRTLreturn

  • SR: $0F4BB6 魔王の使いスカラルカナン時エフェクト処理(新SR)
0F4BB6LDX $23E8X=$23E8
0F4BB9STX $2428$2428=X
0F4BBCJSL $C2CAD9SR: $02CAD9 引数:1#$203C 引数:2#$00FFグループID取得
0F4BC4CMP #$0005A>=#$0005?
0F4BC7BCC #$01if(c==off) goto $0F4BCA
0F4BC9RTLreturn
0F4BCAJSL $C2CAD9SR: $02CAD9 引数:1#$2049 引数:2#$FFFF
0F4BD2CMP #$00ADA==#$00AD?モンスターIDが魔王の使いか?
0F4BD5BNE #$12if(z==off) goto $0F4BE9
0F4BD7LDA $23EEA=$23EE
0F4BDACMP #$0038A==#$0038?戦闘行動がスカラ(敵術者)か?
0F4BDDBNE #$0Bif(z==off) goto $0F4BEA
0F4BDFLDA #$3DEFA=#$3DEF15ビットでRGBを指定
0F4BE2LDX #$0000X=#$0000
0F4BE5JSL $C41BE2SR: $041BE2モンスター側補助系呪文エフェクト処理
0F4BE9RTLreturn
0F4BEACMP #$0036A==#$0036?戦闘行動がルカナンか?
0F4BEDBNE #$FAif(z==off) goto $0F4BE9
0F4BEFLDA #$1C66A=#$1C6615ビットでRGBを指定
0F4BF2BRA #$EEgoto $0F4BE2

  • SR: $041BE2 モンスター側補助系呪文エフェクト処理(新SR)
041BE2PEA #$0003Push #$0003明滅回数指定?
041BE5LDY #$0006Y=#$0006
041BE8JSL $C02ABASR: $002ABA 引数:1#$CF4B5E
041BEFJSR $AFA7SR: $04AFA7エフェクト実行?
041BF2JSR $AFACSR: $04AFACエフェクト実行?
041BF5DEYY–
041BF6BNE #$FAif(z==off) goto $041BF2
041BF8PLYPull Y
041BF9DEYY–
041BFABEQ #$03if(z==on) goto $041BFF
041BFCPHYPush Y
041BFDBRA #$E6goto $041BE5
041BFFRTLreturn

  • SR: $0F4B5E モンスターを明滅させる処理(新SR)
0F4B5ESTA $4ED2$4ED2=A
0F4B61STY $4ED6$4ED6=Y
0F4B64LDA $4EFA,XA=$4EFA+X
0F4B67TAXX=A
0F4B68PHXPush X
0F4B69LDA #$000AA=#$000A
0F4B6CSTA $4247$4247=A
0F4B6FJSL $C79F9ASR: $079F9A
0F4B73LDA $45D2,XA=$45D2+X
0F4B76LDX $4ED2X=$4ED2
0F4B79JSL $C03644SR: $003644
0F4B7DPHXPush X
0F4B7ELDX $4ED6X=$4ED6
0F4B81JSL $C4FAC8SR: $04FAC8エフェクト処理?
0F4B85PLXPull X
0F4B86PLXPull X
0F4B87LDA #$0008A=#$0008
0F4B8ASTA $4247$4247=A
0F4B8DJSL $C79F9ASR: $079F9A
0F4B91RTLreturn

これといって特別なことはしていません。行動主体のモンスターIDと戦闘行動を調べ、明滅色を15ビットのRGB(それぞれ5ビットずつ)で指定するだけです。明滅処理自体は例によってDQ3とDQ6の関連するアドレスなどを付きあわせてそれっぽいものにするだけです。このあたりは正直良くわからないので例によって見よう見まねで試行錯誤するしかないです。

*1:2012-06-07しれっと追加 ver1.2.1には漏れています

コメント

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