リリース予定の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のエフェクトの移植は可能ということでした。また、エフェクトの構成要素として
- BG1,2を使用したエフェクト(炎など)
- スプライトを使用したエフェクト(ジゴスパークの玉など)
- パレットの特殊効果(1フレームごと?に色を変える)
の3パターンがあることがわかりました。個々のエフェクトは上の3つを単独で、もしくは組み合わせて実現している、ということです。また、モンスターのアニメーションデータよりもプログラム操作に負う部分が大きく、DQ3,6間で同等の機能を持っているSRを探す、もしくは存在しなければ作る、という作業に一番時間を取られました。さらに、メモリマップが当然異なるので、同じ役目を果たしているアドレスをいろいろ見比べて推測する、という作業も結構きついです。何より、「何をやっているのかいまいちはっきりしない」というのが一番フラストするというか、「二度と触りたくない」感を増幅させます(エンジンがほとんど同じと思われてるDQ3と6でこの始末)。というわけで、一応エフェクトの移植は完成しましたが、DQ3SFCEditorでカバーできるのは上記3種類のデータの移植のサポートくらいです。「ボタン1発でSRも含めて移植完了」という状態にするのはまあ不可能です。他のエフェクトの移植(実装)は「やりたいやつがやってくれ」というのが正直なところです。
コメント
アニメID9(1バイト)は使われてますよ。
メダパニにかかっている際、一部の行動は打撃攻撃に置換されますが、その打撃に置換された際のアニメーション番号を示しています。
ご指摘ありがとうございます。その認識はありませんでした。適当なIDをセットしておくとバグりますね(15なら止まることはないとは思いますが)。そうなるとおとなしくレコードサイズの拡張をするしかないですね。今のパッチをリリースしたらまじめにモンスター構造体のデータを見てみることにします。