Zandronum
gamesZandronum is a multiplayer oriented port, based off Skulltag, for Doom and Doom II by id Software. This egg uses the Freedoom WAD by default.
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 |
Docker Images (1)
| Name | Image |
|---|---|
Ubuntu | ghcr.io/ptero-eggs/yolks:ubuntu |
Startup Command
./zandronum-server -port {{SERVER_PORT}} -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/{{IWAD}} -file PWAD/{{PWADS}} -host {{MAX_PLAYERS}} +map {{MAP}} -skill {{SKILL}} -netmode 1 Variables (12)
Max Players
The maximum amount of players allowed on your game server.
- Environment:
MAX_PLAYERS- Default:
16- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
nullable|integer|max:128
IWAD
An IWAD is the main resource file for a Doom-engine game, containing all the game's original sounds, levels, and graphics.
- Environment:
IWAD- Default:
freedoom1.wad- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
required|string|max:255
PWADS
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.
- Environment:
PWADS- Default:
None- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
nullable|string|max:255
Skill
Set the difficulty of the game.
- Environment:
SKILL- Default:
None- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
nullable|string|between:0,15
map
The map the server should start with.
- Environment:
MAP- Default:
e1m1- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
nullable|string|max:255
dmflags
Gameplay flags. https://wiki.zandronum.com/DMFlags
- Environment:
DMFLAGS- Default:
None- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
nullable|string|max:255
dmflags2
Gameplay flags. https://wiki.zandronum.com/DMFlags
- Environment:
DMFLAGS2- Default:
None- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
nullable|string|max:255
zadmflags
Zandronum specific gameplay flags. https://wiki.zandronum.com/DMFlags
- Environment:
ZADMFLAGS- Default:
None- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
nullable|string|max:255
compatflags
Compatibility flags. https://wiki.zandronum.com/DMFlags
- Environment:
COMPATFLAGS- Default:
None- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
nullable|string|max:255
compatflags2
Compatibility flags. https://wiki.zandronum.com/DMFlags
- Environment:
COMPATFLAGS2- Default:
None- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
nullable|string|max:255
zacompatflags
Zandronum specific compatibility flags. https://wiki.zandronum.com/DMFlags
- Environment:
ZACOMPATFLAGS- Default:
None- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
nullable|string|max:255
Enable GeoIP
GeoIP is used to identify the country of the client's ip address
- Environment:
GEOIP- Default:
1- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
required|boolean
Installation Script
ghcr.io/ptero-eggs/installers:alpineash#!/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."