nx1-gsc-dump/maps/nx_exfil_anim.gsc

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