mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-23 01:25:52 +00:00
1314 lines
44 KiB
Plaintext
1314 lines
44 KiB
Plaintext
//****************************************************************************
|
||
// **
|
||
// Confidential - (C) Activision Publishing, Inc. 2010 **
|
||
// **
|
||
//****************************************************************************
|
||
// **
|
||
// Module: Lava Train 2 **
|
||
// **
|
||
// Created: 07/25/10 - Travis Chen (trchen x 4143) **
|
||
// **
|
||
//****************************************************************************
|
||
|
||
#include maps\_utility;
|
||
#include common_scripts\utility;
|
||
#include maps\_vehicle;
|
||
#include maps\_anim;
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
section_main()
|
||
{
|
||
maps\_ec_lunar_turret::turret_vehicle_anims();
|
||
}
|
||
|
||
TRAIN_2_SPEED_TURRET = 120;
|
||
TRAIN_2_SPEED_TURRET_TUNNEL = 120;
|
||
TRAIN_2_SPEED_TURRET_SLOWER = 125;
|
||
TRAIN_2_SPEED_SKIMMER = 115;
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
section_precache()
|
||
{
|
||
PreCacheModel( "mil_frame_charge_obj" );
|
||
PreCacheTurret( "nx_chinese_lgv_turret_skimmer" );
|
||
}
|
||
|
||
section_flag_inits()
|
||
{
|
||
flag_init( "vignette_turret_battle_tanker_explosion" );
|
||
flag_init( "vignette_turret_battle_crate_explosion" );
|
||
flag_init( "vignette_turret_battle_rocket_engine_explosion" );
|
||
flag_init( "vignette_turret_battle_rocket_engine_tanks_explosion" );
|
||
flag_init( "vignette_turret_battle_tank_near_hit" );
|
||
flag_init( "vignette_turret_battle_train_derail" );
|
||
flag_init( "vignette_turret_battle_train_derail_done" );
|
||
flag_init( "vignette_turret_battle_train_derail_02" );
|
||
flag_init( "vignette_turret_battle_train_derail_02_done" );
|
||
|
||
flag_init( "train_3_derail" );
|
||
flag_init( "skimmer_start_vo" );
|
||
flag_init( "start_skimmer_fight" );
|
||
flag_init( "skimmers_spawned" );
|
||
flag_init( "skimmers_wave_1_spawned" );
|
||
flag_init( "skimmers_wave_2_spawned" );
|
||
|
||
flag_init( "train_3_car_4_a" );
|
||
flag_init( "train_3_car_4_b" );
|
||
flag_init( "train_3_car_3_a" );
|
||
flag_init( "train_3_car_3_b" );
|
||
flag_init( "train_3_car_2" );
|
||
flag_init( "train_3_car_1" );
|
||
flag_init( "train_3_move_to_car_1" );
|
||
flag_init( "train_3_aim_low" );
|
||
|
||
flag_init( "train_2_player_left_tunnel_enemy_movement_a" );
|
||
flag_init( "train_2_player_left_tunnel_enemy_movement_b" );
|
||
|
||
flag_init( "car_4_front_explosion" );
|
||
flag_init( "car_4_middle_explosion" );
|
||
flag_init( "car_4_rear_explosion" );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
train_sounds()
|
||
{
|
||
|
||
flag_wait( "player_on_turret" );
|
||
wait 10.5;
|
||
audio_train_groan_01 = spawn( "sound_emitter", (50777, 68761, -4071) );
|
||
audio_train_groan_01 playsound ("nx_lava_enemy_train_groan_01");
|
||
wait 5.5;
|
||
level._player playsound("nx_lava_enemy_train_groan_02");
|
||
}
|
||
|
||
train_2_vo()
|
||
{
|
||
flag_wait( "player_on_turret" );
|
||
radio_dialogue( "lava_bak_tr2turr_lightemup" );
|
||
radio_dialogue( "lava_bak_tr2turr_takeoutguncrews" );
|
||
|
||
flag_wait( "train_3_car_4_a" );
|
||
radio_dialogue( "lava_bak_tr2turr_keepfiring");
|
||
flag_wait( "train_3_car_4_b" );
|
||
radio_dialogue( "lava_bak_tr2turr_hittanks" );
|
||
|
||
flag_wait( "train_2_player_left_tunnel" );
|
||
radio_dialogue( "lava_bak_tr2turr_trainat3oclock" );
|
||
|
||
flag_wait( "train_3_car_3_a" );
|
||
radio_dialogue( "lava_bak_tr2turr_teartrainapart" );
|
||
flag_wait( "train_3_car_3_b" );
|
||
radio_dialogue( "lava_bak_tr2turr_targeto2tanks" );
|
||
|
||
flag_wait( "train_3_car_2" );
|
||
wait( 3.0 );
|
||
radio_dialogue( "lava_bak_tr2turr_tangosonplatform" );
|
||
|
||
flag_wait( "train_3_car_1" );
|
||
wait( 0.5 );
|
||
flag_set( "train_3_aim_low" );
|
||
radio_dialogue( "lava_bak_tr2turr_aimlow" );
|
||
radio_dialogue( "lava_bak_tr2turr_knockoffrails" );
|
||
|
||
flag_wait( "train_3_derail" );
|
||
wait( 3.0 );
|
||
radio_dialogue( "lava_bak_tr2turr_ceasefire" );
|
||
|
||
wait( 2 );
|
||
flag_set( "skimmer_start_vo" );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
section_objectives( objective_num )
|
||
{
|
||
// flag_wait( "vignette_turret_battle_tanker_explosion" );
|
||
//
|
||
// // Add objective
|
||
// waypoint = getEnt( "objective_coupling", "targetname" );
|
||
// Objective_Add( objective_num, "current", &"NX_LAVA_OBJECTIVE_TURRET_FEET" );
|
||
// Objective_OnEntity( objective_num, waypoint );
|
||
//
|
||
// flag_wait( "vignette_turret_battle_train_derail_02" );
|
||
//
|
||
// // Clear Objective
|
||
// objective_complete( objective_num );
|
||
// objective_num++;
|
||
|
||
flag_wait( "train_3_aim_low" );
|
||
|
||
// Add objective
|
||
waypoint = getEnt( "objective_turret_feet", "targetname" );
|
||
Objective_Add( objective_num, "current", &"NX_LAVA_OBJECTIVE_TURRET_FEET" );
|
||
Objective_OnEntity( objective_num, waypoint );
|
||
|
||
flag_wait( "train_3_derail" );
|
||
|
||
// Clear Objective
|
||
objective_complete( objective_num );
|
||
objective_num++;
|
||
|
||
return objective_num;
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
train_2_start()
|
||
{
|
||
// Setup Train 2 Turret vehicle and Init player start location
|
||
maps\nx_lava_util::setup_train_vehicles( level.train_turret, false );
|
||
maps\nx_lava_util::show_hide_train( level.train_turret, "show" );
|
||
|
||
// Used for player_gets_on_turret
|
||
level.train_2_jump_to = true;
|
||
|
||
level thread maps\nx_lava_util::start_fake_train_movement( false );
|
||
|
||
//adding in headlights for train 2 :apm
|
||
level.train_turret[4].vehicle maps\nx_lava_fx::set_train_headlight_fx_on();
|
||
|
||
flag_set( "player_on_turret_anim_complete" );
|
||
}
|
||
|
||
train_2()
|
||
{
|
||
level thread autosave_now();
|
||
|
||
// VO
|
||
level thread train_2_vo();
|
||
|
||
level thread train_sounds();
|
||
|
||
// Turret
|
||
level thread player_gets_on_turret();
|
||
level thread train_2_ally_thread();
|
||
|
||
// Move train
|
||
level thread train_2_setup();
|
||
level thread train_2_move();
|
||
|
||
// Wait for train 3 start
|
||
level thread train_3_setup();
|
||
level thread train_3_cleanup();
|
||
level thread train_3_move();
|
||
level thread train_3_states();
|
||
|
||
}
|
||
|
||
player_gets_on_turret( angle_adjust )
|
||
{
|
||
// Give the player the turret.
|
||
turret = GetEnt( "turret_player", "targetname" );
|
||
|
||
// Force on turret if jump to
|
||
if( ( IsDefined( level.train_2_jump_to ) && level.train_2_jump_to == true ) )
|
||
{
|
||
turret MakeUsable();
|
||
turret SetMode( "manual" );
|
||
turret UseBy( level._player );
|
||
turret MakeUnusable();
|
||
angle_adjust = 0;
|
||
}
|
||
|
||
// Lock the player to the turret.
|
||
flag_wait( "player_on_turret_anim_complete" );
|
||
level.player_turret = turret;
|
||
if( IsDefined( angle_adjust ))
|
||
{
|
||
level._player SetPlayerAngles( ( 0, turret.angles[ 1 ] - angle_adjust, 0 ) );
|
||
}
|
||
level._player PlayerLinkToDelta( turret, undefined, 1.0, 360, 360, 45, 18, true );//tagCC<NOTE>: Restrict player view arcs so they cant shoot themselves.
|
||
|
||
|
||
// Enable turret angles
|
||
level._player PlayerLinkedTurretAnglesEnable();
|
||
level._player DisableTurretDismount();
|
||
|
||
// Turret flag
|
||
flag_set( "player_on_turret" );
|
||
|
||
// Show special hand model for this turret.
|
||
turret thread maps\_ec_lunar_turret::animate_player_hands();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
train_2_ally_thread()
|
||
{
|
||
platform_ally_spawners = GetEntArray( "train_2_ally_2", "targetname" );
|
||
array_thread( platform_ally_spawners, ::add_spawn_function, ::train_2_tillman_spawn_func );
|
||
array_thread( platform_ally_spawners, ::spawn_ai );
|
||
}
|
||
|
||
train_2_tillman_spawn_func()
|
||
{
|
||
self endon( "death" );
|
||
|
||
self enable_cqbwalk();
|
||
self maps\nx_lava_util::ally_protect();
|
||
|
||
self thread magic_bullet_shield();
|
||
self.baseaccuracy = 0.25;
|
||
|
||
// Give tillman the turret.
|
||
turret = level.train_turret[4].vehicle.mgturret[0];
|
||
turret.closeEnoughAimDegrees = 45;
|
||
turret SetAISpread( 20 );
|
||
level.train_turret[4].vehicle thread maps\_vehicle_aianim::guy_man_turret( self, 0, undefined ); //assuming only position 0.
|
||
|
||
flag_wait( "skimmers_spawned" );
|
||
|
||
thread audio_ambience_change();
|
||
|
||
// setup turret & tilman
|
||
turret SetBottomArc( 10 );
|
||
self.baseaccuracy = 0.0;
|
||
|
||
|
||
// inside the tunnel before final derail
|
||
flag_wait( "final_derail_tunnel_enter" );
|
||
turret SetLeftArc( 25 );
|
||
turret SetRightArc( 25 );
|
||
}
|
||
|
||
audio_ambience_change()
|
||
{
|
||
wait 3.2;
|
||
level._player playsound("elm_lava_cave_whoosh");
|
||
level.amb_train_ext setsoundvolume( "amb_lava_train_ext", -5, 1 );
|
||
level.amb_train_int setsoundvolume( "amb_lava_train_int", -100, 1.5 );
|
||
|
||
}
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
train_2_setup()
|
||
{
|
||
}
|
||
|
||
train_2_move()
|
||
{
|
||
// Move front vehicle
|
||
if( ( IsDefined( level.train_2_jump_to ) && level.train_2_jump_to == true ) )
|
||
{
|
||
level.train_turret maps\nx_lava_util::train_switch_target( "train_2_front_t2t");
|
||
thread maps\nx_lava_util::move_train( level.train_turret, TRAIN_2_SPEED_TURRET, 10000, 10 );
|
||
level.player_train_speed = TRAIN_2_SPEED_TURRET;
|
||
}
|
||
else
|
||
{
|
||
thread maps\nx_lava_util::set_train_speed( level.train_turret, TRAIN_2_SPEED_TURRET, 10000, 10 );
|
||
level.player_train_speed = TRAIN_2_SPEED_TURRET;
|
||
}
|
||
|
||
flag_wait( "train_2_player_in_tunnel" );
|
||
thread maps\nx_lava_util::set_train_speed( level.train_turret, TRAIN_2_SPEED_TURRET_TUNNEL, 100, 100 );
|
||
level.player_train_speed = TRAIN_2_SPEED_TURRET_TUNNEL;
|
||
|
||
// Wait for decel
|
||
trigger_wait( "train_2_decel_1", "targetname" );
|
||
thread maps\nx_lava_util::set_train_speed( level.train_turret, TRAIN_2_SPEED_TURRET_SLOWER, 100, 100 );
|
||
level.player_train_speed = TRAIN_2_SPEED_TURRET_SLOWER;
|
||
|
||
// Wait for decel
|
||
trigger_wait( "train_2_decel_2", "targetname" );
|
||
thread maps\nx_lava_util::set_train_speed( level.train_turret, TRAIN_2_SPEED_SKIMMER, 100, 100 );
|
||
level.player_train_speed = TRAIN_2_SPEED_SKIMMER;
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
train_3_setup()
|
||
{
|
||
train_name_array = [ [ "train_3_car_1", "train_3_car_1_vehicle" ],
|
||
[ "train_3_car_2", "train_3_car_2_vehicle" ],
|
||
[ "train_3_car_3", "train_3_car_3_vehicle" ],
|
||
[ "train_3_car_4", "train_3_car_4_vehicle" ],
|
||
[ "train_3_car_5", "train_3_car_5_vehicle" ] ];
|
||
|
||
if( !IsDefined( level.train_3 ) )
|
||
{
|
||
level.train_3 = maps\nx_lava_util::setup_train( train_name_array, false );
|
||
|
||
// Thread vignettes
|
||
level thread train_3_vignettes();
|
||
}
|
||
|
||
if( ( IsDefined( level.train_2_jump_to ) && level.train_2_jump_to ) ||
|
||
( IsDefined( level.train_interior_front_jump_to ) && level.train_interior_front_jump_to ) )
|
||
{
|
||
// Set train start point on train_3 cars
|
||
foreach( i, train in level.train_3 )
|
||
{
|
||
train_3_vehicle = level.train_3[i].vehicle;
|
||
start_point_name = "train_2_car_" + ( i + 1 ) + "_debug_start";
|
||
train_3_vehicle.target = start_point_name;
|
||
}
|
||
}
|
||
|
||
wait( 0.05 );
|
||
|
||
//SFX for enemy train
|
||
if ( !flag( "train3_sfx_on" ) )
|
||
{
|
||
level.train_sfxarray = GetEntArray( "train_sfx_node", "targetname");
|
||
//level.train_sfxarray2 = GetEntArray( "train_sfx_node", "targetname");
|
||
level.train_3[0].vehicle thread maps\_vehicle::play_train_line_sfx( level.train_sfxarray, "nx_lava_enemy_train" );
|
||
level.train_3[0].vehicle thread maps\_vehicle::play_train_line_sfx( level.train_sfxarray, "nx_lava_enemy_train_squeaks" );
|
||
flag_set( "train3_sfx_on" );
|
||
}
|
||
|
||
// Setup the locked combat for the enemies
|
||
train_3_setup_locked_combat_nodes();
|
||
level thread maps\nx_lava_util::platform_enemy_setup_locked_combat( level.train_3[0], "train_3_car_1_enemy" );
|
||
level thread maps\nx_lava_util::platform_enemy_setup_locked_combat( level.train_3[1], "train_3_car_2_enemy" );
|
||
level thread maps\nx_lava_util::platform_enemy_setup_locked_combat( level.train_3[1], "train_3_car_2_enemy_move_on_flag_1", "train_2_stop", maps\nx_lava_util::platform_enemy_move_on_flag_protect, "train_3_car_2" );
|
||
level thread maps\nx_lava_util::platform_enemy_setup_locked_combat( level.train_3[2], "train_3_car_3_enemy" );
|
||
level thread maps\nx_lava_util::platform_enemy_setup_locked_combat( level.train_3[2], "train_3_car_3_enemy_move_on_flag_1", "train_2_stop", maps\nx_lava_util::platform_enemy_move_on_flag_protect, "train_2_player_left_tunnel_enemy_movement_a" );
|
||
level thread maps\nx_lava_util::platform_enemy_setup_locked_combat( level.train_3[2], "train_3_car_3_enemy_move_on_flag_2", "train_2_stop", maps\nx_lava_util::platform_enemy_move_on_flag_protect, "train_2_player_left_tunnel_enemy_movement_b" );
|
||
level thread maps\nx_lava_util::platform_enemy_setup_locked_combat( level.train_3[2], "train_3_car_3_enemy_move_on_flag_3", "train_2_stop", maps\nx_lava_util::platform_enemy_move_on_flag_protect, "train_2_player_left_tunnel_enemy_movement_a" );
|
||
level thread train_3_car_3_enemy_movement_thread();
|
||
|
||
level thread maps\nx_lava_util::platform_enemy_setup_locked_combat( level.train_3[3], "train_3_car_4_enemy" );
|
||
level thread maps\nx_lava_util::platform_enemy_setup_locked_combat( level.train_3[3], "train_3_car_4_enemy_move_on_flag_1", "train_2_stop", maps\nx_lava_util::platform_enemy_move_on_flag_protect_short, "train_3_car_4_a" );
|
||
level thread maps\nx_lava_util::platform_enemy_setup_locked_combat( level.train_3[3], "train_3_car_4_enemy_move_on_flag_2", "train_2_stop", maps\nx_lava_util::platform_enemy_move_on_flag_protect_short, "train_3_car_4_a" );
|
||
level thread maps\nx_lava_util::platform_enemy_setup_locked_combat( level.train_3[4], "train_3_car_5_enemy" );
|
||
|
||
//adding in some fx for the headlight train 3: apm
|
||
level.train_3[0].vehicle maps\nx_lava_fx::set_train_headlight_fx_on();
|
||
//maps\nx_lava_fx::set_train3_accentlight_fx_on();
|
||
}
|
||
|
||
train_3_car_3_enemy_movement_thread()
|
||
{
|
||
flag_wait( "train_2_player_left_tunnel" );
|
||
flag_set( "train_2_player_left_tunnel_enemy_movement_a" );
|
||
wait( 2.0 );
|
||
flag_set( "train_2_player_left_tunnel_enemy_movement_b" );
|
||
}
|
||
|
||
train_3_cleanup()
|
||
{
|
||
flag_wait( "vignette_turret_battle_train_derail_done" );
|
||
|
||
//_cleanup the headlight fx train 3: apm
|
||
level.train_3[0].vehicle maps\nx_lava_fx::set_train_headlight_fx_off();
|
||
|
||
// make sure train 3 enemies are dead
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_3_rocket_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_3_tanks_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_4_enemy" );
|
||
//maps\nx_lava_util::delete_entire_ai_group( "train_3_car_5_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_1_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_2_enemy" );
|
||
ClearAllCorpses();
|
||
|
||
maps\nx_lava_util::delete_train( level.train_3 );
|
||
}
|
||
|
||
train_3_move()
|
||
{
|
||
if( IsDefined( level.train_2_jump_to ) && level.train_2_jump_to )
|
||
{
|
||
maps\nx_lava_util::move_train( level.train_3, TRAIN_2_SPEED_TURRET, 10000, 10 );
|
||
}
|
||
else
|
||
{
|
||
maps\nx_lava_util::set_train_speed( level.train_3, TRAIN_2_SPEED_TURRET + 10, 10000, 10000 );
|
||
}
|
||
|
||
flag_wait( "train_2_player_approach_tunnel" );
|
||
|
||
level.train_3[0].vehicle maps\nx_lava_util::stop_follow_player();
|
||
|
||
maps\nx_lava_util::set_train_speed( level.train_3, TRAIN_2_SPEED_TURRET + 30, 100, 10 );
|
||
|
||
flag_wait( "train_2_player_in_tunnel" );
|
||
|
||
maps\nx_lava_util::set_train_speed( level.train_3, TRAIN_2_SPEED_TURRET, 1000, 1000 );
|
||
}
|
||
|
||
train_3_states()
|
||
{
|
||
// Car 5, Explosion
|
||
{
|
||
// tagTC<note> commented out some logic here, add back once we have a vignette
|
||
train_3_follow_player( 4, "follow_point_1" );
|
||
level thread car_5_thread();
|
||
waittill_2_of_3_flags( "car_4_front_explosion", "car_4_middle_explosion", "car_4_rear_explosion" );
|
||
radio_dialogue( "lava_bak_tr2turr_goodkill" );
|
||
}
|
||
|
||
// Car 4, Explosion
|
||
{
|
||
train_3_follow_player( 3, "follow_point_1" );
|
||
flag_set( "train_3_car_4_a" );
|
||
level thread car_4_thread();
|
||
flag_wait( "vignette_turret_battle_tanker_explosion" );
|
||
}
|
||
|
||
// Car 3, Explosion
|
||
{
|
||
flag_wait( "train_2_player_in_tunnel" );
|
||
train_3_follow_player( 2, "follow_point_1" );
|
||
flag_set( "train_3_car_3_a" );
|
||
level thread car_3_thread();
|
||
flag_wait_all( "vignette_turret_battle_rocket_engine_explosion", "vignette_turret_battle_rocket_engine_tanks_explosion" );
|
||
}
|
||
|
||
// Car 2, Derail
|
||
/* {
|
||
//train_3_follow_player( 1, "derail_follow_point" );
|
||
wait( 1.0 );
|
||
turret_battle_train_derail_02();
|
||
flag_wait( "vignette_turret_battle_train_derail_02" );
|
||
level thread autosave_now();
|
||
}
|
||
*/
|
||
|
||
// Car 2
|
||
{
|
||
train_3_follow_player( 1 );
|
||
flag_set( "train_3_car_2" );
|
||
level thread car_2_thread();
|
||
flag_wait( "train_3_move_to_car_1" );
|
||
}
|
||
|
||
// Car 1, Derail
|
||
{
|
||
train_3_follow_player( 0 );
|
||
flag_set( "train_3_car_1" );
|
||
// level thread turret_battle_train_derail();
|
||
flag_wait( "train_3_derail" );
|
||
}
|
||
|
||
// REFACTOR
|
||
flag_wait( "train_3_derail" );
|
||
foreach( train in level.train_3 )
|
||
{
|
||
train maps\_nx_moving_platform::platform_hide();
|
||
train.vehicle hide();
|
||
}
|
||
|
||
flag_wait( "vignette_turret_battle_train_derail_done" );
|
||
level thread autosave_now();
|
||
}
|
||
|
||
waittill_2_of_3_flags( flag_1, flag_2, flag_3 )
|
||
{
|
||
while( 1 )
|
||
{
|
||
num_flags = 0;
|
||
if( flag( flag_1 ) )
|
||
{
|
||
num_flags++;
|
||
}
|
||
if( flag( flag_2 ) )
|
||
{
|
||
num_flags++;
|
||
}
|
||
if( flag( flag_3 ) )
|
||
{
|
||
num_flags++;
|
||
}
|
||
|
||
if( num_flags >= 2 )
|
||
{
|
||
break;
|
||
}
|
||
|
||
wait( 0.05 );
|
||
}
|
||
}
|
||
|
||
car_5_thread()
|
||
{
|
||
level endon( "train_3_car_4_a" );
|
||
|
||
waittill_either( "car_4_rear_explosion", "car_4_middle_explosion" );
|
||
train_3_follow_player( 4, "follow_point_2" );
|
||
}
|
||
|
||
car_4_thread()
|
||
{
|
||
level endon( "vignette_turret_battle_tanker_explosion" );
|
||
|
||
flag_wait( "vignette_turret_battle_crate_explosion" );
|
||
train_3_follow_player( 3, "follow_point_2" );
|
||
flag_set( "train_3_car_4_b" );
|
||
}
|
||
|
||
car_3_thread()
|
||
{
|
||
level endon( "vignette_turret_battle_rocket_engine_tanks_explosion" );
|
||
|
||
flag_wait( "vignette_turret_battle_rocket_engine_explosion" );
|
||
train_3_follow_player( 2, "follow_point_2" );
|
||
flag_set( "train_3_car_3_b" );
|
||
}
|
||
|
||
car_2_thread()
|
||
{
|
||
level thread car_2_thread_cleared();
|
||
level thread car_2_thread_straightaway();
|
||
}
|
||
|
||
car_2_thread_cleared()
|
||
{
|
||
waittill_aigroupcleared( "train_3_car_2_enemy" );
|
||
flag_set( "train_3_move_to_car_1" );
|
||
}
|
||
|
||
car_2_thread_straightaway()
|
||
{
|
||
flag_wait( "train_2_straightaway" );
|
||
flag_set( "train_3_move_to_car_1" );
|
||
}
|
||
|
||
set_flag_if_flag( set_flag, if_flag )
|
||
{
|
||
flag_wait( if_flag );
|
||
flag_set( set_flag );
|
||
}
|
||
|
||
train_3_follow_player( car, follow_point_name )
|
||
{
|
||
if( !IsDefined( follow_point_name ) )
|
||
{
|
||
follow_point_name = "center_link_point";
|
||
}
|
||
|
||
assert( IsDefined( level.player_train_speed ) );
|
||
level.train_3[0].vehicle maps\nx_lava_util::stop_follow_player();
|
||
follow_point = level.train_3[car] maps\_nx_moving_platform::get_platform_ent( follow_point_name );
|
||
level.train_3[0].vehicle thread maps\nx_lava_util::vehicle_array_follow_player( level.train_3, follow_point, 0.1, 0.2, 0.2, 20, level.player_train_speed );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
train_3_vignettes()
|
||
{
|
||
level thread car_4_front_explosion();
|
||
level thread car_4_middle_explosion();
|
||
level thread car_4_rear_explosion();
|
||
|
||
level thread turret_battle_tanker_explosion();
|
||
level thread turret_battle_crate_explosion();
|
||
level thread turret_battle_rocket_engine_explosion();
|
||
level thread turret_battle_rocket_engine_tanks_explosion();
|
||
level thread turret_battle_train3_car1_derail();
|
||
}
|
||
|
||
car_4_front_explosion()
|
||
{
|
||
level thread maps\nx_lava_anim::train3_car4_front( "car_4_front_explosion" );
|
||
|
||
level thread set_flag_if_flag( "car_4_front_explosion", "train_2_player_in_tunnel" );
|
||
vignette_trigger_hit( "trigger_car_4_front", "crate_explosion", 2, "car_4_front_explosion" );
|
||
}
|
||
|
||
car_4_middle_explosion()
|
||
{
|
||
level thread maps\nx_lava_anim::train3_car4_mid( "car_4_middle_explosion" );
|
||
|
||
level thread set_flag_if_flag( "car_4_middle_explosion", "train_2_player_in_tunnel" );
|
||
vignette_trigger_hit( "trigger_car_4_middle", "crate_explosion", 2, "car_4_middle_explosion" );
|
||
|
||
// Delete the turret
|
||
turret = level.train_3[4].vehicle.mgturret[0];
|
||
turret Hide();
|
||
}
|
||
|
||
car_4_rear_explosion()
|
||
{
|
||
level thread maps\nx_lava_anim::train3_car4_rear( "car_4_rear_explosion" );
|
||
|
||
level thread set_flag_if_flag( "car_4_rear_explosion", "train_2_player_in_tunnel" );
|
||
vignette_trigger_hit( "trigger_car_4_rear", "crate_explosion", 2, "car_4_rear_explosion" );
|
||
}
|
||
|
||
turret_battle_crate_explosion()
|
||
{
|
||
level thread maps\nx_lava_anim::turret_battle_crate_explosion( "vignette_turret_battle_crate_explosion" );
|
||
|
||
// wait till Train 3 section
|
||
flag_wait( "train_3_start" );
|
||
level thread set_flag_if_flag( "vignette_turret_battle_crate_explosion", "train_2_player_in_tunnel" );
|
||
vignette_trigger_hit( "trigger_turret_battle_crate_explosion", "crate_explosion", 2, "vignette_turret_battle_crate_explosion" );
|
||
}
|
||
|
||
turret_battle_tanker_explosion()
|
||
{
|
||
level thread maps\nx_lava_anim::turret_battle_tanker_explosion( "vignette_turret_battle_tanker_explosion" );
|
||
|
||
// wait till Train 3 section
|
||
flag_wait( "train_3_start" );
|
||
level thread set_flag_if_flag( "vignette_turret_battle_tanker_explosion", "train_2_player_in_tunnel" );
|
||
vignette_trigger_hit( "trigger_turret_battle_tanker_explosion", "turret_explosion", 2, "vignette_turret_battle_tanker_explosion" );
|
||
|
||
// Force crate explosion if player is out of order
|
||
flag_set( "vignette_turret_battle_crate_explosion" );
|
||
}
|
||
|
||
turret_battle_tank_near_hit()
|
||
{
|
||
level thread maps\nx_lava_anim::turret_battle_tank_near_hit( "vignette_turret_battle_tank_near_hit" );
|
||
|
||
// wait till Train 3 section
|
||
flag_wait( "train_3_start" );
|
||
level thread set_flag_if_flag( "vignette_turret_battle_tank_near_hit", "train_2_player_in_tunnel" );
|
||
vignette_trigger_hit( "trigger_turret_battle_tank_near_hit", "turret_explosion", 2, "vignette_turret_battle_tank_near_hit" );
|
||
}
|
||
|
||
turret_battle_rocket_engine_explosion()
|
||
{
|
||
level thread maps\nx_lava_anim::turret_battle_rocket_engine_explosion( "vignette_turret_battle_rocket_engine_explosion" );
|
||
|
||
// wait till around the bend
|
||
flag_wait( "train_2_player_in_tunnel" );
|
||
level thread set_flag_if_flag( "vignette_turret_battle_rocket_engine_explosion", "train_2_rise" );
|
||
vignette_trigger_hit( "trigger_turret_battle_rocket_engine_explosion", "turret_explosion", 4, "vignette_turret_battle_rocket_engine_explosion" );
|
||
|
||
// kill_entire_ai_group( "train_3_car_3_rocket_enemy" );
|
||
}
|
||
|
||
turret_battle_rocket_engine_tanks_explosion()
|
||
{
|
||
level thread maps\nx_lava_anim::turret_battle_rocket_engine_tanks_explosion( "vignette_turret_battle_rocket_engine_tanks_explosion" );
|
||
|
||
// wait till around the bend
|
||
flag_wait( "train_2_player_in_tunnel" );
|
||
level thread set_flag_if_flag( "vignette_turret_battle_rocket_engine_tanks_explosion", "train_2_rise" );
|
||
vignette_trigger_hit( "trigger_turret_battle_rocket_engine_tanks_explosion", "turret_explosion", 4, "vignette_turret_battle_rocket_engine_tanks_explosion" );
|
||
|
||
// Force rocket rxplosion if player is out of order
|
||
flag_set( "vignette_turret_battle_rocket_engine_explosion" );
|
||
|
||
kill_entire_ai_group( "train_3_car_3_tanks_enemy" );
|
||
}
|
||
|
||
turret_battle_train3_car1_derail()
|
||
{
|
||
level thread maps\nx_lava_anim::train3_car1_derail( "vignette_turret_battle_train_derail", "vignette_turret_battle_train_derail_done" );
|
||
|
||
// wait till at final straight away
|
||
flag_wait( "train_2_straightaway" );
|
||
level thread set_flag_if_flag( "vignette_turret_battle_train_derail", "train_3_force_derail" );
|
||
vignette_trigger_hit( "trigger_turret_battle_train_derail", "turret_explosion", 2, "vignette_turret_battle_train_derail" );
|
||
|
||
|
||
level._player playsound("scn_lava_train_slomo");
|
||
// attach car 1 enemies to script car
|
||
car1_group = get_ai_group_ai( "train_3_car_1_enemy" );
|
||
foreach( guy in car1_group )
|
||
{
|
||
guy Unlink();
|
||
guy linkTo( level.train_3[0].vignette_script_model );
|
||
}
|
||
|
||
ClearAllCorpses();
|
||
|
||
// throw off car 1 enemies
|
||
// wait( 1 );
|
||
maps\nx_lava_util::blowup_ai_group( "train_3_car_1_enemy" );
|
||
|
||
// clean up the exploded train car
|
||
wait( 3 );
|
||
|
||
// Clear fx.
|
||
//IPrintln( "die particles, die." );
|
||
level.train_3[0].vehicle maps\nx_lava_fx::set_train_headlight_fx_off();
|
||
level.train_3[0].vehicle maps\_nx_moving_platform_vh::stop_train_maglex_fx();
|
||
level.train_3[1].vehicle maps\_nx_moving_platform_vh::stop_train_maglex_fx();
|
||
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_3_rocket_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_3_tanks_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_4_enemy" );
|
||
//maps\nx_lava_util::delete_entire_ai_group( "train_3_car_5_enemy" );
|
||
// maps\nx_lava_util::delete_entire_ai_group( "train_3_car_1_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_2_enemy" );
|
||
ClearAllCorpses();
|
||
|
||
level thread turret_battle_train_derail_slowmo();
|
||
PlayFX( level._effect[ "derail_explosion" ], level.train_3[1].origin );
|
||
flag_set( "train_3_derail" );
|
||
|
||
level.player_turret thread maps\_ec_lunar_turret::turret_player_viewhands_react( "train_derail_look_at_point" );
|
||
}
|
||
|
||
turret_battle_train_derail_02()
|
||
{
|
||
//trying to turn off the hedlight fx here, might be a tad early
|
||
level.train_3[0].vehicle maps\nx_lava_fx::set_train_headlight_fx_off();
|
||
|
||
level thread maps\nx_lava_anim::turret_battle_train_derail_02( "vignette_turret_battle_train_derail_02", "vignette_turret_battle_train_derail_02_done" );
|
||
level thread set_flag_if_flag( "vignette_turret_battle_train_derail_02", "train_2_rise" );
|
||
//vignette_trigger_hit( "trigger_turret_battle_train_derail_02", "turret_explosion", 1, "vignette_turret_battle_train_derail_02" );
|
||
flag_set( "vignette_turret_battle_train_derail_02" );
|
||
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_3_rocket_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_3_tanks_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_4_enemy" );
|
||
//maps\nx_lava_util::delete_entire_ai_group( "train_3_car_5_enemy" );
|
||
ClearAllCorpses();
|
||
|
||
level.train_3[2] maps\_nx_moving_platform::platform_hide();
|
||
level.train_3[3] maps\_nx_moving_platform::platform_hide();
|
||
level.train_3[4] maps\_nx_moving_platform::platform_hide();
|
||
|
||
// Clear fx.
|
||
level.train_3[2].vehicle maps\_nx_moving_platform_vh::stop_train_maglex_fx();
|
||
level.train_3[3].vehicle maps\_nx_moving_platform_vh::stop_train_maglex_fx();
|
||
level.train_3[4].vehicle maps\_nx_moving_platform_vh::stop_train_maglex_fx();
|
||
|
||
level.train_3[2].vehicle hide();
|
||
level.train_3[3].vehicle hide();
|
||
level.train_3[4].vehicle hide();
|
||
}
|
||
|
||
turret_battle_train_derail()
|
||
{
|
||
//trying to turn off the hedlight fx here, might be a tad early
|
||
level.train_3[0].vehicle maps\nx_lava_fx::set_train_headlight_fx_off();
|
||
|
||
// Don't allow derail till straightaway
|
||
flag_wait( "train_2_straightaway" );
|
||
|
||
level thread maps\nx_lava_anim::turret_battle_train_derail( "vignette_turret_battle_train_derail", "vignette_turret_battle_train_derail_done" );
|
||
level thread turret_battle_train_trigger_hit();
|
||
level thread turret_battle_train_end_path();
|
||
flag_wait( "train_3_derail" );
|
||
flag_set( "vignette_turret_battle_train_derail" );
|
||
|
||
// Clear fx.
|
||
//IPrintln( "die particles, die." );
|
||
level.train_3[0].vehicle maps\_nx_moving_platform_vh::stop_train_maglex_fx();
|
||
level.train_3[1].vehicle maps\_nx_moving_platform_vh::stop_train_maglex_fx();
|
||
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_3_rocket_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_3_tanks_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_4_enemy" );
|
||
//maps\nx_lava_util::delete_entire_ai_group( "train_3_car_5_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_1_enemy" );
|
||
maps\nx_lava_util::delete_entire_ai_group( "train_3_car_2_enemy" );
|
||
ClearAllCorpses();
|
||
|
||
level thread turret_battle_train_derail_slowmo();
|
||
PlayFX( level._effect[ "derail_explosion" ], level.train_3[1].origin );
|
||
flag_set( "train_3_derail" );
|
||
|
||
level.player_turret thread maps\_ec_lunar_turret::turret_player_viewhands_react();
|
||
}
|
||
|
||
turret_battle_train_trigger_hit()
|
||
{
|
||
self endon( "train_3_derail" );
|
||
|
||
vignette_trigger_hit( "trigger_turret_battle_train_derail", "turret_explosion", 3, "train_3_derail" );
|
||
flag_set( "train_3_derail" );
|
||
}
|
||
|
||
turret_battle_train_end_path()
|
||
{
|
||
self endon( "train_3_derail" );
|
||
|
||
flag_wait( "train_3_force_derail" );
|
||
flag_set( "train_3_derail" );
|
||
}
|
||
|
||
turret_battle_train_derail_slowmo()
|
||
{
|
||
// Slow motion
|
||
|
||
SetSlowMotion( 1.0, 0.35, 0.2 );
|
||
|
||
wait( 1.5 );
|
||
|
||
// Slow motion
|
||
SetSlowMotion( 0.4, 1.0, 0.2 );
|
||
}
|
||
|
||
kill_entire_ai_group( group_name )
|
||
{
|
||
ai_group = get_ai_group_ai( group_name );
|
||
|
||
foreach( guy in ai_group )
|
||
{
|
||
if( IsDefined( guy.magic_bullet_shield ) && guy.magic_bullet_shield )
|
||
{
|
||
guy stop_magic_bullet_shield();
|
||
}
|
||
guy kill();
|
||
}
|
||
}
|
||
|
||
vignette_trigger_hit( trigger_name, fx_name, num_hits, flag )
|
||
{
|
||
if( !IsDefined( num_hits ) )
|
||
{
|
||
num_hits = 1;
|
||
}
|
||
|
||
trigger = GetEnt( trigger_name, "targetname" );
|
||
|
||
// Glow model
|
||
glow_model = undefined;
|
||
if( IsDefined( trigger.target ) )
|
||
{
|
||
glow_model = GetEnt( trigger.target, "targetname" );
|
||
glow_model Glow();
|
||
}
|
||
|
||
trigger show();
|
||
trigger setCanDamage( true );
|
||
|
||
// Wait for vignette
|
||
level thread vignette_trigger_hit_thread( trigger, num_hits, flag );
|
||
flag_wait( flag );
|
||
|
||
// FX / Earth Quake
|
||
Earthquake( 0.3, 2, level._player.origin, 10000 );
|
||
|
||
// kill nearby AI
|
||
RadiusDamage( trigger.origin, 512, 300, 300 );
|
||
|
||
// Cleanup
|
||
trigger delete();
|
||
if( IsDefined( glow_model ) )
|
||
{
|
||
glow_model delete();
|
||
}
|
||
}
|
||
|
||
vignette_trigger_hit_thread( trigger, num_hits, flag )
|
||
{
|
||
while( 1 )
|
||
{
|
||
trigger waittill ( "damage", amount, attacker, direction_vec, point, type );
|
||
if( attacker == level._player )
|
||
{
|
||
num_hits--;
|
||
}
|
||
|
||
if( num_hits <= 0 )
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
|
||
flag_set( flag );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
#using_animtree( "generic_human" );
|
||
train_3_setup_locked_combat_nodes()
|
||
{
|
||
// Car 5
|
||
maps\_locked_combat::node_setup( "train_3_car_5_node_1" );
|
||
maps\_locked_combat::node_setup( "train_3_car_5_node_2" );
|
||
maps\_locked_combat::node_setup( "train_3_car_5_node_4" );
|
||
|
||
//maps\_locked_combat::node_add_transition( "train_3_car_5_node_2", "train_3_car_5_node_3", %tp_moon_coverL_stand_2_coverR_stand_144 );
|
||
//maps\_locked_combat::node_add_transition( "train_3_car_5_node_3", "train_3_car_5_node_2", %tp_moon_coverR_stand_2_coverL_stand_144 );
|
||
|
||
// Car 4
|
||
maps\_locked_combat::node_setup( "train_3_car_4_node_1" );
|
||
maps\_locked_combat::node_setup( "train_3_car_4_node_2" );
|
||
maps\_locked_combat::node_setup( "train_3_car_4_node_3" );
|
||
maps\_locked_combat::node_setup( "train_3_car_4_node_4" );
|
||
maps\_locked_combat::node_setup( "train_3_car_4_node_5" );
|
||
maps\_locked_combat::node_setup( "train_3_car_4_node_6" );
|
||
maps\_locked_combat::node_setup( "train_3_car_4_node_7" );
|
||
|
||
maps\_locked_combat::node_add_transition( "train_3_car_4_node_1", "train_3_car_4_node_2", %tp_moon_lava_exposed_stand_2_exposed_crouch_f152 );
|
||
maps\_locked_combat::node_add_transition( "train_3_car_4_node_3", "train_3_car_4_node_4", %tp_moon_coverL_stand_2_coverR_stand_144 );
|
||
maps\_locked_combat::node_add_transition( "train_3_car_4_node_4", "train_3_car_4_node_3", %tp_moon_coverR_stand_2_coverL_stand_144 );
|
||
|
||
maps\_locked_combat::node_add_transition( "train_3_car_4_node_5", "train_3_car_4_node_6", %tp_moon_trav_cover_crouch_L_R_200 );
|
||
maps\_locked_combat::node_add_transition( "train_3_car_4_node_6", "train_3_car_4_node_5", %tp_moon_trav_cover_crouch_R_L_200 );
|
||
|
||
// Car 3
|
||
maps\_locked_combat::node_setup( "train_3_car_3_node_1" );
|
||
maps\_locked_combat::node_setup( "train_3_car_3_node_2" );
|
||
maps\_locked_combat::node_setup( "train_3_car_3_node_3" );
|
||
maps\_locked_combat::node_setup( "train_3_car_3_node_4" );
|
||
maps\_locked_combat::node_setup( "train_3_car_3_node_5" );
|
||
maps\_locked_combat::node_setup( "train_3_car_3_node_6" );
|
||
maps\_locked_combat::node_setup( "train_3_car_3_node_7" );
|
||
|
||
maps\_locked_combat::node_add_transition( "train_3_car_3_node_1", "train_3_car_3_node_2", %tp_moon_lava_exposed_stand_2_stand_R352_u52_R40 );
|
||
maps\_locked_combat::node_add_transition( "train_3_car_3_node_3", "train_3_car_3_node_4", %tp_moon_exposed_stand_2_coverR_crouch_d56_f76_l64 );
|
||
|
||
maps\_locked_combat::node_add_transition( "train_3_car_3_node_6", "train_3_car_3_node_5", %tp_moon_trav_cover_crouch_L_R_200 );
|
||
maps\_locked_combat::node_add_transition( "train_3_car_3_node_5", "train_3_car_3_node_6", %tp_moon_trav_cover_crouch_R_L_200 );
|
||
|
||
// Car 2
|
||
maps\_locked_combat::node_setup( "train_3_car_2_node_1" );
|
||
maps\_locked_combat::node_setup( "train_3_car_2_node_2" );
|
||
//maps\_locked_combat::node_setup( "train_3_car_2_node_3" );
|
||
maps\_locked_combat::node_setup( "train_3_car_2_node_4" );
|
||
maps\_locked_combat::node_setup( "train_3_car_2_node_5" );
|
||
|
||
maps\_locked_combat::node_add_transition( "train_3_car_2_node_1", "train_3_car_2_node_2", %tp_moon_lava_exposed_crouch_2_stand_R152_u80_R104 );
|
||
maps\_locked_combat::node_add_transition( "train_3_car_2_node_5", "train_3_car_2_node_4", %tp_moon_trav_cover_crouch_L_R_200 );
|
||
maps\_locked_combat::node_add_transition( "train_3_car_2_node_4", "train_3_car_2_node_5", %tp_moon_trav_cover_crouch_R_L_200 );
|
||
|
||
// Car 1
|
||
maps\_locked_combat::node_setup( "train_3_car_1_node_1" );
|
||
maps\_locked_combat::node_setup( "train_3_car_1_node_2" );
|
||
maps\_locked_combat::node_setup( "train_3_car_1_node_3" );
|
||
maps\_locked_combat::node_setup( "train_3_car_1_node_4" );
|
||
maps\_locked_combat::node_setup( "train_3_car_1_node_5" );
|
||
maps\_locked_combat::node_setup( "train_3_car_1_node_6" );
|
||
maps\_locked_combat::node_setup( "train_3_car_1_node_7" );
|
||
maps\_locked_combat::node_setup( "train_3_car_1_node_8" );
|
||
|
||
maps\_locked_combat::node_add_transition( "train_3_car_1_node_2", "train_3_car_1_node_1", %tp_moon_trav_cover_crouch_L_R_200 );
|
||
maps\_locked_combat::node_add_transition( "train_3_car_1_node_1", "train_3_car_1_node_2", %tp_moon_trav_cover_crouch_R_L_200 );
|
||
|
||
maps\_locked_combat::node_add_transition( "train_3_car_1_node_4", "train_3_car_1_node_3", %tp_moon_trav_cover_crouch_L_R_200 );
|
||
maps\_locked_combat::node_add_transition( "train_3_car_1_node_3", "train_3_car_1_node_4", %tp_moon_trav_cover_crouch_R_L_200 );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
train_2_skimmers_vo()
|
||
{
|
||
flag_wait( "skimmer_start_vo" );
|
||
radio_dialogue( "lava_bak_tr2turr_hightowerzulu1" ); // dialog: "Hightower this Zulu 1, do you copy."
|
||
// wait( 0.5 );
|
||
radio_dialogue( "lava_mctrl_tr2turr_statusandloc" ); // dialog: "Roger that Zulu, what is your status and location."
|
||
// wait( 0.5 );
|
||
radio_dialogue( "lava_bak_tr2turr_recoveredintel" ); // dialog: "Grid square Whiskey Ultra, we have recovered the intel and are continuing mission. Repeat, we are Charlie Mike."
|
||
// wait( 0.5 );
|
||
radio_dialogue( "lava_mctrl_tr2turr_dispatchingsear" ); // dialog: "Copy that, Zulu, we<77>re dispatching a SEAR unit to recover your team. "
|
||
// wait( 0.1 );
|
||
radio_dialogue( "lava_bak_tr2turr_dontneedrescue" ); // dialog: "What the fuck are you talking about! We don<6F>t need a rescue! We need backup!"
|
||
|
||
flag_wait( "skimmers_wave_2_spawned" );
|
||
wait( 1 );
|
||
oddCoin = RandomInt( 100 );
|
||
if(oddCoin > 66 )
|
||
radio_dialogue( "lava_bak_tr2turr_enemyairinbound" ); // dialog: "Enemy air inbound!"
|
||
else if( oddCoin > 33 )
|
||
radio_dialogue( "lava_bak_tr2turr_incoming" ); // dialog: "Incoming!"
|
||
else
|
||
radio_dialogue( "lava_bak_tr2turr_skimmers12oclock" ); // dialog: "Skimmers! 12 O'clock!"
|
||
|
||
flag_wait( "final_derail_tunnel_exit" );
|
||
radio_dialogue( "lava_bak_derail_heretheycomeagain" ); // dialog: "Here they come again!"
|
||
}
|
||
|
||
train_2_skimmers_start()
|
||
{
|
||
// Setup Train 2 Turret vehicle and Init player start location
|
||
maps\nx_lava_util::setup_train_vehicles( level.train_turret, false );
|
||
maps\nx_lava_util::show_hide_train( level.train_turret, "show" );
|
||
|
||
// Used for player_gets_on_turret
|
||
level.train_2_jump_to = true;
|
||
level thread player_gets_on_turret( 10 );
|
||
level thread train_2_ally_thread();
|
||
flag_set( "player_on_turret_anim_complete" );
|
||
|
||
wait( 0.05 );
|
||
|
||
// Start the movement from debug position
|
||
level thread train_2_skimmers_move_start();
|
||
|
||
wait( 2 );
|
||
flag_set( "skimmer_start_vo" );
|
||
}
|
||
|
||
train_2_skimmers()
|
||
{
|
||
// VO
|
||
level thread train_2_skimmers_vo();
|
||
|
||
level thread maps\nx_lava_util::start_fake_train_movement( false );
|
||
|
||
// Turn off friendly fire & gimp baker
|
||
maps\_friendlyfire::TurnOff();
|
||
|
||
// Wait for skimmer spawn
|
||
spawn_skimmers();
|
||
}
|
||
|
||
train_2_skimmers_move_start()
|
||
{
|
||
// Move front vehicle
|
||
level.train_turret maps\nx_lava_util::train_switch_target( "train_2_front_skim");
|
||
thread maps\nx_lava_util::move_train( level.train_turret, TRAIN_2_SPEED_SKIMMER, 10000, 10 );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
train_2_skimmers_ally_thread()
|
||
{
|
||
|
||
}
|
||
|
||
|
||
train_2_skimmers_player_thread()
|
||
{
|
||
// tagTC<hack> - need to figure out why bullets aren't aiming correctly
|
||
level._player magic_bullet_shield();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
spawn_skimmers()
|
||
{
|
||
// Wait for skimmer spawn
|
||
spawn_trigger = GetEnt( "spawn_skimmers_wave_0", "targetname" );
|
||
spawn_trigger waittill( "trigger" );
|
||
|
||
level.target_skimmer = [];
|
||
|
||
skimmers = GetEntArray( spawn_trigger.target, "targetname" );
|
||
foreach( skimmer_spawner in skimmers )
|
||
{
|
||
skimmer = skimmer_spawner maps\_attack_heli::SAV_setup( "pathing_shooting" );
|
||
|
||
skimmer thread skimmer_wave_0_spawn_func();
|
||
}
|
||
|
||
// spawn target skimmers
|
||
thread skimmer_target_spawn( 0 );
|
||
|
||
flag_set( "skimmers_spawned" );
|
||
|
||
// Wait for skimmer spawn
|
||
spawn_trigger = GetEnt( "spawn_skimmers_wave_1", "targetname" );
|
||
spawn_trigger waittill( "trigger" );
|
||
|
||
skimmers = GetEntArray( spawn_trigger.target, "targetname" );
|
||
foreach( skimmer_spawner in skimmers )
|
||
{
|
||
skimmer = skimmer_spawner maps\_attack_heli::SAV_setup( "pathing_shooting" );
|
||
skimmer thread skimmer_wave_1_spawn_func();
|
||
}
|
||
|
||
flag_set( "skimmers_wave_1_spawned" );
|
||
|
||
// Wait for skimmer target spawn
|
||
spawn_trigger = GetEnt( "spawn_skimmers_target_2", "targetname" );
|
||
spawn_trigger waittill( "trigger" );
|
||
|
||
// spawn target skimmers
|
||
thread skimmer_target_spawn( 2 );
|
||
|
||
|
||
// Wait for skimmer spawn
|
||
spawn_trigger = GetEnt( "spawn_skimmers_wave_2", "targetname" );
|
||
spawn_trigger waittill( "trigger" );
|
||
|
||
skimmers = GetEntArray( spawn_trigger.target, "targetname" );
|
||
foreach( skimmer_spawner in skimmers )
|
||
{
|
||
skimmer = skimmer_spawner maps\_attack_heli::SAV_setup( "pathing_shooting" );
|
||
skimmer thread skimmer_wave_2_spawn_func();
|
||
}
|
||
|
||
flag_set( "skimmers_wave_2_spawned" );
|
||
|
||
// Wait for skimmer target spawn
|
||
spawn_trigger = GetEnt( "spawn_skimmers_target_3", "targetname" );
|
||
spawn_trigger waittill( "trigger" );
|
||
|
||
// spawn target skimmers
|
||
thread skimmer_target_spawn( 3 );
|
||
}
|
||
|
||
skimmer_target_spawn( wave )
|
||
{
|
||
for( i=0; i<2; i++)
|
||
{
|
||
if( !IsDefined( level.target_skimmer[i] ) )
|
||
{
|
||
skimmer_spawner = GetEnt( "enemy_skimmer_target_" + string(i) + string(wave), "targetname" );
|
||
skimmer = skimmer_spawner maps\_attack_heli::SAV_setup( "pathing_shooting" );
|
||
|
||
skimmer thread skimmer_target_spawn_func();
|
||
level.target_skimmer[i] = skimmer;
|
||
}
|
||
}
|
||
}
|
||
|
||
skimmer_target_spawn_func()
|
||
{
|
||
self endon( "death" );
|
||
|
||
// move and damage reduce
|
||
self Vehicle_SetSpeedImmediate( TRAIN_2_SPEED_SKIMMER*.33, TRAIN_2_SPEED_SKIMMER, TRAIN_2_SPEED_SKIMMER );
|
||
|
||
// start dynamic speed
|
||
wait( 2 );
|
||
self thread skimmer_follow_player( 0.1, 0.25, .25, TRAIN_2_SPEED_SKIMMER, 1536, 0.7, true );
|
||
|
||
// delete at end of path
|
||
self waittill( "goal" );
|
||
self delete();
|
||
}
|
||
|
||
skimmer_wave_0_spawn_func()
|
||
{
|
||
self endon( "death" );
|
||
|
||
// move and damage reduce
|
||
self Vehicle_SetSpeedImmediate( TRAIN_2_SPEED_SKIMMER, TRAIN_2_SPEED_SKIMMER, TRAIN_2_SPEED_SKIMMER );
|
||
|
||
// start dynamic speed
|
||
wait( 2 );
|
||
self thread skimmer_follow_player( 1, 2, .25, TRAIN_2_SPEED_SKIMMER, 3072, 0.7 );
|
||
|
||
// delete at end of path
|
||
self waittill( "goal" );
|
||
self delete();
|
||
}
|
||
|
||
skimmer_wave_1_spawn_func()
|
||
{
|
||
self endon( "death" );
|
||
|
||
// move and damage reduce
|
||
self Vehicle_SetSpeedImmediate( TRAIN_2_SPEED_SKIMMER, TRAIN_2_SPEED_SKIMMER, TRAIN_2_SPEED_SKIMMER );
|
||
|
||
// start dynamic speed
|
||
wait( 2 );
|
||
self thread skimmer_follow_player( 1, 2, .25, TRAIN_2_SPEED_SKIMMER, 3072, 0.7 );
|
||
|
||
// delete at end of path
|
||
self waittill( "goal" );
|
||
self delete();
|
||
}
|
||
|
||
skimmer_wave_2_spawn_func()
|
||
{
|
||
self endon( "death" );
|
||
|
||
self Vehicle_SetSpeedImmediate( TRAIN_2_SPEED_SKIMMER + 20, TRAIN_2_SPEED_SKIMMER, TRAIN_2_SPEED_SKIMMER );
|
||
|
||
// start dynamic speed
|
||
wait( 8 );
|
||
self thread skimmer_follow_player( 1, 2, .25, TRAIN_2_SPEED_SKIMMER, 3072, 0.7 );
|
||
|
||
//self thread skimmer_health_print();
|
||
|
||
// delete at end of path
|
||
self waittill( "goal" );
|
||
self delete();
|
||
}
|
||
|
||
skimmer_health_print()
|
||
{
|
||
self endon( "death" );
|
||
|
||
base_health = self.health;
|
||
while( 1 )
|
||
{
|
||
if( self.health < base_health )
|
||
{
|
||
IPrintln( self.health );
|
||
}
|
||
wait( 0.05 );
|
||
}
|
||
}
|
||
|
||
|
||
//*******************************************************************
|
||
// SKIMMER UNTILS *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
skimmer_follow_player( time_low, time_high, speed_percent, base_speed, max_dist, arc, isFollow )
|
||
{
|
||
self endon( "death" );
|
||
self endon( "stop_follow_player" );
|
||
self endon( "reached_end_node" );
|
||
|
||
if( !IsDefined( arc ) )
|
||
arc = 0;
|
||
if( !IsDefined( isFollow) )
|
||
isFollow = false;
|
||
|
||
while( 1 )
|
||
{
|
||
ra_seed = level._player.angles;
|
||
if( IsDefined( level.train_turret[4].vehicle ) )
|
||
ra_seed = level.train_turret[4].vehicle.angles;
|
||
|
||
to_player = VectorNormalize( self.origin - level._player.origin );
|
||
right_angles = AnglesToForward( ra_seed );
|
||
dot = VectorDot( right_angles, to_player );
|
||
dist = Distance( self.origin, level._player.origin );
|
||
|
||
// check location and adjust speed
|
||
if( dot < arc )
|
||
{
|
||
// IPrintlnBold( "BEHIND " + dist );
|
||
skim_speed = base_speed * 1.33;
|
||
self Vehicle_SetSpeed( skim_speed, skim_speed, skim_speed );
|
||
}
|
||
else if( dist < 1024 )
|
||
{
|
||
// IPrintlnBold( "BEHINDISH " + dist );
|
||
skim_speed = base_speed + ( base_speed * speed_percent );
|
||
self Vehicle_SetSpeed( skim_speed, skim_speed, skim_speed );
|
||
}
|
||
else if( dist > max_dist )
|
||
{
|
||
// IPrintlnBold( "AHEAD " + dist );
|
||
skim_speed = base_speed - ( base_speed * speed_percent );
|
||
self Vehicle_SetSpeed( skim_speed, skim_speed, skim_speed );
|
||
}
|
||
else if( isFollow )
|
||
{
|
||
self Vehicle_SetSpeed( base_speed, base_speed, base_speed );
|
||
}
|
||
|
||
wait( RandomFloatRange( time_low, time_high ) );
|
||
}
|
||
} |