# Optional native Hard AI shot plan — 2026-11-01-r3

ROM SHA256:0b4b104cf31e3b78d5f686349bbaad73ed54ba491c23c6ac661aca02eca396ca; CRC32:BD66F658.

## Menu and behavior

**AI Shot Plan: Off/On**, default **Off**, is the 23rd start-menu row(row44).
It saves separately for native play and Full/Light/Mini, with the existing
first-match season lock. New/restarted seasons default Off; confirmed restart
resets only that format's record. Corrupt records default Off without unlocking
a played season. Other passing, keeper, shootout and difficulty settings remain
independent. This is jdc's local attacking-policy request; it is separate from
the completed38-win Hard base and does not reopen its stopped strength search.

On applies only to an actual owned, active Hard CPU skater(roles 1..5). Both the
native human flag and all active physical P1–P4 actor pointers are checked.
Normal, Easy, keepers, unavailable/boxed/fighting/busy actors, wrong ownership,
invalid indices, pause/foreign views, whistles, replay, offside, ended play and
special/penalty/shootout states retain their guards. Already buffered/one-timer
paths remain responsible for their native catch/release.

The weak ordinary shot area is defined from the **actual selected native post**,
using original C566 aim and the same C542 target table/native110BE distance as
the release. It requires attacking puck depth 88..263, absolute X<=160,
selected-post distance 41..159 and actual keeper ray separation below 16. Outside
that covered area the existing native decision remains: defensive/neutral
clearances, distance>=160 long shots, distance<=40 close finishes, real openings
and empty nets are permitted. This is not a blanket ban on every distant clear.

The covered shot is declined at E412 **before its original caller-return discard**.
Returning to the real E0B4 caller lets the existing native pass/carry logic run;
no receiver, pass, possession, shot or goal is forced. Existing accepted-pass
planning can still produce genuine native one-timers.

In the actual E10C carrier-target path, a free carrier first aims toward
world-side X±56/attacking Y220; after its body reaches attacking Y216 it aims
toward same-side X±28/Y248. The world X side is chosen once for that observed
carrier and retained; both goal directions mirror correctly. Native103C8/E12C
performs the movement/evasion. No direct velocity or position write is added.
An available opposing skater within 24 keeps the original target/evasion; a
keeper alone does not count as that skater pressure.

The record counts actual carrier-target observations, capped at 96. At 96 native
target/shot choice is allowed again, so the policy cannot indefinitely defer
that observed carrier. It does **not** guarantee a shot after 96 frames or count
exact possession time: losing/regaining between observations can cause earlier
fallback. Observing another owner or leaving the weak area resets the record.
This approach uses real openings, retaining the earlier keeper exploit repair;
it does not intentionally restore a trapped-goalie exploit.

## Hooks, fields and build controls

- E412 six bytes: original584F3038B75E becomes4EF900223000.
  Accepted/Off replays ADDQ.W#4,SP and MOVE.W B75E,D0 then continues E418;
  decline RTS preserves the original caller's return, full GPR and entry SR.
- E10C ten bytes: original41FA001E08380002C2F2 becomes
  4EF9002230044E714E71. Only target D0/D1 low words may change; high words,
  all other registers, original A0=E12C and BTST flags/IRQ contract are retained.
- Module223000..224000,1606 bytes in this image. Eight fixed four-byte exports:
  commit(+0),target(+4),decide(+8),geometry(+12),load(+16),put(+20),
  reset(+24),clear(+28). The geometry/decision probes restore native BEDC and
  all unrelated RAM/RNG; they do not consume extra random draws.
- F810 option word; F840..F847 transient MAGIC4150,actor,age 0..96,side±1.
  F048 was rejected because it is an active switch queue; F00A is the simulator
  flag. Existing keeper counters endF80D and Strict SO history endsF83F.
  Source, aligned operand/data classification, indirect clear spans and actual
  stats/pause/shootout lifetimes were reviewed. Five even F840..F847 byte-pair
  matches are original/generated image data, not RAM operands. This is bounded
  allocation evidence, not a universal computed-address proof.
- Logical SRAM4D42..4D49, native physical209A85. Tags76/89Off77/88On;
  native/Full/Light/Mini each have their own pair. The shared Light-bank gap
  is excluded from copied season data; writes update its checksum.
