Chocolate Doom Versions Save

Chocolate Doom is a Doom source port that is minimalist and historically accurate.

chocolate-doom-3.0.1

7 months ago

This is a point release that fixes a security vulnerability (CVE-2020-14983) where an unchecked field in the Chocolate Doom server logic could allow a malicious attacker to trigger arbitrary code execution against Chocolate Doom servers.

Thanks to Michał Dardas from LogicalTrust for discovering the vulnerability.

chocolate-doom-3.0.0

6 years ago

Chocolate Doom 3.0 is a new major revision. The main change is that the codebase has been ported to SDL 2.0. This brings a number of benefits, although there have also been some other minor changes (all listed below).

Huge thanks go to the entire Chocolate Doom team for working on the port to SDL2, and to all the testers who have found and reported bugs during its development.

General

  • All screen scaling is now performed in hardware, meaning that the game can run in arbitrary window sizes in high quality. It can also scale to very large resolutions sizes without using large amounts of CPU or suffering degraded performance (thanks Fabian).
  • It is now possible to switch between windowed and full screen modes while the game is running by pressing alt + enter (thanks Jon)
  • Windows binaries now ship with several previously-optional DLLs. This means it is now possible to take PNG screenshots and to use digital music packs (FLAC/Ogg Vorbis formats).
  • The game now remembers your preferred monitor and will start on the same monitor you were using the last time you played. Windows appear centered on the screen.
  • The OS X launcher was tweaked somewhat, and now uses proper path controls for choosing files. FreeDM was added as an IWAD.
  • Configuration files on Mac OS X and Unix are now stored in locations compliant with the XDG standard (thanks chungy):
    • On Unix: ~/.local/share/chocolate-doom/
    • On OS X: ~/Library/Application Support/chocolate-doom/
  • Icons when the game is running are now a higher resolution.
  • Keyboard input is improved and uses the new SDL input API; on systems with on-screen keyboards, this should activate the on-screen keyboard when it is appropriate.
  • Menu navigation with the joystick is now much more practical, and it's possible to bind a joystick axis to look up/down in games which support it (thanks Jon, Wintermute0110).
  • Several command line options were removed that were judged to be useless: -grabmouse, -novert and -nonovert. The mouse grabbing and novert settings can still be configured in the setup tool.
  • There is no longer any option in the setup tool to specify a screen resolution, since in full screen mode the game just runs at the desktop resolution without changing screen modes. If necessary, the config file options fullscreen_width and fullscreen_height can be used to explicitly set a screen resolution.
  • There is no longer a soft dependency on Zenity on Unix systems; the SDL API is now used to display error dialogs.
  • Joysticks are identified more precisely using GUID now.
  • A new parameter, -savedir allows users to specify a directory from which to load and save games. (thanks CapnClever)
  • The midiproc code from Eternity Engine has been imported, improving native MIDI playback on Windows and fixing a long-standing bug with music volume adjustment (thanks AlexMax, Quasar).
  • VGA "porch" emulation was added (thanks Jon).
  • The codebase now compiles with OpenWatcom (thanks Stephen Finniss).

Doom

  • The GOG install of Doom 3: BFG Edition is now detected (thanks chungy)
  • A -shorttics command line parameter was added that simulates recording a vanilla demo without actually recording a demo.

Hexen

  • The CD audio option for music playback has been removed; the CD playback API has been removed from SDL 2.0. However, it is possible to use digital music packs as an alternative.

Strife

  • voices.wad is now correctly loaded before PWADs (thanks @Catoptromancy)

libtextscreen

  • On OS X on machines with retina displays, text screens are rendered using a high detail font.
  • File selector widgets now look more visually distinctive.
  • There is now a convenience widget for conditionally hiding widgets.
  • Font handling was restructured to be based around PNG format fonts which are converted during the build and can be more easily edited.
  • Handling of code pages was cleaned up, so it is easier to change the code to work with a different code page now.
  • Lots of the UI code was changed to use UTF-8 strings.
  • File extensions when using the Zenity file selector are now case insensitive (thanks Jon).

