Skip to content

hide hair geoset when helmet is equipped #107

Description

@corepunch

Problem

When a helmet is equipped, the character's hair geoset remains visible and clips through the helmet model. In the real WoW client, helmets hide the hair by replacing the hair geoset with a bald cap variant.

How it works in WoW

  1. Helmets are inventory type 1 (ItemDisplayInfo.dbc flags field)
  2. When a helmet is equipped, the hair geoset (group 1 = sections 101+) should be replaced with a bald scalp geoset (section 1)
  3. The helmet itself is a separate attached model rendered via entity.attached_model

Current state

M2_CharacterGeosetVisible handles geoset groups 4/5/7/8/9/10/11/12/13/15 but has no case for group 1 (hair). The hair geoset is always shown regardless of equipment.

M2_ApplyEquipmentItems only processes 4 body slots (upper/lower body, hands, feet) — it doesn't handle helmet inventory type at all.

What should happen

  1. M2_ApplyEquipmentItems should check if any equipped item has inventory type 1 (helmet) via ItemDisplayInfo.dbc flags
  2. When a helmet is detected, set a flag in m2CharacterOutfit_t (e.g. flags |= 0x1 for "has helmet")
  3. M2_CharacterGeosetVisible should check this flag for group 1 sections: when set, only show section 1 (bald cap) instead of the hair style geoset

Scope

Renderer only. The network packing (entityState_t) already carries enough equipment data for the character menu to detect helmets. No protocol changes needed.

Reference

This is how the real WoW 1.12 client handles it: helmet visibility is driven by CharSections.dbc section 0, variant 0, with the bald cap as a fallback when the helmet flag is set.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestrendererRendering subsystemworld-of-warcraftWorld of Warcraft specific features

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions