EDIT: Images are gone because I used imageshack, see wayback archive. Too lazy to re-upload the images to imgur and put them here.
Certain characters can dash attack a guy after they throw him, by using a technique called direct running. These are Woody, Dennis, Freeze, Firen*, Rudolf (note that no non-heroes can do it). Herein, I explain how to do it, the method by which I tested which characters can do it, and an alternative theoretical way that would be achievable for more characters but almost impossible to pull off. While the plain throw-dash-kick is by no means applicable in a real game, owing to its immense difficulty, it serves as an illustration of some skills that are useful, such as direct running. Furthermore, in a real game there may be a situation wherein the thrown guy gets slowed down by an obstacle, in which case it would be possible to dash attack him without the perfect timing presented below.
*Requires 180-turn grab: 火人轉身丟人瞬發+吹火基礎連技
How to do it
It is obvious at once that there is not nearly enough time to pull it off if one uses the standard technique to get running:
![[Image: JTMQyJd.gif]](http://i.imgur.com/JTMQyJd.gif)
At this point, direct running (see appendix) comes to the rescue. Now it works:
![[Image: Hw5odjC.gif]](http://i.imgur.com/Hw5odjC.gif)
Let's look at it in slow motion, with the buttons overlayed (thanks YinYin!):
![[Image: ICRVXYK.gif]](http://i.imgur.com/ICRVXYK.gif)
This is an almost optimal use of time. 5 TUs are spent in throw_lying_man (the follow-through from the throw), that's unavoidable; next, 2 TUs are spent running, though technically only 1 TU of running is needed; and next, we're dash attacking, and the rest is up to the game engine.
So that's pretty good! This small amount of waste is good enough to do the combo with Woody, Dennis, Freeze, and Rudolf:
![[Image: e0sLvZ4.gif]](http://i.imgur.com/e0sLvZ4.gif)
But not Firen. So why do I claim that Firen can do it? Well...
Throw-dash-kick AI
The throw-dash-kick is very hard, so I had to write a bot to do it. Here's the code if you're interested:
This bot can do it with Firen:
![[Image: hEEFdxo.gif]](http://i.imgur.com/hEEFdxo.gif)
The reason it's better than me is that it only needs 1 TU of running to start dash attacking, not 2, as we can see in slow motion:
![[Image: TrgfE6U.gif]](http://i.imgur.com/TrgfE6U.gif)
I'm not sure why I can't dash attack after 1 TU of running. If anyone can, please tell me how.
Almosters
There are some characters that dash plenty far enough to catch up to the thrown guy, but cannot get their foot out in time, so they just get themselves hit. These are John, Jan, Bat, and Firzen. EDIT: I've been informed that John can actually do it.
Alternative way
If you stand extremely close to the victim as you grab, you may end up holding him from the opposite side that you walked from. Then, when you throw him in the same direction as you walked, you'll be throwing him backwards, which puts him closer to you while he falls than if you threw forwards. So far, however, I've had no luck reproducing the backwards grab.
Appendix: Direct running
First some theory. The way running works is this: when you start to walk, a variable called run_counter gets set to 10 (assuming you're going right; everything is negative if left). run_counter decrements each TU until it hits 0. When you press the button to walk again (after a minimum 2 TU pause to let LF2 know you're not trying to hold it down), if run_counter is still positive, you start running, and run_counter gets reset to 0. Now you'd think that you can't press anything in between the two walks, or else run_counter would get reset and obliterate your chance to run, but that's not entirely true. As far as I can tell, run_counter only gets reset when you punch, jump, defend, or run. Also, it only gets decremented when you're in standing or walking frames.
That's all the theory we need. Since only hardcoded frame transitions disrupt the running sequence, non-hardcoded ones, such as D>A or D^J (pressing them all at once, not one at a time), are allowed. run_counter doesn't decay in any frame other than walking or standing frames, so it will keep until the special move is done. Grabbing, and doing anything at all while grabbing, is allowed too. So, you can walk into a DoP enemy, throw him, and if you try to walk again right after, you'll run.
![[Image: yK52DKG.png]](http://i.imgur.com/yK52DKG.png)
Caveats:
* Make sure not to go directly from punching frames to grabbing frames, or else the forward keypress won't count as the first walk and you won't be able to run.
* If you start pressing the button to run too early, it'll count as if you were holding it down, which won't start you running.
Certain characters can dash attack a guy after they throw him, by using a technique called direct running. These are Woody, Dennis, Freeze, Firen*, Rudolf (note that no non-heroes can do it). Herein, I explain how to do it, the method by which I tested which characters can do it, and an alternative theoretical way that would be achievable for more characters but almost impossible to pull off. While the plain throw-dash-kick is by no means applicable in a real game, owing to its immense difficulty, it serves as an illustration of some skills that are useful, such as direct running. Furthermore, in a real game there may be a situation wherein the thrown guy gets slowed down by an obstacle, in which case it would be possible to dash attack him without the perfect timing presented below.
*Requires 180-turn grab: 火人轉身丟人瞬發+吹火基礎連技
How to do it
It is obvious at once that there is not nearly enough time to pull it off if one uses the standard technique to get running:
![[Image: JTMQyJd.gif]](http://i.imgur.com/JTMQyJd.gif)
At this point, direct running (see appendix) comes to the rescue. Now it works:
![[Image: Hw5odjC.gif]](http://i.imgur.com/Hw5odjC.gif)
Let's look at it in slow motion, with the buttons overlayed (thanks YinYin!):
![[Image: ICRVXYK.gif]](http://i.imgur.com/ICRVXYK.gif)
This is an almost optimal use of time. 5 TUs are spent in throw_lying_man (the follow-through from the throw), that's unavoidable; next, 2 TUs are spent running, though technically only 1 TU of running is needed; and next, we're dash attacking, and the rest is up to the game engine.
So that's pretty good! This small amount of waste is good enough to do the combo with Woody, Dennis, Freeze, and Rudolf:
![[Image: 0PQWzto.gif]](http://i.imgur.com/0PQWzto.gif)
![[Image: 4lJCoC7.gif]](http://i.imgur.com/4lJCoC7.gif)
![[Image: JwpqwP2.gif]](http://i.imgur.com/JwpqwP2.gif)
![[Image: e0sLvZ4.gif]](http://i.imgur.com/e0sLvZ4.gif)
But not Firen. So why do I claim that Firen can do it? Well...
Throw-dash-kick AI
The throw-dash-kick is very hard, so I had to write a bot to do it. Here's the code if you're interested:
AI-Code:
void forward() { if (self.facing) left(); else right(); } void targetward(int x, int y) { if (target.x > self.x) right(x,y); else left(x,y); } int MRD = 200; void id(){ // reset all inputs left(0,0); right(0,0); J(0,0); up(0,0); down(0,0); A(0,0); D(0,0); for (int i = 0; i < 400; i++) { if (loadTarget(i) == 0 && target.num != self.num) break; } int xdistance = target.x - self.x; int zdistance = target.z - self.z; if (target.state == 12) { // target has been thrown targetward(1,0); int delay_timer = 8 * game.objects[target.num].unkwn3[4]; delay_timer += 4 * game.objects[target.num].unkwn3[5]; delay_timer += 2 * game.objects[target.num].unkwn3[6]; delay_timer += 1 * game.objects[target.num].unkwn3[7]; if (self.state == 2) { // we're already running after the target // TODO check if Bat and Firzen can be done by human J(); A(); } } else if (target.state == 16 && abs(xdistance) < MRD) { // target's in DoP targetward(1,0); } else if (target.state == 10) { // we're grabbing target if (target.facing) right(1,0); else left(1,0); A(); } else if (abs(xdistance) < 50 && abs(zdistance) < 12) { // we're in punching range if (target.state == 0 || target.state == 11) { // target's standing normally or recovering from our earlier punch if (target.blink < 5) { A(1,0); } } } else { if (zdistance > 2) down(); else if (zdistance < -2) up(); if (abs(xdistance) >= MRD) targetward(1,0); else targetward(1,1); } } |
This bot can do it with Firen:
![[Image: hEEFdxo.gif]](http://i.imgur.com/hEEFdxo.gif)
The reason it's better than me is that it only needs 1 TU of running to start dash attacking, not 2, as we can see in slow motion:
![[Image: TrgfE6U.gif]](http://i.imgur.com/TrgfE6U.gif)
I'm not sure why I can't dash attack after 1 TU of running. If anyone can, please tell me how.
Almosters
There are some characters that dash plenty far enough to catch up to the thrown guy, but cannot get their foot out in time, so they just get themselves hit. These are John, Jan, Bat, and Firzen. EDIT: I've been informed that John can actually do it.
Alternative way
If you stand extremely close to the victim as you grab, you may end up holding him from the opposite side that you walked from. Then, when you throw him in the same direction as you walked, you'll be throwing him backwards, which puts him closer to you while he falls than if you threw forwards. So far, however, I've had no luck reproducing the backwards grab.
Appendix: Direct running
First some theory. The way running works is this: when you start to walk, a variable called run_counter gets set to 10 (assuming you're going right; everything is negative if left). run_counter decrements each TU until it hits 0. When you press the button to walk again (after a minimum 2 TU pause to let LF2 know you're not trying to hold it down), if run_counter is still positive, you start running, and run_counter gets reset to 0. Now you'd think that you can't press anything in between the two walks, or else run_counter would get reset and obliterate your chance to run, but that's not entirely true. As far as I can tell, run_counter only gets reset when you punch, jump, defend, or run. Also, it only gets decremented when you're in standing or walking frames.
That's all the theory we need. Since only hardcoded frame transitions disrupt the running sequence, non-hardcoded ones, such as D>A or D^J (pressing them all at once, not one at a time), are allowed. run_counter doesn't decay in any frame other than walking or standing frames, so it will keep until the special move is done. Grabbing, and doing anything at all while grabbing, is allowed too. So, you can walk into a DoP enemy, throw him, and if you try to walk again right after, you'll run.
![[Image: yK52DKG.png]](http://i.imgur.com/yK52DKG.png)
Caveats:
* Make sure not to go directly from punching frames to grabbing frames, or else the forward keypress won't count as the first walk and you won't be able to run.
* If you start pressing the button to run too early, it'll count as if you were holding it down, which won't start you running.
STM1993 edited this post 07-05-2017 06:07 AM because: |
I've reuploaded the images to imgur and fixed the [code = ai] tag. |