iw6-scripts/maps/_dog_drive.gsc
2024-02-13 13:20:49 +01:00

1380 lines
41 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
dog_drive_indirect( var_0 )
{
default_dof( 0.1 );
maps\_utility::player_speed_percent( 0, 0.01 );
var_0 enabledogavoidance( 0 );
var_0 setviewmodeldepth( 1 );
level.old_ai_eventdistdeath = getdvarint( "ai_eventDistDeath" );
setsaveddvar( "ammoCounterHide", 1 );
setsaveddvar( "mantle_enable", 0 );
setsaveddvar( "ragdoll_max_life", 1500 );
setsaveddvar( "ai_eventDistDeath", 200 );
if ( level.xenon )
setsaveddvar( "r_texFilterProbeBilinear", 1 );
var_0.oldname = var_0.name;
var_0.name = "";
level.see_enemy_dot = 0.85;
level.see_enemy_dot_close = 0.95;
self.dog_track_range = 300;
self.dog_attack_range = 85;
var_0 maps\_utility::disable_ai_color();
level.dog_flush_functions["jumpup"] = ::dog_jumpup;
if ( var_0 maps\_utility::ent_flag_exist( "pause_dog_command" ) )
var_0 maps\_utility::ent_flag_set( "pause_dog_command" );
if ( !var_0 maps\_utility::ent_flag_exist( "dogcam_acquire_targets" ) )
var_0 maps\_utility::ent_flag_init( "dogcam_acquire_targets" );
var_0 maps\_utility::ent_flag_set( "dogcam_acquire_targets" );
var_0.controlling_dog = 1;
var_0 maps\_utility_dogs::dog_lower_camera( 0.1 );
self.controlled_dog = var_0;
setsaveddvar( "cg_fov", 90 );
self enableslowaim( 0.3, 0.3 );
self disableweapons();
self allowcrouch( 0 );
self allowstand( 1 );
self allowprone( 1 );
self allowsprint( 0 );
self.ignoreme = 1;
self enableinvulnerability();
var_1 = 0;
if ( getdvarint( "pete_mccabe", 0 ) == 1 )
var_1 = 1;
self.overlays = [];
if ( !var_1 )
{
self.overlays[self.overlays.size] = maps\_hud_util::create_client_overlay( "dogcam_edge", 1, self );
self.overlays[self.overlays.size - 1].foreground = 0;
self.overlays[self.overlays.size] = maps\_hud_util::create_client_overlay( "dogcam_dirt", 1, self );
self.overlays[self.overlays.size - 1].foreground = 0;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_targeting_circle", 150, 150 );
var_2 maps\_hud_util::setpoint( "CENTER", undefined, 1, -5, 0 );
var_2.color = ( 1, 0, 0 );
var_2.alpha = 0;
self.hud_target_lock = var_2;
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_center", 600, 300 );
var_2 maps\_hud_util::setpoint( "CENTER", undefined, 0, 0, 0 );
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_compass", 250, 35 );
var_2 maps\_hud_util::setpoint( "TOP", "TOP", 0, 10, 0 );
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_battery", 100, 12 );
var_2 maps\_hud_util::setpoint( "RIGHT TOP", "RIGHT TOP", 0, 25, 0 );
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_frame_top", 600, 40 );
var_2 maps\_hud_util::setpoint( "TOP", "TOP", 0, -20, 0 );
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_frame_bot", 600, 80 );
var_2 maps\_hud_util::setpoint( "BOTTOM", "BOTTOM", 0, 32, 0 );
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_timestamp", 200, 50 );
var_2 maps\_hud_util::setpoint( "LEFT BOTTOM", "LEFT BOTTOM", 14, -25, 0 );
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_rec", 50, 50 );
var_2 maps\_hud_util::setpoint( "LEFT BOTTOM", "LEFT BOTTOM", 0, -11.5, 0 );
var_2 thread rec_blink();
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_vision_off", 180, 50 );
var_2 maps\_hud_util::setpoint( "RIGHT BOTTOM", "RIGHT BOTTOM", 0, -25, 0 );
self.attack_indicator_off = var_2;
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_vision_on", 180, 50 );
var_2 maps\_hud_util::setpoint( "RIGHT BOTTOM", "RIGHT BOTTOM", 0, -25, 0 );
self.overlays[self.overlays.size] = var_2;
self.attack_indicator_on = var_2;
var_2.alpha = 0;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_bracket_r", 60, 400 );
var_2 maps\_hud_util::setpoint( "RIGHT", "RIGHT", 0, 0, 0 );
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_bracket_l", 69, 400 );
var_2 maps\_hud_util::setpoint( "LEFT", "LEFT", 0, 0, 0 );
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclienticon( "dogcam_scanline", 1600, 75 );
var_2 maps\_hud_util::setpoint( "CENTER", undefined, 0, 0, 0 );
var_2 thread scanline_move();
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclientfontstring( "default", 0.8 );
var_2 maps\_hud_util::setpoint( "RIGHT BOTTOM", "LEFT BOTTOM", 188.5, -51, 0 );
var_2 settext( "00 : 00 00" );
var_2.alpha = 0.4;
var_2 thread time_countup();
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclientfontstring( "default", 0.7 );
var_2 maps\_hud_util::setpoint( "CENTER", "CENTER", 0, 55, 0 );
var_2 settext( "" );
var_2.alpha = 0.5;
self.hud_enemy_tracker = var_2;
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclientfontstring( "default", 0.7 );
var_2 maps\_hud_util::setpoint( "CENTER", "CENTER", -15, 55, 0 );
var_2 settext( &"NML_DOGCAM_TARGET" );
var_2.alpha = 0.5;
self.hud_enemy_tracker_pre = var_2;
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclientfontstring( "default", 0.7 );
var_2 maps\_hud_util::setpoint( "CENTER", "CENTER", 10, 55, 0 );
var_2 settext( &"NML_DOGCAM_METERS" );
var_2.alpha = 0.5;
self.hud_enemy_tracker_post = var_2;
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclientfontstring( "default", 0.8 );
var_2 maps\_hud_util::setpoint( "CENTER", "RIGHT BOTTOM", -75, -66, 0 );
var_2 settext( "" );
var_2.alpha = 0.5;
self.hud_enemy_tracker_range = var_2;
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclientfontstring( "default", 0.8 );
var_2 maps\_hud_util::setpoint( "CENTER", "TOP", -70, 35, 0 );
var_2 settext( "12345" );
var_2.alpha = 0.5;
self.lat_tracker = var_2;
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclientfontstring( "default", 0.8 );
var_2 maps\_hud_util::setpoint( "CENTER", "TOP", 70, 35, 0 );
var_2 settext( "12345" );
var_2.alpha = 0.5;
self.long_tracker = var_2;
self.overlays[self.overlays.size] = var_2;
var_2 = level.player maps\_hud_util::createclientfontstring( "default", 0.8 );
var_2 maps\_hud_util::setpoint( "CENTER", "TOP", 0, 55, 0 );
var_2 settext( &"NML_DOGCAM_NORTH" );
var_2.alpha = 0.5;
self.compass_tracker = var_2;
self.overlays[self.overlays.size] = var_2;
thread nearby_enemy_tracking( var_0 );
thread lattitude_and_longitude( var_0 );
thread compass_update( var_0 );
}
var_0 thermaldrawdisable();
var_0.turnrate = 0.15;
setsaveddvar( "r_znear", 4 );
setsaveddvar( "hud_showstance", 0 );
var_0 maps\_utility::walkdist_zero();
var_0.dontchangepushplayer = 1;
var_0 pushplayer( 1 );
var_3 = spawn( "script_model", ( 0, 0, 0 ) );
var_3 setmodel( "tag_player" );
var_3 linkto( var_0, "tag_camera", ( 0, 0, 0 ), ( 0, 0, 0 ) );
var_0.camera_tag = var_3;
if ( !var_1 )
spawn_model_fx( ( 0, 0, 0 ), ( 0, 0, 0 ), ( 0, 0, 0 ) );
self playerlinkweaponviewtodelta( var_0, "tag_player", 0, 180, 180, 35, 35, 1 );
self playerlinkedsetviewznear( 0 );
self shellshock( "dog_cam", 999999 );
var_0 setdogcommand( "driven" );
var_0 setdogmaxdrivespeed( 80 );
var_0 setdogautoattackwhendriven( 0 );
var_3 playloopsound( "ambient_dog_camera" );
var_4 = var_0 common_scripts\utility::spawn_tag_origin();
var_4 linkto( var_0, "tag_camera", ( 0, 0, 0 ), ( 0, 0, 0 ) );
var_0.cam_sound_sources = [];
var_0.cam_sound_sources = common_scripts\utility::array_add( var_0.cam_sound_sources, var_4 );
thread dog_wait_for_attack( var_0 );
thread sound_on_stick_movement( var_0, var_4 );
thread lerp_on_attack( var_0 );
thread detect_sprint_click( var_0 );
thread dog_bark_think( var_0 );
thread camera_zoom( var_0 );
thread screen_blood( var_0 );
}
screen_blood( var_0 )
{
self endon( "stop_dog_drive" );
var_0 endon( "death" );
if ( getdvarint( "dog_no_blood", 0 ) )
return;
for (;;)
{
var_0 waittill( "screen_blood", var_1 );
if ( isdefined( self.screen_glitch_org ) )
playfxontag( common_scripts\utility::getfx( "vfx_dog_screenblood" ), self.screen_glitch_org, "tag_origin" );
}
}
default_dof( var_0 )
{
if ( maps\_utility::is_gen4() )
{
maps\_art::dof_enable_script( 1, 80, 6, 1500, 4500, 3, var_0 );
self setviewmodeldepthoffield( 0, 40 );
self enableforceviewmodeldof();
}
else
maps\_art::dof_disable_script( var_0 );
}
camera_zoom( var_0 )
{
self endon( "disable_zoom" );
self endon( "stop_dog_drive" );
var_0 endon( "death" );
self notifyonplayercommand( "zoom_camera", "+melee" );
self notifyonplayercommand( "zoom_camera", "+melee_breath" );
self notifyonplayercommand( "zoom_camera", "+melee_zoom" );
childthread zoom_out_on_left_stick_movement();
var_0.zoomed = 0;
for (;;)
{
self waittill( "zoom_camera" );
var_0.zoomed = 1;
zoom_fov();
common_scripts\utility::waittill_either( "zoom_camera", "dog_moved" );
var_0.zoomed = 0;
default_fov();
}
}
zoom_out_on_left_stick_movement()
{
for (;;)
{
var_0 = self getnormalizedmovement();
if ( var_0[0] > 0.4 || var_0[1] > 0.4 )
self notify( "dog_moved" );
wait 0.05;
}
}
default_fov()
{
delete_model_fx();
spawn_model_fx( ( 0, 0, 0 ), ( 0, 0, 0 ), ( 0, 0, 0 ) );
self setblurforplayer( 3, 0.05 );
earthquake( 0.4, 0.3, self.origin, 1000 );
self lerpfov( 90, 0.2 );
common_scripts\utility::delaycall( 0.1, ::setblurforplayer, 0, 0.5 );
wait 0.1;
}
zoom_fov()
{
delete_model_fx();
spawn_model_fx( ( 15, 0, 0 ), ( 125, 0, 0 ), ( 400, 0, 0 ) );
self setblurforplayer( 3, 0.05 );
earthquake( 0.4, 0.3, self.origin, 1000 );
common_scripts\utility::delaycall( 0.1, ::setblurforplayer, 0, 0.5 );
self lerpfov( 12, 0.2 );
wait 0.1;
}
nearby_enemy_tracking( var_0 )
{
self.hud_enemy_tracker endon( "death" );
self endon( "stop_dog_drive" );
var_0 endon( "death" );
var_1 = 0;
var_2 = 0;
var_3 = &"NML_DOGCAM_TARGET";
var_4 = &"NML_DOGCAM_METERS";
for (;;)
{
var_5 = self getplayerangles();
var_6 = undefined;
if ( isdefined( var_0.closest_enemy_in_range ) )
var_6 = var_0.closest_enemy_in_range;
var_7 = find_nearby_enemy( self.dog_track_range, var_5 );
var_0.closest_enemy_in_range = var_7;
if ( isdefined( var_6 ) )
{
if ( !isdefined( var_7 ) || var_7 != var_6 )
var_6 thread hud_outlineenable( 0 );
}
self.attack_indicator_off.alpha = 1;
self.attack_indicator_on.alpha = 0;
if ( isdefined( var_7 ) )
{
var_8 = distance2d( var_0.origin, var_7.origin );
var_9 = var_8 * 0.0254;
var_7.dist_to_dog = var_8;
var_10 = strtok( var_9 + "", "." );
var_11 = "0";
if ( var_10.size > 1 )
var_11 = var_10[1][0];
self.hud_enemy_tracker_pre settext( var_3 );
self.hud_enemy_tracker_post settext( var_4 );
self.hud_enemy_tracker settext( var_10[0] + "." + var_11 );
if ( var_8 <= self.dog_attack_range && maps\_dog_control::test_trace( maps\_dog_control::get_eye(), var_7 geteye(), self.controlled_dog ) )
{
if ( var_0 maps\_utility::ent_flag( "dogcam_acquire_targets" ) )
{
self.hud_enemy_tracker_range settext( &"NML_DOGCAM_TARGETINRANGE" );
self.hud_target_lock.alpha = 1;
self.hud_target_lock.color = ( 1, 0, 0 );
if ( !var_1 )
{
self notify( "dogcam_acquired_target" );
thread maps\_utility::play_sound_on_entity( "scn_nml_camera_enemy_in_range" );
var_7 thread hud_outlineenable( 4 );
}
var_2 = 0;
var_1 = 1;
self.attack_indicator_off.alpha = 0;
self.attack_indicator_on.alpha = 1;
}
}
else if ( var_0 maps\_utility::ent_flag( "dogcam_acquire_targets" ) )
{
self.hud_target_lock.alpha = 1;
self.hud_target_lock.color = ( 0.2, 0, 0 );
self.hud_enemy_tracker_range settext( &"NML_DOGCAM_OUTOFRANGE" );
var_1 = 0;
if ( !var_2 )
thread maps\_utility::play_sound_on_entity( "scn_nml_camera_enemy_contact_on" );
var_2 = 1;
var_7 thread hud_outlineenable( 0 );
}
}
else
{
self.hud_target_lock.alpha = 0;
self.hud_enemy_tracker_pre settext( "" );
self.hud_enemy_tracker_post settext( "" );
self.hud_enemy_tracker settext( "" );
self.hud_enemy_tracker settext( "" );
self.hud_enemy_tracker_range settext( "" );
if ( var_2 )
thread maps\_utility::play_sound_on_entity( "scn_nml_camera_enemy_contact_off" );
var_1 = 0;
var_2 = 0;
}
if ( !var_2 )
{
}
wait 0.05;
}
}
lattitude_and_longitude( var_0 )
{
self.lat_tracker endon( "death" );
self.long_tracker endon( "death" );
self endon( "stop_dog_drive" );
var_0 endon( "death" );
if ( !isdefined( level.lat ) )
level.lat = [ 32.8695, -117.102 ];
for (;;)
{
var_1 = inches_to_lattitude( var_0.origin[0] ) * 10;
var_2 = inches_to_lattitude( var_0.origin[1] ) * 10;
self.lat_tracker settext( trim_decimal_points( var_1 + level.lat[0], 4 ) );
self.long_tracker settext( trim_decimal_points( var_2 + level.lat[1], 4 ) );
wait 0.05;
}
}
compass_update( var_0 )
{
self.compass_tracker endon( "death" );
self endon( "stop_dog_drive" );
var_0 endon( "death" );
for (;;)
{
var_1 = self getplayerangles();
self.compass_tracker settext( getdirectioncompass( var_1[1] ) );
wait 0.05;
}
}
spawn_model_fx( var_0, var_1, var_2 )
{
if ( getdvarint( "pete_mccabe", 0 ) == 0 )
{
self.crt_plane = spawn( "script_model", ( 0, 0, 0 ) );
self.crt_plane setmodel( "torpedo_crtplane" );
self.crt_plane linktoplayerview( self, "tag_origin", ( 2, 0, 0 ) + var_0, ( 0, -90, 0 ), 1 );
self.screen_glitch_org = spawn( "script_model", ( 0, 0, 0 ) );
self.screen_glitch_org setmodel( "tag_origin" );
self.screen_glitch_org.origin = level.player.origin;
self.screen_glitch_org linktoplayerview( level.player, "tag_origin", ( 25, 0, 0 ) + var_1, ( 0, 180, 0 ), 1 );
thread screen_glitches();
}
}
delete_model_fx()
{
if ( getdvarint( "pete_mccabe", 0 ) == 0 )
{
self.crt_plane delete();
self.screen_glitch_org delete();
}
}
scanline_move()
{
self endon( "death" );
childthread scanline_flicker();
self moveovertime( 8 );
self.y = 400;
wait 8;
for (;;)
{
wait 0.05;
self.y = -400;
wait 0.05;
self moveovertime( 16 );
self.y = 400;
wait 16;
}
}
rec_blink()
{
self endon( "death" );
for (;;)
{
self.alpha = 0;
wait 0.75;
self.alpha = 1;
wait 0.75;
}
}
time_countup()
{
self endon( "death" );
var_0 = gettime();
for (;;)
{
var_1 = "";
var_2 = "";
var_3 = "";
var_4 = gettime();
var_5 = int( var_4 / 60000 );
var_4 = var_4 - var_5 * 60000;
if ( var_5 < 10 )
var_1 = "0";
var_6 = int( var_4 / 1000 );
var_4 = var_4 - var_6 * 1000;
if ( var_6 < 10 )
var_2 = "0";
var_7 = int( var_4 / 10 );
if ( var_7 < 10 )
var_3 = "0";
self settext( var_1 + var_5 + " : " + var_2 + var_6 + " " + var_3 + var_7 );
wait 0.05;
}
}
scanline_flicker()
{
for (;;)
{
self fadeovertime( 2 );
self.alpha = 0.3;
wait 2;
self fadeovertime( 2 );
self.alpha = 1;
wait 2;
}
}
screen_glitches()
{
self.screen_glitch_org endon( "death" );
self endon( "disable_screen_glitch" );
for (;;)
{
if ( isdefined( level._effect["screen_glitch"] ) && isdefined( self.screen_glitch_org ) )
playfxontag( common_scripts\utility::getfx( "screen_glitch" ), self.screen_glitch_org, "tag_origin" );
level.player thread maps\_utility::play_sound_on_entity( "scn_nml_camera_flicker_short" );
common_scripts\utility::waittill_notify_or_timeout( "do_screen_glitch", randomfloatrange( 5, 8 ) );
}
}
constant_screen_glitches()
{
if ( isdefined( self.screen_glitch_org ) )
self.screen_glitch_org endon( "death" );
self endon( "stop_constant_glitch" );
for (;;)
{
if ( isdefined( level._effect["screen_glitch"] ) && isdefined( self.screen_glitch_org ) )
playfxontag( common_scripts\utility::getfx( "screen_glitch" ), self.screen_glitch_org, "tag_origin" );
common_scripts\utility::waittill_notify_or_timeout( "do_screen_glitch", 0.05 );
}
}
dog_drive_indirect_disable( var_0 )
{
setsaveddvar( "ai_eventDistDeath", level.old_ai_eventdistdeath );
if ( level.xenon )
setsaveddvar( "r_texFilterProbeBilinear", 0 );
var_0 enabledogavoidance( 1 );
var_0 setviewmodeldepth( 0 );
maps\_art::dof_disable_script( 0.75 );
self setviewmodeldepthoffield( 0, 0 );
self disableforceviewmodeldof();
maps\_audio::clear_filter();
maps\_utility::player_speed_percent( 100, 0.01 );
setsaveddvar( "ammoCounterHide", 0 );
setsaveddvar( "mantle_enable", 1 );
setsaveddvar( "ragdoll_max_life", 4500 );
var_1 = getaiarray( "axis" );
foreach ( var_3 in var_1 )
var_3 hudoutlinedisable();
var_0 setdogcommand( "attack" );
var_0.controlling_dog = undefined;
var_0.name = var_0.oldname;
if ( var_0 maps\_utility::ent_flag_exist( "pause_dog_command" ) )
var_0 maps\_utility::ent_flag_clear( "pause_dog_command" );
self notify( "stop_dog_drive" );
self stopshellshock();
self unlink();
self enableweapons();
self disableinvulnerability();
self.ignoreme = 0;
setsaveddvar( "cg_fov", 65 );
self disableslowaim();
self allowcrouch( 1 );
self allowstand( 1 );
self allowprone( 1 );
self allowsprint( 1 );
foreach ( var_6 in self.overlays )
var_6 destroy();
if ( isdefined( self.crt_plane ) )
self.crt_plane delete();
if ( isdefined( self.screen_glitch_org ) )
self.screen_glitch_org delete();
setsaveddvar( "r_znear", 4 );
setsaveddvar( "compass", 1 );
setsaveddvar( "hud_showstance", 1 );
var_0 maps\_utility::walkdist_reset();
var_0.turnrate = 0.2;
var_0.ignoreall = 0;
var_0.ignoreme = 0;
var_0.camera_tag stoploopsound();
self cameraunlink( var_0.camera_tag );
foreach ( var_9 in var_0.cam_sound_sources )
{
var_9 stoploopsound();
common_scripts\utility::waitframe();
var_9 delete();
}
var_0.camera_tag delete();
}
detect_sprint_click( var_0 )
{
self endon( "stop_dog_drive" );
var_0 endon( "death" );
self notifyonplayercommand( "clicked_sprint", "+sprint" );
self notifyonplayercommand( "clicked_sprint", "+sprint_zoom" );
self notifyonplayercommand( "clicked_sprint", "+breath_sprint" );
var_0.sprint = 0;
for (;;)
{
self waittill( "clicked_sprint" );
if ( var_0 isdogbeingdriven() )
{
var_1 = self getnormalizedmovement();
if ( sprint_check( var_1 ) && !var_0 dog_is_in_combat() )
{
self lerpviewangleclamp( 0.3, 0, 0.2, 90.0, 90.0, 0, 0 );
var_0 thread maps\_utility::play_sound_on_entity( "anml_dog_run_start" );
var_0.sprint = 1;
var_0.moveanimtype = "run";
var_0 setdogmaxdrivespeed( 400 );
var_0 setdogautoattackwhendriven( 1 );
wait 0.1;
thread dog_sprint_disable( var_0 );
wait 0.5;
}
}
}
}
sprint_check( var_0 )
{
var_1 = getsticksconfig();
if ( self usinggamepad() && var_1 == "thumbstick_legacy" )
return var_0[0] >= 0.3;
else
return var_0[0] >= 0.98;
}
dog_sprint_disable( var_0 )
{
self endon( "stop_dog_drive" );
var_0 endon( "death" );
for (;;)
{
var_1 = self getnormalizedmovement();
if ( !sprint_check( var_1 ) || var_0 dog_is_in_combat() )
{
var_0.sprint = 0;
var_0 setdogmaxdrivespeed( 80 );
if ( getdvarint( "jimmy", 0 ) == 0 )
var_0 setdogautoattackwhendriven( 0 );
var_0.moveanimtype = "walk";
if ( !var_0 dog_is_in_combat() )
default_dog_limits();
return;
}
wait 0.05;
}
}
dog_is_in_combat()
{
return self.script == "dog_combat";
}
default_dog_limits()
{
self lerpviewangleclamp( 0.3, 0.1, 0.1, 180, 180, 35, 35 );
}
sound_on_stick_movement( var_0, var_1 )
{
self endon( "stop_dog_drive" );
var_0 endon( "death" );
var_2 = 0;
var_3 = 1;
for (;;)
{
var_4 = 0;
var_5 = self getnormalizedcameramovement();
var_6 = anglestoforward( self getplayerangles() );
var_7 = anglestoforward( var_0 gettagangles( "TAG_CAMERA" ) );
var_8 = vectordot( var_6, var_7 );
if ( distance2d( var_5, ( 0, 0, 0 ) ) > 0.1 && abs( var_3 - var_8 ) > 0.0 )
var_4 = 1;
var_3 = var_8;
if ( var_4 != var_2 )
{
if ( var_4 )
var_1 playloopsound( "dog_cam_mvmnt" );
else
var_1 stoploopsound( "dog_cam_mvmnt" );
var_2 = var_4;
wait 0.1;
}
wait 0.05;
}
}
dog_wait_for_attack( var_0 )
{
self endon( "stop_dog_drive" );
var_0 endon( "death" );
self notifyonplayercommand( "attack_command", "+attack" );
self notifyonplayercommand( "attack_command", "+frag" );
self notifyonplayercommand( "attack_command", "+smoke" );
self notifyonplayercommand( "attack_command", "+toggleads_throw" );
self notifyonplayercommand( "attack_command", "+speed_throw" );
self notifyonplayercommand( "attack_command", "+speed" );
self notifyonplayercommand( "attack_command", "+ads_akimbo_accessible" );
if ( getdvarint( "jimmy", 0 ) )
{
var_0 setdogautoattackwhendriven( 1 );
return;
}
for (;;)
{
self waittill( "attack_command" );
if ( isdefined( var_0.closest_enemy_in_range ) )
{
if ( isdefined( var_0.closest_enemy_in_range.dist_to_dog ) && var_0.closest_enemy_in_range.dist_to_dog <= self.dog_attack_range )
thread dog_attack_command_internal( var_0 );
}
wait 0.5;
var_0 setdogautoattackwhendriven( 0 );
}
}
dog_attack_command_internal( var_0 )
{
self notify( "dog_attack_internal" );
self endon( "dog_attack_internal" );
var_1 = var_0.closest_enemy_in_range;
var_0 setdogautoattackwhendriven( 1 );
wait_for_damage_or_attack( var_1 );
var_0 setdogautoattackwhendriven( 0 );
}
wait_for_damage_or_attack( var_0 )
{
self endon( "damage" );
var_0 common_scripts\utility::waittill_either( "dog_attacks_ai", "death" );
}
dog_command_attack( var_0, var_1 )
{
var_0.ignoreme = 0;
var_0 setthreatbiasgroup( "dog_targets" );
var_0 thread restore_ignoreme( self );
self.favoriteenemy = var_0;
self.ignoreall = 0;
self getenemyinfo( var_0 );
self setgoalentity( var_0 );
var_2 = var_0 common_scripts\utility::waittill_any_return( "dog_attacks_ai", "death" );
}
lerp_on_attack( var_0 )
{
self endon( "stop_dog_drive" );
self endon( "death" );
var_0 endon( "death" );
for (;;)
{
level waittill( "dog_attacks_ai", var_1, var_2 );
if ( var_1 == var_0 )
{
if ( maps\_utility::is_gen4() )
maps\_art::dof_enable_script( 1, 1, 10, 50, 180, 3, 0.2 );
thread constant_screen_glitches();
self lerpviewangleclamp( 0.3, 0, 0.2, 0, 0, 0, 0 );
wait 0.8;
self notify( "stop_constant_glitch" );
var_2 common_scripts\utility::waittill_notify_or_timeout( "death", 6 );
default_dof( 1.25 );
var_1 setgoalpos( var_1.origin );
default_dog_limits();
}
}
}
restore_ignoreme( var_0 )
{
self endon( "death" );
self endon( "dog_attacks_ai" );
var_0 waittill( "cancel_attack" );
self setthreatbiasgroup( "axis" );
}
dog_indirect_control_input( var_0 )
{
self endon( "stop_dog_drive" );
var_0 endon( "death" );
if ( !var_0 maps\_utility::ent_flag_exist( "dog_busy" ) )
var_0 maps\_utility::ent_flag_init( "dog_busy" );
if ( !var_0 maps\_utility::ent_flag_exist( "running_command" ) )
var_0 maps\_utility::ent_flag_init( "running_command" );
var_0 maps\_utility::ent_flag_clear( "dog_busy" );
var_0 maps\_utility::ent_flag_clear( "running_command" );
var_0.last_command = [];
var_0.last_command["position"] = undefined;
var_0.last_command["volume"] = undefined;
for (;;)
{
var_0 maps\_utility::ent_flag_waitopen( "dog_busy" );
var_1 = self getnormalizedmovement();
var_2 = vectortoangles( var_1 );
if ( var_2[1] >= 180 || var_2[1] <= 180 )
{
var_3 = distance2d( ( 0, 0, 0 ), var_1 );
var_4 = max( abs( var_1[0] ), abs( var_1[1] ) );
if ( var_1[0] < 0.8 )
var_0.sprint = 0;
if ( abs( var_3 > 0.1 ) )
{
var_5 = var_4 / var_3;
var_1 = var_1 * var_5;
var_6 = distance( ( 0, 0, 0 ), var_1 );
if ( self attackbuttonpressed() || var_0.sprint )
var_7 = 1.5;
else
var_7 = 1;
thread do_goto_trace( var_0, var_6 * var_6 * var_7 + 0.05, var_1 );
}
else if ( var_0.script == "dog_move" )
{
}
}
else if ( var_0.script == "dog_move" )
{
}
wait 0.05;
}
}
dog_attack_internal( var_0, var_1 )
{
var_0 endon( "cancel_attack" );
self notify( "new_goto" );
var_0.moveplaybackrate = 1;
var_0 dog_command_attack( var_1, self );
}
check_for_enemies( var_0, var_1, var_2 )
{
var_3 = vectortoangles( var_2 );
var_4 = self getplayerangles();
var_5 = ( var_0.angles[0], var_4[1] - var_3[1], 0 );
if ( isdefined( var_0.enemy ) )
{
if ( isdefined( var_0.enemy.syncedmeleetarget ) )
return 1;
}
var_6 = find_nearby_enemy( 100 * var_1 + 50, var_5 );
if ( isdefined( var_6 ) )
{
if ( !isdefined( var_0.favoriteenemy ) || var_0.favoriteenemy != var_6 )
{
var_0 notify( "cancel_attack" );
thread dog_attack_internal( var_0, var_6 );
}
return 1;
}
if ( isdefined( var_0.favoriteenemy ) )
{
var_7 = anglestoforward( var_5 );
var_8 = vectornormalize( var_0.favoriteenemy.origin - var_0.origin );
var_9 = vectordot( var_7, var_8 );
if ( var_9 > 0.8 || distance( var_0.origin, var_0.favoriteenemy.origin ) < 64 )
{
var_0.favoriteenemy.ignoreme = 0;
var_0.ignoreall = 0;
return 1;
}
}
return 0;
}
do_goto_trace( var_0, var_1, var_2, var_3 )
{
self notify( "new_goto" );
self endon( "new_goto" );
var_4 = maps\_dog_control::get_eye();
var_5 = vectortoangles( var_2 );
var_6 = self getplayerangles();
var_7 = ( var_0.angles[0], var_6[1] - var_5[1], 0 );
var_8 = var_4 + anglestoforward( var_7 ) * ( 100 * var_1 + 32 );
if ( !isdefined( var_3 ) )
{
if ( check_for_enemies( var_0, var_1, var_2 ) )
return;
}
var_0.moveplaybackrate = var_1 * 1;
var_0 notify( "cancel_attack" );
var_0.ignoreall = 1;
var_0.favoriteenemy = undefined;
default_dog_limits();
var_9 = bullettrace( var_4, var_8, 0, var_0 );
var_9["start"] = var_4;
var_9["end"] = var_8;
var_10 = var_9["position"];
var_11 = maps\_dog_control::get_flush_volume( var_10 );
if ( isdefined( var_11 ) )
{
if ( !isdefined( var_0.last_command["volume"] ) || var_0.last_command["volume"] != var_11 )
{
var_0 maps\_utility::ent_flag_set( "running_command" );
var_0.last_command["position"] = var_10;
var_0.last_command["volume"] = var_11;
var_0.moveplaybackrate = 1;
var_0 dog_command_flush( var_11, var_9 );
var_0 maps\_utility::ent_flag_clear( "running_command" );
}
}
else if ( !isdefined( var_0.last_command["position"] ) || var_0.last_command["position"] != var_10 )
{
var_0 maps\_utility::ent_flag_set( "running_command" );
var_0.last_command["position"] = var_10;
var_0.last_command["volume"] = undefined;
var_0 dog_command_goto( var_9 );
var_0 maps\_utility::ent_flag_clear( "running_command" );
}
}
get_reflected_point( var_0, var_1 )
{
var_2 = var_0["start"];
var_3 = var_0["position"];
var_4 = var_0["normal"];
var_5 = var_2 - var_3;
if ( var_5 == ( 0, 0, 0 ) )
return var_2;
var_6 = vectordot( var_5, var_4 );
var_7 = var_1 / var_6;
var_8 = var_6 * var_4;
var_9 = var_2 - var_8;
var_10 = var_9 - var_3;
var_11 = var_4 * var_1;
var_12 = length( var_10 );
var_13 = var_10 / var_12;
var_14 = var_13 * ( var_7 * var_12 );
var_15 = var_3 - var_14;
var_16 = var_15 + var_11;
var_16 = ( var_16[0], var_16[1], var_3[2] );
return var_16;
}
dog_command_goto( var_0 )
{
self.goalheight = 16;
self.goalradius = 16;
var_1 = var_0["position"];
var_2 = var_0["normal"];
if ( abs( var_2[2] ) < 0.2 && var_0["fraction"] < 1 )
var_1 = get_reflected_point( var_0, 24 );
var_3 = var_1;
var_4 = var_1 - ( 0, 0, 9000 );
var_0 = self aiphysicstrace( var_3, var_4, undefined, undefined, 1, 1 );
var_1 = var_0["position"];
self setgoalpos( var_1 );
wait 0.2;
if ( isdefined( self.pathgoalpos ) )
return;
else if ( distance2d( self.origin, var_1 ) > self.goalradius )
{
var_5 = getnodesinradius( var_1, 96, 0, 96 );
var_5 = sortbydistance( var_5, self.origin );
if ( var_5.size > 0 )
{
var_6 = var_5[0];
self setgoalpos( var_6.origin );
self waittill( "goal" );
}
}
}
dog_command_flush( var_0, var_1 )
{
var_2 = var_1["position"];
var_3 = level.dog_flush_functions[var_0.script_noteworthy];
self thread [[ var_3 ]]( var_0, var_1 );
level waittill( "dog_flush_started" );
var_0.done_flushing = 1;
level waittill( "dog_flush_done" );
}
dog_jumpup( var_0, var_1 )
{
level notify( "dog_flush_started" );
waittillframeend;
var_0.done_flushing = undefined;
thread dog_jumpup_goto( var_1 );
common_scripts\utility::waitframe();
var_0.done_flushing = undefined;
var_2 = var_0 common_scripts\utility::get_target_ent();
thread dog_jumpup_wait( var_2 );
self waittill( "command_goto_done" );
level notify( "dog_flush_done" );
}
dog_jumpup_goto( var_0 )
{
self endon( "stop_goto" );
dog_command_goto( var_0 );
self notify( "command_goto_done" );
}
dog_jumpup_wait( var_0 )
{
self endon( "command_goto_done" );
var_0 waittill( "trigger" );
self notify( "stop_goto" );
var_1 = var_0 common_scripts\utility::get_target_ent();
self setgoalpos( var_1.origin );
self waittill( "goal" );
self notify( "command_goto_done" );
}
#using_animtree("dog");
dog_drive_animscript( var_0 )
{
var_0 useanimtree( #animtree );
var_0 setanimknoball( %german_shepherd_look_forward, %german_shepherd_look, 1, 0.3, 1 );
var_0 setanimlimited( %german_shepherd_look, 1, 0.3, 1 );
var_0 setanimlimited( %german_shepherd_look_left, 1, 0.3, 1 );
var_0 setanimlimited( %german_shepherd_look_right, 1, 0.3, 1 );
var_0 setanimlimited( %german_shepherd_stationaryrun, 1, 0.3, 1 );
var_0 setanimlimited( %german_shepherd_stationaryrun_lean_l, 0, 0.3, 1 );
var_0 setanimlimited( %german_shepherd_stationaryrun_lean_r, 0, 0.3, 1 );
thread track_right_stick( var_0 );
thread track_left_stick( var_0 );
}
track_left_stick( var_0 )
{
for (;;)
{
var_1 = self getnormalizedmovement();
var_2 = var_1[0];
if ( var_2 > 0 )
{
var_3 = var_2;
var_0 setanim( %german_shepherd_runinplace, var_3, 0.2, var_3 );
var_0 setanim( %german_shepherd_look, 0, 0.2, 1 );
}
else
{
var_0 setanim( %german_shepherd_look, 1, 0.2, 1 );
var_0 setanim( %german_shepherd_runinplace, 0, 0.2, 1 );
}
var_4 = self getnormalizedcameramovement();
var_5 = var_4[1];
var_6 = [];
var_6["center"] = 0;
var_6["left"] = 0;
var_6["right"] = 0;
if ( var_5 > 0 )
{
var_6["left"] = 0;
var_6["right"] = var_5;
var_6["center"] = 1 - var_6["right"];
}
else if ( var_5 < 0 )
{
var_6["right"] = 0;
var_6["left"] = -1 * var_5;
var_6["center"] = 1 - var_6["left"];
}
else
{
var_6["left"] = 0;
var_6["right"] = 0;
var_6["center"] = 1;
}
var_0 setanimlimited( %german_shepherd_stationaryrun, var_6["center"], 0.5, 1 );
var_0 setanimlimited( %german_shepherd_stationaryrun_lean_l, var_6["left"], 0.5, 1 );
var_0 setanimlimited( %german_shepherd_stationaryrun_lean_r, var_6["right"], 0.5, 1 );
wait 0.05;
}
}
track_right_stick( var_0 )
{
var_1 = 0.0;
var_2 = 0.0;
for (;;)
{
var_3 = self getnormalizedcameramovement();
var_2 = var_3[1] * 0.85;
if ( var_2 < 0 )
{
var_4 = -1 * var_2;
var_0 setanimlimited( %german_shepherd_look_4, var_4, 0.2, 1 );
var_0 setanimlimited( %german_shepherd_look_6, 0, 0.2, 1 );
}
else
{
var_0 setanimlimited( %german_shepherd_look_6, var_2, 0.2, 1 );
var_0 setanimlimited( %german_shepherd_look_4, 0, 0.2, 1 );
}
wait 0.05;
}
}
find_nearby_enemy( var_0, var_1 )
{
var_2 = undefined;
var_3 = getaiarray( "axis" );
var_4 = [];
var_5 = level.see_enemy_dot;
var_6 = level.see_enemy_dot_close;
var_7 = self;
var_8 = var_7 maps\_dog_control::get_eye();
var_3 = sortbydistance( var_3, var_7.controlled_dog.origin );
foreach ( var_10 in var_3 )
{
if ( !isdefined( var_10.do_not_acquire ) && distance( var_10.origin, var_7.controlled_dog.origin ) < 64 )
return var_10;
else
break;
}
foreach ( var_10 in var_3 )
{
var_13 = ( var_8[0], var_8[1], var_10.origin[2] );
var_14 = vectortoangles( var_10.origin - var_13 );
var_15 = anglestoforward( var_14 );
var_16 = var_1;
var_17 = anglestoforward( var_16 );
var_18 = vectordot( var_15, var_17 );
if ( var_18 > var_6 )
var_4 = common_scripts\utility::array_add( var_4, var_10 );
}
if ( var_4.size > 0 )
{
var_4 = sortbydistance( var_4, var_8 );
foreach ( var_10 in var_4 )
{
if ( !isdefined( var_10.do_not_acquire ) && maps\_dog_control::test_trace( var_10 geteye(), var_8, var_7.controlled_dog ) && ( !isdefined( var_0 ) || distance2d( var_8, var_10.origin ) <= var_0 ) )
return var_10;
}
}
if ( !isdefined( var_2 ) )
{
var_5 = level.see_enemy_dot;
foreach ( var_10 in var_3 )
{
var_14 = vectortoangles( var_10.origin - var_8 );
var_15 = anglestoforward( var_14 );
var_16 = var_1;
var_17 = anglestoforward( var_16 );
var_18 = vectordot( var_15, var_17 );
if ( !isdefined( var_10.do_not_acquire ) && var_18 > var_5 && maps\_dog_control::test_trace( var_10 geteye(), var_8, var_7.controlled_dog ) && ( !isdefined( var_0 ) || distance2d( var_8, var_10.origin ) <= var_0 ) )
{
var_2 = var_10;
var_5 = var_18;
}
}
}
return var_2;
}
hud_outlineenable( var_0 )
{
if ( !isdefined( self.no_more_outlines ) )
self hudoutlineenable( var_0, 0 );
}
dog_bark_think( var_0 )
{
self endon( "stop_dog_drive" );
self endon( "stop_dog_bark" );
var_0 endon( "death" );
self notifyonplayercommand( "LISTEN_ads_button_pressed", "+usereload" );
self notifyonplayercommand( "LISTEN_ads_button_pressed", "+activate" );
for (;;)
{
self waittill( "LISTEN_ads_button_pressed" );
if ( !var_0 dog_is_in_combat() && var_0 isdogbeingdriven() )
{
var_0 thread maps\_utility::play_sound_on_entity( "anml_dog_bark_attention" );
var_0 maps\_anim::anim_generic( var_0, "dog_bark" );
level notify( "dog_barked", var_0 );
if ( !common_scripts\utility::flag( "_stealth_spotted" ) )
var_0 attract_guys_to_dog();
}
wait 1;
}
}
attract_guys_to_dog()
{
var_0 = getaiarray( "axis" );
var_0 = sortbydistance( var_0, self.origin );
foreach ( var_2 in var_0 )
{
if ( isdefined( var_2._stealth ) )
{
var_3 = distance( var_2.origin, self.origin );
if ( var_3 < 1000 )
{
var_2 maps\_stealth_visibility_enemy::enemy_event_awareness_notify( "dog_bark", self );
if ( var_3 < 200 )
var_2 getenemyinfo( level.dog );
if ( var_3 > 300 )
break;
}
else
break;
}
}
}
inches_to_lattitude( var_0 )
{
var_1 = var_0 / 63360.0;
var_2 = var_1 / 69.0;
return var_2;
}
trim_decimal_points( var_0, var_1 )
{
var_0 = var_0 + "";
var_2 = strtok( var_0, "." );
if ( var_2.size > 1 )
{
if ( var_2[1].size > var_1 )
{
var_3 = var_2[1];
var_2[1] = "";
for ( var_4 = 0; var_4 < var_1; var_4++ )
var_2[1] = var_2[1] + var_3[var_4];
var_1 = 0;
}
else
var_1 = var_1 - var_2[1].size;
}
else
var_2[1] = "";
for ( var_4 = 0; var_4 < var_1; var_4++ )
var_2[1] = var_2[1] + "0";
return var_2[0] + "." + var_2[1];
}
getdirectioncompass( var_0 )
{
var_1 = getnorthyaw();
var_0 = var_0 - var_1;
if ( var_0 < 0 )
var_0 = var_0 + 360;
else if ( var_0 > 360 )
var_0 = var_0 - 360;
if ( var_0 < 22.5 || var_0 > 337.5 )
var_2 = &"NML_DOGCAM_NORTH";
else if ( var_0 < 67.5 )
var_2 = &"NML_DOGCAM_NORTHWEST";
else if ( var_0 < 112.5 )
var_2 = &"NML_DOGCAM_WEST";
else if ( var_0 < 157.5 )
var_2 = &"NML_DOGCAM_SOUTHWEST";
else if ( var_0 < 202.5 )
var_2 = &"NML_DOGCAM_SOUTH";
else if ( var_0 < 247.5 )
var_2 = &"NML_DOGCAM_SOUTHEAST";
else if ( var_0 < 292.5 )
var_2 = &"NML_DOGCAM_EAST";
else if ( var_0 < 337.5 )
var_2 = &"NML_DOGCAM_NORTHEAST";
else
var_2 = "";
return var_2;
}