//**************************************************************************** // ** // 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…" //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…" //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; } }