2022-01-17
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.
$ $ $
2022-01-17
After more than a year of no posts, I’ve decided to use this space again as a journal while I work on my new goal for 2022: to build an NES game. As I collect and play more games for the system, I’ve come to appreciate the amount of effort that goes into engineering software at such a low level. The kinds of challenges that programmers had to overcome while building these games are so far divorced from modern software problems that I felt compelled to explore the space in more depth. Maybe it’ll make me a better programmer. Maybe it’ll make me appreciate my game collection that much more. Hopefully it is a fun project and something that I can build on in the future.
I’m starting off by learning some 6502 Assembly. I know there are some higher-level tools that folks have built and there are even simple tools like NES Maker that abstract the development process even farther. I might look into some of those later on. For now, my chief goal is to make something playable using only assembly code. My ‘Hello World’ implementation was far more challenging than I anticipated, but I got there:
My development environment consists of:
As I continue to work on this, I’ll post progress here as well as links to resources I’ve found helpful. For now, here are some links to resources I’ve currently exploring, some of which may be more useful than others:
That’s all I’ve got for now. Next on my list is to figure out color palettes, then I’ll look into animation and reading controller input.
$ $ $
2020-10-28
Still rolling around in a giant pile of nostalgia I decided to dig through files on a pile of old hard drives I had lying around. My chief goal was to find my old Quake 2 installation so I could recover my former collection of player models, skins, maps, and game mods. I ultimately failed in that mission; the drive I was sure held my quarry was super dead.
I turned my attention to Google to see if I could find an archive of old content from Polycount or Planet Quake. I ended up finding a great collection on tastyspleen.net that held the players and maps I was looking for and a ton more. It also introduced me to the Q2Pro client and server. My mission changed from a simple recovery operation to a deployment.
So now quake2.ninjabot.me is a thing. Right now it’s cycling through a collection of deathmatch maps. I plan to add more mods at a later date if there are enough players. I’m also working on adding stat-tracking and possibly bots for team games with low player counts. More to come as I have time, but for now go play some Q2!
$ $ $
2020-10-26
I collect video games. Right now I’m hovering around 1,300 titles spanning 30 physical platforms. It’s not a massive collection compared to others that strive for completeness, but it’s also a lot more than I can ever reasonably enjoy. Even though there are items in my collection that I’m proud to keep displayed on a shelf, my preference is to collect titles that I’d actually like to play. I’m now stuck in a rut where there are far too many options and it is nearly impossible to decide on something fun or interesting to fire up. So when I sit down on my couch to play a game it’s almost always either Contra or Mike Tyson’s Punch-Out. More often than that, I’ll decide to play something on my PC which suffers from a similar issue of digital clutter.
After completing other clean-up projects, where I threw out a fairly massive amount of crap, I’d now like to turn my attention to my game collection. Though it’s tempting to approach this hobby as a completionist, I think a more curated collection would be more manageable and enjoyable overall.
Slimming down is going to be a tedious process so I’m trying to come up with ways to make it more interesting. The first pass is going to involve some simple machine learning to assign a “keep” score to every game based on a small sample of decisions I’m able to make right off the bat. I’ll go into a lot more detail on this piece in a future post, because I think it’s pretty damn cool. Another option I’m considering is a YouTube channel where I’d capture some gameplay of items on which I’m undecided, then arrive at a verdict. I think the process of creating and editing video content will force me to be more thoughtful when making final decisions. It isn’t something I’d market, and I’d probably keep the videos unlisted and only share with friends. Or maybe it could become a vehicle for me to crowdsource curation. In any case, these items marked for deletion can be traded for more carefully selected games that are likely to see some playtime.
I don’t have any specific goals regarding this downsizing, but I think it would be pretty neat to get under 1,000 games. I’ll check in again at the end of 2020 to see how I’m doing.
$ $ $
2020-10-19
Being a sane person in this era of COVID lockdowns seems to be the quickest way to go insane. Like many people (but at the same time, not nearly enough people) I’ve been staying at home with my family. I work from home. My wife helps my kids with their online elementary curriculum. I see very few people in physical meatspace outside of my occasional masked trips to the grocery store or game shop. As cabin fever began to set in, I started finding projects to work on around the house. I started off by building a playground in my backyard for the kids - one of the most satisfying pain-in-the-ass jobs I’ve tackled in the three years we’ve lived in our house. After that I turned my attention to renovating my home office, which was a somewhat depressing room to work in every day. Over the course of that project I encountered a vast inventory of “stuff” that I had built up over the past twenty years and I took the opportunity to slim down my personal collection of objects.
Many people have a spring cleaning ritual where they’ll jettison unneeded belongings, and I suppose I do too. But in those instances I tend to purge things like old clothes that don’t fit, or papers that are cluttering my office; I don’t revisit old mementos, which begs the question of why I keep them to begin with. This time I endeavored to look over all of those collected items and throw out the ones that don’t need to be kept. I found that there were a lot of things I had kept that I can no longer connect to a memory. And when I say “a lot” I really do mean that - a couple trash bags’ worth. I also threw away a lot of redundant items, like boarding passes from international trips, because I have already documented those journeys with photos. Speaking of photos… Wow, I had a lot of photo prints that I didn’t want or need. I threw away a lot of duplicate prints, photos that I had digitized, and photos that were ruined by massive thumbs or bad focus. In the end I had consolidated this collection of things from several giant bins down to a single 12x12x12 box, making any future strolls down Memory Lane far more manageable.
In addition to reducing clutter, this process showed me the value of keeping the right things as well as the joy of looking back. I tend not to think too much about the past. It is considered by many to be healthy to stay present in the moment rather than lingering on the past or the future. I certainly fall in that camp, but the cost of this for me has been that I have lost touch with a lot of experiences and people that have shaped me into the person I am today. Looking through these old photos and mementos has reminded me of so many great friendships that I’ve let go stale after years with no contact. I can see that some of that is happening now, too.
So what is the point of writing all this down? It’s mostly a reminder to myself to remember not to forget, and also to avoid hoarding objects as if they were memories. If you relate to this at all, then I encourage you to gather up your emotional inventory and take a weekend to remember the important things and purge what no longer holds value.
$ $ $
2020-10-01
It is, once again, time for me to scratch that domain-registration itch.
I often feel that I’m not a real nerd without a web site and my own domain, even though I rarely do anything interesting them. I don’t think I’ve put any effort into a site since the days of Tripod and Geocities. Back then the web was a new frontier for me and I found joy in learning new things about markup and scripting. My exploration of PHP and Perl to create dynamic web content was what put me on my career path. One would think that this would have created some lasting personal connection to the web, but one would be wrong; for me it’s mostly business and little pleasure.
Sometimes there are things I feel like writing down and possibly sharing, but (as odd as it may seem) social media feels a bit too impersonal for me. It wasn’t very long ago that the web was a place of discovery. People that had something to say or share were forced to build their own digital homes, and finding that content was a fun challenge. Communities formed around sharing links to sites of interest and promoting each other’s content. Nowadays a massive share of the web’s consumable information is aggregated into a handful of goliath services that spoonfeed access to users over always-on mobile devices. It’s the future I dreamed of as a teenager, but living in it feels very different.
So now I’m going back to basics! Hopefully you find something interesting here. If you don’t, then at least I’ve done you the favor of posting in a way that won’t pollute your feeds.
$ $ $