Things you just don't understand about ST


Hey what’s up dude? If you are who i think you are, I played you a couple of times when HDR was first released. Good times. Do you still play?

Your theories interesting. It’s definitely a different explanation then I would expect to hear. I’d love to hear more about your theory though. Have you discovered any more moves with unique dizzy properties. Also, I don’t really understand what you said about “taking away half the stun points for an opponent standing up.” For instance, do you mean a move, when performed as a meaty, inflicts approximately half the stun points it would on a standing opponent? If so, that’s pretty cool, I never would have guessed it worked that way.

I’ve got a different theory about how the system works. I’m far from figuring it out though. Does anyone remember the guard bar from the capcom vs snk series? I think the Super Turbo dizzy system has similar, but different properties. I still can’t 100% explain how it works though.


Not really a theory man. Its pretty much 100% you can test it yourself. Again randomness is slightly a factor. But in general there is a rule to when you are going to dizzy and when you are not. I actually posted ryus dizzys rates not to long ago. Lemme copy and paste…

From highest to lowest

Jump normals dizzy

-neutral jump hk, then hp
-neutral jump mp
-diagonal jump mp/mk
-diagonal jump hp
-diagonal jump hk
-everything else.

Ground normals
-close stand hk
-duck mp/mk, close stand mp/mk stand hp/hk/mp/(mk I forget… it might be here),duck hk*
-close stand hp, duck hp
-everything else

So basically if you are going for dizzy its almost always better to do medium jump ins to a medium canceable attack to special. The chance of dizzying is quite a bit higher. A lot of characters actually follow similar patterns. Besides a few here and there sorta things… In general you can sorta think of it like diagonal jumping/close/far/and crouching mediums do more then there hard counter parts. And almost every character in the game can actually just dizzy with a neutral jump attack to a medium or 2.

When I ment knocking down I ment like… Its the same reason think of why ryus red fireball seems to do less stun then his blue fireball. If a character is knocked downed down you gotta take away like half of the stun of that move about. So lets say the move does 3 points of stun. Well if it dizzys its all good. BUT, if the move is going to knock down and not dizzy then once the dude stands back up you gotta take away that point and a half in your brain.

Also(this one im actaully not 100% on, as it could be the random factor coming into play here but…)moves tend to do less stun the more then are used in a row. Examples being say new ryus jump mp. If it hits twice, the following combo tends to have a less dizzying chance as if it only hit once. Same way if you were to say do nothing but one attack over and over trying to dizzy. But if you throw in another attack along the way. Much higher chance of dizzying. I assume this is why in ST unlike real old SF it is much harder to dizzy with rapid fire shorts etc. Beacuse in ST they added if you keep doing the same move over and over again less chance to dizzy thing. Where as if you were to do it in SF2 or some shit. Not that hard.

Anyway nah, I havn’t played much man. I started trying to sign on to play ST randomly towards the end of this(errr last)year. But carpal tunnel, bones growing out of hands all the usual health problems… And well my controller broke to the point of being unplayable ive basically stopped. ha… I do plan on buying a new controler sometime this year though… just hard to force myself to, when I don’t really play so its… not very economical? to say? lol

Maybe if im ever out that way though again and your with nick or something we can play though. Will see.


O.K., everything you just wrote makes perfect sense. Good luck with medical stuff too. We’ll see about playing as well. If not, it’s all good too.

So back to business. I agree with most of your theory but not about everything. Hopefully my post will make sense here. Check this video out.

and go to 2:37. Obviously a completely different game, but hopefully my post will make sense here. Notice how the opponents gaurd bar is flashing, but as the person is getting hit by the custom combo, his guard bar is not going back to full, like it would as if he were not being hit or hitting his opponent. On the other hand, the attackers “gaurd bar” is filling up to normal.

OK, so in ST. I personally think that when you knock your opponent down, the “dizzy” bar remains at the same level throughout the fall and get up. Slightly different than the cvs2 example. My little “theory” doesn’t explain how dizzies start at the beginning of the match though. You know what i’m saying? that’s what i don’t get


Wouldn’t an accurate way to determine attack dizziness be to debug memory before and after hits (I think MAME comes with a debugger nowadays)? After you find the address for handling dizziness and set a counter there, you could directly test how much dizziness each attack averages. I’d do some tests myself but I’ve been busy lately.


theres a good amount of randomness to the dizzy system. one of the advantages of having really bad connect like mine is you see a lot of roll backs. so what happens when i hit someone, i see them dizzy, then it rolls back and when i hit them again with the same move, it doesn’t dizzy. but everything mentioned above about the med strength doing more dizzy does make since. I’m going to spend some time studying this. does anyone know if in training mode the dizzy system works the same? sometimes i feel like in training mode the dummy never gets dizzy or takes a ridiculous amount of hits to dizzy.


I did some messing around with MAME and I’m pretty sure address FF88AB is the dizzy counter for player 2 on World 940223. It gets incremented on every hit, counts down on every frame, and drops to zero on dizzy. It also will not increment when you hit someone that is dizzied or a short time after they recover, whether by mashing or being hit.

Doing some quick tests with Chun against Ken, close and far normals are 40 dizzy for light, 60 for medium, 80 for heavy. (I haven’t tested crouching yet.) Kikkoken is 90 for all strengths. This makes me think that the dizzy point is what is random, rather than what the moves themselves do.

Just tested a couple combos and I dizzied in one of them at 129, but another didn’t dizzy at 139, but then did at 151. Also, Chun’s diagonal jump fierce only does 60 dizzy, instead of 80 like the grounded ones.

