DB/ItemDisplayInfo

From wowdev
(Redirected from ItemDisplayInfo.dbc)
Jump to navigation Jump to search

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, ≥ SL 2: Non-Mythic only; 3: Mythic}
27: {1: Default (No Geoset); 2: Helm 1; ≥ SL 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.

This section only applies to version Battle (8.3.0.32593).
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
};
This section only applies to versions ≤ PreVanilla (0.5.3.3368).
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];
};