Per-pilot mech paint: wire the color/badge/patch substitution end-to-end
- Mech::resourceNameA/B/C -> real CString members (the binary's 16-byte CStringRepresentation; deep-copy bind from the MakeMessage = FUN_00402a98, implicit member dtors) + paint-name accessors - SetupMaterialSubstitutionList reads the real egg names ([paint] log); TearDown clears the callback first (FUN_004d11e8) - dpl_SetMaterialNameCallback is real now (L4VIDEO registry); bgfload MaterialResolver::resolve() applies it to every material name -- the port analogue of the dpl board rewriting names at load - MP_BHMC.EGG: color=Red -> Crimson (vehicletable has no Red; binary Fail()ed) Verified live 2-node MP: crimson MadCat with hip hazard stripes + yellow VGL leg emblems; white Blackhawk + emblems; replicants painted on both nodes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
dda517b65c
commit
e0474ff92a
@@ -644,10 +644,10 @@ register. ⚠ The audit also flags the damage-economy item as SELF-CONTRADICTOR
|
||||
LIVENESS audit (does a live call path reach each reconstructed fn?) would catch this class.
|
||||
|
||||
## Rendering follow-ups (non-blocking)
|
||||
- **Per-pilot mech PAINT (color/badge/patch) — art ships, port never engages it** (2026-07-17 audit;
|
||||
full mechanics + fix path in [[rendering]] §Per-pilot mech PAINT). Wire egg color/badge/patch into
|
||||
`SetupMaterialSubstitutionList`, apply `substituteMaterial` in `bgfload resolve()`, per-variant
|
||||
mesh cache. This is the "missing warning stripes / coloration" report.
|
||||
- ~~Per-pilot mech PAINT (color/badge/patch)~~ — **DONE 2026-07-17, verified live** (crimson MadCat +
|
||||
yellow VGL emblems + hip hazard stripes). Mechanics + the vehicletable color/badge/patch name
|
||||
tables in [[rendering]] §Per-pilot mech PAINT. Residual nit: eggs saying `color=Red` mean
|
||||
**Crimson** (table has no Red; the binary Fail()ed on it, the port warns + drops).
|
||||
- **.PFX effect-layer polish (deferred 2026-07-08; the layer itself is LIVE + verified).** The
|
||||
reconstructed BT particle layer (L4VIDEO.cpp, see its banner) renders the authentic .PFX content
|
||||
(fire + smoke, premultiplied blend, impact-frame oriented — weapon hits AND damage bands via
|
||||
|
||||
+16
-7
@@ -126,13 +126,22 @@ never engaged by the port. Mechanics (all [T1] from the BMF/BGF/vehicletable con
|
||||
top-left), shown through the paintable-zone materials and tinted by the pilot color. `EMBLEM0.BMF`
|
||||
carries `lgoN_<patchcolor>_dz_ld/rdleg` materials (8 patch tints incl. yellow .89,.73,0) over
|
||||
`LGO.BSL` slices 0-5 (slice 5 = VGL winged logo).
|
||||
- PORT GAP: `SetupMaterialSubstitutionList` (btl4vid.cpp:2094) feeds NULL egg names (Mech's
|
||||
resourceNameA/B/C not yet safely readable), and `substituteMaterial` (L4VIDEO.cpp:2565) is consumed
|
||||
only by the legacy .X loader (L4D3D.cpp:151) — NOT by `bgfload`'s `MaterialResolver::resolve`. So
|
||||
every mech renders base untinted paint + the hardwired `lgo6` (VGL) emblem. Verified live 2026-07-17:
|
||||
MP MadCat renders white/gray, no tint/emblem/stripes. FIX PATH: (a) wire real egg color/badge/patch
|
||||
into the substitution list; (b) apply the substitution in `resolve()` (BGF path); (c) per-variant
|
||||
mesh caching (BgfData is cached per filename — two pilots' colors must not share a baked mesh). [T2]
|
||||
- **WIRED 2026-07-17 (same-day fix), verified live**: MP MadCat renders crimson with hip hazard
|
||||
stripes + yellow VGL leg emblems; Blackhawk white + emblems; replicants painted on both nodes.
|
||||
The reconstruction: (a) `Mech::resourceNameA/B/C` are real `CString` members (the binary's exact
|
||||
16-byte `CStringRepresentation` {size,len,text@+8,refs@+0xc}; ctor = part_012.c:9841-71, deep-copy
|
||||
bind from the MakeMessage = `CString::operator=(const char*)` == FUN_00402a98 @10427-41, implicit
|
||||
member dtors = 11388-403) with paint-name accessors; (b) `SetupMaterialSubstitutionList` reads them
|
||||
(real egg names; `[paint]` log line); (c) `dpl_SetMaterialNameCallback` is REAL now
|
||||
(L4VIDEO.cpp registry, cleared first in TearDown as FUN_004d11e8 does) and
|
||||
`bgfload MaterialResolver::resolve()` runs every name through `dpl_ApplyMaterialNameCallback`;
|
||||
no mesh-cache issue (LoadObject/LoadBgfFile don't cache — every load resolves fresh). [T2]
|
||||
- DEVIATION (documented, btl4vid.cpp): on a vehicletable miss the binary Fail()ed ("Exiting"
|
||||
@BTL4VID.CPP:0xbeb); the port warns + drops that placeholder (RP analogue). Real case: dev eggs
|
||||
ship `color=Red` but the `[color]` table only has **Crimson** — MP_BHMC.EGG fixed to Crimson;
|
||||
LAST.EGG pilot-2 still says Red (unused slot). The 7 valid egg colors:
|
||||
Black/Brown/Crimson/Green/Grey/Tan/White; badges Davion/Kurita/Liao/Marik/None/Steiner/VGL;
|
||||
patches Black/Blue/Green/Grey/Red/Violet/White/Yellow. [T1]
|
||||
|
||||
## The OLD-STYLE SPECIALFX layer (the weapon-impact action) — RECONSTRUCTED 2026-07-12 (firmware-decoded)
|
||||
The per-weapon impact visuals are fully AUTHORED in `content/BTDPL.INI` `[effects_to_load]`:
|
||||
|
||||
Reference in New Issue
Block a user