# Hard pressure, point shots and catch-and-release combinations — 2026-10-28-r9

The native nearest CPU skater pressures an opposing carrier instead of waiting
halfway between him and the goal. This includes a stationary carrier. Other
skaters retain their roles and the existing pair/weak-side coverage.

Clear shots just inside the blue line are considered more often. The pass
search can start at the blue line, so a wide/point receiver can catch and relay
to a better finishing position. Hard CPU receivers keep tracking the incoming
puck. A free slot receiver can release immediately on the native catch, using
the same native shot path as the established buffered human one-timer.

## Implementation

- ai_playbook.s at 2DD000, bounded below 2DE000. Entry +0 pressure, +4 point
  decision, +8 pass reception, +12 receiver steering, +16 per-frame buffer.
  Install guarded hooks E9D4 (nearest target), EC0E (CPU reception decision),
  EC60 (CPU receiver tick). Native skating/checking/puck collisions still run.
- ai_attack.s's shot gate calls the point decision, then native CompShoot at
  E412. Hard/live CPU carrier only: offensive depth88..144, |X|<=100, no
  breakaway, and a clear conservative12-unit shooting corridor. Goalies are
  not treated as lane obstructions. One-in-four native RNG roll only after all
  eligibility/lane checks. Native aiming, windup, shot power and accuracy apply.
- Existing improved-receiver search starts at depth88 instead of112 on Hard;
  the better-position, marked-receiver and blocked-lane checks remain.
- CPU reception retains the native pass assignment for at most64 native ticks
  and uses native skatetopuck steering. This avoids abandoning a pass before
  arrival. Point/wide receivers catch and continue normal pass/carrier decisions.
- A finishing receiver at offensive depth160..252, |X|<=92 and with a clear
  shooting lane arms the catch buffer. onetimer.s calls +16 after FD78A; human
  input/PEND behavior is retained. The CPU buffer requires actual possession
  by the recorded receiver before invoking native forehand animation1073A and
  shotC2F2 with the native one-timer flag/power31. It never awards a catch/shot
  statistically or teleports a puck to a receiver. Lane/eligibility is checked
  again on reception. Intercepted/missed passes can still fail to yield a shot.
- Transient reservation FFF086..FFF08B: magic5042, receiver object+1,64-frame
  lifetime. Not saved. Expiry, invalid actor, changed target, opposing possession,
  human/locked/unavailable actor, wrong difficulty or special/whistle/replay
  state cancels the request. This is separate from human PEND FFF736 and replay
  FFF738..FFF73F. No new ratings, skating speeds, shot physics or save format.
- Normal/Easy take their native decision paths. Native RNG samples hardware
  timing: additional guarded code can shift native random outcomes even when
  no feature is eligible. Identical whole-match trajectories are not promised.
- --no-ai-playbook reproduces exact r8 when built with --version2026-10-28-r8.

## Regression evidence and limits

The shared gate now requires33 exact-ROM/source checks. The new native decision
suite checks both teams/ends, lane/zone boundaries, humans, lock/unavailability,
Normal/Easy, whistle/replay/offside/shootout/penalty scenes, friendly/loose
possession, expired/invalid/intercepted buffers, register preservation and
native RNG/action calls. Private reset probes stub only action endpoints to
observe decisions; live tests use the untouched native action code and RNG.

The new gameplay suite runs32 paired scenarios against exact r8: stationary
pressure, point shots with clear/blocked lanes, relay and direct finishing,
including Normal/Easy controls. Nine setup frames then600 native gameplay
frames; no position/velocity reset, forced pass/shot or score injection during
observation. CPU assignment stacks include the native nearest job underneath
the carrier job. Controller teams, game clocks and sprite bounds are checked.

Small controlled comparison: the nearest opponent is about40 rink units closer
at frame60 across the four Hard stationary cases; clear blue-line windups0->3
of4; early relay catches0->2 of4; observed direct one-touch finishes1->2 of4.
A genuine catch, second pass and one-touch shot is observed. Chains are not
scripted or guaranteed: lanes close, receivers move, passes miss and opponents
intercept. These are functional checks, not a win-rate or match-wide percentage.
Normal/Easy native target/register/RNG guards are exact call-level tests; live
random burst timing differs in some controls and is recorded rather than
presented as an identical trajectory.

QA_STATUS.json binds the full release gate to the exact ROM and source hashes.
Private evidence: work/ai-playbook-20261028-213326/qa/ and build-verification.json.
Scripted native inputs; no new physical-controller playthrough claimed.

Additional native receipt for the observed relay chain: object3 passes at
frame400, object1 receives and returns it at448, object3 actually owns the puck
at456 and releases the buffered native shot at457. No opposing possession
occurs between the first pass and shot. The native shot changes lastplayer to
the shooter; the pre-shot passer/target/ownership are used to verify the chain.
Private native-chain-proof.json records this against the final ROM SHA.
