{"meta":{"slug":"zandronum","name":"Zandronum","category":"doom","source":"pterodactyl","owner":"pterodactyl","repo":"game-eggs","branch":"main","path":"doom/zandronum/egg-zandronum.json","rawUrl":"https://raw.githubusercontent.com/pterodactyl/game-eggs/main/doom/zandronum/egg-zandronum.json","indexedAt":1792246788483},"egg":{"_comment":"DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO","meta":{"version":"PTDL_v2","update_url":null},"exported_at":"2025-07-19T22:21:54+02:00","name":"Zandronum","author":"sup@libtar.de","description":"Zandronum is a multiplayer oriented port, based off Skulltag, for Doom and Doom II by id Software.\r\n\r\nThis egg uses the Freedoom WAD by default.","features":null,"docker_images":{"Ubuntu":"ghcr.io/ptero-eggs/yolks:ubuntu"},"file_denylist":[],"startup":"./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","config":{"files":"{}","startup":"{\r\n    \"done\": \"UDP Initialized.\"\r\n}","logs":"{}","stop":"quit"},"scripts":{"installation":{"script":"#!/bin/sh\r\n\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\nARCH=\"linuxserver-armv8\"\r\nif [ \"$(uname -m)\" = \"x86_64\" ]; then\r\n  ARCH=\"linux-x86_64\"\r\nfi\r\n\r\necho \"Fetching available Zandronum versions for architecture $ARCH...\"\r\nhtml=$(curl -s https://zandronum.com/downloads/)\r\n\r\necho \"Matched files:\"\r\nmatched=$(echo \"$html\" | grep -oE \"zandronum[0-9.]+-${ARCH}\\.tar\\.bz2\" | sort -u)\r\necho \"$matched\"\r\n\r\n# Extract version numbers (including 3.2 now)\r\nversions=$(echo \"$matched\" | sed -E \"s/zandronum([0-9.]+)-.*/\\1/\")\r\nlatest_version=$(echo \"$versions\" | sort -V | tail -n1)\r\n\r\ndownload_success=0\r\n\r\nuser_agent=\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0 Safari/537.36\"\r\n\r\ndownload_with_retries() {\r\n  local url=\"$1\"\r\n  local tries=3\r\n  local wait=5\r\n  local count=1\r\n  local filename\r\n  filename=$(basename \"$url\")\r\n\r\n  while [ $count -le $tries ]; do\r\n    echo \"Download attempt $count of $tries...\"\r\n    if curl -L --fail --retry 2 --retry-delay 5 -A \"$user_agent\" -o \"$filename\" \"$url\"; then\r\n      return 0\r\n    else\r\n      echo \"Download attempt $count failed, retrying in $wait seconds...\"\r\n      sleep $wait\r\n    fi\r\n    count=$((count + 1))\r\n  done\r\n\r\n  return 1\r\n}\r\n\r\nfilename=\"zandronum${latest_version}-${ARCH}.tar.bz2\"\r\nurl=\"https://zandronum.com/downloads/${filename}\"\r\n\r\necho \"Checking if file exists at $url...\"\r\nif curl -A \"$user_agent\" --silent --fail --output /dev/null \"$url\"; then\r\n  echo \"Attempting to download $filename...\"\r\n  if download_with_retries \"$url\"; then\r\n    echo \"Successfully downloaded $filename.\"\r\n    download_success=1\r\n  else\r\n    echo \"Download failed for $filename after retries.\"\r\n  fi\r\nelse\r\n  echo \"File not found: $filename\"\r\nfi\r\n\r\nif [ \"$download_success\" -ne 1 ]; then\r\n  echo \"ERROR: Could not download the latest Zandronum version. Exiting.\"\r\n  exit 1\r\nfi\r\n\r\necho \"Extracting $filename...\"\r\ntar -xjf \"$filename\"\r\nrm -f \"$filename\"\r\nrm -f zandronum  # Remove the client binary\r\n\r\nchmod +x zandronum-server\r\n\r\nmkdir -p IWAD PWAD\r\n\r\necho \"Fetching latest Freedoom release...\"\r\nfreedoom_url=$(curl -s https://api.github.com/repos/freedoom/freedoom/releases/latest | jq -r '.assets[].browser_download_url' | grep -m1 -i 'freedoom-.*\\.zip')\r\n\r\nif [ -z \"$freedoom_url\" ]; then\r\n  echo \"Failed to fetch Freedoom release. Exiting.\"\r\n  exit 1\r\nfi\r\n\r\necho \"Downloading Freedoom from $freedoom_url...\"\r\ncurl -L -o freedoom.zip \"$freedoom_url\"\r\nunzip -j -o freedoom.zip '*/*' -d IWAD/\r\nrm freedoom.zip\r\nrm -f IWAD/*.html IWAD/*.pdf\r\n\r\necho \"Downloading default config...\"\r\nwget -q -O zandronum.ini https://raw.githubusercontent.com/ptero-eggs/game-eggs/main/doom/zandronum/zandronum.ini\r\n\r\ntouch adminlist.txt whitelist.txt banlist.txt\r\n\r\nif [ \"$GEOIP\" = \"1\" ]; then\r\n  echo \"Downloading GeoIP data...\"\r\n  wget -q -O GeoIP.dat https://raw.githubusercontent.com/ptero-eggs/game-eggs/main/doom/zandronum/GeoIP.dat\r\nfi\r\n\r\necho \"Install complete. Zandronum version ${latest_version} is ready.\"","container":"ghcr.io/ptero-eggs/installers:alpine","entrypoint":"ash"}},"variables":[{"name":"Max Players","description":"The maximum amount of players allowed on your game server.","env_variable":"MAX_PLAYERS","default_value":"16","user_viewable":true,"user_editable":false,"rules":"nullable|integer|max:128","field_type":"text"},{"name":"IWAD","description":"An IWAD is the main resource file for a Doom-engine game, containing all the game's original sounds, levels, and graphics.","env_variable":"IWAD","default_value":"freedoom1.wad","user_viewable":true,"user_editable":true,"rules":"required|string|max:255","field_type":"text"},{"name":"PWADS","description":"If you wish to use multiple PWAD you can do so by separating them with spaces.\r\n\r\nA PWAD is a WAD containing lumps of data, often used as addons. They replace in-game assets.","env_variable":"PWADS","default_value":"","user_viewable":true,"user_editable":true,"rules":"nullable|string|max:255","field_type":"text"},{"name":"Skill","description":"Set the difficulty of the game.","env_variable":"SKILL","default_value":"","user_viewable":true,"user_editable":true,"rules":"nullable|string|between:0,15","field_type":"text"},{"name":"map","description":"The map the server should start with.","env_variable":"MAP","default_value":"e1m1","user_viewable":true,"user_editable":true,"rules":"nullable|string|max:255","field_type":"text"},{"name":"dmflags","description":"Gameplay flags. https://wiki.zandronum.com/DMFlags","env_variable":"DMFLAGS","default_value":"","user_viewable":true,"user_editable":true,"rules":"nullable|string|max:255","field_type":"text"},{"name":"dmflags2","description":"Gameplay flags. https://wiki.zandronum.com/DMFlags","env_variable":"DMFLAGS2","default_value":"","user_viewable":true,"user_editable":true,"rules":"nullable|string|max:255","field_type":"text"},{"name":"zadmflags","description":"Zandronum specific gameplay flags. https://wiki.zandronum.com/DMFlags","env_variable":"ZADMFLAGS","default_value":"","user_viewable":true,"user_editable":true,"rules":"nullable|string|max:255","field_type":"text"},{"name":"compatflags","description":"Compatibility flags. https://wiki.zandronum.com/DMFlags","env_variable":"COMPATFLAGS","default_value":"","user_viewable":true,"user_editable":true,"rules":"nullable|string|max:255","field_type":"text"},{"name":"compatflags2","description":"Compatibility flags. https://wiki.zandronum.com/DMFlags","env_variable":"COMPATFLAGS2","default_value":"","user_viewable":true,"user_editable":true,"rules":"nullable|string|max:255","field_type":"text"},{"name":"zacompatflags","description":"Zandronum specific compatibility flags. https://wiki.zandronum.com/DMFlags","env_variable":"ZACOMPATFLAGS","default_value":"","user_viewable":true,"user_editable":true,"rules":"nullable|string|max:255","field_type":"text"},{"name":"Enable GeoIP","description":"GeoIP is used to identify the country of the client's ip address","env_variable":"GEOIP","default_value":"1","user_viewable":true,"user_editable":true,"rules":"required|boolean","field_type":"text"}]},"readme":"# Zandronum\nZandronum is a multiplayer oriented port, based off Skulltag, for Doom and Doom II by id Software.\n\nThis egg uses the [Freedoom](https://freedoom.github.io/) WAD by default.\n\n### Server Ports\n\nZandronum requires a single port:\n\n| Port    | default  |\n|---------|----------|\n| Game    | 10666    |\n"}