mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-19 07:42:54 +00:00
1733 lines
47 KiB
Plaintext
1733 lines
47 KiB
Plaintext
//****************************************************************************
|
||
// **
|
||
// Confidential - (C) Activision Publishing, Inc. 2010 **
|
||
// **
|
||
//****************************************************************************
|
||
// **
|
||
// Module: NX_LUNAR, Escape Interior Mission Script **
|
||
// **
|
||
// Created: 11/25/2010 - Travis Chen **
|
||
// **
|
||
//****************************************************************************
|
||
|
||
#include maps\_utility;
|
||
#include maps\_hud_util;
|
||
#include maps\_utility_code;
|
||
#include maps\_nx_objective_util;
|
||
#include common_scripts\utility;
|
||
#include maps\_anim;
|
||
#include maps\_vehicle;
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
// main threaded from nx_lunar.gsc main
|
||
main()
|
||
{
|
||
level thread turn_off_storage_module_damage();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
mission_flag_inits()
|
||
{
|
||
flag_init( "armory_module" );
|
||
flag_init( "life_support_module" );
|
||
flag_init( "medical_module" );
|
||
flag_init( "living_module" );
|
||
flag_init( "crew_module" );
|
||
flag_init( "crew_hub_ambush" );
|
||
flag_init( "in_crew_airlock" );
|
||
flag_init( "in_exterior_airlock" );
|
||
flag_init( "exterior_vista" );
|
||
flag_init( "medical_vo_complete" );
|
||
|
||
flag_init( "ally_door_open_start" );
|
||
|
||
flag_init( "introscreen_complete" );
|
||
flag_init( "remove_patch_hint" );
|
||
flag_init( "life_support_door_open" );
|
||
flag_init( "living_door_open" );
|
||
flag_init( "crew_airlock_open" );
|
||
flag_init( "exterior_airlock_open" );
|
||
flag_init( "player_has_weapon" );
|
||
flag_init( "player_has_helmet" );
|
||
flag_init( "player_at_the_armory" );
|
||
flag_init( "vo_armory_done" );
|
||
}
|
||
|
||
escape_interior_door_status_init()
|
||
{
|
||
// level thread maps\nx_lunar_util::lunar_door_status( "armory_door", "status_yellow" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "life_support_door", "status_red" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "living_door", "status_red" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "crew_airlock_door_1", "status_green" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "crew_airlock_door_2", "status_red" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "crew_hub_door", "status_green" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "exterior_airlock_door_1", "status_green" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "exterior_airlock_door_2", "status_red" );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
DEBUG_ARMORY_MODULE = false;
|
||
|
||
armory_module_start()
|
||
{
|
||
// Start the player and allies
|
||
maps\nx_lunar_util::lunar_start( "armory_player_start", "armory_eagle_start", "armory_falcon_start" );
|
||
|
||
thread maps\nx_lunar_fx::fx_init_vision_alert();
|
||
|
||
// Init combat
|
||
maps\nx_lunar_util::lunar_combat_init();
|
||
|
||
// Clip before explosion
|
||
breach_explosion_clip_before();
|
||
|
||
// Play lunar screen binks
|
||
thread maps\nx_lunar_util::lunar_screen_binks();
|
||
}
|
||
|
||
armory_module()
|
||
{
|
||
// Armory dialog
|
||
level thread armory_module_VO();
|
||
|
||
flag_set( "armory_module" );
|
||
|
||
// Turn on all triggers
|
||
maps\nx_lunar_util::all_triggers_on( "armory_triggers" );
|
||
|
||
// Turn on move out trigger
|
||
level thread ally_armory_move_out();
|
||
|
||
// Spawn allies
|
||
if( ( !isDefined( level.eagle ) ) && ( !isDefined ( level.falcon ) ) )
|
||
{
|
||
level thread maps\nx_lunar_util::lunar_ally_spawn();
|
||
}
|
||
level thread armory_ally_thread();
|
||
|
||
// Armory breach vignette, played at beginning of section
|
||
if( !DEBUG_ARMORY_MODULE )
|
||
{
|
||
level thread ally_armory_breach_vignette();
|
||
}
|
||
else
|
||
{
|
||
level thread armory_breach_explosion();
|
||
}
|
||
|
||
// Player Thread
|
||
level thread armory_player_thread();
|
||
|
||
// Spawn enemies
|
||
level thread armory_enemy_spawn();
|
||
|
||
// Turn on storage module damage
|
||
level thread turn_on_storage_module_damage();
|
||
level thread get_to_the_armory_path_block_off();
|
||
|
||
// Door thread
|
||
level thread armory_door_thread();
|
||
|
||
// Close the life support door as the player leaves
|
||
flag_wait( "life_support_breach_reach" );
|
||
}
|
||
|
||
ally_armory_move_out()
|
||
{
|
||
ally_armory_move_out = GetEnt( "ally_armory_move_out", "targetname" );
|
||
ally_armory_move_out trigger_off();
|
||
|
||
waittill_alive_aigroupcleared( "enemy_storage_breachers" );
|
||
|
||
ally_armory_move_out trigger_on();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
armory_door_thread()
|
||
{
|
||
// Open life support door ( starts open )
|
||
level thread maps\nx_lunar_util::open_lunar_door( "life_support_door", 0.2 );
|
||
|
||
// Close the life support door as the player leaves
|
||
flag_wait( "storage_close_life_support_door" );
|
||
|
||
wait( 3.5 );
|
||
level thread maps\nx_lunar_util::close_lunar_door( "life_support_door" );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
armory_player_thread()
|
||
{
|
||
// No unlimited sprint
|
||
setSavedDvar( "player_sprintUnlimited", "0" );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
armory_ally_thread()
|
||
{
|
||
level.eagle thread ally_protect();
|
||
level.falcon thread ally_protect();
|
||
|
||
flag_wait( "life_support_module" );
|
||
|
||
level.eagle thread ally_unprotect();
|
||
level.falcon thread ally_unprotect();
|
||
}
|
||
|
||
ally_protect()
|
||
{
|
||
if( IsDefined( self ) )
|
||
{
|
||
self.ignorerandombulletdamage = true;
|
||
self.ignoresuppression = true;
|
||
self.disableBulletWhizbyReaction = true;
|
||
self thread disable_pain();
|
||
self.dontavoidplayer = true;
|
||
self thread disable_surprise();
|
||
}
|
||
}
|
||
|
||
ally_unprotect()
|
||
{
|
||
if( IsDefined( self ) )
|
||
{
|
||
self.ignorerandombulletdamage = false;
|
||
self.ignoresuppression = false;
|
||
self.disableBulletWhizbyReaction = false;
|
||
self thread enable_pain();
|
||
self.dontavoidplayer = false;
|
||
self thread enable_surprise();
|
||
}
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
armory_enemy_spawn()
|
||
{
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_armory_breach" );
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_armory_breach_2" );
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_armory_breach_3" );
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_lsp_hallway_defend" );
|
||
}
|
||
|
||
enemy_storage_spawn_func()
|
||
{
|
||
self thread maps\nx_lunar_util::lunar_enemy_interior_common();
|
||
self thread disable_surprise();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
ally_armory_breach_vignette()
|
||
{
|
||
// Save the game
|
||
level thread autosave_now();
|
||
|
||
// Thread vignette func
|
||
level thread ally_armory_breach_vignette_thread();
|
||
|
||
wait( 0.92 );
|
||
|
||
// Explosion
|
||
level thread armory_breach_explosion();
|
||
|
||
// Slow mo
|
||
level thread armory_breach_slow_motion();
|
||
|
||
// Check if we should kill the player
|
||
level thread armory_breach_kill_zone();
|
||
|
||
// Jolt the player
|
||
level thread armory_breach_player_jolt();
|
||
|
||
// Allow player to go crouch
|
||
//level._player DisableInvulnerability();
|
||
//level._player allowcrouch( true );
|
||
}
|
||
|
||
ally_armory_breach_vignette_thread()
|
||
{
|
||
// Play the vignette, create spider in the debug checkpoint case
|
||
if( !IsDefined( level.spider) )
|
||
{
|
||
level.spider = maps\_nx_vignette_util::vignette_actor_spawn("armory_breach_spider", "spider"); //"value" (kvp), "anim_name"
|
||
}
|
||
|
||
maps\nx_lunar_anim::armory_breach( level.eagle, level.falcon, level.spider );
|
||
level.spider maps\_nx_vignette_util::vignette_actor_kill();
|
||
}
|
||
|
||
armory_breach_player_jolt()
|
||
{
|
||
wait( 0.15 );
|
||
|
||
// Shell shock
|
||
level thread armory_breach_player_shock();
|
||
|
||
// Rumble
|
||
level._player PlayRumbleOnEntity( "artillery_rumble" );
|
||
|
||
// FREEZE
|
||
level._player FreezeControls( true );
|
||
|
||
// Slide player towards the door
|
||
look_at = GetEnt( "armory_look_at", "targetname" );
|
||
vector_out = ( ( level._player.origin + ( 0, 0, 40) ) - look_at.origin );
|
||
vector_in = ( look_at.origin - ( level._player.origin + ( 0, 0, 40) ) );
|
||
|
||
base_thrust_out = vectornormalize( vector_out );
|
||
base_thrust_in = vectornormalize( vector_in );
|
||
boost_out = 100;
|
||
boost_in = 150;
|
||
|
||
// Slide out
|
||
was_in_armory_box_clip = false;
|
||
if( !flag( "player_in_armory_box_clip" ) )
|
||
{
|
||
level._player thread BeginSliding( base_thrust_out * boost_out, 5, 0.25 );
|
||
wait( 0.7 );
|
||
level._player thread endsliding();
|
||
}
|
||
else
|
||
{
|
||
wait( 0.7 );
|
||
was_in_armory_box_clip = true;
|
||
}
|
||
|
||
// Slide in
|
||
if( !flag( "player_in_armory_box_clip" ) )
|
||
{
|
||
level._player thread BeginSliding( base_thrust_in * boost_in, 2, 0.1 );
|
||
}
|
||
else
|
||
{
|
||
// Push player out of clip
|
||
level._player thread BeginSliding( base_thrust_in * boost_in, 5, 0.1 );
|
||
}
|
||
wait( 2.0 );
|
||
level._player thread endsliding();
|
||
|
||
// Turn on clip if player is in armory box
|
||
if( was_in_armory_box_clip )
|
||
{
|
||
breach_explosion_clip_after();
|
||
}
|
||
|
||
// UNFREEZE
|
||
level._player FreezeControls( false );
|
||
|
||
}
|
||
armory_breach_player_shock()
|
||
{
|
||
//level._player shellshock( "estate_bouncingbetty", 3.5 );
|
||
earthquake( 0.4, 0.6, level._player.origin, 2000 );
|
||
wait( 0.6 );
|
||
earthquake( 0.25, 1.0, level._player.origin, 2000 );
|
||
|
||
level._player.ignoreme = true;
|
||
wait 3.5;
|
||
level._player.ignoreme = false;
|
||
}
|
||
|
||
armory_breach_kill_zone()
|
||
{
|
||
// Kill the player if too close to door
|
||
if( flag( "armory_breach_player_kill_zone" ) )
|
||
{
|
||
SetDvar( "ui_deadquote", "NX_LUNAR_FAIL_ARMORY_BREACH" );
|
||
missionFailedWrapper();
|
||
}
|
||
}
|
||
armory_breach_vol()
|
||
{
|
||
|
||
level._player setchannelvolumes( "snd_channelvolprio_pain", "nx_lunar_armory_hatch_destroy", 0.4 );
|
||
|
||
wait 5.1;
|
||
|
||
level._player deactivatechannelvolumes( "snd_channelvolprio_pain", 2 );
|
||
|
||
}
|
||
|
||
armory_breach_explosion()
|
||
{
|
||
// Play the FX
|
||
exploder( "fx_armory_breach" );
|
||
level._player playsound ( "nx_lunar_hatch_destroy" );
|
||
thread armory_breach_vol();
|
||
|
||
// Change the door status
|
||
level thread maps\nx_lunar_util::lunar_door_status( "armory_door", "status_green" );
|
||
|
||
// Clip the explosion crate
|
||
breach_explosion_clip_after();
|
||
|
||
wait( 0.2 );
|
||
|
||
// Destructable state change, both armory and storage hall
|
||
exploder( 1 );
|
||
exploder( 2 );
|
||
|
||
// Open the armory door
|
||
level thread maps\nx_lunar_util::open_lunar_door( "armory_door", 0.1, true );
|
||
|
||
// Open storage door
|
||
level thread maps\nx_lunar_util::open_lunar_door( "storage_door_01", 0.1, true );
|
||
|
||
//set the new helmet sound type flag
|
||
flag_set( "sfx_int_base_milsuit_depress" );
|
||
}
|
||
|
||
armory_breach_slow_motion()
|
||
{
|
||
// Slow motion
|
||
SetSlowMotion( 1.0, 0.25, 0.2 );
|
||
|
||
wait( 1.5 );
|
||
|
||
// Slow motion
|
||
SetSlowMotion( 0.4, 1.0, 0.2 );
|
||
}
|
||
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
breach_explosion_clip_before()
|
||
{
|
||
breach_explosion_clip_before = GetEnt( "breach_explosion_clip_before", "targetname" );
|
||
breach_explosion_clip_after = GetEnt( "breach_explosion_clip_after", "targetname" );
|
||
|
||
breach_explosion_clip_before Solid();
|
||
breach_explosion_clip_before DisconnectPaths();
|
||
breach_explosion_clip_after NotSolid();
|
||
breach_explosion_clip_after ConnectPaths();
|
||
}
|
||
|
||
breach_explosion_clip_after()
|
||
{
|
||
if( !flag( "player_in_armory_box_clip" ) )
|
||
{
|
||
breach_explosion_clip_before = GetEnt( "breach_explosion_clip_before", "targetname" );
|
||
breach_explosion_clip_after = GetEnt( "breach_explosion_clip_after", "targetname" );
|
||
|
||
breach_explosion_clip_after Solid();
|
||
breach_explosion_clip_after DisconnectPaths();
|
||
breach_explosion_clip_before NotSolid();
|
||
breach_explosion_clip_before ConnectPaths();
|
||
}
|
||
}
|
||
|
||
get_to_the_armory_path_block_off()
|
||
{
|
||
path_blocks = GetEntArray( "get_to_the_armory_path_block", "targetname" );
|
||
foreach( path_block in path_blocks )
|
||
{
|
||
path_block ConnectPaths();
|
||
path_block NotSolid();
|
||
}
|
||
}
|
||
|
||
turn_off_storage_module_damage()
|
||
{
|
||
damages_clip = GetEntArray( "storage_module_damage_clip", "targetname" );
|
||
foreach( damage_clip in damages_clip )
|
||
{
|
||
damage_clip ConnectPaths();
|
||
damage_clip NotSolid();
|
||
}
|
||
|
||
damages = GetEntArray( "storage_module_damage", "targetname" );
|
||
foreach( damage in damages )
|
||
{
|
||
damage hide();
|
||
}
|
||
}
|
||
|
||
turn_on_storage_module_damage()
|
||
{
|
||
damages_clip = GetEntArray( "storage_module_damage_clip", "targetname" );
|
||
foreach( damage_clip in damages_clip )
|
||
{
|
||
damage_clip Solid();
|
||
damage_clip DisconnectPaths();
|
||
}
|
||
|
||
damages = GetEntArray( "storage_module_damage", "targetname" );
|
||
foreach( damage in damages )
|
||
{
|
||
damage show();
|
||
}
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
armory_module_VO()
|
||
{
|
||
battlechatter_on( "allies" );
|
||
|
||
wait( 4.0 );
|
||
|
||
// We're moving!
|
||
radio_dialogue( "moon_eag_move_06" );
|
||
|
||
flag_wait( "player_left_armory" );
|
||
|
||
// Tango up hight at our nine!
|
||
radio_dialogue( "moon_eag_int_09" );
|
||
|
||
flag_wait( "vo_keep_pushing_cnc" );
|
||
|
||
// Keep pushing - we need to get to C&C.
|
||
radio_dialogue( "moon_eag_int_10" );
|
||
|
||
flag_wait( "life_support_breach_reach" );
|
||
|
||
battlechatter_off( "allies" );
|
||
|
||
// Riggs: Dammit! This way's blocked.
|
||
radio_dialogue( "moon_fal_ext_wayblocked" );
|
||
|
||
// Riggs: We dont' have time to clear this debris.
|
||
radio_dialogue( "moon_fal_ext_notime" );
|
||
|
||
// Crow: We need to find another way around.
|
||
radio_dialogue( "moon_eag_int_findwayaround" );
|
||
|
||
// Crow: Head through life support.
|
||
radio_dialogue( "moon_eag_int_13" );
|
||
|
||
flag_wait( "life_support_breach_near" );
|
||
|
||
// Crow: Emergency door is sealed
|
||
radio_dialogue( "moon_eag_int_emergencydoor" );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
life_support_module_start()
|
||
{
|
||
// Start the player and allies
|
||
maps\nx_lunar_util::lunar_start( "life_support_module_player_start", "life_support_module_eagle_start", "life_support_module_falcon_start" );
|
||
|
||
// Init combat
|
||
maps\nx_lunar_util::lunar_combat_init();
|
||
|
||
// Turn on storage module damage
|
||
level thread turn_on_storage_module_damage();
|
||
|
||
// Unblock AI paths
|
||
level thread get_to_the_armory_path_block_off();
|
||
|
||
// set default vision set state for this area.
|
||
thread maps\nx_lunar_fx::fx_init_vision_breached();
|
||
|
||
// Flag set
|
||
flag_set( "life_support_breach_reach" );
|
||
|
||
// Play lunar screen binks
|
||
thread maps\nx_lunar_util::lunar_screen_binks();
|
||
}
|
||
|
||
life_support_module()
|
||
{
|
||
flag_set( "life_support_module" );
|
||
|
||
// Allies don't push player
|
||
level.eagle pushplayer( false );
|
||
level.falcon pushplayer( false );
|
||
|
||
// Dialog
|
||
level thread life_support_module_VO();
|
||
|
||
// Turn on life support triggers
|
||
maps\nx_lunar_util::all_triggers_off( "armory_triggers" );
|
||
|
||
// Open door
|
||
maps\nx_lunar_util::open_lunar_door_vignette( "life_support_door", true, 3.0, undefined );
|
||
level.eagle thread life_support_ignore();
|
||
level thread maps\nx_lunar_util::open_lunar_door( "life_support_door" );
|
||
flag_set( "life_support_door_open" );
|
||
|
||
// Triggers on
|
||
maps\nx_lunar_util::all_triggers_on( "life_support_triggers" );
|
||
|
||
// Start paper exploder
|
||
level thread maps\nx_lunar_util::proximity_paper_exploder();
|
||
|
||
// Spawn the enemies
|
||
level thread life_support_enemy_spawn();
|
||
|
||
// Start next mission event, medical module
|
||
medical_module();
|
||
}
|
||
|
||
life_support_ignore()
|
||
{
|
||
// Should ignore enemies until he has a goal
|
||
self.ignoreall = true;
|
||
self.ignoreme = true;
|
||
self thread ally_protect();
|
||
|
||
wait( 5.25 );
|
||
|
||
self.ignoreme = false;
|
||
self.ignoreall = false;
|
||
self thread ally_unprotect();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
life_support_enemy_spawn()
|
||
{
|
||
// Choice spawn, two paths w/ two different spawn outcomes
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_life_support_jumpers" );
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_life_support" );
|
||
|
||
level._cover_traverse_wait_min = 2.0;
|
||
level._cover_traverse_wait_max = 3.0;
|
||
}
|
||
|
||
enemy_life_support_spawn_func()
|
||
{
|
||
self thread maps\nx_lunar_util::lunar_enemy_interior_common();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
life_support_module_VO()
|
||
{
|
||
flag_wait( "ally_door_open_start" );
|
||
|
||
// Overridein 3<> 2<> 1<>
|
||
radio_dialogue( "moon_eag_int_override" );
|
||
wait( 0.25 );
|
||
|
||
flag_wait( "life_support_door_open" );
|
||
|
||
battlechatter_on( "allies" );
|
||
|
||
// Tangos right<68>
|
||
radio_dialogue( "moon_eag_int_14" );
|
||
wait( 0.25 );
|
||
|
||
flag_wait( "vo_hes_going_left" );
|
||
|
||
// He's going left<66> Get to high ground Sams!
|
||
//radio_dialogue( "moon_eag_int_15" );
|
||
|
||
flag_wait( "vo_push_forward_into_medical" );
|
||
|
||
// Push forward into Medical
|
||
radio_dialogue( "moon_eag_int_16" );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
medical_module()
|
||
{
|
||
flag_set( "medical_module" );
|
||
|
||
// Save the game
|
||
level thread autosave_now();
|
||
|
||
// Triggers on
|
||
maps\nx_lunar_util::all_triggers_on( "medical_triggers" );
|
||
|
||
// Spawn the enemies
|
||
level thread medical_enemy_spawn();
|
||
|
||
// Wait for all dead
|
||
waittill_aigroupcleared( "enemy_medical" );
|
||
|
||
// Save the game
|
||
level thread autosave_now();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
medical_enemy_spawn()
|
||
{
|
||
// Choice spawn
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_medical" );
|
||
}
|
||
|
||
enemy_medical_spawn_func()
|
||
{
|
||
self thread maps\nx_lunar_util::lunar_enemy_interior_common();
|
||
self.goalradius = 64;
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
DEBUG_LIVING_MODULE = false;
|
||
living_module_start()
|
||
{
|
||
// Start the player and allies
|
||
maps\nx_lunar_util::lunar_start( "living_module_player_start", "living_module_eagle_start", "living_module_falcon_start" );
|
||
|
||
// set default vision set state for this area.
|
||
thread maps\nx_lunar_fx::fx_init_vision_breached();
|
||
|
||
// Init combat
|
||
maps\nx_lunar_util::lunar_combat_init();
|
||
|
||
// Play lunar screen binks
|
||
thread maps\nx_lunar_util::lunar_screen_binks();
|
||
}
|
||
|
||
living_module()
|
||
{
|
||
flag_set( "living_module" );
|
||
|
||
// VO
|
||
level thread living_module_VO();
|
||
|
||
// Triggers on
|
||
maps\nx_lunar_util::all_triggers_on( "medical_to_living_triggers" );
|
||
|
||
// Player
|
||
level._player thread living_module_player_thread();
|
||
|
||
// Open door, remove doorway player clip
|
||
maps\nx_lunar_util::open_lunar_door_vignette( "living_door", true, 3.5, undefined, "medical_vo_complete" );
|
||
level thread maps\nx_lunar_util::open_lunar_door( "living_door", 1.0 );
|
||
flag_set( "living_door_open" );
|
||
|
||
// Dead crew on floor vignette
|
||
level thread living_hallway_vignette();
|
||
|
||
// tagTC<note> - removed blocking clip, animation fixed guy going in first
|
||
// Remove player clip blocking player from entering before AI
|
||
// level thread remove_living_door_player_clip();
|
||
|
||
// Triggers
|
||
maps\nx_lunar_util::all_triggers_on( "living_triggers" );
|
||
|
||
trigger_living_move_up = GetEntArray( "trigger_living_move_up", "targetname" );
|
||
foreach( trigger in trigger_living_move_up )
|
||
{
|
||
trigger trigger_off();
|
||
}
|
||
|
||
// Allies
|
||
level.eagle thread living_module_ally_behaivior();
|
||
level.falcon thread living_module_ally_behaivior();
|
||
|
||
// Spawn enemies
|
||
level thread living_enemy_spawn();
|
||
|
||
// Move to next checkpoint
|
||
flag_wait( "move_allies_to_airlock" );
|
||
}
|
||
|
||
remove_living_door_player_clip()
|
||
{
|
||
wait( 3.0 );
|
||
player_clip = GetEnt( "living_door_player_clip", "targetname" );
|
||
|
||
player_clip Delete();
|
||
}
|
||
|
||
wait_for_living_enemies_cleared()
|
||
{
|
||
waittill_aigroupcleared( "enemy_living_floor_1" );
|
||
waittill_aigroupcleared( "enemy_living_floor_1_mover" );
|
||
waittill_aigroupcleared( "enemy_living_floor_2" );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
living_hallway_vignette()
|
||
{
|
||
level thread maps\nx_lunar_anim::scientist_dead1_spawn();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
living_module_ally_behaivior()
|
||
{
|
||
flag_wait( "allies_in_living" );
|
||
|
||
self thread disable_surprise();
|
||
|
||
self.ignoreme = true;
|
||
self.ignoreall = true;
|
||
self pushplayer( true );
|
||
|
||
self waittill( "goal" );
|
||
|
||
wait( 2.0 );
|
||
|
||
self pushplayer( false );
|
||
self.ignoreme = false;
|
||
self.ignoreall = false;
|
||
self.baseaccuracy = 0.1;
|
||
|
||
self thread living_module_ally_behaivior_reset();
|
||
|
||
flag_wait( "player_in_flank" );
|
||
|
||
self.baseaccuracy = 0.75;
|
||
|
||
}
|
||
|
||
living_module_ally_behaivior_reset()
|
||
{
|
||
flag_wait( "exterior_vista" );
|
||
|
||
self thread enable_surprise();
|
||
self pushplayer( true );
|
||
self.baseaccuracy = 1.0;
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
living_enemy_spawn()
|
||
{
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_living_floor_1" );
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_living_floor_1_support" );
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_living_floor_1_support_2" );
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_living_floor_1_support_3" );
|
||
}
|
||
|
||
enemy_living_floor_1_spawn_func()
|
||
{
|
||
self endon( "death" );
|
||
|
||
self thread maps\nx_lunar_util::lunar_enemy_interior_common();
|
||
self thread disable_surprise();
|
||
|
||
flag_wait( "player_in_flank" );
|
||
|
||
self thread enable_surprise();
|
||
|
||
// Don't let enemies go upstairs
|
||
self thread check_jumper();
|
||
|
||
// Give grenades
|
||
self.grenadeammo = 3;
|
||
self.force_grenade_drop = true;
|
||
}
|
||
|
||
enemy_living_floor_1_hidden_spawn_func()
|
||
{
|
||
self.ignoreme = true;
|
||
self thread enemy_living_floor_1_spawn_func();
|
||
}
|
||
|
||
enemy_living_floor_1_mover_spawn_func()
|
||
{
|
||
self endon( "death" );
|
||
|
||
self thread maps\nx_lunar_util::lunar_enemy_interior_common();
|
||
self thread disable_surprise();
|
||
self.goalradius = 128;
|
||
|
||
flag_wait( "player_in_flank" );
|
||
|
||
self thread enable_surprise();
|
||
|
||
// Don't let enemies go upstairs
|
||
self thread check_jumper();
|
||
|
||
// Give grenades
|
||
self.grenadeammo = 3;
|
||
self.force_grenade_drop = true;
|
||
}
|
||
|
||
enemy_living_floor_2_spawn_func()
|
||
{
|
||
self endon( "death" );
|
||
|
||
self thread maps\nx_lunar_util::lunar_enemy_interior_common();
|
||
|
||
// Don't let enemies go downstairs
|
||
self thread check_jumper();
|
||
|
||
// Give grenades
|
||
self.grenadeammo = 3;
|
||
self.force_grenade_drop = true;
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
living_module_player_thread()
|
||
{
|
||
// Check danger zones
|
||
self thread maps\nx_lunar_util::player_danger_zone();
|
||
self thread maps\nx_lunar_util::player_flank_zone();
|
||
|
||
flag_wait( "exterior_vista" );
|
||
|
||
self notify( "end_danger_zone" );
|
||
self notify( "end_flank_zone" );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
living_module_VO()
|
||
{
|
||
battlechatter_off( "allies" );
|
||
|
||
// They're down
|
||
radio_dialogue( "moon_eag_kill_low_03" );
|
||
|
||
wait( 1.0 );
|
||
|
||
// Explosion occurs next door.
|
||
level thread maps\nx_lunar_get_to_the_armory::distant_breach_effects( .4, 2);
|
||
level thread maps\nx_lunar_util::lunar_door_status( "living_door", "status_green" );
|
||
|
||
wait( 1.0 );
|
||
|
||
// Rigg: That came from the living quarters!
|
||
radio_dialogue( "moon_fal_ext_camefrom" );
|
||
|
||
// Crow: That sounded bad. Let's get this door open.
|
||
radio_dialogue( "moon_eag_int_soundbad" );
|
||
|
||
flag_set( "medical_vo_complete" );
|
||
flag_wait( "ally_door_open_start" );
|
||
|
||
// On my mark. 3<> 2<> 1<>
|
||
radio_dialogue( "moon_eag_int_onmy" );
|
||
|
||
level thread living_vo_keep_moving();
|
||
|
||
// Look alert.
|
||
// radio_dialogue( "moon_eag_livhal_01" );
|
||
|
||
flag_wait( "vo_ambush_right" );
|
||
|
||
// Ambush! Right!
|
||
radio_dialogue( "moon_eag_livhal_02" );
|
||
|
||
battlechatter_on( "allies" );
|
||
|
||
// Down the hallway, take them out!
|
||
radio_dialogue( "moon_eag_int_22" );
|
||
|
||
wait( 3.0 );
|
||
|
||
// Walker! Keep moving!
|
||
radio_dialogue( "moon_eag_move_01" );
|
||
|
||
// Wait for everybody dead
|
||
wait_for_living_enemies_cleared();
|
||
|
||
trigger_living_move_up = GetEntArray( "trigger_living_move_up", "targetname" );
|
||
foreach( trigger in trigger_living_move_up )
|
||
{
|
||
trigger trigger_on();
|
||
}
|
||
|
||
// That's it!
|
||
radio_dialogue( "moon_eag_kill_yell_04" );
|
||
|
||
wait( 0.5 );
|
||
|
||
// Head upstairs!
|
||
radio_dialogue( "moon_eag_int_21" );
|
||
}
|
||
|
||
living_vo_keep_moving()
|
||
{
|
||
wait( 0.5 );
|
||
|
||
// Look at dead body
|
||
look_target = GetEnt( "living_look_at_dead_crew", "targetname" );
|
||
SetSavedDvar( "ai_lookatblendvalue", 0.2 );
|
||
level.eagle SetLookAtEntity( look_target );
|
||
|
||
wait( 1.0 );
|
||
|
||
// Shit... Nothing we can do. Keep moving.
|
||
radio_dialogue( "moon_eag_int_shitnothing" );
|
||
|
||
// Stop look at
|
||
level.eagle StopLookAt( 120 );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
exterior_vista_start()
|
||
{
|
||
// Start the player and allies
|
||
maps\nx_lunar_util::lunar_start( "exterior_vista_player_start", "exterior_vista_eagle_start", "exterior_vista_falcon_start" );
|
||
|
||
// set default vision set state for this area.
|
||
thread maps\nx_lunar_fx::fx_init_vision_breached();
|
||
|
||
// Init combat
|
||
maps\nx_lunar_util::lunar_combat_init();
|
||
|
||
// Play lunar screen binks
|
||
thread maps\nx_lunar_util::lunar_screen_binks();
|
||
}
|
||
|
||
exterior_vista()
|
||
{
|
||
flag_set( "exterior_vista" );
|
||
|
||
maps\nx_lunar_util::all_triggers_off( "living_triggers" );
|
||
maps\nx_lunar_util::all_triggers_on( "exterior_vista_triggers" );
|
||
|
||
exterior_vista_jump_down = GetEnt( "exterior_vista_jump_down", "targetname" );
|
||
exterior_vista_jump_down trigger_off();
|
||
|
||
// Remove the player block
|
||
exterior_vista_player_block = GetEnt( "exterior_vista_player_block", "targetname" );
|
||
exterior_vista_player_block delete();
|
||
|
||
// VO
|
||
level thread exterior_vista_VO();
|
||
|
||
// Steam
|
||
level thread exterior_vista_steam();
|
||
|
||
flag_wait( "exterior_vista_complete" );
|
||
|
||
// Stop the lunar screen bink playback
|
||
StopCinematicInGame();
|
||
|
||
// tagTC<note> - Change to exterior vision set, taken from crew hub
|
||
thread maps\nx_lunar_fx::fx_crew_module_exit_vision_change();
|
||
}
|
||
|
||
exterior_vista_VO()
|
||
{
|
||
//flag_wait( "vo_living_way_out" );
|
||
|
||
// Crow: We need a way out.
|
||
//radio_dialogue( "moon_eag_ext_needwayout" );
|
||
|
||
flag_wait( "vo_living_come_on" );
|
||
|
||
flag_set( "music_player_arrived_at_airlock" );
|
||
|
||
// Crow: Come on. We can get outside through here.
|
||
radio_dialogue( "moon_eag_ext_getouthere" );
|
||
}
|
||
|
||
exterior_vista_steam()
|
||
{
|
||
exterior_vista_steam = GetEntArray( "exterior_vista_steam", "targetname" );
|
||
foreach( script_origin in exterior_vista_steam )
|
||
{
|
||
forward = AnglesToForward( script_origin.angles );
|
||
up = AnglesToUp( script_origin.angles );
|
||
playFX( level._effect[ "exterior_vista_steam" ], script_origin.origin, forward, up );
|
||
}
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
check_jumper()
|
||
{
|
||
if( IsDefined( self.script_parameters ) && self.script_parameters == "jumper" )
|
||
{
|
||
self.goalradius = 0;
|
||
self.goalheight = 512;
|
||
}
|
||
else
|
||
{
|
||
self.goalheight = 64;
|
||
}
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
/*
|
||
|
||
DEBUG_CREW_MODULE = false;
|
||
crew_module_start()
|
||
{
|
||
// Start the player and allies
|
||
maps\nx_lunar_util::lunar_start( "crew_module_player_start", "crew_module_eagle_start", "crew_module_falcon_start" );
|
||
|
||
// set default vision set state for this area.
|
||
thread maps\nx_lunar_fx::fx_init_vision_breached();
|
||
|
||
// Init combat
|
||
maps\nx_lunar_util::lunar_combat_init();
|
||
|
||
// Play lunar screen binks
|
||
thread maps\nx_lunar_util::lunar_screen_binks();
|
||
}
|
||
|
||
crew_module()
|
||
{
|
||
// VO
|
||
level thread crew_module_VO();
|
||
|
||
flag_set( "crew_module" );
|
||
|
||
//DR: eventually, this needs to move to the point where you approach the
|
||
//crew HUB airlock door (the first one). For now, just putting here, since there
|
||
//is no hook for the approaching of the door.
|
||
//DR:3/4/2011 - I believe this is fixed now, gonna remove
|
||
flag_set( "music_player_arrived_at_airlock" );
|
||
//DR: end comments
|
||
|
||
// Cycle airlock
|
||
crew_airlock_cycle();
|
||
|
||
// Crew triggers
|
||
maps\nx_lunar_util::all_triggers_on( "crew_triggers" );
|
||
|
||
// transition to the alert vision set in the crew_module
|
||
thread maps\nx_lunar_fx::fx_crew_module_enter_vision_change();
|
||
|
||
// Player thread
|
||
level._player thread crew_module_player_thread();
|
||
|
||
// Ally thread
|
||
level thread crew_module_ally_behaivior();
|
||
|
||
// Save the game
|
||
level thread autosave_now();
|
||
|
||
// Get the move allies trigger, turn it off
|
||
move_allies_trigger = GetEnt( "move_allies_to_exterior_airlock", "targetname" );
|
||
move_allies_trigger trigger_off();
|
||
|
||
// Crew module enemy spawn
|
||
level thread crew_module_enemy_spawn();
|
||
|
||
// Start glass break logic
|
||
level thread maps\nx_lunar_util::proximity_glass_break( "hydro_break_glass" );
|
||
|
||
// Airlock sequence
|
||
worker = GetEnt( "airlock_door_worker", "targetname" );
|
||
if( IsDefined( worker ) )
|
||
{
|
||
worker thread crew_module_airlock_death_vignette();
|
||
}
|
||
|
||
// Wait for bottom floor clear
|
||
waittill_aigroupcount( "enemy_crew_floor_1", 2 );
|
||
|
||
// Ambush remaining enemies
|
||
flag_set( "crew_hub_ambush" );
|
||
|
||
// Move to next checkpoint
|
||
move_allies_trigger trigger_on();
|
||
flag_wait( "move_allies_to_exterior_airlock" );
|
||
|
||
// Cycle Exterior Airlock
|
||
exterior_airlock_cycle();
|
||
|
||
// transition to the exterior vision set
|
||
thread maps\nx_lunar_fx::fx_crew_module_exit_vision_change();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
crew_airlock_cycle()
|
||
{
|
||
// Airlock sequence
|
||
if( !DEBUG_CREW_MODULE )
|
||
{
|
||
// Open door first door
|
||
maps\nx_lunar_util::open_lunar_door_vignette( "crew_airlock_door_1", true, 0, undefined );
|
||
level thread maps\nx_lunar_util::open_lunar_door( "crew_airlock_door_1" );
|
||
|
||
// Crew airlock triggers
|
||
maps\nx_lunar_util::all_triggers_on( "crew_airlock_triggers" );
|
||
|
||
// Wait till both allies enter
|
||
wait_till_airlock_trigger( "all_in_crew_airlock" );
|
||
|
||
// Close the first door
|
||
maps\nx_lunar_util::close_lunar_door( "crew_airlock_door_1" );
|
||
|
||
// In crew airlock
|
||
flag_set( "in_crew_airlock" );
|
||
|
||
level thread maps\nx_lunar_util::lunar_door_status( "crew_airlock_door_1", "status_yellow" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "crew_airlock_door_2", "status_yellow" );
|
||
|
||
thread audio_set_crew_amb();
|
||
|
||
// Do the airlock cycle
|
||
maps\nx_lunar_util::airlock_vignette( "crew_airlock_door_1", "crew_airlock_door_2", "moon_pres" );
|
||
}
|
||
else
|
||
{
|
||
level thread maps\nx_lunar_util::open_lunar_door( "crew_airlock_door_1", 0.5 );
|
||
level thread maps\nx_lunar_util::open_lunar_door( "crew_airlock_door_2", 0.5 );
|
||
}
|
||
|
||
flag_set( "crew_airlock_open" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "crew_airlock_door_1", "status_red" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "crew_airlock_door_2", "status_green" );
|
||
|
||
// Enable color on eagle / falcon
|
||
level.eagle thread airlock_color_enable();
|
||
level.falcon thread airlock_color_enable();
|
||
|
||
//setting sfx helmet state flags to proper sounding state
|
||
flag_set( "sfx_int_base_milsuit_press2" ); //(after going through airlock to repressurize)
|
||
}
|
||
|
||
audio_set_crew_amb()
|
||
{
|
||
|
||
wait 2;
|
||
SetSavedDvar( "cg_minBreathingLevel", "4" );
|
||
thread maps\_utility::set_ambient( "nx_lunar_crew" );
|
||
|
||
}
|
||
|
||
exterior_airlock_cycle()
|
||
{
|
||
// Open door first door
|
||
maps\nx_lunar_util::open_lunar_door_vignette( "exterior_airlock_door_1", true, 3.2, undefined );
|
||
level thread maps\nx_lunar_util::open_lunar_door( "exterior_airlock_door_1" );
|
||
|
||
// Crew airlock triggers
|
||
maps\nx_lunar_util::all_triggers_on( "exterior_airlock_triggers" );
|
||
|
||
// Wait till both allies enter
|
||
wait_till_airlock_trigger( "all_in_exterior_airlock" );
|
||
|
||
// Close the first door
|
||
maps\nx_lunar_util::close_lunar_door( "exterior_airlock_door_1" );
|
||
|
||
// In exterior airlock
|
||
flag_set( "in_exterior_airlock" );
|
||
|
||
// Depressurization vapor FX
|
||
level thread airlock_depressurize_vapor_effects();
|
||
level thread maps\nx_lunar_util::lunar_door_status( "exterior_airlock_door_1", "status_yellow" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "exterior_airlock_door_2", "status_yellow" );
|
||
|
||
// Do the airlock cycle
|
||
thread audio_exterior_amb();
|
||
maps\nx_lunar_util::airlock_vignette( "exterior_airlock_door_1", "exterior_airlock_door_2", "moon" );
|
||
flag_set( "exterior_airlock_open" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "exterior_airlock_door_1", "status_red" );
|
||
level thread maps\nx_lunar_util::lunar_door_status( "exterior_airlock_door_2", "status_green" );
|
||
|
||
// Enable color on eagle / falcon
|
||
level.eagle thread airlock_color_enable();
|
||
level.falcon thread airlock_color_enable();
|
||
|
||
// transition to the exterior vision set
|
||
thread maps\nx_lunar_fx::fx_crew_module_exit_vision_change();
|
||
|
||
}
|
||
|
||
audio_exterior_amb()
|
||
{
|
||
|
||
wait 0.5;
|
||
SetSavedDvar( "cg_minBreathingLevel", "0" );
|
||
thread maps\_utility::set_ambient( "nx_lunar_int" );
|
||
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
wait_till_airlock_trigger( trigger_name )
|
||
{
|
||
airlock_trigger = GetEnt( trigger_name, "targetname" );
|
||
|
||
eagle = false;
|
||
falcon = false;
|
||
player = false;
|
||
|
||
// Wait for eagle and falcon
|
||
while( 1 )
|
||
{
|
||
airlock_trigger waittill( "trigger", other );
|
||
|
||
if( other == level.eagle )
|
||
{
|
||
eagle = true;
|
||
level.eagle thread airlock_color_disable();
|
||
}
|
||
|
||
if( other == level.falcon )
|
||
{
|
||
falcon = true;
|
||
level.falcon thread airlock_color_disable();
|
||
}
|
||
|
||
if( eagle && falcon )
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Wait for player
|
||
while( 1 )
|
||
{
|
||
airlock_trigger waittill( "trigger", other );
|
||
|
||
if( IsPlayer( other ) )
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
|
||
// transition to the exterior vision set
|
||
thread maps\nx_lunar_fx::fx_crew_module_exit_vision_change();
|
||
}
|
||
|
||
airlock_color_disable()
|
||
{
|
||
self waittill( "goal" );
|
||
self disable_ai_color();
|
||
}
|
||
|
||
airlock_color_enable()
|
||
{
|
||
self enable_ai_color();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
crew_module_ally_behaivior()
|
||
{
|
||
old_falcon_goalheight = level.falcon.goalheight;
|
||
old_eagle_goalheight = level.eagle.goalheight;
|
||
level.falcon.goalheight = 64;
|
||
level.eagle.goalheight = 64;
|
||
|
||
level.eagle thread ally_protect();
|
||
level.falcon thread ally_protect();
|
||
|
||
flag_wait( "exterior_airlock_open" );
|
||
|
||
if ( IsDefined( old_falcon_goalheight ) )
|
||
{
|
||
level.falcon.goalheight = old_falcon_goalheight;
|
||
}
|
||
if ( IsDefined( old_eagle_goalheight ) )
|
||
{
|
||
level.eagle.goalheight = old_eagle_goalheight;
|
||
}
|
||
|
||
level.eagle thread ally_unprotect();
|
||
level.falcon thread ally_unprotect();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
crew_module_enemy_spawn()
|
||
{
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_crew" );
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_crew_2" );
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_crew_3" );
|
||
maps\nx_lunar_util::trigger_choice_spawn( "choice_spawn_crew_4" );
|
||
}
|
||
|
||
enemy_hydro_spawn_func()
|
||
{
|
||
self endon( "death" );
|
||
|
||
self thread maps\nx_lunar_util::lunar_enemy_interior_common( false );
|
||
|
||
self thread check_jumper();
|
||
self thread disable_surprise();
|
||
}
|
||
|
||
enemy_crew_floor_1_spawn_func()
|
||
{
|
||
self endon( "death" );
|
||
|
||
self thread maps\nx_lunar_util::lunar_enemy_interior_common( false );
|
||
|
||
// Don't let enemies go upstairs
|
||
self thread check_jumper();
|
||
|
||
// Lower enemy accuracy until player leaves hydroponics
|
||
old_accuracy = self.baseaccuracy;
|
||
self.baseaccuracy = 0.05;
|
||
|
||
// Give grenades
|
||
self.grenadeammo = 3;
|
||
self.force_grenade_drop = true;
|
||
|
||
flag_wait( "player_left_hydroponics" );
|
||
|
||
self.baseaccuracy = old_accuracy;
|
||
|
||
flag_wait( "crew_hub_ambush" );
|
||
|
||
self thread set_deadly_tracking_ai();
|
||
}
|
||
|
||
enemy_crew_floor_2_spawn_func()
|
||
{
|
||
self endon( "death" );
|
||
|
||
self thread maps\nx_lunar_util::lunar_enemy_interior_common( false );
|
||
|
||
// Don't let enemies go downstairs
|
||
self thread check_jumper();
|
||
|
||
// Lower enemy accuracy until player leaves hydroponics
|
||
old_accuracy = self.baseaccuracy;
|
||
self.baseaccuracy = 0.05;
|
||
|
||
// Give grenades
|
||
self.grenadeammo = 3;
|
||
self.force_grenade_drop = true;
|
||
|
||
flag_wait( "player_left_hydroponics" );
|
||
|
||
self.baseaccuracy = old_accuracy;
|
||
|
||
flag_wait( "crew_hub_ambush" );
|
||
|
||
self thread set_deadly_tracking_ai();
|
||
}
|
||
|
||
// tagTC<TEMP> - remove once daryl checks in the utility
|
||
set_deadly_tracking_ai()
|
||
{
|
||
// Get Ai Super Aggressive and Deadly
|
||
enemy = self;
|
||
enemy clear_force_color();
|
||
enemy.maxsightdistsqrd = 8192 * 8192;
|
||
enemy.favoriteenemy = level._player;
|
||
enemy.baseaccuracy = 1.0;
|
||
enemy.pathrandompercent = 200;
|
||
enemy SetGoalEntity( level._player );
|
||
enemy.goalradius = 400;
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
crew_module_player_thread()
|
||
{
|
||
CreateThreatBiasGroup( "player" );
|
||
self thread maps\nx_lunar_util::player_danger_zone();
|
||
self thread maps\nx_lunar_util::end_danger_zone();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
//*******************************************************************
|
||
|
||
crew_module_airlock_death_vignette()
|
||
{
|
||
// Wait till both allies enter
|
||
flag_wait( "player_entered_exterior_airlock" );
|
||
worker_spawner = self;
|
||
|
||
// Spawn worker
|
||
worker = worker_spawner spawn_ai();
|
||
worker.animname = "worker";
|
||
|
||
worker thread crew_module_airlock_death_vignette_bullets();
|
||
worker thread crew_module_airlock_death_vignette_fx();
|
||
|
||
// Get vignette origin and play anim
|
||
airlock_death_start_node = GetStruct( "airlock_death_start_node", "targetname" );
|
||
airlock_death_start_node anim_single_solo( worker, "airlock_door_death" );
|
||
|
||
if( !IsAlive( worker ) )
|
||
{
|
||
return;
|
||
}
|
||
|
||
worker.allowDeath = true;
|
||
worker.a.nodeath = true;
|
||
worker animmode( "nophysics" );
|
||
wait 0.05;
|
||
|
||
if ( isalive( worker ) )
|
||
{
|
||
worker kill();
|
||
}
|
||
|
||
}
|
||
|
||
crew_module_airlock_death_vignette_fx()
|
||
{
|
||
// Footsteps.
|
||
wait 5.5;
|
||
tagPos = self getTagOrigin( "J_Ball_RI" );
|
||
playFX( level._effect[ "footdust_small" ], tagPos + ( 4, 10, 0 ), ( 0, 0, 1 ) );
|
||
|
||
wait 0.9;
|
||
tagPos = self getTagOrigin( "J_Ball_LE" );
|
||
playFX( level._effect[ "footdust_small" ], tagPos + ( 4, 10, 0 ), ( 0, 0, 1 ) );
|
||
|
||
wait 0.9;
|
||
tagPos = self getTagOrigin( "J_Ball_RI" );
|
||
playFX( level._effect[ "footdust_small" ], tagPos + ( 4, 10, 0 ), ( 0, 0, 1 ) );
|
||
|
||
// Hit.
|
||
wait 0.9;
|
||
tagPos = self getTagOrigin( "tag_eye" );
|
||
playFX( level._effect[ "nx_lunar_falcon_death_blood_hit" ], tagPos, ( -1, 0, 0) );
|
||
playFXOnTag( level._effect[ "nx_lunar_crew_airlock_blood_squirt"], self, "tag_eye" );
|
||
|
||
// Collapse dust.
|
||
wait 2.1;
|
||
tagPos = self getTagOrigin( "J_SpineUpper" );
|
||
playFX( level._effect[ "nx_lunar_crew_airlock_impact_large" ], tagPos + ( 0, 14, -10) );
|
||
|
||
stopFXOnTag( level._effect[ "nx_lunar_crew_airlock_blood_squirt"], self, "tag_eye" );
|
||
}
|
||
|
||
crew_module_airlock_death_vignette_bullets()
|
||
{
|
||
worker = self;
|
||
airlock_shot_source_one = GetEnt( "airlock_to_exterior_death_shot_one", "script_noteworthy" );
|
||
airlock_shot_source_two = GetEnt( "airlock_to_exterior_death_shot_two", "script_noteworthy" );
|
||
airlock_shot_source_one_target_1 = GetEnt( "airlock_to_exterior_death_shot_one_target_1", "script_noteworthy" );
|
||
airlock_shot_source_one_target_2 = GetEnt( "airlock_to_exterior_death_shot_one_target_2", "script_noteworthy" );
|
||
airlock_shot_source_one_target_3 = GetEnt( "airlock_to_exterior_death_shot_one_target_3", "script_noteworthy" );
|
||
|
||
worker thread maps\nx_lunar_util::lunar_headshot_monitor();
|
||
|
||
wait( 0.5 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_1.origin );
|
||
wait( 0.25 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_1.origin );
|
||
wait( 0.25 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_1.origin );
|
||
wait( 1.0 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_2.origin );
|
||
wait( 0.5 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_3.origin );
|
||
wait( 1.0 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_1.origin );
|
||
wait( 0.25 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_1.origin );
|
||
wait( 0.25 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_3.origin );
|
||
wait( 0.25 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_1.origin );
|
||
wait( 0.25 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_2.origin );
|
||
wait( 0.5 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_3.origin );
|
||
wait( 1.0 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_1.origin );
|
||
wait( 0.25 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_1.origin );
|
||
wait( 0.25 );
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_one.origin, airlock_shot_source_one_target_2.origin );
|
||
|
||
wait( 2.25 );
|
||
|
||
// Dialog: Shit...
|
||
level.eagle thread radio_dialogue( "moon_eag_ext_03" );
|
||
|
||
wait( 2.0 );
|
||
|
||
// 11.25 seconds to this point
|
||
MagicBullet( "lunarrifle_silent", airlock_shot_source_two.origin, worker GetTagOrigin ("TAG_EYE") );
|
||
}
|
||
|
||
airlock_depressurize_vapor_effects()
|
||
{
|
||
// Deressurization vapor FX
|
||
exploder( "fx_airlock_exterior_depressurize" );
|
||
|
||
wait 6;
|
||
|
||
// Stop depressurization vapor FX
|
||
stop_exploder( "fx_airlock_exterior_depressurize" );
|
||
}
|
||
|
||
crew_module_VO()
|
||
{
|
||
battlechatter_off( "allies" );
|
||
|
||
// Crew commons ahead<61> still has pressure. Riggs, cycle the airlock.
|
||
radio_dialogue( "moon_eag_int_24" );
|
||
|
||
//wait( 2.0 );
|
||
|
||
// This is Vandenberg - any Combat Group remaining?
|
||
//radio_dialogue( "moon_hawk_int_01" );
|
||
|
||
// Good to hear your voice, sir. It's just me, Walker and Riggs<67> what's the plan?
|
||
//radio_dialogue( "moon_eag_int_29" );
|
||
|
||
// We need to retake C&C. Rally point at the rover bay!
|
||
//radio_dialogue( "moon_hawk_int_02" );
|
||
|
||
// We're on our way.
|
||
//radio_dialogue( "moon_eag_int_30" );
|
||
|
||
// Copy that, make it quick.
|
||
//radio_dialogue( "moon_hawk_int_07" );
|
||
|
||
flag_wait( "crew_airlock_open" );
|
||
wait( 1.0 );
|
||
|
||
battlechatter_on( "allies" );
|
||
|
||
// Heading through hydroponics<63>
|
||
radio_dialogue( "moon_eag_int_25" );
|
||
|
||
// Check if enemies are down in hydro
|
||
level thread hydro_VO_thread();
|
||
|
||
flag_wait( "vo_crew_death_trap" );
|
||
|
||
// Walker get to cover!
|
||
radio_dialogue( "moon_eag_hub_02" );
|
||
|
||
// Tangos below, let<65>s work our way around
|
||
radio_dialogue( "moon_eag_hub_03" );
|
||
|
||
// Check if player is still in death trap
|
||
level thread push_forward_VO_thread();
|
||
level thread get_down_here_VO_thread();
|
||
|
||
// Moving downstairs.
|
||
//radio_dialogue( "moon_eag_hub_04" );
|
||
|
||
// He's down!
|
||
waittill_aigroupcount( "enemy_crew_floor_1", 4 );
|
||
radio_dialogue( "moon_eag_kill_yell_01" );
|
||
|
||
flag_wait( "move_allies_to_exterior_airlock" );
|
||
|
||
// That's a kill!
|
||
waittill_aigroupcount( "enemy_crew_floor_1", 3 );
|
||
radio_dialogue( "moon_eag_kill_yell_02" );
|
||
|
||
// They're down!
|
||
waittill_aigroupcleared( "enemy_crew_floor_1" );
|
||
radio_dialogue( "moon_eag_kill_yell_03" );
|
||
|
||
// Push forward to the airlock.
|
||
radio_dialogue( "moon_eag_hub_06" );
|
||
|
||
flag_wait( "ally_door_open_start" );
|
||
|
||
// Ok, we're headin outside.
|
||
radio_dialogue( "moon_eag_int_27" );
|
||
|
||
// Riggs, cycle it!
|
||
radio_dialogue( "moon_eag_int_28" );
|
||
}
|
||
|
||
get_down_here_VO_thread()
|
||
{
|
||
flag_wait( "vo_crew_moving_downstairs" );
|
||
|
||
// Moving downstairs.
|
||
radio_dialogue( "moon_eag_hub_04" );
|
||
wait( 8.0 );
|
||
|
||
flag_wait( "allies_downstairs_crew" );
|
||
|
||
if( flag( "player_still_upstairs_crew" ) )
|
||
{
|
||
// Walker, get down here.
|
||
radio_dialogue( "moon_eag_hub_05" );
|
||
}
|
||
}
|
||
|
||
hydro_VO_thread()
|
||
{
|
||
waittill_aigroupcleared( "enemy_hydro" );
|
||
|
||
// OK - move forward<72>
|
||
radio_dialogue( "moon_eag_move_08" );
|
||
}
|
||
|
||
push_forward_VO_thread()
|
||
{
|
||
flag_wait( "vo_crew_push_forward" );
|
||
|
||
if( flag( "player_still_in_crew_hall" ) )
|
||
{
|
||
// Walker! Keep moving!
|
||
radio_dialogue( "moon_eag_move_01" );
|
||
}
|
||
}
|
||
|
||
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
*/
|