E1M1: Hangar (Doom) in 80x200 fullscreen low resolution, achieved through the -potato, -flatsurfaces, -flatsky and -flatshadow parameters.

Codebase PCDoom-v2
Developer(s) Víctor Nieto (Viti95)
Initial release 0.1 (2020-06-10, 16 months ago)
Latest release 0.8.4 (2021-07-01, 3 months ago)
Development status Active
Written in C, Assembly
Target Platform DOS
License GNU General Public License v2

FastDoom is a source port created by Víctor Nieto, alias Viti95. Its goal is to improve the performance of the Vanilla Doom engine on lower end computer systems, in particular the 386 and 486 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.


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 potato mode and the option to only show objects that are not far away from the player, an application of occlusion culling. With potato 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.

With version 0.7 came support for for Stereo OPL2, OPL3 and Stereo OPL3 music support and Disney Sound Source (also Tandy Sound Source) sound support. The resulting image output now supported VSync. It was however with Version 0.8, released April 14, 2021 that several new features were to be implemented. A new simplified status bar was implemented, but also support for CGA, EGA and VGA cards was added in alongside two text mode renderers: FDOOMT25.EXE for CGA, EGA and VGA in 80x25 resolution in 16 colors in a virtual 80x50 resolution and FDOOMT50.EXE for VGA only video cards in native 80x50 resolution.

0.81 added several new VGA/CGA/EGA video modes and a basic IWAD selector, whereas 0.82 and 0.83 are bugfix releases. The currently latest version 0.84 adds support for new legacy sound cards.


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%


Outside view of E1M1: Hangar (Doom), highlighting the solid color sky.
  • Unified binary for Doom, Doom II and The Ultimate Doom, for 386 and 486 processors (since version 0.8)
  • CGA, EGA and VGA support on supported video cards. For CGA cards, it is enabled with "-cga" parameter
  • Text mode rendering using two separate binaries: FDOOMT25.EXE for CGA, EGA and VGA in 80x25 resolution in 16 colors in a virtual 80x50 resolution and FDOOMT50.EXE for VGA only video cards in native 80x50 resolution
    • Conversion from 256 colors to 16 colors is enabled with "-fixcolors" parameter
  • Support for VBE 2.0 modes (320x200, 8 bit color support required) to enhance performance on modern video cards using two additional separate binaries: FDOOMVBR.EXE, which uses basic real mode VBE 2.0 support which is the most compatible, and FDOOMVBP.EXE, which uses protected mode extensions, but is less stable. Only works in high detail mode
  • FPS ingame viewer. Enabled with "-fps"
  • FPS calculation after timedemo runs
  • Render visplanes (ceiling and floors) without textures and with diminished lighting. Enable with "-flatsurfaces"
  • Render visplanes (ceiling and floors) without textures and diminished lighting. This will increase performance significantly compared to the "-flatsurfaces" option. Enable with "-flattersurfaces"
  • Can render spectres and invisible objects like real transparent objects (harder to see, a little faster to render). Enable with "-flatshadows"
  • Render sky as a flat fixed color. Enable with "-flatsky"
  • 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 "-nomelt"
  • Ability to render spectres and invisible objects like the Sega Saturn port did. Enable with "-saturn"
  • 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 "-near"
  • 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 potato 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 "-potato" command parameter
  • Can allow more than 8Mb of memory allocation. Enabled with "-ram"
  • Autorun support, enabled by pressing the F11 key
  • Option to see the initialization process during startup. Enabled with "-init" parameter
  • Mono sound support. Enabled with "-mono" parameter
  • Low quality sound support (8000Hz instead of 11025Hz). Enabled with "-lowsound" parameter
  • Replaced standard DOS/4GW extender with DOS/32A 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)
  • In-game toggleable menu options for parameters
  • Ability to force screen sizes, from 3 to 11. Enabled with "-size parameter
  • Option to reverse Left/Right stereo speakers. Enabled with "-reverseStereo" parameter
  • Benchmarks results can be saved in a file called "bench.txt". This allows users to run multiple benchmarks and save them in a single file. Enabled with "-logTimeDemo parameter
  • Stereo OPL2, OPL3 and Stereo OPL3 music support (Adlib uses basic OPL2, Sound Blaster tries to detect the best possible option)
  • COVOX sound support, 8 bit, 11 KHz, mono
    • Disney Sound Source (also Tandy Sound Source) support
  • PC Speaker sound support, 1 bit, 11 KHz, mono
  • Vsync support. Enabled with "-vsync parameter
  • Doom 2: BFG Edition version support
  • New option to render the status bar background a little bit faster. Enabled with "-simplestatusbar parameter. It replaces the status bar background with a simple grey color.
  • New command line parameters that disable some optimizations: "-normalsurfaces, "-normalsky, "-normalshadows, "-normalsprites, "-stereo, "-melt, "-capped, "-novsync, "-nofps

Removed features[edit]

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)


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

External links[edit]

Source code genealogy
Based on Name Base for
PCDoom-v2 FastDoom None