mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-07 17:37:50 -05:00
Update scripts to better decompiled scripts.
This commit is contained in:
parent
26ba037e40
commit
d02a9efd43
24
MP/Core/codescripts/delete.gsc
Normal file
24
MP/Core/codescripts/delete.gsc
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
assert( isdefined( self ) );
|
||||||
|
wait 0;
|
||||||
|
|
||||||
|
if ( isdefined( self ) )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( isdefined( self.classname ) )
|
||||||
|
{
|
||||||
|
if ( self.classname == "trigger_once" || self.classname == "trigger_radius" || self.classname == "trigger_multiple" )
|
||||||
|
{
|
||||||
|
println( "" );
|
||||||
|
println( "*** trigger debug: delete.gsc is deleting trigger with ent#: " + self getentitynumber() + " at origin: " + self.origin );
|
||||||
|
println( "" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
self delete();
|
||||||
|
}
|
||||||
|
}
|
1640
MP/Core/common_scripts/utility.gsc
Normal file
1640
MP/Core/common_scripts/utility.gsc
Normal file
File diff suppressed because it is too large
Load Diff
473
MP/Core/maps/mp/_art.gsc
Normal file
473
MP/Core/maps/mp/_art.gsc
Normal file
@ -0,0 +1,473 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( getdvar( "scr_art_tweak" ) == "" || getdvar( "scr_art_tweak" ) == "0" )
|
||||||
|
setdvar( "scr_art_tweak", 0 );
|
||||||
|
|
||||||
|
if ( getdvar( "scr_dof_enable" ) == "" )
|
||||||
|
setdvar( "scr_dof_enable", "1" );
|
||||||
|
|
||||||
|
if ( getdvar( "scr_cinematic_autofocus" ) == "" )
|
||||||
|
setdvar( "scr_cinematic_autofocus", "1" );
|
||||||
|
|
||||||
|
if ( getdvar( "scr_art_visionfile" ) == "" && isdefined( level.script ) )
|
||||||
|
setdvar( "scr_art_visionfile", level.script );
|
||||||
|
|
||||||
|
if ( getdvar( "debug_reflection" ) == "" )
|
||||||
|
setdvar( "debug_reflection", "0" );
|
||||||
|
|
||||||
|
if ( getdvar( "debug_reflection_matte" ) == "" )
|
||||||
|
setdvar( "debug_reflection_matte", "0" );
|
||||||
|
|
||||||
|
if ( getdvar( "debug_color_pallete" ) == "" )
|
||||||
|
setdvar( "debug_color_pallete", "0" );
|
||||||
|
|
||||||
|
precachemodel( "test_sphere_lambert" );
|
||||||
|
precachemodel( "test_macbeth_chart" );
|
||||||
|
precachemodel( "test_macbeth_chart_unlit" );
|
||||||
|
precachemodel( "test_sphere_silver" );
|
||||||
|
level thread debug_reflection();
|
||||||
|
level thread debug_reflection_matte();
|
||||||
|
level thread debug_color_pallete();
|
||||||
|
#/
|
||||||
|
if ( !isdefined( level.dofdefault ) )
|
||||||
|
{
|
||||||
|
level.dofdefault["nearStart"] = 0;
|
||||||
|
level.dofdefault["nearEnd"] = 1;
|
||||||
|
level.dofdefault["farStart"] = 8000;
|
||||||
|
level.dofdefault["farEnd"] = 10000;
|
||||||
|
level.dofdefault["nearBlur"] = 6;
|
||||||
|
level.dofdefault["farBlur"] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
level.curdof = ( level.dofdefault["farStart"] - level.dofdefault["nearEnd"] ) / 2;
|
||||||
|
/#
|
||||||
|
thread tweakart();
|
||||||
|
#/
|
||||||
|
if ( !isdefined( level.script ) )
|
||||||
|
level.script = tolower( getdvar( "mapname" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
artfxprintln( file, string )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( file == -1 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
fprintln( file, string );
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
strtok_loc( string, par1 )
|
||||||
|
{
|
||||||
|
stringlist = [];
|
||||||
|
indexstring = "";
|
||||||
|
|
||||||
|
for ( i = 0; i < string.size; i++ )
|
||||||
|
{
|
||||||
|
if ( string[i] == " " )
|
||||||
|
{
|
||||||
|
stringlist[stringlist.size] = indexstring;
|
||||||
|
indexstring = "";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
indexstring += string[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( indexstring.size )
|
||||||
|
stringlist[stringlist.size] = indexstring;
|
||||||
|
|
||||||
|
return stringlist;
|
||||||
|
}
|
||||||
|
|
||||||
|
setfogsliders()
|
||||||
|
{
|
||||||
|
fogall = strtok_loc( getdvar( "g_fogColorReadOnly" ), " " );
|
||||||
|
red = fogall[0];
|
||||||
|
green = fogall[1];
|
||||||
|
blue = fogall[2];
|
||||||
|
halfplane = getdvar( "g_fogHalfDistReadOnly" );
|
||||||
|
nearplane = getdvar( "g_fogStartDistReadOnly" );
|
||||||
|
|
||||||
|
if ( !isdefined( red ) || !isdefined( green ) || !isdefined( blue ) || !isdefined( halfplane ) )
|
||||||
|
{
|
||||||
|
red = 1;
|
||||||
|
green = 1;
|
||||||
|
blue = 1;
|
||||||
|
halfplane = 10000001;
|
||||||
|
nearplane = 10000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
setdvar( "scr_fog_exp_halfplane", halfplane );
|
||||||
|
setdvar( "scr_fog_nearplane", nearplane );
|
||||||
|
setdvar( "scr_fog_color", red + " " + green + " " + blue );
|
||||||
|
}
|
||||||
|
|
||||||
|
tweakart()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( !isdefined( level.tweakfile ) )
|
||||||
|
level.tweakfile = 0;
|
||||||
|
|
||||||
|
if ( getdvar( "scr_fog_baseheight" ) == "" )
|
||||||
|
{
|
||||||
|
setdvar( "scr_fog_exp_halfplane", "500" );
|
||||||
|
setdvar( "scr_fog_exp_halfheight", "500" );
|
||||||
|
setdvar( "scr_fog_nearplane", "0" );
|
||||||
|
setdvar( "scr_fog_baseheight", "0" );
|
||||||
|
}
|
||||||
|
|
||||||
|
setdvar( "scr_fog_fraction", "1.0" );
|
||||||
|
setdvar( "scr_art_dump", "0" );
|
||||||
|
setdvar( "scr_art_sun_fog_dir_set", "0" );
|
||||||
|
setdvar( "scr_dof_nearStart", level.dofdefault["nearStart"] );
|
||||||
|
setdvar( "scr_dof_nearEnd", level.dofdefault["nearEnd"] );
|
||||||
|
setdvar( "scr_dof_farStart", level.dofdefault["farStart"] );
|
||||||
|
setdvar( "scr_dof_farEnd", level.dofdefault["farEnd"] );
|
||||||
|
setdvar( "scr_dof_nearBlur", level.dofdefault["nearBlur"] );
|
||||||
|
setdvar( "scr_dof_farBlur", level.dofdefault["farBlur"] );
|
||||||
|
file = undefined;
|
||||||
|
filename = undefined;
|
||||||
|
tweak_toggle = 1;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
while ( getdvarint( "scr_art_tweak" ) == 0 )
|
||||||
|
{
|
||||||
|
tweak_toggle = 1;
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( tweak_toggle )
|
||||||
|
{
|
||||||
|
tweak_toggle = 0;
|
||||||
|
fogsettings = getfogsettings();
|
||||||
|
setdvar( "scr_fog_nearplane", fogsettings[0] );
|
||||||
|
setdvar( "scr_fog_exp_halfplane", fogsettings[1] );
|
||||||
|
setdvar( "scr_fog_exp_halfheight", fogsettings[3] );
|
||||||
|
setdvar( "scr_fog_baseheight", fogsettings[2] );
|
||||||
|
setdvar( "scr_fog_color", fogsettings[4] + " " + fogsettings[5] + " " + fogsettings[6] );
|
||||||
|
setdvar( "scr_fog_color_scale", fogsettings[7] );
|
||||||
|
setdvar( "scr_sun_fog_color", fogsettings[8] + " " + fogsettings[9] + " " + fogsettings[10] );
|
||||||
|
level.fogsundir = [];
|
||||||
|
level.fogsundir[0] = fogsettings[11];
|
||||||
|
level.fogsundir[1] = fogsettings[12];
|
||||||
|
level.fogsundir[2] = fogsettings[13];
|
||||||
|
setdvar( "scr_sun_fog_start_angle", fogsettings[14] );
|
||||||
|
setdvar( "scr_sun_fog_end_angle", fogsettings[15] );
|
||||||
|
setdvar( "scr_fog_max_opacity", fogsettings[16] );
|
||||||
|
}
|
||||||
|
|
||||||
|
level.fogexphalfplane = getdvarfloat( "scr_fog_exp_halfplane" );
|
||||||
|
level.fogexphalfheight = getdvarfloat( "scr_fog_exp_halfheight" );
|
||||||
|
level.fognearplane = getdvarfloat( "scr_fog_nearplane" );
|
||||||
|
level.fogbaseheight = getdvarfloat( "scr_fog_baseheight" );
|
||||||
|
level.fogcolorred = getdvarcolorred( "scr_fog_color" );
|
||||||
|
level.fogcolorgreen = getdvarcolorgreen( "scr_fog_color" );
|
||||||
|
level.fogcolorblue = getdvarcolorblue( "scr_fog_color" );
|
||||||
|
level.fogcolorscale = getdvarfloat( "scr_fog_color_scale" );
|
||||||
|
level.sunfogcolorred = getdvarcolorred( "scr_sun_fog_color" );
|
||||||
|
level.sunfogcolorgreen = getdvarcolorgreen( "scr_sun_fog_color" );
|
||||||
|
level.sunfogcolorblue = getdvarcolorblue( "scr_sun_fog_color" );
|
||||||
|
level.sunstartangle = getdvarfloat( "scr_sun_fog_start_angle" );
|
||||||
|
level.sunendangle = getdvarfloat( "scr_sun_fog_end_angle" );
|
||||||
|
level.fogmaxopacity = getdvarfloat( "scr_fog_max_opacity" );
|
||||||
|
|
||||||
|
if ( getdvarint( "scr_art_sun_fog_dir_set" ) )
|
||||||
|
{
|
||||||
|
setdvar( "scr_art_sun_fog_dir_set", "0" );
|
||||||
|
println( "Setting sun fog direction to facing of player" );
|
||||||
|
players = get_players();
|
||||||
|
dir = vectornormalize( anglestoforward( players[0] getplayerangles() ) );
|
||||||
|
level.fogsundir = [];
|
||||||
|
level.fogsundir[0] = dir[0];
|
||||||
|
level.fogsundir[1] = dir[1];
|
||||||
|
level.fogsundir[2] = dir[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
fovslidercheck();
|
||||||
|
dumpsettings();
|
||||||
|
|
||||||
|
if ( !getdvarint( _hash_DBBD8F3B ) )
|
||||||
|
{
|
||||||
|
if ( !isdefined( level.fogsundir ) )
|
||||||
|
{
|
||||||
|
level.fogsundir = [];
|
||||||
|
level.fogsundir[0] = 1;
|
||||||
|
level.fogsundir[1] = 0;
|
||||||
|
level.fogsundir[2] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
setvolfog( level.fognearplane, level.fogexphalfplane, level.fogexphalfheight, level.fogbaseheight, level.fogcolorred, level.fogcolorgreen, level.fogcolorblue, level.fogcolorscale, level.sunfogcolorred, level.sunfogcolorgreen, level.sunfogcolorblue, level.fogsundir[0], level.fogsundir[1], level.fogsundir[2], level.sunstartangle, level.sunendangle, 0, level.fogmaxopacity );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
setexpfog( 100000000, 100000001, 0, 0, 0, 0 );
|
||||||
|
|
||||||
|
wait 0.1;
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
fovslidercheck()
|
||||||
|
{
|
||||||
|
if ( level.dofdefault["nearStart"] >= level.dofdefault["nearEnd"] )
|
||||||
|
{
|
||||||
|
level.dofdefault["nearStart"] = level.dofdefault["nearEnd"] - 1;
|
||||||
|
setdvar( "scr_dof_nearStart", level.dofdefault["nearStart"] );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( level.dofdefault["nearEnd"] <= level.dofdefault["nearStart"] )
|
||||||
|
{
|
||||||
|
level.dofdefault["nearEnd"] = level.dofdefault["nearStart"] + 1;
|
||||||
|
setdvar( "scr_dof_nearEnd", level.dofdefault["nearEnd"] );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( level.dofdefault["farStart"] >= level.dofdefault["farEnd"] )
|
||||||
|
{
|
||||||
|
level.dofdefault["farStart"] = level.dofdefault["farEnd"] - 1;
|
||||||
|
setdvar( "scr_dof_farStart", level.dofdefault["farStart"] );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( level.dofdefault["farEnd"] <= level.dofdefault["farStart"] )
|
||||||
|
{
|
||||||
|
level.dofdefault["farEnd"] = level.dofdefault["farStart"] + 1;
|
||||||
|
setdvar( "scr_dof_farEnd", level.dofdefault["farEnd"] );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( level.dofdefault["farBlur"] >= level.dofdefault["nearBlur"] )
|
||||||
|
{
|
||||||
|
level.dofdefault["farBlur"] = level.dofdefault["nearBlur"] - 0.1;
|
||||||
|
setdvar( "scr_dof_farBlur", level.dofdefault["farBlur"] );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( level.dofdefault["farStart"] <= level.dofdefault["nearEnd"] )
|
||||||
|
{
|
||||||
|
level.dofdefault["farStart"] = level.dofdefault["nearEnd"] + 1;
|
||||||
|
setdvar( "scr_dof_farStart", level.dofdefault["farStart"] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dumpsettings()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( getdvar( "scr_art_dump" ) != "0" )
|
||||||
|
{
|
||||||
|
println( "\\tstart_dist = " + level.fognearplane + ";" );
|
||||||
|
println( "\\thalf_dist = " + level.fogexphalfplane + ";" );
|
||||||
|
println( "\\thalf_height = " + level.fogexphalfheight + ";" );
|
||||||
|
println( "\\tbase_height = " + level.fogbaseheight + ";" );
|
||||||
|
println( "\\tfog_r = " + level.fogcolorred + ";" );
|
||||||
|
println( "\\tfog_g = " + level.fogcolorgreen + ";" );
|
||||||
|
println( "\\tfog_b = " + level.fogcolorblue + ";" );
|
||||||
|
println( "\\tfog_scale = " + level.fogcolorscale + ";" );
|
||||||
|
println( "\\tsun_col_r = " + level.sunfogcolorred + ";" );
|
||||||
|
println( "\\tsun_col_g = " + level.sunfogcolorgreen + ";" );
|
||||||
|
println( "\\tsun_col_b = " + level.sunfogcolorblue + ";" );
|
||||||
|
println( "\\tsun_dir_x = " + level.fogsundir[0] + ";" );
|
||||||
|
println( "\\tsun_dir_y = " + level.fogsundir[1] + ";" );
|
||||||
|
println( "\\tsun_dir_z = " + level.fogsundir[2] + ";" );
|
||||||
|
println( "\\tsun_start_ang = " + level.sunstartangle + ";" );
|
||||||
|
println( "\\tsun_stop_ang = " + level.sunendangle + ";" );
|
||||||
|
println( "\\ttime = 0;" );
|
||||||
|
println( "\\tmax_fog_opacity = " + level.fogmaxopacity + ";" );
|
||||||
|
println( "" );
|
||||||
|
println( "\\tsetVolFog(start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale," );
|
||||||
|
println( "\\t\\tsun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, " );
|
||||||
|
println( "\\t\\tsun_stop_ang, time, max_fog_opacity);" );
|
||||||
|
setdvar( "scr_art_dump", "0" );
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
debug_reflection()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
level.debug_reflection = 0;
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
wait 0.1;
|
||||||
|
|
||||||
|
if ( getdvar( "debug_reflection" ) == "2" && level.debug_reflection != 2 || getdvar( "debug_reflection" ) == "3" && level.debug_reflection != 3 )
|
||||||
|
{
|
||||||
|
remove_reflection_objects();
|
||||||
|
|
||||||
|
if ( getdvar( "debug_reflection" ) == "2" )
|
||||||
|
{
|
||||||
|
create_reflection_objects();
|
||||||
|
level.debug_reflection = 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
create_reflection_objects();
|
||||||
|
create_reflection_object();
|
||||||
|
level.debug_reflection = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( getdvar( "debug_reflection" ) == "1" && level.debug_reflection != 1 )
|
||||||
|
{
|
||||||
|
setdvar( "debug_reflection_matte", "0" );
|
||||||
|
setdvar( "debug_color_pallete", "0" );
|
||||||
|
remove_reflection_objects();
|
||||||
|
create_reflection_object();
|
||||||
|
level.debug_reflection = 1;
|
||||||
|
}
|
||||||
|
else if ( getdvar( "debug_reflection" ) == "0" && level.debug_reflection != 0 )
|
||||||
|
{
|
||||||
|
remove_reflection_objects();
|
||||||
|
level.debug_reflection = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_reflection_objects()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( ( level.debug_reflection == 2 || level.debug_reflection == 3 ) && isdefined( level.debug_reflection_objects ) )
|
||||||
|
{
|
||||||
|
for ( i = 0; i < level.debug_reflection_objects.size; i++ )
|
||||||
|
level.debug_reflection_objects[i] delete();
|
||||||
|
|
||||||
|
level.debug_reflection_objects = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( level.debug_reflection == 1 || level.debug_reflection == 3 || level.debug_reflection_matte == 1 || level.debug_color_pallete == 1 || level.debug_color_pallete == 2 )
|
||||||
|
{
|
||||||
|
if ( isdefined( level.debug_reflectionobject ) )
|
||||||
|
level.debug_reflectionobject delete();
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
create_reflection_objects()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
reflection_locs = getreflectionlocs();
|
||||||
|
|
||||||
|
for ( i = 0; i < reflection_locs.size; i++ )
|
||||||
|
{
|
||||||
|
level.debug_reflection_objects[i] = spawn( "script_model", reflection_locs[i] );
|
||||||
|
level.debug_reflection_objects[i] setmodel( "test_sphere_silver" );
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
create_reflection_object( model = "test_sphere_silver" )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( isdefined( level.debug_reflectionobject ) )
|
||||||
|
level.debug_reflectionobject delete();
|
||||||
|
|
||||||
|
players = get_players();
|
||||||
|
player = players[0];
|
||||||
|
level.debug_reflectionobject = spawn( "script_model", player geteye() + vectorscale( anglestoforward( player.angles ), 100 ) );
|
||||||
|
level.debug_reflectionobject setmodel( model );
|
||||||
|
level.debug_reflectionobject.origin = player geteye() + vectorscale( anglestoforward( player getplayerangles() ), 100 );
|
||||||
|
level.debug_reflectionobject linkto( player );
|
||||||
|
thread debug_reflection_buttons();
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
debug_reflection_buttons()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
level notify( "new_reflection_button_running" );
|
||||||
|
level endon( "new_reflection_button_running" );
|
||||||
|
level.debug_reflectionobject endon( "death" );
|
||||||
|
offset = 100;
|
||||||
|
lastoffset = offset;
|
||||||
|
|
||||||
|
while ( getdvar( "debug_reflection" ) == "1" || getdvar( "debug_reflection" ) == "3" || getdvar( "debug_reflection_matte" ) == "1" || getdvar( "debug_color_pallete" ) == "1" || getdvar( "debug_color_pallete" ) == "2" )
|
||||||
|
{
|
||||||
|
players = get_players();
|
||||||
|
|
||||||
|
if ( players[0] buttonpressed( "BUTTON_X" ) )
|
||||||
|
offset += 50;
|
||||||
|
|
||||||
|
if ( players[0] buttonpressed( "BUTTON_Y" ) )
|
||||||
|
offset -= 50;
|
||||||
|
|
||||||
|
if ( offset > 1000 )
|
||||||
|
offset = 1000;
|
||||||
|
|
||||||
|
if ( offset < 64 )
|
||||||
|
offset = 64;
|
||||||
|
|
||||||
|
level.debug_reflectionobject unlink();
|
||||||
|
level.debug_reflectionobject.origin = players[0] geteye() + vectorscale( anglestoforward( players[0] getplayerangles() ), offset );
|
||||||
|
temp_angles = vectortoangles( players[0].origin - level.debug_reflectionobject.origin );
|
||||||
|
level.debug_reflectionobject.angles = ( 0, temp_angles[1], 0 );
|
||||||
|
lastoffset = offset;
|
||||||
|
line( level.debug_reflectionobject.origin, getreflectionorigin( level.debug_reflectionobject.origin ), ( 1, 0, 0 ), 1, 1 );
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
|
if ( isdefined( level.debug_reflectionobject ) )
|
||||||
|
level.debug_reflectionobject linkto( players[0] );
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
debug_reflection_matte()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
level.debug_reflection_matte = 0;
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
wait 0.1;
|
||||||
|
|
||||||
|
if ( getdvar( "debug_reflection_matte" ) == "1" && level.debug_reflection_matte != 1 )
|
||||||
|
{
|
||||||
|
setdvar( "debug_reflection", "0" );
|
||||||
|
setdvar( "debug_color_pallete", "0" );
|
||||||
|
remove_reflection_objects();
|
||||||
|
create_reflection_object( "test_sphere_lambert" );
|
||||||
|
level.debug_reflection_matte = 1;
|
||||||
|
}
|
||||||
|
else if ( getdvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0 )
|
||||||
|
{
|
||||||
|
remove_reflection_objects();
|
||||||
|
level.debug_reflection_matte = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
debug_color_pallete()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
level.debug_color_pallete = 0;
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
wait 0.1;
|
||||||
|
|
||||||
|
if ( getdvar( "debug_color_pallete" ) == "1" && level.debug_color_pallete != 1 )
|
||||||
|
{
|
||||||
|
setdvar( "debug_reflection", "0" );
|
||||||
|
setdvar( "debug_reflection_matte", "0" );
|
||||||
|
remove_reflection_objects();
|
||||||
|
create_reflection_object( "test_macbeth_chart" );
|
||||||
|
level.debug_color_pallete = 1;
|
||||||
|
}
|
||||||
|
else if ( getdvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2 )
|
||||||
|
{
|
||||||
|
remove_reflection_objects();
|
||||||
|
create_reflection_object( "test_macbeth_chart_unlit" );
|
||||||
|
level.debug_color_pallete = 2;
|
||||||
|
}
|
||||||
|
else if ( getdvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0 )
|
||||||
|
{
|
||||||
|
remove_reflection_objects();
|
||||||
|
level.debug_color_pallete = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
}
|
89
MP/Core/maps/mp/_bb.gsc
Normal file
89
MP/Core/maps/mp/_bb.gsc
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
#include common_scripts\utility;
|
||||||
|
|
||||||
|
init()
|
||||||
|
{
|
||||||
|
level thread onplayerconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
onplayerconnect()
|
||||||
|
{
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
level waittill( "connected", player );
|
||||||
|
|
||||||
|
player thread onplayerspawned();
|
||||||
|
player thread onplayerdeath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onplayerspawned()
|
||||||
|
{
|
||||||
|
self endon( "disconnect" );
|
||||||
|
self._bbdata = [];
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
|
self._bbdata["score"] = 0;
|
||||||
|
self._bbdata["momentum"] = 0;
|
||||||
|
self._bbdata["spawntime"] = gettime();
|
||||||
|
self._bbdata["shots"] = 0;
|
||||||
|
self._bbdata["hits"] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onplayerdisconnect()
|
||||||
|
{
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
self waittill( "disconnect" );
|
||||||
|
|
||||||
|
self commitspawndata();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onplayerdeath()
|
||||||
|
{
|
||||||
|
self endon( "disconnect" );
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
self waittill( "death" );
|
||||||
|
|
||||||
|
self commitspawndata();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
commitspawndata()
|
||||||
|
{
|
||||||
|
assert( isdefined( self._bbdata ) );
|
||||||
|
|
||||||
|
if ( !isdefined( self._bbdata ) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
bbprint( "mpplayerlives", "gametime %d spawnid %d lifescore %d lifemomentum %d lifetime %d name %s", gettime(), getplayerspawnid( self ), self._bbdata["score"], self._bbdata["momentum"], gettime() - self._bbdata["spawntime"], self.name );
|
||||||
|
}
|
||||||
|
|
||||||
|
commitweapondata( spawnid, currentweapon, time0 )
|
||||||
|
{
|
||||||
|
assert( isdefined( self._bbdata ) );
|
||||||
|
|
||||||
|
if ( !isdefined( self._bbdata ) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
time1 = gettime();
|
||||||
|
bbprint( "mpweapons", "spawnid %d name %s duration %d shots %d hits %d", spawnid, currentweapon, time1 - time0, self._bbdata["shots"], self._bbdata["hits"] );
|
||||||
|
self._bbdata["shots"] = 0;
|
||||||
|
self._bbdata["hits"] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bbaddtostat( statname, delta )
|
||||||
|
{
|
||||||
|
if ( isdefined( self._bbdata ) && isdefined( self._bbdata[statname] ) )
|
||||||
|
self._bbdata[statname] += delta;
|
||||||
|
}
|
18
MP/Core/maps/mp/_busing.gsc
Normal file
18
MP/Core/maps/mp/_busing.gsc
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
|
||||||
|
businit()
|
||||||
|
{
|
||||||
|
assert( level.clientscripts );
|
||||||
|
level.busstate = "";
|
||||||
|
registerclientsys( "busCmd" );
|
||||||
|
}
|
||||||
|
|
||||||
|
setbusstate( state )
|
||||||
|
{
|
||||||
|
if ( level.busstate != state )
|
||||||
|
setclientsysstate( "busCmd", state );
|
||||||
|
|
||||||
|
level.busstate = state;
|
||||||
|
}
|
1876
MP/Core/maps/mp/_challenges.gsc
Normal file
1876
MP/Core/maps/mp/_challenges.gsc
Normal file
File diff suppressed because it is too large
Load Diff
2944
MP/Core/maps/mp/_createfx.gsc
Normal file
2944
MP/Core/maps/mp/_createfx.gsc
Normal file
File diff suppressed because it is too large
Load Diff
90
MP/Core/maps/mp/_demo.gsc
Normal file
90
MP/Core/maps/mp/_demo.gsc
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
|
||||||
|
init()
|
||||||
|
{
|
||||||
|
level.bookmark["kill"] = 0;
|
||||||
|
level.bookmark["event"] = 1;
|
||||||
|
level.bookmark["zm_round_end"] = 2;
|
||||||
|
level.bookmark["zm_player_downed"] = 3;
|
||||||
|
level.bookmark["zm_player_revived"] = 4;
|
||||||
|
level.bookmark["zm_player_bledout"] = 5;
|
||||||
|
level.bookmark["zm_player_use_magicbox"] = 6;
|
||||||
|
level.bookmark["score_event"] = 7;
|
||||||
|
level.bookmark["medal"] = 8;
|
||||||
|
level.bookmark["round_result"] = 9;
|
||||||
|
level.bookmark["game_result"] = 10;
|
||||||
|
level.bookmark["zm_powerup_dropped"] = 11;
|
||||||
|
level.bookmark["zm_player_powerup_grabbed"] = 12;
|
||||||
|
level.bookmark["zm_player_perk"] = 13;
|
||||||
|
level.bookmark["zm_power"] = 14;
|
||||||
|
level.bookmark["zm_player_door"] = 15;
|
||||||
|
level.bookmark["zm_player_buildable_placed"] = 16;
|
||||||
|
level.bookmark["zm_player_use_packapunch"] = 17;
|
||||||
|
level.bookmark["zm_player_rampage"] = 18;
|
||||||
|
level.bookmark["zm_player_grenade_special"] = 19;
|
||||||
|
level.bookmark["zm_player_grenade_multiattack"] = 20;
|
||||||
|
level.bookmark["zm_player_meat_stink"] = 21;
|
||||||
|
level.bookmark["zm_player_grabbed_magicbox"] = 22;
|
||||||
|
level.bookmark["zm_player_grabbed_packapunch"] = 23;
|
||||||
|
level.bookmark["zm_player_grenade_special_long"] = 24;
|
||||||
|
}
|
||||||
|
|
||||||
|
bookmark( type, time, clientent1, clientent2, eventpriority, inflictorent, overrideentitycamera, actorent )
|
||||||
|
{
|
||||||
|
assert( isdefined( level.bookmark[type] ), "Unable to find a bookmark type for type - " + type );
|
||||||
|
client1 = 255;
|
||||||
|
client2 = 255;
|
||||||
|
inflictorentnum = -1;
|
||||||
|
inflictorenttype = 0;
|
||||||
|
inflictorbirthtime = 0;
|
||||||
|
actorentnum = undefined;
|
||||||
|
scoreeventpriority = 0;
|
||||||
|
|
||||||
|
if ( isdefined( clientent1 ) )
|
||||||
|
client1 = clientent1 getentitynumber();
|
||||||
|
|
||||||
|
if ( isdefined( clientent2 ) )
|
||||||
|
client2 = clientent2 getentitynumber();
|
||||||
|
|
||||||
|
if ( isdefined( eventpriority ) )
|
||||||
|
scoreeventpriority = eventpriority;
|
||||||
|
|
||||||
|
if ( isdefined( inflictorent ) )
|
||||||
|
{
|
||||||
|
inflictorentnum = inflictorent getentitynumber();
|
||||||
|
inflictorenttype = inflictorent getentitytype();
|
||||||
|
|
||||||
|
if ( isdefined( inflictorent.birthtime ) )
|
||||||
|
inflictorbirthtime = inflictorent.birthtime;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !isdefined( overrideentitycamera ) )
|
||||||
|
overrideentitycamera = 0;
|
||||||
|
|
||||||
|
if ( isdefined( actorent ) )
|
||||||
|
actorentnum = actorent getentitynumber();
|
||||||
|
|
||||||
|
adddemobookmark( level.bookmark[type], time, client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum );
|
||||||
|
}
|
||||||
|
|
||||||
|
gameresultbookmark( type, winningteamindex, losingteamindex )
|
||||||
|
{
|
||||||
|
assert( isdefined( level.bookmark[type] ), "Unable to find a bookmark type for type - " + type );
|
||||||
|
client1 = 255;
|
||||||
|
client2 = 255;
|
||||||
|
scoreeventpriority = 0;
|
||||||
|
inflictorentnum = -1;
|
||||||
|
inflictorenttype = 0;
|
||||||
|
inflictorbirthtime = 0;
|
||||||
|
overrideentitycamera = 0;
|
||||||
|
actorentnum = undefined;
|
||||||
|
|
||||||
|
if ( isdefined( winningteamindex ) )
|
||||||
|
client1 = winningteamindex;
|
||||||
|
|
||||||
|
if ( isdefined( losingteamindex ) )
|
||||||
|
client2 = losingteamindex;
|
||||||
|
|
||||||
|
adddemobookmark( level.bookmark[type], gettime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum );
|
||||||
|
}
|
@ -417,11 +417,8 @@ destructible_barrel_fire_think( attacker )
|
|||||||
self thread destructible_barrel_explosion( attacker );
|
self thread destructible_barrel_explosion( attacker );
|
||||||
}
|
}
|
||||||
|
|
||||||
destructible_barrel_explosion( attacker, physics_explosion )
|
destructible_barrel_explosion( attacker, physics_explosion = 1 )
|
||||||
{
|
{
|
||||||
if ( !isdefined( physics_explosion ) )
|
|
||||||
physics_explosion = 1;
|
|
||||||
|
|
||||||
self notify( "barrel_dead" );
|
self notify( "barrel_dead" );
|
||||||
|
|
||||||
if ( isdefined( self.target ) )
|
if ( isdefined( self.target ) )
|
@ -47,9 +47,8 @@ monitorempgrenade()
|
|||||||
|
|
||||||
hurtvictim = 1;
|
hurtvictim = 1;
|
||||||
hurtattacker = 0;
|
hurtattacker = 0;
|
||||||
/#
|
|
||||||
assert( isdefined( self.team ) );
|
assert( isdefined( self.team ) );
|
||||||
#/
|
|
||||||
if ( level.teambased && isdefined( attacker ) && isdefined( attacker.team ) && attacker.team == self.team && attacker != self )
|
if ( level.teambased && isdefined( attacker ) && isdefined( attacker.team ) && attacker.team == self.team && attacker != self )
|
||||||
{
|
{
|
||||||
if ( level.friendlyfire == 0 )
|
if ( level.friendlyfire == 0 )
|
@ -11,12 +11,8 @@ init()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
level.initedentityheadicons = 1;
|
level.initedentityheadicons = 1;
|
||||||
/#
|
|
||||||
assert( isdefined( game["entity_headicon_allies"] ), "Allied head icons are not defined. Check the team set for the level." );
|
assert( isdefined( game["entity_headicon_allies"] ), "Allied head icons are not defined. Check the team set for the level." );
|
||||||
#/
|
|
||||||
/#
|
|
||||||
assert( isdefined( game["entity_headicon_axis"] ), "Axis head icons are not defined. Check the team set for the level." );
|
assert( isdefined( game["entity_headicon_axis"] ), "Axis head icons are not defined. Check the team set for the level." );
|
||||||
#/
|
|
||||||
precacheshader( game["entity_headicon_allies"] );
|
precacheshader( game["entity_headicon_allies"] );
|
||||||
precacheshader( game["entity_headicon_axis"] );
|
precacheshader( game["entity_headicon_axis"] );
|
||||||
|
|
||||||
@ -72,9 +68,7 @@ setentityheadicon( team, owner, offset, icon, constant_size )
|
|||||||
{
|
{
|
||||||
if ( !isplayer( owner ) )
|
if ( !isplayer( owner ) )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( owner.owner ), "entity has to have an owner if it's not a player" );
|
assert( isdefined( owner.owner ), "entity has to have an owner if it's not a player" );
|
||||||
#/
|
|
||||||
owner = owner.owner;
|
owner = owner.owner;
|
||||||
}
|
}
|
||||||
|
|
@ -58,9 +58,9 @@ monitorflash_internal( amount_distance, amount_angle, attacker, direct_on_player
|
|||||||
rumbleduration = 0.75;
|
rumbleduration = 0.75;
|
||||||
else
|
else
|
||||||
rumbleduration = 0.25;
|
rumbleduration = 0.25;
|
||||||
/#
|
|
||||||
assert( isdefined( self.team ) );
|
assert( isdefined( self.team ) );
|
||||||
#/
|
|
||||||
if ( level.teambased && isdefined( attacker ) && isdefined( attacker.team ) && attacker.team == self.team && attacker != self )
|
if ( level.teambased && isdefined( attacker ) && isdefined( attacker.team ) && attacker.team == self.team && attacker != self )
|
||||||
{
|
{
|
||||||
if ( level.friendlyfire == 0 )
|
if ( level.friendlyfire == 0 )
|
453
MP/Core/maps/mp/_fx.gsc
Normal file
453
MP/Core/maps/mp/_fx.gsc
Normal file
@ -0,0 +1,453 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\_createfx;
|
||||||
|
|
||||||
|
print_org( fxcommand, fxid, fxpos, waittime )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( getdvar( _hash_F49A52C ) == "1" )
|
||||||
|
{
|
||||||
|
println( "{" );
|
||||||
|
println( "\"origin\" \"" + fxpos[0] + " " + fxpos[1] + " " + fxpos[2] + "\"" );
|
||||||
|
println( "\"classname\" \"script_model\"" );
|
||||||
|
println( "\"model\" \"fx\"" );
|
||||||
|
println( "\"script_fxcommand\" \"" + fxcommand + "\"" );
|
||||||
|
println( "\"script_fxid\" \"" + fxid + "\"" );
|
||||||
|
println( "\"script_delay\" \"" + waittime + "\"" );
|
||||||
|
println( "}" );
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
oneshotfx( fxid, fxpos, waittime, fxpos2 )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
oneshotfxthread()
|
||||||
|
{
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
|
if ( self.v["delay"] > 0 )
|
||||||
|
wait( self.v["delay"] );
|
||||||
|
|
||||||
|
create_triggerfx();
|
||||||
|
}
|
||||||
|
|
||||||
|
create_triggerfx()
|
||||||
|
{
|
||||||
|
self.looper = spawnfx_wrapper( self.v["fxid"], self.v["origin"], self.v["forward"], self.v["up"] );
|
||||||
|
triggerfx( self.looper, self.v["delay"] );
|
||||||
|
create_loopsound();
|
||||||
|
}
|
||||||
|
|
||||||
|
exploderfx( num, fxid, fxpos, waittime, fxpos2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout, exploder_group )
|
||||||
|
{
|
||||||
|
if ( 1 )
|
||||||
|
{
|
||||||
|
ent = createexploder( fxid );
|
||||||
|
ent.v["origin"] = fxpos;
|
||||||
|
ent.v["angles"] = ( 0, 0, 0 );
|
||||||
|
|
||||||
|
if ( isdefined( fxpos2 ) )
|
||||||
|
ent.v["angles"] = vectortoangles( fxpos2 - fxpos );
|
||||||
|
|
||||||
|
ent.v["delay"] = waittime;
|
||||||
|
ent.v["exploder"] = num;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fx = spawn( "script_origin", ( 0, 0, 0 ) );
|
||||||
|
fx.origin = fxpos;
|
||||||
|
fx.angles = vectortoangles( fxpos2 - fxpos );
|
||||||
|
fx.script_exploder = num;
|
||||||
|
fx.script_fxid = fxid;
|
||||||
|
fx.script_delay = waittime;
|
||||||
|
fx.script_firefx = firefx;
|
||||||
|
fx.script_firefxdelay = firefxdelay;
|
||||||
|
fx.script_firefxsound = firefxsound;
|
||||||
|
fx.script_sound = fxsound;
|
||||||
|
fx.script_earthquake = fxquake;
|
||||||
|
fx.script_damage = fxdamage;
|
||||||
|
fx.script_radius = damage_radius;
|
||||||
|
fx.script_soundalias = soundalias;
|
||||||
|
fx.script_firefxtimeout = firefxtimeout;
|
||||||
|
fx.script_repeat = repeat;
|
||||||
|
fx.script_delay_min = delay_min;
|
||||||
|
fx.script_delay_max = delay_max;
|
||||||
|
fx.script_exploder_group = exploder_group;
|
||||||
|
forward = anglestoforward( fx.angles );
|
||||||
|
forward = vectorscale( forward, 150 );
|
||||||
|
fx.targetpos = fxpos + forward;
|
||||||
|
|
||||||
|
if ( !isdefined( level._script_exploders ) )
|
||||||
|
level._script_exploders = [];
|
||||||
|
|
||||||
|
level._script_exploders[level._script_exploders.size] = fx;
|
||||||
|
maps\mp\_createfx::createfx_showorigin( fxid, fxpos, waittime, fxpos2, "exploderfx", fx, undefined, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout );
|
||||||
|
}
|
||||||
|
|
||||||
|
loopfx( fxid, fxpos, waittime, fxpos2, fxstart, fxstop, timeout )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
println( "Loopfx is deprecated!" );
|
||||||
|
#/
|
||||||
|
ent = createloopeffect( fxid );
|
||||||
|
ent.v["origin"] = fxpos;
|
||||||
|
ent.v["angles"] = ( 0, 0, 0 );
|
||||||
|
|
||||||
|
if ( isdefined( fxpos2 ) )
|
||||||
|
ent.v["angles"] = vectortoangles( fxpos2 - fxpos );
|
||||||
|
|
||||||
|
ent.v["delay"] = waittime;
|
||||||
|
}
|
||||||
|
|
||||||
|
create_looper()
|
||||||
|
{
|
||||||
|
self.looper = playloopedfx( level._effect[self.v["fxid"]], self.v["delay"], self.v["origin"], 0, self.v["forward"], self.v["up"] );
|
||||||
|
create_loopsound();
|
||||||
|
}
|
||||||
|
|
||||||
|
create_loopsound()
|
||||||
|
{
|
||||||
|
self notify( "stop_loop" );
|
||||||
|
|
||||||
|
if ( isdefined( self.v["soundalias"] ) && self.v["soundalias"] != "nil" )
|
||||||
|
{
|
||||||
|
if ( isdefined( self.looper ) )
|
||||||
|
self.looper thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "death" );
|
||||||
|
else
|
||||||
|
thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "stop_loop" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_loopsound()
|
||||||
|
{
|
||||||
|
self notify( "stop_loop" );
|
||||||
|
}
|
||||||
|
|
||||||
|
loopfxthread()
|
||||||
|
{
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
|
if ( isdefined( self.fxstart ) )
|
||||||
|
level waittill( "start fx" + self.fxstart );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
create_looper();
|
||||||
|
|
||||||
|
if ( isdefined( self.timeout ) )
|
||||||
|
thread loopfxstop( self.timeout );
|
||||||
|
|
||||||
|
if ( isdefined( self.fxstop ) )
|
||||||
|
level waittill( "stop fx" + self.fxstop );
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ( isdefined( self.looper ) )
|
||||||
|
self.looper delete();
|
||||||
|
|
||||||
|
if ( isdefined( self.fxstart ) )
|
||||||
|
level waittill( "start fx" + self.fxstart );
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
loopfxchangeid( ent )
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
|
||||||
|
ent waittill( "effect id changed", change );
|
||||||
|
}
|
||||||
|
|
||||||
|
loopfxchangeorg( ent )
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
ent waittill( "effect org changed", change );
|
||||||
|
|
||||||
|
self.origin = change;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
loopfxchangedelay( ent )
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
|
||||||
|
ent waittill( "effect delay changed", change );
|
||||||
|
}
|
||||||
|
|
||||||
|
loopfxdeletion( ent )
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
|
||||||
|
ent waittill( "effect deleted" );
|
||||||
|
|
||||||
|
self delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
loopfxstop( timeout )
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
wait( timeout );
|
||||||
|
self.looper delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
loopsound( sound, pos, waittime )
|
||||||
|
{
|
||||||
|
level thread loopsoundthread( sound, pos, waittime );
|
||||||
|
}
|
||||||
|
|
||||||
|
loopsoundthread( sound, pos, waittime )
|
||||||
|
{
|
||||||
|
org = spawn( "script_origin", pos );
|
||||||
|
org.origin = pos;
|
||||||
|
org playloopsound( sound );
|
||||||
|
}
|
||||||
|
|
||||||
|
gunfireloopfx( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax )
|
||||||
|
{
|
||||||
|
thread gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax );
|
||||||
|
}
|
||||||
|
|
||||||
|
gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax )
|
||||||
|
{
|
||||||
|
level endon( "stop all gunfireloopfx" );
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
|
if ( betweensetsmax < betweensetsmin )
|
||||||
|
{
|
||||||
|
temp = betweensetsmax;
|
||||||
|
betweensetsmax = betweensetsmin;
|
||||||
|
betweensetsmin = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
betweensetsbase = betweensetsmin;
|
||||||
|
betweensetsrange = betweensetsmax - betweensetsmin;
|
||||||
|
|
||||||
|
if ( shotdelaymax < shotdelaymin )
|
||||||
|
{
|
||||||
|
temp = shotdelaymax;
|
||||||
|
shotdelaymax = shotdelaymin;
|
||||||
|
shotdelaymin = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
shotdelaybase = shotdelaymin;
|
||||||
|
shotdelayrange = shotdelaymax - shotdelaymin;
|
||||||
|
|
||||||
|
if ( shotsmax < shotsmin )
|
||||||
|
{
|
||||||
|
temp = shotsmax;
|
||||||
|
shotsmax = shotsmin;
|
||||||
|
shotsmin = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
shotsbase = shotsmin;
|
||||||
|
shotsrange = shotsmax - shotsmin;
|
||||||
|
fxent = spawnfx( level._effect[fxid], fxpos );
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
shotnum = shotsbase + randomint( shotsrange );
|
||||||
|
|
||||||
|
for ( i = 0; i < shotnum; i++ )
|
||||||
|
{
|
||||||
|
triggerfx( fxent );
|
||||||
|
wait( shotdelaybase + randomfloat( shotdelayrange ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
wait( betweensetsbase + randomfloat( betweensetsrange ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gunfireloopfxvec( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax )
|
||||||
|
{
|
||||||
|
thread gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax );
|
||||||
|
}
|
||||||
|
|
||||||
|
gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax )
|
||||||
|
{
|
||||||
|
level endon( "stop all gunfireloopfx" );
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
|
if ( betweensetsmax < betweensetsmin )
|
||||||
|
{
|
||||||
|
temp = betweensetsmax;
|
||||||
|
betweensetsmax = betweensetsmin;
|
||||||
|
betweensetsmin = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
betweensetsbase = betweensetsmin;
|
||||||
|
betweensetsrange = betweensetsmax - betweensetsmin;
|
||||||
|
|
||||||
|
if ( shotdelaymax < shotdelaymin )
|
||||||
|
{
|
||||||
|
temp = shotdelaymax;
|
||||||
|
shotdelaymax = shotdelaymin;
|
||||||
|
shotdelaymin = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
shotdelaybase = shotdelaymin;
|
||||||
|
shotdelayrange = shotdelaymax - shotdelaymin;
|
||||||
|
|
||||||
|
if ( shotsmax < shotsmin )
|
||||||
|
{
|
||||||
|
temp = shotsmax;
|
||||||
|
shotsmax = shotsmin;
|
||||||
|
shotsmin = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
shotsbase = shotsmin;
|
||||||
|
shotsrange = shotsmax - shotsmin;
|
||||||
|
fxpos2 = vectornormalize( fxpos2 - fxpos );
|
||||||
|
fxent = spawnfx( level._effect[fxid], fxpos, fxpos2 );
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
shotnum = shotsbase + randomint( shotsrange );
|
||||||
|
|
||||||
|
for ( i = 0; i < int( shotnum / level.fxfireloopmod ); i++ )
|
||||||
|
{
|
||||||
|
triggerfx( fxent );
|
||||||
|
delay = ( shotdelaybase + randomfloat( shotdelayrange ) ) * level.fxfireloopmod;
|
||||||
|
|
||||||
|
if ( delay < 0.05 )
|
||||||
|
delay = 0.05;
|
||||||
|
|
||||||
|
wait( delay );
|
||||||
|
}
|
||||||
|
|
||||||
|
wait( shotdelaybase + randomfloat( shotdelayrange ) );
|
||||||
|
wait( betweensetsbase + randomfloat( betweensetsrange ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setfireloopmod( value )
|
||||||
|
{
|
||||||
|
level.fxfireloopmod = 1 / value;
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_fx()
|
||||||
|
{
|
||||||
|
if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
org = undefined;
|
||||||
|
|
||||||
|
if ( isdefined( self.target ) )
|
||||||
|
{
|
||||||
|
ent = getent( self.target, "targetname" );
|
||||||
|
|
||||||
|
if ( isdefined( ent ) )
|
||||||
|
org = ent.origin;
|
||||||
|
}
|
||||||
|
|
||||||
|
fxstart = undefined;
|
||||||
|
|
||||||
|
if ( isdefined( self.script_fxstart ) )
|
||||||
|
fxstart = self.script_fxstart;
|
||||||
|
|
||||||
|
fxstop = undefined;
|
||||||
|
|
||||||
|
if ( isdefined( self.script_fxstop ) )
|
||||||
|
fxstop = self.script_fxstop;
|
||||||
|
|
||||||
|
if ( self.script_fxcommand == "OneShotfx" )
|
||||||
|
oneshotfx( self.script_fxid, self.origin, self.script_delay, org );
|
||||||
|
|
||||||
|
if ( self.script_fxcommand == "loopfx" )
|
||||||
|
loopfx( self.script_fxid, self.origin, self.script_delay, org, fxstart, fxstop );
|
||||||
|
|
||||||
|
if ( self.script_fxcommand == "loopsound" )
|
||||||
|
loopsound( self.script_fxid, self.origin, self.script_delay );
|
||||||
|
|
||||||
|
self delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
script_print_fx()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) )
|
||||||
|
{
|
||||||
|
println( "Effect at origin ", self.origin, " doesn't have script_fxid/script_fxcommand/script_delay" );
|
||||||
|
self delete();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( isdefined( self.target ) )
|
||||||
|
org = getent( self.target, "targetname" ).origin;
|
||||||
|
else
|
||||||
|
org = "undefined";
|
||||||
|
|
||||||
|
if ( self.script_fxcommand == "OneShotfx" )
|
||||||
|
println( "mapsmp_fx::OneShotfx(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" );
|
||||||
|
|
||||||
|
if ( self.script_fxcommand == "loopfx" )
|
||||||
|
println( "mapsmp_fx::LoopFx(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" );
|
||||||
|
|
||||||
|
if ( self.script_fxcommand == "loopsound" )
|
||||||
|
println( "mapsmp_fx::LoopSound(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" );
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
script_playfx( id, pos, pos2 )
|
||||||
|
{
|
||||||
|
if ( !id )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ( isdefined( pos2 ) )
|
||||||
|
playfx( id, pos, pos2 );
|
||||||
|
else
|
||||||
|
playfx( id, pos );
|
||||||
|
}
|
||||||
|
|
||||||
|
script_playfxontag( id, ent, tag )
|
||||||
|
{
|
||||||
|
if ( !id )
|
||||||
|
return;
|
||||||
|
|
||||||
|
playfxontag( id, ent, tag );
|
||||||
|
}
|
||||||
|
|
||||||
|
grenadeexplosionfx( pos )
|
||||||
|
{
|
||||||
|
playfx( level._effect["mechanical explosion"], pos );
|
||||||
|
earthquake( 0.15, 0.5, pos, 250 );
|
||||||
|
}
|
||||||
|
|
||||||
|
soundfx( fxid, fxpos, endonnotify )
|
||||||
|
{
|
||||||
|
org = spawn( "script_origin", ( 0, 0, 0 ) );
|
||||||
|
org.origin = fxpos;
|
||||||
|
org playloopsound( fxid );
|
||||||
|
|
||||||
|
if ( isdefined( endonnotify ) )
|
||||||
|
org thread soundfxdelete( endonnotify );
|
||||||
|
}
|
||||||
|
|
||||||
|
soundfxdelete( endonnotify )
|
||||||
|
{
|
||||||
|
level waittill( endonnotify );
|
||||||
|
|
||||||
|
self delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
blenddelete( blend )
|
||||||
|
{
|
||||||
|
self waittill( "death" );
|
||||||
|
|
||||||
|
blend delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
spawnfx_wrapper( fx_id, origin, forward, up )
|
||||||
|
{
|
||||||
|
assert( isdefined( level._effect[fx_id] ), "Missing level._effect[\"" + fx_id + "\"]. You did not setup the fx before calling it in createFx." );
|
||||||
|
fx_object = spawnfx( level._effect[fx_id], origin, forward, up );
|
||||||
|
return fx_object;
|
||||||
|
}
|
@ -377,19 +377,19 @@ updatedebughud( hudindex, text, value )
|
|||||||
/#
|
/#
|
||||||
switch ( hudindex )
|
switch ( hudindex )
|
||||||
{
|
{
|
||||||
case "1":
|
case 1:
|
||||||
level.sessionadverthud_1a_text = text;
|
level.sessionadverthud_1a_text = text;
|
||||||
level.sessionadverthud_1b_text = value;
|
level.sessionadverthud_1b_text = value;
|
||||||
break;
|
break;
|
||||||
case "2":
|
case 2:
|
||||||
level.sessionadverthud_2a_text = text;
|
level.sessionadverthud_2a_text = text;
|
||||||
level.sessionadverthud_2b_text = value;
|
level.sessionadverthud_2b_text = value;
|
||||||
break;
|
break;
|
||||||
case "3":
|
case 3:
|
||||||
level.sessionadverthud_3a_text = text;
|
level.sessionadverthud_3a_text = text;
|
||||||
level.sessionadverthud_3b_text = value;
|
level.sessionadverthud_3b_text = value;
|
||||||
break;
|
break;
|
||||||
case "4":
|
case 4:
|
||||||
level.sessionadverthud_4a_text = text;
|
level.sessionadverthud_4a_text = text;
|
||||||
level.sessionadverthud_4b_text = value;
|
level.sessionadverthud_4b_text = value;
|
||||||
break;
|
break;
|
@ -150,9 +150,7 @@ watchhackertoolfired()
|
|||||||
self forceoffhandend();
|
self forceoffhandend();
|
||||||
clip_ammo = self getweaponammoclip( "pda_hack_mp" );
|
clip_ammo = self getweaponammoclip( "pda_hack_mp" );
|
||||||
clip_ammo--;
|
clip_ammo--;
|
||||||
/#
|
|
||||||
assert( clip_ammo >= 0 );
|
assert( clip_ammo >= 0 );
|
||||||
#/
|
|
||||||
self setweaponammoclip( "pda_hack_mp", clip_ammo );
|
self setweaponammoclip( "pda_hack_mp", clip_ammo );
|
||||||
self switchtoweapon( self getlastweapon() );
|
self switchtoweapon( self getlastweapon() );
|
||||||
}
|
}
|
||||||
@ -301,9 +299,8 @@ hackertooltargetloop()
|
|||||||
|
|
||||||
if ( self.hackertoollocktimeelapsed < locklengthms / 1000 )
|
if ( self.hackertoollocktimeelapsed < locklengthms / 1000 )
|
||||||
continue;
|
continue;
|
||||||
/#
|
|
||||||
assert( isdefined( self.hackertooltarget ) );
|
assert( isdefined( self.hackertooltarget ) );
|
||||||
#/
|
|
||||||
self notify( "stop_lockon_sound" );
|
self notify( "stop_lockon_sound" );
|
||||||
self.hackertoollockfinalized = 1;
|
self.hackertoollockfinalized = 1;
|
||||||
self weaponlockfinalize( self.hackertooltarget );
|
self weaponlockfinalize( self.hackertooltarget );
|
||||||
@ -564,9 +561,7 @@ gethackertoolradius( target )
|
|||||||
|
|
||||||
if ( isentityhackablecarepackage( target ) )
|
if ( isentityhackablecarepackage( target ) )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( target.hackertoolradius ) );
|
assert( isdefined( target.hackertoolradius ) );
|
||||||
#/
|
|
||||||
radius = target.hackertoolradius;
|
radius = target.hackertoolradius;
|
||||||
}
|
}
|
||||||
else if ( isentityhackableweaponobject( target ) )
|
else if ( isentityhackableweaponobject( target ) )
|
||||||
@ -629,9 +624,8 @@ gethacktime( target )
|
|||||||
|
|
||||||
if ( isentityhackablecarepackage( target ) )
|
if ( isentityhackablecarepackage( target ) )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( target.hackertooltimems ) );
|
assert( isdefined( target.hackertooltimems ) );
|
||||||
#/
|
|
||||||
if ( isdefined( target.owner ) && target.owner == self )
|
if ( isdefined( target.owner ) && target.owner == self )
|
||||||
time = level.carepackageownerhackertooltimems;
|
time = level.carepackageownerhackertooltimems;
|
||||||
else if ( isdefined( target.owner ) && target.owner.team == self.team )
|
else if ( isdefined( target.owner ) && target.owner.team == self.team )
|
@ -180,9 +180,8 @@ stingerirtloop()
|
|||||||
|
|
||||||
if ( timepassed < locklength )
|
if ( timepassed < locklength )
|
||||||
continue;
|
continue;
|
||||||
/#
|
|
||||||
assert( isdefined( self.stingertarget ) );
|
assert( isdefined( self.stingertarget ) );
|
||||||
#/
|
|
||||||
self notify( "stop_lockon_sound" );
|
self notify( "stop_lockon_sound" );
|
||||||
self.stingerlockfinalized = 1;
|
self.stingerlockfinalized = 1;
|
||||||
self weaponlockfinalize( self.stingertarget );
|
self weaponlockfinalize( self.stingertarget );
|
||||||
@ -428,9 +427,7 @@ initlockfield( target )
|
|||||||
|
|
||||||
lockingon( target, lock )
|
lockingon( target, lock )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( target.locking_on ) );
|
assert( isdefined( target.locking_on ) );
|
||||||
#/
|
|
||||||
clientnum = self getentitynumber();
|
clientnum = self getentitynumber();
|
||||||
|
|
||||||
if ( lock )
|
if ( lock )
|
||||||
@ -456,9 +453,7 @@ watchclearlockingon( target, clientnum )
|
|||||||
|
|
||||||
lockedon( target, lock )
|
lockedon( target, lock )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( target.locked_on ) );
|
assert( isdefined( target.locked_on ) );
|
||||||
#/
|
|
||||||
clientnum = self getentitynumber();
|
clientnum = self getentitynumber();
|
||||||
|
|
||||||
if ( lock )
|
if ( lock )
|
||||||
@ -519,9 +514,7 @@ _incomingmissiletracker( missile )
|
|||||||
missile waittill( "death" );
|
missile waittill( "death" );
|
||||||
|
|
||||||
self.incoming_missile--;
|
self.incoming_missile--;
|
||||||
/#
|
|
||||||
assert( self.incoming_missile >= 0 );
|
assert( self.incoming_missile >= 0 );
|
||||||
#/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
missiletarget_ismissileincoming()
|
missiletarget_ismissileincoming()
|
513
MP/Core/maps/mp/_load.gsc
Normal file
513
MP/Core/maps/mp/_load.gsc
Normal file
@ -0,0 +1,513 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\_script_gen;
|
||||||
|
#include maps\mp\gametypes\_spawning;
|
||||||
|
#include maps\mp\gametypes\_tweakables;
|
||||||
|
#include maps\mp\_destructible;
|
||||||
|
#include maps\mp\_riotshield;
|
||||||
|
#include maps\mp\_vehicles;
|
||||||
|
#include maps\mp\killstreaks\_dogs;
|
||||||
|
#include maps\mp\killstreaks\_ai_tank;
|
||||||
|
#include maps\mp\killstreaks\_rcbomb;
|
||||||
|
#include maps\mp\killstreaks\_helicopter_guard;
|
||||||
|
#include maps\mp\_trophy_system;
|
||||||
|
#include maps\mp\_proximity_grenade;
|
||||||
|
#include maps\mp\_audio;
|
||||||
|
#include maps\mp\_busing;
|
||||||
|
#include maps\mp\_music;
|
||||||
|
#include maps\mp\_fxanim;
|
||||||
|
#include maps\mp\_interactive_objects;
|
||||||
|
#include maps\mp\_serverfaceanim_mp;
|
||||||
|
#include maps\mp\_art;
|
||||||
|
#include maps\mp\_createfx;
|
||||||
|
#include maps\mp\_global_fx;
|
||||||
|
#include maps\mp\_demo;
|
||||||
|
#include maps\mp\_development_dvars;
|
||||||
|
#include maps\mp\_load;
|
||||||
|
#include maps\mp\animscripts\utility;
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\gametypes\_spawnlogic;
|
||||||
|
|
||||||
|
main( bscriptgened, bcsvgened, bsgenabled )
|
||||||
|
{
|
||||||
|
if ( !isdefined( level.script_gen_dump_reasons ) )
|
||||||
|
level.script_gen_dump_reasons = [];
|
||||||
|
|
||||||
|
if ( !isdefined( bsgenabled ) )
|
||||||
|
level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "First run";
|
||||||
|
|
||||||
|
if ( !isdefined( bcsvgened ) )
|
||||||
|
bcsvgened = 0;
|
||||||
|
|
||||||
|
level.bcsvgened = bcsvgened;
|
||||||
|
|
||||||
|
if ( !isdefined( bscriptgened ) )
|
||||||
|
bscriptgened = 0;
|
||||||
|
else
|
||||||
|
bscriptgened = 1;
|
||||||
|
|
||||||
|
level.bscriptgened = bscriptgened;
|
||||||
|
level._loadstarted = 1;
|
||||||
|
struct_class_init();
|
||||||
|
level.clientscripts = getdvar( "cg_usingClientScripts" ) != "";
|
||||||
|
level._client_exploders = [];
|
||||||
|
level._client_exploder_ids = [];
|
||||||
|
|
||||||
|
if ( !isdefined( level.flag ) )
|
||||||
|
{
|
||||||
|
level.flag = [];
|
||||||
|
level.flags_lock = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !isdefined( level.timeofday ) )
|
||||||
|
level.timeofday = "day";
|
||||||
|
|
||||||
|
flag_init( "scriptgen_done" );
|
||||||
|
level.script_gen_dump_reasons = [];
|
||||||
|
|
||||||
|
if ( !isdefined( level.script_gen_dump ) )
|
||||||
|
{
|
||||||
|
level.script_gen_dump = [];
|
||||||
|
level.script_gen_dump_reasons[0] = "First run";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !isdefined( level.script_gen_dump2 ) )
|
||||||
|
level.script_gen_dump2 = [];
|
||||||
|
|
||||||
|
if ( isdefined( level.createfxent ) )
|
||||||
|
script_gen_dump_addline( "maps\\mp\\createfx\\" + level.script + "_fx::main();", level.script + "_fx" );
|
||||||
|
|
||||||
|
if ( isdefined( level.script_gen_dump_preload ) )
|
||||||
|
{
|
||||||
|
for ( i = 0; i < level.script_gen_dump_preload.size; i++ )
|
||||||
|
script_gen_dump_addline( level.script_gen_dump_preload[i].string, level.script_gen_dump_preload[i].signature );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( getdvar( "scr_RequiredMapAspectratio" ) == "" )
|
||||||
|
setdvar( "scr_RequiredMapAspectratio", "1" );
|
||||||
|
|
||||||
|
setdvar( "r_waterFogTest", 0 );
|
||||||
|
setdvar( "tu6_player_shallowWaterHeight", "0.0" );
|
||||||
|
precacherumble( "reload_small" );
|
||||||
|
precacherumble( "reload_medium" );
|
||||||
|
precacherumble( "reload_large" );
|
||||||
|
precacherumble( "reload_clipin" );
|
||||||
|
precacherumble( "reload_clipout" );
|
||||||
|
precacherumble( "reload_rechamber" );
|
||||||
|
precacherumble( "pullout_small" );
|
||||||
|
precacherumble( "buzz_high" );
|
||||||
|
precacherumble( "riotshield_impact" );
|
||||||
|
registerclientsys( "levelNotify" );
|
||||||
|
level.aitriggerspawnflags = getaitriggerflags();
|
||||||
|
level.vehicletriggerspawnflags = getvehicletriggerflags();
|
||||||
|
level.physicstracemaskphysics = 1;
|
||||||
|
level.physicstracemaskvehicle = 2;
|
||||||
|
level.physicstracemaskwater = 4;
|
||||||
|
level.physicstracemaskclip = 8;
|
||||||
|
level.physicstracecontentsvehicleclip = 16;
|
||||||
|
level.createfx_enabled = getdvar( "createfx" ) != "";
|
||||||
|
|
||||||
|
if ( !sessionmodeiszombiesgame() )
|
||||||
|
{
|
||||||
|
thread maps\mp\gametypes\_spawning::init();
|
||||||
|
thread maps\mp\gametypes\_tweakables::init();
|
||||||
|
thread maps\mp\_destructible::init();
|
||||||
|
thread maps\mp\_riotshield::register();
|
||||||
|
thread maps\mp\_vehicles::init();
|
||||||
|
thread maps\mp\killstreaks\_dogs::init();
|
||||||
|
thread maps\mp\killstreaks\_ai_tank::register();
|
||||||
|
thread maps\mp\killstreaks\_rcbomb::register();
|
||||||
|
thread maps\mp\killstreaks\_helicopter_guard::register();
|
||||||
|
thread maps\mp\_trophy_system::register();
|
||||||
|
thread maps\mp\_proximity_grenade::register();
|
||||||
|
maps\mp\_audio::init();
|
||||||
|
thread maps\mp\_busing::businit();
|
||||||
|
thread maps\mp\_music::music_init();
|
||||||
|
thread maps\mp\_fxanim::init();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
level thread start_intro_screen_zm();
|
||||||
|
thread maps\mp\_interactive_objects::init();
|
||||||
|
maps\mp\_audio::init();
|
||||||
|
thread maps\mp\_busing::businit();
|
||||||
|
thread maps\mp\_music::music_init();
|
||||||
|
thread maps\mp\_fxanim::init();
|
||||||
|
thread maps\mp\_serverfaceanim_mp::init();
|
||||||
|
|
||||||
|
if ( level.createfx_enabled )
|
||||||
|
setinitialplayersconnected();
|
||||||
|
}
|
||||||
|
|
||||||
|
visionsetnight( "default_night" );
|
||||||
|
setup_traversals();
|
||||||
|
maps\mp\_art::main();
|
||||||
|
setupexploders();
|
||||||
|
parse_structs();
|
||||||
|
|
||||||
|
if ( sessionmodeiszombiesgame() )
|
||||||
|
thread footsteps();
|
||||||
|
/#
|
||||||
|
level thread level_notify_listener();
|
||||||
|
level thread client_notify_listener();
|
||||||
|
#/
|
||||||
|
thread maps\mp\_createfx::fx_init();
|
||||||
|
|
||||||
|
if ( level.createfx_enabled )
|
||||||
|
{
|
||||||
|
calculate_map_center();
|
||||||
|
maps\mp\_createfx::createfx();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( getdvar( "r_reflectionProbeGenerate" ) == "1" )
|
||||||
|
{
|
||||||
|
maps\mp\_global_fx::main();
|
||||||
|
|
||||||
|
level waittill( "eternity" );
|
||||||
|
}
|
||||||
|
|
||||||
|
thread maps\mp\_global_fx::main();
|
||||||
|
maps\mp\_demo::init();
|
||||||
|
|
||||||
|
if ( !sessionmodeiszombiesgame() )
|
||||||
|
thread maps\mp\_development_dvars::init();
|
||||||
|
|
||||||
|
for ( p = 0; p < 6; p++ )
|
||||||
|
{
|
||||||
|
switch ( p )
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
triggertype = "trigger_multiple";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
triggertype = "trigger_once";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
triggertype = "trigger_use";
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
triggertype = "trigger_radius";
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
triggertype = "trigger_lookat";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
assert( p == 5 );
|
||||||
|
triggertype = "trigger_damage";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
triggers = getentarray( triggertype, "classname" );
|
||||||
|
|
||||||
|
for ( i = 0; i < triggers.size; i++ )
|
||||||
|
{
|
||||||
|
if ( isdefined( triggers[i].script_prefab_exploder ) )
|
||||||
|
triggers[i].script_exploder = triggers[i].script_prefab_exploder;
|
||||||
|
|
||||||
|
if ( isdefined( triggers[i].script_exploder ) )
|
||||||
|
level thread maps\mp\_load::exploder_load( triggers[i] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
level_notify_listener()
|
||||||
|
{
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
val = getdvar( "level_notify" );
|
||||||
|
|
||||||
|
if ( val != "" )
|
||||||
|
{
|
||||||
|
level notify( val );
|
||||||
|
setdvar( "level_notify", "" );
|
||||||
|
}
|
||||||
|
|
||||||
|
wait 0.2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
client_notify_listener()
|
||||||
|
{
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
val = getdvar( "client_notify" );
|
||||||
|
|
||||||
|
if ( val != "" )
|
||||||
|
{
|
||||||
|
clientnotify( val );
|
||||||
|
setdvar( "client_notify", "" );
|
||||||
|
}
|
||||||
|
|
||||||
|
wait 0.2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
footsteps()
|
||||||
|
{
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "asphalt", loadfx( "bio/player/fx_footstep_dust" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "brick", loadfx( "bio/player/fx_footstep_dust" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "carpet", loadfx( "bio/player/fx_footstep_dust" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "cloth", loadfx( "bio/player/fx_footstep_dust" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "concrete", loadfx( "bio/player/fx_footstep_dust" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "dirt", loadfx( "bio/player/fx_footstep_sand" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "foliage", loadfx( "bio/player/fx_footstep_sand" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "gravel", loadfx( "bio/player/fx_footstep_dust" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "grass", loadfx( "bio/player/fx_footstep_dust" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "metal", loadfx( "bio/player/fx_footstep_dust" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "mud", loadfx( "bio/player/fx_footstep_mud" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "paper", loadfx( "bio/player/fx_footstep_dust" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "plaster", loadfx( "bio/player/fx_footstep_dust" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "rock", loadfx( "bio/player/fx_footstep_dust" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "sand", loadfx( "bio/player/fx_footstep_sand" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "water", loadfx( "bio/player/fx_footstep_water" ) );
|
||||||
|
maps\mp\animscripts\utility::setfootstepeffect( "wood", loadfx( "bio/player/fx_footstep_dust" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_structs()
|
||||||
|
{
|
||||||
|
for ( i = 0; i < level.struct.size; i++ )
|
||||||
|
{
|
||||||
|
if ( isdefined( level.struct[i].targetname ) )
|
||||||
|
{
|
||||||
|
if ( level.struct[i].targetname == "flak_fire_fx" )
|
||||||
|
{
|
||||||
|
level._effect["flak20_fire_fx"] = loadfx( "weapon/tracer/fx_tracer_flak_single_noExp" );
|
||||||
|
level._effect["flak38_fire_fx"] = loadfx( "weapon/tracer/fx_tracer_quad_20mm_Flak38_noExp" );
|
||||||
|
level._effect["flak_cloudflash_night"] = loadfx( "weapon/flak/fx_flak_cloudflash_night" );
|
||||||
|
level._effect["flak_burst_single"] = loadfx( "weapon/flak/fx_flak_single_day_dist" );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( level.struct[i].targetname == "fake_fire_fx" )
|
||||||
|
level._effect["distant_muzzleflash"] = loadfx( "weapon/muzzleflashes/heavy" );
|
||||||
|
|
||||||
|
if ( level.struct[i].targetname == "spotlight_fx" )
|
||||||
|
level._effect["spotlight_beam"] = loadfx( "env/light/fx_ray_spotlight_md" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exploder_load( trigger )
|
||||||
|
{
|
||||||
|
level endon( "killexplodertridgers" + trigger.script_exploder );
|
||||||
|
|
||||||
|
trigger waittill( "trigger" );
|
||||||
|
|
||||||
|
if ( isdefined( trigger.script_chance ) && randomfloat( 1 ) > trigger.script_chance )
|
||||||
|
{
|
||||||
|
if ( isdefined( trigger.script_delay ) )
|
||||||
|
wait( trigger.script_delay );
|
||||||
|
else
|
||||||
|
wait 4;
|
||||||
|
|
||||||
|
level thread exploder_load( trigger );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
maps\mp\_utility::exploder( trigger.script_exploder );
|
||||||
|
level notify( "killexplodertridgers" + trigger.script_exploder );
|
||||||
|
}
|
||||||
|
|
||||||
|
setupexploders()
|
||||||
|
{
|
||||||
|
ents = getentarray( "script_brushmodel", "classname" );
|
||||||
|
smodels = getentarray( "script_model", "classname" );
|
||||||
|
|
||||||
|
for ( i = 0; i < smodels.size; i++ )
|
||||||
|
ents[ents.size] = smodels[i];
|
||||||
|
|
||||||
|
for ( i = 0; i < ents.size; i++ )
|
||||||
|
{
|
||||||
|
if ( isdefined( ents[i].script_prefab_exploder ) )
|
||||||
|
ents[i].script_exploder = ents[i].script_prefab_exploder;
|
||||||
|
|
||||||
|
if ( isdefined( ents[i].script_exploder ) )
|
||||||
|
{
|
||||||
|
if ( ents[i].model == "fx" && ( !isdefined( ents[i].targetname ) || ents[i].targetname != "exploderchunk" ) )
|
||||||
|
{
|
||||||
|
ents[i] hide();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( isdefined( ents[i].targetname ) && ents[i].targetname == "exploder" )
|
||||||
|
{
|
||||||
|
ents[i] hide();
|
||||||
|
ents[i] notsolid();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( isdefined( ents[i].targetname ) && ents[i].targetname == "exploderchunk" )
|
||||||
|
{
|
||||||
|
ents[i] hide();
|
||||||
|
ents[i] notsolid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
script_exploders = [];
|
||||||
|
potentialexploders = getentarray( "script_brushmodel", "classname" );
|
||||||
|
|
||||||
|
for ( i = 0; i < potentialexploders.size; i++ )
|
||||||
|
{
|
||||||
|
if ( isdefined( potentialexploders[i].script_prefab_exploder ) )
|
||||||
|
potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder;
|
||||||
|
|
||||||
|
if ( isdefined( potentialexploders[i].script_exploder ) )
|
||||||
|
script_exploders[script_exploders.size] = potentialexploders[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
potentialexploders = getentarray( "script_model", "classname" );
|
||||||
|
|
||||||
|
for ( i = 0; i < potentialexploders.size; i++ )
|
||||||
|
{
|
||||||
|
if ( isdefined( potentialexploders[i].script_prefab_exploder ) )
|
||||||
|
potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder;
|
||||||
|
|
||||||
|
if ( isdefined( potentialexploders[i].script_exploder ) )
|
||||||
|
script_exploders[script_exploders.size] = potentialexploders[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
potentialexploders = getentarray( "item_health", "classname" );
|
||||||
|
|
||||||
|
for ( i = 0; i < potentialexploders.size; i++ )
|
||||||
|
{
|
||||||
|
if ( isdefined( potentialexploders[i].script_prefab_exploder ) )
|
||||||
|
potentialexploders[i].script_exploder = potentialexploders[i].script_prefab_exploder;
|
||||||
|
|
||||||
|
if ( isdefined( potentialexploders[i].script_exploder ) )
|
||||||
|
script_exploders[script_exploders.size] = potentialexploders[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !isdefined( level.createfxent ) )
|
||||||
|
level.createfxent = [];
|
||||||
|
|
||||||
|
acceptabletargetnames = [];
|
||||||
|
acceptabletargetnames["exploderchunk visible"] = 1;
|
||||||
|
acceptabletargetnames["exploderchunk"] = 1;
|
||||||
|
acceptabletargetnames["exploder"] = 1;
|
||||||
|
|
||||||
|
for ( i = 0; i < script_exploders.size; i++ )
|
||||||
|
{
|
||||||
|
exploder = script_exploders[i];
|
||||||
|
ent = createexploder( exploder.script_fxid );
|
||||||
|
ent.v = [];
|
||||||
|
ent.v["origin"] = exploder.origin;
|
||||||
|
ent.v["angles"] = exploder.angles;
|
||||||
|
ent.v["delay"] = exploder.script_delay;
|
||||||
|
ent.v["firefx"] = exploder.script_firefx;
|
||||||
|
ent.v["firefxdelay"] = exploder.script_firefxdelay;
|
||||||
|
ent.v["firefxsound"] = exploder.script_firefxsound;
|
||||||
|
ent.v["firefxtimeout"] = exploder.script_firefxtimeout;
|
||||||
|
ent.v["earthquake"] = exploder.script_earthquake;
|
||||||
|
ent.v["damage"] = exploder.script_damage;
|
||||||
|
ent.v["damage_radius"] = exploder.script_radius;
|
||||||
|
ent.v["soundalias"] = exploder.script_soundalias;
|
||||||
|
ent.v["repeat"] = exploder.script_repeat;
|
||||||
|
ent.v["delay_min"] = exploder.script_delay_min;
|
||||||
|
ent.v["delay_max"] = exploder.script_delay_max;
|
||||||
|
ent.v["target"] = exploder.target;
|
||||||
|
ent.v["ender"] = exploder.script_ender;
|
||||||
|
ent.v["type"] = "exploder";
|
||||||
|
|
||||||
|
if ( !isdefined( exploder.script_fxid ) )
|
||||||
|
ent.v["fxid"] = "No FX";
|
||||||
|
else
|
||||||
|
ent.v["fxid"] = exploder.script_fxid;
|
||||||
|
|
||||||
|
ent.v["exploder"] = exploder.script_exploder;
|
||||||
|
assert( isdefined( exploder.script_exploder ), "Exploder at origin " + exploder.origin + " has no script_exploder" );
|
||||||
|
|
||||||
|
if ( !isdefined( ent.v["delay"] ) )
|
||||||
|
ent.v["delay"] = 0;
|
||||||
|
|
||||||
|
if ( isdefined( exploder.target ) )
|
||||||
|
{
|
||||||
|
org = getent( ent.v["target"], "targetname" ).origin;
|
||||||
|
ent.v["angles"] = vectortoangles( org - ent.v["origin"] );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( exploder.classname == "script_brushmodel" || isdefined( exploder.model ) )
|
||||||
|
{
|
||||||
|
ent.model = exploder;
|
||||||
|
ent.model.disconnect_paths = exploder.script_disconnectpaths;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( isdefined( exploder.targetname ) && isdefined( acceptabletargetnames[exploder.targetname] ) )
|
||||||
|
ent.v["exploder_type"] = exploder.targetname;
|
||||||
|
else
|
||||||
|
ent.v["exploder_type"] = "normal";
|
||||||
|
|
||||||
|
ent maps\mp\_createfx::post_entity_creation_function();
|
||||||
|
}
|
||||||
|
|
||||||
|
level.createfxexploders = [];
|
||||||
|
|
||||||
|
for ( i = 0; i < level.createfxent.size; i++ )
|
||||||
|
{
|
||||||
|
ent = level.createfxent[i];
|
||||||
|
|
||||||
|
if ( ent.v["type"] != "exploder" )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ent.v["exploder_id"] = getexploderid( ent );
|
||||||
|
|
||||||
|
if ( !isdefined( level.createfxexploders[ent.v["exploder"]] ) )
|
||||||
|
level.createfxexploders[ent.v["exploder"]] = [];
|
||||||
|
|
||||||
|
level.createfxexploders[ent.v["exploder"]][level.createfxexploders[ent.v["exploder"]].size] = ent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_traversals()
|
||||||
|
{
|
||||||
|
potential_traverse_nodes = getallnodes();
|
||||||
|
|
||||||
|
for ( i = 0; i < potential_traverse_nodes.size; i++ )
|
||||||
|
{
|
||||||
|
node = potential_traverse_nodes[i];
|
||||||
|
|
||||||
|
if ( node.type == "Begin" )
|
||||||
|
node maps\mp\animscripts\traverse\shared::init_traverse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
calculate_map_center()
|
||||||
|
{
|
||||||
|
if ( !isdefined( level.mapcenter ) )
|
||||||
|
{
|
||||||
|
level.nodesmins = ( 0, 0, 0 );
|
||||||
|
level.nodesmaxs = ( 0, 0, 0 );
|
||||||
|
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.nodesmins, level.nodesmaxs );
|
||||||
|
/#
|
||||||
|
println( "map center: ", level.mapcenter );
|
||||||
|
#/
|
||||||
|
setmapcenter( level.mapcenter );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
start_intro_screen_zm()
|
||||||
|
{
|
||||||
|
if ( level.createfx_enabled )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ( !isdefined( level.introscreen ) )
|
||||||
|
{
|
||||||
|
level.introscreen = newhudelem();
|
||||||
|
level.introscreen.x = 0;
|
||||||
|
level.introscreen.y = 0;
|
||||||
|
level.introscreen.horzalign = "fullscreen";
|
||||||
|
level.introscreen.vertalign = "fullscreen";
|
||||||
|
level.introscreen.foreground = 0;
|
||||||
|
level.introscreen setshader( "black", 640, 480 );
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
|
||||||
|
level.introscreen.alpha = 1;
|
||||||
|
players = get_players();
|
||||||
|
|
||||||
|
for ( i = 0; i < players.size; i++ )
|
||||||
|
players[i] freezecontrols( 1 );
|
||||||
|
|
||||||
|
wait 1;
|
||||||
|
}
|
26
MP/Core/maps/mp/_music.gsc
Normal file
26
MP/Core/maps/mp/_music.gsc
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
|
||||||
|
music_init()
|
||||||
|
{
|
||||||
|
assert( level.clientscripts );
|
||||||
|
level.musicstate = "";
|
||||||
|
registerclientsys( "musicCmd" );
|
||||||
|
}
|
||||||
|
|
||||||
|
setmusicstate( state, player )
|
||||||
|
{
|
||||||
|
if ( isdefined( level.musicstate ) )
|
||||||
|
{
|
||||||
|
if ( isdefined( player ) )
|
||||||
|
{
|
||||||
|
setclientsysstate( "musicCmd", state, player );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if ( level.musicstate != state )
|
||||||
|
setclientsysstate( "musicCmd", state );
|
||||||
|
}
|
||||||
|
|
||||||
|
level.musicstate = state;
|
||||||
|
}
|
@ -198,12 +198,8 @@ damageplayerinradius( position, owner, einflictor )
|
|||||||
for ( i = 0; i < level.proximitygrenadedotdamageinstances; i++ )
|
for ( i = 0; i < level.proximitygrenadedotdamageinstances; i++ )
|
||||||
{
|
{
|
||||||
wait( level.proximitygrenadedotdamagetime );
|
wait( level.proximitygrenadedotdamagetime );
|
||||||
/#
|
|
||||||
assert( isdefined( owner ) );
|
assert( isdefined( owner ) );
|
||||||
#/
|
|
||||||
/#
|
|
||||||
assert( isdefined( killcament ) );
|
assert( isdefined( killcament ) );
|
||||||
#/
|
|
||||||
self dodamage( damage, position, owner, killcament, "none", "MOD_GAS", 0, "proximity_grenade_aoe_mp" );
|
self dodamage( damage, position, owner, killcament, "none", "MOD_GAS", 0, "proximity_grenade_aoe_mp" );
|
||||||
}
|
}
|
||||||
|
|
@ -241,7 +241,7 @@ spawnriotshieldcover( origin, angles )
|
|||||||
shield_ent.team = self.team;
|
shield_ent.team = self.team;
|
||||||
shield_ent setteam( self.team );
|
shield_ent setteam( self.team );
|
||||||
shield_ent attachreconmodel( level.detectshieldmodel, self );
|
shield_ent attachreconmodel( level.detectshieldmodel, self );
|
||||||
shield_ent useanimtree( -1 );
|
shield_ent useanimtree( #animtree );
|
||||||
shield_ent setscriptmoverflag( 0 );
|
shield_ent setscriptmoverflag( 0 );
|
||||||
shield_ent disconnectpaths();
|
shield_ent disconnectpaths();
|
||||||
return shield_ent;
|
return shield_ent;
|
||||||
@ -276,11 +276,7 @@ watchriotshielddeploy()
|
|||||||
assert( !isdefined( self.riotshieldentity ) );
|
assert( !isdefined( self.riotshieldentity ) );
|
||||||
|
|
||||||
if ( level.gametype != "shrp" )
|
if ( level.gametype != "shrp" )
|
||||||
{
|
|
||||||
/#
|
|
||||||
assert( primaries.size > 0 );
|
assert( primaries.size > 0 );
|
||||||
#/
|
|
||||||
}
|
|
||||||
#/
|
#/
|
||||||
shield_ent setclientfield( "riotshield_state", 1 );
|
shield_ent setclientfield( "riotshield_state", 1 );
|
||||||
shield_ent.reconmodel setclientfield( "riotshield_state", 1 );
|
shield_ent.reconmodel setclientfield( "riotshield_state", 1 );
|
||||||
@ -323,9 +319,7 @@ watchriotshielddeploy()
|
|||||||
|
|
||||||
riotshielddistancetest( origin )
|
riotshielddistancetest( origin )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( origin ) );
|
assert( isdefined( origin ) );
|
||||||
#/
|
|
||||||
min_dist_squared = getdvarfloat( "riotshield_deploy_limit_radius" );
|
min_dist_squared = getdvarfloat( "riotshield_deploy_limit_radius" );
|
||||||
min_dist_squared *= min_dist_squared;
|
min_dist_squared *= min_dist_squared;
|
||||||
|
|
||||||
@ -384,9 +378,9 @@ watchdeployedriotshielddamage()
|
|||||||
|
|
||||||
if ( !isdefined( attacker ) )
|
if ( !isdefined( attacker ) )
|
||||||
continue;
|
continue;
|
||||||
/#
|
|
||||||
assert( isdefined( self.owner ) && isdefined( self.owner.team ) );
|
assert( isdefined( self.owner ) && isdefined( self.owner.team ) );
|
||||||
#/
|
|
||||||
if ( isplayer( attacker ) )
|
if ( isplayer( attacker ) )
|
||||||
{
|
{
|
||||||
if ( level.teambased && attacker.team == self.owner.team && attacker != self.owner )
|
if ( level.teambased && attacker.team == self.owner.team && attacker != self.owner )
|
@ -28,9 +28,8 @@ scoreeventtablelookup( index, scoreeventcolumn )
|
|||||||
getscoreeventcolumn( gametype )
|
getscoreeventcolumn( gametype )
|
||||||
{
|
{
|
||||||
columnoffset = getcolumnoffsetforgametype( gametype );
|
columnoffset = getcolumnoffsetforgametype( gametype );
|
||||||
/#
|
|
||||||
assert( columnoffset >= 0 );
|
assert( columnoffset >= 0 );
|
||||||
#/
|
|
||||||
if ( columnoffset >= 0 )
|
if ( columnoffset >= 0 )
|
||||||
columnoffset += 0;
|
columnoffset += 0;
|
||||||
|
|
||||||
@ -40,9 +39,8 @@ getscoreeventcolumn( gametype )
|
|||||||
getxpeventcolumn( gametype )
|
getxpeventcolumn( gametype )
|
||||||
{
|
{
|
||||||
columnoffset = getcolumnoffsetforgametype( gametype );
|
columnoffset = getcolumnoffsetforgametype( gametype );
|
||||||
/#
|
|
||||||
assert( columnoffset >= 0 );
|
assert( columnoffset >= 0 );
|
||||||
#/
|
|
||||||
if ( columnoffset >= 0 )
|
if ( columnoffset >= 0 )
|
||||||
columnoffset += 1;
|
columnoffset += 1;
|
||||||
|
|
||||||
@ -55,9 +53,9 @@ getcolumnoffsetforgametype( gametype )
|
|||||||
|
|
||||||
if ( !isdefined( level.scoreeventtableid ) )
|
if ( !isdefined( level.scoreeventtableid ) )
|
||||||
level.scoreeventtableid = getscoreeventtableid();
|
level.scoreeventtableid = getscoreeventtableid();
|
||||||
/#
|
|
||||||
assert( isdefined( level.scoreeventtableid ) );
|
assert( isdefined( level.scoreeventtableid ) );
|
||||||
#/
|
|
||||||
if ( !isdefined( level.scoreeventtableid ) )
|
if ( !isdefined( level.scoreeventtableid ) )
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -81,9 +79,8 @@ getcolumnoffsetforgametype( gametype )
|
|||||||
|
|
||||||
gamemodecolumn += 2;
|
gamemodecolumn += 2;
|
||||||
}
|
}
|
||||||
/#
|
|
||||||
assert( foundgamemode, "Could not find gamemode in scoreInfo.csv:" + gametype );
|
assert( foundgamemode, "Could not find gamemode in scoreInfo.csv:" + gametype );
|
||||||
#/
|
|
||||||
return gamemodecolumn;
|
return gamemodecolumn;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,9 +91,8 @@ getscoreeventtableid()
|
|||||||
|
|
||||||
if ( isdefined( scoreinfotableid ) )
|
if ( isdefined( scoreinfotableid ) )
|
||||||
scoreinfotableloaded = 1;
|
scoreinfotableloaded = 1;
|
||||||
/#
|
|
||||||
assert( scoreinfotableloaded, "Score Event Table is not loaded: " + "mp/scoreInfo.csv" );
|
assert( scoreinfotableloaded, "Score Event Table is not loaded: " + "mp/scoreInfo.csv" );
|
||||||
#/
|
|
||||||
return scoreinfotableid;
|
return scoreinfotableid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -525,9 +521,7 @@ specificweaponkill( attacker, victim, weapon, killstreak )
|
|||||||
|
|
||||||
multikill( killcount, weapon )
|
multikill( killcount, weapon )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( killcount > 1 );
|
assert( killcount > 1 );
|
||||||
#/
|
|
||||||
self maps\mp\_challenges::multikill( killcount, weapon );
|
self maps\mp\_challenges::multikill( killcount, weapon );
|
||||||
|
|
||||||
if ( killcount > 8 )
|
if ( killcount > 8 )
|
||||||
@ -740,9 +734,7 @@ decrementlastobituaryplayercountafterfade()
|
|||||||
level endon( "reset_obituary_count" );
|
level endon( "reset_obituary_count" );
|
||||||
wait 5;
|
wait 5;
|
||||||
level.lastobituaryplayercount--;
|
level.lastobituaryplayercount--;
|
||||||
/#
|
|
||||||
assert( level.lastobituaryplayercount >= 0 );
|
assert( level.lastobituaryplayercount >= 0 );
|
||||||
#/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ongameend( data )
|
ongameend( data )
|
290
MP/Core/maps/mp/_script_gen.gsc
Normal file
290
MP/Core/maps/mp/_script_gen.gsc
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\_script_gen;
|
||||||
|
|
||||||
|
script_gen_dump_checksaved()
|
||||||
|
{
|
||||||
|
signatures = getarraykeys( level.script_gen_dump );
|
||||||
|
|
||||||
|
for ( i = 0; i < signatures.size; i++ )
|
||||||
|
{
|
||||||
|
if ( !isdefined( level.script_gen_dump2[signatures[i]] ) )
|
||||||
|
{
|
||||||
|
level.script_gen_dump[signatures[i]] = undefined;
|
||||||
|
level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "Signature unmatched( removed feature ): " + signatures[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
script_gen_dump()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
script_gen_dump_checksaved();
|
||||||
|
|
||||||
|
if ( !level.script_gen_dump_reasons.size )
|
||||||
|
{
|
||||||
|
flag_set( "scriptgen_done" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
firstrun = 0;
|
||||||
|
|
||||||
|
if ( level.bscriptgened )
|
||||||
|
{
|
||||||
|
println( " " );
|
||||||
|
println( " " );
|
||||||
|
println( " " );
|
||||||
|
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
||||||
|
println( "^3Dumping scriptgen dump for these reasons" );
|
||||||
|
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
||||||
|
|
||||||
|
for ( i = 0; i < level.script_gen_dump_reasons.size; i++ )
|
||||||
|
{
|
||||||
|
if ( issubstr( level.script_gen_dump_reasons[i], "nowrite" ) )
|
||||||
|
{
|
||||||
|
substr = getsubstr( level.script_gen_dump_reasons[i], 15 );
|
||||||
|
println( i + ". ) " + substr );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
println( i + ". ) " + level.script_gen_dump_reasons[i] );
|
||||||
|
|
||||||
|
if ( level.script_gen_dump_reasons[i] == "First run" )
|
||||||
|
firstrun = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
||||||
|
println( " " );
|
||||||
|
|
||||||
|
if ( firstrun )
|
||||||
|
{
|
||||||
|
println( "for First Run make sure you delete all of the vehicle precache script calls, createart calls, createfx calls( most commonly placed in maps\\" + level.script + "_fx.gsc ) " );
|
||||||
|
println( " " );
|
||||||
|
println( "replace:" );
|
||||||
|
println( "maps\\_load::main( 1 );" );
|
||||||
|
println( " " );
|
||||||
|
println( "with( don't forget to add this file to P4 ):" );
|
||||||
|
println( "maps\\scriptgen\\" + level.script + "_scriptgen::main();" );
|
||||||
|
println( " " );
|
||||||
|
}
|
||||||
|
|
||||||
|
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
||||||
|
println( " " );
|
||||||
|
println( "^2 / \\ / \\ / \\" );
|
||||||
|
println( "^2scroll up" );
|
||||||
|
println( "^2 / \\ / \\ / \\" );
|
||||||
|
println( " " );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
|
||||||
|
filename = "scriptgen/" + level.script + "_scriptgen.gsc";
|
||||||
|
csvfilename = "zone_source/" + level.script + ".csv";
|
||||||
|
|
||||||
|
if ( level.bscriptgened )
|
||||||
|
file = openfile( filename, "write" );
|
||||||
|
else
|
||||||
|
file = 0;
|
||||||
|
|
||||||
|
assert( file != -1, "File not writeable( check it and and restart the map ): " + filename );
|
||||||
|
script_gen_dumpprintln( file, "// script generated script do not write your own script here it will go away if you do." );
|
||||||
|
script_gen_dumpprintln( file, "main()" );
|
||||||
|
script_gen_dumpprintln( file, "{" );
|
||||||
|
script_gen_dumpprintln( file, "" );
|
||||||
|
script_gen_dumpprintln( file, "\\tlevel.script_gen_dump = [];" );
|
||||||
|
script_gen_dumpprintln( file, "" );
|
||||||
|
signatures = getarraykeys( level.script_gen_dump );
|
||||||
|
|
||||||
|
for ( i = 0; i < signatures.size; i++ )
|
||||||
|
{
|
||||||
|
if ( !issubstr( level.script_gen_dump[signatures[i]], "nowrite" ) )
|
||||||
|
script_gen_dumpprintln( file, "\\t" + level.script_gen_dump[signatures[i]] );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( i = 0; i < signatures.size; i++ )
|
||||||
|
{
|
||||||
|
if ( !issubstr( level.script_gen_dump[signatures[i]], "nowrite" ) )
|
||||||
|
{
|
||||||
|
script_gen_dumpprintln( file, "\\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"" + signatures[i] + "\"" + ";" );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
script_gen_dumpprintln( file, "\\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"nowrite\"" + ";" );
|
||||||
|
}
|
||||||
|
|
||||||
|
script_gen_dumpprintln( file, "" );
|
||||||
|
keys1 = undefined;
|
||||||
|
keys2 = undefined;
|
||||||
|
|
||||||
|
if ( isdefined( level.sg_precacheanims ) )
|
||||||
|
keys1 = getarraykeys( level.sg_precacheanims );
|
||||||
|
|
||||||
|
if ( isdefined( keys1 ) )
|
||||||
|
{
|
||||||
|
for ( i = 0; i < keys1.size; i++ )
|
||||||
|
script_gen_dumpprintln( file, "\\tanim_precach_" + keys1[i] + "();" );
|
||||||
|
}
|
||||||
|
|
||||||
|
script_gen_dumpprintln( file, "\\tmaps\\_load::main( 1, " + level.bcsvgened + ", 1 );" );
|
||||||
|
script_gen_dumpprintln( file, "}" );
|
||||||
|
script_gen_dumpprintln( file, "" );
|
||||||
|
|
||||||
|
if ( isdefined( level.sg_precacheanims ) )
|
||||||
|
keys1 = getarraykeys( level.sg_precacheanims );
|
||||||
|
|
||||||
|
if ( isdefined( keys1 ) )
|
||||||
|
{
|
||||||
|
for ( i = 0; i < keys1.size; i++ )
|
||||||
|
{
|
||||||
|
script_gen_dumpprintln( file, "#using_animtree( \"" + keys1[i] + "\" );" );
|
||||||
|
script_gen_dumpprintln( file, "anim_precach_" + keys1[i] + "()" );
|
||||||
|
script_gen_dumpprintln( file, "{" );
|
||||||
|
script_gen_dumpprintln( file, "\\tlevel.sg_animtree[ \"" + keys1[i] + "\" ] = #animtree;" );
|
||||||
|
keys2 = getarraykeys( level.sg_precacheanims[keys1[i]] );
|
||||||
|
|
||||||
|
if ( isdefined( keys2 ) )
|
||||||
|
{
|
||||||
|
for ( j = 0; j < keys2.size; j++ )
|
||||||
|
script_gen_dumpprintln( file, "\\tlevel.sg_anim[ \"" + keys2[j] + "\" ] = %" + keys2[j] + ";" );
|
||||||
|
}
|
||||||
|
|
||||||
|
script_gen_dumpprintln( file, "}" );
|
||||||
|
script_gen_dumpprintln( file, "" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( level.bscriptgened )
|
||||||
|
saved = closefile( file );
|
||||||
|
else
|
||||||
|
saved = 1;
|
||||||
|
|
||||||
|
if ( level.bcsvgened )
|
||||||
|
csvfile = openfile( csvfilename, "write" );
|
||||||
|
else
|
||||||
|
csvfile = 0;
|
||||||
|
|
||||||
|
assert( csvfile != -1, "File not writeable( check it and and restart the map ): " + csvfilename );
|
||||||
|
signatures = getarraykeys( level.script_gen_dump );
|
||||||
|
|
||||||
|
for ( i = 0; i < signatures.size; i++ )
|
||||||
|
script_gen_csvdumpprintln( csvfile, signatures[i] );
|
||||||
|
|
||||||
|
if ( level.bcsvgened )
|
||||||
|
csvfilesaved = closefile( csvfile );
|
||||||
|
else
|
||||||
|
csvfilesaved = 1;
|
||||||
|
|
||||||
|
assert( csvfilesaved == 1, "csv not saved( see above message? ): " + csvfilename );
|
||||||
|
assert( saved == 1, "map not saved( see above message? ): " + filename );
|
||||||
|
#/
|
||||||
|
assert( !level.bscriptgened, "SCRIPTGEN generated: follow instructions listed above this error in the console" );
|
||||||
|
|
||||||
|
if ( level.bscriptgened )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
assertmsg( "SCRIPTGEN updated: Rebuild fast file and run map again" );
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
flag_set( "scriptgen_done" );
|
||||||
|
}
|
||||||
|
|
||||||
|
script_gen_csvdumpprintln( file, signature )
|
||||||
|
{
|
||||||
|
prefix = undefined;
|
||||||
|
writtenprefix = undefined;
|
||||||
|
path = "";
|
||||||
|
extension = "";
|
||||||
|
|
||||||
|
if ( issubstr( signature, "ignore" ) )
|
||||||
|
prefix = "ignore";
|
||||||
|
else if ( issubstr( signature, "col_map_sp" ) )
|
||||||
|
prefix = "col_map_sp";
|
||||||
|
else if ( issubstr( signature, "gfx_map" ) )
|
||||||
|
prefix = "gfx_map";
|
||||||
|
else if ( issubstr( signature, "rawfile" ) )
|
||||||
|
prefix = "rawfile";
|
||||||
|
else if ( issubstr( signature, "sound" ) )
|
||||||
|
prefix = "sound";
|
||||||
|
else if ( issubstr( signature, "xmodel" ) )
|
||||||
|
prefix = "xmodel";
|
||||||
|
else if ( issubstr( signature, "xanim" ) )
|
||||||
|
prefix = "xanim";
|
||||||
|
else if ( issubstr( signature, "item" ) )
|
||||||
|
{
|
||||||
|
prefix = "item";
|
||||||
|
writtenprefix = "weapon";
|
||||||
|
path = "sp/";
|
||||||
|
}
|
||||||
|
else if ( issubstr( signature, "fx" ) )
|
||||||
|
prefix = "fx";
|
||||||
|
else if ( issubstr( signature, "menu" ) )
|
||||||
|
{
|
||||||
|
prefix = "menu";
|
||||||
|
writtenprefix = "menufile";
|
||||||
|
path = "ui / scriptmenus/";
|
||||||
|
extension = ".menu";
|
||||||
|
}
|
||||||
|
else if ( issubstr( signature, "rumble" ) )
|
||||||
|
{
|
||||||
|
prefix = "rumble";
|
||||||
|
writtenprefix = "rawfile";
|
||||||
|
path = "rumble/";
|
||||||
|
}
|
||||||
|
else if ( issubstr( signature, "shader" ) )
|
||||||
|
{
|
||||||
|
prefix = "shader";
|
||||||
|
writtenprefix = "material";
|
||||||
|
}
|
||||||
|
else if ( issubstr( signature, "shock" ) )
|
||||||
|
{
|
||||||
|
prefix = "shock";
|
||||||
|
writtenprefix = "rawfile";
|
||||||
|
extension = ".shock";
|
||||||
|
path = "shock/";
|
||||||
|
}
|
||||||
|
else if ( issubstr( signature, "string" ) )
|
||||||
|
{
|
||||||
|
prefix = "string";
|
||||||
|
/#
|
||||||
|
assertmsg( "string not yet supported by scriptgen" );
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
else if ( issubstr( signature, "turret" ) )
|
||||||
|
{
|
||||||
|
prefix = "turret";
|
||||||
|
writtenprefix = "weapon";
|
||||||
|
path = "sp/";
|
||||||
|
}
|
||||||
|
else if ( issubstr( signature, "vehicle" ) )
|
||||||
|
{
|
||||||
|
prefix = "vehicle";
|
||||||
|
writtenprefix = "rawfile";
|
||||||
|
path = "vehicles/";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !isdefined( prefix ) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ( !isdefined( writtenprefix ) )
|
||||||
|
string = prefix + ", " + getsubstr( signature, prefix.size + 1, signature.size );
|
||||||
|
else
|
||||||
|
string = writtenprefix + ", " + path + getsubstr( signature, prefix.size + 1, signature.size ) + extension;
|
||||||
|
/#
|
||||||
|
if ( file == -1 || !level.bcsvgened )
|
||||||
|
println( string );
|
||||||
|
else
|
||||||
|
fprintln( file, string );
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
script_gen_dumpprintln( file, string )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( file == -1 || !level.bscriptgened )
|
||||||
|
println( string );
|
||||||
|
else
|
||||||
|
fprintln( file, string );
|
||||||
|
#/
|
||||||
|
}
|
@ -172,10 +172,10 @@ damageinpoisonarea( gaseffectarea, killcament, trace, position )
|
|||||||
{
|
{
|
||||||
switch ( timer )
|
switch ( timer )
|
||||||
{
|
{
|
||||||
case "0":
|
case 0:
|
||||||
self shellshock( "tabun_gas_mp", 1.0 );
|
self shellshock( "tabun_gas_mp", 1.0 );
|
||||||
break;
|
break;
|
||||||
case "1":
|
case 1:
|
||||||
self shellshock( "tabun_gas_nokick_mp", 1.0 );
|
self shellshock( "tabun_gas_nokick_mp", 1.0 );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -348,22 +348,22 @@ spawnalllocs( owner, startpos )
|
|||||||
|
|
||||||
switch ( fxtoplay )
|
switch ( fxtoplay )
|
||||||
{
|
{
|
||||||
case "0":
|
case 0:
|
||||||
locations["fxtoplay"][i] = level.fx_tabun_0;
|
locations["fxtoplay"][i] = level.fx_tabun_0;
|
||||||
locations["radius"][i] = level.fx_tabun_radius0;
|
locations["radius"][i] = level.fx_tabun_radius0;
|
||||||
continue;
|
break;
|
||||||
case "1":
|
case 1:
|
||||||
locations["fxtoplay"][i] = level.fx_tabun_1;
|
locations["fxtoplay"][i] = level.fx_tabun_1;
|
||||||
locations["radius"][i] = level.fx_tabun_radius1;
|
locations["radius"][i] = level.fx_tabun_radius1;
|
||||||
continue;
|
break;
|
||||||
case "2":
|
case 2:
|
||||||
locations["fxtoplay"][i] = level.fx_tabun_2;
|
locations["fxtoplay"][i] = level.fx_tabun_2;
|
||||||
locations["radius"][i] = level.fx_tabun_radius2;
|
locations["radius"][i] = level.fx_tabun_radius2;
|
||||||
continue;
|
break;
|
||||||
case "3":
|
case 3:
|
||||||
locations["fxtoplay"][i] = level.fx_tabun_3;
|
locations["fxtoplay"][i] = level.fx_tabun_3;
|
||||||
locations["radius"][i] = level.fx_tabun_radius3;
|
locations["radius"][i] = level.fx_tabun_radius3;
|
||||||
continue;
|
break;
|
||||||
default:
|
default:
|
||||||
locations["fxtoplay"][i] = undefined;
|
locations["fxtoplay"][i] = undefined;
|
||||||
locations["radius"][i] = 0;
|
locations["radius"][i] = 0;
|
2671
MP/Core/maps/mp/_utility.gsc
Normal file
2671
MP/Core/maps/mp/_utility.gsc
Normal file
File diff suppressed because it is too large
Load Diff
@ -529,9 +529,7 @@ build_rumble( rumble, scale, duration, radius, basetime, randomaditionaltime )
|
|||||||
level.vehicle_rumble = [];
|
level.vehicle_rumble = [];
|
||||||
|
|
||||||
struct = build_quake( scale, duration, radius, basetime, randomaditionaltime );
|
struct = build_quake( scale, duration, radius, basetime, randomaditionaltime );
|
||||||
/#
|
|
||||||
assert( isdefined( rumble ) );
|
assert( isdefined( rumble ) );
|
||||||
#/
|
|
||||||
precacherumble( rumble );
|
precacherumble( rumble );
|
||||||
struct.rumble = rumble;
|
struct.rumble = rumble;
|
||||||
level.vehicle_rumble[level.vttype] = struct;
|
level.vehicle_rumble[level.vttype] = struct;
|
||||||
@ -713,7 +711,9 @@ do_dead_cleanup_wait( test_name )
|
|||||||
|
|
||||||
cleanup( test_name, cleanup_dvar_name, cleanup_func )
|
cleanup( test_name, cleanup_dvar_name, cleanup_func )
|
||||||
{
|
{
|
||||||
for ( keep_waiting = 1; keep_waiting; keep_waiting = 1 )
|
keep_waiting = 1;
|
||||||
|
|
||||||
|
while ( keep_waiting )
|
||||||
{
|
{
|
||||||
cleanupenabled = !isdefined( cleanup_dvar_name ) || getdvarint( cleanup_dvar_name ) != 0;
|
cleanupenabled = !isdefined( cleanup_dvar_name ) || getdvarint( cleanup_dvar_name ) != 0;
|
||||||
|
|
||||||
@ -724,9 +724,11 @@ cleanup( test_name, cleanup_dvar_name, cleanup_func )
|
|||||||
}
|
}
|
||||||
|
|
||||||
keep_waiting = 0;
|
keep_waiting = 0;
|
||||||
devblock( loc_395E );
|
/#
|
||||||
self cleanup_debug_print( "Cleanup disabled for " + test_name + " ( dvar = " + cleanup_dvar_name + " )" );
|
self cleanup_debug_print( "Cleanup disabled for " + test_name + " ( dvar = " + cleanup_dvar_name + " )" );
|
||||||
wait 5.0;
|
wait 5.0;
|
||||||
|
keep_waiting = 1;
|
||||||
|
#/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1506,9 +1508,7 @@ vehicle_disconnect_paths()
|
|||||||
follow_path( node )
|
follow_path( node )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
/#
|
|
||||||
assert( isdefined( node ), "vehicle_path() called without a path" );
|
assert( isdefined( node ), "vehicle_path() called without a path" );
|
||||||
#/
|
|
||||||
self notify( "newpath" );
|
self notify( "newpath" );
|
||||||
|
|
||||||
if ( isdefined( node ) )
|
if ( isdefined( node ) )
|
105
MP/Core/maps/mp/animscripts/dog_combat.gsc
Normal file
105
MP/Core/maps/mp/animscripts/dog_combat.gsc
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\animscripts\shared;
|
||||||
|
#include maps\mp\animscripts\utility;
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
debug_anim_print( "dog_combat::main() " );
|
||||||
|
self endon( "killanimscript" );
|
||||||
|
self setaimanimweights( 0, 0 );
|
||||||
|
/#
|
||||||
|
if ( !debug_allow_combat() )
|
||||||
|
{
|
||||||
|
combatidle();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
if ( isdefined( level.hostmigrationtimer ) )
|
||||||
|
{
|
||||||
|
combatidle();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert( isdefined( self.enemy ) );
|
||||||
|
|
||||||
|
if ( !isalive( self.enemy ) )
|
||||||
|
{
|
||||||
|
combatidle();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( isplayer( self.enemy ) )
|
||||||
|
self meleebiteattackplayer( self.enemy );
|
||||||
|
}
|
||||||
|
|
||||||
|
combatidle()
|
||||||
|
{
|
||||||
|
self set_orient_mode( "face enemy" );
|
||||||
|
self animmode( "zonly_physics", 0 );
|
||||||
|
idleanims = [];
|
||||||
|
idleanims[0] = "combat_attackidle";
|
||||||
|
idleanims[1] = "combat_attackidle_bark";
|
||||||
|
idleanims[2] = "combat_attackidle_growl";
|
||||||
|
idleanim = random( idleanims );
|
||||||
|
debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim );
|
||||||
|
self setanimstate( idleanim );
|
||||||
|
self maps\mp\animscripts\shared::donotetracks( "done" );
|
||||||
|
debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." );
|
||||||
|
}
|
||||||
|
|
||||||
|
meleebiteattackplayer( player )
|
||||||
|
{
|
||||||
|
self set_orient_mode( "face enemy" );
|
||||||
|
self animmode( "gravity", 0 );
|
||||||
|
self.safetochangescript = 0;
|
||||||
|
|
||||||
|
if ( use_low_attack() )
|
||||||
|
{
|
||||||
|
self animmode( "angle deltas", 0 );
|
||||||
|
self setanimstate( "combat_attack_player_close_range" );
|
||||||
|
wait 0.35;
|
||||||
|
|
||||||
|
if ( isplayer( self.enemy ) && self.enemy getstance() == "prone" )
|
||||||
|
self meleewithoffset( vectorscale( ( 0, 0, -1 ), 9.0 ) );
|
||||||
|
else
|
||||||
|
self melee();
|
||||||
|
|
||||||
|
self maps\mp\animscripts\shared::donotetracksfortime( 1.2, "done" );
|
||||||
|
self animmode( "gravity", 0 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
attack_time = 1.2 + randomfloat( 0.4 );
|
||||||
|
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" );
|
||||||
|
self setanimstate( "combat_attack_run" );
|
||||||
|
self maps\mp\animscripts\shared::donotetracksfortime( attack_time, "done", ::handlemeleebiteattacknotetracks, player );
|
||||||
|
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." );
|
||||||
|
}
|
||||||
|
|
||||||
|
self.safetochangescript = 1;
|
||||||
|
self animmode( "none", 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
handlemeleebiteattacknotetracks( note, player )
|
||||||
|
{
|
||||||
|
if ( note == "dog_melee" )
|
||||||
|
self melee( anglestoforward( self.angles ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
use_low_attack()
|
||||||
|
{
|
||||||
|
if ( isplayer( self.enemy ) )
|
||||||
|
{
|
||||||
|
if ( self.enemy getstance() == "prone" )
|
||||||
|
{
|
||||||
|
attack_height = self.origin[2] + 16;
|
||||||
|
|
||||||
|
if ( self.enemy.origin[2] < attack_height )
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
32
MP/Core/maps/mp/animscripts/dog_death.gsc
Normal file
32
MP/Core/maps/mp/animscripts/dog_death.gsc
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\utility;
|
||||||
|
#include maps\mp\animscripts\shared;
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
debug_anim_print( "dog_death::main()" );
|
||||||
|
self setaimanimweights( 0, 0 );
|
||||||
|
self endon( "killanimscript" );
|
||||||
|
|
||||||
|
if ( isdefined( self.a.nodeath ) )
|
||||||
|
{
|
||||||
|
assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." );
|
||||||
|
wait 3;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
self unlink();
|
||||||
|
|
||||||
|
if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self )
|
||||||
|
self.enemy.syncedmeleetarget = undefined;
|
||||||
|
|
||||||
|
death_anim = "death_" + getanimdirection( self.damageyaw );
|
||||||
|
/#
|
||||||
|
println( death_anim );
|
||||||
|
#/
|
||||||
|
self animmode( "gravity", 0 );
|
||||||
|
debug_anim_print( "dog_death::main() - Setting " + death_anim );
|
||||||
|
self setanimstate( death_anim );
|
||||||
|
self maps\mp\animscripts\shared::donotetracks( "done" );
|
||||||
|
}
|
127
MP/Core/maps/mp/animscripts/dog_stop.gsc
Normal file
127
MP/Core/maps/mp/animscripts/dog_stop.gsc
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\shared;
|
||||||
|
#include maps\mp\animscripts\utility;
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
debug_anim_print( "dog_stop::main()" );
|
||||||
|
self endon( "killanimscript" );
|
||||||
|
self setaimanimweights( 0, 0 );
|
||||||
|
self thread lookattarget( "attackIdle" );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
if ( shouldattackidle() )
|
||||||
|
{
|
||||||
|
self randomattackidle();
|
||||||
|
maps\mp\animscripts\shared::donotetracks( "done" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self set_orient_mode( "face current" );
|
||||||
|
debug_anim_print( "dog_stop::main() - Setting stop_idle" );
|
||||||
|
self notify( "stop tracking" );
|
||||||
|
self setaimanimweights( 0, 0 );
|
||||||
|
self setanimstate( "stop_idle" );
|
||||||
|
maps\mp\animscripts\shared::donotetracks( "done" );
|
||||||
|
self thread lookattarget( "attackIdle" );
|
||||||
|
}
|
||||||
|
|
||||||
|
debug_anim_print( "dog_stop::main() - stop idle loop notify done." );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
isfacingenemy( tolerancecosangle )
|
||||||
|
{
|
||||||
|
assert( isdefined( self.enemy ) );
|
||||||
|
vectoenemy = self.enemy.origin - self.origin;
|
||||||
|
disttoenemy = length( vectoenemy );
|
||||||
|
|
||||||
|
if ( disttoenemy < 1 )
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
forward = anglestoforward( self.angles );
|
||||||
|
val1 = forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1];
|
||||||
|
val2 = ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy;
|
||||||
|
return ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy > tolerancecosangle;
|
||||||
|
}
|
||||||
|
|
||||||
|
randomattackidle()
|
||||||
|
{
|
||||||
|
if ( isfacingenemy( -0.5 ) )
|
||||||
|
self set_orient_mode( "face current" );
|
||||||
|
else
|
||||||
|
self set_orient_mode( "face enemy" );
|
||||||
|
|
||||||
|
if ( should_growl() )
|
||||||
|
{
|
||||||
|
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" );
|
||||||
|
self setanimstate( "stop_attackidle_growl" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
idlechance = 33;
|
||||||
|
barkchance = 66;
|
||||||
|
|
||||||
|
if ( isdefined( self.mode ) )
|
||||||
|
{
|
||||||
|
if ( self.mode == "growl" )
|
||||||
|
{
|
||||||
|
idlechance = 15;
|
||||||
|
barkchance = 30;
|
||||||
|
}
|
||||||
|
else if ( self.mode == "bark" )
|
||||||
|
{
|
||||||
|
idlechance = 15;
|
||||||
|
barkchance = 85;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rand = randomint( 100 );
|
||||||
|
|
||||||
|
if ( rand < idlechance )
|
||||||
|
{
|
||||||
|
debug_anim_print( "dog_stop::main() - Setting stop_attackidle" );
|
||||||
|
self setanimstate( "stop_attackidle" );
|
||||||
|
}
|
||||||
|
else if ( rand < barkchance )
|
||||||
|
{
|
||||||
|
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_bark " );
|
||||||
|
self setanimstate( "stop_attackidle_bark" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl " );
|
||||||
|
self setanimstate( "stop_attackidle_growl" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shouldattackidle()
|
||||||
|
{
|
||||||
|
return isdefined( self.enemy ) && isalive( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 1000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
should_growl()
|
||||||
|
{
|
||||||
|
if ( isdefined( self.script_growl ) )
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if ( !isalive( self.enemy ) )
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return !self cansee( self.enemy );
|
||||||
|
}
|
||||||
|
|
||||||
|
lookattarget( lookposeset )
|
||||||
|
{
|
||||||
|
self endon( "killanimscript" );
|
||||||
|
self endon( "stop tracking" );
|
||||||
|
debug_anim_print( "dog_stop::lookAtTarget() - Starting look at " + lookposeset );
|
||||||
|
self.rightaimlimit = 90;
|
||||||
|
self.leftaimlimit = -90;
|
||||||
|
self.upaimlimit = 45;
|
||||||
|
self.downaimlimit = -45;
|
||||||
|
self maps\mp\animscripts\shared::setanimaimweight( 1, 0.2 );
|
||||||
|
self maps\mp\animscripts\shared::trackloop();
|
||||||
|
}
|
279
MP/Core/maps/mp/animscripts/shared.gsc
Normal file
279
MP/Core/maps/mp/animscripts/shared.gsc
Normal file
@ -0,0 +1,279 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\animscripts\utility;
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
|
||||||
|
handledogsoundnotetracks( note )
|
||||||
|
{
|
||||||
|
if ( note == "sound_dogstep_run_default" )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
prefix = getsubstr( note, 0, 5 );
|
||||||
|
|
||||||
|
if ( prefix != "sound" )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
growling()
|
||||||
|
{
|
||||||
|
return isdefined( self.script_growl );
|
||||||
|
}
|
||||||
|
|
||||||
|
handlenotetrack( note, flagname, customfunction, var1 )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( getdvarint( _hash_6EBEB982 ) )
|
||||||
|
println( "dog notetrack: " + flagname + " " + note + " " + gettime() );
|
||||||
|
#/
|
||||||
|
if ( isai( self ) && self.type == "dog" )
|
||||||
|
{
|
||||||
|
if ( handledogsoundnotetracks( note ) )
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ( note )
|
||||||
|
{
|
||||||
|
case "undefined":
|
||||||
|
case "finish":
|
||||||
|
case "end":
|
||||||
|
return note;
|
||||||
|
default:
|
||||||
|
if ( isdefined( customfunction ) )
|
||||||
|
{
|
||||||
|
if ( !isdefined( var1 ) )
|
||||||
|
return [[ customfunction ]]( note );
|
||||||
|
else
|
||||||
|
return [[ customfunction ]]( note, var1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
donotetracks( flagname, customfunction, var1 )
|
||||||
|
{
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
self waittill( flagname, note );
|
||||||
|
|
||||||
|
if ( !isdefined( note ) )
|
||||||
|
note = "undefined";
|
||||||
|
|
||||||
|
val = self handlenotetrack( note, flagname, customfunction, var1 );
|
||||||
|
|
||||||
|
if ( isdefined( val ) )
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 )
|
||||||
|
{
|
||||||
|
if ( isdefined( killstring ) )
|
||||||
|
self endon( killstring );
|
||||||
|
|
||||||
|
self endon( "killanimscript" );
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
time = gettime();
|
||||||
|
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
|
||||||
|
timetaken = gettime() - time;
|
||||||
|
|
||||||
|
if ( timetaken < 0.05 )
|
||||||
|
{
|
||||||
|
time = gettime();
|
||||||
|
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
|
||||||
|
timetaken = gettime() - time;
|
||||||
|
|
||||||
|
if ( timetaken < 0.05 )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
println( gettime() + " mapsmpanimscriptsshared::DoNoteTracksForever is trying to cause an infinite loop on anim " + flagname + ", returned " + returnednote + "." );
|
||||||
|
#/
|
||||||
|
wait( 0.05 - timetaken );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
donotetracksforever( flagname, killstring, customfunction, var1 )
|
||||||
|
{
|
||||||
|
donotetracksforeverproc( ::donotetracks, flagname, killstring, customfunction, var1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
donotetracksfortimeproc( donotetracksforeverfunc, time, flagname, customfunction, ent, var1 )
|
||||||
|
{
|
||||||
|
ent endon( "stop_notetracks" );
|
||||||
|
[[ donotetracksforeverfunc ]]( flagname, undefined, customfunction, var1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
donotetracksfortime( time, flagname, customfunction, var1 )
|
||||||
|
{
|
||||||
|
ent = spawnstruct();
|
||||||
|
ent thread donotetracksfortimeendnotify( time );
|
||||||
|
donotetracksfortimeproc( ::donotetracksforever, time, flagname, customfunction, ent, var1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
donotetracksfortimeendnotify( time )
|
||||||
|
{
|
||||||
|
wait( time );
|
||||||
|
self notify( "stop_notetracks" );
|
||||||
|
}
|
||||||
|
|
||||||
|
trackloop()
|
||||||
|
{
|
||||||
|
players = get_players();
|
||||||
|
deltachangeperframe = 5;
|
||||||
|
aimblendtime = 0.05;
|
||||||
|
prevyawdelta = 0;
|
||||||
|
prevpitchdelta = 0;
|
||||||
|
maxyawdeltachange = 5;
|
||||||
|
maxpitchdeltachange = 5;
|
||||||
|
pitchadd = 0;
|
||||||
|
yawadd = 0;
|
||||||
|
|
||||||
|
if ( self.type == "dog" || self.type == "zombie" || self.type == "zombie_dog" )
|
||||||
|
{
|
||||||
|
domaxanglecheck = 0;
|
||||||
|
self.shootent = self.enemy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
domaxanglecheck = 1;
|
||||||
|
|
||||||
|
if ( self.a.script == "cover_crouch" && isdefined( self.a.covermode ) && self.a.covermode == "lean" )
|
||||||
|
pitchadd = -1 * anim.covercrouchleanpitch;
|
||||||
|
|
||||||
|
if ( ( self.a.script == "cover_left" || self.a.script == "cover_right" ) && isdefined( self.a.cornermode ) && self.a.cornermode == "lean" )
|
||||||
|
yawadd = self.covernode.angles[1] - self.angles[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
yawdelta = 0;
|
||||||
|
pitchdelta = 0;
|
||||||
|
firstframe = 1;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
incranimaimweight();
|
||||||
|
selfshootatpos = ( self.origin[0], self.origin[1], self geteye()[2] );
|
||||||
|
shootpos = undefined;
|
||||||
|
|
||||||
|
if ( isdefined( self.enemy ) )
|
||||||
|
shootpos = self.enemy getshootatpos();
|
||||||
|
|
||||||
|
if ( !isdefined( shootpos ) )
|
||||||
|
{
|
||||||
|
yawdelta = 0;
|
||||||
|
pitchdelta = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vectortoshootpos = shootpos - selfshootatpos;
|
||||||
|
anglestoshootpos = vectortoangles( vectortoshootpos );
|
||||||
|
pitchdelta = 360 - anglestoshootpos[0];
|
||||||
|
pitchdelta = angleclamp180( pitchdelta + pitchadd );
|
||||||
|
yawdelta = self.angles[1] - anglestoshootpos[1];
|
||||||
|
yawdelta = angleclamp180( yawdelta + yawadd );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( domaxanglecheck && ( abs( yawdelta ) > 60 || abs( pitchdelta ) > 60 ) )
|
||||||
|
{
|
||||||
|
yawdelta = 0;
|
||||||
|
pitchdelta = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( yawdelta > self.rightaimlimit )
|
||||||
|
yawdelta = self.rightaimlimit;
|
||||||
|
else if ( yawdelta < self.leftaimlimit )
|
||||||
|
yawdelta = self.leftaimlimit;
|
||||||
|
|
||||||
|
if ( pitchdelta > self.upaimlimit )
|
||||||
|
pitchdelta = self.upaimlimit;
|
||||||
|
else if ( pitchdelta < self.downaimlimit )
|
||||||
|
pitchdelta = self.downaimlimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( firstframe )
|
||||||
|
firstframe = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
yawdeltachange = yawdelta - prevyawdelta;
|
||||||
|
|
||||||
|
if ( abs( yawdeltachange ) > maxyawdeltachange )
|
||||||
|
yawdelta = prevyawdelta + maxyawdeltachange * sign( yawdeltachange );
|
||||||
|
|
||||||
|
pitchdeltachange = pitchdelta - prevpitchdelta;
|
||||||
|
|
||||||
|
if ( abs( pitchdeltachange ) > maxpitchdeltachange )
|
||||||
|
pitchdelta = prevpitchdelta + maxpitchdeltachange * sign( pitchdeltachange );
|
||||||
|
}
|
||||||
|
|
||||||
|
prevyawdelta = yawdelta;
|
||||||
|
prevpitchdelta = pitchdelta;
|
||||||
|
updown = 0;
|
||||||
|
leftright = 0;
|
||||||
|
|
||||||
|
if ( yawdelta > 0 )
|
||||||
|
{
|
||||||
|
assert( yawdelta <= self.rightaimlimit );
|
||||||
|
weight = yawdelta / self.rightaimlimit * self.a.aimweight;
|
||||||
|
leftright = weight;
|
||||||
|
}
|
||||||
|
else if ( yawdelta < 0 )
|
||||||
|
{
|
||||||
|
assert( yawdelta >= self.leftaimlimit );
|
||||||
|
weight = yawdelta / self.leftaimlimit * self.a.aimweight;
|
||||||
|
leftright = -1 * weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pitchdelta > 0 )
|
||||||
|
{
|
||||||
|
assert( pitchdelta <= self.upaimlimit );
|
||||||
|
weight = pitchdelta / self.upaimlimit * self.a.aimweight;
|
||||||
|
updown = weight;
|
||||||
|
}
|
||||||
|
else if ( pitchdelta < 0 )
|
||||||
|
{
|
||||||
|
assert( pitchdelta >= self.downaimlimit );
|
||||||
|
weight = pitchdelta / self.downaimlimit * self.a.aimweight;
|
||||||
|
updown = -1 * weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
self setaimanimweights( updown, leftright );
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setanimaimweight( goalweight, goaltime )
|
||||||
|
{
|
||||||
|
if ( !isdefined( goaltime ) || goaltime <= 0 )
|
||||||
|
{
|
||||||
|
self.a.aimweight = goalweight;
|
||||||
|
self.a.aimweight_start = goalweight;
|
||||||
|
self.a.aimweight_end = goalweight;
|
||||||
|
self.a.aimweight_transframes = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self.a.aimweight = goalweight;
|
||||||
|
self.a.aimweight_start = self.a.aimweight;
|
||||||
|
self.a.aimweight_end = goalweight;
|
||||||
|
self.a.aimweight_transframes = int( goaltime * 20 );
|
||||||
|
}
|
||||||
|
|
||||||
|
self.a.aimweight_t = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
incranimaimweight()
|
||||||
|
{
|
||||||
|
if ( self.a.aimweight_t < self.a.aimweight_transframes )
|
||||||
|
{
|
||||||
|
self.a.aimweight_t++;
|
||||||
|
t = 1.0 * self.a.aimweight_t / self.a.aimweight_transframes;
|
||||||
|
self.a.aimweight = self.a.aimweight_start * ( 1 - t ) + self.a.aimweight_end * t;
|
||||||
|
}
|
||||||
|
}
|
195
MP/Core/maps/mp/animscripts/traverse/shared.gsc
Normal file
195
MP/Core/maps/mp/animscripts/traverse/shared.gsc
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\utility;
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\animscripts\shared;
|
||||||
|
|
||||||
|
init_traverse()
|
||||||
|
{
|
||||||
|
point = getent( self.target, "targetname" );
|
||||||
|
|
||||||
|
if ( isdefined( point ) )
|
||||||
|
{
|
||||||
|
self.traverse_height = point.origin[2];
|
||||||
|
point delete();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
point = getstruct( self.target, "targetname" );
|
||||||
|
|
||||||
|
if ( isdefined( point ) )
|
||||||
|
self.traverse_height = point.origin[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
teleportthread( verticaloffset )
|
||||||
|
{
|
||||||
|
self endon( "killanimscript" );
|
||||||
|
self notify( "endTeleportThread" );
|
||||||
|
self endon( "endTeleportThread" );
|
||||||
|
reps = 5;
|
||||||
|
offset = ( 0, 0, verticaloffset / reps );
|
||||||
|
|
||||||
|
for ( i = 0; i < reps; i++ )
|
||||||
|
{
|
||||||
|
self teleport( self.origin + offset );
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
teleportthreadex( verticaloffset, delay, frames )
|
||||||
|
{
|
||||||
|
self endon( "killanimscript" );
|
||||||
|
self notify( "endTeleportThread" );
|
||||||
|
self endon( "endTeleportThread" );
|
||||||
|
|
||||||
|
if ( verticaloffset == 0 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
wait( delay );
|
||||||
|
amount = verticaloffset / frames;
|
||||||
|
|
||||||
|
if ( amount > 10.0 )
|
||||||
|
amount = 10.0;
|
||||||
|
else if ( amount < -10.0 )
|
||||||
|
amount = -10.0;
|
||||||
|
|
||||||
|
offset = ( 0, 0, amount );
|
||||||
|
|
||||||
|
for ( i = 0; i < frames; i++ )
|
||||||
|
{
|
||||||
|
self teleport( self.origin + offset );
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dog_wall_and_window_hop( traversename, height )
|
||||||
|
{
|
||||||
|
self endon( "killanimscript" );
|
||||||
|
self traversemode( "nogravity" );
|
||||||
|
self traversemode( "noclip" );
|
||||||
|
startnode = self getnegotiationstartnode();
|
||||||
|
assert( isdefined( startnode ) );
|
||||||
|
self orientmode( "face angle", startnode.angles[1] );
|
||||||
|
|
||||||
|
if ( isdefined( startnode.traverse_height ) )
|
||||||
|
{
|
||||||
|
realheight = startnode.traverse_height - startnode.origin[2];
|
||||||
|
self thread teleportthread( realheight - height );
|
||||||
|
}
|
||||||
|
else if ( height != 36.0 )
|
||||||
|
self thread teleportthreadex( height - 36.0, 0.2, 7 );
|
||||||
|
|
||||||
|
debug_anim_print( "traverse::dog_wall_and_window_hop() - Setting " + traversename );
|
||||||
|
self setanimstate( traversename );
|
||||||
|
maps\mp\animscripts\shared::donotetracksfortime( 1.0, "done" );
|
||||||
|
debug_anim_print( "traverse::dog_wall_and_window_hop() - " + traversename );
|
||||||
|
self.traversecomplete = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
dog_jump_down( height, frames, time )
|
||||||
|
{
|
||||||
|
self endon( "killanimscript" );
|
||||||
|
self traversemode( "noclip" );
|
||||||
|
|
||||||
|
if ( !isdefined( time ) )
|
||||||
|
time = 0.3;
|
||||||
|
|
||||||
|
startnode = self getnegotiationstartnode();
|
||||||
|
assert( isdefined( startnode ) );
|
||||||
|
self orientmode( "face angle", startnode.angles[1] );
|
||||||
|
|
||||||
|
if ( isdefined( startnode.traverse_height ) )
|
||||||
|
{
|
||||||
|
realheight = startnode.traverse_height - startnode.origin[2];
|
||||||
|
self thread teleportthread( realheight - height );
|
||||||
|
}
|
||||||
|
else if ( height != 40.0 )
|
||||||
|
self thread teleportthreadex( height - 40.0, 0.1, frames );
|
||||||
|
|
||||||
|
debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_40" );
|
||||||
|
self setanimstate( "traverse_jump_down_40" );
|
||||||
|
maps\mp\animscripts\shared::donotetracksfortime( time, "done" );
|
||||||
|
debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_40 " );
|
||||||
|
self traversemode( "gravity" );
|
||||||
|
self.traversecomplete = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
dog_jump_down_far( height, frames, time )
|
||||||
|
{
|
||||||
|
self endon( "killanimscript" );
|
||||||
|
self traversemode( "noclip" );
|
||||||
|
|
||||||
|
if ( !isdefined( time ) )
|
||||||
|
time = 0.3;
|
||||||
|
|
||||||
|
startnode = self getnegotiationstartnode();
|
||||||
|
assert( isdefined( startnode ) );
|
||||||
|
self orientmode( "face angle", startnode.angles[1] );
|
||||||
|
|
||||||
|
if ( isdefined( startnode.traverse_height ) )
|
||||||
|
{
|
||||||
|
realheight = startnode.traverse_height - startnode.origin[2];
|
||||||
|
self thread teleportthread( realheight - height );
|
||||||
|
}
|
||||||
|
else if ( height != 80.0 )
|
||||||
|
self thread teleportthreadex( 80.0 - height, 0.1, frames );
|
||||||
|
|
||||||
|
debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_80" );
|
||||||
|
self setanimstate( "traverse_jump_down_80" );
|
||||||
|
maps\mp\animscripts\shared::donotetracksfortime( time, "done" );
|
||||||
|
debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_80 " );
|
||||||
|
self traversemode( "gravity" );
|
||||||
|
self.traversecomplete = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
dog_jump_up( height, frames )
|
||||||
|
{
|
||||||
|
self endon( "killanimscript" );
|
||||||
|
self traversemode( "noclip" );
|
||||||
|
startnode = self getnegotiationstartnode();
|
||||||
|
assert( isdefined( startnode ) );
|
||||||
|
self orientmode( "face angle", startnode.angles[1] );
|
||||||
|
|
||||||
|
if ( isdefined( startnode.traverse_height ) )
|
||||||
|
{
|
||||||
|
realheight = startnode.traverse_height - startnode.origin[2];
|
||||||
|
self thread teleportthread( realheight - height );
|
||||||
|
}
|
||||||
|
else if ( height != 40.0 )
|
||||||
|
self thread teleportthreadex( height - 40.0, 0.2, frames );
|
||||||
|
|
||||||
|
debug_anim_print( "traverse::dog_jump_up() - Setting traverse_jump_up_40" );
|
||||||
|
self setanimstate( "traverse_jump_up_40" );
|
||||||
|
maps\mp\animscripts\shared::donotetracksfortime( 0.5, "done" );
|
||||||
|
debug_anim_print( "traverse::dog_jump_up() - traverse_jump_up_40 " );
|
||||||
|
self traversemode( "gravity" );
|
||||||
|
self.traversecomplete = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
dog_jump_up_high( height, frames )
|
||||||
|
{
|
||||||
|
assert( self.type == "dog", "Only dogs can do this traverse currently." );
|
||||||
|
self endon( "killanimscript" );
|
||||||
|
self traversemode( "nogravity" );
|
||||||
|
self traversemode( "noclip" );
|
||||||
|
startnode = self getnegotiationstartnode();
|
||||||
|
assert( isdefined( startnode ) );
|
||||||
|
self orientmode( "face angle", startnode.angles[1] );
|
||||||
|
|
||||||
|
if ( isdefined( startnode.traverse_height ) )
|
||||||
|
{
|
||||||
|
realheight = startnode.traverse_height - startnode.origin[2];
|
||||||
|
self thread teleportthreadex( height - 80, 0.2, frames );
|
||||||
|
}
|
||||||
|
else if ( height != 80.0 )
|
||||||
|
self thread teleportthreadex( height - 80.0, 0.2, frames );
|
||||||
|
|
||||||
|
debug_anim_print( "traverse::dog_jump_up_80() - Setting traverse_jump_up_80" );
|
||||||
|
self setanimstate( "traverse_jump_up_80" );
|
||||||
|
maps\mp\animscripts\shared::donotetracksfortime( 0.6, "done" );
|
||||||
|
debug_anim_print( "traverse::dog_jump_up_80() - traverse_jump_up_80 " );
|
||||||
|
self traversemode( "gravity" );
|
||||||
|
self.traversecomplete = 1;
|
||||||
|
}
|
@ -10,9 +10,7 @@ main()
|
|||||||
self traversemode( "nogravity" );
|
self traversemode( "nogravity" );
|
||||||
self traversemode( "noclip" );
|
self traversemode( "noclip" );
|
||||||
startnode = self getnegotiationstartnode();
|
startnode = self getnegotiationstartnode();
|
||||||
/#
|
|
||||||
assert( isdefined( startnode ) );
|
assert( isdefined( startnode ) );
|
||||||
#/
|
|
||||||
self orientmode( "face angle", startnode.angles[1] );
|
self orientmode( "face angle", startnode.angles[1] );
|
||||||
|
|
||||||
if ( isdefined( startnode.traverse_height ) )
|
if ( isdefined( startnode.traverse_height ) )
|
135
MP/Core/maps/mp/animscripts/utility.gsc
Normal file
135
MP/Core/maps/mp/animscripts/utility.gsc
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
|
||||||
|
anim_get_dvar_int( dvar, def )
|
||||||
|
{
|
||||||
|
return int( anim_get_dvar( dvar, def ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
anim_get_dvar( dvar, def )
|
||||||
|
{
|
||||||
|
if ( getdvar( dvar ) != "" )
|
||||||
|
return getdvarfloat( dvar );
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setdvar( dvar, def );
|
||||||
|
return def;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
set_orient_mode( mode, val1 )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( level.dog_debug_orient == self getentnum() )
|
||||||
|
{
|
||||||
|
if ( isdefined( val1 ) )
|
||||||
|
println( "DOG: Setting orient mode: " + mode + " " + val1 + " " + gettime() );
|
||||||
|
else
|
||||||
|
println( "DOG: Setting orient mode: " + mode + " " + gettime() );
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
if ( isdefined( val1 ) )
|
||||||
|
self orientmode( mode, val1 );
|
||||||
|
else
|
||||||
|
self orientmode( mode );
|
||||||
|
}
|
||||||
|
|
||||||
|
debug_anim_print( text )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( level.dog_debug_anims )
|
||||||
|
println( text + " " + gettime() );
|
||||||
|
|
||||||
|
if ( level.dog_debug_anims_ent == self getentnum() )
|
||||||
|
println( text + " " + gettime() );
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
debug_turn_print( text, line )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
if ( level.dog_debug_turns == self getentnum() )
|
||||||
|
{
|
||||||
|
duration = 200;
|
||||||
|
currentyawcolor = ( 1, 1, 1 );
|
||||||
|
lookaheadyawcolor = ( 1, 0, 0 );
|
||||||
|
desiredyawcolor = ( 1, 1, 0 );
|
||||||
|
currentyaw = angleclamp180( self.angles[1] );
|
||||||
|
desiredyaw = angleclamp180( self.desiredangle );
|
||||||
|
lookaheaddir = self.lookaheaddir;
|
||||||
|
lookaheadangles = vectortoangles( lookaheaddir );
|
||||||
|
lookaheadyaw = angleclamp180( lookaheadangles[1] );
|
||||||
|
println( text + " " + gettime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw );
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
debug_allow_movement()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
return anim_get_dvar_int( "debug_dog_allow_movement", "1" );
|
||||||
|
#/
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
debug_allow_combat()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
return anim_get_dvar_int( "debug_dog_allow_combat", "1" );
|
||||||
|
#/
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
current_yaw_line_debug( duration )
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
currentyawcolor = [];
|
||||||
|
currentyawcolor[0] = ( 0, 0, 1 );
|
||||||
|
currentyawcolor[1] = ( 1, 0, 1 );
|
||||||
|
current_color_index = 0;
|
||||||
|
start_time = gettime();
|
||||||
|
|
||||||
|
if ( !isdefined( level.lastdebugheight ) )
|
||||||
|
level.lastdebugheight = 15;
|
||||||
|
|
||||||
|
while ( gettime() - start_time < 1000 )
|
||||||
|
{
|
||||||
|
pos1 = ( self.origin[0], self.origin[1], self.origin[2] + level.lastdebugheight );
|
||||||
|
pos2 = pos1 + vectorscale( anglestoforward( self.angles ), ( current_color_index + 1 ) * 10 );
|
||||||
|
line( pos1, pos2, currentyawcolor[current_color_index], 0.3, 1, duration );
|
||||||
|
current_color_index = ( current_color_index + 1 ) % currentyawcolor.size;
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( level.lastdebugheight == 15 )
|
||||||
|
level.lastdebugheight = 30;
|
||||||
|
else
|
||||||
|
level.lastdebugheight = 15;
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
getanimdirection( damageyaw )
|
||||||
|
{
|
||||||
|
if ( damageyaw > 135 || damageyaw <= -135 )
|
||||||
|
return "front";
|
||||||
|
else if ( damageyaw > 45 && damageyaw <= 135 )
|
||||||
|
return "right";
|
||||||
|
else if ( damageyaw > -45 && damageyaw <= 45 )
|
||||||
|
return "back";
|
||||||
|
else
|
||||||
|
return "left";
|
||||||
|
|
||||||
|
return "front";
|
||||||
|
}
|
||||||
|
|
||||||
|
setfootstepeffect( name, fx )
|
||||||
|
{
|
||||||
|
assert( isdefined( name ), "Need to define the footstep surface type." );
|
||||||
|
assert( isdefined( fx ), "Need to define the mud footstep effect." );
|
||||||
|
|
||||||
|
if ( !isdefined( anim.optionalstepeffects ) )
|
||||||
|
anim.optionalstepeffects = [];
|
||||||
|
|
||||||
|
anim.optionalstepeffects[anim.optionalstepeffects.size] = name;
|
||||||
|
level._effect["step_" + name] = fx;
|
||||||
|
}
|
@ -229,17 +229,11 @@ bot_count_enemy_bots( friend_team )
|
|||||||
bot_choose_comp_stomp_team()
|
bot_choose_comp_stomp_team()
|
||||||
{
|
{
|
||||||
host = gethostplayerforbots();
|
host = gethostplayerforbots();
|
||||||
/#
|
|
||||||
assert( isdefined( host ) );
|
assert( isdefined( host ) );
|
||||||
#/
|
|
||||||
teamkeys = getarraykeys( level.teams );
|
teamkeys = getarraykeys( level.teams );
|
||||||
/#
|
|
||||||
assert( teamkeys.size == 2 );
|
assert( teamkeys.size == 2 );
|
||||||
#/
|
|
||||||
enemy_team = host.pers["team"];
|
enemy_team = host.pers["team"];
|
||||||
/#
|
|
||||||
assert( isdefined( enemy_team ) && enemy_team != "spectator" );
|
assert( isdefined( enemy_team ) && enemy_team != "spectator" );
|
||||||
#/
|
|
||||||
return getotherteam( enemy_team );
|
return getotherteam( enemy_team );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,9 +432,7 @@ bot_local_think()
|
|||||||
{
|
{
|
||||||
wait 5;
|
wait 5;
|
||||||
host = gethostplayerforbots();
|
host = gethostplayerforbots();
|
||||||
/#
|
|
||||||
assert( isdefined( host ) );
|
assert( isdefined( host ) );
|
||||||
#/
|
|
||||||
host_team = host.team;
|
host_team = host.team;
|
||||||
|
|
||||||
if ( !isdefined( host_team ) || host_team == "spectator" )
|
if ( !isdefined( host_team ) || host_team == "spectator" )
|
||||||
@ -562,10 +554,8 @@ bot_choose_class()
|
|||||||
{
|
{
|
||||||
self notify( "menuresponse", "changeclass", bot_classes[i] );
|
self notify( "menuresponse", "changeclass", bot_classes[i] );
|
||||||
return;
|
return;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
else if ( sidearm == "smaw_mp" )
|
||||||
if ( sidearm == "smaw_mp" )
|
|
||||||
{
|
{
|
||||||
bot_classes[bot_classes.size] = bot_classes[i];
|
bot_classes[bot_classes.size] = bot_classes[i];
|
||||||
bot_classes[bot_classes.size] = bot_classes[i];
|
bot_classes[bot_classes.size] = bot_classes[i];
|
||||||
@ -1008,9 +998,7 @@ bot_update_crouch()
|
|||||||
if ( dist > 0 )
|
if ( dist > 0 )
|
||||||
{
|
{
|
||||||
dir = self getlookaheaddir();
|
dir = self getlookaheaddir();
|
||||||
/#
|
|
||||||
assert( isdefined( dir ) );
|
assert( isdefined( dir ) );
|
||||||
#/
|
|
||||||
dir = vectorscale( dir, dist );
|
dir = vectorscale( dir, dist );
|
||||||
start = self.origin + vectorscale( ( 0, 0, 1 ), 70.0 );
|
start = self.origin + vectorscale( ( 0, 0, 1 ), 70.0 );
|
||||||
end = start + dir;
|
end = start + dir;
|
||||||
@ -1068,11 +1056,8 @@ bot_has_radar()
|
|||||||
return isdefined( self.hasspyplane ) && self.hasspyplane || isdefined( self.hassatellite ) && self.hassatellite;
|
return isdefined( self.hasspyplane ) && self.hasspyplane || isdefined( self.hassatellite ) && self.hassatellite;
|
||||||
}
|
}
|
||||||
|
|
||||||
bot_get_enemies( on_radar )
|
bot_get_enemies( on_radar = 0 )
|
||||||
{
|
{
|
||||||
if ( !isdefined( on_radar ) )
|
|
||||||
on_radar = 0;
|
|
||||||
|
|
||||||
enemies = self getenemies( 1 );
|
enemies = self getenemies( 1 );
|
||||||
/#
|
/#
|
||||||
for ( i = 0; i < enemies.size; i++ )
|
for ( i = 0; i < enemies.size; i++ )
|
@ -608,11 +608,8 @@ threat_is_ai_tank()
|
|||||||
return isdefined( ent ) && isdefined( ent.targetname ) && ent.targetname == "talon";
|
return isdefined( ent ) && isdefined( ent.targetname ) && ent.targetname == "talon";
|
||||||
}
|
}
|
||||||
|
|
||||||
threat_is_qrdrone( ent )
|
threat_is_qrdrone( ent = self.bot.threat.entity )
|
||||||
{
|
{
|
||||||
if ( !isdefined( ent ) )
|
|
||||||
ent = self.bot.threat.entity;
|
|
||||||
|
|
||||||
return isdefined( ent ) && isdefined( ent.helitype ) && ent.helitype == "qrdrone";
|
return isdefined( ent ) && isdefined( ent.helitype ) && ent.helitype == "qrdrone";
|
||||||
}
|
}
|
||||||
|
|
@ -316,9 +316,8 @@ bot_patrol_flag()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
nodes = getvisiblenodes( nearest );
|
nodes = getvisiblenodes( nearest );
|
||||||
/#
|
|
||||||
assert( nodes.size );
|
assert( nodes.size );
|
||||||
#/
|
|
||||||
for ( i = randomint( nodes.size ); i < nodes.size; i++ )
|
for ( i = randomint( nodes.size ); i < nodes.size; i++ )
|
||||||
{
|
{
|
||||||
if ( self maps\mp\bots\_bot::bot_friend_goal_in_radius( "ctf_flag_patrol", nodes[i].origin, 256 ) == 0 )
|
if ( self maps\mp\bots\_bot::bot_friend_goal_in_radius( "ctf_flag_patrol", nodes[i].origin, 256 ) == 0 )
|
||||||
@ -334,9 +333,7 @@ base_nearest_node( flag )
|
|||||||
{
|
{
|
||||||
home = flag ctf_flag_get_home();
|
home = flag ctf_flag_get_home();
|
||||||
nodes = getnodesinradiussorted( home, 256, 0 );
|
nodes = getnodesinradiussorted( home, 256, 0 );
|
||||||
/#
|
|
||||||
assert( nodes.size );
|
assert( nodes.size );
|
||||||
#/
|
|
||||||
return nodes[0];
|
return nodes[0];
|
||||||
}
|
}
|
||||||
|
|
@ -40,10 +40,8 @@ bot_dem_attack_think()
|
|||||||
{
|
{
|
||||||
self.goal_flag = zone;
|
self.goal_flag = zone;
|
||||||
break;
|
break;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
else if ( randomint( 100 ) < 50 )
|
||||||
if ( randomint( 100 ) < 50 )
|
|
||||||
{
|
{
|
||||||
self.goal_flag = zone;
|
self.goal_flag = zone;
|
||||||
break;
|
break;
|
||||||
@ -85,10 +83,8 @@ bot_dem_defend_think()
|
|||||||
{
|
{
|
||||||
self.goal_flag = zone;
|
self.goal_flag = zone;
|
||||||
break;
|
break;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
else if ( randomint( 100 ) < 50 )
|
||||||
if ( randomint( 100 ) < 50 )
|
|
||||||
{
|
{
|
||||||
self.goal_flag = zone;
|
self.goal_flag = zone;
|
||||||
break;
|
break;
|
@ -59,9 +59,8 @@ bot_move_to_flag( flag )
|
|||||||
nodes = getnodesinradius( flag.origin, flag.radius, 0, 32 );
|
nodes = getnodesinradius( flag.origin, flag.radius, 0, 32 );
|
||||||
else
|
else
|
||||||
nodes = getnodesinradius( flag.origin, flag.radius, 0 );
|
nodes = getnodesinradius( flag.origin, flag.radius, 0 );
|
||||||
/#
|
|
||||||
assert( nodes.size );
|
assert( nodes.size );
|
||||||
#/
|
|
||||||
node = random( nodes );
|
node = random( nodes );
|
||||||
self addgoal( node, 24, 3, "dom_flag" );
|
self addgoal( node, 24, 3, "dom_flag" );
|
||||||
}
|
}
|
||||||
@ -239,9 +238,8 @@ bot_capture_flag( flag )
|
|||||||
|
|
||||||
dom_is_game_start()
|
dom_is_game_start()
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( level.flags ) );
|
assert( isdefined( level.flags ) );
|
||||||
#/
|
|
||||||
foreach ( flag in level.flags )
|
foreach ( flag in level.flags )
|
||||||
{
|
{
|
||||||
if ( flag getflagteam() != "neutral" )
|
if ( flag getflagteam() != "neutral" )
|
||||||
@ -259,9 +257,7 @@ dom_get_closest_flag()
|
|||||||
|
|
||||||
dom_get_weighted_flag( owner )
|
dom_get_weighted_flag( owner )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( level.flags ) );
|
assert( isdefined( level.flags ) );
|
||||||
#/
|
|
||||||
best = undefined;
|
best = undefined;
|
||||||
distsq = 9999999;
|
distsq = 9999999;
|
||||||
|
|
||||||
@ -284,9 +280,7 @@ dom_get_weighted_flag( owner )
|
|||||||
|
|
||||||
dom_get_weighted_enemy_flag( team )
|
dom_get_weighted_enemy_flag( team )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( level.flags ) );
|
assert( isdefined( level.flags ) );
|
||||||
#/
|
|
||||||
best = undefined;
|
best = undefined;
|
||||||
distsq = 9999999;
|
distsq = 9999999;
|
||||||
|
|
||||||
@ -331,9 +325,7 @@ dom_has_two_flags( team )
|
|||||||
|
|
||||||
dom_get_weighted_contested_flag( team )
|
dom_get_weighted_contested_flag( team )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( level.flags ) );
|
assert( isdefined( level.flags ) );
|
||||||
#/
|
|
||||||
best = undefined;
|
best = undefined;
|
||||||
distsq = 9999999;
|
distsq = 9999999;
|
||||||
|
|
||||||
@ -356,9 +348,7 @@ dom_get_weighted_contested_flag( team )
|
|||||||
|
|
||||||
dom_get_random_flag( owner )
|
dom_get_random_flag( owner )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( level.flags ) );
|
assert( isdefined( level.flags ) );
|
||||||
#/
|
|
||||||
flagindex = randomintrange( 0, level.flags.size );
|
flagindex = randomintrange( 0, level.flags.size );
|
||||||
|
|
||||||
if ( !isdefined( owner ) )
|
if ( !isdefined( owner ) )
|
@ -151,9 +151,8 @@ bot_patrol_hq()
|
|||||||
}
|
}
|
||||||
|
|
||||||
nodes = getvisiblenodes( nearest );
|
nodes = getvisiblenodes( nearest );
|
||||||
/#
|
|
||||||
assert( nodes.size );
|
assert( nodes.size );
|
||||||
#/
|
|
||||||
for ( i = randomint( nodes.size ); i < nodes.size; i++ )
|
for ( i = randomint( nodes.size ); i < nodes.size; i++ )
|
||||||
{
|
{
|
||||||
if ( self maps\mp\bots\_bot::bot_friend_goal_in_radius( "hq_radio", nodes[i].origin, 128 ) == 0 )
|
if ( self maps\mp\bots\_bot::bot_friend_goal_in_radius( "hq_radio", nodes[i].origin, 128 ) == 0 )
|
@ -283,8 +283,6 @@ bot_hill_tactical_insertion()
|
|||||||
hill_nearest_node()
|
hill_nearest_node()
|
||||||
{
|
{
|
||||||
nodes = getnodesinradiussorted( level.zone.gameobject.curorigin, 256, 0 );
|
nodes = getnodesinradiussorted( level.zone.gameobject.curorigin, 256, 0 );
|
||||||
/#
|
|
||||||
assert( nodes.size );
|
assert( nodes.size );
|
||||||
#/
|
|
||||||
return nodes[0];
|
return nodes[0];
|
||||||
}
|
}
|
@ -14,9 +14,7 @@ bot_sd_think()
|
|||||||
if ( !isdefined( zone.nearest_node ) )
|
if ( !isdefined( zone.nearest_node ) )
|
||||||
{
|
{
|
||||||
nodes = getnodesinradiussorted( zone.trigger.origin, 256, 0 );
|
nodes = getnodesinradiussorted( zone.trigger.origin, 256, 0 );
|
||||||
/#
|
|
||||||
assert( nodes.size );
|
assert( nodes.size );
|
||||||
#/
|
|
||||||
zone.nearest_node = nodes[0];
|
zone.nearest_node = nodes[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,10 @@
|
|||||||
// T6 GSC SOURCE
|
// T6 GSC SOURCE
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\gametypes\_hud_util;
|
||||||
|
#include maps\mp\gametypes\_globallogic;
|
||||||
|
#include maps\mp\killstreaks\_killstreaks;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -8,12 +13,8 @@ init()
|
|||||||
|
|
||||||
foreach ( team in level.teams )
|
foreach ( team in level.teams )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( level.teamprefix[team] ) );
|
assert( isdefined( level.teamprefix[team] ) );
|
||||||
#/
|
|
||||||
/#
|
|
||||||
assert( isdefined( level.teamprefix[team] ) );
|
assert( isdefined( level.teamprefix[team] ) );
|
||||||
#/
|
|
||||||
level.isteamspeaking[team] = 0;
|
level.isteamspeaking[team] = 0;
|
||||||
level.speakers[team] = [];
|
level.speakers[team] = [];
|
||||||
}
|
}
|
210
MP/Core/maps/mp/gametypes/_callbacksetup.gsc
Normal file
210
MP/Core/maps/mp/gametypes/_callbacksetup.gsc
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\_audio;
|
||||||
|
#include maps\mp\gametypes\_globallogic;
|
||||||
|
#include maps\mp\gametypes\_globallogic_player;
|
||||||
|
#include maps\mp\gametypes\_globallogic_actor;
|
||||||
|
#include maps\mp\gametypes\_globallogic_vehicle;
|
||||||
|
#include maps\mp\gametypes\_hostmigration;
|
||||||
|
|
||||||
|
codecallback_startgametype()
|
||||||
|
{
|
||||||
|
if ( !isdefined( level.gametypestarted ) || !level.gametypestarted )
|
||||||
|
{
|
||||||
|
[[ level.callbackstartgametype ]]();
|
||||||
|
level.gametypestarted = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_finalizeinitialization()
|
||||||
|
{
|
||||||
|
maps\mp\_utility::callback( "on_finalize_initialization" );
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_playerconnect()
|
||||||
|
{
|
||||||
|
self endon( "disconnect" );
|
||||||
|
self thread maps\mp\_audio::monitor_player_sprint();
|
||||||
|
[[ level.callbackplayerconnect ]]();
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_playerdisconnect()
|
||||||
|
{
|
||||||
|
self notify( "disconnect" );
|
||||||
|
level notify( "disconnect", self );
|
||||||
|
client_num = self getentitynumber();
|
||||||
|
[[ level.callbackplayerdisconnect ]]();
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_hostmigration()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
println( "****CodeCallback_HostMigration****" );
|
||||||
|
#/
|
||||||
|
[[ level.callbackhostmigration ]]();
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_hostmigrationsave()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
println( "****CodeCallback_HostMigrationSave****" );
|
||||||
|
#/
|
||||||
|
[[ level.callbackhostmigrationsave ]]();
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_playermigrated()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
println( "****CodeCallback_PlayerMigrated****" );
|
||||||
|
#/
|
||||||
|
[[ level.callbackplayermigrated ]]();
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex )
|
||||||
|
{
|
||||||
|
self endon( "disconnect" );
|
||||||
|
[[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex );
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_playerkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration )
|
||||||
|
{
|
||||||
|
self endon( "disconnect" );
|
||||||
|
[[ level.callbackplayerkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration );
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration )
|
||||||
|
{
|
||||||
|
self endon( "disconnect" );
|
||||||
|
[[ level.callbackplayerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration );
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit )
|
||||||
|
{
|
||||||
|
self endon( "disconnect" );
|
||||||
|
[[ level.callbackplayermelee ]]( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit );
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex )
|
||||||
|
{
|
||||||
|
[[ level.callbackactordamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex );
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_actorkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset )
|
||||||
|
{
|
||||||
|
[[ level.callbackactorkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset );
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname )
|
||||||
|
{
|
||||||
|
[[ level.callbackvehicledamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname );
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset )
|
||||||
|
{
|
||||||
|
[[ level.callbackvehicleradiusdamage ]]( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset );
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_faceeventnotify( notify_msg, ent )
|
||||||
|
{
|
||||||
|
if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims )
|
||||||
|
{
|
||||||
|
if ( isdefined( level.face_event_handler ) && isdefined( level.face_event_handler.events[notify_msg] ) )
|
||||||
|
ent sendfaceevent( level.face_event_handler.events[notify_msg] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_menuresponse( action, arg )
|
||||||
|
{
|
||||||
|
if ( !isdefined( level.menuresponsequeue ) )
|
||||||
|
{
|
||||||
|
level.menuresponsequeue = [];
|
||||||
|
level thread menuresponsequeuepump();
|
||||||
|
}
|
||||||
|
|
||||||
|
index = level.menuresponsequeue.size;
|
||||||
|
level.menuresponsequeue[index] = spawnstruct();
|
||||||
|
level.menuresponsequeue[index].action = action;
|
||||||
|
level.menuresponsequeue[index].arg = arg;
|
||||||
|
level.menuresponsequeue[index].ent = self;
|
||||||
|
level notify( "menuresponse_queue" );
|
||||||
|
}
|
||||||
|
|
||||||
|
menuresponsequeuepump()
|
||||||
|
{
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
level waittill( "menuresponse_queue" );
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
level.menuresponsequeue[0].ent notify( "menuresponse", level.menuresponsequeue[0].action, level.menuresponsequeue[0].arg );
|
||||||
|
arrayremoveindex( level.menuresponsequeue, 0, 0 );
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
while ( level.menuresponsequeue.size > 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setupcallbacks()
|
||||||
|
{
|
||||||
|
setdefaultcallbacks();
|
||||||
|
level.idflags_radius = 1;
|
||||||
|
level.idflags_no_armor = 2;
|
||||||
|
level.idflags_no_knockback = 4;
|
||||||
|
level.idflags_penetration = 8;
|
||||||
|
level.idflags_destructible_entity = 16;
|
||||||
|
level.idflags_shield_explosive_impact = 32;
|
||||||
|
level.idflags_shield_explosive_impact_huge = 64;
|
||||||
|
level.idflags_shield_explosive_splash = 128;
|
||||||
|
level.idflags_no_team_protection = 256;
|
||||||
|
level.idflags_no_protection = 512;
|
||||||
|
level.idflags_passthru = 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
setdefaultcallbacks()
|
||||||
|
{
|
||||||
|
level.callbackstartgametype = maps\mp\gametypes\_globallogic::callback_startgametype;
|
||||||
|
level.callbackplayerconnect = maps\mp\gametypes\_globallogic_player::callback_playerconnect;
|
||||||
|
level.callbackplayerdisconnect = maps\mp\gametypes\_globallogic_player::callback_playerdisconnect;
|
||||||
|
level.callbackplayerdamage = maps\mp\gametypes\_globallogic_player::callback_playerdamage;
|
||||||
|
level.callbackplayerkilled = maps\mp\gametypes\_globallogic_player::callback_playerkilled;
|
||||||
|
level.callbackplayermelee = maps\mp\gametypes\_globallogic_player::callback_playermelee;
|
||||||
|
level.callbackplayerlaststand = maps\mp\gametypes\_globallogic_player::callback_playerlaststand;
|
||||||
|
level.callbackactordamage = maps\mp\gametypes\_globallogic_actor::callback_actordamage;
|
||||||
|
level.callbackactorkilled = maps\mp\gametypes\_globallogic_actor::callback_actorkilled;
|
||||||
|
level.callbackvehicledamage = maps\mp\gametypes\_globallogic_vehicle::callback_vehicledamage;
|
||||||
|
level.callbackvehicleradiusdamage = maps\mp\gametypes\_globallogic_vehicle::callback_vehicleradiusdamage;
|
||||||
|
level.callbackplayermigrated = maps\mp\gametypes\_globallogic_player::callback_playermigrated;
|
||||||
|
level.callbackhostmigration = maps\mp\gametypes\_hostmigration::callback_hostmigration;
|
||||||
|
level.callbackhostmigrationsave = maps\mp\gametypes\_hostmigration::callback_hostmigrationsave;
|
||||||
|
}
|
||||||
|
|
||||||
|
abortlevel()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
println( "ERROR: Aborting level - gametype is not supported" );
|
||||||
|
#/
|
||||||
|
level.callbackstartgametype = ::callbackvoid;
|
||||||
|
level.callbackplayerconnect = ::callbackvoid;
|
||||||
|
level.callbackplayerdisconnect = ::callbackvoid;
|
||||||
|
level.callbackplayerdamage = ::callbackvoid;
|
||||||
|
level.callbackplayerkilled = ::callbackvoid;
|
||||||
|
level.callbackplayerlaststand = ::callbackvoid;
|
||||||
|
level.callbackplayermelee = ::callbackvoid;
|
||||||
|
level.callbackactordamage = ::callbackvoid;
|
||||||
|
level.callbackactorkilled = ::callbackvoid;
|
||||||
|
level.callbackvehicledamage = ::callbackvoid;
|
||||||
|
setdvar( "g_gametype", "dm" );
|
||||||
|
exitlevel( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
codecallback_glasssmash( pos, dir )
|
||||||
|
{
|
||||||
|
level notify( "glass_smash", pos, dir );
|
||||||
|
}
|
||||||
|
|
||||||
|
callbackvoid()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
@ -1,5 +1,14 @@
|
|||||||
// T6 GSC SOURCE
|
// T6 GSC SOURCE
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\gametypes\_tweakables;
|
||||||
|
#include maps\mp\killstreaks\_killstreaks;
|
||||||
|
#include maps\mp\killstreaks\_killstreak_weapons;
|
||||||
|
#include maps\mp\gametypes\_class;
|
||||||
|
#include maps\mp\teams\_teams;
|
||||||
|
#include maps\mp\gametypes\_dev;
|
||||||
|
#include maps\mp\_challenges;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -199,11 +208,7 @@ weapon_class_register( weapon, weapon_type )
|
|||||||
else if ( weapon_type == "weapon_rifle" )
|
else if ( weapon_type == "weapon_rifle" )
|
||||||
level.inventory_array[weapon] = 1;
|
level.inventory_array[weapon] = 1;
|
||||||
else
|
else
|
||||||
{
|
|
||||||
/#
|
|
||||||
assert( 0, "Weapon group info is missing from statsTable for: " + weapon_type );
|
assert( 0, "Weapon group info is missing from statsTable for: " + weapon_type );
|
||||||
#/
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cac_init()
|
cac_init()
|
||||||
@ -296,9 +301,7 @@ cac_init()
|
|||||||
|
|
||||||
getclasschoice( response )
|
getclasschoice( response )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( level.classmap[response] ) );
|
assert( isdefined( level.classmap[response] ) );
|
||||||
#/
|
|
||||||
return level.classmap[response];
|
return level.classmap[response];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,9 +362,7 @@ givekillstreaks( classnum )
|
|||||||
|
|
||||||
if ( isdefined( killstreakindex ) && killstreakindex > 0 )
|
if ( isdefined( killstreakindex ) && killstreakindex > 0 )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( level.tbl_killstreakdata[killstreakindex] ), "KillStreak #:" + killstreakindex + "'s data is undefined" );
|
assert( isdefined( level.tbl_killstreakdata[killstreakindex] ), "KillStreak #:" + killstreakindex + "'s data is undefined" );
|
||||||
#/
|
|
||||||
|
|
||||||
if ( isdefined( level.tbl_killstreakdata[killstreakindex] ) )
|
if ( isdefined( level.tbl_killstreakdata[killstreakindex] ) )
|
||||||
{
|
{
|
||||||
@ -575,9 +576,7 @@ giveloadout( team, class )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
pixbeginevent( "default class" );
|
pixbeginevent( "default class" );
|
||||||
/#
|
|
||||||
assert( isdefined( self.pers["class"] ), "Player during spawn and loadout got no class!" );
|
assert( isdefined( self.pers["class"] ), "Player during spawn and loadout got no class!" );
|
||||||
#/
|
|
||||||
class_num = level.classtoclassnum[class];
|
class_num = level.classtoclassnum[class];
|
||||||
self.class_num = class_num;
|
self.class_num = class_num;
|
||||||
pixendevent();
|
pixendevent();
|
||||||
@ -667,7 +666,6 @@ giveloadout( team, class )
|
|||||||
/#
|
/#
|
||||||
println( "^5GiveWeapon( " + weapon + " ) -- weapon" );
|
println( "^5GiveWeapon( " + weapon + " ) -- weapon" );
|
||||||
#/
|
#/
|
||||||
|
|
||||||
if ( primaryweapon != "" && primaryweapon != "weapon_null_mp" && primaryweapon != "weapon_null" )
|
if ( primaryweapon != "" && primaryweapon != "weapon_null_mp" && primaryweapon != "weapon_null" )
|
||||||
{
|
{
|
||||||
if ( self hasperk( "specialty_extraammo" ) )
|
if ( self hasperk( "specialty_extraammo" ) )
|
||||||
@ -693,9 +691,7 @@ giveloadout( team, class )
|
|||||||
spawnweapon = self.spawnweapon;
|
spawnweapon = self.spawnweapon;
|
||||||
|
|
||||||
self.pers["changed_class"] = 0;
|
self.pers["changed_class"] = 0;
|
||||||
/#
|
|
||||||
assert( spawnweapon != "" );
|
assert( spawnweapon != "" );
|
||||||
#/
|
|
||||||
self.spawnweapon = spawnweapon;
|
self.spawnweapon = spawnweapon;
|
||||||
self.pers["spawnWeapon"] = self.spawnweapon;
|
self.pers["spawnWeapon"] = self.spawnweapon;
|
||||||
self setspawnweapon( spawnweapon );
|
self setspawnweapon( spawnweapon );
|
||||||
@ -734,7 +730,6 @@ giveloadout( team, class )
|
|||||||
else
|
else
|
||||||
grenadetypeprimary = level.weapons["flash"];
|
grenadetypeprimary = level.weapons["flash"];
|
||||||
}
|
}
|
||||||
|
|
||||||
/#
|
/#
|
||||||
println( "^5GiveWeapon( " + grenadetypeprimary + " ) -- grenadeTypePrimary" );
|
println( "^5GiveWeapon( " + grenadetypeprimary + " ) -- grenadeTypePrimary" );
|
||||||
#/
|
#/
|
||||||
@ -817,9 +812,7 @@ setweaponammooverall( weaponname, amount )
|
|||||||
{
|
{
|
||||||
self setweaponammoclip( weaponname, amount );
|
self setweaponammoclip( weaponname, amount );
|
||||||
diff = amount - self getweaponammoclip( weaponname );
|
diff = amount - self getweaponammoclip( weaponname );
|
||||||
/#
|
|
||||||
assert( diff >= 0 );
|
assert( diff >= 0 );
|
||||||
#/
|
|
||||||
self setweaponammostock( weaponname, diff );
|
self setweaponammostock( weaponname, diff );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -901,7 +894,6 @@ register_perks()
|
|||||||
|
|
||||||
self setperk( perk );
|
self setperk( perk );
|
||||||
}
|
}
|
||||||
|
|
||||||
/#
|
/#
|
||||||
maps\mp\gametypes\_dev::giveextraperks();
|
maps\mp\gametypes\_dev::giveextraperks();
|
||||||
#/
|
#/
|
||||||
@ -952,7 +944,6 @@ cac_modified_vehicle_damage( victim, attacker, damage, meansofdeath, weapon, inf
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
final_damage = old_damage;
|
final_damage = old_damage;
|
||||||
|
|
||||||
/#
|
/#
|
||||||
if ( getdvarint( _hash_5ABA6445 ) )
|
if ( getdvarint( _hash_5ABA6445 ) )
|
||||||
println( "Perk/> Damage Factor: " + final_damage / old_damage + " - Pre Damage: " + old_damage + " - Post Damage: " + final_damage );
|
println( "Perk/> Damage Factor: " + final_damage / old_damage + " - Pre Damage: " + old_damage + " - Post Damage: " + final_damage );
|
||||||
@ -962,15 +953,9 @@ cac_modified_vehicle_damage( victim, attacker, damage, meansofdeath, weapon, inf
|
|||||||
|
|
||||||
cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc )
|
cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc )
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( isdefined( victim ) );
|
assert( isdefined( victim ) );
|
||||||
#/
|
|
||||||
/#
|
|
||||||
assert( isdefined( attacker ) );
|
assert( isdefined( attacker ) );
|
||||||
#/
|
|
||||||
/#
|
|
||||||
assert( isplayer( victim ) );
|
assert( isplayer( victim ) );
|
||||||
#/
|
|
||||||
|
|
||||||
if ( victim == attacker )
|
if ( victim == attacker )
|
||||||
return damage;
|
return damage;
|
||||||
@ -980,7 +965,6 @@ cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc )
|
|||||||
|
|
||||||
if ( damage <= 0 )
|
if ( damage <= 0 )
|
||||||
return damage;
|
return damage;
|
||||||
|
|
||||||
/#
|
/#
|
||||||
debug = 0;
|
debug = 0;
|
||||||
|
|
||||||
@ -1046,7 +1030,6 @@ cac_modified_damage( victim, attacker, damage, mod, weapon, inflictor, hitloc )
|
|||||||
println( "Perk/> " + victim.name + "'s flak jacket decreased " + attacker.name + "'s grenade damage" );
|
println( "Perk/> " + victim.name + "'s flak jacket decreased " + attacker.name + "'s grenade damage" );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
/#
|
/#
|
||||||
victim.cac_debug_damage_type = tolower( mod );
|
victim.cac_debug_damage_type = tolower( mod );
|
||||||
victim.cac_debug_original_damage = damage;
|
victim.cac_debug_original_damage = damage;
|
@ -603,9 +603,7 @@ coptermove()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/#
|
|
||||||
assert( movingvertically );
|
assert( movingvertically );
|
||||||
#/
|
|
||||||
thisdest = ( self.origin[0], self.origin[1], desiredz );
|
thisdest = ( self.origin[0], self.origin[1], desiredz );
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user