856 lines
21 KiB
Plaintext
856 lines
21 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
main()
|
|
{
|
|
self endon( "killanimscript" );
|
|
entermove();
|
|
startmove();
|
|
continuemovement();
|
|
}
|
|
|
|
entermove()
|
|
{
|
|
self.blockgoalpos = 0;
|
|
self.playing_pain_animation = 0;
|
|
self scragentsetphysicsmode( "gravity" );
|
|
self scragentsetanimmode( "code_move" );
|
|
}
|
|
|
|
startmove()
|
|
{
|
|
if ( candostartmove() )
|
|
{
|
|
switch ( getstartmovetype() )
|
|
{
|
|
case "run-start":
|
|
dorunstart();
|
|
break;
|
|
case "walk-start":
|
|
dowalkstart();
|
|
break;
|
|
case "leap-to-run":
|
|
doleaptorunstart();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
end_script()
|
|
{
|
|
self.blockgoalpos = 0;
|
|
self.playing_pain_animation = 0;
|
|
cancelallbut( undefined );
|
|
self scragentsetanimscale( 1, 1 );
|
|
self.previousanimstate = "move";
|
|
}
|
|
|
|
setupmovement()
|
|
{
|
|
self.enablestop = 1;
|
|
thread waitformovemodechange();
|
|
thread waitforjumpsoon();
|
|
thread waitforsharpturn();
|
|
thread waitforstop();
|
|
thread waitforstuck();
|
|
|
|
if ( candodge() )
|
|
{
|
|
thread waitfornearmiss();
|
|
thread waitfordodgechance();
|
|
}
|
|
}
|
|
|
|
continuemovement()
|
|
{
|
|
setupmovement();
|
|
|
|
if ( self.oriented )
|
|
{
|
|
var_0 = self getlookaheaddir();
|
|
var_1 = anglestoup( self.angles );
|
|
var_2 = vectorcross( var_1, var_0 );
|
|
var_0 = vectorcross( var_2, var_1 );
|
|
var_3 = ( 0, 0, 0 ) - var_2;
|
|
var_4 = axistoangles( var_0, var_3, var_1 );
|
|
self scragentsetorientmode( "face angle abs", var_4 );
|
|
self scragentsetanimmode( "code_move_slide" );
|
|
}
|
|
else
|
|
{
|
|
self scragentsetorientmode( "face motion" );
|
|
self scragentsetanimmode( "code_move" );
|
|
}
|
|
|
|
self scragentsetanimscale( self.xyanimscale, 1.0 );
|
|
setmoveanim( self.movemode );
|
|
}
|
|
|
|
waitformovemodechange()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "alienmove_endwait_runwalk" );
|
|
var_0 = self.movemode;
|
|
|
|
for (;;)
|
|
{
|
|
if ( var_0 != self.movemode )
|
|
{
|
|
setmoveanim( self.movemode );
|
|
var_0 = self.movemode;
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
waitforsharpturn()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "alienmove_endwait_sharpturn" );
|
|
self waittill( "path_dir_change", var_0 );
|
|
var_1 = maps\mp\agents\_scriptedagents::getangleindexfromselfyaw( var_0 );
|
|
|
|
if ( var_1 == 4 )
|
|
{
|
|
thread waitforsharpturn();
|
|
return;
|
|
}
|
|
|
|
var_2 = !should_do_sharp_turn();
|
|
|
|
if ( var_2 )
|
|
var_1 = 0;
|
|
|
|
var_3 = "run_turn";
|
|
var_4 = self getanimentry( var_3, var_1 );
|
|
var_5 = var_2 || candoturnanim( var_4 );
|
|
|
|
if ( !var_5 )
|
|
{
|
|
thread waitforsharpturn();
|
|
return;
|
|
}
|
|
|
|
cancelallbut( "sharpturn" );
|
|
self.blockgoalpos = 1;
|
|
self.enablestop = 0;
|
|
|
|
if ( var_2 )
|
|
maps\mp\agents\alien\_alien_anim_utils::turntowardsvector( self getlookaheaddir() );
|
|
|
|
self scragentsetanimmode( "anim deltas" );
|
|
self scragentsetorientmode( "face angle abs", self.angles );
|
|
maps\mp\agents\_scriptedagents::playanimnatrateuntilnotetrack( var_3, var_1, self.moveplaybackrate, var_3, "code_move" );
|
|
self scragentsetorientmode( "face motion" );
|
|
self.blockgoalpos = 0;
|
|
continuemovement();
|
|
}
|
|
|
|
waitforstop()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "alienmove_endwait_stop" );
|
|
self waittill( "stop_soon" );
|
|
|
|
if ( !shoulddostopanim() || self.movemode == "walk" )
|
|
thread waitforstop();
|
|
else
|
|
{
|
|
var_0 = self getpathgoalpos();
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
{
|
|
thread waitforstop();
|
|
return;
|
|
}
|
|
|
|
var_1 = var_0 - self.origin;
|
|
var_2 = getstopendfacedir( var_0 );
|
|
var_3 = getstopanimstate();
|
|
|
|
if ( should_move_straight_ahead() )
|
|
var_4 = 0;
|
|
else
|
|
var_4 = getstopanimindex( var_3, var_2 );
|
|
|
|
var_5 = self getanimentry( var_3, var_4 );
|
|
var_6 = getmovedelta( var_5 );
|
|
var_7 = getangledelta( var_5 );
|
|
|
|
if ( length( var_1 ) + 48 < length( var_6 ) )
|
|
{
|
|
thread waitforstop();
|
|
return;
|
|
}
|
|
|
|
var_8 = getstopdata( var_0 );
|
|
var_9 = calcanimstartpos( var_8.pos, var_8.angles[1], var_6, var_7 );
|
|
var_10 = maps\mp\agents\_scriptedagents::droppostoground( var_9 );
|
|
|
|
if ( !isdefined( var_10 ) )
|
|
{
|
|
thread waitforstop();
|
|
return;
|
|
}
|
|
|
|
if ( !maps\mp\agents\_scriptedagents::canmovepointtopoint( var_8.pos, var_10 ) )
|
|
{
|
|
thread waitforstop();
|
|
return;
|
|
}
|
|
|
|
cancelallbut( "stop", "sharpturn" );
|
|
thread waitforpathset( "alienmove_endwait_pathsetwhilestopping", "alienmove_endwait_stop" );
|
|
var_11 = maps\mp\agents\_scriptedagents::getanimscalefactors( var_0 - self.origin, var_6 );
|
|
self scragentsetanimmode( "anim deltas" );
|
|
self scragentsetorientmode( "face angle abs", vectortoangles( var_1 ) );
|
|
self scragentsetanimscale( var_11.xy, var_11.z );
|
|
maps\mp\agents\_scriptedagents::playanimnuntilnotetrack( var_3, var_4, var_3, "end" );
|
|
self scragentsetanimscale( 1.0, 1.0 );
|
|
|
|
if ( should_move_straight_ahead() )
|
|
maps\mp\agents\alien\_alien_anim_utils::turntowardsvector( self getlookaheaddir() );
|
|
|
|
var_0 = self getpathgoalpos();
|
|
|
|
if ( distancesquared( self.origin, var_0 ) < 400.0 )
|
|
{
|
|
self scragentsetanimmode( "code_move_slide" );
|
|
self setanimstate( "idle" );
|
|
return;
|
|
return;
|
|
}
|
|
|
|
startmove();
|
|
continuemovement();
|
|
}
|
|
}
|
|
|
|
getstopendfacedir( var_0 )
|
|
{
|
|
if ( isdefined( self.enemy ) )
|
|
return self.enemy.origin - var_0;
|
|
|
|
return var_0 - self.origin;
|
|
}
|
|
|
|
getstopanimstate()
|
|
{
|
|
switch ( self.movemode )
|
|
{
|
|
case "jog":
|
|
case "run":
|
|
return "run_stop";
|
|
case "walk":
|
|
return "walk_stop";
|
|
default:
|
|
}
|
|
}
|
|
|
|
getstopanimindex( var_0, var_1 )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "walk_stop":
|
|
return 0;
|
|
case "run_stop":
|
|
return maps\mp\agents\_scriptedagents::getangleindexfromselfyaw( var_1 );
|
|
}
|
|
}
|
|
|
|
waitforpathset( var_0, var_1 )
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( var_0 );
|
|
var_2 = self scragentgetgoalpos();
|
|
self waittill( "path_set" );
|
|
var_3 = self scragentgetgoalpos();
|
|
|
|
if ( distancesquared( var_2, var_3 ) < 1 )
|
|
{
|
|
thread waitforpathset( var_0, var_1 );
|
|
return;
|
|
}
|
|
|
|
self notify( var_1 );
|
|
continuemovement();
|
|
}
|
|
|
|
waitforjumpsoon()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "alienmove_endwait_jumpsoon" );
|
|
self waittill( "traverse_soon" );
|
|
cancelallbut( "jumpsoon" );
|
|
var_0 = self getnegotiationstartnode();
|
|
var_1 = self getnegotiationendnode();
|
|
var_2 = var_1.origin - var_0.origin;
|
|
var_3 = maps\mp\agents\_scriptedagents::getangleindexfromselfyaw( var_1.origin - var_0.origin );
|
|
|
|
if ( !shoulddoleaparrivalanim( var_0, var_3 ) )
|
|
continuemovement();
|
|
else
|
|
{
|
|
var_4 = "jump_launch_arrival";
|
|
var_5 = self getanimentry( var_4, var_3 );
|
|
var_6 = getmovedelta( var_5 );
|
|
var_7 = getangledelta( var_5 );
|
|
|
|
if ( !maps\mp\agents\_scriptedagents::canmovepointtopoint( self.origin, var_0.origin ) && !self.oriented )
|
|
{
|
|
continuemovement();
|
|
return;
|
|
}
|
|
|
|
thread waitforpathset( "alienmove_endwait_pathsetwhilejumping", "alienmove_endwait_jumpsoon" );
|
|
self scragentsetanimmode( "anim deltas" );
|
|
self scragentsetorientmode( "face angle abs", self.angles );
|
|
var_8 = maps\mp\agents\_scriptedagents::getanimscalefactors( var_0.origin - self.origin, var_6 );
|
|
self scragentsetanimscale( var_8.xy, var_8.z );
|
|
maps\mp\agents\_scriptedagents::playanimnatrateuntilnotetrack( var_4, var_3, self.moveplaybackrate, "jump_launch_arrival", "anim_will_finish" );
|
|
var_9 = var_2;
|
|
var_10 = anglestoup( self.angles );
|
|
var_11 = vectorcross( var_10, var_9 );
|
|
var_9 = vectorcross( var_11, var_10 );
|
|
var_12 = ( 0, 0, 0 ) - var_11;
|
|
var_13 = axistoangles( var_9, var_12, var_10 );
|
|
self scragentsetorientmode( "face angle abs", var_13 );
|
|
self scragentsetanimscale( 1.0, 1.0 );
|
|
var_0 = self getnegotiationstartnode();
|
|
|
|
if ( isdefined( var_0 ) && distancesquared( self.origin, var_0.origin ) < 400.0 || self.oriented )
|
|
{
|
|
self scragentsetanimmode( "code_move_slide" );
|
|
return;
|
|
}
|
|
|
|
continuemovement();
|
|
}
|
|
}
|
|
|
|
setmoveanim( var_0 )
|
|
{
|
|
if ( var_0 == "run" )
|
|
{
|
|
var_1 = self getanimentrycount( "run" );
|
|
var_2 = [ 20, 80 ];
|
|
var_3 = maps\mp\alien\_utility::getrandomindex( var_2 );
|
|
self setanimstate( "run", var_3, self.moveplaybackrate );
|
|
}
|
|
else if ( var_0 == "jog" )
|
|
self setanimstate( "jog", undefined, self.moveplaybackrate );
|
|
else if ( var_0 == "walk" )
|
|
self setanimstate( "walk", undefined, self.moveplaybackrate );
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
cancelallbut( var_0, var_1 )
|
|
{
|
|
var_2 = [ "runwalk", "sharpturn", "stop", "pathsetwhilestopping", "jumpsoon", "pathsetwhilejumping", "pathset", "nearmiss", "dodgechance", "stuck" ];
|
|
var_3 = isdefined( var_0 );
|
|
var_4 = isdefined( var_1 );
|
|
|
|
foreach ( var_6 in var_2 )
|
|
{
|
|
if ( var_3 && var_6 == var_0 )
|
|
continue;
|
|
|
|
if ( var_4 && var_6 == var_1 )
|
|
continue;
|
|
|
|
self notify( "alienmove_endwait_" + var_6 );
|
|
}
|
|
}
|
|
|
|
getstopdata( var_0 )
|
|
{
|
|
var_1 = spawnstruct();
|
|
|
|
if ( isdefined( self.node ) )
|
|
{
|
|
var_1.pos = self.node.origin;
|
|
var_1.angles = self.node.angles;
|
|
}
|
|
else if ( isdefined( self.enemy ) )
|
|
{
|
|
var_1.pos = var_0;
|
|
var_1.angles = vectortoangles( self.enemy.origin - var_0 );
|
|
}
|
|
else
|
|
{
|
|
var_1.pos = var_0;
|
|
var_1.angles = self.angles;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
calcanimstartpos( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = var_1 - var_3;
|
|
var_5 = ( 0, var_4, 0 );
|
|
var_6 = anglestoforward( var_5 );
|
|
var_7 = anglestoright( var_5 );
|
|
var_8 = var_6 * var_2[0];
|
|
var_9 = var_7 * var_2[1];
|
|
return var_0 - var_8 + var_9;
|
|
}
|
|
|
|
onflashbanged()
|
|
{
|
|
dostumble();
|
|
}
|
|
|
|
ondamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
|
|
{
|
|
if ( isdefined( level.dlc_can_do_pain_override_func ) )
|
|
{
|
|
var_10 = [[ level.dlc_can_do_pain_override_func ]]( "move" );
|
|
|
|
if ( !var_10 )
|
|
return;
|
|
}
|
|
|
|
if ( maps\mp\alien\_utility::is_pain_available( var_1, var_4 ) )
|
|
dostumble( var_3, var_7, var_8, var_2, var_4, var_1 );
|
|
}
|
|
|
|
dostumble( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
self endon( "killanimscript" );
|
|
|
|
if ( self.playing_pain_animation )
|
|
return;
|
|
|
|
cancelallbut( undefined );
|
|
self.statelocked = 1;
|
|
self.playing_pain_animation = 1;
|
|
var_6 = var_0 & level.idflags_stun;
|
|
|
|
if ( var_4 == "MOD_MELEE" || var_6 )
|
|
{
|
|
var_7 = "pain_pushback";
|
|
var_8 = maps\mp\agents\alien\_alien_anim_utils::getpainanimindex( "push_back", var_1 );
|
|
var_9 = "pain_pushback";
|
|
}
|
|
else
|
|
{
|
|
var_7 = maps\mp\agents\alien\_alien_anim_utils::getpainanimstate( "run_stumble", var_3, var_6 );
|
|
var_8 = maps\mp\agents\alien\_alien_anim_utils::getpainanimindex( "run", var_1, var_2 );
|
|
var_9 = "run_stumble";
|
|
}
|
|
|
|
var_10 = self getanimentry( var_7, var_8 );
|
|
maps\mp\alien\_utility::always_play_pain_sound( var_10 );
|
|
maps\mp\alien\_utility::register_pain( var_10 );
|
|
self scragentsetorientmode( "face angle abs", self.angles );
|
|
self scragentsetanimmode( "anim deltas" );
|
|
maps\mp\agents\_scriptedagents::playanimnatrateuntilnotetrack( var_7, var_8, self.moveplaybackrate, var_9, "code_move" );
|
|
self.playing_pain_animation = 0;
|
|
self.statelocked = 0;
|
|
|
|
if ( shouldstartmove() )
|
|
startmove();
|
|
|
|
continuemovement();
|
|
}
|
|
|
|
waitfornearmiss( var_0 )
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "alienmove_endwait_nearmiss" );
|
|
var_1 = 0.5;
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::waittill_any( "bulletwhizby", "damage" );
|
|
|
|
if ( randomfloat( 1.0 ) < var_1 )
|
|
continue;
|
|
|
|
if ( !self.playing_pain_animation )
|
|
dododge();
|
|
}
|
|
}
|
|
|
|
waitfordodgechance()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "alienmove_endwait_dodgechance" );
|
|
var_0 = 0.0;
|
|
var_1 = randomintrange( 1000, 2000 );
|
|
var_2 = gettime();
|
|
|
|
for (;;)
|
|
{
|
|
wait 0.1;
|
|
|
|
if ( isalive( self.enemy ) )
|
|
{
|
|
var_3 = gettime();
|
|
var_4 = vectornormalize( self.origin - self.enemy.origin );
|
|
var_5 = anglestoforward( self.enemy.angles );
|
|
|
|
if ( vectordot( var_4, var_5 ) < 0.985 )
|
|
{
|
|
var_0 = 0.0;
|
|
continue;
|
|
}
|
|
|
|
var_0 = var_0 + ( var_3 - var_2 );
|
|
|
|
if ( distancesquared( self.origin, self.enemy.origin ) > 640000.0 )
|
|
continue;
|
|
|
|
var_6 = var_4 * -1.0;
|
|
var_7 = anglestoforward( self.angles );
|
|
|
|
if ( vectordot( var_6, var_7 ) < 0.766 )
|
|
continue;
|
|
|
|
if ( var_0 >= var_1 && !self.playing_pain_animation )
|
|
{
|
|
dododge( "dodgechance" );
|
|
var_0 = 0.0;
|
|
var_1 = randomintrange( 1000, 2000 );
|
|
}
|
|
|
|
var_2 = var_3;
|
|
}
|
|
}
|
|
}
|
|
|
|
candodge()
|
|
{
|
|
switch ( maps\mp\alien\_utility::get_alien_type() )
|
|
{
|
|
case "seeder":
|
|
case "mammoth":
|
|
case "spitter":
|
|
case "elite":
|
|
return 0;
|
|
default:
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
dododge( var_0 )
|
|
{
|
|
self endon( "killanimscript" );
|
|
var_1 = 1000;
|
|
|
|
if ( isdefined( self.last_dodge_time ) && gettime() - self.last_dodge_time < var_1 )
|
|
return;
|
|
|
|
if ( isalive( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 65536.0 )
|
|
return;
|
|
|
|
var_2 = get_primary_dodge_anim_state();
|
|
|
|
if ( common_scripts\utility::cointoss() )
|
|
{
|
|
if ( !trydodge( var_2 + "_left", var_0 ) )
|
|
trydodge( var_2 + "_right", var_0 );
|
|
}
|
|
else if ( !trydodge( var_2 + "_right", var_0 ) )
|
|
trydodge( var_2 + "_left", var_0 );
|
|
}
|
|
|
|
get_primary_dodge_anim_state()
|
|
{
|
|
switch ( self.movemode )
|
|
{
|
|
case "jog":
|
|
return "jog_dodge";
|
|
default:
|
|
return "run_dodge";
|
|
}
|
|
}
|
|
|
|
trydodge( var_0, var_1 )
|
|
{
|
|
var_2 = 0.5;
|
|
var_3 = maps\mp\agents\_scriptedagents::getrandomanimentry( var_0 );
|
|
var_4 = self getanimentry( var_0, var_3 );
|
|
var_5 = maps\mp\agents\_scriptedagents::getsafeanimmovedeltapercentage( var_4 );
|
|
var_5 = min( var_5, self.xyanimscale );
|
|
|
|
if ( var_5 < var_2 )
|
|
return 0;
|
|
|
|
self.last_dodge_time = gettime();
|
|
cancelallbut( var_1 );
|
|
self scragentsetanimmode( "anim deltas" );
|
|
self scragentsetorientmode( "face angle abs", self.angles );
|
|
self scragentsetanimscale( var_5, 1.0 );
|
|
maps\mp\agents\_scriptedagents::playanimuntilnotetrack( var_0, var_0, "end" );
|
|
self scragentsetanimscale( 1, 1 );
|
|
continuemovement();
|
|
return 1;
|
|
}
|
|
|
|
waitforstuck()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "alienmove_endwait_stuck" );
|
|
var_0 = 2000.0;
|
|
var_1 = gettime() + var_0;
|
|
var_2 = self.origin;
|
|
var_3 = 1.0;
|
|
|
|
for (;;)
|
|
{
|
|
var_4 = gettime();
|
|
var_5 = length( self.origin - var_2 );
|
|
|
|
if ( var_5 > var_3 )
|
|
var_1 = var_4 + var_0;
|
|
|
|
if ( var_1 <= var_4 )
|
|
{
|
|
stucklerp();
|
|
var_1 = var_4 + var_0;
|
|
break;
|
|
}
|
|
|
|
var_2 = self.origin;
|
|
wait 0.1;
|
|
}
|
|
|
|
continuemovement();
|
|
}
|
|
|
|
stucklerp()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "alienmove_endwait_stuck" );
|
|
self endon( "death" );
|
|
var_0 = 0.2;
|
|
cancelallbut( "stuck" );
|
|
var_1 = self getanimentry();
|
|
var_2 = getanimlength( var_1 );
|
|
var_3 = length( getmovedelta( var_1 ) );
|
|
var_4 = var_0 / var_2 * var_3;
|
|
var_5 = self getlookaheaddir();
|
|
var_6 = self.origin + var_5 * var_4;
|
|
self scragentsetphysicsmode( "noclip" );
|
|
self scragentsetorientmode( "face angle abs", vectortoangles( var_5 ) );
|
|
self scragentdoanimlerp( self.origin, var_6, var_0 );
|
|
wait( var_0 );
|
|
self setorigin( self.origin );
|
|
}
|
|
|
|
dowalkstart()
|
|
{
|
|
var_0 = "walk_start";
|
|
var_1 = maps\mp\agents\_scriptedagents::getrandomanimentry( var_0 );
|
|
self scragentsetanimmode( "anim deltas" );
|
|
self scragentsetorientmode( "face angle abs", self.angles );
|
|
self.blockgoalpos = 1;
|
|
maps\mp\agents\_scriptedagents::playanimnatrateuntilnotetrack( var_0, var_1, self.moveplaybackrate, var_0, "code_move" );
|
|
self scragentsetorientmode( "face motion" );
|
|
self.blockgoalpos = 0;
|
|
}
|
|
|
|
dorunstart()
|
|
{
|
|
var_0 = self getnegotiationstartnode();
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_1 = var_0.origin;
|
|
else
|
|
var_1 = self getpathgoalpos();
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
return;
|
|
|
|
if ( distancesquared( var_1, self.origin ) < 10000 )
|
|
return;
|
|
|
|
var_2 = self getlookaheaddir();
|
|
var_3 = self getvelocity();
|
|
|
|
if ( lengthsquared( var_3 ) > 16 )
|
|
{
|
|
var_4 = anglestoup( self.angles );
|
|
|
|
if ( vectordot( var_4, ( 0, 0, 1 ) ) < 0.707 )
|
|
{
|
|
var_5 = vectordot( var_4, var_2 );
|
|
|
|
if ( var_5 > 0.707 || var_5 < -0.707 )
|
|
return;
|
|
}
|
|
}
|
|
|
|
dostartmoveanim( "run_start" );
|
|
}
|
|
|
|
doleaptorunstart()
|
|
{
|
|
dostartmoveanim( "leap_to_run_start" );
|
|
}
|
|
|
|
should_move_straight_ahead()
|
|
{
|
|
switch ( maps\mp\alien\_utility::get_alien_type() )
|
|
{
|
|
case "seeder":
|
|
case "spitter":
|
|
case "minion":
|
|
return 1;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
should_do_sharp_turn()
|
|
{
|
|
switch ( maps\mp\alien\_utility::get_alien_type() )
|
|
{
|
|
case "seeder":
|
|
case "mammoth":
|
|
case "spitter":
|
|
case "minion":
|
|
case "elite":
|
|
return 0;
|
|
default:
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
dostartmoveanim( var_0 )
|
|
{
|
|
if ( should_move_straight_ahead() )
|
|
{
|
|
var_1 = 0;
|
|
maps\mp\agents\alien\_alien_anim_utils::turntowardsvector( self getlookaheaddir() );
|
|
}
|
|
else
|
|
var_1 = getstartmoveangleindex();
|
|
|
|
self scragentsetanimmode( "anim deltas" );
|
|
self scragentsetorientmode( "face angle abs", self.angles );
|
|
self.blockgoalpos = 1;
|
|
maps\mp\agents\_scriptedagents::playanimnatrateuntilnotetrack( var_0, var_1, self.moveplaybackrate, var_0, "code_move" );
|
|
self scragentsetorientmode( "face motion" );
|
|
self.blockgoalpos = 0;
|
|
}
|
|
|
|
candostartmove()
|
|
{
|
|
if ( !isdefined( self.traversecomplete ) && !isdefined( self.skipstartmove ) && ( !isdefined( self.disableexits ) || self.disableexits == 0 ) )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
getstartmovetype()
|
|
{
|
|
var_0 = self.previousanimstate;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "traverse_jump":
|
|
return "leap-to-run";
|
|
default:
|
|
switch ( self.movemode )
|
|
{
|
|
case "run":
|
|
return "run-start";
|
|
case "walk":
|
|
return "walk-start";
|
|
default:
|
|
return "run-start";
|
|
}
|
|
}
|
|
}
|
|
|
|
shoulddostopanim()
|
|
{
|
|
return isdefined( self.enablestop ) && self.enablestop == 1;
|
|
}
|
|
|
|
shoulddoleaparrivalanim( var_0, var_1 )
|
|
{
|
|
if ( var_0.type == "Jump" || var_0.type == "Jump Attack" )
|
|
return 1;
|
|
else if ( traversalstartfromidle( var_0.animscript ) )
|
|
return 1;
|
|
else if ( incominganglestraightahead( maps\mp\alien\_utility::get_alien_type(), var_1 ) )
|
|
return 0;
|
|
else
|
|
return 1;
|
|
}
|
|
|
|
incominganglestraightahead( var_0, var_1 )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "mammoth":
|
|
case "elite":
|
|
return var_1 == 4;
|
|
default:
|
|
return var_1 == 3 || var_1 == 4 || var_1 == 5;
|
|
}
|
|
}
|
|
|
|
traversalstartfromidle( var_0 )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "alien_climb_up_ledge_18_idle":
|
|
case "alien_climb_up_ledge_18_run":
|
|
case "climb_up_end_jump_side_r":
|
|
case "climb_up_end_jump_side_l":
|
|
case "alien_climb_up_over_56":
|
|
case "alien_climb_up":
|
|
return 1;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
candoturnanim( var_0 )
|
|
{
|
|
var_1 = 16;
|
|
var_2 = 10;
|
|
var_3 = ( 0, 0, 16 );
|
|
|
|
if ( !isdefined( self getpathgoalpos() ) )
|
|
return 0;
|
|
|
|
var_4 = getnotetracktimes( var_0, "code_move" );
|
|
var_5 = var_4[0];
|
|
var_6 = getmovedelta( var_0, 0, var_5 );
|
|
var_7 = self localtoworldcoords( var_6 );
|
|
var_7 = getgroundposition( var_7, self.radius );
|
|
|
|
if ( !isdefined( var_7 ) )
|
|
return 0;
|
|
|
|
var_8 = self aiphysicstracepassed( self.origin + var_3, var_7 + var_3, self.radius - var_2, self.height - var_1 );
|
|
|
|
if ( var_8 )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
shouldstartmove()
|
|
{
|
|
var_0 = getstartmoveangleindex();
|
|
return var_0 < 3 || var_0 > 5;
|
|
}
|
|
|
|
getstartmoveangleindex()
|
|
{
|
|
return maps\mp\agents\_scriptedagents::getangleindexfromselfyaw( self getlookaheaddir() );
|
|
}
|