- pass_mode loads/puts the independent record; slots loads only after committing
  destination identity/view and resets only a confirmed selected season.
- Menu label2E1360, values2E1576..2E15A2; native highest-row limit2E,
  full redraw2C and scroll11. Existing Strict/Charge menu tests now use exact
  row navigation rather than assuming the list ends at their row.
- --legacy-ai-shot-plan with --version2026-11-01-r2 reproduces the exact parent.
  Older legacy switches disable this dependent feature as well. The local copy
  of the accepted aim oracle removes a dependency on optional2DF008; no-smart
  and no-hard-tactics builds compile WITH_PLAN_AIM_HINTS=0 and keep their actual
  native post, rather than evaluating an unavailable smart-aim module.

See the named hook/hex table, every changed byte, complete assembler/builder
source and source ZIP linked from the homepage.

## Qualification and limitations

All 96 suites ran;95 pass. **Strict gateFAILED** retains finisher_hold. Its
current mean slot distances are2.618408 for matched no-hold and3.142610 for
current; early releases are3 versus2. Parent distances were2.531077/3.140057
and releases2/2. These changed measurements remain failed and are not called
identical or fixed. The separate40-scene playbook check still observes2 native
finish releases and8 new relay catches; relay-chain observations change2→1.
Default-Off dispatch adds instructions that can change native HV timing.
Only21/40 ordinary scenes are raw-exact to fresh exact Nov1 r2; all trajectories,
differences and the complete older reference chain are retained. No universal
identical gameplay, improved human difficulty or fresh win-rate claim is made.

All nine new sections execute on this exact image:

- 120 pure native aim/keeper/distance/guard contexts, both teams/ends, complete
 GPR/SR/SP/unrelated RAM/BEDC/RNG checks.
- 18 bounded record/age/owner/corruption decisions.
- 573 actual native target-boundary cases: both legs/ends, stable side, pressure,
 keeper-only proximity, age fallback and guarded contexts, including512 full
 CCR/IRQ live/Off comparisons.
- 560 actual E412 native accept/decline/caller-return cases, including512 full
 CCR/IRQ live/Off contexts. No synthetic release is counted as a scored goal.
- 1040 record-validity/ABI cases and four complete separated SRAM writes.
- 30 actual menu/render/slot/reboot/corruption/restart/first-match lock flows.
- Natural cold-boot On/Off CPU sequences use only configuration/controller
 selection and read-only observations. Both approach legs and goal directions,
 real position changes, native shots, passes, catches and immediate pass/catch/
 shot chains are required. Both target512 and shot256 observer ABI cases execute
 afresh; no player/puck/clock/score/RNG/attribute outcome is written in those runs.
- Six cold-boot human-input profiles cover actual P1–P4 C shots, native saves and
 keeper pass requests with independent pass options while AI Shot Plan stays On.
- Fourteen active-On/canary ordinary stats/pause and native shootout lifetimes.
 Shootout views are limited; unentered stats pages are not claimed covered there.

A separate exact-image native E412 observation records 11 covered-shot deferrals
and 17 native acceptances, following 512 preserving observer ABI comparisons.
These are real native decisions in a scripted game, not a strength benchmark.

The first complete96 matrix and every original failure are preserved. Its Easy
observer used stale cached-VAL metadata as proof that an actor was loaded. At
native period/reset state 34 it inspected roster FF placeholders with zeroed
attributes, and later an off-ice role -1 object. A 61-frame identical-input diagnostic
retains the original failure. The corrected test packet publishes roster+1 only
for cached actors with native role>=0 and roster 0..25, including all active keepers.
All original active-player skill, awareness, full-bench energy, input and loader
criteria remain exact. The entire Easy suite runs again:48 profile, 144 energy,
two input and 16 loader/roster/crit contexts pass.256 full CCR/IRQ/register/
stack/native RAM comparisons qualify the corrected probe; a corrupted loaded
active skill remains eligible and is rejected by the original exact-value rule.
Only two test files change; no cartridge byte changes for this correction.

All first-matrix artifacts, including 71875 original files, are kept in a verified
lossless archive whose every member was compared with the immutable original.
Exact report/source/image hashes identify the release. Independent rebuild,
exact parent rollback, five matched AI ablations, native-net control and
independent original-base IPS application pass. New interactive settings still
need human preference feedback; no automated test substitutes for that.
