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:
arcattack
2026-07-17 09:50:23 -05:00
co-authored by Claude Fable 5
parent dda517b65c
commit e0474ff92a
10 changed files with 382 additions and 53 deletions
+5 -11
View File
@@ -247,17 +247,11 @@ LWord BT_GetSegmentFlags(Mech *owner)
return owner ? owner->simulationFlags : 0;
}
//===========================================================================//
// Legacy libDPL material-name callback.
//---------------------------------------------------------------------------//
// The dpl2d_ 2D display-list API (NewDisplayList/Begin/SetColor/Circle/
// PushMatrix/PopMatrix/MoveTo/End/Compile) was MOVED OUT of this file and
// reimplemented over Direct3D 9 in decomp/reconstructed/dpl2d.cpp (the HUD/
// reticle 2D layer). Only the 3D material-name-substitution hook -- which is
// part of the world renderer, not the 2D HUD -- remains stubbed here.
// TODO(bring-up): wire the material substitution table (FUN_00459eb8).
//===========================================================================//
void dpl_SetMaterialNameCallback(char *(*)(char *)) {}
// dpl_SetMaterialNameCallback is now REAL (per-pilot mech paint): it lives in
// engine/MUNGA_L4/L4VIDEO.cpp next to substituteMaterial, and the BGF loader
// (bgfload.cpp MaterialResolver::resolve) applies the installed callback to
// every material name -- the port analogue of the dpl board rewriting names
// at dpl_LoadObject time (FUN_0049664c / FUN_00459eb8).
//===========================================================================//
// BTL4VideoRenderer helper methods whose bodies were not reconstructed.