Repository navigation
v0.1.27 — Phase 14 Hardware Performance Pass
Phase 14 — Hardware Performance Pass
Final phase of the hakcd-v4 canon-first migration sprint. Targets real Playdate hardware (rev A/B), implements the prioritized fixes from `docs/hardware_perf_audit_notes.md`.
Fixes shipped
- SFX preload — `sound_manifest.preload_sfx()` builds one cached sampleplayer per path at boot. Eliminates per-shot `sampleplayer.new()` cost (cross-cutting audit FAIL).
- CoinVault grid bake — 4x6 grid rendered to a single offscreen image, blitted in one draw call instead of ~96 per frame. Cursor highlight drawn on top per-frame. Re-bake gated on coin-status fingerprint (audit fix #1, biggest single perf win).
- CoinVault asset cache — `coins.json` parse + 9 coin images + portrait moved to module-scope cache. Re-entering CoinVault is now zero-IO (audit fix #2).
- Bedroom + Playground tilemap cache — `LDtk.create_tilemap` + `get_empty_tileIDs` + `get_entities` cached at module scope. Per-enter cost is now just sprite-shell construction (audit fix #3).
- Newb overlap allocation — replaced `self.newb:overlappingSprites()` with manual rect-intersect against `self.hotspots`. Zero per-frame Lua table alloc (cross-cutting audit WARN).
- DebugOverlay — new `source/systems/DebugOverlay.lua`. 100x60 top-right HUD (FPS / SCN / SPR / NWB / MEM), toggled via `debug overlay` system menu item.
Deferred (next pass)
- Lockpick + Tyson static-chrome bakes (audit #7, #8)
- Pre-format strings on state transitions (audit #9)
- Phone/Computer/Modem chrome split (audit #10)
- Progression deferred save coalescing (audit #11)
- gameWillPause music pause hook (audit #12)
- Title/SpriteTest exit() music stop (audit #13)
Build
- Validator: 9/9 PASS, 21/21 asset gates PASS
- `.pdx` size: ~68 MB
- pdxinfo: 0.1.27 / buildNumber 27