2024-02-13 13:20:49 +01:00

1402 lines
38 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
corner_think( var_0, var_1 )
{
self endon( "killanimscript" );
self.animarrayfuncs["exposed"]["stand"] = ::set_standing_animarray_aiming;
self.animarrayfuncs["exposed"]["crouch"] = ::set_crouching_animarray_aiming;
self.covernode = self.node;
self.cornerdirection = var_0;
self.a.cornermode = "unknown";
self.a.aimidlethread = undefined;
animscripts\cover_behavior::turntomatchnodedirection( var_1 );
set_corner_anim_array();
self.isshooting = 0;
self.tracking = 0;
self.corneraiming = 0;
animscripts\track::setanimaimweight( 0 );
self.havegonetocover = 0;
var_2 = spawnstruct();
if ( !self.fixednode )
var_2.movetonearbycover = animscripts\cover_behavior::movetonearbycover;
var_2.mainloopstart = ::mainloopstart;
var_2.reload = ::cornerreload;
var_2.leavecoverandshoot = ::stepoutandshootenemy;
var_2.look = ::lookforenemy;
var_2.fastlook = ::fastlook;
var_2.idle = ::idle;
var_2.grenade = ::trythrowinggrenade;
var_2.grenadehidden = ::trythrowinggrenadestayhidden;
var_2.blindfire = ::blindfire;
animscripts\cover_behavior::main( var_2 );
}
end_script_corner()
{
self.stepoutyaw = undefined;
self.a.leanaim = undefined;
}
set_corner_anim_array()
{
if ( self.a.pose == "crouch" )
set_anim_array( "crouch" );
else if ( self.a.pose == "stand" )
set_anim_array( "stand" );
else
{
animscripts\utility::exitpronewrapper( 1 );
self.a.pose = "crouch";
set_anim_array( "crouch" );
}
}
shouldchangestanceforfun()
{
if ( !isdefined( self.enemy ) )
return 0;
if ( !isdefined( self.changestanceforfuntime ) )
self.changestanceforfuntime = gettime() + randomintrange( 5000, 20000 );
if ( gettime() > self.changestanceforfuntime )
{
self.changestanceforfuntime = gettime() + randomintrange( 5000, 20000 );
if ( isdefined( self.rambochance ) && self.a.pose == "stand" )
return 0;
self.a.prevattack = undefined;
return 1;
}
return 0;
}
mainloopstart()
{
var_0 = "stand";
if ( self.a.pose == "crouch" )
{
var_0 = "crouch";
if ( self.covernode doesnodeallowstance( "stand" ) )
{
if ( !self.covernode doesnodeallowstance( "crouch" ) || shouldchangestanceforfun() )
var_0 = "stand";
}
}
else if ( self.covernode doesnodeallowstance( "crouch" ) )
{
if ( !self.covernode doesnodeallowstance( "stand" ) || shouldchangestanceforfun() )
var_0 = "crouch";
}
if ( self.havegonetocover )
transitiontostance( var_0 );
else
{
if ( self.a.pose == var_0 )
{
if ( isdefined( self.cover ) && isdefined( self.cover.hidestate ) && self.cover.hidestate == "back" )
var_1 = animscripts\utility::animarray( "alert_idle_back" );
else
var_1 = animscripts\utility::animarray( "alert_idle" );
gotocover( var_1, 0.3, 0.4 );
}
else
{
var_2 = animscripts\utility::animarray( "stance_change" );
gotocover( var_2, 0.3, getanimlength( var_2 ) );
set_anim_array( var_0 );
}
self.havegonetocover = 1;
}
}
printyaws()
{
wait 2;
for (;;)
{
printyawtoenemy();
wait 0.05;
}
}
canseepointfromexposedatcorner( var_0, var_1 )
{
var_2 = var_1 animscripts\utility::getyawtoorigin( var_0 );
if ( var_2 > 60 || var_2 < -60 )
return 0;
if ( animscripts\utility::isnodecoverleft( var_1 ) && var_2 > 14 )
return 0;
if ( animscripts\utility::isnodecoverright( var_1 ) && var_2 < -12 )
return 0;
return 1;
}
shootposoutsidelegalyawrange()
{
if ( !isdefined( self.shootpos ) )
return 0;
var_0 = self.covernode animscripts\utility::getyawtoorigin( self.shootpos );
if ( self.a.cornermode == "over" )
return var_0 < self.leftaimlimit || self.rightaimlimit < var_0;
if ( self.cornerdirection == "up" )
return var_0 < -50 || var_0 > 50;
else if ( self.cornerdirection == "left" )
{
if ( self.a.cornermode == "B" )
return var_0 < 0 - self.abanglecutoff || var_0 > 14;
else if ( self.a.cornermode == "A" )
return var_0 > 0 - self.abanglecutoff;
else
return var_0 < -50 || var_0 > 8;
}
else if ( self.a.cornermode == "B" )
return var_0 > self.abanglecutoff || var_0 < -12;
else if ( self.a.cornermode == "A" )
return var_0 < self.abanglecutoff;
else
return var_0 > 50 || var_0 < -8;
}
getcornermode( var_0, var_1 )
{
var_2 = 0;
var_3 = 0;
if ( isdefined( var_1 ) )
var_3 = var_0 animscripts\utility::getyawtoorigin( var_1 );
var_4 = [];
if ( isdefined( var_0 ) && self.a.pose == "crouch" && ( var_3 > self.leftaimlimit && self.rightaimlimit > var_3 ) )
var_4 = var_0 getvalidcoverpeekouts();
if ( self.cornerdirection == "up" )
{
if ( animscripts\utility::isspaceai() )
{
var_5 = 0;
if ( isdefined( var_1 ) )
{
var_6 = anglestoup( self.angles );
var_5 = animscripts\combat_utility::getpitchtoorgfromorg( var_1, self geteye() + ( var_6[0] * 12, var_6[1] * 12, var_6[2] * 12 ) );
}
if ( canlean( var_5, -5, 80 ) )
{
var_2 = shouldlean();
var_4[var_4.size] = "lean";
var_4[var_4.size] = "lean";
}
if ( !var_2 )
var_4[var_4.size] = "A";
}
else
var_4[var_4.size] = "A";
}
else if ( self.cornerdirection == "left" )
{
if ( canlean( var_3, -40, 0 ) )
{
var_2 = shouldlean();
var_4[var_4.size] = "lean";
}
if ( !var_2 && var_3 < 14 )
{
if ( var_3 < 0 - self.abanglecutoff )
var_4[var_4.size] = "A";
else
var_4[var_4.size] = "B";
}
}
else
{
if ( canlean( var_3, 0, 40 ) )
{
var_2 = shouldlean();
var_4[var_4.size] = "lean";
}
if ( !var_2 && var_3 > -12 )
{
if ( var_3 > self.abanglecutoff )
var_4[var_4.size] = "A";
else
var_4[var_4.size] = "B";
}
}
return animscripts\combat_utility::getrandomcovermode( var_4 );
}
getbeststepoutpos()
{
var_0 = 0;
if ( animscripts\utility::cansuppressenemy() )
var_0 = self.covernode animscripts\utility::getyawtoorigin( animscripts\utility::getenemysightpos() );
else if ( self.doingambush && isdefined( self.shootpos ) )
var_0 = self.covernode animscripts\utility::getyawtoorigin( self.shootpos );
if ( self.a.cornermode == "lean" )
return "lean";
if ( self.a.cornermode == "over" )
return "over";
else if ( self.a.cornermode == "B" )
{
if ( self.cornerdirection == "left" )
{
if ( var_0 < 0 - self.abanglecutoff )
return "A";
}
else if ( self.cornerdirection == "right" )
{
if ( var_0 > self.abanglecutoff )
return "A";
}
return "B";
}
else if ( self.a.cornermode == "A" )
{
if ( self.cornerdirection == "up" )
return "A";
else if ( self.cornerdirection == "left" )
{
if ( var_0 > 0 - self.abanglecutoff )
return "B";
}
else if ( self.cornerdirection == "right" )
{
if ( var_0 < self.abanglecutoff )
return "B";
}
return "A";
}
}
changestepoutpos()
{
self endon( "killanimscript" );
var_0 = getbeststepoutpos();
if ( var_0 == self.a.cornermode )
return 0;
self.changingcoverpos = 1;
self notify( "done_changing_cover_pos" );
var_1 = self.a.cornermode + "_to_" + var_0;
var_2 = animscripts\utility::animarraypickrandom( var_1 );
if ( animscripts\utility::isspaceai() && ( var_1 == "A_to_B" || var_1 == "B_to_A" ) )
return 0;
var_3 = !self.swimmer;
var_4 = getpredictedpathmidpoint();
if ( !self maymovetopoint( var_4, var_3 ) )
return 0;
if ( !self maymovefrompointtopoint( var_4, animscripts\utility::getanimendpos( var_2 ), var_3 ) )
return 0;
animscripts\combat_utility::endaimidlethread();
stopaiming( 0.3 );
var_5 = self.a.pose;
self setanimlimited( animscripts\utility::animarray( "straight_level" ), 0, 0.2 );
self setflaggedanimknob( "changeStepOutPos", var_2, 1, 0.2, 1.2 );
corner_playcornerfacialanim( var_2 );
thread donotetrackswithendon( "changeStepOutPos" );
var_6 = animhasnotetrack( var_2, "start_aim" );
if ( var_6 )
self waittillmatch( "changeStepOutPos", "start_aim" );
else
self waittillmatch( "changeStepOutPos", "end" );
thread startaiming( undefined, 0, 0.3 );
if ( var_6 )
self waittillmatch( "changeStepOutPos", "end" );
self clearanim( var_2, 0.1 );
self.a.cornermode = var_0;
self.changingcoverpos = 0;
self.coverposestablishedtime = gettime();
if ( self.a.pose != var_5 )
set_anim_array( self.a.pose );
thread changeaiming( undefined, 1, 0.3 );
return 1;
}
canlean( var_0, var_1, var_2 )
{
if ( self.a.neverlean )
return 0;
return var_1 <= var_0 && var_0 <= var_2;
}
shouldlean()
{
if ( self.team == "allies" )
return 1;
if ( animscripts\utility::ispartiallysuppressedwrapper() )
return 1;
return 0;
}
donotetrackswithendon( var_0 )
{
self endon( "killanimscript" );
animscripts\shared::donotetracks( var_0 );
}
startaiming( var_0, var_1, var_2 )
{
self.corneraiming = 1;
if ( self.a.cornermode == "lean" )
self.a.leanaim = 1;
else
self.a.leanaim = undefined;
setaimingparams( var_0, var_1, var_2 );
}
changeaiming( var_0, var_1, var_2 )
{
if ( self.a.cornermode == "lean" )
self.a.leanaim = 1;
else
self.a.leanaim = undefined;
setaimingparams( var_0, var_1, var_2 );
}
#using_animtree("generic_human");
stopaiming( var_0 )
{
self.corneraiming = 0;
self clearanim( %add_fire, var_0 );
animscripts\track::setanimaimweight( 0, var_0 );
self.facialidx = undefined;
self clearanim( %head, 0.2 );
}
setaimingparams( var_0, var_1, var_2 )
{
self.spot = var_0;
self setanimlimited( %exposed_modern, 1, var_2 );
self setanimlimited( %exposed_aiming, 1, var_2 );
self setanimlimited( %add_idle, 1, var_2 );
animscripts\track::setanimaimweight( 1, var_2 );
corner_playaimfacialanim( undefined );
var_3 = undefined;
if ( isdefined( self.a.array["lean_aim_straight"] ) )
var_3 = self.a.array["lean_aim_straight"];
thread animscripts\combat_utility::aimidlethread();
if ( isdefined( self.a.leanaim ) )
{
self setanimlimited( var_3, 1, var_2 );
self setanimlimited( animscripts\utility::animarray( "straight_level" ), 0, 0 );
self setanimknoblimited( animscripts\utility::animarray( "lean_aim_left" ), 1, var_2 );
self setanimknoblimited( animscripts\utility::animarray( "lean_aim_right" ), 1, var_2 );
self setanimknoblimited( animscripts\utility::animarray( "lean_aim_up" ), 1, var_2 );
self setanimknoblimited( animscripts\utility::animarray( "lean_aim_down" ), 1, var_2 );
}
else if ( var_1 )
{
self setanimlimited( animscripts\utility::animarray( "straight_level" ), 1, var_2 );
if ( isdefined( var_3 ) )
self setanimlimited( var_3, 0, 0 );
self setanimknoblimited( animscripts\utility::animarray( "add_aim_up" ), 1, var_2 );
self setanimknoblimited( animscripts\utility::animarray( "add_aim_down" ), 1, var_2 );
self setanimknoblimited( animscripts\utility::animarray( "add_aim_left" ), 1, var_2 );
self setanimknoblimited( animscripts\utility::animarray( "add_aim_right" ), 1, var_2 );
}
else
{
self setanimlimited( animscripts\utility::animarray( "straight_level" ), 0, var_2 );
if ( isdefined( var_3 ) )
self setanimlimited( var_3, 0, 0 );
self setanimknoblimited( animscripts\utility::animarray( "add_turn_aim_up" ), 1, var_2 );
self setanimknoblimited( animscripts\utility::animarray( "add_turn_aim_down" ), 1, var_2 );
self setanimknoblimited( animscripts\utility::animarray( "add_turn_aim_left" ), 1, var_2 );
self setanimknoblimited( animscripts\utility::animarray( "add_turn_aim_right" ), 1, var_2 );
}
}
stepoutandhidespeed()
{
if ( self.a.cornermode == "over" )
return 1;
return animscripts\combat_utility::randomfasteranimspeed();
}
stepout()
{
self.a.cornermode = "alert";
if ( self.goalradius < 64 )
self.goalradius = 64;
setdefaultcorneranimmode();
if ( self.a.pose == "stand" )
self.abanglecutoff = 38;
else
self.abanglecutoff = 31;
var_0 = self.a.pose;
set_anim_array( var_0 );
animscripts\combat::set_default_aim_limits();
var_1 = "none";
if ( animscripts\utility::hasenemysightpos() )
var_1 = getcornermode( self.covernode, animscripts\utility::getenemysightpos() );
else
var_1 = getcornermode( self.covernode );
if ( !isdefined( var_1 ) )
return 0;
var_2 = "alert_to_" + var_1;
if ( !animscripts\utility::animarrayanyexist( var_2 ) )
return 0;
var_3 = animscripts\utility::animarraypickrandom( var_2 );
if ( var_1 == "lean" && !ispeekoutposclear() )
return 0;
if ( var_1 != "over" && !ispathclear( var_3, var_1 != "lean" ) )
return 0;
self.a.cornermode = var_1;
self.a.prevattack = var_1;
if ( self.a.cornermode == "lean" )
animscripts\combat::set_default_aim_limits( self.covernode );
if ( var_1 == "A" || var_1 == "B" )
self.a.special = "cover_" + self.cornerdirection + "_" + self.a.pose + "_" + var_1;
else if ( var_1 == "over" )
self.a.special = "cover_crouch_aim";
else
self.a.special = "none";
self.keepclaimednodeifvalid = 1;
var_4 = 0;
self.changingcoverpos = 1;
self notify( "done_changing_cover_pos" );
var_5 = stepoutandhidespeed();
self.pushable = 0;
self setflaggedanimknoballrestart( "stepout", var_3, %root, 1, 0.2, var_5 );
corner_playcornerfacialanim( var_3 );
thread donotetrackswithendon( "stepout" );
var_4 = animhasnotetrack( var_3, "start_aim" );
if ( var_4 )
{
self.stepoutyaw = self.angles[1] + getangledelta( var_3, 0, 1 );
self waittillmatch( "stepout", "start_aim" );
}
else
self waittillmatch( "stepout", "end" );
if ( var_1 == "B" && common_scripts\utility::cointoss() && self.cornerdirection == "right" )
self.a.special = "corner_right_martyrdom";
set_anim_array_aiming( var_0 );
var_6 = var_1 == "over" || animscripts\utility::isspaceai();
startaiming( undefined, var_6, 0.3 );
thread animscripts\track::trackshootentorpos();
if ( var_4 )
{
self waittillmatch( "stepout", "end" );
self.stepoutyaw = undefined;
}
changeaiming( undefined, 1, 0.2 );
self clearanim( %cover, 0.1 );
self clearanim( %corner, 0.1 );
self.changingcoverpos = 0;
self.coverposestablishedtime = gettime();
self.pushable = 1;
return 1;
}
stepoutandshootenemy()
{
self.keepclaimednodeifvalid = 1;
if ( isdefined( self.rambochance ) && randomfloat( 1 ) < self.rambochance )
{
if ( rambo() )
return 1;
}
if ( !stepout() )
return 0;
shootastold();
if ( isdefined( self.shootpos ) )
{
var_0 = lengthsquared( self.origin - self.shootpos );
if ( animscripts\utility::usingrocketlauncher() && animscripts\utility::shoulddroprocketlauncher( var_0 ) )
{
if ( self.a.pose == "stand" )
animscripts\shared::throwdownweapon( animscripts\utility::lookupanim( "combat", "drop_rpg_stand" ) );
else
animscripts\shared::throwdownweapon( animscripts\utility::lookupanim( "combat", "drop_rpg_crouch" ) );
thread runcombat();
return;
}
}
returntocover();
self.keepclaimednodeifvalid = 0;
return 1;
}
haventramboedwithintime( var_0 )
{
if ( !isdefined( self.lastrambotime ) )
return 1;
return gettime() - self.lastrambotime > var_0 * 1000;
}
rambo()
{
if ( !animscripts\utility::hasenemysightpos() )
return 0;
var_0 = 0;
var_1 = 90;
var_2 = self.covernode animscripts\utility::getyawtoorigin( animscripts\utility::getenemysightpos() );
if ( self.cornerdirection == "left" )
var_2 = 0 - var_2;
if ( var_2 > 30 )
{
var_1 = 45;
if ( self.cornerdirection == "left" )
var_0 = 45;
else
var_0 = -45;
}
var_3 = "rambo" + var_1;
if ( !animscripts\utility::animarrayanyexist( var_3 ) )
return 0;
var_4 = animscripts\utility::animarraypickrandom( var_3 );
var_5 = getpredictedpathmidpoint( 48 );
if ( !self maymovetopoint( var_5, !self.swimmer ) )
return 0;
self.coverposestablishedtime = gettime();
setdefaultcorneranimmode();
self.keepclaimednodeifvalid = 1;
self.isrambo = 1;
self.a.prevattack = "rambo";
self.changingcoverpos = 1;
thread animscripts\shared::ramboaim( var_0 );
self setflaggedanimknoballrestart( "rambo", var_4, %body, 1, 0, 1 );
corner_playcornerfacialanim( var_4 );
animscripts\shared::donotetracks( "rambo" );
self notify( "rambo_aim_end" );
self.changingcoverpos = 0;
self.keepclaimednodeifvalid = 0;
self.lastrambotime = gettime();
self.changingcoverpos = 0;
self.isrambo = undefined;
return 1;
}
shootastold()
{
maps\_gameskill::didsomethingotherthanshooting();
for (;;)
{
for (;;)
{
if ( isdefined( self.shouldreturntocover ) )
break;
if ( !isdefined( self.shootpos ) )
{
self waittill( "do_slow_things" );
waittillframeend;
if ( isdefined( self.shootpos ) )
continue;
break;
}
if ( !self.bulletsinclip )
break;
if ( shootposoutsidelegalyawrange() )
{
if ( !changestepoutpos() )
{
if ( getbeststepoutpos() == self.a.cornermode )
break;
shootuntilshootbehaviorchangefortime( 0.2 );
continue;
}
if ( shootposoutsidelegalyawrange() )
break;
}
else
{
shootuntilshootbehaviorchange_corner( 1 );
self clearanim( %add_fire, 0.2 );
}
}
if ( canreturntocover( self.a.cornermode != "lean" ) )
break;
if ( shootposoutsidelegalyawrange() && changestepoutpos() )
continue;
shootuntilshootbehaviorchangefortime( 0.2 );
}
}
shootuntilshootbehaviorchangefortime( var_0 )
{
thread notifystopshootingaftertime( var_0 );
var_1 = gettime();
shootuntilshootbehaviorchange_corner( 0 );
self notify( "stopNotifyStopShootingAfterTime" );
var_2 = ( gettime() - var_1 ) / 1000;
if ( var_2 < var_0 )
wait( var_0 - var_2 );
}
notifystopshootingaftertime( var_0 )
{
self endon( "killanimscript" );
self endon( "stopNotifyStopShootingAfterTime" );
wait( var_0 );
self notify( "stopShooting" );
}
shootuntilshootbehaviorchange_corner( var_0 )
{
self endon( "return_to_cover" );
if ( var_0 )
thread anglerangethread();
thread animscripts\combat_utility::aimidlethread();
animscripts\combat_utility::shootuntilshootbehaviorchange();
}
anglerangethread()
{
self endon( "killanimscript" );
self notify( "newAngleRangeCheck" );
self endon( "newAngleRangeCheck" );
self endon( "take_cover_at_corner" );
for (;;)
{
if ( shootposoutsidelegalyawrange() )
break;
wait 0.1;
}
self notify( "stopShooting" );
}
showstate()
{
self.enemy endon( "death" );
self endon( "enemy" );
self endon( "stopshowstate" );
for (;;)
wait 0.05;
}
canreturntocover( var_0 )
{
var_1 = !self.swimmer;
if ( var_0 )
{
var_2 = getpredictedpathmidpoint();
if ( !self maymovetopoint( var_2, var_1 ) )
return 0;
return self maymovefrompointtopoint( var_2, self.covernode.origin, var_1 );
}
else
return self maymovetopoint( self.covernode.origin, var_1 );
}
returntocover()
{
animscripts\combat_utility::endfireandanimidlethread();
var_0 = animscripts\utility::issuppressedwrapper();
self notify( "take_cover_at_corner" );
self.changingcoverpos = 1;
self notify( "done_changing_cover_pos" );
var_1 = self.a.cornermode + "_to_alert";
var_2 = animscripts\utility::animarraypickrandom( var_1 );
stopaiming( 0.3 );
var_3 = 0;
if ( self.a.cornermode != "lean" && var_0 && animscripts\utility::animarrayanyexist( var_1 + "_reload" ) && randomfloat( 100 ) < 75 )
{
var_2 = animscripts\utility::animarraypickrandom( var_1 + "_reload" );
var_3 = 1;
}
var_4 = stepoutandhidespeed();
if ( animscripts\utility::isspaceai() )
self clearanim( %exposed_modern, 0.2 );
else
self clearanim( %body, 0.1 );
self setflaggedanimrestart( "hide", var_2, 1, 0.1, var_4 );
corner_playcornerfacialanim( var_2 );
animscripts\shared::donotetracks( "hide" );
if ( var_3 )
animscripts\weaponlist::refillclip();
self.changingcoverpos = 0;
if ( self.cornerdirection == "up" )
self.a.special = "cover_up";
else if ( self.cornerdirection == "left" )
self.a.special = "cover_left";
else
self.a.special = "cover_right";
self.keepclaimednodeifvalid = 0;
self clearanim( var_2, 0.2 );
}
blindfire()
{
if ( !animscripts\utility::animarrayanyexist( "blind_fire" ) )
return 0;
setdefaultcorneranimmode();
self.keepclaimednodeifvalid = 1;
var_0 = animscripts\utility::animarraypickrandom( "blind_fire" );
self setflaggedanimknoballrestart( "blindfire", var_0, %body, 1, 0, 1 );
corner_playcornerfacialanim( var_0 );
animscripts\shared::donotetracks( "blindfire" );
self.keepclaimednodeifvalid = 0;
return 1;
}
linethread( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
var_2 = ( 1, 1, 1 );
for ( var_3 = 0; var_3 < 100; var_3++ )
wait 0.05;
}
trythrowinggrenadestayhidden( var_0 )
{
return trythrowinggrenade( var_0, 1 );
}
trythrowinggrenade( var_0, var_1 )
{
if ( !self maymovetopoint( getpredictedpathmidpoint() ) )
return 0;
if ( isdefined( self.dontevershoot ) || isdefined( var_0.dontattackme ) )
return 0;
var_2 = undefined;
if ( isdefined( self.rambochance ) && randomfloat( 1 ) < self.rambochance )
{
if ( isdefined( self.a.array["grenade_rambo"] ) )
var_2 = animscripts\utility::animarray( "grenade_rambo" );
}
if ( !isdefined( var_2 ) )
{
if ( isdefined( var_1 ) && var_1 )
{
if ( !isdefined( self.a.array["grenade_safe"] ) )
return 0;
var_2 = animscripts\utility::animarray( "grenade_safe" );
}
else
{
if ( !isdefined( self.a.array["grenade_exposed"] ) )
return 0;
var_2 = animscripts\utility::animarray( "grenade_exposed" );
}
}
setdefaultcorneranimmode();
self.keepclaimednodeifvalid = 1;
var_3 = animscripts\combat_utility::trygrenade( var_0, var_2 );
self.keepclaimednodeifvalid = 0;
return var_3;
}
printyawtoenemy()
{
}
lookforenemy( var_0 )
{
if ( !isdefined( self.a.array["alert_to_look"] ) )
return 0;
setdefaultcorneranimmode();
self.keepclaimednodeifvalid = 1;
if ( !peekout() )
return 0;
animscripts\shared::playlookanimation( animscripts\utility::animarray( "look_idle" ), var_0, ::canstoppeeking );
var_1 = undefined;
if ( animscripts\utility::issuppressedwrapper() )
var_1 = animscripts\utility::animarray( "look_to_alert_fast" );
else
var_1 = animscripts\utility::animarray( "look_to_alert" );
self setflaggedanimknoballrestart( "looking_end", var_1, %body, 1, 0.1, 1.0 );
corner_playcornerfacialanim( var_1 );
animscripts\shared::donotetracks( "looking_end" );
setdefaultcorneranimmode();
self.keepclaimednodeifvalid = 0;
return 1;
}
ispeekoutposclear()
{
var_0 = self.covernode.angles;
if ( animscripts\utility::isspaceai() )
var_0 = animscripts\utility::gettruenodeangles( self.covernode );
var_1 = self geteye();
var_2 = anglestoright( var_0 );
var_3 = anglestoup( var_0 );
if ( self.cornerdirection == "right" )
var_1 = var_1 + var_2 * 30;
else if ( self.cornerdirection == "left" )
var_1 = var_1 - var_2 * 30;
else
var_1 = var_1 + var_3 * 30;
var_4 = var_1 + anglestoforward( var_0 ) * 30;
return sighttracepassed( var_1, var_4, 1, self );
}
peekout()
{
if ( isdefined( self.covernode.script_dontpeek ) )
return 0;
if ( isdefined( self.nextpeekoutattempttime ) && gettime() < self.nextpeekoutattempttime )
return 0;
if ( !ispeekoutposclear() )
{
self.nextpeekoutattempttime = gettime() + 3000;
return 0;
}
var_0 = animscripts\utility::animarray( "alert_to_look" );
self setflaggedanimknoball( "looking_start", var_0, %body, 1, 0.2, 1 );
corner_playcornerfacialanim( var_0 );
animscripts\shared::donotetracks( "looking_start" );
return 1;
}
canstoppeeking()
{
return self maymovetopoint( self.covernode.origin, !self.swimmer );
}
fastlook()
{
return 0;
}
cornerreload()
{
var_0 = animscripts\utility::animarraypickrandom( "reload" );
self setflaggedanimknobrestart( "cornerReload", var_0, 1, 0.2 );
corner_playcornerfacialanim( var_0 );
animscripts\shared::donotetracks( "cornerReload" );
self notify( "abort_reload" );
animscripts\weaponlist::refillclip();
self setanimrestart( animscripts\utility::animarray( "alert_idle" ), 1, 0.2 );
self clearanim( var_0, 0.2 );
return 1;
}
ispathclear( var_0, var_1 )
{
var_2 = !self.swimmer;
if ( var_1 )
{
var_3 = getpredictedpathmidpoint();
if ( !self maymovetopoint( var_3, var_2 ) )
return 0;
if ( self.swimmer )
return 1;
return self maymovefrompointtopoint( var_3, animscripts\utility::getanimendpos( var_0 ), var_2 );
}
else
{
if ( self.swimmer )
return 1;
return self maymovetopoint( animscripts\utility::getanimendpos( var_0 ), var_2 );
}
}
getpredictedpathmidpoint( var_0 )
{
var_1 = self.covernode.angles;
var_2 = anglestoright( var_1 );
if ( !isdefined( var_0 ) )
var_0 = 36;
var_3 = self.script;
if ( var_3 == "cover_multi" )
{
if ( self.cover.state == "right" )
var_3 = "cover_right";
else if ( self.cover.state == "left" )
var_3 = "cover_left";
}
if ( var_3 == "cover_swim_up" )
{
var_4 = anglestoup( var_1 );
return self.covernode.origin + var_4 * var_0;
}
switch ( var_3 )
{
case "cover_swim_left":
case "cover_left":
var_2 = var_2 * ( 0 - var_0 );
break;
case "cover_swim_right":
case "cover_right":
var_2 = var_2 * var_0;
break;
default:
}
return self.covernode.origin + ( var_2[0], var_2[1], 0 );
}
idle()
{
self endon( "end_idle" );
for (;;)
{
var_0 = randomint( 2 ) == 0 && isdefined( self.a.array["alert_idle_twitch"] ) && animscripts\utility::animarrayanyexist( "alert_idle_twitch" );
if ( var_0 )
var_1 = animscripts\utility::animarraypickrandom( "alert_idle_twitch" );
else
var_1 = animscripts\utility::animarray( "alert_idle" );
playidleanimation( var_1, var_0 );
}
}
flinch()
{
if ( !animscripts\utility::animarrayanyexist( "alert_idle_flinch" ) )
return 0;
playidleanimation( animscripts\utility::animarraypickrandom( "alert_idle_flinch" ), 1 );
return 1;
}
playidleanimation( var_0, var_1 )
{
if ( var_1 )
self setflaggedanimknoballrestart( "idle", var_0, %body, 1, 0.1, 1 );
else
self setflaggedanimknoball( "idle", var_0, %body, 1, 0.1, 1 );
corner_playcornerfacialanim( var_0 );
animscripts\shared::donotetracks( "idle" );
}
set_anim_array( var_0 )
{
[[ self.animarrayfuncs["hiding"][var_0] ]]();
[[ self.animarrayfuncs["exposed"][var_0] ]]();
}
set_anim_array_aiming( var_0 )
{
[[ self.animarrayfuncs["exposed"][var_0] ]]();
}
transitiontostance( var_0 )
{
if ( self.a.pose == var_0 )
{
set_anim_array( var_0 );
return;
}
var_1 = animscripts\utility::animarray( "stance_change" );
self setflaggedanimknoballrestart( "changeStance", var_1, %body );
corner_playcornerfacialanim( var_1 );
set_anim_array( var_0 );
animscripts\shared::donotetracks( "changeStance" );
wait 0.2;
}
gotocover( var_0, var_1, var_2 )
{
var_3 = animscripts\utility::getnodedirection();
var_4 = animscripts\utility::getclaimednode();
var_5 = var_3 + self.hideyawoffset;
if ( animscripts\utility::isspaceai() )
self notify( "force_space_rotation_update", 0, 0 );
else
self orientmode( "face angle", var_5 );
self animmode( "normal" );
if ( isdefined( var_4 ) )
thread animscripts\shared::movetonodeovertime( var_4, var_1 );
self setflaggedanimknoballrestart( "coveranim", var_0, %body, 1, var_1 );
corner_playcornerfacialanim( var_0 );
animscripts\notetracks::donotetracksfortime( var_2, "coveranim" );
while ( animscripts\utility::absangleclamp180( self.angles[1] - var_5 ) > 1 )
{
animscripts\notetracks::donotetracksfortime( 0.1, "coveranim" );
var_3 = animscripts\utility::getnodedirection();
var_5 = var_3 + self.hideyawoffset;
}
setdefaultcorneranimmode();
if ( self.cornerdirection == "left" )
self.a.special = "cover_left";
else if ( self.cornerdirection == "right" )
self.a.special = "cover_right";
else
self.a.special = "cover_up";
}
drawoffset()
{
self endon( "killanimscript" );
for (;;)
wait 0.05;
}
set_standing_animarray_aiming()
{
if ( self.swimmer && isdefined( self.node ) )
{
set_swimming_animarray_aiming();
return;
}
if ( !isdefined( self.a.array ) )
{
}
var_0 = animscripts\utility::lookupanimarray( "default_stand" );
self.a.array["add_aim_up"] = var_0["add_aim_up"];
self.a.array["add_aim_down"] = var_0["add_aim_down"];
self.a.array["add_aim_left"] = var_0["add_aim_left"];
self.a.array["add_aim_right"] = var_0["add_aim_right"];
self.a.array["add_turn_aim_up"] = var_0["add_turn_aim_up"];
self.a.array["add_turn_aim_down"] = var_0["add_turn_aim_down"];
self.a.array["add_turn_aim_left"] = var_0["add_turn_aim_left"];
self.a.array["add_turn_aim_right"] = var_0["add_turn_aim_right"];
self.a.array["straight_level"] = var_0["straight_level"];
if ( self.a.cornermode == "lean" )
{
var_1 = self.a.array["lean_fire"];
var_2 = self.a.array["lean_single"];
self.a.array["fire"] = var_1;
self.a.array["single"] = animscripts\utility::array( var_2 );
self.a.array["semi2"] = var_2;
self.a.array["semi3"] = var_2;
self.a.array["semi4"] = var_2;
self.a.array["semi5"] = var_2;
self.a.array["burst2"] = var_1;
self.a.array["burst3"] = var_1;
self.a.array["burst4"] = var_1;
self.a.array["burst5"] = var_1;
self.a.array["burst6"] = var_1;
}
else
{
self.a.array["fire"] = var_0["fire_corner"];
self.a.array["semi2"] = var_0["semi2"];
self.a.array["semi3"] = var_0["semi3"];
self.a.array["semi4"] = var_0["semi4"];
self.a.array["semi5"] = var_0["semi5"];
if ( animscripts\utility::weapon_pump_action_shotgun() )
self.a.array["single"] = animscripts\utility::lookupanim( "shotgun_stand", "single" );
else
self.a.array["single"] = var_0["single"];
self.a.array["burst2"] = var_0["burst2"];
self.a.array["burst3"] = var_0["burst3"];
self.a.array["burst4"] = var_0["burst4"];
self.a.array["burst5"] = var_0["burst5"];
self.a.array["burst6"] = var_0["burst6"];
}
self.a.array["exposed_idle"] = var_0["exposed_idle"];
}
set_crouching_animarray_aiming()
{
if ( self.swimmer && isdefined( self.node ) )
{
set_swimming_animarray_aiming();
return;
}
if ( !isdefined( self.a.array ) )
{
}
var_0 = animscripts\utility::lookupanimarray( "default_crouch" );
var_1["add_aim_up"] = animscripts\utility::lookupanim( "cover_crouch", "add_aim_up" );
var_2["add_aim_up"] = animscripts\utility::lookupanim( "cover_crouch", "add_aim_up" );
var_3[0] = animscripts\utility::lookupanim( "cover_crouch", "add_aim_up" );
if ( self.a.cornermode == "over" )
{
self.a.array["add_aim_up"] = animscripts\utility::lookupanim( "cover_crouch", "add_aim_up" );
self.a.array["add_aim_down"] = animscripts\utility::lookupanim( "cover_crouch", "add_aim_down" );
self.a.array["add_aim_left"] = animscripts\utility::lookupanim( "cover_crouch", "add_aim_left" );
self.a.array["add_aim_right"] = animscripts\utility::lookupanim( "cover_crouch", "add_aim_right" );
self.a.array["straight_level"] = animscripts\utility::lookupanim( "cover_crouch", "straight_level" );
self.a.array["exposed_idle"] = animscripts\utility::lookupanim( "default_stand", "exposed_idle" );
return;
}
if ( self.a.cornermode == "lean" )
{
var_4 = self.a.array["lean_fire"];
var_5 = self.a.array["lean_single"];
self.a.array["fire"] = var_4;
self.a.array["single"] = animscripts\utility::array( var_5 );
self.a.array["semi2"] = var_5;
self.a.array["semi3"] = var_5;
self.a.array["semi4"] = var_5;
self.a.array["semi5"] = var_5;
self.a.array["burst2"] = var_4;
self.a.array["burst3"] = var_4;
self.a.array["burst4"] = var_4;
self.a.array["burst5"] = var_4;
self.a.array["burst6"] = var_4;
}
else
{
self.a.array["fire"] = var_0["fire"];
self.a.array["semi2"] = var_0["semi2"];
self.a.array["semi3"] = var_0["semi3"];
self.a.array["semi4"] = var_0["semi4"];
self.a.array["semi5"] = var_0["semi5"];
if ( animscripts\utility::weapon_pump_action_shotgun() )
self.a.array["single"] = animscripts\utility::lookupanim( "shotgun_crouch", "single" );
else
self.a.array["single"] = var_0["single"];
self.a.array["burst2"] = var_0["burst2"];
self.a.array["burst3"] = var_0["burst3"];
self.a.array["burst4"] = var_0["burst4"];
self.a.array["burst5"] = var_0["burst5"];
self.a.array["burst6"] = var_0["burst6"];
}
self.a.array["add_aim_up"] = var_0["add_aim_up"];
self.a.array["add_aim_down"] = var_0["add_aim_down"];
self.a.array["add_aim_left"] = var_0["add_aim_left"];
self.a.array["add_aim_right"] = var_0["add_aim_right"];
self.a.array["add_turn_aim_up"] = var_0["add_turn_aim_up"];
self.a.array["add_turn_aim_down"] = var_0["add_turn_aim_down"];
self.a.array["add_turn_aim_left"] = var_0["add_turn_aim_left"];
self.a.array["add_turn_aim_right"] = var_0["add_turn_aim_right"];
self.a.array["straight_level"] = var_0["straight_level"];
self.a.array["exposed_idle"] = var_0["exposed_idle"];
}
set_swimming_animarray_aiming()
{
if ( !isdefined( self.a.array ) )
{
}
var_0 = [];
if ( self.approachtype == "cover_corner_r" )
var_0 = animscripts\swim::getswimanim( "cover_corner_r" );
else if ( self.approachtype == "cover_corner_l" )
var_0 = animscripts\swim::getswimanim( "cover_corner_l" );
else if ( self.approachtype == "cover_u" )
var_0 = animscripts\swim::getswimanim( "cover_u" );
else if ( self.approachtype == "exposed" )
var_0 = animscripts\swim::getswimanim( "exposed" );
else
{
}
self.a.array["add_aim_up"] = var_0["add_aim_up"];
self.a.array["add_aim_down"] = var_0["add_aim_down"];
self.a.array["add_aim_left"] = var_0["add_aim_left"];
self.a.array["add_aim_right"] = var_0["add_aim_right"];
self.a.array["add_turn_aim_up"] = var_0["add_aim_up"];
self.a.array["add_turn_aim_down"] = var_0["add_aim_down"];
self.a.array["add_turn_aim_left"] = var_0["add_aim_left"];
self.a.array["add_turn_aim_right"] = var_0["add_aim_right"];
self.a.array["straight_level"] = var_0["straight_level"];
self.a.array["fire"] = var_0["add_aim_straight"];
self.a.array["semi2"] = var_0["add_aim_straight"];
self.a.array["semi3"] = var_0["add_aim_straight"];
self.a.array["semi4"] = var_0["add_aim_straight"];
self.a.array["semi5"] = var_0["add_aim_straight"];
self.a.array["single"] = animscripts\utility::array( var_0["add_aim_straight"] );
self.a.array["burst2"] = var_0["add_aim_straight"];
self.a.array["burst3"] = var_0["add_aim_straight"];
self.a.array["burst4"] = var_0["add_aim_straight"];
self.a.array["burst5"] = var_0["add_aim_straight"];
self.a.array["burst6"] = var_0["add_aim_straight"];
self.a.array["exposed_idle"] = animscripts\utility::array( var_0["add_aim_idle"] );
}
runcombat()
{
self notify( "killanimscript" );
thread animscripts\combat::main();
}
setdefaultcorneranimmode()
{
if ( self.swimmer )
self animmode( "nogravity" );
else
self animmode( "zonly_physics" );
}
corner_playcornerfacialanim( var_0 )
{
if ( self.cornerdirection == "left" )
var_1 = "corner_stand_L";
else
var_1 = "corner_stand_R";
self.facialidx = animscripts\face::playfacialanim( var_0, var_1, self.facialidx );
}
corner_playaimfacialanim( var_0 )
{
self.facialidx = animscripts\face::playfacialanim( var_0, "aim", self.facialidx );
}
corner_clearfacialanim()
{
self.facialidx = undefined;
self clearanim( %head, 0.2 );
}