Tombstone
Z3DWarpEngineSDK
2001 โ 2002 ยท age 19โ20
What it was
A game engine packaged as a Windows DLL, in C++ with OpenGL and DirectInput 8, built because Jeff was tired of rewriting the same window code for every project. A game handed over eight function pointers: init, a 3D render, a 2D render, a per-frame update, and four for keys and mouse. The engine owned everything else: the window, the pixel format, the message loop, the input devices and the clock. Around that core sat a resource pack, a shared texture depot, a GUI screen stack, a callback-driven particle generator and a small math library in C. It died a skeleton. Loading a BMP showed a message box, the frustum test returned true before testing anything, and no game ever linked against it.
Wins, for the age
- At nineteen, Jeff found on their own the callback shape GLUT had already found in 1994: the game supplies behaviour, the library owns the loop. The primate just wanted to stop copying
WinMain. - Loose files on disk silently overrode entries in the resource pack, so development iterated without repacking and shipping needed no code change. Doom's PWADs had found the same trick; this ape found it again by being impatient.
- One 32-bit id named both the pack and the entry, so a texture could be requested once and opened later without a second lookup.
- A camera comment drew both axis conventions in ASCII after an evening lost to the difference. Writing down the thing that just hurt is a habit that lasts.
What it taught
- Where the engine boundary sits matters more than the engine. The code could be regenerated in an afternoon; the decision could not.
- Exporting STL containers across a DLL wall only works when both sides share a runtime. That debt comes due later, and it did.
- Copying SDK samples wholesale leaves their scaffolding behind, sometimes twice.
- A length read from a file and trusted into a 4,096-byte stack buffer is a hole. Every input from disk is an input from an adversary.
Genealogy
Ancestors: Ant Colony: resource packs and the urge to stop rewriting engine plumbing. Pack Unpack: disk-overrides-pack and the pack number in the id's top byte. Descendants: Cauldron v1: the engine-as-library instinct, done properly with real math and animation. GGPlus: the GUI screen stack grew into screens as scene-graph nodes.
Epitaph
Here lies Z3DWarpEngineSDK. It offered any game a window, a clock and a mouse for the price of eight function pointers, and no game ever came to collect.