DB/LiquidType: Difference between revisions

From wowdev
Jump to navigation Jump to search
mNo edit summary
Line 83: Line 83:
   uint32_t m_ID;
   uint32_t m_ID;
   {{Template:Type|stringref}} m_name;
   {{Template:Type|stringref}} m_name;
   uint32_t m_flags;                  // &4: IsLiquidWaterWalkable
   uint32_t m_flags;                  // &4: IsLiquidWaterWalkable; &8: has water particulates; &0x10: particulate rendering related = -1 if not set
   uint32_t m_soundBank;
   uint32_t m_soundBank;
   {{Template:Type/foreign_key|table=SoundEntries}} m_soundID;
   {{Template:Type/foreign_key|table=SoundEntries}} m_soundID;
Line 101: Line 101:
   uint32_t m_int[4];
   uint32_t m_int[4];
  };
  };
== Particulate ==
The <tt>particleXxx</tt> fields are for water poop (<tt>"Textures/WaterPoop02.blp"</tt>). In the client, the <tt>Particulate::</tt> functions relate.
Valid <tt>Movement</tt> types are 0, 1, or 2 {{Sandbox/PrettyVersion|expansionlevel=6|build=6.0.1.18179}}.
<tt>Scale</tt> is divided by 36 on initialisation before calling <tt>Particulate::SetScale</tt>.
As of {{Sandbox/PrettyVersion|expansionlevel=6|build=6.0.1.18179}} there are 5 <tt>TexSlots</tt>, each referring to 8 sets of texture coordinates into the texture atlas. These are hardcoded (<tt>Particulate::s_tcSub</tt>, which then references <tt>Particulate::s_tc</tt>) in the client. The sets are
{| class="wikitable"
! <tt>TexSlot</tt> || tiles
|-
| 0 || 0,  1,  2,  3,  4,  5,  6,  7
|-
| 1 || 8,  9,  10, 11
|-
| 2 || 12
|-
| 3 || 13, 14, 15, 16
|-
| 4 || 17, 18, 19, 20, 21, 22, 23, 24
|}
where the tiles are not just linear but manually placed as per
[[File:Waterpoop02.png]]
Note that since this is client side hardcoded, this assignment may/will/has changed.
[[Category:DBC]][[Category:DBC_Vanilla]][[Category:DBC_BC]][[Category:DBC_WotLK]]
[[Category:DBC]][[Category:DBC_Vanilla]][[Category:DBC_BC]][[Category:DBC_WotLK]]
[[Category:DBC_WoD]][[Category:6.0.1.18179]]
[[Category:DBC_WoD]][[Category:6.0.1.18179]]

Revision as of 00:09, 12 August 2018

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

Build 5428 (Vanilla & BC), 1.12.1.5875

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-20 texture string[6] these are passed into the texture[] of the shaders.
21-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; &8: has water particulates; &0x10: particulate rendering related = -1 if not set
  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];
};

Particulate

The particleXxx fields are for water poop ("Textures/WaterPoop02.blp"). In the client, the Particulate:: functions relate.

Valid Movement types are 0, 1, or 2 WoD (6.0.1.18179).

Scale is divided by 36 on initialisation before calling Particulate::SetScale.

As of WoD (6.0.1.18179) there are 5 TexSlots, each referring to 8 sets of texture coordinates into the texture atlas. These are hardcoded (Particulate::s_tcSub, which then references Particulate::s_tc) in the client. The sets are

TexSlot tiles
0 0, 1, 2, 3, 4, 5, 6, 7
1 8, 9, 10, 11
2 12
3 13, 14, 15, 16
4 17, 18, 19, 20, 21, 22, 23, 24

where the tiles are not just linear but manually placed as per

Waterpoop02.png

Note that since this is client side hardcoded, this assignment may/will/has changed.