DB/LiquidType: Difference between revisions
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 (6.0.1.18179).
Scale is divided by 36 on initialisation before calling Particulate::SetScale.
As of (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
Note that since this is client side hardcoded, this assignment may/will/has changed.