MapsDice and combatThe partyPictures and textSoundDisks and saves
01 · The play screen
The play screen, rebuilt from memory
The map, its frame, the clock, the gauge on the right, the menu bar, and the roster are all drawn into one bitmap. Space shows the roster over the bottom of the map.
Two frames of play, recorded in the emulator a moment apart, and drawn here by the site's model of the video chip from the 9,001 bytes it reads: the colours at $5C00, the bitmap at $6000, and one byte at $7FFF, with the colour memory. Drawn the same way, every one of the 104,448 pixels of each frame, border included, matches the emulator's own picture.
The C64 has a text mode, and Wasteland never uses it. The screen is a multicolour bitmap at $6000, in which each pixel is two dots wide. Each 8 by 8 cell has four colours: two from its byte at $5C00, one from the colour memory, and the background, which every cell shares. Every letter on the screen is drawn into that bitmap by the engine, from a font of its own at $C600 ($1F03). The font has 102 glyphs, from the space up to the corners of the frame and the steps of the gauge.
The screen shows 24 rows of cells, not 25 ($7F55). The bitmap's last row, $7E00 to $7F3F, is hidden, except for a moment while the screen shakes ($077A), and the memory from $7E00 up is where the game loads each of its programs: the title, the Ranger Center, the game itself, and the rest.
The clock in the top right corner is the game's own: hours and minutes ($B143). The gauge below it is a Geiger counter's ($0AA1). It lights from the bottom as radiation comes into view, and stays dark when nobody in the party carries a Geiger counter.
02 · The map window
Walking the world map
The game shows the world through a window 19 squares wide and 9 high, with the party in the middle. Walk it with I, J, K and L, the game's own keys ($7F18).
Time - Square -
The view as the game draws it: 19 by 9 squares, each drawn by a port of the engine's square routine ($0B53), with the party's marker, tile 7, on the middle square ($AF1D). The screen cuts half a square off every edge. The window refuses the steps the game refuses ($AD5B), shows the messages the squares show, and moves the clock as a step does ($AF32). It starts where the party stood in a frame recorded in play.
A square is 16 screen pixels each way, so the 19 by 9 squares need 304 by 144 pixels. The screen shows 288 by 128 of them, and half of every square on the edge is cut off ($2323).
The party never leaves the middle of the window, so each step moves the world under it. The game does not draw the window again. Instead, the game moves the picture one square and draws the two rows or columns on the side the picture moved towards: the new edge, and the one beside it that was cut in half before ($AE2F, $AE4E, $AE6D, $AE8C). The window here draws all 171 squares every time, which gives the same picture.
Before each step the game asks whether the square ahead lets the party in ($AD5B). An edge of the map, a group of monsters, a failed check, an exit answered N, and an obstacle all say no. The window asks the same question, with a port checked against the game's code for every square of every map in all four directions. The window answers Y when an exit asks, so the party can walk across the square of a town, but it stays on the world map. It never passes a check, because it has no party.
A step on the world map takes four minutes (the map record's byte +$35), so 15 steps make an hour ($AF32). From 18:00 to 05:59 the world map's 36 radiation squares are drawn as the radiation sign ($0B80): press Midnight to see them. On the world map, one step in 100 can also bring a random encounter ($B015). The window does not roll for one.
There is no joystick. C64-Wiki and GameBase64 say the game takes one in port 2, but the only code that reads the control ports is the keyboard scan ($2967), and it never reads the port that stick is on. Held there in play, a stick moves nothing. A stick in port 1 shares its lines with the keyboard, so pushing it types keys: up brought up the first character's sheet.