Game levels are stored in the MAZE.he8 game data file. The file has the following structure:
300 x [CAVE DATA] 706B (0x2C2) lower_level 176 shorts 352B background 1 short 2B upper_level 176 shorts 352B
lower_level: Each short codes for a wall or an object (kelp seed, urchin, etc.). There is one short for each square on the level grid; the first short codes for the upper left and subsequent shorts proceed right across the rows. There are 16 squares in each row and 11 rows.
background: Codes for one of five background images
upper_level: Each short codes for an arch, shovel and pail, valve, or other swim-through object. Follows the same square pattern as the lower_level block. Note that some upper_level objects span several squares which can cause unexpected behavior if objects overlap.
The cave data block is repeated 300 times, six times for each of the 50 levels (each level is thus 4236B, 0x108C). The first five cave data blocks for each level are standard caves; the sixth is for the bonus cave. Thus despite the fact the game only has bonus caves every 5 levels by default, it is possible to have a bonus cave on every single level. Levels always start in cave 1 (the level's first cave data block in MAZE.he8), so the start must always be placed in cave 1 and never in caves 2 through 5. The bonus cave, if used, must have a start square.
The editor can only save one cave at a time. Thus in order to create a full level, all the level's caves must be created and saved separately. The level's caves must then be assembled in order and copied into the MAZE.he8 file. The only way to test custom levels is to overwrite the game's existing levels, so the file should be copied prior to editing so that the original levels may be restored if desired. If a level does not use all of the 5 available caves, the remaining cave data blocks may be left blank (filled with 706 null bytes). If a level does not use a bonus cave, that cave data block may be left blank.
It is advisable to copy all six cave data blocks for a given level into a single file, save that file, and then copy the entire level into MAZE.he8 in order to avoid errors. A hex editor should be used to edit MAZE.he8 so that level offsets are easy to find.
Other facts about the editor
- The game makers used this editor for the levels.
- Music is selected by the wall style.
- The junior helper options used in the last game are carried into custom levels made with this editor, this also happens in Balloon-O-Rama.
- ScummVM deflates levels using gzip prior to saving. Levels saved with ScummVM must thus be decompressed prior to insertion in the MAZE.he8 file. Alternately, a hex editor can be used to actually encode a level, which can then be played using ScummVM. Details on that coming soon!
- There are two crabs in the enemy list and no blowfish. The second crab actually represents the blowfish.
- Swinging doors are oriented such that the hinge is positioned at the narrow end. Swinging doors always swing through the square on which they are placed in the editor.
- Narrow "cave to x" squares are used for caves which are positioned on the side walls. Wide "cave to x" squares are used for caves positioned on the top and bottom walls. These caves may also be placed on middle walls; in this case, wide squares are for caves meant to be entered from above or below and narrow caves are used for caves meant to be entered from the left or right.
There is no video tutorial for this method of creating custom levels yet.