Egg Repository

Pterodactyl Community Egg Repository

Zandronum

Zandronum is a multiplayer oriented port, based off Skulltag, for Doom and Doom II by id Software. This egg uses the Freedoom WAD by default.

Read Me

Zandronum

Zandronum is a multiplayer oriented port, based off Skulltag, for Doom and Doom II by id Software.

This egg uses the Freedoom WAD by default.

Server Ports

Zandronum requires a single port:

Portdefault
Game10666
Yolks
NameTag
Ubuntughcr.io/ptero-eggs/yolks:ubuntu
Variables
NameDescriptionEnvironment VariableDefault ValueUser ViewableUser Editable
Max PlayersThe maximum amount of players allowed on your game server.MAX_PLAYERS16YesNo
IWADAn IWAD is the main resource file for a Doom-engine game, containing all the game's original sounds, levels, and graphics.IWADfreedoom1.wadYesYes
PWADSIf you wish to use multiple PWAD you can do so by separating them with spaces. A PWAD is a WAD containing lumps of data, often used as addons. They replace in-game assets.PWADSYesYes
SkillSet the difficulty of the game.SKILLYesYes
mapThe map the server should start with.MAPe1m1YesYes
dmflagsGameplay flags. https://wiki.zandronum.com/DMFlagsDMFLAGSYesYes
dmflags2Gameplay flags. https://wiki.zandronum.com/DMFlagsDMFLAGS2YesYes
zadmflagsZandronum specific gameplay flags. https://wiki.zandronum.com/DMFlagsZADMFLAGSYesYes
compatflagsCompatibility flags. https://wiki.zandronum.com/DMFlagsCOMPATFLAGSYesYes
compatflags2Compatibility flags. https://wiki.zandronum.com/DMFlagsCOMPATFLAGS2YesYes
zacompatflagsZandronum specific compatibility flags. https://wiki.zandronum.com/DMFlagsZACOMPATFLAGSYesYes
Enable GeoIPGeoIP is used to identify the country of the client's ip addressGEOIP1YesYes
Install Script
#!/bin/sh

mkdir -p /mnt/server
cd /mnt/server

ARCH="linuxserver-armv8"
if [ "$(uname -m)" = "x86_64" ]; then
  ARCH="linux-x86_64"
fi

echo "Fetching available Zandronum versions for architecture $ARCH..."
html=$(curl -s https://zandronum.com/downloads/)

echo "Matched files:"
matched=$(echo "$html" | grep -oE "zandronum[0-9.]+-${ARCH}\.tar\.bz2" | sort -u)
echo "$matched"

# Extract version numbers (including 3.2 now)
versions=$(echo "$matched" | sed -E "s/zandronum([0-9.]+)-.*/\1/")
latest_version=$(echo "$versions" | sort -V | tail -n1)

download_success=0

user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0 Safari/537.36"

download_with_retries() {
  local url="$1"
  local tries=3
  local wait=5
  local count=1
  local filename
  filename=$(basename "$url")

  while [ $count -le $tries ]; do
    echo "Download attempt $count of $tries..."
    if curl -L --fail --retry 2 --retry-delay 5 -A "$user_agent" -o "$filename" "$url"; then
      return 0
    else
      echo "Download attempt $count failed, retrying in $wait seconds..."
      sleep $wait
    fi
    count=$((count + 1))
  done

  return 1
}

filename="zandronum${latest_version}-${ARCH}.tar.bz2"
url="https://zandronum.com/downloads/${filename}"

echo "Checking if file exists at $url..."
if curl -A "$user_agent" --silent --fail --output /dev/null "$url"; then
  echo "Attempting to download $filename..."
  if download_with_retries "$url"; then
    echo "Successfully downloaded $filename."
    download_success=1
  else
    echo "Download failed for $filename after retries."
  fi
else
  echo "File not found: $filename"
fi

if [ "$download_success" -ne 1 ]; then
  echo "ERROR: Could not download the latest Zandronum version. Exiting."
  exit 1
fi

echo "Extracting $filename..."
tar -xjf "$filename"
rm -f "$filename"
rm -f zandronum  # Remove the client binary

chmod +x zandronum-server

mkdir -p IWAD PWAD

echo "Fetching latest Freedoom release..."
freedoom_url=$(curl -s https://api.github.com/repos/freedoom/freedoom/releases/latest | jq -r '.assets[].browser_download_url' | grep -m1 -i 'freedoom-.*\.zip')

if [ -z "$freedoom_url" ]; then
  echo "Failed to fetch Freedoom release. Exiting."
  exit 1
fi

echo "Downloading Freedoom from $freedoom_url..."
curl -L -o freedoom.zip "$freedoom_url"
unzip -j -o freedoom.zip '*/*' -d IWAD/
rm freedoom.zip
rm -f IWAD/*.html IWAD/*.pdf

echo "Downloading default config..."
wget -q -O zandronum.ini https://raw.githubusercontent.com/ptero-eggs/game-eggs/main/doom/zandronum/zandronum.ini

touch adminlist.txt whitelist.txt banlist.txt

if [ "$GEOIP" = "1" ]; then
  echo "Downloading GeoIP data..."
  wget -q -O GeoIP.dat https://raw.githubusercontent.com/ptero-eggs/game-eggs/main/doom/zandronum/GeoIP.dat
fi

echo "Install complete. Zandronum version ${latest_version} is ready."