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 <tyler.taggerung@email.com>
Co-authored-by: Taggerung <tyler.taggerung@email.com>
This commit is contained in:
Tyler McGavran
2024-02-14 19:16:54 -05:00
committed by GitHub
parent 811e05c297
commit 49ab41f0c5
5 changed files with 98 additions and 236 deletions
@@ -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
+6 -6
View File
@@ -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"
+4 -4
View File
@@ -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;
+7 -2
View File
@@ -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;
+81 -180
View File
@@ -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")