1469 lines
42 KiB
Plaintext
1469 lines
42 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
main()
|
|
{
|
|
maps\mp\mp_prisonbreak_precache::main();
|
|
maps\createart\mp_prisonbreak_art::main();
|
|
maps\mp\mp_prisonbreak_fx::main();
|
|
level thread log_piles();
|
|
maps\mp\_load::main();
|
|
maps\mp\_compass::setupminimap( "compass_map_mp_prisonbreak" );
|
|
setdvar( "r_reactiveMotionWindAmplitudeScale", 0.3 );
|
|
setdvar( "r_reactiveMotionWindFrequencyScale", 0.5 );
|
|
setdvar( "r_lightGridEnableTweaks", 1 );
|
|
setdvar( "r_lightGridIntensity", 1.33 );
|
|
maps\mp\_utility::setdvar_cg_ng( "r_diffusecolorscale", 1.5, 1.8 );
|
|
maps\mp\_utility::setdvar_cg_ng( "r_specularcolorscale", 3.0, 6.0 );
|
|
setdvar( "r_ssaofadedepth", 1089 );
|
|
setdvar( "r_ssaorejectdepth", 1200 );
|
|
|
|
if ( level.ps3 )
|
|
setdvar( "sm_sunShadowScale", "0.6" );
|
|
else if ( level.xenon )
|
|
setdvar( "sm_sunShadowScale", "0.7" );
|
|
|
|
if ( level.ps4 )
|
|
setdvar( "sm_sunSampleSizeNear", 0.33 );
|
|
else if ( level.xb3 )
|
|
setdvar( "sm_sunSampleSizeNear", 0.38 );
|
|
|
|
game["attackers"] = "allies";
|
|
game["defenders"] = "axis";
|
|
|
|
if ( level.gametype == "sd" || level.gametype == "sr" )
|
|
{
|
|
level.srkillcamoverrideposition = [];
|
|
level.srkillcamoverrideposition["_a"] = ( -1158, 952, 1139 );
|
|
level thread setonbombtimerend();
|
|
}
|
|
|
|
level thread tree_bridges();
|
|
level thread falling_rocks();
|
|
level thread initpatchmodels();
|
|
}
|
|
|
|
initpatchmodels()
|
|
{
|
|
var_0 = spawn( "script_model", ( -74, 120, 1038 ) );
|
|
var_0 setmodel( "defaultvehicle" );
|
|
var_0.angles = ( 359.24, 258.983, -8.0374 );
|
|
var_1 = getent( "clip128x128x128", "targetname" );
|
|
var_2 = spawn( "script_model", ( 1112, 1859.07, 949.574 ) );
|
|
var_2.angles = ( 0, 325, 45 );
|
|
var_2 clonebrushmodeltoscriptmodel( var_1 );
|
|
}
|
|
|
|
setonbombtimerend()
|
|
{
|
|
level endon( "game_ended" );
|
|
level.sd_onbombtimerend = ::onbombtimerend;
|
|
level waittill( "bomb_planted", var_0 );
|
|
|
|
if ( var_0 maps\mp\gametypes\_gameobjects::getlabel() == "_b" )
|
|
level.sd_onbombtimerend = undefined;
|
|
}
|
|
|
|
onbombtimerend()
|
|
{
|
|
var_0 = getent( "prisondoor1", "targetname" );
|
|
var_1 = getent( "prisondoor2", "targetname" );
|
|
var_0 rotateyaw( -70, 0.5 );
|
|
var_0 playsound( "scn_prison_gate_right" );
|
|
var_1 rotateyaw( 70, 0.5 );
|
|
var_0 playsound( "scn_prison_gate_left" );
|
|
wait 1;
|
|
level notify( "sd_free_prisoners" );
|
|
}
|
|
|
|
initprisoners()
|
|
{
|
|
initprisonerloadout();
|
|
level.sd_prisonerobjective = getent( "sd_prisonerObjective", "targetname" );
|
|
wait 3;
|
|
level.bot_funcs["think"] = maps\mp\gametypes\_globallogic::blank;
|
|
var_0 = getentarray( "mp_spawn", "classname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
level thread createprisoner( var_2 );
|
|
}
|
|
|
|
createprisoner( var_0 )
|
|
{
|
|
var_1 = addtestclient();
|
|
var_1.pers["isBot"] = 1;
|
|
var_1.equipment_enabled = 1;
|
|
var_1.bot_team = game["attackers"];
|
|
|
|
while ( !isdefined( var_1.pers["team"] ) )
|
|
wait 0.05;
|
|
|
|
var_1 notify( "menuresponse", game["menu_team"], game["attackers"] );
|
|
wait 0.5;
|
|
var_1.pers["gamemodeLoadout"] = level.sd_loadouts["prisoner"];
|
|
var_0.playerspawnpos = var_0.origin;
|
|
var_0.notti = 1;
|
|
var_1.setspawnpoint = var_0;
|
|
var_1 notify( "menuresponse", "changeclass", "gamemode" );
|
|
var_1 thread holdprisoner();
|
|
}
|
|
|
|
holdprisoner()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "disconnect" );
|
|
self waittill( "spawned_player" );
|
|
maps\mp\_utility::gameflagwait( "prematch_done" );
|
|
common_scripts\utility::_disableweapon();
|
|
var_0 = spawn( "script_origin", self.origin );
|
|
self playerlinkto( var_0 );
|
|
level waittill( "sd_free_prisoners" );
|
|
self unlink();
|
|
var_0 delete();
|
|
|
|
for (;;)
|
|
{
|
|
self botclearscriptgoal();
|
|
self botsetscriptgoal( level.sd_prisonerobjective.origin, 64, "critical" );
|
|
var_1 = common_scripts\utility::waittill_any_return( "goal", "bad_path" );
|
|
|
|
if ( var_1 == "goal" )
|
|
break;
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
initprisonerloadout()
|
|
{
|
|
level.sd_loadouts["prisoner"]["loadoutPrimary"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutPrimaryAttachment"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutPrimaryAttachment2"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutPrimaryBuff"] = "specialty_null";
|
|
level.sd_loadouts["prisoner"]["loadoutPrimaryCamo"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutPrimaryReticle"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutSecondary"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutSecondaryAttachment"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutSecondaryAttachment2"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutSecondaryBuff"] = "specialty_null";
|
|
level.sd_loadouts["prisoner"]["loadoutSecondaryCamo"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutSecondaryReticle"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutEquipment"] = "specialty_null";
|
|
level.sd_loadouts["prisoner"]["loadoutOffhand"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutPerk1"] = "specialty_null";
|
|
level.sd_loadouts["prisoner"]["loadoutPerk2"] = "specialty_null";
|
|
level.sd_loadouts["prisoner"]["loadoutPerk3"] = "specialty_null";
|
|
level.sd_loadouts["prisoner"]["loadoutStreakType"] = "assault";
|
|
level.sd_loadouts["prisoner"]["loadoutKillstreak1"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutKillstreak2"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutKillstreak3"] = "none";
|
|
level.sd_loadouts["prisoner"]["loadoutDeathstreak"] = "specialty_null";
|
|
level.sd_loadouts["prisoner"]["loadoutJuggernaut"] = 0;
|
|
}
|
|
|
|
initinsertionvehicles()
|
|
{
|
|
level.sd_insertionvehicles = [];
|
|
var_0 = getentarray( "sd_vehStart", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_3 = spawn( "script_model", var_2.origin );
|
|
var_3.origin = var_2.origin;
|
|
var_3.angles = var_2.angles;
|
|
var_3 setmodel( "vehicle_hummer_open_top_noturret" );
|
|
var_4 = [];
|
|
var_5 = getent( var_2.target, "targetname" );
|
|
|
|
while ( isdefined( var_5 ) )
|
|
{
|
|
var_4[var_4.size] = var_5;
|
|
|
|
if ( isdefined( var_5.target ) )
|
|
{
|
|
var_5 = getent( var_5.target, "targetname" );
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
level.sd_insertionvehicles[var_2.script_count] = spawnstruct();
|
|
level.sd_insertionvehicles[var_2.script_count].index = var_2.script_count;
|
|
level.sd_insertionvehicles[var_2.script_count].vehicle = var_3;
|
|
level.sd_insertionvehicles[var_2.script_count].start = var_2;
|
|
level.sd_insertionvehicles[var_2.script_count].path = var_4;
|
|
level.sd_insertionvehicles[var_2.script_count].driver = 0;
|
|
level.sd_insertionvehicles[var_2.script_count].passenger = 0;
|
|
level.sd_insertionvehicles[var_2.script_count].arrived = 0;
|
|
}
|
|
|
|
level.sd_insertionstarted = undefined;
|
|
}
|
|
|
|
onattackerspawn()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "player_spawned", var_0 );
|
|
|
|
if ( game["state"] != "postgame" && var_0.pers["team"] == game["attackers"] )
|
|
var_0 thread attackerride();
|
|
}
|
|
}
|
|
|
|
attackerride()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
common_scripts\utility::_disableweapon();
|
|
|
|
if ( !isdefined( level.sd_insertionstarted ) )
|
|
{
|
|
level.sd_insertionstarted = 1;
|
|
level thread startinsertionvehicles();
|
|
}
|
|
|
|
var_0 = -1;
|
|
var_1 = 0;
|
|
var_2 = "";
|
|
var_3 = undefined;
|
|
|
|
for ( var_4 = 0; var_4 < level.sd_insertionvehicles.size; var_4++ )
|
|
{
|
|
var_3 = level.sd_insertionvehicles[var_4].vehicle;
|
|
|
|
if ( !level.sd_insertionvehicles[var_4].driver )
|
|
{
|
|
var_0 = var_4;
|
|
var_1 = 1;
|
|
level.sd_insertionvehicles[var_4].driver = 1;
|
|
self playerlinktodelta( var_3, "tag_driver", 1, 30, 30, 30, 30, 1 );
|
|
self setstance( "crouch" );
|
|
|
|
if ( var_4 == 2 )
|
|
var_2 = "tag_walker3";
|
|
else
|
|
var_2 = "tag_walker0";
|
|
|
|
break;
|
|
}
|
|
else if ( !level.sd_insertionvehicles[var_4].passenger )
|
|
{
|
|
var_0 = var_4;
|
|
level.sd_insertionvehicles[var_4].passenger = 1;
|
|
self playerlinktodelta( var_3, "tag_passenger", 1, 30, 30, 30, 30, 1 );
|
|
self setstance( "crouch" );
|
|
|
|
if ( var_4 == 2 )
|
|
var_2 = "tag_walker1";
|
|
else
|
|
var_2 = "tag_walker2";
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( var_0 < 0 )
|
|
{
|
|
|
|
}
|
|
|
|
wait 0.05;
|
|
|
|
while ( !level.sd_insertionvehicles[var_0].arrived )
|
|
wait 0.05;
|
|
|
|
self unlink();
|
|
self setstance( "stand" );
|
|
var_5 = spawn( "script_model", self.origin );
|
|
var_5.origin = self.origin;
|
|
var_5.angles = self.angles;
|
|
var_5 setmodel( "tag_player" );
|
|
self playerlinktodelta( var_5, "tag_player", 1, 30, 30, 30, 30, 1 );
|
|
var_6 = var_3 gettagorigin( var_2 );
|
|
var_7 = var_3 gettagangles( var_2 );
|
|
var_8 = distance( var_5.origin, var_6 ) / 100;
|
|
var_5 moveto( var_6, var_8, var_8 / 2, var_8 / 2 );
|
|
var_5 rotateto( var_7, var_8, var_8 / 2, var_8 / 2 );
|
|
wait( var_8 );
|
|
self unlink();
|
|
var_5 delete();
|
|
common_scripts\utility::_enableweapon();
|
|
|
|
if ( var_1 )
|
|
level.sd_insertionvehicles[var_0].driver = 0;
|
|
else
|
|
level.sd_insertionvehicles[var_0].passenger = 0;
|
|
}
|
|
|
|
startinsertionvehicles()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for ( var_0 = 0; var_0 < level.sd_insertionvehicles.size; var_0++ )
|
|
{
|
|
level thread vehiclemove( var_0 );
|
|
wait 0.3;
|
|
}
|
|
}
|
|
|
|
vehiclemove( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
maps\mp\_utility::gameflagwait( "prematch_done" );
|
|
var_1 = level.sd_insertionvehicles[var_0].vehicle;
|
|
var_2 = level.sd_insertionvehicles[var_0].path;
|
|
|
|
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
|
|
{
|
|
var_4 = distance( var_1.origin, var_2[var_3].origin ) / 550;
|
|
var_5 = 0;
|
|
var_6 = 0;
|
|
|
|
if ( var_3 == 0 )
|
|
var_5 = var_4 / 2;
|
|
else if ( var_3 == var_2.size - 1 )
|
|
var_6 = var_4 / 2;
|
|
|
|
var_1 moveto( var_2[var_3].origin, var_4, var_5, var_6 );
|
|
var_1 rotateto( var_2[var_3].angles, var_4 );
|
|
wait( var_4 );
|
|
}
|
|
|
|
level.sd_insertionvehicles[var_0].arrived = 1;
|
|
}
|
|
|
|
normalize_angles_180( var_0 )
|
|
{
|
|
return ( angle_180( var_0[0] ), angle_180( var_0[1] ), angle_180( var_0[2] ) );
|
|
}
|
|
|
|
angle_180( var_0 )
|
|
{
|
|
while ( var_0 > 180 )
|
|
var_0 = var_0 - 360;
|
|
|
|
while ( var_0 < -180 )
|
|
var_0 = var_0 + 360;
|
|
|
|
return var_0;
|
|
}
|
|
|
|
is_explosive( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return 0;
|
|
|
|
var_0 = tolower( var_0 );
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "splash":
|
|
case "mod_explosive":
|
|
case "mod_projectile_splash":
|
|
case "mod_grenade_splash":
|
|
return 1;
|
|
default:
|
|
return 0;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
trap_init( var_0 )
|
|
{
|
|
if ( getdvar( "r_reflectionProbeGenerate" ) == "1" )
|
|
return;
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 0;
|
|
|
|
var_1 = getentarray( self.target, "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( !isdefined( var_3.script_noteworthy ) )
|
|
continue;
|
|
|
|
switch ( var_3.script_noteworthy )
|
|
{
|
|
case "activate_trigger":
|
|
if ( var_0 )
|
|
var_3 delete();
|
|
else
|
|
self.activate_trigger = var_3;
|
|
|
|
break;
|
|
case "use_model":
|
|
if ( var_0 )
|
|
var_3 delete();
|
|
else
|
|
self.use_model = var_3;
|
|
|
|
break;
|
|
case "use_trigger":
|
|
if ( var_0 )
|
|
var_3 delete();
|
|
else
|
|
self.use_trigger = var_3;
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self.activate_trigger ) && isdefined( self.use_model ) && isdefined( self.use_trigger ) )
|
|
{
|
|
thread trap_use_watch();
|
|
thread trap_delete_visuals();
|
|
}
|
|
}
|
|
|
|
trap_delete_visuals()
|
|
{
|
|
self waittill( "trap_activated" );
|
|
|
|
foreach ( var_1 in self.useobject.visuals )
|
|
var_1 delete();
|
|
|
|
self.useobject.visuals = [];
|
|
trap_set_can_use( 0 );
|
|
}
|
|
|
|
trap_use_watch()
|
|
{
|
|
wait 0.05;
|
|
self.useobject = maps\mp\gametypes\_gameobjects::createuseobject( "neutral", self.use_trigger, [ self.use_model ], ( 0, 0, 0 ) );
|
|
self.useobject.parent = self;
|
|
trap_set_can_use( 1 );
|
|
self.useobject maps\mp\gametypes\_gameobjects::setusetime( 2.5 );
|
|
self.useobject maps\mp\gametypes\_gameobjects::setusetext( &"MP_SETTING_TRAP" );
|
|
self.useobject maps\mp\gametypes\_gameobjects::setusehinttext( &"MP_SET_TRAP" );
|
|
self.useobject maps\mp\gametypes\_gameobjects::setvisibleteam( "any" );
|
|
self.useobject.onuse = ::trap_onuse;
|
|
}
|
|
|
|
trap_set_can_use( var_0 )
|
|
{
|
|
if ( var_0 )
|
|
{
|
|
if ( isdefined( self.use_icon_angles ) && isdefined( self.use_icon_origin ) )
|
|
thread hand_icon( "use", self.use_icon_origin, self.use_icon_angles, "trap_triggered" );
|
|
|
|
if ( isdefined( self.useobject ) && isdefined( self.useobject.visuals ) )
|
|
{
|
|
foreach ( var_2 in self.useobject.visuals )
|
|
var_2 hide();
|
|
|
|
self.useobject maps\mp\gametypes\_gameobjects::allowuse( "any" );
|
|
}
|
|
}
|
|
else if ( isdefined( self.useobject ) && isdefined( self.useobject.visuals ) )
|
|
{
|
|
foreach ( var_2 in self.useobject.visuals )
|
|
{
|
|
var_2 show();
|
|
var_2 setmodel( "mil_semtex_belt" );
|
|
}
|
|
|
|
self.useobject maps\mp\gametypes\_gameobjects::allowuse( "none" );
|
|
}
|
|
}
|
|
|
|
trap_onuse( var_0 )
|
|
{
|
|
self.parent trap_set_can_use( 0 );
|
|
self.parent notify( "trap_triggered" );
|
|
self.parent.owner = var_0;
|
|
self.parent thread trap_owner_watch();
|
|
self.parent thread trap_active_watch();
|
|
}
|
|
|
|
trap_owner_watch()
|
|
{
|
|
self endon( "trap_activated" );
|
|
self.owner waittill( "death" );
|
|
trap_set_can_use( 1 );
|
|
}
|
|
|
|
trap_active_watch()
|
|
{
|
|
self endon( "trap_activated" );
|
|
self.owner endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self.activate_trigger waittill( "trigger", var_0 );
|
|
|
|
if ( trap_can_player_trigger( var_0 ) )
|
|
break;
|
|
}
|
|
|
|
self notify( "trap_activated" );
|
|
}
|
|
|
|
trap_can_player_trigger( var_0 )
|
|
{
|
|
if ( !isdefined( self.owner ) )
|
|
return 0;
|
|
|
|
if ( isagent( var_0 ) && isdefined( var_0.owner ) && isdefined( self.owner ) && var_0.owner == self.owner )
|
|
return 0;
|
|
|
|
if ( !level.teambased )
|
|
return var_0 != self.owner;
|
|
|
|
if ( var_0.team != self.owner.team )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
tree_bridges()
|
|
{
|
|
precachempanim( "mp_prisonbreak_tree_fall" );
|
|
var_0 = common_scripts\utility::getstructarray( "tree_bridge", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::tree_bridge_init );
|
|
}
|
|
|
|
tree_bridge_init()
|
|
{
|
|
self.tree = undefined;
|
|
self.clip_up = undefined;
|
|
self.clip_down = undefined;
|
|
self.clip_up_delete = undefined;
|
|
self.linked_ents = [];
|
|
var_0 = getentarray( self.target, "targetname" );
|
|
var_1 = common_scripts\utility::getstructarray( self.target, "targetname" );
|
|
var_0 = common_scripts\utility::array_combine( var_0, var_1 );
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( !isdefined( var_3.script_noteworthy ) )
|
|
continue;
|
|
|
|
switch ( var_3.script_noteworthy )
|
|
{
|
|
case "the_tree":
|
|
self.tree = var_3;
|
|
thread tree_bridge_damage_watch( var_3, 0 );
|
|
break;
|
|
case "clip_up_delete":
|
|
self.clip_up_delete = var_3;
|
|
break;
|
|
case "clip_up":
|
|
self.clip_up = var_3;
|
|
self.linked_ents[self.linked_ents.size] = var_3;
|
|
break;
|
|
case "clip_down":
|
|
self.clip_down = var_3;
|
|
self.clip_down common_scripts\utility::trigger_off();
|
|
break;
|
|
case "link":
|
|
self.linked_ents[self.linked_ents.size] = var_3;
|
|
break;
|
|
case "delete":
|
|
self.decal = var_3;
|
|
break;
|
|
case "killcam":
|
|
self.killcament = spawn( "script_model", var_3.origin );
|
|
self.killcament setmodel( "tag_origin" );
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
self.animated_prop = spawn( "script_model", self.tree.origin );
|
|
self.animated_prop setmodel( "generic_prop_raven" );
|
|
self.animated_prop.angles = self.tree.angles;
|
|
self.tree linkto( self.animated_prop, "j_prop_2" );
|
|
|
|
foreach ( var_6 in self.linked_ents )
|
|
var_6 linkto( self.tree );
|
|
|
|
thread tree_bridge_run();
|
|
}
|
|
|
|
tree_bridge_damage_watch( var_0, var_1 )
|
|
{
|
|
self endon( "tree_down" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
var_2 = 1000000;
|
|
var_3 = 100;
|
|
var_0.health = var_2;
|
|
var_0 setcandamage( 1 );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "damage", var_4, var_5, var_6, var_7, var_8 );
|
|
var_5 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "tree" );
|
|
|
|
if ( var_0.health < var_2 - var_3 )
|
|
break;
|
|
}
|
|
|
|
var_0 setcandamage( 0 );
|
|
|
|
if ( isdefined( self.tree ) )
|
|
self.tree playsound( "scn_prison_tree_fall" );
|
|
|
|
if ( var_1 )
|
|
var_0 delete();
|
|
|
|
self.attacker = var_5;
|
|
self notify( "tree_down" );
|
|
}
|
|
|
|
#using_animtree("animated_props");
|
|
|
|
tree_bridge_run()
|
|
{
|
|
self waittill( "tree_down" );
|
|
|
|
if ( isdefined( self.decal ) )
|
|
self.decal delete();
|
|
|
|
if ( isdefined( self.clip_up_delete ) )
|
|
self.clip_up_delete delete();
|
|
|
|
self.clip_up connectpaths();
|
|
self.tree maps\mp\_movers::notify_moving_platform_invalid();
|
|
self.animated_prop scriptmodelplayanimdeltamotion( "mp_prisonbreak_tree_fall" );
|
|
var_0 = getanimlength( %mp_prisonbreak_tree_fall );
|
|
var_1 = var_0 - 0.3;
|
|
var_2 = getent( "tree_impact_sound_origin", "targetname" );
|
|
var_2 maps\mp\_utility::delaythread( var_1, ::playsound_wrapper, "scn_prison_tree_impact" );
|
|
wait( var_1 );
|
|
self.clip_down common_scripts\utility::trigger_on();
|
|
self.clip_down dontinterpolate();
|
|
self.clip_up maps\mp\_movers::notify_moving_platform_invalid();
|
|
self.clip_up delete();
|
|
|
|
foreach ( var_4 in level.characters )
|
|
{
|
|
if ( var_4 istouching( self.clip_down ) && isalive( var_4 ) )
|
|
{
|
|
if ( isdefined( self.attacker ) && isdefined( self.attacker.team ) && self.attacker.team == var_4.team )
|
|
{
|
|
var_4 maps\mp\_movers::mover_suicide();
|
|
continue;
|
|
}
|
|
|
|
self.clip_down.killcament = self.killcament;
|
|
var_4 dodamage( var_4.health + 500, var_4.origin, self.attacker, self.clip_down, "MOD_CRUSH" );
|
|
}
|
|
}
|
|
|
|
foreach ( var_7 in level.remote_uav )
|
|
{
|
|
if ( var_7 istouching( self.clip_down ) )
|
|
var_7 notify( "death" );
|
|
}
|
|
|
|
var_9 = getent( "tree_base_clip", "targetname" );
|
|
|
|
if ( isdefined( var_9 ) )
|
|
var_9 delete();
|
|
}
|
|
|
|
playsound_wrapper( var_0 )
|
|
{
|
|
self playsound( var_0 );
|
|
}
|
|
|
|
log_piles()
|
|
{
|
|
if ( getdvar( "r_reflectionProbeGenerate" ) == "1" )
|
|
return;
|
|
|
|
log_piles_precache();
|
|
wait 0.05;
|
|
var_0 = common_scripts\utility::getstructarray( "logpile", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::log_pile_init );
|
|
}
|
|
|
|
log_piles_precache()
|
|
{
|
|
level.log_visual_link_joints = [];
|
|
level.log_visual_link_joints["ten_log_roll"] = "j_log_5";
|
|
level.log_anim_lengths = [];
|
|
level.log_anim_lengths["ten_log_roll"] = getanimlength( %mp_prisonbreak_log_roll );
|
|
level.log_anims = [];
|
|
level.log_anims["ten_log_roll"] = "mp_prisonbreak_log_roll";
|
|
|
|
foreach ( var_2, var_1 in level.log_anims )
|
|
precachempanim( var_1 );
|
|
}
|
|
|
|
log_pile_init()
|
|
{
|
|
self.logs = [];
|
|
self.animated_logs = [];
|
|
self.log_supports = [];
|
|
self.log_supports_broken = [];
|
|
self.clip_delete = [];
|
|
self.clip_show = [];
|
|
self.clip_move = [];
|
|
self.kill_trigger = undefined;
|
|
self.kill_trigger_linked = [];
|
|
var_0 = undefined;
|
|
var_1 = undefined;
|
|
|
|
if ( !isdefined( self.angles ) )
|
|
self.angles = ( 0, 0, 0 );
|
|
|
|
var_2 = getentarray( self.target, "targetname" );
|
|
var_2 = common_scripts\utility::array_combine( var_2, common_scripts\utility::getstructarray( self.target, "targetname" ) );
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
if ( !isdefined( var_4.script_noteworthy ) )
|
|
continue;
|
|
|
|
switch ( var_4.script_noteworthy )
|
|
{
|
|
case "log_with_use_visuals":
|
|
var_0 = var_4;
|
|
case "log":
|
|
self.logs[self.logs.size] = var_4;
|
|
|
|
if ( isdefined( var_4.target ) )
|
|
var_4.endpos = common_scripts\utility::getstruct( var_4.target, "targetname" );
|
|
|
|
break;
|
|
case "animated_log_use_visuals":
|
|
var_0 = var_4;
|
|
|
|
if ( isdefined( var_4.script_animation ) )
|
|
var_1 = level.log_visual_link_joints[var_4.script_animation];
|
|
|
|
thread log_pile_support_damage_watch( var_4 );
|
|
case "animated_log":
|
|
if ( isdefined( var_4.script_animation ) && isdefined( level.log_anims[var_4.script_animation] ) )
|
|
self.animated_logs[self.animated_logs.size] = var_4;
|
|
|
|
break;
|
|
case "log_support":
|
|
self.log_supports[self.log_supports.size] = var_4;
|
|
thread log_pile_support_damage_watch( var_4 );
|
|
break;
|
|
case "log_support_broken":
|
|
self.log_supports_broken[self.log_supports_broken.size] = var_4;
|
|
var_4 hide();
|
|
break;
|
|
case "clip_delete":
|
|
self.clip_delete[self.clip_delete.size] = var_4;
|
|
break;
|
|
case "clip_move":
|
|
if ( isdefined( var_4.target ) )
|
|
{
|
|
var_4.end_pos = common_scripts\utility::getstruct( var_4.target, "targetname" );
|
|
|
|
if ( isdefined( var_4.end_pos ) && isdefined( var_4.end_pos.target ) )
|
|
{
|
|
var_4.start_pos = common_scripts\utility::getstruct( var_4.end_pos.target, "targetname" );
|
|
|
|
if ( isdefined( var_4.start_pos ) )
|
|
{
|
|
var_4.move_delta = var_4.end_pos.origin - var_4.start_pos.origin;
|
|
|
|
if ( var_4 is_dynamic_path() )
|
|
var_4 connectpaths();
|
|
|
|
var_4.origin = var_4.origin - var_4.move_delta;
|
|
self.clip_move[self.clip_move.size] = var_4;
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
case "clip_show":
|
|
self.clip_show[self.clip_show.size] = var_4;
|
|
var_4 hide();
|
|
var_4 notsolid();
|
|
break;
|
|
case "kill_trigger":
|
|
self.kill_trigger = var_4;
|
|
|
|
if ( isdefined( self.kill_trigger.target ) )
|
|
{
|
|
self.kill_trigger.start_pos = common_scripts\utility::getstruct( self.kill_trigger.target, "targetname" );
|
|
|
|
if ( isdefined( self.kill_trigger.start_pos ) && isdefined( self.kill_trigger.start_pos.target ) )
|
|
{
|
|
self.kill_trigger.end_pos = common_scripts\utility::getstruct( self.kill_trigger.start_pos.target, "targetname" );
|
|
|
|
if ( isdefined( self.kill_trigger.end_pos ) )
|
|
{
|
|
self.kill_trigger.script_mover = spawn( "script_model", self.kill_trigger.start_pos.origin );
|
|
self.kill_trigger.script_mover setmodel( "tag_origin" );
|
|
self.kill_trigger enablelinkto();
|
|
self.kill_trigger linkto( self.kill_trigger.script_mover, "tag_origin" );
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
case "kill_trigger_link":
|
|
self.kill_trigger_linked[self.kill_trigger_linked.size] = var_4;
|
|
break;
|
|
case "use_icon":
|
|
self.use_icon_origin = var_4.origin;
|
|
self.use_icon_angles = var_4.angles;
|
|
break;
|
|
case "killcam":
|
|
self.killcament = spawn( "script_model", var_4.origin );
|
|
self.killcament setmodel( "tag_origin" );
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self.kill_trigger ) && isdefined( self.kill_trigger.script_mover ) )
|
|
{
|
|
if ( isdefined( self.killcament ) )
|
|
self.kill_trigger.script_mover.killcament = self.killcament;
|
|
else
|
|
self.kill_trigger.script_mover.killcament = self.kill_trigger.script_mover;
|
|
}
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
foreach ( var_7 in self.kill_trigger_linked )
|
|
{
|
|
var_7.killcament = self.killcament;
|
|
var_7 enablelinkto();
|
|
var_7.no_moving_platfrom_unlink = 1;
|
|
var_7 linkto( var_0, var_7.script_parameters );
|
|
}
|
|
}
|
|
|
|
self.nodes = getnodearray( self.target, "targetname" );
|
|
|
|
foreach ( var_10 in self.nodes )
|
|
var_10 disconnectnode();
|
|
|
|
if ( ( self.logs.size || self.animated_logs.size ) && self.log_supports.size > 0 )
|
|
{
|
|
thread log_pile_run();
|
|
thread trap_init();
|
|
}
|
|
|
|
if ( isdefined( var_0 ) && isdefined( self.use_model ) )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
self.use_model linkto( var_0, var_1 );
|
|
else
|
|
self.use_model linkto( var_0 );
|
|
}
|
|
}
|
|
|
|
log_pile_support_damage_watch( var_0 )
|
|
{
|
|
self endon( "trap_activated" );
|
|
var_1 = 1000000;
|
|
var_0.health = var_1;
|
|
var_0 setcandamage( 1 );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "damage", var_2, var_3, var_4, var_5, var_6 );
|
|
var_0.health = var_1;
|
|
|
|
if ( is_explosive( var_6 ) && var_2 >= 10 )
|
|
{
|
|
self.owner = var_3;
|
|
break;
|
|
}
|
|
}
|
|
|
|
var_0 setcandamage( 0 );
|
|
self notify( "trap_activated" );
|
|
}
|
|
|
|
log_pile_run()
|
|
{
|
|
self waittill( "trap_activated" );
|
|
trap_set_can_use( 0 );
|
|
var_0 = 2.3;
|
|
thread log_pile_kill_trigger( self.kill_trigger );
|
|
|
|
foreach ( var_2 in self.kill_trigger_linked )
|
|
thread log_pile_kill_trigger( var_2 );
|
|
|
|
thread log_pile_kill_trigger_end( var_0 );
|
|
common_scripts\utility::array_thread( self.log_supports, maps\mp\_movers::notify_moving_platform_invalid );
|
|
common_scripts\utility::array_call( self.log_supports, ::delete );
|
|
common_scripts\utility::array_call( self.log_supports_broken, ::show );
|
|
common_scripts\utility::array_thread( self.clip_delete, maps\mp\_movers::notify_moving_platform_invalid );
|
|
common_scripts\utility::array_call( self.clip_delete, ::delete );
|
|
common_scripts\utility::array_call( self.clip_show, ::show );
|
|
common_scripts\utility::array_call( self.clip_show, ::solid );
|
|
|
|
foreach ( var_5 in self.clip_move )
|
|
{
|
|
if ( var_5 is_dynamic_path() )
|
|
var_5 common_scripts\utility::delaycall( var_0, ::disconnectpaths );
|
|
|
|
var_5 thread log_pile_clip_move( 1.5, 0.5 );
|
|
}
|
|
|
|
if ( isdefined( self.kill_trigger ) && isdefined( self.kill_trigger.script_mover ) )
|
|
self.kill_trigger.script_mover moveto( self.kill_trigger.end_pos.origin, var_0, var_0 * 0.5, 0 );
|
|
|
|
foreach ( var_8 in self.logs )
|
|
{
|
|
if ( isdefined( var_8.endpos ) )
|
|
{
|
|
var_8 moveto( var_8.endpos.origin, var_0, var_0 * 0.5, 0 );
|
|
var_9 = var_8.endpos.angles - var_8.angles;
|
|
var_9 = normalize_angles_180( var_9 );
|
|
var_9 = var_9 + ( 1440, 0, 0 );
|
|
var_10 = var_9 / var_0;
|
|
var_8 rotatevelocity( var_10, var_0, var_0 * 0.5, 0 );
|
|
}
|
|
}
|
|
|
|
foreach ( var_13 in self.animated_logs )
|
|
{
|
|
var_13 maps\mp\_movers::notify_moving_platform_invalid();
|
|
var_13 scriptmodelplayanimdeltamotion( level.log_anims[var_13.script_animation] );
|
|
var_14 = ( -20000, 0, 9000 );
|
|
var_15 = ( 0, 0, 50 );
|
|
var_16 = getent( "care_package_delete_volume", "targetname" );
|
|
maps\mp\killstreaks\_airdrop::throw_linked_care_packages( var_13, var_15, var_14, var_16 );
|
|
var_17 = level.log_anim_lengths[var_13.script_animation];
|
|
|
|
if ( isdefined( var_17 ) && var_17 > var_0 )
|
|
var_0 = var_17;
|
|
}
|
|
|
|
if ( isdefined( self.animated_logs ) && self.animated_logs.size > 0 )
|
|
self.animated_logs[0] playsoundonmovingent( "scn_prison_logtrap_logs_roll" );
|
|
|
|
wait( var_0 );
|
|
self notify( "log_roll_done" );
|
|
wait 0.05;
|
|
|
|
foreach ( var_20 in self.nodes )
|
|
var_20 connectnode();
|
|
}
|
|
|
|
log_pile_clip_move( var_0, var_1 )
|
|
{
|
|
wait( var_0 );
|
|
self moveto( self.origin + self.move_delta, var_1 );
|
|
}
|
|
|
|
log_pile_kill_trigger( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
self endon( "log_roll_end_kill_trigger" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "trigger", var_1 );
|
|
|
|
if ( !log_pile_can_damage_player( var_1 ) )
|
|
continue;
|
|
|
|
var_2 = var_0;
|
|
|
|
if ( isdefined( var_0.script_mover ) )
|
|
var_2 = var_0.script_mover;
|
|
|
|
var_3 = self.owner;
|
|
|
|
if ( isagent( var_1 ) && isdefined( var_1.owner ) && isdefined( var_3 ) && var_1.owner == var_3 )
|
|
{
|
|
var_1 maps\mp\_movers::mover_suicide();
|
|
continue;
|
|
}
|
|
|
|
var_2.killcament = self.killcament;
|
|
var_2 radiusdamage( var_1.origin, 8, 1000, 1000, var_3, "MOD_CRUSH", "none" );
|
|
}
|
|
}
|
|
|
|
log_pile_kill_trigger_end( var_0 )
|
|
{
|
|
wait( var_0 );
|
|
self notify( "log_roll_end_kill_trigger" );
|
|
}
|
|
|
|
log_pile_can_damage_player( var_0 )
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
falling_rocks()
|
|
{
|
|
var_0 = getentarray( "falling_rock", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::falling_rock_init );
|
|
}
|
|
|
|
falling_rock_init()
|
|
{
|
|
self.fall_to = [];
|
|
self.clip_move = [];
|
|
var_0 = getentarray( self.target, "targetname" );
|
|
var_1 = common_scripts\utility::getstructarray( self.target, "targetname" );
|
|
var_0 = common_scripts\utility::array_combine( var_0, var_1 );
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( !isdefined( var_3.script_noteworthy ) )
|
|
continue;
|
|
|
|
switch ( var_3.script_noteworthy )
|
|
{
|
|
case "kill_trigger":
|
|
var_3 enablelinkto();
|
|
var_3 linkto( self );
|
|
self.kill_trigger = var_3;
|
|
break;
|
|
case "rock_clip":
|
|
var_3 linkto( self );
|
|
self.clip = var_3;
|
|
break;
|
|
case "fall_to":
|
|
self.fall_to[self.fall_to.size] = var_3;
|
|
var_3.fall_dist = distance( self.origin, var_3.origin );
|
|
|
|
for ( self.fall_dist = var_3.fall_dist; isdefined( var_3.target ); self.fall_dist = self.fall_dist + var_3.fall_dist )
|
|
{
|
|
var_4 = var_3;
|
|
var_3 = common_scripts\utility::getstruct( var_3.target, "targetname" );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
break;
|
|
|
|
self.fall_to[self.fall_to.size] = var_3;
|
|
var_3.fall_dist = distance( var_4.origin, var_3.origin );
|
|
}
|
|
|
|
break;
|
|
case "clip_move":
|
|
if ( isdefined( var_3.target ) )
|
|
{
|
|
var_3.end_pos = common_scripts\utility::getstruct( var_3.target, "targetname" );
|
|
|
|
if ( isdefined( var_3.end_pos ) && isdefined( var_3.end_pos.target ) )
|
|
{
|
|
var_3.start_pos = common_scripts\utility::getstruct( var_3.end_pos.target, "targetname" );
|
|
|
|
if ( isdefined( var_3.start_pos ) )
|
|
{
|
|
var_3.move_delta = var_3.end_pos.origin - var_3.start_pos.origin;
|
|
var_3.origin = var_3.origin - var_3.move_delta;
|
|
|
|
if ( var_3 is_dynamic_path() )
|
|
var_3 connectpaths();
|
|
|
|
self.clip_move[self.clip_move.size] = var_3;
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
thread falling_rock_damage_watch();
|
|
thread falling_rock_run();
|
|
}
|
|
|
|
is_dynamic_path()
|
|
{
|
|
return isdefined( self.spawnflags ) && self.spawnflags & 1;
|
|
}
|
|
|
|
falling_rock_damage_watch()
|
|
{
|
|
var_0 = 1000000;
|
|
self.health = var_0;
|
|
self setcandamage( 1 );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage", var_1, var_2, var_3, var_4, var_5 );
|
|
self.health = var_0;
|
|
|
|
if ( is_explosive( var_5 ) )
|
|
{
|
|
self.attacker = var_2;
|
|
break;
|
|
}
|
|
}
|
|
|
|
self setcandamage( 0 );
|
|
self notify( "rock_fall" );
|
|
}
|
|
|
|
falling_rock_run()
|
|
{
|
|
self waittill( "rock_fall" );
|
|
var_0 = 1.0;
|
|
thread falling_rock_kill_trigger();
|
|
var_1 = 1;
|
|
|
|
for ( var_2 = 0; var_2 < self.fall_to.size; var_2++ )
|
|
{
|
|
var_3 = self.fall_to[var_2];
|
|
var_4 = var_3.fall_dist / self.fall_dist * var_0;
|
|
self moveto( var_3.origin, var_4, var_4 * var_1, 0 );
|
|
self rotateto( var_3.angles, var_4, var_4 * var_1, 0 );
|
|
|
|
if ( var_2 == self.fall_to.size - 1 )
|
|
{
|
|
foreach ( var_6 in self.clip_move )
|
|
{
|
|
if ( var_6 is_dynamic_path() )
|
|
var_6 common_scripts\utility::delaycall( var_4, ::disconnectpaths );
|
|
|
|
var_6 moveto( var_6.origin + var_6.move_delta, var_4 );
|
|
}
|
|
}
|
|
|
|
self waittill( "movedone" );
|
|
var_1 = 0;
|
|
}
|
|
|
|
self notify( "rock_move_done" );
|
|
self.clip delete();
|
|
self.kill_trigger delete();
|
|
}
|
|
|
|
falling_rock_kill_trigger()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "rock_move_done" );
|
|
|
|
for (;;)
|
|
{
|
|
self.kill_trigger waittill( "trigger", var_0 );
|
|
radiusdamage( var_0.origin, 8, 1000, 1000, self.attacker, "MOD_CRUSH" );
|
|
}
|
|
}
|
|
|
|
rock_slides()
|
|
{
|
|
rock_slides_precache();
|
|
wait 0.05;
|
|
var_0 = common_scripts\utility::getstructarray( "rock_slide", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rock_slides_init );
|
|
}
|
|
|
|
rock_slides_precache()
|
|
{
|
|
|
|
}
|
|
|
|
rock_slides_init()
|
|
{
|
|
self.ground_ents = [];
|
|
self.rocks = [];
|
|
var_0 = getentarray( self.target, "targetname" );
|
|
var_1 = 1;
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( !isdefined( var_3.script_noteworthy ) )
|
|
continue;
|
|
|
|
switch ( var_3.script_noteworthy )
|
|
{
|
|
case "ground":
|
|
if ( isdefined( var_3.target ) && !var_1 )
|
|
{
|
|
var_3.start_pos = common_scripts\utility::getstruct( var_3.target, "targetname" );
|
|
|
|
if ( isdefined( var_3.start_pos ) && isdefined( var_3.start_pos.target ) )
|
|
{
|
|
var_3.end_pos = common_scripts\utility::getstruct( var_3.start_pos.target, "targetname" );
|
|
|
|
if ( isdefined( var_3.end_pos ) )
|
|
{
|
|
var_3.move_ent = spawn( "script_model", var_3.start_pos.origin );
|
|
var_3.move_ent setmodel( "tag_origin" );
|
|
var_3.move_ent.angles = var_3.start_pos.angles;
|
|
var_3 linkto( var_3.move_ent );
|
|
self.ground_ents[self.ground_ents.size] = var_3;
|
|
var_3.move_delete = isdefined( var_3.end_pos.script_noteworthy ) && var_3.end_pos.script_noteworthy == "delete";
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
case "rock":
|
|
if ( var_1 )
|
|
var_3 delete();
|
|
else
|
|
{
|
|
var_3.end_pos = common_scripts\utility::getstruct( var_3.target, "targetname" );
|
|
|
|
if ( isdefined( var_3.end_pos ) )
|
|
{
|
|
self.rocks[self.rocks.size] = var_3;
|
|
var_3.move_delete = isdefined( var_3.end_pos.script_noteworthy ) && var_3.end_pos.script_noteworthy == "delete";
|
|
}
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( !var_1 )
|
|
{
|
|
common_scripts\utility::array_thread( self.ground_ents, ::rock_slide_damage_watch, self );
|
|
thread rock_slide_run();
|
|
}
|
|
|
|
thread trap_init( var_1 );
|
|
}
|
|
|
|
rock_slide_damage_watch( var_0 )
|
|
{
|
|
var_0 endon( "trap_activated" );
|
|
var_1 = 1000000;
|
|
self.health = var_1;
|
|
self setcandamage( 1 );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage", var_2, var_3, var_4, var_5, var_6 );
|
|
self.health = var_1;
|
|
|
|
if ( is_explosive( var_6 ) )
|
|
{
|
|
self.attacker = var_3;
|
|
break;
|
|
}
|
|
}
|
|
|
|
self setcandamage( 0 );
|
|
var_0 notify( "trap_activated" );
|
|
}
|
|
|
|
rock_slide_run()
|
|
{
|
|
self waittill( "trap_activated" );
|
|
earthquake( 0.4, 3, self.origin, 800 );
|
|
var_0 = 1.5;
|
|
|
|
foreach ( var_2 in self.rocks )
|
|
{
|
|
var_2 moveto( var_2.end_pos.origin, var_0, var_0, 0 );
|
|
var_2 rotateto( var_2.end_pos.angles, var_0, var_0, 0 );
|
|
|
|
if ( var_2.move_delete )
|
|
var_2 common_scripts\utility::delaycall( var_0, ::delete );
|
|
}
|
|
|
|
wait 0.5;
|
|
var_4 = 1;
|
|
|
|
foreach ( var_6 in self.ground_ents )
|
|
{
|
|
var_6.move_ent moveto( var_6.end_pos.origin, var_4, var_4, 0 );
|
|
var_6.move_ent rotateto( var_6.end_pos.angles, var_4, var_4, 0 );
|
|
|
|
if ( var_6.move_delete )
|
|
var_6 common_scripts\utility::delaycall( var_0, ::delete );
|
|
}
|
|
}
|
|
|
|
hand_icon( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( level.createfx_enabled )
|
|
return;
|
|
|
|
if ( !isdefined( level.hand_icon_count ) )
|
|
level.hand_icon_count = 0;
|
|
|
|
level.hand_icon_count++;
|
|
var_4 = "hand_icon_" + level.hand_icon_count;
|
|
hand_icon_update( var_0, var_1, var_2, var_4, var_3 );
|
|
|
|
foreach ( var_6 in level.players )
|
|
{
|
|
if ( isdefined( var_6.hand_icons ) && isdefined( var_6.hand_icons[var_4] ) )
|
|
var_6.hand_icons[var_4] thread hand_icon_fade_out();
|
|
}
|
|
}
|
|
|
|
hand_icon_update( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isstring( var_4 ) )
|
|
var_4 = [ var_4 ];
|
|
|
|
foreach ( var_6 in var_4 )
|
|
self endon( var_6 );
|
|
}
|
|
|
|
while ( !isdefined( level.players ) )
|
|
wait 0.05;
|
|
|
|
var_8 = 200;
|
|
var_9 = "hint_usable";
|
|
var_10 = 0;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
default:
|
|
break;
|
|
}
|
|
|
|
var_11 = undefined;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_11 = anglestoforward( var_2 );
|
|
|
|
var_12 = var_8 * var_8;
|
|
|
|
for (;;)
|
|
{
|
|
foreach ( var_14 in level.players )
|
|
{
|
|
if ( !isdefined( var_14.hand_icons ) )
|
|
var_14.hand_icons = [];
|
|
|
|
var_15 = var_14.origin + ( 0, 0, 50 );
|
|
var_16 = distancesquared( var_15, var_1 );
|
|
var_17 = 1;
|
|
|
|
if ( isdefined( var_11 ) )
|
|
{
|
|
var_18 = vectornormalize( var_15 - var_1 );
|
|
var_17 = vectordot( var_11, var_18 ) > 0.2;
|
|
}
|
|
|
|
if ( var_16 <= var_12 && var_17 && ( !isdefined( self.in_use ) || !self.in_use ) && !var_14 maps\mp\_utility::isusingremote() )
|
|
{
|
|
if ( !isdefined( var_14.hand_icons[var_3] ) )
|
|
{
|
|
var_14.hand_icons[var_3] = hand_icon_create( var_14, var_9, var_1, var_10 );
|
|
var_14.hand_icons[var_3].alpha = 0;
|
|
}
|
|
|
|
var_14.hand_icons[var_3] notify( "stop_fade" );
|
|
var_14.hand_icons[var_3] thread hand_icon_fade_in();
|
|
continue;
|
|
}
|
|
|
|
if ( isdefined( var_14.hand_icons[var_3] ) )
|
|
var_14.hand_icons[var_3] thread hand_icon_fade_out();
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
hand_icon_create( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_1 = var_0 maps\mp\gametypes\_hud_util::createicon( var_1, 16, 16 );
|
|
var_1 setwaypoint( 1, var_3 );
|
|
var_1.x = var_2[0];
|
|
var_1.y = var_2[1];
|
|
var_1.z = var_2[2];
|
|
return var_1;
|
|
}
|
|
|
|
hand_icon_fade_in()
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( self.alpha == 1 )
|
|
return;
|
|
|
|
self fadeovertime( 0.5 );
|
|
self.alpha = 1;
|
|
}
|
|
|
|
hand_icon_fade_out()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_fade" );
|
|
|
|
if ( self.alpha == 0 )
|
|
return;
|
|
|
|
var_0 = 0.5;
|
|
self fadeovertime( var_0 );
|
|
self.alpha = 0;
|
|
wait( var_0 );
|
|
self destroy();
|
|
}
|
|
|
|
tower_radio()
|
|
{
|
|
var_0 = getent( "tower_radio", "targetname" );
|
|
var_0.tracklist = [];
|
|
var_0.tracklist[0] = "mus_emt_portable_radio_01";
|
|
var_0.tracklist[1] = "mus_emt_portable_radio_02";
|
|
var_0.tracklist[2] = "mus_emt_portable_radio_03";
|
|
maps\mp\_utility::gameflagwait( "prematch_done" );
|
|
var_0 thread tower_radio_damage_watch();
|
|
var_0 endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "connected", var_1 );
|
|
var_0 thread tower_radio_sounds( var_1 );
|
|
}
|
|
}
|
|
|
|
tower_radio_damage_watch()
|
|
{
|
|
self.health = 10000;
|
|
self setcandamage( 1 );
|
|
self waittill( "damage", var_0, var_1, var_2, var_3, var_4 );
|
|
self playsound( "radio_destroyed_static" );
|
|
self physicslaunchclient( var_3, var_2 );
|
|
}
|
|
|
|
tower_radio_sounds( var_0 )
|
|
{
|
|
self endon( "damage" );
|
|
var_0 endon( "death" );
|
|
var_0 endon( "disconnect" );
|
|
var_0 waittill( "spawned_player" );
|
|
common_scripts\utility::waitframe();
|
|
var_1 = "";
|
|
|
|
for (;;)
|
|
{
|
|
for ( var_2 = var_1; var_2 == var_1; var_2 = common_scripts\utility::random( self.tracklist ) )
|
|
{
|
|
|
|
}
|
|
|
|
var_3 = lookupsoundlength( var_2 ) / 1000;
|
|
|
|
if ( var_3 < 0.1 )
|
|
wait 5.0;
|
|
else
|
|
self playsoundtoplayer( var_2, var_0 );
|
|
|
|
wait( var_3 );
|
|
var_1 = var_2;
|
|
}
|
|
}
|