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
| File | Role |
|---|---|
main.cpp | Constructs and runs GalaxyEggbertCnaGame |
GalaxyEggbertCnaGame.hpp/.cpp | CNA Game subclass — LoadContent/Update/Draw |
Game/GEWorldRuntime.hpp/.cpp | World loading (.vwr, secondary .txt), tile-animation phase |
Game/GETerrainRenderer.hpp/.cpp | Builds static + animated cube meshes from world blocks |
Game/GETileAtlas.hpp/.cpp | Block type → UV rect mapping into object-m.png |
Game/GEBlupiController.hpp/.cpp | Invisible collision-only player movement |
include/GalaxyEggbert/Worlds/ Files (engine-agnostic)
| File | Role |
|---|---|
Block.hpp | 16-bit packed voxel value: 12-bit type + 4-bit metadata |
BlockMetadata.hpp | Bit-level accessor wrapper around the 4-bit metadata nibble |
Chunk.hpp | 10×10×10 palette-compressed voxel container |
World.hpp | 10×10×10 grid of chunks (100³ blocks); save/load API |
VoxelConfig.hpp | Compile-time constants: ChunkSize=10, MaxPaletteEntries=256, etc. |
BinaryIO.hpp/.cpp | Little-endian read/write helpers, magic-signature I/O |
BitPacking.hpp/.cpp | Palette index bit-packing |
test_worlds.hpp | Test 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.