nx1-gsc-dump/maps/nx_border_market.gsc

570 lines
15 KiB
Plaintext

//****************************************************************************
// **
// Confidential - (C) Activision Publishing, Inc. 2010 **
// **
//****************************************************************************
// **
// Module: Border, Market **
// **
// Created: 11/11/11 - Travis Chen (trchen x 4143) **
// **
//****************************************************************************
#include maps\_utility;
#include common_scripts\utility;
#include maps\_vehicle;
#include maps\_anim;
//*******************************************************************
// *
// *
//*******************************************************************
section_main()
{
// turn off color triggers
trigs = GetEntArray( "trig_off", "script_noteworthy" );
array_thread( trigs, ::trigger_off );
// setup enemy spawners
w1_spawners = GetEntArray( "mkt_spawner", "script_noteworthy" );
array_thread( w1_spawners, ::add_spawn_function, ::mkt_enemy_func );
// setup flood trigs
trigs = GetEntArray( "trig_spawn_flood", "script_noteworthy" );
foreach( trig in trigs )
thread maps\_spawner::flood_trigger_think( trig );
}
//*******************************************************************
// *
// *
//*******************************************************************
section_precache()
{
}
section_flag_inits()
{
flag_init( "flag_mkt_intro" );
flag_init( "flag_vo_ai_intro_take_cover" );
flag_init( "flag_mkt_killed_intro" );
flag_init( "flag_mkt_center" );
flag_init( "flag_mkt_center_backup" );
flag_init( "flag_mkt_player_outside" );
flag_init( "flag_mkt_center_retreat" );
flag_init( "flag_mkt_side" );
flag_init( "flag_mkt_side_retreat" );
flag_init( "flag_mkt_high" );
flag_init( "flag_mkt_high_retreat" );
flag_init( "flag_mkt_player_to_stairs" );
flag_init( "flag_mkt_run_to_finale" );
}
//*******************************************************************
// *
// *
//*******************************************************************
section_objectives( objective_num )
{
return objective_num;
}
//*******************************************************************
// *
// *
//*******************************************************************
market_start()
{
maps\nx_border_util::player_start( "player_start_market" );
ally_starts = getstructarray( "ally_start_market", "targetname" );
maps\nx_border_util::spawn_allies( ally_starts );
// Disable air drop
level notify( "trigger_terminate_helicopter_support" );
}
market()
{
flag_wait( "flag_mkt_intro" );
autosave_by_name( "border_market_save_start" );
// IPrintLnBold( "Market Intro start" );
// Market Intro
thread mkt_setup();
thread mkt_intro();
Exploder( "fx_market_smoke" );
// Center or Backup
thread mkt_center();
thread mkt_center_backup();
// Center Retreat
flag_wait( "flag_mkt_center_retreat" );
thread mkt_center_retreat();
// IPrintLnBold( "center retreat" );
// Side (player needs to be outside)
flag_wait( "flag_mkt_side" );
autosave_by_name( "border_market_save_side" );
thread mkt_side();
// IPrintLnBold( "side start" );
// Side Retreat
flag_wait( "flag_mkt_side_retreat" );
thread mkt_side_retreat();
// IPrintLnBold( "side retreat" );
// High
flag_wait( "flag_mkt_high" );
thread mkt_high();
// IPrintLnBold( "high start" );
// High Retreat
flag_wait( "flag_mkt_high_retreat" );
thread mkt_high_retreat();
// IPrintLnBold( "high retreat" );
flag_wait( "flag_mkt_run_to_finale" );
}
//*******************************************************************
// *
// *
//*******************************************************************
mkt_setup()
{
// Turn off Helicopter Support. Brian, we need to figure out if
// you want to use the support functionality for this encounter
level._player notify( "terminate_helicopter_support" );
// let 2 allies die
allies = GetAIArray( "allies" );
red = 2;
yellow = 1;
foreach( ally in allies )
{
if( ally != level.leader )
{
if( !IsDefined( ally.script_forcecolor ) )
{
ally disable_replace_on_death();
ally.health = 1;
ally.threatbias = 7500;
}
else if( yellow > 0 && ally.script_forcecolor == "y" )
{
yellow -= 1;
}
else if( red > 0 && ally.script_forcecolor == "r" )
{
red -= 1;
}
else
{
ally disable_replace_on_death();
ally.health = 1;
ally.threatbias = 10000;
}
}
}
}
mkt_intro()
{
level endon( "flag_mkt_center_backup" );
// shoot into the window
wait( 0.6 );
enemies = get_ai_group_ai( "mkt_baddies" );
targets = getstructarray( "mkt_building_shoot_targets", "targetname" );
array_thread( enemies, ::mkt_ai_shoot_loop, targets );
// yell warning
wait( 0.3 );
level.leader thread dialogue_queue( "bor_bak_market_enemiesinmarket" );
// break window
wait( 0.1 );
window = GetGlass( "mkt_window_1" );
DestroyGlass( window, (-441, -284, 88) );
wait_flag_or_time( "flag_mkt_killed_intro", 8 );
flag_set( "flag_mkt_center" );
}
mkt_center()
{
level endon( "flag_mkt_center_backup" );
flag_wait( "flag_mkt_center" );
// retreat enemies
mkt_vol_retreat( "mkt_baddies", "vol_mkt_center" );
// advance allies
wait( 2 );
trig = GetEnt( "color_mkt_center", "targetname" );
if( IsDefined( trig ) )
trig notify( "trigger" );
thread wait_for_retreat( 3, "flag_mkt_center_backup" );
}
mkt_center_backup()
{
level endon( "flag_mkt_center_retreat" );
flag_wait( "flag_mkt_center_backup" );
// retreat enemies
mkt_vol_retreat( "mkt_baddies", "vol_mkt_center_backup" );
spawners = GetEntArray( "mkt_bad_center", "targetname" );
foreach( spawner in spawners )
spawner.script_goalvolume = "vol_mkt_center_backup";
// get retreat enemies ready
thread mkt_center_spawn_retreat();
wait( 2 );
// advance allies
trig = GetEnt( "color_mkt_center_backup", "targetname" );
if( IsDefined( trig ) )
trig notify( "trigger" );
// nag - if inside
if( flag( "flag_vo_player_inside" ) )
level.leader dialogue_queue( "bor_bak_market_moveup" );
// nag loop - go outside
while( !flag( "flag_mkt_player_outside" ) )
{
//for now, to make the randomness better, just gonna use the randomness in a single alias
level.leader dialogue_queue( "bor_bak_nag_market" );
wait_flag_or_time( "flag_mkt_player_outside", 10, 15 );
}
// turn off center flood spawn
trig = GetEnt( "trig_stop_center_flood", "targetname" );
if( IsDefined( trig ) )
trig notify( "trigger" );
}
mkt_center_spawn_retreat()
{
wait_flag_or_time( "flag_mkt_player_outside", 7, 8 );
spawn_targetname( "mkt_bad_center_retreat" );
}
mkt_center_retreat()
{
// turn off center flood spawn
trig = GetEnt( "trig_stop_center_flood", "targetname" );
if( IsDefined( trig ) )
trig notify( "trigger" );
// retreat enemies and set health to 1
mkt_vol_retreat( "mkt_baddies", "vol_mkt_center_retreat", true );
// spawn retreating enemies
trig = GetEnt( "trig_spawn_center_retreat_flood", "targetname" );
trig notify( "trigger" );
// get side fight ready
// wait( 1 );
// thread wait_for_retreat( 3, "flag_mkt_side" );
}
mkt_side()
{
level endon( "flag_mkt_side_retreat" );
level endon( "flag_mkt_run_to_finale" );
radio_dialogue( "bor_oly_market_cartelchopper" );
// retreat enemies and set health to 1
mkt_vol_retreat( "mkt_baddies", "vol_mkt_side", true );
// change goalvol of center retreat flood
spawners = GetEntArray( "mkt_bad_center_retreat_flood", "targetname" );
foreach( spawner in spawners )
spawner.script_goalvolume = "vol_mkt_side";
// spawn side enemies
trig = GetEnt( "trig_spawn_side", "targetname" );
trig notify( "trigger" );
// spawn side rockets
thread spawn_targetname( "mkt_bad_side_rockets" );
wait( 2.5 );
issue_color_orders( "y304 r304", "allies" );
thread wait_for_retreat( 3, "flag_mkt_side_retreat" );
}
mkt_side_retreat()
{
level endon( "flag_mkt_high" );
level endon( "flag_mkt_run_to_finale" );
// turn off side flood spawn
trig = GetEnt( "trig_stop_side_flood", "targetname" );
if( IsDefined( trig ) )
trig notify( "trigger" );
// retreat enemies
mkt_vol_retreat( "mkt_baddies", "vol_mkt_side_retreat" );
// spawn reinforcements
spawn_targetname( "mkt_bad_side_retreat" );
wait( 2.5 );
issue_color_orders( "y305 r305", "allies" );
thread wait_for_retreat( 4, "flag_mkt_high" );
}
mkt_high()
{
level endon( "flag_mkt_high_retreat" );
level endon( "flag_mkt_run_to_finale" );
// retreat enemies
mkt_vol_retreat( "mkt_baddies", "vol_mkt_high" );
wait( 2 );
issue_color_orders( "y306 r306", "allies" );
thread wait_for_retreat( 2, "flag_mkt_high_retreat" );
}
mkt_high_retreat()
{
// retreat enemies
mkt_vol_retreat( "mkt_baddies", "vol_mkt_high_retreat", true );
mkt_vol_retreat( "mkt_high_baddies", "vol_mkt_high_retreat" );
// get ready to move allies
flag_wait( "flag_mkt_player_to_stairs" );
// turn off other color trigs
trig = GetEnt( "color_mkt_center_retreat", "targetname" );
trig trigger_off();
trig = GetEnt( "color_mkt_center_retreat_alt", "targetname" );
trig trigger_off();
trig = GetEnt( "color_mkt_side", "targetname" );
trig trigger_off();
trig = GetEnt( "color_mkt_side_yellow", "targetname" );
trig trigger_off();
trig = GetEnt( "color_mkt_side_retreat", "targetname" );
trig trigger_off();
trig = GetEnt( "color_mkt_side_retreat_alt", "targetname" );
trig trigger_off();
trig = GetEnt( "color_mkt_high", "targetname" );
trig trigger_off();
trig = GetEnt( "color_mkt_high_retreat", "targetname" );
trig trigger_off();
// move on to final battle
wait( 0.1 );
flag_set( "flag_mkt_run_to_finale" );
wait( 1 );
level.leader thread dialogue_queue( "bor_bak_nag_pushchurch" );
}
//*******************************************************************
// *
// *
//*******************************************************************
wait_for_retreat( baddies, flag )
{
// loop till target number is reached
while( get_ai_group_sentient_count( "mkt_baddies" ) > baddies )
level waittill( "mkt_death" );
flag_set( flag );
}
mkt_vol_retreat( group_name, vol_name, is_weak, trig_name )
{
level endon( "mkt_clear_retreats" );
if( !IsDefined( is_weak ) )
is_weak = false;
if( IsDefined( trig_name ) )
{
trig = GetEnt( trig_name, "targetname" );
trig waittill( "trigger" );
}
// retreat enemies
ai_group = get_ai_group_ai( group_name );
new_vol = GetEnt( vol_name, "targetname" );
foreach( guy in ai_group )
{
guy SetGoalVolumeAuto( new_vol );
if( is_weak )
guy.health = 1;
}
}
reinforce_group( spawn_name, group_name, num, is_flood_fill, color_order)
{
// init vars
if( !IsDefined( is_flood_fill ) )
is_flood_fill = false;
// get sapwners
spawners = GetEntArray( spawn_name, "targetname" );
if( is_flood_fill )
array_thread( spawners, maps\_spawner::flood_spawner_think );
// spawn enemies
for( i = get_ai_group_sentient_count( group_name ); i < num; i++)
spawners[i] spawn_ai();
// issue color orders
if( IsDefined( color_order ) )
issue_color_orders( color_order, "axis" );
}
mkt_special_spawn( trig_name, clear_specials )
{
if( !IsDefined( clear_specials ) )
clear_specials = false;
trig = GetEnt( trig_name, "targetname" );
trig trigger_on();
self thread mkt_special_spawn_proc( clear_specials );
level waittill( "mkt_clear_specials" );
trig trigger_off();
}
mkt_special_spawn_proc( clear_specials )
{
self waittill( "trigger" );
self trigger_off();
if( clear_specials )
level notify( "mkt_clear_specials" );
}
mkt_trig_notify( note )
{
self waittill( "trigger" );
// send notifications
targets = getEntArray( self.target, "targetname" );
foreach( target in targets )
target notify( note );
self Delete();
}
mkt_trig_retreat( group_name )
{
self waittill( "trigger" );
if( !IsDefined( group_name ) )
group_name = "mkt_baddies";
// retreat enemies
ai_group = get_ai_group_ai( group_name );
new_vol = GetEnt( self.target, "targetname" );
foreach( guy in ai_group )
guy SetGoalVolumeAuto( new_vol );
self Delete();
}
wait_flag_or_time( flag_name, min_time, max_time )
{
level endon( flag_name );
if( !IsDefined( max_time ) )
max_time = min_time + 0.1;
wait( RandomFloatRange( min_time, max_time ) );
}
radio_rand_dialog( dialogs )
{
num = RandomIntRange( 0, dialogs.size - 1 );
radio_dialogue( dialogs[ num ] );
}
//*******************************************************************
// *
// *
//*******************************************************************
mkt_enemy_func()
{
self.goalradius = 512;
self waittill ( "death" );
level notify( "mkt_death" );
}
mkt_enemy_stop_ignoreall()
{
if( self.ignoreall )
self waittill( "reached_path_end" );
self set_ignoreall( false );
}
mkt_ai_shoot_loop( targets )
{
level endon( "mkt_ai_stop_shooting" );
self endon( "death" );
wait( RandomFloat( 0.3 ) );
while( 1 )
{
rand = RandomIntRange( 0, targets.size - 1 );
MagicBullet( "ak47", self.origin + (0, 0, 24), targets[ rand ].origin );
wait( RandomFloatRange( 0.3, 0.7 ) );
}
}
spawn_enemy_vehicle( veh_name, tVehicle, flag_name )
{
// Grab vehicle spawner
vehicle = GetEnt( tVehicle, "targetname" );
Assert( IsDefined( vehicle ));
Assert( IsDefined( vehicle.target ));
// Grab rider spawners
targets = GetEntArray( vehicle.target, "targetname" );
Assert( IsDefined( targets ));
// Spawn and drive
level.enemy_vehicles[ veh_name ] = vehicle spawn_vehicle_and_gopath();
level.enemy_vehicles[ veh_name ] waittill( "reached_end_node" );
if( IsDefined( flag_name ) )
flag_set( flag_name );
}
//*******************************************************************
// *
// *
//*******************************************************************