mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-23 17:45:47 +00:00
1001 lines
30 KiB
Plaintext
1001 lines
30 KiB
Plaintext
//****************************************************************************
|
|
// **
|
|
// Confidential - (C) Activision Publishing, Inc. 2010 **
|
|
// **
|
|
//****************************************************************************
|
|
// **
|
|
// Module: MISSION DESCRIPTION **
|
|
// **
|
|
// Created: 7/15/2011 - Ken Moodie **
|
|
// **
|
|
//****************************************************************************
|
|
|
|
|
|
#include maps\_utility;
|
|
#include maps\_utility_code;
|
|
#include maps\_nx_objective_util;
|
|
#include common_scripts\utility;
|
|
#include maps\_anim;
|
|
#include maps\_vehicle;
|
|
#include maps\_nx_utility;
|
|
#include maps\nx_skyscraper_util;
|
|
|
|
//*******************************************************************
|
|
// RAPPEL *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
rappel_start()
|
|
{
|
|
level._player maps\_nx_utility::move_player_to_start_point( "playerstart_rappel" );
|
|
thread maps\nx_skyscraper_fx::set_vision_and_fog("exterior_up_high", 0); // set appropriate vision and fog
|
|
maps\nx_skyscraper_util::player_weapon_init( true );
|
|
|
|
thread maps\_utility::set_ambient( "amb_skyscraper_office_int" );
|
|
|
|
maps\nx_skyscraper_util::spawn_baker();
|
|
baker_teleport = GetEnt ("baker_rappel_teleport", "targetname");
|
|
level.baker ForceTeleport( baker_teleport.origin, baker_teleport.angles);
|
|
|
|
Exploder( "fx_office_inferno" );
|
|
|
|
// Show cloud ring.
|
|
thread fx_show_cloud_ring();
|
|
|
|
flag_set( "flag_vtol_floor_collapse_done" );
|
|
wait .1;
|
|
level notify ("office_enemies_dead");
|
|
wait .1;
|
|
|
|
// tagBR< HACK >: Uncomment these to teleport to just before the jump-out point
|
|
//wait 1;
|
|
//IPrintLnBold( "teleporting..." );
|
|
//level._player SetOrigin( ( -448, -877, 29576 ) );
|
|
}
|
|
|
|
rappel_sequence()
|
|
{
|
|
|
|
level thread uav_reveal_sequence();
|
|
level thread retether_sequence();
|
|
level thread debris_control();
|
|
level thread falling_landing_pad();
|
|
level thread baker_rappel_control();
|
|
|
|
level thread rappel_fx();
|
|
|
|
//trigger = GetEnt ("rappel_hook_up_point", "targetname");
|
|
//trigger = GetEnt ("rappel_start", "targetname");
|
|
//trigger waittill ("trigger");
|
|
flag_wait("flag_rappel_jump_start");
|
|
thread autosave_now();
|
|
|
|
level thread decoy_heli();
|
|
level thread break_jump_glass();
|
|
Stop_Exploder( "fx_office_inferno" );
|
|
|
|
rappel_jumpout_start();
|
|
|
|
level thread boss_heli_sequence();
|
|
level thread washerbot_control();
|
|
level thread rappel_slide_slowmo();
|
|
level thread rappel_laser_start();
|
|
|
|
// radial blur - uncomment this line to turn it on.
|
|
thread maps\nx_skyscraper_fx::player_rappel_blur();
|
|
|
|
level._player maps\_rappel::rappel_setup( "rappel_tether_pos_and_angles", 1500, 1.5 );
|
|
|
|
flag_wait ("flag_rappel_swing_done");
|
|
|
|
}
|
|
|
|
baker_rappel_control()
|
|
{ guys = [];
|
|
guys["ally_01"] = level.baker;
|
|
node = getstruct("rappel_bakersign", "script_noteworthy");
|
|
flag_wait( "flag_baker_section_01" );
|
|
node anim_single(guys, "rappel_baker_section_01");
|
|
//flag_wait( "flag_bakersign" );
|
|
node anim_single(guys, "rappel_bakersign");
|
|
//flag_wait( "flag_baker_section_02" );
|
|
node anim_single(guys, "rappel_baker_section_02");
|
|
//flag_wait( "flag_bakerwindow" );
|
|
node anim_single(guys, "rappel_bakerwindow");
|
|
//flag_wait( "flag_baker_section_03" );
|
|
node anim_single(guys, "rappel_baker_section_03");
|
|
}
|
|
|
|
retether_sequence()
|
|
{
|
|
flag_wait("flag_retether2");
|
|
retether_position = getstruct("retether_pos2", "targetname");
|
|
level._tether_pos = retether_position.origin;
|
|
}
|
|
|
|
uav_reveal_sequence()
|
|
{
|
|
|
|
// trigger_wait_targetname( "trigger_rappel_location" );
|
|
|
|
// spawn Baker and send him to the node by the pillar
|
|
// rappel_hookup_baker = spawn_targetname( "rappel_hookup_baker", true);
|
|
level.baker.goalradius = 8;
|
|
baker_node = GetNode("node_baker_rappel_hookup", "targetname");
|
|
wait 0.25;
|
|
level.baker SetGoalNode( baker_node );
|
|
|
|
//thread add_dialogue_line( "Baker", "Let's find a place to hook up for our descent.", "g" );
|
|
level.baker dialogue_queue( "sky_bak_rappel_findplacehookup" );
|
|
|
|
// glowing button objective stuff
|
|
button = GetEnt( "brushmodel_rappel_hookup", "targetname" );
|
|
button_active = GetEnt( "brushmodel_rappel_hookup_active", "targetname" );
|
|
button_trigger = GetEnt( "trigger_rappel_button_use", "targetname" );
|
|
|
|
|
|
// Enable button objective
|
|
//trigger_wait_targetname( "trigger_rappel_location" );
|
|
|
|
level.baker waittill("goal");
|
|
//thread add_dialogue_line( "Baker", "All right. Let's hook up here.", "g" );
|
|
level.baker dialogue_queue( "sky_bak_rappel_hookuphere" );
|
|
|
|
button_trigger trigger_on();
|
|
|
|
button hide();
|
|
button_active show();
|
|
|
|
//button_trigger sethintstring( &"NX_SKYSCRAPER_OBJ_HALON_BUTTON" );
|
|
button_trigger sethintstring( "Press X to hook up for rappel" );
|
|
button_trigger waittill( "trigger" );
|
|
button_trigger trigger_off();
|
|
button show();
|
|
button_active hide();
|
|
level notify ("rappel_hook_up_start");
|
|
|
|
// Baker play the hookup anim
|
|
node = GetEnt( "node_baker_hookup_vignette", "script_noteworthy");
|
|
baker = level.baker;
|
|
// baker.animname = "baker";
|
|
node anim_reach_solo (baker, "rappel_setup");
|
|
node thread anim_single_solo (baker, "rappel_setup" );
|
|
// Play the player hookup anim
|
|
level._player FreezeControls( true );
|
|
level._player allowprone( false );
|
|
level._player allowcrouch( false );
|
|
level._player DisableWeapons( true );
|
|
player_rig = spawn_anim_model( "player_rig" );
|
|
arc = 15;
|
|
level._player PlayerLinkToDelta( player_rig, "tag_player", 1, arc, arc, arc, arc, 1);
|
|
|
|
player_node = GetEnt( "node_player_hookup_vignette", "script_noteworthy" );
|
|
|
|
player_node anim_single_solo( player_rig, "hookup" );
|
|
// reveal the uav
|
|
wait 1.0;
|
|
/* level._player.ignoreme = true;
|
|
level.heli1 = spawn_vehicle_from_targetname_and_drive( "reveal_uav" );
|
|
level.heli1 Vehicle_SetSpeed( 15 );
|
|
level.heli1 godon();
|
|
level.heli1 SetLookAtEnt( level._player );
|
|
wait 1.0;
|
|
thread add_dialogue_line( "Baker", "Shit! UAV! Let's move!", "g" );
|
|
wait 3.75; */
|
|
|
|
thread maps\_utility::set_ambient( "amb_skyscraper_windy_ext" );
|
|
flag_set("flag_rappel_jump_start");
|
|
}
|
|
|
|
|
|
break_jump_glass()
|
|
{
|
|
wait 1.5;
|
|
//glass_triggers = GetEntArray( "jump_glass", "script_noteworthy");
|
|
glass_triggers = GetGlassArray( "jump_glass" );
|
|
foreach( glass_trigger in glass_triggers )
|
|
{
|
|
DestroyGlass( glass_trigger, (0, 1, 0) );
|
|
wait 0.1;
|
|
//DestroyGlass( glass_trigger );
|
|
}
|
|
}
|
|
|
|
rappel_fx()
|
|
{
|
|
PlayFx( level._effect[ "cloud_bank_gulag" ], (-256, -2432, 29440 ));
|
|
wait 0.25;
|
|
PlayFx( level._effect[ "cloud_bank_gulag" ], (384, -2560, 28800 ));
|
|
wait 0.25;
|
|
PlayFx( level._effect[ "cloud_bank_gulag" ], (-384, -2400, 27840 ));
|
|
wait 0.25;
|
|
PlayFx( level._effect[ "cloud_bank_gulag" ], (-48, -2464, 22320 ));
|
|
}
|
|
|
|
rappel_jumpout_start()
|
|
{
|
|
|
|
level thread rappel_fov();
|
|
|
|
//node = getstruct("rappel_jump", "script_noteworthy");
|
|
node = getstruct("rappel_jump_new", "script_noteworthy");
|
|
// rappel_jump_baker = spawn_targetname( "rappel_jump_baker", true);
|
|
// rappel_jump_baker.animname = "rappel_jump_baker";
|
|
|
|
level._player FreezeControls( true );
|
|
level._player allowprone( false );
|
|
level._player allowcrouch( false );
|
|
|
|
player_rig = spawn_anim_model( "player_rig" );
|
|
|
|
guys = [];
|
|
guys["player_rig"] = player_rig;
|
|
guys["ally_01"] = level.baker;
|
|
|
|
arc = 5;
|
|
|
|
level._player PlayerLinkToDelta( player_rig, "tag_player", 1, arc, arc, arc, arc, 1);
|
|
|
|
node anim_single(guys, "rappel_jump");
|
|
|
|
level._player unlink();
|
|
|
|
player_rig delete();
|
|
|
|
level._player FreezeControls( false );
|
|
level._player allowprone( true );
|
|
level._player allowcrouch( true );
|
|
}
|
|
|
|
rappel_fov()
|
|
{
|
|
wait 3.5;
|
|
lerp_fov_overtime( 1, 70 );
|
|
}
|
|
|
|
decoy_heli()
|
|
{
|
|
level._player.ignoreme = true;
|
|
heli = spawn_vehicle_from_targetname_and_drive( "decoy_heli" );
|
|
heli Vehicle_SetSpeed( 20 );
|
|
heli SetLookAtEnt( level._player );
|
|
end_heli = spawn_vehicle_from_targetname("end_heli");
|
|
}
|
|
|
|
|
|
|
|
boss_heli_sequence()
|
|
{
|
|
|
|
//thread physobj_volume_control();
|
|
level._player.ignoreme = true;
|
|
fire_offset = 100;
|
|
// heli rocket firing sequence
|
|
flag_wait( "flag_spawn_heli1" );
|
|
level.heli1 = spawn_vehicle_from_targetname_and_drive( "placement_heli1" );
|
|
level.heli1 Vehicle_SetSpeed( 50 );
|
|
level.heli1 godon();
|
|
level.heli1 SetLookAtEnt( level._player );
|
|
//
|
|
wait 0.15;
|
|
heli_target01 = GetEnt("heli_target01", "targetname");
|
|
thread heli_target_missile( level.heli1, heli_target01, 0.7, 0 );
|
|
wait 0.5;
|
|
heli_target02 = GetEnt("heli_target02", "targetname");
|
|
thread heli_target_missile( level.heli1, heli_target02, 0.7, 0 );
|
|
wait 0.5;
|
|
heli_target03 = GetEnt("heli_target03", "targetname");
|
|
thread heli_target_missile_with_fire( level.heli1, heli_target03, 0.8, 0 );
|
|
//flag_wait("flag_rappel_incline_end");
|
|
wait 0.8;
|
|
PhysicsExplosionSphere( heli_target03.origin , 2000, 1999, 1 );
|
|
wait 0.8;
|
|
heli_target04 = GetEnt("heli_target04", "targetname");
|
|
thread heli_target_missile( level.heli1, heli_target04, 1.25, -100 );
|
|
wait 0.20;
|
|
heli_target05 = GetEnt("heli_target05", "targetname");
|
|
heli_target05_debris = GetEnt( "heli_target05_debris", "script_noteworthy" );
|
|
thread heli_target_missile_with_fire( level.heli1, heli_target05, 1.25, -100, heli_target05_debris );
|
|
wait 0.20;
|
|
incline_target = GetEnt("incline_target01", "targetname");
|
|
incline_target_debris = GetEnt( "incline_target01_debris", "script_noteworthy" );
|
|
thread heli_target_missile_with_fire( level.heli1, incline_target, 1.75, -100, incline_target_debris );
|
|
wait 0.75;
|
|
//physics explosions for desks hit by the above rockets.
|
|
explosion_target = GetEnt("heli_target04", "targetname");
|
|
PhysicsExplosionSphere( explosion_target.origin + (0, 60, 0), 2000, 1999, 1 );
|
|
wait 0.2;
|
|
explosion_target = GetEnt("heli_target05", "targetname");
|
|
PhysicsExplosionSphere( explosion_target.origin + (0, 60, 0), 2000, 1999, 1 );
|
|
|
|
// spawn the next helicopter
|
|
flag_wait( "flag_spawn_heli2" );
|
|
level.heli1 kill();
|
|
level.heli2 = spawn_vehicle_from_targetname_and_drive( "placement_heli2" );
|
|
level.heli2 Vehicle_SetSpeed( 10 );
|
|
level.heli2 godon();
|
|
level.heli2 SetLookAtEnt( level._player );
|
|
wait 0.25;
|
|
target = GetEnt("heli_target10", "targetname");
|
|
MagicBullet( "rpgx_straight", level.heli2.origin+ (0, fire_offset, 0), target.origin);
|
|
target = GetEnt("heli_target07", "targetname");
|
|
MagicBullet( "rpgx_straight", level.heli2.origin+ (0, fire_offset, 0), target.origin);
|
|
//wait 0.75;
|
|
// physic push letters
|
|
explosion_base = GetEnt("explosion_base02", "targetname");
|
|
PhysicsExplosionSphere( explosion_base.origin, 2000, 1999, 1 );
|
|
PlayFX( level._effect["nx_explosion_skybridge"], explosion_base.origin );
|
|
wait 0.5;
|
|
PlayFX( level._effect["nx_explosion_skybridge"], explosion_base.origin + (0, 0, -400));
|
|
wait 0.5;
|
|
PlayFX( level._effect["nx_explosion_skybridge"], explosion_base.origin + (0, 0, -800));
|
|
//
|
|
//wait 0.05;
|
|
ledge_target01 = GetEnt( "ledge_target01", "targetname" );
|
|
ledge_target01_debris = GetEnt( "ledge_target01_debris", "script_noteworthy" );
|
|
thread heli_target_missile_with_fire( level.heli2, ledge_target01, 1.0, -100, ledge_target01_debris );
|
|
wait 0.1;
|
|
ledge_target02 = GetEnt( "ledge_target02", "targetname" );
|
|
thread heli_target_missile_with_fire( level.heli2, ledge_target02, 1.25, -100 );
|
|
// physics push the building supports
|
|
wait 0.85;
|
|
explosion_base = GetEnt("support_target1", "targetname");
|
|
PhysicsExplosionSphere( explosion_base.origin, 200, 199, 1 );
|
|
wait 0.1;
|
|
explosion_base = GetEnt("support_target2", "targetname");
|
|
PhysicsExplosionSphere( explosion_base.origin, 200, 199, 1 );
|
|
//
|
|
// Spawn the next 2 helicopters
|
|
flag_wait( "flag_spawn_heli3" );
|
|
thread spawn_and_kill_wreckage_chopper();
|
|
|
|
level.heli2 kill();
|
|
level.heli3 = spawn_vehicle_from_targetname_and_drive( "placement_heli3" );
|
|
level.heli3 Vehicle_SetSpeed( 50 );
|
|
level.heli3 godon();
|
|
level.heli3 SetLookAtEnt( level._player );
|
|
level.heli4 = spawn_vehicle_from_targetname_and_drive( "placement_heli4" );
|
|
level.heli4 Vehicle_SetSpeed( 5 );
|
|
level.heli4 godon();
|
|
level.heli4 SetLookAtEnt( level._player );
|
|
//
|
|
wait 0.1;
|
|
target = GetEnt("mid_target01", "targetname");
|
|
target_debris = GetEnt( "mid_target01_debris", "script_noteworthy" );
|
|
//MagicBullet( "rpgx_straight", level.heli3.origin+ (0, fire_offset, 0), target.origin);
|
|
thread heli_target_missile_with_fire( level.heli3, target, 1.25, -100, target_debris );
|
|
wait 0.7;
|
|
target = GetEnt("cleanerbot_target01", "targetname");
|
|
MagicBullet( "rpgx_straight", level.heli3.origin+ (0, fire_offset, 0), target.origin);
|
|
wait 1.2;
|
|
PlayFX( level._effect["nx_explosion_skybridge"], target.origin );
|
|
PhysicsExplosionSphere( target.origin, 20, 19, 0.5 );
|
|
//physics push the statue
|
|
//wait 0.95;
|
|
wait 0.20;
|
|
// wait 0.5;
|
|
target = GetEnt("statue_explo02", "targetname");
|
|
MagicBullet( "rpgx_straight", level.heli3.origin+ (0, fire_offset, 0), target.origin);
|
|
//wait 1.25;
|
|
wait 0.65;
|
|
PhysicsExplosionSphere( target.origin, 20, 19, 0.5 );
|
|
PlayFX( level._effect["nx_explosion_skybridge"], target.origin );
|
|
|
|
// Shoot at the player for a while
|
|
//wait 0.1;
|
|
//MagicBullet( "rpgx_straight", level.heli3.origin + (0, fire_offset, 0), level._player.origin + (0, 0, -1050));
|
|
|
|
// shoot and make a damaging fire for the player to dodge
|
|
facade_target = GetEnt("facade_target01", "targetname");
|
|
facade_target_debris = GetEnt( "facade_target01_debris", "script_noteworthy" );
|
|
thread heli_target_missile_with_fire( level.heli3, facade_target, 1.2, -100, facade_target_debris );
|
|
|
|
//physics push the 2nd statue
|
|
/* wait 0.5;
|
|
target = GetEnt("statue_explo03", "targetname");
|
|
MagicBullet( "rpgx_straight", level.heli4.origin+ (0, fire_offset, 0), target.origin);
|
|
wait 1.25;
|
|
PlayFX( level._effect["explosion_type_1"], target.origin );
|
|
PhysicsExplosionSphere( target.origin, 20, 19, 0.5 ); */
|
|
|
|
flag_wait( "flag_rappel_big_explosion" );
|
|
// fire missiles for the big explosion
|
|
targets = GetEntArray( "big_explo_target", "script_noteworthy" );
|
|
foreach ( target in targets )
|
|
{
|
|
MagicBullet( "rpgx_straight", level.heli4.origin + (0, fire_offset, 0), target.origin);
|
|
wait 0.25;
|
|
}
|
|
// Kick the objects
|
|
items = GetEntArray("origin_floorexplode5", "targetname");
|
|
foreach( item in items )
|
|
{
|
|
playFX( level._effect[ "nx_explosion_skybridge" ], item.origin );
|
|
|
|
//playFX( level._effect[ "firelp_large_pm_bh1" ], item.origin + (0, -175, 0));
|
|
playFX( level._effect[ "nx_smoke_n_fire_plume_preseed" ], item.origin + (0, -175, 0));
|
|
|
|
PhysicsExplosionSphere( item.origin, 256, 256, 2 );
|
|
}
|
|
// Delete the building pieces
|
|
pieces = GetEntArray( "building_pieces", "targetname" );
|
|
foreach( piece in pieces )
|
|
{
|
|
piece Delete();
|
|
}
|
|
//
|
|
level thread rappel_slowmo();
|
|
// after the slomo sequence blow up the chopper
|
|
//damage_target = GetEnt( "chopper_kill_spot", "targetname" );
|
|
//radiusdamage( damage_target.origin, 500, 5000, 5000 );
|
|
level.heli4 kill();
|
|
// Spawn the final heli
|
|
flag_wait( "flag_spawn_heli5" );
|
|
level.heli5 = spawn_vehicle_from_targetname_and_drive( "placement_heli5" );
|
|
level.heli5 Vehicle_SetSpeed( 30 );
|
|
level.heli5 godon();
|
|
level.heli5 SetLookAtEnt( level._player );
|
|
wait 0.1;
|
|
// Shoot at the bridge and kick it
|
|
explosion_base = GetEnt("bridge_explo_base01", "targetname");
|
|
explosion_base2 = GetEnt("bridge_explo_base02", "targetname");
|
|
explosion_base0 = GetEnt( "bridge_explo_base00", "targetname" );
|
|
//MagicBullet( "rpgx_straight", level.heli5.origin + (0, fire_offset, 0), explosion_base.origin);
|
|
thread heli_target_missile_with_fire( level.heli5, explosion_base0, 1.25, -100 );
|
|
wait 1.0;
|
|
PhysicsExplosionSphere( explosion_base.origin, 2000, 1999, 1 );
|
|
PhysicsExplosionSphere( explosion_base2.origin, 2000, 1999, 1 );
|
|
|
|
PlayFX( level._effect["nx_explosion_skybridge"], explosion_base.origin );
|
|
wait 0.25;
|
|
PlayFX( level._effect["nx_explosion_skybridge"], explosion_base2.origin );
|
|
|
|
// Shoot at the player some more
|
|
for (i=0; i < 2; i++)
|
|
{
|
|
wait 1.5;
|
|
side_offset = RandomIntRange(-50, 50);
|
|
MagicBullet( "rpgx_straight", level.heli5.origin + (0, fire_offset, 0), level._player.origin + (side_offset, 0, -1200));
|
|
}
|
|
// rapid fire rockets to get the player to swing
|
|
end_target = GetEnt("end_target01", "targetname");
|
|
thread heli_target_missile_with_fire( level.heli5, end_target, 1.0, -100 );
|
|
wait 0.75;
|
|
MagicBullet( "rpgx_straight", level.heli5.origin+ (0, fire_offset, 0), (64, -2608, 4176));
|
|
wait 0.75;
|
|
MagicBullet( "rpgx_straight", level.heli5.origin+ (0, fire_offset, 0), (-128, -2624, 4064));
|
|
wait 0.75;
|
|
//MagicBullet( "rpgx_straight", level.heli5.origin+ (0, fire_offset, 0), (-288, -2608, 3936));
|
|
|
|
//wait 0.75;
|
|
MagicBullet( "rpgx_straight", level.heli5.origin+ (0, fire_offset, 0), (-480, -2592, 3824));
|
|
wait 0.75;
|
|
}
|
|
|
|
heli_target_missile(heli, target, delay, fire_offset2 )
|
|
{
|
|
fire_offset = 150;
|
|
MagicBullet( "rpgx_straight", heli.origin + (0, fire_offset, fire_offset2), target.origin);
|
|
wait( delay );
|
|
//PlayFX( level._effect["explosion_type_1"], target.origin );
|
|
PlayFX( level._effect["nx_explosion_skybridge"], target.origin );
|
|
}
|
|
|
|
heli_target_missile_with_fire(heli, target, delay, fire_offset2, debris)
|
|
{
|
|
fire_offset = 150;
|
|
MagicBullet( "rpgx_straight", heli.origin + (0, fire_offset, fire_offset2), target.origin);
|
|
wait( delay );
|
|
//PlayFX( level._effect["explosion_type_1"], target.origin );
|
|
PlayFX( level._effect["nx_explosion_skybridge"], target.origin );
|
|
wait 0.2;
|
|
PlayFX( level._effect["nx_smoke_n_fire_plume_preseed"], target.origin );
|
|
if( IsDefined( debris ))
|
|
{
|
|
debris show();
|
|
}
|
|
}
|
|
|
|
spawn_and_kill_wreckage_chopper()
|
|
{
|
|
|
|
wreckage_chopper = spawn_vehicle_from_targetname_and_drive( "wreckage_chopper" );
|
|
wreckage_chopper Vehicle_SetSpeed( 5 );
|
|
wreckage_chopper godon();
|
|
wreckage_chopper SetLookAtEnt( level._player );
|
|
wait 0.1;
|
|
wreckage_chopper kill();
|
|
|
|
}
|
|
|
|
// Dan - Dyn_model entities do not live server side, so this is not going to work. Commenting out so no one copies it.
|
|
//physobj_volume_control()
|
|
//{
|
|
// volume = GetEnt( "physobj_kill_volume", "targetname" );
|
|
// while(1)
|
|
// {
|
|
// physobs = GetEntArray( "dyn_model", "classname");
|
|
// foreach( physob in physobs )
|
|
// {
|
|
// if( physob IsTouching( volume ))
|
|
// physob Delete();
|
|
// }
|
|
// wait 1.0;
|
|
// }
|
|
//}
|
|
|
|
rappel_slowmo()
|
|
{
|
|
// Don't slomo sounds
|
|
SoundSetTimeScaleFactor( "Mission", 0 );
|
|
SoundSetTimeScaleFactor( "Shellshock", 0 );
|
|
SoundSetTimeScaleFactor( "Voice", 0 );
|
|
SoundSetTimeScaleFactor( "Menu", 0 );
|
|
SoundSetTimeScaleFactor( "Effects1", 0 );
|
|
SoundSetTimeScaleFactor( "Effects2", 0 );
|
|
SoundSetTimeScaleFactor( "Announcer", 0 );
|
|
SoundSetTimeScaleFactor( "Music", 0 );
|
|
SoundSetTimeScaleFactor( "vignette3d", 0 );
|
|
SoundSetTimeScaleFactor( "vignette2d", 0 );
|
|
SoundSetTimeScaleFactor( "ambient", 0 );
|
|
SoundSetTimeScaleFactor( "weapon", 0 );
|
|
SoundSetTimeScaleFactor( "weapon2d", 0 );
|
|
SoundSetTimeScaleFactor( "auto2d", 0 );
|
|
SoundSetTimeScaleFactor( "auto", 0 );
|
|
SoundSetTimeScaleFactor( "element", 0 );
|
|
|
|
// Start slo motion
|
|
slowmo_speed = 0.20;
|
|
slowmo_setspeed_slow( slowmo_speed );
|
|
slowmo_setlerptime_in( 2.0 );
|
|
slowmo_lerp_in();
|
|
|
|
level._player SetMoveSpeedScale( 0.1 );
|
|
|
|
// Wait slo mo duration
|
|
real_time = 2.0;
|
|
wait real_time;
|
|
|
|
// Stop slo motion
|
|
slowmo_setlerptime_out( 0.65 );
|
|
slowmo_lerp_out();
|
|
slowmo_end();
|
|
level notify( "notify_slomo_end" );
|
|
|
|
}
|
|
|
|
rappel_slide_slowmo()
|
|
{
|
|
flag_wait("flag_swing_slide");
|
|
wait 8.0;
|
|
// Don't slomo sounds
|
|
SoundSetTimeScaleFactor( "Mission", 0 );
|
|
SoundSetTimeScaleFactor( "Shellshock", 0 );
|
|
SoundSetTimeScaleFactor( "Voice", 0 );
|
|
SoundSetTimeScaleFactor( "Menu", 0 );
|
|
SoundSetTimeScaleFactor( "Effects1", 0 );
|
|
SoundSetTimeScaleFactor( "Effects2", 0 );
|
|
SoundSetTimeScaleFactor( "Announcer", 0 );
|
|
SoundSetTimeScaleFactor( "Music", 0 );
|
|
SoundSetTimeScaleFactor( "vignette3d", 0 );
|
|
SoundSetTimeScaleFactor( "vignette2d", 0 );
|
|
SoundSetTimeScaleFactor( "ambient", 0 );
|
|
SoundSetTimeScaleFactor( "weapon", 0 );
|
|
SoundSetTimeScaleFactor( "weapon2d", 0 );
|
|
SoundSetTimeScaleFactor( "auto2d", 0 );
|
|
SoundSetTimeScaleFactor( "auto", 0 );
|
|
SoundSetTimeScaleFactor( "element", 0 );
|
|
|
|
// Start slo motion
|
|
slowmo_speed = 0.20;
|
|
slowmo_setspeed_slow( slowmo_speed );
|
|
slowmo_setlerptime_in( 2.0 );
|
|
slowmo_lerp_in();
|
|
|
|
level._player SetMoveSpeedScale( 0.1 );
|
|
|
|
// Wait slo mo duration
|
|
real_time = 4.0;
|
|
wait real_time;
|
|
|
|
// Stop slo motion
|
|
slowmo_setlerptime_out( 0.65 );
|
|
slowmo_lerp_out();
|
|
slowmo_end();
|
|
}
|
|
|
|
washerbot_control()
|
|
{
|
|
washerbot = GetEnt( "washerbot_mover", "targetname" );
|
|
botlight = GetEnt( "washerbot_light", "targetname" );
|
|
botlight.origin = ( botlight.origin[0] + 12, botlight.origin[1] + 6, botlight.origin[2] + 6);
|
|
botlight linkto( washerbot );
|
|
washerbot thread washerbot_move( 500, 0, 5 );
|
|
wait 5.0;
|
|
washerbot2 = GetEnt( "washerbot_mover2", "targetname" );
|
|
botlight2 = GetEnt( "washerbot_light2", "targetname" );
|
|
botlight2.origin = ( botlight2.origin[0] + 12, botlight2.origin[1] + 6, botlight2.origin[2] + 6);
|
|
botlight2 linkto( washerbot2 );
|
|
washerbot2 thread washerbot_move( 0, -5000, 50 );
|
|
}
|
|
|
|
washerbot_move(horiz, vert, time )
|
|
{
|
|
//time = 5;
|
|
while(1)
|
|
{
|
|
self MoveTo( self.origin + (horiz, 0, vert), time, 1, 1);
|
|
wait time;
|
|
self MoveTo( self.origin - (horiz, 0, vert), time, 1, 1);
|
|
wait time;
|
|
}
|
|
}
|
|
|
|
debris_control()
|
|
{
|
|
pieces = GetEntArray( "debris_models", "targetname" );
|
|
foreach( piece in pieces)
|
|
{
|
|
piece hide();
|
|
}
|
|
}
|
|
|
|
falling_landing_pad()
|
|
{
|
|
//explo_base = GetEnt( "landing_pad_explo_base", "targetname" );
|
|
landingpad = GetEnt( "falling_landing_pad", "targetname" );
|
|
landingpad hide();
|
|
chopper_wreckage = GetEnt( "chopper_wreckage", "targetname" );
|
|
chopper_wreckage hide();
|
|
pieces = GetEntArray( "falling_wreckage", "targetname" );
|
|
foreach( piece in pieces)
|
|
{
|
|
piece hide();
|
|
}
|
|
flag_wait( "flag_rappel_big_explosion" );
|
|
//wait 2.0;
|
|
// add a huge wait to comment out the landing pad fall
|
|
// wait 200;
|
|
landingpad show();
|
|
chopper_wreckage show();
|
|
//PhysicsExplosionSphere( explo_base.origin, 2000, 1999, 1);
|
|
landingpad MoveTo( landingpad.origin - ( 0, 0, 20000), 4.5, 0.5, 0.5);
|
|
landingpad rotateRoll( 10000, 30, 5, 5);
|
|
|
|
chopper_wreckage MoveTo( chopper_wreckage.origin - ( 0, 0, 20000), 5.0, 0.5, 0.5);
|
|
chopper_wreckage rotateRoll( 10000, 40, 5, 5);
|
|
|
|
foreach( piece in pieces)
|
|
{
|
|
piece show();
|
|
piece MoveTo( piece.origin - ( 0, 0, 20000), 5.5, 0.5, 0.5);
|
|
piece rotateRoll( 40000, 40, 5, 5);
|
|
|
|
}
|
|
|
|
// wait and then play the fire FX when the heli hits it
|
|
wait 1.35;
|
|
target = GetEnt( "wreckage_fx", "targetname" );
|
|
PlayFX( level._effect["nx_explosion_skybridge"], target.origin );
|
|
wait 0.25;
|
|
PlayFX( level._effect["nx_smoke_n_fire_plume_preseed"], target.origin );
|
|
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// Laser targeted Laser! *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
rappel_laser_start()
|
|
{
|
|
// Prepare for sat view pip
|
|
thread maps\nx_skyscraper_util::play_pip_bink( "skyscraper_view_pip2", undefined, "play_orbital_pip_2" );
|
|
|
|
flag_wait("flag_swing_slide");
|
|
// Play sat view pip
|
|
flag_set ("play_orbital_pip_2");
|
|
|
|
wait 9;
|
|
|
|
SetSavedDvar( "compass", 1 );
|
|
SetSavedDvar( "ammoCounterHide", 0 );
|
|
SetSavedDvar( "actionSlotsHide", 0 );
|
|
SetSavedDvar( "hud_showStance", 1 );
|
|
SetSavedDvar( "hud_drawhud", 1 );
|
|
|
|
//level waittill( "notify_start_laser" );
|
|
|
|
level._player FreezeControls( false );
|
|
level._player EnableWeapons();
|
|
|
|
// When the player presses the fire button, send this notify
|
|
level._player notifyOnPlayerCommand( "fired_laser", "+attack" );
|
|
//thread check_for_laser_targeting_device();
|
|
thread force_laser_targeting_device();
|
|
thread laser_targeting_device_logic();
|
|
thread satellite_orbit();
|
|
level waittill( "laser_off" );
|
|
//level._player LaserForceOff();
|
|
//level._player notify ("laser_off");
|
|
|
|
level._player FreezeControls( true );
|
|
level._player DisableWeapons();
|
|
|
|
}
|
|
|
|
force_laser_targeting_device()
|
|
{
|
|
// Give the player the "laser designator"
|
|
level._player GiveWeapon( "m9" );
|
|
level.player_weapon = level._player GetCurrentWeapon();
|
|
|
|
// Force the player to use the designator
|
|
level._player SwitchToWeapon( "m9" );
|
|
level._player DisableWeaponSwitch();
|
|
level._player DisableOffhandWeapons();
|
|
//level.lab_vtol godoff();
|
|
|
|
//level.lab_vtol waittill ("death");
|
|
|
|
// Back to the regular weapons
|
|
//level._player EnableOffhandWeapons();
|
|
//level._player EnableWeaponSwitch();
|
|
//level._player SwitchToWeapon( "lancer_xray" );
|
|
//level._player allowFire( true );
|
|
}
|
|
|
|
laser_targeting_device_logic()
|
|
{
|
|
level endon ("floor_collapsed");
|
|
level._player allowFire( false );
|
|
while ( 1 )
|
|
{
|
|
level._player waittill ( "fired_laser");
|
|
thread laser_code_pattern();
|
|
thread lock_on_meter();
|
|
level._player laser_designate_target();
|
|
//level._player LaserForceOn();
|
|
// level notify ("laser_off");
|
|
level._player LaserForceOff();
|
|
}
|
|
}
|
|
|
|
laser_code_pattern()
|
|
{
|
|
delay = 0.05;
|
|
level endon ("laser_off");
|
|
level endon ("floor_collapsed");
|
|
while ( 1 )
|
|
{
|
|
level._player LaserForceOn();
|
|
wait (delay + RandomFloat (0.2));
|
|
level._player LaserForceOff();
|
|
wait delay;
|
|
}
|
|
}
|
|
|
|
laser_designate_target()
|
|
{
|
|
lock_on_complete = 0.25;
|
|
lock_on_timer = 0;
|
|
level endon( "laser_off" );
|
|
level endon ( "floor_collapsed" );
|
|
|
|
trace = self get_laser_designated_trace();
|
|
prior_entity = trace[ "entity" ];
|
|
|
|
// While the player is holding the trigger
|
|
while( level._player AttackButtonPressed() )
|
|
{
|
|
// Trace to the thing they're pointing at
|
|
trace = self get_laser_designated_trace();
|
|
position = trace[ "position" ];
|
|
entity = trace[ "entity" ];
|
|
|
|
// If an entity was hit, and an entity was hit last time a check was done
|
|
if ( isdefined ( prior_entity ) && isdefined ( entity ) )
|
|
{
|
|
// and the target is a vehicle
|
|
if ( entity.code_classname == "script_vehicle")
|
|
{
|
|
// and the currently targeted entity is the same one as the previously targeted one
|
|
if ( prior_entity == entity )
|
|
{
|
|
// set the currently targeted entity as the entity to check against next time
|
|
prior_entity = entity;
|
|
level notify ( "lock_on_start" );
|
|
|
|
// increment the lock-on timer
|
|
lock_on_timer = (lock_on_timer + .05);
|
|
|
|
// If the timer has exceeded the required amount before a lock is complete
|
|
if ( lock_on_timer >= lock_on_complete)
|
|
{
|
|
iprintlnbold( "LASER COORDINATES RECEIVED" );
|
|
thread draw_orbital_laser( entity );
|
|
level notify( "laser_coordinates_received" );
|
|
break;
|
|
}
|
|
// iprintln ("lock-on: " + lock_on_timer);
|
|
}
|
|
// Had a target, but lost it.
|
|
else
|
|
{
|
|
// iprintln ("lock-on dropped");
|
|
level notify ("lock_on_dropped");
|
|
// reset the timer
|
|
lock_on_timer = 0;
|
|
}
|
|
}
|
|
// Wait a bit and run another check
|
|
wait .05;
|
|
}
|
|
// Have no target at all
|
|
else
|
|
{
|
|
// iprintln ("no target");
|
|
level notify ("lock_on_dropped");
|
|
// reset the timer
|
|
lock_on_timer = 0;
|
|
wait .05;
|
|
// Check for a new target to check against next time a check is done
|
|
trace = self get_laser_designated_trace();
|
|
prior_entity = trace[ "entity" ];
|
|
}
|
|
}
|
|
|
|
// The player stopped holding the trigger
|
|
level notify( "laser_off" );
|
|
}
|
|
|
|
lock_on_meter()
|
|
{
|
|
// Begin when a lock is acquired
|
|
level waittill ( "lock_on_start" );
|
|
|
|
lock_on_complete = 0.25;
|
|
|
|
// Create and display the frame for the meter
|
|
lock_on_frame = NewHudElem( );
|
|
lock_on_frame.alignX = "center";
|
|
lock_on_frame.alignY = "bottom";
|
|
lock_on_frame.horzAlign = "center";
|
|
lock_on_frame.vertAlign = "bottom";
|
|
lock_on_frame.x = 25;
|
|
lock_on_frame.y = -120;
|
|
lock_on_frame setShader( "hud_temperature_gauge", 35, 150 );
|
|
lock_on_frame.sort = 4;
|
|
|
|
// Create and display the frame for the fill
|
|
lock_on_fill = NewHudElem( );
|
|
lock_on_fill.alignX = "center";
|
|
lock_on_fill.alignY = "bottom";
|
|
lock_on_fill.horzAlign = "center";
|
|
lock_on_fill.vertAlign = "bottom";
|
|
lock_on_fill.x = 25;
|
|
lock_on_fill.y = -152;
|
|
lock_on_fill setShader( "white", 10, 1 );
|
|
lock_on_fill.color = ( 1, .9, 0 );
|
|
lock_on_fill.alpha = 1;
|
|
lock_on_fill.sort = 1;
|
|
|
|
// Scale the fill element over the
|
|
lock_on_fill scaleOverTime( lock_on_complete , 10, 120 );
|
|
|
|
// If the lock is lost, dropped, or complete, get rid of the hud elements
|
|
level waittill_any ("laser_coordinates_received", "laser_off");
|
|
lock_on_frame destroy();
|
|
lock_on_fill destroy();
|
|
|
|
thread lock_on_meter();
|
|
|
|
}
|
|
|
|
get_laser_designated_trace()
|
|
{
|
|
eye = self geteye();
|
|
angles = self getplayerangles();
|
|
|
|
forward = anglestoforward( angles );
|
|
end = eye + vector_multiply( forward, 3000 );
|
|
trace = bullettrace( eye, end, true, self );
|
|
|
|
if ( trace ["fraction"] >= 1 )
|
|
{
|
|
trace[ "position" ] = undefined;
|
|
}
|
|
|
|
entity = trace[ "entity" ];
|
|
if ( isdefined( entity ) )
|
|
{
|
|
|
|
if ( isdefined( entity.targetname ) && entity.targetname == "fake_uav")
|
|
{
|
|
entity = GetEnt ("real_uav", "targetname");
|
|
}
|
|
trace[ "position" ] = entity.origin;
|
|
}
|
|
|
|
return trace;
|
|
}
|
|
|
|
draw_orbital_laser( target )
|
|
{
|
|
level waittill ( "laser_coordinates_received" );
|
|
wait 1;
|
|
|
|
satellite = GetEnt ("fake_satellite", "targetname");
|
|
time = 3;
|
|
|
|
//trace = level._player get_laser_designated_trace();
|
|
|
|
//if ( isdefined( trace[ "position" ]) )
|
|
|
|
//{
|
|
//target = trace[ "position" ];
|
|
// normal = trace[ "normal" ];
|
|
|
|
xoffset = Randomfloat ( 1 );
|
|
yoffset = Randomfloat ( 1 );
|
|
|
|
direction = (satellite.origin - target.origin);
|
|
normalized_direction = VectorNormalize( direction );
|
|
|
|
// thread draw_line_for_time( satellite.origin, (target + (xoffset,yoffset,0 )) , 1, 0, 0, 0.05 );
|
|
// time -= 0.05;
|
|
//PlayFX ( level._effect[ "orbital_laser" ], (target.origin + (xoffset,yoffset, 0)), normalized_direction );
|
|
PlayFX ( level._effect[ "nx_laser_orbital_strike" ], (target.origin + (xoffset,yoffset, 0)), normalized_direction );
|
|
// PlayFX( level._effect[ "laser_impact" ], (target + (xoffset,yoffset, 0)), normal );
|
|
RadiusDamage( target.origin, 100, 1000, 1000, level._player );
|
|
//}
|
|
|
|
}
|
|
|
|
|
|
satellite_orbit()
|
|
{
|
|
level endon ("floor_collapsed");
|
|
satellite = GetEnt ("fake_satellite", "targetname");
|
|
starting_point = satellite.origin;
|
|
|
|
while ( 1 )
|
|
{
|
|
satellite MoveTo ( satellite.origin + (6000, 24064,0), 24);
|
|
satellite waittill ("movedone");
|
|
satellite.origin = starting_point;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/* Unused?
|
|
//*******************************************************************
|
|
// LOBBY CRASH *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
lobby_crash_start()
|
|
{
|
|
level._player maps\_nx_utility::move_player_to_start_point( "playerstart_lobby_crash" );
|
|
|
|
thread maps\_utility::set_ambient( "amb_skyscraper_windy_ext" );
|
|
|
|
thread maps\nx_skyscraper_fx::set_vision_and_fog("exterior_ground_level", 0); // set appropriate vision and fog
|
|
|
|
lobby_crash_sequence();
|
|
}
|
|
|
|
lobby_crash()
|
|
{
|
|
|
|
}
|
|
|
|
lobby_crash_sequence()
|
|
{
|
|
//thread maps\_utility::set_ambient( "amb_skyscraper_lobby_int" );
|
|
|
|
}
|
|
*/
|