checked 3 more scripts and added an incomplete functions list

_zm_buildables, _zm_unitrigger, and_zm_utility have been checked but only _zm_utility has been tested. Additionally, a basic functions list has been added to help modders find useful functions.
This commit is contained in:
JezuzLizard 2020-04-28 12:39:27 -07:00
parent 698d211403
commit 21835a4989
5 changed files with 1628 additions and 1894 deletions

View File

@ -0,0 +1,61 @@
# Black Ops 2 Functions Descriptions and Locations List
### Built in Functions:
isthrowinggrenade() - returns 1 if the player is currently throwing a grenade or 0 if they are not
- must be called on a player
loadfx( effect ) - loads an effect in
usage - level._effect[ "building_dust" ] = loadfx( "maps/zombie/fx_zmb_buildable_assemble_dust" );
### Functions in _zm_utility.gsc:
convertsecondstomilliseconds( seconds ) - returns seconds multiplied by 1000
usage - use this to compare actual seconds with getTime() which uses milliseconds
in_revive_trigger() - returns 1 if the player is currently in a revive trigger or 0 if they are not
- must be called on a player
is_classic() - returns 1 if the value of getDvar( "ui_zm_gamemodegroup" ) is "zclassic" returns 0 otherwise
is_player() - returns 0 if not called on a player, returns 0 if called on a bot, returns 1 otherwise
is_standard() - returns 1 if the value of getDvar( "ui_gametype" ) is "zstandard" returns 0 otherwise
lerp( chunk ) -
clear_mature_blood() - deletes blood patches if is_mature() returns 0
recalc_zombie_array() - empty function
clear_all_corpses() - deletes all corpses when called
get_current_corpse_count() - returns the number of corpses, if corpses are not defined returns 0
get_current_actor_count() - returns the number of alive zombies and corpses combined
get_round_enemy_array() - returns an array of the enemies on the level.zombie_team if an enemy has the property .ignore_enemy_count
they are not included
init_zombie_run_cycle() - picks whether a zombie should have different speed on spawn
- must be called on a zombie
change_zombie_run_cycle() - sets a zombies speed depending on the difficulty on easy zombies are sprinters on normal they are walkers
- must be called on a zombie
speed_change_watcher() - reduces the counter that tracks the number of zombies with unique speeds such as walkers or sprinters when they die
- must be called on a zombie
set_zombie_run_cycle( new_move_speed ) - sets a zombies speed to the new_move_speed input
- valid inputs are walk, run, sprint, super_sprint, and bus_sprint( tranzit maps only )
- must be called on a zombie
set_run_speed() - sets a zombies movespeed randomly on spawn on normal difficulty
- must be called on a zombie
set_run_speed_easy() = sets a zombies movespeed randomly on spawn on easy difficulty
- must be called on a zombie
spawn_zombie( spawner, target_name, spawn_point, round_number )
-

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
#include maps/mp/_utility;
#include common_scripts/utility;
init()
init() //checked changed to match cerberus output
{
level._unitriggers = spawnstruct();
level._unitriggers._deferredinitlist = [];
@ -14,26 +14,22 @@ init()
level._unitriggers.largest_radius = 64;
stubs_keys = array( "unitrigger_radius", "unitrigger_radius_use", "unitrigger_box", "unitrigger_box_use" );
stubs = [];
i = 0;
while ( i < stubs_keys.size )
for ( i = 0; i < stubs_keys.size; i++ )
{
stubs = arraycombine( stubs, getstructarray( stubs_keys[ i ], "script_unitrigger_type" ), 1, 0 );
i++;
}
i = 0;
while ( i < stubs.size )
for ( i = 0; i < stubs.size; i++ )
{
register_unitrigger( stubs[ i ] );
i++;
}
}
register_unitrigger_system_func( system, trigger_func )
register_unitrigger_system_func( system, trigger_func ) //checked matches cerberus output
{
level._unitriggers.system_trigger_funcs[ system ] = trigger_func;
}
unitrigger_force_per_player_triggers( unitrigger_stub, opt_on_off )
unitrigger_force_per_player_triggers( unitrigger_stub, opt_on_off ) //checked matches cerberus output
{
if ( !isDefined( opt_on_off ) )
{
@ -42,7 +38,7 @@ unitrigger_force_per_player_triggers( unitrigger_stub, opt_on_off )
unitrigger_stub.trigger_per_player = opt_on_off;
}
unitrigger_trigger( player )
unitrigger_trigger( player ) //checked matches cerberus output
{
if ( self.trigger_per_player )
{
@ -54,7 +50,7 @@ unitrigger_trigger( player )
}
}
unitrigger_origin()
unitrigger_origin() //checked matches cerberus output
{
if ( isDefined( self.originfunc ) )
{
@ -67,26 +63,25 @@ unitrigger_origin()
return origin;
}
register_unitrigger_internal( unitrigger_stub, trigger_func )
register_unitrigger_internal( unitrigger_stub, trigger_func ) //checked changed to match cerberus output
{
if ( !isDefined( unitrigger_stub.script_unitrigger_type ) )
{
/*
/#
println( "Cannot register a unitrigger with no script_unitrigger_type. Ignoring." );
#/
*/
return;
}
if ( isDefined( trigger_func ) )
{
unitrigger_stub.trigger_func = trigger_func;
}
else
{
if ( isDefined( unitrigger_stub.unitrigger_system ) && isDefined( level._unitriggers.system_trigger_funcs[ unitrigger_stub.unitrigger_system ] ) )
else if ( isDefined( unitrigger_stub.unitrigger_system ) && isDefined( level._unitriggers.system_trigger_funcs[ unitrigger_stub.unitrigger_system ] ) )
{
unitrigger_stub.trigger_func = level._unitriggers.system_trigger_funcs[ unitrigger_stub.unitrigger_system ];
}
}
switch( unitrigger_stub.script_unitrigger_type )
{
case "unitrigger_radius":
@ -123,9 +118,11 @@ register_unitrigger_internal( unitrigger_stub, trigger_func )
unitrigger_stub.test_radius_sq = ( box_radius + 15 ) * ( box_radius + 15 );
break;
default:
/*
/#
println( "Unknown unitrigger type registered : " + unitrigger_stub.targetname + " - ignoring." );
#/
*/
return;
}
if ( unitrigger_stub.radius > level._unitriggers.largest_radius )
@ -138,30 +135,27 @@ register_unitrigger_internal( unitrigger_stub, trigger_func )
setdvar( "player_useRadius_zm", level.fixed_max_player_use_radius );
}
}
else
{
if ( level._unitriggers.largest_radius > getDvarFloat( "player_useRadius_zm" ) )
else if ( level._unitriggers.largest_radius > getDvarFloat( "player_useRadius_zm" ) )
{
setdvar( "player_useRadius_zm", level._unitriggers.largest_radius );
}
}
}
level._unitriggers.trigger_stubs[ level._unitriggers.trigger_stubs.size ] = unitrigger_stub;
unitrigger_stub.registered = 1;
}
register_unitrigger( unitrigger_stub, trigger_func )
register_unitrigger( unitrigger_stub, trigger_func ) //checked matches cerberus output
{
register_unitrigger_internal( unitrigger_stub, trigger_func );
level._unitriggers.dynamic_stubs[ level._unitriggers.dynamic_stubs.size ] = unitrigger_stub;
}
unregister_unitrigger( unitrigger_stub )
unregister_unitrigger( unitrigger_stub ) //checked matches cerberus output
{
thread unregister_unitrigger_internal( unitrigger_stub );
}
unregister_unitrigger_internal( unitrigger_stub )
unregister_unitrigger_internal( unitrigger_stub ) //checked changed to match cerberus output
{
if ( !isDefined( unitrigger_stub ) )
{
@ -173,32 +167,25 @@ unregister_unitrigger_internal( unitrigger_stub )
if ( isDefined( unitrigger_stub.playertrigger ) && unitrigger_stub.playertrigger.size > 0 )
{
keys = getarraykeys( unitrigger_stub.playertrigger );
_a181 = keys;
_k181 = getFirstArrayKey( _a181 );
while ( isDefined( _k181 ) )
foreach ( key in keys )
{
key = _a181[ _k181 ];
trigger = unitrigger_stub.playertrigger[ key ];
trigger notify( "kill_trigger" );
if ( isDefined( trigger ) )
{
trigger delete();
}
_k181 = getNextArrayKey( _a181, _k181 );
}
unitrigger_stub.playertrigger = [];
}
}
else
{
if ( isDefined( unitrigger_stub.trigger ) )
else if ( isDefined( unitrigger_stub.trigger ) )
{
trigger = unitrigger_stub.trigger;
trigger notify( "kill_trigger" );
trigger.stub.trigger = undefined;
trigger delete();
}
}
if ( isDefined( unitrigger_stub.in_zone ) )
{
arrayremovevalue( level.zones[ unitrigger_stub.in_zone ].unitrigger_stubs, unitrigger_stub );
@ -208,13 +195,13 @@ unregister_unitrigger_internal( unitrigger_stub )
arrayremovevalue( level._unitriggers.dynamic_stubs, unitrigger_stub );
}
delay_delete_contact_ent()
delay_delete_contact_ent() //checked matches cerberus output
{
self.last_used_time = 0;
while ( 1 )
{
wait 1;
if ( ( getTime() - self.last_used_time ) > 1000 )
if ( getTime() - self.last_used_time > 1000 )
{
self delete();
level._unitriggers.contact_ent = undefined;
@ -223,7 +210,7 @@ delay_delete_contact_ent()
}
}
register_static_unitrigger( unitrigger_stub, trigger_func, recalculate_zone )
register_static_unitrigger( unitrigger_stub, trigger_func, recalculate_zone ) //checked changed to match cerberus output
{
if ( level.zones.size == 0 )
{
@ -233,11 +220,11 @@ register_static_unitrigger( unitrigger_stub, trigger_func, recalculate_zone )
}
if ( !isDefined( level._unitriggers.contact_ent ) )
{
level._unitriggers.contact_ent = spawn( "script_origin", ( 0, 0, 1 ) );
level._unitriggers.contact_ent = spawn( "script_origin", ( 0, 0, 0 ) );
level._unitriggers.contact_ent thread delay_delete_contact_ent();
}
register_unitrigger_internal( unitrigger_stub, trigger_func );
while ( !isDefined( level._no_static_unitriggers ) )
if ( !isDefined( level._no_static_unitriggers ) )
{
level._unitriggers.contact_ent.last_used_time = getTime();
level._unitriggers.contact_ent.origin = unitrigger_stub.origin;
@ -247,8 +234,7 @@ register_static_unitrigger( unitrigger_stub, trigger_func, recalculate_zone )
return;
}
keys = getarraykeys( level.zones );
i = 0;
while ( i < keys.size )
for ( i = 0; i < keys.size; i++ )
{
if ( level._unitriggers.contact_ent maps/mp/zombies/_zm_zonemgr::entity_in_zone( keys[ i ], 1 ) )
{
@ -260,45 +246,45 @@ register_static_unitrigger( unitrigger_stub, trigger_func, recalculate_zone )
unitrigger_stub.in_zone = keys[ i ];
return;
}
i++;
}
}
level._unitriggers.dynamic_stubs[ level._unitriggers.dynamic_stubs.size ] = unitrigger_stub;
unitrigger_stub.registered = 1;
}
reregister_unitrigger_as_dynamic( unitrigger_stub )
reregister_unitrigger_as_dynamic( unitrigger_stub ) //checked matches cerberus output
{
unregister_unitrigger_internal( unitrigger_stub );
register_unitrigger( unitrigger_stub, unitrigger_stub.trigger_func );
}
debug_unitriggers()
debug_unitriggers() //checked changed to match cerberus output
{
/*
/#
while ( 1 )
{
//dvar name is unknown in both dumps
while ( getDvarInt( #"D256F24B" ) > 0 )
{
i = 0;
while ( i < level._unitriggers.trigger_stubs.size )
for ( i = 0; i < level._unitriggers.trigger_stubs.size; i++ )
{
triggerstub = level._unitriggers.trigger_stubs[ i ];
color = vectorScale( ( 0, 0, 1 ), 0,75 );
color = vectorScale( ( 1, 0, 0 ), 0.75 );
if ( !isDefined( triggerstub.in_zone ) )
{
color = vectorScale( ( 0, 0, 1 ), 0,65 );
color = vectorScale( ( 1, 1, 0 ), 0.65 );
}
else
{
if ( level.zones[ triggerstub.in_zone ].is_active )
{
color = ( 0, 0, 1 );
color = ( 1, 1, 0 );
}
}
if ( isDefined( triggerstub.trigger ) || isDefined( triggerstub.playertrigger ) && triggerstub.playertrigger.size > 0 )
{
color = ( 0, 0, 1 );
color = ( 0, 1, 0 );
if ( isDefined( triggerstub.playertrigger ) && triggerstub.playertrigger.size > 0 )
{
print3d( triggerstub.origin, triggerstub.playertrigger.size, color, 1, 1, 1 );
@ -318,38 +304,36 @@ debug_unitriggers()
line( origin, origin + ( 0, 0, triggerstub.script_height ), color, 0, 1 );
}
break;
i++;
continue;
case "unitrigger_box":
case "unitrigger_box_use":
vec = ( triggerstub.script_width / 2, triggerstub.script_length / 2, triggerstub.script_height / 2 );
box( origin, vec * -1, vec, triggerstub.angles[ 1 ], color, 1, 0, 1 );
break;
i++;
continue;
}
i++;
}
}
wait 0,05;
}
wait 0.05;
#/
}
*/
}
cleanup_trigger( trigger, player )
cleanup_trigger( trigger, player ) //checked changed to match cerberus output
{
trigger notify( "kill_trigger" );
if ( isDefined( trigger.stub.trigger_per_player ) && trigger.stub.trigger_per_player )
{
trigger.stub.playertrigger[player getentitynumber()] = undefined;
}
else
{
trigger.stub.trigger = undefined;
}
trigger delete();
level._unitriggers.trigger_pool[player getentitynumber()] = undefined;
}
assess_and_apply_visibility( trigger, stub, player, default_keep )
assess_and_apply_visibility( trigger, stub, player, default_keep ) //checked changed to match cerberus output
{
if ( !isDefined( trigger ) || !isDefined( stub ) )
{
@ -369,9 +353,7 @@ assess_and_apply_visibility( trigger, stub, player, default_keep )
trigger.reassess_time = undefined;
}
}
else
{
if ( isDefined( trigger.thread_running ) && trigger.thread_running )
else if ( isDefined( trigger.thread_running ) && trigger.thread_running )
{
keep_thread = 0;
}
@ -384,25 +366,21 @@ assess_and_apply_visibility( trigger, stub, player, default_keep )
{
trigger.reassess_time = 1;
}
}
return keep_thread;
}
main()
main() //checked against bo3 _zm_unitrigger.gsc and cerberus output changed at own discretion
{
level thread debug_unitriggers();
if ( level._unitriggers._deferredinitlist.size )
{
i = 0;
while ( i < level._unitriggers._deferredinitlist.size )
for ( i = 0; i < level._unitriggers._deferredinitlist.size; i++ )
{
register_static_unitrigger( level._unitriggers._deferredinitlist[ i ], level._unitriggers._deferredinitlist[ i ].trigger_func );
i++;
}
i = 0;
while ( i < level._unitriggers._deferredinitlist.size )
for ( i = 0; i < level._unitriggers._deferredinitlist.size; i++ )
{
i++;
level._unitriggers._deferredinitlist[i] = undefined;
}
level._unitriggers._deferredinitlist = undefined;
}
@ -410,21 +388,19 @@ main()
valid_range_sq = valid_range * valid_range;
while ( !isDefined( level.active_zone_names ) )
{
wait 0,1;
wait 0.1;
}
while ( 1 )
{
waited = 0;
active_zone_names = level.active_zone_names;
candidate_list = [];
j = 0;
while ( j < active_zone_names.size )
for ( j = 0; j < active_zone_names.size; j++ )
{
if ( isDefined( level.zones[ active_zone_names[ j ] ].unitrigger_stubs ) )
{
candidate_list = arraycombine( candidate_list, level.zones[ active_zone_names[ j ] ].unitrigger_stubs, 1, 0 );
}
j++;
}
candidate_list = arraycombine( candidate_list, level._unitriggers.dynamic_stubs, 1, 0 );
players = getplayers();
@ -437,7 +413,7 @@ main()
i++;
continue;
}
else player_origin = player.origin + vectorScale( ( 0, 0, 1 ), 35 );
player_origin = player.origin + vectorScale( ( 0, 0, 1 ), 35 );
trigger = level._unitriggers.trigger_pool[ player getentitynumber() ];
closest = [];
if ( isDefined( trigger ) )
@ -450,21 +426,17 @@ main()
{
if ( isDefined( trigger.reassess_time ) )
{
trigger.reassess_time -= 0,05;
trigger.reassess_time -= 0.05;
if ( trigger.reassess_time > 0 )
{
i++;
continue;
}
else time_to_ressess = 1;
break;
}
else
{
time_to_ressess = 1;
}
}
else closest = get_closest_unitriggers( player_origin, candidate_list, valid_range );
if ( isDefined( trigger ) && time_to_ressess || closest.size < 2 && isDefined( trigger.thread_running ) && trigger.thread_running )
closest = get_closest_unitriggers( player_origin, candidate_list, valid_range );
if ( isDefined( trigger ) && time_to_ressess && closest.size < 2 || isDefined( trigger.thread_running ) && trigger.thread_running )
{
if ( assess_and_apply_visibility( trigger, trigger.stub, player, 1 ) )
{
@ -485,13 +457,15 @@ main()
last_trigger = undefined;
while ( index < closest.size )
{
while ( !is_player_valid( player ) && isDefined( closest[ index ].ignore_player_valid ) && !closest[ index ].ignore_player_valid )
if ( !maps/mp/zombies/_zm_utility::is_player_valid( player ) && isDefined( closest[ index ].ignore_player_valid ) && !closest[ index ].ignore_player_valid )
{
index++;
continue;
}
while ( isDefined( closest[ index ].registered ) && !closest[ index ].registered )
if ( isDefined( closest[ index ].registered ) && !closest[ index ].registered )
{
index++;
continue;
}
if ( isDefined( last_trigger ) )
{
@ -511,41 +485,34 @@ main()
level._unitriggers.trigger_pool[ player getentitynumber() ] = trigger;
}
}
else
{
if ( !isDefined( closest[ index ].trigger ) )
else if ( !isDefined( closest[ index ].trigger ) )
{
trigger = build_trigger_from_unitrigger_stub( closest[ index ], player );
level._unitriggers.trigger_pool[ player getentitynumber() ] = trigger;
}
}
if ( isDefined( trigger ) )
{
trigger.parent_player = player;
if ( assess_and_apply_visibility( trigger, closest[ index ], player, 0 ) )
{
i++;
continue;
break;
}
else
{
last_trigger = trigger;
}
index++;
waited = 1;
wait 0,05;
}
wait 0.05;
}
i++;
}
if ( !waited )
{
wait 0,05;
wait 0.05;
}
}
}
run_visibility_function_for_all_triggers()
run_visibility_function_for_all_triggers() //checked changed to match cerberus output
{
if ( !isDefined( self.prompt_and_visibility_func ) )
{
@ -558,14 +525,12 @@ run_visibility_function_for_all_triggers()
return;
}
players = getplayers();
i = 0;
while ( i < players.size )
for ( i = 0; i < players.size; i++ )
{
if ( isDefined( self.playertrigger[ players[ i ] getentitynumber() ] ) )
{
self.playertrigger[ players[ i ] getentitynumber() ] [[ self.prompt_and_visibility_func ]]( players[ i ] );
}
i++;
}
}
else if ( isDefined( self.trigger ) )
@ -574,7 +539,7 @@ run_visibility_function_for_all_triggers()
}
}
build_trigger_from_unitrigger_stub( stub, player )
build_trigger_from_unitrigger_stub( stub, player ) //checked matches cerberus output
{
if ( isDefined( level._zm_build_trigger_from_unitrigger_stub_override ) )
{
@ -689,7 +654,7 @@ build_trigger_from_unitrigger_stub( stub, player )
return trigger;
}
copy_zombie_keys_onto_trigger( trig, stub )
copy_zombie_keys_onto_trigger( trig, stub ) //checked matches cerberus output
{
trig.script_noteworthy = stub.script_noteworthy;
trig.targetname = stub.targetname;
@ -699,7 +664,7 @@ copy_zombie_keys_onto_trigger( trig, stub )
trig.usetime = stub.usetime;
}
trigger_thread( trigger_func )
trigger_thread( trigger_func ) //checked matches cerberus output
{
self endon( "kill_trigger" );
if ( isDefined( trigger_func ) )
@ -708,7 +673,7 @@ trigger_thread( trigger_func )
}
}
get_closest_unitrigger_index( org, array, dist )
get_closest_unitrigger_index( org, array, dist ) //checked partially changed to match cerberus output //did not change while loop to for loop to prevent infinite loop due to continue
{
if ( !isDefined( dist ) )
{
@ -736,17 +701,14 @@ get_closest_unitrigger_index( org, array, dist )
i++;
continue;
}
else
{
distsq = newdistsq;
index = i;
}
i++;
}
return index;
}
get_closest_unitriggers( org, array, dist )
get_closest_unitriggers( org, array, dist ) //checked partially changed to match cerberus output did not change while loop to for loop to prevent infinite loop due to continue
{
triggers = [];
if ( !isDefined( dist ) )
@ -767,7 +729,7 @@ get_closest_unitriggers( org, array, dist )
i++;
continue;
}
else origin = array[ i ] unitrigger_origin();
origin = array[ i ] unitrigger_origin();
radius_sq = array[ i ].test_radius_sq;
newdistsq = distance2dsquared( origin, org );
if ( newdistsq >= radius_sq )
@ -775,26 +737,23 @@ get_closest_unitriggers( org, array, dist )
i++;
continue;
}
else if ( abs( origin[ 2 ] - org[ 2 ] ) > 42 )
if ( abs( origin[ 2 ] - org[ 2 ] ) > 42 )
{
i++;
continue;
}
else
{
array[ i ].dsquared = newdistsq;
j = 0;
while ( j < triggers.size && newdistsq > triggers[ j ].dsquared )
for ( j = 0; j < triggers.size && newdistsq > triggers[j].dsquared; j++ )
{
j++;
}
arrayinsert( triggers, array[ i ], j );
if ( ( i % 10 ) == 9 )
{
wait 0,05;
}
wait 0.05;
}
i++;
}
return triggers;
}

