The DAT reader expands RGB555/RGB565 channels by bit replication. The supplied pinned remake instead truncates channel * 255 / maxChannel for body, landscape and GUI conversion. Intermediate channel values differ, although black and fully saturated test colors agree.
Hand-encoded public-decoder reproduction:
- RGB565 word 0x2204 returns RGBA [33,65,33,255]; the reference returns [32,64,32,255].
- RGB555 word 0x1084 returns [33,33,33,255]; the reference returns [32,32,32,255].
Primary sources at paulwedeck/settlers-remake@6ad8c42:
- Color channel conversion
- DAT format dispatch
- SettlerTranslator, LandscapeTranslator and GuiTranslator all delegate to that format conversion. Source Git blobs and SHA256 identities are retained locally.
Acceptance:
- Correct RGB channel expansion in the owning DAT decoder, using independently worked expected values and the pinned reference contract. Preserve torso grayscale conversion, transparency, signed anchors, format selection, section alignment and allocation bounds.
- Add a failing byte-level regression for intermediate values in both formats, and cover every 5-bit and 6-bit channel level. Existing saturated-color examples alone cannot detect the mismatch.
- Rebuild affected original media through the maintained converter and retain updated source/pixel provenance. Refresh composed-frame expectations independently; do not simply accept newly generated snapshots as proof.
- Verify representative body, landscape and GUI pixels, existing compositions and all affected asset manifests. Preserve simulation rules, saves and replay checksums.
- Run unit/browser checks, types, lint, assets and build, then verify committed CI before closure.
This is consistency with the supplied reference decoder, not a measured Gold runtime color claim. Player palette selection and original map-slot mapping remain separate in #211; full content work remains in #20.