# Hard passing, shot openings and native accounting — 2026-10-30

jdc accepted the released 38/50 Hard base as complete on 2026-10-31.
The former stable39/50 objective is archived, not an open task. Edmonton Hard won38 of50 fresh predeclared native
matches against Chicago Normal, goals132–66, with25home games per club. The
matched released-r3 control won32/50; the immediate parent won36/50. There is
no independent qualifying confirmation and no claim that stable39 is reached.
All other candidate results and failures are retained.

## What changes in play

Hard CPU skaters look for an unmarked cross-ice receiver with a clear pass and
shooting lane while the opposing keeper remains in the goal mouth. The policy
also considers a centered keeper and forwards the puck from the point up to
depth160. A genuinely accepted native pass arms its actual receiver; no puck
or player is teleported. Receiver support retains a useful finishing spot
while a distant pass approaches, then resumes native tracking near the puck.
Defensive coverage and support continue through a real approaching pass;
target decisions update more frequently, without changing skating physics.

At the actual catch, the CPU checks the current keeper opening. A covered
custom direct shot is declined, leaving native carrying, passing and shooting
available. At a real native shot, Hard can select a more open existing post
only when its ray has at least16units clearance and improves separation by8.
The original native target height is retained. Native accuracy, error, power,
critical-shot rules, player attributes, fatigue, collisions and skating remain.
Human control and Normal/Easy eligibility are guarded. Two Easy live controls
show sampled frame-timing differences; their identical-input native target and
physical-shot contracts pass. Whole live trajectories are not all byte-identical.

Buffered releases first execute native possession bookkeeping at1013E, fixing
stale-passer scorer attribution. A real keeper's own goals and shots are
separated from the native overloaded defensive GA/SA counters. Native saved
statistics and checksums are validated, including actual reserve keepers.
The save format is unchanged. A keeper empty-net goal, pause/resume and foreign
highlights have their own real-match regression.

## Source and hook map

| Entry / module | Purpose | Source |
|---|---|---|
| E292 / E444 → 2DD800 | Safe cross-pass and forward-pass choices | experimental/ai_freecross.s |
| C30C → 2DF000 | Call original C566, then eligible Hard native target choice | experimental/ai_smart_aim.s |
| 2DF004 | Actual catch-opening decision | experimental/ai_smart_aim.s |
| BFB6 → 2DF800 | Record an accepted native pass and real receiver | experimental/ai_pass_plan.s |
| 2DD000 | Receiver tracking and genuine catch/release | experimental/ai_playbook.s |
| 2DD680 | Validate actual held/incoming-pass owner | experimental/ai_pass_owner.s |
| 103D0 | More frequent Hard target decisions | experimental/ai_steering.s |
| DA58 / 2DC280 | Track a real approaching lateral opposing pass | experimental/ai_keeper_pass.s |
| 2DC400 | Native support targets | experimental/ai_support_spots.s |
| 14964 / 1301C → 2DF400 | Actual keeper attacking G/SOG accounting | experimental/goalie_offense.s |
| 2D8C80 / 2E0000 | Saved keeper accounting and game-reset lifecycle | experimental/goalie_season.s / crowd.s |

Transient planning uses FFF086–FFF08F; keeper attacking counters use
FFF800–FFF80D. No new persistent save fields. Native C542 target table,
C566 autoaim and C2F2 physical shot body remain unchanged apart from the
C30C dispatch. The source archive and forum cards export actual current hook
bytes and the complete original-to-current ROM byte diff.

## Evidence and limits

All63exact-ROM/source checks were executed:62pass; the receiver-hold live
geometry improvement check fails (mean slot distance1.90to2.78, early releases
2to2). In two setups, holding a distant receiving spot delays or loses the
catch relative to native tracking. The strict release gate remains FAILED.
QA_STATUS.json retains the failure and exact source-bound results. This is the
interim playtest specifically requested by jdc, with that known AI limitation;
the final39/50goal still requires a fully passing strict gate. Additional targeted evidence includes122native aim/guard/
ABI cases,28full same-target native physical-shot comparisons,26actual catch
cases,61accepted-pass cases,94cross choices,172actual pass/shot dispatches,
155playbook cases,108pass-continuity cases and actual live skating/reception/
release comparisons. The point-pass boundary regression tests both160and161,
both clubs and ends, isolated from the separate deeper cross selector.

All200candidate/parent matches in the latest250-game comparison pass the
all32teams/skaters/keepers/checksum audit. One known stale-passer error in the
released-r3 control remains retained. Thirty systematic read-only replays
reproduce their exact original results; these are diagnostics, not extra fresh
wins. Approximate ray and outlet observations are not causal proof.

An independent complete source copy rebuilds the release byte-for-byte.
--no-hard-tactics with the preceding version reproduces exact releasedr3;
--no-smart-aim reproduces its exact preceding parent;
--no-catch-opening reproduces the matching unfiltered smart-aim image.
The IPS reconstructs the exact release from original v5.1W SHA256
b115de41eee9b790618a8a053885aefea32aaf5a2de2eaeb260af8aaf36b8f39.
All additional ROM differences are restricted to declared code/title/checksum
regions. No new physical-controller playthrough is claimed by these scripts.

New version means fresh game progress on jdc and Bodin, with controller remaps,
configuration and history preserved. The previous current item/download is
replaced. An active RetroArch is never closed or its live saves cleared.
