Found a little slice of personal history. You may remember from this post, I said I really got my feet wet with game development by teaching myself how to code on my TI-82 graphing calculator back in high school.
While unpacking some boxes here in the new apartment, I found that very manual. Two, almost three years of my life were dedicated to deciphering these secrets. Of using this information to reverse engineer other TI-82 games friends would send me. All to avoid doing actual work in Algebra class (well, among other things).
The book even includes some hand-written notes about whatever it is I was coding at the time.
I ramble for a while, so rather than have people scroll past a novel on their Tumblr dash, I’m hiding the full story behind a “Read More” tag.
The short answer is: I taught myself.
I took some computer science stuff toward the end of middle school where I learned TURTLE or whatever it was called, on the old Mac II’s they had. Then, I can’t remember if a computer science class in my Freshman year did some light programming or if I actually saw another kid doing it (making basically a “Hello World” equivalent) in BASIC, but I understood the rough idea of what was going on there.
From there, my Mom had taken a computer correspondence course back in 1988 or so -- she wanted to become a legal secretary. She got a computer and a bunch of software with it, this big Hyundai PC. No hard disk, not even support for color graphics. But it came with GWBASIC. Around high school I ended up getting a 33mhz Windows 3.11 machine (the first computer that was purely my own) with QBASIC, so I used my Mom’s GWBASIC manuals to goof around in QBASIC, since they were so similar. the first program I tried to write was a Pokedex, but I got stuck trying to figure out how to get it to draw graphics. Displaying text was easy, displaying simple geometric shapes (circles, etc.) was easy, but I wanted to have it draw, like, PokeBalls and stuff, but couldn’t figure it out.
High school meant we had to get graphing calculators, usually of the Texas Instruments variety, many of which come with their own programming language called TIBASIC. Most of my friends had TI-83s, I had a TI-82. So most of their games wouldn’t work on my calculator because the software was incompatible. With what I knew of GWBASIC and QBASIC, I ended up figuring out enough TIBASIC to start making simple text adventures. I called them “MovieGames” and usually it was a choose-your-own-adventure short story based on whatever I was thinking about at the time; Men in Black, Jurassic Park, Independence Day, etc. So you’d get a scene, like
A dinosaur is chasing you! Where do you go?
> Jungle> Plain
Perhaps for teachers doing tests, TIBASIC actually had a whole system built in for these kinds of multiple choice questions, so it was really as simple as making it print text, bringing up a multiple choice, and then branching the story from there. I did 4 or 5 of those.
Finally, I found another kid who had a TI-82, and had games he could share with me over the link cable, so I ended up with INDY500 and DRUGWARS. Both were my first real experiences with game logic. DRUGWARS (sometimes known as “Dope Wars”) was mostly a text-based game, and probably one of the most famous games out there, given how it’s been ported to everything under the sun. It even formed the basis of the drug minigame in GTA Chinatown Wars. The idea is that you buy drugs from one place, resell them at another, and make money by traveling around dealing to the right people and dodging the police.
The second game, INDY500, was a “real” game. It had scrolling and very basic graphics -- it used ASCII text to represent cars on a race track. So you’d drive down the course, going from left to right, avoiding cars down a straightaway as things got faster, and faster, and faster, trying to go as far as you could. Simple stuff, but a TI-82 didn’t have a lot to work with.
The TI-82 came with a massive instruction manual, most of which was a very detailed glossary for all of the TIBASIC programming functions. So basically, what I ended up doing with these two games, is go through them, line by line, looking up every single function in the instruction manual’s glossary. I’d mess with their parameters, see what they did, and basically ended up deconstructing both games and putting them back together again -- that was literally the case with INDY500, where once I understood how the game worked, I essentially re-wrote the entire game from scratch by memory.
With DRUGWARS, I ended up taking what I learned about the multiple choice selector in my “MovieGames” and turned it in to a sprawling text-based RPG based on Final Fantasy. It had a very basic story (loosely based on Final Fantasy VII), you could travel between towns, you’d get in to random battles while traveling, level up, learn spells, fight bosses, and even equip Materia for summons. It was so big and complex, if you played it for too long, the TI-82 would actually crash with an “OUT OF MEMORY” error because I’d used up all the system RAM -- with a text adventure.
At that point, I hit kind of a crossroads. I started making a real, actual, complex game on the TI-82 -- a side scrolling shooter that was based on Star Fox, but held more in common with Gradius. The TI-82 had a “graphing” mode that let you use a smaller font so if you were using ASCII graphics, you could fit more on screen, and using per-pixel precision (as opposed to per-row precision). Around this time, I also discovered Corel Click & Create, aka The Games Factory, aka Multimedia Fusion, aka Clickteam Fusion.
The problem with coding on a TI-82 is this was before the days of rechargeable batteries being in everything, so if the two AA’s inside the thing went dead, you lost all of your programs and everything else on it. Even just changing batteries, if you weren’t fast enough, the memory would eventually be erased. Three or four times over the course of a year or two, I lost everything I’d written on my TI-82, and by that point, I was learning enough about Click & Create that the TI-82 was looking less appealing by the day. CnC was simply more flexible, and faster to work with, and I had access to full-color graphics.
So I almost exclusively switched over to Click & Create from then on.
I did still keep up with programming a little bit here and there; I taught myself mIRC scripting, which at one point, I used to make an IRC-based MUD. That was, and maybe still is, the most complex thing I’ve ever programmed, and couldn’t even really be run because it’d spit out so much text it’d trip the flood protection on most servers.
Something else I started coding with mIRC scripting was a chat bot. For some reason I got it in my head that it’d be funny to prank my friends by writing a bot to detect when I’d been AFK and chat for me like I was still at the keyboard (I was a weird highschooler.) It started by spitting out pre-programmed messages, sort of like Eliza, but eventually I started to think about what would happen if I could record text from the chat, break it down in to individual parts, and then reassemble it back in to a coherent sentence. As it turns out, I had, completely by accident, stumbled upon the concept of a Markov Chain. (For the record, I also had never heard of Eliza, either).
So let’s say you’d submit a message to the chat that was like “Hello, everyone! How are you doing today?”
My mIRC script would break that down in to a bunch of separate pieces:
“Hello, everyone! How”“How are you”“you doing today?”“today?”
The script would take the last word of any given piece and try to match it to the first word of any other piece. In theory, this would correctly reassemble the sentence “Hello, everyone! How are you doing today?” -- but what it actually ended up doing was creating hilarious nonsense like
“Hello, everyone! How is it possible to be like Turtles in Time!”
The code was simple enough that many years later, I figured I could use this chat bot (which I called Gilliam, after the robot in Outlaw Star) and port it over to C++. Friends had been telling me for weeks how easy it was to make games in C++ using Allegro, so I figured it’d be a good way to get back in to “real” programming and get away from Click & Create.
Unfortunately, even just getting text to render in Allegro proved to be massively difficult for me as any given sentence longer than a certain length would cause huge memory overflow errors. I banged my head against it for a week, got nowhere, and eventually got so depressed and frustrated at my inability to grasp C++ and Allegro as easily as I did BASIC that I deleted the whole thing and have never touched “real” coding ever again. I’ve stuck to Clickteam Fusion almost exclusively, because it’s what I’m good at.
It depends. The very first thing I ever tried to code? A PokeDex in GWBASIC. I entered information for about 15 Pokemon in text and decided to try and figure out how to make it draw graphics, and that’s when I gave up.
The first game I ever finished? I figured out how to make queries in TI-BASIC. It had a very simple system where it let you input a question and display multiple choices for answers, which were selectable with the TI-82 calculator’s keyboard. So I built a few text adventures under the title of “MOVIEGAMES.” They were simple, brief adaptations of specific scenes from Men in Black, Jurassic Park, etc. Doing those made me comfortable enough to try modifying Drug Wars, as mentioned in that previous post.
First actual game I finished? MarioWeen. I had been playing with a Mario engine for two or three years, and eventually I bit the bullet and spent 6-9 months putting together five levels and a couple bosses. Then I spent another year boosting that number to 12 levels and 6 bosses for MarioWeen DX.