EvilEngine/Sound Format

This page contains information on how sounds and music are stored in EvilEngine games.

In Scooby-Doo! Night of 100 Frights and SpongeBob SquarePants: Battle for Bikini Bottom sounds are usually contained in SND and SNDS assets, with the SNDI asset containing information about them. Each HOP file (sometimes the HIP) contains multiple SND and SNDS assets and one single SNDI asset. There doesn't seem to be an internal difference between SND and SNDS other than being stored as different assets; sound effects are usually in SND and voice lines and music (stored in mnu5.HIP in BFBB) are usually in SNDS.

In The SpongeBob SquarePants Movie, The Incredibles and The Incredibles: Rise of the Underminer, SND and SNDS assets are empty, and instead, all of the sounds are contained entirely in the SNDI asset.

Xbox and the FMOD GameCube games are the only platform which support Stereo. PS2 and GameCube (Scooby/BFBB) only support Mono due to its sound format (VAG and DSP).

GameCube (Night of 100 Frights/Battle for Bikini Bottom)
The audio format on the GameCube version of Scooby-Doo and BFBB is a Nintendo DSP-ADPCM audio file stripped of its 0x60 bytes *.dsp header: all of a level's sound headers are kept separate in the single SNDI asset.

GameCube (The SpongeBob SquarePants Movie - Ratatouille Prototype)
Those games on GameCube are the only EvilEngine games which utilize the FMOD audio engine. This allows stereo support although it still uses the same Nintendo non-stereo codec like Scooby-Doo and BFBB by interleaving two mono tracks. SND/SNDS assets are empty; all sounds are contained entirely in SNDI assets within "FSB3" (FMOD Sample Bank) files.

Xbox
The audio format on the Xbox version of all 5 games is either Xbox ADPCM, or raw 16-bit Linear PCM stripped of its *.wav header: all of a level's sound headers are kept separate in the single SNDI asset.

PlayStation 2
The audio format on the PS2 version of all 5 games is a PS2 VAG sound file stripped of its 0x30 bytes header (except in Scooby-Doo): all of a level's sound headers are kept separate in the single SNDI asset. The first 0x10 bytes are usually null to initialize the SPU.

CSSS Format
Same as SND/SNDS in Movie and The Incredibles: CSSS assets are empty and only used to "link" the sound header in SNDI with the sound data stored in cutscenes.

GameCube (Night of 100 Frights/Battle for Bikini Bottom)
The SNDI has a 0xC or 0x10 bytes big-endian header:

After that, there are three consecutive arrays of SNDI entries: one for the SND, one for the SNDS and one for cutscene headers. Each SNDI entry is 0x64 bytes long, big-endian and follows this structure:

GameCube (The SpongeBob SquarePants Movie - Ratatouille Prototype)
In those games, the SNDI contains not only the sound headers but also the entirety of the sound data themselves.

SNDI Header
The SNDI itself has a 0x20 byte big-endian header:

FSB3 Format
All sounds are contained inside FSB3 files. The first FSB3 is loaded into RAM, thus it has a ~8MB size limit, but can contain multiple sounds. Every subsequent FSB3 is streamed, thus it has no size limit but can only contain 1 sound. Read FMOD for more information about FMOD and the FSB3 format. Note: SNDI header and the Footer section are stored in big-endian while FSB's are little-endian.

Footer Section
This is a section which occurs at the end of the SNDI. The offset to this is set in the SNDI header. This is its structure:

FSB3 Offsets
After this, we have nWavFiles times the following structure, which refers to each sound in the SNDI:

Cutscene Header
At the end of the SNDI are the cutscene header. They are a 0x60 bytes dsp header + asset id of corresponding CSSS asset (same format as header in Scooby/BFBB).

Xbox
Stored in little-endian. The SNDI has a 0xC byte header:

After that, there are three consecutive arrays of entries: one for the SND, one for the SNDS and one for cutscene headers. Each entry is 0x2C bytes long and follows this structure: More information about Xbox ADPCM.

PlayStation 2
The SNDI has a 0x8 or 0xC bytes little-endian header:

After that, there are two consecutive arrays of SNDI entries: one for the SND and one for the SNDS. Each SNDI entry is 0x30 bytes long and is a Sony VAG header.

Scooby-Doo: Night of 100 Frights
Stored in big-endian, except reserved and probably also reserved2 which are in little-endian. There are two 0x30 bytes "RIFF" header with a different format, one in I001.HIP and in S005.HIP. However, they don't seem to work ingame.

Battle for Bikini Bottom - Rise of the Underminer
Stored in little-endian.