Version history/3.1

From Zandronum Wiki
Zandronum 3.1
Release date 12 December 2021
ZDoom base 2.8pre-441-g458e1b1
GZDoom base 1.8.6
Previous 3.0.1
Next 3.2

Zandronum 3.1 is a minor update for Zandronum that was released on 12 December 2021.


  • Added a new server administration menu, from which server settings can be changed without needing to use the console. The menu will ask for the RCON password if necessary. Gameplay and compatibility settings are now grayed out unless the user has RCON access and work online properly. Added various Zandronum-specific gameplay settings to the menu. [Dusk]
  • Added a new chat mode that lets players send private messages to each other. The sender can either pass the player's name with "sayto" or a player's number with "sayto_idx". Alternatively, players can send private messages to the server by passing "server" as a name. [Kaminsky]
  • Added the CVar "sv_smoothplayers" to improve the movement of lagging players. [Kaminsky]
  • "stat nettraffic" now also shows information on the number of many missing packets the client requests from the servers. [Torr Samaho]
  • The server can now broadcast the MD5 hashes of loaded PWADs to launchers. [Sean]
  • Added new console commands "demo_ticsplayed" to show the current position in demo playback and "demo_skipto" to skip to such a position.
  • Added new console variable "sv_nodoorclose" to prevent manual door closing, in order to prevent large numbers of players from blocking a door by continuously opening and closing it. [DoomJoshuaBoy]
  • Added new compatibility flag "compat_noobituaries" to prevent obituaries from being printed to the console when a player dies. [Kaminsky]
  • Added new compatibility flag "compat_resetglobalvarsonmapreset" to reset all global ACS variables upon resetting the map like in survival. [Kaminsky]
  • Added new ACS functions: SetGamemodeLimit(int limit, int value) to change gamemode limits, SetCurrentGamemode(str gamemode) to switch gamemodes during a game, and GetCurrentGamemode() to get the gamemode being played. [Kaminsky]
  • Added ACS function: SetPlayerClass(int player, str class, bool respawn) to allow changing of a player's class. [Kaminsky]
  • Added ACS functions: SetPlayerChasecam(int player, bool enable) and GetPlayerChasecam(int player) to enable or disable the built-in chasecam for the player. [Kaminsky]
  • Added a new scoreboard icon that displays if a player is lagging to the server. [Kaminsky]
  • Added ACS functions: SetPlayerScore(int player, int type, int value) and GetPlayerScore(int player, int type) to get or set the player's score. The type can be either frags, points, wins, deaths, kills, or the item and secret counts. [Kaminsky]
  • Added an ACS special to check whether the game is in demo or not [DoomJoshuaBoy/geNia]
  • Added new SBARINFO commands: IfSpectator [not] [dead] and IfSpying [not] that execute a sub block if the local player is (not) a (dead) spectator, or (not) spying on another player respectively. [Kaminsky]
  • Added ACS functions: ExecuteClientScript and NamedExecuteClientScript which let the server execute clientside scripts for only one client as opposed to everyone. This allows net traffic to be greatly optimized, such that the server only sends out commands to the client(s) that matter. [Kaminsky]
  • Added ACS functions: SendNetworkString and NamedSendNetworkString, allowing strings to be sent from the server to the client(s) and vice versa, which are passed as the first argument of script to also be executed. Note that sending strings from client to server works just like puking scripts and there's no guarantee they are sent to the server successfully. [Kaminsky]
  • Added a new EVENT script type: GAMEEVENT_CHAT that triggers when a non-private chat message is sent. Use this in conjunction with the ACS function: GetChatMessage(int player, int offset) to get the last chat message received by the player (or the server if -1 is passed). [Kaminsky]
  • Added a new floating icon that shows if a player is in the menu. [DoomJoshuaBoy/geNia]
  • Added the CVar "con_showtimestamps" which adds a timestamp to the beginning of each line on the console. [Kaminsky]
  • Added the CVar "cl_showpacketloss" which prints how many packets were missed when the client experiences packet loss. [Kaminsky]
  • Added a check that prevents demos from being played if the version string stored in the file doesn't match the current version being used. This means, for instance, a release version of Zandronum cannot playback a demo that was recorded using a beta version. [Kaminsky]
  • Added the CVar "cl_hidevotescreen" which controls if the vote screen should be hidden shortly after the client makes their vote. In order to keep the same behaviour like in older versions, this CVar is set to true by default. [Kaminsky]
  • Added new console variable "sv_forcesoftwarepitchlimits" to force the player's pitch to be limited to what's allowed in the software renderer. [Kaminsky]
  • Backported the chat prefix and suffix features from ZCC, which have been renamed to "cl_chatprefix" and "cl_chatsuffix" respectively. [Kaminsky]
  • Added new options to GAMEMODE: "gamesettings" and "removegamesetting", allowing modders to specify what gameplay or compatibility flags need to be enabled or disabled for a particular game mode. All flags added into the "gamesettings" block are locked and cannot be manually changed while the game mode is being played unless they're removed using the latter option. [Kaminsky]
  • Added a new vote type for changing gameplay flags by doing "callvote <flag name> <value> [reason]", which can also be disabled by the server using the "sv_noflagvote" CVar. Also added the missing checkbox for changemap votes in the server console window. [Kaminsky]
  • Added new parameters to the "addmap" and "insertmap" CCMDs that specify the minimum and maximum number of players required to enter a map. [Kaminsky]
  • Added ACS functions: GetMapRotationSize and GetMapRotationInfo to get information about the server's map rotation. [Kaminsky]
  • Added new console command "weapswap" which swaps the player's weapon to the one they were using before. [Kaminsky]
  • Added the CVar "cl_telespy". [Kaminsky]
  • Added the CVar "cl_protectcvars" which makes ConsoleCommand not archiving CVar changes to the user's config file optional. [Kaminsky]
  • CVars defined in CVARINFO can now replace "unknown" variables, particularly those originally created using ConsoleCommand. [Kaminsky]
  • Added the the console commands "spyto" and "spyto_idx". [Kaminsky]
  • Added the console command "spycarrier" for spying on players carrying gamemode-specific items. Particularly useful for streamers who want to quickly switch to the carrier(s). [Kaminsky]
  • The map rotation is now synced with the clients, meaning clients can now use the "maplist" CCMD to view the map list. [Kaminsky]
  • Added "cl_autoready" to automatically set a client as ready to go and "cl_intermissiontimer" to show the intermission countdown and the next map. [DoomJoshuaBoy/Kaminsky]
  • Added CVars that customize how the weapon bobs, sways, and offsets based on the player's pitch, or whether or not to bob the screen itself while leaving the weapon bob unaffected. [Kaminsky]
  • Added the GAMEMODE flag DONTPRINTPLAYERSLEFT to prevent printing the "waiting for players" or "x allies/opponents left" message at the bottom of the screen. [Kaminsky]
  • Added all of the text colors from "New Text Colors", originally made by FuzzballFox. [Kaminsky]
  • Added the EVENT script type: GAMEEVENT_PLAYERCONNECT, indicating when a client or bot joins the server. [Kaminsky]
  • Added the EVENT script type GAMEEVENT_ACTOR_SPAWNED and GAMEVENT_ACTOR_DAMAGED, which are triggered just before an actor's first tic and when an actor takes damage. Note that for performance reasons, these events are disabled by default so modders have to enable them by themselves. [Kaminsky]
  • Added the EVENT script type GAMEEVENT_ACTOR_ARMORDAMAGED that's triggered just before an actor's armor absorbs any damage inflicted on it. [Kaminsky]
  • Added DMFlags: "sv_shootthroughallies" and "sv_dontpushallies", so a player's attacks can pass through and not push their allies. [Kaminsky]
  • Added packet loss mitigation, which the client can control using the CVar "cl_backupcommands". [Kaminsky]
  • Added the server CVAR "sv_country", which allows servers to present their country to launchers. [Sean]
  • Added the new nextmap and nextsecret vote types. [Sean]
  • Added the CVar "sv_respawndelaytime", which allows servers to decide how long players must wait before they can respawn. [Kaminsky]


  • Fixed: Bots tries to jump to reach item when sv_nojump is true. [sleep]
  • Fixed: ACS function SetSkyScrollSpeed didn't work online. [Edward-san]
  • Fixed: color codes in callvote reasons weren't terminated properly. [Dusk]
  • Fixed: The 'Color Setter' and the 'Fade Setter' things weren't handled properly on map resets. [Edward-san]
  • Fixed: A_JumpIfTargetInsideMeleeRange and A_JumpIfTargetOutsideMeleeRange weren't handled properly online. [Edward-san]
  • Fixed: Same spot respawn didn't work anymore with dead spectators. [Edward-san]
  • Fixed: A_CheckLOF wasn't handled properly online. [Edward-san]
  • Fixed the DROPPED flag not being removed from level-spawned things when not needed. [Edward-san]
  • Fixed an ACS related server and client crash. [Torr Samaho]
  • Fixed: loading from a savegame lost the extra player statuses, like the spread rune mode. [Edward-san]
  • Fixed: Bots DH_ARRAYSET implementation is wrong. [sleep]
  • Fixed jittery model interpolation, partly based on dpJudas's fix for GZDoom. [StrikerMan780]
  • Fixed an integer overflow crash related to decals. [eagle, Torr Samaho]
  • Fixed GAMEEVENT_CAPTURES and GAMEEVENT_RETURNS scripts not executing in One Flag CTF or Skulltag. [Kaminsky]
  • Fixed the obituary for the BFG tracer not being used if a player was killed by them. [Kaminsky]
  • Fixed desaturated translations created with CreateTranslation() not syncing with clients in an online game. [Kaminsky]
  • Fixed missiles with the STEPMISSILE flag disappearing in online games. [Kaminsky]
  • Fixed faulty armor behaviour that occurred when the player's inventory was cleared. [Kaminsky]
  • Fixed sound channels containing looped sounds not being synced with newly connected clients. [Kaminsky]
  • Fixed the StopSound ACS function not working in online games. [Kaminsky]
  • Fixed the ChangeCamera line special not reverting the HUD to match the player that the client is looking through. [Kaminsky]
  • Fixed Line_SetTextureOffset and Line_SetTextureScale not working in online games. [Kaminsky]
  • Fixed ACS HudMessage alpha, visibility, and layer flags not working online. Also fixed SetHudClipRect and SetHudWrapWidth not working online. [Kaminsky]
  • Fixed Team_Score and Team_GivePoints not working properly on all gamemodes that support teams and give points. [Kaminsky]
  • Fixed user variables not being reset for actors that aren't respawned during a map reset. [Kaminsky]
  • Fixed issues with A_SkullPop and if the player spectates while the PlayerChunk actor is still in midair. [Kaminsky]
  • Fixed the class field of a skin breaking A_SkullPop and spawning dummy players instead of the "PlayerChunk" actor. [Kaminsky]
  • Fixed the INVENTORY.NOSCREENFLASH flag not working in online games. [Kaminsky]
  • Fixed "random" when used for the class property in BOTINFO not actually assigning the bot a random player class but instead choosing the first player class in the list. [Kaminsky]
  • Fixed SetActorProperty not working online with APROP_StencilColor. [Kaminsky]
  • The console and chat no longer opens or closes while the user is holding down the grave or enter keys. This makes it extremely difficult to flicker the console or chat icons and trigger client command floods. [Kaminsky]
  • Fixed "####" and "----" in PlayerPawns. [Zandrewnum]
  • Fixed dormant sounds from still playing upon resetting the map. [Kaminsky]
  • Fixed a player's old body from being frozen and not finishing their animation when they become a dead spectator. [Kaminsky]
  • Fixed dead spectators not spawning where they died if sv_samespawnspot is enabled. [Kaminsky]
  • Fixed ACS scripts puked by the server RCON from using player 0 as the activator. [Kaminsky]
  • Fixed a compatibility issue with printing team-related messages on the screen using custom colors. [Kaminsky]
  • sv_forcegldefaults renamed to sv_forcevideodefaults. The old name still exists for compatibility. [Dusk]
  • r_3dfloors is now forced to be true when sv_forcevideodefaults is true. [Dusk]
  • When the wad authentication fails for a connecting client, the client only reports the missing and incompatible PWADS instead of all of them. [Pol Marcet]
  • GAMEEVENT_CAPTURES scripts now pass the number of points earned as 'arg2'. [Kaminsky]
  • gl_lights_size is now forced to its default value when sv_forcevideodefaults is true. [Kaminsky]
  • The Player_SetTeam line special now accepts a second parameter to enable/disable the broadcast message. By default, the message is still printed. [Kaminsky]
  • ZIP/PK3 files containing duplicate lumps will now print warning messages in the console when they're found, and a fatal error will occur if any of these duplicate lumps need to be authenticated on the server. [Kaminsky]
  • The "map" and "changemap" votes now show the full name of the level in addition to the lump name. [Kaminsky]
  • Re-enabled code that adds support for player color sets. [Kaminsky]
  • Actors with the CLIENTSIDEONLY flag that are spawned using the "summon" cheat in online games are now removed on the server's end, but will still spawn on the client's end. [Kaminsky]
  • The $weapon and $ammo keywords for "chat_substitution" will now use the corresponding actor's tag if it exists, instead of always using the class name. [Kaminsky]
  • The CVar "cl_identifytarget" is now an integer and has been extended to print additional information about a teammate including their health and armor, weapon and ammo count, and class or skin, in a similar format to the coop info. [Kaminsky]
  • The default renderer for new users will now be the OpenGL renderer instead of the software renderer. [Kaminsky]
  • Changed the default binds of some commands to more modern controls. [Kaminsky]
  • The chat cursor now blinks while the client is typing a message. [Kaminsky]
  • The "You fragged" and "You were fragged by" HUD messages can now be edited in the LANGUAGE lump. [DoomJoshuaBoy/Kaminsky]
  • A player's health on the coop info or target identification is now color coded based on percentage and not hardcoded numbers. Also added orange as a color to indicate when a player's health is between 26-50%. [Kaminsky]
  • The name of the server and the current game mode are now shown on the scoreboard's header. [Kaminsky]
  • Color codes are now omitted from the length of the player's name, allowing for more complex color schemes without reaching the limit. There's still a technical limitation so that names aren't too long when sent across the network. [Kaminsky]
  • The chasecam is temporarily disabled while the local player is in free spectate mode. [Kaminsky]
  • Replaced the executable icon with a more sleek, modern design originally made by Medicris. [Kaminsky]

Beta builds