FastDoom

FastDoom is a source port created by Victor Nieto, alias Viti95. Its goal is to improve the performance of the Vanilla Doom engine on lower end computer systems, in particular the and  class of processors. It does so by removing features deemed unnecessary, reducing rendering complexity and general engine optimization.

It includes code from other ports, such as Crispy Doom, MBF and Russian Doom, as well as the original Sony PlayStation and Atari Jaguar Doom ports.

History
FastDoom got its first 0.1 release on June 10, 2020. A direct port of the PCDoom-v2 code, very few optimizations were in play. Version 0.2 followed three days later with the first few optimizations and the ability to use transparency from the Sega Saturn version of Doom, as well as the option to render visplanes (both ceiling and floors) without textures.

After bugfix release 0.21, version 0.3 followed as a major milestone, being released on June 18, 2020. It brought in an in-game FPS viewer, taken from Russian Doom and rewritten in fixed-point math, along with a low resolution mode and the option to only show objects that are not far away from the player, an application of. With mode engaged, FastDoom can maintain nearly 25 fps on a lower end 486 processor.

A new release followed over a month later. With version 0.4, a build for 386 processors was included, along with mono sound support and the option to use lower quality sounds in general. The included extender was also replaced, from DOS/4GW to DOS/32A, providing a sizable performance increase along with various minor optimizations. With version 0.5, the Potato mode was not only made faster, it is now also a native mode that does not require Low Detail mode to be enabled. It also brought back gamma correction alongside several rendering optimizations.

Version 0.6 not only included a lot of internal rendering optimizations, but it also brought diminished lighting back to flat surfaces, and a new option to disable it as well, which greatly sped up performance. For 386 based computers, an option was introduced to disable the screen melt effect while loading new levels, as this effect is very slow on this hardware. With version 0.666, all display and sound options were moved to the options menu along with new options for the adjustment of screensizes and various engine optimizations.

Legacy
Even without using the low-resolution modes, FastDoom generally performs faster than the stock executable due to optimization efforts. Viti95 tested the performance of FastDoom compared to stock Doom 1.9 in a benchmark, using the 0.2 release. Doom     Doom     FastDoom  FastDoom     FastDoom         FastDoom     FastDoom     FastDoom 1.9      1.9      0.2       0.2          0.2              0.2          0.2          0.2      Audio     NoAudio  Audio     Audio        Audio            Audio        NoAudio      NoAudio FlatSurfaces FlatSurfaces    FlatSurfaces              FlatSurfaces FlatTransparency Sega Saturn              Sega Saturn transparency             transparency FPS  19.56     21.68    22.44 	   25.77 	25.86 	         26.02 	      24.79 	   29.05 Gain 100.00%  110.20%   114.70%   131.70%      132.20%          133.00%      126.74%      148.52%

Features

 * Separate binaries for Doom, Doom II and The Ultimate Doom, for 386 and 486 processors
 * FPS ingame viewer. Enabled with
 * FPS calculation after timedemo runs
 * Render visplanes (ceiling and floors) without textures and with diminished lighting. Enable with
 * Render visplanes (ceiling and floors) without textures and diminished lighting. This will increase performance significantly compared to the option. Enable with
 * Can render spectres and invisible objects like real transparent objects (harder to see, a little faster to render). Enable with
 * Render sky as a flat fixed color. Enable with
 * Option to disable the screen melt effect while loading new levels. This is very useful for 386 based processors where this effect is very slow. Enable with
 * Ability to render spectres and invisible objects like the Sega Saturn port did. Enable with
 * Option to show only objects that are not far away from the player. All the enemies are still rendered as they're important. This is a form of culling. Enabled with
 * PC Speaker uses all sounds available (just for fun!)
 * Lots of optimizations to make the game run faster / smoother (executable is smaller than regular Doom)
 * Removed low memory limit (may cause crashes with low RAM)
 * A rendering mode. It renders the full scene with a quarter width resolution, to a maximum of 80x200. 16-bit ISA video cards can now play the game in full screen at increased performance. A Western Digital Paradise PVGA1A ISA (1989) can render the game at a constant >25 fps on a 486DX-50. Enabled with  command parameter
 * Can allow more than 8Mb of memory allocation. Enabled with
 * Autorun support, enabled by pressing the F11 key
 * Option to see the initialization process during startup. Enabled with parameter
 * Mono sound support. Enabled with parameter
 * Low quality sound support (8000Hz instead of 11025Hz). Enabled with parameter
 * Replaced standard extender with  extender providing significant speed ups
 * Partial DeHackEd support like stock Doom, making WAD sets like Back to Saturn X possible but not, for example, REKKR. FastDoom is developed to be as compatible as possible to the original source code, but patches made for the original Doom executables may not work as there are lots of internal changes to make it faster. Since FastDoom's executable differs from the original, offsets to functions and data can and will be different also.
 * Gamma correction support (brought back in 0.5)

Removed features
In addition to several new features been implemented, FastDoom also removes a number of features. These are:
 * Network gaming support
 * Joystick support
 * Y mouse movement (move forward/backwards)

Upcoming features

 * In-game toggleable menu options for parameters

Gallery
Showcase of various Doom II levels rendered in FastDoom 0.4, using the 386 binary and with the parameters in low resolution mode (80x200 fullscreen).