Fallacies of Doom - Lessons learned from porting Doom 3 to Java
summary
Ports the Doom 3 C++ codebase into Java as djoom3, using the Lightweight Java Game Library (LWJGL) and tackling about 600,000 lines of game code; shows concrete pain points: lack of operator overloading, missing unsigned primitives and structlike memory layouts, expensive boxing/primitive conversions, and C++ macros/unions that require workarounds. Demonstrates a running build with physics and rendering but chases subtle differences (float precision, inlining, JVM debug/watchpoint slowness) and a color-shift bug traced to an NVIDIA driver quirk.
AI-written summary · about
chapters (16)
- 0:00Intro
- 1:18Boring intro: history
- 9:16Operator overloading
- 13:14Unsigned primitives
- 15:48Immutability, const vs final
- 20:33Grandfather inheritance
- 24:45Death by Macros
- 30:24Hungarian Camels
- 35:22CHOOSE THE FORM
- 36:14Destructor
- 37:46Default arguments
- 39:20Inlining
- 42:06The memory watcher
- 44:465.1.2. Widening Primitive Conversion
- 46:55Floating point operator precedence
- 49:54A backwards compatible story?
related talks
52mFallacies of Doom Lessons learned from porting Doom 3 to Java
24mFrom C to Ruby: Porting Doom
56mFrom Hell to Heaven: Porting Doom to MAUI
29mHow I Ported Doom to the Browser with WebAssembly
49mCoding video game as a hobby, possible and (kinda) easy with Java!
56mFrom Hell to Heaven: Porting Doom to MAUI
46mFrom Hell tp Heaven: Porting Doom to MAUI
23mDOOM Postmortem: 30 Years of DOOM
