Detailed Development Info
Warning: If you have a life and want to keep it, turn back now. This page will be lengthy and unless you are a Kevin stalker, you’ll really have no reason to read all this.
So, when I first moved to Dallas to be with my girlfriend, I was out of a job. I moved from Florida (or Utah, if you’re really keeping track) where I had a pretty swell graphic design job working for the Pensacola News Journal, but didn’t really plan ahead so I was jobless. I looked for quite some time, applying to probably 80+ locations, but the job market (and the ecnomoy) were in the crapper. No one was hiring. Time started ticking by, and I knew that I wasn’t getting much accomplished just sitting there waiting for someone to call me. I wanted to do something worthwhile with my time! That’s when I decided I wanted to start learning how to program for the Nintendo Entertainment System.
Brian Parker had started putting out tutorials on how to do basic things for the NES, called the Nerdy Nights tutorials. They were around for a few months and I tried to give them a brief look, but I really had too much going on to give it the focus I needed. When I finally decided to sit down and study them, it definitely didn’t come easy. There were probably only 4 tutorials at the time, and I had to read them 30 times or so, and even then I didn’t understand what was going on. The little files that came downloaded for the tutorials weren’t really good for me to practice with. They weren’t giving me enough opportunity to really play around and see what I could do. That’s when I decided to start drawing some graphics for one of my all time favorite games, Frogger.
I need to back up for a minute and explain why I chose Frogger. I was discussing with a few people why Frogger was never released for the NES. It was released for almost every other platform of the era, and I really didn’t understand why it didn’t exist for the NES. I knew of a few people who constantly asked the few NES programmers around to make the game, but they never really gave the requests the time of day. It’s one of my favorite games, so I knew that if I wanted it done right, I was probably the one who needed to do it.
I spent months the year before practicing the arcade version of the game, trying to break into the top 20 of the Twin Galaxies International Scoreboard. I actually succeeded, getting the 14th highest score in the world. While taking the time to get good at the game, I learned the patterns of the cars, and when it came time to make the game for the NES, I knew that I wanted it to be a faithful remake of the original arcade version. I attempted to play the Atari 2600 and the Intellivision ports of the game, and they were terrible in my opinion. I wanted the same patterns and feel of the arcade, so that was my goal. Make it as faithful as possible, if only to please myself.
Sidenote: I actually drew a majority of the Ultimate Frogger Champion sprites in an automobile while my girlfriend Tracy drove us to visit her brother in Oklahoma.
So after I started drawing the sprites and started trying to put the game together, I really only had the knowledge of the very basic first four Nerdy Night tutorials. I didn’t know anything code organization, multiple screens … nothing at all. I just started typing code and hoping that what I did started working. I didn’t even know how to stop the little frog from wraping from one side of the screen to another if you jump through a side.
Slowly I started asking Brian questions, one at a time. There was so much that I wanted to do, but I was getting way ahead of myself. I’m fuzzy on how this even happened, and how he had the patience to sit with me day after day answering ridiculously moronic questions is beyond me. But the first major thing that came up was how I was going to make the different rows of the game move.
As most of you probably know, the game of Frogger consists of a road at the bottom, 3 rows of cars, a road in the middle, a couple rows of logs, a couple rows of turtles, and finally a row where you get home. All of these rows move in opposite directions of the previous row. (Tech speak alert!) The easiest way to do it would be to make all the graphics sprites and then just move the sprites left in one row and move the sprites right in the next row. The only problem with that, as some of you are already thinking, is the NES can only handle 8 sprites per row before stuff starts blowing up. And if you’re Frog is on that row, that’s 2 sprites right there (each sprite is 8×8 pixels and the Frog all together is 16×16 pixels, consisting of 4 sprites in all). So you’re left with only being able to use 6 more sprites for an entire row. If each sprite is 8 pixels by 8 pixels, how in the world are you going to draw an entire row of whatever with only 48 pixels? It’s not possible. So the only other option is to draw it all as one big background and then use something called Sprite 0 collision to run a timer and scroll the background in different directions depending on how many frames have ran. Sound complicated? You’re fucking right it is!
Take how confused you are right now. That’s EXACTLY how I felt when Brian told me that’s what I needed to do for my game. Yeah … right. Like that was going to happen.
I don’t remember exactly how he agreed to do it, but he whipped up the code for it to work in my game and sent it to me and I implemented it and voila! Scrolling rows.
Keep it mind at this point the frog just jumped around on the screen and it did nothing when he touched any object on the screen. But I didn’t care, the rows moved!
Side note: At this point in my coding career (and actually through almost the entire process of coding this game) I had no idea how loops worked. For example:
LDX #$00
Loop:
LDA variable,x
STA address
INX
CPX #$10
BNE Loop
LoopDone:
See how LDX #$00 is above the Loop? When it gets to the bottom of the loop, and it’s checking to see if X has reached #$10 yet, when it is less than or equal to #$10, it loops back to Loop. I had no idea how these worked at the time, so I had LDX #$00 inside all my loops, which screwed everything up. How I managed to make the rows almost work with all my loops completely wrong blows my mind. But once I realized what I was doing wrong it made it a LOT easier to make each row scroll perfectly.
:::::::::::::::::::::::::::: BREAK TIME ::::::::::::::::::::::::::::::::::::
Will finish this story later.
Stay tuned!
