DQ3 呪文・特技エフェクトの移植可能性の調査7

リリース予定の1週間前になって今更という感じなんですが、ようやく全追加呪文(特技?)のエフェクトの実装が終わりました。現在テストプレイを自分を含め数名の方にやってもらっています。もうOKだと思っていてもやはり実際に通しでプレイしないとバグが残っていたり、バランスがおかしかったりと問題が見つかりますね。プチプチとバグをつぶしつつ最後の仕上げ中です。自分は現在船を取って少したったくらいなのですが、攻撃力が減っている(力が1/2なので)割には多少の死人は出るものの、カンダタ(2回目)も平均Lv12-3でさっくり倒せる程度の難易度でした(勇+戦+僧+魔のチキンプレイです)。直前のポルトガでタダで「まふうじの杖」が入手可能なのでマホトーンを覚えなくても済むのが大きいですね(なんかずるいのでポルトガ場内の扉の鍵を最後の鍵に変えました)。また、守備力が体力/2になっているので性格にもよりますが戦士が十分盾役になります。あと、プレイして気がついたのはモンスターの耐性が「炎系呪文」でまとめられているのは雑すぎる、ということです。船を取って以降しばらくはいかづちの杖一択になってしまうので、メラ系、イオ系が空気になります。しかも耐性がまとめられているのでいかづちの杖が効かなければ自動的にメラ、イオも効かないということになるので戦略の幅が広がらないですね。アニメID9(1バイト)って使われていないはずなので、ここを使えばレコードのサイズを増やさずにメラ、ギラ、イオの耐性情報を別々に設定できそうです(もし使われてるよ、というのであれば情報ください)。この辺の修正はもう来週までには間に合わない(無理にやってもバグが増える)ので、後日バージョン2(予定)に入れられたらいいなと思います。あとは、オーブ集めのストーリーを拡充できればストーリー全般に深みを持たせられるのではと思います。

さて、ビッグバンについては前回の実装のあと心が折れて放置していたんですが、先日試してみたところ、正しい配色で描画されていました(理由は不明)。一応OKそうです。

最後はおそらく一番厄介であろうジゴスパークのエフェクト実装です。実際複雑度合いは今までで一番でした。ちなみに、焼け付く息、甘い息、毒の息、しんくうは、ビッグバンは実装を$0418xx-で行っています。成長限界上昇関連の修正で$04FFxx-を調子に乗って使いすぎたため、バンク$04でしかコールできないSRを大量に使っているエフェクト関連のSRが呼べなくなる、とかなりあせったのですが、幸いにして跡地があったので事なきを得ました。これマジで空き容量が足りなかったらいろいろ移動したりしないといけなくなるので、それに伴うテストの手間が…と思うとぞっとします。

  • SR: $041C00 ジゴスパークエフェクト
