374 lines
12 KiB
Plaintext
374 lines
12 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
section_flag_inits()
|
|
{
|
|
common_scripts\utility::flag_init( "flag_end_swim_start" );
|
|
common_scripts\utility::flag_init( "flag_end_swim_rescue" );
|
|
common_scripts\utility::flag_init( "flag_end_swim_end" );
|
|
common_scripts\utility::flag_init( "flag_end_swim_choke_1" );
|
|
common_scripts\utility::flag_init( "flag_end_swim_choke_2" );
|
|
common_scripts\utility::flag_init( "flag_end_swim_choke_3" );
|
|
common_scripts\utility::flag_init( "flag_player_drowned" );
|
|
}
|
|
|
|
section_precache()
|
|
{
|
|
precacheitem( "underwater_hesh" );
|
|
maps\interactive_models\fish_bannerfish::main();
|
|
maps\interactive_models\fish_school_sardines::main();
|
|
}
|
|
|
|
section_post_inits()
|
|
{
|
|
level._end_swim = spawnstruct();
|
|
level._end_swim.ally_start = getent( "ally1_start_end_swim", "targetname" );
|
|
level._end_swim.player_start = getent( "player_start_end_swim", "targetname" );
|
|
level.swim_rumble_mag = 0.16;
|
|
level.swim_blur_mag = 0.6;
|
|
level.swim_blur_fade = 0.4;
|
|
level.swim_quake_mag = 0.001;
|
|
level.swim_quake_fade = 0.001;
|
|
}
|
|
|
|
start()
|
|
{
|
|
iprintln( "end swim" );
|
|
maps\skyway_util::skyway_hide_hud();
|
|
maps\skyway_util::player_start( level._end_swim.player_start );
|
|
maps\_art::sunflare_changes( "swim", 0.1 );
|
|
|
|
if ( maps\_utility::is_gen4() )
|
|
{
|
|
setsaveddvar( "r_mbEnable", "2" );
|
|
thread maps\skyway_util::set_motionblur_values( 0.06, 0.15, 0.3, 0.59, 0.1 );
|
|
}
|
|
|
|
retarget_engines();
|
|
level._allies[0] forceteleport( level._end_swim.ally_start.origin, level._end_swim.ally_start.angles );
|
|
level._allies[0] maps\_utility::set_force_color( "r" );
|
|
maps\_utility::delaythread( 0.05, maps\_utility::remove_extra_autosave_check, "fallen_cant_get_up" );
|
|
}
|
|
|
|
main()
|
|
{
|
|
maps\skyway_util::spawn_allies( "spawner_allies_swim" );
|
|
maps\skyway_util::spawn_boss( "actor_boss_injured" );
|
|
level.player setclienttriggeraudiozone( "skyway_underwater", 2 );
|
|
end_swim_init_vars();
|
|
maps\_utility::vision_set_fog_changes( "", 0 );
|
|
retarget_engines();
|
|
maps\_art::sunflare_changes( "swim", 0.1 );
|
|
thread maps\skyway_fx::fx_swim_bubbles();
|
|
thread maps\skyway_fx::fx_swim_door_light();
|
|
thread maps\skyway_fx::fx_player_submerge_01_endwreck();
|
|
thread maps\skyway_fx::fx_endswim_blood_cloud();
|
|
thread maps\skyway_audio::skyway_swim_music();
|
|
thread choking_logic();
|
|
thread end_swim_logic();
|
|
common_scripts\utility::flag_wait( "flag_end_swim_end" );
|
|
thread maps\skyway_audio::sfx_stop_all_swim_sounds();
|
|
thread player_blend_swim_speed( 0, 0.5 );
|
|
level.player disableweapons();
|
|
level.player allowfire( 1 );
|
|
|
|
if ( common_scripts\utility::flag( "flag_player_drowned" ) )
|
|
wait 100;
|
|
|
|
wait 1.0;
|
|
maps\_art::dof_disable_script( 2 );
|
|
}
|
|
|
|
end_swim_init_vars()
|
|
{
|
|
level.end_swim_anim_node = common_scripts\utility::getstruct( "vignette_swimout", "targetname" );
|
|
level.player allowfire( 0 );
|
|
}
|
|
|
|
choking_logic()
|
|
{
|
|
wait 1.5;
|
|
level.drown_death_timer = 0.0;
|
|
thread drown_die();
|
|
level.player_fx_org = maps\_utility::spawn_anim_model( "sw_swim_view_fx" );
|
|
level.player_fx_org linktoplayerview( level.player, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ), 0 );
|
|
level.player_fx_org setanim( level.scr_anim["sw_swim_view_fx"]["swim_fx_base"] );
|
|
level.player_fx_org setanim( level.scr_anim["sw_swim_view_fx"]["swim_fx_add"] );
|
|
level.player_fx_org setanimlimited( level.scr_anim["sw_swim_view_fx"]["swim_drown_overlay"], 0.0, 0.0 );
|
|
var_0 = common_scripts\utility::getstruct( "swim_final_dist_check", "targetname" );
|
|
var_1 = 2000;
|
|
var_2 = 400;
|
|
var_3 = 0.5;
|
|
thread drown_choke();
|
|
thread maps\skyway_audio::sfx_swim_hrtbeat();
|
|
|
|
while ( !common_scripts\utility::flag( "flag_endbeach_start" ) )
|
|
{
|
|
var_4 = distance( var_0.origin, level.player.origin );
|
|
var_5 = 1 - maps\skyway_util::normalize_value( var_2, var_1, var_4 );
|
|
thread drown_heartbeat( level.drown_death_timer );
|
|
level.player_fx_org setanimlimited( level.scr_anim["sw_swim_view_fx"]["swim_drown_overlay"], var_5, var_3 );
|
|
|
|
if ( var_5 > level.drown_death_timer )
|
|
level.drown_death_timer = var_5;
|
|
|
|
if ( var_5 == 1 )
|
|
thread maps\skyway_audio::sfx_swim_logic( 5 );
|
|
|
|
wait( var_3 );
|
|
}
|
|
|
|
killfxontag( common_scripts\utility::getfx( "swim_drowning_tunnel" ), level.player_fx_org, "tag_helo" );
|
|
level.player_fx_org delete();
|
|
}
|
|
|
|
drown_heartbeat( var_0 )
|
|
{
|
|
level endon( "flag_endbeach_start" );
|
|
level endon( "flag_player_drowned" );
|
|
|
|
if ( var_0 > 0.75 )
|
|
{
|
|
if ( level.exfil_swim_intensity < 5 )
|
|
thread maps\skyway_audio::sfx_swim_logic( 4 );
|
|
|
|
if ( !common_scripts\utility::flag( "flag_end_swim_choke_3" ) )
|
|
{
|
|
thread drown_choke( 1 );
|
|
common_scripts\utility::flag_set( "flag_end_swim_choke_3" );
|
|
}
|
|
}
|
|
else if ( var_0 > 0.5 )
|
|
{
|
|
if ( level.exfil_swim_intensity < 5 )
|
|
thread maps\skyway_audio::sfx_swim_logic( 3 );
|
|
}
|
|
else if ( var_0 > 0.25 )
|
|
{
|
|
if ( level.exfil_swim_intensity < 5 )
|
|
thread maps\skyway_audio::sfx_swim_logic( 2 );
|
|
|
|
if ( !common_scripts\utility::flag( "flag_end_swim_choke_1" ) )
|
|
{
|
|
thread drown_choke();
|
|
common_scripts\utility::flag_set( "flag_end_swim_choke_1" );
|
|
}
|
|
}
|
|
else if ( level.exfil_swim_intensity < 5 )
|
|
thread maps\skyway_audio::sfx_swim_logic( 1 );
|
|
|
|
if ( var_0 > 0.77 )
|
|
level.hrtbeat = 5;
|
|
else if ( var_0 > 0.6 )
|
|
level.hrtbeat = 4;
|
|
else if ( var_0 > 0.4 )
|
|
level.hrtbeat = 3;
|
|
else if ( var_0 > 0.24 )
|
|
level.hrtbeat = 2;
|
|
else
|
|
level.hrtbeat = 1;
|
|
|
|
level.swim_rumble_mag = maps\skyway_util::factor_value_min_max( 0.16, 0.9, var_0 );
|
|
level.swim_blur_mag = maps\skyway_util::factor_value_min_max( 0.6, 4.7, var_0 );
|
|
level.swim_blur_fade = maps\skyway_util::factor_value_min_max( 0.4, 0.7, var_0 );
|
|
level.swim_quake_mag = maps\skyway_util::factor_value_min_max( 0.001, 0.22, var_0 );
|
|
level.swim_quake_fade = maps\skyway_util::factor_value_min_max( 0.001, 0.8, var_0 );
|
|
}
|
|
|
|
heartfx( var_0 )
|
|
{
|
|
level endon( "flag_endbeach_start" );
|
|
level endon( "flag_player_drowned" );
|
|
thread heartfx_solo();
|
|
wait( var_0 );
|
|
thread heartfx_solo();
|
|
}
|
|
|
|
heartfx_solo()
|
|
{
|
|
level endon( "flag_endbeach_start" );
|
|
level endon( "flag_player_drowned" );
|
|
thread maps\skyway_util::player_rumble_bump( level.player_rumble_rog_ent, level.swim_rumble_mag, 0.0, 0.05, 0.1, 0.3 );
|
|
thread drown_blur( level.swim_blur_mag, 0.2, 0.5 );
|
|
|
|
if ( isdefined( level.player_fx_org ) )
|
|
playfxontag( common_scripts\utility::getfx( "swim_drowning_tunnel" ), level.player_fx_org, "tag_helo" );
|
|
|
|
earthquake( level.swim_quake_mag, level.swim_quake_fade, level.player.origin, 3000 );
|
|
}
|
|
|
|
drown_blur( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "flag_player_drowned" );
|
|
setblur( var_0, var_1 );
|
|
wait( var_1 );
|
|
setblur( 0, var_2 );
|
|
}
|
|
|
|
drown_choke( var_0 )
|
|
{
|
|
level endon( "flag_endbeach_start" );
|
|
level endon( "flag_player_drowned" );
|
|
playfxontag( common_scripts\utility::getfx( "player_view_bubbles_choke" ), level.view_particle_source_locked, "tag_origin" );
|
|
level.player thread maps\_utility::play_sound_on_entity( "sw_underwater_grunt" );
|
|
level.player thread maps\_utility::play_sound_on_entity( "sw_underwater_bubbles_long" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
level.player thread maps\_utility::play_sound_on_entity( "sw_underwater_choke" );
|
|
}
|
|
|
|
drown_die()
|
|
{
|
|
var_0 = 0.00105;
|
|
level endon( "flag_end_swim_end" );
|
|
|
|
while ( level.drown_death_timer < 1.0 )
|
|
{
|
|
wait( level.timestep );
|
|
level.drown_death_timer = level.drown_death_timer + var_0;
|
|
}
|
|
|
|
wait 3.3;
|
|
common_scripts\utility::flag_set( "flag_player_drowned" );
|
|
thread maps\_hud_util::fade_out( 3.2 );
|
|
playfxontag( common_scripts\utility::getfx( "player_view_bubbles_choke" ), level.view_particle_source_locked, "tag_origin" );
|
|
level.player thread maps\_utility::play_sound_on_entity( "sw_underwater_grunt" );
|
|
level.player thread maps\_utility::play_sound_on_entity( "sw_underwater_bubbles_long" );
|
|
level.player thread maps\_utility::play_sound_on_entity( "sw_underwater_choke" );
|
|
setdvar( "ui_deadquote", &"SKYWAY_DROWN" );
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
end_swim_logic()
|
|
{
|
|
ally_setup();
|
|
enemy_setup();
|
|
thread enemy_logic();
|
|
level.end_swim_anim_node thread maps\_anim::anim_single_solo( level._allies[0], "swimout" );
|
|
level.end_swim_anim_node thread maps\_anim::anim_single_solo( level._boss, "swimout" );
|
|
maps\skyway_util::setup_player_for_animated_sequence( 1, 0 );
|
|
level.player allowswim( 1 );
|
|
level.player enableslowaim( 0.23, 0.23 );
|
|
level.player.swim_speed = getdvarfloat( "player_swimSpeed" );
|
|
setsaveddvar( "player_swimSpeed", 67.0 );
|
|
setsaveddvar( "player_swimForwardSettleTime", 300 );
|
|
common_scripts\utility::flag_set( "flag_end_swim_start" );
|
|
thread maps\skyway_audio::sfx_swim_exfil_begin();
|
|
maps\_art::dof_enable_script( 0, 40, 6, 1500, 3000, 1.5, 1 );
|
|
level.dopickyautosavechecks = 0;
|
|
maps\_utility::autosave_by_name_silent( "swim_start" );
|
|
level.end_swim_anim_node thread maps\_anim::anim_single_solo( level.player_rig, "swimout" );
|
|
var_0 = getanimlength( level.scr_anim["player_rig"]["swimout"] );
|
|
var_1 = getnotetracktimes( level.scr_anim["player_rig"]["swimout"], "weapon_raise" );
|
|
var_2 = var_1[0] - 0.06;
|
|
wait( var_0 * var_2 );
|
|
thread maps\skyway_audio::sfx_exfil_swim_plr();
|
|
level.player takeallweapons();
|
|
level.player giveweapon( "underwater_hesh+swim" );
|
|
level.player enableweapons();
|
|
level.player enableweaponswitch();
|
|
level.player switchtoweaponimmediate( "underwater_hesh+swim" );
|
|
common_scripts\utility::flag_set( "flag_end_swim_rescue" );
|
|
wait( var_0 - var_0 * var_2 );
|
|
level._allies[0] forceteleport( level._end_swim.ally_start.origin, level._end_swim.ally_start.angles );
|
|
level._boss hide();
|
|
level._allies[0] hide();
|
|
wait 1.5;
|
|
level.player unlink();
|
|
level.player_mover delete();
|
|
level.player_rig delete();
|
|
level.player thread player_lerp_swim_vars();
|
|
}
|
|
|
|
player_blend_swim_speed( var_0, var_1 )
|
|
{
|
|
var_2 = 0.0;
|
|
|
|
for ( var_3 = getdvarfloat( "player_swimSpeed" ); var_2 < var_1; var_2 = var_2 + level.timestep )
|
|
{
|
|
var_4 = var_2 / var_1;
|
|
var_5 = var_0 * var_4 + var_3 * ( 1 - var_4 );
|
|
setsaveddvar( "player_swimSpeed", var_5 );
|
|
wait( level.timestep );
|
|
}
|
|
|
|
setsaveddvar( "player_swimSpeed", var_0 );
|
|
}
|
|
|
|
player_lerp_swim_vars()
|
|
{
|
|
level endon( "flag_end_swim_end" );
|
|
var_0 = 0.03;
|
|
var_1 = 18.0;
|
|
}
|
|
|
|
ally_setup()
|
|
{
|
|
|
|
}
|
|
|
|
enemy_setup()
|
|
{
|
|
var_0 = getentarray( "loco_breach_enemy", "targetname" );
|
|
|
|
if ( !isdefined( level.end_enemies ) )
|
|
level.end_enemies = [];
|
|
else
|
|
{
|
|
foreach ( var_2 in level.end_enemies )
|
|
{
|
|
if ( isalive( var_2 ) )
|
|
var_2 delete();
|
|
}
|
|
|
|
level.end_enemies = maps\_utility::remove_dead_from_array( level.end_enemies );
|
|
}
|
|
|
|
for ( var_4 = 0; var_4 < var_0.size; var_4++ )
|
|
{
|
|
if ( var_4 != 2 && var_4 != 3 )
|
|
continue;
|
|
|
|
if ( !isdefined( level.end_enemies[var_4] ) || !isalive( level.end_enemies[var_4] ) )
|
|
{
|
|
var_0[var_4].count = 2;
|
|
var_2 = var_0[var_4] maps\_utility::spawn_ai( 1 );
|
|
var_2 prepare_enemy_for_swimout();
|
|
var_2.animname = "opfor" + ( var_4 + 1 );
|
|
level.end_enemies = common_scripts\utility::array_add( level.end_enemies, var_2 );
|
|
}
|
|
}
|
|
}
|
|
|
|
prepare_enemy_for_swimout()
|
|
{
|
|
maps\_utility::set_battlechatter( 0 );
|
|
self.combatmode = "no_cover";
|
|
self.ignoreall = 1;
|
|
self.ignoreme = 1;
|
|
self.newenemyreactiondistsq_old = self.newenemyreactiondistsq;
|
|
self.newenemyreactiondistsq = 0;
|
|
self.grenadeammo = 0;
|
|
}
|
|
|
|
enemy_logic()
|
|
{
|
|
foreach ( var_1 in level.end_enemies )
|
|
{
|
|
if ( isalive( var_1 ) )
|
|
var_1 show();
|
|
}
|
|
|
|
level.end_swim_anim_node maps\_anim::anim_single( level.end_enemies, "swimout" );
|
|
level.end_swim_anim_node maps\_anim::anim_loop( level.end_enemies, "swimout_loop" );
|
|
}
|
|
|
|
retarget_engines()
|
|
{
|
|
var_0 = getent( "lighttarget_engines", "targetname" );
|
|
var_1 = getentarray( "loco_engines", "script_noteworthy" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 retargetscriptmodellighting( var_0 );
|
|
}
|