Difference between revisions of "Sims 4:0x034AEECB"

From SimsWiki
Jump to: navigation, search
(finishing up will referenced structs)
m (Add CASP flags)
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
==Format from Maxis Documentation==
 
==Format from Maxis Documentation==
This information was provided on Sept 5, 2014 by SimGuruModSquad on [[http://forums.thesims.com/|the official forums]] as part of the Modding Documentation.
+
This information was provided on June 13, 2015 by SimGuruModSquad on [[http://forums.thesims.com/|the official forums]] as part of the Modding Documentation.
  
 
The layout will be using the Maxis provided data type descriptors, i.e.:  UINT32 vs DWORD
 
The layout will be using the Maxis provided data type descriptors, i.e.:  UINT32 vs DWORD
  
  
   UINT32  version       // currently 0x1a is only supported version
+
   UINT32  version             // The latest version is 0x20
   UINT32  dataSize       // Size of following data (before ResourceKeyArray)
+
   UINT32  dataSize           // Size of following data (before ResourceKeyArray)
 
   ----BEGIN dataSize----
 
   ----BEGIN dataSize----
   UINT32  numPresets     // Presets are not used in TS4
+
   UINT32  numPresets         // Presets are not used in TS4
 
+
   7STRING  name               // UnicodeBE part name
   7STRING  name         //
+
   FLOAT    DisplayIndex       //  Sort order in catalog
   FLOAT    DisplayIndex //  Sort order in catalog
+
   UINT16  SecondaryDisplayIndex // Sort order of swatches
   UINT16  SeconndaryDisplayIndex
+
   UINT32  OutfitID            // Unique ID used for grouping in catalog
   UINT32  PrototypeID
+
 
   UINT32  AuralMateralHash
 
   UINT32  AuralMateralHash
 
   struct  ParmFlags partFlags // See below
 
   struct  ParmFlags partFlags // See below
   UINT64  ExcludePartFlags
+
   UINT64  ExcludePartFlags   // Bitmask of part types excluded
 
   UINT32  ExcludeModifierRegionFlags
 
   UINT32  ExcludeModifierRegionFlags
   struct  TagMultimap Tags    // see below
+
  UINT32  TagCount
   UINT32  SimoleaonPrice
+
   struct  Tag[TagCount]      //tag/value pairs used for categorization. See below.
   UINT32  PartTitleKey     // Index into STBLs for the title
+
   UINT32  SimoleonPrice
   UINT32  PartDescKey       // Index into STBLs for the description
+
   UINT32  PartTitleKey       // Index into STBLs for the title - unused?
 +
   UINT32  PartDescKey         // Index into STBLs for the description - unused?
 
   BYTE    UniqueTextureSpace
 
   BYTE    UniqueTextureSpace
   INT32    BodyType
+
   INT32    BodyType           // [[Sims 4:CASPFlags|Part Type]]
   INT32    --UNUSED1--
+
   INT32    --UNUSED1--         // Value is 0x08
   UINT32  AgeGender
+
   UINT32  AgeGender           // [[Sims 4:CASPFlags|Age/Gender flags]]
   BYTE    --UNUSED2--
+
  ---- if version >= 0x20
   BYTE    --UNUSED3--
+
      UINT32    Reserved1    // Value must be 0x01
   struct   SwatchColorSet SwatchColors
+
   BYTE    --UNUSED2--         // Value MUST be 0x01
   BYTE    BuffResKey          //  These keys are all indexes into the keyTable below
+
   BYTE    --UNUSED3--         // If Unused2 > 0, should be 0x00
   BYTE    VariantThumbKey
+
   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    NakedKey
 
   BYTE    ParentKey
 
   BYTE    ParentKey
   INT32    SortLayer
+
   INT32    SortLayer           // Affects layering of textures
 
   BYTE    numLODs
 
   BYTE    numLODs
   struct  LOD mlods[numLODs]
+
   struct  LOD mlods[numLODs] // see below
   BYTE    numSlotKeys
+
   BYTE    numSlotKeys         // always 0?
   BYTE    mSlotKey[numSlotKeys]   // used?
+
   BYTE    mSlotKey[numSlotKeys] // never used?
   BYTE    DiffuseKey               // This is the primary color texture type 0x3453cf95
+
   BYTE    DiffuseKey         // This is the primary color texture type 0x3453cf95
   BYTE    ShadowKey               // And the other texture 0x3453cf95
+
   BYTE    ShadowKey           // And the shadow texture 0x3453cf95
   BYTE    CompositionMethod
+
   BYTE    CompositionMethod   // Affects texture compositing
   BYTE    RegionMapKey             // type 0xac16fbec
+
   BYTE    RegionMapKey       // type 0xac16fbec
   BYTE    Overrides
+
   BYTE    NumberOverrides    // always 0?
   BYTE    NormalMapKey             // have not seen a normal map used
+
  struct  Override[NumberOverrides] // see below
   BYTE    SpecularMapKey           // texture file type 0xba856c78
+
   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-----   
 
   -----END dataSize-----   
   struct  ResourceKeyArray keyTable  // List of TGI keys referenced
+
   struct  ResourceKeyArray keyTable  // List of TGI keys to resources, see below
  
 
struct ParmFlags is a bitfield of size BYTE
 
struct ParmFlags is a bitfield of size BYTE
Line 56: Line 73:
 
   [1]      DefaultThumnailPart
 
   [1]      DefaultThumnailPart
 
   [0]      DefaultForBodyType       
 
   [0]      DefaultForBodyType       
 
struct TagMultimap is a counted array of struct Tag entries
 
  UINT32  tagCount
 
  struct  Tag[]
 
  
 
struct Tag is a simple struct
 
struct Tag is a simple struct
Line 65: Line 78:
 
   UINT16  tagValue
 
   UINT16  tagValue
  
struct SwatchColorSet is a counted array of UINT32 (color values)
+
struct OccultBitField is a bitfield of size UINT32
   BYTE    usedColorCount
+
   [2-31]  not yet used
   UINT32   rawData[usedColorCount]     //  Data is RGBA value
+
   [1]      Alien
 +
   [0]     Human     
  
 
struct LOD is a complex struct
 
struct LOD is a complex struct
Line 75: Line 89:
 
   struct  LODAsset assets[numAssets]
 
   struct  LODAsset assets[numAssets]
 
   BYTE    numLODKeys
 
   BYTE    numLODKeys
   BYTE    lodKey[numLODKeys]         // These keys are all indexes into the keyTable
+
   BYTE    lodKey[numLODKeys]   // These keys are all indexes into the keyTable, pointing to GEOMs
  
 
struct LODAsset is a simple struct
 
struct LODAsset is a simple struct
Line 81: Line 95:
 
   INT32    specLevel
 
   INT32    specLevel
 
   INT32    casShadow
 
   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==
 
==Format==

Latest revision as of 14:26, 16 August 2015

[edit] 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

[edit] 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
Personal tools
Namespaces

Variants
Actions
Navigation
game select
Toolbox