Skip to main content

MCBK ("KBCM") - Multi Cell Bank

Author(s): Gonhex
Research: Gonhex

The multi cell bank combines multiple animated cells into cluster. This allows more complex animations by grouping related sequences into one unit.

Table of Contents


Data Structure

Section Container

struct ContainerSectionMCBK
{
/* 0x0 */ struct NitroSectionHeader sectionHeader;
/* 0x8 */ struct ContainerMCBK sectionData;
}; // entry size = sectionHeader.lengthSection
Field NameDescriptionData Type
sectionHeaderHeader of this section. sectionHeader.signature = "KBCM".NitroSectionHeader
sectionDataContent of this section.ContainerMCBK

MCBK Container

struct ContainerMCBK
{
// header
/* 0x00 */ uint16_t numberMultiCells;
/* 0x02 */ uint16_t unknown0;
/* 0x04 */ uint32_t offsetDataMultiCell;
/* 0x08 */ uint32_t offsetDataMultiCellProperties;
/* 0x0C */ uint32_t unknown1;
/* 0x10 */ uint32_t unknown2;

// data
/* offsetMultiCell */ struct MultiCell dataMultiCell[numberMultiCells];
/* offsetMultiCellProperties */ struct MultiCellProperties dataMultiCellProperties[?];
}; // entry size = sectionHeader.lengthSection - 0x8
Field NameDescriptionData Type
numberMultiCellsNumber of multi cell objects.uint16_t
unknown0Always 0xBEEF.uint16_t
offsetDataMultiCellOffset to the multi cell data section relative to ContainerMCBK.uint32_t
offsetDataMultiCellPropertiesOffset to the multi cell property data section relative to ContainerMCBK.uint32_t
unknown1Unused offset?uint32_t
unknown2Unused offset?uint32_t
dataMultiCellMulti cell configuration table.MultiCell
dataMultiCellPropertiesCell selection and placement data.MultiCellProperties

Multi Cell

struct MultiCell
{
/* 0x0 */ uint16_t numberDisplayedCells;
/* 0x2 */ uint16_t numberLoadedCells;
/* 0x4 */ uint32_t offsetData;
}; // entry size = 0x8
Field NameDescriptionData Type
numberDisplayedCellsNumber of visible multi cells.uint16_t
numberLoadedCellsNumber of multi cells within the buffer.uint16_t
offsetDataOffset of the multi cell relative to MultiCell.uint32_t

Multi Cell Properties

struct MultiCellProperties
{
/* 0x0 */ uint16_t indexSequence;
/* 0x2 */ int16_t translateX;
/* 0x4 */ int16_t translateY;
/* 0x6 */ uint8_t frameMode;
/* 0x7 */ uint8_t uniqueID;
}; // entry size = 0x8
Field NameDescriptionData Type
indexSequenceSelects a sequence from the animation runtime.uint16_t
translateXX translation of the animated base.int16_t
translateYY translation of the animated base.int16_t
frameModeBehavior of the frame counter, if cell is temporary unloaded, see Frame Mode.uint8_t
uniqueIDLocal multi cell index starting by 0. No duplicates allowed.uint8_t

Specification

Frame Mode

Defines the behavior of a sequence if the displayed multicell changes.

  • 0x20: Reset the frame counter. The sequence will start from the beginning after the multicell regains focus.
  • 0x21: Continue counting. The sequence will continue counting frames even if the multicell lost focus, no restart after regaining it.

This value is probably a bitfield. This would explain the leading 2 which implies an always enabled flag.

Files