So I’ve made some pretty decent progress, I think, though at the same time I’m beginning to learn that I have a very long way to go before I can make a real full-featured game. The resource that gave me the biggest jump-start was definitely Famicom Party. Using that book as a resource, I was able to make significant progress on my vertical shooter, titled Space Fight. It helped that a vertical shooter was also used as the working example project in the book. This is where I’m at:
I’ve got a scrolling background, working controller input, moving player and enemy sprites, collision detection, and some sprite animation when one of the ships explodes. I want to add sound effects and music next, then a title screen, then an actual level layout instead of infinitely-spawning single enemies.
My code definitely needs a lot of refactoring; you can look at it and tell it was written by somebody with minimal knowledge of 6502 Assembly (or any low-level programming, for that matter).
One thing that I need to figure out is how to manage many objects on the screen. Right now I can support a single enemy, a single bullet fired from the player’s ship, and a single explosion at a time. The way I’m tracking those objects and moving them around the screen is extremely manual. The way zero-page memory management works on the NES leads me to believe that I can’t make generating these objects fully dynamic, but there must be a better way to do it than my current approach.
Another thing I’m really curious about is how to maintain some static portion of the background while the rest is scrolling. I’d like to keep the infinitely-scrolling starfield in the background, but would also like to have a status bar at the top of the screen that displays the player’s life count and score. If I were to implement that right now I would be making use of sprites to fill in the status bar, but there must be a better way to do it since all the example tilesets I see for real NES games include the fonts as background graphics.
I’m going to keep hacking away at this game until I feel happy with its playability, then I’ll probably move on to some form of beat ‘em up. If you’re interested in watching my progress, you can find the code for the game here on GitHub.