chocolate-doom-2.3.0

7 years ago

General

  • Bash completion scripts are included (thanks Fabian)
  • The OS X launcher now supports the .lmp file format (thanks Jon)
  • Pitch-shifting from early versions of Doom, Heretic, and Hexen. is now supported (thanks Jon)
  • Aspect ratio-corrected 1600×1200 PNGs are now written (thanks Jon)
  • OPL emulation is more accurate (thanks Nuke.YKT)
  • DMX bugs with GUS cards are now better emulated (thanks Nuke.YKT)
  • The disk activity floppy disk icon is now shown (thanks Fabian, Jon)
  • Checksum calculations are fixed on big endian systems, allowing multiplayer games to be played in mixed little/big-endian environments (thanks GhostlyDeath, njankowski)
  • The NES30, SNES30, and SFC30 gamepads are detected and configured automatically by the Setup tool. The automap can also be configured to a joystick button (thanks Jon)
  • The vanilla limit of 4046 lumps per WAD is now enforced (thanks Jon, Quasar, Edward-san)
  • Solidsegs overflow is emulated like in vanilla (thanks Quasar)
  • Multiple capitalizations are now tried when searching for WAD files, for convenience when running on case sensitive filesystems (thanks Fabian).
  • A new command line argument, -strictdemos, was added, to allow more careful control over demo format extensions. Such extensions are now forbidden in WAD files and warning messages are shown.

Build systems

  • There is better compatibility with BSD Make (thanks R.Rebello)
  • “./configure --with-PACKAGE” checks were repaired to behave logically, rather than disabling the feature (thanks R.Rebello)
  • Games are now installed to ${bindir} by default, eg. /usr/local/bin, rather than /usr/local/games (thanks chungy)
  • Visual Studio 2015 is now supported (thanks Azarien)
  • SDL headers and libraries can now exist in the Microsoft Visual Studio project directory (thanks Quasar)
  • CodeBlocks projects were repaired by removing non-existent files from the project files (thanks krystalgamer)

