mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-23 09:35:45 +00:00
997 lines
28 KiB
Plaintext
997 lines
28 KiB
Plaintext
//****************************************************************************
|
|
// **
|
|
// Confidential - (C) Activision Publishing, Inc. 2010 **
|
|
// **
|
|
//****************************************************************************
|
|
// **
|
|
// Module: Border, Streets **
|
|
// **
|
|
// Created: 11/11/11 - Travis Chen (trchen x 4143) **
|
|
// **
|
|
//****************************************************************************
|
|
|
|
#include maps\_utility;
|
|
#include common_scripts\utility;
|
|
#include maps\_nx_utility;
|
|
#include maps\_vehicle;
|
|
#include maps\_anim;
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
section_main()
|
|
{
|
|
// Helicopter support
|
|
level._player thread streets_helicopter_support_thread();
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
section_precache()
|
|
{
|
|
PrecacheItem( "rpg_straight" );
|
|
|
|
// Press^3 [{+actionslot 3}] ^7to use\nmark area for helicopter support.
|
|
add_hint_string( "helicopter_support", &"NX_BORDER_LEARN_HELICOPTER_SUPPORT", ::remove_helicopter_support_hint_string );
|
|
}
|
|
|
|
section_flag_inits()
|
|
{
|
|
flag_init( "intro_turret_destroyed" );
|
|
flag_init( "street_hummer_end" );
|
|
flag_init( "streets_intro_1_end" );
|
|
flag_init( "streets_intro_2_end" );
|
|
flag_init( "streets_intro_finished" );
|
|
flag_init( "helicopter_support_streets_middle" );
|
|
flag_init( "player_used_helicopter_support" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
section_objectives( objective_num )
|
|
{
|
|
flag_wait( "player_through_border" );
|
|
|
|
objective_add( objective_num, "current", &"NX_BORDER_OBJECTIVE_STREETS" );
|
|
|
|
flag_wait( "vo_reroutingmarket" );
|
|
objective_complete( objective_num );
|
|
objective_num++;
|
|
|
|
objective_add( objective_num, "current", &"NX_BORDER_OBJECTIVE_MARKET" );
|
|
flag_wait( "flag_market_objective_complete" );
|
|
objective_complete( objective_num );
|
|
|
|
objective_num++;
|
|
|
|
return objective_num;
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
streets_vo()
|
|
{
|
|
level._player waittill( "heli_support_active" );
|
|
flag_wait( "vo_border_section_done");
|
|
level.leader dialogue_queue( "bor_bak_streets_veh12markit" );
|
|
|
|
level thread team1_team2_vo();
|
|
level thread back_alley_vo();
|
|
|
|
flag_wait( "flag_streets_hummer_roll_in" );
|
|
|
|
level.leader dialogue_queue( "bor_bak_market_enemyhumvee" );
|
|
|
|
wait( 9 );
|
|
|
|
level.leader dialogue_queue( "bor_bak_streets_churchendofstreet" );
|
|
|
|
flag_wait( "vo_reroutingmarket" );
|
|
|
|
// Turn off helicopter support
|
|
trigger = GetEnt( "helicopter_support_off_end_streets", "script_noteworthy" );
|
|
trigger notify( "trigger" );
|
|
|
|
radio_dialogue( "bor_oly_market_cartelleaving" );
|
|
level.leader dialogue_queue( "bor_bak_streets_reroutingmarket" );
|
|
radio_dialogue( "bor_oly_streets_rogerthat" );
|
|
}
|
|
|
|
team1_team2_vo()
|
|
{
|
|
flag_wait( "vo_team1_team2" );
|
|
|
|
level.leader dialogue_queue( "bor_bak_streets_goleftintersection" );
|
|
level.leader dialogue_queue( "bor_bak_streets_team1takestreet" );
|
|
level.leader dialogue_queue( "bor_bak_streets_team2backalley" );
|
|
}
|
|
|
|
hummer_roll_in_vo()
|
|
{
|
|
}
|
|
|
|
back_alley_vo()
|
|
{
|
|
flag_wait( "vignette_curtain_pull" );
|
|
|
|
level.leader dialogue_queue( "bor_bak_streets_enemy2ndflrwindow" );
|
|
|
|
flag_wait( "vo_clearbldng" );
|
|
|
|
level.leader dialogue_queue( "bor_bak_streets_clearbldng" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
streets_start()
|
|
{
|
|
flag_set( "player_through_border" );
|
|
maps\nx_border_util::player_start( "player_start_streets" );
|
|
|
|
// Spawn the vehicles
|
|
// maps\nx_border_border::spawn_convoy_vehicles_and_allies();
|
|
|
|
// Border ally spawn
|
|
ally_starts = GetStructArray( "ally_start_streets", "targetname" );
|
|
maps\nx_border_util::spawn_allies( ally_starts );
|
|
|
|
// Give initial color orders
|
|
issue_color_orders( "r100", "allies" );
|
|
issue_color_orders( "y100", "allies" );
|
|
|
|
createthreatbiasgroup( "heli_support_axis_1" );
|
|
createthreatbiasgroup( "heli_support_axis_2" );
|
|
}
|
|
|
|
// Clear razor wire from border border
|
|
clear_razor_wire()
|
|
{
|
|
wires = GetEntArray( "model_razorwire", "script_noteworthy" );
|
|
Assert( IsDefined( wires ));
|
|
|
|
wire_brush = GetEnt( "brushmodel_razorwire", "targetname" );
|
|
Assert( IsDefined( wire_brush ));
|
|
|
|
foreach( wire in wires )
|
|
{
|
|
wire Delete();
|
|
}
|
|
|
|
wire_brush ConnectPaths();
|
|
wire_brush Delete();
|
|
}
|
|
|
|
|
|
streets()
|
|
{
|
|
// Wait for player to pass border
|
|
flag_wait( "player_through_border" );
|
|
|
|
level thread streets_vo();
|
|
|
|
// Convoy push
|
|
// level thread streets_convoy_push();
|
|
|
|
// Streets hummer roll in
|
|
level thread streets_intro_roll_in();
|
|
level thread streets_hummer_roll_in();
|
|
|
|
// Border ally spawn (extra enemy and setup)
|
|
level thread border_ally_spawn();
|
|
level thread border_ally_setup();
|
|
|
|
// Clean up
|
|
level thread street_ai_cleanup();
|
|
|
|
// Vignettes
|
|
level thread streets_vignettes();
|
|
|
|
// Enemy Spawn Func
|
|
level thread streets_enemy_spawn_funcs();
|
|
|
|
// Save thread
|
|
level thread streets_save_thread();
|
|
|
|
thread maps\nx_border_fx::fx_street_tumbleweed();
|
|
Exploder( "fx_street_smoke" );
|
|
|
|
// Ally battle chatter
|
|
battlechatter_on( "allies" );
|
|
}
|
|
|
|
streets_save_thread()
|
|
{
|
|
flag_wait( "intro_turret_destroyed" );
|
|
autosave_by_name( "intro_turret_destroyed" );
|
|
}
|
|
|
|
border_ally_setup()
|
|
{
|
|
// Make sure allies are spawned and colors set up
|
|
wait( 1.0 );
|
|
|
|
allies = GetAIArray( "allies" );
|
|
|
|
streets_red_allies = [];
|
|
streets_yellow_allies = [];
|
|
|
|
CreateThreatBiasGroup( "streets_yellow_allies" );
|
|
CreateThreatBiasGroup( "streets_red_allies" );
|
|
CreateThreatBiasGroup( "player" );
|
|
level._player SetThreatBiasGroup( "player" );
|
|
|
|
foreach( i, ally in allies )
|
|
{
|
|
if( IsDefined( ally.script_forcecolor ) && ally.script_forcecolor == "y" )
|
|
{
|
|
streets_red_allies[ streets_red_allies.size ] = ally;
|
|
ally SetThreatBiasGroup( "streets_red_allies" );
|
|
}
|
|
else if( IsDefined( ally.script_forcecolor ) && ally.script_forcecolor == "r" )
|
|
{
|
|
streets_yellow_allies[ streets_yellow_allies.size ] = ally;
|
|
ally SetThreatBiasGroup( "streets_yellow_allies" );
|
|
}
|
|
}
|
|
|
|
level.street_red_allies = streets_red_allies;
|
|
level.street_yellow_allies = streets_yellow_allies;
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
streets_convoy_push()
|
|
{
|
|
level.vehicle_convoy[ "vehicle_convoy_1" ] thread streets_convoy_push_shared( "streets_vehicle_convoy_1_start", true );
|
|
level.vehicle_convoy[ "vehicle_convoy_2" ] thread streets_convoy_push_shared( "streets_vehicle_convoy_2_start" );
|
|
}
|
|
|
|
streets_convoy_push_shared( start_node_name, stop_nodes )
|
|
{
|
|
vehicle_speed = 5;
|
|
|
|
// tagBMarv Continue path if not default start, otherwise teleport
|
|
if( ( level._start_point != "default" ) && ( level._start_point != "border" ))
|
|
{
|
|
// Setup start of path and move
|
|
path = GetVehicleNode( start_node_name, "targetname" );
|
|
|
|
// tagTC<temp> - for now, teleport vehicle to start point
|
|
self vehicle_teleport( path.origin, path.angles );
|
|
|
|
// Start path
|
|
self AttachPath( path );
|
|
self Vehicle_SetSpeed( vehicle_speed, 2 );
|
|
self StartPath();
|
|
}
|
|
else
|
|
{
|
|
self Vehicle_SetSpeed( vehicle_speed, 2 );
|
|
}
|
|
|
|
// Run stop node logic
|
|
if( IsDefined( stop_nodes ) && stop_nodes )
|
|
{
|
|
stop_node_array = [ "streets_convoy_stop_1", "streets_convoy_stop_2", "streets_convoy_stop_3", "streets_convoy_stop_4" ];
|
|
self thread streets_convoy_stop_nodes( stop_node_array, vehicle_speed );
|
|
}
|
|
}
|
|
|
|
streets_convoy_stop_nodes( stop_node_array, speed )
|
|
{
|
|
level.vehicle_convoy[ "vehicle_convoy_1" ] thread maps\nx_border_util::actor_detection_movement_control( 300, 45 );
|
|
level.vehicle_convoy[ "vehicle_convoy_2" ] thread maps\nx_border_util::actor_detection_movement_control( 300, 45 );
|
|
|
|
foreach( stop_node_name in stop_node_array )
|
|
{
|
|
stop_node = GetVehicleNode( stop_node_name, "targetname" );
|
|
self vehicle_waittill_node( stop_node_name, "targetname" );
|
|
|
|
level.vehicle_convoy[ "vehicle_convoy_1" ] notify ( "terminate_actor_detection" );
|
|
level.vehicle_convoy[ "vehicle_convoy_2" ] notify ( "terminate_actor_detection" );
|
|
|
|
// Stop both vehicles
|
|
level.vehicle_convoy[ "vehicle_convoy_1" ] Vehicle_SetSpeed( 0, 10 );
|
|
level.vehicle_convoy[ "vehicle_convoy_2" ] Vehicle_SetSpeed( 0, 10 );
|
|
|
|
flag_wait( stop_node.script_flag );
|
|
|
|
// Start both vehicles
|
|
level.vehicle_convoy[ "vehicle_convoy_1" ] thread maps\nx_border_util::actor_detection_movement_control( 300, 45 );
|
|
level.vehicle_convoy[ "vehicle_convoy_2" ] thread maps\nx_border_util::actor_detection_movement_control( 300, 45 );
|
|
|
|
level.vehicle_convoy[ "vehicle_convoy_1" ] ResumeSpeed( speed );
|
|
level.vehicle_convoy[ "vehicle_convoy_2" ] ResumeSpeed( speed );
|
|
}
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
border_ally_spawn()
|
|
{
|
|
spawn_starting_friendlies( "friendly_starting_spawner" );
|
|
}
|
|
|
|
spawn_starting_friendlies( sTargetname )
|
|
{
|
|
spawners = getentarray( sTargetname, "targetname" );
|
|
for ( i = 0 ; i < spawners.size ; i++ )
|
|
{
|
|
friend = spawners[ i ] stalingradSpawn();
|
|
if ( spawn_failed( friend ) )
|
|
assertMsg( "A friendly failed to spawn" );
|
|
|
|
friend thread ally_bullet_shield();
|
|
friend.goalradius = 32;
|
|
}
|
|
|
|
array_thread( getaiarray( "allies" ), ::replace_on_death );
|
|
}
|
|
|
|
ally_bullet_shield()
|
|
{
|
|
self magic_bullet_shield();
|
|
|
|
// tagTC<note> - Remove magic bullet shield when turret is destroyed
|
|
// or player has pushed through the intro blockade section
|
|
flag_wait_either( "intro_turret_destroyed", "player_through_intro_funnel" );
|
|
|
|
// Stop magic bullet shield except on baker
|
|
if( self != level.leader )
|
|
{
|
|
self stop_magic_bullet_shield();
|
|
}
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
street_ai_cleanup()
|
|
{
|
|
level thread linked_spawn_triggers_cleanup();
|
|
level thread balcony_cleanup();
|
|
|
|
flag_wait( "streets_first_half_cleanup" );
|
|
|
|
kill_deathflag( "streets_enemies_first_half_death_flag", 2 );
|
|
kill_deathflag( "streets_enemy_01", 2 );
|
|
kill_deathflag( "streets_enemy_balcony" );
|
|
|
|
flag_wait( "streets_second_half_cleanup" );
|
|
|
|
kill_deathflag( "streets_enemies_second_half_death_flag", 2 );
|
|
}
|
|
|
|
balcony_cleanup()
|
|
{
|
|
flag_wait( "helicopter_support_streets_middle" );
|
|
kill_deathflag( "streets_enemy_balcony" );
|
|
}
|
|
|
|
linked_spawn_triggers_cleanup()
|
|
{
|
|
level thread linked_spawn_triggers( "linked_spawn_triggers_1" );
|
|
level thread linked_spawn_triggers( "linked_spawn_triggers_2" );
|
|
}
|
|
|
|
linked_spawn_triggers( linked_name )
|
|
{
|
|
trigger_array = GetEntArray( linked_name, "script_noteworthy" );
|
|
foreach( trigger in trigger_array )
|
|
{
|
|
trigger thread linked_spawn_triggers_thread( linked_name );
|
|
}
|
|
|
|
level waittill( linked_name );
|
|
|
|
foreach( trigger in trigger_array )
|
|
{
|
|
trigger trigger_off();
|
|
}
|
|
}
|
|
|
|
linked_spawn_triggers_thread( linked_name )
|
|
{
|
|
level endon( linked_name );
|
|
self waittill( "trigger" );
|
|
level notify( linked_name );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
streets_vignettes()
|
|
{
|
|
// // tagTC<note> shit's broken with this guy..
|
|
// level thread bar_hop_vignette();
|
|
}
|
|
|
|
bar_hop_vignette()
|
|
{
|
|
flag_wait( "vignette_barhop" );
|
|
|
|
spawner = GetEnt( "vignette_bar_hop_enemy", "targetname" );
|
|
opfor = spawner spawn_ai();
|
|
opfor.animname = "generic";
|
|
opfor.goalradius = 32;
|
|
|
|
maps\nx_border_anim::bar_hop( opfor );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
streets_enemy_spawn_funcs()
|
|
{
|
|
// Enemy retreat
|
|
level thread streets_enemy_01();
|
|
level thread streets_enemy_02();
|
|
level thread streets_enemy_03();
|
|
level thread streets_enemy_03_balcony();
|
|
level thread streets_enemy_02_flank();
|
|
level thread streets_enemy_restaurant_guy();
|
|
|
|
// Hiding doors
|
|
level thread streets_enemy_hiding_door();
|
|
|
|
// RPG
|
|
level thread streets_enemy_rpg();
|
|
}
|
|
|
|
streets_enemy_01()
|
|
{
|
|
spawners = GetEntArray( "streets_enemy_01", "script_noteworthy" );
|
|
array_thread( spawners, ::add_spawn_function, ::streets_enemy_01_spawn_func );
|
|
}
|
|
|
|
streets_enemy_02()
|
|
{
|
|
spawners = GetEntArray( "streets_enemy_02", "script_noteworthy" );
|
|
array_thread( spawners, ::add_spawn_function, ::streets_enemy_02_spawn_func );
|
|
}
|
|
|
|
streets_enemy_03()
|
|
{
|
|
spawners = GetEntArray( "streets_enemy_03", "script_noteworthy" );
|
|
array_thread( spawners, ::add_spawn_function, ::streets_enemy_03_spawn_func );
|
|
}
|
|
|
|
streets_enemy_03_balcony()
|
|
{
|
|
spawners = GetEntArray( "streets_enemy_03_balcony", "script_noteworthy" );
|
|
array_thread( spawners, ::add_spawn_function, ::streets_enemy_03_balcony_spawn_func );
|
|
}
|
|
|
|
streets_enemy_02_flank()
|
|
{
|
|
CreateThreatBiasGroup( "street_enemy_02_flank" );
|
|
spawners = GetEntArray( "streets_enemy_02_flank", "script_noteworthy" );
|
|
array_thread( spawners, ::add_spawn_function, ::street_enemy_02_flank_spawn_func );
|
|
}
|
|
|
|
streets_enemy_restaurant_guy()
|
|
{
|
|
spawners = GetEntArray( "streets_enemy_restaurant_guy", "script_noteworthy" );
|
|
array_thread( spawners, ::add_spawn_function, ::streets_enemy_restaurant_guy_spawn_func );
|
|
}
|
|
|
|
streets_enemy_restaurant_guy_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
CreateThreatBiasGroup( "restaurant_guy" );
|
|
self SetThreatBiasGroup( "restaurant_guy" );
|
|
|
|
self.ignoreall = true;
|
|
setThreatBias( "restaurant_guy", "player", -15000 );
|
|
|
|
self waittill( "goal" );
|
|
|
|
self.ignoreall = false;
|
|
}
|
|
|
|
streets_enemy_01_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
|
|
flag_wait( "streets_enemy_01_retreat" );
|
|
|
|
vol = GetEnt( "streets_01_retreat_building", "targetname" );
|
|
self SetGoalVolumeAuto( vol );
|
|
}
|
|
|
|
streets_enemy_02_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
|
|
flag_wait( "streets_enemy_02_retreat" );
|
|
|
|
vol = GetEnt( "streets_02_retreat_building", "targetname" );
|
|
self SetGoalVolumeAuto( vol );
|
|
|
|
self thread streets_enemy_03_spawn_func();
|
|
}
|
|
|
|
streets_enemy_03_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
|
|
flag_wait( "streets_enemy_03_retreat" );
|
|
|
|
vol = GetEnt( "courtyard_volume", "targetname" );
|
|
self SetGoalVolumeAuto( vol );
|
|
}
|
|
|
|
streets_enemy_03_balcony_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
|
|
level thread radio_dialogue( "bor_bak_streets_enemiesonbalcony" );
|
|
|
|
//self thread streets_enemy_03_spawn_func();
|
|
}
|
|
|
|
street_enemy_02_flank_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
self SetThreatBiasGroup( "street_enemy_02_flank" );
|
|
|
|
setThreatBias( "street_enemy_02_flank", "streets_yellow_allies", -1000 );
|
|
setThreatBias( "street_enemy_02_flank", "streets_red_allies", 100 );
|
|
setThreatBias( "street_enemy_02_flank", "player", 1000 );
|
|
|
|
self thread streets_enemy_02_spawn_func();
|
|
}
|
|
|
|
streets_enemy_hiding_door()
|
|
{
|
|
spawner = GetEnt( "hiding_door_video_store", "targetname" );
|
|
spawner add_spawn_function( ::hiding_door_video_store );
|
|
|
|
spawner = GetEnt( "hiding_door_back_alley", "targetname" );
|
|
spawner add_spawn_function( ::hiding_door_back_alley );
|
|
|
|
spawner = GetEnt( "hiding_door_corner_building", "targetname" );
|
|
spawner add_spawn_function( ::hiding_door_corner_building );
|
|
}
|
|
|
|
hiding_door_video_store()
|
|
{
|
|
self endon( "death" );
|
|
flag_wait( "hiding_door_video_store_kill" );
|
|
self Kill();
|
|
}
|
|
|
|
hiding_door_back_alley()
|
|
{
|
|
self endon( "death" );
|
|
|
|
self waittill( "quit_door_behavior" );
|
|
|
|
self.goalradius = 64;
|
|
self.script_forcegoal = true;
|
|
|
|
goal_node = GetNode( "hiding_door_back_alley_goal", "targetname" );
|
|
self SetGoalNode( goal_node );
|
|
|
|
flag_wait( "hiding_door_back_alley_kill" );
|
|
self Kill();
|
|
}
|
|
|
|
hiding_door_corner_building()
|
|
{
|
|
self endon( "death" );
|
|
flag_wait( "hiding_door_corner_building_kill" );
|
|
self Kill();
|
|
}
|
|
|
|
streets_enemy_rpg()
|
|
{
|
|
level endon( "kill_rooftop_rpg" );
|
|
|
|
rpg_1 = GetEnt( "streets_rooftop_rpg_1", "script_noteworthy" );
|
|
rpg_1 add_spawn_function( ::streets_rooftop_rpg_1_spawn_func );
|
|
|
|
rpg_2 = GetEnt( "streets_rooftop_rpg_2", "script_noteworthy" );
|
|
rpg_2 add_spawn_function( ::streets_rooftop_rpg_2_spawn_func );
|
|
|
|
flag_wait( "player_used_helicopter_support" );
|
|
wait( 4.85 );
|
|
|
|
if( IsDefined( rpg_2 ) )
|
|
{
|
|
rpg_2_enemy = rpg_2 spawn_ai();
|
|
rpg_2_enemy waittill( "death" );
|
|
}
|
|
|
|
if( IsDefined( rpg_1 ) )
|
|
{
|
|
level thread streets_enemy_rpg_vo();
|
|
rpg_1 spawn_ai();
|
|
}
|
|
}
|
|
|
|
streets_enemy_rpg_vo()
|
|
{
|
|
wait( 0.0 );
|
|
level.leader dialogue_queue( "bor_bak_streets_rpgsgetcover" );
|
|
}
|
|
|
|
#using_animtree( "generic_human" );
|
|
streets_rooftop_rpg_1_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
self.health = 5;
|
|
|
|
flag_wait( "kill_rooftop_rpg" );
|
|
self Kill();
|
|
}
|
|
|
|
streets_rooftop_rpg_2_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
self.health = 5;
|
|
|
|
self thread streets_rooftop_rpg_2_heli_unload();
|
|
|
|
flag_wait( "kill_rooftop_rpg" );
|
|
self Kill();
|
|
}
|
|
|
|
streets_rooftop_rpg_2_heli_unload()
|
|
{
|
|
self endon( "death" );
|
|
|
|
level waittill( "helicopter_support_unloaded" );
|
|
self Kill();
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
streets_intro_roll_in()
|
|
{
|
|
// Put spawn func on spawners
|
|
spawners = GetEntArray( "streets_intro_1_enemies", "script_noteworthy" );
|
|
array_thread( spawners, ::add_spawn_function, ::streets_intro_1_enemies_spawn_func );
|
|
|
|
spawners = GetEntArray( "streets_intro_2_enemies", "script_noteworthy" );
|
|
array_thread( spawners, ::add_spawn_function, ::streets_intro_2_enemies_spawn_func );
|
|
|
|
// Blocker
|
|
blocker = GetEnt( "intro_funnel_block", "targetname" );
|
|
blocker DisconnectPaths();
|
|
|
|
// Wait till player is in area
|
|
flag_wait( "flag_streets_intro_roll_in" );
|
|
|
|
// Spawn streets hummer
|
|
level thread maps\nx_border_market::spawn_enemy_vehicle( "streets_intro_1", "streets_intro_1", "streets_intro_1_end" );
|
|
//putting hummer sfx here
|
|
level.enemy_vehicles[ "streets_intro_1" ] playsound ("scn_border_enmy_hmve_rollin_01");
|
|
wait( 0.5 );
|
|
level thread maps\nx_border_market::spawn_enemy_vehicle( "streets_intro_2", "streets_intro_2", "streets_intro_2_end" );
|
|
|
|
level.enemy_vehicles[ "streets_intro_1" ].health = 10;
|
|
level.enemy_vehicles[ "streets_intro_2" ].dontunloadonend = true;
|
|
level.enemy_vehicles[ "streets_intro_2" ].health = 10;
|
|
level.enemy_vehicles[ "streets_intro_2" ].mgturret[0].baseaccuracy = 0.05;
|
|
|
|
level.enemy_vehicles[ "streets_intro_2" ] waittill( "death" );
|
|
|
|
// Delete the ai full blocker
|
|
blocker ConnectPaths();
|
|
blocker Delete();
|
|
|
|
intro_allies_move = GetEnt( "intro_allies_move", "targetname" );
|
|
if( IsDefined( intro_allies_move ) )
|
|
{
|
|
intro_allies_move Delete();
|
|
}
|
|
|
|
flag_set( "intro_turret_destroyed" );
|
|
if( !flag( "player_through_intro_funnel" ) )
|
|
{
|
|
// Color orders for squad
|
|
issue_color_orders( "r101", "allies" );
|
|
issue_color_orders( "y101", "allies" );
|
|
}
|
|
}
|
|
|
|
streets_intro_1_enemies_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
|
|
self waittill( "unload" );
|
|
|
|
self SetGoalVolumeAuto_targetname( "intro_volume" );
|
|
}
|
|
|
|
streets_intro_2_enemies_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
|
|
self SetGoalVolumeAuto_targetname( "intro_volume" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
streets_hummer_roll_in()
|
|
{
|
|
// Put spawn func on spawners
|
|
spawners = GetEntArray( "streets_hummer_spawners", "script_noteworthy" );
|
|
array_thread( spawners, ::add_spawn_function, ::streets_hummer_spawn_func );
|
|
|
|
// Wait till player is in area
|
|
flag_wait( "flag_streets_hummer_roll_in" );
|
|
|
|
level thread streets_hummer_rollin_move_enemies();
|
|
|
|
// Allow air support
|
|
flag_set( "helicopter_support_hint" );
|
|
flag_set( "streets_intro_finished" );
|
|
|
|
// Spawn streets hummer
|
|
level thread maps\nx_border_market::spawn_enemy_vehicle( "streets_hummer_1", "streets_hummer_1", "street_hummer_end" );
|
|
//maps\nx_border_market::spawn_enemy_vehicle( "streets_hummer_2", "streets_hummer_2", "street_hummer_end" );
|
|
//putting hummer sfx here
|
|
|
|
level.enemy_vehicles[ "streets_hummer_1" ] playsound ("scn_border_enmy_hmve_rollin_02");
|
|
}
|
|
|
|
streets_hummer_spawn_func()
|
|
{
|
|
self endon( "death" );
|
|
|
|
self waittill( "unload" );
|
|
|
|
self SetGoalVolumeAuto_targetname( "courtyard_volume" );
|
|
}
|
|
|
|
streets_hummer_rollin_move_enemies()
|
|
{
|
|
waittill_aigroupcleared( "hummer_rollin_enemies" );
|
|
|
|
if( IsDefined( level.heli_support_turret_guy ) && IsAlive( level.heli_support_turret_guy ) )
|
|
{
|
|
// level waittill( "helicopter_support_unloaded" );
|
|
wait( 1.0 );
|
|
}
|
|
|
|
flag_set( "vo_reroutingmarket" );
|
|
|
|
triggers = GetEntArray( "hummer_rollin_done_triggers", "targetname" );
|
|
foreach( trigger in triggers )
|
|
{
|
|
if( IsDefined( trigger ) )
|
|
{
|
|
trigger trigger_off();
|
|
}
|
|
}
|
|
|
|
wait( 0.05 );
|
|
|
|
// Give initial color orders
|
|
issue_color_orders( "r110", "allies" );
|
|
issue_color_orders( "y108", "allies" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
streets_helicopter_support_thread()
|
|
{
|
|
self waittill( "heli_support_active" );
|
|
// self endon( "heli_support_inactive" );
|
|
|
|
// self thread streets_helicopter_support_inactive();
|
|
|
|
flag_wait( "helicopter_support_hint" );
|
|
flag_clear( "helicopter_support_hint" );
|
|
|
|
nag_wait = true;
|
|
while( 1 )
|
|
{
|
|
// Press^3 [{+actionslot 3}] ^7to use\nmark area for helicopter support.
|
|
display_hint_timeout( "helicopter_support", 5 );
|
|
RefreshHudAmmoCounter();
|
|
|
|
self thread streets_helicopter_support_nag_thread( nag_wait );
|
|
self thread streets_helicopter_support_incoming_thread();
|
|
|
|
// Wait for hint trigger
|
|
flag_wait( "helicopter_support_hint" );
|
|
flag_clear( "helicopter_support_hint" );
|
|
flag_clear( "player_used_helicopter_support" );
|
|
|
|
// Activate helicopter again
|
|
//level thread radio_dialogue( lines[ RandomInt( lines.size ) ] );
|
|
level notify( "activate_helicopter_support" );
|
|
level._player.remainingHeliSupportCount = 1;
|
|
|
|
// // Wait random time before allowing air support again
|
|
// random_wait = RandomIntRange( 20, 25 );
|
|
// wait( random_wait );
|
|
|
|
// // Activate helicopter again
|
|
// level notify( "activate_helicopter_support" );
|
|
// level._player.remainingHeliSupportCount = 1;
|
|
nag_wait = false;
|
|
}
|
|
}
|
|
|
|
remove_helicopter_support_hint_string()
|
|
{
|
|
if ( isDefined ( self.airdropMarkerInHand ) && ( self.airdropMarkerInHand == true ))
|
|
{
|
|
return true;
|
|
}
|
|
else if( ! flag( "player_used_helicopter_support" ) )
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
streets_helicopter_support_inactive()
|
|
{
|
|
self waittill( "heli_support_inactive" );
|
|
|
|
//add_dialogue_line( "Eagle One", "Enemy attack helis are approaching from the south Pather One. You're on your own until the airspace is clear." );
|
|
level thread radio_dialogue( "bor_eag_airdrop_helisfromsouth" );
|
|
}
|
|
|
|
streets_helicopter_support_nag_thread( nag_wait )
|
|
{
|
|
self endon( "use air support grenade" );
|
|
self endon( "heli_support_inactive" );
|
|
|
|
// lines = [];
|
|
// lines[ lines.size ] = "Jackson, throw some smoke!";
|
|
// lines[ lines.size ] = "Jackson, we need support! Mark the drop point with smoke!";
|
|
|
|
lines = [];
|
|
lines[ lines.size ] = "bor_bak_airdrop_throwsmoke";
|
|
lines[ lines.size ] = "bor_bak_airdrop_markdrop";
|
|
|
|
while( 1 )
|
|
{
|
|
foreach( line in lines )
|
|
{
|
|
if( nag_wait )
|
|
{
|
|
wait( RandomIntRange( 15, 25 ) );
|
|
}
|
|
level thread radio_dialogue( line );
|
|
nag_wait = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
streets_helicopter_support_incoming_thread()
|
|
{
|
|
self endon( "heli_support_inactive" );
|
|
|
|
|
|
level waittill( "helicopter_support_inbound" );
|
|
flag_set( "player_used_helicopter_support" );
|
|
|
|
//tagJC<NOTE>: Shooting magic bullets at the corner building to trigger the exploder
|
|
target = getent("heli_support_target_corner_building", "script_noteworthy");
|
|
for ( i = 0; i < 10; i++)
|
|
{
|
|
randomX = RandomFloatRange ( -10, 10 );
|
|
randomY = RandomFloatRange ( -10, 10 );
|
|
randomZ = RandomFloatRange ( -10, 10 );
|
|
|
|
MagicBullet( "nx_turret_blackhawk_ai", level.heli_support_turret.origin + (0, 0, 300), target.origin + (randomX, randomY, randomZ) );
|
|
|
|
if ( i == 5 )
|
|
{
|
|
// Swap geo.
|
|
Exploder( "corner_building_exploder" );
|
|
}
|
|
|
|
wait ( 0.2 );
|
|
}
|
|
|
|
if( IsDefined( level.enemy_vehicles ) && IsDefined( level.enemy_vehicles[ "streets_intro_2" ] ) && !flag( "streets_intro_finished" ) )
|
|
{
|
|
level.enemy_vehicles[ "streets_intro_2" ] thread target_streets_intro_humvee();
|
|
}
|
|
else if( flag( "flag_streets_hummer_roll_in" ) )
|
|
{
|
|
level thread target_streets_middle();
|
|
}
|
|
|
|
level waittill( "helicopter_support_unloaded" );
|
|
|
|
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
humvee_explode_failsafe()
|
|
{
|
|
wait( 3.5 );
|
|
self force_kill();
|
|
}
|
|
|
|
target_streets_intro_humvee()
|
|
{
|
|
// Start failsafe
|
|
self thread humvee_explode_failsafe();
|
|
|
|
vehicle_target = spawn( "script_origin", self.origin );
|
|
level.heli_support_turret SetTargetEntity( vehicle_target );
|
|
|
|
flag_wait( "intro_turret_destroyed" );
|
|
|
|
target = getent("heli_support_target_2", "script_noteworthy");
|
|
level.heli_support_turret SetTargetEntity( target );
|
|
|
|
level waittill( "helicopter_support_unloaded" );
|
|
flag_set( "streets_intro_finished" );
|
|
|
|
wait( 1.0 );
|
|
|
|
level.heli_support_turret ClearTargetEntity();
|
|
level.heli_support_turret_guy.ignoreall = true;
|
|
}
|
|
|
|
target_streets_middle()
|
|
{
|
|
flag_set( "helicopter_support_streets_middle" );
|
|
|
|
target = getent( "heli_support_target_streets_middle", "script_noteworthy" );
|
|
//level.heli_support_turret SetTargetEntity( target );
|
|
|
|
level waittill( "helicopter_support_unloaded" );
|
|
|
|
flag_clear( "helicopter_support_streets_middle" );
|
|
|
|
level.heli_support_turret ClearTargetEntity();
|
|
level.heli_support_turret_guy.ignoreall = true;
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|