Project Structure

All important directories and files explained.

Root Layout

galaxy-eggbert/
├── CMakeLists.txt          ← main build configuration
├── Doxyfile                ← Doxygen configuration template
├── README.md               ← build instructions
├── CLAUDE.md               ← developer guidelines (for Claude Code)
├── NEXT.md                 ← development roadmap and phase log
├── ANDROID.md              ← Android build notes
├── WINDOWS.md              ← Windows-specific notes
├── U3D_SUPPORT_PLAN.md     ← U3D engine integration plan
├── World Format.md         ← .vwr file format specification
├── LICENSE
│
├── src/GalaxyEggbert/      ← C++ game source (engine-dependent)
├── include/GalaxyEggbert/  ← C++ public headers (engine-agnostic)
├── tests/GalaxyEggbert/    ← GoogleTest unit tests
│
├── Content/                ← game assets (committed in repo)
│   ├── backgrounds/        ← sky/menu PNGs (decor000.png … decor031.png, etc.)
│   ├── icons/              ← sprite sheets
│   └── sounds/             ← WAV audio files
│
├── worlds/                 ← level data (committed in repo)
│   ├── world001.txt        ← level 1 (mobile-eggbert format)
│   └── … world005.txt
│
├── cmake/
│   ├── toolchains/
│   │   └── mingw-w64.cmake ← MinGW cross-compilation toolchain
│   └── web/
│       └── pre.js          ← Emscripten pre-JS (IDBFS setup)
│
├── android/                ← Android Gradle project (placeholder)
│
├── cmake-build-debug/      ← generated; CLion debug build
├── cmake-build-u3d/        ← generated; U3D Linux build
└── build-windows/          ← generated; MinGW Windows build

Source Directory (src/GalaxyEggbert/)

FileRole
Program.cppApplication entry point — URHO3D_DEFINE_APPLICATION_MAIN
GalaxyEggbertApp.hpp/.cppUrho3D Application subclass — lifecycle, event subscription
GEEngine.hppMaster Urho3D include: #include <Urho3D/Urho3DAll.h>
Game/GalaxyEggbertGame.hpp/.cppMain game coordinator — scene, world, all subsystems
Game/Blupi.hpp/.cppPlayer character — physics, input, AABB collision, animation
Game/Camera.hpp/.cpp3rd-person orbit camera
Game/Decor.hpp/.cppObject pool — enemies, collectibles, platforms
Game/GameData.hpp/.cpp640-byte save file — mobile-eggbert compatible
Game/HUD.hpp/.cpp2D heads-up display — lives, keys, shield, gauge
Game/ObjectNode.hpp/.cppUrho3D scene node for one game object (billboard)
Game/PhaseManager.hpp/.cppGamePhase state machine + overlay background
Game/SoundManager.hpp/.cpp93-channel WAV audio playback
Game/Tables.hpp/.cppAnimation frame tables from mobile-eggbert
Worlds/BinaryIO.cppWorld file binary read/write helpers
Worlds/BitPacking.cppBit-packing logic for palette indices
Worlds/Chunk.cppChunk class implementation
Worlds/World.cppWorld class implementation
Worlds/test_worlds.cppTest world generation utilities

Public Headers (include/GalaxyEggbert/)

These headers are used by tests and may be included independently of the engine.

FileRole
BlockTypes.hppBlock type ID constants and UV helpers
GameConstants.hppMAXCELX/Y, LXIMAGE/LYIMAGE, sprite cell sizes
Def.hppMaster include for all game definitions
def/BlupiAction.hppPlayer animation state enum
def/GamePhase.hppGame screen/phase enum
def/ObjectType.hppObject type enum (matches level file format)
def/SoundChannel.hppSound slot index enum (0–92)
def/SpriteChannel.hppSprite channel enum (Needs verification)
def/DoorKeyFlags.hppDoor/key flag bitfield
def/Direction.hppDirection enum
def/GameSpeed.hppGame speed enum
def/DecorAction.hppCamera shake types
def/KeyPressFlags.hppKey press flags
def/SecretPower.hppSecret power enum
def/ContinueMissionType.hppMission continuation type
Worlds/Block.hppBlock value type and make/access helpers
Worlds/Chunk.hppChunk class (palette-compressed 10³ voxel container)
Worlds/World.hppWorld class (10³ chunks, save/load API)
Worlds/VoxelConfig.hppChunkSize=10, MaxPaletteEntries, etc.
Worlds/BitPacking.hppBit-packing interface
Worlds/BinaryIO.hppBinary I/O helpers interface
Worlds/BlockMetadata.hppBlock metadata types
Worlds/test_worlds.hppTest world generation interface

Tests (tests/GalaxyEggbert/Worlds/)

FileTests
BlockTests.cppBlock encoding/decoding
BitPackingTests.cppBit-packing correctness
ChunkTests.cppChunk palette, get/set, empty checks
WorldTests.cppWorld get/set, save/load round-trips
BlockMetadataTest.cppSparse block metadata

Total: 54 tests. No engine dependency — can be built and run independently.

Assets (Content/)

DirectoryContents
Content/backgrounds/~30 sky/background PNGs (decor000.png…), menu screens (init.png, pause.png, win.png, lost.png, setup.png, wait.png, trial.png, gear.png, speedyblupi.png, blupiyoupie.png)
Content/icons/blupi.png, element.png, explo.png, object-m.png, button.png, text.png, jauge.png, pad.png, blupi1.png
Content/sounds/sound000.wav … sound092.wav (93 WAV files)

Build Directories

Generated The following directories are generated by CMake and are not part of the source tree. Do not commit them.
DirectoryPurpose
cmake-build-debug/CLion IDE debug build
cmake-build-u3d/U3D engine Linux build
cmake-build-web/Emscripten Web build
build-windows/MinGW Windows cross-build