ctrff-pub/docs/bcstm_doku.md
2025-05-04 13:32:07 +02:00

5.6 KiB

BCSTM File Format

Note that this Docs are based on Current State of development and are very unfinished

Contents

Header

Offset Size Datatype Description
0x00 4 u32 Magic 'CSTM' 0x4D545343
0x04 2 u16 Endianness Big == 0xfffe Little == 0xfeff
0x06 2 u16 Header Size 0x40
0x08 4 u32 Version
0x0c 4 u32 File Size
0x10 2 u16 Num Blocks (Should be 3)
0x12 2 u16 Reserved
0x14 12 Sized Reference Info Block Sized Reference
0x20 12 Sized Reference Seek Block Sized Reference
0x2c 12 Sized Reference Data Block Sized Reference

Reference

Offset Size Datatype Description
0x00 2 Reference Type TypeID
0x02 2 u16 Padding
0x04 4 u32 Offset (0xffffffff represents null)

Sized Reference

Offset Size Datatype Description
0x00 8 Reference Reference
0x08 4 u32 Size

Reference Table

Offset Size Datatype Description
0x00 4 u32 Count
0x04 Count*8 Reference References

Reference Types

ID Type
0x0100 Byte Table
0x0101 Reference Table
0x0300 DSP ADPCM Info
0x0301 IMA ADPCM Info
0x1f00 Sample Data
0x4000 Info Block
0x4001 Seek Block
0x4002 Data Block
0x4100 Stream Info
0x4101 Track Info
0x4102 Channel Info

Block Header

Offset Size Datatype Description
0x00 4 u32 Magic
0x04 4 u32 Size

Info Block

All Reference Offsets at the beginning of Info Block are Relative to the Infoblock + 0x08 (size of Block Header) Position

Offset Size Datatype Description
0x00 8 Block Header Block Header
0x08 8 Reference Stream Info Reference
0x10 8 Reference Track Info Reference Table Reference
0x18 8 Reference Channel Info Reference Table Table Reference
0x20 56 Stream Info Stream Info

Stream Info

Offset Size Datatype Description
0x00 1 u8 Encoding
0x01 1 u8 Loop 1 == true -- 0 == false
0x02 1 u8 Num Channels
0x03 1 u8 Padding
0x04 4 u32 Sample Rate
0x04 4 u32 Loop Start
0x04 4 u32 Loop End
0x04 4 u32 Sample Blocks
0x04 4 u32 Sample Block Size
0x04 4 u32 Sample Block Samples
0x04 4 u32 Last Sample Block Size
0x04 4 u32 Last Sample Block Samples
0x04 4 u32 Last Sample Block Padded Size
0x04 4 u32 Seek Data Size
0x04 4 u32 Seek Interval Samples
0x04 4 Reference Sample Data Reference

Channel Info

Offset Size Datatype Description
0x00 8 Reference Reference to DSP ADPCM Info !!! The Offsets are Relative to the start Pos of the Channel Info Object !!!

DSP ADPCM Info

Offset Size Datatype Description
0x00 32 Param Coefficients
0x20 6 DSP Context Context
0x26 6 DSP Context Loop Context
0x2c 2 u16 Padding

DSP ADPCM Param

Offset Size Datatype Description
0x00 32 u16 16 Bit Coefficients

DSP ADPCM Context

Offset Size Datatype Description
0x00 1 u8 4Bit Predictor and 4Bit Scale
0x01 1 u8 Reserved
0x02 2 16 Previous Sample
0x02 2 16 Second Previous Sample

Basic Datatypes

u32

using u32 = unsigned int; // or uint32_t

u16

using u16 = unsigned short; // or uint16_t

u8

using u8 = unsigned char; // or uint8_t

Tools / Devices / File SOurces used for research

Name Description
Visual Studio Code Used for creating ctrff c++ code for bcstm
ImHex Used to Analyze the Hex Code of the bcstm Files
Citra Fast way to generate Log files when developing ctrff
ctrff-cli Tool to generate Debug Output on Desktop OS like seen in BCSTM-Player File inspector
New 3ds XL Testing on Real Hardware (BCSTM-Player)
Mario Kart 7 (Cartridge) Used to get Test files
CTGP 7 Used to get Test files
Super Mario Maker 3ds (Cartridge) Used to get Test files
Mario and Luigi Bowsers inside story (Cartridge) Used to get Test files
Donkey Kong Country Returns 3D Used to get Test files