Rockford a study of the 1988 game

The same game, redrawn

One engine, two presentations. The faithful build exists to be right and this one to be better, and neither may bend the other to suit itself.

This page records how VIP's art and sound were made, what went wrong and what it cost. Both builds are served at /play/: what the builds are.

Built. All 1,390 sprites across the ten worlds are drawn, the 90 cartoon frames are in, and the eight sound effects have been done since 16 September 2026. Two questions are still open: whether the music can ship, and the name.

A presentation is a bundle of assets

The simulation is the part proven against the disassembly and has nothing to do with how the game looks or sounds, so it is not touched: changing it would throw away the one thing that makes the project interesting. A presentation is only assets:

presentation = sprite atlas + tile size + audio set + HUD style

It is fixed when the build is made. dotnet publish -p:Presentation=Vip makes the VIP build, and each build ships only its own assets. A release that could switch would carry both sets, and a VIP atlas is about two megabytes a world against about twenty-two kilobytes for the original's sheet, so the live switch is in debug builds only, for side-by-side comparison. The faithful build stays the reference VIP is judged against.

VIP also draws movement differently, in the browser and never in the simulation. A sprite the engine reports as moved slides into its new cell over 50 milliseconds, never ahead of where the simulation already has it, and digging, collecting and blasts throw a few particles. Its lighting adds a contact shadow under what can fall and a glow on what emits. The faithful build draws none of these.

What each build is made of
EngineArt and soundNot this project's own
FaithfulMIT, oursthe original's, unchangedthe art, the cartoons, the music, the forty caves; the hidden five are Aleksi Sahala's tiles, unchanged
VIPMIT, oursredrawn and remixed herethe forty caves; the melody under the remix; the redrawn art is derived from the original's, and the hidden five from Sahala's

VIP's sprites and cartoons were drawn with the originals as reference images, which makes them derivative works, and its hidden worlds are derived from Aleksi Sahala's art. Both builds have been served at /play/ since 22 September 2026, with no permission from the rights holders and none claimed. A request went to BBG Entertainment GmbH on 16 September 2026 and has not been answered.

VIP's atlas never falls back to the original. It starts from a transparent canvas, a position with no redraw stops the build, and tools/hires.py verify checks the finished atlases by pixel, not filename. It finds no original pixels in any of the ten.

On the name. Rockford VIP was chosen on 15 September 2026 for a private build. Rockford is a registered trade mark of BBG Entertainment, so it is the wrong name for a build anyone can open. It has not been changed yet.

The sprites

An image model redraws every sprite at eight times the original scale, from the original 16 by 16 tile as a reference image, into an atlas laid out exactly like the original sheet. Downstream, only the coordinate scale and the tile size change.

Each world has 139 distinct sprites, 1,390 in all, counted from the authored bytes in the forty caves plus the states the rules produce. Tiles on the sheet that the game never shows are not redrawn. The image model draws 1,110. The other 280 are built in code from finished tiles, as the original builds them: a left-facing frame flipped from the right-facing one, a wall that scrolls, a tap handle that turns, one object breaking up into another, a second frame that copies the first. Drawn by the model, those kept going wrong in the one way that mattered, and a flip cannot face the wrong way.

The five hidden worlds

Five of the ten worlds are not on the 1988 menu: scuba, player, music, luck and miner. VIP shows them on a second page of its select screen. They are Aleksi Sahala's reconstructions, redrawn: VIP's sprites for them were generated from his tiles and portraits in asahala/Rockford-Patcher, so they are derived from his drawings and are not this project's own. His repository carries no licence. On 7 October 2026 he agreed to the use of his tilesets, with credit and a link to his repository. The faithful build uses them unchanged; VIP uses them on the same terms, as the reference images these sprites are generated from. They come down if he asks.

His worlds do not all behave like the 1988 ones. Scuba's timed wall changes colour every frame, music's shifts 2 pixels, miner's moves 4 rows down, and scuba and luck draw their fire tap as a bird. So each method that builds one tile from another is measured on a world's own tiles before it is used there, and the model draws whatever it does not fit. The 1988 five were drawn with gpt-image-2 and the hidden five with gpt-image-2.5-flare, because on 3 October the API stopped accepting a transparent background for the older model.

Four things that went wrong

