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