Talk:Doom engine

Article start
As of 7 March 2004, this article has been restarted with new base content. All the content was copied over from this Everything2 writeup, with the author's permission. Credit to Simon "fraggle" Howard for his generous contribution of an excellent article! Fredrik 20:21, 7 Mar 2004 (UTC)

Licensees
The article mentions other games "produced by licensees" using the Doom engine but does not list them. Perhaps someone could list them, or make a list at another article and link it? Some guy 20:36, 13 October 2005 (UTC)

BSP? Really? I thought it was RayCasting?
Binary Space Partitioning was first used on Quake, not Doom. The Doom games uses a technology called RayCasting, also invented by Carmack. —Preceding unsigned comment added by 83.254.5.211 (talk) 09:01, 30 January 2009 (UTC)


 * Have you looked at the source code? Ray casting was used in Wolfenstein, doom uses BSP. It is a 2D BSP tree. Quake uses a 3D BSP tree with precalculated leaf-to-leaf visibility. 76.119.233.105 (talk) 20:13, 17 August 2009 (UTC)

RayCasting is the render algorithm, while BSP was the data structure used in order to narrow (minimize) the number of data to process each frame. —Preceding unsigned comment added by 201.222.214.252 (talk) 15:47, 13 November 2009 (UTC)
 * This is correct; an engine has more than one "thing" to it, after all... The type and the sorting/culling method are independent of each other. Among raycasters, Wolfenstein 3D used a simple block-check method. Meanwhile, Doom/Id Tech 1 used a BSP tree, and as another example, the Jedi engine was portal-based, relying instead on the relation between sectors to cull and prioritize. Furthermore, both the BSP tree and portal methods were equally adaptable to use for true-3D engines; id Tech 2/3 use BSP, while id Tech 4 uses portals. Nottheking (talk) 20:24, 10 March 2010 (UTC)

The Doom engine using ray casting seems to be a common misconception. The Doom renderer uses a BSP tree in order to find and sort wall segments from near to far. The segments are drawn near to far by finding the distance to the left and right side of the wall and using linear interpolation for the values in between. Where the walls are drawn, top and bottom occulsion variables are set up to prevent far walls from being drawn over near walls (which means the renderer has no over draw until masked (transparent) elements are drawn). The top and bottom of the wall is also used to generate visplane information for drawing the floors in a separate pass. At no point does the renderer ever have to cast a ray in order to determine where the first intersection is.

More details on this can be found here: http://fabiensanglard.net/doomIphone/doomClassicRenderer.php

It is worth noting that ray casting is slower than BSP rendering even back in the day. This is the reason Wolfenstein 3D for SNES and derived ports (3DO, Jaguar, and Mac) actually use a similar BSP renderer as well. There's a video of John Carmack playing Wolf3D where he mentions this IIRC. Blzut3 (talk) 22:22, 9 October 2013 (UTC)

Download
Does anyone know where can i download Doom engine for free ? Some guy 20:36, 31 Augest 2006 (UTC)

As a guess, ID's website. They certainly used to have their Wolfenstein engine there for download.

