Running the Game

Starting each build, every command-line flag, where the player's files live, and headless runs.

Desktop: run from the build directory

cd build-cna-opengl3
./GalaxyEggbert

The game reads its assets by paths relative to its working directory, and CNA resolves the model folder (avatars3d/) against the executable's real location. After each build a post-build step copies Content/, worlds3d/, textures3d/ and avatars3d/ next to the executable, so the build directory is a complete run folder. Starting it from anywhere else, or through a symbolic link to the executable, finds no assets. (The project's QA scripts that run elsewhere use a hard link to the executable plus symlinked asset folders for this reason.)

The window opens windowed on the first run; F11 or the main menu's upper-left Fullscreen / Window button switches, and the choice is remembered.

Linux bundle

tar -xzf GalaxyEggbert-0.4.0-linux-x86_64.tar.gz
./GalaxyEggbert-0.4.0-linux-x86_64/run-galaxy-eggbert

The archive's name carries the version from VERSION.txt. A bundle built on Debian 13 needs glibc 2.38 or newer; see Releases for the 0.4.0 packages and their requirements.

run-galaxy-eggbert changes into the bundle's directory and runs GalaxyEggbert with the arguments you gave it, so every flag below works through it. Keep the executable next to Content/, worlds3d/, textures3d/ and avatars3d/. If a system library is missing, install your distribution's runtime package for it (the bundle carries only SDL).

Web build

emrun build-cna-webgl2/GalaxyEggbert.html
# or any static HTTP server, for example:
python3 -m http.server --directory build-cna-webgl2 8000
# then open http://localhost:8000/GalaxyEggbert.html

Android

adb install android/app/build/outputs/apk/debug/app-debug.apk
adb shell am start -n org.openeggbert.galaxyeggbert/org.openeggbert.speedyblupi.SpeedyBlupiActivity
adb logcat -s SDL SDL/APP GalaxyEggbert

The first start copies the assets (about 125 MB) from the APK into the app's internal storage and runs there; later starts copy again only when the assets changed. The game's and CNA's console output appears in logcat under the tag GalaxyEggbert. An APK built for a single ABI with -Pandroid.injected.build.abi is test-only: install it with adb install -t -r. The app runs in landscape. Emulator notes are in ANDROID.md; without hardware acceleration (KVM) the emulator is too slow to play.

Command-line flags

All parsed in src/GalaxyEggbertCNA/main.cpp, on the desktop builds. They are development and QA tools; a player needs none of them. Unknown arguments are ignored.

FlagWhat it does
--user DIRKeep the player's files in DIR (made absolute against the working folder, created if missing) instead of the system's per-user folder. Takes precedence over GALAXY_USER_DIR. No copy from an earlier build is made. Desktop only.
--mission NSkip the menus and start mission N in play, loading worlds3d/worldNNN.vwr (for example 12, or 999 for the showcase world).
--galaxyWith --mission N: load world N of the selected player's own galaxy, with that galaxy's progress (Your Own Galaxy).
--spawn X,Y,Z[,YAW]With --mission: put Blupi on the raw grid cell X,Y,Z (the coordinates of .vwr files and tools/vwr_inspect.py) instead of the world's start, facing YAW degrees (default 0). Ignored if fewer than three numbers parse.
--autoplay SCRIPTWith --mission: a QA script plays instead of the keyboard and mouse, one fixed 1/60 s step per update as fast as the machine runs (one frame in 30 drawn). Writes autoplay_trace.txt in the working folder and exits when the script ends: code 0 if it passed, 1 if not, 2 if the script could not be read.
--record-demo FILEWith --mission (and optionally --autoplay): record the mission from its start as a main-menu demo until Escape, the mission's end, the script's end, the tick limit or the window closing; write FILE and exit. F-keys and Tab are not recorded (Demos & Recordings).
--demo-ticks NWith --record-demo: stop after N ticks (60 per second).
--demo-title TEXTWith --record-demo: the title stored in the demo.
--verify-demo FILEReplay that demo at once, undrawn and silent, compare its end with the recorded one and exit: code 0 if equal, 1 if not.
--golden-captureLoad world999, run the fixed 60 Hz simulation and save golden_frame_0060.png, golden_frame_0120.png and golden_frame_0180.png into the working folder, then exit.
--golden-capture-traceLoad world999, turn Blupi west, drive him through a fixed input script for 150 ticks, write one line per tick to golden_trace.txt and exit.
./GalaxyEggbert --mission 12
./GalaxyEggbert --mission 999 --spawn 34,1,6,0
./GalaxyEggbert --user ./qa-player --mission 11 --autoplay ../tools/autoplay/world011.txt
Flags touch the player's files. Starting a mission discards an interrupted mission's resume.txt, and winning or losing saves progress for the selected player. For experiments, give the run its own folder with --user DIR or GALAXY_USER_DIR, as the project's scripts do.

Environment variables that change a run (GALAXY_EFFECTS, AUTOPLAY_SHOTS, ...) are listed on Configuration.

Where the player's files are

Since 2026-11-10 the player's own files are kept apart from the game (src/GalaxyEggbert/Game/UserFolder.hpp): savedata.txt (settings and progress), resume.txt (an interrupted mission), demos/ (recordings) and customworlds/ (the editor's worlds and the player's galaxy). Format and behaviour: Save Data & Resume.

PlatformFolder
Linux$XDG_DATA_HOME/Galaxy Eggbert, or ~/.local/share/Galaxy Eggbert when XDG_DATA_HOME is not set
Windows%LOCALAPPDATA%\Galaxy Eggbert (an XDG_DATA_HOME variable, if set, wins here too)
Any desktop, chosen--user DIR, else the environment variable GALAXY_USER_DIR
Web/save in the page's file system, kept in IndexedDB
AndroidThe app's private internal storage (its working folder, beside the copied assets); removed when the app is uninstalled

Headless runs

The game always needs a GL context. On a machine without a display, run it under Xvfb, silence the audio and give it its own player folder:

cd build-cna-opengl3
GALAXY_USER_DIR=. SDL_AUDIODRIVER=dummy SDL_VIDEODRIVER=x11 \
  xvfb-run -a -s "-screen 0 1280x720x24" ./GalaxyEggbert --golden-capture

SDL_AUDIODRIVER and SDL_VIDEODRIVER are SDL's own variables. The scripts in tools/ (autoplay.sh, qa_live.sh, record_demo.sh, verify_demos.sh, verify_golden_frames.sh, verify_golden_trace.sh) set all of this up; see Testing.

Related pages