4122 lines
122 KiB
Plaintext
4122 lines
122 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
section_main()
|
|
{
|
|
maps\_utility::add_hint_string( "launcher_qte", &"FLOOD_LAUNCHER_MELEE", ::mlrs_stop_qte_hint );
|
|
}
|
|
|
|
section_precache()
|
|
{
|
|
precachemodel( "vehicle_silenthawk_wings" );
|
|
precacheitem( "rpg_straight" );
|
|
precacherumble( "artillery_rumble" );
|
|
precacherumble( "heavy_1s" );
|
|
precacherumble( "heavy_2s" );
|
|
precachemodel( "viewhands_player_gs_flood" );
|
|
precachemodel( "vehicle_m880_launcher_obj" );
|
|
precachemodel( "com_trafficcone02" );
|
|
precachemodel( "flood_light_generator" );
|
|
precachestring( &"SCRIPT_PLATFORM_BREACH_ACTIVATE" );
|
|
precachestring( &"FLOOD_DISABLE_LAUNCHER" );
|
|
precacheshellshock( "default" );
|
|
precacheshader( "flood_ui_vignette" );
|
|
}
|
|
|
|
section_flag_inits()
|
|
{
|
|
common_scripts\utility::flag_init( "looked_at_missiles" );
|
|
common_scripts\utility::flag_init( "missiles_fired" );
|
|
common_scripts\utility::flag_init( "missiles_ready" );
|
|
common_scripts\utility::flag_init( "looked_at_missiles_failsafe" );
|
|
common_scripts\utility::flag_init( "start_flood" );
|
|
common_scripts\utility::flag_init( "level_faded_to_black" );
|
|
common_scripts\utility::flag_init( "end_of_dam" );
|
|
|
|
if ( !common_scripts\utility::flag_exist( "player_on_ladder" ) )
|
|
common_scripts\utility::flag_init( "player_on_ladder" );
|
|
|
|
common_scripts\utility::flag_init( "streets_to_dam_enemies_dead" );
|
|
common_scripts\utility::flag_init( "streets_to_dam_enemies_ALMOST_dead" );
|
|
common_scripts\utility::flag_init( "streets_to_dam_enemies_last_guy" );
|
|
common_scripts\utility::flag_init( "enemy_advance" );
|
|
common_scripts\utility::flag_init( "allies_shot_at" );
|
|
common_scripts\utility::flag_init( "enemy_alerted" );
|
|
common_scripts\utility::flag_init( "enemy_surprised" );
|
|
common_scripts\utility::flag_init( "everyone_in_garage" );
|
|
common_scripts\utility::flag_init( "baker_move_up" );
|
|
common_scripts\utility::flag_init( "baker_anim_done" );
|
|
common_scripts\utility::flag_init( "player_ready_to_progress" );
|
|
common_scripts\utility::flag_init( "rpg_spawn" );
|
|
common_scripts\utility::flag_init( "see_convoy" );
|
|
common_scripts\utility::flag_init( "player_move_up" );
|
|
common_scripts\utility::flag_init( "missile_launcher_in_place" );
|
|
common_scripts\utility::flag_init( "missile_launcher_destruction_done" );
|
|
common_scripts\utility::flag_init( "convoy_gone" );
|
|
common_scripts\utility::flag_init( "start_cover_fire" );
|
|
common_scripts\utility::flag_init( "rpg_fired_at_launcher" );
|
|
common_scripts\utility::flag_init( "close_to_checkpoint" );
|
|
common_scripts\utility::flag_init( "start_heli_attack" );
|
|
common_scripts\utility::flag_init( "vignette_lens" );
|
|
common_scripts\utility::flag_init( "vignette_lens_fade_out" );
|
|
common_scripts\utility::flag_init( "spawn_m880" );
|
|
common_scripts\utility::flag_init( "m880_has_spawned" );
|
|
common_scripts\utility::flag_init( "enemy_tank_2_firing_at_player" );
|
|
common_scripts\utility::flag_init( "grenade_thrown" );
|
|
common_scripts\utility::flag_init( "played_radio_part_1" );
|
|
common_scripts\utility::flag_init( "played_radio_part_2" );
|
|
common_scripts\utility::flag_init( "player_out_of_garage" );
|
|
common_scripts\utility::flag_init( "player_looking_away" );
|
|
common_scripts\utility::flag_init( "launcher_objective_given" );
|
|
|
|
if ( !common_scripts\utility::flag_exist( "launcher_2_objective_given" ) )
|
|
common_scripts\utility::flag_init( "launcher_2_objective_given" );
|
|
}
|
|
|
|
test_tracer_fire( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = common_scripts\utility::getstruct( var_1, "targetname" );
|
|
|
|
while ( !isdefined( var_3 ) )
|
|
{
|
|
var_3 = common_scripts\utility::getstruct( var_1, "targetname" );
|
|
wait 0.1;
|
|
}
|
|
|
|
var_4 = common_scripts\utility::getstruct( var_2, "targetname" );
|
|
|
|
while ( !isdefined( var_4 ) )
|
|
{
|
|
var_4 = common_scripts\utility::getstruct( var_2, "targetname" );
|
|
wait 0.1;
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
fire_at_target( var_3.origin, var_4.origin, 1, level.player, var_0 );
|
|
wait 0.5;
|
|
}
|
|
}
|
|
|
|
hide_missile_launcher_collision()
|
|
{
|
|
var_0 = getentarray( "missile_launcher_collision", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_2 hide();
|
|
var_2 notsolid();
|
|
}
|
|
}
|
|
|
|
show_missile_launcher_collision()
|
|
{
|
|
common_scripts\utility::flag_wait( "missile_launcher_in_place" );
|
|
wait 1.0;
|
|
var_0 = getentarray( "missile_launcher_collision", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_2 show();
|
|
var_2 solid();
|
|
}
|
|
}
|
|
|
|
enemy_init()
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "heli_start_firing_1", "script_noteworthy" );
|
|
var_0 waittill( "trigger" );
|
|
wait 2.0;
|
|
}
|
|
|
|
infil_heli_anim_skip()
|
|
{
|
|
var_0 = maps\_utility::getanim( "infil" );
|
|
var_1 = getnotetracktimes( var_0, "infil_heli_takeoff" )[0];
|
|
common_scripts\utility::delaycall( 0.05, ::setanimtime, var_0, var_1 );
|
|
}
|
|
|
|
notify_with_trigger_targetname( var_0, var_1 )
|
|
{
|
|
var_2 = getent( var_1, "targetname" );
|
|
var_2 waittill( "trigger" );
|
|
self notify( var_0 );
|
|
}
|
|
|
|
draw_turret_target_line()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = self getturrettarget( 0 );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
thread common_scripts\utility::draw_line_for_time( self.origin, var_0.origin, 1, 0, 0, 0.1 );
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
rumble_when_tank_breaks_wall()
|
|
{
|
|
wait 0.1;
|
|
level.player playrumbleonentity( "artillery_rumble" );
|
|
}
|
|
|
|
fake_tank_rumble()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
level.player playrumbleonentity( "tank_rumble" );
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
destroy_planter( var_0 )
|
|
{
|
|
var_1 = getentarray( var_0, "script_noteworthy" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( isdefined( var_3.targetname ) && var_3.targetname == "planter_trigger" )
|
|
var_3 notify( "trigger" );
|
|
}
|
|
}
|
|
|
|
destroy_corner()
|
|
{
|
|
var_0 = getentarray( "corner_exploder_trigger", "script_noteworthy" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 notify( "trigger" );
|
|
}
|
|
|
|
kill_ally_in_volume( var_0 )
|
|
{
|
|
var_1 = getaiarray( "allies" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( var_3 istouching( var_0 ) )
|
|
{
|
|
if ( !maps\_utility::is_in_array( level.allies, var_3 ) )
|
|
{
|
|
if ( isdefined( var_3.magic_bullet_shield ) && var_3.magic_bullet_shield )
|
|
var_3 maps\_utility::stop_magic_bullet_shield();
|
|
|
|
var_3 kill();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
run_faster_behavior( var_0 )
|
|
{
|
|
if ( var_0 )
|
|
{
|
|
self.animplaybackrate = 1.2;
|
|
self.moveplaybackrate = 1.2;
|
|
self.movetransitionrate = 1.2;
|
|
}
|
|
else
|
|
{
|
|
self.animplaybackrate = randomfloatrange( 0.9, 1.1 );
|
|
self.moveplaybackrate = 1.0;
|
|
self.movetransitionrate = randomfloatrange( 0.9, 1.1 );
|
|
}
|
|
}
|
|
|
|
converge_on_target( var_0, var_1, var_2 )
|
|
{
|
|
self endon( "new_converge" );
|
|
self cleartargetentity();
|
|
self settargetentity( var_0 );
|
|
|
|
for (;;)
|
|
{
|
|
var_3 = distance2d( var_1.origin, var_0.origin );
|
|
|
|
if ( var_3 < 0 )
|
|
var_3 = abs( var_3 );
|
|
|
|
if ( var_3 == 0 )
|
|
var_3 = 1;
|
|
|
|
var_4 = var_3 / var_2;
|
|
var_0 moveto( var_1.origin + ( 0, 0, 16 ), var_4 );
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
fire_turret( var_0 )
|
|
{
|
|
self endon( "stop_firing" );
|
|
self endon( "death" );
|
|
var_1 = 5;
|
|
var_2 = 15;
|
|
var_3 = 1.0;
|
|
var_4 = 1;
|
|
var_5 = 5;
|
|
var_6 = 0;
|
|
self startfiring();
|
|
|
|
for (;;)
|
|
{
|
|
if ( var_0 )
|
|
{
|
|
if ( var_4 )
|
|
{
|
|
var_5 = randomfloatrange( var_1, var_2 );
|
|
var_6 = 0;
|
|
var_4 = 0;
|
|
}
|
|
|
|
if ( var_6 >= var_5 )
|
|
{
|
|
var_4 = 1;
|
|
wait( randomfloat( var_3 ) );
|
|
}
|
|
}
|
|
|
|
self shootturret();
|
|
var_6 = var_6 + 1;
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
player_forward_skip_baker_hold_up()
|
|
{
|
|
var_0 = getent( "hold_up_check", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
common_scripts\utility::flag_set( "player_move_up" );
|
|
}
|
|
|
|
set_group_goalvolume( var_0 )
|
|
{
|
|
var_1 = self;
|
|
var_2 = getent( var_0, "targetname" );
|
|
|
|
foreach ( var_4 in var_1 )
|
|
{
|
|
var_4 cleargoalvolume();
|
|
var_4 setgoalvolumeauto( var_2 );
|
|
}
|
|
}
|
|
|
|
fire_at_target( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
level endon( "stop_the_shooting" );
|
|
var_6 = 0;
|
|
var_7 = 64;
|
|
var_8 = 0.08;
|
|
var_9 = 0.11;
|
|
var_10 = 0.5;
|
|
var_11 = 1;
|
|
var_12 = 9;
|
|
var_13 = 15;
|
|
var_14 = randomintrange( var_12, var_13 );
|
|
|
|
for ( var_15 = 0; var_15 < var_14; var_15++ )
|
|
{
|
|
if ( isdefined( var_5 ) && var_5 )
|
|
{
|
|
var_16 = var_0.origin;
|
|
var_17 = var_1.origin;
|
|
}
|
|
else
|
|
{
|
|
var_16 = var_0;
|
|
var_17 = var_1;
|
|
}
|
|
|
|
var_18 = 0;
|
|
|
|
if ( isdefined( var_2 ) && var_2 )
|
|
{
|
|
var_19 = var_17[0] + randomintrange( var_6, var_7 );
|
|
var_20 = var_17[1] + randomintrange( var_6, var_7 );
|
|
var_21 = var_17[2] + randomintrange( var_6, var_7 ) / 2;
|
|
}
|
|
else
|
|
{
|
|
var_19 = var_17[0];
|
|
var_20 = var_17[1];
|
|
var_21 = var_17[2];
|
|
}
|
|
|
|
var_22 = ( var_19, var_20, var_21 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
if ( !isarray( var_3 ) )
|
|
var_3 = maps\_utility::make_array( var_3 );
|
|
|
|
var_23 = bullettrace( var_16, var_22, 1 );
|
|
var_24 = var_23["entity"];
|
|
|
|
if ( isdefined( var_24 ) )
|
|
{
|
|
for ( var_15 = 0; var_15 < var_3.size; var_15++ )
|
|
{
|
|
if ( var_24 == var_3[var_15] )
|
|
var_18 = 1;
|
|
}
|
|
|
|
if ( var_18 )
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if ( var_18 )
|
|
{
|
|
|
|
}
|
|
|
|
if ( isdefined( var_4 ) )
|
|
magicbullet( var_4, var_16, var_22 );
|
|
else
|
|
{
|
|
var_25 = level.player getcurrentweapon();
|
|
|
|
if ( isdefined( var_25 ) && var_25 != "none" )
|
|
magicbullet( var_25, var_16, var_22 );
|
|
}
|
|
|
|
wait( randomfloatrange( var_8, var_9 ) );
|
|
}
|
|
|
|
wait( randomfloatrange( var_10, var_11 ) );
|
|
}
|
|
|
|
turret_fire_at_target( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
level endon( "stop_the_shooting" );
|
|
var_5 = 0;
|
|
var_6 = 64;
|
|
var_7 = 0.08;
|
|
var_8 = 0.11;
|
|
var_9 = 0.5;
|
|
var_10 = 1;
|
|
var_11 = 9;
|
|
var_12 = 15;
|
|
var_13 = randomintrange( var_11, var_12 );
|
|
|
|
for ( var_14 = 0; var_14 < var_13; var_14++ )
|
|
{
|
|
var_15 = self gettagorigin( var_0 );
|
|
var_16 = var_1.origin;
|
|
var_17 = 0;
|
|
|
|
if ( isdefined( var_2 ) && var_2 )
|
|
{
|
|
var_18 = var_16[0] + randomintrange( var_5, var_6 );
|
|
var_19 = var_16[1] + randomintrange( var_5, var_6 );
|
|
var_20 = var_16[2] + randomintrange( var_5, var_6 ) / 2;
|
|
}
|
|
else
|
|
{
|
|
var_18 = var_16[0];
|
|
var_19 = var_16[1];
|
|
var_20 = var_16[2];
|
|
}
|
|
|
|
var_21 = ( var_18, var_19, var_20 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
if ( !isarray( var_3 ) )
|
|
var_3 = maps\_utility::make_array( var_3 );
|
|
|
|
var_22 = bullettrace( var_15, var_21, 1 );
|
|
var_23 = var_22["entity"];
|
|
|
|
if ( isdefined( var_23 ) )
|
|
{
|
|
for ( var_14 = 0; var_14 < var_3.size; var_14++ )
|
|
{
|
|
if ( var_23 == var_3[var_14] )
|
|
var_17 = 1;
|
|
}
|
|
|
|
if ( var_17 )
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if ( var_17 )
|
|
{
|
|
|
|
}
|
|
|
|
if ( isdefined( var_4 ) )
|
|
magicbullet( var_4, var_15, var_21 );
|
|
else
|
|
{
|
|
var_24 = level.player getcurrentweapon();
|
|
|
|
if ( isdefined( var_24 ) && var_24 != "none" )
|
|
magicbullet( var_24, var_15, var_21 );
|
|
}
|
|
|
|
wait( randomfloatrange( var_7, var_8 ) );
|
|
}
|
|
|
|
wait( randomfloatrange( var_9, var_10 ) );
|
|
}
|
|
|
|
set_goal_volume( var_0 )
|
|
{
|
|
self setgoalvolumeauto( var_0 );
|
|
}
|
|
|
|
streets_to_dam_start()
|
|
{
|
|
level.street_start_allies = [];
|
|
maps\flood_util::player_move_to_checkpoint_start( "streets_to_dam_start" );
|
|
maps\flood_util::spawn_allies();
|
|
level thread enter_garage();
|
|
level thread garage_opening_collapse();
|
|
level thread aim_missiles_2();
|
|
level thread hide_missile_launcher_collision();
|
|
level thread hide_garage_debris();
|
|
level thread maps\flood_infil::kill_player_with_tanks( "streets_beyond_enemy_tank_2" );
|
|
level thread maps\flood_infil::setup_dead_destroyed_and_misc();
|
|
level thread hide_spire();
|
|
level thread init_turn_off_lean_volumes();
|
|
level thread maps\flood_util::flood_battlechatter_on( 1 );
|
|
common_scripts\utility::flag_set( "everyone_in_garage" );
|
|
setsaveddvar( "sm_sunSampleSizeNear", 0.25 );
|
|
}
|
|
|
|
streets_to_dam()
|
|
{
|
|
level thread adjust_ally_movement();
|
|
level thread convoy_think();
|
|
level thread streets_to_dam_sequence();
|
|
level thread streets_to_dam_wave_1_init();
|
|
level thread streets_to_dam_drive_missile_launcher();
|
|
level thread wait_for_player_to_use_ladder();
|
|
level thread spawn_rpg_guys();
|
|
level thread dialogue_streets_to_dam();
|
|
level thread make_allies_shoot_at_targets();
|
|
level thread disable_combat_nodes();
|
|
level thread disable_ally_nag_nodes();
|
|
level thread hide_unhide_crashed_convoy( 1 );
|
|
level thread convoy_kill_player();
|
|
level thread block_garage_exit();
|
|
level thread garage_autosave_before_heli_attack();
|
|
level thread rotate_checkpoint_concrete_barrier_when_near_m880( 210 );
|
|
level thread maps\flood_infil::nh90_convoy_choppers();
|
|
level thread m880_open_path_init();
|
|
level thread m880_connect_path_nodes( 0 );
|
|
level thread maps\flood_anim::m880_crash_anim_init();
|
|
level thread m880_kill_collision_change();
|
|
level thread manage_mantles();
|
|
common_scripts\utility::exploder( "dam_pre_waterfall" );
|
|
common_scripts\utility::flag_wait( "player_on_ladder" );
|
|
wait 2.0;
|
|
level thread streets_to_dam_2_side_guys_spawn_logic();
|
|
var_0 = getent( "streets_to_dam_wave_2_start", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
level notify( "end_of_streets_to_dam" );
|
|
}
|
|
|
|
enter_garage()
|
|
{
|
|
level endon( "firing_garage_shot" );
|
|
var_0 = getent( "into_parking_garage", "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 waittill( "trigger" );
|
|
|
|
if ( isdefined( level.enemy_tank_3 ) )
|
|
{
|
|
level.enemy_tank_3 notify( "stop_firing" );
|
|
level notify( "stop_shooting_player" );
|
|
level.enemy_tank_3 maps\_vehicle::mgoff();
|
|
var_1 = getent( "enemy_tank_2_garage_target", "targetname" );
|
|
level.enemy_tank_3 setturrettargetvec( var_1.origin );
|
|
var_0 = getent( "parking_garage_doorway", "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 waittill( "trigger" );
|
|
|
|
wait 0.5;
|
|
level thread turret_too_slow_failsafe();
|
|
level.player enableinvulnerability();
|
|
level.enemy_tank_3 maps\flood_infil::fire_cannon_at_target( var_1, 1 );
|
|
}
|
|
else
|
|
wait 1.0;
|
|
|
|
level thread garage_player_invulnerable();
|
|
level notify( "firing_garage_shot" );
|
|
}
|
|
|
|
garage_player_invulnerable()
|
|
{
|
|
wait 1.0;
|
|
level.player disableinvulnerability();
|
|
wait 1.0;
|
|
}
|
|
|
|
turret_too_slow_failsafe()
|
|
{
|
|
level endon( "firing_garage_shot" );
|
|
var_0 = getent( "player_far_enough_in_garage", "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 waittill( "trigger" );
|
|
|
|
level.enemy_tank_3 fireweapon();
|
|
level.enemy_tank_3 notify( "stop_firing" );
|
|
level notify( "firing_garage_shot" );
|
|
}
|
|
|
|
garage_opening_collapse()
|
|
{
|
|
level waittill( "firing_garage_shot" );
|
|
|
|
if ( isdefined( level.enemy_tank_3 ) )
|
|
level.enemy_tank_3 playsound( "flood_t90_sweetener" );
|
|
|
|
wait 0.5;
|
|
thread teleport_allies_on_flag();
|
|
var_0 = level.player getplayerangles();
|
|
var_1 = anglestoforward( var_0 );
|
|
level thread maps\flood_infil::kill_infil_enemies();
|
|
playfx( level._effect["tank_concrete_explosion_omni"], level.player.origin, var_1 );
|
|
var_2 = getent( "garage_collapse_fx_node", "targetname" );
|
|
playfx( level._effect["tank_concrete_explosion_omni"], var_2.origin + ( -50, 100, 0 ), ( -1, 2, 0 ) );
|
|
playfx( level._effect["garage_explosion_flash"], level.player.origin );
|
|
level.player shellshock( "default_nosound", 3 );
|
|
level thread slow_player_down( 4 );
|
|
thread stumble_and_quake();
|
|
wait 0.1;
|
|
make_player_look_away( "garage_collapse_back_look_check", ( 45, 135, 0 ), 0.15, 0 );
|
|
thread show_garage_debris();
|
|
thread maps\flood_audio::sfx_parking_lot_explode();
|
|
level.player playrumbleonentity( "heavy_2s" );
|
|
common_scripts\utility::exploder( "garage_dust" );
|
|
var_3 = getent( "garage_collapse_push_volume", "targetname" );
|
|
var_4 = ( -20, 20, 0 );
|
|
push_player_out_of_volume( var_3, var_4 );
|
|
|
|
if ( isalive( level.enemy_tank_3 ) )
|
|
{
|
|
var_5 = getent( "enemy_tank_3_post_garage_target", "targetname" );
|
|
level.enemy_tank_3 setturrettargetent( var_5 );
|
|
level.enemy_tank_3.mgturret[1] cleartargetentity();
|
|
var_6 = getent( "enemy_tank_3_post_garage_backup", "targetname" );
|
|
level.enemy_tank_3 startpath();
|
|
level.enemy_tank_3 vehicle_setspeed( 40 );
|
|
level.enemy_tank_3 common_scripts\utility::delaycall( 0.5, ::vehicle_setspeed, 0 );
|
|
}
|
|
|
|
make_player_look_away( "garage_collapse_back_look_check", ( 45, 135, 0 ), 0.15, 0 );
|
|
common_scripts\utility::flag_set( "player_looking_away" );
|
|
common_scripts\utility::flag_set( "everyone_in_garage" );
|
|
common_scripts\utility::flag_set( "player_ready_to_progress" );
|
|
wait 0.1;
|
|
thread maps\_utility::autosave_by_name( "garage_collapse" );
|
|
}
|
|
|
|
teleport_allies_on_flag()
|
|
{
|
|
common_scripts\utility::flag_wait( "player_looking_away" );
|
|
var_0 = getent( "inside_garage_volume", "targetname" );
|
|
var_1[0] = getent( "streets_to_dam_ally_0_failsafe", "targetname" );
|
|
var_1[1] = getent( "streets_to_dam_ally_1_failsafe", "targetname" );
|
|
var_1[2] = getent( "streets_to_dam_ally_2_failsafe", "targetname" );
|
|
|
|
for ( var_2 = 0; var_2 < level.allies.size; var_2++ )
|
|
{
|
|
if ( !level.allies[var_2] istouching( var_0 ) )
|
|
{
|
|
var_3 = var_1[var_2];
|
|
level.allies[var_2] forceteleport( var_3.origin, var_3.angles );
|
|
}
|
|
}
|
|
}
|
|
|
|
push_player_out_of_volume( var_0, var_1 )
|
|
{
|
|
while ( level.player istouching( var_0 ) )
|
|
{
|
|
level.player pushplayervector( var_1, 1 );
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
level.player pushplayervector( ( 0, 0, 0 ) );
|
|
}
|
|
|
|
stumble_and_quake()
|
|
{
|
|
var_0 = common_scripts\utility::spawn_tag_origin();
|
|
var_0.angles = ( 0, 0, 0 );
|
|
level.player playersetgroundreferenceent( var_0 );
|
|
var_1 = common_scripts\utility::spawn_tag_origin();
|
|
earthquake( 0.25, 4, level.player.origin, 5000 );
|
|
var_2 = var_0.angles;
|
|
var_1.angles = var_0.angles;
|
|
var_1 addpitch( 10 );
|
|
var_1 addroll( 5 );
|
|
var_3 = 0.4;
|
|
var_0 rotateto( var_1.angles, var_3, 0.2, 0.2 );
|
|
wait( var_3 );
|
|
var_1 addpitch( -5 );
|
|
var_1 addroll( -5 );
|
|
var_0 rotateto( var_1.angles, 0.1 );
|
|
wait 0.1;
|
|
var_1 addpitch( 5 );
|
|
var_1 addroll( 5 );
|
|
var_0 rotateto( var_1.angles, 0.1 );
|
|
wait 0.1;
|
|
var_1 addpitch( -35 );
|
|
var_1 addroll( -15 );
|
|
var_0 rotateto( var_1.angles, var_3, 0.2, 0.2 );
|
|
wait( var_3 );
|
|
var_0 rotateto( var_2, var_3 + 0.1, 0.2, 0.2 );
|
|
}
|
|
|
|
adjust_angles_to_player( var_0 )
|
|
{
|
|
var_1 = var_0[0];
|
|
var_2 = var_0[2];
|
|
var_3 = anglestoright( self.angles );
|
|
var_4 = anglestoforward( self.angles );
|
|
var_5 = ( var_3[0], 0, var_3[1] * -1 );
|
|
var_6 = ( var_4[0], 0, var_4[1] * -1 );
|
|
var_7 = var_5 * var_1;
|
|
var_7 = var_7 + var_6 * var_2;
|
|
return var_7 + ( 0, var_0[1], 0 );
|
|
}
|
|
|
|
find_teleport_spot_for_ally( var_0, var_1 )
|
|
{
|
|
while ( var_1 < var_0.size )
|
|
{
|
|
var_2 = var_0[var_1];
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
if ( distance2d( level.player.origin, var_2.origin ) > 32 )
|
|
{
|
|
if ( !maps\_utility::player_looking_at( var_2.origin + ( 0, 0, 16 ), 0.5, 1 ) )
|
|
return var_1;
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
var_1++;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
player_vision_blind( var_0 )
|
|
{
|
|
var_1 = getdvar( "vision_set_current" );
|
|
visionsetnaked( "generic_flash", 0.2 );
|
|
wait( var_0 );
|
|
visionsetnaked( var_1, 0.2 );
|
|
}
|
|
|
|
make_player_look_away( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = getentarray( var_0, "targetname" );
|
|
var_5 = 0;
|
|
|
|
foreach ( var_7 in var_4 )
|
|
{
|
|
if ( maps\_utility::player_looking_at( var_7.origin ) )
|
|
var_5 = 1;
|
|
}
|
|
|
|
if ( var_3 || var_5 )
|
|
{
|
|
var_9 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_9.origin = level.player.origin;
|
|
var_9.angles = level.player getplayerangles();
|
|
level.player playerlinkto( var_9, "", 1.0 );
|
|
var_9 rotateto( var_1, var_2, var_2 * 0.25 );
|
|
wait( var_2 / 2 );
|
|
wait( var_2 / 2 );
|
|
var_9 delete();
|
|
}
|
|
}
|
|
|
|
slow_player_down( var_0 )
|
|
{
|
|
level.player setmovespeedscale( 0.5 );
|
|
wait( var_0 );
|
|
level.player setmovespeedscale( 0.75 );
|
|
wait( var_0 / 2 );
|
|
level.player setmovespeedscale( 1.0 );
|
|
}
|
|
|
|
hide_garage_debris()
|
|
{
|
|
var_0 = getentarray( "garage_debris", "targetname" );
|
|
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
{
|
|
var_0[var_1] hide();
|
|
var_0[var_1] notsolid();
|
|
}
|
|
|
|
wait 1.0;
|
|
var_2 = getnodearray( "garage_opening_path_node", "targetname" );
|
|
|
|
for ( var_1 = 0; var_1 < var_2.size; var_1++ )
|
|
var_2[var_1] connectnode();
|
|
}
|
|
|
|
show_garage_debris()
|
|
{
|
|
wait 0.5;
|
|
var_0 = getentarray( "garage_debris", "targetname" );
|
|
var_1 = getentarray( "garage_debris_origin", "targetname" );
|
|
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
{
|
|
if ( level.player istouching( var_0[var_2] ) )
|
|
var_0[var_2] maps\flood_anim::push_player_out_of_brush( ( 0, 40, 0 ) );
|
|
|
|
var_0[var_2] show();
|
|
var_0[var_2] solid();
|
|
}
|
|
}
|
|
|
|
adjust_ally_movement()
|
|
{
|
|
level.allies[1] maps\_utility::set_force_color( "p" );
|
|
level.allies[2] maps\_utility::set_force_color( "r" );
|
|
|
|
foreach ( var_1 in level.allies )
|
|
var_1 ignore_everything( 0.0 );
|
|
|
|
common_scripts\utility::flag_wait( "everyone_in_garage" );
|
|
level thread set_flag_when_player_ready_to_progress( "player_ready_to_progress" );
|
|
common_scripts\utility::flag_wait( "player_ready_to_progress" );
|
|
level.allies[0] thread send_ally_to_garage_node( "ally_garage_path_0", "ally_garage_path_0_skip" );
|
|
var_3 = undefined;
|
|
var_4 = getent( "past_traversal_volume", "targetname" );
|
|
|
|
for ( var_5 = 2; var_5 > 0; var_5-- )
|
|
{
|
|
if ( level.allies[var_5] istouching( var_4 ) )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
if ( level.allies[var_5].origin[0] < var_3.origin[0] )
|
|
var_3 = level.allies[var_5];
|
|
|
|
continue;
|
|
}
|
|
|
|
var_3 = level.allies[var_5];
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_3 ) && var_3 == level.allies[1] )
|
|
{
|
|
level.allies[2] thread send_ally_to_garage_node( "ally_garage_path_1", "ally_garage_path_1_skip" );
|
|
level.allies[1] thread send_ally_to_garage_node( "ally_garage_path_2", "ally_garage_path_2_skip" );
|
|
}
|
|
else
|
|
{
|
|
level.allies[1] thread send_ally_to_garage_node( "ally_garage_path_1", "ally_garage_path_1_skip" );
|
|
level.allies[2] thread send_ally_to_garage_node( "ally_garage_path_2", "ally_garage_path_2_skip" );
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "everyone_in_garage" );
|
|
wait 1.0;
|
|
var_6 = [];
|
|
var_6[var_6.size] = "run_stumble";
|
|
var_6[var_6.size] = "run_flinch";
|
|
var_6[var_6.size] = "run_duck";
|
|
|
|
foreach ( var_8, var_1 in level.allies )
|
|
{
|
|
var_1 thread stumble_anim( var_6[var_8] );
|
|
wait( randomfloat( 0.5 ) );
|
|
}
|
|
|
|
var_9 = [];
|
|
|
|
for ( var_5 = 0; var_5 < level.allies.size; var_5++ )
|
|
{
|
|
level.allies[var_5] pushplayer( 1 );
|
|
var_9[var_5] = level.allies[var_5].moveplaybackrate;
|
|
level.allies[var_5] maps\_utility::enable_cqbwalk();
|
|
}
|
|
|
|
level thread turn_off_cqb_if_player_too_far_forward();
|
|
wait 5;
|
|
|
|
for ( var_5 = 0; var_5 < level.allies.size; var_5++ )
|
|
level.allies[var_5] pushplayer( 0 );
|
|
|
|
var_10 = getent( "baker_hold_up", "targetname" );
|
|
|
|
if ( isdefined( var_10 ) )
|
|
var_10 waittill( "trigger" );
|
|
|
|
level notify( "stop_distance_check" );
|
|
|
|
for ( var_5 = 0; var_5 < level.allies.size; var_5++ )
|
|
{
|
|
level.allies[var_5] maps\_utility::disable_cqbwalk();
|
|
level.allies[var_5] maps\_utility::disable_sprint();
|
|
level.allies[var_5] maps\_utility::set_moveplaybackrate( var_9[var_5] );
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "player_on_ladder" );
|
|
level.allies[1] maps\_utility::set_force_color( "r" );
|
|
}
|
|
|
|
send_ally_to_garage_node( var_0, var_1 )
|
|
{
|
|
var_2 = getnode( var_0, "targetname" );
|
|
|
|
if ( self.origin[0] < var_2.origin[0] )
|
|
var_2 = getnode( var_1, "targetname" );
|
|
|
|
thread maps\_utility::follow_path( var_2, 650 );
|
|
}
|
|
|
|
set_flag_when_player_ready_to_progress( var_0 )
|
|
{
|
|
var_1 = getent( "player_far_enough_in_garage", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 waittill( "trigger" );
|
|
|
|
common_scripts\utility::flag_set( var_0 );
|
|
}
|
|
|
|
garage_progress_look_at_test( var_0 )
|
|
{
|
|
maps\_utility::waittill_player_lookat_for_time( 1.5 );
|
|
common_scripts\utility::flag_set( var_0 );
|
|
}
|
|
|
|
stumble_anim( var_0 )
|
|
{
|
|
var_0 = maps\_utility::getgenericanim( var_0 );
|
|
self.run_overrideanim = var_0;
|
|
self setflaggedanimknob( "stumble_run", var_0, 1, 0.2, 1, 1 );
|
|
wait 1.5;
|
|
var_1 = maps\_utility::getgenericanim( "run_root" );
|
|
var_2 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( self getanimtime( var_1 ) < var_2 )
|
|
break;
|
|
|
|
var_2 = self getanimtime( var_1 );
|
|
wait 0.05;
|
|
}
|
|
|
|
self.run_overrideanim = undefined;
|
|
self notify( "movemode" );
|
|
}
|
|
|
|
turn_off_cqb_if_player_too_far_forward( var_0 )
|
|
{
|
|
level endon( "stop_distance_check" );
|
|
var_1 = getent( "streets_to_dam_autosave", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 waittill( "trigger" );
|
|
|
|
var_2 = getent( "garage_hallway_position_check", "targetname" );
|
|
var_3 = 1;
|
|
|
|
while ( var_3 )
|
|
{
|
|
var_3 = 0;
|
|
var_4 = distance2d( level.player.origin, var_2.origin );
|
|
var_4 = var_4 - 50;
|
|
|
|
foreach ( var_6 in level.allies )
|
|
{
|
|
var_7 = distance2d( var_6.origin, var_2.origin );
|
|
|
|
if ( var_7 < var_4 )
|
|
var_3 = 1;
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
|
|
foreach ( var_6 in level.allies )
|
|
var_6 maps\_utility::disable_cqbwalk();
|
|
}
|
|
|
|
play_baker_anim( var_0 )
|
|
{
|
|
var_0 maps\_anim::anim_single_solo( self, "ally_hold_01" );
|
|
common_scripts\utility::flag_set( "baker_anim_done" );
|
|
}
|
|
|
|
allies_cqbwalk( var_0 )
|
|
{
|
|
if ( var_0 )
|
|
{
|
|
level.allies[0] maps\_utility::enable_cqbwalk( var_0 );
|
|
level.allies[1] maps\_utility::enable_cqbwalk( var_0 );
|
|
level.allies[2] maps\_utility::enable_cqbwalk( var_0 );
|
|
}
|
|
else
|
|
{
|
|
level.allies[0] maps\_utility::disable_cqbwalk();
|
|
level.allies[1] maps\_utility::disable_cqbwalk();
|
|
level.allies[2] maps\_utility::disable_cqbwalk();
|
|
}
|
|
}
|
|
|
|
setup_allies_streets_to_dam()
|
|
{
|
|
wait 0.5;
|
|
var_0 = level.allies;
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 ally_think_streets_to_dam();
|
|
}
|
|
|
|
ally_think_streets_to_dam()
|
|
{
|
|
maps\_utility::enable_cqbwalk();
|
|
common_scripts\utility::flag_wait( "baker_move_up" );
|
|
maps\_utility::disable_cqbwalk();
|
|
}
|
|
|
|
convoy_think()
|
|
{
|
|
level.convoy = [];
|
|
var_0 = getentarray( "enemy_convoy_vehicles_broken", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_2 maps\_utility::add_spawn_function( ::convoy_spawn_func );
|
|
var_3 = var_2 maps\_vehicle::spawn_vehicle_and_gopath();
|
|
wait 0.1;
|
|
}
|
|
|
|
level thread convoy_spawn_logic();
|
|
wait 0.2;
|
|
level thread convoy_check();
|
|
level thread set_flag_when_launcher_in_right_spot();
|
|
}
|
|
|
|
convoy_spawn_logic()
|
|
{
|
|
var_0 = getentarray( "enemy_convoy_vehicles", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 maps\_utility::add_spawn_function( ::convoy_spawn_func );
|
|
|
|
var_4 = [ 1, 2, 0, 1, 2, 1, 0 ];
|
|
var_5 = 0;
|
|
var_6 = 0;
|
|
|
|
while ( !common_scripts\utility::flag( "spawn_m880" ) )
|
|
{
|
|
var_7 = var_0[var_4[var_5]] maps\_vehicle::spawn_vehicle_and_gopath();
|
|
var_7 thread maps\flood_audio::flood_convoy_sfx( var_5 );
|
|
var_7 vehicle_turnengineoff();
|
|
var_5++;
|
|
|
|
if ( var_5 >= var_4.size )
|
|
var_5 = 0;
|
|
|
|
var_8 = getvehiclenode( "convoy_next_node_1", "targetname" );
|
|
var_9 = getvehiclenode( "convoy_next_node_2", "targetname" );
|
|
common_scripts\utility::waittill_any_ents( var_8, "trigger", var_9, "trigger" );
|
|
wait 0.5;
|
|
}
|
|
|
|
var_10 = getentarray( "enemy_convoy_vehicles_tank", "targetname" );
|
|
|
|
foreach ( var_12 in var_10 )
|
|
{
|
|
var_12 maps\_utility::add_spawn_function( ::convoy_spawn_func );
|
|
var_12 maps\_vehicle::spawn_vehicle_and_gopath();
|
|
wait 0.1;
|
|
}
|
|
|
|
var_14 = getent( "enemy_convoy_vehicles_launcher", "targetname" );
|
|
var_14 maps\_utility::add_spawn_function( ::launcher_spawn_func );
|
|
var_14 = var_14 maps\_utility::spawn_vehicle();
|
|
level thread ladder_spot_glow();
|
|
wait 0.1;
|
|
var_14 maps\_vehicle::gopath();
|
|
common_scripts\utility::flag_set( "m880_has_spawned" );
|
|
var_15 = getent( "enemy_convoy_vehicles_launcher_lynx", "targetname" );
|
|
var_15 maps\_utility::add_spawn_function( ::launcher_lynx_spawn_func );
|
|
var_15 maps\_vehicle::spawn_vehicle_and_gopath();
|
|
}
|
|
|
|
convoy_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
var_0 = level.convoy.size;
|
|
level.convoy[var_0] = self;
|
|
thread convoy_death_func();
|
|
maps\_vehicle::godon();
|
|
self vehicle_setspeed( 25, 25, 25 );
|
|
|
|
if ( self.vehicletype != "iveco_lynx" )
|
|
{
|
|
while ( !self.riders.size )
|
|
wait 0.1;
|
|
|
|
var_1 = self.riders.size;
|
|
wait 0.2;
|
|
|
|
foreach ( var_3 in self.riders )
|
|
{
|
|
if ( isdefined( var_3.script_startingposition ) && var_3.script_startingposition != 0 )
|
|
{
|
|
var_4 = randomint( 2 );
|
|
|
|
if ( var_4 == 0 && var_1 > 2 )
|
|
{
|
|
var_1--;
|
|
var_3 delete();
|
|
}
|
|
else
|
|
var_3 thread convoy_riders_death_func();
|
|
}
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "spawn_m880" );
|
|
var_6 = randomintrange( 1, 3 );
|
|
self vehicle_setspeed( 25, 7, 7 );
|
|
|
|
while ( !common_scripts\utility::flag( "start_heli_attack" ) )
|
|
{
|
|
convoy_spacing_func( var_0, 450, 600 );
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
wait 2.0;
|
|
self vehicle_setspeed( 25, 2, 2 );
|
|
}
|
|
|
|
launcher_spawn_func()
|
|
{
|
|
thread maps\flood_audio::flood_convoy_exp_sfx();
|
|
self endon( "death" );
|
|
level.first_launcher = self;
|
|
self.animname = "m880_crash_m880";
|
|
maps\_vehicle::godon();
|
|
self vehicle_setspeed( 25, 25, 25 );
|
|
common_scripts\utility::flag_wait( "start_heli_attack" );
|
|
thread maps\flood_audio::flood_launcher_crash_sfx();
|
|
wait 2.0;
|
|
self vehicle_setspeed( 25, 2, 2 );
|
|
|
|
while ( level.first_launcher.origin[1] < -10000 )
|
|
common_scripts\utility::waitframe();
|
|
|
|
level.first_launcher thread maps\_vehicle::vehicle_stop_named( "m880_crashed", 25, 25 );
|
|
level.launcher_lynx thread m880_crash_kill_player_in_lynx_volume();
|
|
maps\_utility::delaythread( 2.5, ::m880_crash_kill_in_volume );
|
|
maps\flood_anim::m880_crash_spawn( level.first_launcher, level.launcher_lynx );
|
|
common_scripts\utility::flag_set( "missile_launcher_in_place" );
|
|
level notify( "remove_checkpoint_kill_trigger" );
|
|
level thread connect_nodes_after_crash();
|
|
maps\flood_anim::m880_crash_loop( level.first_launcher );
|
|
}
|
|
|
|
debug_timer()
|
|
{
|
|
common_scripts\utility::flag_init( "debug_timer_stop" );
|
|
var_0 = 0;
|
|
|
|
while ( !common_scripts\utility::flag( "debug_timer_stop" ) )
|
|
{
|
|
var_0++;
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
iprintln( "waited " + var_0 + " frames" );
|
|
}
|
|
|
|
m880_crash_kill_in_volume()
|
|
{
|
|
var_0 = getaiarray( "axis" );
|
|
var_1 = getent( "m880_crash_kill_volume", "targetname" );
|
|
|
|
if ( level.player istouching( var_1 ) )
|
|
{
|
|
level.player kill();
|
|
wait 0.1;
|
|
setdvar( "ui_deadquote", &"FLOOD_FAIL_VEHICLE_CRUSH" );
|
|
level thread maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( var_3 istouching( var_1 ) )
|
|
var_3 kill();
|
|
}
|
|
}
|
|
|
|
m880_crash_kill_player_in_lynx_volume()
|
|
{
|
|
level waittill( "lynx_crash_start" );
|
|
var_0 = getent( "lynx_collision_path_200", "targetname" );
|
|
var_0 thread wait_then_check_if_player_touching_kill( 2.0, 2.8 );
|
|
var_0 = getent( "lynx_collision_path_250", "targetname" );
|
|
var_0 thread wait_then_check_if_player_touching_kill( 2.5, 3.14 );
|
|
var_0 = getent( "lynx_collision_path_290", "targetname" );
|
|
var_0 thread wait_then_check_if_player_touching_kill( 2.9, 3.6 );
|
|
var_0 = getent( "lynx_collision_path_330", "targetname" );
|
|
var_0 thread wait_then_check_if_player_touching_kill( 3.3, 4.5 );
|
|
var_0 = getent( "lynx_collision_path_385", "targetname" );
|
|
var_0 thread wait_then_check_if_player_touching_kill( 3.85, 4.6 );
|
|
}
|
|
|
|
wait_then_check_if_player_touching_kill( var_0, var_1 )
|
|
{
|
|
self endon( "stop" + var_0 );
|
|
self endon( "death" );
|
|
var_2 = var_1 - var_0;
|
|
wait( var_0 );
|
|
thread maps\_utility::notify_delay( "stop" + var_0, var_2 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player istouching( self ) )
|
|
{
|
|
level.player kill();
|
|
wait 0.1;
|
|
setdvar( "ui_deadquote", &"FLOOD_FAIL_VEHICLE_CRUSH" );
|
|
level thread maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
connect_nodes_after_crash()
|
|
{
|
|
var_0 = getnodearray( "connect_after_crash", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 connectnode();
|
|
|
|
var_0 = getnodearray( "disconnect_after_crash", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 disconnectnode();
|
|
}
|
|
|
|
launcher_lynx_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
level.launcher_lynx = self;
|
|
self.animname = "convoy_lynx";
|
|
maps\_vehicle::godon();
|
|
self vehicle_setspeed( 25, 25, 25 );
|
|
common_scripts\utility::flag_wait( "start_heli_attack" );
|
|
}
|
|
|
|
convoy_kill_player()
|
|
{
|
|
level endon( "remove_checkpoint_kill_trigger" );
|
|
var_0 = getent( "kill_player_checkpoint", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
level.player kill();
|
|
wait 0.1;
|
|
setdvar( "ui_deadquote", &"FLOOD_FAIL_VEHICLE_CRUSH" );
|
|
level thread maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
convoy_death_func()
|
|
{
|
|
self endon( "death" );
|
|
|
|
while ( !common_scripts\utility::flag( "streets_to_dam_enemies_dead" ) )
|
|
{
|
|
var_0 = getent( "kill_convoy", "targetname" );
|
|
var_0 waittill( "trigger", var_1 );
|
|
|
|
if ( var_1 == self )
|
|
break;
|
|
}
|
|
|
|
self delete();
|
|
}
|
|
|
|
convoy_riders_death_func()
|
|
{
|
|
self endon( "death" );
|
|
|
|
while ( !common_scripts\utility::flag( "streets_to_dam_enemies_dead" ) )
|
|
{
|
|
var_0 = getent( "kill_truck_guys", "targetname" );
|
|
var_0 waittill( "trigger", var_1 );
|
|
|
|
if ( var_1 == self )
|
|
break;
|
|
}
|
|
|
|
self delete();
|
|
}
|
|
|
|
convoy_riders_react_func( var_0 )
|
|
{
|
|
var_0 endon( "death" );
|
|
wait 0.3;
|
|
|
|
foreach ( var_2 in var_0.riders )
|
|
{
|
|
var_2 thread notify_on_msg( self, "riders_shot", "death" );
|
|
var_2 thread notify_on_msg( self, "riders_shot", "damage" );
|
|
}
|
|
|
|
self waittill( "riders_shot" );
|
|
wait( randomfloat( 0.2 ) );
|
|
|
|
if ( isdefined( self ) && isalive( self ) )
|
|
{
|
|
var_4 = level.vehicle_aianims[var_0.classname][2];
|
|
self setanim( var_4.death );
|
|
}
|
|
}
|
|
|
|
check_if_player_close_to_checkpoint()
|
|
{
|
|
var_0 = getent( "close_to_checkpoint", "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 waittill( "trigger" );
|
|
|
|
common_scripts\utility::flag_set( "close_to_checkpoint" );
|
|
}
|
|
|
|
convoy_spacing_func( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = 21;
|
|
var_4 = 27;
|
|
|
|
if ( isdefined( level.convoy[var_0 - 1] ) && isdefined( level.convoy[var_0] ) )
|
|
{
|
|
if ( distance2d( level.convoy[var_0].origin, level.convoy[var_0 - 1].origin ) > var_2 )
|
|
{
|
|
var_5 = level.convoy[var_0] vehicle_getspeed();
|
|
var_6 = randomintrange( 1, 3 );
|
|
var_7 = var_5 + var_6;
|
|
|
|
if ( var_7 > var_4 )
|
|
var_7 = var_4;
|
|
|
|
level.convoy[var_0] vehicle_setspeed( var_7, 10, 10 );
|
|
}
|
|
|
|
if ( distance2d( level.convoy[var_0].origin, level.convoy[var_0 - 1].origin ) < var_1 )
|
|
{
|
|
var_5 = level.convoy[var_0] vehicle_getspeed();
|
|
var_6 = randomintrange( 1, 3 );
|
|
var_7 = var_5 - var_6;
|
|
|
|
if ( var_7 < var_3 )
|
|
var_7 = var_3;
|
|
|
|
level.convoy[var_0] vehicle_setspeed( var_7, 10, 10 );
|
|
}
|
|
}
|
|
}
|
|
|
|
rotate_checkpoint_gate_when_near_m880( var_0 )
|
|
{
|
|
var_1 = getent( "checkpoint_gate", "targetname" );
|
|
var_2 = ( 0, 0, -15 );
|
|
|
|
while ( !isdefined( level.first_launcher ) )
|
|
wait 0.1;
|
|
|
|
while ( distance2d( level.first_launcher.origin, var_1.origin ) > var_0 )
|
|
wait 0.1;
|
|
|
|
var_1 rotateto( var_2, 0.25 );
|
|
}
|
|
|
|
rotate_checkpoint_concrete_barrier_when_near_m880( var_0 )
|
|
{
|
|
level endon( "end_of_streets_to_dam" );
|
|
var_1 = getent( "checkpoint_concrete_barrier_1", "targetname" );
|
|
var_2 = getent( "checkpoint_concrete_barrier_2", "targetname" );
|
|
var_2 hide();
|
|
var_3 = var_2.angles;
|
|
var_4 = var_2.origin;
|
|
|
|
while ( !isdefined( level.first_launcher ) )
|
|
wait 0.1;
|
|
|
|
while ( distance2d( level.first_launcher.origin, var_1.origin ) > var_0 )
|
|
wait 0.1;
|
|
|
|
var_1 rotateto( var_3, 0.15 );
|
|
var_1 moveto( var_4, 0.15 );
|
|
var_5 = getentarray( "checkpoint_concrete_barrier_1_clip", "targetname" );
|
|
|
|
foreach ( var_7 in var_5 )
|
|
var_7 delete();
|
|
|
|
level waittill( "player_failed_stab" );
|
|
var_1 hide();
|
|
}
|
|
|
|
streets_to_dam_sequence()
|
|
{
|
|
var_0 = getent( "rpg_guys_death_trigger", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
maps\_utility::kill_deathflag( "rpg_guys" );
|
|
}
|
|
|
|
streets_to_dam_wave_1_init()
|
|
{
|
|
var_0 = getentarray( "streets_to_dam_wave_1", "targetname" );
|
|
maps\_utility::array_spawn_function( var_0, ::streets_to_dam_wave_1_spawn_func );
|
|
var_0 = getentarray( "streets_to_dam_wave_1", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::spawn_ai );
|
|
var_0 = getentarray( "streets_to_dam_wave_1_street_patrol", "targetname" );
|
|
maps\_utility::array_spawn_function( var_0, ::streets_to_dam_wave_1_street_patrol_spawn_func );
|
|
var_0 = getentarray( "streets_to_dam_wave_1_street_patrol", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::spawn_ai );
|
|
var_1 = getaiarray( "axis" );
|
|
common_scripts\utility::array_thread( var_1, ::ignore_everything );
|
|
var_2 = getaiarray( "allies" );
|
|
common_scripts\utility::array_thread( var_2, ::ignore_everything );
|
|
level thread block_off_road_during_convoy();
|
|
level thread set_up_vignette_enemies();
|
|
level thread watch_player_for_attack();
|
|
level thread watch_player_for_trigger();
|
|
level thread watch_for_ally_see_convoy();
|
|
level thread swap_nodes_init();
|
|
common_scripts\utility::flag_wait_any( "see_convoy", "player_move_up", "enemy_alerted" );
|
|
|
|
if ( common_scripts\utility::flag( "player_move_up" ) )
|
|
{
|
|
|
|
}
|
|
|
|
if ( common_scripts\utility::flag( "enemy_alerted" ) )
|
|
{
|
|
|
|
}
|
|
|
|
var_3 = getent( "spawn_scaffold_guys_trigger", "targetname" );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_3 notify( "trigger" );
|
|
|
|
level thread start_combat_after_seeing_launcher();
|
|
level thread enemy_checkpoint_dialogue();
|
|
level thread heli_strafing_run();
|
|
common_scripts\utility::flag_wait_any( "enemy_alerted", "start_cover_fire" );
|
|
|
|
if ( !common_scripts\utility::flag( "enemy_alerted" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "enemy_surprised" );
|
|
wait 2.5;
|
|
var_2 = getaiarray( "allies" );
|
|
common_scripts\utility::array_thread( var_2, ::clear_ignore_everything );
|
|
|
|
foreach ( var_5 in var_2 )
|
|
{
|
|
var_5.ignoreme = 1;
|
|
var_5.ignoresuppression = 1;
|
|
}
|
|
|
|
level.player.ignoreme = 1;
|
|
var_1 = getaiarray( "axis" );
|
|
|
|
foreach ( var_5 in var_1 )
|
|
var_5 maps\_utility::delaythread( randomfloatrange( 0.1, 1.0 ), ::clear_ignore_everything );
|
|
|
|
level thread checkpoint_enemies_run_for_cover();
|
|
wait 3.0;
|
|
}
|
|
else
|
|
{
|
|
var_9 = maps\_utility::get_ai_group_ai( "rpg_guys" );
|
|
common_scripts\utility::array_thread( var_9, ::clear_ignore_everything );
|
|
}
|
|
|
|
var_2 = getaiarray( "allies" );
|
|
common_scripts\utility::array_thread( var_2, ::clear_ignore_everything );
|
|
|
|
foreach ( var_5 in var_2 )
|
|
var_5.ignoreme = 0;
|
|
|
|
level.player.ignoreme = 0;
|
|
var_9 = maps\_utility::get_ai_group_ai( "rpg_guys" );
|
|
var_1 = getaiarray( "axis" );
|
|
var_1 = common_scripts\utility::array_remove_array( var_1, var_9 );
|
|
common_scripts\utility::array_thread( var_1, ::clear_ignore_everything );
|
|
|
|
foreach ( var_5 in var_1 )
|
|
{
|
|
if ( isdefined( var_5 ) )
|
|
{
|
|
var_5 clear_ignore_everything();
|
|
wait( randomfloatrange( 0.2, 0.5 ) );
|
|
}
|
|
}
|
|
|
|
wait 0.5;
|
|
|
|
while ( maps\_utility::get_ai_group_sentient_count( "streets_to_dam_wave_1" ) + maps\_utility::get_ai_group_sentient_count( "rpg_guys" ) > 4 )
|
|
wait 0.1;
|
|
|
|
common_scripts\utility::flag_set( "streets_to_dam_enemies_ALMOST_dead" );
|
|
wait 2;
|
|
var_14 = getent( "streets_to_dam_garage_exit", "targetname" );
|
|
|
|
if ( isdefined( var_14 ) )
|
|
var_14 notify( "trigger" );
|
|
|
|
while ( maps\_utility::get_ai_group_sentient_count( "streets_to_dam_wave_1" ) + maps\_utility::get_ai_group_sentient_count( "rpg_guys" ) > 1 )
|
|
wait 0.1;
|
|
|
|
common_scripts\utility::flag_set( "streets_to_dam_enemies_last_guy" );
|
|
maps\_utility::waittill_aigroupcleared( "streets_to_dam_wave_1" );
|
|
maps\_utility::waittill_aigroupcleared( "rpg_guys" );
|
|
wait 0.5;
|
|
common_scripts\utility::flag_set( "streets_to_dam_enemies_dead" );
|
|
}
|
|
|
|
watch_for_ally_see_convoy()
|
|
{
|
|
var_0 = getent( "baker_hold_up", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
common_scripts\utility::flag_set( "see_convoy" );
|
|
}
|
|
|
|
checkpoint_enemies_run_for_cover()
|
|
{
|
|
var_0 = spawn( "script_origin", level.heli_turret.origin );
|
|
wait 0.1;
|
|
var_0.origin = level.heli_turret.origin + ( 0, 0, 300 );
|
|
var_0 linkto( level.heli_turret );
|
|
var_1 = getnodearray( "checkpoint_alert_node", "script_noteworthy" );
|
|
var_2 = maps\_utility::get_ai_group_ai( "streets_to_dam_wave_1" );
|
|
var_3 = var_2[0].goalradius;
|
|
|
|
foreach ( var_5 in var_1 )
|
|
{
|
|
var_6 = common_scripts\utility::get_array_of_closest( var_5.origin, var_2 );
|
|
|
|
if ( var_6.size > 0 )
|
|
{
|
|
var_6[0].goalradius = 32;
|
|
var_6[0] setgoalnode( var_5 );
|
|
var_6[0] setentitytarget( var_0 );
|
|
var_2 = common_scripts\utility::array_remove( var_2, var_6[0] );
|
|
}
|
|
}
|
|
|
|
wait 1.5;
|
|
var_2 = maps\_utility::get_ai_group_ai( "streets_to_dam_wave_1" );
|
|
|
|
foreach ( var_9 in var_2 )
|
|
{
|
|
var_9.goalradius = var_3;
|
|
var_9 clearentitytarget();
|
|
}
|
|
}
|
|
|
|
checkpoint_rpg_enemies_fire_at_heli()
|
|
{
|
|
for ( var_0 = maps\_utility::get_ai_group_ai( "rpg_guys" ); var_0.size < 2; var_0 = maps\_utility::get_ai_group_ai( "rpg_guys" ) )
|
|
wait 0.1;
|
|
|
|
var_1 = getent( "streets_to_dam_rpg_target_1", "targetname" );
|
|
var_0 = common_scripts\utility::get_array_of_closest( var_1.origin, var_0 );
|
|
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
{
|
|
if ( isdefined( var_0[var_2] ) )
|
|
{
|
|
if ( var_2 != 0 )
|
|
var_1 = getent( "streets_to_dam_rpg_target_2", "targetname" );
|
|
|
|
var_0[var_2] thread rpg_guy_wait_and_fire_at_target( var_1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
rpg_guy_wait_and_fire_at_target( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( common_scripts\utility::flag( "enemy_surprised" ) )
|
|
{
|
|
self.dontevershoot = 1;
|
|
self setentitytarget( var_0 );
|
|
thread ignore_everything();
|
|
|
|
while ( level.heli_turret.origin[1] < var_0.origin[1] )
|
|
wait 0.1;
|
|
|
|
self.dontevershoot = undefined;
|
|
wait 2.0;
|
|
self clearentitytarget();
|
|
wait 0.1;
|
|
self.dontevershoot = undefined;
|
|
thread clear_ignore_everything();
|
|
}
|
|
|
|
self.ignoresuppression = 1;
|
|
}
|
|
|
|
set_up_vignette_enemies()
|
|
{
|
|
var_0 = getentarray( "streets_to_dam_wave_1_vignette", "targetname" );
|
|
maps\_utility::array_spawn_function( var_0, ::streets_to_dam_wave_1_spawn_func );
|
|
maps\_utility::array_spawn_function( var_0, ::streets_to_dam_wave_1_vignette_spawn_func );
|
|
var_1 = 0;
|
|
var_2 = [];
|
|
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
var_2[var_1] = var_4 maps\_utility::spawn_ai();
|
|
var_1++;
|
|
var_2[var_1 - 1].animname = "convoy_checkpoint_opfor0" + var_1;
|
|
}
|
|
|
|
var_0 = getentarray( "streets_to_dam_wave_1_vignette_extra", "targetname" );
|
|
maps\_utility::array_spawn_function( var_0, ::streets_to_dam_wave_1_spawn_func );
|
|
maps\_utility::array_spawn_function( var_0, ::streets_to_dam_wave_1_vignette_extra_spawn_func );
|
|
maps\_utility::array_spawn( var_0 );
|
|
wait 1.0;
|
|
common_scripts\utility::flag_wait( "vignette_convoy_checkpoint_flag" );
|
|
|
|
if ( !common_scripts\utility::flag( "enemy_alerted" ) )
|
|
maps\flood_anim::convoy_checkpoint( var_2[0], var_2[1], var_2[2], var_2[3] );
|
|
}
|
|
|
|
delete_on_flag( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
common_scripts\utility::flag_wait( var_0 );
|
|
self delete();
|
|
}
|
|
|
|
streets_to_dam_wave_1_vignette_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( self.script_noteworthy ) )
|
|
{
|
|
if ( self.script_noteworthy == "enemy_13" )
|
|
level.enemy_13 = self;
|
|
|
|
if ( self.script_noteworthy == "enemy_14" )
|
|
level.enemy_14 = self;
|
|
|
|
if ( self.script_noteworthy == "enemy_15" )
|
|
level.enemy_15 = self;
|
|
}
|
|
|
|
thread set_flag_if_damaged();
|
|
ignore_everything();
|
|
common_scripts\utility::flag_wait( "enemy_alerted" );
|
|
clear_ignore_everything();
|
|
self stopanimscripted();
|
|
}
|
|
|
|
streets_to_dam_wave_1_vignette_extra_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
self.animname = "convoy_checkpoint_opfor02";
|
|
ignore_everything();
|
|
var_0 = getent( "streets_to_dam_extra_waver_node", "script_noteworthy" );
|
|
var_0.origin = var_0.origin + ( 30, 150, 0 );
|
|
var_1 = [];
|
|
var_1["convoy_checkpoint_opfor02"] = self;
|
|
var_0 thread maps\_anim::anim_single( var_1, "convoy_checkpoint" );
|
|
common_scripts\utility::flag_wait( "enemy_alerted" );
|
|
clear_ignore_everything();
|
|
self stopanimscripted();
|
|
}
|
|
|
|
start_combat_after_seeing_launcher()
|
|
{
|
|
common_scripts\utility::flag_wait( "rpg_fired_at_launcher" );
|
|
common_scripts\utility::flag_set( "start_cover_fire" );
|
|
}
|
|
|
|
kill_guys_near_rpg()
|
|
{
|
|
wait 2.0;
|
|
var_0 = getent( "enemies_near_rpg_volume", "targetname" );
|
|
kill_deathflag_in_area( "streets_to_dam_checkpoint_enemies_close", var_0, 2.0 );
|
|
}
|
|
|
|
garage_autosave_before_heli_attack()
|
|
{
|
|
common_scripts\utility::flag_wait( "m880_has_spawned" );
|
|
thread maps\_utility::autosave_by_name( "garage_before_heli" );
|
|
}
|
|
|
|
allies_convoy_dialogue()
|
|
{
|
|
var_0 = lookupsoundlength( "flood_pri_helixonewevegot" );
|
|
var_0 = var_0 / 1000;
|
|
level.allies[0] thread maps\_utility::smart_dialogue( "flood_pri_helixonewevegot" );
|
|
wait( var_0 );
|
|
maps\_utility::smart_radio_dialogue( "flood_hlx_alreadypickeditup" );
|
|
wait 0.5;
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_pri_getreadyforthe" );
|
|
}
|
|
|
|
enemy_checkpoint_dialogue()
|
|
{
|
|
while ( !isdefined( level.enemy_13 ) )
|
|
wait 0.1;
|
|
|
|
while ( !isdefined( level.enemy_14 ) )
|
|
wait 0.1;
|
|
|
|
while ( !isdefined( level.enemy_15 ) )
|
|
wait 0.1;
|
|
}
|
|
|
|
enemy_dialogue( var_0 )
|
|
{
|
|
if ( !common_scripts\utility::flag( "enemy_alerted" ) )
|
|
maps\_utility::smart_dialogue( var_0 );
|
|
}
|
|
|
|
heli_strafing_run()
|
|
{
|
|
common_scripts\utility::flag_wait( "start_heli_attack" );
|
|
level maps\_utility::delaythread( 1, maps\_vehicle::spawn_vehicles_from_targetname_and_drive, "convoy_flyin_jet" );
|
|
var_0 = maps\_vehicle::spawn_vehicle_from_targetname( "streets_to_dam_strafe_blackhawk" );
|
|
var_1 = maps\_vehicle::spawn_vehicle_from_targetname( "streets_to_dam_strafe_blackhawk_2" );
|
|
var_0 maps\_vehicle::godon();
|
|
var_1 maps\_vehicle::godon();
|
|
var_2 = var_0 thread add_turret_to_heli( 1 );
|
|
var_3 = var_1 thread add_turret_to_heli( 2 );
|
|
var_0 maps\_vehicle::gopath();
|
|
var_0 vehicle_turnengineoff();
|
|
var_0 thread maps\flood_audio::flood_convoy_attackheli01_sfx();
|
|
var_1 maps\_vehicle::gopath();
|
|
var_1 vehicle_turnengineoff();
|
|
var_1 thread maps\flood_audio::flood_convoy_attackheli02_sfx();
|
|
var_0 waittill( "start_firing" );
|
|
var_0 thread heli_strafing_think();
|
|
common_scripts\utility::flag_set( "rpg_fired_at_launcher" );
|
|
wait 1.0;
|
|
wait 1.0;
|
|
wait 3.0;
|
|
var_0 notify( "stop_firing_mg" );
|
|
var_1 notify( "stop_firing_mg" );
|
|
}
|
|
|
|
display_speed()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = self vehicle_getspeed();
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
heli_strafing_think()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_firing" );
|
|
fire_heli_missile( "new_streets_to_dam_heli_target_1" );
|
|
wait 0.2;
|
|
wait 0.3;
|
|
fire_heli_missile( "new_streets_to_dam_heli_target_3" );
|
|
wait 0.5;
|
|
wait 0.2;
|
|
fire_heli_missile( "new_streets_to_dam_heli_target_6" );
|
|
wait 0.6;
|
|
fire_heli_missile( "new_streets_to_dam_heli_target_8" );
|
|
wait 0.2;
|
|
fire_heli_missile( "new_streets_to_dam_heli_target_11" );
|
|
wait 0.4;
|
|
fire_heli_missile( "new_streets_to_dam_heli_target_12" );
|
|
self notify( "stop_firing" );
|
|
}
|
|
|
|
fire_heli_missile( var_0 )
|
|
{
|
|
var_1 = self gettagorigin( "tag_flash" );
|
|
var_1 = ( var_1[0], var_1[1] + 50, var_1[2] );
|
|
var_2 = getent( var_0, "targetname" );
|
|
magicbullet( "rpg_straight", var_1, var_2.origin );
|
|
}
|
|
|
|
add_turret_to_heli( var_0 )
|
|
{
|
|
var_1 = "vehicle_silenthawk_wings";
|
|
var_2 = level.first_launcher gettagorigin( "tag_origin" );
|
|
var_3 = spawn( "script_model", var_2 );
|
|
var_3 setmodel( var_1 );
|
|
var_3 linkto( self, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
var_4 = self gettagorigin( "tag_doorgun" );
|
|
var_4 = self.origin;
|
|
|
|
if ( var_0 == 1 )
|
|
{
|
|
level.heli_turret = spawnturret( "misc_turret", var_4, "dshk_gaz" );
|
|
var_5 = level.heli_turret;
|
|
}
|
|
else
|
|
var_5 = spawnturret( "misc_turret", var_4, "dshk_gaz" );
|
|
|
|
var_5 setmodel( "vehicle_m1a2_abrams_remote_gun" );
|
|
var_5.team = "allies";
|
|
wait 0.1;
|
|
var_5.origin = self gettagorigin( "tag_doorgun" );
|
|
var_5 linkto( self, "tag_doorgun", ( 0, 0, 0 ), self.angles + ( 0, 0, 90 ) );
|
|
var_5 setmode( "manual" );
|
|
var_5 setturretteam( "allies" );
|
|
var_5 hide();
|
|
|
|
while ( isdefined( self ) )
|
|
wait 1.0;
|
|
|
|
var_5 delete();
|
|
}
|
|
|
|
fire_heli_turret()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_firing_mg" );
|
|
self waittill( "stop_firing" );
|
|
var_0 = level.heli_turret;
|
|
var_1 = getent( "missile_smoke_origin_3", "targetname" );
|
|
var_0 settargetentity( var_1 );
|
|
var_0 startfiring();
|
|
|
|
while ( isdefined( var_0 ) )
|
|
{
|
|
var_0 shootturret();
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
block_off_road_during_convoy()
|
|
{
|
|
var_0 = getent( "streets_to_dam_bad_place_brush", "targetname" );
|
|
badplace_brush( "street_blocker", -1, var_0, "axis" );
|
|
common_scripts\utility::flag_wait( "convoy_gone" );
|
|
wait 3.0;
|
|
badplace_delete( "street_blocker" );
|
|
}
|
|
|
|
watch_player_for_attack()
|
|
{
|
|
level thread watch_for_player_grenade();
|
|
|
|
while ( !common_scripts\utility::flag( "enemy_alerted" ) )
|
|
{
|
|
if ( level.player attackbuttonpressed() && level.player getcurrentweaponclipammo() > 0 )
|
|
break;
|
|
|
|
wait 0.1;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "enemy_alerted" );
|
|
}
|
|
|
|
watch_for_player_grenade()
|
|
{
|
|
while ( !common_scripts\utility::flag( "enemy_alerted" ) && !common_scripts\utility::flag( "grenade_thrown" ) )
|
|
{
|
|
var_0 = getentarray( "grenade", "classname" );
|
|
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
{
|
|
if ( isdefined( var_0[var_1] ) )
|
|
{
|
|
var_2 = getmissileowner( var_0[var_1] );
|
|
|
|
if ( var_2 == level.player )
|
|
{
|
|
common_scripts\utility::flag_set( "grenade_thrown" );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
wait( randomfloatrange( 1.5, 2 ) );
|
|
common_scripts\utility::flag_set( "enemy_alerted" );
|
|
}
|
|
|
|
watch_player_for_trigger()
|
|
{
|
|
var_0 = getent( "streets_to_dam_garage_exit", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
common_scripts\utility::flag_set( "enemy_alerted" );
|
|
}
|
|
|
|
watch_enemy_for_damage()
|
|
{
|
|
var_0 = getaiarray( "axis" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread set_flag_if_damaged();
|
|
}
|
|
|
|
set_flag_if_damaged()
|
|
{
|
|
level endon( "enemy_alerted" );
|
|
waitill_damage_or_death();
|
|
self dodamage( 10, level.player.origin, level.player );
|
|
common_scripts\utility::flag_set( "enemy_alerted" );
|
|
}
|
|
|
|
notify_on_msg( var_0, var_1, var_2 )
|
|
{
|
|
self waittill( var_2 );
|
|
var_0 notify( var_1 );
|
|
}
|
|
|
|
waitill_damage_or_death()
|
|
{
|
|
self endon( "damage" );
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
wait 0.1;
|
|
}
|
|
|
|
swap_nodes_init()
|
|
{
|
|
var_0 = getentarray( "swap_node_trigger", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread swap_nodes();
|
|
}
|
|
|
|
swap_nodes()
|
|
{
|
|
level endon( "end_of_streets_to_dam" );
|
|
|
|
if ( isdefined( self.target ) )
|
|
{
|
|
while ( !common_scripts\utility::flag( "streets_to_dam_enemies_dead" ) )
|
|
{
|
|
self waittill( "trigger" );
|
|
wait 0.5;
|
|
|
|
if ( level.player istouching( self ) )
|
|
{
|
|
for ( var_0 = 0; var_0 < level.allies.size; var_0++ )
|
|
{
|
|
if ( level.allies[var_0] istouching( self ) )
|
|
{
|
|
var_1 = getnode( self.target, "targetname" );
|
|
level.allies[var_0] setgoalnode( var_1 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
trigger_named_and_turn_off_prior( var_0, var_1 )
|
|
{
|
|
var_2 = 1;
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
{
|
|
if ( var_2 )
|
|
{
|
|
if ( var_0[var_3] == var_1 )
|
|
{
|
|
var_4 = getent( var_0[var_3], "targetname" );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_4 notify( "trigger" );
|
|
|
|
var_2 = 0;
|
|
}
|
|
|
|
var_4 = getent( var_0[var_3], "targetname" );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_4 common_scripts\utility::trigger_off();
|
|
}
|
|
}
|
|
}
|
|
|
|
set_flag_when_launcher_in_right_spot()
|
|
{
|
|
while ( !isdefined( level.first_launcher ) )
|
|
wait 0.1;
|
|
|
|
while ( level.first_launcher.origin[1] < -10500 )
|
|
wait 0.1;
|
|
|
|
common_scripts\utility::flag_set( "start_heli_attack" );
|
|
}
|
|
|
|
convoy_check()
|
|
{
|
|
while ( !isdefined( level.first_launcher ) )
|
|
wait 0.1;
|
|
|
|
var_0 = level.first_launcher;
|
|
var_1 = -8200;
|
|
var_2 = 1;
|
|
|
|
while ( var_2 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
{
|
|
var_3 = getent( "missile_launcher_2", "targetname" );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
break;
|
|
else
|
|
var_0 = var_3;
|
|
}
|
|
|
|
if ( var_0.origin[1] > var_1 )
|
|
var_2 = 0;
|
|
|
|
if ( level.player.origin[1] > var_0.origin[1] - 190 )
|
|
{
|
|
if ( level.player.origin[0] > var_0.origin[0] - 100 && level.player.origin[0] < var_0.origin[0] + 100 )
|
|
{
|
|
wait 0.2;
|
|
level.player kill();
|
|
wait 0.1;
|
|
setdvar( "ui_deadquote", &"FLOOD_FAIL_VEHICLE_CRUSH" );
|
|
level thread maps\_utility::missionfailedwrapper();
|
|
}
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "convoy_gone" );
|
|
}
|
|
|
|
disable_combat_nodes()
|
|
{
|
|
var_0 = getnodearray( "nodes_to_disconnect", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 disconnectnode();
|
|
|
|
common_scripts\utility::flag_wait( "enemy_alerted" );
|
|
var_0 = getnodearray( "nodes_to_disconnect", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 connectnode();
|
|
}
|
|
|
|
disable_ally_nag_nodes()
|
|
{
|
|
var_0 = getnodearray( "nodes_to_disconnect_ally", "script_noteworthy" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 disconnectnode();
|
|
|
|
common_scripts\utility::flag_wait_either( "player_on_ladder", "streets_to_dam_enemies_dead" );
|
|
var_0 = getnodearray( "nodes_to_disconnect_ally", "script_noteworthy" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 connectnode();
|
|
}
|
|
|
|
spawn_rpg_guys()
|
|
{
|
|
common_scripts\utility::flag_wait_any( "rpg_spawn", "enemy_alerted", "enemy_surprised" );
|
|
var_0 = getentarray( "streets_to_dam_wave_1_rpg", "targetname" );
|
|
maps\_utility::array_spawn_function( var_0, ::streets_to_dam_wave_1_rpg_spawn_func );
|
|
wait 0.5;
|
|
var_1 = getent( "rpg_guy_2", "script_noteworthy" );
|
|
var_2 = getent( "streets_to_dam_rpg_target_2", "targetname" );
|
|
var_1 maps\_utility::add_spawn_function( ::rpg_guy_wait_and_fire_at_target, var_2 );
|
|
var_1 = var_1 maps\_utility::spawn_ai();
|
|
wait 0.5;
|
|
var_3 = getent( "rpg_guy_1", "script_noteworthy" );
|
|
var_2 = getent( "streets_to_dam_rpg_target_1", "targetname" );
|
|
var_3 maps\_utility::add_spawn_function( ::rpg_guy_wait_and_fire_at_target, var_2 );
|
|
var_3 = var_3 maps\_utility::spawn_ai();
|
|
wait 0.5;
|
|
}
|
|
|
|
streets_to_dam_wave_1_rpg_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
thread set_flag_if_damaged();
|
|
thread remove_rpgs_on_death();
|
|
common_scripts\utility::flag_wait( "enemy_alerted" );
|
|
self notify( "stop_going_to_node" );
|
|
clear_ignore_everything();
|
|
self.ignoresuppression = 1;
|
|
|
|
if ( self.script_noteworthy == "rpg_guy_1" )
|
|
var_0 = getnode( "rpg_node_1", "targetname" );
|
|
else
|
|
var_0 = getnode( "rpg_node_2", "targetname" );
|
|
|
|
var_1 = self.goalradius;
|
|
self.goalradius = var_0.radius;
|
|
self.goalradius = 16;
|
|
self setgoalnode( var_0 );
|
|
self waittill( "goal" );
|
|
wait 10;
|
|
self.goalradius = var_1;
|
|
}
|
|
|
|
remove_rpgs_on_death()
|
|
{
|
|
self waittill( "death" );
|
|
|
|
if ( isdefined( self.weapon ) )
|
|
maps\_utility::gun_remove();
|
|
}
|
|
|
|
streets_to_dam_wave_1_street_patrol_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
thread maps\_patrol::patrol();
|
|
common_scripts\utility::flag_wait( "enemy_alerted" );
|
|
self notify( "stop_going_to_node" );
|
|
|
|
if ( common_scripts\utility::flag( "convoy_gone" ) )
|
|
var_0 = getent( "enemies_left_goal_volume", "targetname" );
|
|
else
|
|
var_0 = getent( "enemies_convoy_goal_volume", "targetname" );
|
|
|
|
self setgoalvolumeauto( var_0 );
|
|
self.grenadeammo = randomint( 1 );
|
|
|
|
while ( !common_scripts\utility::flag( "convoy_gone" ) )
|
|
wait 0.1;
|
|
|
|
var_0 = getent( "enemies_left_goal_volume", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
common_scripts\utility::flag_wait( "streets_to_dam_enemies_ALMOST_dead" );
|
|
var_0 = getent( "enemies_left_small_goal_volume", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
common_scripts\utility::flag_wait( "streets_to_dam_enemies_last_guy" );
|
|
var_0 = getent( "enemies_left_last_guy_goal_volume", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
}
|
|
|
|
spawn_scaffold_guys()
|
|
{
|
|
if ( !common_scripts\utility::flag( "player_on_ladder" ) )
|
|
{
|
|
var_0 = getentarray( "streets_to_dam_wave_1_5_scaffold", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::spawn_ai );
|
|
}
|
|
|
|
var_1 = getent( "scaffold_guys_fight", "targetname" );
|
|
var_1 notify( "trigger" );
|
|
}
|
|
|
|
scaffold_test_2()
|
|
{
|
|
wait 0.5;
|
|
|
|
while ( maps\_utility::get_ai_group_sentient_count( "streets_to_dam_wave_1" ) + maps\_utility::get_ai_group_sentient_count( "rpg_guys" ) > 1 )
|
|
wait 0.1;
|
|
|
|
level notify( "spawn_scaffold_guys" );
|
|
}
|
|
|
|
scaffold_test_3()
|
|
{
|
|
wait 1.0;
|
|
level notify( "spawn_scaffold_guys" );
|
|
}
|
|
|
|
streets_to_dam_wave_1_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
ignore_everything();
|
|
thread set_flag_if_damaged();
|
|
common_scripts\utility::flag_wait( "enemy_alerted" );
|
|
var_0 = getent( "enemies_convoy_goal_volume", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
wait 2.0;
|
|
|
|
if ( common_scripts\utility::flag( "convoy_gone" ) )
|
|
var_0 = getent( "enemies_left_goal_volume", "targetname" );
|
|
else
|
|
var_0 = getent( "enemies_convoy_goal_volume", "targetname" );
|
|
|
|
self setgoalvolumeauto( var_0 );
|
|
self.grenadeammo = randomint( 1 );
|
|
|
|
while ( !common_scripts\utility::flag( "convoy_gone" ) )
|
|
wait 0.1;
|
|
|
|
var_0 = getent( "enemies_left_goal_volume", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
common_scripts\utility::flag_wait( "streets_to_dam_enemies_ALMOST_dead" );
|
|
var_0 = getent( "enemies_left_small_goal_volume", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
common_scripts\utility::flag_wait( "streets_to_dam_enemies_last_guy" );
|
|
var_0 = getent( "enemies_left_last_guy_goal_volume", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
}
|
|
|
|
streets_to_dam_drive_missile_launcher()
|
|
{
|
|
var_0 = getent( "missile_launcher_2", "targetname" );
|
|
common_scripts\utility::flag_wait( "rpg_fired_at_launcher" );
|
|
level thread show_missile_launcher_collision();
|
|
wait 0.2;
|
|
common_scripts\utility::flag_wait( "player_on_ladder" );
|
|
level.first_launcher notify( "stop_crash_loop" );
|
|
level.first_launcher stopanimscripted();
|
|
missile_launcher_destruction_vignette();
|
|
|
|
if ( level.stabbed )
|
|
wait 1.0;
|
|
}
|
|
|
|
m880_open_path_init()
|
|
{
|
|
var_0 = getentarray( "m880_show_to_open_path", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 hide();
|
|
}
|
|
|
|
m880_open_path()
|
|
{
|
|
var_0 = getentarray( "m880_delete_to_open_path", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 delete();
|
|
|
|
var_0 = getentarray( "m880_collision_brush", "script_noteworthy" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 delete();
|
|
|
|
var_0 = getentarray( "m880_show_to_open_path", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 show();
|
|
}
|
|
|
|
m880_connect_path_nodes( var_0 )
|
|
{
|
|
wait 3.0;
|
|
var_1 = getnodearray( "m880_kill_connect_nodes", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( var_0 )
|
|
{
|
|
var_3 connectnode();
|
|
continue;
|
|
}
|
|
|
|
var_3 disconnectnode();
|
|
}
|
|
}
|
|
|
|
missile_launcher_vo()
|
|
{
|
|
if ( !common_scripts\utility::flag( "player_on_ladder" ) )
|
|
{
|
|
level.allies[1] maps\_utility::smart_dialogue( "flood_diz_multiplesams" );
|
|
wait 3.0;
|
|
}
|
|
|
|
if ( !common_scripts\utility::flag( "player_on_ladder" ) )
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_bkr_getinposition" );
|
|
}
|
|
|
|
missile_launcher_destruction_vignette()
|
|
{
|
|
level thread ignore_player( 1 );
|
|
maps\_utility::delaythread( 2.0, ::ignore_player, 0 );
|
|
setsaveddvar( "sm_sunSampleSizeNear", 0.15 );
|
|
mlrs_kill1_spawn();
|
|
level thread missile_launcher_destruction_vignette_allies();
|
|
wait 0.5;
|
|
level thread m880_open_path();
|
|
thread maps\_utility::autosave_by_name( "after_mlrs_kill" );
|
|
common_scripts\utility::flag_set( "missile_launcher_destruction_done" );
|
|
thread maps\flood_audio::sfx_stop_buzzer( "sfx_launcher_destroyed" );
|
|
setsaveddvar( "sm_sunSampleSizeNear", 0.25 );
|
|
}
|
|
|
|
missile_launcher_destruction_vignette_allies()
|
|
{
|
|
var_0 = getent( "post_missile_launcher_location_ally1", "targetname" );
|
|
level.allies[0] forceteleport( var_0.origin, var_0.angles );
|
|
level.allies[0] ignore_everything();
|
|
var_0 = getent( "post_missile_launcher_location_ally2", "targetname" );
|
|
level.allies[1] forceteleport( var_0.origin, var_0.angles );
|
|
level.allies[1] ignore_everything();
|
|
var_0 = getent( "post_missile_launcher_location_ally3", "targetname" );
|
|
level.allies[2] forceteleport( var_0.origin, var_0.angles );
|
|
level.allies[2] ignore_everything();
|
|
wait 7.0;
|
|
level.allies[0] clear_ignore_everything();
|
|
level.allies[1] clear_ignore_everything();
|
|
level.allies[2] clear_ignore_everything();
|
|
wait 0.5;
|
|
var_1 = getent( "streets_to_dam_wave_2_start", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 notify( "trigger" );
|
|
}
|
|
|
|
mlrs_kill1_spawn()
|
|
{
|
|
var_0 = level.first_launcher;
|
|
var_0.animname = "mlrs_kill1_m880";
|
|
var_1 = maps\_vignette_util::vignette_drone_spawn( "vignette_mrls_kill_opfor", "mlrs_kill1_opfor" );
|
|
mlrs_kill1_start( var_0, var_1 );
|
|
var_1 delete();
|
|
}
|
|
|
|
mlrs_kill1_start( var_0, var_1 )
|
|
{
|
|
var_2 = common_scripts\utility::getstruct( "vignette_m880_crash", "script_noteworthy" );
|
|
var_3 = maps\_utility::spawn_anim_model( "mlrs_kill1_knife" );
|
|
var_3 dontcastshadows();
|
|
var_4 = maps\_utility::spawn_anim_model( "mlrs_kill1_gun" );
|
|
var_5 = getdvarint( "g_friendlyNameDist" );
|
|
setsaveddvar( "g_friendlyNameDist", 0 );
|
|
level.player enableinvulnerability();
|
|
level.player freezecontrols( 1 );
|
|
level.player allowprone( 0 );
|
|
level.player allowcrouch( 0 );
|
|
level.player disableweapons();
|
|
level.player stopsliding();
|
|
|
|
if ( level.player getstance() == "prone" )
|
|
{
|
|
level.player setstance( "crouch" );
|
|
|
|
while ( level.player getstance() != "crouch" )
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
if ( level.player getstance() == "crouch" )
|
|
{
|
|
level.player setstance( "stand" );
|
|
|
|
while ( level.player getstance() != "stand" )
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
level.player allowprone( 0 );
|
|
level.player allowcrouch( 0 );
|
|
var_6 = maps\_utility::spawn_anim_model( "player_rig" );
|
|
var_6 dontcastshadows();
|
|
level.player thread delay_hide_view_model( 0.4 );
|
|
var_6 thread hide_and_show( 0.45 );
|
|
var_7 = [];
|
|
var_7["player_rig"] = var_6;
|
|
var_7["mlrs_kill1_opfor"] = var_1;
|
|
var_7["mlrs_kill1_knife"] = var_3;
|
|
var_7["mlrs_kill1_gun"] = var_4;
|
|
var_2 maps\_anim::anim_first_frame( var_7, "mlrs_kill1_start" );
|
|
thread player_wait_link_to_blend( 0.0, var_6 );
|
|
var_0 move_to_anim_start_point( "mlrs_kill1_m880", "mlrs_kill1_start", var_2, 0.0 );
|
|
level.m880_radiation_gate thread move_to_anim_start_point( "m880_radiation_gate", "mlrs_kill1_start", var_2, 0.2 );
|
|
var_8 = level.player getcurrentweapon();
|
|
var_9 = weaponclipsize( var_8 );
|
|
var_10 = level.player getweaponammoclip( var_8 );
|
|
level.player setweaponammoclip( var_8, var_9 );
|
|
setsaveddvar( "ammoCounterHide", 1 );
|
|
var_11 = 15;
|
|
level thread m880_kill1_start_spring_cam( var_6, 0.5 );
|
|
thread maps\flood_audio::mssl_launch_destory_sfx();
|
|
common_scripts\utility::flag_init( "qte_window_closed" );
|
|
level.stabbed = 0;
|
|
thread mlrs_kill1_barricades( var_2 );
|
|
var_7 = [];
|
|
var_7["mlrs_kill1_m880"] = var_0;
|
|
var_7["player_rig"] = var_6;
|
|
var_7["mlrs_kill1_opfor"] = var_1;
|
|
var_7["mlrs_kill1_knife"] = var_3;
|
|
var_7["mlrs_kill1_gun"] = var_4;
|
|
var_7["m880_radiation_gate"] = level.m880_radiation_gate;
|
|
var_2 maps\_anim::anim_single( var_7, "mlrs_kill1_start" );
|
|
common_scripts\utility::flag_set( "qte_window_closed" );
|
|
|
|
if ( !level.stabbed )
|
|
{
|
|
level notify( "player_failed_stab" );
|
|
level.player disableinvulnerability();
|
|
magicbullet( "pp19", var_4.origin, level.player.origin );
|
|
level.player dodamage( level.player.health - 20, var_4.origin );
|
|
level.lnchr_dstry_sfx stopsounds();
|
|
thread m880_kill1_fail( var_2, var_6, var_1, var_3, var_4 );
|
|
level.convoy_tall_barricade_01 hide();
|
|
level.convoy_tall_barricade_02 hide();
|
|
setslowmotion( 0.25, 1.0, 0.25 );
|
|
wait 1.0;
|
|
setdvar( "ui_deadquote", &"FLOOD_LAUNCHER_QTE_FAIL" );
|
|
level thread maps\_utility::missionfailedwrapper();
|
|
}
|
|
else
|
|
{
|
|
mlrs_kill1_end_spawn( var_2, var_6, var_0, var_1, var_3, var_4, level.m880_radiation_gate );
|
|
level.player unlink();
|
|
level.player showviewmodel();
|
|
var_6 delete();
|
|
level.player setweaponammoclip( var_8, var_10 );
|
|
setsaveddvar( "ammoCounterHide", 0 );
|
|
level.player enableweapons();
|
|
level.player freezecontrols( 0 );
|
|
level.player allowprone( 1 );
|
|
level.player allowcrouch( 1 );
|
|
}
|
|
|
|
setsaveddvar( "g_friendlyNameDist", var_5 );
|
|
level.player disableinvulnerability();
|
|
level maps\_utility::delaythread( 2, maps\_vehicle::spawn_vehicles_from_targetname_and_drive, "streets_enemy_dam_chopper" );
|
|
thread maps\flood_audio::flood_streets_distant_helipass();
|
|
}
|
|
|
|
delay_hide_view_model( var_0 )
|
|
{
|
|
wait( var_0 );
|
|
self hideviewmodel();
|
|
}
|
|
|
|
player_wait_link_to_blend( var_0, var_1 )
|
|
{
|
|
wait( var_0 );
|
|
var_2 = 0.25;
|
|
level.player playerlinktoblend( var_1, "tag_player", var_2, 0, 0 );
|
|
}
|
|
|
|
move_to_anim_start_point( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = level.scr_anim[var_0][var_1];
|
|
var_5 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_5.origin = getstartorigin( var_2.origin, var_2.angles, var_4 );
|
|
var_5.angles = getstartangles( var_2.origin, var_2.angles, var_4 );
|
|
|
|
if ( maps\_vehicle::isvehicle() )
|
|
{
|
|
self vehicle_orientto( var_5.origin, var_5.angles, 0, 0 );
|
|
self waittill( "orientto_complete" );
|
|
self notify( "suspend_drive_anims" );
|
|
}
|
|
else
|
|
{
|
|
var_6 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_6.origin = self.origin;
|
|
var_6.angles = self.angles;
|
|
self linkto( var_6 );
|
|
var_6 moveto( var_5.origin, var_3 );
|
|
var_6 rotateto( var_5.angles, var_3 );
|
|
self unlink();
|
|
var_6 delete();
|
|
}
|
|
|
|
var_5 delete();
|
|
}
|
|
|
|
m880_kill1_start_spring_cam( var_0, var_1 )
|
|
{
|
|
wait( var_1 );
|
|
var_2 = 15;
|
|
level.player playerlinktodelta( var_0, "tag_player", 1, var_2, var_2, var_2, var_2, 1 );
|
|
level.player springcamenabled( 1, 3.2, 1.6 );
|
|
}
|
|
|
|
m880_kill1_fail( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "vignette_m880_crash", "script_noteworthy" );
|
|
var_5 = [];
|
|
var_5["mlrs_kill1_opfor"] = var_2;
|
|
var_5["player_rig"] = var_1;
|
|
var_5["mlrs_kill1_knife"] = var_3;
|
|
var_5["mlrs_kill1_gun"] = var_4;
|
|
var_0 maps\_anim::anim_single( var_5, "m880_kill1_fail" );
|
|
}
|
|
|
|
m880_kill_collision_change()
|
|
{
|
|
var_0 = getentarray( "clip_after_m880_kill", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_2 hide();
|
|
var_2 notsolid();
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "missile_launcher_destruction_done" );
|
|
var_0 = getentarray( "clip_after_m880_kill", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( level.player istouching( var_2 ) )
|
|
{
|
|
var_2 thread maps\flood_anim::push_player_out_of_brush( ( -20, 0, 0 ) );
|
|
continue;
|
|
}
|
|
|
|
var_2 show();
|
|
var_2 solid();
|
|
}
|
|
}
|
|
|
|
mlrs_kill1_end_spawn( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
var_7 = maps\_vignette_util::vignette_drone_spawn( "vignette_mrls_kill_player_body", "mlrs_kill1_end_player_legs" );
|
|
mlrs_kill1_end( var_0, var_1, var_2, var_3, var_4, var_5, var_7, var_6 );
|
|
var_7 maps\_vignette_util::vignette_actor_delete();
|
|
}
|
|
|
|
mlrs_kill1_end( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
|
{
|
|
var_8 = maps\_utility::spawn_anim_model( "mlrs_kill1_end_grenade" );
|
|
var_8 dontcastshadows();
|
|
var_9 = [];
|
|
var_9["player_rig"] = var_1;
|
|
var_9["mlrs_kill1_opfor"] = var_3;
|
|
var_9["mlrs_kill1_knife"] = var_4;
|
|
var_9["mlrs_kill1_end_player_legs"] = var_6;
|
|
var_9["mlrs_kill1_end_grenade"] = var_8;
|
|
var_9["mlrs_kill1_gun"] = var_5;
|
|
var_9["m880_radiation_gate"] = var_7;
|
|
thread play_mlrs_m880_end( var_0, var_2 );
|
|
var_0 maps\_anim::anim_single( var_9, "mlrs_kill1_end" );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_4 delete();
|
|
|
|
if ( isdefined( var_8 ) )
|
|
var_8 delete();
|
|
}
|
|
|
|
play_mlrs_m880_end( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
var_2["mlrs_kill1_m880"] = var_1;
|
|
var_0 maps\_anim::anim_single( var_2, "mlrs_kill1_end" );
|
|
}
|
|
|
|
mlrs_kill1_barricades( var_0 )
|
|
{
|
|
var_1 = maps\_utility::spawn_anim_model( "mlrs_kill1_barricade_01" );
|
|
var_2 = maps\_utility::spawn_anim_model( "mlrs_kill1_barricade_02" );
|
|
var_1 thread hide_and_show( 1.0 );
|
|
var_2 thread hide_and_show( 1.0 );
|
|
var_3 = [];
|
|
var_3["mlrs_kill1_barricade_01"] = var_1;
|
|
var_3["mlrs_kill1_barricade_02"] = var_2;
|
|
var_0 maps\_anim::anim_single( var_3, "mlrs_kill1_barricades" );
|
|
}
|
|
|
|
hide_and_show( var_0 )
|
|
{
|
|
self hide();
|
|
wait( var_0 );
|
|
self show();
|
|
}
|
|
|
|
mlrs_start_qte( var_0 )
|
|
{
|
|
thread mlrs_qte_prompt();
|
|
thread maps\flood_audio::launcher_destroy_slomo_sfx();
|
|
setslowmotion( 1.0, 0.25, 0.5 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player meleebuttonpressed() )
|
|
{
|
|
common_scripts\utility::flag_set( "qte_window_closed" );
|
|
setslowmotion( 0.25, 1.0, 0.05 );
|
|
thread maps\flood_audio::launcher_destroy_stop_slomo_sfx();
|
|
level.stabbed = 1;
|
|
return;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
mlrs_stop_qte_hint()
|
|
{
|
|
if ( common_scripts\utility::flag( "qte_window_closed" ) )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
ladder_spot_glow()
|
|
{
|
|
while ( !isdefined( level.first_launcher ) )
|
|
wait 0.1;
|
|
|
|
common_scripts\utility::flag_wait( "missile_launcher_in_place" );
|
|
var_0 = "vehicle_m880_launcher_obj";
|
|
var_1 = level.first_launcher gettagorigin( "tag_ladder" );
|
|
var_2 = spawn( "script_model", var_1 );
|
|
var_2 setmodel( var_0 );
|
|
var_2 linkto( level.first_launcher, "tag_ladder", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
common_scripts\utility::flag_wait( "player_on_ladder" );
|
|
wait 3.0;
|
|
var_2 delete();
|
|
}
|
|
|
|
wait_for_player_to_use_ladder()
|
|
{
|
|
var_0 = getent( "player_climb_ladder_trigger_no_use", "targetname" );
|
|
var_0 common_scripts\utility::trigger_off();
|
|
common_scripts\utility::flag_wait( "missile_launcher_in_place" );
|
|
var_0 = getent( "streets_to_dam_garage_exit", "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 common_scripts\utility::trigger_off();
|
|
|
|
level thread end_of_combat_autosave();
|
|
var_0 = getent( "player_climb_ladder_trigger_no_use", "targetname" );
|
|
var_0 common_scripts\utility::trigger_on();
|
|
var_0 waittill( "trigger" );
|
|
common_scripts\utility::flag_set( "player_on_ladder" );
|
|
var_0 = getent( "player_climb_ladder_trigger", "targetname" );
|
|
var_0 common_scripts\utility::trigger_off();
|
|
maps\_utility::kill_deathflag( "streets_to_dam_checkpoint_enemies" );
|
|
maps\_utility::kill_deathflag( "streets_to_dam_checkpoint_enemies_close" );
|
|
maps\_utility::kill_deathflag( "rpg_guys" );
|
|
}
|
|
|
|
end_of_combat_autosave()
|
|
{
|
|
common_scripts\utility::flag_wait( "streets_to_dam_enemies_dead" );
|
|
|
|
if ( !common_scripts\utility::flag( "player_on_ladder" ) )
|
|
{
|
|
var_0 = getent( "streets_to_dam_end_combat_autosave", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
thread maps\_utility::autosave_by_name( "checkpoint_combat_end" );
|
|
}
|
|
}
|
|
|
|
block_garage_exit()
|
|
{
|
|
var_0 = getent( "garage_exit_player_clip", "targetname" );
|
|
var_0 hide();
|
|
var_0 notsolid();
|
|
var_1 = getent( "streets_to_dam_end_combat_autosave", "targetname" );
|
|
var_1 waittill( "trigger" );
|
|
|
|
while ( level.player istouching( var_0 ) )
|
|
wait 0.1;
|
|
|
|
var_0 show();
|
|
var_0 solid();
|
|
common_scripts\utility::flag_set( "player_out_of_garage" );
|
|
}
|
|
|
|
teleport_failsafe()
|
|
{
|
|
wait 10.5;
|
|
var_0 = getent( "streets_to_dam_end_combat_autosave", "targetname" );
|
|
|
|
if ( level.allies[0] istouching( var_0 ) )
|
|
{
|
|
var_1 = getent( "post_missile_launcher_location_ally1", "targetname" );
|
|
level.allies[0] forceteleport( var_1.origin, var_1.angles );
|
|
}
|
|
|
|
if ( level.allies[1] istouching( var_0 ) )
|
|
{
|
|
var_1 = getent( "post_missile_launcher_location_ally2", "targetname" );
|
|
level.allies[1] forceteleport( var_1.origin, var_1.angles );
|
|
}
|
|
|
|
if ( level.allies[2] istouching( var_0 ) )
|
|
{
|
|
var_1 = getent( "post_missile_launcher_location_ally3", "targetname" );
|
|
level.allies[2] forceteleport( var_1.origin, var_1.angles );
|
|
}
|
|
}
|
|
|
|
make_allies_shoot_at_targets()
|
|
{
|
|
common_scripts\utility::flag_wait_either( "player_on_ladder", "streets_to_dam_enemies_dead" );
|
|
|
|
if ( !common_scripts\utility::flag( "player_on_ladder" ) )
|
|
{
|
|
var_0 = getent( "streets_to_dam_garage_exit", "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
var_0 notify( "trigger" );
|
|
wait 1.0;
|
|
}
|
|
|
|
wait 0.2;
|
|
var_1 = getnode( "streets_to_dam_ally_0_node", "targetname" );
|
|
level.allies[0] setgoalnode( var_1 );
|
|
var_0 = getent( "streets_to_dam_garage_exit", "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
wait 2.0;
|
|
|
|
var_1 = getnode( "streets_to_dam_ally_1_node", "targetname" );
|
|
level.allies[1] thread play_ally_launcher_vignette_wrapper( "launcher_callout_ally02", var_1, maps\flood_anim::launcher_callout_ally02, "player_on_ladder", ( 0, 0, 0 ) );
|
|
var_0 = getent( "streets_to_dam_garage_exit", "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
wait 2.0;
|
|
|
|
var_1 = getnode( "streets_to_dam_ally_2_node", "targetname" );
|
|
level.allies[2] thread play_ally_launcher_vignette_wrapper( "launcher_callout_ally03", var_1, maps\flood_anim::launcher_callout_ally03, "player_on_ladder", ( 0, 225, 0 ) );
|
|
common_scripts\utility::flag_wait( "player_on_ladder" );
|
|
level.allies[0] notify( "player_now_on_ladder" );
|
|
level.allies[1] notify( "player_now_on_ladder" );
|
|
level.allies[2] notify( "player_now_on_ladder" );
|
|
level.allies[0] clearentitytarget();
|
|
level.allies[1] clearentitytarget();
|
|
level.allies[2] clearentitytarget();
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
play_ally_launcher_vignette_wrapper( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = self.animname;
|
|
var_6 = self.goalradius;
|
|
play_ally_launcher_vignette( var_0, var_1, var_2, var_3, var_4 );
|
|
self stopanimscripted();
|
|
|
|
if ( isdefined( var_5 ) )
|
|
self.animname = var_5;
|
|
|
|
self.goalradius = var_6;
|
|
}
|
|
|
|
play_ally_launcher_vignette( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
self endon( "player_now_on_ladder" );
|
|
self setgoalnode( var_1 );
|
|
self.goalradius = 16;
|
|
self waittill( "goal" );
|
|
self.animname = var_0;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
while ( !common_scripts\utility::flag( var_3 ) )
|
|
{
|
|
level waittill( "nagging" );
|
|
wait( randomfloatrange( 0.2, 1.0 ) );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
[[ var_2 ]]( self, var_1.origin, var_4 );
|
|
continue;
|
|
}
|
|
|
|
[[ var_2 ]]( self, var_1.origin, var_1.angles );
|
|
}
|
|
}
|
|
}
|
|
|
|
hide_unhide_crashed_convoy( var_0 )
|
|
{
|
|
if ( var_0 )
|
|
{
|
|
var_1 = getent( "crashed_truck", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 hide();
|
|
|
|
var_1 = getent( "crashed_tank", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 delete();
|
|
|
|
var_1 = getent( "crashed_m880", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 delete();
|
|
|
|
common_scripts\utility::flag_wait( "player_on_ladder" );
|
|
}
|
|
|
|
var_1 = getent( "crashed_truck", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
wait 2.0;
|
|
var_1 show();
|
|
}
|
|
}
|
|
|
|
dialogue_streets_to_dam()
|
|
{
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
common_scripts\utility::flag_set( "everyone_in_garage" );
|
|
wait 2.0;
|
|
level.allies[2] maps\_utility::smart_dialogue( "flood_kgn_wereblockedinnow" );
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_bkr_doesntmatterweneed" );
|
|
level thread nag_player_in_garage();
|
|
var_0 = getent( "baker_hold_up", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
level notify( "going_to_start_convoy_section" );
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_bkr_holdup" );
|
|
level thread allies_convoy_dialogue();
|
|
wait 2.0;
|
|
common_scripts\utility::flag_set( "spawn_m880" );
|
|
common_scripts\utility::flag_wait( "m880_has_spawned" );
|
|
|
|
if ( common_scripts\utility::flag( "enemy_alerted" ) )
|
|
maps\_utility::battlechatter_on( "allies" );
|
|
|
|
wait 6;
|
|
maps\_utility::smart_radio_dialogue( "flood_hlx_goinghot" );
|
|
common_scripts\utility::flag_wait( "rpg_fired_at_launcher" );
|
|
|
|
if ( common_scripts\utility::flag( "enemy_surprised" ) )
|
|
{
|
|
wait 3.0;
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_bkr_weaponsfree" );
|
|
}
|
|
|
|
wait 0.5;
|
|
common_scripts\utility::flag_wait_either( "enemy_alerted", "enemy_surprised" );
|
|
maps\_utility::battlechatter_on( "allies" );
|
|
common_scripts\utility::flag_wait_either( "player_out_of_garage", "streets_to_dam_enemies_dead" );
|
|
|
|
if ( common_scripts\utility::flag( "player_out_of_garage" ) )
|
|
{
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
wait 2.0;
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_vrg_eliasstopthemissile" );
|
|
common_scripts\utility::flag_set( "launcher_objective_given" );
|
|
maps\_utility::battlechatter_on( "allies" );
|
|
common_scripts\utility::flag_wait( "streets_to_dam_enemies_dead" );
|
|
wait 2.0;
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_pri_takethatlauncherout" );
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
}
|
|
else
|
|
{
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
wait 4.0;
|
|
|
|
if ( !common_scripts\utility::flag( "player_on_ladder" ) )
|
|
{
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_vrg_eliasstopthemissile" );
|
|
common_scripts\utility::flag_set( "launcher_objective_given" );
|
|
}
|
|
}
|
|
|
|
wait 1;
|
|
|
|
if ( !common_scripts\utility::flag( "player_on_ladder" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "played_radio_part_1" );
|
|
maps\_utility::smart_radio_dialogue( "flood_hqr_beadvisedenemyforces" );
|
|
}
|
|
|
|
if ( !common_scripts\utility::flag( "player_on_ladder" ) && common_scripts\utility::flag( "played_radio_part_1" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "played_radio_part_2" );
|
|
maps\_utility::smart_radio_dialogue( "flood_gs1_rogeroverlordwehave" );
|
|
}
|
|
|
|
wait 3;
|
|
|
|
if ( !common_scripts\utility::flag( "player_on_ladder" ) )
|
|
{
|
|
var_1 = [ "flood_pri_takethatlauncherout", "flood_vrg_theresaladderon" ];
|
|
level.allies[0] thread maps\flood_util::play_nag( var_1, "player_on_ladder", 10, 30, 2, 2, "flag_set" );
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "player_on_ladder" );
|
|
level.allies[0] notify( "flag_set" );
|
|
}
|
|
|
|
nag_player_in_garage()
|
|
{
|
|
level endon( "going_to_start_convoy_section" );
|
|
wait 10;
|
|
|
|
for (;;)
|
|
{
|
|
if ( distance( level.player.origin, level.allies[0].origin ) > 650 )
|
|
{
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_bkr_uphere" );
|
|
break;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
streets_nag_end_on_notify( var_0, var_1, var_2 )
|
|
{
|
|
wait 3.0;
|
|
|
|
if ( !common_scripts\utility::flag( var_1 ) )
|
|
level.allies[0] thread maps\flood_util::play_nag( var_0, var_1, 8, 30, 1, 1.5, "flag_set" );
|
|
}
|
|
|
|
init_turn_off_lean_volumes()
|
|
{
|
|
var_0 = getentarray( "turn_off_lean", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 turn_off_lean();
|
|
}
|
|
|
|
turn_off_lean()
|
|
{
|
|
var_0 = 0;
|
|
|
|
while ( !common_scripts\utility::flag( "end_of_dam" ) )
|
|
{
|
|
if ( level.player istouching( self ) )
|
|
{
|
|
if ( !var_0 )
|
|
{
|
|
level.player allowlean( 0 );
|
|
var_0 = 1;
|
|
}
|
|
}
|
|
else if ( var_0 )
|
|
{
|
|
level.player allowlean( 1 );
|
|
var_0 = 0;
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
streets_to_dam_2_start()
|
|
{
|
|
maps\flood_util::player_move_to_checkpoint_start( "streets_to_dam_2_start" );
|
|
maps\flood_util::spawn_allies();
|
|
level thread aim_missiles_2();
|
|
level thread hide_unhide_crashed_convoy( 0 );
|
|
level thread hide_spire();
|
|
level thread init_turn_off_lean_volumes();
|
|
level thread streets_to_dam_2_side_guys_spawn_logic();
|
|
level thread put_launcher_in_place();
|
|
level thread manage_mantles();
|
|
level thread maps\flood_infil::setup_dead_destroyed_and_misc();
|
|
level thread maps\flood_util::flood_battlechatter_on( 1 );
|
|
setsaveddvar( "sm_sunSampleSizeNear", 0.25 );
|
|
}
|
|
|
|
streets_to_dam_2()
|
|
{
|
|
level thread make_enemies_miss_player_at_first();
|
|
level thread streets_to_dam_wave_2_sequence();
|
|
level thread dialogue_streets_to_dam_2();
|
|
level thread harassers_ignore_player();
|
|
level thread streets_to_dam_heli_flyover_hover();
|
|
level thread teleport_failsafe();
|
|
level thread flood_shake_tree();
|
|
level thread hide_missile_launcher_collision();
|
|
level thread m880_connect_path_nodes( 1 );
|
|
level thread spawn_dam_harrassers();
|
|
level thread fake_mantle_text();
|
|
level notify( "going_to_start_convoy_section" );
|
|
common_scripts\utility::flag_set( "missile_launcher_destruction_done" );
|
|
var_0 = getent( "aim_missiles_2", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
level notify( "end_of_streets_to_dam_2" );
|
|
}
|
|
|
|
put_launcher_in_place()
|
|
{
|
|
var_0 = getent( "missile_launcher_2", "targetname" );
|
|
var_0.origin = ( -1643, -6966, -64 );
|
|
var_0.angles = ( 0, 66.5, 0 );
|
|
var_0 show();
|
|
}
|
|
|
|
make_enemies_miss_player_at_first()
|
|
{
|
|
var_0 = level.player.gs.player_attacker_accuracy;
|
|
level.player maps\_utility::set_player_attacker_accuracy( 0.0 );
|
|
var_1 = getent( "streets_to_dam_first_retreat", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 common_scripts\utility::waittill_notify_or_timeout( "trigger", 4.0 );
|
|
|
|
level.player maps\_utility::set_player_attacker_accuracy( 0.1 );
|
|
var_1 = getent( "streets_to_dam_wave_2_first_advance", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 common_scripts\utility::waittill_notify_or_timeout( "trigger", 6.0 );
|
|
|
|
level.player maps\_utility::set_player_attacker_accuracy( var_0 );
|
|
}
|
|
|
|
streets_to_dam_2_side_guys_spawn_logic()
|
|
{
|
|
level.side_guys = [];
|
|
var_0 = getentarray( "streets_to_dam_wave_2_side", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::add_spawn_function, ::streets_to_dam_wave_2_side_spawn_func );
|
|
common_scripts\utility::array_thread( var_0, maps\_utility::spawn_ai );
|
|
}
|
|
|
|
streets_to_dam_wave_2_sequence()
|
|
{
|
|
var_0 = [ "streets_to_dam_wave_2_1_trigger", "streets_to_dam_wave_2_first_advance", "streets_to_dam_wave_2_5_spawn", "streets_to_dam_wave_2_2_trigger", "streets_to_dam_wave_2_second_advance", "streets_to_dam_final_advance", "streets_to_dam_3_5_advance", "streets_to_dam_enemy_retreat" ];
|
|
level thread throw_grenade_if_player_behind_tank();
|
|
level thread adjust_suppression_on_enemies();
|
|
var_1 = getent( "crashed_tank", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 hide();
|
|
|
|
var_2 = getent( "streets_to_dam_wave_2_start", "targetname" );
|
|
var_2 notify( "trigger" );
|
|
var_3 = getentarray( "streets_to_dam_wave_2_first", "targetname" );
|
|
common_scripts\utility::array_thread( var_3, maps\_utility::add_spawn_function, ::streets_to_dam_wave_2_first_spawn_func );
|
|
common_scripts\utility::array_thread( var_3, maps\_utility::spawn_ai );
|
|
|
|
foreach ( var_5 in level.side_guys )
|
|
var_5 notify( "stop_ignoring_player" );
|
|
|
|
common_scripts\utility::flag_wait( "missile_launcher_destruction_done" );
|
|
var_3 = getentarray( "streets_to_dam_wave_2", "targetname" );
|
|
common_scripts\utility::array_thread( var_3, maps\_utility::add_spawn_function, ::streets_to_dam_wave_2_spawn_func );
|
|
common_scripts\utility::array_thread( var_3, maps\_utility::spawn_ai );
|
|
wait 0.1;
|
|
var_7 = getentarray( "streets_to_dam_wave_2_1", "targetname" );
|
|
common_scripts\utility::array_thread( var_7, maps\_utility::add_spawn_function, ::streets_to_dam_wave_2_1_spawn_func );
|
|
wait 0.1;
|
|
common_scripts\utility::array_thread( var_7, maps\_utility::spawn_ai );
|
|
maps\flood_util::waittill_aigroupcount_or_trigger_targetname( "streets_to_dam_wave_2", 9, "streets_to_dam_wave_2_first_advance" );
|
|
trigger_named_and_turn_off_prior( var_0, "streets_to_dam_wave_2_first_advance" );
|
|
wait 0.1;
|
|
maps\flood_util::waittill_aigroupcount_or_trigger_targetname( "streets_to_dam_wave_2", 7, "streets_to_dam_wave_2_2_trigger" );
|
|
trigger_named_and_turn_off_prior( var_0, "streets_to_dam_wave_2_2_trigger" );
|
|
var_7 = getentarray( "streets_to_dam_wave_2_5", "targetname" );
|
|
common_scripts\utility::array_thread( var_7, maps\_utility::add_spawn_function, ::streets_to_dam_wave_2_5_spawn_func );
|
|
common_scripts\utility::array_thread( var_7, maps\_utility::spawn_ai );
|
|
wait 0.1;
|
|
level thread send_allies_to_nodes_and_play_anim();
|
|
maps\flood_util::waittill_aigroupcount_or_trigger_targetname( "streets_to_dam_wave_2", 1, "streets_to_dam_3_5_advance" );
|
|
streets_to_dam_2_staggered_retreat();
|
|
maps\flood_util::waittill_aigroupcount_or_trigger_targetname( "streets_to_dam_wave_2", 1, "streets_to_dam_final_advance" );
|
|
var_2 = getent( "streets_to_dam_final_advance", "targetname" );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
var_2 notify( "trigger" );
|
|
wait 0.1;
|
|
}
|
|
|
|
maps\flood_util::waittill_aigroupcount_or_trigger_targetname( "streets_to_dam_wave_2", 1, "streets_to_dam_enemy_retreat" );
|
|
trigger_named_and_turn_off_prior( var_0, "streets_to_dam_enemy_retreat" );
|
|
var_8 = getent( "final_advance_kill_volume", "targetname" );
|
|
kill_deathflag_in_area( "streets_to_dam_wave_2", var_8, 0 );
|
|
var_9 = getent( "dam_far_goal_volume", "targetname" );
|
|
var_3 = maps\_utility::get_ai_group_ai( "streets_to_dam_wave_2" );
|
|
|
|
if ( var_3.size > 4 )
|
|
{
|
|
foreach ( var_5 in var_3 )
|
|
var_5.favoriteenemy = level.player;
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( isdefined( var_5 ) && isalive( var_5 ) )
|
|
{
|
|
var_5 setgoalvolumeauto( var_9 );
|
|
wait( randomfloatrange( 0.1, 0.5 ) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
throw_grenade_if_player_behind_tank()
|
|
{
|
|
var_0 = getent( "streets_to_dam_grenade_check", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
wait 2.0;
|
|
|
|
if ( level.player istouching( var_0 ) )
|
|
{
|
|
var_1 = getaiarray( "axis" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 thread maps\_utility::throwgrenadeatplayerasap();
|
|
}
|
|
}
|
|
|
|
adjust_suppression_on_enemies()
|
|
{
|
|
for (;;)
|
|
{
|
|
var_0 = getent( "streets_to_dam_3_5_advance", "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
var_1 = getaiarray( "axis" );
|
|
|
|
if ( var_1.size > 5 )
|
|
{
|
|
var_1 = common_scripts\utility::get_array_of_farthest( level.player.origin, var_1 );
|
|
var_2 = var_1.size - 5;
|
|
|
|
for ( var_3 = 0; var_3 < var_1.size; var_3++ )
|
|
{
|
|
if ( var_3 < var_2 )
|
|
{
|
|
var_1[var_3].suppressionwait = 5;
|
|
continue;
|
|
}
|
|
|
|
var_1[var_3].suppressionwait = 1;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
break;
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
streets_to_dam_2_staggered_retreat()
|
|
{
|
|
var_0 = maps\_utility::get_ai_group_ai( "streets_to_dam_wave_2" );
|
|
var_0 = common_scripts\utility::get_array_of_farthest( level.player.origin, var_0 );
|
|
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
{
|
|
if ( var_1 < 3 || var_0.size > 5 )
|
|
{
|
|
if ( var_0.size > 5 )
|
|
var_0[var_1].favoriteenemy = level.player;
|
|
|
|
var_2 = getent( "streets_to_dam_goal_volume_3_5", "targetname" );
|
|
}
|
|
else
|
|
{
|
|
var_0[var_1] ignore_everything();
|
|
var_2 = getent( "dam_far_goal_volume", "targetname" );
|
|
}
|
|
|
|
var_0[var_1] setgoalvolumeauto( var_2 );
|
|
}
|
|
}
|
|
|
|
streets_to_dam_wave_2_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
self.favoriteenemy = level.player;
|
|
var_0 = getent( "streets_to_dam_goal_volume_2", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
var_1 = getent( "streets_to_dam_wave_2_2_trigger", "targetname" );
|
|
var_1 waittill( "trigger" );
|
|
var_0 = getent( "streets_to_dam_goal_volume_3", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
var_1 = getent( "streets_to_dam_wave_2_second_advance", "targetname" );
|
|
var_1 waittill( "trigger" );
|
|
var_0 = getent( "streets_to_dam_goal_volume_3_mid", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
}
|
|
|
|
streets_to_dam_wave_2_1_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
var_0 = getent( "streets_to_dam_goal_volume_2_5", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
var_1 = getent( "streets_to_dam_wave_2_second_advance", "targetname" );
|
|
var_1 waittill( "trigger" );
|
|
var_0 = getent( "streets_to_dam_goal_volume_3_mid", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
}
|
|
|
|
streets_to_dam_wave_2_5_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
var_0 = getent( "streets_to_dam_goal_volume_3", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
var_1 = getent( "streets_to_dam_wave_2_second_advance", "targetname" );
|
|
var_1 waittill( "trigger" );
|
|
var_0 = getent( "streets_to_dam_goal_volume_3_mid", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
}
|
|
|
|
streets_to_dam_wave_2_first_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
var_0 = getent( "streets_to_dam_goal_volume_2_first", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
|
|
if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "exposed_guy" )
|
|
thread exposed_guy_think();
|
|
else
|
|
{
|
|
self.favoriteenemy = level.player;
|
|
common_scripts\utility::flag_wait( "missile_launcher_destruction_done" );
|
|
self.favoriteenemy = level.player;
|
|
var_1 = getent( "streets_to_dam_wave_2_1_trigger", "targetname" );
|
|
var_1 waittill( "trigger" );
|
|
var_1 = getent( "streets_to_dam_wave_2_first_advance", "targetname" );
|
|
common_scripts\utility::waittill_notify_or_timeout_return( "trigger", randomfloatrange( 5.0, 7.0 ) );
|
|
wait( randomfloat( 2.0 ) );
|
|
var_0 = getent( "streets_to_dam_goal_volume_2_5", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
}
|
|
|
|
var_1 = getent( "streets_to_dam_wave_2_second_advance", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 waittill( "trigger" );
|
|
|
|
var_0 = getent( "streets_to_dam_goal_volume_3_mid", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
}
|
|
|
|
streets_to_dam_wave_2_side_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
level.side_guys[level.side_guys.size] = self;
|
|
ignore_everything( 0.0 );
|
|
self waittill( "stop_ignoring_player" );
|
|
clear_ignore_everything();
|
|
var_0 = getent( "streets_to_dam_2_side_goal_volume", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
var_1 = getent( "streets_to_dam_wave_2_first_advance", "targetname" );
|
|
var_1 waittill( "trigger" );
|
|
var_0 = getent( "streets_to_dam_2_side_2_goal_volume", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
var_1 = getent( "streets_to_dam_wave_2_5_spawn", "targetname" );
|
|
var_1 waittill( "trigger" );
|
|
var_2 = getent( "force_retreat_volume", "targetname" );
|
|
|
|
if ( self istouching( var_2 ) )
|
|
{
|
|
thread ignore_everything( 3.0 );
|
|
var_3 = getnode( "force_retreat_goal_node", "targetname" );
|
|
self setgoalnode( var_3 );
|
|
}
|
|
|
|
var_1 = getent( "streets_to_dam_wave_2_2_trigger", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 waittill( "trigger" );
|
|
|
|
var_0 = getent( "streets_to_dam_goal_volume_3", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
var_1 = getent( "streets_to_dam_wave_2_second_advance", "targetname" );
|
|
var_1 waittill( "trigger" );
|
|
var_0 = getent( "streets_to_dam_goal_volume_3_mid", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
}
|
|
|
|
spawn_dam_harrassers()
|
|
{
|
|
var_0 = getent( "streets_to_dam_final_advance", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
var_1 = getentarray( "dam_missile_harassers", "targetname" );
|
|
common_scripts\utility::array_thread( var_1, maps\_utility::add_spawn_function, ::streets_to_dam_2_harrassers_spawn_func );
|
|
common_scripts\utility::array_thread( var_1, maps\_utility::spawn_ai );
|
|
var_1 = getentarray( "dam_missile_harassers_close", "targetname" );
|
|
common_scripts\utility::array_thread( var_1, maps\_utility::add_spawn_function, ::streets_to_dam_2_harrassers_close_spawn_func );
|
|
common_scripts\utility::array_thread( var_1, maps\_utility::spawn_ai );
|
|
}
|
|
|
|
spawn_dam_harrassers_fake()
|
|
{
|
|
var_0 = getent( "streets_to_dam_final_advance", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
var_1 = getentarray( "dam_missile_harassers_fake", "targetname" );
|
|
common_scripts\utility::array_thread( var_1, maps\_utility::add_spawn_function, ::streets_to_dam_2_harrassers_spawn_func );
|
|
common_scripts\utility::array_thread( var_1, maps\_utility::spawn_ai );
|
|
var_1 = getentarray( "dam_missile_harassers_close_fake", "targetname" );
|
|
common_scripts\utility::array_thread( var_1, maps\_utility::add_spawn_function, ::streets_to_dam_2_harrassers_close_spawn_func );
|
|
common_scripts\utility::array_thread( var_1, maps\_utility::spawn_ai );
|
|
}
|
|
|
|
streets_to_dam_2_harrassers_spawn_func()
|
|
{
|
|
var_0 = getent( "dam_far_goal_volume", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
self.ignoresuppression = 1;
|
|
wait 0.5;
|
|
self.ignoreall = 0;
|
|
}
|
|
|
|
streets_to_dam_2_harrassers_close_spawn_func()
|
|
{
|
|
var_0 = getent( "dam_far_goal_volume_close", "targetname" );
|
|
self setgoalvolumeauto( var_0 );
|
|
self.ignoresuppression = 1;
|
|
wait 0.5;
|
|
self.ignoreall = 0;
|
|
}
|
|
|
|
exposed_guy_think()
|
|
{
|
|
self endon( "death" );
|
|
ignore_everything( 0.0 );
|
|
var_0 = getnode( "exposed_guy_node_first", "targetname" );
|
|
self setgoalnode( var_0 );
|
|
var_1 = self.goalradius;
|
|
self.goalradius = 16;
|
|
self waittill( "goal" );
|
|
self.goalradius = var_1;
|
|
var_2 = getent( "streets_to_dam_wave_2_1_trigger", "targetname" );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_2 common_scripts\utility::waittill_notify_or_timeout( "trigger", 20.0 );
|
|
|
|
var_3 = getent( "exposed_node_first", "targetname" );
|
|
self setgoalvolumeauto( var_3 );
|
|
var_0 = getnode( "node_exposed", "targetname" );
|
|
self setgoalnode( var_0 );
|
|
var_1 = self.goalradius;
|
|
self.goalradius = 16;
|
|
self waittill( "goal" );
|
|
clear_ignore_everything();
|
|
self.goalradius = var_1;
|
|
var_2 = getent( "streets_to_dam_wave_2_5_spawn", "targetname" );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_2 waittill( "trigger" );
|
|
|
|
var_4 = getent( "streets_to_dam_goal_volume_2_5", "targetname" );
|
|
self setgoalvolumeauto( var_4 );
|
|
}
|
|
|
|
send_allies_to_nodes_and_play_anim()
|
|
{
|
|
var_0 = getent( "streets_to_dam_enemy_retreat", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
var_1 = getnode( "streets_to_dam_2_ally_0_node", "targetname" );
|
|
level.allies[0] setgoalnode( var_1 );
|
|
var_1 = getnode( "streets_to_dam_2_ally_2_node", "targetname" );
|
|
level.allies[1] setgoalnode( var_1 );
|
|
var_1 = getnode( "streets_to_dam_2_ally_1_node", "targetname" );
|
|
level.allies[2] setgoalnode( var_1 );
|
|
common_scripts\utility::flag_wait( "looked_at_missiles_failsafe" );
|
|
level.allies[0] notify( "player_now_on_ladder" );
|
|
level.allies[2] notify( "player_now_on_ladder" );
|
|
}
|
|
|
|
kill_deathflag_in_area( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( level.flag[var_0] ) )
|
|
return;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
return;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
foreach ( var_4 in level.deathflags[var_0] )
|
|
{
|
|
foreach ( var_6 in var_4 )
|
|
{
|
|
if ( isalive( var_6 ) )
|
|
{
|
|
if ( var_6 istouching( var_1 ) )
|
|
var_6 thread maps\_utility_code::kill_deathflag_proc( var_2 );
|
|
|
|
continue;
|
|
}
|
|
|
|
var_6 delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
delete_corpse_in_volume( var_0 )
|
|
{
|
|
if ( self istouching( var_0 ) )
|
|
self delete();
|
|
}
|
|
|
|
fake_mantle_text()
|
|
{
|
|
var_0 = getent( "fake_mantle_trigger", "targetname" );
|
|
var_1 = getent( var_0.target, "targetname" );
|
|
var_2 = 1;
|
|
|
|
while ( !common_scripts\utility::flag( "end_of_dam" ) )
|
|
{
|
|
var_3 = level.player getvelocity();
|
|
|
|
if ( level.player istouching( var_0 ) )
|
|
{
|
|
if ( !var_2 )
|
|
{
|
|
var_2 = 1;
|
|
var_1 movez( 1000, 0.1 );
|
|
wait 0.1;
|
|
}
|
|
}
|
|
else if ( var_2 )
|
|
{
|
|
var_2 = 0;
|
|
var_1 movez( -1000, 0.1 );
|
|
wait 0.1;
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
dialogue_streets_to_dam_2()
|
|
{
|
|
wait 3;
|
|
var_0 = 3;
|
|
|
|
if ( common_scripts\utility::flag( "played_radio_part_1" ) && !common_scripts\utility::flag( "played_radio_part_2" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "played_radio_part_2" );
|
|
maps\_utility::smart_radio_dialogue( "flood_gs1_rogeroverlordwehave" );
|
|
var_0--;
|
|
var_0--;
|
|
}
|
|
|
|
wait( var_0 );
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_bkr_launcherdown" );
|
|
level.allies[1] maps\_utility::smart_dialogue( "flood_diz_stillonemore" );
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_bkr_blowthatonetoo" );
|
|
common_scripts\utility::flag_set( "launcher_2_objective_given" );
|
|
maps\_utility::battlechatter_on( "allies" );
|
|
var_1 = getent( "streets_to_dam_final_advance", "targetname" );
|
|
wait 3.0;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
wait 1.0;
|
|
}
|
|
|
|
wait 3.0;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
level.allies[1] maps\_utility::smart_dialogue( "flood_vrg_wevegotabouta" );
|
|
wait 1.0;
|
|
}
|
|
|
|
if ( isdefined( var_1 ) )
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_pri_wecantletthat" );
|
|
|
|
if ( isdefined( var_1 ) && !common_scripts\utility::flag( "played_radio_part_1" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "played_radio_part_1" );
|
|
maps\_utility::smart_radio_dialogue( "flood_hqr_beadvisedenemyforces" );
|
|
}
|
|
|
|
if ( isdefined( var_1 ) && !common_scripts\utility::flag( "played_radio_part_2" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "played_radio_part_2" );
|
|
maps\_utility::smart_radio_dialogue( "flood_gs1_rogeroverlordwehave" );
|
|
}
|
|
|
|
maps\_utility::battlechatter_on( "allies" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 waittill( "trigger" );
|
|
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
level.allies[0] thread maps\_utility::smart_dialogue( "flood_bkr_getaway" );
|
|
maps\_utility::battlechatter_on( "allies" );
|
|
}
|
|
|
|
streets_to_dam_heli_flyover()
|
|
{
|
|
var_0 = getent( "trig_dam_heli_flyover", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
var_1 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "streets_dam_flyover_1_blackhawk" );
|
|
var_1.path_gobbler = 1;
|
|
var_1.script_vehicle_selfremove = 1;
|
|
var_1 vehicle_setspeed( 60 );
|
|
var_1 maps\_vehicle::gopath();
|
|
var_1 vehicle_turnengineoff();
|
|
var_2 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "streets_dam_flyover_2_blackhawk" );
|
|
var_2.path_gobbler = 1;
|
|
var_2.script_vehicle_selfremove = 1;
|
|
var_2 vehicle_setspeed( 60 );
|
|
var_2 maps\_vehicle::gopath();
|
|
var_2 vehicle_turnengineoff();
|
|
}
|
|
|
|
streets_to_dam_heli_flyover_hover()
|
|
{
|
|
var_0 = getent( "trig_dam_heli_flyover_hover", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
var_1 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "streets_dam_flyover_3_blackhawk" );
|
|
var_1.path_gobbler = 1;
|
|
var_1 vehicle_setspeed( 75 );
|
|
var_1 thread maps\flood_audio::sfx_heli_dam_passby();
|
|
var_1 maps\_vehicle::gopath();
|
|
var_1 vehicle_turnengineoff();
|
|
var_1 waittill( "reached_dynamic_path_end" );
|
|
var_1 delete();
|
|
}
|
|
|
|
dam_heli_flyover_hover()
|
|
{
|
|
|
|
}
|
|
|
|
streets_to_dam_heli_far_flyby()
|
|
{
|
|
var_0 = getent( "trig_dam_heli_far_flyby", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
var_1 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "streets_dam_far_flyby_1_blackhawk" );
|
|
var_1.path_gobbler = 1;
|
|
var_1.script_vehicle_selfremove = 1;
|
|
var_1 vehicle_setspeed( 100 );
|
|
var_1 maps\_vehicle::gopath();
|
|
var_1 vehicle_turnengineoff();
|
|
var_2 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "streets_dam_far_flyby_2_blackhawk" );
|
|
iprintlnbold( "these guys 01???" );
|
|
var_2.path_gobbler = 1;
|
|
var_2.script_vehicle_selfremove = 1;
|
|
var_2 vehicle_setspeed( 100 );
|
|
var_2 maps\_vehicle::gopath();
|
|
var_2 vehicle_turnengineoff();
|
|
var_3 = common_scripts\utility::getstruct( "streets_dam_far_flyby_1", "targetname" );
|
|
|
|
while ( distancesquared( var_3.origin, var_1.origin ) > 100 )
|
|
wait 0.05;
|
|
|
|
var_1 delete();
|
|
var_2 delete();
|
|
}
|
|
|
|
remove_streets_ents()
|
|
{
|
|
delete_ent_by_targetname( "streets_start" );
|
|
delete_ent_by_targetname( "streets_ally_0" );
|
|
delete_ent_by_targetname( "streets_ally_2" );
|
|
delete_ent_by_targetname( "streets_ally_1" );
|
|
delete_ent_by_targetname( "enemy_tank_2_garage_target" );
|
|
delete_ent_by_targetname( "enemy_tank_3_post_garage_target" );
|
|
delete_ent_by_targetname( "bullet_target_4" );
|
|
delete_ent_by_targetname( "humvee_missile_start" );
|
|
delete_ent_by_targetname( "streets_to_dam_start" );
|
|
delete_ent_by_targetname( "streets_to_dam_ally_0" );
|
|
delete_ent_by_targetname( "streets_to_dam_ally_1" );
|
|
delete_ent_by_targetname( "streets_to_dam_bullet_origin" );
|
|
delete_ent_by_targetname( "missile_smoke_origin_3" );
|
|
delete_ent_by_targetname( "bullet_origin_2" );
|
|
delete_ent_by_targetname( "allied_tank_infil_destroyed" );
|
|
delete_ent_by_targetname( "enemy_tank_infil_destroyed" );
|
|
delete_ent_by_targetname( "streets_destroyed_tank_01" );
|
|
delete_ent_by_targetname( "streets_destroyed_tank_02" );
|
|
delete_ent_by_targetname( "enemy_tank" );
|
|
delete_ent_by_targetname( "allied_tank" );
|
|
delete_ent_by_targetname( "allied_tank_2" );
|
|
delete_ent_by_targetname( "streets_enemy_tank_soldiers" );
|
|
delete_ent_by_targetname( "enemy_convoy_vehicles_infil" );
|
|
delete_ent_by_targetname( "enemy_tank_3" );
|
|
delete_ent_by_targetname( "enemy_tank_2" );
|
|
delete_ent_by_targetname( "streets_wave_2" );
|
|
delete_ent_by_targetname( "enemy_tank_2_mock_1" );
|
|
delete_ent_by_targetname( "allied_tank_2_mock" );
|
|
delete_ent_by_targetname( "allied_tank_mock" );
|
|
delete_ent_by_targetname( "street_start_allies" );
|
|
delete_ent_by_targetname( "allied_tank_2_fake" );
|
|
delete_ent_by_script_noteworthy( "planter" );
|
|
delete_ent_by_script_noteworthy( "planter_07" );
|
|
delete_ent_by_script_noteworthy( "planter_06" );
|
|
delete_ent_by_script_noteworthy( "planter_08" );
|
|
delete_ent_by_script_noteworthy( "planter_02" );
|
|
}
|
|
|
|
remove_streets_to_dam_ents()
|
|
{
|
|
thread maps\flood_anim::m880_cleanup();
|
|
var_0 = getweaponarray();
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 delete();
|
|
|
|
delete_ent_by_targetname( "enemy_convoy_vehicles_launcher" );
|
|
delete_ent_by_targetname( "enemy_convoy_vehicles_tank" );
|
|
delete_ent_by_targetname( "enemy_convoy_vehicles" );
|
|
delete_ent_by_targetname( "enemy_convoy_vehicles_broken" );
|
|
delete_ent_by_targetname( "missile_launcher_2" );
|
|
delete_ent_by_targetname( "crashed_m880" );
|
|
delete_ent_by_targetname( "streets_to_dam_tank_shoot_at_player" );
|
|
delete_ent_by_targetname( "streets_to_dam_tank_kill_player" );
|
|
delete_ent_by_targetname( "streets_to_dam_convoy" );
|
|
delete_ent_by_targetname( "streets_to_dam_wave_1_vignette_extra" );
|
|
delete_ent_by_targetname( "streets_to_dam_wave_1_street_patrol" );
|
|
delete_ent_by_targetname( "streets_to_dam_wave_1_vignette" );
|
|
delete_ent_by_targetname( "streets_to_dam_wave_1" );
|
|
delete_ent_by_targetname( "streets_to_dam_wave_1_rpg" );
|
|
delete_ent_by_targetname( "streets_to_dam_heli_target_2" );
|
|
delete_ent_by_targetname( "streets_to_dam_heli_target_1" );
|
|
delete_ent_by_targetname( "streets_to_dam_extra_waver_node" );
|
|
delete_ent_by_targetname( "streets_to_dam_heli_target_3" );
|
|
delete_ent_by_targetname( "streets_to_dam_heli_target_4" );
|
|
delete_ent_by_targetname( "streets_to_dam_rpg_target_1" );
|
|
delete_ent_by_targetname( "m880_kill_teleport" );
|
|
delete_ent_by_targetname( "post_missile_launcher_location_ally3" );
|
|
delete_ent_by_targetname( "post_missile_launcher_location_ally2" );
|
|
delete_ent_by_targetname( "streets_to_dam_2_ally_1" );
|
|
delete_ent_by_targetname( "post_missile_launcher_location" );
|
|
delete_ent_by_targetname( "streets_to_dam_2_ally_0" );
|
|
delete_ent_by_targetname( "streets_to_dam_rpg_target_2" );
|
|
delete_ent_by_targetname( "clip_after_m880_crash" );
|
|
delete_ent_by_script_noteworthy( "planter" );
|
|
delete_ent_by_script_noteworthy( "streets_helicopter_crash_location" );
|
|
}
|
|
|
|
delete_ent_by_targetname( var_0 )
|
|
{
|
|
var_1 = getentarray( var_0, "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
if ( !isarray( var_1 ) )
|
|
var_1 = maps\_utility::make_array( var_1 );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
var_3 delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
delete_ent_by_script_noteworthy( var_0 )
|
|
{
|
|
var_1 = getentarray( var_0, "script_noteworthy" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
if ( !isarray( var_1 ) )
|
|
var_1 = maps\_utility::make_array( var_1 );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
var_3 delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
flood_shake_tree()
|
|
{
|
|
var_0 = [];
|
|
var_0[0] = "flood_shake_tree_left_1";
|
|
var_0[1] = "flood_shake_tree_left_2";
|
|
var_0[2] = "flood_shake_tree_left_3";
|
|
var_0[3] = "flood_shake_tree_left_4";
|
|
var_0[4] = "flood_shake_tree_left_5";
|
|
var_0[5] = "flood_shake_tree_right_1";
|
|
var_0[6] = "flood_shake_tree_right_2";
|
|
var_0[7] = "flood_shake_tree_right_3";
|
|
var_0[8] = "flood_shake_tree_right_4";
|
|
var_0[9] = "flood_shake_tree_right_5";
|
|
var_0[10] = "flood_shake_tree_right_6";
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_3 = getent( var_2, "script_noteworthy" );
|
|
var_3 thread flood_shake_tree_internal();
|
|
}
|
|
}
|
|
|
|
flood_shake_tree_internal()
|
|
{
|
|
level waittill( self.script_noteworthy );
|
|
|
|
if ( randomfloat( 1.0 ) < 0.3333 )
|
|
playfxontag( level._effect["birds_flood_street_birds_01"], self, "J_Tip2_Tall2" );
|
|
else if ( self.script_noteworthy == "flood_shake_tree_right_4" || self.script_noteworthy == "flood_shake_tree_left_4" || self.script_noteworthy == "flood_shake_tree_right_5" || self.script_noteworthy == "flood_shake_tree_right_6" )
|
|
playfxontag( level._effect["birds_flood_street_birds_01"], self, "J_Tip2_Tall2" );
|
|
|
|
var_0 = 1;
|
|
var_1 = 1 + randomfloat( 0.4 );
|
|
self setanimknobrestart( level.anim_prop_models[self.model]["flood"], var_0, 0.02, var_1 );
|
|
}
|
|
|
|
dam_start()
|
|
{
|
|
maps\flood_util::player_move_to_checkpoint_start( "dam_start" );
|
|
maps\flood_util::spawn_allies();
|
|
level thread spawn_dam_harrassers_fake();
|
|
level thread harassers_ignore_player();
|
|
level thread aim_missiles_2();
|
|
level thread dam_heli_flyover_hover();
|
|
level thread trigger_missile_launcher_aim_flag();
|
|
level thread hide_spire();
|
|
level thread send_allies_to_nodes_and_play_anim();
|
|
level thread flood_shake_tree();
|
|
level thread fake_mantle_text();
|
|
level thread maps\flood_util::flood_battlechatter_on( 1 );
|
|
setsaveddvar( "sm_sunSampleSizeNear", 0.25 );
|
|
wait 0.5;
|
|
var_0 = getent( "streets_to_dam_final_advance", "targetname" );
|
|
var_0 notify( "trigger" );
|
|
}
|
|
|
|
dam()
|
|
{
|
|
common_scripts\utility::flag_wait( "missiles_ready" );
|
|
thread maps\_utility::autosave_by_name( "before_dam_break" );
|
|
level thread fire_missiles();
|
|
level thread dialogue_dam();
|
|
common_scripts\utility::flag_wait( "start_flood" );
|
|
level.dam_break_weapon = level.player getcurrentweapon();
|
|
level thread remove_allies();
|
|
level thread ignore_player( 0 );
|
|
common_scripts\utility::flag_wait( "looked_at_missiles_failsafe" );
|
|
level maps\_utility::delaythread( 1, ::remove_streets_to_dam_ents );
|
|
common_scripts\utility::flag_wait( "vignette_dam_break_end_flag" );
|
|
common_scripts\utility::flag_set( "end_of_dam" );
|
|
}
|
|
|
|
trigger_missile_launcher_aim_flag()
|
|
{
|
|
common_scripts\utility::flag_set( "vignette_dam_break_m880_launch_prep" );
|
|
}
|
|
|
|
harassers_ignore_player()
|
|
{
|
|
var_0 = getent( "streets_to_dam_final_advance", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
var_1 = 1;
|
|
|
|
while ( var_1 )
|
|
{
|
|
var_2 = getent( "streets_to_dam_goal_volume_3", "targetname" );
|
|
var_3 = var_2 maps\_utility::get_ai_touching_volume( "axis" );
|
|
var_4 = var_3.size;
|
|
var_2 = getent( "dam_remove_dead_bodies", "targetname" );
|
|
var_3 = var_2 maps\_utility::get_ai_touching_volume( "axis" );
|
|
var_4 = var_4 + var_3.size;
|
|
|
|
if ( var_4 > 0 )
|
|
{
|
|
wait 0.1;
|
|
continue;
|
|
}
|
|
|
|
var_1 = 0;
|
|
}
|
|
|
|
level thread ignore_player( 1 );
|
|
}
|
|
|
|
ignore_player( var_0 )
|
|
{
|
|
level.player.ignoreme = var_0;
|
|
}
|
|
|
|
aim_missiles_2()
|
|
{
|
|
common_scripts\utility::flag_wait( "vignette_dam_break_m880_launch_prep" );
|
|
wait 1.0;
|
|
thread maps\flood_audio::sfx_missile_buzzer( level.dam_break_m880, "sfx_missiles_launched" );
|
|
common_scripts\utility::exploder( "m880_redlight" );
|
|
wait 1.5;
|
|
thread maps\flood_audio::sfx_rocket_aiming_sound();
|
|
common_scripts\utility::flag_set( "missiles_ready" );
|
|
level thread c4_spot_glow();
|
|
}
|
|
|
|
spawn_ml_drivers()
|
|
{
|
|
var_0 = getentarray( "dam_missile_drivers", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 maps\_utility::add_spawn_function( ::ml_driver_spawn_func );
|
|
|
|
maps\_utility::array_spawn( var_0 );
|
|
}
|
|
|
|
ml_driver_spawn_func()
|
|
{
|
|
ignore_everything();
|
|
var_0 = getent( "missile_launcher_driver_kill_trigger", "targetname" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "trigger", var_1 );
|
|
|
|
if ( isdefined( var_1 ) && self == var_1 )
|
|
break;
|
|
}
|
|
|
|
clear_ignore_everything();
|
|
var_2 = getent( "dam_far_goal_volume", "targetname" );
|
|
set_goal_volume( var_2 );
|
|
}
|
|
|
|
fire_missiles()
|
|
{
|
|
level thread missile_launch_failsafe();
|
|
common_scripts\utility::flag_wait_any( "looked_at_missiles", "looked_at_missiles_failsafe" );
|
|
level thread remove_live_grenades();
|
|
level thread remove_stuff_for_animation();
|
|
level thread remove_dyn_objects();
|
|
var_0 = getent( "dam_remove_dead_bodies", "targetname" );
|
|
common_scripts\utility::array_thread( getcorpsearray(), ::delete_corpse_in_volume, var_0 );
|
|
wait 0.1;
|
|
level thread kill_enemies();
|
|
wait 1.0;
|
|
level thread retreat_dam_harassers();
|
|
wait 3.0;
|
|
wait 1.0;
|
|
common_scripts\utility::flag_set( "start_flood" );
|
|
}
|
|
|
|
fade_to_black( var_0, var_1, var_2 )
|
|
{
|
|
level.black_overlay = maps\_hud_util::create_client_overlay( "black", 0, level.player );
|
|
level.black_overlay fadeovertime( var_0 );
|
|
level.black_overlay.alpha = 1;
|
|
wait( var_0 );
|
|
common_scripts\utility::flag_set( "level_faded_to_black" );
|
|
wait( var_1 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
level.black_overlay fadeovertime( var_2 );
|
|
level.black_overlay.alpha = 0;
|
|
}
|
|
}
|
|
|
|
c4_spot_glow()
|
|
{
|
|
var_0 = level.dam_break_m880;
|
|
var_1 = "vehicle_m880_launcher_obj";
|
|
var_2 = spawn( "script_model", var_0.origin );
|
|
var_2 setmodel( "vehicle_m880_launcher_obj" );
|
|
var_2.angles = var_0.angles;
|
|
common_scripts\utility::flag_wait( "looked_at_missiles_failsafe" );
|
|
wait 0.5;
|
|
var_2 delete();
|
|
}
|
|
|
|
manage_mantles()
|
|
{
|
|
var_0 = getentarray( "mantle_trigger", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread show_hide_mantle();
|
|
}
|
|
|
|
show_hide_mantle()
|
|
{
|
|
var_0 = getent( self.target, "targetname" );
|
|
var_1 = 0;
|
|
var_0 movez( -1000, 0.1 );
|
|
|
|
while ( !common_scripts\utility::flag( "end_of_dam" ) )
|
|
{
|
|
if ( level.player istouching( self ) )
|
|
{
|
|
if ( !var_1 )
|
|
{
|
|
var_1 = 1;
|
|
var_0 movez( 1000, 0.1 );
|
|
}
|
|
}
|
|
else if ( var_1 )
|
|
{
|
|
var_1 = 0;
|
|
var_0 movez( -1000, 0.1 );
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
kill_enemies()
|
|
{
|
|
wait 0.5;
|
|
var_0 = getaiarray( "axis" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( isdefined( var_2 ) && isalive( var_2 ) )
|
|
{
|
|
var_2.no_pain_sound = 1;
|
|
var_2.diequietly = 1;
|
|
var_2 kill();
|
|
wait( randomfloatrange( 0.05, 0.25 ) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
retreat_dam_harassers()
|
|
{
|
|
var_0 = maps\_utility::get_ai_group_ai( "dam_missile_harassers" );
|
|
var_0 set_group_goalvolume( "dam_harrassers_retreat_goal_volume" );
|
|
}
|
|
|
|
push_player_around( var_0 )
|
|
{
|
|
level.player pushplayervector( ( 0, var_0, 0 ) );
|
|
wait 0.1;
|
|
level.player pushplayervector( ( 0, var_0 / 2, 0 ) );
|
|
wait 0.1;
|
|
level.player pushplayervector( ( 0, var_0 / 4, 0 ) );
|
|
wait 0.2;
|
|
level.player pushplayervector( ( 0, 0, 0 ) );
|
|
}
|
|
|
|
temp_missile_impacts()
|
|
{
|
|
var_0 = getentarray( "missile_impact_origin", "targetname" );
|
|
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
{
|
|
if ( isdefined( var_0[var_1] ) )
|
|
playfx( level._effect["temp_missile_impact"], var_0[var_1].origin );
|
|
|
|
var_2 = randomfloatrange( 0.25, 1.0 );
|
|
wait( var_2 );
|
|
}
|
|
}
|
|
|
|
missile_launch_failsafe()
|
|
{
|
|
common_scripts\utility::flag_wait( "vignette_dam_break" );
|
|
common_scripts\utility::flag_set( "looked_at_missiles_failsafe" );
|
|
}
|
|
|
|
flee_from_flood()
|
|
{
|
|
var_0 = maps\_utility::get_ai_group_ai( "advancing_allies" );
|
|
var_0 set_group_goalvolume( "post_dam_flee" );
|
|
}
|
|
|
|
ignore_everything( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self.ignoreall = 1;
|
|
self.ignoreme = 1;
|
|
self.grenadeawareness = 0;
|
|
self.ignoreexplosionevents = 1;
|
|
self.ignorerandombulletdamage = 1;
|
|
self.ignoresuppression = 1;
|
|
self.disablebulletwhizbyreaction = 1;
|
|
maps\_utility::disable_pain();
|
|
self.dontavoidplayer = 1;
|
|
self.og_newenemyreactiondistsq = self.newenemyreactiondistsq;
|
|
self.newenemyreactiondistsq = 0;
|
|
|
|
if ( isdefined( var_0 ) && var_0 != 0.0 )
|
|
{
|
|
wait( var_0 );
|
|
clear_ignore_everything();
|
|
}
|
|
}
|
|
|
|
clear_ignore_everything()
|
|
{
|
|
self.ignoreall = 0;
|
|
self.ignoreme = 0;
|
|
self.grenadeawareness = 1;
|
|
self.ignoreexplosionevents = 0;
|
|
self.ignorerandombulletdamage = 0;
|
|
self.ignoresuppression = 0;
|
|
self.disablebulletwhizbyreaction = 0;
|
|
maps\_utility::enable_pain();
|
|
self.dontavoidplayer = 0;
|
|
self.script_dontpeek = 0;
|
|
|
|
if ( isdefined( self.og_newenemyreactiondistsq ) )
|
|
self.newenemyreactiondistsq = self.og_newenemyreactiondistsq;
|
|
}
|
|
|
|
dialogue_dam()
|
|
{
|
|
var_0 = getent( "aim_missiles_2", "targetname" );
|
|
var_0 waittill( "trigger" );
|
|
|
|
if ( isdefined( level.e3_demo ) )
|
|
wait 3.0;
|
|
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
|
|
if ( !common_scripts\utility::flag( "looked_at_missiles_failsafe" ) )
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_pri_takethatlauncherout" );
|
|
|
|
if ( level.start_point == "dam" )
|
|
wait 3.0;
|
|
|
|
wait 1.0;
|
|
|
|
if ( !common_scripts\utility::flag( "looked_at_missiles_failsafe" ) )
|
|
level.allies[1] maps\_utility::smart_dialogue( "flood_diz_samsgonnafire" );
|
|
|
|
if ( isdefined( level.e3_demo ) )
|
|
wait 0.5;
|
|
|
|
if ( !common_scripts\utility::flag( "looked_at_missiles_failsafe" ) )
|
|
level.allies[2] maps\_utility::smart_dialogue( "flood_mrk_whatthehellis" );
|
|
|
|
wait 0.5;
|
|
|
|
if ( !common_scripts\utility::flag( "looked_at_missiles_failsafe" ) )
|
|
level.allies[0] maps\_utility::smart_dialogue( "flood_bkr_gotyoucovered" );
|
|
|
|
if ( !common_scripts\utility::flag( "looked_at_missiles_failsafe" ) )
|
|
level.allies[0] thread streets_nag_end_on_notify( maps\_utility::make_array( "flood_pri_takethatlauncherout", "flood_bkr_gotyoucovered", "flood_bkr_stopsequence" ), "looked_at_missiles_failsafe", "flag_set" );
|
|
|
|
common_scripts\utility::flag_wait( "looked_at_missiles_failsafe" );
|
|
level.allies[0] stopsounds();
|
|
level.allies[1] stopsounds();
|
|
level.allies[2] stopsounds();
|
|
level.allies[0] notify( "flag_set" );
|
|
}
|
|
|
|
remove_allies()
|
|
{
|
|
var_0 = maps\_utility::get_ai_group_ai( "street_start_allies" );
|
|
|
|
if ( var_0.size > 0 )
|
|
{
|
|
foreach ( var_2 in var_0 )
|
|
var_2 delete();
|
|
}
|
|
}
|
|
|
|
remove_live_grenades()
|
|
{
|
|
var_0 = getentarray( "grenade", "classname" );
|
|
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
{
|
|
if ( isdefined( var_0[var_1] ) )
|
|
var_0[var_1] delete();
|
|
}
|
|
}
|
|
|
|
remove_dyn_objects()
|
|
{
|
|
physicsexplosionsphere( level.player.origin, 310, 300, 2.0 );
|
|
}
|
|
|
|
remove_stuff_for_animation()
|
|
{
|
|
wait 2.0;
|
|
var_0 = getentarray( "dam_break_delete", "targetname" );
|
|
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
{
|
|
if ( isdefined( var_0[var_1] ) )
|
|
var_0[var_1] delete();
|
|
}
|
|
}
|
|
|
|
add_dam_vignette_hud_overlay()
|
|
{
|
|
self.hud_overlay = create_hud_static_overlay( "flood_ui_vignette", 0, 0.0 );
|
|
var_0 = 0;
|
|
var_1 = 7.5;
|
|
|
|
while ( var_0 < 75 )
|
|
{
|
|
self.hud_overlay.alpha = var_0 / 100;
|
|
var_0 = var_0 + var_1;
|
|
wait 0.1;
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "vignette_lens_fade_out" );
|
|
var_1 = 4;
|
|
|
|
while ( var_0 > 0 )
|
|
{
|
|
self.hud_overlay.alpha = var_0 / 100;
|
|
var_0 = var_0 - var_1;
|
|
wait 0.1;
|
|
}
|
|
|
|
self.hud_overlay destroy();
|
|
}
|
|
|
|
create_hud_static_overlay( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = newhudelem();
|
|
var_3.x = 0;
|
|
var_3.y = 0;
|
|
var_3.sort = var_1;
|
|
var_3.horzalign = "fullscreen";
|
|
var_3.vertalign = "fullscreen";
|
|
var_3.alpha = var_2;
|
|
var_3 setshader( var_0, 640, 480 );
|
|
return var_3;
|
|
}
|
|
|
|
hide_spire()
|
|
{
|
|
var_0 = getent( "flood_church_spire", "targetname" );
|
|
var_0 hide();
|
|
}
|
|
|
|
mlrs_qte_prompt()
|
|
{
|
|
maps\flood_ending::ending_create_qte_prompt( &"FLOOD_LAUNCHER_MELEE", undefined );
|
|
thread maps\flood_ending::ending_fade_qte_prompt( 0.5, 1.0 );
|
|
common_scripts\utility::flag_wait( "qte_window_closed" );
|
|
maps\flood_ending::ending_fade_qte_prompt( 0.25, 0.0 );
|
|
maps\flood_ending::ending_destroy_qte_prompt();
|
|
}
|
|
|
|
dam_waterfall_hide()
|
|
{
|
|
wait 8.3;
|
|
var_0 = getentarray( "dam_waterfall_to_hide", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 delete();
|
|
}
|