We just reached 25,000 articles on this wiki! πŸ₯³
If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

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 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 (NTSC) 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, ...]