Skip to content
This repository has been archived by the owner on Jan 24, 2024. It is now read-only.

0xEA5118B0

ChaosMageX edited this page Aug 13, 2014 · 12 revisions

#Swarm Binary Effects Resource Tree

##Overview These internal files are known as Swarm Binaries, because they are read and rendered by the Swarm VFX System originally developed by Andrew Willmott. Variants of this system are used not only The Sims 3, but also The Sims 2, The Sims 4, SimCity 4, SimCity 5, and Spore. Swarm Binaries are compiled from text files written in Arg Script language. More info can be found in presentations here:

http://www.andrewwillmott.com/talks/swarm-procedural-content

The internal format for Swarm Binaries was derived primarily by analyzing internal code for parsing them, hidden within The Sims 3 main executable itself.

The field names were initially guessed at by playing around with their values and observing the changes to the effect in The Sims 3 itself, by using an effect playing debug object, and later by using a dedicated Effect Player which uses the game's engine API included with The Sims 3 Create-A-World Tool. The actual field names were finally found as symbols for Swarm Binary structures within PDB files included with leaked dev versions of SimCity 5, and correlated to corresponding fields in The Sims 3's Swarm Binary format, which is why some of the fields are still unknown.

Format Facts:

  • It is primarily Big Endian, but groups of floats denoting vectors are swizzled to Little Endian.
  • Curves are used to determine how the effects change over time.
  • There are often "vary" and "offset" fields corresponding to this curves that are used to adjust the values using the following formula:
     random(1 - vary, 1 + vary) * current_value + offset
    
  • The format can be easily expanded by increasing the version of a component type and/or adding entirely new components.

##Format All data is in Big Endian order unless otherwise noted(most floats). This spec is very primitive and needs work.

 WORD	Version
 Effect Sections 		
 Resource Sections 				
 VisualEffect Section
 VisualEffect IDs
 VisualEffect Names

###Effect Sections ####Format

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

####Blocks

  BlockType
0x0001 Particle Effect
0x0002 Metaparticle Effect
0x0003 Decal Effect
0x0004 Sequence Effect
0x0005 Sound Effect
0x0006 Shake Effect
0x0007 Camera Effect
0x0008 Model Effect
0x0009 Screen Effect
0x000A Unused
0x000B Game Effect
0x000C Fast Particle Effect
0x000D Distribute Effect
0x000E Ribbon Effect
0x000F Sprite Effect

####Particle Effect

