Skip to main content
← Back to Projects

Media

Media 1 of 5
Media 1 of 5

About the mod

Zombie Horde 2 is a multiplayer mod for Doom II on the Zandronum source port. It's the sequel to Zombie Horde (opens in a new tab) View Zombie Horde on Doomwiki , originally created by David "Xsnake" Bernardi. The mod is a total reboot, built from the ground up and unrelated to the original's codebase.

Zombie Horde 2 makes a big push to representation by providing map support, scalability and great gameplay. It fully supports every map from the original Zombie Horde's beta, mappack, testpack and newmappack releases, with more support planned as development continues. Many new systems and improvements support this sequel, including a new voting system that lets players pick from three randomly chosen maps, and custom gamemodes can extend the familiar survival and escape modes. The mod also gives clients authority over many of the features that need processing, which improves performance and generally works better than mods that keep that authority on the server. Features can be heavily configured by server hosts and clients alike, which makes hosting and playing a very pleasant experience as anything you don't like can just be turned off.

History

Xsnake handed development over to RoyDefined in 2016. The plan was originally a new version called Zombie Horde: The Extinction, but as work continued the scope grew into a much bigger sequel, and the project was renamed Zombie Horde 2. Development slowed and eventually stopped in 2020, when Zandronum's engine struggled to support the mod's vision. On-and-off work continued afterwards until the project restarted from scratch in late 2023. With an improved vision, development has since reached public beta, with its initial version released at Halloween 2025.

How to play

Each map, a number of players are chosen as initial zombies based on the current player count. From there, it's a fight for survival: zombies must infect every human before the round ends, while humans need to survive the horde and avoid infection, killing zombies along the way. Taking on zombies alone is difficult, humans are far more effective as a team. When a human is infected, they turn into a regular zombie. Initial zombies are a stronger type, able to take more damage from humans before dying. Depending on the map type health may vary.

The game implements two types of gamemodes.
In the survival gamemode humans must survive against zombies for a certain period as specified with a timer that shows on that map. When the timer ends, all zombies on the map will die. This means humans must find ways to wait out this time, either by hiding or defending on a certain position. This makes it incredible important that humans team up to fight against the zombies.
In the escape gamemode, humans are not hiding. They must traverse a linear map containing resist points as zombies once again try to infect everybody. These maps do not have a timer. Rather, the resist points are the big element of these maps. Every escape map has one or more resist point where humans must defend the point from zombies and avoid getting overwhelmed. These points are often in the human's favour, and good teamwork is guaranteed to keep the zombies away. Zombies must try and catch the humans, either during resists or between them. After a certain number of resists humans will find themselves near the end, where a safezone exists. When the safezone is reached, the map will end and anybody not reaching the safezone within a certain time will die. After that humans must kill the remaining zombies, and zombies must try and infect the remaining humans.

As development goes on more gamemodes might be added. However, map developers are free to implement their own gamemode. Zombie Horde 2 has a very large range of functions available in its API, and with the ZHMAPDEF lump (opens in a new tab) View documentation of the ZHMAPDEF lump on the wiki you can configure map-specific settings and features to your liking.

Weaponry

Humans start each round with a base set of weaponry. Every weapon serves a different purpose, so picking the right one for the situation is key.

Pump-action shotgun

Effective for medium damage at short range.

Fire: An accurate multi-pellet shot.

Used for: Crowd control. Push zombies back with powerful pellet shots. Its higher damage also makes it a solid all-round weapon for support or offense.

Woundable chain gun

Effective up to medium range.

Fire: A stream of bullets at a high rate of fire.

Alt-fire: Wind up the barrel for a quicker follow-up rate of fire.

Used for: Crowd control. Not strong on its own, but its sustained fire slows zombies down, making it a great support weapon alongside a shotgun or other damage dealer.

Bolt-action sniper

Highly effective at long range.

Fire: A deadly bolt, at the cost of a slow firing rate.

Alt-fire: An optional zoom for longer-range shots.

