Super Turbo HUD


Updated it, you can toggle the special move data now.


i went to bed and woke up and i still can’t believe how awesome this is


Really great stuff, you guys are geniuses. Good job to Born2SPD for figuring out the “throw constant”, now Akiba’s data is a little easier to understand.

I’m really amazed that each character has a factor that can increase/decrease the opponent’s throw range. It just goes to show you that ST is a very complex, very well designed game.

If anybody can figure out these 2 questions I have, it would be appreciated:

  1. Are the throw ranges measured in pixels?

  2. Why are some meaty normals so hard to reversal throw than others?

I have an incredibly tough time reversal throwing Boxer’s meaty cr Forward and Dictator’s meaty cr Forward, even from point blank range. I don’t really have a problem reversal throwing any other normals after wakeup, but it seems to me like these 2 crouching normals may have a property where they reduce the opponent’s throw range or something. Similar to the “throw constant” mentioned above, possibly for a very short time during the hitting frames.


It may not be that their throw range is reduced or increase, but that some unknown “hitbox” for throws moves back when you do certain normals. How throws are determined is still somewhat of a mystery aside from knowing the range in numbers.

The numbers I have displaying on the screen are not in pixels, although I guess I could make the calculation to translate it to pixels. The numbers displayed are the actual values the game uses to determine where the character is on the stage, not pixels.


Basically you’re repeating what I said in different words. We may not know everything about how throws work in the game, but I wouldn’t call it a “mystery”. So much info has been fleshed out about how throws work in ST over the years, that I think we can say that we have a good grasp of throw knowledge.

It’s obvious that the “throw factor” does reduce/increase throw range depending on which character the opponent is facing. If the opponent’s character is Ryu/Ken/Akuma/Fei, then throw range is not affected. But if it’s anybody else, it’s increased or reduced, and if the opponent is Zangief, then it’s REALLY increased.

This is why Honda is harder to tick with SPD or Typhoon. I’ve noticed that Gief or Hawk players will do less ticks vs Honda compared to other characters. This is so they’re not pushed out too far in order to grab Honda. The reason for this is obviously Honda’s throw factor being a negative number, meaning he decreases the opposing character’s throw range by 1 unit (what their default throw range would be vs Ryu/Ken/Akuma/Fei since those 4 characters have a neutral factor).


Training mode cheat in the works, although it won’t work with the lua script, it needs to be added to the xml cheat file because I have to do writes to the actual ROM to make a jump after the hit stun decrement loop, the lua engine doesn’t have the ability to write to the decrypted CPU instructions memory addresses.

Already tested the jump and it works great, it should refill both players health bars after the hit stun timer decrements all the way, haven’t tested it with throws however, they work differently. Just need to hope that the memory address I’m jumping to doesn’t get written to by the game, so far I haven’t seen it change.


After some testing, it still has bugs, the stun meter is some how affected and can randomly stun so I have to disable stun.

Also, I’m not gonna bother today to find the throw damage subroutine and modify it, so throwing will damage the dummies. I may possibly look into this further to fix the stun, but as of right now, this was a bitch to make to begin with, tracing through literally thousands of cpu instructions and setting breakpoints to find out when the hit stun timer loop ended was time consuming.

Looping: [Z80 Assembler] Looping -
Not Looping: [Z80 Assembler] Not looping -

Wasn’t fun…well in a weird way it was seeing how the hit stun decremented before the dummy is pushed back…but still

For those interested in the actual workings:

Basically I wrote a memory hook that jumps out of the original code, into my own code and then returns back, so ya…basic memory hook:

Original game code:

04C97C: addq.b #2, ($2,A6)
04C980: rts // Return out of the hit stun timer counter

Modified with a memory hook:

04C97C: jmp $ffffd12.l //  This is our spiffy memory hook, jump the PC to the new memory location
FFFFD12: addq.b  #2, ($2,A6)  // Do the overwritten instruction
FFFFD16: move.b  #$90, $ff8479.l // Set P1's life to 144
FFFFD1E: move.b  #$90, $ff860b.l // Set P1's Life bar to 144
FFFFD26: move.b  #$90, $ff8879.l // Set P2's Life to 144
FFFFD2E: move.b  #$90, $ff8a0b.l // Set P2's Life bar to 144
FFFFD36: rts // Return out of the hit stun time counter and everythings back to normal




Training mode cheat:

Downloads - ssf2thud - Heads Up Display for Super Street Fighter II Turbo - Google Project Hosting

Only works with mame-rr/mame, not sure how to do ROM address hacks in FBA.


[*]Place the in the same directory as mame.exe

[*]You have two options to run mame with cheats, either run mame from the command line like this: mame.exe -cheat.

[*]The 2nd option is to open mame-rr.ini and edit the line under ‘Core Misc Options’ that says ‘cheat 0’ and change it to ‘cheat 1’. This is the better option because once you save this file you won’t ever have to edit it again and mame will always run with the cheat option enabled.

[*]Press tab during the game to bring up the mame menu, go to cheats and turn it on or off.

Stun does not work during the training mode cheat, unfortunately I haven’t fixed that yet. Throws also still do damage in training mode, but this shouldn’t be a problem, just hit the dummy again to refill it’s life. Throw hit stun is also messed up.


