nx1-gsc-dump/maps/nx_rocket_section_turret_control.gsc

1145 lines
30 KiB
Plaintext

//****************************************************************************
// **
// Confidential - (C) Activision Publishing, Inc. 2010 **
// **
//****************************************************************************
// **
// Module: NX_ROCKET_SECTION_ **
// **
// Created: 7/13/2011 - **
// **
//****************************************************************************
#include maps\_utility;
#include common_scripts\utility;
#include maps\_anim;
#include maps\_vehicle;
#include maps\_hud_util;
NX_ROCKET_TURRET_FOV_NORMAL = 60;
NX_ROCKET_TURRET_FOV_ZOOM_01 = 40;
NX_ROCKET_TURRET_FOV_ZOOM_02 = 20;
NX_ROCKET_TURRET_STATIC_ALPHA = 0.15;
NX_ROCKET_TURRET_TURN_RATE = 0.35;
NX_ROCKET_TURRET_FIRE_RATE = 5; // ROUNDS PER SECOND
//*******************************************************************
// *
//*******************************************************************
start()
{
teleport_info = [];
teleport_info[ "ALLY_BAKER" ] = "start_default_ally_00";
teleport_info[ "ALLY_JENKINS" ] = "start_turret_control_ally_01";
teleport_info[ "ALLY_WILLIAMS" ] = "start_turret_control_ally_02";
maps\nx_rocket_util::squad_teleport( teleport_info );
level._player maps\_nx_utility::move_player_to_start_point( "start_turret_control_player" );
// Turn off AA turret section smoke
maps\nx_rocket_util::pre_turret_event();
issue_color_orders( "b102 p102", "allies" );
}
main()
{
level thread section_dialogue();
level thread objective_breach();
level thread console_pip_setup();
// thread maps\_utility::set_ambient( "rocket_int_underground" );
level.aa_control_breach_doors = maps\nx_rocket_anim::aa_control_breach_door_setup();
level.aa_exit_doors = maps\nx_rocket_anim::aa_exit_door_setup();
blocker_01 = GetEnt( "turret_control_door_block_01", "targetname" );
blocker_02 = GetEnt( "turret_control_door_block_02", "targetname" );
blocker_03 = GetEnt( "turret_control_door_block_03", "targetname" );
blocker_01 thread blocker_movement();
blocker_02 Hide();
thread maps\nx_rocket_fx::forest_fire_fx();
thread maps\_utility::set_ambient( "nx_rocket_turret_int" );
// SAVE POINT
level thread autosave_now();
flag_set( "discovered_turret_control" );
flag_wait( "turret_control_entered" );
level thread breach_attacker();
enemies = enemy_setup();
maps\nx_rocket_anim::aa_control_breach(
enemies[ 0 ],
enemies[ 1 ],
level.aa_control_breach_doors[ 0 ],
level.aa_control_breach_doors[ 1 ],
level.squad[ "ALLY_JENKINS" ],
level.squad[ "ALLY_WILLIAMS" ] );
flag_set( "turret_control_turret_ready" );
wait 3.0;
// waittill_turret_trigger();
turret_trigger = GetEnt( "turret_trigger_command", "script_noteworthy" );
turret_trigger maps\nx_rocket_util::trigger_waittill_use( "Hold [{+usereload}] to take hijack AA turret.");
turret_enter();
thread rockets_init();
thread chopper_init();
flag_wait( "turret_control_complete" );
setSavedDvar ("alternateSceneEnable", "0" );
level._player AlternateSceneCameraUnlink();
// SAVE POINT
level thread autosave_now();
blocker_02 Show();
blocker_02 Solid();
blocker_03 Delete();
escape();
}
breach_attacker()
{
level._player waittill( "breaching" );
spawner = GetEnt( "enemy_turret_attacker", "targetname" );
attacker = spawner spawn_ai();
attacker.ignoreAll = true;
// level._player waittill( "breached" );
wait 5.0;
attacker.ignoreAll = false;
level._player waittill( "breached" );
slow_scale = 0.15;
SetSlowMotion( 1.0, slow_scale, 0.5 );
attacker breach_attacker_wait();
SetSlowMotion( slow_scale, 1.0, 0.5 );
}
breach_attacker_wait()
{
self endon( "death" );
wait 4.0;
level._player DoDamage( 30.0, self.origin );
}
blocker_movement()
{
flag_wait( "turret_control_player_breached" );
// TEMP REMOVE ENTRY BLOCK
// self Delete();
self.origin_old = self.origin;
self.origin = (0,0,0);
flag_wait( "turret_control_complete" );
self.origin = self.origin_old;
}
debug_turret_escape()
{
teleport_info = [];
teleport_info[ "ALLY_BAKER" ] = "start_default_ally_00";
teleport_info[ "ALLY_JENKINS" ] = "start_turret_escape_ally_01";
teleport_info[ "ALLY_WILLIAMS" ] = "start_turret_escape_ally_02";
maps\nx_rocket_util::squad_teleport( teleport_info );
level._player maps\_nx_utility::move_player_to_start_point( "start_turret_escape_player" );
escape();
}
escape()
{
thread turret_earthquake();
maps\nx_rocket_anim::aa_exit_melee( level.aa_exit_doors[0], level.aa_exit_doors[1], level.squad[ "ALLY_WILLIAMS" ] );
maps\nx_rocket_util::squad_color_reset();
// SAVE POINT
level thread autosave_now();
Objective_State( obj( "OBJ_ESCAPE_AA_BASE" ), "current" );
Objective_SetPointerTextOverride( obj("OBJ_ESCAPE_AA_BASE"), &"NX_ROCKET_FOLLOW_MARKER" );
Objective_OnEntity( obj( "OBJ_ESCAPE_AA_BASE" ), level.squad[ "ALLY_WILLIAMS" ], (0, 0, 90) );
maps\nx_rocket_util::squad_color_reset();
issue_color_orders( "b151 p151", "allies" );
// level.squad[ "ALLY_WILLIAMS" ] thread escape_vignettes_williams();
flag_wait( "vignette_aa_control_exit" );
// maps\nx_rocket_anim::aa_exitdoors( level.squad[ "ALLY_WILLIAMS" ] );
// maps\nx_rocket_util::squad_color_reset();
}
console_pip_setup()
{
self endon( "turret_control_complete" );
camera_org = GetEnt( "turret_control_pip_camera", "script_noteworthy" );
camera = spawn_tag_origin();
camera.origin = camera_org.origin;
camera.angles = camera_org.angles;
setSavedDvar ("alternateSceneEnable", "1" );
level._player AlternateSceneCameraLinkTo( camera, "tag_origin", NX_ROCKET_TURRET_FOV_NORMAL );
interval = 0;
while( 1 )
{
rate = RandomFloatRange( 10, 30 ); //deg per sec
theta = RandomFloatRange( -100, 100 );
rotate_time = abs( theta )/rate;
pitch = RandomFloatRange( -35, 0 );
yaw = theta + camera.angles[ 1 ];
camera RotateTo( ( pitch, yaw, 0), rotate_time );
camera waittill( "rotatedone" );
wait RandomFloatRange( 0.5, 2.0 );
}
}
///////////////////////////
// BREACH //
///////////////////////////
escape_vignettes_williams()
{
maps\nx_rocket_anim::aa_corridor_run_out_01_ally( self );
maps\nx_rocket_anim::aa_corridor_run_out_02_ally( self );
maps\nx_rocket_util::squad_color_reset();
issue_color_orders( "b151 p151", "allies" );
}
enemy_setup()
{
enemies = [];
spawners = GetEntArray( "turret_enemy", "script_noteworthy" );
foreach( spawner in spawners )
{
enemy = spawner spawn_ai();
enemy.animname = "enemy_opfor";
enemy.ignoreme = true;
enemy.ignoreall = true;
enemies[ enemies.size ] = enemy;
}
return enemies;
// enemy_guard_node = GetEnt( "vignette_turret_guard_takedown", "targetname" );
// enemy_guard_node anim_first_frame_solo( level.turret_enemies[ "enemy_turret_guard" ], "turret_guard_takedown" );
//
// enemy_operator_node = GetEnt( "turret_controls_seat", "script_noteworthy" );
// enemy_operator_node thread anim_loop_solo( level.turret_enemies[ "enemy_turret_operator" ], "turret_enemy_turret_idle", "end_turret_idle" );
}
turret_enemy_operator_idle()
{
spawner = GetEnt( "turret_enemy", "script_noteworthy" );
enemy_operator = spawner spawn_ai();
enemy_operator_node = GetEnt( "turret_controls_seat", "script_noteworthy" );
enemy_operator.animname = "enemy_opfor";
enemy_operator.ignoreme = true;
enemy_operator_node thread anim_loop_solo( enemy_operator, "turret_enemy_turret_idle", "end_turret_idle" );
level.enemy_turret_operator = enemy_operator;
}
waittill_turret_trigger()
{
trigger = GetEnt( "turret_trigger_command", "script_noteworthy" );
trigger trigger_on();
trigger SetHintString( "Hold [{+usereload}] to take hijack AA turret." );
trigger waittill( "trigger" );
trigger trigger_off();
}
#using_animtree( "script_model" );
new_turret_enter()
{
self endon( "turret_exit" );
// get into turret.
turret = GetEnt( "aa_turret_player", "targetname" );
turret UseBy( self );
// Disable turret firing.
turret TurretFireDisable();
level._player DisableTurretDismount();
// Fire bullets.
fire_data_array =
[
[ "tag_aim_special1", %nx_pr_rocket_aa_turret_fire_cannon01 ],
[ "tag_aim_special2", %nx_pr_rocket_aa_turret_fire_cannon02 ],
[ "tag_aim_special3", %nx_pr_rocket_aa_turret_fire_cannon03 ],
[ "tag_aim_special4", %nx_pr_rocket_aa_turret_fire_cannon04 ]
];
index = 0;
level.aa_turret_player = turret;
// self childthread turret_turn_shake();
while ( 1 )
{
wait( 0.01 );
if ( level._player isUsingTurret() == false )
{
continue;
}
// Look for attack button. Allows holding.
if ( self AttackButtonPressed() == false )
{
continue;
}
// Firing HUD FX
level.turret_hud[ "static" ].alpha = RandomFloatRange( 0.5, 0.6 );
level.turret_hud[ "black" ].alpha = RandomFloatRange( 0.1, 0.2 );
level.turret_hud[ "static" ] thread hud_element_alpha( NX_ROCKET_TURRET_STATIC_ALPHA, 0.4 );
level.turret_hud[ "black" ] thread hud_element_alpha( 0, 0.15 );
// Play anim.
turret UseAnimTree( #animtree );
turret SetAnimRestart( fire_data_array[ index ][ 1 ], 1, 0, 1 );
// Fire magic bullet.
tag_origin = turret GetTagOrigin( fire_data_array[ index ][ 0 ] );
tag_angles = turret GetTagAngles( fire_data_array[ index ][ 0 ] );
forward = AnglesToForward( tag_angles ) * 30000;
angles_to_target = level._player GetPlayerViewAngles();
aim_forward = AnglesToForward( angles_to_target );
aim_up = AnglesToUp( angles_to_target );
bullet_start = tag_origin;
bullet_end = bullet_start + ( aim_forward * 30000 );
MagicBullet( "nx_rocket_aa_turret", bullet_start, bullet_end );
//level thread draw_line_for_time( bullet_start, bullet_end, 1, 0, 0, interval );
fx_org = bullet_start;
fx_forward = aim_forward;
fx_up = aim_up;
playfx( level._effect[ "nx_rocket_aa_flash_view" ], fx_org, fx_forward, fx_up );
Earthquake( 0.2, 0.3, turret GetTagOrigin( "tag_player" ), 300 );
// Can be any weapon, turret or normal.
// magicbullet( "ugv_main_turret", tag_origin, tag_origin + forward );
index++;
index %= 4;
// Fire repeat delay time.
wait( 0.1 );
}
}
turret_turn_shake()
{
while( 1 )
{
aim_movement = self GetNormalizedAimMovement();
aim_scale = length( ( aim_movement[0], aim_movement[1], 0 ) );
shake_scale = aim_scale * 0.15;
shake_time = 0.5 + aim_scale * 0.5;
if( aim_scale > 0 )
Earthquake( shake_scale, shake_time, level.aa_turret_player GetTagOrigin( "tag_player" ), 300 );
wait 0.3;
}
}
turret_enter()
{
turret_mode( true );
turret_controls_lookat();
turret_hud( true );
flag_set( "turret_control_controls_entered" );
level._player thread new_turret_enter();
// turret_view_build();
thread maps\_ambient::use_eq_settings_fade( "nx_rocket_turret_fire", level._eq_mix_track, 0.5 );
level._player thread turret_on_ads_press();
// level._player thread turret_on_fire_press();
}
turret_exit()
{
turret_mode( false );
turret_hud( false );
level.aa_turret_player Delete();
// level._player Unlink();
flag_set( "turret_control_complete" );
}
turret_mode( enable )
{
// MOVEMENT
level._player AllowCrouch( !enable );
level._player AllowProne( !enable );
if( enable )
{
// View
level._player HideViewModel();
level._player DisableWeapons();
// FOV
level._player.prev_fov = int( getdvar( "cg_fov" ) );
lerp_fov_overtime( 0.05, NX_ROCKET_TURRET_FOV_NORMAL );
// TURN
SetSavedDvar( "aim_scale_turn_rate", NX_ROCKET_TURRET_TURN_RATE );
}
else
{
// View
level._player ShowViewModel();
level._player EnableWeapons();
// FOV
lerp_fov_overtime( 0.05, level._player.prev_fov );
// TURN
SetSavedDvar( "aim_scale_turn_rate", 1.0 );
}
}
turret_view_build()
{
camera_org = GetEnt( "turret_view", "script_noteworthy" );
camera_mover = spawn_tag_origin();
camera_mover.origin = camera_org.origin;
camera_mover.angles = camera_org.angles;
barrel_mover = spawn_tag_origin();
barrel_mover.origin = camera_mover.origin;
barrel_mover.angles = camera_mover.angles;
// camera_mover thread turret_move_by_stick( 2, 2, 180, 180, 90, 30 );
level._player SetOrigin( camera_mover.origin );
level._player SetPlayerAngles( camera_mover.angles );
level._player PlayerLinkToDelta( camera_mover, "tag_origin", 0.0, 180, 180, 90, 25 );
level.turret_barrels = GetEntArray( "turret_barrel", "script_noteworthy" );
foreach( barrel in level.turret_barrels )
{
barrel_model = spawn_anim_model( "turret_barrel", barrel.origin );
barrel_model.angles = barrel.angles;
barrel_model LinkTo( barrel );
barrel.barrel_model = barrel_model;
barrel LinkTo( barrel_mover );
barrel.origin_o = barrel.origin;
}
barrel_mover thread link_to_player_view();
}
turret_controls_lookat()
{
camera_lookat = GetEnt( "turret_controls_lookat", "script_noteworthy" );
camera_org = spawn_tag_origin();
camera_org.origin = level._player.origin;
camera_org.angles = level._player.angles;
level._player.prev_origin = level._player.origin;
level._player.prev_angles = level._player.angles;
level._player PlayerLinkToDelta( camera_org, "tag_origin", 1.0, 180, 180, 90, 25 );
eye_pos = level._player GetEye();
camera_mover = spawn( "script_origin", camera_org.origin + ( eye_pos - camera_org.origin ) );
camera_mover.angles = camera_org.angles;
camera_org LinkTo( camera_mover );
camera_mover RotateTo( VectorToAngles( camera_lookat.origin - camera_mover.origin ), 0.8, 0.7 );
camera_mover waittill( "rotatedone" );
camera_mover MoveTo( camera_lookat.origin, 0.8, 0.2 );
camera_mover waittill( "movedone" );
camera_mover Delete();
}
link_to_player_view()
{
self endon( "death" );
self endon( "delete" );
while( 1 )
{
self.angles = level._player GetPlayerViewAngles();
wait 0.05;
}
}
//////////////////////////
// HUD //
//////////////////////////
turret_hud( enable )
{
if( enable )
level._player thread turret_hud_create();
else
level._player turret_hud_destroy();
}
turret_hud_create()
{
level.turret_hud = [];
VisionSetThermal( "oilrig_underwater" );
VisionSetNight( "oilrig_underwater" );
// self ThermalVisionOn();
// self NightVisionOn();
static = NewClientHudElem( self );
static.horzAlign = "fullscreen";
static.vertAlign = "fullscreen";
static SetShader( "ac130_overlay_grain", 640, 480 );
static.alpha = 1.0;
static thread hud_element_alpha( NX_ROCKET_TURRET_STATIC_ALPHA, 1.5 );
level.turret_hud[ "static" ] = static;
black_overlay = newClientHudElem( level._player );
black_overlay.x = 0;
black_overlay.y = 0;
black_overlay.alignX = "left";
black_overlay.alignY = "top";
black_overlay.horzAlign = "fullscreen";
black_overlay.vertAlign = "fullscreen";
black_overlay setshader( "black", 640, 480 );
black_overlay.sort = -10;
black_overlay.alpha = 0.0;
level.turret_hud[ "black" ] = black_overlay;
turret_reticle = newClientHudElem( level._player );
turret_reticle setshader( "nx_aa_turret_overlay", 640, 320 );
turret_reticle.x = 0;
turret_reticle.y = 0;
turret_reticle.alignx = "center";
turret_reticle.aligny = "middle";
turret_reticle.horzAlign = "center";
turret_reticle.vertAlign = "middle";
level.turret_hud[ "reticle" ] = turret_reticle;
stripe = newClientHudElem( level._player );
stripe.x = 0;
stripe.y = 0;
stripe.alignX = "left";
stripe.alignY = "top";
stripe.horzAlign = "fullscreen";
stripe.vertAlign = "top";
stripe setshader( "black", 640, 120 );
stripe.alpha = 0.05;
stripe thread hud_stripe_update();
level.turret_hud[ "stripe" ] = stripe;
}
turret_hud_destroy()
{
level.turret_hud[ "black" ].alpha = 1;
level.turret_hud[ "static" ].alpha = 1;
level.turret_hud[ "reticle" ].alpha = 0;
wait 2.0;
foreach( element in level.turret_hud )
{
element Destroy();
}
level._player ThermalVisionOff();
}
hud_stripe_update()
{
self endon("death");
speed = 50; //pixels per sec
interval = 0.05;
while( 1 )
{
if( self.y > 480 )
self.y = -120;
self.y += speed / ( 1/interval );
wait interval;
}
}
hud_element_alpha( alpha, time )
{
self thread fade_over_time( alpha, time );
}
turret_on_ads_press()
{
self endon( "turret_exit" );
while( 1 )
{
self turret_waittill_ads_pressed();
self turret_waittill_ads_released();
level.turret_hud[ "static" ].alpha = 1.0;
lerp_fov_overtime( 0.05, NX_ROCKET_TURRET_FOV_ZOOM_01 );
level.turret_hud[ "static" ] hud_element_alpha( NX_ROCKET_TURRET_STATIC_ALPHA, 1.0 );
wait 0.25;
self turret_waittill_ads_pressed();
self turret_waittill_ads_released();
level.turret_hud[ "static" ].alpha = 1.0;
lerp_fov_overtime( 0.05, NX_ROCKET_TURRET_FOV_ZOOM_02 );
level.turret_hud[ "static" ] hud_element_alpha( NX_ROCKET_TURRET_STATIC_ALPHA, 1.0 );
wait 0.25;
self turret_waittill_ads_pressed();
self turret_waittill_ads_released();
level.turret_hud[ "static" ].alpha = 1.0;
lerp_fov_overtime( 0.05, NX_ROCKET_TURRET_FOV_NORMAL );
level.turret_hud[ "static" ] hud_element_alpha( NX_ROCKET_TURRET_STATIC_ALPHA, 1.0 );
wait 0.25;
}
}
turret_on_fire_press()
{
self endon( "turret_exit" );
while( 1 )
{
self turret_waittill_fire_pressed();
self thread turret_fire_start();
self turret_waittill_fire_released();
self thread turret_fire_stop();
wait 0.5;
}
}
turret_fire_start()
{
self endon( "turret_stop_fire" );
self endon( "turret_exit" );
interval = 1 / NX_ROCKET_TURRET_FIRE_RATE;
curr_barrel = 0;
while( 1 )
{
level.turret_hud[ "static" ].alpha = RandomFloatRange( 0.5, 0.6 );
level.turret_hud[ "black" ].alpha = RandomFloatRange( 0.1, 0.2 );
level.turret_hud[ "static" ] thread hud_element_alpha( NX_ROCKET_TURRET_STATIC_ALPHA, interval*2.0 );
level.turret_hud[ "black" ] thread hud_element_alpha( 0, interval*0.5 );
barrel = level.turret_barrels[ curr_barrel ];
tag_origin = barrel.barrel_model GetTagOrigin( "tag_flash" );
tag_angles = barrel.barrel_model GetTagAngles( "tag_flash" );
angles_to_target = level._player GetPlayerViewAngles();
aim_forward = AnglesToForward( angles_to_target );
aim_up = AnglesToUp( angles_to_target );
bullet_start = tag_origin;
bullet_end = bullet_start + ( aim_forward * 30000 );
MagicBullet( "nx_rocket_aa_turret", bullet_start, bullet_end );
//level thread draw_line_for_time( bullet_start, bullet_end, 1, 0, 0, interval );
fx_org = bullet_start;
fx_forward = aim_forward;
fx_up = aim_up;
playfx( level._effect[ "nx_rocket_aa_flash_view" ], fx_org, fx_forward, fx_up );
Earthquake( 0.2, 0.3, barrel.origin, 300 );
curr_barrel++;
if( curr_barrel >= level.turret_barrels.size )
curr_barrel = 0;
wait interval;
}
}
#using_animtree( "vehicles" );
barrel_recoil()
{
self endon( "death" );
self endon( "delete" );
// #using_animtree( "vehicles" );
self UseAnimTree( #animtree );
self SetAnimRestart( %nx_vh_ugv_main_turret_fire, 1, 0, 1 );
// back_vec = vector_multiply( AnglesToForward( self.angles ), -100 );
//
// dest = self.origin_o + back_vec;
// self MoveTo( dest, 0.5 );
// self waittill( "movedone" );
// self MoveTo( self.origin_o, 0.75 );
}
turret_fire_stop()
{
self notify( "turret_stop_fire" );
}
turret_waittill_ads_pressed()
{
while( ( self AdsButtonPressed() ) )
{
wait 0.05;
}
}
turret_waittill_ads_released()
{
while( !( self AdsButtonPressed() ) )
{
wait 0.05;
}
}
turret_waittill_fire_pressed()
{
while( !( self AttackButtonPressed() ) )
{
wait 0.05;
}
}
turret_waittill_fire_released()
{
while( self AttackButtonPressed() )
{
wait 0.05;
}
}
turret_camera_fire_static()
{
self endon( "turret_stop_fire" );
while( 1 )
{
transition_time = RandomFloatRange( 0.15, 0.25 );
static_alpha = RandomFloatRange( 0.4, 0.8 );
black_alpha = RandomFloatRange( 0.1, 0.25 );
level.turret_hud[ "black" ].alpha = black_alpha;
level.turret_hud[ "static" ].alpha = static_alpha;
wait transition_time;
}
}
turret_barrel_fire_stop( )
{
self notify( "turret_stop_fire" );
}
//////////////////////////
// ROCKETS //
//////////////////////////
rockets_init()
{
level.turret_rockets = [];
level.rocket_number = 15;
foreach( rocket in GetEntArray( "turret_rocket", "script_noteworthy" ) )
{
rocket rocket_init();
level.turret_rockets[ rocket.targetname ] = rocket;
}
level.turret_rockets[ "rocket_01" ] rocket_launch( 0.0, 60, 1200 );
level.turret_rockets[ "rocket_03" ] rocket_launch( 0.0, 60, 1800 );
level.turret_rockets[ "rocket_02" ] rocket_launch( 0.0, 60, 2000 );
level.turret_rockets[ "rocket_04" ] rocket_launch( 0.0, 60, 2200 );
}
rocket_init()
{
self.damage_collision = GetEnt( self.target, "targetname" );
self.pieces = [];
self.pieces[ self.pieces.size ] = spawn_anim_model( "rocket_shuttle_exp1_010" );
self.pieces[ self.pieces.size ] = spawn_anim_model( "rocket_shuttle_exp1_011" );
self.pieces[ self.pieces.size ] = spawn_anim_model( "rocket_shuttle_exp1_012" );
foreach( piece in self.pieces )
{
piece.origin = self.origin;
piece LinkTo( self );
}
self.damage_collision.health = 8000;
self.damage_collision SetCanDamage( true );
self.damage_collision thread rocket_piece_on_damage();
self.damage_collision thread rocket_piece_on_death( self );
self.damage_collision LinkTo( self );
self thread anim_first_frame( self.pieces, "rocket_shuttle_exp1" );
trail_tag = spawn_tag_origin();
trail_tag.origin = self.origin;
// trail_tag.angles = ( 270, 0, 0 );
trail_tag LinkTo( self );
self.trail_tag = trail_tag;
PlayFXOnTag( GetFX( "nx_smoke_rocket_afterburner_liftoff" ), self.trail_tag, "tag_origin" );
self.angles = self.angles + (0, RandomFloatRange( 0, 360 ), 0);
}
rocket_piece_on_damage()
{
self endon( "death" );
while( 1 )
{
self waittill( "damage" );
wait 0.05;
}
}
rocket_piece_on_death( rocket )
{
self waittill( "death" );
rocket thread rocket_death();
}
rocket_death()
{
self thread rocket_final();
self thread rocket_death_static();
thread maps\nx_rocket_fx::aa_rocket_hit_fx( self.pieces[0], self.pieces[1], self.pieces[2] );
PlayFX( GetFX( "rocket_explosion" ), self.origin + (0, 0, 1000) );
thread audio_rocket_explosion(self.origin);
StopFXOnTag( GetFX( "nx_smoke_rocket_afterburner_liftoff" ), self.trail_tag, "tag_origin" );
RadiusDamage( self.origin, 5000, 1000, 1000 );
// Objective_state( self.rocket_number, "done" );
self anim_single( self.pieces, "rocket_shuttle_exp1" );
wait 0.05;
// self Delete();
self rocket_cleanup();
}
audio_rocket_explosion(placetoplay)
{
explosionsoundemitter = spawn( "sound_emitter", placetoplay );
explosionsoundemitter playsound ("rocket_explosion_big2");
}
rocket_death_static()
{
level.turret_hud[ "static" ] thread hud_element_alpha( 1.0, 0.1 );
wait 0.5;
level.turret_hud[ "static" ] thread hud_element_alpha( 0.0, 2.0 );
}
rocket_cleanup()
{
foreach( piece in self.pieces )
{
piece Delete();
}
self.damage_collision Delete();
self Delete();
}
rocket_on_damage()
{
self endon( "death" );
while( 1 )
{
self waittill( "damage" );
// iPrintlnBold( self.health );
wait 0.05;
}
}
rocket_launch( delay, travel_time, start_height )
{
wait (delay);
// self playsound("rocket_launch_alarm"); //play the alarm on that rocket
// wait 2.0;
// self playsound("rocket_launching_long"); //play the rocket launching sound
self.origin += (0, 0, start_height );
self MoveTo( self.origin + (0,0,24000), travel_time );
self.rocket_number = level.rocket_number;
// self thread rocket_on_death( level.rocket_number );
// self thread rocket_on_damage();
// Objective_Add( level.rocket_number, "current" );
// Objective_OnEntity( level.rocket_number, self.pieces[0], (0,0, 2500) );
level.rocket_number++;
self thread rocket_on_flight_complete();
// self Delete();
// MISSION FAIL HERE
}
rocket_on_flight_complete()
{
// self endon( "death" );
// self endon( "delete" );
self.damage_collision endon( "death" );
self waittill( "movedone" );
// self stopsounds();
// self Kill();
SetDvar( "ui_deadquote", "ROCKET ESCAPED" );
level notify( "mission_failed" );
maps\_utility::missionFailedWrapper();
}
rocket_final()
{
foreach( rocket in level.turret_rockets )
{
if( IsAlive( rocket.damage_collision ) )
{
return;
}
}
self notify( "turret_exit" );
level._player notify( "turret_exit" );
debris = spawn( "script_model", self.origin );
debris Hide();
wait 0.1;
debris Show();
debris SetModel( "nx_rocket_viz_lg_01_dmg" );
// eye_origin = level.aa_turret_player GetTagOrigin( "tag_player" );
// view_angles = VectorToAngles( debris.origin - eye_origin );
// player_view_angles = level._player GetPlayerViewAngles();
// level._player LerpViewAngleClamp( 0.5, 0.25, 0.25, player_view_angles[1], player_view_angles[1], player_view_angles[2], player_view_angles[2] );
// level.aa_turret_player makeTurretInoperable();
// level.aa_turret_player SetTargetEntity( debris );
SetSavedDvar( "aim_scale_turn_rate", 0 );
fall_time = 3.0;
debris MoveTo( level.aa_turret_player.origin + (0, 0, -50), fall_time, fall_time );
debris RotateTo( ( RandomFloatRange(0, 360), RandomFloatRange(0, 360), RandomFloatRange(0, 360) ), 4.0 );
Earthquake( 0.5, fall_time, level.aa_turret_player GetTagOrigin( "tag_player" ), 300 );
// debris waittill( "movedone" );
wait( fall_time - 0.05 );
turret_exit();
}
//////////////////////////
// CHOPPERS //
//////////////////////////
chopper_init()
{
// ally_spawners = GetEntArray( "chopper_turret_control_ally", "script_noteworthy" );
//
// foreach( spawner in ally_spawners )
// {
// chopper = vehicle_spawn( spawner );
// chopper GoPath();
// }
// enemy_spawners = GetEntArray( "chopper_turret_control", "script_noteworthy" );
//
// foreach( spawner in enemy_spawners )
// {
// chopper = vehicle_spawn( spawner );
// chopper GoPath();
// }
}
turret_exit_player()
{
self SetOrigin( self.prev_origin );
self SetPlayerAngles( self.prev_angles );
flag_set( "turret_control_complete" );
}
turret_earthquake()
{
self endon( "vignette_aa_control_exit" );
earthquake_source = GetEnt( "turret_controls_lookat", "script_noteworthy" );
earthquake_radius = 1000;
while( 1 )
{
wait RandomFloatRange( 0.0, 2.0 );
earthquake_length = RandomFloatRange( 1.0, 4.0 );
earthquake_scale = RandomFloatRange( 0.1, 0.2 );
Earthquake( earthquake_scale, earthquake_length, earthquake_source.origin, earthquake_radius );
theta = RandomFloatRange( 0, 360 );
r = RandomFloatRange( 0, 64 );
fx_offset = ( cos( level._player.angles[1] ) * r, sin( level._player.angles[1] ) * r, 50 );
PlayFX( GetFX( "nx_hallway_collapsing_big" ), level._player.origin + fx_offset );
exploder("hallway_fx");
wait earthquake_length;
}
}
objective_breach()
{
// BREACH
wait 2.0;
breach_objective_marker = GetEnt( "turret_base_breach_objective", "targetname" );
Objective_ClearAllAdditionalEntities( obj( "OBJ_THROUGH_AA_BASE" ) );
Objective_State( obj( "OBJ_THROUGH_AA_BASE" ), "current" );
Objective_SetPointerTextOverride( obj("OBJ_THROUGH_AA_BASE"), "" );
Objective_OnEntity( obj( "OBJ_THROUGH_AA_BASE" ), breach_objective_marker );
// TURRET
level._player waittill( "breached" );
turret_objective_marker = GetEnt( "turret_base_turret_objective", "targetname" );
Objective_ClearAllAdditionalEntities( obj( "OBJ_THROUGH_AA_BASE" ) );
Objective_State( obj( "OBJ_THROUGH_AA_BASE" ), "current" );
Objective_SetPointerTextOverride( obj("OBJ_THROUGH_AA_BASE"), "" );
Objective_OnEntity( obj( "OBJ_THROUGH_AA_BASE" ), turret_objective_marker );
}
//*******************************************************************
// *
// *
//*******************************************************************
section_dialogue()
{
flag_wait( "discovered_turret_control" );
// maps\nx_rocket_util::wait_play_dialogue_wait( 0, "roc_wil_tubase_leadtheway" );
// level thread add_dialogue_line( "Williams", "Lockwood, you lead the way. We got your back.", undefined, 3.0 );
flag_wait( "turret_control_turret_ready" );
// level thread add_dialogue_line( "Williams", "Lockwood, take the controls. Let's take the rest of these bastards down.", undefined, 3.0 );
maps\nx_rocket_util::wait_play_dialogue_wait( 0, "roc_wil_trctrl_takethecontrols" );
flag_wait( "turret_control_complete" );
maps\nx_rocket_util::wait_play_dialogue_wait( 3, "roc_wil_trctrl_needtomove" );
// maps\nx_rocket_util::wait_play_dialogue_wait( 0, "roc_will_trctrl_jenkinsgetdoor" );
maps\nx_rocket_util::wait_play_dialogue_wait( 3, "roc_wil_trctrl_keepmoving" );
maps\nx_rocket_util::wait_play_dialogue_wait( 3, "roc_wil_trctrl_gogogo" );
// level thread add_dialogue_line( "Williams", "Jenkins! Get that door open!", undefined, 3.0 );
// wait 1.0;
// level thread add_dialogue_line( "Williams", "Move! Move! Move!", undefined, 3.0 );
// wait 4.0;
// level thread add_dialogue_line( "Williams", "Lockwood! Get out of here!", undefined, 3.0 );
// wait 6.0;
// level thread add_dialogue_line( "Williams", "Keep moving!", undefined, 3.0 );
}
section_precache()
{
level._effect[ "rocket_explosion" ] = LoadFX( "nx/explosions/nx_explosion_rocket_01" );
level._effect[ "rocket_trail" ] = LoadFX( "misc/dcemp_icbm_trail" );
//level._effect[ "ceiling_dust" ] = LoadFX( "dust/ceiling_dust_default" );
PrecacheModel( "nx_rocket_viz_lg_01" );
PrecacheModel( "nx_rocket_viz_lg_01_dmg" );
PreCacheItem( "nx_rocket_aa_turret" );
// PreCacheItem( "nx_rocket_aa_turret_player" );
PreCacheShader( "nx_aa_turret_overlay" );
PreCacheShader( "ac130_overlay_grain" );
}
section_flag_inits()
{
flag_init( "discovered_turret_control" );
flag_init( "turret_control_complete" );
flag_init( "turret_control_entered" );
flag_init( "vignette_aa_control_melee" );
flag_init( "vignette_aa_control_exit" );
flag_init( "turret_control_turret_ready" );
flag_init( "turret_control_controls_entered" );
flag_init( "turret_control_player_breached" );
}