mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-23 17:45:47 +00:00
2334 lines
74 KiB
Plaintext
2334 lines
74 KiB
Plaintext
//****************************************************************************
|
||
// **
|
||
// Confidential - (C) Activision Publishing, Inc. 2010 **
|
||
// **
|
||
//****************************************************************************
|
||
// **
|
||
// Module: nx_hithard_motorcade.gsc **
|
||
// NOTE: called from nx_hithard.gsc **
|
||
// **
|
||
// Created: 1/13/2011 - Brian Marvin **
|
||
// **
|
||
//****************************************************************************
|
||
|
||
#include maps\_utility;
|
||
#include common_scripts\utility;
|
||
#include maps\_anim;
|
||
#include maps\_vehicle;
|
||
|
||
//***********************************************************************
|
||
// *
|
||
// INITIALIZATION: The following are called from nx_hithard.gsc *
|
||
// *
|
||
//***********************************************************************
|
||
|
||
// Objective specific flag_init() calls
|
||
flag_inits()
|
||
{
|
||
flag_init ("flag_motorcade_end");
|
||
flag_init ("player_speed_burst");
|
||
flag_init ("AI_speed_burst_vp");
|
||
flag_init ("AI_speed_burst_sheep");
|
||
flag_init ("flag_VP_Meet_Greet_Start");
|
||
flag_init ("flag_vp_meet_vignette_start");
|
||
flag_init ("flag_VP_Meet_Greet_Done");
|
||
flag_init ("flag_vp_meet_greet_anim_reached");
|
||
flag_init ("flag_osprey_fly_in");
|
||
flag_init ("flag_transition_squad_move0");
|
||
flag_init ("flag_transition_squad_move1");
|
||
flag_init ("flag_transition_squad_move2");
|
||
flag_init ("flag_transition_squad_move3");
|
||
flag_init ("flag_vp_enter_doorway");
|
||
flag_init ("flag_stairway_shake");
|
||
flag_init ("flag_stairway_shake2");
|
||
flag_init ("flag_osprey_ugv_drop" );
|
||
flag_init ("flag_ugv_stop");
|
||
flag_init ("flag_ugv_shoot_door");
|
||
flag_init ("flag_spawn_squad" );
|
||
flag_init ("flag_hallway_vignette");
|
||
flag_init ("flag_hallway_blocked");
|
||
flag_init ("flag_end_mission");
|
||
flag_init("flag_vignette_vtol_ugv_drop_done");
|
||
flag_init("flag_get_off_the_street");
|
||
flag_init("flag_rooftop_door_open");
|
||
flag_init("flag_spawn_cortel_squad");
|
||
flag_init("flag_player_out_of_bounds");
|
||
flag_init("flag_kill_player");
|
||
flag_init("fx_cortel_enter");
|
||
flag_init("fx_cortel_side_street");
|
||
flag_init("fx_cortel_stairwell_enter");
|
||
flag_init("flag_blow_cortel_door");
|
||
flag_init("flag_fodder3_moveit");
|
||
flag_init("flag_ss_playing_hallway_loop");
|
||
flag_init("flag_vp_playing_hallway_loop");
|
||
flag_init("flag_ugv_shove1");
|
||
flag_init("flag_ugv_shove2");
|
||
flag_init("flag_ugv_shove3");
|
||
flag_init("flag_doorsmash_anim_reached");
|
||
}
|
||
|
||
// Objective specific add_hint_string() calls
|
||
hint_string_inits()
|
||
{
|
||
//add_hint_string( "hint_parachute_smoke", &"NX_HITHARD_PARACHUTE_HINT_SMOKE", ::hint_parachute_smoke );
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// MAIN: The following "main()" is called from nx_hithard.gsc *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
main()
|
||
{
|
||
// Kill off all ai spawners from parachute section
|
||
maps\_spawner::kill_spawnerNum( 3 );
|
||
|
||
thread autosave_now();
|
||
|
||
level thread transition_objectives();
|
||
|
||
// initialize vehicles
|
||
//level.allied_osprey1 = GetEnt( "allied_osprey1", "targetname" );
|
||
//level.allied_osprey1 = GetEnt( "ospreycrashvp", "targetname");
|
||
|
||
//level thread squadmate_control();
|
||
level thread squadmate_control_new();
|
||
//level thread vp_ss_control();
|
||
level thread vp_ss_control_new();
|
||
//level thread cqb_volume();
|
||
level thread prone_volume();
|
||
level thread UGV1_drive_kill();
|
||
level thread UGV1_kill_cars();
|
||
level thread ugv_shoot_player();
|
||
level thread ugv_kill_player();
|
||
level thread staircase_rumble();
|
||
level thread staircase_rumble2();
|
||
level thread Osprey_VP_Vignette();
|
||
level thread Osprey_UGV_drop_Vignette();
|
||
level thread targetcar_death_reaction();
|
||
//level thread dropped_ugv_firing();
|
||
level._player DisableThreatVisualization();
|
||
|
||
level thread hallway_enemy_clip();
|
||
|
||
// vfx
|
||
thread maps\nx_hithard_fx::fx_motorcade_init();
|
||
|
||
thread audio_nodes();
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
audio_nodes()
|
||
{
|
||
|
||
level waittill( "notify_osprey_hit" );
|
||
|
||
thread maps\_utility::set_ambient( "nx_hithard_ext" );
|
||
|
||
mynodedebris = spawn( "sound_emitter", ( 9149, -3694, 429 ) );
|
||
mynodedebris PlayloopSound( "elm_hh_building_dust" );
|
||
flag_wait ("flag_stairway_shake");
|
||
level._player playsound ( "elm_hh_building_shake" );
|
||
mynodedebris stopsounds();
|
||
wait 0.1;
|
||
mynodedebris delete();
|
||
|
||
|
||
}
|
||
|
||
// Jump Starts
|
||
motorcade_end()
|
||
{
|
||
thread maps\nx_hithard_fx::fx_apply_cortel_bldg_vision_fog(); // set vision and fog
|
||
// This is ugly. clean this up later.
|
||
// position the player and his squadmates
|
||
player_start = GetNode( "motorcade_end_player", "targetname");
|
||
level._player SetOrigin( player_start.origin);
|
||
level._player SetPlayerAngles( player_start.angles);
|
||
baker_start = GetNode( "node_baker_dooranim_start", "script_noteworthy");
|
||
level.squad[0] ForceTeleport( baker_start.origin, baker_start.angles);
|
||
gypsy_start = GetNode( "node_gypsy_dooranim_start", "script_noteworthy");
|
||
level.squad[1] ForceTeleport( gypsy_start.origin, gypsy_start.angles);
|
||
// spawn the vp and ss guys
|
||
spawners = getentarray( "vp_ss", "targetname" );
|
||
array_thread( spawners, ::spawn_ai );
|
||
level.vp_transition = get_living_ai ( "vp_transition", "script_noteworthy");
|
||
level.ss_fodder1 = get_living_ai ( "ss_fodder1", "script_noteworthy");
|
||
level.ss_fodder2 = get_living_ai ( "ss_fodder2", "script_noteworthy");
|
||
level.vp_transition set_force_color("y");
|
||
level.ss_fodder1 set_force_color("r");
|
||
level.ss_fodder2 set_force_color("r");
|
||
// position the vp and ss guys
|
||
vp_start = GetNode( "motorcade_end_vp", "targetname");
|
||
level.vp_transition ForceTeleport( vp_start.origin, vp_start.angles);
|
||
ss1_start = GetNode( "motorcade_end_ss1", "targetname");
|
||
level.ss_fodder1 ForceTeleport( ss1_start.origin, ss1_start.angles);
|
||
ss2_start = GetNode( "motorcade_end_ss2", "targetname");
|
||
level.ss_fodder2 ForceTeleport( ss2_start.origin, ss2_start.angles);
|
||
issue_color_orders( "r2 y2", "allies" );
|
||
// trigger the doorsmash vignette
|
||
baker_doorsmash = level.squad[0];
|
||
baker_doorsmash.animname = "baker_doorsmash";
|
||
smashable_door = GetEnt("smashable_door", "targetname");
|
||
smashable_door delete();
|
||
maps\nx_hithard_anim::nx_tp_hithard_doorsmash_ally_01(baker_doorsmash);
|
||
node_baker = getnode ("node_baker_transition5", "script_noteworthy");
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
level.squad[0].goalradius = 8;
|
||
wait 1.0;
|
||
flag_set("flag_transition_squad_move3");
|
||
//issue_color_orders( "y3", "allies" );
|
||
level thread vp_hallway_vignette();
|
||
wait 1.5;
|
||
issue_color_orders( "r3", "allies" );
|
||
wait 1.5;
|
||
node_gypsy = getnode ("node_gypsy_transition5", "script_noteworthy");
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
level.squad[0] waittill( "goal" );
|
||
level.squad[1] waittill( "goal" );
|
||
level thread staircase_rumble2();
|
||
level thread hallway_vignette();
|
||
level thread wait_and_end();
|
||
}
|
||
//
|
||
|
||
transition_objectives()
|
||
{ Objective_Add( 4, "current", &"NX_HITHARD_TRANSITION_OBJ_FOLLOW" );
|
||
Objective_OnEntity( 4, level.squad[0] );
|
||
flag_wait("flag_vp_meet_vignette_start");
|
||
Objective_State( 4, "done" );
|
||
flag_wait("flag_transition_squad_move0");
|
||
Objective_Add( 5, "current", &"NX_HITHARD_TRANSITION_OBJ_END" );
|
||
//Objective_OnEntity( 5, level.squad[0] );
|
||
//Objective_OnEntity(5, level.vp_transition);
|
||
Objective_OnEntity(5, level.squad[0]);
|
||
//wait 0.5;
|
||
//Objective_Add( 6, "empty", &"NX_HITHARD_TRANSITION_OBJ_END" );
|
||
//objective_setpointertextoverride( 6, &"NX_HITHARD_TRANSITION_OBJ_TEXT_PROTECT" ); //Create the pointer text for objective
|
||
//Objective_onadditionalentity( 5, 1, level.squad[0] );
|
||
//Objective_OnEntity( 6, level.squad[0] );
|
||
flag_wait("flag_end_mission");
|
||
Objective_State( 5, "done" );
|
||
}
|
||
|
||
|
||
squadmate_control()
|
||
{
|
||
wait 0.5;
|
||
//node_baker = getnode ("node_baker_transition0", "script_noteworthy");
|
||
node_baker = getnode ("node_baker_door_kick", "script_noteworthy");
|
||
//level.squad[0] ForceTeleport( node_baker.origin, node_baker.angles );
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
level.squad[0].goalradius = 8;
|
||
node_gypsy = getnode ("node_gypsy_transition0", "script_noteworthy");
|
||
//level.squad[1] ForceTeleport( node_gypsy.origin, node_gypsy.angles );
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
level.squad[1].goalradius = 8;
|
||
level.squad[0] waittill( "goal" );
|
||
// Dialogue: Baker: "We're moving. Duke, you're on six."
|
||
//level.squad[0] thread radio_dialogue( "hithard_bak_snipe_35" );
|
||
level.squad[0].animname = "baker";
|
||
level.squad[0] thread dialogue_queue( "hithard_bak_snipe_35" );
|
||
//wait 0.5;
|
||
// delete the door TEMP
|
||
level thread play_door_open_vignette();
|
||
flag_wait("flag_rooftop_door_open");
|
||
// Dialogue: Baker: "Duke! Specter! We're movin - down the stairwell<6C>"
|
||
//level.squad[0] thread radio_dialogue( "hithard_bak_snipe_23" );
|
||
level.squad[0] thread dialogue_queue( "hithard_bak_snipe_23" );
|
||
// Dialogue: Baker: "Patriot we are coming down to you."
|
||
//level.squad[0] thread radio_dialogue( "hithard_bak_snipe_22" );
|
||
level.squad[0] thread dialogue_queue( "hithard_bak_snipe_22" );
|
||
// position your squad
|
||
node_baker = getnode ("node_baker_transition1", "script_noteworthy");
|
||
node_gypsy = getnode ("node_gypsy_transition1", "script_noteworthy");
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
level.squad[0].goalradius = 8;
|
||
wait 1.75;
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
level.squad[1].goalradius = 8;
|
||
// spawn the swat and ss fodder dudes but wait until you are halfway down the stairwell
|
||
flag_wait( "flag_stairway_shake" );
|
||
wait 1.0;
|
||
spawners = getentarray( "fodder", "targetname" );
|
||
array_thread( spawners, ::spawn_ai );
|
||
level.swat_fodder1 = get_living_ai ( "swat_fodder1", "script_noteworthy");
|
||
level.swat_fodder2 = get_living_ai ( "swat_fodder2", "script_noteworthy");
|
||
// Bullet shield them just in case
|
||
level.swat_fodder1 magic_bullet_shield();
|
||
level.swat_fodder2 magic_bullet_shield();
|
||
//
|
||
// Dialogue: SS1: "Copy, Convoy - we need to get moving, now!"
|
||
level.swat_fodder1 thread radio_dialogue( "hithard_sslead_snipe_03" );
|
||
// Wait till player and your squad are in position and then play the meet the vp vignette
|
||
level.squad[0] waittill( "goal" );
|
||
|
||
level.squad[1] waittill( "goal" );
|
||
flag_wait("flag_VP_Meet_Greet_Start");
|
||
level thread play_vp_meet_vignette();
|
||
// Dialogue: Baker: "We meet up with Patriot - get him loaded onto Sparrow and we're out of here<72>"
|
||
//level.squad[0] thread radio_dialogue( "hithard_bak_snipe_24" );
|
||
level.squad[0] thread dialogue_queue( "hithard_bak_snipe_24" );
|
||
//
|
||
level thread osprey_fly_in();
|
||
// temporary shit. See if you can break your squad out of their anims and shoot at the UGV
|
||
//wait 23.5;
|
||
//level.squad[0] anim_stopanimscripted();
|
||
//level.squad[1] anim_stopanimscripted();
|
||
flag_wait ("flag_VP_Meet_Greet_Done");
|
||
|
||
//node_baker = getnode ("node_baker_vignette_end", "script_noteworthy");
|
||
//level.squad[0] SetGoalNode( node_baker );
|
||
//node_gypsy = getnode ("node_gypsy_vignette_end", "script_noteworthy");
|
||
//level.squad[1] SetGoalNode( node_gypsy );
|
||
//wait 1.5;
|
||
|
||
// Gypsy and Baker shoot at the UGV. Baker stops first and Gypsy keeps shooting
|
||
//for( i=0; i<15; i++)
|
||
//{
|
||
// level.squad[0] OrientMode( "face point", level.ugv1.origin );
|
||
// level.squad[0] Shoot( 1, level.ugv1.origin);
|
||
// wait 0.075;
|
||
// level.squad[1] OrientMode( "face point", level.ugv1.origin );
|
||
// level.squad[1] Shoot( 1, level.ugv1.origin);
|
||
// wait 0.075;
|
||
//}
|
||
//level thread gypsy_keep_shooting();
|
||
//
|
||
//level.vp_transition anim_stopanimscripted();
|
||
//level.ss_fodder1 anim_stopanimscripted();
|
||
//flag_wait( "flag_VP_Meet_Greet_Done" );
|
||
// end temporary shit
|
||
//thread add_dialogue_line( "Baker", "UGV! Let's get the fuck outta here!", "g" );
|
||
// Baker - "UGV! Let's get the fuck outta here!"
|
||
level.squad[0] thread radio_dialogue("hithard_bak_vp2_04");
|
||
//set the flag for music to start
|
||
flag_set( "music_run_from_ugv" );
|
||
// delete the player blocker
|
||
player_blocker = GetEnt( "player_blocker_intersection", "targetname" );
|
||
player_blocker Delete();
|
||
player_blocker2 = GetEnt( "player_blocker_intersection2", "targetname" );
|
||
player_blocker2 Delete();
|
||
player_blocker3 = GetEnt( "player_blocker_intersection3", "targetname" );
|
||
player_blocker3 Delete();
|
||
// Move squad
|
||
// Baker moves before everyone so that he can lead
|
||
//flag_set("flag_transition_squad_move0");
|
||
level.squad[0] enable_sprint();
|
||
//node_baker = getnode ("node_baker_lead", "script_noteworthy");
|
||
//level.squad[0] SetGoalNode( node_baker );
|
||
//level.squad[0] waittill( "goal" );
|
||
//
|
||
flag_set("flag_transition_squad_move0");
|
||
node_baker = getnode ("node_baker_transition2", "script_noteworthy");
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
node_gypsy = getnode ("node_gypsy_transition2", "script_noteworthy");
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
// Remove bullet shield from fodder dudes
|
||
level.swat_fodder1 stop_magic_bullet_shield();
|
||
level.swat_fodder2 stop_magic_bullet_shield();
|
||
//
|
||
// send the fodder guys to nodes
|
||
level.swat_fodder1.goalradius = 8;
|
||
level.swat_fodder2.goalradius = 8;
|
||
fodder1_node = getnode ("fodder1_cover", "script_noteworthy");
|
||
level.swat_fodder1 SetGoalNode( fodder1_node );
|
||
fodder2_node = getnode ("fodder2_cover", "script_noteworthy");
|
||
level.swat_fodder2 SetGoalNode( fodder2_node );
|
||
// Don't target the fodder guys directly
|
||
level.swat_fodder1.ignoreme = true;
|
||
level.swat_fodder2.ignoreme = true;
|
||
//
|
||
flag_wait("flag_transition_squad_move1");
|
||
level.squad[0] disable_sprint();
|
||
node_baker = getnode ("node_baker_transition3", "script_noteworthy");
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
node_gypsy = getnode ("node_gypsy_transition3", "script_noteworthy");
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
flag_wait("flag_transition_squad_move2");
|
||
// set your squadmates to be ignored by enemies so they won't get stuck
|
||
level.squad[0] ignore_almost_everything();
|
||
level.squad[1] ignore_almost_everything();
|
||
//
|
||
//thread add_dialogue_line( "Baker", "Move, move, move!", "g" );
|
||
// Baker - "Move, move, move!"
|
||
level.squad[0] radio_dialogue("hithard_bak_vp2_05");
|
||
node_baker = getnode ("node_baker_transition4", "script_noteworthy");
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
node_gypsy = getnode ("node_gypsy_transition4", "script_noteworthy");
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
level.squad[0] waittill( "goal" );
|
||
// switching to new encounter
|
||
flag_wait("flag_osprey_ugv_drop");
|
||
//flag_wait("flag_vignette_vtol_ugv_drop_done");
|
||
wait 2.0;
|
||
thread add_dialogue_line( "Baker", "Incoming enemy gunship!", "g" );
|
||
// Wait until the UGV is dropped to start running.
|
||
wait 5.0;
|
||
// Baker - "Get off the street. Now!"
|
||
level.squad[0] thread radio_dialogue("hithard_bak_vp2_06");
|
||
//level thread everybody_sprint();
|
||
// try reconnecting paths here
|
||
cortel_blocker = GetEnt("blocker_cortel_entrance", "targetname");
|
||
//cortel_blocker ConnectPaths();
|
||
cortel_blocker Delete();
|
||
// Try making the UGV ignore the player here so he doesn't get hit as much and can get in the door
|
||
level._player.ignoreme = true;
|
||
flag_set("flag_get_off_the_street");
|
||
// Baker - "Move, move, move!"
|
||
level.squad[0] radio_dialogue("hithard_bak_vp2_05");
|
||
// Get the guys in place for Doorsmash
|
||
node_baker = getnode ("node_baker_dooranim_start", "script_noteworthy");
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
node_gypsy = getnode ("node_gypsy_dooranim_start", "script_noteworthy");
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
level.squad[0] waittill( "goal" );
|
||
// Baker - "Inside! Everyone move!"
|
||
level.squad[0] thread radio_dialogue("hithard_bak_vp2_08");
|
||
// Allow the UGV to target the player here
|
||
level._player.ignoreme = false;
|
||
//flag_wait("flag_doorsmash_start");
|
||
// Play Doorsmash!!!
|
||
//node = GetEnt( "node_vignette_doorsmash", "script_noteworthy");
|
||
//baker = level.squad[0];
|
||
level.squad[0].ignoreall = true;
|
||
baker_doorsmash = level.squad[0];
|
||
baker_doorsmash.animname = "baker_doorsmash";
|
||
smashable_door = GetEnt("smashable_door", "targetname");
|
||
smashable_door delete();
|
||
maps\nx_hithard_anim::nx_tp_hithard_doorsmash_ally_01(baker_doorsmash);
|
||
smashable_player_clip = GetEnt("smashable_player_clip", "targetname");
|
||
smashable_player_clip delete();
|
||
node_baker = getnode ("node_baker_transition5", "script_noteworthy");
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
level.squad[0].goalradius = 8;
|
||
wait 1.0;
|
||
flag_set("flag_transition_squad_move3");
|
||
level.squad[1].ignoreall = true;
|
||
wait 1.5;
|
||
node_gypsy = getnode ("node_gypsy_transition5", "script_noteworthy");
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
level.squad[0] waittill( "goal" );
|
||
level.squad[1] waittill( "goal" );
|
||
flag_wait("flag_stairway_shake2");
|
||
flag_wait("flag_hallway_blocked");
|
||
wait 1.0;
|
||
// Duke - "Holy shit..."
|
||
level.squad[1] thread radio_dialogue("hithard_gyp_trans_01");
|
||
wait 3.0;
|
||
thread add_dialogue_line( "Baker", "Spectre, Duke, status report!", "g" );
|
||
// move gypsy to end position casually
|
||
//level.squad[1] maps\_casual_killer::enable_casual_killer();
|
||
node_gypsy = getnode ("node_gypsy_end", "script_noteworthy");
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
wait 4.0;
|
||
thread add_dialogue_line( "Duke", "That was too fucking close!", "g" );
|
||
// !!! make Duke move down toward Baker after he says this line !!!
|
||
wait 4.5;
|
||
level thread hallway_vignette();
|
||
level thread wait_and_end();
|
||
}
|
||
|
||
greenlight_sfx_fadeout_hithard()
|
||
{
|
||
level._player setchannelvolumes( "snd_channelvolprio_level", "fadetoblack", 1.0 );
|
||
//JL: Not needed. The game resets the channels when it going back to the main menu or when starting a new level.
|
||
//wait 1.5;
|
||
//level._player deactivatechannelvolumes( "snd_channelvolprio_level", 0.2 );
|
||
}
|
||
|
||
squadmate_control_new()
|
||
{
|
||
// Remove this once your squad gets moved down for real
|
||
node_baker = getnode ("node_baker_transition1", "script_noteworthy");
|
||
//level.squad[0] ForceTeleport( node_baker.origin, node_baker.angles );
|
||
//node_gypsy = getnode ("node_gypsy_transition0", "script_noteworthy");
|
||
node_gypsy = getnode ("node_gypsy_transition1", "script_noteworthy");
|
||
//level.squad[1] ForceTeleport( node_gypsy.origin, node_gypsy.angles );
|
||
wait 0.5;
|
||
level.squad[0].animname = "baker";
|
||
level.squad[1].animname = "duke";
|
||
// position your squad
|
||
node_baker = getnode ("node_baker_transition1", "script_noteworthy");
|
||
node_gypsy = getnode ("node_gypsy_transition1", "script_noteworthy");
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
level.squad[0].goalradius = 8;
|
||
wait 1.75;
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
level.squad[1].goalradius = 8;
|
||
// spawn the swat and ss fodder dudes but wait until you are halfway down the stairwell
|
||
wait 1.0;
|
||
spawners = getentarray( "fodder", "targetname" );
|
||
array_thread( spawners, ::spawn_ai );
|
||
level.swat_fodder1 = get_living_ai ( "swat_fodder1", "script_noteworthy");
|
||
level.swat_fodder2 = get_living_ai ( "swat_fodder2", "script_noteworthy");
|
||
// Bullet shield them just in case
|
||
level.swat_fodder1 magic_bullet_shield();
|
||
level.swat_fodder2 magic_bullet_shield();
|
||
// Wait till player and your squad are in position and then play the meet the vp vignette
|
||
level.squad[0] waittill( "goal" );
|
||
level.squad[1] waittill( "goal" );
|
||
//flag_wait("flag_VP_Meet_Greet_Start");
|
||
level thread osprey_fly_in();
|
||
|
||
thread maps\_utility::set_ambient( "nx_hithard_vicepres" );
|
||
|
||
// Play the VP meet and greet and send actors to their new goals
|
||
level thread play_vp_meet_vignette();
|
||
|
||
//flag_wait ("flag_VP_Meet_Greet_Done");
|
||
flag_wait ("flag_vp_meet_greet_anim_reached");
|
||
wait 25.5;
|
||
// Make sure this flag is clear for the new positioning of the trigger plane
|
||
flag_clear("flag_transition_squad_move1");
|
||
// Baker - "UGV! Let's get the fuck outta here!"
|
||
level.squad[0] thread radio_dialogue("hithard_bak_vp2_04");
|
||
//set the flag for music to start
|
||
flag_set( "music_run_from_ugv" );
|
||
// set your squadmates to be ignored by enemies so they won't get stuck
|
||
level.squad[0] ignore_almost_everything();
|
||
level.squad[1] ignore_almost_everything();
|
||
// delete the player blocker
|
||
player_blocker = GetEnt( "player_blocker_intersection", "targetname" );
|
||
player_blocker Delete();
|
||
player_blocker2 = GetEnt( "player_blocker_intersection2", "targetname" );
|
||
player_blocker2 Delete();
|
||
player_blocker3 = GetEnt( "player_blocker_intersection3", "targetname" );
|
||
player_blocker3 Delete();
|
||
|
||
flag_wait("flag_transition_squad_move1");
|
||
level.squad[0] disable_sprint();
|
||
node_baker = getnode ("node_baker_transition3", "script_noteworthy");
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
node_gypsy = getnode ("node_gypsy_transition3", "script_noteworthy");
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
flag_wait("flag_transition_squad_move2");
|
||
//thread add_dialogue_line( "Baker", "Move, move, move!", "g" );
|
||
// Baker - "Move, move, move!"
|
||
level.squad[0] radio_dialogue("hithard_bak_vp2_05");
|
||
node_baker = getnode ("node_baker_transition4", "script_noteworthy");
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
node_gypsy = getnode ("node_gypsy_transition4", "script_noteworthy");
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
level.squad[0] waittill( "goal" );
|
||
// switching to new encounter
|
||
flag_wait("flag_osprey_ugv_drop");
|
||
//flag_wait("flag_vignette_vtol_ugv_drop_done");
|
||
wait 1.0;
|
||
//thread add_dialogue_line( "Baker", "Incoming enemy gunship!", "g" );
|
||
thread radio_dialogue( "hithard_sslead_snipe_gunship" );
|
||
// Wait until the UGV is dropped to start running.
|
||
wait 4.0;
|
||
// Baker - "Get off the street. Now!"
|
||
level.squad[0] thread radio_dialogue("hithard_bak_vp2_06");
|
||
//level thread everybody_sprint();
|
||
|
||
|
||
level thread delete_cortel_door();
|
||
|
||
// Try making the UGV ignore the player here so he doesn't get hit as much and can get in the door
|
||
level._player.ignoreme = true;
|
||
flag_set("flag_get_off_the_street");
|
||
level.squad[0].ignoreall = true;
|
||
level.squad[0].ignoreme = true;
|
||
// Baker - "Move, move, move!"
|
||
level.squad[0] radio_dialogue("hithard_bak_vp2_05");
|
||
// SS leader - To the right!
|
||
thread radio_dialogue( "hithard_sslead_snipe_totheright" );
|
||
// Get the guys in place for Doorsmash
|
||
node_baker = getnode ("node_baker_dooranim_start", "script_noteworthy");
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
node_gypsy = getnode ("node_gypsy_dooranim_start", "script_noteworthy");
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
level.squad[0] waittill( "goal" );
|
||
// Baker - "Inside! Everyone move!"
|
||
level.squad[0] thread radio_dialogue("hithard_bak_vp2_08");
|
||
// Allow the UGV to target the player here
|
||
level._player.ignoreme = false;
|
||
//flag_wait("flag_doorsmash_start");
|
||
// Play Doorsmash!!!
|
||
baker_doorsmash = level.squad[0];
|
||
baker_doorsmash.animname = "baker_doorsmash";
|
||
|
||
level thread smashable_door_delete();
|
||
|
||
maps\nx_hithard_anim::nx_tp_hithard_doorsmash_ally_01(baker_doorsmash);
|
||
|
||
smashable_player_clip = GetEnt("smashable_player_clip", "targetname");
|
||
smashable_player_clip delete();
|
||
node_baker = getnode ("node_baker_transition5", "script_noteworthy");
|
||
level.squad[0] SetGoalNode( node_baker );
|
||
level.squad[0].goalradius = 8;
|
||
flag_set("flag_transition_squad_move3");
|
||
level.squad[1].ignoreall = true;
|
||
wait 1.5;
|
||
node_gypsy = getnode ("node_gypsy_transition5", "script_noteworthy");
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
level.squad[0] waittill( "goal" );
|
||
level.squad[1] waittill( "goal" );
|
||
flag_wait("flag_stairway_shake2");
|
||
// temp end the mission here
|
||
//wait 1.0;
|
||
// Duke - "Holy shit..."
|
||
//level.squad[1] thread radio_dialogue("hithard_gyp_trans_01");
|
||
//wait 2.0;
|
||
//nextmission();
|
||
//thread greenlight_sfx_fadeout_hithard();
|
||
//endmission_goto_frontend();
|
||
//
|
||
flag_wait("flag_hallway_blocked");
|
||
wait 2.5;
|
||
// Duke - "Holy shit..."
|
||
level.squad[1] thread radio_dialogue("hithard_gyp_trans_01");
|
||
//level.squad[1] thread dialogue_queue( "hithard_gyp_trans_01" );
|
||
wait 2.0;
|
||
//thread add_dialogue_line( "Baker", "Spectre, Duke, status report!", "g" );
|
||
// move gypsy to end position casually
|
||
//level.squad[1] maps\_casual_killer::enable_casual_killer();
|
||
node_gypsy = getnode ("node_gypsy_end", "script_noteworthy");
|
||
level.squad[1] SetGoalNode( node_gypsy );
|
||
wait 3.0;
|
||
//thread add_dialogue_line( "Duke", "That was too fucking close!", "g" );
|
||
// !!! make Duke move down toward Baker after he says this line !!!
|
||
wait 1.5;
|
||
level thread hallway_vignette();
|
||
level thread wait_and_end();
|
||
}
|
||
|
||
smashable_door_delete()
|
||
{
|
||
flag_wait("flag_doorsmash_anim_reached");
|
||
wait 0.25;
|
||
smashable_door = GetEnt("smashable_door", "targetname");
|
||
smashable_door delete();
|
||
|
||
}
|
||
|
||
gypsy_keep_shooting()
|
||
{
|
||
while(1)
|
||
{
|
||
level.squad[1] OrientMode( "face point", level.ugv1.origin );
|
||
level.squad[1] Shoot( 1, level.ugv1.origin);
|
||
wait 0.30;
|
||
if (flag( "flag_transition_squad_move0"))
|
||
break;
|
||
}
|
||
}
|
||
|
||
everybody_sprint()
|
||
{
|
||
level.squad[0] enable_sprint();
|
||
level.squad[1] enable_sprint();
|
||
level.vp_transition enable_sprint();
|
||
level.ss_fodder1 enable_sprint();
|
||
level.ss_fodder2 enable_sprint();
|
||
level.ss_fodder3 enable_sprint();
|
||
}
|
||
|
||
ugv_shoot_player()
|
||
{
|
||
flag_wait("flag_player_out_of_bounds");
|
||
level._player.ignoreme = false;
|
||
level.ugv1 thread vehicle_fire_around_entity( level._player, 0.25);
|
||
}
|
||
|
||
ugv_kill_player()
|
||
{
|
||
flag_wait("flag_kill_player");
|
||
level._player Kill();
|
||
}
|
||
|
||
targetcar_death_reaction()
|
||
{
|
||
targetcar=GetEnt("ugv_targetcar3", "targetname");
|
||
while(1)
|
||
{
|
||
if (!isalive(targetcar))
|
||
break;
|
||
wait 0.1;
|
||
}
|
||
// Duke - "Jesus fucking christ."
|
||
level.squad[1] thread radio_dialogue("hithard_gyp_vpmeet2_02");
|
||
}
|
||
|
||
play_door_open_vignette()
|
||
{
|
||
baker = level.squad[0];
|
||
baker.animname = "baker";
|
||
while(1)
|
||
{
|
||
if( player_looking_at(baker.origin))
|
||
break;
|
||
wait 0.1;
|
||
}
|
||
node = GetEnt("node_door_kick", "targetname");
|
||
node thread anim_single_solo(baker, "door_kick_in");
|
||
|
||
door = getent( "hh_rooftop_door", "targetname" );
|
||
attachments = GetEntArray( door.target, "targetname" ); //looks at the door entity "target" KVP, then finds every other entity that has the same KVP defined as a targetname. In this case "door_attachments".
|
||
|
||
//Cycle through entities with "door_attachment" KVP and links them to the door entity.
|
||
for ( i = 0; i < attachments.size; i++ )
|
||
{
|
||
attachments[ i ] LinkTo( door );
|
||
}
|
||
|
||
door hithard_style_door_kick("scn_hithard_ally_door_smash_hit");
|
||
|
||
for ( i = 0; i < attachments.size; i++ )
|
||
{
|
||
if ( attachments[ i ].classname == "script_brushmodel" )
|
||
{
|
||
attachments[ i ] ConnectPaths();
|
||
}
|
||
}
|
||
flag_set("flag_rooftop_door_open");
|
||
}
|
||
|
||
delete_cortel_door()
|
||
{
|
||
//doors = GetEntArray( "blocker_cortel_entrance", "targetname" ); //looks at the door entity "target" KVP, then finds every other entity that has the same KVP defined as a targetname. In this case "door_attachments".
|
||
|
||
//doors = GetNodeArray( "blocker_cortel_entrance", "targetname" ); //looks at the door entity "target" KVP, then finds every other entity that has the same KVP defined as a targetname. In this case "door_attachments".
|
||
//Cycle through entities with "door_attachment" KVP and links them to the door entity.
|
||
//for ( i = 0; i < doors.size; i++ )
|
||
//{
|
||
// doors[ i ] delete();
|
||
// doors[ i ] ConnectPaths();
|
||
//}
|
||
|
||
cortel_blocker = GetEnt("blocker_cortel_entrance", "targetname");
|
||
cortel_blocker Delete();
|
||
cortel_blocker2 = GetEnt("blocker_cortel_entrance2", "targetname");
|
||
cortel_blocker2 Delete();
|
||
cortel_blocker3 = GetEnt("blocker_cortel_entrance3", "targetname");
|
||
cortel_blocker3 Delete();
|
||
cortel_blocker4 = GetEnt("blocker_cortel_entrance4", "targetname");
|
||
cortel_blocker4 Delete();
|
||
cortel_blocker5 = GetEnt("blocker_cortel_entrance5", "targetname");
|
||
cortel_blocker5 Delete();
|
||
cortel_blocker6 = GetEnt("blocker_cortel_entrance6", "targetname");
|
||
cortel_blocker6 Delete();
|
||
cortel_blocker7 = GetEnt("blocker_cortel_entrance7", "targetname");
|
||
cortel_blocker7 Delete();
|
||
cortel_blocker8 = GetEnt("blocker_cortel_entrance8", "targetname");
|
||
cortel_blocker8 Delete();
|
||
|
||
}
|
||
|
||
ad_rotate()
|
||
{
|
||
ad = GetEnt("spinning_ad", "targetname");
|
||
ad_decal = GetEnt("spinning_ad_decal", "targetname");
|
||
while ( 1 )
|
||
{
|
||
ad RotateYaw( 360, 5 );
|
||
ad_decal RotateYaw( 360, 5 );
|
||
ad waittill( "rotatedone" );
|
||
}
|
||
}
|
||
|
||
hallway_enemy_clip()
|
||
{
|
||
brush = GetEnt( "hallway_enemy_clip", "targetname" );
|
||
brush NotSolid();
|
||
brush ConnectPaths();
|
||
flag_wait("flag_hallway_blocked");
|
||
brush Solid();
|
||
brush DisconnectPaths();
|
||
}
|
||
|
||
hithard_style_door_kick( soundalias )
|
||
{
|
||
wait( 2.0 );
|
||
|
||
if ( IsDefined( soundalias ) )
|
||
self PlaySound( soundalias );
|
||
else
|
||
self PlaySound( "door_wood_slow_open" );
|
||
|
||
//self RotateTo( self.angles + ( 0, 70, 0 ), .4, .1, 0 );
|
||
self RotateTo( self.angles + ( 0, 100, 0 ), .4, .1, 0 );
|
||
self ConnectPaths();
|
||
self waittill( "rotatedone" );
|
||
//self RotateTo( self.angles + ( 0, 70, 0 ), .4, .1, 0 );
|
||
self RotateTo( self.angles + ( 0, -15, 0 ), 1, .1, .1 );
|
||
}
|
||
|
||
play_vp_meet_vignette()
|
||
{
|
||
// Play the meet and greet vignette
|
||
baker = level.squad[0];
|
||
baker.animname = "baker";
|
||
gypsy = level.squad[1];
|
||
gypsy.animname = "gypsy";
|
||
secret_service1 = level.ss_fodder1;
|
||
secret_service1.animname = "secret_service1";
|
||
vp = level.vp_transition;
|
||
vp.animname = "vp";
|
||
|
||
vp.ignoreall = true;
|
||
secret_service1.ignoreall = true;
|
||
baker.ignoreall = true;
|
||
gypsy.ignoreall = true;
|
||
|
||
maps\nx_hithard_anim::vp_meet_and_greet( vp, secret_service1, baker, gypsy );
|
||
level vp_meet_handle_actors( vp, secret_service1, baker, gypsy );
|
||
|
||
}
|
||
|
||
vp_meet_handle_actors( vp, secret_service1, baker, gypsy )
|
||
{
|
||
flag_clear("flag_transition_squad_move1");
|
||
|
||
vp.ignoreall = true;
|
||
secret_service1.ignoreall = true;
|
||
baker.ignoreall = true;
|
||
gypsy.ignoreall = true;
|
||
|
||
baker enable_cqbwalk();
|
||
secret_service1 enable_cqbwalk();
|
||
gypsy enable_cqbwalk();
|
||
|
||
|
||
//flag_wait ("flag_vp_meet_greet_anim_reached");
|
||
//wait( 1 );
|
||
|
||
// Move squad
|
||
// Baker moves before everyone so that he can lead
|
||
//flag_set("flag_transition_squad_move0");
|
||
//baker enable_sprint();
|
||
|
||
//node_baker = getnode ("node_baker_transition2", "script_noteworthy");
|
||
node_baker = getnode ("node_baker_transition1_2", "script_noteworthy");
|
||
baker SetGoalNode( node_baker );
|
||
//node_gypsy = getnode ("node_gypsy_transition2", "script_noteworthy");
|
||
node_gypsy = getnode ("node_gypsy_transition1_2", "script_noteworthy");
|
||
gypsy SetGoalNode( node_gypsy );
|
||
// Remove bullet shield from fodder dudes
|
||
level.swat_fodder1 stop_magic_bullet_shield();
|
||
level.swat_fodder2 stop_magic_bullet_shield();
|
||
|
||
// send the fodder guys to nodes
|
||
level.swat_fodder1.goalradius = 8;
|
||
level.swat_fodder2.goalradius = 8;
|
||
fodder1_node = getnode ("fodder1_cover", "script_noteworthy");
|
||
level.swat_fodder1 SetGoalNode( fodder1_node );
|
||
fodder2_node = getnode ("fodder2_cover", "script_noteworthy");
|
||
level.swat_fodder2 SetGoalNode( fodder2_node );
|
||
// Don't target the fodder guys directly
|
||
level.swat_fodder1.ignoreme = true;
|
||
level.swat_fodder2.ignoreme = true;
|
||
|
||
flag_wait( "flag_VP_Meet_Greet_Done" );
|
||
flag_set("flag_transition_squad_move0");
|
||
wait 5;
|
||
|
||
vp.ignoreall = false;
|
||
secret_service1.ignoreall = false;
|
||
baker.ignoreall = false;
|
||
gypsy.ignoreall = false;
|
||
|
||
baker disable_cqbwalk();
|
||
secret_service1 disable_cqbwalk();
|
||
gypsy disable_cqbwalk();
|
||
}
|
||
|
||
cqb_volume()
|
||
{
|
||
volume = GetEnt("squad_cqb_volume", "targetname");
|
||
while(1)
|
||
{
|
||
ai = GetAIArray();
|
||
foreach( guy in ai )
|
||
{
|
||
if( guy IsTouching( volume ) && !guy is_hero() )
|
||
guy enable_cqbwalk();
|
||
else
|
||
guy disable_cqbwalk();
|
||
}
|
||
if (flag( "flag_VP_Meet_Greet_Start" ))
|
||
break;
|
||
wait 1.0;
|
||
}
|
||
level.squad[0] disable_cqbwalk();
|
||
level.squad[1] disable_cqbwalk();
|
||
}
|
||
|
||
prone_volume()
|
||
{
|
||
volume = GetEnt("squad_prone_volume", "targetname");
|
||
flag_wait( "flag_stairway_shake" );
|
||
while(1)
|
||
{
|
||
ai = GetAIArray();
|
||
foreach( guy in ai )
|
||
{
|
||
if( guy IsTouching( volume ) && !guy is_hero() )
|
||
guy allowedstances( "crouch" );
|
||
else
|
||
guy allowedstances( "stand", "crouch", "prone" );
|
||
}
|
||
wait 0.25;
|
||
}
|
||
level.squad[0] allowedstances( "stand", "crouch", "prone" );
|
||
level.squad[1] allowedstances( "stand", "crouch", "prone" );
|
||
}
|
||
|
||
// !!!! This is the old one!!!!
|
||
vp_ss_control()
|
||
{
|
||
flag_wait( "flag_stairway_shake" );
|
||
// Kill AI on the street
|
||
volume = GetEnt("intersection_kill_volume", "targetname");
|
||
ai = GetAIArray();
|
||
foreach( guy in ai )
|
||
{
|
||
//if( guy IsTouching( volume ) && !guy is_hero() )
|
||
if( guy IsTouching( volume ) )
|
||
{
|
||
if(isdefined(guy.magic_bullet_shield))
|
||
{
|
||
guy stop_magic_bullet_shield();
|
||
}
|
||
//wait 0.1;
|
||
if( isalive(guy))
|
||
guy Delete();
|
||
}
|
||
}
|
||
//
|
||
|
||
spawners = getentarray( "vp_ss", "targetname" );
|
||
array_thread( spawners, ::spawn_ai );
|
||
level.vp_transition = get_living_ai ( "vp_transition", "script_noteworthy");
|
||
level.ss_fodder1 = get_living_ai ( "ss_fodder1", "script_noteworthy");
|
||
level.ss_fodder2 = get_living_ai ( "ss_fodder2", "script_noteworthy");
|
||
level.ss_fodder3 = get_living_ai ( "ss_fodder3", "script_noteworthy");
|
||
level thread vp_ss_loop();
|
||
// Shields up
|
||
level.vp_transition magic_bullet_shield();
|
||
level.ss_fodder1 magic_bullet_shield();
|
||
level.ss_fodder2 magic_bullet_shield();
|
||
level.ss_fodder3 magic_bullet_shield();
|
||
// Agent 2 and 3 go into CQB until the vignette is over
|
||
//level.ss_fodder2 enable_cqbwalk();
|
||
//level.ss_fodder2 cqb_aim();
|
||
level thread agent_loops();
|
||
//
|
||
level.vp_transition ignore_almost_everything();
|
||
level.vp_transition.IgnoreRandomBulletDamage = true;
|
||
level.ss_fodder1.ignoreme = true;
|
||
level.ss_fodder1.takedamage = false;
|
||
level.ss_fodder1.IgnoreRandomBulletDamage = true;
|
||
level.ss_fodder2.ignoreme = true;
|
||
level.ss_fodder2.takedamage = false;
|
||
level.ss_fodder2.IgnoreRandomBulletDamage = true;
|
||
level.ss_fodder3.ignoreme = true;
|
||
level.ss_fodder3.takedamage = false;
|
||
wait 1.0;
|
||
|
||
flag_wait("flag_transition_squad_move0");
|
||
level.vp_transition.goalradius = 8;
|
||
level.ss_fodder1.goalradius = 8;
|
||
level.ss_fodder2.goalradius = 8;
|
||
level.ss_fodder3.goalradius = 8;
|
||
level.vp_transition set_force_color("y");
|
||
level.ss_fodder1 set_force_color("r");
|
||
level.ss_fodder2 set_force_color("r");
|
||
level.ss_fodder3 set_force_color("r");
|
||
// Take Agent 2 and 3 out of CQB
|
||
level.ss_fodder2 disable_cqbwalk();
|
||
// dynamic moving stuff
|
||
ent_array = [];
|
||
ent_array[0] = level.ss_fodder1;
|
||
ent_array[0] = level.ss_fodder2;
|
||
level.vp_transition thread use_dynamic_speed( ent_array, 0.75, 1.1, 64, 128);
|
||
issue_color_orders( "r0 y0", "allies" );
|
||
flag_wait("flag_transition_squad_move2");
|
||
issue_color_orders( "r1 y1", "allies" );
|
||
// Dialogue: SS: "Keep Patriot moving"
|
||
thread radio_dialogue( "hithard_sslead_vp2_01" );
|
||
//
|
||
flag_wait("flag_get_off_the_street");
|
||
issue_color_orders( "r2 y2", "allies" );
|
||
level thread agent3_last_stand();
|
||
//flag_wait("flag_vp_enter_doorway");
|
||
flag_wait("flag_transition_squad_move3");
|
||
//Move the VP first
|
||
//issue_color_orders( "r3 y3", "allies" );
|
||
//issue_color_orders( "y3", "allies" );
|
||
//level.ss_fodder1.ignoreall = true;
|
||
//level.ss_fodder2.ignoreall = true;
|
||
level.ss_fodder1 ignore_almost_everything();
|
||
level.ss_fodder2 ignore_almost_everything();
|
||
|
||
level thread vp_hallway_vignette();
|
||
level thread ss_hallway_vignette();
|
||
//wait 1.5;
|
||
//issue_color_orders( "r3", "allies" );
|
||
level.ss_fodder1.goalradius = 8;
|
||
node_ss1 = getnode("node_ss_hallway2", "targetname");
|
||
level.ss_fodder1 SetGoalNode( node_ss1 );
|
||
}
|
||
|
||
vp_ss_control_new()
|
||
{
|
||
/* BMarv
|
||
//flag_wait( "flag_stairway_shake" );
|
||
// Kill AI on the street
|
||
volume = GetEnt("intersection_kill_volume", "targetname");
|
||
ai = GetAIArray();
|
||
foreach( guy in ai )
|
||
{
|
||
//if( guy IsTouching( volume ) && !guy is_hero() )
|
||
if( guy IsTouching( volume ) )
|
||
{
|
||
if(isdefined(guy.magic_bullet_shield))
|
||
{
|
||
guy stop_magic_bullet_shield();
|
||
}
|
||
// Don't delete the AI once the VP is moved properly!!!
|
||
if( isalive(guy))
|
||
guy Delete();
|
||
}
|
||
}
|
||
//
|
||
wait 0.1;
|
||
spawners = getentarray( "vp_ss", "targetname" );
|
||
array_thread( spawners, ::spawn_ai );
|
||
level.vp_transition = get_living_ai ( "vp_transition", "script_noteworthy");
|
||
level.ss_fodder1 = get_living_ai ( "ss_fodder1", "script_noteworthy");
|
||
level.ss_fodder2 = get_living_ai ( "ss_fodder2", "script_noteworthy");
|
||
level.ss_fodder3 = get_living_ai ( "ss_fodder3", "script_noteworthy");
|
||
level thread vp_ss_loop();
|
||
// Shields up
|
||
wait 0.1;
|
||
level.vp_transition magic_bullet_shield();
|
||
level.ss_fodder1 magic_bullet_shield();
|
||
level.ss_fodder2 magic_bullet_shield();
|
||
level.ss_fodder3 magic_bullet_shield();
|
||
*/
|
||
|
||
// Agent 2 and 3 go into CQB until the vignette is over
|
||
//level.ss_fodder2 enable_cqbwalk();
|
||
//level.ss_fodder2 cqb_aim();
|
||
//level thread agent_loops();
|
||
|
||
level.vp_transition = level.secure_vip; // BMarv
|
||
level thread vp_ss_loop();
|
||
level thread agent2_loop();
|
||
level thread agent3_loop();
|
||
//
|
||
level.vp_transition ignore_almost_everything();
|
||
level.vp_transition.IgnoreRandomBulletDamage = true;
|
||
level.ss_fodder1.ignoreme = true;
|
||
level.ss_fodder1.takedamage = false;
|
||
level.ss_fodder1.IgnoreRandomBulletDamage = true;
|
||
level.ss_fodder2.ignoreme = true;
|
||
level.ss_fodder2.takedamage = false;
|
||
level.ss_fodder2.IgnoreRandomBulletDamage = true;
|
||
level.ss_fodder3.ignoreme = true;
|
||
level.ss_fodder3.takedamage = false;
|
||
wait 1.0;
|
||
|
||
flag_wait("flag_transition_squad_move0");
|
||
level.vp_transition.goalradius = 8;
|
||
level.ss_fodder1.goalradius = 8;
|
||
level.ss_fodder2.goalradius = 8;
|
||
level.ss_fodder3.goalradius = 8;
|
||
level.vp_transition set_force_color("y");
|
||
level.ss_fodder1 set_force_color("r");
|
||
level.ss_fodder2 set_force_color("r");
|
||
level.ss_fodder3 set_force_color("r");
|
||
// Take Agent 2 and 3 out of CQB
|
||
level.ss_fodder2 disable_cqbwalk();
|
||
// dynamic moving stuff
|
||
ent_array = [];
|
||
ent_array[0] = level.ss_fodder1;
|
||
ent_array[0] = level.ss_fodder2;
|
||
level.vp_transition thread use_dynamic_speed( ent_array, 0.75, 1.1, 64, 128);
|
||
issue_color_orders( "r0 y0", "allies" );
|
||
flag_wait("flag_transition_squad_move2");
|
||
issue_color_orders( "r1 y1", "allies" );
|
||
// Dialogue: SS: "Keep Patriot moving"
|
||
thread radio_dialogue( "hithard_sslead_vp2_01" );
|
||
//
|
||
flag_wait("flag_get_off_the_street");
|
||
issue_color_orders( "r2 y2", "allies" );
|
||
level thread agent3_last_stand();
|
||
//flag_wait("flag_vp_enter_doorway");
|
||
flag_wait("flag_transition_squad_move3");
|
||
//Move the VP first
|
||
//issue_color_orders( "r3 y3", "allies" );
|
||
//issue_color_orders( "y3", "allies" );
|
||
//level.ss_fodder1.ignoreall = true;
|
||
//level.ss_fodder2.ignoreall = true;
|
||
level.ss_fodder1 ignore_almost_everything();
|
||
level.ss_fodder2 ignore_almost_everything();
|
||
|
||
level thread vp_hallway_vignette();
|
||
level thread ss_hallway_vignette();
|
||
//wait 1.5;
|
||
//issue_color_orders( "r3", "allies" );
|
||
level.ss_fodder1.goalradius = 8;
|
||
node_ss1 = getnode("node_ss_hallway2", "targetname");
|
||
level.ss_fodder1 SetGoalNode( node_ss1 );
|
||
}
|
||
|
||
vp_ss_loop()
|
||
{
|
||
vp_loop = level.vp_transition;
|
||
secret_service1_loop = level.ss_fodder1;
|
||
vp_loop.animname = "vp";
|
||
secret_service1_loop.animname = "secret_service1";
|
||
maps\nx_hithard_anim::vp_loop( secret_service1_loop, vp_loop );
|
||
|
||
}
|
||
|
||
agent2_loop()
|
||
{
|
||
node2 = GetStruct("node_ss_agent2_loop", "script_noteworthy");
|
||
agent2 = level.ss_fodder2;
|
||
agent2.animname = "agent2";
|
||
guys2 = [];
|
||
guys2["agent2"] = agent2;
|
||
level.ss_fodder2 enable_cqbwalk();
|
||
fodder2_node = GetNode("node_ss2_guard", "script_noteworthy");
|
||
level.ss_fodder2.goalradius = 8;
|
||
level.ss_fodder2 SetGoalNode(fodder2_node);
|
||
level.ss_fodder2 waittill("goal");
|
||
node2 thread anim_loop(guys2, "hunted_tunnel_guy2_idle");
|
||
flag_wait("flag_transition_squad_move0");
|
||
level.ss_fodder2 disable_cqbwalk();
|
||
node2 notify( "stop_loop" );
|
||
agent2 anim_stopanimscripted();
|
||
}
|
||
|
||
agent3_loop()
|
||
{
|
||
node3 = GetStruct("node_ss_agent3_loop", "script_noteworthy");
|
||
agent3 = level.ss_fodder3;
|
||
agent3.animname = "agent3";
|
||
guys3 = [];
|
||
guys3["agent3"] = agent3;
|
||
level.ss_fodder3 enable_cqbwalk();
|
||
fodder3_node = GetNode("node_ss3_guard", "script_noteworthy");
|
||
level.ss_fodder3.goalradius = 8;
|
||
level.ss_fodder3 SetGoalNode(fodder3_node);
|
||
level.ss_fodder3 waittill("goal");
|
||
node3 thread anim_loop(guys3, "hunted_tunnel_guy1_idle");
|
||
flag_wait("flag_transition_squad_move0");
|
||
level.ss_fodder3 disable_cqbwalk();
|
||
node3 notify( "stop_loop" );
|
||
agent3 anim_stopanimscripted();
|
||
}
|
||
|
||
agent_loops()
|
||
{
|
||
node2 = GetStruct("node_ss_agent2_loop", "script_noteworthy");
|
||
node3 = GetStruct("node_ss_agent3_loop", "script_noteworthy");
|
||
agent2 = level.ss_fodder2;
|
||
agent3 = level.ss_fodder3;
|
||
agent2.animname = "agent2";
|
||
agent3.animname = "agent3";
|
||
guys2 = [];
|
||
guys2["agent2"] = agent2;
|
||
guys3 = [];
|
||
guys3["agent3"] = agent3;
|
||
//node thread anim_loop(guys, "casual_crouch_idle");
|
||
//node2 thread anim_loop(guys2, "hunted_tunnel_guy2_idle");
|
||
//
|
||
level.ss_fodder3 enable_cqbwalk();
|
||
//flag_wait("flag_stairway_shake");
|
||
wait 1.0;
|
||
//flag_wait("flag_fodder3_moveit");
|
||
fodder2_node = GetNode("node_ss2_guard", "script_noteworthy");
|
||
level.ss_fodder2.goalradius = 8;
|
||
level.ss_fodder2 SetGoalNode(fodder2_node);
|
||
|
||
fodder3_node = GetNode("node_ss3_guard", "script_noteworthy");
|
||
level.ss_fodder3.goalradius = 8;
|
||
level.ss_fodder3 SetGoalNode(fodder3_node);
|
||
level.ss_fodder3 waittill("goal");
|
||
//
|
||
node2 thread anim_loop(guys2, "hunted_tunnel_guy2_idle");
|
||
node3 thread anim_loop(guys3, "hunted_tunnel_guy1_idle");
|
||
flag_wait("flag_transition_squad_move0");
|
||
level.ss_fodder3 disable_cqbwalk();
|
||
node2 notify( "stop_loop" );
|
||
node3 notify( "stop_loop" );
|
||
agent2 anim_stopanimscripted();
|
||
agent3 anim_stopanimscripted();
|
||
}
|
||
|
||
agent3_last_stand()
|
||
{
|
||
// Send Agent 3 to his last stand
|
||
// set him to a non-existent color
|
||
level.ss_fodder3 set_force_color("o");
|
||
node_last_stand = GetNode( "node_ss_last_stand", "script_noteworthy");
|
||
level.ss_fodder3 SetGoalNode( node_last_stand );
|
||
level.ss_fodder3.goalradius = 8;
|
||
level.ss_fodder3 waittill("goal");
|
||
level.ss_fodder3 stop_magic_bullet_shield();
|
||
level.ss_fodder3.ignoreme = false;
|
||
level.ss_fodder3.takedamage = true;
|
||
}
|
||
|
||
|
||
use_dynamic_speed( ents, min_speed, max_speed, min_dist, max_dist )
|
||
{
|
||
while ( 1 )
|
||
{
|
||
if ( isdefined( self.pathgoalpos ) )
|
||
{
|
||
pos = (0, 0, 0);
|
||
count = 0;
|
||
foreach ( ent in ents )
|
||
{
|
||
if ( isalive( ent ) )
|
||
{
|
||
pos += ent.origin;
|
||
count++;
|
||
}
|
||
}
|
||
|
||
if ( count > 0 )
|
||
{
|
||
pos /= count;
|
||
dot = VectorDot( pos - self.origin, self.pathgoalpos - self.origin );
|
||
|
||
if ( dot < 0 )
|
||
{
|
||
self.moveplaybackrate = min_speed;
|
||
}
|
||
else
|
||
{
|
||
dist_sqr = DistanceSquared( self.origin, pos );
|
||
moveplaybackrate = lerp( min_speed, max_speed, dist_sqr, -1 * min_dist * min_dist, max_dist*max_dist );
|
||
self.moveplaybackrate = Clamp( moveplaybackrate, min_speed, max_speed );
|
||
}
|
||
}
|
||
}
|
||
|
||
wait 0.1;
|
||
}
|
||
}
|
||
|
||
lerp( min_out, max_out, value, min_value, max_value )
|
||
{
|
||
return (value - min_value) * (max_out - min_out) / (max_value-min_value) + min_out;
|
||
}
|
||
|
||
wait_and_end()
|
||
{
|
||
flag_set("flag_end_mission");
|
||
// Baker - "Convoy 2 requesting assistance, over."
|
||
wait 0.5;
|
||
level.squad[0] thread radio_dialogue("hithard_bak_trans_01");
|
||
wait 3.0;
|
||
//nextmission();
|
||
thread greenlight_sfx_fadeout_hithard();
|
||
endmission_goto_frontend();
|
||
|
||
}
|
||
|
||
hallway_vignette()
|
||
{
|
||
level.squad[0].animname = "baker";
|
||
node = GetEnt( "node_vignette_hallway", "targetname");
|
||
guys = [];
|
||
guys["baker"] = level.squad[0];
|
||
node thread anim_single(guys, "bog_radio_dialogue");
|
||
}
|
||
|
||
vp_hallway_vignette()
|
||
{
|
||
level.vp_transition.goalradius = 8;
|
||
node_vp = getnode("node_vp_hallway", "script_noteworthy");
|
||
level.vp_transition SetGoalNode( node_vp );
|
||
level.vp_transition waittill( "goal" );
|
||
|
||
//node = GetEnt( "node_vp_hallway_vignette" , "targetname");
|
||
node = GetEnt( "node_vp_hallway_vignette2" , "targetname");
|
||
guy = level.vp_transition;
|
||
guy.animname = "vp";
|
||
//node thread anim_loop_solo (guy, "cargoship_ch46_rescue_load_1_idle");
|
||
node anim_single_solo (guy, "nx_tp_hithard_vp_rest_VP");
|
||
node thread anim_loop_solo (guy, "nx_tp_hithard_vp_rest_VP_idle");
|
||
flag_set("flag_vp_playing_hallway_loop");
|
||
flag_wait("flag_ss_playing_hallway_loop");
|
||
// Don't start the tail end of the anim until you are sure the level is going to fade out
|
||
flag_wait("flag_hallway_blocked");
|
||
node notify( "stop_loop" );
|
||
level.vp_transition anim_stopanimscripted();
|
||
node anim_single_solo (guy, "nx_tp_hithard_vp_rest_VP_end");
|
||
}
|
||
|
||
ss_hallway_vignette()
|
||
{
|
||
level.ss_fodder2.goalradius = 8;
|
||
node_ss = getnode("node_ss_hallway", "targetname");
|
||
level.ss_fodder2 SetGoalNode( node_ss );
|
||
level.ss_fodder2 waittill( "goal" );
|
||
node = GetEnt( "node_ss_hallway_vignette" , "targetname");
|
||
guy = level.ss_fodder2;
|
||
guy.animname = "ss";
|
||
//node anim_single_solo (guy, "nx_tp_hithard_vp_rest_VP");
|
||
node thread anim_loop_solo (guy, "nx_tp_hithard_vp_rest_SS_idle");
|
||
flag_set("flag_ss_playing_hallway_loop");
|
||
flag_wait("flag_vp_playing_hallway_loop");
|
||
// Don't start the tail end of the anim until you are sure the level is going to fade out
|
||
flag_wait("flag_hallway_blocked");
|
||
node notify( "stop_loop" );
|
||
level.ss_fodder2 anim_stopanimscripted();
|
||
node anim_single_solo (guy, "nx_tp_hithard_vp_rest_ss_end");
|
||
}
|
||
|
||
staircase_rumble()
|
||
{
|
||
flag_wait( "flag_stairway_shake" );
|
||
|
||
|
||
level._player maps\nx_hithard_util::missile_hit_rumble();
|
||
//pulselights( "staircase_pulse_lights" );
|
||
stairway_shake_fx = GetEnt( "stairway_shake_fx", "targetname" );
|
||
forward = AnglesToForward( stairway_shake_fx.angles );
|
||
up = AnglesToUp( stairway_shake_fx.angles );
|
||
playFX( level._effect[ "ceiling_rock_collapse" ], stairway_shake_fx.origin, forward, up );
|
||
}
|
||
|
||
staircase_rumble2()
|
||
{
|
||
flag_wait( "flag_stairway_shake2" );
|
||
level._player setchannelvolumes( "snd_channelvolprio_level", "nx_hithard_2nd_stairs", 0.8 );
|
||
|
||
//thread maps\_utility::set_ambient( "nx_hithard_no_ugv" );
|
||
level._player playsound ( "elm_hh_building_shake_2" );
|
||
thread sound_low_hit();
|
||
level._player maps\nx_hithard_util::missile_hit_rumble();
|
||
}
|
||
|
||
stairwell_collapse()
|
||
{
|
||
//flag_wait( "flag_stairway_shake" );
|
||
wait 1.5;
|
||
stairwell_collapse_fx = GetEnt( "stairwell_collapse_fx", "targetname" );
|
||
playFX( level._effect[ "nx_explosion_cortel_stairwell" ], stairwell_collapse_fx.origin );
|
||
wait 0.175;
|
||
stairwell_collapse_fx2 = GetEnt( "stairwell_collapse_fx2", "targetname" );
|
||
playFX( level._effect[ "nx_explosion_cortel_stairwell" ], stairwell_collapse_fx2.origin );
|
||
wait 0.175;
|
||
//stairwell_collapse_fx3 = GetEnt( "stairwell_collapse_fx3", "targetname" );
|
||
//playFX( level._effect[ "nx_explosion_cortel_stairwell" ], stairwell_collapse_fx3.origin );
|
||
}
|
||
|
||
sound_low_hit()
|
||
{
|
||
|
||
wait 3.4;
|
||
//level._player playsound ( "elm_hh_building_low_hit" );
|
||
entity01 = spawn( "sound_emitter", ( 9154, -3694, 429 ) );
|
||
entity01 PlaySound( "elm_hh_building_low_hit", "elm_hh_building_low_hit", true );
|
||
entity01 waittill( "elm_hh_building_low_hit" );
|
||
entity01 delete();
|
||
|
||
}
|
||
|
||
// Osprey Fly in stuff
|
||
osprey_fly_in()
|
||
{
|
||
//wait 11;
|
||
//wait 13.25;
|
||
wait 12.3;
|
||
flag_set( "flag_osprey_fly_in" );
|
||
wait 5.0;
|
||
// Osprey radio - "Convoy 2 this is Sparrow 3-6. On approach from the West. Prepare for dust-off, over."
|
||
level.squad[0] radio_dialogue("hithard_rad_vp2_01");
|
||
|
||
}
|
||
|
||
Osprey_VP_Vignette()
|
||
{
|
||
flag_wait("flag_osprey_fly_in");
|
||
// These vehicles are in nx_hithard_script_anim.map
|
||
level.osprey_vignette = spawn_vehicle_from_targetname( "ospreycrashvp");
|
||
level.osprey_vignette Vehicle_TurnEngineOff();
|
||
level.osprey_vignette.animname = "ospreycrashvp";
|
||
level.osprey_vignette magic_bullet_shield();
|
||
//level.osprey_vignette.ignorerandombulletdamage = true;
|
||
level.osprey_vignette setCanDamage( false );
|
||
level.osprey_vignette suspend_drive_anims_for_vignette();
|
||
maps\nx_hithard_anim::nx_vh_ospreycrashvp_osprey_01(level.osprey_vignette);
|
||
}
|
||
|
||
|
||
UGV1_drive_kill()
|
||
{
|
||
// Wait and then the UGV rolls up
|
||
//flag_wait( "flag_osprey_fly_in" );
|
||
special_car = GetEnt( "ugv_targetcar1", "targetname" );
|
||
special_car setCanDamage(false);
|
||
|
||
flag_clear("flag_ugv_stop");
|
||
level._player.ignoreme = true;
|
||
level.squad[0].ignoreme = true;
|
||
level.squad[1].ignoreme = true;
|
||
level.ugv1 = spawn_vehicle_from_targetname( "transition_ugv1" );
|
||
level.ugv1 = Get_Vehicle( "transition_ugv1", "targetname" );
|
||
level.ugv1 Vehicle_TurnEngineOff();
|
||
flag_wait( "flag_osprey_fly_in" );
|
||
level.ugv1 playsound ( "scn_hh_ugv_approach" );
|
||
turret = level.ugv1.mgturret[0];
|
||
//turret StartBarrelSpin();
|
||
// turn off the machine gun until later
|
||
turret_mg = level.ugv1.mgturret[2];
|
||
turret_mg setmode( "manual" );
|
||
// Moving 15 frames earlier.
|
||
//wait 11.75;
|
||
wait 8.0;
|
||
// Roll up slowly
|
||
level.ugv1 GoPath();
|
||
level.ugv1 Vehicle_TurnEngineOff();
|
||
level.ugv1 Vehicle_SetSpeed( 17.0, 25.0);
|
||
level.ugv1 Vehicle_TurnEngineOff();
|
||
// start shootin'
|
||
wait 1.3;
|
||
targetPos = (6532, -2912, 260);
|
||
turret aim_then_shoot_ce_ugv_turret_once_at_position( targetPos );
|
||
//turret SetTurretTargetPosition(targetPos);
|
||
//turret ShootTurret();
|
||
|
||
level notify( "notify_osprey_hit" ); // cue for vfx
|
||
|
||
spawners = getentarray( "ugv_squada", "targetname" );
|
||
array_thread( spawners, ::spawn_ai );
|
||
level.ugv1 Vehicle_SetSpeed( 0, 25.0);
|
||
// Wait after killing Osprey and fire a shot moving the turret toward the player
|
||
//wait 1.5;
|
||
//targetPos = (7324, -2680, 20);
|
||
wait 0.5;
|
||
targetPos = (7228, -2680, 20);
|
||
turret aim_then_shoot_ce_ugv_turret_once_at_position( targetPos );
|
||
wait 0.5;
|
||
targetPos = (7516, -2680, 20);
|
||
turret aim_then_shoot_ce_ugv_turret_once_at_position( targetPos );
|
||
|
||
//flag_wait("flag_transition_squad_move0");
|
||
//flag_wait ("flag_vp_meet_greet_anim_reached");
|
||
wait 0.3;
|
||
//
|
||
// spawn another squad of dudes
|
||
spawners = getentarray( "ugv_squadb", "targetname" );
|
||
array_thread( spawners, ::spawn_ai );
|
||
//
|
||
wait 0.25;
|
||
special_car setCanDamage(true);
|
||
level.ugv1 Vehicle_SetSpeed( 5.0, 15.0);
|
||
level.ugv1 Vehicle_TurnEngineOn();
|
||
wait 0.25;
|
||
|
||
ugv_target = GetEnt( "ugv_targetcar1", "targetname" );
|
||
targetPos = ugv_target.origin;
|
||
//level.ugv1 thread vehicle_fire_around_entity( ugv_target, 2.5);
|
||
turret aim_then_shoot_ce_ugv_turret_once_at_position( targetPos );
|
||
level thread car_jolt();
|
||
radiusdamage( ugv_target.origin, 100, 1000, 1000 );
|
||
|
||
turret_mg setmode( "auto_nonai" );
|
||
wait 1.25;
|
||
// stop the UGV and have it target the player if he's not moving
|
||
//level._player.ignoreme = false;
|
||
//level.squad[0].ignoreme = false;
|
||
if (!flag( "flag_transition_squad_move2"))
|
||
{
|
||
level.ugv1 Vehicle_SetSpeed( 0.0, 15.0);
|
||
first_shot = true;
|
||
while(1)
|
||
{
|
||
if (flag( "flag_transition_squad_move2"))
|
||
break;
|
||
|
||
targetPos = level._player.origin;
|
||
//turret SetTurretTargetPosition(targetPos);
|
||
//wait 1.0;
|
||
//turret ShootTurret();
|
||
if ( first_shot )
|
||
turret aim_then_shoot_ce_ugv_turret_once_at_position( targetPos );
|
||
else
|
||
turret shoot_ce_ugv_turret_once_at_position( targetPos );
|
||
first_shot = false;
|
||
|
||
level._player.ignoreme = false;
|
||
}
|
||
}
|
||
wait 1.0;
|
||
level._player.ignoreme = false;
|
||
level.squad[0].ignoreme = false;
|
||
level.ugv1 Vehicle_SetSpeed( 5.0, 15.0);
|
||
flag_set("flag_ugv_shove1");
|
||
// end of extras
|
||
ugv_target = GetEnt( "ugv_targetcar2", "targetname" );
|
||
level.ugv1 thread vehicle_fire_around_entity( ugv_target, 2.5);
|
||
wait_for_death( ugv_target );
|
||
wait 0.5;
|
||
// blowing the cortel door
|
||
flag_wait("flag_blow_cortel_door");
|
||
targetPos = (7993, -1075, 8);
|
||
turret aim_then_shoot_ce_ugv_turret_once_at_position( targetPos );
|
||
for ( i=0; i<3; i++)
|
||
{
|
||
//targetPos = (8029, -1075, -36);
|
||
//turret SetTurretTargetPosition(targetPos);
|
||
//wait 0.35;
|
||
//turret ShootTurret();
|
||
//wait 0.35;
|
||
turret shoot_ce_ugv_turret_once_at_position( targetPos );
|
||
}
|
||
//
|
||
ugv_target = GetEnt( "ugv_targetcar3", "targetname" );
|
||
level.ugv1 thread vehicle_fire_around_entity( ugv_target, 2.5);
|
||
wait_for_death( ugv_target );
|
||
wait 0.5;
|
||
ugv_target = GetEnt( "ugv_targetcar4", "targetname" );
|
||
level.ugv1 thread vehicle_fire_around_entity( ugv_target, 2.5);
|
||
wait_for_death( ugv_target );
|
||
// Wait a while then advance into the cortel and kill the player
|
||
//flag_wait("flag_get_off_the_street");
|
||
//flag_wait("flag_osprey_ugv_drop");
|
||
flag_wait("flag_ugv_stop");
|
||
level.ugv1 Vehicle_SetSpeed( 0, 25.0);
|
||
//flag_wait("flag_get_off_the_street");
|
||
//level.ugv1 Vehicle_SetSpeed( 3.0, 15.0);
|
||
level._player.ignoreme = false;
|
||
flag_wait("flag_transition_squad_move3");
|
||
//level.ugv1 Vehicle_SetSpeed(7.0, 15.0);
|
||
level.ugv1 Vehicle_SetSpeed(11.5, 18.0);
|
||
// target the player so he can be killed
|
||
//level._player.ignoreme = false;
|
||
flag_wait("flag_ugv_shoot_door");
|
||
//targetPos = (8088, 344, -60);
|
||
targetPos = (8088, 344, -35);
|
||
turret aim_then_shoot_ce_ugv_turret_once_at_position( targetPos );
|
||
wait 0.5;
|
||
level thread stairwell_collapse();
|
||
thread audio_collapse_sound();
|
||
flag_set("flag_hallway_blocked");
|
||
turret shoot_ce_ugv_turret_once_at_position( targetPos );
|
||
}
|
||
|
||
ugv1_kill_cars()
|
||
{
|
||
|
||
flag_wait("flag_ugv_shove1");
|
||
wait 4.0;
|
||
radiusdamage( (7624,-2396, -144), 100, 1000, 1000 );
|
||
org = (7624,-2396, -144);
|
||
vector = ( 0, 5, 3 );
|
||
PhysicsJolt( org, 50, 50, vector);
|
||
|
||
//flag_wait("flag_ugv_shove2");
|
||
//radiusdamage( (7584, -2516, -144), 100, 1000, 1000 );
|
||
//org = (7584, -2516, -144);
|
||
//vector = ( 0, -1, 4 );
|
||
//PhysicsJolt( org, 50, 50, vector);
|
||
//flag_wait("flag_ugv_shove3");
|
||
//radiusdamage( (7748, -2236, -144), 100, 1000, 1000 );
|
||
//org = (7748, -2236, -144);
|
||
//vector = ( 0, -1, 4 );
|
||
//PhysicsJolt( org, 50, 50, vector);
|
||
}
|
||
|
||
audio_collapse_sound()
|
||
{
|
||
|
||
wait 1.5;
|
||
collapsenode = spawn( "script_origin", ( 8157, 337, -68 ) );
|
||
collapsenode PlaySound( "elm_hh_collapse", "elm_hh_collapse", true );
|
||
collapsenode waittill( "elm_hh_collapse" );
|
||
collapsenode delete();
|
||
|
||
}
|
||
|
||
car_jolt()
|
||
{
|
||
ugv_target = GetEnt( "ugv_targetcar1", "targetname" );
|
||
//vector = ( 0, 2, 6 );
|
||
org = ugv_target.origin + (50, 50, 0);
|
||
//vector = ( 4, -3, 6 );
|
||
vector = ( 3, -5, 6 );
|
||
wait_for_death( ugv_target );
|
||
ugv_target playsound( "scn_hithard_ugvcar01" );
|
||
// If the player is looking in the direction of the exploding car, play it in slomo
|
||
look_spot1 = (7744, -2952, -64);
|
||
look_spot2 = (7744, -2800, -64);
|
||
look_spot3 = (7744, -2648, -64);
|
||
if( (player_looking_at(look_spot1))||(player_looking_at(look_spot2))||(player_looking_at(look_spot3)))
|
||
{
|
||
level thread car_explode_slow_mo();
|
||
wait 0.2;
|
||
}
|
||
//
|
||
PhysicsJolt( org, 50, 50, vector);
|
||
ugv_target = GetEnt( "ugv_targetcar2", "targetname" );
|
||
org = ugv_target.origin + (50, -50, 0);
|
||
vector = ( 0, 1, 4 );
|
||
wait_for_death( ugv_target );
|
||
ugv_target playsound( "scn_hithard_ugvcar02" );
|
||
PhysicsJolt( org, 50, 50, vector);
|
||
ugv_target = GetEnt( "ugv_targetcar3", "targetname" );
|
||
org = ugv_target.origin + (-50, 50, 0);
|
||
vector = ( 0, 1, 4 );
|
||
wait_for_death( ugv_target );
|
||
ugv_target playsound( "scn_hithard_ugvcar03" );
|
||
PhysicsJolt( org, 50, 50, vector);
|
||
ugv_target = GetEnt( "ugv_targetcar4", "targetname" );
|
||
//org = ugv_target.origin + (50, 50, 0);
|
||
//vector = ( 0, 1, 3 );
|
||
wait_for_death( ugv_target );
|
||
ugv_target playsound( "scn_hithard_ugvcar04" );
|
||
//PhysicsJolt( org, 50, 50, vector);
|
||
}
|
||
|
||
car_explode_slow_mo()
|
||
{
|
||
// Don't slomo the mission critical speech
|
||
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", 1 );
|
||
SoundSetTimeScaleFactor( "vignette2d", 1 );
|
||
|
||
slomoLerpTime_in = 2.5;
|
||
slomoLerpTime_out = 0.65;
|
||
slomobreachplayerspeed = 0.1;
|
||
//slomoSpeed = 0.1;
|
||
//slomoDuration = 24;
|
||
slomoSpeed = 0.20;
|
||
slomoDuration = 7;
|
||
|
||
//music_stop();
|
||
|
||
level._player magic_bullet_shield();
|
||
// Start slo motion
|
||
level._player PlaySound( "scn_hithard_slowdown" );
|
||
level._player setchannelvolumes( "snd_channelvolprio_pain", "hithard_slowmo", 0.5 );
|
||
slowmo_start();
|
||
slowmo_setspeed_slow( slomoSpeed );
|
||
slowmo_setlerptime_in( slomoLerpTime_in );
|
||
slowmo_lerp_in();
|
||
|
||
level._player SetMoveSpeedScale( slomobreachplayerspeed );
|
||
|
||
// Wait slo mo duration
|
||
wait slomoDuration * slomoSpeed;
|
||
|
||
// Stop slo motion
|
||
slowmo_setlerptime_out( slomoLerpTime_out );
|
||
level._player PlaySound( "scn_hithard_speedup" );
|
||
level._player deactivatechannelvolumes( "snd_channelvolprio_pain", 1 );
|
||
slowmo_lerp_out();
|
||
slowmo_end();
|
||
level._player SetMoveSpeedScale( 1.0 );
|
||
wait 1.0;
|
||
level._player stop_magic_bullet_shield();
|
||
}
|
||
|
||
ugv_squad1()
|
||
{
|
||
spawners = getentarray( "ugv_squad1", "targetname" );
|
||
array_thread( spawners, ::spawn_ai );
|
||
wait 1.0;
|
||
while(1)
|
||
{
|
||
num_alive = get_ai_group_sentient_count( "ugv_squad1" );
|
||
if( num_alive < 8 )
|
||
break;
|
||
wait( 0.25 );
|
||
}
|
||
flag_set("flag_osprey_ugv_drop");
|
||
}
|
||
|
||
cortel_squad()
|
||
{
|
||
flag_wait("flag_spawn_cortel_squad");
|
||
spawners = getentarray( "cortel_squad", "targetname" );
|
||
array_thread( spawners, ::spawn_ai );
|
||
}
|
||
|
||
vehicle_fire_around_entity( e, interval )
|
||
{
|
||
self endon( "death" );
|
||
if( !IsDefined( self.mgturret ) )
|
||
return;
|
||
|
||
turret = self.mgturret[0];
|
||
|
||
//turret StartBarrelSpin();
|
||
|
||
first_shot = true;
|
||
|
||
while( 1 )
|
||
{
|
||
r = RandomFloat( 360 );
|
||
s = RandomFloatRange( 120.0, 240.0 );
|
||
if (isalive(e))
|
||
targetPos = e.origin + ( cos(r)*s, sin(r)*s, 0);
|
||
else
|
||
break;
|
||
//turret SetTurretTargetPosition( targetPos );
|
||
|
||
//turret ShootTurret();
|
||
|
||
if ( first_shot )
|
||
turret aim_then_shoot_ce_ugv_turret_once_at_position( targetPos );
|
||
else
|
||
turret shoot_ce_ugv_turret_once_at_position( targetPos );
|
||
first_shot = false;
|
||
|
||
wait interval;
|
||
}
|
||
}
|
||
|
||
vehicle_fire_around_origin( e, interval )
|
||
{
|
||
self endon( "death" );
|
||
if( !IsDefined( self.mgturret ) )
|
||
return;
|
||
|
||
turret = self.mgturret[0];
|
||
|
||
turret StartBarrelSpin();
|
||
|
||
while( 1 )
|
||
{
|
||
r = RandomFloat( 360 );
|
||
s = RandomFloatRange( 120.0, 240.0 );
|
||
targetPos = e.origin + ( cos(r)*s, sin(r)*s, 0);
|
||
turret SetTurretTargetPosition( targetPos );
|
||
|
||
turret ShootTurret();
|
||
|
||
wait interval;
|
||
}
|
||
}
|
||
|
||
wait_for_death( guy )
|
||
{
|
||
if ( !isalive( guy ) )
|
||
return;
|
||
guy waittill( "death" );
|
||
}
|
||
|
||
Osprey_UGV_drop_Vignette()
|
||
{
|
||
// These vehicles are in nx_hithard_script_anim.map
|
||
// Spawn the suv right away so you don't see it pop in
|
||
dropoff_suv_01 = spawn_vehicle_from_targetname( "dropoff_suv_01");
|
||
//dropoff_suv_01 = Get_Vehicle( "dropoff_suv_01", "targetname");
|
||
flag_wait("flag_spawn_squad");
|
||
//thread add_dialogue_line( "SS leader", "Behind the bus! Take cover!", "g" );
|
||
thread radio_dialogue( "hithard_sslead_snipe_behindbus" );
|
||
//Spawn ugv guys
|
||
level thread ugv_squad1();
|
||
// add a temp wait until you put in a new flag
|
||
flag_wait("flag_osprey_ugv_drop");
|
||
// spawn vignette vehicles
|
||
dropoff_chinese_vtol_01 = spawn_vehicle_from_targetname( "dropoff_chinese_vtol_01");
|
||
dropoff_chinese_vtol_sfx = Get_Vehicle( "dropoff_chinese_vtol_01", "targetname" );
|
||
dropoff_ugv_01 = spawn_vehicle_from_targetname( "dropoff_ugv_01");
|
||
dropoff_ugv_sfx = Get_Vehicle( "dropoff_ugv_01", "targetname" );
|
||
dropoff_ugv_sfx Vehicle_TurnEngineOff();
|
||
// register animnames
|
||
dropoff_chinese_vtol_01.animname = "dropoff_chinese_vtol_01";
|
||
dropoff_chinese_vtol_sfx playsound( "scn_hhh_vtol_flyin04" );
|
||
dropoff_suv_01.animname = "dropoff_suv_01";
|
||
thread dropoff_ugv_sfx();
|
||
dropoff_ugv_01.animname = "dropoff_ugv_01";
|
||
dropoff_ugv_01 suspend_drive_anims_for_vignette();
|
||
maps\nx_hithard_anim::nx_vh_chinese_vtol_ugv_drop(dropoff_suv_01, dropoff_ugv_01, dropoff_chinese_vtol_01);
|
||
dropoff_ugv_sfx Vehicle_TurnEngineOn();
|
||
dropoff_ugv_01 restore_drive_anims_for_vignette();
|
||
}
|
||
|
||
dropoff_ugv_sfx()
|
||
{
|
||
|
||
dropoff_suv_01 = Get_Vehicle( "dropoff_suv_01", "targetname");
|
||
wait 8.5;
|
||
dropoff_suv_01 playsound( "scn_hhh_ugvcardrop" );
|
||
wait 0.3;
|
||
dropoff_suv_01 playloopsound( "suv_car_alarm" );
|
||
|
||
}
|
||
|
||
dropped_ugv_firing()
|
||
{
|
||
//wait 5.0;
|
||
flag_wait("flag_vignette_vtol_ugv_drop_done");
|
||
dropoff_ugv = GetEnt("dropoff_ugv_01", "targetname");
|
||
//dropoff_ugv_01 restore_drive_anims_for_vignette();
|
||
dropoff_ugv_target = GetEnt( "ugv_targetcar5", "targetname");
|
||
dropoff_ugv thread vehicle_fire_around_entity( dropoff_ugv_target, 0.75);
|
||
wait_for_death( dropoff_ugv_target );
|
||
//dropoff_ugv_target = GetEnt("ugv_target2", "targetname");
|
||
//dropoff_ugv_01 thread vehicle_fire_around_entity( dropoff_ugv_target, 0.75);
|
||
while(1)
|
||
{
|
||
dropoff_ugv_target = GetEnt("ugv_target1", "targetname");
|
||
dropoff_ugv thread vehicle_fire_around_entity( dropoff_ugv_target, 0.75);
|
||
wait (randomfloatrange( 1.0, 2.5) );
|
||
dropoff_ugv_target = GetEnt("ugv_target2", "targetname");
|
||
dropoff_ugv thread vehicle_fire_around_entity( dropoff_ugv_target, 0.75);
|
||
wait (randomfloatrange( 1.0, 2.5) );
|
||
dropoff_ugv_target = GetEnt("ugv_target2", "targetname");
|
||
dropoff_ugv thread vehicle_fire_around_entity( dropoff_ugv_target, 0.75);
|
||
wait (randomfloatrange( 1.0, 2.5) );
|
||
}
|
||
}
|
||
|
||
ignore_almost_everything()
|
||
{
|
||
//self.ignoreall = true;
|
||
self.ignoreme = true;
|
||
//self.grenadeawareness = 0;
|
||
//self.ignoreexplosionevents = true;
|
||
self.ignorerandombulletdamage = true;
|
||
self.ignoresuppression = true;
|
||
self.fixednode = false;
|
||
self.disableBulletWhizbyReaction = true;
|
||
self disable_pain();
|
||
self.dontavoidplayer = true;
|
||
//self.og_newEnemyReactionDistSq = self.newEnemyReactionDistSq;
|
||
//self.newEnemyReactionDistSq = 0;
|
||
}
|
||
|
||
|
||
// Old vehicle drive stuff
|
||
|
||
//*******************************************************************
|
||
//MOUNT PLAYER TURRET *
|
||
//*******************************************************************
|
||
|
||
player_mount_humvee_and_use_turret()
|
||
{
|
||
//Adjusted turret rotation from 360 to 45
|
||
self PlayerLinkToDelta( level.convoy[ "player" ], "tag_player", 0.5 );
|
||
turret = level.convoy[ "player" ].mgturret[ 0 ];
|
||
turret MakeUsable();
|
||
turret SetMode( "manual" );
|
||
turret UseBy( self );
|
||
turret MakeUnusable();
|
||
level._player SetPlayerAngles( ( 0, level.convoy["player"].angles[ 1 ], 0 ) );
|
||
self DisableTurretDismount();
|
||
self.turret = turret;
|
||
}
|
||
|
||
//*******************************************************************
|
||
//UNMOUNT PLAYER TURRET *
|
||
//*******************************************************************
|
||
|
||
player_unmount_humvee()
|
||
{
|
||
//Player still linked to turret "model" at origin and will teleport
|
||
//back when unlinked. Must delete turret and teleport to temp node origin
|
||
jump_node = GetEnt("teleport_point","script_noteworthy");
|
||
org = jump_node.origin;
|
||
level._player Unlink();
|
||
level._player.turret Delete();
|
||
level._player SetOrigin( org );
|
||
}
|
||
|
||
|
||
//*******************************************************************
|
||
//VEHICLE START PATH *
|
||
//*******************************************************************
|
||
|
||
vehicle_start_path( script_noteworthy, callback_on_end )
|
||
{
|
||
node = GetVehicleNode( script_noteworthy, "script_noteworthy" );
|
||
self StartPath( node );
|
||
self waittill( "reached_end_node" );
|
||
if( IsDefined( callback_on_end ) )
|
||
self thread vehicle_on_path_end( callback_on_end );
|
||
}
|
||
|
||
//*******************************************************************
|
||
//PATH CALLBACKS *
|
||
//*******************************************************************
|
||
|
||
vehicle_on_path_end( callback )
|
||
{
|
||
self [[callback]]();
|
||
}
|
||
|
||
vehicle_on_node( script_noteworthy, callback )
|
||
{
|
||
self waittill( script_noteworthy );
|
||
self thread [[callback]]();
|
||
}
|
||
|
||
vehicle_forward()
|
||
{
|
||
self.veh_transmission = "forward";
|
||
}
|
||
|
||
vehicle_reverse()
|
||
{
|
||
self.veh_transmission = "reverse";
|
||
}
|
||
|
||
//*******************************************************************
|
||
//START PATH *
|
||
//*******************************************************************
|
||
|
||
/*
|
||
convoy_start_path()
|
||
{
|
||
level.convoy[ "ally01" ] thread vehicle_path_ally01();
|
||
level.convoy[ "ally02" ] thread vehicle_path_ally02();
|
||
level.convoy[ "player" ] thread vehicle_path_player();
|
||
|
||
//level.convoy[ "ally01" ] thread ride_speed_ai_sheep("AI_speed_burst_sheep");
|
||
//level.convoy[ "ally02" ] thread ride_speed_ai_vp("AI_speed_burst_vp");
|
||
//level.convoy[ "player" ] thread ride_speed_player("player_speed_burst");
|
||
//level.ugv[ "a" ] thread vehicle_path_ugvA();
|
||
//level.ugv[ "b" ] thread vehicle_path_ugvB();
|
||
}
|
||
|
||
|
||
|
||
//*******************************************************************
|
||
//ALLY01 EVENTS (SHEEP) *
|
||
//*******************************************************************
|
||
|
||
vehicle_path_ally01()
|
||
{
|
||
wait 2.5;
|
||
self vehicle_forward();
|
||
self vehicle_start_path( "convoy_rollout_ally01" );
|
||
|
||
self vehicle_start_path("encounter_underpass_ally01");
|
||
self vehicle_start_path("speedup_ally01");
|
||
|
||
self vehicle_waittill_stopped();
|
||
wait 0.5;
|
||
self vehicle_start_path( "building_fall_detour_ally01" );
|
||
|
||
wait 1.0;
|
||
self vehicle_start_path( "blocker_defend_ally01" );
|
||
|
||
wait 8.0;
|
||
self vehicle_start_path( "blocker_escape_ally01" );
|
||
}
|
||
|
||
//*******************************************************************
|
||
//ALLY02 EVENTS (VP) *
|
||
//*******************************************************************
|
||
|
||
vehicle_path_ally02()
|
||
{
|
||
wait 3.5;
|
||
self vehicle_forward();
|
||
self vehicle_start_path( "convoy_rollout_ally02" );
|
||
|
||
self vehicle_start_path("encounter_underpass_ally02");
|
||
self vehicle_start_path("speedup_ally02");
|
||
|
||
self vehicle_waittill_stopped();
|
||
wait 1.5;
|
||
self vehicle_reverse();
|
||
self vehicle_start_path( "building_fall_backup_ally02" );
|
||
|
||
self vehicle_waittill_stopped();
|
||
self vehicle_forward();
|
||
self vehicle_start_path( "vp_rollout_ally02" );
|
||
|
||
wait 4.0;
|
||
self vehicle_start_path( "blocker_defend_ally02" );
|
||
|
||
wait 8.0;
|
||
self vehicle_start_path( "blocker_escape_ally02" );
|
||
|
||
wait 1.0;
|
||
self vehicle_reverse();
|
||
self vehicle_start_path( "ugv_detour_ally02" );
|
||
|
||
wait 1.5;
|
||
self vehicle_forward();
|
||
self vehicle_start_path( "promenade_ally02" );
|
||
|
||
wait 0.5;
|
||
self vehicle_start_path( "convoy_cityhall_ally02" );
|
||
|
||
// self vehicle_forward();
|
||
// self vehicle_start_path( "slow_crawl_ally02" );
|
||
//
|
||
// self vehicle_forward();
|
||
// self vehicle_start_path( "blockade_ally02" );
|
||
//
|
||
// //wait until all blockade EC are dead - flag sent from player fnc
|
||
// level waittill("go");
|
||
// self vehicle_forward();
|
||
// self vehicle_start_path( "intersection_battle_ally02" );
|
||
//
|
||
// wait 1.0;
|
||
// self vehicle_reverse();
|
||
// self vehicle_start_path( "ugv_detour_ally02" );
|
||
//
|
||
// wait 1.5;
|
||
// self vehicle_forward();
|
||
// self vehicle_start_path( "promenade_ally02" );
|
||
//
|
||
|
||
}
|
||
|
||
//*******************************************************************
|
||
//PLAYER EVENT *
|
||
//*******************************************************************
|
||
|
||
vehicle_path_player()
|
||
{
|
||
// self thread path_flags_player();
|
||
|
||
//Objective 0: Motorcade Start
|
||
maps\nx_hithard_util::objective_start( "obj_motorcade_rollout", "SECURE THE VP MOTORCADE" );
|
||
|
||
wait 7.0;
|
||
self vehicle_forward();
|
||
self vehicle_start_path( "convoy_rollout_player" );
|
||
|
||
//Objective 0: Motorcade Complete
|
||
maps\nx_hithard_util::objective_end( "obj_motorcade_rollout" );
|
||
|
||
self vehicle_start_path("encounter_underpass_player");
|
||
self vehicle_start_path("speedup_player");
|
||
|
||
self vehicle_waittill_stopped();
|
||
wait 1.0;
|
||
self vehicle_reverse();
|
||
self vehicle_start_path( "building_fall_backup_player" );
|
||
thread autosave_now();
|
||
|
||
wait 0.5;
|
||
self vehicle_forward();
|
||
self vehicle_start_path( "building_fall_detour_player" );
|
||
|
||
wait 7.0;
|
||
self vehicle_start_path( "blocker_defend_player" );
|
||
|
||
// self thread ram_objective( "ram_group_a", "blocker_encounter_end" );
|
||
// wait 12.0;
|
||
// level notify( "blocker_encounter_end" );
|
||
|
||
wait 8.0;
|
||
self vehicle_start_path( "blocker_escape_player" );
|
||
|
||
wait 4.0;
|
||
self vehicle_reverse();
|
||
self vehicle_start_path( "ugv_detour_player" );
|
||
|
||
wait 1.5;
|
||
self vehicle_forward();
|
||
self vehicle_start_path( "promenade_player" );
|
||
|
||
wait 0.5;
|
||
self vehicle_start_path( "convoy_cityhall_player" );
|
||
|
||
// self vehicle_forward();
|
||
// self vehicle_start_path( "slow_crawl_player" );
|
||
//
|
||
// //Objective 1: Blockade Start
|
||
// maps\nx_hithard_util::objective_start( "obj_motorcade_blockade", "CLEAR THE BLOCKADE" );
|
||
// //currently blocking out north wave due to actor count
|
||
//// motorcade_enemies_spawn("OP4_North_Promanade");
|
||
// self vehicle_forward();
|
||
// self vehicle_start_path( "blockade_player" );
|
||
//// level.enemy_spawned["street_wave_02"] = motorcade_enemies_gather("op4_blockade");
|
||
//// waittill_dead_or_dying( level.enemy_spawned["street_wave_02"] );
|
||
// level notify("go");
|
||
// //Objective 1: Blockade Complete
|
||
// maps\nx_hithard_util::objective_end( "obj_motorcade_blockade" );
|
||
// thread autosave_now();
|
||
//
|
||
// self vehicle_forward();
|
||
// self vehicle_start_path( "intersection_battle_player" );
|
||
//
|
||
// wait 4.0;
|
||
// self vehicle_reverse();
|
||
// self vehicle_start_path( "ugv_detour_player" );
|
||
//
|
||
// //Objective 2: Detour Begin
|
||
// maps\nx_hithard_util::objective_start( "obj_motorcade_detour", "CHANGE OF PLANS" );
|
||
// thread autosave_now();
|
||
//
|
||
// wait 0.5;
|
||
// self vehicle_forward();
|
||
// self vehicle_start_path( "promenade_player" );
|
||
//
|
||
// //Objective 2: Detour Complete
|
||
// maps\nx_hithard_util::objective_end( "obj_motorcade_detour" );
|
||
// //Clean OP4_North_Promanade
|
||
// thread enemy_clean("OP4_North_Promanade");
|
||
// spawn_vehicles_from_targetname( "ugvB" );
|
||
//
|
||
//
|
||
|
||
}
|
||
|
||
//*******************************************************************
|
||
//UGV EVENT *
|
||
//*******************************************************************
|
||
|
||
vehicle_path_ugvA()
|
||
{
|
||
self.main_turret setmode("manual"); //( "auto_nonai" );
|
||
self.secondary_turret setmode( "manual" );
|
||
//self thread vehicle_fire_around_entity( level.convoy["ally02"], 0.75 );
|
||
|
||
flag_wait( "start_ugvA" );
|
||
|
||
self vehicle_start_path( "enter_ugvA" );
|
||
|
||
wait 6.0;
|
||
|
||
self vehicle_start_path( "detour_ugvA" );
|
||
self vehicle_start_path ("pin_ugvA");
|
||
|
||
}
|
||
|
||
vehicle_path_ugvB()
|
||
{
|
||
self.main_turret setmode("manual");
|
||
self.secondary_turret setmode( "manual" );
|
||
|
||
flag_wait( "start_ugvB" );
|
||
|
||
self vehicle_start_path( "enter_ugvB" );
|
||
}
|
||
|
||
|
||
//*******************************************************************
|
||
//OBJECTIVES *
|
||
//*******************************************************************
|
||
|
||
objectives()
|
||
{
|
||
switch( level._start_point )
|
||
{
|
||
default:
|
||
case "first_turn":
|
||
case "building_fall":
|
||
case "beyond_haze":
|
||
case "intersection_attack":
|
||
case "promenade_detour":
|
||
case "sandwich_end":
|
||
}
|
||
}
|
||
|
||
//*******************************************************************
|
||
//ENEMY CLEAN *
|
||
//*******************************************************************
|
||
enemy_clean(enemy_group_delete)//(encounter_enemy)
|
||
{
|
||
array_thread( getentarray(enemy_group_delete,"script_noteworthy"), ::living_dead);
|
||
}
|
||
|
||
living_dead()
|
||
{
|
||
if( isalive( self ) )
|
||
self delete();
|
||
}
|
||
|
||
//*******************************************************************
|
||
//ENEMY SPAWNER *
|
||
//*******************************************************************
|
||
|
||
|
||
motorcade_enemies_spawn(enemy_script_noteworthy)
|
||
{
|
||
road_enemies_spawner = GetEntArray(enemy_script_noteworthy,"script_noteworthy");
|
||
road_enemies = array_spawn( road_enemies_spawner );
|
||
|
||
if ( IsDefined( road_enemies ))
|
||
{
|
||
if ( road_enemies.size < road_enemies_spawner.size )
|
||
{
|
||
AssertMsg( road_enemies_spawner.script_noteworthy + ": Could not spawn ALL secure enemies: " + road_enemies.size + "/" + road_enemies_spawner.size );
|
||
}
|
||
}
|
||
else
|
||
{
|
||
AssertMsg( "Could not spawn secure enemies..." );
|
||
}
|
||
return road_enemies;
|
||
}
|
||
|
||
|
||
//*******************************************************************
|
||
//ENEMY GATHER *
|
||
//*******************************************************************
|
||
|
||
motorcade_enemies_gather(enemy_script_noteworthy)
|
||
{
|
||
road_enemies_spawner = GetEntArray(enemy_script_noteworthy,"script_noteworthy");
|
||
return road_enemies_spawner;
|
||
}
|
||
|
||
|
||
|
||
// UGV Auto Fire //
|
||
vehicle_fire_around_entity( e, interval )
|
||
{
|
||
//vehicle.main_turret = vehicle.mgturret[0];
|
||
if( !IsDefined( self.mgturret ) )
|
||
iPrintLnBold ("xxx");
|
||
return;
|
||
self.main_turret = self.mgturret[0];
|
||
//turret = self.mgturret[0];
|
||
//turret StartBarrelSpin();
|
||
while( 1 )
|
||
{
|
||
iprintLnBold ("IN");
|
||
r = RandomFloat( 360 );
|
||
s = RandomFloatRange( 120.0, 240.0 );
|
||
targetPos = e.origin + ( cos(r)*s, sin(r)*s, 0);
|
||
self.main_turret SetTurretTargetPosition( targetPos );
|
||
self.main_turret ShootTurret();
|
||
//turret SetTurretTargetPosition( targetPos );
|
||
//turret ShootTurret();
|
||
wait interval;
|
||
}
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
ride_speed_player(player_speed_flag)
|
||
{
|
||
flag_wait (player_speed_flag);
|
||
self Vehicle_SetSpeedImmediate ( 80, 10, 1 );
|
||
//wait( 2 );
|
||
self waittill( "reached_end_node" );
|
||
self ResumeSpeed( 25 );
|
||
}
|
||
|
||
ride_speed_ai_vp(ai_speed_flag_vp)
|
||
{
|
||
flag_wait (ai_speed_flag_vp);
|
||
self Vehicle_SetSpeedImmediate (80,10,1);
|
||
//wait( 2 );
|
||
self waittill( "reached_end_node" );
|
||
self ResumeSpeed( 25 );
|
||
}
|
||
|
||
ride_speed_ai_sheep(ai_speed_flag_sheep)
|
||
{
|
||
//flag_wait (ai_speed_flag_sheep);
|
||
self Vehicle_SetSpeedImmediate (80,10,1);
|
||
//wait( 2 );
|
||
self waittill( "reached_end_node" );
|
||
self ResumeSpeed( 25 );
|
||
}
|
||
*/
|
||
|
||
vehicle_skid(speed_go,accel,decel,sec,speed_return)
|
||
{
|
||
self Vehicle_SetSpeedImmediate(speed_go,accel,decel);
|
||
wait (sec);
|
||
self ResumeSpeed(speed_return);
|
||
}
|
||
|
||
ram_objective( ram_nodes_script_noteworthy, end_event )
|
||
{
|
||
|
||
level endon( end_event );
|
||
|
||
ram_nodes = GetEntArray( ram_nodes_script_noteworthy, "script_noteworthy" );
|
||
|
||
ram_target = GetEnt( ram_nodes[0].target, "targetname" );
|
||
|
||
while( 1 )
|
||
{
|
||
node = ram_target;
|
||
self vehicle_forward();
|
||
self VehicleDriveTo( node.origin, 10.0 );
|
||
while( Distance( self.origin, node.origin ) > node.radius )
|
||
{
|
||
wait 0.05;
|
||
}
|
||
|
||
node = random( ram_nodes );
|
||
self vehicle_reverse();
|
||
self VehicleDriveTo( node.origin, 10.0 );
|
||
while( Distance( self.origin, node.origin ) > node.radius )
|
||
{
|
||
wait 0.05;
|
||
}
|
||
|
||
wait 0.05;
|
||
}
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
aim_then_shoot_ce_ugv_turret_once_at_position( position )
|
||
{
|
||
// self == turret
|
||
self SetTurretTargetPosition( position );
|
||
wait 1.7;
|
||
self thread _shoot_ce_ugv_turret_once();
|
||
self waittill( "turretshoot" );
|
||
self StopBarrelSpin();
|
||
wait 0.1;
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
shoot_ce_ugv_turret_once_at_position( position )
|
||
{
|
||
// self == turret
|
||
self SetTurretTargetPosition( position );
|
||
wait 0.5;
|
||
self thread _shoot_ce_ugv_turret_once();
|
||
self waittill( "turretshoot" );
|
||
self StopBarrelSpin();
|
||
wait 0.1;
|
||
}
|
||
|
||
//*******************************************************************
|
||
// *
|
||
// *
|
||
//*******************************************************************
|
||
|
||
_shoot_ce_ugv_turret_once()
|
||
{
|
||
self endon( "death" );
|
||
self endon( "turretshoot" );
|
||
|
||
self StartBarrelSpin();
|
||
while ( true )
|
||
{
|
||
self ShootTurret();
|
||
wait 0.05;
|
||
}
|
||
}
|