nx1-gsc-dump/maps/nx_lunar_util.gsc

2927 lines
78 KiB
Plaintext

//****************************************************************************
// **
// Confidential - (C) Activision Publishing, Inc. 2010 **
// **
//****************************************************************************
// **
// Module: NX_LUNAR Mission Utils **
// **
// Created: 10/14/2010 - Travis Chen **
// **
//****************************************************************************
#include maps\_utility;
#include maps\_utility_code;
#include maps\_hud_util;
#include common_scripts\utility;
#include maps\_nx_utility;
//*******************************************************************
// *
// *
//*******************************************************************
lunar_enemy_interior_common( zero_goalradius )
{
if( !IsDefined( zero_goalradius ) )
{
zero_goalradius = true;
}
self endon( "death" );
self enable_cqbwalk();
self thread lunar_headshot_monitor();
self thread lunar_accuracy_limiter();
// Ally team mates ingore enemy for a period of time
self thread enemy_ignore( 3.0 );
// Don't throw grenades in the interior
self.grenadeammo = 0;
self.script_forcegoal = 1;
// Zero the goal radius
if( zero_goalradius )
{
self.goalradius = 0;
}
self.ignoresuppression = true;
}
lunar_enemy_exterior_common()
{
self endon( "death" );
self enable_cqbwalk();
self thread lunar_headshot_monitor();
// self thread lunar_accuracy_limiter();
// Ally team mates ingore enemy for a period of time
self thread enemy_ignore( 1.0 );
self.script_forcegoal = 1;
}
lunar_enemy_exterior_exit()
{
self endon( "death" );
self thread lunar_headshot_monitor();
self enable_cqbwalk();
self.script_startrunning = 1;
self thread lunar_do_not_shoot_detect_and_switch( 300 );
// Ally team mates ingore enemy for a period of time
self thread enemy_ignore( 10.0 );
self.script_forcegoal = 1;
self.force_grenade_drop = true;
}
lunar_enemy_exterior_valley()
{
self endon( "death" );
self thread lunar_headshot_monitor();
self enable_cqbwalk();
// Setup runners
if ( !players_within_distance( 2500, self.origin ) )
{
self thread lunar_accuracy_limiter_over_time( 50 );
self.script_startrunning = 1;
self thread lunar_do_not_shoot_detect_and_switch( 500 );
}
// Ally team mates ingore enemy for a period of time
self thread enemy_ignore( 10.0 );
self.script_forcegoal = 1;
self.force_grenade_drop = true;
}
lunar_enemy_exterior_behind()
{
self endon( "death" );
self enable_cqbwalk();
self thread lunar_headshot_monitor();
self thread lunar_accuracy_limiter_no_hit();
// Ally team mates ingore enemy for a period of time
self thread enemy_ignore( 5.0 );
self.script_forcegoal = 1;
self.script_startrunning = 1;
}
lunar_enemy_plateau()
{
self endon( "death" );
self enable_cqbwalk();
self thread lunar_headshot_monitor();
// self thread lunar_accuracy_limiter();
// Ally team mates ingore enemy for a period of time
self thread enemy_ignore( 3.0 );
self.goalradius = 10;
self.script_forcegoal = 1;
self.force_grenade_drop = true;
// self.ignoresuppression = true;
}
lunar_enemy_rover_backup()
{
self endon( "death" );
self enable_cqbwalk();
self thread lunar_headshot_monitor();
// self thread lunar_accuracy_limiter();
// Ally team mates ingore enemy for a period of time
self thread enemy_ignore( 3.0 );
// Don't throw grenades
self.grenadeammo = 0;
self.goalradius = 0;
self.script_forcegoal = 1;
// self.ignoresuppression = true;
}
lunar_enemy_exterior_stealth()
{
self endon( "death" );
self enable_cqbwalk();
self thread lunar_headshot_monitor();
// tagDK<note> - temp for stealth
self SetThreatBiasGroup( "enemy_in_shadows" );
// self.maxsightdistsqrd = 880 * 880;
self.ignoresuppression = true;
}
lunar_enemy_exterior_shadows_rover_riders()
{
self endon( "death" );
self.script_forcegoal = 1;
self thread lunar_cqb_detect_and_switch( 500 );
self thread lunar_headshot_monitor();
self thread lunar_vision_limiter_over_time( 80 );
}
lunar_enemy_exterior_long_range()
{
self endon( "death" );
self enable_cqbwalk();
self thread lunar_headshot_monitor();
self.maxsightdistsqrd = 8000 * 8000;
self.script_forcegoal = 1;
self.ignoresuppression = true;
}
enemy_ignore( ignore_time )
{
self endon( "death" );
self.ignoreme = 1;
wait( ignore_time );
self.ignoreme = 0;
}
// Lowers accuracy, waits for enemy to arrive at the initial goal node, then bumps to normal
lunar_accuracy_limiter()
{
self endon( "death" );
self.baseaccuracy = 0.8;
self waittill( "goal" );
self.baseaccuracy = 1.0;
}
lunar_accuracy_limiter_no_hit()
{
self endon( "death" );
self.baseaccuracy = 0.0;
self waittill( "goal" );
self.baseaccuracy = 1.0;
}
lunar_accuracy_limiter_over_time( time ) //seconds
{
self endon( "death" );
self.baseaccuracy = 0.0;
accuracy_increase = 1/time;
release_distance = 200;
for( i = 0; i < time; i++ )
{
if( players_within_distance( release_distance, self.origin ) )
{
break;
}
{
self.baseaccuracy = self.baseaccuracy + accuracy_increase;
wait( 1.0 );
}
}
self.baseaccuracy = 1.0;
}
lunar_cqb_detect_and_switch( distance )
{
self endon( "death" );
// distance from goal to switch from run to cqb
if( !IsDefined( distance ) )
{
distance = 100;
}
self.goalradius = distance;
self waittill( "goal" );
self.goalradius = 10;
self enable_cqbwalk();
}
lunar_do_not_shoot_detect_and_switch( distance )
{
self endon( "death" );
self enable_dontevershoot();
// Allow ai to shoot
if( !IsDefined( distance ) )
{
distance = 500;
}
self.goalradius = distance;
self waittill( "goal" );
self.goalradius = 10;
self disable_dontevershoot();
}
lunar_vision_limiter_over_time( time ) //seconds
{
self endon( "death" );
self.maxsightdistsqrd = 1 * 1;
vision_increase = 8192/time;
for( i = 0; i < time; i++ )
{
self.maxsightdistsqrd = self.maxsightdistsqrd + ( vision_increase * vision_increase );
wait( 1.0 );
}
}
lunar_headshot_monitor()
{
for( ; ; )
{
self waittill( "damage", damage, attacker, direction_vec, point, type, modelName, tagName, partName, idFlags );
if ( ( isdefined( attacker ) ) && ( isplayer( attacker ) ) )
{
if ( ( isdefined( partName ) ) && ( partName == "j_head" || partName == "j_neck" ) )
{
self kill();
}
}
if( !isalive( self ) )
{
return;
}
}
}
//*******************************************************************
// *
// *
//*******************************************************************
lunar_ally_spawn()
{
// Spawn Eagle
eagle_spawner = GetEnt( "eagle", "targetname" );
eagle_spawner thread add_spawn_function( maps\nx_lunar_util::lunar_ally_interior_common );
level.eagle = eagle_spawner spawn_ai();
level.eagle.animname = "eagle";
level.eagle.countryID = "jswc";
level.eagle set_battlechatter_id( "eag" );
// Spawn Falcon
falcon_spawner = GetEnt( "falcon", "targetname" );
falcon_spawner thread add_spawn_function( maps\nx_lunar_util::lunar_ally_interior_common );
level.falcon = falcon_spawner spawn_ai();
level.falcon.animname = "falcon";
level.falcon.countryID = "jswc";
level.falcon set_battlechatter_id( "fal" );
}
lunar_ally_interior_common()
{
self endon( "death" );
self enable_cqbwalk();
self thread magic_bullet_shield();
self.grenadeammo = 0;
// Allies push player
self pushplayer( true );
// To setup thread bias
self SetThreatBiasGroup( "player_squad" );
self thread hidden_dynamic_run_speed();
}
lunar_ally_exterior_fodder()
{
self endon( "death" );
self enable_cqbwalk();
self.baseaccuracy = 0.0;
self.health = 1;
self.grenadeammo = 0;
self.ignoreSuppression = true;
self.grenadeawareness = 0;
}
lunar_ally_exterior_fleeing_fodder()
{
self endon( "death" );
self enable_cqbwalk();
self.script_startrunning = 1;
self.grenadeammo = 0;
self.baseaccuracy = 0.0;
self.health = 1;
self.ignoreSuppression = true;
self.grenadeawareness = 0;
}
ignore_allies( ignore )
{
level.eagle.ignoreme = ignore;
level.falcon.ignoreme = ignore;
}
ally_ignore_all( distance )
{
self endon( "death" );
self.ignoreall = 1;
// self.goalradius = distance;
self waittill( "goal" );
self.ignoreall = 0;
}
//*******************************************************************
// *
// *
//*******************************************************************
lunar_start( player_struct, eagle_struct, falcon_struct, hawk_struct, pigeon_struct, seagull_struct )
{
// Spawn AI allies
level thread lunar_ally_spawn();
waittillframeend;
// Move player to start
start = getstruct( player_struct, "targetname" );
level._player setOrigin( start.origin );
level._player setPlayerAngles( start.angles );
// Teleport allies
if( IsDefined( level.eagle ) )
{
level.eagle lunar_start_ally( eagle_struct );
}
if( IsDefined( level.falcon ) )
{
level.falcon lunar_start_ally( falcon_struct );
}
if( IsDefined( level.hawk ) )
{
level.hawk lunar_start_ally( hawk_struct );
}
if( IsDefined( level.pigeon ) )
{
level.pigeon lunar_start_ally( pigeon_struct );
}
if( IsDefined( level.seagull ) )
{
level.seagull lunar_start_ally( seagull_struct );
}
}
lunar_start_ally( start_struct_name )
{
if( IsDefined( start_struct_name ) )
{
start_struct = getstruct( start_struct_name, "targetname" );
self ForceTeleport( start_struct.origin, start_struct.angles );
if( IsDefined( start_struct.target ) )
{
node = GetNode( start_struct.target, "targetname" );
if( IsDefined( node ) )
{
self SetGoalNode( node );
}
}
}
}
//*******************************************************************
// *
// *
//*******************************************************************
all_triggers_off( trigger_name )
{
triggers = GetEntArray( trigger_name, "script_noteworthy" );
foreach( trigger in triggers )
{
trigger trigger_off();
}
}
all_triggers_on( trigger_name )
{
triggers = GetEntArray( trigger_name, "script_noteworthy" );
foreach( trigger in triggers )
{
trigger trigger_on();
}
}
all_mantles_off( mantle_name )
{
mantles = GetEntArray( mantle_name, "targetname" );
foreach( mantle in mantles )
{
mantle MakeUnusable();
}
}
all_mantles_on( mantle_name )
{
mantles = GetEntArray( mantle_name, "targetname" );
foreach( mantle in mantles )
{
mantle MakeUsable();
}
}
hide_scriptmodels_by_targetname( targetname )
{
script_brushes = GetEntArray( targetname, "targetname" );
foreach( brush in script_brushes )
{
brush Hide();
brush NotSolid();
if( brush.classname == "script_brushmodel" )
{
brush ConnectPaths();
}
}
}
show_scriptmodels_by_targetname( targetname )
{
script_brushes = GetEntArray( targetname, "targetname" );
foreach( brush in script_brushes )
{
brush Show();
brush Solid();
if( brush.classname == "script_brushmodel" )
{
brush DisconnectPaths();
}
}
}
//*******************************************************************
// *
// *
//*******************************************************************
trigger_choice_spawn( trigger_name )
{
// Get the triggers we are considering
triggers = GetEntArray( trigger_name, "targetname" );
foreach( trigger in triggers )
{
// Check for spawn
trigger thread trigger_choice_spawn_think( trigger_name );
}
}
// this - trigger multiple
trigger_choice_spawn_think( trigger_name )
{
// End if one of the triggers has been flipped
level endon( trigger_name );
// Wait for trigger
self waittill( "trigger" );
// Stop all other triggers
triggers = GetEntArray( trigger_name, "targetname" );
array_thread( triggers, ::trigger_off );
// Do the spawn
if( IsDefined( self.target ) )
{
spawners = GetEntArray( self.target, "targetname" );
foreach( spawner in spawners )
{
// Add spawn func based on mission ai group
if( IsDefined( spawner.script_aigroup ) )
{
spawner spawn_ai_type_check();
}
else
{
spawner thread add_spawn_function( ::lunar_enemy_interior_common );
}
spawner script_delay();
// Spawn the enemy
spawned_enemy = spawner spawn_ai();
// Check any retreat triggers on enemy
if( IsDefined( spawned_enemy ) )
{
spawned_enemy thread check_retreat_triggers();
}
}
}
// Notify all others waiting
level notify( trigger_name );
}
//*******************************************************************
// *
// *
//*******************************************************************
spawn_ai_type_check()
{
spawner = self;
switch( spawner.script_aigroup )
{
case "enemy_storage":
spawner thread add_spawn_function( maps\nx_lunar_escape_interior::enemy_storage_spawn_func );
break;
case "enemy_storage_breachers":
spawner thread add_spawn_function( maps\nx_lunar_escape_interior::enemy_storage_spawn_func );
break;
case "enemy_life_support":
spawner thread add_spawn_function( maps\nx_lunar_escape_interior::enemy_life_support_spawn_func );
break;
case "enemy_medical":
spawner thread add_spawn_function( maps\nx_lunar_escape_interior::enemy_medical_spawn_func );
break;
case "enemy_living_floor_1":
spawner thread add_spawn_function( maps\nx_lunar_escape_interior::enemy_living_floor_1_spawn_func );
break;
case "enemy_living_floor_1_hidden":
spawner thread add_spawn_function( maps\nx_lunar_escape_interior::enemy_living_floor_1_hidden_spawn_func );
break;
case "enemy_living_floor_1_mover":
spawner thread add_spawn_function( maps\nx_lunar_escape_interior::enemy_living_floor_1_mover_spawn_func );
break;
case "enemy_living_floor_2":
spawner thread add_spawn_function( maps\nx_lunar_escape_interior::enemy_living_floor_2_spawn_func );
break;
// case "enemy_hydro":
// case "enemy_hydro_jumper":
// spawner thread add_spawn_function( maps\nx_lunar_escape_interior::enemy_hydro_spawn_func );
// break;
// case "enemy_crew_floor_1":
// spawner thread add_spawn_function( maps\nx_lunar_escape_interior::enemy_crew_floor_1_spawn_func );
// break;
// case "enemy_crew_floor_2":
// spawner thread add_spawn_function( maps\nx_lunar_escape_interior::enemy_crew_floor_2_spawn_func );
// break;
case "enemy_airlock_exit":
spawner thread add_spawn_function( ::lunar_enemy_exterior_exit );
break;
case "enemy_valley":
spawner thread add_spawn_function( ::lunar_enemy_exterior_valley );
break;
case "enemy_valley_behind":
spawner thread add_spawn_function( ::lunar_enemy_exterior_behind );
break;
case "enemy_plateau":
spawner thread add_spawn_function( ::lunar_enemy_plateau );
break;
case "enemy_rover_backup":
spawner thread add_spawn_function( ::lunar_enemy_rover_backup );
break;
case "enemy_outside_vehicle_bay":
spawner thread add_spawn_function( ::lunar_enemy_exterior_stealth );
break;
case "enemy_inside_vehicle_bay":
spawner thread add_spawn_function( ::lunar_enemy_exterior_stealth );
break;
case "enemy_control_floor_1_side":
spawner thread add_spawn_function( maps\nx_lunar_take_back_control::enemy_control_floor_1_side_spawn_func );
break;
case "enemy_control_floor_1_main":
spawner thread add_spawn_function( maps\nx_lunar_take_back_control::enemy_control_floor_1_main_spawn_func );
break;
case "enemy_control_floor_1_main_scripted":
spawner thread add_spawn_function( maps\nx_lunar_take_back_control::enemy_control_floor_1_main_scripted_spawn_func );
break;
case "enemy_control_floor_1_resupply":
spawner thread add_spawn_function( maps\nx_lunar_take_back_control::enemy_control_floor_1_resupply_spawn_func );
break;
case "enemy_control_floor_2":
spawner thread add_spawn_function( maps\nx_lunar_take_back_control::enemy_control_floor_2_spawn_func );
break;
default:
spawner thread add_spawn_function( ::lunar_enemy_interior_common );
break;
}
}
//*******************************************************************
// *
// *
//*******************************************************************
// this - enemy ai
check_retreat_triggers()
{
if( !IsDefined( self.script_battleplan ) )
{
return;
}
retreat_trigger_name = self.script_battleplan;
self endon( "death" );
// Get the associated retreat triggers
triggers = GetEntArray( retreat_trigger_name, "targetname" );
foreach( trigger in triggers )
{
self thread retreat_trigger( trigger, retreat_trigger_name );
}
}
// this - enemy ai
retreat_trigger( trigger, retreat_trigger_name )
{
self endon( "death" );
// Wait for retreat trigger
//IPrintln( retreat_trigger_name + " waiting for retreat trigger" );
trigger waittill( "trigger" );
//IPrintln( retreat_trigger_name + " trigger" );
// Notify that enemy has new retreat
self notify( "new_retreat" );
self endon( "new_retreat" );
// Wait for look at if defined
if( IsDefined( trigger.script_dot ) )
{
self wait_for_look_at_enemy( retreat_trigger_name, trigger.script_dot );
}
// Retreat enemy
if( IsAlive( self ) )
{
self.goalradius = 0;
retreat_node = GetNode( trigger.target, "targetname" );
if( IsDefined( retreat_node ) )
{
self SetGoalNode( retreat_node );
}
else
{
//IPrintln( "WARNING: Retreat " + retreat_trigger_name + " missing Goal Node" );
}
//IPrintln( retreat_trigger_name + " retreat trigger" );
}
}
// this - enemy ai
wait_for_look_at_enemy( retreat_trigger_name, dot )
{
self endon( "death" );
self endon( "new_retreat" );
// Wait for player to see enemy
while( 1 )
{
look_at_enemy = within_fov( level._player.origin, level._player getplayerangles(), self.origin, Cos( dot ) );
if( look_at_enemy )
{
//IPrintln( retreat_trigger_name + " look at Cos( " + dot + " ) ");
break;
}
wait( 0.05 );
}
}
//*******************************************************************
// *
// *
//*******************************************************************
LUNAR_DOOR_DISTANCE = 46;
LUNAR_DOOR_OPEN_TIME = 1.0;
LUNAR_DOOR_CLOSE_TIME = 1.0;
open_lunar_door_vignette( door_name, animate, door_wait, hawk, start_flag )
{
if( !IsDefined( animate ) )
{
animate = true;
}
if( !IsDefined( hawk ) )
{
hawk = false;
}
if( IsDefined ( door_name ))
{
thread lunar_door_keypad_cycle ( door_name ) ;
}
lunar_door_parts = GetEntArray( door_name, "script_noteworthy" );
ally_trigger = undefined;
player_trigger = undefined;
vignette_origin = undefined;
foreach ( door_part in lunar_door_parts )
{
if( door_part.code_classname == "trigger_multiple" )
{
if( door_part.targetname == "ally_trigger" )
{
ally_trigger = door_part;
}
if( door_part.targetname == "player_trigger" )
{
player_trigger = door_part;
}
}
if( door_part.code_classname == "script_origin" )
{
if( door_part.targetname == "vignette_ally_door_breach" )
{
vignette_origin = door_part;
}
}
}
// Reach the vignette
if( IsDefined( vignette_origin ) && animate )
{
vignette_origin maps\nx_lunar_anim::ally_door_breach_reach( hawk );
}
// Wait for start flag if defined
if( IsDefined( start_flag ) )
{
flag_wait( start_flag );
}
// Wait for player at door
player_trigger waittill( "trigger" );
flag_set( "ally_door_open_start" );
// Wait at door for dialog
if( IsDefined( door_wait ) )
{
wait( door_wait );
}
if( IsDefined( level.hawk ) )
{
level.hawk notify( "stop_ally_door_breach_idle" );
}
if( IsDefined( level.eagle ) )
{
level.eagle notify( "stop_ally_door_breach_idle" );
}
// if( IsDefined( level.falcon ) )
// {
// level.falcon notify( "stop_ally_door_breach_idle" );
// }
// Play the vignette
if( IsDefined( vignette_origin ) && animate )
{
vignette_origin thread maps\nx_lunar_anim::ally_door_breach_play( hawk );
// Wait for the switch
wait( 1.4 );
}
flag_clear( "ally_door_open_start" );
level notify( "start_airlock_sequence" );
}
open_lunar_door( door_name, time, explosion )
{
lunar_door_movement( door_name, time, 1, explosion );
}
close_lunar_door( door_name, time )
{
lunar_door_movement( door_name, time, -1 );
}
lunar_door_movement( door_name, time, direction, explosion )
{
if( !IsDefined( time ) )
{
time = LUNAR_DOOR_OPEN_TIME;
}
// Get parts array
lunar_door_parts = GetEntArray( door_name, "script_noteworthy" );
// Get the door facing
door_rotate = 0;
foreach ( door_part in lunar_door_parts )
{
if( door_part.code_classname == "script_origin" )
{
if( door_part.targetname == "angles_check" )
{
door_rotate = Int( door_part.angles[1] );
break;
}
}
}
// Can't find valid door rotation node
if( !IsDefined( door_rotate ) )
{
return;
}
open_door_distance = LUNAR_DOOR_DISTANCE;
explosion_door_distance = LUNAR_DOOR_DISTANCE;
if( IsDefined( explosion ) && explosion )
{
open_door_distance = 30;
explosion_door_distance = 18;
}
else
{
explosion = false;
}
// Get if door is rotated and flipped ( might want to come back to this.. )
rotated = false;
flipped = false;
switch( door_rotate )
{
case 0:
break;
case 90:
rotated = true;
flipped = true;
break;
case 180:
flipped = true;
break;
case 270:
rotated = true;
break;
default:
AssertMsg( "Door rotate not valid: " + door_rotate );
break;
}
// Save off movement direction, used for MoveTo calculation
// Direction still indicates if we are opening or closing
movement_direction = direction;
if( flipped )
{
movement_direction = ( movement_direction * -1 );
}
// Sound script
level thread lunar_door_movement_sfx( door_name, lunar_door_parts, direction );
// Open the visual doors
door_model_left = undefined;
door_model_right = undefined;
foreach ( door_part in lunar_door_parts )
{
if( door_part.code_classname == "script_brushmodel" || door_part.code_classname == "script_model" )
{
door_distance = open_door_distance;
if( explosion && door_part.code_classname == "script_model" )
{
door_distance = explosion_door_distance;
}
if( door_part.targetname == "left" )
{
if( !rotated )
door_part moveX( movement_direction * door_distance, time );
else
door_part moveY( -1 *movement_direction * door_distance, time );
}
else if ( door_part.targetname == "right" )
{
if( !rotated )
door_part moveX( ( -1 * movement_direction * door_distance ), time );
else
door_part moveY( ( movement_direction * door_distance ), time );
}
}
// Find the models
if( door_part.code_classname == "script_model" )
{
if( door_part.targetname == "left" )
{
door_model_left = door_part;
}
else
{
door_model_right = door_part;
}
}
}
// Update door model if damaged
if( explosion )
{
if( IsDefined( door_model_left ) )
{
door_model_left SetModel( door_model_left.model + "_breached" );
}
if( IsDefined( door_model_right ) )
{
door_model_right SetModel( door_model_right.model + "_breached" );
}
}
wait( time );
// Connect the paths
foreach ( door_part in lunar_door_parts )
{
if( door_part.code_classname == "script_brushmodel" )
{
if( door_part.targetname == "right" || door_part.targetname == "left")
{
if( direction == 1 )
{
door_part ConnectPaths();
}
else
{
door_part DisconnectPaths();
}
}
}
}
}
// tagTC<note> - audio owned script
lunar_door_movement_sfx( door_name, lunar_door_parts, direction )
{
// Play lunar door opening sound
foreach ( door_part in lunar_door_parts )
{
if( door_part.code_classname == "script_brushmodel" || "script_model" == door_part.code_classname )
{
if( door_name == "armory_door" )
{
if( door_part.targetname == "right" )
{
if( door_name == "armory_door" )
{
door_part playsound ( "lunar_door_press_close_armory" );
break;
}
}
}
else
{
if( door_part.targetname == "right" )
{
if( direction == 1 )
{
if( GetDvar("environment_pressurized") == "1" )
{
door_part playsound ( "lunar_door_depress_open" );
}
else
{
door_part playsound ( "lunar_door_press_open" );
}
}
else if( direction == -1 )
{
if( GetDvar("environment_pressurized") == "1" )
{
if ( flag ( "vehicle_airlock_open"))
{
door_part playsound ( "lunar_door_depress_close" );
}
}
else
{
door_part playsound ( "lunar_door_press_close" );
}
}
break;
}
}
}
}
}
lunar_door_keypad_cycle ( door_name )
{
keypad = GetEnt ( door_name + "_keypad", "script_noteworthy");
if ( IsDefined ( keypad ) )
{
// Triggered by animation notetrack
level waittill ("keypad_cycle");
keypad SetModel ( "nx_lunar_hatch_keypad_anim" );
wait 1;
keypad SetModel ( "nx_lunar_hatch_keypad_green");
wait 1;
keypad SetModel ( "nx_lunar_hatch_keypad" );
}
/*
// initialising variables
keypad_green = undefined;
keypad_scan = undefined;
keypad_ready = undefined;
keypad_states = GetEntArray( keypad_name, "script_noteworthy" );
foreach ( keypad in keypad_states )
{
if( keypad.targetname == "keypad_green" )
{
keypad_green = keypad;
}
if( keypad.targetname == "keypad_scan" )
{
keypad_scan = keypad;
}
if( keypad.targetname == "keypad_ready" )
{
keypad_ready = keypad;
}
}
// Animate the keypad scan sequence
keypad_scan show();
keypad_ready hide();
wait 1;
keypad_green show();
keypad_scan hide();
*/
}
lunar_door_keypad_error( door_name )
{
keypads = GetEntArray ( door_name + "_keypad", "targetname");
foreach ( keypad in keypads)
{
keypad SetModel ("nx_lunar_hatch_keypad_error");
}
}
lunar_door_breach_fx( door_name )
{
// Get parts array
lunar_door_parts = GetEntArray( door_name, "script_noteworthy" );
breach_explosion_fx = undefined;
foreach ( door_part in lunar_door_parts )
{
if( door_part.code_classname == "script_origin" )
{
if( door_part.targetname == "breach_explosion_fx" )
{
breach_explosion_fx = door_part;
break;
}
}
}
if( IsDefined( breach_explosion_fx ) )
{
// Explosion FX
PlayFX( level._effect[ "breach_explosion" ], breach_explosion_fx.origin, (breach_explosion_fx.angles + ( 90, 0, 0)) );
// Sound Effect
breach_explosion_fx PlaySound("scn_lunar_breach_detonate");
if ( door_name == "vehicle_hatch_breach" )
{
wait 0.1;
exploder( "fx_allies_breach_flash" );
wait 0.5;
exploder( "fx_allies_breach_debris" );
wait 1.1;
stop_exploder( "fx_allies_breach_debris" );
}
}
}
//*******************************************************************
// *
// *
//*******************************************************************
lunar_door_status( door_name, status )
{
// Just name the script models on each side of the door with the targetname "name_of_door_status" to get this to work.
status_lights = GetEntArray ( door_name + "_status", "targetname");
status_dynamic_lights = GetEntArray ( door_name + "_dynamic_light_status", "targetname");
foreach ( light in status_lights)
{
switch (status)
{
case "status_green":
light SetModel ( "nx_lunar_door_alertsign_green" );
change_status_window_dialogue_color( "green" );
light playsound("airlock_status_light_green");
break;
case "status_yellow":
light SetModel ( "nx_lunar_door_alertsign_orange" );
change_status_window_dialogue_color( "orange" );
//light playsound("airlock_status_light_yellow");
break;
case "status_red":
light SetModel ( "nx_lunar_door_alertsign_red" );
change_status_window_dialogue_color( "red" );
break;
}
}
// handle dynamic light states for the doors
foreach ( dynamic_light in status_dynamic_lights)
{
dynamic_light SetLightIntensity(0);
/*
switch (status)
{
case "status_green":
dynamic_light SetLightColor( (0.2, 1.0, 0.2) );
dynamic_light SetLightIntensity(0.50);
//dynamic_light SetLightRadius(150);
break;
case "status_yellow":
dynamic_light SetLightColor( (1.0, 0.8, 0.2) );
dynamic_light SetLightIntensity(0.70);
//dynamic_light SetLightRadius(200);
break;
case "status_red":
dynamic_light SetLightColor( (0.7294, 0.1921, 0.0196) );
dynamic_light SetLightIntensity(2.0);
//dynamic_light SetLightRadius(200);
break;
}*/
}
// Original method
/*
lunar_door_parts = GetEntArray( door_name, "script_noteworthy" );
foreach ( door_part in lunar_door_parts )
{
// Sign
if( door_part.code_classname == "script_brushmodel" )
{
switch( door_part.targetname )
{
case "status_green":
case "status_yellow":
case "status_red":
door_part door_sign_update( status );
break;
}
}
// Lights
if( door_part.code_classname == "light" )
{
door_part door_light_update( status );
}
}
*/
}
// self - door part
door_sign_update( status )
{
self Hide();
if( self.targetname == status )
{
self Show();
}
}
// self - door part
door_light_update( status )
{
self setLightIntensity( 1.0 );
switch( status )
{
case "status_green":
self setLightIntensity( 0.75 );
self notify( "stop_pulse" );
self setLightColor( (0.0, 1.0, 0.0) );
break;
case "status_yellow":
self setLightIntensity( 0.75 );
self notify( "stop_pulse" );
self thread door_light_pulse();
self setLightColor( (1.0, 1.0, 0.0) );
break;
case "status_red":
self notify( "stop_pulse" );
self thread door_light_pulse();
self setLightColor( (1.0, 0.0, 0.0) );
break;
}
}
door_light_pulse()
{
self endon( "stop_pulse" );
on = self getLightIntensity();
off = .2;
curr = on;
transition_on = 0.3;
transition_off = 0.5;
wait_time = 0.05;
increment_on = ( on - off ) / ( transition_on / .05 );
increment_off = ( on - off ) / ( transition_off / .05 );
for ( ;; )
{
//ramp down
time = 0;
while ( ( time < transition_off ) )
{
curr -= increment_off;
curr = clamp( curr, 0, 100 );
self setLightIntensity( curr );
time += .05;
wait( .05 );
}
//off wait time
wait( wait_time );
//ramp up
time = 0;
while ( time < transition_on )
{
curr += increment_on;
curr = clamp( curr, 0, 100 );
self setLightIntensity( curr );
time += .05;
wait( .05 );
}
//on wait time
wait( wait_time );
}
}
//*******************************************************************
// *
// *
//*******************************************************************
airlock_vignette( door_1, door_2, pressure )
{
sound_pressure = 0;
if( pressure == "moon" )
{
sound_pressure = 1;
// lunar_door_status( door_1, "status_green" );
// lunar_door_status( door_2, "status_red" );
}
else
{
sound_pressure = 0;
// lunar_door_status( door_1, "status_green" );
// lunar_door_status( door_2, "status_green" );
}
// Lower weapon
enablePlayerWeapons( false );
// Wait for airlock cycle
if ( sound_pressure == 0 )
{
//soundent2 = spawn( "sound_emitter", level._player.origin );
//soundent2 linkto( level._player );
//soundent2 playsound ( "nx_lunar_pressurize" );
//DR:set the flag here for the crew hub airlock helmet state
//DR:eventually, this will need to change to have this generic script
//DR:accept a variable of a flag to set in the middle of the
//DR:pressurization sequence
flag_set( "sfx_int_base_milsuit_press2" );
//done setting flag for crew hub airlock
}
else
{
soundent2 = spawn( "sound_emitter", level._player.origin );
soundent2 linkto( level._player );
soundent2 playsound ( "nx_lunar_depressurize" );
//DR:set the flag here for the airlock to the exterior
//DR:eventually, this will need to change to have this generic script
//DR:accept a variable of a flag to set in the middle of the
//DR:pressurization sequence
flag_set( "sfx_ext_surface_milsuit_depress" );
//done setting flag for crew hub airlock
}
// level thread airlock_fx( door_2 );
exploder( "fx_crew_module_pressurize" );
level thread maps\nx_lunar_util::airlock_cycle();
// Wait for cycle complete
wait( 9.5 );
// Open door second door
stop_exploder( "fx_crew_module_pressurize" );
level thread maps\nx_lunar_util::open_lunar_door( door_2 );
enablePlayerWeapons( true );
}
//set pressurization because other bits of the game look at this including the suit shield.
airlock_set_environment( pressure )
{
if( pressure == "moon" )
{
SetSavedDvar( "environment_pressurized", "0" );
}
else
{
SetSavedDvar( "environment_pressurized", "1" );
}
}
airlock_pressure( pressure )
{
// Change pressure to pressurized interior
if( IsDefined( pressure ) )
{
// blend over some time.
level._player set_suit_fade( pressure, 2.1 );
}
}
airlock_fx( door_name )
{
// tagTC<note> - commenting out designer airlock FX because of framerate issues
// lunar_door_parts = GetEntArray( door_name, "script_noteworthy" );
//
// foreach ( door_part in lunar_door_parts )
// {
// if( door_part.code_classname == "script_origin" )
// {
// PlayFx( level._effect[ "airlock_cycle" ], door_part.origin );
// }
// }
}
//*******************************************************************
// *
// *
//*******************************************************************
lunar_helmet_bootup_sequence()
{
SetSavedDvar( "lunar_hud_show_boot_up", 1 );
header_items = [
&"NX_LUNAR_HUD_BOOT_SEQ_0_HEADER", //ECLSS DIAGNOSTICS
&"NX_LUNAR_HUD_BOOT_DIVIDER" //--------------------------------------------------------
];
status_items_left = [
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_0_0", //Batteries
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_0_1", //O2 Reserves
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_0_2", //IDB Reserves
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_0_3", //Suit Integrity
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_0_4", //Thermal Regulation
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_0_5", //Solor Converter Status
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_0_6" //Heart Rate
];
status_items_right = [
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_1_0", //94
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_1_1", //98
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_1_2", //32 oz.
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_1_3", //100
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_1_4", //Nominal
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_1_5", //Nominal
&"NX_LUNAR_HUD_BOOT_SEQ_0_ENTRY_1_6" //132 BPM
];
boot_sequence( header_items, status_items_left, status_items_right );
SetSavedDvar( "lunar_hud_show_boot_up_pressure", 1 );
header_items = [
&"NX_LUNAR_HUD_BOOT_SEQ_1_HEADER", //EXTERNAL READINGS
&"NX_LUNAR_HUD_BOOT_DIVIDER" //--------------------------------------------------------
];
status_items_left = [
&"NX_LUNAR_HUD_BOOT_SEQ_1_ENTRY_0_0", //Ambient Radiation
&"NX_LUNAR_HUD_BOOT_SEQ_1_ENTRY_0_1", //Atmospheric Pressure
&"NX_LUNAR_HUD_BOOT_SEQ_1_ENTRY_0_2", //Air Quality
&"NX_LUNAR_HUD_BOOT_SEQ_1_ENTRY_0_3" //Temperature
];
status_items_right = [
&"NX_LUNAR_HUD_BOOT_SEQ_1_ENTRY_1_0", //.38 uR // tagMJS<TODO> we need to add the micro sybmol to our text
&"NX_LUNAR_HUD_BOOT_SEQ_1_ENTRY_1_1", //32.4 kPa
&"NX_LUNAR_HUD_BOOT_SEQ_1_ENTRY_1_2", //Nominal
&"NX_LUNAR_HUD_BOOT_SEQ_1_ENTRY_1_3" //-22 C // tagMJS<TODO> we need to add the degree symbol to our text
];
boot_sequence( header_items, status_items_left, status_items_right );
SetSavedDvar( "lunar_hud_show_boot_up_pressure", 0 );
header_items = [
&"NX_LUNAR_HUD_BOOT_SEQ_2_HEADER", //COMMUNICATIONS
&"NX_LUNAR_HUD_BOOT_DIVIDER" //--------------------------------------------------------
];
status_items_left = [
&"NX_LUNAR_HUD_BOOT_SEQ_2_ENTRY_0_0", //Voice com
&"NX_LUNAR_HUD_BOOT_SEQ_2_ENTRY_0_1", //Sat Comm
&"NX_LUNAR_HUD_BOOT_SEQ_2_ENTRY_0_2", //Nav Link
&"NX_LUNAR_HUD_BOOT_SEQ_2_ENTRY_0_3" //Weapon Link
];
status_items_right = [
&"NX_LUNAR_HUD_BOOT_SEQ_2_ENTRY_1_0", //OK
&"NX_LUNAR_HUD_BOOT_SEQ_2_ENTRY_1_0", //Failure
&"NX_LUNAR_HUD_BOOT_SEQ_2_ENTRY_1_0", //OK
&"NX_LUNAR_HUD_BOOT_SEQ_2_ENTRY_1_0" //OK
];
boot_sequence( header_items, status_items_left, status_items_right );
// need to kill the hud and turn off the outline
SetSavedDvar( "lunar_hud_show_boot_up", 0 );
// final text complete
display_lunar_boot_sequence_complete();
}
//*******************************************************************
// *
// *
//*******************************************************************
boot_sequence( header_items, status_items_left, status_items_right )
{
level._player setHudNoiseEffect( 0.6, 16, 12, 0.695313, ( getdvarfloat("color_enemy_r"), getdvarfloat("color_enemy_g"), getdvarfloat("color_enemy_b") ) );
length = 0;
init_status_window_dialogue( "boot_up" );
// turn on the status window dialogue and set color
change_status_window_dialogue_color( "green" );
// get total time to display all text, this is needed for controlling loading bar
thread loading_bar_progress( header_items, status_items_left, status_items_right );
// add our header
foreach( string in header_items )
{
length = strlength( string );
wait_time = ( length * level._status_window_dialogue.section["header"].time_per_char ) / 1000;
add_line_to_status_window_dialogue( string, "header" );
wait ( wait_time );
}
// add all of the items on the left first
foreach( string in status_items_left )
{
length = strlength( string );
wait_time = ( length * level._status_window_dialogue.section["column_0"].time_per_char ) / 1000;
add_line_to_status_window_dialogue( string, "column_0" );
wait ( wait_time );
}
level._player setHudNoiseEffect( 0.0, 16, 12, 0.695313 );
// now finally add all the items on the right
foreach( string in status_items_right )
{
length = strlength( string );
wait_time = ( length * level._status_window_dialogue.section["column_0"].time_per_char ) / 1000;
add_line_to_status_window_dialogue( string, "column_1" );
wait ( wait_time + 0.3 );
}
// and now we fade everything out and delete it all
fade_out_and_delete_all_status_window_elements();
// turn off the status window dialogue
change_status_window_dialogue_color( "none" );
}
//*******************************************************************
// *
// *
//*******************************************************************
display_lunar_boot_sequence_complete()
{
hud_elem = maps\_hud_util::get_countdown_hud( -175, 16 );
hud_elem.alignX = "left";
hud_elem.fontscale = level._status_window_dialogue.fontscale;
hud_elem.layer = level._status_window_dialogue.layer;
hud_elem.label = &"NX_LUNAR_HUD_BOOT_COMPLETE";
for ( index = 0; index < 6; index++ )
{
hud_elem.alpha = 1.0;
wait ( 0.1 );
hud_elem.alpha = 0.0;
wait ( 0.1 );
}
hud_elem Destroy();
}
//*******************************************************************
// *
// *
//*******************************************************************
airlock_cycle()
{
quick_status_items = [ "Bypass Sequence", "Welcome back Travis" ];
status_items = [ &"NX_LUNAR_HUD_AIRLOCK_SEQ_LINE_0", &"NX_LUNAR_HUD_AIRLOCK_SEQ_LINE_1",
&"NX_LUNAR_HUD_AIRLOCK_SEQ_LINE_2", &"NX_LUNAR_HUD_AIRLOCK_SEQ_LINE_3",
&"NX_LUNAR_HUD_AIRLOCK_SEQ_LINE_4", &"NX_LUNAR_HUD_AIRLOCK_SEQ_LINE_5",
&"NX_LUNAR_HUD_AIRLOCK_SEQ_LINE_6", &"NX_LUNAR_HUD_AIRLOCK_SEQ_LINE_7",
&"NX_LUNAR_HUD_AIRLOCK_SEQ_LINE_8", &"NX_LUNAR_HUD_AIRLOCK_SEQ_LINE_9",
&"NX_LUNAR_HUD_AIRLOCK_SEQ_LINE_10", &"NX_LUNAR_HUD_AIRLOCK_SEQ_LINE_11" ];
//terminal_status_check( quick_status_items );
SetSavedDvar( "lunar_hud_show_pressure", 1 );
terminal_status_check( status_items );
SetSavedDvar( "lunar_hud_show_pressure", 0 );
}
//*******************************************************************
// *
// *
//*******************************************************************
terminal_status_check( status_items )
{
length = 0;
init_status_window_dialogue( "pressurization" );
change_status_window_dialogue_color( "orange" );
for ( index = 0; index < status_items.size; index = ( index + 2 ) )
{
length = strlength( status_items[index] );
wait_time = ( length * level._status_window_dialogue.section["column_0"].time_per_char ) / 1000;
add_line_to_status_window_dialogue( status_items[index], "column_0" );
wait ( wait_time );
length = strlength( status_items[index + 1] );
wait_time = ( length * level._status_window_dialogue.section["column_0"].time_per_char ) / 1000;
add_line_to_status_window_dialogue( status_items[index + 1], "column_0" );
wait ( wait_time );
}
//wait( 0.5 );
thread scroll_status_window_section_up_and_off_of_screen( "header" );
thread scroll_status_window_section_up_and_off_of_screen( "column_0" );
change_status_window_dialogue_color( "none" );
}
//*******************************************************************
// *
// *
//*******************************************************************
init_status_window_dialogue( type )
{
if ( !IsDefined( level._status_window_dialogue ) )
{
status_window_struct = spawnstruct();
level._status_window_dialogue = status_window_struct;
level._status_window_dialogue.section = [];
}
if ( !IsDefined( level._status_window_dialogue.section["header"] ) )
{
header_struct = spawnstruct();
level._status_window_dialogue.section["header"] = header_struct;
}
if ( !IsDefined( level._status_window_dialogue.section["column_0"] ) )
{
col_struct = spawnstruct();
level._status_window_dialogue.section["column_0"] = col_struct;
}
if ( !IsDefined( level._status_window_dialogue.section["column_1"] ) )
{
col_struct = spawnstruct();
level._status_window_dialogue.section["column_1"] = col_struct;
}
if ( "pressurization" == type )
{
// common
level._status_window_dialogue.alignX = "right";
level._status_window_dialogue.alignY = "top";
level._status_window_dialogue.horzAlign = "right_adjustable";
level._status_window_dialogue.vertAlign = "top_adjustable";
level._status_window_dialogue.line_spacing = 13;
level._status_window_dialogue.fontscale = 1.2;
level._status_window_dialogue.layer = "visor";
level._status_window_dialogue.color = ( 0, 0, 0 );
// header;
level._status_window_dialogue.section["header"].max_lines = 1;
level._status_window_dialogue.section["header"].start_index = 0;
level._status_window_dialogue.section["header"].last_index = 0;
level._status_window_dialogue.section["header"].pos_x = -24;
level._status_window_dialogue.section["header"].pos_y = 32;
level._status_window_dialogue.section["header"].time_per_char = 18;
level._status_window_dialogue.section["header"].hud_elems = [];
// column 0
level._status_window_dialogue.section["column_0"].max_lines = 6;
level._status_window_dialogue.section["column_0"].start_index = 0;
level._status_window_dialogue.section["column_0"].last_index = 0;
level._status_window_dialogue.section["column_0"].pos_x = -32;
level._status_window_dialogue.section["column_0"].pos_y = 56;
level._status_window_dialogue.section["column_0"].time_per_char = 18;
level._status_window_dialogue.section["column_0"].elems = [];
}
else if ( "boot_up" == type )
{
// common
level._status_window_dialogue.alignX = "left";
level._status_window_dialogue.alignY = "top";
level._status_window_dialogue.horzAlign = "right_adjustable";
level._status_window_dialogue.vertAlign = "top_adjustable";
level._status_window_dialogue.line_spacing = 15;
level._status_window_dialogue.fontscale = 1.0;
level._status_window_dialogue.layer = "visor";
level._status_window_dialogue.color = ( 0, 0, 0 );
// header;
level._status_window_dialogue.section["header"].max_lines = 2;
level._status_window_dialogue.section["header"].start_index = 0;
level._status_window_dialogue.section["header"].last_index = 0;
level._status_window_dialogue.section["header"].pos_x = -192;
level._status_window_dialogue.section["header"].pos_y = 50;
level._status_window_dialogue.section["header"].time_per_char = 15;
level._status_window_dialogue.section["header"].hud_elems = [];
// column 0
level._status_window_dialogue.section["column_0"].max_lines = 7;
level._status_window_dialogue.section["column_0"].start_index = 0;
level._status_window_dialogue.section["column_0"].last_index = 0;
level._status_window_dialogue.section["column_0"].pos_x = -192;
level._status_window_dialogue.section["column_0"].pos_y = 82;
level._status_window_dialogue.section["column_0"].time_per_char = 15;
level._status_window_dialogue.section["column_0"].hud_elems = [];
// column 1
level._status_window_dialogue.section["column_1"].max_lines = 7;
level._status_window_dialogue.section["column_1"].start_index = 0;
level._status_window_dialogue.section["column_1"].last_index = 0;
level._status_window_dialogue.section["column_1"].pos_x = -62;
level._status_window_dialogue.section["column_1"].pos_y = 82;
level._status_window_dialogue.section["column_1"].time_per_char = 30;
level._status_window_dialogue.section["column_1"].hud_elems = [];
}
}
//*******************************************************************
// *
// *
//*******************************************************************
add_line_to_status_window_dialogue( hud_elem_string, section )
{
// make sure we have everthing we need
Assert( IsDefined( hud_elem_string ) );
Assert( IsDefined( section ) );
// check if we have the max amount of items
if ( level._status_window_dialogue.section[section].max_lines
<= ( level._status_window_dialogue.section[section].last_index - level._status_window_dialogue.section[section].start_index ) )
{
shift_status_window_lines( section );
}
hud_elem = maps\_hud_util::get_countdown_hud( level._status_window_dialogue.section[section].pos_x, level._status_window_dialogue.section[section].pos_y );
hud_elem.x = level._status_window_dialogue.section[section].pos_x; // get_countdown_hud on PC sets onw default x value, make sure this value is set correctly
hud_elem.alignX = level._status_window_dialogue.alignX;
hud_elem.alignY = level._status_window_dialogue.alignY;
hud_elem.horzAlign = level._status_window_dialogue.horzAlign;
hud_elem.vertAlign = level._status_window_dialogue.vertAlign;
hud_elem.fontscale = level._status_window_dialogue.fontscale;
hud_elem.layer = level._status_window_dialogue.layer;
hud_elem.color = level._status_window_dialogue.color;
hud_elem.foreground = 0;
hud_elem.label = hud_elem_string;
// special case for boot sequence
// if ( "Failure" == hud_elem_string )
// {
// hud_elem.color = ( GetDvarFloat( "color_enemy_r" ), GetDvarFloat( "color_enemy_g" ), GetDvarFloat( "color_enemy_b" ) );
// }
hud_elem SetPulseFX( level._status_window_dialogue.section[section].time_per_char, 900000, 700, true );
level._status_window_dialogue.section[section].hud_elems[level._status_window_dialogue.section[section].last_index] = hud_elem;
level._status_window_dialogue.section[section].last_index++;
level._status_window_dialogue.section[section].pos_y += level._status_window_dialogue.line_spacing;
}
//*******************************************************************
// *
// *
//*******************************************************************
shift_status_window_lines( section )
{
Assert( IsDefined( section ) );
// first we need to fade out our top line
level._status_window_dialogue.section[section].hud_elems[level._status_window_dialogue.section[section].start_index] fadeOverTime( 0.2 );
level._status_window_dialogue.section[section].hud_elems[level._status_window_dialogue.section[section].start_index].alpha = 0.0;
//wait ( 0.3 );
// then delete it
if ( IsDefined( level._status_window_dialogue.section[section].hud_elems[level._status_window_dialogue.section[section].start_index] ) )
{
level._status_window_dialogue.section[section].hud_elems[level._status_window_dialogue.section[section].start_index] destroy();
level._status_window_dialogue.section[section].start_index++;
}
// then we move all of our other lines up
foreach( hud_elem in level._status_window_dialogue.section[section].hud_elems )
{
if ( IsDefined( hud_elem ) )
{
hud_elem thread shift_single_status_line();
}
}
level._status_window_dialogue.section[section].pos_y -= level._status_window_dialogue.line_spacing;
wait ( 0.2 );
}
//*******************************************************************
// *
// *
//*******************************************************************
shift_single_status_line()
{
self MoveOverTime( 0.1 );
self.y -= level._status_window_dialogue.line_spacing;
}
//*******************************************************************
// *
// *
//*******************************************************************
scroll_status_window_section_up_and_off_of_screen( section )
{
Assert( IsDefined( section ) );
if ( IsDefined( level._status_window_dialogue.section ) && IsDefined( level._status_window_dialogue.section[section].hud_elems ) )
{
foreach( hud_elem in level._status_window_dialogue.section[section].hud_elems )
{
if ( IsDefined( hud_elem ) )
{
hud_elem shift_status_window_lines( section );
}
}
}
}
//*******************************************************************
// *
// *
//*******************************************************************
change_status_window_dialogue_color( color )
{
new_color = ( 0.0, 0.0, 0.0 );
if ( IsDefined( color ) )
{
switch( color )
{
case "green":
new_color = ( GetDvarFloat( "color_neutral_r" ), GetDvarFloat( "color_neutral_g" ), GetDvarFloat( "color_neutral_b" ) );
SetSavedDvar( "lunar_hud_status_window_r", GetDvarFloat( "color_neutral_r" ) );
SetSavedDvar( "lunar_hud_status_window_g", GetDvarFloat( "color_neutral_g" ) );
SetSavedDvar( "lunar_hud_status_window_b", GetDvarFloat( "color_neutral_b" ) );
break;
case "orange":
new_color = ( GetDvarFloat( "color_enemy_r" ), GetDvarFloat( "color_enemy_g" ), GetDvarFloat( "color_enemy_b" ) );
SetSavedDvar( "lunar_hud_status_window_r", GetDvarFloat( "color_enemy_r" ) );
SetSavedDvar( "lunar_hud_status_window_g", GetDvarFloat( "color_enemy_g" ) );
SetSavedDvar( "lunar_hud_status_window_b", GetDvarFloat( "color_enemy_b" ) );
break;
case "yellow":
new_color = ( 0.230, 0.230, 0.80 );
SetSavedDvar( "lunar_hud_status_window_r", 0.230 );
SetSavedDvar( "lunar_hud_status_window_g", 0.230 );
SetSavedDvar( "lunar_hud_status_window_b", 0.80 );
break;
case "none":
default:
new_color = ( 0.0, 0.0, 0.0 );
SetSavedDvar( "lunar_hud_status_window_r", 0.0 );
SetSavedDvar( "lunar_hud_status_window_g", 0.0 );
SetSavedDvar( "lunar_hud_status_window_b", 0.0 );
break;
}
if ( IsDefined( level._status_window_dialogue ) )
{
// set all current lines to new color
if ( IsDefined( level._status_window_dialogue.section ) )
{
foreach( element_array in level._status_window_dialogue.section )
{
if ( IsDefined( element_array.hud_elems ) )
{
foreach( hud_elem in element_array.hud_elems )
{
if ( IsDefined( hud_elem ) )
{
hud_elem.color = new_color;
}
}
}
}
}
// save color off so all new lines will be this color as well.
level._status_window_dialogue.color = new_color;
}
}
}
//*******************************************************************
// *
// *
//*******************************************************************
fade_out_all_status_window_elements( fade_time )
{
if ( IsDefined( level._status_window_dialogue.section ) )
{
foreach( element_array in level._status_window_dialogue.section )
{
if ( IsDefined( element_array.hud_elems ) )
{
foreach( hud_elem in element_array.hud_elems )
{
if ( IsDefined( hud_elem ) )
{
hud_elem FadeOverTime( fade_time );
hud_elem.alpha = 0;
}
}
}
}
}
}
//*******************************************************************
// *
// *
//*******************************************************************
delete_all_status_window_elements()
{
if ( IsDefined( level._status_window_dialogue.section ) )
{
foreach( element_array in level._status_window_dialogue.section )
{
if ( IsDefined( element_array.hud_elems ) )
{
foreach( hud_elem in element_array.hud_elems )
{
if ( IsDefined( hud_elem ) )
{
hud_elem destroy();
}
}
}
}
}
}
//*******************************************************************
// *
// *
//*******************************************************************
fade_out_and_delete_all_status_window_elements()
{
fade_time = 0.3;
fade_out_all_status_window_elements( fade_time );
wait ( fade_time );
delete_all_status_window_elements();
}
//*******************************************************************
// *
// *
//*******************************************************************
loading_bar_progress( header, column_0, column_1 )
{
hud_elem = maps\_hud_util::get_countdown_hud( -175, 34 );
hud_elem.x = -175;
hud_elem.horzAlign = "right_adjustable";
hud_elem.vertAlign = "top_adjustable";
hud_elem.alignX = "right";
hud_elem.fontscale = level._status_window_dialogue.fontscale;
hud_elem.layer = level._status_window_dialogue.layer;
hud_elem.color = level._status_window_dialogue.color;
// reset our value so we start at the correct value
SetSavedDvar( "lunar_hud_boot_up_percent", 0.0 );
hud_elem.label = Int( GetDvarFloat( "lunar_hud_boot_up_percent" ) * 100 );
total_wait_time = boot_sequence_get_total_text_display_time( header, column_0, column_1 );
num_loops = Int( total_wait_time / 0.05 );
step = Float( 1 / num_loops );
for ( index = 0; index < num_loops; index++ )
{
SetSavedDvar( "lunar_hud_boot_up_percent", GetDvarFloat( "lunar_hud_boot_up_percent" ) + step );
hud_elem.label = Int( GetDvarFloat( "lunar_hud_boot_up_percent" ) * 100 );
wait 0.05;
}
SetSavedDvar( "lunar_hud_boot_up_percent", 1.0 );
hud_elem.label = Int( GetDvarFloat( "lunar_hud_boot_up_percent" ) * 100 );
wait ( 0.15 );
hud_elem Destroy();
SetSavedDvar( "lunar_hud_boot_up_percent", 0.0 );
}
//*******************************************************************
// *
// *
//*******************************************************************
boot_sequence_get_total_text_display_time( header, column_0, column_1 )
{
total = 0.0;
foreach( string in header )
{
length = strlength( string );
total += ( length * level._status_window_dialogue.section["header"].time_per_char ) / 1000;
}
foreach( string in column_0 )
{
length = strlength( string );
total += ( length * level._status_window_dialogue.section["column_0"].time_per_char ) / 1000;
}
foreach( string in column_1 )
{
length = strlength( string );
total += 0.3 + ( ( length * level._status_window_dialogue.section["column_0"].time_per_char ) / 1000 );
}
return total;
}
//*******************************************************************
// *
// *
//*******************************************************************
proximity_paper_exploder()
{
paper_exploders = GetEntArray( "paper_explode", "targetname" );
foreach( paper_exploder in paper_exploders )
{
paper_exploder thread paper_explode();
}
}
//*******************************************************************
// *
// *
//*******************************************************************
paper_explode()
{
while( 1 )
{
// Wait for paper to be shot
self setCanDamage( true );
self waittill ( "damage", amount, attacker, direction_vec, point, type );
// Explode paper
PlayFX( level._effect[ "paper" ], self.origin );
// Hold a bit before FX again
wait( 2 );
}
}
//*******************************************************************
// *
// *
//*******************************************************************
proximity_glass_break( glass_name )
{
glass_triggers = GetEntArray( glass_name, "script_noteworthy" );
foreach( glass_trigger in glass_triggers )
{
if( glass_trigger.code_classname == "trigger_multiple" )
{
glass_trigger thread proximity_glass_break_wait();
}
}
}
// this - glass trigger
proximity_glass_break_wait()
{
self waittill( "trigger" );
bullet_start_pos = GetEnt( self.target, "targetname" );
glass_pos = GetEnt( bullet_start_pos.target, "targetname" );
end_pos = GetEnt( glass_pos.target, "targetname" );
glass = GetGlass( end_pos.target );
scale_force = 1.0;
// tagTC<temp> - temp fix for broken hydroponics glass
if( !IsDefined( glass ) )
{
return;
}
random_glass_break = ( RandomFloat( 1.0 ) );
direction = ( ( end_pos.origin - glass_pos.origin ) * scale_force );
// Destroy the glass
if( random_glass_break > 0.4 )
{
wait ( 0.1 + RandomFloat( 0.3 ) );
MagicBullet( "lunarrifle", bullet_start_pos.origin, glass_pos.origin );
DestroyGlass( glass, direction );
}
}
//*******************************************************************
// *
// *
//*******************************************************************
suit_patch_hint()
{
add_hint_string( "suit_patch_hint", &"NX_LUNAR_SUIT_PATCH_HINT", ::suit_patch_hint_remove );
level._player waittill( "suit_destroyed" );
display_hint( "suit_patch_hint" );
wait( 10.0 );
flag_set( "remove_patch_hint" );
}
suit_patch_hint_remove()
{
return flag( "remove_patch_hint" );
}
suit_patch_pickups()
{
suit_patch_icon_triggers = GetEntArray( "suit_patch_icon_trigger", "targetname" );
array_thread( suit_patch_icon_triggers, ::suit_patch_icon_trigger );
suit_patch_pickup_triggers = GetEntArray( "suit_patch_pickup_trigger", "targetname" );
array_thread( suit_patch_pickup_triggers, ::suit_patch_pickup_trigger );
level._player thread suit_patch_pickup_trigger_watch_hint();
}
suit_patch_pickup_trigger()
{
self trigger_on();
// Press and hold X to Take Suit Patch Kit
self sethintstring( &"NX_LUNAR_SUIT_PATCH_PICKUP_HINT" );
self UseTriggerRequireLookAt();
if ( !isDefined( self.has_custom_icon_trigger ) || !self.has_custom_icon_trigger )
{
self thread create_patch_icon_trigger();
}
while ( true )
{
self waittill( "trigger" );
if ( level._player GetFractionMaxAmmo( "nx_suitshield" ) < 1.0 || level._player GetWeaponAmmoClip( "nx_suitshield" ) == 0 )
{
break;
}
}
// Add a patch kit for the player
suit_patch_ammo = level._player GetWeaponAmmoClip( "nx_suitshield" );
level._player GiveWeapon( "nx_suitshield" ); // have to give weapon in case player has 0 patches left
level._player SetWeaponAmmoClip( "nx_suitshield", ( suit_patch_ammo + 1 ) );
if( GetDvar("environment_pressurized") == "1" )
level._player playsound("suit_inject_patchkit_pickup_press");
else
level._player playsound("suit_inject_patchkit_pickup_depress");
// Delete the patch kit geo
patch_kits = GetEntArray( self.target, "targetname" );
foreach( patch_kit in patch_kits )
{
patch_kit Delete();
}
self trigger_off();
}
suit_patch_pickup_trigger_watch_hint()
{
pickup_allowed = true;
while ( true )
{
wait 0.05;
previous_pickup_allowed = pickup_allowed;
pickup_allowed = self GetFractionMaxAmmo( "nx_suitshield" ) < 1.0 || level._player GetWeaponAmmoClip( "nx_suitshield" ) == 0;
if ( previous_pickup_allowed != pickup_allowed )
{
suit_patch_pickup_triggers = GetEntArray( "suit_patch_pickup_trigger", "targetname" );
if ( pickup_allowed )
{
array_call( suit_patch_pickup_triggers, ::sethintstring, &"NX_LUNAR_SUIT_PATCH_PICKUP_HINT" );
}
else
{
array_call( suit_patch_pickup_triggers, ::sethintstring, &"NX_LUNAR_SUIT_PATCH_PICKUP_FULL_HINT" );
}
}
}
}
create_patch_icon_trigger()
{
trigger = Spawn( "trigger_radius", self.origin, 0, 300, 100 );
pickup_icon = create_suit_patch_pickup_icon( self );
trigger thread watch_suit_patch_pickup_icon( self, pickup_icon );
self waittill( "trigger" );
pickup_icon Destroy();
}
suit_patch_icon_trigger()
{
use_trigger = undefined;
links = GetEntArray( self.script_noteworthy, "script_noteworthy" );
foreach ( link in links )
{
if ( isDefined( link.targetname ) && link.targetname == "suit_patch_pickup_trigger" )
{
use_trigger = link;
}
}
if ( isDefined( use_trigger ) )
{
use_trigger.has_custom_icon_trigger = true;
pickup_icon = create_suit_patch_pickup_icon( use_trigger );
self thread watch_suit_patch_pickup_icon( use_trigger, pickup_icon );
use_trigger waittill( "trigger" );
pickup_icon Destroy();
}
}
create_suit_patch_pickup_icon( use_trigger )
{
use_trigger endon( "trigger" );
icon = NewHudElem();
icon SetShader( "waypoint_patchkit", 1, 1 );
icon.alpha = 0;
icon.x = 0;
icon.y = 0;
icon.z = 0;
icon.hidewhendead = true;
icon.hidewheninmenu = true;
patch_kit = GetEnt( use_trigger.target, "targetname" );
icon.x = patch_kit.origin[ 0 ];
icon.y = patch_kit.origin[ 1 ];
icon.z = patch_kit.origin[ 2 ];
icon.z += 12;
icon SetWayPoint( true, true );
return icon;
}
watch_suit_patch_pickup_icon( use_trigger, icon )
{
use_trigger endon( "trigger" );
while ( true )
{
self waittill( "trigger", other );
if ( !isplayer( other ) )
{
continue;
}
while ( other IsTouching( self ) )
{
show = true;
icon.color = ( getdvarfloat("color_enemy_r"), getdvarfloat("color_enemy_g"), getdvarfloat("color_enemy_b") );
if ( player_looking_at( use_trigger.origin, 0.0, true ) && show )
{
icon_fade_in( icon );
}
else
{
icon_fade_out( icon );
}
wait 0.25;
}
icon_fade_out( icon );
}
}
icon_fade_in( icon )
{
if ( icon.alpha != 0 )
{
return;
}
icon FadeOverTime( 0.1 );
icon.alpha = 1;
wait( 0.1 );
}
icon_fade_out( icon )
{
if ( icon.alpha == 0 )
{
return;
}
icon FadeOverTime( 0.2 );
icon.alpha = 0;
wait( 0.2 );
}
//*******************************************************************
// *
// *
//*******************************************************************
move_life_support_cart( name, distance, time )
{
// Move the cart
life_support_cart_parts = GetEntArray( name, "targetname" );
foreach ( part in life_support_cart_parts )
{
part moveX( distance, time );
}
}
//*******************************************************************
// *
// *
//*******************************************************************
flickering_lights()
{
flickering_lights = getentarray( "flickering_lights", "targetname" );
for ( i = 0; i < flickering_lights.size; i++ )
{
flickering_lights[ i ] thread maps\_lights::flickerLightIntensity( .2, .6 );
}
}
//*******************************************************************
// *
// *
//*******************************************************************
// tagDK<note>: script stolen from repel util, possibly make global utility
ignore_everything()
{
self.ignoreall = true;
self.ignoreme = true;
self.grenadeawareness = 0;
self.ignoreexplosionevents = true;
self.ignorerandombulletdamage = true;
self.ignoresuppression = true;
self.disableBulletWhizbyReaction = true;
self disable_pain();
self.dontavoidplayer = true;
self.og_newEnemyReactionDistSq = self.newEnemyReactionDistSq;
self.newEnemyReactionDistSq = 0;
}
// tagDK<note>: script stolen from repel util, possibly make global utility
clear_ignore_everything()
{
self.ignoreall = false;
self.ignoreme = false;
self.grenadeawareness = 1;
self.ignoreexplosionevents = false;
self.ignorerandombulletdamage = false;
self.ignoresuppression = false;
self.disableBulletWhizbyReaction = false;
self enable_pain();
self.dontavoidplayer = false;
if( IsDefined( self.og_newEnemyReactionDistSq ) )
{
self.newEnemyReactionDistSq = self.og_newEnemyReactionDistSq;
}
}
//*******************************************************************
// *
// *
//*******************************************************************
set_deadly_tracking_ai( extra )
{
// Get Ai Super Aggressive and Deadly
enemy = self;
enemy clear_force_color();
enemy.maxsightdistsqrd = 8192 * 8192;
enemy.favoriteenemy = level._player;
if( IsDefined( extra ) )
{
enemy.baseaccuracy = 1000000.0;
}
else
{
enemy.baseaccuracy = 1.0;
}
enemy.pathrandompercent = 200;
enemy SetGoalEntity( level._player );
enemy.goalradius = 400;
}
//*******************************************************************
// *
// *
//*******************************************************************
hidden_dynamic_run_speed()
{
self endon( "death" );
level endon( "stop_dynamic_run_speed" );
while( 1 )
{
look_at_ally = within_fov( level._player.origin, level._player getplayerangles(), self.origin, Cos( 100 ) );
if( look_at_ally )
{
if( self.moveplaybackrate > 1.2 )
{
// self enable_cqbwalk();
// Variable speeds
normal_speed = ( 1.0 + RandomFloat( 0.2 ) );
self.moveplaybackrate = normal_speed;
}
}
else
{
if( self.moveplaybackrate < 1.5 )
{
// self disable_cqbwalk();
self.moveplaybackrate = 1.5;
}
}
wait( 0.05 );
}
}
//*******************************************************************
// *
// *
//*******************************************************************
lunar_combat_init( give_helmet )
{
lunar_weapon_init();
lunar_patch_init();
if ( !IsDefined( give_helmet ) || give_helmet == true )
{
// set the hud to military and instantly put on the player's helmet
level._player maps\_moon::set_suit_hud_type("military");
level._player PutOnHelmet( true );
}
}
lunar_weapon_init()
{
// Give the player the loadout
maps\_loadout::give_loadout();
}
lunar_patch_init()
{
// Give suit health mechanic to player
level._player maps\_suitshield::suit_shield_give_patch_tool();
// Suit patch pickups throughout the level
level._player thread suit_patch_pickups();
SetSavedDvar( "lunar_hud", "military" );
}
//*******************************************************************
// *
// *
//*******************************************************************
player_danger_zone()
{
self endon( "end_danger_zone" );
while( true )
{
// Wait for player in danger
flag_wait( "player_in_danger" );
self player_in_danger();
//IPrintln( "Player in danger" );
// Wait for player to leave danger
while( true )
{
if( !flag( "player_in_danger" ) )
{
// Set not in danger
self player_not_in_danger();
//IPrintln( "Player safe" );
break;
}
wait( 0.05 );
}
}
}
end_danger_zone()
{
flag_wait( "turn_off_danger_zones" );
self notify( "end_danger_zone" );
}
player_in_danger()
{
if( flag( "living_module" ) )
{
level._player set_player_attacker_accuracy( 25.0 );
}
else
{
level._player set_player_attacker_accuracy( 75.0 );
}
SetThreatBias( "axis", "player", 5000 );
}
player_not_in_danger( attacker_accuracy )
{
level._player set_player_attacker_accuracy( 1.0 );
SetThreatBias( "axis", "player", 0 );
}
//*******************************************************************
// *
// *
//*******************************************************************
player_flank_zone()
{
// Create thread bias group if doesn't exist
if( !ThreatBiasGroupExists( "flanked_enemies" ) )
{
CreateThreatBiasGroup( "flanked_enemies" );
}
self endon( "end_flank_zone" );
while( true )
{
// Wait for player in flank
flag_wait( "player_in_flank" );
self player_in_flank();
//IPrintln( "Player in flank" );
// Wait for player to leave flank
while( true )
{
if( !flag( "player_in_flank" ) )
{
// Set not in flank
self player_not_in_flank();
//IPrintln( "Player left flank" );
break;
}
wait( 0.05 );
}
}
}
end_flank_zone()
{
self notify( "end_flank_zone" );
}
player_in_flank()
{
SetThreatBias( "flanked_enemies", "player", -10000 );
}
player_not_in_flank( attacker_accuracy )
{
SetThreatBias( "flanked_enemies", "player", 0 );
}
//*******************************************************************
// *
// *
//*******************************************************************
lunar_suit_state_settings( suit_type, suit_setting, helmet_loop, time )
{
//this script should do multiple things to change the soundscape
//and functionality of the sounds in lunar levels
//first it must accept a time variable for setting a suit sound, and
//use that variable when setting the suit
if( !isdefined ( time ) )
{
//iprintln ("**************** time is NOT defined, now defining to 0");
time = 0.0;
}
else
{
//iprintln ("**************** time IS defined, not changing it. time = " + time);
}
//the set_suit should set both the alias prefixes, and if there is an
//associated EQ and reverb setting, then it will set those, too
if ( isdefined ( suit_type ) )
{
//check to see if the time variable exists, if so, then use set_suit_fade,
//otherwise, just use set_suit
//iprintln ("**************** Suit type IS defined. suit_type = " + suit_type );
if ( time == 0.0 )
{
//iprintln ("**************** Suit type IS defined and time equals ZERO");
set_suit( suit_type );
}
else
{
//iprintln ("**************** Suit type IS defined and time DOES NOT equal ZERO");
set_suit_fade( suit_type, time);
}
}
else
{
//iprintln ("**************** There is NO suit type defined at all");
}
//next we need to set the game's "pressurization" variables
//these variables are what the game uses to determine
//which weapon sound to play, a pressurized, or depressurized version
//it also has something to do with activating the suit shield, it seems
//this changes the dvar for pressurized/depressurized
maps\nx_lunar_util::airlock_set_environment( suit_type );
//we now need to set the breathing for this helmet/suit/press state.
//this means we should either stop breathing, use normal moon breathing
//in the future, we should try and make this work for different emotional
//states of breathing, like dying, chasing, sneaking, battle, etc...
//lastly, we should set the ambience for this state
//DR: need to check to see if these are also being called outside of the set suit...might be...
if ( isdefined ( helmet_loop ) )
{
if ( helmet_loop == "null" )
//level._player stoploopsound( "amb_space_suit_amb" );
return;
else
level._player PlayLoopSound( helmet_loop );
}
}
//*******************************************************************
// *
// *
//*******************************************************************
waittill_all_enemies_dead_or_dying( timeout )
{
living_enemies = GetAIArray( "axis" );
living_enemies_to_kill = living_enemies.size;
waittill_dead_or_dying( living_enemies, living_enemies_to_kill, timeout );
}
waittill_number_of_enemies_remaining( count, timeout )
{
living_enemies = GetAIArray( "axis" );
living_enemies_to_kill = living_enemies.size;
enemies_to_remain = living_enemies_to_kill - count;
waittill_dead_or_dying( living_enemies, living_enemies_to_kill, timeout );
}
waittill_number_of_enemies_killed( count, timeout )
{
living_enemies = GetAIArray( "axis" );
living_enemies_to_kill = count;
waittill_dead_or_dying( living_enemies, living_enemies_to_kill, timeout );
}
waittill_targetname_triggered( targetname )
{
trigger_brush = GetEnt( targetname, "targetname" );
trigger_brush waittill( "trigger" );
}
//*******************************************************************
// *
// *
//*******************************************************************
// OPTIONAL: Pass in array of enemies to not be removed
clean_all_enemies( array )
{
enemies = GetAIArray( "axis" );
if( IsDefined( array ) )
{
enemies_to_remove = array_exclude( enemies, array );
}
else
{
enemies_to_remove = enemies;
}
array_thread( enemies_to_remove, maps\_nx_utility::delete_ai_not_bullet_shielded );
}
//*******************************************************************
// *
// *
//*******************************************************************
lunar_player_movement_control()
{
self lunar_player_movement_controller();
player_speed_default( 5.0 );
}
lunar_player_movement_controller()
{
level endon( "stop_player_movement_control" );
self endon( "dealth" );
ai = self;
while( 1 )
{
if( within_fov( ai.origin, ai.angles, level._player.origin, Cos( 90 ) ) )
{
player_speed_set( 120, 2.0 );
}
else
{
if( players_within_distance( 200, ai.origin ) )
{
player_speed_set( 120, 2.0 );
}
else if( players_within_distance( 300, ai.origin ) )
{
player_speed_set( 130, 2.0 );
}
else if( players_within_distance( 400, ai.origin ) )
{
player_speed_set( 140, 2.0 );
}
else
{
player_speed_default( 1.0 );
}
}
wait( 0.5 );
}
}
//*******************************************************************
// *
// *
//*******************************************************************
lunar_traversal_killer_by_flag( targetname, ender )
{
level endon( ender );
flag_trigger = GetEnt( targetname, "targetname" );
while( 1 )
{
level thread hide_scriptmodels_by_targetname( flag_trigger.target );
flag_wait( flag_trigger.script_flag );
level thread show_scriptmodels_by_targetname( flag_trigger.target );
flag_waitopen( flag_trigger.script_flag );
}
}
//*******************************************************************
// *
// *
//*******************************************************************
// Loads and plays the animated lunar display binks
lunar_screen_binks()
{
wait 0.05;
// stop any previous playback
StopCinematicInGame();
SetSavedDvar( "cg_cinematicFullScreen", "0" );
CinematicInGameLoopResident( "nx_lunar_screen1_big" );
}
lunar_water_treatment_screen_binks()
{
// stop any previous playback
StopCinematicInGame();
SetSavedDvar( "cg_cinematicFullScreen", "0" );
CinematicInGameLoopResident( "nx_lunar_screen2" );
}