mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-07 17:37:50 -05:00
133 lines
3.0 KiB
Plaintext
133 lines
3.0 KiB
Plaintext
#include maps/mp/animscripts/utility;
|
|
#include maps/mp/animscripts/shared;
|
|
|
|
main()
|
|
{
|
|
debug_anim_print( "dog_stop::main()" );
|
|
self endon( "killanimscript" );
|
|
self setaimanimweights( 0, 0 );
|
|
self thread lookattarget( "attackIdle" );
|
|
while ( 1 )
|
|
{
|
|
if ( shouldattackidle() )
|
|
{
|
|
self randomattackidle();
|
|
maps/mp/animscripts/shared::donotetracks( "done" );
|
|
}
|
|
else
|
|
{
|
|
self set_orient_mode( "face current" );
|
|
debug_anim_print( "dog_stop::main() - Setting stop_idle" );
|
|
self notify( "stop tracking" );
|
|
self setaimanimweights( 0, 0 );
|
|
self setanimstate( "stop_idle" );
|
|
maps/mp/animscripts/shared::donotetracks( "done" );
|
|
self thread lookattarget( "attackIdle" );
|
|
}
|
|
debug_anim_print( "dog_stop::main() - stop idle loop notify done." );
|
|
}
|
|
}
|
|
|
|
isfacingenemy( tolerancecosangle )
|
|
{
|
|
/#
|
|
assert( isDefined( self.enemy ) );
|
|
#/
|
|
vectoenemy = self.enemy.origin - self.origin;
|
|
disttoenemy = length( vectoenemy );
|
|
if ( disttoenemy < 1 )
|
|
{
|
|
return 1;
|
|
}
|
|
forward = anglesToForward( self.angles );
|
|
val1 = ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] );
|
|
val2 = ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy;
|
|
return ( ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy ) > tolerancecosangle;
|
|
}
|
|
|
|
randomattackidle()
|
|
{
|
|
if ( isfacingenemy( -0,5 ) )
|
|
{
|
|
self set_orient_mode( "face current" );
|
|
}
|
|
else
|
|
{
|
|
self set_orient_mode( "face enemy" );
|
|
}
|
|
if ( should_growl() )
|
|
{
|
|
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" );
|
|
self setanimstate( "stop_attackidle_growl" );
|
|
return;
|
|
}
|
|
idlechance = 33;
|
|
barkchance = 66;
|
|
if ( isDefined( self.mode ) )
|
|
{
|
|
if ( self.mode == "growl" )
|
|
{
|
|
idlechance = 15;
|
|
barkchance = 30;
|
|
}
|
|
else
|
|
{
|
|
if ( self.mode == "bark" )
|
|
{
|
|
idlechance = 15;
|
|
barkchance = 85;
|
|
}
|
|
}
|
|
}
|
|
rand = randomint( 100 );
|
|
if ( rand < idlechance )
|
|
{
|
|
debug_anim_print( "dog_stop::main() - Setting stop_attackidle" );
|
|
self setanimstate( "stop_attackidle" );
|
|
}
|
|
else if ( rand < barkchance )
|
|
{
|
|
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_bark " );
|
|
self setanimstate( "stop_attackidle_bark" );
|
|
}
|
|
else
|
|
{
|
|
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl " );
|
|
self setanimstate( "stop_attackidle_growl" );
|
|
}
|
|
}
|
|
|
|
shouldattackidle()
|
|
{
|
|
if ( isDefined( self.enemy ) && isalive( self.enemy ) )
|
|
{
|
|
return distancesquared( self.origin, self.enemy.origin ) < 1000000;
|
|
}
|
|
}
|
|
|
|
should_growl()
|
|
{
|
|
if ( isDefined( self.script_growl ) )
|
|
{
|
|
return 1;
|
|
}
|
|
if ( !isalive( self.enemy ) )
|
|
{
|
|
return 1;
|
|
}
|
|
return !self cansee( self.enemy );
|
|
}
|
|
|
|
lookattarget( lookposeset )
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "stop tracking" );
|
|
debug_anim_print( "dog_stop::lookAtTarget() - Starting look at " + lookposeset );
|
|
self.rightaimlimit = 90;
|
|
self.leftaimlimit = -90;
|
|
self.upaimlimit = 45;
|
|
self.downaimlimit = -45;
|
|
self maps/mp/animscripts/shared::setanimaimweight( 1, 0,2 );
|
|
self maps/mp/animscripts/shared::trackloop();
|
|
}
|