mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
1376 lines
31 KiB
Plaintext
1376 lines
31 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: _water.gsc
|
|
* Game: Call of Duty: Advanced Warfare
|
|
* Platform: PC
|
|
* Function Count: 45
|
|
* Decompile Time: 713 ms
|
|
* Timestamp: 4/22/2024 2:24:58 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
init(param_00)
|
|
{
|
|
precacheshellshock("underwater");
|
|
level._effect["water_bubbles"] = loadfx("vfx/water/player_bubbles_underwater");
|
|
level._effect["water_vm_gasping_breath"] = loadfx("vfx/water/underwater_bubble_vm_gasping_breath_lt");
|
|
level._effect["water_splash_emerge"] = loadfx("vfx/water/body_splash_exit");
|
|
level._effect["water_screen_plunge"] = loadfx("vfx/water/screen_fx_plunge");
|
|
level._effect["water_screen_emerge"] = loadfx("vfx/water/screen_fx_emerge");
|
|
level._effect["water_wake"] = loadfx("vfx/treadfx/body_wake_water");
|
|
level._effect["water_wake_stationary"] = loadfx("vfx/treadfx/body_wake_water_stationary");
|
|
level._effect["water_splash_enter"] = loadfx("vfx/water/body_splash");
|
|
level._effect["water_wake_ai"] = loadfx("vfx/treadfx/body_wake_water");
|
|
level._effect["water_wake_stationary_ai"] = loadfx("vfx/treadfx/body_wake_water_stationary");
|
|
level._effect["water_splash_enter_ai"] = loadfx("vfx/water/body_splash");
|
|
var_01 = getentarray("trigger_underwater","targetname");
|
|
foreach(var_03 in var_01)
|
|
{
|
|
var_03 thread watchplayerenterwater();
|
|
level thread water_trigger_register(var_03);
|
|
}
|
|
|
|
level.dofunderwater = [];
|
|
level.dofunderwater["nearStart"] = 0;
|
|
level.dofunderwater["nearEnd"] = 1;
|
|
level.dofunderwater["farStart"] = 30;
|
|
level.dofunderwater["farEnd"] = 210;
|
|
level.dofunderwater["nearBlur"] = 4;
|
|
level.dofunderwater["farBlur"] = 4;
|
|
level.underwater_visionset_callback = ::water_default_vision_set_enabled;
|
|
level.underwater_sound_ent = spawn("script_origin",level.player.origin);
|
|
maps\_swim_player::init_player_swim(param_00);
|
|
setdvarifuninitialized("underwater_walk_speed_scale_ai",0.6);
|
|
setdvarifuninitialized("underwater_wading_speed_factor",1);
|
|
}
|
|
|
|
//Function Number: 2
|
|
water_trigger_register(param_00)
|
|
{
|
|
if(!isdefined(level.underwatertriggers))
|
|
{
|
|
level.underwatertriggers = [param_00];
|
|
return;
|
|
}
|
|
|
|
level.underwatertriggers[level.underwatertriggers.size] = param_00;
|
|
}
|
|
|
|
//Function Number: 3
|
|
disable_swim_or_underwater_walk()
|
|
{
|
|
if(isdefined(self.swimming))
|
|
{
|
|
maps\_swim_player::disable_player_swim();
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.underwater_walk))
|
|
{
|
|
maps\_swim_player::disable_player_underwater_walk();
|
|
}
|
|
}
|
|
|
|
//Function Number: 4
|
|
watchplayerenterwater()
|
|
{
|
|
for(;;)
|
|
{
|
|
self waittill("trigger",var_00);
|
|
if(!isplayer(var_00))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isalive(var_00))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isdefined(var_00.inwater) || !var_00.inwater)
|
|
{
|
|
var_00.inwater = 1;
|
|
if(!isdefined(var_00.water_trigger_current))
|
|
{
|
|
var_00 thread playerinwater(self);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 5
|
|
water_depth_below(param_00)
|
|
{
|
|
var_01 = level getwaterline(param_00);
|
|
var_02 = (self.origin[0],self.origin[1],var_01 + 1);
|
|
var_03 = var_02;
|
|
if(isplayer(self))
|
|
{
|
|
var_03 = playerphysicstrace(var_02,var_02 - (0,0,1000),self);
|
|
}
|
|
else
|
|
{
|
|
var_03 = self aiphysicstrace(var_02,var_02 - (0,0,1000),15,60,1);
|
|
}
|
|
|
|
return var_02[2] - var_03[2] - 1;
|
|
}
|
|
|
|
//Function Number: 6
|
|
playerinwater(param_00)
|
|
{
|
|
self notify("playerInWater");
|
|
self endon("playerInWater");
|
|
self endon("death");
|
|
thread inwaterwake();
|
|
thread playerwaterclearwait();
|
|
if(isdefined(param_00))
|
|
{
|
|
self.water_trigger_current = param_00;
|
|
}
|
|
|
|
var_01 = water_depth_below(self.water_trigger_current);
|
|
if(!isdefined(self.water_lastemerge))
|
|
{
|
|
self.water_lastemerge = 0;
|
|
}
|
|
|
|
if(!isdefined(self.ent_flag) || !isdefined(self.ent_flag["water_trigger_paused"]))
|
|
{
|
|
maps\_utility::ent_flag_init("water_trigger_paused");
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
maps\_utility::ent_flag_waitopen("water_trigger_paused");
|
|
var_02 = 0;
|
|
if(isdefined(param_00) && self istouching(param_00))
|
|
{
|
|
var_02 = 1;
|
|
}
|
|
else
|
|
{
|
|
foreach(var_04 in level.underwatertriggers)
|
|
{
|
|
if((!isdefined(param_00) || var_04 != param_00) && self istouching(var_04))
|
|
{
|
|
var_02 = 1;
|
|
self.water_touching = var_02;
|
|
param_00 = var_04;
|
|
self.water_trigger_current = var_04;
|
|
setsaveddvar("player_swimWaterSurface",getwaterline(param_00));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
self.water_touching = var_02;
|
|
var_06 = self.origin[2];
|
|
if(isdefined(param_00))
|
|
{
|
|
var_06 = getwaterline(param_00);
|
|
}
|
|
|
|
if(var_02 && !isdefined(self.underwater) && !isabovewaterline(param_00) && gettime() - self.water_lastemerge > 700)
|
|
{
|
|
if(!isdefined(self.grapple) || !self.grapple["grappling"])
|
|
{
|
|
water_set_depth(1000);
|
|
under_water_set(1,getwaterline(param_00));
|
|
}
|
|
}
|
|
|
|
if(isdefined(self.underwater) && isabovewaterline(param_00) || !var_02)
|
|
{
|
|
water_set_depth(water_depth_below(param_00));
|
|
under_water_set(0,getwaterline(param_00));
|
|
var_07 = self getvelocity();
|
|
self setvelocity((var_07[0],var_07[1],min(0,var_07[2])));
|
|
}
|
|
|
|
if(var_02 && !isdefined(self.underwater))
|
|
{
|
|
if(self isonground())
|
|
{
|
|
var_01 = level getwaterline(param_00) - self.origin[2];
|
|
}
|
|
else
|
|
{
|
|
var_01 = water_depth_below(param_00);
|
|
}
|
|
|
|
water_set_depth(var_01);
|
|
if(isdefined(self.swimming))
|
|
{
|
|
var_08 = water_depth_state(self.water_depth);
|
|
var_06 = getwaterline(param_00);
|
|
if(player_can_stop_swimming(var_06) && var_08 != "chest")
|
|
{
|
|
self.water_lastemerge = gettime();
|
|
maps\_swim_player::disable_player_swim();
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!var_02 && self ismantling() || player_can_stop_swimming(var_06))
|
|
{
|
|
self.inwater = undefined;
|
|
self.water_trigger_current = undefined;
|
|
self.water_touching = undefined;
|
|
if(!isdefined(self.underwater) && water_depth_state(self.water_depth) != "puddle")
|
|
{
|
|
self playlocalsound("underwater_exit");
|
|
}
|
|
|
|
water_set_depth(0);
|
|
under_water_set(0);
|
|
disable_swim_or_underwater_walk();
|
|
self notify("out_of_water");
|
|
break;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 7
|
|
under_water_set(param_00,param_01)
|
|
{
|
|
if(param_00 && !isdefined(self.underwater) || !self.underwater)
|
|
{
|
|
self.underwater = 1;
|
|
thread playerunderwater();
|
|
water_vision_set_enabled(1);
|
|
if(!isdefined(self.mechdata) || !self.mechdata.active)
|
|
{
|
|
maps\_swim_player::enable_player_swim(0,0,param_01);
|
|
return;
|
|
}
|
|
|
|
maps\_swim_player::enable_player_underwater_walk(0,0,param_01);
|
|
return;
|
|
}
|
|
|
|
if(!param_00 && isdefined(self.underwater) && self.underwater)
|
|
{
|
|
self.underwater = undefined;
|
|
self.water_lastemerge = gettime();
|
|
self notify("above_water");
|
|
water_vision_set_enabled(0);
|
|
if(isdefined(self.swimming))
|
|
{
|
|
if(player_can_stop_swimming(param_01))
|
|
{
|
|
maps\_swim_player::disable_player_swim();
|
|
}
|
|
else
|
|
{
|
|
maps\_swim_player::player_set_swimming("surface",0,0,param_01);
|
|
}
|
|
}
|
|
else if(isdefined(self.underwater_walk))
|
|
{
|
|
if(self isonground() || !isdefined(param_01) || !player_in_deep_water())
|
|
{
|
|
maps\_swim_player::disable_player_underwater_walk();
|
|
}
|
|
}
|
|
|
|
self stopshellshock();
|
|
}
|
|
}
|
|
|
|
//Function Number: 8
|
|
player_in_deep_water()
|
|
{
|
|
return isdefined(self.water_depth) && water_depth_state(self.water_depth) == "deep";
|
|
}
|
|
|
|
//Function Number: 9
|
|
player_can_stop_swimming(param_00)
|
|
{
|
|
if(!isdefined(self.swimming))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(!isdefined(self.water_touching) || !self.water_touching || self isonground() || !isdefined(param_00) || !player_in_deep_water())
|
|
{
|
|
var_01 = self.origin + (0,0,-1);
|
|
var_02 = playerphysicstrace(var_01,self.origin);
|
|
if(distancesquared(var_02,self.origin) < 0.001)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 10
|
|
water_vision_set_enabled(param_00)
|
|
{
|
|
[[ level.underwater_visionset_callback ]](param_00);
|
|
}
|
|
|
|
//Function Number: 11
|
|
water_default_vision_set_enabled(param_00)
|
|
{
|
|
if(param_00)
|
|
{
|
|
var_01 = 1;
|
|
var_02 = "generic_underwater";
|
|
if(isdefined(level.visionset_underwater))
|
|
{
|
|
var_02 = level.visionset_underwater;
|
|
}
|
|
|
|
self setclienttriggervisionset(var_02,var_01);
|
|
self visionsetnakedforplayer(var_02,var_01);
|
|
maps\_utility::vision_set_fog_changes(var_02,var_01);
|
|
if(isdefined(level.clut_underwater))
|
|
{
|
|
self setclutforplayer(level.clut_underwater,0);
|
|
}
|
|
|
|
if(isdefined(level.underwater_lightset))
|
|
{
|
|
set_light_set_for_player(level.underwater_lightset);
|
|
}
|
|
|
|
if(isdefined(level.dofunderwater))
|
|
{
|
|
thread setdof(level.dofunderwater);
|
|
}
|
|
|
|
playfx(common_scripts\utility::getfx("water_screen_plunge"),self.origin);
|
|
self setwatersheeting(0);
|
|
setunderwateraudiozone();
|
|
self playlocalsound("underwater_enter");
|
|
return;
|
|
}
|
|
|
|
revertvisionsetforplayer(0);
|
|
if(isdefined(level.lightset_previous))
|
|
{
|
|
set_light_set_for_player(level.lightset_previous);
|
|
}
|
|
|
|
if(isdefined(level.clut_previous))
|
|
{
|
|
self setclutforplayer(level.clut_previous,1);
|
|
}
|
|
|
|
if(isdefined(level.dofdefault))
|
|
{
|
|
thread setdof(level.dofdefault);
|
|
}
|
|
|
|
playfx(common_scripts\utility::getfx("water_screen_emerge"),self.origin);
|
|
self setwatersheeting(1,1);
|
|
clearunderwateraudiozone();
|
|
self playlocalsound("breathing_better");
|
|
self playlocalsound("underwater_exit");
|
|
var_03 = undefined;
|
|
if(isdefined(self.water_trigger_current))
|
|
{
|
|
var_03 = getwaterline(self.water_trigger_current);
|
|
}
|
|
|
|
if(isdefined(var_03))
|
|
{
|
|
var_04 = (self.origin[0],self.origin[1],var_03);
|
|
playfx(level._effect["water_splash_emerge"],var_04,anglestoforward((0,self.angles[1],0) + (270,180,0)));
|
|
}
|
|
}
|
|
|
|
//Function Number: 12
|
|
water_set_depth(param_00)
|
|
{
|
|
var_01 = water_depth_state(param_00);
|
|
var_02 = "none";
|
|
if(isdefined(self.water_depth))
|
|
{
|
|
var_02 = water_depth_state(self.water_depth);
|
|
}
|
|
|
|
if(param_00 > 0)
|
|
{
|
|
self.water_depth = param_00;
|
|
}
|
|
else
|
|
{
|
|
self.water_depth = undefined;
|
|
}
|
|
|
|
if(isdefined(self.mechdata) && self.mechdata.active)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(var_02 != var_01)
|
|
{
|
|
switch(var_01)
|
|
{
|
|
case "puddle":
|
|
thread wading_footsteps(0,1);
|
|
water_set_control_options(1,1,1);
|
|
thread aud_water_footsteps_override("");
|
|
soundscripts\_audio_mix_manager::mm_add_submix("mute_footsteps");
|
|
break;
|
|
|
|
case "ankle":
|
|
thread wading_footsteps(0.25,0.75,"_ankle");
|
|
thread aud_water_footsteps_override("_ankle");
|
|
soundscripts\_audio_mix_manager::mm_add_submix("mute_footsteps");
|
|
water_set_control_options(1,0,0);
|
|
break;
|
|
|
|
case "knee":
|
|
thread wading_footsteps(0.6,0.55,"_knee");
|
|
thread aud_water_footsteps_override("_knee");
|
|
soundscripts\_audio_mix_manager::mm_add_submix("mute_footsteps");
|
|
water_set_control_options(1,0,1);
|
|
break;
|
|
|
|
case "thigh":
|
|
thread wading_footsteps(1,0.45,"_waist");
|
|
thread aud_water_footsteps_override("_waist");
|
|
soundscripts\_audio_mix_manager::mm_add_submix("mute_footsteps");
|
|
water_set_control_options(0,0,1);
|
|
break;
|
|
|
|
case "chest":
|
|
thread wading_footsteps(0.5,0.33,"_waist");
|
|
thread aud_water_footsteps_override("_waist");
|
|
soundscripts\_audio_mix_manager::mm_add_submix("mute_footsteps");
|
|
water_set_control_options(0,0,1);
|
|
break;
|
|
|
|
case "deep":
|
|
thread wading_footsteps(0,1);
|
|
water_set_control_options(0,1,1);
|
|
break;
|
|
|
|
default:
|
|
thread wading_footsteps(0,1);
|
|
self notify("override_footsteps");
|
|
soundscripts\_audio_mix_manager::mm_clear_submix("mute_footsteps",0.2);
|
|
water_set_control_options(1,1,1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 13
|
|
water_set_control_options(param_00,param_01,param_02)
|
|
{
|
|
if(param_00 && isdefined(level.water_allow_jump) && !level.water_allow_jump)
|
|
{
|
|
param_00 = 0;
|
|
}
|
|
|
|
if(param_01 && isdefined(level.water_allow_sprint) && !level.water_allow_sprint)
|
|
{
|
|
param_01 = 0;
|
|
}
|
|
|
|
if(param_02 && isdefined(level.water_allow_prone) && !level.water_allow_prone)
|
|
{
|
|
param_02 = 0;
|
|
}
|
|
|
|
self allowjump(param_00);
|
|
self allowsprint(param_01);
|
|
self allowprone(param_02);
|
|
}
|
|
|
|
//Function Number: 14
|
|
water_depth_state(param_00)
|
|
{
|
|
if(!isdefined(param_00) || param_00 <= 0)
|
|
{
|
|
return "none";
|
|
}
|
|
|
|
if(param_00 <= 8)
|
|
{
|
|
return "puddle";
|
|
}
|
|
|
|
if(param_00 <= 20)
|
|
{
|
|
return "ankle";
|
|
}
|
|
|
|
if(param_00 <= 30)
|
|
{
|
|
return "knee";
|
|
}
|
|
|
|
if(param_00 <= 50)
|
|
{
|
|
return "thigh";
|
|
}
|
|
|
|
if(param_00 <= 60)
|
|
{
|
|
return "chest";
|
|
}
|
|
|
|
return "deep";
|
|
}
|
|
|
|
//Function Number: 15
|
|
wading_adjust_angles(param_00)
|
|
{
|
|
var_01 = param_00[0];
|
|
var_02 = param_00[2];
|
|
var_03 = anglestoright(self.angles);
|
|
var_04 = anglestoforward(self.angles);
|
|
var_05 = (var_03[0],0,var_03[1] * -1);
|
|
var_06 = (var_04[0],0,var_04[1] * -1);
|
|
var_07 = var_06 * var_01;
|
|
var_07 = var_07 + var_05 * var_02;
|
|
return var_07 + (0,param_00[1],0);
|
|
}
|
|
|
|
//Function Number: 16
|
|
wading_footsteps(param_00,param_01,param_02)
|
|
{
|
|
self endon("death");
|
|
if(param_01 >= 1)
|
|
{
|
|
thread wading_footsteps_ends();
|
|
return;
|
|
}
|
|
|
|
param_01 = param_01 * getdvarfloat("underwater_wading_speed_factor");
|
|
var_03 = isdefined(self.water_wading_wobble_target);
|
|
self.water_wading_wobble_target = param_00;
|
|
self.water_wading_move_speed_target = param_01;
|
|
self.water_wading_waterdepthtype = param_02;
|
|
if(!isdefined(self.water_wading_wobble))
|
|
{
|
|
self.water_wading_wobble = 0;
|
|
self.water_wading_move_speed = param_01;
|
|
}
|
|
|
|
if(var_03)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self notify("wading_footsteps");
|
|
self endon("wading_footsteps");
|
|
if(!isdefined(self.water_ground_ref_ent))
|
|
{
|
|
self.water_ground_ref_ent = spawn("script_model",(0,0,0));
|
|
self playersetgroundreferenceent(self.water_ground_ref_ent);
|
|
}
|
|
|
|
var_04 = 0;
|
|
var_05 = 0.05;
|
|
var_06 = 0;
|
|
var_07 = 0;
|
|
for(;;)
|
|
{
|
|
self.water_wading_wobble = self.water_wading_wobble + self.water_wading_wobble_target - self.water_wading_wobble * 0.1;
|
|
self.water_wading_move_speed = self.water_wading_move_speed + self.water_wading_move_speed_target - self.water_wading_move_speed * 0.1;
|
|
var_08 = 3 * self.water_wading_wobble;
|
|
var_09 = 4 * self.water_wading_wobble;
|
|
var_0A = 3 * self.water_wading_wobble;
|
|
param_01 = self.water_wading_move_speed;
|
|
if(!isdefined(self.movespeedscale) || self.movespeedscale == 0)
|
|
{
|
|
maps\_utility::blend_movespeedscale(param_01,0.25);
|
|
}
|
|
|
|
var_0B = distance((0,0,0),self getvelocity());
|
|
var_0C = min(var_0B,200);
|
|
if(var_0C == 0)
|
|
{
|
|
self.water_ground_ref_ent rotateto((0,0,0),0.25,0.125,0.125);
|
|
var_04 = self.water_ground_ref_ent.angles[0];
|
|
}
|
|
else
|
|
{
|
|
var_04 = var_04 + var_0C * 0.3;
|
|
if(cos(var_04) > 0)
|
|
{
|
|
var_04 = var_04 + var_0C * 0.1;
|
|
if(!var_06)
|
|
{
|
|
var_06 = 1;
|
|
maps\_utility::blend_movespeedscale(param_01,0.25);
|
|
}
|
|
}
|
|
else if(var_06)
|
|
{
|
|
var_0D = "walk";
|
|
if(self issprinting())
|
|
{
|
|
var_0D = "sprint";
|
|
}
|
|
else if(self getnormalizedmovement()[0] > 0.5)
|
|
{
|
|
var_0D = "run";
|
|
}
|
|
|
|
if(self getstance() != "stand")
|
|
{
|
|
var_0D = "crouch" + var_0D;
|
|
}
|
|
|
|
var_0E = "_r";
|
|
if(var_07 < 0)
|
|
{
|
|
var_0E = "_l";
|
|
}
|
|
|
|
aud_water_footsteps_foley(var_0D,self.water_wading_waterdepthtype,var_0E);
|
|
var_06 = 0;
|
|
maps\_utility::blend_movespeedscale(max(0.2,param_01 * 0.75),0.15);
|
|
}
|
|
|
|
var_0F = sin(var_04) - 0.75 * var_08;
|
|
var_10 = sin(var_04 * -0.5) * var_09;
|
|
var_07 = sin(var_04 * 0.5) * var_0A;
|
|
var_11 = wading_adjust_angles((var_0F,var_10,var_07));
|
|
self.water_ground_ref_ent rotateto(var_11,var_05,var_05 * 0.5,var_05 * 0.5);
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 17
|
|
aud_water_footsteps_override(param_00)
|
|
{
|
|
self endon("death");
|
|
self notify("override_footsteps");
|
|
self endon("override_footsteps");
|
|
self playlocalsound("step_run_plr_water" + param_00 + "_l");
|
|
for(;;)
|
|
{
|
|
level.player waittill("foley",var_01,var_02,var_03);
|
|
if(isdefined(self.water_ground_ref_ent))
|
|
{
|
|
switch(var_01)
|
|
{
|
|
case "crouchwalk":
|
|
case "crouchrun":
|
|
case "run":
|
|
case "sprint":
|
|
case "walk":
|
|
break;
|
|
}
|
|
}
|
|
|
|
var_04 = "_r";
|
|
if(var_03)
|
|
{
|
|
var_04 = "_l";
|
|
}
|
|
|
|
aud_water_footsteps_foley(var_01,param_00,var_04);
|
|
}
|
|
}
|
|
|
|
//Function Number: 18
|
|
aud_water_footsteps_foley(param_00,param_01,param_02)
|
|
{
|
|
var_03 = "_plr";
|
|
if(!isplayer(self))
|
|
{
|
|
var_03 = "";
|
|
}
|
|
|
|
switch(param_00)
|
|
{
|
|
case "stationarycrouchscuff":
|
|
aud_water_sound("step_scrape" + var_03 + "_water" + param_01);
|
|
aud_water_sound("step_crchwalk" + var_03 + "_water" + param_01 + param_02);
|
|
break;
|
|
|
|
case "stationaryscuff":
|
|
aud_water_sound("step_scrape" + var_03 + "_water" + param_01);
|
|
aud_water_sound("step_walk" + var_03 + "_water" + param_01 + param_02);
|
|
break;
|
|
|
|
case "crouchscuff":
|
|
aud_water_sound("step_scrape" + var_03 + "_water" + param_01);
|
|
aud_water_sound("step_crchwalk" + var_03 + "_water" + param_01 + param_02);
|
|
break;
|
|
|
|
case "runscuff":
|
|
aud_water_sound("step_scrape" + var_03 + "_water" + param_01);
|
|
aud_water_sound("step_run" + var_03 + "_water" + param_01 + param_02);
|
|
break;
|
|
|
|
case "sprintscuff":
|
|
aud_water_sound("step_scrape" + var_03 + "_water" + param_01);
|
|
aud_water_sound("step_sprint" + var_03 + "_water" + param_01 + param_02);
|
|
break;
|
|
|
|
case "prone":
|
|
aud_water_sound("step_prone" + var_03 + "_water" + param_01 + param_02);
|
|
break;
|
|
|
|
case "crouchwalk":
|
|
aud_water_sound("step_crchwalk" + var_03 + "_water" + param_01 + param_02);
|
|
break;
|
|
|
|
case "crouchrun":
|
|
aud_water_sound("step_crchwalk" + var_03 + "_water" + param_01 + param_02);
|
|
break;
|
|
|
|
case "walk":
|
|
aud_water_sound("step_walk" + var_03 + "_water" + param_01 + param_02);
|
|
break;
|
|
|
|
case "run":
|
|
aud_water_sound("step_run" + var_03 + "_water" + param_01 + param_02);
|
|
break;
|
|
|
|
case "sprint":
|
|
aud_water_sound("step_sprint" + var_03 + "_water" + param_01 + param_02);
|
|
break;
|
|
|
|
case "jump":
|
|
aud_water_sound("step_jump" + var_03 + "_water" + param_01);
|
|
break;
|
|
|
|
case "lightland":
|
|
aud_water_sound("step_land" + var_03 + "_lt_water" + param_01);
|
|
break;
|
|
|
|
case "mediumland":
|
|
aud_water_sound("step_land" + var_03 + "_med_water" + param_01);
|
|
break;
|
|
|
|
case "heavyland":
|
|
aud_water_sound("step_land" + var_03 + "_hv_water" + param_01);
|
|
break;
|
|
|
|
case "damageland":
|
|
aud_water_sound("step_land" + var_03 + "_dmg_water" + param_01);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Function Number: 19
|
|
aud_water_sound(param_00)
|
|
{
|
|
if(isplayer(self))
|
|
{
|
|
self playlocalsound(param_00);
|
|
return;
|
|
}
|
|
|
|
self playsound(param_00);
|
|
}
|
|
|
|
//Function Number: 20
|
|
wading_footsteps_ends()
|
|
{
|
|
self endon("death");
|
|
self notify("wading_footsteps");
|
|
self endon("wading_footsteps");
|
|
self.water_wading_wobble_target = undefined;
|
|
if(isdefined(self.water_ground_ref_ent))
|
|
{
|
|
var_00 = 0.25;
|
|
self.water_ground_ref_ent rotateto((0,0,0),var_00,var_00 * 0.5,var_00 * 0.5);
|
|
maps\_utility::blend_movespeedscale(1,var_00);
|
|
wait(var_00);
|
|
if(isdefined(self.water_ground_ref_ent))
|
|
{
|
|
self.water_ground_ref_ent delete();
|
|
}
|
|
|
|
self.water_ground_ref_ent = undefined;
|
|
self.water_wading_wobble = undefined;
|
|
self.water_wading_move_speed_target = undefined;
|
|
self.water_wading_move_speed = undefined;
|
|
self.water_wading_waterdepthtype = undefined;
|
|
self playersetgroundreferenceent(undefined);
|
|
self notify("blend_movespeedscale");
|
|
maps\_utility_code::movespeed_set_func(1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 21
|
|
setunderwateraudiozone()
|
|
{
|
|
if(isdefined(level.aud) && isdefined(level.aud.water) && isdefined(level.aud.water.enter_water_override))
|
|
{
|
|
soundscripts\_snd::snd_message(level.aud.water.enter_water_override);
|
|
return;
|
|
}
|
|
|
|
soundscripts\_audio_zone_manager::azm_set_reverb_bypass(1);
|
|
soundscripts\_audio_zone_manager::azm_set_filter_bypass(1);
|
|
level.underwater_sound_ent = soundscripts\_snd_playsound::snd_play_loop_2d("underwater_bubbles_lp");
|
|
soundscripts\_snd_filters::snd_set_filter("underwater",1,0);
|
|
soundscripts\_audio_reverb::rvb_start_preset("underwater",1);
|
|
level.player seteqlerp(1,1);
|
|
}
|
|
|
|
//Function Number: 22
|
|
clearunderwateraudiozone()
|
|
{
|
|
if(isdefined(level.aud) && isdefined(level.aud.water) && isdefined(level.aud.water.exit_water_override))
|
|
{
|
|
soundscripts\_snd::snd_message(level.aud.water.exit_water_override);
|
|
return;
|
|
}
|
|
|
|
var_00 = level._audio.zone_mgr.current_zone;
|
|
soundscripts\_audio_zone_manager::azm_set_reverb_bypass(0);
|
|
soundscripts\_audio_zone_manager::azm_set_filter_bypass(0);
|
|
level.underwater_sound_ent soundscripts\_snd_playsound::snd_stop_sound();
|
|
if(isdefined(level._audio.zone_mgr.zones[var_00]))
|
|
{
|
|
var_01 = level._audio.zone_mgr.zones[var_00];
|
|
var_02 = var_01["priority"];
|
|
var_03 = var_01["interrupt_fade"];
|
|
if(isdefined(var_01["filter"]))
|
|
{
|
|
if(var_01["filter"] != "none")
|
|
{
|
|
soundscripts\_snd_filters::snd_set_filter(var_01["filter"],0);
|
|
soundscripts\_snd_filters::snd_set_filter_lerp(1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
soundscripts\_snd_filters::snd_clear_filter(1);
|
|
soundscripts\_audio_reverb::rvb_deactive_reverb();
|
|
}
|
|
|
|
if(isdefined(var_01["reverb"]))
|
|
{
|
|
if(var_01["reverb"] != "none")
|
|
{
|
|
soundscripts\_audio_reverb::rvb_start_preset(var_01["reverb"]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
soundscripts\_snd_filters::snd_clear_filter(1);
|
|
soundscripts\_audio_reverb::rvb_deactive_reverb();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
soundscripts\_snd_filters::snd_clear_filter(1);
|
|
soundscripts\_audio_reverb::rvb_deactive_reverb();
|
|
}
|
|
|
|
level.player seteqlerp(1,0);
|
|
}
|
|
|
|
//Function Number: 23
|
|
override_deadquote()
|
|
{
|
|
wait(0.5);
|
|
if((!isdefined(level.player.failingmission) || level.player.failingmission == 0) && isdefined(level.player.is_drowning) && level.player.is_drowning)
|
|
{
|
|
maps\_player_death::set_deadquote(self.drowning_deadquote);
|
|
}
|
|
}
|
|
|
|
//Function Number: 24
|
|
playerwaterclearwait()
|
|
{
|
|
self endon("playerInWater");
|
|
var_00 = common_scripts\utility::waittill_any_return("death","out_of_water");
|
|
if(var_00 == "death")
|
|
{
|
|
if(isdefined(self.drowning_deadquote))
|
|
{
|
|
thread override_deadquote();
|
|
return;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
self.inwater = undefined;
|
|
self.water_trigger_current = undefined;
|
|
under_water_set(0);
|
|
water_set_depth(0);
|
|
disable_swim_or_underwater_walk();
|
|
}
|
|
|
|
//Function Number: 25
|
|
inwaterwake()
|
|
{
|
|
self endon("death");
|
|
self endon("playerInWater");
|
|
self endon("out_of_water");
|
|
if(!isdefined(self.water_wake_speed))
|
|
{
|
|
self.water_wake_speed = 50;
|
|
}
|
|
|
|
var_00 = "";
|
|
if(isai(self))
|
|
{
|
|
var_00 = "_ai";
|
|
}
|
|
|
|
var_01 = (0,0,0);
|
|
if(isplayer(self))
|
|
{
|
|
var_01 = self getvelocity();
|
|
}
|
|
else
|
|
{
|
|
var_01 = anglestoforward(self.angles) * self.water_wake_speed;
|
|
}
|
|
|
|
var_02 = distance(var_01,(0,0,0));
|
|
if(var_02 > 90 && isdefined(self.water_trigger_current))
|
|
{
|
|
var_03 = self.origin;
|
|
var_03 = (var_03[0],var_03[1],getwaterline(self.water_trigger_current));
|
|
var_03 = var_03 + (var_01[0],var_01[1],0) * 0.25;
|
|
playfx(level._effect["water_splash_enter" + var_00],var_03,anglestoforward((0,self.angles[1],0) + (270,180,0)));
|
|
}
|
|
|
|
while(isdefined(self.water_trigger_current))
|
|
{
|
|
var_01 = (0,0,0);
|
|
if(isplayer(self))
|
|
{
|
|
var_01 = self getvelocity();
|
|
}
|
|
else
|
|
{
|
|
var_01 = anglestoforward(self.angles) * self.water_wake_speed;
|
|
}
|
|
|
|
var_02 = distance(var_01,(0,0,0));
|
|
if(var_02 > 0)
|
|
{
|
|
wait(max(1 - var_02 / 120,0.1));
|
|
}
|
|
else
|
|
{
|
|
wait(0.3);
|
|
}
|
|
|
|
var_03 = self.origin;
|
|
if(var_02 > 5)
|
|
{
|
|
var_04 = vectornormalize((var_01[0],var_01[1],0));
|
|
var_05 = anglestoforward(vectortoangles(var_04) + (270,180,0));
|
|
var_03 = (var_03[0],var_03[1],getwaterline(self.water_trigger_current)) + var_02 / 4 * var_04;
|
|
playfx(level._effect["water_wake" + var_00],var_03,var_05);
|
|
continue;
|
|
}
|
|
|
|
var_03 = (var_03[0],var_03[1],getwaterline(self.water_trigger_current));
|
|
playfx(level._effect["water_wake_stationary" + var_00],var_03,anglestoforward((0,self.angles[1],0) + (270,180,0)));
|
|
}
|
|
}
|
|
|
|
//Function Number: 26
|
|
playerunderwater()
|
|
{
|
|
self endon("death");
|
|
self endon("above_water");
|
|
childthread player_underwater_shock();
|
|
thread underwaterbubbles();
|
|
thread underwatercloudy();
|
|
}
|
|
|
|
//Function Number: 27
|
|
player_underwater_shock()
|
|
{
|
|
for(;;)
|
|
{
|
|
self shellshock("underwater",60);
|
|
wait(60);
|
|
}
|
|
}
|
|
|
|
//Function Number: 28
|
|
onplayerdeath()
|
|
{
|
|
self endon("above_water");
|
|
self waittill("death");
|
|
self.inwater = undefined;
|
|
self.water_trigger_current = undefined;
|
|
under_water_set(0);
|
|
water_set_depth(0);
|
|
disable_swim_or_underwater_walk();
|
|
}
|
|
|
|
//Function Number: 29
|
|
underwaterbubbles()
|
|
{
|
|
self endon("death");
|
|
self endon("above_water");
|
|
var_00 = common_scripts\utility::spawn_tag_origin();
|
|
waittillframeend;
|
|
var_00 linktoplayerview(level.player,"tag_origin",(25,0,0),(0,0,0),0);
|
|
thread delete_vm_underwater_org(var_00);
|
|
for(;;)
|
|
{
|
|
if(self.underwater == 1)
|
|
{
|
|
playfxontag(common_scripts\utility::getfx("water_bubbles"),var_00,"tag_origin");
|
|
}
|
|
else
|
|
{
|
|
killfxontag(common_scripts\utility::getfx("water_bubbles"),var_00,"tag_origin");
|
|
}
|
|
|
|
wait(0.25);
|
|
}
|
|
}
|
|
|
|
//Function Number: 30
|
|
delete_vm_underwater_org(param_00)
|
|
{
|
|
common_scripts\utility::waittill_any("above_water","death");
|
|
killfxontag(common_scripts\utility::getfx("water_bubbles"),param_00,"tag_origin");
|
|
param_00 unlinkfromplayerview(level.player);
|
|
wait 0.05;
|
|
param_00 delete();
|
|
}
|
|
|
|
//Function Number: 31
|
|
underwatercloudy()
|
|
{
|
|
if(isdefined(level.underwater_cloudy))
|
|
{
|
|
var_00 = common_scripts\utility::spawn_tag_origin();
|
|
var_00.angles = (0,0,0);
|
|
var_00.origin = level.player geteye() - (0,0,0);
|
|
var_00 linktoplayerview(level.player,"tag_origin",(70,0,-1),(-90,0,0),0);
|
|
playfxontag(common_scripts\utility::getfx(level.underwater_cloudy),var_00,"tag_origin");
|
|
self waittill("above_water");
|
|
killfxontag(common_scripts\utility::getfx(level.underwater_cloudy),var_00,"tag_origin");
|
|
var_00 unlinkfromplayerview(level.player);
|
|
var_00 delete();
|
|
}
|
|
}
|
|
|
|
//Function Number: 32
|
|
isabovewaterline(param_00)
|
|
{
|
|
if(getplayereyeheight() > level getwaterline(param_00))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 33
|
|
getplayereyeheight()
|
|
{
|
|
var_00 = self geteye();
|
|
return var_00[2];
|
|
}
|
|
|
|
//Function Number: 34
|
|
getwaterline(param_00)
|
|
{
|
|
var_01 = 3;
|
|
var_02 = maps\_utility::getent_or_struct(param_00.target,"targetname");
|
|
var_03 = var_02.origin[2] + var_01;
|
|
return var_03;
|
|
}
|
|
|
|
//Function Number: 35
|
|
setdof(param_00)
|
|
{
|
|
self setdepthoffield(param_00["nearStart"],param_00["nearEnd"],param_00["farStart"],param_00["farEnd"],param_00["nearBlur"],param_00["farBlur"]);
|
|
}
|
|
|
|
//Function Number: 36
|
|
set_light_set_for_player(param_00)
|
|
{
|
|
if(isdefined(level.lightset_current))
|
|
{
|
|
level.lightset_previous = level.lightset_current;
|
|
}
|
|
|
|
level.lightset_current = param_00;
|
|
self lightsetforplayer(param_00);
|
|
}
|
|
|
|
//Function Number: 37
|
|
revertvisionsetforplayer(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = 1;
|
|
}
|
|
|
|
if(isdefined(self.ridevisionset))
|
|
{
|
|
self setclienttriggervisionset(self.ridevisionset,param_00);
|
|
self visionsetnakedforplayer(self.ridevisionset,param_00);
|
|
}
|
|
|
|
if(isdefined(level.visionset_default))
|
|
{
|
|
self setclienttriggervisionset(level.visionset_default,param_00);
|
|
self visionsetnakedforplayer(level.visionset_default,param_00);
|
|
maps\_utility::vision_set_fog_changes(level.visionset_default,param_00);
|
|
return;
|
|
}
|
|
|
|
self setclienttriggervisionset("",param_00);
|
|
self visionsetnakedforplayer("",param_00);
|
|
}
|
|
|
|
//Function Number: 38
|
|
watchaienterwater(param_00)
|
|
{
|
|
param_00 notify("watchAIEnterWater");
|
|
param_00 endon("watchAIEnterWater");
|
|
param_00 endon("death");
|
|
for(;;)
|
|
{
|
|
foreach(var_02 in level.underwatertriggers)
|
|
{
|
|
if((!isdefined(param_00.inwater) || !param_00.inwater) && param_00 istouching(var_02))
|
|
{
|
|
param_00.inwater = 1;
|
|
if(!isdefined(param_00.water_trigger_current))
|
|
{
|
|
param_00 thread aiinwater(var_02);
|
|
}
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
//Function Number: 39
|
|
aiinwater(param_00)
|
|
{
|
|
self notify("aiInWater");
|
|
self endon("aiInWater");
|
|
self endon("death");
|
|
if(isdefined(param_00))
|
|
{
|
|
self.water_trigger_current = param_00;
|
|
}
|
|
|
|
if(!isdefined(self.water_lastemerge))
|
|
{
|
|
self.water_lastemerge = 0;
|
|
}
|
|
|
|
if(!isdefined(self.ent_flag) || !isdefined(self.ent_flag["water_trigger_paused"]))
|
|
{
|
|
maps\_utility::ent_flag_init("water_trigger_paused");
|
|
}
|
|
|
|
if(!isdefined(self.mechdata) || !self.mechdata.active)
|
|
{
|
|
thread inwaterwake();
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
maps\_utility::ent_flag_waitopen("water_trigger_paused");
|
|
var_01 = 0;
|
|
if(isdefined(param_00) && self istouching(param_00))
|
|
{
|
|
var_01 = 1;
|
|
}
|
|
else
|
|
{
|
|
foreach(var_03 in level.underwatertriggers)
|
|
{
|
|
if((!isdefined(param_00) || var_03 != param_00) && self istouching(var_03))
|
|
{
|
|
var_01 = 1;
|
|
param_00 = var_03;
|
|
self.water_trigger_current = var_03;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(var_01 && !isdefined(self.underwater) && !isabovewaterline(param_00) && gettime() - self.water_lastemerge > 700)
|
|
{
|
|
ai_enable_swim_or_underwater_walk();
|
|
}
|
|
|
|
if(isdefined(self.underwater) && isabovewaterline(param_00) || !var_01)
|
|
{
|
|
ai_disable_swim_or_underwater_walk();
|
|
self.water_lastemerge = gettime();
|
|
}
|
|
|
|
if(isdefined(self.water_trigger_current) && var_01)
|
|
{
|
|
ai_water_set_depth(water_depth_below(self.water_trigger_current));
|
|
}
|
|
else
|
|
{
|
|
ai_water_set_depth(0);
|
|
}
|
|
|
|
if(!var_01)
|
|
{
|
|
self.inwater = undefined;
|
|
self.water_trigger_current = undefined;
|
|
ai_disable_swim_or_underwater_walk();
|
|
self notify("out_of_water");
|
|
break;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 40
|
|
ai_water_set_depth(param_00)
|
|
{
|
|
var_01 = water_depth_state(param_00);
|
|
var_02 = "none";
|
|
if(isdefined(self.water_depth))
|
|
{
|
|
var_02 = water_depth_state(self.water_depth);
|
|
}
|
|
|
|
if(param_00 > 0)
|
|
{
|
|
self.water_depth = param_00;
|
|
}
|
|
else
|
|
{
|
|
self.water_depth = undefined;
|
|
}
|
|
|
|
if(isdefined(self.mechdata) && self.mechdata.active)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(var_02 != var_01)
|
|
{
|
|
switch(var_01)
|
|
{
|
|
case "ankle":
|
|
thread ai_wading_footsteps("_ankle");
|
|
break;
|
|
|
|
case "knee":
|
|
thread ai_wading_footsteps("_knee");
|
|
break;
|
|
|
|
case "thigh":
|
|
case "chest":
|
|
thread ai_wading_footsteps("_waist");
|
|
break;
|
|
|
|
case "deep":
|
|
case "puddle":
|
|
default:
|
|
thread ai_wading_footsteps();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 41
|
|
ai_wading_footsteps(param_00)
|
|
{
|
|
self notify("ai_wading_footsteps");
|
|
self endon("ai_wading_footsteps");
|
|
self endon("death");
|
|
self.playfootstepoverride = undefined;
|
|
if(isdefined(param_00))
|
|
{
|
|
self.playfootstepoverride = ::ai_water_footstep;
|
|
self.water_foley_type = param_00;
|
|
}
|
|
}
|
|
|
|
//Function Number: 42
|
|
ai_water_footstep(param_00,param_01)
|
|
{
|
|
self notify("ai_water_footstep");
|
|
self endon("ai_water_footstep");
|
|
self endon("death");
|
|
self.water_step = animscripts\notetracks::get_notetrack_movement();
|
|
aud_water_footsteps_foley(self.water_step,self.water_foley_type,"");
|
|
self.water_wake_speed = 100;
|
|
if(self.water_step == "run")
|
|
{
|
|
self.water_wake_speed = 75;
|
|
}
|
|
else if(self.water_step == "walk")
|
|
{
|
|
self.water_wake_speed = 50;
|
|
}
|
|
|
|
wait(2);
|
|
self.water_wake_speed = 0;
|
|
}
|
|
|
|
//Function Number: 43
|
|
get_underwater_walk_speed_scale_ai()
|
|
{
|
|
var_00 = getdvarfloat("underwater_walk_speed_scale_ai");
|
|
return var_00;
|
|
}
|
|
|
|
//Function Number: 44
|
|
ai_enable_swim_or_underwater_walk()
|
|
{
|
|
self.underwater = 1;
|
|
if(!isdefined(self.mech) || !self.mech)
|
|
{
|
|
self.swimming = 1;
|
|
}
|
|
else
|
|
{
|
|
self.underwater_walk = 1;
|
|
}
|
|
|
|
if(isdefined(self.swimming))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.underwater_walk))
|
|
{
|
|
maps\_utility::set_moveplaybackrate(get_underwater_walk_speed_scale_ai(),undefined,1);
|
|
maps\_utility::walkdist_force_walk();
|
|
}
|
|
}
|
|
|
|
//Function Number: 45
|
|
ai_disable_swim_or_underwater_walk()
|
|
{
|
|
self.underwater = 0;
|
|
if(isdefined(self.swimming))
|
|
{
|
|
self.swimming = undefined;
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.underwater_walk))
|
|
{
|
|
maps\_utility::walkdist_reset();
|
|
maps\_utility::restore_moveplaybackrate(1,1);
|
|
self.underwater_walk = undefined;
|
|
}
|
|
} |