Commodore 128 Archaeology

A couple of weeks ago, I visited the Internet Archive in San Francisco, and Jason Scott helped me read some Commodore 128 disks that contained my earliest forays into programming, in 1990 and 1991. I've done a little archaeology into this portion of my past, and here are the programs I found:

Maze

Part of a series of games in which you navigate a 3D maze with a joystick. The art is as simple as it 3D gets, with fixed screen coordinates for drawing a wireframe room and optionally doors on each side of the room. No actual 3D projection or rotation, of course. Internally, the shape of the maze is directly represented in the program structure; rooms are blocks of code that draw doors, poll the joystick for input, then jump to the appropriate room code. I remember Alan suggesting I use an array to represent the maze data, and although I also remember implementing a sequel using that technique, I didn't find it on this disk.

"Apartment" and "Theif"

Two text adventures with similar code bases. The writing in both games is definitely mine, and the puzzle design seems like mine, but I'm unclear on how much of the code is original and how much I typed in from code listings -- I know I read at least one book that had a BASIC code listing for a text adventure in it. Hell, who didn't, back then?

Space Patrol

First thing you see after running this is a password prompt. I was obsessed with hacking and security back in the day, despite knowing nothing about it except what I'd read in Clifford Stoll's "The Cuckoo's Egg," and this was as secure as I could make it, the password being stored in a text file rather than in the program source. (It was "quark," by the way.)

The meat of the program is a turn-based combat game with the theme of fighting an alien invasion hand-to-hand, one alien at a time. I was clearly trying for a relatively complex set of mechanics, but the choices are largely meaningless and the result comes down to luck in the end. If you win, you're presented with a newspaper clipping about investigation turning up thermonuclear warheads on their spaceship. I'm pretty sure this game directly precipitated the 2003 invasion of Iraq.

"CS"

This program rolls D&D stats and prints suggested classes. I was obsessed with D&D as a kid and had a bunch of the books, but never had enough interested friends to actually play a campaign.

Quest

I was trying to make a dungeon crawl. I remember being very disappointed in the results, but not knowing why it was failing to be fun. I so wish I could go back in time and give myself some game design pointers, because the mistakes are blindingly obvious now: no actual game choices! The "exploration" is obviously false, the result you get being purely a dice roll. Same deal with the combat mechanics. The sad thing is, while I hadn't played much actual D&D, I totally had the books, and I could've lifted some solid combat mechanics out of them as a starting point rather than failing repeatedly to build my own from scratch.

Gunner

A two-player game of the Artillery lineage, the kind in which you enter an angle and power to fire at your target. The only feedback you get is whether your shot went too far or not far enough -- and in the test game I played, it was always "not far enough," even at maximum power. There's a weird time limit mechanic going on as well: each player has a limited number of shells, and sometimes one of your shells explodes spontaneously. Not sure what my intent was there other. It does serve the purpose of preventing ties, but I don't think I was a sophisticated enough designer back then to have that as a goal.

Guns

This might be the most entertaining game on the disk. It's a one-player simplification of the Gunner idea, giving you a series of targets and a limited number of shells to hit them with. This one only asks for an angle, not a power, and tells you how far off your shot was. It doesn't tell you whether you shot too near or too far, but that actually makes the puzzle more interesting, because it means the gameplay isn't a simple binary search.

Bean Game, Pool, Electrician

These were all basically re-themes of Three-Card Monte. Sample output, from "Pool":
'HELP! HELP! IM DROWNING!'
WHICH NUMBER DO YOU THROW THE LIFE RING
TO? (1-5)
? 3
GLUB! GLUB!
YOU MISSED!
TRY AGAIN? Y/N? Y
WHICH NUMBER DO YOU THROW THE LIFE RING
TO? (1-5)
? 1
GLUB! GLUB!
YOU MISSED!
TRY AGAIN? Y/N? Y
WHICH NUMBER DO YOU THROW THE LIFE RING
TO? (1-5)
? 2
GLUB! GLUB!
SOMEBODY ELSE HELPS THE DROWNING PERSON
AND YOU GET FIRED
My guess is that the way these came about was that I sat down one afternoon after school, decided I wanted to write a game, couldn't think of a decent theme, hit on the idea of being a lifeguard, couldn't come up with a decent mechanic, shat out another guessing game, and never loaded the file again until twenty years later. It's interactive, what more do you want?

Heist

Another guessing game, this one themed as an elaborate multi-stage heist. The best part is the "you lose" message:
HONK!
HONK!
HONK!
YOU BLEW IT MUGSY!

"Obstc"

This is the same game as "Heist," except instead of being about a Heist, it's about an Obstc. I mean, an obstacle course. Its "you lose" message is just "you lose."

Interstellar War

A two-player game where each player places a ship on an infinite grid, and then they take turns guessing what grid coordinates the opponent's ship is on. I should remake this and call it Futility Battleship.

Russian Roulette

With multiplayer! The game continues until all players but one are dead. Who is the winner even going to gloat to? Grim.

Reverse

