FS507D asset recovery, ConLobby V5.0.7Df promotion, mechlab New-Mech crash fix

FS507D_20161015 release analysis wrap-up (drop itself is gitignored; art-review
folder kept local for review):
- Recovered the only assets our tree lacked: 13 hsh HUD/radar/mech bmps and the
  two 5.07D lobby decals (decal_46/47.tga, extracted from release props.mw4 via
  a ported gos_LZDecompress).
- ResourceImagePool.cpp: missing-texture placeholder is now LAB_ONLY (editor
  keeps degraded mode); Release restores the original fatal STOP. Release +
  Profile rebuilt, 0 errors.

Console script reconciled:
- ConLobby.script.new ("BattleTech Console V5.0.7Df", newest revision anywhere)
  promoted to Content\ShellScripts\ConLobby.script; .new removed; stale loose
  deploy copy removed. Verified in-game (console title shows V5.0.7Df).
- Corrected CLAUDE.md: the release never "renamed" the console to
  ComputerPlayer.script -- the resource packer stores script contents under
  alphabetically skewed entry names (runtime resolves the same pairing).
  Packer quirks documented (stale entry carry-forward on incremental builds,
  name/content skew in directory sweeps).

Mechlab bug fix (first FireStorm bug hunt):
- New-Mech dialog showed blank rows for Wolfhound/Zeus and crashed (KERNELBASE
  read AV) when creating a Zeus. Root cause: newmech in chassis.script created
  its Type droplist without setting $$m_listBoxSize$$, so capacity defaulted to
  60 while 65 chassis were written in -- OOB script-array writes. Fixed by
  sizing the list from $$m_chassisCount$$. Latent stock-MW4 bug armed when the
  FireStorm roster passed 60 chassis. Verified: Zeus variant creates cleanly.

