DQ3 K.MixにDQ6から移植したモンスターのうち、呪文エフェクトが必要なのは、グラコス(ヒャダルコ)、魔王の使い(呪文を使う方:ルカナン、スカラ、バギクロス)、ブースカ(メラゾーマ、イオナズン)、メタルキング(ベギラマ)、ダークドレアム(ギガデイン、メラゾーマ、バイキルト)ですが、今まではエフェクトが無いせいで違和感があったので(特にダークドレアム)、その違和感をなくしたいというのが目的です。エフェクトにも2種類あり、補助呪文等詠唱時にモンスター自体が明滅するエフェクト、攻撃呪文詠唱時に表示されるエフェクト(赤・青・黄の3色で小・中・大の全9バリエーション)の2つがあります。どちらもどういう理由かDQ3では実装されていません。DQ6では戦闘行動にこれらの情報を設定するフィールド(明滅するときの色など)があったりするのですが、今回移植するにあたっては対象がごく限定的であるため、モンスターID+戦闘行動決め打ちでプログラム中にハードコードして対応することにしました(DQ3のモンスターには実装しない)。
まずは比較的簡単な補助呪文エフェクトですが、DQ6では順番として
- モンスターがアニメーションする
- 呪文SEが発生する
- 明滅エフェクトが発生する
となっています。DQ3には明滅エフェクトを発生させるSRが存在しないようなので、行動SEを発生させた直後に明滅エフェクトを紛れ込ませることにします。
- SR: $027939 1キャラクター分の戦闘行動実行処理
| 略 |
|
|
|
| 02794B |
JSR $EB84 |
SR: $02EB84 |
行動開始時SE再生+DQ6インポートモンスター補助呪文エフェクト処理 |
| 略 |
|
|
|
- SR: $02EB84 行動開始時SE再生+DQ6インポートモンスター補助呪文エフェクト処理(新SR)
| 02EB84 |
JSR $7983 |
SR: $027983 |
戦闘行動開始時の効果音を鳴らす |
| 02EB87 |
JSL $CF4BF4 |
SR: $0F4BF4 |
DQ6インポートモンスター補助呪文エフェクト処理 |
| 02EB8B |
RTS |
return |
|
- SR: $0F4BF4 DQ6インポートモンスター補助呪文エフェクト処理(新SR)
| 0F4BF4 |
JSL $CF4B2A |
SR: $0F4B2A |
ダークドレアムバイキルト時エフェクト処理 |
| 0F4BF8 |
JSL $CF4BB6 |
SR: $0F4BB6 |
魔王の使いスカラルカナン時エフェクト処理 |
| 0F4BFC |
RTL |
return |
|
- SR: $0F4BB6 魔王の使いスカラルカナン時エフェクト処理(新SR)
| 0F4BB6 |
LDX $23E8 |
X=$23E8 |
|
| 0F4BB9 |
STX $2428 |
$2428=X |
|
| 0F4BBC |
JSL $C2CAD9 |
SR: $02CAD9 引数:1#$203C 引数:2#$00FF |
グループID取得 |
| 0F4BC4 |
CMP #$0005 |
A>=#$0005? |
|
| 0F4BC7 |
BCC #$01 |
if(c==off) goto $0F4BCA |
|
| 0F4BC9 |
RTL |
return |
|
| 0F4BCA |
JSL $C2CAD9 |
SR: $02CAD9 引数:1#$2049 引数:2#$FFFF |
|
| 0F4BD2 |
CMP #$00AD |
A==#$00AD? |
モンスターIDが魔王の使いか? |
| 0F4BD5 |
BNE #$12 |
if(z==off) goto $0F4BE9 |
|
| 0F4BD7 |
LDA $23EE |
A=$23EE |
|
| 0F4BDA |
CMP #$0038 |
A==#$0038? |
戦闘行動がスカラ(敵術者)か? |
| 0F4BDD |
BNE #$0B |
if(z==off) goto $0F4BEA |
|
| 0F4BDF |
LDA #$3DEF |
A=#$3DEF |
15ビットでRGBを指定 |
| 0F4BE2 |
LDX #$0000 |
X=#$0000 |
|
| 0F4BE5 |
JSL $C41BE2 |
SR: $041BE2 |
モンスター側補助系呪文エフェクト処理 |
| 0F4BE9 |
RTL |
return |
|
| 0F4BEA |
CMP #$0036 |
A==#$0036? |
戦闘行動がルカナンか? |
| 0F4BED |
BNE #$FA |
if(z==off) goto $0F4BE9 |
|
| 0F4BEF |
LDA #$1C66 |
A=#$1C66 |
15ビットでRGBを指定 |
| 0F4BF2 |
BRA #$EE |
goto $0F4BE2 |
|
- SR: $041BE2 モンスター側補助系呪文エフェクト処理(新SR)
| 041BE2 |
PEA #$0003 |
Push #$0003 |
明滅回数指定? |
| 041BE5 |
LDY #$0006 |
Y=#$0006 |
|
| 041BE8 |
JSL $C02ABA |
SR: $002ABA 引数:1#$CF4B5E |
|
| 041BEF |
JSR $AFA7 |
SR: $04AFA7 |
エフェクト実行? |
| 041BF2 |
JSR $AFAC |
SR: $04AFAC |
エフェクト実行? |
| 041BF5 |
DEY |
Y– |
|
| 041BF6 |
BNE #$FA |
if(z==off) goto $041BF2 |
|
| 041BF8 |
PLY |
Pull Y |
|
| 041BF9 |
DEY |
Y– |
|
| 041BFA |
BEQ #$03 |
if(z==on) goto $041BFF |
|
| 041BFC |
PHY |
Push Y |
|
| 041BFD |
BRA #$E6 |
goto $041BE5 |
|
| 041BFF |
RTL |
return |
|
- SR: $0F4B5E モンスターを明滅させる処理(新SR)
| 0F4B5E |
STA $4ED2 |
$4ED2=A |
|
| 0F4B61 |
STY $4ED6 |
$4ED6=Y |
|
| 0F4B64 |
LDA $4EFA,X |
A=$4EFA+X |
|
| 0F4B67 |
TAX |
X=A |
|
| 0F4B68 |
PHX |
Push X |
|
| 0F4B69 |
LDA #$000A |
A=#$000A |
|
| 0F4B6C |
STA $4247 |
$4247=A |
|
| 0F4B6F |
JSL $C79F9A |
SR: $079F9A |
|
| 0F4B73 |
LDA $45D2,X |
A=$45D2+X |
|
| 0F4B76 |
LDX $4ED2 |
X=$4ED2 |
|
| 0F4B79 |
JSL $C03644 |
SR: $003644 |
|
| 0F4B7D |
PHX |
Push X |
|
| 0F4B7E |
LDX $4ED6 |
X=$4ED6 |
|
| 0F4B81 |
JSL $C4FAC8 |
SR: $04FAC8 |
エフェクト処理? |
| 0F4B85 |
PLX |
Pull X |
|
| 0F4B86 |
PLX |
Pull X |
|
| 0F4B87 |
LDA #$0008 |
A=#$0008 |
|
| 0F4B8A |
STA $4247 |
$4247=A |
|
| 0F4B8D |
JSL $C79F9A |
SR: $079F9A |
|
| 0F4B91 |
RTL |
return |
|
これといって特別なことはしていません。行動主体のモンスターIDと戦闘行動を調べ、明滅色を15ビットのRGB(それぞれ5ビットずつ)で指定するだけです。明滅処理自体は例によってDQ3とDQ6の関連するアドレスなどを付きあわせてそれっぽいものにするだけです。このあたりは正直良くわからないので例によって見よう見まねで試行錯誤するしかないです。
コメント