Skip to content

character geoset visibility should use DBC-driven outfit data #106

Description

@corepunch

Problem

M2_CharacterGeosetVisible in r_m2.c:2361 hardcodes which section IDs are visible per geoset group:

switch (section_id / 100) {
    case 4:  return section_id == 401;  // always bare forearms
    case 5:  return section_id == 501;  // always bare shins
    case 8:  return section_id == 802;  // always bare wrists
    case 13: return section_id == 1301; // always bare legs
    ...
}

Meanwhile, M2_AddDisplayInfoToOutfit already reads geoset_group[3] from ItemDisplayInfo.dbc and stores them in m2CharacterOutfit_t.geoset_group[]. But M2_CharacterGeosetVisible never reads these values — it ignores what equipment is actually worn.

What should happen

Each geoset group (4=gloves, 5=boots, 8=sleeves, 9=kneepads, 13=pants, 15=cloak) should select the correct section_id variant based on the outfit's geoset group value from the DBC. For example:

  • Group 8 (sleeves): if outfit->geoset_group[0] is 2, show section 802 instead of default 801
  • Group 13 (pants): if outfit->geoset_group[2] is 3, show section 1303 instead of 1301

The DBC provides the variant offset; the code should apply it rather than returning a hardcoded constant.

Scope

This only affects the renderer — M2_CharacterGeosetVisible needs to consult the outfit geoset groups when deciding which section_id variant to show. The network packing (entityState_t) and menu UI code are unaffected.

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