1108 lines
32 KiB
Plaintext
1108 lines
32 KiB
Plaintext
#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();
|
||
} |