Difference between revisions of "Sims 3:0xEA5118B0"

From SimsWiki
Jump to: navigation, search
(Format)
(Fixed broken links)
 
(45 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
  
==Format==
+
The internal format for Swarm Binaries was derived primarily by analyzing internal code for parsing them, hidden within The Sims 3 main executable itself.
All data is in Big Endian order unless otherwise noted(most floats). This spec is very primitive and needs work.
+
<pre>
+
WORD Version
+
//BlockSections
+
--Repeat until BlockType 0xFFFF
+
// Block List
+
WORD BlockType
+
WORD BlockVersion
+
DWORD BlockCount
+
--BlockCount times
+
--Insert block data(depending on type)
+
+
// Insert Shader Effects
+
  
+
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.
// Main Effect Section
+
BYTE[4]
+
DWORD EffectCount
+
--Repeat EffectCount
+
// Effect Block Table
+
DWORD
+
BYTE[8]
+
FLOAT
+
FLOAT
+
BYTE[5]
+
DWORD Count1
+
FLOAT[Count1]
+
BYTE[16]
+
DWORD BlockIndexCount
+
--repeat BlockIndexCount
+
BYTE BlockType
+
BYTE[6]
+
FLOAT
+
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
+
//Offset relative to the slot
+
FLOAT X_Offset //Little Endian
+
FLOAT Y_Offset //Little Endian
+
FLOAT Z_Offset //Little Endian
+
BYTE
+
BYTE
+
DWORD Count
+
--repeat Count
+
FLOAT
+
FLOAT
+
FLOAT
+
FLOAT
+
FLOAT
+
FLOAT
+
FLOAT
+
FLOAT
+
FLOAT
+
BYTE[12]
+
FLOAT
+
DWORD BlockIndex
+
BYTE
+
BYTE
+
+
--Repeat until index 0xFFFFFFFF
+
// Effect Index
+
DWORD BlockTableIndex
+
ZSTRING EffectName
+
+
</pre>
+
  
==Shader Effects==
+
Format Facts:
===Format===
+
* It is primarily Big Endian, but groups of floats denoting vectors are swizzled to Little Endian.
<pre>
+
* Curves are used to determine how the effects change over time.
BYTE[6]
+
* There are often "vary" and "offset" fields corresponding to this curves that are used to adjust the values using the following formula:
DWORD
+
*: random(1 - vary, 1 + vary) * current_value + offset
WORD
+
* The format can be easily expanded by increasing the version of a component type and/or adding entirely new components.
DWORD Count
+
QWORD Shader Id?
+
QWORD Effect Type
+
DWORD Count1
+
QWORD //Property ID
+
BYTE dataType
+
switch(dataType)
+
case 06: QWORD // DDS Instance Id
+
case 00: FLOAT // Little Endian
+
</pre>
+
===Effect Types===
+
{| class="wikitable" border="1"
+
! ID
+
! Name
+
|-
+
| 0x8FAB3764
+
| Fluid Effect
+
|-
+
| 0x4968A478
+
| Sim Censor
+
|-
+
  
|}
+
==Format==
 +
All data is in Big Endian order unless otherwise noted(most floats).  This spec is very primitive and needs work.
  
===Properties===
+
WORD Version
[[FNV|FNV32]] Hashed property names from "Shaders_Win32.precomp"
+
[[#Effect_Sections|Effect Sections]]
 +
[[#Resource_Sections|Resource Sections]]
 +
[[#VisualEffect_Section|VisualEffect Section]]
 +
[[#VisualEffect_IDs|VisualEffect IDs]]
 +
[[#VisualEffect_Names|VisualEffect Names]]
  
{| class="wikitable" border="1"
+
===Effect Sections===
! ID
+
====Format====
! Name
+
--Repeat until BlockType 0xFFFF
|-
+
// Block List
| 0x6CC0FD85
+
WORD BlockType
| Diffuse Map
+
WORD Version
|-
+
DWORD Count
| 0x6E56548A
+
--repeat(Count)
| Normal Map
+
--Insert block data(depending on type)
|-
+
| 0x8C27D8C9
+
| Edge Darkening
+
|-
+
| 0xC3C472A1
+
| Refraction Distortion Scale
+
|-
+
| 0x6A203374
+
| Clip Alpha Opacity
+
|-
+
| 0x556010DC
+
| Alpha Cutoff
+
|-
+
| 0xF2FCAD8C
+
| Specular Scale
+
|-
+
| 0xF43D2BDC
+
| Multiply Value
+
|-
+
| 0x3965ECE0
+
| Additive Value
+
|-
+
|}
+
  
==Blocks==
+
====Blocks====
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
! BlockType
 
! BlockType
Line 155: 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===
 
====Format====
 
<pre>
 
BYTE
 
BYTE
 
BYTE
 
BYTE
 
FLOAT DurationMin //Little Endian
 
FLOAT DurationMax //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 //Little Endian
 
FLOAT //Little Endian
 
FLOAT //Little Endian
 
FLOAT //Little Endian
 
FLOAT //Little Endian
 
FLOAT //Little Endian
 
FLOAT
 
  
//Angle(Degrees)
+
====Particle Effect====
DWORD Count1
+
FLOAT
+
FLOAT
+
WORD
+
FLOAT
+
  
//Scale Delta
+
======Format======
DWORD Count2
+
DWORD    Flags
FLOAT  
+
FLOAT[2] Particle Lifetime //Little Endian
FLOAT
+
FLOAT    Preroll Time
DWORD Count3
+
FLOAT[2] Emit Delay //Little Endian
FLOAT
+
FLOAT[2] Emit Retrigger //Little Endian
FLOAT
+
FLOAT[3] Emit Direction Bounding Box Minimum //Little Endian
FLOAT
+
FLOAT[3] Emit Direction Bounding Box Maximum //Little Endian
BYTE[4]
+
FLOAT[2] Emit Speed //Little Endian
DWORD Count4
+
FLOAT[3] Emit Volume Bounding Box Minimum //Little Endian
FLOAT
+
FLOAT[3] Emit Volume Bounding Box Maximum //Little Endian
DWORD Count5
+
FLOAT    Emit Torus Width
FLOAT
+
FLOAT
+
// 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  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    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  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  
  
//Particle Color Delta
+
====Metaparticle Effect====
DWORD Count6
+
=====Overview=====
FLOAT Red //Little Endian
+
This type takes an existing effect and modifies it
FLOAT Green //Little Endian
+
=====Format=====
FLOAT Blue //Little Endian
+
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 [[#VisualEffect_Names|Effect Names]] below
 +
ZSTRING Death Effect //See [[#VisualEffect_Names|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  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 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
  
FLOAT //Little Endian
+
====Decal Effect====
FLOAT //Little Endian
+
=====Overview=====
FLOAT //Little Endian
+
This is mostly used for things like the build tool UI tools(i.e. the terrain tool circle).
QWORD //IID of a an image(DDS), model(VPXY), or shader(see shader section above)
+
=====Format=====
BYTE[10]
+
FLOAT
+
BYTE[8] // FFFFFFFFFFFFFFFF
+
BYTE
+
WORD
+
BYTE
+
BYTE
+
FLOAT
+
BYTE
+
BYTE
+
BYTE
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT
+
FLOAT
+
FLOAT
+
FLOAT //Little Endian
+
FLOAT
+
FLOAT
+
FLOAT
+
DWORD Count7
+
FLOAT
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
BYTE[4] // 00FF00FF
+
BYTE[4]
+
DWORD Count8
+
FLOAT
+
DWORD Count9
+
DWORD
+
QWORD
+
FLOAT
+
FLOAT
+
FLOAT
+
FLOAT
+
BYTE[4]
+
ZSTRING
+
ZSTRING
+
DWORD Count
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT
+
BYTE[16]
+
FLOAT //-1000000000.0
+
FLOAT // 0.0
+
FLOAT //-10000.0 Little Endian
+
FLOAT // 10000.0 Little Endian
+
BYTE[24] //FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT
+
FLOAT
+
FLOAT
+
DWORD Count10
+
FLOAT
+
BYTE
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
DWORD Count11
+
FLOAT
+
FLOAT
+
DWORD
+
BYTE[16]
+
DWORD Count12
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
BYTE
+
</pre>
+
  
===Metaparticle Effect===
+
DWORD Flags; 0x7F mask?
====Format====
+
QWORD  IID<sub>64</sub> of a [[Sims_3:0x00B2D882|DDS Resource]]
<pre>
+
BYTE 
BYTE[6]
+
FLOAT  
WORD
+
BYTE 
FLOAT DurationMin //Little Endian
+
FLOAT Lifetime
FLOAT DurationMax//Little Endian
+
FLOAT //Little Endian
+
// Rotation Curve
FLOAT //Little Endian
+
DWORD Count1
FLOAT //Little Endian
+
    FLOAT  
FLOAT //Little Endian
+
FLOAT //Little Endian
+
// Size Curve
FLOAT //Little Endian
+
DWORD Count2  
FLOAT //Little Endian
+
    FLOAT  
FLOAT //Little Endian
+
FLOAT //Little Endian
+
// Alpha Curve
FLOAT //Little Endian
+
DWORD Count3
FLOAT //Little Endian
+
    FLOAT  
FLOAT //Little Endian
+
FLOAT //Little Endian
+
// Color Curve
FLOAT //Little Endian
+
DWORD Count4
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
+
// Aspect Ratio Curve
FLOAT
+
DWORD Count5
DWORD Count1
+
    FLOAT  
FLOAT
+
FLOAT
+
FLOAT   Alpha Vary
DWORD
+
FLOAT   Size Vary
DWORD Count2
+
FLOAT   Rotation Vary
FLOAT
+
FLOAT   Texture Repeat
FLOAT
+
FLOAT[2] Texture Offset //Little Endian
DWORD
+
QWORD    Emit Color Map IID<sub>64</sub> //0xFFFFFFFFFFFFFFFF
BYTE[4]
+
if (Version >= 2) BYTE
DWORD
+
BYTE[4]
+
DWORD Count3
+
FLOAT
+
BYTE[24]
+
DWORD Count4
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
BYTE[8]
+
DWORD Count5
+
BYTE[3]
+
FLOAT
+
FLOAT
+
FLOAT
+
BYTE[9]
+
DWORD Count6
+
FLOAT
+
FLOAT
+
ZSTRING
+
ZSTRING
+
BYTE
+
BYTE[8]
+
FLOAT //Little Endian
+
BYTE[20]
+
FLOAT
+
BYTE[12]
+
FLOAT
+
BYTE[8]
+
BYTE[4] //00FF00FF
+
BYTE[8]
+
DWORD Count7
+
DWORD
+
BYTE[30]
+
DWORD Count
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT
+
BYTE[16]
+
FLOAT //-1000000000.0
+
FLOAT // 0.0
+
FLOAT //-10000.0 Little Endian
+
FLOAT // 10000.0 Little Endian
+
BYTE[24] //FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT
+
FLOAT
+
FLOAT
+
DWORD Count8
+
FLOAT
+
BYTE
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT
+
FLOAT
+
FLOAT
+
BYTE
+
DWORD Count9
+
BYTE[8]
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
DWORD Count
+
FLOAT
+
FLOAT
+
FLOAT
+
DWORD Count10
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT timecode
+
BYTE[4]
+
</pre>
+
  
===Decal Effect===
+
====Sequence Effect====
====Format====
+
=====Overivew=====
<pre>
+
Combines effect compilations so they play out sequentially
BYTE[4]
+
=====Format=====
QWORD //I64 of a DDS resource
+
BYTE[6]
+
FLOAT
+
DWORD Count1
+
FLOAT
+
DWORD Count2
+
FLOAT
+
DWORD Count3
+
FLOAT
+
DWORD Count4
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
DWORD Count5
+
FLOAT
+
FLOAT
+
FLOAT
+
BYTE[4]
+
FLOAT
+
BYTE[8]
+
BYTE[8] //FFFFFFFFFFFFFFFF
+
BYTE
+
</pre>
+
===Effect Sequence===
+
====Format====
+
<pre>
+
DWORD Count1
+
FLOAT DurationMin //Little Endian
+
FLOAT DurationMax //Little Endian
+
ZSTRING Effect Name
+
DWORD
+
</pre>
+
  
===Sound Effect===
+
DWORD Count1
====Format====
+
FLOAT[2] Time Range //Little Endian
<pre>
+
ZSTRING  Effect Name //See [[#VisualEffect_Names|Effect Names]] below
DWORD
+
DWORD  Flags //0xF mask?
QWORD //I64 of an Audio resource
+
FLOAT
+
FLOAT
+
FLOAT
+
</pre>
+
  
===Shake Effect===
+
====Sound Effect====
====Format====
+
=====Overview=====
<pre>
+
Plays a sound
FLOAT
+
=====Format=====
FLOAT
+
DWORD Count1
+
FLOAT
+
DWORD Count2
+
FLOAT
+
FLOAT
+
BYTE
+
FLOAT
+
</pre>
+
  
===Camera Effect===
+
DWORD  Flags //0xF mask?
====Format====
+
QWORD  IID<sub>64</sub> of an [[Sims_3:0x8070223D|Audio Tuner]]
<pre>
+
FLOAT Location Update Delta
DWORD
+
FLOAT Play Time
WORD
+
FLOAT Volume
FLOAT
+
if (Version >= 2) BYTE  
DWORD Count1
+
FLOAT
+
DWORD Count2
+
FLOAT
+
DWORD Count3
+
FLOAT
+
DWORD Count4
+
FLOAT
+
BYTE[17]
+
DWORD
+
BYTE
+
</pre>
+
  
===Model Effect===
+
====Shake Effect====
====Format====
+
=====Format=====
<pre>
+
BYTE[12]
+
FLOAT
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT
+
BYTE[4]
+
BYTE[8] //FFFFFFFFFFFFFFFF
+
BYTE
+
</pre>
+
  
===Screen Effect===
+
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 IID<sub>64</sub>
 +
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 IID<sub>64</sub>; 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 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 
 +
 
 +
====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 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
 +
 
 +
====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  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
 +
 
 +
====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 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
 +
 
 +
====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  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
 +
 
 +
===Resource Sections===
 
====Format====
 
====Format====
<pre>
+
  --Repeat until ResourceType 0xFFFF
BYTE type
+
    // Block List
DWORD
+
    WORD    ResourceType
DWORD Count1
+
    WORD    Version
FLOAT //Little Endian
+
    DWORD   Count
FLOAT //Little Endian
+
    --repeat(Count)
FLOAT //Little Endian
+
        --Insert resource data(depending on type)
DWORD Count2
+
====Resources====
FLOAT
+
{| class="wikitable" border="1"
FLOAT
+
! ID
FLOAT
+
! Name
if(type == 0) BYTE[4] else BYTE[12]
+
|-
BYTE[8]
+
| 0x0000
BYTE[21]
+
| [[#Map|Map]]
BYTE[3]
+
|-
</pre>
+
| 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
  
===P10Block===
+
=====Material=====
No examples to decode
+
======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 [[#Shaders|Shader]]
 +
DWORD Count1
 +
    QWORD [[#Properties|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 IID<sub>64</sub>
  
===P11Block===
+
======Shaders======
No examples to decode
+
[[FNV|FNV32]] Hashed shader names from "Shaders_Win32.precomp"
 +
{| class="wikitable" border="1"
 +
! ID
 +
! Name
 +
|-
 +
| 0x8FAB3764
 +
| Fluid Effect
 +
|-
 +
| 0x4968A478
 +
| Sim Censor
 +
|-
 +
|}
  
===P12Block===
+
======Properties======
No examples to decode
+
[[FNV|FNV32]] Hashed property names from "Shaders_Win32.precomp"
  
===Distribution Effect===
+
{| class="wikitable" border="1"
 +
! 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====
 
====Format====
<pre>
+
WORD SectionType //0x0000
DWORD
+
WORD Version    //0x0002
DWORD
+
DWORD EffectCount
ZSTRING
+
--Repeat EffectCount
BYTE[5]
+
    // Effect Block Table
FLOAT
+
    DWORD   Flags
BYTE[2]
+
    DWORD    Component App Flags Mask
FLOAT
+
    DWORD    Notify Message ID
FLOAT //Little Endian
+
    FLOAT[2] Screen Size Range //Little Endian
FLOAT //Little Endian
+
    FLOAT   Cursor Active Distance
FLOAT //Little Endian
+
    BYTE    Cursor Button
FLOAT //Little Endian
+
    // LOD Distances
FLOAT //Little Endian
+
    DWORD Count
FLOAT //Little Endian
+
        FLOAT
FLOAT //Little Endian
+
    FLOAT[3] Extended LOD Weights //Little Endian
FLOAT //Little Endian
+
    DWORD    Seed
FLOAT //Little Endian
+
    DWORD BlockIndexCount
BYTE[84]
+
    --repeat BlockIndexCount
BYTE[24] //FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
          BYTE  Block Type
FLOAT //Little Endian
+
          DWORD Flags
FLOAT //Little Endian
+
          // Local Transform
BYTE[8] //FFFFFFFFFFFFFFFF
+
          WORD    Flags
BYTE[14]
+
          FLOAT   Scale
BYTE[8] //FFFFFFFFFFFFFFFF
+
          FLOAT[9] Orientation //Little Endian
BYTE[5]
+
          FLOAT[3] Position    //Little Endian
</pre>
+
          BYTE LOD Begin
===P14Block===
+
          BYTE LOD End
No examples to decode
+
          // 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
  
 
{{TS3AdvancedModdingHeader}}
 
{{TS3AdvancedModdingHeader}}

Latest revision as of 22: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