This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
banjo_kazooie:geometry_layouts [2019/12/12 18:52] pfedak skinning geo layout |
banjo_kazooie:geometry_layouts [2023/08/27 21:10] (current) minirop [0x0E: UNKNOWN] |
||
|---|---|---|---|
| Line 9: | Line 9: | ||
| ^ Value/Syntax ^ Description ^ | ^ Value/Syntax ^ Description ^ | ||
| | [00 00 00 01] | Sort Command ID | | | [00 00 00 01] | Sort Command ID | | ||
| - | | [00 00 <color #ff7f27>aa aa</color>] | Continue* | | + | | [<color #ff7f27>aa aa aa aa</color>] | Command Length* (0x28)| |
| | [<color darkred>xx xx xx xx</color>] | first child x (float) | | | [<color darkred>xx xx xx xx</color>] | first child x (float) | | ||
| | [<color darkgreen>yy yy yy yy</color>] | first child y (float) | | | [<color darkgreen>yy yy yy yy</color>] | first child y (float) | | ||
| Line 27: | Line 27: | ||
| | [00 00 00 02] | Bone Command ID | | | [00 00 00 02] | Bone Command ID | | ||
| | [00 00 <color darkred>aa aa</color>] | Load DL - DL Segment Address/8 (Example: 0x1C = 0xE0)| | | [00 00 <color darkred>aa aa</color>] | Load DL - DL Segment Address/8 (Example: 0x1C = 0xE0)| | ||
| - | | [<color darkgreen>bb</color> <color darkblue>cc</color> <color purple>dd dd</color>] | <color darkgreen>bb</color>=Continue*, <color darkblue>cc</color>=Bone ID, <color purple>dddd</color>=?? | | + | | [<color darkgreen>bb</color> <color darkblue>cc</color> <color purple>dd dd</color>] | <color darkgreen>bb</color>=Command Length* (0x10), <color darkblue>cc</color>=Bone ID, <color purple>dddd</color>=?? | |
| - | | [00 00 00 00] | If <color darkgreen>bb</color>=10, these four bytes are written before the next command. | | + | | [00 00 00 00] | If <color darkgreen>bb</color>=10, these four bytes are written before the next command. (Padding) | |
| - | *Continue: If 00, GeoLayout stops after command. If 0x10, GeoLayout continues. | + | |
| ---- | ---- | ||
| Line 38: | Line 38: | ||
| ^ Value/Syntax ^ Description ^ | ^ Value/Syntax ^ Description ^ | ||
| | [00 00 00 03] | Load DL Command ID | | | [00 00 00 03] | Load DL Command ID | | ||
| - | | [00 00 00 <color darkred>aa</color>] | 00 to end GeoLayout after command, 0x10 to continue | | + | | [<color darkred>aa aa aa aa</color>] | Command Length* (0x10)| |
| | [<color darkgreen>bb bb</color> <color darkblue>cc cc</color>] | <color darkgreen>bbbb</color>=Offset in DL Segment/0x08, <color darkblue>cccc</color>=Tri Count | | | [<color darkgreen>bb bb</color> <color darkblue>cc cc</color>] | <color darkgreen>bbbb</color>=Offset in DL Segment/0x08, <color darkblue>cccc</color>=Tri Count | | ||
| - | | [00 00 00 00] | If <color darkred>aa</color>=10, these four bytes are written before the next command. | | + | | [00 00 00 00] | If <color darkred>aa</color>=10, these four bytes are written before the next command. (Padding)| |
| - | *Continue: If 00, GeoLayout stops after command. If 0x10, GeoLayout continues. | + | |
| ''Example: 00 00 00 03 00 00 00 00 00 2D 00 10'' | ''Example: 00 00 00 03 00 00 00 00 00 2D 00 10'' | ||
| Line 55: | Line 55: | ||
| ^ Value/Syntax ^ Description ^ | ^ Value/Syntax ^ Description ^ | ||
| | [00 00 00 05] | Skinning Command ID | | | [00 00 00 05] | Skinning Command ID | | ||
| - | | [00 00 <color darkred>aa aa</color>] | Continue* | | + | | [<color darkred>aa aa aa aa</color>] | Command Length* (Varies)| |
| | [<color darkgreen>bb bb</color> <color darkblue>cc cc</color>] | <color darkgreen>bb bb</color>=DL segment offset, sets up vertics on previous bone | | | [<color darkgreen>bb bb</color> <color darkblue>cc cc</color>] | <color darkgreen>bb bb</color>=DL segment offset, sets up vertics on previous bone | | ||
| | [<color purple>dd dd</color> <color #b5e61d>ee ee</color>] | <color darkblue>cc cc</color>, <color purple>dd dd</color>, <color #b5e61d>ee ee</color>, ...=zero-terminated list of DL offsets for current bone, using setup vertices | | | [<color purple>dd dd</color> <color #b5e61d>ee ee</color>] | <color darkblue>cc cc</color>, <color purple>dd dd</color>, <color #b5e61d>ee ee</color>, ...=zero-terminated list of DL offsets for current bone, using setup vertices | | ||
| Line 61: | Line 61: | ||
| ---- | ---- | ||
| - | ==== 0x08: ?????? ==== | + | ==== 0x06: BRANCH ==== |
| + | (unused?) | ||
| - | Usage currently unknown. | + | Jumps. Usage: |
| + | |||
| + | ^ Value/Syntax ^ Description ^ | ||
| + | | [00 00 00 06] | Branch Command ID | | ||
| + | | [<color darkred>aa aa aa aa</color>] | Command Length* (0x10)| | ||
| + | | [<color darkgreen>bb bb bb bb</color>] | GeoLayout Command Target Offset (This should accept negative values)| | ||
| + | | [<color #FFFFFF>00 00 00 00</color>] | 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 | | ||
| + | | [<color orange>aa aa aa aa</color>] | Command Length* (0x20)*| | ||
| + | | [<color #b5e61d>bb bb bb bb</color>] | max distance (float) | | ||
| + | | [<color #99d9ea>cc cc cc cc</color>] | min distance (float) | | ||
| + | | [<color darkred>xx xx xx xx</color>] | test position x (float) | | ||
| + | | [<color darkgreen>yy yy yy yy</color>] | test position y (float) | | ||
| + | | [<color darkblue>zz zz zz zz</color>] | test position z (float) | | ||
| + | | [<color #c8bfe7>dd dd dd dd</color>] | 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 | | ||
| + | | [<color orange>aa aa aa aa</color>] | Command Length* (0x18)| | ||
| + | | [<color #b5e61d>bb bb</color> <color purple>cc cc</color>] | <color #b5e61d>bb bb</color>= reference point index, <color purple>cc cc</color>=bone index | | ||
| + | | [<color darkred>xx xx xx xx</color>] | bone offset x (float) | | ||
| + | | [<color darkgreen>yy yy yy yy</color>] | bone offset y (float) | | ||
| + | | [<color darkblue>zz zz zz zz</color>] | 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 | | ||
| + | | [<color orange>aa aa aa aa</color>] | Command Length* (Varies) | | ||
| + | | [<color #b5e61d>bb bb</color> <color purple>cc cc</color>] | <color #b5e61d>bb bb</color>=child count, <color purple>cc cc</color>=selector index | | ||
| + | | [<color darkred>dd dd dd dd</color>] | <color darkred>dd dd dd dd</color>, <color darkgreen>ee ee ee ee</color>, ...=list of <color #b5e61d>bb bb</color> offsets to geometry layouts that might be selected | | ||
| + | | [<color darkgreen>ee ee ee ee</color>] | | | ||
| + | | ... | | | ||
| + | |||
| + | ---- | ||
| ==== 0x0D: DRAW DISTANCE ==== | ==== 0x0D: DRAW DISTANCE ==== | ||
| Line 74: | Line 129: | ||
| ^ Value/Syntax ^ Description ^ | ^ Value/Syntax ^ Description ^ | ||
| | [00 00 00 0D] | Command | | | [00 00 00 0D] | Command | | ||
| - | | [00 00 00 <color darkred>aa</color>] | 00 for final instance, 28 otherwise | | + | | [<color orange>aa aa aa aa</color>] | Command Length* | |
| | [<color darkred>XX XX</color> <color darkgreen>YY YY</color> <color darkblue>ZZ ZZ</color>] | Draw distance: Negative Coords| | | [<color darkred>XX XX</color> <color darkgreen>YY YY</color> <color darkblue>ZZ ZZ</color>] | Draw distance: Negative Coords| | ||
| | [<color darkred>XX XX</color> <color darkgreen>YY YY</color> <color darkblue>ZZ ZZ</color>] | Draw distance: Positive Coords | | | [<color darkred>XX XX</color> <color darkgreen>YY YY</color> <color darkblue>ZZ ZZ</color>] | Draw distance: Positive Coords | | ||
| | [<color darkred>bb bb</color> <color darkgreen>cc cc</color>] | <color darkred>bbbb</color>= ?? Usually 0018, <color darkgreen>cccc</color>= ????? | | | [<color darkred>bb bb</color> <color darkgreen>cc cc</color>] | <color darkred>bbbb</color>= ?? Usually 0018, <color darkgreen>cccc</color>= ????? | | ||
| + | |||
| + | *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 | | ||
| + | | [<color orange>aa aa aa aa</color>] | Command Length | | ||
| + | | [<color darkred>XX XX</color> <color darkgreen>YY YY</color> <color darkblue>ZZ ZZ</color>] | Coords | | ||
| + | | [<color darkred>XX XX</color> <color darkgreen>YY YY</color> <color darkblue>ZZ ZZ</color>] | Coords | | ||
| + | | [00 00 00 00] | padding | | ||
| + | | ... | Child commands* | | ||
| + | |||
| + | *Child commands: if Command Length is not zero, then read commands until size is reached | ||
| + | |||
| + | ---- | ||