DB/ItemDisplayInfo
Contains information about how items display.
If somebody wants to break the following two sections out into a real 'Geoset' article, go ahead. Just make sure to link M2, SKIN, ItemDisplayInfo, and CreatureDisplayInfoExtra pages to it.
Geoset Group Field Meaning
Each geosetGroup field is a modifier for a specific 'group' of geosets. For example, on a pair of gloves, geosetGroup[0] refers to the '401' set of geosets. If geosetGroup[0] was '2' on a pair of gloves, it means that you should enable mesh part ID '403' in the M2.
These vary based on the slot of the item.
Head: {geosetGroup[0] = 2700**, geosetGroup[1] = 2101 } Shoulder: {geosetGroup[0] = 2601} Shirt: {geosetGroup[0] = 801, geosetGroup[1] = 1001} Chest: {geosetGroup[0] = 801, geosetGroup[1] = 1001, geosetGroup[2] = 1301, geosetGroup[3] = 2201, geosetGroup[4] = 2801} Waist: {geosetGroup[0] = 1801} Pants: {geosetGroup[0] = 1101, geosetGroup[1] = 901, geosetGroup[2] = 1301} Boots: {geosetGroup[0] = 501, geosetGroup[1] = 2000*} Wrist: {} Gloves: {geosetGroup[0] = 401, geosetGroup[1] = 2301} Cape: {geosetGroup[0] = 1501} Tabard: {geosetGroup[0] = 1201} Weapon: {} Weapon: {} Shield: {} Ammo: {}
group values:
4: {0: No Geoset; 1: Default; 2: Thin; 3: Folded; 4: Thick} 5: {0: No Geoset; 1: Default; 2: High Boot; 3: Folded Boot; 4: Puffed; 5: Boot 4} 8: {1: Default (No Geoset); 2: Flared Sleeve; 3: Puffy Sleeve; 4: Panda Collar Shirt} 9: {1: Default (No Geoset); 2: Flared Pant Cuff; 3: Knickers; 4: Panda Pants} 10: {1: Default (No Geoset); 2: Doublet; 3: Body 2; 4: Body 3} 11: {1: Default (No Geoset); 2: Mini Skirt; 4: Heavy} 12: {1: Default (No Geoset); 2: Tabard} 13: {0: No Geoset; 1: Default; 2: Long Skirt} 15: {1: Default (No Geoset); 2: Ankle Length; 3: Knee Length; 4: Split Banner; 5: Tapered Waist; 6: Notched Back; 7: Guild Cloak; 8: Split (Long); 9: Tapered (Long); 10: Notched (Long)} 18: {0: No Geoset; 1: Default; 2: Heavy Belt; 3: Panda Cord Belt} 20: {0: No Geoset; 1: Default (Basic Shoes); 2: Toes} 21: {0: No Geoset; 1: Show Head} 22: {0: No Geoset; 1: Default; 2: Covered Torso} 23: {0: No Geoset; 1: Default} 26: {0: No Geoset; 1: Show Shoulders, ≥ 2: Non-Mythic only; 3: Mythic} 27: {1: Default (No Geoset); 2: Helm 1; ≥ 3: Non-Mythic only; 4: Mythic} 28: {0: No Geoset; 1: Default}
* This is not a typo. If you are not wearing boots, you get geoset 2001. If you are wearing boots and geosetGroup[1] for your boots is 0, you get 2002. If you are wearing boots and your geosetGroup[1] is non-zero, you get 2000 + geosetGroup[1].
** This is not a typo. If you are not wearing a helmet, you get geoset 2701. If you are wearing helmet and geosetGroup[0] for your helmet is 0, you get 2702. If you are wearing boots and your geosetGroup[0] is non-zero, you get 2700 + geosetGroup[0]. I'm not sure exactly how a value of '-1' is applied in this scenario, but some of the ItemDisplayInfo entries have this.
Item type | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
Head | 27 | 21 | ||||
Shoulder | 26 | |||||
Shirt | 8 | 10 | ||||
Chest | 8 | 10 | 13 | 22 | 28 | |
Waist | 18 | |||||
Pants | 11 | 9 | 13 | |||
Boots | 5 | 20 | ||||
Wrist | ||||||
Gloves | 4 | 23 | ||||
Cape | 15 | |||||
Tabard | 12 | |||||
Weapon (Offhand 1H Artifact) | ||||||
Weapon (Quiver Artifact) | ||||||
Shield | ||||||
Ammo | ||||||
Weapon |
Geoset Group | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
4 | No Geoset | Default | Thin | Folded | Thick | ||||||
5 | No Geoset | Default | High Boot | Folded Boot | Puffed | Boot 4 | |||||
8 | Default (No Geoset) | Flared Sleeve | Puffy Sleeve | Panda Collar Shirt | |||||||
9 | Default (No Geoset) | Flared Pant Cuff | Knickers | Panda Pants | |||||||
10 | Default (No Geoset) | Doublet | Body 2 | Body 3 | |||||||
11 | Default (No Geoset) | Mini Skirt | Heavy | ||||||||
12 | Default (No Geoset) | Tabard | |||||||||
13 | No Geoset | Default | Long Skirt | ||||||||
15 | Default (No Geoset) | Ankle Length | Knee Length | Split Banner | Tapered Waist | Notched Back | Guild Cloak | Split (Long) | Tapered (Long) | Notched (Long) | |
18 | No Geoset | Default | Heavy Belt | Panda Cord Belt | |||||||
20 | No Geoset | Default (Basic Shoes) | Toes | ||||||||
21 | No Geoset | Show Head | |||||||||
22 | No Geoset | Default | Covered Torso | ||||||||
23 | No Geoset | Default | |||||||||
26 | No Geoset | Show Shoulders | |||||||||
27 | Default (No Geoset) | Helm 1 | |||||||||
28 | No Geoset | Default |
Geoset Priorities
Unfortunately, since many of these are the same across items, you can have items (say, a Shirt and a Chestpiece) with different geosets. The game resolves this using a hardcoded priority that is confusing as hell to follow. I will attempt to simplify it here.
Gloves geosetGroup[0] (401 set) > Chest geosetGroup[0] (801 set) > Shirt geosetGroup[0] (801 set) Belt geosetGroup[0] (1801 set) > Tabard geosetGroup[0] (1201 set) Chest geosetGroup[2] (1301 set) > Pants geosetGroup[2] (1301 set) > Boots geosetGroup[0] (501 set) > Pants geosetGroup[1] (901 set)
As an example (to explain my notation above), if you had Gloves, a Shirt, and a Chestpiece, the game would first look at the gloves and check if your geosetGroup[0] was 0. If it was 0, then you would have normal, fitting gloves, and there would be no conflict with the 801 series geosets that the Chestpiece or Shirt might want to set, and then it would look at the Chestpiece for the same thing (and lastly the Shirt). If it wasn't 0, it would set your appropriate geoset (401 + geosetGroup[0]) and never even look at the geosetGroup[0] entry for your Shirt or Chestpiece (i.e. they would be totally irrelevant, the gloves would be dominant).
As of last edit, this list is nowhere near comprehensive (unlike the Fields Meaning list), so here is the full geoset enable/disable code that was decompiled from the WoD internal build (and subsequently prettified to make it almost readable): DB/ItemDisplayInfo/GeosRenderPrep
m_texture indices
enum { ArmUpperTexture, ArmLowerTexture, HandTexture, TorsoUpperTexture, TorsoLowerTexture, LegUpperTexture, LegLowerTexture, FootTexture, #if version > ???? // at least in 6.0.1, probably cata AccessoryTexture, #endif };
enum TEXCOMPONENT_SECTIONS { TCS_UPPERARM = 0x0, TCS_LOWERARM = 0x1, TCS_HAND = 0x2, TCS_UPPERHEAD = 0x3, TCS_LOWERHEAD = 0x4, TCS_UPPERTORSO = 0x5, TCS_LOWERTORSO = 0x6, TCS_LEGUPPER = 0x7, TCS_LEGLOWER = 0x8, TCS_FEET = 0x9, NUM_TEXCOMPONENT_SECTIONS = 0xA, TCS_INVALIDSECTION = 0xB, };
0.5.3.3368
struct ItemDisplayInfoRec { uint32_t m_ID; stringrefⁱ m_modelName[2]; stringrefⁱ m_modelTexture[2]; stringrefⁱ m_inventoryIcon; stringrefⁱ m_groundModel; uint32_t m_geosetGroup[4]; uint32_t m_flags; // 1 - Apply guild tabard texture on the char select screen (EmblazonedTabard), 2 - Hides underwear uint32_t m_spellVisualID; uint32_t m_groupSoundIndex; uint32_t m_itemSize; uint32_t m_helmetGeosetVisID; stringrefⁱ m_texture[8]; uint32_t m_itemVisual; };
1.12.1.5875
This sounds utterly wrong based on comparison to other versions.
struct ItemDisplayInfoRec { uint32_t m_ID; stringrefⁱ m_modelName[2]; stringrefⁱ m_modelTexture[2]; stringrefⁱ m_inventoryIcon; stringrefⁱ m_groundModel; uint32_t m_geosetGroup[3]; uint32_t m_spellVisualID; uint32_t m_groupSoundIndex; uint32_t m_helmetGeosetVisID[2]; stringrefⁱ m_texture[8]; uint32_t m_itemVisual; };
3.0.2.8905
Column | Field | Type | Notes |
---|---|---|---|
1 | ID | Integer | |
2 | LeftModel | String | For example at shoulders. Defining the pairs. |
3 | RightModel | String | |
4 | LeftModelTexture | String | And of course the textures, if not hardcoded. Replaces texture type 2. |
5 | RightModelTexture | String | |
6 | Icon1 | String | The icon displayed in the bags etc. |
7 | Icon2 | String | This is only used on Cro's apples which can be crushed. Sadly the icon then is a green instead of red apple. |
8 | geosetGroup | Integer | explanation, if non-0, add 1, add group. [item-slot=chest/shirt: wristbands (8)]; [item-slot=glove: glove (4)]; [item-slot=boots: boots (5)]; [item-slot=cape: cape (15)] |
9 | geosetGroup | Integer | [item-slot=pants: kneepads (9)] |
10 | geosetGroup | Integer | [item-type=chest.robe: 1 = has_robe]; [geoset trousers == 1: trousers (12)] |
11 | flags | Integer | &1 and &2 match 0.5.3, &4: event specific items i.e. Purple Dinner Suit requires Love is in the Airᵘ |
12 | spellVisualID | Integer | |
13 | groupSoundIndex | iRefID | |
14 | helmetGeosetVis | iRefID | For Male |
15 | helmetGeosetVis | iRefID | For Female |
16 | UpperArmTexture | String | |
17 | LowerArmTexture | String | |
18 | HandsTexture | String | |
19 | UpperTorsoTexture | String | |
20 | LowerTorsoTexture | String | |
21 | UpperLegTexture | String | |
22 | LowerLegTexture | String | |
23 | FootTexture | String | |
24 | itemVisual | iRefID | Static enchants. A few values have -1. Probably does not allow additional effects ? |
25 | particleColorID | Integer |
6.0.1.18179
struct ItemDisplayInfoRec { uint32_t m_ID; stringrefⁱ m_modelName[2]; stringrefⁱ m_modelTexture[2]; uint32_t m_geosetGroup[3]; uint32_t m_flags; foreign_keyⁱ<uint32_t, &SpellVisualRec::m_ID> m_spellVisualID; foreign_keyⁱ<uint32_t, &HelmetGeosetVisDataRec::m_ID> m_helmetGeosetVis[2]; stringrefⁱ m_texture[9]; foreign_keyⁱ<uint32_t, &ItemVisualsRec::m_ID> m_itemVisual; foreign_keyⁱ<uint32_t, &ParticleColorRec::m_ID> m_particleColorID; };
Flags
Value | Description | Client Code Reference |
---|---|---|
0x001 | EmblazonedTabard | |
0x002 | hides underwear, "should show TorsoUpper/LegUpper component texture" flagᵘ | CCharacterComponent::CreateRequestTU/LU
|
0x008 | is rare guild tabard | CCharacterComponent::GetGuildTabard*FileName
|
0x010 | is epic guild tabard | CCharacterComponent::GetGuildTabard*FileName
|
0x020 | flip model orientation | CUnitDisplay::UpdateRangedWeaponOrientation
|
0x040 | inherit some (helm/shoulder/belt) animation | CCharacterComponent::UpdateInheritAnim
|
0x080 | mirror shoulder animation | CCharacterComponent::ApplyShoulderItemMirroring
|
0x100 | mirror weapon model when put into offhand slot | CCharacterComponent::AddLink -> CM2Model::SetMirrored(pModel, pItem->Flags & 0x100)
|
0x200 | clips lower tabard geosetᵘ | CCharacterComponent::GeosRenderPrep
|
0x100000 | possibly "don't render this item"ᵘ Used by items "No Tabard" and "No Boots" |
6.0.3.19243
struct ItemDisplayInfoRec { uint32_t m_ID; stringrefⁱ m_modelName[2]; foreign_keyⁱ<uint32_t, &TextureFileDataRec::TextureItemID> m_modelTexture[2]; uint32_t m_geosetGroup[3]; uint32_t m_flags; foreign_keyⁱ<uint32_t, &SpellVisualRec::m_ID> m_spellVisualID; foreign_keyⁱ<uint32_t, &HelmetGeosetVisDataRec::m_ID> m_helmetGeosetVis[2]; foreign_keyⁱ<uint32_t, &TextureFileDataRec::m_TextureItemID> m_texture[9]; foreign_keyⁱ<uint32_t, &ItemVisualsRec::m_ID> m_itemVisual; foreign_keyⁱ<uint32_t, &ParticleColorRec::m_ID> m_particleColorID; };
7.0.1.21737
Textured Items now stored in ItemDisplayInfoMaterialRes
Column | Field | Type | Notes |
---|---|---|---|
1 | ModelID | Integer | |
2 | LeftModelID | iRefID | References ModelFileData which references FileDataComplete |
3 | RightModelID | iRefID | References ModelFileData which references FileDataComplete |
4 | LeftModelTextureID | iRefID | References TextureFileData which references FileDataComplete |
5 | RightModelTextureID | iRefID | References TextureFileData which references FileDataComplete |
6 | Geoset1 | Integer | |
7 | Geoset2 | Integer | |
8 | Geoset3 | Integer | |
9 | Unknown | Integer | |
10 | Unknown | Integer | |
11 | Unknown | Integer | |
12 | Flags | Integer | |
13 | SpellVisualRef? | Integer | May not be |
14 | HelmGeoset1 | Integer | |
15 | HelmGeoset2 | Integer | |
16 | ItemVisual | Integer | |
17 | ParticleID | Integer | |
18 | Unknown | Integer | |
19 | Unknown | Integer | |
20 | Unknown | Integer | |
21 | Unknown | Integer | |
22 | Unknown | Integer | |
23 | Unknown | Integer |
Synric 12th July 2016
8.0.1.25902
struct ItemDisplayInfoRec { // uint32_t m_ID; int32_t m_flags; uint32_t Unk1; int32_t m_itemVisual; int32_t m_particleColorID; uint32_t Unk2; // only 4 non zero value int32_t Unk3; // added in build 20810 int32_t Unk4; // added in build 21063 int32_t Unk5; // only 1 non zero value int32_t Unk6; // added in 21249 uint32_t Unk7; // added in 21249 uint32_t m_modelName[2]; uint32_t m_modelTexture[2]; uint32_t m_geosetGroup[4]; uint32_t Unk8[4]; // added in 7.0, probably some geoset groups as well, but has much less non zero values than in previous field uint32_t m_helmetGeosetVis[2]; };