Your Own Galaxy
Each of the three players builds a whole campaign of their own, plays it from the main menu with separate progress, and can share it as a single file.
Speedy Blupi let a player build private worlds in its Construction screens. Galaxy Eggbert turns that into a complete world system per player: a main hub, up to fourteen worlds with a hub and eight missions each, and a bonus world. It is built with the in-game 3D World Editor from the game's existing blocks and objects and is played under the campaign's own hub rules; nothing in it adds gameplay (ledger row BD-0119). This page describes the state as of 2026-11-10.
Done Building, playing, progress, Continue, delete and restore, naming, export and import (desktop and web). Not verified Android, a physical gamepad, a real touch screen.
What a galaxy is made of
A galaxy uses the campaign's own mission numbers, so its hubs, doors, gold bars and signs work exactly as the campaign's do (see Campaign & Worlds).
| Place | Mission numbers | Role |
|---|---|---|
| Main hub | 1 | World signs 1-14 lead to the world hubs. A gold bar appears for each world completed. |
| World hubs 1-14 | 10, 20, ... 140 | Mission signs 1-8, a door beside each. Every door but the first opens once the mission before it is won; the golden key ends the world; the return sign leads back to the main hub. |
| Missions | 11-18, 21-28, ... 141-148 | Ordinary missions, played and won like the campaign's. |
| Bonus world | 199 | Reached after the main hub's exit, as in the campaign. |
A galaxy can therefore hold up to 14 worlds, two more than the campaign's twelve. Each place is an ordinary
.vwr world file (see The .vwr format).
Building it: the galaxy screen
The galaxy is built in the editor's galaxy screen. Open the main menu's 3D World Editor, then the world screen's Galaxy button. The main menu's own Galaxy button also opens this screen while the selected player's galaxy has no main hub yet.
- The main hub and the bonus world are on top, the fourteen world numbers below them, and the selected world's hub and eight missions along the bottom. A click on a world's number only selects it.
- A place drawn faint does not exist yet: a click creates it from a starter world and opens it in the editor. The main hub starts as a 3x3 board of rock with world sign 1 two cells ahead of Blupi; a world hub with mission sign 1 and the return sign; a mission with a treasure chest and an exit.
- A place that exists opens in the editor, where it is edited, saved and play-tested like any other world.
- Back returns to the world screen.
Playing it
The main menu's Galaxy button (top right, left of Demo) plays the selected player's galaxy: from its main hub, or from the place where the player left it. The game then reads every world from the galaxy's folder instead of the shipped ones. Returning to the main menu leaves the galaxy; the menu always belongs to the campaign. Each player's panel in the menu shows "Galaxy : N gates", the gates opened in that galaxy, with the galaxy's name in place of "Galaxy" once it has one.
Its own progress
A galaxy's lives, current mission, last world and opened doors are kept apart from the campaign's, under keys of
their own in savedata.txt. They are written only once a galaxy has been played, so a player who
never plays one keeps the file exactly as before. Whether a galaxy is being played is never saved. Player A's
campaign progress (gamer0.*) and galaxy progress (galaxy0.*) side by side:
gamer0.lives=3
gamer0.missionNumber=11
...
galaxy0.lives=3
galaxy0.missionNumber=20
galaxy0.lastWorld=2
galaxy0.hasProgress=1
galaxy0.doorsUnlocked=0100...
Continue in a galaxy
A galaxy mission writes the resume file exactly like a campaign mission: it is saved when Play loses the focus and deleted on a clean exit. If the game ends without one in the middle of a galaxy mission, the next start shows the Resume screen, and Continue goes back into the galaxy and the mission at the recorded moment. The resume log names the galaxy's world file and its hash; if the world was changed meanwhile, the game falls back to the checkpoint, as it does for the campaign. See Save Data & Resume.
Naming it
Click the galaxy screen's title and type a name: letters, digits, spaces, - and ', at
most 24 characters (Shift for capitals, Backspace to erase). For touch and gamepad players a keyboard is drawn on
the screen under the title.
Enter, OK or a click elsewhere keeps the name; Escape or Cancel leaves it as it was. The name is stored in
galaxy/name.txt, shown in the menu's player panel and in the import list, travels inside an exported
pack and names its file.
Deleting and restoring places
- Every existing place has a bin on its corner. The first click arms it (a tick, "Delete?"), a second click
deletes the place into the galaxy's
backups/folder. - Backups switches the screen to restoring: a click on a place brings back its newest backup (each place keeps up to three). Clicking again steps further back and comes round to where it began, so nothing is lost.
- Delete galaxy (two clicks) removes the whole galaxy. It is first exported as a pack into the shared folder, so Import can bring it back with its name and demos; then every place goes into its backups and the name is removed. The galaxy's progress starts over.
Sharing it: one .galaxy file
- Export writes the whole galaxy, with the demos you recorded in it, as one file in
customworlds/shared/:<name>.galaxyfor a named galaxy (spaces become-), elseA-galaxy.galaxyfor player A. A name already taken is numbered (A-galaxy-2.galaxy); an earlier export is never replaced. On the web the file is also downloaded. - Import lists the packs in the shared folder on the right, newest first, eight to a page (on
the web the browser's file picker opens first and the chosen file is listed). A row clicked twice replaces your
galaxy with it: your current places go into their backups first and the galaxy's progress starts over. The
pack's demos are not put into your demo positions; they are copied to the shared demos as
<pack name>-demo-<position>.gdemo, where the demo positions' Import lists them (see Demos & Recordings). - A row's bin deletes the shared pack (two clicks). On the web this is the only way to reach that file.
The pack is a simple container with a checksum:
GALAXY_PACK 1
name <size> the galaxy's name, when it has one
world <mission> <size> each place: its .vwr bytes follow
demo <position> <size> each recording made in the galaxy: its .gdemo bytes follow
END <FNV-1a of everything before it, 16 hex digits>
Import refuses a pack that is damaged or truncated, of another version, holds a place or a position twice, names a place that is not a galaxy's, or contains a world that does not load. A demo recorded with another simulation revision is left out and the galaxy is kept.
Where it is stored
| What | Path in the player's folder |
|---|---|
| Player N's places (N = 0, 1, 2 for players A, B, C) | customworlds/gamerN/galaxy/world001.vwr, world010.vwr, world011.vwr ... world199.vwr |
| Their backups | customworlds/gamerN/galaxy/backups/world011.1.vwr (newest) to .3.vwr |
| The galaxy's name | customworlds/gamerN/galaxy/name.txt |
| Exported packs | customworlds/shared/*.galaxy |
| Progress | galaxyN.* keys in savedata.txt |
The player's folder is the system's per-user folder on the desktop (~/.local/share/Galaxy Eggbert on
Linux, %LOCALAPPDATA%\Galaxy Eggbert on Windows, or --user DIR /
GALAXY_USER_DIR), /save in the browser's storage on the web, and the app's private
storage on Android.
For developers
For QA, --galaxy together with --mission N starts mission N of the selected player's
galaxy, with the galaxy's progress; it works with --autoplay as well:
./GalaxyEggbert --mission 11 --galaxy
| Source | Role |
|---|---|
src/GalaxyEggbert/Editor/CustomWorldStorage.hpp/.cpp | GalaxyDir(), GalaxyWorldPath(), IsGalaxyMission(), GalaxyMissionName(), CreateGalaxyStarterWorld(), GalaxyName()/SetGalaxyName(), PackGalaxy()/UnpackGalaxy(), ExportGalaxy(), ImportGalaxy(), DeleteGalaxy(), RestoreBackup(), DeleteSlotWorld(). See CustomWorldStorage. |
src/GalaxyEggbert/Editor/GalaxyBrowserScreen.hpp/.cpp | The galaxy screen: places, bins, Backups, Export, Import, Delete galaxy, naming. |
src/GalaxyEggbertCNA/GalaxyEggbertGameMissions.cpp | StartGalaxy(), LeaveGalaxy(), MissionPath(): which file a mission loads while a galaxy is played. |
src/GalaxyEggbert/Game/SaveData.hpp | SetGalaxyMode(), GalaxyProgress(), ResetGalaxyProgress(), GetGalaxyGatesForGamer(). See SaveData. |
Tests: VerifyGEEditorStorage (the galaxy's files, packs, import, delete, restore),
VerifyGESaveData (the separate progress), VerifyGEInputPad (the menu's Galaxy button
and panel), VerifyDemoReplay (galaxy recordings).
Verification status (as of 2026-11-10)
- Desktop: verified live: a galaxy made and played hub to hub to mission, progress kept apart,
--galaxyautoplay, delete and restore, focus lost then Continue in the galaxy, the resume self-test equal in mission 11, keyboard and arrows on the galaxy screen, Delete galaxy and Import back. - Web (2026-11-09, headless Chrome): a desktop pack imported and exported back byte for byte.
- Not verified: Android; a physical gamepad or touch screen.
xnjttjpo in a galaxy mission
opens the editor on that mission's world; saving writes the galaxy's file, its backup kept beside it, and Stop
returns to the mission from its start. See 3D World Editor.