# Charged passing and physical-star / goal-palette repair — 2026-10-31-r10

Released ROM SHA256:5e3d4aedcf006f2c92dacdae965f79b15dfd078fae6a0862f77b6520a60d1eee; CRC32:0301E4D0.

## Menu and behavior

The nineteenth main-menu row is **Pass Charge:Off/On**, default Off. Off retains
the preceding owned-pass behavior. On waits for release of the ordinary pass
button and scales the existing native power by
`floor(native_power*(10+min(owning_input_updates,30))/40)`.
A tap gives25%power; a fully held pass gives100%. Reaching the cap never launches
the puck by itself. These are owning native input updates, not a promise of
exactly30video frames or0.5seconds. Actual distance depends on native physics,
receiver movement and interceptions; no target, velocity or catch is teleported.

The last held D-pad aim is retained; it can change during charging. Directional
uses that actual eight-way aim; Assisted still runs native receiver selection
and intercept solving. Existing Slow and Low choices are independent. P1–P4,
either club and an explicitly owned keeper are covered. B without possession
still switches immediately; AI keeper outlet requests still use their requested
receiver immediately. CPU passes, forced passes, faceoffs, shootouts and other
native special/invalid input states keep their established paths.

The choice is separate for native play, Full, Light and Mini, survives cold boot
and slot circles, and locks after the first completed match. A confirmed season
restart resets only that season toOff; native and other-season choices stay put.

## Hooks, fields and exact reconstruction

- `B760`:original `4EB9000FEE60`→`4EB9002E8200`, human fresh-B accounting wrapper.
  It runs originalFEE60 before creating a per-physical-pad actor/hold record.
- Existing human BC40 dispatcher at2E6800 delegates pending charge input. New
  exports at2E6820/24 retain the old gate and common human mode/cone emitter.
- New module2E8200, exports begin/input/scale/load/put/reset/Assisted/reset at
  four-byte intervals. Charged Assisted clones only the native BC64..BCD8
  prefix, scalesBEDE and resumesBCD8. Directional scales at its own human power
  boundary. CPU BC64 and all shared horizontal/vertical solver bytes stay exact.
- RAMF008 is the enum. F110..F12F is four8-byte transient physical-pad records
  in menu row scratch, cleared when preferences load. Native D4 plus C318 bank
  determines the physical pad; actor/state matching rejects stale ownership.
- Logical SRAM4D22..4D29:two complemented tagged bytes each for native, Full,
  Light, Mini;60/9FOff,61/9EOn. The complete range is inside Light's deliberately
  excluded shared-profile gap4D20..4E1F. No goalie/player/profile/password record
  is reused. Light's bank checksum is updated, plus the common active checksum.
  The existing combined pass/penalty record1EEE/4D20 remains compatible.
- `season/slots.s` loads charge after destination MODE/VIEW commit, since restore
  itself still has the previous identity. Fresh-season reset selects the season
  record even when entered from native. Both errors were found and corrected in
  private prototypev1; its exact source/image/evidence remain retained.
- `--legacy-pass-charge --legacy-marker-repair --version 2026-10-31-r9` rebuilds
  exactr9 from the guarded plain input. Independent rebuild and original-base
  IPS reconstruction are byte-exact. Use spaces between flags and arguments.

## The44.png regression and repaired physical stars

jdc's screenshot showed a red P1 star and a yellow goal. The r9 implementation
changed shared palette1/index9 from0600blue to000Ered and indexD from0006red to
00EEyellow. P1's original frame186 already uses palette1, so unchanged P1 source
pixels did not preserve its visible blue color. The goal shares indexD. The
previous claim that P1's source art alone proved its color was insufficient.

The fix preserves **all original fixed rink palette bytes** and native drawing
instructions. Final physical-pad mapping, explicitly clarified by jdc:

|Physical pad|Star source|Native palette/index|3-bit RGB|
|---|---|---|---|
|P1blue|original186 / art7C144|1/9|0,0,3|
|P2red|187 / original art7C1C4|1/A|7,0,0|
|P3green|34C / new art4004|1/B|0,1,0|
|P4yellow|original34D / art9E624|0/C|6,5,1|

P3 uses the native dark green; P4 uses the native golden yellow. No shared CRAM
entry is recolored. Goal palette1/indexD returns to its native red, RGB3=3,0,0.
P1/P2/P4 source pixels remain original; P2's two star descriptors select fixed
palette1. P3 gets an identical128-byte star shape in unused FF padding4004..4083.
The native signed keyD30C resolves to4004 through original EXT.L/asl/add-base;
this is verified in actual native cache/DMA/resident VRAM and committed SAT.
No runtime sprite helper, palette write, ownership or physics hook is added.
Only frames187 and34C change indexed payload/attributes; all 869 frame shape
and all unrelated source pixels remain original. Original r9 is retained only
by the explicit rollback flag, not silently offered as the corrected mapping.

## Qualification and retained failures

The exact 92-suite matrix has91passes and the existing finisher_hold positioning
failure, so the strict gate remainsFAILED. No new functional regression is waived.

Charge qualification includes160 native held/release endpoints;144 power/CCR/stack
cases;1,040 record-validation cases and four complete 64 KB separated writes;
192 complete native lower-power-input physics/receiver/vector/register/SR/stack
comparisons;336 paired native Off/guard/stale/CPU endpoints;30 actual native menu,
slot, boot, first-match lock and restart cases; and six actual-input games with
short/full holds, both modes, all physical pads, all eight aims and immediate
requested keeper outlets. Inputs never inject game outcomes.

Colors include256 paired native DMA ABI cases, all 869frame payloads, and48 cold-
boot native render cases:16 current,16 original r8 controls and16 independent r9
regression reproductions. Both clubs, both ends and each owning physical pad
are exercised. Explicit geometry fixtures supply player/puck/camera inputs;
palettes, cache, DMA, resident star pixels and committed SAT come from the real
native renderer. P1 red / goal yellow is reproduced onr9; corrected stars and
native red goal are measured on the current image. This is not a human hardware
playtest. A private preserving bank observer reconstructs temporary P3/P4 aliases.

The first complete matrix executed all92checks and exposed test assumptions:
old whole-bank and guard-byte witnesses included newly allocated preference
metadata; a fixed-frame ownership sample landed in a native whistle sequence;
a pass observer published a partially written packet at a video boundary; and
the new replay comparison needed its own final aggregate. Complete affected
suites were requalified on the unchanged ROM. All changed test sources, original
failures, updated strict conditions and current results are retained in exact
QA_STATUS.json. The pass observer now publishes readiness around its private
packet; no production pass code changes for that test correction.

All 40 current ordinary600-frame scenes match fresh r9 controls byte-for-byte.
The previous r9-versus-r8 differences and full earlier audit chain remain
independent; a parent's raw-exact count is never attributed to the current ROM.
No Hard win-rate goal resumes. The accepted38-win base stays the default.

See PASS_CHARGE_COLORS_RESULT.json, QA_STATUS.json, the public hook/hex exports,
complete source ZIP and the guarded builder for exact code and delivery status.
