# Momentum, lower-left shot display and native positioning — 2026-11-01-r5

All 100 required exact-image suites pass. See the complete QA report and per-suite logs below.

This update adds **Momentum: On/Off**, default **On**, moves the shot meter
into the lower-left NHL badge area, and corrects native receiving/containment
positioning. All earlier options remain independent. Seasons save the new
choice separately and lock it after the first completed match.

The current image is SHA256
`db244dd005f960a9923c44f0dc4168fb938af227a5e9aa97f24d376fd295291e`,
CRC32 `99166AFE`. The historical 38/50 Hard benchmark belongs to its documented
older tactical base. This combined image has no new win-rate qualification;
the abandoned stable39/50 target is not claimed.

## Momentum choice

On preserves the existing earned momentum, with effects up to ±10%. Off removes
that scaling from actual loaded skills, roster values and eligible Crit ratings,
consumes the current shot/check counters and hides the two right-side momentum
bars. It does not bank events for later. The existing whistle/foreign-view event
rules remain. Easy's maximum human-club skills, 20-equivalent CPU opposition and
full human-roster energy are independent of this switch.

The final menu row uses RAM `F84A`: 0=On,1=Off. Four separate complemented preference
pairs occupy logical SRAM `4D52..4D59`, tagged `7A/85` or `7B/84`. Missing/corrupt
records default On without unlocking a started season. Confirmed restart resets
only the selected season. The Light checksum and unrelated records stay protected.
The new module is at `226000`; its load/put/reset/counter-consumption and percentage
exports are at +0/+4/+8/+C/+10/+14/+18. Native sliders/settings are not repurposed.

## Lower-left shot meter

The compact 7×2-cell display replaces only the native NHL badge interior at
pixel (8,200), 56×16. Both KMH and MPH remain visible. Native clock digits, clock
frame and penalty text retain ownership. When the native power-play caption
uses that interior, the shot display temporarily uses the former 8×5 box shape
above the left clock at(0,144). It returns to the compact location when free.

The measured speed/charge stays frozen during automatic replay. Expiry, skip,
pause, new game and Stars transitions clear only owned cells. Font keys are
invalidated when a fresh panel follows a native VRAM clear, including identical
successive speeds. Actual native power-play timers and both numeric units are
checked, not inferred from a screenshot.

`shotmeter.s` remains below `2ED800`; existing critical-velocity code at `2ED800`
is protected. Ownership/layout code is at `227000`. Deterministic dual-unit glyphs
occupy ROM `260000..28EDFF`; six pattern tiles use VRAM `FE80..FF3F`. Existing flame
art at `FF80..FFDF` is untouched. Real DMA crossing 64KB/128KB boundaries, font reload,
foreign windows, all four pads and complete replay lifetimes are covered.

## Native receiving and defensive arrival

The receiver correction uses actual native tracking/interception first. A far
receiver already within eight units per component of the approaching pass's
future course may then request native braking. Near the native finishing zone,
its stale target timer is bounded to two ticks. Body/puck positions, velocities,
catches and outcomes are not written. Original native elapsed-tick and caller
context are preserved. Helper exports are at `225000/+4/+8`.

The containing Hard CPU defender now uses a bounded outward-coast target estimate.
Native `103C8` can request arrival command 9, but its automatic-charge callback
previously replaced that brake and sent the back past the carrier. The helper
at `228040` preserves command 9; every other command still calls native`E594`.
The base-tick estimate at `228000` accounts for remaining outward velocity using
the native movement/braking scale. Native braking, movement, checking, speed,
attributes, collisions and results remain responsible. Existing goal-side bounds
and Normal/Easy/human/partner/whistle/special-mode guards remain.

The gap module fits`2DC000..2DC27F` (610 bytes). Keeper-pass code at `2DC280` and
support code at `2DC400` remain exact. The builder now explicitly rejects overlap.
The original 48 spacing/rush scenarios retain their original numerical thresholds.
They pass with 15/16 Hard spacing improvements, mean 30.283692 and scripted goals
8→5. These are fixed regression scenes, not a new series of matches.

## Rebuild and rollback

Use the complete current builder and its original plain input. An independent
rebuild is byte-identical; original-base IPS reconstruction is exact. These four
flags together, with version `2026-11-01-r4`, restore exact r4 bytes:

```text
--legacy-finisher-position --legacy-momentum-option
--legacy-shot-panel-location --legacy-defensive-brake
```

Matched no-hold/no-plan/no-centered/no-smart/no-gap and legacy-net controls are
built separately. The no-hold image differs only in the checksum and two entry
branch operands. No new Hard win-rate search is performed.

## Validation and limits

All 100 suites pass on 325 hashed source files. Independent rebuild, exact r4
rollback and original-base IPS reconstruction pass. Earlier 90/100, 95/100 and
99/100 matrices, rejected prototypes and every raw failure remain preserved. Test corrections retain their original numerical
requirements: coherent fixture writes avoid resetting a live native divider;
physical-input scripts respect foreign menus/period ends; actual native pickup
and shot serials establish real catch→one-timer order; native unbuffered releases
are not mistaken for a frozen retained catch. Their active negative controls and
complete caller/RAM/CCR/IRQ contracts are recorded.

Automated native input is not a physical human-controller playtest. Original
faceoff incident history remains unauthenticated; the reproduced native free-point
behavior has its optional Faceoff Dots correction. Bodin delivery depends on
connection/normal emulator exit. Human keeper-outlet confirmation and variant
preferences remain separate. The earlier San Jose two-win state was not recovered;
no recreated score/progress is presented as that save.

[Exact current QA](QA_STATUS.json) · [Every requested point](FINAL_AUDIT_R5.md) ·
[Native source and hooks](https://dela.jdc.se/nhl94/#forum)

The final input observer also checks accepted incoming keeper requests: a real B
tap may queue before the save and survive recovery. The original owned-B check
remains. Missing native ASK admission and a wrong receiver are actively rejected
on the same actual three-pad game; no puck, actor, ownership or outcome is written.

[Complete per-suite logs](QA_R5_LOGS.md) ·
[Build and preservation receipts](MOMENTUM_LEFT_RESULT.json)

![Actual native dual-unit shot display](https://dela.jdc.se/nhl94/img/r5-shot-left.png)

Automated native input, actual released shot.

![Momentum menu](https://dela.jdc.se/nhl94/img/r5-momentum-menu.png)

Cold-boot native menu, Momentum On.

![Native power-play-caption fallback](https://dela.jdc.se/nhl94/img/r5-shot-pp.png)

Declared illustrative100KMH/62MPH display fixture with an actual native penalty
timer. These illustrative numbers are not represented as an actual shot.
