WWF
WWF files are used to control particles in the particulate weather system that was introduced in . 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.
While standalone WWF files exist (documented below), the WWF specification itself is much larger and is used client-wide e.g. mpv.wdt. As such, changes to WWFParticulateGroup correlate with PVMI size changes and usually incur a mpv.wdt version change.
Header
uint32_t type; // 0: json; 4: binary 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 standalone WWF file structure is documented below.
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 ≥ (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 ≥ (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 ≥ (8.0.1.26433) char useSkyFogColor; // Use Sky Fog Color As Diffuse #endif #if ≥ (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 }