Table of Contents

Geometry Layout Commands

The geometry layout commands define how geometric shapes are drawn. Some geo layouts are contained after the Level data blocks and some are loaded with Level Command 0x17 The first byte of the geo layout command is the command type. Unlike the level commands, there is no length byte specified in the command. Most geo layout commands are constant length, however, some depend on the values set.

Drawing Layers

Layer Description
00 Unused
01 Entirely Solid (Blending disabled)
02 Decals or triangles that draw on top of geometry near the same depth (Lessened depth-range). Blending disabled.
03 Unused
04 Transparent pixels, no blending (OpenGL's equivalent is Alphatest). Allows perfect layering with other transparencies around it.
05 Blending (translucency) enabled. Layering must be handled with the order of drawn faces.
06 Blending (translucency) enabled. Layering must be handled with the order of drawn faces. This layer is always drawn behind layer 05, usually for shadows. Lessened depth-range.

Geometry Layout Commands

00: Branch and Store

Branches to segmented address and stores 2 return addresses. This command is not used in the ROM.

00 00 00 00 [SS SS SS SS]

S Segmented address to branch to
/* Geo Layout 0x00 Rough translation. */
// 0x8038BD80 = Pointer to current Geo layout command
// 0x8038BCB8 = Pointer to array/table to where branch return pointers are stored.
// 0x8038BD7A = Branch depth value.
*(0x8038BCB8 + (0x8038BD7A * 4)) = *0x8038BD80 + 8; // Stores the pointer to the next geo command
*0x8038BD7A += 1; // Increment branch value
 
*(0x8038BCB8 + (0x8038BD7A * 4)) = (*0x8038BD78 << 16) + *0x8038BD7E; // Store another address
*0x8038BD7A += 1; // Increment branch value
*0x8038BD7E = *0x8038BD7A;
 
0x8038BD80 = SegmentedToVirtual(0x8038BD80 + 4); // Go to the segmented address.

Length: 8


01: Terminate Geometry Layout

The ending command to close.

01 00 00 00

Length: 4


02: Branch Geometry Layout

Branches the current geo layout to another area within a RAM bank.

02 [AA] 00 00 [SS SS SS SS]

A 0 = Jump, 1 = Jump and store return address
S Segmented address to branch to

Length: 8


03: Return From Branch

Ends the current geometry layout branch and returns to the area following the 0x02 command.

03 00 00 00

Length: 4


04: Open Node

If you don't understand nodes, this is basically like a sub-folder.

04 00 00 00

Length: 4


05: Close Node

Used at the end of the data within the opened node.

05 00 00 00

Length: 4


06: Unused


07: Unused


08: Set Screen Render Area

Only used in geo layout of levels.

08 00 00 [AA] [XX XX] [YY YY] [WW WW] [HH HH]

A Either 00 (mario face) or 0A (all other levels)
X X position
Y Y position
W Width of screen
H Height of screen

Length: C


09: ??

Only used in geo layout of levels.

09 00 00 [AA]

A Always 0x64

Length: 4


0A: Set Camera Frustum

Set camera frustum properties. Only used in geo layout of levels.

0A [AA] [BB BB] [NN NN] [FF FF] {EE EE EE EE}

A Use ASM code defined by E
B Camera FOV (0x2D = 45)
N Camera Near
F Camera Far
E optional ASM function if A is non-zero (always 8029AA3C)

Length: 8-C (variable)


0B: Start Geo Layout

Starts geometry layout with no parameters whatsoever. Seems to use a pre-set render area.

0B 00 00 00

Length: 4


0C: Enable/Disable Z-Buffer

This command is used in level geometry layouts. Z-Buffering is disabled when rendering the skybox, and re-enabled when rendering level geometry.

0C [AA] 00 00

A 0x00 = Disable Z-buffer, 0x01 = Enable Z-buffer

[ 0C 01 00 00 ] will add the following Fast3D data to the following node:

E7 00 00 00 00 00 00 00
B7 00 00 00 00 00 00 01
// Node's Fast3D commands
E7 00 00 00 00 00 00 00
B6 00 00 00 00 00 00 01

Length: 4


0D: Set Render Range

Used in WF, CCM, TTM, SSL levels and some geo layouts. This command will make the following node only render in a certain distance range away from the camera.

0D 00 00 00 [AA AA] [BB BB]

A (s16) Minimum distance value
B (s16) Maximum distance value

Example from “Grassy Level Part” in Whomp's fortress:

0049E3A8 / 0E000958 [ 20 00 07 D0 ]
0049E3AC / 0E00095C [ 04 00 00 00 ]
0049E3B0 / 0E000960    [ 0D 00 00 00 F8 30 1F 40 ]
0049E3B8 / 0E000968    [ 04 00 00 00 ]
0049E3BC / 0E00096C       [ 15 01 00 00 07 00 AB A0 ] // Real geometry (Camera is nearby)
0049E3C4 / 0E000974       [ 15 06 00 00 07 00 AF B8 ]
0049E3CC / 0E00097C    [ 05 00 00 00 ]
0049E3D0 / 0E000980    [ 0D 00 00 00 1F 40 4E 20 ]
0049E3D8 / 0E000988    [ 04 00 00 00 ]
0049E3DC / 0E00098C       [ 15 01 00 00 07 00 AE C8 ] // Fake geometry (Camera is far away)
0049E3E4 / 0E000994    [ 05 00 00 00 ]
0049E3E8 / 0E000998 [ 05 00 00 00 ]
0049E3EC / 0E00099C [ 01 00 00 00 ]

Length: 8


0E: Switch Case

Loads ASM in RAM that switches between the receding display lists within the node.

0E 00 00 [NN] [AA AA AA AA]

N Number of cases/display lists, starting at 01
A ASM Function

Length: 8


0F: ??

0F 00 [TT TT] [XX XX] [YY YY] [ZZ ZZ] [UU UU] [VV VV] [WW WW] [AA AA AA AA]

T ??
X ?? (s16)
Y ?? (s16)
Z ?? (s16)
U ?? (s16)
V ?? (s16)
W ?? (s16)
A ASM function. Always 80287D30 (levels) or 00 (menus)

Length: 0x14


10: Translate and Rotate

Applies translation & rotation to the following node.

10 [AA] [BB BB] [XX XX] [YY YY] [ZZ ZZ] [RX RX] [RY RY] [RZ RZ]

A Branching flag
B Used if A != 0
X X translation offset (s16)
Y Y translation offset (s16)
Z Z translation offset (s16)
RX X rotation (s16)
RY Y rotation (s16)
RZ Z rotation (s16)

Length: 0x10


13: Load Display List

Loads display list with drawing layer and offsets the model on X/Y/Z axis.

13 [LL] [XX XX] [YY YY] [ZZ ZZ] [AA AA AA AA]

L Drawing layer
X Offset on X axis (s16)
Y Offset on Y axis (s16)
Z Offset on Z axis (s16)
A Segmented address with display list
If 0x00000000, an invisible rotation joint is created

Length: C


14: Billboard Model

Billboards the model without needing the use of 0x21 in the behavior script.

14 00 00 00 00 00 00 00

Length: 8


15: Load Display List

Loads display list with drawing layer and no other properties.

15 [LL] 00 00 [AA AA AA AA]

L Drawing layer
A Segmented address with display list

Length: 8


16: Start Geo Layout with Shadow

Used at start of the geo layout, with shadow type, solidity, and size.

16 00 00 [AA] 00 [BB] [CC CC]

A Shadow type
B Shadow solidity (00=invisible, FF=black)
C Shadow scale

Length: 8


17: Set Up Object Rendering?

Sets up rendering for 3D Objects? Without it, 0x24 objects placed in level do not render.

17 00 00 00

Length: 4


18: Load Polygons ASM

Used in some original objects to point to ASM in RAM, for misc. effects such as vertex rippling.

The 3rd and 4th bytes are parameters passed into the asm function. Argument register a1 is a pointer to the node data, and the parameters are stored as a word at offset 0x18.

18 00 [XX XX] [AA AA AA AA]

X Parameter(s) passed into asm function. a1→0x18
A ASM RAM Address

Length: 8


19: Set Background

Set background image or color.

19 00 [TT TT] [AA AA AA AA]

T If A == 0, RGBA color, else background ID
A ASM function to set the background image, always 0x802763D4

Length: 8

Examples:

[ 19 00 00 00 80 27 63 D4 ] # Bob-Omb's Battlefield
[ 19 00 00 01 80 27 63 D4 ] # Lethal Lava Land
[ 19 00 00 02 80 27 63 D4 ] # Wet Dry World
[ 19 00 00 03 80 27 63 D4 ] # Rainbow Ride
[ 19 00 00 04 80 27 63 D4 ] # Cool Cool Mountain
[ 19 00 00 05 80 27 63 D4 ] # Shifting Sand Land
[ 19 00 00 06 80 27 63 D4 ] # Big Boo's Haunt
[ 19 00 00 07 80 27 63 D4 ] # Bowser 1 Course
[ 19 00 00 08 80 27 63 D4 ] # Jolly Roger Bay
[ 19 00 00 09 80 27 63 D4 ] # Bowser 3 Course
[ 19 00 00 01 00 00 00 00 ] # Secret Slide, pure black background

1A: No Operation

Doesn't do anything, nop. This command is never used in any of the scripts.

Length: 8


1D: Scale Model

Scales the receding data uniformly.

1D [A][B] 00 00 [SS SS SS SS] {?? ?? ?? ??}

A If MSbit is set, load B and ??
B If MSbit of A is set, use for A2 to 8037B940
S Scale percentage (0x10000 = 100%)
?? optional word used if the MSbit of A is set

Length: 8-C (variable)


1E: No Operation

Doesn't do anything, nop. This command is never used in any of the scripts.

Length: 8


1F: No Operation

Doesn't do anything, nop. This command is never used in any of the scripts.

Length: 0x10


20: Start Geo Layout with Render Area

Starts the geometry layout with no shadow and a render area.

20 00 [AA AA]

A Render distance?

Length: 4

See Also

Level Commands

References