iw6-scripts/maps/skyway_end_swim.gsc
2024-02-13 13:20:49 +01:00

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 );
}