DKR-R v1.0.9 - CUSTOM CARS PLAYTEST 13

Right, cars first! This build adds support for Syeo's .dkrkart exports.
Hovercrafts and planes are coming later. .dkrhover and .dkrplane are reserved
for those, but they are not supported by this playtest.

This one widens character compatibility. The old car check rejected some
perfectly valid character exports and silently skipped their car picker.
All ten original racers and all 44 custom character entries in the local
library now pass the static ownership audit across all five car LOD slots.
That includes the disabled entries and older Blastoise/Yoshi exports too.
This is source/asset verification, not a claim of completed gameplay testing.

Rebuilt character models have individually reviewed car-only face masks,
checked against a fingerprint of the complete model. Retextured original
cars can also be recognized without requiring their original UV layout.
Driver geometry, animations and handling stay intact. This does not guess
which parts to hide from texture names or cut away every static vertex.
Unrecognized future exports keep Vanilla safely and explain why in the log.

The outward-pointing transparent arrows, approved seating, random CPU cars,
wheel motion and controls are unchanged. No cars need to be reimported.

CPUs can now pick from Vanilla and your enabled cars in Track Select races.
Each CPU keeps its choice for that race. The next race can get a different
lineup. This also works with the frozen Online car catalogue, independently
of whether you have custom CPU characters switched on. Only the vehicle's
looks change; the CPU's character, difficulty and handling stay the same.

The shared seat alignment also had a unit mismatch: the seat was converted
from Studio units, but the donor anchors were not. That made the inherited
Banjo/Waluigi versus Diddy/Rayman spacing four times too large. Anchors now
use the same quarter-scale conversion as the seat, with one shared reference
calibration to keep the accepted placement. We do not resize the character,
move the car, guess from its height or add character-name exceptions.

The car picker now uses the game's own wooden picture frames, orange labels,
selection arrows and native fonts. The original track name, records and
balloons stay visible over the live course. There is no large dark panel.
Each player keeps their own choice, including Vanilla, and confirms with A.
Portraits use two safe 64x32 tiles, like the original car images, fixing the
repeated/corrupted image. You do not need to reimport your cars.

This build also keeps the smoother custom wheel motion. The renderer now
rotates each wheel around its pivot between game ticks, rather than blending
between distorted wheel shapes. Full turns and rotation direction are kept,
including reversing and burnouts. No extra graphics pass is added.

The accepted 20-unit forward adjustment is retained as the common baseline,
with the Studio-anchor correction above applied consistently to every donor.
The kart and seat remain lowered by 2.5 world units. All six LODs keep the
same placement, and the confirmed steering correction is unchanged.

The smaller quarter-scale size from playtest 4 is retained. Character size,
physics, collision, camera and handling are unchanged. The changes apply
only while a custom car is active; Vanilla and Adventure are untouched.

The previous fog/opacity, texture wrapping, safe native-vehicle hiding and
online music/asset-address repairs are retained.

Online track music is still verified before the match. It now keeps encoded
recordings instead of every track's expanded audio. Only the selected course
is decoded during loading. Racing, audio mixing and rollback do not open a
decoder. Songs still have the existing 64 MiB per-recording safety limit.

Larger online collections also share byte-identical virtual asset sections
instead of reserving the same character/course data again for each legacy
track. Section bounds, guard ranges and immutable ownership remain checked.
This does not increase the guest RAM allocation or remove memory limits.

HOW TO USE IT

Extract the whole build into a new folder. Keep the launcher and libexec
folder together. Back up your saves before trying a development build.
No ROM, save or installed mod library is included in this download.

Open MODS / HACKS, choose Import mods, then Custom vehicles. You can import
a .dkrkart directly, or the ZIP that contains it. The supplied Mario Kart DS
Standard Kart and Yoshi Egg exports use this format. Importing the same
inner export as both a ZIP and a .dkrkart does not create two copies.

Your cars appear under Vehicles. Enable the ones you want, then start the
game and use Track Select. Pick your character and the native Car vehicle
type. You then get Vanilla and the enabled custom cars to scroll through.
Left/right changes car, A confirms and B goes back. Each player picks their
own car. You can use the same car as someone else. The normal time-trial
and CPU options are kept. Adventure mode does not use custom cars.

Vanilla means the existing vehicle for your selected character. It does
not reset your character. Custom cars replace vehicle visuals only: they
do not include a driver, new physics, collision changes or different voices.

ONLINE

Use Auto / Experimental Rollback and this exact complete playtest on every
PC. The host's enabled car catalogue is frozen before launch. Clients reuse
matching installed files, or download the missing exact packages. Choices
are part of the rollback state, not a local graphics preference.

Do not mix this build with playtests 1-11 in the same lobby. This repair
has a new portable rollback contract. Use the complete new package rather
than copying its launcher over an older libexec folder.

Downloaded cars kept for offline use are added inactive. Existing offline
enablement is preserved. This does not replace character files or choose a
different save. Other online backends are not qualified for custom cars in
this first playtest. The Mod Store does not install vehicles yet.

WHAT NEEDS YOUR CHECK

This is a playtest, not a claim that every character/car pairing is already
perfect. The build has been compiled and its package inspected. Gameplay,
controllers, online behaviour and hardware checks are for the owner/testers.

Please check both supplied cars with the ten native drivers first, then
your custom characters. Watch the seat position, car size, wheel spin and
steering, braking, transparency, shadows and the change back to Vanilla.
Please compare Waluigi and Rayman in the same car, then the other drivers.
Check a race with CPUs: some should use the enabled custom cars, others may
choose Vanilla. In Online, everyone should see the same CPU cars. Disabling
all cars should leave the normal CPU vehicles alone. Adventure stays stock.
Check wheel spin when accelerating, boosting, reversing, braking and doing
burnouts, both above the original frame rate and at native frame rate.
Wheel travel is saved in rollback checkpoints; presentation never reads
live guest memory or advances a separate animation clock. Camera cuts,
course changes and different car/LOD identities do not share wheel history.
Try one to four local players, a normal track, a custom track and a trophy.
For Online, check a fresh client and a client that already has the export.

The older Yoshi export does not contain its own driver anchor table. It
uses the adapter's base-driver anchors. The newer export contains a table,
but its author identifies Banjo and T.T. as estimates. Those seats need a
visual check. We have not invented hovercraft or plane animation metadata.

Characters which keep the original car geometry can use the replacement,
including recoloured materials. If a character has rebuilt that geometry,
or ownership is ambiguous, the picker leaves that character on Vanilla.
It will not hide parts of your driver by guessing at texture names.

All six car LODs are retained. The native farthest driver proxy has the old
car baked into it, so a selected custom car uses the last separable driver
LOD there. This is limited to that racer; it does not bring back the
withdrawn online maximum-detail/scenery redraw path.

Technical limits for this adapter: 16 enabled cars, six LODs, up to 4,096
triangles per LOD, four assigned wheel meshes, embedded PNG textures, and
native material tiles of at most 4 KiB each. Malformed or unsupported files
are rejected before activation. Packages never execute native code.

All authored changes live in patches/custom-vehicles. The Patch Pipeline
creates isolated build copies. Checked-out dependencies, RecompiledFuncs
and RecompiledPatches are not edited. The accepted startup, water, save and
other release fixes are retained, along with the review-editor UI changes.
