CUSTOM CARS PLAYTEST 13 - REPAIR RECORD

CHARACTER COMPATIBILITY / SILENTLY MISSING HUMAN CAR PICKER

The two playtester attachments contain launcher handoff only. Neither
records Track Select or identifies their character, so the exact reported
session cannot be attributed to a particular export from those logs.

The independent static audit found a real silent gate: all ten stock racers
passed, but 12 of 44 prepared custom entries failed the all-five-LOD check.
These include Blastoise variants, Link, Rexy, Yoshi Racing Story variants,
007 Bond, Grunty, Yooka, Tiny Kong and Haunter. This can leave native CPUs
using custom cars while a rejected human character has no picker at all.

33 distinct exceptional model variants were inspected as native polygon
data, with front/side/top and isolated connected-component diagrams.
Explicit masks preserve the complete driver, including Yoshi's tail,
mixed/adjacent body pieces and Haunter's driver-only distant proxy.
Each mask is bound to the complete decompressed model fingerprint, with
only numeric 3D texture IDs normalized for append-only namespace relocation.
No model bytes, character artwork or animation data are redistributed.
Counts, ranges, overlap and retained-driver bounds are validated.

The existing accepted exact matcher remains. An additional conservative
fallback recognizes complete original car geometry with reordered corners
or changed UVs, across all ten verified donors and their five LODs. It rejects
ambiguous counts and signatures also belonging to the donor's driver.
There is no partial-percentage acceptance, material-name cut, bounding-box
heuristic, blanket static-vertex cut or forced LOD/animation replacement.
Unsupported new exports retain Vanilla and emit a per-character reason.
The picker logs each actual human's resolved character/type/eligibility.

After the changes, all 54 locally available native/custom entries pass
static admission across 270 LOD slots. This includes disabled entries.
All existing car size/seat/ride height/steering/wheel interpolation, CPU
choices, shadows, native menu artwork, physics and input remain unchanged.
Online resource identity is versioned so old/new ownership rules cannot
silently mix in a session. Both peers must use this same playtest.

Only compilation and static source/asset/package checks were performed.
No game, mod, replay, test program or benchmark was executed. The owner
and playtesters must verify actual visuals, controls and online gameplay.
All authored edits are confined to the Patch Pipeline.

PLAYTEST 12 REPAIR RECORD RETAINED BELOW

CAR-PICKER ARROW DIRECTION AND TRANSPARENCY

The owner approved Playtest 11's seating and CPU behaviour, requesting only
that the left/right icons switch places and their black rectangles disappear.
The two existing native image references are swapped; positions, sizes,
input direction, ready/back handling and multiplayer layout are unchanged.

Evidence: native texrect_draw_scaled selects dTextureRectangleScaledOpa
when primitive alpha is 255, and dTextureRectangleScaledXlu otherwise.
The original unscaled menu-arrow draws always use XLU, including at alpha
255. Our scaled arrows used alpha 255, so transparent texels became black
rectangles. Only those two scaled draws now use alpha 254 to select native
XLU and preserve texture alpha. Icon opacity is 254/255; zero-alpha areas
are fully transparent. There is no black-colour keying, artwork editing,
global render-mode replacement or change to portraits/frame/label rendering.
The native helper restores primitive colour after each draw.

Vehicle geometry, seating, CPU assignment, random state, wheel interpolation,
physics, imports and all existing guest hooks remain byte-for-byte unchanged.
All authored changes remain inside the Patch Pipeline. Compilation and static
package checks only; gameplay and visual testing remain with the owner.

PLAYTEST 11 REPAIR RECORD RETAINED BELOW

CPU CAR ROSTER AND CONSISTENT STUDIO ANCHOR UNITS

Evidence: render_begin and advance_wheels rejected playerIndex >= 4, while
native Object_Racer marks CPUs as -1 and provides a separate racerIndex.
The existing four reviewed primary-spawn hooks already expose race topology,
entry/index and the returned object in both native revisions and private
rollback worlds. The car adapter now uses those exact hooks independently
of the custom-character selector and its AI preference. Bosses, hubs, demos,
ghosts, time trials and Adventure do not receive random CPU cars.

Choices use a separate, fixed integer generator seeded from the guest RNG
state and checkpointed race serial. Native RNG is read, never advanced, so
this does not change AI difficulty, item randomness or character selection.
The pool is Vanilla plus the frozen enabled cars, with duplicates allowed.
The selection is made once during race setup, bound to the primary spawned
object, checked against its AI sentinel/index and never chosen while drawing.
Choices, primary guest-object addresses, pending spawn, race serial and all
eight racers' 64-bit wheel phases have a bounded canonical checkpoint.
No host pointers or local graphics settings enter that state. Three-bit
racer identities replace the old two-bit player field in display markers
and interpolation groups; view, car, LOD, mesh and chunk fields remain disjoint.

