From 8f2a92d486563fb48c1688cb69d783be8c3629a3 Mon Sep 17 00:00:00 2001 From: MegaMech Date: Sun, 11 Aug 2024 19:42:28 -0600 Subject: [PATCH] wip Fix wheels (#37) * Fix menu bug * Fix undefined behaviour * Fix kart textures * Fix boost texture * Rename as per review * Fix buffer overflows * Fix lakitu progress * Fix race starter character * wip fixes to kart wheels * Fix inaccuracy * improve wheels * Fix staff ghosts * course stuff * wip changes * Update kalimari_desert_displaylists.yml --- src/kart_dma.c | 11 +- src/render_player.c | 283 +++++++++++++--------- src/render_player.h | 36 +-- src/staff_ghosts.c | 15 +- yamls/us/bowser_kart.yml | 4 + yamls/us/donkeykong_kart.yml | 4 + yamls/us/kalimari_desert_data.yml | 84 ++----- yamls/us/kalimari_desert_displaylists.yml | 2 +- yamls/us/luigi_kart.yml | 4 + yamls/us/mario_kart.yml | 4 + yamls/us/peach_kart.yml | 4 + yamls/us/toad_kart.yml | 4 + yamls/us/wario_kart.yml | 4 + yamls/us/yoshi_kart.yml | 4 + 14 files changed, 266 insertions(+), 197 deletions(-) diff --git a/src/kart_dma.c b/src/kart_dma.c index fca054556..cfd88148b 100644 --- a/src/kart_dma.c +++ b/src/kart_dma.c @@ -1919,7 +1919,7 @@ void func_80027BDC(UNUSED Player *player, u8 *arg1, void *vAddr, u16 size) { //osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } -void func_80027C74(UNUSED Player *player, u8 *texture, void *vAddr, u16 size) { +void func_80027C74(UNUSED Player *player, const char *texture, void *vAddr, u16 size) { //osInvalDCache(vAddr, size); // osPiStartDma( @@ -1931,8 +1931,9 @@ void func_80027C74(UNUSED Player *player, u8 *texture, void *vAddr, u16 size) { // size, // &gDmaMesgQueue // ); - - //printf("test %s\n",texture); - //size_t textureSize = ResourceGetTexSizeByName(texture); - // memcpy(vAddr, texture, size); + u16 *tex = (u16 *) LOAD_ASSET(texture); + //printf("wheeltex: %s\n",texture); + size_t textureSize = ResourceGetTexSizeByName(texture); + //vAddr = texture; + memcpy(vAddr, tex, size); } diff --git a/src/render_player.c b/src/render_player.c index 52b78494e..39213a5e2 100644 --- a/src/render_player.c +++ b/src/render_player.c @@ -464,110 +464,144 @@ f32 gCharacterSize[] = { DK_SIZE, WARIO_SIZE, PEACH_SIZE, BOWSER_SIZE }; -u8 **gKartMarioWheels0[] = { - gKartMario168Wheel0, gKartMario147Wheel0, gKartMario126Wheel0, gKartMario105Wheel0, - gKartMario084Wheel0, gKartMario063Wheel0, gKartMario042Wheel0, gKartMario021Wheel0, - gKartMario000Wheel0 + +u32 gKartMarioWheels0[] = { 672, 588, 504, 420, 336, 252, 168, 84, 0 }; +u32 gKartMarioWheels1[] = { 1076, 1076, 996, 916, 916, 916, 836, 756, 756 }; + +u32 gKartLuigiWheels0[] = { 672, 588, 504, 420, 336, 252, 168, 84, 0 }; +u32 gKartLuigiWheels1[] = { 1076, 1076, 996, 916, 916, 916, 836, 756, 756 }; + +u32 gKartBowserWheels0[] = { 672, 588, 504, 420, 336, 252, 168, 84, 0 }; +u32 gKartBowserWheels1[] = { 1076, 1076, 996, 916, 916, 916, 836, 756, 756 }; + +u32 gKartToadWheels0[] = { 672, 588, 504, 420, 336, 252, 168, 84, 0 }; +u32 gKartToadWheels1[] = { 1076, 1076, 996, 916, 916, 916, 836, 756, 756 }; + +// Stopped doing this properly here and just copy pasted the below hoping it would work + +u32 gKartYoshiWheels0[] = { 672, 588, 504, 420, 336, 252, 168, 84, 0 }; +u32 gKartYoshiWheels1[] = { 1076, 1076, 996, 916, 916, 916, 836, 756, 756 }; + +u32 gKartDKWheels0[] = { 672, 588, 504, 420, 336, 252, 168, 84, 0 }; +u32 gKartDKWheels1[] = { 1076, 1076, 996, 916, 916, 916, 836, 756, 756 }; + +u32 gKartPeachWheels0[] = { 672, 588, 504, 420, 336, 252, 168, 84, 0 }; +u32 gKartPeachWheels1[] = { 1076, 1076, 996, 916, 916, 916, 836, 756, 756 }; + +u32 gKartWarioWheels0[] = { 672, 588, 504, 420, 336, 252, 168, 84, 0 }; +u32 gKartWarioWheels1[] = { 1076, 1076, 996, 916, 916, 916, 836, 756, 756 }; + + +// Replace the below ptrs with the indexes into mario_kart_wheels +// u8 **gKartMarioWheels0[] = { +// gKartMario168Wheel0, gKartMario147Wheel0, gKartMario126Wheel0, gKartMario105Wheel0, +// gKartMario084Wheel0, gKartMario063Wheel0, gKartMario042Wheel0, gKartMario021Wheel0, +// gKartMario000Wheel0 +// }; + +// u8 **gKartMarioWheels1[] = { +// gKartMario269Wheel0, gKartMario269Wheel0, gKartMario249Wheel0, gKartMario229Wheel0, +// gKartMario229Wheel0, gKartMario229Wheel0, gKartMario209Wheel0, gKartMario189Wheel0, +// gKartMario189Wheel0 +// }; + +// u8 **gKartLuigiWheels0[] = { +// gKartLuigi168Wheel0, gKartLuigi147Wheel0, gKartLuigi126Wheel0, gKartLuigi105Wheel0, +// gKartLuigi084Wheel0, gKartLuigi063Wheel0, gKartLuigi042Wheel0, gKartLuigi021Wheel0, +// gKartLuigi000Wheel0 +// }; + +// u8 **gKartLuigiWheels1[] = { +// gKartLuigi269Wheel0, gKartLuigi269Wheel0, gKartLuigi249Wheel0, gKartLuigi229Wheel0, +// gKartLuigi229Wheel0, gKartLuigi229Wheel0, gKartLuigi209Wheel0, gKartLuigi189Wheel0, +// gKartLuigi189Wheel0 +// }; + +// u8 **gKartBowserWheels0[] = { +// gKartBowser168Wheel0, gKartBowser147Wheel0, gKartBowser126Wheel0, gKartBowser105Wheel0, +// gKartBowser084Wheel0, gKartBowser063Wheel0, gKartBowser042Wheel0, gKartBowser021Wheel0, +// gKartBowser000Wheel0 +// }; + +// u8 **gKartBowserWheels1[] = { +// gKartBowser269Wheel0, gKartBowser269Wheel0, gKartBowser249Wheel0, gKartBowser229Wheel0, +// gKartBowser229Wheel0, gKartBowser229Wheel0, gKartBowser209Wheel0, gKartBowser189Wheel0, +// gKartBowser189Wheel0 +// }; + +// u8 **gKartToadWheels0[] = { +// gKartToad168Wheel0, gKartToad147Wheel0, gKartToad126Wheel0, gKartToad105Wheel0, +// gKartToad084Wheel0, gKartToad063Wheel0, gKartToad042Wheel0, gKartToad021Wheel0, +// gKartToad000Wheel0 +// }; + +// u8 **gKartToadWheels1[] = { +// gKartToad269Wheel0, gKartToad269Wheel0, gKartToad249Wheel0, gKartToad229Wheel0, +// gKartToad229Wheel0, gKartToad229Wheel0, gKartToad209Wheel0, gKartToad189Wheel0, +// gKartToad189Wheel0 +// }; + +// u8 **gKartYoshiWheels0[] = { +// gKartYoshi168Wheel0, gKartYoshi147Wheel0, gKartYoshi126Wheel0, gKartYoshi105Wheel0, +// gKartYoshi084Wheel0, gKartYoshi063Wheel0, gKartYoshi042Wheel0, gKartYoshi021Wheel0, +// gKartYoshi000Wheel0 +// }; + +// u8 **gKartYoshiWheels1[] = { +// gKartYoshi269Wheel0, gKartYoshi269Wheel0, gKartYoshi249Wheel0, gKartYoshi229Wheel0, +// gKartYoshi229Wheel0, gKartYoshi229Wheel0, gKartYoshi209Wheel0, gKartYoshi189Wheel0, +// gKartYoshi189Wheel0 +// }; + +// u8 **gKartDKWheels0[] = { +// gKartDK168Wheel0, gKartDK147Wheel0, gKartDK126Wheel0, gKartDK105Wheel0, +// gKartDK084Wheel0, gKartDK063Wheel0, gKartDK042Wheel0, gKartDK021Wheel0, +// gKartDK000Wheel0 +// }; + +// u8 **gKartDKWheels1[] = { +// gKartDK269Wheel0, gKartDK269Wheel0, gKartDK249Wheel0, gKartDK229Wheel0, +// gKartDK229Wheel0, gKartDK229Wheel0, gKartDK209Wheel0, gKartDK189Wheel0, +// gKartDK189Wheel0 +// }; + +// u8 **gKartPeachWheels0[] = { +// gKartPeach168Wheel0, gKartPeach147Wheel0, gKartPeach126Wheel0, gKartPeach105Wheel0, +// gKartPeach084Wheel0, gKartPeach063Wheel0, gKartPeach042Wheel0, gKartPeach021Wheel0, +// gKartPeach000Wheel0 +// }; + +// u8 **gKartPeachWheels1[] = { +// gKartPeach269Wheel0, gKartPeach269Wheel0, gKartPeach249Wheel0, gKartPeach229Wheel0, +// gKartPeach229Wheel0, gKartPeach229Wheel0, gKartPeach209Wheel0, gKartPeach189Wheel0, +// gKartPeach189Wheel0 +// }; + +// u8 **gKartWarioWheels0[] = { +// gKartWario168Wheel0, gKartWario147Wheel0, gKartWario126Wheel0, gKartWario105Wheel0, +// gKartWario084Wheel0, gKartWario063Wheel0, gKartWario042Wheel0, gKartWario021Wheel0, +// gKartWario000Wheel0 +// }; + +// u8 **gKartWarioWheels1[] = { +// gKartWario269Wheel0, gKartWario269Wheel0, gKartWario249Wheel0, gKartWario229Wheel0, +// gKartWario229Wheel0, gKartWario229Wheel0, gKartWario209Wheel0, gKartWario189Wheel0, +// gKartWario189Wheel0 +// }; + +u32 *D_800DDE34[] = { + gKartMarioWheels0, gKartLuigiWheels0, gKartYoshiWheels0, gKartToadWheels0, + gKartDKWheels0, gKartWarioWheels0, gKartPeachWheels0, gKartBowserWheels0 }; -u8 **gKartMarioWheels1[] = { - gKartMario269Wheel0, gKartMario269Wheel0, gKartMario249Wheel0, gKartMario229Wheel0, - gKartMario229Wheel0, gKartMario229Wheel0, gKartMario209Wheel0, gKartMario189Wheel0, - gKartMario189Wheel0 +u32 *D_800DDE54[] = { + gKartMarioWheels1, gKartLuigiWheels1, gKartYoshiWheels1, gKartToadWheels1, + gKartDKWheels1, gKartWarioWheels1, gKartPeachWheels1, gKartBowserWheels1 }; -u8 **gKartLuigiWheels0[] = { - gKartLuigi168Wheel0, gKartLuigi147Wheel0, gKartLuigi126Wheel0, gKartLuigi105Wheel0, - gKartLuigi084Wheel0, gKartLuigi063Wheel0, gKartLuigi042Wheel0, gKartLuigi021Wheel0, - gKartLuigi000Wheel0 -}; - -u8 **gKartLuigiWheels1[] = { - gKartLuigi269Wheel0, gKartLuigi269Wheel0, gKartLuigi249Wheel0, gKartLuigi229Wheel0, - gKartLuigi229Wheel0, gKartLuigi229Wheel0, gKartLuigi209Wheel0, gKartLuigi189Wheel0, - gKartLuigi189Wheel0 -}; - -u8 **gKartBowserWheels0[] = { - gKartBowser168Wheel0, gKartBowser147Wheel0, gKartBowser126Wheel0, gKartBowser105Wheel0, - gKartBowser084Wheel0, gKartBowser063Wheel0, gKartBowser042Wheel0, gKartBowser021Wheel0, - gKartBowser000Wheel0 -}; - -u8 **gKartBowserWheels1[] = { - gKartBowser269Wheel0, gKartBowser269Wheel0, gKartBowser249Wheel0, gKartBowser229Wheel0, - gKartBowser229Wheel0, gKartBowser229Wheel0, gKartBowser209Wheel0, gKartBowser189Wheel0, - gKartBowser189Wheel0 -}; - -u8 **gKartToadWheels0[] = { - gKartToad168Wheel0, gKartToad147Wheel0, gKartToad126Wheel0, gKartToad105Wheel0, - gKartToad084Wheel0, gKartToad063Wheel0, gKartToad042Wheel0, gKartToad021Wheel0, - gKartToad000Wheel0 -}; - -u8 **gKartToadWheels1[] = { - gKartToad269Wheel0, gKartToad269Wheel0, gKartToad249Wheel0, gKartToad229Wheel0, - gKartToad229Wheel0, gKartToad229Wheel0, gKartToad209Wheel0, gKartToad189Wheel0, - gKartToad189Wheel0 -}; - -u8 **gKartYoshiWheels0[] = { - gKartYoshi168Wheel0, gKartYoshi147Wheel0, gKartYoshi126Wheel0, gKartYoshi105Wheel0, - gKartYoshi084Wheel0, gKartYoshi063Wheel0, gKartYoshi042Wheel0, gKartYoshi021Wheel0, - gKartYoshi000Wheel0 -}; - -u8 **gKartYoshiWheels1[] = { - gKartYoshi269Wheel0, gKartYoshi269Wheel0, gKartYoshi249Wheel0, gKartYoshi229Wheel0, - gKartYoshi229Wheel0, gKartYoshi229Wheel0, gKartYoshi209Wheel0, gKartYoshi189Wheel0, - gKartYoshi189Wheel0 -}; - -u8 **gKartDKWheels0[] = { - gKartDK168Wheel0, gKartDK147Wheel0, gKartDK126Wheel0, gKartDK105Wheel0, - gKartDK084Wheel0, gKartDK063Wheel0, gKartDK042Wheel0, gKartDK021Wheel0, - gKartDK000Wheel0 -}; - -u8 **gKartDKWheels1[] = { - gKartDK269Wheel0, gKartDK269Wheel0, gKartDK249Wheel0, gKartDK229Wheel0, - gKartDK229Wheel0, gKartDK229Wheel0, gKartDK209Wheel0, gKartDK189Wheel0, - gKartDK189Wheel0 -}; - -u8 **gKartPeachWheels0[] = { - gKartPeach168Wheel0, gKartPeach147Wheel0, gKartPeach126Wheel0, gKartPeach105Wheel0, - gKartPeach084Wheel0, gKartPeach063Wheel0, gKartPeach042Wheel0, gKartPeach021Wheel0, - gKartPeach000Wheel0 -}; - -u8 **gKartPeachWheels1[] = { - gKartPeach269Wheel0, gKartPeach269Wheel0, gKartPeach249Wheel0, gKartPeach229Wheel0, - gKartPeach229Wheel0, gKartPeach229Wheel0, gKartPeach209Wheel0, gKartPeach189Wheel0, - gKartPeach189Wheel0 -}; - -u8 **gKartWarioWheels0[] = { - gKartWario168Wheel0, gKartWario147Wheel0, gKartWario126Wheel0, gKartWario105Wheel0, - gKartWario084Wheel0, gKartWario063Wheel0, gKartWario042Wheel0, gKartWario021Wheel0, - gKartWario000Wheel0 -}; - -u8 **gKartWarioWheels1[] = { - gKartWario269Wheel0, gKartWario269Wheel0, gKartWario249Wheel0, gKartWario229Wheel0, - gKartWario229Wheel0, gKartWario229Wheel0, gKartWario209Wheel0, gKartWario189Wheel0, - gKartWario189Wheel0 -}; - -u16 **D_800DDE34[] = { - (u16 **)gKartMarioWheels0, (u16 **)gKartLuigiWheels0, (u16 **)gKartYoshiWheels0, (u16 **)gKartToadWheels0, - (u16 **)gKartDKWheels0, (u16 **)gKartWarioWheels0, (u16 **)gKartPeachWheels0, (u16 **)gKartBowserWheels0 -}; - -u16 **D_800DDE54[] = { - (u16 **)gKartMarioWheels1, (u16 **)gKartLuigiWheels1, (u16 **)gKartYoshiWheels1, (u16 **)gKartToadWheels1, - (u16 **)gKartDKWheels1, (u16 **)gKartWarioWheels1, (u16 **)gKartPeachWheels1, (u16 **)gKartBowserWheels1 +const char** wheelPtr[] = { + mario_kart_wheels, luigi_kart_wheels, yoshi_kart_wheels, toad_kart_wheels, + donkeykong_kart_wheels, wario_kart_wheels, peach_kart_wheels, bowser_kart_wheels, }; s32 D_800DDE74[] = { @@ -1787,8 +1821,9 @@ void func_80026B4C(Player *player, s8 playerId, s8 screenId, s8 arg3) { s16 temp_t2 = player->unk_240; s16 temp_num = 0x40; // setting this as a variable gets rid of regalloc - u16 *wheel0 = (u16 *) LOAD_ASSET(D_800DDE34[player->characterId][temp_t1]); - u16 *wheel1 = (u16 *) LOAD_ASSET(D_800DDE54[player->characterId][temp_t1]); + u8 character = player->characterId; + u32 wheel0 = (D_800DDE34[player->characterId][temp_t1]); + u32 wheel1 = (D_800DDE54[player->characterId][temp_t1]); if (((player->effects & 0x4000) == 0x4000) && ((player->type & PLAYER_START_SEQUENCE) == 0)) { if (((player->effects & 0x80) != 0x80) && ((player->effects & 0x40) != 0x40) @@ -1796,15 +1831,19 @@ void func_80026B4C(Player *player, s8 playerId, s8 screenId, s8 arg3) { && ((player->effects & 0x800000) != 0x800000) && ((player->unk_044 & 0x800) == 0)) { if (temp_t0 <= 20) { - func_80027C74(player, (uintptr_t*) (wheel0 + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); + int32_t offset = (((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80; + func_80027C74(player, wheelPtr[character][wheel0 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } else { - func_80027C74(player, (uintptr_t*) (wheel1 + (temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); + int32_t offset = (((((temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) ) + 0x600)) * 2) / 0x80; + func_80027C74(player, wheelPtr[character][wheel1 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } } else { if (temp_t0 == 0) { - func_80027C74(player, (uintptr_t*) (wheel0 + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); + int32_t offset = (((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80; + func_80027C74(player, wheelPtr[character][wheel0 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } else { - func_80027C74(player, (uintptr_t*) (wheel1 + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); + int32_t offset = (((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80; + func_80027C74(player, wheelPtr[character][wheel1 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } } } else { @@ -1812,18 +1851,42 @@ 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)) { + //printf("---start---\n"); + + if (temp_t0 <= 20) { - func_80027C74(player, (uintptr_t*) (wheel0 + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); + int32_t offset = (((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80; +//printf("OFFSET VAL 0x%X\n", ((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40))); +//printf("OFFSET IDX %d\n", offset); + func_80027C74(player, wheelPtr[character][wheel0 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } else { - func_80027C74(player, (uintptr_t*) (wheel1 + (temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); + +// printf("wheel1\n"); +// printf("OFFSET: 0x%X, t0: 0x%X, temp_num: 0x%X t2: 0x%X, t2_8: 0x%X\n", (((temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600)), temp_t0, temp_num, temp_t2, (temp_t2 >> 8)); +// printf("wheel offset: 0x%X, w0: 0x%X, t0: 0x%X\n", wheel1 + (((temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40) + 0x600)), wheel1, temp_t0); +// printf("wheel: 0x%X, char: 0x%X, t1: 0x%X\n", wheel1, player->characterId, temp_t1); + + int32_t offset = (((((temp_t0 - 21) * (temp_num * 4) + ((temp_t2 >> 8) * 0x40))+ 0x600)) * 2) / 0x80; + func_80027C74(player, wheelPtr[character][wheel1 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } } else { if (temp_t0 == 0) { - func_80027C74(player, (uintptr_t*) (wheel0 + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); +// printf("wheel0\n"); +// printf("OFFSET: 0x%X, t0: 0x%X, temp_num: 0x%X t2: 0x%X, t2_8: 0x%X\n", (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40), temp_t0, temp_num, temp_t2, (temp_t2 >> 8)); +// printf("wheel offset: 0x%X, w0: 0x%X, t0: 0x%X\n", wheel0 + ((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), wheel0, temp_t0); +// printf("wheel: 0x%X, char: 0x%X, t1: 0x%X\n", wheel0, player->characterId, temp_t1); + int32_t offset = (((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80; + func_80027C74(player, wheelPtr[character][wheel0 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } else { - func_80027C74(player, (uintptr_t*) (wheel1 + (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); +// printf("wheel1_2\n"); +// printf("OFFSET: 0x%X, t0: 0x%X, temp_num: 0x%X t2: 0x%X, t2_8: 0x%X\n", (temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40), temp_t0, temp_num, temp_t2, (temp_t2 >> 8)); +// printf("wheel offset: 0x%X, w0: 0x%X, t0: 0x%X\n", wheel1 + ((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)), wheel1, temp_t0); +// printf("wheel: 0x%X, char: 0x%X, t1: 0x%X\n", wheel1, player->characterId, temp_t1); + int32_t offset = (((temp_t0 * temp_num * 4) + ((temp_t2 >> 8) * 0x40)) * 2) / 0x80; + func_80027C74(player, wheelPtr[character][wheel1 + offset], D_802F1F80_WHEEL(arg3, screenId, playerId), 0x80); } } +//printf("---end---\n"); } } diff --git a/src/render_player.h b/src/render_player.h index 35b7b706b..c6257f2a0 100644 --- a/src/render_player.h +++ b/src/render_player.h @@ -106,26 +106,26 @@ extern Vtx D_800E4EC0[]; extern Vtx D_800E4FD0[]; extern Vtx D_800E50D0[]; -extern u8 **gKartMarioWheels0[]; -extern u8 **gKartMarioWheels1[]; -extern u8 **gKartLuigiWheels0[]; -extern u8 **gKartLuigiWheels1[]; -extern u8 **gKartBowserWheels0[]; -extern u8 **gKartBowserWheels1[]; -extern u8 **gKartToadWheels0[]; -extern u8 **gKartToadWheels1[]; -extern u8 **gKartYoshiWheels0[]; -extern u8 **gKartYoshiWheels1[]; -extern u8 **gKartDKWheels0[]; -extern u8 **gKartDKWheels1[]; -extern u8 **gKartPeachWheels0[]; -extern u8 **gKartPeachWheels1[]; -extern u8 **gKartWarioWheels0[]; -extern u8 **gKartWarioWheels1[]; +extern u32 gKartMarioWheels0[]; +extern u32 gKartMarioWheels1[]; +extern u32 gKartLuigiWheels0[]; +extern u32 gKartLuigiWheels1[]; +extern u32 gKartBowserWheels0[]; +extern u32 gKartBowserWheels1[]; +extern u32 gKartToadWheels0[]; +extern u32 gKartToadWheels1[]; +extern u32 gKartYoshiWheels0[]; +extern u32 gKartYoshiWheels1[]; +extern u32 gKartDKWheels0[]; +extern u32 gKartDKWheels1[]; +extern u32 gKartPeachWheels0[]; +extern u32 gKartPeachWheels1[]; +extern u32 gKartWarioWheels0[]; +extern u32 gKartWarioWheels1[]; -extern u16 **D_800DDE34[]; -extern u16 **D_800DDE54[]; +extern u32 *D_800DDE34[]; +extern u32 *D_800DDE54[]; // These all come the kart data stuff, they should end up in their own inc.c eventually diff --git a/src/staff_ghosts.c b/src/staff_ghosts.c index a6410de1d..0919c91f1 100644 --- a/src/staff_ghosts.c +++ b/src/staff_ghosts.c @@ -68,14 +68,25 @@ extern StaffGhost *d_luigi_raceway_staff_ghost; void func_80004EF0(void) { D_80162DA4 = (u32 *) &D_802BFB80.arraySize8[0][2][3]; + u8 *dest = (u8 *) D_80162DA4; osInvalDCache(&D_80162DA4[0], 0x4000); - //osPiStartDma(&gDmaIoMesg, 0, 0, (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(D_80162DC4)], D_80162DA4, 0x4000, &gDmaMesgQueue); - memcpy(&D_80162DA4, D_80162DC4, 0x4000); + + u8 *ghost = (u8 *) LOAD_ASSET(D_80162DC4); + + // Manual memcpy required for byte swap + for (int i = 0; i < 0x4000; i += 4) { + dest[i] = ghost[i + 3]; + dest[i + 1] = ghost[i + 2]; + dest[i + 2] = ghost[i + 1]; + dest[i + 3] = ghost[i]; + } + osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); D_80162D9C = (*D_80162DA4 & 0xFF0000); D_80162DA0 = 0; } + void func_80004FB0(void) { D_80162DB4 = (u32 *) &D_802BFB80.arraySize8[0][D_80162DD0][3]; D_80162DAC = *D_80162DB4 & 0xFF0000; diff --git a/yamls/us/bowser_kart.yml b/yamls/us/bowser_kart.yml index 54772cfed..996f28f63 100644 --- a/yamls/us/bowser_kart.yml +++ b/yamls/us/bowser_kart.yml @@ -10,6 +10,10 @@ header: - '#include ' - '#include ' + tables: + bowser_kart_wheels: + range: [0x9C088, 0xC0208] + mode: APPEND bowser_kart_frame000: symbol: gKartBowser000 type: texture diff --git a/yamls/us/donkeykong_kart.yml b/yamls/us/donkeykong_kart.yml index eb49568d8..f38a5b4b7 100644 --- a/yamls/us/donkeykong_kart.yml +++ b/yamls/us/donkeykong_kart.yml @@ -10,6 +10,10 @@ header: - '#include ' - '#include ' + tables: + donkeykong_kart_wheels: + range: [0x8DC94, 0xB1E14] + mode: APPEND donkeykong_kart_frame000: symbol: gKartDK000 type: texture diff --git a/yamls/us/kalimari_desert_data.yml b/yamls/us/kalimari_desert_data.yml index 0aa3dd441..ee3e9f2db 100644 --- a/yamls/us/kalimari_desert_data.yml +++ b/yamls/us/kalimari_desert_data.yml @@ -432,7 +432,7 @@ d_course_kalimari_desert_tree_tlut: width: 16 height: 16 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_cactus_model1: symbol: d_course_kalimari_desert_cactus_model1 type: vtx @@ -442,22 +442,19 @@ d_course_kalimari_desert_cactus_model2: symbol: d_course_kalimari_desert_cactus_model2 type: vtx offset: 0x84e8 - count: 4 + count: 8 d_course_kalimari_desert_dl_cactus1: symbol: d_course_kalimari_desert_dl_cactus1 type: gfx offset: 0x8528 - otr_mode: index d_course_kalimari_desert_dl_cactus2: symbol: d_course_kalimari_desert_dl_cactus2 type: gfx offset: 0x8628 - otr_mode: index d_course_kalimari_desert_dl_cactus3: symbol: d_course_kalimari_desert_dl_cactus3 type: gfx offset: 0x8728 - otr_mode: index d_course_kalimari_desert_crossing_sign_inactive_top_left: symbol: d_course_kalimari_desert_crossing_sign_inactive_top_left type: texture @@ -465,7 +462,7 @@ d_course_kalimari_desert_crossing_sign_inactive_top_left: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_crossing_sign_inactive_top_right: symbol: d_course_kalimari_desert_crossing_sign_inactive_top_right type: texture @@ -473,7 +470,7 @@ d_course_kalimari_desert_crossing_sign_inactive_top_right: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_crossing_sign_inactive_bottom_left: symbol: d_course_kalimari_desert_crossing_sign_inactive_bottom_left type: texture @@ -481,7 +478,7 @@ d_course_kalimari_desert_crossing_sign_inactive_bottom_left: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_crossing_sign_inactive_bottom_right: symbol: d_course_kalimari_desert_crossing_sign_inactive_bottom_right type: texture @@ -489,7 +486,7 @@ d_course_kalimari_desert_crossing_sign_inactive_bottom_right: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_crossing_sign_active_top_left: symbol: d_course_kalimari_desert_crossing_sign_active_top_left type: texture @@ -497,7 +494,7 @@ d_course_kalimari_desert_crossing_sign_active_top_left: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_crossing_sign_active_top_right: symbol: d_course_kalimari_desert_crossing_sign_active_top_right type: texture @@ -505,7 +502,7 @@ d_course_kalimari_desert_crossing_sign_active_top_right: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_crossing_sign_active_bottom_left: symbol: d_course_kalimari_desert_crossing_sign_active_bottom_left type: texture @@ -513,7 +510,7 @@ d_course_kalimari_desert_crossing_sign_active_bottom_left: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_crossing_sign_active_bottom_right: symbol: d_course_kalimari_desert_crossing_sign_active_bottom_right type: texture @@ -521,7 +518,7 @@ d_course_kalimari_desert_crossing_sign_active_bottom_right: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_crossing_signal_active_model: symbol: d_course_kalimari_desert_crossing_signal_active_model type: vtx @@ -604,7 +601,7 @@ d_course_kalimari_desert_locomotive_64: width: 32 height: 32 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_locomotive_cab_window: symbol: d_course_kalimari_desert_locomotive_cab_window type: texture @@ -612,7 +609,7 @@ d_course_kalimari_desert_locomotive_cab_window: width: 64 height: 32 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_locomotive_cab_window_front: symbol: d_course_kalimari_desert_locomotive_cab_window_front type: texture @@ -620,7 +617,7 @@ d_course_kalimari_desert_locomotive_cab_window_front: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_locomotive_chassis: symbol: d_course_kalimari_desert_locomotive_chassis type: texture @@ -628,7 +625,7 @@ d_course_kalimari_desert_locomotive_chassis: width: 32 height: 32 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_locomotive_lamp: symbol: d_course_kalimari_desert_locomotive_lamp type: texture @@ -636,7 +633,7 @@ d_course_kalimari_desert_locomotive_lamp: width: 32 height: 32 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_locomotive_boiler: symbol: d_course_kalimari_desert_locomotive_boiler type: texture @@ -644,7 +641,7 @@ d_course_kalimari_desert_locomotive_boiler: width: 32 height: 32 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_carriage_railing: symbol: d_course_kalimari_desert_carriage_railing type: texture @@ -652,7 +649,7 @@ d_course_kalimari_desert_carriage_railing: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_locomotive_tender: symbol: d_course_kalimari_desert_locomotive_tender type: texture @@ -660,7 +657,7 @@ d_course_kalimari_desert_locomotive_tender: width: 64 height: 32 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_railway_ballast: symbol: d_course_kalimari_desert_railway_ballast type: texture @@ -668,7 +665,7 @@ d_course_kalimari_desert_railway_ballast: width: 32 height: 32 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_carriage_lower: symbol: d_course_kalimari_desert_carriage_lower type: texture @@ -676,7 +673,7 @@ d_course_kalimari_desert_carriage_lower: width: 32 height: 32 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_carriage_door: symbol: d_course_kalimari_desert_carriage_door type: texture @@ -684,7 +681,7 @@ d_course_kalimari_desert_carriage_door: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_carriage_window: symbol: d_course_kalimari_desert_carriage_window type: texture @@ -692,7 +689,7 @@ d_course_kalimari_desert_carriage_window: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_locomotive_model_lod2: symbol: d_course_kalimari_desert_locomotive_model_lod2 type: vtx @@ -857,17 +854,14 @@ d_course_kalimari_desert_dl_1C0B0: symbol: d_course_kalimari_desert_dl_1C0B0 type: gfx offset: 0x1c0b0 - otr_mode: index d_course_kalimari_desert_dl_1C0E0: symbol: d_course_kalimari_desert_dl_1C0E0 type: gfx offset: 0x1c0e0 - otr_mode: index d_course_kalimari_desert_dl_1C0F0: symbol: d_course_kalimari_desert_dl_1C0F0 type: gfx offset: 0x1c0f0 - otr_mode: index d_course_kalimari_desert_locomotive_model_lod1: symbol: d_course_kalimari_desert_locomotive_model_lod1 type: vtx @@ -997,17 +991,14 @@ d_course_kalimari_desert_dl_1D630: symbol: d_course_kalimari_desert_dl_1D630 type: gfx offset: 0x1d630 - otr_mode: index d_course_kalimari_desert_dl_1D660: symbol: d_course_kalimari_desert_dl_1D660 type: gfx offset: 0x1d660 - otr_mode: index d_course_kalimari_desert_dl_1D670: symbol: d_course_kalimari_desert_dl_1D670 type: gfx offset: 0x1d670 - otr_mode: index d_course_kalimari_desert_locomotive_model_lod0: symbol: d_course_kalimari_desert_locomotive_model_lod0 type: vtx @@ -1132,17 +1123,14 @@ d_course_kalimari_desert_dl_1E8D0: symbol: d_course_kalimari_desert_dl_1E8D0 type: gfx offset: 0x1e8d0 - otr_mode: index d_course_kalimari_desert_dl_1E900: symbol: d_course_kalimari_desert_dl_1E900 type: gfx offset: 0x1e900 - otr_mode: index d_course_kalimari_desert_dl_1E910: symbol: d_course_kalimari_desert_dl_1E910 type: gfx offset: 0x1e910 - otr_mode: index d_course_kalimari_desert_tender_model_lod2: symbol: d_course_kalimari_desert_tender_model_lod2 type: vtx @@ -1187,17 +1175,14 @@ d_course_kalimari_desert_dl_1F1F8: symbol: d_course_kalimari_desert_dl_1F1F8 type: gfx offset: 0x1f1f8 - otr_mode: index d_course_kalimari_desert_dl_1F218: symbol: d_course_kalimari_desert_dl_1F218 type: gfx offset: 0x1f218 - otr_mode: index d_course_kalimari_desert_dl_1F228: symbol: d_course_kalimari_desert_dl_1F228 type: gfx offset: 0x1f228 - otr_mode: index d_course_kalimari_desert_tender_model_lod1: symbol: d_course_kalimari_desert_tender_model_lod1 type: vtx @@ -1227,17 +1212,14 @@ d_course_kalimari_desert_dl_1F6E0: symbol: d_course_kalimari_desert_dl_1F6E0 type: gfx offset: 0x1f6e0 - otr_mode: index d_course_kalimari_desert_dl_1F6F8: symbol: d_course_kalimari_desert_dl_1F6F8 type: gfx offset: 0x1f6f8 - otr_mode: index d_course_kalimari_desert_dl_1F708: symbol: d_course_kalimari_desert_dl_1F708 type: gfx offset: 0x1f708 - otr_mode: index d_course_kalimari_desert_dl_1F720: symbol: d_course_kalimari_desert_dl_1F720 type: gfx @@ -1272,17 +1254,14 @@ d_course_kalimari_desert_dl_1FAD0: symbol: d_course_kalimari_desert_dl_1FAD0 type: gfx offset: 0x1fad0 - otr_mode: index d_course_kalimari_desert_dl_1FAE8: symbol: d_course_kalimari_desert_dl_1FAE8 type: gfx offset: 0x1fae8 - otr_mode: index d_course_kalimari_desert_dl_1FAF8: symbol: d_course_kalimari_desert_dl_1FAF8 type: gfx offset: 0x1faf8 - otr_mode: index d_course_kalimari_desert_dl_1FB10: symbol: d_course_kalimari_desert_dl_1FB10 type: gfx @@ -1387,22 +1366,18 @@ d_course_kalimari_desert_dl_209C8: symbol: d_course_kalimari_desert_dl_209C8 type: gfx offset: 0x209c8 - otr_mode: index d_course_kalimari_desert_dl_209F8: symbol: d_course_kalimari_desert_dl_209F8 type: gfx offset: 0x209f8 - otr_mode: index d_course_kalimari_desert_dl_20A08: symbol: d_course_kalimari_desert_dl_20A08 type: gfx offset: 0x20a08 - otr_mode: index d_course_kalimari_desert_dl_20A20: symbol: d_course_kalimari_desert_dl_20A20 type: gfx offset: 0x20a20 - otr_mode: index d_course_kalimari_desert_carriage_chassis_model_lod1: symbol: d_course_kalimari_desert_carriage_chassis_model_lod1 type: vtx @@ -1457,17 +1432,14 @@ d_course_kalimari_desert_dl_21200: symbol: d_course_kalimari_desert_dl_21200 type: gfx offset: 0x21200 - otr_mode: index d_course_kalimari_desert_dl_21210: symbol: d_course_kalimari_desert_dl_21210 type: gfx offset: 0x21210 - otr_mode: index d_course_kalimari_desert_dl_21220: symbol: d_course_kalimari_desert_dl_21220 type: gfx offset: 0x21220 - otr_mode: index d_course_kalimari_desert_dl_21238: symbol: d_course_kalimari_desert_dl_21238 type: gfx @@ -1492,17 +1464,14 @@ d_course_kalimari_desert_dl_21518: symbol: d_course_kalimari_desert_dl_21518 type: gfx offset: 0x21518 - otr_mode: index d_course_kalimari_desert_dl_21540: symbol: d_course_kalimari_desert_dl_21540 type: gfx offset: 0x21540 - otr_mode: index d_course_kalimari_desert_dl_21550: symbol: d_course_kalimari_desert_dl_21550 type: gfx offset: 0x21550 - otr_mode: index d_course_kalimari_desert_carriage_model_lod0: symbol: d_course_kalimari_desert_carriage_model_lod0 type: vtx @@ -1542,17 +1511,14 @@ d_course_kalimari_desert_dl_21A60: symbol: d_course_kalimari_desert_dl_21A60 type: gfx offset: 0x21a60 - otr_mode: index d_course_kalimari_desert_dl_21A70: symbol: d_course_kalimari_desert_dl_21A70 type: gfx offset: 0x21a70 - otr_mode: index d_course_kalimari_desert_dl_21A80: symbol: d_course_kalimari_desert_dl_21A80 type: gfx offset: 0x21a80 - otr_mode: index d_course_kalimari_desert_dl_21A98: symbol: d_course_kalimari_desert_dl_21A98 type: gfx @@ -1577,17 +1543,14 @@ d_course_kalimari_desert_dl_21C58: symbol: d_course_kalimari_desert_dl_21C58 type: gfx offset: 0x21c58 - otr_mode: index d_course_kalimari_desert_dl_21C80: symbol: d_course_kalimari_desert_dl_21C80 type: gfx offset: 0x21c80 - otr_mode: index d_course_kalimari_desert_dl_21C90: symbol: d_course_kalimari_desert_dl_21C90 type: gfx offset: 0x21c90 - otr_mode: index d_course_kalimari_desert_unknown_model1: symbol: d_course_kalimari_desert_unknown_model1 type: vtx @@ -1605,12 +1568,11 @@ d_course_kalimari_desert_train_bogie: width: 32 height: 64 format: rgba16 - ctype: u8 + ctype: u16 d_course_kalimari_desert_dl_22D28: symbol: d_course_kalimari_desert_dl_22D28 type: gfx offset: 0x22d28 - otr_mode: index d_course_kalimari_desert_dl_22D70: symbol: d_course_kalimari_desert_dl_22D70 type: gfx diff --git a/yamls/us/kalimari_desert_displaylists.yml b/yamls/us/kalimari_desert_displaylists.yml index e26c4fcbc..1598abc3a 100644 --- a/yamls/us/kalimari_desert_displaylists.yml +++ b/yamls/us/kalimari_desert_displaylists.yml @@ -14,4 +14,4 @@ d_course_kalimari_desert_packed_dls: symbol: d_course_kalimari_desert_packed_dls type: blob offset: 0x934004 - size: 0x2FC6 \ No newline at end of file + size: 0x2FC6 diff --git a/yamls/us/luigi_kart.yml b/yamls/us/luigi_kart.yml index 209c7a55d..53bd2d4db 100644 --- a/yamls/us/luigi_kart.yml +++ b/yamls/us/luigi_kart.yml @@ -10,6 +10,10 @@ header: - '#include ' - '#include ' + tables: + luigi_kart_wheels: + range: [0x769FC, 0x9AB7C] + mode: APPEND luigi_kart_frame000: symbol: gKartLuigi000 type: texture diff --git a/yamls/us/mario_kart.yml b/yamls/us/mario_kart.yml index 58ed6a490..5ccb01a1f 100644 --- a/yamls/us/mario_kart.yml +++ b/yamls/us/mario_kart.yml @@ -10,6 +10,10 @@ header: - '#include ' - '#include ' + tables: + mario_kart_wheels: + range: [0x6E4B0, 0x92630] + mode: APPEND mario_kart_frame000: symbol: gKartMario000 type: texture diff --git a/yamls/us/peach_kart.yml b/yamls/us/peach_kart.yml index 1432f5b39..0265322a2 100644 --- a/yamls/us/peach_kart.yml +++ b/yamls/us/peach_kart.yml @@ -10,6 +10,10 @@ header: - '#include ' - '#include ' + tables: + peach_kart_wheels: + range: [0x6FDE8, 0x93F68] + mode: APPEND peach_kart_frame000: symbol: gKartPeach000 type: texture diff --git a/yamls/us/toad_kart.yml b/yamls/us/toad_kart.yml index faa86e5f9..73d2fc774 100644 --- a/yamls/us/toad_kart.yml +++ b/yamls/us/toad_kart.yml @@ -10,6 +10,10 @@ header: - '#include ' - '#include ' + tables: + toad_kart_wheels: + range: [0x6C6E8, 0x90868] + mode: APPEND toad_kart_frame000: symbol: gKartToad000 type: texture diff --git a/yamls/us/wario_kart.yml b/yamls/us/wario_kart.yml index 9d5f2eeb2..a4fbecc69 100644 --- a/yamls/us/wario_kart.yml +++ b/yamls/us/wario_kart.yml @@ -10,6 +10,10 @@ header: - '#include ' - '#include ' + tables: + wario_kart_wheels: + range: [0x78F9C, 0x9D11C] + mode: APPEND wario_kart_frame000: symbol: gKartWario000 type: texture diff --git a/yamls/us/yoshi_kart.yml b/yamls/us/yoshi_kart.yml index 810b0c868..fa9aeda04 100644 --- a/yamls/us/yoshi_kart.yml +++ b/yamls/us/yoshi_kart.yml @@ -10,6 +10,10 @@ header: - '#include ' - '#include ' + tables: + yoshi_kart_wheels: + range: [0x731A8, 0x97328] + mode: APPEND yoshi_kart_frame000: symbol: gKartYoshi000 type: texture