Doom

   Doom is a legendary video [1]game released in December [2]1993, perhaps
   the most famous video game of all time, the game that popularized the
   [3]first man shooter genre and shocked by its at the time extremely
   advanced [4]3D graphics (yes, Doom is 3D) and caused one of the biggest
   revolutions in video game history. It was made by [5]Id Software, most
   notably by [6]John Carmack (graphics + engine programmer) and [7]John
   Romero (tool programmer + level designer) -- all in all the game was
   developed by about 5 to 6 men in about a year. Doom is sadly
   [8]proprietary, it was originally distributed as [9]shareware (a gratis
   "demo" was available for playing and sharing with the option to buy a full
   version). However the game engine was later (1999) released as [10]free
   (as in freedom) software under [11]GPL which gave rise to many source
   [12]ports and "improved" "[13]modern" engines (which however look like
   shit, the original looks by far the best, if you want to play Doom use
   Chocolate Doom or Crispy Doom, avoid anything with GPU rendering). The
   assets remain non-free but a completely free alternative is offered by the
   [14]Freedoom project that has created [15]free as in freedom asset
   replacements for the game. [16]Anarch is an official [17]LRS game inspired
   by Doom, completely in the [18]public domain. Doom named a whole
   generation of so called [19]doomers.

   Doom has a cool wiki at https://doomwiki.org.

   { Great books about Doom I can recommend: Masters of Doom (about the
   development) and Game Engine Black Book: Doom (details about the engine
   internals). ~drummyfish }

   Partially thanks to the release of the engine under a [20]FOSS license and
   its relatively [21]suckless design ([22]C language, [23]software
   rendering, ...), Doom has been [24]ported, both officially and
   unofficially, to a great number of platforms (e.g. [25]Gameboy Advance,
   [26]PS1, even [27]SNES) and has become a kind of de facto standard
   [28]benchmark for computer platforms -- you will often hear the phrase:
   "but does it run Doom?" Porting a Doom to any platform has become kind of
   a [29]meme, someone allegedly even ported it to a pregnancy test (though
   it didn't actually run on the test, it was really just a display). { Still
   [30]Anarch may be even more portable than Doom :) ~drummyfish }

   The major leap that Doom engine's graphics brought was unprecedented,
   however Doom was not just a game with good graphics, it had extremely good
   gameplay, legendary [31]music and art style and introduced the
   revolutionary [32]deathmatch multiplayer (the name deathmatch itself was
   coined by Romero during Doom multiplayer sessions), as well as a HUGE
   modding and mapping community. It was a success in every way -- arguably
   no other game has since achieved a greater revolution than Doom (no, not
   even [33]Minecraft, [34]World of Warcraft etc.). Many reviews of it just
   went along the lines: "OK, Doom is the best game ever made, now let's just
   take a look at the details...". The game's style was also extremely cool,
   as were the developers themselves, Doom was very appealing by its sincere
   style of simply being a pure metal/bloody/gory/demon slaying shooter
   without any corporate garbage stuffed in for more popularity that you'd
   see today. It was simply a game made by a few guys who did it the way they
   liked it without giving shit about anything, you won't see that anymore,
   Doom simply didn't pretend to be some kind of pompous, glorious work and
   so for example didn't give much shit about the backstory, everyone knew
   the game was about shooting and so they just made it a bloody shooter.
   John Carmack famously stated that story in a video game is like story in a
   porn movie -- it's expected to be there but not very important. Nowadays
   you may see developers try to imitate this attitude but it's always
   laughable, it will only ever be a pretense because the times when you
   could simply make a game with artistic freedom, without having to bow to
   managers, gender departments, publishers and other overlords are simply
   long gone.

   Doom wasn't the first 3D game, nor was it the first FPS, there were games
   before that were "more 3D" in a sense -- for example flight simulators --
   what was special about Doom was how it used all the graphic tricks and
   combined them with excellent gameplay to achieve unprecedented
   "immersion", such that many weren't ready for. For example Doom had fully
   textured environments, including floors and ceilings, which along with the
   fog and lighting made the player really feel present in the game despite
   not being able to e.g. look up and down.

   As stated, the game's backstory was simple and didn't stand in the way of
   gameplay, it's basically about a tough marine (so called Doomguy) on a
   Mars military base slaying hordes of demons from hell, all in a rock/metal
   style with a lot of gore and over-the-top violence (chain saws n stuff).

   Doom was followed by Doom II in 1995, which "content-wise" was basically
   just a data disc, the same game with new levels and some minor additions.
   Later there were some other releases and rereleases, notable is Doom III
   from 2004, Doom 2016 ("reboot") and Doom: Eternal (2020).

   Some [35]interesting things about Doom:

     * Someone created a Doom system monitor for [36]Unix systems called
       [37]psDooM where the monsters in game are the operating system
       [38]processes and killing the monsters kills the processes.
     * Someone (kgsws) has been [39]hacking the ORIGINAL Doom engine in an
       impressive way WITHOUT modifying the source code or the binary, rather
       using [40]arbitrary code execution bug; he added very advanced
       features known from newer source ports, for example an improved 3D
       rendering algorithms allowing geometry above geometry etc. (see e.g.
       https://yt.artemislena.eu/watch?v=RdbRPNPUWlU). It's called the Ace
       engine.
     * Doom sprites were made from photos of physical things: weapons are
       modified photos of toys, enemies were made from clay and then
       photographed from multiple angles (actually a great alternative to
       [41]3D modeling that's less dependent on computers and produces more
       realistic results).
     * The strongest weapon in the game is name BFG9000, which stands for
       "big fucking gun".
     * There is some kind of "controversial" Doom mod called Moon Man where
       you shoot feminists, jews, niggas and such, apparently it triggers
       [42]SJWs or something.
     * TODO

Doom Engine/Code

   See also [43]game engine for the list of different Doom engines.

   Doom source code is written in [44]C89 and is about 36000 [45]lines of
   code long. The original system requirements stated roughly a 30 MHz
   [46]CPU and 4 MB [47]RAM as a minimum. It had 27 levels (9 of which were
   shareware), 8 weapons and 10 enemy types. The engine wasn't really as
   flexible in a way "[48]modern" programmers expect, many things were hard
   coded, there was no [49]scripting or whatever (see? you don't fucking need
   it), new games using the engine had to usually modify the engine
   internals.

   The code itself looks alright, files are nicely organized into groups by
   their prefix (g_: game, r_: rendering, s: sound etc.). The same goes for
   the function names. There seems to be tabs mixed with spaces though,
   sometimes a bit shitty formatting, but overall MUCH better than [50]duke
   3D's code (well, that doesn't say much though). [51]Comments are
   plentiful.

   The game only used [52]fixed point, no [53]float!

   The Doom engine (also called id Tech 1) was revolutionary and advanced
   (not only but especially) video game graphics by a great leap, considering
   its predecessor [54]Wolf3D was really primitive in comparison (Doom
   basically set the direction for future trends in games such as driving the
   development of more and more powerful [55]GPUs in a race for more and more
   impressive visuals). Doom used a technique called [56]BSP rendering
   (levels were made of convex 2D sectors that were then placed in a BSP tree
   which helped quickly sort the walls for rendering front-to-back) that was
   able to render [57]realtime 3D views of textured (all walls, floors and
   ceilings) environments with primitive lighting (per-sector plus
   diminishing lighting), enemies and items represented by 2D [58]billboards
   ("[59]sprites"). No [60]GPU acceleration was used, graphics was rendered
   purely with [61]CPU (so called [62]software rendering, GPU rendering would
   come with Doom's successor [63]Quake, and would also later be brought to
   Doom by newer community made engines, though the original always looks the
   best). This had its limitations, for example the camera could not look up
   and down, there could be no tilted walls and the levels could not have
   rooms above other rooms. The geometry of levels was only static, i.e. it
   could not change during play (only height of walls could), because
   rendering was dependent on precomputed BSP trees (which is what made it so
   fast). For these reasons some call Doom "[64]pseudo 3D" or 2.5D rather
   than "true 3D", some retards took this even as far as calling Doom 2D with
   its graphics being just an "illusion", as if literally every 3D graphics
   ever wasn't a mere illusion. Nevertheless, though with limitations, Doom
   did present 3D views and internally it did work with 3D coordinates (for
   example the player or projectiles have 2D position plus height
   coordinate), despite some dumb YouTube videos saying otherwise. For this
   reason we prefer to call Doom a primitive 3D engine, but 3D nonetheless.
   Other games later used the Doom engine, such as Heretic, Hexen and Strife.
   The Doom engine was similar to and competing with [65]Build engine that
   ran games like [66]Duke Nukem 3D, Blood and Shadow Warrior. All of these
   90s shooters were amazing in their visuals and looked far better than any
   [67]modern shit. Build engine games had similar limitations to those of
   the Doom engine but would improve on them (e.g. faking looking up and down
   by camera tilting, which could in theory be done in Doom too, or allowing
   sloped floor and dynamic level geometry).

   Indexed ([68]palette) mode with "only" 256 colors was used for rendering.
   Precomputed color tables were used to make dimming of colors faster.
   Similarly a [69]look up table was used for [70]random number generation --
   two independent [71]pseudorandom generators are present, one is used for
   things such as visual effects while the other one is utilized purely for
   the game simulation so that it stays deterministic independently on
   graphics etc.

   Doom also has a [72]deterministic [73]FPS-independent physics which allows
   for efficient recording of [74]demos of its gameplay and creating [75]tool
   assisted speedruns, i.e. the time step of game simulation is fixed (35
   tics per second). Such demos can be played back in high quality while
   being minuscule in size and help us in many other ways, for example for
   verifying validity of [76]speedruns. This is very nice and serves as an
   example of a well written engine (unlike later engines from the same
   creators, e.g. those of [77]Quake games which lacked this feature -- here
   we can see how things get progressively shittier in computer technology as
   we go forward in time).

   There is no [78]antialiasing in the engine, i.e. aliasing can be noticed
   on far-away textures, but it is suppressed by the use of low-res textures
   and dimming far-away areas. There is also no edge smoothing (kind of
   misleadingly known as "antialiasing") in the geometry rendering, the
   engine is [79]subpixel accurate in rendering of the top and bottoms of the
   walls, i.e. the line these boundaries form may result in rasterizing
   slightly different pixels even if the start and end pixel is the same,
   depending on the subpixel position of the start and endpoint -- this
   feature doesn't much help in static screenshots but makes animation nicer.

