Known Issues & Roadmap
What GalaxyEggbertCNA can do today (2026-07-04), what's next, and the full E3D-MIG task list.
easy-3d replaced by cna-engine (2026-10-20)
The helper library easy-3d (namespace
Easy3D) named on this page was removed on
2026-10-20 and replaced by the strict modules of cna-engine (CnaEngine::Core,
CnaEngine::Graphics). The easy-3d billboard blocker listed below no longer applies:
billboards are built with MeshBuilder::AddBillboard and drawn as a
GpuMesh. See Engine Integration.
What Works Today
- Opt-in CMake build (
-DGALAXY_EGGBERT_BUILD_CNA=ON), builds clean. - Loads a genuinely 3D, hand-authored
.vwrworld (worlds3d/world001.vwr). - Renders real, textured terrain across all Y layers — one cube per non-air block, via
Easy3D::CubeMesh/CubeMeshRenderer(since 2026-10-20: cna-engine'sMeshBuilder/GpuMesh). - Animated tiles (lava/crusher/saw/spike/water/fan/marine/temp) at 6 fps.
- Invisible, collision-only Blupi placeholder: arrow keys + Space, grid collision, 1-block step-up traversal, gravity.
Not Yet Implemented
| Area | Status | Blocked on |
|---|---|---|
| Blupi sprite rendering | Planned | Was: easy-3d BillboardBatch vertex builder + CNA renderer adapter (E3D-MIG-061/062). No longer a blocker: cna-engine's MeshBuilder::AddBillboard + GpuMesh |
| Object/pickup rendering | Planned | Billboard-vs-cube design decision (the easy-3d billboard blocker is gone) |
| HUD | Planned | CNA SpriteBatch usage (E3D-MIG-090…093) |
| Sound | Planned | Sound wrapper around CNA audio (E3D-MIG-080…083) |
| Real gameplay (hazards, enemies, pickups, exit) | Planned | E3D-MIG-100…107 |
| Save/load | Planned | Save-format reuse decision, not yet made |
| Chunk-radius streaming / face culling | Planned | E3D-MIG-057; not urgent until worlds get denser |
Known Bugs / Limitations
- Relative asset paths (
"worlds3d/world001.vwr","Content/icons/object-m.png") only work when run from the build output directory. - No face culling — every non-air block draws a full cube even where fully occluded by neighbors.
- Clean-exit-on-window-close path is only tested via forced kill so far, not verified end-to-end.
- 128 of 129 animated reference GIFs in
mobile-eggbert-reference/images/were found corrupted (frame-ghosting from a missing GIF disposal method); the tool is fixed but only 1 GIF has been regenerated so far — a documentation gap, not a code bug. - Background
region=→ filename mapping is unresolved for most values (mobile-eggbert-reference/05-backgrounds.md, only 3 of 38 characterized).
Near-Term Roadmap (from NEXT.md)
- Continue the mobile-eggbert-reference documentation rework (regenerate remaining animated GIFs, then sounds/backgrounds docs).
- Chunk-radius world streaming once denser hand-authored worlds exist.
- Author more
.vwrworlds beyond the single proof-of-concept. - Add face-culling/occlusion to
GETerrainRenderer. - Render Blupi as a billboard — the easy-3d billboard blocker is gone: cna-engine's
MeshBuilder::AddBillboard+GpuMeshcover it. - Verify
GalaxyEggbertCNA's clean-exit-on-window-close path.
Full E3D-MIG Task List (plan.md)
| Range | Status | Covers |
|---|---|---|
| E3D-MIG-000…005 | Done | Docs/analysis/direction-lock write-up |
| E3D-MIG-NEXT-001…006 | Done | Build option, skeleton tree, executable target, minimal clear-color loop |
| E3D-MIG-010…014 | Done | CNA/Easy3D/mobile-eggbert CMake inspection, asset-copy strategy decided |
| E3D-MIG-020…026 | Done | Option added, skeleton files, minimal Game subclass verified via smoke run |
| E3D-MIG-030…043 | Done | Asset build-time copy, shared sources, world file loads end-to-end, minimal GEWorldRuntime |
| E3D-MIG-050…055 | Done | CNA draw-path decision, CubeMesh, CubeMeshRenderer (easy-3d; replaced by cna-engine's MeshBuilder/GpuMesh on 2026-10-20), GETileAtlas, GETerrainRenderer, animated tiles |
| E3D-MIG-058…060 | Done | .vwr as default load path, GEBlupiController invisible movement + VerifyBlupiMovement tool |
| E3D-MIG-015 | Pending decision | Whether to request a mobile-eggbert add_library() target |
| E3D-MIG-056 | Standing constraint | Do not add a MeshCraft/mesh-import path |
| E3D-MIG-057 | Planned | Chunk-radius streaming |
| E3D-MIG-061…066 | Planned | Billboard vertex builder, CNA billboard adapter, render Blupi as billboard, Blupi state-machine port |
| E3D-MIG-070…074 | Planned | Render pickups/enemies as billboards, faithfulness checks |
| E3D-MIG-080…083 | Planned | Sound wrapper, 93-channel playback parity |
| E3D-MIG-090…093 | Planned | HUD via CNA SpriteBatch |
| E3D-MIG-100…107 | Planned | Gameplay porting: pickups, hazards, enemy stomp, respawn invincibility, exit gate, save/load |
| E3D-MIG-110…112 | Standing constraint | Keep Simple3D until CNA reaches parity, retire only then |
| E3D-MIG-120…124 | Out of scope | Optional items: 3D Blupi model, camera modes, Lua, renderer polish |
Source of Truth
NEXT.md and plan.md in the source repository root are authoritative
and change frequently — check them directly before starting new work.