DB/ItemDisplayInfo: Difference between revisions

From wowdev
Jump to navigation Jump to search
Line 96: Line 96:
   {{Template:Type|stringref}} m_groundModel;
   {{Template:Type|stringref}} m_groundModel;
   uint32_t m_geosetGroup[4];
   uint32_t m_geosetGroup[4];
   uint32_t m_flags;  // 1 - Apply guild tabard texture on the char select screen, 2 - Hides underwear
   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_spellVisualID;
   uint32_t m_groupSoundIndex;
   uint32_t m_groupSoundIndex;
Line 104: Line 104:
   uint32_t m_itemVisual;
   uint32_t m_itemVisual;
  };
  };
==1.12.1.5875==
==1.12.1.5875==
This sounds utterly wrong based on comparison to other versions.
This sounds utterly wrong based on comparison to other versions.

Revision as of 11:43, 11 April 2018

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}
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}
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}
26: {0: No Geoset; 1: Show Shoulders}
27: {1: Default (No Geoset); 2: Helm 1}

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

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

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

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

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