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

1185 lines
30 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
if ( isdefined( level.shark_functions ) )
{
if ( issubstr( self.model, "shark" ) )
{
self [[ level.shark_functions["move"] ]]();
return;
}
}
self.sharpturnlookaheaddist = 48;
self.postsharpturnlookaheaddist = 100;
self.sharpturntooclosetodestdist = 72;
self endon( "killanimscript" );
thread handlefootstepnotetracks();
if ( self isdogbeingdriven() )
continuedrivenmovement();
else
{
startmove();
continuemovement();
}
}
end_script()
{
if ( isdefined( self.prevturnrate ) )
{
self.turnrate = self.prevturnrate;
self.prevturnrate = undefined;
}
if ( isdefined( self.moveoverridesound ) )
{
stopmovesound();
self.moveoverridesound = undefined;
}
self.drivenmovemode = undefined;
self.bsharpturnduringsharpturn = undefined;
cancelallbut( undefined );
}
setupmovement()
{
thread waitfordrivenchange();
thread waitforrunwalkslopechange();
thread waitforratechange();
thread waitforbark();
thread waitforsharpturn();
thread waitforstop();
thread waitforfollowspeed();
}
#using_animtree("dog");
continuemovement()
{
self.moveratemultiplier = 1;
setupmovement();
self animmode( "none" );
self orientmode( "face motion" );
self clearanim( %body, 0.2 );
setmoveanim( self.movemode, self.stairsstate, 1 );
}
continuedrivenmovement()
{
self clearanim( %body, 0.5 );
self.drivenmovemode = getdesireddrivenmovemode( "walk" );
setdrivenanim( self.drivenmovemode, 1 );
thread waitfordrivenchange();
thread drivenanimupdate();
}
startturntoangle( var_0, var_1 )
{
self clearanim( %body, 0.2 );
animscripts\dog\dog_stop::turntoangle( var_0, var_1 );
}
startmove()
{
self.bfirstmoveanim = 1;
var_0 = self getnegotiationstartnode();
if ( isdefined( var_0 ) )
var_1 = var_0.origin;
else
var_1 = self.pathgoalpos;
if ( !isdefined( var_1 ) )
return;
if ( isdefined( self.disableexits ) && self.disableexits )
return;
if ( self isdogbeingdriven() )
return;
var_2 = vectortoangles( self.lookaheaddir );
var_3 = angleclamp180( var_2[1] - self.angles[1] );
if ( isdefined( self.bdoturnandmove ) && self.bdoturnandmove || isdefined( self.movementtype ) && ( self.movementtype == "walk" || self.movementtype == "walk_fast" || self.movementtype == "sniff" ) )
{
if ( abs( var_3 ) > 25 )
startturntoangle( var_2[1], 1 );
return;
}
if ( length2dsquared( self.velocity ) > 16 )
{
var_4 = vectortoangles( self.velocity );
if ( abs( angleclamp180( var_4[1] - var_2[1] ) ) < 45 )
return;
}
if ( distancesquared( var_1, self.origin ) < 22500 )
{
if ( abs( var_3 ) > 25 )
startturntoangle( var_2[1], 1 );
return;
}
var_5 = getdogmoveanim( "run_start" );
var_6 = getangleindices( var_3 );
var_7 = undefined;
for ( var_8 = 0; var_8 < var_6.size; var_8++ )
{
var_9 = var_6[var_8];
var_7 = var_5[var_9];
var_10 = getmovedelta( var_7 );
var_11 = rotatevector( var_10, self.angles ) + self.origin;
if ( self maymovefrompointtopoint( self.origin, var_11, 1, 1 ) )
break;
}
if ( var_8 == var_6.size )
{
if ( abs( var_3 ) > 25 )
startturntoangle( var_2[1], 1 );
return;
}
self.moveanimtype = "run";
var_12 = getnotetracktimes( var_7, "code_move" );
var_13 = 1;
if ( var_12.size > 0 )
var_13 = var_12[0];
var_14 = getangledelta3d( var_7, 0, var_13 );
self animmode( "zonly_physics", 0 );
self orientmode( "face angle", angleclamp180( var_2[1] - var_14[1] ) );
var_15 = getanimlength( var_7 ) * var_13;
var_16 = 0.01 + abs( angleclamp180( var_3 - var_14[1] ) ) / var_15 / 1000;
if ( var_16 < 0.01 )
var_16 = 0.01;
self.prevturnrate = self.turnrate;
self.turnrate = var_16;
var_17 = 0.1;
if ( animscripts\dog\dog_stop::getdefaultidlestate() != "attackidle" )
var_17 = 0.4;
self setflaggedanimknoballrestart( "dog_start_move", var_7, %body, 1, var_17, self.moveplaybackrate );
thread startmove_updateangle( var_7, var_13, var_15 );
animscripts\shared::donotetracks( "dog_start_move" );
self notify( "end_startmove_updateangle" );
self.turnrate = self.prevturnrate;
self.prevturnrate = undefined;
self animmode( "none", 0 );
self orientmode( "face motion" );
}
startmove_updateangle( var_0, var_1, var_2 )
{
self endon( "killanimscript" );
self endon( "end_startmove_updateangle" );
wait 0.05;
for (;;)
{
var_3 = self getanimtime( var_0 );
var_4 = vectortoangles( self.lookaheaddir );
var_5 = getangledelta3d( var_0, var_3, var_1 );
var_6 = angleclamp180( var_4[1] - self.angles[1] );
self orientmode( "face angle", angleclamp180( var_4[1] - var_5[1] ) );
self.turnrate = 0.01 + abs( angleclamp180( var_6 - var_5[1] ) ) / var_2 / 1000;
if ( self.turnrate < 0.01 )
self.turnrate = 0.01;
wait 0.05;
}
}
startdrivenmovement()
{
var_0 = getdogmoveanim( "run_start" );
var_1 = var_0[4];
self setflaggedanimknoballrestart( "dog_start_move", var_1, %body );
animscripts\shared::donotetracks( "dog_start_move" );
}
waitfordrivenchange()
{
self endon( "dogmove_endwait_drivenchange" );
self endon( "killanimscript" );
var_0 = self isdogbeingdriven();
for (;;)
{
var_1 = self isdogbeingdriven();
if ( var_0 != var_1 )
{
cancelallbut( "drivenchange" );
if ( var_1 )
continuedrivenmovement();
else
continuemovement();
break;
}
wait 0.2;
}
}
waitforrunwalkslopechange()
{
self endon( "dogmove_endwait_runwalkslope" );
self endon( "killanimscript" );
var_0 = self.movemode;
var_1 = self.stairsstate;
var_2 = self.run_overrideanim;
var_3 = self.walk_overrideanim;
var_4 = self.movementtype;
for (;;)
{
if ( var_0 != self.movemode || var_1 != self.stairsstate || hasmovementtypechanged( var_4 ) || hasoverrideanimchanged( var_2, var_3 ) )
{
self clearanim( %dog_move, 0.2 );
if ( isdefined( self.script_nostairs ) )
setmoveanim( self.movemode, "none", 1 );
else
setmoveanim( self.movemode, self.stairsstate, 1 );
var_0 = self.movemode;
var_1 = self.stairsstate;
var_2 = self.run_overrideanim;
var_3 = self.walk_overrideanim;
var_4 = self.movementtype;
}
wait 0.1;
}
}
waitforratechange()
{
self endon( "dogmove_endwait_ratechange" );
self endon( "killanimscript" );
var_0 = self.moveplaybackrate;
var_1 = self.moveratemultiplier;
for (;;)
{
if ( var_0 != self.moveplaybackrate || var_1 != self.moveratemultiplier )
{
setmoveanim( self.movemode, self.stairsstate, 0 );
var_0 = self.moveplaybackrate;
var_1 = self.moveratemultiplier;
}
wait 0.1;
}
}
waitforsharpturn()
{
self endon( "dogmove_endwait_sharpturn" );
self endon( "killanimscript" );
self waittill( "path_changed", var_0, var_1, var_2 );
var_3 = dosharpturn( var_1, var_2 );
if ( !var_3 )
thread waitforsharpturn();
}
shoulddosharpturns()
{
if ( isdefined( self.script_noturnanim ) || self isdogbeingdriven() )
return 0;
if ( isdefined( self.movementtype ) && ( self.movementtype == "walk" || self.movementtype == "walk_fast" ) )
return 0;
if ( self.stairsstate == "down" )
return 0;
return 1;
}
dosharpturn( var_0, var_1 )
{
if ( !shoulddosharpturns() )
return 0;
var_2 = 10;
if ( var_1 )
var_2 = 30;
var_3 = vectortoangles( var_0 );
var_4 = angleclamp180( var_3[1] - self.angles[1] );
var_5 = getangleindex( var_4, var_2 );
if ( var_5 == 4 )
return 0;
cancelallbut( "sharpturn" );
thread waitforsharpturnduringsharpturn();
if ( shouldsniff() )
{
var_6 = getdogmoveanim( "sniff_turn" );
if ( var_5 < 4 )
var_7 = var_6[2];
else
var_7 = var_6[6];
}
else
var_7 = getdogturnanim( "quick_sharp_turn", var_5 );
var_8 = getnotetracktimes( var_7, "code_move" );
var_9 = 1;
if ( var_8.size > 0 )
var_9 = var_8[0];
var_10 = getangledelta( var_7, 0, var_9 );
var_11 = getanimlength( var_7 ) * var_9;
var_12 = abs( var_4 - var_10 ) / var_11 / 1000;
if ( var_12 < 0.01 )
var_12 = 0.01;
self.prevturnrate = self.turnrate;
self.turnrate = var_12;
self clearanim( %dog_move, 0.1 );
self animmode( "zonly_physics", 0 );
self orientmode( "face angle", angleclamp180( var_3[1] - var_10 ) );
self setflaggedanimknoballrestart( "dog_sharp_turn", var_7, %body, 1, 0.2, self.moveplaybackrate );
animscripts\shared::donotetracks( "dog_sharp_turn" );
self clearanim( %dog_move_turn, 0.2 );
self.turnrate = self.prevturnrate;
self.prevturnrate = undefined;
self notify( "dogmove_endwait_sharpturnduringsharpturn" );
if ( isdefined( self.bsharpturnduringsharpturn ) )
{
self.bsharpturnduringsharpturn = undefined;
if ( !dosharpturn( self.lookaheaddir, 1 ) )
continuemovement();
}
else
continuemovement();
return 1;
}
waitforsharpturnduringsharpturn()
{
self endon( "dogmove_endwait_sharpturnduringsharpturn" );
self endon( "killanimscript" );
for (;;)
{
self waittill( "path_changed", var_0, var_1, var_2 );
if ( var_2 )
self.bsharpturnduringsharpturn = 1;
}
}
shoulddoarrivals()
{
if ( isdefined( self.disablearrivals ) && self.disablearrivals )
return 0;
if ( self isdogbeingdriven() )
return 0;
if ( isdefined( self.movementtype ) && ( self.movementtype == "walk" || self.movementtype == "walk_fast" ) )
return 0;
return 1;
}
waitforstop()
{
self endon( "dogmove_endwait_stop" );
self endon( "killanimscript" );
self.stopanimdistsq = anim.dogstoppingdistsq;
self waittill( "stop_soon" );
if ( !shoulddoarrivals() )
return;
var_0 = self.pathgoalpos;
if ( !isdefined( var_0 ) )
{
thread waitforstop();
return;
}
var_1 = getarrivalnode();
if ( isdefined( var_1 ) && var_1.type != "Path" )
{
var_2 = angleclamp180( var_1.angles[1] - self.angles[1] );
var_3 = getangleindex( var_2 );
}
else
{
var_4 = var_0 - self.origin;
var_5 = vectortoangles( var_4 );
var_2 = angleclamp180( var_5[1] - self.angles[1] );
var_3 = getangleindex( var_2 );
}
var_6 = getdogmoveanim( "run_stop" );
var_7 = animscripts\dog\dog_stop::getdefaultidlestate( 0 );
if ( var_7 == "attackidle" )
var_8 = "attack";
else if ( var_7 == "sneakidle" && var_3 == 4 )
var_8 = "sneak";
else if ( var_7 == "alertidle" || var_7 == "sneakidle" )
var_8 = "alert";
else
var_8 = "casual";
var_9 = var_6[var_8][var_3];
if ( !isdefined( var_9 ) )
{
thread waitforstop();
return;
}
var_10 = getmovedelta( var_9 );
var_11 = getangledelta( var_9 );
var_12 = var_0 - self.origin;
if ( length( var_12 ) < length( var_10 ) )
{
thread waitforstop();
return;
}
var_13 = getstopdata();
var_14 = calcanimstartpos( var_13.pos, var_13.angles[1], var_10, var_11 );
var_15 = droppostoground( var_14 );
if ( !isdefined( var_15 ) )
{
thread waitforstop();
return;
}
if ( !self maymovefrompointtopoint( var_13.pos, var_15 ) )
{
thread waitforstop();
return;
}
cancelallbut( "stop" );
if ( distancesquared( var_14, self.origin ) > 4 )
{
thread waitforpathsetwhilestopping();
self setruntopos( var_14 );
self waittill( "runto_arrived" );
self notify( "dogmove_endwait_pathsetwhilestopping" );
}
if ( !shoulddoarrivals() )
{
continuemovement();
return;
}
stopmovesound();
if ( isdefined( var_1 ) && var_1.type != "Path" )
var_16 = var_1.angles;
else
{
var_17 = var_0 - self.origin;
var_16 = vectortoangles( var_17 );
}
if ( var_3 == 0 || var_3 == 1 || var_3 == 7 || var_3 == 8 )
var_18 = ( 0, var_13.angles[1] - var_11, 0 );
else
var_18 = ( 0, var_16[1] - var_11, 0 );
self.dogarrivalanim = var_9;
self startcoverarrival( var_14, var_18[1], 0 );
}
waitforpathsetwhilestopping()
{
self endon( "killanimscript" );
self endon( "dogmove_endwait_pathsetwhilestopping" );
var_0 = self.goalpos;
self waittill( "path_set" );
var_1 = self.goalpos;
if ( distance2dsquared( var_0, var_1 ) < 1 )
{
thread waitforpathsetwhilestopping();
return;
}
cancelallbut( "pathsetwhilestopping" );
continuemovement();
}
waitforbark()
{
self endon( "killanimscript" );
self endon( "dogmove_endwait_bark" );
var_0 = 0.3;
var_1 = var_0;
for (;;)
{
if ( isdefined( self.script_nobark ) && self.script_nobark )
var_1 = var_0;
else if ( isdefined( self.enemy ) )
{
self playsound( "anml_dog_bark" );
var_1 = 2 + randomint( 1 );
}
else
var_1 = var_0;
wait( var_1 );
}
}
waitforfollowspeed()
{
self endon( "killanimscript" );
self endon( "dogmove_endwait_followspeed" );
var_0 = 128;
var_1 = 0.6;
var_2 = -30;
var_3 = 30;
self.moveratemultiplier = 1;
for (;;)
{
var_4 = self.moveratemultiplier;
self.moveratemultiplier = 1;
if ( self isdogfollowinghandler() && self.movemode == "run" )
{
if ( isdefined( self.doghandler.pathgoalpos ) )
{
var_5 = self.origin - self.doghandler.origin;
var_6 = lengthsquared( var_5 );
if ( var_6 < var_0 * var_0 )
{
var_7 = vectordot( self.doghandler.lookaheaddir, var_5 );
if ( var_7 > var_3 )
self.moveratemultiplier = lerp( var_1, 1, lerpfraction( var_3, var_0, var_7 ) );
else if ( var_7 > var_2 )
self.moveratemultiplier = var_1;
else
self.moveratemultiplier = lerp( var_1, 1, lerpfraction( var_2, -1 * var_0, var_7 ) );
}
}
}
else
{
var_8 = 1;
var_9 = self getdogavoident();
if ( isdefined( var_9 ) )
{
var_10 = var_9.origin - self.origin;
var_11 = anglestoforward( self.angles );
var_12 = vectordot( var_11, var_10 );
if ( var_12 > 0 )
{
if ( isplayer( var_9 ) )
var_13 = lengthsquared( var_9 getentityvelocity() );
else
var_13 = lengthsquared( var_9.velocity );
var_14 = anglestoforward( var_9.angles );
var_15 = 0.5;
if ( var_13 < 1 || vectordot( var_14, var_11 ) > var_15 )
var_8 = 0.65;
}
}
if ( var_4 < var_8 )
self.moveratemultiplier = min( var_4 + 0.05, var_8 );
else if ( var_4 > var_8 )
self.moveratemultiplier = max( var_4 - 0.05, var_8 );
}
wait 0.1;
}
}
lerp( var_0, var_1, var_2 )
{
return var_0 + ( var_1 - var_0 ) * var_2;
}
lerpfraction( var_0, var_1, var_2 )
{
return ( var_2 - var_0 ) / ( var_1 - var_0 );
}
cancelallbut( var_0, var_1 )
{
var_2 = [ "runwalkslope", "ratechange", "bark", "sharpturn", "sharpturnduringsharpturn", "stop", "pathsetwhilestopping", "followspeed", "drivenchange", "drivenanim" ];
var_3 = isdefined( var_0 );
var_4 = isdefined( var_1 );
foreach ( var_6 in var_2 )
{
if ( var_3 && var_6 == var_0 )
continue;
if ( var_4 && var_6 == var_1 )
continue;
self notify( "dogmove_endwait_" + var_6 );
}
}
getstopdata()
{
var_0 = spawnstruct();
var_1 = getarrivalnode();
if ( isdefined( var_1 ) && var_1.type != "Path" )
{
var_0.pos = var_1.origin;
var_0.angles = var_1.angles;
}
else
{
var_0.pos = self.pathgoalpos;
if ( lengthsquared( self.velocity ) > 1 )
var_0.angles = self.angles;
else
var_0.angles = vectortoangles( self.lookaheaddir );
}
return var_0;
}
playmoveanim( var_0, var_1, var_2, var_3 )
{
if ( var_1 )
self setflaggedanimknoballrestart( "dog_move", var_0, %dog_move, 1, var_2, var_3 );
else
self setflaggedanimknoball( "dog_move", var_0, %dog_move, 1, var_2, var_3 );
}
playmoveanimknob( var_0, var_1, var_2, var_3 )
{
if ( var_1 )
self setflaggedanimknoballrestart( "dog_move", var_0, %dog_move, 1, var_2, var_3 );
else
self setflaggedanimknoball( "dog_move", var_0, %dog_move, 1, var_2, var_3 );
}
setmoveanim( var_0, var_1, var_2 )
{
var_3 = !isdefined( var_2 ) || var_2;
var_4 = undefined;
var_5 = isdefined( self.bfirstmoveanim ) && self.bfirstmoveanim;
self.bfirstmoveanim = undefined;
if ( var_0 == "walk" )
{
self setanimknob( %dog_walk, 1 );
if ( isdefined( self.walk_overrideanim ) )
var_6 = self.walk_overrideanim;
else if ( shouldsniff() )
var_6 = getdogmoveanim( "sniff" );
else
var_6 = getdogmoveanim( "walk" );
playmoveanim( var_6, var_3, 0.3, self.moveplaybackrate * self.moveratemultiplier );
self.moveanimtype = "walk";
}
else if ( var_0 == "run" )
{
if ( var_1 == "up" )
{
self setanimknob( %dog_slope, 1 );
var_6 = getdogmoveanim( "run_up" );
playmoveanimknob( var_6, var_3, 0.5, self.moveplaybackrate * self.moveratemultiplier );
self.moveanimtype = "run";
}
else if ( var_1 == "down" )
{
self setanimknob( %dog_slope, 1 );
var_6 = getdogmoveanim( "run_down" );
playmoveanimknob( var_6, var_3, 0.5, self.moveplaybackrate * self.moveratemultiplier );
self.moveanimtype = "run";
}
else if ( isdefined( self.sprint ) && self.sprint )
{
self setanimknob( %dog_run, 1 );
var_6 = getdogmoveanim( "sprint" );
playmoveanim( var_6, var_3, 0.3, self.moveplaybackrate * self.moveratemultiplier );
self.moveanimtype = "sprint";
}
else
{
self setanimknob( %dog_run, 1 );
self.moveanimtype = "run";
var_7 = isdefined( self.movementtype );
var_8 = 0.3;
if ( isdefined( self.run_overrideanim ) )
{
var_6 = self.run_overrideanim;
if ( isdefined( self.run_overridesound ) )
var_4 = self.run_overridesound;
}
else if ( var_7 && self.movementtype == "walk" )
{
var_6 = getdogmoveanim( "walk" );
self.moveanimtype = "walk";
if ( var_5 )
var_8 = 0.5;
}
else if ( var_7 && self.movementtype == "walk_fast" )
{
var_6 = getdogmoveanim( "walk_fast" );
self.moveanimtype = "walk";
if ( var_5 )
var_8 = 0.5;
}
else if ( shouldsniff() )
{
var_6 = getdogmoveanim( "sniff" );
var_4 = "anml_dog_sniff_walk";
self.moveanimtype = "walk";
if ( var_5 )
var_8 = 0.5;
}
else
var_6 = getdogmoveanim( "run" );
playmoveanim( var_6, var_3, var_8, self.moveplaybackrate * self.moveratemultiplier );
}
}
else
{
}
playmovesound( var_4 );
}
playmovesound( var_0 )
{
var_1 = isdefined( self.moveoverridesound );
var_2 = isdefined( var_0 );
if ( !var_1 && !var_2 )
return;
else if ( var_1 && var_2 && self.moveoverridesound == var_0 )
return;
stopmovesound();
if ( var_2 )
thread loopmovesound( var_0 );
}
loopmovesound( var_0 )
{
self endon( "killanimscript" );
var_1 = spawn( "script_origin", self.origin );
var_1.angles = self.angles;
var_1 linkto( self );
self.movesoundorigin = var_1;
self.moveoverridesound = var_0;
for (;;)
{
var_1 playsound( var_0, "dog_move_sound" );
var_2 = movesound_waitfordoneordeath( var_1, "dog_move_sound" );
if ( !isdefined( var_2 ) )
break;
}
}
movesound_waitfordoneordeath( var_0, var_1 )
{
self endon( "death" );
var_0 endon( "death" );
var_0 waittill( var_1 );
return 1;
}
stopmovesound()
{
if ( isdefined( self.movesoundorigin ) )
{
if ( self.movesoundorigin iswaitingonsound() )
{
self.movesoundorigin stopsounds();
wait 0.05;
}
if ( isdefined( self.movesoundorigin ) )
self.movesoundorigin delete();
self.movesoundorigin = undefined;
self.moveoverridesound = undefined;
}
}
getdesireddrivenmovemode( var_0 )
{
var_1 = 22500;
var_2 = 10000;
var_3 = length2dsquared( self.velocity );
if ( var_0 == "walk" )
{
if ( var_3 > var_1 )
return "run";
}
else if ( var_0 == "run" )
{
if ( var_3 < var_2 )
return "walk";
}
return var_0;
}
setdrivenanim( var_0, var_1, var_2 )
{
self.bfirstmoveanim = undefined;
var_3 = 0.5;
self clearanim( %dog_move, var_3 );
if ( !isdefined( var_2 ) )
var_2 = 1;
if ( var_0 == "walk" )
playmoveanimknob( getdogmoveanim( "sneak" ), var_1, var_3, var_2 );
else if ( var_0 == "run" )
playmoveanimknob( getdogmoveanim( "run" ), var_1, var_3, var_2 );
}
drivenanimupdate()
{
self endon( "dogmove_endwait_drivenanim" );
self endon( "killanimscript" );
var_0 = 30;
var_1 = var_0 * var_0;
for (;;)
{
var_2 = getdesireddrivenmovemode( self.drivenmovemode );
if ( var_2 != self.drivenmovemode )
{
setdrivenanim( var_2, 1 );
self.drivenmovemode = var_2;
}
if ( self.drivenmovemode == "walk" )
{
var_3 = 1;
var_4 = length2dsquared( self.velocity );
if ( var_4 < var_1 )
var_3 = max( sqrt( var_4 ) / var_0, 0.15 );
setdrivenanim( var_2, 0, var_3 );
}
wait 0.1;
}
}
calcanimstartpos( var_0, var_1, var_2, var_3 )
{
var_4 = var_1 - var_3;
var_5 = ( 0, var_4, 0 );
var_6 = rotatevector( var_2, var_5 );
return var_0 - var_6;
}
dog_addlean()
{
var_0 = clamp( self.leanamount / 25.0, -1, 1 );
if ( var_0 > 0 )
return;
return;
}
getangleindex( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = 10;
if ( var_0 < 0 )
return int( ceil( ( 180 + var_0 - var_1 ) / 45 ) );
else
return int( floor( ( 180 + var_0 + var_1 ) / 45 ) );
}
getangleindices( var_0, var_1 )
{
var_2 = [ -180, -135, -90, -45, 0, 45, 90, 135, 180 ];
var_3 = getangleindex( var_0, var_1 );
var_4 = [ var_3 ];
if ( var_0 > var_2[var_3] )
{
if ( var_3 + 1 < var_2.size )
{
var_4[var_4.size] = var_3 + 1;
if ( var_0 > ( var_2[var_3] + var_2[var_3 + 1] ) * 0.5 )
{
if ( var_3 + 2 < var_2.size )
var_4[var_4.size] = var_3 + 2;
}
else if ( var_3 - 1 >= 0 )
var_4[var_4.size] = var_3 - 1;
}
else
{
if ( var_3 - 1 >= 0 )
var_4[var_4.size] = var_3 - 1;
var_4[var_4.size] = 1;
}
}
else if ( var_3 - 1 >= 0 )
{
var_4[var_4.size] = var_3 - 1;
if ( var_0 < ( var_2[var_3] + var_2[var_3 - 1] ) * 0.5 )
{
if ( var_3 - 2 >= 0 )
var_4[var_4.size] = var_3 - 2;
}
else if ( var_3 + 1 < var_2.size )
var_4[var_4.size] = var_3 + 1;
}
else
{
if ( var_3 + 1 < var_2.size )
var_4[var_4.size] = var_3 + 1;
var_4[var_4.size] = var_2.size - 1;
}
return var_4;
}
droppostoground( var_0 )
{
var_1 = var_0 + ( 0, 0, 64 );
var_2 = var_0 + ( 0, 0, -64 );
var_3 = 15;
var_4 = 45;
var_5 = self aiphysicstrace( var_1, var_2, var_3, var_4, 1 );
if ( abs( var_5[2] - var_1[2] ) < 0.5 )
return undefined;
if ( abs( var_5[2] - var_2[2] ) < 0.5 )
return undefined;
return var_5;
}
aredifferent( var_0, var_1 )
{
var_2 = isdefined( var_0 );
var_3 = isdefined( var_1 );
if ( !var_2 && !var_3 )
return 0;
if ( var_2 && var_3 && var_0 == var_1 )
return 0;
return 1;
}
hasmovementtypechanged( var_0 )
{
return aredifferent( self.movementtype, var_0 );
}
hasoverrideanimchanged( var_0, var_1 )
{
return aredifferent( self.run_overrideanim, var_0 ) || aredifferent( self.walk_overrideanim, var_1 );
}
getarrivalnode()
{
if ( isdefined( self.scriptedarrivalent ) )
return self.scriptedarrivalent;
if ( isdefined( self.node ) )
return self.node;
if ( isdefined( self.prevnode ) && isdefined( self.pathgoalpos ) && distance2dsquared( self.prevnode.origin, self.pathgoalpos ) < 36 )
return self.prevnode;
return undefined;
}
shouldsniff()
{
return isdefined( self.movementtype ) && self.movementtype == "sniff";
}
getdogmoveanim( var_0 )
{
var_1 = animscripts\utility::lookupdoganim( "move", var_0 );
return var_1;
}
getdogturnanim( var_0, var_1, var_2 )
{
var_3 = getdogmoveanim( var_0 );
if ( isdefined( var_3[var_1] ) )
return var_3[var_1];
if ( isdefined( var_2 ) )
{
var_3 = getdogmoveanim( var_2 );
return var_3[var_1];
}
}
handlefootstepnotetracks()
{
self endon( "killanimscript" );
for (;;)
{
self waittill( "dog_move", var_0 );
animscripts\notetracks::handlenotetrack( var_0, "dog_move" );
}
}
initdogarchetype_move()
{
var_0 = [];
var_0["walk"] = %iw6_dog_walk;
var_0["walk_fast"] = %iw6_dog_fastwalk;
var_0["run"] = %iw6_dog_run;
var_0["run_up"] = %iw6_dog_ramp_up_run;
var_0["run_down"] = %iw6_dog_ramp_down_run;
var_0["sprint"] = %iw6_dog_sprint;
var_0["sneak"] = %iw6_dog_sneak_walk_forward;
var_0["sniff"] = %iw6_dog_sniff_walk;
var_0["run_start"] = [];
var_0["run_start"][0] = %iw6_dog_attackidle_runout_2;
var_0["run_start"][1] = %iw6_dog_attackidle_runout_3;
var_0["run_start"][2] = %iw6_dog_attackidle_runout_6;
var_0["run_start"][3] = %iw6_dog_attackidle_runout_9;
var_0["run_start"][4] = %iw6_dog_attackidle_runout_8;
var_0["run_start"][5] = %iw6_dog_attackidle_runout_7;
var_0["run_start"][6] = %iw6_dog_attackidle_runout_4;
var_0["run_start"][7] = %iw6_dog_attackidle_runout_1;
var_0["run_start"][8] = %iw6_dog_attackidle_runout_2;
var_0["run_stop"] = [];
var_0["run_stop"]["attack"] = [];
var_0["run_stop"]["attack"][0] = %iw6_dog_attackidle_runin_2;
var_0["run_stop"]["attack"][1] = %iw6_dog_attackidle_runin_1;
var_0["run_stop"]["attack"][2] = %iw6_dog_attackidle_runin_4;
var_0["run_stop"]["attack"][3] = %iw6_dog_attackidle_runin_7;
var_0["run_stop"]["attack"][4] = %iw6_dog_attackidle_runin_8;
var_0["run_stop"]["attack"][5] = %iw6_dog_attackidle_runin_9;
var_0["run_stop"]["attack"][6] = %iw6_dog_attackidle_runin_6;
var_0["run_stop"]["attack"][7] = %iw6_dog_attackidle_runin_3;
var_0["run_stop"]["attack"][8] = %iw6_dog_attackidle_runin_2;
var_0["run_stop"]["alert"] = [];
var_0["run_stop"]["alert"][0] = %iw6_dog_alertidle_runin_2;
var_0["run_stop"]["alert"][1] = %iw6_dog_alertidle_runin_1;
var_0["run_stop"]["alert"][2] = %iw6_dog_alertidle_runin_4;
var_0["run_stop"]["alert"][3] = %iw6_dog_alertidle_runin_7;
var_0["run_stop"]["alert"][4] = %iw6_dog_alertidle_runin_8;
var_0["run_stop"]["alert"][5] = %iw6_dog_alertidle_runin_9;
var_0["run_stop"]["alert"][6] = %iw6_dog_alertidle_runin_6;
var_0["run_stop"]["alert"][7] = %iw6_dog_alertidle_runin_3;
var_0["run_stop"]["alert"][8] = %iw6_dog_alertidle_runin_2;
var_0["run_stop"]["casual"] = [];
var_0["run_stop"]["casual"][0] = %iw6_dog_casualidle_runin_2;
var_0["run_stop"]["casual"][1] = %iw6_dog_casualidle_runin_1;
var_0["run_stop"]["casual"][2] = %iw6_dog_casualidle_runin_4;
var_0["run_stop"]["casual"][3] = %iw6_dog_casualidle_runin_7;
var_0["run_stop"]["casual"][4] = %iw6_dog_casualidle_runin_8;
var_0["run_stop"]["casual"][5] = %iw6_dog_casualidle_runin_9;
var_0["run_stop"]["casual"][6] = %iw6_dog_casualidle_runin_6;
var_0["run_stop"]["casual"][7] = %iw6_dog_casualidle_runin_3;
var_0["run_stop"]["casual"][8] = %iw6_dog_casualidle_runin_2;
var_0["run_stop"]["sneak"] = [];
var_0["run_stop"]["sneak"][4] = %iw6_dog_sneak_runin_8;
var_0["sharp_turn"] = [];
var_0["sharp_turn"][0] = %iw6_dog_run_turn_2;
var_0["sharp_turn"][1] = %iw6_dog_run_turn_3;
var_0["sharp_turn"][2] = %iw6_dog_run_turn_6;
var_0["sharp_turn"][3] = %iw6_dog_run_turn_9;
var_0["sharp_turn"][5] = %iw6_dog_run_turn_7;
var_0["sharp_turn"][6] = %iw6_dog_run_turn_4;
var_0["sharp_turn"][7] = %iw6_dog_run_turn_1;
var_0["sharp_turn"][8] = %iw6_dog_run_turn_2;
var_0["quick_sharp_turn"] = [];
var_0["quick_sharp_turn"][0] = %iw6_dog_run_quickturn_2;
var_0["quick_sharp_turn"][1] = %iw6_dog_run_quickturn_3;
var_0["quick_sharp_turn"][2] = %iw6_dog_run_quickturn_6;
var_0["quick_sharp_turn"][3] = %iw6_dog_run_quickturn_9;
var_0["quick_sharp_turn"][5] = %iw6_dog_run_quickturn_7;
var_0["quick_sharp_turn"][6] = %iw6_dog_run_quickturn_4;
var_0["quick_sharp_turn"][7] = %iw6_dog_run_quickturn_1;
var_0["quick_sharp_turn"][8] = %iw6_dog_run_quickturn_2;
var_0["sniff_turn"][2] = %iw6_dog_sniff_turn_6;
var_0["sniff_turn"][6] = %iw6_dog_sniff_turn_4;
anim.archetypes["dog"]["move"] = var_0;
}