document texture of kart (#663)

* document texture of kart

* change screenPlayerId to screenId

* some documentation around object

* Revert "some documentation around object"

This reverts commit cbb39078e0.

* more rename

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
This commit is contained in:
coco875
2024-08-16 23:52:01 +02:00
committed by GitHub
parent 9f920f2040
commit 14e099aecf
11 changed files with 347 additions and 328 deletions
+11 -4
View File
@@ -111,10 +111,17 @@
#define FOUR_PLAYERS_SELECTED 4
#define SELECTED_PLAYER_DEFINES_TOTAL 5
#define PLAYER_ONE 0
#define PLAYER_TWO 1
#define PLAYER_THREE 2
#define PLAYER_FOUR 3
enum PlayerId {
PLAYER_NONE = -1,
PLAYER_ONE = 0,
PLAYER_TWO = 1,
PLAYER_THREE = 2,
PLAYER_FOUR = 3,
PLAYER_FIVE = 4,
PLAYER_SIX = 5,
PLAYER_SEVEN = 6,
PLAYER_EIGHT = 7
};
#define NUM_PLAYERS 8
+5 -5
View File
@@ -70,18 +70,18 @@ typedef struct {
extern u16 gRandomSeed16;
extern u8 randomSeedPadding[216];
extern union_D_802BFB80 D_802BFB80;
extern struct_D_802DFB80 D_802DFB80[][2][8];
extern struct_D_802DFB80 gEncodedKartTexture[][2][8];
/**
* It would be nice to define D_802F1F80 as "struct_D_802F1F80 D_802F1F80[2][4][8]".
* But due to register allocation issues in load_kart_palette / func_80026B4C
* It would be nice to define gPlayerPalettesList as "struct_D_802F1F80 gPlayerPalettesList[2][4][8]".
* But due to register allocation issues in load_kart_palette / update_wheel_palette
* we have to define it in a different manner to match those functions.
* If AVOID_UB is defined, the struct is properly defined with their correct pointers.
**/
#ifdef AVOID_UB
extern struct_D_802F1F80 D_802F1F80[2][4][8];
extern struct_D_802F1F80 gPlayerPalettesList[2][4][8];
#else
extern u16 D_802F1F80[][4][0x100 * 8];
extern u16 gPlayerPalettesList[][4][0x100 * 8];
#endif
extern u16 gZBuffer[SCREEN_WIDTH * SCREEN_HEIGHT];
+6 -5
View File
@@ -3,14 +3,15 @@
#include <mk64.h>
#include "buffers.h"
/**
* @brief look like to be a buffer of decoded textures
*/
ALIGNED8 union_D_802BFB80 D_802BFB80;
// [nothing][screen][player]
ALIGNED8 struct_D_802DFB80 D_802DFB80[2][2][8];
ALIGNED8 struct_D_802DFB80 gEncodedKartTexture[2][2][8];
#ifdef AVOID_UB
// [buffer][screen][player] Buffer might be two separate buffers or something?
ALIGNED8 struct_D_802F1F80 D_802F1F80[2][4][8];
ALIGNED8 struct_D_802F1F80 gPlayerPalettesList[2][4][8];
#else
ALIGNED8 u16 D_802F1F80[2][4][0x100 * 8];
ALIGNED8 u16 gPlayerPalettesList[2][4][0x100 * 8];
#endif
ALIGNED8 u16 gZBuffer[SCREEN_WIDTH * SCREEN_HEIGHT];
+64 -64
View File
@@ -6258,27 +6258,27 @@ void func_8006D194(Player *player, s8 arg1, s8 arg2) {
}
}
void func_8006D474(Player *player, s8 arg1, s8 arg2) {
void func_8006D474(Player *player, s8 playerId, s8 screenId) {
s16 var_s2;
if ((player->unk_002 & (8 << (arg2 * 4))) == (8 << (arg2 * 4))) {
if ((player->unk_002 & (8 << (screenId * 4))) == (8 << (screenId * 4))) {
for (var_s2 = 0; var_s2 < 10; var_s2++) {
switch (player->unk_258[var_s2].unk_012) {
case 1:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
if (arg2 == arg1) {
func_8006538C(player, arg1, var_s2, arg2);
if (screenId == playerId) {
func_8006538C(player, playerId, var_s2, screenId);
}
} else {
func_8006538C(player, arg1, var_s2, arg2);
func_8006538C(player, playerId, var_s2, screenId);
}
break;
case 6:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
if (arg2 == arg1) {
func_80066BAC(player, arg1, var_s2, arg2);
if (screenId == playerId) {
func_80066BAC(player, playerId, var_s2, screenId);
}
} else if (arg2 == arg1) {
func_80066BAC(player, arg1, var_s2, arg2);
} else if (screenId == playerId) {
func_80066BAC(player, playerId, var_s2, screenId);
}
break;
}
@@ -6286,69 +6286,69 @@ void func_8006D474(Player *player, s8 arg1, s8 arg2) {
case 1:
case 9:
if (gActiveScreenMode == SCREEN_MODE_1P) {
func_800691B8(player, arg1, var_s2, arg2);
} else if (arg2 == arg1) {
func_800691B8(player, arg1, var_s2, arg2);
func_800691B8(player, playerId, var_s2, screenId);
} else if (screenId == playerId) {
func_800691B8(player, playerId, var_s2, screenId);
}
break;
case 2:
if (gActiveScreenMode == SCREEN_MODE_1P) {
func_800696CC(player, arg1, var_s2, arg2, player->unk_258[var_s2 + 30].unk_00C);
} else if (arg2 == arg1) {
func_800696CC(player, arg1, var_s2, arg2, player->unk_258[var_s2 + 30].unk_00C);
func_800696CC(player, playerId, var_s2, screenId, player->unk_258[var_s2 + 30].unk_00C);
} else if (screenId == playerId) {
func_800696CC(player, playerId, var_s2, screenId, player->unk_258[var_s2 + 30].unk_00C);
}
break;
case 3:
if (gActiveScreenMode == SCREEN_MODE_1P) {
func_80067280(player, arg1, var_s2, arg2);
} else if (arg2 == arg1) {
func_80067280(player, (s32) arg1, var_s2, arg2);
func_80067280(player, playerId, var_s2, screenId);
} else if (screenId == playerId) {
func_80067280(player, (s32) playerId, var_s2, screenId);
}
break;
case 4:
if (gActiveScreenMode == SCREEN_MODE_1P) {
func_80069444(player, arg1, var_s2, arg2);
} else if (arg2 == arg1) {
func_80069444(player, arg1, var_s2, arg2);
func_80069444(player, playerId, var_s2, screenId);
} else if (screenId == playerId) {
func_80069444(player, playerId, var_s2, screenId);
}
break;
case 5:
if (gActiveScreenMode == SCREEN_MODE_1P) {
func_80069938(player, arg1, var_s2, arg2);
} else if (arg2 == arg1) {
func_80069938(player, arg1, var_s2, arg2);
func_80069938(player, playerId, var_s2, screenId);
} else if (screenId == playerId) {
func_80069938(player, playerId, var_s2, screenId);
}
break;
case 6:
if (gActiveScreenMode == SCREEN_MODE_1P) {
func_80069BA8(player, arg1, var_s2, arg2);
} else if (arg2 == arg1) {
func_80069BA8(player, arg1, var_s2, arg2);
func_80069BA8(player, playerId, var_s2, screenId);
} else if (screenId == playerId) {
func_80069BA8(player, playerId, var_s2, screenId);
}
break;
case 7:
if (gActiveScreenMode == SCREEN_MODE_1P) {
func_80069DB8(player, arg1, var_s2, arg2);
} else if (arg2 == arg1) {
func_80069DB8(player, arg1, var_s2, arg2);
func_80069DB8(player, playerId, var_s2, screenId);
} else if (screenId == playerId) {
func_80069DB8(player, playerId, var_s2, screenId);
}
break;
case 8:
if (gActiveScreenMode == SCREEN_MODE_1P) {
func_80067604(player, arg1, var_s2, arg2);
} else if (arg2 == arg1) {
func_80067604(player, arg1, var_s2, arg2);
func_80067604(player, playerId, var_s2, screenId);
} else if (screenId == playerId) {
func_80067604(player, playerId, var_s2, screenId);
}
break;
}
switch (player->unk_258[var_s2 + 10].unk_012) {
case 1:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
if (arg2 == arg1) {
func_80065AB0(player, arg1, var_s2, arg2);
if (screenId == playerId) {
func_80065AB0(player, playerId, var_s2, screenId);
}
} else {
func_80065AB0(player, arg1, var_s2, arg2);
func_80065AB0(player, playerId, var_s2, screenId);
}
break;
case 2:
@@ -6356,36 +6356,36 @@ void func_8006D474(Player *player, s8 arg1, s8 arg2) {
case 4:
case 5:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
if (arg2 == arg1) {
func_80065F0C(player, arg1, var_s2, arg2);
if (screenId == playerId) {
func_80065F0C(player, playerId, var_s2, screenId);
}
} else {
func_80065F0C(player, arg1, var_s2, arg2);
func_80065F0C(player, playerId, var_s2, screenId);
}
break;
case 9:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
if (arg2 == arg1) {
func_800664E0(player, (s32) arg1, var_s2, arg2);
if (screenId == playerId) {
func_800664E0(player, (s32) playerId, var_s2, screenId);
}
} else {
func_800664E0(player, (s32) arg1, var_s2, arg2);
func_800664E0(player, (s32) playerId, var_s2, screenId);
}
break;
case 11:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
if (arg2 == arg1) {
func_8006A01C(player, arg1, var_s2, arg2);
if (screenId == playerId) {
func_8006A01C(player, playerId, var_s2, screenId);
}
} else if (arg2 == arg1) {
func_8006A01C(player, arg1, var_s2, arg2);
} else if (screenId == playerId) {
func_8006A01C(player, playerId, var_s2, screenId);
}
break;
}
}
}
if ((gModeSelection == BATTLE) && (player->unk_002 & (2 << (arg2 * 4)))) {
func_8006BA94(player, arg1, arg2);
if ((gModeSelection == BATTLE) && (player->unk_002 & (2 << (screenId * 4)))) {
func_8006BA94(player, playerId, screenId);
}
}
@@ -6565,7 +6565,20 @@ void func_8006E420(Player* player, s8 arg1, s8 arg2) {
}
}
void func_8006E5AC(Player* player, s8 arg1, s8 arg2) {
void render_kart_particle_on_screen_one(Player* player, s8 playerId, s8 screenId) {
if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) {
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
if (playerId == screenId) {
func_8006D474(player, playerId, screenId);
}
} else {
func_8006D474(player, playerId, screenId);
}
func_8006DC54(player, playerId, screenId);
}
}
void render_kart_particle_on_screen_two(Player* player, s8 arg1, s8 arg2) {
if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) {
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
if (arg1 == arg2) {
@@ -6578,7 +6591,7 @@ void func_8006E5AC(Player* player, s8 arg1, s8 arg2) {
}
}
void func_8006E634(Player* player, s8 arg1, s8 arg2) {
void render_kart_particle_on_screen_three(Player* player, s8 arg1, s8 arg2) {
if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) {
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
if (arg1 == arg2) {
@@ -6591,20 +6604,7 @@ void func_8006E634(Player* player, s8 arg1, s8 arg2) {
}
}
void func_8006E6BC(Player* player, s8 arg1, s8 arg2) {
if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) {
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
if (arg1 == arg2) {
func_8006D474(player, arg1, arg2);
}
} else {
func_8006D474(player, arg1, arg2);
}
func_8006DC54(player, arg1, arg2);
}
}
void func_8006E744(Player* player, s8 arg1, s8 arg2) {
void render_kart_particle_on_screen_four(Player* player, s8 arg1, s8 arg2) {
if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) {
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
if (arg1 == arg2) {
+4 -4
View File
@@ -245,10 +245,10 @@ void func_8006DD3C(Player*, s8, s8);
void func_8006E058(void);
void func_8006E420(Player*, s8, s8);
void func_8006E5AC(Player*, s8, s8);
void func_8006E634(Player*, s8, s8);
void func_8006E6BC(Player*, s8, s8);
void func_8006E744(Player*, s8, s8);
void render_kart_particle_on_screen_one(Player*, s8, s8);
void render_kart_particle_on_screen_two(Player*, s8, s8);
void render_kart_particle_on_screen_three(Player*, s8, s8);
void render_kart_particle_on_screen_four(Player*, s8, s8);
void func_8006E7CC(Player*, s8, s8);
void func_8006E848(Player*, s8, s8);
void func_8006E8C4(Player*, s8, s8);
+29 -21
View File
@@ -1697,7 +1697,7 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s
s32 temp = player->effects;
if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) {
if (player->animFrameSelector[screenId] != 0) {
osInvalDCache(&D_802DFB80[index][screenId2][playerId], D_800DDEB0[player->characterId]);
osInvalDCache(&gEncodedKartTexture[index][screenId2][playerId], D_800DDEB0[player->characterId]);
osPiStartDma(
&gDmaIoMesg,
@@ -1705,14 +1705,14 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s
(uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
gKartTextureTable1[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]
)],
&D_802DFB80[index][screenId2][playerId],
&gEncodedKartTexture[index][screenId2][playerId],
D_800DDEB0[player->characterId],
&gDmaMesgQueue
);
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
} else {
osInvalDCache(&D_802DFB80[index][screenId2][playerId], D_800DDEB0[player->characterId]);
osInvalDCache(&gEncodedKartTexture[index][screenId2][playerId], D_800DDEB0[player->characterId]);
osPiStartDma(
&gDmaIoMesg,
@@ -1721,7 +1721,7 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s
(uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]
)],
&D_802DFB80[index][screenId2][playerId],
&gEncodedKartTexture[index][screenId2][playerId],
D_800DDEB0[player->characterId],
&gDmaMesgQueue
);
@@ -1729,7 +1729,7 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
}
} else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) {
osInvalDCache(&D_802DFB80[index][screenId2][playerId], 0x780U);
osInvalDCache(&gEncodedKartTexture[index][screenId2][playerId], 0x780U);
// player->unk_0A8 >> 8 converts an 8.8 fixed-point animation frame to a whole number.
osPiStartDma(
&gDmaIoMesg,
@@ -1738,14 +1738,14 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s
(uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8]
)],
&D_802DFB80[index][screenId2][playerId],
&gEncodedKartTexture[index][screenId2][playerId],
0x900,
&gDmaMesgQueue
);
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
} else {
osInvalDCache(&D_802DFB80[index][screenId2][playerId], D_800DDEB0[player->characterId]);
osInvalDCache(&gEncodedKartTexture[index][screenId2][playerId], D_800DDEB0[player->characterId]);
osPiStartDma(
&gDmaIoMesg,
@@ -1754,7 +1754,7 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s
(uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]
)],
&D_802DFB80[index][screenId2][playerId],
&gEncodedKartTexture[index][screenId2][playerId],
D_800DDEB0[player->characterId],
&gDmaMesgQueue
);
@@ -1763,13 +1763,13 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s
}
}
void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
void load_kart_texture_non_blocking(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
s32 temp = player->effects;
if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0))
{
if (player->animFrameSelector[arg2] != 0) {
osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
osInvalDCache(&gEncodedKartTexture[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
osPiStartDma(
&gDmaIoMesg,
@@ -1778,12 +1778,12 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
(uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
gKartTextureTable1[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]
)],
&D_802DFB80[arg4][arg3][arg1],
&gEncodedKartTexture[arg4][arg3][arg1],
D_800DDEB0[player->characterId],
&gDmaMesgQueue
);
} else {
osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
osInvalDCache(&gEncodedKartTexture[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
osPiStartDma(
&gDmaIoMesg,
@@ -1792,7 +1792,7 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
(uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]
)],
&D_802DFB80[arg4][arg3][arg1],
&gEncodedKartTexture[arg4][arg3][arg1],
D_800DDEB0[player->characterId],
&gDmaMesgQueue
);
@@ -1800,7 +1800,7 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
} else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) ||
((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000))
{
osInvalDCache(&D_802DFB80[arg4][arg3][arg1], 0x780);
osInvalDCache(&gEncodedKartTexture[arg4][arg3][arg1], 0x780);
// player->unk_0A8 >> 8 converts an 8.8 fixed-point animation frame to a whole number.
osPiStartDma(
&gDmaIoMesg,
@@ -1809,12 +1809,12 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
(uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8]
)],
&D_802DFB80[arg4][arg3][arg1],
&gEncodedKartTexture[arg4][arg3][arg1],
0x900,
&gDmaMesgQueue
);
} else {
osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
osInvalDCache(&gEncodedKartTexture[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
osPiStartDma(
&gDmaIoMesg,
@@ -1823,7 +1823,7 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
(uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(
gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]
)],
&D_802DFB80[arg4][arg3][arg1],
&gEncodedKartTexture[arg4][arg3][arg1],
D_800DDEB0[player->characterId],
&gDmaMesgQueue
);
@@ -1832,9 +1832,9 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
void load_kart_palette(Player *player, s8 playerId, s8 screenId, s8 index) {
#ifdef AVOID_UB
struct_D_802F1F80 *temp_s0 = &D_802F1F80[index][screenId][playerId];
struct_D_802F1F80 *temp_s0 = &gPlayerPalettesList[index][screenId][playerId];
#else
struct_D_802F1F80 *temp_s0 = (struct_D_802F1F80 *) &D_802F1F80[index][screenId][playerId * 0x100];
struct_D_802F1F80 *temp_s0 = (struct_D_802F1F80 *) &gPlayerPalettesList[index][screenId][playerId * 0x100];
#endif
switch(gActiveScreenMode) {
case SCREEN_MODE_1P:
@@ -1876,7 +1876,7 @@ void load_kart_palette(Player *player, s8 playerId, s8 screenId, s8 index) {
}
}
void func_80027BDC(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) {
void load_player_data(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) {
osInvalDCache(vAddr, size);
osPiStartDma(
@@ -1892,7 +1892,15 @@ void func_80027BDC(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) {
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
}
void func_80027C74(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) {
/**
* @brief read data from ROM and write it to the given virtual address
*
* @param player Player struct
* @param arg1 ROM offset
* @param vAddr Virtual address
* @param size Size of data to read
*/
void load_player_data_non_blocking(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) {
osInvalDCache(vAddr, size);
osPiStartDma(
+3 -3
View File
@@ -7,10 +7,10 @@
/* Function Prototypes */
void load_kart_texture(Player*, s8, s8, s8, s8);
void func_80027560(Player*, s8, s8, s8, s8);
void load_kart_texture_non_blocking(Player*, s8, s8, s8, s8);
void load_kart_palette(Player*, s8, s8, s8);
void func_80027BDC(Player*, s32, void*, u16);
void func_80027C74(Player*, s32, void*, u16);
void load_player_data(Player*, s32, void*, u16);
void load_player_data_non_blocking(Player*, s32, void*, u16);
/* This is where I'd put my static data, if I had any */
+4 -4
View File
@@ -976,8 +976,8 @@ void func_8002934C(Player *player, Camera *camera, s8 screenId, s8 playerId) {
D_80165190[screenId][playerId] = 1;
if ((player->effects & 0x80) || (player->effects & 0x40)) {
if ((player->animFrameSelector[screenId] == D_801650D0[screenId][playerId])
&& (player->animGroupSelector[screenId] == D_80165110[screenId][playerId])) {
if ((player->animFrameSelector[screenId] == gLastAnimFrameSelector[screenId][playerId])
&& (player->animGroupSelector[screenId] == gLastAnimGroupSelector[screenId][playerId])) {
player->unk_002 &= ~(1 << (screenId * 4));
D_80165190[screenId][playerId] = 1;
}
@@ -986,11 +986,11 @@ void func_8002934C(Player *player, Camera *camera, s8 screenId, s8 playerId) {
}
} else {
player->unk_002 |= 1 << (screenId * 4);
if (((player->animFrameSelector[screenId] == D_801650D0[screenId][playerId]) && (player->animGroupSelector[screenId] == D_80165110[screenId][playerId])) && ((D_80165190[screenId][playerId]) == 0)) {
if (((player->animFrameSelector[screenId] == gLastAnimFrameSelector[screenId][playerId]) && (player->animGroupSelector[screenId] == gLastAnimGroupSelector[screenId][playerId])) && ((D_80165190[screenId][playerId]) == 0)) {
player->unk_002 &= ~(1 << (screenId * 4));
}
}
temp_a0_2 = D_801650D0[screenId][playerId] - player->animFrameSelector[screenId];
temp_a0_2 = gLastAnimFrameSelector[screenId][playerId] - player->animFrameSelector[screenId];
if ((temp_a0_2 >= 0x14) || (temp_a0_2 < (-0x13))) {
player->unk_002 |= 1 << (screenId * 4);
}
+195 -192
View File
@@ -34,14 +34,14 @@ UNUSED void *D_800DDB5C[3] = {
gFramebuffer0, gFramebuffer1, gFramebuffer2
};
s16 D_80164AB0[8];
s16 D_80164AC0[8];
Player *D_80164AD0[8];
s16 gPlayersToRenderPlayerId[8];
s16 gPlayersToRenderScreenId[8];
Player *gPlayersToRenderPlayer[8];
s16 gMatrixEffectCount;
s32 D_80164AF4[3];
struct_D_802F1F80 *gPlayerPalette;
u8 *D_80164B08;
u8 *D_80164B0C;
u8 *sKartUpperTexture;
u8 *sKartLowerTexture;
u16 gPlayerRedEffect[8];
u16 gPlayerGreenEffect[8];
u16 gPlayerBlueEffect[8];
@@ -53,8 +53,8 @@ UNUSED u16 gPlayerWhiteEffect[8];
s32 D_80164B80[296];
s16 D_80165020[40];
Vec3f D_80165070[8];
s16 D_801650D0[4][8];
s16 D_80165110[4][8];
s16 gLastAnimFrameSelector[4][8];
s16 gLastAnimGroupSelector[4][8];
s16 D_80165150[4][8];
s16 D_80165190[4][8];
s16 D_801651D0[4][8];
@@ -170,6 +170,9 @@ u16 func_8001FD78(Player *player, f32 posX, UNUSED f32 arg2, f32 posZ) {
return ret;
}
/**
* @brief one of his function is to put the frame to load in to a list to load it to be only applied for the next frame
*/
void init_render_player(Player *player, Camera *camera, s8 playerId, s8 screenId) {
UNUSED s32 pad[4];
s32 sp4C;
@@ -195,13 +198,13 @@ void init_render_player(Player *player, Camera *camera, s8 playerId, s8 screenId
temp_v0_2 = 1 << (screenId << 2);
if ((temp_v0 == (player->unk_002 & temp_v0)) && (temp_v0_2 == (player->unk_002 & temp_v0_2))) {
if ((check_player_camera_collision(player, camera, D_80165570 + sp4C, D_80165572 + sp48) == 1) & 0xFFFF) {
D_80164AB0[gPlayersToRenderCount] = (s16) playerId;
D_80164AC0[gPlayersToRenderCount] = (s16) screenId;
D_80164AD0[gPlayersToRenderCount] = player;
gPlayersToRenderPlayerId[gPlayersToRenderCount] = (s16) playerId;
gPlayersToRenderScreenId[gPlayersToRenderCount] = (s16) screenId;
gPlayersToRenderPlayer[gPlayersToRenderCount] = player;
gPlayersToRenderCount += 1;
D_80165190[screenId][playerId] = 0;
D_801650D0[screenId][playerId] = player->animFrameSelector[screenId];
D_80165110[screenId][playerId] = player->animGroupSelector[screenId];
gLastAnimFrameSelector[screenId][playerId] = player->animFrameSelector[screenId];
gLastAnimGroupSelector[screenId][playerId] = player->animGroupSelector[screenId];
D_80165150[screenId][playerId] = player->unk_0A8;
D_801651D0[screenId][playerId] += 1;
if (D_801651D0[screenId][playerId] == 2) {
@@ -209,13 +212,13 @@ void init_render_player(Player *player, Camera *camera, s8 playerId, s8 screenId
}
} else {
if ((check_player_camera_collision(player, camera, D_80165574 + sp4C, D_80165576) == 1) & 0xFFFF) {
if ((sRenderingFramebuffer == gRenderingFramebufferByPlayer[playerId]) || ((D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]) > 0x13) || ((D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]) < -0x13) || (D_80165190[screenId][playerId] == (s16) 1U)) {
D_80164AB0[gPlayersToRenderCount] = (s16) playerId;
D_80164AC0[gPlayersToRenderCount] = (s16) screenId;
D_80164AD0[gPlayersToRenderCount] = player;
if ((sRenderingFramebuffer == gRenderingFramebufferByPlayer[playerId]) || ((gLastAnimFrameSelector[screenId][playerId] - player->animFrameSelector[screenId]) > 0x13) || ((gLastAnimFrameSelector[screenId][playerId] - player->animFrameSelector[screenId]) < -0x13) || (D_80165190[screenId][playerId] == (s16) 1U)) {
gPlayersToRenderPlayerId[gPlayersToRenderCount] = (s16) playerId;
gPlayersToRenderScreenId[gPlayersToRenderCount] = (s16) screenId;
gPlayersToRenderPlayer[gPlayersToRenderCount] = player;
gPlayersToRenderCount += 1;
D_801650D0[screenId][playerId] = player->animFrameSelector[screenId];
D_80165110[screenId][playerId] = player->animGroupSelector[screenId];
gLastAnimFrameSelector[screenId][playerId] = player->animFrameSelector[screenId];
gLastAnimGroupSelector[screenId][playerId] = player->animGroupSelector[screenId];
D_80165150[screenId][playerId] = player->unk_0A8;
D_80165190[screenId][playerId] = 0;
D_801651D0[screenId][playerId] += 1;
@@ -225,13 +228,13 @@ void init_render_player(Player *player, Camera *camera, s8 playerId, s8 screenId
}
} else {
if ((
(D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]) > 0x13) || ((D_801650D0[screenId][playerId] - player->animFrameSelector[screenId]) < -0x13) || (D_80165190[screenId][playerId] == (s16) 1U)) {
D_80164AB0[gPlayersToRenderCount] = (s16) playerId;
D_80164AC0[gPlayersToRenderCount] = (s16) screenId;
D_80164AD0[gPlayersToRenderCount] = player;
(gLastAnimFrameSelector[screenId][playerId] - player->animFrameSelector[screenId]) > 0x13) || ((gLastAnimFrameSelector[screenId][playerId] - player->animFrameSelector[screenId]) < -0x13) || (D_80165190[screenId][playerId] == (s16) 1U)) {
gPlayersToRenderPlayerId[gPlayersToRenderCount] = (s16) playerId;
gPlayersToRenderScreenId[gPlayersToRenderCount] = (s16) screenId;
gPlayersToRenderPlayer[gPlayersToRenderCount] = player;
gPlayersToRenderCount += 1;
D_801650D0[screenId][playerId] = (s16) player->animFrameSelector[screenId];
D_80165110[screenId][playerId] = player->animGroupSelector[screenId];
gLastAnimFrameSelector[screenId][playerId] = (s16) player->animFrameSelector[screenId];
gLastAnimGroupSelector[screenId][playerId] = player->animGroupSelector[screenId];
D_80165150[screenId][playerId] = player->unk_0A8;
D_80165190[screenId][playerId] = 0;
D_801651D0[screenId][playerId] += 1;
@@ -245,96 +248,96 @@ void init_render_player(Player *player, Camera *camera, s8 playerId, s8 screenId
}
}
void func_80020524(void) {
void load_kart_texture_and_render_kart_particle_on_screen_one(void) {
s16 i;
func_80027560(D_80164AD0[0], D_80164AB0[0], D_80164AC0[0], D_80164AC0[0], D_801651D0[D_80164AC0[0]][D_80164AB0[0]]);
func_8006E5AC(gPlayerOneCopy, 0, 0);
func_8006E5AC(gPlayerTwo, 1, 0);
func_8006E5AC(gPlayerThree, 2, 0);
func_8006E5AC(gPlayerFour, 3, 0);
load_kart_texture_non_blocking(gPlayersToRenderPlayer[0], gPlayersToRenderPlayerId[0], gPlayersToRenderScreenId[0], gPlayersToRenderScreenId[0], D_801651D0[gPlayersToRenderScreenId[0]][gPlayersToRenderPlayerId[0]]);
render_kart_particle_on_screen_one(gPlayerOneCopy, PLAYER_ONE, PLAYER_ONE);
render_kart_particle_on_screen_one(gPlayerTwo, PLAYER_TWO, PLAYER_ONE);
render_kart_particle_on_screen_one(gPlayerThree, PLAYER_THREE, PLAYER_ONE);
render_kart_particle_on_screen_one(gPlayerFour, PLAYER_FOUR, PLAYER_ONE);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
func_8006E5AC(gPlayerFive, 4, 0);
func_8006E5AC(gPlayerSix, 5, 0);
func_8006E5AC(gPlayerSeven, 6, 0);
func_8006E5AC(gPlayerEight, 7, 0);
render_kart_particle_on_screen_one(gPlayerFive, PLAYER_FIVE, PLAYER_ONE);
render_kart_particle_on_screen_one(gPlayerSix, PLAYER_SIX, PLAYER_ONE);
render_kart_particle_on_screen_one(gPlayerSeven, PLAYER_SEVEN, PLAYER_ONE);
render_kart_particle_on_screen_one(gPlayerEight, PLAYER_EIGHT, PLAYER_ONE);
}
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
for (i = 1; i < gPlayersToRenderCount; i++) {
func_80027560(D_80164AD0[i], D_80164AB0[i], D_80164AC0[i], D_80164AC0[i], D_801651D0[D_80164AC0[i]][D_80164AB0[i]]);
load_kart_texture_non_blocking(gPlayersToRenderPlayer[i], gPlayersToRenderPlayerId[i], gPlayersToRenderScreenId[i], gPlayersToRenderScreenId[i], D_801651D0[gPlayersToRenderScreenId[i]][gPlayersToRenderPlayerId[i]]);
mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].unk_00,
D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array);
mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[i - 1]][gPlayersToRenderPlayerId[i - 1]]][gPlayersToRenderScreenId[i - 1]][gPlayersToRenderPlayerId[i - 1]].unk_00,
D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[i - 1]][gPlayersToRenderPlayerId[i - 1]]][gPlayersToRenderScreenId[i - 1]][gPlayersToRenderPlayerId[i - 1]].pixel_index_array);
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
}
mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00,
D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array);
mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]].unk_00,
D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]].pixel_index_array);
}
void func_8002088C(void) {
void load_kart_texture_and_render_kart_particle_on_screen_two(void) {
s16 var_s0;
func_80027560(D_80164AD0[0], D_80164AB0[0], D_80164AC0[0], D_80164AC0[0], D_801651D0[D_80164AC0[0]][D_80164AB0[0]]);
func_8006E634(gPlayerOneCopy, 0, 1);
func_8006E634(gPlayerTwo, 1, 1);
func_8006E634(gPlayerThree, 2, 1);
func_8006E634(gPlayerFour, 3, 1);
load_kart_texture_non_blocking(gPlayersToRenderPlayer[0], gPlayersToRenderPlayerId[0], gPlayersToRenderScreenId[0], gPlayersToRenderScreenId[0], D_801651D0[gPlayersToRenderScreenId[0]][gPlayersToRenderPlayerId[0]]);
render_kart_particle_on_screen_two(gPlayerOneCopy, PLAYER_ONE, PLAYER_TWO);
render_kart_particle_on_screen_two(gPlayerTwo, PLAYER_TWO, PLAYER_TWO);
render_kart_particle_on_screen_two(gPlayerThree, PLAYER_THREE, PLAYER_TWO);
render_kart_particle_on_screen_two(gPlayerFour, PLAYER_FOUR, PLAYER_TWO);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
func_8006E634(gPlayerFive, 4, 1);
func_8006E634(gPlayerSix, 5, 1);
func_8006E634(gPlayerSeven, 6, 1);
func_8006E634(gPlayerEight, 7, 1);
render_kart_particle_on_screen_two(gPlayerFive, PLAYER_FIVE, PLAYER_TWO);
render_kart_particle_on_screen_two(gPlayerSix, PLAYER_SIX, PLAYER_TWO);
render_kart_particle_on_screen_two(gPlayerSeven, PLAYER_SEVEN, PLAYER_TWO);
render_kart_particle_on_screen_two(gPlayerEight, PLAYER_EIGHT, PLAYER_TWO);
}
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
for (var_s0 = 1; var_s0 < gPlayersToRenderCount; var_s0++) {
func_80027560(D_80164AD0[var_s0], D_80164AB0[var_s0], D_80164AC0[var_s0], D_80164AC0[var_s0], D_801651D0[D_80164AC0[var_s0]][D_80164AB0[var_s0]]);
mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].unk_00,
D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]].pixel_index_array);
load_kart_texture_non_blocking(gPlayersToRenderPlayer[var_s0], gPlayersToRenderPlayerId[var_s0], gPlayersToRenderScreenId[var_s0], gPlayersToRenderScreenId[var_s0], D_801651D0[gPlayersToRenderScreenId[var_s0]][gPlayersToRenderPlayerId[var_s0]]);
mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]].unk_00,
D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]].pixel_index_array);
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
}
mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00,
D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array);
mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]].unk_00,
D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]].pixel_index_array);
}
void func_80020BF4(void) {
void load_kart_texture_and_render_kart_particle_on_screen_three(void) {
s16 var_s0;
func_80027560(D_80164AD0[0], D_80164AB0[0] + 4, D_80164AC0[0], D_80164AC0[0] - 2, D_801651D0[D_80164AC0[0]][D_80164AB0[0]]);
func_8006E6BC(gPlayerOneCopy, 0, 2);
func_8006E6BC(gPlayerTwo, 1, 2);
func_8006E6BC(gPlayerThree, 2, 2);
func_8006E6BC(gPlayerFour, 3, 2);
load_kart_texture_non_blocking(gPlayersToRenderPlayer[0], gPlayersToRenderPlayerId[0] + 4, gPlayersToRenderScreenId[0], gPlayersToRenderScreenId[0] - 2, D_801651D0[gPlayersToRenderScreenId[0]][gPlayersToRenderPlayerId[0]]);
render_kart_particle_on_screen_three(gPlayerOneCopy, PLAYER_ONE, PLAYER_THREE);
render_kart_particle_on_screen_three(gPlayerTwo, PLAYER_TWO, PLAYER_THREE);
render_kart_particle_on_screen_three(gPlayerThree, PLAYER_THREE, PLAYER_THREE);
render_kart_particle_on_screen_three(gPlayerFour, PLAYER_FOUR, PLAYER_THREE);
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
for (var_s0 = 1; var_s0 < gPlayersToRenderCount; var_s0++) {
func_80027560(D_80164AD0[var_s0], D_80164AB0[var_s0] + 4, D_80164AC0[var_s0], D_80164AC0[var_s0] - 2, D_801651D0[D_80164AC0[var_s0]][D_80164AB0[var_s0]]);
mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].unk_00,
D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].pixel_index_array);
load_kart_texture_non_blocking(gPlayersToRenderPlayer[var_s0], gPlayersToRenderPlayerId[var_s0] + 4, gPlayersToRenderScreenId[var_s0], gPlayersToRenderScreenId[var_s0] - 2, D_801651D0[gPlayersToRenderScreenId[var_s0]][gPlayersToRenderPlayerId[var_s0]]);
mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1] - 2][gPlayersToRenderPlayerId[var_s0 - 1] + 4].unk_00,
D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1] - 2][gPlayersToRenderPlayerId[var_s0 - 1] + 4].pixel_index_array);
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
}
mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00,
D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array);
mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1] - 2][gPlayersToRenderPlayerId[gPlayersToRenderCount-1] + 4].unk_00,
D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1] - 2][gPlayersToRenderPlayerId[gPlayersToRenderCount-1] + 4].pixel_index_array);
}
void func_80020F1C(void) {
void load_kart_texture_and_render_kart_particle_on_screen_four(void) {
s16 var_s0;
func_80027560(D_80164AD0[0], D_80164AB0[0] + 4, D_80164AC0[0], D_80164AC0[0] - 2, D_801651D0[D_80164AC0[0]][D_80164AB0[0]]);
func_8006E744(gPlayerOneCopy, 0, 3);
func_8006E744(gPlayerTwo, 1, 3);
func_8006E744(gPlayerThree, 2, 3);
func_8006E744(gPlayerFour, 3, 3);
load_kart_texture_non_blocking(gPlayersToRenderPlayer[0], gPlayersToRenderPlayerId[0] + 4, gPlayersToRenderScreenId[0], gPlayersToRenderScreenId[0] - 2, D_801651D0[gPlayersToRenderScreenId[0]][gPlayersToRenderPlayerId[0]]);
render_kart_particle_on_screen_four(gPlayerOneCopy, PLAYER_ONE, PLAYER_FOUR);
render_kart_particle_on_screen_four(gPlayerTwo, PLAYER_TWO, PLAYER_FOUR);
render_kart_particle_on_screen_four(gPlayerThree, PLAYER_THREE, PLAYER_FOUR);
render_kart_particle_on_screen_four(gPlayerFour, PLAYER_FOUR, PLAYER_FOUR);
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
for (var_s0 = 1; var_s0 < gPlayersToRenderCount; var_s0++) {
func_80027560(D_80164AD0[var_s0], D_80164AB0[var_s0] + 4, D_80164AC0[var_s0], D_80164AC0[var_s0] - 2, D_801651D0[D_80164AC0[var_s0]][D_80164AB0[var_s0]]);
mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].unk_00,
D_802BFB80.arraySize8[D_801651D0[D_80164AC0[var_s0 - 1]][D_80164AB0[var_s0 - 1]]][D_80164AC0[var_s0 - 1] - 2][D_80164AB0[var_s0 - 1] + 4].pixel_index_array);
load_kart_texture_non_blocking(gPlayersToRenderPlayer[var_s0], gPlayersToRenderPlayerId[var_s0] + 4, gPlayersToRenderScreenId[var_s0], gPlayersToRenderScreenId[var_s0] - 2, D_801651D0[gPlayersToRenderScreenId[var_s0]][gPlayersToRenderPlayerId[var_s0]]);
mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1] - 2][gPlayersToRenderPlayerId[var_s0 - 1] + 4].unk_00,
D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[var_s0 - 1]][gPlayersToRenderPlayerId[var_s0 - 1]]][gPlayersToRenderScreenId[var_s0 - 1] - 2][gPlayersToRenderPlayerId[var_s0 - 1] + 4].pixel_index_array);
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
}
mio0decode((u8*) D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00,
D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].pixel_index_array);
mio0decode((u8*) gEncodedKartTexture[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1] - 2][gPlayersToRenderPlayerId[gPlayersToRenderCount-1] + 4].unk_00,
D_802BFB80.arraySize8[D_801651D0[gPlayersToRenderScreenId[gPlayersToRenderCount-1]][gPlayersToRenderPlayerId[gPlayersToRenderCount-1]]][gPlayersToRenderScreenId[gPlayersToRenderCount-1] - 2][gPlayersToRenderPlayerId[gPlayersToRenderCount-1] + 4].pixel_index_array);
}
void try_rendering_player(Player *player, s8 playerId, s8 arg2) {
@@ -359,38 +362,38 @@ void render_players_on_screen_one(void) {
};
gPlayersToRenderCount = 0;
init_render_player(gPlayerOneCopy, camera1, 0U, 0U);
init_render_player(gPlayerTwo, camera1, 1U, 0U);
init_render_player(gPlayerThree, camera1, 2U, 0U);
init_render_player(gPlayerFour, camera1, 3U, 0U);
init_render_player(gPlayerOneCopy, camera1, PLAYER_ONE, PLAYER_ONE);
init_render_player(gPlayerTwo, camera1, PLAYER_TWO, PLAYER_ONE);
init_render_player(gPlayerThree, camera1, PLAYER_THREE, PLAYER_ONE);
init_render_player(gPlayerFour, camera1, PLAYER_FOUR, PLAYER_ONE);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
init_render_player(gPlayerFive, camera1, 4U, 0U);
init_render_player(gPlayerSix, camera1, 5U, 0U);
init_render_player(gPlayerSeven, camera1, 6U, 0U);
init_render_player(gPlayerEight, camera1, 7U, 0U);
init_render_player(gPlayerFive, camera1, PLAYER_FIVE, PLAYER_ONE);
init_render_player(gPlayerSix, camera1, PLAYER_SIX, PLAYER_ONE);
init_render_player(gPlayerSeven, camera1, PLAYER_SEVEN, PLAYER_ONE);
init_render_player(gPlayerEight, camera1, PLAYER_EIGHT, PLAYER_ONE);
}
try_rendering_player(gPlayerOne, 0U, 0U);
try_rendering_player(gPlayerTwo, 1U, 0U);
try_rendering_player(gPlayerThree, 2U, 0U);
try_rendering_player(gPlayerFour, 3U, 0U);
try_rendering_player(gPlayerOne, PLAYER_ONE, PLAYER_ONE);
try_rendering_player(gPlayerTwo, PLAYER_TWO, PLAYER_ONE);
try_rendering_player(gPlayerThree, PLAYER_THREE, PLAYER_ONE);
try_rendering_player(gPlayerFour, PLAYER_FOUR, PLAYER_ONE);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
try_rendering_player(gPlayerFive, 4U, 0U);
try_rendering_player(gPlayerSix, 5U, 0U);
try_rendering_player(gPlayerSeven, 6U, 0U);
try_rendering_player(gPlayerEight, 7U, 0U);
try_rendering_player(gPlayerFive, PLAYER_FIVE, PLAYER_ONE);
try_rendering_player(gPlayerSix, PLAYER_SIX, PLAYER_ONE);
try_rendering_player(gPlayerSeven, PLAYER_SEVEN, PLAYER_ONE);
try_rendering_player(gPlayerEight, PLAYER_EIGHT, PLAYER_ONE);
}
if (gPlayersToRenderCount != 0) {
func_80020524();
load_kart_texture_and_render_kart_particle_on_screen_one();
} else {
func_8006E5AC(gPlayerOneCopy, 0, 0);
func_8006E5AC(gPlayerTwo, 1, 0);
func_8006E5AC(gPlayerThree, 2, 0);
func_8006E5AC(gPlayerFour, 3, 0);
render_kart_particle_on_screen_one(gPlayerOneCopy, PLAYER_ONE, PLAYER_ONE);
render_kart_particle_on_screen_one(gPlayerTwo, PLAYER_TWO, PLAYER_ONE);
render_kart_particle_on_screen_one(gPlayerThree, PLAYER_THREE, PLAYER_ONE);
render_kart_particle_on_screen_one(gPlayerFour, PLAYER_FOUR, PLAYER_ONE);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
func_8006E5AC(gPlayerFive, 4, 0);
func_8006E5AC(gPlayerSix, 5, 0);
func_8006E5AC(gPlayerSeven, 6, 0);
func_8006E5AC(gPlayerEight, 7, 0);
render_kart_particle_on_screen_one(gPlayerFive, PLAYER_FIVE, PLAYER_ONE);
render_kart_particle_on_screen_one(gPlayerSix, PLAYER_SIX, PLAYER_ONE);
render_kart_particle_on_screen_one(gPlayerSeven, PLAYER_SEVEN, PLAYER_ONE);
render_kart_particle_on_screen_one(gPlayerEight, PLAYER_EIGHT, PLAYER_ONE);
}
}
gPlayersToRenderCount = 0;
@@ -508,12 +511,12 @@ u8 **gKartWarioWheels1[] = {
gKartWario189Wheel0
};
u16 **D_800DDE34[] = {
u16 **gKartWheels0[] = {
(u16 **)gKartMarioWheels0, (u16 **)gKartLuigiWheels0, (u16 **)gKartYoshiWheels0, (u16 **)gKartToadWheels0,
(u16 **)gKartDKWheels0, (u16 **)gKartWarioWheels0, (u16 **)gKartPeachWheels0, (u16 **)gKartBowserWheels0
};
u16 **D_800DDE54[] = {
u16 **gKartWheels1[] = {
(u16 **)gKartMarioWheels1, (u16 **)gKartLuigiWheels1, (u16 **)gKartYoshiWheels1, (u16 **)gKartToadWheels1,
(u16 **)gKartDKWheels1, (u16 **)gKartWarioWheels1, (u16 **)gKartPeachWheels1, (u16 **)gKartBowserWheels1
};
@@ -528,38 +531,38 @@ s32 maybeCompilerPadding = 0;
void render_players_on_screen_two(void) {
gPlayersToRenderCount = 0;
init_render_player(gPlayerOneCopy, camera2, 0, 1);
init_render_player(gPlayerTwo, camera2, 1, 1);
init_render_player(gPlayerThree, camera2, 2, 1);
init_render_player(gPlayerFour, camera2, 3, 1);
init_render_player(gPlayerOneCopy, camera2, PLAYER_ONE, PLAYER_TWO);
init_render_player(gPlayerTwo, camera2, PLAYER_TWO, PLAYER_TWO);
init_render_player(gPlayerThree, camera2, PLAYER_THREE, PLAYER_TWO);
init_render_player(gPlayerFour, camera2, PLAYER_FOUR, PLAYER_TWO);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
init_render_player(gPlayerFive, camera2, 4, 1);
init_render_player(gPlayerSix, camera2, 5, 1);
init_render_player(gPlayerSeven, camera2, 6, 1);
init_render_player(gPlayerEight, camera2, 7, 1);
init_render_player(gPlayerFive, camera2, PLAYER_FIVE, PLAYER_TWO);
init_render_player(gPlayerSix, camera2, PLAYER_SIX, PLAYER_TWO);
init_render_player(gPlayerSeven, camera2, PLAYER_SEVEN, PLAYER_TWO);
init_render_player(gPlayerEight, camera2, PLAYER_EIGHT, PLAYER_TWO);
}
try_rendering_player(gPlayerOne, 0, 1);
try_rendering_player(gPlayerTwo, 1, 1);
try_rendering_player(gPlayerThree, 2, 1);
try_rendering_player(gPlayerFour, 3, 1);
try_rendering_player(gPlayerOne, PLAYER_ONE, PLAYER_TWO);
try_rendering_player(gPlayerTwo, PLAYER_TWO, PLAYER_TWO);
try_rendering_player(gPlayerThree, PLAYER_THREE, PLAYER_TWO);
try_rendering_player(gPlayerFour, PLAYER_FOUR, PLAYER_TWO);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
try_rendering_player(gPlayerFive, 4, 1);
try_rendering_player(gPlayerSix, 5, 1);
try_rendering_player(gPlayerSeven, 6, 1);
try_rendering_player(gPlayerEight, 7, 1);
try_rendering_player(gPlayerFive, PLAYER_FIVE, PLAYER_TWO);
try_rendering_player(gPlayerSix, PLAYER_SIX, PLAYER_TWO);
try_rendering_player(gPlayerSeven, PLAYER_SEVEN, PLAYER_TWO);
try_rendering_player(gPlayerEight, PLAYER_EIGHT, PLAYER_TWO);
}
if (gPlayersToRenderCount != 0) {
func_8002088C();
load_kart_texture_and_render_kart_particle_on_screen_two();
} else {
func_8006E634(gPlayerOneCopy, 0, 1);
func_8006E634(gPlayerTwo, 1, 1);
func_8006E634(gPlayerThree, 2, 1);
func_8006E634(gPlayerFour, 3, 1);
render_kart_particle_on_screen_two(gPlayerOneCopy, PLAYER_ONE, PLAYER_TWO);
render_kart_particle_on_screen_two(gPlayerTwo, PLAYER_TWO, PLAYER_TWO);
render_kart_particle_on_screen_two(gPlayerThree, PLAYER_THREE, PLAYER_TWO);
render_kart_particle_on_screen_two(gPlayerFour, PLAYER_FOUR, PLAYER_TWO);
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
func_8006E634(gPlayerFive, 4, 1);
func_8006E634(gPlayerSix, 5, 1);
func_8006E634(gPlayerSeven, 6, 1);
func_8006E634(gPlayerEight, 7, 1);
render_kart_particle_on_screen_two(gPlayerFive, PLAYER_FIVE, PLAYER_TWO);
render_kart_particle_on_screen_two(gPlayerSix, PLAYER_SIX, PLAYER_TWO);
render_kart_particle_on_screen_two(gPlayerSeven, PLAYER_SEVEN, PLAYER_TWO);
render_kart_particle_on_screen_two(gPlayerEight, PLAYER_EIGHT, PLAYER_TWO);
}
}
gPlayersToRenderCount = 0;
@@ -567,42 +570,42 @@ void render_players_on_screen_two(void) {
void render_players_on_screen_three(void) {
gPlayersToRenderCount = 0;
init_render_player(gPlayerOneCopy, camera3, 0, 2);
init_render_player(gPlayerTwo, camera3, 1, 2);
init_render_player(gPlayerThree, camera3, 2, 2);
init_render_player(gPlayerFour, camera3, 3, 2);
try_rendering_player(gPlayerOne, 0, 2);
try_rendering_player(gPlayerTwo, 1, 2);
try_rendering_player(gPlayerThree, 2, 2);
try_rendering_player(gPlayerFour, 3, 2);
init_render_player(gPlayerOneCopy, camera3, PLAYER_ONE, PLAYER_THREE);
init_render_player(gPlayerTwo, camera3, PLAYER_TWO, PLAYER_THREE);
init_render_player(gPlayerThree, camera3, PLAYER_THREE, PLAYER_THREE);
init_render_player(gPlayerFour, camera3, PLAYER_FOUR, PLAYER_THREE);
try_rendering_player(gPlayerOne, PLAYER_ONE, PLAYER_THREE);
try_rendering_player(gPlayerTwo, PLAYER_TWO, PLAYER_THREE);
try_rendering_player(gPlayerThree, PLAYER_THREE, PLAYER_THREE);
try_rendering_player(gPlayerFour, PLAYER_FOUR, PLAYER_THREE);
if (gPlayersToRenderCount != 0) {
func_80020BF4();
load_kart_texture_and_render_kart_particle_on_screen_three();
} else {
func_8006E6BC(gPlayerOneCopy, 0, 2);
func_8006E6BC(gPlayerTwo, 1, 2);
func_8006E6BC(gPlayerThree, 2, 2);
func_8006E6BC(gPlayerFour, 3, 2);
render_kart_particle_on_screen_three(gPlayerOneCopy, PLAYER_ONE, PLAYER_THREE);
render_kart_particle_on_screen_three(gPlayerTwo, PLAYER_TWO, PLAYER_THREE);
render_kart_particle_on_screen_three(gPlayerThree, PLAYER_THREE, PLAYER_THREE);
render_kart_particle_on_screen_three(gPlayerFour, PLAYER_FOUR, PLAYER_THREE);
}
gPlayersToRenderCount = 0;
}
void render_players_on_screen_four(void) {
gPlayersToRenderCount = 0;
init_render_player(gPlayerOneCopy, camera4, 0, 3);
init_render_player(gPlayerTwo, camera4, 1, 3);
init_render_player(gPlayerThree, camera4, 2, 3);
init_render_player(gPlayerFour, camera4, 3, 3);
try_rendering_player(gPlayerOne, 0, 3);
try_rendering_player(gPlayerTwo, 1, 3);
try_rendering_player(gPlayerThree, 2, 3);
try_rendering_player(gPlayerFour, 3, 3);
init_render_player(gPlayerOneCopy, camera4, PLAYER_ONE, PLAYER_FOUR);
init_render_player(gPlayerTwo, camera4, PLAYER_TWO, PLAYER_FOUR);
init_render_player(gPlayerThree, camera4, PLAYER_THREE, PLAYER_FOUR);
init_render_player(gPlayerFour, camera4, PLAYER_FOUR, PLAYER_FOUR);
try_rendering_player(gPlayerOne, PLAYER_ONE, PLAYER_FOUR);
try_rendering_player(gPlayerTwo, PLAYER_TWO, PLAYER_FOUR);
try_rendering_player(gPlayerThree, PLAYER_THREE, PLAYER_FOUR);
try_rendering_player(gPlayerFour, PLAYER_FOUR, PLAYER_FOUR);
if (gPlayersToRenderCount != 0) {
func_80020F1C();
load_kart_texture_and_render_kart_particle_on_screen_four();
} else {
func_8006E744(gPlayerOneCopy, 0, 3);
func_8006E744(gPlayerTwo, 1, 3);
func_8006E744(gPlayerThree, 2, 3);
func_8006E744(gPlayerFour, 3, 3);
render_kart_particle_on_screen_four(gPlayerOneCopy, PLAYER_ONE, PLAYER_FOUR);
render_kart_particle_on_screen_four(gPlayerTwo, PLAYER_TWO, PLAYER_FOUR);
render_kart_particle_on_screen_four(gPlayerThree, PLAYER_THREE, PLAYER_FOUR);
render_kart_particle_on_screen_four(gPlayerFour, PLAYER_FOUR, PLAYER_FOUR);
}
gPlayersToRenderCount = 0;
}
@@ -1411,16 +1414,16 @@ void render_kart(Player *player, s8 playerId, s8 arg2, s8 arg3) {
}
}
#ifdef AVOID_UB
gPlayerPalette = &D_802F1F80[D_801651D0[arg2][playerId]][arg2][playerId];
gPlayerPalette = &gPlayerPalettesList[D_801651D0[arg2][playerId]][arg2][playerId];
#else
gPlayerPalette = (struct_D_802F1F80 *) &D_802F1F80[D_801651D0[arg2][playerId]][arg2][playerId * 0x100];
gPlayerPalette = (struct_D_802F1F80 *) &gPlayerPalettesList[D_801651D0[arg2][playerId]][arg2][playerId * 0x100];
#endif
if ((arg2 == 0) || (arg2 == 1)) {
D_80164B08 = &D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2][playerId].pixel_index_array[0];
D_80164B0C = &D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2][playerId].pixel_index_array[0x7C0];
sKartUpperTexture = &D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2][playerId].pixel_index_array[0];
sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2][playerId].pixel_index_array[0x7C0];
} else {
D_80164B08 = &D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2 - 1][playerId - 4].pixel_index_array[0];
D_80164B0C = &D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2 - 1][playerId - 4].pixel_index_array[0x7C0];
sKartUpperTexture = &D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2 - 1][playerId - 4].pixel_index_array[0];
sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2 - 1][playerId - 4].pixel_index_array[0x7C0];
}
mtxf_translate_rotate(sp1A4, sp154, sp14C);
mtxf_scale2(sp1A4, gCharacterSize[player->characterId] * player->size);
@@ -1490,11 +1493,11 @@ void render_kart(Player *player, s8 playerId, s8 arg2, s8 arg3) {
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
}
gDPLoadTextureBlock(gDisplayListHead++, D_80164B08, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTextureBlock(gDisplayListHead++, sKartUpperTexture, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSPVertex(gDisplayListHead++, &D_800DDBB4[playerId][arg3], 4, 0);
gSPDisplayList(gDisplayListHead++, common_square_plain_render);
gDPLoadTextureBlock(gDisplayListHead++, D_80164B0C, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTextureBlock(gDisplayListHead++, sKartLowerTexture, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSPVertex(gDisplayListHead++, &D_800DDBB4[playerId][arg3 + 4], 4, 0);
gSPDisplayList(gDisplayListHead++, common_square_plain_render);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
@@ -1529,16 +1532,16 @@ void render_ghost(Player *player, s8 playerId, s8 screenId, s8 arg3) {
spDC[0] = player->pos[0] + spD0;
spDC[2] = player->pos[2] + spC8;
#ifdef AVOID_UB
gPlayerPalette = &D_802F1F80[D_801651D0[screenId][playerId]][screenId][playerId];
gPlayerPalette = &gPlayerPalettesList[D_801651D0[screenId][playerId]][screenId][playerId];
#else
gPlayerPalette = (struct_D_802F1F80 *) &D_802F1F80[D_801651D0[screenId][playerId]][screenId][playerId * 0x100];
gPlayerPalette = (struct_D_802F1F80 *) &gPlayerPalettesList[D_801651D0[screenId][playerId]][screenId][playerId * 0x100];
#endif
if ((screenId == 0) || (screenId == 1)) {
D_80164B08 = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId][playerId].pixel_index_array[0];
D_80164B0C = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId][playerId].pixel_index_array[0x7C0];
sKartUpperTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId][playerId].pixel_index_array[0];
sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId][playerId].pixel_index_array[0x7C0];
} else {
D_80164B08 = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId - 1][playerId - 4].pixel_index_array[0];
D_80164B0C = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId - 1][playerId - 4].pixel_index_array[0x7C0];
sKartUpperTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId - 1][playerId - 4].pixel_index_array[0];
sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId - 1][playerId - 4].pixel_index_array[0x7C0];
}
mtxf_translate_rotate(sp12C, spDC, spD4);
@@ -1560,11 +1563,11 @@ void render_ghost(Player *player, s8 playerId, s8 screenId, s8 arg3) {
);
gDPSetRenderMode(gDisplayListHead++, AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA));
gDPLoadTextureBlock(gDisplayListHead++, D_80164B08, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTextureBlock(gDisplayListHead++, sKartUpperTexture, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSPVertex(gDisplayListHead++, &D_800DDBB4[playerId][arg3], 4, 0);
gSPDisplayList(gDisplayListHead++, common_square_plain_render);
gDPLoadTextureBlock(gDisplayListHead++, D_80164B0C, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTextureBlock(gDisplayListHead++, sKartLowerTexture, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSPVertex(gDisplayListHead++, &D_800DDBB4[playerId][arg3 + 4], 4, 0);
gSPDisplayList(gDisplayListHead++, common_square_plain_render);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
@@ -1601,11 +1604,11 @@ void func_80025DE8(Player *player, s8 playerId, s8 screenId, s8 arg3) {
);
gDPSetRenderMode(gDisplayListHead++, AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA));
gDPLoadTextureBlock(gDisplayListHead++, D_80164B08, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTextureBlock(gDisplayListHead++, sKartUpperTexture, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSPVertex(gDisplayListHead++, &D_800DDBB4[playerId][arg3], 4, 0);
gSPDisplayList(gDisplayListHead++, common_square_plain_render);
gDPLoadTextureBlock(gDisplayListHead++, D_80164B0C, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTextureBlock(gDisplayListHead++, sKartLowerTexture, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSPVertex(gDisplayListHead++, &D_800DDBB4[playerId][arg3 + 4], 4, 0);
gSPDisplayList(gDisplayListHead++, common_square_plain_render);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
@@ -1646,10 +1649,10 @@ void render_player_ice_reflection(Player *player, s8 playerId, s8 screenId, s8 a
(s16) player->unk_0C6 / 2
);
gDPSetRenderMode(gDisplayListHead++, G_RM_ZB_XLU_SURF, G_RM_ZB_XLU_SURF2);
gDPLoadTextureBlock(gDisplayListHead++, D_80164B08, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTextureBlock(gDisplayListHead++, sKartUpperTexture, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSPVertex(gDisplayListHead++, &D_800DDBB4[playerId][arg3], 4, 0);
gSPDisplayList(gDisplayListHead++, common_square_plain_render);
gDPLoadTextureBlock(gDisplayListHead++, D_80164B0C, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTextureBlock(gDisplayListHead++, sKartLowerTexture, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSPVertex(gDisplayListHead++, &D_800DDBB4[playerId][arg3 + 4], 4, 0);
gSPDisplayList(gDisplayListHead++, common_square_plain_render);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
@@ -1662,7 +1665,7 @@ void render_player(Player *player, s8 playerId, s8 screenId) {
s32 var_v1;
OSMesg *sp34;
func_80026B4C(player, playerId, screenId, D_801651D0[screenId][playerId]);
update_wheel_palette(player, playerId, screenId, D_801651D0[screenId][playerId]);
if (!(player->unk_002 & (4 << (screenId * 4)))) {
var_v1 = 0;
} else {
@@ -1717,14 +1720,14 @@ void func_80026A48(Player *player, s8 arg1) {
// Properly define struct pointers, see buffers.h comment for more information.
#ifdef AVOID_UB
#define D_802F1F80_WHEEL(a, b, c) &D_802F1F80[a][b][c].wheel_palette
#define D_802F1F80_WHEEL(a, b, c) &gPlayerPalettesList[a][b][c].wheel_palette
#else
#define D_802F1F80_WHEEL(a, b, c) &D_802F1F80[a][b][(c * 0x100) + 0xC0]
#define D_802F1F80_WHEEL(a, b, c) &gPlayerPalettesList[a][b][(c * 0x100) + 0xC0]
#endif
void func_80026B4C(Player *player, s8 playerId, s8 screenId, s8 arg3) {
s16 temp_t0 = D_801650D0[screenId][playerId];
s16 temp_t1 = D_80165110[screenId][playerId];
void update_wheel_palette(Player *player, s8 playerId, s8 screenId, s8 arg3) {
s16 frameId = gLastAnimFrameSelector[screenId][playerId];
s16 groupId = gLastAnimGroupSelector[screenId][playerId];
s16 temp_t2 = player->unk_240;
s16 temp_num = 0x40; // setting this as a variable gets rid of regalloc
@@ -1733,16 +1736,16 @@ void func_80026B4C(Player *player, s8 playerId, s8 screenId, s8 arg3) {
&& ((player->effects & 0x20000) != 0x20000) && ((player->effects & 0x80000) != 0x80000)
&& ((player->effects & 0x800000) != 0x800000) && ((player->unk_044 & 0x800) == 0)) {
if (temp_t0 <= 20) {
func_80027C74(player, (s32) (D_800DDE34[player->characterId][temp_t1] + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
if (frameId <= 20) {
load_player_data_non_blocking(player, (s32) (gKartWheels0[player->characterId][groupId] + (frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
} else {
func_80027C74(player, (s32) (D_800DDE54[player->characterId][temp_t1] + (temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
load_player_data_non_blocking(player, (s32) (gKartWheels1[player->characterId][groupId] + (frameId - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
}
} else {
if (temp_t0 == 0) {
func_80027C74(player, (s32) (D_800DDE34[player->characterId][temp_t1] + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
if (frameId == 0) {
load_player_data_non_blocking(player, (s32) (gKartWheels0[player->characterId][groupId] + (frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
} else {
func_80027C74(player, (s32) (D_800DDE54[player->characterId][temp_t1] + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
load_player_data_non_blocking(player, (s32) (gKartWheels1[player->characterId][groupId] + (frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
}
}
} else {
@@ -1750,16 +1753,16 @@ void func_80026B4C(Player *player, s8 playerId, s8 screenId, s8 arg3) {
&& ((player->effects & 0x80000) != 0x80000) && ((player->effects & 0x800000) != 0x800000)
&& ((player->effects & 0x20000) != 0x20000) && ((player->unk_044 & 0x800) == 0)) {
if (temp_t0 <= 20) {
func_80027C74(player, (s32) (D_800DDE34[player->characterId][temp_t1] + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
if (frameId <= 20) {
load_player_data_non_blocking(player, (s32) (gKartWheels0[player->characterId][groupId] + (frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
} else {
func_80027C74(player, (s32) (D_800DDE54[player->characterId][temp_t1] + (temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
load_player_data_non_blocking(player, (s32) (gKartWheels1[player->characterId][groupId] + (frameId - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
}
} else {
if (temp_t0 == 0) {
func_80027C74(player, (s32) (D_800DDE34[player->characterId][temp_t1] + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
if (frameId == 0) {
load_player_data_non_blocking(player, (s32) (gKartWheels0[player->characterId][groupId] + (frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
} else {
func_80027C74(player, (s32) (D_800DDE54[player->characterId][temp_t1] + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
load_player_data_non_blocking(player, (s32) (gKartWheels1[player->characterId][groupId] + (frameId * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80);
}
}
}
+14 -14
View File
@@ -14,10 +14,10 @@ void func_8001F9E4(Player*, Camera*, s8);
u16 check_player_camera_collision(Player*, Camera*, f32, f32);
u16 func_8001FD78(Player*, f32, f32, f32);
void init_render_player(Player*, Camera*, s8, s8);
void func_80020524(void);
void func_8002088C(void);
void func_80020BF4(void);
void func_80020F1C(void);
void load_kart_texture_and_render_kart_particle_on_screen_one(void);
void load_kart_texture_and_render_kart_particle_on_screen_two(void);
void load_kart_texture_and_render_kart_particle_on_screen_three(void);
void load_kart_texture_and_render_kart_particle_on_screen_four(void);
void try_rendering_player(Player*, s8, s8);
void render_players_on_screen_one(void);
void render_players_on_screen_two(void);
@@ -60,7 +60,7 @@ void func_80025DE8(Player*, s8, s8, s8);
void render_player_ice_reflection(Player*, s8, s8, s8);
void render_player(Player*, s8, s8);
void func_80026A48(Player*, s8);
void func_80026B4C(Player*, s8, s8, s8);
void update_wheel_palette(Player*, s8, s8, s8);
void func_80030A34(Player*);
void func_8002701C(void);
void func_80027024(s32, s32, s32);
@@ -68,14 +68,14 @@ void func_80027024(s32, s32, s32);
/* This is where I'd put my static data, if I had any */
extern struct_D_802F1F80 *gPlayerPalette;
extern u8 *D_80164B08;
extern u8 *D_80164B0C;
extern u8 *sKartUpperTexture;
extern u8 *sKartLowerTexture;
extern s32 D_80164A28;
extern s16 D_80164AB0[];
extern s16 gPlayersToRenderPlayerId[];
extern s16 D_80164ABE[];
extern s16 D_80164AC0[];
extern Player *D_80164AD0[];
extern s16 gPlayersToRenderScreenId[];
extern Player *gPlayersToRenderPlayer[];
extern s16 gMatrixEffectCount;
extern u16 gPlayerRedEffect[];
extern u16 gPlayerGreenEffect[];
@@ -129,8 +129,8 @@ extern u8 **gKartWarioWheels0[];
extern u8 **gKartWarioWheels1[];
extern u16 **D_800DDE34[];
extern u16 **D_800DDE54[];
extern u16 **gKartWheels0[];
extern u16 **gKartWheels1[];
// These all come the kart data stuff, they should end up in their own inc.c eventually
@@ -281,8 +281,8 @@ extern u8 *gKartWario189Wheel0[];
extern s16 D_80165020[40];
extern Vec3f D_80165070[8];
extern s16 D_801650D0[4][8];
extern s16 D_80165110[4][8];
extern s16 gLastAnimFrameSelector[4][8];
extern s16 gLastAnimGroupSelector[4][8];
extern s16 D_80165150[4][8];
extern s16 D_80165190[4][8];
extern s16 D_801651D0[4][8];
+12 -12
View File
@@ -250,14 +250,14 @@ void spawn_player(Player *player, s8 playerIndex, f32 startingRow, f32 startingC
idx = playerIndex;
D_801650D0[0][idx] = 0;
D_801650D0[1][idx] = 0;
D_801650D0[2][idx] = 0;
D_801650D0[3][idx] = 0;
D_80165110[0][idx] = 0;
D_80165110[1][idx] = 0;
D_80165110[2][idx] = 0;
D_80165110[3][idx] = 0;
gLastAnimFrameSelector[0][idx] = 0;
gLastAnimFrameSelector[1][idx] = 0;
gLastAnimFrameSelector[2][idx] = 0;
gLastAnimFrameSelector[3][idx] = 0;
gLastAnimGroupSelector[0][idx] = 0;
gLastAnimGroupSelector[1][idx] = 0;
gLastAnimGroupSelector[2][idx] = 0;
gLastAnimGroupSelector[3][idx] = 0;
D_80165190[0][idx] = 0;
D_80165190[1][idx] = 0;
D_80165190[2][idx] = 0;
@@ -1080,16 +1080,16 @@ void func_8003CD98(Player *player, Camera *camera, s8 playerId, s8 screenId) {
load_kart_palette(player, playerId, screenId, 0);
load_kart_palette(player, playerId, screenId, 1);
load_kart_texture(player, playerId, screenId, screenId, 0);
mio0decode((u8 *) &D_802DFB80[0][screenId][playerId], (u8 *) &D_802BFB80.arraySize8[0][screenId][playerId]);
mio0decode((u8 *) &gEncodedKartTexture[0][screenId][playerId], (u8 *) &D_802BFB80.arraySize8[0][screenId][playerId]);
} else {
load_kart_palette(player, playerId, screenId, 0);
load_kart_palette(player, playerId, screenId, 1);
load_kart_texture(player, (s8) (playerId + 4), screenId, (s8) (screenId - 2), 0);
mio0decode((u8 *) &D_802DFB80[0][screenId - 2][playerId + 4], (u8 *) &D_802BFB80.arraySize8[0][screenId - 2][playerId + 4]);
mio0decode((u8 *) &gEncodedKartTexture[0][screenId - 2][playerId + 4], (u8 *) &D_802BFB80.arraySize8[0][screenId - 2][playerId + 4]);
}
D_801650D0[screenId][playerId] = player->animFrameSelector[screenId];
D_80165110[screenId][playerId] = player->animGroupSelector[screenId];
gLastAnimFrameSelector[screenId][playerId] = player->animFrameSelector[screenId];
gLastAnimGroupSelector[screenId][playerId] = player->animGroupSelector[screenId];
D_80165150[screenId][playerId] = player->unk_0A8;
D_801651D0[screenId][playerId] = 0;
render_player(player, playerId, screenId);