DQ3 ぐんたいよび実装2

とりあえずダメージ部分の実装が終わったので次は所持金の確認と後処理での所持金減額です。レベル99での消費金額は50Gx99=4950Gです。というわけで、まず所持金の上1バイトを調べて1以上であれば65536Gは持ってるわけでOK。そうでなければ下位2バイトの値と消費金額を比較して足りない場合はどこかにフラグをセットする、ということになります。さらに、メガザルの時同様、最後に後処理を追加して必要な金額の支払いor金がないのメッセージ表示をする必要があります。

  • SR: $027D53 戦闘行動実行処理メイン
027D93JSR $D590SR: $02D590
027D96BCS #$22if(c==on) goto $027DBA

  • SR: $02D590 所持金を調べてぐんたいよびが可能かしらべる(可能c=off)(新SR)
02D590LDA $23EEA=$23EE
02D593CMP #$0114A==#$0114?
02D596BNE #$46if(z==off) goto $02D5DE
02D598LDA $3698A=$3698
02D59BAND #$00FFA&=#$00FF
02D59ECMP #$0001A>=#$0001?
02D5A1BCS #$3Bif(c==on) goto $02D5DE
02D5A3LDA $3696A=$3696
02D5A6PHAPush A
02D5A7LDA $2428A=$2428
02D5AAPHAPush A
02D5ABLDA $23E4A=$23E4
02D5AESTA $2428$2428=A
02D5B1JSL $C2C240SR: $02C240 引数:1#$0A
02D5B6XBAExchange A(HighByte) and A(LowByte)
02D5B7SEP #$20m=on(A/M:8b)
02D5B9LDA #$32A=#$32
02D5BBREP #$20m=off(A/M:16b)
02D5BDJSL $C01098SR: $001098
02D5C1STA $00DP($00)=A
02D5C3PLAPull A
02D5C4STA $2428$2428=A
02D5C7PLAPull A
02D5C8CMP $00A>=DP($00)?
02D5CABCS #$12if(c==on) goto $02D5DE
02D5CCLDA #$0001A=#$0001
02D5CFPEA #$23AEPush #$23AE
02D5D2PEA #$0004Push #$0004
02D5D5PEA #$7E00Push #$7E00
02D5D8JSL $C902E9SR: $0902E9
02D5DCSECc=on
02D5DDRTSreturn
02D5DECLCc=off
02D5DFRTSreturn

きせきのつるぎの実装でSR: $027D53に6バイトの余裕があるので割り込ませてしまいます。普段はあんまりやらないんですが。割り込ませた場合はSR内の全ての分岐命令、ジャンプ命令のアドレスを確認しておきましょう。さて、SR: $02D590の方ですが、まず戦闘行動IDをしらべてぐんたいよび(#$0114)でなければ即座にc=offをセットしてリターンします。次に$02D598-02D5A1では所持金(全3バイト)の上1バイトを調べて>=1であれば65536G以上もっているのでこれまたc=offをセットしてリターンします。そうでない場合は所持金が2バイト未満なので、現在の術者($7E23E4)のレベルをSR: $02C240 引数1:#$0Aで取得し、SR: $001098で50とかけあわせあらかじめ取得しておいた所持金の下2バイトと比較します。比較の結果、所持金のほうが低い場合は$7E23AEの3ビット目をONにしてc=onにしてリターンします。$7E23AEの3ビット目はメガンテ時に術者が志望するかの判断のために使用しますが、今回はぐんたいよび時に所持金が不足している場合に使用します。

  • SR: $02D5E0 ぐんたいよびの後処理(金支払いなど)(新SR)
02D5E0PEA #$23AEPush #$23AE
02D5E3PEA #$0004Push #$0004
02D5E6PEA #$7E00Push #$7E00
02D5E9JSL $C9029ESR: $09029E
02D5EDCMP #$0001A==#$0001?
02D5F0BNE #$07if(z==off) goto $02D5F9
02D5F2JSL $C1A867SR: $01A867 引数:1#$017B
02D5F8RTSreturn
02D5F9LDA $23E4A=$23E4
02D5FCSTA $2428$2428=A
02D5FFJSL $C2C240SR: $02C240 引数:1#$0A
02D604XBAExchange A(HighByte) and A(LowByte)
02D605SEP #$20m=on(A/M:8b)
02D607LDA #$32A=#$32
02D609REP #$20m=off(A/M:16b)
02D60BJSL $C01098SR: $001098
02D60FSTZ $00DP($00)=#$00
02D611STZ $01DP($01)=#$00
02D613STA $00DP($00)=A
02D615JSL $C45B66SR: $045B66 引数:1#$00
02D61ARTSreturn

次に後処理の実装を行います。前準備としてメガザルの実装で拡張したSR: $028A96 特殊戦闘行動追加処理で使用する配列にぐんたいよびの戦闘行動ID(#$0114)とSRアドレス下位2バイト($D5E0)を追加しておいてください。さて、先ほどSR: $02D590で所持金が足りない場合は$7E23AEの3ビット目が1になるように実装しました。なのでまずこのビットを調べます。ONの場合は先頭メッセージ「[BC]しかし おかねが たりない![AD]ぐんたいは かえっていった![B1]」を表示して終わり、そうでない場合はぐんたいよびのコストを先ほど同様計算して$00にセットし、所持金減額SR: $045B66を呼び出します。これでようやく2ステップ目が終わりました。

20090513231810.jpg

しかしこの人たち金がなくても何度も来るって律儀だなあ・・・

スポンサーリンク

コメント

  1. JST より:

    はじめまして、某スレから来ました。
    面白そうなパッチを作ってますね~
    DQ3は好きな作品なので是非プレイしてみたいです。
    某スレはたまに変な人が沸きますが気にせず頑張ってください^^

    管理者より返信:

    コメントありがとうございます。公開できるところまでこぎつけるように努力する次第です。生暖かく見守っていてくださいwww。

コメントを書く

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