技の種類によってPP値が違うのは、あたりまえと言えばあたりまえですが、ポイントアップを使った時とか、戦闘で技を出した時に、どういう計算をされているのか解析してみました。ほほぉ〜 と思える見事な計算方法ですが、どうしてこんなに面倒なことを・・・(^-^; と同時に思ってしまいました。
解析は黄色でやりましたので、アドレスも黄色のものです。他の色も、アドレスは
違うけど、処理は多分同じでしょう。
メモリー上のPP値(1番目のポケモンの1番目の技ならD148#詳しくはわかっているメモリーアドレスを見てね)から、画面上に表示されるPP値への変換は、ROM03:6882CHのあたりで計算されます。
【基本的なこと】
(1) 戦闘時には、メモリー上のPP値を元にして、[and 3F] (つまり下位6ビットだけ使う)する処理が入っています(残りPP値のチェックの所)。つまり戦闘時のPP値の最高値はどんな技でも63です。つまり改造してここをFFにしても255にはなりません(^-^; なお、PP値はあたりまえですが技が当たってもはずれても1回ごとに−1されます。
↑ということは… PP値改造してFFとか入れても、預けたりするとD8とかになってる場合があります。この場合、D8 and 3F = 18H = 24 になってしまうので、「あれ〜!?」って思ったことないですか?>改造好きな方
(2) 「ポケモン→つよさをみる」で技を見た場合、別の計算(ポケモンセンターに預けた時と同じ)が入って、その技に応じたそれなりの値が表示されます(下の方を見てね) ポケスタに移動したときも数字が同じなので、おそらくこの計算がされています。
(3) パソコンに預けた時は、そのままコピー(処理は入らない)しているだけなので、引き出しても改造PPなどはそのまま残ってます。
【ポケモンセンターに預けた場合】
ポケモンセンターに預けたり、つよさを見ようとすると(この場合は表示だけ)PP値は再計算されます。その計算式は:
新PP=a+(技の基礎PP値÷5)×ポイントアップ使用回数
a=(現在PP and C0) + 技の基本PP値 ←「極・技リスト」のPPの値(16進数です)を見てね
例1:「かぜおこし」にポイントアップ1回使った場合:
かぜおこしの基礎PP値は35(23H)です。これにポイントアップ1回なので。
例えばこれが1番目のポケモンの1番目の技だとすると、D148の値は、23→(ポイントアップ+40H)→63→6A となります。実際のPP値は、上の式から 新PP=35+35/5x1=42 ってわけですね(^^)
で、ポイントアップ使用時の処理でD148がFFを越えるようだと「もう使えない」となるような処理が入っているので3回はOKだけど4回目はNGなわけです。
【おまけ】
上の「ポイントアップ使用回数」のところが、とってもアセンブラな処理だったので、ちょっと紹介&説明します。具体的なのは次の5行です。
1 ld a,(hl) hlにPP値が入っている
2 swap a
3 and 0F
4 srl a
5 srl a
ポイントアップ1回使用で+40hされるので、例えば「きのこのほうし(0F)」にポイントアップ3回やると、0F+40+40+40=CF です。この数字を元にしましょう
1行目:ld a,(hl)で、aの値が読まれます(CF)
2行目:swap aで、aの上位下位ビットが入れ替わります。つまり CF→FC
3行目:FC(11111100) and 0F(00001111)なので要するに下位4ビットを取り出す a=0C
4行目:srl a は右に1ビットずらし、つまり÷2です 00001100→00000110
5行目:もう一度 srl a で、00000110→00000011 ほら「3」!
ということでポイントアップで+40Hってのはプログラム処理上もとても都合良かったんですね(^^)
戻る