Since BizHawk 2.9 came out with MAME support, I decided to take a look at how character health works with RAM watching.
As with most fighting games of this time, character health is technically the same for every character - they just take different amounts of damage per attack. Also, every hit can randomly do ~5% more or less damage (subject to rounding). For instance, Akuma's 6MK can deal either 9 or 10 damage to Ryu. This even applies to low damage moves, e.g. Ryu's 2LK can do 2-3 damage. This appears to be purely RNG. For reference, every character has 144 health.
To test out each character's durability, I hit them with the strongest single hit move I could think of (Juggernaut's HP Juggernaut Punch with his Power Up special active), and a few other moves. Based on that, and assuming the common baseline that Ryu takes 100% damage, I came up with this durability chart: (lower % = takes less damage per hit)
Juggernaut - 78%
Zangief - 89%
Rogue - 92%
Wolverine - 97%
Ryu, Ken, Charlie, Cyclops, Gambit, Sabretooth - 100%
M. Bison - 107%
Cammy, Chun-Li, Dhalsim, Storm, Magneto - 112%
Akuma - 119%
I guess the next important part is figuring out how damage scaling works in combos, so that optimal combo trees (with Akuma's 6MK/Tatsu loops) can be mapped out.
EDIT: Relevant RAM addresses:
- 0xFF5041 - Player 1 Char 1 health
- 0xFF5043 - Player 1 Char 2 health
- 0xFF5045 - Player 2 Char 1 health
- 0xFF5047 - Player 2 Char 2 health
EDIT 2: Some more research:
- 0xFF545A (2 bytes) is the address of the RNG, which decides whether moves will do a low or high roll for damage. Based on rough testing there's somewhere between 70-75% of a move's damage being a high roll, and 25-30% of being a low roll. I don't know exactly how it's determined. Freezing it to 0 or 1 seems to always high roll, and freezing it to 2 seems to always low roll.
- There's a damage scaling that applies based on the amount of health the opponent has left. Below 96 health (67%), hit damage is decreased to 95% (only seems to affect moves that do >15 damage), below 48 health (33%), hit damage is decreased to 80%, and below 16 health (11%), it is decreased to 60%.
Against Ryu (and similar durability characters), Akuma's 6MK does 9-10 damage. Akuma's LK Tatsu does 55-58 (20-21, 18-19, 17-18) damage. 6MK into Tatsu is a 2-frame link, however if done as a combo some damage scaling will apply and the combo will do a few points less damage. Therefore, it's often better to not true combo the moves.
Against the 112% damage group, 6MK does 10-11 damage, and LK Tatsu does 61-64 (22-23, 20-21, 19-20) damage.
EDIT 3: While going through Akuma's moves I noticed that his LP Shoryuken also does surprisingly high damage for a single hit (25 on Ryu), which could give it some viability as an alternative finishing option. 5HP xx LP Shoryuken is a good 37 damage two-hit combo. By comparison, HP Shoryuken only does 19 damage max.
EDIT 4: Vs Juggernaut you can combo 2HP into a 4-hit LP Tatsu in the corner (2HP is a launcher but Juggernaut's armor causes it to not launch if it is the first hit, while 2HP doesn't cause as much pushback as other HP/HK moves). This does up to 72 damage, which is very significant on Juggernaut.