Spindizzy · Discoveries

Discoveries

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

A password the credits say does not exist, inhabitants that break their own speed limit, a knock off the walls that never sounds, and a switch that opens nothing.

01 · The password

Secret: "I LIED!" stops the clock, though the credits say there is no cheat

One of the hints on the credits screen says "there is no cheat mode". There is one. Once, as the game starts up, check_cheat_password ($6076) switches every ROM and chip out of the way and compares seven bytes of the memory hidden under the chips, at $DF00, with a password kept just after the routine (cheat_password, $6098): "I LIED!" in ASCII. If they match, the routine writes an RTS, the 6502's return instruction, over the first byte of add_to_time ($9533), the routine every loss of time goes through. From then on the time can only go up: rooms and jewels still add to it, up to 150.

The game's own check runs on this page on a model of the C64's processor over the listing's bytes, with what you type written into the memory at $DF00. The answer is what it leaves at $9533.

The game itself never writes to $DF00, and a player cannot type there: on a C64 that address belongs to the expansion port, and the memory under it can only be reached with the chips switched out. The password has to be put there before the game starts, with a cartridge or a machine-code monitor. With it in place the time stayed at 108 for 20 seconds in the start room; without it, it went from 107 to 103 in the same time. The same in play, as a poke:

POKE 38195,96

02 · Inhabitants

Bug: inhabitants break their speed limit in two directions

Each of the 14 inhabitants has a top speed in the world data, from 16 to 64. Every time the pieces move, it steers 4 towards Gerald along each axis (steer_speed, $A818). Speeding up in the plus direction, the routine stops at the top speed. Speeding up in the minus direction, it takes the top speed itself from the new speed and checks whether the result is negative (CMP, then BMI), the test for the plus side. A negative speed less a positive top speed is negative, until the 8-bit result wraps round past -128 and turns positive, which happens once the speed is below -128 plus the top speed. So the speed keeps growing until then, and only then snaps back to minus the top speed and starts growing again. An inhabitant with a top speed of 16 chasing Gerald towards the minus side runs out to -112, seven times its limit.

In the first view the minus directions are the two that lead up the screen, away from the viewer. Only the three inhabitants with a top speed of 64 are held both ways, because -68 is already below -128 plus 64. In room 55, 73, an inhabitant with a top speed of 24 heading for Gerald in the minus direction went from standing to a speed of -64 in 0.6 seconds.

03 · The credits

Secret: RUN/STOP on the title shows the credits and four hints

The title lists fire, S, O, and H. RUN/STOP, which it does not list, brings up a screen of its own (credits_screen, $70F0): thanks to eight people, "the credit message", and four hints. "Make a map. It fits a 60*50 grid", "note down all switches", "there is no cheat mode", and "graphics in Spindizzymation". The world does fit: its 386 rooms take up 38 rows and 39 columns of the map, which the Map tab draws.

The credits screen: a list of thanks and a box of hints under the logo
The screen RUN/STOP brings up from the title.

04 · Walls

Bug: the knock off a wall never sounds

When Gerald runs into a wall, the game undoes the step and reverses and halves his speed along that axis (wall_collisions, $9311; bounce_speed, $9421). Then it calls the same noise routine a hard landing uses (noise_sound, $88BE), with half the top byte of the new speed as the pitch. That routine plays nothing below 7. The top byte is 0 at any speed Gerald can reach, so the knock is asked for at every bounce and never heard. Gerald bounced round the start room 18 times without a sound.

05 · Ice

Stopping dead on ice costs 5 of the time

On ice neither friction nor the joystick works, so Gerald slides on in a straight line (How it works). If he ever came to a dead stop there he could never move again, so the game checks for it (on_ice, $9116): a stop on ice, unless he is on a lift, puts him back where he last stood on something solid, for 5 of the time, as a fall would. Set down on ice at rest, he was put back at once.

06 · The fast speed

The fast speed runs the clock twice as fast as well

The options screen offers a slow and a fast speed. The difference is one number: how long the main loop waits at the top of each pass, 16,000 processor cycles at the slow speed and 1 at the fast (new_game, $84D1). The clock counts passes, not seconds (How it works), so it speeds up with everything else.

SpeedPasses a frameFrames to a tickSeconds to a tick
Slow1.22521.0
Fast2.33270.5

Measured in an ordinary room, where the clock ticks every 64 passes. In a busier room each pass takes longer at the fast speed, and the clock slows with it.

Gerald's speed, gravity and friction work per pass too, so the game is the same game, played twice as fast against a clock that is twice as fast: the fast speed gives no more or less time for a room.

07 · Leftovers

Switch 6 opens nothing

Two pads in the world carry switch 6, and pressing one lights its symbol in the panel's box. There is no lift or switched block on switch 6 in any room. The world data has other leftovers: two of the 127 shared structures, numbers $3B and $4F, are never named by a room, another structure, or a switched block, so they are never built, and structures $20 and $40 each have a second record that the search never reaches, since it stops at the first.

08 · Shapes

Secret: I changes the inhabitants' shape along with Gerald's

I swaps Gerald between three shapes (change_shape, $7223). The game keeps the one in use at $C800 and the other two as spares, and it draws the inhabitants from the spares (draw_object, $A535). Pressing I changes them too.

A room with Gerald and two inhabitants
Room 65, 66 with Gerald and its two inhabitants.
The same room after pressing I: all three have new shapes
After I: all three have changed.

09 · RESTORE

RESTORE goes back to the title from anywhere

At start-up the game writes the signature a cartridge would carry, "CBM80", at $8000, with $7000 as the address to start from. The C64's ROM checks for that signature whenever RESTORE is pressed, and jumps there if it finds it. So RESTORE, alone or with RUN/STOP, abandons the game and brings back the title, without a question.