Doom

  • Chex Quest’s level warp cheat (LEESNYDER##) now behaves more like like the original EXE (thanks Nuke.YKT)
  • It's now possible to start multiplayer Chex Quest games.
  • Freedoom: Phase 1 <= 0.10.1 can now be loaded with mods, with -gameversion older than ultimate (thanks Fabian, chungy)
  • The IWAD order preference for GOG.com installs matches vanilla Final Doom: doom2, plutonia, tnt, doom (thanks chungy)
  • There are better safety checks against write failures when saving a game, such as when the directory is read-only (thanks terrorcide)
  • Versions 1.666, 1.7, and 1.8 are emulated (thanks Nuke.YKT)
  • Crashes are now handled more gracefully when a linedef references nonexistent sidedefs (thanks Fabian)

Heretic

  • Map names were added for Episode 6, fixing a crash after completing a level in this episode (thanks J.Benaim)
  • Support for unlimited demo/savegames was added (thanks CapnClever)
  • Demo support is expanded: "-demoextend" allows demos to last longer than a single level; "-shortticfix" adjusts low-resolution turning to match Doom's handling, and there is now "-maxdemo" and "-longtics" support (thanks CapnClever)

Hexen

  • The MRJONES cheat code returns an identical string to vanilla, and enables fully reproducible builds (thanks Fabian)
  • An issue was fixed where the game crashed while killing the Wraithverge in 64-bit builds (thanks J.Benaim)
  • Support for unlimited demo/savegames was added (thanks CapnClever)
  • Mouse buttons for strafe left/right and move backward were added, as well as a "Double click acts as use" mouse option (thanks CapnClever)
  • Demo support is expanded: "-demoextend" allows demos to last longer than a single level; "-shortticfix" adjusts low-resolution turning to match Doom's handling, and there is now "-maxdemo" and "-longtics" support (thanks CapnClever)

Strife

  • Support was added for automatic loading of the IWAD from the GOG.com release of Strife: Veteran Edition on Windows (thanks chungy)
  • Jumping can now be bound to a mouse button (thanks Gez)
  • Gibbing logic was changed to match vanilla behavior (thanks Quasar)
  • Several constants differences from vanilla were fixed (thanks Nuke.YKT, Quasar)
  • When using -iwad, voices.wad from the IWAD’s directory is prefered over auto-detected DOS/Steam/GOG.com installs (thanks Quasar)

libtextscreen

  • The API for creating and managing tables and columns was simplified.
  • It's now possible to cycle through tables with the tab key.
  • Windows can now have multiple columns.

chocolate-doom-2.2.1

8 years ago
Chocolate Doom has not seen a great deal of "stable" patch
releases in its history. While the development tree sees major new
features and changes, the purpose of this release, and hopefully
others to follow like it, is to repair some deficiencies that
existed in 2.2.0.

General:
* Preferences for the OS X launcher are now stored with a unique
  name to not conflict with other applications. (thanks Xeriphas1994)
* Unix desktop entry files are now brought up to full desktop
  entry specification compliance. (thanks chungy, Fabian)
* Unix AppData entries are now included, allowing software centers
  to display detailed information about the engines. (thanks chungy)
* Partial XDG base directory specification compliance on Unix
  systems now exist to search for IWAD paths.  One benefit is that
  $HOME/.local/share/games/doom is now a valid location to store
  and automatically find IWADs. (thanks chungy)

Build systems:
* The Microsoft Visual Studio build system was not fully
  functional in 2.2.0 and has been fixed. (thanks Linguica)
* The autoconf build system checks for windres only for Windows
  toolchains.  Some Linux distributions mistakingly include the
  program in their native toolchains. (thanks Fabian)
* A compiler hint for packed structs has been added, which
  otherwise broke the games when built under recent GCC releases
  for Windows. (thanks Fabian)

Doom:
* The GOG.com releases of The Ultimate Doom, Doom II, and Final
  Doom are now detected and supported on Windows. (thanks chungy)
* An integer overflow was used in spawn angle calculation,
  undefined C behavior which broke with Clang optimization.
  (thanks David Majnemer for insight)

Setup tool:
* The help URL for the level warp menu now points to the proper
  wiki page, rather than the multiplayer page.
* The manifest has been updated for Windows 10 compatibility.
  (thanks chungy)

chocolate-doom-2.2.0

8 years ago
 * The Hexen four level demo IWAD is now supported. Thanks to
   Fabian Greffrath for his careful investigation and emulation of
   the demo game's behavior in developing this.
 * OPL music playback has been improved in a number of ways to
   match the behavior of Vanilla Doom's DMX library much more
   closely. OPL3 playback is also now supported. Thanks go to
   Alexey Khokholov for his excellent research into the Vanilla
   DMX library that enabled these improvements.
 * New gamepad configurations:
    - PS4 DualShock 4 (thanks Matt '3nT' Davis).
    - Xbox One controller on Linux (thanks chungy).
    - "Super Joy Box 7" USB/PC gameport adapter.
 * The Doom reload hack has been added back. See the wiki for more
   context on this: http://doomwiki.org/wiki/Reload_hack
 * The IWAD file from Strife: Veteran Edition is now detected
   automatically (thanks chungy).
 * It's now possible to build outside of the source directory
   (thanks Dave Murphy).
 * MSVC project files were brought up to date (thanks dbrackett16).
 * M_StringDuplicate() has been added as a safer replacement for
   strdup() (thanks Quasar). M_StringCopy() now handles short
   buffers more gracefully.
 * The netgame discrepancy window is now dismissed by pressing
   enter to proceed, not escape (thanks Alexandre-Xavier).
 * A couple of source files that were in the previous release and
   were GPL3 have been replaced by GPL2 equivalents. Previous
   releases that included these files should be retroactively
   considered GPL3.

Bug fixes:
 * A long-standing bug that could cause every display frame to be
   rendered twice was fixed (thanks Linguica, Harha, Alexandre-
   Xavier).
 * Lots of endianness fixes were integrated that were found by
   Ronald Lasmanowicz during development of his Wii port of
   Chocolate Doom, including a fix for a bug that could cause
   monsters to become partially invisible.
 * DeHackEd files without a newline character at the EOF are now
   correctly parsed (thanks Fabian).
 * An infinite loop that could occur in the weapon cycling code
   was fixed (thanks raithe, Fabian).
 * Mouse input triggered by cursor warp was fixed (thanks Super6-4).
 * Loop tags in substitute music files are ignored if both of the
   loop tags are equal to zero. This makes us consistent with
   other source ports that support the tags.
 * It's now possible to more conveniently play back demo .lmp
   files with names that end in the all-caps '.LMP' (thanks Ioan
   Chera).
 * Some code that accessed memory after freeing it was fixed. Two
   new parameters, -zonezero and -zonescan, were added to try to
   help detect these cases.
 * Mistaken assumptions about representations of booleans that
   affected some ARM systems were fixed (thanks floppes).
 * memcpy() uses on overlapping memory were changed to use
   memmove(), fixing abort traps on OpenBSD (thanks ryan-sg).
 * Hyphens in manpages were fixed (thanks chungy, Fabian).
 * Lots of compiler build warnings were fixed (thanks Fabian).

Setup tool:
 * The setup tool now has help buttons for its various different
   screens, which link to articles on the wiki that give more
   information (thanks to chungy for helping to put the wiki pages
   together).
 * A fix was applied for a buffer overrun that could occur if the
   user had lots of IWAD files installed (thanks Fabian).
 * A crash related to username lookup was fixed.
 * It's now possible to connect via the setup tool to multiplayer
   servers that are not listening on the default port (thanks
   Alexandre-Xavier).

Doom:
 * Sky transitions when emulating the id anthology version of the
   Final Doom executable were fixed (thanks Alexandre-Xavier,
   Fabian, chungy).
 * Structure fields in the stair-building functions were fixed to
   be deterministic, fixing a desync in mm09-512.lmp (thanks
   Fabian).

Hexen:
 * A bug with texture names that had long names was fixed (thanks
   ETTiNGRiNDER).
 * Minotaur spawn time is now stored in little endian format,
   fixing a bug that affected compatibility with Vanilla savegames
   on big endian systems.
 * Code that starts ACS scripts is no longer compiler-dependent.

Strife (all these are thanks to Quasar):
 * Sound priority was changed, so that the ticking sound that
   Stalker enemies make while active matches Vanilla behavior
   (thanks GeoffLedak).
 * Minor fixes to game behavior to match Vanilla, discovered
   during development of Strife: Veteran edition.
 * Behavior of descending stairs was fixed to match Vanilla.
 * Inventory items beyond the 8-bit range are now allowed in
   netgames.
 * Automap behavior better matches Vanilla now.
 * Multiplayer name changes were fixed.
 * Sound origin behavior for switches was fixed.
 * Teleport beacon behavior was fixed.
 * Default Strife skill level and screen size were changed to
   match Vanilla.
 * Bug was fixed where Rowan would not always take Beldin's ring.
 * Totally-invisible objects are now displayed correctly, and a
   Vanilla glitch with Shadow Acolytes is correctly emulated.
 * The level name for MAP29 (Entity's Lair) was fixed (thanks
   chungy).

libtextscreen:
 * The main loop now exits immediately once all windows are closed
   (thanks Alexander-Xavier).
 * The large font is no longer selected based entirely on screen
   size.

chocolate-doom-2.1.0

9 years ago
Chocolate Doom now supports high-quality substitute music packs
that are used in place of the original MIDI music tracks. I'm
hoping to put together high-quality recordings of the music for
all supported games using the Roland SC-55 synthesizer
originally used to compose Doom's music (thanks twipley and
MusicallyInspired).