This is a satisfying little puzzle with about the same amount of replay value as Tower of Hanoi. Sample output:
3  1  4  5  2
HOW MANY DIGITS DO YOU REVERSE? 4
 5  4  1  3  2
HOW MANY DIGITS DO YOU REVERSE? 5
 2  3  1  4  5
HOW MANY DIGITS DO YOU REVERSE? 2
 3  2  1  4  5
HOW MANY DIGITS DO YOU REVERSE? 3
YOU GOT IT! WITH ONLY 4 TURNS!
I'm not sure where I got this mechanic; it seems a little too elegant for Jim-1991 to have just come up with it.

Scrambled Words

I clearly made the fancy title screen and instructions for this game before making the game itself. The game asks the player to unscramble a sequence of letters into words. Looking at the code, I had a small dictionary of possible words to present the player with -- including "FEATHET" -- but I'm sure with them fresh in my mind, it wasn't very fun for me to play. Also, every difficulty except "7-letter words" is broken.

Scrambler

This is a multiplayer version of Scrambled Words. A more sustainable idea from a game design standpoint, but I don't know who I was going to play this with, since I was spending all my time coding rather than making friends.

Zoo

This program plays twenty questions with you, building a binary tree describing the animal kingdom based on information you give it. This was Alan's idea and he may have written the code as well, although it at least looks like my style. This game was password-protected as well. ("Quark" again. I think it was the name of a pet cat?) And I added some code to lock up the computer if you tried to hit RUN/STOP to break out to the BASIC prompt.

Star Trek

Loading this, I assumed I must've typed in the old Star Trek game from a book of code listings, but it actually seems like a half-assed clone of that game. It's interesting to me that I decided to do this, since I'd never watched Star Trek as a kid; the only Star Trek themed thing I'd ever paid attention to was the game. I guess it's probably similar to how, a few years later, I wanted to make a pirate-themed adventure game when the only pirate-themed thing I'd ever paid attention to was The Secret of Monkey Island.

TMNT

I was obsessed with the Teenage Mutant Ninja Turtles, and clearly wanted to make a game. I got as far as the title screen, theme music, and character selection interface before petering out, presumably because I couldn't think of any actual game mechanics.

"Mar"

This seems to be the start of a Mario Bros-themed CYOA. Apparently I ran out of ideas after the second scene, but there is a neat little bit of world building where I describe how Mario and Luigi made piles of grass below the pipes they jumped into, to cushion landings.

"BA"

This program appears to simulate a conversation with a hyperactive child, randomly choosing from fixed responses no matter what the player types. Sample output:
HELLO!
WE'RE GOING ON VACATION!
? GOOD FOR YOU
HOW OLD ARE YOU?
? OLD ENOUGH TO REACH THE GROUND
CAN YOU GO TO THE ZOO?
? YES
BYE! IT'S LUNCHTIME!
? OK, HAVE FUN
?EXTRA IGNORED
CAN YOU PLAY WITH ME?
? I SUPPOSE
WILL YOU BE MY FRIEND?
? NO
CAN YOU TELL TIME?
? YES
WHEN IS YOUR BIRTHDAY?

Bach

I typed in a code listing from a BASIC manual that played Bach's Invention No. 13. I loved it, not realizing I'd gotten the 14th measure horribly wrong.

Music

This program plays notes based on keyboard input, also drawing boxes of varying heights. Multimedia! I don't know why I thought arranging musical notes in alphabetical order was a good idea. Also, judging by the the formula for calculating the frequency of each note, I thought there were 13 semitones in an octave.

The Dictionary of Video Games

Sample output:
THE DICTIONARY OF VIDEO GAMES!
WORD? CHESS
SEARCHING...
I DON'T KNOW THAT GAME. IT MUST BE NEW.
WORD? GLOBAL THERMONUCLEAR WAR
SEARCHING...

?OUT OF DATA ERROR IN 120
READY.
If you enter the name of one of the NES games I owned at the time, it prints a one- or two-sentence summary of the game. About 30% of this program is about Mike Tyson's Punch-Out!!!, because it has duplicate entries for "Punch-Out," "Punch-Out!!!," "Mike Tyson's Punch-Out," etc.

The first sentence in the Contra definition is "A GAME IN WHICH YOU PLAY BILL OR LANCE." Yes, Jim-1991, that is the most salient feature of Contra. This actually fits right in with a recurring motif in these programs, that they were obviously written theme-first, with game mechanics coming later if at all. This isn't a bad design strategy per se -- Shigeru Miyamoto and Will Wright both work that way, for two very significant examples -- but it is a hard thing to pull off well.

Dictionary

This uses the Dictionary of Video Games engine, except I fixed the out-of-data error. According to this program: Floppy Disk: "TINY MAGNETIC STORAGE AREA" High: "HOMONYM OF LOW" Music: "A NICE SERIES OF SOUNDS" Shiny: "AN ADJECTIVE THAT MEANS 'THE FOLLOWING NOUN REFLECTS LIGHT.'"

Tag

The player runs around a mostly-empty playfield using joystick input, chased by an octothorpe. Since the player and the octothorpe move at the same speed, and since the goal is on the opposite side of the octothorpe, it seems to be literally impossible win.

