Early C= Memories By: Paul Panks (dunric@yahoo.com) I began using C= computers in 1983, when my cousin acquired a Commodore 64 (or rather, my uncle purchased one for his family). Although I didn't know much about computers at that particular time, I dove "head on" into the new micro in front of me. Previously I had spent time using an Atari 2600 and playing video games, so naturally I became enamored with the C=, which had an impressive list of features: 320 x 200 screen resolution, 8 programmable sprites, the SID chip (for better sound and music) and, of course, the best part of all -- 64KB of RAM (a large amount in those days). Most of my early projects on the C= were simple 1-2 block programs. After learning a bit of BASIC from the C= User's Manual, I began writing small programs and saving them to disk. Because I did not have my own C= in 1983, my cousin Ryan provided his own "Ryan's Disk" and allowed me to save my programs to his disk. Eventually, Ryan's Disk was packed with dozens of small programs, each varying in content and complexity. Ryan wrote many of the programs on the disk, including "Moon Rocks," which was a small space exploration game. There were also math programs ("Additor" and "Sub- tractor", respectively), sprite programs ("Buzzz Off", a program which displayed an animated bumble bee flying across the screen) and games typed in from C=- specific computer magazines ("Face Off", from the January 1986 issue of Compute!'s Gazette). After my parents caved in and bought me a Commodore 128 in late-1985, I began doing some of my own programming on various "data disks". Between 1985 and 1992, I ended up with over half a dozen such disks, each usually given the label of "Paul's Disk." I followed the same pattern as Ryan, placing several small programs and even some games on each disk. Unfortunately, due to mishandling and/or disk wear, many of my "data disks" stopped working or were lost entirely. One particular data disk of mine -- Paul's Disk, with a green label -- survived through the ages in one form or another, having the following generic programs at the start: 1 "PAUL'S AMAZING" PRG (Track 17, Sector 0) 1 "PAUL'S FAMILY" PRG (Track 16, Sector 5) 1 "MY FAMILY" PRG (Track 14, Sector 7) 2 "PAUL'S AAMAZING" PRG (Track 16, Sector 6) 8 "MERRIER TERRIER" PRG (Track 16, Sector 7) 1 "DO-NOTHING PRG" PRG (Track 19, Sector 1) A brief description of each program follows: "PAUL'S AMAZING" was a modified version of one of Ryan's programs ("RY'S AMAZING"), which changed the background colors to Grey and white and boldly stated that "I'm proud of this program." Then it would ask the user if he/she would like to continue, followed by another changing of the background colors (to orange and green) and the message "Pretty neat, huh?" at the end. "PAUL'S FAMILY" was a 1-block program which listed the members of my family, including my mother, father and brother. "MY FAMILY" was the same program, except listing Ryan's family members, including his mother, father and brother. "PAUL'S AAMAZING" was, again, a modified version of "PAUL'S AMAZING", the first program on disk. It was slightly larger in size and ended with the statement "Pretty neat, huh?" but with a different background color. "MERRIER TERRIER" was a short 8-block file which displayed the low-resolution image of a domesticated dog. Accompanying the image was a short musical score which played as the image was drawn to the screen. This program originally appeared in an early issue of Compute!'s Gazette. "DO-NOTHING PRG" was just that -- a very small program which did, well, nothing. It was common for Ryan or I to place a so-called "dummy" program on most data disks just for fun. Most of my data disks began with the above programs, along with other programs and games from various computer magazines. One program in particular was clearly Ryan's, however: "FIREFLAG", a program which displayed a low-resolution graphic of the USA flag, followed by the continuous sound of fireworks in the background. I saved this program to many of my data disks because I was envious of the program and wanted to come up with one better. This envy spurred an interest in programming (which still burns brightly even today). By 1987, I was writing many of my own programs (mostly sprites or other graphical displays). I enjoyed being artistic and would incorporate art and computer graphics into many of my larger programs whenever possible. My first large program on the C= was "ENGLISH", a 35-block trivia program with multiple choice questions about movies, popular culture and history. It was in this programming project where I learned the limitations of line numbers. Quite by accident, I tried to add lines above 64000 to my trivia game. However, the computer (a C-128 in C64 mode) would suddenly freeze up or behave very oddly, like BASIC 2.0 itself was having a seizure. I put "ENGLISH" on a disk by itself, labeling it with a large red and white mailing label from my mom. I don't know what became of this disk, as "ENGLISH" became lost over time. But it was indeed my very first major project and I recall it with happiness. After "ENGLISH", I wrote several large adventure games, many of them modeled after Cleve Blakemore's "Crypt of Fear" 3-Dimensional dungeon adventure game. It behaved more like a text adventure, however. The player could go north, south, east or west and could pick up objects and do other useful things. Once again, I made sure to incorporate sprites and other computer graphics into each program. I eventually filled up the disk I placed it on: Knight Games by Mastertronic. This annoyed my brother because the game suddenly stopped working. I replaced this disk with my meager allowance a few weeks later. Each of these adventures ranged from small (40 or so blocks) to large (80 or so blocks). In one of the larger games -- the name of which I don't recall -- the player ventured into a dungeon to find treasure, but met up with a Demigorgon happily lifted from Cleve Blakemore's "Crypt of Fear." The player eventually found a large treasure and the game was won. By 1989, I knew enough about BASIC to begin writing larger adventure games, a hobby of which I still readily immerse myself in. These early adventures helped me to write even better adventure games later on. I always made it a habit to include sprites whenever possible, and each adventure had a uniqueness about it which more recent adventures sorely lacked. A few years later, around 1992, I had enough confidence to begin writing a large adventure game: "Enchanter: West Front to Apse" (this was later shortened to simply "Westfront"). The premise was a lone adventurer was seeking an ancient "Orb of Destiny", which was reported to give incredible powers to anyone who possessed it. The first version of "Westfront" wasn't very big -- a mere 16 rooms -- but it was from this base that a very large adventure game came to be. By mid-July 1994, I had increased the size of the adventure from a dozen or so rooms to more than 50. The game was originally written for the C64, but as variable space ran low, I eventually switched it over to the C128 native mode (BASIC 7.0, which had over 120KB available for program space and variables/strings). The game took place in Norway, as the player visited various cities and towns, including Oslo, Trondheim, Stavanger, Bergen and Flora Island. I added a sprite title ("WESTFRONT") at the top of the screen and a series of function key commands at the bottom (e.g. "GO NORTH", "GO SOUTH", "INVENTORY", "MAP", etc.) The middle portion of the screen scrolled, making the top and bottom portion of the screen visible at all times. For the first couple of rooms, I added in a MAP feature which allowed the player to view both a "Short Range" and "Long Range" interior surface map. The "Short Range" map displayed the interior of the room using low-resolution graphics characters (both Upper- case and Lowercase/SHIFTed C= graphics), while the "Long Range" map displayed a polygonal, 3-Dimensional contoured map of the entire game. It was created by combining 8 sprites together to form a larger one. The area that the player presently occupied was denoted by a flashing white dot. Because the game used sprites, I was limited to only 40 columns. While readable, larger room descriptions took up most of the screen and had to be paused by a "< More >" statement that waited for a user's input (by pressing the SPACE BAR or RETURN keys). Eventually, "Westfront" grew to over 80 rooms and 80 objects, including a Redwood Forest, Cave of Time, five different cities and towns, a Crescent Castle and even a Smurf Village. The object of the game was to defeat Mordimar, the evil sorcerer who coveted the Orb of Destiny. Along the way, the player explored portions of Norway and the surrounding landscape while acquiring several different items and objects. The player could wear and remove armor, wield weapons, fight monsters and solve puzzles. The game even featured a small shop where the adventurer could purchase needed goods and sell objects found. The game reached 206 blocks, including two sprite files of 3 blocks each and one large data file: "WESTDATA" (74 blocks). In order to make the data file work, though, I had to remove all commas within the original data statements before they could be read from disk. This saved a great deal of space and allowed me to fit "Westfront" into the expanded size of the C-128. "Westfront" was completed in early 1995 but still had several small bugs. For example, when the player wielded a weapon, the program would tack on an extra "(wielded)" string in the inventory routine, like so: You are carrying: OIL. LANTERN. BACKPACK. TWO-HANDED SWORD (wielded)(wielded). I never completely figured out how to fix this error, but eventually reached a somewhat workable solution by just adding "(wielded)" to the string of the weapon being carried (in this case "TWO-HANDED SWORD"): You are carrying: OIL. LANTERN. BACKPACK. TWO-HANDED SWORD (wielded). The only side effect would be if the player dropped the item, it would say "TWO-HANDED SWORD (wielded)." under "Objects present here:". Not the best of solutions, but most players wouldn't drop a wielded item while wielding it, so I left it alone. I remember the humorous look on my cousin's face when he played the game for the first time: Ryan: "Why can't I examine anything?" Paul: "Oh, you just examine _objects_ in the game..." Ryan: "Oh, ok...hey, what's the wine for?" Paul: "You drink it..." Ryan: (drinks wine)..."Ok...I'm now in Smurf Village. How did _that_ happen?" Paul: "Keep playing, it gets better..." Another individual whom beta-tested my game was my other cousin, Tim. He had a fun time exploiting the bugs in the game to his advantage: Tim: (issues a GO NORTH command) "Ok, I just moved north..." Paul: "You can use abbreviations, you know..." Tim: "Really? Coooollll...." Paul: "Try typing: GO NO instead of GO NORTH." Tim: "Ok...Oh, neat! I like that feature!" Tim: "Can I pick up the tree?" Paul: "No." Tim: (issues a GET TREE command in the forest) "It says 'Ok.' " Paul: "Huh?" Paul: "Check your inventory..." Tim: (INVENTORY command reveals that he now has the TWO-HANDED SWORD) Tim: "What the heck?" Paul: "Wait a minute!..." I made two backup copies of "Westfront" on the same disk (the main file, "197 WESTFRONT PRG" and "197 BACKUP PRG", respectively). This ensured (or at least I had thought) that if one of the versions didn't load due to a disk error, a backup would always be available just in case. As it turned out, my frequent use of the notorious Save-With-Replace command -- which was very buggy to say the least -- eventually damaged both "WESTFRONT" and "BACKUP" to the point where it crapped out with a disk error about 190 blocks in. LISTing either version of the game displayed approximately 3/4ths of the BASIC program listing, which was then followed by an endless stream of gibberish. Running the program halted it halfway through the initial- ization process, where an "?UNDEFINED STATEMENT ERROR IN 107" would unfortunately occur (this proved that part of the program was unfortunately erased by the disk error). This was confirmed when I climbed up a tree in Smurf Forest and found Brainy Smurf by himself. I tried to "EXAMINE BRAINY", but the game crashed out with an error. The original copy -- which worked fine -- had unfortunately been formatted over to make room for my next programming project: "Westfront II". "Westfront II" was a different version of "Westfront" which had new locations, a completely different parser and new monsters/objects. I eventually expanded the game to include well over 350 rooms and changed the display output from 40 columns to 80 columns. If you want to read further about the development of "Westfront", click here: http://www.geocities.com/dunric/apse.html "Westfront II" eventually became the PC game "Westfront: The Trials of Guilder", a mammoth text adventure -- styled after Advanced Dungeons and Dragons and many different online MUDs, or Multi-User Dungeons -- which had 1,728 rooms, 4 continents, 200+ monsters and items and over 50 main quests. There were also several parlor games and puzzles spread throughout the game. "Westfront II" only included 8 main quests and about 80 objects and monsters. The game was completed in early-July 1997. The PC version, however, was not finished until mid-2004 (the majority of time spent debugging and adding in new features). Since the time I wrote the original "Westfront", I have written well over 35 adventure games for various platforms, including the C64/128, Plus/4, VIC-20, Windows 95/98/2000/NT/XP, MS-DOS, Linux and Mac (via a special applet that allowed the game to be played on any computer running Inform (a text adventure interpreter used on many different computer platforms). Inform was similar to Infocom's use of the "MUDDLE" programming language which essentially created a generic "Virtual System" (Z- System) upon which Zork and other games could be emulated to work on. This made use of a run-time front end which interpreted the Z-System code into a language that would work on virtually any computer. This concludes my article on early C= memories. Hopefully, this will spark others posting about their computing experiences, especially on the C64. Paul