DB/SpellChainEffects
Jump to navigation
Jump to search
0.5.3.3368, 1.12.1.5875
struct SpellChainEffectsRec { uint32_t m_ID; float m_AvgSegLen; float m_Width; float m_NoiseScale; float m_TexCoordScale; uint32_t m_SegDuration; uint32_t m_SegDelay; stringrefⁱ m_Texture; };
3.3.5a.12340, 4.3.4.15595
struct SpellChainEffectsEntry // sizeof(0xB4) { m_ID; // +0x0, size 0x4, type 0 m_AvgSegLen; // +0x4, size 0x4, type 3 m_Width; // +0x8, size 0x4, type 3 m_NoiseScale; // +0xC, size 0x4, type 3 m_TexCoordScale; // +0x10, size 0x4, type 3 m_SegDuration; // +0x14, size 0x4, type 0 m_SegDelay; // +0x18, size 0x4, type 0 m_Texture; // +0x1C, size 0x4, type 2 m_Flags; // +0x20, size 0x4, type 0 m_JointCount; // +0x24, size 0x4, type 0 m_JointOffsetRadius; // +0x28, size 0x4, type 3 m_JointsPerMinorJoint; // +0x2C, size 0x4, type 0 m_MinorJointsPerMajorJoint; // +0x30, size 0x4, type 0 m_MinorJointScale; // +0x34, size 0x4, type 3 m_MajorJointScale; // +0x38, size 0x4, type 3 m_JointMoveSpeed; // +0x3C, size 0x4, type 3 m_JointSmoothness; // +0x40, size 0x4, type 3 m_MinDurationBetweenJointJumps; // +0x44, size 0x4, type 3 m_MaxDurationBetweenJointJumps; // +0x48, size 0x4, type 3 m_WaveHeight; // +0x4C, size 0x4, type 3 m_WaveFreq; // +0x50, size 0x4, type 3 m_WaveSpeed; // +0x54, size 0x4, type 3 m_MinWaveAngle; // +0x58, size 0x4, type 3 m_MaxWaveAngle; // +0x5C, size 0x4, type 3 m_MinWaveSpin; // +0x60, size 0x4, type 3 m_MaxWaveSpin; // +0x64, size 0x4, type 3 m_ArcHeight; // +0x68, size 0x4, type 3 m_MinArcAngle; // +0x6C, size 0x4, type 3 m_MaxArcAngle; // +0x70, size 0x4, type 3 m_MinArcSpin; // +0x74, size 0x4, type 3 m_MaxArcSpin; // +0x78, size 0x4, type 3 m_DelayBetweenEffects; // +0x7C, size 0x4, type 3 m_MinFlickerOnDuration; // +0x80, size 0x4, type 3 m_MaxFlickerOnDuration; // +0x84, size 0x4, type 3 m_MinFlickerOffDuration; // +0x88, size 0x4, type 3 m_MaxFlickerOffDuration; // +0x8C, size 0x4, type 3 m_PulseSpeed; // +0x90, size 0x4, type 3 m_PulseOnLength; // +0x94, size 0x4, type 3 m_PulseFadeLength; // +0x98, size 0x4, type 3 m_Alpha; // +0x9C, size 0x1, type 0 m_Red; // +0x9D, size 0x1, type 0 m_Green; // +0x9E, size 0x1, type 0 m_Blue; // +0x9F, size 0x1, type 0 m_BlendMode; // +0xA0, size 0x1, type 0 // there is three bytes of padding here! m_Combo; // +0xA4, size 0x4, type 2 m_RenderLayer; // +0xA8, size 0x4, type 0 m_TextureLength; // +0xAC, size 0x4, type 3 m_WavePhase; // +0xB0, size 0x4, type 3 };
m_Combo
m_Combo
is an encoded uint32_t array containing SpellChainEffectsRec::IDs, it is the predecessor of m_SpellChainEffectID
. This is stored in the DB as the byte representation of this array converted to a string.
The client parses this data by reading, decoding (CLightning::DecodeChainEffectsID
) and validating each uint32_t one at a time. Reading will cease if one of the following conditions occurs:
- All field data is read
- An invalid SpellChainEffectsRec::ID is found
- 12 SpellChainEffectsRec::IDs have been read (additional data is simply ignored)
Note: It appears any referenced records without a valid and accessible m_Texture
will be skipped
uint32_t CLightning::DecodeChainEffectsID(uint32_t value) { return ( ( value & 0xFEFEFEFE) | ((value & 0x08000000) >> 04) | ((value & 0x04000000) >> 11) | ((value & 0x40000000) >> 14) | ((value & 0x02000000) >> 18) | ((value & 0x20000000) >> 21) | ((value & 0x10000000) >> 28) ) & 0xFFFFFF; }
6.0.1.18179
struct SpellChainEffectsRec { uint32_t m_ID; float m_AvgSegLen; float m_Width; float m_NoiseScale; float m_TexCoordScale; uint32_t m_SegDuration; uint32_t m_SegDelay; uint32_t m_Flags; // &0x20: CHAINFXFLAG_PULSING_ENABLED uint32_t m_JointCount; float m_JointOffsetRadius; uint32_t m_JointsPerMinorJoint; uint32_t m_MinorJointsPerMajorJoint; float m_MinorJointScale; float m_MajorJointScale; float m_JointMoveSpeed; float m_JointSmoothness; float m_MinDurationBetweenJointJumps; float m_MaxDurationBetweenJointJumps; float m_WaveHeight; float m_WaveFreq; float m_WaveSpeed; float m_MinWaveAngle; float m_MaxWaveAngle; float m_MinWaveSpin; float m_MaxWaveSpin; float m_ArcHeight; float m_MinArcAngle; float m_MaxArcAngle; float m_MinArcSpin; float m_MaxArcSpin; float m_DelayBetweenEffects; float m_MinFlickerOnDuration; float m_MaxFlickerOnDuration; float m_MinFlickerOffDuration; float m_MaxFlickerOffDuration; float m_PulseSpeed; float m_PulseOnLength; float m_PulseFadeLength; uint8_t m_Alpha; uint8_t m_Red; uint8_t m_Green; uint8_t m_Blue; uint8_t m_BlendMode; uint8_t padding_0[3]; uint32_t m_RenderLayer; float m_TextureLength; float m_WavePhase; uint32_t m_SpellChainEffectID[11]; stringrefⁱ m_Texture; };