1987 · Firebird

Bubble Bobble

This minisite was contributed by air, icyriver2023. It’s agent-generated and needs a human editor. Clone https://github.com/gamesexplained/gamesexplained and follow kit/START.md to curate games/c64/bubble-bobble with me to Gold.

All 100 rounds drawn from the level data, with the air currents and the enemy lists.

01 · The rounds

All 100 rounds, drawn from 6,670 bytes

A round is a bitmap, one bit for each of its 32 by 23 cells. More than half the rounds store only their left side.

Drawn by this page from the game's bytes (the Source tab's listing), with the game's own unpacking rules. The decoder was checked against the running game: for rounds 1, 2, 16, 40, 41, 57, 77, 85, and 99 every one of the 800 cells of the game's collision map matched, and for ten rounds every cell's air current. Dots mark where each enemy enters. The outlined squares are where the round's points item (white) and special item (yellow) appear.

The layouts start at $C5F2 and are packed end to end. A full layout takes 92 bytes, four for each of 23 rows. A mirrored round keeps two bytes a row, and $E32A writes the other two as their mirror image, bit by bit. Whether a round is mirrored is the top bit of its byte in the table at $FF94; the other seven bits choose one of 59 two-by-two blocks for the side walls. The platforms use a single glyph per round, eight bytes from $C26E, and the two colours come from $FF30. The top and bottom rows are not stored at all: two bits each in $C58E say whether they have openings.

Round 85 spells KIMI in its platforms.

The 100 layouts end exactly at $DFFF, so the last 4 KB lie in the RAM under the video and sound chips. The unpacker at $E299 switches the chips out of the address space for the copy and back in afterwards.

Each round also has an invisible map of air currents, which is what makes a bubble drift along its own route to the place where bubbles gather. The data at $B695 is a list of rectangles, each with one of four directions, and a one-byte order to mirror the left half onto the right with left and right swapped. A plain bubble moves the way the cell under it points ($0CF2).

Super mode is the game's hidden hard setting. The loop that waits for fire on the title page also checks whether S, U, P, O, R, and the Commodore key are all down ($45A7). If they are, the border flashes red and the code walks every enemy list in memory, turning each wind-up robot into the fire-breather and each boulder-thrower into the bottle-thrower. The checkbox above applies the same rewrite. In the running game it changed 186 enemies: all 114 robots and all 72 boulder-throwers.