Skip to content

v0.1.27 — Phase 14 Hardware Performance Pass

Choose a tag to compare

@NoDataFound NoDataFound released this 26 May 02:20
· 7 commits to main since this release

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

  1. SFX preload — `sound_manifest.preload_sfx()` builds one cached sampleplayer per path at boot. Eliminates per-shot `sampleplayer.new()` cost (cross-cutting audit FAIL).
  2. 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).
  3. 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).
  4. 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).
  5. Newb overlap allocation — replaced `self.newb:overlappingSprites()` with manual rect-intersect against `self.hotspots`. Zero per-frame Lua table alloc (cross-cutting audit WARN).
  6. 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