######Format

 DWORD    Flags
 FLOAT[2] Particle Lifetime //Little Endian
 FLOAT    Preroll Time
 FLOAT[2] Emit Delay //Little Endian
 FLOAT[2] Emit Retrigger //Little Endian
 FLOAT[3] Emit Direction Bounding Box Minimum //Little Endian
 FLOAT[3] Emit Direction Bounding Box Maximum //Little Endian
 FLOAT[2] Emit Speed //Little Endian
 FLOAT[3] Emit Volume Bounding Box Minimum //Little Endian
 FLOAT[3] Emit Volume Bounding Box Maximum //Little Endian
 FLOAT    Emit Torus Width
 
 // Emit Rate Curve (Particles/Sim-Minute)
 DWORD Count 
     FLOAT   
 
 FLOAT  Emit Rate Curve Time
 WORD   Emit Rate Curve Cycles
 FLOAT  Emit Rate Speed Scale
 
 // Size Curve
 DWORD Count 
     FLOAT   
 
 FLOAT  Size Vary
 
 // Aspect Ratio Curve (1 is normal)
 DWORD Count  
     FLOAT   
 
 FLOAT  Aspect Ratio Vary
 FLOAT  Rotation Vary
 FLOAT  Rotation Offset
 
 // Rotation Curve (1 = one clockwise rotation = 360 degrees)
 DWORD Count 
     FLOAT   
 
 // Alpha Curve (0 - 1 = transparent - opaque)
 DWORD Count 
     FLOAT   
 
 FLOAT  Alpha Vary // 0 - 1 = transparent - opaque
 
 // Color Curve
 DWORD Count 
     FLOAT Red   //Little Endian; 0 - 1
     FLOAT Green //Little Endian; 0 - 1
     FLOAT Blue  //Little Endian; 0 - 1
 
 //Color Vary
 FLOAT Red   //Little Endian; 0 - 1
 FLOAT Green //Little Endian; 0 - 1
 FLOAT Blue  //Little Endian; 0 - 1
 
 //Resource reference block
 QWORD  IID64 of a an image(DDS), model(VPXY), or material(see Material Section below)
 BYTE   Format
 BYTE   DrawMode
 if ((DrawMode & 0x80) == 0x80) DWORD ??? 
 if ((DrawMode & 0x40) == 0x40) BYTE  ???
 // Draw Flags
 if (Version >= 6) WORD
 else              BYTE
 BYTE   Buffer
 WORD   Layer
 FLOAT  Sort Offset
 QWORD  Second IID64 //0xFFFFFFFFFFFFFFFF
 
 BYTE     Physics Type
 BYTE     Override Set
 BYTE     Tile Count U
 BYTE     Tile Count V
 BYTE     Align Mode
 FLOAT    Frame Speed
 BYTE     Frame Start
 BYTE     Frame Count
 BYTE     Frame Random
 FLOAT[3] Directional Forces Sum //Little Endian
 FLOAT    Wind Strength
 FLOAT    Gravity Strength
 FLOAT    Radial Force
 FLOAT[3] Radial Force Location //Little Endian
 FLOAT    Drag
 FLOAT    Velocity Stretch
 FLOAT    Screw Rate
 
 // Wiggles 
 DWORD Count 
     FLOAT    Time Rate
     FLOAT[3] Rate Direction   //Little Endian
     FLOAT[3] Wiggle Direction //Little Endian
 
 BYTE  Screen Bloom Alpha Rate //0x00
 BYTE  Screen Bloom Alpha Base //0xFF
 BYTE  Screen Bloom Size Rate  //0x00
 BYTE  Screen Bloom Size Base; //0xFF
 
 // Loop Box Color Curve
 DWORD Count 
     FLOAT Red   //Little Endian; 0 - 1
     FLOAT Green //Little Endian; 0 - 1
     FLOAT Blue  //Little Endian; 0 - 1
 
 // Loop Box Alpha Curve
 DWORD Count 
     FLOAT // 0 - 1 = transparent - opaque
 
 // Surfaces
 DWORD Count 
     DWORD  Flags //0x3FFF mask?
     QWORD  IID64 of a surface map(see Material Section below)?
     FLOAT  Bounce            //Should be DWORD?
     FLOAT  Slide             //Should be DWORD?
     FLOAT  Collision Radius  //Should be DWORD?
     FLOAT  Death Probability //Should be DWORD?
     DWORD  Pin Offset
     ZSTRING 
     ZSTRING
     // Surface Points
     DWORD Count 
         FLOAT[3] //Little Endian
 
 FLOAT    Map Bounce
 FLOAT    Map Repulse Height
 FLOAT    Map Repulse Strength
 FLOAT    Map Repulse Scout Distance
 FLOAT    Map Repulse Vertical
 FLOAT    Map Repulse Kill Height // -1000000000.0
 FLOAT    Probability Death // 0.0
 FLOAT[2] Altitude Range //Little Endian (-10000.0, 10000.0)
 QWORD    Force Map IID64      //0xFFFFFFFFFFFFFFFF
 QWORD    Emit Rate Map IID64  //0xFFFFFFFFFFFFFFFF
 QWORD    Emit Color Map IID64 //0xFFFFFFFFFFFFFFFF
 
 // Random Walk
 FLOAT[2] Time     //Little Endian
 FLOAT[2] Strength //Little Endian
 FLOAT    Turn Range
 FLOAT    Turn Offset
 FLOAT    Mix
 // Turn Offset Curve
 DWORD Count 
     FLOAT  
 BYTE     Walk Loop Type
 
 FLOAT[3] Attractor Origin //Little Endian
 
 // Attractor Strength Curve
 DWORD Count 
     FLOAT   
 FLOAT  Range
 FLOAT  Kill Range
 
 // Path Points
 DWORD Count 
     FLOAT[3] Position //Little Endian
     FLOAT[3] Velocity //Little Endian
     FLOAT    Time
 
 if (Version >= 2)
     FLOAT[3] //Little Endian
     DWORD Count 
         FLOAT[3] //Little Endian
 
 if (Version >= 3) BYTE  
 if (Version >= 4) FLOAT 
 
 if (Version >= 5) 
     FLOAT[2] //Little Endian
     BYTE
 
 if (Version >= 6) FLOAT[2] //Little Endian
 else              FLOAT
 
 if (Version >= 7) FLOAT[2] //Little Endian
 
 DWORD
 DWORD
 BYTE  bool1 //0x00 or 0xFF
 if (bool1 == 0xFF)
     FLOAT[3] //Little Endian
     
     if (Version >= 6) FLOAT[2] //Little Endian
     else              FLOAT
     
     if (Version >= 7) FLOAT[2] //Little Endian
     DWORD
     DWORD
 
 if (Version >= 6)
     BYTE bool2 //0x00 or 0xFF
     if (bool2 == 0xFF)
         DWORD
         BYTE
         BYTE
         BYTE