041C00 JSR $B7A7 SR: $04B7A7
041C03 JSR $86BA SR: $0486BA
041C06 LDA #$0080 A=#$0080
041C09 STA $7FBE $7FBE=A
041C0C LDA #$0012 A=#$0012
041C0F STA $7FD2 $7FD2=A
041C12 LDA #$00FF A=#$00FF
041C15 JSL $C4C1E6 SR: $04C1E6
041C19 LDA #$2108 A=#$2108
041C1C LDY #$0100 Y=#$0100
041C1F JSL $C02ABA SR: $002ABA 引数:1#$C4B3B6 エフェクト準備?
041C26 JSL $C02ABA SR: $002ABA 引数:1#$C41D00 エフェクト準備?
041C2D JSL $C02ABA SR: $002ABA 引数:1#$C41D4A エフェクト準備?
041C34 JSR $AFA7 SR: $04AFA7 エフェクト実行
041C37 LDA #$0000 A=#$0000
041C3A JSL $C04604 SR: $004604 引数:1#$F66423 引数:2#$01 パレットアニメーション開始?
041C42 JSL $C1E32E SR: $01E32E 引数:1#$00EE 再生BGM指定?
041C48 LDA #$0008 A=#$0008
041C4B JSL $C02ABA SR: $002ABA 引数:1#$C41D68 エフェクト準備?
041C52 LDY #$0040 Y=#$0040
041C55 JSL $C02ABA SR: $002ABA 引数:1#$C4B3B6 エフェクト準備?
041C5C JSR $AFA7 SR: $04AFA7
041C5F JSL $C02ABA SR: $002ABA 引数:1#$C41D90 エフェクト準備?
041C66 JSR $AFA7 SR: $04AFA7
041C69 LDA #$00C0 A=#$00C0
041C6C STA $7FBE $7FBE=A
041C6F STA $002125 $002125=A
041C73 LDA #$00FF A=#$00FF
041C76 JSL $C4C1E6 SR: $04C1E6
041C7A LDA #$0004 A=#$0004
041C7D JSL $C02ABA SR: $002ABA 引数:1#$C41D68 エフェクト準備?
041C84 JSR $AFA7 SR: $04AFA7 エフェクト実行
041C87 JSR $AFAC SR: $04AFAC
041C8A JSL $C04835 SR: $004835 引数:1#$F66423 パレットアニメーション終了
041C91 BCC #$F4 if(c==off) goto $041C87
041C93 LDA $7FD8 A=$7FD8
041C96 JSR $841A SR: $04841A
041C99 LDA #$0043 A=#$0043
041C9C STA $7FD2 $7FD2=A
041C9F JSL $C4C10D SR: $04C10D
041CA3 JSR $86CB SR: $0486CB
041CA6 JSR $B7A7 SR: $04B7A7
041CA9 RTS return
  • SR: $041D00 ジゴスパーク光の柱描画?
041D00 LDA #$0000 A=#$0000
041D03 JSL $C04604 SR: $004604 引数:1#$F663BD 引数:2#$01 特殊効果
041D0B LDA #$0080 A=#$0080
041D0E STA $492C $492C=A
041D11 LDA #$0030 A=#$0030
041D14 STA $4936 $4936=A
041D17 LDA #$0000 A=#$0000
041D1A STA $4934 $4934=A
041D1D LDA #$0000 A=#$0000
041D20 STA $4930 $4930=A
041D23 LDA #$008C A=#$008C
041D26 STA $4932 $4932=A
041D29 LDA #$0000 A=#$0000
041D2C LDY #$0010 Y=#$0010
041D2F LDX $48C4 X=$48C4
041D32 JSL $C4CDE1 SR: $04CDE1 エフェクト実行?
041D36 JSL $C02B9C SR: $002B9C エフェクト実行?
041D3A JSL $C02B9C SR: $002B9C エフェクト実行?
041D3E LDA $4936 A=$4936
041D41 DEC A–
041D42 BMI #$05 if(n==on) goto $041D49
041D44 STA $4936 $4936=A
041D47 BRA #$E0 goto $041D29
041D49 RTL return
  • SR: $041D4A ジゴスパーク玉?描画
041D4A LDA #$03C3 A=#$03C3
041D4D STA $4245 $4245=A
041D50 LDX #$0080 X=#$0080
041D53 LDY #$0090 Y=#$0090
041D56 LDA #$00E2 A=#$00E2
041D59 JSR $B476 SR: $04B476 スプライト描画
041D5C TAX X=A
041D5D LDA #$0000 A=#$0000
041D60 JSR $B4AA SR: $04B4AA
041D63 JSL $C4B0D6 SR: $04B0D6
041D67 RTL return
  • SR: $041D68 ジゴスパーク一部エフェクト描画
041D68 PHA Push A
041D69 LDA #$0050 A=#$0050
041D6C STA $492E $492E=A
041D6F LDA #$0080 A=#$0080
041D72 STA $492C $492C=A
041D75 LDX #$0001 X=#$0001
041D78 TXY Y=X
041D79 LDA $48C4 A=$48C4
041D7C JSL $C4CC83 SR: $04CC83
041D80 JSL $C02B9C SR: $002B9C
041D84 TXA A=X
041D85 CLC c=off
041D86 ADC $01,S A+=(Stack($01)+c)
041D88 TAX X=A
041D89 CPX #$0100 X>=#$0100?
041D8C BCC #$EA if(c==off) goto $041D78
041D8E PLA Pull A
041D8F RTL return
  • SR: $041D90 ジゴスパーク一部エフェクト描画
