HO archives are container files used by Heavy Iron Studios in their 7 Good Engine/Havok games. They are used to store assets, which are the resources and objects used to create levels, characters and menus for the games.
Endian
HO archives are stored as big endian in all console versions of each game. Family Guy PC archives are stored as little endian .
Format
Offset
Type
Variable
Description
0x00
char[4]
cMagic
HEL or HEB
0x04
int
verPackFile
0x08
int
verWMlSchema
0x0C
int
geBuildNum
0x10
long
timeValue
Number of seconds since 00:00, Jan 1 1970 UTC, with a timezone offset of UTC-7:00 (Pacific Time).
0x18
char[0x18]
timeString
Www Mmm dd hh:mm:ss yyyy
0x40
int
[FormatInfo] sectorSize
Always 0x800 (2048 bytes).
0x44
int
[MasterTable] startSector
Always 1 (if sectorSize is 0x800).
0x48
int
[MasterTable] tableSize
Size of MAST .
0x4C
byte[0x3B4]
reserved
null
0x400
WideString
platform
WII
PS3
XENON (Xbox360)
PC
0x43C
WideString
user
always "hvir_autobuild "
0x47C
WideString
target
Rats = Ratatouille
WALE = Wall-E
Up = Up
SB09 = SpongeBob's Truth or Square
UFCT = UFC Personal Trainer
FIVE = Harley Pasternak's Hollywood Workout
FGUY = Family Guy: Back to the Multiverse
0x4BC
WideString
creator
always "GoodEditor:PackView.GEPlugin "
0x4FC
WideString
comment
null
0x5FC
WideString
hash
0x63C
int
libVersion
Always 1.
0x640
byte[0x1C0]
reserved
null
MasterTable
Offset
Type
Variable
Description
0x00
char[4]
tableTypeTag
MAST
0x04
int
entryCount
Amount of master entries , always 1.
0x08
int
tableFlags
null
0x0C
int
firstString
Offset to StringTable , relative to start of this header.
0x10
int
stringTableSize
Size of StringTable , relative to end of MasterEntry .
0x14
int
firstMetaRec
0xFFFFFFFF
0x18
int
metaDataSize
null
0x1C
byte[4]
reserved
null
MasterEntry
Offset
Type
Variable
Description
0x00
int
sectionType
SECT/TCES
0x04
ushort
packLangID
null
0x06
ubyte
parcelType
null
0x07
byte
pad
0x33
0x08
int
userKey
null
0x0C
uint
nameHash
Lowercase BKDR hash of domain string.
0x10
int
namePtr
Offset to domain string, relative to start of MAST .
0x14
uint
fromNameHash
null
0x18
int
fromNamePtr
0xFFFFFFFF
0x1C
int
startSector
Multiply this by sectorSize to get the absolute offset. Start of SectionTable .
0x20
int
sizeOnDisk
Size of SECT .
0x24
int
sizeInMem
Size of SECT .
0x28
int
memoryAlignment
0xFFFFFFFF
0x2C
int
attributeFlags
null
0x30
int
externName
0xFFFFFFFF
0x34
int
metaBlockCount
null
0x38
int
metaRecord
0xFFFFFFFF
0x3C
byte[4]
reserved
null
StringTable
Unknown
SectionTable
Offset
Type
Variable
Description
0x00
char[4]
tableTypeTag
SECT
0x04
int
entryCount
Amount of section entries .
0x08
int
tableFlags
null
0x0C
int
firstString
Offset to domain string, relative to start of this header.
0x10
int
stringTableSize
Size of domain string.
0x14
int
firstMetaRec
Offset to MetaSection , relative to start of this header.
0x18
int
metaDataSize
Size of PSL/PSLD entries in MetaSection (without child blocks).
0x1C
byte[4]
reserved
null
SectionEntry
Offset
Type
Variable
Description
0x00
int
sectionType
P = Parcel
PD/DP = ParcelDebug
PTEX/XETP = ParcelTexture
PFST/TSFP = ParcelMemFast (Not present in Ratatouille)
0x04
ushort
packLangID
Values are in big-endian First byte is region code, second byte is language code E.g., 0x0409 = English US, 0x0009 = English Neutral
0x0000 = Neutral Neutral
0x0401 = Arabic SaudiArabia
0x0804 = Chinese China
0x0C04 = Chinese HongKong
0x0404 = Chinese Taiwan
0x1004 = Chinese Singapore
0x0405 = Czech Republic
0x0406 = Danish Denmark
0x0413 = Dutch Netherlands
0x0409 = English US
0x0809 = English UK
0x0C09 = English Australia
0x1009 = English Canada
0x040B = Finnish Finland
0x040C = French France
0x0407 = German Germany
0x0807 = German Swiss
0x0408 = Greek Greece
0x0410 = Italian Italy
0x0411 = Japanese Japan
0x0412 = Korean Korea
0x0814 = Norwegian Nynorsk
0x0415 = Polish Poland
0x0816 = Portuguese Portugal
0x0416 = Portuguese Brazilian
0x0419 = Russian Federation
0x041B = Slovak Slovak
0x080A = Spanish Mexican
0x0C0A = Spanish Spain
0x041D = Swedish Sweden
0x0422 = Ukrainian Ukraine
0x06
ubyte
parcelType
0 = UNDEFINED
1 = EXCLUSIVE
2 = SHARED
3 = FROMDOMAIN
0x07
byte
pad
0x33
0x08
int
userKey
null
0x0C
uint
nameHash
Lowercase BKDR hash of domain string.
0x10
int
namePtr
Offset to domain string, relative to start of SECT .
0x14
uint
fromNameHash
Lowercase BKDR hash of domain string from original parcel (if parcelType is 3).
0x18
int
fromNamePtr
0xFFFFFFFF
0x1C
int
startSector
Multiply this by sectorSize to get the absolute offset. Start of section.
0x20
int
sizeOnDisk
Size of section.
0x24
int
sizeInMem
Size of section.
0x28
int
memoryAlignment
Memory alignment of ParcelData assets in section.
0x2C
int
attributeFlags
null
0x30
int
externName
0xFFFFFFFF
0x34
int
metaBlockCount
Amount of PSL /PSLD entries, always 1.
0x38
int
metaRecord
Offset to PSL (P, PTEX, PFST) or PSLD (PD) entry, relative to start of SECT .
0x3C
byte[4]
reserved
null
MetaSection
ParcelSliceMeta
Offset
Type
Variable
Description
MetaParcelSlicesHeader
0x00
char[4]
metatype
PSL
0x04
int
metasize
Size of PSL.
0x08
int
numSlices
Amount of slice entries.
0x0C
int
reserved
null
MetaParcelSlicesEntry
0x00
int
sliceType
0 = ParcelTOC
1 = ParcelData
2 = Padding (0x33)
0x04
int
sliceStart
Offset to slice, relative to start of startSector .
0x08
int
sliceSize
Size of slice in SectionEntry .
0x0C
int
sliceAlign
ParcelTOC
Offset
Type
Variable
Description
TOCHeader
0x00
int
elementCount
Amount of TOC entries.
0x04
int
brickDataOffset
0x08
int[6]
reserved
0x74747474
TOCEntry
0x00
int
elementSize
Size of asset (with 0x33 padding bytes).
0x04
int
elementOffset
Offset to asset, relative to start of startSector .
0x08
int
blobSize
Size of asset (without 0x33 padding bytes).
0x0C
int
blobAlign
0x10
AssetID
uidSelf
AssetID of corresponding asset.
0x18
int
wmlTypeID
AssetType of corresponding asset.
0x1C
short
subType
Not present in Ratatouille/Wall-E
0x1E
short
blobFlags
int32 in Ratatouille/Wall-E
ParcelSliceDebugMeta
PSLD Entry
Offset
Type
Variable
Description
0x00
int[count]
entrySize
Length in bytes of the entries below.
NameTableEntry
0x00
AssetID
assetid
AssetID of corresponding asset.
0x08
int
offset ?
Relative offset to assetname?
0x0C
int
Unknown
0x10
int
Unknown
0xFFFFFFFF
0x14
int[3]
Unknown
null
0x20
char[]
assetname
Null-terminated name of corresponding asset.
Padding - 0x33 bytes until this entry reaches <entrySize> in length.