iw6-scripts/animscripts/cover_wall.gsc
2024-02-13 13:20:49 +01:00

840 lines
25 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
init_animset_cover_wall()
{
var_0 = [];
var_0["add_aim_up"] = %covercrouch_aim8_add;
var_0["add_aim_down"] = %covercrouch_aim2_add;
var_0["add_aim_left"] = %covercrouch_aim4_add;
var_0["add_aim_right"] = %covercrouch_aim6_add;
var_0["straight_level"] = %covercrouch_aim5;
var_0["hide_idle"] = %covercrouch_hide_idle;
var_0["hide_idle_twitch"] = animscripts\utility::array( %covercrouch_twitch_1, %covercrouch_twitch_2, %covercrouch_twitch_3, %covercrouch_twitch_4 );
var_0["hide_idle_flinch"] = animscripts\utility::array();
var_0["hide_2_crouch"] = %covercrouch_hide_2_aim;
var_0["hide_2_stand"] = %covercrouch_hide_2_stand;
var_0["hide_2_lean"] = %covercrouch_hide_2_lean;
var_0["hide_2_right"] = %covercrouch_hide_2_right;
var_0["hide_2_left"] = %covercrouch_hide_2_left;
var_0["crouch_2_hide"] = %covercrouch_aim_2_hide;
var_0["stand_2_hide"] = %covercrouch_stand_2_hide;
var_0["lean_2_hide"] = %covercrouch_lean_2_hide;
var_0["right_2_hide"] = %covercrouch_right_2_hide;
var_0["left_2_hide"] = %covercrouch_left_2_hide;
var_0["crouch_aim"] = %covercrouch_aim5;
var_0["stand_aim"] = %exposed_aim_5;
var_0["lean_aim"] = %covercrouch_lean_aim5;
var_0["fire"] = %exposed_shoot_auto_v2;
var_0["semi2"] = %exposed_shoot_semi2;
var_0["semi3"] = %exposed_shoot_semi3;
var_0["semi4"] = %exposed_shoot_semi4;
var_0["semi5"] = %exposed_shoot_semi5;
var_0["single"] = [ %exposed_shoot_semi1 ];
var_0["burst2"] = %exposed_shoot_burst3;
var_0["burst3"] = %exposed_shoot_burst3;
var_0["burst4"] = %exposed_shoot_burst4;
var_0["burst5"] = %exposed_shoot_burst5;
var_0["burst6"] = %exposed_shoot_burst6;
var_0["blind_fire"] = animscripts\utility::array( %covercrouch_blindfire_1, %covercrouch_blindfire_2, %covercrouch_blindfire_3, %covercrouch_blindfire_4 );
var_0["reload"] = %covercrouch_reload_hide;
var_0["grenade_safe"] = animscripts\utility::array( %covercrouch_grenadea, %covercrouch_grenadeb );
var_0["grenade_exposed"] = animscripts\utility::array( %covercrouch_grenadea, %covercrouch_grenadeb );
var_0["exposed_idle"] = animscripts\utility::array( %exposed_idle_alert_v1, %exposed_idle_alert_v2, %exposed_idle_alert_v3 );
var_0["look"] = animscripts\utility::array( %covercrouch_hide_look );
anim.archetypes["soldier"]["cover_crouch"] = var_0;
var_0 = [];
var_0["add_aim_up"] = %coverstandaim_aim8_add;
var_0["add_aim_down"] = %coverstandaim_aim2_add;
var_0["add_aim_left"] = %coverstandaim_aim4_add;
var_0["add_aim_right"] = %coverstandaim_aim6_add;
var_0["straight_level"] = %coverstandaim_aim5;
var_0["hide_idle"] = %coverstand_hide_idle;
var_0["hide_idle_twitch"] = animscripts\utility::array( %coverstand_hide_idle_twitch01, %coverstand_hide_idle_twitch02, %coverstand_hide_idle_twitch03, %coverstand_hide_idle_twitch04, %coverstand_hide_idle_twitch05 );
var_0["hide_idle_flinch"] = animscripts\utility::array( %coverstand_react01, %coverstand_react02, %coverstand_react03, %coverstand_react04 );
var_0["hide_2_stand"] = %coverstand_hide_2_aim;
var_0["stand_2_hide"] = %coverstand_aim_2_hide;
var_0["hide_2_over"] = %coverstand_2_coverstandaim;
var_0["over_2_hide"] = %coverstandaim_2_coverstand;
var_0["over_aim"] = %coverstandaim_aim5;
var_0["fire"] = %coverstandaim_autofire;
var_0["semi2"] = %coverstandaim_fire;
var_0["semi3"] = %coverstandaim_fire;
var_0["semi4"] = %coverstandaim_fire;
var_0["semi5"] = %coverstandaim_fire;
var_0["single"] = animscripts\utility::array( %coverstandaim_fire );
var_0["burst2"] = %coverstandaim_autofire;
var_0["burst3"] = %coverstandaim_autofire;
var_0["burst4"] = %coverstandaim_autofire;
var_0["burst5"] = %coverstandaim_autofire;
var_0["burst6"] = %coverstandaim_autofire;
var_0["blind_fire"] = animscripts\utility::array( %coverstand_blindfire_1, %coverstand_blindfire_2 );
var_0["reload"] = %coverstand_reloada;
var_0["look"] = animscripts\utility::array( %coverstand_look_quick, %coverstand_look_quick_v2 );
var_0["grenade_safe"] = animscripts\utility::array( %coverstand_grenadea, %coverstand_grenadeb );
var_0["grenade_exposed"] = animscripts\utility::array( %coverstand_grenadea, %coverstand_grenadeb );
var_0["exposed_idle"] = animscripts\utility::array( %exposed_idle_alert_v1, %exposed_idle_alert_v2, %exposed_idle_alert_v3 );
var_0["hide_to_look"] = %coverstand_look_moveup;
var_0["look_idle"] = %coverstand_look_idle;
var_0["look_to_hide"] = %coverstand_look_movedown;
var_0["look_to_hide_fast"] = %coverstand_look_movedown_fast;
anim.archetypes["soldier"]["cover_stand"] = var_0;
}
cover_wall_think( var_0 )
{
self endon( "killanimscript" );
self.covernode = self.node;
self.covertype = var_0;
if ( !isdefined( self.node.turret ) )
animscripts\cover_behavior::turntomatchnodedirection( 0 );
if ( var_0 == "crouch" )
{
setup_cover_crouch( "unknown" );
self.covernode initcovercrouchnode();
}
else
setup_cover_stand( "unknown" );
self.a.aimidlethread = undefined;
self orientmode( "face angle", self.covernode.angles[1] );
if ( isdefined( self.weapon ) && animscripts\utility::usingmg() && isdefined( self.node ) && isdefined( self.node.turretinfo ) && canspawnturret() )
{
if ( var_0 == "crouch" )
{
if ( isrpd( self.weapon ) )
var_1 = "rpd_bipod_crouch";
else
var_1 = "saw_bipod_crouch";
}
else if ( isrpd( self.weapon ) )
var_1 = "rpd_bipod_stand";
else
var_1 = "saw_bipod_stand";
if ( isrpd( self.weapon ) )
var_2 = "weapon_rpd_MG_Setup";
else
var_2 = "weapon_saw_MG_Setup";
useselfplacedturret( var_1, var_2 );
}
else if ( isdefined( self.node ) && isdefined( self.node.turret ) )
usestationaryturret();
self animmode( "normal" );
if ( var_0 == "crouch" && self.a.pose == "stand" )
{
var_3 = animscripts\utility::animarray( "stand_2_hide" );
var_4 = getanimlength( var_3 );
self setanimknoballrestart( var_3, %body, 1, 0.2, animscripts\combat_utility::fasteranimspeed() );
thread animscripts\shared::movetonodeovertime( self.covernode, var_4 );
wait( var_4 );
self.a.covermode = "hide";
}
else
{
loophide( 0.4 );
if ( distancesquared( self.origin, self.covernode.origin ) > 1 )
{
thread animscripts\shared::movetonodeovertime( self.covernode, 0.4 );
wait 0.2;
if ( var_0 == "crouch" )
self.a.pose = "crouch";
wait 0.2;
}
else
wait 0.1;
}
setdefaultwallanimmode();
if ( var_0 == "crouch" )
{
if ( self.a.pose == "prone" )
animscripts\utility::exitpronewrapper( 1 );
self.a.pose = "crouch";
}
if ( self.covertype == "stand" )
self.a.special = "cover_stand";
else
self.a.special = "cover_crouch";
var_5 = spawnstruct();
if ( !self.fixednode )
var_5.movetonearbycover = animscripts\cover_behavior::movetonearbycover;
var_5.reload = ::coverreload;
var_5.leavecoverandshoot = ::popupandshoot;
var_5.look = ::look;
var_5.fastlook = ::fastlook;
var_5.idle = ::idle;
var_5.flinch = ::flinch;
var_5.grenade = ::trythrowinggrenade;
var_5.grenadehidden = ::trythrowinggrenadestayhidden;
var_5.blindfire = ::blindfire;
animscripts\cover_behavior::main( var_5 );
}
isrpd( var_0 )
{
return getsubstr( var_0, 0, 3 ) == "rpd" && ( var_0.size == 3 || var_0[3] == "_" );
}
initcovercrouchnode()
{
if ( isdefined( self.crouchingisok ) )
return;
var_0 = ( 0, 0, 42 );
var_1 = anglestoforward( self.angles );
self.crouchingisok = sighttracepassed( self.origin + var_0, self.origin + var_0 + var_1 * 64, 0, undefined );
}
setup_cover_crouch( var_0 )
{
animscripts\combat::set_default_aim_limits( self.covernode );
setup_crouching_anim_array( var_0 );
}
setup_cover_stand( var_0 )
{
animscripts\combat::set_default_aim_limits( self.covernode );
setup_standing_anim_array( var_0 );
}
coverreload()
{
var_0 = animscripts\combat_utility::reload( 2.0, animscripts\utility::animarray( "reload" ) );
if ( isdefined( var_0 ) && var_0 )
return 1;
return 0;
}
popupandshoot()
{
self.keepclaimednodeifvalid = 1;
if ( isdefined( self.rambochance ) && randomfloat( 1 ) < self.rambochance )
{
if ( rambo() )
return 1;
}
if ( !pop_up() )
return 0;
shootastold();
animscripts\combat_utility::endfireandanimidlethread();
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" ) );
}
}
go_to_hide();
self.covercrouchlean_aimmode = undefined;
self.keepclaimednodeifvalid = 0;
return 1;
}
shootastold()
{
self endon( "return_to_cover" );
maps\_gameskill::didsomethingotherthanshooting();
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 ( self.covertype == "crouch" && needtochangecovermode() )
break;
shootuntilshootbehaviorchange_coverwall();
self clearanim( %add_fire, 0.2 );
}
}
shootuntilshootbehaviorchange_coverwall()
{
if ( self.covertype == "crouch" )
thread anglerangethread();
thread animscripts\combat_utility::aimidlethread();
animscripts\combat_utility::shootuntilshootbehaviorchange();
}
rambo()
{
if ( !animscripts\utility::hasenemysightpos() )
return 0;
var_0 = "rambo";
if ( randomint( 10 ) < 2 )
var_0 = "rambo_fail";
if ( !animscripts\utility::animarrayanyexist( var_0 ) )
return 0;
if ( self.covertype == "crouch" && !self.covernode.crouchingisok )
return 0;
var_1 = getshootpospitch( self.covernode.origin + animscripts\utility::getnodeoffset( self.covernode ) );
if ( var_1 > 15 )
return 0;
var_2 = anglestoforward( self.angles );
var_3 = self.origin + var_2 * -16;
if ( !self maymovetopoint( var_3 ) )
return 0;
self.coverposestablishedtime = gettime();
setdefaultwallanimmode();
self.keepclaimednodeifvalid = 1;
self.isrambo = 1;
self.a.prevattack = "rambo";
self.changingcoverpos = 1;
thread animscripts\shared::ramboaim( 0 );
var_4 = animscripts\utility::animarraypickrandom( var_0 );
self setflaggedanimknoballrestart( "rambo", var_4, %body, 1, 0.2, 1 );
cover_playfacialanim( 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;
}
idle()
{
self endon( "end_idle" );
for (;;)
{
var_0 = randomint( 2 ) == 0 && animscripts\utility::animarrayanyexist( "hide_idle_twitch" );
if ( var_0 )
var_1 = animscripts\utility::animarraypickrandom( "hide_idle_twitch" );
else
var_1 = animscripts\utility::animarray( "hide_idle" );
playidleanimation( var_1, var_0 );
}
}
flinch()
{
if ( !animscripts\utility::animarrayanyexist( "hide_idle_flinch" ) )
return 0;
var_0 = anglestoforward( self.angles );
var_1 = self.origin + var_0 * -16;
if ( !self maymovetopoint( var_1, !self.swimmer ) )
return 0;
setdefaultwallanimmode();
self.keepclaimednodeifvalid = 1;
var_2 = animscripts\utility::animarraypickrandom( "hide_idle_flinch" );
playidleanimation( var_2, 1 );
self.keepclaimednodeifvalid = 0;
return 1;
}
playidleanimation( var_0, var_1 )
{
if ( var_1 )
self setflaggedanimknoballrestart( "idle", var_0, %body, 1, 0.25, 1 );
else
self setflaggedanimknoball( "idle", var_0, %body, 1, 0.25, 1 );
cover_playfacialanim( var_0 );
self.a.covermode = "hide";
animscripts\shared::donotetracks( "idle" );
}
look( var_0 )
{
if ( !isdefined( self.a.array["hide_to_look"] ) )
return 0;
if ( !peekout() )
return 0;
animscripts\shared::playlookanimation( animscripts\utility::animarray( "look_idle" ), var_0 );
var_1 = undefined;
if ( animscripts\utility::issuppressedwrapper() )
var_1 = animscripts\utility::animarray( "look_to_hide_fast" );
else
var_1 = animscripts\utility::animarray( "look_to_hide" );
self setflaggedanimknoballrestart( "looking_end", var_1, %body, 1, 0.1 );
cover_playfacialanim( var_1 );
animscripts\shared::donotetracks( "looking_end" );
return 1;
}
peekout()
{
if ( isdefined( self.covernode.script_dontpeek ) )
return 0;
var_0 = animscripts\utility::animarray( "hide_to_look" );
self setflaggedanimknoball( "looking_start", var_0, %body, 1, 0.2 );
cover_playfacialanim( var_0 );
animscripts\shared::donotetracks( "looking_start" );
return 1;
}
fastlook()
{
var_0 = animscripts\utility::animarraypickrandom( "look" );
self setflaggedanimknoballrestart( "look", var_0, %body, 1, 0.1 );
cover_playfacialanim( var_0 );
animscripts\shared::donotetracks( "look" );
return 1;
}
pop_up_and_hide_speed()
{
if ( self.a.covermode == "left" || self.a.covermode == "right" || self.a.covermode == "over" )
return 1;
return animscripts\combat_utility::randomfasteranimspeed();
}
pop_up()
{
var_0 = getbestcovermode();
var_1 = 0.1;
var_2 = animscripts\utility::animarray( "hide_2_" + var_0 );
var_3 = !self.swimmer;
if ( !self maymovetopoint( animscripts\utility::getanimendpos( var_2 ), var_3 ) )
return 0;
if ( self.script == "cover_crouch" && var_0 == "lean" )
self.covercrouchlean_aimmode = 1;
if ( self.covertype == "crouch" )
setup_cover_crouch( var_0 );
else
setup_cover_stand( var_0 );
self.a.special = "none";
self.specialdeathfunc = undefined;
if ( self.covertype == "stand" )
self.a.special = "cover_stand_aim";
else
self.a.special = "cover_crouch_aim";
self.changingcoverpos = 1;
self notify( "done_changing_cover_pos" );
setdefaultwallanimmode();
var_4 = pop_up_and_hide_speed();
self setflaggedanimknoballrestart( "pop_up", var_2, %body, 1, 0.1, var_4 );
thread donotetracksforpopup( "pop_up" );
if ( animhasnotetrack( var_2, "start_aim" ) )
{
self waittillmatch( "pop_up", "start_aim" );
var_1 = getanimlength( var_2 ) / var_4 * ( 1 - self getanimtime( var_2 ) );
}
else
{
self waittillmatch( "pop_up", "end" );
var_1 = 0.1;
}
self clearanim( var_2, var_1 + 0.05 );
self.a.covermode = var_0;
self.a.prevattack = var_0;
setup_additive_aim( var_1 );
thread animscripts\track::trackshootentorpos();
wait( var_1 );
if ( animscripts\combat_utility::issniper() )
thread animscripts\shoot_behavior::sniper_glint_behavior();
self.changingcoverpos = 0;
self.coverposestablishedtime = gettime();
self notify( "stop_popup_donotetracks" );
return 1;
}
donotetracksforpopup( var_0 )
{
self endon( "killanimscript" );
self endon( "stop_popup_donotetracks" );
animscripts\shared::donotetracks( var_0 );
}
setup_additive_aim( var_0 )
{
if ( self.a.covermode == "left" || self.a.covermode == "right" )
var_1 = "crouch";
else
var_1 = self.a.covermode;
self setanimknoball( animscripts\utility::animarray( var_1 + "_aim" ), %body, 1, var_0 );
if ( var_1 == "crouch" )
{
self setanimlimited( animscripts\utility::lookupanim( "cover_crouch", "add_aim_down" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "cover_crouch", "add_aim_left" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "cover_crouch", "add_aim_up" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "cover_crouch", "add_aim_right" ), 1, 0 );
}
else if ( var_1 == "stand" )
{
self setanimlimited( animscripts\utility::lookupanim( "default_stand", "add_aim_down" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "default_stand", "add_aim_left" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "default_stand", "add_aim_up" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "default_stand", "add_aim_right" ), 1, 0 );
}
else if ( var_1 == "lean" )
{
self setanimlimited( animscripts\utility::lookupanim( "default_stand", "add_aim_down" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "default_stand", "add_aim_left" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "default_stand", "add_aim_up" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "default_stand", "add_aim_right" ), 1, 0 );
}
else if ( var_1 == "over" )
{
self setanimlimited( animscripts\utility::lookupanim( "cover_stand", "add_aim_down" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "cover_stand", "add_aim_left" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "cover_stand", "add_aim_up" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "cover_stand", "add_aim_right" ), 1, 0 );
}
}
go_to_hide()
{
self notify( "return_to_cover" );
self.changingcoverpos = 1;
self notify( "done_changing_cover_pos" );
animscripts\combat_utility::endaimidlethread();
var_0 = pop_up_and_hide_speed();
self setflaggedanimknoball( "go_to_hide", animscripts\utility::animarray( self.a.covermode + "_2_hide" ), %body, 1, 0.2, var_0 );
self clearanim( %exposed_modern, 0.2 );
animscripts\shared::donotetracks( "go_to_hide" );
self.a.covermode = "hide";
if ( self.covertype == "stand" )
self.a.special = "cover_stand";
else
self.a.special = "cover_crouch";
self.changingcoverpos = 0;
}
trythrowinggrenadestayhidden( var_0 )
{
return trythrowinggrenade( var_0, 1 );
}
trythrowinggrenade( var_0, var_1 )
{
if ( isdefined( self.dontevershoot ) || isdefined( var_0.dontattackme ) )
return 0;
var_2 = undefined;
if ( isdefined( self.rambochance ) && randomfloat( 1.0 ) < self.rambochance )
var_2 = animscripts\utility::animarraypickrandom( "grenade_rambo" );
else if ( isdefined( var_1 ) && var_1 )
var_2 = animscripts\utility::animarraypickrandom( "grenade_safe" );
else
var_2 = animscripts\utility::animarraypickrandom( "grenade_exposed" );
setdefaultwallanimmode();
self.keepclaimednodeifvalid = 1;
var_3 = animscripts\combat_utility::trygrenade( var_0, var_2 );
self.keepclaimednodeifvalid = 0;
return var_3;
}
blindfire()
{
if ( !animscripts\utility::animarrayanyexist( "blind_fire" ) )
return 0;
setdefaultwallanimmode();
self.keepclaimednodeifvalid = 1;
self setflaggedanimknoballrestart( "blindfire", animscripts\utility::animarraypickrandom( "blind_fire" ), %body, 1, 0.2, 1 );
animscripts\shared::donotetracks( "blindfire" );
self.keepclaimednodeifvalid = 0;
return 1;
}
createturret( var_0, var_1, var_2 )
{
var_3 = spawnturret( "misc_turret", var_0.origin, var_1 );
var_3.angles = var_0.angles;
var_3.aiowner = self;
var_3 setmodel( var_2 );
var_3 makeusable();
var_3 setdefaultdroppitch( 0 );
if ( isdefined( var_0.leftarc ) )
var_3.leftarc = var_0.leftarc;
if ( isdefined( var_0.rightarc ) )
var_3.rightarc = var_0.rightarc;
if ( isdefined( var_0.toparc ) )
var_3.toparc = var_0.toparc;
if ( isdefined( var_0.bottomarc ) )
var_3.bottomarc = var_0.bottomarc;
return var_3;
}
deleteifnotused( var_0 )
{
self endon( "death" );
self endon( "being_used" );
wait 0.1;
if ( isdefined( var_0 ) )
var_0 notify( "turret_use_failed" );
self delete();
}
useselfplacedturret( var_0, var_1 )
{
var_2 = createturret( self.node.turretinfo, var_0, var_1 );
if ( self useturret( var_2 ) )
{
var_2 thread deleteifnotused( self );
if ( isdefined( self.turret_function ) )
thread [[ self.turret_function ]]( var_2 );
self waittill( "turret_use_failed" );
}
else
var_2 delete();
}
usestationaryturret()
{
var_0 = self.node.turret;
if ( !var_0.issetup )
return;
thread maps\_mg_penetration::gunner_think( var_0 );
self waittill( "continue_cover_script" );
}
setup_crouching_anim_array( var_0 )
{
self.a.array = animscripts\utility::lookupanimarray( "cover_crouch" );
if ( animscripts\utility::weapon_pump_action_shotgun() )
{
if ( var_0 == "lean" || var_0 == "stand" )
self.a.array["single"] = animscripts\utility::lookupanim( "shotgun_stand", "single" );
else
self.a.array["single"] = animscripts\utility::lookupanim( "shotgun_crouch", "single" );
}
if ( isdefined( anim.ramboanims ) )
{
self.a.array["rambo"] = anim.ramboanims.covercrouch;
self.a.array["rambo_fail"] = anim.ramboanims.covercrouchfail;
self.a.array["grenade_rambo"] = anim.ramboanims.covercrouchgrenade;
}
}
setup_standing_anim_array( var_0 )
{
self.a.array = animscripts\utility::lookupanimarray( "cover_stand" );
if ( var_0 != "over" )
{
var_1 = animscripts\utility::lookupanimarray( "default_stand" );
self.a.array["stand_aim"] = var_1["straight_level"];
self.a.array["fire"] = var_1["fire_corner"];
self.a.array["semi2"] = var_1["semi2"];
self.a.array["semi3"] = var_1["semi3"];
self.a.array["semi4"] = var_1["semi4"];
self.a.array["semi5"] = var_1["semi5"];
if ( animscripts\utility::weapon_pump_action_shotgun() )
self.a.array["single"] = animscripts\utility::lookupanim( "shotgun_stand", "single" );
else
self.a.array["single"] = var_1["single"];
self.a.array["burst2"] = var_1["burst2"];
self.a.array["burst3"] = var_1["burst3"];
self.a.array["burst4"] = var_1["burst4"];
self.a.array["burst5"] = var_1["burst5"];
self.a.array["burst6"] = var_1["burst6"];
}
if ( isdefined( anim.ramboanims ) )
{
self.a.array["rambo"] = anim.ramboanims.coverstand;
self.a.array["rambo_fail"] = anim.ramboanims.coverstandfail;
self.a.array["grenade_rambo"] = anim.ramboanims.coverstandgrenade;
}
}
loophide( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = 0.1;
self setanimknoballrestart( animscripts\utility::animarray( "hide_idle" ), %body, 1, var_0 );
self.a.covermode = "hide";
}
anglerangethread()
{
self endon( "killanimscript" );
self notify( "newAngleRangeCheck" );
self endon( "newAngleRangeCheck" );
self endon( "return_to_cover" );
for (;;)
{
if ( needtochangecovermode() )
break;
wait 0.1;
}
self notify( "stopShooting" );
}
needtochangecovermode()
{
if ( self.covertype != "crouch" )
return 0;
var_0 = getshootpospitch( self geteye() );
if ( self.a.covermode == "lean" )
return var_0 < 10;
else
return var_0 > 45;
}
getbestcovermode()
{
var_0 = [];
if ( self.covertype == "stand" )
{
var_0 = self.covernode getvalidcoverpeekouts();
var_0[var_0.size] = "stand";
}
else
{
var_1 = getshootpospitch( self.covernode.origin + animscripts\utility::getnodeoffset( self.covernode ) );
if ( var_1 > 30 )
return "lean";
if ( var_1 > 15 || !self.covernode.crouchingisok )
return "stand";
var_0 = self.covernode getvalidcoverpeekouts();
var_0[var_0.size] = "crouch";
}
var_2 = 0;
while ( var_2 < var_0.size )
{
if ( !isdefined( self.a.array["hide_2_" + var_0[var_2]] ) )
{
var_0[var_2] = var_0[var_0.size - 1];
var_0[var_0.size - 1] = undefined;
continue;
}
var_2++;
}
return animscripts\combat_utility::getrandomcovermode( var_0 );
}
getshootpospitch( var_0 )
{
var_1 = animscripts\utility::getenemyeyepos();
return angleclamp180( vectortoangles( var_1 - var_0 )[0] );
}
setdefaultwallanimmode()
{
if ( self.swimmer )
self animmode( "nogravity" );
else
self animmode( "zonly_physics" );
}
cover_playfacialanim( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = "run";
self.facialidx = animscripts\face::playfacialanim( var_0, var_1, self.facialidx );
}
cover_clearfacialanim()
{
self.facialidx = undefined;
self clearanim( %head, 0.2 );
}