Rockford a study of the 1988 game

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

ProjectWho, whenWhat it is
Rocky CloneLaurence Vanhelsuwé, 1989A 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 ProjectA. Sahala, 2006-2026The data, from a hex editor and from playing. A page, a patcher and a remake on another engine
Camoto and ModdingWikiAdam Nielsen, 2010-2015The file formats, as a level editor and a C++ library
cicodisGabriel ValkyThe 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.

Cell codes as Rocky.s names them
ValueRocky.sName here
0x00AIRSpace
0x01GRASSDirt
0x02RWALLSteel wall
0x03WALLBrick wall
0x04EWALL, MAGIC_TIME 350 generationsMagic wall
0x10AMIBAAmoeba
0x20MANPlayer start
0x28ROCKBoulder
0x38FIRE_TAPFire tap
0x70BEGG, hatches in 200 generationsEvil worm
0x74EXITExit
0x78NUMBERTreasure bonus
0x7CEXTRA_T, BONUS_SECS 20Time bonus
0x80EXTRA_LNot in any of the forty caves
0x84GEGG, hatches in 100 generationsGood worm
0x88DIAMONDTreasure
0xC4WATER_TAPAcid 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.

ClaimReached there byReached here by
40 caves of 40 by 22, one byte a cell, no headercountingcounting, then the loader
The cave order interleaves shipped and unreleased worldsa patch that worksthe index arithmetic
0x20 is the player, 0x74 is the exitplayingtwo loader instructions
One enemy family yields treasure, the other does notplayingthe blast kinds
The graphics are planar EGAa third party, 2018decoding 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

VersionCreditedWhere from
ArcadeTony Manso, Fernando Herrera, Peter Liepa, Todd Weiss, Nick Scarim, David H. Schroederpublic pages
AmigaLaurence Vanhelsuwé for Icon Design; music Jas C. BrookeThe Big Book of Amiga Hardware
Atari STPeter HarrisonAtarimania
MS-DOSJohn Conley for Synergistic Software; graphics David Schroeder, Walter Meyers and David Johnson; puzzles Fernando Herrera; music Nick Scarimthe executable's own strings
Amstrad CPCBrian Beukencpcrulez.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.