Tombstone
zenerd
Aug 2001 – Dec 2001 · age 19
What it was
The umbrella name for four engine parts Jeff wrote in the second half of 2001, all living in one C++ namespace and waiting for an engine that would need them. A model library defined a binary skinned-model format: materials, a bone hierarchy, and an interleaved vertex array holding both rest and animated positions, with four integer bone weights per vertex that summed to 20,000. A console scratchpad held vector and quaternion maths, a handle-based compacting heap, and a swept-sphere collision solver. A converter squared any image to a power of two and wrote it behind a two-byte header. And a set of MFC editor views, a timeline, a sequence list, an action grid and a virtual list with in-cell editing, never got a project of their own. The pieces agreed on a namespace. They never met.
Wins, for the age
- At nineteen, stored four fixed-point bone weights per vertex, concurrent with the normalized byte weights of Direct3D 9 (2002).
- Designed a binary asset format around the runtime's memory layout rather than the editor's objects, and wrote the reader as the spec.
- Found the handle-based compacting heap on its own, the idea the classic Mac OS Memory Manager (1984) had already shipped. A teenage primate rediscovering a seventeen-year-old trick, alone, is still a primate thinking clearly.
- Solved swept sphere collision as a quadratic in relative velocity, small and correct, the seed of a physics step.
What it taught
- A library is only real when something links it. Splitting an engine into libraries before there is an engine produces libraries that never meet.
- A handle heap is easy to write and hard to use, because every pointer into it becomes a liability.
- Keep all state behind a document interface and the views stay dumb and reusable.
- Build after every edit. The model library's final change broke a build that had been clean hours before.
Genealogy
Ancestors: Evolution 4K: a hand-rolled model format and a swept-sphere collision solver. Z Terrain Editor: the OpenGL editor habit, grown into MFC views. Descendants: Cauldron v1: skinning and model formats in a real engine. Rage: skinned meshes with four bone weights, finally animated. Z Character Exhibitor: the timeline and bone editing grown into a tool. Zheap: the compacting handle heap as its own library.
Epitaph
Here lies zenerd, an engine's worth of parts that agreed on a namespace and nothing else. The bone weights summed to exactly 20,000, every time.