Greetings, dear humans. Where do I even begin? How about at the beginning…
It all started around Christmas of 1987, when my mother purchased our first Nintendo Entertainment System for my older brother and me to share. He and I had been begging for it for a while, ever since we saw Super Mario Bros. on display at a kiosk in our local Wal*Mart. We already had an Atari 2600, and all 4 members of my family had been playing it extensively for years. Some of my earliest memories are of my father playing (without resetting) Dig Dug or Pac-Man for hours on end. Many of the games for the 2600 had held my attention long enough to get quite good at — in fact, I beat the infamous E.T. game for the 2600 around that time. But I could tell that the NES was going to be what I would later call a quantum leap in video game experience. It was impressive how many rich and varied games were already available for the NES by late 1987; especially The Legend of Zelda. I had been fascinated by the game Adventure for the Atari 2600, and could probably tell that Zelda was a glorious extension of the same ideas. That game’s packaging made what already seemed like a treasure literally look like one.
But Zelda was too expensive for my parents to afford on top of the base console cost, so instead, my brother and I started off with 2 games — Super Mario Bros., of course, and Capcom’s original Commando. Commando was buggy as Hell and poorly designed, but I loved it anyway. I think I beat it fairly quickly, and was hungry for more games. I can’t remember which one came next, but it was probably Metroid or Kid Icarus. At some point, my brother and I began renting NES games from our local video tape rental store to supplement the games we actually owned. It was always a challenge to try to beat a game over the weekend, while we were away from school and could focus on it together.
While this was going on, I was also experimenting on a quite different system — my TRS-80 Color Computer Model II. Despite being only ~6 years old, I had been programming in BASIC and Logo for it for about a year. I was already keenly interested in programming my own video games, and had been doing things like loading a game from cassette tape, and then changing small sections of the source code before running the game to try to understand how it worked based on what broke or changed in the game. I suppose you could call it my earliest attempts at “ROM” hacking. Eventually, I began taking advantage of the fact that my mother was a book worm and frequented our local public library quite often. I would go to the Dewey Decimal System 00X area of the library, and grab as many books on computer programming as I could — especially those focused on game design. Soon I began writing my own video games from scratch based on those game design principles, complete with the best graphics and sound I could muster, which were understandably quite poor.
This was a very fulfilling activity, and it came to define a large part of my childhood. But it bothered me that I couldn’t create games that were anywhere near as good as the ones I had on my NES. A few years later, my parents purchased my first PC — an IBM XT Turbo Clone @ 10MHz with a CGA graphics card, monochrome green CRT monitor, and a single 720KiB 3.5″ floppy drive; there was no hard drive. I began programming for that system in earnest, learning GW-BASIC and MS-DOS simultaneously while my game design improved dramatically. However, I still couldn’t make games that were comparable to even the worst NES games. I began to suspect that there was something fundamentally different about the NES and “normal” computers, but I couldn’t tell what it was.
Was it the fact that NES games were always on cartridges? Was it because the graphics card in the PC wasn’t as good? Perhaps there wasn’t enough RAM in the PC?
Years went by, along with whole series of video games I programmed for my own enjoyment and to impress my family and friends. At the same time, my esteem for the NES and its library only increased, as I played and beat Mega Man 2/3, Rygar, Bionic Commando, Metal Gear… and before I knew it, I was a teenager getting involved in the earliest days of the NES(and SNES) emulation scene that revolved around the EFnet IRC network. I was too intimidated at the time to learn 6502 Assembly, so I contributed in the one way I knew how — graphics design. My friend Chris Hickman and I founded the Archaic Ruins website, with him primarily responsible for the HTML and me primarily responsible for the site’s graphics. I also made logos for Zophar’s Domain, snes9x, and ZSNES, among other projects.
Around this time, I started to learn some of the finer details of the NES’s hardware design, and finally began to understand what made the NES so special and capable of playing such wonderful games, despite ostensibly having very limited computing power.
In a nutshell, it is because the NES, unlike “normal” computers, has all the components chained together in a continuous, tightly timed pipeline that puts the graphics to the screen in a very coordinated fashion. It has only 2KiB of RAM on the actual motherboard, which turns out to be plenty, because the cartridges supply the graphics and code directly to the system whenever the system calls upon the data — it doesn’t need to be stored in RAM in the first place, unlike on a PC. The graphics chip (the “Picture Processing Unit”, or PPU) is designed to operate not on a framebuffer like the PC, but on grids of tiles called “nametables” — an arrangement that simultaneously allows a type of primitive data compression, while also letting the very slow 6502 CPU conduct just enough updates every frame so that more graphics are always available as the camera moves across a level. I had assumed that the reason the NES had such great games, given such limited hardware as was available in the 1980s, was because of the ingenious Assembly programmers in Japan that carefully stitched everything together. And that made it all the more intimidating to learn Assembly, so I never really tried…despite learning 10 other programming languages throughout the 1990s, 2000s, and 2010s.
It would be another ~20 years before I finally had the courage to learn Assembly (first x86, and then 6502), and begin to entertain the possibility of finally creating my own NES game. During those intervening 20 years, I pursued a PhD in Mathematics, studied Computer Science in my spare time (with the help of Dominic Muller, whom I will get to in a minute), and became a successful Software Engineer in industry. At the end of that journey, I found myself to be in possession of enough skills to start my own video game company, and enough money to get it off the ground.
Now, I had been churning on an idea in the back of my head for a Science Fiction story since around 2011, but I hadn’t come up with it with the intention of turning it into an NES game. It took place in the far future, and involved a genetically engineered sentient species, destruction of knowledge of its own origin, a brave young member of that species discovering that there was something wrong with his world, exploring caves and unlocking secrets of the ancient past… but it was just a story. In fact, a complicated enough one that it seemed like the modern gaming PC would be a much better platform than the NES, if it could even be turned into a video game at all.
But when Dominic(Nick), who by this time was my best friend, showed me his first program running on the NES (in an emulator, technically), I got extremely excited. I suddenly knew that not only did I have the skill level to develop commercial quality games, but that I had a willing partner who could complement my skill set, and make it possible to create something special for the NES, the system from which I had drawn so much joy over the course of my life.
So, I decided to form a company with Nick, and pursue the development of an original NES game as our first project. But as I explained to Nick very early on, the ideas I had in mind for this game were just too elaborate to be contained within the kinds of ROM sizes that NES games traditionally had. Why is that? Well, there is a somewhat complex history to that, which I will go over in my next post. =)