IW4-Dump-Files/maps/arcadia.gsc

1108 lines
32 KiB
Plaintext
Raw Normal View History

2017-07-08 11:47:21 -07:00
#include common_scripts\utility;
#include maps\_utility;
#include maps\_anim;
#include maps\_vehicle;
#include maps\arcadia_code;
#include maps\arcadia_stryker;
#using_animtree( "generic_human" );
main()
{
destructible_volumes = getentarray( "volume_second_half", "targetname" );
mask_destructibles_in_volumes( destructible_volumes );
mask_interactives_in_volumes( destructible_volumes );
default_start( ::startStreet );
add_start( "street", ::startStreet );
add_start( "checkpoint", ::startCheckpoint );
add_start( "golf", ::startGolf );
add_start( "crash", ::startCrash );
setsaveddvar( "r_lightGridEnableTweaks", 1 );
setsaveddvar( "r_lightGridIntensity", 1.2 );
setsaveddvar( "r_lightGridContrast", 0 );
setsaveddvar( "sm_sunShadowScale", 0.7 );
precacheString( &"ARCADIA_OBJECTIVE_AA_GUNS" );
precacheString( &"ARCADIA_OBJECTIVE_BROOKMERE" );
precacheString( &"ARCADIA_OBJECTIVE_INTEL" );
precacheString( &"ARCADIA_LASER_HINT" );
precacheString( &"ARCADIA_LASER_HINT_GOLFCOURSE" );
precacheString( &"ARCADIA_PICK_UP_BRIEFCASE_HINT" );
precacheShader( "dpad_laser_designator" );
precacheShader( "black" );
precacheModel( "vehicle_zpu4_burn" );
precacheModel( "cs_vodkabottle01" );
precacheModel( "electronics_camera_pointandshoot_animated" );
precacheModel( "com_metal_briefcase_opened_obj" );
precacheRumble( "arcadia_artillery_rumble" );
setDvarIfUninitialized( "arcadia_debug_stryker", "0" );
precacheItem( "rpg_straight" );
precache_masked_destructibles();
add_earthquake( "b2bomb", 0.5, 0.5, 2000 );
maps\arcadia_fx::main();
maps\arcadia_precache::main();
maps\createart\arcadia_art::main();
maps\_load::main();
maps\arcadia_anim::main();
maps\_drone_ai::init();
common_scripts\_sentry::main();
maps\_compass::setupMiniMap("compass_map_arcadia");
thread maps\arcadia_amb::main();
flag_init( "used_laser" );
flag_init( "used_laser_golf" );
flag_init( "laser_hint_print" );
flag_init( "stealth_bombed_0" );
flag_init( "stealth_bombed_1" );
flag_init( "lazed_targets_0" );
flag_init( "lazed_targets_1" );
flag_init( "golfcourse_vehicles_dead" );
flag_init( "objective_laze_golfcourse" );
flag_init( "foley_in_panic_room" );
flag_init( "picked_up_briefcase" );
flag_init( "examine_tats" );
flag_init( "player_can_pick_up_briefcase" );
flag_init( "end_dialog_done" );
flag_init( "foley_leaves_panic_room" );
flag_init( "disable_stryker_dialog" );
//--------------------------------
// Friendlies and Friendly Respawn
//--------------------------------
level.foley = getent( "foley", "script_noteworthy" );
assert( isAlive( level.foley ) );
level.foley.animname = "foley";
level.foley magic_bullet_shield();
level.foley make_hero();
level.dunn = getent( "dunn", "script_noteworthy" );
assert( isAlive( level.dunn ) );
level.dunn.animname = "dunn";
level.dunn magic_bullet_shield();
level.dunn make_hero();
friends = getaiarray( "allies" );
array_thread( friends, ::ai_avoid_stryker );
friends = array_remove_array( friends, get_heroes() );
level.friendly_startup_thread = ::ai_avoid_stryker;
flag_set( "respawn_friendlies" );
set_empty_promotion_order( "r" );
set_empty_promotion_order( "b" );
array_thread( friends, ::replace_on_death );
//--------------------------------
// spawners with script_parameters get processed on spawn
//--------------------------------
all_axis_spawners = getspawnerteamarray( "axis" );
script_parameter_spawners = [];
foreach( spawner in all_axis_spawners )
{
if ( !isdefined( spawner.script_parameters ) )
continue;
script_parameter_spawners[ script_parameter_spawners.size ] = spawner;
}
array_spawn_function( script_parameter_spawners, ::process_ai_script_parameters );
//--------------------------------
// Spawn Stryker vehicle
//--------------------------------
level.stryker = spawn_vehicle_from_targetname_and_drive( "stryker" );
//level.stryker.veh_pathtype = "follow";
level.stryker.vehicle_stays_alive = true;
level.stryker vehPhys_DisableCrashing();
level.stryker.damageIsFromPlayer = true;
setup_stryker_modes();
level.stryker.lastTarget = level.stryker;
level.stryker thread stryker_setmode_ai();
level.stryker thread stryker_laser_reminder_dialog();
level.stryker thread stryker_death_wait();
level.stryker thread stryker_dialog();
level.stryker thread stryker_laser_reminder_dialog();
level.stryker thread stryker_damage_monitor();
level.stryker thread stryker_threats_eliminated_dialog_1();
level.stryker thread stryker_threats_eliminated_dialog_2();
level.stryker setVehicleLookAtText( "Honey Badger", &"" );
level.stryker.missileAttractor = spawn( "script_origin", level.stryker.origin + ( 0, 0, 70 ) );
level.stryker.missileAttractor LinkTo( level.stryker );
missile_CreateAttractorEnt( level.stryker.missileAttractor, 10000, 3000 );
thread stryker_run_over_player_monitor();
level.stealth_bombed_target[ 0 ] = false;
level.stealth_bombed_target[ 1 ] = false;
set_cull_dist( 9000 );
//--------------------------------
// Array / Spawn threads
//--------------------------------
array_spawn_function_noteworthy( "drop_plane", ::drop_plane );
run_thread_on_targetname( "sentry_activate", ::sentry_activate_trigger );
run_thread_on_targetname( "vehicle_path_disconnector", ::vehicle_path_disconnector );
run_thread_on_targetname( "delete_ai_trigger", ::delete_ai_trigger );
run_thread_on_noteworthy( "plane_sound", maps\_mig29::plane_sound_node );
run_thread_on_noteworthy( "moveup_trig", ::move_up_dialog );
run_thread_on_noteworthy( "evac_chopper_1", ::add_spawn_function, ::evac_chopper_1 );
run_thread_on_noteworthy( "ignore_until_unload", ::ignore_until_unload );
run_thread_on_noteworthy( "checkpoing_clear_activate", ::force_trigger_on_flag, "checkpoint_enemies_dead" );
run_thread_on_noteworthy( "checkpoing_clear_activate", ::undo_cull_dist );
add_hint_string( "use_laser", &"ARCADIA_LASER_HINT", ::should_stop_laser_hint );
add_hint_string( "use_laser_golf", &"ARCADIA_LASER_HINT_GOLFCOURSE", ::should_stop_laser_golf_hint );
//--------------------------------
// Level threads
//--------------------------------
thread civilian_car();
thread checkpoint_cleared_dialog();
thread checkpoint_cleared_dialog_ac130();
thread laser_targeting_device( level.player );
thread fake_checkpoint_choppers();
thread fake_creek_choppers();
thread golf_course_fake_choppers();
thread second_street_friendlies();
thread golf_course_battle();
thread crashing_c130();
thread harriers();
thread fridge_guy();
thread foley_dunn_get_to_ending();
thread level_ending_sequence();
thread pool();
thread player_picks_up_briefcase();
thread activate_second_half_destructibles();
thread all_enemies_low_health();
thread foley_leads_through_mansion();
thread block_progression_until_artillery();
thread bmps_kill_player_before_artillery();
thread bmps_force_kill_player();
thread force_artillery_if_player_bypasses();
thread set_culldist_first_bridge();
thread undo_culldist_mansion();
//--------------------------------
// Make friendlies less accurate so the AI will fight longer without player interaction
//--------------------------------
wait 0.05;
friendlies = getaiarray( "allies" );
foreach( friend in friendlies )
friend.baseaccuracy = 0.4;
after0 = get_golf_geo( "golf_after", 0 );
assert( after0.size > 0 );
array_call( after0, ::hide );
after1 = get_golf_geo( "golf_after", 1 );
assert( after1.size > 0 );
array_call( after1, ::hide );
}
undo_cull_dist()
{
self waittill( "trigger" );
set_cull_dist( 0 );
}
set_culldist_first_bridge()
{
flag_wait( "first_bridge" );
set_cull_dist( 9000 );
}
undo_culldist_mansion()
{
flag_wait( "golf_course_mansion" );
set_cull_dist( 0 );
}
activate_second_half_destructibles()
{
//flag_wait( "past_checkpoint" );
wait 1;
volume = getent( "volume_second_half", "targetname" );
volume activate_destructibles_in_volume();
volume activate_interactives_in_volume();
}
precache_masked_destructibles()
{
loadfx( "smoke/car_damage_whitesmoke" );
loadfx( "smoke/car_damage_blacksmoke" );
loadfx( "smoke/car_damage_blacksmoke_fire" );
loadfx( "explosions/small_vehicle_explosion" );
loadfx( "props/car_glass_large" );
loadfx( "props/car_glass_med" );
loadfx( "props/car_glass_headlight" );
loadfx( "smoke/motorcycle_damage_blacksmoke_fire" );
loadfx( "props/car_glass_brakelight" );
loadfx( "props/mail_box_explode" );
loadfx( "props/garbage_spew_des" );
loadfx( "props/garbage_spew" );
loadfx( "explosions/wallfan_explosion_dmg" );
loadfx( "explosions/wallfan_explosion_des" );
loadfx( "props/filecabinet_dam" );
loadfx( "props/filecabinet_des" );
loadfx( "misc/light_blowout_runner" );
loadfx( "props/electricbox4_explode" );
loadfx( "explosions/ceiling_fan_explosion" );
loadfx( "props/firehydrant_leak" );
loadfx( "props/firehydrant_exp" );
loadfx( "props/firehydrant_spray_10sec" );
loadfx( "explosions/tv_flatscreen_explosion" );
precachemodel( "ma_flatscreen_tv_wallmount_broken_02" );
precachemodel( "vehicle_van_green_destructible" );
precachemodel( "vehicle_van_green_destroyed" );
precachemodel( "vehicle_van_green_hood" );
precachemodel( "vehicle_van_green_door_rb" );
precachemodel( "vehicle_van_green_mirror_l" );
precachemodel( "vehicle_van_green_mirror_r" );
precachemodel( "vehicle_van_wheel_lf" );
precachemodel( "vehicle_pickup_destructible_mp" );
precachemodel( "vehicle_pickup_destroyed" );
precachemodel( "vehicle_pickup_hood" );
precachemodel( "vehicle_pickup_door_lf" );
precachemodel( "vehicle_pickup_door_rf" );
precachemodel( "vehicle_pickup_mirror_l" );
precachemodel( "vehicle_pickup_mirror_r" );
precachemodel( "vehicle_luxurysedan_2008_white_destructible" );
precachemodel( "vehicle_luxurysedan_2008_white_destroy" );
precachemodel( "vehicle_luxurysedan_2008_white_hood" );
precachemodel( "vehicle_luxurysedan_2008_white_wheel_lf" );
precachemodel( "vehicle_luxurysedan_2008_white_door_lf" );
precachemodel( "vehicle_luxurysedan_2008_white_door_rf" );
precachemodel( "vehicle_luxurysedan_2008_white_door_lb" );
precachemodel( "vehicle_luxurysedan_2008_white_door_rb" );
precachemodel( "vehicle_luxurysedan_2008_white_mirror_l" );
precachemodel( "vehicle_luxurysedan_2008_white_mirror_r" );
precachemodel( "vehicle_coupe_gold_destructible" );
precachemodel( "vehicle_coupe_gold_destroyed" );
precachemodel( "vehicle_coupe_gold_door_lf" );
precachemodel( "vehicle_coupe_gold_spoiler" );
precachemodel( "vehicle_coupe_gold_mirror_l" );
precachemodel( "vehicle_coupe_gold_mirror_r" );
precachemodel( "vehicle_coupe_black_destructible" );
precachemodel( "vehicle_coupe_black_destroyed" );
precachemodel( "vehicle_coupe_black_door_lf" );
precachemodel( "vehicle_coupe_black_spoiler" );
precachemodel( "vehicle_coupe_black_mirror_l" );
precachemodel( "vehicle_coupe_black_mirror_r" );
precachemodel( "vehicle_suburban_destructible_beige" );
precachemodel( "vehicle_suburban_destroyed_beige" );
precachemodel( "vehicle_suburban_wheel_rf" );
precachemodel( "vehicle_suburban_door_lb_beige" );
precachemodel( "vehicle_motorcycle_01_destructible" );
precachemodel( "vehicle_motorcycle_01_destroy" );
precachemodel( "vehicle_motorcycle_01_front_wheel_d" );
precachemodel( "vehicle_motorcycle_01_rear_wheel_d" );
precachemodel( "vehicle_motorcycle_02_destructible" );
precachemodel( "vehicle_motorcycle_02_destroy" );
precachemodel( "vehicle_policecar_lapd_destructible" );
precachemodel( "vehicle_policecar_lapd_destroy" );
precachemodel( "vehicle_policecar_lapd_wheel_lf" );
precachemodel( "vehicle_policecar_lapd_door_lf" );
precachemodel( "vehicle_policecar_lapd_door_rf" );
precachemodel( "vehicle_policecar_lapd_door_lb" );
precachemodel( "vehicle_policecar_lapd_mirror_l" );
precachemodel( "vehicle_policecar_lapd_mirror_r" );
precachemodel( "mailbox_black" );
precachemodel( "mailbox_black_dam" );
precachemodel( "mailbox_black_dest" );
precachemodel( "mailbox_black_door" );
precachemodel( "mailbox_black_flag" );
precachemodel( "com_trashbin02" );
precachemodel( "com_trashbin02_dmg" );
precachemodel( "com_trashbin02_lid" );
precachemodel( "com_recyclebin01" );
precachemodel( "com_recyclebin01_dmg" );
precachemodel( "com_recyclebin01_lid" );
precachemodel( "cs_wallfan1" );
precachemodel( "cs_wallfan1_dmg" );
precachemodel( "com_filecabinetblackclosed" );
precachemodel( "com_filecabinetblackclosed_dam" );
precachemodel( "com_filecabinetblackclosed_des" );
precachemodel( "com_filecabinetblackclosed_drawer" );
precachemodel( "com_light_ceiling_round_on" );
precachemodel( "com_light_ceiling_round_off" );
precachemodel( "me_electricbox2" );
precachemodel( "me_electricbox2_dest" );
precachemodel( "me_electricbox2_door" );
precachemodel( "me_electricbox2_door_upper" );
precachemodel( "me_electricbox4" );
precachemodel( "me_electricbox4_dest" );
precachemodel( "me_electricbox4_door" );
precachemodel( "me_fanceil1" );
precachemodel( "me_fanceil1_des" );
precachemodel( "com_trashbin01" );
precachemodel( "com_trashbin01_dmg" );
precachemodel( "com_trashbin01_lid" );
precachemodel( "com_firehydrant" );
precachemodel( "com_firehydrant_dest" );
precachemodel( "com_firehydrant_dam" );
precachemodel( "com_firehydrant_cap" );
}
startStreet()
{
movePlayerToStartPoint( "playerstart_street" );
thread objective_aa_guns();
thread dialog_enemies_yellow_house();
thread dialog_enemies_grey_house();
thread dialog_enemies_pink_house();
thread dialog_enemies_apartments();
thread get_off_streets_dialog();
array_thread( getentarray( "opening_rpg_location", "targetname" ), ::opening_rpgs );
level.stryker thread stryker_rpg_dialog();
}
startCheckpoint()
{
flag_set( "used_laser" );
activate_trigger( "checkpoint_vision_trigger", "script_noteworthy" );
getent( "friendlyspawn_trigger_checkpoint", "script_noteworthy" ) notify( "trigger", level.player );
movePlayerToStartPoint( "playerstart_checkpoint" );
thread objective_aa_guns();
}
startGolf()
{
flag_set( "golf_course_vehicles" );
flag_set( "golf_course_mansion" );
flag_set( "used_laser" );
activate_trigger( "golfcourse_vision_trigger", "script_noteworthy" );
movePlayerToStartPoint( "playerstart_golf" );
thread objective_aa_guns();
thread objective_laze_golfcourse();
flag_set( "first_bridge" );
flag_set( "golf_course_battle" );
wait 0.05;
allies = getaiarray( "allies" );
locations = getentarray( "start_golf_friendly_teleport", "targetname" );
foreach( i, guy in allies )
guy forceTeleport( locations[ i ].origin, locations[ i ].angles );
trig = getent( "start_golf_friendly_trigger", "script_noteworthy" );
trig notify( "trigger", level.player );
exploder( "tanker_explosion_tall" );
thread sun_blocker();
}
startCrash()
{
activate_trigger( "crash_vision_trigger", "script_noteworthy" );
movePlayerToStartPoint( "playerstart_crash" );
flag_set( "fridge_guy" );
flag_set( "ending_prep" );
flag_set( "used_laser" );
flag_set( "disable_stryker_dialog" );
wait 0.05;
// delete stryker when the player goes through the house
level notify( "golf_course_mansion" );
level.stryker connectPaths();
level.stryker delete();
allies = getaiarray( "allies" );
locations = getentarray( "start_crash_friendly_teleport", "targetname" );
foreach( i, guy in allies )
{
guy forceTeleport( locations[ i ].origin, locations[ i ].angles );
guy.goalradius = 32;
guy setGoalPos( locations[ i ].origin );
}
trig = getent( "start_crash_friendly_respawn_trigger", "script_noteworthy" );
trig notify( "trigger", level.player );
thread objective_brookmere_road();
//exploder( "tanker_explosion_tall" );
thread sun_blocker();
}
objective_aa_guns()
{
objective_add( 0, "current", &"ARCADIA_OBJECTIVE_AA_GUNS" );
objective_onentity( 0, level.foley );
}
objective_laze_golfcourse()
{
if ( flag( "objective_laze_golfcourse" ) )
return;
flag_set( "objective_laze_golfcourse" );
level notify( "objective_laze_golfcourse" );
wait 0.05;
thread objective_brookmere_road();
objective_position( 0, ( 0, 0, 0 ) );
objective_additionalposition( 0, 0, getent( "obj_location_stealth_0", "targetname" ).origin );
objective_additionalposition( 0, 1, getent( "obj_location_stealth_1", "targetname" ).origin );
thread laser_golf_hint_print();
flag_wait( "stealth_bombed_0" );
flag_wait( "stealth_bombed_1" );
wait 3.0;
objective_state( 0, "done" );
wait 2;
flag_set( "golfcourse_vehicles_dead" );
}
objective_brookmere_road()
{
flag_wait_any( "second_bridge", "golfcourse_vehicles_dead" );
thread brookmere_road_dialog();
location = getent( "objective_brookmere_location", "targetname" );
objective_add( 1, "current", &"ARCADIA_OBJECTIVE_BROOKMERE", location.origin );
flag_wait( "brookmere_house" );
objective_state( 1, "done" );
thread objective_intel();
}
objective_intel()
{
location = getent( "objective_intel_location", "targetname" );
objective_add( 2, "current", &"ARCADIA_OBJECTIVE_INTEL", location.origin );
}
brookmere_road_dialog()
{
battlechatter_off( "allies" );
flavorbursts_off( "allies" );
// Overlord, Hunter Two-One-Actual. Triple-A has been neutralized. We're heading to 4677 Brookmere Road, over.
level.foley thread anim_single_solo( level.foley, "arcadia_fly_headingto4677" );
wait 7.5;
// Interrogative - what exactly are we looking for, over?
level.foley thread anim_single_solo( level.foley, "arcadia_fly_lookingfor" );
wait 3;
// Sergeant Foley, this is General Shepherd.
radio_dialogue( "arcadia_shp_genshep" );
// Your objective is to extract a high value individual from a 'panic room' on the second floor of that house.
radio_dialogue( "arcadia_shp_panicroom" );
// Yes sir!
level.foley thread anim_single_solo( level.foley, "arcadia_fly_yessir" );
wait 1;
// He'll be expecting you. Challenge is "Icepick", countersign is "Phoenix".
radio_dialogue( "arcadia_shp_phoenix" );
// Get him outta there and report back to Overlord. Shepherd out.
radio_dialogue( "arcadia_shp_reportback" );
wait 0.5;
// All right, you heard the man - 4677 Brookmere Road. Move!
level.foley thread anim_single_solo( level.foley, "arcadia_fly_heardtheman" );
wait 2.0;
flavorbursts_on( "allies" );
}
second_street_friendlies()
{
// once coming up to the second street before the bridge we change all the friendlies
// to GREEN color group so they all stick together.
// Also, 2 friendlies get set to 1 health and are told to no longer respawn on death.
// This leaves us with 4 friendlies instead of 6 for the new area
flag_wait( "first_bridge" );
friendlies = getaiarray( "allies" );
foreach( count, friend in friendlies )
{
if ( count == 0 || count == 1 )
{
friend thread disable_replace_on_death();
friend.health = 1;
}
friend thread set_force_color( "g" );
}
}
dialog_enemies_yellow_house()
{
flag_wait( "enemies_yellow_house" );
// We got hostiles in the yellow house!
level.foley thread dialogue_queue( "arcadia_fly_yellowhouse" );
}
dialog_enemies_grey_house()
{
flag_wait( "enemies_grey_house" );
// Enemies in the grey house!!!
level.dunn thread dialogue_queue( "arcadia_cpd_greyhouse" );
wait 1;
// Squad, we got hostiles that grey house! Take 'em out!!
level.foley thread dialogue_queue( "arcadia_fly_greyhouse" );
}
dialog_enemies_pink_house()
{
flag_wait( "enemies_pink_house" );
// Squad, put suppressing fire on that house!!
level.foley thread dialogue_queue( "arcadia_fly_suppressingfire" );
wait 8;
// Squad, concentrate your fire on that house!!
level.foley thread dialogue_queue( "arcadia_fly_suppressingfire" );
}
dialog_enemies_apartments()
{
flag_wait( "enemies_apartments" );
// Enemy foot-mobiles by the apartments!
level.dunn thread dialogue_queue( "arcadia_cpd_apartments" );
wait 1;
// Roger that, enemy foot-mobiles by the apartments, take 'em ouuut!!
level.foley thread dialogue_queue( "arcadia_fly_apartments" );
}
get_off_streets_dialog()
{
battlechatter_off( "allies" );
wait 5;
// Hunter Two-One, this is Hunter Two-One Actual. Our evac choppers are taking heavy losses from ground fire!
level.foley thread dialogue_queue( "arcadia_fly_heavylosses" );
wait 1;
// We gotta destroy those triple-A positions so they can get the rest of the civvies outta here! Let's go!
level.foley thread dialogue_queue( "arcadia_fly_destroytriplea" );
battlechatter_on( "allies" );
wait 10;
// Get off the streets!!
level.foley thread dialogue_queue( "arcadia_fly_getoffstreets" );
wait 10;
// Get off the streets, use the houses for cover!!
level.foley thread dialogue_queue( "arcadia_fly_offstreets" );
wait 15;
// Get outta the street!!
level.foley thread dialogue_queue( "arcadia_fly_outtastreets" );
wait 15;
// Flank 'em through the houses!! Go go go!!
level.foley thread dialogue_queue( "arcadia_fly_flankthruhouses" );
wait 20;
// Squad, move up through these houses, let's go, let's go!!
level.foley thread dialogue_queue( "arcadia_fly_movethruhouses" );
}
move_up_dialog()
{
// wait for the trigger to get hit that tells the friendlies to move up
self waittill( "trigger" );
guy = undefined;
anime = undefined;
rand = randomint( 4 );
switch( rand )
{
case 0:
// Everyone move up!
guy = level.foley;
anime = "arcadia_fly_everyoneup";
break;
case 1:
// Move up!
guy = level.foley;
anime = "arcadia_fly_moveup";
break;
case 2:
// Move up!!!
guy = level.dunn;
anime = "arcadia_cpd_moveup";
break;
case 3:
// Let's go, let's go!!
guy = level.dunn;
anime = "arcadia_cpd_letsgo";
break;
}
assert( isalive( guy ) );
assert( isdefined( anime ) );
guy thread dialogue_queue( anime );
}
stryker_rpg_dialog()
{
self endon( "death" );
flag_wait( "stryker_rpg_danger_dialog_1" );
wait 8;
// Squad! Protect the Stryker! Watch for foot-mobiles with RPGs!
level.foley thread dialogue_queue( "arcadia_fly_protectstryker" );
flag_wait( "stryker_rpg_danger_dialog_2" );
wait 8;
// Squad! They're targeting the Stryker! Watch for RPGs!
level.foley thread dialogue_queue( "arcadia_fly_watchforrpgs" );
flag_wait( "stryker_rpg_danger_dialog_3" );
wait 8;
// Hunter Two-One Actual, this is Badger One! Our anti-missile system cannot handle the volume of RPG fire, we need your team to thin 'em out, how copy, over?
thread radio_dialogue( "arcadia_str_rpgfire" );
// Solid copy Badger One, we're on it! Out!
level.foley thread dialogue_queue( "arcadia_fly_wereonit" );
}
checkpoint_cleared_dialog_ac130()
{
flag_wait( "crashing_c130" );
wait 3;
marine1 = undefined;
marine2 = undefined;
allies = getaiarray( "allies" );
assert( allies.size >= 4 );
foreach( guy in allies )
{
if ( guy is_hero() )
continue;
if ( !isdefined( marine1 ) )
marine1 = guy;
else
marine2 = guy;
if ( isdefined( marine1 ) && isdefined( marine2 ) )
break;
}
assert( isdefined( marine1 ) );
assert( isdefined( marine2 ) );
marine1 endon( "death" );
marine2 endon( "death" );
// Look look! That's an AC-130 man.
marine1 anim_generic( marine1, "arcadia_ar1_lookac130" );
// That's why they don't fly during the day soldier.
marine2 anim_generic( marine2, "arcadia_ar2_dontfly" );
// Damn<6D>sucks to be them<65>
marine1 anim_generic( marine1, "arcadia_ar1_suckstobethem" );
// Huah.
marine2 anim_generic( marine2, "arcadia_ar2_huah" );
}
checkpoint_cleared_dialog()
{
flag_wait( "past_checkpoint" );
battlechatter_off( "allies" );
flavorbursts_off( "allies" );
flag_set( "disable_stryker_dialog" );
// Hunter Two-One-Actual, Overlord. Gimme a sitrep over.
radio_dialogue( "arcadia_hqr_sitrep" );
// We're just past the enemy blockade at Checkpoint Lima. Now proceeding into Arcadia, over.
level.foley dialogue_queue( "arcadia_fly_intoarcadia" );
// Roger that. I have new orders for you. This comes down from the top, over.
radio_dialogue( "arcadia_hqr_neworders" );
// Solid copy Overlord, send it.
level.foley dialogue_queue( "arcadia_fly_solidcopy" );
// Your team is to divert to 4677 Brookmere Road after you have eliminated the triple-A.
radio_dialogue( "arcadia_hqr_divertto4677" );
// Solid copy Overlord. Divert to 4677 Brookmere Road once the guns are destroyed. Got it.
level.foley dialogue_queue( "arcadia_fly_divertto4677" );
// Check back with me when you've completed your main objective. Overlord out.
radio_dialogue( "arcadia_hqr_checkback" );
battlechatter_on( "allies" );
flavorbursts_on( "allies" );
flag_clear( "disable_stryker_dialog" );
}
fridge_guy()
{
flag_wait( "fridge_guy" );
guy = spawn_targetname( "fridge_guy_spawner" );
guy.animname = "fridge_guy";
guy set_ignoreme( true );
guy disable_surprise();
thread fridge_guy_death_wait( guy );
fridge = getent( "fridge", "targetname" );
assert( isdefined( fridge ) );
fridge.animname = "fridge";
fridge setAnimTree();
bottle = spawn( "script_model", guy.origin );
bottle setModel( "cs_vodkabottle01" );
bottle linkTo( guy, "tag_inhand", (0,0,0), (0,0,0) );
guy thread fridge_guy_remove_bottle_drop( bottle );
guy thread fridge_guy_remove_bottle_death( bottle );
guy_and_fridge[ 0 ] = guy;
guy_and_fridge[ 1 ] = fridge;
fridge thread anim_loop( guy_and_fridge, "fridge_idle", "stop_idle" );
guy.allowdeath = true;
fridge thread fridge_guy_spots_player( guy_and_fridge );
}
fridge_guy_death_wait( guy )
{
guy waittill( "death" );
wait 3.0;
flag_set( "icepick_callout" );
}
fridge_guy_remove_bottle_drop( bottle )
{
self endon( "death" );
self waittillmatch( "single anim", "break_bottle" );
bottle notify( "delete" );
bottle delete();
}
fridge_guy_remove_bottle_death( bottle )
{
bottle endon( "delete" );
self waittill( "death" );
bottle delete();
}
fridge_guy_spots_player_or_takes_damage( guy )
{
guy endon( "death" );
guy endon( "damage" );
trigger_wait( "fridge_guy_react", "targetname" );
}
fridge_guy_spots_player( guy_and_fridge )
{
guy_and_fridge[ 0 ] endon( "death" );
fridge_guy_spots_player_or_takes_damage( guy_and_fridge[ 0 ] );
self notify( "stop_idle" );
self thread anim_single( guy_and_fridge, "fridge_react" );
guy_and_fridge[ 0 ] set_ignoreme( false );
}
foley_dunn_get_to_ending()
{
flag_wait( "heros_become_red" );
// move foley and dunn to red
level.foley thread set_force_color( "r" );
level.foley.animplaybackrate = 1.2;
level.foley allowedStances( "stand" );
level.dunn thread set_force_color( "r" );
level.dunn.animplaybackrate = 1.2;
level.dunn allowedStances( "stand" );
}
level_ending_sequence()
{
thread level_ending_sequence_dialog();
// Wait for player to be approaching the end
flag_wait( "ending_prep" );
battlechatter_off( "allies" );
battlechatter_off( "axis" );
flavorbursts_off( "allies" );
flavorbursts_off( "axis" );
allies = getaiarray( "allies" );
foreach( friend in allies )
friend.baseaccuracy = 100;
housenode_foley = getnode( "housenode_foley", "targetname" );
housenode_dunn = getnode( "housenode_dunn", "targetname" );
hallnode_foley = getnode( "hallnode_foley", "targetname" );
hallnode_dunn = getnode( "hallnode_dunn", "targetname" );
node_foley = getnode( "ending_node_foley", "targetname" );
node_dunn = getent( "ending_node_dunn", "targetname" );
node_dunn_guard = getnode( "node_dunn_guard", "targetname" );
// put HVI and dead enemy in position
thread ending_sequence_deadguy( "hvi_spawner", "ending_node_hvi", "panicroom_hvi", "ending_pose" );
thread ending_sequence_deadguy( "ending_enemy_spawner", "ending_node_dunn", "panicroom_enemy", "ending_pose" );
level.foley pushPlayer( true );
level.dunn pushPlayer( true );
wait 0.1;
level.foley.goalradius = 16;
level.foley setGoalNode( housenode_foley );
level.dunn.goalradius = 16;
level.dunn setGoalNode( housenode_dunn );
flag_wait( "player_approaching_house" );
level.foley.goalradius = 16;
level.foley setGoalNode( hallnode_foley );
wait 0.5;
level.dunn.goalradius = 16;
level.dunn setGoalNode( hallnode_dunn );
// Wait for player to enter panic room
flag_wait( "start_ending" );
// Foley goes and stands in the panic room
level.foley.goalradius = 16;
level.foley setGoalNode( node_foley );
level.foley cqb_walk( "on" );
level.dunn.goalradius = 16;
level.dunn setGoalNode( node_dunn_guard );
level.foley.alertlevel = "noncombat";
level.dunn.alertlevel = "noncombat";
level.foley waittill( "goal" );
flag_set( "foley_in_panic_room" );
// wait for player to pick up briefcase before doing final anims
flag_wait( "picked_up_briefcase" );
// Objective is complete
objective_state( 2, "done" );
flag_set( "examine_tats" );
// Dunn examines tats
thread ending_sequence_dunn( node_dunn );
flag_wait( "foley_leaves_panic_room" );
// Foley walks out to see the tattoo guy
level.foley thread maps\_patrol::patrol( "ending_node_foley3" );
flag_wait( "end_dialog_done" );
nextmission();
}
ending_sequence_dunn( node_dunn )
{
level.dunn allowedStances( "stand" );
node_dunn anim_teleport_solo( level.dunn, "ending" );
node_dunn anim_single_solo( level.dunn, "ending" );
level.dunn.alertlevel = "noncombat";
level.dunn.goalradius = 16;
level.dunn allowedStances( "stand" );
level.dunn setGoalPos( level.dunn.origin );
}
ending_sequence_deadguy( spawner_targetname, node_targetname, animName, anime )
{
assert( isdefined( spawner_targetname ) );
assert( isdefined( node_targetname ) );
assert( isdefined( animName ) );
assert( isdefined( anime ) );
spawner = getent( spawner_targetname, "targetname" );
assert( isdefined( spawner ) );
node = getent( node_targetname, "targetname" );
assert( isdefined( node ) );
guy = ending_sequence_deadguy_create( spawner );
guy.animname = animName;
node thread anim_first_frame_solo( guy, anime );
//flag_wait( "player_approaching_house" );
//wait 0.05;
//guy.team = "neutral";
//guy.no_friendly_fire_penalty = true;
//guy.allowdeath = false;
//guy.a.nodeath = true;
//guy.noragdoll = true;
//guy gun_remove();
//guy magic_bullet_shield();
//guy.noDrop = true;
//guy kill();
}
ending_sequence_deadguy_create( spawner )
{
guy = spawner spawn_ai( true );
assert( isdefined( guy ) );
guy gun_remove();
model = spawn( "script_model", guy.origin );
model.angles = guy.angles;
model setmodel( guy.model );
numAttached = guy getattachsize();
for ( i = 0; i < numAttached; i++ )
{
modelname = guy getattachmodelname( i );
tagname = guy getattachtagname( i );
model attach( modelname, tagname, true );
}
model UseAnimTree( #animtree );
guy delete();
return model;
}
level_ending_sequence_dialog()
{
flag_wait( "icepick_callout" );
// Icepick.
level.foley dialogue_queue( "arcadia_fly_icepick1" );
wait 1.5;
flag_wait( "player_upstairs" );
// Icepick!
level.foley dialogue_queue( "arcadia_fly_icepick2" );
wait 1.0;
// Something's not right here<72>Check the panic room - move!
level.foley dialogue_queue( "arcadia_fly_notright" );
thread music_play( "arcadia_panicroom" );
flag_wait( "start_ending" );
// Hmph. No sign of forced entry<72>
level.foley anim_single_solo( level.foley, "arcadia_fly_nosign" );
flag_wait( "foley_in_panic_room" );
wait 1;
// Ramirez, get that briefcase...what's left of it.
level.foley anim_single_solo( level.foley, "arcadia_fly_getthatbriefcase" );
flag_set( "player_can_pick_up_briefcase" );
flag_wait( "examine_tats" );
flag_set( "foley_leaves_panic_room" );
wait 5.5;
// Sarge, check out these tats. Not your average paratrooper, huah?
//played from anim
// Huah. Get a couple photos for G-2 and check the bodies for intel.
level.foley setLookAtEntity( level.dunn );
level.foley anim_single_solo( level.foley, "arcadia_fly_photosforg2" );
// Huah.
level.dunn dialogue_queue( "arcadia_cpd_huah" );
level.foley setLookAtEntity();
// Shepherd's not gonna like this.
level.foley anim_single_solo( level.foley, "arcadia_fly_notgoingtolike" );
wait 1.5;
thread delayThread( 1.5, ::flag_set, "end_dialog_done" );
// Overlord, the HVI is dead.
level.foley anim_single_solo( level.foley, "arcadia_fly_overlordhvi" );
}
player_picks_up_briefcase()
{
use_trig = getent( "briefcase_trigger", "targetname" );
use_trig setHintString( &"ARCADIA_PICK_UP_BRIEFCASE_HINT" );
briefcase = getent( "briefcase", "targetname" );
use_trig trigger_off();
flag_wait( "player_can_pick_up_briefcase" );
briefcase setmodel( "com_metal_briefcase_opened_obj" );
use_trig trigger_on();
use_trig waittill( "trigger" );
briefcase thread play_sound_in_space( "intelligence_briefcase_pickup" );
flag_set( "picked_up_briefcase" );
use_trig delete();
briefcase delete();
}