Static inspection of the installed Waluigi and Rayman records confirmed
Banjo and Diddy donors, unchanged native header scales, different body meshes
in similar model space, and a 24-unit Z difference in the supplied donor
anchor table. The package calls these post-scale Studio coordinates, just
like its seat/offset. The old adapter converted the seat by 0.25 but treated
anchors as world coordinates. That amplified relative alignment fourfold.
All ten anchors now receive the same 0.25 conversion. One common reference
calibration retains the accepted neutral reference placement; it is not a
per-character exception. Actual immutable custom-header scale is validated
and included in the resource identity instead of blindly using donor scale.
The same formula and profile apply to every LOD, human and CPU. It does not
use bounding boxes, material names, character-name matching or live pose
centres, and does not alter animations, character size, car size or physics.

The native car picker, portrait repair, wheel arc interpolation, steering,
water fixes and online music/address repairs are retained. No gameplay or
test programs were run. Owner visual/controller/online checks are required.
All authored edits remain inside the Patch Pipeline.

PLAYTEST 10 REPAIR RECORD RETAINED BELOW

NATIVE CAR PICKER AND PORTRAIT TILING


The owner requested the original game's menu styling instead of the large
dark overlay. The admitted native track-setup renderer now keeps its camera,
colourful track title, real lap/race records and balloons. A counted guest
hook skips only its lower option widgets while the custom-car picker is
active. The original widget branch, delay slots, epilogue, existing custom
track/save guards and Custom Magic Code dispatchers are preserved.

The replacement choices reuse the already-loaded native orange labels,
selection arrows and actual wooden-frame model. One to four players get
their own framed portrait, measured/wrapped native-font name, choice count
and ready indication. Vanilla uses the original vehicle picture. Frame
placement/scale and height globals are scoped and restored after each draw.
Callbacks come directly from the currently running normal/private guest
variant, rather than looking up a function from the wrong online world.

Inspection of both supplied PNGs confirmed that their source portraits are
correct. The old draw loaded an 8 KiB 64x64 RGBA16 image as a single native
texture, exceeding 4 KiB TMEM and causing repeated/corrupted halves. Both
portraits now become two 64x32 textures and a terminated native DrawTexture
list with offsets 0 and 32, exactly like the original vehicle images.
Both tile IDs, allocations, dimensions, reference counts and checkpoint
resource counts are bounded and owned together. Imports remain unchanged.

The 20-unit driver seat, -2.5 ride height, quarter-scale car size, approved
steering sign and playtest 9's circular wheel interpolation are retained.
All edits remain in the Patch Pipeline; protected source/dependency trees
are not edited. Compilation/package inspection do not replace owner testing.

PLAYTEST 9 REPAIR RECORD RETAINED BELOW

WHEEL INTERPOLATION AND FINAL SEAT REFINEMENT

The owner approved the size and steering, then requested that the driver
move back 4 units. The shared forward seat advance is now 20 world units.
Kart height remains -2.5 and the quarter-scale car size is unchanged.

The old draw path baked the current spin into integer wheel vertices every
native tick. RT64 then interpolated each vertex along a straight chord,
not around the wheel pivot. This could flatten the intermediate wheel and
lose the intended motion when wrapped endpoints hid full revolutions.

Wheel vertices now remain fixed. A scoped, immutable presentation sidecar
records each wheel's pivot, signed accumulated phase, steering, exact model
identity and unchanged combined camera/racer matrix. Only a matched wheel
uses a circular local rotation at the actual presentation weight. Generic
camera motion still uses component interpolation, not unsafe decomposition
of DKR's combined perspective matrices. Non-wheel draws are unchanged.

The visual fixed-point phase retains 64 bits and is serialized canonically
in both rollback checkpoints and bounded display markers. Its low 32 bits
advance exactly as before; physics, speed, braking and steering are not
modified. The wider counter preserves full turns and reverse direction.
Track-selection resets also advance a checkpointed wheel epoch.

Samples are sealed when their exact renderer workload is submitted. Readers
only hold immutable shared captures, never live guest pointers. Resource
identity uses a weak control-block reference, so history does not retain old
mod catalogues or confuse a recycled host address with the same resource.
Matching is
limited to the same resources, full scene, wheel epoch, object, car, player,
viewport, LOD, mesh/chunk, pivot and axle. Camera cuts and missing/evicted
records keep the normal safe fallback. Storage is bounded; there is no new
shader, render target, lighting pass, texture load or GPU readback.

The Patch Pipeline stages narrowly scoped copies of the existing RT64 state
and transform processor. Checked-out submodules and recompiled sources stay
untouched. Every new native source and pipeline input/output is hashed into
the build receipt and portable online build contract. All peers must use
the same complete playtest. Compilation/static package inspection are not
the owner's gameplay acceptance; no game or automated tests are run here.

