Difference between revisions of "Sims 3:0xEA5118B0"

From SimsWiki
Jump to: navigation, search
(Fixed broken links)
 
(41 intermediate revisions by 3 users not shown)
Line 8: Line 8:
  
 
==Overview==
 
==Overview==
Defines special effects.
+
These internal files are known as Swarm Binaries, because they are read and rendered by the Swarm VFX System originally developed by [http://www.andrewwillmott.com/ 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==
 
==Format==
Line 14: Line 25:
  
 
  WORD Version
 
  WORD Version
  [[#Effect_Blocks|Effect Block Section]]
+
  [[#Effect_Sections|Effect Sections]]
  [[#Shader_Effects|Effect Shader Section]]
+
  [[#Resource_Sections|Resource Sections]]
  [[#Effect_Compilations|Effect Compilation Section]]
+
  [[#VisualEffect_Section|VisualEffect Section]]
  [[#Effect_Handles|Effect Handle Section]]
+
  [[#VisualEffect_IDs|VisualEffect IDs]]
 +
[[#VisualEffect_Names|VisualEffect Names]]
  
===Effect Blocks===
+
===Effect Sections===
 
====Format====
 
====Format====
 
  --Repeat until BlockType 0xFFFF
 
  --Repeat until BlockType 0xFFFF
 
  // Block List
 
  // Block List
 
  WORD BlockType
 
  WORD BlockType
  WORD BlockVersion
+
  WORD Version
  DWORD BlockCount
+
  DWORD Count
  --BlockCount times
+
  --repeat(Count)
 
  --Insert block data(depending on type)
 
  --Insert block data(depending on type)
  
Line 35: Line 47:
 
|-
 
|-
 
| 0x0001
 
| 0x0001
| Particle Effect
+
| [[#Particle_Effect|Particle Effect]]
 
|-
 
|-
 
| 0x0002
 
| 0x0002
| Metaparticle Effect
+
| [[#Metaparticle_Effect|Metaparticle Effect]]
 
|-
 
|-
 
| 0x0003
 
| 0x0003
| Decal Effect
+
| [[#Decal_Effect|Decal Effect]]
 
|-
 
|-
 
| 0x0004
 
| 0x0004
| Effect Sequence
+
| [[#Sequence_Effect|Sequence Effect]]
 
|-
 
|-
 
| 0x0005
 
| 0x0005
| Sound Effect
+
| [[#Sound_Effect|Sound Effect]]
 
|-
 
|-
 
| 0x0006
 
| 0x0006
| Shake Effect
+
| [[#Shake_Effect|Shake Effect]]
 
|-
 
|-
 
| 0x0007
 
| 0x0007
| Camera Effect
+
| [[#Camera_Effect|Camera Effect]]
 
|-
 
|-
 
| 0x0008
 
| 0x0008
| Model Effect
+
| [[#Model_Effect|Model Effect]]
 
|-
 
|-
 
| 0x0009
 
| 0x0009
| Screen Effect
+
| [[#Screen_Effect|Screen Effect]]
 
|-
 
|-
 
| 0x000A
 
| 0x000A
| P10Block
+
| Unused
 
|-
 
|-
 
| 0x000B
 
| 0x000B
| P11Block
+
| [[#Game_Effect|Game Effect]]
 
|-
 
|-
 
| 0x000C
 
| 0x000C
| P12Block
+
| [[#FastParticle_Effect|Fast Particle Effect]]
 
|-
 
|-
 
| 0x000D
 
| 0x000D
| Distribution Effect  
+
| [[#Distribute_Effect|Distribute Effect]]
 
|-
 
|-
 
| 0x000E
 
| 0x000E
| P14Block
+
| [[#Ribbon_Effect|Ribbon Effect]]
 +
|-
 +
| 0x000F
 +
| [[#Sprite_Effect|Sprite Effect]]
 
|-
 
|-
 
|}
 
|}
 +
 
====Particle Effect====
 
====Particle Effect====
  
 
======Format======
 
======Format======
  BYTE
+
  DWORD    Flags
BYTE
+
  FLOAT[2] Particle Lifetime //Little Endian
BYTE
+
  FLOAT   Preroll Time
BYTE
+
  FLOAT[2] Emit Delay //Little Endian
  FLOAT //Little Endian
+
  FLOAT[2] Emit Retrigger //Little Endian
  FLOAT //Little Endian
+
  FLOAT[3] Emit Direction Bounding Box Minimum //Little Endian
FLOAT //Little Endian
+
  FLOAT[3] Emit Direction Bounding Box Maximum //Little Endian
FLOAT //Little Endian
+
  FLOAT[2] Emit Speed //Little Endian
FLOAT //Little Endian
+
  FLOAT[3] Emit Volume Bounding Box Minimum //Little Endian
FLOAT //Little Endian
+
  FLOAT[3] Emit Volume Bounding Box Maximum //Little Endian
FLOAT //Little Endian
+
  FLOAT   Emit Torus Width
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
  FLOAT //Little Endian
+
  FLOAT //Little Endian
+
  FLOAT //Little Endian
+
  FLOAT //Little Endian
+
  FLOAT //Little Endian
+
  FLOAT //Little Endian
+
  FLOAT //Little Endian
+
  FLOAT
+
 
   
 
   
  //Angle(Degrees)
+
  // Emit Rate Curve (Particles/Sim-Minute)
  DWORD Count1
+
  DWORD Count
FLOAT  
+
    FLOAT  
FLOAT
+
WORD
+
FLOAT
+
//Scale Delta
+
DWORD Count2
+
FLOAT
+
FLOAT
+
DWORD Count3
+
FLOAT
+
FLOAT
+
FLOAT
+
BYTE[4]
+
DWORD Count4
+
FLOAT
+
DWORD Count5
+
FLOAT
+
FLOAT
+
//Particle Color Delta
+
DWORD Count6
+
FLOAT Red //Little Endian
+
  FLOAT Green //Little Endian
+
FLOAT Blue //Little Endian
+
 
   
 
   
  FLOAT //Little Endian
+
  FLOAT Emit Rate Curve Time
  FLOAT //Little Endian
+
WORD  Emit Rate Curve Cycles
  FLOAT //Little Endian
+
FLOAT  Emit Rate Speed Scale
  QWORD //I<sub>64</sub> of a an image([[Sims_3:0x00B2D882|DDS]]), model([[Sims_3:0x736884F1|VPXY]]), or shader(see [[#Shader_Effects|Shader Section]] below)
+
  BYTE[10]
+
// Size Curve
  FLOAT
+
DWORD Count
  BYTE[8] // FFFFFFFFFFFFFFFF
+
    FLOAT 
  BYTE
+
  WORD
+
FLOAT  Size Vary
  BYTE
+
  BYTE
+
// Aspect Ratio Curve (1 is normal)
  FLOAT
+
DWORD Count 
  BYTE
+
    FLOAT 
  BYTE
+
  BYTE
+
FLOAT  Aspect Ratio Vary
  FLOAT //Little Endian
+
FLOAT  Rotation Vary
  FLOAT //Little Endian
+
FLOAT  Rotation Offset
  FLOAT //Little Endian
+
  FLOAT //Little Endian
+
// Rotation Curve (1 = one clockwise rotation = 360 degrees)
  FLOAT //Little Endian
+
DWORD Count
  FLOAT
+
    FLOAT 
  FLOAT
+
  FLOAT
+
// Alpha Curve (0 - 1 = transparent - opaque)
  FLOAT //Little Endian
+
DWORD Count
  FLOAT
+
    FLOAT 
  FLOAT
+
  FLOAT
+
FLOAT  Alpha Vary // 0 - 1 = transparent - opaque
  DWORD Count7
+
FLOAT
+
// Color Curve
FLOAT //Little Endian
+
DWORD Count
FLOAT //Little Endian
+
    FLOAT Red  //Little Endian; 0 - 1
FLOAT //Little Endian
+
    FLOAT Green //Little Endian; 0 - 1
FLOAT //Little Endian
+
    FLOAT Blue  //Little Endian; 0 - 1
FLOAT //Little Endian
+
FLOAT //Little Endian
+
//Color Vary
  BYTE[4] // 00FF00FF
+
  FLOAT Red  //Little Endian; 0 - 1
BYTE[4]
+
  FLOAT Green //Little Endian; 0 - 1
  DWORD Count8
+
  FLOAT Blue  //Little Endian; 0 - 1
FLOAT
+
  DWORD Count9
+
//Resource reference block
DWORD
+
QWORD  IID<sub>64</sub> of a an image([[Sims_3:0x00B2D882|DDS]]), model([[Sims_3:0x736884F1|VPXY]]), or material(see [[#Materials|Material Section]] below)
QWORD
+
  BYTE   Format
FLOAT
+
  BYTE  DrawMode
FLOAT
+
  if ((DrawMode & 0x80) == 0x80) DWORD ???
FLOAT
+
if ((DrawMode & 0x40) == 0x40) BYTE ???
FLOAT
+
// Draw Flags
BYTE[4]
+
  if (Version >= 6) WORD
ZSTRING
+
else              BYTE
ZSTRING
+
BYTE  Buffer
DWORD Count
+
  WORD   Layer
FLOAT //Little Endian
+
FLOAT  Sort Offset
FLOAT //Little Endian
+
QWORD  Second IID<sub>64</sub> //0xFFFFFFFFFFFFFFFF
FLOAT //Little Endian
+
   
  FLOAT
+
  BYTE     Physics Type
  BYTE[16]
+
  BYTE    Override Set
  FLOAT //-1000000000.0
+
  BYTE     Tile Count U
  FLOAT // 0.0
+
  BYTE     Tile Count V
  FLOAT //-10000.0 Little Endian
+
  BYTE     Align Mode
  FLOAT // 10000.0 Little Endian
+
  FLOAT   Frame Speed
  BYTE[24] //FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
  BYTE    Frame Start
  FLOAT //Little Endian
+
  BYTE    Frame Count
  FLOAT //Little Endian
+
  BYTE    Frame Random
  FLOAT //Little Endian
+
  FLOAT[3] Directional Forces Sum //Little Endian
  FLOAT //Little Endian
+
  FLOAT   Wind Strength
  FLOAT
+
  FLOAT   Gravity Strength
  FLOAT
+
  FLOAT   Radial Force
  FLOAT
+
  FLOAT[3] Radial Force Location //Little Endian
  DWORD Count10
+
  FLOAT   Drag
  FLOAT
+
  FLOAT   Velocity Stretch
  BYTE
+
  FLOAT   Screw Rate
  FLOAT //Little Endian
+
  FLOAT //Little Endian
+
// Wiggles
  FLOAT //Little Endian
+
  DWORD Count
  DWORD Count11
+
    FLOAT   Time Rate
FLOAT
+
    FLOAT[3] Rate Direction  //Little Endian
  FLOAT
+
    FLOAT[3] Wiggle Direction //Little Endian
  DWORD
+
  BYTE[16]
+
BYTE  Screen Bloom Alpha Rate //0x00
  DWORD Count12
+
BYTE  Screen Bloom Alpha Base //0xFF
FLOAT //Little Endian
+
BYTE  Screen Bloom Size Rate  //0x00
FLOAT //Little Endian
+
BYTE  Screen Bloom Size Base; //0xFF
FLOAT //Little Endian
+
  BYTE
+
// 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 IID<sub>64</sub> of a surface map(see [[#Materials|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 IID<sub>64</sub>      //0xFFFFFFFFFFFFFFFF
 +
  QWORD    Emit Rate Map IID<sub>64</sub>  //0xFFFFFFFFFFFFFFFF
 +
  QWORD    Emit Color Map IID<sub>64</sub> //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
  
 
====Metaparticle Effect====
 
====Metaparticle Effect====
Line 222: Line 269:
 
This type takes an existing effect and modifies it
 
This type takes an existing effect and modifies it
 
=====Format=====
 
=====Format=====
  BYTE[6]
+
  QWORD    Flags
WORD
+
  FLOAT[2] Particle Lifetime //Little Endian
  FLOAT //Little Endian
+
  FLOAT   Preroll Time
  FLOAT //Little Endian
+
  FLOAT[2] Emit Delay //Little Endian
  FLOAT //Little Endian
+
  FLOAT[2] Emit Retrigger //Little Endian
  FLOAT //Little Endian
+
  FLOAT[3] Emit Direction Bounding Box Minimum //Little Endian
  FLOAT //Little Endian
+
  FLOAT[3] Emit Direction Bounding Box Maximum //Little Endian
  FLOAT //Little Endian
+
  FLOAT[2] Emit Speed //Little Endian
  FLOAT //Little Endian
+
  FLOAT[3] Emit Volume Bounding Box Minimum //Little Endian
  FLOAT //Little Endian
+
  FLOAT[3] Emit Volume Bounding Box Maximum //Little Endian
  FLOAT //Little Endian
+
  FLOAT   Emit Torus Width
  FLOAT //Little Endian
+
   
  FLOAT //Little Endian
+
  // Emit Rate Curve (Particles/Sim-Minute)
  FLOAT //Little Endian
+
  DWORD Count
  FLOAT //Little Endian
+
    FLOAT  
  FLOAT //Little Endian
+
   
  FLOAT //Little Endian
+
  FLOAT   Emit Rate Curve Time
  FLOAT //Little Endian
+
  DWORD    Emit Rate Curve Cycles; Should be FLOAT?
  FLOAT //Little Endian
+
  FLOAT   Emit Rate Speed Scale
  FLOAT //Little Endian
+
   
  FLOAT //Little Endian
+
  // Size Curve
  FLOAT //Little Endian
+
  DWORD Count
  FLOAT //Little Endian
+
    FLOAT  
  FLOAT  
+
  DWORD Count1
+
  FLOAT Size Vary
FLOAT
+
  FLOAT
+
// Pitch Curve
  DWORD
+
  DWORD Count
  DWORD Count2
+
    FLOAT  
FLOAT
+
  FLOAT
+
// Roll Curve
  DWORD
+
  DWORD Count
  BYTE[4]
+
    FLOAT  
  DWORD
+
   
  BYTE[4]
+
  // Heading (Yaw) Curve
  DWORD Count3
+
  DWORD Count
FLOAT
+
    FLOAT  
  BYTE[24]
+
  DWORD Count4
+
  FLOAT Pitch Vary
FLOAT //Little Endian
+
  FLOAT Roll Vary
FLOAT //Little Endian
+
  FLOAT Heading (Yaw) Vary
FLOAT //Little Endian
+
   
  BYTE[8]
+
  FLOAT Pitch Offset
  DWORD Count5
+
  FLOAT Roll Offset
  BYTE[3]
+
FLOAT Heading (Yaw) Offset
FLOAT
+
   
FLOAT
+
// Color Curve
FLOAT
+
  DWORD Count
BYTE[9]
+
    FLOAT Red  //Little Endian; 0 - 1
  DWORD Count6
+
    FLOAT Green //Little Endian; 0 - 1
FLOAT
+
    FLOAT Blue  //Little Endian; 0 - 1
  FLOAT
+
   
  ZSTRING Base Effect //See [[#Effect_Handles|Effect Handles]] below
+
  // Color Vary
  ZSTRING Death Effect //See [[#Effect_Handles|Effect Handles]] below
+
FLOAT Red  //Little Endian; 0 - 1
  BYTE
+
FLOAT Green //Little Endian; 0 - 1
  BYTE[8]
+
FLOAT Blue  //Little Endian; 0 - 1
  FLOAT //Little Endian
+
  BYTE[20]
+
// Alpha Curve (0 - 1 = transparent - opaque)
  FLOAT
+
  DWORD Count
  BYTE[12]
+
    FLOAT  
  FLOAT
+
  BYTE[8]
+
  FLOAT Alpha Vary
BYTE[4] //00FF00FF
+
  BYTE[8]
+
  ZSTRING Base Effect //See [[#VisualEffect_Names|Effect Names]] below
  DWORD Count7
+
  ZSTRING Death Effect //See [[#VisualEffect_Names|Effect Names]] below
DWORD
+
   
BYTE[30]
+
  BYTE     Align Mode
DWORD Count
+
  FLOAT[3] Directional Forces Sum //Little Endian
FLOAT //Little Endian
+
  FLOAT[3] Global Forces Sum //Little Endian
FLOAT //Little Endian
+
  FLOAT   Wind Strength
FLOAT //Little Endian
+
  FLOAT    Gravity Strength
  FLOAT
+
FLOAT    Radial Force
  BYTE[16]
+
FLOAT[3] Radial Force Location //Little Endian
  FLOAT //-1000000000.0
+
  FLOAT   Drag
  FLOAT // 0.0
+
  FLOAT    Screw Rate
  FLOAT //-10000.0 Little Endian
+
  FLOAT // 10000.0 Little Endian
+
// Wiggles
  BYTE[24] //FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
DWORD Count
  FLOAT //Little Endian
+
    FLOAT    Time Rate
  FLOAT //Little Endian
+
    FLOAT[3] Rate Direction  //Little Endian
  FLOAT //Little Endian
+
    FLOAT[3] Wiggle Direction //Little Endian
  FLOAT //Little Endian
+
  FLOAT
+
  BYTE Screen Bloom Alpha Rate //0x00
  FLOAT
+
  BYTE  Screen Bloom Alpha Base //0xFF
  FLOAT
+
BYTE  Screen Bloom Size Rate  //0x00
  DWORD Count8
+
BYTE Screen Bloom Size Base  //0xFF
FLOAT
+
  BYTE
+
// Loop Box Color Curve
  FLOAT //Little Endian
+
DWORD Count  
  FLOAT //Little Endian
+
    FLOAT Red  //Little Endian; 0 - 1
  FLOAT //Little Endian
+
    FLOAT Green //Little Endian; 0 - 1
  FLOAT //Little Endian
+
    FLOAT Blue  //Little Endian; 0 - 1
  FLOAT
+
   
  FLOAT
+
// Loop Box Alpha Curve
  FLOAT
+
DWORD Count
  BYTE
+
    FLOAT // 0 - 1 = transparent - opaque
  DWORD Count9
+
   
BYTE[8]
+
// Surfaces
FLOAT //Little Endian
+
DWORD Count
  FLOAT //Little Endian
+
    DWORD  Flags //0x3FFF mask?
DWORD Count
+
    QWORD  IID<sub>64</sub> of a surface map(see [[#Materials|Material Section]] below)?
  FLOAT
+
    FLOAT  Bounce            //Should be DWORD?
  FLOAT
+
    FLOAT  Slide            //Should be DWORD?
  FLOAT
+
    FLOAT  Collision Radius  //Should be DWORD?
  DWORD Count10
+
    FLOAT  Death Probability //Should be DWORD?
FLOAT //Little Endian
+
    DWORD  Pin Offset
FLOAT //Little Endian
+
    ZSTRING
FLOAT //Little Endian
+
    ZSTRING
FLOAT //Little Endian
+
    // Surface Points
FLOAT //Little Endian
+
    DWORD Count
FLOAT //Little Endian
+
        FLOAT[3] //Little Endian
FLOAT timecode
+
  BYTE[4]
+
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 IID<sub>64</sub>      //0xFFFFFFFFFFFFFFFF
 +
  QWORD    Emit Rate Map IID<sub>64</sub>  //0xFFFFFFFFFFFFFFFF
 +
  QWORD    Emit Color Map IID<sub>64</sub> //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====
 
====Decal Effect====
Line 341: Line 442:
 
=====Format=====
 
=====Format=====
  
  BYTE[4]
+
  DWORD Flags; 0x7F mask?
  QWORD //I<sub>64</sub> of a [[Sims_3:0x00B2D882|DDS Resource]]
+
  QWORD IID<sub>64</sub> of a [[Sims_3:0x00B2D882|DDS Resource]]
  BYTE[6]
+
  BYTE
  FLOAT
+
  FLOAT  
  DWORD Count1
+
BYTE 
FLOAT
+
FLOAT  Lifetime
 +
 +
// Rotation Curve
 +
  DWORD Count1  
 +
    FLOAT  
 +
 +
// Size Curve
 
  DWORD Count2  
 
  DWORD Count2  
FLOAT
+
    FLOAT  
 +
 +
// Alpha Curve
 
  DWORD Count3  
 
  DWORD Count3  
FLOAT
+
    FLOAT  
  //Color Deltas
+
  DWORD Count4
+
  // Color Curve
  FLOAT Red //Little Endian
+
  DWORD Count4  
  FLOAT Green //Little Endian
+
  FLOAT Red   //Little Endian; 0 - 1
  FLOAT Blue //Little Endian
+
  FLOAT Green //Little Endian; 0 - 1
  DWORD Count5
+
  FLOAT Blue //Little Endian; 0 - 1
FLOAT
+
FLOAT
+
// Aspect Ratio Curve
FLOAT
+
  DWORD Count5  
  BYTE[4]
+
    FLOAT  
  FLOAT
+
  BYTE[8]
+
FLOAT   Alpha Vary
  BYTE[8] //FFFFFFFFFFFFFFFF
+
FLOAT   Size Vary
  BYTE
+
  FLOAT    Rotation Vary
 +
  FLOAT   Texture Repeat
 +
  FLOAT[2] Texture Offset //Little Endian
 +
  QWORD    Emit Color Map IID<sub>64</sub> //0xFFFFFFFFFFFFFFFF
 +
  if (Version >= 2) BYTE
  
====Effect Sequence====
+
====Sequence Effect====
 
=====Overivew=====
 
=====Overivew=====
 
Combines effect compilations so they play out sequentially
 
Combines effect compilations so they play out sequentially
Line 372: Line 485:
  
 
  DWORD Count1  
 
  DWORD Count1  
  FLOAT //Little Endian
+
  FLOAT[2] Time Range //Little Endian
FLOAT //Little Endian
+
  ZSTRING Effect Name //See [[#VisualEffect_Names|Effect Names]] below
  ZSTRING Effect Name //See [[#Effect_Handles|Effect Handles]] below
+
  DWORD Flags //0xF mask?
  DWORD
+
 
+
  
 
====Sound Effect====
 
====Sound Effect====
Line 383: Line 494:
 
=====Format=====
 
=====Format=====
  
  DWORD
+
  DWORD  Flags //0xF mask?
  QWORD //I<sub>64</sub> of an [[Sims_3:0x8070223D|Audio Tuner]]
+
QWORD  IID<sub>64</sub> of an [[Sims_3:0x8070223D|Audio Tuner]]
  FLOAT
+
  FLOAT Location Update Delta
  FLOAT
+
  FLOAT Play Time
  FLOAT
+
  FLOAT Volume
 +
if (Version >= 2) BYTE
  
 
====Shake Effect====
 
====Shake Effect====
 
=====Format=====
 
=====Format=====
  
  FLOAT
+
  FLOAT Lifetime
  FLOAT
+
  FLOAT Fade Time
  DWORD Count1
+
FLOAT
+
// Strength Curve
  DWORD Count2
+
  DWORD Count1  
FLOAT
+
    FLOAT  
  FLOAT
+
  BYTE
+
// Frequency Curve
  FLOAT
+
  DWORD Count2  
 +
    FLOAT  
 +
 +
  FLOAT Aspect Ratio
 +
  BYTE Base Table Type
 +
  FLOAT Falloff
  
 
====Camera Effect====
 
====Camera Effect====
 
=====Format=====
 
=====Format=====
  
  DWORD
+
  DWORD Flags //0x3FF mask?
  WORD
+
  WORD   View Flags
  FLOAT
+
  FLOAT Lifetime
  DWORD Count1
+
FLOAT
+
// Heading (Yaw) Curve
  DWORD Count2
+
  DWORD Count1  
FLOAT
+
    FLOAT  
  DWORD Count3
+
FLOAT
+
// Pitch Curve
  DWORD Count4
+
  DWORD Count2  
FLOAT
+
    FLOAT  
  BYTE[17]
+
  DWORD
+
// Roll Curve
  BYTE
+
  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====
 
====Model Effect====
 
=====Format=====
 
=====Format=====
 
+
DWORD  Flags //0x3 mask?
  BYTE[12]
+
  QWORD  Resource IID<sub>64</sub>
  FLOAT
+
  FLOAT Size
  FLOAT //Little Endian
+
  FLOAT //Little Endian
+
// Color
  FLOAT //Little Endian
+
  FLOAT Red  //Little Endian; 0 - 1
  FLOAT
+
  FLOAT Green //Little Endian; 0 - 1
  BYTE[4]
+
  FLOAT Blue  //Little Endian; 0 - 1
  BYTE[8] //FFFFFFFFFFFFFFFF
+
  BYTE
+
  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 IID<sub>64</sub>; usually 0xFFFFFFFFFFFFFFFF
 +
  BYTE   Override Set
  
 
====Screen Effect====
 
====Screen Effect====
 
=====Format=====
 
=====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 IID<sub>64</sub>
 +
 +
// 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
 +
    DWORD 
  
BYTE type
+
====Game Effect====
  DWORD
+
=====Overview=====
  DWORD Count1
+
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.
FLOAT //Little Endian
+
=====Format=====
FLOAT //Little Endian
+
  DWORD     Flags //0x3FF mask?
FLOAT //Little Endian
+
  DWORD     Message ID
  DWORD Count2
+
  DWORD[4]  Message Data
FLOAT
+
  ZSTRING  Message String
FLOAT
+
  FLOAT    Life
FLOAT
+
  if(type == 0) BYTE[4] else BYTE[12]
+
  BYTE[8]
+
  BYTE[21]
+
  BYTE[3]
+
  
 +
====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 IID<sub>64</sub> of a an image([[Sims_3:0x00B2D882|DDS]]), model([[Sims_3:0x736884F1|VPXY]]), or material(see [[#Materials|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 IID<sub>64</sub> //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
  
====P10Block====
+
====Distribute Effect====
No examples to decode
+
=====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  IID<sub>64</sub> of a surface map(see [[#Materials|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 IID<sub>64</sub>  //0xFFFFFFFFFFFFFFFF
 +
QWORD Color Map IID<sub>64</sub> //0xFFFFFFFFFFFFFFFF
 +
QWORD Pin Map IID<sub>64</sub>  //0xFFFFFFFFFFFFFFFF
 +
 +
FLOAT[2]  Altitude Range //Little Endian
 +
 +
//Resource reference block
 +
QWORD  IID<sub>64</sub> //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 IID<sub>64</sub> //0xFFFFFFFFFFFFFFFF
 +
 +
BYTE  Override Set
 +
DWORD Message ID
  
====P11Block====
+
====Ribbon Effect====
No examples to decode
+
=====Overview=====
 
+
Examples of this effect first appear in the Create A Pet Demo
====P12Block====
+
=====Format=====
No examples to decode
+
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 IID<sub>64</sub> of a an image([[Sims_3:0x00B2D882|DDS]]), model([[Sims_3:0x736884F1|VPXY]]), or material(see [[#Materials|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 IID<sub>64</sub> //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 IID<sub>64</sub> //0xFFFFFFFFFFFFFFFF
 +
QWORD    Force Map IID<sub>64</sub>      //0xFFFFFFFFFFFFFFFF
 +
FLOAT    Map Repulse Strength
  
====Distribution Effect====
+
====Sprite Effect====
 
=====Overview=====
 
=====Overview=====
Note: there is only one of these
+
Examples of this effect first appear in the Create A Pet Demo
 
=====Format=====
 
=====Format=====
 
  DWORD
 
  DWORD
 
  DWORD
 
  DWORD
  ZSTRING
+
  DWORD
BYTE[5]
+
 
  FLOAT
 
  FLOAT
  BYTE[2]
+
  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 //Little Endian
+
  FLOAT
  FLOAT //Little Endian
+
  FLOAT
  FLOAT //Little Endian
+
  FLOAT[3] //Little Endian
  FLOAT //Little Endian
+
  FLOAT[3] //Little Endian
  FLOAT //Little Endian
+
  FLOAT
  FLOAT //Little Endian
+
  FLOAT
  FLOAT //Little Endian
+
  FLOAT
  FLOAT //Little Endian
+
  FLOAT
  FLOAT //Little Endian
+
  FLOAT
  BYTE[84]
+
  FLOAT
  BYTE[24] //FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
  FLOAT
  FLOAT //Little Endian
+
  FLOAT
  FLOAT //Little Endian
+
  FLOAT
  BYTE[8] //FFFFFFFFFFFFFFFF
+
  FLOAT
  BYTE[14]
+
FLOAT
  BYTE[8] //FFFFFFFFFFFFFFFF
+
FLOAT
  BYTE[5]
+
FLOAT
====P14Block====
+
FLOAT
No examples to decode
+
FLOAT
 +
FLOAT
 +
 +
//Resource reference block
 +
  QWORD  IID<sub>64</sub> of a an image([[Sims_3:0x00B2D882|DDS]]), model([[Sims_3:0x736884F1|VPXY]]), or material(see [[#Materials|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 IID<sub>64</sub> //0xFFFFFFFFFFFFFFFF
 +
 +
BYTE
  
===Shader Effects===
+
===Resource Sections===
====Overview====
+
References shaders from "Shaders_Win32.precomp", making them available to the particle effects in the previous section and overriding some parameters.
+
 
====Format====
 
====Format====
 +
  --Repeat until ResourceType 0xFFFF
 +
    // Block List
 +
    WORD    ResourceType
 +
    WORD    Version
 +
    DWORD    Count
 +
    --repeat(Count)
 +
        --Insert resource data(depending on type)
 +
====Resources====
 +
{| class="wikitable" border="1"
 +
! ID
 +
! Name
 +
|-
 +
| 0x0000
 +
| [[#Map|Map]]
 +
|-
 +
| 0x0001
 +
| [[#Material|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 IID<sub>64</sub>
 +
DWORD  Flags //0x3FF mask?
 +
BYTE  Map Type
 +
QWORD  Image IID<sub>64</sub>
 +
 +
//Bounds
 +
FLOAT Left
 +
FLOAT Top
 +
FLOAT Right
 +
FLOAT Bottom
 +
 +
BYTE    Channel
 +
BYTE    Op Kind
 +
QWORD[4] Op Arg Map IID<sub>64</sub>s
 +
 +
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
  
BYTE[6]
+
=====Material=====
DWORD
+
======Overview======
WORD
+
References shaders from "Shaders_Win32.precomp", making them available to the particle effects in the previous section and overriding some parameters.
  DWORD Count
+
======Format======
QWORD Shader Id?
+
  QWORD Hashed name
QWORD Effect Type
+
QWORD [[#Shaders|Shader]]
DWORD Count1
+
DWORD Count1
QWORD //Property ID
+
    QWORD [[#Properties|Property Id]]
BYTE dataType
+
    BYTE dataType
switch(dataType)
+
    switch(dataType)
case 06: QWORD // DDS Instance Id
+
        case 00: FLOAT
case 00: FLOAT // Little Endian
+
        case 01: DWORD
====Effect Types====
+
        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 IID<sub>64</sub>
 +
 
 +
======Shaders======
 +
[[FNV|FNV32]] Hashed shader names from "Shaders_Win32.precomp"
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
! ID
 
! ID
Line 520: Line 1,028:
 
| Sim Censor
 
| Sim Censor
 
|-
 
|-
 
 
|}
 
|}
  
====Properties====
+
======Properties======
 
[[FNV|FNV32]] Hashed property names from "Shaders_Win32.precomp"
 
[[FNV|FNV32]] Hashed property names from "Shaders_Win32.precomp"
  
Line 559: Line 1,066:
 
|}
 
|}
  
===Effect Compilations===
+
===VisualEffect Section===
 
====Overview====
 
====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.
 
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====
 
====Format====
  BYTE[4]
+
  WORD SectionType //0x0000
 +
WORD Version    //0x0002
 
  DWORD EffectCount
 
  DWORD EffectCount
 
  --Repeat EffectCount
 
  --Repeat EffectCount
// Effect Block Table
+
    // Effect Block Table
DWORD
+
    DWORD   Flags
BYTE[8]
+
    DWORD    Component App Flags Mask
FLOAT
+
    DWORD    Notify Message ID
FLOAT
+
    FLOAT[2] Screen Size Range //Little Endian
BYTE[5]
+
    FLOAT   Cursor Active Distance
DWORD Count1
+
    BYTE     Cursor Button
FLOAT[Count1]
+
    // LOD Distances
BYTE[16]
+
    DWORD Count
DWORD BlockIndexCount
+
        FLOAT
--repeat BlockIndexCount
+
    FLOAT[3] Extended LOD Weights //Little Endian
BYTE BlockType
+
    DWORD    Seed
BYTE[6]
+
    DWORD BlockIndexCount
FLOAT
+
    --repeat BlockIndexCount
FLOAT //Little Endian
+
          BYTE Block Type
FLOAT //Little Endian
+
          DWORD Flags
FLOAT //Little Endian
+
          // Local Transform
FLOAT //Little Endian
+
          WORD    Flags
FLOAT //Little Endian
+
          FLOAT   Scale
FLOAT //Little Endian
+
          FLOAT[9] Orientation //Little Endian
FLOAT //Little Endian
+
          FLOAT[3] Position    //Little Endian
FLOAT //Little Endian
+
          BYTE LOD Begin
FLOAT //Little Endian
+
          BYTE LOD End
//Offset relative to the slot
+
          // LOD Scales
FLOAT X_Offset //Little Endian
+
          DWORD Count
FLOAT Y_Offset //Little Endian
+
          --repeat Count
FLOAT Z_Offset //Little Endian
+
            FLOAT Emit Scale
BYTE
+
            FLOAT Size Scale
BYTE
+
            FLOAT Alpha Scale
DWORD Count
+
          FLOAT Emit Scale Begin  // always 1.0
--repeat Count
+
          FLOAT Emit Scale End    // always 1.0
FLOAT
+
          FLOAT Size Scale Begin  // always 1.0
FLOAT
+
          FLOAT Size Scale End    // always 1.0
FLOAT
+
          FLOAT Alpha Scale Begin // always 1.0
FLOAT
+
          FLOAT Alpha Scale End  // always 1.0
FLOAT
+
          DWORD App Flags
FLOAT
+
          DWORD App Flags Mask
FLOAT
+
          WORD  Selection Group
FLOAT
+
          WORD  Selection Chance
FLOAT
+
          FLOAT Time Scale
BYTE[12]
+
          DWORD BlockIndex
FLOAT
+
          if (Version >= 2)
DWORD BlockIndex
+
              BYTE
BYTE
+
              BYTE
BYTE
+
          if (Version >= 3)
===Effect Handles===
+
              DWORD Count
 +
              --repeat Count
 +
                  FLOAT
 +
 
 +
===VisualEffect Handles===
 
====Overview====
 
====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.   
 
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.   
====Format====
+
 
 +
====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
 
  --Repeat until index 0xFFFFFFFF
 
  DWORD CompilationIndex //see previous section
 
  DWORD CompilationIndex //see previous section

Latest revision as of 17:08, 13 August 2014

Modding Reference by Category

Sims 3 :DBPF | File Types | RCOL(Scene) | Catalog Resource | String Table | Key Table | TS3 Programmer's Reference 

Effect Resource Tree - SWB
TypeID:0xEA5118B0
Game Version:The Sims 3



Contents

[edit] 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.

[edit] 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

[edit] Effect Sections

[edit] Format

--Repeat until BlockType 0xFFFF
	// Block List
	WORD	BlockType
	WORD	Version
	DWORD	Count
	--repeat(Count)
		--Insert block data(depending on type)

[edit] 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

[edit] Particle Effect

[edit] 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 

[edit] Metaparticle Effect

[edit] Overview

This type takes an existing effect and modifies it

[edit] 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

[edit] Decal Effect

[edit] Overview

This is mostly used for things like the build tool UI tools(i.e. the terrain tool circle).

[edit] Format
DWORD Flags; 0x7F mask?
QWORD  IID64 of a DDS Resource
BYTE  
FLOAT 
BYTE  
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

[edit] Sequence Effect

[edit] Overivew

Combines effect compilations so they play out sequentially

[edit] Format
DWORD Count1 
	FLOAT[2] Time Range //Little Endian
	ZSTRING  Effect Name //See Effect Names below
DWORD  Flags //0xF mask?

[edit] Sound Effect

[edit] Overview

Plays a sound

[edit] Format
DWORD  Flags //0xF mask?
QWORD  IID64 of an Audio Tuner
FLOAT  Location Update Delta
FLOAT  Play Time
FLOAT  Volume
if (Version >= 2) BYTE 

[edit] Shake Effect

[edit] 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

[edit] Camera Effect

[edit] 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

[edit] Model Effect

[edit] 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

[edit] Screen Effect

[edit] 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 
    DWORD   

[edit] Game Effect

[edit] 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.

[edit] Format
DWORD     Flags //0x3FF mask?
DWORD     Message ID
DWORD[4]  Message Data
ZSTRING   Message String
FLOAT     Life

[edit] FastParticle Effect

[edit] 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.

[edit] 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

[edit] Distribute Effect

[edit] Overview

Note: there is only one of these

[edit] 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

[edit] Ribbon Effect

[edit] Overview

Examples of this effect first appear in the Create A Pet Demo

[edit] 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

[edit] Sprite Effect

[edit] Overview

Examples of this effect first appear in the Create A Pet Demo

[edit] 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

[edit] Resource Sections

[edit] Format

 --Repeat until ResourceType 0xFFFF
   // Block List
   WORD    ResourceType
   WORD    Version
   DWORD    Count
   --repeat(Count)
       --Insert resource data(depending on type)

[edit] Resources

ID Name
0x0000 Map
0x0001 Material
[edit] Map
[edit] Overview

It appears to apply operators to a map image. There are currently no examples in The Sims 3 to be sure.

[edit] 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
[edit] Material
[edit] Overview

References shaders from "Shaders_Win32.precomp", making them available to the particle effects in the previous section and overriding some parameters.

[edit] 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
[edit] Shaders

FNV32 Hashed shader names from "Shaders_Win32.precomp"

ID Name
0x8FAB3764 Fluid Effect
0x4968A478 Sim Censor
[edit] Properties

FNV32 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

[edit] VisualEffect Section

[edit] 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.

[edit] 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

[edit] VisualEffect Handles

[edit] 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.

[edit] Visual Effect IDs

[edit] Format
--Repeat until index 0xFFFFFFFF
	DWORD CompilationIndex //see previous section
	QWORD Effect ID //FNV Hash of effect name?

[edit] VisualEffect Names

[edit] Format
--Repeat until index 0xFFFFFFFF
	DWORD CompilationIndex //see previous section
	ZSTRING EffectName
Modding Reference by Category

Sims 3 :DBPF | File Types | RCOL(Scene) | Catalog Resource | String Table | Key Table | TS3 Programmer's Reference 

Personal tools
Namespaces

Variants
Actions
Navigation
game select
Toolbox