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 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
- 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)
Here's a screenshot of the current state of the platformer sample to spice up this post a bit: