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.
- updated
- variables
- 12
- images
- 1
- author
- sup@libtar.de
- sha256
- 4609e2904613
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 |
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 The parts in blue are filled in by the panel when the server starts, from the variables below.
Docker image
- Ubuntu ghcr.io/ptero-eggs/yolks:ubuntu
Variables
12 settings
-
Max Players
The maximum amount of players allowed on your game server.
- env
- MAX_PLAYERS
- default
- 16
- rules
- nullable|integer|max:128
- viewable
-
IWAD
An IWAD is the main resource file for a Doom-engine game, containing all the game's original sounds, levels, and graphics.
- env
- IWAD
- default
- freedoom1.wad
- rules
- required|string|max:255
- viewable
- editable
-
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.
- env
- PWADS
- default
- none
- rules
- nullable|string|max:255
- viewable
- editable
-
Skill
Set the difficulty of the game.
- env
- SKILL
- default
- none
- rules
- nullable|string|between:0,15
- viewable
- editable
-
map
The map the server should start with.
- env
- MAP
- default
- e1m1
- rules
- nullable|string|max:255
- viewable
- editable
-
dmflags
Gameplay flags. https://wiki.zandronum.com/DMFlags
- env
- DMFLAGS
- default
- none
- rules
- nullable|string|max:255
- viewable
- editable
-
dmflags2
Gameplay flags. https://wiki.zandronum.com/DMFlags
- env
- DMFLAGS2
- default
- none
- rules
- nullable|string|max:255
- viewable
- editable
-
zadmflags
Zandronum specific gameplay flags. https://wiki.zandronum.com/DMFlags
- env
- ZADMFLAGS
- default
- none
- rules
- nullable|string|max:255
- viewable
- editable
-
compatflags
Compatibility flags. https://wiki.zandronum.com/DMFlags
- env
- COMPATFLAGS
- default
- none
- rules
- nullable|string|max:255
- viewable
- editable
-
compatflags2
Compatibility flags. https://wiki.zandronum.com/DMFlags
- env
- COMPATFLAGS2
- default
- none
- rules
- nullable|string|max:255
- viewable
- editable
-
zacompatflags
Zandronum specific compatibility flags. https://wiki.zandronum.com/DMFlags
- env
- ZACOMPATFLAGS
- default
- none
- rules
- nullable|string|max:255
- viewable
- editable
-
Enable GeoIP
GeoIP is used to identify the country of the client's ip address
- env
- GEOIP
- default
- 1
- rules
- required|boolean
- viewable
- editable
Installation script 102 lines container ghcr.io/ptero-eggs/installers:alpine entrypoint ash 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."