🚀 Features
- Surface itch.io in the nav as a branded "Newsy" link
- Update Umami analytics script source URL
- Embed itch.io widget in a 'Newsy i nowości' section
- Mirror release archives to itch.io via butler
- Redesign Assets Explorer page + fix download spacing
- Assets Explorer page with screenshot and downloads
- Standalone Nuklear/SDL2 asset browser + CI
- Stats — split downloads by hardware family, not PC vs handhelds
🐛 Bug Fixes
15 commits
- Update DepackRleFrame call to the new 4-arg signature
- Size prog[] to the 4 instructions in opcode_exactly_0x57
- Fsync the tmp file before rename (power-loss durability)
- Don't double-count the d-pad cursor acceleration ramp
- Free the owned bitmap when a script destroys an entity
- Return NULL for out-of-PE table VAs, not a wild pointer
- Bound DepackRleFrame reads against the source length
- Bound the LZ back-reference read against the output top
- Stop latching hard-quit on ESC (restores back-out + confirm)
- Reject slots with an invalid etap + terminate disk names
- Don't reload slot 0 after the title-screen Load picker
- Bound frame decode against buffer + chunk end (heap overflow)
- Size g_script_vars to the 0x1FF index mask (kill OOB)
- Correct butler host to broth.itch.zone + add itch/push-release.sh
- Ad-hoc re-sign macOS .app after install_name_tool
📚 Documentation
- Refresh suite count, FLIC coverage, and CI section
- Document PCSX2 HostFS-enable step for PS2
🔧 Build & CI
- Add a secret-free unit-test + sanitizer job
- Add
make test-asansanitizer leg
🧹 Maintenance
- Regression suite for the frame-decoder bounds
- Keep banner source SVG for the itch.io page
- Optimize icon/image file sizes
Full Changelog: v1.2.3...v1.2.4