IW4-Dump-Files/maps/so_escape_airport.gsc

193 lines
6.0 KiB
Plaintext

#include common_scripts\utility;
#include maps\_utility;
#include maps\_specialops;
#include maps\so_escape_airport_code;
#include maps\airport_code;
/*------------------- tweakables -------------------*/
CONST_regular_obj = &"SO_ESCAPE_AIRPORT_OBJ_REGULAR";
CONST_hardened_obj = &"SO_ESCAPE_AIRPORT_OBJ_HARDENED";
CONST_veteran_obj = &"SO_ESCAPE_AIRPORT_OBJ_VETERAN";
/*------------------- tweakables -------------------*/
main()
{
level.so_compass_zoom = "close";
level.friendlyfire_warnings = true;
// Special Op mode deleting all original spawn triggers, vehicles and spawners
// ::type_script_model_civilian
// ::type_spawners
// ::type_vehicle
// ::type_spawn_trigger
// ::type_trigger
so_delete_all_by_type( ::type_spawn_trigger, ::type_vehicle, ::type_spawners, ::type_script_model_civilian );
default_start( ::start_so_escape );
add_start( "so_escape", ::start_so_escape );
maps\createart\airport_art::main();
maps\createfx\airport_audio::main();
maps\createfx\airport_fx::main();
maps\airport_fx::main();
common_scripts\_destructible_types_anim_light_fluo_on::main();
maps\_load::main();
maps\airport_amb::main();
maps\_utility::set_ambient( "airport_terminal0" );
maps\_compass::setupMiniMap( "compass_map_airport" );
disable_elevators();
}
disable_elevators()
{
// Connect the top floor paths for the elevator that doesn't crash.
elevator = level.elevators[ 0 ];
left_door = elevator common_scripts\_elevator::get_outer_leftdoor( 1 );
right_door = elevator common_scripts\_elevator::get_outer_rightdoor( 1 );
left_door ConnectPaths();
right_door ConnectPaths();
// Just remove the triggers in the elevator
housings = GetEntArray( "elevator_housing", "targetname" );
foreach ( housing in housings )
{
housing disable_elevator_internal();
}
buttons = GetEntArray( "elevator_call", "targetname" );
foreach ( button in buttons )
{
button.origin = ( 0, 0, -50000 );
}
}
disable_elevator_internal()
{
ent = self;
num = 0;
while ( 1 )
{
if ( !IsDefined( ent.target ) )
{
return;
}
ent = GetEnt( ent.target, "targetname" );
switch ( num )
{
case 2:
case 3:
ent.origin = ( 0, 0, -50000 );
}
num++;
}
}
start_so_escape()
{
so_escape_airport_init();
foreach( enemy_group, delete_num in level.enemy_remove_trigs )
thread past_enemy_remove( enemy_group, delete_num );
music_loop( "so_escape_airport_music", 148 );
thread fade_challenge_in();
thread fade_challenge_out( "escaped_terminal" );
thread enable_triggered_start( "start_terminal" );
thread enable_triggered_complete( "escaped_trigger", "escaped_terminal", "all" );
thread enable_challenge_timer( "start_terminal", "escaped_terminal" );
}
#using_animtree( "generic_human" );
so_escape_airport_init()
{
// Will create an _anim file if we get more.
level.scr_anim[ "generic" ][ "pronehide_dive" ] = %hunted_dive_2_pronehide_v1;
flag_init( "escaped_terminal" );
flag_init( "start_terminal" );
flag_init( "challenge_success" );
/*dummy*/flag_init( "escaped_trigger" );
thread shoot_out_glass();
thread glass_elevator_setup();
thread sign_departure_status_init();
thread sign_departure_status_eratic();
level.enemy_remove_trigs = [];
add_global_spawn_function( "axis", ::enemy_register );
thread spawn_smoke( "smoke_escalators_first", "enemy_waiting_area_above_movein_trig" );
thread spawn_smoke( "smoke_escalators_ending", "enemy_security_area_final_movein_trig", 0.0 );
thread crash_elevator();
array_thread( GetEntArray( "glass_delete", "targetname" ), ::delete_glass );
// enemy_move_to_struct( move trigger, seek_goalradius, stay, duration of stay before seeking )
// First round of guys to the right of the entrance. Should pull player away from obvious escalator target.
array_spawn_function_noteworthy( "enemy_waiting_area_intro", ::enemy_move_to_struct, "enemy_waiting_area_intro", 384 );
level.enemy_remove_trigs[ "enemy_waiting_area_intro" ] = 0;
// Surround the player now that they've gone into the exposed area
array_spawn_function_noteworthy( "enemy_waiting_area_above", ::enemy_move_to_struct, "enemy_waiting_area_above", 384, true, randomintrange( 20, 30 ) );
array_spawn_function_noteworthy( "enemy_waiting_area_above", ::enemy_ignore_cover );
level.enemy_remove_trigs[ "enemy_waiting_area_above" ] = 0;
// Urban ghillie up into view.
array_spawn_function_noteworthy( "enemy_dining_area_prone", ::enemy_prone_to_stand, "enemy_dining_area_riot", 512 );
array_spawn_function_noteworthy( "enemy_dining_area_riot", ::enemy_move_to_struct, "enemy_dining_area_riot", 512, true, randomintrange( 10, 15 ) );
level.enemy_remove_trigs[ "enemy_dining_area_prone" ] = 0;
// Hitting hard with shield guys now
array_spawn_function_noteworthy( "enemy_store_area_prone", ::enemy_prone_to_stand, "enemy_store_area_start", 512 );
array_spawn_function_noteworthy( "enemy_store_area_start", ::enemy_move_to_struct, "enemy_store_area_start", 512, true, randomintrange( 10, 15 ) );
level.enemy_remove_trigs[ "enemy_store_area_start" ] = 0;
// Hitting hard with shield guys now
array_spawn_function_noteworthy( "enemy_security_area_top", ::enemy_move_to_struct, "enemy_security_area_final", 1024 );
array_spawn_function_noteworthy( "enemy_security_area_bottom", ::enemy_move_to_struct, "enemy_security_area_final", 1024, true, randomintrange( 30, 45 ) );
array_spawn_function_noteworthy( "enemy_security_area_final", ::enemy_move_to_struct, "enemy_security_area_final", 1024, true, randomintrange( 45, 135 ) );
level.enemy_remove_trigs[ "enemy_security_area_final" ] = 0;
hide_destroyed_parts();
assert( isdefined( level.gameskill ) );
switch( level.gameSkill )
{
case 0: // Easy
case 1: so_setup_regular(); break; // Regular
case 2: so_setup_hardened(); break; // Hardened
case 3: so_setup_veteran(); break; // Veteran
}
thread objective_breadcrumb();
}
so_setup_regular()
{
level.challenge_objective = CONST_regular_obj;
}
so_setup_hardened()
{
level.challenge_objective = CONST_hardened_obj;
}
so_setup_veteran()
{
level.challenge_objective = CONST_veteran_obj;
}