DQ3 すごろく!マークのステータス変動値を1~3に抑える

最近実装に関しての質問が何件か連続して来たので最初は個別に回答していたのですが、メールで回答してしまうと他の人には知られないまま終わってしまうのでもったいないと思い、エントリという形で回答することにしました。もちろん中の人ではないので全てに答えられるわけではありませんが、知ってる範囲のものについては返事をしていくつもりです。私の回答が一番ベストな答えとは限りませんので、ツッコミをするなり、よりベターな解決法を各自探すなりそのへんはご自由に。また、一応断っておきますが、私の基本スタンスは「やりたいことはやりたいやつがやる」なので、「〇〇を実装してください!」というような要望には応えませんのでその点はご了承ください。

さて前置きが長くなりましたが、第1回目のお便りコーナーは

DQ3ですごろくの!マークでのステータス変動値が大きすぎるので1~3に抑えたいがどうしたらいいか

です。正直種集めをするより、第1すごろく場でステートセーブを使いながら!マークでインチキする方がはるかに早いですから、ここを何とかしたいというのはわかります。方針としては、数値決定している部分の出目を1/2してしまうのが一番簡単かなと思います。1,2なら1変動、3,4なら2変動、5,6なら3変動とすれば、変更範囲もさほど大きくはないのではないかというのがその理由です。まずはオリジナルの実装を見てみます。

  • SR: $0587DA すごろく強さ変化処理(さいころ/数値・UpDown確定 Up c=on)
0587DA JSL $C5882D SR: $05882D
0587DE JSL $C56716 SR: $056716 すごろくの目決定処理(ランダム)
0587E2 JSL $C58825 SR: $058825
0587E6 LDA $C1E7 A=$C1E7 さいころ出目
0587E9 STA $BE81 $BE81=A メッセージ中変数部分(XポイントのXに相当)にセット
0587EC LDA $C1E7 A=$C1E7
0587EF STA $C1F5 $C1F5=A ステータス変動値にセット

SR: $056716をコールすると、$7EC1E7にサイコロの現在の出目がセットされます。その後メッセージ用の変数とステータス変動値用の変数に出目をセットしているので、これらの変数へのセット前に出目を加工してしまえばいいということになります。というわけで以下変更例。

  • SR: $0587DA すごろく強さ変化処理(さいころ/数値・UpDown確定 Up c=on)
0587E6 LDA $C1E7 A=$C1E7 さいころ出目
0587E9 JSR $FA71 SR: $05FA71 出目加工
0587EC LDA $C1E7 A=$C1E7
0587EF STA $C1F5 $C1F5=A
  • SR: $05FA71 出目加工(新SR)
05FA71 CLC c=off
05FA72 LSA A A>>1 出目を1ビット左にシフト
05FA73 BCC #01 if(c==off) goto $05FA76 c=on 元の数が奇数なら1足す
05FA75 INC A A++
05FA76 RTS return

というわけで証拠画像。