- Make handle_vblank strictly increment frame counter (frame++)
- Move heavy frame logic (background updates, OAM updates, palette animations, and console stats) to update_frame() on the main thread synchronized with swiWaitForVBlank()
- Eliminate 256-byte ARM9 IRQ stack (sp_irq) overflow caused by bg_update and iprintf that was corrupting DTCM stack and causing data aborts
- Preserve all playfield entities on game over with top-screen defeat summary and smooth background deceleration
Co-authored-by: Antigravity <antigravity@google.com>
The game now boots into a menu (Start Game, Hard Mode toggle, Music
toggle) navigated with Up/Down and A/Start, instead of dropping
straight into a match. B returns to the menu from a paused or
game-over state.
Eating a cursed apple inverts the snake's steering for
CURSE_DURATION_TICKS ticks, shown on the top screen while active. The
sprite is a recolored copy of the rotten-apple tile since all existing
sprite tiles are already in use.
Use explicit != 0U comparisons for bitmask checks, static_cast instead
of C-style casts, <cstdint>/<cstdio> instead of the C headers, and
puts() instead of iprintf() for plain strings.
- Deleted generated CMake files and build artifacts from the cmake-build-debug directory.
- Removed the Intellisense header - what was that???
- Cleaned up the melonDS.ini configuration (removed hard path)