I get asked a lot, “how can I get started making NES games.” I documented my journey in a previous blog, but that’s pretty longwinded and very specific to my experience level. Where you get started will depend a lot on what you already know!
So with that in mind, I’ll attempt to point you in a good starting direction based on the common types of people that have ask me about making NES games.
They are ordered in least to most experience, so you can find where you belong and continue to work your way down, as you gain more experience!
You Know Nothing
You’ve never coded. You’ve never made a game. You have zero experience in this field, but you are willing to do the work to get there!
For this person, I recommend first learning to program a modern language (C, C++, C#, Rust, Python etc). There are a lot of different “learn to code” resources out there, and I don’t have one in particular to recommend.
If you love games, I’d personally recommend going through a tutorial focused on making games because it may hold your interest, but it’s not required. However, make sure you are learning to code, not using a “drag and drop” game builder. If you do this, you might even be able to skip past the next stage…
You Know How To Code, But Not Games
You already know how to code. Maybe you have a day job making business software and you always wanted to get into games. Maybe you started in the “You know nothing” section above, and have since learned to code.
For this person, I recommend first making a game in a more modern, forgiving environment. This will give you the understanding of how games are structured, how real-time graphics work, and dealing with player input.
I would highly recommend checking out Pico-8 (UPDATE: Now available for free in browser – https://www.pico-8-edu.com/). It’s a wonderful, cozy, fully-integrated game development environment. It has a very active community to help, with lots of resources. The engine itself is modelled after retro-consoles, so you will get a taste of what it is like to work on such limited hardware, while in the comfort of your modern PC.
However, any game programming tutorial should be good, but I would try to avoid things like “learn OpenGL/DirectX”; those will spend a lot of time on “setup” which won’t be particular relevant. MonoGame is probably a good choice. I’ve heard good things about PyGame (although I’ve never used it). Love2D is excellent. These are all engines/frameworks that have minimal setup before you can start seeing something on screen.
You Know How To Make Games For Modern Platforms
You’ve already made some modern games, and you’re ready to take the leap to the NES.
At this point you need to make a choice of how you are going to make your games. This decision doesn’t need to be set in stone, and can change whenever you like, but you need to pick one to start
Coding in C
This is what I do. I think this is a good fit for people who are already used to programming in modern C-like languages. It it 100% possible to make a high end, performant NES game in C (examples). Both From Below and Witch n’ Wiz are both written in C.
For this path I recommend the book Making Games for the NES and the online tutorial series at nesdoug.com. These more or less cover the same topics, teaching you how to make NES games in C, with some helper libraries provided that are written in assembly. Either one should be enough, but I found the combination of the two very powerful!
Coding in Assembly
I’m not as familiar with this, but generally people seem to point to the Nerdy Nights tutorial series. The series is quite old, but still seems to be the main place people go to learn NES assembly programming. The series is written in a slightly antiquated 6502 assembler, but there are ports of the tutorial content to more modern assemblers like CA65.
NESMaker
NESMaker is an “all-in-one” NES game IDE built on the promise of allowing you to make NES games with no coding required! I haven’t used it myself, but a lot of NESMaker games have been release already, so that says a lot. Like most “game engines”, to create more advanced games you will need to learn assembly programming, but if you want to just dip your toes in without learning any coding up front, this might be a good choice. There is a huge community of developers using NESMaker, and they seem to have a really welcoming scene. They even have a yearly awards show to celebrate the best-of-the-best NESMaker games!
Getting Help Along The Way
Making NES games is pretty confusing at times, but luckily NES Homebrew has one of the most active communities out there! There are a few key places you can go to get help when you are stuck, or having trouble understanding something:
NES Development Server (Discord): Probably the #1 place to get help these days. It also has a “Resources” channel with a ton of links to other helpful places.
VideoGameSage (Discord): This is a less technical than the NES Development Server, but the #brewery channel has a lot of casual chat with other devs, and a good place to ask more random questions.
NESDev.org: Traditionally NESDev.com was the place to go for technical discussion on the NES, but the site went down recently (now mirrored at nesdev.org). The wiki (which is still the most extensive piece of technical documentation on the NES) has been restored, and the forum is up in a read-only format for now. Hopefully things get fully restored soon, but for the time being, stick with the Discord channels!
Matt Hughson NES Game Dev (Discord): And of course you are always welcome to pop into my own Discord channel and ask questions. It mostly dedicated to the games I make, but we do talk NESDev once in a while.