mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-23 01:25:52 +00:00
1899 lines
69 KiB
Plaintext
1899 lines
69 KiB
Plaintext
//****************************************************************************
|
|
// **
|
|
// Confidential - (C) Activision Publishing, Inc. 2010 **
|
|
// **
|
|
//****************************************************************************
|
|
// **
|
|
// Module: Skyscraper Exfil Anims **
|
|
// **
|
|
// Created: 11/10/2011 - John Webb **
|
|
// **
|
|
//****************************************************************************
|
|
#include maps\_utility;
|
|
#include common_scripts\utility;
|
|
#include maps\_anim;
|
|
#include maps\_vehicle;
|
|
#include maps\_nx_vignette_util;
|
|
|
|
main()
|
|
{
|
|
vehicles();
|
|
generic_human();
|
|
player_anims();
|
|
script_models();
|
|
level thread vignettes();
|
|
dialogue();
|
|
|
|
// For the scripter:
|
|
// move this call wherever you feel it's appropriate
|
|
//Example: script_model_first_frame( node_name, model_name, anim_name );
|
|
//script_model_first_frame("vignette_fast_ropes", "fast_ropes_door_model", "exfil_fast_ropes");
|
|
script_model_first_frame("vignette_laundry_door", "laundry_door", "laundry_door");
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
flag_inits()
|
|
{
|
|
flag_init( "vignette_police_cars1_flag" );
|
|
flag_init( "vignette_alley_cook_grenade" );
|
|
flag_init( "flag_exfil_intro_temp" );
|
|
flag_init( "flag_exfil_intro_player_door" );
|
|
flag_init( "radio_exfil_begin" );
|
|
flag_init( "flag_exfil_outro_door_kick" );
|
|
//flag_init( "melee_rail_01_flag" );
|
|
//flag_init( "melee_rail_02_flag" );
|
|
//rail01 melee flags
|
|
flag_init( "rail01_baker_kill_done" );
|
|
flag_init( "rail01_baker_kill_abort" );
|
|
flag_init( "rail01_baker_kill_started" );
|
|
flag_init( "rail01_baker_kill_committed" );
|
|
flag_init( "rail01_baker_kill_walkup_abort" );
|
|
flag_init( "vignette_light_swing" );
|
|
flag_init( "trigger_civ" );
|
|
|
|
flag_init( "rail02_baker_kill_done" );
|
|
flag_init( "rail02_baker_kill_abort" );
|
|
flag_init( "rail02_baker_kill_started" );
|
|
flag_init( "rail02_baker_kill_committed" );
|
|
flag_init( "rail02_baker_kill_walkup_abort" );
|
|
|
|
flag_init( "soda_machine_01_opfor_flag" );
|
|
flag_init( "final_objective" );
|
|
|
|
flag_init( "hallway_start_walk" );
|
|
flag_init( "hallway_cleanup" );
|
|
|
|
}
|
|
vignettes()
|
|
{
|
|
level thread vignette_register( ::esfil_police_cars_01_spawn, "exit_ambulance" );
|
|
level thread vignette_register( ::exfil_intro_spawn, "flag_exfil_intro_temp" );
|
|
//level thread vignette_register( ::exfil_fast_ropes_spawn, "vignette_fast_ropes_flag" );
|
|
level thread vignette_register( ::exfil_intro_player_door_spawn, "flag_exfil_intro_player_door" );
|
|
//level thread vignette_register( ::outro_door_kick_spawn, "flag_exfil_outro_door_kick" );
|
|
level thread vignette_register( ::exfil_alley_cook_grenade, "vignette_alley_cook_grenade" );
|
|
//level thread vignette_register( ::light_swing_spawn, "vignette_light_swing" );
|
|
//level thread vignette_register( ::civ_run_away_spawn, "trigger_civ" );
|
|
//level thread vignette_register( ::rail_01_spawn, "melee_rail_01_flag" );
|
|
//level thread vignette_register( ::ral_02_spawn, "melee_rail_02_flag" );
|
|
level thread vignette_register( ::exfil_soda_machine_spawn, "soda_machine_01_opfor_flag" );
|
|
|
|
// not a vignette, but this needs to be threaded off and will be activated just the same way
|
|
level thread activate_final_objective();
|
|
}
|
|
|
|
dialogue()
|
|
{
|
|
level._scr_radio[ "exf_bak_van_youok" ] = "exf_bak_van_youok";
|
|
level._scr_radio[ "exf_bak_van_highonlist" ] = "exf_bak_van_highonlist";
|
|
level._scr_radio[ "exf_bak_van_missthis" ] = "exf_bak_van_missthis";
|
|
level._scr_radio[ "exf_bak_van_gottago" ] = "exf_bak_van_gottago";
|
|
level._scr_radio[ "exf_bak_intro_letsgetoutofhere" ] = "exf_bak_intro_letsgetoutofhere";
|
|
level._scr_radio[ "exf_bak_van_needexfil" ] = "exf_bak_van_needexfil";
|
|
level._scr_radio[ "exf_bak_van_solidcopy" ] = "exf_bak_van_solidcopy";
|
|
level._scr_radio[ "exf_bak_van_getaway" ] = "exf_bak_van_getaway";
|
|
level._scr_radio[ "exf_bak_van_easyday" ] = "exf_bak_van_easyday";
|
|
level._scr_radio[ "exf_bak_van_grabkit" ] = "exf_bak_van_grabkit";
|
|
level._scr_radio[ "exf_bak_van_travelinglight" ] = "exf_bak_van_travelinglight";
|
|
level._scr_radio[ "exf_bak_van_ammolight" ] = "exf_bak_van_ammolight";
|
|
level._scr_radio[ "exf_bak_van_grabcover" ] = "exf_bak_van_grabcover";
|
|
level._scr_radio[ "exf_bak_van_roewideopen" ] = "exf_bak_van_roewideopen";
|
|
level._scr_radio[ "exf_ovl_cops_roewideopen" ] = "exf_ovl_cops_roewideopen";
|
|
level._scr_radio[ "exf_bak_van_takecover" ] = "exf_bak_van_takecover";
|
|
level._scr_radio[ "exf_bak_swat_swat" ] = "exf_bak_swat_swat";
|
|
level._scr_radio[ "exf_bak_swat_swatpunks" ] = "exf_bak_swat_swatpunks";
|
|
level._scr_radio[ "exf_bak_swat_swatshere" ] = "exf_bak_swat_swatshere";
|
|
level._scr_radio[ "exf_bak_swat_lightemup" ] = "exf_bak_swat_lightemup";
|
|
level._scr_radio[ "exf_bak_helo_onscene" ] = "exf_bak_helo_onscene";
|
|
level._scr_radio[ "exf_bak_helo_eyeinsky" ] = "exf_bak_helo_eyeinsky";
|
|
level._scr_radio[ "exf_bak_helo_eyesuphigh" ] = "exf_bak_helo_eyesuphigh";
|
|
level._scr_radio[ "exf_bak_helo_watchit" ] = "exf_bak_helo_watchit";
|
|
level._scr_radio[ "exf_bak_helo_pinneddown" ] = "exf_bak_helo_pinneddown";
|
|
level._scr_radio[ "exf_bak_helo_stayawayspotlight" ] = "exf_bak_helo_stayawayspotlight";
|
|
level._scr_radio[ "exf_bak_helo_spotlightpinyou" ] = "exf_bak_helo_spotlightpinyou";
|
|
level._scr_radio[ "exf_bak_helo_outofsight" ] = "exf_bak_helo_outofsight";
|
|
level._scr_radio[ "exf_bak_helo_gotabead" ] = "exf_bak_helo_gotabead";
|
|
level._scr_radio[ "exf_bak_helo_stayoutoflight" ] = "exf_bak_helo_stayoutoflight";
|
|
level._scr_radio[ "exf_bak_helo_avoidlight" ] = "exf_bak_helo_avoidlight";
|
|
level._scr_radio[ "exf_bak_helo_outtathere" ] = "exf_bak_helo_outtathere";
|
|
level._scr_radio[ "exf_bak_apc_heavygun" ] = "exf_bak_apc_heavygun";
|
|
level._scr_radio[ "exf_bak_apc_takeoutturret" ] = "exf_bak_apc_takeoutturret";
|
|
level._scr_radio[ "exf_bak_apc_gunsonthat" ] = "exf_bak_apc_gunsonthat";
|
|
level._scr_radio[ "exf_bak_apc_knockturret" ] = "exf_bak_apc_knockturret";
|
|
level._scr_radio[ "exf_bak_apc_apctearing" ] = "exf_bak_apc_apctearing";
|
|
level._scr_radio[ "exf_bak_riot_arentgoing" ] = "exf_bak_riot_arentgoing";
|
|
level._scr_radio[ "exf_bak_riot_usingshields" ] = "exf_bak_riot_usingshields";
|
|
level._scr_radio[ "exf_bak_riot_onme" ] = "exf_bak_riot_onme";
|
|
level._scr_radio[ "exf_bak_riot_fucked" ] = "exf_bak_riot_fucked";
|
|
level._scr_radio[ "exf_bak_riot_throwfrag" ] = "exf_bak_riot_throwfrag";
|
|
level._scr_radio[ "exf_bak_alley_moreofem" ] = "exf_bak_alley_moreofem";
|
|
level._scr_radio[ "exf_bak_alley_dropem" ] = "exf_bak_alley_dropem";
|
|
level._scr_radio[ "exf_bak_laundry_inhere" ] = "exf_bak_laundry_inhere";
|
|
level._scr_radio[ "exf_bak_laundry_followme" ] = "exf_bak_laundry_followme";
|
|
level._scr_radio[ "exf_bak_laundry_quiet" ] = "exf_bak_laundry_quiet";
|
|
level._scr_radio[ "exf_bak_laundry_cmon" ] = "exf_bak_laundry_cmon";
|
|
level._scr_radio[ "exf_bak_laundry_fuckers" ] = "exf_bak_laundry_fuckers";
|
|
level._scr_radio[ "exf_bak_laundry_keeplow" ] = "exf_bak_laundry_keeplow";
|
|
level._scr_radio[ "exf_bak_outro_letsdothis" ] = "exf_bak_outro_letsdothis";
|
|
level._scr_radio[ "exf_bak_outro_fuckem" ] = "exf_bak_outro_fuckem";
|
|
level._scr_radio[ "exf_bak_pu_birdsinbound" ] = "exf_bak_pu_birdsinbound";
|
|
level._scr_radio[ "exf_bak_pu_exfilinbound" ] = "exf_bak_pu_exfilinbound";
|
|
level._scr_radio[ "exf_bak_pu_gottogo" ] = "exf_bak_pu_gottogo";
|
|
level._scr_radio[ "exf_bak_pu_letsdothis" ] = "exf_bak_pu_letsdothis";
|
|
level._scr_radio[ "exf_bak_pu_letsmove" ] = "exf_bak_pu_letsmove";
|
|
level._scr_radio[ "exf_bak_pu_pushtopz" ] = "exf_bak_pu_pushtopz";
|
|
level._scr_radio[ "exf_bad_intro_happened" ] = "exf_bad_intro_happened";
|
|
level._scr_radio[ "exf_bad_intro_getout" ] = "exf_bad_intro_getout";
|
|
level._scr_radio[ "exf_cop_alley_freeze" ] = "exf_cop_alley_freeze";
|
|
level._scr_radio[ "exf_cop_alley_dropweapons" ] = "exf_cop_alley_dropweapons";
|
|
level._scr_radio[ "exf_cop_alley_getdownground" ] = "exf_cop_alley_getdownground";
|
|
level._scr_radio[ "exf_cop_alley_groundnow" ] = "exf_cop_alley_groundnow";
|
|
level._scr_radio[ "exf_cop_alley_onknees" ] = "exf_cop_alley_onknees";
|
|
level._scr_radio[ "exf_cop_alley_getdown" ] = "exf_cop_alley_getdown";
|
|
level._scr_radio[ "exf_cop_alley_dontmove" ] = "exf_cop_alley_dontmove";
|
|
level._scr_radio[ "exf_cop_alley_allunits" ] = "exf_cop_alley_allunits";
|
|
level._scr_radio[ "exf_cop_alley_armedsuspects" ] = "exf_cop_alley_armedsuspects";
|
|
level._scr_radio[ "exf_cop_alley_swatinbound" ] = "exf_cop_alley_swatinbound";
|
|
level._scr_radio[ "exf_cop_alley_suspectsarmed" ] = "exf_cop_alley_suspectsarmed";
|
|
level._scr_radio[ "exf_cop_alley_openfire" ] = "exf_cop_alley_openfire";
|
|
level._scr_radio[ "exf_helo_spotted_surrender" ] = "exf_helo_spotted_surrender";
|
|
level._scr_radio[ "exf_helo_spotted_noescape" ] = "exf_helo_spotted_noescape";
|
|
level._scr_radio[ "exf_helo_spotted_downground" ] = "exf_helo_spotted_downground";
|
|
level._scr_radio[ "exf_helo_spotted_dropweapons" ] = "exf_helo_spotted_dropweapons";
|
|
level._scr_radio[ "exf_helo_spotted_righthere" ] = "exf_helo_spotted_righthere";
|
|
level._scr_radio[ "exf_helo_spotted_hereheis" ] = "exf_helo_spotted_hereheis";
|
|
level._scr_radio[ "exf_cop_barri_surrender" ] = "exf_cop_barri_surrender";
|
|
level._scr_radio[ "exf_cop_barri_shootyou" ] = "exf_cop_barri_shootyou";
|
|
level._scr_radio[ "exf_cop_barri_dropweapon" ] = "exf_cop_barri_dropweapon";
|
|
level._scr_radio[ "exf_ovl_van_zulubird" ] = "exf_ovl_van_zulubird";
|
|
level._scr_radio[ "exf_bak_intro_requestingexfil" ] = "exf_bak_intro_requestingexfil";
|
|
level._scr_radio[ "exf_bak_intro_shitcops" ] = "exf_bak_intro_shitcops";
|
|
level._scr_radio[ "exf_bak_cops_localpolice" ] = "exf_bak_cops_localpolice";
|
|
level._scr_radio[ "exf_bak_cops_lightemup" ] = "exf_bak_cops_lightemup";
|
|
level._scr_radio[ "exf_bak_swat_reinforcements" ] = "exf_bak_swat_reinforcements";
|
|
level._scr_radio[ "exf_bak_swat_morecopsonhill" ] = "exf_bak_swat_morecopsonhill";
|
|
level._scr_radio[ "exf_bak_swat_moreinbound" ] = "exf_bak_swat_moreinbound";
|
|
level._scr_radio[ "exf_bak_swat_shitmorecops" ] = "exf_bak_swat_shitmorecops";
|
|
level._scr_radio[ "exf_bak_swat_keeptoppedonammo" ] = "exf_bak_swat_keeptoppedonammo";
|
|
level._scr_radio[ "exf_bak_swat_myammoslow" ] = "exf_bak_swat_myammoslow";
|
|
level._scr_radio[ "exf_bak_swat_lastmaggrabbing" ] = "exf_bak_swat_lastmaggrabbing";
|
|
level._scr_radio[ "exf_bak_barr_clearuphigh" ] = "exf_bak_barr_clearuphigh";
|
|
level._scr_radio[ "exf_bak_barr_takingright" ] = "exf_bak_barr_takingright";
|
|
level._scr_radio[ "exf_bak_barr_goingright" ] = "exf_bak_barr_goingright";
|
|
level._scr_radio[ "exf_bak_barr_clearingbalcony" ] = "exf_bak_barr_clearingbalcony";
|
|
level._scr_radio[ "exf_bak_barr_coveryoufrombalcony" ] = "exf_bak_barr_coveryoufrombalcony";
|
|
level._scr_radio[ "exf_bak_barr_balconyclear" ] = "exf_bak_barr_balconyclear";
|
|
level._scr_radio[ "exf_bak_barr_eyesonyou" ] = "exf_bak_barr_eyesonyou";
|
|
level._scr_radio[ "exf_bak_barr_overwatchonyou" ] = "exf_bak_barr_overwatchonyou";
|
|
level._scr_radio[ "exf_bak_barr_clearmoveup" ] = "exf_bak_barr_clearmoveup";
|
|
level._scr_radio[ "exf_bak_barr_coverhostilesinbound" ] = "exf_bak_barr_coverhostilesinbound";
|
|
level._scr_radio[ "exf_bak_barr_floodingarea" ] = "exf_bak_barr_floodingarea";
|
|
level._scr_radio[ "exf_bak_barr_gotinbound" ] = "exf_bak_barr_gotinbound";
|
|
level._scr_radio[ "exf_bak_barr_contactsclosingin" ] = "exf_bak_barr_contactsclosingin";
|
|
level._scr_radio[ "exf_bak_barr_hostilesyourway" ] = "exf_bak_barr_hostilesyourway";
|
|
level._scr_radio[ "exf_bak_barr_hostilesinbound" ] = "exf_bak_barr_hostilesinbound";
|
|
level._scr_radio[ "exf_bak_barr_streetsblocked" ] = "exf_bak_barr_streetsblocked";
|
|
level._scr_radio[ "exf_bak_barr_streetsclosedoff" ] = "exf_bak_barr_streetsclosedoff";
|
|
level._scr_radio[ "exf_bak_barr_theyblockedthestreet" ] = "exf_bak_barr_theyblockedthestreet";
|
|
level._scr_radio[ "exf_bak_barr_uphigh11oclock" ] = "exf_bak_barr_uphigh11oclock";
|
|
level._scr_radio[ "exf_bak_barr_balconyleft" ] = "exf_bak_barr_balconyleft";
|
|
level._scr_radio[ "exf_bak_barr_onscaffolding" ] = "exf_bak_barr_onscaffolding";
|
|
level._scr_radio[ "exf_bak_barr_theyjustkeepcoming" ] = "exf_bak_barr_theyjustkeepcoming";
|
|
level._scr_radio[ "exf_bak_barr_movementarcade" ] = "exf_bak_barr_movementarcade";
|
|
level._scr_radio[ "exf_bak_barr_getoffstreets" ] = "exf_bak_barr_getoffstreets";
|
|
level._scr_radio[ "exf_bak_barr_streetsnogo" ] = "exf_bak_barr_streetsnogo";
|
|
level._scr_radio[ "exf_bak_barr_takealley" ] = "exf_bak_barr_takealley";
|
|
level._scr_radio[ "exf_bak_barr_followmetakingalley" ] = "exf_bak_barr_followmetakingalley";
|
|
level._scr_radio[ "exf_bak_barr_throughalley" ] = "exf_bak_barr_throughalley";
|
|
level._scr_radio[ "exf_bak_alley_exfilsnw" ] = "exf_bak_alley_exfilsnw";
|
|
level._scr_radio[ "exf_bak_alley_ambush" ] = "exf_bak_alley_ambush";
|
|
level._scr_radio[ "exf_bak_alley_theyreropingin" ] = "exf_bak_alley_theyreropingin";
|
|
level._scr_radio[ "exf_bak_alley_droppingin" ] = "exf_bak_alley_droppingin";
|
|
level._scr_radio[ "exf_bak_alley_theyredroppingin" ] = "exf_bak_alley_theyredroppingin";
|
|
level._scr_radio[ "exf_bak_alley_rightthroughbldng" ] = "exf_bak_alley_rightthroughbldng";
|
|
level._scr_radio[ "exf_bak_laundry_quiet" ] = "exf_bak_laundry_quiet";
|
|
level._scr_radio[ "exf_bak_laundry_holdup" ] = "exf_bak_laundry_holdup";
|
|
level._scr_radio[ "exf_bak_laundry_fireinthehole" ] = "exf_bak_laundry_fireinthehole";
|
|
level._scr_radio[ "exf_bak_laundry_getready" ] = "exf_bak_laundry_getready";
|
|
level._scr_radio[ "exf_bak_laundry_fragout" ] = "exf_bak_laundry_fragout";
|
|
level._scr_radio[ "exf_bak_laundry_clearthehallway" ] = "exf_bak_laundry_clearthehallway";
|
|
level._scr_radio[ "exf_bak_laundry_clearit" ] = "exf_bak_laundry_clearit";
|
|
level._scr_radio[ "exf_bak_laundry_finishemoff" ] = "exf_bak_laundry_finishemoff";
|
|
level._scr_radio[ "exf_bak_laundry_walkerfinishthem" ] = "exf_bak_laundry_walkerfinishthem";
|
|
level._scr_radio[ "exf_bak_cops_disregardweapfree" ] = "exf_bak_cops_disregardweapfree";
|
|
level._scr_radio[ "exf_bak_barr_moptheseguysup" ] = "exf_bak_barr_moptheseguysup";
|
|
level._scr_radio[ "exf_bak_swat_lotsofmvmntdown" ] = "exf_bak_swat_lotsofmvmntdown";
|
|
level._scr_radio[ "exf_bak_swat_wereclear" ] = "exf_bak_swat_wereclear";
|
|
level._scr_radio[ "exf_bak_swat_raptorsinbound" ] = "exf_bak_swat_raptorsinbound";
|
|
level._scr_radio[ "exf_bak_barr_barricadeoffstreets" ] = "exf_bak_barr_barricadeoffstreets";
|
|
level._scr_radio[ "exf_bak_barr_illgoright" ] = "exf_bak_barr_illgoright";
|
|
level._scr_radio[ "exf_bak_barr_lotsofmvmntacross" ] = "exf_bak_barr_lotsofmvmntacross";
|
|
level._scr_radio[ "exf_bak_barr_poppingsmoke" ] = "exf_bak_barr_poppingsmoke";
|
|
level._scr_radio[ "exf_bak_barr_riotshieldsthrowfrag" ] = "exf_bak_barr_riotshieldsthrowfrag";
|
|
level._scr_radio[ "exf_bak_barr_armoredturret" ] = "exf_bak_barr_armoredturret";
|
|
level._scr_radio[ "exf_bak_barr_theyvegotapc" ] = "exf_bak_barr_theyvegotapc";
|
|
level._scr_radio[ "exf_bak_barr_turretspinningmedown" ] = "exf_bak_barr_turretspinningmedown";
|
|
level._scr_radio[ "exf_bak_barr_turretsonyou" ] = "exf_bak_barr_turretsonyou";
|
|
level._scr_radio[ "exf_bak_barr_exfilinbound" ] = "exf_bak_barr_exfilinbound";
|
|
level._scr_radio[ "exf_bak_barr_letsmove" ] = "exf_bak_barr_letsmove";
|
|
level._scr_radio[ "exf_bak_barr_downalley" ] = "exf_bak_barr_downalley";
|
|
level._scr_radio[ "exf_bak_barr_letsgo" ] = "exf_bak_barr_letsgo";
|
|
level._scr_radio[ "exf_bak_alley_exfilstorefront" ] = "exf_bak_alley_exfilstorefront";
|
|
level._scr_radio[ "exf_bak_alley_cutthroughbldng" ] = "exf_bak_alley_cutthroughbldng";
|
|
level._scr_radio[ "exf_bak_alley_buildinghot" ] = "exf_bak_alley_buildinghot";
|
|
level._scr_radio[ "exf_bak_hall_giveus2mikes" ] = "exf_bak_hall_giveus2mikes";
|
|
level._scr_radio[ "exf_bak_hall_breachpopsmokepz" ] = "exf_bak_hall_breachpopsmokepz";
|
|
level._scr_radio[ "exf_bak_hall_onyourmark" ] = "exf_bak_hall_onyourmark";
|
|
level._scr_radio[ "exf_ovl_hall_raptor2inpos" ] = "exf_ovl_hall_raptor2inpos";
|
|
level._scr_radio[ "exf_cop1_hall_moaning" ] = "exf_cop1_hall_moaning";
|
|
level._scr_radio[ "exf_cop2_hall_moaning" ] = "exf_cop2_hall_moaning";
|
|
level._scr_radio[ "exf_cop3_hall_moaning" ] = "exf_cop3_hall_moaning";
|
|
level._scr_radio[ "exf_cop4_hall_moaning" ] = "exf_cop4_hall_moaning";
|
|
level._scr_radio[ "exf_cop5_hall_moaning" ] = "exf_cop5_hall_moaning";
|
|
level._scr_radio[ "exf_bak_intro_micson" ] = "exf_bak_intro_micson";
|
|
level._scr_radio[ "exf_bak_intro_switchingtomic" ] = "exf_bak_intro_switchingtomic";
|
|
level._scr_radio[ "exf_bak_cops_wegotinbound" ] = "exf_bak_cops_wegotinbound";
|
|
level._scr_radio[ "exf_bak_swat_illhugleft" ] = "exf_bak_swat_illhugleft";
|
|
level._scr_radio[ "exf_bak_swat_clearplanter" ] = "exf_bak_swat_clearplanter";
|
|
level._scr_radio[ "exf_bak_swat_droppingdown" ] = "exf_bak_swat_droppingdown";
|
|
level._scr_radio[ "exf_bak_swat_goinghigh" ] = "exf_bak_swat_goinghigh";
|
|
level._scr_radio[ "exf_bak_swat_illmoveleft" ] = "exf_bak_swat_illmoveleft";
|
|
level._scr_radio[ "exf_rap_swat_whatsyourgrid" ] = "exf_rap_swat_whatsyourgrid";
|
|
level._scr_radio[ "exf_bak_swat_mapgrid779" ] = "exf_bak_swat_mapgrid779";
|
|
level._scr_radio[ "exf_rap_swat_rogerthat" ] = "exf_rap_swat_rogerthat";
|
|
level._scr_radio[ "exf_bak_swat_broughtbird" ] = "exf_bak_swat_broughtbird";
|
|
level._scr_radio[ "exf_bak_barr_illclearuphigh" ] = "exf_bak_barr_illclearuphigh";
|
|
level._scr_radio[ "exf_bak_barr_riotshieldsforward" ] = "exf_bak_barr_riotshieldsforward";
|
|
level._scr_radio[ "exf_bak_barr_riotshieldsadvancing" ] = "exf_bak_barr_riotshieldsadvancing";
|
|
level._scr_radio[ "exf_bak_barr_pushingforward" ] = "exf_bak_barr_pushingforward";
|
|
level._scr_radio[ "exf_bak_barr_movingup" ] = "exf_bak_barr_movingup";
|
|
level._scr_radio[ "exf_bak_barr_fallingbackmovealley" ] = "exf_bak_barr_fallingbackmovealley";
|
|
level._scr_radio[ "exf_bak_barr_thrualley" ] = "exf_bak_barr_thrualley";
|
|
level._scr_radio[ "exf_bak_barr_needtomove" ] = "exf_bak_barr_needtomove";
|
|
level._scr_radio[ "exf_bak_barr_letsgo" ] = "exf_bak_barr_letsgo";
|
|
level._scr_radio[ "exf_bak_barr_followmewalker" ] = "exf_bak_barr_followmewalker";
|
|
level._scr_radio[ "exf_bak_barr_turretcompromised" ] = "exf_bak_barr_turretcompromised";
|
|
level._scr_radio[ "exf_ovl_hall_rogerthat" ] = "exf_ovl_hall_rogerthat";
|
|
level._scr_radio[ "exf_rap_hall_heavyopp" ] = "exf_rap_hall_heavyopp";
|
|
level._scr_radio[ "exf_bak_hall_giveus2mikesraptor" ] = "exf_bak_hall_giveus2mikesraptor";
|
|
level._scr_radio[ "exf_bak_gen_clearit" ] = "exf_bak_gen_clearit";
|
|
level._scr_radio[ "exf_bak_gen_letsmove" ] = "exf_bak_gen_letsmove";
|
|
level._scr_radio[ "exf_bak_gen_clear" ] = "exf_bak_gen_clear";
|
|
level._scr_radio[ "exf_bak_gen_gothim" ] = "exf_bak_gen_gothim";
|
|
level._scr_radio[ "exf_bak_gen_tangodown" ] = "exf_bak_gen_tangodown";
|
|
level._scr_radio[ "exf_bak_gen_tangosdown" ] = "exf_bak_gen_tangosdown";
|
|
level._scr_radio[ "exf_bak_gen_movingforward" ] = "exf_bak_gen_movingforward";
|
|
level._scr_radio[ "exf_bak_gen_advancing" ] = "exf_bak_gen_advancing";
|
|
level._scr_radio[ "exf_bak_gen_movingup" ] = "exf_bak_gen_movingup";
|
|
level._scr_radio[ "exf_bak_gen_goodkill" ] = "exf_bak_gen_goodkill";
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
#using_animtree("vehicles");
|
|
vehicles()
|
|
{
|
|
//police cars 01
|
|
level._scr_anim[ "exfil_police_01" ][ "esfil_police_cars_01" ] = %nx_vh_exfil_police_cars1_car_01;
|
|
level._scr_anim[ "exfil_police_02" ][ "esfil_police_cars_01" ] = %nx_vh_exfil_police_cars1_car_02;
|
|
}
|
|
|
|
#using_animtree("player");
|
|
player_anims()
|
|
{
|
|
//intro
|
|
level._scr_animtree[ "player_rig" ] = #animtree;
|
|
level._scr_anim[ "player_rig" ][ "exfil_intro" ] = %nx_fp_exfil_intro_player;
|
|
level._scr_model[ "player_rig" ] = "viewhands_player_us_army";
|
|
|
|
//intro door traversal
|
|
level._scr_anim[ "player_rig" ][ "exfil_intro_player_door" ] = %nx_fp_exfil_intro_player_door;
|
|
|
|
//outro player
|
|
level._scr_animtree[ "player_rig" ] = #animtree;
|
|
level._scr_anim[ "player_rig" ][ "outro_door_kick" ] = %nx_fp_exfil_door_kick_player;
|
|
level._scr_model[ "player_rig" ] = "viewhands_player_us_army";
|
|
}
|
|
|
|
#using_animtree("generic_human");
|
|
generic_human()
|
|
{
|
|
//police cars 01
|
|
level._scr_anim[ "cop_cars1_opfor1" ][ "esfil_police_cars_01" ] = %nx_tp_exfil_police_cars1_opfor_01;
|
|
level._scr_anim[ "cop_cars1_opfor2" ][ "esfil_police_cars_01" ] = %nx_tp_exfil_police_cars1_opfor_02;
|
|
level._scr_anim[ "cop_cars1_opfor3" ][ "esfil_police_cars_01" ] = %nx_tp_exfil_police_cars1_opfor_03;
|
|
|
|
//soda machine cover
|
|
level._scr_anim[ "soda_machine_01_opfor" ][ "exfil_soda_machine" ] = %nx_tp_exfil_soda_machine_opfor_01;
|
|
|
|
//intro
|
|
level._scr_anim[ "ally_01" ][ "bog_radio_dialogue" ] = %nx_tp_exfil_baker_intro_radio;
|
|
level._scr_anim[ "ally_01" ][ "roadkill_cover_radio_soldier1_idle" ] = %roadkill_cover_radio_soldier1_idle;
|
|
level._scr_anim[ "ally_01" ][ "exfil_intro" ] = %nx_tp_exfil_intro_ally_01;
|
|
level._scr_anim[ "opfor_01" ][ "exfil_intro" ] = %nx_tp_exfil_intro_enemy_01;
|
|
addNotetrack_customFunction( "opfor_01", "fx_nt_suckonthis", ::blood_splatter_gutshot_fx, "exfil_intro" );
|
|
addNotetrack_customFunction( "opfor_01", "fx_nt_opfor1_headshot", ::blood_splatter_headshot_fx_opfor1, "exfil_intro" );
|
|
level._scr_anim[ "opfor_02" ][ "exfil_intro" ] = %nx_tp_exfil_intro_enemy_02;
|
|
addNotetrack_customFunction( "opfor_02", "fx_nt_intheface", ::blood_splatter_headshot_fx_opfor2, "exfil_intro" );
|
|
level._scr_anim[ "opfor_01" ][ "exfil_intro_idle" ] = [ %nx_tp_exfil_intro_enemy_01_idle ];
|
|
level._scr_anim[ "opfor_02" ][ "exfil_intro_idle" ] = [ %nx_tp_exfil_intro_enemy_02_idle ];
|
|
addNotetrack_customFunction( "ally_01", "headshot_01", ::blood_splatter_01_show, "exfil_intro" );
|
|
addNotetrack_customFunction( "ally_01", "headshot_02", ::blood_splatter_02_show, "exfil_intro" );
|
|
addNotetrack_customFunction( "ally_01", "blood_spat_01", ::blood_splatter_03_show, "exfil_intro" );
|
|
addNotetrack_customFunction( "ally_01", "headshot_02", ::blood_spray_02_show, "exfil_intro" );
|
|
addNotetrack_attach( "ally_01", "knife_pullout", "weapon_parabolic_knife", "TAG_INHAND", "exfil_intro" );
|
|
addNotetrack_detach( "ally_01", "knife_putaway", "weapon_parabolic_knife", "TAG_INHAND", "exfil_intro" );
|
|
|
|
//fast ropes
|
|
level._scr_anim[ "fast_ropes_opfor1" ][ "exfil_fast_ropes" ] = %nx_tp_exfil_fastrope_opfor_01;
|
|
level._scr_anim[ "fast_ropes_opfor2" ][ "exfil_fast_ropes" ] = %nx_tp_exfil_fastrope_opfor_02;
|
|
level._scr_anim[ "fast_ropes_opfor3" ][ "exfil_fast_ropes" ] = %nx_tp_exfil_fastrope_opfor_03;
|
|
|
|
//ending
|
|
level._scr_anim[ "enemy_01" ][ "laundry_enemies" ] = %nx_tp_exfil_laundry_enemies_01;
|
|
level._scr_anim[ "enemy_02" ][ "laundry_enemies" ] = %nx_tp_exfil_laundry_enemies_02;
|
|
level._scr_anim[ "enemy_03" ][ "laundry_enemies" ] = %nx_tp_exfil_laundry_enemies_03;
|
|
level._scr_anim[ "enemy_04" ][ "laundry_enemies" ] = %nx_tp_exfil_laundry_enemies_04;
|
|
level._scr_anim[ "enemy_05" ][ "laundry_enemies" ] = %nx_tp_exfil_laundry_enemies_05;
|
|
level._scr_anim[ "enemy_06" ][ "laundry_enemies" ] = %nx_tp_exfil_laundry_enemies_06;
|
|
level._scr_anim[ "ally_01" ][ "laundry_door" ] = %nx_tp_exfil_laundry_door_ally_01;
|
|
addNotetrack_customFunction( "ally_01", "grenade_explode", maps\nx_exfil_fx::fx_hall_grenade_explode );
|
|
level._scr_anim[ "ally_01" ][ "outro_door_kick" ] = %nx_tp_exfil_door_kick_ally_01;
|
|
//addNotetrack_customFunction( "ally_01", "grenade_toss", ::grenade_toss );
|
|
addNotetrack_customFunction( "ally_01", "grenade_explode", ::grenade_toss );
|
|
|
|
//rail 01
|
|
level._scr_anim[ "rail_01_opfor" ][ "rail_01" ] = %nx_tp_exfil_melee_rail_01_opfor_01;
|
|
level._scr_anim[ "rail_01_baker" ][ "rail_01" ] = %nx_tp_exfil_melee_rail_01_baker_01;
|
|
|
|
//rail 02
|
|
level._scr_anim[ "rail_02_baker" ][ "ral_02" ] = %nx_tp_exfil_melee_rail_02_baker_01;
|
|
level._scr_anim[ "rail_02_opfor" ][ "ral_02" ] = %nx_tp_exfil_melee_rail_02_opfor_01;
|
|
|
|
// alley cook grenade
|
|
level._scr_anim[ "alley_cook_grenade" ][ "baker_cook" ] = %nx_tp_exfil_outro_p1_ally_01;
|
|
level._scr_anim[ "alley_wounded_01" ][ "wounded_idle" ][ 0 ] = %nx_tp_exfil_outro_p2_opfor_idle_01;
|
|
level._scr_anim[ "alley_wounded_02" ][ "wounded_idle" ][ 0 ] = %nx_tp_exfil_outro_p2_opfor_idle_02;
|
|
level._scr_anim[ "alley_wounded_03" ][ "wounded_idle" ][ 0 ] = %nx_tp_exfil_outro_p2_opfor_idle_03;
|
|
level._scr_anim[ "alley_wounded_04" ][ "wounded_idle" ][ 0 ] = %nx_tp_exfil_outro_p2_opfor_idle_04;
|
|
level._scr_anim[ "alley_wounded_05" ][ "wounded_idle" ][ 0 ] = %nx_tp_exfil_outro_p2_opfor_idle_05;
|
|
level._scr_anim[ "alley_wounded_06" ][ "wounded_idle" ][ 0 ] = %nx_tp_exfil_outro_p2_opfor_idle_06;
|
|
|
|
// death anims for cook grenade alley
|
|
level._scr_anim[ "alley_wounded_01" ][ "nx_tp_exfil_outro_p2_opfor_death_01" ] = %nx_tp_exfil_outro_p2_opfor_death_01;
|
|
level._scr_anim[ "alley_wounded_02" ][ "nx_tp_exfil_outro_p2_opfor_death_02" ] = %nx_tp_exfil_outro_p2_opfor_death_02;
|
|
level._scr_anim[ "alley_wounded_03" ][ "nx_tp_exfil_outro_p2_opfor_death_03" ] = %nx_tp_exfil_outro_p2_opfor_death_03;
|
|
level._scr_anim[ "alley_wounded_04" ][ "nx_tp_exfil_outro_p2_opfor_death_04" ] = %nx_tp_exfil_outro_p2_opfor_death_04;
|
|
level._scr_anim[ "alley_wounded_05" ][ "nx_tp_exfil_outro_p2_opfor_death_05" ] = %nx_tp_exfil_outro_p2_opfor_death_05;
|
|
level._scr_anim[ "alley_wounded_06" ][ "nx_tp_exfil_outro_p2_opfor_death_06" ] = %nx_tp_exfil_outro_p2_opfor_death_06;
|
|
|
|
|
|
// alley bust through the final door
|
|
level._scr_anim[ "alley_exit" ][ "baker_kick" ] = %nx_tp_exfil_outro_p3_ally_01;
|
|
|
|
// civ run away
|
|
level._scr_anim[ "civ_a" ][ "civ_run_away" ] = %nx_tp_exfil_civ_run_away_a;
|
|
level._scr_anim[ "civ_b" ][ "civ_run_away" ] = %nx_tp_exfil_civ_run_away_b;
|
|
level._scr_anim[ "civ_c" ][ "civ_run_away" ] = %nx_tp_exfil_civ_run_away_c;
|
|
level._scr_anim[ "civ_d" ][ "civ_run_away" ] = %nx_tp_exfil_civ_run_away_d;
|
|
level._scr_anim[ "civ_e" ][ "civ_run_away" ] = %nx_tp_exfil_civ_run_away_e;
|
|
level._scr_anim[ "civ_f" ][ "civ_run_away" ] = %nx_tp_exfil_civ_run_away_f;
|
|
level._scr_anim[ "civ_g" ][ "civ_run_away" ] = %nx_tp_exfil_civ_run_away_g;
|
|
level._scr_anim[ "civ_h" ][ "civ_run_away" ] = %nx_tp_exfil_civ_run_away_h;
|
|
level._scr_anim[ "civ_j" ][ "civ_run_away" ] = %nx_tp_exfil_civ_run_away_j;
|
|
level._scr_anim[ "civ_k" ][ "civ_run_away" ] = %nx_tp_exfil_civ_run_away_k;
|
|
}
|
|
|
|
#using_animtree("script_model");
|
|
script_models()
|
|
{
|
|
//soda machine cover
|
|
level._scr_animtree[ "exfil_soda_machin_01" ] = #animtree;
|
|
level._scr_anim[ "exfil_soda_machin_01" ][ "exfil_soda_machine" ] = %nx_pr_exfil_soda_machine_01_anim;
|
|
level._scr_model[ "exfil_soda_machin_01" ] = "nx_pr_exfil_soda_machine_01";
|
|
|
|
//fast ropes
|
|
level._scr_animtree[ "fast_ropes_door_model" ] = #animtree;
|
|
level._scr_anim[ "fast_ropes_door_model" ][ "exfil_fast_ropes" ] = %nx_pr_exfil_door_01;
|
|
level._scr_model[ "fast_ropes_door_model" ] = "nx_pr_exfil_door_model_01";
|
|
|
|
level._scr_animtree[ "rope_01" ] = #animtree;
|
|
level._scr_anim[ "rope_01" ][ "exfil_fast_ropes" ] = %nx_pr_exfil_rope_01;
|
|
level._scr_model[ "rope_01" ] = "nx_pr_exfil_rope";
|
|
|
|
level._scr_animtree[ "rope_02" ] = #animtree;
|
|
level._scr_anim[ "rope_02" ][ "exfil_fast_ropes" ] = %nx_pr_exfil_rope_02;
|
|
level._scr_model[ "rope_02" ] = "nx_pr_exfil_rope";
|
|
|
|
//Intro
|
|
level._scr_animtree[ "delivery_truck" ] = #animtree;
|
|
level._scr_anim[ "delivery_truck" ][ "exfil_intro" ] = %nx_pr_exfil_intro_van;
|
|
level._scr_model[ "delivery_truck" ] = "nx_pr_exfil_copvan_destroy";
|
|
|
|
level._scr_animtree[ "cuffs" ] = #animtree;
|
|
level._scr_anim[ "cuffs" ][ "exfil_intro" ] = %nx_pr_exfil_intro_cuffs;
|
|
level._scr_model[ "cuffs" ] = "viewmodel_plastic_handcuffs";
|
|
|
|
level._scr_animtree[ "delivery_truck" ] = #animtree;
|
|
level._scr_anim[ "delivery_truck" ][ "exfil_intro_player_door" ] = %nx_pr_exfil_intro_van_door;
|
|
level._scr_model[ "delivery_truck" ] = "nx_pr_exfil_copvan_destroy";
|
|
|
|
//Laundry Door
|
|
level._scr_animtree[ "laundry_door" ] = #animtree;
|
|
level._scr_anim[ "laundry_door" ][ "laundry_door" ] = %nx_pr_exfil_laundry_door;
|
|
level._scr_model[ "laundry_door" ] = "nx_pr_exfil_laundry_door";
|
|
|
|
level._scr_animtree[ "grenade_pin" ] = #animtree;
|
|
level._scr_anim[ "grenade_pin" ][ "laundry_door" ] = %nx_pr_exfil_laundry_grenade_pin;
|
|
level._scr_model[ "grenade_pin" ] = "nx_pr_exfil_grenade_pin";
|
|
|
|
level._scr_animtree[ "laundry_door_grenade" ] = #animtree;
|
|
level._scr_anim[ "laundry_door_grenade" ][ "laundry_door" ] = %nx_pr_exfil_laundry_door_grenade;
|
|
level._scr_model[ "laundry_door_grenade" ] = "projectile_m67fraggrenade";
|
|
|
|
//Light Swing
|
|
level._scr_animtree[ "light_swing" ] = #animtree;
|
|
level._scr_anim[ "light_swing" ][ "light_swing" ] = %nx_pr_exfil_swinging_light;
|
|
level._scr_model[ "light_swing" ] = "nx_pr_exfil_swinging_light";
|
|
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
// polic cars1
|
|
esfil_police_cars_01_spawn()
|
|
{
|
|
exfil_police_01 = vignette_vehicle_spawn("exfil_police_01", "exfil_police_01"); //"value" (kvp), "anim_name"
|
|
exfil_police_02 = vignette_vehicle_spawn("exfil_police_02", "exfil_police_02"); //"value" (kvp), "anim_name"
|
|
cop_cars1_opfor1 = spawn_cop( "cop_cars1_opfor1", "cop_cars1_opfor1" );
|
|
cop_cars1_opfor2 = spawn_cop( "cop_cars1_opfor2", "cop_cars1_opfor2" );
|
|
cop_cars1_opfor3 = spawn_cop( "cop_cars1_opfor3", "cop_cars1_opfor3" );
|
|
|
|
exfil_police_01 GodOn();
|
|
exfil_police_02 GodOn();
|
|
cop_cars1_opfor1 thread cop_watch_out_for_grenades();
|
|
|
|
exfil_police_01 thread maps\nx_exfil_audio::police_car_radio_chatter();
|
|
exfil_police_01 playsound("scn_exfil_police_car_intro");
|
|
|
|
thread cop_dialog(cop_cars1_opfor1, cop_cars1_opfor2, cop_cars1_opfor3);
|
|
cop_cars1_opfor1 thread cop_watch_out_for_grenades();
|
|
|
|
esfil_police_cars_01(exfil_police_01, exfil_police_02, cop_cars1_opfor1, cop_cars1_opfor2, cop_cars1_opfor3);
|
|
|
|
cop_cars1_opfor1 stop_magic_bullet_shield();
|
|
cop_cars1_opfor2 stop_magic_bullet_shield();
|
|
cop_cars1_opfor3 stop_magic_bullet_shield();
|
|
|
|
exfil_police_01 DisconnectPaths();
|
|
exfil_police_02 DisconnectPaths();
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
esfil_police_cars_01(exfil_police_01, exfil_police_02, cop_cars1_opfor1, cop_cars1_opfor2, cop_cars1_opfor3)
|
|
{
|
|
|
|
node = getstruct("cop_cars1_vignette", "script_noteworthy");
|
|
|
|
guys = [];
|
|
guys["exfil_police_01"] = exfil_police_01;
|
|
guys["exfil_police_02"] = exfil_police_02;
|
|
guys["cop_cars1_opfor1"] = cop_cars1_opfor1;
|
|
guys["cop_cars1_opfor2"] = cop_cars1_opfor2;
|
|
guys["cop_cars1_opfor3"] = cop_cars1_opfor3;
|
|
|
|
exfil_police_01 suspend_drive_anims_for_vignette();
|
|
exfil_police_02 suspend_drive_anims_for_vignette();
|
|
|
|
node thread anim_single(guys, "esfil_police_cars_01");
|
|
|
|
wait 7;
|
|
exfil_police_01 GodOff();
|
|
exfil_police_02 GodOff();
|
|
|
|
flag_wait( "cops_engaged" );
|
|
|
|
if ( IsAlive( cop_cars1_opfor1 ) )
|
|
{
|
|
cop_cars1_opfor1 anim_stopanimscripted();
|
|
}
|
|
|
|
if ( IsAlive( cop_cars1_opfor2 ) )
|
|
{
|
|
cop_cars1_opfor2 anim_stopanimscripted();
|
|
}
|
|
|
|
if ( IsAlive( cop_cars1_opfor3 ) )
|
|
{
|
|
cop_cars1_opfor3 anim_stopanimscripted();
|
|
}
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
cop_watch_out_for_grenades()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "cops_engaged" );
|
|
|
|
self waittill( "grenade danger" );
|
|
|
|
flag_set( "cops_engaged" );
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
cop_dialog(cop_cars1_opfor1, cop_cars1_opfor2, cop_cars1_opfor3)
|
|
{
|
|
wait 5.2;
|
|
cop_cars1_opfor2 playsound("exf_cop_alley_stream");
|
|
|
|
//thread cop_dialog_lines(cop_cars1_opfor1, "exf_cop_alley_groundnow", "exf_cop_alley_onknees", "exf_cop_alley_freeze", "exf_cop_alley_dropweapons", "exf_cop_alley_dontmove", "exf_cop_alley_groundnow", 0.5);
|
|
//self thread cop_dialog_lines( cop_cars1_opfor1, "exf_bak_van_youok", "exf_bak_van_youok", "exf_bak_van_youok" );
|
|
//wait 1.0;
|
|
//thread cop_dialog_lines(cop_cars1_opfor2, "exf_cop_alley_getdown", "exf_cop_alley_dontmove", "exf_cop_alley_onknees", "exf_cop_alley_getdown", "exf_cop_alley_dontmove", "exf_cop_alley_onknees", 0.6);
|
|
//self thread cop_dialog_lines( cop_cars1_opfor2, "exf_bak_van_gottago", "exf_bak_van_gottago", "exf_bak_van_gottago" );
|
|
//wait 0.3;
|
|
//thread cop_dialog_lines( cop_cars1_opfor3, "exf_cop_alley_getdownground", "exf_cop_alley_getdownground", "exf_cop_alley_getdownground", "exf_cop_alley_getdownground", "exf_cop_alley_getdownground", "exf_cop_alley_getdownground", 2.2);
|
|
//self thread cop_dialog_lines( cop_cars1_opfor3, "exf_bak_van_solidcopy", "exf_bak_van_solidcopy", "exf_bak_van_solidcopy" );
|
|
|
|
}
|
|
|
|
cop_dialog_lines ( cop, line1, line2, line3, line4, line5, line6, waittime)
|
|
{
|
|
cop endon( "death" );
|
|
if ( flag( "cops_engaged" ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
level endon( "cops_engaged" );
|
|
|
|
cop playsound(line1, "sounddone");
|
|
cop waittill( "sounddone" );
|
|
wait waittime;
|
|
|
|
cop playsound(line2, "sounddone");
|
|
cop waittill( "sounddone" );
|
|
wait waittime;
|
|
|
|
cop playsound(line3, "sounddone");
|
|
cop waittill( "sounddone" );
|
|
wait waittime;
|
|
|
|
cop playsound(line4, "sounddone");
|
|
cop waittill( "sounddone" );
|
|
wait waittime;
|
|
|
|
cop playsound(line5, "sounddone");
|
|
cop waittill( "sounddone" );
|
|
wait waittime;
|
|
|
|
cop playsound(line6, "sounddone");
|
|
cop waittill( "sounddone" );
|
|
}
|
|
|
|
spawn_cop( spawner_name, anim_name )
|
|
{
|
|
spawner = GetEnt( spawner_name, "targetname" );
|
|
//spawner.script_forcespawn = 1;
|
|
//spawner thread add_spawn_function( ::vignette_actor_spawn_func );
|
|
|
|
vignette_actor = spawner spawn_ai();
|
|
vignette_actor.animname = anim_name;
|
|
vignette_actor magic_bullet_shield();
|
|
return vignette_actor;
|
|
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
exfil_intro_spawn()
|
|
{
|
|
thread civ_run_away_spawn();
|
|
|
|
// hide weapons
|
|
level._player takeallweapons();
|
|
|
|
// grab baker since he's already spawned
|
|
ally_01 = level.allies[ "ally1" ];
|
|
ally_01.animname = "ally_01";
|
|
//ally_01 thread vignette_actor_ignore_everything();
|
|
|
|
opfor_01 = vignette_actor_spawn("opfor_10", "opfor_01"); //"value" (kvp), "anim_name"
|
|
//level.head_swap_guy = opfor_01;
|
|
opfor_02 = vignette_actor_spawn("opfor_11", "opfor_02"); //"value" (kvp), "anim_name"
|
|
|
|
level.head_swap_guy = [];
|
|
level.head_swap_guy[ 0 ] = opfor_01;
|
|
level.head_swap_guy[ 1 ] = opfor_02;
|
|
|
|
ally_01.oldprimary = ally_01.primaryweapon;
|
|
ally_01 forceUseWeapon( ally_01.sidearm , "primary" );
|
|
ally_01 place_weapon_on( ally_01.oldprimary, "chest" );
|
|
|
|
exfil_intro(ally_01, opfor_01, opfor_02);
|
|
|
|
ally_01 forceUseWeapon( ally_01.oldprimary, "primary" );
|
|
ally_01.primaryweapon = ally_01.oldprimary;
|
|
ally_01.lastWeapon = ally_01.oldprimary;
|
|
|
|
node = getstruct("exfil_intro", "script_noteworthy");
|
|
|
|
node thread anim_loop( [ opfor_01, opfor_02] , "exfil_intro_idle" );
|
|
|
|
level notify( "exfil_intro_spawn_finished" );
|
|
|
|
exfil_intro_part2( ally_01 );
|
|
}
|
|
|
|
exfil_intro(ally_01, opfor_01, opfor_02)
|
|
{
|
|
ally_01 enable_cqbwalk();
|
|
|
|
blood_splatter_1 = GetEnt( "intro_blood_01", "targetname" );
|
|
blood_splatter_1 Hide();
|
|
blood_splatter_2 = GetEnt( "intro_blood_02", "targetname" );
|
|
blood_splatter_2 Hide();
|
|
blood_splatter_3 = GetEnt( "intro_blood_03", "targetname" );
|
|
blood_splatter_3 Hide();
|
|
|
|
node = getstruct("exfil_intro", "script_noteworthy");
|
|
|
|
level._player FreezeControls( true );
|
|
level._player allowprone( false );
|
|
level._player allowcrouch( false );
|
|
|
|
level.delivery_truck = spawn_anim_model("delivery_truck");
|
|
|
|
cuffs = spawn_anim_model("cuffs");
|
|
|
|
player_rig = spawn_anim_model( "player_rig" );
|
|
|
|
guys = [];
|
|
guys["ally_01"] = ally_01;
|
|
guys["opfor_01"] = opfor_01;
|
|
guys["opfor_02"] = opfor_02;
|
|
guys["player_rig"] = player_rig;
|
|
guys["delivery_truck"] = level.delivery_truck;
|
|
guys["cuffs"] = cuffs;
|
|
|
|
arc = 7;
|
|
|
|
level._player PlayerLinkToDelta( player_rig, "tag_player", 1, arc, arc, arc, arc, 1);
|
|
|
|
node anim_single(guys, "exfil_intro");
|
|
|
|
level._player unlink();
|
|
|
|
player_rig delete();
|
|
|
|
level._player FreezeControls( false );
|
|
level._player allowprone( true );
|
|
level._player allowcrouch( true );
|
|
}
|
|
|
|
exfil_intro_part2( ally_01 )
|
|
{
|
|
flag_set( "radio_exfil_begin" ); // Triggers dialogue in nx_exfil_intro
|
|
|
|
// Get Baker into position
|
|
radio_node = GetNode( "baker_intro_radio_setup", "targetname" );
|
|
radio_origin = GetEnt( "baker_intro_radio", "targetname" );
|
|
ally_01.goalradius = 8;
|
|
// ally_01 SetGoalNode( radio_node );
|
|
radio_origin anim_reach_and_approach_solo( ally_01, "bog_radio_dialogue", undefined, "Exposed" );
|
|
ally_01 waittill( "goal" );
|
|
|
|
|
|
|
|
radio_origin anim_single_solo( ally_01, "bog_radio_dialogue" ); //play radio anim while getting exfil information
|
|
|
|
// TJ - stub for where we should get Baker to look back at the player and see if they're alright
|
|
|
|
ally_01 enable_cqbwalk();
|
|
ally_01 SetGoalNode( GetNode( "baker_cop_sequence", "targetname" ) ); // Move Baker to cop encounter
|
|
ally_01 waittill( "goal" );
|
|
|
|
flag_wait( "intro_dialogue_complete" );
|
|
|
|
// hand off control back to the system
|
|
ally_01 enable_ai_color();
|
|
ally_01 disable_cqbwalk();
|
|
ally_01.ignoreall = false;
|
|
}
|
|
|
|
blood_splatter_gutshot_fx( opfor_01 )
|
|
{
|
|
spinelower = opfor_01 getTagOrigin( "J_spinelower" );
|
|
//spinelower_angles = opfor_01 getTagAngles( "J_spinelower" );
|
|
playFX( level._effect[ "gutshot" ], spinelower );
|
|
}
|
|
|
|
blood_splatter_headshot_fx_opfor1( opfor_01 )
|
|
{
|
|
head = opfor_01 getTagOrigin( "J_head" );
|
|
//spinelower_angles = opfor_01 getTagAngles( "J_head" );
|
|
playFX( level._effect[ "headshot" ], head );
|
|
}
|
|
|
|
blood_splatter_headshot_fx_opfor2( opfor_02 )
|
|
{
|
|
head = opfor_02 getTagOrigin( "J_head" );
|
|
//spinelower_angles = opfor_01 getTagAngles( "J_head" );
|
|
playFX( level._effect[ "headshot" ], head );
|
|
wait ( 0.2 );
|
|
//thread maps\nx_exfil_fx::blood_grit_overlay();
|
|
playFX( level._effect[ "headshot" ], head );
|
|
}
|
|
|
|
blood_splatter_01_show( ally_01 )
|
|
{
|
|
blood_splatter_1 = GetEnt( "intro_blood_01", "targetname" );
|
|
blood_splatter_1 Show();
|
|
|
|
// Head Swap.
|
|
guy = level.head_swap_guy[ 0 ];
|
|
|
|
guy detach( guy.headmodel, "" );
|
|
guy attach( "exfil_swat_head_a_shot", "", true );
|
|
}
|
|
|
|
blood_splatter_02_show( ally_01 )
|
|
{
|
|
blood_splatter_2 = GetEnt( "intro_blood_02", "targetname" );
|
|
blood_splatter_2 Show();
|
|
|
|
// Head Swap.
|
|
guy = level.head_swap_guy[ 1 ];
|
|
|
|
guy detach( guy.headmodel, "" );
|
|
guy attach( "exfil_swat_head_b_shot", "", true );
|
|
}
|
|
|
|
blood_splatter_03_show( ally_01 )
|
|
{
|
|
blood_splatter_3 = GetEnt( "intro_blood_03", "targetname" );
|
|
blood_splatter_3 Show();
|
|
}
|
|
|
|
blood_spray_02_show( guy )
|
|
{
|
|
time = 4.0;
|
|
|
|
overlay = newHudElem();
|
|
overlay.x = 0;
|
|
overlay.y = 0;
|
|
overlay setshader( "splatter_alt_sp", 640, 480 );
|
|
overlay.alignX = "left";
|
|
overlay.alignY = "top";
|
|
overlay.horzAlign = "fullscreen";
|
|
overlay.vertAlign = "fullscreen";
|
|
overlay.alpha = 1;
|
|
overlay FadeOverTime( time );
|
|
overlay.alpha = 0.0;
|
|
|
|
wait time;
|
|
|
|
overlay destroy();
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
//Soda Machine Cover
|
|
exfil_soda_machine_spawn()
|
|
{
|
|
soda_machine_01_opfor_spawner = GetEnt( "soda_guy", "script_noteworthy" );
|
|
soda_machine_01_opfor = soda_machine_01_opfor_spawner spawn_ai( true ); //"value" (kvp), "anim_name"
|
|
|
|
exfil_soda_machine(soda_machine_01_opfor);
|
|
}
|
|
|
|
exfil_soda_machine(soda_machine_01_opfor)
|
|
{
|
|
|
|
node = getstruct("vignette_soda_machine_01", "script_noteworthy");
|
|
|
|
exfil_soda_machin_01 = spawn_anim_model("exfil_soda_machin_01");
|
|
soda_machine_01_opfor.animname = "soda_machine_01_opfor";
|
|
|
|
guys = [];
|
|
guys["soda_machine_01_opfor"] = soda_machine_01_opfor;
|
|
guys["exfil_soda_machin_01"] = exfil_soda_machin_01;
|
|
|
|
node anim_single(guys, "exfil_soda_machine");
|
|
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
// fast ropes
|
|
exfil_fast_ropes_spawn()
|
|
{
|
|
fast_ropes_opfor1 = spawn_cop( "fast_ropes_opfor1", "fast_ropes_opfor1" ); //"value" (kvp), "anim_name"
|
|
fast_ropes_opfor2 = spawn_cop( "fast_ropes_opfor2", "fast_ropes_opfor2" ); //"value" (kvp), "anim_name"
|
|
fast_ropes_opfor3 = spawn_cop( "fast_ropes_opfor3", "fast_ropes_opfor3" ); //"value" (kvp), "anim_name"
|
|
|
|
exfil_fast_ropes(fast_ropes_opfor1, fast_ropes_opfor2, fast_ropes_opfor3);
|
|
|
|
fast_ropes_opfor1 stop_magic_bullet_shield();
|
|
fast_ropes_opfor2 stop_magic_bullet_shield();
|
|
fast_ropes_opfor3 stop_magic_bullet_shield();
|
|
}
|
|
|
|
exfil_fast_ropes(fast_ropes_opfor1, fast_ropes_opfor2, fast_ropes_opfor3)
|
|
{
|
|
node = getstruct("vignette_fast_ropes", "script_noteworthy");
|
|
fast_ropes_door_model = level.vignette_script_models["fast_ropes_door_model"];//spawn_anim_model("fast_ropes_door_model");
|
|
|
|
rope_01 = spawn_anim_model("rope_01");
|
|
rope_02 = spawn_anim_model("rope_02");
|
|
|
|
guys = [];
|
|
guys["fast_ropes_door_model"] = fast_ropes_door_model;
|
|
guys["rope_01"] = rope_01;
|
|
guys["rope_02"] = rope_02;
|
|
guys["fast_ropes_opfor1"] = fast_ropes_opfor1;
|
|
guys["fast_ropes_opfor2"] = fast_ropes_opfor2;
|
|
guys["fast_ropes_opfor3"] = fast_ropes_opfor3;
|
|
|
|
node anim_single(guys, "exfil_fast_ropes");
|
|
}
|
|
|
|
//Spawns in a model and sets it to first frame of the animation
|
|
//Stores it in a level array to be referenced later.
|
|
script_model_first_frame( node_noteworthy, model_name, anim_name )
|
|
{
|
|
if(!IsDefined(level.vignette_script_models))
|
|
level.vignette_script_models = [];
|
|
|
|
node = getstruct(node_noteworthy, "script_noteworthy");
|
|
|
|
model = spawn_anim_model(model_name);
|
|
|
|
level.vignette_script_models[model_name] = model;
|
|
|
|
node anim_first_frame_solo( level.vignette_script_models[ model_name ], anim_name );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
outro_door_kick_spawn()
|
|
{
|
|
thread audio_outro_logic();
|
|
|
|
|
|
|
|
// make player drop and raise weapon.
|
|
self thread drop_and_raise();
|
|
|
|
// remove our objective entity
|
|
Objective_ClearAdditionalEntity( obj( "obj_get_to_exfil" ), 1 );
|
|
|
|
// get our important locations
|
|
anim_node = getstruct( "vignette_outro_door_kick", "script_noteworthy");
|
|
|
|
// setup Baker correctly
|
|
ally_01 = level.allies[ "ally1" ];
|
|
ally_01.animname = "ally_01";
|
|
|
|
//thread fadeout and mission end
|
|
//use notetrack in bakers animation to trigger fadeout
|
|
//"continueaudio" is how many seconds the scene will allow audion before booting to the main menu;
|
|
continueaudio = 9;
|
|
fadeoutwait = 3.19; //tried notetrack, dont know how : (
|
|
self thread end_blackout( fadeoutwait, continueaudio );
|
|
|
|
level._player FreezeControls( true );
|
|
level._player allowprone( false );
|
|
level._player allowcrouch( false );
|
|
|
|
player_rig = spawn_anim_model( "player_rig" );
|
|
|
|
// gather all our pieces for anims
|
|
guys = [];
|
|
guys["ally_01"] = ally_01;
|
|
guys["player_rig"] = player_rig;
|
|
|
|
arc = 0;
|
|
|
|
level._player PlayerLinkToDelta( player_rig, "tag_player", 1, arc, arc, arc, arc, 1);
|
|
|
|
// Baker should already be in position and ready to animate
|
|
anim_node anim_single( guys, "outro_door_kick" );
|
|
|
|
level._player unlink();
|
|
|
|
player_rig delete();
|
|
|
|
level._player FreezeControls( false );
|
|
level._player allowprone( true );
|
|
level._player allowcrouch( true );
|
|
}
|
|
|
|
audio_outro_logic()
|
|
{
|
|
//flag_set( "music_street_start" );
|
|
play_music_once("mus_nx_exfil_outro");
|
|
level._player playsound( "scn_exfil_outro_front" );
|
|
wait 3;
|
|
level.audio_outro_emitter setsoundvolume( "emt_exfil_chaos_01", -100, 1 );
|
|
level._player setchannelvolumes( "snd_channelvolprio_level", "nx_exfil_outro", 1.0 );
|
|
}
|
|
|
|
drop_and_raise ()
|
|
{
|
|
|
|
level._player DisableWeapons();
|
|
|
|
wait 2.3;
|
|
|
|
level._player EnableWeapons();
|
|
|
|
}
|
|
|
|
end_blackout( fadeoutwait, continueaudio )
|
|
{
|
|
|
|
wait fadeoutwait;
|
|
|
|
//setSavedDvar( "compass", 0 );
|
|
//setSavedDvar( "hud_showStance", 0 );
|
|
|
|
overlay = newHudElem();
|
|
overlay.x = 0;
|
|
overlay.y = 0;
|
|
overlay setshader( "black", 640, 480 );
|
|
overlay.alignX = "left";
|
|
overlay.alignY = "top";
|
|
overlay.horzAlign = "fullscreen";
|
|
overlay.vertAlign = "fullscreen";
|
|
|
|
overlay.alpha = 0;
|
|
overlay fadeOverTime( 0.1 );
|
|
overlay.alpha = 1;
|
|
|
|
level._player freezeControls( true );
|
|
enablePlayerWeapons( false );
|
|
|
|
wait continueaudio;
|
|
|
|
endmission_goto_frontend();
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
// cooked grenade plus injured enemies
|
|
exfil_alley_cook_grenade()
|
|
{
|
|
// get our important locations
|
|
anim_node = getstruct( "vignette_laundry_door", "script_noteworthy" );
|
|
|
|
// setup all the neccesary pieces
|
|
laundry_door = level.vignette_script_models["laundry_door"];//spawn_anim_model("laundry_door");
|
|
|
|
//laundry_door = spawn_anim_model( "laundry_door" );
|
|
grenade_pin = spawn_anim_model("grenade_pin");
|
|
|
|
laundry_door_grenade = spawn_anim_model("laundry_door_grenade");
|
|
|
|
|
|
// setup Baker correctly
|
|
ally_01 = level.allies[ "ally1" ];
|
|
ally_01.animname = "ally_01";
|
|
ally_01.disableArrivals = true;
|
|
ally_01.ignoreAll = true;
|
|
|
|
ally_01 enable_cqbwalk();
|
|
|
|
// gather all our pieces for anims
|
|
guys = [];
|
|
guys["ally_01"] = ally_01;
|
|
guys["laundry_door"] = laundry_door;
|
|
guys["grenade_pin"] = grenade_pin;
|
|
guys["laundry_door_grenade"] = laundry_door_grenade;
|
|
|
|
// lets get Baker to the correct location
|
|
anim_node anim_reach_solo( ally_01, "laundry_door" );
|
|
|
|
thread laundry_enemies_spawn();
|
|
|
|
// run our anim
|
|
ally_01 playsound( "scn_exfil_hallway_grenade" );
|
|
anim_node anim_first_frame_solo( ally_01, "laundry_door" );
|
|
anim_node anim_single( guys, "laundry_door" );
|
|
|
|
// Set health on laundry guys and kill off a couple
|
|
grenade_hallway_troops_dead = get_ai_group_ai_including_dying( "grenade_hallway_troops_dead" );
|
|
foreach ( guy in grenade_hallway_troops_dead )
|
|
guy kill();
|
|
|
|
grenade_hallway_troops = get_ai_group_ai_including_dying( "grenade_hallway_troops" );
|
|
foreach ( guy in grenade_hallway_troops )
|
|
guy.health = 1;
|
|
|
|
// set Baker back to how he was before
|
|
ally_01.disableArrivals = false;
|
|
|
|
// setup Baker with new logic
|
|
ally_01.dontmelee = true;
|
|
ally_01.moveplaybackrate = 0.55;
|
|
|
|
// ally_01.forceSideArm = true;
|
|
// ally_01 forceUseWeapon( ally_01.sidearm, "sidearm" );
|
|
|
|
flag_wait( "hallway_cleanup" );
|
|
|
|
ally_01.primaryweapon = "fal";
|
|
ally_01 forceUseWeapon( ally_01.primaryweapon, "primary" );
|
|
ally_01.accuracy = 10000.0;
|
|
|
|
// get Baker to next node for final door kick
|
|
ally_01.ignoreAll = true;
|
|
// ally_01 follow_path( GetNode( "final_node", "targetname" ) );
|
|
ally_01 SetGoalNode( GetNode( "final_node_end", "targetname" ) );
|
|
|
|
ally_01 radio_dialogue( "exf_rap_hall_heavyopp" );
|
|
ally_01 radio_dialogue( "exf_bak_hall_giveus2mikesraptor" );
|
|
|
|
ally_01.moveplaybackrate = 0.75;
|
|
|
|
wait 1.5;
|
|
|
|
ally_01.goalradius = 100;
|
|
ally_01 waittill( "goal" );
|
|
|
|
ally_01.ignoreall = true;
|
|
|
|
ally_01 radio_dialogue( "exf_bak_hall_breachpopsmokepz" );
|
|
ally_01 thread radio_dialogue( "exf_bak_hall_onyourmark" );
|
|
wait 0.2;
|
|
flag_set( "final_objective" );
|
|
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
exfil_intro_player_door_spawn()
|
|
{
|
|
|
|
exfil_intro_player_door();
|
|
|
|
}
|
|
|
|
exfil_intro_player_door()
|
|
{
|
|
|
|
node = getstruct("exfil_intro", "script_noteworthy");
|
|
|
|
level._player FreezeControls( true );
|
|
level._player DisableWeapons();
|
|
level._player allowprone( false );
|
|
level._player allowcrouch( false );
|
|
|
|
player_rig = spawn_anim_model( "player_rig" );
|
|
|
|
if( !IsDefined( level.delivery_truck ) )
|
|
{
|
|
level.delivery_truck = spawn_anim_model("delivery_truck");
|
|
}
|
|
|
|
guys = [player_rig, level.delivery_truck];
|
|
|
|
node anim_first_frame( guys, "exfil_intro_player_door" );
|
|
|
|
level._player PlayerLinkToBlend( player_rig, "tag_player", 0.3, 0.15, 0.15 );
|
|
|
|
node anim_single( guys, "exfil_intro_player_door");
|
|
|
|
//guys["delivery_truck"] = delivery_truck;
|
|
|
|
level._player unlink();
|
|
|
|
player_rig delete();
|
|
|
|
level._player FreezeControls( false );
|
|
level._player EnableWeapons();
|
|
level._player allowprone( true );
|
|
level._player allowcrouch( true );
|
|
SetSavedDvar( "hud_showStance", 1 );
|
|
SetSavedDvar( "ammoCounterHide", "0" );
|
|
|
|
// give back all our weapons
|
|
maps\_loadout::init_loadout();
|
|
|
|
// set baker on his way
|
|
// level.allies[ "ally1" ] issue_color_orders( "r2", "allies" );
|
|
// level.allies[ "ally1" ] thread enable_cqbwalk();
|
|
|
|
level notify( "exfil_intro_player_door_finished" ) ;
|
|
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
// rail 01
|
|
rail_01_spawn()
|
|
{
|
|
rail_01_opfor = vignette_actor_spawn("rail_01_opfor", "rail_01_opfor"); //"value" (kvp), "anim_name"
|
|
rail_01_baker = vignette_actor_spawn("rail_01_baker", "rail_01_baker"); //"value" (kvp), "anim_name"
|
|
|
|
rail_01(rail_01_opfor, rail_01_baker);
|
|
|
|
rail_01_opfor vignette_actor_delete();
|
|
rail_01_baker vignette_actor_delete();
|
|
}
|
|
|
|
rail_01(rail_01_opfor, rail_01_baker)
|
|
{
|
|
|
|
node = getstruct("melee_rail_01_vignette", "script_noteworthy");
|
|
|
|
|
|
guys = [];
|
|
guys["rail_01_opfor"] = rail_01_opfor;
|
|
guys["rail_01_baker"] = rail_01_baker;
|
|
|
|
node anim_single(guys, "rail_01");
|
|
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
// rail 02
|
|
ral_02_spawn()
|
|
{
|
|
rail_02_baker = vignette_actor_spawn("rail_02_baker", "rail_02_baker"); //"value" (kvp), "anim_name"
|
|
rail_02_opfor = vignette_actor_spawn("rail_02_opfor", "rail_02_opfor"); //"value" (kvp), "anim_name"
|
|
|
|
ral_02(rail_02_baker, rail_02_opfor);
|
|
|
|
rail_02_baker vignette_actor_delete();
|
|
rail_02_opfor vignette_actor_delete();
|
|
}
|
|
|
|
ral_02(rail_02_baker, rail_02_opfor)
|
|
{
|
|
|
|
node = getstruct("melee_rail_01_vignette", "script_noteworthy");
|
|
|
|
|
|
guys = [];
|
|
guys["rail_02_baker"] = rail_02_baker;
|
|
guys["rail_02_opfor"] = rail_02_opfor;
|
|
|
|
node anim_first_frame(guys, "ral_02");
|
|
|
|
node anim_single(guys, "ral_02");
|
|
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
laundry_enemies_spawn()
|
|
{
|
|
// setup our guys correctly
|
|
guys = [];
|
|
for( index = 1; index < 7; index++ )
|
|
{
|
|
spawner = GetEnt( "alley_final_room_opfor_0" + index, "targetname" );
|
|
spawner.script_forcespawn = 1;
|
|
|
|
string_ref = "enemy_0" + index;
|
|
vignette_actor = spawner spawn_ai();
|
|
vignette_actor.animname = string_ref;
|
|
|
|
guys[ string_ref ] = vignette_actor;
|
|
}
|
|
|
|
// get our node and play our anim
|
|
node = getstruct("vignette_laundry_enemies", "script_noteworthy");
|
|
node anim_single(guys, "laundry_enemies");
|
|
|
|
// now clean them up
|
|
for( index = 1; index < 7; index++ )
|
|
{
|
|
string_ref = "enemy_0" + index;
|
|
guys[ string_ref ] vignette_actor_delete();
|
|
}
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
grenade_toss( ally_01 )
|
|
{
|
|
// spawn magic grenade from struct pos, for it to kill enemies
|
|
//start = getstruct( "grenade_toss_pos", "script_noteworthy" );
|
|
//end = getstruct( "grenade_explode_pos", "script_noteworthy" );
|
|
//MagicGrenade( "fraggrenade", start.origin, end.origin, 1.5 );
|
|
|
|
//wait( 1.55 );
|
|
|
|
// need to move our door
|
|
move_door_clip();
|
|
|
|
// need to put enemies into wounded idle
|
|
guys = [];
|
|
for( index = 1; index < 7; index++ )
|
|
{
|
|
spawner = GetEnt( "alley_final_room_opfor_0" + index, "targetname" );
|
|
spawner.script_forcespawn = 1;
|
|
//spawner.script_drone = 1;
|
|
|
|
vignette_actor = spawner spawn_ai();
|
|
vignette_actor.animname = "alley_wounded_0" + index;
|
|
vignette_actor.noragdoll = 1;
|
|
vignette_actor.health = 1;
|
|
vignette_actor.allowdeath = true;
|
|
vignette_actor.ignoreall = true;
|
|
vignette_actor set_deathanim( "nx_tp_exfil_outro_p2_opfor_death_0" + index );
|
|
|
|
guys[ guys.size ] = vignette_actor;
|
|
|
|
if( 6 == index )
|
|
{
|
|
// special case that we will kill this actor after certain amount of time.
|
|
// we don't want him crawling forever...
|
|
vignette_actor thread delayed_kill();
|
|
}
|
|
}
|
|
|
|
// spawn off our check on the Baker ent
|
|
ally_01 thread check_for_room_secured( guys );
|
|
|
|
// play our looping anim
|
|
node = getstruct( "vignette_alley_wounded_idle", "script_noteworthy");
|
|
for( index = 0; index < guys.size; index++ )
|
|
{
|
|
node thread anim_loop_solo( guys[index], "wounded_idle" );
|
|
}
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
delayed_kill()
|
|
{
|
|
self endon( "death" );
|
|
|
|
wait( 21 );
|
|
|
|
self kill();
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
move_door_clip()
|
|
{
|
|
clip = GetEnt( "player_blocker", "script_noteworthy" );
|
|
if( IsDefined( clip ) )
|
|
{
|
|
clip connectPaths();
|
|
clip.origin = ( 4198, -560, 340 );
|
|
clip disconnectPaths();
|
|
}
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// Rail Kill *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
//baker needs to be sent somewhere near this start point, like a node by the stairs preferably.
|
|
//Then when the player comes close to where baker is, set the flag Rail01_kill_start and everything will roll.
|
|
|
|
Rail01_kill_start()
|
|
{
|
|
|
|
//going to assume there is a level.baker and level.rail_01_opfor, when this guy gets spawned he should get set.
|
|
//he should be a normal actor that can be killed like any other.
|
|
|
|
level waittill( "Rail01_kill_start" );
|
|
|
|
//enemy = get_living_ai( "fall_guy", "script_noteworthy" );
|
|
enemy_spawner = GetEnt( "balcony_fallguy", "targetname" );
|
|
enemy = enemy_spawner spawn_ai();
|
|
if ( !isDefined( enemy ) )
|
|
{
|
|
return; // Bail out
|
|
}
|
|
|
|
baker = level.baker;
|
|
|
|
scene = "rail_01";
|
|
enemy.animname = "rail_01_opfor";
|
|
baker.animname = "rail_01_baker";
|
|
enemy.ignoreall = true;
|
|
baker.dontEverShoot = true;
|
|
baker.ignoreall = true;
|
|
baker setFlashbangImmunity( true );
|
|
baker disable_surprise();
|
|
|
|
if( !IsAlive( enemy ) )
|
|
{
|
|
flag_set( "rail01_baker_kill_done" );
|
|
return;
|
|
}
|
|
|
|
//baker animscripts\utility::actor_goto_node_and_wait_for_notify( "rail01_baker_start", "rail_01_start" );
|
|
|
|
//do an animreach to the starting point for the animation.
|
|
animref = GetStruct("melee_rail_01_vignette", "script_noteworthy");
|
|
animref anim_reach( [ baker, enemy ], scene );
|
|
|
|
if( IsAlive( enemy ) )
|
|
{
|
|
if( !flag( "rail01_baker_kill_abort" ) ) //not aborted, go for it.
|
|
{
|
|
flag_set( "rail01_baker_kill_started" );
|
|
|
|
baker thread rail01_baker_kill_enemy_handle_death_during_walkup( enemy, animref );
|
|
|
|
baker thread rail01_baker_kill_point_of_no_return( scene, enemy );
|
|
|
|
baker thread rail01_baker_kill_foley();
|
|
|
|
baker delaycall( 0.1, ::PushPlayer, true );
|
|
enemy delaycall( 0.1, ::PushPlayer, true );
|
|
|
|
animref thread anim_single( [ baker, enemy ], scene );
|
|
}
|
|
else
|
|
{
|
|
baker SetGoalPos( baker.origin );
|
|
enemy SetGoalPos( enemy.origin );
|
|
enemy.fixednode = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self thread rail01_baker_kill_aborted_dialogue();
|
|
}
|
|
|
|
baker.dontEverShoot = undefined;
|
|
baker.ignoreall = false;
|
|
baker setFlashbangImmunity( false );
|
|
baker delaythread( 5, ::enable_surprise );
|
|
baker PushPlayer( false );
|
|
baker set_force_color( "r" );
|
|
baker enable_ai_color();
|
|
|
|
if( flag( "rail01_baker_kill_abort" ) && IsAlive( enemy ) )
|
|
{
|
|
baker.favoriteenemy = enemy;
|
|
enemy waittill( "death" );
|
|
baker.favoriteenemy = undefined;
|
|
}
|
|
|
|
flag_set( "rail01_baker_kill_done" );
|
|
}
|
|
|
|
rail01_baker_kill_enemy_handle_death_during_walkup( enemy, animref )
|
|
{
|
|
level endon( "rail01_baker_kill_committed" );
|
|
|
|
enemy waittill( "death" );
|
|
|
|
flag_set( "rail01_baker_kill_walkup_abort" );
|
|
|
|
self notify( "stop_animmode" );
|
|
self anim_stopanimscripted();
|
|
animref anim_stopanimscripted();
|
|
|
|
self thread rail01_baker_kill_aborted_dialogue();
|
|
}
|
|
|
|
rail01_baker_kill_point_of_no_return( scene, enemy )
|
|
{
|
|
animation = self GetAnim( scene );
|
|
commit_time = GetNoteTrackTimes( animation, "commit" )[0]; //grab the time of the first note track
|
|
animTime = GetAnimLength( animation );
|
|
commit_wait = animTime * commit_time;
|
|
|
|
wait( commit_wait );
|
|
|
|
flag_set( "rail01_baker_kill_committed" );
|
|
|
|
wait( animTime - commit_wait );
|
|
|
|
if( IsAlive( enemy ) )
|
|
{
|
|
enemy.allowDeath = true;
|
|
enemy.a.nodeath = true;
|
|
enemy set_battlechatter( false );
|
|
enemy kill();
|
|
}
|
|
}
|
|
|
|
rail01_baker_kill_foley()
|
|
{
|
|
ent = Spawn( "script_origin", self.origin );
|
|
ent LinkTo( self );
|
|
|
|
//ent PlaySound( "scn_afcaves_knife_kill_behind" );
|
|
|
|
flag_wait_any( "rail01_baker_kill_abort", "rail01_baker_kill_walkup_abort", "rail01_baker_kill_done" );
|
|
|
|
ent StopSounds();
|
|
wait( 0.05 ); // or else the sound won't stop
|
|
ent Delete();
|
|
}
|
|
|
|
rail01_baker_kill_aborted_dialogue()
|
|
{
|
|
// "Never mind, then."
|
|
//thread radio_dialogue( "afcaves_pri_nevermind" );
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// Rail02 melee vignette *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
//baker needs to be sent somewhere near this start point, like a node by the stairs preferably.
|
|
//Then when the player comes close to where baker is, set the flag Rail01_kill_start and everything will roll.
|
|
|
|
Rail02_kill_start()
|
|
{
|
|
|
|
//going to assume there is a level.baker and level.rail_01_opfor, when this guy gets spawned he should get set.
|
|
//he should be a normal actor that can be killed like any other.
|
|
|
|
level waittill( "Rail02_kill_start" );
|
|
|
|
enemy = get_living_ai( "fall_guy_2", "script_noteworthy" );
|
|
baker = level.baker;
|
|
|
|
scene = "rail_02";
|
|
enemy.animname = "rail_02_opfor";
|
|
baker.animname = "rail_02_baker";
|
|
enemy.ignoreall = true;
|
|
baker.dontEverShoot = true;
|
|
baker.ignoreall = true;
|
|
baker setFlashbangImmunity( true );
|
|
baker disable_surprise();
|
|
|
|
if( !IsAlive( enemy ) )
|
|
{
|
|
flag_set( "rail02_baker_kill_done" );
|
|
return;
|
|
}
|
|
|
|
//baker animscripts\utility::actor_goto_node_and_wait_for_notify( "rail02_baker_start", "rail_02_start" );
|
|
|
|
//do an animreach to the starting point for the animation.
|
|
animref = GetStruct("melee_rail_01_vignette", "script_noteworthy");
|
|
animref anim_reach( [ baker, enemy ], scene );
|
|
|
|
if( IsAlive( enemy ) )
|
|
{
|
|
if( !flag( "rail02_baker_kill_abort" ) ) //not aborted, go for it.
|
|
{
|
|
flag_set( "rail02_baker_kill_started" );
|
|
|
|
baker thread rail02_baker_kill_enemy_handle_death_during_walkup( enemy, animref );
|
|
|
|
baker thread rail02_baker_kill_point_of_no_return( scene, enemy );
|
|
baker thread rail02_baker_kill_handleknife( scene );
|
|
|
|
baker thread rail02_baker_kill_foley();
|
|
|
|
baker delaycall( 0.1, ::PushPlayer, true );
|
|
enemy delaycall( 0.1, ::PushPlayer, true );
|
|
|
|
animref thread anim_single( [ baker, enemy ], scene );
|
|
}
|
|
else
|
|
{
|
|
baker notify( "new_anim_reach" ); // cancel anim_reach movement
|
|
baker SetGoalPos( baker.origin );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self thread rail02_baker_kill_aborted_dialogue();
|
|
}
|
|
|
|
baker.dontEverShoot = undefined;
|
|
baker.ignoreall = false;
|
|
baker setFlashbangImmunity( false );
|
|
baker delaythread( 5, ::enable_surprise );
|
|
baker PushPlayer( false );
|
|
|
|
if( flag( "rail02_baker_kill_abort" ) && IsAlive( enemy ) )
|
|
{
|
|
baker.favoriteenemy = enemy;
|
|
enemy waittill( "death" );
|
|
baker.favoriteenemy = undefined;
|
|
}
|
|
|
|
flag_set( "rail01_baker_kill_done" );
|
|
}
|
|
|
|
rail02_baker_kill_enemy_handle_death_during_walkup( enemy, animref )
|
|
{
|
|
level endon( "rail02_baker_kill_committed" );
|
|
|
|
enemy waittill( "death" );
|
|
|
|
flag_set( "rail02_baker_kill_walkup_abort" );
|
|
|
|
self notify( "stop_animmode" );
|
|
self anim_stopanimscripted();
|
|
animref anim_stopanimscripted();
|
|
|
|
self thread rail02_baker_kill_aborted_dialogue();
|
|
}
|
|
|
|
rail02_baker_kill_point_of_no_return( scene, enemy )
|
|
{
|
|
animation = self GetAnim( scene );
|
|
commit_time = GetNoteTrackTimes( animation, "commit" )[0]; //grab the time of the first note track
|
|
animTime = GetAnimLength( animation );
|
|
commit_wait = animTime * commit_time;
|
|
|
|
wait( commit_wait );
|
|
|
|
flag_set( "rail02_baker_kill_committed" );
|
|
|
|
wait( animTime - commit_wait );
|
|
|
|
if( IsAlive( enemy ) )
|
|
{
|
|
enemy.allowDeath = true;
|
|
enemy.a.nodeath = true;
|
|
enemy set_battlechatter( false );
|
|
enemy kill();
|
|
}
|
|
}
|
|
|
|
rail02_baker_kill_handleknife( scene )
|
|
{
|
|
knifemodel = "weapon_parabolic_knife";
|
|
linktag = "tag_inhand";
|
|
|
|
animation = self GetAnim( scene );
|
|
animTime = GetAnimLength( animation );
|
|
|
|
detachWait = animTime * GetNoteTrackTimes( animation, "detatch" )[0]; //not sure if we need this...
|
|
stabWait = animTime * GetNoteTrackTimes( animation, "stab" )[0];
|
|
|
|
startTime = GetTime();
|
|
|
|
self thread rail02_baker_kill_bloodfx( stabWait );
|
|
|
|
self waittillmatch( "custom_animmode", "knife pullout" );
|
|
self Attach( knifemodel, linktag );
|
|
|
|
waitTime = detachWait - ( GetTime() - startTime )/1000;
|
|
flag_wait_or_timeout( "rail02_baker_kill_walkup_abort", waitTime );
|
|
|
|
self Detach( knifemodel, linktag );
|
|
}
|
|
|
|
rail02_baker_kill_bloodfx( stabWaitTime )
|
|
{
|
|
level endon( "rail02_baker_kill_walkup_abort" );
|
|
|
|
bloodfx = getfx( "knife_stab" );
|
|
fxTag = "tag_knife_fx";
|
|
|
|
wait( stabWaitTime );
|
|
PlayFX( bloodfx, level._price GetTagOrigin( fxTag ) );
|
|
}
|
|
|
|
rail02_baker_kill_foley()
|
|
{
|
|
ent = Spawn( "script_origin", self.origin );
|
|
ent LinkTo( self );
|
|
|
|
//ent PlaySound( "scn_afcaves_knife_kill_behind" );
|
|
|
|
flag_wait_any( "rail02_baker_kill_abort", "rail02_baker_kill_walkup_abort", "rail02_baker_kill_done" );
|
|
|
|
ent StopSounds();
|
|
wait( 0.05 ); // or else the sound won't stop
|
|
ent Delete();
|
|
}
|
|
|
|
rail02_baker_kill_aborted_dialogue()
|
|
{
|
|
// "Never mind, then."
|
|
//thread radio_dialogue( "afcaves_pri_nevermind" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
//Light_swing vignette
|
|
light_swing_spawn()
|
|
{
|
|
|
|
light_swing();
|
|
|
|
}
|
|
|
|
light_swing()
|
|
{
|
|
|
|
node = getstruct("vignette_light_swing", "script_noteworthy");
|
|
|
|
light_swing = spawn_anim_model("light_swing");
|
|
|
|
//apm: turn on the fx spotlight
|
|
thread maps\nx_exfil_fx::turn_on_swinging_light_fx( light_swing );
|
|
|
|
guys = [];
|
|
guys["light_swing"] = light_swing;
|
|
|
|
node anim_single(guys, "light_swing");
|
|
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
|
|
check_for_room_secured( guys )
|
|
{
|
|
while( 1 )
|
|
{
|
|
count = 0;
|
|
for( index = 0; index < guys.size; index++ )
|
|
{
|
|
if( IsAlive( guys[index] ) )
|
|
{
|
|
break;
|
|
}
|
|
count++;
|
|
}
|
|
|
|
if( count == guys.size )
|
|
{
|
|
break;
|
|
}
|
|
wait( 0.5 );
|
|
}
|
|
self notify( "room_secured" );
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
// tagMJS<NOTE> looks like this func is deprecated...
|
|
ally_casual_kill_out()
|
|
{
|
|
self.dontmelee = true;
|
|
self.moveplaybackrate = 0.75;
|
|
|
|
flag_wait( "hallway_start_walk" );
|
|
|
|
// get Baker to next node for final door kick
|
|
self set_goal_node_targetname( "final_node" );
|
|
|
|
self thread radio_dialogue( "exf_ovl_hall_raptor2inpos" );
|
|
|
|
grenade_hallway_troops = GetEntArray( "grenade_hallway_troops", "script_noteworthy" );
|
|
foreach ( guy in grenade_hallway_troops )
|
|
{
|
|
if ( IsAlive( guy ) )
|
|
{
|
|
//self cqb_aim( guy );
|
|
wait 0.3;
|
|
magicbullet( self.weapon, self gettagorigin( "tag_flash" ), guy getShootAtPos() );
|
|
guy kill( self.origin, self );
|
|
wait 1.0;
|
|
}
|
|
}
|
|
|
|
self enable_cqbwalk();
|
|
|
|
// need to wait till all hallway enemies are dead
|
|
self waittill( "room_secured" );
|
|
|
|
/*
|
|
// get our important locations
|
|
anim_node = getstruct( "vignette_outro_door_kick", "script_noteworthy");
|
|
|
|
// setup Baker correctly
|
|
self.animname = "ally_01";
|
|
self.disableArrivals = true;
|
|
self.ignoreAll = true;
|
|
|
|
// gather all our pieces for anims
|
|
guys = [];
|
|
guys["ally_01"] = self;
|
|
|
|
// lets get Baker to the correct location
|
|
anim_node anim_reach_solo( self, "outro_door_kick" );
|
|
|
|
// get Baker ready for final trigger
|
|
anim_node anim_first_frame_solo( self, "outro_door_kick" );
|
|
*/
|
|
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
activate_final_objective()
|
|
{
|
|
flag_wait( "final_objective" );
|
|
|
|
use_trigger = GetEnt( "trigger_use_target", "targetname" );
|
|
if( IsDefined( use_trigger ) )
|
|
{
|
|
Objective_OnAdditionalEntity( obj( "obj_get_to_exfil" ), 1, use_trigger );
|
|
Objective_SetPointerTextOverride( obj( "obj_get_to_exfil" ), &"NX_EXFIL_BREACH_OBJECTIVE" );
|
|
use_trigger thread setup_use_trigger_final_anim();
|
|
}
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
setup_use_trigger_final_anim()
|
|
{
|
|
self SetHintString( &"NX_EXFIL_BREACH_PROMPT" );
|
|
|
|
self waittill( "trigger" );
|
|
|
|
self MakeUnusable();
|
|
|
|
//lets play our anim
|
|
outro_door_kick_spawn();
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
civ_run_away_spawn()
|
|
{
|
|
wait(9);
|
|
civ_a = vignette_actor_spawn("civ_a", "civ_a"); //"value" (kvp), "anim_name"
|
|
civ_b = vignette_actor_spawn("civ_b", "civ_b"); //"value" (kvp), "anim_name"
|
|
civ_c = vignette_actor_spawn("civ_c", "civ_c"); //"value" (kvp), "anim_name"
|
|
civ_d = vignette_actor_spawn("civ_d", "civ_d"); //"value" (kvp), "anim_name"
|
|
civ_e = vignette_actor_spawn("civ_e", "civ_e"); //"value" (kvp), "anim_name"
|
|
civ_f = vignette_actor_spawn("civ_f", "civ_f"); //"value" (kvp), "anim_name"
|
|
civ_g = vignette_actor_spawn("civ_g", "civ_g"); //"value" (kvp), "anim_name"
|
|
civ_h = vignette_actor_spawn("civ_h", "civ_h"); //"value" (kvp), "anim_name"
|
|
civ_j = vignette_actor_spawn("civ_j", "civ_j"); //"value" (kvp), "anim_name"
|
|
civ_k = vignette_actor_spawn("civ_k", "civ_k"); //"value" (kvp), "anim_name"
|
|
|
|
civ_run_away(civ_a, civ_b, civ_c, civ_d, civ_e, civ_f, civ_g, civ_h, civ_j, civ_k);
|
|
|
|
civ_a vignette_actor_delete();
|
|
civ_b vignette_actor_delete();
|
|
civ_c vignette_actor_delete();
|
|
civ_d vignette_actor_delete();
|
|
civ_e vignette_actor_delete();
|
|
civ_f vignette_actor_delete();
|
|
civ_g vignette_actor_delete();
|
|
civ_h vignette_actor_delete();
|
|
civ_j vignette_actor_delete();
|
|
civ_k vignette_actor_delete();
|
|
}
|
|
|
|
civ_run_away(civ_a, civ_b, civ_c, civ_d, civ_e, civ_f, civ_g, civ_h, civ_j, civ_k)
|
|
{
|
|
|
|
node = getstruct("civ_run_away", "script_noteworthy");
|
|
|
|
|
|
guys = [];
|
|
guys["civ_a"] = civ_a;
|
|
guys["civ_b"] = civ_b;
|
|
guys["civ_c"] = civ_c;
|
|
guys["civ_d"] = civ_d;
|
|
guys["civ_e"] = civ_e;
|
|
guys["civ_f"] = civ_f;
|
|
guys["civ_g"] = civ_g;
|
|
guys["civ_h"] = civ_h;
|
|
guys["civ_j"] = civ_j;
|
|
guys["civ_k"] = civ_k;
|
|
|
|
node anim_single(guys, "civ_run_away");
|
|
|
|
}
|
|
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|