These came from the first pass, before any rule was written down.

  1. Unnamed sprites get invented. The first prompt described anything missing from the lookup table as "a small game object", and the model drew one. A tropical bird became a brick wall and an empty tile became a lit bomb.
  2. Asking for the shapes exactly produces pixel art. Told to "reproduce exactly what is in the reference, same shapes in the same positions", the model copied the pixel steps and returned the same blocky art, larger: the one result the exercise exists to avoid. The prompt now asks for smooth, curved edges and no visible pixels. The reference is a tiny bitmap; the job is to draw the picture it was trying to be.
  3. Frames drawn independently do not agree. Frames of one animation that disagree flicker. Each animation's first frame is now drawn first and passed to the rest as a second reference, for its style only; rule 4 below says why.
  4. Rate limits lose work silently. A rate-limited call fails instead of waiting. The first full pass tried all 315 sprites of the time and landed 108. The runner now paces its requests, backs off exponentially instead of dropping a sprite, and resumes where a stopped run left off.

Read the tile before you prompt it

On 29 September 2026 the served hunter set was checked frame by frame. Its faults were things the prompts had never mentioned, so no rewording could fix them. The player faced the wrong way or had the wrong foot forward, and a door swung out instead of in. Two toucans stood where the tile has one, a turning enemy was drawn as one picture eight times, and explosions came out as a solid splat. Across the five 1988 worlds, 415 of the 695 served tiles were wrong in some respect. These ten rules came out of that and apply to all VIP art, the hidden worlds included.

  1. Every tile is read before it is prompted, and the reading is the prompt's pose. For every position in every world, tools/sprite-readings.json records the facing, which foot is down, where the arm is, how many of a motif there are and how far a door is open. Each reading is taken off the tile, as a character grid and magnified, never from a name, the manual or memory. The old pose table, written without looking, had three of the player's four walks at the wrong positions. hires.py verify fails if a world being drawn has a position with no reading.
  2. Read an animation as a whole. What changes between frames is what a prompt most needs to say. The review page shows an object's frames side by side, in the order the engine plays them; in sheet order the two frames of a walk sit twenty tiles apart, and nobody compares them.
  3. The engine says which frame is which, and the pixels say what it shows. Check both. The sequence names in the tool were wrong three times out of four because neither had been checked.
  4. An anchor frame gives style, never pose. Told to "match" the finished first frame, the model copied its pose too: both walk frames on the same foot, all eight enemy frames one picture. The prompt now takes palette, line weight and proportion from the anchor and nothing else.
  5. A rule applied to every frame has to hold for every frame. Two did not. Shape rules for the enemies ("wide spread", "compact upright") contradicted about half the original frames, so a hammer that turns a full circle was drawn level eight times. A rule that each sprite be one closed shape banned sparks and fragments, which is what an explosion is made of.
  6. What the original builds, build; do not draw it. Flips, shifts and turns are made from the finished tile, as is anything that changes by a rule rather than a picture: the bonus border, one object breaking into another, a tap handle turning. Partners are matched by pixels, not by sheet position, because a fixed pairing gave the hunter crocodile its jaws the wrong way round. No method is assumed for a world it was not measured on.
  7. The subject must not contradict the reading. "A wall of toucans" drew two birds in leaves over a reading of one bird on terracotta. The count goes in the subject.
  8. A moderation refusal is permanent. The cook's right-facing frames have been refused since the first run, whatever the wording. They are built from a finished tile the original says they match, and the refusal is recorded, not retried every run.
  9. A sprite costs $0.024, not the $0.006 of a bare draft. The 1988 tile, and on a later frame the anchor as well, are billed as input.
  10. Review what is served, and check after every run. The review page cuts the VIP column from the atlas the build loads, so a flip, a shift or a crop shows as the player sees it. After a run, each new tile is checked against its reading for facing, feet, counts, state and coverage (not style), and stragglers are redrawn before anything is merged.

The hidden worlds have no 1988 tile to read, so their readings were taken the same way off the art they are drawn from, before any prompt was sent. Some tiles were still wrong after a corrected redraw, and on 4 October sixteen were made from a finished neighbour instead: a copy, a half turn, a flip, a shift, or an image edit told to change one thing. The same day, seven worm frames got back a small 1988 movement that copying had cost them: the cook's two blinks, the cowboy's wagon wheels and locomotive, and the hunter's three tails.

The cartoons

When a cave ends, the original plays a short cartoon over it: WIN when the cave is cleared, LOSE when Rockford dies with time left, TIME when the clock runs out. Each is six frames of 48 by 48 pixels at 150 milliseconds a frame, shown for between one and six seconds. The faithful build plays the original's own. VIP plays the same three redrawn at eight times the size: 90 frames across the five 1988 worlds.

