Skip to content

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.

egg-zandronum.json

updated

Ports

Add an allocation on the node for each port.

  • Game 10666

Install

Installer image
ghcr.io/ptero-eggs/installers:alpine
Install script
102 lines

Image

  • Ubuntu ghcr.io/ptero-eggs/yolks:ubuntu

Startup

The Panel runs this command to start the server. It replaces each variable in the command with the value of that variable.

12 variables

Startup command

./zandronum-server -port 10666 -config /home/container/zandronum.ini +set dmflags {{DMFLAGS}} +set dmflags2 {{DMFLAGS2}} +set zadmflags {{ZADMFLAGS}} +set compatflags {{COMPATFLAGS}} +set compatflags2 {{COMPATFLAGS2}} +set zacompatflags {{ZACOMPATFLAGS}} -iwad IWAD/freedoom1.wad -file PWAD/{{PWADS}} -host 16 +map e1m1 -skill {{SKILL}}  -netmode 1

Dotted values come from the server settings. These values are examples.

  • The maximum amount of players allowed on your game server.

    MAX_PLAYERSUsers can see

    nullable|integer|max:128

  • An IWAD is the main resource file for a Doom-engine game, containing all the game's original sounds, levels, and graphics.

    IWADUsers can edit

    required|string|max:255

  • If 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.

    PWADSUsers can edit

    nullable|string|max:255

  • Set the difficulty of the game.

    SKILLUsers can edit

    nullable|string|between:0,15

  • The map the server should start with.

    MAPUsers can edit

    nullable|string|max:255

  • Gameplay flags. https://wiki.zandronum.com/DMFlags

    DMFLAGSUsers can edit

    nullable|string|max:255

  • Gameplay flags. https://wiki.zandronum.com/DMFlags

    DMFLAGS2Users can edit

    nullable|string|max:255

  • Zandronum specific gameplay flags. https://wiki.zandronum.com/DMFlags

    ZADMFLAGSUsers can edit

    nullable|string|max:255

  • Compatibility flags. https://wiki.zandronum.com/DMFlags

    COMPATFLAGSUsers can edit

    nullable|string|max:255

  • Compatibility flags. https://wiki.zandronum.com/DMFlags

    COMPATFLAGS2Users can edit

    nullable|string|max:255

  • Zandronum specific compatibility flags. https://wiki.zandronum.com/DMFlags

    ZACOMPATFLAGSUsers can edit

    nullable|string|max:255

  • GeoIP is used to identify the country of the client's ip address

    GEOIPUsers can edit

    required|boolean

Wings

Stop command
quit
Running when the console shows
UDP Initialized.

Readme

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:

Port default
Game 10666

Changes

  1. Zandronum: Update docker image and install script

    · Red Banana · e30015f

  2. Validate and update embedded URLs

    · Daniel Barton · bf9f3cb

  3. SteamCMD + Other fixes

    · yesBad · edbf925

  4. Add standalone games

    · Daniel Barton · 74c706a

All changes on GitHub

Problem with this egg?

Open an issue on GitHub. Include your Panel and Wings versions.

Install script 102 lines ash in ghcr.io/ptero-eggs/installers:alpine Show
#!/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."