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) Victor Nieto (Viti95)
Initial release 0.1 (2020-06-10, 3 months ago)
Latest release 0.666 (2020-09-15, 13 days ago)
Development status Active
Written in C, Assembly
Target Platform DOS
License GNU General Public License v2

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 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.

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 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.

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.
  • Separate binaries for Doom, Doom II and The Ultimate Doom, for 386 and 486 processors
  • 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)
  • 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

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)

Upcoming features[edit]

  • In-game toggleable menu options for parameters

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