4368 lines
120 KiB
Plaintext
4368 lines
120 KiB
Plaintext
|
#include maps\_utility;
|
|||
|
#include common_scripts\utility;
|
|||
|
#include maps\_anim;
|
|||
|
#include maps\_vehicle;
|
|||
|
#include maps\_hud_util;
|
|||
|
#include maps\_casual_killer;
|
|||
|
|
|||
|
#include maps\dcemp_code;
|
|||
|
|
|||
|
CONST_DUNN_LINE_TIME = 1.65;
|
|||
|
CONST_FOLEY_LINE_TIME = .5;
|
|||
|
|
|||
|
main()
|
|||
|
{
|
|||
|
flags();
|
|||
|
|
|||
|
//STARTS
|
|||
|
default_start( ::start_intro );
|
|||
|
add_start( "intro", ::start_intro, "[intro] -> play end of dc burning", ::intro_main );
|
|||
|
add_start( "iss", ::start_iss, "[iss] -> see the emp up close and personal", ::iss_main );
|
|||
|
add_start( "emp", ::start_emp, "[emp] -> see the emp effects from the ground", ::emp_main );
|
|||
|
add_start( "street", ::start_street, "[street] -> find cover off the street", ::street_main );
|
|||
|
add_start( "corner", ::start_corner, "[corner] -> watch the plane crash", ::corner_main );
|
|||
|
add_start( "meetup", ::start_meetup, "[meetup] -> meetup with some allies", ::meetup_main );
|
|||
|
add_start( "lobby", ::start_lobby, "[lobby] -> sneak through the lobby", ::lobby_main );
|
|||
|
add_start( "office", ::start_office, "[office] -> fight through the office", ::office_main );
|
|||
|
add_start( "parking", ::start_parking, "[parking] -> traverse the parking deck", ::parking_main );
|
|||
|
add_start( "plaza", ::start_plaza, "[plaza] -> continue through the plaza", ::plaza_main );
|
|||
|
add_start( "tunnels", maps\dcemp_endpart::start_tunnels, "[tunnels] -> traverse the tunnels", maps\dcemp_endpart::tunnels_main );
|
|||
|
// add_start( "whitehouse2", maps\dcemp_endpart::start_whitehouse, "[whitehouse] -> fight through the whitehouse", maps\dcemp_endpart::whitehouse_main );
|
|||
|
// add_start( "flare", maps\dcemp_endpart::start_flare, "[flare] -> pop the flare", maps\dcemp_endpart::flare_main );
|
|||
|
|
|||
|
global_inits();
|
|||
|
thread dcemp_music();
|
|||
|
}
|
|||
|
|
|||
|
flags()
|
|||
|
{
|
|||
|
flag_init( "intro_fx" );
|
|||
|
flag_init( "iss_fx" );
|
|||
|
flag_init( "rain_fx" );
|
|||
|
flag_init( "rain_fx2" );
|
|||
|
flag_init( "end_fx" );
|
|||
|
|
|||
|
flag_init( "script2model_intro" );
|
|||
|
flag_init( "script2model_iss" );
|
|||
|
flag_init( "script2model_end" );
|
|||
|
|
|||
|
flag_init( "team_initialized" );
|
|||
|
flag_init( "spotlight_lightning" );
|
|||
|
|
|||
|
flag_init( "iss_player_first_controls" );
|
|||
|
flag_init( "iss_player_drive_controls" );
|
|||
|
flag_init( "iss_organize_ents" );
|
|||
|
flag_init( "iss_see_icbm" );
|
|||
|
flag_init( "iss_stop_sounds" );
|
|||
|
flag_init( "iss_space_nuke" );
|
|||
|
flag_init( "iss_destroy_first_wave" );
|
|||
|
flag_init( "iss_destroy_blast_wave" );
|
|||
|
flag_init( "iss_done" );
|
|||
|
flag_init( "iss_start_dialogue" );
|
|||
|
flag_init( "iss_start_breathing" );
|
|||
|
flag_init( "iss_copythat" );
|
|||
|
flag_init( "iss_anyword" );
|
|||
|
flag_init( "iss_nag_dialogue" );
|
|||
|
|
|||
|
flag_init( "emp_main" );
|
|||
|
flag_init( "emp_jet_crash" );
|
|||
|
flag_init( "emp_heli_crash" );
|
|||
|
flag_init( "emp_heli_crash_go" );
|
|||
|
|
|||
|
flag_init( "street_main" );
|
|||
|
flag_init( "do_player_crash_fx" );
|
|||
|
flag_init( "street_crash_cop" );
|
|||
|
flag_init( "street_crash_left" );
|
|||
|
flag_init( "street_guy_fall" );
|
|||
|
flag_init( "street_crash_hide" );
|
|||
|
flag_init( "street_crash_left2" );
|
|||
|
|
|||
|
flag_init( "street_crash_heli_first" );
|
|||
|
flag_init( "street_crash_btr_first" );
|
|||
|
flag_init( "street_crash_heli_hide" );
|
|||
|
flag_init( "street_crash_heli_done" );
|
|||
|
flag_init( "street_safe" );
|
|||
|
flag_init( "street_btr_death" );
|
|||
|
flag_init( "street_btr_scene_done" );
|
|||
|
|
|||
|
flag_init( "corner_start_crash_scene" );
|
|||
|
flag_init( "corner_engine_crash" );
|
|||
|
flag_init( "corner_engine_hit" );
|
|||
|
flag_init( "corner_main" );
|
|||
|
flag_init( "corner_look_outside" );
|
|||
|
flag_init( "corner_moveout" );
|
|||
|
flag_init( "corner_crash_scene_done" );
|
|||
|
|
|||
|
flag_init( "meetup_main" );
|
|||
|
flag_init( "meetup_moveout" );
|
|||
|
flag_init( "meetup_challenge_start" );
|
|||
|
flag_init( "meetup_challenge_done" );
|
|||
|
flag_init( "meetup_do_scripted_scene" );
|
|||
|
flag_init( "meetup_runner_safe" );
|
|||
|
flag_init( "meetup_runner_leave" );
|
|||
|
flag_init( "meetup_runner_sprint" );
|
|||
|
|
|||
|
flag_init( "lobby_main" );
|
|||
|
flag_init( "lobby_check" );
|
|||
|
flag_init( "lobby_clear" );
|
|||
|
flag_init( "lobby_door_ready" );
|
|||
|
flag_init( "lobby_robo_death" );
|
|||
|
flag_init( "lobby_door_kick" );
|
|||
|
|
|||
|
flag_init( "office_main" );
|
|||
|
flag_init( "office_done" );
|
|||
|
flag_init( "office_go_red" );
|
|||
|
flag_init( "office_enemies_wave3" );
|
|||
|
|
|||
|
flag_init( "parking_main" );
|
|||
|
flag_init( "parking_moveout" );
|
|||
|
flag_init( "parking_moveout2" );
|
|||
|
flag_init( "parking_moveout3" );
|
|||
|
flag_init( "parking_checking_body" );
|
|||
|
flag_init( "parking_btr_shot_at" );
|
|||
|
flag_init( "parking_open_fire" );
|
|||
|
|
|||
|
flag_init( "plaza_to_street" );
|
|||
|
flag_init( "plaza_show_enemies" );
|
|||
|
flag_init( "plaza_open_fire" );
|
|||
|
flag_init( "plaza_prepare_throw" );
|
|||
|
flag_init( "plaza_throw_react" );
|
|||
|
flag_init( "plaza_flare_thrown" );
|
|||
|
flag_init( "plaza_moveout_exit" );
|
|||
|
flag_init( "plaza_moveout_exit2" );
|
|||
|
|
|||
|
flag_init( "tunnels_main" );
|
|||
|
}
|
|||
|
|
|||
|
createfx_setup()
|
|||
|
{
|
|||
|
// this array will be filled with code commands that SP or MP may use but doesn't exist in the other.
|
|||
|
if ( !isdefined( level.func ) )
|
|||
|
level.func = [];
|
|||
|
level.func[ "create_triggerfx" ] = ::dcemp_create_triggerfx;
|
|||
|
|
|||
|
//ROBOT -> change fx groups here
|
|||
|
if( getdvar( "createfx" ) == "on" )
|
|||
|
{
|
|||
|
// flag_set( "intro_fx" );
|
|||
|
// flag_set( "iss_fx" );
|
|||
|
// robot_iss_stuff();
|
|||
|
|
|||
|
flag_set( "rain_fx" );
|
|||
|
flag_set( "end_fx" );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
robot_iss_stuff()
|
|||
|
{
|
|||
|
precachemodel( "ch_street_light_01_on" );
|
|||
|
precachemodel( "iss_prop_3" );
|
|||
|
precachemodel( "iss_prop_5" );
|
|||
|
precachemodel( "com_outdoor_switch" );
|
|||
|
precachemodel( "iss_prop_7" );
|
|||
|
precachemodel( "iss_grip_1" );
|
|||
|
precachemodel( "iss_prop_1" );
|
|||
|
precachemodel( "iss_grip_2" );
|
|||
|
precachemodel( "iss_prop_8" );
|
|||
|
precachemodel( "iss_sail_frame" );
|
|||
|
precachemodel( "iss_sail_center" );
|
|||
|
precachemodel( "iss_prop_6" );
|
|||
|
precachemodel( "iss_prop_9" );
|
|||
|
precachemodel( "bg_iss" );
|
|||
|
|
|||
|
delaythread( .5, ::script2model_iss );
|
|||
|
}
|
|||
|
|
|||
|
global_inits()
|
|||
|
{
|
|||
|
createfx_setup();
|
|||
|
|
|||
|
triggers = getEntArray( "trigger_multiple_dyn_photo_copier", "classname" );
|
|||
|
triggers = array_combine( triggers, getEntArray( "trigger_multiple_dyn_copier_no_light", "classname" ) );
|
|||
|
array_call( triggers, ::delete );
|
|||
|
|
|||
|
volumes = getentarray( "mask_ents", "targetname" );
|
|||
|
mask_destructibles_in_volumes( volumes );
|
|||
|
mask_interactives_in_volumes( volumes );
|
|||
|
|
|||
|
maps\dcemp_precache::main();
|
|||
|
maps\createart\dcemp_fog::main();
|
|||
|
maps\createfx\dcemp_fx::main();
|
|||
|
maps\dcemp_fx::main();
|
|||
|
maps\dc_crashsite::main();
|
|||
|
maps\_load::main();
|
|||
|
|
|||
|
level.EMPWAIT_BETA = 4.5;
|
|||
|
|
|||
|
thread maps\_mortar::bog_style_mortar();
|
|||
|
|
|||
|
maps\dcemp_anim::main();
|
|||
|
maps\_drone_ai::init();
|
|||
|
|
|||
|
level thread maps\dcemp_amb::main();
|
|||
|
|
|||
|
maps\_compass::setupMiniMap( "compass_map_dcemp" );
|
|||
|
|
|||
|
script2model_precache();
|
|||
|
level.bg_iss_darknum = 12;
|
|||
|
|
|||
|
for( i = 1; i <= level.bg_iss_darknum; i++ )
|
|||
|
{
|
|||
|
name = "bg_iss_dark0";
|
|||
|
if( i > 9 )
|
|||
|
name = "bg_iss_dark";
|
|||
|
precachemodel( name + i );
|
|||
|
}
|
|||
|
|
|||
|
//manually precaching models because of masking of destrucibles
|
|||
|
precacheModel( "prop_photocopier_destroyed" );
|
|||
|
precacheModel( "prop_photocopier_destroyed_top" );
|
|||
|
precacheModel( "prop_photocopier_destroyed_right_shelf" );
|
|||
|
precacheModel( "prop_photocopier_destroyed_left_feeder" );
|
|||
|
precacheModel( "com_tv2_d" );
|
|||
|
precacheModel( "com_newspaperbox_red_dam" );
|
|||
|
precacheModel( "com_newspaperbox_red_des" );
|
|||
|
precacheModel( "com_newspaperbox_red_door" );
|
|||
|
precacheModel( "com_newspaperbox_blue_dam" );
|
|||
|
precacheModel( "com_newspaperbox_blue_door" );
|
|||
|
precacheModel( "com_newspaperbox_blue_des" );
|
|||
|
precacheModel( "me_electricbox2_dest" );
|
|||
|
precacheModel( "me_electricbox2_door_upper" );
|
|||
|
precacheModel( "me_electricbox2_door" );
|
|||
|
precacheModel( "me_electricbox4_dest" );
|
|||
|
precacheModel( "me_electricbox4_door" );
|
|||
|
precacheModel( "com_filecabinetblackclosed_dam" );
|
|||
|
precacheModel( "com_filecabinetblackclosed_des" );
|
|||
|
precacheModel( "com_filecabinetblackclosed_drawer" );
|
|||
|
precacheModel( "me_lightfluohang_double_destroyed" );
|
|||
|
|
|||
|
precachemodel( "vehicle_mi-28_d_animated" );
|
|||
|
precachemodel( "projectile_us_smoke_grenade" );
|
|||
|
precacheModel( "tag_origin" );
|
|||
|
precacheModel( "vehicle_van_white_door_rb" );
|
|||
|
precacheModel( "bc_military_tire01" );
|
|||
|
precacheModel( "vehicle_van_white_hood" );
|
|||
|
precacheModel( "rubble_large_slab_02" );
|
|||
|
precacheModel( "727_seats_row_left" );
|
|||
|
precacheModel( "ch_street_light_01_off" );
|
|||
|
|
|||
|
precacherumble( "tank_rumble" );
|
|||
|
precacherumble( "damage_heavy" );
|
|||
|
precacherumble( "steady_rumble" );
|
|||
|
precacheshader( "hint_mantle" );
|
|||
|
precacheShader( "white" );
|
|||
|
precacheshellshock( "default" );
|
|||
|
precacheshellshock( "nosound" );
|
|||
|
|
|||
|
//precachemodel( "com_firehydrant" );
|
|||
|
precachemodel( "com_firehydrant_dest" );
|
|||
|
precachemodel( "com_firehydrant_dam" );
|
|||
|
precachemodel( "com_firehydrant_cap" );
|
|||
|
loadfx( "props/firehydrant_leak" );
|
|||
|
loadfx( "props/firehydrant_exp" );
|
|||
|
loadfx( "props/firehydrant_spray_10sec" );
|
|||
|
|
|||
|
level.default_goalheight = 128;
|
|||
|
|
|||
|
// whitehouse precaches
|
|||
|
precachemodel ( "rappelrope100_ri" );
|
|||
|
precachemodel ( "mil_emergency_flare" );
|
|||
|
PreCacheTurret( "heli_spotlight" );
|
|||
|
precachemodel( "cod3mg42" ); // should be a spotlight model but can't find one that works as a turret.
|
|||
|
PrecacheItem( "rpg_straight" );
|
|||
|
precachemodel( "com_door_01_handleleft2" );
|
|||
|
|
|||
|
precachestring( &"DCEMP_ISS_INTROSCREEN1" );
|
|||
|
precachestring( &"DCEMP_ISS_INTROSCREEN2" );
|
|||
|
precachestring( &"DCEMP_ISS_INTROSCREEN3" );
|
|||
|
|
|||
|
precachestring( &"DCEMP_OBJ_CRASH_SITE" );
|
|||
|
precachestring( &"DCEMP_OBJ_FIND_SHELTER" );
|
|||
|
precachestring( &"DCEMP_OBJ_FOLLOW_SGT_FOLEY" );
|
|||
|
precachestring( &"DCEMP_OBJ_WHISKEY_HOTEL" );
|
|||
|
|
|||
|
// maps\_slowmo_breach::slowmo_breach_init();
|
|||
|
|
|||
|
setup_sun();
|
|||
|
|
|||
|
//---------------> setup corner
|
|||
|
corner_hide_damage();
|
|||
|
|
|||
|
array_thread( getentarray( "flickerlight1", "script_noteworthy" ), ::flickerlight_flares );
|
|||
|
fire_lights = getentarray( "light_street_fire", "script_noteworthy" );
|
|||
|
light = getclosest( getstruct( "runner_light", "targetname" ).origin, fire_lights );
|
|||
|
light setlightintensity( 3.5 );
|
|||
|
array_thread( fire_lights, ::light_street_fire );
|
|||
|
|
|||
|
door = getent( "meetup_door_left", "targetname" );
|
|||
|
|
|||
|
door delaycall( .1, ::rotateyaw, 90, .1 );
|
|||
|
door delaycall( .2, ::disconnectpaths );
|
|||
|
|
|||
|
level.objnum = 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/************************************************************************************************************/
|
|||
|
/* INTRO */
|
|||
|
/************************************************************************************************************/
|
|||
|
intro_main()
|
|||
|
{
|
|||
|
flag_set( "player_crash_done" );
|
|||
|
|
|||
|
emp_ents = getentarray( "emp_show", "targetname" );
|
|||
|
array_thread( emp_ents, ::emp_entities );
|
|||
|
|
|||
|
thread intro_crash_vehicle_setup();
|
|||
|
thread intro_enemy_setup();
|
|||
|
maps\dc_crashsite::AA_crash_site_init();
|
|||
|
}
|
|||
|
|
|||
|
intro_crash_vehicle_setup()
|
|||
|
{
|
|||
|
if( level.start_point == "emp" )
|
|||
|
{
|
|||
|
getent( "heli_crash_site_spotlight_emp_start", "targetname" ) add_spawn_function( ::emp_heli_spotlight );
|
|||
|
getent( "btr80s_end_emp_start", "targetname" ) add_spawn_function( ::emp_btr );
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
getent( "heli_crash_site_spotlight", "targetname" ) add_spawn_function( ::emp_heli_spotlight );
|
|||
|
getent( "btr80s_end", "targetname" ) add_spawn_function( ::emp_btr );
|
|||
|
}
|
|||
|
|
|||
|
array_thread( getentarray( "helis_crash_rappel", "targetname" ), ::add_spawn_function, ::emp_heli_rappel );
|
|||
|
array_thread( getentarray( "helis_crash_distant", "targetname" ), ::add_spawn_function, ::emp_heli_distant );
|
|||
|
|
|||
|
flag_wait( "first_wave_done" );
|
|||
|
|
|||
|
wait 4;
|
|||
|
delaythread( 0, ::spawn_vehicles_from_targetname_and_drive, "helis_crash_distant" );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/************************************************************************************************************/
|
|||
|
/* INTRO */
|
|||
|
/************************************************************************************************************/
|
|||
|
iss_main()
|
|||
|
{
|
|||
|
flag_wait( "emp_entity_cleanup_done" );
|
|||
|
|
|||
|
thread maps\_utility::set_vision_set( "dcemp_iss", 0 );
|
|||
|
thread maps\_utility::vision_set_fog_changes( "dcemp_iss", 0 );
|
|||
|
|
|||
|
//thread maps\_ambient::ambientEventStart( "dcemp_iss" );
|
|||
|
level.player disableweapons();
|
|||
|
level.player freezecontrols( true );
|
|||
|
level.emp_player_angles = level.player getplayerangles();
|
|||
|
level.emp_player_stance = level.player getstance();
|
|||
|
level.player allowcrouch( false );
|
|||
|
level.player setstance( "stand" );
|
|||
|
|
|||
|
fx_intro_pause();
|
|||
|
flag_set( "iss_fx" );
|
|||
|
script2model_del_intro();
|
|||
|
thread script2model_iss();
|
|||
|
|
|||
|
add_wait( ::flag_wait, "script2model_iss" );
|
|||
|
add_func( ::iss_organize_ents );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
if ( !isdefined( level.white_overlay ) )
|
|||
|
level.white_overlay = create_client_overlay( "white", 1 );
|
|||
|
|
|||
|
flag_wait( "iss_organize_ents" );
|
|||
|
|
|||
|
//setsaveddvar( "cg_fovscale", .85 );
|
|||
|
//setsaveddvar( "sm_sunsampleSizeNear", 1.25 );
|
|||
|
setsaveddvar( "sm_sunsampleSizeNear", .6 );
|
|||
|
setsaveddvar( "sm_sunShadowCenter", (52400, -30050, -38000) );
|
|||
|
|
|||
|
|
|||
|
wait .5;
|
|||
|
|
|||
|
level.iss_sat = iss_satellite();
|
|||
|
|
|||
|
enableOuterSpaceModelLighting( level.iss_sat[ "camera" ].origin, (0.2, 0.2, 0.2) );
|
|||
|
|
|||
|
thread iss_temp_satelite_anim();
|
|||
|
thread iss_dialogue();
|
|||
|
thread iss_player_sounds();
|
|||
|
|
|||
|
wait .5;
|
|||
|
|
|||
|
time = 1;
|
|||
|
|
|||
|
thread maps\_ambient::blend_to_eq_track( level.eq_main_track , time );
|
|||
|
delaythread( time, maps\_ambient::deactivate_index, level.eq_mix_track );
|
|||
|
delaythread( time, maps\_utility::set_ambient, "dcemp_iss" );
|
|||
|
|
|||
|
flag_set( "dc_emp_missile" );
|
|||
|
level.white_overlay fadeOverTime( 4 );
|
|||
|
level.white_overlay.alpha = 0;
|
|||
|
|
|||
|
flag_wait( "iss_start_dialogue" );
|
|||
|
|
|||
|
wait 13;
|
|||
|
|
|||
|
flag_set( "iss_see_icbm" );
|
|||
|
|
|||
|
iss_nuke_scene();
|
|||
|
|
|||
|
wait 3.35;
|
|||
|
|
|||
|
flag_set( "iss_stop_sounds" );
|
|||
|
|
|||
|
stopallRumbles();
|
|||
|
level.rumble delaycall( .5, ::delete );
|
|||
|
level.white_overlay.alpha = 1;
|
|||
|
|
|||
|
time = .1;
|
|||
|
level.player SetEqLerp( 1, level.eq_main_track );
|
|||
|
AmbientStop( time );
|
|||
|
thread maps\_ambient::use_eq_settings( "fadeall_but_music", level.eq_mix_track );
|
|||
|
thread maps\_ambient::blend_to_eq_track( level.eq_mix_track , time );
|
|||
|
|
|||
|
level.nuke_water_tag delete();
|
|||
|
|
|||
|
disableOuterSpaceModelLighting();
|
|||
|
|
|||
|
flag_set( "iss_done" );
|
|||
|
}
|
|||
|
|
|||
|
iss_wait_player_see_icbm( timeout )
|
|||
|
{
|
|||
|
self endon( "iss_wait_player_see_icbm" );
|
|||
|
level.iss_missile endon( "death" );
|
|||
|
|
|||
|
if( isdefined( timeout ) )
|
|||
|
self thread notify_delay( "iss_wait_player_see_icbm", timeout );
|
|||
|
|
|||
|
while( !( self WorldPointInReticle_Circle( level.iss_missile.origin, getdvarint( "cg_fov" ), 200 ) ) )
|
|||
|
wait .1;
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
iss_nag_dialogue()
|
|||
|
{
|
|||
|
level endon( "iss_nag_dialogue" );
|
|||
|
|
|||
|
while( 1 )
|
|||
|
{
|
|||
|
if( !isdefined( level.player iss_wait_player_see_icbm( .5 ) ) )
|
|||
|
//Sat1, rotate your view a little further to the right will ya?
|
|||
|
thread radio_dialogue( "dcemp_iss_rotateview" );
|
|||
|
|
|||
|
if( isdefined( level.player iss_wait_player_see_icbm( 13 ) ) )
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
iss_dialogue()
|
|||
|
{
|
|||
|
flag_wait( "iss_start_dialogue" );
|
|||
|
//Come in Sat1, this is ISS Control. Houston's requesting a feed from your helmet cam, over.
|
|||
|
radio_dialogue( "dcemp_iss_requestfeed" );
|
|||
|
|
|||
|
wait 1;
|
|||
|
//Uh, they want you to look over towards the dark side of the earth. It should be cresting the horizon about 15 degrees east of the starboard PV arrays.
|
|||
|
radio_dialogue( "dcemp_iss_theywantyou" );
|
|||
|
|
|||
|
flag_wait( "iss_see_icbm" );
|
|||
|
wait 1.5;
|
|||
|
|
|||
|
thread flag_set_delayed( "iss_nag_dialogue", 30 );
|
|||
|
iss_nag_dialogue();
|
|||
|
flag_set( "iss_nag_dialogue" );
|
|||
|
|
|||
|
wait .5;
|
|||
|
|
|||
|
radio_dialogue_stop();
|
|||
|
|
|||
|
wait .5;
|
|||
|
//There it is, we're getting your feed Sat1. Come in Houston, are you getting this?
|
|||
|
radio_dialogue( "dcemp_iss_thereitis" );
|
|||
|
|
|||
|
flag_wait( "iss_copythat" );
|
|||
|
//Copy that ISS, video feed from Sat1 is clear.
|
|||
|
radio_dialogue( "dcemp_hsc_copythat" );
|
|||
|
wait 1;
|
|||
|
//Sat1, keep tracking the bogey. We're looking into it, standby.
|
|||
|
radio_dialogue( "dcemp_hsc_keeptracking" );
|
|||
|
|
|||
|
wait 1.5;
|
|||
|
|
|||
|
//Houston, we're not scheduled for any satellite launches today are we?
|
|||
|
radio_dialogue( "dcemp_iss_notscheduled" );
|
|||
|
wait 2.5;
|
|||
|
|
|||
|
//ISS, Houston. Standby. We may have a problem here.
|
|||
|
thread radio_dialogue( "dcemp_hsc_standby" );
|
|||
|
|
|||
|
flag_wait( "iss_anyword" );
|
|||
|
//Houston, this is ISS Control, uh... any word on the-
|
|||
|
thread radio_dialogue( "dcemp_iss_anyword" );
|
|||
|
|
|||
|
// flag_wait( "iss_space_nuke" );
|
|||
|
// wait .5;
|
|||
|
// radio_dialogue_stop();
|
|||
|
}
|
|||
|
|
|||
|
iss_nuke_scene()
|
|||
|
{
|
|||
|
missile = spawn_vehicle_from_targetname( "iss_icbm_vehicle" );
|
|||
|
playfxontag( level._effect[ "dcemp_icbm_trail" ], missile, "TAG_ORIGIN" );
|
|||
|
missile startpath();
|
|||
|
missile vehicle_setspeedimmediate( 55, 100 );
|
|||
|
|
|||
|
level.iss_missile = missile;
|
|||
|
wait 1.5;
|
|||
|
|
|||
|
missile vehicle_setspeedimmediate( 0, 100 );
|
|||
|
|
|||
|
flag_wait( "iss_nag_dialogue" );
|
|||
|
thread flag_set_delayed( "iss_copythat", 8 );
|
|||
|
thread flag_set_delayed( "iss_anyword", 33.4 );
|
|||
|
|
|||
|
missile vehicle_setspeedimmediate( 55, 100 );
|
|||
|
|
|||
|
missile waittill( "reached_end_node" );
|
|||
|
exploder ( "space_nuke" );
|
|||
|
missile delete();
|
|||
|
|
|||
|
flag_set( "iss_space_nuke" );
|
|||
|
flag_set( "dc_emp_missile_hit" );
|
|||
|
|
|||
|
thread maps\_utility::set_vision_set( "dcemp_iss_death", .5 );
|
|||
|
|
|||
|
earth = getent( "earth_model", "targetname" );
|
|||
|
level.nuke_water_tag = spawn( "script_model", earth.origin + (5000,56500,700 + 300 ) );
|
|||
|
level.nuke_water_tag.angles = (-90,-90,0);
|
|||
|
level.nuke_water_tag setmodel( "tag_origin" );
|
|||
|
playfxontag( level._effect[ "dcemp_water_nuke_glow" ], level.nuke_water_tag, "TAG_ORIGIN" );
|
|||
|
|
|||
|
thread iss_lights_out();
|
|||
|
thread iss_player_sounds_old();
|
|||
|
|
|||
|
wait .5;
|
|||
|
|
|||
|
thread maps\_utility::set_vision_set( "dcemp_iss", 3.5 );
|
|||
|
|
|||
|
wait 3.5;
|
|||
|
|
|||
|
iss_destroy_iss();
|
|||
|
|
|||
|
flag_wait( "iss_destroy_first_wave" );
|
|||
|
exploder ( "iss_explodes" );
|
|||
|
|
|||
|
wait .35;
|
|||
|
|
|||
|
earthquake( .15, 3, level.player.origin, 512 );
|
|||
|
|
|||
|
flag_wait( "iss_destroy_blast_wave" );
|
|||
|
wait .35;
|
|||
|
|
|||
|
level.rumble = spawn( "script_origin", level.player.origin );
|
|||
|
level.rumble PlayRumbleLoopOnEntity( "steady_rumble" );
|
|||
|
level.rumble linkto( level.player );
|
|||
|
|
|||
|
level.white_overlay fadeOverTime( 4 );
|
|||
|
level.white_overlay.alpha = .15;
|
|||
|
thread iss_kill_player();
|
|||
|
thread iss_player_quake();
|
|||
|
|
|||
|
SetBlur( 5, 0 );
|
|||
|
wait .1;
|
|||
|
setblur( 1.0, 3 );
|
|||
|
|
|||
|
wait .5;
|
|||
|
thread iss_destroy_sat();
|
|||
|
exploder ( "sat_destroy" );
|
|||
|
}
|
|||
|
|
|||
|
iss_temp_satelite_anim()
|
|||
|
{
|
|||
|
angle = 45;
|
|||
|
dist = -2000;
|
|||
|
time = 80;
|
|||
|
|
|||
|
node = level.iss_sat[ "node" ];
|
|||
|
node2 = level.iss_sat[ "camera" ].node;
|
|||
|
|
|||
|
node.angles += ( 0,angle,0 );
|
|||
|
node.origin += ( dist,0, 0 );
|
|||
|
node2.angles += ( 0,angle,0 );
|
|||
|
node2.origin += ( dist,0, 0 );
|
|||
|
|
|||
|
node rotateyaw( angle * -1, time );
|
|||
|
node movex( dist * -1, time );
|
|||
|
node2 rotateyaw( angle * -1, time );
|
|||
|
node2 movex( dist * -1, time );
|
|||
|
|
|||
|
level.player lerpViewAngleClamp( .1, .1, 0, 20, 20, 20, 20 );
|
|||
|
|
|||
|
node thread anim_single_solo( level.iss_sat[ "model" ], "ISS_animation" );
|
|||
|
node2 thread anim_single_solo( level.iss_sat[ "camera" ], "ISS_animation" );
|
|||
|
level.iss_sat[ "camera" ] setanim( level.iss_sat[ "camera" ] getanim( "ISS_animation" ), 1, 0, 0 );
|
|||
|
|
|||
|
wait 3.5;
|
|||
|
|
|||
|
level.player freezecontrols( false );
|
|||
|
level.player lerpViewAngleClamp( 1.5, 0, 0, 45, 55, 15, 40 );
|
|||
|
|
|||
|
wait 1.0;
|
|||
|
|
|||
|
thread flag_set_delayed( "iss_start_dialogue", 2.5 );
|
|||
|
thread flag_set_delayed( "iss_start_breathing", .5 );
|
|||
|
|
|||
|
node2 anim_single_solo( level.iss_sat[ "camera" ], "ISS_animation" );
|
|||
|
|
|||
|
time = 15;
|
|||
|
|
|||
|
level.player lerpViewAngleClamp( time, time*.5, time*.5, 40, 45, 13, 30 );
|
|||
|
|
|||
|
thread iss_preload_lights();
|
|||
|
|
|||
|
flag_wait( "iss_space_nuke" );
|
|||
|
|
|||
|
level.player lerpViewAngleClamp( 7, 4, 0, 10, 10, 10, 10 );
|
|||
|
wait 6;
|
|||
|
|
|||
|
node2 notify( "stop_loop" );
|
|||
|
level.iss_sat[ "camera" ].node = spawn( "script_origin", level.iss_sat[ "camera" ].origin );
|
|||
|
level.iss_sat[ "camera" ].node.angles = level.iss_sat[ "camera" ].angles;
|
|||
|
level.iss_sat[ "camera" ].node linkto( node );
|
|||
|
level.iss_sat[ "camera" ] linkto( level.iss_sat[ "camera" ].node );
|
|||
|
level.iss_sat[ "camera" ].node thread anim_single_solo( level.iss_sat[ "camera" ], "ISS_float_away" );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
iss_player_sounds_old()
|
|||
|
{
|
|||
|
level.player delaythread( .5, ::play_sound_on_entity, "breathing_heartbeat" );
|
|||
|
level.player delaythread( 3, ::play_sound_on_entity, "breathing_heartbeat" );
|
|||
|
|
|||
|
|
|||
|
flag_wait( "iss_destroy_first_wave" );
|
|||
|
|
|||
|
level.player delaythread( 0, ::play_sound_on_entity, "breathing_heartbeat" );
|
|||
|
level.player delaythread( .5, ::play_sound_on_entity, "breathing_heartbeat" );
|
|||
|
level.player delaythread( 1, ::play_sound_on_entity, "breathing_heartbeat" );
|
|||
|
level.player delaythread( 1.5, ::play_sound_on_entity, "breathing_heartbeat" );
|
|||
|
level.player delaythread( 2, ::play_sound_on_entity, "breathing_heartbeat" );
|
|||
|
|
|||
|
flag_wait( "iss_destroy_blast_wave" );
|
|||
|
|
|||
|
wait .35;
|
|||
|
level.player delaythread( 0, ::play_sound_on_entity, "breathing_heartbeat" );
|
|||
|
level.player delaythread( 1, ::play_sound_on_entity, "breathing_heartbeat" );
|
|||
|
level.player delaythread( 2, ::play_sound_on_entity, "breathing_heartbeat" );
|
|||
|
}
|
|||
|
|
|||
|
iss_player_sounds()
|
|||
|
{
|
|||
|
flag_wait( "iss_start_breathing" );
|
|||
|
thread iss_player_sounds_loop();
|
|||
|
|
|||
|
flag_wait( "iss_nag_dialogue" );
|
|||
|
|
|||
|
//level.player play_sound_on_entity( "scn_dcemp_iss_helmet_breathe_fast" );
|
|||
|
}
|
|||
|
|
|||
|
iss_player_sounds_loop()
|
|||
|
{
|
|||
|
//while( !flag( "iss_nag_dialogue" ) )
|
|||
|
while( !flag( "iss_space_nuke" ) )
|
|||
|
{
|
|||
|
level.player play_sound_on_entity( "scn_dcemp_iss_helmet_breathe_slow" );
|
|||
|
|
|||
|
wait 2;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/************************************************************************************************************/
|
|||
|
/* EMP */
|
|||
|
/************************************************************************************************************/
|
|||
|
emp_main()
|
|||
|
{
|
|||
|
flag_wait( "iss_done" );
|
|||
|
|
|||
|
//level.player shellshock( "nosound", 2 );
|
|||
|
|
|||
|
script2model_del_iss();
|
|||
|
fx_iss_pause();
|
|||
|
fx_intro_restart();
|
|||
|
script2model_intro();
|
|||
|
|
|||
|
array_thread( getentarray( "street_crash_car", "script_noteworthy" ), ::street_crash_cars );
|
|||
|
array_thread( getentarray( "street_cars_bounce", "targetname" ), ::street_cars_bounce );
|
|||
|
|
|||
|
emp_ents = getentarray( "emp_delete", "targetname" );
|
|||
|
emp_ents = array_combine( emp_ents, getentarray( "emp_swap", "targetname" ) );
|
|||
|
emp_ents = array_combine( emp_ents, getentarray( "emp_light", "targetname" ) );
|
|||
|
array_thread( emp_ents, ::emp_entities );
|
|||
|
|
|||
|
wait 2;
|
|||
|
|
|||
|
exploder( "emp_flash" );
|
|||
|
|
|||
|
thread emp_empaftermath();
|
|||
|
thread emp_allies_animate();
|
|||
|
thread emp_player_fx();
|
|||
|
thread emp_jet_crash();
|
|||
|
thread emp_heli_crash();
|
|||
|
thread emp_dialogue();
|
|||
|
|
|||
|
add_wait( ::flag_wait, "emp_jet_crash" );
|
|||
|
add_func( ::flag_set_delayed, "street_main", 3.25 );
|
|||
|
thread do_wait();
|
|||
|
}
|
|||
|
|
|||
|
emp_empaftermath()
|
|||
|
{
|
|||
|
level.player freezecontrols( true );
|
|||
|
|
|||
|
//setsaveddvar( "cg_fovscale", 1 );
|
|||
|
setsaveddvar( "sm_sunsampleSizeNear", 0.25 );
|
|||
|
setsaveddvar( "sm_sunShadowCenter", (0,0,0) );
|
|||
|
|
|||
|
setblur( 0, 0 );
|
|||
|
level.player PlayersetGroundReferenceEnt( undefined );
|
|||
|
|
|||
|
|
|||
|
thread vision_set_intro( 0 );
|
|||
|
|
|||
|
level.player PlayerLinkToDelta( level.player.playerrig, "tag_player", 1, 60, 60, 40, 20, true );
|
|||
|
|
|||
|
level.player enableweapons();
|
|||
|
|
|||
|
level.player setempjammed( true );
|
|||
|
maps\_compass::setupMiniMap( "compass_map_dcemp_static" );
|
|||
|
|
|||
|
wait( .35 );
|
|||
|
|
|||
|
level.player PlayerLinkToDelta( level.player.playerrig, "tag_player", 1, 60, 60, 40, 20, true );
|
|||
|
level.player lerpViewAngleClamp( .1, .1, 0, 60, 60, 40, 20 );
|
|||
|
level.player PlayersetGroundReferenceEnt( undefined );
|
|||
|
|
|||
|
if( isdefined( level.emp_player_angles ) )
|
|||
|
{
|
|||
|
level.player SetPlayerAngles( level.emp_player_angles );
|
|||
|
//level.player.playerrig.angles = level.player.angles;
|
|||
|
}
|
|||
|
else
|
|||
|
level.player SetPlayerAngles( level.player.playerrig.angles );
|
|||
|
|
|||
|
level.player freezecontrols( false );
|
|||
|
level.player allowcrouch( true );
|
|||
|
|
|||
|
if( isdefined( level.emp_player_stance ) )
|
|||
|
level.player setstance( level.emp_player_stance );
|
|||
|
|
|||
|
time = 1.5;
|
|||
|
thread maps\_ambient::blend_to_eq_track( level.eq_main_track , time );
|
|||
|
delaythread( time, maps\_ambient::deactivate_index, level.eq_mix_track );
|
|||
|
delaythread( time, maps\_utility::set_ambient, "dcemp_dry" );
|
|||
|
|
|||
|
if ( getdvarint( "r_dcburning_culldist" ) == 1 )
|
|||
|
{
|
|||
|
setculldist( 23000 );
|
|||
|
}
|
|||
|
|
|||
|
//fade back
|
|||
|
flag_set( "emp_back_from_whiteout" );
|
|||
|
level.white_overlay fadeOverTime( 4 );
|
|||
|
level.white_overlay.alpha = 0;
|
|||
|
}
|
|||
|
|
|||
|
emp_dialogue()
|
|||
|
{
|
|||
|
flag_wait( "emp_heli_crash" );
|
|||
|
// wait 0;
|
|||
|
// level.dunn thread dialogue_queue( "dcemp_cpd_whoa" );
|
|||
|
|
|||
|
flag_wait( "emp_jet_crash" );
|
|||
|
wait 2.5;
|
|||
|
//What the hell's goin' on?
|
|||
|
level.dunn dialogue_queue( "dcemp_cpd_whatsgoinon" );
|
|||
|
}
|
|||
|
|
|||
|
emp_player_fx()
|
|||
|
{
|
|||
|
flag_wait( "iss_done" );
|
|||
|
|
|||
|
thread vision_set_emp();
|
|||
|
|
|||
|
thread play_sound_in_space( "scn_dcemp_emp_main", level.player.origin + (0,0,100) );
|
|||
|
}
|
|||
|
|
|||
|
emp_allies_animate()
|
|||
|
{
|
|||
|
flag_wait( "emp_entity_cleanup_done" );
|
|||
|
|
|||
|
thread battlechatter_off();
|
|||
|
|
|||
|
start_common_dcemp();
|
|||
|
|
|||
|
array_thread( level.team, ::set_ignoreme, true );
|
|||
|
array_thread( level.team, ::set_ignoreall, true );
|
|||
|
array_thread( level.team, ::disable_arrivals );
|
|||
|
array_thread( level.team, ::pathrandompercent_zero );
|
|||
|
array_thread( level.team, ::set_pushplayer, true );
|
|||
|
array_thread( level.team, ::disable_pain );
|
|||
|
|
|||
|
level.foley thread emp_foley();
|
|||
|
level.dunn thread emp_dunn();
|
|||
|
level.team[ "marine1" ] thread emp_marine1();
|
|||
|
}
|
|||
|
|
|||
|
emp_foley()
|
|||
|
{
|
|||
|
link = getstruct( self.target, "targetname" );
|
|||
|
node = getnode( link.target, "targetname" );
|
|||
|
self.goalradius = 16;
|
|||
|
self setgoalnode( node );
|
|||
|
|
|||
|
link.origin = node.origin;
|
|||
|
link.angles = node.angles + (0,-90,0);
|
|||
|
link anim_generic( self, "DCemp_react_guyA_react" );
|
|||
|
|
|||
|
self anim_generic( self, "corner_standR_alert_2_look" );
|
|||
|
self thread anim_generic_loop( self, "corner_standR_look_idle" );
|
|||
|
|
|||
|
flag_wait( "emp_heli_crash_go" );
|
|||
|
wait 2.25;
|
|||
|
self notify( "stop_loop" );
|
|||
|
self thread anim_generic( self, "corner_standR_look_2_alert_fast" );
|
|||
|
|
|||
|
flag_wait( "emp_heli_crash" );
|
|||
|
self notify( "stop_loop" );
|
|||
|
self anim_generic( self, "corner_standR_painC" );
|
|||
|
|
|||
|
flag_wait( "emp_jet_crash" );
|
|||
|
|
|||
|
self playsound( "generic_pain_american_" + randomintrange( 1,9 ) );
|
|||
|
self anim_generic( self, "corner_standR_flinchB" );
|
|||
|
|
|||
|
self anim_generic( self, "corner_standR_alert_2_look" );
|
|||
|
self thread anim_generic_loop( self, "corner_standR_look_idle" );
|
|||
|
}
|
|||
|
|
|||
|
emp_dunn()
|
|||
|
{
|
|||
|
node = getstruct( self.target, "targetname" );
|
|||
|
link = getstruct( node.target, "targetname" );
|
|||
|
node = getnode( link.target, "targetname" );
|
|||
|
self.goalradius = 16;
|
|||
|
self setgoalnode( node );
|
|||
|
|
|||
|
link.origin = node.origin;
|
|||
|
link.angles = node.angles + (0,-90,0);
|
|||
|
link anim_generic( self, "DCemp_react_guyB_react" );
|
|||
|
|
|||
|
self anim_generic( self, "CornerCrR_alert_2_look" );
|
|||
|
self thread anim_generic_loop( self, "CornerCrR_look_idle" );
|
|||
|
|
|||
|
flag_wait( "emp_heli_crash" );
|
|||
|
|
|||
|
self notify( "stop_loop" );
|
|||
|
self playsound( "generic_pain_american_" + randomintrange( 1,9 ) );
|
|||
|
self thread anim_generic_gravity( self, "bog_b_spotter_react" );
|
|||
|
length = getanimlength( getanim_generic( "bog_b_spotter_react" ) );
|
|||
|
self delaythread( length * .93, ::anim_stopanimscripted );
|
|||
|
}
|
|||
|
|
|||
|
emp_marine1()
|
|||
|
{
|
|||
|
node = getstruct( "intro_heli_free_start", "targetname" );
|
|||
|
self teleport_actor( node );
|
|||
|
self setgoalpos( node.origin );
|
|||
|
self.goalradius = 8;
|
|||
|
|
|||
|
self disable_arrivals();
|
|||
|
self disable_exits();
|
|||
|
self walkdist_zero();
|
|||
|
self pathrandompercent_zero();
|
|||
|
|
|||
|
wait 2.5;
|
|||
|
wait level.EMPWAIT_BETA;
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node anim_generic_reach( self, "dcemp_BHrescue_soldier" );
|
|||
|
delaythread( 5.5, ::emp_free_player );
|
|||
|
actors = array_add( level.planks, self );
|
|||
|
node thread anim_single( actors, "dcemp_BHrescue" );
|
|||
|
|
|||
|
self delaycall( 3.65, ::playsound, "scn_dcemp_chopper_debris_lift" );
|
|||
|
self delaycall( 4.5, ::playsound, "scn_dcemp_chopper_debris_drop" );
|
|||
|
|
|||
|
length = getanimlength( getanim_generic( "dcemp_BHrescue_soldier" ) );
|
|||
|
wait length - .6;
|
|||
|
|
|||
|
self anim_stopanimscripted();
|
|||
|
node = spawn( "script_origin", self.origin );
|
|||
|
node.angles = self.angles + (0,-7,0);
|
|||
|
node anim_generic_gravity_run( self, "corner_standR_trans_IN_3" );
|
|||
|
node delete();
|
|||
|
|
|||
|
node = getnode( self.target, "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self.goalradius = 16;
|
|||
|
|
|||
|
self enable_arrivals();
|
|||
|
self enable_exits();
|
|||
|
self setgoalnode( node );
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self disable_arrivals();
|
|||
|
self disable_exits();
|
|||
|
}
|
|||
|
|
|||
|
emp_free_player()
|
|||
|
{
|
|||
|
crash_site_clip = getent( "crash_site_clip", "targetname" );
|
|||
|
crash_site_clip delete();
|
|||
|
|
|||
|
level notify( "player_unlinked" );
|
|||
|
|
|||
|
wait .25;
|
|||
|
|
|||
|
rig = level.player.playerrig;
|
|||
|
|
|||
|
end = getent( "movement_grid_exit", "targetname" );
|
|||
|
|
|||
|
time = 1;
|
|||
|
rig moveto( end.origin, time, time * .5, time * .5 );
|
|||
|
rig waittill( "movedone" );
|
|||
|
|
|||
|
level.player unlink();
|
|||
|
level.player allowstand( true );
|
|||
|
level.player allowcrouch( true );
|
|||
|
level.player allowprone( false );
|
|||
|
level.player allowsprint( true );
|
|||
|
level.player allowjump( true );
|
|||
|
|
|||
|
heli_clip = getent( "intro_heli_after_emp_clip", "targetname" );
|
|||
|
heli_clip solid();
|
|||
|
|
|||
|
setsaveddvar( "ui_hidemap", 0 );
|
|||
|
SetSavedDvar( "hud_showStance", "1" );
|
|||
|
SetSavedDvar( "compass", "1" );
|
|||
|
}
|
|||
|
|
|||
|
/************************************************************************************************************/
|
|||
|
/* STREET */
|
|||
|
/************************************************************************************************************/
|
|||
|
street_main()
|
|||
|
{
|
|||
|
flag_wait( "street_main" );
|
|||
|
flag_clear( "allow_ammo_pickups" );
|
|||
|
flag_set( "street_crash_heli_first" );
|
|||
|
|
|||
|
thread autosave_now();
|
|||
|
|
|||
|
SetSavedDvar( "ai_friendlyFireBlockDuration", "0" );
|
|||
|
delaythread( 3, ::vision_set_sunset );
|
|||
|
delaythread( 1, ::activate_trigger, "meetup_allies", "target" );
|
|||
|
|
|||
|
//introduction
|
|||
|
array_thread( level.team, ::set_ignoreme, true );
|
|||
|
array_thread( level.team, ::set_ignoreall, true );
|
|||
|
array_thread( level.team, ::disable_arrivals );
|
|||
|
array_thread( level.team, ::disable_exits );
|
|||
|
array_thread( level.team, ::pathrandompercent_zero );
|
|||
|
array_thread( level.team, ::set_pushplayer, true );
|
|||
|
array_thread( level.team, ::disable_pain );
|
|||
|
array_thread( level.team, ::walkdist_zero );
|
|||
|
array_thread( level.team, ::ent_flag_init, "street_hide" );
|
|||
|
|
|||
|
level.player blend_movespeedscale( .8 );
|
|||
|
|
|||
|
flag_set( "dc_emp_afternath" );
|
|||
|
|
|||
|
//start the fallin shit
|
|||
|
newtime = CONST_DUNN_LINE_TIME + CONST_FOLEY_LINE_TIME + 1;
|
|||
|
thread flag_set_delayed( "street_crash_btr_first", 2.5 + newtime );
|
|||
|
delaythread( 2.5 + newtime, ::street_heli_player_kill );
|
|||
|
level.fallguy delaythread( 10 + newtime, ::spawn_ai );
|
|||
|
|
|||
|
//What the hell's goin' on?
|
|||
|
//level.dunn thread dialogue_queue( "dcemp_cpd_whatsgoinon" );
|
|||
|
wait CONST_DUNN_LINE_TIME;
|
|||
|
level.foley notify( "stop_loop" );
|
|||
|
level.foley thread anim_generic( level.foley, "corner_standR_look_2_alert" );
|
|||
|
//Seek shelter!!! Get off the street now!!!
|
|||
|
level.foley thread dialogue_queue( "dcemp_fly_seekshelter" );
|
|||
|
//flag_set( "dc_emp_afternath" );
|
|||
|
|
|||
|
objective_add( level.objnum, "active", &"DCEMP_OBJ_CRASH_SITE" );
|
|||
|
objective_state( level.objnum, "done" );
|
|||
|
level.objnum++;
|
|||
|
objective_add( level.objnum, "active", &"DCEMP_OBJ_FIND_SHELTER" );
|
|||
|
objective_onentity( level.objnum, level.dunn, ( 0,0,70 ) );
|
|||
|
objective_current( level.objnum );
|
|||
|
|
|||
|
level.team[ "dunn" ] thread street_gohide_dunn();
|
|||
|
wait 1.0;
|
|||
|
level.team[ "foley" ] thread street_gohide_foley();
|
|||
|
wait .5;
|
|||
|
level.team[ "marine1" ] thread street_gohide_marine1();
|
|||
|
|
|||
|
thread street_hide_moment();
|
|||
|
|
|||
|
flag_wait( "street_safe" );
|
|||
|
flag_set( "corner_main" );
|
|||
|
}
|
|||
|
|
|||
|
street_gohide_marine1()
|
|||
|
{
|
|||
|
node = getent( "street_marine2_anim0a", "targetname" );
|
|||
|
|
|||
|
self enable_heat_behavior();
|
|||
|
|
|||
|
temp = spawnstruct();
|
|||
|
temp.origin = self.origin;
|
|||
|
temp.angles = self.angles + (0,-12,0);
|
|||
|
temp thread anim_generic_gravity( self, "corner_standR_trans_OUT_6" );
|
|||
|
|
|||
|
wait .5;
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
self linkto( node );
|
|||
|
node delaycall( .25, ::movez, 8, .5 );
|
|||
|
node thread anim_generic( self, "gulag_sewer_slide" );
|
|||
|
length = getanimlength( getanim_generic( "gulag_sewer_slide" ) );
|
|||
|
wait length * .28;
|
|||
|
self unlink();
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
temp.origin = self.origin;
|
|||
|
temp.angles = (0,80,0);
|
|||
|
temp anim_generic_gravity_run( self, "stand_2_run_F_2" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "run_turn_R45" );
|
|||
|
node anim_generic_run( self, "run_turn_R45" );
|
|||
|
|
|||
|
self thread anim_generic_gravity( self, "run_react_stumble_non_loop" );
|
|||
|
self playsound( "generic_pain_american_" + randomintrange( 1,9 ) );
|
|||
|
flag_wait( "street_btr_death" );
|
|||
|
|
|||
|
self thread anim_generic( self, "bog_b_spotter_react" );
|
|||
|
self playsound( "generic_pain_american_" + randomintrange( 1,9 ) );
|
|||
|
wait .05;
|
|||
|
|
|||
|
self setanimtime( getanim_generic( "bog_b_spotter_react" ), .1 );
|
|||
|
length = getanimlength( getanim_generic( "bog_b_spotter_react" ) );
|
|||
|
wait length * .72 - .05;
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
//What the hell is goin' on!!!
|
|||
|
self delaythread( .5, ::dialogue_queue, "dcemp_ar1_whatsgoinon" );
|
|||
|
|
|||
|
link = spawn( "script_origin", self.origin );
|
|||
|
link.angles = self.angles;
|
|||
|
self linkto( link );
|
|||
|
link delaycall( .25, ::rotateyaw, 25, .5 );
|
|||
|
link anim_generic_run( self, "crouch_2run_F" );
|
|||
|
self unlink();
|
|||
|
link delete();
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "run_turn_R45" );
|
|||
|
node anim_generic_run( self, "run_turn_R45" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "run_react_flinch_non_loop" );
|
|||
|
node anim_generic_run( self, "run_react_flinch_non_loop" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "traverse_window_M_2_dive" );
|
|||
|
link = spawn( "script_origin", node.origin );
|
|||
|
link.angles = node.angles;
|
|||
|
self linkto( link );
|
|||
|
link delaycall( .25, ::movez, 8, 1 );
|
|||
|
link delaycall( 1.5, ::movez, 8, 1.5 );
|
|||
|
|
|||
|
link thread anim_generic( self, "traverse_window_M_2_dive" );
|
|||
|
self playsound( "generic_meleecharge_american_" + randomintrange( 1,9 ) );
|
|||
|
|
|||
|
length = getanimlength( getanim_generic( "traverse_window_M_2_dive" ) );
|
|||
|
wait length * .73;
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
self unlink();
|
|||
|
link delete();
|
|||
|
|
|||
|
self disable_heat_behavior();
|
|||
|
self enable_arrivals();
|
|||
|
node = getnode( "street_macey_hide_node", "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 250;
|
|||
|
self.moveplaybackrate = .9;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self enable_pain();
|
|||
|
self ent_flag_set( "street_hide" );
|
|||
|
self.moveplaybackrate = 1.0;
|
|||
|
}
|
|||
|
|
|||
|
street_gohide_dunn()
|
|||
|
{
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
//This is not goood!
|
|||
|
self delaythread( 2.25 + CONST_FOLEY_LINE_TIME, ::dialogue_queue, "dcemp_cpd_notgood" );
|
|||
|
|
|||
|
self enable_heat_behavior();
|
|||
|
self anim_generic_gravity_run( self, "CornerCrR_trans_OUT_F" );
|
|||
|
|
|||
|
node = getstruct( "street_marine1_anim0", "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "run_reaction_L_quick" );
|
|||
|
//Whoa!!!
|
|||
|
self delaythread( 0, ::dialogue_queue, "dcemp_cpd_whoa" );
|
|||
|
node anim_generic_run( self, "run_reaction_L_quick" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node.origin = self.origin;
|
|||
|
node anim_generic_run( self, "run_turn_R45" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "run_reaction_R_quick" );
|
|||
|
//Holy shiiiiiit!!!
|
|||
|
self delaythread( 0.0, ::dialogue_queue, "dcemp_cpd_holy" );
|
|||
|
//self delaythread( 1.0, ::dialogue_queue, "dcemp_cpd_EMP" );
|
|||
|
node anim_generic_run( self, "run_reaction_R_quick" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node.origin = self.origin;
|
|||
|
node anim_generic_run( self, "run_turn_L45" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "exposed_idle_reactB" );
|
|||
|
node thread anim_generic( self, "exposed_idle_reactB" );
|
|||
|
length = getanimlength( getanim_generic( "exposed_idle_reactB" ) );
|
|||
|
self playsound( "generic_pain_american_" + randomintrange( 1,9 ) );
|
|||
|
wait length - .75;
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "run_pain_fallonknee_03" );
|
|||
|
//self playsound( "generic_pain_american_" + randomintrange( 1,9 ) );
|
|||
|
//Whoa!!!
|
|||
|
level.foley delaythread( .5, ::dialogue_queue, "dcemp_fly_justkeepmovin" );
|
|||
|
//Look out!!!
|
|||
|
length = getanimlength( getanim_generic( "run_pain_fallonknee_03" ) );
|
|||
|
self delaythread( length - .5, ::dialogue_queue, "dcemp_cpd_lookout" );
|
|||
|
node anim_generic_run( self, "run_pain_fallonknee_03" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
self disable_heat_behavior();
|
|||
|
|
|||
|
node anim_generic_reach( self, "jump_across_100_spring" );
|
|||
|
|
|||
|
link = spawn( "script_origin", node.origin );
|
|||
|
link.angles = node.angles;
|
|||
|
self linkto( link );
|
|||
|
link delaycall( .25, ::movez, 12, 1 );
|
|||
|
|
|||
|
self playsound( "generic_meleecharge_american_" + randomintrange( 1,9 ) );
|
|||
|
link anim_generic_run( self, "jump_across_100_spring" );
|
|||
|
|
|||
|
self unlink();
|
|||
|
link delete();
|
|||
|
self playsound( "generic_pain_american_" + randomintrange( 1,9 ) );
|
|||
|
self anim_generic_gravity_run( self, "run_react_duck_non_loop" );
|
|||
|
|
|||
|
self enable_arrivals();
|
|||
|
node = getnode( "street_marine1_hide_node", "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 200;
|
|||
|
self.moveplaybackrate = 1.1;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self enable_pain();
|
|||
|
self ent_flag_set( "street_hide" );
|
|||
|
self.moveplaybackrate = 1.0;
|
|||
|
}
|
|||
|
|
|||
|
street_gohide_foley()
|
|||
|
{
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
node = getstruct( "street_macey_anim0", "targetname" );
|
|||
|
|
|||
|
self enable_heat_behavior();
|
|||
|
self anim_generic_gravity_run( self, "corner_standR_trans_OUT_6" );
|
|||
|
self anim_generic_gravity_run( self, "run_turn_L90" );
|
|||
|
self anim_generic_gravity_run( self, "run_turn_L45" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "exposed_idle_reactB" );
|
|||
|
node thread anim_generic( self, "exposed_idle_reactB" );
|
|||
|
length = getanimlength( getanim_generic( "exposed_idle_reactB" ) );
|
|||
|
self playsound( "generic_pain_american_" + randomintrange( 1,9 ) );
|
|||
|
|
|||
|
//Don't stop!! Keep moving!!
|
|||
|
self delaythread( length - 1.0, ::dialogue_queue, "dcemp_fly_dontstop" );
|
|||
|
|
|||
|
wait length - .75;
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "run_pain_fallonknee" );
|
|||
|
self playsound( "generic_pain_american_" + randomintrange( 1,9 ) );
|
|||
|
node anim_generic_run( self, "run_pain_fallonknee" );
|
|||
|
|
|||
|
////Go go go!!!
|
|||
|
self delaythread( 0, ::dialogue_queue, "dcemp_fly_gogogo" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "slide_across_car" );
|
|||
|
self playsound( "generic_pain_american_" + randomintrange( 1,9 ) );
|
|||
|
node anim_generic_run( self, "slide_across_car" );
|
|||
|
|
|||
|
level.dunn delaythread( 1.0, ::dialogue_queue, "dcemp_cpd_EMP" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "run_react_duck_non_loop" );
|
|||
|
self playsound( "generic_pain_american_" + randomintrange( 1,9 ) );
|
|||
|
node anim_generic_run( self, "run_react_duck_non_loop" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "exposed_idle_reactB" );
|
|||
|
node thread anim_generic( self, "exposed_idle_reactB" );
|
|||
|
length = getanimlength( getanim_generic( "exposed_idle_reactB" ) );
|
|||
|
self playsound( "generic_pain_american_" + randomintrange( 1,9 ) );
|
|||
|
|
|||
|
wait length - .75;
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
//Go!! Go!!
|
|||
|
self delaythread( 0.5, ::dialogue_queue, "dcemp_fly_gogo" );
|
|||
|
|
|||
|
self disable_heat_behavior();
|
|||
|
self enable_arrivals();
|
|||
|
node.origin = self.origin;
|
|||
|
node.angles = self.angles + ( 0,40,0 );
|
|||
|
node anim_generic_run( self, "stand_2_run_R" );
|
|||
|
node = getnode( "corner_macey_hide_node", "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 200;
|
|||
|
self.moveplaybackrate = 1.1;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self enable_pain();
|
|||
|
self ent_flag_set( "street_hide" );
|
|||
|
self.moveplaybackrate = 1.0;
|
|||
|
}
|
|||
|
|
|||
|
street_setup_stuff()
|
|||
|
{
|
|||
|
array_thread( getentarray( "meetup_allies", "targetname" ), ::add_spawn_function, ::street_meetup_allies );
|
|||
|
|
|||
|
getent( "street_btr", "targetname" ) add_spawn_function( ::street_btr_scene );
|
|||
|
getent( "street_crash_motorcycle", "targetname" ) thread street_crash_motorcycle();
|
|||
|
level.fallguy = getent( "street_guy_fall_guy", "targetname" );
|
|||
|
level.fallguy add_spawn_function( ::street_guy_fall_guy );
|
|||
|
|
|||
|
array_thread( getentarray( "street_crash_heli", "script_noteworthy" ), ::street_crash_helis );
|
|||
|
array_thread( getstructarray( "street_crash_heli_anim", "script_noteworthy" ), ::street_crash_helis_anim );
|
|||
|
|
|||
|
array_thread( getentarray( "corner_truck_engine_crash", "targetname" ), ::corner_truck_engine_crash );
|
|||
|
thread corner_plane_crash();
|
|||
|
|
|||
|
clip = getent( "hide_clip", "targetname" );
|
|||
|
clip connectpaths();
|
|||
|
clip notsolid();
|
|||
|
|
|||
|
//spawn btr
|
|||
|
add_wait( ::flag_wait, "emp_entity_cleanup_done" );
|
|||
|
add_func( ::activate_trigger_with_targetname, "street_btr_spawner" );
|
|||
|
thread do_wait();
|
|||
|
}
|
|||
|
|
|||
|
street_meetup_allies()
|
|||
|
{
|
|||
|
self init_meetup_allies();
|
|||
|
|
|||
|
if( self.script_noteworthy == "marine3" )
|
|||
|
{
|
|||
|
self ent_flag_set( "street_hide" );
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
self.team = "neutral";
|
|||
|
node = getstruct( self.target, "targetname" );
|
|||
|
node anim_generic_first_frame( self, "favela_run_and_wave" );
|
|||
|
|
|||
|
flag_wait( "street_marine2_hide" );
|
|||
|
self.team = "allies";
|
|||
|
|
|||
|
node anim_generic_gravity_run( self, "favela_run_and_wave" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self follow_path( node );
|
|||
|
self ent_flag_set( "street_hide" );
|
|||
|
}
|
|||
|
|
|||
|
init_meetup_allies()
|
|||
|
{
|
|||
|
add_team( self );
|
|||
|
|
|||
|
self ent_flag_init( "street_hide" );
|
|||
|
self thread magic_bullet_shield();
|
|||
|
self set_pushplayer( true );
|
|||
|
self disable_pain();
|
|||
|
self pathrandompercent_zero();
|
|||
|
self walkdist_zero();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/************************************************************************************************************/
|
|||
|
/* CORNER */
|
|||
|
/************************************************************************************************************/
|
|||
|
#using_animtree( "generic_human" );
|
|||
|
corner_main()
|
|||
|
{
|
|||
|
flag_wait( "corner_main" );
|
|||
|
|
|||
|
foreach( member in level.team )
|
|||
|
member.walkDistFacingMotion = 0;
|
|||
|
|
|||
|
array_thread( level.team, ::enable_arrivals );
|
|||
|
array_thread( level.team, ::enable_exits );
|
|||
|
array_thread( level.team, ::enable_pain );
|
|||
|
|
|||
|
flag_wait( "corner_look_outside" );
|
|||
|
thread corner_dead_check();
|
|||
|
|
|||
|
level.player blend_movespeedscale( .77 );
|
|||
|
//What the hell was that?!
|
|||
|
level.team[ "marine1" ] dialogue_queue( "dcemp_ar1_whatwasthat" );
|
|||
|
//Stay here.
|
|||
|
level.foley add_wait( ::dialogue_queue, "dcemp_fly_stayhere" );
|
|||
|
//You're goin' out there? Are you nuts?
|
|||
|
level.dunn add_func( ::delaythread, 0.5, ::dialogue_queue, "dcemp_cpd_younuts" );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
level.foley thread corner_foley_go();
|
|||
|
|
|||
|
flag_wait( "corner_moveout" );
|
|||
|
|
|||
|
objective_state( level.objnum, "done" );
|
|||
|
level.objnum++;
|
|||
|
objective_add( level.objnum, "active", &"DCEMP_OBJ_FOLLOW_SGT_FOLEY", level.foley.origin );
|
|||
|
objective_current( level.objnum );
|
|||
|
objective_onentity( level.objnum, level.foley, ( 0,0,70 ) );
|
|||
|
|
|||
|
thread corner_dialogue();
|
|||
|
|
|||
|
level.team[ "marine3" ] thread anim_generic( level.team[ "marine3" ], "scout_sniper_price_wave" );
|
|||
|
level.team[ "marine3" ] delaycall( .5, ::setlookatentity, level.player );
|
|||
|
length = getanimlength( getanim_generic( "scout_sniper_price_wave" ) );
|
|||
|
level.team[ "marine3" ] delaythread( length * .68, ::anim_stopanimscripted );
|
|||
|
level.team[ "marine3" ] delaycall( length * .45, ::setlookatentity );
|
|||
|
|
|||
|
level.team[ "marine1" ] thread corner_marine1_go();
|
|||
|
wait .5;
|
|||
|
level.team[ "dunn" ] thread corner_dunn_go();
|
|||
|
|
|||
|
wait 6.0;
|
|||
|
|
|||
|
level.team[ "marine3" ] thread corner_marine3_go();
|
|||
|
wait .5;
|
|||
|
level.team[ "marine2" ] thread corner_marine2_go();
|
|||
|
|
|||
|
|
|||
|
add_wait( ::array_wait, level.team, "corner_at_plane" );
|
|||
|
add_func( ::flag_set, "meetup_main" );
|
|||
|
thread do_wait();
|
|||
|
}
|
|||
|
|
|||
|
corner_dialogue()
|
|||
|
{
|
|||
|
wait 4.5;
|
|||
|
marine1 = level.team[ "marine1" ];
|
|||
|
////What happened here?
|
|||
|
marine1 dialogue_queue( "dcemp_ar1_thisisweird" );
|
|||
|
wait .5;
|
|||
|
//It<49>s so<73>quiet.
|
|||
|
level.dunn dialogue_queue( "dcemp_cpd_soquiet" );
|
|||
|
//Hey! What the<68>? My red dot's not working.
|
|||
|
level.dunn dialogue_queue( "dcemp_cpd_heywhatthe" );
|
|||
|
//Mine's down too, this is weird, bro.
|
|||
|
marine1 dialogue_queue( "dcemp_ar1_minedowntoo" );
|
|||
|
|
|||
|
wait .5;
|
|||
|
|
|||
|
//Looks like optics are down<77>comms too. There's not even a street light for blocks.
|
|||
|
level.foley thread dialogue_queue( "dcemp_fly_empblast" );
|
|||
|
}
|
|||
|
|
|||
|
corner_foley_go()
|
|||
|
{
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
door = GetEnt( "corner_door", "targetname" );
|
|||
|
door thread corner_palm_style_door_open( "door_wood_slow_creaky_open" );
|
|||
|
|
|||
|
node = getent( "corner_doornode", "targetname" );
|
|||
|
self linkto( node );
|
|||
|
node delaycall( 3.25, ::movez, -8, .25 );
|
|||
|
node anim_generic_run( self, "hunted_open_barndoor_flathand" );
|
|||
|
|
|||
|
node = getent( "corner_lookout", "targetname" );
|
|||
|
|
|||
|
node.angles = self.angles;
|
|||
|
node.origin = self.origin;
|
|||
|
self linkto( node );
|
|||
|
|
|||
|
node rotateyaw( -5, .5 );
|
|||
|
node delaycall( 1.5, ::movez, -7, .25 );
|
|||
|
node anim_generic( self, "combatwalk_F_spin" );
|
|||
|
self unlink();
|
|||
|
|
|||
|
self setgoalpos( self.origin );
|
|||
|
|
|||
|
//It's over! Come on, we still have a war to fight.
|
|||
|
self setlookatentity( level.team[ "marine1" ] );
|
|||
|
self delaycall( 3, ::setlookatentity );
|
|||
|
self thread dialogue_queue( "dcemp_fly_wartofight" );
|
|||
|
|
|||
|
thread flag_set_delayed( "corner_moveout", 1.0 );
|
|||
|
|
|||
|
node.origin = self.origin;
|
|||
|
node.angles = self.angles - (0,45,0);
|
|||
|
self orientmode( "face angle", self.angles[1] - 45 );
|
|||
|
wait .5;
|
|||
|
|
|||
|
node anim_generic_run( self, "cqb_stand_signal_move_out" );
|
|||
|
|
|||
|
node = getstruct( "corner_anim2a", "targetname" );
|
|||
|
node anim_generic_reach( self, "patrol_jog_360_once" );
|
|||
|
node anim_generic_run( self, "CQB_walk_turn_9" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node anim_generic_reach( self, "patrol_jog_360_once" );
|
|||
|
node thread anim_generic_gravity( self, "patrol_jog_360_once" );
|
|||
|
|
|||
|
length = getanimlength( getanim_generic( "patrol_jog_360_once" ) );
|
|||
|
wait length * .79;
|
|||
|
self clearanim( getanim_generic( "patrol_jog_360_once" ), .2);
|
|||
|
self notify( "killanimscript" );
|
|||
|
|
|||
|
self disable_cqbwalk();
|
|||
|
|
|||
|
self.alertlevel = "noncombat";
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node anim_reach_solo( self, "hunted_woundedhostage_check" );
|
|||
|
|
|||
|
guys = [];
|
|||
|
guys[ guys.size ] = self;
|
|||
|
guys[ guys.size ] = level.corner_dead_check_guy;
|
|||
|
|
|||
|
level.corner_dead_check_guy setcontents( 0 );
|
|||
|
|
|||
|
node notify( "stop_loop" );
|
|||
|
node anim_single( guys, "hunted_woundedhostage_check" );
|
|||
|
//dammit
|
|||
|
self thread dialogue_queue( "dcemp_fly_dammit" );
|
|||
|
self notify( "corner_at_plane" );
|
|||
|
|
|||
|
node anim_generic_run( self, "DCemp_wounded_check_end" );
|
|||
|
self.a.pose = "stand";
|
|||
|
self setgoalpos( self.origin );
|
|||
|
}
|
|||
|
|
|||
|
corner_marine1_go()
|
|||
|
{
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
node = getstruct( "corner_doorexit", "targetname" );
|
|||
|
node anim_generic_reach( self, "CQB_walk_turn_6" );
|
|||
|
node anim_generic_run( self, "CQB_walk_turn_6" );
|
|||
|
self anim_generic_gravity_run( self, "CQB_walk_turn_9" );
|
|||
|
|
|||
|
|
|||
|
node = getstruct( "corner_anim1", "targetname" );
|
|||
|
node anim_generic_reach( self, "patrol_jog_look_up_once" );
|
|||
|
|
|||
|
node anim_generic_run( self, "patrol_jog_look_up_once" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node anim_generic_reach( self, "CQB_walk_turn_9" );
|
|||
|
node anim_generic_run( self, "CQB_walk_turn_9" );
|
|||
|
|
|||
|
self disable_cqbwalk();
|
|||
|
self set_generic_run_anim_array( "casual_killer_jog" );
|
|||
|
|
|||
|
self.alertlevel = "noncombat";
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node anim_generic_reach( self, "casual_killer_jog_stop" );
|
|||
|
|
|||
|
level endon( "meetup_go" );
|
|||
|
self notify( "corner_at_plane" );
|
|||
|
|
|||
|
self anim_generic_run( self, "casual_killer_jog_stop" );
|
|||
|
self setgoalpos( self.origin );
|
|||
|
}
|
|||
|
|
|||
|
corner_marine2_go()
|
|||
|
{
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
node = getstruct( "corner_doorexit3", "targetname" );
|
|||
|
node anim_generic_reach( self, "CQB_walk_turn_7" );
|
|||
|
node anim_generic_run( self, "CQB_walk_turn_7" );
|
|||
|
self anim_generic_gravity_run( self, "CQB_walk_turn_9" );
|
|||
|
|
|||
|
self set_pushplayer( false );
|
|||
|
|
|||
|
self disable_cqbwalk();
|
|||
|
waittillframeend;
|
|||
|
self set_generic_run_anim( "combat_jog" );
|
|||
|
|
|||
|
node = getstruct( "corner_anim1", "targetname" );
|
|||
|
node anim_generic_reach( self, "patrol_jog_360_once" );
|
|||
|
|
|||
|
node anim_generic_run( self, "patrol_jog_360_once" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node anim_generic_reach( self, "CQB_walk_turn_9" );
|
|||
|
|
|||
|
self notify( "corner_at_plane" );
|
|||
|
|
|||
|
node anim_generic_run( self, "CQB_walk_turn_9" );
|
|||
|
|
|||
|
self disable_cqbwalk();
|
|||
|
|
|||
|
node = getnode( "corner_anim4", "targetname" );
|
|||
|
|
|||
|
self follow_path( node );
|
|||
|
|
|||
|
self set_pushplayer( true );
|
|||
|
}
|
|||
|
|
|||
|
corner_marine3_go()
|
|||
|
{
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
node = getstruct( "corner_doorexit2", "targetname" );
|
|||
|
node anim_generic_reach( self, "CQB_walk_turn_6" );
|
|||
|
node anim_generic_run( self, "CQB_walk_turn_6" );
|
|||
|
|
|||
|
self set_pushplayer( false );
|
|||
|
|
|||
|
self disable_cqbwalk();
|
|||
|
waittillframeend;
|
|||
|
self set_generic_run_anim( "combat_jog" );
|
|||
|
|
|||
|
node = getstruct( "corner_anim5b", "targetname" );
|
|||
|
node anim_generic_reach( self, "CQB_walk_turn_9" );
|
|||
|
node anim_generic_run( self, "CQB_walk_turn_9" );
|
|||
|
|
|||
|
self disable_cqbwalk();
|
|||
|
|
|||
|
node = getnode( "corner_anim5", "targetname" );
|
|||
|
|
|||
|
self follow_path( node );
|
|||
|
|
|||
|
self set_pushplayer( true );
|
|||
|
|
|||
|
self notify( "corner_at_plane" );
|
|||
|
}
|
|||
|
|
|||
|
corner_dunn_go()
|
|||
|
{
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
node = getstruct( "corner_doorexit", "targetname" );
|
|||
|
node anim_generic_reach( self, "CQB_walk_turn_6" );
|
|||
|
node anim_generic_run( self, "CQB_walk_turn_6" );
|
|||
|
self anim_generic_gravity_run( self, "CQB_walk_turn_9" );
|
|||
|
|
|||
|
node = getstruct( "corner_anim3", "targetname" );
|
|||
|
node anim_generic_reach( self, "combatwalk_F_spin" );
|
|||
|
node anim_generic_run( self, "combatwalk_F_spin" );
|
|||
|
|
|||
|
self disable_cqbwalk();
|
|||
|
self set_generic_run_anim_array( "casual_killer_jog" );
|
|||
|
|
|||
|
self.alertlevel = "noncombat";
|
|||
|
|
|||
|
//Whoa...check it out, man.
|
|||
|
self thread dialogue_queue( "dcemp_cpd_checkitout" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node anim_generic_reach( self, "casual_killer_jog_stop" );
|
|||
|
|
|||
|
level endon( "meetup_go" );
|
|||
|
self notify( "corner_at_plane" );
|
|||
|
|
|||
|
node anim_generic_run( self, "casual_killer_jog_stop" );
|
|||
|
self setgoalpos( self.origin );
|
|||
|
}
|
|||
|
|
|||
|
corner_plane_crash()
|
|||
|
{
|
|||
|
getent( "corner_engine", "targetname" ) thread corner_engine_crash();
|
|||
|
|
|||
|
flag_wait( "street_crash_heli_done" );
|
|||
|
|
|||
|
node = getent( "corner_crash_plane_link", "targetname" );
|
|||
|
node playsound( "scn_dcemp_jet_crash_offscreen" );
|
|||
|
|
|||
|
wait 2.5;
|
|||
|
|
|||
|
flag_set( "corner_start_crash_scene" );
|
|||
|
|
|||
|
earthquake( 0.25, 1.5, node.origin, 5000 );
|
|||
|
quakeobj = spawn( "script_origin", level.player.origin + (0,0,500) );
|
|||
|
|
|||
|
quakeobj PlayRumbleLoopOnEntity( "steady_rumble" );
|
|||
|
quakeobj movez( 400, 1.5 );
|
|||
|
quakeobj delaycall( 2, ::delete );
|
|||
|
noself_delaycall( 1.5, ::stopallRumbles );
|
|||
|
|
|||
|
setsaveddvar( "r_spotlightstartradius", "100" );
|
|||
|
setsaveddvar( "r_spotlightEndradius", "1200" );
|
|||
|
setsaveddvar( "r_spotlightfovinnerfraction", "0" );
|
|||
|
setsaveddvar( "r_spotlightexponent", "0" );
|
|||
|
setsaveddvar( "r_spotlightBrightness", "16" );
|
|||
|
|
|||
|
node = getstruct( "corner_plane_fx_light", "targetname" );
|
|||
|
model = spawn( "script_model", node.origin );
|
|||
|
model.angles = node.angles;
|
|||
|
model setmodel( "tag_origin" );
|
|||
|
playfxontag( level._effect[ "planecrash_spotlight" ], model, "TAG_ORIGIN" );
|
|||
|
delaythread( .5, ::lerp_savedDvar, "r_spotlightBrightness", 0, 3 );
|
|||
|
|
|||
|
model delaycall( 3.75, ::delete );
|
|||
|
|
|||
|
wait .25;
|
|||
|
|
|||
|
array_thread( getstructarray( "corner_plane_launch", "targetname" ), ::corner_plane_launch );
|
|||
|
thread flag_set_delayed( "corner_engine_crash", .5 );
|
|||
|
wait 1.0;
|
|||
|
|
|||
|
exploder( "corner_fire_streaks" );
|
|||
|
delaythread( .75, ::exploder, "corner_fire_streaks" );
|
|||
|
array_thread( getstructarray( "corner_plane_launch", "targetname" ), ::corner_plane_launch );
|
|||
|
|
|||
|
flag_wait( "corner_engine_hit" );
|
|||
|
|
|||
|
exploder( "corner_fire_trails" );
|
|||
|
corner_show_damage();
|
|||
|
}
|
|||
|
|
|||
|
/************************************************************************************************************/
|
|||
|
/* MEETUP */
|
|||
|
/************************************************************************************************************/
|
|||
|
meetup_main()
|
|||
|
{
|
|||
|
getent( "meetup_runner", "targetname" ) add_spawn_function( ::meetup_runner );
|
|||
|
|
|||
|
flag_wait( "meetup_main" );
|
|||
|
|
|||
|
level.foley thread meetup_foley();
|
|||
|
level.dunn thread meetup_dunn();
|
|||
|
level.team[ "marine1" ] thread meetup_marine1();
|
|||
|
level.team[ "marine2" ] thread meetup_marine2();
|
|||
|
level.team[ "marine3" ] thread meetup_marine3();
|
|||
|
|
|||
|
flag_wait( "meetup_show_guys" );
|
|||
|
|
|||
|
thread play_sound_in_space( "elm_thunder_distant", level.player.origin + ( 0, 0, 60 ) );
|
|||
|
|
|||
|
delaythread( 3, maps\_weather::rainMedium, 20 );
|
|||
|
delaythread( 0, maps\_weather::lightning, maps\dcemp_fx::lightning_normal, maps\dcemp_fx::lightning_flash );
|
|||
|
|
|||
|
wait 1;
|
|||
|
|
|||
|
thread autosave_by_name( "meetup_main" );
|
|||
|
|
|||
|
//Huah. We gotta regroup with whoever's left out there. Corporal Dunn, take point.
|
|||
|
level.foley setlookatentity( level.team[ "marine1" ] );
|
|||
|
level.foley delaycall( 2, ::setlookatentity );
|
|||
|
level.foley delaycall( 2.75, ::setlookatentity, level.dunn );
|
|||
|
level.foley delaycall( 5.5, ::setlookatentity );
|
|||
|
level.foley dialogue_queue( "dcemp_fly_regroup" );
|
|||
|
//Huah.
|
|||
|
level.dunn thread dialogue_queue( "dcemp_cpd_huah2" );
|
|||
|
|
|||
|
|
|||
|
array_thread( level.team, ::set_ignoreme, true );
|
|||
|
array_thread( level.team, ::set_ignoreall, true );
|
|||
|
array_thread( level.team, ::pathrandompercent_zero );
|
|||
|
array_thread( level.team, ::set_pushplayer, true );
|
|||
|
array_thread( level.team, ::walkdist_zero );
|
|||
|
|
|||
|
flag_set( "meetup_moveout" );
|
|||
|
SetSavedDvar( "cg_crosshairEnemyColor", "0" );
|
|||
|
|
|||
|
delaythread( 4, ::activate_trigger, "meetup_runner", "target" );
|
|||
|
|
|||
|
flag_wait( "meetup_challenge_start" );
|
|||
|
|
|||
|
aimobj = spawn( "script_origin", level.runner geteye() + (0,0,16) );
|
|||
|
aimobj linkto( level.runner );
|
|||
|
level.dunn setentitytarget( aimobj );
|
|||
|
level.dunn enable_dontevershoot();
|
|||
|
level.dunn set_ignoreall( false );
|
|||
|
|
|||
|
//"Star"!
|
|||
|
level.dunn dialogue_queue( "dcemp_cpd_star" );
|
|||
|
flag_set( "meetup_challenge_done" );
|
|||
|
|
|||
|
array_thread( level.team, ::clear_run_anim );
|
|||
|
|
|||
|
wait 1.25;
|
|||
|
//"Star", or we will fire on you!
|
|||
|
level.dunn dialogue_queue( "dcemp_cpd_willfire" );
|
|||
|
|
|||
|
thread meetup_runner_threads();
|
|||
|
flag_set( "meetup_runner_safe" );
|
|||
|
|
|||
|
//wait .65;
|
|||
|
|
|||
|
//I don't remember the damn countersign all right? I'm just a runner! Don't shoot!
|
|||
|
level.runner dialogue_queue( "dcemp_ar3_dontshoot" );
|
|||
|
|
|||
|
SetSavedDvar( "cg_crosshairEnemyColor", "1" );
|
|||
|
|
|||
|
wait .5;
|
|||
|
//The proper response is "Texas", soldier. What'dya got?
|
|||
|
level.foley dialogue_queue( "dcemp_fly_properresponse" );
|
|||
|
|
|||
|
flag_wait( "lobby_main" );
|
|||
|
|
|||
|
aimobj delete();
|
|||
|
}
|
|||
|
|
|||
|
meetup_foley()
|
|||
|
{
|
|||
|
flag_wait( "meetup_moveout" );
|
|||
|
wait 1.5;
|
|||
|
|
|||
|
meetup_moveout( "corner_flash_1" );
|
|||
|
}
|
|||
|
|
|||
|
meetup_dunn()
|
|||
|
{
|
|||
|
flag_wait( "meetup_moveout" );
|
|||
|
|
|||
|
self enable_heat_behavior();
|
|||
|
self clear_run_anim();
|
|||
|
|
|||
|
node = getnode( "corner_flash_3", "targetname" );
|
|||
|
self.goalradius = 120;
|
|||
|
self setgoalnode( node );
|
|||
|
self waittill( "goal" );
|
|||
|
self disable_heat_behavior();
|
|||
|
}
|
|||
|
|
|||
|
meetup_marine1()
|
|||
|
{
|
|||
|
flag_wait( "meetup_moveout" );
|
|||
|
wait 2;
|
|||
|
|
|||
|
meetup_moveout( "corner_flash_4" );
|
|||
|
}
|
|||
|
|
|||
|
meetup_marine2()
|
|||
|
{
|
|||
|
flag_wait( "meetup_moveout" );
|
|||
|
|
|||
|
wait 3;
|
|||
|
|
|||
|
self set_generic_run_anim_array( "casual_killer_jog" );
|
|||
|
|
|||
|
node = getnode( "corner_flash_5", "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
}
|
|||
|
|
|||
|
meetup_marine3()
|
|||
|
{
|
|||
|
flag_wait( "meetup_moveout" );
|
|||
|
|
|||
|
wait 1.5;
|
|||
|
|
|||
|
self set_generic_run_anim_array( "casual_killer_jog" );
|
|||
|
|
|||
|
node = getnode( "corner_flash_2", "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
}
|
|||
|
|
|||
|
meetup_walk_to_guys( node, name )
|
|||
|
{
|
|||
|
struct = getstruct( name, "targetname" );
|
|||
|
|
|||
|
node.origin = self.origin;
|
|||
|
node.angles = vectortoangles( struct.origin - self.origin );
|
|||
|
self orientmode( "face angle", node.angles[ 1 ] );
|
|||
|
self setgoalpos( self.origin );
|
|||
|
wait .5;
|
|||
|
node thread anim_generic_gravity_run( self, "patrol_bored_2_walk" );
|
|||
|
|
|||
|
self clear_run_anim();
|
|||
|
self disable_arrivals();
|
|||
|
self disable_exits();
|
|||
|
|
|||
|
waittillframeend;
|
|||
|
self set_generic_run_anim( "patrol_bored_patrolwalk" );
|
|||
|
|
|||
|
self setgoalpos( struct.origin );
|
|||
|
self.goalradius = 16;
|
|||
|
}
|
|||
|
|
|||
|
meetup_walk_stop()
|
|||
|
{
|
|||
|
self endon( "movingout" );
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
self anim_generic_gravity( self, "patrol_bored_walk_2_bored" );
|
|||
|
self setgoalpos( self.origin );
|
|||
|
}
|
|||
|
|
|||
|
meetup_moveout( name )
|
|||
|
{
|
|||
|
self setlookatentity();
|
|||
|
|
|||
|
self notify( "movingout" );
|
|||
|
|
|||
|
self clear_run_anim();
|
|||
|
self enable_arrivals();
|
|||
|
|
|||
|
waittillframeend;
|
|||
|
self set_generic_run_anim_array( "casual_killer_jog" );
|
|||
|
|
|||
|
node = getnode( name, "targetname" );
|
|||
|
ent = spawn( "script_origin", self.origin );
|
|||
|
ent.angles = self.angles;
|
|||
|
|
|||
|
self linkto( ent );
|
|||
|
self disable_exits();
|
|||
|
|
|||
|
time = .75;
|
|||
|
ent rotateto( vectortoangles( node.origin - ent.origin ), time, time );
|
|||
|
ent thread anim_generic_run( self, "casual_killer_jog_start" );
|
|||
|
|
|||
|
ent waittill( "rotatedone" );
|
|||
|
self unlink();
|
|||
|
self setgoalnode( node );
|
|||
|
ent delete();
|
|||
|
|
|||
|
self delaythread( 3, ::enable_exits );
|
|||
|
}
|
|||
|
|
|||
|
meetup_runner()
|
|||
|
{
|
|||
|
level.runner = self;
|
|||
|
self.animname = "runner";
|
|||
|
self set_pushplayer( true );
|
|||
|
self thread magic_bullet_shield();
|
|||
|
self.name = "";
|
|||
|
|
|||
|
node = getstruct( self.target, "targetname" );
|
|||
|
|
|||
|
door = getent( "meetup_door_left", "targetname" );
|
|||
|
door connectpaths();
|
|||
|
|
|||
|
time = 1.25;
|
|||
|
door delaycall( 2.0, ::rotateyaw, -90, time, 0, time );
|
|||
|
door delaycall( 2.5 + time, ::disconnectpaths );
|
|||
|
|
|||
|
delaythread( 1.75, ::exploder, "meetup_dooropen" );
|
|||
|
|
|||
|
self disable_surprise();
|
|||
|
self disable_bulletwhizbyreaction();
|
|||
|
self pathrandompercent_zero();
|
|||
|
self walkdist_zero();
|
|||
|
self set_fixednode_false();
|
|||
|
|
|||
|
node anim_generic_run( self, "cargoship_open_cargo_guyL" );
|
|||
|
|
|||
|
node = getent( node.target, "targetname" );
|
|||
|
self.goalradius = 80;
|
|||
|
self setgoalpos( node.origin );
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
flag_set( "meetup_challenge_start" );
|
|||
|
|
|||
|
node = getent( node.target, "targetname" );
|
|||
|
|
|||
|
node anim_generic_reach( self, "run_pain_fallonknee" );
|
|||
|
node thread anim_generic_gravity( self, "run_pain_fallonknee" );
|
|||
|
length = getanimlength( getanim_generic( "run_pain_fallonknee" ) );
|
|||
|
wait length * .77;
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
self anim_generic_gravity( self, "run_2_crouch_90R" );
|
|||
|
self setgoalpos( self.origin );
|
|||
|
|
|||
|
flag_wait( "meetup_runner_safe" );
|
|||
|
self.name = "Pvt. Vaughan";
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node anim_generic_reach( self, "DCemp_run_sequence_runner" );
|
|||
|
|
|||
|
flag_set( "meetup_do_scripted_scene" );
|
|||
|
|
|||
|
guys = [];
|
|||
|
guys[ guys.size ] = self;
|
|||
|
guys[ guys.size ] = level.dunn;
|
|||
|
// node anim_single_run( guys, "DCemp_run_sequence" );
|
|||
|
|
|||
|
node anim_generic_gravity_run( self, "DCemp_run_sequence_runner" );
|
|||
|
|
|||
|
node = getent( node.target, "targetname" );
|
|||
|
node anim_generic_reach( self, "unarmed_climb_wall" );
|
|||
|
self linkto( node );
|
|||
|
self gun_remove();
|
|||
|
|
|||
|
node thread anim_generic_run( self, "unarmed_climb_wall" );
|
|||
|
|
|||
|
self waittillmatch( "single anim", "footstep_right_large" );
|
|||
|
self waittillmatch( "single anim", "footstep_right_large" );
|
|||
|
wait .25;
|
|||
|
|
|||
|
node movez( 4, .35 );
|
|||
|
|
|||
|
|
|||
|
self waittillmatch( "single anim", "footstep_left_small" );
|
|||
|
wait .5;
|
|||
|
vec = anglestoforward( node.angles );
|
|||
|
vec *= 16;
|
|||
|
|
|||
|
node moveto( node.origin + vec, .5 );
|
|||
|
|
|||
|
|
|||
|
node waittill( "unarmed_climb_wall" );
|
|||
|
self gun_recall();
|
|||
|
self unlink();
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 64;
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 64;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self stop_magic_bullet_shield();
|
|||
|
self delete();
|
|||
|
}
|
|||
|
|
|||
|
/************************************************************************************************************/
|
|||
|
/* LOBBY */
|
|||
|
/************************************************************************************************************/
|
|||
|
lobby_main()
|
|||
|
{
|
|||
|
thread handle_sunlight();
|
|||
|
thread vision_set_lobby();
|
|||
|
|
|||
|
add_wait( ::trigger_wait_targetname, "lobby_vision_change" );
|
|||
|
level.player add_func( ::blend_movespeedscale, .65 );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
add_wait( ::flag_wait, "lobby_robo_death" );
|
|||
|
level.player add_func( ::blend_movespeedscale, .77 );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
flag_wait( "lobby_main" );
|
|||
|
|
|||
|
level.player.ignoreme = false;
|
|||
|
array_thread( level.team, ::clear_run_anim );
|
|||
|
array_thread( level.team, ::enable_exits );
|
|||
|
array_thread( level.team, ::enable_arrivals );
|
|||
|
array_call( level.team, ::setlookatentity );
|
|||
|
|
|||
|
thread autosave_by_name( "lobby_main" );
|
|||
|
|
|||
|
//You heard the man, lets go.
|
|||
|
level.foley delaythread( .5, ::dialogue_queue, "dcemp_fly_heardtheman" );
|
|||
|
|
|||
|
level.foley thread anim_generic_gravity( level.foley, "exposed_tracking_turn180L" );
|
|||
|
|
|||
|
wait 1.5;
|
|||
|
|
|||
|
objective_string_NoMessage( level.objnum, &"DCEMP_OBJ_WHISKEY_HOTEL" );
|
|||
|
|
|||
|
lobby_moveout();
|
|||
|
|
|||
|
thread lobby_ambush();
|
|||
|
|
|||
|
flag_set( "office_main" );
|
|||
|
}
|
|||
|
|
|||
|
lobby_ambush()
|
|||
|
{
|
|||
|
level.foley add_wait( ::waittill_msg, "reached_path_end" );
|
|||
|
level.dunn add_wait( ::waittill_msg, "reached_path_end" );
|
|||
|
add_wait( ::flag_wait, "meetup_movein" );
|
|||
|
do_wait();
|
|||
|
//Dunn, you're up.
|
|||
|
level.foley thread dialogue_queue( "dcemp_fly_dunnyoureup" );
|
|||
|
|
|||
|
wait 1.5;
|
|||
|
//Huah.
|
|||
|
level.dunn thread dialogue_queue( "dcemp_cpd_huah2" );
|
|||
|
|
|||
|
flag_set( "lobby_check" );
|
|||
|
flag_wait( "lobby_clear" );
|
|||
|
|
|||
|
wait 1;
|
|||
|
//I got our six.
|
|||
|
level.team[ "marine2" ] dialogue_queue( "dcemp_ar2_gotoursix" );
|
|||
|
//Copy that.
|
|||
|
level.foley thread dialogue_queue( "dcemp_fly_copythat" );
|
|||
|
|
|||
|
flag_wait( "lobby_robo_death" );
|
|||
|
|
|||
|
|
|||
|
team = array_remove( level.team, level.dunn );
|
|||
|
team = array_remove( team, level.foley );
|
|||
|
|
|||
|
array_thread( team, ::set_ignoreme, false );
|
|||
|
array_thread( team, ::set_ignoreall, false );
|
|||
|
array_thread( team, ::walkdist_reset );
|
|||
|
array_thread( team, ::enable_exits );
|
|||
|
array_thread( team, ::enable_arrivals );
|
|||
|
array_thread( team, ::pathrandompercent_reset );
|
|||
|
array_thread( team, ::set_pushplayer, false );
|
|||
|
array_thread( team, ::enable_pain );
|
|||
|
|
|||
|
|
|||
|
trigger_wait_targetname( "office_ally_color_2" );
|
|||
|
flag_set( "office_go_red" );
|
|||
|
|
|||
|
team = array_removedead( team );
|
|||
|
array_thread( team, ::set_force_color, "red" );
|
|||
|
SetSavedDvar( "ai_friendlyFireBlockDuration", "2000" );
|
|||
|
}
|
|||
|
|
|||
|
lobby_moveout()
|
|||
|
{
|
|||
|
nodes = getnodearray( "lobby_start_nodes", "targetname" );
|
|||
|
|
|||
|
lobby_go = [];
|
|||
|
lobby_go[ "dunn" ] = ::lobby_go_dunn;
|
|||
|
lobby_go[ "foley" ] = ::lobby_go_foley;
|
|||
|
lobby_go[ "marine3" ] = ::lobby_go_robo;
|
|||
|
lobby_go[ "marine2" ] = ::lobby_go_rear;
|
|||
|
lobby_go[ "marine1" ] = ::lobby_go_extra;
|
|||
|
|
|||
|
foreach( node in nodes )
|
|||
|
{
|
|||
|
time = 0;
|
|||
|
name = node.script_noteworthy;
|
|||
|
switch( name )
|
|||
|
{
|
|||
|
case "dunn":
|
|||
|
time = 0;
|
|||
|
break;
|
|||
|
case "marine2":
|
|||
|
time = .5;
|
|||
|
break;
|
|||
|
case "marine3":
|
|||
|
time = .75;
|
|||
|
break;
|
|||
|
case "marine1":
|
|||
|
time = .15;
|
|||
|
break;
|
|||
|
case "foley":
|
|||
|
time = .35;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
level.team[ name ] allowedstances( "stand", "crouch", "prone" );
|
|||
|
level.team[ name ] delaythread( time, lobby_go[ name ], node );
|
|||
|
level.team[ name ] delaythread( time, ::set_fixednode_false );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
lobby_go_dunn( node )
|
|||
|
{
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self notify( "reached_path_end" );
|
|||
|
|
|||
|
flag_wait( "lobby_check" );
|
|||
|
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
self thread anim_generic( self, "corner_standR_trans_CQB_OUT_8" );
|
|||
|
wait 2.3;
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
//node anim_generic_reach( self, "combatwalk_F_spin" );
|
|||
|
|
|||
|
node thread anim_generic_run( self, "combatwalk_F_spin" );
|
|||
|
length = getanimlength( getanim_generic( "combatwalk_F_spin" ) );
|
|||
|
|
|||
|
wait length - 1.5;
|
|||
|
|
|||
|
//Clear.
|
|||
|
self thread dialogue_queue( "dcemp_cpd_clear" );
|
|||
|
|
|||
|
thread flag_set_delayed( "lobby_clear", 1 );
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self follow_path( node );
|
|||
|
|
|||
|
self walkdist_reset();
|
|||
|
self enable_exits();
|
|||
|
self enable_arrivals();
|
|||
|
self disable_pain();
|
|||
|
self disable_surprise();
|
|||
|
self disable_bulletwhizbyreaction();
|
|||
|
self disable_cqbwalk();
|
|||
|
|
|||
|
flag_wait( "lobby_robo_death" );
|
|||
|
|
|||
|
//Son of a....
|
|||
|
self delaythread( .5, ::dialogue_queue, "dcemp_cpd_sonofa" );
|
|||
|
|
|||
|
self set_ignoreme( false );
|
|||
|
self set_ignoreall( false );
|
|||
|
self enable_dontevershoot();
|
|||
|
|
|||
|
self thread anim_generic( self, "corner_standR_flinchB" );
|
|||
|
length = getanimlength( getanim_generic( "corner_standR_flinchB" ) );
|
|||
|
wait length * .65;
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
node = getstruct( "lobby_door_open2a", "targetname" );
|
|||
|
|
|||
|
link = spawn( "script_origin", self.origin );
|
|||
|
link.angles = (0,225,0);
|
|||
|
link thread anim_generic_run( self, "exposed_tracking_turn180L" );
|
|||
|
|
|||
|
thread lobby_dunn_threads_foley_flash();
|
|||
|
|
|||
|
link waittill( "exposed_tracking_turn180L" );
|
|||
|
|
|||
|
node thread anim_generic_run( self, "breach_kick_kickerR1_enter" );
|
|||
|
|
|||
|
wait .25;
|
|||
|
|
|||
|
self disable_dontevershoot();
|
|||
|
self set_force_color( "red" );
|
|||
|
|
|||
|
wait .05;
|
|||
|
self.goalradius = 32;
|
|||
|
|
|||
|
self add_wait( ::waittill_msg, "goal" );
|
|||
|
add_wait( ::flag_wait, "office_go_red" );
|
|||
|
do_wait_any();
|
|||
|
|
|||
|
self pathrandompercent_reset();
|
|||
|
self enable_pain();
|
|||
|
self enable_surprise();
|
|||
|
self enable_bulletwhizbyreaction();
|
|||
|
self set_pushplayer( false );
|
|||
|
}
|
|||
|
|
|||
|
lobby_dunn_threads_foley_flash()
|
|||
|
{
|
|||
|
wait 1.15;
|
|||
|
|
|||
|
if( level.foley ent_flag( "lobby_door_ready" ) )
|
|||
|
level.foley.lobby_node thread anim_generic( level.foley, "CQB_stand_grenade_throw" );
|
|||
|
}
|
|||
|
|
|||
|
lobby_go_foley( node )
|
|||
|
{
|
|||
|
self ent_flag_init( "lobby_door_ready" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self notify( "reached_path_end" );
|
|||
|
|
|||
|
flag_wait( "lobby_clear" );
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
wait 2;
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node anim_generic_reach( self, "patrol_jog_360_once" );
|
|||
|
node thread anim_generic( self, "patrol_jog_360_once" );
|
|||
|
length = getanimlength( getanim_generic( "patrol_jog_360_once" ) );
|
|||
|
wait ( length * .68 ) - .05;
|
|||
|
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self.lobby_node = node;
|
|||
|
self follow_path( node );
|
|||
|
flag_set( "lobby_door_ready" );
|
|||
|
self disable_cqbwalk();
|
|||
|
|
|||
|
temp = getstruct( "lobby_arrive_foley", "targetname" );
|
|||
|
temp anim_generic_reach( self, "run_2_stand_90R" );
|
|||
|
temp anim_generic( self, "run_2_stand_90R" );
|
|||
|
|
|||
|
self.goalradius = 8;
|
|||
|
self setgoalnode( node );
|
|||
|
self ent_flag_set( "lobby_door_ready" );
|
|||
|
|
|||
|
flag_wait( "office_player_near_door" );
|
|||
|
self thread anim_generic( self, "stand_exposed_wave_down" );
|
|||
|
|
|||
|
self disable_pain();
|
|||
|
self disable_surprise();
|
|||
|
self disable_bulletwhizbyreaction();
|
|||
|
|
|||
|
flag_wait( "lobby_robo_death" );
|
|||
|
|
|||
|
//Contaaact!!!
|
|||
|
self delaythread( 1.5, ::dialogue_queue, "dcemp_fly_contact" );
|
|||
|
self anim_generic_gravity( self, "exposed_idle_reactB" );
|
|||
|
|
|||
|
flag_wait( "lobby_door_kick" );
|
|||
|
|
|||
|
self walkdist_reset();
|
|||
|
self set_ignoreme( false );
|
|||
|
self set_ignoreall( false );
|
|||
|
self enable_arrivals();
|
|||
|
|
|||
|
wait 2.25;
|
|||
|
|
|||
|
node thread anim_generic( self, "stand_2_run_F_2" );
|
|||
|
length = getanimlength( getanim_generic( "stand_2_run_F_2" ) );
|
|||
|
wait length * .82;
|
|||
|
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
self thread anim_generic_run( self, "run_turn_R45" );
|
|||
|
|
|||
|
self delaythread( 2, ::enable_exits );
|
|||
|
|
|||
|
self set_force_color( "red" );
|
|||
|
wait .05;
|
|||
|
self.goalradius = 32;
|
|||
|
|
|||
|
self add_wait( ::waittill_msg, "goal" );
|
|||
|
add_wait( ::flag_wait, "office_go_red" );
|
|||
|
do_wait_any();
|
|||
|
|
|||
|
self pathrandompercent_reset();
|
|||
|
self enable_pain();
|
|||
|
self enable_surprise();
|
|||
|
self enable_bulletwhizbyreaction();
|
|||
|
self set_pushplayer( false );
|
|||
|
}
|
|||
|
|
|||
|
lobby_go_robo( node )
|
|||
|
{
|
|||
|
self disable_exits();
|
|||
|
self anim_generic_gravity_run( self, "stand_2_run_L" );
|
|||
|
self anim_generic_gravity_run( self, "run_turn_L45" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
self waittill( "goal" );
|
|||
|
self enable_exits();
|
|||
|
|
|||
|
self notify( "reached_path_end" );
|
|||
|
|
|||
|
flag_wait( "lobby_clear" );
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self follow_path( node );
|
|||
|
self disable_cqbwalk();
|
|||
|
|
|||
|
flag_wait( "lobby_door_ready" );
|
|||
|
flag_wait( "office_player_near_door" );
|
|||
|
|
|||
|
wait .5;
|
|||
|
|
|||
|
if( level.foley ent_flag( "lobby_door_ready" ) )
|
|||
|
{
|
|||
|
self setlookatentity( level.foley );
|
|||
|
self delaycall( 1, ::setlookatentity );
|
|||
|
}
|
|||
|
wait .5;
|
|||
|
|
|||
|
node = getstruct( "lobby_door_open", "targetname" );
|
|||
|
door = getent( "lobby_door_left", "targetname" );
|
|||
|
parts = getentarray( door.target, "targetname" );
|
|||
|
array_call( parts, ::linkto, door );
|
|||
|
|
|||
|
level.team[ "marine3" ] delaythread( 1.5, ::dialogue_queue, "dcemp_ar3_star" );
|
|||
|
node thread anim_generic( self, "hunted_open_barndoor" );
|
|||
|
door thread hunted_style_door_open( "door_wood_slow_creaky_open" );
|
|||
|
|
|||
|
length = getanimlength( getanim_generic( "hunted_open_barndoor" ) );
|
|||
|
wait ( length * .77 ) - .1;
|
|||
|
|
|||
|
self thread lobby_enemy_suppressive_fire();
|
|||
|
|
|||
|
wait .1;
|
|||
|
|
|||
|
node = spawnstruct();
|
|||
|
node.origin = self.origin;
|
|||
|
node.angles = (0,48,0);
|
|||
|
|
|||
|
flag_set( "lobby_robo_death" );
|
|||
|
|
|||
|
node thread anim_generic( self, "airport_security_guard_pillar_death_R" );
|
|||
|
length = getanimlength( getanim_generic( "airport_security_guard_pillar_death_R" ) );
|
|||
|
|
|||
|
self delaythread( .1, animscripts\shared::DropAllAIWeapons );
|
|||
|
|
|||
|
wait length - .1;
|
|||
|
|
|||
|
self stop_magic_bullet_shield();
|
|||
|
self.allowdeath = true;
|
|||
|
self.nointerrupt = true;
|
|||
|
self.a.nodeath = 1;
|
|||
|
self.noragdoll = 1;
|
|||
|
self kill();
|
|||
|
}
|
|||
|
|
|||
|
lobby_go_rear( node )
|
|||
|
{
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self notify( "reached_path_end" );
|
|||
|
|
|||
|
flag_wait( "lobby_clear" );
|
|||
|
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
wait .5;
|
|||
|
|
|||
|
node = getnode( "lobby_lookaround_node", "target" );
|
|||
|
|
|||
|
self.goalradius = 16;
|
|||
|
self setgoalnode( node );
|
|||
|
|
|||
|
wait 5.5;
|
|||
|
self set_pushplayer( false );
|
|||
|
|
|||
|
node = getnode( "lobby_rear_security", "targetname" );
|
|||
|
self follow_path( node );
|
|||
|
self disable_cqbwalk();
|
|||
|
|
|||
|
if( flag( "office_go_red" ) )
|
|||
|
return;
|
|||
|
level endon( "office_go_red" );
|
|||
|
|
|||
|
flag_wait( "lobby_door_kick" );
|
|||
|
|
|||
|
node = getnode( "office_entry_cover_right", "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
}
|
|||
|
|
|||
|
lobby_go_extra( node )
|
|||
|
{
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self notify( "reached_path_end" );
|
|||
|
|
|||
|
flag_wait( "lobby_clear" );
|
|||
|
self enable_cqbwalk();
|
|||
|
wait 1.65;
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self follow_path( node );
|
|||
|
self disable_cqbwalk();
|
|||
|
|
|||
|
if( flag( "office_go_red" ) )
|
|||
|
return;
|
|||
|
level endon( "office_go_red" );
|
|||
|
|
|||
|
flag_wait( "lobby_door_kick" );
|
|||
|
|
|||
|
wait 2.5;
|
|||
|
|
|||
|
node = getnode( "lobby_end_dunn", "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/************************************************************************************************************/
|
|||
|
/* OFFICE */
|
|||
|
/************************************************************************************************************/
|
|||
|
office_main()
|
|||
|
{
|
|||
|
thread handle_color_advance( "office_ally_color_", 2, 6 );
|
|||
|
array_thread( getentarray( "office_enemies_wave1", "script_noteworthy" ), ::add_spawn_function, ::office_enemies_wave1 );
|
|||
|
array_thread( getentarray( "office_enemies_wave1_runner", "targetname" ), ::add_spawn_function, ::office_enemies_wave1_runner );
|
|||
|
array_thread( getentarray( "office_enemies_wave3", "targetname" ), ::add_spawn_function, ::flag_set, "office_enemies_wave3" );
|
|||
|
getent( "office_flickerlight1", "targetname" ) thread flickerlight_flares();
|
|||
|
|
|||
|
snd = getent( "office_suppressive_fire_target", "targetname" );
|
|||
|
add_wait( ::flag_wait, "office_ally_color_1" );
|
|||
|
add_func( ::activate_trigger_with_targetname, "office_ally_color_1" );
|
|||
|
snd add_call( ::playsound, "scn_dcemp_interior_movement" );
|
|||
|
add_func( maps\_weather::rainHard, 15 );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
flag_wait( "office_main" );
|
|||
|
|
|||
|
//wave 1
|
|||
|
activate_trigger( "office_enemies_wave1", "target" );
|
|||
|
|
|||
|
flag_wait( "lobby_robo_death" );
|
|||
|
flag_clear( "_weather_lightning_enabled" );
|
|||
|
array_thread( level.team, ::delaythread, .1, ::set_fixednode_true );
|
|||
|
|
|||
|
delaythread( 1.5, ::autosave_by_name, "office_main" );
|
|||
|
|
|||
|
thread battlechatter_on();
|
|||
|
//thread office_bcs_fix();
|
|||
|
|
|||
|
//wait for certain number to die or player to run way too far
|
|||
|
enemies = get_living_ai_array( "office_enemies_wave1", "script_noteworthy" );
|
|||
|
add_wait( ::waittill_dead_or_dying, enemies, 2 );
|
|||
|
add_wait( ::trigger_wait, "office_enemies_wave1_runner", "target" );
|
|||
|
add_abort( ::flag_wait, "office_ally_color_4" );
|
|||
|
do_wait();
|
|||
|
|
|||
|
//turn off intro fx and turn on rain fx
|
|||
|
fx_intro_pause();
|
|||
|
flag_set( "rain_fx" );
|
|||
|
|
|||
|
//wave 2
|
|||
|
enemies = get_living_ai_array( "office_enemies_wave1", "script_noteworthy" );
|
|||
|
spawners = getentarray( "office_enemies_wave2", "targetname" );
|
|||
|
for( i = 0; i < enemies.size; i++ )
|
|||
|
spawners[ i ] delete();
|
|||
|
|
|||
|
//blue retreat 1
|
|||
|
array_thread( enemies, ::set_force_color, "blue" );
|
|||
|
activate_trigger_with_targetname( "office_enemy_color_1" );
|
|||
|
activate_trigger( "office_enemies_wave2", "target" );
|
|||
|
|
|||
|
//make 1 friendly killable( 3 have bs )
|
|||
|
level.team[ "marine1" ] stop_magic_bullet_shield();
|
|||
|
wait .1;
|
|||
|
|
|||
|
//grab guys and...
|
|||
|
enemies = get_living_ai_array( "office_enemies_wave1", "script_noteworthy" );
|
|||
|
enemies = array_combine( enemies, get_living_ai_array( "office_enemies_wave2", "script_noteworthy" ) );
|
|||
|
|
|||
|
//...do the next two retreats
|
|||
|
//retreat 1
|
|||
|
add_wait( ::waittill_dead_or_dying, enemies, 4 );
|
|||
|
add_func( ::activate_trigger_with_targetname, "office_enemy_color_2" );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
//retreat 2
|
|||
|
add_wait( ::waittill_dead_or_dying, enemies, 8 );
|
|||
|
add_func( ::delaythread, .2, ::activate_trigger_with_targetname, "office_enemy_color_3" );
|
|||
|
add_func( ::kill_random_teammate );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
//wait for player to be near office 2
|
|||
|
flag_wait( "office_predict_wave3" );
|
|||
|
//sun shadow optimization
|
|||
|
setsaveddvar( "sm_sunShadowScale", 0.5 );
|
|||
|
|
|||
|
thread autosave_by_name( "office2" );
|
|||
|
|
|||
|
//wave 3
|
|||
|
enemies = get_living_ai_array( "office_enemies_wave1", "script_noteworthy" );
|
|||
|
enemies = array_combine( enemies, get_living_ai_array( "office_enemies_wave2", "script_noteworthy" ) );
|
|||
|
spawners = getentarray( "office_enemies_wave3", "targetname" );
|
|||
|
|
|||
|
if( enemies.size < spawners.size )
|
|||
|
{
|
|||
|
for( i = 0; i < enemies.size; i++ )
|
|||
|
spawners[ i ] delete();
|
|||
|
}
|
|||
|
else
|
|||
|
array_call( spawners, ::delete );
|
|||
|
|
|||
|
thread office_enemies_wait_spawn_final();
|
|||
|
|
|||
|
add_wait( ::flag_wait, "office_enemies_wave1_dead" );
|
|||
|
add_wait( ::flag_wait, "office_enemies_wave2_dead" );
|
|||
|
add_wait( ::flag_wait, "office_enemies_wave3_dead" );
|
|||
|
add_func( ::flag_set, "office_done" );
|
|||
|
add_func( ::delaythread, 2, ::autosave_by_name, "office_done" );
|
|||
|
add_func( ::delaythread, 2, ::flag_set, "parking_main" );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
thread office_kill_enemies();
|
|||
|
}
|
|||
|
|
|||
|
office_bcs_fix()
|
|||
|
{
|
|||
|
wait 9.5;
|
|||
|
|
|||
|
foreach( member in level.team )
|
|||
|
member._animActive = 0;
|
|||
|
}
|
|||
|
|
|||
|
office_enemies_wait_spawn_final()
|
|||
|
{
|
|||
|
flag_wait( "office_enemies_wave3" );
|
|||
|
|
|||
|
wait .5;
|
|||
|
|
|||
|
ai = getaiarray( "axis" );
|
|||
|
add_wait( ::waittill_dead_or_dying, ai , ai.size - 1 );
|
|||
|
add_func( ::battlechatter_off );
|
|||
|
thread do_wait();
|
|||
|
}
|
|||
|
|
|||
|
office_kill_enemies()
|
|||
|
{
|
|||
|
flag_wait( "parking_player_jumped_down" );
|
|||
|
|
|||
|
if( flag( "office_done" ) )
|
|||
|
return;
|
|||
|
|
|||
|
if( isalive( level.team[ "marine1" ] ) )
|
|||
|
level.team[ "marine1" ] kill();
|
|||
|
|
|||
|
ai = getaiarray( "axis" );
|
|||
|
|
|||
|
foreach( member in ai )
|
|||
|
{
|
|||
|
if( isalive( member ) )
|
|||
|
{
|
|||
|
member.diequietly = true;
|
|||
|
member kill();
|
|||
|
}
|
|||
|
wait randomfloat( .5 );
|
|||
|
}
|
|||
|
|
|||
|
wait .1;
|
|||
|
|
|||
|
nodes = getstructarray( "parking_start_points", "targetname" );
|
|||
|
foreach( node in nodes )
|
|||
|
{
|
|||
|
level.team[ node.script_noteworthy ] thread teleport_actor( node );
|
|||
|
}
|
|||
|
|
|||
|
flag_set( "parking_main" );
|
|||
|
}
|
|||
|
|
|||
|
/************************************************************************************************************/
|
|||
|
/* PARKING */
|
|||
|
/************************************************************************************************************/
|
|||
|
parking_main()
|
|||
|
{
|
|||
|
array_thread( getentarray( "parking_btr_guys", "targetname" ), ::add_spawn_function, ::parking_btr_guys );
|
|||
|
|
|||
|
thread parking_drone();
|
|||
|
thread parking_dead_check();
|
|||
|
thread parking_high_spec();
|
|||
|
thread plaza_flare_fx();
|
|||
|
|
|||
|
add_wait( ::flag_wait, "parking_vision_set" );
|
|||
|
add_func( ::vision_set_parking );
|
|||
|
level.player add_func( ::blend_movespeedscale, .8 );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
add_wait( ::flag_wait, "parking_player_near_btr" );
|
|||
|
add_func( ::flag_set, "rain_fx2" );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
thread parking_lights_setup();
|
|||
|
|
|||
|
flag_wait( "office_done" );
|
|||
|
thread battlechatter_off();
|
|||
|
|
|||
|
if( level.start_point != "parking" )
|
|||
|
{
|
|||
|
level.team[ "marine2" ].script_noteworthy = "marine1";
|
|||
|
level.team[ "marine2" ].animname = "marine1";
|
|||
|
level.team[ "marine1" ] = level.team[ "marine2" ];
|
|||
|
level.team[ "marine2" ] = undefined;
|
|||
|
}
|
|||
|
|
|||
|
flag_wait( "parking_main" );
|
|||
|
SetSavedDvar( "ai_friendlyFireBlockDuration", "0" );
|
|||
|
|
|||
|
parking_dialogue();
|
|||
|
|
|||
|
array_thread( level.team, ::pathrandompercent_zero );
|
|||
|
array_thread( level.team, ::set_pushplayer, true );
|
|||
|
array_thread( level.team, ::disable_pain );
|
|||
|
array_thread( level.team, ::set_ignoreall, true );
|
|||
|
array_thread( level.team, ::disable_ai_color );
|
|||
|
array_thread( level.team, ::ent_flag_init, "parking_start_at_node" );
|
|||
|
array_thread( level.team, ::ent_flag_init, "parking_start_at_node2" );
|
|||
|
array_thread( level.team, ::delaythread, .1, ::set_fixednode_false );
|
|||
|
|
|||
|
|
|||
|
level.foley thread parking_start( "parking_btr_node_foley" );
|
|||
|
level.dunn delaythread( 1, ::parking_start, "parking_btr_node_dunn" );
|
|||
|
level.team[ "marine1" ] delaythread( 1.5, ::parking_start, "parking_btr_node_marine1" );
|
|||
|
|
|||
|
flag_clear( "_weather_lightning_enabled" );
|
|||
|
|
|||
|
parking_building_scene();
|
|||
|
|
|||
|
array_thread( level.team, ::walkdist_zero );
|
|||
|
flag_set( "parking_moveout" );
|
|||
|
flag_set( "_weather_lightning_enabled" );
|
|||
|
|
|||
|
parking_dialogue2();
|
|||
|
|
|||
|
flag_wait( "parking_btr_guys_dead" );
|
|||
|
|
|||
|
thread autosave_by_name( "parking_lot_done" );
|
|||
|
}
|
|||
|
|
|||
|
parking_lights_setup()
|
|||
|
{
|
|||
|
flag_wait_any( "parking_player_jumped_down", "parking_main" );
|
|||
|
lights = getentarray( "parking_lighting_primary", "script_noteworthy" );
|
|||
|
array_call( lights, ::setlightcolor, (.85, .85, 1) );
|
|||
|
flag_set( "spotlight_lightning" );
|
|||
|
}
|
|||
|
|
|||
|
parking_dialogue()
|
|||
|
{
|
|||
|
parking_dialogue_wait();
|
|||
|
if( flag( "parking_player_jumped_down" ) )
|
|||
|
return;
|
|||
|
|
|||
|
level endon( "parking_open_fire" );
|
|||
|
|
|||
|
level.dunn dialogue_queue( "dcemp_cpd_huaah" );
|
|||
|
wait .25;
|
|||
|
level.team[ "marine1" ] dialogue_queue( "dcemp_ar2_clear" );
|
|||
|
level.foley thread dialogue_queue( "dcemp_fly_roomclear" );
|
|||
|
}
|
|||
|
|
|||
|
parking_dialogue_wait()
|
|||
|
{
|
|||
|
if( flag( "parking_player_jumped_down" ) )
|
|||
|
return;
|
|||
|
level endon( "parking_player_jumped_down" );
|
|||
|
|
|||
|
foreach( actor in level.team )
|
|||
|
{
|
|||
|
while( actor.isSpeaking )
|
|||
|
wait .1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
parking_dialogue2()
|
|||
|
{
|
|||
|
level endon( "parking_open_fire" );
|
|||
|
|
|||
|
array_wait( level.team, "parking_start_at_node2" );
|
|||
|
|
|||
|
wait 1.5;
|
|||
|
|
|||
|
//Smoke 'em.
|
|||
|
level.foley dialogue_queue( "dcemp_fly_smokeem" );
|
|||
|
|
|||
|
flag_set( "parking_open_fire" );
|
|||
|
}
|
|||
|
|
|||
|
parking_building_scene()
|
|||
|
{
|
|||
|
if( flag( "parking_player_jumped_down" ) )
|
|||
|
return;
|
|||
|
|
|||
|
level endon( "parking_open_fire" );
|
|||
|
|
|||
|
level.foley waittill( "parking_start_at_node" );
|
|||
|
flag_wait( "parking_vision_set" );
|
|||
|
|
|||
|
level thread dcemp_lightningFlash( "triple" );
|
|||
|
|
|||
|
level.foley dialogue_queue( "dcemp_fly_oldexecbuilding" );
|
|||
|
level.dunn thread dialogue_queue( "dcemp_cpd_gottagoout" );
|
|||
|
}
|
|||
|
|
|||
|
parking_start( name )
|
|||
|
{
|
|||
|
self thread parking_open_fire();
|
|||
|
|
|||
|
node = getnode( name, "targetname" );
|
|||
|
self parking_start_moveup( node );
|
|||
|
|
|||
|
self parking_traverse_from_office();
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
switch( self.script_noteworthy )
|
|||
|
{
|
|||
|
case "marine1":
|
|||
|
self thread parking_go_marine1( node );
|
|||
|
self thread parking_backup_marine1( node );
|
|||
|
break;
|
|||
|
case "dunn":
|
|||
|
self thread parking_go_dunn( node );
|
|||
|
self thread parking_backup_dunn( node );
|
|||
|
break;
|
|||
|
case "foley":
|
|||
|
self thread parking_go_foley( node );
|
|||
|
self thread parking_backup_foley( node );
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
parking_start_moveup( node )
|
|||
|
{
|
|||
|
if( flag( "parking_open_fire" ) )
|
|||
|
return;
|
|||
|
level endon( "parking_open_fire" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
self ent_flag_set( "parking_start_at_node" );
|
|||
|
|
|||
|
flag_wait( "parking_moveout" );
|
|||
|
|
|||
|
switch( self.script_noteworthy )
|
|||
|
{
|
|||
|
case "dunn":
|
|||
|
wait 1.5;
|
|||
|
case "marine1":
|
|||
|
wait .25;
|
|||
|
case "foley":
|
|||
|
wait .5;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
parking_open_fire()
|
|||
|
{
|
|||
|
flag_wait_either( "parking_moveout3", "parking_open_fire" );
|
|||
|
|
|||
|
node = getent( "parking_btr_aim_node", "targetname" );
|
|||
|
self setentitytarget( node );
|
|||
|
self enable_dontevershoot();
|
|||
|
self set_ignoreall( false );
|
|||
|
|
|||
|
self.oldacc = self.accuracy;
|
|||
|
self.oldbase = self.baseaccuracy;
|
|||
|
self.oldgrenade = self.grenadeammo;
|
|||
|
self.baseaccuracy = 100;
|
|||
|
self.accuracy = 100;
|
|||
|
self.grenadeammo = 0;
|
|||
|
|
|||
|
flag_wait( "parking_open_fire" );
|
|||
|
|
|||
|
while( !flag( "parking_btr_guys_dead" ) )
|
|||
|
{
|
|||
|
flashorigin = self gettagorigin( "TAG_FLASH" );
|
|||
|
vec1 = vectornormalize( node.origin - flashorigin );
|
|||
|
vec2 = anglestoforward( self gettagAngles( "TAG_FLASH" ) );
|
|||
|
if( vectordot( vec1, vec2 ) > .7 )
|
|||
|
self shoot();
|
|||
|
else
|
|||
|
if( !player_looking_at( self geteye() ) && distancesquared( self.origin, level.player.origin ) > squared( 512 ) )
|
|||
|
{
|
|||
|
array = bullettrace( self geteye(), node.origin, false, self );
|
|||
|
if( !isdefined( array[ "entity" ] ) || !isplayer( array[ "entity" ] ) )
|
|||
|
magicbullet( self.weapon, self geteye(), node.origin );
|
|||
|
}
|
|||
|
wait .1;
|
|||
|
}
|
|||
|
|
|||
|
self clearentitytarget();
|
|||
|
self notify( "stop_custom_aim" );
|
|||
|
self disable_dontevershoot();
|
|||
|
self.baseaccuracy = self.oldbase;
|
|||
|
self.accuracy = self.oldacc;
|
|||
|
self.grenadeammo = self.oldgrenade;
|
|||
|
}
|
|||
|
|
|||
|
parking_go_marine1( node )
|
|||
|
{
|
|||
|
if( flag( "parking_open_fire" ) )
|
|||
|
return;
|
|||
|
level endon( "parking_open_fire" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
flag_wait( "parking_checking_body" );
|
|||
|
|
|||
|
wait 1.0;
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
node anim_generic_reach( self, "combatwalk_F_spin" );
|
|||
|
node anim_generic_run( self, "combatwalk_F_spin" );
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
flag_wait( "parking_moveout2" );
|
|||
|
self disable_cqbwalk();
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
flag_wait( "parking_player_near_btr" );
|
|||
|
|
|||
|
//Got a visual on three tangos.
|
|||
|
self thread dialogue_queue( "dcemp_ar2_gotavisual" );
|
|||
|
|
|||
|
self.a.movement = "stop";
|
|||
|
self anim_generic( self, "CornerStndR_alert_signal_enemy_spotted" );
|
|||
|
|
|||
|
flag_set( "parking_moveout3" );
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
//Clear shot.
|
|||
|
self delaythread( 1, ::dialogue_queue, "dcemp_ar2_clearshot" );
|
|||
|
|
|||
|
self ent_flag_set( "parking_start_at_node2" );
|
|||
|
|
|||
|
// self anim_generic_run( self, "CornerCrR_alert_2_lean" );
|
|||
|
// self animcustom( ::CornerCrR_aim );
|
|||
|
}
|
|||
|
|
|||
|
parking_go_foley( node )
|
|||
|
{
|
|||
|
if( flag( "parking_open_fire" ) )
|
|||
|
return;
|
|||
|
level endon( "parking_open_fire" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
flag_wait( "parking_checking_body" );
|
|||
|
wait 2.5;
|
|||
|
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
flag_wait( "parking_moveout2" );
|
|||
|
self disable_cqbwalk();
|
|||
|
|
|||
|
//Keep Quiet<65>
|
|||
|
self delaythread( 2, ::dialogue_queue, "dcemp_fly_keepquiet" );
|
|||
|
|
|||
|
node = getnode( "parking_moveup2_foley", "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
flag_wait( "parking_moveout3" );
|
|||
|
|
|||
|
//Stay low, move into position.
|
|||
|
self thread dialogue_queue( "dcemp_fly_moveintopos" );
|
|||
|
|
|||
|
self.a.movement = "stop";
|
|||
|
self anim_generic( self, "CornerStndR_alert_signal_move_out" );
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self ent_flag_set( "parking_start_at_node2" );
|
|||
|
}
|
|||
|
|
|||
|
parking_go_dunn( node )
|
|||
|
{
|
|||
|
if( flag( "parking_open_fire" ) )
|
|||
|
return;
|
|||
|
level endon( "parking_open_fire" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
flag_wait( "parking_player_jumped_down" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
|
|||
|
//Dunn. Check for vitals, we'll cover you.
|
|||
|
level.foley thread dialogue_queue( "dcemp_fly_checkvitals" );
|
|||
|
|
|||
|
node anim_reach_solo( self, "hunted_woundedhostage_check" );
|
|||
|
|
|||
|
guys = [];
|
|||
|
guys[ guys.size ] = self;
|
|||
|
guys[ guys.size ] = level.parking_dead_check_guy;
|
|||
|
|
|||
|
flag_set( "parking_checking_body" );
|
|||
|
|
|||
|
node notify( "stop_loop" );
|
|||
|
node anim_single( guys, "hunted_woundedhostage_check" );
|
|||
|
|
|||
|
//He's a gonner.
|
|||
|
self thread dialogue_queue( "dcemp_cpd_gonner" );
|
|||
|
|
|||
|
node anim_generic_run( self, "hunted_woundedhostage_check_soldier_end" );
|
|||
|
|
|||
|
flag_set( "parking_moveout2" );
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 100;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
flag_wait( "parking_moveout3" );
|
|||
|
|
|||
|
node = getnode( "parking_moveup2_marine1", "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self ent_flag_set( "parking_start_at_node2" );
|
|||
|
|
|||
|
self anim_generic_run( self, "CornerStndR_alert_2_lean" );
|
|||
|
self animcustom( ::CornerStndR_aim );
|
|||
|
}
|
|||
|
|
|||
|
parking_backup_marine1( node )
|
|||
|
{
|
|||
|
self endon( "parking_start_at_node2" );
|
|||
|
|
|||
|
flag_wait( "parking_open_fire" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self anim_stopanimscripted();
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
}
|
|||
|
|
|||
|
parking_backup_foley( node )
|
|||
|
{
|
|||
|
self endon( "parking_start_at_node2" );
|
|||
|
|
|||
|
flag_wait( "parking_open_fire" );
|
|||
|
|
|||
|
node = getnode( "parking_moveup2_foley", "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self anim_stopanimscripted();
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
}
|
|||
|
|
|||
|
parking_backup_dunn( node )
|
|||
|
{
|
|||
|
self endon( "parking_start_at_node2" );
|
|||
|
|
|||
|
flag_wait( "parking_open_fire" );
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
node = getnode( "parking_moveup2_marine1", "targetname" );
|
|||
|
|
|||
|
self anim_stopanimscripted();
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = node.radius;
|
|||
|
}
|
|||
|
|
|||
|
parking_btr_guys_dialogue()
|
|||
|
{
|
|||
|
struct = getstruct( "parking_btr_anim_node", "targetname" );
|
|||
|
level.parking_btr_guys[ 3 ] = spawn( "script_origin", struct.origin + (0,0,40) );
|
|||
|
level.parking_btr_guys[ 4 ] = spawn( "script_origin", struct.origin + (0,0,40000) );
|
|||
|
guys = level.parking_btr_guys;
|
|||
|
|
|||
|
guys[ 3 ] play_sound_on_entity( "dcemp_rs1_cananyone" );
|
|||
|
guys[ 3 ] play_sound_on_entity( "dcemp_rs2_shutup" );
|
|||
|
|
|||
|
if( !flag( "parking_btr_shot_at" ) )
|
|||
|
{
|
|||
|
guys[ 0 ] PlaySound( "dcemp_rs3_wecanhearyou", "sounddone" );
|
|||
|
guys[ 0 ] waittill( "sounddone" );
|
|||
|
}
|
|||
|
else
|
|||
|
guys[ 4 ] play_sound_on_entity( "dcemp_rs3_wecanhearyou" );
|
|||
|
if( !flag( "parking_btr_shot_at" ) )
|
|||
|
{
|
|||
|
guys[ 1 ] playsound( "dcemp_rs4_howthehell", "sounddone" );
|
|||
|
guys[ 1 ] waittill( "sounddone" );
|
|||
|
}
|
|||
|
else
|
|||
|
guys[ 4 ] play_sound_on_entity( "dcemp_rs4_howthehell" );
|
|||
|
if( !flag( "parking_btr_shot_at" ) )
|
|||
|
{
|
|||
|
guys[ 2 ] playsound( "dcemp_rs5_shutupandhelp", "sounddone" );
|
|||
|
guys[ 2 ] waittill( "sounddone" );
|
|||
|
}
|
|||
|
else
|
|||
|
guys[ 4 ] play_sound_on_entity( "dcemp_rs5_shutupandhelp" );
|
|||
|
|
|||
|
guys[ 3 ] play_sound_on_entity( "dcemp_rs1_getusout" );
|
|||
|
guys[ 3 ] play_sound_on_entity( "dcemp_rs2_whatthehell" );
|
|||
|
|
|||
|
if( !flag( "parking_btr_shot_at" ) )
|
|||
|
{
|
|||
|
guys[ 2 ] playsound( "dcemp_rs5_juststaycalm", "sounddone" );
|
|||
|
guys[ 2 ] waittill( "sounddone" );
|
|||
|
}
|
|||
|
else
|
|||
|
guys[ 4 ] play_sound_on_entity( "dcemp_rs5_juststaycalm" );
|
|||
|
if( !flag( "parking_btr_shot_at" ) )
|
|||
|
{
|
|||
|
guys[ 1 ] playsound( "dcemp_rs4_notbudging", "sounddone" );
|
|||
|
guys[ 1 ] waittill( "sounddone" );
|
|||
|
}
|
|||
|
else
|
|||
|
guys[ 4 ] play_sound_on_entity( "dcemp_rs4_notbudging" );
|
|||
|
if( !flag( "parking_btr_shot_at" ) )
|
|||
|
{
|
|||
|
guys[ 0 ] playsound( "dcemp_rs3_maybewecan", "sounddone" );
|
|||
|
guys[ 0 ] waittill( "sounddone" );
|
|||
|
}
|
|||
|
else
|
|||
|
guys[ 4 ] play_sound_on_entity( "dcemp_rs3_maybewecan" );
|
|||
|
if( !flag( "parking_btr_shot_at" ) )
|
|||
|
{
|
|||
|
guys[ 2 ] playsound( "dcemp_rs5_wedonthavetime", "sounddone" );
|
|||
|
guys[ 2 ] waittill( "sounddone" );
|
|||
|
}
|
|||
|
else
|
|||
|
guys[ 4 ] play_sound_on_entity( "dcemp_rs5_wedonthavetime" );
|
|||
|
|
|||
|
guys[ 3 ] play_sound_on_entity( "dcemp_rs2_ouch" );
|
|||
|
guys[ 3 ] play_sound_on_entity( "dcemp_rs1_comeon" );
|
|||
|
|
|||
|
guys[ 3 ] delete();
|
|||
|
guys[ 4 ] delete();
|
|||
|
}
|
|||
|
|
|||
|
parking_btr_guys()
|
|||
|
{
|
|||
|
//self endon( "death" );
|
|||
|
|
|||
|
node = getstruct( self.target, "targetname" );
|
|||
|
|
|||
|
self.a.nodeath = true;
|
|||
|
self.skipdeathanim = true;
|
|||
|
self.noragdoll = true;
|
|||
|
self thread magic_bullet_shield();
|
|||
|
|
|||
|
self addAIEventListener( "grenade danger" );
|
|||
|
//self addAIEventListener( "gunshot" );
|
|||
|
self addAIEventListener( "bulletwhizby" );
|
|||
|
|
|||
|
self add_wait( ::waittill_msg, "death" );
|
|||
|
self add_wait( ::waittill_msg, "damage" );
|
|||
|
self add_wait( ::waittill_msg, "ai_event" );
|
|||
|
add_func( ::flag_set, "parking_open_fire" );
|
|||
|
add_func( ::flag_set, "parking_btr_shot_at" );
|
|||
|
thread do_wait_any();
|
|||
|
|
|||
|
if( !isdefined( level.parking_btr_guys ) )
|
|||
|
level.parking_btr_guys = [];
|
|||
|
level.parking_btr_guys[ level.parking_btr_guys.size ] = self;
|
|||
|
|
|||
|
if( level.parking_btr_guys.size == 3 )
|
|||
|
thread parking_btr_guys_dialogue();
|
|||
|
|
|||
|
switch( self.script_animation )
|
|||
|
{
|
|||
|
case "DCemp_BTR_moment_guy1":
|
|||
|
node anim_generic( self, "DCemp_BTR_moment_climb_guy1" );
|
|||
|
if( !flag( "parking_open_fire" ) )
|
|||
|
node thread anim_generic_loop( self, "DCemp_BTR_moment_idle_guy1" );
|
|||
|
|
|||
|
flag_wait( "parking_btr_shot_at" );
|
|||
|
self notify( "stop_loop" );
|
|||
|
|
|||
|
self stopanimscripted();
|
|||
|
|
|||
|
node thread anim_generic( self, self.script_animation );
|
|||
|
break;
|
|||
|
|
|||
|
case "DCemp_BTR_moment_guy2":
|
|||
|
node anim_generic( self, "DCemp_BTR_moment_climb_guy2" );
|
|||
|
if( !flag( "parking_open_fire" ) )
|
|||
|
node thread anim_generic_loop( self, "DCemp_BTR_moment_idle_guy2" );
|
|||
|
|
|||
|
flag_wait( "parking_btr_shot_at" );
|
|||
|
self notify( "stop_loop" );
|
|||
|
|
|||
|
self stopanimscripted();
|
|||
|
|
|||
|
node thread anim_generic( self, self.script_animation );
|
|||
|
break;
|
|||
|
|
|||
|
case "DCemp_BTR_moment_guy3":
|
|||
|
parking_btr_extra_wait();
|
|||
|
|
|||
|
node anim_generic( self, "DCemp_BTR_moment_climb_guy3" );
|
|||
|
if( !flag( "parking_open_fire" ) )
|
|||
|
node thread anim_generic_loop( self, "DCemp_BTR_moment_idle_guy3" );
|
|||
|
|
|||
|
flag_wait( "parking_btr_shot_at" );
|
|||
|
self notify( "stop_loop" );
|
|||
|
|
|||
|
self stopanimscripted();
|
|||
|
|
|||
|
node thread anim_generic( self, self.script_animation );
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
self notify( "sounddone" );
|
|||
|
self stopsounds();
|
|||
|
|
|||
|
length = getanimlength( getanim_generic( self.script_animation ) );
|
|||
|
|
|||
|
wait length - randomfloatrange( 1.5, 2.25 );
|
|||
|
thread play_sound_in_space( "generic_death_russian_" + randomintrange( 1, 8 ), self geteye() );
|
|||
|
self thread bodyshot( "killshot" );
|
|||
|
|
|||
|
wait 1;
|
|||
|
|
|||
|
self.allowdeath = true;
|
|||
|
self stop_magic_bullet_shield();
|
|||
|
self kill();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/************************************************************************************************************/
|
|||
|
/* PLAZA */
|
|||
|
/************************************************************************************************************/
|
|||
|
plaza_main()
|
|||
|
{
|
|||
|
array_thread( getentarray( "plaza_enemies", "targetname" ), ::add_spawn_function, ::plaza_enemies );
|
|||
|
|
|||
|
add_wait( ::flag_wait, "parking_high_spec" );
|
|||
|
foreach( member in level.team )
|
|||
|
{
|
|||
|
if( member.script_noteworthy == "marine1" )
|
|||
|
continue;
|
|||
|
|
|||
|
member ent_flag_init( "plaza_at_tree" );
|
|||
|
member add_wait( ::ent_flag_wait, "plaza_at_tree" );
|
|||
|
}
|
|||
|
add_func( ::flag_set, "plaza_to_street" );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
add_wait( ::flag_wait, "plaza_player_exit1" );
|
|||
|
add_func( ::flag_set, "plaza_open_fire" );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
wait 1;
|
|||
|
|
|||
|
level.team[ "marine1" ] delaythread( 0, ::plaza_moveup_marine1 );
|
|||
|
level.dunn delaythread( .25, ::plaza_moveup_dunn );
|
|||
|
level.foley delaythread( .5, ::plaza_moveup_foley );
|
|||
|
|
|||
|
level.team[ "marine1" ] thread plaza_moveup_marine1_backup();
|
|||
|
level.dunn thread plaza_moveup_dunn_backup();
|
|||
|
level.foley thread plaza_moveup_foley_backup();
|
|||
|
|
|||
|
thread plaza_main2();
|
|||
|
|
|||
|
script2model_del_intro();
|
|||
|
}
|
|||
|
|
|||
|
plaza_main2()
|
|||
|
{
|
|||
|
//Move up.
|
|||
|
level.foley dialogue_queue( "dcemp_fly_moveup" );
|
|||
|
wait 1;
|
|||
|
//What about the guys inside?
|
|||
|
level.dunn dialogue_queue( "dcemp_cpd_whatabout" );
|
|||
|
//What about 'em?
|
|||
|
level.foley dialogue_queue( "dcemp_fly_whataboutem" );
|
|||
|
|
|||
|
flag_wait_either( "plaza_to_street", "plaza_show_enemies" );
|
|||
|
|
|||
|
if( !flag( "plaza_show_enemies" ) )
|
|||
|
{
|
|||
|
flag_clear( "_weather_lightning_enabled" );
|
|||
|
thread plaza_dialogue();
|
|||
|
flag_wait( "plaza_player_ready_for_throw" );
|
|||
|
|
|||
|
node = getstruct( "plaza_lookat_node", "targetname" );
|
|||
|
node add_wait( ::waittill_player_lookat_for_time, .5 );
|
|||
|
add_wait( ::_wait, 10 );
|
|||
|
add_func( ::flag_set, "plaza_show_enemies" );
|
|||
|
thread do_wait_any();
|
|||
|
|
|||
|
flag_wait( "plaza_show_enemies" );
|
|||
|
}
|
|||
|
|
|||
|
SetSavedDvar( "aim_aimAssistRangeScale", "0" );
|
|||
|
SetSavedDvar( "aim_autoAimRangeScale", "0" );
|
|||
|
SetSavedDvar( "cg_crosshairEnemyColor", "0" );
|
|||
|
|
|||
|
array_thread( level.team, ::set_ignoreall, false );
|
|||
|
array_thread( level.team, ::enable_dontevershoot );
|
|||
|
array_thread( level.team, ::disable_surprise );
|
|||
|
foreach( member in level.team )
|
|||
|
{
|
|||
|
member.oldgrenade = member.grenadeammo;
|
|||
|
member.grenadeammo = 0;
|
|||
|
}
|
|||
|
|
|||
|
thread array_spawn( getentarray( "plaza_enemies", "targetname" ), true );
|
|||
|
|
|||
|
plaza_dialogue2();
|
|||
|
|
|||
|
//Contaaact!!!
|
|||
|
level.dunn thread dialogue_queue( "dcemp_cpd_conact" );
|
|||
|
|
|||
|
thread flag_set_delayed( "_weather_lightning_enabled", 3 );
|
|||
|
flag_set( "plaza_open_fire" );
|
|||
|
|
|||
|
SetSavedDvar( "ai_friendlyFireBlockDuration", "2000" );
|
|||
|
SetSavedDvar( "aim_aimAssistRangeScale", "1" );
|
|||
|
SetSavedDvar( "aim_autoAimRangeScale", "1" );
|
|||
|
SetSavedDvar( "cg_crosshairEnemyColor", "1" );
|
|||
|
|
|||
|
level.player blend_movespeedscale_default( 1 );
|
|||
|
|
|||
|
thread battlechatter_on();
|
|||
|
activate_trigger_with_targetname( "plaza_enemy_color_1" );
|
|||
|
activate_trigger_with_targetname( "plaza_ally_color_1" );
|
|||
|
|
|||
|
//team stuff
|
|||
|
array_thread( level.team, ::disable_dontevershoot );
|
|||
|
array_thread( level.team, ::disable_cqbwalk );
|
|||
|
array_thread( level.team, ::walkdist_reset );
|
|||
|
array_thread( level.team, ::pathrandompercent_reset );
|
|||
|
array_call( level.team, ::allowedstances, "prone", "crouch", "stand" );
|
|||
|
|
|||
|
//enemy stuff
|
|||
|
thread array_spawn( getentarray( "plaza_backup", "targetname" ), true );
|
|||
|
array_thread( getaiarray( "axis" ), ::set_force_color, "blue" );
|
|||
|
|
|||
|
//more team stuff
|
|||
|
flag_wait( "plaza_flare_thrown" );
|
|||
|
array_thread( level.team, ::set_pushplayer, false );
|
|||
|
array_thread( level.team, ::set_force_color, "red" );
|
|||
|
array_thread( level.team, ::set_moveplaybackrate, 1.0 );
|
|||
|
|
|||
|
foreach( member in level.team )
|
|||
|
member.grenadeammo = member.oldgrenade;
|
|||
|
|
|||
|
thread plaza_kill_enemies();
|
|||
|
|
|||
|
//wait for the fight to be over
|
|||
|
flag_wait( "parking_plaza_guys_dead" );
|
|||
|
|
|||
|
SetSavedDvar( "ai_friendlyFireBlockDuration", "0" );
|
|||
|
thread autosave_by_name( "plaza_guys_dead" );
|
|||
|
|
|||
|
thread battlechatter_off( "allies" );
|
|||
|
|
|||
|
wait 2.5;
|
|||
|
|
|||
|
level.team[ "marine1" ] dialogue_queue( "dcemp_ar2_streetclear" );
|
|||
|
level.foley thread dialogue_queue( "dcemp_fly_oscarmike" );
|
|||
|
|
|||
|
array_thread( level.team, ::disable_ai_color );
|
|||
|
array_thread( level.team, ::walkdist_zero );
|
|||
|
array_thread( level.team, ::pathrandompercent_zero );
|
|||
|
array_thread( level.team, ::set_pushplayer, true );
|
|||
|
array_thread( level.team, ::ent_flag_init, "plaza_moveout_exit" );
|
|||
|
array_thread( level.team, ::ent_flag_init, "plaza_moveout_exit2" );
|
|||
|
|
|||
|
foreach( member in level.team )
|
|||
|
member add_wait( ::ent_flag_wait, "plaza_moveout_exit" );
|
|||
|
add_wait( ::flag_wait, "plaza_player_exit1" );
|
|||
|
add_func( ::flag_set, "plaza_moveout_exit" );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
foreach( member in level.team )
|
|||
|
member add_wait( ::ent_flag_wait, "plaza_moveout_exit2" );
|
|||
|
add_wait( ::flag_wait, "plaza_player_exit2" );
|
|||
|
add_func( ::flag_set, "plaza_moveout_exit2" );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
level.team[ "marine1" ] thread plaza_moveout_marine1();
|
|||
|
wait .5;
|
|||
|
level.dunn thread plaza_moveout_dunn();
|
|||
|
wait .25;
|
|||
|
level.foley plaza_moveout_foley();
|
|||
|
|
|||
|
array_thread( level.team, ::walkdist_reset );
|
|||
|
array_thread( level.team, ::pathrandompercent_reset );
|
|||
|
array_thread( level.team, ::set_pushplayer, false );
|
|||
|
SetSavedDvar( "ai_friendlyFireBlockDuration", "2000" );
|
|||
|
}
|
|||
|
|
|||
|
plaza_kill_enemies()
|
|||
|
{
|
|||
|
flag_wait( "tunnels_dunn_anim_end" );
|
|||
|
|
|||
|
if( flag( "parking_plaza_guys_dead" ) )
|
|||
|
return;
|
|||
|
|
|||
|
//this means the player ran back to join the fight
|
|||
|
if( flag( "parking_high_spec" ) )
|
|||
|
return;
|
|||
|
|
|||
|
ai = getaiarray( "axis" );
|
|||
|
foreach( member in ai )
|
|||
|
member.diequietly = true;
|
|||
|
array_call( ai, ::kill );
|
|||
|
}
|
|||
|
|
|||
|
plaza_moveup_marine1_backup()
|
|||
|
{
|
|||
|
if( flag( "plaza_flare_thrown" ) )
|
|||
|
return;
|
|||
|
level endon( "plaza_flare_thrown" );
|
|||
|
self endon( "plaza_moveup_kill_backup" );
|
|||
|
|
|||
|
flag_wait( "plaza_open_fire" );
|
|||
|
|
|||
|
self notify( "stop_loop" );
|
|||
|
if( isdefined( self.refnode ) )
|
|||
|
self.refnode notify( "stop_loop" );
|
|||
|
self anim_stopanimscripted();
|
|||
|
self.moveplaybackrate = 1.25;
|
|||
|
self unlink();
|
|||
|
|
|||
|
node = getstruct( "parking_jumpdown_stairs2", "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
}
|
|||
|
|
|||
|
plaza_moveup_dunn_backup()
|
|||
|
{
|
|||
|
if( flag( "plaza_flare_thrown" ) )
|
|||
|
return;
|
|||
|
level endon( "plaza_flare_thrown" );
|
|||
|
self endon( "plaza_moveup_kill_backup" );
|
|||
|
|
|||
|
flag_wait( "plaza_open_fire" );
|
|||
|
|
|||
|
self notify( "stop_loop" );
|
|||
|
if( isdefined( self.refnode ) )
|
|||
|
self.refnode notify( "stop_loop" );
|
|||
|
self anim_stopanimscripted();
|
|||
|
self.moveplaybackrate = 1.25;
|
|||
|
self unlink();
|
|||
|
|
|||
|
node = getstruct( "park_lookup_foley", "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
}
|
|||
|
|
|||
|
plaza_moveup_foley_backup()
|
|||
|
{
|
|||
|
self endon( "corner_trans_out" );
|
|||
|
|
|||
|
flag_wait( "plaza_open_fire" );
|
|||
|
|
|||
|
self notify( "stop_loop" );
|
|||
|
if( isdefined( self.refnode ) )
|
|||
|
self.refnode notify( "stop_loop" );
|
|||
|
self anim_stopanimscripted();
|
|||
|
self.moveplaybackrate = 1.25;
|
|||
|
self unlink();
|
|||
|
|
|||
|
node = getstruct( "street_flarethrow_node", "targetname" );
|
|||
|
node anim_generic_reach( self, "street_flare_throw" );
|
|||
|
self plaza_moveup_foley_end();
|
|||
|
}
|
|||
|
|
|||
|
plaza_moveup_marine1()
|
|||
|
{
|
|||
|
if( flag( "plaza_open_fire" ) )
|
|||
|
return;
|
|||
|
level endon( "plaza_open_fire" );
|
|||
|
|
|||
|
node = getnode( "park_moveup_marine1", "targetname" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 4;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self.refnode = node;
|
|||
|
node anim_generic( self, "coverstand_look_moveup" );
|
|||
|
node thread anim_generic_loop( self, "coverstand_look_idle" );
|
|||
|
|
|||
|
self thread dialogue_queue( "dcemp_ar2_gotoursixgo" );
|
|||
|
|
|||
|
wait 1;
|
|||
|
flag_wait( "plaza_player_at_stairs" );
|
|||
|
node notify( "stop_loop" );
|
|||
|
|
|||
|
node thread anim_generic( self, "coverstand_trans_OUT_R" );
|
|||
|
|
|||
|
length = getanimlength( getanim_generic( "coverstand_trans_OUT_R" ) );
|
|||
|
wait length * .84;
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node thread anim_generic( self, "gulag_sewer_slide" );
|
|||
|
|
|||
|
length = getanimlength( getanim_generic( "gulag_sewer_slide" ) );
|
|||
|
wait length * .30;
|
|||
|
|
|||
|
self anim_stopanimscripted();
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node thread anim_generic( self, "favela_civ_warning_landing" );
|
|||
|
|
|||
|
length = getanimlength( getanim_generic( "favela_civ_warning_landing" ) );
|
|||
|
wait length * .1;
|
|||
|
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
self anim_generic_run( self, "stand_2_run_R" );
|
|||
|
self thread anim_generic( self, "run_turn_R45" );
|
|||
|
|
|||
|
length = getanimlength( getanim_generic( "run_turn_R45" ) );
|
|||
|
wait length - .3;
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self delaythread( 2, ::set_pushplayer, false );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
flag_wait( "plaza_to_street" );
|
|||
|
|
|||
|
wait 2.25;
|
|||
|
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
|
|||
|
self notify( "plaza_moveup_kill_backup" );
|
|||
|
}
|
|||
|
|
|||
|
plaza_moveup_dunn()
|
|||
|
{
|
|||
|
if( flag( "plaza_open_fire" ) )
|
|||
|
return;
|
|||
|
level endon( "plaza_open_fire" );
|
|||
|
|
|||
|
node = getnode( "park_moveup_dunn", "targetname" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 24;
|
|||
|
self disable_arrivals();
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self thread anim_generic_gravity( self, "run_turn_L90" );
|
|||
|
|
|||
|
wait .75;
|
|||
|
|
|||
|
self clearanim( getanim_generic( "run_turn_L90" ), .2);
|
|||
|
self notify( "killanimscript" );
|
|||
|
|
|||
|
self enable_arrivals();
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self delaythread( .5, ::dialogue_queue, "dcemp_cpd_itsclear" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self ent_flag_set( "plaza_at_tree" );
|
|||
|
flag_wait( "plaza_to_street" );
|
|||
|
|
|||
|
wait .5;
|
|||
|
|
|||
|
self enable_cqbwalk();
|
|||
|
|
|||
|
link = spawn( "script_origin", self.origin );
|
|||
|
self linkto( link );
|
|||
|
link rotateyaw( -6.6, .5 );
|
|||
|
link anim_generic_run( self, "corner_standR_trans_CQB_OUT_8" );
|
|||
|
|
|||
|
self unlink();
|
|||
|
link delete();
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node.origin = self.origin;
|
|||
|
node anim_generic_gravity_run( self, "patrol_jog_look_up_once" );
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self set_pushplayer( false );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
|
|||
|
self notify( "plaza_moveup_kill_backup" );
|
|||
|
}
|
|||
|
|
|||
|
plaza_moveup_foley()
|
|||
|
{
|
|||
|
self ent_flag_init( "corner_trans_out" );
|
|||
|
|
|||
|
if( flag( "plaza_open_fire" ) )
|
|||
|
return;
|
|||
|
level endon( "plaza_open_fire" );
|
|||
|
|
|||
|
node = getnode( "park_moveup_foley", "targetname" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self ent_flag_set( "plaza_at_tree" );
|
|||
|
flag_wait( "plaza_to_street" );
|
|||
|
|
|||
|
self enable_cqbwalk();
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self ent_flag_set( "corner_trans_out" );
|
|||
|
|
|||
|
flag_wait( "plaza_show_enemies" );
|
|||
|
|
|||
|
self.a.movement = "stop";
|
|||
|
self thread anim_generic( self, "CornerStndR_alert_signal_enemy_spotted" );
|
|||
|
|
|||
|
self thread plaza_moveup_foley_trans_out();
|
|||
|
}
|
|||
|
|
|||
|
plaza_moveup_foley_trans_out()
|
|||
|
{
|
|||
|
flag_wait_either( "plaza_prepare_throw", "plaza_open_fire" );
|
|||
|
|
|||
|
//"Star"!!!
|
|||
|
add_wait( ::_wait, 2.0 );
|
|||
|
self add_func( ::dialogue_queue, "dcemp_fly_staaar" );
|
|||
|
add_abort( ::flag_wait, "plaza_open_fire" );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
node = spawn( "script_origin", self.origin );
|
|||
|
self linkto( node );
|
|||
|
node rotateyaw( 17.9, .5 );
|
|||
|
node anim_generic_run( self, "corner_standR_trans_CQB_OUT_9" );
|
|||
|
|
|||
|
self unlink();
|
|||
|
node delete();
|
|||
|
|
|||
|
self plaza_moveup_foley_end();
|
|||
|
}
|
|||
|
|
|||
|
plaza_moveup_foley_end()
|
|||
|
{
|
|||
|
node = getstruct( "street_flarethrow_node", "targetname" );
|
|||
|
node anim_generic( self, "street_flare_throw" );
|
|||
|
flag_set( "plaza_flare_thrown" );
|
|||
|
|
|||
|
if( flag( "plaza_open_fire" ) )
|
|||
|
return;
|
|||
|
|
|||
|
self setgoalpos( self.origin );
|
|||
|
self.goalradius = 8;
|
|||
|
self allowedstances( "crouch" );
|
|||
|
}
|
|||
|
|
|||
|
plaza_dialogue()
|
|||
|
{
|
|||
|
level endon( "plaza_open_fire" );
|
|||
|
|
|||
|
wait 1;
|
|||
|
//I don't know what's worse, man- dodging falling helicopters or freezing my ass out here in this monsoon.
|
|||
|
level.dunn dialogue_queue( "dcemp_cpd_freezingmonsoon" );
|
|||
|
//Huah.
|
|||
|
level.team[ "marine1" ] dialogue_queue( "dcemp_ar2_huah" );
|
|||
|
//Quiet - I think I see something.
|
|||
|
level.foley dialogue_queue( "dcemp_fly_quietseesomething" );
|
|||
|
}
|
|||
|
|
|||
|
plaza_dialogue2()
|
|||
|
{
|
|||
|
level endon( "plaza_open_fire" );
|
|||
|
|
|||
|
wait 1;
|
|||
|
|
|||
|
level thread function_stack( ::dcemp_lightningFlash, "triple" );
|
|||
|
level thread function_stack( ::dcemp_lightningFlash, "double" );
|
|||
|
|
|||
|
wait .5;
|
|||
|
|
|||
|
//Hold your fire.
|
|||
|
level.foley dialogue_queue( "dcemp_fly_holdyourfire" );
|
|||
|
wait 1;
|
|||
|
//Are they friendly
|
|||
|
level.dunn dialogue_queue( "dcemp_cpd_aretheyfriendly" );
|
|||
|
wait .5;
|
|||
|
//I don't know<6F>Star!
|
|||
|
level.foley dialogue_queue( "dcemp_fly_dontknowstar" );
|
|||
|
wait 1;
|
|||
|
//Cover me.
|
|||
|
level.foley thread dialogue_queue( "dcemp_fly_coverme" );
|
|||
|
|
|||
|
flag_set( "plaza_prepare_throw" );
|
|||
|
|
|||
|
//Say Texas, dammit<69>just say it.
|
|||
|
add_wait( ::_wait, 3.5 );
|
|||
|
level.dunn add_func( ::dialogue_queue, "dcemp_cpd_saytexas" );
|
|||
|
add_abort( ::flag_wait, "plaza_open_fire" );
|
|||
|
thread do_wait();
|
|||
|
|
|||
|
flag_wait( "plaza_throw_react" );
|
|||
|
|
|||
|
wait 3.5;
|
|||
|
}
|
|||
|
|
|||
|
plaza_moveout_dunn()
|
|||
|
{
|
|||
|
node = getnode( "plaza_moveout_marine1", "targetname" );
|
|||
|
|
|||
|
quick = ( flag( "tunnels_dunn_anim_end" ) && !flag( "parking_high_spec" ) );
|
|||
|
if( !quick )
|
|||
|
{
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self ent_flag_set( "plaza_moveout_exit" );
|
|||
|
flag_wait( "plaza_moveout_exit" );
|
|||
|
|
|||
|
wait 1;
|
|||
|
|
|||
|
link = spawn( "script_origin", self.origin );
|
|||
|
link.angles = self.angles;
|
|||
|
self linkto( link );
|
|||
|
link rotateyaw( 15, 1 );
|
|||
|
link anim_generic_run( self, "crouch_2run_R" );
|
|||
|
self unlink();
|
|||
|
link delete();
|
|||
|
self anim_generic_run( self, "run_turn_L45" );
|
|||
|
}
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self ent_flag_set( "plaza_moveout_exit2" );
|
|||
|
|
|||
|
flag_wait( "plaza_moveout_exit2" );
|
|||
|
|
|||
|
wait .5;
|
|||
|
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node anim_generic_reach( self, "jump_across_100_lunge" );
|
|||
|
node anim_generic_run( self, "jump_across_100_lunge" );
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 90;
|
|||
|
}
|
|||
|
|
|||
|
plaza_moveout_marine1()
|
|||
|
{
|
|||
|
node = getnode( "plaza_moveout_dunn", "targetname" );
|
|||
|
|
|||
|
quick = ( flag( "tunnels_dunn_anim_end" ) && !flag( "parking_high_spec" ) );
|
|||
|
if( !quick )
|
|||
|
{
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self anim_generic( self, "corner_standR_alert_2_look" );
|
|||
|
self thread anim_generic_loop( self, "corner_standR_look_idle" );
|
|||
|
|
|||
|
self ent_flag_set( "plaza_moveout_exit" );
|
|||
|
flag_wait( "plaza_moveout_exit" );
|
|||
|
|
|||
|
wait .5;
|
|||
|
|
|||
|
self notify( "stop_loop" );
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
self anim_generic_gravity_run( self, "corner_standR_trans_OUT_9" );
|
|||
|
}
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self ent_flag_set( "plaza_moveout_exit2" );
|
|||
|
|
|||
|
flag_wait( "plaza_moveout_exit2" );
|
|||
|
|
|||
|
wait 1;
|
|||
|
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 90;
|
|||
|
}
|
|||
|
|
|||
|
plaza_moveout_foley()
|
|||
|
{
|
|||
|
node = getnode( "plaza_moveout_foley", "targetname" );
|
|||
|
|
|||
|
quick = ( flag( "tunnels_dunn_anim_end" ) && !flag( "parking_high_spec" ) );
|
|||
|
if( !quick )
|
|||
|
{
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self ent_flag_set( "plaza_moveout_exit" );
|
|||
|
flag_wait( "plaza_moveout_exit" );
|
|||
|
|
|||
|
//Watch for movement.
|
|||
|
self thread dialogue_queue( "dcemp_fly_watchmovement" );
|
|||
|
|
|||
|
self anim_generic_gravity_run( self, "corner_standR_trans_OUT_6" );
|
|||
|
}
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
|
|||
|
self setgoalnode( node );
|
|||
|
self.goalradius = 8;
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
self ent_flag_set( "plaza_moveout_exit2" );
|
|||
|
|
|||
|
flag_wait( "plaza_moveout_exit2" );
|
|||
|
|
|||
|
self thread dialogue_queue( "dcemp_fly_moveup" );
|
|||
|
self.a.movement = "stop";
|
|||
|
self anim_generic( self, "CornerStndR_alert_signal_move_out" );
|
|||
|
|
|||
|
wait 1;
|
|||
|
|
|||
|
node = getent( node.target, "targetname" );
|
|||
|
|
|||
|
self thread anim_generic( self, "corner_standR_trans_OUT_6" );
|
|||
|
length = getanimlength( getanim_generic( "corner_standR_trans_OUT_6" ) );
|
|||
|
wait length - .61;
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
self linkto( node );
|
|||
|
node delaycall( .25, ::movez, 8, .5 );
|
|||
|
node thread anim_generic( self, "gulag_sewer_slide" );
|
|||
|
length = getanimlength( getanim_generic( "gulag_sewer_slide" ) );
|
|||
|
wait length * .28;
|
|||
|
self unlink();
|
|||
|
self anim_stopanimscripted();
|
|||
|
|
|||
|
self anim_generic_gravity_run( self, "stand_2_run_F_2" );
|
|||
|
|
|||
|
flag_set( "tunnels_main" );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/************************************************************************************************************/
|
|||
|
/* START POINTS */
|
|||
|
/************************************************************************************************************/
|
|||
|
start_intro()
|
|||
|
{
|
|||
|
script2model_intro();
|
|||
|
flag_set( "intro_fx" );
|
|||
|
|
|||
|
thread maps\_utility::set_ambient( "dcemp_dry" );
|
|||
|
thread maps\_ambient::ambientEventStart( "dcemp_dry" );
|
|||
|
street_setup_stuff();
|
|||
|
}
|
|||
|
|
|||
|
start_iss()
|
|||
|
{
|
|||
|
//CRASHSITE STUFF --> TOP
|
|||
|
movement_grid = maps\dc_crashsite::crash_site_player_and_heli_setup();
|
|||
|
|
|||
|
ePlayer_rig = spawn_anim_model( "player_rig" );
|
|||
|
anim_actors_rescue[ 0 ] = ePlayer_rig;
|
|||
|
|
|||
|
crash_node = getent( "crash_node", "targetname" );
|
|||
|
crash_node anim_first_frame( anim_actors_rescue, "dcburning_BHrescue" );
|
|||
|
|
|||
|
level.player freezecontrols( true );
|
|||
|
level.player PlayerLinkToDelta( ePlayer_rig, "tag_player", 1, 0, 0, 0, 0, true );
|
|||
|
|
|||
|
flag_set( "crash_fade_up" );
|
|||
|
flag_set( "redshirt_headshot" );
|
|||
|
thread maps\dc_crashsite::player_crash_movement( movement_grid[ "top_left" ], movement_grid[ "bot_right" ], ePlayer_rig );
|
|||
|
|
|||
|
wait .05;
|
|||
|
level.player unlink();
|
|||
|
//CRASHSITE STUFF --> BOTTOM
|
|||
|
|
|||
|
thread flag_set_delayed( "emp_entity_cleanup_done", .05 );
|
|||
|
}
|
|||
|
|
|||
|
start_emp()
|
|||
|
{
|
|||
|
thread maps\_utility::set_ambient( "dcemp_dry" );
|
|||
|
flag_set( "intro_fx" );
|
|||
|
thread vision_set_intro( 0 );
|
|||
|
thread intro_crash_vehicle_setup();
|
|||
|
|
|||
|
//node = getstruct( "emp_start_crash_heli_spot_node", "targetname" );
|
|||
|
heli = getent( "heli_crash_site_spotlight", "targetname" );
|
|||
|
heli.target = "emp_start_crash_heli_spot_node";
|
|||
|
|
|||
|
heli_crash_site_spotlight = spawn_vehicle_from_targetname_and_drive( "heli_crash_site_spotlight_emp_start" );
|
|||
|
heli_crash_site_spotlight thread godOn();
|
|||
|
heli_crash_site_spotlight vehicle_setSpeed( 30 );
|
|||
|
heli_crash_site_spotlight setmaxpitchroll( 20, 20 );
|
|||
|
|
|||
|
btr80s_end = spawn_vehicles_from_targetname_and_drive( "btr80s_end_emp_start" );
|
|||
|
array_thread( btr80s_end,::godOn );
|
|||
|
array_thread( btr80s_end,::mgOff );
|
|||
|
array_thread( btr80s_end, maps\dc_crashsite::btr80s_end_think );
|
|||
|
|
|||
|
//CRASHSITE STUFF --> TOP
|
|||
|
movement_grid = maps\dc_crashsite::crash_site_player_and_heli_setup();
|
|||
|
|
|||
|
ePlayer_rig = spawn_anim_model( "player_rig" );
|
|||
|
anim_actors_rescue[ 0 ] = ePlayer_rig;
|
|||
|
|
|||
|
crash_node = getent( "crash_node", "targetname" );
|
|||
|
crash_node thread anim_single( anim_actors_rescue, "dcburning_BHrescue" );
|
|||
|
ePlayer_rig setanimtime( ePlayer_rig getanim( "dcburning_BHrescue" ), 1 );
|
|||
|
|
|||
|
level.player freezecontrols( true );
|
|||
|
level.player PlayerLinkToDelta( ePlayer_rig, "tag_player", 1, 0, 0, 0, 0, true );
|
|||
|
|
|||
|
thread maps\dc_crashsite::player_crash_movement( movement_grid[ "top_left" ], movement_grid[ "bot_right" ], ePlayer_rig );
|
|||
|
//CRASHSITE STUFF --> BOTTOM
|
|||
|
|
|||
|
street_setup_stuff();
|
|||
|
|
|||
|
level.player takeallweapons();
|
|||
|
level.player giveWeapon( "m4m203_eotech" );
|
|||
|
level.player switchToWeapon( "m4m203_eotech" );
|
|||
|
|
|||
|
level.player SetWeaponAmmoClip( "m203_m4_eotech", 0 );
|
|||
|
level.player SetWeaponAmmoStock( "m203_m4_eotech", 0 );
|
|||
|
level.player SetWeaponAmmoClip( "m4m203_eotech", 0 );
|
|||
|
level.player SetWeaponAmmoStock( "m4m203_eotech", 0 );
|
|||
|
|
|||
|
setsaveddvar( "ui_hidemap", 1 );
|
|||
|
SetSavedDvar( "hud_showStance", "0" );
|
|||
|
SetSavedDvar( "compass", "0" );
|
|||
|
SetSavedDvar( "ammoCounterHide", "1" );
|
|||
|
|
|||
|
flag_set( "crash_fade_up" );
|
|||
|
|
|||
|
wait 1;
|
|||
|
|
|||
|
flag_set( "redshirt_headshot" );
|
|||
|
|
|||
|
flag_set( "crash_cut_to_black" );
|
|||
|
flag_set( "iss_done" );
|
|||
|
|
|||
|
thread maps\dc_crashsite::crash_end_scene();
|
|||
|
|
|||
|
emp_ents = getentarray( "emp_show", "targetname" );
|
|||
|
array_thread( emp_ents, ::emp_entities );
|
|||
|
}
|
|||
|
|
|||
|
start_street()
|
|||
|
{
|
|||
|
start_common_dcemp();
|
|||
|
thread maps\_utility::set_ambient( "dcemp_dry" );
|
|||
|
script2model_intro();
|
|||
|
flag_set( "intro_fx" );
|
|||
|
thread vision_set_intro( 0 );
|
|||
|
|
|||
|
street_setup_stuff();
|
|||
|
|
|||
|
thread battlechatter_off();
|
|||
|
|
|||
|
wait .1;
|
|||
|
|
|||
|
node = getstruct( level.foley.target, "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
level.foley teleport_actor( node );
|
|||
|
level.foley.goalradius = 16;
|
|||
|
level.foley setgoalnode( node );
|
|||
|
|
|||
|
node = getstruct( level.dunn.target, "targetname" );
|
|||
|
node = getstruct( node.target, "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
level.dunn teleport_actor( node );
|
|||
|
level.dunn.goalradius = 16;
|
|||
|
level.dunn setgoalnode( node );
|
|||
|
|
|||
|
node = getnode( level.team[ "marine1" ].target, "targetname" );
|
|||
|
node = getnode( node.target, "targetname" );
|
|||
|
level.team[ "marine1" ] teleport_actor( node );
|
|||
|
level.team[ "marine1" ].goalradius = 16;
|
|||
|
level.team[ "marine1" ] setgoalnode( node );
|
|||
|
|
|||
|
flag_set( "emp_entity_cleanup_done" );
|
|||
|
thread flag_set_delayed( "street_main", .5 );
|
|||
|
}
|
|||
|
|
|||
|
start_corner()
|
|||
|
{
|
|||
|
start_common_dcemp();
|
|||
|
thread maps\_utility::set_ambient( "dcemp_dry" );
|
|||
|
script2model_intro();
|
|||
|
flag_set( "intro_fx" );
|
|||
|
|
|||
|
SetSavedDvar( "ai_friendlyFireBlockDuration", "0" );
|
|||
|
thread vision_set_sunset( 0 );
|
|||
|
|
|||
|
array_thread( getentarray( "street_crash_heli", "script_noteworthy" ), ::street_crash_helis );
|
|||
|
array_thread( getstructarray( "street_crash_heli_anim", "script_noteworthy" ), ::street_crash_helis_anim );
|
|||
|
|
|||
|
array_thread( getentarray( "meetup_allies", "targetname" ), ::add_spawn_function, ::init_meetup_allies );
|
|||
|
activate_trigger( "meetup_allies", "target" );
|
|||
|
|
|||
|
level.sky delete();
|
|||
|
|
|||
|
wait .05;
|
|||
|
|
|||
|
getent( "street_btr", "targetname" ) add_spawn_function( ::street_btr_scene );
|
|||
|
getent( "street_crash_motorcycle", "targetname" ) thread street_crash_motorcycle();
|
|||
|
array_thread( getentarray( "street_crash_car", "script_noteworthy" ), ::street_crash_cars );
|
|||
|
array_thread( getentarray( "street_crash_heli", "script_noteworthy" ), ::street_crash_helis );
|
|||
|
|
|||
|
array_thread( getentarray( "corner_truck_engine_crash", "targetname" ), ::corner_truck_engine_crash );
|
|||
|
thread corner_plane_crash();
|
|||
|
|
|||
|
exploder( "hide_heli_crash" );
|
|||
|
|
|||
|
glass = getglassarray( "street_hide_glass" );
|
|||
|
dir = anglestoforward( ( 0, 345, 0 ) );
|
|||
|
foreach( piece in glass )
|
|||
|
noself_delaycall( 1, ::destroyglass, piece, dir * 200 );
|
|||
|
|
|||
|
thread battlechatter_off();
|
|||
|
array_thread( level.team, ::pathrandompercent_zero );
|
|||
|
array_thread( level.team, ::walkdist_zero );
|
|||
|
|
|||
|
nodes = [];
|
|||
|
nodes = array_add( nodes, getnode( "street_marine1_hide_node", "targetname" ) );
|
|||
|
nodes = array_add( nodes, getnode( "street_macey_hide_node", "targetname" ) );
|
|||
|
nodes = array_add( nodes, getnode( "corner_macey_hide_node", "targetname" ) );
|
|||
|
nodes = array_add( nodes, getnode( "corner_start2", "targetname" ) );
|
|||
|
nodes = array_add( nodes, getnode( "corner_start3", "targetname" ) );
|
|||
|
|
|||
|
emp_teleport_team_specific( level.team, nodes );
|
|||
|
emp_teleport_player();
|
|||
|
|
|||
|
foreach( member in level.team )
|
|||
|
member.alertLevel = "alert";
|
|||
|
|
|||
|
node = getnode( "corner_macey_hide_node", "targetname" );
|
|||
|
level.foley delaycall( .5, ::setgoalnode, node );
|
|||
|
|
|||
|
thread flag_set_delayed( "corner_main", .5 );
|
|||
|
thread flag_set_delayed( "street_crash_heli_done", .5 );
|
|||
|
|
|||
|
objective_add( level.objnum, "active", &"DCEMP_OBJ_FIND_SHELTER", getstruct( "hide_obj", "targetname" ).origin );
|
|||
|
objective_current( level.objnum );
|
|||
|
}
|
|||
|
|
|||
|
start_meetup()
|
|||
|
{
|
|||
|
start_common_dcemp();
|
|||
|
thread maps\_utility::set_ambient( "dcemp_dry" );
|
|||
|
script2model_intro();
|
|||
|
flag_set( "intro_fx" );
|
|||
|
SetSavedDvar( "ai_friendlyFireBlockDuration", "0" );
|
|||
|
thread vision_set_sunset( 0 );
|
|||
|
|
|||
|
array_thread( getentarray( "street_crash_heli", "script_noteworthy" ), ::street_crash_helis );
|
|||
|
array_thread( getstructarray( "street_crash_heli_anim", "script_noteworthy" ), ::street_crash_helis_anim );
|
|||
|
|
|||
|
array_thread( getentarray( "meetup_allies", "targetname" ), ::add_spawn_function, ::init_meetup_allies );
|
|||
|
activate_trigger( "meetup_allies", "target" );
|
|||
|
|
|||
|
level.sky delete();
|
|||
|
corner_show_damage();
|
|||
|
|
|||
|
wait .05;
|
|||
|
|
|||
|
thread battlechatter_off();
|
|||
|
array_thread( level.team, ::pathrandompercent_zero );
|
|||
|
array_thread( level.team, ::walkdist_zero );
|
|||
|
array_thread( level.team, ::set_generic_run_anim_array, "casual_killer_jog" );
|
|||
|
|
|||
|
emp_teleport_team_specific( level.team, getstructarray( "meetup_ai_nodes", "targetname" ) );
|
|||
|
emp_teleport_player();
|
|||
|
|
|||
|
thread flag_set_delayed( "meetup_main", .5 );
|
|||
|
|
|||
|
objective_add( level.objnum, "active", &"DCEMP_OBJ_FOLLOW_SGT_FOLEY", level.foley.origin );
|
|||
|
objective_current( level.objnum );
|
|||
|
objective_onentity( level.objnum, level.foley, ( 0,0,70 ) );
|
|||
|
}
|
|||
|
|
|||
|
start_lobby()
|
|||
|
{
|
|||
|
start_common_dcemp();
|
|||
|
thread maps\_utility::set_ambient( "dcemp_light_rain" );
|
|||
|
flag_set( "intro_fx" );
|
|||
|
|
|||
|
SetSavedDvar( "ai_friendlyFireBlockDuration", "0" );
|
|||
|
thread vision_set_sunset( 0 );
|
|||
|
array_thread( getentarray( "meetup_allies", "targetname" ), ::add_spawn_function, ::init_meetup_allies );
|
|||
|
activate_trigger( "meetup_allies", "target" );
|
|||
|
|
|||
|
waittillframeend;
|
|||
|
|
|||
|
level.sky delete();
|
|||
|
corner_show_damage();
|
|||
|
|
|||
|
thread battlechatter_off();
|
|||
|
array_thread( level.team, ::set_ignoreme, true );
|
|||
|
array_thread( level.team, ::set_ignoreall, true );
|
|||
|
array_thread( level.team, ::pathrandompercent_zero );
|
|||
|
array_thread( level.team, ::set_pushplayer, true );
|
|||
|
array_thread( level.team, ::walkdist_zero );
|
|||
|
|
|||
|
nodes = [];
|
|||
|
nodes = array_add( nodes, getstruct( "meetup_runner_dunn", "targetname" ) );
|
|||
|
nodes = array_add( nodes, getstruct( "meetup_runner_foley", "targetname" ) );
|
|||
|
nodes = array_add( nodes, getstruct( "meetup_runner_1", "targetname" ) );
|
|||
|
nodes = array_add( nodes, getstruct( "meetup_runner_2", "targetname" ) );
|
|||
|
nodes = array_add( nodes, getstruct( "meetup_runner_3", "targetname" ) );
|
|||
|
|
|||
|
emp_teleport_team_specific( level.team, nodes );
|
|||
|
node = getstruct( "meetup_runner_anim_node", "targetname" );
|
|||
|
level.dunn teleport_actor( node );
|
|||
|
emp_teleport_player();
|
|||
|
|
|||
|
thread flag_set_delayed( "lobby_main", .5 );
|
|||
|
|
|||
|
door = getent( "meetup_door_left", "targetname" );
|
|||
|
door delaycall( .5, ::connectpaths );
|
|||
|
door delaycall( 1, ::rotateyaw, -90, .5 );
|
|||
|
door delaycall( 2.0, ::disconnectpaths );
|
|||
|
|
|||
|
thread maps\_weather::rainMedium( 1 );
|
|||
|
delaythread( 1, maps\_weather::lightning, maps\dcemp_fx::lightning_normal, maps\dcemp_fx::lightning_flash );
|
|||
|
|
|||
|
objective_add( level.objnum, "active", &"DCEMP_OBJ_WHISKEY_HOTEL", level.foley.origin );
|
|||
|
objective_current( level.objnum );
|
|||
|
objective_onentity( level.objnum, level.foley, ( 0,0,70 ) );
|
|||
|
}
|
|||
|
|
|||
|
start_office()
|
|||
|
{
|
|||
|
start_common_dcemp();
|
|||
|
thread maps\_utility::set_ambient( "dcemp_dry" );
|
|||
|
flag_set( "intro_fx" );
|
|||
|
|
|||
|
thread vision_set_office( 0 );
|
|||
|
array_thread( getentarray( "meetup_allies", "targetname" ), ::add_spawn_function, ::init_meetup_allies );
|
|||
|
activate_trigger( "meetup_allies", "target" );
|
|||
|
|
|||
|
thread handle_sunlight();
|
|||
|
delaythread( .1, ::activate_trigger, "office_ally_color_1", "target" );
|
|||
|
delaythread( .5, ::activate_trigger, "office_ally_color_2", "target" );
|
|||
|
|
|||
|
level.sky delete();
|
|||
|
|
|||
|
thread battlechatter_off();
|
|||
|
|
|||
|
wait .05;
|
|||
|
level.team[ "marine3" ] kill();
|
|||
|
level.team[ "marine2" ] thread magic_bullet_shield();
|
|||
|
|
|||
|
emp_teleport_team_specific( level.team, getstructarray( "office_start_points1", "targetname" ) );
|
|||
|
emp_teleport_player();
|
|||
|
|
|||
|
level.team = array_removedead( level.team );
|
|||
|
array_thread( level.team, ::set_force_color, "red" );
|
|||
|
|
|||
|
door = getent( "lobby_door_left", "targetname" );
|
|||
|
parts = getentarray( door.target, "targetname" );
|
|||
|
array_call( parts, ::linkto, door );
|
|||
|
door thread hunted_style_door_open( "door_wood_slow_creaky_open" );
|
|||
|
|
|||
|
door = getent( "lobby_door_right", "targetname" );
|
|||
|
parts = getentarray( door.target, "targetname" );
|
|||
|
array_call( parts, ::linkto, door );
|
|||
|
door connectpaths();
|
|||
|
|
|||
|
flag_set( "lobby_door_kick" );
|
|||
|
|
|||
|
time = .4;
|
|||
|
door rotateroll( -90, time );
|
|||
|
door playsound( "wood_door_kick" );
|
|||
|
|
|||
|
thread flag_set_delayed( "office_main", .25 );
|
|||
|
|
|||
|
thread maps\_weather::rainHard( 1 );
|
|||
|
delaythread( 1, maps\_weather::lightning, maps\dcemp_fx::lightning_normal, maps\dcemp_fx::lightning_flash );
|
|||
|
|
|||
|
objective_add( level.objnum, "active", &"DCEMP_OBJ_WHISKEY_HOTEL", level.foley.origin );
|
|||
|
objective_current( level.objnum );
|
|||
|
objective_onentity( level.objnum, level.foley, ( 0,0,70 ) );
|
|||
|
}
|
|||
|
|
|||
|
start_parking()
|
|||
|
{
|
|||
|
start_common_dcemp();
|
|||
|
thread maps\_utility::set_ambient( "dcemp_dry" );
|
|||
|
flag_set( "rain_fx" );
|
|||
|
|
|||
|
thread vision_set_office( 0 );
|
|||
|
|
|||
|
thread handle_sunlight();
|
|||
|
|
|||
|
level.sky delete();
|
|||
|
|
|||
|
thread battlechatter_off();
|
|||
|
|
|||
|
waittillframeend;
|
|||
|
|
|||
|
emp_teleport_team_specific( level.team, getstructarray( "parking_start_points", "targetname" ) );
|
|||
|
emp_teleport_player();
|
|||
|
|
|||
|
thread flag_set_delayed( "office_done", .15 );
|
|||
|
thread flag_set_delayed( "parking_main", .25 );
|
|||
|
|
|||
|
thread maps\_weather::rainHard( .05 );
|
|||
|
delaythread( .05, maps\_weather::lightning, maps\dcemp_fx::lightning_normal, maps\dcemp_fx::lightning_flash );
|
|||
|
|
|||
|
objective_add( level.objnum, "active", &"DCEMP_OBJ_WHISKEY_HOTEL", level.foley.origin );
|
|||
|
objective_current( level.objnum );
|
|||
|
objective_onentity( level.objnum, level.foley, ( 0,0,70 ) );
|
|||
|
//sun shadow optimization
|
|||
|
setsaveddvar( "sm_sunShadowScale", 0.5 );
|
|||
|
}
|
|||
|
|
|||
|
start_plaza()
|
|||
|
{
|
|||
|
start_common_dcemp();
|
|||
|
thread maps\_utility::set_ambient( "dcemp_heavy_rain" );
|
|||
|
level.player blend_movespeedscale( .8 );
|
|||
|
flag_set( "rain_fx" );
|
|||
|
|
|||
|
SetSavedDvar( "ai_friendlyFireBlockDuration", "0" );
|
|||
|
thread vision_set_parking( .1 );
|
|||
|
thread parking_high_spec();
|
|||
|
thread plaza_flare_fx();
|
|||
|
|
|||
|
trigger_off( "parking_btr_guys", "target" );
|
|||
|
|
|||
|
flag_set( "parking_main" );
|
|||
|
lights = getentarray( "parking_lighting_primary", "script_noteworthy" );
|
|||
|
array_call( lights, ::setlightcolor, (.85, .85, 1) );
|
|||
|
flag_set( "spotlight_lightning" );
|
|||
|
|
|||
|
level.sky delete();
|
|||
|
thread battlechatter_off();
|
|||
|
|
|||
|
waittillframeend;
|
|||
|
|
|||
|
array_thread( level.team, ::pathrandompercent_zero );
|
|||
|
array_thread( level.team, ::walkdist_zero );
|
|||
|
array_thread( level.team, ::set_pushplayer, true );
|
|||
|
array_thread( level.team, ::disable_pain );
|
|||
|
array_thread( level.team, ::set_ignoreall, true );
|
|||
|
array_thread( level.team, ::disable_ai_color );
|
|||
|
|
|||
|
emp_teleport_team_specific( level.team, getstructarray( "plaza_start_points", "targetname" ) );
|
|||
|
emp_teleport_player();
|
|||
|
|
|||
|
flag_set( "parking_btr_guys_dead" );
|
|||
|
|
|||
|
thread maps\_weather::rainHard( .05 );
|
|||
|
delaythread( .05, maps\_weather::lightning, maps\dcemp_fx::lightning_normal, maps\dcemp_fx::lightning_flash );
|
|||
|
|
|||
|
objective_add( level.objnum, "active", &"DCEMP_OBJ_WHISKEY_HOTEL", level.foley.origin );
|
|||
|
objective_current( level.objnum );
|
|||
|
objective_onentity( level.objnum, level.foley, ( 0,0,70 ) );
|
|||
|
//sun shadow optimization
|
|||
|
setsaveddvar( "sm_sunShadowScale", 0.5 );
|
|||
|
}
|
|||
|
|
|||
|
start_common_dcemp()
|
|||
|
{
|
|||
|
level.team = [];
|
|||
|
add_global_spawn_function( "allies", ::set_color_goal_func );
|
|||
|
array_thread( getentarray( "intro_team", "targetname" ), ::add_spawn_function, ::team_init );
|
|||
|
activate_trigger( "intro_team", "target" );
|
|||
|
|
|||
|
flag_wait( "team_initialized" );
|
|||
|
|
|||
|
volume = getent( "mask_ents", "targetname" );
|
|||
|
volume activate_destructibles_in_volume();
|
|||
|
volume activate_interactives_in_volume();
|
|||
|
}
|
|||
|
|
|||
|
set_color_goal_func()
|
|||
|
{
|
|||
|
self.colornode_func = ::notify_node_on_goal;
|
|||
|
}
|
|||
|
|
|||
|
notify_node_on_goal( node )
|
|||
|
{
|
|||
|
self endon( "stop_going_to_node" );
|
|||
|
self endon( "stop_color_move" );
|
|||
|
self endon( "death" );
|
|||
|
|
|||
|
self waittill( "goal" );
|
|||
|
|
|||
|
node notify( "trigger", self );
|
|||
|
}
|
|||
|
|
|||
|
dcemp_music()
|
|||
|
{
|
|||
|
flag_init( "dc_emp_missile" );
|
|||
|
flag_init( "dc_emp_missile_hit" );
|
|||
|
flag_init( "dc_emp_afternath" );
|
|||
|
if( !flag_exist( "dc_emp_bunker" ) )
|
|||
|
flag_init( "dc_emp_bunker" );
|
|||
|
|
|||
|
switch ( level.start_point )
|
|||
|
{
|
|||
|
case "default":
|
|||
|
case "intro":
|
|||
|
case "iss":
|
|||
|
flag_wait( "dc_emp_missile" );
|
|||
|
thread music_play( "dc_emp_missile" );
|
|||
|
/#
|
|||
|
println( " *** MUSIC: dc_emp_missile *** " );
|
|||
|
#/
|
|||
|
flag_wait( "dc_emp_missile_hit" );
|
|||
|
// thread music_stop( 1.0 );
|
|||
|
// level.player thread playlocalsoundwrapper( "dc_emp_missile_hit_sfx" );
|
|||
|
thread music_play( "dc_emp_missile_hit" );
|
|||
|
/#
|
|||
|
println( " *** MUSIC: dc_emp_missile_hit *** " );
|
|||
|
#/
|
|||
|
|
|||
|
case "emp":
|
|||
|
case "street":
|
|||
|
flag_wait( "dc_emp_afternath" );
|
|||
|
thread music_play( "dc_emp_afternath" );
|
|||
|
/#
|
|||
|
println( " *** MUSIC: dc_emp_afternath *** " );
|
|||
|
#/
|
|||
|
|
|||
|
case "corner":
|
|||
|
case "meetup":
|
|||
|
case "lobby":
|
|||
|
case "office":
|
|||
|
case "parking":
|
|||
|
case "plaza":
|
|||
|
case "tunnels":
|
|||
|
flag_wait( "dc_emp_bunker" );
|
|||
|
wait 2.5;
|
|||
|
thread music_play( "dc_emp_bunker" );
|
|||
|
/#
|
|||
|
println( " *** MUSIC: dc_emp_bunker *** " );
|
|||
|
#/
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
AssertMsg( "Unhandled start point " + level.start_point );
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|