props.mw4 fully repacked (decals + promoted console + mechlab fix, junk
.new/.org entries gone); game deploy refreshed at MW4\. Gitignore: FS507D drop
and player-created MW4\Resource\Variants.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-02 13:04:45 -05:00
co-authored by Claude Fable 5
parent 2cfb14ab98
commit 2f17631081
108 changed files with 32230 additions and 43498 deletions
+101
View File
@@ -285,6 +285,22 @@ Key facts:
source assets under `Content\`. Output: `resource\*.mw4` + `*.dep` (incremental via `.dep`
timestamps + content version). Needs the full ~4.6 GB `Content\` source tree.
### ⚠️ Resource packer quirks (discovered 2026-07-02, ConLobby promotion)
1. **Incremental rebuilds carry forward stale entries.** A package rebuild re-packs only
entries the `.dep` flags as changed and copies the rest — including entries whose SOURCE
FILES WERE DELETED (they are never dropped) — from the previous `.mw4`. Per-entry FILETIME
in the directory = when that entry was last (re)packed, not the source mtime. **To pick up
deletions/renames, force a full repack: delete `resource\<pkg>.mw4` + `<pkg>.dep`, then run
`build-env\build-resources.ps1`.** Also: `Copy-Item` preserves the source mtime, so a
promoted/copied file can look OLDER than the package and be skipped — touch it (or full-repack).
2. **Script entry names are alphabetically skewed vs their contents** (in `directory=` sweeps,
e.g. props' `content\shellscripts`): e.g. entry `ConLobby.script` holds CreatePilotModal-like
text, entry `ConLobbyMission.script` holds `GUNStatus.script` (byte-identical), and our 140 KB
console (source `ConLobby.script`) lands under entry `ComputerPlayer.script` — IDENTICAL skew
in the 2016 release props.mw4, which shipped and worked. The runtime evidently resolves names
through the same pairing, so packages are self-consistent in-game; only extraction tools see
"swapped" names. Don't "fix" packed name mismatches by editing sources — verify in-game.
## ✅ STEP 6: Editor (`MW4GameEd2`) builds — DONE (with a 1-line source fix)
- Target `MW4GameEd2 - Win32 Release` -> **`rel.bin\MW4Ed2.exe`** (3,973,120 bytes, 0 errors).
MFC app (`Use_MFC 6`); needs `mfc42.dll` (present in deployment) at runtime. Profile config
@@ -518,6 +534,91 @@ etc.), default loadout in `.subsystems`; 2D HUD/MFD bmps load loose from `hsh\`;
needs MW4.exe rebuild + resource repack + redeploy. `Finished HUDS from J&J\` = pending MFD/
radar art for ~13 chassis.
## 📋 Reference: FS507D_20161015 release drop analyzed (2026-07-01)
`FS507D_20161015\` (repo root, **gitignored** — not part of the mirror) = a later shipped
LAN-center release of this game (postinstall.bat maps per-machine 10.0.0.x IPs; Mumble refs).
**2026-07-02: release contents DELETED (user holds the zip archive); only
`FS507D_20161015\art-review\` remains** — 800 side-by-side pairs (`*.RELEASE.*` vs `*.OURS.*`,
flattened paths, `manifest.tsv`) of art whose CONTENT differs from our sources, awaiting the
user's review: `DIMS-DIFFER\` 451 (structurally different, e.g. 3state button strips grew
110×105→110×180, btfconsole.tga 800×600 vs 112×112), `PIXELS-DIFFER\` 280 (same format,
repainted), `HSH\` 69 (loose hsh bmps beyond pure depth-reduction; 91 8bpp-reductions of our
24bpp sources excluded). ALL packaged art diffs are shell-UI art (`shellscripts\graphics\**`,
`mechbay\graphics\**`, lobby skins/decals/mechicons) — zero world/mech texture diffs; the
release = a 5.07D UI-art refresh + the ComputerPlayer console script. (Extraction note:
6,469 map/mission-package texture entries are 4-byte cross-package reference stubs, not art.)
Findings vs our tree:
- **Binaries are a 2016 rebuild of (essentially) our source.** Release `MW4.exe` linked
2016-10-04, Launcher/MissionLang/ScriptStrings/ctcls 2014, but `mw4pro.exe` is the ORIGINAL
2009-06-14 build, byte-size-identical to our rebuild. `__TIMESTAMP__` banner in MW4.exe:
ours `Sun Jun 14 01:45:57 2009` vs release `02:45:57` = same MWApplication.cpp within a DST
hour. Full strings-diff of the exes: all meaningful strings present on BOTH sides (incl.
`BiggieSizeIt`/`RuleBook`, which our `VehicleInterface.cpp` has). **No evidence of missing
source.**
- **✅ Degraded-mode placeholder patch made LAB-only (2026-07-02).** Our rebuilt game exe used
to contain the `01AACA1.tga` placeholder (Adept links into the game); release was clean.
`ResourceImagePool.cpp` now: `#ifdef LAB_ONLY` placeholder (editor keeps degraded mode),
`#else` original `STOP(("Texture %s could not be found!"))`. Release+Profile rebuilt (0 err),
verified placeholder gone from `rel.bin\MW4.exe` / present in `MW4pro.exe`; both deployed
to `C:\VWE\firestorm\MW4`.
- **`hsh\` mech art synced from release (2026-07-02).** Release hsh was NEWER than our dev
tree and matches OUR SOURCE'S names (`huddamage.cpp` wants `hud\assassin2/behemoth/
behemothii`...). Copied the 13 missing files into `Gameleap\mw4\hsh` + deploy (hud/radar
assassin2+behemoth+behemothii, Mechs behemoth/black hawk/longbow/solitare/victor, decals
46/47); `Mechs\black hawk.bmp`+`solitare.bmp` upgraded to our 24bpp twins (blackhawk/
solitaire renames). Did NOT overwrite the ~158 existing bmps that "differ": release ships
8bpp palette reductions of our 24bpp sources (deploy-mw4.ps1 reduces at deploy anyway).
- **resource .mw4 detail (via `.dep`/package name-set parsing, 2026-07-02):** entry SETS are
identical for core/textures/all 26 maps/all 29 missions (maps byte-identical ±2B; mission
payload drift of ±0.1-33KB = ABL/notation re-serialization, not content). All 29 `.nfo`
byte-identical. **Only real packing deltas, both in props.mw4:** (1) release packs
`shellscripts\graphics\multiplayer\lobbydecals\decal_46.tga`+`decal_47.tga` — ✅ RECOVERED
2026-07-02: decoded the #VBD container (dir records = [len][name][FILETIME][origSize]
[storedSize][offset]; payload base = dword@0x0C) + ported `gos_LZDecompress` (FileIO.cpp:1693
— LZW, 9→12-bit LSB-first codes, 256=clear/257=EOF/dict@258) and extracted both TGAs into
`Content\ShellScripts\graphics\multiplayer\lobbydecals\` (32×32 32bpp, verified: exact RLE/
size/footer + rendered; 46=radiation emblem, 47="331" crest). Next resource repack picks
them up and closes the props.mw4 gap;
(2) OUR props.mw4 sweeps in junk `ConLobby.script.new`/`.script.org` backup files from
`Content\ShellScripts\` (harmless but shippable-junk; note `.script.new` carries MSL ADD
MECH markers — review before deleting/moving). Release ships user missions s1s1-s1s3
(.nfo+.tga only, no .mw4 — campaign coop redirects per missionnames.tbl).
- **✅ FULL extraction of every release .mw4/.dep done (2026-07-02)** →
`FS507D_20161015\extracted\<pkg>\...` (~1.3 GB, 60+ packages, 0 decode failures; extractor =
the ported gos_LZDecompress + #VBD directory parser; raw-vs-LZ rule per Database.cpp:451:
stored==orig → raw).
- **✅ Completeness audit (2026-07-02): NOTHING else in the release is absent from our tree.**
Mapped all ~42k extracted package entries (23,649 unique base source paths after stripping
`{GameModel}`/`{hint}`/`[page]` qualifiers) against the dev tree by path + whole-tree
filename index: the only release-assets we lacked were the 13 hsh bmps + 2 lobby decal
TGAs (recovered) and the JPP console-script revision (superseded by our ConLobby.script.new).
Residuals: mission root-page pseudo-entries (not files) + 34 `{CampaignInterfacePlug}`
records = compiled campaign-screen metadata whose `.Campaign` sources we have. (Caveat:
audit is by existence, not content equality — release re-saved some shared files, e.g.
decal_00.tga pixels differ.)
- **The FireStorm console script in the release sits under the package entry name
`shellscripts\ComputerPlayer.script`** (138,990 B, title "BattleTech Console V5.07.D") — the
release's `ConLobby.script` ENTRY holds a 6,551 B copy of an old CreatePilotModal.
**2026-07-02 CORRECTION: nobody renamed anything — this is the packer's name↔content skew**
(see "Resource packer quirks" below): the console SOURCE file in the 5.07D tree was
ConLobby.script all along, same as ours; the packer stores script contents under alphabetically
shifted entry names, and the runtime reproduces the same pairing, so it works in-game and only
looks swapped to extraction tools. **Console script genealogy (oldest→newest):**
dev `ConLobby.script` ("V5.07", 138,544 B) → release console ("V5.07.D",
+29 lines: JPP's decal-dropdown feature adding decals 46=BKG/47=FSA, MAX_DECAL_COUNT 17→20)
→ dev `ConLobby.script.new` ("V5.0.7Df", 140,532 B, changelog "06/19/18 AVB": includes the
JPP decal work PLUS ROWFIELD_TYPE_*/MAIL_SLOTTYPE_* slot framework + tab stops). **Our
`.new` is the newest console revision anywhere** — the release only added what .new already
contains. ✅ **RECONCILED 2026-07-02:** `.new` promoted to `Content\ShellScripts\ConLobby.script`
(140,532 B), `.new` file removed, stale loose deploy copy `MW4\Content\shellscripts\ConLobby.script`
removed (release also ships no loose copy), props.mw4 fully repacked + redeployed. Verified
in-game: console title shows "BattleTech Console V5.0.7Df".
- **Release-only config:** `options-game.ini` enables `hardwaremixing=true`, `BiggieSizeIt=1`,
`RuleBook=1` (our inis don't); ctcl inis use 10.0.0.x (ours 200.0.0.x) + `c:\games\MW4` paths.
- **Release drops all Movies** (~310 MB) and the loose `content\shellscripts\conlobby.script`
(both deploys load shell scripts from props.mw4; ours ships that one loose 140 KB script —
check whether a loose script shadows the packed one).
## 📋 Reference: adding a new map/mission (documented 2026-07-01)
Full workflow in **`ADDING-A-MAP.md`** (repo root). Key facts: unlike mechs, NO code changes /
positional arrays / exe rebuild — maps+missions are discovered by enumeration. Map (terrain) =