991 lines
28 KiB
Plaintext
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 );
|
|
}
|