Very fast repetitive spokes can still exhibit ordinary display-sampling
aliasing. This repair preserves their geometry and motion between ticks;
it does not add motion blur or change the actual wheel speed to hide it.

PLAYTEST 8 REPAIR RECORD RETAINED BELOW

OWNER'S THIRD SEAT REFINEMENT

The owner requested another 12 units of forward driver movement: 24 world
units in total, up from 12 in playtest 7. This is the only renderer change.
Kart height, quarter-scale size and the confirmed working wheel steering
are unchanged. This follow-up continues the Windows-only placement build.

PLAYTEST 7 REPAIR RECORD RETAINED BELOW

OWNER'S SECOND SEAT REFINEMENT

The owner requested another 6 units of forward driver movement: 12 world
units in total, up from 6 in playtest 6. This is the only renderer change.
Kart height, quarter-scale size and the confirmed working wheel steering
are unchanged. This follow-up is a Windows-only build at the owner's request.

PLAYTEST 6 REPAIR RECORD RETAINED BELOW

OWNER'S SEAT REFINEMENT

The owner confirmed that playtest 5's wheels steer in the correct direction,
and requested another 4 units of forward driver movement. The shared seat
advance is now 6 world units in total, up from 2. Kart height remains -2.5;
quarter-scale size and the confirmed steering-sign correction are unchanged.
No physics, collision, driver size or other positioning parameter changes.

PLAYTEST 5 REPAIR RECORD RETAINED BELOW

PLACEMENT AND STEERING FOLLOW-UP

The owner's 31.6-second recording shows the smaller Yoshi Egg vehicle with
a visible gap under the tyres and the driver sitting too far back. Static
package inspection confirms both supplied cars' front axles point toward
native -Z after their authored 180-degree yaw. The front/rear axle roles,
not texture names or model bounds, define the forward adjustment.

The optional custom-car renderer now shifts the whole car down by 2.5 local
world units. The shared seat receives the same height correction; the
driver is additionally advanced 2 world units toward the declared front
axle, after applying the package yaw. The original authored seat/offset,
native driver anchor, car proportions, quarter-scale size and driver size
are retained. These are fixed modest visual offsets, not a claim of
independent tyre/terrain contact simulation for every track or export.
Native suspension and race jump motion still carry the car and driver.

The front-wheel visual steering angle now converts the native sprite-wheel
yaw with the opposite sign. No game steering input, physics, collision,
wheel spin phase, checkpoint layout or native wheel object is modified.
Rear wheels keep rolling without gaining front steering. Vanilla vehicles,
Adventure mode, carried objects and unrelated geometry are not repositioned.

All corrections use the same frozen resources/task snapshot as the existing
car pass and apply to every LOD and viewport. Diagnostics record ride height,
seat advance and steering sign. The Patch Pipeline stages only isolated
copies and extends the rollback build contract. Source, archive and video
inspection and compilation do not substitute for the owner's gameplay test.

PLAYTEST 4 REPAIR RECORD RETAINED BELOW

SCALE FOLLOW-UP

The owner's recording shows the Standard Kart dwarfing its driver. The
current runtime.log confirms playtest.3, 181 submitted triangles and the
corrected primitive-opacity material. The car is now visible, but its
model-to-world conversion was incomplete: driver draw scale was cancelled
without applying a native-sized reference scale afterwards.

Static inspection of the owned US ROM found native driver header scales
between 0.21 and 0.28 (Tiptup is exactly 0.25). Native chassis/body bounds
are approximately 18-23 world units wide, excluding attached wheel sprites.
The Standard Kart's authored post-scale width is 126.4 model units; the
Yoshi Egg's is 104.512. Treating these as world widths explains the size
mismatch. The adapter now uses the fixed clean quarter-scale reference:
31.6 and 26.128 world units respectively, including their custom wheels.
Package-relative differences are retained; no bounds-based per-car fitting
or per-character resizing is introduced.

Only the car's model-space mesh, wheel pivots, seat and driver offset receive
that conversion. The driver anchor and driver linear transform are not
scaled. A new capped diagnostic records the actual live driver scale and
the vehicle unit conversion. Physics, collision, camera, input, wheel-phase
checkpoint format, menu choices and installed packages are untouched.
Source/archive/video inspection is not a claim of gameplay acceptance.

PLAYTEST 3 REPAIR RECORD RETAINED BELOW

FOLLOW-UP EVIDENCE FROM THE OWNER'S LATEST SESSIONS

The current runtime.log identified playtest.1 and its playtest-1 ModWorker.
That session hit the original aggregate decoded-music limit on Mario Circuit.
runtime-previous.log identified playtest.2 and its playtest-2 ModWorker. It
verified Mario Circuit (6,800,384 frames at 44,100 Hz) and eight recordings
totalling 43,604,257 encoded bytes, then hit virtual asset address exhaustion.
A smaller selection in that same playtest.2 session completed preparation.
These are distinct failures, not evidence that the new music code was absent.

