Commodore 64 · 1982 · Brøderbund Software

Choplifter

There is one world, it is 4,888 bitmap bits wide, and every coordinate in it is written into the code.

The whole world

Four sheds at one end, the base at the other

Choplifter has no level table. The four sheds stand at world X $037D, $047D, $057D and $067D, written as immediate operands in $B8AE; the base is at $1254 in $BA3F; the camera is clamped between $02B0 and $11D8 in $BD9C. Nothing reads any of those from a table, and the second and third sorties use the same numbers as the first.

camera

A shed and a tank near the left-hand end of the world

The same end of the world in the emulator, with a shed and a tank on the ground. The helicopter is at the camera's left limit, world X $02D0.

What is in it

Every fixed object, and the routine that places it

ObjectWorld XBitmap rowShapePlaced by
Shed 1$037D36 body, 25 plinth71 shut / 72 open, 73 plinth$B8AE
Shed 2$047D36 body, 25 plinth71 / 72, 73$B8AE
Shed 3$057D36 body, 25 plinth71 / 72, 73$B8AE
Shed 4$067D36 body, 25 plinth71 / 72, 73$B8AE
Figure in an open doorwayshed X + 62874$B94A
Base apron$1254 + $0F25fill record at $BB25, 15 columns by 5 rows of $AA$BA6C
Base wedge, left$1254 − 12566, mirrored$BA83
Base wedge, right$1254 + $7F2566$BA9D
Bunker, left half$1254 + $483465$BAB5
Bunker, right half$1254 + $623465, mirrored$BAB5
Flagpole$1254 + $714667$BAF0
Flag$1254 + $734668 or 69, by bit 0 of the pass counter $89$BB07
Hillsthree copies, stepped2964$AA80
Parallax blobsfour copies around $117416, 23, 26, 2870$B971

Rows count upward from the bottom of the play area, which is how the bitmap row tables at $0A00 are indexed. Row 26 is where the background register turns grey, so anything below row 26 is standing on the ground.

The only thing that changes

Where the eight loose hostages stand

Every sortie starts the same way. Sheds 1 to 3 are shut with 16 people inside each, shed 4 is already open with 8 left inside, and 8 are standing outside. That is 64. $BE52 sets all of it. The one number it does not hard-code is the gap between the eight who are already outside: $20 plus a sample of CIA1 timer A masked with $7E, so an even gap somewhere between 32 and 158 units.

Eight figures, laid out from the same starting point with the gap the sample produced. The spread between the tightest and the loosest sortie is about 880 units, roughly two and three quarter screens.

Counting

Sixty-four, split four ways

VariableStart of a sortieMeaning
$0CF4-$0CF70, 0, 0, 1shed state: 0 shut, 1 blown open
$0CF8-$0CFB16, 16, 16, 8people still inside each shed
$0CED56people indoors
$0CF08people outside
$0CEE0delivered; compared with $40 at $967C to end the game
$0CFF0sortie number, 0 to 2

The manual says eighteen to a barracks. The code says sixteen, and the shed that is already open at the start is where the eight loose ones came from.