843 lines
23 KiB
Plaintext
843 lines
23 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
#using_animtree("dog");
|
|
|
|
main()
|
|
{
|
|
if ( isdefined( level.shark_functions ) )
|
|
{
|
|
if ( issubstr( self.model, "shark" ) )
|
|
{
|
|
self [[ level.shark_functions["stop"] ]]();
|
|
return;
|
|
}
|
|
}
|
|
|
|
self endon( "killanimscript" );
|
|
self clearanim( %body, 0.2 );
|
|
self setanim( %dog_idle_knob );
|
|
thread waitforstatechange();
|
|
self.dognextidletwitchtime = getdognexttwitchtime();
|
|
self.moveanimtype = "walk";
|
|
self.idleanimtype = undefined;
|
|
|
|
for (;;)
|
|
{
|
|
if ( self isdogbeingdriven() )
|
|
{
|
|
dodrivenidle();
|
|
continue;
|
|
}
|
|
|
|
if ( isdefined( self.specialidleanim ) )
|
|
{
|
|
dospecialidle();
|
|
continue;
|
|
}
|
|
|
|
var_0 = dogstop_getnode();
|
|
|
|
if ( !self isdogbeingdriven() && ( !isdefined( self.bidlelooking ) || !self.bidlelooking ) )
|
|
{
|
|
var_1 = 262144;
|
|
var_2 = self.doghandler;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
if ( isdefined( var_2.node ) && isdefined( var_0 ) )
|
|
{
|
|
var_3 = var_2.origin - self.origin;
|
|
turntoangle( vectortoyaw( var_3 ) );
|
|
}
|
|
else
|
|
{
|
|
var_4 = 65536;
|
|
var_5 = 6400;
|
|
var_6 = distancesquared( self.origin, var_2.origin );
|
|
|
|
if ( var_6 < var_5 )
|
|
turntoangle( var_2.angles[1] );
|
|
else if ( var_6 < var_4 )
|
|
{
|
|
var_3 = var_2.origin - self.origin;
|
|
var_7 = vectortoyaw( var_3 );
|
|
turntoangle( var_7 );
|
|
}
|
|
}
|
|
}
|
|
else if ( ( !isdefined( var_0 ) || !issubstr( var_0.type, "Cover" ) || isdefined( self.favoriteenemy ) ) && isdefined( self.enemy ) && isalive( self.enemy ) && ( self seerecently( self.enemy, 5 ) || distancesquared( self.origin, self.enemy.origin ) < var_1 ) )
|
|
{
|
|
var_8 = self.enemy.origin - self.origin;
|
|
turntoangle( vectortoyaw( var_8 ) );
|
|
}
|
|
else if ( isdefined( var_0 ) && shouldfacenodedir( var_0 ) )
|
|
turntoangle( var_0.angles[1] );
|
|
|
|
self orientmode( "face angle", self.angles[1] );
|
|
}
|
|
|
|
if ( isdefined( self.customidleanimset ) )
|
|
{
|
|
stoplookatidle();
|
|
docustomidle();
|
|
continue;
|
|
}
|
|
|
|
var_9 = getdefaultidlestate();
|
|
|
|
if ( var_9 == "casualidle" )
|
|
{
|
|
if ( isdefined( self.idlelookattargets ) )
|
|
dolookatidle();
|
|
else
|
|
{
|
|
stoplookatidle();
|
|
playidleanim( "casualidle", getdogstopanim( "casualidle" ), 0, 0.5, 2 );
|
|
}
|
|
}
|
|
else if ( var_9 == "attackidle" )
|
|
{
|
|
if ( isdefined( self.idlelookattargets ) && isdefined( self.aggresivelookat ) )
|
|
dolookatidle();
|
|
else
|
|
{
|
|
stopidlesound();
|
|
stoplookatidle();
|
|
var_10 = !isdefined( self.enemy ) || distance2dsquared( self.origin, self.enemy.origin ) > 589824;
|
|
|
|
if ( var_10 && gettime() > self.dognextidletwitchtime )
|
|
{
|
|
var_11 = chooseattackidle();
|
|
playidleanim( "attackidle", getdogstopanim( var_11 ), 0, 0.2, -1 );
|
|
self.dognextidletwitchtime = getdognexttwitchtime();
|
|
}
|
|
else
|
|
playidleanim( "attackidle", getdogstopanim( "attackidle" ), 0, 0.5, 0.5 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
stopidlesound();
|
|
stoplookatidle();
|
|
playidleanim( var_9, getdogstopanim( var_9 ), 0, 0.5, 2 );
|
|
}
|
|
}
|
|
}
|
|
|
|
end_script()
|
|
{
|
|
if ( isdefined( self.prevturnrate ) )
|
|
{
|
|
self.turnrate = self.prevturnrate;
|
|
self.prevturnrate = undefined;
|
|
}
|
|
|
|
self.dogturnadjust = undefined;
|
|
self.dogturnrate = undefined;
|
|
self.dognextidletwitchtime = undefined;
|
|
self.currenttrackingyawspeed = undefined;
|
|
self.currenttrackingyaw = undefined;
|
|
stopidlesound();
|
|
stoplookatidle();
|
|
}
|
|
|
|
playidleanim( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
self endon( "killIdleAnim" );
|
|
|
|
if ( isdefined( self.idleanimtype ) && self.idleanimtype != var_0 )
|
|
{
|
|
var_5 = getdogstoptransitionanim( self.idleanimtype, var_0 );
|
|
|
|
if ( isdefined( var_5 ) )
|
|
{
|
|
self setflaggedanimknobrestart( "dog_idle_transition", var_5, 1, 0.2, self.animplaybackrate );
|
|
animscripts\shared::donotetracks( "dog_idle_transition" );
|
|
var_3 = 0.2;
|
|
}
|
|
}
|
|
|
|
self.idleanimtype = var_0;
|
|
|
|
if ( var_2 )
|
|
self setflaggedanimknobrestart( "dog_idle", var_1, 1, var_3, self.animplaybackrate );
|
|
else
|
|
self setflaggedanimknob( "dog_idle", var_1, 1, var_3, self.animplaybackrate );
|
|
|
|
if ( var_4 > 0 )
|
|
animscripts\notetracks::donotetracksfortime( var_4, "dog_idle" );
|
|
else
|
|
animscripts\shared::donotetracks( "dog_idle" );
|
|
}
|
|
|
|
waitforstatechange()
|
|
{
|
|
self endon( "killanimscript" );
|
|
var_0 = self isdogbeingdriven();
|
|
var_1 = self.defaultidlestateoverride;
|
|
|
|
for (;;)
|
|
{
|
|
var_2 = self isdogbeingdriven();
|
|
|
|
if ( var_2 != var_0 )
|
|
{
|
|
killidleanim();
|
|
var_0 = var_2;
|
|
self orientmode( "face angle", self.angles[1] );
|
|
}
|
|
else if ( animscripts\dog\dog_move::aredifferent( self.defaultidlestateoverride, var_1 ) )
|
|
{
|
|
killidleanim();
|
|
var_1 = self.defaultidlestateoverride;
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
killidleanim()
|
|
{
|
|
self notify( "killIdleAnim" );
|
|
stoplookatidle();
|
|
}
|
|
|
|
shouldfacenodedir( var_0 )
|
|
{
|
|
return var_0.type == "Guard" || var_0.type == "Exposed" || issubstr( var_0.type, "Cover " );
|
|
}
|
|
|
|
getturnanim( var_0 )
|
|
{
|
|
var_1 = getdefaultidlestate();
|
|
|
|
if ( var_1 == "casualidle" || var_1 == "sniffidle" )
|
|
{
|
|
if ( var_0 < -135 || var_0 > 135 )
|
|
return getdogstopanim( "casual_turn_180" );
|
|
else if ( var_0 < 0 )
|
|
return getdogstopanim( "casual_turn_right" );
|
|
else
|
|
return getdogstopanim( "casual_turn_left" );
|
|
}
|
|
else if ( var_0 < -135 || var_0 > 135 )
|
|
return getdogstopanim( "attack_turn_180" );
|
|
else if ( var_0 < 0 )
|
|
return getdogstopanim( "attack_turn_right" );
|
|
else
|
|
return getdogstopanim( "attack_turn_left" );
|
|
}
|
|
|
|
handledogturnnotetracks( var_0 )
|
|
{
|
|
if ( var_0 == "turn_begin" )
|
|
{
|
|
var_1 = angleclamp180( self.angles[1] + self.dogturnadjust );
|
|
self.dogturnadjust = undefined;
|
|
self.prevturnrate = self.turnrate;
|
|
self.turnrate = self.dogturnrate;
|
|
self.dogturnrate = undefined;
|
|
self orientmode( "face angle", var_1 );
|
|
}
|
|
else if ( var_0 == "turn_end" )
|
|
{
|
|
self.turnrate = self.prevturnrate;
|
|
self.prevturnrate = undefined;
|
|
}
|
|
}
|
|
|
|
turntoangle( var_0, var_1 )
|
|
{
|
|
self endon( "killIdleAnim" );
|
|
var_2 = self.angles[1];
|
|
var_3 = angleclamp180( var_0 - var_2 );
|
|
|
|
if ( -0.5 < var_3 && var_3 < 0.5 )
|
|
return;
|
|
|
|
if ( -15 < var_3 && var_3 < 15 )
|
|
{
|
|
rotatetoangle( var_0, 2 );
|
|
return;
|
|
}
|
|
|
|
stopidlesound();
|
|
var_4 = getturnanim( var_3 );
|
|
var_5 = getanimlength( var_4 );
|
|
var_6 = getangledelta( var_4 );
|
|
var_7 = 0.2;
|
|
|
|
if ( var_5 < 0.7 )
|
|
var_7 = 0.05;
|
|
|
|
if ( isdefined( var_1 ) && var_1 )
|
|
self animmode( "zonly_physics" );
|
|
else
|
|
self animmode( "angle deltas" );
|
|
|
|
self setanim( %dog_idle_knob, 1, var_7 );
|
|
self setflaggedanimknobrestart( "dog_turn", var_4, 1, var_7 );
|
|
|
|
if ( animhasnotetrack( var_4, "turn_begin" ) && animhasnotetrack( var_4, "turn_end" ) )
|
|
{
|
|
var_8 = getnotetracktimes( var_4, "turn_begin" );
|
|
var_9 = getnotetracktimes( var_4, "turn_end" );
|
|
var_10 = ( var_9[0] - var_8[0] ) * var_5;
|
|
self.dogturnadjust = angleclamp180( var_3 - var_6 );
|
|
self.dogturnrate = max( abs( self.dogturnadjust ) / var_10 / 1000, 0.01 );
|
|
self orientmode( "face angle", self.angles[1] );
|
|
animscripts\shared::donotetracks( "dog_turn", ::handledogturnnotetracks );
|
|
}
|
|
else
|
|
{
|
|
self.prevturnrate = self.turnrate;
|
|
self.turnrate = max( abs( angleclamp180( var_3 - var_6 ) ) / var_5 / 1000, 0.01 );
|
|
self orientmode( "face angle", angleclamp180( var_0 - var_6 ) );
|
|
animscripts\shared::donotetracks( "dog_turn" );
|
|
self.turnrate = self.prevturnrate;
|
|
self.prevturnrate = undefined;
|
|
}
|
|
|
|
self clearanim( var_4, 0.2 );
|
|
self animmode( "none" );
|
|
}
|
|
|
|
rotatetoangle( var_0, var_1 )
|
|
{
|
|
self orientmode( "face angle", var_0 );
|
|
|
|
while ( abs( angleclamp180( var_0 - self.angles[1] ) ) > var_1 )
|
|
wait 0.1;
|
|
}
|
|
|
|
shouldcoveridle()
|
|
{
|
|
var_0 = dogstop_getnode();
|
|
|
|
if ( isdefined( var_0 ) && issubstr( var_0.type, "Cover" ) )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
chooseattackidle()
|
|
{
|
|
var_0 = [ "attackidle_twitch_1", "attackidle_twitch_2" ];
|
|
var_1 = [ 1, 1 ];
|
|
|
|
if ( !isdefined( self.script_nobark ) || !self.script_nobark )
|
|
{
|
|
var_2 = var_0.size;
|
|
var_0[var_2] = "attackidle_bark";
|
|
var_1[var_2] = 4;
|
|
}
|
|
|
|
var_3 = 0;
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
var_3 = var_3 + var_1[var_2];
|
|
|
|
var_4 = randomint( var_3 );
|
|
var_5 = 0;
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
var_5 = var_5 + var_1[var_2];
|
|
|
|
if ( var_4 < var_5 )
|
|
return var_0[var_2];
|
|
}
|
|
}
|
|
|
|
dodrivenidle()
|
|
{
|
|
playidlesound( self.customidlesound );
|
|
playidleanim( "sneakstandidle", getdogstopanim( "sneakstandidle" ), 0, 0.5, -1 );
|
|
}
|
|
|
|
dospecialidle()
|
|
{
|
|
if ( isarray( self.specialidleanim ) )
|
|
var_0 = self.specialidleanim[randomint( self.specialidleanim.size )];
|
|
else
|
|
var_0 = self.specialidleanim;
|
|
|
|
playidlesound( self.customidlesound );
|
|
playidleanim( "specialidle", var_0, 0, 0.5, -1 );
|
|
}
|
|
|
|
docustomidle()
|
|
{
|
|
if ( isarray( self.customidleanimset ) )
|
|
{
|
|
if ( isdefined( self.customidleanimweights ) )
|
|
var_0 = animscripts\utility::anim_array( self.customidleanimset, self.customidleanimweights );
|
|
else
|
|
var_0 = self.customidleanimset[randomint( self.customidleanimset.size )];
|
|
}
|
|
else
|
|
var_0 = self.customidleanimset;
|
|
|
|
playidlesound( self.customidlesound );
|
|
playidleanim( "customidle", var_0, 0, 0.5, -1 );
|
|
}
|
|
|
|
dolookatidle()
|
|
{
|
|
if ( !isdefined( self.bidlelooking ) || !self.bidlelooking )
|
|
{
|
|
self.bidlelooking = 1;
|
|
thread lookatidleupdate();
|
|
}
|
|
|
|
wait 0.5;
|
|
}
|
|
|
|
stoplookatidle()
|
|
{
|
|
if ( !isdefined( self.bidlelooking ) || !self.bidlelooking )
|
|
return;
|
|
|
|
self.bidlelooking = undefined;
|
|
self.idletrackloop = undefined;
|
|
self notify( "endIdleLookAt" );
|
|
self clearanim( %look_2, 1 );
|
|
self clearanim( %look_4, 1 );
|
|
self clearanim( %look_6, 1 );
|
|
self clearanim( %look_8, 1 );
|
|
}
|
|
|
|
lookatidleupdate()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "endIdleLookAt" );
|
|
|
|
while ( isdefined( self.idlelookattargets ) && isarray( self.idlelookattargets ) && self.idlelookattargets.size > 0 )
|
|
{
|
|
var_0 = getlookattarget( self.lookattarget );
|
|
self.lookattarget = var_0;
|
|
|
|
if ( !isdefined( self.idletrackloop ) )
|
|
thread idletrackloop();
|
|
|
|
var_1 = 3 + randomfloat( 3 );
|
|
wait( var_1 );
|
|
}
|
|
|
|
stoplookatidle();
|
|
}
|
|
|
|
getlookattarget( var_0 )
|
|
{
|
|
if ( isdefined( self.alwayslookatfirsttarget ) && self.alwayslookatfirsttarget && self.idlelookattargets.size > 0 )
|
|
return self.idlelookattargets[0];
|
|
|
|
var_1 = isdefined( var_0 );
|
|
|
|
if ( self.idlelookattargets.size == 1 )
|
|
{
|
|
if ( var_1 )
|
|
return undefined;
|
|
else
|
|
return self.idlelookattargets[0];
|
|
}
|
|
|
|
if ( var_1 )
|
|
{
|
|
var_2 = randomint( 100 );
|
|
|
|
if ( var_2 < 33 )
|
|
return undefined;
|
|
}
|
|
|
|
var_3 = self.idlelookattargets;
|
|
var_4 = [];
|
|
var_5 = 0;
|
|
var_6 = !var_1;
|
|
|
|
for ( var_7 = 0; var_7 < var_3.size; var_7++ )
|
|
{
|
|
if ( !var_6 && var_3[var_7] == var_0 )
|
|
{
|
|
var_8 = var_3.size - 1;
|
|
|
|
if ( var_7 != var_8 )
|
|
var_3[var_7] = var_3[var_8];
|
|
|
|
var_3[var_8] = undefined;
|
|
var_6 = 1;
|
|
|
|
if ( var_7 == var_8 )
|
|
break;
|
|
}
|
|
|
|
var_9 = distance2dsquared( self.origin, var_3[var_7].origin );
|
|
var_4[var_7] = 1 / var_9;
|
|
var_5 = var_5 + var_4[var_7];
|
|
}
|
|
|
|
var_10 = randomfloat( var_5 );
|
|
var_11 = 0;
|
|
|
|
for ( var_7 = 0; var_7 < var_3.size; var_7++ )
|
|
{
|
|
var_11 = var_11 + var_4[var_7];
|
|
|
|
if ( var_10 < var_11 )
|
|
return var_3[var_7];
|
|
}
|
|
}
|
|
|
|
idletrackloop()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "endIdleLookAt" );
|
|
self.idletrackloop = 1;
|
|
self clearanim( %dog_idle_knob, 0.2 );
|
|
self setanimknob( getdogstopanimbase(), 1, 0.5 );
|
|
self setanimknoblimited( getdogstopanimlook( "2" ), 1, 0 );
|
|
self setanimknoblimited( getdogstopanimlook( "4" ), 1, 0 );
|
|
self setanimknoblimited( getdogstopanimlook( "6" ), 1, 0 );
|
|
self setanimknoblimited( getdogstopanimlook( "8" ), 1, 0 );
|
|
var_0 = 90;
|
|
var_1 = -100;
|
|
var_2 = -25;
|
|
var_3 = 25;
|
|
self.currenttrackingyaw = 0;
|
|
self.currenttrackingyawspeed = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_4 = self geteye();
|
|
|
|
if ( isdefined( self.lookattarget ) )
|
|
{
|
|
var_5 = self.lookattarget geteye();
|
|
var_6 = var_5 - var_4;
|
|
var_7 = vectortoangles( var_6 );
|
|
}
|
|
else
|
|
var_7 = self.angles;
|
|
|
|
var_8 = angleclamp180( var_7[1] - self.angles[1] );
|
|
var_9 = angleclamp180( var_7[0] - self.angles[0] );
|
|
|
|
if ( var_8 > var_0 || var_8 < var_1 )
|
|
{
|
|
self.currenttrackingyaw = 0;
|
|
self.currenttrackingyawspeed = 0;
|
|
turntoangle( self.angles[1] + var_8 * 0.75 );
|
|
self setanimknob( getdogstopanimbase(), 1, 0.1 );
|
|
continue;
|
|
}
|
|
|
|
var_10 = calctrackingyaw( var_8, self.currenttrackingyaw, self.currenttrackingyawspeed );
|
|
self.currenttrackingyaw = var_10;
|
|
var_11 = 0;
|
|
var_12 = 0;
|
|
var_13 = 0;
|
|
var_14 = 0;
|
|
|
|
if ( var_10 > 0 )
|
|
var_11 = clamp( var_10 / var_0, 0, 1 );
|
|
else
|
|
var_12 = clamp( var_10 / var_1, 0, 1 );
|
|
|
|
if ( var_9 < 0 )
|
|
var_13 = clamp( var_9 / var_2, 0, 1 );
|
|
else
|
|
var_14 = clamp( var_9 / var_3, 0, 1 );
|
|
|
|
self setanimlimited( %look_2, var_14, 1 );
|
|
self setanimlimited( %look_4, var_11, 0.1 );
|
|
self setanimlimited( %look_6, var_12, 0.1 );
|
|
self setanimlimited( %look_8, var_13, 1 );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
calctrackingyaw( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = 90;
|
|
var_4 = -100;
|
|
var_5 = 1;
|
|
var_6 = 0.5;
|
|
var_7 = 6;
|
|
var_8 = clamp( var_0, var_4, var_3 );
|
|
var_9 = angleclamp180( var_8 - var_1 );
|
|
|
|
if ( var_8 > var_1 )
|
|
{
|
|
if ( var_2 >= 0 && !needtodecelforarrival( var_9, var_2, var_6 ) )
|
|
var_10 = var_2 + var_5;
|
|
else if ( var_2 >= 0 )
|
|
var_10 = var_2 - var_6;
|
|
else
|
|
var_10 = var_2 + var_6;
|
|
}
|
|
else if ( var_2 <= 0 && !needtodecelforarrival( var_9, var_2, var_6 ) )
|
|
var_10 = var_2 - var_5;
|
|
else if ( var_2 <= 0 )
|
|
var_10 = var_2 + var_6;
|
|
else
|
|
var_10 = var_2 - var_6;
|
|
|
|
var_10 = clamp( var_10, -1 * var_7, var_7 );
|
|
|
|
if ( var_8 >= var_1 && var_1 + var_10 > var_8 )
|
|
var_10 = var_8 - var_1;
|
|
else if ( var_8 <= var_1 && var_1 + var_10 < var_8 )
|
|
var_10 = var_8 - var_1;
|
|
|
|
var_11 = var_1 + var_10;
|
|
self.currenttrackingyawspeed = var_10;
|
|
return var_11;
|
|
}
|
|
|
|
needtodecelforarrival( var_0, var_1, var_2 )
|
|
{
|
|
if ( var_1 == 0 )
|
|
return 0;
|
|
|
|
var_3 = abs( var_0 );
|
|
var_4 = abs( var_1 );
|
|
var_2 = abs( var_2 );
|
|
|
|
while ( var_3 > 0 )
|
|
{
|
|
var_3 = var_3 - var_4;
|
|
var_4 = var_4 - var_2;
|
|
|
|
if ( var_4 < 0 )
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
dogstop_getnode()
|
|
{
|
|
if ( isdefined( self.node ) )
|
|
return self.node;
|
|
|
|
return self.prevnode;
|
|
}
|
|
|
|
getdefaultidlestate( var_0 )
|
|
{
|
|
if ( isdefined( self.defaultidlestateoverride ) )
|
|
return self.defaultidlestateoverride;
|
|
|
|
var_1 = isdefined( self.enemy ) && isalive( self.enemy );
|
|
var_2 = var_1 && distancesquared( self.origin, self.enemy.origin ) < 1000000 && ( isdefined( self.favoriteenemy ) || self seerecently( self.enemy, 5 ) );
|
|
var_3 = dogstop_getnode();
|
|
|
|
if ( isdefined( self.aggresivelookat ) )
|
|
return "attackidle";
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 1;
|
|
|
|
if ( isdefined( var_3 ) && ( !var_0 || distance( self.origin, var_3.origin ) <= 32 ) )
|
|
{
|
|
if ( var_3.type == "Guard" )
|
|
{
|
|
if ( var_2 )
|
|
return "attackidle";
|
|
else
|
|
return "alertidle";
|
|
}
|
|
else if ( issubstr( var_3.type, "Cover" ) )
|
|
return "sneakidle";
|
|
else if ( var_1 )
|
|
{
|
|
if ( var_2 )
|
|
return "attackidle";
|
|
else
|
|
return "alertidle";
|
|
}
|
|
}
|
|
|
|
if ( var_2 )
|
|
return "attackidle";
|
|
|
|
if ( animscripts\dog\dog_move::shouldsniff() )
|
|
return "sniffidle";
|
|
|
|
return "casualidle";
|
|
}
|
|
|
|
should_growl()
|
|
{
|
|
if ( isdefined( self.script_growl ) )
|
|
return 1;
|
|
|
|
if ( !isdefined( self.enemy ) )
|
|
return 0;
|
|
|
|
if ( !isalive( self.enemy ) )
|
|
return 1;
|
|
|
|
return !self cansee( self.enemy );
|
|
}
|
|
|
|
lookattarget( var_0 )
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "stop tracking" );
|
|
self clearanim( %german_shepherd_look_2, 0 );
|
|
self clearanim( %german_shepherd_look_4, 0 );
|
|
self clearanim( %german_shepherd_look_6, 0 );
|
|
self clearanim( %german_shepherd_look_8, 0 );
|
|
self setdefaultaimlimits();
|
|
self.rightaimlimit = 90;
|
|
self.leftaimlimit = -90;
|
|
self setanimlimited( anim.doglookpose[var_0][2], 1, 0 );
|
|
self setanimlimited( anim.doglookpose[var_0][4], 1, 0 );
|
|
self setanimlimited( anim.doglookpose[var_0][6], 1, 0 );
|
|
self setanimlimited( anim.doglookpose[var_0][8], 1, 0 );
|
|
animscripts\track::setanimaimweight( 1, 0.2 );
|
|
animscripts\track::trackloop( %german_shepherd_look_2, %german_shepherd_look_4, %german_shepherd_look_6, %german_shepherd_look_8 );
|
|
}
|
|
|
|
playidlesound( var_0 )
|
|
{
|
|
if ( !animscripts\dog\dog_move::aredifferent( self.idlesound, var_0 ) )
|
|
return;
|
|
|
|
stopidlesound();
|
|
|
|
if ( isdefined( var_0 ) )
|
|
thread loopidlesound( var_0 );
|
|
}
|
|
|
|
loopidlesound( var_0 )
|
|
{
|
|
self endon( "killanimscript" );
|
|
var_1 = spawn( "script_origin", self.origin );
|
|
var_1.angles = self.angles;
|
|
var_1 linkto( self );
|
|
self.idlesoundorigin = var_1;
|
|
self.idlesound = var_0;
|
|
|
|
for (;;)
|
|
{
|
|
var_1 playsound( var_0, "dog_idle_sound" );
|
|
var_2 = idlesound_waitfordoneordeath( var_1, "dog_idle_sound" );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
break;
|
|
}
|
|
}
|
|
|
|
idlesound_waitfordoneordeath( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_0 waittill( var_1 );
|
|
return 1;
|
|
}
|
|
|
|
stopidlesound()
|
|
{
|
|
if ( isdefined( self.idlesoundorigin ) )
|
|
{
|
|
if ( self.idlesoundorigin iswaitingonsound() )
|
|
{
|
|
self.idlesoundorigin stopsounds();
|
|
wait 0.05;
|
|
}
|
|
|
|
self.idlesoundorigin delete();
|
|
self.idlesoundorigin = undefined;
|
|
self.idlesound = undefined;
|
|
}
|
|
}
|
|
|
|
getdognexttwitchtime()
|
|
{
|
|
if ( isdefined( self.script_nobark ) && self.script_nobark )
|
|
return gettime() + 4000 + randomint( 3000 );
|
|
|
|
return gettime() + 1000 + randomint( 1000 );
|
|
}
|
|
|
|
getdogstopanimbase()
|
|
{
|
|
if ( isdefined( self.aggresivelookat ) )
|
|
return getdogstopanim( "attackidle_base" );
|
|
else
|
|
return getdogstopanim( "casualidle_base" );
|
|
}
|
|
|
|
getdogstopanimlook( var_0 )
|
|
{
|
|
if ( isdefined( self.aggresivelookat ) )
|
|
return getdogstopanim( "attackidle_look_" + var_0 );
|
|
else
|
|
return getdogstopanim( "casualidle_look_" + var_0 );
|
|
}
|
|
|
|
getdogstopanim( var_0 )
|
|
{
|
|
var_1 = animscripts\utility::lookupdoganim( "stop", var_0 );
|
|
return var_1;
|
|
}
|
|
|
|
getdogstoptransitionanim( var_0, var_1 )
|
|
{
|
|
var_2 = animscripts\utility::lookupdoganim( "stop", "transition" );
|
|
|
|
if ( isdefined( var_2[var_0] ) && isdefined( var_2[var_0][var_1] ) )
|
|
return var_2[var_0][var_1];
|
|
|
|
return undefined;
|
|
}
|
|
|
|
initdogarchetype_stop()
|
|
{
|
|
var_0 = [];
|
|
var_0["attackidle"] = %iw6_dog_attackidle;
|
|
var_0["attack_turn_left"] = %iw6_dog_attackidle_turn_4;
|
|
var_0["attack_turn_right"] = %iw6_dog_attackidle_turn_6;
|
|
var_0["attack_turn_180"] = %iw6_dog_attackidle_turn_2;
|
|
var_0["attackidle_base"] = %iw6_dog_attackidle_base;
|
|
var_0["attackidle_look_2"] = %iw6_dog_attackidle_2;
|
|
var_0["attackidle_look_4"] = %iw6_dog_attackidle_4;
|
|
var_0["attackidle_look_6"] = %iw6_dog_attackidle_6;
|
|
var_0["attackidle_look_8"] = %iw6_dog_attackidle_8;
|
|
var_0["alertidle"] = %iw6_dog_alertidle;
|
|
var_0["attackidle_bark"] = %iw6_dog_attackidle_bark;
|
|
var_0["attackidle_twitch_1"] = %iw6_dog_attackidle_twitch_1;
|
|
var_0["attackidle_twitch_2"] = %iw6_dog_attackidle_twitch_2;
|
|
var_0["casualidle"] = %iw6_dog_casualidle;
|
|
var_0["casual_turn_left"] = %iw6_dog_casualidle_turn_4;
|
|
var_0["casual_turn_right"] = %iw6_dog_casualidle_turn_6;
|
|
var_0["casual_turn_180"] = %iw6_dog_casualidle_turn_2;
|
|
var_0["casualidle_base"] = %iw6_dog_casualidle_base;
|
|
var_0["casualidle_look_2"] = %iw6_dog_casualidle_2;
|
|
var_0["casualidle_look_4"] = %iw6_dog_casualidle_4;
|
|
var_0["casualidle_look_6"] = %iw6_dog_casualidle_6;
|
|
var_0["casualidle_look_8"] = %iw6_dog_casualidle_8;
|
|
var_0["sneakstandidle"] = %iw6_dog_sneak_stand_idle;
|
|
var_0["sneakidle"] = %iw6_dog_sneakidle;
|
|
var_0["sniffidle"] = %iw6_dog_sniff_idle;
|
|
var_0["transition"] = [];
|
|
var_0["transition"]["casualidle"] = [];
|
|
var_0["transition"]["casualidle"]["sneakidle"] = %iw6_dog_idle_2_sneak_idle;
|
|
var_0["transition"]["casualidle"]["alertidle"] = %iw6_dog_idle_2_alert_idle;
|
|
var_0["transition"]["casualidle"]["attackidle"] = %iw6_dog_idle_2_alert_idle;
|
|
var_0["transition"]["alertidle"] = [];
|
|
var_0["transition"]["alertidle"]["casualidle"] = %iw6_dog_alert_2_casual_idle;
|
|
var_0["transition"]["alertidle"]["sneakidle"] = %iw6_dog_idle_2_sneak_idle;
|
|
var_0["transition"]["attackidle"] = [];
|
|
var_0["transition"]["attackidle"]["casualidle"] = %iw6_dog_alert_2_casual_idle;
|
|
var_0["transition"]["attackidle"]["sneakidle"] = %iw6_dog_idle_2_sneak_idle;
|
|
var_0["transition"]["sneakidle"] = [];
|
|
var_0["transition"]["sneakidle"]["casualidle"] = %iw6_dog_sneak_2_casual_idle;
|
|
var_0["transition"]["sneakidle"]["alertidle"] = %iw6_dog_sneak_2_casual_idle;
|
|
var_0["transition"]["sneakidle"]["attackidle"] = %iw6_dog_sneak_2_casual_idle;
|
|
anim.archetypes["dog"]["stop"] = var_0;
|
|
}
|