-
Notifications
You must be signed in to change notification settings - Fork 71
0xEA5118B0
#Swarm Binary Effects Resource Tree
##Overview These internal files are known as Swarm Binaries, because they are read and rendered by the Swarm VFX System originally developed by Andrew Willmott. Variants of this system are used not only The Sims 3, but also The Sims 2, The Sims 4, SimCity 4, SimCity 5, and Spore. Swarm Binaries are compiled from text files written in Arg Script language. More info can be found in presentations here:
http://www.andrewwillmott.com/talks/swarm-procedural-content
The internal format for Swarm Binaries was derived primarily by analyzing internal code for parsing them, hidden within The Sims 3 main executable itself.
The field names were initially guessed at by playing around with their values and observing the changes to the effect in The Sims 3 itself, by using an effect playing debug object, and later by using a dedicated Effect Player which uses the game's engine API included with The Sims 3 Create-A-World Tool. The actual field names were finally found as symbols for Swarm Binary structures within PDB files included with leaked dev versions of SimCity 5, and correlated to corresponding fields in The Sims 3's Swarm Binary format, which is why some of the fields are still unknown.
Format Facts:
- It is primarily Big Endian, but groups of floats denoting vectors are swizzled to Little Endian.
- Curves are used to determine how the effects change over time.
- There are often "vary" and "offset" fields corresponding to this curves that are used to adjust the values using the following formula:
random(1 - vary, 1 + vary) * current_value + offset
- The format can be easily expanded by increasing the version of a component type and/or adding entirely new components.
##Format All data is in Big Endian order unless otherwise noted(most floats). This spec is very primitive and needs work.
WORD Version Effect Sections Resource Sections VisualEffect Section VisualEffect IDs VisualEffect Names
###Effect Sections ####Format
--Repeat until BlockType 0xFFFF // Block List WORD BlockType WORD Version DWORD Count --repeat(Count) --Insert block data(depending on type)
####Blocks
BlockType | |
---|---|
0x0001 | Particle Effect |
0x0002 | Metaparticle Effect |
0x0003 | Decal Effect |
0x0004 | Sequence Effect |
0x0005 | Sound Effect |
0x0006 | Shake Effect |
0x0007 | Camera Effect |
0x0008 | Model Effect |
0x0009 | Screen Effect |
0x000A | Unused |
0x000B | Game Effect |
0x000C | Fast Particle Effect |
0x000D | Distribute Effect |
0x000E | Ribbon Effect |
0x000F | Sprite Effect |
####Particle Effect
######Format
DWORD Flags FLOAT[2] Particle Lifetime //Little Endian FLOAT Preroll Time FLOAT[2] Emit Delay //Little Endian FLOAT[2] Emit Retrigger //Little Endian FLOAT[3] Emit Direction Bounding Box Minimum //Little Endian FLOAT[3] Emit Direction Bounding Box Maximum //Little Endian FLOAT[2] Emit Speed //Little Endian FLOAT[3] Emit Volume Bounding Box Minimum //Little Endian FLOAT[3] Emit Volume Bounding Box Maximum //Little Endian FLOAT Emit Torus Width // Emit Rate Curve (Particles/Sim-Minute) DWORD Count FLOAT FLOAT Emit Rate Curve Time WORD Emit Rate Curve Cycles FLOAT Emit Rate Speed Scale // Size Curve DWORD Count FLOAT FLOAT Size Vary // Aspect Ratio Curve (1 is normal) DWORD Count FLOAT FLOAT Aspect Ratio Vary FLOAT Rotation Vary FLOAT Rotation Offset // Rotation Curve (1 = one clockwise rotation = 360 degrees) DWORD Count FLOAT // Alpha Curve (0 - 1 = transparent - opaque) DWORD Count FLOAT FLOAT Alpha Vary // 0 - 1 = transparent - opaque // Color Curve DWORD Count FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 //Color Vary FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 //Resource reference block QWORD IID64 of a an image(DDS), model(VPXY), or material(see Material Section below) BYTE Format BYTE DrawMode if ((DrawMode & 0x80) == 0x80) DWORD ??? if ((DrawMode & 0x40) == 0x40) BYTE ??? // Draw Flags if (Version >= 6) WORD else BYTE BYTE Buffer WORD Layer FLOAT Sort Offset QWORD Second IID64 //0xFFFFFFFFFFFFFFFF BYTE Physics Type BYTE Override Set BYTE Tile Count U BYTE Tile Count V BYTE Align Mode FLOAT Frame Speed BYTE Frame Start BYTE Frame Count BYTE Frame Random FLOAT[3] Directional Forces Sum //Little Endian FLOAT Wind Strength FLOAT Gravity Strength FLOAT Radial Force FLOAT[3] Radial Force Location //Little Endian FLOAT Drag FLOAT Velocity Stretch FLOAT Screw Rate // Wiggles DWORD Count FLOAT Time Rate FLOAT[3] Rate Direction //Little Endian FLOAT[3] Wiggle Direction //Little Endian BYTE Screen Bloom Alpha Rate //0x00 BYTE Screen Bloom Alpha Base //0xFF BYTE Screen Bloom Size Rate //0x00 BYTE Screen Bloom Size Base; //0xFF // Loop Box Color Curve DWORD Count FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 // Loop Box Alpha Curve DWORD Count FLOAT // 0 - 1 = transparent - opaque // Surfaces DWORD Count DWORD Flags //0x3FFF mask? QWORD IID64 of a surface map(see Material Section below)? FLOAT Bounce //Should be DWORD? FLOAT Slide //Should be DWORD? FLOAT Collision Radius //Should be DWORD? FLOAT Death Probability //Should be DWORD? DWORD Pin Offset ZSTRING ZSTRING // Surface Points DWORD Count FLOAT[3] //Little Endian FLOAT Map Bounce FLOAT Map Repulse Height FLOAT Map Repulse Strength FLOAT Map Repulse Scout Distance FLOAT Map Repulse Vertical FLOAT Map Repulse Kill Height // -1000000000.0 FLOAT Probability Death // 0.0 FLOAT[2] Altitude Range //Little Endian (-10000.0, 10000.0) QWORD Force Map IID64 //0xFFFFFFFFFFFFFFFF QWORD Emit Rate Map IID64 //0xFFFFFFFFFFFFFFFF QWORD Emit Color Map IID64 //0xFFFFFFFFFFFFFFFF // Random Walk FLOAT[2] Time //Little Endian FLOAT[2] Strength //Little Endian FLOAT Turn Range FLOAT Turn Offset FLOAT Mix // Turn Offset Curve DWORD Count FLOAT BYTE Walk Loop Type FLOAT[3] Attractor Origin //Little Endian // Attractor Strength Curve DWORD Count FLOAT FLOAT Range FLOAT Kill Range // Path Points DWORD Count FLOAT[3] Position //Little Endian FLOAT[3] Velocity //Little Endian FLOAT Time if (Version >= 2) FLOAT[3] //Little Endian DWORD Count FLOAT[3] //Little Endian if (Version >= 3) BYTE if (Version >= 4) FLOAT if (Version >= 5) FLOAT[2] //Little Endian BYTE if (Version >= 6) FLOAT[2] //Little Endian else FLOAT if (Version >= 7) FLOAT[2] //Little Endian DWORD DWORD BYTE bool1 //0x00 or 0xFF if (bool1 == 0xFF) FLOAT[3] //Little Endian if (Version >= 6) FLOAT[2] //Little Endian else FLOAT if (Version >= 7) FLOAT[2] //Little Endian DWORD DWORD if (Version >= 6) BYTE bool2 //0x00 or 0xFF if (bool2 == 0xFF) DWORD BYTE BYTE BYTE
####Metaparticle Effect #####Overview This type takes an existing effect and modifies it #####Format
QWORD Flags FLOAT[2] Particle Lifetime //Little Endian FLOAT Preroll Time FLOAT[2] Emit Delay //Little Endian FLOAT[2] Emit Retrigger //Little Endian FLOAT[3] Emit Direction Bounding Box Minimum //Little Endian FLOAT[3] Emit Direction Bounding Box Maximum //Little Endian FLOAT[2] Emit Speed //Little Endian FLOAT[3] Emit Volume Bounding Box Minimum //Little Endian FLOAT[3] Emit Volume Bounding Box Maximum //Little Endian FLOAT Emit Torus Width // Emit Rate Curve (Particles/Sim-Minute) DWORD Count FLOAT FLOAT Emit Rate Curve Time DWORD Emit Rate Curve Cycles; Should be FLOAT? FLOAT Emit Rate Speed Scale // Size Curve DWORD Count FLOAT FLOAT Size Vary // Pitch Curve DWORD Count FLOAT // Roll Curve DWORD Count FLOAT // Heading (Yaw) Curve DWORD Count FLOAT FLOAT Pitch Vary FLOAT Roll Vary FLOAT Heading (Yaw) Vary FLOAT Pitch Offset FLOAT Roll Offset FLOAT Heading (Yaw) Offset // Color Curve DWORD Count FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 // Color Vary FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 // Alpha Curve (0 - 1 = transparent - opaque) DWORD Count FLOAT FLOAT Alpha Vary ZSTRING Base Effect //See Effect Names below ZSTRING Death Effect //See Effect Names below BYTE Align Mode FLOAT[3] Directional Forces Sum //Little Endian FLOAT[3] Global Forces Sum //Little Endian FLOAT Wind Strength FLOAT Gravity Strength FLOAT Radial Force FLOAT[3] Radial Force Location //Little Endian FLOAT Drag FLOAT Screw Rate // Wiggles DWORD Count FLOAT Time Rate FLOAT[3] Rate Direction //Little Endian FLOAT[3] Wiggle Direction //Little Endian BYTE Screen Bloom Alpha Rate //0x00 BYTE Screen Bloom Alpha Base //0xFF BYTE Screen Bloom Size Rate //0x00 BYTE Screen Bloom Size Base //0xFF // Loop Box Color Curve DWORD Count FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 // Loop Box Alpha Curve DWORD Count FLOAT // 0 - 1 = transparent - opaque // Surfaces DWORD Count DWORD Flags //0x3FFF mask? QWORD IID64 of a surface map(see Material Section below)? FLOAT Bounce //Should be DWORD? FLOAT Slide //Should be DWORD? FLOAT Collision Radius //Should be DWORD? FLOAT Death Probability //Should be DWORD? DWORD Pin Offset ZSTRING ZSTRING // Surface Points DWORD Count FLOAT[3] //Little Endian FLOAT Map Bounce FLOAT Map Repulse Height FLOAT Map Repulse Strength FLOAT Map Repulse Scout Distance FLOAT Map Repulse Vertical FLOAT Map Repulse Kill Height // -1000000000.0 FLOAT Probability Death // 0.0 FLOAT[2] Altitude Range //Little Endian (-10000.0, 10000.0) QWORD Force Map IID64 //0xFFFFFFFFFFFFFFFF QWORD Emit Rate Map IID64 //0xFFFFFFFFFFFFFFFF QWORD Emit Color Map IID64 //0xFFFFFFFFFFFFFFFF // Random Walk 1 FLOAT[2] Time //Little Endian FLOAT[2] Strength //Little Endian FLOAT Turn Range FLOAT Turn Offset FLOAT Mix // Turn Offset Curve DWORD Count FLOAT BYTE Walk Loop Type // Random Walk 2 FLOAT[2] Time //Little Endian FLOAT[2] Strength //Little Endian FLOAT Turn Range FLOAT Turn Offset FLOAT Mix // Turn Offset Curve DWORD Count FLOAT BYTE Walk Loop Type FLOAT[3] Random Walk Preferred Direction //Little Endian FLOAT Align Damping FLOAT Bank Amount FLOAT Bank Damping FLOAT[3] Attractor Origin //Little Endian // Attractor Strength Curve DWORD Count FLOAT FLOAT Range FLOAT Kill Range // Path Points DWORD Count FLOAT[3] Position //Little Endian FLOAT[3] Velocity //Little Endian FLOAT Time FLOAT Tractor Reset Speed
####Decal Effect
#####Overview
This is mostly used for things like the build tool UI tools(i.e. the terrain tool circle).
#####Format
DWORD Flags; 0x7F mask? QWORD IID64 of a DDS Resource BYTE DWORD BYTE DWORD FLOAT Lifetime // Rotation Curve DWORD Count1 FLOAT // Size Curve DWORD Count2 FLOAT // Alpha Curve DWORD Count3 FLOAT // Color Curve DWORD Count4 FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 // Aspect Ratio Curve DWORD Count5 FLOAT FLOAT Alpha Vary FLOAT Size Vary FLOAT Rotation Vary FLOAT Texture Repeat FLOAT[2] Texture Offset //Little Endian QWORD Emit Color Map IID64 //0xFFFFFFFFFFFFFFFF if (Version >= 2) BYTE
####Sequence Effect #####Overivew Combines effect compilations so they play out sequentially #####Format
DWORD Count1 FLOAT[2] Time Range //Little Endian ZSTRING Effect Name //See Effect Handles below DWORD Flags //0xF mask?
####Sound Effect #####Overview Plays a sound #####Format
DWORD Flags //0xF mask? QWORD IID64 of an Audio Tuner FLOAT Location Update Delta FLOAT Play Time FLOAT Volume if (Version >= 2) BYTE
####Shake Effect #####Format
FLOAT Lifetime FLOAT Fade Time // Strength Curve DWORD Count1 FLOAT // Frequency Curve DWORD Count2 FLOAT FLOAT Aspect Ratio BYTE Base Table Type FLOAT Falloff
####Camera Effect #####Format
DWORD Flags //0x3FF mask? WORD View Flags FLOAT Lifetime // Heading (Yaw) Curve DWORD Count1 FLOAT // Pitch Curve DWORD Count2 FLOAT // Roll Curve DWORD Count3 FLOAT // Distance Curve DWORD Count4 FLOAT // FOV Curve DWORD Count5 FLOAT // Near Clip Curve DWORD Count6 FLOAT // Far Clip Curve DWORD Count7 FLOAT QWORD Camera ID WORD Cubemap Resource
####Model Effect #####Format
DWORD Flags //0x3 mask? QWORD Resource IID64 FLOAT Size // Color FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 FLOAT Alpha // 0 - 1 = transparent - opaque // Animation Curves DWORD Count FLOAT[2] Length Range //Little Endian // Curve DWORD Count FLOAT DWORD Curve Vary DWORD Speed Scale BYTE Channel ID BYTE Mode QWORD Material IID64; usually 0xFFFFFFFFFFFFFFFF BYTE Override Set
####Screen Effect #####Format
BYTE Mode DWORD Flags //0x3 mask? // Color Curve DWORD Count FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 // Strength Curve DWORD Count FLOAT // Distance Curve DWORD Count FLOAT FLOAT Lifetime FLOAT Delay FLOAT Falloff FLOAT Distance Base QWORD Texture IID64 // Filters DWORD Count BYTE Type BYTE Destination QWORD Source // Parameters DWORD Count BYTE // Temporary Filter Buffers DWORD Count FLOAT Screen Ratio //Should be DWORD? FLOAT Size //should be DWORD? // Float Parameters DWORD Count FLOAT // Vector 3 Parameters DWORD Count FLOAT[3] //Little Endian // Vector 2 Parameters DWORD Count FLOAT[2] //Little Endian // Resource ID Parameters DWORD Count QWORD
####Game Effect #####Overview It appears as though this effect can be used to send OS style messages, perhaps for manipulating the mouse for tutorials or something. There are currently no examples in The Sims 3 to be sure. #####Format
DWORD Flags //0x3FF mask? DWORD Message ID DWORD[4] Message Data ZSTRING Message String FLOAT Life
####FastParticle Effect #####Overview It appears as though this effect is a simplified version of the Particle Effect for faster computations? There are currently no examples in The Sims 3 to be sure. #####Format
DWORD Flags //0x1FFF mask? FLOAT[2] Particle Lifetime //Little Endian FLOAT Preroll Time FLOAT[2] Emit Delay //Little Endian FLOAT[2] Emit Retrigger //Little Endian FLOAT[3] Emit Direction Bounding Box Minimum //Little Endian FLOAT[3] Emit Direction Bounding Box Maximum //Little Endian FLOAT[2] Emit Speed //Little Endian FLOAT[3] Emit Volume Bounding Box Minimum //Little Endian FLOAT[3] Emit Volume Bounding Box Maximum //Little Endian // Emit Rate Curve (Particles/Sim-Minute) DWORD Count FLOAT FLOAT Emit Rate Curve Time WORD Emit Rate Curve Cycles FLOAT Emit Rate Speed Scale // Size Curve DWORD Count FLOAT // Color Curve DWORD Count FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 // Alpha Curve (0 - 1 = transparent - opaque) DWORD Count FLOAT //Resource reference block QWORD IID64 of a an image(DDS), model(VPXY), or material(see Material Section below) BYTE Format BYTE DrawMode if ((DrawMode & 0x80) == 0x80) DWORD if ((DrawMode & 0x40) == 0x40) BYTE // Draw Flags if (Version >= 6) WORD else BYTE BYTE Buffer WORD Layer FLOAT Sort Offset QWORD Second IID64 //0xFFFFFFFFFFFFFFFF BYTE Align Mode FLOAT[3] Directional Forces Sum //Little Endian FLOAT Wind Strength FLOAT Gravity Strength FLOAT Radial Force FLOAT[3] Radial Force Location //Little Endian FLOAT Drag
####Distribute Effect #####Overview Note: there is only one of these #####Format
DWORD Flags //0x3FFF mask? DWORD Density ZSTRING ComponentName DWORD Start BYTE Source Type FLOAT Source Size // Pre-Transform WORD Flags FLOAT Scale FLOAT[9] Orientation //Little Endian FLOAT[3] Position //Little Endian // Size Curve DWORD Count FLOAT DWORD Size Vary // Pitch Curve DWORD Count FLOAT // Roll Curve DWORD Count FLOAT // Heading (Yaw) Curve DWORD Count FLOAT FLOAT Pitch Vary FLOAT Roll Vary FLOAT Heading (Yaw) Vary FLOAT Pitch Offset FLOAT Roll Offset FLOAT Heading (Yaw) Offset // Color Curve DWORD Count FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 // Color Vary FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 // Alpha Curve DWORD Count FLOAT FLOAT Alpha Vary // Surfaces DWORD Count DWORD Flags //0x3FFF mask? QWORD IID64 of a surface map(see Material Section below)? FLOAT Bounce //Should be DWORD? FLOAT Slide //Should be DWORD? FLOAT Collision Radius //Should be DWORD? FLOAT Death Probability //Should be DWORD? DWORD Pin Offset ZSTRING ZSTRING //Surface Points DWORD Count FLOAT[3] //Little Endian QWORD Emit Map IID64 //0xFFFFFFFFFFFFFFFF QWORD Color Map IID64 //0xFFFFFFFFFFFFFFFF QWORD Pin Map IID64 //0xFFFFFFFFFFFFFFFF FLOAT[2] Altitude Range //Little Endian //Resource reference block QWORD IID64 //0xFFFFFFFFFFFFFFFF BYTE Format BYTE DrawMode if ((DrawMode & 0x80) == 0x80) DWORD if ((DrawMode & 0x40) == 0x40) BYTE // Draw Flags if (Version >= 6) WORD else BYTE BYTE Buffer WORD Layer FLOAT Sort Offset QWORD Second IID64 //0xFFFFFFFFFFFFFFFF BYTE Override Set DWORD Message ID
####Ribbon Effect #####Overview Examples of this effect first appear in the Create A Pet Demo #####Format
DWORD Flags //0x3FFF mask? FLOAT[2] Lifetime // Offset Curve DWORD Count FLOAT // Width Curve DWORD Count FLOAT FLOAT Taper FLOAT Fade FLOAT Alpha Decay // Color Curve DWORD Count FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 // Alpha Curve DWORD Count FLOAT // Length Color Curve DWORD Count FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 // Length Alpha Curve DWORD Count FLOAT // Edge Color Curve DWORD Count FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 // Edge Alpha Curve DWORD Count FLOAT // Start Edge Alpha Curve DWORD Count FLOAT // End Edge Alpha Curve DWORD Count FLOAT DWORD Segment Count FLOAT Segment Length //Resource reference block QWORD IID64 of a an image(DDS), model(VPXY), or material(see Material Section below) BYTE Format BYTE DrawMode if ((DrawMode & 0x80) == 0x80) DWORD if ((DrawMode & 0x40) == 0x40) BYTE // Draw Flags if (Version >= 6) WORD else BYTE BYTE Buffer WORD Layer FLOAT Sort Offset QWORD Second IID64 //0xFFFFFFFFFFFFFFFF DWORD Tile UV //0xFFFFFFFF FLOAT Slip Curve Speed FLOAT Slip UV Speed if (Version >= 2) FLOAT UV Repeat FLOAT[3] Directional Forces Sum //Little Endian FLOAT Wind Strength FLOAT Gravity Strength QWORD Emit Color Map IID64 //0xFFFFFFFFFFFFFFFF QWORD Force Map IID64 //0xFFFFFFFFFFFFFFFF FLOAT Map Repulse Strength
####Sprite Effect #####Overview Examples of this effect first appear in the Create A Pet Demo #####Format
DWORD DWORD DWORD FLOAT WORD DWORD Count FLOAT DWORD Count FLOAT Red //Little Endian; 0 - 1 FLOAT Green //Little Endian; 0 - 1 FLOAT Blue //Little Endian; 0 - 1 DWORD Count FLOAT FLOAT FLOAT FLOAT FLOAT[3] //Little Endian FLOAT[3] //Little Endian FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT //Resource reference block QWORD IID64 of a an image(DDS), model(VPXY), or material(see Material Section below) BYTE Format BYTE DrawMode if ((DrawMode & 0x80) == 0x80) DWORD if ((DrawMode & 0x40) == 0x40) BYTE // Draw Flags if (Version >= 6) WORD else BYTE BYTE Buffer WORD Layer FLOAT Sort Offset QWORD Second IID64 //0xFFFFFFFFFFFFFFFF BYTE
###Resource Sections ####Format
--Repeat until ResourceType 0xFFFF // Block List WORD ResourceType WORD Version DWORD Count --repeat(Count) --Insert resource data(depending on type)
####Resources
ID | Name
----- | ----- 0x0000 | #Map 0x0001 | #Material
#####Map ######Overview It appears to apply operators to a map image. There are currently no examples in The Sims 3 to be sure. ######Format
QWORD Map IID64 DWORD Flags //0x3FF mask? BYTE Map Type QWORD Image IID64 //Bounds FLOAT Left FLOAT Top FLOAT Right FLOAT Bottom BYTE Channel BYTE Op Kind QWORD[4] Op Arg Map IID64s FLOAT[4] Op Arg Value 1 //Little Endian FLOAT[4] Op Arg Value 2 //Little Endian FLOAT[4] Op Arg Value 3 //Little Endian FLOAT[4] Op Arg Value 4 //Little Endian
#####Material ######Overview References shaders from "Shaders_Win32.precomp", making them available to the particle effects in the previous section and overriding some parameters. ######Format
QWORD Hashed name QWORD Shader DWORD Count1 QWORD Property Id BYTE dataType switch(dataType) case 00: FLOAT case 01: DWORD case 02: BYTE // Boolean 0x00 or 0xFF case 03: DWORD Count1 --repeat Count1 FLOAT case 04: DWORD Count2 --repeat Count2 DWORD case 05: DWORD Count3 --repeat Count3 BYTE // Boolean 0x00 or 0xFF case 06: QWORD // DDS IID64
######Shaders FNV Hashed shader names from "Shaders_Win32.precomp"
ID | Name
----- | -----
0x8FAB3764 | Fluid Effect 0x4968A478 | Sim Censor
######Properties FNV Hashed property names from "Shaders_Win32.precomp"
ID | Name
----- | -----
0x6CC0FD85 | Diffuse Map 0x6E56548A | Normal Map 0x8C27D8C9 | Edge Darkening 0xC3C472A1 | Refraction Distortion Scale 0x6A203374 | Clip Alpha Opacity 0x556010DC | Alpha Cutoff 0xF2FCAD8C | Specular Scale 0xF43D2BDC | Multiply Value 0x3965ECE0 | Additive Value
###VisualEffect Section ####Overview This section combines multiple effects from the previous sections. The same effects are often used more than once here but with different offsets and parameters. ####Format
WORD SectionType //0x0000 WORD Version //0x0002 DWORD EffectCount --Repeat EffectCount // Effect Block Table DWORD Flags DWORD Component App Flags Mask DWORD Notify Message ID FLOAT[2] Screen Size Range //Little Endian FLOAT Cursor Active Distance BYTE Cursor Button // LOD Distances DWORD Count FLOAT FLOAT[3] Extended LOD Weights //Little Endian DWORD Seed DWORD BlockIndexCount --repeat BlockIndexCount BYTE Block Type DWORD Flags // Local Transform WORD Flags FLOAT Scale FLOAT[9] Orientation //Little Endian FLOAT[3] Position //Little Endian BYTE LOD Begin BYTE LOD End // LOD Scales DWORD Count --repeat Count FLOAT Emit Scale FLOAT Size Scale FLOAT Alpha Scale FLOAT Emit Scale Begin // always 1.0 FLOAT Emit Scale End // always 1.0 FLOAT Size Scale Begin // always 1.0 FLOAT Size Scale End // always 1.0 FLOAT Alpha Scale Begin // always 1.0 FLOAT Alpha Scale End // always 1.0 DWORD App Flags DWORD App Flags Mask WORD Selection Group WORD Selection Chance FLOAT Time Scale DWORD BlockIndex if (Version >= 2) BYTE BYTE if (Version >= 3) DWORD Count --repeat Count FLOAT
###VisualEffect Handles ####Overview This is the root of an effect tree. Effects are called via scripts and clip events by the name provided in this section, which links to the other parts.
####Visual Effect IDs #####Format
--Repeat until index 0xFFFFFFFF DWORD CompilationIndex //see previous section QWORD Effect ID //FNV Hash of effect name?
####VisualEffect Names #####Format
--Repeat until index 0xFFFFFFFF DWORD CompilationIndex //see previous section ZSTRING EffectName