DB/LiquidType

From wowdev
Jump to: navigation, search

Properties of water. Added (build: 5428) to account for the damage caused by the Slime in Naxxramas.

Build 5428 (Vanilla & BC)

Originally, this was a very small record with only basic information. The type of the liquid was in LiquidType - these values were rewritten in Wrath, where they were reordered and Ocean got its own value.

The spellID points to a Spell record which is applied to any entity entering the liquid. Initially, only the Naxxramas entry had this set.

struct LiquidTypeRec {
  uint32_t m_ID;
  stringref m_name;
  LiquidType m_LiquidType;                   
  foreign_key<uint32_t, &SpellRec::m_ID> m_spellID;
};
enum LiquidType : uint32_t {
  Magma = 0,
  Slime = 2,
  Water = 3,
  Ocean = Water
};

Build 12340 and up

Note that type 8 is used for debugging, and invalid entries might fall back to that.

Offset Name Type Comment
0 Id int
cata minDetail int
cata loDetailID int
cata hiDetailID int
1 Name string
cata flags int
cata soundBank int
2 flags int Water: 1, 2, 4, 8; Magma: 8, 16, 32, 64; Slime: 2, 64, 256; WMO Ocean: 1, 2, 4, 8, 512
3 Type int 0: Water, 1: Ocean, 2: Magma, 3: Slime
4 SoundEntriesID int SoundEntries.dbc irefid
5 SpellID int Spell.dbc irefID
6 maxDarkenDepth float only for slime and magma
7 fogDarkenIntensity float 7,8,9: Only oceans got values here!
8 ambDarkenIntensity float
9 dirDarkenIntensity float
10 lightID int Only Slime (6) and Magma (7)
11 particleScale float 0: Slime, 1: Water / Ocean, 4: Magma
12 particleMovement int
13 particleTexSlots int
14 LiquidMaterialID int (LiquidMaterial.dbc irefid?) this defines the shaders used. (1: "*sLiquidWater", 2: "*sLiquidMagma", 3: "*sLiquidProcWater%s" where %s is an appendix that is currently always "")
15-19 texture string[6] these are passed into the texture[] of the shaders.
20-22 color int[2]
23-40 floats float[18] most likely these are attributes for the shaders. Water: (23, TextureTilesPerBlock),(24, Rotation) Magma: (23, AnimationX),(24, AnimationY)
41-44 ints int[4] if (!material.LVF & ~2) or material.LVF == 4), then [0]: 1 → ocean, 0 → river depth coord table; 1 for oceans, 0 or 1250. only set for water / ocean and only for the procedual in all 3 fields. else only the first.

6.0.1.18179

struct LiquidTypeRec {
  uint32_t m_ID;
  stringref m_name;
  uint32_t m_flags;                   // &4: IsLiquidWaterWalkable
  uint32_t m_soundBank;
  foreign_key<uint32_t, &SoundEntriesRec::m_ID> m_soundID;
  foreign_key<uint32_t, &SpellRec::m_ID> m_spellID;
  float m_maxDarkenDepth;
  float m_fogDarkenIntensity;
  float m_ambDarkenIntensity;
  float m_dirDarkenIntensity;
  foreign_key<uint32_t, &LightRec::m_ID> m_lightID;
  float m_particleScale;
  uint32_t m_particleMovement;
  uint32_t m_particleTexSlots;
  foreign_key<uint32_t, &LiquidMaterialRec::m_ID> m_materialID;
  stringref m_texture[6];            // implementation detail in Liquid::CMaterialSettings limits them to 128 bytes!
  uint32_t m_color[2];
  float m_float[18];
  uint32_t m_int[4];
};