Did some digging on claw’s “claw drop” feature, it was pretty fun gathering all this information because it wasn’t a simple meter. It’s actually semi-random if he will drop his claw or not.
First thing that happens is there is a counter that goes from (Player 1) 0 to 8 @ 0xff85B0 (player 2 side = 0xff89B0). This will increment by 0-2 (it’s random whether it is +1 or +2, throws do not always increment it) each time he is hit, if he blocks, or is thrown/grabbed. Once this counter reaches 8, a check is performed at 07AEB0:
7AEB0: btst D0, D1 (bit test bit # in D0, against register D1)
07AEB2: bne $7af38 (branch if not equal, tests the CPU Z flag)
If the bit test returns false, the CPU’s Z flag is set and the BNE is executed, dropping his claw. Otherwise, he doesn’t drop his claw and the counter remains 8 so another check is performed when he is hit.
The reason this is random is because the value inside of D0 is always random from previous bitshifts and ANDI instructions set to it before the check. The value inside of D1 will always be 0x5555DFDF by time the check is performed.
Randomization performed to D0 before the check is made:
002E96: move.w ($2d0,A5), D0 (the value at A5 + 2D0 is almost always different each time)
002E9A: andi.w #$202, D0 (AND d0 against 0x202)
002EA0: lsr.w #8, D0 (logical bit shift right)
D0 will always have a number from 0 to 16 (0-F), this is the bit that will be checked inside of D1.
0 = 1st Least significant bit
16 = 17th least significant bit
D1 will contain a datatype ‘long’ number that is always equal to 0x5555DFDF
**Example (No claw drop): ***
D0 = 00000006 D1 = 5555DFDF
Since D0 is 6, we check the 7th bit inside of D1, since 0 = bit 1, so 6 = bit 7.
D1 (5555DFDF) in binary is: 1010101010101011101111111011111
Starting from the least significant byte in big endian (right side), we need to move 7 places from the right. This puts us at ‘1’.
The check returns true, the CPU’s Z-flag is not set. Vega/Balrog will not drop his claw.*
Example (Claw drop):*
D0 = 0000000D
D1 = 5555DFDF
Check the 14th bit inside of D1.
D1 (555DFDF) in binary is: 1010101010101011101111111011111
Starting from the least significant byte in big endian (right side), we need to move 14 places from the right. This puts us at ‘0’.
The check returns false, the CPU’s Z flag is set. Vega/Balrog drops his claw.*
So, now for the layman’s explanation:
Every time claw is hit, claw blocks, or is thrown there is a counter that will increment by 0-2 (random, throws can sometimes do 0) until it reaches a maximum value of 8
Once the counter reaches 8, a check is performed every time claw is hit, blocks, or is thrown (this includes grabs such as the knee bash).
There is a 2/17 (11.76%) chance he will drop his claw every time he is hit, he blocks, or is thrown/grabbed.
When Vega/Balrog picks his claw backup, the counter is reset back to 0.
So there you have it, another mystery solved. Claw has a 11.76% chance to drop his claw once the the counter reaches 8.