Attempt to decompile tex0f1756c0

This commit is contained in:
Ryan Dwyer 2022-06-06 19:40:02 +10:00
parent 760c0d07a9
commit c56cd2762c
7 changed files with 475 additions and 120 deletions

View File

@ -75,13 +75,13 @@
* *
* IMPLEMENTATION NOTE: * IMPLEMENTATION NOTE:
* There is another group of RDP commands that includes the triangle commands * There is another group of RDP commands that includes the triangle commands
* generated by the RSP code. These are the raw commands the rasterizer * generated by the RSP code. These are the raw commands the rasterizer
* hardware chews on, with slope info, etc. They will follow the RDP * hardware chews on, with slope info, etc. They will follow the RDP
* ordering... * ordering...
* *
* IMPLEMENTATION NOTE: * IMPLEMENTATION NOTE:
* The RDP hardware has some of these bit patterns wired up. If the hardware * The RDP hardware has some of these bit patterns wired up. If the hardware
* changes, we must adjust this table, likewise we can't change/add things * changes, we must adjust this table, likewise we can't change/add things
* once the hardware is frozen. (actually, the RDP hardware only looks at * once the hardware is frozen. (actually, the RDP hardware only looks at
* the lower 6 bits of the command byte) * the lower 6 bits of the command byte)
* *
@ -198,7 +198,7 @@
#define G_TEXRECT 0xe4 /* -28 */ #define G_TEXRECT 0xe4 /* -28 */
/* /*
* The following commands are the "generated" RDP commands; the user * The following commands are the "generated" RDP commands; the user
* never sees them, the RSP microcode generates them. * never sees them, the RSP microcode generates them.
* *
@ -231,8 +231,8 @@
/* masks to build RDP triangle commands: */ /* masks to build RDP triangle commands: */
#define G_RDP_TRI_FILL_MASK 0x08 #define G_RDP_TRI_FILL_MASK 0x08
#define G_RDP_TRI_SHADE_MASK 0x04 #define G_RDP_TRI_SHADE_MASK 0x04
#define G_RDP_TRI_TXTR_MASK 0x02 #define G_RDP_TRI_TXTR_MASK 0x02
#define G_RDP_TRI_ZBUFF_MASK 0x01 #define G_RDP_TRI_ZBUFF_MASK 0x01
/* /*
* HACK: * HACK:
@ -318,7 +318,7 @@
* *
* DO NOT USE THE LOW 8 BITS OF GEOMETRYMODE: * DO NOT USE THE LOW 8 BITS OF GEOMETRYMODE:
* The weird bit-ordering is for the micro-code: the lower byte * The weird bit-ordering is for the micro-code: the lower byte
* can be OR'd in with G_TRI_SHADE (11001100) to construct * can be OR'd in with G_TRI_SHADE (11001100) to construct
* the triangle command directly. Don't break it... * the triangle command directly. Don't break it...
* *
* DO NOT USE THE HIGH 8 BITS OF GEOMETRYMODE: * DO NOT USE THE HIGH 8 BITS OF GEOMETRYMODE:
@ -332,7 +332,7 @@
* appropriately and use primcolor to see anything. * appropriately and use primcolor to see anything.
* *
* G_SHADING_SMOOTH enabled means use all 3 colors of the triangle. * G_SHADING_SMOOTH enabled means use all 3 colors of the triangle.
* If it is not set, then do 'flat shading', where only one vertex color * If it is not set, then do 'flat shading', where only one vertex color
* is used (and all 3 vertices are set to that same color by the ucode) * is used (and all 3 vertices are set to that same color by the ucode)
* See the man page for gSP1Triangle(). * See the man page for gSP1Triangle().
* *
@ -837,27 +837,27 @@
Z_CMP | Z_UPD | CVG_DST_FULL | ALPHA_CVG_SEL | \ Z_CMP | Z_UPD | CVG_DST_FULL | ALPHA_CVG_SEL | \
ZMODE_OPA | \ ZMODE_OPA | \
GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
#define RM_ZB_XLU_SURF(clk) \ #define RM_ZB_XLU_SURF(clk) \
Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_XLU | \ Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_XLU | \
GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
#define RM_ZB_OPA_DECAL(clk) \ #define RM_ZB_OPA_DECAL(clk) \
Z_CMP | CVG_DST_FULL | ALPHA_CVG_SEL | ZMODE_DEC | \ Z_CMP | CVG_DST_FULL | ALPHA_CVG_SEL | ZMODE_DEC | \
GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
#define RM_ZB_XLU_DECAL(clk) \ #define RM_ZB_XLU_DECAL(clk) \
Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_DEC | \ Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_DEC | \
GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
#define RM_ZB_CLD_SURF(clk) \ #define RM_ZB_CLD_SURF(clk) \
Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_XLU | \ Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_XLU | \
GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
#define RM_ZB_OVL_SURF(clk) \ #define RM_ZB_OVL_SURF(clk) \
Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_DEC | \ Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_DEC | \
GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
#define RM_ZB_PCL_SURF(clk) \ #define RM_ZB_PCL_SURF(clk) \
Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | \ Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | \
G_AC_DITHER | \ G_AC_DITHER | \
@ -1044,7 +1044,7 @@
* element, we can't depend on the C compiler to align things * element, we can't depend on the C compiler to align things
* properly. * properly.
* *
* 64-bit structure alignment is enforced by wrapping structures with * 64-bit structure alignment is enforced by wrapping structures with
* unions that contain a dummy "long long int". Why this works is * unions that contain a dummy "long long int". Why this works is
* explained in the ANSI C Spec, or on page 186 of the second edition * explained in the ANSI C Spec, or on page 186 of the second edition
* of K&R, "The C Programming Language". * of K&R, "The C Programming Language".
@ -1108,14 +1108,14 @@ typedef struct {
/* 20 bytes for above */ /* 20 bytes for above */
/* padding to bring structure size to 64 bit allignment */ /* padding to bring structure size to 64 bit allignment */
char dummy[4]; char dummy[4];
} uSprite_t; } uSprite_t;
typedef union { typedef union {
uSprite_t s; uSprite_t s;
/* Need to make sure this is 64 bit aligned */ /* Need to make sure this is 64 bit aligned */
long long int force_structure_allignment[3]; long long int force_structure_allignment[3];
} uSprite; } uSprite;
@ -1194,7 +1194,7 @@ typedef union {
*/ */
#ifdef F3DEX_GBI_2 #ifdef F3DEX_GBI_2
/* 0,4 are reserved by G_MTX */ /* 0,4 are reserved by G_MTX */
# define G_MV_MMTX 2 # define G_MV_MMTX 2
# define G_MV_PMTX 6 # define G_MV_PMTX 6
# define G_MV_VIEWPORT 8 # define G_MV_VIEWPORT 8
# define G_MV_LIGHT 10 # define G_MV_LIGHT 10
@ -1252,7 +1252,7 @@ typedef union {
/* /*
* These are offsets from the address in the dmem table * These are offsets from the address in the dmem table
*/ */
#define G_MWO_NUMLIGHT 0x00 #define G_MWO_NUMLIGHT 0x00
#define G_MWO_CLIP_RNX 0x04 #define G_MWO_CLIP_RNX 0x04
#define G_MWO_CLIP_RNY 0x0c #define G_MWO_CLIP_RNY 0x0c
@ -1334,7 +1334,7 @@ typedef union {
* *
* Note: only directional (infinite) lights are currently supported. * Note: only directional (infinite) lights are currently supported.
* *
* Note: the weird order is for the DMEM alignment benefit of * Note: the weird order is for the DMEM alignment benefit of
* the microcode. * the microcode.
* *
*/ */
@ -1497,6 +1497,23 @@ typedef struct {
Tri tri; Tri tri;
} Gtri; } Gtri;
typedef struct {
unsigned char cmd:8;
unsigned char pad:8;
unsigned char z4:4;
unsigned char z3:4;
unsigned char z2:4;
unsigned char z1:4;
unsigned char y4:4;
unsigned char x4:4;
unsigned char y3:4;
unsigned char x3:4;
unsigned char y2:4;
unsigned char x2:4;
unsigned char y1:4;
unsigned char x1:4;
} Gtri4;
typedef struct { typedef struct {
int cmd:8; int cmd:8;
int pad1:24; int pad1:24;
@ -1655,7 +1672,7 @@ typedef struct {
/* /*
* Textured rectangles are 128 bits not 64 bits * Textured rectangles are 128 bits not 64 bits
*/ */
typedef struct { typedef struct {
unsigned long w0; unsigned long w0;
unsigned long w1; unsigned long w1;
@ -1671,14 +1688,32 @@ typedef struct {
unsigned int w1; unsigned int w1;
} Gwords; } Gwords;
// xxxxxxxx 11223344 44555566 66666777
// 88888888 99999999 9999aaaa aaaaaaaa
typedef struct {
unsigned int cmd:8;
unsigned int unk08:2;
unsigned int unk0a:2;
unsigned int unk0c:2;
unsigned int unk0e:4;
unsigned int unk12:4;
unsigned int flags:7;
unsigned int subcmd:3;
unsigned int unk20:8;
unsigned int tile1:12;
unsigned int tile2:12;
} GunkC0;
/* /*
* This union is the fundamental type of the display list. * This union is the fundamental type of the display list.
* It is, by law, exactly 64 bits in size. * It is, by law, exactly 64 bits in size.
*/ */
typedef union { typedef union {
Gwords words; Gwords words;
u8 bytes[8];
Gdma dma; Gdma dma;
Gtri tri; Gtri tri;
Gtri4 tri4;
Gline3D line; Gline3D line;
Gpopmtx popmtx; Gpopmtx popmtx;
Gsegment segment; Gsegment segment;
@ -1694,6 +1729,7 @@ typedef union {
Gloadtile loadtile; /* use for loadblock also, th is dxt */ Gloadtile loadtile; /* use for loadblock also, th is dxt */
Gsettilesize settilesize; Gsettilesize settilesize;
Gloadtlut loadtlut; Gloadtlut loadtlut;
GunkC0 unkc0;
long long int force_structure_alignment; long long int force_structure_alignment;
} Gfx; } Gfx;
@ -1803,7 +1839,7 @@ typedef union {
gsDma1p(G_VTX, v, sizeof(Vtx)*(n), ((n)-1)<<4|(v0)) gsDma1p(G_VTX, v, sizeof(Vtx)*(n), ((n)-1)<<4|(v0))
#endif #endif
#ifdef F3DEX_GBI_2 #ifdef F3DEX_GBI_2
# define gSPViewport(pkt, v) \ # define gSPViewport(pkt, v) \
gDma2p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0) gDma2p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0)
@ -2062,7 +2098,7 @@ typedef union {
/*** /***
*** 1 Triangle *** 1 Triangle
***/ ***/
#define gSP1Triangle(pkt, v0, v1, v2, flag) \ #define gSP1Triangle(pkt, v0, v1, v2, flag) \
{ \ { \
Gfx *_g = (Gfx *)(pkt); \ Gfx *_g = (Gfx *)(pkt); \
@ -2230,7 +2266,7 @@ typedef union {
* Insert values into Matrix * Insert values into Matrix
* *
* where = element of matrix (byte offset) * where = element of matrix (byte offset)
* num = new element (32 bit value replacing 2 int or 2 frac matrix * num = new element (32 bit value replacing 2 int or 2 frac matrix
* componants * componants
*/ */
#ifdef F3DEX_GBI_2 #ifdef F3DEX_GBI_2
@ -2258,7 +2294,7 @@ typedef union {
#define gsSPForceMatrix(mptr) \ #define gsSPForceMatrix(mptr) \
gsDma2p(G_MOVEMEM,(mptr),sizeof(Mtx),G_MV_MATRIX,0), \ gsDma2p(G_MOVEMEM,(mptr),sizeof(Mtx),G_MV_MATRIX,0), \
gsMoveWd(G_MW_FORCEMTX,0,0x00010000) gsMoveWd(G_MW_FORCEMTX,0,0x00010000)
#else /* F3DEX_GBI_2 */ #else /* F3DEX_GBI_2 */
#define gSPForceMatrix(pkt, mptr) \ #define gSPForceMatrix(pkt, mptr) \
{ \ { \
@ -2306,7 +2342,7 @@ typedef union {
/* /*
* gSPBranchLessZ Branch DL if (vtx.z) less than or equal (zval). * gSPBranchLessZ Branch DL if (vtx.z) less than or equal (zval).
* *
* dl = DL branch to * dl = DL branch to
* vtx = Vertex * vtx = Vertex
* zval = Screen depth * zval = Screen depth
* near = Near plane * near = Near plane
@ -2353,7 +2389,7 @@ typedef union {
/* /*
* gSPBranchLessZraw Branch DL if (vtx.z) less than or equal (raw zval). * gSPBranchLessZraw Branch DL if (vtx.z) less than or equal (raw zval).
* *
* dl = DL branch to * dl = DL branch to
* vtx = Vertex * vtx = Vertex
* zval = Raw value of screen depth * zval = Raw value of screen depth
*/ */
@ -2454,7 +2490,7 @@ typedef union {
#define NUMLIGHTS_7 7 #define NUMLIGHTS_7 7
/* /*
* n should be one of: NUMLIGHTS_0, NUMLIGHTS_1, ..., NUMLIGHTS_7 * n should be one of: NUMLIGHTS_0, NUMLIGHTS_1, ..., NUMLIGHTS_7
* NOTE: in addition to the number of directional lights specified, * NOTE: in addition to the number of directional lights specified,
* there is always 1 ambient light * there is always 1 ambient light
*/ */
#define gSPNumLights(pkt, n) \ #define gSPNumLights(pkt, n) \
@ -2466,7 +2502,7 @@ typedef union {
#define LIGHT_2 2 #define LIGHT_2 2
#define LIGHT_3 3 #define LIGHT_3 3
#define LIGHT_4 4 #define LIGHT_4 4
#define LIGHT_5 5 #define LIGHT_5 5
#define LIGHT_6 6 #define LIGHT_6 6
#define LIGHT_7 7 #define LIGHT_7 7
#define LIGHT_8 8 #define LIGHT_8 8
@ -2696,7 +2732,7 @@ typedef union {
* min, max: range 0 to 1000: 0=nearplane, 1000=farplane * min, max: range 0 to 1000: 0=nearplane, 1000=farplane
* min is where fog begins (usually less than max and often 0) * min is where fog begins (usually less than max and often 0)
* max is where fog is thickest (usually 1000) * max is where fog is thickest (usually 1000)
* *
*/ */
#define gSPFogFactor(pkt, fm, fo) \ #define gSPFogFactor(pkt, fm, fo) \
gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \ gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \
@ -2736,7 +2772,7 @@ typedef union {
_SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | _SHIFTL((on),1,7)),\ _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | _SHIFTL((on),1,7)),\
(_SHIFTL((s),16,16) | _SHIFTL((t),0,16)) \ (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)) \
} }
/* /*
* Different version of SPTexture macro, has an additional parameter * Different version of SPTexture macro, has an additional parameter
* which is currently reserved in the microcode. * which is currently reserved in the microcode.
*/ */
@ -2775,7 +2811,7 @@ typedef union {
_SHIFTL((level),11,3)|_SHIFTL((tile),8,3)|_SHIFTL((on),0,8)), \ _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)|_SHIFTL((on),0,8)), \
(_SHIFTL((s),16,16)|_SHIFTL((t),0,16)) \ (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)) \
} }
/* /*
* Different version of SPTexture macro, has an additional parameter * Different version of SPTexture macro, has an additional parameter
* which is currently reserved in the microcode. * which is currently reserved in the microcode.
*/ */
@ -2975,7 +3011,7 @@ typedef union {
gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode) gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode)
#endif #endif
/* 'blendmask' is not supported anymore. /* 'blendmask' is not supported anymore.
* The bits are reserved for future use. * The bits are reserved for future use.
* Fri May 26 13:45:55 PDT 1995 * Fri May 26 13:45:55 PDT 1995
*/ */
@ -3181,7 +3217,7 @@ typedef union {
* *
* This command makes all othermode parameters set. * This command makes all othermode parameters set.
* Do not use this command in the same DL with another g*SPSetOtherMode DLs. * Do not use this command in the same DL with another g*SPSetOtherMode DLs.
* *
* [Usage] * [Usage]
* gDPSetOtherMode(pkt, modeA, modeB) * gDPSetOtherMode(pkt, modeA, modeB)
* *
@ -3434,9 +3470,9 @@ typedef union {
((height)-1) << G_TEXTURE_IMAGE_FRAC) \ ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
} }
/* /*
* Allow tmem address and render tile to be specified. * Allow tmem address and render tile to be specified.
* The S at the end means odd lines are already word Swapped * The S at the end means odd lines are already word Swapped
*/ */
#define gDPLoadMultiBlockS(pkt, timg, tmem, rtile, fmt, siz, width, \ #define gDPLoadMultiBlockS(pkt, timg, tmem, rtile, fmt, siz, width, \
height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
@ -3652,13 +3688,13 @@ typedef union {
((width)-1) << G_TEXTURE_IMAGE_FRAC, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
((height)-1) << G_TEXTURE_IMAGE_FRAC) ((height)-1) << G_TEXTURE_IMAGE_FRAC)
/* /*
* Allows tmem and render tile to be specified. Useful when loading * Allows tmem and render tile to be specified. Useful when loading
* several tiles at a time. * several tiles at a time.
* *
* Here is the static form of the pre-swapped texture block loading * Here is the static form of the pre-swapped texture block loading
* See gDPLoadTextureBlockS() for reference. Basically, just don't * See gDPLoadTextureBlockS() for reference. Basically, just don't
* calculate DxT, use 0 * calculate DxT, use 0
*/ */
#define gsDPLoadMultiBlockS(timg, tmem, rtile, fmt, siz, width, height, \ #define gsDPLoadMultiBlockS(timg, tmem, rtile, fmt, siz, width, height, \
@ -3742,7 +3778,7 @@ typedef union {
} }
/* /*
* 4-bit load block. Allows tmem and render tile to be specified. Useful when * 4-bit load block. Allows tmem and render tile to be specified. Useful when
* loading multiple tiles. The S means odd lines are already word swapped. * loading multiple tiles. The S means odd lines are already word swapped.
*/ */
#define gDPLoadMultiBlock_4bS(pkt, timg, tmem, rtile, fmt, width, height,\ #define gDPLoadMultiBlock_4bS(pkt, timg, tmem, rtile, fmt, width, height,\
@ -4177,7 +4213,7 @@ typedef union {
G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*16, 1, \ G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*16, 1, \
pal, 0, 0, 0, 0, 0, 0) pal, 0, 0, 0, 0, 0, 0)
#endif /* _HW_VERSION_1 */ #endif /* _HW_VERSION_1 */
/* /*
* Load a 256-entry palette (for 8-bit CI textures) * Load a 256-entry palette (for 8-bit CI textures)
@ -4219,7 +4255,7 @@ typedef union {
gsDPLoadSync(), \ gsDPLoadSync(), \
gsDPLoadTLUTCmd(G_TX_LOADTILE, 255), \ gsDPLoadTLUTCmd(G_TX_LOADTILE, 255), \
gsDPPipeSync() gsDPPipeSync()
#else /* **** WORKAROUND hardware 1 load_tlut bug ****** */ #else /* **** WORKAROUND hardware 1 load_tlut bug ****** */
#define gsDPLoadTLUT_pal256(dram) \ #define gsDPLoadTLUT_pal256(dram) \
@ -4274,7 +4310,7 @@ typedef union {
G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, count, \ G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, count, \
0, 0, 0, 0, 0, 0, 0) 0, 0, 0, 0, 0, 0, 0)
#endif /* _HW_VERSION_1 */ #endif /* _HW_VERSION_1 */
#define gDPSetScissor(pkt, mode, ulx, uly, lrx, lry) \ #define gDPSetScissor(pkt, mode, ulx, uly, lrx, lry) \
{ \ { \
@ -4429,7 +4465,7 @@ typedef union {
} }
/* Notice that textured rectangles are 128-bit commands, therefore /* Notice that textured rectangles are 128-bit commands, therefore
* gsDPTextureRectangle() should not be used in display lists * gsDPTextureRectangle() should not be used in display lists
* under normal circumstances (use gsSPTextureRectangle()). * under normal circumstances (use gsSPTextureRectangle()).
* That is also why there is no gDPTextureRectangle() macros. * That is also why there is no gDPTextureRectangle() macros.
*/ */

View File

@ -779,7 +779,7 @@ glabel var7f1b598c
/* f13c078: 27bd0038 */ addiu $sp,$sp,0x38 /* f13c078: 27bd0038 */ addiu $sp,$sp,0x38
); );
void func0f13c07c(s32 arg0) void func0f13c07c(struct gfxvtx *vertex)
{ {
if (var8007f6e0 >= 0 && var8007f6f8 != var800a4180) { if (var8007f6e0 >= 0 && var8007f6f8 != var800a4180) {
if (var8007f6e8 == 0) { if (var8007f6e8 == 0) {
@ -813,7 +813,7 @@ void func0f13c07c(s32 arg0)
var8007f6ec = 1; var8007f6ec = 1;
} }
var800a418c[var8007f6f8].unk00 = arg0; var800a418c[var8007f6f8].unk00 = (u16)vertex; // @TODO: Investigate this
var8007f6f8++; var8007f6f8++;
var800a4190[var8007f6f4 - 1].unk01++; var800a4190[var8007f6f4 - 1].unk01++;

View File

@ -154,7 +154,7 @@ void modeldef0f1a7560(struct modelfiledata *modeldef, u16 filenum, u32 arg2, u32
vertices = NULL; vertices = NULL;
} }
s5 += tex0f1756c0((u32)modeldef + (s0 & 0xffffff) + sp84, s4, (u32)modeldef + (s5 & 0xffffff), arg4, vertices); s5 += tex0f1756c0((Gfx *)((u32)modeldef + (s0 & 0xffffff) + sp84), s4, (Gfx *)((u32)modeldef + (s5 & 0xffffff)), arg4, (u32)vertices);
} }
fileSetSize(filenum, modeldef, (((u32)modeldef + (s5 & 0xffffff)) - (u32)modeldef + 0xf) & ~0xf, arg5); fileSetSize(filenum, modeldef, (((u32)modeldef + (s5 & 0xffffff)) - (u32)modeldef + 0xf) & ~0xf, arg5);

View File

@ -5,6 +5,7 @@
#include "game/texdecompress.h" #include "game/texdecompress.h"
#include "bss.h" #include "bss.h"
#include "data.h" #include "data.h"
#include "textures.h"
#include "types.h" #include "types.h"
s32 g_TexLutMode; s32 g_TexLutMode;
@ -1264,7 +1265,7 @@ Gfx *tex0f1751e4(Gfx *gdl, struct texloadthing *arg1, s32 arg2, s32 arg3, s32 ar
gDPPipeSync(gdl++); gDPPipeSync(gdl++);
var800844d0 = 1; var800844d0 = true;
return gdl; return gdl;
} }
@ -1530,48 +1531,29 @@ glabel tex0f17563c
GLOBAL_ASM( GLOBAL_ASM(
glabel tex0f1756c0 glabel tex0f1756c0
.late_rodata .late_rodata
glabel var7f1b7c30 glabel jtbl_var7f1b7c30
.word tex0f1756c0+0x544 # f175c04 .word .L0f175c04
glabel var7f1b7c34 .word .L0f175e28
.word tex0f1756c0+0x768 # f175e28 .word .L0f175e28
glabel var7f1b7c38 .word .L0f175e28
.word tex0f1756c0+0x768 # f175e28 .word .L0f175e28
glabel var7f1b7c3c .word .L0f175e28
.word tex0f1756c0+0x768 # f175e28 .word .L0f175e28
glabel var7f1b7c40 .word .L0f175e28
.word tex0f1756c0+0x768 # f175e28 .word .L0f175e28
glabel var7f1b7c44 .word .L0f175e0c
.word tex0f1756c0+0x768 # f175e28 .word .L0f175dcc
glabel var7f1b7c48 .word .L0f175e28
.word tex0f1756c0+0x768 # f175e28 .word .L0f175e28
glabel var7f1b7c4c .word .L0f175e28
.word tex0f1756c0+0x768 # f175e28 .word .L0f175c04
glabel var7f1b7c50 .word .L0f1757d4
.word tex0f1756c0+0x768 # f175e28 glabel jtbl_var7f1b7c70
glabel var7f1b7c54 .word .L0f175880
.word tex0f1756c0+0x74c # f175e0c .word .L0f1758e4
glabel var7f1b7c58 .word .L0f17597c
.word tex0f1756c0+0x70c # f175dcc .word .L0f1759b8
glabel var7f1b7c5c .word .L0f1759f0
.word tex0f1756c0+0x768 # f175e28
glabel var7f1b7c60
.word tex0f1756c0+0x768 # f175e28
glabel var7f1b7c64
.word tex0f1756c0+0x768 # f175e28
glabel var7f1b7c68
.word tex0f1756c0+0x544 # f175c04
glabel var7f1b7c6c
.word tex0f1756c0+0x114 # f1757d4
glabel var7f1b7c70
.word tex0f1756c0+0x1c0 # f175880
glabel var7f1b7c74
.word tex0f1756c0+0x224 # f1758e4
glabel var7f1b7c78
.word tex0f1756c0+0x2bc # f17597c
glabel var7f1b7c7c
.word tex0f1756c0+0x2f8 # f1759b8
glabel var7f1b7c80
.word tex0f1756c0+0x330 # f1759f0
.text .text
/* f1756c0: 27bdfec8 */ addiu $sp,$sp,-312 /* f1756c0: 27bdfec8 */ addiu $sp,$sp,-312
/* f1756c4: afb00030 */ sw $s0,0x30($sp) /* f1756c4: afb00030 */ sw $s0,0x30($sp)
@ -1637,9 +1619,9 @@ glabel var7f1b7c80
/* f1757a0: 2f210010 */ sltiu $at,$t9,0x10 /* f1757a0: 2f210010 */ sltiu $at,$t9,0x10
/* f1757a4: 102001a0 */ beqz $at,.L0f175e28 /* f1757a4: 102001a0 */ beqz $at,.L0f175e28
/* f1757a8: 0019c880 */ sll $t9,$t9,0x2 /* f1757a8: 0019c880 */ sll $t9,$t9,0x2
/* f1757ac: 3c017f1b */ lui $at,%hi(var7f1b7c30) /* f1757ac: 3c017f1b */ lui $at,%hi(jtbl_var7f1b7c30)
/* f1757b0: 00390821 */ addu $at,$at,$t9 /* f1757b0: 00390821 */ addu $at,$at,$t9
/* f1757b4: 8c397c30 */ lw $t9,%lo(var7f1b7c30)($at) /* f1757b4: 8c397c30 */ lw $t9,%lo(jtbl_var7f1b7c30)($at)
/* f1757b8: 03200008 */ jr $t9 /* f1757b8: 03200008 */ jr $t9
/* f1757bc: 00000000 */ nop /* f1757bc: 00000000 */ nop
.L0f1757c0: .L0f1757c0:
@ -1648,6 +1630,7 @@ glabel var7f1b7c80
/* f1757c8: 8fb800e0 */ lw $t8,0xe0($sp) /* f1757c8: 8fb800e0 */ lw $t8,0xe0($sp)
/* f1757cc: 10000197 */ b .L0f175e2c /* f1757cc: 10000197 */ b .L0f175e2c
/* f1757d0: 8ea10000 */ lw $at,0x0($s5) /* f1757d0: 8ea10000 */ lw $at,0x0($s5)
.L0f1757d4:
/* f1757d4: 240c0001 */ addiu $t4,$zero,0x1 /* f1757d4: 240c0001 */ addiu $t4,$zero,0x1
/* f1757d8: 13c00003 */ beqz $s8,.L0f1757e8 /* f1757d8: 13c00003 */ beqz $s8,.L0f1757e8
/* f1757dc: afac00e4 */ sw $t4,0xe4($sp) /* f1757dc: afac00e4 */ sw $t4,0xe4($sp)
@ -1689,11 +1672,12 @@ glabel var7f1b7c80
/* f175860: 2da10005 */ sltiu $at,$t5,0x5 /* f175860: 2da10005 */ sltiu $at,$t5,0x5
/* f175864: 1020006f */ beqz $at,.L0f175a24 /* f175864: 1020006f */ beqz $at,.L0f175a24
/* f175868: 000d6880 */ sll $t5,$t5,0x2 /* f175868: 000d6880 */ sll $t5,$t5,0x2
/* f17586c: 3c017f1b */ lui $at,%hi(var7f1b7c70) /* f17586c: 3c017f1b */ lui $at,%hi(jtbl_var7f1b7c70)
/* f175870: 002d0821 */ addu $at,$at,$t5 /* f175870: 002d0821 */ addu $at,$at,$t5
/* f175874: 8c2d7c70 */ lw $t5,%lo(var7f1b7c70)($at) /* f175874: 8c2d7c70 */ lw $t5,%lo(jtbl_var7f1b7c70)($at)
/* f175878: 01a00008 */ jr $t5 /* f175878: 01a00008 */ jr $t5
/* f17587c: 00000000 */ nop /* f17587c: 00000000 */ nop
.L0f175880:
/* f175880: 8ea80004 */ lw $t0,0x4($s5) /* f175880: 8ea80004 */ lw $t0,0x4($s5)
/* f175884: 00033582 */ srl $a2,$v1,0x16 /* f175884: 00033582 */ srl $a2,$v1,0x16
/* f175888: 00033d02 */ srl $a3,$v1,0x14 /* f175888: 00033d02 */ srl $a3,$v1,0x14
@ -1719,6 +1703,7 @@ glabel var7f1b7c80
/* f1758d8: 02202825 */ or $a1,$s1,$zero /* f1758d8: 02202825 */ or $a1,$s1,$zero
/* f1758dc: 10000051 */ b .L0f175a24 /* f1758dc: 10000051 */ b .L0f175a24
/* f1758e0: 0040b025 */ or $s6,$v0,$zero /* f1758e0: 0040b025 */ or $s6,$v0,$zero
.L0f1758e4:
/* f1758e4: 8eb00004 */ lw $s0,0x4($s5) /* f1758e4: 8eb00004 */ lw $s0,0x4($s5)
/* f1758e8: 8fa50144 */ lw $a1,0x144($sp) /* f1758e8: 8fa50144 */ lw $a1,0x144($sp)
/* f1758ec: 00107b02 */ srl $t7,$s0,0xc /* f1758ec: 00107b02 */ srl $t7,$s0,0xc
@ -1757,6 +1742,7 @@ glabel var7f1b7c80
/* f175970: 02202825 */ or $a1,$s1,$zero /* f175970: 02202825 */ or $a1,$s1,$zero
/* f175974: 1000002b */ b .L0f175a24 /* f175974: 1000002b */ b .L0f175a24
/* f175978: 0040b025 */ or $s6,$v0,$zero /* f175978: 0040b025 */ or $s6,$v0,$zero
.L0f17597c:
/* f17597c: 00033582 */ srl $a2,$v1,0x16 /* f17597c: 00033582 */ srl $a2,$v1,0x16
/* f175980: 00033d02 */ srl $a3,$v1,0x14 /* f175980: 00033d02 */ srl $a3,$v1,0x14
/* f175984: 00031482 */ srl $v0,$v1,0x12 /* f175984: 00031482 */ srl $v0,$v1,0x12
@ -1772,6 +1758,7 @@ glabel var7f1b7c80
/* f1759ac: afb30014 */ sw $s3,0x14($sp) /* f1759ac: afb30014 */ sw $s3,0x14($sp)
/* f1759b0: 1000001c */ b .L0f175a24 /* f1759b0: 1000001c */ b .L0f175a24
/* f1759b4: 0040b025 */ or $s6,$v0,$zero /* f1759b4: 0040b025 */ or $s6,$v0,$zero
.L0f1759b8:
/* f1759b8: 00033582 */ srl $a2,$v1,0x16 /* f1759b8: 00033582 */ srl $a2,$v1,0x16
/* f1759bc: 00033d02 */ srl $a3,$v1,0x14 /* f1759bc: 00033d02 */ srl $a3,$v1,0x14
/* f1759c0: 00031482 */ srl $v0,$v1,0x12 /* f1759c0: 00031482 */ srl $v0,$v1,0x12
@ -1786,6 +1773,7 @@ glabel var7f1b7c80
/* f1759e4: 02202825 */ or $a1,$s1,$zero /* f1759e4: 02202825 */ or $a1,$s1,$zero
/* f1759e8: 1000000e */ b .L0f175a24 /* f1759e8: 1000000e */ b .L0f175a24
/* f1759ec: 0040b025 */ or $s6,$v0,$zero /* f1759ec: 0040b025 */ or $s6,$v0,$zero
.L0f1759f0:
/* f1759f0: 00033582 */ srl $a2,$v1,0x16 /* f1759f0: 00033582 */ srl $a2,$v1,0x16
/* f1759f4: 00033d02 */ srl $a3,$v1,0x14 /* f1759f4: 00033d02 */ srl $a3,$v1,0x14
/* f1759f8: 00031482 */ srl $v0,$v1,0x12 /* f1759f8: 00031482 */ srl $v0,$v1,0x12
@ -1938,6 +1926,7 @@ glabel var7f1b7c80
/* f175bf8: 8eb9fffc */ lw $t9,-0x4($s5) /* f175bf8: 8eb9fffc */ lw $t9,-0x4($s5)
/* f175bfc: 10000090 */ b .L0f175e40 /* f175bfc: 10000090 */ b .L0f175e40
/* f175c00: aed9fffc */ sw $t9,-0x4($s6) /* f175c00: aed9fffc */ sw $t9,-0x4($s6)
.L0f175c04:
/* f175c04: 240c0001 */ addiu $t4,$zero,0x1 /* f175c04: 240c0001 */ addiu $t4,$zero,0x1
/* f175c08: 13c00067 */ beqz $s8,.L0f175da8 /* f175c08: 13c00067 */ beqz $s8,.L0f175da8
/* f175c0c: afac0104 */ sw $t4,0x104($sp) /* f175c0c: afac0104 */ sw $t4,0x104($sp)
@ -2061,6 +2050,7 @@ glabel var7f1b7c80
/* f175dc0: 8eb8fffc */ lw $t8,-0x4($s5) /* f175dc0: 8eb8fffc */ lw $t8,-0x4($s5)
/* f175dc4: 1000001e */ b .L0f175e40 /* f175dc4: 1000001e */ b .L0f175e40
/* f175dc8: aed8fffc */ sw $t8,-0x4($s6) /* f175dc8: aed8fffc */ sw $t8,-0x4($s6)
.L0f175dcc:
/* f175dcc: 240d0001 */ addiu $t5,$zero,0x1 /* f175dcc: 240d0001 */ addiu $t5,$zero,0x1
/* f175dd0: 001e102b */ sltu $v0,$zero,$s8 /* f175dd0: 001e102b */ sltu $v0,$zero,$s8
/* f175dd4: afad00e4 */ sw $t5,0xe4($sp) /* f175dd4: afad00e4 */ sw $t5,0xe4($sp)
@ -2078,6 +2068,7 @@ glabel var7f1b7c80
/* f175e00: 8eaefffc */ lw $t6,-0x4($s5) /* f175e00: 8eaefffc */ lw $t6,-0x4($s5)
/* f175e04: 1000000e */ b .L0f175e40 /* f175e04: 1000000e */ b .L0f175e40
/* f175e08: aecefffc */ sw $t6,-0x4($s6) /* f175e08: aecefffc */ sw $t6,-0x4($s6)
.L0f175e0c:
/* f175e0c: 8ea10000 */ lw $at,0x0($s5) /* f175e0c: 8ea10000 */ lw $at,0x0($s5)
/* f175e10: 26d60008 */ addiu $s6,$s6,0x8 /* f175e10: 26d60008 */ addiu $s6,$s6,0x8
/* f175e14: 26b50008 */ addiu $s5,$s5,0x8 /* f175e14: 26b50008 */ addiu $s5,$s5,0x8
@ -2147,6 +2138,331 @@ glabel var7f1b7c80
/* f175ef0: 27bd0138 */ addiu $sp,$sp,0x138 /* f175ef0: 27bd0138 */ addiu $sp,$sp,0x138
); );
// Mismatch: Extra move instruction in last half of G_VTX case
//s32 tex0f1756c0(Gfx *arg0, s32 arg1, Gfx *arg2, struct texturething *arg3, u32 arg4)
//{
// struct texloadthing *v0;
// struct texloadthing *v0_2;
// Gfx *sp12c;
// s32 sp128;
// u32 tmp1;
// u32 tmp2;
// u32 tmp3;
// u32 tmp4;
// u32 tmp5;
// u32 tmp6;
// bool flag;
// s32 j;
// bool sp104;
// u8 animated;
// Gfx *s5;
// Gfx *s6;
// u32 spf4;
// s32 texturenum;
// s32 texturenum2;
// bool spe8;
// s32 spe4;
// s32 spe0;
// struct gfxvtx *spA0[16];
// u8 sp90[16];
//
// s32 i;
//
// sp12c = NULL;
// sp104 = true;
// animated = false;
// spe8 = false;
// spe4 = false;
// var800844d0 = false;
// spf4 = 0;
// s5 = arg0;
// s6 = arg2;
//
// sp128 = arg1 >> 3;
//
// tex0f173a08();
//
// spe0 = func0f13c4f0();
//
// if (spe0) {
// for (j = 0; j < 16; j++) {
// sp90[j] = 0;
// }
// }
//
// if (arg3 == NULL) {
// arg3 = &var800aabc8;
// }
//
// while (sp128 > 0) {
// switch (s5->texture.cmd) {
// case 0xc0: // Repurposed?
// spe4 = true;
//
// if (animated) {
// spe8 = true;
// }
//
// texturenum = s5->words.w1 & 0xfff;
// flag = s5->words.w0 & 0x200;
//
// texLoadFromTextureNum(texturenum, arg3);
//
// v0 = tex0f172e8c(texturenum, arg3);
//
// if (v0 != NULL) {
// spf4 = v0->unk0c_03;
// } else {
// spf4 = 0;
// }
//
// if (v0 != NULL) {
// s6 = tex0f1742e4(s6, sp12c, v0, sp104);
// sp104 = false;
// animated = false;
//
// switch (s5->unkc0.subcmd) {
// case 0:
// tmp6 = (s5->words.w1 >> 24) & 0xff;
// tmp1 = (s5->words.w0 >> 22) & 3;
// tmp2 = (s5->words.w0 >> 20) & 3;
// tmp3 = (s5->words.w0 >> 18) & 3;
// tmp4 = (s5->words.w0 >> 14) & 0xf;
// tmp5 = (s5->words.w0 >> 10) & 0xf;
//
// s6 = tex0f175490(s6, v0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, flag);
// break;
// case 1:
// texturenum2 = (s5->words.w1 >> 12) & 0xfff;
// texLoadFromTextureNum(texturenum2, arg3);
// v0_2 = tex0f172e8c(texturenum2, arg3);
//
// if (v0_2 != NULL) {
// tmp6 = (s5->words.w1 >> 24) & 0xff;
// tmp1 = (s5->words.w0 >> 22) & 3;
// tmp2 = (s5->words.w0 >> 20) & 3;
// tmp3 = (s5->words.w0 >> 18) & 3;
// tmp4 = (s5->words.w0 >> 14) & 0xf;
// tmp5 = (s5->words.w0 >> 10) & 0xf;
//
// s6 = tex0f175308(s6, v0, tmp1, tmp2, tmp3, v0_2, tmp4, tmp5, tmp6, flag);
// }
// break;
// case 2:
// tmp1 = (s5->words.w0 >> 22) & 3;
// tmp2 = (s5->words.w0 >> 20) & 3;
// tmp3 = (s5->words.w0 >> 18) & 3;
//
// s6 = tex0f1751e4(s6, v0, tmp1, tmp2, tmp3, flag);
// break;
// case 3:
// tmp1 = (s5->words.w0 >> 22) & 3;
// tmp2 = (s5->words.w0 >> 20) & 3;
// tmp3 = (s5->words.w0 >> 18) & 3;
//
// s6 = tex0f17563c(s6, v0, tmp1, tmp2, tmp3);
// break;
// case 4:
// tmp1 = (s5->words.w0 >> 22) & 3;
// tmp2 = (s5->words.w0 >> 20) & 3;
// tmp3 = (s5->words.w0 >> 18) & 3;
//
// s6 = tex0f1755dc(s6, v0, tmp1, tmp2, tmp3);
// break;
// }
//
// if (spe0 != 0) {
// if (texturenum == TEXTURE_06CB) {
// func0f13c2e8(1);
// animated = true;
// }
//
// if (texturenum == TEXTURE_0A6A) {
// func0f13c2e8(6);
// animated = true;
// }
//
// if (texturenum == TEXTURE_0A69) {
// func0f13c2e8(7);
// animated = true;
// }
//
// if (texturenum == TEXTURE_06E2) {
// func0f13c2e8(3);
// animated = true;
// }
//
// if (texturenum == TEXTURE_01C7 || texturenum == TEXTURE_0DAE) {
// func0f13c2e8(1);
// animated = true;
// }
//
// if (texturenum == TEXTURE_029B) {
// func0f13c2e8(4);
// animated = true;
// }
//
// if (texturenum == TEXTURE_090F) {
// func0f13c2e8(5);
// animated = true;
// }
//
// if (texturenum == TEXTURE_0A42) {
// func0f13c2e8(2);
// animated = true;
// }
// }
// }
//
// s5++;
// break;
// case G_VTX:
// {
// s32 start;
// s32 count;
// u32 offset;
// struct gfxvtx *vtx;
//
// if (spe0) {
// start = s5->bytes[1] & 0xf;
// count = ((u32)s5->bytes[1] >> 4) + 1;
// vtx = (struct gfxvtx *)(s5->dma.addr & 0x00ffffff);
//
// for (i = start; i < start + count; i++) {
// if (animated && sp90[i]) {
// func0f13c07c(spA0[i]);
// sp90[i] = 0;
// }
//
// spA0[i] = vtx;
// vtx++;
// }
// }
//
// if (spf4 && arg4) {
// // b7c
// u32 offset;
// struct gfxvtx *vtx;
// s32 i;
//
// count = (s5->dma.par >> 4) + 1;
// offset = s5->dma.addr & 0x00ffffff;
// i = 0;
// offset = (arg4 + offset);
// vtx = (struct gfxvtx *) offset;
//
// for (; i < count; i++) {
// vtx[i].unk08 >>= 1;
// vtx[i].unk0a >>= 1;
// }
// }
// }
//
// *s6 = *s5;
// s6++;
// s5++;
// break;
// case G_RDPPIPESYNC:
// var800844d0 = true;
// *s6 = *s5;
// s6++;
// s5++;
// break;
// case (u8)G_TRI4:
// case (u8)G_TRI1:
// if (animated) {
// if (s5->texture.cmd == (u8)G_TRI1) {
// sp90[s5->tri.tri.v[0] / 10] = 1;
// sp90[s5->tri.tri.v[1] / 10] = 1;
// sp90[s5->tri.tri.v[2] / 10] = 1;
// } else {
// // c68
// if (s5->tri4.x1 != s5->tri4.y1 || s5->tri4.z1 != s5->tri4.y1) {
// sp90[s5->tri4.x1] = 1;
// sp90[s5->tri4.y1] = 1;
// sp90[s5->tri4.z1] = 1;
// }
//
// // cbc
// if (s5->tri4.x2 != s5->tri4.y2 || s5->tri4.z2 != s5->tri4.y2) {
// sp90[s5->tri4.x2] = 1;
// sp90[s5->tri4.y2] = 1;
// sp90[s5->tri4.z2] = 1;
// }
//
// // d0c
// if (s5->tri4.x3 != s5->tri4.y3 || s5->tri4.z3 != s5->tri4.y3) {
// sp90[s5->tri4.x3] = 1;
// sp90[s5->tri4.y3] = 1;
// sp90[s5->tri4.z3] = 1;
// }
//
// // d58
// if (s5->tri4.x4 != s5->tri4.y4 || s5->tri4.z4 != s5->tri4.y4) {
// sp90[s5->tri4.x4] = 1;
// sp90[s5->tri4.y4] = 1;
// sp90[s5->tri4.z4] = 1;
// }
// }
// }
//
// sp104 = true;
// var800844d0 = false;
//
// *s6 = *s5;
// s6++;
// s5++;
// break;
// case (u8)G_TEXTURE:
// spe4 = true;
//
// if (animated) {
// spe8 = true;
// }
//
// animated = false;
// sp104 = false;
//
// sp12c = s6;
// *s6 = *s5;
// s6++;
// s5++;
// break;
// case (u8)G_SETOTHERMODE_H:
// *s6 = *s5;
// s6++;
// s5++;
// break;
// default:
// *s6 = *s5;
// s6++;
// s5++;
// break;
// }
//
// sp128--;
//
// if (spe4 || sp128 <= 0) {
// spe4 = false;
//
// if (spe8 || animated) {
// s32 i;
//
// spe8 = false;
//
// for (i = 0; i < 16; i++) {
// if (sp90[i]) {
// func0f13c07c(spA0[i]);
// sp90[i] = 0;
// }
// }
// }
// }
// }
//
// return (u32)s6 - (u32)arg2;
//}
void tex0f175ef4(Gfx *arg0, Gfx *arg1, s32 arg2) void tex0f175ef4(Gfx *arg0, Gfx *arg1, s32 arg2)
{ {
arg2 = (arg2 >> 3); arg2 = (arg2 >> 3);

View File

@ -10,7 +10,7 @@ u32 func0f13b7bc(void);
u32 func0f13b8a0(void); u32 func0f13b8a0(void);
u32 func0f13bb5c(void); u32 func0f13bb5c(void);
void func0f13bc48(s32 roomnum, struct gfxvtx *vertices); void func0f13bc48(s32 roomnum, struct gfxvtx *vertices);
void func0f13c07c(s32 arg0); void func0f13c07c(struct gfxvtx *vertex);
void func0f13c2e8(s16 arg0); void func0f13c2e8(s16 arg0);
void func0f13c370(s16 roomnum); void func0f13c370(s16 roomnum);
void func0f13c3f4(void); void func0f13c3f4(void);

View File

@ -33,17 +33,17 @@ void tex0f173e50(struct texloadthing *arg0, s32 *arg1, s32 *arg2);
s32 tex0f173f18(s32 arg0); s32 tex0f173f18(s32 arg0);
s32 tex0f173f48(s32 arg0); s32 tex0f173f48(s32 arg0);
u32 tex0f173f78(void); u32 tex0f173f78(void);
u32 tex0f1742e4(void); Gfx *tex0f1742e4(Gfx *arg0, Gfx *arg1, struct texloadthing *arg2, bool arg3);
Gfx *tex0f1743a0(Gfx *gdl, struct texloadthing *arg1, s32 arg2); Gfx *tex0f1743a0(Gfx *gdl, struct texloadthing *arg1, s32 arg2);
Gfx *tex0f1747a4(Gfx *gdl, struct texloadthing *arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, u32 arg7); Gfx *tex0f1747a4(Gfx *gdl, struct texloadthing *arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, u32 arg7);
u32 tex0f174b54(void); u32 tex0f174b54(void);
u32 tex0f174f30(void); u32 tex0f174f30(void);
Gfx *tex0f1751e4(Gfx *gdl, struct texloadthing *arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5); Gfx *tex0f1751e4(Gfx *gdl, struct texloadthing *arg1, s32 arg2, s32 arg3, s32 arg4, bool arg5);
u32 tex0f175308(void); Gfx *tex0f175308(Gfx *gdl, struct texloadthing *arg1, s32 arg2, s32 arg3, s32 arg4, struct texloadthing *arg5, s32 arg6, s32 arg7, s32 arg8, bool arg9);
u32 tex0f175490(void); Gfx *tex0f175490(Gfx *gdl, struct texloadthing *arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, bool arg8);
u32 tex0f1755dc(void); Gfx *tex0f1755dc(Gfx *gdl, struct texloadthing *arg1, s32 arg2, s32 arg3, s32 arg4);
u32 tex0f17563c(void); Gfx *tex0f17563c(Gfx *gdl, struct texloadthing *arg1, s32 arg2, s32 arg3, s32 arg4);
s32 tex0f1756c0(s32 arg0, s32 arg1, s32 arg2, struct texturething *arg3, struct gfxvtx *arg4); s32 tex0f1756c0(Gfx *arg0, s32 arg1, Gfx *arg2, struct texturething *arg3, u32 arg4);
void tex0f175ef4(Gfx *arg0, Gfx *arg1, s32 arg2); void tex0f175ef4(Gfx *arg0, Gfx *arg1, s32 arg2);
#endif #endif

View File

@ -4,6 +4,9 @@
#include "data.h" #include "data.h"
#include "types.h" #include "types.h"
#define G_SETCOLOR 0x07
#define G_TRI4 0xb1
/** /**
* 04 rsp_uc05_vertex * 04 rsp_uc05_vertex
* *
@ -18,7 +21,7 @@
#define gDPSetVerticeArray(pkt, ptr, numvertices) \ #define gDPSetVerticeArray(pkt, ptr, numvertices) \
{ \ { \
Gfx *_g = (Gfx *)(pkt); \ Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = (_SHIFTL(0x04, 24, 8) \ _g->words.w0 = (_SHIFTL(G_VTX, 24, 8) \
| _SHIFTL(numvertices - 1, 20, 4) \ | _SHIFTL(numvertices - 1, 20, 4) \
| _SHIFTL(numvertices * sizeof(struct gfxvtx), 0, 20)); \ | _SHIFTL(numvertices * sizeof(struct gfxvtx), 0, 20)); \
_g->words.w1 = (unsigned int)(ptr); \ _g->words.w1 = (unsigned int)(ptr); \
@ -39,7 +42,7 @@
#define gDPSetColorArray(pkt, ptr, numcolors) \ #define gDPSetColorArray(pkt, ptr, numcolors) \
{ \ { \
Gfx *_g = (Gfx *)(pkt); \ Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = (_SHIFTL(0x07, 24, 8) \ _g->words.w0 = (_SHIFTL(G_SETCOLOR, 24, 8) \
| _SHIFTL((numcolors - 1) * 4, 16, 8) \ | _SHIFTL((numcolors - 1) * 4, 16, 8) \
| _SHIFTL(numcolors * 4, 0, 16)); \ | _SHIFTL(numcolors * 4, 0, 16)); \
_g->words.w1 = (unsigned int)(ptr); \ _g->words.w1 = (unsigned int)(ptr); \
@ -68,21 +71,21 @@
* 0000000f x1 * 0000000f x1
*/ */
#define gDPTri4(pkt, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4) \ #define gDPTri4(pkt, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4) \
{ \ { \
Gfx *_g = (Gfx *)(pkt); \ Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = (_SHIFTL(0xb1, 24, 8) \ _g->words.w0 = (_SHIFTL(G_TRI4, 24, 8) \
| _SHIFTL(z4, 12, 4) \ | _SHIFTL(z4, 12, 4) \
| _SHIFTL(z3, 8, 4) \ | _SHIFTL(z3, 8, 4) \
| _SHIFTL(z2, 4, 4) \ | _SHIFTL(z2, 4, 4) \
| _SHIFTL(z1, 0, 4)); \ | _SHIFTL(z1, 0, 4)); \
_g->words.w1 = (_SHIFTL(y4, 28, 4) \ _g->words.w1 = (_SHIFTL(y4, 28, 4) \
| _SHIFTL(x4, 24, 4) \ | _SHIFTL(x4, 24, 4) \
| _SHIFTL(y3, 20, 4) \ | _SHIFTL(y3, 20, 4) \
| _SHIFTL(x3, 16, 4) \ | _SHIFTL(x3, 16, 4) \
| _SHIFTL(y2, 12, 4) \ | _SHIFTL(y2, 12, 4) \
| _SHIFTL(x2, 8, 4) \ | _SHIFTL(x2, 8, 4) \
| _SHIFTL(y1, 4, 4) \ | _SHIFTL(y1, 4, 4) \
| _SHIFTL(x1, 0, 4)); \ | _SHIFTL(x1, 0, 4)); \
} }
#define gDPTri3(pkt, x1, y1, z1, x2, y2, z2, x3, y3, z3) \ #define gDPTri3(pkt, x1, y1, z1, x2, y2, z2, x3, y3, z3) \