WWF: Difference between revisions

From wowdev
Jump to navigation Jump to search
m (Reverted edits by Schlumpf (talk) to last revision by Barncastle)
mNo edit summary
Line 1: Line 1:
{{Template:SectionBox/VersionRange|min_expansionlevel=8}}
{{Template:SectionBox/VersionRange|min_expansionlevel=8}}
[[WWF]] files are used to control particles in the particulate weather system that was introduced in {{Template:Sandbox/PrettyVersion|expansionlevel=8}}.
[[WWF]] files are used to control particles in the particulate weather system that was introduced in {{Template:Sandbox/PrettyVersion|expansionlevel=8}}.
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 also contains meta-style information which includes the human-readable variant of these names.
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 <tt>m_type</tt> of 5 that either join to the [[DB/WeatherXParticulate]] table or have their <tt>particulateFileDataID</tt> set. Both joins reference the required [[WWF]] files by fileDataId.
Particulate based weather is enabled for [[DB/Weather]] records with a <tt>m_type</tt> of 5 {{Template:Unverified| and/or }} a <tt>m_effectType</tt> of 4, that either join to the [[DB/WeatherXParticulate]] table or have their <tt>particulateFileDataID</tt> set. Both joins reference the required [[WWF]] files by fileDataId.


=Header=
=Header=

Revision as of 13:29, 26 March 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[4] unk1;   // 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, as of Battle (8.0.1.26287), 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;
  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;
  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
}