fcs-pasky, why are you so awesome? just tested it, works great! i actually dont like dizzy in training mode, perfect!

on a side node, the original mame has all those [easy dragon punch] [easy spd] cheats, do you think you can get some insight from those and see if we can trigger 2p dummy to do reversal dp, etc?

i see in your script you can actually write values to memory addresses (move p1 left 1 pixel)


See those values I’m monitoring in the HUD? All those “easy special” cheats do, is set them to the maximum value (e.g. flashkick to 0x06), so that when you press :u::k: the move instantly comes out without a charge. It doesn’t make them do the special instantly because it still requires the final input (:f::p: for fireball, :b::k: for hurricane kick etc…)

I told you, if you want a special, use input macro, set a hotkey with it and that will make them dp (after you’ve set it to dp)…

I’ll be writing my own input scroll display sometime next week.


Yeah I get your point, we can use luamacro to do special moves, but the problem to solve is when to do it.

How can we teach the dummy to do dp first thing after it got knock down?

I guess that’s a harder problem to solve. Maybe we can tackle that once we learn more about the source code / debugger.

Now the mame training mode is better than the consoles (do you guys actually find any good use of the auto-block?)


I’ll never go that far in to find the reversal flag and trigger a special on that frame…it’s too annoying to dig through, I have other projects I work on in my free time too (Doing Cadash right now).

You’re just gonna have to deal with using T.R.U.S.T and have it load a save state where the dummy is knocked down and will dp in a pre-determined amount of frames if you wanna practice safe jumps (which i assume that’s what you wanna do). That’s what that program seems designed to do anyways.

If I had the actual game source it’d be easy as hell, good luck getting that.

Auto block is good for seeing which part of a combo you missed. It’s not really necessary in ST.


haha you get bored easily =]

if you were to do the horizontal scrolling input display, please consider make the icons much smaller.
the current set they have is too big, i barely see all my inputs for 1 SPD.

another reason is that you might need to display 3+ buttons as the same time stacked together, so you’ll need smaller icons anyway.

damn the current vertical icons look so much like sf4 it’s disgusting :slight_smile:

its nice to see why i’m getting green hands instead of spd, i pressed the punch just right before i hit up

[PS. for those who don’t know how to create mame-rr.ini, type “mame -createconfig” in the command prompt]


Pasky, please add something to make ST to run in actually 60 fps, u know, no frame skipping, because speed 0 still skips some frames, when u finish the game, u can see how the CPU vs CPU at the ending credits run with no frame skipping, I suppose its like speed -1?


That’s the way the actual game played at the arcades. FBA is terrible at keeping track of CPU cycles and it’s timing is off (at least the version ggpo uses that is 2 years old), so sometimes you’ll get 59.6 frames per second, 59.8, 59.9, mame is far more accurate and pretty close to the real board, if you’re having frame skip issues it’s probably because you have a slow pc.


Something interesting I found.

Even if you do it frame by frame, even with pianoing inputs, you won’t always get a reversal. Lol, this fucken game and it’s randomness, been searching for the reversal flag.


I have tested that extensively in Kawaks and it never failed. Is it not some stuff MAME got wrong? As for reversals, I doubt there is a flag for it: it seems you simply can do some moves as soon as you recover and can not do others (grounded normals, basically).


When I said flag, I didn’t mean specifically, I meant the first possible frame a special can be executed after a knockdown. There has to be something that tells the game, “Ok, the special can be done now”. There’s also something that triggers the “Reversal attack” message.

As far as timing in mame, I wouldn’t trust Kawaks at all, Mame more accurately emulates the 68000 cpu. I’ll test more later, but I’m almost positive I was hitting the reversal frame perfect and it was not coming out. It could be that issue ST has with the different speed settings that in order to compensate for the speed settings sometimes a frame can be skipped over, this is partly why input windows for moves can vary as well.


I see. All I know is that you can do any moves in most times, and grounded normals come later, which is possibly the explanation why they do not work as reversals*. Not sure if this may help you.

To test reversals, I would usually input the command early, then emulate a 30 Hz turbo (“autofire”) by having the button pressed at a frame step and depressed the next one. It always worked, even with turbo speed (internal frame skipping) on, which is known to be always the case for ST/X. I expected that often the frame when you have to input commands would get skipped, but it did not happen. But, well, emulation is not a real board.

*sometimes they did, and then they would work for that whole round, only.


That’s a terrible way to test reversals for accuracy.

I use a frame counter and frame advance, which is 100% accurate.

You can turn mame-rr’s frame counter on with ‘.’ by default (it’s on by default when it starts).


Just noticed you updated your post with the details. That’s exactly those old school SNES game cheats are written!

Nice work. I wouldn’t worry about the stun, it’s actually annoying in the training mode (well maybe if you are specifically testing for stun combos).

So you didn’t answer my question, what’s the 2 numbers next to gief’s move while everyone else only has 1 number?

I thought you have that already, what about those [sonic boom] [ready/not ready] you have in the script?

Yeah that made sense. I think there should be a state where the game marks the 2p as “knockdown”, or something like that.