MARY 3 on PS1 at night: Johnny stands at the center of the island under the palm tree, Mary the mermaid surfacing in the water at the lower-left shoreline.
MARY 3 on PS1, captured during the v0.8.4-ps1 chapter-select grind. The shoreline meet-up before the gift exchange and date plans: Johnny is on the island, Mary's mermaid tail just breaking the water on the left. (For the date itself see MARY 1.) MARY 3 also forced two infrastructure fixes — the host capture ledger now clears stale sprite-surface refs before BMP/layer surfaces are freed, and the PS1 runtime drops optional prefetch buffers plus uses a small streaming scratch path when a large clean snapshot would otherwise fragment memory. Both rows are currently metadata-only on /perf/ pending an active-loop timing refresh against the v0.7.2+ prefetch-relief baseline.

Validated on 2026-05-03.

Pack identifiers

  • ADS dispatch: MARY.ADS scene 3
  • Slug: mary3

What this scene is

Mary the mermaid surfaces at the shoreline; she and Johnny exchange small gifts and make plans to go on a date together. Confirmed by direct on-PS1 playback observation while capturing the chapter-select thumbnail; the earlier “mermaid sneak-up” caption-mapping guess was wrong.

Validation notes

MARY 3 needed the island shifted right during host capture and visual stress testing (x=80,y=54) so the action living left of the island was fully visible to the pack compiler. Production playback is still scene-relative; the host capture position is not a runtime pin.

The rebuilt high/low packs use a full-frame keyed foreground-only overlay. That avoids stale full-host overpaint while preserving the foreground gag. The late dinner/thought beat also has explicit hold redistribution so the readable frames remain on screen long enough without changing the total scene duration.

This scene also forced two infrastructure fixes: the host capture ledger now clears stale sprite-surface references before BMP/layer surfaces are freed, and the PS1 runtime drops optional prefetch buffers plus uses a small streaming scratch path when a large clean snapshot would otherwise fragment memory.

Notable runtime history

MARY 3 high and low both appear on the performance battle card without target_speed values — they’re two of the 6 untimed rows. The reason is mechanical, not structural: the active-loop timing pre-dates the current pack and hasn’t been re-measured against the v0.7.2+ prefetch-relief baseline yet. Visual signoff (the FISHING 1 bar) holds; the row will land in the green band on the next perf-matrix refresh that touches MARY 3 specifically.