Notes:SpongeBob SquarePants: Battle for Bikini Bottom (GameCube, PlayStation 2, Xbox)
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.
Contents
Filetypes commonly found in .HOP files
.HOP files contain the assets of each level. (Please refer to the SpongeBob Movie Game's notes page for the file types, found here as they both use the same filetypes.).
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. (Please refer to the SpongeBob Movie Game's notes page for the file types, found here as they both use the same filetypes.).
Folder Abbreviations
Folder Name | Abbreviation Meaning | Task(s) / Assets |
---|---|---|
B1 | Boss 1 | Poseidome (b101) |
B2 | Boss 2 | Industrial Park (b201) |
B3 | Boss 3 | Chum Bucket Lab (b301) |
BB | Bikini Bottom | Downtown Bikini Bottom (bb01) |
BC | Barnacle Cave | Mermalair (bc01) |
DB | SpongeBob's Dream | SpongeBob's Dream (db01) |
FMV | Full Motion Video | Logos, Trailers, Game Demos |
GL | Goo Lagoon | Goo Lagoon (gl01) |
GY | Graveyard | Flying Dutchman's Graveyard (gy01) |
HB | Hub | Bikini Bottom (hb00) |
JF | Jellyfish Fields | Jellyfish Fields (jf01) |
KF | Kelp Forest | Kelp Forest (kf01) |
MN | Menus | Menus (mnu3) |
MN-PAL | Menus (PAL) | Menus (mnu3) |
PG | Playground | SpongeBall Arena (pg12) |
RB | Rock Bottom | Rock Bottom (rb01) |
SM | Sand Mountain | Sand Mountain (tt01) |
SP | Single Player | Playable Characters (sppa) |
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 | ✔ | ✔ | ✔ | ✔ | ||
COND | 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 | ✔ | ||||||
MRKR | 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, ...]