// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool init_coverwater( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = ""; level.cw_znear_default = getdvar( "r_znear" ); level.cw_trigger_volumes = []; level.current_audio_zone = maps\_utility::get_audio_zone(); level.cw_waterwipe_above_playing = 0; level.cw_waterwipe_under_playing = 0; level.cw_player_in_rising_water = 0; level.cw_player_allowed_underwater_time = 15; level.cw_player_damage_underwater_time_exceeded = 1; level.cw_player_underwater_max_blur = 8; level.cw_player_underwater_blur = 1.5; level.cw_waterwipe_above = undefined; level.cw_waterwipe_under = undefined; level.cw_no_waterwipe = 0; level.cw_player_drowning_animate = 1; common_scripts\utility::flag_init( "cw_player_out_of_water" ); common_scripts\utility::flag_init( "cw_player_in_water" ); common_scripts\utility::flag_init( "cw_player_underwater" ); common_scripts\utility::flag_init( "cw_player_abovewater" ); common_scripts\utility::flag_init( "cw_player_no_speed_adj" ); common_scripts\utility::flag_init( "cw_player_crouch_disabled" ); common_scripts\utility::flag_init( "cw_player_make_stand" ); common_scripts\utility::flag_init( "underwater_forced_surface" ); level._effect["player_sprint_bokehdots"] = loadfx( "vfx/gameplay/screen_effects/scrnfx_water_bokeh_dots_inst_16" ); level._effect["bullet_trail"] = loadfx( "fx/water/flooded_underwater_bullet_trail" ); level._effect["scuba_bubbles_breath_player"] = loadfx( "fx/water/scuba_bubbles_breath_player" ); level._effect["waterline_under"] = loadfx( "vfx/moments/flood/water_waterline_plunge_runner" ); level._effect["waterline_above"] = loadfx( "vfx/gameplay/screen_effects/vfx_scrnfx_bokehwater_heavy" ); level._effect["cw_fizzle_flashbang"] = loadfx( "fx/water/flooded_body_splash" ); level._effect["underwater_movement"] = loadfx( "fx/water/flood_water_wake" ); level._effect["underwater_stop"] = loadfx( "fx/water/flood_water_stand" ); level._effect["water_movement"] = loadfx( "fx/water/flood_water_wake" ); level._effect["water_stop"] = loadfx( "fx/water/flood_water_stand" ); level._effect["water_movement_rising"] = loadfx( "fx/water/flood_water_wake_rising" ); level._effect["water_stop_rising"] = loadfx( "fx/water/flood_water_stand_rising" ); level._effect["water_movement_player"] = loadfx( "fx/water/flood_water_wake" ); level._effect["water_stop_player"] = loadfx( "fx/water/flood_water_stand" ); level._effect["sprint_splash"] = loadfx( "vfx/moments/flood/flood_ai_water_splash_01" ); level._effect["sprint_splash_rising"] = loadfx( "vfx/moments/flood/flood_ai_water_splash_rising_01" ); level._effect["sprint_splash_player"] = loadfx( "vfx/gameplay/screen_effects/scrnfx_water_splash_high" ); level._effect["melee_water"] = loadfx( "fx/water/flooded_sprint_splash" ); level._effect["water_under_splash"] = loadfx( "fx/water/flood_water_wake" ); level._effect["cw_enter_splash_small"] = loadfx( "fx/water/flooded_sprint_splash" ); level._effect["cw_enter_splash_big"] = loadfx( "fx/water/flooded_body_splash" ); level._effect["scrnfx_water_splash_high"] = loadfx( "vfx/gameplay/screen_effects/scrnfx_water_splash_high" ); level._effect["scrnfx_water_splash_low"] = loadfx( "vfx/gameplay/screen_effects/scrnfx_water_splash_low" ); level._effect["scrnfx_water_splash_med"] = loadfx( "vfx/gameplay/screen_effects/scrnfx_water_splash_med" ); level._effect["cw_water_emerge_weapon"] = loadfx( "vfx/moments/flood/flood_water_emerge_weapon" ); level._effect["cw_character_drips"] = loadfx( "vfx/moments/flood/flood_character_drips" ); level._effect["cw_player_drips"] = loadfx( "vfx/moments/flood/flood_player_drips" ); level._effect["waterline"] = loadfx( "vfx/moments/flood/water_waterline_loop_02" ); level._effect["quick_dunk"] = loadfx( "vfx/moments/flood/water_waterline_loop_02" ); level._effect["player_water_surface_plunge"] = loadfx( "vfx/moments/flood/water_waterline_plunge_runner" ); level._effect["player_water_surface_emerge"] = loadfx( "vfx/gameplay/screen_effects/vfx_scrnfx_bokehwater_heavy" ); level._effect["player_water_surface_plunge_fast"] = loadfx( "vfx/moments/flood/water_waterline_plunge_runner" ); level._effect["player_water_surface_emerge_fast"] = loadfx( "vfx/gameplay/screen_effects/vfx_scrnfx_bokehwater_heavy" ); precacheitem( "coverwater_magicbullet_above" ); precacheitem( "coverwater_magicbullet_under" ); thread init_waistwater_archetype(); thread setup_player_view_water_fx_source(); thread sfx_set_audio_zone_after_deathsdoor(); thread fizzle_flashbangs_think(); thread start_coverwater( var_0 ); } register_coverwater_area( var_0, var_1 ) { if ( !isdefined( var_1 ) ) var_1 = ""; common_scripts\utility::array_thread( getentarray( var_0 + "_above", "targetname" ), ::water_surface_think, var_1 ); common_scripts\utility::array_thread( getentarray( var_0 + "_under", "targetname" ), ::water_surface_think, var_1 ); var_2 = getent( var_0 + "_trigger", "targetname" ); var_2 thread trigger_volume_think( var_1 ); level.cw_trigger_volumes = common_scripts\utility::array_add( level.cw_trigger_volumes, var_2 ); } flag_checker() { for (;;) { if ( common_scripts\utility::flag( "cw_player_in_water" ) ) jkuprint( "flag getting set!" ); common_scripts\utility::waitframe(); } } start_coverwater( var_0 ) { level endon( var_0 ); for (;;) { common_scripts\utility::flag_wait( "cw_player_in_water" ); common_scripts\utility::flag_clear( "cw_player_out_of_water" ); setsaveddvar( "r_znear", 0.7 ); setsaveddvar( "cg_enableWaterSurfaceTransitionFx", 1 ); playfxontag( common_scripts\utility::getfx( "waterline" ), level.cw_player_view_water_level_fx_source, "tag_origin" ); thread player_water_height_think( var_0 ); level.player allowprone( 0 ); thread player_underwater_think( var_0 ); common_scripts\utility::flag_waitopen( "cw_player_in_water" ); common_scripts\utility::flag_set( "cw_player_out_of_water" ); setsaveddvar( "r_znear", level.cw_znear_default ); setsaveddvar( "cg_enableWaterSurfaceTransitionFx", 0 ); killfxontag( common_scripts\utility::getfx( "waterline" ), level.cw_player_view_water_level_fx_source, "tag_origin" ); level.cw_player_is_drowning = undefined; level.player allowprone( 1 ); } } player_underwater_think( var_0 ) { level endon( var_0 ); level endon( "cw_player_out_of_water" ); for (;;) { if ( is_player_eye_underwater() ) break; common_scripts\utility::waitframe(); } common_scripts\utility::flag_set( "cw_player_underwater" ); common_scripts\utility::flag_clear( "cw_player_abovewater" ); thread create_player_going_underwater_effects(); level.deathsdooroverride = "deathsdoor_underwater"; if ( isdefined( level._audio.in_deathsdoor ) ) { maps\_audio::set_deathsdoor(); level thread maps\flood_audio::sfx_deathsdoor_end_underwater(); } else if ( isdefined( level.swept_away ) && level.swept_away == 0 ) level.player setclienttriggeraudiozone( "flood_underwater", 0.01 ); thread ai_enemy_tracking( "underwater", var_0 ); thread player_breath_timer( var_0 ); thread kill_above_water_fx(); level.player setwatersheeting( 0 ); for (;;) { if ( !is_player_eye_underwater() ) break; common_scripts\utility::waitframe(); } common_scripts\utility::flag_set( "cw_player_abovewater" ); common_scripts\utility::flag_clear( "cw_player_underwater" ); thread create_player_surfacing_effects(); level.cw_player_is_drowning = undefined; thread ai_enemy_tracking( "abovewater", var_0 ); player_stop_bubbles(); level.deathsdooroverride = undefined; if ( !isdefined( level._audio.in_deathsdoor ) ) level.player clearclienttriggeraudiozone( 0.01 ); else maps\_audio::set_deathsdoor(); thread player_underwater_think( var_0 ); } player_in_coverwater( var_0 ) { var_0 endon( "death" ); level.player endon( "death" ); common_scripts\utility::flag_set( "cw_player_in_water" ); waittillframeend; level.player thread entity_fx_and_anims_think( "cw_player_out_of_water", ( 0, 0, 0 ) ); while ( level.player istouching( var_0 ) ) common_scripts\utility::waitframe(); common_scripts\utility::flag_clear( "cw_player_in_water" ); } ai_in_coverwater( var_0 ) { var_0 endon( "death" ); self endon( "death" ); self endon( "ai_stop_coverwater" ); self.in_coverwater = 1; maps\_utility::ent_flag_set( "cw_ai_in_of_coverwater" ); maps\_utility::ent_flag_clear( "cw_ai_out_of_coverwater" ); if ( isdefined( self.cw_ai_only_stand ) ) self.cw_ai_only_stand = self.cw_ai_only_stand; else self.cw_ai_only_stand = 1; if ( self.team == "axis" ) { self.cw_previous_grenadeammo = self.grenadeammo; self.grenadeammo = 0; self.cw_previous_longdeath = self.script_longdeath; self.script_longdeath = 0; } thread entity_fx_and_anims_think( "cw_ai_out_of_coverwater", ( 0, 0, 0 ) ); while ( self istouching( var_0 ) ) common_scripts\utility::waitframe(); self.in_coverwater = 0; maps\_utility::ent_flag_set( "cw_ai_out_of_coverwater" ); maps\_utility::ent_flag_clear( "cw_ai_in_of_coverwater" ); if ( self.team == "axis" ) { self.grenadeammo = self.cw_previous_grenadeammo; self.script_longdeath = self.cw_previous_longdeath; } } trigger_volume_think( var_0 ) { self endon( "death" ); level endon( var_0 ); for (;;) { self waittill( "trigger", var_1 ); var_2 = getaiarray( "axis" ); var_2 = common_scripts\utility::array_combine( var_2, getaiarray( "allies" ) ); var_2 = common_scripts\utility::array_add( var_2, level.player ); var_3 = self getistouchingentities( var_2 ); foreach ( var_1 in var_3 ) { if ( isplayer( var_1 ) ) { if ( !common_scripts\utility::flag( "cw_player_in_water" ) ) level.player thread player_in_coverwater( self ); continue; } if ( !var_1 maps\_utility::ent_flag_exist( "cw_ai_in_of_coverwater" ) ) { var_1 maps\_utility::ent_flag_init( "cw_ai_in_of_coverwater" ); var_1 maps\_utility::ent_flag_init( "cw_ai_out_of_coverwater" ); var_1 thread ai_in_coverwater( self ); continue; } if ( !var_1 maps\_utility::ent_flag( "cw_ai_in_of_coverwater" ) ) var_1 thread ai_in_coverwater( self ); } common_scripts\utility::waitframe(); } } water_surface_think( var_0 ) { self endon( "death" ); level endon( var_0 ); self.health = 1000000; self setcandamage( 1 ); for (;;) { self waittill( "damage", var_1, var_2, var_3, var_4, var_5, var_6, var_7 ); self.health = 1000000; if ( var_5 == "MOD_MELEE" ) playfx( common_scripts\utility::getfx( "melee_water" ), var_4 ); else if ( var_2.classname != "script_vehicle_nh90" ) { if ( getsubstr( self.targetname, self.targetname.size - 5 ) == "above" ) { var_8 = var_4 - ( 0, 0, 1 ); var_9 = var_8 + 120 * var_3; if ( isplayer( var_2 ) ) magicbullet( "coverwater_magicbullet_under", var_8, var_9, level.player ); else magicbullet( "coverwater_magicbullet_under", var_8, var_9 ); playfx( common_scripts\utility::getfx( "bullet_trail" ), var_4, var_3 ); } else { var_8 = var_4 + ( 0, 0, 1 ); var_9 = var_8 + 120 * var_3; if ( isplayer( var_2 ) ) magicbullet( "coverwater_magicbullet_above", var_8, var_9, level.player ); else magicbullet( "coverwater_magicbullet_above", var_8, var_9 ); playfx( common_scripts\utility::getfx( "water_under_splash" ), var_4 - ( 0, 0, 1 ) ); } } common_scripts\utility::waitframe(); } } player_water_height_think( var_0 ) { level endon( var_0 ); if ( !isdefined( level.flood_player_default_jump_height ) ) level.flood_player_default_jump_height = getdvarfloat( "jump_height" ); var_1 = 40; var_2 = 50; while ( common_scripts\utility::flag( "cw_player_in_water" ) ) { var_3 = bullettrace( level.player.origin, level.player geteye(), 0, self ); if ( is_player_eye_underwater() ) { if ( !common_scripts\utility::flag( "cw_player_no_speed_adj" ) ) { if ( isdefined( level.cw_player_is_drowning ) && level.cw_player_is_drowning ) { if ( level.cw_player_drowning_damage_count > 10 ) maps\flood_util::player_water_movement( var_1 * 0.5, 0.25 ); else maps\flood_util::player_water_movement( var_1 * ( 1 - level.cw_player_drowning_damage_count * 0.05 ), 0.25 ); } else maps\flood_util::player_water_movement( var_1, 0.25 ); } setsaveddvar( "jump_height", level.flood_player_default_jump_height * 0.4 ); } else if ( var_3["surfacetype"] == "water" ) { var_4 = abs( level.player.origin[2] - var_3["position"][2] ); var_5 = 100 - var_4 * ( var_2 / 48 ); if ( var_5 > 100 ) var_5 = 100; else if ( var_5 < var_2 ) var_5 = var_2; var_6 = level.flood_player_default_jump_height * ( var_5 * 0.008 ); setsaveddvar( "jump_height", var_6 ); if ( !common_scripts\utility::flag( "cw_player_no_speed_adj" ) ) maps\flood_util::player_water_movement( var_5, 0.25 ); } wait 0.2; } setsaveddvar( "jump_height", level.flood_player_default_jump_height ); if ( !common_scripts\utility::flag( "cw_player_no_speed_adj" ) ) maps\flood_util::player_water_movement( 100, 0.25 ); } player_surface_blur_think( var_0 ) { level endon( var_0 ); if ( !isdefined( level.surface_blur ) ) { level.surface_blur = 1; var_1 = 1; for (;;) { while ( common_scripts\utility::flag( "cw_player_in_water" ) ) { var_2 = level.player geteye(); var_3 = 1.5; var_4 = 25; var_5 = bullettrace( var_2 + ( 0, 0, var_3 * -1 ), var_2 + ( 0, 0, var_3 ), 0, self ); if ( var_5["surfacetype"] == "water" ) { var_6 = distance( var_5["position"], var_2 ) * ( var_4 / var_3 ); setblur( var_4 - var_6, 0.05 ); var_1 = 0; } else if ( !var_1 ) { setblur( 0, 0.5 ); var_1 = 1; } common_scripts\utility::waitframe(); } common_scripts\utility::flag_wait( "cw_player_in_water" ); } } } entity_fx_and_anims_think( var_0, var_1, var_2, var_3 ) { level endon( var_0 ); self endon( var_0 ); self endon( "death" ); self endon( "ai_stop_coverwater" ); if ( !isdefined( var_2 ) ) var_2 = 1; var_4 = gettime(); if ( !isplayer( self ) && var_2 ) playfx( common_scripts\utility::getfx( "cw_enter_splash_small" ), self.origin ); if ( !isdefined( var_1 ) ) var_1 = ( 0, 0, 0 ); if ( !isdefined( self.cw_in_rising_water ) ) self.cw_in_rising_water = 0; for (;;) { if ( !isplayer( self ) && self.cw_in_rising_water ) wait( randomfloatrange( 0.05, 0.1 ) ); else wait( randomfloatrange( 0.15, 0.25 ) ); var_5 = self.origin; var_6 = var_5 + ( 0, 0, 84 ); var_7 = bullettrace( var_5, var_6, 0, undefined ); if ( var_7["surfacetype"] != "water" ) continue; var_8 = 36; var_9 = var_7["position"][2] - self.origin[2]; if ( !isplayer( self ) ) { if ( !self.cw_in_rising_water && var_9 < var_8 && isdefined( self.animarchetype ) ) { self allowedstances( "prone", "crouch", "stand" ); maps\_utility::clear_archetype(); self.maxfaceenemydist = 512; } if ( !self.cw_in_rising_water && var_9 > var_8 ) { if ( !isdefined( self.animarchetype ) || self.animarchetype != "waist_water" ) { if ( self.cw_ai_only_stand ) self allowedstances( "stand" ); self.animarchetype = "waist_water"; self.maxfaceenemydist = 1024; } } } var_10 = "water_movement"; if ( isplayer( self ) ) { if ( !common_scripts\utility::flag( "cw_player_underwater" ) ) { if ( distance( self getvelocity(), ( 0, 0, 0 ) ) < 5 ) var_10 = "water_stop_player"; else var_10 = "water_movement_player"; } } else if ( isdefined( level._effect["water_" + self.a.movement] ) ) { if ( self.cw_in_rising_water ) var_10 = "water_" + self.a.movement + "_rising"; else var_10 = "water_" + self.a.movement; } var_11 = common_scripts\utility::getfx( var_10 ); var_5 = var_7["position"] + var_1; if ( isplayer( self ) ) { if ( !common_scripts\utility::flag( "cw_player_underwater" ) ) { if ( self getnormalizedmovement()[0] > 0 ) { var_12 = distance( self getvelocity(), ( 0, 0, 0 ) ); if ( var_12 > 100 ) { if ( gettime() - var_4 > 750 ) { var_4 = gettime(); if ( randomint( 3 ) == 0 ) playfxontag( level._effect["scrnfx_water_splash_med"], level.cw_player_view_fx_source, "tag_origin" ); else playfxontag( level._effect["scrnfx_water_splash_high"], level.cw_player_view_fx_source, "tag_origin" ); } } else if ( var_12 > 40 ) { if ( gettime() - var_4 > 1500 ) { var_4 = gettime(); playfxontag( level._effect["scrnfx_water_splash_low"], level.cw_player_view_fx_source, "tag_origin" ); } } } } } else if ( self.a.movement == "run" ) { if ( isdefined( self.animarchetype ) && self.animarchetype != "waist_water" || !isdefined( self.animarchetype ) ) { var_5 = var_5 + 25 * anglestoforward( self.angles ); if ( self.cw_in_rising_water ) playfx( common_scripts\utility::getfx( "sprint_splash_rising" ), var_5 ); else playfx( common_scripts\utility::getfx( "sprint_splash" ), var_5 ); } } if ( self.cw_in_rising_water ) { if ( !common_scripts\utility::flag( "cw_player_underwater" ) ) thread fx_water_surface_floater( var_5, var_11, var_7["entity"], var_0, 0 ); continue; } if ( isplayer( self ) && isdefined( level.cw_player_in_rising_water ) && level.cw_player_in_rising_water ) { if ( !common_scripts\utility::flag( "cw_player_underwater" ) ) thread fx_water_surface_floater( var_5, var_11, var_7["entity"], var_0, 0 ); continue; } var_13 = ( 0, self.angles[1], 0 ); var_14 = anglestoforward( var_13 ); var_15 = anglestoup( var_13 ); if ( self geteye()[2] + 6 - var_9 > 0 ) playfx( var_11, var_5, var_15, var_14 ); else playfx( common_scripts\utility::getfx( "underwater_movement" ), var_5, var_15, var_14 ); } } do_wet_fx() { var_0 = []; var_0[0] = "J_Elbow_LE"; var_0[1] = "J_Elbow_RI"; var_0[2] = "J_Wrist_LE"; var_0[3] = "J_Wrist_RI"; var_0[4] = "TAG_STOWED_BACK"; var_0[5] = "J_Neck"; if ( 0 ) { if ( !isdefined( self.cw_playing_wet_fx ) ) self.cw_playing_wet_fx = 0; if ( !self.cw_playing_wet_fx ) { jkuprint( "playing wet fx" ); self.cw_playing_wet_fx = 1; } if ( self.a.movement == "run" ) { foreach ( var_2 in var_0 ) { if ( randomint( 3 ) == 0 ) { var_3 = self gettagorigin( var_2 ) + ( randomfloatrange( -2, 2 ), randomfloatrange( -2, 2 ), randomfloatrange( -2, 2 ) ); playfx( common_scripts\utility::getfx( "cw_character_drips" ), var_3 ); } } } } else { if ( !isdefined( self.cw_playing_wet_fx ) ) self.cw_playing_wet_fx = 0; if ( self.cw_playing_wet_fx ) { jkuprint( "stopping wet fx" ); self.cw_playing_wet_fx = 0; foreach ( var_2 in var_0 ) { var_3 = self gettagorigin( var_2 ) + ( randomfloatrange( -2, 2 ), randomfloatrange( -2, 2 ), randomfloatrange( -2, 2 ) ); playfx( common_scripts\utility::getfx( "cw_character_drips" ), var_3 ); } } } } fx_water_surface_floater( var_0, var_1, var_2, var_3, var_4 ) { self endon( "death" ); if ( !isdefined( var_2 ) || !isdefined( var_2.classname ) ) { jkuprint( "floater returning because of bad ent" ); return; } var_5 = ( 0, 0, 2 ); var_6 = spawn( "script_model", var_0 + var_5 ); var_6 setmodel( "tag_origin" ); var_6 hide(); var_6.angles = ( -90, 0, 0 ); if ( !isdefined( var_4 ) ) var_6 linkto( var_2 ); playfxontag( var_1, var_6, "tag_origin" ); wait 3; var_6 delete(); } is_player_eye_underwater( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = 0; var_1 = level.player geteye() + ( 0, 0, var_0 ); var_2 = bullettrace( var_1, var_1 + ( 0, 0, 250 ), 0, self ); if ( var_2["surfacetype"] == "water" ) return 1; else if ( isdefined( var_2["entity"] ) && isdefined( var_2["entity"].script_noteworthy ) && var_2["entity"].script_noteworthy == "consider_underwater" ) return 1; else return 0; } create_player_surfacing_effects() { thread audio_water_level_logic( "emerge" ); level.player setwatersheeting( 1, 1.5 ); thread maps\flood_fx::fx_waterdrops_20_inst(); common_scripts\utility::waitframe(); thread maps\flood_fx::fx_turn_on_bokehdots_16_player(); thread maps\_utility::set_blur( 0, 0 ); maps\_art::dof_disable_script( 0.0 ); } create_player_going_underwater_effects() { thread audio_water_level_logic( "submerge" ); thread maps\flood_fx::dof_underwater_general(); thread maps\_utility::set_blur( level.cw_player_underwater_blur, 0 ); } player_do_surfacing_models( var_0 ) { switch ( var_0 ) { case "create": var_1 = maps\_utility::spawn_anim_model( "player_rig" ); var_1 hide(); break; case "kill": break; } } player_breath_timer( var_0 ) { level endon( var_0 ); level endon( "cw_player_abovewater" ); level endon( "cw_player_out_of_water" ); jkuprint( "water: " + level.cw_player_allowed_underwater_time + " allowed." ); if ( level.cw_player_allowed_underwater_time > 1 ) { level thread set_blur_coverwater( var_0 ); level thread maps\flood_audio::sfx_start_heartbeat_countdown(); } wait( level.cw_player_allowed_underwater_time ); if ( level.cw_player_damage_underwater_time_exceeded ) { thread player_deal_underwater_damage( gettime(), 6000, 20, var_0 ); level thread maps\flood_audio::sfx_start_heartbeat_countdown_lp(); } jkuprint( "water: nh!" ); thread audio_underwater_choke(); thread player_abovewater_defaults(); delay_with_bubbles( 6, 0.5, 1, 0, var_0 ); thread player_do_toolong_fx( var_0 ); level waittill( "toolong_exit" ); thread audio_underwater_breath_surfacing(); cw_player_make_stand(); } set_blur_coverwater( var_0 ) { level.player endon( "death" ); level endon( var_0 ); level endon( "cw_player_abovewater" ); level endon( "cw_player_out_of_water" ); wait 2; jkuprint( "starting blur timer" ); maps\_utility::set_blur( level.cw_player_underwater_max_blur, level.cw_player_allowed_underwater_time + 1 ); } player_water_crouch_timer( var_0 ) { common_scripts\utility::flag_set( "cw_player_crouch_disabled" ); level endon( var_0 ); level endon( "cw_player_out_of_water" ); var_1 = gettime(); while ( gettime() - var_1 < 5000 ) { if ( level.player getstance() == "crouch" ) { var_1 = gettime(); if ( !common_scripts\utility::flag( "cw_player_make_stand" ) ) { common_scripts\utility::flag_set( "cw_player_make_stand" ); maps\_utility::delaythread( 1, ::cw_player_make_stand ); } } wait 0.05; } common_scripts\utility::flag_clear( "cw_player_crouch_disabled" ); } cw_player_make_stand() { level.player endon( "death" ); while ( level.player getstance() != "stand" ) { level.player setstance( "stand" ); wait 1; player_make_bubbles(); level.player dodamage( 1, level.player.origin ); } common_scripts\utility::flag_clear( "cw_player_make_stand" ); jkuprint( "water: ms" ); } delay_with_bubbles( var_0, var_1, var_2, var_3, var_4 ) { level endon( var_4 ); level endon( "cw_player_abovewater" ); level endon( "cw_player_out_of_water" ); for ( var_5 = 0; var_5 < var_0; var_5++ ) { if ( !var_3 ) player_make_bubbles(); if ( !var_2 ) thread audio_underwater_breath_bubbles(); wait( var_1 ); } } player_do_toolong_fx( var_0 ) { var_1 = getdvarint( "cg_fov" ); var_2 = 0.4; var_3 = 0.3; var_4 = 0.2; var_5 = 0.97; var_6 = 0.95; var_7 = 0.85; var_8 = level.cw_player_underwater_max_blur * 1.5; var_9 = level.cw_player_underwater_max_blur * 1.5; var_10 = level.cw_player_underwater_max_blur * 2.0; level.player allowads( 0 ); thread delay_with_bubbles( 1, 0, 0, 0, var_0 ); thread maps\_utility::set_blur( var_8, var_2 ); level.player thread maps\_utility::lerp_fov_overtime( var_2, var_1 * var_5 ); wait( var_2 ); thread maps\_utility::set_blur( level.cw_player_underwater_blur, var_2 ); level.player thread maps\_utility::lerp_fov_overtime( var_2, var_1 ); wait( var_2 ); if ( common_scripts\utility::flag( "cw_player_abovewater" ) || common_scripts\utility::flag( "cw_player_out_of_water" ) ) { level.player allowads( 1 ); level notify( "toolong_exit" ); return; } thread delay_with_bubbles( 1, 0, 0, 0, var_0 ); thread maps\_utility::set_blur( var_9, var_3 ); level.player thread maps\_utility::lerp_fov_overtime( var_3, var_1 * var_6 ); wait( var_3 ); thread maps\_utility::set_blur( level.cw_player_underwater_blur, var_3 ); level.player thread maps\_utility::lerp_fov_overtime( var_3, var_1 ); wait( var_3 ); if ( common_scripts\utility::flag( "cw_player_abovewater" ) || common_scripts\utility::flag( "cw_player_out_of_water" ) ) { level.player allowads( 1 ); level notify( "toolong_exit" ); return; } for ( var_11 = 0; var_11 < 2; var_11++ ) { thread delay_with_bubbles( 1, 0, 0, 0, var_0 ); thread maps\_utility::set_blur( var_10, var_4 ); level.player thread maps\_utility::lerp_fov_overtime( var_4, var_1 * var_7 ); wait( var_4 ); thread maps\_utility::set_blur( level.cw_player_underwater_blur, var_4 ); level.player thread maps\_utility::lerp_fov_overtime( var_4, var_1 ); wait( var_4 ); if ( common_scripts\utility::flag( "cw_player_abovewater" ) || common_scripts\utility::flag( "cw_player_out_of_water" ) ) { level.player allowads( 1 ); level notify( "toolong_exit" ); return; } } level.player allowads( 1 ); level notify( "toolong_exit" ); } player_make_bubbles() { setup_player_view_water_fx_source(); playfxontag( common_scripts\utility::getfx( "scuba_bubbles_breath_player" ), level.cw_player_view_bubble_source, "tag_origin" ); } player_stop_bubbles() { killfxontag( common_scripts\utility::getfx( "scuba_bubbles_breath_player" ), level.cw_player_view_bubble_source, "tag_origin" ); } player_deal_underwater_damage( var_0, var_1, var_2, var_3 ) { level endon( var_3 ); level endon( "cw_player_abovewater" ); level endon( "cw_player_out_of_water" ); level.player endon( "death" ); level.cw_player_drowning_damage_count = 0; switch ( maps\_utility::getdifficulty() ) { case "easy": var_2 = 12; break; case "medium": var_2 = 16; break; case "hard": var_2 = 20; break; case "fu": var_2 = 35; break; } for (;;) { if ( gettime() - var_0 >= var_1 ) { if ( !isdefined( level.cw_player_is_drowning ) && level.cw_player_drowning_animate ) thread player_animate_underwater_damage(); player_make_bubbles(); level.cw_player_is_drowning = 1; level.player dodamage( var_2 / level.player.damagemultiplier, level.player.origin ); level.cw_player_drowning_damage_count = level.cw_player_drowning_damage_count + 1; } wait 1; } } player_animate_underwater_damage() { level.player disableweapons(); wait 0.4; while ( isdefined( level.cw_player_is_drowning ) && level.cw_player_is_drowning ) common_scripts\utility::waitframe(); wait 0.4; level.player enableweapons(); } ai_enemy_tracking( var_0, var_1 ) { var_2 = 168; switch ( var_0 ) { case "underwater": var_3 = getaiarray( "axis" ); foreach ( var_5 in var_3 ) { if ( isdefined( var_5.enemy ) && var_5.enemy != level.player ) var_3 = common_scripts\utility::array_remove( var_3, var_5 ); if ( !isdefined( var_5.enemy ) ) var_3 = common_scripts\utility::array_remove( var_3, var_5 ); } if ( var_3.size > 0 ) { foreach ( var_5 in var_3 ) { if ( distance2d( level.player.origin, var_5.origin ) < var_2 ) { if ( var_5 cansee( level.player ) ) { thread ai_enemy_target_underwater( var_2, 5 ); jkuprint( "player underwater but close" ); return; } } } thread ai_enemy_target_underwater( var_2, 1 ); return; } thread player_underwater_set(); break; case "abovewater": thread player_abovewater_set(); break; } } ai_enemy_target_underwater( var_0, var_1 ) { level endon( "cw_player_abovewater" ); level endon( "cw_player_out_of_water" ); level.player.attackeraccuracy = 0.1; wait( var_1 ); level.player.maxvisibledist = 32; level.player thread maps\_utility::set_ignoreme( 1 ); } player_underwater_set() { level.player.attackeraccuracy = 0.1; level.player.maxvisibledist = 32; level.player thread maps\_utility::set_ignoreme( 1 ); } player_abovewater_set() { level endon( "cw_player_underwater" ); wait 1; thread player_abovewater_defaults(); } player_abovewater_defaults() { level endon( "cw_player_underwater" ); level.player.attackeraccuracy = 1; level.player.maxvisibledist = 8192; level.player maps\_utility::set_ignoreme( 0 ); } print_player_speed() { for (;;) { jkuprint( "player max pos speed: " + getdvar( "g_speed" ) ); var_0 = level.player getvelocity(); var_1 = distance( ( var_0[0], var_0[1], 0 ), ( 0, 0, 0 ) ); jkuprint( "curr speed: " + var_1 ); wait 1; } } #using_animtree("generic_human"); init_waistwater_archetype() { if ( !isdefined( anim.archetypes ) || !isdefined( anim.archetypes["waist_water"] ) ) { var_0 = []; var_1 = []; var_2 = []; var_3 = []; var_4 = []; var_1["straight"] = %flood_ai_walk_cqb_f; var_1["straight_twitch"] = [ %flood_ai_walk_cqb_f ]; var_1["move_f"] = %flood_ai_walk_cqb_f; var_1["move_l"] = %flood_ai_walk_left; var_1["move_r"] = %flood_ai_walk_right; var_1["move_b"] = %flood_ai_walk_backward; var_2["0"] = %flood_ai_cqb_walk_turn_2; var_2["1"] = %flood_ai_cqb_walk_turn_1; var_2["2"] = %flood_ai_cqb_walk_turn_4; var_2["3"] = %flood_ai_cqb_walk_turn_7; var_2["5"] = %flood_ai_cqb_walk_turn_9; var_2["6"] = %flood_ai_cqb_walk_turn_6; var_2["7"] = %flood_ai_cqb_walk_turn_3; var_2["8"] = %flood_ai_cqb_walk_turn_2; var_3["cover_left_stand"] = [ %corner_standl_painb, %corner_standl_painc ]; var_3["run_long"] = [ %run_pain_leg, %run_pain_shoulder, %run_pain_stomach_stumble, %run_pain_head, %run_pain_stomach, %run_pain_stumble, %run_pain_stomach_fast, %run_pain_leg_fast ]; var_3["run_medium"] = [ %run_pain_stomach, %run_pain_stumble, %run_pain_stomach_fast, %run_pain_leg_fast ]; var_3["run_short"] = [ %run_pain_stumble, %run_pain_stomach_fast ]; var_3["torso_upper"] = [ %exposed_pain_face ]; var_3["head"] = [ %exposed_pain_face ]; var_3["damage_shield_pain_array"] = [ %stand_exposed_extendedpain_hip, %stand_exposed_extendedpain_shoulderswing, %exposed_pain_face, %exposed_pain_groin ]; var_3["default_extended"] = [ %stand_exposed_extendedpain_hip, %stand_exposed_extendedpain_shoulderswing, %exposed_pain_face, %exposed_pain_groin ]; var_3["torso_lower_extended"] = [ %stand_exposed_extendedpain_hip, %stand_exposed_extendedpain_shoulderswing, %exposed_pain_face, %exposed_pain_groin ]; var_3["leg_extended"] = [ %stand_exposed_extendedpain_hip, %stand_exposed_extendedpain_shoulderswing, %exposed_pain_face, %exposed_pain_groin ]; var_3["foot_extended"] = [ %stand_exposed_extendedpain_hip, %stand_exposed_extendedpain_shoulderswing, %exposed_pain_face, %exposed_pain_groin ]; var_3["torso_upper_extended"] = [ %stand_exposed_extendedpain_hip, %stand_exposed_extendedpain_shoulderswing, %exposed_pain_face, %exposed_pain_groin ]; var_3["head_extended"] = [ %stand_exposed_extendedpain_hip, %stand_exposed_extendedpain_shoulderswing, %exposed_pain_face, %exposed_pain_groin ]; var_3["left_arm_extended"] = [ %stand_exposed_extendedpain_hip, %stand_exposed_extendedpain_shoulderswing, %exposed_pain_face, %exposed_pain_groin ]; var_4["running_forward"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %run_death_facedown, %run_death_roll, %run_death_fallonback, %run_death_flop ]; var_4["stand_lower_body"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %exposed_death_groin, %stand_death_leg ]; var_4["stand_lower_body_extended"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %stand_death_crotch, %stand_death_guts ]; var_4["stand_head"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %exposed_death_headshot, %exposed_death_flop ]; var_4["stand_neck"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %exposed_death_neckgrab ]; var_4["stand_left_shoulder"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %exposed_death_twist, %stand_death_shoulder_spin, %stand_death_shoulderback ]; var_4["stand_torso_upper"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %stand_death_tumbleforward, %stand_death_stumbleforward ]; var_4["stand_torso_upper_extended"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %stand_death_fallside ]; var_4["stand_front_head"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %stand_death_face, %stand_death_headshot_slowfall ]; var_4["stand_front_head_extended"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %stand_death_head_straight_back ]; var_4["stand_front_torso"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %stand_death_tumbleback ]; var_4["stand_front_torso_extended"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %stand_death_chest_stunned ]; var_4["stand_back"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %exposed_death_falltoknees, %exposed_death_falltoknees_02 ]; var_4["stand_default"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %exposed_death_02, %exposed_death_nerve ]; var_4["stand_default_firing"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %exposed_death_firing_02, %exposed_death_firing ]; var_4["stand_backup_default"] = [ %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %flood_ai_death_fallback_01, %flood_ai_death_fallfront_01, %exposed_death ]; var_0["cqb_stand"]["reload_crouchhide"] = [ %cqb_stand_reload_steady ]; var_0["grenade"]["cower_squat"] = %exposed_idle_reactb; var_0["grenade"]["cower_squat_idle"] = %exposed_idle_twitch_v4; var_0["cover_right_stand"]["alert_to_look"] = %flood_ai_corner_standr_alert_2_look; var_0["cover_right_stand"]["look_to_alert"] = %flood_ai_corner_standr_look_2_alert; var_0["cover_right_stand"]["look_to_alert_fast"] = %flood_ai_corner_standr_look_2_alert_fast; var_0["cover_right_stand"]["look_idle"] = %flood_ai_corner_standr_look_idle; var_0["cover_left_stand"]["alert_to_look"] = %flood_ai_corner_standl_alert_2_look; var_0["cover_left_stand"]["look_to_alert"] = %flood_ai_corner_standl_look_2_alert; var_0["cover_left_stand"]["look_to_alert_fast"] = %flood_ai_corner_standl_look_2_alert_fast_v1; var_0["cover_left_stand"]["look_idle"] = %flood_ai_corner_standl_look_idle; var_0["run"] = var_1; var_0["walk"] = var_1; var_0["cqb"] = var_1; var_0["run_turn"] = var_2; var_0["cqb_turn"] = var_2; var_0["pain"] = var_3; var_0["death"] = var_4; maps\_utility::register_archetype( "waist_water", var_0 ); } } init_waistwater_out_archetype() { if ( !isdefined( anim.archetypes ) || !isdefined( anim.archetypes["waist_water_out"] ) ) { var_0 = []; var_1 = []; var_2 = []; var_3 = []; var_4["straight"] = %walk_cqb_f; var_4["move_f"] = %walk_cqb_f; var_4["move_l"] = %walk_left; var_4["move_r"] = %walk_right; var_4["move_b"] = %walk_backward; var_5["straight"] = %run_lowready_f; var_5["move_f"] = %walk_forward; var_5["move_l"] = %walk_left; var_5["move_r"] = %walk_right; var_5["move_b"] = %walk_backward; var_6["straight"] = %run_cqb_f_search_v1; var_6["straight_twitch"] = [ %cqb_run_twitch_c_iw6 ]; var_6["move_f"] = %walk_cqb_f; var_6["move_l"] = %walk_left; var_6["move_r"] = %walk_right; var_6["move_b"] = %walk_backward; var_7["0"] = %run_turn_180; var_7["1"] = %run_turn_l135; var_7["2"] = %run_turn_l90; var_7["3"] = %run_turn_l45; var_7["5"] = %run_turn_r45; var_7["6"] = %run_turn_r90; var_7["7"] = %run_turn_r135; var_7["8"] = %run_turn_180; var_8["0"] = %cqb_walk_turn_2; var_8["1"] = %cqb_walk_turn_1; var_8["2"] = %cqb_walk_turn_4; var_8["3"] = %cqb_walk_turn_7; var_8["5"] = %cqb_walk_turn_9; var_8["6"] = %cqb_walk_turn_6; var_8["7"] = %cqb_walk_turn_3; var_8["8"] = %cqb_walk_turn_2; var_0["cqb_stand"]["reload_crouchhide"] = [ %cqb_stand_reload_knee ]; var_3["cover_left_stand"] = [ %corner_standl_painb, %corner_standl_painc, %corner_standl_paind, %corner_standl_paine ]; var_3["run_long"] = [ %run_pain_leg, %run_pain_shoulder, %run_pain_stomach_stumble, %run_pain_head, %run_pain_fallonknee_02, %run_pain_stomach, %run_pain_stumble, %run_pain_stomach_fast, %run_pain_leg_fast, %run_pain_fall ]; var_3["run_medium"] = [ %run_pain_fallonknee_02, %run_pain_stomach, %run_pain_stumble, %run_pain_stomach_fast, %run_pain_leg_fast, %run_pain_fall ]; var_3["run_short"] = [ %run_pain_fallonknee, %run_pain_fallonknee_03 ]; var_3["torso_upper"] = [ %exposed_pain_face, %stand_exposed_extendedpain_neck ]; var_3["head"] = [ %exposed_pain_face, %stand_exposed_extendedpain_neck ]; var_3["damage_shield_pain_array"] = [ %stand_exposed_extendedpain_chest, %stand_exposed_extendedpain_head_2_crouch, %stand_exposed_extendedpain_hip_2_crouch ]; var_3["default_extended"] = [ %stand_extendedpainc, %stand_exposed_extendedpain_chest ]; var_3["torso_lower_extended"] = [ %stand_exposed_extendedpain_gut, %stand_exposed_extendedpain_stomach, %stand_exposed_extendedpain_hip_2_crouch, %stand_exposed_extendedpain_feet_2_crouch, %stand_exposed_extendedpain_stomach ]; var_3["leg_extended"] = [ %stand_exposed_extendedpain_hip_2_crouch, %stand_exposed_extendedpain_feet_2_crouch, %stand_exposed_extendedpain_stomach ]; var_3["foot_extended"] = [ %stand_exposed_extendedpain_feet_2_crouch ]; var_3["torso_upper_extended"] = [ %stand_exposed_extendedpain_gut, %stand_exposed_extendedpain_stomach, %stand_exposed_extendedpain_head_2_crouch ]; var_3["head_extended"] = [ %stand_exposed_extendedpain_head_2_crouch ]; var_3["left_arm_extended"] = [ %stand_exposed_extendedpain_shoulder_2_crouch ]; var_0["grenade"]["cower_squat"] = %exposed_squat_down_grenade_f; var_0["grenade"]["cower_squat_idle"] = %exposed_squat_idle_grenade_f; var_0["run"] = var_5; var_0["walk"] = var_4; var_0["cqb"] = var_6; var_0["run_turn"] = var_7; var_0["cqb_turn"] = var_8; var_0["pain"] = var_3; maps\_utility::register_archetype( "waist_water_out", var_0 ); } } setup_player_view_water_fx_source() { if ( !isdefined( level.cw_player_view_fx_source ) ) { level.cw_player_view_water_level_fx_source = spawn( "script_model", ( 0, 0, 0 ) ); level.cw_player_view_water_level_fx_source setmodel( "tag_origin" ); level.cw_player_view_water_level_fx_source linktoplayerviewfollowwatersurface( level.player ); level.cw_player_view_fx_source = spawn( "script_model", ( 0, 0, 0 ) ); level.cw_player_view_fx_source setmodel( "tag_origin" ); level.cw_player_view_fx_source linktoplayerviewattachwatersurfacetransitioneffects( level.player ); level.cw_player_view_bubble_source = spawn( "script_model", level.cw_player_view_fx_source.origin + ( 10, 0, -60 ) ); level.cw_player_view_bubble_source setmodel( "tag_origin" ); level.cw_player_view_bubble_source linkto( level.cw_player_view_fx_source ); } } fx_waterwipe_under() { killfxontag( common_scripts\utility::getfx( level.cw_waterwipe_above ), level.cw_player_view_fx_source, "tag_origin" ); level.cw_waterwipe_above_playing = 0; if ( !level.cw_waterwipe_under_playing ) { level.cw_waterwipe_under_playing = 1; playfxontag( common_scripts\utility::getfx( level.cw_waterwipe_under ), level.cw_player_view_fx_source, "tag_origin" ); wait 0.5; level.cw_waterwipe_under_playing = 0; } } fx_waterwipe_above() { killfxontag( common_scripts\utility::getfx( level.cw_waterwipe_under ), level.cw_player_view_fx_source, "tag_origin" ); level.cw_waterwipe_under_playing = 0; if ( !level.cw_waterwipe_above_playing ) { level.cw_waterwipe_above_playing = 1; playfxontag( common_scripts\utility::getfx( level.cw_waterwipe_above ), level.cw_player_view_fx_source, "tag_origin" ); wait 0.5; level.cw_waterwipe_above_playing = 0; } } kill_above_water_fx() { thread maps\flood_fx::fx_create_bokehdots_source(); killfxontag( common_scripts\utility::getfx( "scrnfx_water_splash_med" ), level.cw_player_view_fx_source, "tag_origin" ); killfxontag( common_scripts\utility::getfx( "scrnfx_water_splash_high" ), level.cw_player_view_fx_source, "tag_origin" ); common_scripts\utility::waitframe(); killfxontag( common_scripts\utility::getfx( "scrnfx_water_splash_low" ), level.cw_player_view_fx_source, "tag_origin" ); killfxontag( common_scripts\utility::getfx( "bokehdots_and_waterdrops_heavy" ), level.flood_source_bokehdots, "tag_origin" ); common_scripts\utility::waitframe(); killfxontag( common_scripts\utility::getfx( "waterdrops_20_inst" ), level.flood_source_bokehdots, "tag_origin" ); killfxontag( common_scripts\utility::getfx( "waterdrops_3" ), level.flood_source_bokehdots, "tag_origin" ); common_scripts\utility::waitframe(); killfxontag( common_scripts\utility::getfx( "bokehdots_close" ), level.flood_source_bokehdots, "tag_origin" ); killfxontag( common_scripts\utility::getfx( "bokehdots_far" ), level.flood_source_bokehdots, "tag_origin" ); common_scripts\utility::waitframe(); killfxontag( common_scripts\utility::getfx( "bokehdots_16" ), level.flood_source_bokehdots, "tag_origin" ); killfxontag( common_scripts\utility::getfx( "bokehdots_64" ), level.flood_source_bokehdots, "tag_origin" ); } splash_on_player( var_0 ) { level endon( var_0 ); var_1 = spawn( "script_model", ( 0, 0, 20 ) ); var_1 setmodel( "tag_origin" ); var_2 = spawn( "script_model", ( 0, 0, 20 ) ); var_2 setmodel( "tag_origin" ); for (;;) { if ( common_scripts\utility::flag( "do_bokehdot" ) ) { level.splash_fx = "scrnfx_water_splash_med"; splash_on_player_choose_location(); var_1 linktoplayerview( self, level.splash_tag, ( level.splash_x, level.splash_y, level.splash_z ), level.splash_angles, 1 ); playfxontag( common_scripts\utility::getfx( level.splash_fx ), var_1, "tag_origin" ); wait( randomfloatrange( 0.2, 0.4 ) ); var_1 unlinkfromplayerview( level.player ); splash_on_player_choose_location(); var_2 linktoplayerview( self, level.splash_tag, ( level.splash_x, level.splash_y, level.splash_z ), level.splash_angles, 1 ); playfxontag( common_scripts\utility::getfx( level.splash_fx ), var_2, "tag_origin" ); wait( randomfloatrange( 0.1, 0.3 ) ); var_2 unlinkfromplayerview( level.player ); } common_scripts\utility::waitframe(); } } splash_on_player_choose_location() { var_0 = randomint( 3 ); switch ( var_0 ) { case 0: if ( self getcurrentweapon() == "m9a1" ) { level.splash_tag = "tag_flash"; level.splash_x = randomfloatrange( -10, -1 ); level.splash_y = randomfloatrange( -0.5, 0.5 ); level.splash_z = randomfloatrange( 0.0, 0.5 ); level.splash_angles = ( 0, 0, 0 ); break; } else if ( self getcurrentweapon() == "flood_knife" ) { level.splash_tag = "tag_weapon"; level.splash_x = randomfloatrange( 0.5, 9.5 ); level.splash_y = randomfloatrange( -0.5, 0.5 ); level.splash_z = randomfloatrange( -0.5, 0.5 ); level.splash_angles = ( 90, 0, 0 ); break; } else { level.splash_tag = "tag_flash"; level.splash_x = randomfloatrange( -16, -12 ); level.splash_y = randomfloatrange( -0.5, 0.5 ); level.splash_z = randomfloatrange( -10, -2 ); level.splash_angles = ( 0, 0, 0 ); break; } case 1: level.splash_tag = "j_elbow_le"; level.splash_x = randomfloatrange( 0, 18 ); level.splash_y = randomfloatrange( -1, 1 ); level.splash_z = randomfloatrange( -3, 2 ); level.splash_angles = ( 90, 0, 0 ); break; case 2: level.splash_tag = "j_thumb_le_0"; level.splash_x = randomfloatrange( -2, 2 ); level.splash_y = randomfloatrange( 0.5, 1.5 ); level.splash_z = randomfloatrange( -1, 1 ); level.splash_angles = ( 90, 0, 0 ); break; } } drip_on_player( var_0 ) { level endon( var_0 ); level endon( "cw_player_underwater" ); if ( isdefined( level.drip_ent1 ) ) level.drip_ent1 delete(); if ( isdefined( level.drip_ent2 ) ) level.drip_ent2 delete(); level.splash_fx = "cw_player_drips"; for ( var_1 = 0; var_1 < 8; var_1++ ) { drip_on_player_choose_location(); level.drip_ent1 = spawn( "script_model", ( 0, 0, 20 ) ); level.drip_ent1 setmodel( "tag_origin" ); level.drip_ent1 linktoplayerview( self, level.splash_tag, ( level.splash_x, level.splash_y, level.splash_z ), level.splash_angles, 1 ); playfxontag( common_scripts\utility::getfx( level.splash_fx ), level.drip_ent1, "tag_origin" ); wait( randomfloatrange( 0.25, 0.4 ) ); level.drip_ent1 delete(); drip_on_player_choose_location(); level.drip_ent2 = spawn( "script_model", ( 0, 0, 20 ) ); level.drip_ent2 setmodel( "tag_origin" ); level.drip_ent2 linktoplayerview( self, level.splash_tag, ( level.splash_x, level.splash_y, level.splash_z ), level.splash_angles, 1 ); playfxontag( common_scripts\utility::getfx( level.splash_fx ), level.drip_ent2, "tag_origin" ); wait( randomfloatrange( 0.25, 0.4 ) ); level.drip_ent2 delete(); } } drip_on_player_choose_location() { var_0 = 0; switch ( var_0 ) { case 0: if ( self getcurrentweapon() == "m9a1" ) { level.splash_tag = "tag_flash"; level.splash_x = randomfloatrange( -10, -1 ); level.splash_y = randomfloatrange( -0.5, 0.5 ); level.splash_z = randomfloatrange( 0.0, 0.5 ); level.splash_angles = ( 0, 0, 0 ); break; } else if ( self getcurrentweapon() == "flood_knife" ) { level.splash_tag = "tag_weapon"; level.splash_x = randomfloatrange( 0.5, 9.5 ); level.splash_y = randomfloatrange( -0.5, 0.5 ); level.splash_z = randomfloatrange( -0.5, 0.5 ); level.splash_angles = ( 90, 0, 0 ); break; } else { level.splash_tag = "tag_flash"; level.splash_x = randomfloatrange( -16, -12 ); level.splash_y = randomfloatrange( -0.5, 0.5 ); level.splash_z = randomfloatrange( -10, -2 ); level.splash_angles = ( 0, 0, 0 ); break; } case 1: level.splash_tag = "j_elbow_le"; level.splash_x = randomfloatrange( 0, 18 ); level.splash_y = randomfloatrange( -1, 1 ); level.splash_z = randomfloatrange( -3, 2 ); level.splash_angles = ( 90, 0, 0 ); break; case 2: level.splash_tag = "j_thumb_le_0"; level.splash_x = randomfloatrange( -2, 2 ); level.splash_y = randomfloatrange( 0.5, 1.5 ); level.splash_z = randomfloatrange( -1, 1 ); level.splash_angles = ( 90, 0, 0 ); break; } } audio_underwater_breath_surfacing() { wait 0.2; level.player playsound( "flood_ply_gasp" ); common_scripts\utility::flag_set( "underwater_forced_surface" ); } audio_underwater_breath_bubbles() { level.player playsound( "breath_underwater_bubbles" ); } audio_underwater_choke() { if ( !isdefined( level.underwater_choke_node ) ) { level.underwater_choke_node = spawn( "script_origin", level.player.origin ); level.underwater_choke_node linkto( level.player ); level.underwater_choke_node playsound( "breath_underwater_choke" ); } } audio_stop_choke() { if ( isdefined( level.underwater_choke_node ) ) { if ( !common_scripts\utility::flag( "underwater_forced_surface" ) ) { level.underwater_choke_node stopsounds(); wait 0.1; if ( isdefined( level.underwater_choke_node ) ) level.underwater_choke_node delete(); } else { wait 1; if ( isdefined( level.underwater_choke_node ) ) level.underwater_choke_node stopsounds(); wait 0.1; if ( isdefined( level.underwater_choke_node ) ) level.underwater_choke_node delete(); } } common_scripts\utility::flag_clear( "underwater_forced_surface" ); } audio_wait_to_delete_water_node( var_0 ) { wait 0.2; if ( isdefined( var_0 ) ) var_0 stopsounds(); wait 0.1; if ( isdefined( var_0 ) ) var_0 delete(); } audio_water_level_logic( var_0 ) { if ( var_0 == "submerge" ) { if ( isdefined( level.emerge_node ) ) thread audio_wait_to_delete_water_node( level.emerge_node ); level.submerge_node = spawn( "script_origin", level.player.origin ); level.submerge_node playsound( "flood_plr_water_submerge_ss", "sounddone" ); level.submerge_node waittill( "sounddone" ); if ( isdefined( level.submerge_node ) ) level.submerge_node delete(); } else if ( var_0 == "emerge" ) { thread audio_stop_choke(); if ( isdefined( level.submerge_node ) ) thread audio_wait_to_delete_water_node( level.submerge_node ); level.emerge_node = spawn( "script_origin", level.player.origin ); level.emerge_node playsound( "flood_plr_water_emerge_ss", "sounddone" ); level.emerge_node waittill( "sounddone" ); if ( isdefined( level.emerge_node ) ) level.emerge_node delete(); } } sfx_set_audio_zone_after_deathsdoor() { level.player waittill( "player_has_red_flashing_overlay" ); waittillframeend; for (;;) { if ( !level.player maps\_utility::ent_flag( "player_has_red_flashing_overlay" ) ) { if ( common_scripts\utility::flag( "cw_player_underwater" ) ) break; else break; } wait 0.01; } thread sfx_set_audio_zone_after_deathsdoor(); } fizzle_flashbangs_think() { if ( !isdefined( level.cw_fizzle_flashbangs_thinking ) ) { level.cw_fizzle_flashbangs_thinking = 1; for (;;) { var_0 = getentarray( "grenade", "classname" ); foreach ( var_2 in var_0 ) { if ( !isdefined( var_2.fizzle_tracked ) && var_2.model == "weapon_twist_flashbang" ) { var_2.fizzle_tracked = 1; var_2 thread flashbang_fizzle(); } } common_scripts\utility::waitframe(); } } } flashbang_fizzle() { self endon( "death" ); var_0 = gettime(); while ( gettime() - var_0 < 950 ) common_scripts\utility::waitframe(); foreach ( var_2 in level.cw_trigger_volumes ) { if ( self istouching( var_2 ) ) { playfx( common_scripts\utility::getfx( "cw_fizzle_flashbang" ), self.origin ); self delete(); break; } } } jkuprint( var_0 ) { if ( isdefined( level.jkudebug ) && level.jkudebug ) iprintln( var_0 ); }