Have you ever looked at a Capcom character and noticed that their animation plays through the pausetime? Think it's just there to make the animations look nice?
Yyyyyeah, turns out, no, it's more than just aesthetics. It's actually VERY important.
Kyosuke, for instance, absolutely HAS to do this in order for links to work properly:
Without:
With:
See the frame advantage? A whopping +5 as opposed to +2. If he didn't have this, his s.LP → s.HP (close) link would be impossible to do.
So, how do you do it?
[State 205, Time Offset]
type = VarSet
trigger1 = moveContact = 1
var(x) = Time
ignorehitpause = 1
persistent = 0
[State 205, Play Anim]
type = ChangeAnim
triggerall = AnimElemTime(y) >= 0 && AnimElemTime(z) <= 0
trigger1 = hitPauseTime = [1,{pausetime} - ({total number of frames up until the end of the first frame of animation} - Var(x))]
value = anim
elem = z
ignorehitpause = 1
(simplified for the sake of education since my system has scary-looking variables)
So, let's use Kyosuke as an example:
You see the circled 3 ticks? Fighter Factory displays this. What it's saying is, "3 ticks will have passed after this frame ends." The current frame lasts 2 ticks, so 2 ticks AND ONLY 2 ticks of that frame need to play, regardless of any pause. That's why we have the time offset variable.
Now, that's AnimElem 2, and we want it to skip to the next AnimElem, which is 3, and then pause there. The time you use for pausetime is the EXACT pausetime you define in the HitDef.
pausetime = 9,9
So, with all that in mind, now the code will look something like this:
[State 205, Time Offset]
type = VarSet
trigger1 = moveContact = 1
var(x) = Time
ignorehitpause = 1
persistent = 0
[State 205, Play Anim]
type = ChangeAnim
triggerall = AnimElemTime(2) >= 0 && AnimElemTime(3) <= 0
trigger1 = hitPauseTime = [1,9 - (3 - Var(x))]
value = anim
elem = 3
ignorehitpause = 1
But what about custom combo? It halves the pausetime! No problem!
[State 205, Time Offset]
type = VarSet
trigger1 = moveContact = 1
var(x) = Time
ignorehitpause = 1
persistent = 0
[State 205, Play Anim]
type = ChangeAnim
triggerall = AnimElemTime(2) >= 0 && AnimElemTime(3) <= 0
trigger1 = hitPauseTime = [1,ceil(9*(2-(Var(c)>0))/2) - (3 - Var(x))]
value = anim
elem = 3
ignorehitpause = 1
Where Var(x) is your time offset variable, and Var(c) is your custom combo variable.
Now, you've probably seen a different method used in Warusaki3's and GM's stuff that accomplishes this same thing, but that requires making a "buffer" for each move during custom combo. That's a pain to have to do. This method lets you bypass all of that!
Big thanks goes to H" for finding this method.