Used for: Damage. The best tool for picking off zombies at range. It has almost no knockback, so stay cautious once zombies close in. Pair it with a crowd-control weapon for a winning combination.

9mm pistol

A last resort, for when all else fails.

Fire: A small bullet. Low damage, a fairly high rate of fire and low knockback.

Note: Only given when you panic, or as a pickup. The pistol is what a human falls back to while fleeing, trading damage for a burst of extra speed. Useful for getting away, not much else.

Flame grenade

A defensive tool that can be thrown to varying distances.

Fire: Unpin and hold. The longer you hold, the further it's thrown.

Alt-fire: Having second thoughts? Repin the grenade.

Used for: Crowd control. Limited in quantity, but hugely effective against groups. Zombies on fire move much slower, making them easy kills or a good distraction to escape.

Note: for balance reasons the fire grenade is given at random on the map start.

Special weaponry

Special weaponry isn't handed out by default. It's found on the map or rewarded for contributing to the game, and it gives an edge well above the standard loadout.

Jack's gun

The infamous gun from Jack, a real zombie killer.

Fire: A massive spread of bullets that destroys everything it touches.

Used for: Massive damage. Land every pellet and a zombie has almost no chance of surviving. A second shot is almost a guaranteed kill.

Double-barreled shotgun

Effective for medium damage and heavy knockback at short range.

Fire: A devastating 20-pellet shot with massive knockback.

Alt-fire: A single barrel at half the power.

Used for: Crowd control and damage. The best of both worlds, with enough knockback and damage to fight off even the strongest zombie. Land that perfect shot and the zombie won't be anywhere near you by the time you've reloaded.

Riot gun

An automatic shotgun with a fast rate of fire.

Fire: Fires faster than the standard shotgun, but only holds twelve shots before it needs to reload.

Used for: Sustained close-range damage. Just watch your limited ammo, and remember it's slower to carry than other weapons.

Other weaponry

Not everything on the map is meant for fighting. Some items exist purely for fun.

Radio

A cosmetic pickup found on the map.

Pick it up to play music for yourself and anyone nearby. It has no effect on gameplay, but it's a fun way to set the mood, and it doubles as the way players enjoy custom radio packs while they play.

Zombie abilities

Zombies get access to abilities alongside their attacks. Initial zombies start with two, regular zombies with one. Regular zombies can receive another ability as a rewarded.

Push

Push away blocking obstacles and anything else. This includes humans, but it does no damage.

Acid-spit attack

A long-range spit that covers an area in acid, damaging and heavily slowing any human it lands on. The slow lingers, leaving hit humans in serious trouble.

Lunge attack

Not yet released.

A giant leap toward a target, with adjustable distance. A zombie that lunges into a human can infect them mid-jump.

Vision pulse

Not yet released.

Reveal the position of nearby humans for a short time. Even the ones hiding from you.

Legacy map support

Zombie Horde 2 supports the maps from the original Zombie Horde's various releases.

Beta Supported
Mappack Supported
Testpack Supported
Newmappack Mostly supported
Other maps Added over time

Only ZM10 is left unsupported from the newmappack maps, with support planned for a future update.

Other maps aren't tied to any specific pack, and are added occasionally as development continues.

Features

A selection of the systems and improvements that have gone into Zombie Horde 2.

Admin mode

Lets a server admin change nearly any aspect of a round on the fly. Admins can hand out weapons and items, reward containers, kevlar points, kill players, and target individual players, all humans, all zombies, or everyone at once. Round manipulation covers changing round states, ending the game early with an optional force restart, adding or removing time or changing the active timer, and starting or stopping resists. It also allows players to join mid-round through a toggle.

Eventbus system

Extends Zandronum's built-in event scripts (opens in a new tab) View Zandronum's documentation about the EVENT scripts type with a custom bus that supports defining as many custom events as needed, including ones that can be called clientside. Its one drawback is that, unlike the built-in system, it doesn't support pointers. Some events are still better served by the engine's own system. See the guide on using the eventbus (opens in a new tab) View the eventbus guide for more.

Anti-SR50 system

