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

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

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

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

  • SR: $041C00 ジゴスパークエフェクト
041C00JSR $B7A7SR: $04B7A7
041C03JSR $86BASR: $0486BA
041C06LDA #$0080A=#$0080
041C09STA $7FBE$7FBE=A
041C0CLDA #$0012A=#$0012
041C0FSTA $7FD2$7FD2=A
041C12LDA #$00FFA=#$00FF
041C15JSL $C4C1E6SR: $04C1E6
041C19LDA #$2108A=#$2108
041C1CLDY #$0100Y=#$0100
041C1FJSL $C02ABASR: $002ABA 引数:1#$C4B3B6エフェクト準備?
041C26JSL $C02ABASR: $002ABA 引数:1#$C41D00エフェクト準備?
041C2DJSL $C02ABASR: $002ABA 引数:1#$C41D4Aエフェクト準備?
041C34JSR $AFA7SR: $04AFA7エフェクト実行
041C37LDA #$0000A=#$0000
041C3AJSL $C04604SR: $004604 引数:1#$F66423 引数:2#$01パレットアニメーション開始?
041C42JSL $C1E32ESR: $01E32E 引数:1#$00EE再生BGM指定?
041C48LDA #$0008A=#$0008
041C4BJSL $C02ABASR: $002ABA 引数:1#$C41D68エフェクト準備?
041C52LDY #$0040Y=#$0040
041C55JSL $C02ABASR: $002ABA 引数:1#$C4B3B6エフェクト準備?
041C5CJSR $AFA7SR: $04AFA7
041C5FJSL $C02ABASR: $002ABA 引数:1#$C41D90エフェクト準備?
041C66JSR $AFA7SR: $04AFA7
041C69LDA #$00C0A=#$00C0
041C6CSTA $7FBE$7FBE=A
041C6FSTA $002125$002125=A
041C73LDA #$00FFA=#$00FF
041C76JSL $C4C1E6SR: $04C1E6
041C7ALDA #$0004A=#$0004
041C7DJSL $C02ABASR: $002ABA 引数:1#$C41D68エフェクト準備?
041C84JSR $AFA7SR: $04AFA7エフェクト実行
041C87JSR $AFACSR: $04AFAC
041C8AJSL $C04835SR: $004835 引数:1#$F66423パレットアニメーション終了
041C91BCC #$F4if(c==off) goto $041C87
041C93LDA $7FD8A=$7FD8
041C96JSR $841ASR: $04841A
041C99LDA #$0043A=#$0043
041C9CSTA $7FD2$7FD2=A
041C9FJSL $C4C10DSR: $04C10D
041CA3JSR $86CBSR: $0486CB
041CA6JSR $B7A7SR: $04B7A7
041CA9RTSreturn

  • SR: $041D00 ジゴスパーク光の柱描画?
041D00LDA #$0000A=#$0000
041D03JSL $C04604SR: $004604 引数:1#$F663BD 引数:2#$01特殊効果
041D0BLDA #$0080A=#$0080
041D0ESTA $492C$492C=A
041D11LDA #$0030A=#$0030
041D14STA $4936$4936=A
041D17LDA #$0000A=#$0000
041D1ASTA $4934$4934=A
041D1DLDA #$0000A=#$0000
041D20STA $4930$4930=A
041D23LDA #$008CA=#$008C
041D26STA $4932$4932=A
041D29LDA #$0000A=#$0000
041D2CLDY #$0010Y=#$0010
041D2FLDX $48C4X=$48C4
041D32JSL $C4CDE1SR: $04CDE1エフェクト実行?
041D36JSL $C02B9CSR: $002B9Cエフェクト実行?
041D3AJSL $C02B9CSR: $002B9Cエフェクト実行?
041D3ELDA $4936A=$4936
041D41DECA–
041D42BMI #$05if(n==on) goto $041D49
041D44STA $4936$4936=A
041D47BRA #$E0goto $041D29
041D49RTLreturn

  • SR: $041D4A ジゴスパーク玉?描画
041D4ALDA #$03C3A=#$03C3
041D4DSTA $4245$4245=A
041D50LDX #$0080X=#$0080
041D53LDY #$0090Y=#$0090
041D56LDA #$00E2A=#$00E2
041D59JSR $B476SR: $04B476スプライト描画
041D5CTAXX=A
041D5DLDA #$0000A=#$0000
041D60JSR $B4AASR: $04B4AA
041D63JSL $C4B0D6SR: $04B0D6
041D67RTLreturn

  • SR: $041D68 ジゴスパーク一部エフェクト描画
041D68PHAPush A
041D69LDA #$0050A=#$0050
041D6CSTA $492E$492E=A
041D6FLDA #$0080A=#$0080
041D72STA $492C$492C=A
041D75LDX #$0001X=#$0001
041D78TXYY=X
041D79LDA $48C4A=$48C4
041D7CJSL $C4CC83SR: $04CC83
041D80JSL $C02B9CSR: $002B9C
041D84TXAA=X
041D85CLCc=off
041D86ADC $01,SA+=(Stack($01)+c)
041D88TAXX=A
041D89CPX #$0100X>=#$0100?
041D8CBCC #$EAif(c==off) goto $041D78
041D8EPLAPull A
041D8FRTLreturn

  • SR: $041D90 ジゴスパーク一部エフェクト描画
041D90LDA #$03C4A=#$03C4
041D93STA $4F74$4F74=A
041D96LDX #$0000X=#$0000
041D99TXYY=X
041D9ALDA #$001EA=#$001E
041D9DJSR $B65BSR: $04B65B呪文使用時エフェクト描画用データセット
041DA0PHXPush X
041DA1LDA $4880,XA=$4880+X
041DA4JSL $C04604SR: $004604 引数:1#$F6649C 引数:2#$01パレットアニメーション開始?
041DACJSL $C4B212SR: $04B212
041DB0LDA #$0001A=#$0001
041DB3TRB $7FC8A ^ $7FC8
041DB6PHXPush X
041DB7LDX #$0010X=#$0010
041DBAJSL $C4FAC8SR: $04FAC8
041DBEPLXPull X
041DBFLDA #$0001A=#$0001
041DC2TSB $7FC8A or $7FC8
041DC5LDA $01,SA=Stack($01)
041DC7TAXX=A
041DC8JSL $C4B212SR: $04B212
041DCCPLXPull X
041DCDJSR $B6DASR: $04B6DA
041DD0RTLreturn

  • SR: $04FAC8 エフェクト処理?
04FAC8PHPPush P Flag
04FAC9REP #$30m=off(A/M:16b) x=off(X/Y:16b)
04FACBPHAPush A
04FACCPHXPush X
04FACDPHYPush Y
04FACEJSL $C02B9CSR: $002B9Cエフェクト実行?
04FAD2DEXX–
04FAD3BNE #$F9if(z==off) goto $04FACE
04FAD5PLYPull Y
04FAD6PLXPull X
04FAD7PLAPull A
04FAD8PLPPull P Flag
04FAD9RTLreturn

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

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

うだうだとエントリを投下しましたが、結論として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なら止まることはないとは思いますが)。そうなるとおとなしくレコードサイズの拡張をするしかないですね。今のパッチをリリースしたらまじめにモンスター構造体のデータを見てみることにします。

コメントを書く

メールアドレスが公開されることはありません。コメントは管理者の承認後表示されます。