This page is located on the SimsWiki. To view it in it's original form, click here.

Format from Maxis Documentation

This information was provided on June 13, 2015 by SimGuruModSquad on [official forums] as part of the Modding Documentation.

The layout will be using the Maxis provided data type descriptors, i.e.: UINT32 vs DWORD


 UINT32   version             // The latest version is 0x20
 UINT32   dataSize            // Size of following data (before ResourceKeyArray)
 ----BEGIN dataSize----
 UINT32   numPresets          // Presets are not used in TS4
 7STRING  name                // UnicodeBE part name
 FLOAT    DisplayIndex        //  Sort order in catalog
 UINT16   SecondaryDisplayIndex // Sort order of swatches
 UINT32   OutfitID            // Unique ID used for grouping in catalog
 UINT32   AuralMateralHash
 struct   ParmFlags partFlags // See below
 UINT64   ExcludePartFlags    // Bitmask of part types excluded 
 UINT32   ExcludeModifierRegionFlags
 UINT32   TagCount
 struct   Tag[TagCount]       //tag/value pairs used for categorization. See below.
 UINT32   SimoleonPrice
 UINT32   PartTitleKey        // Index into STBLs for the title - unused?
 UINT32   PartDescKey         // Index into STBLs for the description - unused?
 BYTE     UniqueTextureSpace
 INT32    BodyType            // Part Type
 INT32    --UNUSED1--         // Value is 0x08
 UINT32   AgeGender           // Age/Gender flags
 ---- if version >= 0x20
      UINT32    Reserved1     // Value must be 0x01
 BYTE     --UNUSED2--         // Value MUST be 0x01
 BYTE     --UNUSED3--         // If Unused2 > 0, should be 0x00
 BYTE     UsedColorCount
 UINT32   Color[usedColorCount] //  Data is RGBA value, used for swatch, max 3 so far
 BYTE     BuffResKey          //  Index in keyTable for buff resource - no longer used
 BYTE     VariantThumbKey     //  Index in keyTable for swatch image if any
 ---- if version >= 0x1c
      UINT64     VoiceEffect  // hash of a sound effect
 ---- if version >= 0x1e
      BYTE       UsedMaterialCount      // if not 0, should be 3
      UINT32     MaterialSetUpperBody   // Hash
      UINT32     MaterialSetLowerBody   // Hash
      UINT32     MaterialSetShoes       // Hash
 ---- if version >= 0x1f
      UINT32     OccultBitField  // bitmask: Disabled for occult types, ex: 0x00000000 means enabled for all
 BYTE     NakedKey
 BYTE     ParentKey
 INT32    SortLayer           // Affects layering of textures
 BYTE     numLODs
 struct   LOD mlods[numLODs]  // see below
 BYTE     numSlotKeys         // always 0?
 BYTE     mSlotKey[numSlotKeys] // never used?
 BYTE     DiffuseKey          // This is the primary color texture type 0x3453cf95
 BYTE     ShadowKey           // And the shadow texture 0x3453cf95
 BYTE     CompositionMethod   // Affects texture compositing
 BYTE     RegionMapKey        // type 0xac16fbec
 BYTE     NumberOverrides     // always 0?
 struct   Override[NumberOverrides] // see below
 BYTE     NormalMapKey        //  Index in keyTable for normalmap
 BYTE     SpecularMapKey      // texture file type 0xba856c78
 ---- if version >= 0x1b
      UINT32   UVoverride     // usually same as BodyType, may affect texture layering
 ---- if version >= 0x1d
      BYTE     EmissionIndex  //  Index in keyTable for "Alien Glow" emission map
 -----END dataSize-----  
 struct   ResourceKeyArray keyTable  // List of TGI keys to resources, see below

struct ParmFlags is a bitfield of size BYTE

 [7-6]    not_used
 [5]      ShowInCasDemo
 [4]      ShowInSimInfoPanel
 [3]      ShowInUI
 [2]      AllowForRandom
 [1]      DefaultThumnailPart
 [0]      DefaultForBodyType      

struct Tag is a simple struct

 UINT16   Category
 UINT16   tagValue

struct OccultBitField is a bitfield of size UINT32

 [2-31]   not yet used
 [1]      Alien
 [0]      Human      

struct LOD is a complex struct

 BYTE     level
 UINT32   --unused--
 BYTE     numAssets
 struct   LODAsset assets[numAssets]
 BYTE     numLODKeys
 BYTE     lodKey[numLODKeys]    // These keys are all indexes into the keyTable, pointing to GEOMs

struct LODAsset is a simple struct

 INT32    sorting
 INT32    specLevel
 INT32    casShadow

struct Override is a simple struct

 BYTE     region
 FLOAT    layer

struct TGI table in I64GT format (not TGI64)

 BYTE count
 --repeat(count)
       UINT64 instance
       UINT32 group
       UINT32 type

Format

This is what was discovered early in the process -- now obsolete

 DWORD version	// 0x1a is current
 DWORD offset	// to resource reference table from end of header (ie offset + 8)
 DWORD presetCount? // For all files I read so far, it's 0. It might still be a count
 7STRING		// UnicodeBE
 FLOAT sortPriority	// CAS sorts on this value, from largest to smallest


 // This block hasn't been test for multiple files.
 Byte[22] Unknown
 DWORD count
 --repeat(count)
    DWORD
 // Unknown bytes
 // Resource reference table in I64GT format (not TGI64)
 BYTE count
 --repeat(count)
       QWORD instance
       DWORD group
       DWORD type