Some time ago I found out about throwboxes in Marvel, SFA3 and later KOF. I was disappointed to find they couldn't be shown in vsav or SFA2 with the current tools because the box dimensions never actually get written to memory in those games.
I assumed the same for the SF2 series since it's older, but it turns out the data is just sitting there at 0x64 after the character base. It was right there the whole time. So, I was able to update the SF2 Lua script to show them for this game.
Like SFA3 and KOF, the data doesn't get cleaned after it's used, so I am forced to make the script write zeroes there to keep from drawing old throws. This time, I took the trouble to ensure that throw attempts are correctly drawn on frame zero rather than frame one, when normal attacks start animating. This required some messing with the framebuffer code. I should probably go back and do this for the other scripts as well.
And like KOF, there's a box just for throw vulnerability, centered horizontally on the char's axis. With the current checks, it should disappear at unthrowable times, like during DP startup. I also made it different colors for ground and air throwable states (white and almost black) because there are some moves in SF2 where it's hard to tell. Remember to hit hotkey 5 to show throwable boxes.
Here are some random observations.
There's a byte at 0x143 from the char base that counts down from a random value after you recover from a reset or knockdown. You can't be thrown until it's zero. This applies to air throws as well, so you could immediately jump and be unthrowable for a bit.
There seems to be some bug with Zangief in the CPS1 games where normal throws don't get attempted unless you try at somewhat close range, meaning his actual range is smaller than it should be. The range is different for his different throws. This was preserved in HSF2.
Airthrows with punch give a high grab area while kicks are low:
Different characters have different altitude requirements to attempt an air throw. What's more, the minimum height depends on if the throw is coming out on the way up or down, though it's the same for punch/kick variants. Fei's downward requirement is so high that you practically can't throw after the peak of his jump. And some aerial moves like horizontal Blanka ball are low enough that they are unthrowable by anyone.
character | min height above ground level | relevant PC address | |
---|---|---|---|
upward | downward | ||
Guile | 32 | 48 | $0737F6 |
Ken | 56 | 48 | $0752E4 |
Chun-Li | 48 | 48 | $076E7A |
Zangief | 48 | 48 | $078986 |
Claw | 48 | 48 | $07FE0C |
Cammy | 48 | 48 | $081976 |
Fei Long | 64 | 80 | $084E62 |
Zangief's infamous ssf2u magic reversal:
An odd property of command throws: You can get multiple active frames on SPD, Typhoon and Oicho, but you have to earn them. After inputting the motion, any punch pressed or released during the move's leniency window can register an active frame, though it's not totally reliable. You can stay dangerous well into the SPD whiff animation or get a throw to overlap a normal attack. NKI claimed in "How to Reverse Tick Attempts" that SPD has 11 active frames. I thought, "Nah, can't be right" after messing around in macrolua with the minimal input. But now I can believe it.
Remember this?
lol @ the yellow screen, didn't know about the 11 frame spd, the wakeup immunity or the different air throws, good stuff
Posted by: error1 | 05/18/2011 at 04:31 PM
Very good stuff, thank you so much. I had a question, you used the word "random" in regards to wakeup/reset throw invulnerability, is the value literally random? Do you know how large the range is?
Posted by: xenozip | 05/18/2011 at 05:35 PM
Amazing, really great stuff!
Posted by: XSPR | 05/18/2011 at 11:32 PM
xenozip: You get one of 32 random values, which are these in the ssf2t rom:
0794B4: 0F0B 0D11 150F 190D 1B17 1315 0C19 0111
0794C4: 0D15 0E1D 170B 0F13 110C 1913 0E01 170E
So the lowest is 1 frame of immunity and the highest is 29 (1D). T.Akiba data says 13. He probably didn't know it was random or averaged some trials.
Character and reset vs. knockdown apparently makes no difference.
Posted by: dammit | 05/19/2011 at 12:32 AM
I am totally missing what the last image means
Posted by: CWheezy | 05/28/2011 at 11:31 PM
command throws can hit from behind
http://www.youtube.com/watch?v=U3s-eLeBAsA
Posted by: error1 | 05/29/2011 at 12:10 AM
Yep. Specifically it's a reference to NKI vol.9.
http://zachd.com/nki/NKI-Vol9.Evo2006.Special.txt
Posted by: dammit | 05/29/2011 at 02:13 PM
So what's the deal with Zangi's magic throw only working as a reversal? Is it possible for reversal moves to have different properties than their non-reversal counterparts, but this is only utilised for this one move? I also wonder how it managed to make it into the World version of ST, but on a different button...
Posted by: polarity | 06/21/2011 at 07:31 PM
Here's my hunch: The devs originally planned reversal moves to have different/better hitboxes, so they enabled separate data to be loaded for reversal/non-reversal versions. Later they changed their minds, but forgot to verify all the data was the same for both sets, so you have this situation where the box bounds are set way off screen.
Who knows, maybe reversal MK buttslam or whatever has subtly bigger attack boxes? This could also be related the inability to reversal with certain moves.
Posted by: dammit | 06/22/2011 at 01:29 AM
Hey man nice work. I have a question regarding the throwable boxes: how you detect if they're ground throwable (white) or air throwable (black)? Do you just check if the player is in air/prejump frames or is there an special flag for that?
Posted by: Born2SPD | 06/27/2011 at 11:53 AM
There is a special flag at 0x181 from the player's base that determines air/ground throwability.
Keep up the good work on the SRK wiki... I have a post coming up that may help you.
Posted by: dammit | 06/27/2011 at 06:42 PM
Thanks for the response, i asked that because i was wondering if two colors (white/black) was really needed, because im editing big number of images and i dont want to edit them again, its a lot of work... at the moment i'm focusing on updating the character pages that already got the hitboxes before, but now with throwable boxes, its boring because i didnt wanted to touch these hitboxes again... damn..
Anyway, i have something else to ask you, do you actually edit the source of mame rr? I'm capturing the images with fbarr because when you step frame/pause the game in mame the screens goes darker, and this affects screenshots. FBA does not behave like this, but fba is buggy, it has random frameskip so sometimes i have to check some stuff N times before capturing it, sometimes i have to close all applications to be sure that there will not be random frameskip (which i can't, fba is buggy...) So i wanted to know if there's a way to turn that thing off, and if there is not a way, then i would ask if you could cut that crappy code out of mame rr and do another release/sendme a cusotm build, i would really appreciate it since theres 1000 or so images left to get.
Posted by: Born2SPD | 06/28/2011 at 07:08 PM
Please ignore the last part of my comment, it looks like i didnt tested that back in time, i just checked now and it doesnt affect the screenshots if you take it using the emulators screenshot key, damn...
Posted by: Born2SPD | 06/28/2011 at 07:38 PM
If you don't want to deal with two colors (and I wouldn't) you could just edit the script to make both colors the same and add a note or another box to each attack that directly says if the move is air or ground throwable.
Another thing to note is size and position of the throwable box never changes relative to the "+" point. It's always the same for any character, whether ground or air. The only things that change are air/ground type, and vulnerable/invuln to throws. So you should ask yourself if it really belongs in every image.
While on the topic, I suggest you add hitbox images for non-attacking frames as well: idle stance, crouch, stand/crouch reeling, juggled, and knockdown.
It's not relevant to screenshots, but you can prevent the screen darkening by setting "pause_brightness" to 1.0 under "CORE SCREEN OPTIONS" in mame-rr.ini. Also, if you are going to use MAME, you can use the background removal codes, which makes editing quicker.
Right now no one is maintaining mame-rr and it has a lot of work that could be done...
Posted by: dammit | 06/28/2011 at 08:27 PM
First, thanx for the great work Dammit!
I've allways wanted to see the hitboxes for every SF. Now I can :)
But, in ST, I found that both Boxer's throw boxes are not being drawing by the script. (Tested in FBA-rr and Mame-rr). Haven't checked in other SF2 for this particular throw hitbox. Can you please check this?
Thanks again.
Posted by: DRG | 11/21/2011 at 10:39 PM
Yeah Boxer has the same oddity as CPS1 Gief where the attempt doesn't even get computed unless he's standing closer than throw range was intended to be.
You can see the box clearly by trying while the opponent is close and jumping out of the way, but this doesn't address the fact that the apparent size is misleading. To correct the script it'll require delving into the code to see how the limit is being imposed.
Posted by: dammit | 12/19/2011 at 01:03 AM