mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-10 10:47:58 -05:00
260 lines
6.2 KiB
Plaintext
260 lines
6.2 KiB
Plaintext
#include maps/mp/animscripts/zm_utility;
|
|
#include maps/mp/animscripts/dog_stop;
|
|
#include maps/mp/animscripts/zm_shared;
|
|
#include maps/mp/animscripts/shared;
|
|
#include maps/mp/animscripts/utility;
|
|
|
|
setup_sound_variables()
|
|
{
|
|
level.dog_sounds[ "far" ] = spawnstruct();
|
|
level.dog_sounds[ "close" ] = spawnstruct();
|
|
level.dog_sounds[ "close" ].minrange = 0;
|
|
level.dog_sounds[ "close" ].maxrange = 500;
|
|
level.dog_sounds[ "close" ].sound = "aml_dog_bark_close";
|
|
level.dog_sounds[ "close" ].soundlengthplaceholder = 0,2;
|
|
level.dog_sounds[ "close" ].aftersoundwaitmin = 0,1;
|
|
level.dog_sounds[ "close" ].aftersoundwaitmax = 0,3;
|
|
level.dog_sounds[ "close" ].minrangesqr = level.dog_sounds[ "close" ].minrange * level.dog_sounds[ "close" ].minrange;
|
|
level.dog_sounds[ "close" ].maxrangesqr = level.dog_sounds[ "close" ].maxrange * level.dog_sounds[ "close" ].maxrange;
|
|
level.dog_sounds[ "far" ].minrange = 500;
|
|
level.dog_sounds[ "far" ].maxrange = 0;
|
|
level.dog_sounds[ "far" ].sound = "aml_dog_bark";
|
|
level.dog_sounds[ "far" ].soundlengthplaceholder = 0,2;
|
|
level.dog_sounds[ "far" ].aftersoundwaitmin = 0,1;
|
|
level.dog_sounds[ "far" ].aftersoundwaitmax = 0,3;
|
|
level.dog_sounds[ "far" ].minrangesqr = level.dog_sounds[ "far" ].minrange * level.dog_sounds[ "far" ].minrange;
|
|
level.dog_sounds[ "far" ].maxrangesqr = level.dog_sounds[ "far" ].maxrange * level.dog_sounds[ "far" ].maxrange;
|
|
}
|
|
|
|
main()
|
|
{
|
|
self endon( "killanimscript" );
|
|
debug_anim_print( "dog_move::main()" );
|
|
self setaimanimweights( 0, 0 );
|
|
do_movement = 1;
|
|
/#
|
|
if ( !debug_allow_movement() )
|
|
{
|
|
do_movement = 0;
|
|
#/
|
|
}
|
|
if ( isDefined( level.hostmigrationtimer ) )
|
|
{
|
|
do_movement = 0;
|
|
}
|
|
if ( !isDefined( self.traversecomplete ) && !isDefined( self.skipstartmove ) && self.a.movement == "run" && do_movement )
|
|
{
|
|
self startmove();
|
|
blendtime = 0;
|
|
}
|
|
else
|
|
{
|
|
blendtime = 0,2;
|
|
}
|
|
self.traversecomplete = undefined;
|
|
self.skipstartmove = undefined;
|
|
if ( do_movement )
|
|
{
|
|
if ( self.a.movement == "run" )
|
|
{
|
|
debug_anim_print( "dog_move::main() - Setting move_run" );
|
|
self setanimstatefromasd( "zm_move_run" );
|
|
maps/mp/animscripts/zm_shared::donotetracksfortime( 0,1, "move_run" );
|
|
debug_anim_print( "dog_move::main() - move_run wait 0.1 done " );
|
|
}
|
|
else
|
|
{
|
|
debug_anim_print( "dog_move::main() - Setting move_start " );
|
|
self setanimstatefromasd( "zm_move_walk" );
|
|
maps/mp/animscripts/zm_shared::donotetracks( "move_walk" );
|
|
}
|
|
}
|
|
self thread maps/mp/animscripts/dog_stop::lookattarget( "normal" );
|
|
while ( 1 )
|
|
{
|
|
self moveloop();
|
|
if ( self.a.movement == "run" )
|
|
{
|
|
if ( self.disablearrivals == 0 )
|
|
{
|
|
self thread stopmove();
|
|
}
|
|
self waittill( "run" );
|
|
}
|
|
}
|
|
}
|
|
|
|
moveloop()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "stop_soon" );
|
|
while ( 1 )
|
|
{
|
|
do_movement = 1;
|
|
/#
|
|
if ( !debug_allow_movement() )
|
|
{
|
|
do_movement = 0;
|
|
#/
|
|
}
|
|
if ( isDefined( level.hostmigrationtimer ) )
|
|
{
|
|
do_movement = 0;
|
|
}
|
|
while ( !do_movement )
|
|
{
|
|
self setaimanimweights( 0, 0 );
|
|
self setanimstatefromasd( "zm_stop_idle" );
|
|
maps/mp/animscripts/zm_shared::donotetracks( "stop_idle" );
|
|
}
|
|
if ( self.disablearrivals )
|
|
{
|
|
self.stopanimdistsq = 0;
|
|
}
|
|
else
|
|
{
|
|
self.stopanimdistsq = level.dogstoppingdistsq;
|
|
}
|
|
if ( self.a.movement == "run" )
|
|
{
|
|
debug_anim_print( "dog_move::moveLoop() - Setting move_run" );
|
|
self setanimstatefromasd( "zm_move_run" );
|
|
maps/mp/animscripts/zm_shared::donotetracksfortime( 0,2, "move_run" );
|
|
debug_anim_print( "dog_move::moveLoop() - move_run wait 0.2 done " );
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
/#
|
|
assert( self.a.movement == "walk" );
|
|
#/
|
|
debug_anim_print( "dog_move::moveLoop() - Setting move_walk " );
|
|
self setanimstatefromasd( "zm_move_walk" );
|
|
maps/mp/animscripts/zm_shared::donotetracksfortime( 0,1, "move_walk" );
|
|
if ( self need_to_run() )
|
|
{
|
|
self.a.movement = "run";
|
|
self notify( "dog_running" );
|
|
}
|
|
debug_anim_print( "dog_move::moveLoop() - move_walk wait 0.2 done " );
|
|
}
|
|
}
|
|
}
|
|
|
|
startmovetracklookahead()
|
|
{
|
|
self endon( "killanimscript" );
|
|
i = 0;
|
|
while ( i < 2 )
|
|
{
|
|
lookaheadangle = vectorToAngle( self.lookaheaddir );
|
|
self set_orient_mode( "face angle", lookaheadangle );
|
|
i++;
|
|
}
|
|
}
|
|
|
|
startmove()
|
|
{
|
|
debug_anim_print( "dog_move::startMove() - Setting move_start " );
|
|
self setanimstatefromasd( "zm_move_start" );
|
|
maps/mp/animscripts/zm_shared::donotetracks( "move_start" );
|
|
debug_anim_print( "dog_move::startMove() - move_start notify done." );
|
|
self animmode( "none" );
|
|
self set_orient_mode( "face motion" );
|
|
}
|
|
|
|
stopmove()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self endon( "run" );
|
|
debug_anim_print( "dog_move::stopMove() - Setting move_stop" );
|
|
self setanimstatefromasd( "zm_move_stop" );
|
|
maps/mp/animscripts/zm_shared::donotetracks( "move_stop" );
|
|
debug_anim_print( "dog_move::stopMove() - move_stop notify done." );
|
|
}
|
|
|
|
getenemydistancesqr()
|
|
{
|
|
if ( isDefined( self.enemy ) )
|
|
{
|
|
return distancesquared( self.origin, self.enemy.origin );
|
|
}
|
|
return 100000000;
|
|
}
|
|
|
|
getsoundkey( distancesqr )
|
|
{
|
|
keys = getarraykeys( level.dog_sounds );
|
|
i = 0;
|
|
while ( i < keys.size )
|
|
{
|
|
sound_set = level.dog_sounds[ keys[ i ] ];
|
|
if ( sound_set.minrangesqr > distancesqr )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
else if ( sound_set.maxrangesqr && sound_set.maxrangesqr < distancesqr )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
return keys[ i ];
|
|
}
|
|
i++;
|
|
}
|
|
return keys[ keys.size - 1 ];
|
|
}
|
|
|
|
need_to_run()
|
|
{
|
|
run_dist_squared = 147456;
|
|
if ( getDvar( "scr_dog_run_distance" ) != "" )
|
|
{
|
|
dist = getDvarInt( "scr_dog_run_distance" );
|
|
run_dist_squared = dist * dist;
|
|
}
|
|
run_yaw = 20;
|
|
run_pitch = 30;
|
|
run_height = 64;
|
|
if ( self.a.movement != "walk" )
|
|
{
|
|
return 0;
|
|
}
|
|
if ( self.health < self.maxhealth )
|
|
{
|
|
return 1;
|
|
}
|
|
if ( !isDefined( self.enemy ) || !isalive( self.enemy ) )
|
|
{
|
|
return 0;
|
|
}
|
|
if ( !self cansee( self.enemy ) )
|
|
{
|
|
return 0;
|
|
}
|
|
dist = distancesquared( self.origin, self.enemy.origin );
|
|
if ( dist > run_dist_squared )
|
|
{
|
|
return 0;
|
|
}
|
|
height = self.origin[ 2 ] - self.enemy.origin[ 2 ];
|
|
if ( abs( height ) > run_height )
|
|
{
|
|
return 0;
|
|
}
|
|
yaw = self maps/mp/animscripts/zm_utility::absyawtoenemy();
|
|
if ( yaw > run_yaw )
|
|
{
|
|
return 0;
|
|
}
|
|
pitch = angleClamp180( vectorToAngle( self.origin - self.enemy.origin )[ 0 ] );
|
|
if ( abs( pitch ) > run_pitch )
|
|
{
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|