GZDoom version history/prerelease

From ZDoom Wiki
Jump to navigation Jump to search
Note: This page is for drafting release notes for upcoming versions of GZDoom. All listed features are subject to change.


Commits since last release: https://github.com/ZDoom/gzdoom/compare/g4.14.2...master

5.0 (xx xx 202x)

Release thread master

After a nearly year-long development cycle and multiple internal reworks, GZDoom 5.0 has finally arrived. This includes bone manipulations for IQM models, Actor uniforms for shaders, significantly improved controller support (including haptic feedback), the overhauled network code, ZScript debugger support, and much more. A brand new theme has also been applied to the launcher to bring it closer to its original color scheme alongside a new banner (courtesy of Kinsie).

General

  • Multiple security fixes. This update is being deemed as critical. If you’re using a version older than 5.0, it’s highly recommended you update to the latest.
  • Controller support has been improved significantly. Missing buttons e.g. paddles can now be assigned properly and analog stick curves have been tweaked to feel much more natural. Binds for these have been cleared as a result in order to update all configurations to the new handling.
  • Added haptic feedback for controllers.
  • Added a bind for deleting saves with controllers.
  • Various improvements to the option menu scrolling behavior.
  • Optimized dynamic light linking. This should help moving dynamic lights from e.g. projectiles perform better in maps with complex level geometry.
  • When auto-starting a game via e.g. -skill #, GZDoom will now use the first map in the first episode found. This should make starting games with unorthodox map setups more streamlined.
  • Added support for Heretic + Hexen (2025).
  • Added cl_debugprediction cvar for testing latency within singleplayer games. The value is the number of ticks of lag to emulate.
  • Added gl_weapon_purelightlevel cvar to make PSprites match their surrounding light level instead of always being brighter.
  • Added the -episode # command-line argument for more easily starting from episodes rather than needing to know the map name.
  • Added RecursivePath= to the config for IWAD and file look up that allows all subfolders in the given directory to be searched as well. This won’t work for subfolders that act as files.
  • Exposed controls for Heretic’s, Hexen’s, and Strife’s items.
  • turbo is now considered a cheat.
  • Minor fixes for MBF21.
  • Fixed the “no infighting” map flag not working.
  • Fixed the SMF_PRECISE flag in A_SeekerMissile not tracking crouching players properly.
  • Fixed certain fonts rendering incorrectly in menus compared to the vanilla Doom graphics.
  • Fixed a crash with VisualThinkers when loading from a save.
  • Fixed a crash with the setinv console command.
  • Fixed a crash with opening the scoreboard in niche scenarios.
  • Fixed a potential crash when saving.

Launcher

  • Reworked the theme to more closely match the original launcher window.
  • Added an option to disable loading support WADs e.g. the Legacy of Rust assets if you have Doom + Doom II installed.
  • Added a multiplayer tab for hosting and joining net games.
  • Additional parameters will now be remembered.
  • Holding shift will now also stop mods from auto-launching games.

Lumps

MAPINFO

  • Added Skymist to map blocks. This allows setting a transparent overlay texture on skies that acts as a layer of fog. Supports animated textures and skyboxes.
  • Added ThickFogDistance and ThickFogMultiplier to map blocks for additive fog. ThickFogDistance controls what range it starts and ThickFogMultiplier controls the density of the fog.
  • Added UsePauseString to gameinfo blocks. Allows displaying the PAUSED text as a string instead of a graphic.

MENUDEF

  • Added DoubleTapControl and DoubleControl option menu settings. DoubleTapControl bindings allow for double tapping a key to execute an action while DoubleControl bindings allow for both a single tap and double tap action to be bound to a key at the same time.

MODELDEF

  • Added ViewModelFOV. When a model is being used as a PSprite, this will allow for directly setting its field of view. Positive values are fixed FOVs while negative values act as a scalar from the default 90 FOV.

