I'm creating a new NES game engine at https://github.com/fo-fo/ngin. I started this project around the beginning of March this year. I haven't touched it since June, but do plan to work on it every now and then from now on. I'm going to use this thread as a development blog similar to the one I had when I was working on STREEMERZ.
Some things to note:
If you are on Windows and want to try building the engine and samples despite the long list of dependencies, see the How to Build section in the README file at the GitHub page. If you have troubles with this, let me know.
If you are an artist, or an otherwise curious individual, you might find it interesting to modify some of the assets used in the sample projects. Examples of these are the TMX level files (editable with Tiled) and the sprite animations (.gif files). Probably the best playground for this purpose is the platformer sample. You will need to have the build system set up to be able to see the changes in action, though.
All feedback and suggestions with regard to any part of the engine (code, build pipeline, tools, workflow, etc) are welcome.
License is undecided at this point, and as you can see in the README file, I don't actually recommend that anybody tries to use this engine in their own game projects at this point, given how many features are missing or incomplete.
As for features, here's some of what I have so far (some more complete than others):
One of my goals has been to integrate the tools in the build process as well as I could. This means that if you modify a TMX map file, the map import script will be automatically run when you build the project. Same goes for changes to other assets like sprite animations and audio files.
Here's a screenshot of the current state of the platformer sample to spice up this post a bit:
ngin-platformer.png [ 7.4 KiB | Viewed 7427 times ]
Some things to note:
- The engine depends on the Lua support of NDX extensively, so it cannot really be used with other emulators at this point. This in turn means that only Windows is supported as a host platform.
- Some parts of the engine (like the map scroller) only exist as Lua prototypes at this time. These will naturally need to be rewritten in 6502 at some point.
- The provided "samples" (in the samples directory) are not so much samples about how to best use the engine, but rather just pieces of code I've used to test parts of it.
If you are on Windows and want to try building the engine and samples despite the long list of dependencies, see the How to Build section in the README file at the GitHub page. If you have troubles with this, let me know.
If you are an artist, or an otherwise curious individual, you might find it interesting to modify some of the assets used in the sample projects. Examples of these are the TMX level files (editable with Tiled) and the sprite animations (.gif files). Probably the best playground for this purpose is the platformer sample. You will need to have the build system set up to be able to see the changes in action, though.
All feedback and suggestions with regard to any part of the engine (code, build pipeline, tools, workflow, etc) are welcome.
License is undecided at this point, and as you can see in the README file, I don't actually recommend that anybody tries to use this engine in their own game projects at this point, given how many features are missing or incomplete.
As for features, here's some of what I have so far (some more complete than others):
- Metasprite rendering
- Object handling (allocation, deallocation, etc)
- Object spawning (Lua prototype only)
- Controller reading
- Memory operations (copy/etc)
- Lua integration
- Camera
- Map scrolling (Lua prototype only)
- Map-Object collision detection (Lua prototype only)
- Object-Object collision detection (bounding boxes)
- PPU buffer (for nametable updates and so on)
- Macros for stuff like 16-bit arithmetic
- ngin_tile macro that can be used to define tiles within code (nice for self-contained samples)
- Tiled map (TMX) import
- Sprite import (including animations, as .gif files or sprite sheets)
- Debug logging (depends on NDX and Lua)
- Build logging (for generating a text file from build-time data, can contain link time data such as how big a certain segment is)
- Sprite animations
- Runtime asserts (depends on NDX and Lua): can be used to assert certain conditions at runtime, for example that the carry flag has the expected value
- Sound support (depends on Musetracker, I may add support for other sound engines later)
One of my goals has been to integrate the tools in the build process as well as I could. This means that if you modify a TMX map file, the map import script will be automatically run when you build the project. Same goes for changes to other assets like sprite animations and audio files.
Here's a screenshot of the current state of the platformer sample to spice up this post a bit:
Attachment:
ngin-platformer.png [ 7.4 KiB | Viewed 7427 times ]