mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-19 07:42:54 +00:00
1145 lines
30 KiB
Plaintext
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" );
|
|
}
|