IW4-Dump-Files/maps/so_hidden_so_ghillies.gsc

426 lines
12 KiB
Plaintext

#include common_scripts\utility;
#include maps\_utility;
#include maps\_anim;
#include maps\_specialops;
#include maps\so_hidden_so_ghillies_code;
// ---------------------------------------------------------------------------------
// Init
// ---------------------------------------------------------------------------------
main()
{
level.so_compass_zoom = "far";
default_start( ::start_so_hidden );
add_start( "so_hidden", ::start_so_hidden, "SO Hidden" );
add_start( "so_hidden_ghillie_crates", ::start_so_hidden_ghillie_crates, "Ghillie - Crates" );
add_start( "so_hidden_ghillie_valley", ::start_so_hidden_ghillie_valley, "Ghillie - Valley" );
add_start( "so_hidden_patrol_church", ::start_so_hidden_patrol_church, "Patrol - Church" );
add_start( "so_hidden_patrol_houses", ::start_so_hidden_patrol_houses, "Patrol - Houses" );
add_start( "so_hidden_patrol_barn", ::start_so_hidden_patrol_barn, "Patrol - Barn" );
add_start( "so_hidden_ghillie_houses", ::start_so_hidden_ghillie_houses, "Ghillie - Houses" );
setsaveddvar( "sm_sunShadowScale", "0.7" ); // optimization
setsaveddvar( "ui_hidemap", "1" );
maps\so_hidden_so_ghillies_anim::main();
maps\so_ghillies_precache::main();
maps\createart\so_ghillies_art::main();
maps\so_ghillies_fx::main();
maps\_load::main();
thread maps\so_ghillies_amb::main();
}
// ---------------------------------------------------------------------------------
// Challenge Initializations
// ---------------------------------------------------------------------------------
start_so_hidden()
{
start_so_hidden_basics();
thread enable_patrol_enemies_crates();
thread enable_ghillie_enemies_crates();
thread enable_ghillie_enemies_valley();
thread enable_patrol_enemies_church();
thread enable_patrol_enemies_houses();
thread enable_patrol_enemies_barn();
thread enable_ghillie_enemies_houses();
}
start_so_hidden_ghillie_crates()
{
start_so_hidden_basics();
thread enable_ghillie_enemies_crates();
thread enable_ghillie_enemies_valley();
thread enable_patrol_enemies_church();
thread enable_patrol_enemies_houses();
thread enable_patrol_enemies_barn();
thread enable_ghillie_enemies_houses();
start_so_hidden_gogogo( "start_ghillie_crates" );
}
start_so_hidden_ghillie_valley()
{
start_so_hidden_basics();
thread enable_ghillie_enemies_valley();
thread enable_patrol_enemies_church();
thread enable_patrol_enemies_houses();
thread enable_patrol_enemies_barn();
thread enable_ghillie_enemies_houses();
start_so_hidden_gogogo( "start_ghillie_valley" );
}
start_so_hidden_patrol_church()
{
start_so_hidden_basics();
thread enable_patrol_enemies_church();
thread enable_patrol_enemies_houses();
thread enable_patrol_enemies_barn();
thread enable_ghillie_enemies_houses();
start_so_hidden_gogogo( "start_patrol_church" );
}
start_so_hidden_patrol_houses()
{
start_so_hidden_basics();
thread enable_patrol_enemies_houses();
thread enable_patrol_enemies_barn();
thread enable_ghillie_enemies_houses();
start_so_hidden_gogogo( "start_patrol_houses" );
}
start_so_hidden_patrol_barn()
{
start_so_hidden_basics();
thread enable_patrol_enemies_barn();
thread enable_ghillie_enemies_houses();
start_so_hidden_gogogo( "start_patrol_barn" );
}
start_so_hidden_ghillie_houses()
{
start_so_hidden_basics();
thread enable_ghillie_enemies_houses();
start_so_hidden_gogogo( "start_ghillie_houses" );
}
start_so_hidden_basics()
{
so_hidden_init();
thread enable_stealth();
thread enable_radiation();
array_thread( level.players, ::dialog_unsilenced_weapons );
thread fade_challenge_in();
thread fade_challenge_out( "so_hidden_complete" );
thread enable_challenge_timer( "so_hidden_start" , "so_hidden_complete" );
thread enable_triggered_complete( "so_hidden_exit_trigger", "so_hidden_complete", "all" );
// Hint to show current bonuses.
array_thread( level.players, ::hud_bonuses_create );
}
so_hidden_init()
{
flag_init( "so_hidden_complete" );
flag_init( "so_hidden_exit_trigger" );
flag_init( "force_disable_stealth" );
flag_init( "church_windows_back" );
flag_init( "church_windows_front" );
flag_init( "school_windows" );
flag_init( "house_windows" );
// thread stealth_achievement();
level.custom_eog_no_kills = true;
level.custom_eog_no_partner = true;
level.eog_summary_callback = ::custom_eog_summary;
switch( level.gameSkill )
{
case 0: // Easy
case 1: so_hidden_setup_regular(); break; // Regular
case 2: so_hidden_setup_hardened(); break; // Hardened
case 3: so_hidden_setup_veteran(); break; // Veteran
}
// Objective marker updates.
thread objective_set_chopper();
// Give player a chance to not be seen through windows.
array_thread( getentarray( "clip_nosight", "targetname" ), ::clip_nosight_wait_for_activate );
// Open up the church doorway.
church_doors = getentarray( "church_door_front", "targetname" );
foreach ( door in church_doors )
{
door ConnectPaths();
door Delete();
}
// Keeps track of how many are active at a time.
level.ghillie_count = 0;
level.patrol_count = 0;
level.enemies_spawned = 0;
level.ghillie_go_aggro_distance = 450;
patrol_enemy_reset_multi_kill();
// Only allow kill announcements every few seconds.
level.death_dialog_throttle = 2500;
level.death_dialog_time = gettime() + level.death_dialog_throttle;
level.dialog_kill_stealth = [];
level.dialog_kill_stealth[ level.dialog_kill_stealth.size ] = "so_hid_ghil_goodnight";
level.dialog_kill_stealth[ level.dialog_kill_stealth.size ] = "so_hid_ghil_beautiful";
level.dialog_kill_stealth[ level.dialog_kill_stealth.size ] = "so_hid_ghil_perfect";
level.dialog_kill_quiet = [];
level.dialog_kill_quiet[ level.dialog_kill_quiet.size ] = "so_hid_ghil_tango_down";
level.dialog_kill_quiet[ level.dialog_kill_quiet.size ] = "so_hid_ghil_hesdown";
level.dialog_kill_quiet[ level.dialog_kill_quiet.size ] = "so_hid_ghil_neutralized";
level.dialog_kill_basic = [];
level.dialog_kill_basic[ level.dialog_kill_basic.size ] = "so_hid_ghil_sloppy";
level.dialog_kill_basic[ level.dialog_kill_basic.size ] = "so_hid_ghil_noisy";
level.dialog_kill_basic[ level.dialog_kill_basic.size ] = "so_hid_ghil_do_better";
// Global time bonuses
level.bonus_stealth = 6;
level.bonus_nofire = 3;
level.bonus_basic = 1;
level.bonus_time_given = 0;
// Global number of kill counts
level.deaths_stealth = 0;
level.deaths_nofire = 0;
level.deaths_basic = 0;
// Individual player kill counts
foreach ( player in level.players )
{
player.kills_stealth = 0;
player.kills_nofire = 0;
player.kills_basic = 0;
}
level._effect[ "extraction_smoke" ] = loadfx( "smoke/signal_smoke_green" );
deadquotes = [];
deadquotes[ deadquotes.size ] = "@DEADQUOTE_SO_STEALTH_LOOK_FOR_ENEMIES";
deadquotes[ deadquotes.size ] = "@DEADQUOTE_SO_STEALTH_STAY_LOW";
deadquotes[ deadquotes.size ] = "@DEADQUOTE_SO_STEALTH_USE_SILENCERS";
so_include_deadquote_array( deadquotes );
}
start_so_hidden_gogogo( start_id )
{
start_point = getstruct( start_id, "script_noteworthy" );
maps\_specialops_code::place_player_at_start_point( level.player, start_point );
if ( is_coop() )
maps\_specialops_code::place_player2_near_player1();
wait 0.05;
flag_set( "so_hidden_start" );
}
so_hidden_setup_regular()
{
obj = getstruct( "so_hidden_obj_church", "script_noteworthy" );
objective_add( 1, "current", &"SO_HIDDEN_SO_GHILLIES_OBJ_REGULAR", obj.origin );
level.coop_difficulty_scalar = 0.75;
level.ghillie_move_intro_min = 2.0;
level.ghillie_move_intro_max = 3.0;
level.ghillie_move_time_min = 4.0;
level.ghillie_move_time_max = 8.0;
level.ghillie_shoot_pause_min = 2.5;
level.ghillie_shoot_pause_max = 3.5;
level.ghillie_shoot_quit_min = 4.0;
level.ghillie_shoot_quit_max = 8.0;
level.ghillie_shoot_hold_min = 2.0;
level.ghillie_shoot_hold_max = 3.0;
level.ghillie_crouch_chance = 0.33;
level.ghillie_flub_time_min = 5000;
level.ghillie_flub_time_max = 10000;
}
so_hidden_setup_hardened()
{
obj = getstruct( "so_hidden_obj_church", "script_noteworthy" );
objective_add( 1, "current", &"SO_HIDDEN_SO_GHILLIES_OBJ_HARDENED", obj.origin );
level.coop_difficulty_scalar = 0.33;
level.ghillie_move_intro_min = 2.0;
level.ghillie_move_intro_max = 3.0;
level.ghillie_move_time_min = 4.0;
level.ghillie_move_time_max = 8.0;
level.ghillie_shoot_pause_min = 1.0;
level.ghillie_shoot_pause_max = 1.75;
level.ghillie_shoot_quit_min = 8.0;
level.ghillie_shoot_quit_max = 12.0;
level.ghillie_shoot_hold_min = 0.8;
level.ghillie_shoot_hold_max = 1.6;
level.ghillie_crouch_chance = 0.15;
level.ghillie_flub_time_min = 10000;
level.ghillie_flub_time_max = 20000;
}
so_hidden_setup_veteran()
{
obj = getstruct( "so_hidden_obj_church", "script_noteworthy" );
objective_add( 1, "current", &"SO_HIDDEN_SO_GHILLIES_OBJ_VETERAN", obj.origin );
level.coop_difficulty_scalar = 0.25;
level.ghillie_move_intro_min = 1.0;
level.ghillie_move_intro_max = 2.0;
level.ghillie_move_time_min = 4.0;
level.ghillie_move_time_max = 8.0;
level.ghillie_shoot_pause_min = 0.4;
level.ghillie_shoot_pause_max = 0.8;
level.ghillie_shoot_quit_min = 10.0;
level.ghillie_shoot_quit_max = 20.0;
level.ghillie_shoot_hold_min = 0.2;
level.ghillie_shoot_hold_max = 0.4;
level.ghillie_crouch_chance = 0.0;
}
// ---------------------------------------------------------------------------------
// Enable/Disable events
// ---------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------
enable_patrol_enemies_crates()
{
thread create_patrol_enemies( "patrol_enemy_crates", "patrol_enemies_spawn_crates" );
}
enable_patrol_enemies_church()
{
flag_set( "church_windows_back" );
thread create_patrol_enemies( "patrol_enemy_church", "patrol_enemies_spawn_church", 0.5 );
}
enable_patrol_enemies_houses()
{
flag_set( "church_windows_front" );
flag_set( "school_windows" );
thread create_patrol_enemies( "patrol_enemy_houses", "patrol_enemies_spawn_houses" );
}
enable_patrol_enemies_barn()
{
flag_set( "house_windows" );
thread create_patrol_enemies( "patrol_enemy_barn", "patrol_enemies_spawn_barn" );
}
// ---------------------------------------------------------------------------------
enable_ghillie_enemies_crates()
{
thread create_ghillie_enemies( "ghillie_enemy_crates", "ghillie_enemies_spawn_crates" );
}
enable_ghillie_enemies_valley()
{
thread create_ghillie_enemies( "ghillie_enemy_valley", "ghillie_enemies_spawn_crates", "ghillie_enemies_spawn_valley" );
}
enable_ghillie_enemies_houses()
{
thread create_ghillie_enemies( "ghillie_enemy_houses", "ghillie_enemies_spawn_houses" );
}
// ---------------------------------------------------------------------------------
enable_stealth()
{
thread turn_on_stealth();
}
enable_radiation()
{
thread turn_on_radiation();
}
// ---------------------------------------------------------------------------------
custom_eog_summary()
{
enemies_left = level.enemies_spawned;
foreach( player in level.players )
{
enemies_left -= player.kills_stealth;
enemies_left -= player.kills_nofire;
enemies_left -= player.kills_basic;
}
foreach ( player in level.players )
{
player add_custom_eog_summary_line( "@SO_HIDDEN_SO_GHILLIES_STAT_STEALTH", player.kills_stealth );
player add_custom_eog_summary_line( "@SO_HIDDEN_SO_GHILLIES_STAT_NOFIRE", player.kills_nofire );
player add_custom_eog_summary_line( "@SO_HIDDEN_SO_GHILLIES_STAT_BASIC", player.kills_basic );
if ( flag( "so_hidden_complete" ) )
player add_custom_eog_summary_line( "@SO_HIDDEN_SO_GHILLIES_STAT_SKIPPED", enemies_left );
}
}
// ---------------------------------------------------------------------------------
stealth_achievement()
{
flag_wait( "so_hidden_complete" );
if ( !stealth_achieved() )
return;
foreach ( player in level.players )
{
// No achievement for individual players unless they made at least one perfect kill.
if ( player.kills_stealth > 0 )
player maps\_utility::player_giveachievement_wrapper( "WRAITH" );
}
}
stealth_achieved()
{
// No achievement if any non-perfect kills happened during the mission.
foreach( player in level.players )
{
if ( player.kills_nofire > 0 )
return false;
if ( player.kills_basic > 0 )
return false;
}
return true;
}
// ---------------------------------------------------------------------------------