Difference between revisions of "Sims 3:0x8EAF13DE"

From SimsWiki
Jump to: navigation, search
(Added new unencrypted rig format found in the Create A Pet demo)
(Unencrypted Rig Data: Changed DWORDs to FLOATs based on research)
Line 153: Line 153:
 
  DWORD Bone Count
 
  DWORD Bone Count
 
  --repeat(Bone Count)
 
  --repeat(Bone Count)
     DWORD
+
     FLOAT[3] Position?
     DWORD
+
     FLOAT
     DWORD
+
     FLOAT
     DWORD
+
     FLOAT
    DWORD
+
    DWORD
+
 
     FLOAT[4] Quaternion Rotation?
 
     FLOAT[4] Quaternion Rotation?
 
     DWORD Bone Name Length
 
     DWORD Bone Name Length

Revision as of 01:09, 27 September 2011

Modding Reference by Category

Sims 3 :DBPF | File Types | RCOL(Scene) | Catalog Resource | String Table | Key Table | TS3 Programmer's Reference 

Rig Resource - _RIG
TypeID:0x8EAF13DE
Game Version:The Sims 3



Contents

Overview

There are two formats of the RIG file. The basic file content is a Granny 2 data file. Apart from the official tools, there are some user-contributed tools for manipulating the data on altervista. In addition, a second format exists, where the Granny data is wrapped with some additional fields.

Get "Granny Viewer" from the altervista downloads page and you can load the data (export it as 'somefile.gr2').

Also related is this thread on Xentax.

Format

Optional wrapper

There is an optional wrapper to the Granny data. This can be identified by the first DWORD in the file being 0x8EAF13DE (i.e. the resource type). The format is:

DWORD 0x8EAF13DE
DWORD 0
DWORD offset1			// To "Int2" block from start of Granny data
DWORD offset2			// To start of Granny data (from start of this DWORD)
DWORD IKChainsOffset		// To start first of "Int2" Chunk (from start of this DWORD)
DWORD IKTargetSlotsOffset	//(from start of this DWORD)
DWORD IKInfoNodeOffset		//(from start of this DWORD)
DWORD CompressNodeOffset	//(from start of this DWORD)
DWORD FullBoneListOffset	//(from start of this DWORD)
DWORD // unused offset?
DWORD // unused offset?
DWORD // unused offset?
DWORD // unused offset?

--insert Granny2 data
--Padding 00's to next even DWORD
 
DWORD Count1
--repetition Count1:
	DWORD offset to IK Chain entry (from start of this DWORD)
--repetition Count1:
	//IK Chain entry
	DWORD
	DWORD ChainLength
	BYTE[32] //00
	DWORD IK pole //Bone index from granny2 data
	DWORD Chain start //Bone index from granny2 data

	DWORD SlotInfoNode //Bone index from granny2 data
	DWORD SlotInfoRootNode //Bone index from granny2 data

	DWORD SlotOffsetNode //Bone index from granny2 data
	DWORD SlotOffsetRootNode //Bone index from granny2 data

	DWORD InfoNodeFlags //(bits 0-10 means that node is enabled)

	DWORD InfoNode0  //Bone index from granny2 data
	DWORD InfoNode1  //Bone index from granny2 data
	DWORD InfoNode2  //Bone index from granny2 data
	DWORD InfoNode3  //Bone index from granny2 data
	DWORD InfoNode4  //Bone index from granny2 data
	DWORD InfoNode5  //Bone index from granny2 data
	DWORD InfoNode6  //Bone index from granny2 data
	DWORD InfoNode7  //Bone index from granny2 data
	DWORD InfoNode8  //Bone index from granny2 data
	DWORD InfoNode9  //Bone index from granny2 data 
	DWORD InfoNode10 //Bone index from granny2 data

	--repetition(ChainLength)
		DWORD

	DWORD //0
	
	//Chain links 
	--repetition(ChainLength) 		
	 	DWORD EndBone //Bone index from granny2 data
	 	DWORD StartBone   //Bone index from granny2 data
//IK Target Slots
DWORD count
--repetition count
	DWORD //Bone index from granny2 data

BYTE[56] //00

//Info Nodes
DWORD count
--repetition count
	DWORD //Bone index from granny2 data

//Compress Nodes(i.e. "b__R_Calf__Compress__")
DWORD count
--repetition count
	DWORD //Bone index from granny2 data

//Full bone list(contains every bone from granny2 data)
DWORD count
--repetition count
	DWORD //Bone index from granny2 data

Granny2 Data

All offsets in this section start from the start of the Granny2 Data.

BYTE[16]		// See Rick's note below
DWORD Header Size	// ?
DWORD Header Format
DWORD Reserved
DWORD Reserved
DWORD Version		// 6
DWORD DataSize
DWORD CRC
DWORD SectionOffset
DWORD SectionCount	// 1
DWORD RootObjectTypeIndex
DWORD RootObjectTypeOffset
DWORD RootObjectIndex
DWORD RootObjectOffset
DWORD Tag		// 0x8000001C
DWORD StringDb CRC
DWORD[3] Unused
//Sections
--repeat(SectionCount)
	DWORD CompressionFormat	// 2 
	DWORD DataOffset
	DWORD DataSize
	DWORD DecompressedSize
	DWORD Alignment
	DWORD 
	DWORD 
	DWORD Int1Offset
	DWORD Int1Count 	// ?
	DWORD Int1EndOffset	// to start of byte after 	Int1 section
	DWORD

//Int1 Section		// does this repeat or what?
DWORD
DWORD
DWORD

// Data
BYTE[DataSize]

Rick adds:

The blobs that start with the following sequences are Granny2 data blocks:

B867B0CAF86DB10F84728C7E5E19001E
29DE6CC0BAA4532B25F5B7A5F666E2EE
0E1195B56AA5B54BEB2828502578B304
E59B495E6F631F141E13EBA990BEEDC4
3195D4E320DC4F62CC36D03AB182FF89

Unencrypted Rig Data

Starting with the Create A Pet Demo, there is a new third format of RIG files that is unencrypted:

DWORD Major Version? 4
DWORD Minor Version? 2
DWORD Bone Count
--repeat(Bone Count)
    FLOAT[3] Position?
    FLOAT
    FLOAT
    FLOAT
    FLOAT[4] Quaternion Rotation?
    DWORD Bone Name Length
    STRING (Bone Name Length ASCII characters)
    DWORD Parent Index?
    DWORD
    DWORD
    DWORD ??? Usually 0x23
DWORD Skeleton Name Length
STRING (Skeleton Name Length ASCII characters)

// The following data varies between rigs 

// Object RIGs:
DWORD ??? Always 0

// Animal Sim RIGs:
DWORD[18] Aligned Compressed Data?

// Human Sim RIGs:
DWORD[94] Aligned Compressed Data?
Modding Reference by Category

Sims 3 :DBPF | File Types | RCOL(Scene) | Catalog Resource | String Table | Key Table | TS3 Programmer's Reference 

Personal tools
Namespaces

Variants
Actions
Navigation
game select
Toolbox