Sorry for the late post. It appears your idea seems to be how Bryce did it. He has 8 animations named ft1_loser, ft1_winner, ft2_loser, ft2_winner....and so on. For each direction of killing and being killed. He uses the prefix "ft1" through "ft4" and specifies this when a takedown is initiated. He adds some timing for how long it takes for each takedown, so that either winner or loser can be shot by a third party during the takedown. I hope Bryce doesn't mind but I'll post some sample code. This is from TAIKTakedown.cs
//---------------------------------------------
// Attack1
// Chokehold from behind.
// Winner slides to position 1m behind loser
function attack1(%win,%lose)
{
%prefix = "ft1_"; // Animation name is this + "loser" or "winner", e.g. FT1_Winner, or FT1_Loser
%winOffsetFromLose = "0 -1 0"; // Winner should perform this takedown 1m behind loser
%loseOffsetFromWin = ""; // Loser of this takedown should stay put
%initPadTime = 100; // 10ms before playing animations, enough time to get everyone to stop what they're doing
%lookCode = 1; // 1 = Winner looks toward loser, 2= loser looks toward winner
%winFightTime = 2800 + %initPadTime; // Time in ms until the winner is done with the fight, and control is re-acquired.
%loseFightTime = 5000 + %initPadTime; // How long until the loser is given their control binds back (though they're dead, they may want to respawn)
%noReturnTime = 1820; // Time (ms) until victim is officially dead. %lose can escape the fight if %win dies before this time has elapsed.
%disarmTime = 2800; // Time (ms) until victim drops their gun
%p = %win.prepActor(%lose,%winOffsetFromLose,%loseOffsetFromWin,%lookCode);
if (%p == -1)
return;
%lose.prepActor(%win,"","",0);
%lose.fightKiller = %win;
%win.fightVictim = %lose;
%win.ensureLookingAtVictim(%lose,%winFightTime);
schedule(%initPadTime,0,attack1_action,%win,%lose,%prefix);
%lose.schedule(%noReturnTime,takedownDeath,%win);
%win.schedule(%winFightTime,leaveFight);
%lose.schedule(%loseFightTime,leaveFight);
%lose.schedule(%disarmTime,holsterWeapon);
%win.holsterWeapon();
}
function attack1_action(%win,%lose,%prefix)
{
if (%win.getState() $= "Dead" || %lose.getState() $= "Dead") return;
%win.destroyThread(0);
%lose.destroyThread(0);
%win.setActionThread(%prefix @ "winner");
%lose.setActionThread(%prefix @ "loser");
playFightAudio(%win,AudioClosest3D,"fight1",%lose.getWorldBoxCenter());
}