CUSTOM CAR FIXED-REFERENCE CONTRACT - DKR-R ADAPTER 2

The outer format/version stays DKR Character Studio Kart / 1. The new
contract is selected explicitly by BOTH:
  driver_position_mode = per-base-driver
  driver_anchor_kind = kart-fixed-base-reference-v1

Both driver_anchors and driver_seat_positions require exactly these names:
KRUNCH, BUMPER, TIPTUP, CONKER, TIMBER, BANJO, DRUMSTICK, PIPSY, TT, DIDDY.
Names map to native slots; JSON order is irrelevant. Anchors are fixed per
kart, not one global table. Custom drivers inherit their declared base slot.
Authoring differences in a custom model cannot be inferred from its bounds.

The top-level driver_seat_positions table is authoritative. If settings
duplicates that table, its values must match. A legacy settings.seat or
nonzero settings.driver is not combined with the new convention.

In the declared Studio reference space:
  driver = R_driver * (native_reference - anchor[base]) + seat[base]

Native renderer coordinates first map into that reference space using the
immutable native driver scale; character size/animation remain unchanged.
The common Studio-to-world conversion is 0.25. No legacy forward advance
or Diddy-reference placement is added. The common Studio-ground-to-racer
frame conversion is -2.5 local world Y units for both car and driver; this
is outside the authored transform and never changes physics or the ground.
The explicit settings.driver_yaw is applied around the subtracted anchor.
All supplied reference-driver yaw values are zero. Unexported additional
authoring rotations are not guessed.

Car source geometry and source-space pivots use:
  car = R_y(yaw) * ((source - origin) * scale) + translation

kart_transform.order must be:
  subtract origin, scale, rotate around +Y, translate
kart_transform.units must be:
  Y-up Studio units; forward -Z; yaw in degrees
kart_transform.driver_positions_inherit_transform must be false.
Seats are already in the post-scale/post-yaw destination frame. Do NOT
apply the car's origin, scale, yaw or translation to them a second time.
Translation changes chassis/wheels/pivots, not seats, ground or collision.

geometry.origin, geometry_origin and kart_transform.origin must agree.
Transform scale/yaw must agree with settings.scale/settings.yaw, and its
translation must agree with settings.kart_offset. A conflicting document
fails admission; no arbitrary precedence hides the error.

The four wheel roles remain front_left/front_right/rear_left/rear_right.
An empty string is valid in this new format and means no animated mesh for
that role. Nonempty assignments must be unique and exist in every LOD.
Only present roles get pivots. Explicit pivots may use role or mesh ID;
otherwise use that LOD0 wheel mesh's source-space bounds centre. This is
wheel pivot preparation only, NEVER bounds-based driver alignment.

The native-4kib-rgba32-safe-v1 profile promises each material is at most
4096 bytes even measured at four bytes per texel. Repeating dimensions
must be powers of two. Runtime materials preserve the source PNG's RGBA8
channels using native RGBA32 when each padded RG/BA bank fits in 2 KiB.
Previously supported larger tiles retain native RGBA16. No resizing or
TMEM budget increase is used. The line stride is two bytes per texel in
each bank for RGBA32 (not four). Custom car materials use point sampling
to keep the small pixel-art images crisp. The scoped draw restores native
filter/tile/image state, so driver/menu/track/water sampling is unchanged.
Transparency and authored UV repeats remain. Portraits stay native RGBA16.

Legacy shared-seat/old-anchor exports retain their accepted interpretation.
The explicit adapter/resource identities change so incompatible builds do
not silently share online content. Car placement remains renderer-only.
New exports are not rewritten during import or online distribution.

Maximum Vehicle Detail uses the same effective Modern-profile preference
as the character renderer. Enabled selects car LOD0; disabled uses the
native distance-selected car LOD (clamped to 0..5). Driver ownership masks
still match the submitted native driver LOD. Interpolation IDs encode the
ACTUAL car mesh LOD, so unlike meshes never share a vertex history. This
preference is read once per decoder task, stays outside guest memory and
checkpoints, and does not need a package-format/adapter-version change.

Wheel phase advances only from the existing native wheel-update callback.
For a finished human temporarily marked PLAYER_COMPUTER, its saved native
player port is accepted only when gRacersByPort points to the same primary
object. Both addresses come from the admitted revision's symbol table.
Actual CPUs retain their bound CPU slots. Render-time ownership, phase
arithmetic, braking/burnout rules and checkpoint version 5 are unchanged.
The finish-line handoff neither resets phase nor adds an animation tick.

Primary regular-vehicle spawns retain LOD0 and LOD1 independent of local
graphics preferences. Only the reviewed track_setup_racers primary call is
changed; boss vehicle types and other/ghost spawns are not widened. The
vehicle ID is fp/r30 at this call, NOT a3/r7 (the Settings racer-row pointer).
Pipeline ABI checks require the native vehicle-table indexing and Settings
row construction instructions in both revisions. Only a1/r5's skip-LOD0/1
bits are cleared, and only for regular vehicle IDs 0..2. Playtest 17 used
the wrong register and therefore left CPU high-detail residency unchanged.
Native loaders build matching instances, vertices and animation storage. The
owned renderer remains the place where a player's high-detail preference
is applied. Native memory allocation checks and the 8 MiB guest bound stay.
High-detail driver redraws use the high model's exact chassis ownership
mask, not the canonical low mesh's indices. Their private kernel arena is
C10000-CFFFFF, separate from immediate C00000-C0FFFF vertex scratch,
D00000-DFFFFF labels, E00000-EFFFFF car pixels and F00000-FFFFFF model pixels.

The existing lens-flare tint marker uses token 1 only during the full-window
postrace phase. Token 0 keeps framed/Track Select behaviour. Both normal
and owned observations use the actual submitted-wood frame gate; no finish
flag or menu-stage guess reverses the transition. This affects the tint's
rectangle coverage, not flare sprite placement or wooden border geometry.

Potential same-name imports require an explicit replace/keep decision.
Replacement is one catalogue transaction; old source blobs and catalogue
history remain recoverable. Original downloads are never deleted.

This contract covers cars. Hovercraft/plane extensions remain reserved.