Catch the Mountain Climber

The player uses the joystick to maneuver your underscore to catch a falling exclamation point. I remember being quite proud of this at the time.

Cosmic Garbage

Hey look, I invented Space Invaders, but with only one invader that doesn't shoot back. The common theme for all these arcade-style games: I didn't really understand arrays, so I couldn't easily have more than one of any given thing moving around.

Cat & Mouse

Sample output:
YOU ARE 12 FEET FROM THE WALL
THE MOUSE IS 13 FEET FROM THE WALL
YOU'RE MOVING...
PRESS 'S' TO SLAP THE MOUSE
YOU GOT IT! YOUR OWNER REWARDS YOU WITH
A PIECE OF FISH, AND GIVES YOU ANOTHER
MOUSE TO CATCH
YOU'VE ALREADY CAUGHT 1
YOU ARE 1 FEET FROM THE WALL
THE MOUSE IS 4 FEET FROM THE WALL
YOU'RE MOVING...
PRESS 'S' TO SLAP THE MOUSE
YOU MISSED IT!
YOU ARE 3 FEET FROM THE WALL
THE MOUSE IS 4 FEET FROM THE WALL
YOU'RE MOVING...
PRESS 'S' TO SLAP THE MOUSE
The mechanic here seems to be based around the player's ability to count seconds, since success or failure appears to be based on timing of the slap. Note that in this universe, mice aren't edible and are deliberately set loose by cat owners as a challenge.

"Chal"

8-digit Mastermind. This game works fine except for an unfortunate interface issue: you have to press enter between each digit.

Blackjack

I don't remember exactly how Blackjack works, but I'm pretty sure the dealer doesn't just say "KEEP" over and over again, filling the screen in an infinite loop.

Cards

I'd seen people "playing cards" in movies but I didn't know how card games actually worked. I was aware that you chose your bet based on the hand you were dealt, and that your hand had a value relative to other hands, but that's pretty much all I had figured out. My hand scoring mechanism was to sum up the face value of each card.

Codes

This program enciphers text entered. At first I was sure that the progress bar was artificially slowed because Jim-1991 thought progress bars were awesome, but no, the code actually does run that slowly, looping over a string containing the alphabet and comparing it to every character in the plaintext to determine each letter's index into the alphabet. Also: I totally used a semicolon correctly in the instructions!

Cracker

I was obsessed with the two Terminator movies as a kid and I believe I wrote this program to recreate the visual effect of a young John Connor breaking into a bank account: flashing sequences of characters at the user and eventually settling down on one particular sequence. Your password, sir. Have a nice day!

Elena's Game

I guess I wrote this to teach my sister to enter digits? Because that's what the game asks you to do. She would've been I guess three years old at the time. This is also another game I wrote title-screen first, and I clearly put a lot more work into the fancy animated title screen than the game itself.

Zap

A typing practice game, displaying a random sequence of letters to type and giving you a limited amount of time to hit each one. Either I didn't worry much about balance, or I'm a much better typist now than I was back then, because this game is super easy for me even after having switched to Dvorak over a decade ago.

Math Class

This is an evolved version of the very first program I wrote, which I had in my head long before I ever touched a computer, a very simple arithmetic quiz program. This version randomizes the problems and insults the user when he or she gets the answer wrong.

"Chan"

This draws a series of vertical lines in text mode, taking about ten seconds to cover the screen, then pokes holes in each line. I think it was generating the playfield for a game that I never got around to making.

Nova

When I ran this program I assumed it was me experimenting with the SIN and COS functions, but actually it uses the Commodore 128's "BOX" draw function, which takes a rotation parameter, to draw lines crossing the center of the screen at different angles.

Sound Effects Machine

Copyright Crawford Games, 1991! A soundboard. I remember putting on little radio plays, recorded on tape, and using this sort of program to provide sound effects. The sounds available were: "Alien," a siren thing, "Machine Gun," a low-pitched square wave where each zero crossing I guess represents a gunshot? "Hand Grenade," which crashes the program, "Siren," which might be exactly the same sound as "Alien," and "Laser," a noisy repeating descending thing.

Guess

The tables are turned this time: the computer does the guessing here. This is a gussied up a binary search routine. I'm sure it was Alan's idea for me to write this. Honestly, looking at the code style it might've been his code too, with me contributing the snarky print statements.

"Roma"

This program prints random robots using the Commodore line drawing character set. I'd paste some examples here but I don't think there's a good mapping from the Commodore character set to Unicode.

Sentences

A sentence generator. Adjective noun adverb verb. E.g.:
STRONG FIRES BRIEFLY SWELLED
NEW CROOKS HAPPILY WALKED
FAST WOMEN BRIEFLY MARCHED
SMALL FEATHERS QUICKLY SUNK
SLOW BOOKS TENDERLY LAUGHED
STRANGE CARDS COOLLY MOVED
INTERESTING STARS WISELY FEARED
COLD TOILETS ANGRILY SWELLED
SOFT STARS STUPIDLY LAUGHED
And that's all of the interesting programs. I wish I had some conclusion here other than that I was a terrible game designer when I was 12.