041D90 LDA #$03C4 A=#$03C4
041D93 STA $4F74 $4F74=A
041D96 LDX #$0000 X=#$0000
041D99 TXY Y=X
041D9A LDA #$001E A=#$001E
041D9D JSR $B65B SR: $04B65B 呪文使用時エフェクト描画用データセット
041DA0 PHX Push X
041DA1 LDA $4880,X A=$4880+X
041DA4 JSL $C04604 SR: $004604 引数:1#$F6649C 引数:2#$01 パレットアニメーション開始?
041DAC JSL $C4B212 SR: $04B212
041DB0 LDA #$0001 A=#$0001
041DB3 TRB $7FC8 A ^ $7FC8
041DB6 PHX Push X
041DB7 LDX #$0010 X=#$0010
041DBA JSL $C4FAC8 SR: $04FAC8
041DBE PLX Pull X
041DBF LDA #$0001 A=#$0001
041DC2 TSB $7FC8 A or $7FC8
041DC5 LDA $01,S A=Stack($01)
041DC7 TAX X=A
041DC8 JSL $C4B212 SR: $04B212
041DCC PLX Pull X
041DCD JSR $B6DA SR: $04B6DA
041DD0 RTL return
  • SR: $04FAC8 エフェクト処理?
04FAC8 PHP Push P Flag
04FAC9 REP #$30 m=off(A/M:16b) x=off(X/Y:16b)
04FACB PHA Push A
04FACC PHX Push X
04FACD PHY Push Y
04FACE JSL $C02B9C SR: $002B9C エフェクト実行?
04FAD2 DEX X–
04FAD3 BNE #$F9 if(z==off) goto $04FACE
04FAD5 PLY Pull Y
04FAD6 PLX Pull X
04FAD7 PLA Pull A
04FAD8 PLP Pull P Flag
04FAD9 RTL return

多少色合いやら透明度はおかしいですが、まあそれっぽいものができたのでとりあえずこれで終わりにします。

しかし、この玉何を意図しているのかいまいちわからん…。

うだうだとエントリを投下しましたが、結論としてDQ3<->6のエフェクトの移植は可能ということでした。また、エフェクトの構成要素として

  1. BG1,2を使用したエフェクト(炎など)
  2. スプライトを使用したエフェクト(ジゴスパークの玉など)
  3. パレットの特殊効果(1フレームごと?に色を変える)

の3パターンがあることがわかりました。個々のエフェクトは上の3つを単独で、もしくは組み合わせて実現している、ということです。また、モンスターのアニメーションデータよりもプログラム操作に負う部分が大きく、DQ3,6間で同等の機能を持っているSRを探す、もしくは存在しなければ作る、という作業に一番時間を取られました。さらに、メモリマップが当然異なるので、同じ役目を果たしているアドレスをいろいろ見比べて推測する、という作業も結構きついです。何より、「何をやっているのかいまいちはっきりしない」というのが一番フラストするというか、「二度と触りたくない」感を増幅させます(エンジンがほとんど同じと思われてるDQ3と6でこの始末)。というわけで、一応エフェクトの移植は完成しましたが、DQ3SFCEditorでカバーできるのは上記3種類のデータの移植のサポートくらいです。「ボタン1発でSRも含めて移植完了」という状態にするのはまあ不可能です。他のエフェクトの移植(実装)は「やりたいやつがやってくれ」というのが正直なところです。

コメント

  1. 86 より:

    アニメID9(1バイト)は使われてますよ。
    メダパニにかかっている際、一部の行動は打撃攻撃に置換されますが、その打撃に置換された際のアニメーション番号を示しています。

    管理者より返信:

    ご指摘ありがとうございます。その認識はありませんでした。適当なIDをセットしておくとバグりますね(15なら止まることはないとは思いますが)。そうなるとおとなしくレコードサイズの拡張をするしかないですね。今のパッチをリリースしたらまじめにモンスター構造体のデータを見てみることにします。