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
[00 00 aa aa] Continue*
[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=Continue*, cc=Bone ID, dddd=??
[00 00 00 00] If bb=10, these four bytes are written before the next command.

*Continue: If 00, GeoLayout stops after command. If 0x10, GeoLayout continues.


0x03: LOAD DL

Loads a display list from offset of F3DEX segment Usage:

Value/Syntax Description
[00 00 00 03] Load DL Command ID
[00 00 00 aa] 00 to end GeoLayout after command, 0x10 to continue
[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.

*Continue: If 00, GeoLayout stops after command. If 0x10, GeoLayout continues. 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
[00 00 aa aa] Continue*
[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

0x08: LOD

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

Value/Syntax Description
[00 00 00 05] Skinning Command ID
[00 00 aa aa] Continue*
[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

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
[00 00 aa aa] Continue*
[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
[00 00 aa aa] Continue*
[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
[00 00 00 aa] 00 for final instance, 28 otherwise
[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= ?????

banjo_kazooie/geometry_layouts.txt · Last modified: 2019/12/12 19:19 by pfedak