mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-09 02:17:51 -05:00
Added several new scripts to the no known errors category, but also moved some scripts to improper debug methods category. Added new scripts that need debugging which includes the remainder of the zombies class of scripts in patch_zm. Updated the debugging script and readme with more exact instructions to its usage. Will work on many of the remaining zombies scripts and eventually move to gametypes_zm scripts.
500 lines
14 KiB
Plaintext
500 lines
14 KiB
Plaintext
#include maps/mp/gametypes_zm/_spawnlogic;
|
|
#include maps/mp/animscripts/traverse/shared;
|
|
#include maps/mp/animscripts/utility;
|
|
#include maps/mp/zombies/_load;
|
|
#include maps/mp/_createfx;
|
|
#include maps/mp/_music;
|
|
#include maps/mp/_busing;
|
|
#include maps/mp/_script_gen;
|
|
#include maps/mp/_utility;
|
|
#include common_scripts/utility;
|
|
|
|
main( bscriptgened, bcsvgened, bsgenabled ) //checked partially changed to match cerberus output
|
|
{
|
|
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();
|
|
if ( getDvar( "cg_usingClientScripts" ) != "" ) //changed at own discretion
|
|
{
|
|
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 ) && isDefined( level.script ) )
|
|
{
|
|
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 );
|
|
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;
|
|
if ( getDvar( "createfx" ) != "" ) //changed at own discretion
|
|
{
|
|
level.createfx_enabled = getDvar( "createfx" );
|
|
}
|
|
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();
|
|
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();
|
|
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/zombies/_load::exploder_load( triggers[ i ] );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
level_notify_listener() //checked matches cerberus output
|
|
{
|
|
while ( 1 )
|
|
{
|
|
val = getDvar( "level_notify" );
|
|
if ( val != "" )
|
|
{
|
|
level notify( val );
|
|
setdvar( "level_notify", "" );
|
|
}
|
|
wait 0.2;
|
|
}
|
|
}
|
|
|
|
client_notify_listener() //checked matches cerberus output
|
|
{
|
|
while ( 1 )
|
|
{
|
|
val = getDvar( "client_notify" );
|
|
if ( val != "" )
|
|
{
|
|
clientnotify( val );
|
|
setdvar( "client_notify", "" );
|
|
}
|
|
wait 0.2;
|
|
}
|
|
}
|
|
|
|
footsteps() //checked matches cerberus output
|
|
{
|
|
if ( is_true( level.fx_exclude_footsteps ) )
|
|
{
|
|
return;
|
|
}
|
|
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() //checked matches cerberus output
|
|
{
|
|
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 ) //checked matches cerberus output
|
|
{
|
|
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() //checked partially changed to match cerberus output
|
|
{
|
|
ents = getentarray( "script_brushmodel", "classname" );
|
|
smodels = getentarray( "script_model", "classname" );
|
|
for ( i = 0; i < smodels.size; i++ )
|
|
{
|
|
ents[ ents.size ] = smodels[ i ];
|
|
}
|
|
i = 0;
|
|
while ( i < ents.size )
|
|
{
|
|
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();
|
|
i++;
|
|
continue;
|
|
}
|
|
if ( isDefined( ents[ i ].targetname ) && ents[ i ].targetname == "exploder" )
|
|
{
|
|
ents[ i ] hide();
|
|
ents[ i ] notsolid();
|
|
i++;
|
|
continue;
|
|
}
|
|
if ( isDefined( ents[ i ].targetname ) && ents[ i ].targetname == "exploderchunk" )
|
|
{
|
|
ents[ i ] hide();
|
|
ents[ i ] notsolid();
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
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 = [];
|
|
i = 0;
|
|
while ( i < level.createfxent.size )
|
|
{
|
|
ent = level.createfxent[ i ];
|
|
if ( ent.v[ "type" ] != "exploder" )
|
|
{
|
|
i++;
|
|
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;
|
|
i++;
|
|
}
|
|
}
|
|
|
|
setup_traversals() //checked changed to match cerberus output
|
|
{
|
|
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() //checked matches cerberus output
|
|
{
|
|
if ( !isDefined( level.mapcenter ) )
|
|
{
|
|
level.nodesmins = ( 0, 0, 0 );
|
|
level.nodesmaxs = ( 0, 0, 0 );
|
|
level.mapcenter = maps/mp/gametypes_zm/_spawnlogic::findboxcenter( level.nodesmins, level.nodesmaxs );
|
|
/*
|
|
/#
|
|
println( "map center: ", level.mapcenter );
|
|
#/
|
|
*/
|
|
setmapcenter( level.mapcenter );
|
|
}
|
|
}
|
|
|
|
start_intro_screen_zm() //checked changed to match cerberus output
|
|
{
|
|
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 );
|
|
level.introscreen.immunetodemogamehudsettings = 1;
|
|
level.introscreen.immunetodemofreecamera = 1;
|
|
wait 0.05;
|
|
}
|
|
level.introscreen.alpha = 1;
|
|
players = get_players();
|
|
for ( i = 0; i < players.size; i++ )
|
|
{
|
|
players[ i ] freezecontrols( 1 );
|
|
}
|
|
wait 1;
|
|
}
|
|
|
|
|