####Metaparticle Effect #####Overview This type takes an existing effect and modifies it #####Format

 QWORD    Flags
 FLOAT[2] Particle Lifetime //Little Endian
 FLOAT    Preroll Time
 FLOAT[2] Emit Delay //Little Endian
 FLOAT[2] Emit Retrigger //Little Endian
 FLOAT[3] Emit Direction Bounding Box Minimum //Little Endian
 FLOAT[3] Emit Direction Bounding Box Maximum //Little Endian
 FLOAT[2] Emit Speed //Little Endian
 FLOAT[3] Emit Volume Bounding Box Minimum //Little Endian
 FLOAT[3] Emit Volume Bounding Box Maximum //Little Endian
 FLOAT    Emit Torus Width
 
 // Emit Rate Curve (Particles/Sim-Minute)
 DWORD Count 
     FLOAT   
 
 FLOAT    Emit Rate Curve Time
 DWORD    Emit Rate Curve Cycles; Should be FLOAT?
 FLOAT    Emit Rate Speed Scale
 
 // Size Curve
 DWORD Count 
     FLOAT   
 
 FLOAT  Size Vary
 
 // Pitch Curve
 DWORD Count 
     FLOAT   
 
 // Roll Curve
 DWORD Count 
     FLOAT   
 
 // Heading (Yaw) Curve
 DWORD Count 
     FLOAT   
 
 FLOAT Pitch Vary
 FLOAT Roll Vary
 FLOAT Heading (Yaw) Vary
 
 FLOAT Pitch Offset
 FLOAT Roll Offset
 FLOAT Heading (Yaw) Offset
 
 // Color Curve
 DWORD Count 
     FLOAT Red   //Little Endian; 0 - 1
     FLOAT Green //Little Endian; 0 - 1
     FLOAT Blue  //Little Endian; 0 - 1
 
 // Color Vary
 FLOAT Red   //Little Endian; 0 - 1
 FLOAT Green //Little Endian; 0 - 1
 FLOAT Blue  //Little Endian; 0 - 1
 
 // Alpha Curve (0 - 1 = transparent - opaque)
 DWORD Count 
     FLOAT   
 
 FLOAT Alpha Vary
 
 ZSTRING Base Effect  //See Effect Names below
 ZSTRING Death Effect //See Effect Names below
 
 BYTE     Align Mode
 FLOAT[3] Directional Forces Sum //Little Endian
 FLOAT[3] Global Forces Sum //Little Endian
 FLOAT    Wind Strength
 FLOAT    Gravity Strength
 FLOAT    Radial Force
 FLOAT[3] Radial Force Location //Little Endian
 FLOAT    Drag
 FLOAT    Screw Rate
 
 // Wiggles 
 DWORD Count 
     FLOAT    Time Rate
     FLOAT[3] Rate Direction   //Little Endian
     FLOAT[3] Wiggle Direction //Little Endian
 
 BYTE  Screen Bloom Alpha Rate //0x00
 BYTE  Screen Bloom Alpha Base //0xFF
 BYTE  Screen Bloom Size Rate  //0x00
 BYTE  Screen Bloom Size Base  //0xFF
 
 // Loop Box Color Curve
 DWORD Count 
     FLOAT Red   //Little Endian; 0 - 1
     FLOAT Green //Little Endian; 0 - 1
     FLOAT Blue  //Little Endian; 0 - 1
 
 // Loop Box Alpha Curve
 DWORD Count 
     FLOAT // 0 - 1 = transparent - opaque
 
 // Surfaces
 DWORD Count 
     DWORD  Flags //0x3FFF mask?
     QWORD  IID64 of a surface map(see Material Section below)?
     FLOAT  Bounce            //Should be DWORD?
     FLOAT  Slide             //Should be DWORD?
     FLOAT  Collision Radius  //Should be DWORD?
     FLOAT  Death Probability //Should be DWORD?
     DWORD  Pin Offset
     ZSTRING 
     ZSTRING 
     // Surface Points
     DWORD Count 
         FLOAT[3] //Little Endian
 
 FLOAT    Map Bounce
 FLOAT    Map Repulse Height
 FLOAT    Map Repulse Strength
 FLOAT    Map Repulse Scout Distance
 FLOAT    Map Repulse Vertical
 FLOAT    Map Repulse Kill Height // -1000000000.0
 FLOAT    Probability Death // 0.0
 FLOAT[2] Altitude Range //Little Endian (-10000.0, 10000.0)
 QWORD    Force Map IID64      //0xFFFFFFFFFFFFFFFF
 QWORD    Emit Rate Map IID64  //0xFFFFFFFFFFFFFFFF
 QWORD    Emit Color Map IID64 //0xFFFFFFFFFFFFFFFF
 
 // Random Walk 1
 FLOAT[2] Time     //Little Endian
 FLOAT[2] Strength //Little Endian
 FLOAT    Turn Range
 FLOAT    Turn Offset
 FLOAT    Mix
 // Turn Offset Curve
 DWORD Count 
      FLOAT  
 BYTE     Walk Loop Type
 
 // Random Walk 2
 FLOAT[2] Time     //Little Endian
 FLOAT[2] Strength //Little Endian
 FLOAT    Turn Range
 FLOAT    Turn Offset
 FLOAT    Mix
 // Turn Offset Curve
 DWORD Count 
      FLOAT  
 BYTE     Walk Loop Type
 
 FLOAT[3] Random Walk Preferred Direction //Little Endian
 
 FLOAT Align Damping
 FLOAT Bank Amount
 FLOAT Bank Damping
 
 FLOAT[3] Attractor Origin //Little Endian
 
 // Attractor Strength Curve
 DWORD Count 
     FLOAT   
 FLOAT  Range
 FLOAT  Kill Range
 
 // Path Points
 DWORD Count 
     FLOAT[3] Position //Little Endian
     FLOAT[3] Velocity //Little Endian
     FLOAT    Time
 
 FLOAT  Tractor Reset Speed

