Project Structure

All important directories and files, as they exist today.

Root Layout

galaxy-eggbert/
├── CMakeLists.txt          ← main build configuration (both targets)
├── CLAUDE.md                ← direction lock + developer guidelines
├── NEXT.md                  ← current status / roadmap
├── plan.md                  ← full task list, incl. E3D-MIG-* (CNA migration)
├── easy3d.md                ← full Easy3D design analysis
├── README.md
├── World Format.md           ← .vwr binary format spec
├── LICENSE
│
├── include/GalaxyEggbert/    ← engine-agnostic public headers
│   ├── Worlds/                 ← World, Chunk, Block, BlockMetadata, VoxelConfig, BinaryIO, BitPacking
│   ├── def/                    ← gameplay enums (BlupiAction, ObjectType, SoundChannel, …)
│   ├── BlockTypes.hpp, Def.hpp, GameConstants.hpp
│
├── src/GalaxyEggbert/Worlds/  ← implementation of the engine-agnostic world/voxel model
│
├── src/GalaxyEggbertSimple3D/ ← current playable reference target (Simple3D/U3D)
│   └── Game/                    GEBlupiController, GEBridgeSystem, GECameraRig, GEDecorSystem,
│                                 GEExploSystem, GEHud, GESound, GETerrainRenderer, GEWorldRuntime
│
├── src/GalaxyEggbertCNA/      ← long-term target (this documentation's focus)
│   ├── main.cpp
│   ├── GalaxyEggbertCnaGame.hpp/.cpp
│   └── Game/                    GEBlupiController, GETerrainRenderer, GETileAtlas, GEWorldRuntime
│
├── mobile-eggbert-reference/  ← factual catalog of mobile-eggbert's 2D content (docs + images/)
│
├── tools/                     ← GenerateSampleWorld3D, VerifyBlupiMovement (engine-agnostic)
├── worlds3d/                  ← hand-authored 3D .vwr worlds (world001.vwr)
├── worlds/                    ← mobile-eggbert-format .txt sample levels
├── Content/                   ← copied game assets (icons/, sounds/, backgrounds/)
├── tests/GalaxyEggbert/Worlds/ ← GoogleTest unit tests for the Worlds data model
│
├── cmake/toolchains/mingw-w64.cmake
├── build-cna/                 ← generated; GalaxyEggbertCNA build
└── cmake-build-debug/          ← generated; GalaxyEggbertSimple3D build

src/GalaxyEggbertCNA/ Files

FileRole
main.cppConstructs and runs GalaxyEggbertCnaGame
GalaxyEggbertCnaGame.hpp/.cppCNA Game subclass — LoadContent/Update/Draw
Game/GEWorldRuntime.hpp/.cppWorld loading (.vwr, secondary .txt), tile-animation phase
Game/GETerrainRenderer.hpp/.cppBuilds static + animated cube meshes from world blocks
Game/GETileAtlas.hpp/.cppBlock type → UV rect mapping into object-m.png
Game/GEBlupiController.hpp/.cppInvisible collision-only player movement

include/GalaxyEggbert/Worlds/ Files (engine-agnostic)

FileRole
Block.hpp16-bit packed voxel value: 12-bit type + 4-bit metadata
BlockMetadata.hppBit-level accessor wrapper around the 4-bit metadata nibble
Chunk.hpp10×10×10 palette-compressed voxel container
World.hpp10×10×10 grid of chunks (100³ blocks); save/load API
VoxelConfig.hppCompile-time constants: ChunkSize=10, MaxPaletteEntries=256, etc.
BinaryIO.hpp/.cppLittle-endian read/write helpers, magic-signature I/O
BitPacking.hpp/.cppPalette index bit-packing
test_worlds.hppTest world generation utilities

include/GalaxyEggbert/def/ Enums

All 12 headers are aggregated by include/GalaxyEggbert/Def.hpp: BlupiAction, ContinueMissionType, DecorAction, Direction, DoorKeyFlags, GamePhase, GameSpeed, KeyPressFlags, ObjectType, SecretPower, SoundChannel, SpriteChannel.

Tests

GalaxyEggbertWorldsTests covers only the engine-agnostic Worlds/ data model — no CNA, Easy3D, or Simple3D dependency.