mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
Match func_80083098 + minor cleanups across codebase (#581)
* make Camera struct * wip * wip * fix gSPMatrix args * gfx macros renamed * wip * document matrix functions * match func_80083098 * update score and format * JP version not matched * build OK * PR suggestions
This commit is contained in:
+10
-69
@@ -148,6 +148,12 @@
|
||||
#define G_SETGEOMETRYMODE (G_IMMFIRST-8)
|
||||
#define G_CLEARGEOMETRYMODE (G_IMMFIRST-9)
|
||||
#define G_LINE3D (G_IMMFIRST-10)
|
||||
#ifdef F3D_OLD
|
||||
#define G_PERSPNORM (G_IMMFIRST-11)
|
||||
#define G_RDPHALF_1 (G_IMMFIRST-12)
|
||||
#define G_RDPHALF_2 (G_IMMFIRST-13)
|
||||
#define G_RDPHALF_CONT (G_IMMFIRST-14)
|
||||
#else
|
||||
#define G_RDPHALF_1 (G_IMMFIRST-11)
|
||||
#define G_RDPHALF_2 (G_IMMFIRST-12)
|
||||
#if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
|
||||
@@ -158,6 +164,7 @@
|
||||
#else
|
||||
# define G_RDPHALF_CONT (G_IMMFIRST-13)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* We are overloading 2 of the immediate commands
|
||||
to keep the byte alignment of dmem the same */
|
||||
@@ -2798,12 +2805,12 @@ typedef union {
|
||||
{ \
|
||||
Gfx *_g = (Gfx *)(pkt); \
|
||||
\
|
||||
_g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \
|
||||
_g->words.w0 = _SHIFTL(G_PERSPNORM, 24, 8); \
|
||||
_g->words.w1 = (s); \
|
||||
}
|
||||
#define gsSPPerspNormalize(s) \
|
||||
{{ \
|
||||
_SHIFTL(G_RDPHALF_1, 24, 8), \
|
||||
_SHIFTL(G_PERSPNORM, 24, 8), \
|
||||
(s) \
|
||||
}}
|
||||
#else
|
||||
@@ -4493,72 +4500,6 @@ typedef union {
|
||||
_g->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \
|
||||
}
|
||||
|
||||
#ifdef F3D_OLD
|
||||
#define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\
|
||||
{ \
|
||||
Gfx *_g = (Gfx *)(pkt); \
|
||||
\
|
||||
_g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \
|
||||
_SHIFTL(yh, 0, 12)); \
|
||||
_g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
|
||||
_SHIFTL(yl, 0, 12)); \
|
||||
gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \
|
||||
gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)));\
|
||||
}
|
||||
|
||||
#define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
|
||||
{{(_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | _SHIFTL(yh, 0, 12)),\
|
||||
(_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \
|
||||
gsImmp1(G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \
|
||||
gsImmp1(G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)))
|
||||
|
||||
/* like gSPTextureRectangle but accepts negative position arguments */
|
||||
# define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
|
||||
{ \
|
||||
Gfx *_g = (Gfx *)(pkt); \
|
||||
\
|
||||
_g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \
|
||||
_SHIFTL(MAX((s16)(xh),0), 12, 12) | \
|
||||
_SHIFTL(MAX((s16)(yh),0), 0, 12)); \
|
||||
_g->words.w1 = (_SHIFTL((tile), 24, 3) | \
|
||||
_SHIFTL(MAX((s16)(xl),0), 12, 12) | \
|
||||
_SHIFTL(MAX((s16)(yl),0), 0, 12)); \
|
||||
gImmp1(pkt, G_RDPHALF_2, \
|
||||
(_SHIFTL(((s) - \
|
||||
(((s16)(xl) < 0) ? \
|
||||
(((s16)(dsdx) < 0) ? \
|
||||
(MAX((((s16)(xl)*(s16)(dsdx))>>7),0)) : \
|
||||
(MIN((((s16)(xl)*(s16)(dsdx))>>7),0))) : 0)), \
|
||||
16, 16) | \
|
||||
_SHIFTL(((t) - \
|
||||
(((yl) < 0) ? \
|
||||
(((s16)(dtdy) < 0) ? \
|
||||
(MAX((((s16)(yl)*(s16)(dtdy))>>7),0)) : \
|
||||
(MIN((((s16)(yl)*(s16)(dtdy))>>7),0))) : 0)), \
|
||||
0, 16))); \
|
||||
gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL((dsdx), 16, 16) | \
|
||||
_SHIFTL((dtdy), 0, 16))); \
|
||||
}
|
||||
|
||||
# define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
|
||||
{{(_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \
|
||||
_SHIFTL(yh, 0, 12)), \
|
||||
(_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \
|
||||
gsImmp1(G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \
|
||||
gsImmp1(G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)))
|
||||
|
||||
# define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
|
||||
{ \
|
||||
Gfx *_g = (Gfx *)(pkt); \
|
||||
\
|
||||
_g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) |\
|
||||
_SHIFTL(yh, 0, 12)); \
|
||||
_g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
|
||||
_SHIFTL(yl, 0, 12)); \
|
||||
gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \
|
||||
gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))); \
|
||||
}
|
||||
#else
|
||||
#define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
|
||||
{{(_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | _SHIFTL(yh, 0, 12)),\
|
||||
(_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \
|
||||
@@ -4623,7 +4564,7 @@ typedef union {
|
||||
gImmp1(pkt, G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \
|
||||
gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))); \
|
||||
}
|
||||
#endif
|
||||
|
||||
#define gsDPWord(wordhi, wordlo) \
|
||||
gsImmp1(G_RDPHALF_1, (unsigned int)(wordhi)), \
|
||||
gsImmp1(G_RDPHALF_2, (unsigned int)(wordlo))
|
||||
|
||||
+9
-7
@@ -77,14 +77,11 @@
|
||||
|
||||
#define G_TRIN 5
|
||||
#define G_DMADL 7
|
||||
#define G_MTX_DKR_INDEX_0 0x00
|
||||
#define G_MTX_DKR_INDEX_1 0x40
|
||||
#define G_MTX_DKR_INDEX_2 0x80
|
||||
#define G_MTX_DKR_INDEX_0 0
|
||||
#define G_MTX_DKR_INDEX_1 1
|
||||
#define G_MTX_DKR_INDEX_2 2
|
||||
#define G_MW_BILLBOARD 0x02 //0x01 = billboarding enabled, 0x00 = disabled
|
||||
#define G_MW_MVMATRIX 0x0A //Specifies the index of the modelview matrix.
|
||||
|
||||
#define gDkrInsertMatrix(pkt, where, num) \
|
||||
gMoveWd(pkt, G_MW_MVMATRIX, where, num)
|
||||
#define G_MW_MVPMATRIX 0x0A //Specifies the index of the mvp matrix.
|
||||
|
||||
#define gDkrEnableBillboard(pkt) \
|
||||
gMoveWd(pkt, G_MW_BILLBOARD, 0, 1)
|
||||
@@ -95,6 +92,11 @@
|
||||
#define gSPVertexDKR(pkt, v, n, v0) \
|
||||
gDma1p(pkt, G_VTX, v, (((n) * 8 + (n)) << 1) + 8, ((n)-1)<<3|(((u32)(v) & 6))|(v0))
|
||||
|
||||
#define gSPMatrixDKR(pkt, m, i) \
|
||||
gSPMatrix(pkt, m, (i) << 6)
|
||||
#define gSPSelectMatrixDKR(pkt, num) \
|
||||
gMoveWd(pkt, G_MW_MVPMATRIX, 0, (num) << 6)
|
||||
|
||||
#define TRIN_DISABLE_TEXTURE 0
|
||||
#define TRIN_ENABLE_TEXTURE 1
|
||||
|
||||
|
||||
+2
-14
@@ -1772,22 +1772,13 @@ typedef struct SegmentPropertiesObject {
|
||||
/* 0x002C */ s16 unk2C;
|
||||
/* 0x002E */ s16 segmentID;
|
||||
/* 0x0030 */ f32 distanceToCamera;
|
||||
/* 0x0034 */ s16 cameraSegmentID;
|
||||
/* 0x0036 */ s16 unk36;
|
||||
/* 0x0034 */ f32 unk34;
|
||||
/* 0x0038 */ s8 unk38;
|
||||
/* 0x0039 */ u8 opacity;
|
||||
/* 0x003A */ s8 modelIndex;
|
||||
/* 0x003B */ s8 animationID;
|
||||
} SegmentPropertiesObject;
|
||||
|
||||
typedef struct SegmentPropertiesCamera {
|
||||
/* 0x002C */ f32 unk2C;
|
||||
/* 0x0030 */ f32 distanceToCamera;
|
||||
/* 0x0034 */ f32 unk34;
|
||||
/* 0x0038 */ s16 unk38;
|
||||
/* 0x003A */ s16 unk3A;
|
||||
} SegmentPropertiesCamera;
|
||||
|
||||
/* Size: 0x44 bytes */
|
||||
typedef struct ObjectSegment {
|
||||
/* 0x0000 */ ObjectTransform trans;
|
||||
@@ -1797,10 +1788,7 @@ typedef struct ObjectSegment {
|
||||
/* 0x0020 */ f32 y_velocity;
|
||||
/* 0x0024 */ f32 z_velocity;
|
||||
/* 0x0028 */ f32 unk28;
|
||||
union {
|
||||
SegmentPropertiesObject object;
|
||||
SegmentPropertiesCamera camera;
|
||||
};
|
||||
/* 0x002C */ SegmentPropertiesObject object;
|
||||
/* 0x003C */ LevelObjectEntry* level_entry;
|
||||
/* 0x0040 */ ObjectHeader *header;
|
||||
} ObjectSegment;
|
||||
|
||||
Reference in New Issue
Block a user