####Decal Effect #####Overview This is mostly used for things like the build tool UI tools(i.e. the terrain tool circle).
#####Format

 DWORD Flags; 0x7F mask?
 QWORD  IID64 of a DDS Resource
 BYTE  
 DWORD
 BYTE  
 DWORD
 FLOAT  Lifetime
 
 // Rotation Curve
 DWORD Count1 
     FLOAT    
 
 // Size Curve
 DWORD Count2 
     FLOAT    
 
 // Alpha Curve
 DWORD Count3 
     FLOAT    
 
 // Color Curve
 DWORD Count4 
 	FLOAT Red   //Little Endian; 0 - 1
 	FLOAT Green //Little Endian; 0 - 1
 	FLOAT Blue  //Little Endian; 0 - 1
 
 // Aspect Ratio Curve
 DWORD Count5 
     FLOAT    
 
 FLOAT    Alpha Vary
 FLOAT    Size Vary
 FLOAT    Rotation Vary
 FLOAT    Texture Repeat
 FLOAT[2] Texture Offset //Little Endian
 QWORD    Emit Color Map IID64 //0xFFFFFFFFFFFFFFFF
 if (Version >= 2) BYTE

####Sequence Effect #####Overivew Combines effect compilations so they play out sequentially #####Format

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

####Sound Effect #####Overview Plays a sound #####Format

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