File diff suppressed because it is too large Load Diff

View File

@ -33,14 +33,13 @@ patch_zm/maps/mp/zombies/_zm_timer.gsc
### The following scripts compile and run successfully with major errors:
```
patch_zm/maps/mp/gametypes_zm/_zm_gametype.gsc
patch_zm/maps/mp/zombies/_zm_chugabud.gsc
patch_zm/maps/mp/zombies/_zm_spawner.gsc
patch_zm/maps/mp/zombies/_zm_utility.gsc
patch_zm/maps/mp/zombies/_zm_weapons.gsc
```
### The following scripts compile and run serverside but clients cannot join due to exe_client_field_mismatch
```
patch_zm/maps/mp/zombies/_zm.gsc
patch_zm/maps/mp/zombies/_zm_equipment.gsc
```
### The following scripts compile but cause a minidump or other severe error:
```
@ -49,6 +48,7 @@ patch_zm/maps/mp/zombies/_zm_pers_upgrades_functions.gsc
```
### The following scripts have been checked, but they have not been tested yet
```
patch_zm/maps/mp/zombies/_zm_buildables.gsc
patch_zm/maps/mp/zombies/_zm_game_module.gsc
patch_zm/maps/mp/zombies/_zm_magicbox_lock.gsc
patch_zm/maps/mp/zombies/_zm_playerhealth.gsc
@ -60,19 +60,19 @@ patch_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc
### The following scripts are not checked yet, uploaded to setup a baseline:
```
patch_zm/maps/mp/zombies/_zm_blockers.gsc
patch_zm/maps/mp/zombies/_zm_buildables.gsc
patch_zm/maps/mp/zombies/_zm_equip_turbine.gsc
patch_zm/maps/mp/zombies/_zm_laststand.gsc
patch_zm/maps/mp/zombies/_zm_sidequests.gsc
patch_zm/maps/mp/zombies/_zm_stats.gsc
patch_zm/maps/mp/zombies/_zm_unitrigger.gsc
patch_zm/maps/mp/zombies/_zm_utility.gsc
```
### The following scripts have not been checked using the proper debugging methods:
```
//I will put these off to towards much later since the hacker and gas mask are parts of the game that do not exist inside the game in any capacity whatsoever.
//Therefore, whether or not they work is irrelevant.
patch_zm/maps/mp/zombies/_zm_devgui.gsc
patch_zm/maps/mp/zombies/_zm_chugabud.gsc
patch_zm/maps/mp/zombies/_zm_equipment.gsc
patch_zm/maps/mp/zombies/_zm_equip_hacker.gsc
patch_zm/maps/mp/zombies/_zm_equip_gasmask.gsc
patch_zm/maps/mp/zombies/_zm_hackables_boards.gsc