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.
Problem
M2_CharacterGeosetVisibleinr_m2.c:2361hardcodes which section IDs are visible per geoset group:Meanwhile,
M2_AddDisplayInfoToOutfitalready readsgeoset_group[3]fromItemDisplayInfo.dbcand stores them inm2CharacterOutfit_t.geoset_group[]. ButM2_CharacterGeosetVisiblenever 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:
outfit->geoset_group[0]is 2, show section 802 instead of default 801outfit->geoset_group[2]is 3, show section 1303 instead of 1301The DBC provides the variant offset; the code should apply it rather than returning a hardcoded constant.
Scope
This only affects the renderer —
M2_CharacterGeosetVisibleneeds 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.