####Shake Effect #####Format

 FLOAT  Lifetime
 FLOAT  Fade Time
 
 // Strength Curve
 DWORD Count1 
     FLOAT    
 
 // Frequency Curve
 DWORD Count2 
     FLOAT    
 
 FLOAT Aspect Ratio
 BYTE  Base Table Type
 FLOAT Falloff

####Camera Effect #####Format

 DWORD  Flags //0x3FF mask?
 WORD   View Flags
 FLOAT  Lifetime
 
 // Heading (Yaw) Curve
 DWORD Count1 
     FLOAT    
 
 // Pitch Curve
 DWORD Count2 
     FLOAT    
 
 // Roll Curve
 DWORD Count3 
     FLOAT    
 
 // Distance Curve
 DWORD Count4 
     FLOAT    
 
 // FOV Curve
 DWORD Count5 
     FLOAT    
 
 // Near Clip Curve
 DWORD Count6 
     FLOAT    
 
 // Far Clip Curve
 DWORD Count7 
     FLOAT    
 
 QWORD  Camera ID
 WORD   Cubemap Resource

####Model Effect #####Format

 DWORD  Flags //0x3 mask?
 QWORD  Resource IID64
 FLOAT  Size
 
 // Color
 FLOAT Red   //Little Endian; 0 - 1
 FLOAT Green //Little Endian; 0 - 1
 FLOAT Blue  //Little Endian; 0 - 1
 
 FLOAT Alpha // 0 - 1 = transparent - opaque
 
 // Animation Curves
 DWORD Count 
     FLOAT[2] Length Range //Little Endian
     // Curve
     DWORD Count 
         FLOAT  
    DWORD  Curve Vary
    DWORD  Speed Scale
    BYTE   Channel ID
    BYTE   Mode
 
 QWORD  Material IID64; usually 0xFFFFFFFFFFFFFFFF
 BYTE   Override Set

####Screen Effect #####Format

 BYTE  Mode
 DWORD Flags //0x3 mask?
 
 // Color Curve
 DWORD Count 
 	FLOAT Red   //Little Endian; 0 - 1
 	FLOAT Green //Little Endian; 0 - 1
 	FLOAT Blue  //Little Endian; 0 - 1
 
 // Strength Curve
 DWORD Count 
     FLOAT   
 
 // Distance Curve
 DWORD Count 
     FLOAT   
 
 FLOAT  Lifetime
 FLOAT  Delay
 FLOAT  Falloff
 FLOAT  Distance Base
 QWORD  Texture IID64
 
 // Filters
 DWORD Count 
     BYTE   Type
     BYTE   Destination
     QWORD  Source
     // Parameters
     DWORD Count
         BYTE
 
 // Temporary Filter Buffers
 DWORD Count 
     FLOAT Screen Ratio //Should be DWORD?
     FLOAT Size         //should be DWORD?
 
 // Float Parameters
 DWORD Count 
     FLOAT   
 
 // Vector 3 Parameters
 DWORD Count  
     FLOAT[3] //Little Endian
 
 // Vector 2 Parameters
 DWORD Count  
     FLOAT[2] //Little Endian
 
 // Resource ID Parameters
 DWORD Count 
     QWORD   

####Game Effect #####Overview It appears as though this effect can be used to send OS style messages, perhaps for manipulating the mouse for tutorials or something. There are currently no examples in The Sims 3 to be sure. #####Format

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

####FastParticle Effect #####Overview It appears as though this effect is a simplified version of the Particle Effect for faster computations? There are currently no examples in The Sims 3 to be sure. #####Format

 DWORD    Flags //0x1FFF mask?
 FLOAT[2] Particle Lifetime //Little Endian
 FLOAT    Preroll Time
 FLOAT[2] Emit Delay //Little Endian
 FLOAT[2] Emit Retrigger //Little Endian
 FLOAT[3] Emit Direction Bounding Box Minimum //Little Endian
 FLOAT[3] Emit Direction Bounding Box Maximum //Little Endian
 FLOAT[2] Emit Speed //Little Endian
 FLOAT[3] Emit Volume Bounding Box Minimum //Little Endian
 FLOAT[3] Emit Volume Bounding Box Maximum //Little Endian
 
 // Emit Rate Curve (Particles/Sim-Minute)
 DWORD Count 
     FLOAT
  
 FLOAT    Emit Rate Curve Time
 WORD     Emit Rate Curve Cycles
 FLOAT    Emit Rate Speed Scale
 
 // Size Curve
 DWORD Count 
     FLOAT   
 
 // Color Curve
 DWORD Count 
     FLOAT Red   //Little Endian; 0 - 1
     FLOAT Green //Little Endian; 0 - 1
     FLOAT Blue  //Little Endian; 0 - 1
 
 // Alpha Curve (0 - 1 = transparent - opaque)
 DWORD Count 
     FLOAT   
 
 //Resource reference block
 QWORD IID64 of a an image(DDS), model(VPXY), or material(see Material Section below)
 BYTE  Format
 BYTE  DrawMode
 if ((DrawMode & 0x80) == 0x80) DWORD 
 if ((DrawMode & 0x40) == 0x40) BYTE 
 // Draw Flags
 if (Version >= 6) WORD
 else              BYTE
 BYTE  Buffer
 WORD  Layer
 FLOAT Sort Offset
 QWORD Second IID64 //0xFFFFFFFFFFFFFFFF
 
 BYTE     Align Mode
 FLOAT[3] Directional Forces Sum //Little Endian
 FLOAT    Wind Strength
 FLOAT    Gravity Strength
 FLOAT    Radial Force
 FLOAT[3] Radial Force Location //Little Endian
 FLOAT    Drag

####Distribute Effect #####Overview Note: there is only one of these #####Format

 DWORD   Flags //0x3FFF mask?
 DWORD   Density
 ZSTRING ComponentName
 DWORD   Start
 BYTE    Source Type
 FLOAT   Source Size
 
 // Pre-Transform
 WORD     Flags
 FLOAT    Scale
 FLOAT[9] Orientation //Little Endian 
 FLOAT[3] Position    //Little Endian
 
 // Size Curve
 DWORD Count
     FLOAT
 
 DWORD Size Vary
 
 // Pitch Curve
 DWORD Count
     FLOAT
 
 // Roll Curve
 DWORD Count
     FLOAT
 
 // Heading (Yaw) Curve
 DWORD Count
     FLOAT
 
 FLOAT Pitch Vary
 FLOAT Roll Vary
 FLOAT Heading (Yaw) Vary
 FLOAT Pitch Offset
 FLOAT Roll Offset
 FLOAT Heading (Yaw) Offset
 
 // Color Curve
 DWORD Count
     FLOAT Red   //Little Endian; 0 - 1
     FLOAT Green //Little Endian; 0 - 1
     FLOAT Blue  //Little Endian; 0 - 1
 
 // Color Vary
 FLOAT Red   //Little Endian; 0 - 1
 FLOAT Green //Little Endian; 0 - 1
 FLOAT Blue  //Little Endian; 0 - 1
 
 // Alpha Curve
 DWORD Count
     FLOAT
 
 FLOAT Alpha Vary
 
 // Surfaces
 DWORD Count
     DWORD   Flags //0x3FFF mask?
     QWORD   IID64 of a surface map(see Material Section below)?
     FLOAT   Bounce            //Should be DWORD?
     FLOAT   Slide             //Should be DWORD?
     FLOAT   Collision Radius  //Should be DWORD?
     FLOAT   Death Probability //Should be DWORD?
     DWORD   Pin Offset
     ZSTRING 
     ZSTRING 
     //Surface Points
     DWORD Count
         FLOAT[3] //Little Endian         	
       	
 QWORD Emit Map IID64  //0xFFFFFFFFFFFFFFFF
 QWORD Color Map IID64 //0xFFFFFFFFFFFFFFFF
 QWORD Pin Map IID64   //0xFFFFFFFFFFFFFFFF
 
 FLOAT[2]  Altitude Range //Little Endian
 
 //Resource reference block
 QWORD  IID64 //0xFFFFFFFFFFFFFFFF
 BYTE   Format
 BYTE   DrawMode
 if ((DrawMode & 0x80) == 0x80) DWORD 
 if ((DrawMode & 0x40) == 0x40) BYTE
 // Draw Flags
 if (Version >= 6) WORD
 else              BYTE
 BYTE  Buffer
 WORD  Layer
 FLOAT Sort Offset
 QWORD Second IID64 //0xFFFFFFFFFFFFFFFF
 
 BYTE  Override Set
 DWORD Message ID

####Ribbon Effect #####Overview Examples of this effect first appear in the Create A Pet Demo #####Format

 DWORD    Flags //0x3FFF mask?
 FLOAT[2] Lifetime
 
 // Offset Curve
 DWORD Count
     FLOAT
 
 // Width Curve
 DWORD Count
         FLOAT
 
 FLOAT Taper
 FLOAT Fade
 FLOAT Alpha Decay
 
 // Color Curve
 DWORD Count
     FLOAT Red   //Little Endian; 0 - 1
     FLOAT Green //Little Endian; 0 - 1
     FLOAT Blue  //Little Endian; 0 - 1
 
 // Alpha Curve
 DWORD Count
     FLOAT
 
 // Length Color Curve
 DWORD Count
     FLOAT Red   //Little Endian; 0 - 1
     FLOAT Green //Little Endian; 0 - 1
     FLOAT Blue  //Little Endian; 0 - 1
 
 // Length Alpha Curve
 DWORD Count
         FLOAT
 
 // Edge Color Curve
 DWORD Count
         FLOAT Red   //Little Endian; 0 - 1
         FLOAT Green //Little Endian; 0 - 1
         FLOAT Blue  //Little Endian; 0 - 1
 
 // Edge Alpha Curve
 DWORD Count
     FLOAT
 
 // Start Edge Alpha Curve
 DWORD Count
     FLOAT
 
 // End Edge Alpha Curve
 DWORD Count
     FLOAT
 
 DWORD Segment Count
 FLOAT Segment Length
 
 //Resource reference block
 QWORD IID64 of a an image(DDS), model(VPXY), or material(see Material Section below)
 BYTE Format
 BYTE DrawMode
 if ((DrawMode & 0x80) == 0x80) DWORD 
 if ((DrawMode & 0x40) == 0x40) BYTE  
 // Draw Flags
 if (Version >= 6) WORD
 else              BYTE
 BYTE  Buffer
 WORD  Layer
 FLOAT Sort Offset
 QWORD Second IID64 //0xFFFFFFFFFFFFFFFF
 
 DWORD Tile UV //0xFFFFFFFF
 FLOAT Slip Curve Speed
 FLOAT Slip UV Speed
 
 if (Version >= 2) FLOAT UV Repeat
 
 FLOAT[3] Directional Forces Sum //Little Endian
 FLOAT    Wind Strength
 FLOAT    Gravity Strength
 QWORD    Emit Color Map IID64 //0xFFFFFFFFFFFFFFFF
 QWORD    Force Map IID64      //0xFFFFFFFFFFFFFFFF
 FLOAT    Map Repulse Strength

####Sprite Effect #####Overview Examples of this effect first appear in the Create A Pet Demo #####Format

 DWORD
 DWORD
 DWORD
 FLOAT
 WORD
 DWORD Count
     FLOAT
 DWORD Count
     FLOAT Red   //Little Endian; 0 - 1
     FLOAT Green //Little Endian; 0 - 1
     FLOAT Blue  //Little Endian; 0 - 1
 DWORD Count
     FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT[3] //Little Endian
 FLOAT[3] //Little Endian
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 FLOAT
 
 //Resource reference block
 QWORD  IID64 of a an image(DDS), model(VPXY), or material(see Material Section below)
 BYTE   Format
 BYTE   DrawMode
 if ((DrawMode & 0x80) == 0x80) DWORD 
 if ((DrawMode & 0x40) == 0x40) BYTE
 // Draw Flags
 if (Version >= 6) WORD
 else              BYTE
 BYTE  Buffer
 WORD  Layer
 FLOAT Sort Offset
 QWORD Second IID64 //0xFFFFFFFFFFFFFFFF
 
 BYTE

###Resource Sections ####Format

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

####Resources

 ID | Name

