forked from Ports/goldeneye-pc-port
The one broken bass instrument on Control/Cavern/Runway is a plain byte-order bug in a corner the earlier passes never looked at. The instrument bank's only two AL_RAW16_WAVE wavetables (instruments 2 and 51, sharing base 0x2118 / len 790) decode as a clean ~110 Hz soft-attack bass sample when read big-endian s16 -- which is how the N64 CPU reads them. The PC mixer's resampler consumes host-native (little-endian) s16, so every sample arrives byte-swapped: deterministic per-instrument corruption, exactly the M-106 repro. ADPCM nibble data is byte-order agnostic, which is why every other instrument sounds right. romdataFinishCartMap() now walks both bank trees (same ALBankFile layout as romdataFixupAudioBank) and bswap16s each RAW16 [tbl+base,+len) range in place in the cart map -- where alBnkfNew() points the mixer at it directly. Shared ranges are deduped (swapping twice undoes the swap); all reads bounds-checked. D55 in-place-fixup idiom; port-only, no game logic touched. Startup log: 'romdataInit: D230 byte-swapped 1 RAW16 wavetable range(s) in place'. Owes a by-ear pass on the three repro tracks. findings.md D230 -> FIXED with full root cause; release-notes.md drops the music known-issue bullet.