BCO (File Format)

A BCO contains the track's collision data in Mario Kart: Double Dash!!. It is split into 4 parts, where only 2 are known, and are listed below.

File Header

File header of a BCO file
Offset Type Description
0x00 String File magic. Always will be 0003 in ASCII.
0x04 UInt16 Grid width.
0x06 UInt16 Length of grid.
0x08 Int32 X Start of grid.
0x0C Int32 Z Start of grid.
0x10 Int32 Grid cell X size.
0x14 Int32 Grid cell Z size.
0x18 Int16 The number of entries in the last section.
0x1A Int16 Possible padding. Always 0x0000.
0x1C UInt32 Triangle indices offset.
0x20 UInt32 Triangle list offset.
0x24 UInt32 Vertex list offset.
0x28 UInt32 Material list offset.
0x2C End of File Header

Triangles

Triangles are parts of the collision format that are formed from 3 vertices. Triangles also have the collision type for the defined triangle. The structure is a 0x24 byte structure defined below.

Structure of a triangle in BCO.
Offset Type Description
0x00 Int32 The index of the first point of the triangle, from the vertex list.
0x04 Int32 The index of the second point of the triangle, from the vertex list.
0x08 Int32 The index of the third point of the triangle, from the vertex list.
0x0C Float Unknown
0x10 Int16 X Direction of normal vector.
0x12 Int16 Y Direction of normal vector.
0x14 Int16 Z Direction of normal vector.
0x16 UInt16 Collision Flags
0x18 Byte Table for getting Min/Max X/Z values.
0x19 Byte Camera Code - relates to the position of the player's view camera.
  • 0x00: Only seen in battle courses, Award, and in the outer quicksand in Dry Dry Desert.
  • 0x01: Most common value.
  • 0x02: "Intense camera mode", seen in Dry Dry Desert, Wario Colosseum, and Rainbow Road. The camera is positioned low behind the kart, closer to the exhaust pipes.
  • 0x03: Only seen in Rainbow Road, in the vertical "road" where karts are airborne after entering the cannon.
  • 0x04: Only seen in Pipe Plaza, in the upper level (the metallic platform).
  • 0x05: Seen in Dry Dry Desert, in the very center of the quicksand, and in Rainbow Road, in the descent after the speedy, spiral uphill.
0x1A Int16 Neighboring Triangle 1
0x1C Int16 Neighboring Triangle 2
0x1E Int16 Neighboring Triangle 3
0x20 Byte Unknown. Values in the stock courses are: 0x00, 0x01 (only in 0x0A__ dead zones), 0x30, and 0x50.
  • Upper 4 bits: In terms of 100 in-game units. Add Thickness value.
  • Last 4 bits: Sets the triangle as invalid for items.
0x21 Byte Appears to be a flag.
  • 0x00: Most common value.
  • 0x01: Seen in Daisy Cruiser, in the staircase before the finish line, and in Wario Colosseum, in the oval area with the great jump over the big hole.
0x22 Byte
  • 0x00: Most common value.
  • 0x01: Stagger Code: In dead zones, enables the falling animation.
  • 0x10: Spiral Code: Seen in Wario Colosseum, in parts of one of the spiral sections, and Bowser's Castle, in the spiral uphill inside the castle.
0x23 Byte ID of the associated GeoSplash object where applicable. Seen in:
  • In wavy dead zones (0x0F__).
  • In the muddy, off-road section in Waluigi Stadium (0x0001).
0x24 End of Section

Vertices

Vertices are sets of 3 floats that form a triangle. Each vertex structure is defined in a 0x0C byte structure below.

Structure of a vertex in BCO.
Offset Type Description
0x00 Float X position of the vertex.
0x04 Float Y position of the vertex.
0x08 Float Z position of the vertex.
0x0C End of Section

Material Table

This is a section with an unknown purpose. It is referred to as the matTable in game code. The number of entries is defined in byte 0x18 in the header. The 0xC byte structure is defined below.

Structure of the unknown section in a BCO.
Offset Type Description
0x00 UInt16 Collision flag
0x02 Int16 Sound ID
0x04 UInt32 unknown
0x08 UInt32 Unknown
0x0C End of Section

Collision Flags

Each triangle face has a collision flag that defines how the face acts when the player interacts with it. This can define whether it's sand, mud, ice, and more.

