Well I wouldn't expect too much. I'm casually learning this game and aiming for a scrubby clear.
I'm not sure if this info has been posted before, but I did a little poking around in the rom of Garegga today. I didn't really find what I was looking for yet, but I did find out a lot about how rank affects enemy life. I found this out from analyzing the function at 00BB9C which actually sets the life value for newly spawned objects.
- It seems only the high byte of the rank value is used for stuff. Example: Rank starts at like 0xE4E1C0. Calculations only concern themselves with the E4.
- This probably means that rank changes only have an effect after the values changes by 65,535 in either direction.
- Life is based on rank, and a multiplier. Each enemy has a life multiplier buried in some data tables.
- Enemies have a base life value of 0x300, or 768. After division, it's basically enemy base life = 3
- Enemy life on spawn formula in hexadecimal: ( ( 0x300 - ( RANK HIGH BYTE * 2 ) ) * enemy's life multiplier) / 0x100 = enemy life value
- Enemy life on spawn formula in decimal: ( ( 768 - ( RANK HIGH BYTE * 2 ) ) * enemy's life multiplier) / 256 = enemy life value
So what I learned is that "rank" counts down instead of up because it's a measure of restraint. It subtracts from enemy's base strength, in this case the life. Rank = enemy restraint / pacification. Rather than track how aggressive the enemies are, they decided to track how passive they are.
More importantly here's the function which sets enemy life
That's the whole function and really all there is to how enemy life is assigned. I haven't found them but other functions which use rank probably do similar calculations, namely subtracting the high byte of the rank value.
Example, the 10 jeeps at the start of stage 1
Base enemy life = 0x300
Rank in stage 1 = 0xE4 ( doubled it becomes 0x1C8 )
Life multiplier for the jeep = 0x2
( ( 0x300 - ( 0x1C8 ) ) * 0x2 ) / 0x100 = 0x2
The jeeps have 2 health.
It would take a huge shift in the rank value to change the health value of a jeep due to the small multiplier.
Example, The small round central turret of the stage 3 boss
Base enemy life = 0x300
Let's say rank at stage 3 boss = 0xC6
Life multiplier for the turret = 0x14
( ( 0x300 - ( 0x18C ) ) * 0x14 ) / 0x100 = 0x1D (29)
The turret has 29 health.
At stage 1 rank it would have 24 health. This multiplier is still pretty low.
Welp, back to practicing rather than somewhat pointless reverse engineering.Oh yeah, I actually have a question.
Anyone know exactly how I should do the flamingoes in stage 2 with Grasshopper? I'm really lucky to make it out of there with over 1m points. There's a lot of good videos for most of the ships but I didn't see one for Grasshopper. Same for Stage 2 boss actually. How should I maximize score when taking out madball? Grasshopper's bomb seems very unsuited to the task.
Edit: Fixed an error pointed out by Trap