See Also

     * [80]Anarch
     * [81]Duke 3D
     * [82]Gloom (fun [83]Amiga Doom clone)
     * [84]Quake
     * [85]Postal
     * [86]Jedi engine
     * [87]Build engine
     * [88]Chasm: The Rift
     * [89]raycasting

Links:
1. game.md
2. 1990s.md
3. first_person_shooter.md
4. pseudo_3D.md
5. id_software.md
6. john_carmack.md
7. john_romero.md
8. proprietary.md
9. shareware.md
10. free_software.md
11. gpl.md
12. port.md
13. modern.md
14. freedoom.md
15. free_culture.md
16. anarch.md
17. lrs.md
18. public_domain.md
19. doomer.md
20. foss.md
21. suckless.md
22. c.md
23. sw_rendering.md
24. port.md
25. gba.md
26. playstation.md
27. snes.md
28. benchmark.md
29. meme.md
30. anarch.md
31. music.md
32. deathmatch.md
33. minecraft.md
34. wow.md
35. interesting.md
36. unix.md
37. psdoom.md
38. process.md
39. hacking.md
40. arbitrary_code_execution.md
41. 3d_model.md
42. sjw.md
43. game_engine.md
44. c.md
45. loc.md
46. cpu.md
47. ram.md
48. modern.md
49. script.md
50. duke3D
51. comment.md
52. fixed_point.md
53. float.md
54. wolf3D.md
55. gpu.md
56. bsp.md
57. realtime.md
58. billboard.md
59. sprite.md
60. gpu.md
61. cpu.md
62. sw_rendering.md
63. quake.md
64. pseudo3d.md
65. build_engine.md
66. duke_3d.md
67. modern.md
68. palette.md
69. lut.md
70. rng.md
71. pseudorandomness.md
72. determinism.md
73. fps.md
74. demo.md
75. tas.md
76. speedrun.md
77. quake.md
78. antialiasing.md
79. subpixel.md
80. anarch.md
81. duke3d.md
82. gloom.md
83. amiga.md
84. quake.md
85. postal.md
86. jedi_engine.md
87. build_engine.md
88. chasm_the_rift.md
89. raycasting.md