EvilEngine/HIP (File Format)

From Heavy Iron Modding
Revision as of 22:58, 14 September 2018 by Battlepedia>Igorseabra4 (→‎Tools)

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 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.

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.

char[4] sectionName
int sectionSize

String Format

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).

Padding

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.

Structure

HIPA

This section is empty.

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).

section PVER
section PFLG
section PCNT
section PCRT
section PMOD
section PLAT

PVER

This section contains information about the archive version.

int subVersion
int clientVersion
int compatible

PFLG

This section contains archive flags.

int flags

PCNT

This section contains counters.

int AHDRCount \\ Amount of AHDR sections
int LHDRCount \\ Amount of LHDR sections
int sizeOfLargestSourceFileAsset
int sizeOfLargestLayer
int sizeOfLargestSourceVirtualAsset

PCRT

This section contains a date.

int fileDate \\ Date file was compiled
string dateString \\ Date as string

PMOD

This section contains a date
int modDate \\ Date file was last changed

PLAT

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

DICT

This section contains no data and 2 sub sections: ATOC and LTOC.

section ATOC
section LTOC

ATOC

This section contains one AINF sub section and an array of AHDR sub sections as specified in PCNT.

section AINF
section[AHDRCount] AHDR

AINF

int unknown

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[4] [[Asset|assetType]] \\ asset type
int fileOffset \\ absolute
int fileSize
int plusValue \\ amount of padding after file data
int flags
section ADBG

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

LTOC

This section contains one LINF sub section and an array of LHDR sub sections as specified in PCNT.

section LINF
section[LHDRCount] LHDR

LINF

int unknown

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

LDBG

int unknown

STRM

This section contains no data and 2 sub sections: DHDR and DPAK.

section DHDR
section DPAK

DHDR

int unknown

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

Tools

HipHopFile is a library which can be used to work with HIP files.