1987 · Electronic Arts

Skate or Die!

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

Rodney's shop and the town square: where players sign in, how the skater's path chooses an event, and the code that stays in memory to load each event and keep the score.

01 · The shop

Rodney's counter is the menu

After the title, the game opens in Rodney's skate shop. There is no list of options: the player moves a pointer, a sprite of the SKATE OR DIE! logo, over things in the picture, and each one does a job. The shop has 13 such spots ($2113): signing in ($1CEC), choosing a board colour ($1A7E), the records ($1DC8), practice ($2067) and competing ($1A65). Others only make Rodney talk.

Sign-in takes up to eight skaters with names of up to fifteen letters, and accepting an empty name deletes a skater ($1D5B). Board colours run through every colour but black ($1A7E), and each event paints the skater's board in the colour chosen.

02 · Rodney

Point at Rodney and he talks back

Rodney has 21 lines ($217E), each 36 letters drawn into a balloon of six sprites as four rows of nine ($0EA9). Every spot in the picture has a line of its own, and the line changes the moment the pointer crosses into another spot ($0C1D). The spots that choose from the menu say what they do. The others are Rodney being Rodney: point at his hair and he asks DONCHA' LIKE MY 'DO'?, and stare at his face and he asks SO WHAT ARE YOU STARING AT?!

Rodney's shop drawn from the shop's memory: the bitmap at $A000, the screen colours at $8000, and the colour map at $9C00. Move over the picture to see what Rodney says there. The spots are the thirteen rectangles at $2113, tried in order, as $1EB6 tries them for the pointer.

Below his face, Rodney picks one of eight lines at random each time the pointer arrives ($F90F). The last line is kept for a winner: after a full competition the shop opens with CONGRATS, the top skater's name, and YER TOP SKATER!!! ($26A3).

WhereRodney says

03 · The town square

The edge of the screen you leave by picks the event

Practice, or COMPETE ALL, puts the skater in the town square, seen from above. The stick turns the skater a step every two frames, 64 steps to a circle, and pushing it adds speed up to three. There is no friction: the skater keeps rolling with the stick centred, and only pulling back brakes. Diagonals are slower than straight lines, because each step moves sixteen units split between across and down, so a diagonal covers about 70 % of the distance.

The town square drawn from the shop's memory: the bitmap at $4000, the screen colours at $6000, and the colour map at $E000.

The town has no doors to the events, only edges. Its walls are compares in the code rather than a map ($1793, $17E2, $1839, $1888), and which edge the skater rolls off decides what loads: the right edge high up for the Freestyle ramp and low down for High Jump, the bottom edge on the left for the Downhill Race and anywhere else along it for the Downhill Jam, and the left edge low down for the Pool Joust. The left edge high up starts COMPETE ALL; in practice the skater just stops there. The shop door is a small box near the top.

04 · Loading an event

Seven rows of a table, and a disk side to check

On its first load the shop installs the event manager: it loads it to $C000 and copies it up under the KERNAL ($0FD2), then marks it as present at $FDFF. The manager and the disk loader beneath it at $F230 stay in memory from then on; each event loads over everything below them.

The manager's load table ($F8A0) has a row for each place it can send the skater: the shop, the five events, and the side check. Each row gives the file, the load address, the entry point, the name for the SKATING TO message, and the disk side. The events are spread over both sides of the disk: the ramp, High Jump, and the Pool Joust on side 1, the Downhill Race and the Jam on side 2. Before loading, the manager reads three bytes from track 18 ($FA69) and compares them with the side it wants; side 1 holds 01 01 01, side 2 02 02 02. A mismatch shows INSERT SIDE 2 AND PRESS BUTTON.

RowFileLoadEntrySide

The load table at $F8A0, read from the bytes: eight columns of seven bytes (load address, entry point, file, event name, and disk side), the low and high halves of each address in separate columns.

Every file is found by number, not by name: the disk has no directory for them. The loader looks the number up in a table of 49 entries ($F2F9), each a start track, a start sector, and a length, and the drive's own server reads the sectors, eleven apart on most tracks so the next is under the head when the C64 is ready for it.

05 · Results

Every event reports to the same place

An event never returns to the town directly. The event writes its result into a small block of memory at $FE00 and jumps to the manager's $FE06. In practice the manager asks PRACTICE AGAIN? and, on YES, re-enters the event without touching the disk ($FE13). In a competition it records the result, calls the next skater, and when everyone has had a turn it sorts the scores ($F743) and gives 5, 3, and 1 points to the first three ($F7E0).

Back in the shop, the event's top three are merged into the high-score table ($0ACA): twelve records of a name, a score, and a colour, where a tie leaves the old holder in place. The table is written back to the disk ($0BB4), the only time the game saves anything.