Levels & Worlds
Level Files
Levels are stored as .blp binary files in gamefiles/DATA/.
Each file contains a level header (DescFile) followed by the full world
grid data.
Level File Header (DescFile)
The DescFile struct (defined in include/decor.hpp)
is the header stored at the beginning of each worldNNN.blp file:
| Field | Type | Description |
|---|---|---|
majRev | short | File format major revision |
minRev | short | File format minor revision |
posDecor | POINT | Initial camera/scroll position |
dimDecor | POINT | World dimensions used in this level |
world | short | World/chapter number |
music | short | Background music track index (0–9) |
region | short | Visual region/theme (selects decor spritesheet) |
blupiPos[4] | POINT[4] | Player start positions (up to 4 players) |
blupiDir[4] | int[4] | Player start facing directions |
name[100] | char[100] | Level name string |
World Grid
The world is a 100×100 grid of cells.
Each cell holds a Cellule — essentially a 16-bit icon index into the
terrain spritesheet for the current region.
typedef struct {
short icon; // sprite index into the background/decor sheet
} Cellule;
Two grids are stored in DescSave:
decor[100][100]— main terrain gridbigDecor[100][100]— background/decor overlay layer
Chapter Structure
Levels are stored as worldNNN.blp files in gamefiles/DATA/.
The numbering scheme groups them into chapters — 74 main-game levels plus bonus, special and secret levels (96 world files total).
| World Files | Chapter | Count |
|---|---|---|
| 001 | Tutorial / Intro | 1 |
| 010, 020–025 | Chapter 1 | 7 |
| 030–034, 040–046 | Chapter 2 | 12 |
| 050–058 | Chapter 3 | 9 |
| 060–066 | Chapter 4 | 7 |
| 070–075 | Chapter 5 | 6 |
| 080–084 | Chapter 6 | 5 |
| 090–095 | Chapter 7 | 6 |
| 100–107 | Chapter 8 | 8 |
| 110–115 | Chapter 9 | 6 |
| 120–125 | Chapter 10 | 6 |
| 199 | Special | 1 |
| 201–212 | Bonus / Extra | 12 |
| 300–309 | Secret | 10 |
Visual Regions
Each level has a region setting that determines which terrain spritesheet
(decor000.blp–decor031.blp) is used for rendering.
32 regions are defined, each representing a distinct visual theme.
Moving Objects in Levels
Each level can contain up to 200 simultaneously active moving objects
(MAXMOVEOBJECT). These include:
- Enemies (fish, birds, wasps, creatures)
- Bombs (floor, hanging, moving, homing)
- Vehicles (helicopter, jeep, tank, hovercraft)
- Interactive objects (crates, lifts, conveyors)
- Collectibles (treasure, eggs, keys)
- Visual effects (explosions, splashes, particles)
Each moving object is defined by a MoveObject struct with type,
start/end positions, timing, and animation state.
See Data Structures → MoveObject.
Level Editor
The game includes a built-in level editor (WM_PHASE_BUILD),
implemented in src/decdesign.cpp.
The editor allows placing and removing tiles and objects.
decdesign.cpp) has known missing features and is
considered one of the files requiring the most work. Custom level editing and
export may not function correctly.
Level editor I/O phases:
WM_PHASE_NAMEDESIGN— name a custom levelWM_PHASE_WRITEDESIGN— export design toc:\user(legacy path)WM_PHASE_READDESIGN— import designWM_PHASE_CLEARDESIGN— clear the current designWM_PHASE_PLAYTEST— test the current design in-game
Save Game State (DescSave)
The full game state — including the world grid, all moving objects, and player
status — is serialized to a DescSave struct (~56KB) when saving.
Up to 6 save slots (MAXSAVE=6) are supported.
See Data Structures → DescSave for the complete field list.