368 lines
11 KiB
Plaintext
368 lines
11 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
tunnel_new()
|
|
{
|
|
level.dog endon( "death" );
|
|
thread fire_flicker();
|
|
thread tunnel_dialogue();
|
|
thread tunnel_spotted();
|
|
maps\nml_util::team_unset_colors( 128 );
|
|
level.dog maps\nml_util::set_move_rate( 0.55 );
|
|
level.baker.goalradius = 192;
|
|
level.baker.ignoreall = 1;
|
|
level.baker maps\_utility::enable_cqbwalk();
|
|
maps\nml_util::hero_paths( "tunnel_enter_path", 300, 300, 200, 0, 1 );
|
|
common_scripts\utility::flag_wait( "start_tunnel_btrs" );
|
|
var_0 = maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "tunnel_btrs" );
|
|
var_0[0] thread maps\_utility::play_sound_on_entity( "scn_nml_btr_end_of_tunnel_start" );
|
|
thread tunnel_vehix_sounds( var_0 );
|
|
maps\nml_util::hero_paths( "tunnel_path_hide", 300, 200, 150, 0, 1 );
|
|
level.baker maps\_utility::disable_cqbwalk();
|
|
level.dog maps\nml_util::set_move_rate( 0.8 );
|
|
wait 1.2;
|
|
level.baker thread maps\_utility::smart_dialogue( "nml_hsh_vehiclesincomingshift" );
|
|
level.baker waittill( "goal" );
|
|
level.baker allowedstances( "crouch" );
|
|
level.baker thread maps\_utility::smart_dialogue( "nml_hsh_easyeasyletthem" );
|
|
common_scripts\utility::flag_wait( "tunnel_btr3_out" );
|
|
level.baker maps\_utility::enable_cqbwalk();
|
|
level.baker allowedstances( "stand", "crouch", "prone" );
|
|
maps\nml_util::hero_paths( "tunnel_exit_path", 300, 300, 200, 0, 0.5 );
|
|
common_scripts\utility::flag_wait( "tunnel_exit" );
|
|
common_scripts\utility::flag_wait( "tunnel_exit_clear" );
|
|
|
|
while ( isdefined( level.dog.teleported ) && level.dog.teleported )
|
|
wait 0.05;
|
|
|
|
maps\nml_util::hero_paths( "tunnel_exit_path", 300, 300, 200, 0, 1 );
|
|
wait 1;
|
|
common_scripts\utility::flag_wait( "tunnel_player_at_exit" );
|
|
level.dog maps\_utility_dogs::disable_dog_sneak();
|
|
level.dog maps\nml_util::set_move_rate( 0.6 );
|
|
maps\nml_util::hero_paths( "mall_start_path", 300, 300, 200, 0, 1 );
|
|
}
|
|
|
|
tunnel_dialogue()
|
|
{
|
|
level endon( "start_mall" );
|
|
wait 3;
|
|
level.baker maps\_utility::smart_dialogue( "nml_hsh_tracksarefresh" );
|
|
wait 2;
|
|
level.baker thread maps\_utility::smart_dialogue( "nml_hsh_looksliketheywent" );
|
|
maps\_utility::music_play( "mus_nml_tunnel" );
|
|
common_scripts\utility::flag_wait( "start_tunnel_btrs" );
|
|
common_scripts\utility::flag_wait( "tunnel_exit" );
|
|
common_scripts\utility::flag_wait( "tunnel_exit_clear" );
|
|
level.baker thread maps\_utility::smart_dialogue( "nml_hsh_perfect" );
|
|
}
|
|
|
|
tunnel_spotted()
|
|
{
|
|
level endon( "start_mall" );
|
|
thread tunnel_instant_spotted();
|
|
common_scripts\utility::flag_wait( "_stealth_spotted" );
|
|
thread tunnel_spotted_kill();
|
|
}
|
|
|
|
tunnel_instant_spotted()
|
|
{
|
|
level.player endon( "death" );
|
|
level.dog endon( "death" );
|
|
level endon( "start_dog_hunt" );
|
|
maps\nml_code::instant_spotted();
|
|
}
|
|
|
|
tunnel_spotted_kill()
|
|
{
|
|
level.cansave = 0;
|
|
level.baker maps\_utility::delaythread( 1.5, maps\_utility::smart_dialogue, "nml_hsh_werespottedtakeem" );
|
|
level.player enablehealthshield( 0 );
|
|
var_0 = maps\_utility::getvehiclearray();
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_2 vehicle_setspeed( 0, 10, 10 );
|
|
var_2 maps\_utility::delaythread( 1, maps\_vehicle::vehicle_unload, "all" );
|
|
}
|
|
|
|
thread tunnel_kill_dog();
|
|
}
|
|
|
|
tunnel_kill_dog()
|
|
{
|
|
level.dog endon( "death" );
|
|
level.player endon( "death" );
|
|
thread maps\nml_util::mission_fail_on_dog_death( &"NML_HINT_CAIRO_DEATH" );
|
|
wait 9;
|
|
level.dog kill();
|
|
}
|
|
|
|
tunnel_vehicle_think()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "cancel_spotted_reaction" );
|
|
childthread veh_see_player_logic();
|
|
self vehicle_turnengineoff();
|
|
|
|
switch ( self.model )
|
|
{
|
|
case "vehicle_btr80":
|
|
thread maps\nml_util::btr_attack_player_on_flag( "_stealth_spotted" );
|
|
thread dlight_on_me( "TAG_FRONT_LIGHT_RIGHT" );
|
|
break;
|
|
case "vehicle_iveco_lynx_iw6":
|
|
thread dlight_on_me( "TAG_HEADLIGHT_RIGHT" );
|
|
break;
|
|
case "vehicle_m800_apc":
|
|
thread dlight_on_me( "TAG_TURRET" );
|
|
thread maps\nml_util::btr_attack_player_on_flag( "_stealth_spotted" );
|
|
break;
|
|
}
|
|
|
|
thread btr_check_player_fire();
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage", var_0, var_1 );
|
|
|
|
if ( var_1 == level.player )
|
|
{
|
|
maps\nml_stealth::player_set_spotted();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
btr_check_player_fire()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
level.player waittill( "weapon_fired" );
|
|
|
|
if ( distance( level.player.origin, self.origin ) < 300 )
|
|
{
|
|
maps\nml_stealth::player_set_spotted();
|
|
break;
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
tunnel_vehix_sounds( var_0 )
|
|
{
|
|
var_0 = sortbydistance( var_0, level.player.origin );
|
|
var_1 = [ "scn_nml_hummer1_passby", "scn_nml_truck1_passby", "scn_nml_truck2_passby" ];
|
|
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
var_0[var_2] thread maps\_utility::play_sound_on_entity( var_1[var_2] );
|
|
|
|
var_3 = [ "scn_nml_hummer1_tires", "scn_nml_truck1_tires", "scn_nml_truck2_tires" ];
|
|
var_4 = [ "scn_nml_jeep_stop", "scn_nml_btr1_stop", "scn_nml_btr2_stop" ];
|
|
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
{
|
|
var_0[var_2] thread common_scripts\utility::play_loop_sound_on_entity( var_3[var_2] );
|
|
var_0[var_2] thread tunnel_vehix_stop_sounds( var_3[var_2], var_4[var_2] );
|
|
}
|
|
}
|
|
|
|
tunnel_vehix_stop_sounds( var_0, var_1 )
|
|
{
|
|
thread btr_stopping_sounds( var_1 );
|
|
self waittill( "reached_end_node" );
|
|
common_scripts\utility::stop_loop_sound_on_entity( var_0 );
|
|
}
|
|
|
|
btr_stopping_sounds( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
level endon( "_stealth_spotted" );
|
|
|
|
while ( self vehicle_getspeed() < 4 )
|
|
common_scripts\utility::waitframe();
|
|
|
|
while ( self vehicle_getspeed() > 4 )
|
|
common_scripts\utility::waitframe();
|
|
|
|
thread maps\_utility::play_sound_on_entity( var_0 );
|
|
}
|
|
|
|
veh_see_player_logic()
|
|
{
|
|
level endon( "_stealth_spotted" );
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( !level.player maps\_utility::ent_flag( "_stealth_in_shadow" ) )
|
|
{
|
|
if ( distance2d( level.player.origin, self.origin ) < 500 )
|
|
{
|
|
var_0 = 0.5;
|
|
var_1 = self.origin;
|
|
var_2 = level.player.origin;
|
|
var_3 = vectornormalize( var_2 - var_1 );
|
|
var_4 = anglestoforward( self.angles );
|
|
var_5 = vectordot( var_3, var_4 );
|
|
|
|
if ( var_5 >= var_0 )
|
|
break;
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
maps\nml_stealth::player_set_spotted();
|
|
}
|
|
|
|
dlight_on_me( var_0 )
|
|
{
|
|
var_1 = common_scripts\utility::spawn_tag_origin();
|
|
var_1.origin = self gettagorigin( var_0 );
|
|
var_1.angles = self gettagangles( var_0 );
|
|
self.dlight_org = var_1;
|
|
self.dlight_org.tag = var_0;
|
|
var_2 = anglestoforward( var_1.angles );
|
|
var_1.origin = var_1.origin + var_2 * 350;
|
|
var_1 linkto( self );
|
|
playfxontag( common_scripts\utility::getfx( "btr_light_fadein" ), var_1, "tag_origin" );
|
|
wait 3;
|
|
stopfxontag( common_scripts\utility::getfx( "btr_light_fadein" ), var_1, "tag_origin" );
|
|
playfxontag( common_scripts\utility::getfx( "btr_light" ), var_1, "tag_origin" );
|
|
self waittill( "death" );
|
|
var_1 delete();
|
|
}
|
|
|
|
tunnel_guys_exit_think()
|
|
{
|
|
self.dog_attack_alt_func = ::dog_attack_tunnel_sniper;
|
|
thread maps\_utility::flag_on_death( "tunnel_exit_clear" );
|
|
}
|
|
|
|
dog_attack_tunnel_sniper( var_0 )
|
|
{
|
|
self.teleported = 0;
|
|
var_0 setthreatbiasgroup( "dog_targets" );
|
|
maps\_utility_dogs::disable_dog_sneak();
|
|
self hudoutlinedisable();
|
|
var_1 = common_scripts\utility::get_target_ent( "tunnel_exit_dog_teleport" );
|
|
var_2 = var_1 common_scripts\utility::get_target_ent();
|
|
thread dog_return_to_sender( var_0, var_1, var_2 );
|
|
maps\nml_util::set_move_rate( 1.3 );
|
|
thread maps\_utility::play_sound_on_entity( "anml_dog_growl" );
|
|
self.goalradius = 64;
|
|
self setgoalpos( var_1.origin );
|
|
self waittill( "goal" );
|
|
self.teleported = 1;
|
|
self forceteleport( var_2.origin, var_2.angles );
|
|
self.ignoreall = 0;
|
|
self setgoalentity( var_0 );
|
|
var_0 waittill( "dog_attacks_ai" );
|
|
maps\_utility::set_hudoutline( "friendly", 0 );
|
|
var_0 waittill( "death" );
|
|
self waittill( "back_on_ground" );
|
|
}
|
|
|
|
dog_return_to_sender( var_0, var_1, var_2 )
|
|
{
|
|
var_0 waittill( "death" );
|
|
|
|
if ( self.teleported )
|
|
{
|
|
self setgoalpos( var_2.origin );
|
|
self waittill( "goal" );
|
|
}
|
|
|
|
self hudoutlinedisable();
|
|
self forceteleport( var_1.origin, var_1.angles );
|
|
self.teleported = undefined;
|
|
self notify( "back_on_ground" );
|
|
}
|
|
|
|
fire_flicker()
|
|
{
|
|
var_0 = getentarray( "burning_trash_fire", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::flicker, "start_dog_hunt" );
|
|
}
|
|
|
|
flicker( var_0 )
|
|
{
|
|
wait 0.1;
|
|
|
|
if ( !isdefined( self.script_maxdist ) )
|
|
self.script_maxdist = 20;
|
|
|
|
var_1 = self getlightintensity();
|
|
|
|
if ( var_1 <= 0 )
|
|
return;
|
|
|
|
thread flickering_light( self, var_1 * 0.6, var_1 );
|
|
thread moving_light( self, self.script_maxdist );
|
|
}
|
|
|
|
flickering_light( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "level_cleanup" );
|
|
var_0 endon( "stop_flicker" );
|
|
var_0.linked_models = [];
|
|
var_0.has_model = 0;
|
|
|
|
if ( isdefined( var_0.script_linkto ) )
|
|
{
|
|
var_3 = var_0 common_scripts\utility::get_linked_ents();
|
|
var_0.on_models = [];
|
|
var_0.off_models = [];
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( var_5.script_noteworthy == "off" )
|
|
{
|
|
var_0.off_models = common_scripts\utility::array_add( var_0.off_models, var_5 );
|
|
continue;
|
|
}
|
|
|
|
var_0.on_models = common_scripts\utility::array_add( var_0.on_models, var_5 );
|
|
}
|
|
|
|
foreach ( var_8 in var_0.on_models )
|
|
{
|
|
if ( isdefined( var_8.script_linkto ) )
|
|
{
|
|
var_9 = var_8 common_scripts\utility::get_linked_ent();
|
|
var_8.effect = common_scripts\utility::createoneshoteffect( var_9.script_fxid );
|
|
var_8.effect.v["origin"] = var_9.origin;
|
|
var_8.effect.v["angles"] = var_9.angles;
|
|
}
|
|
}
|
|
|
|
var_0.has_model = 1;
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
var_11 = randomfloatrange( var_1, var_2 );
|
|
var_0 setlightintensity( var_11 );
|
|
wait( randomfloatrange( 0.1, 0.2 ) );
|
|
}
|
|
}
|
|
|
|
moving_light( var_0, var_1 )
|
|
{
|
|
level endon( "level_cleanup" );
|
|
var_0 endon( "stop_movement" );
|
|
var_2 = var_0.origin;
|
|
|
|
for (;;)
|
|
{
|
|
var_3 = 0.05 + randomint( 4 ) / 10;
|
|
var_0 moveto( var_2 - ( randomint( var_1 ), randomint( var_1 ), randomint( var_1 ) ), var_3 );
|
|
wait( var_3 );
|
|
}
|
|
}
|