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

991 lines
28 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
moverun()
{
var_0 = [[ self.chooseposefunc ]]( "stand" );
switch ( var_0 )
{
case "stand":
if ( animscripts\setposemovement::standrun_begin() )
return;
if ( isdefined( self.run_overrideanim ) )
{
animscripts\move::movestand_moveoverride( self.run_overrideanim, self.run_override_weights );
return;
}
if ( standrun_checkchangeweapon() )
return;
if ( standrun_checkreload() )
return;
animscripts\utility::updateisincombattimer();
if ( animscripts\utility::isincombat() )
standrun_combatnormal();
else
standrun_noncombatnormal();
break;
case "crouch":
if ( animscripts\setposemovement::crouchrun_begin() )
return;
if ( isdefined( self.crouchrun_combatanim ) )
crouchrun_runoverride();
else
crouchrun_runnormal();
break;
default:
if ( animscripts\setposemovement::pronerun_begin() )
return;
pronecrawl();
break;
}
}
getrunanim()
{
if ( !isdefined( self.a.moveanimset ) )
return animscripts\utility::lookupanim( "run", "straight" );
if ( !self.facemotion )
{
if ( self.stairsstate == "none" || abs( self getmotionangle() ) > 45 )
return animscripts\utility::getmoveanim( "move_f" );
}
if ( self.stairsstate == "up" )
return animscripts\utility::getmoveanim( "stairs_up" );
else if ( self.stairsstate == "down" )
return animscripts\utility::getmoveanim( "stairs_down" );
if ( animscripts\utility::isincombat() || isdefined( self.a.bdisablemovetwitch ) && self.a.bdisablemovetwitch )
return animscripts\utility::getmoveanim( "straight" );
var_0 = animscripts\utility::getmoveanim( "straight_twitch" );
if ( !isdefined( var_0 ) || var_0.size == 0 )
return animscripts\utility::getmoveanim( "straight" );
var_1 = animscripts\utility::getrandomintfromseed( self.a.runloopcount, 4 );
if ( var_1 == 0 )
{
var_1 = animscripts\utility::getrandomintfromseed( self.a.runloopcount, var_0.size );
return var_0[var_1];
}
return animscripts\utility::getmoveanim( "straight" );
}
getcrouchrunanim()
{
if ( !isdefined( self.a.moveanimset ) )
return animscripts\utility::lookupanim( "run", "crouch" );
return animscripts\utility::getmoveanim( "crouch" );
}
pronecrawl()
{
self.a.movement = "run";
self setflaggedanimknob( "runanim", animscripts\utility::getmoveanim( "prone" ), 1, 0.3, self.moveplaybackrate );
run_clearfacialanim();
animscripts\notetracks::donotetracksfortime( 0.25, "runanim" );
}
#using_animtree("generic_human");
initrunngun()
{
if ( !isdefined( self.runngun ) )
{
self notify( "stop_move_anim_update" );
self.update_move_anim_type = undefined;
self clearanim( %combatrun_backward, 0.2 );
self clearanim( %combatrun_right, 0.2 );
self clearanim( %combatrun_left, 0.2 );
self clearanim( %w_aim_2, 0.2 );
self clearanim( %w_aim_4, 0.2 );
self clearanim( %w_aim_6, 0.2 );
self clearanim( %w_aim_8, 0.2 );
self.runngun = 1;
}
}
stoprunngun()
{
if ( isdefined( self.runngun ) )
{
self clearanim( %run_n_gun, 0.2 );
self.runngun = undefined;
}
return 0;
}
runngun( var_0 )
{
if ( var_0 )
{
var_1 = getpredictedyawtoenemy( 0.2 );
var_2 = var_1 < 0;
}
else
{
var_1 = 0;
var_2 = self.runngunweight < 0;
}
var_3 = 1 - var_2;
var_4 = self.maxrunngunangle;
var_5 = self.runnguntransitionpoint;
var_6 = self.runngunincrement;
if ( !var_0 || squared( var_1 ) > var_4 * var_4 )
{
self clearanim( %add_fire, 0 );
if ( squared( self.runngunweight ) < var_6 * var_6 )
{
self.runngunweight = 0;
self.runngun = undefined;
return 0;
}
else if ( self.runngunweight > 0 )
self.runngunweight = self.runngunweight - var_6;
else
self.runngunweight = self.runngunweight + var_6;
}
else
{
var_7 = var_1 / var_4;
var_8 = var_7 - self.runngunweight;
if ( abs( var_8 ) < var_5 * 0.7 )
self.runngunweight = var_7;
else if ( var_8 > 0 )
self.runngunweight = self.runngunweight + var_6;
else
self.runngunweight = self.runngunweight - var_6;
}
initrunngun();
var_9 = abs( self.runngunweight );
var_10 = animscripts\utility::lookupanimarray( "run_n_gun" );
if ( var_9 > var_5 )
{
var_11 = ( var_9 - var_5 ) / var_5;
var_11 = clamp( var_11, 0, 1 );
self clearanim( var_10["F"], 0.2 );
self setanimlimited( var_10["L"], ( 1.0 - var_11 ) * var_2, 0.2 );
self setanimlimited( var_10["R"], ( 1.0 - var_11 ) * var_3, 0.2 );
self setanimlimited( var_10["LB"], var_11 * var_2, 0.2 );
self setanimlimited( var_10["RB"], var_11 * var_3, 0.2 );
}
else
{
var_11 = clamp( var_9 / var_5, 0, 1 );
self setanimlimited( var_10["F"], 1.0 - var_11, 0.2 );
self setanimlimited( var_10["L"], var_11 * var_2, 0.2 );
self setanimlimited( var_10["R"], var_11 * var_3, 0.2 );
if ( var_5 < 1 )
{
self clearanim( var_10["LB"], 0.2 );
self clearanim( var_10["RB"], 0.2 );
}
}
self setflaggedanimknob( "runanim", %run_n_gun, 1, 0.3, 0.8 );
run_playfacialanim( undefined );
self.a.allowedpartialreloadontheruntime = gettime() + 500;
if ( var_0 && isplayer( self.enemy ) )
self updateplayersightaccuracy();
return 1;
}
runngun_backward()
{
initrunngun();
var_0 = animscripts\utility::lookupanim( "run_n_gun", "move_back" );
self setflaggedanimknob( "runanim", var_0, 1, 0.3, 0.8 );
run_playfacialanim( var_0 );
if ( isplayer( self.enemy ) )
self updateplayersightaccuracy();
animscripts\notetracks::donotetracksfortime( 0.2, "runanim" );
self clearanim( var_0, 0.2 );
}
reacttobulletsinterruptcheck()
{
self endon( "killanimscript" );
for (;;)
{
wait 0.2;
if ( !isdefined( self.reactingtobullet ) )
break;
if ( !isdefined( self.pathgoalpos ) || distancesquared( self.pathgoalpos, self.origin ) < squared( 80 ) )
{
endrunningreacttobullets();
self notify( "interrupt_react_to_bullet" );
break;
}
}
}
endrunningreacttobullets()
{
self orientmode( "face default" );
self.reactingtobullet = undefined;
self.requestreacttobullet = undefined;
}
runningreacttobullets()
{
endfaceenemyaimtracking();
self endon( "interrupt_react_to_bullet" );
self.reactingtobullet = 1;
self orientmode( "face motion" );
var_0 = animscripts\utility::lookupanimarray( "running_react_to_bullets" );
var_1 = randomint( var_0.size );
if ( var_1 == anim.lastrunningreactanim )
var_1 = ( var_1 + 1 ) % var_0.size;
anim.lastrunningreactanim = var_1;
var_2 = var_0[var_1];
self setflaggedanimknobrestart( "reactanim", var_2, 1, 0.5, self.moveplaybackrate );
run_playfacialanim( var_2 );
thread reacttobulletsinterruptcheck();
animscripts\shared::donotetracks( "reactanim" );
endrunningreacttobullets();
}
customrunningreacttobullets()
{
endfaceenemyaimtracking();
self.reactingtobullet = 1;
self orientmode( "face motion" );
var_0 = randomint( self.run_overridebulletreact.size );
var_1 = self.run_overridebulletreact[var_0];
self setflaggedanimknobrestart( "reactanim", var_1, 1, 0.5, self.moveplaybackrate );
run_playfacialanim( var_1 );
thread reacttobulletsinterruptcheck();
animscripts\shared::donotetracks( "reactanim" );
endrunningreacttobullets();
}
getsprintanim()
{
var_0 = undefined;
if ( isdefined( self.grenade ) )
var_0 = animscripts\utility::getmoveanim( "sprint_short" );
if ( !isdefined( var_0 ) )
var_0 = animscripts\utility::getmoveanim( "sprint" );
return var_0;
}
shouldsprint()
{
if ( isdefined( self.sprint ) )
return 1;
if ( isdefined( self.grenade ) && isdefined( self.enemy ) && self.frontshieldanglecos == 1 )
return distancesquared( self.origin, self.enemy.origin ) > 90000;
return 0;
}
shouldsprintforvariation()
{
if ( isdefined( self.neversprintforvariation ) )
return 0;
if ( !self.facemotion || self.stairsstate != "none" )
return 0;
var_0 = gettime();
if ( isdefined( self.dangersprinttime ) )
{
if ( var_0 < self.dangersprinttime )
return 1;
if ( var_0 - self.dangersprinttime < 6000 )
return 0;
}
if ( !isdefined( self.enemy ) || !issentient( self.enemy ) )
return 0;
if ( randomint( 100 ) < 25 && self lastknowntime( self.enemy ) + 2000 > var_0 )
{
self.dangersprinttime = var_0 + 2000 + randomint( 1000 );
return 1;
}
return 0;
}
getmoveplaybackrate()
{
var_0 = self.moveplaybackrate;
if ( self.lookaheadhitsstairs && self.stairsstate == "none" && self.lookaheaddist < 300 )
var_0 = var_0 * 0.75;
return var_0;
}
standrun_combatnormal()
{
var_0 = getmoveplaybackrate();
self setanimknob( %combatrun, 1.0, 0.5, var_0 );
var_1 = 0;
var_2 = isdefined( self.requestreacttobullet ) && gettime() - self.requestreacttobullet < 100;
if ( var_2 && randomfloat( 1 ) < self.a.reacttobulletchance )
{
stoprunngun();
setshootwhilemoving( 0 );
runningreacttobullets();
return;
}
if ( shouldsprint() )
{
var_3 = getsprintanim();
self setflaggedanimknob( "runanim", var_3, 1, 0.5, self.moveplaybackrate );
run_playfacialanim( var_3 );
setshootwhilemoving( 0 );
var_1 = 1;
}
else if ( isdefined( self.enemy ) && animscripts\move::mayshootwhilemoving() )
{
setshootwhilemoving( 1 );
if ( !self.facemotion )
thread faceenemyaimtracking();
else if ( self.shootstyle != "none" && !isdefined( self.norunngun ) )
{
endfaceenemyaimtracking();
if ( canshootwhilerunningforward() )
var_1 = runngun( 1 );
else if ( canshootwhilerunningbackward() )
{
runngun_backward();
return;
}
}
else if ( isdefined( self.runngunweight ) && self.runngunweight != 0 )
var_1 = runngun( 0 );
}
else if ( isdefined( self.runngunweight ) && self.runngunweight != 0 )
{
setshootwhilemoving( 0 );
var_1 = runngun( 0 );
}
else
setshootwhilemoving( 0 );
if ( !var_1 )
{
stoprunngun();
if ( var_2 && self.a.reacttobulletchance != 0 )
{
runningreacttobullets();
return;
}
if ( move_checkstairstransition() )
return;
self clearanim( %stair_transitions, 0.1 );
if ( shouldsprintforvariation() )
var_4 = animscripts\utility::getmoveanim( "sprint_short" );
else
var_4 = getrunanim();
self setflaggedanimknoblimited( "runanim", var_4, 1, 0.1, self.moveplaybackrate, 1 );
run_playfacialanim( var_4 );
setmovenonforwardanims( animscripts\utility::getmoveanim( "move_b" ), animscripts\utility::getmoveanim( "move_l" ), animscripts\utility::getmoveanim( "move_r" ), self.sidesteprate );
thread setcombatstandmoveanimweights( "run" );
}
animscripts\notetracks::donotetracksfortime( 0.2, "runanim" );
}
getstairstransitionanim( var_0, var_1 )
{
if ( !isdefined( var_0 ) )
var_0 = "none";
if ( var_0 == var_1 )
return undefined;
if ( var_0 == "up" )
return animscripts\utility::getmoveanim( "stairs_up_out" );
else if ( var_0 == "down" )
return animscripts\utility::getmoveanim( "stairs_down_out" );
else if ( var_1 == "up" )
return animscripts\utility::getmoveanim( "stairs_up_in" );
else if ( var_1 == "down" )
return animscripts\utility::getmoveanim( "stairs_down_in" );
}
faceenemyaimtracking()
{
if ( isdefined( self.aim_while_moving_thread ) )
return;
self.aim_while_moving_thread = 1;
self endon( "killanimscript" );
self endon( "end_face_enemy_tracking" );
self setdefaultaimlimits();
var_0 = undefined;
if ( isdefined( self.combatstandanims ) && isdefined( self.combatstandanims["walk_aims"] ) )
{
self setanimlimited( self.combatstandanims["walk_aims"]["walk_aim_2"] );
self setanimlimited( self.combatstandanims["walk_aims"]["walk_aim_4"] );
self setanimlimited( self.combatstandanims["walk_aims"]["walk_aim_6"] );
self setanimlimited( self.combatstandanims["walk_aims"]["walk_aim_8"] );
}
else
{
var_1 = "walk";
if ( animscripts\utility::shouldcqb() && isdefined( animscripts\utility::lookupanim( "cqb", "aim_2" ) ) )
var_1 = "cqb";
var_2 = animscripts\utility::lookupanimarray( var_1 );
self setanimlimited( var_2["aim_2"] );
self setanimlimited( var_2["aim_4"] );
self setanimlimited( var_2["aim_6"] );
self setanimlimited( var_2["aim_8"] );
if ( isdefined( var_2["aim_5"] ) )
{
self setanimlimited( var_2["aim_5"] );
var_0 = %w_aim_5;
}
}
animscripts\track::trackloop( %w_aim_2, %w_aim_4, %w_aim_6, %w_aim_8, var_0 );
}
endfaceenemyaimtracking()
{
self.aim_while_moving_thread = undefined;
self notify( "end_face_enemy_tracking" );
}
setshootwhilemoving( var_0 )
{
var_1 = isdefined( self.bshootwhilemoving );
if ( var_0 )
{
self.bshootwhilemoving = var_0;
if ( !var_1 )
{
thread rundecidewhatandhowtoshoot();
thread runshootwhilemoving();
}
}
else
{
self.bshootwhilemoving = undefined;
if ( var_1 )
{
self notify( "end_shoot_while_moving" );
self notify( "end_face_enemy_tracking" );
self.shoot_while_moving_thread = undefined;
self.aim_while_moving_thread = undefined;
self.runngun = undefined;
}
}
}
rundecidewhatandhowtoshoot()
{
self endon( "killanimscript" );
self endon( "end_shoot_while_moving" );
animscripts\shoot_behavior::decidewhatandhowtoshoot( "normal" );
}
runshootwhilemoving()
{
self endon( "killanimscript" );
self endon( "end_shoot_while_moving" );
animscripts\move::shootwhilemoving();
}
aimedsomewhatatenemy()
{
var_0 = self getmuzzleangle();
var_1 = vectortoangles( self.enemy getshootatpos() - self getmuzzlepos() );
if ( animscripts\utility::absangleclamp180( var_0[1] - var_1[1] ) > 15 )
return 0;
return animscripts\utility::absangleclamp180( var_0[0] - var_1[0] ) <= 20;
}
canshootwhilerunningforward()
{
if ( ( !isdefined( self.runngunweight ) || self.runngunweight == 0 ) && abs( self getmotionangle() ) > self.maxrunngunangle )
return 0;
return 1;
}
canshootwhilerunningbackward()
{
if ( 180 - abs( self getmotionangle() ) >= 45 )
return 0;
var_0 = getpredictedyawtoenemy( 0.2 );
if ( abs( var_0 ) > 30 )
return 0;
return 1;
}
canshootwhilerunning()
{
return animscripts\move::mayshootwhilemoving() && isdefined( self.enemy ) && ( canshootwhilerunningforward() || canshootwhilerunningbackward() );
}
getpredictedyawtoenemy( var_0 )
{
var_1 = self.origin;
var_2 = self.angles[1] + self getmotionangle();
var_1 = var_1 + ( cos( var_2 ), sin( var_2 ), 0 ) * length( self.velocity ) * var_0;
var_3 = self.angles[1] - vectortoyaw( self.enemy.origin - var_1 );
var_3 = angleclamp180( var_3 );
return var_3;
}
move_checkstairstransition()
{
var_0 = 0;
var_1 = undefined;
if ( self.stairsstate == "none" && self.lookaheadhitsstairs )
{
if ( animscripts\utility::shouldcqb() )
var_2 = 32;
else
var_2 = 48;
var_3 = self.origin + ( 0, 0, 6 );
var_4 = vectornormalize( ( self.lookaheaddir[0], self.lookaheaddir[1], 0 ) );
var_5 = var_3 + var_2 * var_4;
var_6 = self aiphysicstrace( var_3, var_5, 15, 48, 1, 1 );
if ( var_6["fraction"] < 1 )
{
if ( !isdefined( var_6["stairs"] ) )
return 0;
var_1 = getstairstransitionanim( "none", "up" );
}
else
{
var_7 = 18;
var_8 = var_5 + ( 0, 0, var_7 );
var_9 = var_5 - ( 0, 0, var_7 );
var_6 = self aiphysicstrace( var_8, var_9, 15, 48, 1, 1 );
if ( var_6["fraction"] >= 1 )
return 0;
if ( !isdefined( var_6["stairs"] ) )
return 0;
var_1 = getstairstransitionanim( "none", "down" );
}
}
else if ( self.stairsstate == "up" )
{
var_2 = 24;
var_7 = 18;
var_5 = self.origin + var_2 * self.lookaheaddir;
var_8 = var_5 + ( 0, 0, var_7 );
var_9 = var_5 - ( 0, 0, var_7 );
var_6 = self aiphysicstrace( var_8, var_9, 15, 48, 1, 1 );
if ( var_6["fraction"] <= 0 || var_6["fraction"] >= 1 )
return 0;
if ( isdefined( var_6["stairs"] ) )
return 0;
var_1 = getstairstransitionanim( "up", "none" );
}
else if ( self.stairsstate == "down" && !self.lookaheadhitsstairs )
{
var_2 = 24;
var_7 = 18;
var_5 = self.origin + var_2 * self.lookaheaddir;
var_8 = var_5 + ( 0, 0, var_7 );
var_9 = var_5 - ( 0, 0, var_7 );
var_6 = self aiphysicstrace( var_8, var_9, 15, 48, 1, 1 );
if ( var_6["fraction"] <= 0 || var_6["fraction"] >= 1 )
return 0;
if ( isdefined( var_6["stairs"] ) )
return 0;
var_1 = getstairstransitionanim( "down", "none" );
}
if ( !isdefined( var_1 ) )
return 0;
self notify( "stop_move_anim_update" );
self.update_move_anim_type = undefined;
self setflaggedanimknoballrestart( "runanim", var_1, %body, 1, 0.1, self.moveplaybackrate );
run_playfacialanim( var_1 );
animscripts\shared::donotetracks( "runanim" );
return 1;
}
standrun_noncombatnormal()
{
self endon( "movemode" );
self clearanim( %combatrun, 0.6 );
var_0 = getmoveplaybackrate();
if ( move_checkstairstransition() )
return;
self clearanim( %stair_transitions, 0.1 );
self setanimknoball( %combatrun, %body, 1, 0.2, var_0 );
if ( shouldsprint() )
var_1 = getsprintanim();
else
var_1 = getrunanim();
if ( self.stairsstate == "none" )
var_2 = 0.3;
else
var_2 = 0.1;
self setflaggedanimknob( "runanim", var_1, 1, var_2, self.moveplaybackrate, 1 );
run_playfacialanim( var_1 );
setmovenonforwardanims( animscripts\utility::getmoveanim( "move_b" ), animscripts\utility::getmoveanim( "move_l" ), animscripts\utility::getmoveanim( "move_r" ) );
thread setcombatstandmoveanimweights( "run" );
var_3 = 0;
if ( self.leanamount > 0 && self.leanamount < 0.998 )
var_3 = 1;
else if ( self.leanamount < 0 && self.leanamount > -0.998 )
var_3 = -1;
var_4 = max( 0.2, var_2 );
animscripts\notetracks::donotetracksfortime( var_4, "runanim" );
}
crouchrun_runoverride()
{
self endon( "movemode" );
self setflaggedanimknoball( "runanim", self.crouchrun_combatanim, %body, 1, 0.4, self.moveplaybackrate );
run_playfacialanim( self.crouchrun_combatanim );
animscripts\shared::donotetracks( "runanim" );
}
crouchrun_runnormal()
{
self endon( "movemode" );
var_0 = getcrouchrunanim();
self setanimknob( var_0, 1, 0.4 );
thread updatemoveanimweights( "crouchrun", var_0, animscripts\utility::lookupanim( "run", "crouch_b" ), animscripts\utility::lookupanim( "run", "crouch_l" ), animscripts\utility::lookupanim( "run", "crouch_r" ) );
self setflaggedanimknoball( "runanim", %crouchrun, %body, 1, 0.2, self.moveplaybackrate );
run_playfacialanim( undefined );
animscripts\notetracks::donotetracksfortime( 0.2, "runanim" );
}
standrun_checkreload()
{
var_0 = isdefined( self.a.allowedpartialreloadontheruntime ) && self.a.allowedpartialreloadontheruntime > gettime();
var_0 = var_0 || isdefined( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 65536;
if ( var_0 )
{
if ( !animscripts\combat_utility::needtoreload( 0 ) )
return 0;
}
else if ( !animscripts\combat_utility::needtoreload( 0.5 ) )
return 0;
if ( isdefined( self.grenade ) )
return 0;
if ( !self.facemotion || self.stairsstate != "none" )
return 0;
if ( isdefined( self.dontshootwhilemoving ) || isdefined( self.norunreload ) )
return 0;
if ( canshootwhilerunning() && !animscripts\combat_utility::needtoreload( 0 ) )
return 0;
if ( !isdefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 65536 )
return 0;
var_1 = angleclamp180( self getmotionangle() );
if ( abs( var_1 ) > 25 )
return 0;
if ( !animscripts\utility::usingriflelikeweapon() )
return 0;
if ( !runloopisnearbeginning() )
return 0;
if ( animscripts\utility::shouldcqb() )
animscripts\cqb::cqb_reloadinternal();
else
standrun_reloadinternal();
self notify( "abort_reload" );
self orientmode( "face default" );
return 1;
}
standrun_reloadinternal()
{
self endon( "movemode" );
self orientmode( "face motion" );
var_0 = "reload_" + animscripts\combat_utility::getuniqueflagnameindex();
var_1 = animscripts\utility::lookupanim( "run", "reload" );
if ( isarray( var_1 ) )
var_1 = var_1[randomint( var_1.size )];
self setflaggedanimknoballrestart( var_0, var_1, %body, 1, 0.25 );
run_playfacialanim( var_1 );
self.update_move_front_bias = 1;
setmovenonforwardanims( animscripts\utility::getmoveanim( "move_b" ), animscripts\utility::getmoveanim( "move_l" ), animscripts\utility::getmoveanim( "move_r" ) );
thread setcombatstandmoveanimweights( "run" );
animscripts\shared::donotetracks( var_0 );
self.update_move_front_bias = undefined;
}
runloopisnearbeginning()
{
var_0 = self getanimtime( %walk_and_run_loops );
var_1 = getanimlength( animscripts\utility::lookupanim( "run", "straight" ) ) / 3.0;
var_0 = var_0 * 3.0;
if ( var_0 > 3 )
var_0 = var_0 - 2.0;
else if ( var_0 > 2 )
var_0 = var_0 - 1.0;
if ( var_0 < 0.15 / var_1 )
return 1;
if ( var_0 > 1 - 0.3 / var_1 )
return 1;
return 0;
}
setmovenonforwardanims( var_0, var_1, var_2, var_3 )
{
if ( !isdefined( var_3 ) )
var_3 = 1;
self setanimknoblimited( var_0, 1, 0.1, var_3, 1 );
self setanimknoblimited( var_1, 1, 0.1, var_3, 1 );
self setanimknoblimited( var_2, 1, 0.1, var_3, 1 );
}
setcombatstandmoveanimweights( var_0 )
{
updatemoveanimweights( var_0, %combatrun_forward, %combatrun_backward, %combatrun_left, %combatrun_right );
}
updatemoveanimweights( var_0, var_1, var_2, var_3, var_4 )
{
if ( isdefined( self.update_move_anim_type ) && self.update_move_anim_type == var_0 )
return;
self notify( "stop_move_anim_update" );
self.update_move_anim_type = var_0;
self.wasfacingmotion = undefined;
self endon( "killanimscript" );
self endon( "move_interrupt" );
self endon( "stop_move_anim_update" );
for (;;)
{
updaterunweightsonce( var_1, var_2, var_3, var_4 );
wait 0.05;
waittillframeend;
}
}
updaterunweightsonce( var_0, var_1, var_2, var_3 )
{
if ( self.facemotion && !animscripts\utility::shouldcqb() && !isdefined( self.update_move_front_bias ) )
{
if ( !isdefined( self.wasfacingmotion ) )
{
self.wasfacingmotion = 1;
self setanim( var_0, 1, 0.2, 1, 1 );
self setanim( var_1, 0, 0.2, 1, 1 );
self setanim( var_2, 0, 0.2, 1, 1 );
self setanim( var_3, 0, 0.2, 1, 1 );
}
}
else
{
self.wasfacingmotion = undefined;
var_4 = animscripts\utility::quadrantanimweights( self getmotionangle() );
if ( isdefined( self.update_move_front_bias ) )
{
var_4["back"] = 0.0;
if ( var_4["front"] < 0.2 )
var_4["front"] = 0.2;
}
self setanim( var_0, var_4["front"], 0.2, 1, 1 );
self setanim( var_1, var_4["back"], 0.2, 1, 1 );
self setanim( var_2, var_4["left"], 0.2, 1, 1 );
self setanim( var_3, var_4["right"], 0.2, 1, 1 );
}
}
standrun_checkchangeweapon()
{
var_0 = isdefined( self.wantshotgun ) && self.wantshotgun;
var_1 = animscripts\utility::isshotgun( self.weapon );
if ( var_0 == var_1 )
return 0;
if ( !isdefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 65536 )
return 0;
if ( animscripts\utility::usingsidearm() )
return 0;
if ( self.weapon == self.primaryweapon )
{
if ( !var_0 )
return 0;
if ( animscripts\utility::isshotgun( self.secondaryweapon ) )
return 0;
}
else
{
if ( var_0 )
return 0;
if ( animscripts\utility::isshotgun( self.primaryweapon ) )
return 0;
}
var_2 = angleclamp180( self getmotionangle() );
if ( abs( var_2 ) > 25 )
return 0;
if ( !runloopisnearbeginning() )
return 0;
if ( var_0 )
shotgunswitchstandruninternal( "shotgunPullout", animscripts\utility::lookupanim( "cqb", "shotgun_pullout" ), "gun_2_chest", "none", self.secondaryweapon, "shotgun_pickup" );
else
shotgunswitchstandruninternal( "shotgunPutaway", animscripts\utility::lookupanim( "cqb", "shotgun_putaway" ), "gun_2_back", "back", self.primaryweapon, "shotgun_pickup" );
self notify( "switchEnded" );
return 1;
}
shotgunswitchstandruninternal( var_0, var_1, var_2, var_3, var_4, var_5 )
{
self endon( "movemode" );
self setflaggedanimknoballrestart( var_0, var_1, %body, 1, 0.25 );
run_playfacialanim( var_1 );
self.update_move_front_bias = 1;
setmovenonforwardanims( animscripts\utility::getmoveanim( "move_b" ), animscripts\utility::getmoveanim( "move_l" ), animscripts\utility::getmoveanim( "move_r" ) );
thread setcombatstandmoveanimweights( "run" );
thread watchshotgunswitchnotetracks( var_0, var_2, var_3, var_4, var_5 );
animscripts\notetracks::donotetracksfortimeintercept( getanimlength( var_1 ) - 0.25, var_0, ::interceptnotetracksforweaponswitch );
self.update_move_front_bias = undefined;
}
interceptnotetracksforweaponswitch( var_0 )
{
if ( var_0 == "gun_2_chest" || var_0 == "gun_2_back" )
return 1;
}
watchshotgunswitchnotetracks( var_0, var_1, var_2, var_3, var_4 )
{
self endon( "killanimscript" );
self endon( "movemode" );
self endon( "switchEnded" );
self waittillmatch( var_0, var_1 );
animscripts\shared::placeweaponon( self.weapon, var_2 );
thread shotgunswitchfinish( var_3 );
self waittillmatch( var_0, var_4 );
self notify( "complete_weapon_switch" );
}
shotgunswitchfinish( var_0 )
{
self endon( "death" );
common_scripts\utility::waittill_any( "killanimscript", "movemode", "switchEnded", "complete_weapon_switch" );
self.lastweapon = self.weapon;
animscripts\shared::placeweaponon( var_0, "right" );
self.bulletsinclip = weaponclipsize( self.weapon );
}
run_playfacialanim( var_0 )
{
self.facialidx = animscripts\face::playfacialanim( var_0, "run", self.facialidx );
}
run_clearfacialanim()
{
self.facialidx = undefined;
self clearanim( %head, 0.2 );
}