Support for joysticks and gamepads has been significantly
improved in this version. Most gamepads should now work; if they
don't, please report a bug. A number of gamepads are now
automatically detected and configured automatically; if yours is
not, you can help by sending in details. See the following page:

  http://www.chocolate-doom.org/wiki/index.php/Adding_your_gamepad

OPL MIDI playback has been significantly improved, and problems
with most tracks should now be resolved. Multi-track MIDI files now
play back properly, MIDI tempo meta events are now supported and
problems with stuttering when playing certain tracks have been
fixed. If you still have problems with OPL playback, let me know.

Also of note is that Chocolate Doom now has a document that
describes the philosophy of the project and the reasoning behind
its design (see PHILOSOPHY distributed with the source).

Other new features:
 * There is now a -dehlump command line parameter to load Dehacked
   files contained inside WAD files (thanks Fabian Greffrath).
 * PNG format screenshots are now supported, and there is a
   dedicated key binding for taking screenshots without needing to
   always use -devparm (thanks Fabian Greffrath). The PrintScreen
   key can be used as a key binding (thanks Alexandre-Xavier).
 * There is now a config file variable (snd_maxslicetime_ms) to
   control the sound buffer size, and the default is more precise
   to reduce sound latency (thanks Holering).
 * You can now use an external command for music playback (thanks
   Holering).
 * All games now detect if you're tring to play using the wrong
   type of IWAD (doom.wad with Hexen, etc.) and exit with a
   helpful error message. A couple of users made this mistake
   after the 2.0 release introduced support for the new games.
 * The OS X app now associates with .hhe and .seh files.
 * There is now a -nodes parameter that automatically starts a
   netgame when a desired number of players have joined the game.
 * There is now more extensive documentation about music
   configuration (README.Music).
 * On Linux, a GUI pop-up is used when the game quits with an
   error to show the error message (thanks Willy Barro).
 * There are now Linux .desktop files for all supported games
   (thanks Mike Swanson).
 * The -geometry command line parameter can now be used to specify
   fullscreen or windowed modes, eg. -geometry 640x480w or
   -geometry 1024x768f. (thanks Mike Swanson)

