User Tools

Site Tools


extreme_g:gfx_collision_commands

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

extreme_g:gfx_collision_commands [2020/06/14 04:50] (current)
shygoo created
Line 1: Line 1:
 +===== Extreme-G GFX/​Collision Commands =====
  
 +Extreme-G uses high level commands to define level models'​ GFX and collision data.
 +
 +----
 +==== 00 end_submesh ====
 +''​00''​
 +
 +Presumably pushes the address of the current display list to some array and ends the current display list.
 +
 +Emits:
 +<​code>​
 +gsSPEndDisplayList()
 +</​code>​
 +
 +----
 +==== 01 vertex_list ====
 +''​01 [NN] [XX XX] [YY YY] [ZZ ZZ] [TI] [RR] [GG] [BB] [...]''​
 +
 +Defines a list of vertices to be used by ''​tri1''​ and ''​tri2''​ commands.
 +
 +''​TI''​ indexes the level'​s texture coordinate table to obtain the vertices'​ S and T texture coordinate values.
 +
 +^Parameter^Description^
 +| ''​NN'' ​  | Number of vertices |
 +| ''​XXXX''​ | X coordinate (signed) |
 +| ''​YYYY''​ | Y coordinate (signed) |
 +| ''​ZZZZ''​ | Z coordinate (signed) |
 +| ''​TI'' ​  | Texture coordinate index |
 +| ''​RR'' ​  | Vertex color red channel |
 +| ''​GG'' ​  | Vertex color green channel |
 +| ''​BB'' ​  | Vertex color blue channel |
 +| ... | ... more vertices |
 +
 +Emits:
 +<​code>​
 +gsSPVertex(...,​ NN)
 +</​code>​
 +
 +----
 +==== 02 level_texture ====
 +''​02 [II]''​
 +
 +Loads a CI8 or CI4 texture into TMEM.
 +''​II''​ indexes the level'​s texture meta table to obtain the texture'​s CI/TLUT addresses, format, and dimensions.
 +Texture data is obtained from the level'​s texture file.
 +
 +^Parameter^Description^
 +| ''​II''​ | Level texture index |
 +
 +Emits (if the current palette needs to be updated):
 +<​code>​
 +gsDPSetTextureImage(...)
 +gsDPTileSync()
 +gsDPSetTile(...)
 +gsSPLoadSync()
 +gsDPLoadTLUT(...)
 +gsSPPipeSync()
 +</​code>​
 +
 +
 +Emits:
 +<​code>​
 +gsDPSetTextureImage(...)
 +gsDPSetTile(...)
 +gsDPLoadSync()
 +gsDPLoadBlock(...)
 +gsDPPipeSync()
 +gsDPSetTile(...)
 +gsDPSetTileSize(...)
 +</​code>​
 +
 +----
 +==== 03 set_primcolor ====
 +''​03 [RR] [GG] [BB]''​
 +
 +Sets the RDP's primcolor register.
 +
 +Emits:
 +<​code>​
 +gsDPSetPrimColor(0,​ 0, 0, RR, GG, BB)
 +</​code>​
 +
 +----
 +==== 04 tri1 ====
 +''​04 [-aaaaabb] [bbbccccc]''​ (bitwise)
 +
 +Renders a single triangle.
 +
 +^Parameter^Description^
 +| ''​aaaaa''​ | RSP vertex index 0 |
 +| ''​bbbbb''​ | RSP vertex index 1 |
 +| ''​ccccc''​ | RSP vertex index 2 |
 +
 +Emits:
 +<​code>​
 +gsSP1Triangle(aaaaa,​ bbbbb, ccccc, 0)
 +</​code>​
 +
 +----
 +==== 05 tri2 ====
 +''​05 [-aaaaabb] [bbbccccc] [-dddddee] [eeefffff]'' ​ (bitwise)
 +
 +Renders two triangles.
 +
 +^Parameter^Description^
 +| ''​aaaaa''​ | RSP vertex index 0 |
 +| ''​bbbbb''​ | RSP vertex index 1 |
 +| ''​ccccc''​ | RSP vertex index 2 |
 +| ''​ddddd''​ | RSP vertex index 3 |
 +| ''​eeeee''​ | RSP vertex index 4 |
 +| ''​fffff''​ | RSP vertex index 5 |
 +
 +Emits:
 +<​code>​
 +gsSP2Triangles(aaaaa,​ bbbbb, ccccc, ddddd, eeeee, fffff, 0)
 +</​code>​
 +
 +----
 +==== 06 setcombine0 ====
 +''​06''​
 +
 +Emits:
 +<​code>​
 +gsDPPipeSync()
 +gsDPSetCombineMode(G_CC_MODULATERGBDECALA,​ G_CC_PASS2) // FC127FFF FFFFF238
 +</​code>​
 +
 +----
 +==== 07 setcombine1 ====
 +''​07''​
 +
 +Emits:
 +<​code>​
 +gsDPPipeSync()
 +gsDPSetCombineMode(PRIMITIVE,​ 0, SHADE, 0, 0, 0, 0, 1, G_CC_PASS2) // FC327FFF FFFFFC38
 +</​code>​
 +
 +----
 +==== 08 collision_vertex_list ====
 +''​08 [NN] [XX XX] [YY YY] [ZZ ZZ] [...]''​
 +
 +Defines a list of collision vertices.
 +
 +^Parameter^Description^
 +| ''​NN'' ​ | Number of vertices |
 +| ''​XX'' ​ | X position |
 +| ''​YY'' ​ | Y position |
 +| ''​ZZ'' ​ | Z position |
 +| ... | ... More vertices |
 +
 +----
 +==== 09 update_vertex_texcoord ====
 +''​09 [VI] [TI]''​
 +
 +Updates a single vertex'​s S and T texture coordinate values in the RSP's vertex buffer.
 +
 +''​TI''​ indexes the level'​s texture coordinate table.
 +
 +^Parameter^Description^
 +| ''​VI''​ | RSP vertex index |
 +| ''​TI''​ | Texture coordinate index |
 +
 +Emits:
 +<​code>​
 +gsSPModifyVertex(VI,​ G_MWO_POINT_ST,​ ((table[TI].s / 2) << 16) | (table[TI].t / 2))
 +</​code>​
 +
 +----
 +==== 0A unknown_dl ====
 +''​0A''​
 +
 +Jump to some display list, unknown purpose. The address of the display list is obtained from 801712E8.
 +
 +Emits:
 +<​code>​
 +gsSPDisplayList(...)
 +</​code>​
 +
 +----
 +==== 0B setcombine2 ====
 +''​0B''​
 +
 +Emits:
 +<​code>​
 +gsDPSetCombineMode(PRIMITIVE,​ 0, SHADE, 0, 0, 0, 0, 1, G_CC_PASS2) // FC327FFF FFFFFC38
 +</​code>​
 +
 +This command seems the same as command 07 but without the pipesync.
 +
 +----
 +==== 0C global_texture ====
 +''​0C [II]''​
 +
 +Loads a CI8 texture into TMEM. ''​II''​ indexes the table in the "​global texture"​ bank to obtain the texture'​s CI/TLUT addresses, dimensions, and data.
 +
 +^Parameter^Description^
 +| ''​II''​| Global texture index |
 +
 +Emits (if the current palette needs to be updated):
 +<​code>​
 +gsDPSetTextureImage(...)
 +gsDPTileSync()
 +gsDPSetTile(...)
 +gsSPLoadSync()
 +gsDPLoadTLUT(...)
 +gsSPPipeSync()
 +</​code>​
 +
 +Emits:
 +<​code>​
 +gsDPSetTextureImage(...)
 +gsDPSetTile(...)
 +gsDPLoadSync()
 +gsDPLoadBlock(...)
 +gsDPPipeSync()
 +gsDPSetTile(...)
 +gsDPSetTileSize(...)
 +</​code>​
 +
 +----
 +==== 0D common_texture ====
 +''​0D [II]''​
 +
 +Loads a CI8 texture into TMEM. ''​II''​ indexes the table in the level'​s "​common texture"​ bank to obtain the texture'​s CI/TLUT addresses, dimensions, and data.
 +
 +^Parameter^Description^
 +| ''​II''​ | Common texture index |
 +
 +Emits (if the current palette needs to be updated):
 +<​code>​
 +gsDPSetTextureImage(...)
 +gsDPTileSync()
 +gsDPSetTile(...)
 +gsSPLoadSync()
 +gsDPLoadTLUT(...)
 +gsSPPipeSync()
 +</​code>​
 +
 +
 +Emits:
 +<​code>​
 +gsDPSetTextureImage(...)
 +gsDPSetTile(...)
 +gsDPLoadSync()
 +gsDPLoadBlock(...)
 +gsDPPipeSync()
 +gsDPSetTile(...)
 +gsDPSetTileSize(...)
 +</​code>​
 +
 +----
 +==== 0E nop0 ====
 +(no operation)
 +
 +----
 +==== 0F nop1 ====
 +(no operation)
 +
 +----
 +===== Assembly Information =====
 +
 +  * The function responsible for loading a level and parsing these commands is at 8004F954.
 +  * The jump table for the parser'​s switch statement is at 8004BA98.
 +
 +Assembly location of each command:
 +
 +^ Command ^ ASM Location ^
 +| 00: end_submesh | 800518FC |
 +| 01: vertex_list | 8004FF70 |
 +| 02: level_texture | 800500B8 |
 +| 03: set_primcolor | 80050AE8 |
 +| 04: tri1 | 80050B34 |
 +| 05: tri2 | 80050B84 |
 +| 06: setcombine0 | 80050C18 |
 +| 07: setcombine1 | 80050C40 |
 +| 08: collision_vertex_list | 80050C6C |
 +| 09: update_vertex_texcoord | 80050D44 |
 +| 0A: unknown_dl | 80050DBC |
 +| 0B: setcombine2 | 80050DDC |
 +| 0C: global_texture | 80050E20 |
 +| 0D: common_texture | 8005136C |
 +| 0E: nop0 | 8004FF3C |
 +| 0F: nop1 | 8004FF3C |
extreme_g/gfx_collision_commands.txt ยท Last modified: 2020/06/14 04:50 by shygoo