Project Hikari is a hobby project of mine. The goal is to create a Mega Man game in true NES style. I started breaking ground on the project back in 2010 and worked on it off-and-on for a few months. Eventually I had a working program but unfortunately it was so terribly written that building an actual game was out of the question.
So I did what any respectable person would do; I started over. More than once.
It’s coming along nicely, but it’s still got a long way to go. I hope to document the progress here. For now, we’ll start at the beginning with some boring stuff.
Technical Details and Dependencies
Here’s a brief overview of some of the libraries being used by Hikari. This list is not exhaustive but the main points are covered.
The game is written in C++, a language with which I do not have professional experience, but a language that I have a strange love for. For audio, event, graphics, and window management it uses the wonderful Simple and Fast Multimedia Library.
PhysicsFS is used as an abstraction for the file
system. It can be used to treat files, directories, and packaged formats like
as one transparent file system. This is a nice thing to have when you want to
package game assets for distribution but may need to modify them during
The game is designed to be data-driven so that content can be easily created for it without the need to recompile the application. Things like animations, stage layouts, and configuration files can be added or modified outside the game itself. I chose JSON as the data format because:
- It’s easy for humans (like me) to read
- It’s compact
- It seemed like a good idea at the time
The JsonCpp library handles parsing the JSON files for the game.
To get the right sound in the game there seemed to be no better alternative than to emulate the NES hardware. Luckily Blargg’s Audio Libraries make doing that dead simple. The game can actually play the sound and music from the actual game. Word.
So, is it done?
Not yet. When will it be? That’s a good question. The project is under active development and all of the code is available on GitHub. Check it out, critique it, and send feedback.