HIP (File Format)
HIP archives are container formats used by Heavy Iron Studios in some of their games, including Spongebob Squarepants: Battle For Bikini Bottom. They are used mainly to contain assets, which are the resources used to create levels, characters and menus for the games. The files usually have the extension .HIP, but some have the .HOP extension; although the types of assets kept in both are usually different, HIP and HOP do not differ by internal structure. The archives are divided into multiple sections, each of which starts with an 8 byte header containing the section name in ASCII and the total size of the section, all of which are listed below.
There are at least three different revisions of the format: the first one used in Scooby Doo: Night of 100 Frights, a second one used in Spongebob Squarepants: Battle For Bikini Bottom and a third one which is used in The Incredibles Game, The Spongebob Squarepants Movie and The Incredibles: Rise of the Underminer.
HIP archives are big endian in all versions of each game. It's made up of 4 main sections:
- HIPA: this section is empty. It's used to mark the start of the file.
- PACK: this section contains general data about the archive, such as game name, creation date and number of assets.
- DICT: this section contains asset headers and layers. Each layer has a type and is composed of certain types of assets.
- STRM: this section contains the raw data for the assets. Each asset header references the STRM by an absolute offset.
This header is present at the start of all sections.
char sectionName int sectionSize
Strings do not contain a character count, are zero-terminated and aligned by two bytes (all strings will have either one or two zeroes after them). This also applies to empty strings (in this case, there will be two zeroes).
The data array of the DPAK section contains a lot of padding in order to align the file data. All padding is done by bytes which are equal to 0x33.
This section is empty.
This section contains no data and 6 sub sections: PVER, PFLG, PCNT, PCRT, PMOD and PLAT (although PLAT is not present in Scooby Doo: Night of 100 Frights).
section PVER section PFLG section PCNT section PCRT section PMOD section PLAT
This section contains information about the archive version.
int subVersion int clientVersion int compatible
This section contains archive flags.
This section contains counters.
int AHDRCount \\ Amount of AHDR sections int LHDRCount \\ Amount of LHDR sections int sizeOfLargestSourceFileAsset int sizeOfLargestLayer int sizeOfLargestSourceVirtualAsset
This section contains a date.
int fileDate \\ Date file was compiled string dateString \\ Date as string
This section contains a date int modDate \\ Date file was last changed
This section contains platform data. It's not present in Scooby Doo.
- Format for Battle for Bikini Bottom
string targetPlatform string targetPlatformName string regionFormat string language string targetGame
- Format for The Incredibles, Spongebob Movie and Rise of the Underminer
string targetPlatform string language string regionFormat string targetGame
This section contains no data and 2 sub sections: ATOC and LTOC.
section ATOC section LTOC
This section contains one AINF sub section and an array of AHDR sub sections as specified in PCNT.
section AINF section[AHDRCount] AHDR
This section contains data and one ADBG sub section. AHDR is used to define an asset entry.
uint assetID \\ identifier ID for this asset, must be unique for each asset char [[Asset|assetType]] \\ asset type int fileOffset \\ absolute int fileSize int plusValue \\ amount of padding after file data int flags section ADBG
int alignment \\ file must be aligned to this amount of bytes in the stream, this will define the plusValue in the AHDR string assetName string assetFileName uint checksum \\ ignored
This section contains one LINF sub section and an array of LHDR sub sections as specified in PCNT.
section LINF section[LHDRCount] LHDR
This section contains data and one LDBG sub section. LHDR is used to define a layer entry.
int layerType int assetAmount int[assetAmount] assetIDlist section LDBG
This section contains no data and 2 sub sections: DHDR and DPAK.
section DHDR section DPAK
This section contains a byte array which contains all asset data. AHDR references this section by fileOffset. If AHDRCount is 0, this section is empty (no firstPadding or data).
int firstPadding \\ Initital padding at start of data byte data
HipHopFile is a library which can be used to work with HIP files.