891 lines
23 KiB
Plaintext
891 lines
23 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
main()
|
|
{
|
|
maps\mp\mp_zerosub_precache::main();
|
|
maps\createart\mp_zerosub_art::main();
|
|
maps\mp\mp_zerosub_fx::main();
|
|
level.mapcustomcratefunc = ::zerosubcustomcratefunc;
|
|
level.mapcustomkillstreakfunc = ::zerosubcustomkillstreakfunc;
|
|
level.mapcustombotkillstreakfunc = ::zerosubcustombotkillstreakfunc;
|
|
maps\mp\_load::main();
|
|
maps\mp\_compass::setupminimap( "compass_map_mp_zerosub" );
|
|
setdvar( "r_lightGridEnableTweaks", 1 );
|
|
setdvar( "r_lightGridIntensity", 1.33 );
|
|
setdvar( "r_tessellationCutoffFalloffBase", 600 );
|
|
setdvar( "r_tessellationCutoffDistanceBase", 2000 );
|
|
setdvar( "r_tessellationCutoffFalloff", 600 );
|
|
setdvar( "r_tessellationCutoffDistance", 2000 );
|
|
game["attackers"] = "allies";
|
|
game["defenders"] = "axis";
|
|
game["allies_outfit"] = "urban";
|
|
game["axis_outfit"] = "woodland";
|
|
tu_fix_door_trigger_positions();
|
|
maps\mp\gametypes\_door::door_system_init( "door_switch" );
|
|
thread maps\mp\_dlcalienegg::setupeggformap( "alienEasterEgg" );
|
|
thread tvs();
|
|
level thread watchplayerspawn();
|
|
level.zerosub_killstreak = 0;
|
|
level.zerosub_fog_on = 0;
|
|
level.beastallowedindoors = 1;
|
|
level.custom_death_effect = ::playcustomdeathfx;
|
|
level.custom_death_sound = ::playcustomdeathsound;
|
|
setupevents( 1 );
|
|
level thread update_bot_maxsightdistsqrd();
|
|
level thread resetfrostvisionset();
|
|
level thread watchnukevisionset();
|
|
}
|
|
|
|
tu_fix_door_trigger_positions()
|
|
{
|
|
var_0 = [ "slide_door", "garage_door" ];
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_3 = getentarray( var_2, "targetname" );
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( isdefined( var_5.classname ) && var_5.classname == "trigger_multiple" )
|
|
{
|
|
if ( isdefined( var_5.script_parameters ) && issubstr( var_5.script_parameters, "prone_only=true" ) )
|
|
continue;
|
|
|
|
if ( var_2 == "slide_door" )
|
|
{
|
|
var_5.origin = ( var_5.origin[0] + 4, var_5.origin[1], var_5.origin[2] );
|
|
continue;
|
|
}
|
|
|
|
if ( var_2 == "garage_door" )
|
|
var_5.origin = ( var_5.origin[0] - 8.5, var_5.origin[1], var_5.origin[2] );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
resetfrostvisionset()
|
|
{
|
|
level endon( "game_ended" );
|
|
level waittill( "prematch_over" );
|
|
stopfrostfog();
|
|
}
|
|
|
|
watchnukevisionset()
|
|
{
|
|
level endon( "game_ended" );
|
|
level waittill( "nuke_aftermath_post_started" );
|
|
|
|
foreach ( var_1 in level.players )
|
|
var_1 visionsetstage( 1, 1 );
|
|
}
|
|
|
|
update_bot_maxsightdistsqrd()
|
|
{
|
|
var_0 = 700;
|
|
var_1 = var_0 * var_0;
|
|
|
|
while ( !isdefined( level.participants ) )
|
|
common_scripts\utility::waitframe();
|
|
|
|
for (;;)
|
|
{
|
|
foreach ( var_3 in level.participants )
|
|
{
|
|
if ( !isplayer( var_3 ) )
|
|
continue;
|
|
|
|
if ( isbot( var_3 ) )
|
|
{
|
|
if ( !isdefined( var_3.default_maxsightdistsqrd ) )
|
|
var_3.default_maxsightdistsqrd = var_3.maxsightdistsqrd;
|
|
|
|
if ( level.zerosub_fog_on )
|
|
{
|
|
var_3.maxsightdistsqrd = var_1;
|
|
continue;
|
|
}
|
|
|
|
var_3.maxsightdistsqrd = var_3.default_maxsightdistsqrd;
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
precacheitems()
|
|
{
|
|
level.zerosub_fx["beast"]["snowcover_screen"] = level._effect["vfx_yeti_snowcover_scr"];
|
|
level.zerosub_fx["beast"]["blood_explosion"] = level._effect["vfx_blood_explosion"];
|
|
level.zerosub_fx["beast"]["shadow_screen"] = level._effect["vfx_yeti_shadow_scr"];
|
|
level.zerosub_fx["beast"]["snowcover"] = level._effect["vfx_yeti_snowcover"];
|
|
level.zerosub_fx["beast"]["eyeglow"] = level._effect["vfx_yeti_glowing_eye"];
|
|
level.zerosub_fx["breath"]["screen"] = level._effect["vfx_yeti_breath_scr"];
|
|
level.zerosub_fx["frost"]["screen"] = level._effect["vfx_yeti_frost_scr"];
|
|
level.zerosub_fx["snow"]["screen"] = level._effect["vfx_yeti_snow_scr"];
|
|
level.zerosub_fx["snow"]["player"] = level._effect["vfx_playercentric_snowamb"];
|
|
level.zerosub_fx["dust"]["player"] = level._effect["vfx_playercentric_indoors"];
|
|
level.zerosub_fx["button"]["green"] = level._effect["vfx_button_light_green"];
|
|
level.zerosub_fx["button"]["red"] = level._effect["vfx_button_light_red"];
|
|
}
|
|
|
|
setupevents( var_0 )
|
|
{
|
|
precacheitems();
|
|
playenvironmentanims();
|
|
playbuttonfx();
|
|
}
|
|
|
|
playenvironmentanims()
|
|
{
|
|
var_0 = getent( "zerosub_fan_01", "targetname" );
|
|
var_1 = getent( "zerosub_fan_02", "targetname" );
|
|
var_2 = getent( "zerosub_radar_dish", "targetname" );
|
|
var_3 = getentarray( "zerosub_bush_01", "targetname" );
|
|
var_4 = getentarray( "zerosub_tree_02", "targetname" );
|
|
var_5 = getentarray( "zerosub_tree_03", "targetname" );
|
|
var_6 = getentarray( "zerosub_tree_04", "targetname" );
|
|
var_7 = getentarray( "zerosub_tree_05", "targetname" );
|
|
var_8 = getentarray( "zerosub_tree_06", "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 scriptmodelplayanim( "mp_zerosub_fan_spin_1" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 scriptmodelplayanim( "mp_zerosub_fan_spin_2" );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_2 scriptmodelplayanim( "mp_zerosub_radar_spin" );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
foreach ( var_10 in var_3 )
|
|
{
|
|
var_11 = randomfloatrange( 1.0, 3.0 );
|
|
var_10 thread playdelayanim( "mp_zerosub_bush_tree", var_11 );
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
foreach ( var_14 in var_4 )
|
|
{
|
|
var_11 = randomfloatrange( 1.0, 2.0 );
|
|
var_14 thread playdelayanim( "mp_zerosub_spruce_tree_2", var_11 );
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_5 ) )
|
|
{
|
|
foreach ( var_14 in var_5 )
|
|
{
|
|
var_11 = randomfloatrange( 2.0, 3.0 );
|
|
var_14 thread playdelayanim( "mp_zerosub_spruce_tree_3", var_11 );
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_6 ) )
|
|
{
|
|
foreach ( var_14 in var_6 )
|
|
{
|
|
var_11 = randomfloatrange( 4.0, 5.0 );
|
|
var_14 thread playdelayanim( "mp_zerosub_spruce_tree_4", var_11 );
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_7 ) )
|
|
{
|
|
foreach ( var_14 in var_7 )
|
|
{
|
|
var_11 = randomfloatrange( 5.0, 6.0 );
|
|
var_14 thread playdelayanim( "mp_zerosub_dead_pine", var_11 );
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_8 ) )
|
|
{
|
|
foreach ( var_14 in var_8 )
|
|
{
|
|
var_11 = randomfloatrange( 6.0, 7.0 );
|
|
var_14 thread playdelayanim( "mp_zerosub_dead_tree", var_11 );
|
|
}
|
|
}
|
|
}
|
|
|
|
playbuttonfx()
|
|
{
|
|
var_0 = common_scripts\utility::getstructarray( "button_green", "targetname" );
|
|
var_1 = common_scripts\utility::getstructarray( "button_red", "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
var_3.fxobj = spawnfx( level.zerosub_fx["button"]["green"], var_3.origin );
|
|
var_3.fxobj thread delaytriggerfx();
|
|
var_3.fxobj thread cleanupfx();
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
var_3.fxobj = spawnfx( level.zerosub_fx["button"]["red"], var_3.origin );
|
|
var_3.fxobj thread delaytriggerfx();
|
|
var_3.fxobj thread cleanupfx();
|
|
}
|
|
}
|
|
}
|
|
|
|
delaytriggerfx()
|
|
{
|
|
level endon( "game_ended" );
|
|
level waittill( "prematch_over" );
|
|
triggerfx( self );
|
|
}
|
|
|
|
cleanupfx()
|
|
{
|
|
level waittill( "game_ended" );
|
|
self delete();
|
|
}
|
|
|
|
playdelayanim( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
wait( var_1 );
|
|
self scriptmodelplayanim( var_0 );
|
|
}
|
|
|
|
zerosubcustomcratefunc()
|
|
{
|
|
if ( !isdefined( game["player_holding_level_killstrek"] ) )
|
|
game["player_holding_level_killstrek"] = 0;
|
|
|
|
if ( !maps\mp\_utility::allowlevelkillstreaks() || game["player_holding_level_killstrek"] )
|
|
return;
|
|
|
|
maps\mp\killstreaks\_airdrop::addcratetype( "airdrop_assault", "zerosub_level_killstreak", 85, maps\mp\killstreaks\_airdrop::killstreakcratethink, maps\mp\killstreaks\_airdrop::get_friendly_crate_model(), maps\mp\killstreaks\_airdrop::get_enemy_crate_model(), &"MP_ZEROSUB_LEVEL_KILLSTREAK_ACTIVATE" );
|
|
level thread zerosub_killstreak_watch_for_crate();
|
|
}
|
|
|
|
zerosubcustomkillstreakfunc()
|
|
{
|
|
level.killstreakfuncs["zerosub_level_killstreak"] = ::tryusezerosubkillstreak;
|
|
}
|
|
|
|
zerosubcustombotkillstreakfunc()
|
|
{
|
|
maps\mp\bots\_bots_ks::bot_register_killstreak_func( "zerosub_level_killstreak", maps\mp\bots\_bots_ks::bot_killstreak_simple_use );
|
|
}
|
|
|
|
tryusezerosubkillstreak( var_0, var_1 )
|
|
{
|
|
level thread maps\mp\_utility::teamplayercardsplash( "used_zerosub_level_killstreak", self );
|
|
level.zerosub_killstreak_user = self;
|
|
playfrostfog();
|
|
level thread watchplayerconnect();
|
|
level thread watchhostmigration();
|
|
|
|
foreach ( var_3 in level.players )
|
|
{
|
|
var_3 playlocalsound( "mp_zero_monster_spawn" );
|
|
|
|
if ( var_3.team != level.zerosub_killstreak_user.team )
|
|
var_3 thread watchragdoll();
|
|
}
|
|
|
|
level thread watchkillstreakend();
|
|
|
|
if ( level.zerosub_killstreak )
|
|
{
|
|
level thread killrandomtargets();
|
|
game["player_holding_level_killstrek"] = 0;
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
level.killstreakweildweapons["beast_agent_mp"] = "zerosub_level_killstreak";
|
|
return maps\mp\mp_beast_men::tryuseagentkillstreak();
|
|
}
|
|
}
|
|
|
|
zerosub_killstreak_watch_for_crate()
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( "createAirDropCrate", var_0 );
|
|
|
|
if ( isdefined( var_0 ) && isdefined( var_0.cratetype ) && var_0.cratetype == "zerosub_level_killstreak" )
|
|
{
|
|
maps\mp\killstreaks\_airdrop::changecrateweight( "airdrop_assault", "zerosub_level_killstreak", 0 );
|
|
var_1 = wait_for_capture( var_0 );
|
|
|
|
if ( !var_1 )
|
|
{
|
|
maps\mp\killstreaks\_airdrop::changecrateweight( "airdrop_assault", "zerosub_level_killstreak", 85 );
|
|
continue;
|
|
}
|
|
|
|
game["player_holding_level_killstrek"] = 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
wait_for_capture( var_0 )
|
|
{
|
|
var_1 = watch_for_air_drop_death( var_0 );
|
|
return !isdefined( var_1 );
|
|
}
|
|
|
|
watch_for_air_drop_death( var_0 )
|
|
{
|
|
var_0 endon( "captured" );
|
|
var_0 waittill( "death" );
|
|
waittillframeend;
|
|
return 1;
|
|
}
|
|
|
|
watchragdoll()
|
|
{
|
|
self endon( "disconnected" );
|
|
level endon( "game_ended" );
|
|
level endon( "frost_clear" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "start_instant_ragdoll", var_0, var_1 );
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( isbeastman( var_1 ) )
|
|
physicsexplosionsphere( var_1.origin + ( 0, 0, 50 ), 100, 90, 5.0 );
|
|
}
|
|
}
|
|
|
|
watchkillstreakend()
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 = 40;
|
|
|
|
while ( var_0 > 0 )
|
|
{
|
|
var_0 = var_0 - 1;
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 1 );
|
|
}
|
|
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
if ( isdefined( var_2.killedbyyeti ) )
|
|
var_2.killedbyyeti = undefined;
|
|
|
|
if ( isdefined( var_2.isbeinghunted ) )
|
|
var_2.isbeinghunted = undefined;
|
|
|
|
if ( isdefined( var_2.beastkillcam ) )
|
|
var_2.beastkillcam = undefined;
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( level.nukevisioninprogress ) || !level.nukevisioninprogress )
|
|
stopfrostfog();
|
|
|
|
level notify( "frost_clear" );
|
|
}
|
|
|
|
killrandomtargets()
|
|
{
|
|
level endon( "game_ended" );
|
|
level endon( "frost_clear" );
|
|
wait 8;
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = getkilltarget();
|
|
var_1 = randomintrange( 2, 4 );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 thread delaykill( 3 );
|
|
|
|
wait( var_1 );
|
|
}
|
|
}
|
|
|
|
getkilltarget()
|
|
{
|
|
var_0 = [];
|
|
var_1 = 0;
|
|
|
|
foreach ( var_3 in level.players )
|
|
{
|
|
if ( isdefined( var_3 ) && maps\mp\_utility::isreallyalive( var_3 ) && var_3.team != level.zerosub_killstreak_user.team && var_3 isoutside() && !var_3 isbeinghunted() && var_3.avoidkillstreakonspawntimer <= 0 && !var_3 maps\mp\killstreaks\_killstreaks::isusinghelisniper() )
|
|
var_0[var_0.size] = var_3;
|
|
}
|
|
|
|
if ( var_0.size > 0 )
|
|
{
|
|
var_1 = randomint( var_0.size );
|
|
var_0[var_1].isbeinghunted = 1;
|
|
return var_0[var_1];
|
|
}
|
|
}
|
|
|
|
delaykill( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_1 = [];
|
|
var_1[var_1.size] = ( 0, 300, 0 );
|
|
var_1[var_1.size] = ( 300, 0, 0 );
|
|
var_1[var_1.size] = ( 300, 300, 0 );
|
|
var_1[var_1.size] = ( 0, -300, 0 );
|
|
var_1[var_1.size] = ( -300, 0, 0 );
|
|
var_1[var_1.size] = ( -300, -300, 0 );
|
|
var_1[var_1.size] = ( -300, 300, 0 );
|
|
var_1[var_1.size] = ( 300, -300, 0 );
|
|
var_2 = randomint( var_1.size );
|
|
|
|
if ( !maps\mp\_utility::isusingremote() )
|
|
self playlocalsound( "mp_zerosub_monster_approach" );
|
|
|
|
thread playbeastfx();
|
|
var_3 = var_0 - 0.5;
|
|
var_4 = var_0 - var_3;
|
|
wait( var_3 );
|
|
|
|
if ( isdefined( self ) && maps\mp\_utility::isreallyalive( self ) && !maps\mp\_utility::isusingremote() )
|
|
{
|
|
if ( isoutside() && !maps\mp\killstreaks\_killstreaks::isusinghelisniper() )
|
|
{
|
|
var_5 = spawnfxforclient( level.zerosub_fx["beast"]["shadow_screen"], self geteye(), self );
|
|
triggerfx( var_5 );
|
|
var_5 setfxkilldefondelete();
|
|
thread killfxonplayerdeath( var_5 );
|
|
var_6 = spawnfxforclient( level.zerosub_fx["beast"]["snowcover_screen"], self geteye(), self );
|
|
triggerfx( var_6 );
|
|
var_6 setfxkilldefondelete();
|
|
thread killfxonplayerdeath( var_6 );
|
|
}
|
|
}
|
|
|
|
wait( var_4 );
|
|
|
|
if ( isdefined( self ) && maps\mp\_utility::isreallyalive( self ) )
|
|
{
|
|
if ( isoutside() && !maps\mp\killstreaks\_killstreaks::isusinghelisniper() )
|
|
{
|
|
if ( !maps\mp\_utility::isusingremote() )
|
|
self playlocalsound( "mp_zero_plr_monster_attack" );
|
|
|
|
self playsound( "mp_zero_npc_monster_attack" );
|
|
var_7 = self gettagorigin( "j_mainroot" );
|
|
self.customdeath = 1;
|
|
self.killedbyyeti = 1;
|
|
playfx( level.zerosub_fx["beast"]["blood_explosion"], var_7 );
|
|
self dodamage( 10000, self.origin, level.zerosub_killstreak_user, self.beastkillcam, "MOD_CRUSH" );
|
|
physicsexplosionsphere( self.origin + var_1[var_2], 500, 400, 2.0 );
|
|
}
|
|
|
|
self.isbeinghunted = undefined;
|
|
}
|
|
}
|
|
|
|
playbeastfx()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
level endon( "game_ended" );
|
|
var_0 = 100;
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = anglestoforward( self.angles );
|
|
var_2 = self.origin - var_1 * var_0;
|
|
var_3 = spawnfx( level.zerosub_fx["beast"]["snowcover"], var_2 );
|
|
triggerfx( var_3 );
|
|
var_3 thread watchfxlifetime( 2 );
|
|
var_0 = var_0 - 20;
|
|
wait 0.5;
|
|
}
|
|
}
|
|
|
|
playfrostfog()
|
|
{
|
|
level.zerosub_fog_on = 1;
|
|
|
|
foreach ( var_1 in level.players )
|
|
var_1 playfrostfogplayer();
|
|
}
|
|
|
|
playfrostfogplayer( var_0 )
|
|
{
|
|
self visionsetstage( 1, 5 );
|
|
thread playdoorwindowsnowcoverfx( var_0 );
|
|
thread delayplayloopscreenfx( "frost", 4, 5 );
|
|
thread delayplayloopscreenfx( "snow", 1, 5 );
|
|
thread delayplayloopscreenfx( "breath", 3, 6 );
|
|
}
|
|
|
|
stopfrostfog()
|
|
{
|
|
level.zerosub_fog_on = 0;
|
|
|
|
foreach ( var_1 in level.players )
|
|
var_1 visionsetstage( 0, 5 );
|
|
}
|
|
|
|
watchplayerconnect()
|
|
{
|
|
level endon( "game_ended" );
|
|
level endon( "frost_clear" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "connected", var_0 );
|
|
var_0 playfrostfogplayer( 1 );
|
|
var_0 thread startkillstreakwatchers();
|
|
}
|
|
}
|
|
|
|
watchhostmigration()
|
|
{
|
|
level endon( "game_ended" );
|
|
level endon( "frost_clear" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "host_migration_end" );
|
|
|
|
foreach ( var_1 in level.players )
|
|
var_1 visionsetstage( 1, 0.1 );
|
|
}
|
|
}
|
|
|
|
startkillstreakwatchers()
|
|
{
|
|
self endon( "disconnect" );
|
|
level endon( "game_ended" );
|
|
level endon( "frost_clear" );
|
|
self waittill( "spawned_player" );
|
|
|
|
if ( self.team != level.zerosub_killstreak_user.team )
|
|
thread watchragdoll();
|
|
}
|
|
|
|
playdoorwindowsnowcoverfx( var_0 )
|
|
{
|
|
self endon( "disconnect" );
|
|
level endon( "game_ended" );
|
|
level endon( "frost_clear" );
|
|
|
|
if ( !isdefined( var_0 ) || !var_0 )
|
|
wait 5;
|
|
|
|
for (;;)
|
|
{
|
|
if ( !isoutside() )
|
|
common_scripts\utility::exploder( 50, self );
|
|
|
|
wait 0.5;
|
|
}
|
|
}
|
|
|
|
delayplayloopscreenfx( var_0, var_1, var_2 )
|
|
{
|
|
self notify( "playScreenFX_" + var_0 );
|
|
self endon( "playScreenFX_" + var_0 );
|
|
self endon( "disconnect" );
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
level endon( "frost_clear" );
|
|
thread watchplayerspawnfx( var_0, var_1, 0.05 );
|
|
var_3 = 0;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "frost":
|
|
var_3 = 6;
|
|
break;
|
|
case "snow":
|
|
var_3 = 1;
|
|
break;
|
|
case "breath":
|
|
var_3 = 1;
|
|
break;
|
|
}
|
|
|
|
wait( var_2 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( !level.beastallowedindoors && isoutside() || level.beastallowedindoors && isoutside() && var_0 == "snow" || level.beastallowedindoors && var_0 != "snow" )
|
|
{
|
|
var_4 = spawnfxforclient( level.zerosub_fx[var_0]["screen"], self geteye(), self );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
triggerfx( var_4 );
|
|
var_4 setfxkilldefondelete();
|
|
var_4 thread watchfxlifetime( var_3 + 1 );
|
|
}
|
|
}
|
|
|
|
wait( var_1 );
|
|
}
|
|
}
|
|
|
|
isoutside()
|
|
{
|
|
var_0 = 1;
|
|
|
|
if ( !isdefined( level.zerosub_inside_trigger ) )
|
|
level.zerosub_inside_trigger = getent( "mp_zerosub_indoor_triggers", "targetname" );
|
|
|
|
if ( isdefined( level.zerosub_inside_trigger ) )
|
|
{
|
|
if ( self istouching( level.zerosub_inside_trigger ) )
|
|
var_0 = 0;
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
isbeinghunted()
|
|
{
|
|
var_0 = 0;
|
|
|
|
if ( isdefined( self.isbeinghunted ) && self.isbeinghunted )
|
|
var_0 = 1;
|
|
|
|
return var_0;
|
|
}
|
|
|
|
watchfxlifetime( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
wait( var_0 );
|
|
self delete();
|
|
}
|
|
|
|
killfxonplayerdeath( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
common_scripts\utility::waittill_any( "killed_player", "disconnect" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
if ( isarray( var_0 ) )
|
|
{
|
|
foreach ( var_2 in var_0 )
|
|
var_2 delete();
|
|
}
|
|
else
|
|
var_0 delete();
|
|
}
|
|
}
|
|
|
|
watchplayerspawnfx( var_0, var_1, var_2 )
|
|
{
|
|
self endon( "disconnect" );
|
|
level endon( "game_ended" );
|
|
level endon( "frost_clear" );
|
|
self waittill( "spawned_player" );
|
|
thread delayplayloopscreenfx( var_0, var_1, var_2 );
|
|
}
|
|
|
|
watchplayerspawn()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "player_spawned", var_0 );
|
|
|
|
if ( isdefined( var_0.customdeath ) )
|
|
var_0.customdeath = undefined;
|
|
|
|
if ( isdefined( var_0.beastkillcam ) )
|
|
{
|
|
var_0.beastkillcam.origin = var_0.origin + ( 100, 100, 100 );
|
|
var_0.beastkillcam linkto( var_0 );
|
|
}
|
|
|
|
var_0 thread playenvironmentfx();
|
|
}
|
|
}
|
|
|
|
playenvironmentfx()
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = anglestoforward( self.angles );
|
|
|
|
if ( isoutside() )
|
|
{
|
|
var_1 = spawnfxforclient( level.zerosub_fx["snow"]["player"], self.origin + var_0 * 100, self );
|
|
triggerfx( var_1 );
|
|
var_1 thread watchfxlifetime( 2 );
|
|
}
|
|
else
|
|
{
|
|
var_2 = spawnfxforclient( level.zerosub_fx["dust"]["player"], self.origin + var_0 * 100, self );
|
|
triggerfx( var_2 );
|
|
var_2 thread watchfxlifetime( 2 );
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
playcustomdeathfx( var_0, var_1, var_2 )
|
|
{
|
|
if ( isbeastman( var_2 ) )
|
|
{
|
|
var_0.customdeath = 1;
|
|
var_3 = var_0 gettagorigin( "j_mainroot" );
|
|
playfx( level.zerosub_fx["beast"]["blood_explosion"], var_3 );
|
|
}
|
|
}
|
|
|
|
playcustomdeathsound( var_0, var_1, var_2 )
|
|
{
|
|
if ( var_1 == "MOD_MELEE" )
|
|
{
|
|
if ( isbeastman( var_2 ) )
|
|
{
|
|
var_3 = "male";
|
|
|
|
if ( var_0 hasfemalecustomizationmodel() )
|
|
var_3 = "female";
|
|
|
|
var_0 playsound( "knife_death_" + var_3 );
|
|
}
|
|
}
|
|
else
|
|
var_0 maps\mp\_utility::playdeathsound();
|
|
}
|
|
|
|
isbeastman( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
if ( isdefined( var_0 ) && isagent( var_0 ) )
|
|
{
|
|
if ( var_0.agent_type == "beastmen" )
|
|
var_1 = 1;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
tvs()
|
|
{
|
|
foreach ( var_1 in [ "tv_hockey", "tv_hockey_scale1pt5" ] )
|
|
thread tvs_set( var_1 );
|
|
}
|
|
|
|
tvs_set( var_0 )
|
|
{
|
|
if ( !isdefined( level._effect[var_0] ) )
|
|
common_scripts\utility::error( "level._effect[" + var_0 + "] not defined." );
|
|
|
|
var_1 = 3;
|
|
|
|
for ( var_2 = 1; var_2 <= var_1; var_2++ )
|
|
{
|
|
if ( !isdefined( level._effect[var_0][var_2] ) )
|
|
common_scripts\utility::error( "level._effect[" + var_0 + "][" + var_2 + "] not defined." );
|
|
|
|
if ( !isdefined( level.tv_info.effectlength[var_0][var_2] ) )
|
|
{
|
|
common_scripts\utility::error( "level.tv_info.effectLength[" + var_0 + "][" + var_2 + "] not defined." );
|
|
level.tv_info.effectlength[var_0][var_2] = 1;
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( level.tv_info.destroymodel[var_0] ) )
|
|
{
|
|
common_scripts\utility::error( "level.tv_info.destroymodel[" + var_0 + "] not defined." );
|
|
var_3 = undefined;
|
|
}
|
|
else
|
|
var_3 = level.tv_info.destroymodel[var_0];
|
|
|
|
var_4 = getentarray( var_0, "targetname" );
|
|
|
|
if ( var_4.size == 0 )
|
|
{
|
|
|
|
}
|
|
|
|
foreach ( var_6 in var_4 )
|
|
{
|
|
var_6 setcandamage( 1 );
|
|
var_6.ishealthy = 1;
|
|
var_6.destroymodel = var_3;
|
|
var_6.fxtag = level.tv_info.tag[var_0];
|
|
|
|
if ( isdefined( var_6.script_noteworthy ) )
|
|
var_6 thread playtvaudio( var_6.script_noteworthy );
|
|
|
|
var_6 thread tv_death();
|
|
}
|
|
|
|
level.tv_fx_num = var_1;
|
|
|
|
for (;;)
|
|
{
|
|
var_8 = level.tv_fx_num;
|
|
level.tv_fx_num = randomintrange( 1, var_1 );
|
|
|
|
if ( level.tv_fx_num >= var_8 )
|
|
level.tv_fx_num = level.tv_fx_num + 1;
|
|
|
|
var_9 = level._effect[var_0][level.tv_fx_num];
|
|
|
|
foreach ( var_6 in var_4 )
|
|
{
|
|
if ( var_6.ishealthy )
|
|
{
|
|
playfxontag( var_9, var_6, var_6.fxtag );
|
|
var_6.currentfx = var_9;
|
|
}
|
|
}
|
|
|
|
wait( level.tv_info.effectlength[var_0][level.tv_fx_num] );
|
|
}
|
|
}
|
|
|
|
playtvaudio( var_0 )
|
|
{
|
|
var_1 = 15;
|
|
wait( var_1 );
|
|
|
|
if ( var_0 == "tv_hockey_small_room" )
|
|
self playloopsound( "mp_zerosub_tv_small_room" );
|
|
else
|
|
self playloopsound( "mp_zerosub_tv_big_room" );
|
|
}
|
|
|
|
tv_death()
|
|
{
|
|
self endon( "death" );
|
|
self.health = 10000;
|
|
self waittill( "damage" );
|
|
killfxontag( self.currentfx, self, self.fxtag );
|
|
self stoploopsound();
|
|
self setmodel( self.destroymodel );
|
|
playfxontag( level._effect["tv_explode"], self, self.fxtag );
|
|
playsoundatpos( self.origin, "tv_shot_burst" );
|
|
self.ishealthy = 0;
|
|
self setcandamage( 0 );
|
|
}
|