LLs: 100 (I’ve gotten some crazy high dizzy numbers on this, like 211, finally dizzying with a 286)
cr. HK: 130
Jump attacks light: 40, medium: 50, heavy: 60
Neutral jump HK: 80

So, from the above, my guess of how the dizzy system works is that each move has a set amount it adds to the counter, but also a random range of values for the counter where it will dizzy. When you hit with a move, it increments the counter, then randomly decides what value will be enough to dizzy.


Interesting about the dizzies. Never knew!


Nice Job, Cauldrath!

What kind of software you used to search for the address? Some kind of cheat editor?
This approach is useful to research these mysterious ST riddles.

So how much dizzy does GMC gief’s neutral jump headbutt do?

It would be cool if we document all these dizzy value and put them into a comprehensive table, but that can be a lot of work.

Or if we can reverse engineer where the table is stored in the rom and just dump the table (like the move list hitbox table).

If we can dump the frame data table out it would be even more awesome.


I used MAME’s cheat search and just did comparisons until it left a single address. Although, I’m starting to think there is something else determining dizzies, because when I make a cheat locking that address to a certain value, it seems to act the same as if I hadn’t done that.


You need to set a breakpoint at the dizzy value address. Find out what reads from it and step through the assembly code, that way you can find the threshold or the flag (whichever it uses) that determines when the dizzy occurs that way. Just looking at the value really won’t do anything unless you find out what is reading the value and how it is interpreted.


Yeah, because I totally want to step through the undoubted mess that is the Street Fighter 2 codebase with the added bonus of having to disassemble it from a ROM instead of having real code. I don’t even know where I could get an arcade ROM disassembler. There’s a HUGE difference between doing a few comparisons of RAM and stepping through disassembled code. Like, I’d-better-be-getting-paid-a-lot-for-this-and-get-a-few-weeks-to-do-it difference, even if someone else provided the disassembler.


Mess? If you just find out what reads the address there is no mess, why would you be disassembling a ROM? You need to debug it…That’s pretty funny that you think it’d be weeks though, it took me 30 minutes to find it.

PRO TIP…“mame.exe -debug” ;).


Interesting stuff guys. Thanks to everyone that’s responded.


Can you list your findings?


I feel like the Dreamcast training mode dizzies like real ST does after the round is past the 10 second mark, it does seem harder and I get less random dizzies than in real matches, but TODs are consistent.


Doesn’t the Yoga Book Hyper already list dizzy averages for every attack?


Nope, only damage averages.


OK, I was using MAME 0.117, which didn’t have that feature yet. The debug mode seems to be a fairly standard programming debug through disassembled code which is a little better than just pure disassembly. I’m not really familiar with MAME, though, and my old ST ROM isn’t working with the newer version of MAME, so I’m trying some other ones.

If you found it in 30 minutes, I’d be curious to know what you found. If it was just finding where that address was written to or read from, that is only step 1.


IIRC, the new version of M.A.M.E. has the ROM from SSF2X as the parent one. There is some stuff about it on the thread about hitboxes, which uses a version of MAME with recording tools (MAME-rr, if I ain’t mistaken).


Thanks, got it working. Throwing watchpoints on FF88AB, I found these two spots where it gets written to, with all reads in the same general area:

77EE2 subq.w #1, ($5c,A6)

7F134 add.w D1, ($5c,A6)

The first is where it gets decremented every frame, and the second is where the dizzy value gets added. There’s some really weird syntax where it loads D1 in the second, though. The value in A6 is FFFF884E, so this makes me think that there is a struct at that address for the state of player 2 and 5c is the offset to the dizzy value, so watching all the data in there could be useful. (Player 1 looks to be FFFF844E.) I’m a C++ programmer, so stepping through assembly isn’t really my thing and theres a lot of opcodes I don’t know following where the value gets added.

EDIT: Weird stuff. The above write was where jump in attacks get set. Grounded attacks are at 7F10C, as well as Chun’s neutral j. hk. (Perhaps the game thinks it’s a grounded normal, which would explain why it doesn’t hit overhead?) Specials and super are at 7F1BE. (Chun’s super and upkicks are 20, btw. The super tops off at a total of 64.) Chun’s cr. hk is at 7F14E and is a hard-coded 130, unlike the others which retrieve their numbers. Lightning Legs is also hard-coded at 7F17E with 100.

The specials are a bit easier to figure out what is going on, since it just adds 2 to the address in register A0 to pull out the dizzy number. Kikkoken, for example, is at 7EEBC, offset 2 to 7EEBE, which has a value of 90.

There’s another address that always get changed right before this one, register A5 - 0x5714. A5 seems to always be FF8000 when P1 hits P2, so the address written to is FF28EC.

The number that gets written there is a random number within a certain range for different attacks. It isn’t the damage, since the numbers don’t line up and jabs sometimes come up with a zero.

That number gets multiplied by 256 and gets added to FF88AC. It stays at that value until the value in FF88AA drops to zero, and then it drops to zero, too. It’s likely that this is the real dizzy value and the other number was a dizzy timer, so it seems like as long as you hit your opponent again before the dizzy timer drops to zero, it retains all the accumulated dizzy. It seems like dizzy happens at 7680, so 30 total dizzy from the smaller original number.

So, so if I were setting something up to look for this stuff, put watch points like this: (all 8-bit)
Dizzy: FF88AD
Dizzy Timer: FF88AB
Last Attack Dizzy: FF28ED