Who got here first
Four other projects reached this game first: a 1989 Amiga clone by the programmer of Rockford's Amiga port, which plays all forty caves, and three studies of the 1988 MS-DOS release, from a hex editor in 2006 to a static recompilation that runs.
All four were found after the engine rules here had been read from the executable, so their agreement counts for something. Where one disagrees with the code, the code wins.
Who
| Project | Who, when | What it is |
|---|---|---|
| Rocky Clone | Laurence Vanhelsuwé, 1989 | A public-domain Boulder Dash clone for the Amiga, by the programmer of the Amiga port. Its level file is Rockford's forty caves |
| The Rockford Remake Project | A. Sahala, 2006-2026 | The data, from a hex editor and from playing. A page, a patcher and a remake on another engine |
| Camoto and ModdingWiki | Adam Nielsen, 2010-2015 | The file formats, as a level editor and a C++ library |
| cicodis | Gabriel Valky | The EGA executable, statically recompiled to C++ and running under SDL |
Two things here came from them, both checked against the bytes: the order of the ten EGA world palettes, from Sahala's page, and the palette block boundaries, from cicodis. The faithful build also draws the five hidden worlds with Sahala's tilesets, and VIP's hidden worlds are derived from them. Both are credited on the attribution page.
Rocky Clone, 1989: the forty caves in another program
Laurence Vanhelsuwé, who programmed Rockford's Amiga port for Icon Design,
dated his own Boulder Dash clone, Rocky Clone, 2 September 1989, and his
notice in it makes it public domain. Fred Fish's note of 22 March 1992 says the
author sent it to him on disk. It is still on Aminet as
game/misc/Rocky.lha, 48,810 bytes: the program, its source in
Rocky.s (3,187 lines of 68000 assembly), its graphics, and a file called
maps.
maps is byte for byte CELLMAPS.BIN: 35,200 bytes, same
MD5. The ReadMe promises "40 problem-packed (solvable) levels in all", so the twenty
caves the 1988 menu cannot reach were playable on the Amiga a year after Rockford
came out, though without its art: Rocky draws its own 8 by 8 characters.
The source names the cell codes, and agrees with this project wherever both name a value.
| Value | Rocky.s | Name here |
|---|---|---|
0x00 | AIR | Space |
0x01 | GRASS | Dirt |
0x02 | RWALL | Steel wall |
0x03 | WALL | Brick wall |
0x04 | EWALL, MAGIC_TIME 350 generations | Magic wall |
0x10 | AMIBA | Amoeba |
0x20 | MAN | Player start |
0x28 | ROCK | Boulder |
0x38 | FIRE_TAP | Fire tap |
0x70 | BEGG, hatches in 200 generations | Evil worm |
0x74 | EXIT | Exit |
0x78 | NUMBER | Treasure bonus |
0x7C | EXTRA_T, BONUS_SECS 20 | Time bonus |
0x80 | EXTRA_L | Not in any of the forty caves |
0x84 | GEGG, hatches in 100 generations | Good worm |
0x88 | DIAMOND | Treasure |
0xC4 | WATER_TAP | Acid tap |
EXTRA_L, an extra life, is new. No cave in CELLMAPS.BIN
uses it; it appears once, at cell (17, 8), in
imap, the sample cave the Amiga version loads as a fifth level for every
world.
Comments name the two kinds of mover: $30 cells are "bat, pirhanas,
birds" and $34 cells "monkeys, fish". The bats and monkeys fit the
manual's hunter world. Piranhas and fish hint at scuba, though the comment never
ties a creature to a world.
Rocky's engine is its own, written independently of the PC port: in Vanhelsuwé's words "a version of LIFE" with "over 100 states", a cellular automaton with its own timings. That makes it a second reading of the same rules from 1989, useful where the PC disassembly is unclear, and not a source for Rockford's code.
It turned up through a YouTube comment in which Vanhelsuwé says he wrote the Amiga game and most of its source is in the Fred Fish collection. What the collection holds is Rocky.
Where a hex editor in 2006 and a disassembler in 2026 agree
Sahala read the data and played the game; this project read the code. Where they overlap, they agree.
| Claim | Reached there by | Reached here by |
|---|---|---|
| 40 caves of 40 by 22, one byte a cell, no header | counting | counting, then the loader |
| The cave order interleaves shipped and unreleased worlds | a patch that works | the index arithmetic |
0x20 is the player, 0x74 is the exit | playing | two loader instructions |
| One enemy family yields treasure, the other does not | playing | the blast kinds |
| The graphics are planar EGA | a third party, 2018 | decoding them |
The enemy row matters most. The cave census here had confidently concluded that
both families yield treasure, and was wrong. Sahala got the disassembly's answer by
playing, and no other check on this work has been as strong. Rocky.s
agrees on the third row too.
Then there are four per-cave tables of forty values each: quota, both score tables and the time limit. Sahala transcribed them from the EGA executable; this project read them from the VGA executable twenty years later. 160 of 160 are identical.
What the 2006 project knew that this one did not
The loader here gave up the shape of five entities but not what they were, so they went down as "activatable producers" and "timed entities", which is all the instructions say. Sahala, having played, could name them: a fire tap and an acid tap, quicksand, an evil worm that turns treasure into boulders, a good worm that does the reverse, a treasure bonus and a time bonus. He also had two rules nothing in the bytes points to until you know to look: fire and acid explode when they touch, and treasure dropped onto fire becomes a treasure-yielding enemy.
When his page was found, those entities were all the port had left unported. All have since been ported from the code, which bore him out: the two worms are exact opposites, as he says. The disassembly adds what a player cannot see. The evil worm turns a boulder into an enemy one time in eight; the good worm converts every time. The treasure bonus pays three treasures, two, one or none depending on which of its four frames you touch, so its random amount is a reflex test, not a dice roll. The time bonus always adds twenty seconds.
Camoto, and a mistake this project shared
Adam Nielsen documented the formats on ModdingWiki and supported the game in Camoto, his DOS modding suite: a level editor's view, formats and not rules, with no engine, executable analysis or sound work.
It settled one thing outright. Camoto calls the image format
img-ega-raw-planar-bgri-fullscreen - blue, green, red, intensity -
which is this project's plane order and palette byte reading, reached independently.
That closed the last hedge in the palette result.
It also knew two things this project did not: a cell byte indexes the tileset directly, and tile 3 is blank in the sheet, so the ordinary wall uses the next tile along.
But it reads the levels as this project first did, 1-8 for the first world, 9-16 for the second and so on: five worlds of eight, in order. Only the executable's indexing shows they are ten worlds of four, interleaved, so its editor puts twenty caves under the wrong tileset. Its to-do list still has "figure out where the Rockford palette is stored", the question solved here.
Someone had already decompiled it
The last DOS study to turn up was the biggest. Gabriel Valky's cicodis is a static recompiler from 16-bit DOS executables to C++, and somebody put Rockford through it: 10,224 lines of generated C++, an SDL front end, an EGA emulation header, a patch file, and shell scripts that fetch the game, run the translation and build the result. It plays.
Nothing in it mentions Boulder Dash, levels, formats or hidden worlds, so earlier searches missed it. A code search for the executable's filename found it.
It translates the same program this project disassembled. Its input is the unpacked EGA executable studied here plus its 160-byte header, differing only in twelve bytes of stack padding the program never reads, and it enters at the address recorded here as the EGA entry point.
Within an hour of being found it corrected the palette work. A selector in the generated code hands one of four blocks to the BIOS, whose call takes sixteen palette registers and the overscan byte. That fixes the block stride at seventeen bytes, and shows the palettes start earlier than the colour matching here had assumed.
Where it stops helping
Data lines up: its labels are EGA file offsets plus 0x10000 and its
data offsets are unchanged, so the palette check was quick. Code does not. This
site's engine addresses are in the VGA executable, a separately
compiled build, and of six engine routines checked, only the first seventeen bytes of
one appear anywhere in the EGA image.
Nor does a machine translation explain anything. It has no names and no structure,
just goto between raw labels and registers held as globals. You can run
it and watch, but the hard part of this work was working out what the bytes
mean.
And it is not faithful everywhere. The build applies a hand-written patch to the generated code, and one patched line in the treasure routine tests for zero where the original tests the sign: take one treasure from a quota of 40 and the original leaves 39, the patched translation 0.
What it could still do. The port has since been run beside the original's own code in this project's interpreter (the honest limit), so cicodis is no longer the only route to a running original. It has not been built or run here: the build script is hard-coded for macOS on Apple silicon, the patch needs a line-by-line audit before the result can stand in for the original, and with addresses that do not match, any comparison would have to go step by step on the cave grid. It remains a second reference, for comparing real play.
Other versions and sources
Beyond the PC release, what is known comes mostly from the other versions, a few of their makers, the 1987 magazines, the manual and the boxes. No scan of a magazine, box or manual is copied here; public ones are linked.
Arcade first, then the home versions
Rockford began in 1987 as an arcade game for Arcadia Systems, on a board built around the Commodore Amiga, as Zzap!64 described it in July 1987. The C64 box says the game was "developed using all the 16-bit power of the AMIGA for ARCADIA SYSTEMS". The arcade code has never been dumped, and MAME lists it as not dumped.
Home versions followed from late 1987. The first PC release is dated November 1987; by May 1988 ACE listed the ST, PC, Spectrum and C64 versions as out and the Amiga as imminent. Icon Design did the Amiga version, which Synergistic Software ported to the PC, and there were Atari 8-bit and Amstrad CPC versions. Every home version whose files could be read here offers five worlds, but one hidden cave did ship: the original Atari ST disk has luck's fourth cave as its third body cave.
Who made which version
| Version | Credited | Where from |
|---|---|---|
| Arcade | Tony Manso, Fernando Herrera, Peter Liepa, Todd Weiss, Nick Scarim, David H. Schroeder | public pages |
| Amiga | Laurence Vanhelsuwé for Icon Design; music Jas C. Brooke | The Big Book of Amiga Hardware |
| Atari ST | Peter Harrison | Atarimania |
| MS-DOS | John Conley for Synergistic Software; graphics David Schroeder, Walter Meyers and David Johnson; puzzles Fernando Herrera; music Nick Scarim | the executable's own strings |
| Amstrad CPC | Brian Beuken | cpcrulez.fr, CPC-Power |
Jas C. Brooke is credited on nearly every 8-bit and 16-bit version. Except for the MS-DOS strings, the credits and statements here come from reading public pages and have not all been re-checked. None of the people named has been contacted.
Tony Manso says he co-wrote the arcade original, that its sound effects and music were very different, and that he kept no ROM. The Big Book of Amiga Hardware calls the Amiga version a clean-room implementation, with only the graphics recovered from the arcade ROMs. Richard Spitalny of First Star has told Retro Gamer that the versions were made at the same time. Brian Beuken writes on his own site that there were ten themes of four levels, split over two games. His is the only such statement found from anyone who worked on the game, and the CPC disk here shows no second game.
The 1987 magazines: ten worlds and forty screens
Before any home version existed, the arcade game was sold as ten worlds. Zzap!64 issue 27 (July 1987) promised "40 different screens in which Rockford plays ten different roles", and Crash 48 and Zzap!64 33 later made the same claim. Two magazines photographed hidden worlds on the cabinet:
- Zzap!64 27, page 70: two photographs of the music world, Rockford as a conductor collecting notes. No other pictures of that world have been found.
- Computer and Video Games 70, "Arcade Action": an arcade screenshot of scuba, with seashells for boulders and pointed yellow gems. Its text counts nine scenarios of five levels, a figure no home version shares.
Every 1988 home review found says five worlds; ACE 8 (May 1988) gives five of sixteen screens, eighty in all. The 1987 pages are the first dated, public evidence that the hidden worlds were real arcade worlds.
The photographs against the tiles
Set beside the builds' tiles for those worlds (Sahala's sheets in the faithful build, VIP's redraws of them), the photographs agree on shape. In music the notes are the treasure, piano keys the walls and dark discs with a red centre the boulders; in scuba the boulders are shells and the gems are pointed. The colours mostly differ, and so does the player: the arcade's scuba Rockford is a red octopus with large white eyes, where the sheet draws a diver in a helmet. These are camera shots of a screen, the Zzap!64 pair with a strong brown cast, so shape is better evidence than colour. No art was changed to follow them.
The manual
One eight-page manual covers the Amiga, Atari ST, Atari 8-bit, PC and C64/C128 versions. It describes five worlds and no others, each of four levels of four screens, and says nothing about extra worlds, a second disk or a bonus. Each world gets a story, from Rockford the Hunter in the Caverns of Craymar to the Doctor in Doctor Frankenstein, where "the taps drip blood". Its PC keys are R to restart, Q to quit, B for the background colour, F1 for help and S for sound, with no word of the debug keyboard.
The boxes
The Atari ST box back carries eight screenshots captioned "SCREEN SHOTS FROM THE AMIGA VERSION". Most are of scuba and player, the two worlds the PC dropped in 1988, and one is luck, the only picture of that world anywhere. The Amiga box back has the same eight, and both boxes say five worlds of four levels.
A second box back, a parchment design doodled with a fish, an octopus, a heart and
a parrot, was used on the PC box and on an Amiga box distributed by Electronic
Arts. Its left screenshot is hunter, with GOLD in the status line. It
says five worlds too, so the doodles decorate a box that sold five worlds, and
nothing on it points to a late change of plan.
Go and read them
All four are public.
- Rocky Clone on Aminet, Laurence Vanhelsuwé - the game, its source and its copy of the forty caves.
- The Rockford Remake Project, A. Sahala - the writeup, the hidden levels, and the remake. Its patcher is at asahala/Rockford-Patcher.
- Rockford on ModdingWiki, and Camoto's support for it in libgamemaps and camoto-studio, by Adam Nielsen.
- The cicodis translation by Gabriel Valky, generated by cicodis itself.