That session also logged 181 submitted car triangles with opacity 255 and
positive clip-W. CPU submission therefore was not the remaining render fault.
The native RSP fog shader replaces vertex alpha with fog density. The car
combiner incorrectly used that shade alpha for texture coverage; nearby cars
could become completely transparent. Both material cycles now use independent
primitive opacity, including mesh opacity and racer fade. RGB shade and the
existing native state restoration are retained. Texture S/T wrapping and
mask arguments now match the renderer's T/S parameter order.

Each legacy-track bank previously reserved a whole copy of every virtual
asset section, even when its expanded character and modern-course sections
were identical. The bus now shares sections only when their section number,
complete canonical byte SHA-256 and length match. The receiving mount pins
the exact earlier owner; stale reads retain their existing safety checks.
Section zero remains unique/monotonic because prepared-world clones use its
address as their allocation ordering key. Guards, the original tagged address
range, bank count limit and atomic publication remain unchanged. There is no
global address reuse and no mutable ROM swap. New diagnostics report shared
sections and reserved virtual bytes.

All bus changes are applied to its isolated first-party source copy by the
Patch Pipeline. Its public class layout and headers are unchanged. The
derived mount lifetime is owned by its shared_ptr control block. No gameplay,
mod execution or runtime qualification is claimed by this source review.

PREVIOUS REPAIR RETAINED BELOW

WHAT THIS ADDRESSES

The first car playtest could hide the old car without a replacement draw.
The owner reported this with the Yoshi Egg and Mario Kart DS Standard Kart
exports. The driver and race continued to render.

Online resource preparation also retained every enabled course's expanded
stereo recording. Logs showed 109,641,728 bytes already resident after three
songs. Mario Circuit needed another 27,201,536 bytes: 130.50 MiB in total,
over the fixed 128 MiB session limit. Other selections failed on whichever
song crossed that limit. This was not a missing music/main.mp3 file.

VEHICLE DRAW REPAIR

Replacement submission now happens at the captured object-root matrix,
before any original car triangles or wheel sprites can be suppressed. The
end marker closes the scope; it no longer performs the first custom draw
after native matrix/attachment teardown. A missing/behind-camera submission
keeps the original vehicle and its driver transform.

Native viewport-facing culling is respected. Each mesh chunk has its own
transform identity and forces a fresh transform record. Original-water
material state is restored even if replacement drawing fails. Native car
texture replay now preserves canonical TMEM in ordinary play as well as
owned Online play. The original dependency checkout is not changed.

runtime.log receives at most 24 car draw diagnostic lines per process,
including the selected car, player, viewport, LOD, triangle count, opacity,
clip-W range and whether native hiding was admitted. These are submission
diagnostics, NOT a claim that GPU output was visually verified.

SELECTED-COURSE MUSIC

Each unique recording is still decoded during pre-match preparation to
verify its exact decoded shape and portable PCM SHA-256 proof. That temporary
PCM is discarded immediately. The immutable library retains verified encoded
recordings and metadata, deduplicated by the source recording SHA-256.

The selected recording is decoded from those frozen bytes at ordinary course
loading or inside the private confirmed scene continuation, before baseline
capture/readiness releases the next epoch. Silent Track Select background
previews do not decode songs. Audio callbacks and rollback checkpoint staging
can only use already-resident samples; neither can open a decoder or a file.

The original integer mixer, tempo, loops, gain ramps, sequence adapter and
native music checkpoint format remain in use. Per-world wrappers pin only
the active song. A weak cache lets concurrent owners share that exact PCM
without retaining all decoded songs. An old checkpoint cannot silently decode
an unprepared recording. No music path writes the offline save or mod files.

Limits remain explicit: up to 128 MiB of unique encoded music per profile,
64 MiB of decoded stereo PCM per recording, and the existing 15-minute/rate
validation. Ordinary world replacement can briefly pin old and new selected
PCM during a transactional load; it does not decode the entire library.

INTEGRATION AND DELIVERY

All authored files are in patches/custom-vehicles. Counted transformations
operate on isolated build copies of the accepted release composition. Source
receipts and revision-specific portable rollback contracts cover the music
and vehicle adapters. The driver copy preserves its accepted adjacent header
precedence, including the confirmed-records interface.

Playtests 1-6 must not be mixed in a lobby. Windows and Linux x86_64
AppImage packages are intended for the owner's testing. Hovercrafts and planes
remain deferred. No game, mod, test, replay, benchmark or AppImage is executed
as part of building or inspecting this repair. Compilation and static package
checks do not establish gameplay acceptance.
