265 lines
7.6 KiB
Plaintext
265 lines
7.6 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
main()
|
|
{
|
|
self endon( "killanimscript" );
|
|
animscripts\utility::initialize( "reactions" );
|
|
newenemysurprisedreaction();
|
|
}
|
|
|
|
#using_animtree("generic_human");
|
|
|
|
init_animset_reactions()
|
|
{
|
|
var_0 = [];
|
|
var_0["cover_stand"] = [ %stand_cover_reaction_a, %stand_cover_reaction_b ];
|
|
var_0["cover_crouch"] = [ %stand_cover_reaction_a, %stand_cover_reaction_b ];
|
|
var_0["cover_left"] = [ %stand_cover_reaction_a, %stand_cover_reaction_b ];
|
|
var_0["cover_right"] = [ %stand_cover_reaction_a, %stand_cover_reaction_b ];
|
|
anim.archetypes["soldier"]["cover_reactions"] = var_0;
|
|
var_0 = [];
|
|
var_0[0] = %run_wizby_a;
|
|
var_0[1] = %run_wizby_b;
|
|
anim.archetypes["soldier"]["running_react_to_bullets"] = var_0;
|
|
anim.lastrunningreactanim = 0;
|
|
}
|
|
|
|
reactionscheckloop()
|
|
{
|
|
thread bulletwhizbycheckloop();
|
|
}
|
|
|
|
canreactagain()
|
|
{
|
|
return !isdefined( self.lastreacttime ) || gettime() - self.lastreacttime > 2000;
|
|
}
|
|
|
|
bulletwhizbyreaction()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self.lastreacttime = gettime();
|
|
self.a.movement = "stop";
|
|
var_0 = isdefined( self.whizbyenemy ) && distancesquared( self.origin, self.whizbyenemy.origin ) < 160000;
|
|
self animmode( "gravity" );
|
|
self orientmode( "face current" );
|
|
|
|
if ( var_0 || common_scripts\utility::cointoss() )
|
|
{
|
|
self clearanim( %root, 0.1 );
|
|
var_1 = [];
|
|
var_1[0] = %exposed_idle_reacta;
|
|
var_1[1] = %exposed_idle_reactb;
|
|
var_1[2] = %exposed_idle_twitch;
|
|
var_1[3] = %exposed_idle_twitch_v4;
|
|
var_2 = var_1[randomint( var_1.size )];
|
|
|
|
if ( var_0 )
|
|
var_3 = 1 + randomfloat( 0.5 );
|
|
else
|
|
var_3 = 0.2 + randomfloat( 0.5 );
|
|
|
|
self setflaggedanimknobrestart( "reactanim", var_2, 1, 0.1, 1 );
|
|
animscripts\notetracks::donotetracksfortime( var_3, "reactanim" );
|
|
self clearanim( %root, 0.1 );
|
|
|
|
if ( !var_0 && self.stairsstate == "none" && !isdefined( self.disable_dive_whizby_react ) )
|
|
{
|
|
var_4 = 1 + randomfloat( 0.2 );
|
|
var_5 = animscripts\utility::randomanimoftwo( %exposed_dive_grenade_b, %exposed_dive_grenade_f );
|
|
self setflaggedanimknobrestart( "dive", var_5, 1, 0.1, var_4 );
|
|
animscripts\shared::donotetracks( "dive" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
wait( randomfloat( 0.2 ) );
|
|
var_4 = 1.2 + randomfloat( 0.3 );
|
|
|
|
if ( self.a.pose == "stand" )
|
|
{
|
|
self clearanim( %root, 0.1 );
|
|
self setflaggedanimknobrestart( "crouch", %exposed_stand_2_crouch, 1, 0.1, var_4 );
|
|
animscripts\shared::donotetracks( "crouch" );
|
|
}
|
|
|
|
var_6 = anglestoforward( self.angles );
|
|
|
|
if ( isdefined( self.whizbyenemy ) )
|
|
var_7 = vectornormalize( self.whizbyenemy.origin - self.origin );
|
|
else
|
|
var_7 = var_6;
|
|
|
|
if ( vectordot( var_7, var_6 ) > 0 )
|
|
{
|
|
var_8 = animscripts\utility::randomanimoftwo( %exposed_crouch_idle_twitch_v2, %exposed_crouch_idle_twitch_v3 );
|
|
self clearanim( %root, 0.1 );
|
|
self setflaggedanimknobrestart( "twitch", var_8, 1, 0.1, 1 );
|
|
animscripts\shared::donotetracks( "twitch" );
|
|
}
|
|
else
|
|
{
|
|
var_9 = animscripts\utility::randomanimoftwo( %exposed_crouch_turn_180_left, %exposed_crouch_turn_180_right );
|
|
self clearanim( %root, 0.1 );
|
|
self setflaggedanimknobrestart( "turn", var_9, 1, 0.1, 1 );
|
|
animscripts\shared::donotetracks( "turn" );
|
|
}
|
|
}
|
|
|
|
self clearanim( %root, 0.1 );
|
|
self.whizbyenemy = undefined;
|
|
self animmode( "normal" );
|
|
self orientmode( "face default" );
|
|
}
|
|
|
|
bulletwhizbycheckloop()
|
|
{
|
|
self endon( "killanimscript" );
|
|
|
|
if ( isdefined( self.disablebulletwhizbyreaction ) )
|
|
return;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "bulletwhizby", var_0 );
|
|
|
|
if ( !isdefined( var_0.team ) || self.team == var_0.team )
|
|
continue;
|
|
|
|
if ( isdefined( self.covernode ) || isdefined( self.ambushnode ) )
|
|
continue;
|
|
|
|
if ( self.a.pose != "stand" )
|
|
continue;
|
|
|
|
if ( !canreactagain() )
|
|
continue;
|
|
|
|
self.whizbyenemy = var_0;
|
|
self animcustom( ::bulletwhizbyreaction );
|
|
}
|
|
}
|
|
|
|
clearlookatthread()
|
|
{
|
|
self endon( "killanimscript" );
|
|
wait 0.3;
|
|
self setlookatentity();
|
|
}
|
|
|
|
getnewenemyreactionanim()
|
|
{
|
|
var_0 = undefined;
|
|
|
|
if ( self nearclaimnodeandangle() )
|
|
{
|
|
var_1 = animscripts\utility::lookupanimarray( "cover_reactions" );
|
|
|
|
if ( isdefined( var_1[self.prevscript] ) )
|
|
{
|
|
var_2 = anglestoforward( self.node.angles );
|
|
var_3 = vectornormalize( self.reactiontargetpos - self.origin );
|
|
|
|
if ( vectordot( var_2, var_3 ) < -0.5 )
|
|
{
|
|
self orientmode( "face current" );
|
|
var_4 = randomint( var_1[self.prevscript].size );
|
|
var_0 = var_1[self.prevscript][var_4];
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
{
|
|
var_5 = [];
|
|
var_5[0] = %exposed_backpedal;
|
|
var_5[1] = %exposed_idle_reactb;
|
|
|
|
if ( isdefined( self.enemy ) && distancesquared( self.enemy.origin, self.reactiontargetpos ) < 65536 )
|
|
self orientmode( "face enemy" );
|
|
else
|
|
self orientmode( "face point", self.reactiontargetpos );
|
|
|
|
if ( self.a.pose == "crouch" )
|
|
{
|
|
var_3 = vectornormalize( self.reactiontargetpos - self.origin );
|
|
var_6 = anglestoforward( self.angles );
|
|
|
|
if ( vectordot( var_6, var_3 ) < -0.5 )
|
|
{
|
|
self orientmode( "face current" );
|
|
var_5[0] = %crouch_cover_reaction_a;
|
|
var_5[1] = %crouch_cover_reaction_b;
|
|
}
|
|
}
|
|
|
|
var_0 = var_5[randomint( var_5.size )];
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
stealthnewenemyreactanim()
|
|
{
|
|
self clearanim( %root, 0.2 );
|
|
|
|
if ( randomint( 4 ) < 3 )
|
|
{
|
|
self orientmode( "face enemy" );
|
|
self setflaggedanimknobrestart( "reactanim", %exposed_idle_reactb, 1, 0.2, 1 );
|
|
var_0 = getanimlength( %exposed_idle_reactb );
|
|
animscripts\notetracks::donotetracksfortime( var_0 * 0.8, "reactanim" );
|
|
self orientmode( "face current" );
|
|
}
|
|
else
|
|
{
|
|
self orientmode( "face enemy" );
|
|
self setflaggedanimknobrestart( "reactanim", %exposed_backpedal, 1, 0.2, 1 );
|
|
var_0 = getanimlength( %exposed_backpedal );
|
|
animscripts\notetracks::donotetracksfortime( var_0 * 0.8, "reactanim" );
|
|
self orientmode( "face current" );
|
|
self clearanim( %root, 0.2 );
|
|
self setflaggedanimknobrestart( "reactanim", %exposed_backpedal_v2, 1, 0.2, 1 );
|
|
animscripts\shared::donotetracks( "reactanim" );
|
|
}
|
|
}
|
|
|
|
newenemyreactionanim()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "endNewEnemyReactionAnim" );
|
|
self.lastreacttime = gettime();
|
|
self.a.movement = "stop";
|
|
|
|
if ( isdefined( self._stealth ) && self.alertlevel != "combat" )
|
|
stealthnewenemyreactanim();
|
|
else
|
|
{
|
|
var_0 = getnewenemyreactionanim();
|
|
self clearanim( %root, 0.2 );
|
|
self setflaggedanimknobrestart( "reactanim", var_0, 1, 0.2, 1 );
|
|
animscripts\shared::donotetracks( "reactanim" );
|
|
}
|
|
|
|
self notify( "newEnemyReactionDone" );
|
|
}
|
|
|
|
newenemysurprisedreaction()
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( self.disablereactionanims ) )
|
|
return;
|
|
|
|
if ( !canreactagain() )
|
|
return;
|
|
|
|
if ( self.a.pose == "prone" || isdefined( self.a.onback ) )
|
|
return;
|
|
|
|
self animmode( "gravity" );
|
|
|
|
if ( isdefined( self.enemy ) )
|
|
newenemyreactionanim();
|
|
}
|