1984 · Activision

Ghostbusters

This minisite was contributed by air, unorig. It’s currently claimed by unorig who is editing it to reach a Gold tier standard.

Every sprite in the game, unpacked from the game's own data, and the one interrupt a frame that puts them on the screen.

The sprites

Sixty sprite shapes, packed into 3,056 bytes

The Slimers, the Roamers, the men, the proton streams, the Marshmallow Man, and every item in the shop are sprites. All of them are drawn below from the game's own data, unpacked the way the game unpacks them at start-up.

Each shape in the colour the game gives it ($A949), at three times the C64's pixels, on the background of the screen it appears on. The animated ones step through their shapes in the order the game uses them.

None of the shapes is stored as it appears. The start-up clears the video bank and rebuilds it from a run-length stream ($B408-$BFF7), in which a $11 byte and a count stand for a run of zero bytes ($610B). Sprites are mostly empty space, so 3,800 bytes of shapes pack into 3,056. The stream stops eight rows into shape 59, the Activision logo, which needs no more.

The men have their own frames for walking each way, but the proton stream is drawn once. After unpacking, the start-up copies the stream's six shapes, and the two after them, flipped left to right ($6151), so a stream can point either way.

The Marshmallow Man is four sprites. On the city map he stomps with two of them changing shape ($A909, $A90D), and on the street outside Zuul the same four are doubled in size.

The screens

One raster interrupt a frame runs everything but the game's logic

The title, drawn from the game's memory by the site's renderer. All 104,448 pixels match the emulator. The lyric window's smooth scroll is a raster split ($8EB7).

The game draws everything in video bank 1 ($4000-$7FFF): the screen at $5400, the character set at $5800, and the sprite shapes from $4000. The character set starts as the upper-case letters copied from the character ROM, with the Activision logo and a few symbols over the top.

The raster interrupt fires at line $B8. In play it steps the random number, counts the tick, scrolls the bottom line, waits for lines $DF and $EC to colour the status band, writes all eight sprites from the positions the game keeps halved, sets the frame flag the main loop waits for, and runs the music and the sound effects. The main loop ($6FEC) does one pass of the game each time the flag is set, ending with the handler for the current state from a table of 64 ($381A).