novolis-governance / extraction-briefs/wave-9-doom-dogfood.md
Wave 9 — Doom-lite dogfood (3D FPS demo)
Policies that keep the org coherent
dotnetgovernancenovolis
Target repos: novolis-math, novolis-raylib, novolis-physics (phase 2), novolis-dogfooding
Source inspiration: Frank.GameEngine FpsCameraState (redesigned, not copied)
Acceptance app: novolis-dogfooding/apps/DoomLite3D
Scope (in)
| Area | Novolis home | Notes |
|---|---|---|
| First-person yaw/pitch camera | `Novolis.Math.Geometry.FirstPersonCamera` | Renderer-agnostic; no Frank types |
| Grid wall collision (XZ) | `Novolis.Math.Geometry.GridCollision2D` | Uses `Novolis.Math.Arrays.DenseGrid<byte>` |
| 3D billboards + floor plane | `Novolis.Raylib` codegen (`World.DrawBillboard*`, `DrawPlane`) | Manifest + facade |
| Jam texture/billboard helpers | `Novolis.Raylib.Game.RayGameContext` | `LoadTexture`, `DrawBillboard` |
| Single-level demo game | `novolis-dogfooding/apps/DoomLite3D` | Dogfoods all of the above |
| Room mesh from wall grid (phase 2) | `Novolis.Physics.Collision.Simple.RoomMeshBuilder` | Optional BVH dogfood |
Out of scope
Frank.GameEngine.Rendering.*(per gameengine-reference-policy.md)- Classic 2.5D raycaster, WAD loader, multiplayer, audio bindings
GameObject,Scene,Scene2D,Sprite2Dengine graph
Dependencies
Novolis.Math.Geometry→Novolis.Math.Arrays(forDenseGrid<byte>in collision)- Dogfood app →
Novolis.Raylib,Novolis.Math.Arrays,Novolis.Math.Geometry - Phase 2:
Novolis.Physics+ math arrays
Assets
- Kenney Tiny Dungeon (CC0) — vendored subset under
apps/DoomLite3D/Assets/withCREDITS.md - No id Software Doom/Wolfenstein art
Done when
dotnet build/dotnet run --project apps/DoomLite3Dfromnovolis-dogfooding- New math APIs have TUnit tests
- Raylib billboards/plane in generated
World+RayGameContext CREDITS.mdlists every external file and source URL