mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-23 17:45:47 +00:00
1321 lines
38 KiB
Plaintext
1321 lines
38 KiB
Plaintext
//****************************************************************************
|
|
// **
|
|
// Confidential - (C) Activision Publishing, Inc. 2010 **
|
|
// **
|
|
//****************************************************************************
|
|
// **
|
|
// Module: Lava Station 1 **
|
|
// **
|
|
// Created: 07/25/10 - Travis Chen (trchen x 4143) **
|
|
// **
|
|
//****************************************************************************
|
|
|
|
#include maps\_utility;
|
|
#include common_scripts\utility;
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
section_main()
|
|
{
|
|
// setup station 1 spawners
|
|
self thread setup_spawners();
|
|
|
|
// setup train (no vehicle)
|
|
if( !IsDefined( level.e_train ) )
|
|
{
|
|
level.e_train = setup_train_by_name( "s1_eTrain" );
|
|
|
|
// hide train
|
|
foreach( train in level.e_train )
|
|
{
|
|
train maps\_nx_moving_platform::platform_process_all_elements( "hide" );
|
|
}
|
|
}
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
section_precache()
|
|
{
|
|
PreCacheRumble( "falling_land" );
|
|
}
|
|
|
|
section_flag_inits()
|
|
{
|
|
// Pre-Platform
|
|
flag_init( "player_falling_death" );
|
|
flag_init( "s1p_lift_almost_down" );
|
|
flag_init( "s1p_lift_down" );
|
|
|
|
// Platform Battle - Lift
|
|
flag_init( "s1p_player_near_lift_jump" );
|
|
flag_init( "s1p_player_jump_lift" );
|
|
flag_init( "s1p_jump_managed" );
|
|
|
|
// Platform Battle
|
|
flag_init( "s1p_player_jump_5th" );
|
|
flag_init( "s1p_kill_5th_bad" );
|
|
flag_init( "s1p_player_jump_4th" );
|
|
flag_init( "s1p_kill_4th_bad" );
|
|
flag_init( "s1p_player_jump_3rd" );
|
|
flag_init( "s1p_kill_3rd_bad" );
|
|
|
|
// Under Tracks
|
|
flag_init( "s1_tracks_begin" );
|
|
flag_init( "s1_player_jump_tracks" );
|
|
flag_init( "s1_tracks_spawn_ar_roll" );
|
|
flag_init( "s1_tracks_backtrack_ar" );
|
|
flag_init( "s1_tracks_train_pass" );
|
|
|
|
// Command Center
|
|
flag_init( "s1_under_tracks_done" );
|
|
flag_init( "s1_cc_lev_ready" );
|
|
flag_init( "s1_cc_lev_open" );
|
|
flag_init( "cc_lev_ready_baker" );
|
|
flag_init( "cc_lev_ready_tilman" );
|
|
flag_init( "cc_lev_ready_franklin" );
|
|
flag_init( "s1_cc_lev_use" );
|
|
flag_init( "s1c_reached_command_room" );
|
|
flag_init( "s1_command_train_begin" );
|
|
flag_init( "cc_open_airlock" );
|
|
|
|
// Station 1 - COMPLETE!
|
|
flag_init( "s1_station_complete" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
platform_tower_objectives( objective_num )
|
|
{
|
|
// objectives go here
|
|
|
|
return objective_num;
|
|
}
|
|
|
|
station_1_objectives( objective_num )
|
|
{
|
|
// enter the command room
|
|
flag_wait( "s1_under_tracks_done" );
|
|
objective_complete( objective_num );
|
|
objective_num++;
|
|
|
|
// Open CC Elevator
|
|
objective_add( objective_num, "current", &"NX_LAVA_OBJECTIVE_S1_EXPLORE_COMMAND" );
|
|
waypoint = getStruct( "cc_lev_open_objective", "targetname" );
|
|
objective_position( objective_num, waypoint.origin );
|
|
|
|
// Use CC Elevator
|
|
flag_wait( "s1_cc_lev_open" );
|
|
objective_clearAdditionalPositions( objective_num );
|
|
waypoint = getStruct( "cc_lev_first_objective", "targetname" );
|
|
objective_position( objective_num, waypoint.origin );
|
|
|
|
// Go into the command center
|
|
return objective_num;
|
|
}
|
|
|
|
s1_command_center_objectives( objective_num )
|
|
{
|
|
|
|
// Continue exploring (follow baker)
|
|
flag_wait( "s1_cc_lev_use" );
|
|
objective_clearAdditionalPositions( objective_num );
|
|
objective_onEntity( objective_num, level.baker, (0, 0, 74) );
|
|
|
|
// Station 1 complete... run to the train!
|
|
flag_wait( "s1_station_complete" );
|
|
objective_complete( objective_num );
|
|
objective_num++;
|
|
|
|
// Come on, ride the train.
|
|
return objective_num;
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// Station 1 - Main Logic *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
platform_tower_start()
|
|
{
|
|
// spawn and teleport allies
|
|
maps\nx_lava_util::lava_ally_spawn( "station_1_plat_start" );
|
|
|
|
// setup and teleport player
|
|
maps\nx_lava_util::player_start( "station_1_plat_player_start" );
|
|
|
|
// init elevator
|
|
flag_set( "op_s1_lift_baker" );
|
|
flag_set( "op_s1_lift_tilman" );
|
|
flag_set( "op_s1_lift_franklin" );
|
|
|
|
// set initial vision and fog for this checkpoint.
|
|
thread maps\nx_lava_fx::set_vision_and_fog("garage", 0);
|
|
}
|
|
|
|
platform_tower()
|
|
{
|
|
autosave_by_name( "platform_tower" );
|
|
|
|
//**********************************************
|
|
// Setup
|
|
|
|
// Setup allies
|
|
level.baker disable_cqbwalk();
|
|
level.tilman disable_cqbwalk();
|
|
level.franklin disable_cqbwalk();
|
|
|
|
// Setup train
|
|
maps\nx_lava_util::setup_train_vehicles( level.e_train, false );
|
|
|
|
foreach( train in level.e_train )
|
|
{
|
|
train maps\_nx_moving_platform::platform_process_all_elements( "show" );
|
|
}
|
|
|
|
|
|
//**********************************************
|
|
// Pre-Platform
|
|
level thread s1_move_lavatube_elevator();
|
|
|
|
//**********************************************
|
|
// Platform Battle - Lift
|
|
flag_wait( "s1p_lift_almost_down" );
|
|
s1_platform_cleanup();
|
|
autosave_by_name( "platform_tower_battle" );
|
|
self thread start_lift_battle();
|
|
|
|
//**********************************************
|
|
// Platform Battle - Lift Jump
|
|
|
|
flag_wait( "s1p_player_near_lift_jump" );
|
|
self thread prep_5th_battle();
|
|
|
|
//**********************************************
|
|
// Platform Battle - 5th
|
|
flag_wait( "s1p_player_jump_lift" );
|
|
self start_5th_battle();
|
|
|
|
// note: start_5th_battle isn't threaded... no man left behind
|
|
flag_wait( "s1p_player_jump_5th" );
|
|
self thread escalate_5th_battle();
|
|
self thread start_3rd_lift();
|
|
|
|
//**********************************************
|
|
// Platform Battle - 4th
|
|
self thread start_4th_battle();
|
|
|
|
flag_wait( "s1p_player_jump_4th" );
|
|
self thread escalate_4th_battle();
|
|
|
|
//**********************************************
|
|
// Platform Battle - 3rd
|
|
self thread start_3rd_battle();
|
|
|
|
flag_wait( "s1p_player_jump_3rd" );
|
|
self thread escalate_3rd_battle();
|
|
|
|
//**********************************************
|
|
// Platform Battle - Exit
|
|
flag_wait( "s1p_kill_3rd_bad" );
|
|
self thread exit_platform_tower();
|
|
|
|
flag_wait( "s1_tracks_begin" );
|
|
}
|
|
|
|
station_1_start()
|
|
{
|
|
// spawn and teleport allies
|
|
maps\nx_lava_util::lava_ally_spawn( "station_1_start" );
|
|
level.franklin forceUseWeapon( "lunar_sniper_l3", "primary" );
|
|
|
|
// move train to spawn spot
|
|
maps\nx_lava_util::setup_train_vehicles( level.e_train, false );
|
|
|
|
foreach( train in level.e_train )
|
|
{
|
|
train maps\_nx_moving_platform::platform_process_all_elements( "show" );
|
|
}
|
|
|
|
level.e_train reset_s1_train();
|
|
|
|
// setup and teleport player
|
|
maps\nx_lava_util::player_start( "station_1_player_start" );
|
|
|
|
// set initial vision and fog for this checkpoint.
|
|
thread maps\nx_lava_fx::set_vision_and_fog("garage", 0);
|
|
|
|
thread audio_train_pass();
|
|
}
|
|
|
|
station_1()
|
|
{
|
|
autosave_by_name( "station_1" );
|
|
|
|
|
|
//**********************************************
|
|
// Under Tracks
|
|
|
|
// set up ally colors
|
|
level thread s1_setup_tracks_allies(); // TEMP TEMP - Need traversal to tracks
|
|
|
|
// spawn shotguns & snipers
|
|
level thread spawn_tracks_frontline();
|
|
level thread spawn_catwalk();
|
|
|
|
// spawn tracks jumpers & ar roll
|
|
flag_wait( "s1_player_jump_tracks" );
|
|
level thread s1_to_tracks_franklin();
|
|
level thread spawn_tracks_jumper();
|
|
level thread spawn_catwalk_w2();
|
|
|
|
// wait till snipers stuff is dead
|
|
level thread spawn_tracks_ar_roll();
|
|
|
|
// player advances to find
|
|
// rear def - not added yet!
|
|
// cc rollout
|
|
|
|
// get under-tracks train ready
|
|
// in "spawn_tracks_jumper()"
|
|
|
|
//**********************************************
|
|
// Command Center - 1st floor
|
|
|
|
// go to the command center
|
|
flag_wait( "s1_under_tracks_done" );
|
|
level thread s1_goto_cc();
|
|
level thread s1_cc_lower_lev();
|
|
|
|
// open and use the elevator / air lock
|
|
s1_cc_open_lev_use();
|
|
s1_cc_use_lev_use();
|
|
}
|
|
|
|
s1_command_center_start()
|
|
{
|
|
// teleport command center elevator to start point
|
|
s1_teleport_cc_lev();
|
|
|
|
// spawn and teleport allies
|
|
maps\nx_lava_util::lava_ally_spawn( "s1_cc_start" );
|
|
|
|
// setup and teleport player
|
|
maps\nx_lava_util::player_start( "s1_cc_player_start" );
|
|
|
|
// move elevator
|
|
trig = GetEnt( "cc_lev_first_trig", "targetname" );
|
|
trig trigger_off();
|
|
wait( 0.2 );
|
|
s1_cc_move_lev();
|
|
}
|
|
|
|
s1_command_center()
|
|
{
|
|
flag_wait( "s1c_reached_command_room" );
|
|
autosave_by_name( "s1_command_center" );
|
|
|
|
// start the command room scene
|
|
s1_command_room_scene();
|
|
|
|
// move allies into airlock
|
|
thread s1c_goto_airlock();
|
|
|
|
// trigger airlock vignette
|
|
flag_wait( "s1c_player_in_airlock" );
|
|
|
|
// leave the command center airlock
|
|
s1c_leave_airlock();
|
|
|
|
|
|
//**********************************************
|
|
// Station 1 - COMPLETE!
|
|
|
|
// clean up train
|
|
if( IsDefined( level.e_train[0].vehicle ) )
|
|
thread maps\nx_lava_util::delete_train( level.e_train );
|
|
|
|
// once the vignette is done... station one is finished
|
|
level.keene = level.baker; // tagBM<Hack> - TEMP TEMP - baker is referenced as keen on Train_1
|
|
level.keene.animname = "keene"; // tagBM<Hack> - TEMP TEMP - baker is referenced as keen on Train_1
|
|
flag_set( "s1_station_complete" );
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// Lava Tube Elevator *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
s1_move_lavatube_elevator()
|
|
{
|
|
// Elevator button actioned
|
|
battlechatter_off();
|
|
|
|
// Lavatube elevator ents
|
|
lavatube_elevator_trigger = GetEnt( "lavatube_elevator_trigger", "targetname" );
|
|
lavatube_elevator_target_01 = GetEnt( "lavatube_elevator_target_01", "targetname" );
|
|
lavatube_elevator_target_02 = GetEnt( "lavatube_elevator_target_02", "targetname" );
|
|
lavatube_elevator = GetEnt( "lavatube_elevator", "targetname" );
|
|
lavatube_elevator_linkers = GetEntArray( "lavatube_elevator_link", "targetname" );
|
|
|
|
// Lavatube main door elevator ents
|
|
lavatube_main_door_l1 = GetEnt( "main_lava_tube_elevator_door_l1", "targetname" );
|
|
lavatube_main_door_l2 = GetEnt( "main_lava_tube_elevator_door_l2", "targetname" );
|
|
lavatube_main_door_r1 = GetEnt( "main_lava_tube_elevator_door_r1", "targetname" );
|
|
lavatube_main_door_r2 = GetEnt( "main_lava_tube_elevator_door_r2", "targetname" );
|
|
|
|
// Lavatube top door elevator ents
|
|
lavatube_top_door_l = GetEnt( "top_lava_tube_elevator_door_l", "targetname" );
|
|
lavatube_top_door_r = GetEnt( "top_lava_tube_elevator_door_r", "targetname" );
|
|
|
|
// Lavatube bottom door elevator ents
|
|
lavatube_bottom_door_l = GetEnt( "bottom_lava_tube_elevator_door_l", "targetname" );
|
|
lavatube_bottom_door_r = GetEnt( "bottom_lava_tube_elevator_door_r", "targetname" );
|
|
|
|
// Open the top door
|
|
wait( 0.5 );
|
|
lavatube_top_door_l MoveX( -352, 7, .5, .2 );
|
|
lavatube_top_door_r MoveX( 352, 7, .5, .2 );
|
|
|
|
// Close the main door
|
|
lavatube_main_door_l1 MoveX( 356, 5, 0.5, 0.2 );
|
|
lavatube_main_door_r1 MoveX( -356, 5, 0.5, 0.2 );
|
|
wait( 2.5 );
|
|
lavatube_main_door_l2 MoveX( 178, 2.5, 0.1, 0.2 );
|
|
lavatube_main_door_r2 MoveX( -178, 2.5, 0.1, 0.2 );
|
|
wait( 2.5 );
|
|
|
|
// Move the elevator
|
|
foreach( linker in lavatube_elevator_linkers )
|
|
{
|
|
linker LinkTo( lavatube_elevator );
|
|
}
|
|
|
|
level.baker linkTo( lavatube_elevator );
|
|
level.tilman linkTo( lavatube_elevator );
|
|
level.franklin linkTo( lavatube_elevator );
|
|
|
|
wait( 1.0 );
|
|
|
|
thread maps\nx_lava_fx::set_vision_and_fog("station1", 6.0); // transition to new vision
|
|
|
|
// Start moving elevator down to shaft dock
|
|
lavatube_elevator MoveTo( lavatube_elevator_target_01.origin, 25.0, 2.0, 2.0 );
|
|
lavatube_elevator PlaySound( "scn_lava_lift02" );
|
|
|
|
wait( 4 );
|
|
// Close the top door
|
|
lavatube_top_door_l MoveX( 352, 7, .5, .2 );
|
|
lavatube_top_door_r MoveX( -352, 7, .5, .2 );
|
|
|
|
wait( 7 );
|
|
// open bottom door
|
|
lavatube_bottom_door_l MoveX( -352, 7, .5, .2 );
|
|
lavatube_bottom_door_r MoveX( 352, 7, .5, .2 );
|
|
|
|
// start station 1 hustle and bustle
|
|
level thread s1_ground_flair();
|
|
level thread s1_lavatube_elevator_dialog();
|
|
|
|
// give franklin a sniper rifle
|
|
level.franklin forceUseWeapon( "lunar_sniper_l3", "primary" );
|
|
|
|
// Close bottom door
|
|
wait( 12 );
|
|
lavatube_bottom_door_l MoveX( 352, 7, .5, .2 );
|
|
lavatube_bottom_door_r MoveX( -352, 7, .5, .2 );
|
|
|
|
// Wait for elevator to reach destination 1
|
|
wait( 2 );
|
|
|
|
// Hold at rail change
|
|
wait( 1 );
|
|
|
|
// Reached shaft dock, move down to elevator shaft
|
|
lavatube_elevator MoveTo( lavatube_elevator_target_02.origin, 3.5, 0.5, 0.2 );
|
|
|
|
flag_set( "s1p_lift_almost_down" );
|
|
|
|
// turn on battlechatter and save
|
|
battlechatter_on( "allies" );
|
|
|
|
// Wait for elevator to reach destination 2
|
|
wait( 3.5 );
|
|
|
|
level.baker unlink();
|
|
level.tilman unlink();
|
|
level.franklin unlink();
|
|
flag_set( "s1p_lift_down" );
|
|
}
|
|
|
|
s1_ground_flair()
|
|
{
|
|
// Crane and forklifts
|
|
thread maps\nx_lava_anim::underground_reveal();
|
|
|
|
// move east train
|
|
level.e_train train_switch_target( "s1_eTrain" );
|
|
thread maps\nx_lava_util::move_train( level.e_train, 100, 1000, 500 );
|
|
thread maps\nx_lava_fx::cargo_train_rego_fx();
|
|
}
|
|
|
|
s1_lavatube_elevator_dialog()
|
|
{
|
|
wait( 1.5 );
|
|
level.baker radio_dialogue( "lava_kee_station1_holyshit" ); // dialog: "...holy shit..."
|
|
wait( 0.5 );
|
|
level.baker radio_dialogue( "lava_kee_station1_miningtracks" ); // dialog: "Who knows how big this thing is!"
|
|
wait( 1 );
|
|
level.baker radio_dialogue( "lava_kee_station1_canyoureadme" ); // dialog: "Base!? Can you read me, base?! -shit... nothing..."
|
|
}
|
|
|
|
s1_platform_cleanup()
|
|
{
|
|
// clean up garage vehicle
|
|
if( IsDefined( level.op_sub_vehicle ) )
|
|
level.op_sub_vehicle delete();
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// Platform Battle *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
start_lift_battle()
|
|
{
|
|
// Elevator finished decent
|
|
|
|
// spawn lift baddies
|
|
self thread maps\nx_lava_util::spawn_group_by_name( "s1p_lift_bad_spawner" );
|
|
|
|
// Jump lift and move to cover
|
|
thread maps\nx_lava_anim::scaffold_jump_baker();
|
|
thread maps\nx_lava_anim::scaffold_jump_tilman();
|
|
thread maps\nx_lava_anim::scaffold_jump_franklin();
|
|
|
|
flag_set( "s1p_jump_managed" );
|
|
|
|
// lower accuracy until the player jumps
|
|
if( !flag( "s1p_player_jump_lift" ) )
|
|
{
|
|
level.baker thread set_baseaccuracy( .1 );
|
|
level.tilman thread set_baseaccuracy( .1 );
|
|
level.franklin thread set_baseaccuracy( .1 );
|
|
}
|
|
}
|
|
|
|
prep_5th_battle()
|
|
{
|
|
// Player has walked near the jump zone
|
|
|
|
// spawn 6th & 5th bad
|
|
self thread maps\nx_lava_util::spawn_group_by_name( "s1p_6th_bad_spawner" );
|
|
self thread maps\nx_lava_util::spawn_group_by_name( "s1p_5th_bad_spawner" );
|
|
}
|
|
|
|
|
|
start_5th_battle()
|
|
{
|
|
// Player jumps over lift chute
|
|
|
|
// spawn 6th -> 5th jump down
|
|
self thread maps\nx_lava_util::spawn_group_by_name( "s1p_5th_jump_spawner" );
|
|
|
|
// baker and Tilman raise accuracy
|
|
level.baker thread set_baseaccuracy( 1 );
|
|
level.tilman thread set_baseaccuracy( 1 );
|
|
level.franklin thread set_baseaccuracy( 1 );
|
|
|
|
// baker moves on 5th
|
|
flag_wait( "s1p_jump_managed" );
|
|
if( !flag( "s1p_player_jump_5th" ) )
|
|
{
|
|
wait( 1 );
|
|
level.baker set_force_color( "c" );
|
|
}
|
|
}
|
|
|
|
escalate_5th_battle()
|
|
{
|
|
// Player jumps to 5th floor
|
|
|
|
// move Tilman to 5th
|
|
level.tilman set_force_color( "b" );
|
|
|
|
// move baker to 4th (lower accuracy)
|
|
wait( randomFloatRange( 0.2, 0.7 ) );
|
|
level.baker disable_ai_color();
|
|
node = getNode( "s1p_4th_floor_baker", "targetname" );
|
|
level.baker thread follow_path( node );
|
|
level.baker thread set_baseaccuracy( .5 );
|
|
|
|
// wait and spawn 4th enemies
|
|
wait( 2 );
|
|
self thread maps\nx_lava_util::spawn_group_by_name( "s1p_4th_bad_spawner", "targetname", 1.0 );
|
|
}
|
|
|
|
start_4th_battle()
|
|
{
|
|
flag_wait( "s1p_kill_5th_bad" );
|
|
|
|
if( !flag( "s1p_player_jump_4th" ) )
|
|
{
|
|
// spawn 4th enemies
|
|
self thread maps\nx_lava_util::spawn_group_by_name( "s1p_4th_bad_spawner", "targetname", 1.0 );
|
|
|
|
// move Tilman to 4th (lower accuracy)
|
|
level.tilman disable_ai_color();
|
|
node = getNode( "s1p_4th_floor_tilman", "targetname" );
|
|
level.tilman thread follow_path( node );
|
|
level.tilman thread set_baseaccuracy( .5 );
|
|
|
|
// move Franklin to 5th
|
|
wait( randomFloatRange( 0.2, 0.7 ) );
|
|
level.franklin disable_ai_color();
|
|
node = getNode( "s1p_5th_floor_franklin", "targetname" );
|
|
level.franklin thread follow_path( node );
|
|
}
|
|
}
|
|
|
|
escalate_4th_battle()
|
|
{
|
|
// player jumps to 4th floor
|
|
|
|
// spawn 4th enemies
|
|
self thread maps\nx_lava_util::spawn_group_by_name( "s1p_4th_bad_spawner", "targetname" );
|
|
|
|
// move Tilman (4th) and baker(3rd)
|
|
level.tilman set_force_color( "b" );
|
|
level.tilman thread set_baseaccuracy( 1 );
|
|
wait( randomFloatRange( 0.2, 0.7 ) );
|
|
level.baker disable_ai_color();
|
|
node = getNode( "s1p_3rd_floor_baker", "targetname" );
|
|
level.baker thread follow_path( node );
|
|
level.baker thread set_baseaccuracy( .5 );
|
|
|
|
// move Franklin to 5th
|
|
wait( randomFloatRange( 0.2, 0.7 ) );
|
|
level.franklin disable_ai_color();
|
|
node = getNode( "s1p_5th_floor_franklin", "targetname" );
|
|
level.franklin thread follow_path( node );
|
|
}
|
|
|
|
start_3rd_lift()
|
|
{
|
|
// move lift down
|
|
lift = GetEnt( "lavatube_elevator", "targetname" );
|
|
lift_target = GetEnt( "lift_bottom_target", "targetname" );
|
|
lift MoveTo( lift_target.origin, 12.0, 1.0, 2.0 );
|
|
// lift PlaySound( "scn_lava_lift02" );
|
|
|
|
// wait for lift to reach ground floor
|
|
wait( 12 );
|
|
|
|
// spawn enemies
|
|
maps\nx_lava_util::spawn_group_by_name( "s1p_3rd_bad_spawner" );
|
|
|
|
// link enemies
|
|
baddies = get_ai_group_ai( "s1p_3rd_bad" );
|
|
foreach( baddie in baddies )
|
|
{
|
|
baddie linkTo( lift );
|
|
}
|
|
|
|
// raise the lift
|
|
lift_target = GetEnt( "lift_mid_target", "targetname" );
|
|
lift MoveTo( lift_target.origin, 5.0, 1.0, 2.0 );
|
|
|
|
// move out
|
|
wait( 5 );
|
|
baddies = get_ai_group_ai( "s1p_3rd_bad" );
|
|
foreach( baddie in baddies )
|
|
{
|
|
baddie unLink();
|
|
}
|
|
}
|
|
|
|
start_3rd_battle()
|
|
{
|
|
flag_wait( "s1p_kill_4th_bad" );
|
|
|
|
if( !flag( "s1p_player_jump_3rd" ) )
|
|
{
|
|
// Move allies to 3rd
|
|
level.tilman disable_ai_color();
|
|
node = getNode( "s1p_3rd_sneak_tilman", "targetname" );
|
|
level.tilman thread follow_path( node );
|
|
|
|
level.franklin disable_ai_color();
|
|
node = getNode( "s1p_4th_floor_franklin", "targetname" );
|
|
level.franklin thread follow_path( node );
|
|
}
|
|
}
|
|
|
|
escalate_3rd_battle()
|
|
{
|
|
// move tilman
|
|
level.tilman set_force_color( "b" );
|
|
|
|
// move baker (up accuracy)
|
|
level.baker set_force_color( "c" );
|
|
level.baker thread set_baseaccuracy( 1 );
|
|
|
|
// give franklin gun and move
|
|
level.franklin forceUseWeapon( "lunarrifle", "primary" );
|
|
wait( 1 );
|
|
level.franklin set_force_color( "o" );
|
|
}
|
|
|
|
exit_platform_tower()
|
|
{
|
|
// move allies
|
|
level.baker disable_ai_color();
|
|
node = getNode( "s1p_leave_baker", "targetname" );
|
|
level.baker thread follow_path( node );
|
|
level.baker thread radio_dialogue( "lava_kee_station1_keepmoving" ); // dialog: "Keep moving!"
|
|
|
|
level.franklin forceUseWeapon( "lunar_sniper_l3", "primary" );
|
|
level.franklin disable_ai_color();
|
|
node = getNode( "s1p_leave_franklin", "targetname" );
|
|
level.franklin thread follow_path( node );
|
|
|
|
flag_wait( "s1p_exit_jump_tilman" );
|
|
maps\nx_lava_anim::flank_area_jump();
|
|
level.tilman disable_ai_color();
|
|
node = getNode( "s1p_leave_tilman", "targetname" );
|
|
level.tilman thread follow_path( node );
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// Under Tracks *
|
|
// *
|
|
//*******************************************************************
|
|
spawn_tracks_frontline()
|
|
{
|
|
self maps\nx_lava_util::spawn_group_by_name( "s1_tracks_frontline_spawner" );
|
|
|
|
// spawn fronline wave 2 once 1 dude is killed
|
|
waittill_aigroupsentientcount( "s1_tracks_frontline", 3);
|
|
spawn_tracks_frontline_w2();
|
|
}
|
|
|
|
spawn_catwalk()
|
|
{
|
|
self thread maps\nx_lava_util::spawn_group_by_name( "s1_catwalk_sniper_w1" );
|
|
|
|
wait( 6 );
|
|
self thread maps\nx_lava_util::queue_next_flag( "s1_tracks_spawn_ar_roll", "s1_catwalk_sniper", 3);
|
|
}
|
|
|
|
spawn_tracks_frontline_w2()
|
|
{
|
|
if( !flag( "s1_player_jump_tracks" ) )
|
|
{
|
|
self thread maps\nx_lava_util::spawn_group_by_name( "s1_tracks_frontline_w2_spawner" );
|
|
|
|
wait( 4 );
|
|
s1_prompt_jumpdown();
|
|
}
|
|
}
|
|
|
|
spawn_catwalk_w2()
|
|
{
|
|
self thread maps\nx_lava_util::spawn_group_by_name( "s1_catwalk_sniper_w2", "targetname", 2 );
|
|
}
|
|
|
|
s1_prompt_jumpdown()
|
|
{
|
|
// wait till only 7 guys on the floor
|
|
waittill_aigroupsentientcount( "s1_tracks_frontline", 5 );
|
|
|
|
// move franklin
|
|
if( !flag( "s1_player_jump_tracks" ) )
|
|
{
|
|
level.franklin disable_ai_color();
|
|
node = getNode( "s1_tracks_jump_franklin", "targetname" );
|
|
|
|
level.franklin forceUseWeapon( "lunarrifle", "primary" );
|
|
wait( 1 );
|
|
|
|
level.franklin thread follow_path( node );
|
|
}
|
|
|
|
// call for player
|
|
while( !flag( "s1_player_jump_tracks" ) )
|
|
{
|
|
if( RandomInt( 100 ) >= 50 )
|
|
level.baker radio_dialogue( "lava_kee_station1_letsmove" );
|
|
else
|
|
level.baker radio_dialogue( "lava_kee_station1_keepmoving" );
|
|
|
|
wait( RandomIntRange( 4, 8 ) );
|
|
}
|
|
}
|
|
|
|
s1_to_tracks_franklin()
|
|
{
|
|
if( level.franklin.primaryweapon != "lunarrifle" )
|
|
{
|
|
level.franklin forceUseWeapon( "lunarrifle", "primary" );
|
|
}
|
|
|
|
level.franklin set_force_color( "o" );
|
|
}
|
|
|
|
spawn_tracks_jumper()
|
|
{
|
|
// move train to spawn spot
|
|
level.e_train reset_s1_train();
|
|
wait( .2 );
|
|
|
|
// make sure frontline reinforcements are dead / not spawned
|
|
waittill_aigroupsentientcount( "s1_tracks_frontline", 4);
|
|
|
|
// spawn enemies
|
|
self maps\nx_lava_util::spawn_group_by_name( "s1_tracks_jumper_spawner" );
|
|
train_baddies = get_ai_group_ai( "s1_tracks_jumper" );
|
|
|
|
// link baddies
|
|
foreach( baddie in train_baddies )
|
|
{
|
|
baddie linkTo( level.e_train[2].vehicle );
|
|
}
|
|
|
|
// move train into station 1
|
|
level.e_train train_switch_target( "s1_mTrain" );
|
|
maps\nx_lava_util::move_train( level.e_train, 100, 1000, 30 );
|
|
thread maps\nx_lava_fx::cargo_train_rego_fx();
|
|
|
|
// unlink baddies
|
|
level.e_train[0].vehicle waittill( "reached_end_node" );
|
|
foreach( baddie in train_baddies )
|
|
{
|
|
baddie unlink();
|
|
}
|
|
|
|
wait( 2 );
|
|
level.baker thread radio_dialogue( "lava_kee_station1_hostilestrain" ); // dialog: "More hostiles are jumping from that train!"
|
|
|
|
// wait for baddies to jump off train and leave
|
|
wait( 8 );
|
|
level.e_train train_switch_target( "s1_mTrain_mid" );
|
|
thread maps\nx_lava_util::move_train( level.e_train, 100, 40, 1000 );
|
|
thread maps\nx_lava_fx::cargo_train_rego_fx();
|
|
// queue next train passby
|
|
wait( 8 );
|
|
level thread s1_ground_train_passby();
|
|
}
|
|
|
|
spawn_tracks_ar_roll()
|
|
{
|
|
flag_wait( "s1_tracks_spawn_ar_roll" );
|
|
self thread maps\nx_lava_util::spawn_group_by_name( "s1_tracks_ar_roll_spawner", "targetname", 1 );
|
|
|
|
flag_wait( "s1_tracks_backtrack_ar" );
|
|
self maps\nx_lava_util::give_aigroup_new_goal( "s1_tracks_west", "s1_tracks_ar_roll" );
|
|
}
|
|
|
|
s1_ground_train_passby()
|
|
{
|
|
// wait till the player is under the tracks
|
|
flag_wait( "s1_tracks_train_pass" );
|
|
|
|
// move a train down the middle track
|
|
level.e_train train_switch_target( "s1_mTrain_full" );
|
|
maps\nx_lava_util::move_train( level.e_train, 100, 1000, 30 );
|
|
thread maps\nx_lava_fx::cargo_train_rego_fx();
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// Command Center *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
s1_goto_cc()
|
|
{
|
|
// move allies to the command center
|
|
level.baker disable_ai_color();
|
|
node = getNode( "cc_first_baker", "targetname" );
|
|
level.baker thread follow_path( node );
|
|
level.baker thread radio_dialogue( "lava_kee_station1_letsmove" ); // dialog: "Let's move!"
|
|
|
|
level.tilman disable_ai_color();
|
|
node = getNode( "cc_first_tilman", "targetname" );
|
|
level.tilman thread follow_path( node );
|
|
|
|
level.franklin disable_ai_color();
|
|
node = getNode( "cc_first_franklin", "targetname" );
|
|
level.franklin thread follow_path( node );
|
|
}
|
|
|
|
s1_cc_lower_lev()
|
|
{
|
|
// Command Center elevator ents
|
|
cc_lev = GetEnt( "command_center_elevator", "targetname" );
|
|
|
|
// Elevator Entry doors
|
|
cc_lev_enter_r = GetEnt( "command_center_elevator_door_side_r", "script_noteworthy" );
|
|
cc_lev_enter_l = GetEnt( "command_center_elevator_door_side_l", "script_noteworthy" );
|
|
|
|
// Link elevator parts
|
|
cc_lev_linkers = GetEntArray( "command_center_elevator_link", "targetname" );
|
|
foreach( linker in cc_lev_linkers )
|
|
{
|
|
linker LinkTo( cc_lev );
|
|
}
|
|
|
|
// lower the elevator
|
|
cc_lev MoveZ( -264, 8, .05, 1 );
|
|
wait( 8 );
|
|
|
|
// open lev doors & announce ready
|
|
cc_lev_enter_r unlink();
|
|
cc_lev_enter_l unlink();
|
|
flag_set( "s1_cc_lev_ready" );
|
|
}
|
|
|
|
s1_cc_open_lev_use()
|
|
{
|
|
// Wait for player to use lev
|
|
use = GetEnt( "cc_lev_open_trig", "targetname" );
|
|
use sethintstring( &"NX_LAVA_S1_OPEN_CC_LEV" );
|
|
|
|
use waittill( "trigger" );
|
|
use trigger_off();
|
|
|
|
// Wait for elevator to reach the ground floor
|
|
flag_wait( "s1_cc_lev_ready" );
|
|
|
|
// Elevator Entry doors
|
|
cc_lev_enter_r = GetEnt( "command_center_elevator_door_side_r", "script_noteworthy" );
|
|
cc_lev_enter_l = GetEnt( "command_center_elevator_door_side_l", "script_noteworthy" );
|
|
|
|
// First Floor Interior Doors
|
|
cc_lev_first_r = GetEnt( "command_center_door_r", "script_noteworthy" );
|
|
cc_lev_first_l = GetEnt( "command_center_door_l", "script_noteworthy" );
|
|
|
|
// open lev doors
|
|
cc_lev_first_r MoveX( 44, 3, .05, .5 );
|
|
cc_lev_first_l MoveX( -44, 3, .05, .5 );
|
|
wait( 0.5 );
|
|
cc_lev_enter_r MoveX( 44, 3, .05, .5 );
|
|
cc_lev_enter_l MoveX( -44, 3, .05, .5 );
|
|
wait( 2 );
|
|
|
|
// connect paths and move allies
|
|
cc_lev_enter_r ConnectPaths();
|
|
cc_lev_enter_l ConnectPaths();
|
|
cc_lev_first_r ConnectPaths();
|
|
cc_lev_first_l ConnectPaths();
|
|
thread s1_goto_cc_lev();
|
|
|
|
flag_set( "s1_cc_lev_open" );
|
|
}
|
|
|
|
s1_goto_cc_lev()
|
|
{
|
|
// enable CQB
|
|
level.baker enable_cqbwalk();
|
|
level.tilman enable_cqbwalk();
|
|
level.franklin enable_cqbwalk();
|
|
|
|
// move allies to elevator
|
|
level.baker disable_ai_color();
|
|
node = getNode( "cc_lev_baker", "targetname" );
|
|
level.baker thread follow_path( node );
|
|
level.baker thread s1_cc_lev_ready_check( "baker" );
|
|
|
|
level.tilman disable_ai_color();
|
|
node = getNode( "cc_lev_tilman", "targetname" );
|
|
level.tilman thread follow_path( node );
|
|
level.tilman thread s1_cc_lev_ready_check( "tilman" );
|
|
|
|
level.franklin disable_ai_color();
|
|
node = getNode( "cc_lev_franklin", "targetname" );
|
|
level.franklin thread follow_path( node );
|
|
level.franklin thread s1_cc_lev_ready_check( "franklin" );
|
|
}
|
|
|
|
s1_cc_lev_ready_check( name )
|
|
{
|
|
self waittill( "reached_path_end" );
|
|
flag_set( "cc_lev_ready_" + name );
|
|
}
|
|
|
|
s1_cc_use_lev_use()
|
|
{
|
|
// Wait for player to use lev
|
|
use = GetEnt( "cc_lev_first_trig", "targetname" );
|
|
use sethintstring( &"NX_LAVA_S1_USE_CC_LEV" );
|
|
|
|
use waittill( "trigger" );
|
|
use trigger_off();
|
|
flag_set( "s1_cc_lev_use" );
|
|
|
|
// wait for allies
|
|
flag_wait( "cc_lev_ready_baker" );
|
|
flag_wait( "cc_lev_ready_tilman" );
|
|
flag_wait( "cc_lev_ready_franklin" );
|
|
|
|
// Elevator Entry doors
|
|
cc_lev_enter_r = GetEnt( "command_center_elevator_door_side_r", "script_noteworthy" );
|
|
cc_lev_enter_l = GetEnt( "command_center_elevator_door_side_l", "script_noteworthy" );
|
|
|
|
// First Floor Interior Doors
|
|
cc_lev_first_r = GetEnt( "command_center_door_r", "script_noteworthy" );
|
|
cc_lev_first_l = GetEnt( "command_center_door_l", "script_noteworthy" );
|
|
|
|
// close lev doors
|
|
cc_lev_first_r MoveX( -44, 3, .05, .5 );
|
|
cc_lev_first_l MoveX( 44, 3, .05, .5 );
|
|
wait( 0.5 );
|
|
cc_lev_enter_r MoveX( -44, 3, .05, .5 );
|
|
cc_lev_enter_l MoveX( 44, 3, .05, .5 );
|
|
wait( 3 );
|
|
|
|
// move elevator
|
|
self s1_cc_move_lev();
|
|
}
|
|
|
|
s1_cc_move_lev()
|
|
{
|
|
// Command Center elevator ents
|
|
cc_lev = GetEnt( "command_center_elevator", "targetname" );
|
|
|
|
// Elevator Exit doors
|
|
cc_lev_exit_r = GetEnt( "command_center_elevator_door_r", "script_noteworthy" );
|
|
cc_lev_exit_l = GetEnt( "command_center_elevator_door_l", "script_noteworthy" );
|
|
|
|
// Top Floor Interior Doors
|
|
cc_lev_top_r = GetEnt( "command_center_top_door_r", "script_noteworthy" );
|
|
cc_lev_top_l = GetEnt( "command_center_top_door_l", "script_noteworthy" );
|
|
|
|
cc_lev_linkers = GetEntArray( "command_center_elevator_link", "targetname" );
|
|
|
|
// Link elevator parts
|
|
foreach( linker in cc_lev_linkers )
|
|
{
|
|
linker LinkTo( cc_lev );
|
|
}
|
|
|
|
// Pressurize the elevator
|
|
thread audio_pressurize();
|
|
|
|
// Move the elevator
|
|
level.baker linkTo( cc_lev );
|
|
level.tilman linkTo( cc_lev );
|
|
level.franklin linkTo( cc_lev );
|
|
|
|
// actually move the elevator
|
|
cc_lev MoveZ( 264, 10, .05, 1 );
|
|
wait( 10 );
|
|
|
|
// open lev doors
|
|
cc_lev_exit_r unlink();
|
|
cc_lev_exit_l unlink();
|
|
cc_lev_exit_r MoveY( -44, 3, .05, .5 );
|
|
cc_lev_exit_l MoveY( 44, 3, .05, .5 );
|
|
wait( 0.5 );
|
|
cc_lev_top_r MoveY( 44, 3, .05, .5 );
|
|
cc_lev_top_l MoveY( -44, 3, .05, .5 );
|
|
wait( 2 );
|
|
|
|
// unlink allies
|
|
level.baker unlink();
|
|
level.tilman unlink();
|
|
level.franklin unlink();
|
|
|
|
// connect paths
|
|
cc_lev_exit_r ConnectPaths();
|
|
cc_lev_exit_l ConnectPaths();
|
|
cc_lev_top_r ConnectPaths();
|
|
cc_lev_top_l ConnectPaths();
|
|
|
|
// anounce your entrance
|
|
flag_set( "s1c_reached_command_room" );
|
|
}
|
|
|
|
s1_teleport_cc_lev()
|
|
{
|
|
// Command Center elevator ents
|
|
cc_lev = GetEnt( "command_center_elevator", "targetname" );
|
|
cc_lev_target = GetEnt( "s1_cc_lev_start_org", "targetname" );
|
|
|
|
// Elevator Exit doors
|
|
cc_lev_exit_r = GetEnt( "command_center_elevator_door_r", "script_noteworthy" );
|
|
cc_lev_exit_l = GetEnt( "command_center_elevator_door_l", "script_noteworthy" );
|
|
|
|
// Top Floor Interior Doors
|
|
cc_lev_top_r = GetEnt( "command_center_top_door_r", "script_noteworthy" );
|
|
cc_lev_top_l = GetEnt( "command_center_top_door_l", "script_noteworthy" );
|
|
|
|
cc_lev_linkers = GetEntArray( "command_center_elevator_link", "targetname" );
|
|
|
|
// Link elevator parts
|
|
foreach( linker in cc_lev_linkers )
|
|
{
|
|
linker LinkTo( cc_lev );
|
|
}
|
|
|
|
// actually move the elevator
|
|
cc_lev.origin = cc_lev_target.origin;
|
|
}
|
|
|
|
s1_command_room_scene()
|
|
{
|
|
// send allies to their respective locations
|
|
thread maps\nx_lava_anim::camren_sacrific_idle();
|
|
node = getNode( "s1c_open_airlock_baker", "targetname" );
|
|
level.baker thread follow_path( node );
|
|
node = getNode( "s1c_open_airlock_franklin", "targetname" );
|
|
level.franklin thread follow_path( node );
|
|
|
|
thread command_room_scene_dialog();
|
|
|
|
// wait for baker to get to airlock doors
|
|
level.baker waittill( "reached_path_end" );
|
|
|
|
flag_wait( "cc_open_airlock" );
|
|
|
|
// get airlock doors
|
|
right_door = GetEnt( "command_center_airlock_door_interior_r", "script_noteworthy" );
|
|
left_door = GetEnt( "command_center_airlock_door_interior_l", "script_noteworthy" );
|
|
|
|
// open airlock doors
|
|
right_door MoveX( -36, 3, .05, .5 );
|
|
left_door MoveX( 36, 3, .05, .5 );
|
|
wait( 3 );
|
|
right_door ConnectPaths();
|
|
left_door ConnectPaths();
|
|
}
|
|
|
|
s1c_goto_airlock()
|
|
{
|
|
// move allies to the command center
|
|
level.baker disable_ai_color();
|
|
node = getNode( "s1c_airlock_baker", "targetname" );
|
|
level.baker thread follow_path( node );
|
|
|
|
level.franklin disable_ai_color();
|
|
node = getNode( "s1c_airlock_franklin", "targetname" );
|
|
level.franklin thread follow_path( node );
|
|
|
|
// close doors during vignette
|
|
flag_wait( "s1c_player_in_airlock" );
|
|
wait( 1 );
|
|
|
|
// get airlock doors
|
|
right_door = GetEnt( "command_center_airlock_door_interior_r", "script_noteworthy" );
|
|
left_door = GetEnt( "command_center_airlock_door_interior_l", "script_noteworthy" );
|
|
|
|
// close doors
|
|
right_door MoveX( 36, 3, .05, .5 );
|
|
left_door MoveX( -36, 3, .05, .5 );
|
|
|
|
thread audio_depressurize();
|
|
|
|
}
|
|
|
|
s1c_leave_airlock()
|
|
{
|
|
// move baker to door
|
|
node = getNode( "s1c_leave_airlock_baker", "targetname" );
|
|
level.baker thread follow_path( node );
|
|
|
|
level.baker waittill( "reached_path_end" );
|
|
|
|
// get airlock doors
|
|
right_door = GetEnt( "command_center_airlock_door_exterior_r", "script_noteworthy" );
|
|
left_door = GetEnt( "command_center_airlock_door_exterior_l", "script_noteworthy" );
|
|
|
|
// open airlock doors
|
|
right_door MoveX( 28, 3, .05, .5 );
|
|
left_door MoveX( -28, 3, .05, .5 );
|
|
wait( 3 );
|
|
right_door ConnectPaths();
|
|
left_door ConnectPaths();
|
|
|
|
flag_set( "s1_command_train_begin" );
|
|
}
|
|
|
|
command_room_scene_dialog()
|
|
{
|
|
wait( 1 );
|
|
level.tilman radio_dialogue( "lava_cam_st1cmd_clear" ); // dialog: "Clear"
|
|
wait( 0.5 );
|
|
level.baker radio_dialogue( "lava_bak_st1cmd_clear" ); // dialog: "Clear"
|
|
|
|
wait( 1.5 );
|
|
level.baker radio_dialogue( "lava_bak_st1cmd_makeitquick" ); // dialog: "make it quick. Snakes'll be here any minute"
|
|
wait( 0.5 );
|
|
level.tilman radio_dialogue( "lava_cam_st1cmd_camera3" ); // dialog: "Check it out, boss. Camera three."
|
|
|
|
wait( 1 );
|
|
level.baker radio_dialogue( "lava_bak_st1cmd_warhead" ); // dialog: "He's still carrying the warhead"
|
|
level.tilman radio_dialogue( "lava_cam_st1cmd_fewklicks" ); // dialog: "That station's a few clicks from here."
|
|
|
|
wait( 0.5 );
|
|
level.baker radio_dialogue( "lava_bak_st1cmd_wtfkeene" ); // dialog: What the fuck are you up to, Keene?"
|
|
|
|
wait( 1.5 );
|
|
level.tilman radio_dialogue( "lava_cam_st1cmd_inluck" ); // dialog: "We're in luck. There's another train headed for this station. I should be able to reroute it from here."
|
|
level.baker radio_dialogue( "lava_bak_st1cmd_eta" ); // dialog: "What's the ETA on the train?"
|
|
level.tilman radio_dialogue( "lava_cam_st1cmd_60sec" ); // dialog: "60 seconds, give or take."
|
|
level.baker radio_dialogue( "lava_bak_st1cmd_notgoingtomakeit" ); // dialog: "We're not going to make it."
|
|
|
|
// Queue to open the airlock
|
|
flag_set( "cc_open_airlock" );
|
|
|
|
level.tilman radio_dialogue( "lava_cam_st1cmd_stayandprogram" ); // dialog: "You will. If you leave now. I'll stay here and program the new route."
|
|
|
|
wait( 1.0 );
|
|
level.tilman radio_dialogue( "lava_cam_st1cmd_sortkeene" ); // dialog: "Just promise me you'll sort Keene. Slot that two-faced bastard for me... then finish this."
|
|
|
|
wait( 1 );
|
|
level.baker radio_dialogue( "lava_bak_st1cmd_seeyoucam" ); // dialog: "See you around, Cameron"
|
|
wait( 0.5 );
|
|
level.baker radio_dialogue( "lava_bak_st1cmd_charliemike" ); // dialog: "We're Charlie Mike."
|
|
wait( 0.5 );
|
|
level.tilman radio_dialogue( "lava_bak_st1cmd_cheerupmate" ); // dialog: "Cheer up, mate. I'll save you a bar stool in hell."
|
|
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// ALLIES & ENEMIES *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
setup_spawners()
|
|
{
|
|
spawners = GetEntArray( "s1p_enemy_spawner", "script_noteworthy" );
|
|
array_thread( spawners, ::add_spawn_function, maps\nx_lava_util::l3_enemy_common );
|
|
|
|
spawners = GetEntArray( "s1_enemy_spawner", "script_noteworthy" );
|
|
array_thread( spawners, ::add_spawn_function, maps\nx_lava_util::l3_enemy_common );
|
|
}
|
|
|
|
s1_setup_tracks_allies()
|
|
{
|
|
level.baker set_force_color( "c" );
|
|
level.tilman set_force_color( "b" );
|
|
level.franklin set_force_color( "o" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// TRAINS *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
// function takes a train with base name [t_name] and returns a train array
|
|
// in max your train should be named as such:
|
|
// car models: t_name_0, t_name_1, etc...
|
|
// vehicles: t_name_v0, t_name_v1, etc...
|
|
setup_train_by_name( t_name )
|
|
{
|
|
ta = []; // train array
|
|
temp_train = getEnt( t_name + "_0", "targetname" );
|
|
|
|
// build train
|
|
while( IsDefined( temp_train ) )
|
|
{
|
|
ta[ ta.size ] = [ t_name + "_" + string( ta.size ), t_name + "_v" + string( ta.size ) ];
|
|
|
|
temp_train = getEnt( t_name + "_" + string( ta.size ), "targetname" );
|
|
}
|
|
|
|
// send the train back
|
|
return maps\nx_lava_util::setup_train_platforms( ta );
|
|
}
|
|
|
|
// take a train and switch what nodes the vehicle targets
|
|
// new target nodes should be named: target_name_start0, target_name_start1, etc...
|
|
train_switch_target( target_name )
|
|
{
|
|
for( i=0; i < self.size; i++)
|
|
{
|
|
new_target = target_name + "_start" + string( i );
|
|
self[i].vehicle.target = new_target;
|
|
}
|
|
}
|
|
|
|
reset_s1_train()
|
|
{
|
|
self train_switch_target( "s1_train" );
|
|
maps\nx_lava_util::move_train( self, 10, 10, 10 );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// AUDIO *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
audio_train_pass()
|
|
{
|
|
|
|
train_pass = spawn( "sound_emitter", ( -52273, -6772, -4086 ) );
|
|
|
|
while ( !flag( "s1_station_complete" ) )
|
|
{
|
|
train_pass PlaySound( "emt_lava_trans_pass" ); //play sound on ent
|
|
wait 4.5;
|
|
train_pass moveto( ( -52396, -10372, -4086 ), 5.0, .5, .5 );
|
|
wait 6.5;
|
|
train_pass moveto( ( -51730, -11871, -4107 ), 1.0, .5, .5 );
|
|
wait( randomFloatRange( 2, 4.5 ) );
|
|
train_pass PlaySound( "emt_lava_trans_pass" ); //play sound on ent
|
|
wait 4.5;
|
|
train_pass moveto( ( -51662, -3000, -4107 ), 5.0, .5, .5 );
|
|
wait 6.5;
|
|
train_pass moveto( ( -52273, -6772, -4086 ), 1.0, .5, .5 );
|
|
wait( randomFloatRange( 2, 4.5 ) );
|
|
}
|
|
}
|
|
|
|
audio_pressurize()
|
|
{
|
|
|
|
level._player playsound( "nx_lunar_pressurize" );
|
|
|
|
wait 1.5;
|
|
|
|
thread maps\_utility::set_ambient( "nx_lava_pressurized" );
|
|
|
|
level._player setchannelvolumes( "snd_channelvolprio_level", "nx_lava_pressurized", 5.5 );
|
|
|
|
wait 3;
|
|
|
|
level._player_helmet_loop = "amb_space_suit_null";
|
|
|
|
}
|
|
|
|
audio_depressurize()
|
|
{
|
|
|
|
level._player playsound("nx_lunar_depressurize");
|
|
|
|
wait 0.5;
|
|
|
|
thread maps\_utility::set_ambient( "nx_lunar_exterior_depress" );
|
|
|
|
level._player deactivatechannelvolumes( "snd_channelvolprio_pain", 5.5 );
|
|
|
|
wait 0.5;
|
|
|
|
level._player_helmet_loop = "amb_space_suit_amb";
|
|
|
|
} |