From 91dea1e8d759170eede59497c141e07d9a833d72 Mon Sep 17 00:00:00 2001 From: JezuzLizard Date: Sun, 19 Jul 2020 02:55:24 -0700 Subject: [PATCH] Rechecked 3 scripts Rechecked _zm_chugabud.gsc, _zm_laststand.gsc, and _zm_spawner.gsc. All have been moved to No Known Errors. --- patch_zm/maps/mp/zombies/_zm_chugabud.gsc | 13 ++++- patch_zm/maps/mp/zombies/_zm_laststand.gsc | 58 +++++++++------------- patch_zm/maps/mp/zombies/_zm_spawner.gsc | 54 +++++++++----------- patch_zm/readme.md | 6 +-- 4 files changed, 63 insertions(+), 68 deletions(-) diff --git a/patch_zm/maps/mp/zombies/_zm_chugabud.gsc b/patch_zm/maps/mp/zombies/_zm_chugabud.gsc index 46c9686..6bffcc5 100644 --- a/patch_zm/maps/mp/zombies/_zm_chugabud.gsc +++ b/patch_zm/maps/mp/zombies/_zm_chugabud.gsc @@ -58,6 +58,8 @@ chugabud_laststand() //checked changed to match cerberus output } } } + logline1 = "INFO: _zm_chugabud.gsc chugabud_laststand() create_corpse: " + create_corpse + "\n"; + logprint( logline1 ); if ( create_corpse == 1 ) { self thread activate_chugabud_effects_and_audio(); @@ -216,13 +218,17 @@ chugabud_save_loadout() //checked changed to match cerberus output self.loadout.weapons = []; self.loadout.score = self.score; self.loadout.current_weapon = -1; + index = 0; foreach ( weapon in primaries ) { + logline1 = "weapon: " + weapon + "\n"; + logprint( logline1 ); self.loadout.weapons[ index ] = maps/mp/zombies/_zm_weapons::get_player_weapondata( self, weapon ); if ( weapon == currentweapon || self.loadout.weapons[ index ][ "alt_name" ] == currentweapon ) { self.loadout.current_weapon = index; } + index++; } self.loadout.equipment = self get_player_equipment(); if ( isDefined( self.loadout.equipment ) ) @@ -277,6 +283,8 @@ chugabud_give_loadout() //checked partially changed to match cerberus output con i = 0; while ( i < loadout.weapons.size ) { + logline1 = "loadout.weapons[ " + i + " ][ name ] " + loadout.weapons[ i ][ "name" ] + "\n"; + logprint( logline1 ); if ( !isDefined( loadout.weapons[ i ] ) ) { i++; @@ -593,7 +601,7 @@ restore_weapons_for_chugabud( player ) //checked changed to match cerberus outpu restore_weapon_for_chugabud( player, weapon_name ) //checked changed to match cerberus output { - if ( isDefined( weapon_name ) || !isDefined( self.chugabud_melee_weapons ) || !isDefined( self.chugabud_melee_weapons[ weapon_name ] ) ) + if ( !isDefined( weapon_name ) || !isDefined( self.chugabud_melee_weapons ) || !isDefined( self.chugabud_melee_weapons[ weapon_name ] ) ) { return; } @@ -794,3 +802,6 @@ deactivate_chugabud_effects_and_audio() //checked matches cerberus output + + + diff --git a/patch_zm/maps/mp/zombies/_zm_laststand.gsc b/patch_zm/maps/mp/zombies/_zm_laststand.gsc index 70630f8..c7dfa3f 100644 --- a/patch_zm/maps/mp/zombies/_zm_laststand.gsc +++ b/patch_zm/maps/mp/zombies/_zm_laststand.gsc @@ -1,6 +1,9 @@ +//checked includes changed to match cerberus output #include maps/mp/zombies/_zm_perks; #include maps/mp/zombies/_zm_chugabud; #include maps/mp/zombies/_zm_equipment; +#include maps/mp/zombies/_zm_buildables; +#include maps/mp/gametypes_zm/_gameobjects; #include maps/mp/zombies/_zm_pers_upgrades_functions; #include maps/mp/zombies/_zm_stats; #include maps/mp/_demo; @@ -17,7 +20,7 @@ laststand_global_init() //checked matches cerberus output level.const_laststand_getup_bar_damage = 0.1; } -init() //checked matches cerberus output +init() //checked matches cerberus output //checked matches beta dump { if ( level.script == "frontend" ) { @@ -50,18 +53,18 @@ init() //checked matches cerberus output player_is_in_laststand() //checked changed to match cerberus output //changed at own discretion { - if ( isDefined( self.no_revive_trigger ) && !self.no_revive_trigger && isDefined( self.revivetrigger ) ) + if ( !is_true( self.no_revive_trigger ) && isDefined( self.revivetrigger ) ) { return 1; } - if ( isDefined( self.laststand ) && self.laststand ) + if ( is_true( self.laststand ) ) { return 1; } return 0; } -player_num_in_laststand() //checked changed to match cerberus output +player_num_in_laststand() //checked changed to match cerberus output //checked matches beta dump { num = 0; players = get_players(); @@ -75,7 +78,7 @@ player_num_in_laststand() //checked changed to match cerberus output return num; } -player_all_players_in_laststand() //checked changed at own discretion +player_all_players_in_laststand() //checked changed at own discretion //checked matches beta dump { if ( player_num_in_laststand() == get_players().size ) { @@ -84,7 +87,7 @@ player_all_players_in_laststand() //checked changed at own discretion return 0; } -player_any_player_in_laststand() //checked changed at own discretion +player_any_player_in_laststand() //checked changed at own discretion //checked matches beta dump { if ( player_num_in_laststand() > 0 ) { @@ -161,7 +164,7 @@ increment_downed_stat() //checked matches cerberus output self recordplayerdownzombies( zonename ); } -playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked matches cerberus output +playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked matches cerberus output //checked changed to match beta dump { self notify( "entering_last_stand" ); if ( isDefined( level._game_module_player_laststand_callback ) ) @@ -186,7 +189,7 @@ playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, sh self.ignoreme = 1; self thread maps/mp/gametypes_zm/_gameobjects::onplayerlaststand(); self thread maps/mp/zombies/_zm_buildables::onplayerlaststand(); - if ( isDefined( self.no_revive_trigger ) && !self.no_revive_trigger ) + if ( !is_true( self.no_revive_trigger ) ) { self revive_trigger_spawn(); } @@ -194,12 +197,12 @@ playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, sh { self undolaststand(); } - if ( isDefined( self.is_zombie ) && self.is_zombie ) + if ( is_true( self.is_zombie ) ) { self takeallweapons(); if ( isDefined( attacker ) && isplayer( attacker ) && attacker != self ) { - attacker notify( "killed_a_zombie_player" ); + attacker notify( "killed_a_zombie_player", eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration ); } } else @@ -207,7 +210,7 @@ playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, sh self laststand_disable_player_weapons(); self laststand_give_pistol(); } - if ( isDefined( level.playersuicideallowed ) && level.playersuicideallowed && get_players().size > 1 ) + if ( is_true( level.playerSuicideAllowed ) && get_players().size > 1 ) { if ( !isDefined( level.canplayersuicide ) || self [[ level.canplayersuicide ]]() ) { @@ -415,7 +418,7 @@ laststand_bleedout( delay ) //checked changed to match cerberus output self endon( "player_suicide" ); self endon( "zombified" ); self endon( "disconnect" ); - if ( isDefined( self.is_zombie ) && self.is_zombie || isDefined( self.no_revive_trigger ) && self.no_revive_trigger ) + if ( is_true( self.is_zombie ) || is_true( self.no_revive_trigger ) ) { self notify( "bled_out" ); wait_network_frame(); @@ -639,9 +642,6 @@ suicide_do_suicide( duration ) //checked matches cerberus output suicided = 1; break; } - else - { - } } if ( isDefined( self.suicideprogressbar ) ) { @@ -676,7 +676,7 @@ can_suicide() //checked matches cerberus output { return 0; } - if ( isDefined( level.intermission ) && level.intermission ) + if ( is_true( level.intermission ) ) { return 0; } @@ -886,7 +886,7 @@ is_reviving( revivee ) //checked changed at own discretion is_reviving_any() //checked changed at own discretion { - if ( isDefined( self.is_reviving_any ) && self.is_reviving_any ) + if ( is_true( self.is_reviving_any ) ) { return 1; } @@ -1107,7 +1107,7 @@ revive_success( reviver, b_track_stats ) //checked changed to match cerberus out { self thread maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_perk_lose_restore(); } - if ( isDefined( level.isresetting_grief ) && !level.isresetting_grief && isDefined( b_track_stats ) && b_track_stats ) + if ( !is_true( level.isresetting_grief ) && isDefined( b_track_stats ) && b_track_stats ) { reviver.revives++; reviver maps/mp/zombies/_zm_stats::increment_client_stat( "revives" ); @@ -1215,7 +1215,7 @@ revive_hud_think() //checked partially changed to match cerberus output //did no i++; continue; } - if ( isDefined( level.hide_revive_message ) && level.hide_revive_message ) + if ( is_true( level.hide_revive_message ) ) { i++; continue; @@ -1292,7 +1292,7 @@ get_lives_remaining() //checked matches cerberus output return 0; } -update_lives_remaining( increment ) //checked changed to match cerberus output +update_lives_remaining( increment ) //checked changed to match cerberus output //probably causes a crash since ternary operators may not be supported by the current compiler { /* /# @@ -1302,20 +1302,8 @@ update_lives_remaining( increment ) //checked changed to match cerberus output assert( isDefined( increment ), "Must specify increment true or false" ); #/ */ - if ( isDefined( increment ) ) - { - } - else - { - } - increment = 0; - if ( increment ) - { - } - else - { - } - self.laststand_info.type_getup_lives = max( 0, self.laststand_info.type_getup_lives - 1, self.laststand_info.type_getup_lives + 1 ); + increment = (isdefined( increment )?increment:false ); + self.laststand_info.type_getup_lives = max( 0, ( increment?self.laststand_info.type_getup_lives + 1:self.laststand_info.type_getup_lives - 1 ) ); self notify( "laststand_lives_updated", self.laststand_info.type_getup_lives + 1, increment ); } @@ -1450,3 +1438,5 @@ cleanup_laststand_on_disconnect() //checked matches cerberus output } + + diff --git a/patch_zm/maps/mp/zombies/_zm_spawner.gsc b/patch_zm/maps/mp/zombies/_zm_spawner.gsc index 05c90fd..153fee5 100644 --- a/patch_zm/maps/mp/zombies/_zm_spawner.gsc +++ b/patch_zm/maps/mp/zombies/_zm_spawner.gsc @@ -215,11 +215,6 @@ zombie_spawn_init( animname_set ) //checked partially changed to match cerberus self.chatinitialized = 0; self.a.disablepain = 1; - self.no_damage_points = 0; //wasn't defined anywhere defining here - self.no_eye_glow = 0; //wasn't defined anywhere defining here - self.create_eyes = 1; //wasn't defined anywhere defining here - self.is_inert = 0; //wasn't defined anywhere defining here - self disable_react(); if ( isDefined( level.zombie_health ) ) { @@ -263,7 +258,7 @@ zombie_spawn_init( animname_set ) //checked partially changed to match cerberus } if ( !isDefined( self.no_eye_glow ) || !self.no_eye_glow ) { - if ( isDefined( self.is_inert ) && !self.is_inert ) + if ( !is_true( self.is_inert ) ) //imported from beta dump { self thread delayed_zombie_eye_glow(); } @@ -295,7 +290,7 @@ zombie_spawn_init( animname_set ) //checked partially changed to match cerberus delayed_zombie_eye_glow() //checked changed to match cerberus output { self endon( "zombie_delete" ); - if ( isDefined( self.in_the_ground ) && self.in_the_ground || isDefined( self.in_the_ceiling ) && self.in_the_ceiling ) + if ( is_true( self.in_the_ground ) || is_true( self.in_the_ceiling ) ) { while ( !isDefined( self.create_eyes ) ) { @@ -378,7 +373,7 @@ zombie_think() //checked changed to match cerberus output self waittill( "zombie_custom_think_done", find_flesh_struct_string ); } } - else if ( isDefined( self.start_inert ) && self.start_inert ) + else if ( is_true( self.start_inert ) ) { find_flesh_struct_string = "find_flesh"; } @@ -432,7 +427,7 @@ zombie_think() //checked changed to match cerberus output self waittill( "goal" ); } } - if ( isDefined( self.start_inert ) && self.start_inert ) + if ( is_true( self.start_inert ) ) { self thread maps/mp/zombies/_zm_ai_basic::start_inert( 1 ); self zombie_complete_emerging_into_playable_area(); @@ -1048,7 +1043,7 @@ zombie_boardtear_offset_fx_horizontle( chunk, node ) //checked changed to match } else if ( isDefined( chunk.material ) && chunk.material == "rock" ) { - if ( isDefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + if ( is_true( level.use_clientside_rock_tearin_fx ) ) { chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); } @@ -1062,7 +1057,7 @@ zombie_boardtear_offset_fx_horizontle( chunk, node ) //checked changed to match } if ( isDefined( chunk.script_parameters ) && chunk.script_parameters == "barricade_vents" ) { - if ( isDefined( level.use_clientside_board_fx ) && level.use_clientside_board_fx ) + if ( is_true( level.use_clientside_board_fx ) ) { chunk setclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); } @@ -1073,16 +1068,14 @@ zombie_boardtear_offset_fx_horizontle( chunk, node ) //checked changed to match } else if ( isDefined( chunk.material ) && chunk.material == "rock" ) { - if ( isDefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + if ( is_true( level.use_clientside_rock_tearin_fx ) ) { chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); } - //return; } else if ( isDefined( level.use_clientside_board_fx ) ) { chunk setclientflag( level._zombie_scriptmover_flag_board_horizontal_fx ); - //return; } else { @@ -1094,7 +1087,7 @@ zombie_boardtear_offset_fx_horizontle( chunk, node ) //checked changed to match zombie_boardtear_offset_fx_verticle( chunk, node ) //checked changed to match cerberus output { - if ( isDefined( chunk.script_parameters ) || chunk.script_parameters == "repair_board" && chunk.script_parameters == "board" ) + if ( ( chunk.script_parameters == "repair_board" || chunk.script_parameters == "board" ) && isDefined( chunk.script_parameters ) ) { if ( isDefined( chunk.unbroken ) && chunk.unbroken == 1 ) { @@ -1110,7 +1103,7 @@ zombie_boardtear_offset_fx_verticle( chunk, node ) //checked changed to match ce } else if ( isDefined( chunk.material ) && chunk.material == "rock" ) { - if ( isDefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + if ( is_true( level.use_clientside_rock_tearin_fx ) ) { chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); } @@ -1135,7 +1128,7 @@ zombie_boardtear_offset_fx_verticle( chunk, node ) //checked changed to match ce } if ( isDefined( chunk.material ) && chunk.material == "rock" ) { - if ( isDefined( level.use_clientside_rock_tearin_fx ) && level.use_clientside_rock_tearin_fx ) + if ( is_true( level.use_clientside_rock_tearin_fx ) ) { chunk setclientflag( level._zombie_scriptmover_flag_rock_fx ); } @@ -1617,7 +1610,7 @@ zombie_should_gib( amount, attacker, type ) //checked changed to match cerberus { return 0; } - if ( isDefined( self.is_on_fire ) && self.is_on_fire ) + if ( is_true( self.is_on_fire ) ) { return 0; } @@ -1799,7 +1792,7 @@ zombie_death_points( origin, mod, hit_location, attacker, zombie, team ) //check { event = "ballistic_knife_death"; } - if ( isDefined( zombie.deathpoints_already_given ) && zombie.deathpoints_already_given ) + if ( is_true( zombie.deathpoints_already_given ) ) { return; } @@ -2073,7 +2066,7 @@ zombie_damage( mod, hit_location, hit_origin, player, amount, team ) //checked c { damage_type = "damage_light"; } - if ( isDefined( self.no_damage_points ) && !self.no_damage_points ) + if ( !is_true self.no_damage_points ) ) { player maps/mp/zombies/_zm_score::player_add_points( damage_type, mod, hit_location, self.isdog, team, self.damageweapon ); } @@ -2187,7 +2180,7 @@ zombie_damage_ads( mod, hit_location, hit_origin, player, amount, team ) //check { damage_type = "damage_light"; } - if ( isDefined( self.no_damage_points ) && !self.no_damage_points ) + if ( !is_true( self.no_damage_points ) ) { player maps/mp/zombies/_zm_score::player_add_points( damage_type, mod, hit_location, undefined, team, self.damageweapon ); } @@ -2374,11 +2367,11 @@ zombie_death_event( zombie ) //checked changed to match cerberus output if ( isDefined( zombie.damagehit_origin ) && distancesquared( zombie.origin, zombie.damagehit_origin ) < ( splode_dist * splode_dist ) ) { tag = "J_SpineLower"; - if ( isDefined( zombie.isdog ) && zombie.isdog ) + if ( is_true( zombie.isdog ) ) { tag = "tag_origin"; } - if ( isDefined( zombie.is_on_fire ) && !zombie.is_on_fire && isDefined( zombie.guts_explosion ) && !zombie.guts_explosion ) + if ( !is_true( zombie.is_on_fire ) && !is_true( zombie.guts_explosion ) ) { zombie thread zombie_gut_explosion(); } @@ -2392,7 +2385,7 @@ zombie_death_event( zombie ) //checked changed to match cerberus output attacker.grenade_multiattack_ent = zombie; } } - if ( isDefined( zombie.has_been_damaged_by_player ) && !zombie.has_been_damaged_by_player && isDefined( zombie.marked_for_recycle ) && zombie.marked_for_recycle ) + if ( !is_true( zombie.has_been_damaged_by_player ) && is_true( zombie.marked_for_recycle ) ) { level.zombie_total++; level.zombie_total_subtract++; @@ -2422,7 +2415,7 @@ zombie_death_event( zombie ) //checked changed to match cerberus output weapon = zombie.damageweapon; bbprint( "zombie_kills", "round %d zombietype %s damagetype %s damagelocation %s playername %s playerweapon %s playerx %f playery %f playerz %f zombiex %f zombiey %f zombiez %f", level.round_number, zombie.animname, damagemod, damageloc, attacker.name, weapon, attacker.origin, zombie.origin ); } - else if ( zombie.ignoreall && isDefined( zombie.marked_for_death ) && !zombie.marked_for_death ) + else if ( zombie.ignoreall && !is_true( zombie.marked_for_death ) ) { level.zombies_timeout_spawn++; } @@ -2437,7 +2430,7 @@ zombie_gut_explosion() //checked matches cerberus output { self setclientfield( "zombie_gut_explosion", 1 ); } - if ( isDefined( self.isdog ) && !self.isdog ) + if ( !is_true( self.isdog ) ) { wait 0.1; } @@ -2745,7 +2738,7 @@ zombie_follow_enemy() //checked changed to match cerberus output { self._skip_pathing_first_delay = undefined; } - if ( isDefined( self.ignore_enemyoverride ) && !self.ignore_enemyoverride && isDefined( self.enemyoverride ) && isDefined( self.enemyoverride[ 1 ] ) ) + if ( !is_true( self.ignore_enemyoverride ) && isDefined( self.enemyoverride ) && isDefined( self.enemyoverride[ 1 ] ) ) { if ( distancesquared( self.origin, self.enemyoverride[ 0 ] ) > 1 ) { @@ -3167,7 +3160,7 @@ zombie_rise_death( zombie, spot ) //checked matches cerberus output zombie_rise_fx( zombie ) //checked matches cerberus output { - if ( isDefined( level.riser_fx_on_client ) && !level.riser_fx_on_client ) + if ( !is_true( level.riser_fx_on_client ) ) { self thread zombie_rise_dust_fx( zombie ); self thread zombie_rise_burst_fx( zombie ); @@ -3189,11 +3182,11 @@ zombie_rise_burst_fx( zombie ) //checked changed to match cerberus output { self endon( "stop_zombie_rise_fx" ); self endon( "rise_anim_finished" ); - if ( isDefined( self.script_parameters ) && self.script_parameters == "in_water" && isDefined( level._no_water_risers ) && !level._no_water_risers ) + if ( isDefined( self.script_parameters ) && self.script_parameters == "in_water" && !is_true( level._no_water_risers ) ) { zombie setclientfield( "zombie_riser_fx_water", 1 ); } - else if ( isDefined( self.script_parameters ) && self.script_parameters == "in_foliage" && isDefined( level._foliage_risers ) && level._foliage_risers ) + else if ( isDefined( self.script_parameters ) && self.script_parameters == "in_foliage" && is_true( level._foliage_risers ) ) { zombie setclientfield( "zombie_riser_fx_foliage", 1 ); return; @@ -3366,3 +3359,4 @@ zombie_free_cam_allowed() //checked matches cerberus output } + diff --git a/patch_zm/readme.md b/patch_zm/readme.md index 8ce2cec..c198d11 100644 --- a/patch_zm/readme.md +++ b/patch_zm/readme.md @@ -14,9 +14,11 @@ patch_zm/maps/mp/zombies/_zm_ai_faller.gsc patch_zm/maps/mp/zombies/_zm_audio.gsc patch_zm/maps/mp/zombies/_zm_audio_announcer.gsc patch_zm/maps/mp/zombies/_zm_bot.gsc +patch_zm/maps/mp/zombies/_zm_chugabud.gsc patch_zm/maps/mp/zombies/_zm_clone.gsc patch_zm/maps/mp/zombies/_zm_ffotd.gsc patch_zm/maps/mp/zombies/_zm_gump.gsc +patch_zm/maps/mp/zombies/_zm_laststand.gsc patch_zm/maps/mp/zombies/_zm_magicbox.gsc patch_zm/maps/mp/zombies/_zm_net.gsc patch_zm/maps/mp/zombies/_zm_perk_electric_cherry.gsc @@ -26,6 +28,7 @@ patch_zm/maps/mp/zombies/_zm_pers_upgrades_system.gsc patch_zm/maps/mp/zombies/_zm_powerups.gsc patch_zm/maps/mp/zombies/_zm_server_throttle.gsc patch_zm/maps/mp/zombies/_zm_score.gsc +patch_zm/maps/mp/zombies/_zm_spawner.gsc patch_zm/maps/mp/zombies/_zm_tombstone.gsc patch_zm/maps/mp/zombies/_zm_weapons.gsc patch_zm/maps/mp/zombies/_zm_zonemgr.gsc @@ -37,7 +40,6 @@ patch_zm/maps/mp/zombies/_zm_timer.gsc ``` ### The following scripts compile and run successfully with major errors: ``` -patch_zm/maps/mp/zombies/_zm_spawner.gsc patch_zm/maps/mp/zombies/_zm_utility.gsc ``` ### The following scripts compile and run serverside but clients cannot join due to exe_client_field_mismatch @@ -65,11 +67,9 @@ patch_zm/maps/mp/gametypes_zm/_weapons.gsc patch_zm/maps/mp/gametypes_zm/_weapon_utils.gsc patch_zm/maps/mp/zombies/_zm_blockers.gsc patch_zm/maps/mp/zombies/_zm_buildables.gsc -patch_zm/maps/mp/zombies/_zm_chugabud.gsc patch_zm/maps/mp/zombies/_zm_equipment.gsc patch_zm/maps/mp/zombies/_zm_equip_turbine.gsc patch_zm/maps/mp/zombies/_zm_game_module.gsc -patch_zm/maps/mp/zombies/_zm_laststand.gsc patch_zm/maps/mp/zombies/_zm_magicbox_lock.gsc patch_zm/maps/mp/zombies/_zm_playerhealth.gsc patch_zm/maps/mp/zombies/_zm_power.gsc