diff --git a/CLAUDE.md b/CLAUDE.md index 6b958af4..aba39787 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -52,7 +52,9 @@ Toolchain is late-90s/early-2000s **Visual C++ 6.0** — no git, no modern build - **`Gameleap/`** — only **`mw4/`** is used (game-data source for resource packing). Former siblings (editor docs, drivers, batch tools, runtime env) were historical/utility → moved to `_UNUSED\`. - **`BTFrstrm/`** — FireStorm design data: mech stat workbooks (`MechInfo_5.04.xls`, `scriptaddmech.xls`). -- **`Finished HUDS from J&J/`** — per-mech HUD art (MFD + Radar) for ~15 'Mechs. +- **`Finished HUDS from J&J/`** — J&J external MFD/Radar source art, measurements, generated + comparison maps, and audit summary for 13 chassis. The usable mappings were installed on + 2026-08-07; see `MFD-RADAR-MAPPINGS.md` and the STEP 13 note below. ### Inside `Gameleap\code/` - `CoreTech/` — reusable engine layer (GameOS, gosFX, GOSScript, MLR renderer, Network, Stuff, Language, blade) + Tools. @@ -1252,6 +1254,69 @@ consistency check explicitly printed *"No duplicate device assignments"*. The do `HSH_EnterFullScreen2` was only visible because the log covers the whole start-up rather than a summary. **Instrument, don't infer.** +## ✅ STEP 13: External MFD/Radar damage mappings installed + art audited (2026-08-07) + +The coordinate and art workflow for the external MFD and Radar damage paper dolls is now fully +documented in **`MFD-RADAR-MAPPINGS.md`**. Start there; do not rediscover the image transforms, +tuple meanings, runtime offsets, legacy J&J formats, or BMP comparison rules from scratch. + +### Controlling source and semantics +- `Gameleap\code\CoreTech\Libraries\GameOS\coord.cpp` owns four positional 65x11 arrays: + `texuv2`/`offset2` = external MFD source rectangles/exploded origins; + `texuv3`/`offset3` = Radar source rectangles/exploded origins. Numeric Mech ID (array row) is + authoritative; comments are labels. Zone order is `LL,RL,LA,RA,RT,LT,CT,CTR,HD,S1,S2`. +- These are NOT the normal cockpit HUD's `texuv`/`offset` arrays in `huddamage.cpp`, and NOT the + small atlas images under `hsh\MFD`. +- Runtime loose art is `Gameleap\mw4\hsh\hud\.bmp` for MFD and + `Gameleap\mw4\hsh\radar\hud\.bmp` for Radar. Coordinate changes require an MW4.exe + rebuild because `DXRasterizer.cpp` includes `coord.cpp`; loose art changes do not require a + `.mw4` resource repack. + +### Installed mappings and reproducible audit (`97558039`) +- Added `Finished HUDS from J&J/generate_comparison_maps.py` (Pillow) plus 38 LFS-tracked review + PNGs and `COMPARISON-SUMMARY.md`. Red = current `coord.cpp`; green = supplied J&J geometry. +- Installed every complete supplied set: **19 displays across 13 chassis** (12 MFD + 7 Radar). + Final generator result: **19 exact, 0 different, 0 warnings, 7 missing opposite-display + inputs**. Missing inputs are Argus/Fafnir/Flea/Gladiator/Kodiak/Longbow Radar and Hellspawn MFD; + they were not guessed or changed. +- J&J data has two formats. Modern = 4-value unexploded source rectangle + 2-value exploded + origin. Legacy = 2-value source upper-left + 4-value exploded bounding box; derive source width/ + height from that exploded box. Combined files use section headings. All-zero tuples may appear + at either width and mean "absent zone." +- Normalized four unambiguous input typos without changing reviewed geometry: Behemoth MFD LT + `1742→174`, Behemoth Radar CT `202.242→202,242`, blank Behemoth Radar S2 `→0,0`, and Fafnir MFD + LL `162.326→162,326`. +- Preserve validated odd coordinates rather than rounding them. Radar divides full-size authored + values by two using integer arithmetic, so rounding changes final placement. + +### Behemoth II inheritance (`deafc2b0`) +- Behemoth II is Mech ID 12 and intentionally shares Behemoth ID 11's art and geometry. All four + ID 12 rows now exactly inherit ID 11. The generator asserts this relationship and fails on any + future divergence. There is **no Annihilator II** in the 65-ID roster; do not invent a row or + runtime stem for it. + +### Runtime-art result: no copies needed +- Decoded every supplied exploded 512x512 BMP and compared pixels against its canonical `hsh` + destination. All 19 supplied display assets were already pixel-identical. File hashes differed + because BMP mode/palette/header encoding differed (`P`/`L`/`RGB`), which is not an art change; + no `hsh` file was replaced. +- Separately compared `hud\behemothii.bmp` and `radar\hud\behemothii.bmp` to Behemoth's runtime + files; both existing Behemoth II files were already pixel-identical 512x512 grayscale images. +- Compare decoded pixels before copying. The exploded BMP is the runtime asset; unexploded BMPs + and full-color images are authoring references. Resolve canonical stems rather than trusting + supplied names (`assian2_*` is a typo; runtime is `assassin2.bmp`; preserve existing `Fafnir.bmp` + case on Linux). + +### Validation and remaining work +- Run: `python3 "Finished HUDS from J&J/generate_comparison_maps.py"`. Expected current output: + `Generated 38 maps for 19 display sets: 19 exact, 0 different` and + `Warnings: 0; missing display sets: 7`, followed by the Behemoth II inheritance assertion in + `COMPARISON-SUMMARY.md`. +- `coord.cpp` must remain CRLF-only and retain four 65-row arrays with 11 zones per row. +- **Still required:** rebuild Release/Profile on the Windows VC6 machine, deploy MW4.exe, and test + intact/damaged states on physical MFD and Radar displays. Linux validation proves source/data + equality and image alignment, not runtime hardware behavior. + ## Next steps (proposed) - [ ] (Parked, diagnostics-only, cannot affect a real pod) Two gaps found while testing `-tident` on a **single-monitor VM** (2026-08-05). Both only occur when one physical monitor is exposed as