# Easy assistance and distinct controller markers — 2026-10-31-r9

Requested by jdc. Released after the full exact-source qualification below. The retained AI
geometry failure means the strict shared gate remains FAILED.

## Easy

The entire club with an active human pad receives maximum skill ratings,
including its AI teammates and keepers. The opposing CPU-only club receives
fixed 20-equivalent skills. Both human clubs receive assistance in head-to-head;
CPU-only clubs receive the low skills. Team membership follows the physical
P1–P4 side map, not the current on-ice actor's human bit.

Native skills use0..30: maximum30 and20-equivalent6. Offensive and defensive
awareness are inverted native timers: skill30 maps to7ticks, skill6 to13ticks.
Fighting uses even0..14, so the two values are14/2. Weight, jersey number,
handedness and roster identity retain their native values. In-game roster
skill/Overall values show100/20; Crit shows100/20. The existing Easy direct-human
eligible slapshot guarantee remains when Crit Shots is On; Off remains absolute.
A rating of100 does not by itself mean every AI teammate's shot is critical.

All26 human roster entries are refilled to full energy4096 every Easy game
frame, including the bench. Native energy debit/read/write routines stay byte
exact, so fatigue cannot accumulate between frames. Automated input observes
the committed refill boundary with a preserving private probe; a frontend
VBlank sample may fall between a native debit and its next refill.

The existing crowd Easy branch and native roster loader call easy_stats.s at
2EE400. Constant skills are applied on roster load, Easy entry and a changed
physical team map; they are cached during ordinary play. No new RAM or SRAM.
The8E46 numeric formatter bypasses the native low-rating lift for Easy skill/
Overall columns, so20 is actually drawn as20 rather than35. Difficulty saves
and played-season locks retain their existing paths.

## Controller markers

P2 green, P3 pure red, P4 yellow; P1 retains its original pixels and palette.
These are static artwork/palette changes. No runtime rendering hook is added.
P2's existing four star tiles change indexA toB and select rink palette1.
P3 uses P1's identical-shape index9 star through palette1 red; P1 keeps palette0.
P4's own star pixels change indexC toD and select palette1 yellow.

Fixed rink palette1 slots9/B/D provide red000E/green00E0/yellow00EE. Crit red
at indexA stays unchanged. Team uniform palettes and palette0 rink-line colors
are untouched. Existing edge pixels using these three rink slots share their
new hues. All869 native sprite-frame payloads are checked: only the three
requested marker frames change indexed pixels or attributes, with exact
transparency/shape. P3's resolved red pixels retain their original appearance.
Native DMA/crit rendering instructions remain byte identical to r8.

## Qualification

All91 required suites ran on SHA443c96a23923e96529120cd19c486db1483101896787c76a8d2082e5836e6186 (CRC9108C83B).90pass; the sole retained finisher geometry failure remains failed.

Easy:48 native team/bench profiles,144 paired unchanged native energy ABI
contexts,16 complete native loader/substitution/roster/crit profiles and two
cold-boot actual-input games (solo and P1–P4), each with420 committed-frame
samples. Every human roster sample is4096; raw sub-frame samples remain in the
native full visible energy-bar band. The private preserving frame probe never
sets game energy, actors, RNG or outcomes. These are automated tests, not a
physical-controller human playtest.

Colors: all869 native sprite-frame payloads and256 paired native DMA full
register/CCR/stack contexts. Only the three requested marker frames change
indexed pixels/attributes; P3 retains the same resolved red appearance.

Independent rebuild, exactr8 rollback, matched AI controls and original-base
IPS reconstruction pass. All40 ordinary current scenes are compared with fresh
r8 controls;33 are raw-exact and every difference remains recorded. The
complete earlier comparison chain stays intact on those parent controls.
No new Hard strength or win-rate claim.

The first complete91matrix (9a96...) had7new failures and was rejected. The
final design removes the added runtime marker DMA remap and native energy
hooks, caches constant Easy skills and refills energy per game frame. Its
fresh91matrix retains all original positive criteria. See EASY_COLORS_RESULT.json
and QA_STATUS.json for exact results, failures, proofs and delivery status.

## Coverage requalification on the same ROM

The final complete91 run initially had two insufficient-coverage results, in
addition to the retained geometry failure. Both affected suites were rerun in
full; the ROM and all game/build sources remained unchanged. Only four local
test/probe files changed, with their before/after hashes in QA_STATUS.json.
No original positive assertion was relaxed; the other89 checks use unchanged
test dependencies and remain bound to the same exact ROM.

The SR-aware contact logger originally added an instruction, changing the
native timing/shot sequence. It now replaces an unused attribute diagnostic
with a saved-SR MOVE of identical size/addressing mode. The124-byte legacy
observer remains byte exact. Current SR-aware and legacy-observer mash runs
have identical inputs, passes and shot positions/callers. All five original
15501-frame profiles, both negative controls,432 contact boundaries and192
complete frame ABI contexts pass. The current mash profile has4 buffered
releases and held has3; each is within4pixels at phase24, with IRQ level7.

All four pass-speed games now run30001frames. They retain the original15501-
frame input prefix, then use legal controller movement to open passing space.
All original native pass-count, speed/height, solver, storage and lifecycle
criteria pass. These are controller-only extensions, without forcing positions,
ownership, clock, RNG or game outcomes. The shorter coverage failures and the
unsuccessful contact-duration/cadence experiments remain recorded privately.
