IW4-Dump-Files/maps/gulag_ending.gsc

1015 lines
26 KiB
Plaintext
Raw Permalink Blame History

#include maps\_utility;
#include maps\_vehicle;
#include maps\_vehicle_spline;
#include maps\_anim;
#include maps\_hud_util;
#include maps\gulag_ending_code;
#include common_scripts\utility;
/*QUAKED script_origin_pillar1 (1 0.7 0.1) (-32 -32 0) (32 32 94)*/
/*QUAKED script_origin_pillar2 (0.9 0.75 0.1) (-32 -32 0) (32 32 96)*/
endlog_common()
{
level.default_sprint = GetDvar( "player_sprintSpeedScale" );
add_start( "run", ::start_run, "run", ::gulag_run_for_it );
add_start( "cafe", ::start_cafeteria, "cafe", ::gulag_cafeteria );
add_start( "evac", ::start_evac, "evac", ::gulag_evac );
waittillframeend;// for _load
/#
if ( IsDefined( level.stop_load ) )
{
if ( GetDvar( "createfx" ) == "" )
maps\_global_fx::main();
return;
}
#/
cafe_ceiling_chunks = GetEntArray( "cafe_ceiling_chunk", "targetname" );
array_thread( cafe_ceiling_chunks, ::self_delete );
cafe_ceiling_chunk_smalls = GetEntArray( "cafe_ceiling_chunk_small", "targetname" );
array_thread( cafe_ceiling_chunk_smalls, ::self_delete );
cafe_ceiling_pristines = GetEntArray( "cafe_ceiling_pristine", "targetname" );
array_thread( cafe_ceiling_pristines, ::self_delete );
rubble = GetEnt( "cafeteria_hallway_rubble", "targetname" );
rubble thread rubble_think();
maps\gulag_ending_anim::gulag_ending_anim_main();
level._effect[ "breach_door" ] = LoadFX( "explosions/breach_wall_concrete" );
level._effect[ "flashlight" ] = LoadFX( "misc/flashlight" );
level._pipe_fx_time = 2.5;
hookup_rope_ent = GetEnt( "hookup_rope_ent", "targetname" );
if ( IsDefined( hookup_rope_ent ) )
hookup_rope_ent Delete();
flag_init( "player_approaches_rescue_breach" );
flag_init( "intro_helis_go" );
flag_init( "player_near_tv" );
flag_init( "stop_tv_loop" );
flag_init( "f15s_spawn" );
flag_init( "anti_air_missiles_fire" );
flag_init( "aa_hit" );
flag_init( "f15s_attack" );
flag_init( "player_heli_uses_modified_yaw" );
flag_init( "intro_helis_spawned" );
flag_init( "player_lands" );
flag_init( "cell_door1" );
flag_init( "cell_door2" );
flag_init( "cell_door3" );
flag_init( "cell_door4" );
flag_init( "cell_door_weapons" );
flag_init( "access_control_room" );
flag_init( "going_in_hot" );
flag_init( "gulag_cell_doors_enabled" );
flag_init( "player_exited_bathroom" );
flag_init( "player_rappels_from_bathroom" );
flag_init( "rope_drops_now" );
flag_init( "cell_duty" );
flag_init( "cellblock_player_starts_rappel" );
flag_init( "bathroom_second_wave_trigger" );
flag_init( "player_died_to_cave_in" );
flag_init( "match_up_for_final_room" );
flag_init( "rescue_begins" );
flag_init( "time_to_evac" );
flag_init( "enable_interior_fx" );
flag_init( "enable_endlog_fx" );
flag_init( "player_falls_down" );
flag_init( "player_evac" );
flag_init( "controlled_player_rumble" );
flag_init( "evac_begins" );
//flag_init( "exit_collapses" );
PreCacheItem( "smoke_grenade_american" );
PreCacheItem( "armory_grenade" );
PreCacheItem( "m4m203_reflex_arctic" );
PreCacheItem( "f15_sam" );
PreCacheItem( "sam" );
PreCacheItem( "stinger" );
PreCacheItem( "cobra_seeker" );
PreCacheItem( "rpg_straight" );
PreCacheItem( "cobra_Sidewinder" );
PreCacheItem( "claymore" );
PreCacheItem( "mp5_silencer_reflex" );
PreCacheTurret( "heli_spotlight" );
PreCacheTurret( "player_view_controller" );
PreCacheRumble( "heavy_1s" );
PreCacheRumble( "heavy_2s" );
PreCacheRumble( "heavy_3s" );
PreCacheRumble( "light_1s" );
PreCacheRumble( "light_2s" );
PreCacheRumble( "light_3s" );
PreCacheItem( "m14_scoped_arctic" );
PreCacheItem( "fraggrenade" );
PreCacheItem( "flash_grenade" );
PreCacheItem( "claymore" );
PreCacheModel( "com_emergencylightcase_blue" );
PreCacheModel( "com_emergencylightcase" );
// PreCacheModel( "rappelrope100_le_obj" );
PreCacheModel( "com_drop_rope_obj" );
PreCacheModel( "com_blackhawk_spotlight_on_mg_setup" );
PreCacheModel( "com_floodlight" );
PreCacheModel( "ch_street_wall_light_01_on" );
PreCacheModel( "ch_street_wall_light_01_off" );
PreCacheItem( "m4m203_acog" );
// thread handle_gulag_world_fx();
// level thread init_tv_movies();
// thread gulag_music();
thread calculate_cafe_run_distances();
turnaround_triggers = GetEntArray( "turnaround_trigger", "targetname" );
array_thread( turnaround_triggers, ::turnaround_trigger_think );
ceiling_collapses = GetEntArray( "ceiling_collapse", "targetname" );
array_thread( ceiling_collapses, ::ceiling_collapse_think );
chase_brush = GetEnt( "chase_brush", "targetname" );
chase_brush Hide();
chase_brush ConnectPaths();
spawner = GetEnt( "price_spawner", "targetname" );
spawner thread add_spawn_function( ::become_price );
set_friendly_endpoint = getstruct( "set_friendly_endpoint", "targetname" );
set_friendly_endpoint thread set_friendly_endpoint_think();
array_spawn_function_targetname( "endlog_redshirt_spawner", ::become_redshirt );
ending_window_littlebird = GetEnt( "ending_window_littlebird", "script_noteworthy" );
ending_window_littlebird add_spawn_function( ::ending_window_littlebird );
delete_trees = GetEntArray( "delete_tree", "targetname" );
array_thread( delete_trees, ::delete_tree_think );
thread file_cabinet_show();
//thread pillar_anim_show();
flag_wait( "rescue_begins" );
evac_rock = GetEnt( "evac_rock", "targetname" );
evac_rock NotSolid();
swing_light_orgs = getstructarray( "swing_light_org", "targetname" );
array_thread( swing_light_orgs, ::swing_light_org_think );
swing_light_orgs = getstructarray( "swing_light_org_off", "targetname" );
array_thread( swing_light_orgs, ::swing_light_org_off_think );
run_thread_on_noteworthy( "hunted_hanging_light", ::hunted_hanging_light );
flag_clear( "enable_interior_fx" );
flag_set( "enable_endlog_fx" );
remove_global_spawn_function( "allies", ::enable_cqbwalk );
thread player_pushes_slab();
ambient_flicker_lights = GetEntArray( "ambient_flicker_light", "targetname" );
array_thread( ambient_flicker_lights, ::ambient_flicker_light_think );
friendly_car_slide_trigger = GetEnt( "friendly_car_slide_trigger", "targetname" );
friendly_car_slide_trigger thread friendly_car_slide_trigger();
trigger_damages = GetEntArray( "trigger_damage", "targetname" );
array_thread( trigger_damages, ::trigger_damage_think );
battlechatter_off( "allies" );
battlechatter_off( "axis" );
flag_wait( "escape_the_gulag" );
stumble_triggers = GetEntArray( "stumble_trigger", "targetname" );
array_thread( stumble_triggers, ::stumble_trigger_think );
}
start_run()
{
flag_set( "rescue_begins" );
spawners = [];
spawner = GetEnt( "price_spawner", "targetname" );
spawners[ spawners.size ] = spawner;
spawner = GetEnt( "endlog_soap_spawner", "targetname" );
spawners[ spawners.size ] = spawner;
spawner = GetEntArray( "endlog_redshirt_spawner", "targetname" )[ 0 ];
spawners[ spawners.size ] = spawner;
guys = array_spawn( spawners );
player_org = getstruct( "ending_breach_org", "targetname" );
level.player SetOrigin( player_org.origin );
level.player SetPlayerAngles( player_org.angles );
gulag_player_loadout();
player_org thread anim_single( guys, "price_rescue" );
wait( 0.05 );
foreach ( guy in guys )
{
animation = guy getanim( "price_rescue" );
guy SetAnimTime( animation, 0.75 );
}
}
gulag_run_for_it()
{
if ( level.script == "endlog" || level.start_point == "run" )
wait( 0.05 );
set_cafeteria_spotlight_dvars();
// make the AI keep going if you try to stop them with ADS
SetSavedDvar( "ai_friendlyFireBlockDuration", 0 );
thread minor_earthquakes();
hillside_brushmodels = GetEntArray( "hillside_brushmodel", "targetname" );
foreach ( ent in hillside_brushmodels )
{
ent Hide();
}
hillside_models = GetEntArray( "hillside_model", "targetname" );
foreach ( ent in hillside_models )
{
ent Hide();
}
// level.player FreezeControls( true );
// Task Force be advised, they've started the bombardment early <20> get the hell out of there now!
// level.player FreezeControls( false );
orgs = getstructarray( "friendly_escape_org", "targetname" );
orgs = array_index_by_parameters( orgs );
//level.player AllowSprint( false );
ai = GetAIArray( "allies" );
colors = [];
colors[ "soap" ] = ( 0, 1, 1 );
colors[ "price" ] = ( 1.000000, 0.501961, 0.000000 );
colors[ "redshirt" ] = ( 1.000000, 0.000000, 0.501961 );
foreach ( guy in ai )
{
guy thread endlog_friendly_runout_settings();
guy thread maps\_spawner::go_to_node( orgs[ guy.animname ], "struct" );
//guy thread my_color_trail( colors[ guy.animname ] );
}
//thread chase_train(); // the cave in chases you
thread ending_run_fx();
thread cafe_fx();
flag_init( "modify_ai_moveplaybackrate" );
delayThread( 11.5, ::flag_set, "modify_ai_moveplaybackrate" );
thread moderate_ai_moveplaybackrate();
activate_trigger_with_targetname( "friendly_escape_trigger" );
// Go go go!
level.soap delayThread( 5, ::dialogue_queue, "gulag_cmt_gogogo1" );
autosave_by_name( "run_autosave" );
wait( 1 );
ending_window_littlebird = GetEnt( "ending_window_littlebird", "script_noteworthy" );
targ = getstruct( ending_window_littlebird.target, "targetname" );
ending_window_littlebird.origin = targ.origin;
flag_wait( "there_is_chopper" );
// There<72>s the chopper!!! Get ready to jump!!!
level.soap thread dialogue_queue( "gulag_cmt_ready2jump" );
flag_wait( "exit_collapses" );
// Ahh, bollocks!!! Go back go back!!! We'll find another way out!!!
level.soap delayThread( 1.5, ::dialogue_queue, "gulag_cmt_anotherway" );
noself_delayCall( 1.5, ::setsaveddvar, "player_sprintSpeedScale", level.default_sprint );
SetSavedDvar( "player_sprintUnlimited", 1 );
flag_set( "soap_speed_boost" );
level.max_rocks = 1;
quake( 0.25, 4, level.price.origin, 5000 );
thread chase_train();// the cave in chases you
wait( 0.2 );
orgs = getstructarray( "friendly_changedirection_org", "targetname" );
orgs = array_index_by_parameters( orgs );
ducks = [];
ducks[ "soap" ] = "reaction_180";
ducks[ "redshirt" ] = "reaction_180";
//ducks[ ducks.size ] = "run_180";
index = 0;
waits = [];
waits[ "soap" ] = 0.0;
waits[ "redshirt" ] = 0.45;
waits[ "price" ] = 0.4;
guys = [];
guys[ "soap" ] = level.soap;
guys[ "redshirt" ] = level.redshirt;
guys[ "price" ] = level.price;
foreach ( animname, guy in guys )
{
wait_time = waits[ animname ];
duck = ducks[ animname ];
guy delayThread( wait_time, maps\_spawner::go_to_node, orgs[ animname ], "struct" );
if ( IsDefined( duck ) )
{
guy delayThread( wait_time, ::anim_generic_run, guy, duck );
}
}
/*
for ( i = 0; i < guys.size; i++ )
{
guy = guys[ i ];
guy thread maps\_spawner::go_to_node( orgs[ guy.animname ], "struct" );
if ( IsDefined( ducks[ index ] ) )
{
guy thread anim_generic_run( guy, ducks[ index ] );
}
time = waits[ index ];
if ( IsDefined( time ) )
wait( time );
index++;
}
*/
wait( 1 );
level.max_rocks = 4;
/*
foreach ( guy in ai )
{
guy.sprint = true;
}
*/
set_cafeteria_spotlight_dvars();
flag_wait( "enter_final_room" );// ai trigger this
thread cafe_lights_explode();
}
start_endshow()
{
soap_spawner = GetEnt( "endlog_soap_spawner", "targetname" );
soap = soap_spawner spawn_ai();
price_spawner = GetEnt( "price_spawner", "targetname" );
price = price_spawner spawn_ai();
redshirt_spawner = GetEntArray( "endlog_redshirt_spawner", "targetname" );
soldier = redshirt_spawner[ 0 ] spawn_ai();
player = spawn_anim_model( "player_rig" );
guys = [];
guys[ guys.size ] = soap;
guys[ guys.size ] = price;
guys[ guys.size ] = soldier;
guys[ guys.size ] = player;
soap.animname = "gulag_end_animatic_soap";
price.animname = "gulag_end_animatic_price";
soldier.animname = "gulag_end_animatic_soldier";
player.animname = "player_rig";
create_dvar( "altview", 0 );
if ( GetDvarInt( "altview" ) )
{
level.player SetOrigin( ( -4594, -765, 240 - 60 ) );
level.player SetPlayerAngles( ( -21, -88, 0 ) );
}
else
{
level.player PlayerLinkToBlend( player, "tag_player", 0, 0, 0 );
}
level.player TakeAllWeapons();
ent = GetEnt( "mound_scene_export", "targetname" );
for ( ;; )
{
ent anim_single( guys, "ending" );
}
/*
gulag_end_animatic_player"
gulag_end_animatic_soldier"
gulag_end_animatic_price" ]
gulag_end_animatic_soap" ][
*/
}
start_cafeteria()
{
friendly_escape_orgs = getstructarray( "start_cafe_friendly", "targetname" );
orgs = array_index_by_parameters( friendly_escape_orgs );
map_spawners_to_starts( orgs );
ai = GetAIArray( "allies" );
foreach ( guy in ai )
{
guy thread endlog_friendly_runout_settings();
}
player_org = getstruct( "start_cafe_player", "targetname" );
level.player SetOrigin( player_org.origin );
level.player SetPlayerAngles( player_org.angles );
gulag_player_loadout();
SetSavedDvar( "r_spotlightbrightness", "0.9" );
SetSavedDvar( "r_spotlightendradius", "1200" );
SetSavedDvar( "r_spotlightstartradius", "50" );
//setsaveddvar( "r_spotlightfovinnerfraction", "0.7" );
level.cafe_tables = GetEntArray( "cafe_table", "targetname" );
array_thread( level.cafe_tables, ::cafe_table_think );
cafe_table_orgs = getstructarray( "cafe_table_org", "targetname" );
array_thread( cafe_table_orgs, ::cafe_table_org_think );
cafe_table_eq_orgs = getstructarray( "cafe_table_eq_org", "targetname" );
array_thread( cafe_table_eq_orgs, ::cafe_table_eq_org_think );
thread cafe_lights_explode();
hunted_swing_light = GetEnt( "hunted_swing_light", "targetname" );
// thread hunted_swing_light_think( hunted_swing_light );
//swing_lights = GetEntArray( "swing_light", "targetname" );
//array_thread( swing_lights, ::swing_light_think );
/*
ending_window_littlebird = GetEnt( "ending_window_littlebird", "script_noteworthy" );
heli = ending_window_littlebird spawn_vehicle();
path = heli vehicle_get_path_array();
heli Delete();
wait( 0.05 );
heli = ending_window_littlebird spawn_vehicle();
path = heli vehicle_get_path_array();
*/
//thread gulag_glass_shatter();
}
gulag_cafeteria()
{
/*
level.soap ent_flag_wait( "run_into_room" );
level.price ent_flag_wait( "run_into_room" );
level.redshirt ent_flag_wait( "run_into_room" );
*/
set_cafeteria_spotlight_dvars();
level.soap notify( "stop_going_to_node" );
level.price notify( "stop_going_to_node" );
level.redshirt notify( "stop_going_to_node" );
guys = [];
guys[ "soap" ] = level.soap;
guys[ "price" ] = level.price;
guys[ "redshirt" ] = level.redshirt;
foreach ( ai in guys )
{
ai.grenadeawareness = 0;
if ( !isdefined( ai.magic_bullet_shield ) )
ai thread magic_bullet_shield();
ai.IgnoreRandomBulletDamage = true;
ai.attackeraccuracy = 0;
}
priceRed = [];
priceRed[ priceRed.size ] = level.price;
priceRed[ priceRed.size ] = level.redshirt;
ent = GetEnt( "mound_scene_export", "targetname" );
ent thread anim_reach( guys, "cafe_entrance" );
anim_post = spawn_anim_model( "post" );
anim_post Hide();
ent anim_first_frame_solo( anim_post, "gate" );
evac_post = GetEnt( "gulag_post_slab", "targetname" );
evac_post NotSolid();
evac_post add_target_pivot();
evac_post CastShadows();
evac_post.pivot LinkTo( anim_post, "body_animate", ( 0, 0, 0 ), ( 0, 0, 0 ) );
flag_wait( "match_up_for_final_room" );
if ( level.start_point != "cafe" )
ent anim_reach_together( guys, "cafe_entrance" );
level notify( "cafeteria_sequence_begins" );
foreach ( ai in guys )
{
ai.moveplaybackrate = 1;
}
player_gets_hit_by_rock();
// It's a dead end!!!
level.redshirt thread dialogue_queue( "gulag_wrm_deadend" );
// We can't go back that way!!! Let's try to get these doors open!!!
// level.price delayThread( 2.2, ::anim_single_solo, level.price, "gulag_pri_doorsopen" );
delayThread( 1.5, ::soap_talks_to_heli );
level.timer = GetTime();
for ( i = 0; i < 3; i++ )
{
delayThread( 4.7, ::exploder, "end_scene_rock" );
}
delayThread( 4.75, ::exploder, "end_scene_rock" );
delayThread( 4.85, ::exploder, "end_scene_rock" );
ent thread anim_single( guys, "cafe_entrance" );
wait( 4.2 );
quake( 0.25, 4, level.player.origin, 5000 );
wait( 0.05 );
wait( 2 );
delayThread( 1, ::flag_set, "player_falls_down" );
// roach is down!
level.soap delaythread( 2, ::dialogue_queue, "gulag_cmt_roachisdown" );
// roach!!
level.soap delaythread( 3.1, ::dialogue_queue, "gulag_cmt_roach" );
wait( 2 );
flag_waitopen( "player_falls_down" );// during cafeteria ending
}
start_evac()
{
spawner = GetEnt( "price_spawner", "targetname" );
spawner spawn_ai();
spawner = GetEnt( "endlog_soap_spawner", "targetname" );
spawner spawn_ai();
spawner = GetEntArray( "endlog_redshirt_spawner", "targetname" )[ 0 ];
spawner spawn_ai();
}
drawAnimTimes( guys, anime )
{
for ( ;; )
{
PrintLn( " " );
foreach ( guy in guys )
{
animation = guy getanim( anime );
time = guy GetAnimTime( animation );
PrintLn( guy.animname + " " + time );
}
wait( 0.05 );
}
}
gulag_evac()
{
// delayThread( 2.0, ::play_sound_in_space, "scn_gulag_wall_explosion_short_a", level.soap.origin );
level.player SetMoveSpeedScale( 1 );
// clear the gate sequence from cafe
ai = GetAIArray( "allies" );
foreach ( guy in ai )
{
guy anim_stopanimscripted();
}
flag_set( "time_to_evac" );
level.player SetBlurForPlayer( 0, 1 );
level.player PlayerSetGroundReferenceEnt( undefined );
level notify( "stop_cavein" );
SetSavedDvar( "r_spotlightbrightness", 0.6 );
SetSavedDvar( "g_friendlyNameDist", 0 );
if ( level.start_point == "evac" )
wait( 0.05 );// for bug in doing animscripted on first frame of ai
level.fx_fall_time = 0.1;
black_overlay = create_client_overlay( "black", 0, level.player );
black_overlay.alpha = 1;
if ( isdefined( level.black_overlay ) )
level.black_overlay.alpha = 0;
level.player AllowCrouch( false );
level.player AllowProne( false );
wait( 5.2 );// should be 2 seconds but the fx take forever to clear
thread evac_slowmo();
thread evac_dof();
black_overlay FadeOverTime( 2 );
black_overlay.alpha = 0;
SetSavedDvar( "compass", "0" );
SetSavedDvar( "ammoCounterHide", 1 );
SetSavedDvar( "hud_showStance", 0 );
SetSavedDvar( "hud_drawhud", 0 );
player_rig = spawn_anim_model( "player_rig" );
//player_rig thread maps\_debug::drawTagForever( "tag_player" );
//player_rig Hide();
extra_player_rig = spawn_anim_model( "player_rig" );
extra_player_rig Hide();
level.player_rig = player_rig;
player_carabiner = spawn_anim_model( "player_carabiner" );
ent = GetEnt( "mound_scene_export", "targetname" );
level.soap forceUseWeapon( "m4m203_acog", "primary" );
guys = [];
// guys[ guys.size ] = level.soap;
guys[ "price" ] = level.price;
guys[ "redshirt" ] = level.redshirt;
guys[ "player_rig" ] = player_rig;
anim_rock = spawn_anim_model( "rock" );
anim_rock Hide();
guys[ "anim_rock" ] = anim_rock;
thread maps\_ambient::use_eq_settings( "gulag_exit", level.eq_main_track );
delayThread( 0, maps\_ambient::blend_to_eq_track, level.eq_main_track, 2 );
pavelow = spawn_anim_model( "pavelow" );
guys[ "pavelow" ] = pavelow;
ending_rope = spawn_anim_model( "ending_rope" );
level.rope = ending_rope;
guys[ "ending_rope" ] = ending_rope;
guys[ "ending_rope" ] MakeUsable();
// script brushmodel rock
evac_rock = GetEnt( "evac_rock", "targetname" );
evac_rock add_target_pivot();
evac_rock CastShadows();
//evac_rock Hide();
evac_rock.pivot LinkTo( anim_rock, "body_animate", ( 0, 0, 0 ), ( 0, 0, 0 ) );
arcRight = 15;
arcLeft = 15;
arcTop = 15;
arcBottom = 15;
thread maps\_autosave::_autosave_game_now_nochecks();
level.player PlayerLinkToDelta( player_rig, "tag_player", 1, 0, 0, 0, 0, true );
level.player TakeAllWeapons();
exploder( "bomb_exploder" );
delayThread( 20, ::exploder, "evac_exploder" );
SoundSetTimeScaleFactor( "mission", 0 );
SoundSetTimeScaleFactor( "announcer", 0 );
ent anim_first_frame_solo( extra_player_rig, "fly_away" );
ent delayThread( 20.16, ::anim_single_solo, extra_player_rig, "fly_away" );
evac_time = GetTime();
ent thread anim_single( guys, "evac" );
//wait( 0.6 );
ent thread anim_single_solo( level.soap, "evac" );
flag_set( "evac_begins" );
// Two-One, I see your flare. SPIE rig coming down.
delayThread( 5.7, ::radio_dialogue, "gulag_plp_seeflare" );
//thread drawAnimTimes( guys, "evac" );
level.soap thread soap_sets_played_pulled_flag();
//setsaveddvar( "cg_fov", 50 );
player_rig waittillmatch( "single anim", "end" );
level.player Unlink();
level.player AllowCrouch( true );
level.player AllowProne( true );
SetSavedDvar( "g_friendlyNameDist", 175 );
thread blend_in_player_movespeed();
//thread lerp_fov_overtime( 3, 65 );
player_rigs = [];
player_rigs[ "carabiner" ] = player_carabiner;
player_rigs[ "rig" ] = player_rig;
ent anim_first_frame( player_rigs, "hookup" );
//player_Rig thread maps\_debug::drawTagForever( "tag_player" );
player_rig Hide();
player_carabiner Hide();
tag_origin = spawn_tag_origin();
tag_origin LinkTo( extra_player_rig, "tag_player", ( 0, 0, 0 ), ( 0, 0, 0 ) );
//tag_origin thread maps\_debug::drawTagForever( "tag_origin" );
trigger = getEntWithFlag( "player_uses_rig" );
// Press and hold^3 &&1 ^7to clip on.
trigger SetHintString( &"GULAG_HOLD_1_TO_SPIE" );
SetSavedDvar( "hud_drawhud", 1 );
flag_wait( "player_uses_rig" );
trigger trigger_off();
SetSavedDvar( "r_spotlightbrightness", 0 );
/*
// player gets close enough
for ( ;; )
{
if ( Distance( level.player.origin, level.soap.origin ) < 64 )
break;
wait( 0.05 );
}
*/
level.player AllowCrouch( false );
level.player AllowProne( false );
if ( IsDefined( level.soap.got_player_notetrack ) )
{
// too late to hookup
return;
}
time_passed = GetTime() - evac_time;
time_passed *= 0.001;
player_linked = false;
if ( time_passed < 18 )
{
player_linked = true;
time = 0.5;
level.player PlayerLinkToBlend( player_rig, "tag_player", time, time * 0.4, time * 0.4 );
delayThread( time, ::player_gets_groundref_and_opens_fov, tag_origin, player_rig );
// level.player PlayerLinkToDelta( player_rig, "tag_player", 1, 45, 45, 90, 45 );
//level.player PlayerLinkToDelta( player_rig, "tag_player", 1, 0,0,0,0 );
//time = 1;
//level.player PlayerLinkToBlend( player_rig, "tag_player", time, time * 0.4, time * 0.4 );
thread player_hooks_up( ent, player_rigs );
}
flag_wait( "player_gets_pulled" );
player_rig Hide();
SetSavedDvar( "g_friendlyNameDist", 0 );
ent notify( "stop_loop" );
level.player notify( "stop_opening_fov" );
if ( !player_linked )
{
time = 0.5;
level.player PlayerLinkToBlend( extra_player_rig, "tag_player", time, time * 0.4, time * 0.4 );
//thread player_view_goes_to_zero_then_opens( extra_player_rig, "tag_player", time );
delayThread( time, ::player_gets_groundref, tag_origin, extra_player_rig );
}
else
{
thread wait_then_player_view_goes_to_zero_then_opens( extra_player_rig, 1.5 );
}
/*
// in case we didn't finish lerping
level.player PlayerLinkToDelta( player_rig, "tag_player", 1, 45, 45, 90, 45, true );
level.player LerpViewAngleClamp( 2, 0.5, 0.5, 0, 0, 0, 0 );
*/
level.price delaycall( 5.05, ::playsound, "gulag_pri_yes" );
ent thread anim_single_solo( player_rig, "fly_away" );
thread fly_away_rumble();
thread swap_world_fx();
delayThread( 3.0, maps\_utility::vision_set_fog_changes, "gulag_circle", 2.2 );
animation = player_rig getanim( "fly_away" );
level.player SetEqLerp( 1, level.eq_main_track );
thread maps\_ambient::use_eq_settings( "gulag_ending_fadeout", level.eq_mix_track );
wait( 7.85 );
// wait( 1.5 );
// set up the mix track we're going to blend to
// level.player SetEqLerp( 1, level.eq_main_track );
level.player thread maps\_ambient::blend_to_eq_track( 1, 0.5 );
//level.player SetEqLerp( 1, level.eq_mix_track );
black_overlay = create_client_overlay( "black", 0, level.player );
black_overlay.alpha = 1;
nextmission();
}
fly_away_rumble()
{
wait( 1 );
PlayRumbleOnPosition( "heavy_3s", level.player.origin );
level.player PlayRumbleOnEntity( "damage_heavy" );
level.player PlayRumbleLoopOnEntity( "light_1s" );
}
wait_then_player_view_goes_to_zero_then_opens( extra_player_rig, time )
{
flag_wait( "player_evac" );
player_view_goes_to_zero_then_opens( extra_player_rig, time );
}
player_view_goes_to_zero_then_opens( extra_player_rig, time )
{
level.player PlayerLinkToBlend( extra_player_rig, "tag_player", time, time * 0.4, time * 0.4 );
wait( time );
arc = 18;
level.player PlayerLinkToDelta( extra_player_rig, "tag_player", arc, arc, arc, arc, true );
}
player_gets_groundref_and_opens_fov( tag_origin, player_rig )
{
level.player PlayerSetGroundReferenceEnt( tag_origin );
wait( 1 );
open_up_fov( 0.5, player_rig, "tag_player", 45, 45, 90, 15 );
}
player_gets_groundref( tag_origin, player_rig )
{
level.player PlayerSetGroundReferenceEnt( tag_origin );
}
player_hooks_up( ent, player_rigs )
{
if ( flag( "player_gets_pulled" ) )
return;
level endon( "player_gets_pulled" );
wait( 0.3 );
// wait( 1 );
// thread orient_player_to_rig( player_rig );
player_rigs[ "carabiner" ] Show();
player_rigs[ "rig" ] Show();
ent anim_single( player_rigs, "hookup" );
ent anim_loop_solo( player_rigs[ "rig" ], "idle" );
}
soap_sets_played_pulled_flag()
{
flag_init( "player_gets_pulled" );
self waittillmatch( "single anim", "player" );
flag_set( "player_gets_pulled" );
}
gulag_ending_startpoint_catchup_thread()
{
waittillframeend;// let the actual start functions run before this one
start = level.start_point;
if ( is_default_start() )
return;
remove_global_spawn_function( "allies", ::enable_cqbwalk );
if ( start == "rescue" )
return;
flag_clear( "enable_interior_fx" );
flag_set( "rescue_begins" );
flag_set( "escape_the_gulag" );
wait( 0.05 );
DisableForcedSunShadows();// lets get some sunlight in here
delayThread( 0.1, ::vision_set_fog_changes, "gulag_ending", 0 );
if ( level.script != "endlog" )
{
volume = GetEnt( "gulag_endlog_destructibles", "script_noteworthy" );
volume activate_destructibles_in_volume();
volume activate_interactives_in_volume();
}
if ( start == "run" )
return;
thread minor_earthquakes();
thread cafe_fx();
set_new_ending_fx_dists();
flag_set( "enter_final_room" );
flag_set( "exit_collapses" );
flag_set( "match_up_for_final_room" );
flag_set( "big_earthquake_hits" );
wait( 0.05 );
level.price forceUseWeapon( "ak47", "primary" );
level notify( "skip_stumble_trigger_think" );
if ( start == "cafe" )
return;
level notify( "stop_minor_earthquakes" );
level.player TakeAllWeapons();
flag_set( "player_falls_down" );
if ( start == "evac" )
return;
AssertMsg( "Didn't handle start point " + start );
}