どく、どくどく、やどりぎのタネ・・・とか

こういった直接攻撃じゃなくて相手のHPを奪うわざで、どれだけ奪える(奪われる)かを決めている部分を解析してみました〜v(^-^) (解析は黄色なのでアドレスも黄色のものです)



★ どく、どくどく

    どくのダメージはROM 0F:44B5から始まるルーチンでやってます。処理はかなり簡単です。

      【1】最大HPの値を読み込む。

        最大HPの値は、戦闘中はコピーされて敵の場合は、CFCD,CFCEの2バイトがそれです。

      【2】最大HPの値を使って「どく」のダメージを計算

        計算方法はこういった感じです。

          「どくのダメージ」={まず最大HPの値(2バイト)を4で割って、この値の下バイトをさらに4で割る}

          何じゃそれ!?って悩んではいけません。ポケモンの場合、最大HPは999(=3E7)ですから、最初の「4で割る」でどんな場合でも1バイトで表せる値になってしまいます。ということで、2で割るを4回ですから、結局16で割る(ことになります。8ではありませんよ(笑)

          もっと具体的には、この計算は次の6行です。
          SRL	B	#Bのビットを右にシフト→2進数だとこれは「2で割る」ということ
          RR	C	#同じくCのビットを右に。この2つで「BC÷2」という意味。
          SRL	B
          RR	C	#もう1度やっているので、この4行で「BC÷4」なんです
          SRL	C
          SRL	C	#Cだけこの2行でもう1度4で割ります。
          
          ということで、00D0h÷4=0034h で下1バイト(34H= 0011 0100)を右に2回シフトすると、(0000 1101)=0Dh つまり「ダメージ=13」ってことになります(^-^)

          もっと簡単にしてしまえば、右シフト4回は、元の数字を16進数で表した場合、16進表記で、右シフト1回に相当します。なので、最大HPが03E7ならダメージは3Eh、0234なら23hですね。16進ってなに〜? って方は・・・16進数のおはなしを読みましょう。

    【3】「どくどくチェック」

      「どくどく」の状態だと(D046)=01になってまして、(D04E)が戦闘のターン数で、これを上で計算したBCにかけ算したものが「どくどく」の場合のダメージになります

    【4】現在HPから、上で計算したBCの値をひく

      これが「どくのダメージ」ですね。BC=0の場合は、BC=1にするようになってます

    「どくどく」のダメージは「ポケモンスタジアム」では明らかに小さいというか、ある所でそれ以上ならないようになってるみたいですね。

★ やどりぎのタネ

    な、なんと計算ルーチンは「どく」のダメージを計算する部分と共用であった!(驚)

    「やどりぎのタネ」チェックは、0F:4440hでやっていまして、(D045)のビット7が1ならば、このチェックにかかります(要するに80H以上:やどりぎのタネはわざが決まると、このアドレスのビット7を立てます)

    あとのHP計算は、「どく」と全く同じなので、最大HPの高い敵ほど多くもらえることになります。また相手を「どくどく」にすれば、がっぽりもらえるってことですね(^-^)

    それにしても・・・どうして共用なんだろ(謎)



戻る