Skip to content

Nodes, references and collector idents

GameBox (Nadeo)Data modelApplies toTMNF

A GBX node points at other nodes by number. Most references are node indices into the file’s own node table or into the header’s reference table, which lists other files; a few classes keep a child node in place instead, and a few lists carry a version word in front. Block models are found by name, and that name is the collector ident of the model file, not the file’s name. Observed · the install’s packs and maps, read with a strict reader and compared with GBX.NET

A node reference is an index. It names a node of the file’s node table or an entry of the header’s reference table, an external file; a reference to an external file is resolved without reading a node there. Sourced · GBX.NET

TMUnlimiter maps use this for files: the node indices named by their material-model references, replacement textures and image bitmap pairs are external files, not nodes, and none is named twice in a map (TMUnlimiter data). Observed · the 61 TMUnlimiter maps of 100 downloaded maps

Some classes keep a child node in place: the child has neither a class ID nor a node index in front of it, and is just its chunks up to the end marker 0xFACADE01. Observed · every pack file of the install that holds them, read to the end

Parent class and chunk Child stored in place Confidence
CSceneMobil 0x0A011005 CHmsItem Observed
CMotionPlayer 0x08034004 CMotionCmdBase Observed
CSceneSoundSource 0x0A00E000 CHmsSoundSource Observed
CSceneLight 0x0A00B000 CHmsLight Observed
CPlugVisualIndexed 0x0906A001 CPlugIndexBuffer (after a boolean) Observed

GBX.NET calls these direct nodes and counts them among a file’s nodes, though no node table lists them. Sourced · GBX.NET

Some lists of node references begin with a version word: a u32 that is 10, then the count and the references. Observed · every pack file of the install, and the embedded trees of three TMUnlimiter maps

Class Chunk Confidence
CGameCtnCollection 0x03033009, 0x0303301D Observed
CPlugDecoratorSolid (0x090A3000) 0x090A3000: references to CPlugDecoratorTree (0x090A2000) nodes Observed
CPlugTree chunk 006, its children Observed

CPlugFileGen (0x0902F000), a procedural image, reads its own fields in place of a chunk list: there is no 0xFACADE01 end marker after it. Sourced · GBX.NET Its version 2 is the only one in the install’s packs, where it is stored inline as the image of a bitmap. Observed · the Game/Stadium packs

A pack file’s contents are read through its cipher, and reading a node there also feeds the cipher a “dummy write” of the node’s class’s parent ID. The direct nodes above make it too: in the packs, CSceneMobil’s CHmsItem writes 0x06003000 28 bytes after the mobil’s own 0x0A011000, an inline CPlugIndexBuffer writes 0x0902B000, and CSceneLight’s CHmsLight writes 0x0600B000. CPlugFileGen makes none. Observed · the dummy writes GBX.NET records over the install’s packs

What is the pack cipher?

The pack container, its key and how the dummy writes enter the cipher are not described here. The facts above are of the writes a pack reader must make to stay in step, recorded as GBX.NET makes them.

A model file’s header chunk 0x0301A003 (the collector description) names the model with an ident, and a map names its blocks by that ident, not by the file’s name: StadiumRoadMainStartLine is the model in StadiumRoadMainStart.TMEDClassic.Gbx. Observed · the 65 campaign maps The headers of 2,360 pack files read, their 313 collector descriptions are all version 5, and every one of the 312 compared names the ident its body’s model has. Proven · every collector description of the install’s packs Indexing the models by ident finds a model for every block of the 65 campaign maps. Observed · the 65 campaign maps

CGameCtnDecorationAudio chunk 0x03039000 is not empty, though GBX.NET’s chunk list has it so. It holds a counted list of (ident, node reference) sounds and then a counted list of musics, the references being entries of the header’s reference table. Observed · the 2 audio files of the install

List Entries Confidence
Sounds (11) Ambient, RaceVictoryNadeo, RaceVictoryGold, RaceVictorySilver, RaceVictoryBronze, RaceVictoryFinish, RaceVictoryNewRecord, RaceDefeat, ZoomEditorToRace, ZoomRaceToEditor, RaceFigure Observed
Musics (3) MusicRace, MusicEditor, MusicReplay Observed

Sources

  • GBX.NET — version 2.5.0; class and chunk tables, its node-reference readers and its pack-file extraction