User Tools

Site Tools


banjo_kazooie:geometry_layouts

Geometry Layouts

These scripts load display lists within the model file, with certain aspects, properties, and checks applied. They are found at the end of a model file.

0x01: SORT

Runs one or both child geometry layouts, sorting based on positions. If vectors are u and v, run first child first if (v-u).u >= 0. Used to depth sort translucent geometry. Usage:

Value/Syntax Description
[00 00 00 01] Sort Command ID
[aa aa aa aa] Command Length* (0x28)
[xx xx xx xx] first child x (float)
[yy yy yy yy] first child y (float)
[zz zz zz zz] first child z (float)
[xx xx xx xx] second child x (float)
[yy yy yy yy] second child y (float)
[zz zz zz zz] second child z (float)
[00 bb cc cc] if bb&1, draw only nearer child; cc cc=first child offset
[00 00 dd dd] second child offset

—-

0x02: BONE

Loads a display list from the DL segment and attaches it to the current group of bones with ID. Usage:

Value/Syntax Description
[00 00 00 02] Bone Command ID
[00 00 aa aa] Load DL - DL Segment Address/8 (Example: 0x1C = 0xE0)
[bb cc dd dd] bb=Command Length* (0x10), cc=Bone ID, dddd=??
[00 00 00 00] If bb=10, these four bytes are written before the next command. (Padding)

0x03: LOAD DL

Loads a display list from offset of F3DEX segment Usage:

Value/Syntax Description
[00 00 00 03] Load DL Command ID
[aa aa aa aa] Command Length* (0x10)
[bb bb cc cc] bbbb=Offset in DL Segment/0x08, cccc=Tri Count
[00 00 00 00] If aa=10, these four bytes are written before the next command. (Padding)

Example: 00 00 00 03 00 00 00 00 00 2D 00 10

Addr= 0x2D*0x08 offset from F3DEX Segment Start, 0x168 0x10= 16 triangles in DL


0x05: SKINNING

Draw triangles across bones. Usage:

Value/Syntax Description
[00 00 00 05] Skinning Command ID
[aa aa aa aa] Command Length* (Varies)
[bb bb cc cc] bb bb=DL segment offset, sets up vertics on previous bone
[dd dd ee ee] cc cc, dd dd, ee ee, …=zero-terminated list of DL offsets for current bone, using setup vertices

0x06: BRANCH

(unused?)

Jumps. Usage:

Value/Syntax Description
[00 00 00 06] Branch Command ID
[aa aa aa aa] Command Length* (0x10)
[bb bb bb bb] GeoLayout Command Target Offset (This should accept negative values)
[00 00 00 00] Padding

0x08: LOD

Runs a geometry layout if the distance from the camera is in a certain range.

Value/Syntax Description
[00 00 00 08] LOD Command ID
[aa aa aa aa] Command Length* (0x20)*
[bb bb bb bb] max distance (float)
[cc cc cc cc] min distance (float)
[xx xx xx xx] test position x (float)
[yy yy yy yy] test position y (float)
[zz zz zz zz] test position z (float)
[dd dd dd dd] geometry layout offset

*Note that the command length actually includes the length of the child GL list to run, and the length can be 0 to denote the end of a list, but there could still be MANY child commands to run.


0x0A: REFERENCE POINT

Computes a point on the current model to be referenced later. Used for spawning sparkle particles and Clanker's teeth/bolt positions. Usage:

Value/Syntax Description
[00 00 00 0A] Reference Point Command ID
[aa aa aa aa] Command Length* (0x18)
[bb bb cc cc] bb bb= reference point index, cc cc=bone index
[xx xx xx xx] bone offset x (float)
[yy yy yy yy] bone offset y (float)
[zz zz zz zz] bone offset z (float)

0x0C: SELECTOR

Selects one or more child geometry layouts to run. Used for blinking and many other model part selections, like Mumbo's hut. Each model sets a list of selectors, where positive values are the index of a (single) child layout to run and negative values (after being negated) are bitfields indicating multiple children to run. Usage:

Value/Syntax Description
[00 00 00 0C] Reference Point Command ID
[aa aa aa aa] Command Length* (Varies)
[bb bb cc cc] bb bb=child count, cc cc=selector index
[dd dd dd dd] dd dd dd dd, ee ee ee ee, …=list of bb bb offsets to geometry layouts that might be selected
[ee ee ee ee]

0x0D: DRAW DISTANCE

Applies draw distance to descending geometry Usage:

Value/Syntax Description
[00 00 00 0D] Command
[aa aa aa aa] Command Length*
[XX XX YY YY ZZ ZZ] Draw distance: Negative Coords
[XX XX YY YY ZZ ZZ] Draw distance: Positive Coords
[bb bb cc cc] bbbb= ?? Usually 0018, cccc= ?????

*Command Length: If value is nonzero, GeoLayout continues, else it is the last command.


0x0E: UNKNOWN

Usage:

Value/Syntax Description
[00 00 00 0E] Command
[aa aa aa aa] Command Length
[XX XX YY YY ZZ ZZ] Coords
[XX XX YY YY ZZ ZZ] Coords
[00 00 00 00] padding
Child commands*

*Child commands: if Command Length is not zero, then read commands until size is reached


banjo_kazooie/geometry_layouts.txt · Last modified: 2023/08/27 21:10 by minirop