THAT, gentlemen, is why PC will always be the best platform for gaming. Sounds friggin awesome!!!
I also think tournaments should be held using pc versions, because it's the only platform that supports all controllers.
I played 3 hours yesterday at my buddy's house on PS3 and damn the timing… I can pretty much go for a smock between cr:lp: st:hp: link. I never felt this frames difference more ever ! I can just do it without plinking and have to force me to wait wait and wait. So I missed all my FADC and link the whole time.
I hope Pc timing is standard like Xbox is.
This little app could probably be the solution to find every single unblock able a character have in this game.
The limitations are the timing precision of the computer. running SF and another app that monitor inputs may produce lags and IMHO it does as the same script produce different inputs sometime like missed plink, frame droped, etc. (10%)
It's maybe a matter of computer ability and may be different for every computer. This also is a serious limitation in portability of the script.
I mean, the app try to mimic a frame perfect timer by storing in a variable, the time for 1 frame 16,... ms. In the script a 1 frame labs should be Wait(1) but it's not accurate and often you have to find the right number with try & error for the setup to work. If this issue depends on the computer my script that works for me may need adaptation to work for you and your own comp.
Anyway back to subject, this is a great tool to search unblock able as it can redo at will any setup perfectly thus giving you an easy way to modify a frames there and there to find the working setup.
this is the Ibuki corner unblock able, well it's the f.throw dash cr.MP jump MK setup mainly with timing to unblock able against Ibuki.
; Akuma f.throw in corner Dash cr.MP jump MK
#include common.ahk
do_the_setup()
{
Global
Walk(forward, 30)
Throw(forward)
Wait(70)
Dash(forward)
Dash(forward)
Wait(12)
push(DOWN)
push(backward)
Wait(1)
push(MP)
Wait(1)
push(LP)
Wait(2)
release(LP)
release(MP)
release(DOWN)
release(backward)
Wait(12)
push(forward)
push(UP)
Wait(5)
release(forward)
release(UP)
Wait(28)
push(MK)
Wait(2)
release(MK)
}
; controls for Cancel and side selection
2joy5::
do_the_setup()
return
2joy9::
Cancel := true
return
LEFT::
forward := LEFT
backward := RIGHT
return
RIGHT::
forward := RIGHT
backward := LEFT
return
Contact me if you need help instaling and using this app.
The Akuma basic f.throw dash x 2 j.mk setup for testing with perfect timings. Added OS tatsu and the follow up : cr.lk st.lk OS HK.
#include common.ahk
Akuma_F_Throw_Dash2_jumpMK_OS_Tatsu()
{
Global
Walk(forward, 30)
Throw(forward)
Wait(85)
Dash(forward)
Wait(5)
Dash(forward)
Wait(10)
Jump(forward)
Wait(25)
push(MK)
Wait(5)
release(MK)
QC_X(backward, HK)
push(DOWN)
push(backward)
Wait(2)
push(LK)
push(LP)
Wait(2)
release(LK)
release(LP)
release(DOWN)
release(backward)
Wait(15)
push(LK)
push(HK)
Wait(2)
release(LK)
release(HK)
}
do_the_setup()
{
Global
Akuma_F_Throw_Dash2_jumpMK_OS_Tatsu()
}
; controls for Cancel and side selection
2joy5::
do_the_setup()
return
2joy9::
Cancel := true
return
LEFT:: ; input keyboard left arrow key to tell the dummy where is the forward and thus the backward, it'll be the left here
forward := LEFT
backward := RIGHT
return
RIGHT:: ; or right if he should be facing the right side of the screen
forward := RIGHT
backward := LEFT
return
common.ahk
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SetKeyDelay 12 ; Not sure about usefullness
SendMode Input ; Not sure about usefullness
ONE_FRAME_IN_MS = 16.67
LEFT := "q"
RIGHT := "d"
UP := "z"
DOWN := "s"
LP := "i"
MP := "o"
HP := "p"
LK := "k"
MK := "l"
HK := "m"
Switch_side() ; instantly switch the value of LEFT and RIGHT so the dummy do the moves on the right side. Usefull when your setup involve a cross up.
{
Global
if(forward = RIGHT)
{
forward := LEFT
backward := RIGHT
}
else
{
forward := RIGHT
backward := LEFT
}
}
Wait(frames)
{
Global
Letimer := frames * ONE_FRAME_IN_MS
Sleep, %Letimer%
}
push(button)
{
Global
Send {%button% down}
}
release(button)
{
Global
Send {%button% up}
}
Walk(direction, howLong)
{
Global
push(direction)
Wait(howLong)
release(direction)
Wait(2)
}
Dash(direction)
{
Global
push(direction)
Wait(2)
release(direction)
Wait(2)
push(direction)
Wait(2)
release(direction)
Wait(6)
}
FADC(direction)
{
Global
push(MP)
push(MK)
push(direction)
Wait(3)
release(direction)
Wait(2)
push(direction)
Wait(3)
release(direction)
release(MP)
release(MK)
}
QC_X(direction, hit) ; hit = "LP", "MP", "HK", etc. for ex , use "EXP" or "EXK"
{
Global
push(DOWN)
Wait(2)
push(direction)
Wait(2)
release(DOWN)
Wait(2)
if(hit = "EXP")
{
push(LP)
push(MP)
}
else if(hit = "EXK")
{
push(LK)
push(MK)
}
else
{
push(hit)
}
Wait(2)
release(direction)
if(hit = "EXP")
{
release(LP)
release(MP)
}
else if(hit = "EXK")
{
release(LK)
release(MK)
}
else
{
release(hit)
}
Wait(6)
}
Jump(direction)
{
Global
if(direction = "neutral")
{
push(UP)
Wait(2)
release(UP)
Wait(2)
}
else
{
push(direction)
push(UP)
Wait(6)
release(direction)
release(UP)
Wait(2)
}
}
Throw(direction)
{
Global
push(direction)
push(LK)
push(LP)
Wait(5)
release(direction)
release(LK)
release(LP)
Wait(2)
}
Cr_MK()
{
Global
push(backward)
push(DOWN)
push(MK)
Wait(2)
release(MK)
release(backward)
release(DOWN)
}
Sweep() ; this sweep is plinked by default
{
Global
push(backward)
push(DOWN)
Wait(2)
push(HK)
Wait(1)
push(MK)
Wait(2)
release(MK)
release(HK)
release(backward)
release(DOWN)
}
Cr_MK_xx_Fireball(direction, punch)
{
Global
push(DOWN)
push(MK)
Wait(2)
push(direction)
Wait(2)
release(DOWN)
release(MK)
Wait(2)
push(punch)
release(direction)
Wait(4)
release(punch)
Wait(2)
}
SRK(direction, punch) ; works for any shoryu motion with punches or kicks : "EXP" to do an ex with punches, "EXK" for ex kicks, "LP", "MP", "HK", etc, for normals.
{
Global
push(direction)
Wait(4)
release(direction)
push(DOWN)
Wait(2)
push(direction)
Wait(2)
if(punch = "EXP")
{
push(LP)
push(MP)
}
else if(punch = "EXK")
{
push(LK)
push(MK)
}
else
{
push(punch)
}
release(direction)
release(DOWN)
Wait(2)
if(punch = "EXP")
{
release(LP)
release(MP)
}
else if(punch = "EXK")
{
release(LK)
release(MK)
}
else
{
release(punch)
}
Wait(2)
}
Teleport(direction, punch) ; punch = "punch" or "kick" to do the specified teleport.
{
Global
push(direction)
Wait(4)
release(direction)
push(DOWN)
Wait(2)
push(direction)
Wait(2)
if(punch = "kick")
{
push(LK)
push(MK)
push(HK)
}
else
{
push(LP)
push(MP)
push(HP)
}
release(direction)
release(DOWN)
Wait(2)
if(punch = "kick")
{
release(LK)
release(MK)
release(HK)
}
else
{
release(LP)
release(MP)
release(HP)
}
Wait(2)
}
ULTRA_2X_QC_PPP(direction) ; clean double quarter circle ultra, don't use it for kara ultra like those involving super jump cancels.
{
Global
push(DOWN)
Wait(2)
push(direction)
Wait(2)
release(DOWN)
Wait(2)
release(direction)
Wait(2)
push(DOWN)
Wait(2)
push(direction)
Wait(2)
release(DOWN)
Wait(2)
release(direction)
push(LP)
push(MP)
push(HP)
Wait(4)
release(LP)
release(MP)
release(HP)
Wait(6)
}
HC_forward(punch) ; "EXP" for ex punch, "EXK" for ex kick, "LP", "MP", "HK", etc for normals
{
Global
push(backward)
push(DOWN)
Wait(2)
release(backward)
Wait(2)
push(forward)
Wait(2)
release(DOWN)
Wait(2)
release(forward)
if(punch = "EXP")
{
push(LP)
push(MP)
}
else if(punch = "EXK")
{
push(LK)
push(MK)
}
else
{
push(punch)
}
Wait(2)
if(punch = "EXP")
{
release(LP)
release(MP)
}
else if(punch = "EXK")
{
release(LK)
release(MK)
}
else
{
release(punch)
}
Wait(2)
}
HC_backward(punch) ; "EXP" for ex punch, "EXK" for ex kick, "LP", "MP", "HK", etc for normal
{
Global
push(forward)
push(DOWN)
Wait(2)
release(forward)
Wait(2)
push(backward)
Wait(2)
release(DOWN)
Wait(2)
release(backward)
if(punch = "EXP")
{
push(LP)
push(MP)
}
else if(punch = "EXK")
{
push(LK)
push(MK)
}
else
{
push(punch)
}
Wait(2)
if(punch = "EXP")
{
release(LP)
release(MP)
}
Wait(2)
if(punch = "EXK")
{
release(LK)
release(MK)
}
else
{
release(punch)
}
Wait(2)
}
Reminder : These scripts emulate a human typing keyboard keys so to make it works all you need is to set P1 or P2 to use the keyboard and check if the keyboard mapping in the controls option in game are the same as in the common.ahk file. If not edit those keys in common.ahk file.
Demon anti air training during a fireball war
#include common.ahk
MIN_WALK_FRAMES := 5
MAX_WALK_FRAMES := 20
Fireball_War()
{
Global
Random, Guess, 0, 10
if(Guess > 3)
QC_X(forward, HP)
else
QC_X(forward, "EXP")
Wait(20)
}
do_the_setup()
{
Global
Run := "go"
While(Run = "go")
{
Random, Guess, 0, 30
; Walk forward a random amount of time
Random howLong, MIN_WALK_FRAMES, MAX_WALK_FRAMES
Walk(forward, howLong)
Walk(backward, 5)
; Randomly throw fireballs
if (Guess > 8) {
Fireball_War()
}
else
{
Jump(forward)
Wait(15)
push(HK)
Wait(4)
release(HK)
Wait(4)
push(UP)
Wait(30)
release(UP)
Wait(30)
Dash(backward)
Wait(14)
Jump(backward)
Wait(20)
}
; Walk backward roughly the same distance, but modify
; the time because Ryu's backward speed is slower
; than his forward speed
howLong += 20
Walk(backward, howLong)
}
}
; Set Ruy's punish if we whiff a sweep. This is a stick HK, modify to your HK button if you're not using a stick
2joy8::
Wait(12)
Sweep()
return
; controls for Cancel and side selection
2joy5:: ; the L1 button for a stick
do_the_setup()
return
2joy9:: ; the Select button for a stick
Run := "stop"
return
LEFT:: ; keyboard left arrow
forward := LEFT
backward := RIGHT
return
RIGHT:: ; keyboard right arrow
forward := RIGHT
backward := LEFT
return
2joy5 is the L1 button and initiate the setup, modify to whatever you want but don't overwrite dummy or your controls, choose an un used key.
2joy9 is the Select button on a stick, same thing as 2joy5, modify with another keyboard key is you don't have a stick. This button will stop the setup.
Left and Right you shouldn't modify unless you use those arrow keys in your keyboard to play but I seriously doubt u do. They tell the dummy where you're at, on his left or right so he can fight and input the QCB and QCF to the right side for example, and jump in, etc.
Those info are updated live during the setup you can switch side without stoping the setup, stop and redo the setup without closing and re launching the script.
This is the common.ahk file. It contains a lot of predefined special moves not included in this anti air script.
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SetKeyDelay 12 ; Not sure about usefullness
SendMode Input ; Not sure about usefullness
ONE_FRAME_IN_MS = 16.67
; THE KEYBOARD KEYS MAPPING, NOT YOUR CONTROLS BUT THESE KEYS THE DUMMY WILL USE. ANY PLAYER, P1 or P2 THAT IS SET TO THIS KEYBOARD CONTROLS WILL BE CONTROLED BY THE SCRIPT.
LEFT := "q"
RIGHT := "d"
UP := "z"
DOWN := "s"
LP := "i"
MP := "o"
HP := "p"
LK := "k"
MK := "l"
HK := "m"
Switch_side() ; instantly switch the value of LEFT and RIGHT so the dummy do the moves on the right side. Usefull when your setup involve a cross up.
{
Global
if(forward = RIGHT)
{
forward := LEFT
backward := RIGHT
}
else
{
forward := RIGHT
backward := LEFT
}
}
Wait(frames)
{
Global
Letimer := frames * ONE_FRAME_IN_MS
Sleep, %Letimer%
}
push(button)
{
Global
Send {%button% down}
}
release(button)
{
Global
Send {%button% up}
}
Walk(direction, howLong)
{
Global
push(direction)
Wait(howLong)
release(direction)
Wait(2)
}
Dash(direction)
{
Global
push(direction)
Wait(2)
release(direction)
Wait(2)
push(direction)
Wait(2)
release(direction)
Wait(6)
}
FADC(direction)
{
Global
push(MP)
push(MK)
push(direction)
Wait(3)
release(direction)
Wait(2)
push(direction)
Wait(3)
release(direction)
release(MP)
release(MK)
}
QC_X(direction, hit) ; hit = "LP", "MP", "HK", etc. for ex , use "EXP" or "EXK"
{
Global
push(DOWN)
Wait(2)
push(direction)
Wait(2)
release(DOWN)
Wait(2)
if(hit = "EXP")
{
push(LP)
push(MP)
}
else if(hit = "EXK")
{
push(LK)
push(MK)
}
else
{
push(hit)
}
Wait(2)
release(direction)
if(hit = "EXP")
{
release(LP)
release(MP)
}
else if(hit = "EXK")
{
release(LK)
release(MK)
}
else
{
release(hit)
}
Wait(6)
}
Jump(direction)
{
Global
if(direction = "neutral")
{
push(UP)
Wait(2)
release(UP)
Wait(2)
}
else
{
push(direction)
push(UP)
Wait(6)
release(direction)
release(UP)
Wait(2)
}
}
Throw(direction)
{
Global
push(direction)
push(LK)
push(LP)
Wait(5)
release(direction)
release(LK)
release(LP)
Wait(2)
}
Cr_MK()
{
Global
push(backward)
push(DOWN)
push(MK)
Wait(2)
release(MK)
release(backward)
release(DOWN)
}
Sweep() ; this sweep is plinked by default
{
Global
push(backward)
push(DOWN)
Wait(2)
push(HK)
Wait(1)
push(MK)
Wait(2)
release(MK)
release(HK)
release(backward)
release(DOWN)
}
Cr_MK_xx_Fireball(direction, punch)
{
Global
push(DOWN)
push(MK)
Wait(2)
push(direction)
Wait(2)
release(DOWN)
release(MK)
Wait(2)
push(punch)
release(direction)
Wait(4)
release(punch)
Wait(2)
}
SRK(direction, punch) ; works for any shoryu motion with punches or kicks : "EXP" to do an ex with punches, "EXK" for ex kicks, "LP", "MP", "HK", etc, for normals.
{
Global
push(direction)
Wait(4)
release(direction)
push(DOWN)
Wait(2)
push(direction)
Wait(2)
if(punch = "EXP")
{
push(LP)
push(MP)
}
else if(punch = "EXK")
{
push(LK)
push(MK)
}
else
{
push(punch)
}
release(direction)
release(DOWN)
Wait(2)
if(punch = "EXP")
{
release(LP)
release(MP)
}
else if(punch = "EXK")
{
release(LK)
release(MK)
}
else
{
release(punch)
}
Wait(2)
}
Teleport(direction, punch) ; punch = "punch" or "kick" to do the specified teleport.
{
Global
push(direction)
Wait(4)
release(direction)
push(DOWN)
Wait(2)
push(direction)
Wait(2)
if(punch = "kick")
{
push(LK)
push(MK)
push(HK)
}
else
{
push(LP)
push(MP)
push(HP)
}
release(direction)
release(DOWN)
Wait(2)
if(punch = "kick")
{
release(LK)
release(MK)
release(HK)
}
else
{
release(LP)
release(MP)
release(HP)
}
Wait(2)
}
ULTRA_2X_QC_PPP(direction) ; clean double quarter circle ultra, don't use it for kara ultra like those involving super jump cancels.
{
Global
push(DOWN)
Wait(2)
push(direction)
Wait(2)
release(DOWN)
Wait(2)
release(direction)
Wait(2)
push(DOWN)
Wait(2)
push(direction)
Wait(2)
release(DOWN)
Wait(2)
release(direction)
push(LP)
push(MP)
push(HP)
Wait(4)
release(LP)
release(MP)
release(HP)
Wait(6)
}
HC_forward(punch) ; "EXP" for ex punch, "EXK" for ex kick, "LP", "MP", "HK", etc for normals
{
Global
push(backward)
push(DOWN)
Wait(2)
release(backward)
Wait(2)
push(forward)
Wait(2)
release(DOWN)
Wait(2)
release(forward)
if(punch = "EXP")
{
push(LP)
push(MP)
}
else if(punch = "EXK")
{
push(LK)
push(MK)
}
else
{
push(punch)
}
Wait(2)
if(punch = "EXP")
{
release(LP)
release(MP)
}
else if(punch = "EXK")
{
release(LK)
release(MK)
}
else
{
release(punch)
}
Wait(2)
}
HC_backward(punch) ; "EXP" for ex punch, "EXK" for ex kick, "LP", "MP", "HK", etc for normal
{
Global
push(forward)
push(DOWN)
Wait(2)
release(forward)
Wait(2)
push(backward)
Wait(2)
release(DOWN)
Wait(2)
release(backward)
if(punch = "EXP")
{
push(LP)
push(MP)
}
else if(punch = "EXK")
{
push(LK)
push(MK)
}
else
{
push(punch)
}
Wait(2)
if(punch = "EXP")
{
release(LP)
release(MP)
}
Wait(2)
if(punch = "EXK")
{
release(LK)
release(MK)
}
else
{
release(punch)
}
Wait(2)
}
You can use it for your own script. Just copy past the Anti air script to another auk file you created and modify the functions. Never modify common.ahk unless you know what you're doing. The only thing you may wanna change is the value of the Wait(X) in any functions. Because on your computer the processor could be slower or faster resulting in some wrong timing in the setup. If the dummy do something to fast / slow, you stop the script, edit the Wait(X) where the problem is and relaunch the script to check it.
To debug the setup in that matter inverse the P1 and P2 so the dummy is P1 with input showed on screen. And P2 set to Human if you want to take control of P2. It doesn't matter to play this training session to be P1 or P2 anyway, the only thing is only P1 will show inputs on screen.
Comments
- Spam
- Abuse
- Troll
0 • Off Topic Disagree Agree LikeI also think tournaments should be held using pc versions, because it's the only platform that supports all controllers.
- Spam
- Abuse
- Troll
0 • Off Topic Disagree Agree LikeI hope Pc timing is standard like Xbox is.
- Spam
- Abuse
- Troll
0 • Off Topic Disagree Agree LikeThe limitations are the timing precision of the computer. running SF and another app that monitor inputs may produce lags and IMHO it does as the same script produce different inputs sometime like missed plink, frame droped, etc. (10%)
It's maybe a matter of computer ability and may be different for every computer. This also is a serious limitation in portability of the script.
I mean, the app try to mimic a frame perfect timer by storing in a variable, the time for 1 frame 16,... ms. In the script a 1 frame labs should be Wait(1) but it's not accurate and often you have to find the right number with try & error for the setup to work. If this issue depends on the computer my script that works for me may need adaptation to work for you and your own comp.
Anyway back to subject, this is a great tool to search unblock able as it can redo at will any setup perfectly thus giving you an easy way to modify a frames there and there to find the working setup.
this is the Ibuki corner unblock able, well it's the f.throw dash cr.MP jump MK setup mainly with timing to unblock able against Ibuki.
; Akuma f.throw in corner Dash cr.MP jump MK #include common.ahk do_the_setup() { Global Walk(forward, 30) Throw(forward) Wait(70) Dash(forward) Dash(forward) Wait(12) push(DOWN) push(backward) Wait(1) push(MP) Wait(1) push(LP) Wait(2) release(LP) release(MP) release(DOWN) release(backward) Wait(12) push(forward) push(UP) Wait(5) release(forward) release(UP) Wait(28) push(MK) Wait(2) release(MK) } ; controls for Cancel and side selection 2joy5:: do_the_setup() return 2joy9:: Cancel := true return LEFT:: forward := LEFT backward := RIGHT return RIGHT:: forward := RIGHT backward := LEFT returnContact me if you need help instaling and using this app.
- Spam
- Abuse
- Troll
0 • Off Topic Disagree Agree Like#include common.ahk Akuma_F_Throw_Dash2_jumpMK_OS_Tatsu() { Global Walk(forward, 30) Throw(forward) Wait(85) Dash(forward) Wait(5) Dash(forward) Wait(10) Jump(forward) Wait(25) push(MK) Wait(5) release(MK) QC_X(backward, HK) push(DOWN) push(backward) Wait(2) push(LK) push(LP) Wait(2) release(LK) release(LP) release(DOWN) release(backward) Wait(15) push(LK) push(HK) Wait(2) release(LK) release(HK) } do_the_setup() { Global Akuma_F_Throw_Dash2_jumpMK_OS_Tatsu() } ; controls for Cancel and side selection 2joy5:: do_the_setup() return 2joy9:: Cancel := true return LEFT:: ; input keyboard left arrow key to tell the dummy where is the forward and thus the backward, it'll be the left here forward := LEFT backward := RIGHT return RIGHT:: ; or right if he should be facing the right side of the screen forward := RIGHT backward := LEFT returncommon.ahk
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. SetKeyDelay 12 ; Not sure about usefullness SendMode Input ; Not sure about usefullness ONE_FRAME_IN_MS = 16.67 LEFT := "q" RIGHT := "d" UP := "z" DOWN := "s" LP := "i" MP := "o" HP := "p" LK := "k" MK := "l" HK := "m" Switch_side() ; instantly switch the value of LEFT and RIGHT so the dummy do the moves on the right side. Usefull when your setup involve a cross up. { Global if(forward = RIGHT) { forward := LEFT backward := RIGHT } else { forward := RIGHT backward := LEFT } } Wait(frames) { Global Letimer := frames * ONE_FRAME_IN_MS Sleep, %Letimer% } push(button) { Global Send {%button% down} } release(button) { Global Send {%button% up} } Walk(direction, howLong) { Global push(direction) Wait(howLong) release(direction) Wait(2) } Dash(direction) { Global push(direction) Wait(2) release(direction) Wait(2) push(direction) Wait(2) release(direction) Wait(6) } FADC(direction) { Global push(MP) push(MK) push(direction) Wait(3) release(direction) Wait(2) push(direction) Wait(3) release(direction) release(MP) release(MK) } QC_X(direction, hit) ; hit = "LP", "MP", "HK", etc. for ex , use "EXP" or "EXK" { Global push(DOWN) Wait(2) push(direction) Wait(2) release(DOWN) Wait(2) if(hit = "EXP") { push(LP) push(MP) } else if(hit = "EXK") { push(LK) push(MK) } else { push(hit) } Wait(2) release(direction) if(hit = "EXP") { release(LP) release(MP) } else if(hit = "EXK") { release(LK) release(MK) } else { release(hit) } Wait(6) } Jump(direction) { Global if(direction = "neutral") { push(UP) Wait(2) release(UP) Wait(2) } else { push(direction) push(UP) Wait(6) release(direction) release(UP) Wait(2) } } Throw(direction) { Global push(direction) push(LK) push(LP) Wait(5) release(direction) release(LK) release(LP) Wait(2) } Cr_MK() { Global push(backward) push(DOWN) push(MK) Wait(2) release(MK) release(backward) release(DOWN) } Sweep() ; this sweep is plinked by default { Global push(backward) push(DOWN) Wait(2) push(HK) Wait(1) push(MK) Wait(2) release(MK) release(HK) release(backward) release(DOWN) } Cr_MK_xx_Fireball(direction, punch) { Global push(DOWN) push(MK) Wait(2) push(direction) Wait(2) release(DOWN) release(MK) Wait(2) push(punch) release(direction) Wait(4) release(punch) Wait(2) } SRK(direction, punch) ; works for any shoryu motion with punches or kicks : "EXP" to do an ex with punches, "EXK" for ex kicks, "LP", "MP", "HK", etc, for normals. { Global push(direction) Wait(4) release(direction) push(DOWN) Wait(2) push(direction) Wait(2) if(punch = "EXP") { push(LP) push(MP) } else if(punch = "EXK") { push(LK) push(MK) } else { push(punch) } release(direction) release(DOWN) Wait(2) if(punch = "EXP") { release(LP) release(MP) } else if(punch = "EXK") { release(LK) release(MK) } else { release(punch) } Wait(2) } Teleport(direction, punch) ; punch = "punch" or "kick" to do the specified teleport. { Global push(direction) Wait(4) release(direction) push(DOWN) Wait(2) push(direction) Wait(2) if(punch = "kick") { push(LK) push(MK) push(HK) } else { push(LP) push(MP) push(HP) } release(direction) release(DOWN) Wait(2) if(punch = "kick") { release(LK) release(MK) release(HK) } else { release(LP) release(MP) release(HP) } Wait(2) } ULTRA_2X_QC_PPP(direction) ; clean double quarter circle ultra, don't use it for kara ultra like those involving super jump cancels. { Global push(DOWN) Wait(2) push(direction) Wait(2) release(DOWN) Wait(2) release(direction) Wait(2) push(DOWN) Wait(2) push(direction) Wait(2) release(DOWN) Wait(2) release(direction) push(LP) push(MP) push(HP) Wait(4) release(LP) release(MP) release(HP) Wait(6) } HC_forward(punch) ; "EXP" for ex punch, "EXK" for ex kick, "LP", "MP", "HK", etc for normals { Global push(backward) push(DOWN) Wait(2) release(backward) Wait(2) push(forward) Wait(2) release(DOWN) Wait(2) release(forward) if(punch = "EXP") { push(LP) push(MP) } else if(punch = "EXK") { push(LK) push(MK) } else { push(punch) } Wait(2) if(punch = "EXP") { release(LP) release(MP) } else if(punch = "EXK") { release(LK) release(MK) } else { release(punch) } Wait(2) } HC_backward(punch) ; "EXP" for ex punch, "EXK" for ex kick, "LP", "MP", "HK", etc for normal { Global push(forward) push(DOWN) Wait(2) release(forward) Wait(2) push(backward) Wait(2) release(DOWN) Wait(2) release(backward) if(punch = "EXP") { push(LP) push(MP) } else if(punch = "EXK") { push(LK) push(MK) } else { push(punch) } Wait(2) if(punch = "EXP") { release(LP) release(MP) } Wait(2) if(punch = "EXK") { release(LK) release(MK) } else { release(punch) } Wait(2) }- Spam
- Abuse
- Troll
0 • Off Topic Disagree Agree LikeDemon anti air training during a fireball war
#include common.ahk MIN_WALK_FRAMES := 5 MAX_WALK_FRAMES := 20 Fireball_War() { Global Random, Guess, 0, 10 if(Guess > 3) QC_X(forward, HP) else QC_X(forward, "EXP") Wait(20) } do_the_setup() { Global Run := "go" While(Run = "go") { Random, Guess, 0, 30 ; Walk forward a random amount of time Random howLong, MIN_WALK_FRAMES, MAX_WALK_FRAMES Walk(forward, howLong) Walk(backward, 5) ; Randomly throw fireballs if (Guess > 8) { Fireball_War() } else { Jump(forward) Wait(15) push(HK) Wait(4) release(HK) Wait(4) push(UP) Wait(30) release(UP) Wait(30) Dash(backward) Wait(14) Jump(backward) Wait(20) } ; Walk backward roughly the same distance, but modify ; the time because Ryu's backward speed is slower ; than his forward speed howLong += 20 Walk(backward, howLong) } } ; Set Ruy's punish if we whiff a sweep. This is a stick HK, modify to your HK button if you're not using a stick 2joy8:: Wait(12) Sweep() return ; controls for Cancel and side selection 2joy5:: ; the L1 button for a stick do_the_setup() return 2joy9:: ; the Select button for a stick Run := "stop" return LEFT:: ; keyboard left arrow forward := LEFT backward := RIGHT return RIGHT:: ; keyboard right arrow forward := RIGHT backward := LEFT returnSo, 2joy8 is the user's HK button if you're playing with a keyboard ( like your dummy) set this to your HK, the same button you got in the common file there :
http://imageshack.us/f/843/inputs.png
http://imageshack.us/photo/my-images/843/inputs.png
2joy5 is the L1 button and initiate the setup, modify to whatever you want but don't overwrite dummy or your controls, choose an un used key.
2joy9 is the Select button on a stick, same thing as 2joy5, modify with another keyboard key is you don't have a stick. This button will stop the setup.
Left and Right you shouldn't modify unless you use those arrow keys in your keyboard to play but I seriously doubt u do. They tell the dummy where you're at, on his left or right so he can fight and input the QCB and QCF to the right side for example, and jump in, etc.
Those info are updated live during the setup you can switch side without stoping the setup, stop and redo the setup without closing and re launching the script.
This is the common.ahk file. It contains a lot of predefined special moves not included in this anti air script.
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. SetKeyDelay 12 ; Not sure about usefullness SendMode Input ; Not sure about usefullness ONE_FRAME_IN_MS = 16.67 ; THE KEYBOARD KEYS MAPPING, NOT YOUR CONTROLS BUT THESE KEYS THE DUMMY WILL USE. ANY PLAYER, P1 or P2 THAT IS SET TO THIS KEYBOARD CONTROLS WILL BE CONTROLED BY THE SCRIPT. LEFT := "q" RIGHT := "d" UP := "z" DOWN := "s" LP := "i" MP := "o" HP := "p" LK := "k" MK := "l" HK := "m" Switch_side() ; instantly switch the value of LEFT and RIGHT so the dummy do the moves on the right side. Usefull when your setup involve a cross up. { Global if(forward = RIGHT) { forward := LEFT backward := RIGHT } else { forward := RIGHT backward := LEFT } } Wait(frames) { Global Letimer := frames * ONE_FRAME_IN_MS Sleep, %Letimer% } push(button) { Global Send {%button% down} } release(button) { Global Send {%button% up} } Walk(direction, howLong) { Global push(direction) Wait(howLong) release(direction) Wait(2) } Dash(direction) { Global push(direction) Wait(2) release(direction) Wait(2) push(direction) Wait(2) release(direction) Wait(6) } FADC(direction) { Global push(MP) push(MK) push(direction) Wait(3) release(direction) Wait(2) push(direction) Wait(3) release(direction) release(MP) release(MK) } QC_X(direction, hit) ; hit = "LP", "MP", "HK", etc. for ex , use "EXP" or "EXK" { Global push(DOWN) Wait(2) push(direction) Wait(2) release(DOWN) Wait(2) if(hit = "EXP") { push(LP) push(MP) } else if(hit = "EXK") { push(LK) push(MK) } else { push(hit) } Wait(2) release(direction) if(hit = "EXP") { release(LP) release(MP) } else if(hit = "EXK") { release(LK) release(MK) } else { release(hit) } Wait(6) } Jump(direction) { Global if(direction = "neutral") { push(UP) Wait(2) release(UP) Wait(2) } else { push(direction) push(UP) Wait(6) release(direction) release(UP) Wait(2) } } Throw(direction) { Global push(direction) push(LK) push(LP) Wait(5) release(direction) release(LK) release(LP) Wait(2) } Cr_MK() { Global push(backward) push(DOWN) push(MK) Wait(2) release(MK) release(backward) release(DOWN) } Sweep() ; this sweep is plinked by default { Global push(backward) push(DOWN) Wait(2) push(HK) Wait(1) push(MK) Wait(2) release(MK) release(HK) release(backward) release(DOWN) } Cr_MK_xx_Fireball(direction, punch) { Global push(DOWN) push(MK) Wait(2) push(direction) Wait(2) release(DOWN) release(MK) Wait(2) push(punch) release(direction) Wait(4) release(punch) Wait(2) } SRK(direction, punch) ; works for any shoryu motion with punches or kicks : "EXP" to do an ex with punches, "EXK" for ex kicks, "LP", "MP", "HK", etc, for normals. { Global push(direction) Wait(4) release(direction) push(DOWN) Wait(2) push(direction) Wait(2) if(punch = "EXP") { push(LP) push(MP) } else if(punch = "EXK") { push(LK) push(MK) } else { push(punch) } release(direction) release(DOWN) Wait(2) if(punch = "EXP") { release(LP) release(MP) } else if(punch = "EXK") { release(LK) release(MK) } else { release(punch) } Wait(2) } Teleport(direction, punch) ; punch = "punch" or "kick" to do the specified teleport. { Global push(direction) Wait(4) release(direction) push(DOWN) Wait(2) push(direction) Wait(2) if(punch = "kick") { push(LK) push(MK) push(HK) } else { push(LP) push(MP) push(HP) } release(direction) release(DOWN) Wait(2) if(punch = "kick") { release(LK) release(MK) release(HK) } else { release(LP) release(MP) release(HP) } Wait(2) } ULTRA_2X_QC_PPP(direction) ; clean double quarter circle ultra, don't use it for kara ultra like those involving super jump cancels. { Global push(DOWN) Wait(2) push(direction) Wait(2) release(DOWN) Wait(2) release(direction) Wait(2) push(DOWN) Wait(2) push(direction) Wait(2) release(DOWN) Wait(2) release(direction) push(LP) push(MP) push(HP) Wait(4) release(LP) release(MP) release(HP) Wait(6) } HC_forward(punch) ; "EXP" for ex punch, "EXK" for ex kick, "LP", "MP", "HK", etc for normals { Global push(backward) push(DOWN) Wait(2) release(backward) Wait(2) push(forward) Wait(2) release(DOWN) Wait(2) release(forward) if(punch = "EXP") { push(LP) push(MP) } else if(punch = "EXK") { push(LK) push(MK) } else { push(punch) } Wait(2) if(punch = "EXP") { release(LP) release(MP) } else if(punch = "EXK") { release(LK) release(MK) } else { release(punch) } Wait(2) } HC_backward(punch) ; "EXP" for ex punch, "EXK" for ex kick, "LP", "MP", "HK", etc for normal { Global push(forward) push(DOWN) Wait(2) release(forward) Wait(2) push(backward) Wait(2) release(DOWN) Wait(2) release(backward) if(punch = "EXP") { push(LP) push(MP) } else if(punch = "EXK") { push(LK) push(MK) } else { push(punch) } Wait(2) if(punch = "EXP") { release(LP) release(MP) } Wait(2) if(punch = "EXK") { release(LK) release(MK) } else { release(punch) } Wait(2) }You can use it for your own script. Just copy past the Anti air script to another auk file you created and modify the functions. Never modify common.ahk unless you know what you're doing. The only thing you may wanna change is the value of the Wait(X) in any functions. Because on your computer the processor could be slower or faster resulting in some wrong timing in the setup. If the dummy do something to fast / slow, you stop the script, edit the Wait(X) where the problem is and relaunch the script to check it.
To debug the setup in that matter inverse the P1 and P2 so the dummy is P1 with input showed on screen. And P2 set to Human if you want to take control of P2. It doesn't matter to play this training session to be P1 or P2 anyway, the only thing is only P1 will show inputs on screen.
- Spam
- Abuse
- Troll
0 • Off Topic Disagree Agree Likehttp://www.designaddiction.info/index.php
- Spam
- Abuse
- Troll
0 • Off Topic Disagree Agree Like