ZScript

  • DAP debug servers will now work with ZScript. This can be used with e.g. VisualStudio Code in order to properly debug ZScript via stepping, pausing, etc.
  • ?Bone manipulations for IQM models?
  • Added Behaviors. These pseudo-interfaces are meant to replace Inventory tokens, have a much simpler API, and can only have one of a given type at a time making it easier to manage. BehaviorIterators can be used to iterate across either all Behaviors on a given Actor or all Behaviors of a given type currently in the game. All Behaviors are guaranteed to have an Actor that owns them, allowing them to be passed around as a handle if behavior-based typing is needed.
  • Added client-side Thinkers. These will run locally even while the game world is paused. They can be spawned via LevelLocals’ SpawnClientSideThinker function or by marking Actors with +CLIENTSIDE. These have heavy restrictions on what they can interact with as other clients in net games will not know about them, so caution should be used when modifying the world directly from them.
  • Reworked the level traveling system. All Actors can now be set to travel between levels similar to the player via their AddToTravellingList function. Note that this can only be done once traveling has been initiated. The Travelling and PostTravelled virtual functions have been moved to all Thinkers as a result.
  • Removed the ability to manually assign Actors to the STAT_STATIC statnum and all Thinkers to the STAT_TRAVELLING statnum.
  • const functions will now properly make self constant. To get the previous behavior back, use unsafe(const).
  • Added unsafe(clearscope) scope for fields. This can be used to make fields that seamlessly interact between play and ui scopes. Note: This has a high chance to desync multiplayer, so use with caution.
  • Classes and structs can now be marked as deprecated.
  • The HUD will now tick again while the world is paused.
  • Added Actor uniforms. These allow for shaders to access Actor-specific fields to control them, similar to global uniforms.
  • Added +INTERPOLATESCALE and +INTERPOLATEALPHA flags to Actors.
  • Actors will now track how they were spawned in their SpawnFlags field. MTF_MAPTHING is for Actors placed in the map and MTF_CONSOLETHING is for Actors spawned via the console. All other Actors are considered manual spawns.
  • Added fadeoutstep parameter to A_SpawnParticleEx, allowing particles to first fade in when spawned and then back out. This requires either SPF_FADE_IN_OUT or SPF_FADE_IN_HOLD_OUT to be set.
  • Added WorldPaused function to LevelLocals for checking if the world is currently considered paused (menu open, console down, etc.).
  • Added ChangeSkyMist function to LevelLocals for changing the skymist texture.
  • Added SetSkyFog and SetThickFog functions to LevelLocals for controlling fog levels.
  • Added RemoveUUIDSaveSlots function to SavegameManager. This allows all saves related to the current game session to be deleted at once.
  • Added GetNextPlayer and GetNextPlayerNumber functions to PlayerInfo. Allows iterating through players more easily.
  • Added GetDeltaTime and GetPhysicsTimeStep functions. current in GetDeltaTime can be used to get exact measurements. Both return time in seconds.
  • Added GetStatNum function to Thinkers.
  • Added GetSelfObituary virtual function for overriding self inflicted death obituaries.
  • Added OnRevive virtual function for performing actions on Actors when they’re guaranteed to have been revived.
  • Added DepleteBy virtual function for Inventory items. This is called when attempting to remove an amount of an item from the inventory.
  • Added OnSelect and OnDeselect virtual functions for Weapons when they’re selected and deselected respectively.
  • Exported CloseDialog for StrifeDialogReplys.
  • Exported EpisodeInfo and SkillInfo structs. This will make it possible to create custom selection menus for these.
  • Exported IsInt and IsDouble functions for strings.
  • Exported the HUD’s Draw virtual function in its entirety, making full overrides possible.
  • Exported the scoreboard drawing logic to allow creating custom ones.
  • Exported ReactToDamage virtual for overriding pain logic in Actors. Returns true or false based on whether or not the Actor entered a pain state.
  • Fixed Pre/PostMorph virtual functions being called twice for monsters.
  • Fixed a JIT error with Quat’s Conjugate and Inverse functions.
  • Fixed level data fields e.g. Sector not being cleared properly when transitioning between levels.

Multiplayer

While GZDoom will still use P2P networking for the foreseeable future, significant improvements to its stability have been made and Packet-Server, a long forgotten alternative networking mode, has been fixed and is now the default for internet games. This will make joining net games simpler and act more as expected where the host will have no delay and everyone else’s delay will match their latency. Individual clients that desync in this mode will only be impacted on their end meaning other players can continue to play uninterrupted.

  • Increased the max player count to 64.
  • Overhauled the net game lobby. Everyone will now be able to see who has joined and hosts will be able to better manage guests. Hosts can now preemptively start the game instead of needing to wait for the lobby to fill fully, allowing for arbitrary max player counts. Note: Bans are IP-based and only temporary.
  • Reworked save file management for net games. These will now have their own subfolder, NetGame, in order to prevent accidentally overriding singleplayer saves. Files saved also use their given name instead of the save## format to make them easier to load. Only hosts can save by default now (can be changed via the net_limitsaves cvar).
  • Networked the host’s -loadgame argument. This will still require everyone to have the save file with its given name, but should make reopening a playthrough easier since now only the host needs to specify it. Guests can still manually specify -loadgame to override this should they need a different file name.
  • Players can now only connect if they’re using the same engine version.
  • Significant improvements to connect rejection messages.
  • Auto loaded files and support WADs are now disabled when playing online. These must always be specified manually.
  • Re-added intermission readying and unreadying. Alternative types of readying systems have been added including vote-based, host only, or anyone. If voting, a timer has been added when enough players are ready to force continue the game.
  • Added new options for the chat including what messages to allow and disabling of certain properties e.g. the chat sound.
  • Added mute, muteall, unmute, unmuteall, and listmuted console commands. Messages from muted players will be ignored. mute and unmute can take multiple player numbers as arguments.
  • Hosts can now control who can pause the game including disabling it entirely.
  • Hosts can now control who’s able to initiate conversations with NPCs.
  • Renamed settings controllers console commands to addsettingscontrollers, removesettingscontrollers, removeallsettingscontrollers, and listsettingscontrollers. addsettingscontrollers and removesettingscontrollers can now take multiple player numbers as arguments.
  • Added a cool down for repeatable actions e.g. opening doors.
  • Added the -coop command-line argument for more easily setting up co-op friendly game sessions.
  • More items have been marked with +WEAPONSPAWN to remove things like added ammo when playing with multiplayer weapons disabled.
  • Exposed controls for spy cam previous and clearing the spy cam.
  • Fixed the inventory bar closing faster than intended under high latencies.
  • Fixed certain things not predicting correctly during packet loss. This should help alleviate issues like interpolation not resetting and the camera not bobbing correctly during poor net conditions.
  • Fixed an issue with player data assignment when loading a save.
  • Fixed +playerclass not being respected for new players joining an existing save.
  • Fixed various instabilities with prediction that could lead to crashes.

Known Issues

  • Players disconnecting in net games can cause desyncs under poor net conditions. Currently being fixed.
  • Rare crashes can still occur from client-side prediction. Currently being fixed.
  • When starting a net game, the lobby window will close but the game will not be given focus, causing it to appear black and like nothing happened. Can be fixed by tabbing back into the game. Currently being investigated.
  • Demos recorded in 5.0 can desync. Currently being investigated.