GZDoom is the latest version of ZDoom. This new port targets current systems with modern graphics hardware. Vulkan/OpenGL 4.5 capability is recommended, but the minimum requirement for the hardware renderer is OpenGL 3.3, the minimum for the software renderer is Direct3D 9.

For older systems you may want to try LZDoom.

Original release notes for ZDoom:

ZDoom is a family of enhanced ports of the Doom engine for running on modern operating systems. It runs on Windows, Linux, and Mac, and adds new features not found in the games as originally published by id Software.

Older ZDoom ports may be used and distributed free of charge. No profit may be made from the sale of it. GZDoom and its descendants from version 3.0.0 on are licensed GPL and are subject to the terms and restrictions of the new license.

ZDoom now comes in multiple flavors!

The primary port, GZDoom, now sports advanced OpenGL hardware and enhanced software rendering capabilities, while the port LZDoom does not provide all features currently supported by GZDoom but in turn is capable of running the hardware renderer on older hardware which does not support modern OpenGL features.

Although the parent ZDoom codebase has been discontinued, the latest official release is available here, too.

Why would I want to use ZDoom instead of regular Doom?

  • Consider all these features that ZDoom has that are not found in the standard Doom originally released by id:
  • It runs well under all modern versions of Windows, from Windows Vista to Windows 10. If you have Mac or Linux, it works with that too.
  • Can play all Doom engine games, including Ultimate Doom, Doom II, Heretic, Hexen, Strife, and more.
  • Supports all the editing features of Hexen. (ACS, hubs, new map format, etc.)
  • Supports most of the Boom editing features.
  • Features complete translations of Doom, Heretic, Hexen, Strife and other games into over ten different languages with Unicode support for Latin, Cyrillic, and Hangul so far.

Many more all-new editing features such as:

  • Colored lighting.
  • 3D floors.
  • Portals.
  • Advanced polyobjects free from the restrictions of their original implementation in Hexen.
  • Custom monsters, weapons, items, player classes, and other entities.
  • High resolution textures and sprites.
  • Translucency (regular and additive).
  • Many, many extensions to ACS that were not present in Hexen.
  • More music formats: Ogg Vorbis, MOD, XM, IT, S3M, MIDI, and MP3 as well as old-fashioned MUS all work.
  • More sound formats: FLAC and WAVE can both be used for sound effects.
  • More texture formats: PNG and JPEG are both useable for artwork.
  • All Doom limits are gone.
  • Several softsynths for MUS and MIDI playback, including an OPL softsynth for an authentic "oldschool" flavor.
  • High resolutions.
  • Quake-style console and key bindings.
  • Crosshairs.
  • Free look (look up/down).
  • Jumping, crouching, swimming, and flying.
  • Full-featured joystick/gamepad support under Windows.
  • Up to 8 player network games using UDP/IP, including team-based gameplay.
  • Support for the Bloodbath announcer from the classic Monolith game Blood.
  • Walk over/under monsters and other things.

Features

  • 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 Muhandes - 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

