Difference between revisions of "Sims 3:0xEA5118B0"

From SimsWiki
Jump to: navigation, search
(Format)
(Fixed broken links)
 
(63 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[[Tutorials:TS3 Advanced Coding Tutorials]]
+
{{TS3AdvancedModdingHeader}}
<hr/>
+
{{TS3Resource
 +
|name=Effect Resource Tree - SWB
 +
|typeid= 0xEA5118B0
 +
|expansion=The Sims 3
 +
}}
 +
<br clear="all">
 +
 
 
==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==
Data is in Big Endian order unless otherwise noted.  This spec is very primitive and needs work.
+
All data is in Big Endian order unless otherwise noted(most floats).  This spec is very primitive and needs work.
<pre>
+
 
WORD Version
+
WORD Version
//BlockSections
+
[[#Effect_Sections|Effect Sections]]
--Repeat until BlockType 0xFFFF
+
[[#Resource_Sections|Resource Sections]]
// Block List
+
[[#VisualEffect_Section|VisualEffect Section]]
WORD BlockType
+
[[#VisualEffect_IDs|VisualEffect IDs]]
WORD BlockVersion
+
[[#VisualEffect_Names|VisualEffect Names]]
DWORD BlockCount
+
 
--BlockCount times
+
===Effect Sections===
--Insert block data(depending on type)
+
====Format====
+
--Repeat until BlockType 0xFFFF
// Fluid Effects
+
// Block List
BYTE[6]
+
WORD BlockType
DWORD
+
WORD Version
WORD
+
DWORD Count
DWORD Count
+
--repeat(Count)
QWORD
+
--Insert block data(depending on type)
QWORD
+
 
DWORD Count1
+
====Blocks====
QWORD //Hashed property name?
+
{| class="wikitable" border="1"
BYTE dataType
+
! BlockType
switch(dataType)
+
!
case 06: QWORD // DDS Instance Id
+
|-
case 00: FLOAT // Little Endian
+
| 0x0001
+
| [[#Particle_Effect|Particle Effect]]
// Main Effect Section
+
|-
BYTE[4]
+
| 0x0002
DWORD EffectCount
+
| [[#Metaparticle_Effect|Metaparticle Effect]]
--Repeat EffectCount
+
|-
// Effect Block Table
+
| 0x0003
DWORD
+
| [[#Decal_Effect|Decal Effect]]
BYTE[21]
+
|-
DWORD Count1
+
| 0x0004
FLOAT[Count1]
+
| [[#Sequence_Effect|Sequence Effect]]
BYTE[16]
+
|-
DWORD BlockIndexCount
+
| 0x0005
--repeat BlockIndexCount
+
| [[#Sound_Effect|Sound Effect]]
BYTE BlockType
+
|-
BYTE[6]
+
| 0x0006
FLOAT
+
| [[#Shake_Effect|Shake Effect]]
FLOAT //Little Endian
+
|-
FLOAT //Little Endian
+
| 0x0007
FLOAT //Little Endian
+
| [[#Camera_Effect|Camera Effect]]
FLOAT //Little Endian
+
|-
FLOAT //Little Endian
+
| 0x0008
FLOAT //Little Endian
+
| [[#Model_Effect|Model Effect]]
FLOAT //Little Endian
+
|-
FLOAT //Little Endian
+
| 0x0009
FLOAT //Little Endian
+
| [[#Screen_Effect|Screen Effect]]
FLOAT //Little Endian
+
|-
FLOAT //Little Endian
+
| 0x000A
FLOAT //Little Endian
+
| Unused
BYTE
+
|-
BYTE
+
| 0x000B
DWORD Count
+
| [[#Game_Effect|Game Effect]]
--repeat Count
+
|-
FLOAT
+
| 0x000C
FLOAT
+
| [[#FastParticle_Effect|Fast Particle Effect]]
FLOAT
+
|-
FLOAT
+
| 0x000D
FLOAT
+
| [[#Distribute_Effect|Distribute Effect]]
FLOAT
+
|-
FLOAT
+
| 0x000E
FLOAT
+
| [[#Ribbon_Effect|Ribbon Effect]]
FLOAT
+
|-
FLOAT
+
| 0x000F
FLOAT
+
| [[#Sprite_Effect|Sprite Effect]]
FLOAT
+
|-
FLOAT
+
|}
DWORD BlockIndex
+
 
BYTE
+
====Particle Effect====
BYTE
+
 
+
======Format======
--RepeatEffectCount
+
DWORD    Flags
// Effect Index
+
FLOAT[2] Particle Lifetime //Little Endian
DWORD BlockTableIndex
+
FLOAT   Preroll Time
ZSTRING EffectName
+
FLOAT[2] Emit Delay //Little Endian
+
FLOAT[2] Emit Retrigger //Little Endian
</pre>
+
FLOAT[3] Emit Direction Bounding Box Minimum //Little Endian
===P1Block===
+
FLOAT[3] Emit Direction Bounding Box Maximum //Little Endian
<pre>
+
FLOAT[2] Emit Speed //Little Endian
BYTE
+
FLOAT[3] Emit Volume Bounding Box Minimum //Little Endian
BYTE
+
FLOAT[3] Emit Volume Bounding Box Maximum //Little Endian
BYTE
+
FLOAT   Emit Torus Width
BYTE
+
FLOAT DurationMin //Little Endian
+
// Emit Rate Curve (Particles/Sim-Minute)
FLOAT DurationMax //Little Endian
+
DWORD Count
FLOAT //Little Endian
+
    FLOAT 
FLOAT //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
FLOAT //Little Endian
+
FLOAT //Little Endian
+
// Size Curve
FLOAT //Little Endian
+
DWORD Count
FLOAT //Little Endian
+
    FLOAT 
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT  Size Vary
FLOAT //Little Endian
+
FLOAT //Little Endian
+
// Aspect Ratio Curve (1 is normal)
FLOAT //Little Endian
+
DWORD Count 
FLOAT //Little Endian
+
    FLOAT 
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT  Aspect Ratio Vary
FLOAT //Little Endian
+
FLOAT  Rotation Vary
FLOAT //Little Endian
+
FLOAT  Rotation Offset
FLOAT
+
DWORD Count1
+
// Rotation Curve (1 = one clockwise rotation = 360 degrees)
FLOAT
+
DWORD Count
FLOAT
+
    FLOAT 
WORD
+
FLOAT
+
// Alpha Curve (0 - 1 = transparent - opaque)
DWORD Count2
+
DWORD Count
FLOAT
+
    FLOAT 
FLOAT
+
DWORD Count3
+
FLOAT  Alpha Vary // 0 - 1 = transparent - opaque
FLOAT
+
FLOAT
+
// Color Curve
FLOAT
+
DWORD Count
BYTE[4]
+
    FLOAT Red  //Little Endian; 0 - 1
DWORD Count4
+
    FLOAT Green //Little Endian; 0 - 1
FLOAT
+
    FLOAT Blue  //Little Endian; 0 - 1
DWORD Count5
+
FLOAT
+
//Color Vary
FLOAT
+
FLOAT Red  //Little Endian; 0 - 1
DWORD Count6
+
FLOAT Green //Little Endian; 0 - 1
FLOAT //Little Endian
+
FLOAT Blue  //Little Endian; 0 - 1
FLOAT //Little Endian
+
FLOAT //Little Endian
+
//Resource reference block
FLOAT //Little Endian
+
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)
FLOAT //Little Endian
+
BYTE   Format
FLOAT //Little Endian
+
BYTE   DrawMode
QWORD //I64 of a DDS resource
+
if ((DrawMode & 0x80) == 0x80) DWORD ???
BYTE[10]
+
if ((DrawMode & 0x40) == 0x40) BYTE  ???
FLOAT
+
// Draw Flags
BYTE[8] // FFFFFFFFFFFFFFFF
+
if (Version >= 6) WORD
BYTE
+
else              BYTE
WORD
+
BYTE  Buffer
BYTE
+
WORD  Layer
BYTE
+
FLOAT  Sort Offset
FLOAT
+
QWORD  Second IID<sub>64</sub> //0xFFFFFFFFFFFFFFFF
BYTE
+
BYTE
+
BYTE    Physics Type
BYTE
+
BYTE    Override Set
FLOAT //Little Endian
+
BYTE    Tile Count U
FLOAT //Little Endian
+
BYTE    Tile Count V
FLOAT //Little Endian
+
BYTE    Align Mode
FLOAT //Little Endian
+
FLOAT   Frame Speed
FLOAT //Little Endian
+
BYTE    Frame Start
FLOAT
+
BYTE    Frame Count
FLOAT
+
BYTE    Frame Random
FLOAT
+
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 Count7
+
FLOAT   Drag
FLOAT
+
FLOAT   Velocity Stretch
FLOAT //Little Endian
+
FLOAT   Screw Rate
FLOAT //Little Endian
+
FLOAT //Little Endian
+
// Wiggles
FLOAT //Little Endian
+
DWORD Count
FLOAT //Little Endian
+
    FLOAT   Time Rate
FLOAT //Little Endian
+
    FLOAT[3] Rate Direction  //Little Endian
BYTE[4] // 00FF00FF
+
    FLOAT[3] Wiggle Direction //Little Endian
BYTE[4]
+
DWORD Count8
+
BYTE Screen Bloom Alpha Rate //0x00
FLOAT
+
BYTE Screen Bloom Alpha Base //0xFF
DWORD Count9
+
BYTE  Screen Bloom Size Rate  //0x00
DWORD
+
BYTE  Screen Bloom Size Base; //0xFF
QWORD
+
FLOAT
+
// Loop Box Color Curve
FLOAT
+
DWORD Count
FLOAT
+
    FLOAT Red  //Little Endian; 0 - 1
FLOAT
+
    FLOAT Green //Little Endian; 0 - 1
BYTE[4]
+
    FLOAT Blue  //Little Endian; 0 - 1
ZSTRING
+
ZSTRING
+
// Loop Box Alpha Curve
DWORD Count
+
DWORD Count
FLOAT //Little Endian
+
    FLOAT // 0 - 1 = transparent - opaque
FLOAT //Little Endian
+
FLOAT //Little Endian
+
// Surfaces
FLOAT
+
DWORD Count
BYTE[16]
+
    DWORD  Flags //0x3FFF mask?
FLOAT
+
    QWORD  IID<sub>64</sub> of a surface map(see [[#Materials|Material Section]] below)?
FLOAT //Little Endian
+
    FLOAT  Bounce            //Should be DWORD?
FLOAT //Little Endian
+
    FLOAT  Slide            //Should be DWORD?
FLOAT //Little Endian
+
    FLOAT  Collision Radius  //Should be DWORD?
BYTE[24] //FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
    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
+
    DWORD Count
FLOAT
+
        FLOAT[3] //Little Endian
FLOAT
+
DWORD Count10
+
FLOAT    Map Bounce
FLOAT
+
FLOAT    Map Repulse Height
BYTE
+
FLOAT    Map Repulse Strength
FLOAT //Little Endian
+
FLOAT    Map Repulse Scout Distance
FLOAT //Little Endian
+
FLOAT    Map Repulse Vertical
FLOAT //Little Endian
+
FLOAT   Map Repulse Kill Height // -1000000000.0
DWORD Count11
+
FLOAT   Probability Death // 0.0
FLOAT
+
FLOAT[2] Altitude Range //Little Endian (-10000.0, 10000.0)
FLOAT
+
QWORD    Force Map IID<sub>64</sub>      //0xFFFFFFFFFFFFFFFF
DWORD
+
QWORD    Emit Rate Map IID<sub>64</sub>  //0xFFFFFFFFFFFFFFFF
BYTE[16]
+
QWORD    Emit Color Map IID<sub>64</sub> //0xFFFFFFFFFFFFFFFF
DWORD Count12
+
FLOAT //Little Endian
+
// Random Walk
FLOAT //Little Endian
+
FLOAT[2] Time    //Little Endian
FLOAT //Little Endian
+
FLOAT[2] Strength //Little Endian
</pre>
+
FLOAT   Turn Range
===P2Block===
+
FLOAT    Turn Offset
<pre>
+
FLOAT    Mix
BYTE[6]
+
// Turn Offset Curve
WORD
+
DWORD Count
FLOAT DurationMin //Little Endian
+
    FLOAT
FLOAT DurationMax//Little Endian
+
BYTE    Walk Loop Type
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT[3] Attractor Origin //Little Endian
FLOAT //Little Endian
+
FLOAT //Little Endian
+
// Attractor Strength Curve
FLOAT //Little Endian
+
DWORD Count
FLOAT //Little Endian
+
    FLOAT  
FLOAT //Little Endian
+
FLOAT  Range
FLOAT //Little Endian
+
FLOAT  Kill Range
FLOAT //Little Endian
+
FLOAT //Little Endian
+
// Path Points
FLOAT //Little Endian
+
DWORD Count
FLOAT //Little Endian
+
    FLOAT[3] Position //Little Endian
FLOAT //Little Endian
+
    FLOAT[3] Velocity //Little Endian
FLOAT //Little Endian
+
    FLOAT   Time
FLOAT //Little Endian
+
FLOAT //Little Endian
+
if (Version >= 2)
FLOAT //Little Endian
+
    FLOAT[3] //Little Endian
FLOAT //Little Endian
+
    DWORD Count
FLOAT //Little Endian
+
        FLOAT[3] //Little Endian
FLOAT
+
DWORD Count1
+
if (Version >=3) BYTE 
FLOAT
+
if (Version >=4) FLOAT  
FLOAT
+
if (Version >=5) FLOAT
DWORD
+
 
DWORD Count2
+
====Metaparticle Effect====
FLOAT
+
=====Overview=====
FLOAT
+
This type takes an existing effect and modifies it
DWORD
+
=====Format=====
BYTE[4]
+
QWORD    Flags
DWORD
+
FLOAT[2] Particle Lifetime //Little Endian
BYTE[4]
+
FLOAT   Preroll Time
DWORD Count3
+
FLOAT[2] Emit Delay //Little Endian
FLOAT
+
FLOAT[2] Emit Retrigger //Little Endian
BYTE[24]
+
FLOAT[3] Emit Direction Bounding Box Minimum //Little Endian
DWORD Count4
+
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
BYTE[8]
+
FLOAT   Emit Torus Width
DWORD Count5
+
BYTE[3]
+
// Emit Rate Curve (Particles/Sim-Minute)
FLOAT
+
DWORD Count
FLOAT
+
    FLOAT  
FLOAT
+
BYTE[9]
+
FLOAT   Emit Rate Curve Time
DWORD Count6
+
DWORD    Emit Rate Curve Cycles; Should be FLOAT?
FLOAT
+
FLOAT   Emit Rate Speed Scale
FLOAT
+
ZSTRING
+
// Size Curve
ZSTRING
+
DWORD Count
BYTE
+
    FLOAT  
BYTE[8]
+
FLOAT //Little Endian
+
FLOAT Size Vary
BYTE[20]
+
FLOAT
+
// Pitch Curve
BYTE[12]
+
DWORD Count
FLOAT
+
    FLOAT  
BYTE[8]
+
BYTE[4] //00FF00FF
+
// Roll Curve
BYTE[8]
+
DWORD Count
DWORD Count7
+
    FLOAT  
DWORD
+
BYTE[30]
+
// Heading (Yaw) Curve
DWORD Count
+
DWORD Count
FLOAT //Little Endian
+
    FLOAT  
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT Pitch Vary
FLOAT
+
FLOAT Roll Vary
BYTE[16]
+
FLOAT Heading (Yaw) Vary
FLOAT
+
FLOAT //Little Endian
+
FLOAT Pitch Offset
FLOAT //Little Endian
+
FLOAT Roll Offset
FLOAT //Little Endian
+
FLOAT Heading (Yaw) Offset
BYTE[24] //FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
FLOAT //Little Endian
+
// 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
+
    FLOAT Blue  //Little Endian; 0 - 1
FLOAT
+
FLOAT
+
// Color Vary
DWORD Count8
+
FLOAT Red  //Little Endian; 0 - 1
FLOAT
+
FLOAT Green //Little Endian; 0 - 1
FLOAT //Little Endian
+
FLOAT Blue  //Little Endian; 0 - 1
FLOAT //Little Endian
+
FLOAT //Little Endian
+
// Alpha Curve (0 - 1 = transparent - opaque)
FLOAT //Little Endian
+
DWORD Count
FLOAT
+
    FLOAT 
FLOAT
+
FLOAT
+
FLOAT Alpha Vary
BYTE
+
DWORD Count9
+
ZSTRING Base Effect  //See [[#VisualEffect_Names|Effect Names]] below
BYTE[8]
+
ZSTRING Death Effect //See [[#VisualEffect_Names|Effect Names]] below
FLOAT //Little Endian
+
FLOAT //Little Endian
+
BYTE     Align Mode
DWORD Count
+
FLOAT[3] Directional Forces Sum //Little Endian
FLOAT
+
FLOAT[3] Global Forces Sum //Little Endian
FLOAT
+
FLOAT    Wind Strength
FLOAT
+
FLOAT    Gravity Strength
DWORD Count10
+
FLOAT    Radial Force
FLOAT //Little Endian
+
FLOAT[3] Radial Force Location //Little Endian
FLOAT //Little Endian
+
FLOAT    Drag
FLOAT //Little Endian
+
FLOAT    Screw Rate
FLOAT //Little Endian
+
FLOAT //Little Endian
+
// Wiggles
FLOAT //Little Endian
+
DWORD Count
FLOAT timecode
+
    FLOAT   Time Rate
BYTE[4]
+
    FLOAT[3] Rate Direction  //Little Endian
</pre>
+
    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
 +
 
 +
====Decal Effect====
 +
=====Overview=====
 +
This is mostly used for things like the build tool UI tools(i.e. the terrain tool circle). 
 +
=====Format=====
 +
 
 +
DWORD Flags; 0x7F mask?
 +
QWORD  IID<sub>64</sub> of a [[Sims_3:0x00B2D882|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 IID<sub>64</sub> //0xFFFFFFFFFFFFFFFF
 +
if (Version >= 2) BYTE
 +
 
 +
====Sequence Effect====
 +
=====Overivew=====
 +
Combines effect compilations so they play out sequentially
 +
=====Format=====
 +
 
 +
DWORD Count1
 +
FLOAT[2] Time Range //Little Endian
 +
ZSTRING  Effect Name //See [[#VisualEffect_Names|Effect Names]] below
 +
DWORD Flags //0xF mask?
 +
 
 +
====Sound Effect====
 +
=====Overview=====
 +
Plays a sound
 +
=====Format=====
 +
 
 +
DWORD  Flags //0xF mask?
 +
QWORD  IID<sub>64</sub> of an [[Sims_3:0x8070223D|Audio Tuner]]
 +
FLOAT Location Update Delta
 +
FLOAT Play Time
 +
FLOAT  Volume
 +
if (Version >= 2) BYTE
 +
 
 +
====Shake Effect====
 +
=====Format=====
 +
 
 +
FLOAT  Lifetime
 +
FLOAT  Fade Time
 +
 +
// Strength Curve
 +
DWORD Count1
 +
    FLOAT   
 +
 +
// Frequency Curve
 +
DWORD Count2
 +
    FLOAT   
 +
 +
FLOAT Aspect Ratio
 +
BYTE Base Table Type
 +
FLOAT Falloff
 +
 
 +
====Camera Effect====
 +
=====Format=====
 +
 
 +
DWORD Flags //0x3FF mask?
 +
WORD  View Flags
 +
FLOAT Lifetime
 +
 +
// Heading (Yaw) Curve
 +
DWORD Count1
 +
    FLOAT  
 +
 +
// Pitch Curve
 +
DWORD Count2
 +
    FLOAT  
 +
 +
// Roll Curve
 +
DWORD Count3
 +
    FLOAT   
 +
 +
// Distance Curve
 +
DWORD Count4
 +
    FLOAT   
 +
 +
// FOV Curve
 +
DWORD Count5
 +
    FLOAT   
 +
 +
// Near Clip Curve
 +
DWORD Count6
 +
    FLOAT   
 +
 +
// Far Clip Curve
 +
DWORD Count7
 +
    FLOAT   
 +
 +
QWORD  Camera ID
 +
WORD  Cubemap Resource
 +
 
 +
====Model Effect====
 +
=====Format=====
 +
DWORD  Flags //0x3 mask?
 +
QWORD  Resource 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
  
===P3Block===
+
====Sprite Effect====
<pre>
+
=====Overview=====
BYTE[4]
+
Examples of this effect first appear in the Create A Pet Demo
QWORD //I64 of a DDS resource
+
=====Format=====
BYTE[6]
+
DWORD
FLOAT
+
DWORD
DWORD Count1
+
DWORD
FLOAT
+
FLOAT
DWORD Count2
+
WORD
FLOAT
+
DWORD Count
DWORD Count3
+
    FLOAT
FLOAT
+
DWORD Count
DWORD Count4
+
    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
+
DWORD Count
DWORD Count5
+
    FLOAT
FLOAT
+
FLOAT
FLOAT
+
FLOAT
FLOAT
+
FLOAT
BYTE[4]
+
FLOAT[3] //Little Endian
FLOAT
+
FLOAT[3] //Little Endian
BYTE[8]
+
FLOAT
BYTE[8] //FFFFFFFFFFFFFFFF
+
FLOAT
BYTE
+
FLOAT
</pre>
+
FLOAT
===P4Block===
+
FLOAT
<pre>
+
FLOAT
DWORD Count1
+
FLOAT
FLOAT //Little Endian
+
FLOAT
FLOAT //Little Endian
+
FLOAT
ZSTRING
+
FLOAT
DWORD
+
FLOAT
</pre>
+
FLOAT
===P5Block===
+
FLOAT
<pre>
+
FLOAT
DWORD
+
FLOAT
QWORD //I64 of an Audio resource
+
FLOAT
FLOAT
+
FLOAT
+
//Resource reference block
FLOAT
+
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)
</pre>
+
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
  
===P6Block===
+
===Resource Sections===
<pre>
+
====Format====
FLOAT
+
  --Repeat until ResourceType 0xFFFF
FLOAT
+
    // Block List
DWORD Count1
+
    WORD    ResourceType
FLOAT
+
    WORD    Version
DWORD Count2
+
    DWORD    Count
FLOAT
+
    --repeat(Count)
FLOAT
+
        --Insert resource data(depending on type)
BYTE
+
====Resources====
FLOAT
+
{| class="wikitable" border="1"
</pre>
+
! 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
  
===P7Block===
+
=====Material=====
<pre>
+
======Overview======
DWORD
+
References shaders from "Shaders_Win32.precomp", making them available to the particle effects in the previous section and overriding some parameters.
WORD
+
======Format======
FLOAT
+
QWORD Hashed name
DWORD Count1
+
QWORD [[#Shaders|Shader]]
FLOAT
+
DWORD Count1
DWORD Count2
+
    QWORD [[#Properties|Property Id]]
FLOAT
+
    BYTE dataType
DWORD Count3
+
    switch(dataType)
FLOAT
+
        case 00: FLOAT  
DWORD Count4
+
        case 01: DWORD
FLOAT
+
        case 02: BYTE  // Boolean 0x00 or 0xFF
BYTE[17]
+
        case 03: DWORD Count1
DWORD
+
        --repeat Count1
BYTE
+
            FLOAT
</pre>
+
        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>
  
===P8Block===
+
======Shaders======
<pre>
+
[[FNV|FNV32]] Hashed shader names from "Shaders_Win32.precomp"
BYTE[12]
+
{| class="wikitable" border="1"
FLOAT
+
! ID
FLOAT //Little Endian
+
! Name
FLOAT //Little Endian
+
|-
FLOAT //Little Endian
+
| 0x8FAB3764
FLOAT
+
| Fluid Effect
BYTE[4]
+
|-
BYTE[8] //FFFFFFFFFFFFFFFF
+
| 0x4968A478
BYTE
+
| Sim Censor
</pre>
+
|-
 +
|}
  
===P9Block===
+
======Properties======
<pre>
+
[[FNV|FNV32]] Hashed property names from "Shaders_Win32.precomp"
BYTE type
+
DWORD
+
DWORD Count1
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
DWORD Count2
+
FLOAT
+
FLOAT
+
FLOAT
+
if(type == 0) BYTE[4] else BYTE[12]
+
BYTE[8]
+
BYTE[21]
+
BYTE[3]
+
</pre>
+
  
===P10Block===
+
{| class="wikitable" border="1"
No examples to decode
+
! 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
 +
|-
 +
|}
  
===P11Block===
+
===VisualEffect Section===
No examples to decode
+
====Overview====
 +
This section combines multiple effects from the previous sections.  The same effects are often used more than once here but with different offsets and parameters.
 +
====Format====
 +
WORD SectionType //0x0000
 +
WORD Version    //0x0002
 +
DWORD EffectCount
 +
--Repeat EffectCount
 +
    // Effect Block Table
 +
    DWORD    Flags
 +
    DWORD    Component App Flags Mask
 +
    DWORD    Notify Message ID
 +
    FLOAT[2] Screen Size Range //Little Endian
 +
    FLOAT    Cursor Active Distance
 +
    BYTE    Cursor Button
 +
    // LOD Distances
 +
    DWORD Count
 +
        FLOAT
 +
    FLOAT[3] Extended LOD Weights //Little Endian
 +
    DWORD    Seed
 +
    DWORD BlockIndexCount
 +
    --repeat BlockIndexCount
 +
          BYTE  Block Type
 +
          DWORD Flags
 +
          // Local Transform
 +
          WORD    Flags
 +
          FLOAT    Scale
 +
          FLOAT[9] Orientation //Little Endian
 +
          FLOAT[3] Position    //Little Endian
 +
          BYTE LOD Begin
 +
          BYTE LOD End
 +
          // LOD Scales
 +
          DWORD Count
 +
          --repeat Count
 +
            FLOAT Emit Scale
 +
            FLOAT Size Scale
 +
            FLOAT Alpha Scale
 +
          FLOAT Emit Scale Begin  // always 1.0
 +
          FLOAT Emit Scale End    // always 1.0
 +
          FLOAT Size Scale Begin  // always 1.0
 +
          FLOAT Size Scale End    // always 1.0
 +
          FLOAT Alpha Scale Begin // always 1.0
 +
          FLOAT Alpha Scale End  // always 1.0
 +
          DWORD App Flags
 +
          DWORD App Flags Mask
 +
          WORD  Selection Group
 +
          WORD  Selection Chance
 +
          FLOAT Time Scale
 +
          DWORD BlockIndex
 +
          if (Version >= 2)
 +
              BYTE
 +
              BYTE
 +
          if (Version >= 3)
 +
              DWORD Count
 +
              --repeat Count
 +
                  FLOAT
  
===P12Block===
+
===VisualEffect Handles===
No examples to decode
+
====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. 
  
===P13Block===
+
====Visual Effect IDs====
Only 1 example
+
=====Format=====
<pre>
+
--Repeat until index 0xFFFFFFFF
DWORD
+
DWORD CompilationIndex //see previous section
DWORD
+
QWORD Effect ID //FNV Hash of effect name?
ZSTRING
+
BYTE[5]
+
FLOAT
+
BYTE[2]
+
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
+
BYTE[84]
+
BYTE[24] //FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
FLOAT //Little Endian
+
FLOAT //Little Endian
+
BYTE[8] //FFFFFFFFFFFFFFFF
+
BYTE[14]
+
BYTE[8] //FFFFFFFFFFFFFFFF
+
BYTE[5]
+
</pre>
+
===P14Block===
+
No examples to decode
+
  
 +
====VisualEffect Names====
 +
=====Format=====
 +
--Repeat until index 0xFFFFFFFF
 +
DWORD CompilationIndex //see previous section
 +
ZSTRING EffectName
  
<hr/>
+
{{TS3AdvancedModdingHeader}}
[[Tutorials:TS3 Advanced Coding Tutorials]]
+

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