IW4-Dump-Files/maps/so_demo_so_bridge.gsc

322 lines
9.8 KiB
Plaintext

#include common_scripts\utility;
#include maps\_utility;
#include maps\_vehicle;
#include maps\_anim;
#include maps\so_bridge_code;
#include maps\so_demo_so_bridge_code;
#include maps\_specialops;
// ---------------------------------------------------------------------------------
// Init
// ---------------------------------------------------------------------------------
main()
{
default_start( ::start_so_demoman );
add_start( "so_demoman", ::start_so_demoman, "Demolition Man" );
precachestring( &"SO_DEMO_SO_BRIDGE_VEHICLES" );
precachestring( &"SO_DEMO_SO_BRIDGE_WRECKAGE_IN" );
precachestring( &"SO_DEMO_SO_BRIDGE_WRECKAGE_ACTIVE" );
precachestring( &"SO_DEMO_SO_BRIDGE_INFINITE_AMMO" );
precachestring( &"SO_DEMO_SO_BRIDGE_INFINITE_AMMO_AMOUNT" );
precachestring( &"SO_DEMO_SO_BRIDGE_OBJ_REGULAR" );
precachestring( &"SO_DEMO_SO_BRIDGE_OBJ_HARDENED" );
precachestring( &"SO_DEMO_SO_BRIDGE_OBJ_VETERAN" );
precachestring( &"SO_DEMO_SO_BRIDGE_STAT_OTHER" );
precachestring( &"SO_DEMO_SO_BRIDGE_STAT_PARTNER" );
precachestring( &"SO_DEMO_SO_BRIDGE_STAT_YOU" );
PreCacheShader( "waypoint_targetneutral" );
maps\so_bridge_fx::main();
maps\createart\so_bridge_art::main();
maps\so_bridge_anim::main();
maps\so_bridge_precache::main();
maps\_attack_heli::preLoad();
maps\_load::main();
common_scripts\_sentry::main();
maps\_compass::setupMiniMap("compass_map_so_bridge");
thread maps\so_bridge_amb::main();
}
// ---------------------------------------------------------------------------------
// Challenge Initializations
// ---------------------------------------------------------------------------------
start_so_demoman()
{
so_demoman_init();
thread music_loop( "so_demo_so_bridge_music", 344 );
thread enable_escape_warning();
thread enable_escape_failure();
thread enable_challenge_timer( "so_demoman_start", "so_demoman_complete" );
thread fade_challenge_in();
thread fade_challenge_out( "so_demoman_complete" );
array_thread( level.players, ::hud_display_cars_remaining );
array_thread( level.players, ::hud_display_wreckage_count );
array_thread( level.players, ::hud_display_cars_hint );
enable_uav_resources();
enable_ambient_uavs();
thread track_infinite_ammo_time();
thread enable_bridge_collapse();
enable_missile_attack_taxi();
enable_rappel_bridge();
enable_rappel_bridge_seek();
enable_troop_flood();
enable_attack_heli();
enable_rappel_heli_close();
enable_rappel_heli_far();
}
so_demoman_init()
{
level.custom_eog_no_partner = true;
level.eog_summary_callback = ::custom_eog_summary;
switch( level.gameSkill )
{
case 0: // Easy
case 1: so_demoman_setup_regular(); break; // Regular
case 2: so_demoman_setup_hardened(); break; // Hardened
case 3: so_demoman_setup_veteran(); break; // Veteran
}
enemy_list = getentarray( "player_seek_stages", "script_noteworthy" );
enemy_list = array_merge( enemy_list, getentarray( "upper_level_enemies", "script_noteworthy" ) );
enemy_list = array_merge( enemy_list, getentarray( "rappel_bridge_seek", "script_noteworthy" ) );
enemy_list = array_merge( enemy_list, getentarray( "rappel_bridge", "script_noteworthy" ) );
enemy_list = array_add( enemy_list, getent( "kill_heli", "targetname" ) );
array_thread( enemy_list, ::add_spawn_function, ::register_bridge_enemy );
level.vehicle_list = getentarray( "vehicle_undestroyed", "script_noteworthy" );
level.vehicle_list = array_add( level.vehicle_list, vehicle_get_slide_car( "missile_taxi" ) );
level.vehicle_list = array_add( level.vehicle_list, vehicle_get_slide_car( "slide_car_1" ) );
level.vehicle_list = array_add( level.vehicle_list, vehicle_get_slide_car( "slide_car_3" ) );
level.vehicle_list = array_add( level.vehicle_list, vehicle_get_slide_car( "slide_car_4" ) );
foreach ( vehicle in level.vehicle_list )
{
if ( vehicle.classname != "script_model" )
level.vehicle_list = array_remove( level.vehicle_list, vehicle );
}
array_thread( level.vehicle_list, ::vehicle_alive_think );
level.bonus_time_amount = 30;
level.bonus_count_goal = 5;
level.vehicle_damage = 0;
level.default_sprint = getdvar( "player_sprintSpeedScale" );
level.player_sprint_scale = 2;
setSavedDvar( "player_sprintUnlimited", "1" );
setSavedDvar( "player_sprintSpeedScale", level.player_sprint_scale );
foreach ( player in level.players )
{
player.vehicle_damage = 0;
player thread player_wait_for_fire();
}
deadquotes = [];
deadquotes[ deadquotes.size ] = "@SO_DEMO_SO_BRIDGE_DEADQUOTE_HINT1";
deadquotes[ deadquotes.size ] = "@SO_DEMO_SO_BRIDGE_DEADQUOTE_HINT2";
deadquotes[ deadquotes.size ] = "@SO_DEMO_SO_BRIDGE_DEADQUOTE_HINT3";
deadquotes[ deadquotes.size ] = "@SO_DEMO_SO_BRIDGE_DEADQUOTE_HINT4";
deadquotes[ deadquotes.size ] = "@SO_DEMO_SO_BRIDGE_DEADQUOTE_HINT5";
so_include_deadquote_array( deadquotes );
}
so_demoman_setup_regular()
{
objective_add( 1, "current", &"SO_DEMO_SO_BRIDGE_OBJ_REGULAR" );
}
so_demoman_setup_hardened()
{
objective_add( 1, "current", &"SO_DEMO_SO_BRIDGE_OBJ_HARDENED" );
}
so_demoman_setup_veteran()
{
objective_add( 1, "current", &"SO_DEMO_SO_BRIDGE_OBJ_VETERAN" );
}
// ---------------------------------------------------------------------------------
// Enable/Disable events
// ---------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------
custom_eog_summary()
{
// Give the players some slight fudge at the start of the map. Planting C4 on the cars before the timer starts
// still winds up with about half a second of "normal" time before IA is engaged making it impossible to get 100%.
level.normal_time = max( level.normal_time - 1.0, 0.0 );
total_time = level.normal_time + level.infinite_time;
infinite_percent = 0;
if ( total_time > 0 )
infinite_percent = int( ( level.infinite_time / total_time ) * 100 );
foreach ( player in level.players )
player add_custom_eog_summary_line( "@SO_DEMO_SO_BRIDGE_INFINITE_AMMO_PERCENT", infinite_percent + "%" );
if ( !is_coop() )
return;
total_damage = 0;
foreach ( player in level.players )
total_damage += player.vehicle_damage;
p1_percent = 0;
p2_percent = 0;
if ( total_damage > 0 )
{
p1_percent = int( ( level.player.vehicle_damage / total_damage ) * 100 );
p2_percent = int( ( level.player2.vehicle_damage / total_damage ) * 100 );
// If we don't get 100% total, go ahead and give the person with the lower percent a tiny moral boost.
if ( p1_percent + p2_percent < 100 )
{
if ( p1_percent < p2_percent )
p1_percent++;
else
p2_percent++;
}
}
level.player add_custom_eog_summary_line( "@SO_DEMO_SO_BRIDGE_STAT_YOU", p1_percent + "%" );
level.player2 add_custom_eog_summary_line( "@SO_DEMO_SO_BRIDGE_STAT_YOU", p2_percent + "%" );
if ( is_coop_online() )
{
level.player2 add_custom_eog_summary_line( "@SO_DEMO_SO_BRIDGE_STAT_PARTNER", p1_percent + "%" );
level.player add_custom_eog_summary_line( "@SO_DEMO_SO_BRIDGE_STAT_PARTNER", p2_percent + "%" );
}
}
// ---------------------------------------------------------------------------------
enable_uav_resources()
{
array_thread( getvehiclenodearray( "uav_sound", "script_noteworthy" ), maps\_ucav::plane_sound_node );
array_thread( getvehiclenodearray( "fire_missile", "script_noteworthy" ), maps\_ucav::fire_missile_node );
}
enable_ambient_uavs()
{
flag_set( "so_ambient_uavs" );
thread delayThread( 2, ::spawn_vehicle_from_targetname_and_drive, "ucav_flyover_01" );
thread delayThread( 8, ::spawn_vehicle_from_targetname_and_drive, "ucav_flyover_02" );
thread delayThread( 20, ::spawn_vehicle_from_targetname_and_drive, "ucav_flyover_03" );
}
// ---------------------------------------------------------------------------------
enable_rappel_bridge()
{
flag_set( "so_rappel_bridge" );
array_spawn_function_noteworthy( "rappel_bridge" , ::ai_rappel_think );
}
// ---------------------------------------------------------------------------------
enable_rappel_bridge_seek()
{
flag_set( "so_rappel_bridge_seek" );
array_spawn_function_noteworthy( "rappel_bridge_seek" , ::ai_rappel_think, true );
}
// ---------------------------------------------------------------------------------
enable_bridge_collapse()
{
flag_set( "so_bridge_collapse" );
precacheModel( "vehicle_coupe_gold" );
thread collapsed_section_shakes();
thread bridge_collapse_prep();
trigger = GetEnt( "bridge_collapse", "targetname" );
if ( GetDvar( "test_bridge_collapse" ) == "1" )
{
trigger thread notify_delay( "trigger", 10 );
}
trigger waittill( "trigger" );
// Reduce speed until collapse is done, view_tilt resets this
foreach ( player in level.players )
{
player AllowSprint( false );
player blend_movespeedscale( 0.7, 2 );
}
dmg_trigger = GetEnt( "so_bridge_damage_trigger", "targetname" );
count = 0;
while ( 1 )
{
dmg_trigger waittill( "trigger", other );
if ( other.code_classname == "script_vehicle" )
{
count++;
if ( count == 1 )
{
thread bridge_collapse_earthquake();
exploder( 2 );
}
if ( count == 2 )
{
level notify( "bridge_collapse" );
return;
}
}
}
}
// ---------------------------------------------------------------------------------
enable_missile_attack_taxi()
{
flag_set( "so_missile_attack_taxi" );
thread missile_taxi_moves();
}
// ---------------------------------------------------------------------------------
enable_attack_heli()
{
flag_set( "so_attack_heli" );
thread attack_heli();
}
// ---------------------------------------------------------------------------------
enable_troop_flood()
{
flag_set( "so_flood_spawner" );
}
// ---------------------------------------------------------------------------------
enable_rappel_heli_close()
{
flag_set( "so_rappel_heli_close" );
}
// ---------------------------------------------------------------------------------
enable_rappel_heli_far()
{
flag_set( "so_rappel_heli_far" );
}
// ---------------------------------------------------------------------------------