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

2695 lines
91 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
beach_spawn_functions()
{
maps\_utility::array_spawn_function_noteworthy( "default_beach_enemy", ::beach_enemy_default );
maps\_utility::array_spawn_function_targetname( "hovercraft_drone_spawner", maps\homecoming_util::hovercraft_drone_default );
maps\_utility::array_spawn_function_targetname( "house_stumble_dude", ::beach_bunker_stumble_event );
maps\_utility::array_spawn_function_targetname( "beach_n90_spawners", ::beach_enemy_default );
maps\_utility::array_spawn_function_targetname( "initial_beach_spawners", maps\homecoming_util::set_ai_array, "inital_beach_guys" );
maps\_utility::array_spawn_function_noteworthy( "bunker_minigun_guy", ::bunker_mg_guy );
maps\_utility::array_spawn_function_targetname( "beach_frontline_abrams", ::beach_frontline_abrams );
maps\_utility::array_spawn_function_targetname( "beach_lander", maps\homecoming_util::heli_beach_lander_init );
getent( "bunker_wave3_hovercraft_tank", "targetname" ) maps\_utility::add_spawn_function( ::beach_wave3_tank_setup );
maps\_utility::array_spawn_function_noteworthy( "hovercraft_tanks", ::beach_hovercraft_tanks_default );
maps\_utility::array_spawn_function_targetname( "hovercraft_unloader", maps\homecoming_util::hovercraft_init );
getent( "bunker_player_attacker_hind", "targetname" ) maps\_utility::add_spawn_function( ::playerhind_destory_balcony_mg );
common_scripts\utility::array_thread( getentarray( "beach_mg_spawners", "targetname" ), maps\_mgturret::mg42_think );
}
beach_sequence_bunker_new()
{
common_scripts\utility::flag_wait( "FLAG_start_bunker" );
thread maps\_utility::autosave_by_name( "bunker_wave1" );
thread beach_enemy_attack_player_manager();
if ( isdefined( level._audio.last_song ) )
{
maps\_utility::flagwaitthread( "TRIGFLAG_bunker_music_stinger", maps\_utility::music_crossfade, "mus_homecoming_beach_reveal", 2.0 );
thread beach_reveal_turn_off_mix_snapshot();
}
level.hesh maps\_utility::set_ignoresuppression( 1 );
level.hesh setthreatbiasgroup( "bunker_allies" );
level.player setthreatbiasgroup( "bunker_allies" );
var_0 = common_scripts\utility::array_add( level.intro_rangers, level.hesh );
foreach ( var_2 in var_0 )
{
var_2 maps\homecoming_util::clear_ignore_everything();
var_2.grenadeawareness = 0;
var_2 pushplayer( 1 );
}
var_4 = maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "beach_house_battlehinds" );
common_scripts\utility::array_thread( getentarray( "destructible_dragons_teeth", "targetname" ), maps\homecoming_util::destructible_dragons_teeth );
common_scripts\utility::array_thread( getentarray( "destructible_sandbags_beach", "targetname" ), maps\homecoming_util::destructible_sandbags );
thread maps\homecoming_beach_ambient::init_beach_ambient();
var_5 = getentarray( "beach_ally_turrets", "targetname" );
foreach ( var_7 in var_5 )
{
var_8 = var_7 common_scripts\utility::get_linked_ents();
var_7 thread maps\homecoming_util::turret_shoot_targets( var_8 );
var_7 setdefaultdroppitch( -10 );
}
level.balcony = bunker_balcony_setup();
thread beach_wave1_logic();
common_scripts\utility::flag_wait( "FLAG_beach_start_wave_2" );
maps\_utility::delaythread( 0, ::artillery_smoke_grenade );
maps\_utility::delaythread( 7, ::wave1_hovercraft_missile_barrage );
maps\_utility::array_delete( common_scripts\utility::array_removeundefined( level.hovercraftdrones ) );
beach_wave2_logic();
common_scripts\utility::flag_wait( "FLAG_start_balcony_collapse" );
thread maps\homecoming_a10::a10_mechanic_off();
common_scripts\utility::array_thread( level.beachfronelinedrones, maps\homecoming_util::delete_safe );
thread player_fall_off_balcony();
common_scripts\utility::flag_wait( "FLAG_balcony_fall_done" );
var_10 = getentarray( "beach_front_runners", "targetname" );
maps\_utility::array_notify( var_10, "stop_drone_runners" );
level notify( "beach_attacker_logic_off" );
var_11 = maps\homecoming_util::get_ai_array( "beach_front_attackers" );
maps\_utility::array_delete( var_11 );
var_12 = maps\homecoming_util::get_ai_array( "inital_beach_guys" );
common_scripts\utility::array_thread( var_12, maps\homecoming_util::delete_safe );
level.hesh maps\_utility::set_ignoresuppression( 0 );
level.hesh.grenadeawareness = 1;
level.hesh pushplayer( 0 );
level.hesh notify( "stop_random_targets" );
maps\homecoming_util::delete_ai_array( "intro_convo_rangers" );
level.secondarygunner maps\homecoming_util::delete_safe();
level notify( "stop_beach_hinds" );
level notify( "hovercraft_loopers_stop" );
level.hovercraftloopers = common_scripts\utility::array_removeundefined( level.hovercraftloopers );
common_scripts\utility::array_thread( level.hovercraftloopers, maps\homecoming_util::hovercraft_delete );
level.beachtanks = common_scripts\utility::array_removeundefined( level.beachtanks );
maps\_utility::array_delete( level.beachtanks );
common_scripts\utility::flag_wait( "FLAG_balcony_getup_done" );
common_scripts\utility::flag_set( "FLAG_start_trenches" );
}
beach_reveal_turn_off_mix_snapshot()
{
wait 7.0;
level.player clearclienttriggeraudiozone( 0.5 );
}
player_fall_off_balcony()
{
level.player maps\_chaingun_player::chaingun_turret_disable( level.balcony["turret"] );
var_0 = 0;
if ( isdefined( level.playerattackerhind ) && isalive( level.playerattackerhind ) )
{
var_0 = 1;
level.playerattackerhind delete();
}
var_1 = maps\_hud_util::create_client_overlay( "black", 0, level.player );
var_2 = common_scripts\utility::getstruct( "bunker_balcony_fall_spot", "targetname" );
var_3 = spawn( "script_model", var_2.origin );
var_3 setmodel( "tag_origin" );
var_3.angles = ( 0, 180, 0 );
level.player playerlinktoabsolute( var_3, "tag_origin" );
level.player enableinvulnerability();
level.player disableweaponswitch();
level.player disableweapons();
level.player allowcrouch( 1 );
level.player allowprone( 0 );
level.player allowstand( 0 );
level.player allowsprint( 0 );
var_4 = undefined;
if ( var_0 )
{
var_4 = maps\_vehicle::spawn_vehicle_from_targetname( "destroy_balcony_hind_strafe" );
thread bunker_final_strafe( var_4 );
}
else
{
var_4 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "destroy_balcony_hind_flyover" );
var_4 vehicle_turnengineoff();
}
var_4 waittill( "missile_fired", var_5 );
var_5 waittill( "death" );
maps\homecoming_util::hud_hide();
level.player shellshock( "homecoming_attack", 60 );
thread maps\homecoming_util::earthquake_loop( 0.3 );
var_6 = level.balcony;
thread balcony_collapse_stumble( var_6 );
var_6["mid"] playrumblelooponentity( "steady_rumble" );
var_6["mid"] thread maps\_utility::play_sound_on_entity( "scn_homecoming_balcony_crash" );
wait 2;
common_scripts\utility::exploder( "balcony_collapse_smoke" );
level.hesh thread maps\_utility::dialogue_queue( "homcom_hsh_holdon" );
wait 0.5;
var_6["right"] unlink();
var_6["right"] rotateto( var_6["right"].angles + ( -30, 0, 0 ), 2 );
wait 0.5;
var_6["mid"] rotateto( var_6["mid"].angles + ( -30, 0, 0 ), 1, 0.5 );
var_3 rotateto( var_3.angles + ( 105, 0, 0 ), 1, 0.5 );
wait 0.5;
var_7 = anglestoforward( ( 0, 180, 0 ) );
var_3 moveslide( ( 0, 0, 0 ), 15, var_7 * 100 );
wait 0.4;
level.player allowstand( 1 );
level.player allowcrouch( 0 );
level.player allowprone( 0 );
level.player notify( "stop_earthquake_loop" );
var_6["mid"] stoprumble( "steady_rumble" );
var_8 = spawnstruct();
var_8.origin = level.player.origin;
var_8.angles = level.player.angles;
var_9 = maps\_utility::spawn_anim_model( "player_rig" );
var_9 dontcastshadows();
var_8 thread maps\_anim::anim_first_frame_solo( var_9, "bunker_balcony_collapse" );
level.player playerlinktoabsolute( var_9, "tag_player" );
var_8 thread maps\_anim::anim_single_solo( var_9, "bunker_balcony_collapse" );
wait 1.55;
var_1 thread maps\_hud_util::fade_over_time( 1, 0 );
level.player thread maps\_utility::play_sound_on_entity( "post_balcony_collapse_fall" );
level.player playrumbleonentity( "artillery_rumble" );
var_9 stopanimscripted();
maps\_utility::transient_switch( "homecoming_transient_intro_tr", "homecoming_transient_beach_tr" );
common_scripts\utility::flag_set( "FLAG_balcony_fall_done" );
thread maps\homecoming_util::player_kill_quad( ( -2056, 3952, -20 ), ( -1652, 4132, 88 ), "tower_garage_door_closed" );
thread bunker_balcony_cleanup();
maps\_utility::stop_exploder( "balcony_collapse_smoke" );
if ( isdefined( level.beach_ambient_hinds ) )
{
level.beach_ambient_hinds = common_scripts\utility::array_removeundefined( level.beach_ambient_hinds );
maps\_utility::array_delete( level.beach_ambient_hinds );
}
level.player unlink();
var_9 delete();
var_10 = common_scripts\utility::getstruct( var_2.target, "targetname" );
var_11 = common_scripts\utility::spawn_tag_origin();
var_11.origin = var_10.origin;
var_11.angles = var_10.angles;
level.player unlink();
level.player setorigin( var_10.origin );
level.player setplayerangles( var_10.angles );
level.player allowprone( 1 );
level.player allowcrouch( 0 );
level.player allowstand( 0 );
wait 1.5;
var_12 = 0;
level.player playerlinkto( var_11, "tag_origin", 1, var_12, var_12, var_12, var_12 );
level.player setplayerangles( var_10.angles );
thread hesh_balcony_logic();
thread bunker_balcony_enemies();
common_scripts\utility::exploder( "balcony_bust_dust" );
var_13 = undefined;
var_14 = level.player getcurrentweapon();
var_15 = level.player getweaponslistprimaries();
foreach ( var_17 in var_15 )
{
if ( var_17 == "cz805bren+acog_sp" )
{
var_13 = var_17;
break;
}
else if ( var_14 != var_17 )
var_13 = var_17;
}
level.player takeweapon( var_13 );
level.player giveweapon( "cz805bren+acog_sp+hc_state_grab" );
level.player switchtoweapon( "cz805bren+acog_sp+hc_state_grab" );
level.player enableweapons();
level.player thread maps\_utility::play_sound_on_entity( "post_balcony_collapse_pickup" );
wait 0.1;
maps\homecoming_util::hud_show();
getent( "post_balcony_collapse_models", "targetname" ) maps\_utility::show_entity();
maps\_utility::array_delete( getentarray( "beach_balcony_intact", "targetname" ) );
maps\_utility::array_delete( getentarray( "beach_balcony_intact_models", "targetname" ) );
level.player shellshock( "homecoming_balcony_fall", 4 );
var_1 thread maps\_hud_util::fade_over_time( 0, 4 );
var_1 common_scripts\utility::delaycall( 4, ::destroy );
level.player thread maps\homecoming_util::player_heartbeat();
level.player maps\_utility::notify_delay( "stop_player_heartbeat", 0.5 );
var_19 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "balcony_fall_a10" );
var_19 waittill( "strafe_start" );
common_scripts\utility::flag_set( "FLAG_balcony_strafe" );
var_19 waittill( "strafe_done" );
wait 0.2;
level.player fadeoutshellshock();
level.player allowsprint( 1 );
level.player disableinvulnerability();
level.player enableweaponswitch();
level.player unlink();
level.player allowstand( 1 );
level.player allowcrouch( 0 );
level.player allowprone( 0 );
var_11 delete();
maps\_utility::delaythread( 0.1, ::bren_switchout_logic );
level.player common_scripts\utility::delaycall( 0.1, ::allowcrouch, 1 );
level.player common_scripts\utility::delaycall( 0.1, ::allowprone, 1 );
common_scripts\utility::flag_set( "FLAG_balcony_getup_done" );
}
hesh_balcony_logic()
{
level.hesh maps\homecoming_util::ignore_everything();
level.hesh maps\_utility::walkdist_zero();
level.hesh maps\_utility::delaythread( 2, maps\_utility::dialogue_queue, "homcom_hsh_coughing" );
var_0 = common_scripts\utility::getstruct( "hesh_balcony_getup", "targetname" );
var_0 thread maps\_anim::anim_generic( level.hesh, "teargas_recover_2" );
common_scripts\utility::waitframe();
level.hesh setanimtime( maps\_utility::getanim_generic( "teargas_recover_2" ), 0.65 );
level.hesh.anim_blend_time_override = 0.5;
wait 4;
level.hesh maps\_utility::anim_stopanimscripted();
var_1 = common_scripts\utility::getstruct( "balcony_hesh_wave", "targetname" );
var_1 maps\_anim::anim_reach_solo( level.hesh, "balcony_hesh_wave" );
common_scripts\utility::flag_set( "FLAG_hesh_balcony_wave" );
var_1 maps\_anim::anim_single_solo_run( level.hesh, "balcony_hesh_wave" );
level.hesh maps\_utility::set_force_color( "r" );
level.hesh maps\_utility::walkdist_reset();
}
balcony_collapse_stumble( var_0 )
{
if ( !isdefined( level.intro_rangers ) )
return;
var_1 = [ level.hesh, level.secondarygunner ];
var_1 = common_scripts\utility::array_combine( var_1, level.intro_rangers );
var_2 = [];
foreach ( var_4 in var_1 )
{
if ( !isdefined( var_4 ) )
continue;
var_5 = var_4.balconyent;
var_5 linkto( var_0[var_5.script_noteworthy] );
var_4 linkto( var_5 );
var_5 thread maps\_anim::anim_single_solo( var_4, "balcony_stumble" );
var_2[var_2.size] = var_5;
}
common_scripts\utility::flag_wait( "FLAG_balcony_fall_done" );
level.hesh unlink();
level.hesh stopanimscripted();
maps\_utility::array_delete( var_2 );
}
bunker_final_strafe( var_0 )
{
var_0.perferred_crash_location = maps\homecoming_util::get_helicopter_crash_location( "beach_heli_crash_loc_right" );
var_0 maps\_vehicle::godon();
var_0 vehicle_turnengineoff();
var_0 thread bunker_final_strafe_hind_missiles();
common_scripts\utility::waitframe();
thread maps\_vehicle::gopath( var_0 );
var_1 = common_scripts\utility::getstructarray( "bunker_ending_a10_strafe_spots", "targetname" );
var_1[0] thread bunker_final_strafe_think();
wait 1.5;
var_2 = [ "tag_engine_left", "tag_origin", "tag_engine_right" ];
foreach ( var_4 in var_2 )
{
var_5 = common_scripts\utility::random( var_1 );
var_6 = vectornormalize( var_0 gettagorigin( var_4 ) - var_5.origin );
playfx( common_scripts\utility::getfx( "a10_tracer" ), var_5.origin, var_6 );
playfxontag( common_scripts\utility::getfx( "a10_impact" ), var_0, var_4 );
wait( randomfloatrange( 0.05, 0.1 ) );
}
wait 0.5;
var_0 maps\_vehicle::godoff();
var_0 maps\_utility::die();
}
bunker_final_strafe_hind_missiles()
{
self setvehweapon( "missile_attackheli" );
var_0 = getentarray( "balcony_fall_missile_spots", "targetname" );
foreach ( var_2 in var_0 )
{
var_3 = common_scripts\utility::random( [ "tag_missile_left", "tag_missile_right" ] );
var_4 = self fireweapon( var_3, var_2 );
self notify( "missile_fired", var_4 );
wait 0.2;
}
}
bunker_final_strafe_think()
{
var_0 = self;
var_1 = common_scripts\utility::getstruct( var_0.target, "targetname" );
var_2 = var_1.radius;
var_3 = 1000;
var_4 = gettime();
while ( gettime() - var_4 < var_3 )
{
var_5 = maps\homecoming_util::return_point_in_circle( var_1.origin, var_2 );
var_6 = vectornormalize( var_5 - var_0.origin );
var_7 = var_5 + var_6 * 999999;
var_8 = bullettrace( var_5, var_7, 0 );
var_5 = var_8["position"];
thread common_scripts\utility::play_sound_in_space( "a10p_impact", var_5 );
playfx( common_scripts\utility::getfx( "a10_tracer" ), var_0.origin, var_6 );
thread bunker_final_strafe_impacts( var_5 );
wait( randomfloatrange( 0.05, 0.1 ) );
}
}
bunker_final_strafe_impacts( var_0 )
{
playfx( common_scripts\utility::getfx( "a10_impact" ), var_0, ( 0, 0, 1 ) );
radiusdamage( var_0, 56, 9999, 9999 );
}
bren_switchout_logic()
{
for (;;)
{
level.player waittill( "weapon_change", var_0 );
var_1 = level.player getweaponslistall();
foreach ( var_3 in var_1 )
{
if ( var_3 == "cz805bren+acog_sp+hc_state_grab" )
{
level.player takeweapon( "cz805bren+acog_sp+hc_state_grab" );
level.player giveweapon( "cz805bren+acog_sp" );
if ( !common_scripts\utility::flag( "player_not_doing_strafe" ) )
level.player.a10_lastweapon = "cz805bren+acog_sp";
if ( level.player getcurrentweapon() == "none" || isdefined( level.player.using_ammo_cache ) || isdefined( var_0 ) && var_0 == "none" )
{
if ( isdefined( level.player.using_ammo_cache ) )
{
while ( isdefined( level.player.using_ammo_cache ) )
wait 0.05;
level.player givemaxammo( "cz805bren+acog_sp" );
}
level.player switchtoweapon( "cz805bren+acog_sp" );
}
return;
}
}
}
}
beach_balcony_collapse_watcher()
{
for (;;)
{
if ( level.a10_uses == 1 )
level.a10_mechanic_skip_end_vo = 1;
if ( level.a10_uses == 2 )
break;
wait 0.05;
}
common_scripts\utility::flag_wait( "a10_strafe_complete" );
common_scripts\utility::flag_set( "FLAG_start_balcony_collapse" );
}
bunker_balcony_setup()
{
var_0 = [];
var_1 = [];
var_1["models"] = [];
var_1["supports"] = [];
var_2 = undefined;
var_3 = [ "left", "mid", "right" ];
foreach ( var_5 in var_3 )
{
var_6 = getent( "balcony_broken_piece_" + var_5, "targetname" );
var_6.alreadyrotating = 0;
var_7 = getent( "support_" + var_5, "targetname" );
if ( isdefined( var_7 ) )
{
var_7 linkto( var_6 );
var_1["supports"] = common_scripts\utility::array_add( var_1["supports"], var_7 );
}
if ( isdefined( var_6.target ) )
{
var_8 = getentarray( var_6.target, "targetname" );
foreach ( var_10 in var_8 )
{
var_10 linkto( var_6 );
var_1["models"] = common_scripts\utility::array_add( var_1["models"], var_10 );
}
}
if ( var_5 == "mid" )
var_2 = var_6;
var_1[var_5] = var_6;
var_0[var_0.size] = var_6;
}
foreach ( var_6 in var_0 )
{
if ( var_6 != var_2 )
var_6 linkto( var_2 );
}
var_15 = getent( "balcony_player_clip", "targetname" );
var_15 linkto( var_2 );
level.balcony_turret linkto( var_2 );
var_1["turret"] = level.balcony_turret;
level.balcony = var_1;
return var_1;
}
bunker_balcony_damage_state( var_0 )
{
maps\_utility::array_delete( getentarray( "balcony_intact", "targetname" ) );
getent( "balcony_broken_back", "targetname" ) maps\_utility::show_entity();
var_1 = [ "left", "mid", "right" ];
foreach ( var_3 in var_1 )
var_0[var_3] maps\_utility::show_entity();
common_scripts\utility::array_thread( var_0["supports"], maps\_utility::show_entity );
common_scripts\utility::array_thread( getentarray( "bhouse_roof_damage", "targetname" ), maps\_utility::show_entity );
maps\_utility::array_delete( getentarray( "bhouse_roof_intact", "targetname" ) );
common_scripts\utility::array_thread( getentarray( "bhouse_pillar_r_destroyed", "targetname" ), maps\_utility::show_entity );
maps\_utility::array_delete( getentarray( "bhouse_pillar_r_intact", "targetname" ) );
common_scripts\utility::array_thread( getentarray( "bhouse_pillar_l_destroyed", "targetname" ), maps\_utility::show_entity );
maps\_utility::array_delete( getentarray( "bhouse_pillar_l_intact", "targetname" ) );
}
bunker_balcony_enemies()
{
var_0 = common_scripts\utility::getstruct( "balcony_fall_enemy_target", "targetname" );
var_1 = spawn( "script_origin", var_0.origin );
var_2 = getentarray( "fall_off_balcony_enemies", "targetname" );
var_3 = [];
foreach ( var_5 in var_2 )
{
var_6 = var_5 maps\_utility::spawn_ai();
var_3 = common_scripts\utility::array_add( var_3, var_6 );
var_6 setthreatbiasgroup( "balcony_fall_enemies" );
var_6 allowedstances( "stand" );
var_6.health = 10;
var_6 maps\_utility::disable_long_death();
var_6.noreload = 1;
var_6.grenadeawareness = 0;
var_6.grenadeammo = 0;
var_6 maps\_utility::set_ignoresuppression( 1 );
var_6 setentitytarget( var_1 );
var_7 = undefined;
if ( isdefined( var_5.script_linkto ) )
{
var_7 = var_5 maps\homecoming_util::get_linked_struct();
var_6.deathstruct = var_7;
}
}
common_scripts\utility::flag_wait( "FLAG_balcony_strafe" );
var_3 = maps\_utility::array_removedead( var_3 );
foreach ( var_12, var_6 in var_3 )
{
var_6 maps\_utility::magic_bullet_shield();
if ( isdefined( var_6.deathstruct ) )
{
var_10 = var_12 + 1;
var_11 = common_scripts\utility::random( [ "artillery_death_1", "artillery_death_2", "artillery_death_3" ] );
var_6.deathstruct maps\_utility::delaythread( 0.5, maps\_anim::anim_generic, var_6, "artillery_death_" + var_10 );
var_6 maps\_utility::delaythread( 1, maps\homecoming_util::kill_safe );
}
}
}
bunker_balcony_cleanup()
{
level.balcony["right"] maps\_utility::hide_entity();
level.balcony["mid"] maps\_utility::hide_entity();
level.balcony["left"] maps\_utility::hide_entity();
maps\_utility::array_delete( level.balcony["models"] );
level.balcony["turret"].base delete();
level.balcony["turret"] delete();
var_0 = getentarray( "bunker_balcony_down", "targetname" );
common_scripts\utility::array_thread( var_0, maps\_utility::show_entity );
}
a10_balcony_strafe_physics()
{
self waittill( "strafe_end" );
var_0 = common_scripts\utility::getstruct( "balcony_strafe_end", "script_noteworthy" );
physicsexplosionsphere( var_0.origin, 200, 100, 6 );
}
beach_wave1_logic()
{
level.availabledrones = 15;
thread beach_wave1_dialog();
var_0 = getentarray( "beach_wave1_hovercraft", "script_noteworthy" );
var_1 = maps\_utility::array_spawn( var_0 );
foreach ( var_3 in var_1 )
{
var_3 vehicle_turnengineoff();
thread maps\_vehicle::gopath( var_3 );
}
common_scripts\utility::array_thread( getnodearray( "beach_front_nodes", "script_noteworthy" ), ::beach_front_nodes_think );
var_5 = getent( "bunker_starting_heli_lander", "script_noteworthy" );
var_6 = var_5 maps\_vehicle::spawn_vehicle_and_gopath();
var_6.perferred_crash_location = maps\homecoming_util::get_helicopter_crash_location( "beach_heli_crash_loc_left" );
var_6 thread maps\homecoming_util::vehicle_allow_player_death( ::beach_nh90_damagestate );
level.startingbunkerheli = var_6;
thread beach_wave1_enemy_ai( var_6, "bunker_wave1_first_nh90_guys", "wave1_left_heli_goalvolume" );
level.artillery_hit_drones = [];
level.artillery_hesco_tower_drones = [];
level.beachfronelinedrones = [];
var_7 = getentarray( "beach_frontline_drones", "targetname" );
foreach ( var_9 in var_7 )
{
var_10 = var_9 maps\homecoming_drones::drone_spawn();
var_10.nodroneweaponsound = 1;
var_10.muzzleflashoverride = "drone_tracer";
if ( var_9 maps\homecoming_util::noteworthy_check( "hesco_tower_drone" ) || var_9 maps\homecoming_util::parameters_check( "hesco_tower_drone" ) )
level.artillery_hesco_tower_drones[level.artillery_hesco_tower_drones.size] = var_10;
if ( !isdefined( var_10.magic_bullet_shield ) )
var_10 maps\_utility::magic_bullet_shield();
if ( var_9 maps\homecoming_util::noteworthy_check( "frontline_artillery_drones" ) )
level.artillery_hit_drones = common_scripts\utility::array_add( level.artillery_hit_drones, var_10 );
else if ( var_9 maps\homecoming_util::noteworthy_check( "beach_javelin_drone" ) )
{
}
else
{
level.beachfronelinedrones = common_scripts\utility::array_removeundefined( level.beachfronelinedrones );
level.beachfronelinedrones = common_scripts\utility::array_add( level.beachfronelinedrones, var_10 );
}
var_11 = var_9 common_scripts\utility::get_linked_ents();
foreach ( var_13 in var_11 )
{
if ( var_13 maps\homecoming_util::noteworthy_check( "respawner" ) )
var_10 thread drone_frontline_respawner( var_13 );
}
}
thread bunker_trench_drone_runners();
thread beach_wave1_enemy_drones();
maps\homecoming_util::waittill_trigger( "player_inside_bunker" );
common_scripts\utility::flag_wait( "TRIGFLAG_player_at_balcony" );
level notify( "stop_intro_flavorburst" );
thread bunker_balcony_bullet_impacts_manager();
thread beach_bunker_backtrack_blocker();
common_scripts\utility::flag_set( "FLAG_stop_intro_drone_runners" );
maps\homecoming_util::delete_ai_array( "intro_drone_runners" );
common_scripts\utility::flag_set( "FLAG_wave1_right_helicopter" );
var_5 = getent( "bunker_second_heli_lander", "script_noteworthy" );
var_16 = var_5 maps\_vehicle::spawn_vehicle_and_gopath();
var_16.perferred_crash_location = maps\homecoming_util::get_helicopter_crash_location( "beach_heli_crash_loc_right" );
var_16 thread maps\homecoming_util::vehicle_allow_player_death( ::beach_nh90_damagestate );
level.secondbunkerheli = var_16;
thread beach_wave1_enemy_ai( var_16, "bunker_wave1_second_nh90_guys", "wave1_right_heli_goalvolume" );
var_5 = getent( "bunker_third_heli_lander", "script_noteworthy" );
var_17 = var_5 maps\_vehicle::spawn_vehicle_and_gopath();
var_17.perferred_crash_location = maps\homecoming_util::get_helicopter_crash_location( "beach_heli_crash_loc_right" );
var_17 thread maps\homecoming_util::vehicle_allow_player_death( ::beach_nh90_damagestate );
var_17.takeoffdelay = 7;
level.thirdbunkerheli = var_17;
common_scripts\utility::waitframe();
var_16 maps\_utility::ent_flag_wait( "unload_complete" );
var_17 maps\_utility::ent_flag_wait( "unload_complete" );
thread beach_wave1_artillery_retreat();
common_scripts\utility::flag_set( "FLAG_stop_wave1_loops" );
foreach ( var_3 in var_1 )
{
var_19 = randomfloatrange( 0.5, 1 );
var_3 maps\_utility::delaythread( var_19, maps\_utility::ent_flag_set, "hovercraft_unload_complete" );
}
wait 7;
common_scripts\utility::flag_set( "FLAG_beach_start_wave_2" );
}
beach_nh90_damagestate( var_0 )
{
if ( isdefined( self.diddamagestate ) )
return;
if ( self.fakehealth > var_0 / 2 )
return;
var_1 = "tag_rotor_fx";
var_2 = anglestoforward( self gettagangles( var_1 ) );
playfxontag( common_scripts\utility::getfx( "nh90_damage_explosion" ), self, var_1 );
playfxontag( common_scripts\utility::getfx( "hind_damage_trail" ), self, var_1 );
thread maps\homecoming_util::playloopingfx( "hind_damage_trail", 0.05, undefined, var_1, 1 );
thread common_scripts\utility::play_sound_in_space( "hind_helicopter_hit", self.origin );
self.diddamagestate = 1;
if ( !maps\_utility::ent_flag( "unload_started" ) )
self.fakehealthinvulnerability = 1;
self waittill( "death" );
self notify( "stop_looping_fx" );
}
beach_bunker_backtrack_blocker()
{
var_0 = getent( "player_at_balcony_flagTrig", "targetname" );
common_scripts\utility::flag_wait_all( "FLAG_hesh_in_bunker_house", "FLAG_ranger1_in_bunker_house", "FLAG_ranger2_in_bunker_house" );
for (;;)
{
if ( level.player istouching( var_0 ) )
{
var_1 = level.player getplayerangles();
var_1 = var_1[1];
if ( var_1 < -90 && var_1 >= -180 || var_1 > 90 && var_1 <= 180 )
break;
}
wait 0.05;
}
common_scripts\utility::flag_set( "FLAG_bunker_balcony_blocker_set" );
common_scripts\utility::exploder( "bunker_blocker_collapse" );
var_2 = getentarray( "Bhouse_blocker_destroyed", "targetname" );
common_scripts\utility::array_call( var_2, ::show );
common_scripts\utility::array_call( var_2, ::solid );
common_scripts\utility::array_call( var_2, ::disconnectpaths );
maps\_utility::array_delete( getentarray( "Bhouse_blocker_intact", "targetname" ) );
}
beach_wave1_enemy_ai( var_0, var_1, var_2 )
{
common_scripts\utility::waitframe();
var_0 maps\_utility::ent_flag_wait( "unload_complete" );
var_3 = getentarray( "beach_front_wave1_refillers", "targetname" );
var_2 = maps\homecoming_util::get_goalvolume( var_2 );
var_4 = 0;
var_5 = var_0.unloadspawners;
foreach ( var_7 in var_5 )
var_4 = var_4 + var_7.script_index;
while ( !common_scripts\utility::flag( "FLAG_start_wave1_retreat" ) )
{
wait( randomintrange( 3, 5 ) );
var_9 = maps\homecoming_util::get_ai_array( var_1 );
if ( var_9.size == var_4 )
continue;
var_10 = var_4 - var_9.size;
for ( var_11 = 0; var_11 < var_10; var_11++ )
{
if ( common_scripts\utility::flag( "FLAG_start_wave1_retreat" ) )
break;
var_12 = common_scripts\utility::random( var_3 );
var_13 = var_12 maps\_utility::spawn_ai();
if ( !isdefined( var_13 ) || !isalive( var_13 ) )
continue;
var_13 maps\homecoming_util::set_ai_array( var_1 );
if ( !isdefined( var_13 ) || !isalive( var_13 ) )
continue;
var_13 setgoalvolumeauto( var_2 );
wait( randomfloatrange( 0.2, 0.6 ) );
}
}
}
beach_wave1_enemy_drones()
{
var_0 = getentarray( "beach_wave1_enemy_drones", "targetname" );
maps\_utility::array_spawn_function( var_0, maps\homecoming_util::hovercraft_drone_default );
var_1 = [ "run_n_gun" ];
var_2 = [ 0.7, 1.2 ];
var_0 thread maps\homecoming_drones::drone_infinite_runners( "FLAG_stop_wave1_loops", var_2, var_1, undefined, undefined, 16 );
var_3 = getentarray( "beach_wave1_hovercraft_left_enemy_drones", "targetname" );
maps\_utility::array_spawn_function( var_3, maps\homecoming_util::hovercraft_drone_default );
var_1 = [ "run", "run_n_gun" ];
var_2 = [ 1, 2 ];
var_3 thread maps\homecoming_drones::drone_infinite_runners( "FLAG_stop_wave1_loops", var_2, var_1, undefined, undefined, 10 );
while ( !level.startingbunkerheli maps\_utility::ent_flag_exist( "unload_complete" ) )
wait 0.1;
level.startingbunkerheli maps\_utility::add_wait( maps\_utility::waittill_msg, "death" );
level.startingbunkerheli maps\_utility::add_wait( maps\_utility::ent_flag_wait, "unload_complete" );
maps\_utility::do_wait_any();
var_4 = getentarray( "beach_wave1_trench_enemy_drones", "targetname" );
var_1 = [ "run", "run_n_gun" ];
var_2 = [ 0.4, 0.8 ];
var_5 = [ 3, 6 ];
maps\_utility::array_spawn_function( var_4, maps\homecoming_util::hovercraft_drone_default, 128 );
maps\_utility::array_spawn_function( var_4, maps\homecoming_drones::drone_bloodfx );
var_4 thread maps\homecoming_drones::drone_infinite_runners( "FLAG_stop_wave1_trench_loops", var_2, var_1, undefined, var_5, 10 );
}
beach_frontline_abrams()
{
self vehicle_turnengineoff();
var_0 = self.currentnode;
var_1 = var_0 common_scripts\utility::get_linked_ents();
level waittill( "beach_tank_destroyed" );
maps\_utility::array_delete( var_1 );
common_scripts\utility::array_thread( self.riders, maps\_utility::stop_magic_bullet_shield );
self notify( "death" );
common_scripts\utility::flag_wait( "TRIGFLAG_player_leaving_tower_parking_area" );
self delete();
}
beach_wave1_artillery_retreat()
{
common_scripts\utility::flag_set( "FLAG_start_wave1_retreat" );
common_scripts\utility::flag_set( "FLAG_stop_wave1_trench_loops" );
thread beach_wave1_artillery_dialog();
var_0 = common_scripts\utility::getstructarray( "bunker_wave1_retreat_spot", "targetname" );
var_1 = maps\homecoming_util::get_ai_array( "bunker_wave1_first_nh90_guys" );
var_1 = common_scripts\utility::array_combine( var_1, maps\homecoming_util::get_ai_array( "bunker_wave1_second_nh90_guys" ) );
foreach ( var_3 in var_1 )
{
wait( randomfloat( 0.8 ) );
if ( !isdefined( var_3 ) && !isalive( var_3 ) )
continue;
var_4 = common_scripts\utility::getclosest( var_3.origin, var_0 );
var_3 cleargoalvolume();
var_3 setgoalpos( var_4.origin );
var_3.goalradius = 56;
var_3 thread maps\homecoming_util::waittill_real_goal( var_4, 1 );
}
}
wave1_hovercraft_missile_barrage()
{
thread beach_artillery_balcony_logic();
thread hovercraft_missile_barrage_player();
var_0 = undefined;
var_1 = undefined;
var_2 = getentarray( "beach_towers_mgs", "script_noteworthy" );
foreach ( var_4 in var_2 )
{
if ( var_4 maps\homecoming_util::parameters_check( "hesco" ) )
var_0 = var_4;
}
thread metal_tower_collapse();
thread hesco_tower_explosion( var_0 );
thread beach_wave1_artillery_drones();
common_scripts\utility::flag_set( "FLAG_start_artillery_sequence" );
thread hovercraft_missile_barrage( "bunker_hovercraft_rocket_g1" );
wait 1.5;
thread hovercraft_missile_barrage( "bunker_hovercraft_rocket_g2" );
common_scripts\utility::flag_wait( "bunker_hovercraft_rocket_g2_done" );
thread hovercraft_missile_barrage( "bunker_hovercraft_rocket_g3" );
common_scripts\utility::flag_wait_all( "bunker_hovercraft_rocket_g1_done", "bunker_hovercraft_rocket_g2_done", "bunker_hovercraft_rocket_g3_done" );
level notify( "beach_wave1_artillery_done" );
wait 2;
common_scripts\utility::flag_set( "FLAG_artillery_sequence_done" );
}
hovercraft_missile_barrage_player()
{
level waittill( "start_player_effects" );
level.player shellshock( "homecoming_artillery", 999 );
level waittill( "beach_wave1_artillery_done" );
level.player fadeoutshellshock();
}
hovercraft_missile_barrage( var_0 )
{
var_1 = common_scripts\utility::getstructarray( var_0, "targetname" );
var_2 = [];
foreach ( var_4 in var_1 )
var_2[var_4.script_index] = var_4;
for ( var_6 = 0; var_6 < var_2.size; var_6++ )
{
var_4 = var_2[var_6];
if ( var_4 maps\_utility::script_delay() )
var_4 maps\_utility::script_delay();
else
wait 1;
thread hovercraft_artillery_incoming_missile( var_4, var_0 );
}
}
hovercraft_artillery_incoming_missile( var_0, var_1 )
{
var_2 = common_scripts\utility::getstruct( var_0.target, "targetname" );
var_3 = vectortoangles( vectornormalize( var_2.origin - var_0.origin ) );
var_4 = spawn( "script_model", var_0.origin );
var_4.angles = var_3;
var_4 setmodel( "projectile_slamraam_missile" );
playfxontag( common_scripts\utility::getfx( "hovercraft_missile_trail" ), var_4, "tag_fx" );
var_4 thread maps\_utility::play_sound_on_entity( "artillery_incoming" );
var_4 moveto( var_2.origin, 1, 0.5, 0 );
var_4 waittill( "movedone" );
var_4 delete();
if ( !common_scripts\utility::flag( "FLAG_first_hovercraft_missile_hit" ) )
common_scripts\utility::flag_set( "FLAG_first_hovercraft_missile_hit" );
var_5 = var_2 maps\_utility::get_linked_structs();
foreach ( var_7 in var_5 )
{
if ( var_7 maps\homecoming_util::parameters_check( "sandbag" ) )
thread maps\homecoming_util::explosion_throw_sandbags( var_7 );
}
var_4 thread common_scripts\utility::play_sound_in_space( "artillery_explosion", var_2.origin );
earthquake( 0.45, 1.5, var_2.origin, 5000 );
level.player viewkick( 20, var_2.origin );
level.player playrumbleonentity( "artillery_rumble" );
thread maps\_utility::set_blur( randomintrange( 3, 5 ), 0.05 );
thread maps\_utility::set_blur( 0, 0.25 );
if ( isdefined( var_2.script_noteworthy ) )
level notify( var_2.script_noteworthy );
var_2 notify( "artillery_hit" );
var_9 = "vfx_hesco_explosion";
if ( isdefined( var_2.script_fxid ) )
var_9 = var_2.script_fxid;
playfx( common_scripts\utility::getfx( var_9 ), var_2.origin );
if ( var_2 maps\homecoming_util::parameters_check( "done" ) )
common_scripts\utility::flag_set( var_1 + "_done" );
}
hovercraft_artillery_player_weapon()
{
self notify( "artillery_hide_weapon" );
self endon( "artillery_hide_weapon" );
level.player disableweapons();
wait 0.75;
level.player enableweapons();
}
hesco_tower_explosion( var_0 )
{
var_1 = getentarray( "artillery_hesco_tower_d", "targetname" );
var_2 = getentarray( "artillery_hesco_tower", "targetname" );
level waittill( "artillery_first_hit" );
common_scripts\utility::exploder( "hesco_tower_2_exploder" );
common_scripts\utility::array_thread( var_1, maps\_utility::show_entity );
maps\_utility::array_delete( var_2 );
common_scripts\utility::array_thread( level.artillery_hesco_tower_drones, maps\homecoming_util::delete_safe );
var_0 delete();
}
metal_tower_collapse()
{
level waittill( "beach_metal_tower_destroyed" );
var_0 = getent( "artillery_metal_tower_top_nondest", "targetname" );
var_1 = getentarray( "artillery_metal_tower_top_dest", "targetname" );
var_2 = undefined;
var_3 = [];
foreach ( var_5 in var_1 )
{
if ( var_5 maps\homecoming_util::parameters_check( "window" ) )
var_3 = common_scripts\utility::array_add( var_3, var_5 );
else
var_2 = var_5;
var_5 show();
}
foreach ( var_8 in var_3 )
var_8 linkto( var_2 );
var_0 delete();
}
beach_artillery_balcony_logic()
{
common_scripts\utility::flag_wait( "FLAG_first_hovercraft_missile_hit" );
thread artillery_disable_player_mg();
if ( common_scripts\utility::flag( "player_on_chaingun_turret" ) )
common_scripts\utility::flag_waitopen( "player_on_chaingun_turret" );
var_0 = level.balcony;
bunker_balcony_damage_state( var_0 );
var_1 = var_0["mid"];
thread artillery_balcony_stumble( var_0 );
maps\_utility::delaythread( 3, maps\homecoming_util::create_dead_guys, "artillery_dead_bodies", undefined, "FLAG_start_trenches" );
var_2 = getglassarray( "balcony_glass" );
foreach ( var_4 in var_2 )
{
var_5 = randomfloatrange( 0, 0.8 );
common_scripts\utility::noself_delaycall( var_5, ::destroyglass, var_4, ( 0, 500, 0 ) );
common_scripts\utility::noself_delaycall( var_5 + 1, ::deleteglass, var_4 );
}
thread maps\homecoming_util::earthquake_loop( 0.12 );
common_scripts\utility::exploder( "bunker_artillery_raining_dirt" );
var_1 = var_0["mid"];
var_1 playrumblelooponentity( "steady_rumble" );
while ( !common_scripts\utility::flag( "FLAG_artillery_sequence_done" ) )
{
var_7 = randomfloatrange( 0.4, 0.8 );
var_1 rotateto( var_1.angles + ( -2.5, 0, 0 ), var_7, var_7 / 2, var_7 / 2 );
var_1 waittill( "rotatedone" );
var_1 rotateto( var_1.angles + ( 2.5, 0, 0 ), var_7, var_7 / 2, var_7 / 2 );
var_1 waittill( "rotatedone" );
}
var_1 stoprumble( "steady_rumble" );
maps\_utility::delaythread( 0.5, maps\_utility::stop_exploder, "bunker_artillery_raining_dirt" );
level.player notify( "stop_earthquake_loop" );
}
artillery_balcony_stumble( var_0 )
{
artillery_balcony_stumblers_setup( var_0 );
foreach ( var_2 in level.balconystumblers )
{
if ( !isdefined( var_2 ) )
continue;
var_3 = var_2.balconyent;
var_2 linkto( var_3 );
var_3 thread maps\_anim::anim_single_solo( var_2, "balcony_stumble" );
var_2 thread artillery_balcony_stumble_skip();
}
}
artillery_balcony_stumble_skip()
{
var_0 = randomfloatrange( 3, 4 );
wait( var_0 );
self setanimtime( maps\_utility::getanim( "balcony_stumble" ), 0.53 );
}
artillery_balcony_stumblers_setup( var_0 )
{
level.secondarygunner.current_follow_path = getnode( "secondary_gunner_node", "targetname" );
var_1 = [ level.hesh, level.secondarygunner ];
var_1 = common_scripts\utility::array_combine( var_1, level.intro_rangers );
foreach ( var_3 in var_1 )
{
var_4 = var_3.current_follow_path;
var_5 = spawn( "script_origin", var_4.origin );
var_5.angles = var_4.angles;
var_5.script_noteworthy = var_4.script_noteworthy;
var_5 linkto( var_0[var_4.script_noteworthy] );
var_3.balconyent = var_5;
}
level.balconystumblers = var_1;
}
artillery_disable_player_mg()
{
var_0 = getent( "bunker_turret", "targetname" );
level.player maps\_chaingun_player::chaingun_turret_disable( var_0 );
common_scripts\utility::flag_wait( "FLAG_artillery_sequence_done" );
var_0 thread maps\_chaingun_player::chaingun_turret_init( 1 );
}
beach_wave1_artillery_drones()
{
var_0 = level.artillery_hit_drones;
var_1 = undefined;
var_2 = maps\homecoming_util::get_ai_array( "inital_beach_guys" );
foreach ( var_4 in var_2 )
{
if ( var_4 maps\homecoming_util::parameters_check( "artillery" ) )
var_1 = var_4;
}
var_6 = [ "artillery_death_1", "artillery_death_2", "artillery_death_3" ];
level waittill( "beach_artillery_hit_drones" );
var_1 maps\homecoming_util::delete_safe();
foreach ( var_12, var_8 in var_0 )
{
var_8 notify( "stop_drone_fighting" );
var_8 maps\_utility::anim_stopanimscripted();
var_8.animname = "generic";
var_9 = common_scripts\utility::random( var_6 );
var_10 = common_scripts\utility::getstruct( var_8.target, "targetname" );
var_10 thread maps\_anim::anim_generic( var_8, var_9 );
var_11 = getanimlength( maps\_utility::getanim_generic( var_9 ) );
var_8 common_scripts\utility::delaycall( var_11, ::startragdoll );
var_8 maps\_utility::delaythread( var_11 + 0.5, maps\homecoming_util::delete_safe );
wait 0.15;
}
}
artillery_smoke_grenade()
{
var_0 = common_scripts\utility::getstruct( "beach_red_smoke_throwspot", "targetname" );
var_1 = common_scripts\utility::getstruct( var_0.target, "targetname" );
var_2 = magicgrenade( "smoke_grenade_signal", var_0.origin, var_1.origin, 9999 );
var_3 = var_2 common_scripts\utility::spawn_tag_origin();
var_3 linkto( var_2 );
var_3 thread maps\homecoming_util::playloopingfx( "smoke_red_trail", 0.05, undefined, "tag_origin" );
wait 2;
var_3 notify( "stop_looping_fx" );
var_3 unlink();
var_3.angles = var_1.angles;
playfxontag( common_scripts\utility::getfx( "red_signal_smoke" ), var_3, "tag_origin" );
var_2 delete();
common_scripts\utility::flag_set( "FLAG_stop_wave1_trench_loops" );
common_scripts\utility::flag_wait( "FLAG_artillery_sequence_done" );
var_3 delete();
}
beach_wave1_dialog()
{
common_scripts\utility::flag_wait( "FLAG_balcony_gunner_hit" );
level.secondarygunner maps\_utility::dialogue_queue( "homcom_smg_welcometotheshit" );
common_scripts\utility::flag_wait( "TRIGFLAG_player_at_balcony" );
level.hesh maps\_utility::dialogue_queue( "homcom_hsh_getonthatgun" );
level.hesh maps\_utility::dialogue_queue( "homcom_hsh_enemytanksoverlrodwhere" );
maps\_utility::radio_dialogue( "homcom_com_fornowyouregoing" );
level.hesh maps\_utility::dialogue_queue( "homcom_hsh_makeitquickor" );
common_scripts\utility::flag_wait( "FLAG_wave1_right_helicopter" );
wait 0.1;
if ( !issentient( level.secondbunkerheli ) && isdefined( level.secondbunkerheli ) || isalive( level.secondbunkerheli ) )
level.secondbunkerheli maps\_utility::ent_flag_wait( "landing_gear" );
level.secondarygunner thread maps\_utility::dialogue_queue( "homcom_us1_rightsiderightside" );
if ( !issentient( level.secondbunkerheli ) && isdefined( level.secondbunkerheli ) || isalive( level.secondbunkerheli ) )
level.secondbunkerheli maps\_utility::ent_flag_wait( "unload_complete" );
level.secondarygunner maps\_utility::dialogue_queue( "homcom_us1_keepfiringbringit" );
if ( !issentient( level.thirdbunkerheli ) && isdefined( level.thirdbunkerheli ) || isalive( level.thirdbunkerheli ) )
level.thirdbunkerheli maps\_utility::ent_flag_wait( "landing_gear" );
level.secondarygunner maps\_utility::dialogue_queue( "homcom_us1_anotherhelicopterdownthe" );
if ( !issentient( level.thirdbunkerheli ) && isdefined( level.thirdbunkerheli ) || isalive( level.thirdbunkerheli ) )
level.thirdbunkerheli maps\_utility::ent_flag_wait( "unload_complete" );
level.secondarygunner maps\_utility::dialogue_queue( "homcom_us1_keepfiringkeepfiring" );
}
beach_wave1_artillery_dialog()
{
wait 4;
level.secondarygunner maps\_utility::dialogue_queue( "homcom_us1_theyreretreating" );
common_scripts\utility::flag_wait( "FLAG_beach_start_wave_2" );
wait 1;
maps\_utility::smart_radio_dialogue( "homcom_so3_enemysmoketheyremarking" );
level.hesh maps\_utility::dialogue_queue( "homcom_hsh_getdownenemyartillery" );
common_scripts\utility::flag_wait( "FLAG_start_artillery_sequence" );
wait 0.5;
level.hesh thread maps\_utility::dialogue_queue( "homcom_hsh_holdon" );
}
beach_wave2_logic()
{
var_0 = getentarray( "beach_hovercraft_loopers", "script_noteworthy" );
common_scripts\utility::array_thread( var_0, ::beach_hovercraft_looper );
common_scripts\utility::flag_wait( "FLAG_artillery_sequence_done" );
thread maps\_utility::autosave_by_name( "bunker_wave2" );
thread beach_wave2_dialogue();
level.wave2_vehiclewatcher = 0;
thread beach_battlehinds_start();
thread beach_wave2_inithinds();
maps\_utility::delaythread( 5, common_scripts\utility::flag_set, "FLAG_wave2_hinds" );
var_1 = maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "bunker_wave3_drivein_tank" );
common_scripts\utility::array_thread( var_1, ::beach_wave2_tank_setup );
var_2 = getentarray( "beach_front_attackers", "targetname" );
maps\_utility::array_spawn_function( var_2, maps\homecoming_util::set_ai_array, "beach_front_attackers" );
common_scripts\utility::array_thread( var_2, ::bunker_beach_attackers );
var_3 = getentarray( "beach_front_runners", "targetname" );
foreach ( var_5 in var_3 )
{
var_5.drone_lookahead_value = 256;
var_6 = 0;
if ( isdefined( var_5.script_wait ) )
var_6 = var_5.script_wait;
var_5 maps\_utility::delaythread( var_6, maps\homecoming_drones::beach_path_drones );
}
var_8 = common_scripts\utility::getstructarray( "hovercraft_drone_fightspots_reference", "targetname" );
foreach ( var_10 in var_8 )
{
var_11 = var_10 maps\_utility::get_linked_structs();
common_scripts\utility::array_thread( var_11, maps\homecoming_drones::hovercraft_drone_fightspots );
}
var_13 = common_scripts\utility::getstructarray( "fake_beach_javelins", "targetname" );
foreach ( var_15 in var_13 )
{
var_16 = undefined;
if ( isdefined( var_15.target ) )
var_16 = common_scripts\utility::getstructarray( var_15.target, "targetname" );
if ( var_15 maps\homecoming_util::parameters_check( "target_tanks" ) )
var_15.javelin_smarttargeting = 1;
var_15 thread maps\homecoming_drones::drone_fire_fake_javelin_loop( var_16 );
}
common_scripts\utility::flag_wait( "FLAG_a10_return_flybys" );
thread beach_a10_return_flybys();
maps\_utility::delaythread( 5, maps\homecoming_util::a10_vista_strafe_group, "vista_pier_a10s" );
maps\_utility::delaythread( 5, maps\homecoming_util::a10_vista_strafe_group, "vista_ship_a10s" );
common_scripts\utility::flag_wait( "FLAG_enable_bunker_a10_mechanic" );
thread maps\homecoming_a10::a10_strafe_mechanic( "bunker_player_a10_strafe_1" );
thread beach_balcony_collapse_watcher();
}
beach_wave2_dialogue()
{
common_scripts\utility::flag_wait( "FLAG_playerhind_targeting" );
wait 1;
level.hesh maps\_utility::dialogue_queue( "homcom_hsh_commandthisisraptor" );
maps\_utility::smart_radio_dialogue( "homcom_hqr_rogerraptor21air" );
level.hesh maps\_utility::dialogue_queue( "homcom_hsh_werelosingthebeach" );
common_scripts\utility::flag_set( "FLAG_allow_hind_to_target_player" );
wait( randomintrange( 10, 15 ) );
common_scripts\utility::flag_set( "FLAG_a10_return_flybys" );
wait 2;
maps\_utility::smart_radio_dialogue( "homcom_hqr_a10dronesupportis" );
common_scripts\utility::flag_set( "FLAG_enable_bunker_a10_mechanic" );
level.hesh maps\_utility::dialogue_queue( "homcom_hsh_thedronesareready" );
}
beach_a10_return_flybys()
{
var_0 = getentarray( "bunker_a10_return_flybys", "targetname" );
foreach ( var_2 in var_0 )
{
var_3 = 0;
if ( isdefined( var_2.script_wait ) )
var_3 = var_2.script_wait;
var_2 maps\_utility::delaythread( var_3, maps\_vehicle::spawn_vehicle_and_gopath );
}
}
beach_wave2_vehicle_watcher()
{
if ( !isdefined( level.wave2_vehiclewatcher ) )
return;
self waittill( "death", var_0 );
if ( isdefined( var_0 ) && isplayer( var_0 ) )
level.wave2_vehiclewatcher++;
if ( level.wave2_vehiclewatcher == 1 )
common_scripts\utility::flag_set( "FLAG_beach_start_wave_3" );
}
beach_wave2_tank_setup()
{
var_0 = self;
if ( !isdefined( level.beachtanks ) )
level.beachtanks = [];
level.beachtanks = common_scripts\utility::array_add( level.beachtanks, var_0 );
var_0.firetime[0] = 3;
var_0.firetime[1] = 8;
level.javelintargets = common_scripts\utility::array_add( level.javelintargets, var_0 );
var_0 thread maps\homecoming_a10::set_a10_strafe_target_vehicle();
var_0 thread maps\homecoming_util::vehicle_allow_player_death();
target_set( var_0, ( 0, 0, 50 ) );
target_hidefromplayer( var_0, level.player );
}
beach_wave2_inithinds()
{
level endon( "FLAG_start_balcony_collapse" );
level.playerhind_attackspots = [];
level.playerhind_attackspots["default"] = [];
var_0 = common_scripts\utility::getstructarray( "beach_wave2_hind_targets", "targetname" );
foreach ( var_2 in var_0 )
{
if ( isdefined( var_2.script_noteworthy ) )
{
var_3 = var_2.script_noteworthy;
if ( !isdefined( level.playerhind_attackspots[var_3] ) )
level.playerhind_attackspots[var_3] = [];
level.playerhind_attackspots[var_3] = common_scripts\utility::array_add( level.playerhind_attackspots[var_3], var_2 );
continue;
}
level.playerhind_attackspots["default"] = common_scripts\utility::array_add( level.playerhind_attackspots["default"], var_2 );
}
var_5 = "bunker_player_attacker_hind";
for (;;)
{
beach_wave2_playerhind_init( var_5 );
var_5 = "bunker_player_attacker_hind_respawner";
wait( randomintrange( 8, 15 ) );
}
}
beach_wave2_playerhind_init( var_0 )
{
var_1 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( var_0 );
level.playerattackerhind = var_1;
level.strafetargetvehicles = common_scripts\utility::array_add( level.strafetargetvehicles, var_1 );
var_1 thread maps\homecoming_util::vehicle_allow_player_death( undefined, ::beach_wave2_playerhind_deathfunc );
var_1.currentattackgroup = "undefined";
var_1 waittill( "start_targeting_player" );
common_scripts\utility::flag_set( "FLAG_playerhind_targeting" );
var_1 thread beach_playerhind_attack_logic();
var_1 thread beach_hind_balcony_logic();
var_1 thread playerhind_kill_player_watcher();
var_1 waittill( "reached_dynamic_path_end" );
var_1 thread beach_wave2_playerhind_path_logic();
var_1 waittill( "death" );
common_scripts\utility::flag_set( "FLAG_beach_start_wave_3" );
}
beach_wave2_playerhind_path_logic()
{
self endon( "death" );
self endon( "stop_pathing_logic" );
var_0 = self.currentnode;
var_1 = var_0 maps\_utility::get_linked_structs();
var_2 = [];
var_2["default"] = [];
foreach ( var_4 in var_1 )
{
if ( isdefined( var_4.script_parameters ) )
{
var_5 = var_4.script_parameters;
if ( !isdefined( var_2[var_5] ) )
var_2[var_5] = [];
var_2[var_5] = common_scripts\utility::array_add( var_2[var_5], var_4 );
continue;
}
var_2["default"] = common_scripts\utility::array_add( var_2["default"], var_4 );
}
for (;;)
{
thread beach_wave2_playerhind_pathing( var_2["default"] );
var_7 = common_scripts\utility::waittill_notify_or_timeout_return( "evading_missile", randomintrange( 10, 15 ) );
if ( !common_scripts\utility::flag( "player_not_doing_strafe" ) )
continue;
common_scripts\utility::flag_set( "FLAG_hind_is_targeting_player" );
thread beach_wave2_playerhind_strafe( var_2["strafe"] );
if ( isdefined( level.balconystumblers ) )
common_scripts\utility::array_thread( level.balconystumblers, ::balcony_allies_playerhind_logic, self );
thread playerhind_target_player_dialogue();
thread playerhind_player_hind_hint();
common_scripts\utility::flag_waitopen( "FLAG_hind_is_targeting_player" );
self notify( "stop_firing" );
self.currentattackgroup = "undefined";
self.script_burst_min = undefined;
self.script_burst_max = undefined;
}
}
beach_wave2_playerhind_pathing( var_0, var_1 )
{
self endon( "death" );
self notify( "new_tower_path" );
self endon( "new_tower_path" );
self endon( "stop_pathing_logic" );
self vehicle_setspeed( 40, 40, 10 );
self setneargoalnotifydist( 64 );
var_2 = "default";
if ( isdefined( var_1 ) )
var_2 = var_1;
var_3 = var_0;
var_4 = common_scripts\utility::getclosest( self.origin, var_3 );
for (;;)
{
self notify( "new_goal" );
self vehicle_helisetai( var_4.origin, undefined, undefined, undefined, var_4.script_goalyaw, var_4.angles, var_4.angles[1], 0, 0, 0, 0, 0, 1 );
self waittill( "near_goal" );
if ( var_4 maps\homecoming_util::noteworthy_check( "missiles_fire" ) )
thread maps\homecoming_util::heli_fire_missiles( undefined, 1, "tag_missile_left", 0, "missile_attackheli_no_explode" );
var_5 = var_2;
if ( isdefined( var_4.script_parameters ) )
var_5 = var_4.script_parameters;
if ( var_5 != self.currentattackgroup )
{
self.currentattackgroup = var_5;
var_6 = undefined;
if ( var_5 == "strafe" )
{
self.targetingplayer = 1;
var_6 = level.player;
}
else
{
self.targetingplayer = 0;
var_6 = level.playerhind_attackspots[var_5];
}
self notify( "new_targets", var_6 );
}
self waittill( "near_goal" );
self vehicle_setspeed( 15, 5, 5 );
wait( randomfloat( 2 ) );
var_3 = common_scripts\utility::array_remove( var_0, var_4 );
var_4 = var_3[randomint( var_3.size )];
}
}
beach_wave2_playerhind_strafe( var_0 )
{
self endon( "death" );
self notify( "new_tower_path" );
self notify( "stop_firing" );
self notify( "fire_at_target" );
var_1 = common_scripts\utility::getclosest( self.origin, var_0 );
thread beach_playerhind_strafe_attack( self.targetent, var_1 );
self vehicle_helisetai( var_1.origin, 40, 40, 10, var_1.script_goalyaw, var_1.angles, var_1.angles[1], 0, 0, 0, 0, 0, 1 );
self waittill( "near_goal" );
var_2 = common_scripts\utility::getstruct( "beachhind_strafe_mid", "targetname" );
var_3 = common_scripts\utility::getstruct( var_1.script_linkto, "script_linkname" );
var_4 = [ var_2, var_3, var_2, var_1 ];
var_5 = 22;
foreach ( var_7 in var_4 )
{
var_8 = 1;
if ( var_7 == var_2 )
var_8 = 0;
self vehicle_helisetai( var_7.origin, var_5, var_5 * 2.5, var_5 * 2.5, 0, 1, var_7.angles[1], 0, 0, 0, 0, 0, 0 );
maps\_utility::add_wait( maps\_utility::waittill_msg, "near_goal" );
level maps\_utility::add_wait( common_scripts\utility::flag_wait, "player_inside_a10" );
maps\_utility::do_wait_any();
if ( common_scripts\utility::flag( "player_inside_a10" ) )
break;
}
if ( !common_scripts\utility::flag( "player_inside_a10" ) )
{
self vehicle_helisetai( var_1.origin, 40, 40, 10, var_1.script_goalyaw, var_1.angles, var_1.angles[1], 0, 0, 0, 0, 0, 1 );
wait 1;
}
common_scripts\utility::flag_clear( "FLAG_hind_is_targeting_player" );
}
beach_playerhind_strafe_attack( var_0, var_1 )
{
self endon( "death" );
var_2 = common_scripts\utility::getstruct( var_1.target, "targetname" );
var_0.origin = var_2.origin;
var_3 = var_2 maps\homecoming_util::get_linked_struct();
self setturrettargetent( var_0 );
self waittill( "near_goal" );
var_4 = spawn( "script_origin", var_2.origin );
thread beach_playerhind_strafe_turret( var_0, var_4 );
var_5 = 50;
var_6 = undefined;
var_7 = 1;
var_8 = self.origin[1];
while ( common_scripts\utility::flag( "FLAG_hind_is_targeting_player" ) )
{
if ( var_7 )
var_6 = var_8;
wait 0.05;
var_8 = self.origin[1];
var_9 = var_8 - var_6;
var_10 = var_9;
if ( var_9 < 0 )
var_10 = var_10 * -1;
if ( var_10 < var_5 )
{
var_7 = 0;
continue;
}
var_7 = 1;
var_11 = var_4.origin + ( 0, var_9, 0 );
var_12 = spawnstruct();
var_12.origin = var_11;
if ( maps\homecoming_util::postion_dot_check( var_2, var_12 ) == "behind" )
continue;
if ( maps\homecoming_util::postion_dot_check( var_3, var_12 ) == "behind" )
continue;
var_4.origin = var_11;
}
var_4 delete();
}
beach_playerhind_strafe_turret( var_0, var_1 )
{
self endon( "death" );
self.script_burst_min = 10000;
self.script_burst_max = 10001;
thread maps\homecoming_util::heli_fire_turret( var_0 );
var_2 = squared( 200 );
var_3 = 0;
while ( common_scripts\utility::flag( "FLAG_hind_is_targeting_player" ) )
{
var_4 = level.player getstance();
switch ( var_4 )
{
case "prone":
var_3 = randomintrange( 70, 100 );
break;
case "crouch":
var_3 = randomintrange( 70, 100 );
break;
case "stand":
var_3 = randomintrange( 5, 15 );
break;
}
var_5 = var_1.origin;
if ( distance2dsquared( level.player.origin, var_1.origin ) < var_2 )
var_5 = level.player.origin + ( 0, 0, 25 );
var_6 = maps\homecoming_util::return_point_in_circle( var_5, 70 );
var_6 = var_6 + ( 0, 0, var_3 );
var_0.origin = var_6;
wait 0.08;
}
}
beach_playerhind_attack_logic( var_0 )
{
var_1 = self;
var_1 endon( "death" );
var_1.targetingplayer = 0;
var_2 = spawn( "script_origin", ( 0, 0, 0 ) );
var_2 thread common_scripts\utility::delete_on_death( var_2 );
var_1.targetent = var_2;
var_3 = "default";
if ( isdefined( var_0 ) )
var_3 = var_0;
var_4 = level.playerhind_attackspots[var_3];
for (;;)
{
var_1 thread maps\homecoming_util::heli_fire_turret( var_2 );
var_1 thread beach_playerhind_attack_target( var_4, var_2 );
var_1 waittill( "new_targets", var_4 );
}
}
beach_playerhind_attack_target_player( var_0 )
{
self notify( "fire_at_target" );
self endon( "fire_at_target" );
self endon( "death" );
var_1 = undefined;
var_2 = maps\_utility::getdifficulty();
switch ( var_2 )
{
case "easy":
var_1 = 325;
break;
case "medium":
var_1 = 300;
break;
case "hard":
var_1 = 275;
break;
case "fu":
var_1 = 275;
break;
}
var_3 = 80;
self.helifirecheap = undefined;
self setlookatent( level.player );
var_4 = getent( "player_at_balcony_flagTrig", "targetname" );
for (;;)
{
var_5 = level.player.origin;
var_6 = level.player getstance();
if ( var_6 == "stand" || !level.player istouching( var_4 ) )
var_3 = randomintrange( 25, 40 );
else
var_3 = randomintrange( 100, 150 );
var_7 = randomfloatrange( 0.2, 0.4 ) * 1000;
var_8 = gettime();
while ( gettime() - var_8 < var_7 )
{
var_9 = maps\homecoming_util::return_point_in_circle( var_5, var_1 );
var_9 = ( var_9[0], var_9[1], var_5[2] + var_3 );
var_0.origin = var_9;
wait 0.1;
}
}
}
beach_playerhind_attack_target( var_0, var_1 )
{
self notify( "fire_at_target" );
self endon( "fire_at_target" );
self endon( "death" );
self clearlookatent();
for (;;)
{
var_2 = common_scripts\utility::random( var_0 );
var_3 = undefined;
if ( isdefined( var_2.height ) )
var_3 = var_2.height;
var_4 = var_2.radius;
var_5 = randomintrange( 5, 10 ) * 1000;
var_6 = gettime();
while ( gettime() - var_6 < var_5 )
{
var_7 = maps\homecoming_util::return_point_in_circle( var_2.origin, 128, var_3 );
var_1.origin = var_7;
wait 0.4;
}
if ( common_scripts\utility::cointoss() )
wait( randomfloatrange( 0.4, 0.8 ) );
}
}
beach_hind_balcony_logic()
{
var_0 = self;
var_0 endon( "death" );
foreach ( var_2 in level.balconystumblers )
var_2.alreadystumbling = 0;
var_4 = [];
var_5 = getentarray( "balcony_playercheck_triggers", "targetname" );
foreach ( var_7 in var_5 )
var_4[var_7.script_noteworthy] = var_7;
var_9 = getentarray( "hind_balcony_missile_targets", "targetname" );
var_10 = var_9;
for (;;)
{
wait( randomintrange( 6, 9 ) );
if ( var_0.targetingplayer == 1 )
continue;
if ( common_scripts\utility::flag( "FLAG_hind_is_targeting_player" ) )
continue;
var_11 = undefined;
while ( !isdefined( var_11 ) )
{
var_12 = common_scripts\utility::random( var_10 );
if ( !level.player istouching( var_4[var_12.script_noteworthy] ) )
var_11 = var_12;
wait 0.1;
}
var_0 beach_hind_balcony_missile_logic( var_11 );
var_10 = common_scripts\utility::array_remove( var_9, var_11 );
}
}
beach_hind_balcony_missile_logic( var_0 )
{
var_1 = var_0.script_noteworthy;
var_2 = squared( 250 );
var_3 = squared( 1000 );
var_4 = 0;
foreach ( var_6 in level.balconystumblers )
{
var_7 = var_6.balconyent;
if ( !isdefined( var_7 ) )
continue;
if ( var_7.script_noteworthy == var_1 )
{
if ( var_6.alreadystumbling == 1 )
return;
var_8 = common_scripts\utility::random( [ "tag_missile_left", "tag_missile_right" ] );
var_9 = maps\homecoming_util::heli_fire_missiles( var_0, 1, var_8, 0, "missile_attackheli_no_explode" );
var_9 waittill( "death" );
var_10 = 0;
if ( isdefined( var_9 ) )
{
playfx( common_scripts\utility::getfx( "heli_missile_explosion" ), var_9.origin );
var_11 = distancesquared( var_9.origin, level.player.origin );
if ( var_11 <= var_2 )
level.player shellshock( "default", 2 );
var_11 = distancesquared( var_9.origin, var_7.origin );
if ( var_11 <= var_3 )
var_10 = 1;
}
if ( var_10 )
var_6 thread beach_tank_balcony_stumble( var_7 );
}
}
}
playerhind_destory_balcony_mg()
{
var_0 = getentarray( "playerhind_mg_missile_spots", "targetname" );
var_0 = maps\_utility::array_index_by_script_index( var_0 );
common_scripts\utility::flag_wait( "FLAG_playerhind_destroy_mg" );
var_1 = 1;
var_2 = "tag_missile_left";
var_3 = 0;
foreach ( var_5 in var_0 )
{
var_6 = maps\homecoming_util::heli_fire_missiles( var_5, 1, var_2, 0, "missile_attackheli_no_explode" );
var_6 thread playerhind_destory_balcony_mg_missiles( var_1 );
var_1 = 0;
var_2 = "tag_missile_right";
wait 0.2;
}
}
playerhind_destory_balcony_mg_missiles( var_0 )
{
var_1 = self;
var_2 = squared( 250 );
var_3 = squared( 1000 );
var_1 waittill( "death" );
playfx( common_scripts\utility::getfx( "heli_missile_explosion" ), var_1.origin );
var_4 = distancesquared( var_1.origin, level.player.origin );
if ( var_4 <= var_2 )
level.player shellshock( "default", 2 );
if ( var_0 )
{
var_5 = level.balcony_turret;
var_5.destroyed = 1;
level.player maps\_chaingun_player::chaingun_turret_disable( var_5 );
playfx( common_scripts\utility::getfx( "vfx_smoking_gun" ), var_5 gettagorigin( "j_mg" ), anglestoup( var_5 gettagangles( "j_mg" ) ) );
var_5 thread maps\homecoming_util::playloopingfx( "mg_sparks", 2.5, undefined, "j_mg", 1 );
var_5 setdefaultdroppitch( 20 );
}
}
playerhind_target_player_dialogue()
{
var_0 = [];
if ( !isdefined( self.laststrafeline ) )
self.laststrafeline = "";
if ( !isdefined( self.firststrafe ) || self.laststrafeline == "homcom_hsh_lookslikewereon" )
{
self.firststrafe = 1;
var_0 = [ "homcom_hsh_thoseenemytankshave", "homcom_hsh_tanksaremovingup" ];
}
else
var_0 = [ "homcom_hsh_lookslikewereon" ];
var_1 = common_scripts\utility::random( var_0 );
self.laststrafeline = var_1;
level.hesh thread maps\_utility::dialogue_queue( var_1 );
}
balcony_allies_playerhind_logic( var_0 )
{
self endon( "death" );
var_1 = level.balconystumblers;
var_2 = self.balconyent;
var_2 thread maps\_anim::anim_generic_loop( self, "coverstand_hide_idle" );
var_0 maps\_utility::add_wait( maps\_utility::waittill_msg, "death" );
maps\_utility::add_wait( common_scripts\utility::flag_waitopen, "FLAG_hind_is_targeting_player" );
maps\_utility::do_wait_any();
maps\_utility::anim_stopanimscripted();
var_2 notify( "stop_loop" );
}
playerhind_player_hind_hint()
{
var_0 = undefined;
var_1 = maps\_utility::getdifficulty();
switch ( var_1 )
{
case "easy":
var_0 = 0;
break;
case "medium":
var_0 = 0;
break;
case "hard":
var_0 = 1;
break;
case "fu":
var_0 = 1;
break;
}
var_2 = getdvarint( "balcony_hind_killed_player" );
if ( var_2 < var_0 )
return;
var_3 = getkeybinding( "+stance" );
var_4 = getkeybinding( "toggleprone" );
var_5 = getkeybinding( "+prone" );
if ( isdefined( var_3 ) && var_3["count"] > 0 )
maps\_utility::display_hint( "hind_prone_hint_hold" );
else if ( isdefined( var_4 ) && var_4["count"] > 0 )
maps\_utility::display_hint( "hind_prone_hint_toggle" );
else if ( isdefined( var_5 ) && var_5["count"] > 0 )
maps\_utility::display_hint( "hind_prone_hint" );
}
playerhind_kill_player_watcher()
{
self endon( "death" );
level.player waittill( "death", var_0 );
if ( !isdefined( var_0 ) )
return;
if ( var_0 != self )
return;
if ( !common_scripts\utility::flag( "FLAG_hind_is_targeting_player" ) )
return;
var_1 = getdvarint( "balcony_hind_killed_player" );
var_1++;
setdvar( "balcony_hind_killed_player", var_1 );
}
beach_tank_balcony_stumble( var_0 )
{
if ( self.alreadystumbling == 1 )
return;
self.alreadystumbling = 1;
var_1 = randomint( 4 );
var_2 = "balcony_stumble_short_" + var_1;
var_0 thread maps\_anim::anim_generic( self, var_2 );
var_3 = getanimlength( maps\_utility::getanim_generic( var_2 ) );
thread beach_tank_balcony_stumbler_notetrack( var_3 );
wait( var_3 - 0.2 );
self stopanimscripted();
self.alreadystumbling = 0;
}
beach_tank_balcony_stumbler_notetrack( var_0 )
{
self.dontdonotetracks = 1;
self notify( "stop_sequencing_notetracks" );
wait( var_0 );
self.dontdonotetracks = 0;
}
hind_projectile_damagestate( var_0 )
{
if ( isdefined( self.diddamagestate ) )
return;
if ( self.fakehealth > var_0 / 2 )
return;
thread hind_damagestate_painfx();
self.diddamagestate = 1;
self.doingdamagestate = 1;
var_1 = self.origin;
var_2 = randomint( 360 );
var_3 = anglestoforward( ( 0, var_2, 0 ) ) * 100;
var_3 = var_3 + var_1 + ( 0, 0, randomfloatrange( -175, -125 ) );
self setneargoalnotifydist( 20 );
self vehicle_setspeed( 60, 60, 40 );
self setvehgoalpos( var_3, 1 );
common_scripts\utility::waittill_any( "near_goal", "goal" );
self vehicle_setspeed( 15, 5, 5 );
wait 0.5;
self.doingdamagestate = undefined;
}
hind_damagestate_painfx()
{
self endon( "death" );
var_0 = "tag_engine_left";
var_1 = anglestoforward( self gettagangles( var_0 ) );
playfx( common_scripts\utility::getfx( "hind_damage_explosion" ), self gettagorigin( var_0 ), var_1 );
thread common_scripts\utility::play_sound_in_space( "hind_helicopter_hit", self.origin );
while ( isdefined( self ) && isalive( self ) )
{
var_2 = self gettagangles( var_0 );
var_1 = anglestoforward( var_2 );
playfx( common_scripts\utility::getfx( "hind_damage_trail" ), self gettagorigin( var_0 ), var_1 );
wait( randomfloatrange( 0.05, 0.2 ) );
}
}
beach_wave2_playerhind_deathfunc( var_0 )
{
if ( var_0 == "a10_30mm_player_homecoming" )
{
maps\homecoming_util::heli_enable_rocketdeath( 1 );
maps\_vehicle::godoff();
self notify( "death", level.player, undefined, var_0 );
return 1;
}
else
{
maps\_vehicle::godoff();
self.dontallowexplode = undefined;
self.forceexploding = 1;
self notify( "death", level.player, undefined, var_0 );
}
}
heli_laser_guided_missile_notify()
{
self endon( "death" );
for (;;)
{
level.player waittill( "guided_missile_fired", var_0 );
self notify( "missile_targeted", var_0 );
}
}
beach_wave3_tank_setup()
{
var_0 = self;
var_0.firetime[0] = 3;
var_0.firetime[1] = 8;
level.javelintargets = common_scripts\utility::array_add( level.javelintargets, var_0 );
var_0 thread maps\homecoming_a10::set_a10_strafe_target_vehicle();
var_0 thread maps\homecoming_util::vehicle_allow_player_death();
target_set( var_0, ( 0, 0, 50 ) );
target_hidefromplayer( var_0, level.player );
}
beach_tank_balcony_logic( var_0 )
{
var_1 = var_0.script_noteworthy;
var_2 = level.balcony[var_1];
if ( var_2.alreadyrotating == 1 )
return;
var_2.alreadyrotating = 1;
foreach ( var_4 in level.balconystumblers )
{
var_5 = var_4.balconyent;
if ( !isdefined( var_5 ) )
continue;
if ( var_5.script_noteworthy == var_1 )
var_4 thread beach_tank_balcony_stumble( var_5 );
}
for ( var_7 = 3; var_7 != 0; var_7-- )
{
var_8 = randomfloatrange( 0.4, 0.8 );
common_scripts\utility::exploder( "bust_" + var_1 );
var_2 rotateto( var_2.rotateangles, var_8, var_8 / 2, var_8 / 2 );
var_2 waittill( "rotatedone" );
var_8 = randomfloatrange( 0.4, 0.8 );
common_scripts\utility::exploder( "bust_" + var_1 );
var_2 rotateto( var_2.originalangles, var_8, var_8 / 2, var_8 / 2 );
var_2 waittill( "rotatedone" );
}
var_2.alreadyrotating = 0;
}
beach_wave1_ai( var_0 )
{
level endon( "FLAG_stop_wave1_loops" );
var_1 = maps\_utility::array_spawn( getentarray( var_0, "targetname" ) );
if ( var_1[0].team == "axis" )
var_2 = ::beach_enemy_default;
else
var_2 = ::beach_ally_default;
common_scripts\utility::array_thread( var_1, var_2 );
var_3 = getentarray( var_0 + "_respawners", "targetname" );
maps\_utility::array_spawn_function( var_3, var_2 );
var_4 = var_1.size;
for (;;)
{
wait( randomfloatrange( 0.5, 1.5 ) );
var_1 = maps\homecoming_util::get_ai_array( var_0 );
var_5 = var_4 - var_1.size;
for ( var_6 = 0; var_6 < var_5; var_6++ )
{
var_7 = var_3[randomint( var_3.size )];
var_8 = var_7 maps\_utility::spawn_ai();
wait( randomfloatrange( 0.4, 0.8 ) );
}
}
}
bunker_balcony_bullet_impacts_manager()
{
thread bunker_balcony_bullet_impacts();
common_scripts\utility::flag_wait( "FLAG_stop_wave1_loops" );
level notify( "stop_balcony_bullet_impacts" );
common_scripts\utility::flag_wait( "FLAG_beach_start_wave_2" );
thread bunker_balcony_bullet_impacts();
common_scripts\utility::flag_wait( "FLAG_balcony_fall_done" );
level notify( "stop_balcony_bullet_impacts" );
}
bunker_balcony_bullet_impacts()
{
level endon( "stop_balcony_bullet_impacts" );
var_0 = common_scripts\utility::getstructarray( "bunker_balcony_impacts", "targetname" );
var_1 = anglestoforward( ( 0, 180, 0 ) );
var_2 = [ "balcony_impact_sand_1", "balcony_impact_sand_1" ];
foreach ( var_4 in var_0 )
var_4 childthread bunker_balcony_bullet_impacts_think( var_1, var_2 );
}
bunker_balcony_bullet_impacts_think( var_0, var_1 )
{
var_2 = self;
var_3 = cos( 65 );
for (;;)
{
wait( randomfloatrange( 0.2, 0.8 ) );
if ( !maps\_utility::within_fov_2d( level.player geteye(), level.player getplayerangles(), var_2.origin, var_3 ) )
continue;
var_4 = int( var_2.height );
var_5 = var_2.radius;
var_6 = var_2.origin[0];
var_7 = var_2.origin[1] + randomintrange( var_5 * -1, var_5 );
var_8 = var_2.origin[2] + randomintrange( 0, var_4 );
var_9 = ( var_6, var_7, var_8 );
playfx( common_scripts\utility::getfx( common_scripts\utility::random( var_1 ) ), var_9, var_0 );
}
}
beach_ally_default()
{
self endon( "death" );
maps\_utility::delaythread( randomintrange( 8, 16 ), maps\_utility::die );
var_0 = getentarray( "beach_wave1_allies_targets", "targetname" );
for (;;)
{
var_1 = var_0[randomint( var_0.size )];
self setentitytarget( var_1 );
wait( randomfloatrange( 4, 8 ) );
}
}
drone_frontline_respawner( var_0 )
{
level endon( "FLAG_start_balcony_collapse" );
common_scripts\utility::flag_wait( "FLAG_artillery_sequence_done" );
wait( randomfloatrange( 0, 5 ) );
if ( isdefined( self ) )
{
self.customdeathanim = 1;
var_1 = randomfloatrange( 5, 20 );
maps\_utility::delaythread( var_1, maps\homecoming_drones::drone_death_custom );
common_scripts\utility::waittill_any( "death" );
}
var_2 = undefined;
for (;;)
{
var_3 = undefined;
while ( !isdefined( var_3 ) )
{
var_3 = var_0 maps\homecoming_drones::drone_spawn();
if ( !isdefined( var_3 ) )
wait 0.5;
}
var_2 = var_3;
var_3 maps\_utility::magic_bullet_shield();
level.beachfronelinedrones = common_scripts\utility::array_removeundefined( level.beachfronelinedrones );
level.beachfronelinedrones = common_scripts\utility::array_add( level.beachfronelinedrones, var_3 );
var_3 maps\homecoming_drones::drone_animate_on_path();
var_3.customdeathanim = 1;
var_3.nodroneweaponsound = 1;
var_1 = randomfloatrange( 5, 15 );
var_3 maps\_utility::delaythread( var_1, maps\homecoming_drones::drone_death_custom );
var_3 common_scripts\utility::waittill_any( "death" );
wait( randomfloatrange( 1, 5 ) );
}
if ( isdefined( var_2 ) )
var_2 maps\homecoming_util::delete_safe();
}
beach_hovercraft_looper()
{
var_0 = self;
level endon( "hovercraft_loopers_stop" );
if ( !isdefined( level.hovercraftloopers ) )
level.hovercraftloopers = [];
var_1 = var_0 common_scripts\utility::get_linked_ents();
var_2 = undefined;
foreach ( var_4 in var_1 )
{
if ( var_4 maps\homecoming_util::parameters_check( "starter" ) )
{
var_2 = var_4;
break;
}
}
if ( isdefined( var_2 ) )
{
var_6 = var_2 maps\_vehicle::spawn_vehicle_and_gopath();
var_6.hovercraftmissiletimeout = 4;
}
else
var_6 = var_0 maps\_vehicle::spawn_vehicle_and_gopath();
for (;;)
{
level.hovercraftloopers = common_scripts\utility::array_removeundefined( level.hovercraftloopers );
level.hovercraftloopers = common_scripts\utility::array_add( level.hovercraftloopers, var_6 );
var_6 vehicle_turnengineoff();
var_6 waittill( "hovercraft_spawn" );
var_6 = var_0 maps\_vehicle::spawn_vehicle_and_gopath();
}
}
bunker_enemy_cover_drones( var_0, var_1 )
{
if ( isdefined( var_0 ) )
level endon( var_0 );
for (;;)
{
var_2 = maps\homecoming_drones::drones_request( 1 );
if ( var_2 )
{
var_3 = maps\_utility::spawn_ai();
if ( isdefined( var_1 ) )
var_3 maps\homecoming_util::set_ai_array( var_1 );
var_3 maps\homecoming_drones::drones_death_watcher();
}
wait( randomintrange( 2, 3 ) );
}
}
bunker_beach_attackers()
{
level endon( "beach_attacker_logic_off" );
var_0 = common_scripts\utility::getstruct( self.target, "targetname" );
if ( !isdefined( var_0.aiamount ) )
var_0.aiamount = 0;
var_0.aiamount = var_0.aiamount + self.script_index;
var_0.aliveai = [];
for (;;)
{
var_0.aliveai = maps\_utility::remove_dead_from_array( var_0.aliveai );
if ( var_0.aiamount - var_0.aliveai.size < 1 )
{
wait 1;
continue;
}
while ( var_0.aiamount - var_0.aliveai.size > 0 )
{
common_scripts\utility::flag_wait( "player_not_doing_strafe" );
var_1 = maps\_utility::spawn_ai();
if ( !isdefined( var_1 ) )
{
wait 0.1;
continue;
}
var_0.aliveai[var_0.aliveai.size] = var_1;
var_1 thread bunker_beach_attackers_think( var_0 );
wait 0.1;
var_0.aliveai = maps\_utility::remove_dead_from_array( var_0.aliveai );
}
wait( randomintrange( 5, 10 ) );
}
}
bunker_beach_attackers_think( var_0 )
{
self endon( "death" );
if ( !isdefined( var_0 ) )
var_0 = common_scripts\utility::getstruct( self.target, "targetname" );
if ( !isdefined( var_0 ) )
return;
self.grenadeawareness = 0;
self setgoalpos( var_0.origin );
thread maps\homecoming_util::waittill_real_goal( var_0 );
var_1 = randomintrange( 8, 20 );
maps\_utility::delaythread( var_1, maps\_utility::die );
if ( !maps\homecoming_util::parameters_check( "ignore_nodes" ) )
level.beachfrontguys[level.beachfrontguys.size] = self;
level.bunker_beach_ai = common_scripts\utility::array_removeundefined( level.bunker_beach_ai );
level.bunker_beach_ai[level.bunker_beach_ai.size] = self;
}
bunker_beach_attackers_death( var_0 )
{
self endon( "death" );
var_1 = randomintrange( 25, 400 );
var_1 = squared( var_1 );
for (;;)
{
var_2 = distance2dsquared( self.origin, var_0.origin );
if ( var_2 <= var_1 )
self kill();
wait 0.1;
}
}
beach_bunker_stumble_event()
{
var_0 = self.spawner;
common_scripts\utility::flag_set( "FLAG_bunker_hallway_explosion" );
var_1 = common_scripts\utility::getstruct( "house_stairs_explosion_spot", "targetname" );
var_2 = var_0 maps\homecoming_util::get_linked_struct();
self.animname = "generic";
maps\_utility::gun_remove();
var_2 thread maps\_anim::anim_first_frame_solo( self, "wall_stumble" );
thread common_scripts\utility::play_sound_in_space( "scn_homecoming_house_incoming", var_1.origin );
wait 0.5;
thread common_scripts\utility::play_sound_in_space( "scn_homecoming_house_exp", var_1.origin );
var_2 thread beach_bunker_stumbler_sound();
var_3 = common_scripts\utility::getstructarray( "bunker_stairs_explosion_soundspot", "targetname" );
foreach ( var_5 in var_3 )
thread common_scripts\utility::play_sound_in_space( var_5.script_sound, var_5.origin );
common_scripts\utility::exploder( "hallway_exp" );
earthquake( 0.35, 0.8, var_1.origin, 5000 );
var_7 = common_scripts\utility::getstruct( "bunker_hallway_explosion_phys_struct", "targetname" );
physicsexplosionsphere( var_7.origin, 50, 25, 1.5 );
level.player shellshock( "homecoming_bunker", 2.5 );
level.player playrumbleonentity( "artillery_rumble" );
var_2 thread maps\_anim::anim_single_solo( self, "wall_stumble" );
common_scripts\utility::waitframe();
self setanimtime( maps\_utility::getanim_generic( "wall_stumble" ), 0.13 );
var_2 waittill( "wall_stumble" );
var_2 thread maps\_anim::anim_loop_solo( self, "wall_stumble_idle" );
common_scripts\utility::flag_wait( "FLAG_bunker_balcony_blocker_set" );
maps\homecoming_util::delete_safe();
}
beach_bunker_stumbler_sound()
{
var_0 = spawn( "trigger_radius", self.origin, 0, 250, 100 );
var_0 waittill( "trigger" );
common_scripts\utility::play_sound_in_space( "homcom_us2_moaninginpain" );
}
bunker_mg_guy()
{
self.animname = "primary_gunner";
maps\_utility::gun_remove();
self notsolid();
self.name = "";
self setlookattext( "", &"" );
level.secondarygunner = getent( "balcony_secondary_gunner", "targetname" ) maps\_utility::spawn_ai();
level.secondarygunner.animname = "secondary_gunner";
level.secondarygunner.name = "SGT. Harmer";
var_0 = [ self, level.secondarygunner ];
var_1 = common_scripts\utility::getstruct( "balcony_mg_scene", "targetname" );
var_1 thread maps\_anim::anim_single( var_0, "bunker_mg_scene" );
common_scripts\utility::waitframe();
var_1 maps\_anim::anim_set_rate( var_0, "bunker_mg_scene", 0 );
var_1 maps\_anim::anim_set_time( var_0, "bunker_mg_scene", 0.47 );
common_scripts\utility::flag_wait( "FLAG_start_bunker" );
var_1 maps\_anim::anim_set_rate( var_0, "bunker_mg_scene", 1 );
common_scripts\utility::flag_wait( "FLAG_balcony_gunner_hit" );
var_2 = anglestoforward( self gettagangles( "j_head" ) );
playfx( common_scripts\utility::getfx( "headshot_blood" ), self gettagorigin( "j_head" ), var_2 * -1 );
self linkto( level.balcony["mid"] );
}
beach_front_nodes_think()
{
var_0 = self;
var_1 = squared( 350 );
for (;;)
{
if ( isdefined( var_0.currentowner ) )
{
var_0.currentowner waittill( "death" );
var_0.currentowner = undefined;
}
for (;;)
{
level.beachfrontguys = maps\_utility::array_removedead_or_dying( level.beachfrontguys );
var_2 = sortbydistance( level.beachfrontguys, var_0.origin );
var_3 = undefined;
foreach ( var_5 in var_2 )
{
if ( isdefined( var_5.hasnode ) )
continue;
if ( maps\homecoming_util::postion_dot_check( var_0, var_5 ) == "infront" )
continue;
if ( distance2dsquared( var_0.origin, var_5.origin ) <= var_1 )
{
var_6 = var_5.origin[2] - var_0.origin[2];
if ( var_6 > 80 )
continue;
var_3 = var_5;
break;
}
}
if ( isdefined( var_3 ) && isalive( var_3 ) )
{
var_3 setgoalnode( var_0 );
var_3 thread maps\homecoming_util::goal_radius_constant( 16 );
var_3 notify( "setting_new_goal" );
var_0.currentowner = var_3;
var_3.hasnode = 1;
break;
}
wait 0.1;
}
}
}
bunker_vehicle_javelin_watcher( var_0 )
{
var_0 endon( "unload_complete" );
var_0 endon( "death" );
for (;;)
{
level.player waittill( "missile_fire", var_1, var_2 );
if ( var_2 == "javelin_dcburn" && level.javelinlockfinalized == 1 )
{
var_3 = level.javelintarget;
if ( var_0 == var_3 )
{
wait 2.5;
var_0 maps\_utility::ent_flag_set( "unload_interrupted" );
return;
}
}
}
}
beach_hovercraft_tanks_default()
{
self.firetime = [ 2.5, 5 ];
thread maps\homecoming_util::vehicle_path_notifications();
thread maps\homecoming_util::vehicle_allow_player_death();
common_scripts\utility::waitframe();
maps\_utility::ent_flag_wait( "hovercraft_unload_complete" );
if ( !isdefined( level.hovercrafttanks ) )
level.hovercrafttanks = [];
level.hovercrafttanks[level.hovercrafttanks.size] = self;
level.bunker_beach_vehicles[level.bunker_beach_vehicles.size] = self;
}
beach_vehicle_default()
{
thread maps\homecoming_util::vehicle_allow_player_death();
thread maps\homecoming_util::javelin_target_set( self, ( 0, 0, 80 ) );
thread maps\homecoming_util::vehicle_path_notifications();
}
beach_battlehinds_start()
{
level.beachhinds = [];
var_0 = getentarray( "beach_starting_hinds", "targetname" );
foreach ( var_2 in var_0 )
{
var_3 = var_2 maps\_vehicle::spawn_vehicle_and_gopath();
var_3.firesoundoverride = "weap_hind_20home_fire_npc";
var_3 thread beach_battlehinds_manager( var_2 );
}
}
beach_battlehinds_manager( var_0 )
{
level endon( "stop_beach_hinds" );
var_1 = self;
level.beach_ambient_hinds = [];
var_2 = [];
if ( isdefined( var_1.script_linkto ) )
var_2 = var_1 common_scripts\utility::get_linked_ents();
else
var_2 = common_scripts\utility::array_add( var_2, var_0 );
var_3 = var_2;
for (;;)
{
level.beach_ambient_hinds = common_scripts\utility::array_add( level.beach_ambient_hinds, var_1 );
var_1 thread beach_battlehind_default();
var_1 vehicle_turnengineoff();
var_1 waittill( "death", var_4 );
level.beach_ambient_hinds = common_scripts\utility::array_remove( level.beach_ambient_hinds, var_1 );
if ( isdefined( var_4 ) && isplayer( var_4 ) )
break;
wait( randomintrange( 1, 3 ) );
var_0 = var_3[randomint( var_3.size )];
var_1 = var_0 maps\_vehicle::spawn_vehicle_and_gopath();
if ( var_2.size > 1 )
var_3 = common_scripts\utility::array_remove( var_2, var_0 );
}
}
beach_battlehind_default()
{
level.beachhinds[level.beachhinds.size] = self;
thread maps\homecoming_util::vehicle_path_notifications();
thread maps\homecoming_util::vehicle_allow_player_death();
thread maps\homecoming_util::heli_enable_rocketdeath();
level.strafevehicles = common_scripts\utility::array_add( level.strafevehicles, self );
self waittill( "death" );
level.beachhinds = common_scripts\utility::array_remove( level.beachhinds, self );
}
beach_battlehind_rpgers( var_0 )
{
self endon( "death" );
missile_createrepulsorent( self, 750, 1000 );
for (;;)
{
wait( randomfloatrange( 8, 16 ) );
var_1 = common_scripts\utility::getclosest( self.origin, var_0 );
magicbullet( "rpg_cheap", var_1.origin, self.origin );
}
}
beach_bunker_drones()
{
var_0 = getentarray( "bunker_beach_drones", "targetname" );
foreach ( var_2 in var_0 )
{
var_3 = var_2 maps\_utility::spawn_ai();
var_3.drone_idle_custom = 1;
var_3.drone_idle_override = maps\homecoming_drones::drone_fight_smart;
var_3 thread maps\homecoming_util::waittill_death_respawn( var_2, 1.2, 2.4 );
}
}
#using_animtree("generic_human");
bunker_trench_drones()
{
level endon( "FLAG_stop_trench_drones" );
var_0 = self;
for (;;)
{
var_1 = maps\homecoming_drones::drones_request( 1 );
if ( !var_1 )
{
wait 0.1;
continue;
}
var_2 = var_0 maps\_utility::spawn_ai();
wait( randomintrange( 15, 25 ) );
var_3 = [ %stand_death_tumbleback, %stand_death_headshot_slowfall, %stand_death_shoulderback ];
var_2.deathanim = var_3[randomint( var_3.size )];
var_2 dodamage( var_2.health + 10, var_2.origin );
wait( randomintrange( 4, 8 ) );
}
}
bunker_trench_drone_runners()
{
var_0 = getentarray( "bunker_trench_runners", "targetname" );
var_1 = [ "run" ];
var_2 = [ "drone_fad_fire_npc", "drone_r5rgp_fire_npc" ];
var_3 = [ 3.2, 5 ];
var_0 thread maps\homecoming_drones::drone_infinite_runners( "FLAG_stop_trench_drones", var_3, var_1, var_2 );
}
bunker_javelin_drones()
{
var_0 = self.spawner;
if ( isdefined( var_0.script_linkto ) )
self.javtargets = getentarray( var_0.script_linkto, "script_linkname" );
self.javelin_smarttargeting = 1;
self.drone_idle_custom = 1;
self.drone_idle_override = maps\homecoming_drones::drone_fire_fake_javelin_loop;
thread maps\_utility::magic_bullet_shield();
}
beach_enemy_default( var_0 )
{
if ( !isdefined( self ) )
return;
self.health = 200;
self.ignorerandombulletdamage = 1;
self.grenadeawareness = 0;
self.disablebulletwhizbyreaction = 1;
self.ignoresuppression = 1;
self.norunngun = 1;
self.a.disablelongdeath = 1;
self.goalradius = 56;
self setthreatbiasgroup( "beach_enemies" );
thread beach_enemy_default_targeting();
}
beach_enemy_default_targeting()
{
self endon( "death" );
var_0 = getentarray( "beach_enemy_targets", "targetname" );
for (;;)
{
var_1 = level common_scripts\utility::waittill_notify_or_timeout_return( "beach_enemies_attack_player", randomintrange( 2, 5 ) );
if ( isdefined( var_1 ) )
{
self.favoriteenemy = undefined;
var_2 = common_scripts\utility::random( var_0 );
self setentitytarget( var_2 );
continue;
}
self clearentitytarget();
self.favoriteenemy = level.player;
level waittill( "beach_enemies_attack_player_stop" );
}
}
beach_enemy_attack_player_manager()
{
level endon( "FLAG_start_balcony_collapse" );
var_0 = undefined;
var_1 = undefined;
var_2 = maps\_utility::getdifficulty();
switch ( var_2 )
{
case "easy":
var_0 = randomintrange( 5, 10 );
var_1 = randomintrange( 10, 15 );
break;
case "medium":
var_0 = randomintrange( 5, 10 );
var_1 = randomintrange( 10, 15 );
break;
case "hard":
var_0 = randomintrange( 5, 10 );
var_1 = randomintrange( 5, 10 );
break;
case "fu":
var_0 = randomintrange( 5, 10 );
var_1 = randomintrange( 5, 10 );
break;
}
for (;;)
{
wait( var_1 );
if ( level.player.health != level.player.maxhealth )
continue;
level notify( "beach_enemies_attack_player" );
level.player setthreatbiasgroup();
var_3 = gettime();
for (;;)
{
if ( gettime() - var_3 >= var_0 * 1000 )
break;
if ( level.player.health <= 50 )
break;
wait 0.1;
}
level.player setthreatbiasgroup( "bunker_allies" );
level notify( "beach_enemies_attack_player_stop" );
}
}