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/)
| File | Role |
Program.cpp | Application entry point — URHO3D_DEFINE_APPLICATION_MAIN |
GalaxyEggbertApp.hpp/.cpp | Urho3D Application subclass — lifecycle, event subscription |
GEEngine.hpp | Master Urho3D include: #include <Urho3D/Urho3DAll.h> |
Game/GalaxyEggbertGame.hpp/.cpp | Main game coordinator — scene, world, all subsystems |
Game/Blupi.hpp/.cpp | Player character — physics, input, AABB collision, animation |
Game/Camera.hpp/.cpp | 3rd-person orbit camera |
Game/Decor.hpp/.cpp | Object pool — enemies, collectibles, platforms |
Game/GameData.hpp/.cpp | 640-byte save file — mobile-eggbert compatible |
Game/HUD.hpp/.cpp | 2D heads-up display — lives, keys, shield, gauge |
Game/ObjectNode.hpp/.cpp | Urho3D scene node for one game object (billboard) |
Game/PhaseManager.hpp/.cpp | GamePhase state machine + overlay background |
Game/SoundManager.hpp/.cpp | 93-channel WAV audio playback |
Game/Tables.hpp/.cpp | Animation frame tables from mobile-eggbert |
Worlds/BinaryIO.cpp | World file binary read/write helpers |
Worlds/BitPacking.cpp | Bit-packing logic for palette indices |
Worlds/Chunk.cpp | Chunk class implementation |
Worlds/World.cpp | World class implementation |
Worlds/test_worlds.cpp | Test world generation utilities |
Public Headers (include/GalaxyEggbert/)
These headers are used by tests and may be included independently of the engine.
| File | Role |
BlockTypes.hpp | Block type ID constants and UV helpers |
GameConstants.hpp | MAXCELX/Y, LXIMAGE/LYIMAGE, sprite cell sizes |
Def.hpp | Master include for all game definitions |
def/BlupiAction.hpp | Player animation state enum |
def/GamePhase.hpp | Game screen/phase enum |
def/ObjectType.hpp | Object type enum (matches level file format) |
def/SoundChannel.hpp | Sound slot index enum (0–92) |
def/SpriteChannel.hpp | Sprite channel enum (Needs verification) |
def/DoorKeyFlags.hpp | Door/key flag bitfield |
def/Direction.hpp | Direction enum |
def/GameSpeed.hpp | Game speed enum |
def/DecorAction.hpp | Camera shake types |
def/KeyPressFlags.hpp | Key press flags |
def/SecretPower.hpp | Secret power enum |
def/ContinueMissionType.hpp | Mission continuation type |
Worlds/Block.hpp | Block value type and make/access helpers |
Worlds/Chunk.hpp | Chunk class (palette-compressed 10³ voxel container) |
Worlds/World.hpp | World class (10³ chunks, save/load API) |
Worlds/VoxelConfig.hpp | ChunkSize=10, MaxPaletteEntries, etc. |
Worlds/BitPacking.hpp | Bit-packing interface |
Worlds/BinaryIO.hpp | Binary I/O helpers interface |
Worlds/BlockMetadata.hpp | Block metadata types |
Worlds/test_worlds.hpp | Test world generation interface |
Tests (tests/GalaxyEggbert/Worlds/)
| File | Tests |
BlockTests.cpp | Block encoding/decoding |
BitPackingTests.cpp | Bit-packing correctness |
ChunkTests.cpp | Chunk palette, get/set, empty checks |
WorldTests.cpp | World get/set, save/load round-trips |
BlockMetadataTest.cpp | Sparse block metadata |
Total: 54 tests. No engine dependency — can be built and run independently.
Assets (Content/)
| Directory | Contents |
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.
| Directory | Purpose |
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 |