This page contains notes for the game SpongeBob SquarePants: Battle for Bikini Bottom (GameCube, PlayStation 2, Xbox).
The .HIP/.HOP files can be extracted with the Industrial Park level editor or a QuickBMS script. Industrial Park is recommended nowadays as it lets you view levels in 3D and edit them.
Most of the information known surrounding the filesystem and the assets used in the game can be found at the BFBB Wiki.
Filetypes commonly found in .HOP files#
.HOP files contain the assets of each level. Since Battle for Bikini Bottom uses the same .HIP/.HOP filesystem as the SpongeBob Movie Game, please refer to that game's notes page for the list of filetypes commonly found in .HOP files.
Filetypes commonly found in .HIP files#
.HIP files contain spawn data, as well as markers (cameras, triggers, ports) and other things that make up the inner working of each level. Since Battle for Bikini Bottom uses the same .HIP/.HOP filesystem as the SpongeBob Movie Game, please refer to that game's notes page for the list of filetypes commonly found in .HIP files.
Folder Abbreviations#
HIP/HOP files#
HIP/HOP files are archives, much like ZIP or RAR files. They are made up of many individual assets. HIP/HOP files group specific assets together into layers, in order to optimize loading.
HIP/HOP files are used in 5 Heavy Iron games:
- Scooby Doo: Night of 100 Frights
- SpongeBob SquarePants: Battle for Bikini Bottom
- The SpongeBob SquarePants Movie
- The Incredibles
- The Incredibles: Rise of the Underminer
Assets#
There are a total of 94 asset types used in HIP/HOP files:
Asset Type |
Full name |
Description |
1 |
2 |
3 |
4 |
5 |
|---|---|---|---|---|---|---|---|
ALST |
AnimList |
✔ |
✔ |
✔ |
✔ |
✔ |
|
ANIM |
Anim |
✔ |
✔ |
✔ |
✔ |
✔ |
|
ATBL |
AnimTable |
✔ |
✔ |
✔ |
✔ |
✔ |
|
ATKT |
AttackTable |
✔ |
|||||
BINK |
Bink |
✔ |
✔ |
||||
BOUL |
Boulder |
✔ |
✔ |
✔ |
✔ |
||
BSP |
BSP (RenderWare .bsp) |
✔ |
|||||
BUTN |
Button |
✔ |
✔ |
✔ |
✔ |
||
CAM |
Camera |
✔ |
✔ |
✔ |
✔ |
✔ |
|
CCRV |
CamCurve |
✔ |
|||||
CNTR |
Counter |
✔ |
✔ |
✔ |
✔ |
✔ |
|
COLL |
.collision table |
✔ |
✔ |
✔ |
✔ |
||
Conditional |
✔ |
✔ |
✔ |
✔ |
✔ |
||
CRDT |
Credits |
✔ |
✔ |
✔ |
✔ |
||
CSN |
Cutscene |
✔ |
✔ |
✔ |
|||
CSNM |
Cutscene Mgr |
✔ |
✔ |
✔ |
✔ |
||
CSSS |
Cutscene Streaming Sound |
✔ |
✔ |
||||
CTOC |
Cutscene TOC |
✔ |
✔ |
✔ |
✔ |
||
DEST |
Destructible Object |
✔ |
✔ |
✔ |
|||
DPAT |
Dispatcher |
✔ |
✔ |
✔ |
✔ |
✔ |
|
DSCO |
Disco Floor |
✔ |
✔ |
||||
DSTR |
Destructible Object |
✔ |
✔ |
||||
DTRK |
✔ |
||||||
DUPC |
✔ |
||||||
DYNA |
Dynamic Type |
✔ |
✔ |
✔ |
✔ |
||
EGEN |
Electric Arc Generator |
✔ |
✔ |
✔ |
|||
ENV |
Environment |
✔ |
✔ |
✔ |
✔ |
✔ |
|
FLY |
Flythrough |
✔ |
✔ |
||||
FOG |
Fog |
✔ |
✔ |
✔ |
✔ |
✔ |
|
GRSM |
GrassMesh |
✔ |
|||||
GRUP |
Group |
✔ |
✔ |
✔ |
✔ |
✔ |
|
GUST |
✔ |
||||||
HANG |
✔ |
✔ |
|||||
JAW |
.jaw data |
✔ |
✔ |
✔ |
|||
JSP |
JSP (RenderWare .jsp) |
✔ |
✔ |
✔ |
✔ |
||
LITE |
Light |
✔ |
|||||
LKIT |
LightKit |
✔ |
✔ |
✔ |
✔ |
||
LOBM |
LobMaster |
✔ |
|||||
LODT |
.lod.table |
✔ |
✔ |
✔ |
✔ |
||
MAPR |
✔ |
✔ |
✔ |
✔ |
✔ |
||
MINF |
Model Info |
✔ |
✔ |
✔ |
✔ |
✔ |
|
MODL |
Model (RenderWare .dff) |
✔ |
✔ |
✔ |
✔ |
✔ |
|
MPHT |
✔ |
||||||
Marker |
✔ |
✔ |
✔ |
✔ |
✔ |
||
MVPT |
Move Point |
✔ |
✔ |
✔ |
✔ |
✔ |
|
NGMS |
NavMesh |
✔ |
✔ |
||||
NPC |
NPC |
✔ |
|||||
NPCS |
NPC Settings |
✔ |
✔ |
||||
ONEL |
Oneliners |
✔ |
|||||
PARE |
Particle Emitter |
✔ |
✔ |
✔ |
✔ |
||
PARP |
Particle Emitter Property |
✔ |
✔ |
✔ |
|||
PARS |
Particle System |
✔ |
✔ |
✔ |
✔ |
||
PEND |
Pendulum |
✔ |
|||||
PGRS |
✔ |
✔ |
|||||
PICK |
PickupTable |
✔ |
✔ |
✔ |
✔ |
||
PIPT |
.pipe info table |
✔ |
✔ |
✔ |
✔ |
||
PKUP |
Power Up/Item |
✔ |
✔ |
✔ |
|||
PLAT |
Platform |
✔ |
✔ |
✔ |
✔ |
✔ |
|
PLYR |
Player |
✔ |
✔ |
✔ |
✔ |
✔ |
|
PORT |
Portal |
✔ |
✔ |
✔ |
✔ |
✔ |
|
PRJT |
Projectile |
✔ |
|||||
RANM |
Reactive Anim |
✔ |
✔ |
||||
RAW |
Raw |
✔ |
✔ |
✔ |
|||
RWTX |
Texture (RenderWare .txd) |
✔ |
✔ |
✔ |
✔ |
✔ |
|
SCRP |
Script |
✔ |
✔ |
✔ |
|||
SDFX |
SFX |
✔ |
✔ |
✔ |
|||
SFX |
SFX |
✔ |
✔ |
||||
SGRP |
Sound Group |
✔ |
✔ |
✔ |
|||
SHDW |
.simple shadow table |
✔ |
|||||
SHRP |
Shrapnel |
✔ |
✔ |
✔ |
✔ |
||
SIMP |
Simple Object |
✔ |
✔ |
✔ |
✔ |
✔ |
|
SLID |
Slide Properties |
✔ |
|||||
SND |
Sound |
✔ |
✔ |
✔ |
✔ |
✔ |
|
SNDI |
Sound Info |
✔ |
✔ |
✔ |
✔ |
✔ |
|
SNDS |
Streaming Sound |
✔ |
✔ |
✔ |
✔ |
✔ |
|
SPLN |
Spline |
✔ |
✔ |
✔ |
|||
SPLP |
Spline Path |
✔ |
|||||
SSET |
Scene Settings |
✔ |
|||||
SUBT |
Subtitles |
✔ |
✔ |
||||
SURF |
Surface |
✔ |
✔ |
✔ |
✔ |
✔ |
|
TEXS |
✔ |
✔ |
✔ |
||||
TEXT |
Text |
✔ |
✔ |
✔ |
✔ |
✔ |
|
TIMR |
Timer |
✔ |
✔ |
✔ |
✔ |
✔ |
|
TPIK |
✔ |
✔ |
|||||
TRIG |
Trigger |
✔ |
✔ |
✔ |
✔ |
✔ |
|
TRWT |
✔ |
✔ |
|||||
UI |
UI |
✔ |
✔ |
||||
UIFT |
UI Font |
✔ |
✔ |
||||
UIM |
UI Motion |
✔ |
✔ |
✔ |
|||
VIL |
NPC |
✔ |
✔ |
||||
VILP |
NPC Properties |
✔ |
|||||
VOLU |
✔ |
✔ |
|||||
WIRE |
Wireframe |
✔ |
✔ |
||||
ZLIN |
ZipLine |
✔ |
Layers#
There are 11 layer types in BFBB:
- DEFAULT
- TEXTURE
- BSP
- MODEL
- ANIMATION
- VRAM
- SRAM
- SNDTOC
- CUTSCENE
- CUTSCENETOC
- JSPINFO
Format#
HIP/HOP files are big endian.
HIP/HOP files use sections as organization. Sections can contain data as well as sub-sections. There are 20 defined section types:
- HIPA, PACK, PVER, PFLG, PCNT, PCRT, PMOD, PLAT, DICT, ATOC, AINF, AHDR, ADBG, LTOC, LINF, LHDR, LDBG, STRM, DHDR, DPAK
Sections#
Each section starts with an 8-byte header:
char[4] sectionType
int sectionSize
After the header is all the data for the section, which must be the same size as sectionSize. The data is made up of various fields and sub-sections. The exact format for each section type is defined in Structure (below).
Strings#
HIP/HOP files store strings with a null-terminator and align them to a 2-byte offset. This means that there will always be one 0x00 at the end of a string (including empty strings), and possibly one more 0x00 for padding.
Structure#
section HIPA:
// This section is empty
section PACK:
section PVER:
int subVersion
int clientVersion
int compatible
section PFLG:
int flags
section PCNT:
int numAssets
int numLayers
int[3] unknown
section PCRT:
time_t dateCreated
string dateCreatedString // Format: "Sat Jan 01 00:00:00 2000"
section PMOD:
time_t dateModified
section PLAT:
// Optional section (game doesn't crash if not present).
// Scooby Doo: N100F doesn't have this section.
// Format for BFBB:
string platformCode // GC, P2, or XB
string platformName // GameCube, PlayStation 2, or Xbox
string regionFormat // NTSC or PAL
string language // US Common
string game // Sponge Bob
// Format for TSSM/Incredibles:
string platformCode // GC, PS2, or BX
string languageCode // US
string regionFormat // NTSC or PAL
string game // Incredibles
// Yes, in TSSM this is set to Incredibles
section DICT:
section ATOC:
section AINF:
int unknown = 0
section[numAssets] AHDR:
int assetID
char[4] assetType
int assetDataOffset
int assetSize
int assetPlus // amount of padding after asset data (ignored)
int assetFlags // 1 = SOURCE_FILE
// 2 = SOURCE_VIRTUAL
// 4 = READ_TRANSFORM
// 8 = WRITE_TRANSFORM
section ADBG:
int unknown
string assetName
string assetFilename // empty string if !(assetFlags & SOURCE_FILE)
int assetChecksum // ignored
section LTOC:
section LINF:
int unknown = 0
section[numLayers] LHDR:
int layerType
int layerNumAssets
int[layerNumAssets] layerAssets // asset IDs
section LDBG:
int unknown = -1
section STRM:
section DHDR:
int unknown = -1
section DPAK:
// If numAssets == 0, this section is empty. (No paddingBeforeFirstLayer)
// Else, this section contains each layer (in order of LHDR sections),
// padded with 0x33 bytes to the layer alignment setting,
// which depends on the game and target platform.
// Each layer contains the data of each asset in the layer
// (in order of LHDR.layerAssets), padded with 0x33 bytes
// to the alignment setting for the asset's type,
// which depends on the game and target platform.
// The amount of padding is written to the assetPlus field
// in the AHDR section for the asset.
int paddingBeforeFirstLayer
byte[paddingBeforeFirstLayer] padding
for each LHDR:
for each asset in LHDR.layerAssets:
byte[...] asset.data
byte[...] padding = [0x33, ...]
byte[...] padding = [0x33, ...]