They were made by the same rules as the sprites. Every frame was read and written down before it was prompted, the prompt asks for that pose, and each cartoon's first frame is passed to the rest for style only. Code, not the model, draws the border and the flat background. The cowboy's Boot Hill is drawn once and its ghost frames are edits of it, because drawn frame by frame the tombstone moved. Every frame was then checked against its original, and the two that were wrong were redrawn. A build check fails if any frame is the original's pixels enlarged. The set cost about $2.50 at draft quality, redraws included.

The hidden worlds have no cartoons, because the art they are drawn from has none.

Hunter: VIP's redrawn WIN, LOSE and TIME cartoons, six frames each
Hunter. WIN, LOSE and TIME, top to bottom, six frames each.
Cook: VIP's redrawn WIN, LOSE and TIME cartoons, six frames each
Cook. WIN, LOSE and TIME, top to bottom, six frames each.
Cowboy: VIP's redrawn WIN, LOSE and TIME cartoons, six frames each
Cowboy. WIN, LOSE and TIME, top to bottom, six frames each.
Space: VIP's redrawn WIN, LOSE and TIME cartoons, six frames each
Space. WIN, LOSE and TIME, top to bottom, six frames each.
Body: VIP's redrawn WIN, LOSE and TIME cartoons, six frames each
Body. WIN, LOSE and TIME, top to bottom, six frames each.

The sound effects, and why no model is used for them

The originals are eight sound requests, six one-shots and two holding tones, played one square wave at a time on the PC speaker, because the hardware could do nothing else. They suit procedural synthesis in the family of sfxr, which is deterministic, easy to adjust and ships no files, and gives the right character rather than an approximation. The best text-to-sound models are very good and still the wrong tool here, because what they do well is realistic foley: material, space, ambience. A square-wave blip is none of those.

VIP's eight effects are the gem, the blast, a boulder landing, treasure landing, the expanding wall, the footstep and the two holding tones. All are made in the browser from oscillators and one second of white noise generated once at start-up. The boulder and treasure sounds take the original's own random draw from the divisor instead of rolling their own, so a stream of falling rocks varies exactly where the 1988 game's did; the footstep alternates its two pitches without a draw, as the original does. The footstep fires on every step, up to ten a second, so it is short and quiet. It is the only effect that does not duck the music, because ducking on it held the music down for as long as the player kept walking.

The music

The theme is fully extracted as data rather than audio: 22 patterns, an order list, a note table. That is an unusual place to start; most attempts at remastering game music begin with a recording.

Three versions, all generated from the same 204 notes
VersionHow
Rawthe divisors the game writes, as square waves
Arrangedsame notes, detuned saws with a sub, an envelope, a short delay
Stemsame notes, clean struck tone, dropped an octave

The stem was meant as conditioning input for a model that takes audio in and reinterprets it. Played plainly, without character or effects, the tune is what such a model needs to hear if it is to keep First Star's melody and change only its character, instead of inventing a melody of its own.

What came of that plan

The account's own provider had nothing for that. Checked against the live model list, not from memory, every audio model on it was speech, and none generated music or sound effects.

There was also a licensing trap unrelated to the game. One of the cheapest options is excellent, but its weights are non-commercial: fine for finding out whether an approach works, wrong for anything kept.

What VIP plays

The theme is "Dance Floor Game", generated on Suno, about two minutes thirty-nine, in two cuts. The vocal cut is the default and the instrumental is one click away.

It is a remix, and the melody is Nick Scarim's. The track was generated from the original tune. The production around it is new; the melody underneath is his, written for the 1987 game. He is credited wherever the soundtrack is described, and no licence for it is claimed or held.

For part of 16 September 2026 this page said the opposite: that the track was original and carried no melody of theirs. That was wrong. The correction is left visible because the version that favoured this project is the one a rights holder would most reasonably object to having been shown.

The tracks were made on Suno's Pro tier, which assigns whatever rights Suno holds in the output to the account that generated it. That assignment cannot reach the underlying composition, which was never Suno's to give, and Suno expressly does not warrant that copyright vests in the output at all.

So a remix inherits the rights question it was meant to settle, and whether VIP's music can ship is still open. The extraction still paid off: the music page is built on it, and the faithful build plays the original from that note data rather than from a recording.

What is left

  • Settle whether VIP's music can ship. That needs a track that owes Nick Scarim's 1987 melody nothing, or a licence.
  • Settle the name, because of the trade mark (see the note near the top).

Everything else on the old list is done: the sprite run and its atlases for all ten worlds, the review of every sprite against its original, the switch to the high-resolution atlas at eight times the tile size, the sound effects, the cartoons, and the side-by-side switch, which lives in debug builds only.