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
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
Always 0x800 (2048 bytes)
0x44
int
[MasterTable] startSector
Always 1 (if sectorSize is 0x800)
0x48
int
[MasterTable] tableSize
Size of MAST
0x4C
int
pad01
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
RB09 = ? [Unreleased]
STRO = Saints Row: The Cooler [Unreleased]
MM = Megamind [Unreleased]
CSNO = Casino [Unreleased]
BAKU = Bakugan [Unreleased]
UFCU = UFC Undisputed [Unreleased]
0x4BC
WideString
creator
always "GoodEditor:PackView.GEPlugin "
0x4FC
WideString
comment
null
0x5FC
WideString
hash
0x63C
int
libVersion
Always 1
0x640
int
pad02
null
MAST (MasterTable)
Offset
Type
Variable
Description
0x00
string
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
int
reserved
null
MasterEntry
Offset
Type
Variable
Description
0x00
int
sectionType
SECT/TCES
0x04
short
packLangID
null
0x06
byte
parcelType
null
0x07
byte
pad
0x33
0x08
int
userKey
null
0x0C
int
nameHash
Lowercase BKDRHash of domainString.
0x10
int
namePtr
Offset to domainString, relative to start of MAST .
0x14
int
fromNameHash
null
0x18
int
fromNamePtr
0xFFFFFFFF
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
0xFFFFFFFF
0x2C
int
attributeFlags
null
0x30
int
externName
0xFFFFFFFF
0x34
int
metaBlockCount
null
0x38
int
metaRecord
0xFFFFFFFF
0x3C
int
reserved
null
StringTable
Unknown
SECT (SectionTable)
Offset
Type
Variable
Description
0x00
string
tableTypeTag
SECT
0x04
int
entryCount
Amount of section entries .
0x08
int
tableFlags
null
0x0C
int
firstString
Offset to domainString, relative to start of this header.
0x10
int
stringTableSize
Size of domainString.
0x14
int
firstMetaRec
Offset to MetaSection , relative to start of this header.
0x18
int
metaDataSize
Size of MetaSection .
0x1C
int
reserved
null
SectionEntry
Offset
Type
Variable
Description
0x00
int
sectionType
P = Parcel
PD/DP = ParcelDebug
PTEX/XETP = ParcelTexture
PFST/TSFP = ParcelMemFast
0x04
short
packLangID
(Values are in big-endian)
0x0000 = NeutralNeutral
0x0401 = ArabicSaudiArabia
0x0804 = ChineseChina
0x0C04 = ChineseHongKong
0x0404 = ChineseTaiwan
0x1004 = ChineseSingapore
0x0405 = CzechRepublic
0x0406 = DanishDenmark
0x0413 = DutchNetherlands
0x0409 = EnglishUS
0x0809 = EnglishUK
0x0C09 = EnglishAustralia
0x1009 = EnglishCanada
0x040B = FinnishFinland
0x040C = FrenchFrance
0x0407 = GermanGermany
0x0807 = GermanSwiss
0x0408 = GreekGreece
0x0410 = ItalianItaly
0x0411 = JapaneseJapan
0x0412 = KoreanKorea
0x0814 = NorwegianNynorsk
0x0415 = PolishPoland
0x0816 = PortuguesePortugal
0x0416 = PortugueseBrazilian
0x0419 = RussianFederation
0x041B = SlovakSlovak
0x080A = SpanishMexican
0x0C0A = SpanishSpain
0x041D = SwedishSweden
0x0422 = UkrainianUkraine
0x06
byte
parcelType
0 = UNDEFINED
1 = EXCLUSIVE
2 = SHARED
3 = FROMDOMAIN
0x07
byte
pad
0x33
0x08
int
userKey
null
0x0C
int
nameHash
Lowercase BKDRHash of domainString.
0x10
int
namePtr
Offset to domainString, relative to start of SECT .
0x14
int
fromNameHash
Lowercase BKDRHash of domainString 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.
0x38
int
metaRecord
Offset to PSL or PSLD entry, relative to start of SECT .
0x3C
int
reserved
null
MetaSection
PSL (ParcelSliceMeta)
Offset
Type
Variable
Description
MetaParcelSlicesHeader
0x00
string
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
0x1E
short
blobFlags
PSLD (ParcelSliceDebugMeta)
Offset
Type
Variable
Description
0x00
string
magic
PSLD
0x04
int
size
Size of PSLD.
0x08
int
count
Amount of entrySize and NameTableEntry
0x0C
int
offset
Offset to NameTableEntry
0x10
byte[16]
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
Unknown
0x10
int
Unknown
0xFFFFFFFF
0x14
int[3]
Unknown
null
0x20
String
assetname
Name of corresponding asset.
Padding - 0x33 bytes until this entry reaches <entrySize> in length.