SR50 has always been a controversial movement exploit, and one most casual or new players don't even know exists. In a game where speed matters this much, it doesn't belong. This system detects the combined inputs that cause SR50 and reduces the player's speed in response. Server hosts who want to keep it can disable the system through a cvar.

Zombie leave compensation

When a zombie leaves mid-round, their remaining health is distributed among the other zombies, and the round timer is extended based on how much health was left, reducing the chance a round becomes trivial just because a zombie disconnected. Both the amount of health and time added are configurable through cvars, and the system can be disabled entirely.

If a zombie was damaged enough when they left, a kill can be compensated to the human team. The required damage percentage is configurable, and if multiple players qualify, whoever dealt the most damage wins the kill.

Server hosts can configure a grace period after an early zombie leave, after which the map resets. This is like ending the round like normal, minus the stats.

Zombie bans on leaving the round

The game can now ban a zombie who leaves mid-round using Zandronum's sv_maxacsbanduration cvar. Server hosts can enable this by setting the cvar, or disable it by setting it to 0. The ban duration matches the value configured there.

AFK prevention on round start

When a map starts, server hosts can configure a grace period in which players must move. The HUD informs players of the requirement, clearing once they move. Anyone who stays idle past the deadline is kicked to spectator, with the game announcing who got kicked for inactivity. Kicked players can still rejoin while the round remains joinable.

AFK prevention for zombies

Zombies are required to actively contribute or they might be kicked for being AFK. An AFK zombie only makes things harder for the zombie team and hands humans an easy kill. Idle zombies are tracked and warned to stay active, and are kicked under the same rules as round-start AFK detection, including the possibility of a ban for leaving early if this is configured.

Legacy map fixes and improvements

Every legacy map has received some amount of love: bug fixes, balance changes and general behavior improvements, while staying faithful to the map you remember. Old quirks and issues have been ironed out, plenty of ACS has been fixed, and some maps received visual adjustments where needed. For example, widening rooms to comfortably fit up to 64 players.

Advanced initial zombie pick system

The game provides different ways to pick the initial zombie to configure a server to the server host's liking. The different pick system can be selected using the sv_zh2_initialpickmethod cvar:

  • Randomized - no special logic, anyone can be picked at any time.
  • Legacy - everyone is picked once before the list resets.
  • Weight-based - picked by chance, with better odds the longer it's been since you were last picked.

The weight-based method is now the default, with the previous-map check disabled by default. Server hosts are free to tweak or revert either setting.

Additionally, the server can configure other settings such as whether or not we should always skip players that were picked on the previous map. This way the game always selects a fresh group of players.

Map voting

At the end of a round, players get to vote on the next map from up to three options, and the map with the most votes is picked next. The pool of maps comes from the server's map list, the same one used by Zandronum's built-in map rotation and its maplist command. Players can also vote to replay the current map, pick a random map, or move to the next map in the rotation instead. Map voting is highly configurable:

  • Votes can be restricted to only count from players, excluding spectators.
  • The voting threshold and cooldown between votes can both be tuned.
  • Maps can be restricted to only offer ones that haven't been played yet, skipping any that have. Once every map has been offered, the pool resets, just like the underlying map rotation does.

Map voting can also be turned off entirely, in which case a random map is picked instead.

Pick chance HUD

A new HUD element shows how likely you are to be picked as an initial zombie, calculated from the active pick method and the number of eligible players. It correctly accounts for remembered picks from the last map or earlier rounds when that configuration is enabled, and shows a clear message when the outcome is certain, or a percentage otherwise.

Custom radio music support

Servers can ship custom radio packs, giving the in-game radio item music to play and share with everyone on the server. Players can also load their own music personally, or share it with others running the same pack. The radio lets a player know if they don't own a given track, and how to add it. See the guide on adding custom radio music (opens in a new tab) View the custom radio music guide for details.

Damage feedback system

Players can now individually configure how damage they deal is communicated to them:

  • A hitmarker on damage (white) or a kill (red).
  • A sound on damage, which varies depending on whether the hit was a kill.
  • A running total of damage dealt on the HUD, which fades out after a while.
  • Floating damage numbers on the target, growing in size, gravity and color with the damage dealt. Shown either per hit or as a combined total, which changes how weapons like the shotgun display their damage.
