All of this has already been tested, so far it is 100% effective.
As many of us know, there was a time when character transformations were awkward to implement outside of a full game due to the fact that the inappropriate sprites may display during a throw. Well no longer, here is a method I have found to solve this problem, but it requires a bit of extra coding on the thrower's part.
1. For your character, provide and extra set of the required sprites, but with a group number + 10000. E.G. sprite 5000,0 will have its counterpart as 15000,0.
2. For each animation, same deal.
Now for the tricky part
3. Add this to state -2
[State -2, Transform Helper]
type = Helper
trigger1 = numhelper(8874) = 0
name = "AmITransformed?"
ID = 8874
pos = 9999,-9999
stateno = 8874
[State -2, Transform Helper]
type = Changeanim
triggerall = helper(8874),var(40) > 0
trigger1 = anim = [0,9999]
value = anim + helper(8874),var(40)*10000
Do NOT change the number from 8874, this is an attempt to establish a standard.
4. This state must be present in your code
[Statedef 8874]
[State 8874, OHNOES!] ; You really don't want to see this helper do you?
type = assertspecial
trigger1 = time
flag = invisible
persistent = 1
[state 8874, INIT] ; Initialize the transformation variable
type = varset
trigger1 = time = 0
v = 40
value = 0
[State 8874, Change] ; This sctrl can be modified as appropriate
type = varset
triggerall = root, animelemtime(5) = 0 ; Halfway through the transformation anim in this case
trigger1 = root, anim = 1000 ; Suppose the anim for transforming is 1000
trigger2 = root, anim = 11000 ; Transforming back is anim 11000 in this case
v = 40
value = ifelse(root,anim=1000,1,0) ;1 = Transformed, 0 = not
And there you have the basics, all you need to do is enter a state using the transformation animation and the helper will automatically detect the fact that you are transforming.
And now for the thrower's part of the code. There are two things required:
1. For each custom anim, add an extra one, but +10000 with the sprites also +10000
E.G. If a custom throw anim is action 650 and uses sprites 5000-5020, another anim must be present, action 10650 using sprites 15000-15020.
2. For each changeanim or changeanim2 in a custom state, use this
value = "wtf" + helper(8874),var(40) * 10000
Where "wtf" is the anim you would have put your opponent into.
Let me know if any of this is too confusing, or if anyone can explain this in a simpler way than have I.
NOTE: Another and possibly faster piece of code to use instead is
[State -2, Transform Helper]
type = Changeanim
triggerall = helper(8874),var(40) > 0
trigger1 = anim = [5,6]
trigger2 = anim = 11
value = anim + helper(8874),var(40)*10000
And heavily modify common.cns to use the proper anim changing code. The advantages and disadvantages to using either method is at this time unknown, because I'm lazy.