IW4-Dump-Files/maps/dc_crashsite.gsc

1456 lines
44 KiB
Plaintext
Raw Blame History

#include maps\_utility;
#include maps\_vehicle;
#include maps\_anim;
#include maps\_hud_util;
#include common_scripts\utility;
main()
{
flag_init( "obj_heli_ride_complete" );
flag_init( "player_crash_done" );
flag_init( "obj_crash_site_given" );
flag_init( "obj_crash_site_complete" );
flag_init( "crash_actors_ready" );
flag_init( "crash_fade_up" );
flag_init( "crash_redshirt_speaks" );
flag_init( "macey_last_mag_dialogue" );
flag_init( "give_player_weapon" );
flag_init( "redshirt_headshot" );
flag_init( "player_ran_out_of_first_clip" );
flag_init( "macey_clip_to_player" );
flag_init( "macey_wont_throw_clip_to_player" );
flag_init( "macey_should_throw_clip_to_player" );
flag_init( "end_sequence_music" );
flag_init( "end_sequence_starting" );
flag_init( "friendly_02_injured" );
flag_init( "crash_cut_to_black" );
flag_init( "notetrack_player_upright" );
flag_init( "notetrack_player_raisehands" );
flag_init( "notetrack_player_lowerhands" );
flag_init( "emp_entity_cleanup_done" );
flag_init( "emp_back_from_whiteout" );
flag_init( "first_wave_done" );
flag_init( "can_talk_crashsite" );
flag_set( "can_talk_crashsite" );
precacheshellshock( "dcburning" );
precacheModel( "weapon_m4_clip" );
preCacheModel( "viewhands_player_us_army" );
precacheTurret( "heli_spotlight" );
crash_anims();
crash_player_anims();
crash_bh_anims();
array_thread( getvehiclenodearray( "plane_sound", "script_noteworthy" ), maps\_mig29::plane_sound_node );
}
/****************************************************************************
CRASH SITE
****************************************************************************/
AA_crash_site_init()
{
array_spawn_function_noteworthy( "axis_crash", ::AI_axis_crash_think );
thread AAA_sequence_player_crash_site();
thread obj_crash_site();
thread dialogue_crash_site();
thread crash_music();
thread player_crash_gun_behavior();
thread crash_vehicles();
}
dialogue_crash_site()
{
crash_chatter_org_left = getent( "crash_chatter_org_left", "targetname" );
crash_chatter_org_right = getent( "crash_chatter_org_right", "targetname" );
flag_wait( "crash_actors_ready" );
/*-----------------------
RADIO CHATTER
-------------------------*/
//Overlord (HQ Radio) Dagger Two-One, this is Overlord. Do you copy, over?
radio_dialogue( "dcburn_hqr_doyoucopy" );
wait( 1 );
//Overlord (HQ Radio) Dagger Two-One, this is Overlord, how copy, over?
radio_dialogue( "dcburn_hqr_howcopy" );
wait( 1 );
//Ranger 3 Two mags left!
crash_chatter_org_left delaycall( 1.5,::playsound, "dcburn_ar3_twomags" );
//Cpl. Dunn Sandler! Taargeeet!! Two o'clooock!!!
level.friendly02 dialogue_queue( "dcburn_cpd_target2" );
wait( 2 );
//Sgt. Foley Sean, talk to me!!!
level.teamleader dialogue_queue( "dcburn_mcy_talktome" );
//Ranger 4 I'm ok! Watch your three!
crash_chatter_org_right delaycall( 0,::playsound, "dcburn_ar4_watch3" );
wait( 1 );
//Cpl. Dunn Target! 11 o'clock! Range, fifty meters!
level.friendly02 thread dialogue_queue( "dcburn_cpd_target11" );
/*-----------------------
REDSHIRT COMES OVER TO GIVE WEAPON
-------------------------*/
flag_wait( "crash_redshirt_speaks" );
//Take this and stay down
level.friendly03.soundOrg = spawn_tag_origin();
level.friendly03.soundOrg.origin = level.player.origin;
level.friendly03.soundOrg linkTo( level.player );
level.friendly03.soundOrg thread entity_delete_on_flag( "redshirt_headshot" );
level.friendly03.soundOrg thread play_sound_on_tag_endon_death( "dcburn_gr1_hangon", "tag_origin" );
//flag_wait( "give_player_weapon" );
flag_wait( "redshirt_headshot" );
wait( 1 );
//level.friendly03.soundOrg delete();
/*-----------------------
REDSHIRT KILLED
-------------------------*/
//Ranger 1 McCord! Reloading, cover me!
crash_chatter_org_left delaycall( 1,::playsound, "dcburn_ar1_reloadingcover" );
//Sgt. Macey Wade's down!!
level.teamleader dialogue_queue( "dcburn_mcy_wadesdown" );
flag_set( "obj_crash_site_given" );
wait( 2 );
//Ranger 2 McCord covering!
crash_chatter_org_right play_sound_in_space( "dcburn_ar2_mccordcovering" );
wait ( 4 );
//Ranger 2 Last mag!
crash_chatter_org_left delaycall( 0,::playsound, "dcburn_ar2_lastmag" );
flag_wait( "macey_last_mag_dialogue" );
//Sgt. Macey: Last one! Make it count!
level.teamleader play_sound_on_entity( "dcburn_mcy_lastone" );
wait( .5 );
//Sgt. Foley Denny! Ammo check!
level.teamleader dialogue_queue( "dcburn_mcy_ammocheck" );
//Ranger 4 I'm good!
crash_chatter_org_right delaycall( .3,::playsound, "dcburn_ar4_imgood" );
wait( 1.5 );
//Cpl. Dunn There's too many of 'em!!
level.friendly02 dialogue_queue( "dcburn_cpd_toomany" );
//Ranger 2 Sean! Last mag!
crash_chatter_org_right play_sound_in_space( "dcburn_ar2_seanlast" );
//Sgt. Foley Sandler! Sound off!
level.teamleader thread dialogue_queue( "dcburn_mcy_soundoff" );
/*-----------------------
END
-------------------------*/
flag_wait( "end_sequence_starting" );
crash_chatter_org_left = getent( "crash_chatter_org_left", "targetname" );
crash_chatter_org_right = getent( "crash_chatter_org_right", "targetname" );
//Ranger 1 New target! Range, eighty meters!
crash_chatter_org_right delaycall( 0,::playsound, "dcburn_ar1_newtarget" );
wait( 1 );
//Cpl. Dunn I'm out!!
//level.friendly02 dialogue_queue( "dcburn_cpd_imout" );
wait( 1 );
//Ranger 2 Got it got it!!
crash_chatter_org_left delaycall( .6,::playsound, "dcburn_ar2_gotitgotit" );
}
entity_delete_on_flag( sFlag )
{
self endon( "death" );
flag_wait( sFlag );
if( isdefined( self ) )
self delete();
}
AAA_sequence_player_crash_site()
{
level.player enableinvulnerability();
//thread player_dryfire();
/*-----------------------
SETUP CRASH SITE
-------------------------*/
level.noMaxMortarDist = true;
level.playerMortarFovOffset = ( 0, 0, 0 );
level._effect[ "mortar" ][ "dirt" ] = loadfx( "explosions/grenadeExp_dirt" ); //reset back to regular dirt
crash_node = getent( "crash_node", "targetname" );
/*-----------------------
PLAYER MOVEMENT
-------------------------*/
movement_grid = crash_site_player_and_heli_setup();
flag_wait( "player_crash_done" );
if( level.script == "dcburning" )
thread autosave_now( true );
/*-----------------------
VISUAL CHANGES
-------------------------*/
setsaveddvar( "sm_sunSampleSizeNear", 0.25 );// ground
setsaveddvar( "sm_sunShadowScale", 1 );// default
maps\_utility::vision_set_fog_changes( "dcburning_crash", 0 );
if ( getdvarint( "r_dcburning_culldist" ) == 1 )
{
level.culldist = getculldist();
setculldist( 23000 );
}
music_stop();
/*-----------------------
EFFECTS
-------------------------*/
if( level.script == "dc_burning" )
{
array_thread( level.effects_ww2, ::pauseEffect );
array_thread( level.effects_trenches, ::pauseEffect );
array_thread( level.effects_commerce, ::pauseEffect );
}
if ( !isdefined( level.black_overlay ) )
{
level.black_overlay = create_client_overlay( "black", 1 );
level.black_overlay.foreground = false;
}
/*-----------------------
FRIENDLIES
-------------------------*/
anim_actors_rescue = [];
level.teamleader = spawn_targetname( "teamLeaderCrash", true );
level.friendly02 = spawn_targetname( "friendly02Crash", true );
level.friendly03 = spawn_targetname( "friendly03Crash", true );
level.teamleader hide();
level.friendly02 hide();
level.friendly03 hide();
level.teamleader.animname = "crash_leader";
level.friendly02.animname = "crash_dunn";
level.friendly03.animname = "crash_redshirt";
level.teamleader thread AI_ignored_and_oblivious_crashsite();
level.friendly02 thread AI_ignored_and_oblivious_crashsite();
level.friendly03 thread AI_ignored_and_oblivious_crashsite();
level.teamleader thread magic_bullet_shield( true );
level.friendly02 thread magic_bullet_shield( true );
level.teamleader set_flavorbursts( false );
level.friendly02 set_flavorbursts( false );
level.friendly03 set_flavorbursts( false );
/*-----------------------
CRASH ANIM SETUP
-------------------------*/
crash_node = getent( "crash_node", "targetname" );
ePlayer_rig = spawn_anim_model( "player_rig" );
anim_actors_rescue[ 0 ] = ePlayer_rig;
anim_actors_rescue[ 1 ] = level.friendly03;
crash_node anim_first_frame( anim_actors_rescue, "dcburning_BHrescue" );
level.m4 = spawn( "script_model", ( 0, 0, 0 ) );
level.m4 setmodel( "weapon_m4" );
level.m4 HidePart( "TAG_THERMAL_SCOPE" );
level.m4 HidePart( "TAG_FOREGRIP" );
//weapon HidePart( "TAG_WEAPON"
level.m4 HidePart( "TAG_ACOG_2" );
//weapon HidePart( "TAG_EOTECH" );
level.m4 HidePart( "TAG_HEARTBEAT" );
//weapon HidePart( "TAG_M203" );
level.m4 HidePart( "TAG_RED_DOT" );
level.m4 HidePart( "TAG_SHOTGUN" );
level.m4 HidePart( "TAG_SILENCER" );
level.m4.origin = level.friendly03 gettagorigin( "tag_inhand" );
level.m4.angles = level.friendly03 gettagangles( "tag_inhand" );
level.m4 linkto( level.friendly03, "tag_inhand" );
level.m4 thread delete_on_flag( "redshirt_headshot" );
//level.friendly03 attach( "weapon_m4m203_acog", "tag_inhand", true );
level.player freezecontrols( true );
level.player PlayerLinkToDelta( ePlayer_rig, "tag_player", 1, 0, 0, 0, 0, true );
thread player_crash_movement( movement_grid[ "top_left" ], movement_grid[ "bot_right" ], ePlayer_rig );
flag_set( "crash_actors_ready" );
//thread player_crash_health();
wait( 3 );
flag_set( "obj_heli_ride_complete" );
wait( 4 );
/*-----------------------
ENEMIES AND VEHICLES
-------------------------*/
spawn_trigger_dummy_crashsite( "dummy_spawner_axis_crash_flood" );
axis_crash_drones = getentarray( "axis_crash_drones", "targetname" );
thread drone_flood_start_crashsite( axis_crash_drones, "axis_crash_drones" );
/*-----------------------
FADE UP FROM BLACK
-------------------------*/
flag_set( "crash_fade_up" );
delaythread( 8, maps\_mortar::bog_style_mortar_on, 3 );
level.black_overlay fadeOverTime( 2 );
level.black_overlay.alpha = 0;
/*-----------------------
REDSHIRT TRIES TO RESCUE, DIES
-------------------------*/
level.friendly03 show();
hostiles_drones_crash_site_01 = array_spawn( getentarray( "hostiles_drones_crash_site_01", "targetname" ) );
level.friendly03.dontdonotetracks = true;
level.friendly03.dropweapon = false;
level.friendly03.script_looping = 0;
level.friendly03 setcontents( 0 );
level.friendly03.skipDeathAnim = true;
level.friendly03.noragdoll = true;
level.friendly03 thread delete_at_end_of_anim();
crash_node thread anim_single( anim_actors_rescue, "dcburning_BHrescue" );
/*-----------------------
MACEY AND DUNN COME UP AND FIGHT FROM VEHICLE
-------------------------*/
anim_actors_leader_and_dunn = [];
anim_actors_leader_and_dunn[ 0 ] = level.teamleader;
anim_actors_leader_and_dunn[ 1 ] = level.friendly02;
level.teamleader show();
level.friendly02 show();
crash_node anim_single( anim_actors_leader_and_dunn, "vehicle_cover" );
//crash_node anim_single( anim_actors_leader_and_dunn, "vehicle_cover_loop" );
flag_set( "first_wave_done" );
//Foley always throws clip to player...no matter what (per Jason's hitlist)
//if ( flag( "player_ran_out_of_first_clip" ) )
//{
flag_set( "macey_should_throw_clip_to_player" );
//thread player_force_invulnerability( "macey_clip_to_player" );
thread macey_last_mag_dialogue();
time = getanimlength( level.teamleader getanim( "dcburning_BHrescue_throwclip" ) ) - 5.0;
thread flag_set_delayed( "end_sequence_music", time );
crash_node anim_single( anim_actors_leader_and_dunn, "dcburning_BHrescue_throwclip" );
//}
//else
//{
// flag_set( "macey_wont_throw_clip_to_player" );
// crash_node anim_single( anim_actors_leader_and_dunn, "vehicle_cover_loop" );
//}
flag_set( "end_sequence_starting" );
/*-----------------------
PLAYER WORKING ON SECOND CLIP
-------------------------*/
delaythread( 2, maps\_mortar::bog_style_mortar_off, 3 );
crash_node thread anim_single( anim_actors_leader_and_dunn, "dcburning_BHrescue_laststand" );
//Cpl. Dunn Tracer! Three rounds left! (pain sound)
level.friendly02 thread play_sound_on_entity( "dcburn_cpd_tracer3rounds" );
//wait ( 3 );
foreach ( guy in anim_actors_leader_and_dunn )
guy.ignorme = true;
level.player.ignoreme = true;
flag_wait( "crash_cut_to_black" );
level.black_overlay destroy();
/*-----------------------
CUT TO WHITE
-------------------------*/
crash_end_scene();
}
delete_on_flag( sFlag )
{
flag_wait( sFlag );
if ( isdefined( self ) )
self delete();
}
macey_last_mag_dialogue()
{
//thread flag_set_delayed( "macey_clip_to_player", 4.3 ); //xxxx needs to be triggered from notetrack
}
player_crash_gun_behavior()
{
flag_wait( "player_crash_done" );
level.player takeallweapons();
level.player disableweapons();
flag_wait( "give_player_weapon" );
thread autosave_now( true );
SetSavedDvar( "hud_showStance", "1" );
setsaveddvar( "ui_hidemap", 0 );
setSavedDvar( "hud_drawhud", "1" );
SetSavedDvar( "hud_showStance", "1" );
SetSavedDvar( "compass", "1" );
SetDvar( "old_compass", "1" );
SetSavedDvar( "ammoCounterHide", "0" );
level.player allowcrouch( true );
level.player giveWeapon( "m4m203_eotech" );
level.player SetWeaponAmmoClip( "m4m203_eotech", 0 );
level.player SetWeaponAmmoStock( "m4m203_eotech", 0 );
level.player SetWeaponAmmoClip( "m203_m4_eotech", 0 );
level.player SetWeaponAmmoStock( "m203_m4_eotech", 0 );
level.player switchToWeapon( "m4m203_eotech" );
level.player enableweapons();
if( level.script == "dcemp" )
{
level.player giveWeapon( "fraggrenade" );
level.player giveWeapon( "flash_grenade" );
level.player setOffhandSecondaryClass( "flash" );
level.player setWeaponAmmoStock( "fraggrenade", 0 );
level.player setWeaponAmmoStock( "flash_grenade", 0 );
//level.player disableoffhandweapons();
}
level.player SetWeaponAmmoClip( "m4m203_eotech", 30 );
level.player SetWeaponAmmoStock( "m4m203_eotech", 0 );
thread player_ammo_monitor_clip_01();
flag_wait_either( "macey_wont_throw_clip_to_player", "macey_should_throw_clip_to_player" );
if ( flag( "macey_should_throw_clip_to_player" ) )
{
flag_wait( "macey_clip_to_player" );
//level.player disableweapons();
level.player SetWeaponAmmoClip( "m4m203_eotech", 0 );
level.player SetWeaponAmmoStock( "m4m203_eotech", 30 );
//wait( 1 );
//level.player enableweapons();
}
else
{
//
//
}
}
delete_at_end_of_anim()
{
self waittillmatch( "single anim", "end" );
weapon_model = getWeaponModel( self.weapon );
weapon = self.weapon;
if ( isdefined( weapon_model ) )
{
self detach( weapon_model, "tag_weapon_right" );
}
self kill();
}
player_ammo_monitor_clip_01()
{
//GetWeaponAmmoClip
while( level.player GetWeaponAmmoClip( "m4m203_eotech" ) > 0 )
wait( 0.05 );
flag_set( "player_ran_out_of_first_clip" );
}
//player_dryfire()
//{
// flag_wait( "give_player_weapon" );
// wait( 2 );
// while( true )
// {
// wait( 0.05 );
// while( level.player GetWeaponAmmoClip( "m4m203_eotech" ) == 0 )
// {
// waittill_player_fires_empty_gun();
// level.player playsound( "dcburning_dryfire_rifle_plr" );
// wait( 1 );
// }
//
// }
//}
waittill_player_fires_empty_gun()
{
while ( !level.player AttackButtonPressed() )
wait( 0.05 );
}
crash_site_player_and_heli_setup()
{
crash_node = getent( "crash_node", "targetname" );
level.player allowstand( true );
level.player allowprone( false );
level.player allowsprint( false );
level.player allowjump( false );
level.player allowcrouch( false );
player_crash_heli = getent( "crash_site", "targetname" );
dummy = player_crash_heli;
crash_site_clip = getent( "crash_site_clip", "targetname" );
heli_clip = getent( "intro_heli_after_emp_clip", "targetname" );
crash_site_top_bar = getent( "crash_site_top_bar", "targetname" );
crash_site_bot_bar = getent( "crash_site_bot_bar", "targetname" );
movement_grid_top_left = getent( "movement_grid_top_left", "targetname" );
movement_grid_bot_right = getent( "movement_grid_bot_right", "targetname" );
movement_grid_exit = getent( "movement_grid_exit", "targetname" );
crash_site_clip show();
heli_clip notsolid();
crash_site_clip linkto( dummy );
movement_grid_top_left linkto( dummy );
movement_grid_bot_right linkto( dummy );
movement_grid_exit linkto( dummy );
heli_clip linkto( dummy );
if( level.script == "dcburning" )
{
crash_site_top_bar linkto( dummy );
crash_site_bot_bar linkto( dummy );
}
else
{
level.plank2 = spawn_anim_model( "plank2", crash_site_top_bar getorigin() );
level.plank1 = spawn_anim_model( "plank1", crash_site_bot_bar getorigin() );
level.planks = [];
level.planks[ 0 ] = level.plank1;
level.planks[ 1 ] = level.plank2;
crash_site_top_bar linkto( level.plank2 );
crash_site_bot_bar linkto( level.plank1 );
crash_node anim_first_frame( level.planks, "dcemp_BHrescue" );
}
player_crash_heli.animname = "crash_blackhawk";
player_crash_heli assign_animtree();
crash_node anim_first_frame_solo( player_crash_heli, "rotors_start" );
add_wait( ::flag_wait, "player_crash_done" );
add_func( ::player_crash_vision );
player_crash_heli add_call( ::show );
crash_node add_func( ::anim_loop_solo, player_crash_heli, "rotors" );
thread do_wait();
movement_grid = [];
movement_grid[ "top_left" ] = movement_grid_top_left;
movement_grid[ "bot_right" ] = movement_grid_bot_right;
return movement_grid;
}
crash_end_scene()
{
if ( level.script == "dcburning" )
{
// delaythread( 0, ::exploder, "emp_flash" );
// delaythread( .5, ::exploder, "emp_flash" );
// delaythread( 1, ::exploder, "emp_flash" );
white_overlay = crash_white_out();
wait( 1 );
vehicle_delete_all_crashsite();
aAI = getaiarray();
array_thread( aAI, ::AI_delete_crashsite );
wait( 2 );
nextMission();
}
else
{
// delaythread( 0, ::exploder, "emp_flash" );
//delaythread( .5, ::exploder, "emp_flash" );
//delaythread( 1, ::exploder, "emp_flash" );
//level.player shellshock( "nosound", 2 );
white_overlay = crash_white_out();
level.white_overlay = white_overlay;
if( level.start_point != "emp" )
{
//take care of vehicles and ai in them
excluders = [];
excluders[ excluders.size ] = level.emp_heli_spotlight;
excluders[ excluders.size ] = level.emp_btr80;
excluders = array_combine( excluders, level.helis_crash_rappel );
excluders = array_combine( excluders, level.helis_crash_distant );
vehicle_delete_all_crashsite( excluders );
//ai
array_thread( getaiarray( "neutral", "allies" ), ::AI_delete_crashsite );
array_call( getentarray( "axis_crash_flood", "targetname" ), ::delete );
//drones
level notify( "stop_drone_flood" + "axis_crash_drones" );
drones = getentarray( "axis_crash_drone", "script_noteworthy" );
array_call( drones, ::delete );
}
flag_set( "emp_entity_cleanup_done" );
level.player disableinvulnerability();
//level.player EnableDeathShield( false );
if ( getdvarint( "r_dcburning_culldist" ) == 1 )
{
setculldist( level.culldist );
}
}
}
crash_white_out()
{
white_overlay = create_client_overlay( "white", 0 );
wait( .6 );
white_overlay fadeOverTime( .2 );
white_overlay.alpha = 1;
thread play_sound_in_space( "emp_whoosh", level.player.origin + (0,0,100), true );
delaythread( .5, ::crash_cut_sound );
wait( .3 );
//old way
/*
white_overlay = create_client_overlay( "white", 0 );
white_overlay fadeOverTime( .75 );
white_overlay.alpha = 1;
wait( .75 );
*/
return white_overlay;
}
crash_cut_sound()
{
time = .25;
level.player SetEqLerp( 1, level.eq_main_track );
AmbientStop( time );
thread maps\_ambient::use_eq_settings( "sound_fadeout", level.eq_mix_track );
thread maps\_ambient::blend_to_eq_track( level.eq_mix_track , time );
}
//player_force_invulnerability( sFlagToStop )
//{
// while( !flag( sFlagToStop ) )
// {
// level.player enableinvulnerability();
// wait( 1 );
// }
// wait( 3.5 );
// level.lasttimePlayerKilledEnemy = getTime();
// level.player disableinvulnerability();
// level.player EnableDeathShield( true );
//}
crash_vehicles()
{
flag_wait( "crash_redshirt_speaks" );
delaythread( 0, ::spawn_vehicles_from_targetname_and_drive, "jets_crash_site_01" );
helis = spawn_vehicles_from_targetname_and_drive( "helis_crash_rappel" );
array_thread( helis,::godOn );
flag_wait( "end_sequence_starting" );
btr80s_end = spawn_vehicles_from_targetname_and_drive( "btr80s_end" );
array_thread( btr80s_end,::godOn );
array_thread( btr80s_end,::btr80s_end_think );
//wait( 5 );
thread heli_crash_site_spotlight_think( btr80s_end );
}
btr80s_end_think()
{
self ent_flag_init( "stop_btr" );
self ent_flag_wait( "stop_btr" );
self vehicle_setSpeed( 0, 3, 3 );
self setTurretTargetVec( level.player.origin + ( 0, 0, 32 ) );
}
player_crash_vision()
{
/*-----------------------
HIDE HUD
-------------------------*/
SetBlur( 3, .1 );
setsaveddvar( "ui_hidemap", 1 );
SetSavedDvar( "hud_showStance", "0" );
SetSavedDvar( "compass", "0" );
//SetSavedDvar( "ammoCounterHide", "1" );
handsDuration = getanimlength( level.scr_anim[ "player_rig" ][ "dcburning_BHrescue" ] );
shellshockTime = handsDuration + 2;
level.player shellshock( "dcburning", shellshockTime );
dof_start = level.dofDefault;
flag_wait( "notetrack_player_upright" );
SetBlur( 3, .5 );
wait( .5 );
SetBlur( .2, .5 );
wait( .5 );
SetBlur( 3, .5 );
flag_wait( "notetrack_player_raisehands" );
/*-----------------------
LOOK AT HANDS, BG BLURS
-------------------------*/
dof_see_hands = [];
dof_see_hands[ "nearStart" ] = 0;
dof_see_hands[ "nearEnd" ] = 0;
dof_see_hands[ "nearBlur" ] = 6;
dof_see_hands[ "farStart" ] = 30;
dof_see_hands[ "farEnd" ] = 70;
dof_see_hands[ "farBlur" ] = 2.5;
thread blend_dof( dof_start, dof_see_hands, 3 );
SetBlur( 0, 3 );
flag_wait( "notetrack_player_lowerhands" );
/*-----------------------
DROP HANDS, BG COMES INTO FOCUS
-------------------------*/
dof_see_dudes = [];
dof_see_dudes[ "nearStart" ] = 4.7;
dof_see_dudes[ "nearEnd" ] = 56;
dof_see_dudes[ "nearBlur" ] = 6;
dof_see_dudes[ "farStart" ] = 1000;
dof_see_dudes[ "farEnd" ] = 7000;
dof_see_dudes[ "farBlur" ] = 0;
//thread blend_dof( dof_see_hands, dof_see_dudes, 5 );
thread blend_dof( dof_see_hands, dof_start, 6 );
/*-----------------------
TRANSITION BACK INTO DEFAULT DOF
-------------------------*/
//iprintLnBold( "Go back into default DOF" );
//thread blend_dof( dof_see_dudes, dof_start, 3 );
}
blur_blink()
{
SetBlur( 3, .5 );
wait( .5 );
SetBlur( 0, .5 );
wait( .5 );
SetBlur( 3, .5 );
}
crash_music()
{
flag_wait( "end_sequence_music" );
thread musicPlayWrapper( "dcburning_crashsite_01" );
flag_wait( "end_sequence_starting" );
wait ( 11.5 );
flag_set( "crash_cut_to_black" );
battlechatter_off( "axis" );
}
//player_crash_health()
//{
// level endon( "emp_entity_cleanup_done" );
//
// level.player enableinvulnerability();
//
// flag_wait( "give_player_weapon" );
//
// level.lasttimePlayerKilledEnemy = getTime();
// level.player disableinvulnerability();
// level.player EnableDeathShield( true );
//
//
// while( true )
// {
// level.player waittill( "damage", amount, attacker );
// if ( !isdefined( attacker ) )
// continue;
// if ( attacker.team == "axis" )
// player_crash_temp_invulnerable();
// }
//}
//player_crash_temp_invulnerable( sFlagToEndOn )
//{
// if ( !player_killing_crash_enemies_at_good_pace() )
// return;
//
// level endon( "emp_entity_cleanup_done" );
// level notify( "player_crash_temp_invulnerable" );
// level endon( "player_crash_temp_invulnerable" );
//
// level.player enableinvulnerability();
// wait( 3 );
// level.player disableinvulnerability();
// level.player EnableDeathShield( true );
//}
player_killing_crash_enemies_at_good_pace()
{
currentTime = getTime();
timeElapsed = currentTime - level.lasttimePlayerKilledEnemy;
if ( currentTime == level.lasttimePlayerKilledEnemy )
return true;
else if ( timeElapsed > 5000 )
return false;
else
return true;
}
crash_dlight( ePlayer_rig )
{
while( !flag( "end_sequence_starting" ) )
{
playfxontag( getfx( "dlight_blue" ), ePlayer_rig, "tag_player" );
wait( 1 );
stopfxontag( getfx( "dlight_blue" ), ePlayer_rig, "tag_player" );
wait( .3 );
playfxontag( getfx( "dlight_blue" ), ePlayer_rig, "tag_player" );
wait( .5 );
stopfxontag( getfx( "dlight_blue" ), ePlayer_rig, "tag_player" );
wait( .3 );
playfxontag( getfx( "dlight_blue" ), ePlayer_rig, "tag_player" );
wait( .2 );
stopfxontag( getfx( "dlight_blue" ), ePlayer_rig, "tag_player" );
wait( .4 );
playfxontag( getfx( "dlight_blue" ), ePlayer_rig, "tag_player" );
wait( .6 );
stopfxontag( getfx( "dlight_blue" ), ePlayer_rig, "tag_player" );
wait( .4 );
}
stopfxontag( getfx( "dlight_blue" ), ePlayer_rig, "tag_player" );
}
player_crash_movement( movement_grid_top_left, movement_grid_bot_right, ePlayer_rig )
{
level endon( "player_shot" );
level endon( "player_unlinked" );
flag_wait( "crash_fade_up" );
thread crash_dlight( ePlayer_rig );
if( level.script != "dcemp" || level.start_point != "iss" )
delaythread( 1, ::open_player_fov, ePlayer_rig );
flag_wait( "redshirt_headshot" );
ePlayer_rig hide();
zoffset = ( 0, 0, 0 );
crash_node = getent( "crash_node", "targetname" );
playerOrg = spawn_tag_origin();
//playerOrg.origin = level.player.origin + zoffset;
//playerOrg.angles = level.player.angles;
playerOrg.origin = level.player.origin + zoffset;
playerOrg.angles = ePlayer_rig.angles + ( 0, 0, 0 );
if( level.script != "dcemp" || level.start_point != "iss" )
{
level.player unlink();
level.player playerLinkToBlend( playerOrg, "tag_player", .5 );
wait( .5 );
level.player PlayerLinkToDelta( playerOrg, "tag_player", 1, 45, 60, 20, 15, true );
}
level.player.playerrig = playerOrg;
moveRate = 3;
updateTime = 0.05;
maxValueX = movement_grid_top_left.origin[ 0 ] ;
maxValueY = movement_grid_bot_right.origin[ 1 ] ;
minValueX = movement_grid_bot_right.origin[ 0 ] ;
minValueY = movement_grid_top_left.origin[ 1 ] ;
valueX = undefined;
valueY = undefined;
valueZ = undefined;
//Get the player's normalized movement vector. Returns [-1,1] for X(forward) and Y(right) based on player's input.
//getnormalizedMovement - add this value times the dvar "moverate" or something
while( true )
{
wait( updateTime );
movement = level.player GetNormalizedMovement();
//iprintlnbold( movement[ 0 ] + " : " + movement[ 1 ] );
forward = anglesToForward( level.player.angles );
right = anglesToRight( level.player.angles );
forward *= movement[ 0 ] * moveRate;
right *= movement[ 1 ] * moveRate;
newLocation = playerOrg.origin + forward + right;
newLocation = ( newLocation[ 0 ], newLocation[ 1 ], crash_node.origin[ 2 ] );
valueX = cap_value( newLocation[ 0 ], minValueX, maxValueX );
valueY = cap_value( newLocation[ 1 ], minValueY, maxValueY );
valueZ = playerOrg.origin[ 2 ];
newLocation = ( valueX, valueY, valueZ );
playerOrg.origin = newLocation;
}
}
AI_axis_crash_think()
{
self.interval = 0;
self.neverEnableCQB = true;
self.grenadeawareness = 0;
self.ignoresuppression = true;
self.aggressivemode = true; //dont linger at cover when you cant see your enemy
self waittill( "death", attacker );
if ( ( isdefined( attacker ) ) && ( isplayer( attacker ) ) )
level.lasttimePlayerKilledEnemy = getTime();
}
open_player_fov( ePlayer_rig )
{
level.player freezecontrols( false );
//<right arc>, <left arc>, <top arc>, <bottom arc>, <use tag angles> )
level.player PlayerLinkToDelta( ePlayer_rig, "tag_player", 1, 25, 25, 15, 10, true );
}
heli_crash_site_spotlight_think( btr80s_end )
{
heli_crash_site_spotlight = spawn_vehicle_from_targetname_and_drive( "heli_crash_site_spotlight" );
heli_crash_site_spotlight endon( "death" );
heli_crash_site_spotlight thread godOn();
heli_crash_site_spotlight vehicle_setSpeed( 30 );
heli_crash_site_spotlight setmaxpitchroll( 20, 20 );
wait( 5 );
heli_crash_site_spotlight SetLookAtEnt( level.player );
wait( 2.5 );
heli_crash_site_spotlight thread maps\_attack_heli::heli_spotlight_on( "tag_spotlight", false );
heli_crash_site_spotlight setturrettargetent( btr80s_end[ 0 ] );
wait( 1.5 );
target2 = getent( "btr80s_old_end", "targetname" );
heli_crash_site_spotlight setturrettargetent( target2 );
heli_crash_site_spotlight SetLookAtEnt( level.player );
wait( 2 );
heli_crash_site_spotlight vehicle_setSpeed( 10 );
heli_crash_site_spotlight notify( "stop_spotlight_random_targets" );
wait( .1 );
heli_crash_site_spotlight setturrettargetent( level.player );
wait( 2 );
}
obj_crash_site()
{
flag_wait( "obj_crash_site_given" );
if( level.script == "dcburning" )
{
objective_number = 9;
objective_add( objective_number, "active", &"DCBURNING_OBJ_CRASH_SITE" );
objective_current( objective_number );
flag_wait( "obj_crash_site_complete" );
objective_state( objective_number, "done" );
}
else
{
objective_add( level.objnum, "active", &"DCEMP_OBJ_CRASH_SITE" );
objective_current( level.objnum );
flag_wait( "iss_fx" );
objective_delete( level.objnum );
}
}
player_blackhawk_health_tweaks()
{
//thread player_heli_damage_ramp();
old_longRegenTime = level.player.gs.longRegenTime;
old_deathInvulnerableTime = level.player.deathInvulnerableTime; //2500
old_bg_viewKickScale = getdvar( "bg_viewKickScale" ); // 0.8
old_bg_viewKickMax = getdvar( "bg_viewKickMax" ); // 90
old_bg_viewKickMin = getdvar( "bg_viewKickMin" ); // 5
level.player ent_flag_clear( "near_death_vision_enabled" );
level.player.gs.longRegenTime = 500;
level.player.baseIgnoreRandomBulletDamage = true;
level.ignoreRandomBulletDamage = true;
level.player.deathInvulnerableTime = 7000;
setsaveddvar( "bg_viewKickScale", 0.1 );
setsaveddvar( "bg_viewKickMax", "5" );
setsaveddvar( "bg_viewKickMin", "1" );
flag_wait( "player_crash_done" );
level.player.gs.longRegenTime = old_longRegenTime;
level.player.deathInvulnerableTime = old_deathInvulnerableTime;
setsaveddvar( "bg_viewKickScale", old_bg_viewKickScale );
setsaveddvar( "bg_viewKickMax", old_bg_viewKickMax );
setsaveddvar( "bg_viewKickMin", old_bg_viewKickMin );
level.player ent_flag_set( "near_death_vision_enabled" );
}
#using_animtree( "generic_human" );
crash_anims()
{
//Overlord (HQ Radio) Dagger Two-One, this is Overlord. Do you copy, over?
level.scr_radio[ "dcburn_hqr_doyoucopy" ] = "dcburn_hqr_doyoucopy";
//Overlord (HQ Radio) Dagger Two-One, this is Overlord, how copy, over?
level.scr_radio[ "dcburn_hqr_howcopy" ] = "dcburn_hqr_howcopy";
//Overlord (HQ Radio) Dagger Two-One, this is Overlord, do you read me, over?
level.scr_radio[ "dcburn_hqr_doyoureadme" ] = "dcburn_hqr_doyoureadme";
//Ranger 1 Ramirez!
level.scr_sound[ "crash_redshirt" ][ "dcburn_gr1_ramirez1" ] = "dcburn_gr1_ramirez1";
//Ranger 1 Ramirez!!!
level.scr_sound[ "crash_redshirt" ][ "dcburn_gr1_ramirez2" ] = "dcburn_gr1_ramirez2";
//Take this and stay down!
level.scr_sound[ "dcburn_gr1_hangon" ] = "dcburn_gr1_hangon";
//Sgt. Macey Wade's down!!
level.scr_sound[ "crash_leader" ][ "dcburn_mcy_wadesdown" ] = "dcburn_mcy_wadesdown";
//Cpl. Dunn There's too many of 'em!!
level.scr_sound[ "crash_dunn" ][ "dcburn_cpd_toomany" ] = "dcburn_cpd_toomany";
//Sgt. Macey Defend this position!! dcburn_mcy_defendthispos
level.scr_sound[ "crash_leader" ][ "dcburn_mcy_defendthispos" ] = "dcburn_mcy_defendthispos";
//Cpl. Dunn Macey, last mag!!
level.scr_sound[ "crash_dunn" ][ "dcburn_cpd_lastmag" ] = "dcburn_cpd_lastmag";
//Sgt. Macey: Last one! Make it count!<21>
level.scr_sound[ "crash_leader" ][ "dcburn_mcy_lastone" ] = "dcburn_mcy_lastone";
//Cpl. Dunn I'm out!! I'm out!! - (cut off by explosion)
level.scr_sound[ "crash_dunn" ][ "dcburn_cpd_imout" ] = "dcburn_cpd_imout";
//Sgt. Macey Get dowwwn!!!! (cut off by gunfire)
level.scr_sound[ "crash_leader" ][ "dcburn_mcy_getdown" ] = "dcburn_mcy_getdown";
//Ranger 1 McCord! Reloading, cover me!
level.scr_sound[ "generic" ][ "dcburn_ar1_reloadingcover" ] = "dcburn_ar1_reloadingcover";
//Ranger 2 McCord covering!
level.scr_sound[ "generic" ][ "dcburn_ar2_mccordcovering" ] = "dcburn_ar2_mccordcovering";
//Ranger 1 Loading!!
level.scr_sound[ "generic" ][ "dcburn_ar1_loading" ] = "dcburn_ar1_loading";
//Ranger 2 Sean! Last mag!
level.scr_sound[ "generic" ][ "dcburn_ar2_seanlast" ] = "dcburn_ar2_seanlast";
//Cpl. Dunn Sandler! Taargeeet!! Two o'clooock!!!
level.scr_sound[ "crash_dunn" ][ "dcburn_cpd_target2" ] = "dcburn_cpd_target2";
//Sgt. Foley Denny! Ammo check!
level.scr_sound[ "crash_leader" ][ "dcburn_mcy_ammocheck" ] = "dcburn_mcy_ammocheck";
//Ranger 4 I'm good!
level.scr_sound[ "generic" ][ "dcburn_ar4_imgood" ] = "dcburn_ar4_imgood";
//Sgt. Foley Sandler! Sound off!
level.scr_sound[ "crash_leader" ][ "dcburn_mcy_soundoff" ] = "dcburn_mcy_soundoff";
//Ranger 3 Two mags left!
level.scr_sound[ "generic" ][ "dcburn_ar3_twomags" ] = "dcburn_ar3_twomags";
//Sgt. Foley McCord!
level.scr_sound[ "crash_leader" ][ "dcburn_mcy_mccord" ] = "dcburn_mcy_mccord";
//Ranger 2 Last mag!
level.scr_sound[ "generic" ][ "dcburn_ar2_lastmag" ] = "dcburn_ar2_lastmag";
//Sgt. Foley Sean, talk to me!!!
level.scr_sound[ "crash_leader" ][ "dcburn_mcy_talktome" ] = "dcburn_mcy_talktome";
//Ranger 4 I'm ok! Watch your three!
level.scr_sound[ "generic" ][ "dcburn_ar4_watch3" ] = "dcburn_ar4_watch3";
//Ranger 1 New target! Range, eighty meters!
level.scr_sound[ "generic" ][ "dcburn_ar1_newtarget" ] = "dcburn_ar1_newtarget";
//Ranger 2 Got it got it!!
level.scr_sound[ "generic" ][ "dcburn_ar2_gotitgotit" ] = "dcburn_ar2_gotitgotit";
//Cpl. Dunn Target! 11 o'clock! Range, fifty meters!
level.scr_sound[ "crash_dunn" ][ "dcburn_cpd_target11" ] = "dcburn_cpd_target11";
//Cpl. Dunn Tracer! Three rounds left! (pain sound)
//level.scr_sound[ "crash_dunn" ][ "dcburn_cpd_tracer3rounds" ] = "dcburn_cpd_tracer3rounds";
//Cpl. Dunn (sequence of pain while being dragged to safety after having been shot)
level.scr_sound[ "crash_dunn" ][ "dcburn_cpd_pain" ] = "dcburn_cpd_pain";
//Sgt. Foley Corporal, hang on!!!
level.scr_sound[ "crash_leader" ][ "dcburn_mcy_hangon" ] = "dcburn_mcy_hangon";
/*-----------------------
MORTAR EFFECTS & SOUNDS
-------------------------*/
level._effect[ "mortar" ][ "bunker_ceiling" ] = loadfx( "dust/ceiling_dust_bunker" );
level._effect[ "mortar" ][ "bunker_ceiling_green" ] = loadfx( "dust/ceiling_dust_bunker_green" );
level._effect[ "mortar" ][ "dirt_large" ] = loadfx( "explosions/artilleryExp_dirt_brown_2" );
level._effect[ "mortar" ][ "dirt" ] = loadfx( "explosions/grenadeExp_dirt" );
//level._effect[ "mortar" ][ "mud" ] = loadfx( "explosions/grenadeExp_mud" );
//level._effect[ "mortar" ][ "water" ] = loadfx( "explosions/grenadeExp_water" );
level._effect[ "mortar" ][ "concrete" ] = loadfx( "explosions/grenadeExp_concrete_1_low" );
level.scr_sound[ "mortar" ][ "incomming" ] = "mortar_incoming";
level.scr_sound[ "mortar" ][ "dirt" ] = "mortar_explosion_dirt";
level.scr_sound[ "mortar" ][ "dirt_large" ] = "mortar_explosion_dirt";
level.scr_sound[ "mortar" ][ "concrete" ] = "mortar_explosion_dirt";
level.scr_sound[ "mortar" ][ "mud" ] = "mortar_explosion_water";
/*-----------------------
NUKE FX
-------------------------*/
level._effect[ "nuke_flash" ] = loadfx( "explosions/nuke_flash" );
/*-----------------------
NOT CURRENTLY USED
-------------------------*/
// //Marine 2 Javelins! 12 O'Clock!
// level.scr_radio[ "dcburn_javelins_incoming_00" ] = "dcburn_gm2_javelins12";
//
// //Sgt. Macey Rpg team eliminated, section five-alpha.
// level.scr_radio[ "dcburn_mcy_fivealpha" ] = "dcburn_mcy_fivealpha";
//
// //Sgt. Macey Enemy fire team suppressed, section five-bravo.
// level.scr_radio[ "dcburn_mcy_fivebravo" ] = "dcburn_mcy_fivebravo";
//
//
// //Sgt. Macey Hostile fire team suppressed, section five-charlie.
// level.scr_radio[ "dcburn_mcy_fivecharlie" ] = "dcburn_mcy_fivecharlie";
//
// //Sgt. Macey Enemy RPG team down, section five-echo.
// level.scr_radio[ "dcburn_mcy_fiveecho" ] = "dcburn_mcy_fiveecho";
//
// //Sgt. Macey Enemy fire team down, section five-india.
// level.scr_radio[ "dcburn_mcy_fiveindia" ] = "dcburn_mcy_fiveindia";
//
// //Overlord HQ Radio Voice Overlord copies all. Two-One, proceed to the southwest corner. Out.
// level.scr_radio[ "dcburn_hqr_proceedswcorner" ] = "dcburn_hqr_proceedswcorner";
//soldier wakeup and die
level.scr_anim[ "crash_redshirt" ][ "dcburning_BHrescue" ] = %dcburning_BHrescue_soldier_wakeup;
//addNotetrack_attach( "crash_redshirt", "start", "weapon_m4m203_acog", "tag_inhand", "dcburning_BHrescue" );
//addNotetrack_detach( "crash_redshirt", "detachgun", "weapon_m4m203_acog", "tag_inhand", "dcburning_BHrescue" );
addNotetrack_customFunction( "crash_redshirt", "dialogue",::notetrack_redshirt_dialogue, "dcburning_BHrescue" );
addNotetrack_customFunction( "crash_redshirt", "detachgun",::notetrack_redshirt_gives_gun, "dcburning_BHrescue" );
addNotetrack_customFunction( "crash_redshirt", "headshot",::notetrack_redshirt_shot_in_head, "dcburning_BHrescue" );
//friendly runup and cover
level.scr_anim[ "crash_leader" ][ "vehicle_cover" ] = %dcburning_BHrescue_soldier1_fighting;
level.scr_anim[ "crash_dunn" ][ "vehicle_cover" ] = %dcburning_BHrescue_soldier2_fighting;
//friendly cover
level.scr_anim[ "crash_leader" ][ "vehicle_cover_loop" ] = %dcburning_BHrescue_soldier1_loop;
level.scr_anim[ "crash_dunn" ][ "vehicle_cover_loop" ] = %dcburning_BHrescue_soldier2_loop;
//soldier throw clip
level.scr_anim[ "crash_leader" ][ "dcburning_BHrescue_throwclip" ] = %dcburning_BHrescue_soldier1_giveammo;
addNotetrack_customFunction( "crash_leader", "dialogue",::notetrack_friendly_macey_last_mag_dialogue, "dcburning_BHrescue_throwclip" );
level.scr_anim[ "crash_dunn" ][ "dcburning_BHrescue_throwclip" ] = %dcburning_BHrescue_soldier2_giveammo;
addNotetrack_attach( "crash_leader", "clipattach", "weapon_m4_clip", "tag_inhand", "dcburning_BHrescue_throwclip" );
addNotetrack_detach( "crash_leader", "clipdetach", "weapon_m4_clip", "tag_inhand", "dcburning_BHrescue_throwclip" );
//last stand behind car....Dunn is wounded, etc
level.scr_anim[ "crash_leader" ][ "dcburning_BHrescue_laststand" ] = %dcburning_BHrescue_soldier1_wounded;
level.scr_anim[ "crash_dunn" ][ "dcburning_BHrescue_laststand" ] = %dcburning_BHrescue_soldier2_wounded;
addNotetrack_customFunction( "crash_dunn", "wounded",::notetrack_friendly_02_is_wounded, "dcburning_BHrescue_laststand" );
}
notetrack_friendly_macey_last_mag_dialogue( guy )
{
flag_set( "macey_last_mag_dialogue" );
wait( 2.2 );
flag_set( "macey_clip_to_player" );
}
notetrack_redshirt_dialogue( guy )
{
flag_set( "crash_redshirt_speaks" );
wait 1.0;
level.player playsound( "scn_dcemp_player_handed_gun" );
}
notetrack_redshirt_gives_gun( guy )
{
flag_set( "give_player_weapon" );
}
notetrack_redshirt_shot_in_head( guy )
{
flag_set( "redshirt_headshot" );
thread play_sound_in_space( "weap_deserteagle_fire_npc", guy.origin );
thread play_sound_in_space( "bullet_large_flesh", guy.origin );
playfxontag( getfx( "headshot3" ), guy, "TAG_EYE" );
}
notetrack_friendly_02_is_wounded( guy )
{
flag_set( "friendly_02_injured" );
thread play_sound_in_space( "weap_deserteagle_fire_npc", guy.origin );
thread play_sound_in_space( "bullet_large_flesh", guy.origin );
playfxontag( getfx( "headshot3" ), guy, "J_Shoulder_RI" );
//Cpl. Dunn (sequence of pain while being dragged to safety after having been shot)
//level.friendly02 thread dialogue_queue( "dcburn_cpd_pain" );
wait( 1 );
//Sgt. Foley Corporal, hang on!!!
level.teamleader thread dialogue_queue( "dcburn_mcy_hangon" );
crash_chatter_org_right = getent( "crash_chatter_org_right", "targetname" );
//Ranger 1 Loading!!
crash_chatter_org_right delaythread( 1,::play_sound_in_space, "dcburn_ar1_loading" );
wait( 2 );
//Sgt. Macey Defend this position!!
level.teamleader thread dialogue_queue( "dcburn_mcy_defendthispos" );
//wait( 1 );
//Overlord (HQ Radio) Dagger Two-One, this is Overlord, do you read me, over?
//radio_dialogue( "dcburn_hqr_doyoureadme" );
}
notetrack_player_upright( guy )
{
flag_set( "notetrack_player_upright" );
}
notetrack_player_raisehands( guy )
{
flag_set( "notetrack_player_raisehands" );
}
notetrack_player_lowerhands( guy )
{
flag_set( "notetrack_player_lowerhands" );
}
#using_animtree( "player" );
crash_player_anims()
{
//the animtree to use with the invisible model with animname "player_rig"
level.scr_animtree[ "player_rig" ] = #animtree;
//the invisible model with the animname "player_rig" that the anims will be played on
level.scr_model[ "player_rig" ] = "viewhands_player_us_army_bloody";
//animations that will be played by the player ( actually played by an invisible model the player is linked to )
level.scr_anim[ "player_rig" ][ "dcburning_BHrescue" ] = %dcburning_BHrescue_player_wakeup;
level.scr_anim[ "player_rig" ][ "dcburning_BHrescue_throwclip" ] = %dcburning_BHrescue_player_takeammo;
addNotetrack_customFunction( "player_rig", "upright",::notetrack_player_upright, "dcburning_BHrescue" );
addNotetrack_customFunction( "player_rig", "handsup",::notetrack_player_raisehands, "dcburning_BHrescue" );
addNotetrack_customFunction( "player_rig", "handsdown",::notetrack_player_lowerhands, "dcburning_BHrescue" );
}
#using_animtree( "vehicles" );
crash_bh_anims()
{
//blackhawk crash
level.scr_anim[ "crash_blackhawk" ][ "rotors_start" ] = %dcburning_BHrescue_BH;
level.scr_anim[ "crash_blackhawk" ][ "rotors" ][ 0 ] = %dcburning_BHrescue_BH;
level.scr_animtree[ "crash_blackhawk" ] = #animtree;
}
AI_delete_crashsite( excluders )
{
self endon( "death" );
if ( !isdefined( self ))
return;
if ( ( isdefined( excluders ) ) && ( excluders.size > 0 ) )
{
if ( is_in_array( excluders, self ) )
return;
}
if ( isdefined( self.magic_bullet_shield ) )
self stop_magic_bullet_shield();
if ( !isSentient ( self) )
{
// self notify( "death" );
// waittillframeend;
}
self delete();
}
vehicle_delete_all_crashsite( excluders )
{
vehicles_to_delete1 = level.vehicles[ "axis" ];
vehicles_to_delete2 = level.vehicles[ "allies" ];
vehicles_to_delete = array_merge( vehicles_to_delete1, vehicles_to_delete2 );
foreach( vehicle in vehicles_to_delete )
{
if ( !isdefined( vehicle ) )
continue;
if ( ( isdefined( excluders ) ) && ( excluders.size > 0 ) )
{
if ( is_in_array( excluders, vehicle ) )
continue;
}
vehicle maps\_vehicle::godoff();
vehicle vehicle_delete_crashsite();
}
}
vehicle_delete_crashsite()
{
if ( !isdefined( self ) )
return;
self endon ( "death" );
//cleanly delete riders even if magic_bullet_shielded
if ( ( isdefined( self.riders ) ) && ( self.riders.size ) )
array_thread( self.riders, ::AI_delete_crashsite );
//delete any attached turrets
if ( isdefined( self.mgturret ) )
{
foreach( turret in self.mgturret )
{
if ( isdefined( turret ) )
turret delete();
}
}
self delete();
}
drone_flood_start_crashsite( aSpawners, groupName )
{
level endon( "stop_drone_flood" + groupName );
while( true )
{
foreach( spawner in aSpawners )
{
spawner.script_noteworthy = "axis_crash_drone";
add_wait( ::_wait, randomfloatrange( 5, 6 ) );
spawner add_abort( ::waittill_msg, "death" );
add_func( ::dronespawn, spawner );
thread do_wait();
}
wait( randomfloatrange( 5, 6 ) );
}
}
spawn_trigger_dummy_crashsite( sDummyTargetname )
{
//triggers a spawner trig through convoluted means
//since I can't use a unique targetname or script_noteworthy
ent = getent( sDummyTargetname, "targetname" );
assert( isdefined( ent ) );
assert( isdefined( ent.script_linkTo ) );
trig = getent( ent.script_linkTo, "script_linkname" );
assert( isdefined( trig ) );
trig notify( "trigger", level.player );
}
AI_ignored_and_oblivious_crashsite()
{
self endon( "death" );
if ( !isdefined( self ) )
return;
if ( ( isdefined( self.code_classname ) ) && ( self.code_classname == "script_model" ) )
return;
self setFlashbangImmunity( true );
self.ignoreme = true;
self.ignoreall = true;
self.grenadeawareness = 0;
}