Posts
KFX 逆汗道中記 (3)
面白いコードが見つかったので、メモも兼ねて書きとめておくことにする。
ガードゲージは MAX になると点滅しながら減少していくが、この際に使われる通常のゲージと点滅用ゲージのスプライトが上下に隣接しているのには理由があった。
以下のコードは画像を点滅させるために使われる計算式の一部。
00411673 81e101000080 and ecx,80000001 0041167b 49 dec ecx 0041167c 83c9fe or ecx,-02 0041167f 41 inc ecx
ecx に入る値は 8 ビットの範囲だったので、それより上位のビットを無視した状態で計算を行ってみる。
// ecx = 0 とした場合。 00000000 & 00000001 = 00000000 // and 00000000 - 00000001 = 11111111 // dec 11111111 | 11111110 = 11111111 // or 11111111 + 00000001 = 00000000 // inc ecx = 0
// ecx = 1 とした場合。 00000001 & 00000001 = 00000001 // and 00000001 - 00000001 = 00000000 // dec 00000000 | 11111110 = 11111110 // or 11111110 + 00000001 = 11111111 // inc ecx = -1
このコードは偶数が来ると 0 になり奇数がくると -1 を返すようになっている。
ecx に実際のゲージ値を入れた場合、ゲージは減少する度に 1 ずつ変化するので 0 と -1 を交互に繰り返すことになり、この値を画像切り出し時の基準 Y 座標に足せば、ゲージ量の変化に応じて表示する画像を上下交互に切り替えることができる。