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

378 lines
9.6 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
watershallowfx()
{
level._effect["water_kick"] = loadfx( "vfx/moments/flood/flood_db_foam_allie_ch_fast_cheap" );
level._effect["water_splash_emerge"] = loadfx( "vfx/moments/flood/flood_db_foam_allie_vertical_splash_sml" );
level._effect["water_splash_large"] = loadfx( "vfx/moments/flood/flood_db_foam_allie_vertical_splash_lrg" );
}
watershallowinit( var_0, var_1 )
{
if ( isdefined( var_0 ) )
level.waterdeletez = var_0;
level.trigunderwater = getent( "trigger_underwater", "targetname" );
level.trigabovewater = getent( "trigger_abovewater", "targetname" );
level.trigunderwater thread watchplayerenterwater( level.trigabovewater, var_1 );
level thread clearwatervarsonspawn( level.trigunderwater );
if ( isdefined( var_0 ) )
level thread watchentsindeepwater( level.trigunderwater, var_0 );
}
watchentsindeepwater( var_0, var_1 )
{
level childthread watchentsindeepwater_mines( var_0, var_1 );
level childthread watchentsindeepwater_ks( var_0, var_1 );
}
watchentsindeepwater_ks( var_0, var_1 )
{
level endon( "game_ended" );
for (;;)
{
wait 0.05;
var_2 = level.placedims;
var_2 = common_scripts\utility::array_combine( var_2, level.uplinks );
var_2 = common_scripts\utility::array_combine( var_2, level.turrets );
foreach ( var_4 in var_2 )
{
if ( !isdefined( var_4 ) )
continue;
var_5 = common_scripts\utility::ter_op( isdefined( var_4.sentrytype ) && var_4.sentrytype == "sentry_minigun", var_1 - 35, var_1 );
if ( var_4.origin[2] <= var_5 && var_4 istouching( var_0 ) )
var_4 notify( "death" );
}
wait 0.05;
foreach ( var_8 in level.characters )
{
if ( isdefined( var_8 ) && isalive( var_8 ) && isai( var_8 ) && var_8.origin[2] <= var_1 - 35 && var_8 istouching( var_0 ) )
{
if ( isagent( var_8 ) && isdefined( var_8.agent_type ) && var_8.agent_type == "dog" )
{
if ( !isdefined( var_8.spawntime ) || gettime() - var_8.spawntime > 2000 )
var_8 [[ var_8 maps\mp\agents\_agent_utility::agentfunc( "on_damaged" ) ]]( level, undefined, int( ceil( var_8.maxhealth * 0.08 ) ), 0, "MOD_CRUSH", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0 );
continue;
}
var_8 dodamage( int( ceil( var_8.maxhealth * 0.08 ) ), var_8.origin );
}
}
}
}
watchentsindeepwater_mines( var_0, var_1 )
{
level endon( "game_ended" );
for (;;)
{
level waittill( "mine_planted" );
waittillframeend;
var_2 = level.mines;
foreach ( var_6, var_4 in var_2 )
{
if ( !isdefined( var_4 ) )
continue;
var_5 = 0;
if ( isdefined( var_4.istallforwaterchecks ) )
var_5 = 28;
if ( var_4.origin[2] <= var_1 - var_5 && var_4 istouching( var_0 ) )
var_4 maps\mp\gametypes\_weapons::deleteexplosive();
}
}
}
clearwatervarsonspawn( var_0 )
{
level endon( "game_ended" );
for (;;)
{
level waittill( "player_spawned", var_1 );
if ( !var_1 istouching( var_0 ) )
{
var_1.inwater = undefined;
var_1.underwater = undefined;
var_1 notify( "out_of_water" );
}
}
}
watchplayerenterwater( var_0, var_1 )
{
level endon( "game_ended" );
for (;;)
{
self waittill( "trigger", var_2 );
if ( !isplayer( var_2 ) && !isagent( var_2 ) )
continue;
if ( !isalive( var_2 ) || isagent( var_2 ) && isdefined( var_2.agent_type ) && var_2.agent_type == "dog" )
continue;
if ( !isdefined( var_2.inwater ) )
{
var_2.inwater = 1;
var_2 thread playerinwater( self, var_0, var_1 );
}
}
}
playersplash()
{
self endon( "out_of_water" );
self endon( "death" );
self endon( "disconnect" );
var_0 = self getvelocity();
if ( var_0[2] > -100 )
return;
wait 0.2;
var_0 = self getvelocity();
if ( var_0[2] <= -100 )
{
self playsound( "watersplash_lrg" );
playfx( level._effect["water_splash_large"], self.origin + ( 0, 0, 36 ), ( 0, 0, 1 ), anglestoforward( ( 0, self.angles[1], 0 ) ) );
}
}
playerinwater( var_0, var_1, var_2 )
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
thread inwaterwake( var_2 );
thread playerwaterclearwait();
thread playersplash();
for (;;)
{
if ( !self istouching( var_0 ) )
{
self.inwater = undefined;
self.underwater = undefined;
self notify( "out_of_water" );
stopwatervisuals();
break;
}
if ( !isdefined( self.underwater ) && !self istouching( var_1 ) )
{
if ( self.classname == "script_vehicle" )
self notify( "death" );
else
{
self.underwater = 1;
thread playerunderwater();
}
}
if ( isdefined( self.underwater ) && self istouching( var_1 ) )
{
self.underwater = undefined;
self notify( "above_water" );
stopwatervisuals();
if ( isplayer( self ) )
{
if ( self hasfemalecustomizationmodel() )
self playlocalsound( "Fem_breathing_better" );
else
self playlocalsound( "breathing_better" );
}
playfx( level._effect["water_splash_emerge"], self.origin + ( 0, 0, 24 ) );
}
wait 0.05;
}
}
isactivekillstreakpoolrestricted( var_0 )
{
if ( isdefined( var_0.killstreakindexweapon ) )
{
var_1 = self.pers["killstreaks"][self.killstreakindexweapon].streakname;
if ( isdefined( var_1 ) )
{
switch ( var_1 )
{
case "sam_turret":
case "remote_tank":
case "sentry":
case "ims":
case "minigun_turret":
case "remote_mg_turret":
case "remote_uav":
return 1;
}
}
}
return 0;
}
playerwaterclearwait()
{
common_scripts\utility::waittill_any( "death", "disconnect", "out_of_water" );
if ( !isdefined( self ) )
return;
self.inwater = undefined;
self.underwater = undefined;
}
inwaterwake( var_0 )
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
self endon( "out_of_water" );
var_1 = common_scripts\utility::ter_op( isdefined( var_0 ), var_0, self.origin[2] );
var_2 = 0;
for (;;)
{
if ( var_2 )
wait 0.05;
else
wait 0.3;
if ( !isdefined( level.waterkicktimenext ) )
level.waterkicktimenext = gettime() + 200;
else
{
var_3 = gettime();
if ( gettime() < level.waterkicktimenext )
{
var_2 = 1;
continue;
}
else
level.waterkicktimenext = var_3 + 200;
}
var_2 = 0;
var_4 = self getvelocity();
if ( !isdefined( var_0 ) )
{
if ( abs( var_4[2] ) <= 1 )
var_1 = self.origin[2];
}
if ( abs( var_4[2] ) > 30 )
{
playfx( level._effect["water_kick"], ( self.origin[0], self.origin[1], min( var_1, self.origin[2] ) ) );
continue;
}
if ( length2dsquared( var_4 ) > 3600 )
{
var_5 = vectornormalize( ( var_4[0], var_4[1], 0 ) );
playfx( level._effect["water_kick"], ( self.origin[0], self.origin[1], min( var_1, self.origin[2] ) ) + var_5 * 36, var_5, ( 0, 0, 1 ) );
}
}
}
playerunderwater()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
self endon( "above_water" );
self endon( "out_of_water" );
if ( !maps\mp\_utility::isusingremote() )
{
startwatervisuals();
thread stopwatervisualsonremote();
}
playfx( level._effect["water_splash_emerge"], self geteye() - ( 0, 0, 24 ) );
wait 2;
thread onplayerdrowned();
for (;;)
{
self dodamage( 20, self.origin );
wait 1;
}
}
onplayerdrowned()
{
level endon( "game_ended" );
self endon( "disconnect" );
self endon( "above_water" );
self endon( "out_of_water" );
self waittill( "death" );
self.inwater = undefined;
self.underwater = undefined;
}
underwaterbubbles()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "using_remote" );
self endon( "disconnect" );
self endon( "above_water" );
self endon( "out_of_water" );
for (;;)
{
playfx( level._effect["water_bubbles"], self geteye() + anglestoup( self.angles ) * -13 + anglestoforward( self.angles ) * 25 );
wait 0.75;
}
}
startwatervisuals()
{
self shellshock( "mp_flooded_water", 8 );
if ( isplayer( self ) )
self setblurforplayer( 10, 0.0 );
}
stopwatervisuals()
{
self stopshellshock();
if ( isplayer( self ) )
self setblurforplayer( 0, 0.85 );
}
stopwatervisualsonremote()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
self endon( "above_water" );
self endon( "out_of_water" );
self waittill( "using_remote" );
stopwatervisuals();
}