We just released a prototype of the cancelled SNES port of Puggsy! Take a look!
As always, thank you for supporting The Cutting Room Floor on Patreon!

Notes:SpongeBob SquarePants: Battle for Bikini Bottom (GameCube, PlayStation 2, Xbox)

From The Cutting Room Floor
Jump to navigation Jump to search

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. (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 of Mission(s) / Contaminants
B1 Boss #1 Rumble At The Posidome (b101)
B2 Boss #2 Robo-Patrick Ahoy! (b201)
B3 Boss #3 SpongeBob Boss (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 Bikini Bottom Bikini Bottom (hb00)
JF Jellyfish Fields Jellyfish Fields (jf01)
KF Kelp Forest Kelp Forest (kf01)
MN Menus Menus
MN-PAL Menus (PAL) Menus
PG Spongeball Arena Spongeball Arena (pg12)
RB Rock Bottom Rock Bottom (rb01)
SM Sand Mountians Sand Mountians (tt01)
SP Characters 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, ...]