技の種類によって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ってのはプログラム処理上もとても都合良かったんですね(^^)

戻る