DB/ItemDisplayInfo: Difference between revisions

From wowdev
Jump to navigation Jump to search
mNo edit summary
No edit summary
Line 66: Line 66:
  struct ItemDisplayInfoRec {
  struct ItemDisplayInfoRec {
   uint32_t m_ID;
   uint32_t m_ID;
   stringref m_modelName[2];
   {{Template:Type|stringref}} m_modelName[2];
   stringref m_modelTexture[2];
   {{Template:Type|stringref}} m_modelTexture[2];
   uint32_t m_geosetGroup[3];
   uint32_t m_geosetGroup[3];
   uint32_t m_flags;
   uint32_t m_flags;
   {{Template:Type/foreign_key|table=SpellVisual}} m_spellVisualID;
   {{Template:Type/foreign_key|table=SpellVisual}} m_spellVisualID;
   {{Template:Type/foreign_key|table=HelmetGeosetVisData}} m_helmetGeosetVis[2];
   {{Template:Type/foreign_key|table=HelmetGeosetVisData}} m_helmetGeosetVis[2];
   stringref m_texture[9];
   {{Template:Type|stringref}} m_texture[9];
   {{Template:Type/foreign_key|table=ItemVisuals}} m_itemVisual;
   {{Template:Type/foreign_key|table=ItemVisuals}} m_itemVisual;
   {{Template:Type/foreign_key|table=ParticleColor}} m_particleColorID;
   {{Template:Type/foreign_key|table=ParticleColor}} m_particleColorID;
Line 80: Line 80:
  struct ItemDisplayInfoRec {
  struct ItemDisplayInfoRec {
   uint32_t m_ID;
   uint32_t m_ID;
   stringref m_modelName[2];
   {{Template:Type|stringref}} m_modelName[2];
   {{Template:Type/foreign_key|table=TextureFileData|column=TextureItemID}} m_modelTexture[2];
   {{Template:Type/foreign_key|table=TextureFileData|column=TextureItemID}} m_modelTexture[2];
   uint32_t m_geosetGroup[3];
   uint32_t m_geosetGroup[3];

Revision as of 11:38, 23 February 2016

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: {}
Shoulder: {}
Cloak: {geosetGroup[0] = 1501}
Chest: {geosetGroup[0] = 801, geosetGroup[1] = 1001, geosetGroup[2] = 1301}
Shirt: {geosetGroup[0] = 801, geosetGroup[1] = 1001}
Tabard: {geosetGroup[0] = 1201}
Gloves: {geosetGroup[0] = 401}
Belt: {geosetGroup[0] = 1801}
Pants: {geosetGroup[0] = 1101, geosetGroup[1] = 901, geosetGroup[2] = 1301}
Boots: {geosetGroup[0] = 501, geosetGroup[1] = 2000*}
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}

* 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].

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
};

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;
};

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;
};

3.0.2.8905

Column Field Type Notes
1 ID Integer
2 LeftModel String For example at shoulders. Defineing 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
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