// 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 ); }