Now, lets dissect this
;Gokus Shoryuken
[State -1, Shoryuken]
type = changestate
triggerall = AIlevel<=0
;triggerall = roundstate = 2
triggerall = stateno != [1400,1401]
triggerall = (command = "dpx") || (command = "dpy") || (command = "dpz")
triggerall = statetype!=A
trigger1 = ctrl
trigger2 = ((stateno = 200) || (stateno = 210) || (stateno = 220) || (stateno = 215)) && movecontact
trigger3 = ((stateno = 230) || (stateno = 240) || (stateno = 250)) && movecontact
trigger4 = ((stateno = 400) || (stateno = 410) || (stateno = 420)) && movecontact
trigger5 = ((stateno = 430) || (stateno = 440)) && movecontact
trigger6 = stateno = 100 || stateno = 101
;trigger7 = stateno = 300 && anim=300 && animelemtime(8)>0 && movecontact ;Cartwheel Kick
value = 1420
Most of this is fairly simple, just cancel conditions such as control, when a normal connects, etc. The interesting bit is the 7th line. Notice how it uses all 3 punches as a condition. For things like the Explod Buffering method, simply exchange them for appropriate numexplod triggers.
This is where things get fun. First up
[Statedef 1420]
type = S
physics = S
movetype = A
velset = 0,0
ctrl = 0
juggle = 6
poweradd = 35
DON'T define an animation in your statedef. This can make things a bit iffy, and they'll be defined in a bit anyway.
Now, here's the star of the show
[state 1420, anim]
type = changeAnim
triggerall = anim != 1420 || anim != 1421 || anim !=1422
trigger1 = time = 0
value = ifelse(command = "dpy", 1421, ifelse(command = "dpz", 1422, 1420))
First up, you can't be in any of the Shoryuken animations, and the time has to = 0. This ensures you'll only define the animation once. The value basically asks "Did you input the Medium version? No? How bout the Heavy one? Still no? Ah well i'll go to the light version then"
With that out of the way, now you can do what you want in the state! All you need do is ask for the appropriate anim. For instance
[State 1420, vel1]
type = velset
trigger1 = animelem = 5
x = 3.2 * ifelse(anim = 1421, 1.55, ifelse(anim = 1422, 2.0,1))
y = -3.3 * ifelse(anim = 1421, 1.11, ifelse(anim = 1422, 1.38,1))
This Velset changes depending on which anim i'm in, pretty nifty. It operates on the same logic, "Medium? Heavy? Light"
This is all fairly simple so far right? Well check THIS out
Hitdefs in my opinion are kinda fun, as you can do some crazy shit like this
damage = ceil(ifElse(fvar(11) * 48 + ifelse(anim = 1421, 7, ifelse(anim = 1422, 16,0)) < 7, 7, fvar(11) * 48 + ifelse(anim = 1421, 7, ifelse(anim = 1422, 16,0)))), 2