1380 lines
41 KiB
Plaintext
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;
|
|
}
|