EvilEngine/HIP (File Format): Difference between revisions

no edit summary
Battlepedia>Igorseabra4
(Created page with "==Introduction== 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...")
 
Battlepedia>Igorseabra4
No edit summary
Line 5:
 
==General Info==
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.
 
===Header Format===
// This header is present at the start of all sections.
<pre>
// This header is present at the start of all sections.
char[4] sectionName
int sectionSize
Line 23 ⟶ 27:
 
===HIPA===
// This section is empty.
<pre>
// This section is empty
</pre>
 
===PACK===
// 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).
<pre>
// 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
Line 36 ⟶ 38:
section PMOD
section PLAT
</pre>
 
===PVER===
// This section contains information about the archive version.
<pre>
// This section contains information about the archive version.
int subVersion
int clientVersion
Line 47 ⟶ 49:
 
===PFLG===
// This section contains archive flags.
<pre>
// This section contains archive flags.
int flags
</pre>
 
===PCNT===
// This section contains counters.
<pre>
int LHDRCountAHDRCount //\\ Amount of LHDRAHDR sections
// This section contains counters.
int AHDRCountLHDRCount //\\ Amount of AHDRLHDR sections
int LHDRCount // Amount of LHDR sections
int sizeOfLargestSourceFileAsset
int sizeOfLargestLayer
Line 63 ⟶ 65:
 
===PCRT===
// This section contains a date.
<pre>
int fileDate // Date file was compiled
stringint dateStringfileDate //\\ Date asfile stringwas compiled
string dateString \\ Date as string
</pre>
 
===PMOD===
<pre>
// This section contains a date
int modDate //\\ Date file was last changed
</pre>
 
===PLAT===
// This section contains platform data. It's not present in Scooby Doo.
<pre>
// This section contains platform data. It's not present in Scooby Doo.
 
//* Format for Battle for Bikini Bottom
<pre>
string targetPlatform
string targetPlatformName
Line 84 ⟶ 87:
string language
string targetGame
</pre>
 
//* Format for The Incredibles, Spongebob Movie and Rise of the Underminer
<pre>
string targetPlatform
string language
Line 93 ⟶ 98:
 
===DICT===
// This section contains no data and 2 sub sections: ATOC and LTOC.
<pre>
// This section contains no data and 2 sub sections: ATOC and LTOC.
section ATOC
section LTOC
Line 100 ⟶ 105:
 
===ATOC===
// This section contains one AINF sub section and an array of AHDR sub sections as specified in PCNT.
<pre>
// This section contains one AINF sub section and an array of AHDR sub sections as specified in PCNT
section AINF
section[AHDRCount] AHDR
Line 112 ⟶ 117:
 
===AHDR===
// This section contains data and one ADBG sub section. AHDR is used to define an asset entry.
<pre>
intuint assetID //\\ identifier ID for this asset, must be unique for each asset
// This section contains data and one ADBG sub section
char[4] fileType[[Asset|assetType]] //\\ asset type
// AHDR is used to define an asset entry
int fileOffset \\ absolute
int assetID // identifier ID for this asset, must be unique for each asset
char[4] fileType // asset type
int fileOffset // relative to entire archive
int fileSize
int plusValue //\\ amount of padding after file data
int flags
section ADBG
Line 126 ⟶ 130:
===ADBG===
<pre>
int alignment //\\ file must be aligned to this amount of bytes in the stream, this will define the plusValue in the AHDR
// This section contains more asset data
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
intuint checksum //\\ ignored
</pre>
 
===LTOC===
// This section contains one LINF sub section and an array of LHDR sub sections as specified in PCNT.
<pre>
// This section contains one LINF sub section and an array of LHDR sub sections as specified in PCNT
section LINF
section[LHDRCount] LHDR
Line 146 ⟶ 149:
 
===LHDR===
// This section contains data and one LDBG sub section. LHDR is used to define a layer entry.
<pre>
// This section contains data and one LDBG sub section
// LHDR is used to define a layer entry
int layerType
int assetAmount
Line 161 ⟶ 163:
 
===STRM===
// This section contains no data and 2 sub sections: DHDR and DPAK.
<pre>
// This section contains no data and 2 sub sections: DHDR and DPAK.
section DHDR
section DPAK
Line 173 ⟶ 175:
 
===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).
<pre>
int firstPadding //\\ Initital padding at start of data
// 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
</pre>