Making an NES Game in 2021
December 01 2021
Wiz n’ Witchcraft
By Jared Petty
One of the many joys of this job is that I get to interview people who make games. Sometimes those games are huge re-imaginings of bonafide classics. Sometimes they’re brilliant, innovative new Switch indies poured out as labors of love. And sometimes, they’re brand new NES games—that tickles the very nodules of my heart and soul.
After interviewing Matt Hughson, creator of Witch n’ Wiz, I’m pretty much convinced to quit my awesome new day job and learn to code NES cartridges. You can pre-order Witch n’ Wiz through December 12 at Limited Run Games in two editions: a Standard Edition including a real, functional NES cart, manual, and dust-sleeve, and a bigger Deluxe Edition bundle.
So what’s in the Deluxe Edition?
- A Special Edition translucent Black Witch n' Wiz cartridge for the NES
- Individually numbered foil Limited Collector's Edition slipcover
- Accurate NES-sized box
- Double-sided 18x24 Poster by Hand-Drawn Game Guides
- Dust sleeve
- Instruction booklet
Finally, a digital ROM will be emailed to you within a week of purchase
So that's all the stuff that’s in the box, but what about the game? For the nitty gritty on making Nintendo Entertainment System games in the twenty-first century, we grabbed some time with Witch n’ Wiz’s developer. Here’s how it went.
Jared: Hi! Who are you and what do you do?
Matt: Hi! I am Matt Hughson, and I’m a game developer who makes NES games long after anyone has any reason to do so!
Jared: So, just how does a person wake up one day and say “I think I’ll make an NES game in 2021?”
Matt: Very carefully!
I think like most people in this niche, I grew up in the ’80s, and the NES was a huge part of my childhood. As I got older I started collecting NES games, got into emulation, and so on. Although I was somewhat aware that NES homebrew (modern NES games) existed, I think when Micro Mages went viral on Kickstarter, it really introduced me to that world and I started collecting homebrew games.
Eventually another Kickstarter for NEScape! introduced me to a podcast called The Assembly Line. This podcast is hosted by 2 NES homebrew developers (one of whom made NEScape!), and I started to get a sense of what it took to make these games. After a while, I started to realize that I might just be able to make a game too!
I bought a book, “Making Games For The NES” by Steven Hugg, and read that, along with a series of tutorials at nesdoug.com, in early 2020.
I came away from that with a pretty good starting point for a game, and I built From Below which I released in November of 2020.
Jared: In terms of the mechanics and aesthetics, what were some of your classic-era influences?
Matt: The most direct influence is a series called Catrap or Pitman. This came out on a number of platforms over the years, but the one I took inspiration from was the Game Boy version.
I’m really influenced by all my favorite NES games, but probably the most obvious ones that come through in the game are Fire n’ Ice and Bubble Bobble. I was also quite inspired by the recent release of Alwa’s Awakening for the NES.
Jared: Old NES games were largely created in a Wild West period when video games were still in their infancy. Contemporary NES games have the advantage of decades of collective video games design experience. What modern games influenced Witch n’ Wiz and how did they inform it?
Matt: This is something that really interests me! I love that picking up an NES game, you don’t really know what you are going to get. You might see something very modern feeling like The Legend of Zelda, or you might be getting something completely out of left field like The Adventure of Link. It’s really fun to see behind the curtain a little bit, as designers tried to figure out just how exactly games should behave. I like that the rules hadn’t been established yet, and there are still surprises to be had.
That’s something that attracts me to homebrew games in general. When was the last time you went into a store and saw a game on a shelf that you’ve never heard of at all and it actually turned out to be an amazing game? For me, it stopped happening for the most part over the last 20 years as the internet came about. But the NES homebrew world still has these surprises waiting. There are games out there that you’ve probably never heard of, for a system that has been discussed to death, that are actually amazing! I love that.
Anyway, back to your original question: contrary to everything I just said, Witch n’ Wiz is actually a very modern feeling game! Things you would expect, like saving, no passwords, and an undo feature allow for a less frustrating experience. However, it does have a lot of the experiences you remember growing up: a manual with detailed illustrations to flesh out the world and characters, chunky background animations moving to the beat of the music, and of course all the graphic and audio limitations of the NES.
Jared: Let’s get a little granular. What was your development environment like? Did you create Witch n’ Wiz in 6502 Assembly?
Matt: Confession: I don’t write NES games in Assembly! I actually do 99% of my coding in C. And it doesn’t look all that different from making games in more modern frameworks like SDL or MonoGame/XNA. It’s not even that far from Game Maker, minus the built-in graphics tools.
I write everything in Visual Studio Code, and I have written a few custom scripts so that I can build and run from right in there. I do all my testing and debugging in a phenomenal emulator called Mesen, with intermittent testing on real NES hardware with an EverDrive PRO hooked up to my PC via USB.
For graphics, I mostly use 2 tools: “yy-chr” and “NES Screen Tool”. Audio is done with “FamiTracker”.
All in all, as I said, it feels quite modern and is very fun to work in. I have a lot of respect for the people working back in the day without emulators!
Jared: What mapper did you choose for Witch n’ Wiz? Why?
Matt: For those that don’t know, a mapper is the cartridge configuration of an NES cart, of which there are hundreds of variations. When you insert an NES cart into an NES system, it kind of becomes an extension of the hardware. It’s not just software getting copied to system memory like a modern console/PC. Mappers can add all sorts of additional functionality to the NES, with added cost of production and complexity to code for.
I chose MMC1 (Mapper 1, SKROM variant). This is the most commonly used mapper of the licensed era (although I believe the most sales goes to MMC3). Games that used it included Metroid, The Legend of Zelda, Chip ‘n Dale, Dragon Warrior I-IV, Mega Man 2, and many, many more! It’s good company to have.
MMC1 was a good fit for this project because I basically just wanted 2 things: more space for code and graphics, and the ability to save. This mapper has both of these things, without adding too much complexity. I used a configuration with 128KB of PRG (code) space, and 128KB CHR (graphics) space. In addition to this, it has 8KB of WRAM (Work RAM) with battery backup for saving.
The other benefit of using a common mapper like MMC1 is that it runs on pretty much every emulator. I’ve even gone back and run Witch n’ Wiz in NESticle (my first experience with NES emulation) in a DOSBox virtual machine, and it runs great!
Jared: How did you create the art for Witch n’ Wiz? How did the limitations of the NES influence your artistic decisions?
Matt: The art for Witch n’ Wiz was mostly done by two very talented artists: Kenneth Fejer and “Alp.” Alp has done quite a bit of NES art over the years, whereas this was the first NES project for Kenneth. They both did a fantastic job! There was also some additional art done by Haller Zoltán. Zoltán has done quite a few NES projects over the years as well, including my own From Below last year.
I’d also like to call out that all of the illustrations for the box and manual are done by an artist Kori Arrendondo. I think she did an absolutely amazing job!
Jared: What about the music? How did that come together?
Matt: All the music and sound in the game is by a musician who goes by “Tuï.” I worked with him on my previous game From Below, and was very lucky to have him on board for this project again! He wrote over 16 tracks for the game, which are included as a digital soundtrack with both the physical and digital version of the game.
Jared: What’s something about developing for the NES that might surprise our readers?
Matt: To me, the biggest surprise is how doable it is. Quite a few people who are making NES homebrew games, especially some of the veterans in the scene, are actually starting programming by making NES games. If you have a passion for this, and you are willing to put in the hours, pretty much anyone can do it.
If you are like me, and you already know how to make games coming into this, I have no doubt you could have something up and running within weeks or less.
Part of that is the fact that you can now make full commercial games in C. It’s totally approachable to anyone who has made games in C-like languages (C, C++, C#, Rust, Python, etc).
Jared: Tell us about something you struggled to implement and how you solved that problem?
Matt: The two biggest hurdles for this project were staying motivated and dealing with CPU performance.
The motivation side of things isn’t unique to the NES, or even game dev in general. Finishing any large project is tough. There are times where it stops being fun, and you need to know yourself well enough to determine “is the not fun because I’m getting over a hump, or do I just not want to do this at all anymore?” For me, the way to get through this is to try to work on something productive every day for a few hours. Usually, I start after putting my kids to sleep around eight, and I work until 10 PM. If at that point I still don’t want to work, I can go veg out on the couch and still feel like I got something done.
The other issue, CPU Performance, is a constant struggle on the NES. The NES CPU is only 1.79 MHz (in NTSC regions), compared to a modern CPU of say 3,200 MHz. It’s very slow and forces you to code in a very thoughtful manner. Something as little as a careless for-loop can tank performance, and cause the game to flicker and lag.
To solve this I have a few solutions. On the NES you can cause the scanline of the TV to change color at any moment during rendering and then change back again at any other moment. This looks like long, single-pixel-high lines of colors across the TV. By enabling and disabling this around code that you suspect can be optimized, you can see how long the function is taking by how much of the color change appears on screen. As you make changes to improve the section of code, the amount of colored lines on screen should be reduced.
This is famously used by the NES game Noah’s Ark to change the colors at the bottom of the screen to appear like water… with mixed results.
The emulator Mesen also has some timing tools built in so that I can see what is taking the most amount of time much like a modern profiling tool. I only used this a little near the end of development.
Jared: Sometimes, platform limitations have a way of influencing or even improving game design. Can you tell us about a time that happened with Witch n’ Wiz?
Matt: On the NES, it’s baked into almost every decision, from the number of levels to the character art to the complexity of the music tracks. To be effective with your memory, you kind of need to plan things out ahead of time, and have a rough idea at least of how much space you will give each thing.
The gameplay itself is influenced as well. For example, Witch n’ Wiz levels are all designed to fit on a single screen. This is good from a gameplay perspective because it allows the player to see the entire puzzle at once, but it’s also much simpler technically because scrolling on the NES isn’t as simple as you might expect (especially once you go beyond certain limits).
Artistically, the way the background is animated with just two frames of animation has a certain cute, retro charm. It reminds me a lot of the overworld from Super Mario Bros 3, and the way the plants dance to the music. But that choice of two frames of animation is born out of memory limitations. For every frame of animation, I need to duplicate the entire sprite sheet for that section of the game. With the cartridge type I used, the graphics are stored in 128x128 read-only sheets (of which I have 32 total). The cool part with the MMC1 mapper is that I can switch between these sprite sheets instantly, with no real performance cost. However, with two frames of animation, every background now uses up two of the 32 sheets, allowing for a total of 16 background sets. If I wanted to up that to 4 frames of animation, that means only 8 background sets!
There is a lot of give and take in this way, everywhere in the game.
Jared: What makes Witch n’ Wiz fun?
Matt: I think there is no denying that there is a novelty to a game that actually runs on real NES hardware. This, along with the cute, colorful graphics and sound hopefully draws people in. However, once you are here, I think there is a really fun game that would work even as a modern PC or console game.
I took a different approach from a lot of puzzle games. Most puzzle games will define a mechanic, and hammer on it for 100 levels or so, steadily increasing the difficulty with harder puzzles and additional mechanics added on top. Witch n’ Wiz puts a little twist on this by also having 100+ levels, but every ten or so I introduce a completely new gameplay mechanic and throw out the previously introduced gameplay mechanic. This means that the difficulty curve has a series of peaks and valleys, rather than a steady climb. After mastering a style of puzzle over ten levels, you start fresh with something new. The mechanics never layer on top of each other, so you don’t hit a point of exponential complexity as multiple gameplay types combine.
If you enjoy puzzle games like Fire n’ Ice, Lolo, The Incident, and other puzzle-platformer games, where quick reflexes are not required, I think you will enjoy Witch n’ Wiz!
Wiz’ and Witch is ready to pre-order now at LRG… pick it up today!