HO archives are container files used by Heavy Iron Studios in their 7 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
HEL/HEB
0x800 HO header
Offset
Type
Variable
Description
0x00
string
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
string
timeString
Www Mmm dd hh:mm:ss yyyy
0x40
int
[FormatInfo] sectorSize
HO archives are divided in 2048 (0x800) byte sectors, i.e. HO Header is Sector 0, MAST is Sector 1...
0x44
int
[MasterTable] startSector
0x48
int
[MasterTable] tableSize
Size of MAST
0x4C
int
pad01
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
RB09 = ? [Unreleased]
STRO = Saints Row: The Cooler [Unreleased]
MM = Megamind [Unreleased]
CSNO = Casino [Unreleased]
BAKU = Bakugan [Unreleased]
0x4BC
WideString
creator
always "GoodEditor:PackView.GEPlugin "
0x4FC
WideString
comment
0x5FC
WideString
hash
0x63C
int
libVersion
0x640
int
pad02
MAST (MasterTable)
Offset
Type
Variable
Description
0x00
string
tableTypeTag
MAST
0x04
int
entryCount
Amount of master entries , always 1.
0x08
int
tableFlags
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
0x18
int
metaDataSize
0x1C
int
reserved
MasterEntry
Offset
Type
Variable
Description
0x00
int
sectionType
SECT/TCES
0x04
short
packLangID
0x06
byte
parcelType
0x07
byte
pad
0x08
int
userKey
0x0C
int
nameHash
0x10
int
namePtr
Offset to domain string, relative to start of MAST .
0x14
int
fromNameHash
0x18
int
fromNamePtr
0x1C
int
startSector
Multiply this by sectorSize to get the absolute offset. Start of SECT .
0x20
int
sizeOnDisk
Size of SECT .
0x24
int
sizeInMem
Size of SECT .
0x28
int
memoryAlignment
0x2C
int
attributeFlags
0x30
int
externName
0x34
int
metaBlockCount
0x38
int
metaRecord
0x3C
int
reserved
StringTable
Unknown
SECT (SectionTable)
Offset
Type
Variable
Description
0x00
string
tableTypeTag
SECT
0x04
int
entryCount
Amount of section entries .
0x08
int
tableFlags
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 MetaSection .
0x1C
int
reserved
SectionEntry
Offset
Type
Variable
Description
0x00
int
sectionType
P = Parcel
PD/DP = ParcelDebug
PTEX/XETP = ParcelTexture
PFST/TSFP = ParcelMemFast
0x04
short
packLangID
0x06
byte
parcelType
0x07
byte
pad
0x08
int
userKey
0x0C
int
nameHash
0x10
int
namePtr
Offset to domain string, relative to start of SECT .
0x14
int
fromNameHash
0x18
int
fromNamePtr
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 asset data in section.
0x2C
int
attributeFlags
0x30
int
externName
0x34
int
metaBlockCount
Amount of PSL /PSLD entries.
0x38
int
metaRecord
Offset to PSL or PSLD entry, relative to start of SECT .
0x3C
int
reserved
MetaSection
PSL (ParcelSliceMeta)
Offset
Type
Variable
Description
MetaParcelSlicesHeader
0x00
string
metatype
PSL
0x04
int
metasize
Size of ParcelSliceMeta.
0x08
int
numSlices
Amount of slice entries.
0x0C
int
reserved
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
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
0x1E
short
blobFlags
PSLD (ParcelSliceDebugMeta)
Offset
Type
Variable
Description
0x00
string
magic
PSLD
0x04
int
size
Size of ParcelSliceDebugMeta.
0x08
int
count
Amount of entrySize and NameTableEntry
0x0C
int
offset
Offset to NameTableEntry
0x10
int[4]
Unknown
Unknown
PD (ParcelDebug)
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 ?
Offset to assetname?
0x0C
int[5]
Unknown
Unknown
0x20
String
assetname
Name of corresponding asset.
Padding bytes until this entry reaches <entrySize> in length.