Fix NPC head/facial hair rendering and add helmet model loading

- Add race/gender suffix to helmet M2 paths (e.g. _HuM for Human Male)
  so helmet models actually load from MPQ archives
- Include bald scalp mesh (submeshId=1) for hairStyle=0 to cover the
  hole at the crown of the body base mesh
- Fix CharacterFacialHairStyles.dbc column indices (no ID column, so
  cols 0/1/2 for race/sex/variation instead of 1/2/3)
- Convert facial hair DBC values to proper submeshIds by adding group
  base (100+, 200+, 300+)
- Hide hair geosets under helmets and replace with bald scalp cap
This commit is contained in:
Kelsi 2026-02-06 01:36:06 -08:00
parent 5623f9ea6c
commit 4bb2828b21
2 changed files with 67 additions and 45 deletions

View file

@ -214,10 +214,10 @@ void CharacterCreateScreen::updateAppearanceRanges() {
auto facialDbc = assetManager_->loadDBC("CharacterFacialHairStyles.dbc");
if (facialDbc) {
for (uint32_t r = 0; r < facialDbc->getRecordCount(); r++) {
uint32_t raceId = facialDbc->getUInt32(r, 1);
uint32_t sexId = facialDbc->getUInt32(r, 2);
uint32_t raceId = facialDbc->getUInt32(r, 0);
uint32_t sexId = facialDbc->getUInt32(r, 1);
if (raceId != targetRaceId || sexId != targetSexId) continue;
uint32_t variation = facialDbc->getUInt32(r, 3);
uint32_t variation = facialDbc->getUInt32(r, 2);
facialMax = std::max(facialMax, static_cast<int>(variation));
}
}