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.
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 1Dotted 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
- Zandronum: Update docker image and install script
· Red Banana · e30015f
- Validate and update embedded URLs
· Daniel Barton · bf9f3cb
- SteamCMD + Other fixes
· yesBad · edbf925
- Add standalone games
· Daniel Barton · 74c706a
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 Hide
#!/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."