diff --git a/src/buffers.h b/src/buffers.h index 66f58ad1a..f9b6a535e 100644 --- a/src/buffers.h +++ b/src/buffers.h @@ -36,8 +36,8 @@ typedef union { * Likely over-sized due to encoded textures having variable size */ typedef struct { - char unk_00[0x920]; -} struct_D_802DFB80; // size = 0x920 + const char *unk_00; // Original 0x920 because compressed. But no longer compressed. +} struct_D_802DFB80; // size = 0x1000 typedef struct { u16 red:5; diff --git a/src/code_80057C60.c b/src/code_80057C60.c index ed29a3ef0..ff56d0e90 100644 --- a/src/code_80057C60.c +++ b/src/code_80057C60.c @@ -5228,12 +5228,12 @@ void func_80067604(Player *player, UNUSED s8 arg1, s16 arg2, s8 arg3) { func_800652D4(sp8C, sp84, player->unk_258[30 + arg2].unk_00C * player->size); if (player->unk_258[30 + arg2].unk_010 == 1) { gSPDisplayList(gDisplayListHead++, D_0D008DB8); - gDPLoadTextureBlock(gDisplayListHead++, common_texture_particle_spark, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock(gDisplayListHead++, common_texture_particle_spark[0], G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); func_8004B72C(0x000000FF, 0x000000FF, 0x000000DF, 0x000000FF, 0x0000005F, 0, 0x00000060); gSPDisplayList(gDisplayListHead++, D_0D008E70); } else { gSPDisplayList(gDisplayListHead++, D_0D008DB8); - gDPLoadTextureBlock(gDisplayListHead++, common_texture_particle_spark, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock(gDisplayListHead++, common_texture_particle_spark[0], G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); func_8004B72C(0x000000FF, 0x000000FF, 0x000000DF, 0x000000FF, 0x0000005F, 0, 0x00000060); gSPDisplayList(gDisplayListHead++, D_0D008E48); } diff --git a/src/code_80091750.c b/src/code_80091750.c index 2a2ac9f95..c19670ae3 100644 --- a/src/code_80091750.c +++ b/src/code_80091750.c @@ -1401,7 +1401,8 @@ void func_80091B78(void) { D_8018EDF5 = 5; D_8018EDF6 = 10; if (osEepromProbe(&gSIEventMesgQueue) != 0) { - load_save_data(); + // save data disabled for now due to array overflow + //load_save_data(); } if (func_80091D74() != 0) { gMenuSelection = CONTROLLER_PAK_MENU; @@ -1638,19 +1639,29 @@ void func_80092290(s32 arg0, s32 *arg1, s32 *arg2) { } //vtx = (Vtx *) segmented_to_virtual_dupe_2(&v1[0]); + temp_v1 = (*arg1 * 2) + 2; + //! @bug vtx array overflow temp fix + if ((vtx+temp_v1) >= 54) { + return; + } temp_t6 = (vtx+temp_v1)->v.cn[0] * (256 - *arg2); temp_t9 = (vtx+temp_v1)->v.cn[1] * (256 - *arg2); temp_t7 = (vtx+temp_v1)->v.cn[2] * (256 - *arg2); temp_t8_2 = (vtx+temp_v1)->v.cn[3] * (256 - *arg2); + temp_v1 = (((*arg1 * 2) + 2) % 6) + 2; a = ((vtx+temp_v1)->v.cn[0] * *arg2); b = ((vtx+temp_v1)->v.cn[1] * *arg2); c = ((vtx+temp_v1)->v.cn[2] * *arg2); d = ((vtx+temp_v1)->v.cn[3] * *arg2); + //! @bug vtx array overflow temp fix + if ((vtx+idx) >= 54) { + return; + } (vtx+idx)->v.cn[0] = (temp_t6 + a) / 256; (vtx+idx)->v.cn[1] = (temp_t9 + b) / 256; @@ -3606,7 +3617,7 @@ void func_80099184(MkTexture *arg0) while (var_s1->textureData != NULL) { var_a1 = 0; for (var_v0 = 0; var_v0 < gNumD_8018E118Entries; var_v0++) { - if ( var_s1->textureData == (thing+var_v0)->textureData) { + if (var_s1->textureData == (thing+var_v0)->textureData) { var_a1 = 1; break; } @@ -3624,10 +3635,13 @@ void func_80099184(MkTexture *arg0) } //dma_copy_base_729a30(var_s1->textureData, var_a1_2, D_8018D9B4); //mio0decode(D_8018D9B4, &D_8018D9B0[gD_8018E118TotalSize]); - memcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData, var_a1_2); + //size_t texSize = ResourceGetTexSizeByName(var_s1->textureData); + //memcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData, texSize); + strcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData); } else { //dma_copy_base_729a30(var_s1->textureData, (var_s1->height * var_s1->width) * 2, &D_8018D9B0[gD_8018E118TotalSize]); - memcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData, var_s1->width * var_s1->height*2); + //memcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData, var_s1->width * var_s1->height*2); + strcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData); } thing[gNumD_8018E118Entries].textureData = var_s1->textureData; thing[gNumD_8018E118Entries].offset = gD_8018E118TotalSize; @@ -3744,7 +3758,7 @@ void func_800996BC(MkTexture *arg0, s32 arg1) { s32 var_a1; u8 var_v0_2; MkTexture *texture; - struct_8018E118_entry *thing; + struct_8018E118_entry *thing = &D_8018E118[0]; texture = segmented_to_virtual_dupe(arg0); @@ -3759,8 +3773,7 @@ void func_800996BC(MkTexture *arg0, s32 arg1) { while (texture->textureData != NULL) { var_a1 = 0; for (var_v0 = 0; var_v0 < gNumD_8018E118Entries; var_v0++) { - // wtf is going on here? - if (D_8018E118[var_v0].textureData == (*texture).textureData) { + if (texture->textureData == (thing+var_v0)->textureData) { var_a1 = 1; break; } @@ -3807,10 +3820,8 @@ void func_800996BC(MkTexture *arg0, s32 arg1) { break; } - thing = &D_8018E118[gNumD_8018E118Entries]; - thing->textureData = texture->textureData; - thing = &D_8018E118[gNumD_8018E118Entries]; - thing->offset = gD_8018E118TotalSize; + thing[gNumD_8018E118Entries].textureData = texture->textureData; + thing[gNumD_8018E118Entries].offset = gD_8018E118TotalSize; gD_8018E118TotalSize += texture->height * texture->width; gD_8018E118TotalSize = ((gD_8018E118TotalSize / 8) * 8) + 8; gNumD_8018E118Entries += 1; @@ -10093,19 +10104,27 @@ void func_800AAE18(struct_8018D9E0_entry *arg0) { * is found. **/ struct_8018D9E0_entry *func_800AAE68(void) { - struct_8018D9E0_entry *entry = D_8018D9E0; - s32 thing = gPlayerCount - 1; - - for(; !(entry > &D_8018D9E0[D_8018D9E0_SIZE]); entry++) { - if ((thing + 0xB) == entry->type) { - goto escape; + s32 count = gPlayerCount - 1; + for (size_t i = 0; i < ARRAY_COUNT(D_8018D9E0); i++) { + if (D_8018D9E0[i].type == (count + 0xB)) { + return &D_8018D9E0[i]; } } + printf("Error: func_800AAE68 returned a null value when searching id 0x%X", count+0xB); + return NULL; +// struct_8018D9E0_entry *entry = D_8018D9E0; +// s32 thing = gPlayerCount - 1; - // Something VERY wrong has occurred - while(true); -escape: - return entry; +// for(; !(entry > &D_8018D9E0[D_8018D9E0_SIZE]); entry++) { +// if ((thing + 0xB) == entry->type) { +// goto escape; +// } +// } + +// // Something VERY wrong has occurred +// while(true); +// escape: +// return entry; } /** @@ -10114,18 +10133,27 @@ escape: * is found. **/ struct_8018D9E0_entry *func_800AAEB4(s32 arg0) { - struct_8018D9E0_entry *entry = D_8018D9E0; - for(; !(entry > &D_8018D9E0[D_8018D9E0_SIZE]); entry++) { - if ((arg0 + 0x2B) == entry->type) { - goto escape; + for (size_t i = 0; i < ARRAY_COUNT(D_8018D9E0); i++) { + if (D_8018D9E0[i].type == (arg0 + 0x2B)) { + return &D_8018D9E0[i]; } } + printf("Error: func_800AAEB4 returned a null value when searching id 0x%X", arg0+0x2B); + return NULL; - // Something VERY wrong has occurred - while(true); -escape: - return entry; +// struct_8018D9E0_entry *entry = D_8018D9E0; + +// for(; !(entry > &D_8018D9E0[D_8018D9E0_SIZE]); entry++) { +// if ((arg0 + 0x2B) == entry->type) { +// goto escape; +// } +// } + +// // Something VERY wrong has occurred +// while(true); +// escape: +// return entry; } /** @@ -10140,10 +10168,11 @@ escape: **/ struct_8018D9E0_entry *find_8018D9E0_entry_dupe(s32 arg0) { for (size_t i = 0; i < ARRAY_COUNT(D_8018D9E0); i++) { - if (&D_8018D9E0[i].type == arg0) { + if (D_8018D9E0[i].type == arg0) { return &D_8018D9E0[i]; } } + printf("Error: find_8018D9E0_entry_dupe returned a null value when searching id 0x%X", arg0); return NULL; @@ -10162,10 +10191,13 @@ struct_8018D9E0_entry *find_8018D9E0_entry_dupe(s32 arg0) { struct_8018D9E0_entry *find_8018D9E0_entry(s32 arg0) { for (size_t i = 0; i < ARRAY_COUNT(D_8018D9E0); i++) { - if (&D_8018D9E0[i].type == arg0) { + if (D_8018D9E0[i].type == arg0) { return &D_8018D9E0[i]; } } + // No printf here as returning null seems to be normal game logic + //printf("Error: find_8018D9E0_entry returned a null value when searching id 0x%X", + // arg0); return NULL; // struct_8018D9E0_entry *entry = D_8018D9E0; diff --git a/src/kart_dma.c b/src/kart_dma.c index cc329c7ab..51235b2e7 100644 --- a/src/kart_dma.c +++ b/src/kart_dma.c @@ -1704,15 +1704,9 @@ u8 *gKartPalettes[] = { **/ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s8 zero) { s32 temp = player->effects; - u8 *texture; - u8 *asset; - size_t size = 0; 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[zero][screenId2][playerId], D_800DDEB0[player->characterId]); - - - texture = gKartTextureTable1[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]; // osPiStartDma( // &gDmaIoMesg, // OS_MESG_PRI_NORMAL, OS_READ, @@ -1724,12 +1718,7 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s // &gDmaMesgQueue // ); //printf("T1 kart %s\n", texture); - - //return gKartTextureTable1[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]; - size = ResourceGetTexSizeByName(texture); - asset = (u8 *) LOAD_ASSET(texture); - memcpy(&D_802DFB80[zero][screenId2][playerId], asset, 0x1000); - + D_802DFB80[zero][screenId2][playerId].unk_00 = gKartTextureTable1[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]; //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } else { osInvalDCache(&D_802DFB80[zero][screenId2][playerId], D_800DDEB0[player->characterId]); @@ -1745,12 +1734,7 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s // D_800DDEB0[player->characterId], // &gDmaMesgQueue // ); - - texture = gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]; - size = ResourceGetTexSizeByName(texture); - //printf("T0 kart %s\n",texture); - asset = (u8 *) LOAD_ASSET(texture); - memcpy(&D_802DFB80[zero][screenId2][playerId], asset, 0x1000); + D_802DFB80[zero][screenId2][playerId].unk_00 = gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]; //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } } else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) { @@ -1767,12 +1751,7 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s // 0x900, // &gDmaMesgQueue // ); - texture = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8]; - //printf("Tum Kart %s\n",texture); - size = ResourceGetTexSizeByName(texture); - asset = (u8 *) LOAD_ASSET(texture); - memcpy(&D_802DFB80[zero][screenId2][playerId], asset, 0x1000); - + D_802DFB80[zero][screenId2][playerId].unk_00 = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8]; osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } else { osInvalDCache(&D_802DFB80[zero][screenId2][playerId], D_800DDEB0[player->characterId]); @@ -1786,24 +1765,15 @@ void load_kart_texture(Player *player, s8 playerId, s8 screenId, s8 screenId2, s // )], // &D_802DFB80[arg4][arg3][playerId], // D_800DDEB0[player->characterId], - // &gDmaMesgQueue + // &gDmaMesgQueue // ); - - texture = gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]; - //printf("T0 kart 2 %s\n", texture); - size = ResourceGetTexSizeByName(texture); - asset = (u8 *) LOAD_ASSET(texture); - memcpy(&D_802DFB80[zero][screenId2][playerId], asset, 0x1000); - + D_802DFB80[zero][screenId2][playerId].unk_00 = gKartTextureTable0[player->characterId][player->animGroupSelector[screenId]][player->animFrameSelector[screenId]]; //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } } void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4, size_t i) { s32 temp = player->effects; - u8 *asset; - u8 *texture; - size_t size; if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) { @@ -1821,14 +1791,7 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4, size_t i) // D_800DDEB0[player->characterId], // &gDmaMesgQueue // ); - - texture = gKartTextureTable1[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]; - //printf("T1 kart 2 %s\n", texture); - size = ResourceGetTexSizeByName(texture); - asset = (u8 *) LOAD_ASSET(texture); - memcpy(&D_802DFB80[arg4][arg3][arg1], - asset, size); - + D_802DFB80[arg4][arg3][arg1].unk_00 = gKartTextureTable1[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]; } else { osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); @@ -1843,11 +1806,7 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4, size_t i) // D_800DDEB0[player->characterId], // &gDmaMesgQueue // ); - texture = gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]; - //printf("T0 kart 3 %s\n", texture); - size = ResourceGetTexSizeByName(texture); - asset = (u8 *) LOAD_ASSET(texture); - memcpy(&D_802DFB80[arg4][arg3][arg1], asset, size); + D_802DFB80[arg4][arg3][arg1].unk_00 = gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]; } } else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) @@ -1865,11 +1824,7 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4, size_t i) // 0x900, // &gDmaMesgQueue // ); - texture = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8]; - //printf("Tum kart 2 %s\n", texture); - size = ResourceGetTexSizeByName(texture); - asset = (u8 *) LOAD_ASSET(texture); - memcpy(&D_802DFB80[arg4][arg3][arg1], asset, size); + D_802DFB80[arg4][arg3][arg1].unk_00 = gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8]; } else { osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); @@ -1884,11 +1839,7 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4, size_t i) // D_800DDEB0[player->characterId], // &gDmaMesgQueue // ); - texture = gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]; - //printf("T0 kart 4 %s 0x%llX\n", texture, &D_802DFB80[arg4][arg3][arg1]); - size = ResourceGetTexSizeByName(texture); - asset = (u8 *) LOAD_ASSET(texture); - memcpy(&D_802DFB80[arg4][arg3][arg1], asset, size); + D_802DFB80[arg4][arg3][arg1].unk_00 = gKartTextureTable0[player->characterId][player->animGroupSelector[arg2]][player->animFrameSelector[arg2]]; } } @@ -1982,6 +1933,6 @@ void func_80027C74(UNUSED Player *player, u8 *texture, void *vAddr, u16 size) { // ); //printf("test %s\n",texture); - //size_t textureSize = ResourceGetTexSizeByName(texture); - memcpy(vAddr, texture, size); + //size_t textureSize = ResourceGetTexSizeByName(texture); + memcpy(vAddr, texture, size); } diff --git a/src/racing/memory.c b/src/racing/memory.c index 8d9a557a8..d984d64a8 100644 --- a/src/racing/memory.c +++ b/src/racing/memory.c @@ -1521,10 +1521,10 @@ u8 *load_lakitu_textures_x64(const char** textureList, size_t length) { gNextFreeMemoryAddress += size; size_t offset = 0; for (size_t i = 0; i < length; i++) { - //u8 *tex = (u8 *) LOAD_ASSET(textureList[i]); + u8 *tex = (u8 *) LOAD_ASSET(textureList[i]); size_t texSize = ResourceGetTexSizeByName(textureList[i]); - printf("\nTEX SIZE: %X\n\n", texSize); - memcpy(&textures[offset], textureList[i], texSize); + //printf("\nTEX SIZE: %X\n\n", texSize); + memcpy(&textures[offset], tex, texSize); offset += texSize; } return textures; diff --git a/src/render_objects.c b/src/render_objects.c index d461599bb..6d454b508 100644 --- a/src/render_objects.c +++ b/src/render_objects.c @@ -4207,7 +4207,7 @@ void func_800562E4(s32 arg0, s32 arg1, s32 arg2) { D_80165878 = A_800E46F8[arg0][2]; func_8004B138(D_80165860, D_8016586C, D_80165878, arg2); rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.2f); - func_80044BF8(common_texture_particle_spark[arg1], 0x00000020, 0x00000020); + func_80044BF8(common_texture_particle_spark[arg1], 32, 32); gSPVertex(gDisplayListHead++, D_0D005AE0, 4, 0); gSPDisplayList(gDisplayListHead++, common_rectangle_display); } diff --git a/src/render_player.c b/src/render_player.c index 62f65cdb9..0517a50a7 100644 --- a/src/render_player.c +++ b/src/render_player.c @@ -49,8 +49,8 @@ Player *D_80164AD0[8]; s16 gMatrixEffectCount; s32 D_80164AF4[3]; struct_D_802F1F80 *gPlayerPalette; -u8 *D_80164B08; -u8 *D_80164B0C; +static const char *sKartUpperTexture; +static const char *sKartLowerTexture; u16 gPlayerRedEffect[8]; u16 gPlayerGreenEffect[8]; u16 gPlayerBlueEffect[8]; @@ -281,17 +281,21 @@ void func_80020524(void) { //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); - memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array, - D_802DFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].unk_00, 0x1000); + // memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array, + // D_802DFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].unk_00, 0x1000); + strcpy(D_802BFB80.arraySize8[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[i - 1]][D_80164AB0[i - 1]]][D_80164AC0[i - 1]][D_80164AB0[i - 1]].unk_00); + //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); - memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array, - D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00, 0x1000); + // memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array, + // D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00, 0x1000); + + strcpy(D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00); } @@ -314,17 +318,20 @@ void func_8002088C(void) { //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); - memcpy(&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, - 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, 0x1000); + // memcpy(&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, + // 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, 0x1000); + + strcpy(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, 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); //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } //func_80027560(D_80164AD0[0], D_80164AB0[0], D_80164AC0[0], D_80164AC0[0], D_801651D0[D_80164AC0[0]][D_80164AB0[0]], 0); //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); - memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array, - D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00, 0x1000); + // memcpy(&D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array, + // D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00, 0x1000); + strcpy(D_802BFB80.arraySize8[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].pixel_index_array, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]].unk_00); } void func_80020BF4(void) { @@ -341,17 +348,19 @@ void func_80020BF4(void) { // 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); - memcpy((u8*) &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, - 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, 0x1000); - + // memcpy((u8*) &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, + // 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, 0x1000); + strcpy(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, 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); // osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } //func_80027560(D_80164AD0[0], D_80164AB0[0] + 4, D_80164AC0[0], D_80164AC0[0] - 2, D_801651D0[D_80164AC0[0]][D_80164AB0[0]], 0); //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); - memcpy((u8*) &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, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00, 0x1000); + // memcpy((u8*) &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, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00, 0x1000); + + strcpy(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, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00); } void func_80020F1C(void) { @@ -369,14 +378,15 @@ void func_80020F1C(void) { // osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); - memcpy((u8*) &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, 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,0x1000); - + //memcpy((u8*) &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, 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,0x1000); + strcpy(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, 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); } //func_80027560(D_80164AD0[0], D_80164AB0[0] + 4, D_80164AC0[0], D_80164AC0[0] - 2, D_801651D0[D_80164AC0[0]][D_80164AB0[0]], 0); // 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); - memcpy((u8*) &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, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00, 0x1000); + //memcpy((u8*) &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, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00, 0x1000); + strcpy(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, D_802DFB80[D_801651D0[D_80164AC0[gPlayersToRenderCount-1]][D_80164AB0[gPlayersToRenderCount-1]]][D_80164AC0[gPlayersToRenderCount-1] - 2][D_80164AB0[gPlayersToRenderCount-1] + 4].unk_00); } void try_render_player(Player *player, s8 playerId, s8 arg2) { @@ -1410,7 +1420,7 @@ void render_player_shadow_credits(Player *player, s8 playerId, s8 arg2) { gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); } -void kart_render(Player *player, s8 playerId, s8 arg2, s8 arg3) { +void kart_render(Player *player, s8 playerId, s8 screenId, s8 arg3) { UNUSED s32 pad; Mat4 sp1A4; UNUSED s32 pad2[17]; @@ -1424,53 +1434,53 @@ void kart_render(Player *player, s8 playerId, s8 arg2, s8 arg3) { if (player->unk_044 & 0x2000) { sp14C[0] = 0; - sp14C[1] = player->unk_048[arg2]; + sp14C[1] = player->unk_048[screenId]; sp14C[2] = 0; - func_80062B18(&sp148, &sp144, &sp140, 0.0f, 1.5f, 0.0f, -player->unk_048[arg2], player->unk_050[arg2]); + func_80062B18(&sp148, &sp144, &sp140, 0.0f, 1.5f, 0.0f, -player->unk_048[screenId], player->unk_050[screenId]); sp154[1] = (player->pos[1] - player->boundingBoxSize) + (sp144 - 2.0); sp154[0] = player->pos[0] + sp148; sp154[2] = player->pos[2] + sp140; } else { - thing = (u16)(player->unk_048[arg2] + player->rotation[1] + player->unk_0C0); - temp_v1 = player->unk_0CC[arg2] * sins(thing); + thing = (u16)(player->unk_048[screenId] + player->rotation[1] + player->unk_0C0); + temp_v1 = player->unk_0CC[screenId] * sins(thing); if ((player->effects & 8) == 8) { - sp14C[0] = cameras[arg2].rot[0] - 0x4000; + sp14C[0] = cameras[screenId].rot[0] - 0x4000; } else { sp14C[0] = -temp_v1 * 0.8; } - sp14C[1] = player->unk_048[arg2]; - sp14C[2] = player->unk_050[arg2]; + sp14C[1] = player->unk_048[screenId]; + sp14C[2] = player->unk_050[screenId]; if (((s32)player->effects & HIT_EFFECT) == HIT_EFFECT) { - func_80062B18(&sp148, &sp144, &sp140, 0.0f, 8.0f, 0.0f, -player->unk_048[arg2], player->unk_050[arg2]); + func_80062B18(&sp148, &sp144, &sp140, 0.0f, 8.0f, 0.0f, -player->unk_048[screenId], player->unk_050[screenId]); sp154[1] = (player->pos[1] - player->boundingBoxSize) + player->unk_108; sp154[0] = player->pos[0] + sp148; sp154[2] = player->pos[2] + sp140; } else { - func_80062B18(&sp148, &sp144, &sp140, 0.0f, 1.5f, 0.0f, -player->unk_048[arg2], player->unk_050[arg2]); + func_80062B18(&sp148, &sp144, &sp140, 0.0f, 1.5f, 0.0f, -player->unk_048[screenId], player->unk_050[screenId]); sp154[1] = (player->pos[1] - player->boundingBoxSize) + player->unk_108 + (sp144 - 2.0); sp154[0] = player->pos[0] + sp148; sp154[2] = player->pos[2] + sp140; } } #ifdef AVOID_UB - gPlayerPalette = &D_802F1F80[D_801651D0[arg2][playerId]][arg2][playerId]; + gPlayerPalette = &D_802F1F80[D_801651D0[screenId][playerId]][screenId][playerId]; #else - gPlayerPalette = (struct_D_802F1F80 *) &D_802F1F80[D_801651D0[arg2][playerId]][arg2][playerId * 0x100]; + gPlayerPalette = (struct_D_802F1F80 *) &D_802F1F80[D_801651D0[screenId][playerId]][screenId][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]; + if ((screenId == 0) || (screenId == 1)) { + sKartUpperTexture = D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId][playerId].pixel_index_array; + //sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId][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[screenId][playerId]][screenId - 1][playerId - 4].pixel_index_array; + //sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[screenId][playerId]][screenId - 1][playerId - 4].pixel_index_array[0x7C0]; } mtxf_translate_rotate(sp1A4, sp154, sp14C); mtxf_scale2(sp1A4, gCharacterSize[player->characterId] * player->size); - convert_to_fixed_point_matrix(&gGfxPool->mtxKart[playerId + (arg2 * 8)], sp1A4); + convert_to_fixed_point_matrix(&gGfxPool->mtxKart[playerId + (screenId * 8)], sp1A4); if ((player->effects & BOO_EFFECT) == BOO_EFFECT) { - if (arg2 == playerId) { - gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxKart[playerId + (arg2 * 8)]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + if (screenId == playerId) { + gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxKart[playerId + (screenId * 8)]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(gDisplayListHead++, common_setting_render_character); gDPLoadTLUT_pal256(gDisplayListHead++, gPlayerPalette); gDPSetTextureLUT(gDisplayListHead++, G_TT_RGBA16); @@ -1485,7 +1495,7 @@ void kart_render(Player *player, s8 playerId, s8 arg2, 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)); } else { - gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxKart[playerId + (arg2 * 8)]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxKart[playerId + (screenId * 8)]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(gDisplayListHead++, common_setting_render_character); gDPLoadTLUT_pal256(gDisplayListHead++, gPlayerPalette); gDPSetTextureLUT(gDisplayListHead++, G_TT_RGBA16); @@ -1501,7 +1511,7 @@ void kart_render(Player *player, s8 playerId, s8 arg2, 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)); } } else if (((player->unk_0CA & 4) == 4) || (player->soundEffects & 0x08000000) || (player->soundEffects & 0x04000000)) { - gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxKart[playerId + (arg2 * 8)]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxKart[playerId + (screenId * 8)]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(gDisplayListHead++, common_setting_render_character); gDPLoadTLUT_pal256(gDisplayListHead++, gPlayerPalette); gDPSetTextureLUT(gDisplayListHead++, G_TT_RGBA16); @@ -1517,7 +1527,7 @@ void kart_render(Player *player, s8 playerId, s8 arg2, s8 arg3) { gDPSetAlphaCompare(gDisplayListHead++, G_AC_DITHER); gDPSetRenderMode(gDisplayListHead++, G_RM_ZB_XLU_SURF, G_RM_ZB_XLU_SURF2); } else { - gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxKart[playerId + (arg2 * 8)]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxKart[playerId + (screenId * 8)]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(gDisplayListHead++, common_setting_render_character); gDPLoadTLUT_pal256(gDisplayListHead++, gPlayerPalette); gDPSetTextureLUT(gDisplayListHead++, G_TT_RGBA16); @@ -1532,11 +1542,14 @@ void kart_render(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); + // Render heads + 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); + // Render karts + u8 *test = (u8 *)LOAD_ASSET(sKartUpperTexture); + gDPLoadTextureBlock(gDisplayListHead++, test+0x7C0, 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); @@ -1576,11 +1589,11 @@ void ghost_render(Player *player, s8 playerId, s8 arg2, s8 arg3) { gPlayerPalette = (struct_D_802F1F80 *) &D_802F1F80[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; + //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; + //sKartLowerTexture = &D_802BFB80.arraySize8[D_801651D0[arg2][playerId]][arg2 - 1][playerId - 4].pixel_index_array[0x7C0]; } mtxf_translate_rotate(sp12C, spDC, spD4); @@ -1602,11 +1615,12 @@ void ghost_render(Player *player, s8 playerId, s8 arg2, 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); + u8 *test = (u8 *)LOAD_ASSET(sKartUpperTexture); + gDPLoadTextureBlock(gDisplayListHead++, test+0x7C0, 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); @@ -1643,11 +1657,12 @@ void func_80025DE8(Player *player, s8 playerId, s8 arg2, 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); + u8 *test = (u8 *)LOAD_ASSET(sKartUpperTexture); + gDPLoadTextureBlock(gDisplayListHead++, test+0x7C0, 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); @@ -1688,10 +1703,12 @@ void player_ice_reflection_render(Player *player, s8 playerId, s8 arg2, s8 arg3) (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); + + u8 *test = (u8 *)LOAD_ASSET(sKartUpperTexture); + gDPLoadTextureBlock(gDisplayListHead++, test+0x7C0, 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); diff --git a/src/render_player.h b/src/render_player.h index 345ab2ae8..35b7b706b 100644 --- a/src/render_player.h +++ b/src/render_player.h @@ -68,8 +68,6 @@ 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 s32 D_80164A28; extern s16 D_80164AB0[]; diff --git a/src/spawn_players.c b/src/spawn_players.c index 4eb4732c2..7f1547f02 100644 --- a/src/spawn_players.c +++ b/src/spawn_players.c @@ -1087,13 +1087,15 @@ void func_8003CD98(Player *player, Camera *camera, s8 playerId, s8 screenId) { load_kart_palette(player, playerId, screenId, 1); load_kart_texture(player, playerId, screenId, screenId, 0); //mio0decode((u8 *) &D_802DFB80[0][arg3][playerId], (u8 *) &D_802BFB80.arraySize8[0][arg3][playerId]); - memcpy(&D_802BFB80.arraySize8[0][screenId][playerId], &D_802DFB80[0][screenId][playerId], 0x1000); + // This memcpy does not seem to be required for some reason + //memcpy(&D_802BFB80.arraySize8[0][screenId][playerId], &D_802DFB80[0][screenId][playerId], 0x1000); } 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][arg3 - 2][playerId + 4], (u8 *) &D_802BFB80.arraySize8[0][arg3 - 2][playerId + 4]); - memcpy(&D_802BFB80.arraySize8[0][screenId - 2][playerId + 4], &D_802DFB80[0][screenId - 2][playerId + 4], 0x1000); + // This memcpy does not seem to be required for some reason + //memcpy(&D_802BFB80.arraySize8[0][screenId - 2][playerId + 4], &D_802DFB80[0][screenId - 2][playerId + 4], 0x1000); } D_801650D0[screenId][playerId] = player->animFrameSelector[screenId]; diff --git a/yamls/us/common_data.yml b/yamls/us/common_data.yml index 8a90d43bf..8a773c16e 100644 --- a/yamls/us/common_data.yml +++ b/yamls/us/common_data.yml @@ -2126,6 +2126,7 @@ common_texture_particle_spark_2: offset: 0x2B058 width: 32 height: 32 + ctype: u8 type: texture format: i8 common_texture_particle_spark_3: @@ -2133,6 +2134,7 @@ common_texture_particle_spark_3: offset: 0x2B458 width: 32 height: 32 + ctype: u8 type: texture format: i8 common_texture_particle_spark_4: @@ -2140,6 +2142,7 @@ common_texture_particle_spark_4: offset: 0x2B858 width: 32 height: 32 + ctype: u8 type: texture format: i8 common_texture_particle_smoke_1: