Difference between revisions of "Sims 3:0xEA5118B0"
(→Properties) |
ChaosMageX (Talk | contribs) (Fixed broken links) |
||
(46 intermediate revisions by 3 users not shown) | |||
Line 8: | Line 8: | ||
==Overview== | ==Overview== | ||
− | + | 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== | |
+ | All data is in Big Endian order unless otherwise noted(most floats). This spec is very primitive and needs work. | ||
− | + | WORD Version | |
− | [[ | + | [[#Effect_Sections|Effect Sections]] |
+ | [[#Resource_Sections|Resource Sections]] | ||
+ | [[#VisualEffect_Section|VisualEffect Section]] | ||
+ | [[#VisualEffect_IDs|VisualEffect IDs]] | ||
+ | [[#VisualEffect_Names|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== | + | ====Blocks==== |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! BlockType | ! BlockType | ||
Line 154: | 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 | ||
− | | | + | | [[#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 | ||
− | | | + | | Unused |
|- | |- | ||
| 0x000B | | 0x000B | ||
− | | | + | | [[#Game_Effect|Game Effect]] |
|- | |- | ||
| 0x000C | | 0x000C | ||
− | | | + | | [[#FastParticle_Effect|Fast Particle Effect]] |
|- | |- | ||
| 0x000D | | 0x000D | ||
− | | | + | | [[#Distribute_Effect|Distribute Effect]] |
|- | |- | ||
| 0x000E | | 0x000E | ||
− | | | + | | [[#Ribbon_Effect|Ribbon Effect]] |
+ | |- | ||
+ | | 0x000F | ||
+ | | [[#Sprite_Effect|Sprite Effect]] | ||
|- | |- | ||
|} | |} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ====Particle Effect==== | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | //Scale | + | ======Format====== |
− | DWORD | + | DWORD Flags |
− | + | FLOAT[2] Particle Lifetime //Little Endian | |
− | FLOAT | + | FLOAT Preroll Time |
− | DWORD | + | FLOAT[2] Emit Delay //Little Endian |
− | + | 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[ | + | FLOAT[2] Emit Speed //Little Endian |
− | DWORD | + | FLOAT[3] Emit Volume Bounding Box Minimum //Little Endian |
− | + | FLOAT[3] Emit Volume Bounding Box Maximum //Little Endian | |
− | DWORD | + | FLOAT Emit Torus Width |
− | + | ||
− | 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 | ||
− | // | + | ====Metaparticle Effect==== |
− | DWORD | + | =====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 [[#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 | ||
− | + | ====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 | + | FLOAT Lifetime |
− | + | ||
− | FLOAT | + | // Rotation Curve |
− | + | DWORD Count1 | |
− | + | FLOAT | |
− | + | ||
− | 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 | |
− | DWORD Count2 | + | 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 | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | DWORD | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | DWORD | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | DWORD | + | |
− | + | ||
− | + | ||
− | FLOAT | + | |
− | FLOAT | + | |
− | FLOAT | + | |
− | FLOAT | + | |
− | FLOAT | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | 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 | + | 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 | |
− | FLOAT | + | if (Version >= 2) BYTE |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | BYTE | + | |
− | + | ||
− | + | ||
− | + | ||
− | === | + | ====Shake Effect==== |
− | ====Format==== | + | =====Format===== |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | ===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==== | ||
− | + | --Repeat until ResourceType 0xFFFF | |
− | + | // Block List | |
− | + | WORD ResourceType | |
− | DWORD | + | WORD Version |
− | + | DWORD Count | |
− | + | --repeat(Count) | |
− | + | --Insert resource data(depending on type) | |
− | + | ====Resources==== | |
− | + | {| class="wikitable" border="1" | |
− | + | ! ID | |
− | + | ! Name | |
− | + | |- | |
− | + | | 0x0000 | |
− | + | | [[#Map|Map]] | |
− | + | |- | |
− | + | | 0x0001 | |
+ | | [[#Material|Material]] | ||
+ | |- | ||
+ | |} | ||
+ | =====Map===== | ||
+ | ======Overview====== | ||
+ | It appears to apply operators to a map image. There are currently no examples in The Sims 3 to be sure. | ||
+ | ======Format====== | ||
+ | QWORD Map IID<sub>64</sub> | ||
+ | DWORD Flags //0x3FF mask? | ||
+ | BYTE Map Type | ||
+ | QWORD Image IID<sub>64</sub> | ||
+ | |||
+ | //Bounds | ||
+ | FLOAT Left | ||
+ | FLOAT Top | ||
+ | FLOAT Right | ||
+ | FLOAT Bottom | ||
+ | |||
+ | BYTE Channel | ||
+ | BYTE Op Kind | ||
+ | QWORD[4] Op Arg Map IID<sub>64</sub>s | ||
+ | |||
+ | FLOAT[4] Op Arg Value 1 //Little Endian | ||
+ | FLOAT[4] Op Arg Value 2 //Little Endian | ||
+ | FLOAT[4] Op Arg Value 3 //Little Endian | ||
+ | FLOAT[4] Op Arg Value 4 //Little Endian | ||
− | === | + | =====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 [[#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> | ||
− | === | + | ======Shaders====== |
− | + | [[FNV|FNV32]] Hashed shader names from "Shaders_Win32.precomp" | |
+ | {| class="wikitable" border="1" | ||
+ | ! ID | ||
+ | ! Name | ||
+ | |- | ||
+ | | 0x8FAB3764 | ||
+ | | Fluid Effect | ||
+ | |- | ||
+ | | 0x4968A478 | ||
+ | | Sim Censor | ||
+ | |- | ||
+ | |} | ||
− | === | + | ======Properties====== |
− | + | [[FNV|FNV32]] Hashed property names from "Shaders_Win32.precomp" | |
− | === | + | {| 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==== | ||
− | + | WORD SectionType //0x0000 | |
− | DWORD | + | WORD Version //0x0002 |
− | DWORD | + | DWORD EffectCount |
− | + | --Repeat EffectCount | |
− | + | // Effect Block Table | |
− | FLOAT | + | DWORD Flags |
− | + | DWORD Component App Flags Mask | |
− | + | DWORD Notify Message ID | |
− | + | FLOAT[2] Screen Size Range //Little Endian | |
− | FLOAT // | + | FLOAT Cursor Active Distance |
− | FLOAT //Little Endian | + | BYTE Cursor Button |
− | + | // LOD Distances | |
− | FLOAT //Little Endian | + | DWORD Count |
− | FLOAT //Little Endian | + | FLOAT |
− | + | FLOAT[3] Extended LOD Weights //Little Endian | |
− | FLOAT // | + | DWORD Seed |
− | FLOAT // | + | DWORD BlockIndexCount |
− | + | --repeat BlockIndexCount | |
− | + | BYTE Block Type | |
− | FLOAT // | + | DWORD Flags |
− | FLOAT // | + | // Local Transform |
− | + | WORD Flags | |
− | + | FLOAT Scale | |
− | BYTE | + | FLOAT[9] Orientation //Little Endian |
− | BYTE | + | 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 | ||
{{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 |
[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 |