WWF: Difference between revisions

From wowdev
Jump to navigation Jump to search
Line 79: Line 79:
   WWFParticulateBlendMode blendMode;
   WWFParticulateBlendMode blendMode;
   #if {{Template:Sandbox/VersionRange|min_expansionlevel=8|min_build=8.0.1.26433}}
   #if {{Template:Sandbox/VersionRange|min_expansionlevel=8|min_build=8.0.1.26433}}
   char useSkyFogColor;
   char useSkyFogColor;           // Use Sky Fog Color As Diffuse
   #endif
   #endif
   WWFArgb color;
   WWFArgb color;

Revision as of 22:30, 13 April 2018

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;
  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
  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
}