Galaxy Eggbert is a faithful 3D remake of mobile-eggbert (a C++ port of the original Speedy Blupi, a Windows Phone XNA game from 2013).
Current project status: read CURRENT.md first. This README retains project background and onboarding material;
CURRENT.mdis the concise authority for active targets, verification, limitations, and next work.
GalaxyEggbertCNA is the actively developed target. It is playable and includes 3D terrain,
objects, gameplay, HUD, sound, menus, save/progress, and a complete in-game 3D world editor. It is
built directly on CNA (a C++ reimplementation of the XNA 4.0 API), with Easy3D used as a
small helper library beside CNA (cameras, texture atlas, billboard/cube batching); Easy3D does not
hide CNA and game code can call CNA directly. See CURRENT.md for verified current
status, NEXT.md for commands and detailed history, and plan.md for research
and the full historical task inventory.
The former GalaxyEggbertSimple3D implementation was retired after CNA reached playable parity
and removed from the live tree on 2026-07-25. It remains recoverable in git history at 4afd53e.
The former long-term direction — Simple3D → U3D/Urho3D → Nova3D — is superseded by direct CNA + Easy3D (locked 2026-07-05). Galaxy Eggbert will run only on CNA long-term.
mobile-eggbert (sibling repository, ../mobile-eggbert relative to this one) is the read-only
reference implementation this remake is based on. Its assets (PNG sprite sheets, sounds, world
files) and its data/behavior (animation tables, gameplay logic) are the source of truth wherever
Galaxy Eggbert needs to match Speedy Blupi behavior exactly. No changes are made to
mobile-eggbert as part of this migration without explicit user approval.
Lua is not part of the first CNA/Easy3D migration phase.
git submodule init --recursive
git submodule update --recursiveFor the verified capability and test baseline, see CURRENT.md. Building requires
sibling checkouts of ../cna and ../easy-3d (or
-DCNA_HOME=/-DEASY3D_HOME= overrides).
cmake -S . -B build-cna -DGALAXY_EGGBERT_BUILD_CNA=ON
cmake --build build-cna --target GalaxyEggbertCNA -j2
cd build-cna && ./GalaxyEggbertCNA # must run from its own build dir (relative asset paths)The package target creates a relocatable x86-64 Linux archive. It includes the executable,
source-tracked game data, the SDL3 runtime libraries, licenses, and a launcher that keeps the
required asset-relative working directory.
cmake -S . -B build-package -DCMAKE_BUILD_TYPE=Release \
-DGALAXY_EGGBERT_BUILD_CNA=ON
cmake --build build-package --target package -j2
tar -xzf build-package/GalaxyEggbertCNA-linux-x86_64.tar.gz
./GalaxyEggbertCNA-linux-x86_64/run-galaxy-eggbertThe archive is deliberately a runtime bundle, not an AppImage: its host still supplies standard
Linux libraries such as the graphics stack, FFmpeg, and the C++ runtime. See the bundled
README-Linux.md for details. Set -DGALAXY_EGGBERT_ENABLE_LINUX_BUNDLE=OFF to omit the package
target in a developer-only Linux build.
Unit tests (engine-independent world-data model):
cmake --build build-cna --target GalaxyEggbertWorldsTests -j2
./build-cna/GalaxyEggbertWorldsTestsThe graphics backend (EasyGL on Linux by default, SDL_Renderer elsewhere) is CNA's own
CNA_GRAPHICS_BACKEND cache option (SDL_RENDERER / EASYGL / BGFX / VULKAN), not a
galaxy-eggbert-specific flag — pass -DCNA_GRAPHICS_BACKEND=<value> to override it.
Same commands as above, run from a Windows toolchain (e.g. CLion's bundled MinGW — see
WINDOWS.md for known gaps, notably that runtime DLLs are not yet auto-copied next to the
executable).
cmake -S . -B build-windows -DGALAXY_EGGBERT_BUILD_CNA=ON
cmake --build build-windows --target GalaxyEggbertCNAImportant: Always use a clean build directory when switching toolchains (e.g., rm -rf build-windows).
- Ensure you have
mingw-w64installed (e.g.,sudo apt install mingw-w64). - Run the build:
# Ensure you are in galaxy-eggbert directory
rm -rf build-windows
cmake -S . -B build-windows \
-DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/mingw-w64.cmake \
-DGALAXY_EGGBERT_BUILD_CNA=ON \
-DCNA_GRAPHICS_BACKEND=SDL_RENDERER \
-DBUILD_TESTING=OFF
cmake --build build-windows --target GalaxyEggbertCNA -j2The verified Linux environment used the repository's Windows x86-64 SDL prebuilt configuration
and passed -DZLIB_INCLUDE_DIR=/usr/x86_64-w64-mingw32/include plus
-DZLIB_LIBRARY=/usr/x86_64-w64-mingw32/lib/libz.a. MinGW builds now place SDL3.dll,
SDL3_image.dll, SDL3_mixer.dll, and libwinpthread-1.dll next to the executable while linking
the GCC/C++ runtime statically. A Wine launch confirmed this bundle reaches window creation,
asset loading, and world loading, but then fails because CNA's current SDL_RENDERER backend is
2D-only and throws on 3D vertex-buffer creation. It is therefore a valid packaging build, not yet
a runnable Windows 3D release.
- Install and activate the Emscripten SDK:
git clone https://github.com/emscripten-core/emsdk.git cd emsdk ./emsdk install latest ./emsdk activate latest source ./emsdk_env.sh
- Ensure all submodules are initialised:
git submodule update --init --recursive
source /path/to/emsdk/emsdk_env.sh
emcmake cmake -S . -B cmake-build-web -DGALAXY_EGGBERT_BUILD_CNA=ON -DCMAKE_BUILD_TYPE=Debugcmake --build cmake-build-web -jemrun cmake-build-web/GalaxyEggbertCNA.html| File | Description |
|---|---|
GalaxyEggbertCNA.html |
Main entry point — open in browser |
GalaxyEggbertCNA.js |
Emscripten JS glue |
GalaxyEggbertCNA.wasm |
WebAssembly binary |
GalaxyEggbertCNA.data |
Preloaded asset bundle |
| Path | Source directory | Notes |
|---|---|---|
/Content/backgrounds |
Content/backgrounds/ |
Read-only; preloaded |
/Content/icons |
Content/icons/ |
Read-only; preloaded |
/Content/sounds |
Content/sounds/ |
Read-only; preloaded |
/worlds |
worlds/ |
Read-only; preloaded |
/save |
IndexedDB (IDBFS) | Writable; persists save file |
- Save data would be stored via IndexedDB (IDBFS), flushed on every write and on page unload.
- Audio uses SDL_mixer; the browser may require a user gesture before audio starts.
- CPU usage bounded via
emscripten_set_main_loop(backed byrequestAnimationFrame) instead of a busy loop. - Game speed: intended to use a fixed-timestep accumulator in
CNA/Game.cppto match native desktop timing, the same approach CNA already uses elsewhere.
- Linux: confirmed working, EasyGL backend by default (
CNA_GRAPHICS_BACKEND=EASYGL). - Windows: SDL_Renderer cross-compiles with MinGW-w64 and stages its required SDL/MinGW runtime
DLLs, but cannot yet run the 3D game because that CNA backend is 2D-only (see
WINDOWS.md). - Web (Emscripten): manually verified WebGL2 build; not exercised by CI or a publishing pipeline.
- Android: intended, see
ANDROID.md.GalaxyEggbertCNAis the sole game target and is enabled by default, so Gradle needs no target-selection argument.
GalaxyEggbertCNA is the maintained, playable target. Its full verified state and backend status
live in CURRENT.md.
See CURRENT.md for current build status, limitations, and active work; use NEXT.md for commands and detailed recent history.