From 49ab41f0c5e39c9d28b1f1ce14d681748f0c7b3f Mon Sep 17 00:00:00 2001 From: Tyler McGavran Date: Wed, 14 Feb 2024 19:16:54 -0500 Subject: [PATCH] A match in code_8006E9C0 (#573) Also updated ctx_includes to match the current state of the repository (primarily fixing the trig_table include location) Signed-off-by: Taggerung Co-authored-by: Taggerung --- .../code_8006E9C0/func_8006EF60.s | 44 --- ctx_includes.c | 12 +- src/code_80057C60.c | 8 +- src/code_80057C60.h | 9 +- src/code_8006E9C0.c | 261 ++++++------------ 5 files changed, 98 insertions(+), 236 deletions(-) delete mode 100644 asm/non_matchings/code_8006E9C0/func_8006EF60.s diff --git a/asm/non_matchings/code_8006E9C0/func_8006EF60.s b/asm/non_matchings/code_8006E9C0/func_8006EF60.s deleted file mode 100644 index 23ba061bf..000000000 --- a/asm/non_matchings/code_8006E9C0/func_8006EF60.s +++ /dev/null @@ -1,44 +0,0 @@ -glabel func_8006EF60 -/* 06FB60 8006EF60 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 06FB64 8006EF64 AFB10018 */ sw $s1, 0x18($sp) -/* 06FB68 8006EF68 3C118019 */ lui $s1, %hi(D_8018D9B4) # $s1, 0x8019 -/* 06FB6C 8006EF6C 8E31D9B4 */ lw $s1, %lo(D_8018D9B4)($s1) -/* 06FB70 8006EF70 AFB40024 */ sw $s4, 0x24($sp) -/* 06FB74 8006EF74 AFB30020 */ sw $s3, 0x20($sp) -/* 06FB78 8006EF78 AFB00014 */ sw $s0, 0x14($sp) -/* 06FB7C 8006EF7C AFB50028 */ sw $s5, 0x28($sp) -/* 06FB80 8006EF80 AFB2001C */ sw $s2, 0x1c($sp) -/* 06FB84 8006EF84 3C01FFFF */ lui $at, 0xffff -/* 06FB88 8006EF88 3C10800E */ lui $s0, %hi(D_800E5520) # $s0, 0x800e -/* 06FB8C 8006EF8C 3C13800E */ lui $s3, %hi(gCourseOutlineTextures) # $s3, 0x800e -/* 06FB90 8006EF90 3C148019 */ lui $s4, %hi(D_8018D248) # $s4, 0x8019 -/* 06FB94 8006EF94 AFBF002C */ sw $ra, 0x2c($sp) -/* 06FB98 8006EF98 2694D248 */ addiu $s4, %lo(D_8018D248) # addiu $s4, $s4, -0x2db8 -/* 06FB9C 8006EF9C 267354D0 */ addiu $s3, %lo(gCourseOutlineTextures) # addiu $s3, $s3, 0x54d0 -/* 06FBA0 8006EFA0 26105520 */ addiu $s0, %lo(D_800E5520) # addiu $s0, $s0, 0x5520 -/* 06FBA4 8006EFA4 00009025 */ move $s2, $zero -/* 06FBA8 8006EFA8 24150014 */ li $s5, 20 -/* 06FBAC 8006EFAC 02218821 */ addu $s1, $s1, $at -.L8006EFB0: -/* 06FBB0 8006EFB0 86060000 */ lh $a2, ($s0) -/* 06FBB4 8006EFB4 8E640000 */ lw $a0, ($s3) -/* 06FBB8 8006EFB8 02202825 */ move $a1, $s1 -/* 06FBBC 8006EFBC 0C01BB65 */ jal func_8006ED94 -/* 06FBC0 8006EFC0 00C03825 */ move $a3, $a2 -/* 06FBC4 8006EFC4 860E0000 */ lh $t6, ($s0) -/* 06FBC8 8006EFC8 26520001 */ addiu $s2, $s2, 1 -/* 06FBCC 8006EFCC AE820000 */ sw $v0, ($s4) -/* 06FBD0 8006EFD0 26730004 */ addiu $s3, $s3, 4 -/* 06FBD4 8006EFD4 26100002 */ addiu $s0, $s0, 2 -/* 06FBD8 8006EFD8 26940004 */ addiu $s4, $s4, 4 -/* 06FBDC 8006EFDC 1655FFF4 */ bne $s2, $s5, .L8006EFB0 -/* 06FBE0 8006EFE0 022E8821 */ addu $s1, $s1, $t6 -/* 06FBE4 8006EFE4 8FBF002C */ lw $ra, 0x2c($sp) -/* 06FBE8 8006EFE8 8FB00014 */ lw $s0, 0x14($sp) -/* 06FBEC 8006EFEC 8FB10018 */ lw $s1, 0x18($sp) -/* 06FBF0 8006EFF0 8FB2001C */ lw $s2, 0x1c($sp) -/* 06FBF4 8006EFF4 8FB30020 */ lw $s3, 0x20($sp) -/* 06FBF8 8006EFF8 8FB40024 */ lw $s4, 0x24($sp) -/* 06FBFC 8006EFFC 8FB50028 */ lw $s5, 0x28($sp) -/* 06FC00 8006F000 03E00008 */ jr $ra -/* 06FC04 8006F004 27BD0030 */ addiu $sp, $sp, 0x30 diff --git a/ctx_includes.c b/ctx_includes.c index 7c5d1f078..130337d81 100644 --- a/ctx_includes.c +++ b/ctx_includes.c @@ -5,8 +5,8 @@ #include "include/common_structs.h" #include "include/config.h" #include "include/course_offsets.h" -#include "include/defines.h" #include "include/decode.h" +#include "include/defines.h" #include "include/kart_attributes.h" #include "include/libc/math.h" #include "include/libc/stdarg.h" @@ -47,7 +47,6 @@ #include "include/save_data.h" #include "include/segments.h" #include "include/sounds.h" -#include "include/trig_tables.h" #include "include/types.h" #include "include/ultra64.h" #include "include/vehicles.h" @@ -62,33 +61,32 @@ #include "src/audio/port_eu.h" #include "src/audio/seqplayer.h" #include "src/audio/synthesis.h" +#include "src/buffers.h" #include "src/camera.h" #include "src/camera_junk.h" #include "src/code_800029B0.h" #include "src/code_80004740.h" #include "src/code_80005FD0.h" -#include "src/render_player.h" #include "src/code_8003DC40.h" #include "src/code_80057C60.h" #include "src/code_8006E9C0.h" #include "src/code_80071F00.h" #include "src/code_80086E70.h" -#include "src/effects.h" #include "src/code_80091440.h" #include "src/code_80091750.h" #include "src/code_800AF9B0.h" -#include "src/save.h" #include "src/common_textures.h" #include "src/data/data_800E45C0.h" #include "src/data/data_800E8700.h" +#include "src/data/trig_tables.h" #include "src/data_segment2.h" +#include "src/effects.h" #include "src/ending/ceremony_and_credits.h" #include "src/ending/code_80280000.h" #include "src/ending/code_80281780.h" #include "src/ending/code_80281C40.h" #include "src/ending/credits.h" #include "src/ending/podium_ceremony_actors.h" -#include "src/buffers.h" #include "src/hud_renderer.h" #include "src/kart_dma.h" #include "src/main.h" @@ -115,6 +113,8 @@ #include "src/racing/race_logic.h" #include "src/racing/render_courses.h" #include "src/racing/skybox_and_splitscreen.h" +#include "src/render_player.h" +#include "src/save.h" #include "src/spawn_players.h" #include "src/staff_ghosts.h" #include "src/textures.h" diff --git a/src/code_80057C60.c b/src/code_80057C60.c index b541813f3..5495adfbc 100644 --- a/src/code_80057C60.c +++ b/src/code_80057C60.c @@ -357,13 +357,13 @@ s16 gGPCurrentRaceCharacterIdByRank[8]; s16 D_8018CF90; s16 D_8018CF98[8]; s16 D_8018CFA8; -s32 D_8018CFAC; +s8 D_8018CFAC[4]; s16 D_8018CFB0; -s32 D_8018CFB4; +s8 D_8018CFB4[4]; s16 D_8018CFB8; -s32 D_8018CFBC; +s8 D_8018CFBC[4]; s16 D_8018CFC0; -s32 D_8018CFC4; +s8 D_8018CFC4[4]; s16 D_8018CFC8; f32 D_8018CFCC; s16 D_8018CFD0; diff --git a/src/code_80057C60.h b/src/code_80057C60.h index ef721ec85..e7950d223 100644 --- a/src/code_80057C60.h +++ b/src/code_80057C60.h @@ -339,6 +339,7 @@ extern s8 D_801657B8[]; extern s8 D_801657C8; extern s8 D_801657D0[]; extern s8 D_801657D8; +extern s8 D_801657E1; extern s8 D_801657E2; extern s8 D_801657E3; extern s8 D_801657E4; @@ -453,6 +454,8 @@ extern s16 D_8018CF60; extern s16 D_8018CF68[]; extern s16 D_8018CF78; extern s16 gGPCurrentRaceCharacterIdByRank[]; +extern f32 D_8018CFCC; +extern f32 D_8018CFD4; extern s16 D_8018CF90; extern s16 D_8018CF98[]; extern s16 D_8018CFA8; @@ -460,10 +463,12 @@ extern s16 D_8018CFB0; extern s16 D_8018CFB8; extern s16 D_8018CFC0; extern s16 D_8018CFC8; -extern f32 D_8018CFCC; extern s16 D_8018CFD0; -extern f32 D_8018CFD4; extern s16 D_8018CFD8; +extern s8 D_8018CFAC[]; +extern s8 D_8018CFB4[]; +extern s8 D_8018CFBC[]; +extern s8 D_8018CFC4[]; extern s16 D_8018CFE0; extern f32 D_8018CFE4; extern s16 D_8018CFE8; diff --git a/src/code_8006E9C0.c b/src/code_8006E9C0.c index dba7ab899..6168b681c 100644 --- a/src/code_8006E9C0.c +++ b/src/code_8006E9C0.c @@ -83,21 +83,9 @@ void func_8006EB10(void) { // Has to be on one line, because IDO hates you :) for (i = 0; i < gLeafParticle_SIZE; i++) { gLeafParticle[i] = NULL_OBJECT_ID; } - - D_8018CFA8 = 0; - D_8018CF90 = D_8018CFA8; - D_8018CF78 = D_8018CF90; - D_8018CF60 = D_8018CF78; - D_8018CF48 = D_8018CF60; - D_8018CF20 = D_8018CF48; - D_8018CF18 = D_8018CF20; - D_8018CFE0 = 0; - D_8018CFD8 = D_8018CFE0; - D_8018CFD0 = D_8018CFD8; - D_8018CFC8 = D_8018CFD0; - D_8018CFC0 = D_8018CFC8; - D_8018CFB8 = D_8018CFC0; - D_8018CFB0 = D_8018CFB8; + + D_8018CF18 = D_8018CF20 = D_8018CF48 = D_8018CF60 = D_8018CF78 = D_8018CF90 = D_8018CFA8 = 0; + D_8018CFB0 = D_8018CFB8 = D_8018CFC0 = D_8018CFC8 = D_8018CFD0 = D_8018CFD8 = D_8018CFE0 = 0; D_8018D018 = 0; D_8018D010 = 0; D_8018D008 = 0; @@ -108,15 +96,8 @@ void func_8006EB10(void) { D_8018D110 = 0; D_8018D0E8 = 0; D_8018D0C0 = 0; - D_8018D098 = 0; - D_8018D070 = D_8018D098; - D_8018D048 = D_8018D070; - D_8018D020 = D_8018D048; - gNextFreeLeafParticle = 0; - gNextFreeObjectParticle4 = gNextFreeLeafParticle; - gNextFreeObjectParticle3 = gNextFreeObjectParticle4; - gNextFreeObjectParticle2 = gNextFreeObjectParticle3; - gNextFreeObjectParticle1 = gNextFreeObjectParticle2; + D_8018D020 = D_8018D048 = D_8018D070 = D_8018D098 = 0; + gNextFreeObjectParticle1 = gNextFreeObjectParticle2 = gNextFreeObjectParticle3 = gNextFreeObjectParticle4 = gNextFreeLeafParticle = 0; } void clear_object_list() { @@ -168,23 +149,16 @@ void func_8006EEE8(s32 courseId) { D_8018D2B8 = D_800E5548[courseId * 2 + 1]; } -#ifdef NON_MATCHING -// I really really don't know what D_8018D9B4 is supposed to be -// Its value is a pointer that seems to point to compressesed data -// of some variety (sometimes TKMK, sometimes MIO0) -extern u8 *D_8018D9B4; - void func_8006EF60(void) { s32 i; + // `huh`'s and `i`'s types have to differ, for some reason + s16 huh; + u8 *wut; - for (i = 0; i < 0x14; i++) { - D_8018D248[i] = func_8006ED94(gCourseOutlineTextures[i], D_8018D9B4, D_800E5520[i], D_800E5520[i]); - D_8018D9B4 += D_800E5520[i]; - } + wut = D_8018D9B4 + 0xFFFF0000; + // God forgive me for my sins... + huh = 0x14; if (0) {} for (i = 0; i < huh; i++) { D_8018D248[i] = func_8006ED94(gCourseOutlineTextures[i], wut, D_800E5520[i], D_800E5520[i]); wut += D_800E5520[i]; } } -#else -GLOBAL_ASM("asm/non_matchings/code_8006E9C0/func_8006EF60.s") -#endif void func_8006F008(void) { D_801655C8 = 0; @@ -428,49 +402,17 @@ void func_8006F8CC(void) { } } -#ifdef MIPS_TO_C -//generated by m2c commit beb457dabfc7a01ec6540a5404a6a05097a13602 on Dec-30-2023 -extern s8 D_8016576A; -extern s8 D_8016579C; -extern s8 D_801657E1; -extern s32 D_801657FC; -extern s32 D_80165804; -extern s32 D_8016580C; -extern s32 D_80165814; -extern s32 D_8016581C; -extern s8 D_801658E4; -extern s8 D_801658EC; -extern ? D_8018CFAC; -extern ? D_8018CFB4; -extern ? D_8018CFBC; -extern ? D_8018CFC4; -extern ? D_8018D0F0; -extern s16 D_8018D16C; -extern s16 D_8018D184; -extern s16 D_8018D18C; -extern s32 D_8018D1C4; -extern s32 D_8018D1DC; -extern s32 D_8018D2B4; - +#ifdef NON_MATCHING +// Major register allocation problems in the first for-loop +// Smaller issues elsewhere, probably some one line, multiple variable assignment shenanigans going on +// https://decomp.me/scratch/ohbAc void func_8006FA94(void) { - ? *var_a0_2; - ? *var_a1; - ? *var_a2; - ? *var_a2_2; - ? *var_v1; - Player **var_t0; - Player *temp_v0; - Player *temp_v0_2; - Player *temp_v0_3; - Player *var_v0; - f32 *var_a1_2; - s16 *var_a3; - s16 var_a0; - struct_D_8018CE10 *var_v1_2; + s32 var_a0; + Player *player; func_8006F8CC(); func_8006F008(); - osSetTime(/* u64+0x0 */ 0, /* u64+0x4 */ 0); + osSetTime(0); D_8018D170 = 0; D_8018D190 = 0; gIsHUDVisible = 0; @@ -479,9 +421,19 @@ void func_8006FA94(void) { D_801657E2 = 0; D_80165730 = 0; D_801658FE = 0; + /* D_801657E5 = 0; D_801657E3 = D_801657E5; D_801657E1 = D_801657E3; + */ + D_801657E1 = D_801657E3 = D_801657E5 = 0; + /* + D_80165658->unk8 = 0; + D_80165658->unk4 = 0; + D_80165658->unk0 = 0; + */ + D_80165658[0] = D_80165658[1] = D_80165658[2] = 0; + /* D_801658D6 = 0; D_801658E4 = D_801658D6; D_801658F4 = D_801658E4; @@ -489,19 +441,18 @@ void func_8006FA94(void) { D_801658DC = D_801658EC; D_801658CE = D_801658DC; D_801658C6 = D_801658CE; - D_80165658->unk8 = 0; - D_80165658->unk4 = 0; - D_80165658->unk0 = 0; D_801658BC = D_801658C6; + */ + D_801658BC = D_801658C6 = D_801658CE = D_801658DC = D_801658EC = D_801658F4 = D_801658E4 = D_801658D6 = 0; switch (gPlayerCount) { /* irregular */ case 1: if (gModeSelection == 0) { D_8018D114 = 0; - D_8018D178 = 0x00000096; - D_8018D114 = 0x000000F0; + D_8018D178 = 150; + D_8018D180 = 240; } else { D_8018D114 = 1; - D_8018D178 = 0x0000000A; + D_8018D178 = 10; D_8018D180 = 0; } break; @@ -509,19 +460,19 @@ void func_8006FA94(void) { if (gScreenModeSelection == 1) { if (gModeSelection == 0) { D_8018D114 = 2; - D_8018D178 = 0x00000096; - D_8018D180 = 0x000000F0; - D_8018D2AC = 0x0000003C; + D_8018D178 = 150; + D_8018D180 = 240; + D_8018D2AC = 60; } else if (gModeSelection == 2) { D_8018D114 = 3; - D_8018D178 = 0x0000001E; - D_8018D180 = 0x0000001E; - D_8018D2AC = 0x0000003C; + D_8018D178 = 30; + D_8018D180 = 30; + D_8018D2AC = 60; } else { D_8018D114 = 4; - D_8018D178 = 0x00000028; - D_8018D180 = 0x00000028; - D_8018D2AC = 0x0000003C; + D_8018D178 = 40; + D_8018D180 = 40; + D_8018D2AC = 60; } } else if (gModeSelection == 0) { D_8018D114 = 5; @@ -534,63 +485,54 @@ void func_8006FA94(void) { case 3: if (gModeSelection == 2) { D_8018D114 = 8; - D_8018D178 = 0x00000064; - D_8018D180 = 0x00000096; - D_8018D2AC = 0x0000003C; + D_8018D178 = 100; + D_8018D180 = 150; + D_8018D2AC = 60; } else { - D_8018D180 = 9; - D_8018D178 = 0x00000064; - D_8018D180 = 0x00000096; - D_8018D2AC = 0x0000003C; + D_8018D114 = 9; + D_8018D178 = 100; + D_8018D180 = 150; + D_8018D2AC = 60; } break; case 4: if (gModeSelection == 2) { - D_8018D114 = 0x0000000A; - D_8018D178 = 0x0000001E; - D_8018D180 = 0x0000001E; + D_8018D114 = 10; + D_8018D178 = 30; + D_8018D180 = 30; + D_8018D2AC = 10; } else { - D_8018D114 = 0x0000000B; - D_8018D178 = 0x0000001E; - D_8018D180 = 0x0000001E; + D_8018D114 = 11; + D_8018D178 = 30; + D_8018D180 = 30; + D_8018D2AC = 10; } - D_8018D2AC = 0x0000000A; break; } if (gEnableDebugMode == 0) { D_8016576A = 0; D_8016579C = 0; } - var_a0 = 0; - if (gPlayerCount > 0) { - var_a0_2 = &D_8018CFB4; - var_a2 = &D_8018CFC4; - var_a1 = &D_8018CFAC; - var_v1 = &D_8018CFBC; - do { - var_a0_2 += 1; - var_v1 += 1; - var_a1 += 1; - var_a2 += 1; - var_v1->unk-1 = 0; - var_a1->unk-1 = 0; - var_a2->unk-1 = 0; - var_a0_2->unk-1 = 0; - } while ((u32) var_a0_2 < (u32) (gPlayerCount + &D_8018CFB4)); - var_a0 = 0; + for (var_a0 = 0; var_a0 < gPlayerCount; var_a0++) { + D_8018CFBC[var_a0] = 0; + D_8018CFAC[var_a0] = 0; + D_8018CFC4[var_a0] = 0; + D_8018CFB4[var_a0] = 0; } D_8018D204 = 1; D_8018D1FC = 0; D_8018D224 = 0; - D_8018D1F8 = 0; - D_8018D1F0 = 0; + D_8018D1F0 = D_8018D1F8 = 0; D_8018D228 = 0xFF; + /* D_80165628 = 0; D_80165618 = 0; D_80165608 = D_80165618; D_801655F8 = D_80165618; D_801655E8 = D_80165618; D_801655D8 = D_80165618; + */ + D_801655D8 = D_801655E8 = D_801655F8 = D_80165608 = D_80165618 = D_80165628 = 0; D_8018D160 = 0; D_8018D1DC = 0; D_8018D1C4 = 0; @@ -600,8 +542,8 @@ void func_8006FA94(void) { D_801656F0 = 0; D_801657B2 = 0; D_801657D8 = D_801657B2; - D_8018D214 = (s32) D_801657D8; - D_801657B0 = (s8) D_8018D214; + D_8018D214 = D_801657D8; + D_801657B0 = D_8018D214; D_801657AE = D_801657B0; D_8018D20C = 0; D_8018D2F8 = 0; @@ -611,10 +553,10 @@ void func_8006FA94(void) { D_8018D2BC = 0; D_8018D2B4 = D_8018D2BC; D_8018D2A4 = D_8018D2B4; - D_8018D2C8->unk0 = 0; - D_8018D2C8->unk4 = 0; - D_8018D2C8->unk8 = 0; - D_8018D2C8->unkC = 0; + D_8018D2C8[0] = 0; + D_8018D2C8[1] = 0; + D_8018D2C8[2] = 0; + D_8018D2C8[3] = 0; D_8016581C = 0; D_8016580C = 0; D_80165814 = 0; @@ -625,56 +567,15 @@ void func_8006FA94(void) { D_8018D16C = D_8018D18C; D_8018D17C = D_8018D18C; D_8018D174 = D_8018D18C; - var_v0 = gPlayerOne; - var_t0 = D_8018CF28; - var_a3 = D_8018CF50; - var_v1_2 = D_8018CE10; - var_a2_2 = &D_8018D0F0; - var_a1_2 = D_8018D050; - do { - var_a1_2->unk0 = -32.0f; - var_a2_2->unk0 = -32.0f; - var_v1_2->unk_04[2] = 0.0f; - var_v1_2->unk_04[1] = 0.0f; - var_v1_2->unk_04[0] = 0.0f; - var_a3->unk0 = var_a0; - var_t0->unk0 = var_v0; - var_v0->unk_040 = -1; - temp_v0 = var_v0 + 0xDD8; - var_t0->unk4 = temp_v0; - var_a3->unk2 = (s16) (var_a0 + 1); - var_v1_2->unk24 = 0.0f; - var_v1_2->unk28 = 0.0f; - var_v1_2->unk2C = 0.0f; - var_a2_2->unk4 = -32.0f; - var_a1_2->unk4 = -32.0f; - temp_v0->unk_040 = -1; - temp_v0_2 = temp_v0 + 0xDD8; - var_a3->unk4 = (s16) (var_a0 + 2); - var_t0->unk8 = temp_v0_2; - var_v1_2->unk44 = 0.0f; - var_v1_2->unk48 = 0.0f; - var_v1_2->unk4C = 0.0f; - var_a2_2->unk8 = -32.0f; - var_a1_2->unk8 = -32.0f; - temp_v0_2->unk_040 = -1; - temp_v0_3 = temp_v0_2 + 0xDD8; - var_t0->unkC = temp_v0_3; - var_a3->unk6 = (s16) (var_a0 + 3); - var_a0 += 4; - var_v1_2->unk64 = 0.0f; - var_v1_2->unk68 = 0.0f; - var_v1_2->unk6C = 0.0f; - var_a2_2->unkC = -32.0f; - var_a1_2->unkC = -32.0f; - temp_v0_3->unk_040 = -1; - var_v0 = temp_v0_3 + 0xDD8; - var_a1_2 += 0x10; - var_a2_2 += 0x10; - var_v1_2 += 0x80; - var_a3 += 8; - var_t0 += 0x10; - } while (var_a0 != (s16) 8); + player = gPlayerOne; + for (var_a0 = 0; var_a0 < 8; var_a0++) { + D_8018D0F0[var_a0] = D_8018D050[var_a0] = -32.0f; + D_8018CE10[var_a0].unk_04[0] = D_8018CE10[var_a0].unk_04[1] = D_8018CE10[var_a0].unk_04[2] = 0.0f; + D_8018CF50[var_a0] = var_a0; + D_8018CF28[var_a0] = player; + player->unk_040 = -1; + player++; + } } #else GLOBAL_ASM("asm/non_matchings/code_8006E9C0/func_8006FA94.s")