What's New

  • redirected maps need to be defined in order to redirect
  • Extended AddOptionMenu to allow inserting items before or after a specific menu item
  • Implemented AddListMenu MENUDEF directive to allow extending list menus.
  • adjust the sound limit distance by the attenuation - zero attenuation must mean infinite distance and for high attenuations the distance must be lowered for limiting to work as intended.
  • The limit for the Doom boss sounds was increased to 4 to compensate for this change.
  • fix HDR shader
  • add widescreen images for Doom
  • Linetrace properly reports 3D line hits as "middle" part
  • add 'writeini' console command to the menu.
  • add 'sv_alwaysspawnmulti' dmflags2
  • Added WorldThingGround event to hook into the actor at exact moment its corpse spawns gibs upon being crushed.
  • added a simple options menu
  • Raise SNDSEQ limit to 4096 sequences
  • Added code for rotating the PSprite, courtesy of IvanDobrovski.
  • changed border flat for Chex Quest, because at least CQ3 does not have FLOOR7_1.
  • use the border flat as console fallback instead of the title pic.
  • it is now possible to switch back to the main intro loop from the fullscreen console.
  • do not distort the background of the fullscreen console. Always draw the console on top of what the main loop currently displays with a translucent black overlay.
  • do not use the CONPIC for the fullscreen console as it tends to be more of a distraction than an asset when filling the entire screen.
  • Expose changing sidedef wallpart flags to zscript
  • added flag option menu item by Accensus.
  • made the vertical scroller widescreen aware as well.
  • adapt the bunny scroller to widescreen images.
  • fixed: Crushing generic floors must use crush mode 2.
  • fixed edge case where both Mancubus and Arachnotron have the same replacement and trigger a boss action.
  • Implemented ZScript abstract functions
  • Fix crossing multiple lineportals on same tic
  • Make bMaskRotation angles portal-aware
  • fixed infinite loop with list menus that have no selectable item.
  • changed order of identifier types to be checked to what it was in 4.3
  • added localization fallback handling for the BigFont in menu items and captions.
  • clear the button state when entering chat mode.
  • fixed side_t::SetSpecialColor.
  • fixed: Array.Insert must zero all elements before the new one if something gets inserted outside the existing range.
  • Added ThruBits.
  • Fixed: Server CVars did not immediately revert to their saved values upon loading a save file.
  • added a new 'Translate' struct which wraps the native methods of 'Translation'.
  • added missing decal assignments to the medium mace spheres for Heretic.
  • disabled negative gravity check.
  • moved console command line buffer tab completion into their own files.
  • layout fixes in load/save menu and confirmation screen.
  • ensure that sfxinfo_t is always fully initialized, regardless how the setup is performed.
  • script side support for menu transitions.
  • backport of menu transition code from Raze.
  • use Raze's layout for load and save game menus.
  • resorted base.zs and constants.zs so that all pure engine content but nothing else is in base.zs,
  • allow struct extensions in zscript.
  • added a customization hook class for the menu.
  • restructured the option menu drawer for easier replacement of the caption handler.
  • route menu's CheckGame call through SysCallbacks.
  • moved AutomapBindings export into common code.
  • use the backend's GameTicRate in the scripts where applicable.
  • add console command to reset a CVAR to default value
  • Add A_OverlayTranslation to set PSprite translations
  • Added PSPF_PLAYERTRANSLATED support to the software renderer
  • setup console handlers earlier to make them available during exit cleanup
  • clear current levels' snapshots explicitly if saved game loading fails
  • fixed: next secret map was ignored in ending sequence
  • Fixed a lift in Double Impact E1M7 that could not be used more than twice from the lower area.
  • Force node rebuilding for Double Impact E1M3 (bad subsector)
  • Force node rebuilding for Akeldama MAP26 (bad subsectors)
  • add option to texture hqresize resize model skins.
  • store extended sector info directly in FLevelLocals.
  • changed display in key binding menu to list all bound keys for an action, not just the first two.
  • fixed some text issues with Hacx and Harmony.
  • fixed: The scripted DrawFrame export should not be subjected to ui_screenborder_classic_scaling.
  • add an option to the ListMenu class to draw to a fixed virtual screen size.
  • MIDS-format MIDI support
  • libADL/libOPN update
  • backport of some enhancements for Cyrillic font support for Raze. Now the identical looking characters can be mapped to their Latin counterpart if they do not have their own glyphs.
  • Added NORANDOMPUFFZ flag to A_Saw
  • Fix weapon bobbing interpolation
  • Merged chat and scoreboard bindings into a "Multiplayer" submenu.
  • Reordered items by importance. Chat at position #2 was nonsense.
  • Moved weapon state actions from "Action" to "Weapon" menu, because the menu was already quite large and these are not standard actions.
  • added a new scaling mode to the level summary screen to scale to a given size.
  • Add MaxSlopeSteepness actor property
  • Add optional filtering to 'listmaps' CCMD output
  • Show CVar's default value in addition to current
  • forced node rebuild for two Memento Mori maps
  • Add grayed-out support to sliders
  • delete the FraggleScript thinker in G_NewInit.
  • cleanup of mouse input code and removal of all magic factors.
  • fixed sounds not stopping in sound sequences.
  • fixed sounds not being serialized for hub travel.
  • handle SoftLightLevel properly in the 2D drawer.
  • SDL joystick events now work while in menus
  • Implement return type covariance for ZScript virtual functions
  • Add keybindings presets.
  • Call SpecialMissileHit directly with zero damaging missiles last to ensure the function is actually triggered.
  • Add species parameter to A_RadiusThrust
  • fixed binding issues in OpenGL when resetting the samplers due to a texture filter change.
  • new texture format: ANM - this reads the first frame of a Build-ANM movie as a texture.
  • optimization of the patch texture checker - do not read in the entire file if checking the initial header is sufficient for rejecting it.
  • save FixedBitArrays as base64 in savegames.
  • allow indirections in the string table by prefixing the language string with '$$' the remaining text is interpreted as another string label to resolve.
  • added a proper 'sound finished' callback to the sound engine.
  • allow drawing fonts with explicit palette translations.
  • backported all new scaling and rotation options for the 2D drawer from Raze.
  • avoid killing timer precision when there's no time scale active.
  • fixed the integer readers' internal variables.
  • use a sector's special sprite color to colorize decals.
  • fixed: The IWAD record for Wadsmoosh was missing the IWAD default filename.
  • transmit the actual run mode in BT_RUN, because BT_SPEED was poorly designed.
  • fixed: CreateTexBuffer did not check the Inactive flag for the requested translation.
  • delete textures before starting the ENDOOM screen.
  • fixed height fudging for Heretic's sky textures.
  • immediately abort loading a savegame if object deserialization fails.
  • fixed: The font init code must check textures, not the file system for existence of required data.
  • fixed: Actors moved to STAT_TRAVELLING need to preserve their JUSTSPAWNED flag.
  • fixed: Artiflash is not translatable.
  • let non-solid teleporting actors not actually telefrag.
  • flat tile backgrounds in intermission now respects 'inter_classic_scaling' cvar
  • Fixed: extra player translation tables were not fully initialized.
  • Fixed decals not appearing when firing at walls point-blank
  • Exported FLevelLocals::ChangeLevel to ZScript
  • fixed constant propagation for operator && in ZScript
  • Fixed inability to achieve 100% kills in BTSX E2 MAP06
  • add missing SPAC constants
  • pass ScriptPosition down to color parser functions for better error reporting
  • Add FALLDAMAGE flag and add property to properly apply falling damage...
  • fixed setting of skill level via action special
  • Disallow sound to be played on destroyed actors
  • Add string table lookup to SECRETS lump handling
  • For status bars for the Unity iwad.
  • add support for the (as of now) newest version of the Unity re-releases
  • change BloodSmear2 decal to use correct graphic
  • Add Travelled virtual for PlayerPawn, akin to the same function for Inventory.
  • Add Pre/PostTeleport virtuals, for special handling of actor teleportation.
  • reset player's blocking line on traveling between levels
  • Time in coop tally
  • Add the DF2_NO_COOP_THING_SPAWNDM flag to prevent spawning MP things in coop.
  • fill array of objects with nulls on reserve
  • fixed getting state name with incomplete list of actor classes
  • Added ViewAngle/Pitch/Roll properties to actors.
  • Implemented Clock Class
  • Added A_SpriteOffset.
  • do not report missing camera target if its TID is zero
  • fix a bug in the png renderer of the software renderer with decals: if the palette remap is missing, don't attempt to use it. (fix null pointer)
  • added bounds checks for serialization of pointers
  • added initialization for line and sector portals. Resizing of portal arrays during serialization could lead to processing of junk data
  • update floor/ceiling for inventory items after traveling
  • Allow conversation menu cursor graphic replacement.
  • autosave and make screenshot only if there is no other game actions
  • Add PlayerSpawned() event
  • Fixed nested structs breaking the ZScript compiler under certain circumstances.
  • Fix error in Animated Doors where the Actor can be NULL
  • P_BounceActor now calls SpecialMissileHit before any other bouncing effects are processed. Return values are as such:
  • added native fullscreen mode option to Cocoa backend
  • fixed: UMAPINFO partime was multiplied by ticrate
  • demote pwad defcvars error to a warning
  • fixed: the minotaur spawned its floor flames regardless of the setting of compat_minotaur
  • Added $PitchSet for SNDINFO.
  • fixed incomplete special menu handling
  • add menu options for 'sv_alwaystally'
  • merge whitespaces before comparing Dehacked texts
  • Optimize UE1 vertex normal computation.
  • Fix am_zoom and adjust am_zoomout speed for the automap.
  • added more contrast to the Cream font color.
  • Rename MAP31 and MAP32 back in Doom 2: Unity Edition
  • when a damaging sector's damage interval is 0, instantly kill the player instead of dividing by 0
  • fixed freeze with StartSlideshow called for undefined intermission
  • add menudef entries for the scaling text.
  • Interpolate positions and angles in the automap for smoother appearance
  • exposed menu blur amount to engine interface
  • fixed leaking full VM frames
  • assigned endoom lump name after mapinfo is parsed
  • fixed crash when loading empty resource directory
  • Add color output for SDL backend using ANSI escapes
  • Rename 'Play GZDoom' button to something more generic to more easily allow for use in forks or other projects