diff --git a/include/libultraship/libultra/gbi.h b/include/libultraship/libultra/gbi.h index 96b17a2..73a92f1 100644 --- a/include/libultraship/libultra/gbi.h +++ b/include/libultraship/libultra/gbi.h @@ -113,6 +113,7 @@ #define G_TRI2 (G_IMMFIRST - 14) #define G_BRANCH_Z (G_IMMFIRST - 15) #define G_LOAD_UCODE (G_IMMFIRST - 16) +#define G_QUAD (G_IMMFIRST - 10) #else #define G_RDPHALF_CONT (G_IMMFIRST - 13) #endif diff --git a/src/graphic/Fast3D/f3dex.h b/src/graphic/Fast3D/f3dex.h index 7f0aacf..3e54468 100644 --- a/src/graphic/Fast3D/f3dex.h +++ b/src/graphic/Fast3D/f3dex.h @@ -29,6 +29,7 @@ constexpr int8_t F3DEX_G_RDPHALF_CONT = OPCODE(G_IMMFIRST - 13); constexpr int8_t F3DEX_G_TRI2 = OPCODE(G_IMMFIRST - 14); constexpr int8_t F3DEX_G_BRANCH_Z = OPCODE(G_IMMFIRST - 15); constexpr int8_t F3DEX_G_LOAD_UCODE = OPCODE(G_IMMFIRST - 16); +constexpr int8_t F3DEX_G_QUAD = OPCODE(G_IMMFIRST - 10); // S2DEX constexpr int8_t F3DEX_G_SPRITE2D_BASE = OPCODE(9); @@ -149,4 +150,4 @@ constexpr int8_t F3DEX_G_OBJ_LOADTXTR = OPCODE(0xc1); constexpr int8_t F3DEX_G_OBJ_LDTX_SPRITE = OPCODE(0xc2); constexpr int8_t F3DEX_G_OBJ_LDTX_RECT = OPCODE(0xc3); constexpr int8_t F3DEX_G_OBJ_LDTX_RECT_R = OPCODE(0xc4); -constexpr int8_t F3DEX_G_RDPHALF_0 = OPCODE(0xe4); \ No newline at end of file +constexpr int8_t F3DEX_G_RDPHALF_0 = OPCODE(0xe4); diff --git a/src/graphic/Fast3D/gfx_pc.cpp b/src/graphic/Fast3D/gfx_pc.cpp index 3057de4..05ff7e8 100644 --- a/src/graphic/Fast3D/gfx_pc.cpp +++ b/src/graphic/Fast3D/gfx_pc.cpp @@ -3134,7 +3134,11 @@ bool gfx_quad_handler_f3dex2(F3DGfx** cmd0) { } bool gfx_quad_handler_f3dex(F3DGfx** cmd0) { - // TODO implement this command... + F3DGfx* cmd = *cmd0; + gfx_sp_tri1(C0(16, 8) / 2, C0(8, 8) / 2, C0(0, 8) / 2, false); + gfx_sp_tri1(C0(8, 8) / 2, C0(0, 8) / 2, C0(24, 0) / 2, false); + gfx_sp_tri1(C1(0, 8) / 2, C1(24, 8) / 2, C1(16, 8) / 2, false); + gfx_sp_tri1(C1(24, 8) / 2, C1(16, 8) / 2, C1(8, 8) / 2, false); return false; } @@ -3744,7 +3748,8 @@ const static std::unordered_map> f3dHandlers = {