Footstep system

An ACS-based footstep system that accurately plays footsteps based on what a player is standing on. Pacing scales with player speed, so walking slower produces slower, more muffled steps, and crouching muffles them further. Textures are configured through the STEPDEF lump, which also supports liquid textures and lets mappers attach splash actors that appear when a player walks through them.

Weapon tracers

An advanced tracer system that visualizes bullet direction and shows accurately where each shot lands, making it easy to see where your bullets are going, or to spot who's shooting at you. Tracers work correctly underwater too, leaving a trail of bubbles along the bullet's path instead of a regular tracer.

Advanced blood system

A system that spawns blood accurately at the point of impact when a player is shot. It's configurable per weapon, so heavier hitters can produce more blood over a longer period. The sniper, for example, can cause a lot of blood to spurt out. Blood sticks correctly to players and stays in the right position as they turn or move around.

Weather system

Zombie Horde never really had a weather system. Its features provided were using static actors, often not working well, especially in bigger areas. Zombie Horde 2 provides a full weather system split into three categories:

  • Emitter weather - particle effects like rain and snow, and now also dust and sparks, such as around a volcano.
  • Randomized weather - event-driven effects like thunder, running through the eventbus when it triggers.
  • Ambient weather - a sound layer covering things like rain and wind. It uses spots that track a player's surroundings to decide what should play.
Obituary system

A new, fully clientside visual feed. Not just kills and deaths, but also player safety and initial zombie picks are among the many things this feed will show. It's configurable through cl_zh2_shownobituaries or the game menu. Supported events include:

  • Initial picks, with the pick order shown when more than one player is chosen.
  • Reaching safety.
  • Being scratched or otherwise infected.
  • Being cured.
  • Dying without another player's involvement, with its own icon for unknown, suicide, falling, drowning, crushing, telefrag and unsafe deaths.
  • Being killed by another player or a monster, including the means of death.

Status effects like fire or acid are shown alongside the means of death when they contributed, or on their own when the cause is unclear.

The older log-based messages this replaces are still available as a fallback, and have themselves been improved with more varied, context-aware sentences. Toggle between the two through the game menu or cl_zh2_enableobituaries.

Damage source tracking

Damage-over-time effects like ignition or acid coverage previously lost track of who caused them, meaning a resulting death wouldn't credit the right player. This data is now retained, so the obituary system can correctly show the inflictor and owner, and the responsible player is properly rewarded for the kill.

Custom knockback system

Replaces Zandronum's built-in knockback with a custom system, toggleable through a cvar (enabled by default). It follows a similar approach to the engine's own calculation, factoring in mass and damage, and lays the groundwork for more knockback-related features later on.

Note: this feature is not enabled by default for the time being.

Translucent allies system

Makes allies of the same species gradually more translucent based on distance, with a configurable base translucency.

  • sv_zh2_translucentallies - enables translucent clients server-wide, overriding client settings.
  • cl_zh2_translucentallies - 0 disables it, 1 enables it only when sv_shootthroughallies or sv_unblockallies is active, and 2 always enables it.
  • cl_zh2_translucentalliesdistance - the distance at which allies start turning translucent.
  • cl_zh2_baseallytranslucency - the base translucency clients always have, before distance is factored in.
Team identification icons

New icons help identify allies and enemies at a glance, including a neutral state shown before initial zombies are picked. Configurable through sv_zh2_teamindicators, cl_zh2_teamindicators, cl_zh2_teamindicatordistance (how far away indicators start appearing), and cl_zh2_showtargetteamindicator (only show an indicator while looking directly at that player).

Player identify system

Replaces Zandronum's built-in identify system, which didn't behave correctly in Zombie Horde 2, with a custom one that shows a player's name and species when looked at. Toggle it with cl_zh2_identifyplayers. This system provides an indication of name and specie if this information is known.

© 2026 RoyDefined. All Rights Reserved.