----- | ----- 0x0000 | #Map 0x0001 | #Material

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

 QWORD  Map IID64
 DWORD  Flags //0x3FF mask?
 BYTE   Map Type
 QWORD  Image IID64
 
 //Bounds
 FLOAT Left
 FLOAT Top
 FLOAT Right
 FLOAT Bottom
 
 BYTE     Channel
 BYTE     Op Kind
 QWORD[4] Op Arg Map IID64s 
 
 FLOAT[4] Op Arg Value 1 //Little Endian
 FLOAT[4] Op Arg Value 2 //Little Endian
 FLOAT[4] Op Arg Value 3 //Little Endian
 FLOAT[4] Op Arg Value 4 //Little Endian

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

 QWORD Hashed name
 QWORD Shader
 DWORD Count1
     QWORD Property Id
     BYTE dataType
     switch(dataType)
         case 00: FLOAT 
         case 01: DWORD
         case 02: BYTE  // Boolean 0x00 or 0xFF
         case 03: DWORD Count1
         --repeat Count1
             FLOAT
         case 04: DWORD Count2
         --repeat Count2
             DWORD
         case 05: DWORD Count3
         --repeat Count3
             BYTE // Boolean 0x00 or 0xFF
         case 06: QWORD // DDS IID64

######Shaders FNV Hashed shader names from "Shaders_Win32.precomp"

     ID | Name
  ----- | -----

0x8FAB3764 | Fluid Effect 0x4968A478 | Sim Censor

######Properties FNV Hashed property names from "Shaders_Win32.precomp"

     ID | Name
  ----- | -----

0x6CC0FD85 | Diffuse Map 0x6E56548A | Normal Map 0x8C27D8C9 | Edge Darkening 0xC3C472A1 | Refraction Distortion Scale 0x6A203374 | Clip Alpha Opacity 0x556010DC | Alpha Cutoff 0xF2FCAD8C | Specular Scale 0xF43D2BDC | Multiply Value 0x3965ECE0 | Additive Value

###VisualEffect Section ####Overview This section combines multiple effects from the previous sections. The same effects are often used more than once here but with different offsets and parameters. ####Format

 WORD SectionType //0x0000
 WORD Version     //0x0002 		
 DWORD EffectCount
 --Repeat EffectCount
     // Effect Block Table
     DWORD    Flags
     DWORD    Component App Flags Mask
     DWORD    Notify Message ID
     FLOAT[2] Screen Size Range //Little Endian
     FLOAT    Cursor Active Distance
     BYTE     Cursor Button
     // LOD Distances
     DWORD Count
         FLOAT
     FLOAT[3] Extended LOD Weights //Little Endian
     DWORD    Seed
     DWORD BlockIndexCount
     --repeat BlockIndexCount
          BYTE  Block Type
          DWORD Flags
          // Local Transform
          WORD     Flags
          FLOAT    Scale
          FLOAT[9] Orientation //Little Endian
          FLOAT[3] Position    //Little Endian
          BYTE LOD Begin
          BYTE LOD End
          // LOD Scales
          DWORD Count
          --repeat Count
             FLOAT Emit Scale
             FLOAT Size Scale
             FLOAT Alpha Scale
          FLOAT Emit Scale Begin  // always 1.0
          FLOAT Emit Scale End    // always 1.0
          FLOAT Size Scale Begin  // always 1.0
          FLOAT Size Scale End    // always 1.0
          FLOAT Alpha Scale Begin // always 1.0
          FLOAT Alpha Scale End   // always 1.0
          DWORD App Flags
          DWORD App Flags Mask
          WORD  Selection Group
          WORD  Selection Chance
          FLOAT Time Scale
          DWORD BlockIndex
          if (Version >= 2)
              BYTE
              BYTE
          if (Version >= 3)
              DWORD Count
              --repeat Count
                  FLOAT

###VisualEffect Handles ####Overview This is the root of an effect tree. Effects are called via scripts and clip events by the name provided in this section, which links to the other parts.

####Visual Effect IDs #####Format

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

####VisualEffect Names #####Format

 --Repeat until index 0xFFFFFFFF
 	DWORD CompilationIndex //see previous section
 	ZSTRING EffectName
Clone this wiki locally