List of collision flags.
ID Basic Type Second Byte Description Details (Vanilla examples) Debug String
0x00__ Road Particles Medium offroad Used for the mud sections in Waluigi Stadium and sand in Luigi Circuit DIRT
0x01__ Road Particles Normal Road Normal road ROAD
0x02__ Wall - Kart and item wall - WALL
0x03__ Road Particles Medium offroad Used for grass in multiple courses GRASS
0x04__ Road Particles Slippery Ice - ICE
0x05__ Deadzone Respawn Point Horizontal bar deadzone Used for deadzones on level with the road, like in Mushroom City RESQ
0x06__ - - Mario Circuit grassy wall (possibly) Should be investigated further SLIP
0x07__ Boost Respawn Point (Optional) Zipper on a ramp Found in Bowser's Castle and Wario Colosseum DASHJ
0x08__ Boost - Zipper Boost - DASHB
0x09__ Boost / Teleportation Respawn Point Cannon Boost Requires a GeoCannon object CANNON
0x0A__ Deadzone Respawn Point Circle deadzone Usually used in the air, such as in Rainbow Road
0x0B__ Road Respawn Point Peach Beach sand - BEACH
0x0C__ Road - Weak Offroad Used for yellow Dry Dry Desert sand
0x0D__ Teleportation Respawn Point Pipe / Teleportation collision Used in Peach Beach and Mushroom Bridge pipes
0x0E__ Deadzone Respawn Point Sand deadzone Used in Dry Dry Desert in vanilla RESQD
0x0F__ Deadzone Respawn Point Wavy deadzone Used for water - in vanilla, requires a GeoSplash object RESQS
0x10__ Deadzone Respawn Point Quicksand Sinkhole Must have an inner and an outer circle of deadzone triangles - the deadzone is the inner circle VALLEY
0x11__ Deadzone Respawn Point PB sand Function as a deadzone when interacting with heavy water
0x12__ Wall Sound Kart wall - not item wall - OUTF
0x13__ Road Particles Heavy Offroad Used for orange Dry Dry Desert sand
0x37__/0x47__ Boost Respawn Point Zippers with respawn points Used on ramps, usually before a gap to ensure a higher jump

Sound Types

Each triangle also has a Sound-Type associated with it that defines how the face sounds when the player interacts with it. These are not part of the material name, but instead set in the obj_sound.txt files.

List of sound types.
ID Sound Vanilla examples
0x00 Asphalt / Street Used for the main road in Luigi Circuit and Baby Park
0x01 Dirt / Gravel Used for the main road in DK Mountain and Dino Dino Jungle
0x02 Stone / Pavement Used for the inside of the cave in Dino Dino Jungle and the castle in Bowser's Castle
0x03 Wooden Curb Used for the curbs in Luigi Circuit and Mario Circuit
0x04 - -
0x05 Wooden Bridge Used for the bridges in Dino Dino Jungle and Bowser's Castle
0x06 Ice Used for the slippery ice and the inside of the cave in Sherbet Land
0x07 Grass Used in a lot of courses
0x08 Stone Wall Used in a lot of courses
0x09 Metal Wall Used in a lot of courses
0x0A Sand Used for the medium offroad in Dry Dry Desert
0x0B Rainbow Used for the main road in Rainbow Road
0x0C Metal Grid Used for the metal grids in Wario Colosseum and Bowser's Castle
0x0D Mud Used for the deep Mud in Waluigi Stadium
0x0E - -
0x0F Grass Wall Used for the hedges in Mario Circuit
0x10 Dirt Wall Used in a lot of courses
0x11 Wood Wall Used for the ramp walls on Peach Beach
0x12 - -
0x13 Small Pipe Wall Used for the small pipes on Luigi Circuit
0x14 Metal Used for the main road in Wario Colosseum and the bridge in Mushroom Bridge
0x15 Carpet / Smooth Used for the carpet in Bowser's Castle and the arrow markings in Wario Colosseum
0x16 Snow Used for the main road and the offroad in Sherbet Land
0x17 Wood / Parquet Used for the wooden floors in Daisy Cruiser
0x18 Glass Used for the glass floors in GameCube and Tilt-a-Kart
0x19 Jelly Wall Used for the jelly walls in Cookie Land
0x1A DDJ Logs Used for the logs in Dino Dino Jungle
0x1B Big Pipe Wall Used for the big pipes in Waluigi Stadium (much deeper than 0x13 and features reverb)
0x1C Silent Sand Used for the main road in Dry Dry Desert (much quieter than 0x0A)
0xFF Default Wall Used for the walls around Deadzones

Tools

Mkdd-collision by Yoshi2

References

Tockdom