Doom:
 * Minor workarounds were added to allow the BFG Edition IWADs to
   be used without crashing the game (thanks Fabian Greffrath).
 * GUS patch files included with the BFG Edition are now
   automatically detected.
 * The 'no fog on spawn west' Vanilla bug is now correctly
   emulated (thanks xttl).
 * Behavior of older versions of Doom back to v1.666 can now be
   emulated.
 * The new Freedoom IWAD names are now recognized and supported.
 * Freedoom's DEHACKED lump can now be parsed and is automatically
   loaded when a Freedoom IWAD file is used (thanks Fabian
   Greffrath). A new command line parameter, -nodeh, can be used
   to prevent this from being loaded.
 * Behavior of the M_EPI4 menu item is now correctly emulated
   based on game version (thanks Alexandre-Xavier).
 * IDCLEV up to MAP40 is now supported, to match Vanilla (thanks
   Alexandre-Xavier).
 * Level warping on the command line (-warp) to episodes higher
   than 4 is possible, matching Vanilla behavior (thanks plumsinus).
 * The -cdrom command line parameter writes savegames to the
   correct directory now, matching Vanilla Doom behavior (thanks
   Alexandre-Xavier).
 * The Doom II mission pack to use can now be specified manually on
   the command line with the -pack parameter (thanks chungy)

Heretic:
 * Weapon cycling keys for mouse and joystick were fixed (thanks
   Sander van Dijk).
 * The -timedemo parameter has been fixed, and -playdemo now
   handles full paths correctly.
 * A bug when panning the map was fixed (thanks Chris Fielder).
 * A savegame bug where plat_t structures were not restored
   correctly was fixed (thanks romeroyakovlev).
 * Rebinding of the pause key was fixed (thanks Fabian Greffrath).

