* A redesign of objects giving the option of a more managed and an
unmanaged system.
* Managed system features
* Z ordering (should be efficient, based on a doubly linked list).
* More than 128 objects if some are disabled (not currently efficient).
* Unmanaged
* Same sprite system as before.
* You control how objects get put in to OAM with the unmanaged OAM.
TODO before this is mergable:
* [x] Docs pass, aim for everything to have docs as before.
* [x] Tests, some of these needs some run time testing.
* [x] Affine matrices, I'm not leaving this to die this time.
* [x] Some API redo, so the names make sense / are similar to before.
Future work:
* The Sprite loader should keep most recently used sprites around and
upon allocation of a new sprite try unloading the least recently used
sprite. (Performance wise this would be a disaster as it would be doing
dealloc and alloc in vblank, so really we want to "learn" how much
buffer we should maintain and try to get that during GC).
- [x] Changelog updated
Pulls out the hashmap to its own crate. Allows us to use this in interop
code between agb and desktop code and also gives us the ability to run
miri on it to make sure we're not running into any crazy unsoundness
bugs.
- [x] Changelog updated / no changelog update needed
Replaces `include_gfx!` with `include_background_gfx!` which is much
nicer since it doesn't require the external toml file. See the example
repos for how much better it is :).
Also adds support for aseprite files in `include_background_gfx` and
uses that ability where we still have the original files.
- [x] Changelog updated / no changelog update needed
A few changes to the purple night to make it so much better!
* Fixes player positioning to be in the centre, no more drastic change
of position when changing directions, and you don't go all the way into
walls.
* Fixes rounding of collision to round rather than floor, this means the
left and right walls are more equivalent.
* Fixes the "jitter" between objects and backgrounds where objects would
move by a pixel, but the background wouldn't.
- In general we're more careful to do all display changes at once rather
than throughout the frame.
- Note that for future games this is the correct way of doing things.
* Fixes slime collision boxes to match the extent of the animation.
* Use more i32 rather than u16, we're not running out of memory!
* Fixes memory leak caused by dying (previously you could only die a
certain number of times before the game crashes).
* Moved sound to be during vblank
- This is a negative change but resolves some cracking issues. I can't
see why this should be the case, further work may be required here.
- [x] No changelog update needed