This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | |||
|
kirby64_the_crystal_shards:geometry_blocks [2020/05/27 11:19] jesusyoshi54 [SUB HEADER] |
kirby64_the_crystal_shards:geometry_blocks [2020/08/18 15:54] (current) jesusyoshi54 |
||
|---|---|---|---|
| Line 13: | Line 13: | ||
| - TEXTURE SCROLL SETTINGS | - TEXTURE SCROLL SETTINGS | ||
| - TEXTURE SCROLL DATA BLOCKS | - TEXTURE SCROLL DATA BLOCKS | ||
| + | - ANIMATION REFERENCES | ||
| ---- | ---- | ||
| Line 25: | Line 26: | ||
| /*0x0C*/ segptr imgRefs; // segment-offset pointer to the G_SETTIMG REFERENCES section | /*0x0C*/ segptr imgRefs; // segment-offset pointer to the G_SETTIMG REFERENCES section | ||
| /*0x10*/ segptr vtxRefs; // segment-offset pointer to the G_VTX REFERENCES section | /*0x10*/ segptr vtxRefs; // segment-offset pointer to the G_VTX REFERENCES section | ||
| - | /*0x14*/ int lenScrollData; // defines length of the Scroll DATA section | + | /*0x14*/ int numAnimations; // defines length of the ANIMARION REFS section |
| - | /*0x18*/ segptr scrollData; // segment-offset pointer to the Scroll DATA section | + | /*0x18*/ segptr Animations; // segment-offset pointer to the ANIMATION REFS section |
| /*0x1C*/ int lenLayout; // length of the Layout section | /*0x1C*/ int lenLayout; // length of the Layout section | ||
| }; | }; | ||
| Line 47: | Line 48: | ||
| ===== G_VTX REFERENCES ===== | ===== G_VTX REFERENCES ===== | ||
| This section is a zero-terminated array of segment-offset pointers to every G_VTX command in the DISPLAY LISTS section. | This section is a zero-terminated array of segment-offset pointers to every G_VTX command in the DISPLAY LISTS section. | ||
| - | It does not seem to be used by the game. | + | It is used by the game and can be left empty. |
| ---- | ---- | ||
| Line 57: | Line 58: | ||
| struct EntryPoint | struct EntryPoint | ||
| { | { | ||
| - | /*0x00*/ int marker; // 0x00: start of group, 0x01: continue group, 0x04 end of group | + | /*0x00*/ int marker; // 0x00: start of group, 0x01: continue group, 0x04 end of group |
| - | /*0x04*/ segptr displayList; /* segment-offset pointer to a display list in the DISPLAY LISTS section | + | /*0x04*/ segptr[] displayList; /* segment-offset pointer to a display list in the DISPLAY LISTS section |
| (NULL when marker is 0x04) */ | (NULL when marker is 0x04) */ | ||
| + | }; | ||
| + | </code> | ||
| + | |||
| + | Sometimes this is replaced simply by an array of display lists. | ||
| + | |||
| + | <code C> | ||
| + | struct DisplayListArray | ||
| + | { | ||
| + | /*0x00*/ segptr[] displayList; /* segment-offset pointer to a display list in the DISPLAY LISTS section*/ | ||
| }; | }; | ||
| </code> | </code> | ||
| Line 67: | Line 77: | ||
| The interpretation of this section varies depending on the value of the layoutMode field in the HEADER section. | The interpretation of this section varies depending on the value of the layoutMode field in the HEADER section. | ||
| Modes 0x13, 0x14, 0x17, 0x18, 0x1B and 0x1C are used by the game. | Modes 0x13, 0x14, 0x17, 0x18, 0x1B and 0x1C are used by the game. | ||
| + | The layoutMode is interpreted bitwise, with the above modes being the only ones | ||
| + | used by the game. | ||
| Layout structure for each mode: | Layout structure for each mode: | ||
| - | * 0x13: Unknown | + | * 0x13: No layout, instead the layout pointer references a display list. |
| - | * 0x14: A zero-terminated array of segment-offset pointers to display lists in the DISPLAY LISTS section. | + | * 0x14: No layout, instead a pointer to a DisplayListArray thats zero terminated. |
| - | * 0x17: An array of GeoTransformGfx structures. | + | * 0x17: An array of GeoTransformGroup structures. Pointer goes to single display list. |
| - | * 0x18: An array of GeoTransformGroup structures. | + | * 0x18: An array of GeoTransformGroup structures. Pointer goes to Entry Point. Length of segptr array is one. |
| - | * 0x1B: Unknown, only used for developer test level | + | * 0x1B: An array of GeoTransformGroup structures. Pointer goes to DisplayListArray. Length of segptr array is two. |
| - | * 0x1C: Unknown, only used for test level, 5-4-7 and 5-4-8 | + | * 0x1C: An array of GeoTransformGroup structures. Pointer goes to Entry Point. Length of segptr array is two. |
| - | + | ||
| - | <code C> | + | |
| - | struct GeoTransformGfx // Transform single display list | + | |
| - | { | + | |
| - | u16 flag; | + | |
| - | u16 command; | + | |
| - | segptr displayList; // segment-offset pointer to display list in the DISPLAY LISTS section | + | |
| - | vec3f position; // x, y, z position | + | |
| - | vec3f rotation; // x, y, z rotation radians | + | |
| - | vec3f scale; // x, y, z scale | + | |
| - | }; | + | |
| - | </code> | + | |
| <code C> | <code C> | ||
| Line 94: | Line 94: | ||
| u16 flag; | u16 flag; | ||
| u16 command; | u16 command; | ||
| + | union{ | ||
| segptr displayListGroup; // segment-offset pointer to an entry point | segptr displayListGroup; // segment-offset pointer to an entry point | ||
| + | segptr EntryPoint; | ||
| + | segptr DisplayListPair; | ||
| + | }; | ||
| vec3f position; // x, y, z position | vec3f position; // x, y, z position | ||
| vec3f rotation; // x, y, z rotation radians | vec3f rotation; // x, y, z rotation radians | ||
| Line 178: | Line 182: | ||
| ---- | ---- | ||
| - | ===== TEXTURE SCROLL DATA ===== | + | ===== ANIMATION REFS ===== |
| - | Texture Scroll data is an array of bank-index pairs. The length of the array is defined in the HEADER section's lenScrollData field. | + | Animations references are an array of bank-index pairs. The length of the array is defined in the HEADER section's numAnimations field. |
| - | Each Texture Scroll Data section is loaded into bank 0xE on level start and is | + | When needed, the data for the animation are dma'd by the games file system based on the bank index pair listed. |
| - | used as graphics data that the uvScrollData structs will be built around. | + | For info on animations see the animations page. |