HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
TTimo
doom3.gpl
C++2011–2020
TTimo / doom3.gpl

doom3.gpl

Doom 3 GPL source release

15Distinct people
16Mentions
0Explicit recommenders
4.6KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Doom 3 GPL source release

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 1:49:46 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year16 dated mentions

Observed mentions: 2011-11-22 22:26:42 UTC to 2020-10-28 15:41:41 UTC.

024682011-01-01 00:00:00 UTC to 2012-01-01 00:00:00 UTC (exclusive): 8 mentions; 2 submissions, 6 comments20112012-01-01 00:00:00 UTC to 2013-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20152016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2020

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20112011-01-01 00:00:00 UTC2012-01-01 00:00:00 UTC826
20122012-01-01 00:00:00 UTC2013-01-01 00:00:00 UTC303
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC000
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC202
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC101
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC000
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC000
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC000
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC000
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC202

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
(For information about this project on GitHub, see http://ttimo.github.com/doom3.gpl/) Doom 3 GPL source release ========================= This file contains the following sections: GENERAL NOTES LICENSE GENERAL NOTES ============= Game data and patching: ----------------------- This source release does not contain any game data, the game data is still covered by the original EULA and must be obeyed as usual. You must patch the game to the latest version. Note that Doom 3 and Doom 3: Resurrection of Evil are available from the Steam store at http://store.steampowered.com/app/9050/ http://store.steampowered.com/app/9070/ Other platforms, updated source code, security issues: ------------------------------------------------------ If you have obtained this source code several weeks after the time of release, it is likely that you can find modified and improved versions of the engine in various open source projects across the internet. Depending what is your interest with the source code, those may be a better starting point. Compiling on win32: ------------------- A project file for Microsoft Visual Studio 2010 is provided in neo\doom.sln Unfortunately, Microsoft Visual Studio 2010 Express Edition (e.g. the free release) will not be able to successfully compile the source, because 32 bit MFC is required. You will need the Microsoft DirectX SDK installed as well. If it does not reside in "C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)" you will need to update the project files accordingly. Compiling on GNU/Linux x86: --------------------------- The build system on GNU/Linux is based on SCons: http://www.scons.org/ Issue the scons command in the neo/ folder. Compiling on MacOS X: --------------------------- XCode 3.2 project is under neo/sys/osx/ Back End Rendering of Stencil Shadows: -------------------------------------- The Doom 3 GPL source code release does not include functionality enabling rendering of stencil shadows via the “depth fail” method, a functionality commonly known as "Carmack's Reverse". MayaImport: --------------------------- The code for our Maya export plugin is included, if you are a Maya licensee you can obtain the SDK from Autodesk. LICENSE ======= See COPYING.txt for the GNU GENERAL PUBLIC LICENSE ADDITIONAL TERMS: The Doom 3 GPL Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU GPL which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA. EXCLUDED CODE: The code described below and contained in the Doom 3 GPL Source Code release is not part of the Program covered by the GPL and is expressly excluded from its terms. You are solely responsible for obtaining from the copyright holder a license for such code and complying with the applicable license terms. Curl library --------------------------------------------------------------------------- lines file(s) neo/curl/*, neo/curl/README COPYRIGHT AND PERMISSION NOTICE Copyright (c) 1996 - 2004, Daniel Stenberg, <daniel@haxx.se>. All rights reserved. Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. JPEG library ----------------------------------------------------------------------------- neo/renderer/jpeg-6/* Copyright (C) 1991-1995, Thomas G. Lane Permission is hereby granted to use, copy, modify, and distribute this software (or portions thereof) for any purpose, without fee, subject to these conditions: (1) If any part of the source code for this software is distributed, then this README file must be included, with this copyright and no-warranty notice unaltered; and any additions, deletions, or changes to the original files must be clearly indicated in accompanying documentation. (2) If only executable code is distributed, then the accompanying documentation must state that "this software is based in part on the work of the Independent JPEG Group". (3) Permission for use of this software is granted only if the user accepts full responsibility for any undesirable consequences; the authors accept NO LIABILITY for damages of any kind. These conditions apply to any software derived from or based on the IJG code, not just to the unmodified library. If you use our work, you ought to acknowledge us. NOTE: unfortunately the README that came with our copy of the library has been lost, so the one from release 6b is included instead. There are a few 'glue type' modifications to the library to make it easier to use from the engine, but otherwise the dependency can be easily cleaned up to a better release of the library. OggVorbis --------------------------------------------------------------------------- neo/sound/OggVorbis/* neo/sound/OggVorbis/ogg/README neo/sound/OggVorbis/vorbis/README Copyright (c) 2002, Xiph.org Foundation Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions
Read the full README on GitHub

What Hacker News says

16 sources
Not terribly impressed. This wouldn't pass my code review: https://github.com/TTimo/doom3.gpl/blob/aaa855815ab484d5bd09... Function is 200 lines long, with 8 or so levels of nesting. Also "goto breakout" To address the objections below, the function reads from a file into a pixel buffer. It's not some tricky in-place update. That's a great candidate for a more functional style. Here's more ick: https://github.com/TTimo/doom3.gpl/blob/aaa855815ab484d5bd09... Surely that could be factored better. Down-voters go read Carmack's own article: https://gamasutra.com/view/news/169296/Indepth_Functional_pr... I think it's funny that people disagree here. This is exactly the stuff a modern linter would flag in an automated code review. Sure enough, here's a linter. I think this is essentially the same codebase: https://lgtm.com/projects/g/Edgarins29
Read the rest
/Doom3/context:cpp "Code quality: D" (on an A-F scale) And by the way, I have the utmost respect for Carmack. I just wouldn't hold up this codebase as great.
In Ask HN: Good C++ code bases to read?
> Garbage collection isn't a very good solution. I clearly didn't say it was. > They're often implemented poorly (the only good one being Go's) and they're slow. Do you have any evidence to support that? From my experiences and tests C# has been on par with C++ [1]. Of course it might be slightly slower but not enough for me to dismiss it. Java I think is a little bit slower - but my problem with Java is its memory requirements. > Garbage collection also necessitates a runtime environment to keep track of the data. Assuming they do this in a separate thread and you have an OS that schedules threads/processes in a sane way and the GC doesn't need to interact with the main thread - you should never notice a performance hit in your application. > What is not smart about smart pointers? They don't track the actual memory usage. John Carmack i
Read the rest
mplemented his own version of memory management for both Doom 3 [2] and Doom 3 BFG [3] presumably so he could get debugging information that isn't available with the C++11 smart pointers. I've implemented something similar to Doom 3's heap where I track the line and file of where the heap memory was allocated. The one thing I've noticed about developers today is that they have become lazy. Yeah - smart pointers will work correctly in simple cases and 90-99% of the time but it was written by humans so it may have bugs in it. Most C++ developers today refuse to run valgrind because they just assume their program doesn't leak memory when using shared_ptr/unique_ptr. I have personally found memory leaks in pretty popular open source projects. I would have told them about it - but I've found most C++ communities to not welcome new people and their ideas. [1] http://www.codeproject.com/Articles/212856/Head-to-head-benc... [2] https://github.com/TTimo/doom3.gpl/blob/8047099afdfc5c973faa... [3] https://github.com/id-Software/DOOM-3-BFG/blob/9c37079c16015...
In C++ Core Guidelines
TRUE * 1e6 It's horrible code that seems to indicate a lack of production coding standards. Errors, warnings and assertions need to be handled semantically sensibly, obviously and consistently. Most functions, errors should be handled individually and returned as they happen and the only condition at the very bottom should be success. My personal fav is anomaly(...) which checks for a nonfatal but suspicious condition. It always throws a warning on STDERR if it fails, even when compiled with -DNDEBUG. Example: https://gist.github.com/steakknife/9271284 If anyone wants to see decent examples of real C/C++ done right: nginx [0], doom3 [1], postgres [2], varnish [3] and openssh [4] References: [0] http://hg.nginx.org/nginx/file/0251f2f1dc93 [1] https://github.com/TTimo/doom3.gpl [2] https://github.com/postgres/postgres [3] https://www.varn
Read the rest
In Reflections on Curly Braces – Apple’s SSL Bug and What We Should Learn From It
Worth noting here regarding the patent issue with Creative. John Carmack said [1]: "The patent [2] situation well and truly sucks. We were prepared to use a two-pass algorithm that gave equivalent results at a speed hit, but we negotiated the deal with Creative so that we were able to use the zfail method without having to actually pay any cash. It was tempting to take a stand and say that our products were never going to use any advanced Creative/3dlabs products because of their position on patenting gaming software algorithms, but that would only have hurt the users." [1] http://newenthusiast.com/carmacks-reverse-still-an-issue-200... [2] The patent number 6,384,822, "Method For Rendering Shadows Using A Shadow Volume And A Stencil Buffer", can be read here: http://www.google.com/patents/about?id=Om0LAAAAEBAJ Here is the patent work-aro
Read the rest
und in the Doom 3 source code. Check out the RB_T_Shadow method in draw_common.cpp at line 1151 [3]: // patent-free work around if ( !external ) { // "preload" the stencil buffer with the number of volumes // that get clipped by the near or far clip plane qglStencilOp( GL_KEEP, tr.stencilDecr, tr.stencilDecr ); GL_Cull( CT_FRONT_SIDED ); RB_DrawShadowElementsWithCounters( tri, numIndexes ); qglStencilOp( GL_KEEP, tr.stencilIncr, tr.stencilIncr ); GL_Cull( CT_BACK_SIDED ); RB_DrawShadowElementsWithCounters( tri, numIndexes ); } [3] https://github.com/TTimo/doom3.gpl/blob/master/neo/renderer/... Further reading on the general topic can be found here: https://en.wikipedia.org/wiki/Shadow_volume
In Doom 3 Source code review
There is EASTL, though I've never used it myself. https://github.com/paulhodge/EASTL Valve's Source SDK makes extensive use of their own data structures, however it is very specialized. For example, linked lists are allocated as growing, contiguous blocks of memory to reduce cache misses. The Doom3 source code might be worth looking at, but I'm sure it's the same story. https://github.com/TTimo/doom3.gpl At the very least, there's a lot of great reference out there.
In Why should I have written ZeroMQ in C, not C++
Why not just get these changes upstream? Also, instead of forking it on GitHub, he just reuploaded the whole thing again (https://github.com/fabiensanglard/Doom3-for-MacOSX-) so that others cannot easily merge these changes. And neither in his repo nor in his post, there is a reference to the original repo (https://github.com/TTimo/doom3.gpl). Also, on the original repo, there were already a few fixes for Xcode4 and there is also a pull request with further fixes (https://github.com/TTimo/doom3.gpl/pull/13). I haven't checked it myself but it might actually work already. Btw., further development is probably going on here: http://www.iodoom3.org/ (http://news.ycombinator.com/item?id=3277150) (https://github.com/TimeDoctor/iodoom3)
In Build Doom3 on MacOSX with XCode4
It is a patent issue [1]. Check out draw_common.cpp [2] - the patent work-around is contained in the RB_T_Shadow method: // patent-free work around if ( !external ) { // "preload" the stencil buffer with the number of volumes // that get clipped by the near or far clip plane qglStencilOp( GL_KEEP, tr.stencilDecr, tr.stencilDecr ); GL_Cull( CT_FRONT_SIDED ); RB_DrawShadowElementsWithCounters( tri, numIndexes ); qglStencilOp( GL_KEEP, tr.stencilIncr, tr.stencilIncr ); GL_Cull( CT_BACK_SIDED ); RB_DrawShadowElementsWithCounters( tri, numIndexes ); } [1] See my previous comment for more info: http://news.ycombinator.com/item?id=2945889 [2] https://github.com/TTimo/doom3.gpl/blob/master/neo/renderer/...
In Doom 3 source released

Showing the 15 most recent of 16 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.