Hexen:
 * Music workarounds have been added so that it is possible to
   play using the Mac version of the Hexen IWAD file.
 * Weapon cycling keys for mouse and joystick were fixed (thanks
   Sander van Dijk).
 * The -timedemo parameter has been fixed, and -playdemo now
   handles full paths correctly.
 * There are now key bindings to allow the artifact keys to be
   rebound (thanks Fabian Greffrath).
 * Rebinding of the pause key was fixed (thanks Fabian Greffrath).
 * Maximum level number was extended to MAP60, allowing
   multiplayer games using the Deathkings add-on.
 * The startup screen can now be aborted by pressing escape, like
   in Vanilla.
 * Desync when playing back DEMO1 was fixed (thanks alexey.lysiuk).

Strife:
 * 'Show mission' key is configured properly in setup (thanks
   Sander van Dijk).
 * Default music volume level now matches Vanilla (thanks
   Alexandre-Xavier).
 * Teleport beacon allegiance was fixed to match Vanilla (thanks
   Quasar).
 * The stair building code now more closely matches Vanilla
   (thanks Quasar).
 * Torpedo weapon changing behavior now matches Vanilla (thanks
   Quasar).

Cleanups:
 * The copyright headers at the top of all source files have been
   vastly simplified.
 * Unsafe string functions have been eliminated from the codebase.
   Thanks to Theo de Raadt for calling out Chocolate Doom by name
   (alongside many other packages) for still using unsafe functions
   like strcpy: http://marc.info/?l=openbsd-tech&m=138733933417096
 * vldoor_e enum values are now namespaced to avoid potential
   conflicts with POSIX standard functions.

Bug fixes:
 * WAD and Dehacked checksums are now sent to clients and checked
   correctly when setting up netgames.
 * A bug was fixed that caused sound not to work in multiplayer
   games (thanks to everyone who reported this, and for
   Alexandre-Xavier and Quasar for help in fixing it).
 * The "D_DDTBLU disease" bug affecting certain MIDI files has
   been fixed (thanks plumsinus, Brad Harding and Quasar).
 * Calculation of the -devparm 'ticker' dots was fixed to match
   Vanilla behavior (thanks _bruce_ and Alexandre-Xavier).
 * The PC speaker code now supports the full range of sound
   frequencies (thanks Gez).
 * Annoying "jumping" behavior when grabbing the mouse cursor was
   fixed.
 * The screen is now initialized at the native bit depth by
   default, to avoid problems with systems that don't handle 8-bit
   screenbuffers very well any more.
 * The --docdir argument to the configure script is now honored
   (thanks Jan Engelhardt).
 * Various issues with the build were fixed (thanks Jan
   Engelhardt and Fabian Greffrath).
 * Backwards parameters were fixed in the sound code (thanks
   proteal).
 * A crash was fixed when running fullscreen with the -2 parameter
   (thanks Fabian Greffrath).
 * A crash when using large values of snd_channels was fixed
   (thanks Alexandre-Xavier).
 * A resource leak in the BSD PC speaker code was fixed (thanks
   Edward-san).
 * Windows resource files were fixed for Windows 7 (thanks Brad
   Harding).
 * A hard to trigger crash caused by a realloc() in the WAD code
   was fixed (thanks Fabian Greffrath for debugging).
 * A bug has been fixed where Chocolate Doom would stay running
   in the background on Windows after quitting. SDL_Quit() is
   called now (thanks johnsirett, Brad Harding, Quasar).
 * String replacements in dehacked lumps can now be overridden
   if a subsequent dehacked patch replaces the same string.

libtextscreen:
 * Clicking on scrollbars now jumps to the correct position
   (thanks Alexandre-Xavier).
 * A use-after-free bug has been fixed where a click in a window
   that causes the window to close could lead to a crash (thanks
   DuClare).
 * Characters that are unprintable in the Extended ASCII chart
   are just ignored when they're typed, rather than appearing as
   an upside-down question mark (thanks Alexandre-Xavier).