FastDoom

From DoomWiki.org

FastDoom
E1M1Hangar.PNG

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, 4 years ago)
Latest release 1.0.2 (2024-09-19, 14 days ago)
Development status Active
Written in C, Assembly
Target platform DOS
License GPLv2+
Source Repository

(Git)

GitHub

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 International Doom, as well as the original Sony PlayStation and Jaguar Doom ports.

History[edit]

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 International 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 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.8.1 added several new VGA/CGA/EGA video modes and a basic IWAD selector, whereas 0.82 and 0.83 are bugfix releases. 0.8.4 adds support for new legacy sound cards. From this point on Nieto started on implementing new modes again. At version 0.8.5, three new executables were introduced: FDOOMT1.EXE for a 40x25 16 color text mode, FDOOMT12.EXE for the same but with a virtual resolution of 40x50 and FDOOMVBD.EXE for VBE 2.0 cards with LFB triple buffering and direct rendering on the video card. Another three executables were introduced at 0.8.6 that implement support for vertical monitors: FDOOMV.EXE for a planar 320x250 vertical mode stretched from the base 320x200 screen, FDOOMV2.EXE for the same mode but the base image is centered in the screen, creating black borders, and a additional text mode executable: FDOOMT52.EXE for 80x50 16 colors text mode in a virtual resolution of 80x100.

With version 0.8.7, two new video modes were introduced: FDOOMPCP.EXE brings support for the Plantronics Colorplus card, supporting 320x200 resolution and 16 colors. Also included was FDOOMCVB.EXE, a CGA composite mode with 160x200 resolution and 16 colors. Version 0.8.8 introduced FDOOMC16.EXE, a mode with 160x100 resolution and 16 colors, FDOOMV16.EXE, a VGA mode with 160x200 resolution and 16 colors and FDOOME.EXE, a EGA mode with 640x200 and the dithering of 16 colors. It also included Sound Blaster Direct support, which does not require an IRQ interrupt or DMA, and is limited to 8-bit mono sound.

Legacy[edit]

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[edit]

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)
  • PC Speaker uses all sounds available
  • 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
  • Sound Blaster Direct support. This does not require an IRQ interrupt or DMA, 8 bit, mono
  • Doom 3: BFG Edition version support
  • 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.
  • 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
  • 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)
  • In-game toggleable menu options for parameters
  • FPS calculation after timedemo runs

Visual features[edit]

  • CGA, EGA and VGA support on supported video cards. For CGA cards, it is enabled with "-cga" parameter
    • Later releases include FDOOMCVB.EXE, a CGA composite mode with 160x200 resolution and 16 colors and FDOOMC16.EXE, a mode with 160x100 resolution and 16 colors, FDOOMV16.EXE, a VGA mode with 160x200 resolution and 16 colors and FDOOME.EXE, a EGA mode with 640x200 and the dithering of 16 colors
  • Support for the Plantronics Colorplus video card through FDOOMPCP.EXE, supporting 320x200 resolution and 16 colors
  • Text mode rendering using multiple 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. Later additions include FDOOMT1.EXE for a 40x25 16 color text mode, FDOOMT12.EXE for a 40x25 16 color text mode but with a virtual resolution of 40x50, FDOOMT52.EXE for a 80x50 16 colors text mode in a virtual resolution of 80x100
    • 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 multiple additional separate binaries: FDOOMVBR.EXE, which uses basic real mode VBE 2.0 support which is the most compatible, FDOOMVBP.EXE, which uses protected mode extensions, but is less stable and which only works in high detail mode. Later additions include FDOOMVBD.EXE for VBE 2.0 cards with LFB triple buffering and direct rendering on the video card.
  • Support for vertical monitors (Inspired by Toom) with page flipping support through multiple separate binaries: FDOOMV.EXE for a planar 320x250 vertical mode stretched from the base 320x200 screen, FDOOMV2.EXE for the same mode but the base image is centered in the screen, creating black borders
  • FPS ingame viewer. Enabled with "-fps"
    • Additional FPS readout through the debug port (0x80). Enabled with "-debugPort"
  • Minimalistic HUD
  • 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 close to the player, with all the enemies are still rendered. Enabled with "-near"
  • 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
  • Gamma correction support (brought back in 0.5)
  • Ability to force screen sizes, from 3 to 11. Enabled with "-size parameter
  • Vsync support. Enabled with "-vsync parameter
  • 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)

Gallery[edit]

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