GZDoom Changelog

What's new in GZDoom 4.11.3

Nov 2, 2023
  • fix map WAD check for savegame validation.
  • always save the map WAD in a savegame's metadata, even if it is from the IWAD
  • added Wads.GetLumpLength.

New in GZDoom 4.11.2 (Nov 2, 2023)

  • fixed savegame file name check.
  • fix UMAPINFO's intermusic being used at the summary screen.
  • widen the special field in FBoomArgs.
  • do not print all GL extensions to the log for the GLES renderer.
  • minor backend update from Raze.
  • give error instead of warning for zscript 4.12+ on return count mismatch
  • warn when fewer returns than expected are given for a function

New in GZDoom 4.11.1 (Oct 26, 2023)

  • fixed actor class creation for DSDHacked
  • fix DSDHacked state creation.
  • fixed DumpCPUInfo() definition for non-x64 platforms
  • update soundfont for all platforms
  • set default backend to Vulkan, if Vulkan fails use GLES instead of OpenGL
  • removed several bad casts to 'long'.
  • Fix inheritance for bNoSaveGame
  • make zs Actor.GetReplacement and Actor.GetReplacee clearscope
  • fixed another bad string validation check involving GetChars
  • use copystring instead of strdup when reading environments.
  • disable survey code again.

New in GZDoom 4.11.0 (Oct 9, 2023)

  • Highlights:
  • Several new languages: Danish, Norwegian, Swedish and Turkish
  • cleanup of Doom's and Chex Quest's small font to use proper character heights for international support.
  • extended all fonts to be capable of handling all European languages which are in common use.
  • First stage of DSDHacked support. Tested only with crusader.wad for now.
  • The build system was transitioned to optionally use vcpkg, which allows building GZDoom on Windows by running a single batch file.
  • WebP and QOI support for textures.
  • sanitized the light mode selection to make it a first class mapping feature by separating map dependent light mode setup from performance related user preferences for the default setting.
  • Linux: GTK startup now offers all the options of the Windows variant
  • lots of new ZScript features.
  • Bugfixes:
  • screen size settings are now properly saved.
  • fix UMAPINFO boss action clearing.
  • MBF21's BOSS flag now implies NORADIUSDMG.
  • remove memory leak in A_ChangeModel
  • fix OpenGL ES selection on the windows startup dialog
  • Details:
  • Changed the variable type of Crossed3DWater. Seems like there was some kind of oversight. Crossed3DWater is an F3DFloor pointer, not sector_t.
  • Add ZScript constants used by FallAndSink
  • Switch to miniz from zlib
  • fix for Genesis of Descent E1M2, which is impossible to complete on ITYTD/HNTR. I had to decompile the ACS script to figure out what was going on, basically at one point you get locked into a room and have to kill exactly 3 enemies with TID 215 for the door to unlock. One of these is a Baron tagged for only Medium and Hard, in his place is an Imp #1184 that has all the right script setups but is not set to appear on any difficulty. The fix is to simply have this imp appear on Easy.
  • fixed the overlapping sector handler in hw_fakeflat.cpp. This picked the wrong plane as the proper texture cutoff.
  • fixed: The UDMF loader did not adjust the floor/ceiling overlap state after processing UDMF sector plane properties.
  • fixed: EV_DoDonut checked the wrong compatibility variable and missed all map specified flags.
  • Fix gameinfo load from same directory as file containing gameinfo lump
  • validate partner seg index in LoadGLZSegs before using it
  • added compatibility handler for Phocas Island 2 MAP01.
  • fixed doublebind check with automap. For the automap C_DoKey gets called twice, once with the automap bindings and once with the regular bindings and doubleclicks.
  • clear the Dehacked string table after passing it to GStrings. For some reason std::move does not work here so make sure it won't stick around.
  • stop all cutscenes before the ENDOOM screen.
  • fixed: Boom's generalized crushers must stop 8 units above the floor. This required changing the special, so a new one was added to avoid altering Generic_Crusher.
  • Fix a very rare crash with complex Polyobjects
  • add support for not localizing some text functions, and modify menu text fields to use this
  • let Dehacked set the implicit missile flags.
  • fix ammo consumption of powered up Phoenix Rod.
  • add unexplored secret color for overlay automap to the menu
  • made all FileReader implementations 64 bit capable.
  • added a nomirrors compatibility handler and applied it to Conf256's CONF55 map. This is for disabling broken plane reflection setups.
  • When compat_floormove is enabled prevent sector floor from lowering if a thing is stuck in the ceiling (vanilla behavior)
  • fixed M_GetSavegamesPath for Linux.
  • Add Inventory::ModifyBob and Inventory::ModifyBob3D
  • Expose OF_Transient to actors as bNoSaveGame
  • add StartGameDirect function
  • fixed: MBF21's BOSS flag implies NORADIUSDMG.
  • fixed: For Dehacked, A_CPosAttack needs to use a hard coded attack sound. This discrepancy is ancient, so the approach used for the shotgunner does not work here and some hacks are needed to remap the function only for Dehacked.
  • implemented the remaining dynamic structures of dsdhacked
  • dsdhacked: Allow dynamic creation of new actors
  • dsdhacked: allow dynamic creation of new states.
  • add float.equal_epsilon and double.equal_epsilon
  • Allow building gzdoom with Vulkan with either X11 or Wayland WSI integration through CMake options
  • use stb-image for JPEG decoding because the old library provides no advantage over it.
  • Allow disabling colors for NameAllKeys
  • avoid high stack usage in anmtexture.cpp
  • added DSDA's passover/nopassover keys to the MAPINFO parser.
  • use a string pool to store all filenames and in the file system. this avoid lots of small allocations for data that will released in bulk later.
  • use the lump cache directly for FileData. This was the final puzzle piece to allow using memory mapped files in the future.
  • use better hash function in the file system. This is djb2 which is supposedly one of the best string hashing functions around.
  • rewrote dir CCMD using ScanDirectory and avoiding I_ChDir entirely.
  • use ScanDirectory in all places where the findfile API was used.
  • WebP image support
  • added safeguards against very early access to console variables in Cocoa backend
  • Add support for QOI image formats
  • block the centerview CCMD if the player has TOTALLYFROZEN. This is deliberately done this way, instead of placing the check inside PlayerPawn::CheckPitch, because there may be other situations where we don't want to block the centering function (APowerFlight::EndEffect being one such case)
  • replaced zstrformat with stb_sprintf.
  • A_Chase CHF_DONTLOOKALLAROUND
  • Add Weapon::ModifyBobLayer , Weapon::ModifyBobLayer3D and Weapon::ModifyBobPivotLayer3D
  • allow explicit casts between vectors of different underlying types
  • Fixed BlockingLine giving erroneous results
  • add CountSectorTags/CountSectorTags/CountLineIDs/GetLineID
  • Exported reflection functionality. Localized reflection code to a single function. Fixed an error where NOSHIELDREFLECT was being checked on the wrong Actor. Fixed an oversight where MIRRORREFLECT was checking for valid target despite not needing one.
  • Added ShadowAimFactor and ShadowPenaltyFactor. These properties allow to specify how much an actors' aim is degraded when shooting at a shadow actor. And how much the shadow actor itself affects the shooters' aim, respectively.
  • Added MF9_SHADOWAIMVERT. This flag causes the vertical aiming of monsters to also be affected when they aim at shadow actors.
  • Added MF9_SHADOWBLOCK. Actors in the line of fire with this flag trigger the MF_SHADOW aiming penalty. The shooter needs to have MF9_DOSHADOWBLOCK to check for actors with this flag.
  • Added MF9_SHADOWAIM. This flag allows actors with MF6_SEEINVISIBLE to still get an aim penalty by trying to shoot at a shadow actor.
  • Added damage property to earthquakes.
  • Added damage and thrust multipliers to quakes.
  • Added QF_DAMAGEFALLOFF. This flag makes it so that the damage and actor thrusting of earthquakes fades with distance like the screen shake effect does.
  • Added (XF/RADF)_CIRCULAR. This flag makes explosions use a spherical radius, instead of a cubic one. Only took almost 30 years.
  • Added (XF/RADF)_NOALLIES. This flag allows explosions to not harm any actors that are friendly to its' source.
  • Added (XF/RADF)_THRUSTLESS. This flag allows for explosions that do not thrust any of the actors caught in the blast.
  • Allow custom MessageBox menu selector
  • Individual Joystick Enable/Disable Toggles
  • add QualifiedName to VMFunction and allocate these static names from the class data memory arena instead of using FStrings.
  • null pointer type checks in the VM added to avoid crash on bad codegen.
  • Expanded Service's Get functions to pass in name parameter.
  • Added GetName(UI/Data) to Service class.
  • make all legacy light modes except 'Doom' and the software rendering emulation MAPINFO only. A CVAR still exists for testing but its value won't be saved to the config.
  • MAPINFO can not enforce any of the two software light modes, as low end users require the option to change this to the 'performance' setting.
  • changed lightmode menu options: user can only select between "performance', 'software' and 'vanilla'. 'performance' is the old 'Doom' mode which is still needed to speed things up on low end hardware.
  • fix the ammocount parameter in Weapon.CheckAmmo
  • fix UMAPINFO boss action clearing. This did not handle the case where the actions were cleared without adding new ones and also did not clear the MBF21 boss action flags.
  • remove memory leak in A_ChangeModel
  • made some changes to vectors.h so that it can be used without the floating point function replacements.
  • Add Voodoo Zombie Compatflag
  • remove vid_gpuswitch and all its handling; it is only as of now useful in old versions of Windows 7/8/10 which are no longer supported
  • added MaxEffectTics field to Powerup
  • adapted font system to properly handle Turkish. Those i's are really messy, especially when dealing with allcaps or pure lowercase fonts.
  • made D_WriteUserInfoStrings memory safe.
  • Fix TArray allocating 0 bytes in constructor
  • Add dynamic lights to software slope drawer
  • use uniform buffers for dynamic lights everywhere. Branching on SSBO content does not work that well on NVidia so it is better disabled. So far only implemented for OpenGL Vulkan needs more work.
  • Fix Software Slope Rendering for non-1.2 pixel ratios
  • add the flags MINVISIBLE and MVISBLOCKED
  • Extend pseudo-generics system used by maps to dynarrays
  • add RedirectCVAR directive for loading alternate maps based on a Bool CVAR setting
  • Fixes bones when using OpenGL 3.3 (UBO bone data)
  • validate the buffer size in HWViewpointBuffer::Set2D.
  • Fixed a bug where calling an invalid virtual function would cause a crash.
  • Add cvars to sprite shadows progressively according to thing floor distance
  • Added OnEngineInitialize() for static event handlers
  • cleanup of the Doom and Chex Quest small fonts' discritical characters
  • Implement antialiasing for automap lines
  • Map::GetIfExists and Map::CheckValue
  • Fixed global TerrainDef array not being exported correctly
  • alt HUD: use NewSmallFont for drawing player's coordinates if ui_generic is enabled
  • Increase slider precision for mouse sensitivity settings
  • Use a slider to allow specifying max FPS with more precision
  • Check all ACS functions for minimum number of arguments.
  • Fixed SpawnForced not respecting the minimum declared in zspecial.acs. (https://forum.zdoom.org/viewtopic.php?t=77027)
  • Exported LinePortals to ZScript
  • cleaned up the pitch management in the sound backend. This now treats all pitch methods equally instead of the preferential treatment of Doom's original pitch hack. Most importantly, the sound channel now stores the pitch as a floating point value instead of 9.7 fixed point.
  • snd_pitched now also gets checked in the sound engine, not the low level interface.
  • Fix Y position of characters in monospace fonts
  • Added all of the missing player cheats to the SetPlayerProperty special.
  • Added APROP_WaterDepth.
  • Converted A_Quake(Ex) intensity parameters from ints to doubles.
  • Add missing error for mapinfo tonemap
  • Add Tonemap support for Unclamped lighting mode
  • Add Alternate Light Blending Options
  • gldefs: update Freedoom definitions.
  • CCMD listmaps: Colorize maps loaded from pwads in blue text
  • Fix MapIterator::GetValue
  • Fixed a bug where static events would fail to halt propagation.
  • Fix diffuse-only material shaders not applying.
  • Add sv_noplayerclip to allow players to walk through and shoot each other (only in coop)
  • optimized sheet font texture generation. Instead of reloading the base image over and over again, let's cache it so that less time is needed for each single character.
  • changed CreatePalettedPixels to allow return of static pixel data without reallocation and copying.
  • fixed buffer size checks for raw textures.
  • Prevent important messages from being accidentally filtered.
  • Updated the WOPN banks collection
  • Added FlyBob Multiplier for Player
  • Added WaterClimbSpeed Property to Players
  • Fixed custom screen height and width not saving.
  • Additional lock-related ZScript functions.
  • Key.IsLockDefined: returns whether a lock number is valid (can be unlocked) or belongs to a "does not work" door.
  • Key.GetMapColorForLock: returns the automap color for a lock number (or -1 if the lock isn't valid).
  • Key.GetMapColorForKey: likewise, but for a specific key.
  • Fix FxMultiAssignDecl type
  • fix OpenGL ES selection on the windows startup dialog
  • Multi-Assign Declarations
  • Fixed the ACS PLAYERINFO_FVIEWBOB to be a bool instead of a double.
  • Add vulkan pipeline cache
  • Update and clean up UE1 model loader.
  • Expose StripLeft and StripLeftRight to ZScript
  • Fix StripLeftRight
  • Error out instead of crashing for vector out variables
  • optimizations for the sound system and texture manager.
  • Added FOV Interpolation
  • Added toggle control for weapon bob while flying
  • add BobWeapon3D
  • Exposed Box and PointOnLineSide
  • Add support for Vector types as properties
  • removed bogus errno check from Dehacked parser.
  • Fixed IsActorPlayingSound's default argument
  • Fix wrong assumptions about actor initialization in Map/MapIterator
  • fixed GC::FullGC not collecting everything anymore.
  • extended all fonts to contain all characters used by European languages
  • Fix Quicksave Rotation
  • Add all the functionality from the win32 startup window to the GTK version

New in GZDoom 4.10.0 (Feb 6, 2023)

  • Italian language translation is now complete
  • Make the new scaled angle changes at frame rate opt-in behind new flag SPF_SCALEDNOLERP.
  • Set up interpolated camera angle changes to occur at framerate when all conditions in P_NoInterpolation() are met.
  • Make view angles interpolate on a separate flag to the one that forces interpolation for the entire frame.
  • Map and MapIterator for ZScript
  • Structified A_SpawnParticle/Ex
  • Look up named frames using the Animation ID (if any).
  • Allow Disabling of XY Billboard for Particles
  • Added Method For Getting Portal Group Count
  • Allow Getting Portal Group Offsets
  • Fixed A_Changemodel crash from invalid modeldef names
  • Fix SNDINFO $rolloff always changing global rolloff
  • Fix GC ignoring DynArrays inside fixed Arrays
  • AST debug cleanup
  • fixed: The raw texture caching in the texture manager did not work. This erroneously checked for FrontSkyLayer.
  • Allow assigning IQM frames by animation name plus frame offset.
  • Added animation support for OptionMenus
  • Fix crash if Animation is not explicitly assigned in MODELDEF.
  • internal cleanup of sound code
  • allow SNDINFO to declare sound mappings by using 'sound = soundfle' syntax.
  • process events every frame as well to ensure that menus can run at any framerate
  • Fix incorrect pixelratio handling on rotated models.
  • Added Font and TextureID types to Option and Image Scroller items (List items already have these)
  • Added "Class" instruction for Image Scrollers
  • Added ability for Option items to read in their OptionMenuDescriptor (List and Image Scroller items already have this)
  • Added "ForceList" instruction for Lists so that skill, playerclass, and episode menus don't get overridden
  • Fix checking of wrong variable in String..Float concatenation
  • Clearscoped getters for map data
  • CustomMessageBox
  • fix colormap remapping when colormap entries may have fullbright entries which should not be considered duplicates
  • stop all sound before showing ENDOOM.
  • disabled shortcutting the intermission code if no summary screen is wanted. This also disabled all cutscenes being attached to the completed map.
  • added 'foreach' loop to ZScript.
  • implementation of Quaternion type in ZScript
  • GLES: Added IQM bone support.
  • SendConsoleEvent function for EventHandlers
  • Future-proof particles by resetting them completely when replaced.
  • added PlusZ intrinsic to Vector3 and ToVector intrinsic to numeric values. These just mirror features of the internal vector classes.
  • added LengthSquared and Angle intrinsics for all vector types, also allow calling VectorAngle with a full vector as a single parameter.
  • Add PushSound property and Slide state
  • Added PS_REPLACE flag for A_SpawnParticle(Ex). When used, new particles that spawn when the limit is reached will replace the oldest particle.
  • add Vector4 to ZScript
  • avoid infinite portal recursion.
  • fix uncaught exception that rarely occurred with the intermission screen that would vm-abort out from any attempt to enter a level
  • Exposed LevelLocals' LookupString functionality
  • Improved Slam functionality.
  • Normalize angle in AngleToACS. Fixes GetActorAngle returning negative or large values with no range limit.
  • Enable ANIMDEFS for particles
  • add some more blacklisted cvars to defcvars
  • fixed background setup for intermissions to apply tiling only where intended.
  • removed the unused BaseBlend* variables and the testblend CCMD.
  • added a compile option to fully disable the software renderer. This is mainly for new games which have been designed for hardware rendering.
  • add the following command line parameters:
  • -noextras: disable loading of any extras (lights, brightmaps, widescreen)
  • -nolights: disable loading of lights
  • -nobrightmaps: disable loading of brightmaps
  • -nowidescreen: disable loading of included widescreen assets
  • fixed bad index check in CanWipe. This can be called with index == -1, which should check the first element of the intermission.
  • GC: Have a real finalizer stage for destroying objects instead of mixing them in to the sweep stage.
  • GC: Base GC rate on a running average of the allocation rate instead of basing it on the amount of time taken since the last sweep started.
  • More GC stats for better tweaking.
  • added characters U-0404 and U-0490 for Ukrainian language support.
  • reworked all accented characters of Doom's SmallFont. Also adding a few new ones that were easy to do
  • when converting to a portable install, flag the current session accordingly.
  • changed CalculateBones to receive the bone component data directly instead of the owning actor.
  • fixed FileExists check for -loadgame. This was done before the current savegame path was known so it always errored out.

New in GZDoom 4.9.0 (Nov 7, 2022)

  • Change of savegame storage:
  • This version introduces per-IWAD savegame folders. If you have old savegames you still intend to use, please wait with the update until you can safely delete them.
  • Highlights:
  • IQM bone model support
  • textured particles
  • Details:
  • added target check to A_MaulerTorpedoWave.
  • fixed: P_SpawnMapThing may not call playsim code.
  • added PARAM_NULLCHECK to the block iterator creation functions.
  • added [[noreturn]] to several functions that always throw exceptions.
  • Particle Rolling
  • Add Textured Particles
  • Add GFF_NOEXTCHANGE to Phasing Zorcher flash. The Plasma Rifle does not light the player's sprite, so we must assume the Phasing Zorcher also should not.
  • Fix HUD models not drawing if MODELDEF has been changed with A_ChangeModel
  • Fix inconsistent distance and hit position on traces that skip everything.
  • Fix canvas textures getting clipped by wrong scissor box
  • Fix vulkan backend clearing the canvas textures to undefined contents
  • made DMover and subclasses non-abstract so they can be inherited from.
  • added option to show hub and episode names on the alt HUD.
  • reworked CVARs to not use a linked list and to be initialized manually.
  • marked a few Printf calls in critical error paths as PRINT_NONOTIFY.
  • fixed: R_LoadVoxelDef did not fully initialize the voxel descriptor it creates.
  • don't crash on null pointers in V_GetFont.
  • zero the velocity of crunched sprites. Since their size is zeroed, they are no longer subject to collision detection and may slide out of the level otherwise.
  • don't crash when destroying incomplete textures. This can happen during TEXTURES parsing in case of an error.
  • try to keep the engine stable for as long as possible if a VM exception occurs in OnDestroy while running a cleanup. This will still crash, but run long enough for the exception message to be visible.
  • fixed F2DDrawer::SetClipRect.
  • added vanilla donut handling to compat_floormove.
  • Fixed: voxel models pitch/roll properties weren't initialized correctly
  • Added QF_SHAKEONLY. The QF_SHAKEONLY flag changes the behavior of earthquakes with a damage radius, so that they only shake actors around, without also harming them.
  • Added QF_AFFECTACTORS. The QF_AFFECTACTORS flag makes the thrusting and harming of damaging earthquakes also affect monsters. Monsters with DONTTHRUST will not be flung around by earthquakes.
  • Added the QF_GROUNDONLY flag. The QF_GROUNDONLY flag makes earthquakes only shake the player while they are standing on the ground.
  • fixed DrawLine commands by giving them a consistent floating point interface.
  • heretic: e2m7 - missing texture
  • fixed direct native interface for Draw(Thick)Line.
  • fixed: The main loop never checked the cutscene flag for disabling wipes.
  • Sync movie video playback to the audio, when possible
  • Fix washed out colors in Vulkan HDR mode
  • normalize the timer with the app start, not the epoch. This ensures smaller values and less wraparounds with integer values in scripts.
  • un-deprecated the integer MSTime variant. Due to undefined downconversion rules from double to int, there is no way to safely downcast the return from MSTimef, meaning the function is completely useless for retrieving integral time stamps.
  • added Harmony ENDOOM screen.
  • added a config getter to the interface.
  • moved language CVAR to backend.
  • handle menu customization via callbacks.
  • move hud scale CVARs to the backend.
  • handle autoload flags in startup through function parameters instead of directly accessing the CVARs.
  • handle Build tiles via explicit callback to the init function.
  • add a system interface for CheckCheatmode and moved some sound code to the backend.
  • Exported GetDisplayTopOffset for font characters to ZScript
  • added missing obituary for Strife's turret.
  • Added support for BLOCKLANDMONSTERS in Line_SetBlocking.
  • Added APROP_FriendlySeeBlocks to Set/GetActorProperty
  • Fix planeval; add direct sector slope manipulation
  • Modify to have one GetVertexZ rather than IsVertexZSet / GetVertexZ
  • Add vertex height manipulation functions to LevelPostProcessor
  • Add sv_noextraammo. When set to true, disables that weird hardcoded behavior from original Doom that gives extra ammo when picking up weapons in deathmatch
  • fixed: all script methods adding an object to a dynamic array must perform a write barrier.
  • add freezetics actor property
  • allow notification of actor goal is reached inside of a SECF_NOATTACK sector
  • GLES2: Fix anistropic filtering
  • disabled discord-rpc debug info for configurations without it
  • fixed sky cap color handling
  • fix arti teleport and arti teleother not respecting useplayerstartz mapflag
  • UE1 models now handle frame index -1 properly.
  • Add support for the GOG releases of the Unity versions of Doom and Doom II.
  • carry over the tiling flag from the finished to the entering screen
  • Prevent Keyconf from adding duplicate playerclass
  • Add detection for the Final Doom WADs that were recently added to the Steam version of Doom II.
  • new method to define obituaries without modifying actors.
  • remove latch flag from sv_cheats
  • add openscreenshots opensaves and openconfig console commands on Windows and Linux and Mac
  • use consistent index types for array function return values.
  • pass clip rect as pointer to F2DDrawer::AddLine.
  • Export FindLumpFullName to ZScript.
  • Add support for nested user types
  • made adjustments for proper int type promotion to allow internal ZScript to compile with it on.
  • ZScript: fixed integer type promotion for shift operator
  • version-restrict int to uint promotion. Some mods depend on this not happening.
  • fixed: The compile context for constant evaluation did not initialize its Version member.
  • Don't throw away unsignedness when passing unsigned constants to the codegen
  • Add signed->unsigned promotion for binary operators
  • fix menu commands with semicolon separated commands
  • get rid of M_Malloc call in WriteSavePic
  • Fix definition order of ZScript structs. Do a first pass over the Structs array in CompileAllFields() to reorder them such that if a struct uses other structs, those structs will be resolved first.
  • Fix viewpoint buffer not getting cleared when in the menus
  • backported KDE detection from Raze.
  • removed the Softpoly backend.
  • Add a 2d drawer to canvas textures
  • Fix incorrect mapping of texture indices for UE1 models.
  • Added PitchFromMomentum, UseActorPitch and UseActorRoll to VOXELDEF. Behaves exactly like their 3D model counterparts. Hardware renderer only.
  • removed some redundant chaaracters from the Doom SmallFont.
  • Added IQM bone model support
  • Added A_ChangeModelDef
  • fixed return values of FTextureAnimator::AddAnim
  • add longsavemessages to simple menu. set longsavemessages default to false.
  • DirectInput cleanup. Removing ancient code that's only useful on pre-XP OSs.
  • also allocate FDoorAnimation's frame table from the texture manager's memory arena.
  • optimized storage for animation definitions.
  • Fixed vulkan crash when multisampling is enabled
  • add a method for filling a shape2d instead of using a texture (#1661)
  • add stencil buffer support for 2d drawing (#1660)
  • add a system for setting all of 2D drawing's transform, not just shapes
  • Expose ConsoleState to scripts
  • rewrote Windows console code for Windows 10's new terminal.
  • fixed and consolidated artifact check in cheat code.
  • removed volatile type punning for clipping against line portals.
  • fixed handling of *dive and *surface sounds.
  • -let A_FireProjectile pass through the second return value of SpawnPlayerMissile.
  • fixed PoisonCloud's looping animation count.
  • weapons are not artifacts.
  • rename PrintString to PrintfEx and make it a vararg function
  • Expose Print Flags to ZScript
  • fixed names for A_PlaySoundEx
  • ENDOOM is not Windows only anymore.
  • fixed background tiling for summary screen. Since the background object gets recycled it must clear this flag before loading a new background.
  • let the "abort" button on the network pane of the startup screen do a hard exit on Windows.
  • make sure ticdup is initialized.
  • Add +ONLYVISIBLEINMIRRORS and +INVISIBLEINMIRRORS actor flags. The former makes the actor only visible in reflections, while the latter makes the actor not cast reflections in mirrors.
  • cleanup and refactoring of Vulkan backend
  • Improve vk_debug output a lot by throwing away the useless parts of the message and limit the callstack to the first 5 gzdoom calls
  • validate fountaincolor before using it.
  • added detection of macOS Ventura
  • ZScript: don't allow multiple assignment syntax with only one element.
  • fixed type of third argument of MBF21's MonsterMeleeAttack function. This is a sound, not an int.
  • added an override for NOTAUTOAIMED flag when using P_AimLineAttack for informative CCMDs.
  • allow taking screenshots in cutscenes.
  • fixed JIT target function for GetTimeFrac.
  • fixed: For cutscenes the alternative clean scaling factors need to be activated.
  • fixed setup of ready state with Dehacked. This needs to emulate the hard coded chainsaw sound when weapon states get reassigned.
  • Fix the discolored sky bug
  • check point pushers/pullers ...

New in GZDoom 4.8.2 (Jul 6, 2022)

  • Fixed names for A_PlaySoundEx
  • ENDOOM is not Windows only anymore.
  • Fixed background tiling for summary screen.
  • Text update that was missed in 4.8.1
  • Add a few maps to the rebuildnodes compatibility block
  • Fix FVector to Vector comparison

New in GZDoom 4.8.1 (Jun 27, 2022)

  • Let the "abort" button on the network pane of the startup screen do a hard exit on Windows.
  • Bugfix for software mode mirrors not working
  • Make sure ticdup is initialized.
  • Add +ONLYVISIBLEINMIRRORS and +INVISIBLEINMIRRORS actor flags. The former makes the actor only visible in reflections, while the latter makes the actor not cast reflections in mirrors.
  • Vulkan backend update
  • Validate fountaincolor before using it.
  • ZScript: don't allow multiple assignment syntax with only one element.
  • Fixed type of third argument of MBF21's MonsterMeleeAttack function.
  • Added an override for NOTAUTOAIMED flag when using P_AimLineAttack for informative CCMDs.
  • Allow taking screenshots in cutscenes.
  • Fixed JIT target function for GetTimeFrac.
  • Fixed: For cutscenes the alternative clean scaling factors need to be activated.
  • Fixed setup of ready state with Dehacked. This needs to emulate the hard coded chainsaw sound when weapon states get reassigned.
  • Fix the discolored sky bug on Vulkan
  • Check point pushers/pullers by inheritance, not absiolute match
  • Implement FVector ZScript for Actor Scale
  • Added FailSound property to PuzzleItem
  • Add `i_pauseinbackground` to the menu. note: please pull the language file for this
  • Set `i_pauseinbackground` to match `!(i_soundinbackground)` for all configs before this commit.
  • Fixed division by zero with unvalidated ticdup values.
  • Reinstated con_scale.
  • Make sure the last notch on the start screen is rendered.
  • Fix relative include path when loading folders
  • Avoid storing texture pointers in longer lived data

New in GZDoom 4.8.0 (Jun 14, 2022)

  • Highlights:
  • Added Raze-style HUD scaling. Not exposed in the menu yet, Set hud_oldscale to 0 and use shift with the screen resize keys to scale the status bar.
  • Handle the start/endoom screens with the ingame renderer. They are now present on all platforms and use the full screen size of the game.
  • Many MBF21 fixes.
  • Added the cutscene system from Raze
  • Details:
  • The chat should use the console's scaling, not the one for the messages printed with the small font.
  • Fixed auto-scaling for console.
  • Removed all vid_fps offsetting. To compensate there is now also a "stat fps" which displays the FPS rate in the lower left corner. This had to go because unconditionally altering positions was causing problems with custom HUDs.
  • Added Raze-style HUD scaling. Not exposed in the menu yet, Set hud_oldscale to 0 and use shift with the screen resize keys to scale the status bar.
  • Added a few more names to the reserved names for main folder detection.
  • Consider "fonts" and "models" reserved folder names.
  • Fixed undefined behavior with Dehacked's value parser.
  • Rebuild nodes for 1024.wad MAP02 to fix invisible obstacle near the exit area
  • Fixed fast crushers going out of sync if something is being crushed by them.
  • Fixed: Vulkan descriptor sets must check the real translation, not just the translation ID.
  • Handle the start/endoom screens with the ingame renderer.
  • Create a MainWindow class that manages the main win32 window of the application
  • Added Actor::LightLevel. Setting it to any value > -1 will override the sector's light level.
  • Implement virtual Actor.FallAndSink for scriptable falling and water physics
  • Added Actor.WaterDepth to retrieve how submerged and actor is, in map units
  • Added cutscene data parser. This covers: game start, episode start, cluster start/end, level start/end.
  • MASTERNOSEE flag (#1601) Makes it so that if an actor's master is invisible due to camera/mirror/portal shenanigans, then the actor will also be invisible. Name based off of an Unreal Engine flag that does the exact same thing.
  • Made CanCrossLine opt-in by requiring the CROSSLINECHECK flag.
  • Added CanCrossLine virtual for actors.Called last after all other line checks occur. Returning false means the actor cannot cross that line.
  • Add WorldOffset field. Adjusts the thing's 3D position on render side. This allows for adjusting a thing's visual position without impacting their hitbox.
  • Fix bad MP start spot in 1024.wad, MAP05
  • Enables shortcuts for option menus. Press a key to immediately jump to the next option menu entry which starts with this key. Hold Alt to jump backwards.
  • DontLightOthers: Acts as the inverse of DontLightSelf, where it won't light actors that aren't the owner.
  • DontLightMap: The light doesn't affect the map.
  • Relative Includes for ZScript
  • Remove m_filter and simplify related code
  • Exclude keys from ‚artifact‘ cheats
  • Fixed MF_SHADOW handling for MBF21. This needs to alter the render style as well.
  • Fixed handling of automap sprites with negative scale.
  • Fix dynamic light setup. The level’s global flag is unreliable and cannot be used. The operation this was initially supposed to skip cannot be skipped anyway so the impact should be minor.
  • Allow SendNetworkEvent during title level.
  • Add sv_ammofactor to change the skill adjustment for ammo
  • Extended the read buffer for the 'secret' CCMD.
  • This is merely preparation - the actual loading is still in one uninterrupted piece.
  • Fix that vk_debug doesn't output anything for newer versions of the vulkan sdk
  • Added JPEG YCCK decoding.
  • Added MF8_SEEFRIENDLYMONSTERS. Non-friendly monsters with this flag on will be able to attack friendly monsters on sight.
  • Fixed mouse coordinate checks for Strife conversations. ypositions needs one entry per response, not one per line.
  • Fixed radius of BossBrain actor
  • Added QF_3D flag for quakes. When used, the quake thinker will perform a 3D distance check instead of 2D.
  • Removed compat_soundcutoff from the menu. Handling for this was removed 14 years ago when ZDoom transitioned to FModEx 4.x
  • Add -compatmode for setting a compatibility mode on startup as a replacement for +compatmode not working as intended.
  • Activate Hungarian in the menu
  • Fix off-by-one in Vulkan multisample sample count selection
  • Completed Hungarian translation.
  • Fix co-op softlock in Heretic E4M8 due to multiplayer teleporter.
  • Added handlers to load Strife’s startup screen images as textures
  • Added image source handlers for Hexen’s special startup image types
  • Use the hex font for the Heretic/Endoom text screens.
  • Fixed setup of files to load on startup.
  • Fixed return type of MSTimeF script function.
  • Moved -rngseed init to D_InitGame
  • Pass ´hashfile´ to filesystem as parameter
  • Fix TArray::Append with rvalue parameter. This must clear the source array to obey move rules.
  • Fixed Playdemo and Timedemo check. The assumption that D_DoomLoop never returns does not apply anymore. Let it fall through to the end instead where this is properly handled.
  • Only check „allowduplicates“ for the final file system init
  • Added missing BLOCKF_ flags for ZScript.
  • Added ‚repeat‘ option to SetLineActivation ACS function
  • Made friendlyseeblocks writable.
  • Removed all remains of the corpsegibs flag and made vileghosts interactive. Ghosts are still off by default, but they will now be enabled when selecting the vanilla (strict) compatibility mode.
  • Restrict RealGibs for players only. All non-players will now always act as if the ‚corpsegibs‘ flag was set, regardless of the current setting.
  • Added Get/SetAmmoCapacity ZScript functions
  • Expose the ‚attenuatelights‘ map flag.
  • Added an option to delete a terrain type from a texture.
  • Add wipe transition support to the screenjob runner.
  • Migrated intermissions and summary screens to screenjobs.
  • Timer code fixes.
  • Added all the cutscene system from Raze
  • Added compat_nombf21 for cchest2.wad, map 19.
  • Fix usage of -1 as OBJ model FrameIndex
  • Added zip64 handling
  • Added workaround to Dehacked so that „Doom“ only replaces the music name
  • Fixed some incorrect array allocation sizes in polyobj code
  • Added missing range check for scrolling down an option menu with the mouse wheel.
  • Do not clamp warped textures.
  • Disabled deletion of previous event handlers when using 'eventhandler' keyword in MAPINFO.
  • Fixed: decal things failed to spawn their decals on 3D floors.
  • Validate the index argument for GetSavegame and abort if out of range.
  • Don't let "give weapons" hand out abstract weapons.
  • Lock cvar shader uniforms behind a command line parameter for now
  • Fixed setup of PolyBSPs when the software renderer is active.
  • Remain 3, MAP11 also needs compat_nombf21.
  • Fixed Dehacked drop items.
  • Added nombf21 compat setting for Heroes Tales MAP31
  • Fixed: The alt HUD's draw call did not use the virtual interface.
  • Fixed: group teleporters must always preserve orientation.
  • Don't move bad polyobjects in the savegame loader.
  • Cast arguments for fastcos/sinbam
  • Copy size info from defaults when starting a list menu block.
  • Handle cases of empty state labels in ZScript.
  • GLES: Fix blend flags
  • Fixed bad color range check in ACS HudMessage code.
  • Fixed Dehacked check for A_ConsumeAmmo. This must use the internal function name.
  • Fixed y-offsets of bal7scr* decal images.
  • Let A_SpawnParticle respect the float bob offset
  • Separate message for disabling noclip2
  • Added a nullptr check for StatusBar when drawing „Paused“
  • Make menu scale adjustments for ultra-wide aspect ratios.
  • Treat PSP layer ID 0 as invalid. No PSprites with this ID may ever be created, as there is no means to find them again.
  • Fixed: The skill menu did not remember its last selection.
  • Allow artifacts that do not automatically activate to be given by the 'give artifacts' cheat
  • Added vertical bullet spread relative to ssg
  • Fixed GUS Emulation with DMXGUS(C) lump conf.
  • Changed default value for midi_config to empty string since gus is not working with sf2 file
  • Fixed SetupDMXGUS not loading lump correctly, wrong use of CheckNumForFullName
  • Midi_config default to empty string, since lzdoom.sf2 doesn't seem supported (distorted sound)
  • Added absolute paths to FZipPatReader so we can add custom patches to resource files by using gus_patchdir and/or ULTRADIR variable (some custom maps has custom patches that can be added this way without putting them inside the resource file or in the same folder of the configuration file)
  • Set timidity_reverb_level min value to 0 in menudef.txt, set to 9 by mistake?
  • Added the MF8_DONTFOLLOWPLAYERS flag, which allows friendly monsters to not follow their FriendPlayer when they have no target or goal left to head to.
  • Fixed Font struct export and removed the duplicate handler.
  • Fix detection for misplaced | when creating the small fallback font
  • Typo 'Yea' instead of 'Yes'
  • Implement proper GC handling for AActor::ViewPos.
  • Add CHF_DONTIDLE for A_Chase
  • Fixed exittext definition for Harmony. This wasn't using the string table.
  • Add gl_satformula == 2 - an optional 'more accurate' desaturation
  • Fixed order of slope creation so that slope copies are the last thing being done.
  • Discord RPC presence. Adds new IWADINFO and GAMEINFO keys: DiscordAppId - this should point to your AppId for your game. It will use a default GZDoom one if not found.
  • Remove default lost soul translucency
  • Added 'ScaleWeaponFOV' flag to MODELDEF. Affects weapon models only; will scale the model along with the user's FOV to reduce distortion.
  • Additionally, a 'cl_scaleweaponfov' CVar has been added to allow users to further fine-tune the weapon model scale with higher FOVs
  • Terrain small splashes and splash bases now set their target to the thing that spawned them, allowing for extra customization.
  • Added GetTerrainDef and Sector variant of GetFloorTerrain.
  • Fix 3d floor-related crash in software renderer
  • Add duplication checking to file list, prevent loading the same file twice unless explicitly asked by the user
  • Initialize FSwitchDef::QuestPanel when reading a Boom SWITCHES lump.
  • Added a 'no MBF21' compatibility flag. Turns out that there's a few old maps that have the extended line flags set but not the guard bit that forces their clearance. Astrostein 1's first map is an example for this.
  • Initialize some variables in FModelVertex::Set
  • Fix wrong normal vector in the FModelVertexBuffer constructor
  • Virtualize player landing on thing sound
  • Fixed local vector array initialization.
  • Fix func_paletted.fp to use alpha channel for index. This was needed due to GLES renderer change from Raze
  • Allow floats for uniform cvar defaults
  • Implement direct cvar linking to custom shader uniforms
  • Add per-tier sidedef light levels to UDMF maps
  • Add TexMan.SetCameraTextureAspectRatio. Allows ZScript to change the aspect ratio of a camera texture.
  • Optimized P_TestMobjZ by not running the iterator if actor also has THRUACTORS.
  • Make m_quickexit a global CVAR
  • Added A_SetViewPos(Vector3 Offset, int Flags = -1)
  • Apply WeaponScaleX/Y to all PSprites on a weapon
  • Fix logic error with shader compatibility layer
  • Add debug ccmds to manipulate custom postprocess shaders and their uniforms from the console
  • Fix mbf21 A_FindTracer fov cone being twice as big as intended
  • Add SMF_PRECISE flag to mbf21 A_SeekTracer, for accuracy
  • Fix mbf21 A_SeekTracer not working (arg type shenanigans)
  • Fix mbf21 A_ConsumeAmmo ignoring explicit amount arg if weapon's ammopershot field set
  • Fix mbf21 A_ConsumeAmmo taking 0 ammo instead of 1 if ammopershot field not set (need to amend the spec for this, argh)
  • Fix MBF21 A_WeaponMeleeAttack function name typo & args
  • Fix MBF21 A_WeaponProjectile spawn position
  • Fix MBF21 GetSoundArg off-by-one: sound indices are 1-indexed in args because Killough
  • Fixed logic error with depth bias state in hardware renderer.
  • Redid postprocessing shader interface to be free of the player dependency.
  • Separate i_pauseinbackground and i_soundinbackground - they probably should ultimately be moved out of the sound code
  • Fix GC so collection rate is proportional to alloc rate
  • Fixed: the powerup item for respawn invulnerability was never given to the player.
  • Fixed MBF21's A_SeekTracer. This cannot directly call A_SeekerMissile because that has more parameters. It now maps to a wrapper that takes care of these.
  • Fixed Dehacked parsing issues with weapon properties.
  • Added proper range check to the main sound playing function.
  • Fixed potential infinite loop in Hexen-style stair builder.
  • Create new menu page for simple mouse options menu - remove advanced settings like the individual speed fine-tuning
  • Fixed crash with Scroll_Texture_Offsets with non-zero tag
  • Fixed: ActorMover was not changing its tracer's flags.
  • Added NoTrim support for ANIMDEFS, same syntax as TEXTURES outside a definition.
  • Added NoTrim for TEXTURES.
  • Exported the "paused" global variable to ZScript
  • ACS: fixed an old regression in which printing a map char array did not dereference the given array variable
  • Fixed some issues with the scaling feature of DStatusBarCore::DrawString
  • GLES: Load default shader if we try to load user shader to avoid crash
  • D_ProcessEvents(): Delay EV_KeyUp events until any EV_KeyDown events for the corresponding key have been processed. This makes the mouse under SDL a lot better.
  • Add SDL hint to not minimize the window on focus loss
  • Apply clearscope to ApplyDamageFactor as well
  • Apply weaponscale relative to baseline
  • Add WeaponScaleX/WeaponScaleY properties for applying global scaling to a weapon's PSprites
  • Fix upload and sampling bug for array textures in the vulkan backend
  • Apply clearscope for ApplyDamageFactor - https://forum.zdoom.org/viewtopic.php?f=15&t=73830
  • Add LoadBrightmaps, LoadLights, and LoadWidescreen directives for IWADINFO - these function exactly the same as their GAMEINFO equivalents.
  • Fix abort with dir command and empty string on Windows.
  • Fix vulkan validation errors for wrong image transitions and buffers used after destroyed
  • Add a render style parameter to Screen.Dim
  • Fix vulkan buffers not using the stream usage for the 2d drawer. Add BufferUsageType enum to clarify what kind of usage is expected by the buffer allocated by SetData
  • Fixed: menu delegate class error message referenced the wrong gameinfo property
  • Added 'NoPerPixelLighting' flag to models to force it to not use per-pixel lighting. Main use case is for voxels that have been converted to models.
  • Add cvar r_skipmats - speeds up rendering on slower cards for mods that use a lot of specularity/pbr, effective on both the opengl and vulkan backends

New in GZDoom 4.7.1 (Oct 29, 2021)

  • Mainly a bugfix release addressing the following issues:
  • Fixed: SBar_DrawTextureRotated was missing the angle parameter
  • Compat patch for misplaced items in Hexen MAP08.
  • fixed some imprecisions in font luminosity calculation. This was still going through the palette which could result in off-by-one errors.
  • fixed palette initialization for single lump fonts (FON2 and BMF)
  • push sprite shadows a little back for distance sorting
  • avoid multiple Dehacked mappings to the same function to fix MBF21 lookup issues.
  • disallow changing the line spacing for option menus.
  • be a bit more aggressive with the GC when not running the game loop.
  • fixed memory leak in DShape2DBufferInfo.
  • allow "INDEXFON" as an alias for "INDEXFONT".
  • fixed A_Punch having a short attack range (take 2).
  • GLES: Fix texture MapBuffer and AllocateBuffer create client side memory.
  • Fix "out of memory" errors when the vulkan backend is asked to create zero byte sized buffers
  • resolved a VM abort upon morphing while the tome of power is active
  • fixed particle processing in the main thinker loop. This may not be guarded by the dynamic light flags, only the light ticking may.
  • fixed handling of states with the 'light' keyword.
  • Fixed broken V_BreakLines.
  • treat "materials" as a known folder name for eliminating root folders in Zips.
  • New Features:
  • widescreen assets for all officially supported games. This version adds Hacx, Harmony and Chex Quest.
  • Allow WorldUnloaded events to know the next map name (if any).
  • Allow map markers to scale relative to automap zoom.
  • Add cvars to control automap line alpha and thickness
  • PreTravelled virtual for player and inventory.
  • Allow customization of pause screen.
  • ReadThisMenu / MenuDelegate overriding.

New in GZDoom 4.7.0 (Sep 24, 2021)

  • Highlights:
  • Widescreen graphics for Strife
  • new GLES backend for better performance on OpenGL 3.3 and early 4.x hardware.
  • MBF21 support (still in beta and not fully tested yet, bug reports are welcome)
  • DEHEXTRA working properly now
  • various enhancements and fixes for ZScript.
  • Details:
  • fixed vertex generation when splitting walls by planes on old hardware.
  • menu system update from Raze for better control of animated menus.
  • GLES fixed: The weapon sprite must be rendered with the fullscreen colormap on.
  • use explicit virtual screen sizes for the scripted intermission backgrounds to better cope with background replacements.
  • fix compatibility handler for KDiZD's Z1M3.
  • fixed: "Dialogue" in MAPINFO must clear all "AddDialogues" that came before.
  • fixed melee attack disance being off after adding MBF21 support.
  • fixed: Decal things did not spawn their lower decals.
  • fixed texture clamping for elements that are partially behind a slope.
  • fixed bad parameter order in MinoraurSlam.
  • Consider 'Program Files' a read only location without actually checking.
  • fixed: 3D floor model sectors were not added to the sector lists for precise rendering.
  • removed the redundant gl_render_precise CVAR.
  • fixed: colors from brightmaps and glowmaps need to be desaturated.
  • fixed: shaders with NO_LAYERS defined may not apply brightmap and glowmap.
  • Vulkan: Limit texture upload transfer buffers to roughly 64 MB
  • marked several invisible controller things to not show on the automap with the scanner powerup.
  • treat 'vid_adapter 0' as what Windows considers the primary monitor.
  • fixed: Brightmap application for horizons was undefined..
  • replaces "BS" and "ED" on the on-screen keyboards with the symbols normally found on the keyboard for these actions.
  • enable cvar blacklisting for defcvars for certain platform variables
  • demote unknown/invalid defcvars to warnings
  • split defcvars parser into its own file
  • fix options search when menus are defined recursively
  • exported STAYONLIFT flag.
  • added a modified version of MBF's stay-on-lift feature.
  • fixed crash on getting location description without a level
  • block user overrides for the logic module of core fragment shaders.
  • added missing MBF21 Dehacked keys "blood color" and "dropped item".
  • implemented MBF's monsters_avoid_hazards feature.
  • added a map flag to disable MF6_JUMPDOWN.
  • added a per-level AVOIDMELEE flag.
  • allow passing a remap table to BestColor.
  • hud models: add nullptr check for psprites without caller.
  • removed the unused palette parameter from the V_GetColor family of functions.
  • Add FOV slider to the display options menu
  • added a null check to CheckWeaponChange.
  • replaced the alt HUD's index font with a sheet based variant.
  • changed FString API to use ptrdiff_t instead of long for signed size arguments.
  • Fixed IsHUDModelForPlayerAvailable limitation.
  • Look up HUD models by referencing the psprite's caller, rather than player's ReadyWeapon.
  • Allow Strife hands psprite to be a model.
  • fixed: crushing stairs must use HexenCrush mode.
  • extended 2D buffer lifetime to the end of the frame
  • use RefCountedPtr to manage 2D shape buffer infos
  • added RefCountedBase without virtual destructor
  • made RefCountedPtr follow rule of five
  • make RenderCommands able to use Shape2D vertex buffers past the Shape2D's lifetime without crashing
  • fixed line color handling in V_BreakLines.
  • run the dynamic light recreation loop before calling the light ticker.
  • fixed: instead of checking gl_lights, better check Level->HasDynamicLights.
  • do not run the dynamic light ticker when lights are switched off.
  • ensure that shadowmap indices only get set when shadowmaps are enabled.
  • fixed file system's zip loader to not strip away a 'filter/' prefix.
  • do not perform shadowmap updates when dynamic lights are disabled.
  • moved the CheckForRestart call one level up so that it is within the Windows code and does not need #ifdefs.
  • delay the restart action from the error pane until after everything has been shut down.
  • use proper XMove for sheet fonts.
  • use original menu spacing for skill and episode menus if all elements are patches.
  • fixed: the software scene drawer must be deleted before calling ST_Endoom.
  • reorder evaluation for 'if' statements to handle the condition first. Otherwise this won't emit errors if a bad condition is used with an empty conditional part.
  • fixed exploding barrel animation duration.
  • fixed two vr_* CVARs not getting archived.
  • dim depleted inventory items in all games, not just Strife.
  • fixed: palette index 0 (transparent) was left uninitialized for BMF fonts.
  • fixed: P_RoughMonsterSearch did not pass the fov parameter to its worker functions.
  • fixed BlockThingsIterator to not reset its list of processed actors when traversing portals.
  • fixed patch version in compatibility implementation of macOS detection
  • destroy stale thinkers after change level failure
  • fixed crash after change level failure
  • SDL2: Properly print white bold text to the screen
  • merged gzdoom-gles2 backend
  • use proper music check in 'idmus' CCMD.
  • voc loader fix.
  • better prefix detection in Zip loader.
  • SDL Vulkan init.
  • disabling of shadowmap management when the feature is off.
  • Extend the changemap command to allow warping to next or nextsecret.
  • fixed crash after fatal error in SDL backend
  • fixed premature destruction of status bar
  • fixed EBlastFlags enum definition
  • Add 'BF_ONLYVISIBLETHINGS' Flag to A_Blast
  • Fixed typo in Heretic light definition.
  • Fix wrong thiswad check for materials too.
  • fix /0 error caused by having a completely black font character. this error was triggered by Return of the Triad.
  • MBF21 beta implementation
  • corrected the NUL checks in S_FindSkinnedSound.
  • moved Doom specific font init code out of the backend.
  • Fixed crash calling ChangeSky() with an invalid texture.
  • added APROP_Soundclass
  • added fallback to the parenthesis glyphs for the braces.
  • font system overhaul.
  • Add some new optional parameters to A_SprayDecal.

New in GZDoom 4.6.1 (Jul 25, 2021)

  • Fixed bug with BishopPuff moving in wrong direction
  • A couple important widepix fixes
  • Fix for "Return to Phobos (return01.wad) has an ancient bug in map E1M2 where the switch to raise the exit bridge doesn't work in versions of Doom past patch 1.2."
  • Add missing break statement in level_compatibility.zs
  • Fix DaggerAlert using FindState incorrectly.
  • Fixed wrong parameter type passed into TryMove here
  • Fixed: Actors did not set the position when spawning a dynamic light.
  • Add 'AddDialogues' in MAPINFO to additively add Strife NPC dialogs without overwriting each other.
  • Let dynamic lights call UpdateLocation instead of just setting their position right after being spawned. This ensures that the position is correct and that everything gets set up properly.
  • Fixed parsing of MAPxx par times in BEX lumps
  • Make sprite shadows ignore float bob
  • Fixed explosive damage radius for clericflame.
  • Fixed permission validation in OptionMenuItemCommand.DoCommand. This was missing the InMenu check like the other critical menu functions.
  • Added detection of macOS 12 Monterey
  • Prevent redundant string copying in Strife conversation parser
  • Fixed impassable exit line in 007ltsd.wad E4M7
  • Fixed initialization of model frames
  • Fix missing border flat on heretic shareware
  • Fixed parsing of 2D vectors in OBJ model loader
  • Added TVector2 constructor from float*
  • Fixed bad type in FxFontCast.
  • Fixed potential crash when sound sequence is destroyed. Level can be unset if sound sequence destruction happens after saved game loading failure
  • Report correct macOS version with older SDKs
  • Add Windows 11 detection
  • Added an OnDestroy method to Shape2D so that its users can explicitly free the data it holds. In this case it is very important to care about management, because this class will hold GPU-side buffers!
  • Prevent appearance of dangling pointers in corpse queue
  • Fixed format specifier compilation warnings
  • Fixed: splashes need the MOVEWITHSECTOR flag.
  • Better sprite shadow control
  • exclude sprites which are not either opaque or use regular blended translucency from casting shadows.
  • exclude wall and flat sprites from casting shadows.
  • In both of these cases the shadow math is unable to produce anything useful that doesn't look off.
  • Fixed: shadow alpha for translucent objects was not correct in the hardware renderer.
  • Tweaked shadow code a bit.
  • let CASTSPRITESHADOW act as an override for render style checks. If this is set we can assume that a shadow is desired regardless of style.
  • reordered code to do the more costly checks only when needed.
  • Fixed brightmap definitions for the SpiderMastermind.
  • Add player setup to simple options menu
  • Do not precache unreferenced textures
  • Added map option to disable shadowmaps. (Prompted by 'Hurt' which has > 4000 lights and runs into both performance issues and unpredictable light selection for the limited amount of shadowmap slots.)
  • Language update

New in GZDoom 4.6.0 (May 23, 2021)

  • Account for portals when spawning missiles in A_FireBullets/A_CustomBulletAttack
  • Fixed return type of Actor.GetCVarString()
  • Update widescreen submodule
  • Strip trailing spaces off the lines for intermission texts.
  • Gave the Raven invulnerability items the BIGPOWERUP flag to ensure proper respawning behavior.
  • Change switch checking back to vanilla order.
  • Use stb-image to handle PNGs with 16 bit color channels.
  • Do not use M_EPI1 and M_EPI2 in any Doom 2 context.
  • Fixed: explicit float to int casts should not emit truncation warnings.
  • Tweaked Hexen's weapon pieces so they do not floatbob into the floor with the hardware renderer.
  • Moved the handling of ending PowerWeaponLevel2 into PlayerPawn.Tick and restored the immediate weapon switch.
  • Never run the shader timer on the 0th frame. fixes this bug: https://forum.zdoom.org/viewtopic.php?f=2&t=62693
  • Backend update from Raze.
  • Fixed time positioning on stat screen.
  • Pick the proper dot for cutting off the extension in ExtractFileBase.
  • Added proper string labels for Doom 2 episodes.
  • Let the CSV parser for the string table handle hex escapes.
  • Added a few missing statusbar constants-
  • Don't display keys on the HUD in deathmatch.
  • Fixed A_CheckTerrain's check for instant death sectors. This was still checking the sector special even though this had been reactored 5 years ago.
  • Fixed: The PrisonPass's TryPickup method did not properly report successful pickup.
  • Make the title music only play once, unless a real demo is successfully played.
  • SDL: Report Vulkan initialization errors
  • Give the first 16 DEHEXTRA states proper content.
  • Make `DI_ALPHAMAPPED` change the style to `STYLE_Shaded` in the status bar drawer
  • Missing key scan code constants added.
  • Screen.ClearScreen and Screen.SetScreenFade script exports.
  • PushV function for int and string arrays.
  • Change `vid_allowtrueultrawide` - -1 allows for any arbitrary ratio for hud aspects, 0 changed to old behavior (max 16:9), 1 changed to old behavior except at 21:9, 1 is now the default.
  • - `vid_allowtrueultrawide` is now placed in game-specific config, instead of global.
  • Don't print the weapon tag if the game is paused
  • Allow settable render styles for status bar drawing functions DrawTexture, DrawImage and DrawString
  • Made OptionMenuSliderBase::IsGrayed virtual
  • Default Heretic's, Hexen's and Strife's default screen wipe styles to match their original counterparts.
  • Add sprite shadows for the hardware renderer
  • Add sprite shadows for the software renderer
  • Expose level_info_t to scripting + helper functions.
  • Allow ACS SpawnDecal zoffset and distance args to be fixed point
  • Add Polyobj_StopSound special
  • Handle empty command names when getting key binds
  • Don't warn about UDMF comments or user fields
  • Allow AddPoly for 2D drawer without index buffer, treating the data as a list of triangles.
  • Filter out macOS resource fork data when loading Zips.
  • Added a A_SetFriendly function
  • Remove Vulkan button on startup if Vulkan compilation is disabled
  • Fix crash with fog and software light modes.
  • Removed depthClamp requirement (note: portals will not render correctly on such devices)
  • Set libADL and libOPN bank settings (only) to game specific
  • A software implementation for gamma, brightness, contrast and saturation effects on SoftPoly. Based on original code by @dpjudas, thanks for the code.
  • Bug fix in invulnerability in Doom Software Render Mode and True Color SW Render in SoftPoly.
  • Don't let the game start if the saved game passed to -loadgame is invalid. the - improved multithreaded rendering for the software renderer.
  • Make i_timescale cvar virtual. Changing i_timescale in a netgame would cause its callback to recurse
  • Into itself infinitely. CVAR_VIRTUAL prevents this.
  • Fixed crash with voodoo dolls in MP after players quit the game.
  • Account for KEEPDEPLETED flag when destroying items with InterHubAmount of 0 upon leaving a level
  • Fix camera texture aspect ratio in hardware renderer
  • Add missing tag for Strife's KneelingGuy.
  • New letter И for Strife
  • Add GetCharacterName() to retrieve an NPC's name as defined in its dialogue script, if it exists. Otherwise it will just return the same output as GetTag().
  • Add tag properties to Strife's enemies.
  • Removed config updates for pre-GZDoom versions of ZDoom.
  • Adapt mod_dumb_mastervolume to the increased default volume in ZMusic.
  • Do not sort level names in the statistics output when saving. Instead do this when creating the data to avoid trashing manual edits. The old sorter resorted all data loaded from the old file as well.
  • Print a message if saving the statistics file fails.
  • Implemented replay gain calculation and management. This is done entirely on the streamed sound data, unlike the old relative volume which uses the backend's volume setting.
  • Show subtitles for the Entity's greeting lines in Strife.
  • Fix crash with wind effect on special water sectors.
  • Add SetSubtitleNumber(int num, str sound) ACS function. Works exactly like its ZScript counterpart. The activator of the script must be a player.
  • Bumped CMake version to 3.1.0 in all projects to reduce warning spam in recent versions.
  • Escape double quotes in Cocoa IWAD picker's extra arguments
  • Fix random crash when travelling between hub maps in multiplayer.
  • Ported Eternity's Line_QuickPortal
  • Fixed memory leak in UDMF loader.
  • DrawRotated function for status bar.
  • Fix portals not working in softpoly (#1323)
  • Add a null check in PlayerPawn::CheckFOV
  • Added m_swapbuttons CVAR for the Windows RawInput and DirectInput backends. The problem I discovered is that these backends do not respect the GUI-side system setting for swapping the buttons, so this needs to be done in-application so that swapped buttons can behave the same in the menu and the game.
  • Don't make the switch that reveals the computer core in Strife MAP15 to be repeatable.
  • Fix: MBF's A_Spawn DEH codepointer should use misc2 as spawnheight, not distance
  • Adjust defaults for DEHEXTRA states to match other ports:
  • Properly abort the program if the SDL window can't be created at all (#1296)
  • Dynamic number of models per frame instead of a hard limit of four. (#1298)
  • Made Strife NPC's dialog voice audible for all players.
  • Fix player not being able to talk to a Strife NPC during netplay, if another player talked to that NPC first. (#1312)
  • Restored sound-related developer messages
  • SoftPoly: Fixed the md3 models, you can now correctly display the frame of the model, in addition, interpolation is added to the model.
  • Add missing ZScript constants for the Strife targeter PSprite layers
  • SoftPoly: Fixed the screen turning white with invulnerability sphere in Doom and in Heretic avoiding color errors in some pixels when activating the "ring of invincibility". (#1307)
  • Added a new intrinsic for class pointers to check if the class is abstract (#1308)
  • Remove doom2 from the wadsmoosh filter in iwadinfo
  • Fixed sprites were not affected by dynamic lights on SoftPoly.
  • Fixed missing 'player left the game' message
  • Softpoiy: Fix black wall sprites
  • Softpoiy: Fix line portal clipping bug
  • Add `-noautoexec` command line parameter to disable the execution of autoexec.cfg files
  • Add Pi and some other constants to ZScript (#1304)
  • Fix Additive Shaded renderstyle for UDMF things bugged
  • Backend update from Raze.
  • Another wallsprite crash fix: https://forum.zdoom.org/viewtopic.php?f=56&t=71450
  • Add support for zero size buffers as the hwrenderer uses that!
  • Fix crash when trying to open unreadable IWAD files
  • Fix crash when following symlinks to nonexistent IWAD files
  • Fixed incorrect extension of overridden function prototype. Prototype of overridden function with optional argument(s) missing could extend unrelated prototype of previously defined function when their arguments and return value(s) match
  • Fix dancing sprites regression
  • Fixed uninitialized global rolloff in sound engine. Depending on SNDINFO definitions, type of global rolloff could left uninitialized, and linear rolloff might be treated as logarithmic
  • Fixed: FTextureManager::ReplaceTexture did not calculate the upscale flags.
  • Add "hidepartimes" MAPINFO/GameInfo property
  • Hitscan attacks can now hit SPECTRAL actors if the hitscan puff has SPECTRAL flag set
  • Add progress bar for SDL backend
  • Fixed "Messages ON" not being printed.
  • Added initialization of linked sectors. Resizing of linked sectors arrays during serialization could lead to processing of pointers to junk data
  • Fixed nodes were not rebuilt after loading broken extended nodes.
  • Vid_aspect is now set to change to 21:9's ACTUAL aspect - 64:27
  • Screen elements now scale to 64:27 properly. to restore classic behavior, set cvar `vid_allowtrueultrawide` to false
  • Fix ScriptCall missing default arguments
  • Add alternate "Full" mode for PowerIronFeet that prevents leaky damage.
  • Fix ALWAYSFAST actor flag.
  • Side By Side Letterbox Display mode (#1255)
  • Add sv_instantreaction dmflag
  • Fixed: Monster reaction time was always zero with fast monsters and not just on nightmare.
  • Fixed incorrect sound definition for DSMANATK in Dehacked.
  • Fix the "Max" constant being incorrect for unsigned int types.
  • Add new detection hashes for newer versions of nerve.wad
  • Update $musicalias to allow iwad remapping when used from game_support.pk3
  • Add music aliases for the unity version of Doom/Doom2 for digitized game soundtrack
  • Modify Shape2D so that it manages its own vertex buffer rather than using the draw list (#1249)
  • Add support for DEHEXTRA's extended sound range (#1258)
  • Fix IfItem amount not being checked (#1262)
  • Fix MAPINFO definitions for "enableskyboxao"
  • Always allow skyboxes by default
  • Add option to disable skyboxes through mapinfo
  • Disable AO for skybox portals (can be forced back with MAPINFO flag).
  • Add autodetection for GOG's releases of Heretic and Hexen. (#1259)
  • Fix model normals being distorted by MODELDEF scaling.
  • Added check for M_IsAnimated to TryRunTics.
  • Added the option to look for music by using a truncated 8-character variant of the given name.
  • Fixed: strbin did not check for a terminating 0-character right after an escaping backslash.
  • Allow targeting ARM64 on Windows
  • Fix keyboard repeat events not being sent to menus if TranslateKeyboardEvents is true
  • Fixed: RandomSpawner spawning another RandomSpawner spawning a missile could result in the second RandomSpawner being erroneously destroyed.
  • Simplify manual sound rolloff handling
  • Change all optional game support archive loaders to scan the program folder
  • Allow drawing text using fonts with an external translation
  • Fixed: IceGuyFX2 set its owner too late.
  • Implement slider background color change - https://forum.zdoom.org/viewtopic.php?f=15&t=70616
  • Fixed: If AbsorbDamage resulted in an item having been destroyed, the following items in the inventory chain were not processed.
  • Fixed weapon bob jittering.
  • Fix missing SKILLP property in zscript code
  • Do not keep impact decal that fails to stick to a wall
  • Fixed inverted menu setting for 'Disable menu clean scaling'
  • Fixed crash when drawing status bar on automap
  • Fixed issue with parsing useowncoloradd UDMF flags

New in GZDoom 4.5.0 (Nov 2, 2020)

  • For all of Doom's fullscreen images there's now widescreen versions provided. The other games are still being worked on and will be added later when they become available. All new images were created by Nash - this does not use any of the versions from the Unity port.
  • A simplified options menu is now available for quick setup of the important settings.
  • New keybindings presets. Users can now choose between the classic layout and a WASD-based one
  • Menu and intermission screen now scale to the original Doom.exe's layout by default.
  • Major additions to the menu system - animated menu transitions, image slideshows and fixed size menus can now be created.
  • The console now uses the border flat as default background instead of the titlepic.
  • It is now possible to fully quit the fullscreen console and get back to the title loop.
  • Various enhancements and fixes for ZScript.
  • Interpolate positions and angles in the automap for smoother appearance
  • Added $PitchSet for SNDINFO.
  • Allow indirections in the string table by prefixing the language string with '$$' the remaining text is interpreted as another string label to resolve.
  • Optimization of the patch texture checker - do not read in the entire file if checking the initial header is sufficient for rejecting it. This can speed up loading of large mods quite significantly.
  • MIDS-format MIDI support
  • OPUS support, courtesy of an updated libsndfile.
  • libADL/libOPN update

New in GZDoom 4.4.2 (Jun 28, 2020)

  • Fixed: Inventory items that are terminated by GoAwayAndDie must be removed from the blockmap and sector lists.
  • Added missing target check to A_RadiusDamageSelf.
  • Use a full ClearScreen when drawing fullscreen images.
  • Fix crash in nullptr access to DFrameBuffer object 'screen' if it is uninitialized
  • Add "restart" button to error pane in Windows
  • Add keyboard accelerator shortcuts to many Windows-specific dialogs
  • Fixed some issues with setup parts for ZScript in the wrong place.
  • Let blastradius work without an effect actor.
  • Fixed: AActor::GetModifiedDamage must account for the inventory items to get destroyed in its scripted subfunctions.
  • Fixed: FGameTexture's GlowHeight was not initialized.
  • Fixed: the attenuation flag wasn't passed to the shader if shadowmaps were disabled.
  • Fixed bad range check in shadowmap code.
  • Fixed: check for bad sidedefs was not taking into account sidedef compression.
  • Backend update from Raze.
  • Fixed: The scale vector for detail maps was not passed to the shader.
  • Fixed: The flags for texture colorization were not passed to the backend.
  • Fixed: The scissor rectangle must be clipped to the upper left edge of the screen.
  • Fix missing terminator in vk_shader.cpp on #ifdef guarded line.
  • Made the new Build light mode operational

New in GZDoom 4.4.1 (Jun 12, 2020)

  • Added a CCMD that lists all CVARS which don't have a description.
  • Mapped "Smooth mouse" back to m_filter CVAR and removed smooth_mouse.
  • Fix compilation on DragonFly BSD
  • Fixed code that deternines when to upscale a texture.
  • Fixed fallback lookup for multipatch textures referencing themselves as patch.
  • Fixed the burn shader.
  • Do not allow playing sounds during PlayerFinishLevel.
  • Added 3 more texture samplers to the shaders to compensate for the now always occupied slots for brightmap, glow and detail.
  • Fixed calculation of allocated memory for garbage collection
  • Since we already got lots of CVAR descriptions from the menu's content, let's use that as CVAR description if none is explicitly provided.
  • Fixed bad bit operations when calculating the base palette remap.
  • Fixed: The mutipatch texture builder did not set the source lump.
  • Fixed: When reopening a lump, the full file name must be used.
  • Fixed crash with texture upscaling in the truecolor software renderer.
  • Fixed crash rendering 3D floors without ceiling or floor textures in software.
  • Fixed wrong MINDEMOVERSION which was committed in 95f4479
  • Fix Bag of Holding not increasing Firemace ammo capacity
  • Fixed compilation of non-x86 targets

New in GZDoom 4.4.0 (Jun 8, 2020)

  • Hotfix: LineTrace now reports the correct number of portal crossings.
  • fixed incomplete disabling of number field menu option
  • tighten rules for action functions called from Decorate
  • fixed: The full dotted lump filter string was never used.
  • fixed (un)morphing of more than one actor from ACS
  • fixed setup of JIT functions that require extra frame space
  • make various getter and pure-math methods clearscope, and where applicable, const
  • fixed offsets for hires replacements of already scaled textures.
  • Fix compilation on NetBSD
  • manually merged PR for kill count in Requiem MAP23.
  • there is no mace ammo in the bag of holding.
  • fixed texture sampler generation in the Vulkan backend.
  • added per pixel lighting for decals.
  • fixed incorrect offsets for textures in the hires/ folder.
  • advanced coordinate control for overlays over DTA_Fullscreen images.
  • fixed: the last frame of the intermission screen wasn't rendered.
  • added support for replacing the intermission backgrounds in Doom 1 with widescreen images.
  • fixed font selection on intermission screen.
  • fixed crash with texture upscaling in the software renderer.
  • Add option to disable SDL joystick support.
  • added a compatibility option for a bad teleporter in the final Strife map.
  • redid mouse control for the conversation menu.
  • fixed some double to float conversion warnings.
  • enabled CVAR descriptions.
  • Strife dynamic light tweaks by ReaperAA.
  • fixed: vertically mirrored textures should not be subjected to empty space optimizations because the algorithm cannot deal with the inverted case.
  • fixed: the 3D floor processing code in the renderer did not restore the render style after finishing.
  • made some changes so that material definitions can properly check automatic layers when determining their material type.
  • Fixed OpenAL regression with looping sounds with playing length 0.
  • Allow dialogs to be displayed on other Unix-like OSs
  • fixed floorclipping checks for 3D floors.
  • Strip out any color escape sequences before setting a window title.
  • reject all 0-special lines for activation.
  • use modulo, not bitwise and-ing to check the damage delay for terrain based damage.
  • fixed: Copying a texture's size must also copy the offset.
  • fixed scale setup for multipatch textures.
  • fixed missing custom shader setup in cases where a shader got used more than once.
  • make sure that incomplete multipatch textures are technically complete.
  • Add a cvar to control weapon bobbing while firing
  • Fixed crash on maps with out of range sidedef and sector numbers, adapted from PRBoom.
  • removed redundant TextureFilterChanged method from DFrameBuffer.
  • texture sampler cleanup.
  • don't let CHANF_AUTO hijack other channels.
  • more descriptive message for server CVAR change attempt in netgame
  • removed entry for non-functional linear tonemap.
  • fixed fullscreen toggle via shortcut
  • fixed space calculations for oversized episode and skill menus.
  • fixed: The size parameters for automap sprites are floats, so they need the matching tag.
  • fixed setup for translated textures in Vulkan.
  • Single image fonts do not use translations.
  • fixed: texture upscaling was disabled by default.
  • fixed shader building.
  • fixed: V_GetFont must load the translations once the game has been set up.
  • fixed: TRF_ALLACTORS did not consider actors without any flag being set.
  • added missing range check to section code.
  • fixed use of Powerup.Strength in PowerInvisibility.
  • fixed bad Heretic light definitions.
  • fixed missing sound for Polyobj_MoveTo.
  • Add mapinfo option to disable merging of identical pickup messages on same tic
  • attenuated lights for Strife.
  • fix "'Dictionary' is freed outside the GC process" warning
  • fixed map things erroneously treated as polyobject anchors/spots
  • restored warning about missing aiming camera target
  • Fixed an issue where multiple invulnerability powerups could cancel each other out from just one expiring.
  • export common formulae to functions instead of copy-pasting them
  • screen bevel now enlarges also when screenblocks

New in GZDoom 4.3.3 (Jan 24, 2020)

  • Fixed resetting of music volume after closing dialogue
  • Exposed Level.MusicVolume to ZScript
  • Fixed calling a function on string CVar
  • Added ability to filter VM disassembly dump
  • Add check for unity version of Nerve.wad
  • Infrastructure in place in case Nerve.wad changes again, this can be extended
  • Customized invulnerability colormap does not interfere with Powerup.ColorMap
  • Precache a few sounds being referenced in common game code.
  • Define misc/secret for Hexen, too. By now there are some mods defining secrets for the game so this sound should be present there.
  • Implement special colormap support for softpoly
  • Softpoly: Fix broken fixed camera light for walls
  • Make nosave standalone CVar flag, alongside server and user
  • Implemented screenshots in softpoly backend

New in GZDoom 4.3.2 (Jan 21, 2020)

  • Fixed Linux and macOS implementations of I_FindAttr()
  • Implement player setup background by Enjay
  • Fixed uninitialized variable in OPL song. Mono streams could be erroneously treated as stereo, doubling their playback speed
  • Compatibility workaround for using Scroll_Texture_Model with a line id of 0.
  • Store CVARs non-destructively in savegames.
  • Added missing render style constants to ZScript.
  • Fixed A_PlaySound() called from Dehacked
  • Fixed: The directory scanner for reading a directory into the WAD file system and ScanDirectory were not Unicode capable on Windows.
  • Added ML_NOSKYWALLS and ML_DRAWFULLHEIGHT
  • Restored old values for CHAN_... constants
  • Add support for new Bethesda.Net Unity Edition wads
  • Added workaround for GLSL noise functions on macOS
  • Added ability to use static SDL2 library
  • Fixed invalid context warnings with Cocoa backend
  • Removed obsolete softpoly render modes from menu
  • Fixed resolving of music aliases with full filenames
  • Fixed erroneous override of default language strings

New in GZDoom 4.3.1 (Jan 13, 2020)

  • Fixes a couple of critical issues in 4.3.0 - moves colorization feature to correct file (gldefs) and disables default blocks in mixins since they currently do not work.

New in GZDoom 4.2.4 (Nov 4, 2019)

  • Fixed stretching for 256 and 240 pixels tall skies in software.
  • fixed broken walkthrough of Restoring Deimos MAP07
  • Fixed a bug in the flagdef processing code.
  • adjusted collision detection for item pickups. Use vanilla condition for a thing with MF_SPECIAL flag to fix inability to grab it when item's top is at the same height as sector's floor from it can be picked up
  • fixed localization support for intermission texts
  • fixed radius attack that may inflict damage twice
  • sort CVAR output in config alphabetically instead of randomly dumping them in their internal order.
  • Fixed ZScript's Screen.DrawLine using the wrong color when drawing pure black.
  • fixed missing frames for Hexen's fighter's axe attack without mana
  • fixed usage of uninitialized object in BlockLinesIterator
  • removed hardcoded width limit for screenshots
  • Fixed dynamic arrays as function arguments.
  • added Visual Studio debugger visualization for several types
  • do not accept read-only variable as out argument
  • fixed variable's stack offset for implicit dynarray clearing
  • Fixed Vector2/3 out parameters in the ZScript compiler.
  • added explicit clearing of global VM stack. When exception is thrown from JITed code, VM stask isn't cleared during unwinding.
  • fixed typo with D'Sparil's serpent attack in lights.pk3. https://forum.zdoom.org/viewtopic.php?f=2&t=66177
  • fixed bad application of translucency in the software renderer
  • Scythe MAP22 Compatibility fix

New in GZDoom 4.2.1 (Sep 12, 2019)

  • Dutch translation
  • give P_ExplodeMissile a damage type when being called from P_Damage…
  • rename sprite names with '^' in the hires namespace.
  • compatibility option for Daedalus MAP19 which depends onan old scriptwait implementation.
  • added dlg_vgafont and log_vgafont to the menu.
  • add empty line in menu after standard options
  • Make the build work with fluidsynth 2.x.
  • Level compatibility additions for Scythe 2 and Hell Revealed
  • fixed: saving game to read-only file was erroneously reported as success
  • Add current, max and average velocity as stat (#912)
  • added ability to specify deprecation messages in ZScript
  • GME update with bug-fixes
  • Vulkan: release any references to command buffer when flushed
  • fixed crash on parsing bad hex number
  • Let Hexen Cleric and Mage use unique health chains
  • Allow custom status bars to override notification and centered message display
  • Improve crosshair health color to be more informative
  • Converted keyboard turnspeeds into global CVars
  • added obituary fallbacks for actors that do not have any defined.
  • fixed bad default alpha for 3D floors.
  • fixed attached dynamic light setup.
  • added check for multiple parsing of the same MAPINFO
  • exposed xBRZ scaler options as CVARs
  • updated xBRZ scaler to version 1.7

New in GZDoom 4.2.0 (Aug 16, 2019)

  • Highlights:
  • Restored original vanilla behavior of Lost Souls' charging attack
  • exposed Append() method to ZScript dynamic array
  • fixed handling of the "ouch" face.
  • fixed an inconsistency with missiles bouncing off actors.
  • added option to print a map author's name on the summary screen
  • Adds option to use a rotation of quicksaves instead of having one quicksave slot that needs to be manually created.
  • allow switching the Strife conversation screen to the VGA font for all languages by a CVAR.
  • Added A_SoundPitch and an optional pitch parameter to A_PlaySound and S_Sound.
  • Hacx and Harmony now support localization
  • new supported languages: Czech, Finnish, Japanese, Polish and Serbian.
  • RenderUnderlay feature.
  • Attachable dynamic lights with ZScript or DECORATE.
  • Details:
  • fix a couple issues with sigil.wad:
  • e5m2: floating skulls disappear on lower skill levels
  • e5m4: the platform with the baron of hell that led to the invulnerability secret had a missing texture
  • fixed the extremely long standing bug that Lost Souls didn't reacquire their target when slamming into something.
  • fixed: The OriginalSmallFont must always be created, even when the actual SmallFont is not the IWAD default.
  • exposed Append() method to ZScript dynamic array
  • fixed: Do not use BasicArmor's save percentage when no armor present.
  • do not blur the background for portrait-less conversations.
  • fixed bad texture canvas checks when in truecolor software rendering.
  • fixed: in order to ensure that all font characters are of texture type FontChar it is necessary to clone the texture instead of changing its use type.
  • fixed: The frozen state was not reset when the global level variable was reset.
  • fixed handling of the "ouch" face.
  • fixed an inconsistency with missiles bouncing off actors.
  • fixed incorrect write barrier in sound sequence code.
  • fixed: Takedown of an expired HUD message did not properly detach it from the list.
  • call vkDeviceWaitIdle before RAII tears down buffers
  • fixed mouse coordinate checks when using the generic VGA font with Strife conversations.
  • Made reverb editor localizable
  • fixed buggy ArmorFactor behavior when set to a value other than 1.0
  • recreate Vulkan swapchain in case of surface lost error
  • added option to print a map author's name on the summary screen
  • added an option to always display the log and the subtitles with the generic font.
  • updated bzip2 to version 1.0.8
  • Adds option to use a rotation of quicksaves instead of having one quicksave slot that needs to be manually created.
  • allow switching the Strife conversation screen to the VGA font for all languages by a CVAR.
  • added ability to specify display duration of subtitles
  • fixed: The numcommands value in A_KoraxCommand needs to be decremented by one because the max parameter of the random function is inclusive.
  • Added A_SoundPitch and an optional pitch parameter to A_PlaySound and S_Sound.
  • fixed crash on player unmorph after falling death
  • for the map name on the automap, fall back to the original SmallFont if the actual one cannot print it.
  • use proper interface calls to give the initial BasicArmor to the player.
  • added the two missing subtitle texts for Strife.
  • added PSprite.bMirror flag to ZScript class definition
  • the fallback BigFont now can also be loaded by IWADs which declare themselves as GAME_Heretic or GAME_Hexen.
  • add +ZDOOMTRANS to BFGExtra in order to force classic transparency per user setting.
  • renamed zd_extra.pk3 to game_support.pk3
  • setup Harmony localization.
  • moved iwadinfo.txt to zd_extra.pk3. This removes the stock IWAD definitions for custom games that distribute the engine along with their data, so that it doesn't pick up on Steam and GOG installations and shows an inappropriate IWAD picker.
  • added the missing WISLASH for Hacx.
  • allow setting the font used for the status screen's content text.
  • adjustments for the level summary screen.
  • added Hacx localization support.
  • dynamic light definitions for Hacx.
  • fixed: The countdown for the subtitles display was never counted down so the messages remained forever.
  • Shape2D drawing will gracefully abort the VM on any out of bounds access.
  • added validation for presence of drop item classes
  • do not set crouch player sprites on voodoo dolls
  • fixed crash on starting ACS script without level
  • fixed LevelLocals.isFrozen() return value with JIT disabled
  • fixed missing dive and surface player sounds
  • Added RenderUnderlay.
  • added validation of LevelCompatibility.Apply() signature
  • User definable dynamic lights
  • updated bzip2 to version 1.0.7
  • added detection of macOS Catalina
  • fixed: endgame menu no longer resets player's userinfo
  • fixed incorrect implementation of "episode = clear" in UMAPINFO.
  • fixed incomplete parsing of UMAPINFO when map already exists
  • fixed missing skill menu for episodes defined by UMAPINFO
  • fixed: all UMAPINFO definitions were applied to default map slot
  • give UMAPINFO the ability to disable cluster-based exit texts.
  • restored indication of console scrolling
  • made console cursor fill whole character box
  • switched to unconditional level exit in scriptified actors
  • exported unconditional level exit to ZScript
  • compat_pointonline for doom2 map14
  • Fixed "if (!(lhs ~== rhs))" breaking with vectors.
  • localize custom menu titles in option search results
  • add nullptr checks for double-frame model interpolation
  • fixed: light mode from mapinfo had no effect
  • delay postprocess texture destruction until the end of the frame
  • fix wipe screen when using -loadgame
  • fixed crash on loading map in Hexen format without any nodes
  • added a linear transformation system to Shape2D so that things like rotations and scales can be changed without having to clear and push a large amount of data

New in GZDoom 4.1.3 (Jun 10, 2019)

  • Highlights:
  • bug fixes for both zscript and vulkan (the vulkan renderer is pretty much complete at this point)
  • added native double round(double) function
  • added a crosshair on/off toggle
  • cl_blockcheats 2 blocks cheats without showing any messages, useful for streamers who happen to be mappers/modders/etc
  • Details:
  • cleaned up SDL mouse event handling
  • Right/middle clicking no longer cancels out the mouse motion events
  • The events for the side mouse buttons (EV_GUI_BackButtonDown/Up, EV_GUI_FwdButtonDown/Up) were never fired
  • The EV_GUI_WheelRight/Left events were never fired
  • The key bindings for mouse buttons above 3 (from 4-8) were broken - pressing MOUSE4 would bind to MOUSE6, for example
  • fixed access to wrong event data in SDL backend - Wrong button state event data were read on mouse motion
  • report implicitly initialized variable in code generator once
  • added implicit initialization of reused register variables in ZScript
  • added null check for self pointer before calling a native function
  • removed erroneous assignment of dialog reply
  • language update
  • check for presence of fonts in message box menu
  • fix loadgame crash
  • fixed hires texture lookup in Doomsday style .pk3
  • fixed the write barriers for the HUD message linked list. To ensure that no broken relations occur, any change in the list must be handled by a write barrier, not just the single message that gets added.
  • FXAA_DISCARD should never be enabled. It only works when the output framebuffer is the same as the original.
  • fixed PlaySpawnSound call in A_ThrowGrenade
  • Really fixed arrays of dynarrays this time.
  • Cephes code is released under BSD license
  • implemented GPU vendor string assingment in Vulkan backend
  • added a third state for cl_blockcheats. ==2 now blocks them silently.
  • added native double round(double) function
  • reset internal console state on clear CCMD 'last line needs update' flag cannot be set when console is empty as there are no lines at all in this case
  • Fixed uninitialized variable in case GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS does not exist. Old graphics (Intel Sandybridge Mobile, GL 3.0 Mesa) do not support this, therefore most of the time RFL_SHADER_STORAGE_BUFFER wasn't unset (I found no consequence of this on my machine, but better safe than sorry). Found out by Valgrind.
  • Fixed a buffer overflow with Timidity++ when playing Sigil e5m5 music.
  • Fix OBJ face normal direction
  • Inclusion of check symbol cmake's module.
  • Check for execinfo.h and add libexecinfo if needed Some systems (e.g. musl) do not have execinfo.h header. Check if libexecinfo (library that provides execinfo.h header and its functions) is installed in the system, and add its linker flag if needed.
  • Add support for musl-fts library
  • fixed fillSimplePoly for indexed data. On OpenGL this merely caused some visual glitches on the cheat automap - but the bad data in the buffer can make Vulkan abort entirely.
  • fixed crash when loading a saved game with unknown class During serialization, when map shutdown because of unknown class stored inside saved game may occur, level member is not assigned yet to already spawned thinkers
  • adjusted condition for ZScript global variable deprecation warning The message is always printed for any use of deprecated global variable If such variable is accessed inside a deprecated function from a core script lump, the message is printed only when verbosity level is set to highest
  • fixed missing deprecation warnings for ZScript global variables
  • fixed: version wasn't set for ZScript global variables
  • fixed code generation for ternary operator with vector result types
  • fixed crash on message output during decorate parsing Script position is now initialized at the very beginning of decorate parsing process Script position no longer contains uninitialized file name
  • Improved SMALLFONT letter Ч for Doom In its past appearance, the letter was based on the number 4, which looks inconsistent among all letters. This new one is a modified Y.
  • fixed conversation links with pages referenced by name
  • fixed 'Pause by ' message in multiplayer
  • fixed wrong native call for Actor.Vec2Offset()
  • fixed character position assignment for multi-lump fonts
  • Fixing crash when loaded module, using proper function liberate them.
  • fixed loading of 32-bit TGA textures with alpha channel
  • removed array length() function from shadowmap shader
  • create a new error class for vulkan errors as they are only recoverable during initialization (unlike CRecoverableError which is recoverable during normal processing)
  • improve vulkan errors by including the status code returned by vulkan if they fail
  • add some debugging information for GZSDF pagenames feature
  • do not pass TObjPtr instances as ScriptUtil::Exec() arguments There was no read barrier inserted for AActor object while it's a subject of garbage collection Pointer stored in TObjPtr was reinterpreted as void* because of vararg function
  • fixed bad statnum in Light_Stop.
  • fixed text color setup for added console message.
  • allow certain replacements to be valid for CanPrint The Romanian letters with comma below, the second Greek Sigma variant and a few special Cyrillic letters have replacements that should not result in rejection.
  • don't run the custom shaders twice on screenshots
  • apply present shader on screenshots
  • made the colorset names and the texts in the color picker localizable.
  • fixed erroneous texture mipmapping in Vulkan render
  • implemented subtitle display for Blackbird's voiceover messages.
  • implemented subtitles for intermission slideshows.
  • changed menu scaling so that on 1366x768 a factor of 2 gets used.
  • renamed misplaced characters.
  • added European Portuguese to the menu. This is sufficiently complete with only some intermission texts and the Strife dialogues falling back to the Brazilian version.
  • Raven smallfont fixes
  • Force STATIC for internal GZDoom libraries
  • improved control over MoltenVK logging capabilities
  • added missing Latin characters to the Raven small font.
  • made "netevent cannot be used outside of a map" message a warning
  • added a crosshair on/off toggle
  • use one render pass for the entire scene or until postprocess or command buffer flushing forces it to end
  • avoid creating a new render pass if a pipeline bind will suffice
  • centralize how image transitions are done in the vulkan backend
  • transition scene images used for the screenshot to color attachment optimal before rendering to them

New in GZDoom 4.1.2 (May 17, 2019)

  • always apply vid_maxfps even when vid_vsync is on. Some users may override the application in their driver control panel and this helps stabilize their fps if they did it this way
  • SIMPLE is never ever defined for main.fp
  • fix stencil test not being active when applying SSAO to portals
  • fix some vulkan warnings
  • removed useless assertions
  • do not show par time when it's zero
  • fix validation error for shader input not declared by main.vp
  • fix model chasecam crash
  • Fixes for Door_AnimatedClose (#838)
  • fixed: The software renderer was accessing the global viewpoint in several places. Aside from using incorrect values this could crash the renderer if used in the very first rendering frame because the software renderer always operates on a copy.
  • fixed crash when VM exception is raised during entering a level
  • added missing newline to scriptstat CCMD output
  • fix wrong screenshot gamma
  • made DUMB library always static DUMB uses dumb_decode_vorbis() function from the main executable, so it failed to link as a dynamic library
  • made setting actor TID more explicit
  • Intel on Linux used the footnote in the standard saying a descriptor pool can become fragmented (thanks guys!)
  • fix command buffer invalidation bug when DynamicSet is updated
  • add fragment shader texture reading as an additional subpass external dependency
  • add vk_debug_callstack for getting the location where a vulkan warning or error happens
  • fix burn crash on vulkan
  • only write the warning if r_multithreaded has its default value
  • Write out a warning if std::thread::hardware_concurrency returns zero.
  • If the number of cores cannot be determined, turn of multithreading in the software renderer as it is most likely a low end system
  • added handling of GLSL noise() functions to Vulkan backend
  • removed obsolete snd_flipstereo CVAR
  • added missing compat flag CVAR for Strife railing
  • Greek Sigma character fallback The lowercase Sigma letter in Greek has two different forms (σ and ς), which changes depending on its placement in a word, but in uppercase and smallcaps contexts, it only has one look regardless of word positioning. If the character ς is missing, it should fall back to σ.
  • Accented Greek characters for Doom
  • fixed output of software renderers with Vulkan backend
  • moved greek characters to proper location
  • OpenBSD build fix. As FreeBSD, does not have malloc.h aligned_alloc stricly available since C++17/C11, using the local impl.
  • Fixed letter Ξ
  • Greek characters for Doom
  • fix mirror effect shader
  • fix wrong fog color used for ssao when using multisampling
  • move camtex depthstencil to VkHardwareTexture
  • Fix build on FreeBSD (#829) On FreeBSD malloc.h is deprecated. is needed for iswalpha.
  • rendering to texture requires a separate depth/stencil image as the image used by the main view may be using multisampling

New in GZDoom 4.1.1 (May 9, 2019)

  • Highlights:
  • bug fixes and vulkan improvements
  • Details:
  • fixed deprecation warnings in core scripts
  • the light storage buffer is not dynamic
  • made Vulkan Cocoa view opaque
  • tuned internal MoltenVK settings for better performance
  • postponed destruction of Vulkan resources
  • fix vsync off with vulkan
  • release staging buffer after the frame it was used in
  • make the VkHardwareTexture and VKBuffer linked lists private
  • fix shutdown crash due to GetVulkanFrameBuffer returning null when VulkanFrameBuffer is destroyed
  • Fixed offsets for Esperanto letters.
  • add VulkanQueryPool and QueryPoolBuilder
  • add VulkanQueryPool::getResults
  • implement stat gpu on vulkan and fix it on opengl
  • use the exact sRGB->linear transfer function in HDR mode as the 2.2 gamma approximation is visibly inaccurate in this case
  • fixed saved game thumbnails generation with Vulkan renderer
  • fixed 'I' to 'i' upper-to-lower mapping
  • fix vulkan crash when changing resolution when using the software renderer
  • VMA_MEMORY_USAGE_CPU_TO_GPU does not require VK_MEMORY_PROPERTY_HOST_COHERENT_BIT to bet set. Current implementation requires this flag as vkFlushMappedMemoryRanges is never called.
  • call SetActiveRenderTarget before drawing the software renderer scene
  • fix vkGetQueryPoolResults: parameter dataSize must be greater than 0
  • brought back text length check for 'type on' HUD message
  • improved handling of HUDMSG_TYPEON
  • Fixed random generation of friendly obituaries

New in GZDoom 4.1.0 (Apr 30, 2019)

  • workaround buggy preprocessor in old AMD OpenGL drivers
  • fix bloom pass regression
  • fixed scale calculations for option menus.
  • implement custom post process shaders for vulkan backend
  • improve error handling during vulkan initialization
  • fixed inverted logic for displaying the generic log in Strife.

New in GZDoom 4.0.0 (Apr 10, 2019)

  • Highlights:
  • Vulkan released in its alpha stages. Use "+vid_backend 0" on the command line to activate it. VERY IMPORTANT! Vulkan is unfinished and has several issues. You will likely crash. It works well in vanilla Doom without any mods, and will work with mods that don't use models or shaders - but any mods that have these things will likely cause GZDoom to crash. You will have to switch back to OpenGL to play these mods. ("+vid_backend 1")
  • Localization: GZDoom has been translated to several languages, with more to come soon. Please see the following two threads if you wish to help: [1] [2]
  • Scaling has been changed. GZDoom now runs at a minimum of 640x400. An extra mode - 960x600 - has been added to replace the lost 320x200 one.
  • Internal code restructuring to agnostisize level structures.
  • add 'cl_blockcheats' - useful for people who use debugging keys, allows a user to consciously turn off cheats without affecting the server
  • Punctuated the input strings in UpperCamelCase format, improving its appearance in the menu for upper/lowercase capable fonts
  • 'wait' console commands no longer execute inside the level, and can run during intermissions and outside the game
  • moved controls to submenus in "Customize Controls" menu
  • Implement page string names for dialog lumps
  • did a bit of cleanup on the option menus by regrouping some settings, especially splitting out of the Hardware Rendering Options menu into submenus.
  • ZScript:
  • scriptified P_CalcHeight. This was the only code using the ViewBob member variable. This also moves the range check for this variable to its application, because a badly behaved mod can just as easily change it at run time instead of just setting an absurdly large value in the class definition.
  • scriptified APlayerPawn's DamageFade handling.
  • scriptified A_SkullPop and ObtainInventory. These were the last relevant items to access PlayerPawn.InvFirst.
  • scriptified useflechette CCMD's item finding code.
  • scriptified the remaining PlayerPawn methods.
  • exported all native components of APlayerPawn.
  • Added Z + camera roll relativity for A_QuakeEx's QF_RELATIVE flag.
  • Added inflictor, source and flag parameters to GetModifiedDamage on actors and ModifyDamage on inventory. The flags are used by DamageMobj so modders can determine radius damage, for example, by checking for DMG_EXPLOSION.
  • removed extraneous parameter in SpawnPlayerMissile call in A_FireProjectile. The native variant has a MissileActor out parameter in this place, but in ZScript that's a secondary return value.
  • Add LookScale variable on weapon This variable allows a weapon to set a custom look sensitivity multiplier without fiddling with FOVScale / DesiredFOV hacks.

New in GZDoom 3.7.2 (Mar 7, 2019)

  • fixed: ScriptUtil.PlayerAmmo must be declared static.
  • modify the wording in the preset scaling menu to imply that all it does is pixel scaling, not change the actual screen resolution
  • resolution selector now sets to auto detected resolution at startup, no longer uses entries from the config file
  • committing a scaling change for fullscreen sets scaling to 1.0 to guarantee the selected number of pixels are actually used
  • add 4k UHD resolution to presets
  • fix spacing on one of the resolution preset entries
  • fixed: The rail attack only considered the puff's decal if it had ALWAYSPUFF set.
  • reverted GME Kss_Cpu.cpp to previous version (Update to GME 0.6.2 broke playback of MSX .kss files)
  • applied proper scaling type to font textures
  • fixed: application of fake contrast should never result in a light level of 0 unless the sector's own light level is 0.
  • normalize the pitch in ACS's SetActorPitch.
  • fixed: TVector3::Pitch() got the sign inverted.
  • workaround MSVC 2015 code generation issue, x64 only (With optimization turned on illegal instructions were generated for turbo CVAR handler function)
  • workaround code generation issue in PlayerPawn.FindMostRecentWeapon()
  • fixed default alpha for sector colors
  • fixed disappearing inventory after morphing pickup
  • fixed potentially missing event handlers
  • fixed wrong self type in Array.Resize()
  • unary minus operator propagates boolean operand to integer
  • fixed script line numbers after multi-line raw string literal
  • fixed incompatible commit.
  • fixed condition to produce blood splatter during line attack
  • relaxed caller type check for states modified by Dehacked
  • fix black cam texture on HUD
  • fix null pointer crash
  • Make LevelLocals::ExecuteSpecial return int
  • Fix return value of native BuiltinCallLineSpecial
  • Fixed multidimensional array definitions.
  • increased range of valid sound positions and velocities
  • Move receiver NULL check above the orresult check (#695) - This is to prevent a VM abort from happening here if orresult is false.
  • fixed the direct native variant of DynamicLight.SetOffset.
  • fixed: The player sound lookup would fail if a sound was only available for the last gender in the list. (This is an ancient bug, but it never registered before - only after making 'other' the default gender for nonsense input it became apparent.)
  • Default gender for sound classes should be male and not other since it could be undefined in SNDINFO.
  • fixed A_Chase default detection.
  • Add missing screenshot sRGB gamma when vid_hdr is active
  • Fixed: NODAMAGE was not accounted for with pain.
  • added missing range checks to level compatibility handler
  • force CMake to use internal asmjit. I left it in a state so that it can easily be changed back in the future.
  • Fix A_CustomBulletAttack's spawnofs_xy parameter
  • Since GetParentAmmo is now virtual, BackpackItem and the "give ammo" cheat should call GetParentAmmo to determine base ammo classes.
  • fixed memory leaks in network code.
  • Fixed Thing_ProjectileAimed being broken:
  • It was calling the fallback aiming in the wrong place when it should have been outside the speed check.
  • Credit to _mental_ for the base code, but no gotos involved.
  • fix Unix builds without backtrace functions in their libc:
  • backtrace functions are not present in all libc implementations. Cmake has
  • module to add external libraries into build if needed so use it to fix build on
  • Unix systems without backtrace in libc.

New in GZDoom 3.6.0 (Oct 18, 2018)

  • Additional blocking-related flags for Actor.LineTrace()
  • Added CheckReplacement to event handlers, a function inspired by its namesake in Unreal's Mutator class.
  • Add "IsFinal" parameter for CheckReplacement.
  • Add HITOWNER flag, when set, allows a projectile to collide with its shooter.
  • support static const arrays inside structs
  • prohibit assignment of dynamic arrays
  • Add ZScript method `LevelLocals.SphericalCoords`.
  • fixed: sound from poly objects through portals will now propegate properly
  • defaulted constructors and assignment operators of several trivial types.
  • removed most of the old LastIndexOf methods in FString, only leaving one for ZScript and clearly giving it a name that says it all. RIndexOf has been made the proper version of LastIndexOf internally now.
  • Added paths for all games on Steam for Linux since they now offer the ability to download all games for Proton/Wine.
  • Check ~/.steam on Linux for the config.
  • add menu sliders for `vr_ipd` and `vr_screendist`
  • added Screen.DrawThickLine for drawing lines with thickness
  • fixed: always initialize active colors in special font
  • update french language translation from Tapwave
  • Add OBJ model support
  • fixed the use of Doom-Legacy-style 3D floor lighting in light mode 8.
  • fixed math imprecisions in horizon vertex generation.
  • be more thorough with 'in menu' checks for certain protected functions.
  • Fixed code generation of infinite for loop
  • Add NewGame to EventHandler
  • Make StatusScreen::End virtual
  • Allow LineAttack's LAF_NOINTERACT to fill FTranslatedLineTarget's information.
  • Added DMG_EXPLOSION flag.
  • do not render lights from uninitialized data.
  • Adds OnDrop virtual to inventory items. Called on the dropped item at the end of AActor::DropInventory.
  • clamp the software light to never get brighter than the initial light level
  • enabled the linear shadowmap filter.
  • update xBRZ upscaler to version 1.6
  • (modern only) added 5x and 6x upscaling with xBRZ
  • Add 'normalNx' texture scaling (normal2x, 3x, 4x, 5x, and 6x) (5x and 6x only supported in modern)
  • Upgrade libADLMIDI and libOPNMIDI
  • Exports various resurrection-related functions to ZScript.
  • Computed facet normals for UE1 models were not normalized when they were supposed to.
  • removed dynamic lights from Hexen's Mana pickups.
  • fixed potential null pointer access in Hexen's spike code.
  • Fixes for Wraith Corporation WADs
  • fixed: smooth teleporters could fudge the player over an adjacent line, causing the player to appear on top of a cliff that is much higher than the original teleport.
  • fixed: MD3s with a skin-less surface left the renderer in an undefined state. The frame interpolation factor wasn't reset and rendering prematurely aborted with no chance to recover.

New in GZDoom 3.5.1 (Aug 27, 2018)

  • Highlights:
  • Implemented "resolution mode selector"
  • add post processing support to the software renderer and softpoly
  • add vid_hdr cvar that enables higher than 8bpc output for monitors that support it
  • fix: softpoly TEXTURES sprites with scale of 2 are tiled
  • add dithering support to emulate higher BPC displays than your real one. this should allow smoother gradients for light fades and such.
  • Make various getter and pure-math Actor methods clearscope.
  • Details:
  • add vid_hdr cvar that enables higher than 8bpc output for monitors that support it
  • fix: softpoly TEXTURES sprites with scale of 2 are tiled
  • Implemented "resolution mode selector"
  • add post processing support to the software renderer and softpoly
  • Fix model rendering only using interpolated yaw. Pitch and roll are now also interpolated.
  • add dithering support to emulate higher BPC displays than your real one. this should allow smoother gradients for light fades and such.
  • clear GLWF_TRANSLUCENT at the end of PutWall.
  • fixed FraggleScript's moving camera.
  • Make various getter and pure-math Actor methods clearscope.
  • disable runtime buffer security check in release build.
  • prohibit assignment of dynamic arrays
  • Avoid overriding vr eye-specific buffer binding during 2D rendering.
  • only render visual portals if they are front facing in softpoly
  • disable survey code, 3.5.0's is over
  • got rid of FNameNoInit and made the default constructor of FName non-initializing.
  • Add the "RightIndexOf" method to FString, which works like String.lastIndexOf from JavaScript
  • Deprecate the LastIndexOf method of StringStruct

New in GZDoom 3.6.0 Pre 7 (Aug 7, 2018)

  • Highlights:
  • (modern branch only) Fullscreen is now borderless window (which, technically, it always has been, anyhow). Removed hacks which changed the desktop resolution in order to simulate exclusive fullscreen because they were a constant stability concern.
  • (modern branch only) fixed a performance regression with the software renderer, introduced by the recent changes to the video backend in 3.4.
  • Save item statistics - Items are now saved into save games and are displayed on the statfile
  • Upgrade libADLMIDI and libOPNMIDI
  • Large number of MinGW fixes
  • add tags for all Doom and Heretic monsters for mods that reveal monster names
  • various compatibility fixes for old maps and mods
  • fixed titlepic animation
  • Custom hardware shaders now can use custom texture units
  • default to "fullscreen" display
  • fixed a potential exploit with malformed WAD files. Thanks to xanaxdev ( [email protected] ) for reporting it.
  • Details:
  • fixed: redirect script access to the compatflags CVARs to their internal shadow variables. This is needed so that MAPINFO settings for these flags don't get ignored.
  • enable model rendering in the software renderer
  • fixed: flag CVars in ZScript referenced wrong addresses
  • fixed: ZScript used the wrong variable for compatflags2. The variable it accessed was only the settings from the compatibility.txt lump.
  • fixed: remove ARM specific gl_es definition since it's not even really much different from the main line definition, anyhow
  • fixed generation of brightmaps for sprites. This forgot to take the added empty border for filtering improvement into account.
  • fixed: ADynamicLight's shadowmap index must be reset when loading a savegame. (this fixes lights not rendering properly when loading)
  • fixed portal restoration on revisiting level in hub. Added function to test if map is being reentered
  • (modern branch only) render refactorings and fixes, use uniform blocks for postprocessing shaders to prepare for move to vulkan
  • (modern branch only) Remove all code to handle OpenGL 2 and

New in GZDoom 3.4.1 (Jun 17, 2018)

  • fixed: redirect script access to the compatflags CVARs to their internal shadow variables. This is needed so that MAPINFO settings for these flags don't get ignored.
  • fixed: flag CVars in ZScript referenced wrong addresses
  • fixed: ZScript used the wrong variable for compatflags2.
  • fixed: remove ARM specific gl_es definition since it's not even really much different from the main line definition, anyhow
  • fixed generation of brightmaps for sprites. This forgot to take the added empty border for filtering improvement into account.
  • fixed ADynamicLight's shadowmap index must be reset when loading a savegame.
  • fixed portal restoration on revisiting level in hub. - Added function to FLevelLocals to test if map is being reentered
  • fixed crash with GL 3.x and fixed colormap active.

New in GZDoom 3.4.0 (Jun 11, 2018)

  • Highlights:
  • enable #include support in modeldef files
  • removed DirectDraw and Direct3D backends, removed unaccerated SDL framebuffer backend
  • reorganization of 2D and 3D rendering code in preparation for Vulkan in the future, performance improvements on newer hardware
  • CVAR that handles it is now 'vid_rendermode' - vid_renderer, swtruecolor, and r_polyrender have been removed and combined into new CVAR
  • added a 'lightsizefactor' command to gldefs.
  • allow animated title pics.
  • Add support for Unreal Engine 1 vertex mesh format.
  • added LevelLocals vec2/3Offset(Z) functions for portal-aware offsetting without needing actors
  • Add "OnGiveSecret" virtual function on Actor for customizing behavior of secret finding.
  • BLOCKASPLAYER flag: treat non-player actors as blockable by "block players" lines
  • added 'revealed on automap' linedef flag, UDMF only
  • added forced automap style to linedef, UDMF only
  • Added startup song definition for custom IWADs
  • This release contains a major render optimization for highly detailed maps that may give a +20% performance improvement on Intel and AMD hardware (less on NVidia because the driver has far less overhead that could be optimized away.)
  • Notes:
  • removed DirectDraw and Direct3D backends, removed unaccerated SDL framebuffer backend
  • reorganization of 2D and 3D rendering code in preparation for Vulkan in the future
  • renderer can now be "live switched" between the Software renderer and Hardware-accelerated OpenGL modes - like old GZDoom
  • CVAR that handles it is now 'vid_rendermode' - vid_renderer, swtruecolor, and r_polyrender have been removed and combined into new CVAR
  • include and forward declaration cleanup: lots of unused stuff removed
  • rendering settings removed from launch popup: they can now be changed dynamically in-game
  • internal level compatibility definitions are now carried out by ZScript, more level compatibility settings have been added
  • Thread-Local Storage is now required on all compiler systems in order to use GZDoom. This means you cannot use OpenBSD versions earlier than 6.3, and GCC is still unavailable for that platform.
  • improvements to models in Software Renderer (still in beta state, but available for experimentation, use 'r_models')
  • Added activation type to WorldLine(Pre)Activated events
  • Added names for arguments in DStaticEventHandler class definition
  • protected critical portal data from getting written to by user code. This data is game critical and may only be altered by code that knows what is allowed and what not.
  • added a compatibility handler for Kama Sutra MAP01's ending area.
  • fix softpoly portal crash
  • Fixed missing textures on Valhalla with hardware renderer
  • more rendering fixes for Softpoly and Hardware-OpenGL
  • fix missing fuzz initialization in softpoly
  • Removed gl_lights_checkside
  • Made 100% kills possible and unstuck imp on Valhalla map
  • added a 'lightsizefactor' command to gldefs.
  • Actor's Activation property is now stored in saved game
  • fix softpoly mirrors
  • Made 100% kills possible on Altar of Evil, easy skill
  • (internal ZScript) Add info about UseSpecial flag feature conflict above Actor.Used
  • Fixed initialization issues with dynamic lights.
  • Implemented workaround for ZScript LineTrace with 3D floors
  • Added missing commented enum entry for ETraceFlags on ZScript side
  • Only call additional LineCheck if there are 3D floors
  • Enabled playing of *gasp sound by default
  • Added startup song definition for custom IWADs
  • Fixed walkthrough blocker in Sin City 2 via compatibility entry
  • allow animated title pics.
  • don't force the renderer to remain active in windowed mode when in the background.
  • OPL Synth fix: Double-voice instruments randomly don't play second voice
  • updated LZMA library to version 18.05
  • serialize 'spawned' object flag, WorldThingDestroyed event relies on it
  • added compatibility fix for bad sector reference in Plutonia MAP11.
  • use libc++ for all targets on macOS
  • SDL: clear button state when switching from/to GUI input
  • added r_debug_draw that shows how the software renderer composes its scene (remember that Youtube video Edward850 made?)
  • added end line to recursive sound warning
  • reduce the number of direct OpenGL calls done by the post processing steps
  • fixed calculation of glow color
  • fixed crash during autoloading of material textures
  • fixed sloped drawer crash
  • added end line to various messages so they don't screw up further output anymore
  • fixed alpha of weapon sprite.
  • added 'vid_scaletowidth' and 'vid_scaletoheight' to calculate 'vid_scalefactor' to reach a certain value on screen dynamics (i.e. if you want 320 pixels wide, use vid_scaletowidth 320)
  • Add support for Unreal Engine 1 vertex mesh format.
  • added LevelLocals vec2/3Offset(Z) functions for portal-aware offsetting without needing actors
  • trigger WorldThingDamaged event before WorldThingDied
  • set a sane lower limit for vid_scalefactor, removed some code redundancy
  • define zdoom.rc as a proper Windows text file, stop Git from mismanaging it
  • add 'vid_showcurrentscaling' ccmd - shows both virtual and real screen resolution for the current render
  • made vr_enable_quadbuffered windows-only, some fixes to it
  • use an indexed vertex buffer to render flats
  • use triangles instead of triangle fans to render flats.
  • render sector planes in one draw call.
  • added 'revealed on automap' linedef flag, UDMF only
  • added forced automap style to linedef, UDMF only
  • added CVAR to disable WGL_EXT_swap_control_tear. ('gl_control_tear') - see commit 'cc65490' for more info
  • added a CVAR to disable per-plane rendering.
  • replaced tabs with spaces in UDMF spec
  • added new linedef properties to UDMF spec
  • fix model interpolation bug
  • fixed applying of alpha to weapon sprites
  • enable #include support in modeldef files
  • Add Line Specials Line_SetAutomapFlags, Line_SetAutomapStyle
  • force model light to be attenuated
  • restore startup game state on restart
  • fixed blinking frame after saving a game
  • when restoring a savegame with errors, show the console instead of a 'very fatal error' crash (commit message: fixed: When deserializing the object list, the array must be nulled before using it so that a premature abort does not end up working on random data.)
  • replace softpoly block drawers with span drawers and make them use blending rules directly from render styles
  • add dynlights to softpoly pal mode
  • fixed rendering of environment map on mirrors
  • fixed Windows XP compatibility for MSVC 2017 targets
  • limited length of server CVAR name to 63 characters
  • fixed: +DONTSPLASH disabled all terrain effects, not just the splash.
  • use a linear light ramp on the textured automap for light modes 0 and 1.
  • fix savepic render buffer issues
  • Swap front face culling for GL model drawer (CCW should be the default).
  • Added mirroring handling to software models.
  • use affine dynlights in softpoly
  • fix memory arena allocation alignment for 32 bit systems.
  • fixed: For melee attacks with a short attack range P_AimLineAttack must check for hits from above and below.
  • fixed mouse cursor positioning in menu for Cocoa backend
  • fixed linking with sanitizer(s) enabled
  • Fixed: Dehacked must not validate parameters for MBF special functions.
  • fixed - sector sounds were not translated through static portals properly
  • BLOCKASPLAYER flag: treat non-player actors as blockable by "block players" lines
  • fix crash on dying when player class has no death states
  • fix softpoly colored fog bug in the new drawers
  • fix dynlight color not being applied on sprites
  • Adds "OnGiveSecret" virtual function on Actor for customizing behavior of secret finding.
  • fix software renderer dynamic lights not working properly in mirrors
  • fixed autoaiming for unranged attacks.
  • fix null pointer crash in softpoly
  • add dynamic lights to softpoly and software renderer models

New in GZDoom 3.3.2 (Apr 15, 2018)

  • Highlights:
  • Fixed detection of .ipk7 custom IWADs
  • Restored vanilla behavior of lightning for original Hexen
  • Added loading of ZSDF lumps by full paths
  • Disabled the survey code
  • Exported P_ActivateLine() to ZScript along with constants for activation type
  • Increased size of the savegame comment area.
  • Full List:
  • Forbade dynamic array as the return type of a function
  • Fixed detection of .ipk7 custom IWADs
  • Reintroduced discarding of custom IWAD duplicates
  • Updated zlib to 1.2.11
  • Fixed potential crash on usage of Mystic Ambit Incant
  • Fixed crash when vid_setmode CCMD is used from command line
  • Restored vanilla behavior of lightning for original Hexen
  • Fix mid texture rendering for self-referencing sector lines
  • Added zero initialization of implicit dynamic array items
  • Added loading of ZSDF lumps by full paths
  • Added message for absent explicitly referenced dialog file
  • disabled the survey code
  • Exports P_ActivateLine() to ZScript along with constants for activation type
  • Separated P_ActivateLine() ZScript export into two functions, one with and one without a vector parameter
  • Increased size of the savegame comment area

New in GZDoom 3.3.1 (Apr 2, 2018)

  • Major Highlights:
  • Better handling of defaults with some ZScript/DECORATE functions
  • Many bug fixes since 3.3.0
  • Full List:
  • Fixed typo in libOPN error messages
  • ADL&OPN: More setup: Chips count and Volume model
  • Fixed applying of unsafe context in waiting command
  • Fxed sprite having a picnum was not animating its image in the hardware renderer
  • Fixed sidedef's sector and linedef references were writable.
  • Fixed black pixels when subtractive lights are in range for PBR materials
  • Fixed FBuildTexture::CopyTrueColorPixels() returned incorrect transparency information
  • Reverted inconsistent fix for 3D floor that extend into the real sector's floor were not clipped properly
  • Changed the default settings for fluid_patchset, timidity_config and midi_config to point to the default sound font
  • Fixed typo in linetrace flags checking.
  • ADL&OPL: Added a fallback for a blank instruments in GS/XG banks
  • Merged list of video modes for Cocoa and SDL backends
  • ADLMIDI: Update latest update of DMXOPL3 bank
  • Fixed crash when event handler class isn't derived from StaticEventHandler
  • Set more suitable limit for sound velocity validation
  • Fixed the blank banks list of ADLMIDI
  • Fixed infinite loop with None class in random spawner
  • Fixed infinite loop with zero height fast projectile
  • Fixed uninitialized members in DPSprite class
  • Fixed crash on accessing player sprite's state in software renderer
  • Set default for newradius in A_SetSize()
  • Fixed handling of default value in Actor.Vec3Angle()
  • Added ability to load any IWAD without extension
  • Removed check for duplicate IWADs
  • Localize the word “for” in Strife’s trading dialogs
  • Fixed handling of default values in String.Mid()
  • Made all elements of DehInfo and State read-only
  • Fixed excessive growth of ACS string pool

New in GZDoom 3.3.0 (Mar 29, 2018)

  • ZScript & Mapping Highlights:
  • Added dynamic spot lights, configurable in the UDMF map format
  • Exported GetChecksum() function as part of FLevelLocals in ZScript
  • Mod-defined aliases no longer permanently change CVARs
  • Added FriendlySeeBlocks actor property that allows a modder to expand the maximum radius that a friendly monster can see enemies. It's accessible from both ZScript/DECORATE and UDMF
  • Custom submenus are no longer removed from altered protected menu
  • Exported S_GetMSLength() function to ZScript
  • Added GetRadiusDamage() function. It returns the raw calculated explosion damage falloff by distance only
  • Added Screen.getViewWindow() function
  • Exported Trace() interface to ZScript
  • Added TeleportSpecial() as an alias for Teleport() in ZScript to deconflict from Actor.Teleport() function
  • Added Distance2DSquared() and Distance3DSquared() functions
  • Fixed skip_super application for ZScript
  • Split off the interface part of DHUDMessage
  • Exported sector effect pointers
  • Fixed missing pointer assignment on Lighting effect creation
  • Made left button down event available to UI event handler
  • Exported Inventory.AltHUDIcon field to ZScript
  • Added WorldLinePreActivated to override line activation
  • Added DI_MIRROR flag to statusbar image drawing, useful for rearview mirrors
  • Enabled string and float user_ properties in UDMF things
  • Other Highlights:
  • Added in-game reverb editor using the menu system
  • Improved French translations
  • Fixed 'precise' rendering in OpenGL
  • Added new Materials Shader system to allow textures to show new properties such as glossiness and specularity, affected by dynamic lights, or with PBR, reflecting their direct surroundings
  • Added new rocket smoke sprites by Talon1024
  • Embedded Timidity++ into GZDoom directly
  • Added light definition for megasphere
  • Fixed midtex nowrap clipping bug when 3d floors are in view (Software Renderer)
  • Improved profilethinkers in various ways
  • Added variables am_unexploredsecretcolor and am_ovunexploredsecretcolor to mark undiscovered secrets differently in the automap
  • Added support for ADLMIDI and OPNMIDI libraries
  • Full List:
  • Added in-game reverb editor using the menu system
  • Added dynamic spot lights, configurable in the UDMF map format
  • Fixed: Do not output empty conversation replies to the console
  • Fixed: Added bounds check for local variables in ACS VM
  • Fixed transfer of count secret flag from random spawner
  • export 'GetChecksum' as part of FLevelLocals in ZScript
  • Add "fuzz software" to GL that renders fuzz like the scaled fuzz mode in the software renderer
  • Added unsafe execution context for console commands
  • "Unsafe" aliases no longer permanently change CVARs
  • Fixed crash on finishgame CCMD before starting new game
  • Fixed a case of infinite loop in A_BrainDie
  • add 'FriendlySeeBlocks' actor property that allows a modder to expand the maximum radius that a friendly monster can see enemies. - accessible from both ZScript/DECORATE and UDMF
  • Improved French translation using Tapwave's submissions, also covers previously missing strings.
  • Add option to enable or disable borderless windowed for Windows only.
  • Custom submenus are no longer removed from altered protected menu
  • fixed: Disabled interpolation point "thinking"
  • Fixed crash when resolving multipatches with missing textures
  • Added missing fields to StrifeDialogueNode ZScript definition
  • Fixed rare crash when menu is closed from Ticker() function
  • fixed: Dynamic arrays for object pointers need different treatment than arrays for regular pointers, because they require GC::WriteBarrier to be called.
  • Exported S_GetMSLength to ZScript.
  • Added GetRadiusDamage. Returns the raw calculated explosion damage falloff by distance only.
  • added Screen.getViewWindow function
  • Exported Trace() interface to ZScript
  • fixed: precise rendering did not work anymore due to a missing reference operator in the setup function for the needed data.
  • fixed: The culling mode for translucent models must be inverted when rendering a mirror.
  • fixed: Changed quad stereo mode restart notification
  • Fixed Sector.SetYScale() function in ZScript
  • new rocket smoke sprites by Talon1024.
  • compatibility node rebuild for Doom2's MAP25
  • fixed: iterating through portal groups must check for situations where badly constructed maps let items end up in another portal group.
  • fixed: Upon resurrection, a monster must check if the current setting of the link flags (NOBLOCKMAP and NOSECTOR) match the defaults.
  • let fluid_reverb and fluid_chorus default to 'off'.
  • Fix typo that made DepleteAmmo always use Secondary Ammo
  • Fixed crash on exit caused by undefined class
  • Added compatibility entry for Ultimate Simplicity MAP11 - This eliminates potential blocker in level progression
  • Fixed crash in stereoscopic modes caused by camera without player
  • Now compiles on FreeBSD
  • Removed last remnants of PowerPC Mac support
  • fixed: Properly parse FLAC and Ogg Vorbis files for their comments
  • let the texture manager handle the special OpenGL textures so that they get deleted and recreated when needed. (fixes mirrors and particles looking crazy after 'restart' ccmd)
  • Import Timidity++ into GZDoom directly
  • fixed: check for deathmatch starts before forcing an unfriendly player to use them.
  • use submenus for soundfont selection both for better overview and avoiding a music restart for each selection change.
  • added a compatibility setting for Perdition's Gate MAP31 which was having render issues with an unsupported vanilla effect.
  • Added 'TeleportSpecial' as an alias for 'Teleport' in ZScript to deconflict from the Actor.Teleport function.
  • added light definition for megasphere.
  • silence all error messages in the state map parser for DEHSUPP when re-reading the data.
  • Added Distance(2/3)DSquared functions.
  • fixed: Send a GM reset SYSEX event when music playback is started.
  • fixed some problems with the stepping up through a portal logic
  • fixed: For two-sided midtextures the light lists were always taken from the sector referenced by the rendered sidedef, not the sector in which the line gets renderered.
  • fixed skip_super application for ZScript.
  • fixed: PowerMorph.EndEffect should not tinker around with morph duration.
  • fixed: perform the stepping adjustment for FastProjectiles in 3D.
  • fixed translucent sorting for particles.
  • split off the interface part of DHUDMessage
  • Fixed potential crash during state validation
  • fixed: Camera textures must always be drawn with texture mode opaque, because the contents of their alpha channels are undefined.
  • fixed: A preincrement of a local variable generated wrong code if passed as a function parameter
  • print an error message if the requested MIDI device cannot be started.
  • removed an unchecked fixed size buffer in the KEYCONF parser.
  • Export sector effect pointers, fix missing pointer assignment on Lighting effect creation.
  • Fixed freeze after saving game when cl_waitforsave CVAR set to false
  • Fixed initialization of search paths on macOS
  • Made left button down event available to UI event handler
  • get rid of FAKE3D_REFRESHCLIP and fix holes in 3d floors with wrapped midtextures
  • Disabled GCC loop vectorization for R_LoadKVX() function
  • fixed midtex nowrap clipping bug when 3d floors are in view (software)
  • Extended profilethinkers CVAR with sorting ability
  • Improved profilethinkers in various ways
  • add variables 'am_unexploredsecretcolor' and 'am_ovunexploredsecretcolor' to mark undiscovered secrets differently in the automap
  • put unexplored secret color picker in the menu
  • fixed empty dynamic arrays in savegames
  • implemented anonymous stats collector (info here: viewtopic.php?f=49&p=1044005#p1044005)
  • fixed some crashes related to music playback with tags
  • fixed some issues related to BUILD resources
  • Added target and last enemy to linetarget CCMD output
  • Exported Inventory.AltHUDIcon field to ZScript
  • fixed crash when reloading a map in softpoly
  • fixed status bar chain wiggling when paused
  • Added support for ADLMIDI and OPNMIDI libraries
  • Added warnings when using original OpenAL (and not OpenAL-Soft as recommended)
  • Add WorldLinePreActivated to override line activation
  • Fix 3D floors clipping into floor
  • Fix issues with RenderStyle "Shaded" and alpha textures
  • Adds "DI_MIRROR" flag to statusbar image drawing, useful for rearview mirrors
  • Enable string & float user_ properties in UDMF things
  • Fixes for DDS texture loader
  • disable XP toolset warning for 64 bit builds.

New in GZDoom 3.2.5 (Jan 6, 2018)

  • Notable features since 3.2.4:
  • externalise DCanvas::DrawLine to ZScript
  • implemented 'i_soundinbackground' to continue playing sounds and music while in background
  • OpenGL rendering now continues even when losing focus if not running fullscreen
  • added 'playerrespawn' skill flag to allow gameplay mods to retroactively enable player respawns in single player on all maps
  • improved Advanced Sound Options menu - added option for FluidSynth chorus, removed fractional part from FluidSynth voices option
  • fixed applying of Doom 64 lighting to horizon portals
  • particles are now interpolated
  • More-complete changelog since 3.2.4:
  • externalise DCanvas::DrawLine to ZScript
  • fixed inconsistent colour remapping via translation ranges
  • added bounds checks for colour translation indices
  • fixed VM abort when drawing from ZScript happens during 0 game tic
  • whitelist 'reset2saved', 'undocolorpic', 'openmenu' in menudef
  • fixed potential crash calling undefined function in zscript
  • fixed crash after restart CCMD
  • added compatibility settings for Hanging Gardens, compatibility settings can now be applied for all map types (including UDMF)
  • fixed take ammo cheat
  • implemented 'i_soundinbackground' to continue playing sounds and music while in background
  • OpenGL rendering now continues even when losing focus if not running fullscreen
  • prevent level from exiting if no deathmatch starts are available in multiplayer
  • fixed tics to seconds conversion, now in ZScript - stat screens now display correct values
  • disabled modifier keys processing in UI by Cocoa backend - modifier keys no longer trigger bound actions in menu/console/chat
  • added GetPixelStretch to LocalLevels struct
  • fix: bind default framebuffer before testing whether hardware stereo 3D is supported. This allows NVidia 3D vision glasses to function correctly when gl_light_shadowmap is on.
  • Add "requires restart" to "enable quad stereo" option menu label, to help folks set up 3D.
  • Added ability to perform reverse fades with A_SetBlend
  • added 'playerrespawn' skill flag to allow gameplay mods to retroactively enable player respawns in single player on all maps
  • improved Advanced Sound Options menu - added option for FluidSynth chorus, removed fractional part from FluidSynth voices option
  • fixed applying of Doom 64 lighting to horizon portals
  • particles are now interpolated
  • fix culling bug in SoftPoly
  • applied texture offsets and scales on animated doors
  • fix rendering of wrapped midtex with sky ceiling
  • The player set up menu 'Press Space' message can now be localized
  • better angle selection for rotated automap sprites
  • added optional angles to player's coordinates display
  • fixed boss special commands in UMAPINFO
  • fixed ammo limit for give cheat
  • applied vertical offset to transferred sky in OpenGL renderer
  • fixed initialization of BlockThingsIterator objects
  • added CheckMove() function to ZScript Actor class
  • Added vector diff functions to ZScript LevelLocals class
  • add font characters for French and Portugese languages
  • add 'gl_riskymodernpath' for computers that worked before the GL>=3.3 modern path enforcement
  • fixed ACS stack checking

New in GZDoom 3.2.4 (Dec 18, 2017)

  • Notable features since 3.2.3:
  • Added DMG_NO_PAIN for DamageMobj()
  • Fixed bright sprites in sectors with Doom 64 lighting
  • Added free space margin aka safe frame for automap
  • Fixed rotating sky & model smoothness
  • Implemented win_borderless CVAR for fake fullscreen in Windows
  • More-complete changelog since 3.2.3:
  • Unified implementation of ’directory as resource file' for POSIX targets
  • Fixed sky scrolling is now stored in a higher precision data structure; is now smoother than in 3.2.3
  • Fixed model rotating is now calculated in a higher precision data structure; is now smoother than in 3.2.3
  • Fixed directory creation for POSIX targets
  • Fixed backslashes in MD3 skin names
  • Fixed overbright screenshots with hardware gamma off
  • Increased maximum particle lifespan
  • Fixed screen->FrameTime should use an adjusted frame start time
  • Implemented win_borderless CVAR for fake fullscreen in Windows
  • Fixed loading of external DeHackEd patches
  • Fixed inconsistent angle of spawned leaves
  • Fixed English localization issues
  • Added empty space margin aka safe frame for automap
  • Repaired the video scaling code in OpenGL for vid_scalemode 0 and vid_scalefactor not equal to 1.0
  • Fixed crash when loading saved game with missing ACS module
  • Added null check for probe in SectorAction.OnDestroy()
  • Fixed error check when saving GL nodes
  • Fixed AActor::UnlinkFromWorld() must also destroy all portal link nodes for the calling actor
  • Do not allow outside access to the variable storing the CCMD for OptionMenuItemCommand
  • Added whitelist for DoCommand ZScript command
  • Stop demo recording after ending game with menu_endgame CCMD
  • Fixed bright sprites in sectors with Doom 64 lighting
  • Added DMG_NO_PAIN for DamageMobj()

New in GZDoom 3.2.3 (Dec 4, 2017)

  • forgot to lower zscript to 3.2.3.

New in GZDoom 3.2.1 (Oct 24, 2017)

  • Fixed applying of height argument in A_Fire() function
  • Removed all code needed to support macOS earlier than 10.7 Lion
  • Fixed crash on attempt to register IDs for undefined class
  • Added vid_cropaspect. This CVAR turns vid_aspect into a letterboxing function that will crop the unused sides of the screen away, instead of stretching it. Requires one of the non-legacy OpenGL framebuffers to work
  • Removed vid_tft and vid_nowidescreen and associated menu option. Their functionality was superseded and extended by vid_aspect set to 3 (which has the same effect as setting both to true anyhow), and it was mostly just redundant
  • Fixed: don't interpolate view movements if a key press didn't result in any changes
  • Add default gzdoom.pk3 directory to File.Search paths on *nix systems
  • Fixed: inverted color order for post-process textures to BGRA to correctly match the internal texture standard in GZDoom
  • Added ability to change slider color using mapinfo's gameinfo
  • Added startuptype to IWADINFO, allowing to change the game startup screen with custom iwads
  • Fixed applying of compatibility settings for IWADs
  • Fixed a few cases when IWAD was checked by hardcoded index
  • Fixed arch-vile bleeding when damaging target

New in GZDoom 3.1.0 (Jun 1, 2017)

  • Although this is mainly a bugfix release there are a few notable new features:
  • Support of Strife Veteran Edition's extended single player campaign
  • Better handling of stereo sounds
  • PlayerThink code has been exported to scripting
  • On Windows and macOS the system's MIDI synth is no longer the default. Instead, FluidSynth and a small soundfont are now included to provide better default playback quality.
  • Notable bugfixes:
  • Translucency on weapon sprites works properly
  • Some layout fixes with SBARINFO based status bars
  • Fixed par time display on level summary screen
  • Fixed loop tag checks for Ogg files

New in GZDoom 3.0.1 (May 4, 2017)

  • Bug fix release which addresses the following:
  • Potential crash when changing the render output in-game and continue playing
  • Crash in the software renderer with camera textures
  • Cleanup of dynamic light options

New in GZDoom 2.4.0 (Mar 21, 2017)

  • New render features:
  • Doom64-style color properties for sectors (i.e. different color settings for floor, ceiling, walls and sprites)
  • New scripting features:
  • Script versioning to account for syntax differences between versions
  • Fully scripted inventory system
  • Fully scripted menu system
  • Scripted event system
  • Printf-style string formatting function for ZScript
  • Dynamic arrays for ZScript
  • More access to map data from ZScript
  • User definable actor properties
  • Separation of scripts into UI and Play parts to have better access control
  • Exported obituary code to ZScript to allow more flexibility when handling special cases
  • SectorTagIterator and LineIDIterator classes to search for tags
  • Other:
  • Added GetActorFloorTexture and GetActorFloorTerrain ACS functions
  • Added new PRINTNAME_ constants for retrieving next and secret next level in ACS
  • Added per-sector settable fog density
  • Fixed handling of sector action things with special trigger semantics
  • True color fonts can be defined in FONTDEFS
  • added a BOUNCE_NotOnShootables flag to address an old design bug in the bouncing system
  • added StealthAlpha actor property for defining a minimum visibility value of a stealth monster
  • ... and many more smaller additions and fixes.

New in GZDoom 2.3.2 (Jan 12, 2017)

  • Critical issues fixed:
  • turbo stairs in Doom 2 were broken
  • potential crash with stair building in Hexen
  • The Heresiarch in Hexen did not call its death script
  • several Heretic weapons behaved incorrectly
  • The last two were caused by an incorrect script compiler check that failed to detect a bad function definition. This may induce a breaking change to some ZScript based user mods, too, which made the same mistake!
  • Other fixes:
  • fixed a problem with drawing decals with the software renderer
  • 'stat music' could crash on OpenAL
  • fixed a rare crash condition with killing monsters from the console
  • the spiral for railgun shots wasn't drawn
  • switching from windowed to fullscreen could set bad screen sizes not covering the entire screen
  • fixed sight checks through portals
  • New features:
  • mods can define items globally for precaching in addition to per-map definitions

New in GZDoom 2.3.1 (Jan 8, 2017)

  • Dehacked strings were cut off at the end
  • corrected a few cases where dynamic lights were not correctly set up
  • default lights for Doom and Heretic are now properly attenuated.
  • fixed a few issues with the ZScript compiler
  • fixed potential crash with Doom's boss brain
  • fixed state validation problem with Dehacked modifications.
  • fixed a crash with multiplayer games
  • fixed a few more cases where player sprites became momentarily visible during a portal transition.
  • made particle translucency calculations more precise

New in GZDoom 2.3.0 (Jan 4, 2017)

  • New features:
  • First version with official ZScript support
  • Screen space ambient occlusion (SSAO) for the OpenGL renderer, written by dpJudas
  • UDMF-configurable fog density per sector
  • Glowing flats settable through UDMF
  • Proper rendering processing of large actors
  • Improved IWAD picker, allowing to choose the active renderer, or autoloading lights and brightmaps
  • Proper dynamic light definitions for Freedoom.
  • Multithreaded software rendering
  • Some improvements to the console
  • Fixed the pitch issues that were warned about for 2.2.0

New in GZDoom 2.2.0 (Oct 8, 2016)

  • Fully functioning Line and Sector Portals
  • Roll Sprites
  • Flat Sprites
  • Sprites Facing Camera
  • Bloom
  • Multisampling
  • Stereo 3D VR
  • Quad Stereo
  • Tonemap Setting
  • Lens Distortion Effect
  • DECORATE Anonymous Functions
  • Lots of new ZDoom development features

New in GZDoom 0.6.1 Pre (Aug 29, 2016)

  • Updated to the latest GZDoom code

New in GZDoom 0.6.0 Pre (Aug 8, 2016)

  • Changed name to GZDoom for macOS
  • Updated to the latest GZDoom code

New in GZDoom 0.5.9 Pre (Jul 17, 2016)

  • Updated to the latest GZDoom code

New in GZDoom 0.5.8 Pre (Jun 27, 2016)

  • Updated to the latest GZDoom code
  • Fixed several issues with dynamic lights
  • Fixed a rare case of missing music by updating to FMOD Ex 4.44.61

New in GZDoom 0.5.1c (Jun 6, 2016)

  • Added detection for broken WAD files
  • Made FMOD Ex stream buffer size customizable
  • Fixed truncation of command line arguments in IWAD selection window
  • Fixed potential crash in DeHackEd loading
  • Made title text always visible in startup window
  • Fixed issues with encoding of title text in startup window
  • Fixed issues with full-screen mode on non-default monitor

New in GZDoom 0.5.7 Pre (Jun 6, 2016)

  • Updated to the latest GZDoom code
  • Fixed rendering issue with missing walls adjacent to 3D floors

New in GZDoom 0.5.5a Pre (May 22, 2016)

  • Fixed line-of-sight and hitscan attack completely broken in the previous release

New in GZDoom 0.5.6 Pre (May 16, 2016)

  • This release GZDoom for OS X is in sync with the main GZDoom version again, thanks to the recent Graf Zahl efforts.

New in GZDoom 0.5.5 Pre (Apr 24, 2016)

  • Updated to the latest ZDoom and GZDoom 1.x code
  • Reduced size of the disk image by removing unused architecture from FMOD Ex library

New in GZDoom 0.5.4 Pre (Apr 4, 2016)

  • Dropped support of OS X 10.6 Snow Leopard. The executable is now 64-bit only
  • Updated to the latest ZDoom and GZDoom 1.x code
  • Fixed post processing

New in GZDoom 0.5.1b (Apr 2, 2016)

  • Updated to the latest changes from the stable version of ZDoom
  • Fixed post processing

New in GZDoom 0.5.3 Pre (Apr 2, 2016)

  • Updated to the latest ZDoom and GZDoom 1.x code.

New in GZDoom 0.5.2 (Feb 29, 2016)

  • Updated to the latest ZDoom and GZDoom 1.x code
  • Workaround for inability to load Brutal Doom version 20b
  • Workaround for errors in older versions of The Adventure of Square

New in GZDoom 0.5.1a (Feb 27, 2016)

  • Updated to ZDoom 2.8.1 and GZDoom 1.9.1

New in GZDoom 0.5.1 (Feb 8, 2016)

  • Updated to ZDoom 2.8.0 and GZDoom 1.9.0

New in GZDoom 0.5.0 (Jan 25, 2016)

  • Since previous version GZDoom for OS X is kept in sync with GZDoom version 1.8.x which incorporates the latest changes of ZDoom and GZDoom 2.x.x (if applicable

New in GZDoom 0.4.9 (Jan 17, 2016)

  • Dropped support for OS X 10.5 Leopard. In fact, starting from version GZDoom 0.4.4 the game no longer starts on this version of OS X. Further updates of FMOD Ex and OpenAL Soft libraries are now possible
  • Updated FMOD Ex to version 4.44.59
  • Updated OpenAL Soft to versions 1.17.1

New in GZDoom 0.2.1 (Aug 13, 2013)

  • Added support for user-defined post-proprocessing fragment shaders. Set path to a shader file gl_postprocess_shader via gl_postprocess_shader CVAR. Sample shader files can be found in Extra/Post-Processing Shaders folder on the GZDoom disk image
  • Added check for outdated IWAD version with the corresponding message on top of the screen. Added menu option and check_outdated_iwad CVAR to control this feature
  • Added brightmaps and lights .pk3 files into the application bundle
  • Fixed command line parameters duplication
  • Added experimental support for Chasm: The Rift resource files. Textures and sounds are loaded at the moment
  • Added debug texture viewer with texture_browse_index CVAR and texture_browse[_prev|_next] CCMDs to lookup textures by index or by name

New in GZDoom 0.2.0 (Jun 13, 2013)

  • Updated to GZDoom 1.8.0 and ZDoom 2.7.0
  • Added ability to toggle vertical synchronization state automatically depending on current performance
  • Added separate menu for vertical synchronization options
  • Added support for file paths with special characters (quotes, spaces, escape sequences etc) in additional parameters field of IWAD selection window
  • Added support for old script scanner with signed character type. This improves compatibility with some PWADs like Knee-Deep in ZDoom is playable again
  • Added 2880x1800 resolution (15-inch MacBook Pro with Retina display) to supported resolutions list
  • Added alert dialog to notify users about fatal errors.
  • Added OS X version check
  • Fixed rare issue on start-up when the game ignores all user input
  • Fixed incorrect mouse centering when mouse is captured in windowed mode
  • Fixed user input issue: Control, Option and Shift no longer stick after being pressed together with arrow keys
  • Fixed user input issue: Special characters no longer appear during text entry when Function, Control, Option or Command keys are hold
  • Fixed user input issue: Caps Lock no longer generates key press events in menu and console

New in GZDoom 0.1.9 (May 7, 2013)

  • Added support for bots with configuration file from PerfectBots Mod by Doomguy0505. See http://zdoom.org/wiki/bots
  • Added possibility to force WAD picker window to show by pressing Shift, Control or Command during start-up

New in GZDoom 0.1.8 (Mar 6, 2013)

  • Added support for opening PWAD files by double-clicking, via open with or drag and drop
  • Added support for Master Levels from PlayStation Network's DOOM Classic Complete
  • Fixed crash when loading PWAD files using startup window
  • Added automatic loading of Master Levels and No Rest for the Living while playing Doom II
  • Added .pk7 and .7z as supported extensions in startup window

New in GZDoom 0.1.7 (Feb 11, 2013)

  • Added in-game alternative HUD time display: several display modes and customizable text color and menu options to control settings
  • Improved WAD picker window with supported file extensions filtering
  • Added ability to play New WAD Tool version of Mordeth demo directly
  • Improved deploy image with ability to open GZDoom user folder and GZDoom for OS X homepage

New in GZDoom 0.1.6 (Dec 6, 2012)

  • Updated to latest GZDoom SVN code, no OS X specific changes or improvements

New in GZDoom 0.1.5 (Aug 20, 2012)

  • All user data (WAD and configuration files, saved games, screenshots) moved to ~/Library/Application Support/GZDoom folder
  • Removed SDL version from the binary distribution. It still can be compiled from source code
  • Added Command key handling. Copy/paste in console and chat changed to Cmd+C/Cmd+V respectively
  • Added automatic loading of TNT Evilution's map 31 patch fix
  • Fixed visibility of main game window when IWAD selection window is shown

New in GZDoom 0.1.4 (Jun 22, 2012)

  • Added support for XBLA/Xbox 360 version of Doom I & II: direct .disk files handling and No Rest for the Living expansion available.
  • Added berserk power-up display (when found) instead of health box on alternate HUD. Use hud_berserk_health CVAR to enable this feature.
  • Fixed mouse cursor visibility [Native version only]

New in GZDoom 0.1.3 (May 2, 2012)

  • added simple FXAA as rendering post-processing technique [Native version only]
  • fixed incorrect drawing of the first wipe screen (sometimes there were missing geometry during animation)
  • fixed occasional gameplay choppiness with uncapped FPS [Native version only]
  • enabled high quality texture scaling using hqNx set of algorithms
  • added cl_wipe_delay console variable to control wipe animation speed during level transitions
  • added MIDI music playback using FluidSynth library, more information on http://zdoom.org/wiki/FluidSynth
  • added Applications folder link to deploy disk image