DQ3 格闘場の掛け金を遊び人がいる場合に4倍にする

ASL(A<<1)2回で4倍になるのが手軽だったのでとりあえず4倍にしてしまいました。思いっきり手抜きです。それと遊び人が先頭にいなくても条件に当てはまるようにしました。

  • SR: $03EE64 格闘場共通
03EE73JSR $F717SR: $03F717
03EE76BCS #$07if(c==on) goto $03EE7F
03EE78NOP

格闘場の処理は全てSR: $03EE64で行われます。これまたうまいこと空きがないので「通常の掛け金計算処理+Lv10以上の遊び人がいる場合に掛け金を4倍にしてメッセージ表示」をセットにして実装することにします。通常の場合は掛け金の計算だけして所定の変数($7E3376)にセットしてリターンし、通常のメッセージ表示(#$09BB)を行います。遊び人がいる場合は掛け金計算+メッセージ表示を行ってリターンし、c=onを返すことで通常のメッセージ表示処理をスキップし、賭けるモンスターのリストを表示する処理まで飛ばします。

  • SR: $03F717 Lv10以上の遊び人がパーティにいる場合は掛け金を4倍にしてメッセージ表示(該当c=on)(新SR)
03F717PHAPush A
03F718PHXPush X
03F719JSL $C4297CSR: $04297C 引数:1#$01 引数:2#$FE
03F71FDEXX–
03F720JSL $C46951SR: $046951 引数:1#$01 引数:2#$FE 引数:3#$FF
03F727CMP #$0005A==#$0005?
03F72ABNE #$0Cif(z==off) goto $03F738
03F72CJSL $C42FEBSR: $042FEB 引数:1#$01 引数:2#$FE 引数:3#$FF
03F733CMP #$000AA>=#$000A?
03F736BCS #$0Dif(c==on) goto $03F745
03F738DEXX–
03F739BPL #$E5if(n==off) goto $03F720
03F73BPLXPull X
03F73CPLAPull A
03F73DJSR $EF29SR: $03EF29
03F740STA $3376$3376=A
03F743CLCc=off
03F744RTSreturn
03F745PLXPull X
03F746PLAPull A
03F747ASLA<<1
03F748PHAPush A
03F749ASLA<<1
03F74AASLA<<1
03F74BADC $01,SA+=(Stack($01)+c)
03F74DASLA<<1
03F74EASLA<<1
03F74FSTZ $BE82$BE82=#$00
03F752STA $BE81$BE81=A
03F755PLXPull X
03F756JSL $C1A92ESR: $01A92E 引数:1#$0FD5
03F75CSTA $3376$3376=A
03F75FSECc=on
03F760RTSreturn

処理自体はそれほど複雑ではありません。SR: $04297C…でパーティ人数をXレジスタにセットし0になるまでループします。SR: $046951…で職業IDをAレジスタにセットし、職業IDが遊び人(#$05)であれば、SR: $042FEB…でレベルを取得しLvが10以上かチェックします。条件に該当しなければ通常どおりSR: $03EF29でLv×10の掛け金計算を行い結果を$7E3376にセットしてc=offでリターンします。条件に該当する場合は、Lv×10をしたあと($03F747-4B)、さらに4倍し(03F74D-4E)し、新しく追加したメッセージ(#$0FD5)を表示してc=onにしてリターンします。これで変更は終わりです。

20090526215507.jpg

こういうRAMの役割がはっきり判明している部分の修正は比較的楽なんですけどね…。変更の範囲が低レベル(画像の操作とか)になるともうなにがなにやらさっぱりです。

コメント

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