DQ3 メガザル実装2

前回の実装でメガザルを実行したときの効果の実装は終わりました。残りは術者を死亡させる処理ですが、これはとても簡単です。まず、SR: $028A96を見てください。

  • SR: $028A96 特殊戦闘行動追加処理
028A96 LDX #$0046 X=#$0024
028A99 LDA $23EE A=$23EE
028A9C CMP $C236E0,X A==$023AAB+X?
028AA0 BEQ #$05 if(z==on) goto $028AA7
028AA2 DEX X–
028AA3 DEX X–
028AA4 BPL #$F6 if(n==off) goto $028A9C
028AA6 RTS return
028AA7 JSR $8AAB SR: $($028AAB+X)
028AAA RTS return

このSRは通常の戦闘行動の実行が終わった後呼び出されます。$7E23EEはもはやおなじみ「現在実行中の戦闘行動ID」です。何をしているかというと、「現在の戦闘行動IDが$028AAB-$028AD0の戦闘行動IDの配列のどれかと一致している場合は$028AD1-$028AF6に並んでいるSRのアドレスリストの中から対応するSRのアドレスを呼び出す」ということをしています。現在の戦闘行動IDが$028AAB-の配列にない場合は何も処理をしません。この手のSRはDQ3にはよくある実装なので覚えて置いてください。さて、これをどう変更するかというと配列の要素数を増やして追加処理をする戦闘行動IDとSRの数をもっと増やしてやればいいわけです。とはいえ周囲に空き領域はないので戦闘行動IDの配列の場所を$0236E0($028AABから移動)に移動し、実行するSRの配列を$023AAB($028AD1から移動)に移動します。これで実質サイズは2倍になりました。空いている部分は#$00で埋めておきましょう。そして、戦闘行動IDの配列の最後にメガザル(#$0112)を追加し、実行するSRの配列の最後にメガンテと同じSRのアドレス8B6A($028B6A)を設定します。次にSR: $028A96を少し変更して変更完了です。

  • SR: $028A96 特殊戦闘行動追加処理
028A96 LDX #$0046 X=#$0046
028A99 LDA $23EE A=$23EE
028A9C CMP $C236E0,X A==$0236E0+X?
028AA0 BEQ #$05 if(z==on) goto $028AA7
028AA2 DEX X–
028AA3 DEX X–
028AA4 BPL #$F6 if(n==off) goto $028A9C
028AA6 RTS return
028AA7 JSR $8AAB SR: $($028AAB+X)
028AAA RTS return

ループする回数を1回増やし、2つの配列の移動に伴って調べる場所を変えています。というわけで、さっそくテストしてみます。

※使ってるPCが非力すぎて動画がうまくとれません。最終的にはあきらめるかもしれませんがしばし時間をください。

テスト画像1:呪文選択画面
20090504225031.jpg
テスト画像2:メガザル実行中
20090504225032.jpg

コメント

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