diff --git a/README.md b/README.md index 23808130..213f62b1 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,9 @@ This repo contains a work-in-progress decompilation of Diddy Kong Racing for the All versions are supported, and the US 1.0 version (SHA1 = 0cb115d8716dbbc2922fda38e533b9fe63bb9670) of the game is the default if not specified. -As of April 18, 2025, this is our current score: +As of April 19, 2025, this is our current score: -    Decomp progress: 79.73% +    Decomp progress: 79.89%     Documentation progress: 50.27% @@ -117,20 +117,20 @@ s32 is_drumstick_unlocked(void) { ``` -As of April 18, 2025, this is our current score: +As of April 19, 2025, this is our current score: ``` =================================================================== ADVENTURE ONE (ASM -> C Decompilation) - -------------- 79.73% Complete (82.30% NON_MATCHING) -------------- - # Decompiled functions: 1855 - # GLOBAL_ASM remaining: 95 + -------------- 79.89% Complete (82.46% NON_MATCHING) -------------- + # Decompiled functions: 1856 + # GLOBAL_ASM remaining: 94 # NON_MATCHING functions: 12 # NON_EQUIVALENT WIP functions: 28 --------------------------- Game Status --------------------------- Balloons: 38/47, Keys: 4/4, Trophies: 3/5 T.T. Amulets: 4/4, Wizpig Amulets: 3/4 ------------------------------------------------------------------- - We are collecting silver coins in Haunted Woods. (5/8 silver coins) + We are collecting silver coins in Haunted Woods. (6/8 silver coins) =================================================================== ADVENTURE TWO (Cleanup & Documentation) ------------------------- 50.27% Complete ------------------------- diff --git a/src/waves.c b/src/waves.c index bbd6c011..d2b789e3 100644 --- a/src/waves.c +++ b/src/waves.c @@ -99,7 +99,7 @@ s32 D_8012A0D0; s32 D_8012A0D4; s32 D_8012A0D8; s32 D_8012A0DC; -s32 D_8012A0E0; +s32 gNumberOfLevelSegments; s32 D_8012A0E8[64]; s16 D_8012A1E8[512]; @@ -476,7 +476,7 @@ void func_800B8C04(s32 xPosition, s32 yPosition, s32 zPosition, s32 currentViewp // clang-format on var_t4 = var_t5 + var_s4; D_800E30D4[var_t2] |= D_800E30E0[i * D_80129FC8.unk24 + j] << var_t4; - for (k = 0; k < D_8012A0E0; k++) { + for (k = 0; k < gNumberOfLevelSegments; k++) { if (var_t2 == (&D_800E30D8[k])->unkC) { temp = &D_8012A5E8[k]; temp->unk0 = k; @@ -534,7 +534,7 @@ void func_800B8C04(s32 xPosition, s32 yPosition, s32 zPosition, s32 currentViewp ) { // clang-format on D_800E30D4[var_t2] = D_800E30E0[i * D_80129FC8.unk24 + j]; - for (k = 0; k < D_8012A0E0; k++) { + for (k = 0; k < gNumberOfLevelSegments; k++) { if (var_t2 == (&D_800E30D8[k])->unkC) { temp = &D_8012A5E8[k]; temp->unk0 = k; @@ -559,7 +559,7 @@ void func_800B8C04(s32 xPosition, s32 yPosition, s32 zPosition, s32 currentViewp s32 func_800B9228(LevelModelSegment *arg0) { s32 v0 = 0; s32 result = FALSE; - while (v0 < D_8012A0E0 && arg0 != D_800E30D8[v0].unk00) { + while (v0 < gNumberOfLevelSegments && arg0 != D_800E30D8[v0].unk00) { v0++; }; if (D_800E30D4[D_800E30D8[v0].unkC]) { @@ -880,7 +880,7 @@ void func_800BA288(s32 arg0, s32 arg1) { s32 j; arg1 <<= 3; - for (i = 0; i < D_8012A0E0; i++) { + for (i = 0; i < gNumberOfLevelSegments; i++) { if (D_8012A0E8[D_800E30D8[i].unkB] & (1 << D_800E30D8[i].unkA)) { if (D_80129FC8.unk28 != 0) { for (j = 0; j < 4; j++) { @@ -979,7 +979,7 @@ f32 func_800BB2F4(s32 arg0, f32 arg1, f32 arg2, Vec3f *arg3) { s32 sp58; s32 pad; - if (arg0 < 0 || arg0 >= D_8012A0E0) { + if (arg0 < 0 || arg0 >= gNumberOfLevelSegments) { arg0 = 0; } @@ -1198,7 +1198,93 @@ void func_800BBE08(LevelModel *level, unk800BBE08_arg1 *arg1) { } #pragma GLOBAL_ASM("asm/nonmatchings/waves/func_800BBF78.s") -#pragma GLOBAL_ASM("asm/nonmatchings/waves/func_800BC6C8.s") + +void func_800BC6C8(void) { + s32 i; + s32 j; + s32 k; + s32 var_s0; + s32 var_v0; + f32 sp34[0x80]; + + var_v0 = 0x4000 / D_80129FC8.unk0; + var_s0 = 0; + for (i = 0; i < D_80129FC8.unk0;) { + sp34[i++] = sins_f(var_s0); + var_s0 += var_v0; + } + sp34[0] = 0.0f; + sp34[D_80129FC8.unk0] = 1.0f; + + k = 0; + for (i = 0; i <= D_80129FC8.unk0; i++) { + for (j = 0; j <= D_80129FC8.unk0; j++) { + D_800E304C[4][k] = 1.0f; + k++; + } + } + + k = 0; + for (i = 0; i <= D_80129FC8.unk0; i++) { + for (j = 0; j <= D_80129FC8.unk0; j++) { + D_800E304C[1][k] = sp34[i]; + k++; + } + } + + k = 0; + for (i = 0; i <= D_80129FC8.unk0; i++) { + for (j = 0; j <= D_80129FC8.unk0;) { + D_800E304C[3][k++] = sp34[j++]; + } + } + + k = 0; + for (i = 0; i <= D_80129FC8.unk0; i++) { + for (j = 0; j <= D_80129FC8.unk0;) { + D_800E304C[5][k++] = sp34[D_80129FC8.unk0 - j++]; + } + } + + k = 0; + for (i = 0; i <= D_80129FC8.unk0; i++) { + for (j = 0; j <= D_80129FC8.unk0; j++) { + D_800E304C[7][k] = sp34[D_80129FC8.unk0 - i]; + k++; + } + } + + for (i = 0; i <= D_80129FC8.unk0; i++) { + for (j = i; j <= D_80129FC8.unk0; j++) { + D_800E304C[0][i * (D_80129FC8.unk0 + 1) + j] = sp34[i]; + D_800E304C[0][j * (D_80129FC8.unk0 + 1) + i] = sp34[i]; + } + } + + for (i = 0; i <= D_80129FC8.unk0; i++) { + for (j = i; j <= D_80129FC8.unk0; j++) { + D_800E304C[2][(i * (D_80129FC8.unk0 + 1)) + D_80129FC8.unk0 - j] = sp34[i]; + D_800E304C[2][(j * (D_80129FC8.unk0 + 1)) + D_80129FC8.unk0 - i] = sp34[i]; + } + } + + for (i = 0; i <= D_80129FC8.unk0; i++) { + for (j = i; j <= D_80129FC8.unk0; j++) { + D_800E304C[6][(D_80129FC8.unk0 * (D_80129FC8.unk0 + 1)) - (i * (D_80129FC8.unk0 + 1)) + j] = sp34[i]; + D_800E304C[6][(D_80129FC8.unk0 * (D_80129FC8.unk0 + 1)) - (j * (D_80129FC8.unk0 + 1)) + i] = sp34[i]; + } + } + + for (i = 0; i <= D_80129FC8.unk0; i++) { + for (j = i; j <= D_80129FC8.unk0; j++) { + // clang-format off + D_800E304C[8][(D_80129FC8.unk0 * (D_80129FC8.unk0 + 1)) - (i * (D_80129FC8.unk0 + 1)) + D_80129FC8.unk0 - j] = sp34[i]; + D_800E304C[8][(D_80129FC8.unk0 * (D_80129FC8.unk0 + 1)) - (j * (D_80129FC8.unk0 + 1)) + D_80129FC8.unk0 - i] = sp34[i]; + // clang-format on + } + } +} + #pragma GLOBAL_ASM("asm/nonmatchings/waves/func_800BCC70.s") #pragma GLOBAL_ASM("asm/nonmatchings/waves/func_800BDC80.s") // https://decomp.me/scratch/2RF3k diff --git a/ver/symbols/symbol_addrs.jpn.v79.txt b/ver/symbols/symbol_addrs.jpn.v79.txt index d4306602..504a532b 100644 --- a/ver/symbols/symbol_addrs.jpn.v79.txt +++ b/ver/symbols/symbol_addrs.jpn.v79.txt @@ -4515,7 +4515,7 @@ D_8012A0D0 = 0x8012BB80; D_8012A0D4 = 0x8012BB84; D_8012A0D8 = 0x8012BB88; D_8012A0DC = 0x8012BB8C; -D_8012A0E0 = 0x8012BB90; +gNumberOfLevelSegments = 0x8012BB90; D_8012A0E8 = 0x8012BB98; D_8012A1E8 = 0x8012BC98; D_8012A5E8 = 0x8012C098; diff --git a/ver/symbols/symbol_addrs.pal.v77.txt b/ver/symbols/symbol_addrs.pal.v77.txt index baa753c3..3579efe8 100644 --- a/ver/symbols/symbol_addrs.pal.v77.txt +++ b/ver/symbols/symbol_addrs.pal.v77.txt @@ -4199,7 +4199,7 @@ D_8012A0D0 = 0x8012A160; D_8012A0D4 = 0x8012A164; D_8012A0D8 = 0x8012A168; D_8012A0DC = 0x8012A16C; -D_8012A0E0 = 0x8012A170; +gNumberOfLevelSegments = 0x8012A170; D_8012A0E8 = 0x8012A178; D_8012A1E8 = 0x8012A278; D_8012A5E8 = 0x8012A678; diff --git a/ver/symbols/symbol_addrs.pal.v80.txt b/ver/symbols/symbol_addrs.pal.v80.txt index 8a61125b..09b34f88 100644 --- a/ver/symbols/symbol_addrs.pal.v80.txt +++ b/ver/symbols/symbol_addrs.pal.v80.txt @@ -4134,7 +4134,7 @@ D_8012A0D0 = 0x8012A720; D_8012A0D4 = 0x8012A724; D_8012A0D8 = 0x8012A728; D_8012A0DC = 0x8012A72C; -D_8012A0E0 = 0x8012A730; +gNumberOfLevelSegments = 0x8012A730; D_8012A0E8 = 0x8012A738; D_8012A1E8 = 0x8012A838; D_8012A5E8 = 0x8012AC38; diff --git a/ver/symbols/symbol_addrs.us.v77.txt b/ver/symbols/symbol_addrs.us.v77.txt index a35fb706..a9297936 100644 --- a/ver/symbols/symbol_addrs.us.v77.txt +++ b/ver/symbols/symbol_addrs.us.v77.txt @@ -4644,7 +4644,7 @@ D_8012A0D0 = 0x8012A0D0; D_8012A0D4 = 0x8012A0D4; D_8012A0D8 = 0x8012A0D8; D_8012A0DC = 0x8012A0DC; -D_8012A0E0 = 0x8012A0E0; +gNumberOfLevelSegments = 0x8012A0E0; D_8012A0E8 = 0x8012A0E8; D_8012A1E8 = 0x8012A1E8; D_8012A5E8 = 0x8012A5E8; diff --git a/ver/symbols/symbol_addrs.us.v80.txt b/ver/symbols/symbol_addrs.us.v80.txt index 7a21f51c..55752d62 100644 --- a/ver/symbols/symbol_addrs.us.v80.txt +++ b/ver/symbols/symbol_addrs.us.v80.txt @@ -4129,7 +4129,7 @@ D_8012A0D0 = 0x8012A690; D_8012A0D4 = 0x8012A694; D_8012A0D8 = 0x8012A698; D_8012A0DC = 0x8012A69C; -D_8012A0E0 = 0x8012A6A0; +gNumberOfLevelSegments = 0x8012A6A0; D_8012A0E8 = 0x8012A6A8; D_8012A1E8 = 0x8012A7A8; D_8012A5E8 = 0x8012ABA8;