Really id Tech 1?
Hello. According to some other source, id Tech 1 is the Quake engine. On the id Software webpage, id Tech 2 only identify Quake 2 and they dont talk about the 1. So, are you sure about that? If any body can contact id to know the official reference, it can be very helpful. bayo 20:43, 7 November 2007 (UTC)
 * Well, the Quake 2 source is derived from the Quake 1 source. They're pitching this as technology to be licensed; there's no reason you would choose to license Quake 1 rather than Quake 2.  The source to Quake 1/2 are much more closely linked than others.  fraggle 08:58, 12 November 2007 (UTC)
 * Any way we cant choose the Doom or Quake 1 engine licence, id dont support it more. But, this explanation convince me. Thanks for your answer. bayo 13:45, 14 November 2007 (UTC)
 * As opposed to the official name of the engine, this should at most be added as a trivia note, as even if they eventually classified it as "id Tech 1" for general business reasons id Software does not use it as such in any way nor explicitly calls it thus anywhere. They don't offer "idTech1" deals to developers, for one. Who is like God? (talk) 00:49, 2 April 2008 (UTC)
 * The name id Tech 1 simply does not exist. Todd Hoellensted said in an interview that he considers id Tech 1 to be the Doom AND Quake 1 technology, but that can not be id Tech 1 because those are two fastly different game engines. Also you can't go like Quake 1 is simmilar enough to Quake 2 to be id Tech 2, so Doom is id Tech 1, because it's unsourced and such reasoning does not answer the question what number the other earlier three id engines (Commander Keen, Wolfenstein 3D and Shadowcaster, that weren't renamed either) would have. —Preceding unsigned comment added by 89.245.3.126 (talk) 09:28, 8 October 2009 (UTC)
 * Don't forget the Hovertank 3D engine as well. The "id Tech" naming system has quite a few holes in it. Personally, I think that to be safe, someone try and find an additional reference to id using the term "id Tech 1" to refer to Doom's engine. Nottheking (talk) 20:33, 10 March 2010 (UTC)
 * Every engine id Software has released source for since Quake shows that each engine is directly derivative to the engine before. I acknowledge that Quake and Quake 2 are closely tied: Quake even has #ifdef blocks of early Quake 2 code interspersed. The rationale that they should be considered the same engine due to close similarity, though, is plainly absurd in the same way that Doom is being called id Tech 1 when it has nearly zero relation code-wise to every engine succeeding it. I'm not sure if any of the Doom code was used in Quake whatsoever; Having done modifications on both engines, I don't think I recognized any shared code between them. Doom just doesn't fit into the direct engine lineage of Quake->Quake 2->Quake 3->Doom 3->RAGE. To me, Doom is no more related to the id Tech branding than Wolfenstein 3D and Commander Keen. — Preceding unsigned comment added by 99.5.214.24 (talk) 04:04, 23 August 2011 (UTC)
 * I am pretty sure that id Tech 1 = Quake 1 engine and not Doom engine! AFAIK Quake 1 was the very first real 3D shooter, while e.g. Duke Nukem 3D and the like were mere 2D shooters. But no matter matter how much (or little) the Doom1 engine has in common with the Quake engine, id tech1 = quake. ScotXW (talk) 12:19, 4 March 2014 (UTC)

Doom Sourceports?
Would a section on improvements (such as slopes, DECORATE/SOC scripts, OpenGL) from Doom Sourceports be acceptable on this page? - Snip3rNife (talk) 03:14, 19 February 2008 (UTC)

A very simple 3D engine that is equivalent to that of DOOM
When you have a sprite or wall texture, it has x,y and z coordinates. When it is not parallel to the coordinate axes, you could have to rotate it first or use the Bresenham algorithm to make it oblique while you store each pixel of the texture into a buffer (iteratively count through each x and y coordinate of the texture and put each pixel with x,y and z coordinates into a buffer). If the player has turned to the side angles, you rotate every pixel of the sprite in oppsite direction(around the position of the player) with the degree of the angle before the projection. You rotate around the coordinate axes using sinus and cosinus. It's like moving each pixel on a circle with the same angle. For example, rotation on the Y axis would be done that way: x2 = x*cos(angle)+z*sin(angle) z2=-x*sin(angle)+z*cos(angle) y2=y.

After the rotation, you put each pixel on the screen using a central projection. This is very simple. To get the x coordinate of the pixel on the screen, you subtract the X-position of the projection point ( here: the player X-coordinate) from the X-position of the object pixel. Then you divide it by the Z difference ( object Z minus player Z ) and multiply it with a scale factor. Then you do the same thing with the y coordinate. The results are then added to the middle of the screen and then you got it placed on the screen. For example:

x_screen=(screenXresolution/2)+scale*-1*(object.x-cam.x)/z; y_screen=(screenYresolution/2)+scale*-1*(object.y-cam.y)/z;

Values can also be signed. z is not the absolute z value, but the z value relative to the camera position. If z is signed, the pixel will not be put on the screen because it is behind the camera/player.

After you have brought the color value of the pixel on the screen, you store it's old z value for it's screen coordinates in a buffer. Next time a pixel will only be set on the same screen position when it's z value is smaller than the old one. And players and enemies are only scaled sprites. This is the reason they don't rotate when you try to watch them from the side. They could have used different sprites in dependance from the angle, but they were sloppily under time pressure.

You can also count the number of pixels set and abort the "rendering" when the screen is full. You'll have to combine that with a coarse sorting of the texture walls according to the distance from the player. A lot of speed can be gained when you size down the resolution of the textures the bigger their distance from the player is before transferring them into the buffer. Sometimes z is too small so there would be gaps on the screen. Then you only have to put several pixels next to each other (depending how many) on z and also note that in the z buffer.

Also the player movements will be done with a rotatable vector. You'll figure it out. It's simple. 10th grade knowledge.

External links modified
Hello fellow Wikipedians,

I have just modified 1 one external link on Doom engine. Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:
 * Added archive https://web.archive.org/web/20040224122359/http://www.3ddownloads.com:80/showfile.php3?file_id=7430 to http://www.3ddownloads.com/showfile.php3?file_id=7430

When you have finished reviewing my changes, please set the checked parameter below to true or failed to let others know (documentation at ).

Cheers.— InternetArchiveBot  (Report bug) 19:28, 15 December 2016 (UTC)

External links modified (January 2018)
Hello fellow Wikipedians,

I have just modified one external link on Doom engine. Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:
 * Added archive https://web.archive.org/web/20070305204905/http://www.doomworld.com/classicdoom/utils/editors.php to http://www.doomworld.com/classicdoom/utils/editors.php

When you have finished reviewing my changes, you may follow the instructions on the template below to fix any issues with the URLs.

Cheers.— InternetArchiveBot  (Report bug) 14:19, 22 January 2018 (UTC)