WWF

From wowdev
Jump to navigation Jump to search
This section only applies to versions ≥ Battle.

WWF files are used to control particles in the particulate weather system that was introduced in Battle. Unlike most other files, the WWF format uses a binary header with JSON data. This has the advantage that all field names are documented within the data itself. Additionally, the client contains meta-style information which includes the human-readable variant of these names.

Particulate based weather is enabled for DB/Weather records with a m_type of 5 and/or a m_effectType of 4, that either join to the DB/WeatherXParticulate table or have their particulateFileDataID set. Both joins reference the required WWF files by fileDataId.

Header

char unk_0x0[4]; // always 0 filled
uint32_t magic;  // fnv1a(type_as_string), i.e. for "WWFParticulateGroup", 0x932c64b4
char data[];

Data

C-style representation of the JSON data. All enum values are stored as their string representation.

Note: Only the implemented parts of the WWF specification are documented.

WWFParticulateGroup

typedef C2Vector WWFVec2;
typedef C3Vector WWFVec3;
typedef C3Vector WWFGraphNodeVec3;
typedef CImVector WWFArgb;

struct WWFParticulateGroup
{
  int32_t placeHolder;
  WWFParticulateGeoType geometryType;
  WWFParticulateRenderMode renderMode;
  int32_t particleCount;
  float strength;                      // Default Particulate Strength
  char enableEmissionGraph;            // Enable Particulate Strength Graph
  WWFGraphNodeVec3 graphNodes[];       // Particulate Strength Graph
  char occlusion;                      // Enable Occlusion Testing
  float occlusionFadeDistance;
  float occlusionIgnoreChance;
  char enableGroundParticulate;
 #if ≥ Battle (8.0.1.26567)
  WWFParticulateGeoType groundGeometryType;
  WWFParticulateRenderMode groundRenderMode;
  uint32_t groundTextureID;            // fileDataId
  uint32_t groundSheetWidth;           // Ground Cell X Count
  uint32_t groundSheetHeight           // Ground Cell Y Count
  uint32_t groundAnimationCount;
  float groundAnimationSpeed;
  char groundEnableAngularTransition;  // Ground Enable Texture Angle Fading
  float groundDecayTime;
  WWFVec2 groundParticulateSize;
  WWFVec2 groundParticulateSizeVariance;
 #endif
  char depthFading;                    // Enable Depth Buffer Fading
  float depthFadeDistance;
  char useLookDirectionOffset;
  float groupEdgeFadeDistance;
  float cameraNearFade;
  float cameraFarFade;
  char useForceDirection;
  WWFVec3 velocityMean;
  WWFVec3 forceDirection;
  float rotation;
  float tilt;
  float speed;
  WWFVec3 velocityVariance;
  char enableCompute;                  // Enable Dynamic Rendering
  char enableWindEffects;
 #if ≥ Battle (8.0.1.26433)
  WWFVec2 massRange;
 #endif
  char useWandering;
  float wanderSpeed;
  WWFVec2 wanderAmount;
  WWFParticulateConstraintType constraint; // Volume Constraint
  char inclusiveRestraint;             // Use Inclusive Constraint
  float groupSize;                     // Particulate Group Size
  WWFVec3 particulateSize;
  WWFVec2 particulateSizeVariance;
  char randomRotation;                 // Randomize Initial Particle Orientation
  char useParticleRotation;
  float rotationSpeedMean;             // Particle Rotation Speed
  float rotationSpeedVariance;         // Particle Rotation Speed Variance
  char randomizeRotationDirection;
  float useParticleFading;
  float particleFadeTotalTime;         // Fade Loop Length
  float particleFadeTimeBegin;         // Fade Start Time
  float particleFadeTimeEnd;           // Fade End Time
  float particleFadeTimeVariance;
  char enableHeightFading;
  WWFParticulateHeightFadeMode heightFadeMode;
  float heightFadeStartDistance;       // Height Fade Max Height
  float heightFadeVariance;
  float heightFadeTransitionDistance;
  char enableDeltaCulling;
  float deltaCullingMax;
  WWFParticulateBlendMode blendMode;
 #if ≥ Battle (8.0.1.26433)
  char useSkyFogColor;                 // Use Sky Fog Color As Diffuse
 #endif
 #if ≥ Battle (8.0.1.26567)
  char useAmbientLighting;
 #endif
  WWFArgb color;
  uint32_t textureID;                  // fileDataId
  char useAnimation;
  int32_t sheetWidth;                  // Cell X Count
  int32_t sheetHeight;                 // Cell Y Count
  int32_t animationCount;
  float animationSpeed;
  char enableAngularTransition;        // Enable Texture Angle Fading
}

enum WWFParticulateGeoType
{
  Quads,
  Triangles
}

enum WWFParticulateRenderMode
{
  VelocityBillboard,
  CameraBillboard
}

enum WWFParticulateConstraintType
{
  Center,
  Nearest,
  None
}

enum WWFParticulateHeightFadeMode
{
  Flat,
  Relative,
  RelativeFollow
}

enum WWFParticulateBlendMode
{
  Additive,
  Blended
}