Thanks, been a while and didn’t feel like looking up the formula…lol.
That’s the multiplication that occurs after the game gets the value from the first table. It determines the base pointer (which dizzy table to use). Yes those are hex values. When you prefix a value with ‘0x’, it is assumed to be hexadecimal. Octal is usually q<value> (e.g. q90)
When you bit shift 1 to the left 6 times, you get 64.
00000001 = 01
Move the 1 to the left 6 times
01000000 = 64 (0x40)
Samething as 0x01 * 0x40 = 0x40 (64)
00000010 = 02
Move the 1 to the left 6 times
10000000 = 128 (0x80)
Samething as 0x02 * 0x40 = 0x80 (128)
00000011 = 03
Move the 1’s to the left 6 times
11000000 = 192 (0xC0)
Samething as 0x03 * 0x40 = 0xC0 (192)
So bit shifting to the left 6 times is the same thing as multiplying by 64 (0x40).
EDIT:
Just realized I did the math wrong in the example I gave, maybe this is why you were confused. I fixed it.
Since it’s possible to find the positions of P1 and P2’s hurtboxes and the range of their moves, how hard will it be to script a dummy that allows maintains it’s distance from you within a certain range? I’m thinking of writing a script for footsie practice. ie. A dummy that walks back and forward and tries to poke/counter-poke, and is susceptible to whiff-punishment.
No, I haven’t gotten around to how stun is added…randomized…or scaled. I will eventually. Not sure when. I still gotta go back and analyze damage scaling.
It sounds like another one of those stupid rumors though, as I’m sure the stun value gets calculated through that random number generator.
No, no different properties. Each can be shaken out of the same. It’s just one way for the developers to make it seems random I suppose. Everyone thought reapers was the hardest dizzy to shake out of, but in reality this was only half true, because reapers can actually be easier or just as easy as birds.
You get a new roll every frame or if the game rotates the bits at the random number generator in
the same frame (It does this for determining the dizzy type).
Every frame, the number at the random number generator gets rotated. So if you got dizzied on that frame it would be using that random number (assuming it didn’t rotate bits for some other calculation).
But the actual roll that is used is the hit that causes a dizzy. So you only get 1 roll.
I’m unsure about the more damage when health is lower, it may be coincidence, I think I tried this by getting my life low and seeing if the damage formula changes. I don’t think it did, but like I said I haven’t worked out the scaling portion completely yet.
No, when you are behind in rounds, not health. If you check the wiki, you will see two values for throws: the higher one applies in round 2, if you lose the first round - or if you draw the first one and lose the second one, then you do more damage in the third one. Well, what I have found out is that many other moves also do more damage if you are behind in rounds. You can use Pasky’s HUD or Dammit’s damage viewer to check that out. The second one is better for this task as, if you input the breakpoints, you can see a damage formula.
I just check this…it appears to be true but I haven’t figured out how.
Guile’s close st. hk normally only does 21-26 damage vs Ken. However if he loses a round, I was able to make him do 27 damage to ken, not only that but he was generally hitting on the high side of the range (24-26). I’ll have to reverse this further, this is turning into real spider web with the damage formula, and variants for scaled life and losing a round.
My guess is what’s happening if the player has lost a round, then the game probably adds some value to the initial offset that determines the bonus of damage from the base value (the bonus of -3 to + 4). Because everything else in the damage formula stays the same.
From what I got from Dammit’s damage viewer, the base damage - or what appears to be the base damage - is higher. Sometimes. For instance: a jab or short from Guile and shotos would yield something like
(4 + <RANDOM_TABLE>)*27/32
every time, but a Shoryuken would give
(38 + <RANDOM_TABLE>)*27/32
when even and
(42 + <RANDOM_TABLE>)*27/32
when losing. Maybe the exact numbers are off - I am at work atm - but it was higher, while the table at the end had the same address. This means some of the damage values I have obtained for the Wiki might be higher than they should, as it is assumed to be against shotos/Guile with no scaling or anything else, and I am certainly not obtaining values for both situations in the near future, not to mention it would probably look like shit in the tables.
Edit: those were for Fierce Shoryukens, first active part.
Found the instructions for determining damage when a round is lost. It’s actually another randomization that happens that adds to the offset of the base damage. I’ll post details when I get time.
ST has been boring me, so little off topic post. Been reversing one of my all time favorite games, Final Fantasy II (USA) for the super nintendo.
Finding the character coordinates was easy enough, it was just one byte for the X, one byte for the Y, but the enemy locations were a pain since they are part of the background and not actual sprites. Their X,Y coordinates are actually packed into one byte to make a grid offset by 0x08, and 0x0C.
Enemy location gets stored at 0x7E29A5-0x7E29AC. Maximum of 8 enemies. I couldn’t figure out for a while how the damn game calculated the X,Y until I used MESS to reverse the process:
028B99: LDA $29a5,X // Load enemy position into the accumulator (Register A)
028B9C: AND #$0f // AND the byte against 0x0F, this is how it grabs the top nibble of the byte for the Y coordinate
028B9E: ASLA //Logical shift left
028B9F: ASLA //Logical shift left
028BA0: ASLA //Logical shift left
028BA1: CLC // Clear the carry flag
028BA2: ADC $00 // Add + Carry flag 0x00 (for some reason this actually adds 0x0C...must be a 5A22 CPU deal)
028BA4: STA $6ce4,Y // Store the Y coordinate at 0x6CE4 + Y register
028BA7: LDA $29a5,X // Load the enemy position 1 again
028BAA: AND #$f0 // Get the lower nibble this time for the X coordinate
028BAC: LSRA // Shift right once
028BAD: CLC // Clear the carry
028BAE: ADC #$08 // Add 0x08
028BB0: STA $6ce3,Y // Store the X coordinate result in 6CE3 + Y
It was rather annoying, because MESS kinda sucks for debugging. Anyways just need a breather away from ST and yes I’m bored and yes I want to show you guys this. I plan to add things like what the enemies will drop, their current life remaining, what their next action will be, what they will drop, how long until they are going to do their action, how much damage they will do frame by frame, and possibly what elements and spells they are weak against. Same for the player characters. So ya. Taking a breather from ST (Actually getting rather bored of it lately).
I haven’t played that game, so it probably sucks. And how the fuck you make a TAS video for Super Turrican 1, that easy (but great) game? I would be ashamed. The one for the second version is cool. But I suck at that game, I believe I couldn’t even get past stage 1.