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.
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.
Zandronum requires a single port:
Port | default |
---|---|
Game | 10666 |
Name | Tag |
---|---|
Ubuntu | ghcr.io/ptero-eggs/yolks:ubuntu |
Name | Description | Environment Variable | Default Value | User Viewable | User Editable |
---|---|---|---|---|---|
Max Players | The maximum amount of players allowed on your game server. | MAX_PLAYERS | 16 | Yes | No |
IWAD | An IWAD is the main resource file for a Doom-engine game, containing all the game's original sounds, levels, and graphics. | IWAD | freedoom1.wad | Yes | Yes |
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. | PWADS | Yes | Yes | |
Skill | Set the difficulty of the game. | SKILL | Yes | Yes | |
map | The map the server should start with. | MAP | e1m1 | Yes | Yes |
dmflags | Gameplay flags. https://wiki.zandronum.com/DMFlags | DMFLAGS | Yes | Yes | |
dmflags2 | Gameplay flags. https://wiki.zandronum.com/DMFlags | DMFLAGS2 | Yes | Yes | |
zadmflags | Zandronum specific gameplay flags. https://wiki.zandronum.com/DMFlags | ZADMFLAGS | Yes | Yes | |
compatflags | Compatibility flags. https://wiki.zandronum.com/DMFlags | COMPATFLAGS | Yes | Yes | |
compatflags2 | Compatibility flags. https://wiki.zandronum.com/DMFlags | COMPATFLAGS2 | Yes | Yes | |
zacompatflags | Zandronum specific compatibility flags. https://wiki.zandronum.com/DMFlags | ZACOMPATFLAGS | Yes | Yes | |
Enable GeoIP | GeoIP is used to identify the country of the client's ip address | GEOIP | 1 | Yes | Yes |
#!/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."