# XPR2 colours: channel order ✅ confirmed against the running game [`INDEX`](INDEX.md) carried XPR2 as 🟡 with **"colours unverified (dynamic item)"**. The failure mode that matters for a texture decoder is a **swapped red and blue channel** — it is invisible on greys and on anything you have no ground truth for, and it silently poisons every asset. This settles that one, and is explicit about what it does *not* settle. ## Method Pick an asset whose in-game appearance is unambiguous and **strongly asymmetric in hue** — the Delta Saber's livery is white/grey panels with orange-rust accents, so a red↔blue swap would render it cyan. Then compare the decoded texture against the game rendering the same asset. - **Decoded:** `hidden/resource3d/DeltaSaber_T.xpr` — 1024×1024, **Dxt1**, 11 mip levels — exported with `sylpheed-cli texture export`. - **In-game:** the Delta Saber standing in the ARSENAL scene, captured at `x 700..830, y 180..480` of the framebuffer so the crop is hull, not UI. Both images were resampled to 96×96 and every pixel classified; for the saturated pixels (`max−min ≥ 50`) the median hue was taken. | | warm px (`R > B+40`) | cool px (`B > R+40`) | median hue of saturated px | |---|---|---|---| | decoded texture | **1073** | **0** | **23.3°** (orange) | | in-game render | 916 | 124 | **9.3°** (orange-red) | **Both land in the orange/red family; a red↔blue swap would put the decoded texture at ≈200° (azure).** The 124 cool pixels in the game crop are the blue UI panel behind the model, and the 14° offset is the hangar's red key lighting tinting the lit model — both expected, neither able to move a hue by 180°. Evidence: [`captures/xpr2-colour-check-deltasaber.png`](captures/xpr2-colour-check-deltasaber.png) — decoded atlas beside the in-game hull. ## What this establishes, and what it does not ✅ **Channel order is right** for the XPR2 path, on a DXT1 texture with mips. Separately, `BG_Earth.xpr` decodes as a 1024×1024 **A8R8G8B8** cubemap face and produces a coherent nebula rather than noise, so the de-tile step is sound on that path too — though a nebula has no ground truth, so it is corroboration, not proof. 🟡 **Exact colour fidelity is still open.** A hue-family comparison cannot see a gamma/sRGB curve error, a premultiplied-alpha mistake, or a small per-channel scale — all of which preserve hue. Settling those needs a flat, unlit, known-value surface rather than a lit hero model. ❔ The `~15 %` of T8aD variants noted elsewhere and the XPR2 **cubemap face ordering** are untouched by this.