Development time (to date) ~50 hours
Concept NES emulator for the web, with an exposed API for programmatic manipulation.
Existing NES emulators (for the web) attempt to be an all-in-one solution. As a result, UI and emulator code is tightly coupled together, and you can’t do much with the package outside of using it as a ‘standalone’ emulator. I was interested in creating a project which relied on the ability to control player inputs, import/export savestates, and looked/worked pretty decently. nES6 was the result.
Good Artists Copy, Great Artists Fork
After converting the codebase to ES6 (expect a blog post on that soon!), I added a handful of features, which primarily stemmed from needs while developing MultiNES. Features included:
Plugin System Developers can create their own plugins, or use one of the built-in plugins:
bindGamepadmaps USB controller inputs to nES6
bindKeyboardprovides sensible default keyboard controls, as well as a modifiable keymap.
dragDropLoaderprovides functionality to let the user load a local ROM file via drag-n-dropping the file into the emulator. Great for single-player applications.
Headless Rendering Due to the model used for networking, a key requirement for MultiNES’s success was the ability to run a copy of the emulator on a Node server. For that, nES6 needed a mode of rendering which would produce identical gamestates without actually rendering any of the graphics to the screen.
At the moment, nES6 fulfills my needs and performs adequately, for the most part. The emulator still runs pretty sluggish on phones (if at all), and work must be done on that front in order for nES6 to succeed in all contexts. That said, at this point in time, the emulator is functional enough to build small applications and demos with it!