mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-23 01:25:52 +00:00
1068 lines
37 KiB
Plaintext
1068 lines
37 KiB
Plaintext
|
||
//****************************************************************************
|
||
// **
|
||
// Confidential - (C) Activision Publishing, Inc. 2010 **
|
||
// **
|
||
//****************************************************************************
|
||
// **
|
||
// Module: NX_ROCKET_SECTION_BASE_ALPHA **
|
||
// **
|
||
// Created: 7/13/2011 - Justin Rote **
|
||
// **
|
||
//****************************************************************************
|
||
|
||
#include maps\_utility;
|
||
#include common_scripts\utility;
|
||
#include maps\_anim;
|
||
#include maps\_vehicle;
|
||
|
||
ROCKET_1_INITIAL_DEPTH = -2750; // How deep underground rocket 2 starts
|
||
ROCKET_1_RISE_DELAY = 10; // Delay before it starts rising
|
||
ROCKET_1_RISE_TIME = 35; // How long it takes for rocket 2 to emerge
|
||
ROCKET_1_LAUNCH_FX_DELAY = 25; // Delay untill prelaunch FX start
|
||
ROCKET_1_LAUNCH_DELAY = 42; // Initial delay before it launches
|
||
ROCKET_1_LAUNCH_HEIGHT = 16000; // How high it launches into the air
|
||
ROCKET_1_LAUNCH_TIME = 18; // How long it takes to launch ( effects upward speed )
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// BASE ALPHA - First rocket valley *
|
||
// *
|
||
//*******************************************************************
|
||
start()
|
||
{
|
||
maps\nx_rocket_section_intro::start_railgun_ride( "heli_start_ride_p1", "gameplay" );
|
||
|
||
// "Destroy launch site Alpha"
|
||
Objective_Add( obj( "OBJ_DESTROY_BASE_ALPHA" ), "active", &"NX_ROCKET_OBJ_BASE_ALPHA" );
|
||
|
||
// "Destroy launch site Delta"
|
||
Objective_Add( obj( "OBJ_DESTROY_BASE_DELTA" ), "active", &"NX_ROCKET_OBJ_BASE_DELTA" );
|
||
|
||
// "Destroy launch site November"
|
||
Objective_Add( obj( "OBJ_DESTROY_LAUNCHING_ROCKETS" ), "active", &"NX_ROCKET_OBJ_LAUNCHING_ROCKETS" );
|
||
|
||
// Spawn looping chopper allies
|
||
level.intro_ally_1 = spawn_vehicle_from_targetname_and_drive( "base_alpha_loop_ally_1" );
|
||
level.intro_ally_2 = spawn_vehicle_from_targetname_and_drive( "base_alpha_loop_ally_2" );
|
||
|
||
// Start some low power rumble to simulate chopper bumps
|
||
thread maps\nx_rocket_util::slightly_vibrate_camera();
|
||
|
||
// Prevent the player from being dmaged from behind
|
||
level._player thread maps\nx_rocket_util::player_prevent_damage_from_behind_until_flag( "base_delta_destroyed" );
|
||
|
||
// Actors shoot blanks
|
||
anim.shootEnemyWrapper_func = maps\nx_rocket_util::ShootEnemyWrapper_blanks;
|
||
|
||
level.playerHeli maps\nx_rocket_util::intro_chopper_allies_setup();
|
||
}
|
||
|
||
main()
|
||
{
|
||
// FX for Rocket01 Prelaunch and Intro FX cleanup
|
||
//thread maps\nx_rocket_fx::rocket_01_prelaunch_fx();
|
||
thread maps\nx_rocket_fx::rocket_introfx_cleanup();
|
||
thread maps\nx_rocket_fx::rocket01_gantrylights_fx();
|
||
|
||
// Enemy spawnfuncs
|
||
array_spawn_function_targetname( "base_alpha_roof_runners_1", maps\nx_rocket_util::run_to_goal_then_aggro );
|
||
array_spawn_function_targetname( "base_alpha_roof_runners_2", maps\nx_rocket_util::run_to_goal_then_aggro );
|
||
array_spawn_function_targetname( "base_alpha_garage_guys", maps\nx_rocket_util::run_to_goal_then_aggro );
|
||
|
||
// Sets up and waits for rocket one destruction
|
||
thread rocket_one_anim();
|
||
thread mission_fail_logic();
|
||
|
||
thread chopper_transition_to_bridge();
|
||
|
||
// Main player chopper control script for this section
|
||
level.playerHeli thread chopper_path_base_alpha();
|
||
|
||
//rocket launch VO announcements for section
|
||
level thread maps\nx_rocket_audio::base_alpha_countdown_sfx();
|
||
|
||
// Watch for railgun impacts on various secondary targets
|
||
thread railgun_damage_watcher();
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
section_precache()
|
||
{
|
||
// Temp weapon FX used for railgun
|
||
PrecacheItem( "nx_rocket_railgun" );
|
||
PrecacheItem( "nx_rocket_railgun_secondary" );
|
||
PrecacheItem( "rpg_straight" );
|
||
|
||
// tagMJS<NOTE> 10/18/2011 - 3D reticule no longer being used
|
||
// Precache the reticule pieces
|
||
//PreCacheModel("nx_reticule_outer_ring");
|
||
//PreCacheModel("nx_reticule_middle_ring");
|
||
//PreCacheModel("nx_reticule_inner_ring");
|
||
//PreCacheModel("nx_reticule_triangle");
|
||
//PreCacheModel("nx_reticule_ticks");
|
||
|
||
// DPad Icon
|
||
precacheShader( "dpad_laser_designator" );
|
||
|
||
// railgun target icons
|
||
preCacheShader( "railgun_target_base" );
|
||
preCacheShader( "railgun_target_offscreen" );
|
||
preCacheShader( "railgun_trajectory_dot_white" );
|
||
preCacheShader( "railgun_trajectory_dot_red" );
|
||
|
||
// Setup hint strings
|
||
add_hint_string( "hint_railgun_activate", &"NX_ROCKET_HINT_RAILGUN_ACTIVATE", ::hint_railgun_activate );
|
||
add_hint_string( "hint_railgun_lock", &"NX_ROCKET_HINT_RAILGUN_LOCK", ::hint_railgun_lock );
|
||
|
||
preCacheShader( "ac130_overlay_grain" );
|
||
|
||
// SLAMRAAM
|
||
|
||
PreCacheItem( "slamraam_missile_dcburning" );
|
||
precacheModel( "vehicle_slamraam_destroyed" );
|
||
}
|
||
|
||
|
||
section_flag_inits()
|
||
{
|
||
flag_init( "player_on_minigun" );
|
||
flag_init( "player_off_minigun" );
|
||
|
||
// Whether the player can use the railgun or not
|
||
flag_init( "railgun_available" );
|
||
|
||
flag_init( "player_activated_railgun" );
|
||
flag_init( "player_used_railgun" );
|
||
|
||
flag_init( "rocket_1_destroyed" );
|
||
flag_init( "chopper_path_entering_base_alpha" );
|
||
flag_init( "chopper_path_after_reveal" );
|
||
|
||
flag_init( "chopper_ride_starting_rocket_one_loop" );
|
||
flag_init( "chopper_path_leaving_base_alpha" );
|
||
|
||
}
|
||
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
// Main chopper control script for this section
|
||
chopper_path_base_alpha()
|
||
{
|
||
// FLAG: chopper_ride_approaching_base_alpha
|
||
flag_wait( "chopper_ride_approaching_base_alpha" );
|
||
|
||
// SAM Turrets
|
||
level.alpha_sam_turrets= [];
|
||
level.alpha_sam_turrets[level.alpha_sam_turrets.size] = thread maps\nx_rocket_section_base_delta::sam_turret_init ("base_alpha_sam_turret_1", "chopper_path_alpha_bunker_roof");
|
||
level.alpha_sam_turrets[level.alpha_sam_turrets.size] = thread maps\nx_rocket_section_base_delta::sam_turret_init ("base_alpha_sam_turret_2", "chopper_ride_starting_rocket_one_loop");
|
||
level.alpha_sam_turrets[level.alpha_sam_turrets.size] = thread maps\nx_rocket_section_base_delta::sam_turret_init ("base_alpha_sam_turret_3", "chopper_path_after_reveal");
|
||
|
||
// Dialogue for first base
|
||
thread base_alpha_dialogue();
|
||
thread base_alpha_dialogue_launch();
|
||
|
||
// FLAG: chopper_path_entering_base_alpha
|
||
flag_wait( "chopper_path_entering_base_alpha" );
|
||
|
||
// Add an attractor to the chopper
|
||
//level.playerHeli.attractor = missile_createAttractorEnt( level.playerHeli, 25000, 40000 );
|
||
//level.playerHeli.repulsor = missile_createRepulsorEnt( level.playerHeli, 15000, 5000 );
|
||
|
||
// Add weak attractors to the allied choppers
|
||
level.intro_ally_1.attractor = missile_createAttractorEnt( level.intro_ally_1, 15000, 20000 );
|
||
level.intro_ally_2.attractor = missile_createAttractorEnt( level.intro_ally_2, 15000, 20000 );
|
||
|
||
|
||
//==========================
|
||
// SETUP RAILGUN TARGETS
|
||
//==========================
|
||
// Spawn TEMP ground troops
|
||
// TagCC<NOTE>: Also give these guys a spawn function to decrease their accuracy when the player's helicopter is facing away.
|
||
array_spawn_function_targetname("base_alpha_guys_1", maps\nx_rocket_util::protect_player_helicopter_rear );
|
||
array_spawn_function_targetname("base_alpha_guys_2", maps\nx_rocket_util::protect_player_helicopter_rear );
|
||
level.base_alpha_guys_1 = maps\nx_rocket_util::spawn_guys_from_targetname( "base_alpha_guys_1" );
|
||
level.base_alpha_guys_2 = maps\nx_rocket_util::spawn_guys_from_targetname( "base_alpha_guys_2" );
|
||
level.base_alpha_guys_3 = maps\nx_rocket_util::spawn_guys_from_targetname( "base_alpha_guys_3" );
|
||
|
||
// Spawn stationary ground vehicles
|
||
// JR - These were replaced with destructibles
|
||
//level.base_alpha_vehicles_static = spawn_vehicles_from_targetname( "base_alpha_vehicles_static" );
|
||
|
||
|
||
|
||
// Spawn pathing ground vehicles
|
||
level.base_alpha_vehicles_pathing = spawn_vehicles_from_targetname_and_drive( "base_alpha_vehicles_pathing" );
|
||
maps\nx_rocket_util::protect_player_helicopter_rear_from_each_vehicle( level.base_alpha_vehicles_pathing );
|
||
level.blackhawk_targets = level.base_alpha_vehicles_pathing;
|
||
|
||
// Setup rocket targets
|
||
level.base_alpha_rocket = getent( "railgun_rocket_alpha_target", "targetname" );
|
||
|
||
// Setup building targets
|
||
//level.base_alpha_buildings = [];
|
||
//level.base_alpha_buildings = GetEntArray( "base_alpha_buildings", "targetname" );
|
||
|
||
//==========================
|
||
//==========================
|
||
|
||
// Set the current area
|
||
// This is used to determine what railgun targets to use
|
||
level.current_area = "base_alpha";
|
||
|
||
// DEBUG
|
||
// JR - Uncomment this if you want the railgun usable immediatly
|
||
//maps\nx_rocket_railgun::enable_railgun();
|
||
// DEBUG
|
||
|
||
// Turn down accuracy on allied choppers
|
||
level.intro_ally_1 thread maps\nx_rocket_util::set_ally_chopper_spread( 8 );
|
||
level.intro_ally_2 thread maps\nx_rocket_util::set_ally_chopper_spread( 8 );
|
||
level.intro_ally_1.health *= 2;
|
||
level.intro_ally_2.health *= 2;
|
||
|
||
level.alpha_littlebird_01 = spawn_vehicle_from_targetname_and_drive( "alpha_littlebird_01" );
|
||
level.alpha_littlebird_01 maps\nx_rocket_util::set_ally_chopper_spread( 4 );
|
||
level.alpha_littlebird_01 thread maps\nx_rocket_util::vehicle_follow( level.playerHeli, 500, 5, 140, level.playerHeli );
|
||
|
||
level.alpha_littlebird_02 = vehicle_spawn( GetEnt( "alpha_littlebird_02", "targetname" ) );
|
||
Target_Remove( level.alpha_littlebird_02 );
|
||
level.alpha_littlebird_02 godon();
|
||
level.alpha_littlebird_02.perferred_crash_location = GetEnt ("helipad_rooftop_crash_location", "targetname");
|
||
level.alpha_littlebird_02 maps\nx_rocket_util::set_ally_chopper_spread( 4 );
|
||
level.alpha_littlebird_02 thread littlebird_liftoff( "alpha_littlebird_02", 550 );
|
||
|
||
level.tunnel_humvee_02 = spawn_vehicle_from_targetname_and_drive( "tunnel_humvee_02" );
|
||
maps\nx_rocket_util::protect_player_helicopter_rear_from_each_vehicle( level.tunnel_humvee_02 );
|
||
level.blackhawk_targets = array_add( level.blackhawk_targets, level.tunnel_humvee_02 );
|
||
|
||
// Spawn heli that will crash
|
||
crash_chopper = spawn_vehicle_from_targetname_and_drive( "base_alpha_crash_ally" );
|
||
crash_chopper thread wait_and_crash();
|
||
|
||
// FLAG: chopper_path_alpha_bunkers
|
||
flag_wait( "chopper_path_alpha_bunkers" );
|
||
thread do_roof_guys_2();
|
||
level.garage_apc = spawn_vehicle_from_targetname_and_drive( "garage_apc" );
|
||
level.garage_apc.kill_player_time = 5;
|
||
maps\nx_rocket_util::protect_player_helicopter_rear_from_each_vehicle( level.garage_apc );
|
||
level.garage_apc mgon();
|
||
|
||
ally_copters = [ level.intro_ally_1, level.intro_ally_2 ];
|
||
|
||
thread maps\nx_rocket_section_intro::allies_choose_targets( ally_copters );
|
||
|
||
level.garage_apc thread maps\nx_rocket_util::apc_turret_logic( level.playerHeli, ally_copters );
|
||
|
||
// FLAG: chopper_path_alpha_roof
|
||
flag_wait( "chopper_path_alpha_bunker_roof" );
|
||
thread do_roof_guys_1();
|
||
thread do_garage_guys();
|
||
|
||
|
||
// FLAG: chopper_ride_bunkers_done
|
||
flag_wait( "chopper_ride_tunnel_humvee_go" );
|
||
level.tunnel_humvee_01 = spawn_vehicle_from_targetname_and_drive( "tunnel_humvee_01" );
|
||
maps\nx_rocket_util::protect_player_helicopter_rear_from_each_vehicle( level.tunnel_humvee_01 );
|
||
level.blackhawk_targets = array_add( level.blackhawk_targets, level.tunnel_humvee_01 );
|
||
|
||
level.base_alpha_guys_4 = maps\nx_rocket_util::spawn_guys_from_targetname( "base_alpha_guys_4" );
|
||
|
||
// Allow railgun usage
|
||
flag_wait( "chopper_ride_starting_rocket_one_loop" );
|
||
wait 8.0;
|
||
maps\nx_rocket_railgun::enable_railgun();
|
||
|
||
// Display tooltip "Press D-Pad Right to activate Railgun targeter"
|
||
level._player display_hint( "hint_railgun_activate" );
|
||
|
||
// JR - Probably need a nag loop here telling the player to fire the railgun
|
||
thread maps\nx_rocket_util::nag_for_fire_railgun( "railgun_fired" );
|
||
|
||
flag_wait( "player_activated_railgun" );
|
||
wait 0.5;
|
||
|
||
// Display tooltip "Press RT to lock and fire Railgun"
|
||
level._player display_hint( "hint_railgun_lock" );
|
||
|
||
// FLAG: chopper_path_leaving_base_alpha
|
||
// Leaving the area
|
||
flag_wait( "chopper_path_leaving_base_alpha" );
|
||
thread cleanup_base_alpha_ents();
|
||
|
||
// Remove the chopper attractor
|
||
//missile_DeleteAttractor( level.playerHeli.attractor );
|
||
//missile_DeleteAttractor( level.playerHeli.repulsor );
|
||
|
||
// Disable railgun usage
|
||
maps\nx_rocket_railgun::disable_railgun();
|
||
}
|
||
|
||
|
||
// Spawns some guys on the roof, and makes them run
|
||
do_roof_guys_1()
|
||
{
|
||
array_spawn_function_targetname("base_alpha_roof_runners_1", maps\nx_rocket_util::protect_player_helicopter_rear );
|
||
level.base_alpha_roof_guys_1 = maps\nx_rocket_util::spawn_guys_from_targetname( "base_alpha_roof_runners_1" );
|
||
}
|
||
|
||
|
||
// Spawns some guys on the roof, and makes them run
|
||
do_roof_guys_2()
|
||
{
|
||
array_spawn_function_targetname("base_alpha_roof_runners_2", maps\nx_rocket_util::protect_player_helicopter_rear );
|
||
level.base_alpha_roof_guys_2 = maps\nx_rocket_util::spawn_guys_from_targetname( "base_alpha_roof_runners_2" );
|
||
|
||
}
|
||
|
||
|
||
// Spawns guys in the garage, who run out
|
||
do_garage_guys()
|
||
{
|
||
array_spawn_function_targetname("base_alpha_garage_guys", maps\nx_rocket_util::protect_player_helicopter_rear );
|
||
level.base_alpha_garage_guys = maps\nx_rocket_util::spawn_guys_from_targetname( "base_alpha_garage_guys" );
|
||
}
|
||
|
||
littlebird_liftoff( liftoff_flag, liftoff_height )
|
||
{
|
||
// self endon( "death" );
|
||
|
||
self maps\nx_rocket_util::vehicle_enable_fire( false );
|
||
flag_wait( liftoff_flag );
|
||
if ( !Target_IsTarget ( self ))
|
||
{
|
||
Target_Set ( self, ( 0, 0, -55 ) );
|
||
target_setshader( self, "javelin_hud_target_red" );
|
||
}
|
||
self vehicle_liftoff( liftoff_height );
|
||
self maps\nx_rocket_util::vehicle_enable_fire( true );
|
||
self GoPath();
|
||
self thread maps\nx_rocket_util::vehicle_follow( level.playerHeli, 500, 5, 140, level.playerHeli );
|
||
// Make it destroyable once it's airborne
|
||
self godoff();
|
||
// if it crashes, kill anyone nearby the crash site
|
||
self waittill ("crash_done");
|
||
foreach ( guy in level.base_alpha_roof_guys_2)
|
||
{
|
||
if ( isAlive ( guy ))
|
||
guy kill();
|
||
}
|
||
|
||
}
|
||
|
||
// Allied chopper gets shot down
|
||
wait_and_crash()
|
||
{
|
||
//attractor = missile_createAttractorEnt( self, 100000, 60000 );
|
||
|
||
//wait 1.0;
|
||
//missile_origin = getent( "heli_crash_missile_origin", "targetname" );
|
||
//MagicBullet( "rpg_player", missile_origin.origin, self.origin );
|
||
|
||
flag_wait( "alpha_chopper_blow_up" );
|
||
|
||
num_rounds = RandomIntRange( 2, 4 );
|
||
|
||
self.missile_attractor = Missile_CreateAttractorEnt( self, 50000, 8000 );
|
||
|
||
for( i = 0; i < num_rounds; i++ )
|
||
{
|
||
start_offset = AnglesToForward( self.angles ) * 1000 + random_vector( RandomFloatRange( 750, 1200 ) );
|
||
start_offset = ( start_offset[0], start_offset[1], -1400 );
|
||
end_offset = AnglesToForward( self.angles ) * 100;
|
||
|
||
bullet_start = self.origin + start_offset;
|
||
bullet_end = self.origin + end_offset;
|
||
|
||
rpg = MagicBullet( "rpg_straight", bullet_start, bullet_end );
|
||
wait 0.2;
|
||
}
|
||
|
||
wait 3.0;
|
||
if( IsAlive( self ) )
|
||
self kill();
|
||
self notify( "newpath" );
|
||
|
||
//missile_deleteAttractor( attractor );
|
||
}
|
||
|
||
|
||
// Fails the player if rocket 1 launches
|
||
mission_fail_logic()
|
||
{
|
||
level endon( "rocket_1_destroyed" );
|
||
level waittill( "rocket_one_done_launching" );
|
||
SetDvar( "ui_deadquote", &"NX_ROCKET_ALPHA_FAIL" );
|
||
maps\_utility::missionFailedWrapper();
|
||
}
|
||
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
// Setup and animation for the first rocket
|
||
rocket_one_anim()
|
||
{
|
||
// Get anim node
|
||
anim_node = getEnt( "vignette_nx_rocket_explosion_test_01", "targetname" );
|
||
|
||
//=============================================
|
||
// SETUP THE PIECES
|
||
//=============================================
|
||
rocket_one = spawn_anim_model("rocket_shuttle_exp1_010");
|
||
rocket_one.origin = anim_node.origin;
|
||
rocket_one.angles = anim_node.angles;
|
||
|
||
|
||
// Link pieces to node
|
||
rocket_one linkTo( anim_node );
|
||
|
||
// Link collision cylinder to anim node
|
||
damage_detector = GetEnt( "damage_detector_r1", "script_noteworthy" );
|
||
damage_detector linkTo( anim_node );
|
||
|
||
// Link target indicator node to the anim node
|
||
target_indicator = GetEnt( "railgun_rocket_alpha_target", "targetname" );
|
||
target_indicator linkTo( anim_node );
|
||
|
||
// Start the rocket below ground
|
||
anim_node.origin = anim_node.origin + (0,0, ROCKET_1_INITIAL_DEPTH );
|
||
|
||
// Start the gantry below ground
|
||
thread gantry_setup_one();
|
||
|
||
script_models = [];
|
||
script_models["rocket_shuttle_exp1_010"] = rocket_one;
|
||
|
||
anim_node anim_first_frame( script_models, "rocket_shuttle_exp1");
|
||
|
||
// Move the rocket up
|
||
anim_node thread move_rocket_one();
|
||
anim_node thread launch_rocket_one();
|
||
rocket_one thread rocket_one_fx();
|
||
|
||
//=======================================
|
||
// Wait for the rocket to be destroyed
|
||
//=======================================
|
||
level waittill( "rocket_1_destroyed" );
|
||
|
||
// Determine which anim should play
|
||
explosion_anim = undefined;
|
||
explosion_models = [];
|
||
|
||
//==========================================================
|
||
//==========================================================
|
||
if( level.rocket_1_state == "rising" )
|
||
{
|
||
explosion_anim = "rocket_shuttle_exp1";
|
||
thread maps\nx_rocket_fx::rocket_01_hit_fx( rocket_one );
|
||
}
|
||
|
||
//==========================================================
|
||
//==========================================================
|
||
else if( level.rocket_1_state == "waiting" )
|
||
{
|
||
explosion_anim = "rocket_shuttle_exp1";
|
||
thread maps\nx_rocket_fx::rocket_01_hit_fx( rocket_one );
|
||
}
|
||
|
||
|
||
//==========================================================
|
||
//==========================================================
|
||
else if( level.rocket_1_state == "launching" )
|
||
{
|
||
explosion_anim = "rocket_shuttle_exp1";
|
||
thread maps\nx_rocket_fx::rocket_01_launch_hit_fx( rocket_one );
|
||
}
|
||
//==========================================================
|
||
//==========================================================
|
||
|
||
// Play the anim
|
||
anim_node thread anim_single( script_models, explosion_anim );
|
||
|
||
// Play Sounds
|
||
//rocket_one PlaySound( "scn_rocket_lrgrocketexplo" );
|
||
rocket_one StopLoopSound( "rocket_launch_loop" );
|
||
}
|
||
|
||
// FX and sound for for rocket 4
|
||
rocket_one_fx()
|
||
{
|
||
level endon( "rocket_1_destroyed" );
|
||
self playsound("rocket_launch_close"); //plays the rocket launching sequence sound
|
||
|
||
//need to change once global waits are in
|
||
wait ROCKET_1_LAUNCH_FX_DELAY;
|
||
|
||
exploder("rocketlaunch01_base_smoke_jets");
|
||
exploder("rocketlaunch01_base_sparkjets");
|
||
|
||
wait 8;
|
||
exploder("rocketlaunch01_jet_ignite");
|
||
exploder("rocketlaunch01_prelaunch_light");
|
||
wait 6;
|
||
|
||
//exploder("rocketlaunch_exhaust_01");
|
||
wait 5;
|
||
|
||
PlayFXOnTag( level._effect[ "nx_smoke_rocket_afterburner_liftoff" ], self, "j_tag_booster" );
|
||
|
||
wait 1;
|
||
|
||
exploder("rocketlaunch01_blast");
|
||
|
||
self playloopsound("rocket_launch_loop"); //looping rocket sound for when it goes in the air forever
|
||
|
||
// Stop FX with:
|
||
thread stop_rocket_one_prelaunch_fx_on_destroy( self );
|
||
thread stop_rocket_one_afterburn_fx_on_destroy( self );
|
||
thread stop_rocket_one_prelaunch_fx_on_wait();
|
||
}
|
||
|
||
stop_rocket_one_prelaunch_fx_on_destroy( rocket_one )
|
||
{
|
||
level endon( "rocket_one_launching" );
|
||
|
||
flag_Wait( "rocket_1_destroyed" );
|
||
|
||
stop_exploder_nx( "rocketlaunch01_base_smoke_jets" );
|
||
stop_exploder_nx( "rocketlaunch01_base_sparkjets" );
|
||
stop_exploder_nx( "rocketlaunch01_jet_ignite" );
|
||
stop_exploder_nx( "rocketlaunch01_prelaunch_light" );
|
||
stop_exploder_nx( "rocketlaunch01_blast" );
|
||
StopFXOnTag( level._effect[ "nx_smoke_rocket_afterburner_liftoff" ], rocket_one, "j_tag_booster" );
|
||
}
|
||
|
||
stop_rocket_one_prelaunch_fx_on_wait()
|
||
{
|
||
level waittill( "rocket_one_launching" );
|
||
|
||
stop_exploder_nx( "rocketlaunch01_base_smoke_jets" );
|
||
stop_exploder_nx( "rocketlaunch01_base_sparkjets" );
|
||
stop_exploder_nx( "rocketlaunch01_jet_ignite" );
|
||
stop_exploder_nx( "rocketlaunch01_prelaunch_light" );
|
||
wait 18;
|
||
stop_exploder_nx( "rocketlaunch01_blast" );
|
||
}
|
||
|
||
stop_rocket_one_afterburn_fx_on_destroy( rocket_one )
|
||
{
|
||
flag_Wait( "rocket_1_destroyed" );
|
||
StopFXOnTag( level._effect[ "nx_smoke_rocket_afterburner_liftoff" ], rocket_one, "j_tag_booster" );
|
||
}
|
||
|
||
|
||
// Moves rocket 1 up out of its silo
|
||
move_rocket_one()
|
||
{
|
||
flag_wait( "chopper_path_entering_base_alpha" );
|
||
self thread move_gantry_inner_one();
|
||
self thread move_gantry_outer_one();
|
||
|
||
level.rocket_1_state = "rising";
|
||
self moveto( self.origin + (0,0,(ROCKET_1_INITIAL_DEPTH * -1)), ROCKET_1_RISE_TIME );
|
||
self waittill( "movedone" );
|
||
//level notify( "rocket_1_done_moving" );
|
||
level.rocket_1_state = "waiting";
|
||
|
||
wait 1;
|
||
thread animate_gantry_arms( "gantry_inner_1" );
|
||
}
|
||
|
||
gantry_setup_one()
|
||
{
|
||
// Get all Ents in the Outer Gantry prefab
|
||
gantry_parts = GetEntArray ("gantry_outer_1", "script_noteworthy");
|
||
|
||
// Teleport them under ground
|
||
foreach( part in gantry_parts )
|
||
{
|
||
if( part.classname == "script_brushmodel" || part.classname == "script_model")
|
||
{
|
||
part.origin = ( part.origin + (0, 0, (ROCKET_1_INITIAL_DEPTH + 600)));
|
||
}
|
||
}
|
||
|
||
// Get all Ents in the Inner Gantry prefab
|
||
gantry_parts = GetEntArray ("gantry_inner_1", "script_noteworthy");
|
||
|
||
// Teleport them under ground
|
||
foreach( part in gantry_parts )
|
||
{
|
||
if( part.classname == "script_brushmodel" || part.classname == "script_model")
|
||
{
|
||
part.origin = ( part.origin + (0, 0, ROCKET_1_INITIAL_DEPTH ));
|
||
}
|
||
}
|
||
}
|
||
|
||
move_gantry_outer_one()
|
||
{
|
||
// Get all Ents in the Gantry prefab
|
||
gantry_parts = GetEntArray ("gantry_outer_1", "script_noteworthy");
|
||
|
||
// Move them in sync with the rocket
|
||
// But stop 600 units short, 5 seconds sooner
|
||
foreach( part in gantry_parts )
|
||
{
|
||
if( part.classname == "script_brushmodel" || part.classname == "script_model")
|
||
{
|
||
part MoveTo( part.origin + (0, 0, ((ROCKET_1_INITIAL_DEPTH * -1) - 600)), (ROCKET_1_RISE_TIME - 5), 2, 2 );
|
||
}
|
||
}
|
||
}
|
||
|
||
move_gantry_inner_one()
|
||
{
|
||
// Get all Ents in the Gantry prefab
|
||
gantry_parts = GetEntArray ("gantry_inner_1", "script_noteworthy");
|
||
|
||
// Move them in sync with the rocket
|
||
// But stop them at a lower point
|
||
foreach( part in gantry_parts )
|
||
{
|
||
if( part.classname == "script_brushmodel" || part.classname == "script_model")
|
||
{
|
||
part MoveTo( part.origin + (0, 0, (ROCKET_1_INITIAL_DEPTH * -1)), ROCKET_1_RISE_TIME, 2, 2 );
|
||
}
|
||
}
|
||
}
|
||
|
||
animate_gantry_arms( gantry_script_noteworthy )
|
||
{
|
||
gantry_arms_01 = undefined;
|
||
gantry_arms_02 = undefined;
|
||
gantry_hose_01 = undefined;
|
||
anim_node = undefined;
|
||
|
||
gantry_parts = GetEntArray ( gantry_script_noteworthy, "script_noteworthy");
|
||
|
||
// Get the anim node
|
||
foreach ( part in gantry_parts )
|
||
{
|
||
if( isDefined (part.targetname) && part.targetname == "vignette_gantry_arms_01" )
|
||
{
|
||
anim_node = part;
|
||
}
|
||
}
|
||
|
||
// Get all the gantry arms
|
||
foreach( part in gantry_parts )
|
||
{
|
||
if( isDefined (part.targetname) )
|
||
{
|
||
// Assign them their roles in the animation
|
||
switch( part.targetname )
|
||
{
|
||
case "gantry_arms_01":
|
||
gantry_arms_01 = part;
|
||
gantry_arms_01 UseAnimTree( level._scr_animtree[ "gantry_arms_01" ] );
|
||
gantry_arms_01.animname = "gantry_arms_01";
|
||
break;
|
||
case "gantry_arms_02":
|
||
gantry_arms_02 = part;
|
||
gantry_arms_02 UseAnimTree( level._scr_animtree[ "gantry_arms_02" ] );
|
||
gantry_arms_02.animname = "gantry_arms_02";
|
||
break;
|
||
case "gantry_hose_01":
|
||
gantry_hose_01 = part;
|
||
gantry_hose_01 UseAnimTree( level._scr_animtree[ "gantry_hose_01" ] );
|
||
gantry_hose_01.animname = "gantry_hose_01";
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
guys = [];
|
||
guys["gantry_arms_01"] = gantry_arms_01;
|
||
guys["gantry_arms_02"] = gantry_arms_02;
|
||
guys["gantry_hose_01"] = gantry_hose_01;
|
||
|
||
anim_node anim_single(guys, "gantry_arms_hose_01");
|
||
}
|
||
|
||
// Waits for a long time, then launches rocket 1
|
||
launch_rocket_one()
|
||
{
|
||
flag_wait( "chopper_ride_starting_rocket_one_loop" );
|
||
level thread maps\nx_rocket_util::launch_coutdown_logic( ROCKET_1_LAUNCH_DELAY, 1, "rocket_1_destroyed" );
|
||
wait ROCKET_1_LAUNCH_DELAY;
|
||
|
||
// Check to see if the rocket was popped before launching
|
||
if( flag( "rocket_1_destroyed" ))
|
||
{
|
||
return;
|
||
}
|
||
|
||
level notify( "rocket_one_launching" );
|
||
level.rocket_1_state = "launching";
|
||
self moveto( self.origin + (0,0,ROCKET_1_LAUNCH_HEIGHT), ROCKET_1_LAUNCH_TIME, ROCKET_1_LAUNCH_TIME/2 );
|
||
|
||
self thread notify_on_launch();
|
||
|
||
// When the rocket gets destroyed, cancel the launch with a small move
|
||
level waittill( "rocket_1_destroyed" );
|
||
self moveto( self.origin + (0,0,1), 1 );
|
||
}
|
||
|
||
notify_on_launch()
|
||
{
|
||
self waittill( "movedone" );
|
||
level notify( "rocket_one_done_launching" );
|
||
}
|
||
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
// Dialogue for this section
|
||
base_alpha_dialogue()
|
||
{
|
||
baker = level.squad[ "ALLY_BAKER" ];
|
||
jenkins = level.squad[ "ALLY_JENKINS" ];
|
||
williams = level.squad[ "ALLY_WILLIAMS" ];
|
||
|
||
//Approaching target point Alpha.
|
||
level thread play_dialogue( "roc_ded1_alpha_approachingalpha", 0.1 );
|
||
//Deadeye, do you have a visual on the target?
|
||
level thread play_dialogue( "roc_dra_alpha_doyouhaveavisual", 2.4 );
|
||
//That's affirmative. We have eyes on candlestick 1.
|
||
level thread play_dialogue( "roc_ded1_alpha_eyesoncandlestick1", 6.4 );
|
||
//Engage all ground targets!
|
||
baker thread play_dialogue( "roc_bak_alpha_engagegroundtargets", 11.2 );
|
||
//Glassing multiple AV's inbound, north side of the gantry.
|
||
level thread play_dialogue( "roc_ded3_alpha_glassingmultavs", 16.1 );
|
||
|
||
//EC Gunship, lifting off at 2 o'clock.
|
||
baker thread play_dialogue( "roc_bak_alpha_gunshipat2oclock", 19.1 );
|
||
|
||
//Alpha, to be played at a lull, when player sees gantry rising up, after little bird crashes into bunker but before railgun vo:
|
||
baker thread play_dialogue( "roc_bak_alpha_gantrymovingtolaunch", 30.1 );
|
||
|
||
//Crossbow, you are clear to engage.
|
||
level thread play_dialogue( "roc_dra_alpha_xbowcleartoengage", 45.1 );
|
||
//Copy, Dragon. This is Lincoln fire control, standing by for fire mission.
|
||
level thread play_dialogue( "roc_cro_alpha_lincolnfirecontrol", 48.2 );
|
||
|
||
flag_wait( "rocket_1_destroyed" );
|
||
//Ordnance On target.
|
||
baker thread play_dialogue( "roc_bak_alpha_niceshot", 3.8 );
|
||
// //BDA is 1 for 1. Kill confirmed.
|
||
// baker thread play_dialogue( "roc_bak_alpha_bda1for1", 2.3 );
|
||
//Deadeye, engage EC column oscar mike in grid square 3-6 Actual.
|
||
level thread play_dialogue( "roc_dra_alpha_engagein36actual", 21.2 );
|
||
//Copy that, Dragon. Bugging out.
|
||
level thread play_dialogue( "roc_ded1_alpha_copybuggingout", 27.0 );
|
||
|
||
|
||
|
||
/*
|
||
// ALL RAILGUN VO IS DONE IN NX_ROCKET_RAILGUN. NOT SURE WHAT TO DO HERE
|
||
|
||
//Target link active.
|
||
level thread play_dialogue( "roc_cro_alpha_linkactive", 53.3 );
|
||
level waittill( "railgun_fired" );
|
||
//Target is lit.
|
||
level thread play_dialogue( "roc_cro_delta_targetislit", 56 );
|
||
//Fire mission confirmed. Firing for effect.
|
||
level thread play_dialogue( "roc_cro_alpha_firemissionconfirmed", 57.4 );
|
||
//TTI 3 seconds
|
||
level thread play_dialogue( "roc_cro_alpha_tti3sec", 61.2 );
|
||
//2, 1<> Splash.
|
||
level thread play_dialogue( "roc_cro_alpha_21splash", 64.1 );
|
||
*/
|
||
|
||
|
||
|
||
// //thread add_dialogue_line( "Baker", "Dragon 1-5, this is Deadeye 2-1.<2E> We are in objective grid Uniform.", "w" );
|
||
//// maps\nx_rocket_util::wait_play_dialogue_wait( 0, "roc_bak_alpha_objgriduniform" );
|
||
// level.squad[ "ALLY_BAKER" ] maps\nx_rocket_util::actor_dialogue_queue( "roc_bak_alpha_objgriduniform" );
|
||
//
|
||
// //thread add_dialogue_line( "Baker", "Objective Alpha-two in sight.", "w" );
|
||
//// maps\nx_rocket_util::wait_play_dialogue_wait( 0, "roc_bak_alpha_alpha2insight" );
|
||
// level.squad[ "ALLY_BAKER" ] maps\nx_rocket_util::actor_dialogue_queue( "roc_bak_alpha_alpha2insight" );
|
||
//
|
||
// /*
|
||
// //thread add_dialogue_line( "Command", "Roger that. Copy all.", "w" );
|
||
// maps\nx_rocket_util::wait_play_dialogue_wait( 0.5, "roc_cmd_alpha_rogercopyall" );
|
||
// */
|
||
//
|
||
// //thread add_dialogue_line( "Baker", "Deadeye 2-4 is hit! I repeat Deadeye 2-4 is going down!", "w" );
|
||
//// maps\nx_rocket_util::wait_play_dialogue_wait( 0.5, "roc_bak_alpha_deadeyehit" );
|
||
// level.squad[ "ALLY_BAKER" ] maps\nx_rocket_util::actor_dialogue_queue( "roc_bak_alpha_deadeyehit", 0.5 );
|
||
//
|
||
// //thread add_dialogue_line( "Baker", "Engage all ground targets!!", "w" );
|
||
//// maps\nx_rocket_util::wait_play_dialogue_wait( 1, "roc_bak_alpha_engageground" );
|
||
// level.squad[ "ALLY_BAKER" ] maps\nx_rocket_util::actor_dialogue_queue( "roc_bak_alpha_engageground", 1 );
|
||
//
|
||
// // Bunker encounter
|
||
// flag_wait( "chopper_path_alpha_bunkers" );
|
||
// //thread add_dialogue_line( "Baker", "Foot mobiles on the bunkers!", "w" );
|
||
//// maps\nx_rocket_util::wait_play_dialogue_wait( 1, "roc_bak_alpha_mobilesonbunkers" );
|
||
// level.squad[ "ALLY_BAKER" ] maps\nx_rocket_util::actor_dialogue_queue( "roc_bak_alpha_mobilesonbunkers", 1 );
|
||
//
|
||
// flag_wait( "chopper_ride_tunnel_humvee_go" );
|
||
// //thread add_dialogue_line( "Baker", "Targets in the open!", "w" );
|
||
//// maps\nx_rocket_util::wait_play_dialogue_wait( 1, "roc_bak_alpha_tangosopen" );
|
||
// level.squad[ "ALLY_BAKER" ] maps\nx_rocket_util::actor_dialogue_queue( "roc_bak_alpha_tangosopen", 1 );
|
||
//
|
||
// // Starting the rocket loop
|
||
// flag_wait( "chopper_ride_starting_rocket_one_loop" );
|
||
// //thread add_dialogue_line( "Command", "Deadeye 2-1, this is Dragon 1-5, railguns are online.", "w" );
|
||
// maps\nx_rocket_util::wait_play_dialogue_wait( 0, "roc_cmd_alpha_railgunsonline" );
|
||
//
|
||
// //thread add_dialogue_line( "Command", "Continue to circle the objective until it is destroyed. Over.", "w" );
|
||
// maps\nx_rocket_util::wait_play_dialogue_wait( 0.4, "roc_cmd_alpha_circleobjective" );
|
||
//
|
||
// //thread add_dialogue_line( "Baker", "Paint a target on that rocket!", "w" );
|
||
// //maps\nx_rocket_util::wait_play_dialogue_wait( 2.0, "roc_bak_alpha_paintrocket" );
|
||
//
|
||
//
|
||
// // On Fire
|
||
// //level waittill( "railgun_fired" );
|
||
// //thread add_dialogue_line( "Baker", "This is deadeye 2-1, fire for effect. MOE rails, 1 round. On my lase. Authenticate Over.", "w" );
|
||
// //wait 3.0;
|
||
// //thread add_dialogue_line( "Command", "This is dragon 1-5, copy all, I authenticate. Rail out, TOT one zero seconds.", "w" );
|
||
//
|
||
//
|
||
// // On Hit
|
||
// flag_wait( "rocket_1_destroyed" );
|
||
// wait 2.5;
|
||
//
|
||
//// maps\nx_rocket_util::wait_play_dialogue_wait( 0.5, "roc_bak_alpha_niceshot" );
|
||
// level.squad[ "ALLY_BAKER" ] maps\nx_rocket_util::actor_dialogue_queue( "roc_bak_alpha_niceshot", 0.5 );
|
||
//
|
||
// //thread add_dialogue_line( "Baker", "Let's keep moving.", "w" );
|
||
//// maps\nx_rocket_util::wait_play_dialogue_wait( 1.0, "roc_bak_alpha_keepmoving" );
|
||
// level.squad[ "ALLY_BAKER" ] maps\nx_rocket_util::actor_dialogue_queue( "roc_bak_alpha_keepmoving", 1 );
|
||
//
|
||
// //thread add_dialogue_line( "Baker", "Roger that, en route to target site Bravo. Hang on.", "w" );
|
||
//// maps\nx_rocket_util::wait_play_dialogue_wait( 1.2, "roc_bak_alpha_enroutebravo" );
|
||
// level.squad[ "ALLY_BAKER" ] maps\nx_rocket_util::actor_dialogue_queue( "roc_bak_alpha_enroutebravo", 1.2 );
|
||
}
|
||
|
||
/*
|
||
railgun_fire_nag_loop()
|
||
{
|
||
level endon();
|
||
|
||
while( true )
|
||
{
|
||
}
|
||
}
|
||
*/
|
||
|
||
|
||
// Warn the player that the rocket is taking off
|
||
base_alpha_dialogue_launch()
|
||
{
|
||
level endon( "rocket_1_destroyed" );
|
||
|
||
level waittill( "rocket_one_launching" );
|
||
|
||
// Baker: "It's taking off! Get a rail shot on it NOW!"
|
||
// maps\nx_rocket_util::wait_play_dialogue_wait( 2.2, "roc_bak_alpha_railshotnow" );
|
||
level.squad[ "ALLY_BAKER" ] maps\nx_rocket_util::actor_dialogue_queue( "roc_bak_alpha_railshotnow", 2.2 );
|
||
}
|
||
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
// Chopper finishes rocket one section and continues to bridge section
|
||
// JR - Needs to be updated with infinite loop and smart exit
|
||
chopper_transition_to_bridge()
|
||
{
|
||
//iprintln( "waiting for transition to bridge" );
|
||
|
||
// Wait untill it enters bridge area
|
||
//flag_wait( "chopper_transition_two" );
|
||
level waittill( "rocket_1_destroyed" );
|
||
|
||
// Disable railgun usage
|
||
maps\nx_rocket_railgun::disable_railgun();
|
||
|
||
// Dont exit the area unless we hit the exit_ok node.
|
||
// This ensures the player has plenty of time to see the rocket
|
||
// explosion before leaving the area
|
||
while( 1 )
|
||
{
|
||
if( flag( "chopper_ride_exit_ok" ))
|
||
{
|
||
break;
|
||
}
|
||
wait 1;
|
||
}
|
||
|
||
// After the player hits the exit_ok node, wait for the actual exit_node.
|
||
while( 1 )
|
||
{
|
||
if( flag( "chopper_ride_exit_node" ))
|
||
{
|
||
break;
|
||
}
|
||
wait 1;
|
||
}
|
||
|
||
AssertEx( IsDefined( level.playerHeli ), "Tried to transition chopper when level.playerHeli does not exist" );
|
||
|
||
// Get rid of old path
|
||
level.playerHeli thread vehicle_detachfrompath();
|
||
|
||
// Get the new path
|
||
transition_node = getstruct( "chopper_transition_node_two", "targetname" );
|
||
|
||
// Use new patch
|
||
level.playerHeli.currentnode = transition_node;
|
||
|
||
|
||
// Continue on new path
|
||
level.playerHeli thread vehicle_resumepath();
|
||
level.playerHeli GoPath();
|
||
|
||
// Reset chopper agility settings
|
||
level.playerHeli SetMaxPitchRoll( 15, 15 );
|
||
level.playerHeli SetYawSpeed( 140, 55, 30, 0 );
|
||
|
||
//temp music_chk flag
|
||
flag_set( "music_chk_bridge" );
|
||
|
||
// Set the current area
|
||
level.current_area = "bridge";
|
||
}
|
||
|
||
// Delete all the base alpha objects after the player leaves the area
|
||
cleanup_base_alpha_ents()
|
||
{
|
||
//iprintln( "base alpha cleanup" );
|
||
|
||
// actor cleanup should be done by the cleanup volumes
|
||
maps\nx_rocket_util::safe_delete_array( level.base_alpha_guys_1 );
|
||
maps\nx_rocket_util::safe_delete_array( level.base_alpha_guys_2 );
|
||
maps\nx_rocket_util::safe_delete_array( level.base_alpha_guys_3 );
|
||
maps\nx_rocket_util::safe_delete_array( level.base_alpha_guys_4 );
|
||
|
||
//maps\nx_rocket_util::safe_delete_array( level.base_alpha_vehicles_static );
|
||
maps\nx_rocket_util::safe_delete_array( level.base_alpha_vehicles_pathing );
|
||
|
||
// Ground vehicles
|
||
maps\nx_rocket_util::safe_delete( level.garage_apc );
|
||
maps\nx_rocket_util::safe_delete( level.tunnel_humvee );
|
||
|
||
// Allied choppers
|
||
maps\nx_rocket_util::safe_delete( level.intro_ally_1 );
|
||
maps\nx_rocket_util::safe_delete( level.intro_ally_2 );
|
||
|
||
// SAM Turrets
|
||
maps\nx_rocket_util::safe_delete_array( level.alpha_sam_turrets );
|
||
|
||
maps\nx_rocket_util::safe_delete( level.alpha_littlebird_01 );
|
||
maps\nx_rocket_util::safe_delete( level.alpha_littlebird_02 );
|
||
}
|
||
|
||
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
// Checks for damage on self ( a rocket ), and triggers an exploder
|
||
rocket_exploder_logic( rocket_number )
|
||
{
|
||
self setCanDamage( true );
|
||
|
||
while( true )
|
||
{
|
||
self waittill( "damage", damage, attacker, direction_vec, point, damageType, modelName, tagName );
|
||
|
||
if( damage >= 4000 && damagetype == "MOD_GRENADE" )
|
||
{
|
||
// Create a notify message for this rocket
|
||
event_string = "rocket_" + rocket_number + "_destroyed";
|
||
|
||
// Notify
|
||
level notify( event_string );
|
||
flag_set( event_string );
|
||
|
||
// Trigger this rockets exploder
|
||
// JR - This is a hack to turn off the exploder on rocket 1
|
||
// since it has its own unique explosion anim now
|
||
//if( rocket_number != 1 )
|
||
//{
|
||
//Exploder( self.script_parameters );
|
||
//}
|
||
|
||
self PlaySound( "nx_rocket_explosion" );
|
||
|
||
// TEMP WAY OF GETTING VO TO PLAY DURING/AFTER LOCK-ON.
|
||
// thread maps\nx_rocket_railgun::sound_railgun_hit_vo();
|
||
|
||
// Spawn a new rocket with the same trajectory
|
||
// JR FIX ME - This is a hack, find a better solution - FIX ME
|
||
if( isDefined( level.active_rail_shot ))
|
||
{
|
||
missile_angles = level.active_rail_shot.angles;
|
||
forward = anglestoforward( missile_angles );
|
||
//MagicBullet( "nx_rocket_railgun_secondary", self.origin, self.origin + forward );
|
||
if (rocket_number == 2)
|
||
{
|
||
MagicBullet( "nx_rocket_railgun_secondary", level.active_rail_shot.origin + ( 2000 * forward ), level.active_rail_shot.origin + ( 2100 * forward ) );
|
||
}
|
||
else
|
||
{
|
||
MagicBullet( "nx_rocket_railgun_secondary", level.active_rail_shot.origin + ( 600 * forward ), level.active_rail_shot.origin + ( 700 * forward ) );
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
railgun_damage_watcher()
|
||
{
|
||
// Bunker 1
|
||
//thread railgun_damage_bunker_1();
|
||
|
||
// Bunker 2
|
||
//thread railgun_damage_bunker_2();
|
||
}
|
||
|
||
// Bunker 1 - The C shaped bunker
|
||
railgun_damage_bunker_1()
|
||
{
|
||
flag_wait( "base_alpha_bunker_1_exploder_triggered" );
|
||
//iprintlnbold( "Bunker 1 destroyed" );
|
||
}
|
||
|
||
// Bunker 2 - the small square bunker
|
||
railgun_damage_bunker_2()
|
||
{
|
||
flag_wait( "base_alpha_bunker_2_exploder_triggered" );
|
||
//iprintlnbold( "Bunker 2 destroyed" );
|
||
}
|
||
|
||
|
||
// Used for hint strings
|
||
// Returns false untill player turns on railgun for the first time
|
||
hint_railgun_activate()
|
||
{
|
||
return flag( "player_activated_railgun" );
|
||
}
|
||
|
||
// Used for hint strings
|
||
// Returns false untill player uses railgun for the first time
|
||
hint_railgun_lock()
|
||
{
|
||
return flag( "player_used_railgun" );
|
||
}
|