nx1-gsc-dump/maps/nx_lunar_take_back_control.gsc

1028 lines
30 KiB
Plaintext
Raw Blame History

//****************************************************************************
// **
// Confidential - (C) Activision Publishing, Inc. 2011 **
// **
//****************************************************************************
// **
// Module: NX_LUNAR Take Back Control Mission Script **
// **
// Created: 2/24/2010 - Daryl Kimoto **
// **
//****************************************************************************
#include maps\_utility;
#include maps\_utility_code;
#include maps\_nx_vignette_util;
#include maps\_nx_objective_util;
#include common_scripts\utility;
#include maps\_anim;
#include maps\_art;
#include maps\_vehicle;
//*******************************************************************
// *
// *
//*******************************************************************
mission_flag_inits()
{
flag_init( "vehicle_bay_return" );
flag_init( "take_back_control" );
flag_init( "control_room_door_open" );
flag_init( "control_door_breached" );
flag_init( "control_door_breaching" );
flag_init( "control_lsp_activated" );
flag_init( "control_objective_hawk_meetup" );
flag_init( "control_objective_breach" );
flag_init( "c_and_c_doors_open" );
flag_init( "c_and_c_enemies_cleared" );
}
//*******************************************************************
// *
// *
//*******************************************************************
vehicle_bay_return_start()
{
// Start the player and allies
maps\nx_lunar_util::lunar_start( "vehicle_bay_return_start", "vehicle_bay_return_eagle_start" );
// Init combat
maps\nx_lunar_util::lunar_combat_init();
// Make sure all vehicle bay doors are open
maps\nx_lunar_get_to_the_armory::open_all_vehicle_bay_doors();
// FX
level thread start_lsp_fx();
// Initial Vision
thread maps\nx_lunar_fx::fx_init_vision_surface();
// Remove vehicle bay blocking crates
// maps\nx_lunar_get_to_the_armory::remove_vehicle_bay_blockers();
}
vehicle_bay_return()
{
flag_set( "vehicle_bay_return" );
// Dialogue
level thread vehicle_bay_return_VO();
// Save the game
level thread autosave_now();
// Setup triggers
maps\nx_lunar_util::all_triggers_on( "vehicle_bay_return_triggers" );
maps\nx_lunar_util::all_triggers_on( "vehicle_bay_return_left_route" );
maps\nx_lunar_util::all_triggers_on( "vehicle_bay_return_right_route" );
trigger_off( "move_allies_to_hub", "targetname" );
// Enemy
level thread vehicle_bay_enemy_spawn();
// Player
level._player thread vehicle_bay_player_thread();
// Eagle thread
level.eagle thread vehicle_bay_eagle_thread();
// Spawn allies
level thread take_back_control_ally_spawn();
// Open door
flag_wait( "open_vehicle_hub_door" );
wait( 1.0 );
level thread maps\nx_lunar_util::open_lunar_door( "vehicle_bay_hub_entrance", 1.0, true );
// Wait for enemies dead
waittill_aigroupcleared( "enemy_vehicle_bay" );
wait( 1.5 );
trigger_on( "move_allies_to_hub", "targetname" );
}
//*******************************************************************
// *
//*******************************************************************
vehicle_bay_return_VO()
{
flag_wait( "vo_jesus_what_a_mess" );
// Jesus... what a mess<73>
radio_dialogue( "moon_eag_ext_37" );
// C&C is ahead <20> be ready<64>
radio_dialogue( "moon_eag_ext_36" );
flag_wait( "vo_vehicle_tangos_right" );
// Tangos right!
radio_dialogue( "moon_eag_int_14" );
}
//*******************************************************************
// *
//*******************************************************************
vehicle_bay_player_thread()
{
}
//*******************************************************************
// *
//*******************************************************************
vehicle_bay_enemy_spawn()
{
CreateThreatBiasGroup( "vehicle_bay" );
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_vehicle_bay" );
}
enemy_vehicle_bay_spawn_func()
{
self endon( "death" );
self thread maps\nx_lunar_util::lunar_enemy_interior_common();
self thread disable_surprise();
self SetThreatBiasGroup( "vehicle_bay" );
setthreatbias( "vehicle_bay", "player", 10000 );
}
//*******************************************************************
// *
//*******************************************************************
vehicle_bay_eagle_thread()
{
flag_wait( "vehicle_bay_return_ignore_on" );
self.ignoreall = true;
thread maps\nx_lunar_fx::fx_lunar_take_back_control_vision_change();
flag_wait( "vehicle_bay_return_ignore_off" );
self.ignoreall = false;
old_accuracy = self.baseaccuracy;
self.baseaccuracy = 0.1;
flag_wait( "take_back_control" );
self.baseaccuracy = old_accuracy;
}
//*******************************************************************
// *
//*******************************************************************
//*******************************************************************
// *
// *
//*******************************************************************
DEBUG_TAKE_BACK_CONTROL = false;
take_back_control_start()
{
// Start the player and allies
maps\nx_lunar_util::lunar_start( "take_back_control_start", "take_back_control_eagle_start" );
level thread take_back_control_ally_spawn();
// Init combat
maps\nx_lunar_util::lunar_combat_init();
// Open doors
level thread maps\nx_lunar_get_to_the_armory::open_all_vehicle_bay_doors();
level thread maps\nx_lunar_util::open_lunar_door( "vehicle_bay_hub_entrance", 0.2 );
// FX
level thread start_lsp_fx();
// Vision
thread maps\nx_lunar_fx::fx_init_vision_breached_helmet();
// Remove vehicle bay blocking crates
// maps\nx_lunar_get_to_the_armory::remove_vehicle_bay_blockers();
thread play_bink_on_c_and_c_screens();
}
take_back_control()
{
flag_set( "take_back_control" );
// Save the game
level thread autosave_now();
// VO
level thread take_back_control_VO();
// Triggers
trigger_on( "move_allies_to_hub", "targetname" );
maps\nx_lunar_util::all_triggers_on( "control_triggers" );
maps\nx_lunar_util::all_triggers_off( "control_breach_triggers" );
maps\nx_lunar_util::all_triggers_off( "c_and_c_triggers" );
maps\nx_lunar_util::all_triggers_off( "take_back_control_ending_triggers" );
trigger_off( "take_back_control_open_door", "targetname" );
trigger_off( "take_back_control_open_door_move", "targetname" );
// Player
level._player thread take_back_control_player_thread();
level._player thread take_back_control_danger_zone();
// Enemies
level thread take_back_control_enemy_spawn();
// Breach Actors
level thread maps\nx_lunar_control_room_breach::casual_placeholder_enemy_animations();
level thread maps\nx_lunar_control_room_breach::friendly_actor_breach_start();
level thread maps\nx_lunar_control_room_breach::enemy_actor_breach_start();
// Vignette
level thread take_back_control_greeting_vignette();
// Open doors
level thread maps\nx_lunar_util::open_lunar_door( "c_and_c_door_1", 0.2 );
level thread maps\nx_lunar_util::open_lunar_door( "c_and_c_door_2", 0.2 );
// Wait for breached
flag_wait( "control_door_breached" );
// Enemy counter
level thread c_and_c_enemy_counter();
flag_wait( "close_c_and_c_doors" );
level thread maps\nx_lunar_util::close_lunar_door( "c_and_c_door_1" );
level thread maps\nx_lunar_util::close_lunar_door( "c_and_c_door_2" );
// Wait for all enemies cleared
flag_wait( "c_and_c_enemies_cleared" );
}
play_bink_on_c_and_c_screens()
{
for ( ;; )
{
maps\_hud_util::load_cinematic( "nx_lunar_screen1_big" );
maps\_hud_util::play_cinematic();
while ( IsCinematicPlaying() )
{
wait 0.05;
}
}
}
c_and_c_enemy_counter()
{
init_c_and_c_enemy_down_VO();
prev_total = -1;
while( 1 )
{
total_enemies = get_ai_group_sentient_count( "enemy_control_floor_1_side" );
total_enemies += get_ai_group_sentient_count( "enemy_control_floor_1_main" );
total_enemies += get_ai_group_sentient_count( "enemy_control_floor_1_main_scripted" );
total_enemies += get_ai_group_sentient_count( "enemy_control_floor_1_resupply" );
total_enemies += get_ai_group_sentient_count( "enemy_control_floor_2" );
// Enemy killed, play audio
if( total_enemies < prev_total && prev_total > -1 )
{
level thread c_and_c_enemy_down_VO();
}
// Break out when enemies are killed
if( total_enemies <= 1 && flag( "close_c_and_c_doors" ) )
{
break;
}
// Set prev
prev_total = total_enemies;
//IPrintln( "C and C enemies: " + total_enemies );
wait( 1 );
}
// No more enemies, set all clear flag
flag_set( "c_and_c_enemies_cleared" );
// All clear. Move forward.
radio_dialogue( "moon_hawk_ext_cncclear" );
}
init_c_and_c_enemy_down_VO()
{
level.enemy_down_vo_hawk = [];
level.enemy_down_vo_hawk[ level.enemy_down_vo_hawk.size ] = "moon_hawk_kill_yell_01";
level.enemy_down_vo_hawk[ level.enemy_down_vo_hawk.size ] = "moon_hawk_kill_yell_02";
level.enemy_down_vo_hawk[ level.enemy_down_vo_hawk.size ] = "moon_hawk_kill_yell_04";
level.enemy_down_vo_hawk[ level.enemy_down_vo_hawk.size ] = "moon_hawk_kill_yell_05";
level.enemy_down_vo_hawk[ level.enemy_down_vo_hawk.size ] = "moon_hawk_kill_yell_06";
level.enemy_down_vo_eagle = [];
level.enemy_down_vo_eagle[ level.enemy_down_vo_eagle.size ] = "moon_eag_kill_yell_01";
level.enemy_down_vo_eagle[ level.enemy_down_vo_eagle.size ] = "moon_eag_kill_yell_02";
level.enemy_down_vo_eagle[ level.enemy_down_vo_eagle.size ] = "moon_eag_kill_yell_04";
level.enemy_down_vo_eagle[ level.enemy_down_vo_eagle.size ] = "moon_eag_kill_yell_05";
level.enemy_down_vo_eagle[ level.enemy_down_vo_eagle.size ] = "moon_eag_kill_yell_06";
level.unused_enemy_down_vo_hawk = level.enemy_down_vo_hawk;
level.unused_enemy_down_vo_eagle = level.enemy_down_vo_eagle;
}
c_and_c_enemy_down_VO()
{
level._player endon( "death" );
// Who is closer, hawk or eagle
hawk = true;
hawk_dist = Distance( level._player.origin, level.hawk.origin );
eagle_dist = Distance( level._player.origin, level.eagle.origin );
if( hawk_dist > eagle_dist )
{
hawk = false;
}
// Only play line sometimes
percent = RandomFloat( 1.0 );
if( percent < 0.2 )
{
// Reset unused
if( hawk )
{
if ( level.unused_enemy_down_vo_hawk.size == 0 )
level.unused_enemy_down_vo_hawk = level.enemy_down_vo_hawk;
// Choose a line randomly
line = random( level.unused_enemy_down_vo_hawk );
// Play the line
radio_dialogue( line );
// remove the line just played from the array
level.unused_enemy_down_vo_hawk = array_remove( level.unused_enemy_down_vo_hawk, line );
level.unused_enemy_down_vo_hawk = array_removeUndefined( level.unused_enemy_down_vo_hawk );
}
else
{
if ( level.unused_enemy_down_vo_eagle.size == 0 )
level.unused_enemy_down_vo_eagle = level.enemy_down_vo_eagle;
// Choose a line randomly
line = random( level.unused_enemy_down_vo_eagle );
// Play the line
radio_dialogue( line );
// remove the line just played from the array
level.unused_enemy_down_vo_hawk = array_remove( level.unused_enemy_down_vo_hawk, line );
level.unused_enemy_down_vo_hawk = array_removeUndefined( level.unused_enemy_down_vo_hawk );
}
}
}
take_back_control_VO()
{
flag_wait( "vo_take_back_hub_enter" );
// Vandenberg.
//radio_dialogue( "moon_eag_ext_39" );
// tagTC<note> - I'm adding these lines back in until the've been
// integrated into the vignette.
// Crow!<21> Walker!<21> you everyone?
//radio_dialogue( "moon_hawk_vanrv_01" );
// Riggs didn't make it. We're it.
//radio_dialogue( "moon_eag_vanrv_01" );
// tagTC<note> - Hack wait till vo is implemented in vignette
//wait( 5.0 );
// tagTC<note> - It's weird this and below are the same basic line.
// <grunts acknowledgment>. The EC have Command and Control locked down.
// radio_dialogue( "moon_hawk_vanrv_02" );
// The EC have Command and Control sealed up. They're overheatin' our power systems.
//radio_dialogue( "moon_hawk_vanrv_06" );
// <grunts while pulling breacher from dead enemy> It's time for a little payback.
//radio_dialogue( "moon_hawk_vanrv_03" );
// <brandishes breach gun> We're breaching the control room.
//radio_dialogue( "moon_hawk_ext_breaching" );
flag_wait( "control_room_door_open" );
// Let's move.
//radio_dialogue( "moon_hawk_ext_letsmove" );
// Room<6F>s dark and they<65>re blind. Stay quiet
radio_dialogue( "moon_hawk_ext_blind" );
flag_wait( "vo_take_back_breach" );
// Ready to breach. Walker, grab onto something.
level thread radio_dialogue( "moon_hawk_ext_readytobreach" );
// Target anyone with a helmet on.
//level thread radio_dialogue( "moon_hawk_ext_targethelmet" );
// Wait till breach
flag_wait( "control_door_breached" );
radio_dialogue( "moon_eag_int_26" );
// Tangos on both floors, engage!
battlechatter_on( "allies" );
flag_wait( "vo_work_your_way_around" );
// Work your way around.
radio_dialogue( "moon_eag_ext_workaround" );
// We need to get to the Override Control.
radio_dialogue( "moon_hawk_ext_override" );
// Crow, second level! I'll take ground floor.
radio_dialogue( "moon_hawk_ext_secondlvl" );
wait( 4.0 );
// Move forward
radio_dialogue( "moon_hawk_move_03" );
level thread vo_upper_route_thread();
level thread vo_lower_route_thread();
flag_wait( "close_c_and_c_doors" );
// Go! Go! Go!
radio_dialogue( "moon_hawk_move_04" );
}
vo_upper_route_thread()
{
flag_wait( "vo_upper_route" );
// Enemies headed your way. (If player takes upper route)
radio_dialogue( "moon_hawk_ext_headedup" );
}
vo_lower_route_thread()
{
flag_wait( "vo_lower_route" );
// Reinforcements headed your way. (If player takes lower route)
radio_dialogue( "moon_eag_ext_reinheaded" );
}
//*******************************************************************
// *
//*******************************************************************
take_back_control_player_thread()
{
self EnableUsability();
// tagTC<note> - commenting out to ready for Colin's breach
// Wait for player to trigger breach
// control_breach = GetEnt( "control_breach", "targetname" );
// control_breach trigger_on();
// control_breach sethintstring( &"NX_LUNAR_CONTROL_BREACH_HINT" );
// control_breach waittill( "trigger" );
// control_breach trigger_off();
// tagTC<NOTE> - COLIN, this flag should be set when the player is breaching but the door hasn't been breached
flag_set( "control_door_breaching" );
// Breach done, player kiling people now
level waittill( "slomo_breach_over" );
// Open door and player FX
// level thread maps\nx_lunar_util::open_lunar_door( "control_door_breach", 0.2, true );
// level thread maps\nx_lunar_util::lunar_door_breach_fx( "control_door_breach" );
// level thread remove_door_player_clip( "control_door_breach_player_clip", 2.0 );
// tagTC<NOTE> - COLIN, this flag and triggers should be set when the breach is complete
maps\nx_lunar_util::all_triggers_on( "control_breach_triggers" );
flag_set( "control_door_breached" );
// Save the game
level thread autosave_now();
// Danger zone
level._player thread maps\nx_lunar_util::player_danger_zone();
}
take_back_control_danger_zone()
{
// Turn on danger zone
self thread maps\nx_lunar_util::player_danger_zone();
// Wait for off danger zone
self thread maps\nx_lunar_util::end_danger_zone();
}
//*******************************************************************
// *
//*******************************************************************
take_back_control_greeting_vignette()
{
flag_set( "control_objective_hawk_meetup" );
if( !DEBUG_TAKE_BACK_CONTROL )
{
end_greet_body = vignette_actor_spawn( "end_greet_body", "end_greet_body" );
maps\nx_lunar_anim::end_greet( end_greet_body, level.hawk, level.pigeon );
end_greet_body vignette_actor_kill();
}
trigger_on( "take_back_control_open_door", "targetname" );
}
//*******************************************************************
// *
//*******************************************************************
take_back_control_ally_spawn()
{
// Make sure falcon is dead
if( IsAlive( level.falcon ) )
{
level.falcon stop_magic_bullet_shield();
level.falcon kill();
}
level.hawk = take_back_control_ally_spawn_shared( "hawk" );
level.hawk thread control_hawk_thread();
level.pigeon = take_back_control_ally_spawn_shared( "pigeon" );
level.pigeon thread control_pigeon_thread();
level.seagull = take_back_control_ally_spawn_shared( "seagull" );
level.seagull thread control_seagull_thread();
level.eagle thread control_eagle_thread();
}
control_eagle_thread()
{
// CQB Eagle
self enable_cqbwalk();
self thread disable_surprise();
self thread ally_protect();
}
remove_door_player_clip( door_name, wait_for_remove )
{
wait( wait_for_remove );
player_clip = GetEnt( door_name, "targetname" );
player_clip Delete();
}
control_hawk_thread()
{
self endon( "death" );
// Open control door
flag_wait( "control_open_door" );
// Hawk, open door
maps\nx_lunar_util::open_lunar_door_vignette( "control_door_1", true, 0, true );
level thread remove_door_player_clip( "control_door_player_clip", 2.0 );
level thread maps\nx_lunar_util::open_lunar_door( "control_door_1", 1.0 );
flag_set( "control_room_door_open" );
// Breach objective
flag_set( "control_objective_breach" );
// Turn on color trigger to move allies through door
trigger_on( "take_back_control_open_door_move", "targetname" );
// Wait till breach
flag_wait( "control_door_breached" );
self forceUseWeapon( "lunarrifle", "primary" );
}
control_pigeon_thread()
{
self endon( "death" );
}
control_seagull_thread()
{
self endon( "death" );
}
take_back_control_ally_spawn_shared( ally_name )
{
spawner = GetEnt( ally_name, "targetname" );
spawner thread add_spawn_function( ::take_back_control_ally_spawn_func );
ai = spawner spawn_ai();
ai.animname = ally_name;
return ai;
}
take_back_control_ally_spawn_func()
{
self endon( "death" );
self thread maps\nx_lunar_util::lunar_ally_interior_common();
self thread disable_surprise();
self thread ally_protect();
}
ally_protect()
{
/*while( 1 )
{
guy = trigger_wait_targetname( "ally_protect" );
if( guy == self )
{
break;
}
}*/
self.ignorerandombulletdamage = true;
self.ignoresuppression = true;
self.disableBulletWhizbyReaction = true;
self disable_pain();
self.dontavoidplayer = true;
self pushplayer( true );
}
//*******************************************************************
// *
//*******************************************************************
take_back_control_enemy_spawn()
{
CreateThreatBiasGroup( "control_floor_1_side" );
CreateThreatBiasGroup( "control_floor_1_main" );
CreateThreatBiasGroup( "control_floor_1_resupply" );
// CreateThreatBiasGroup( "control_floor_2" );
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_control_floor_1" );
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_control_floor_1_2" );
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_control_floor_1_3" );
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_control_floor_1_resupply" );
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_control_floor_2" );
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_control_floor_2_resupply" );
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_control_floor_2_resupply_2" );
SetThreatBiasAgainstAll( "control_floor_1_main", -3000 );
}
enemy_control_floor_1_side_spawn_func()
{
self endon( "death" );
self SetThreatBiasGroup( "control_floor_1_side" );
self.baseaccuracy = 0.5;
self thread maps\nx_lunar_util::lunar_enemy_interior_common();
// Give grenades
self.grenadeammo = 3;
self.force_grenade_drop = true;
self thread c_and_c_ambusher();
}
enemy_control_floor_1_main_spawn_func()
{
self endon( "death" );
self SetThreatBiasGroup( "control_floor_1_main" );
self.baseaccuracy = 0.25;
self thread maps\nx_lunar_util::lunar_enemy_interior_common( false );
// Give grenades
self.grenadeammo = 3;
self.force_grenade_drop = true;
self thread c_and_c_ambusher();
}
enemy_control_floor_1_main_scripted_spawn_func()
{
self endon( "death" );
self SetThreatBiasGroup( "control_floor_1_main" );
self.baseaccuracy = 0.25;
self thread maps\nx_lunar_util::lunar_enemy_interior_common( true );
// Give grenades
self.grenadeammo = 3;
self.force_grenade_drop = true;
self thread c_and_c_ambusher();
}
enemy_control_floor_1_resupply_spawn_func()
{
self endon( "death" );
self SetThreatBiasGroup( "control_floor_1_resupply" );
self thread maps\nx_lunar_util::lunar_enemy_interior_common( false );
// Give grenades
self.grenadeammo = 3;
self.force_grenade_drop = true;
self thread c_and_c_ambusher();
}
enemy_control_floor_2_spawn_func()
{
self endon( "death" );
// self SetThreatBiasGroup( "control_floor_2" );
self thread maps\nx_lunar_util::lunar_enemy_interior_common();
self.goalheight = 64;
flag_wait( "floor_2_jumping_enabled" );
self.goalheight = 1024;
self thread c_and_c_ambusher();
}
c_and_c_ambusher()
{
self endon( "death" );
flag_wait( "start_c_and_c_ambush" );
// Disperse ambushing
// wait RandomInt( 3 );
// Pick a random guy
guys = [];
guys[0] = level._player;
//guys[1] = level.hawk;
//guys[2] = level.eagle;
//guys[3] = level.pigeon;
//guys[4] = level.seagull;
random_guy = random( guys );
// Get Ai Super Aggressive and Deadly
self clear_force_color();
self.maxsightdistsqrd = 4000 * 4000;
self.favoriteenemy = random_guy;
self.baseaccuracy = 1.0;
self.pathrandompercent = 200;
self SetGoalEntity( random_guy );
self.goalradius = 400;
}
//*******************************************************************
// *
// *
//*******************************************************************
take_back_control_ending_start()
{
// Start the player and allies
level.hawk = take_back_control_ally_spawn_shared( "hawk" );
level.pigeon = take_back_control_ally_spawn_shared( "pigeon" );
level.seagull = take_back_control_ally_spawn_shared( "seagull" );
// Teleport starts
maps\nx_lunar_util::lunar_start( "take_back_control_ending_start",
"take_back_control_ending_eagle_start",
undefined,
"take_back_control_ending_hawk_start",
"take_back_control_ending_pigeon_start",
"take_back_control_ending_seagull_start" );
// Kill falcon
if( IsAlive( level.falcon ) )
{
level.falcon stop_magic_bullet_shield();
level.falcon kill();
}
// Init combat
maps\nx_lunar_util::lunar_combat_init();
// FX
level thread start_lsp_fx();
// Vision
thread maps\nx_lunar_fx::fx_init_vision_breached_helmet();
// Flags
flag_set( "close_c_and_c_doors" );
}
take_back_control_ending()
{
// VO
level thread take_back_control_ending_VO();
maps\nx_lunar_util::all_triggers_on( "take_back_control_ending_triggers" );
// Make sure ally protect is on eagle and hawk
level.eagle thread ally_protect();
level.eagle thread disable_surprise();
level.hawk thread ally_protect();
level.hawk thread disable_surprise();
// tagTC<hack> - animname is being changed by the breach vignette
level.eagle.animname = "eagle";
level.hawk.animname = "hawk";
// Hawk should never go back to color
level.hawk thread disable_ai_color();
level.hawk.old_forceColor = undefined;
// Open door vignette
maps\nx_lunar_util::open_lunar_door_vignette( "c_and_c_door_1", true, 0.0, true );
// Hawk should never go back to color
level.hawk thread disable_ai_color();
level.hawk.old_forceColor = undefined;
level thread maps\nx_lunar_util::open_lunar_door( "c_and_c_door_1", 1.0 );
level thread maps\nx_lunar_util::open_lunar_door( "c_and_c_door_2", 0.2 );
// Play the end vignette
level thread take_back_control_enter_vignette();
level thread take_back_control_end_vignette();
flag_set( "c_and_c_doors_open" );
maps\nx_lunar_util::all_triggers_on( "c_and_c_triggers" );
// Wait for player to trigger lsp
control_lsp = GetEnt( "control_lsp", "targetname" );
control_lsp trigger_on();
control_lsp sethintstring( &"NX_LUNAR_CONTROL_LSP_HINT" );
control_lsp waittill( "trigger" );
control_lsp trigger_off();
flag_set( "control_lsp_activated" );
level thread maps\nx_lunar_util::close_lunar_door( "c_and_c_door_1" );
level thread maps\nx_lunar_util::close_lunar_door( "c_and_c_door_2" );
// Clean up on aisle six
level thread maps\nx_lunar_util::clean_all_enemies();
}
take_back_control_enter_vignette()
{
flag_wait( "c_and_c_doors_open" );
wait( 1.0 );
maps\nx_lunar_anim::end_controls_enter( level.hawk, level.eagle );
}
take_back_control_end_vignette()
{
flag_wait( "c_and_c_doors_open" );
// Spawn C and C enemy
spawner = GetEnt( "end_controls_enemy_body", "targetname" );
spawner.script_forcespawn = 1;
spawner thread add_spawn_function( ::c_and_c_enemy_spawn_func );
enemy_body = spawner spawn_ai();
enemy_body.animname = "enemy_body";
// Spawn support guys
spawner = GetEnt( "end_controls_enemy_body_support", "targetname" );
spawner.script_forcespawn = 1;
spawner thread add_spawn_function( ::c_and_c_enemy_support_func );
enemy_body_support = spawner spawn_ai();
//Spawn Control Panel model
end_control_node = getstruct("vignette_lunar_end_controls", "script_noteworthy");
end_controls_panel = spawn_anim_model("end_controls_panel");
end_control_node thread anim_loop_solo( end_controls_panel, "end_controls_idle", "stop_idle");
//end_control_node anim_first_frame_solo( end_controls_panel, "end_controls" );
// Tell ally to shoot the enemy body
shoot_enemy_body( enemy_body );
// Body hit, play kill anim
maps\nx_lunar_anim::end_controls_enemy_kill( enemy_body );
enemy_body vignette_actor_kill();
enemy_body delete();
// Spawn dead body
enemy_body = vignette_actor_spawn("end_controls_enemy_body_dead", "enemy_body"); //"value" (kvp), "anim_name"
maps\nx_lunar_anim::end_controls_enemy_first_frame( enemy_body );
flag_wait( "control_lsp_activated" );
//stop the panel idle
end_control_node notify ("stop_idle");
// Play end control animations
maps\nx_lunar_anim::end_controls( enemy_body, level.hawk, level.eagle, end_controls_panel );
enemy_body vignette_actor_delete();
// End of level
nextmission();
}
shoot_enemy_body( enemy_body )
{
wait( 2.0 );
MagicBullet( "lunarrifle", level.hawk.origin, enemy_body.origin );
level.hawk Shoot( 1, enemy_body.origin);
level.eagle Shoot( 1, enemy_body.origin);
PlayFX( level._effect[ "charlie_impact" ], enemy_body.origin );
}
c_and_c_enemy_support_func()
{
self endon( "death" );
}
c_and_c_enemy_spawn_func()
{
self endon( "death" );
self thread disable_surprise();
self thread magic_bullet_shield();
self.ignoreme = true;
}
take_back_control_ending_VO()
{
// Turn off battle chatter
battlechatter_off( "allies" );
}
//*******************************************************************
// *
// *
//*******************************************************************
//*******************************************************************
// *
//*******************************************************************
start_lsp_fx()
{
wait( 5.0 );
level thread lsp_explosion_1();
level thread lsp_explosion_2();
}
lsp_explosion_1()
{
lsp_explosion_1 = GetEnt( "lsp_explosion_1", "targetname" );
lsp_smoke_1 = GetEnt( "lsp_smoke_1", "targetname" );
playFX( level._effect[ "lsp_explosion" ], lsp_explosion_1.origin, ( 0, 0, 1 ) );
// sunIntensity = getDVarFloat ( "r_lightTweakSunLight" );
// thread darken( 0.5, 0.5, 0.05 );
wait 1.5;
// thread brighten( sunIntensity, 1.5, 0.05 );
wait 1.15;
playFX( level._effect[ "lsp_ground_dust_200" ], level._player.origin, ( 0, 0, 1 ) );
playFX( level._effect[ "nx_lunar_falcon_death_dust" ], ( 2334, -3016, -1260 ), ( 0, 0, 1 ) );
playFX( level._effect[ "nx_lunar_falcon_death_dust" ], ( 2584, -3225, -1270 ), ( 0, 0, 1 ) );
playFX( level._effect[ "nx_lunar_falcon_death_dust" ], ( 1984, -3182, -1264 ), ( 0, 0, 1 ) );
playFX( level._effect[ "nx_lunar_falcon_death_dust" ], ( 2014, -3423, -1260 ), ( 0, 0, 1 ) );
playFX( level._effect[ "nx_lunar_falcon_death_dust" ], ( 2207, -3497, -1275 ), ( 0, 0, 1 ) );
playFX( level._effect[ "nx_lunar_falcon_death_dust" ], ( 2284, -3423, -1275 ), ( 0, 0, 1 ) );
}
lsp_explosion_2()
{
lsp_explosion_2 = GetEnt( "lsp_explosion_2", "targetname" );
lsp_smoke_2 = GetEnt( "lsp_smoke_2", "targetname" );
PlayFX( level._effect[ "lsp_explosion" ], lsp_explosion_2.origin );
}
//*******************************************************************
// *
//*******************************************************************
//*******************************************************************
// *
// *
//*******************************************************************