mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
match: func_800BB2F4 (#502)
This commit is contained in:
@@ -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.
|
||||
|
||||
<!-- README_SCORE_SUMMARY_BEGIN -->
|
||||
As of April 6, 2025, this is our current score:
|
||||
As of April 8, 2025, this is our current score:
|
||||
|
||||
    Decomp progress: 77.14%
|
||||
    Decomp progress: 77.46%
|
||||
|
||||
    Documentation progress: 49.86%
|
||||
<!-- README_SCORE_SUMMARY_END -->
|
||||
@@ -117,30 +117,30 @@ s32 is_drumstick_unlocked(void) {
|
||||
```
|
||||
|
||||
<!-- README_SCORE_BEGIN -->
|
||||
As of April 6, 2025, this is our current score:
|
||||
As of April 8, 2025, this is our current score:
|
||||
```
|
||||
=======================================================================
|
||||
ADVENTURE ONE (ASM -> C Decompilation)
|
||||
---------------- 77.14% Complete (79.75% NON_MATCHING) ----------------
|
||||
# Decompiled functions: 1840
|
||||
# GLOBAL_ASM remaining: 111
|
||||
# NON_MATCHING functions: 14
|
||||
# NON_EQUIVALENT WIP functions: 36
|
||||
----------------------------- Game Status -----------------------------
|
||||
Balloons: 36/47, Keys: 4/4, Trophies: 3/5
|
||||
T.T. Amulets: 4/4, Wizpig Amulets: 3/4
|
||||
-----------------------------------------------------------------------
|
||||
We are collecting silver coins in Greenwood Village. (8/8 silver coins)
|
||||
=======================================================================
|
||||
ADVENTURE TWO (Cleanup & Documentation)
|
||||
--------------------------- 49.86% Complete ---------------------------
|
||||
# Documented functions: 1089
|
||||
# Undocumented remaining: 565
|
||||
----------------------------- Game Status -----------------------------
|
||||
Balloons: 24/47, Keys: 3/4, Trophies: 2/5
|
||||
T.T. Amulets: 2/4, Wizpig Amulets: 2/4
|
||||
-----------------------------------------------------------------------
|
||||
We are racing in Pirate Lagoon. (Lap 3/3)
|
||||
=======================================================================
|
||||
====================================================================
|
||||
ADVENTURE ONE (ASM -> C Decompilation)
|
||||
-------------- 77.46% Complete (80.07% NON_MATCHING) ---------------
|
||||
# Decompiled functions: 1841
|
||||
# GLOBAL_ASM remaining: 110
|
||||
# NON_MATCHING functions: 14
|
||||
# NON_EQUIVALENT WIP functions: 36
|
||||
--------------------------- Game Status ----------------------------
|
||||
Balloons: 37/47, Keys: 4/4, Trophies: 3/5
|
||||
T.T. Amulets: 4/4, Wizpig Amulets: 3/4
|
||||
--------------------------------------------------------------------
|
||||
We are collecting silver coins in Boulder Canyon. (1/8 silver coins)
|
||||
====================================================================
|
||||
ADVENTURE TWO (Cleanup & Documentation)
|
||||
------------------------- 49.86% Complete --------------------------
|
||||
# Documented functions: 1089
|
||||
# Undocumented remaining: 565
|
||||
--------------------------- Game Status ----------------------------
|
||||
Balloons: 24/47, Keys: 3/4, Trophies: 2/5
|
||||
T.T. Amulets: 2/4, Wizpig Amulets: 2/4
|
||||
--------------------------------------------------------------------
|
||||
We are racing in Pirate Lagoon. (Lap 3/3)
|
||||
====================================================================
|
||||
```
|
||||
<!-- README_SCORE_END -->
|
||||
|
||||
+194
-3
@@ -49,7 +49,7 @@ s16 D_800E3110[26] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
|
||||
|
||||
s16 D_800E3144[26] = { 0, 1, 1, 1, 2, 3, 4, 4, 4, 5, 3, 4, 4, 4, 5, 3, 4, 4, 4, 5, 6, 7, 7, 7, 8, 0 };
|
||||
|
||||
s32 *D_800E3178 = NULL;
|
||||
u8 *D_800E3178 = NULL;
|
||||
s32 D_800E317C = 0;
|
||||
LevelHeader_70 *D_800E3180 = NULL;
|
||||
unk800E3184 *D_800E3184 = NULL;
|
||||
@@ -629,7 +629,7 @@ void func_800B92F4(s32 arg0, s32 arg1) {
|
||||
var_f20 += func_800BEFC4(arg0, j + sp8C, i + sp88);
|
||||
}
|
||||
var_f20 *= D_800E304C[sp98][vertexIdx];
|
||||
var_v0 = ((u8 *) ((s32) D_800E3178 + D_8012A5E8[k].unk8))[0];
|
||||
var_v0 = D_800E3178[D_8012A5E8[k].unk8];
|
||||
|
||||
// clang-format off
|
||||
var_v0 <<= 1; \
|
||||
@@ -819,7 +819,198 @@ void func_800BA288(s32 arg0, s32 arg1) {
|
||||
// https://decomp.me/scratch/h4uac
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/waves/func_800BA4B8.s")
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/waves/func_800BA8E4.s")
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/waves/func_800BB2F4.s")
|
||||
|
||||
f32 func_800BB2F4(s32 arg0, f32 arg1, f32 arg2, Vec3f *arg3) {
|
||||
f32 spA4;
|
||||
f32 spA0;
|
||||
f32 var_f12; // sp9C
|
||||
f32 var_f2; // sp98
|
||||
f32 sp94;
|
||||
f32 sp90;
|
||||
f32 var_f16; // sp8C
|
||||
f32 arg3X; // sp8C
|
||||
f32 arg3Z; // sp84
|
||||
f32 arg3Y; // sp80
|
||||
s32 var_a0;
|
||||
f32 sp78;
|
||||
s32 var_v0;
|
||||
s32 sp70;
|
||||
s32 sp6C;
|
||||
s32 var_t0; // sp68
|
||||
s32 var_a3; // sp64
|
||||
s32 sp60;
|
||||
u8 *tempD_800E3178;
|
||||
s32 sp58;
|
||||
s32 pad;
|
||||
|
||||
if ((arg0 < 0) || (arg0 >= D_8012A0E0)) {
|
||||
arg0 = 0;
|
||||
}
|
||||
|
||||
sp78 = D_800E30D8[arg0].unk6;
|
||||
|
||||
sp90 = D_8012A0BC;
|
||||
sp94 = D_8012A0B8;
|
||||
var_f16 = (1.0f - D_80129FC8.unk44) / 127.0f;
|
||||
sp58 = arg0 * D_800E317C;
|
||||
|
||||
if (D_80129FC8.unk28 != 0) {
|
||||
sp90 *= 0.5f;
|
||||
sp94 *= 0.5f;
|
||||
sp60 = (D_80129FC8.unk0 * 2) + 1;
|
||||
} else {
|
||||
sp60 = D_80129FC8.unk0 + 1;
|
||||
}
|
||||
|
||||
arg1 -= D_800E30D8[arg0].unk4;
|
||||
if (arg1 < 0.0f) {
|
||||
arg1 = 0.0f;
|
||||
} else if (D_8012A0A0 <= arg1) {
|
||||
arg1 = D_8012A0A0 - 1; // needs to be 1 instead of 1.0f
|
||||
}
|
||||
|
||||
arg2 -= D_800E30D8[arg0].unk8;
|
||||
if (arg2 < 0.0f) {
|
||||
arg2 = 0.0f;
|
||||
} else if (D_8012A0A4 <= arg2) {
|
||||
arg2 = D_8012A0A4 - 1; // needs to be 1 instead of 1.0f
|
||||
}
|
||||
|
||||
sp70 = arg1 / sp94;
|
||||
sp6C = arg2 / sp90;
|
||||
arg1 -= sp70 * sp94;
|
||||
arg2 -= sp6C * sp90;
|
||||
|
||||
var_t0 = D_800E30D8[arg0].unk12 + sp70;
|
||||
while (var_t0 >= D_80129FC8.unk4) {
|
||||
var_t0 -= D_80129FC8.unk4;
|
||||
}
|
||||
|
||||
var_a3 = D_800E30D8[arg0].unk10 + sp6C;
|
||||
while (var_a3 >= D_80129FC8.unk4) {
|
||||
var_a3 -= D_80129FC8.unk4;
|
||||
}
|
||||
|
||||
var_v0 = 0;
|
||||
if ((arg2 != sp90) && (arg1 < (((sp90 - arg2) / sp90) * sp94))) {
|
||||
var_v0 = 1;
|
||||
}
|
||||
|
||||
if (var_v0) {
|
||||
var_a0 = (var_a3 * D_80129FC8.unk4) + var_t0;
|
||||
spA0 = (D_800E3040[D_800E3044[var_a0].s[0]] + D_800E3040[D_800E3044[var_a0].s[1]]) * D_80129FC8.magnitude;
|
||||
var_a0 = sp58 + sp70 + (sp6C * sp60);
|
||||
if (D_800E3188 > 0) {
|
||||
spA0 += func_800BEFC4(arg0, sp70, sp6C);
|
||||
}
|
||||
|
||||
var_v0 = D_800E3178[var_a0];
|
||||
if (D_800E3178[var_a0] < 0x7F) {
|
||||
spA0 *= D_80129FC8.unk44 + (var_v0 * var_f16);
|
||||
}
|
||||
|
||||
var_a0 = (var_a3 + 1) >= D_80129FC8.unk4 ? var_t0 : ((var_a3 + 1) * D_80129FC8.unk4) + var_t0;
|
||||
var_f12 = (D_800E3040[D_800E3044[var_a0].s[0]] + D_800E3040[D_800E3044[var_a0].s[1]]) * D_80129FC8.magnitude;
|
||||
if (D_800E3188 > 0) {
|
||||
var_f12 += func_800BEFC4(arg0, sp70, sp6C + 1);
|
||||
}
|
||||
var_a0 = sp58 + sp70 + ((sp6C + 1) * sp60);
|
||||
var_v0 = D_800E3178[var_a0];
|
||||
if (D_800E3178[var_a0] < 0x7F) {
|
||||
var_f12 *= D_80129FC8.unk44 + (var_v0 * var_f16);
|
||||
}
|
||||
|
||||
var_a0 = (var_t0 + 1) >= D_80129FC8.unk4 ? var_a3 * D_80129FC8.unk4 : (var_t0 ^ 0) + var_a3 * D_80129FC8.unk4 + 1;
|
||||
var_f2 = (D_800E3040[D_800E3044[var_a0].s[0]] + D_800E3040[D_800E3044[var_a0].s[1]]) * D_80129FC8.magnitude;
|
||||
if (D_800E3188 > 0) {
|
||||
var_f2 += func_800BEFC4(arg0, sp70 + 1, sp6C);
|
||||
}
|
||||
var_a0 = sp58 + sp70 + (sp6C * sp60);
|
||||
var_a0 += 1;
|
||||
var_v0 = D_800E3178[var_a0];
|
||||
if (D_800E3178[var_a0] < 0x7F) {
|
||||
var_f2 *= D_80129FC8.unk44 + (var_v0 * var_f16);
|
||||
}
|
||||
|
||||
if (D_80129FC8.unk28 != 0) {
|
||||
spA0 *= 0.5f;
|
||||
var_f12 *= 0.5f;
|
||||
var_f2 *= 0.5f;
|
||||
}
|
||||
|
||||
spA4 = 0.0f;
|
||||
arg3X = (spA0 - var_f2) * sp90;
|
||||
arg3Z = sp90 * sp94;
|
||||
arg3Y = (spA0 - var_f12) * sp94;
|
||||
} else {
|
||||
var_a0 = (var_t0 + 1) >= D_80129FC8.unk4 ? var_a3 * D_80129FC8.unk4 : (var_t0 ^ 0) + (var_a3 * D_80129FC8.unk4) + 1;
|
||||
spA0 = (D_800E3040[D_800E3044[var_a0].s[0]] + D_800E3040[D_800E3044[var_a0].s[1]]) * D_80129FC8.magnitude;
|
||||
if (D_800E3188 > 0) {
|
||||
spA0 += func_800BEFC4(arg0, sp70 + 1, sp6C);
|
||||
}
|
||||
var_a0 = sp58 + sp70 + (sp6C * sp60);
|
||||
var_a0 += 1;
|
||||
var_v0 = D_800E3178[var_a0];
|
||||
if (D_800E3178[var_a0] < 0x7F) {
|
||||
spA0 *= D_80129FC8.unk44 + (var_v0 * var_f16);
|
||||
}
|
||||
|
||||
var_a0 = (var_a3 + 1) >= D_80129FC8.unk4 ? var_t0 : ((var_a3 + 1) * D_80129FC8.unk4) + var_t0;
|
||||
var_f12 = (D_800E3040[D_800E3044[var_a0].s[0]] + D_800E3040[D_800E3044[var_a0].s[1]]) * D_80129FC8.magnitude;
|
||||
if (D_800E3188 > 0) {
|
||||
var_f12 += func_800BEFC4(arg0, sp70, sp6C + 1);
|
||||
}
|
||||
var_a0 = sp58 + sp70 + ((sp6C + 1) * sp60);
|
||||
var_v0 = (tempD_800E3178 = D_800E3178)[var_a0];
|
||||
if (var_v0 < 0x7F) {
|
||||
var_f12 *= D_80129FC8.unk44 + (var_v0 * var_f16);
|
||||
}
|
||||
|
||||
var_a0 = (var_t0 + 1) >= D_80129FC8.unk4 ? 0 : (var_t0 + 1);
|
||||
if ((var_a3 + 1) < D_80129FC8.unk4) {
|
||||
var_a0 += (var_a3 + 1) * D_80129FC8.unk4;
|
||||
}
|
||||
|
||||
var_f2 = (D_800E3040[D_800E3044[var_a0].s[0]] + D_800E3040[D_800E3044[var_a0].s[1]]) * D_80129FC8.magnitude;
|
||||
if (D_800E3188 > 0) {
|
||||
var_f2 += func_800BEFC4(arg0, sp70 + 1, sp6C + 1);
|
||||
}
|
||||
var_a0 = sp58 + sp70 + ((sp6C + 1) * sp60);
|
||||
var_a0 += 1;
|
||||
var_v0 = D_800E3178[var_a0];
|
||||
if (var_v0 < 0x7F) {
|
||||
var_f2 *= D_80129FC8.unk44 + (var_v0 * var_f16);
|
||||
}
|
||||
|
||||
if (D_80129FC8.unk28 != 0) {
|
||||
spA0 *= 0.5f;
|
||||
var_f12 *= 0.5f;
|
||||
var_f2 *= 0.5f;
|
||||
}
|
||||
|
||||
spA4 = sp94;
|
||||
arg3X = sp90 * (var_f12 - var_f2);
|
||||
arg3Z = sp90 * sp94;
|
||||
arg3Y = sp94 * (spA0 - var_f2);
|
||||
}
|
||||
|
||||
var_f16 = sqrtf((arg3X * arg3X) + (arg3Z * arg3Z) + (arg3Y * arg3Y));
|
||||
if (var_f16 != 0.0 && arg3Z != 0.0) {
|
||||
arg3X /= var_f16;
|
||||
arg3Z /= var_f16;
|
||||
arg3Y /= var_f16;
|
||||
sp78 -= (((arg3X * arg1) + (arg3Y * arg2)) - ((spA4 * arg3X) + (spA0 * arg3Z))) / arg3Z;
|
||||
}
|
||||
|
||||
if (arg3) {
|
||||
arg3->x = arg3X;
|
||||
arg3->y = arg3Z;
|
||||
arg3->z = arg3Y;
|
||||
}
|
||||
|
||||
return sp78;
|
||||
}
|
||||
|
||||
|
||||
void func_800BBDDC(LevelModel *level, LevelHeader *header) {
|
||||
func_800BBE08(level, (unk800BBE08_arg1 *) header);
|
||||
|
||||
+1
-1
@@ -134,7 +134,7 @@ void wave_init(void);
|
||||
|
||||
Object_64 *func_800BE654(s16, f32, f32); // Non Matching
|
||||
void func_800BBF78(LevelModel *arg0); // Non Matching
|
||||
f32 func_800BB2F4(s32, f32, f32, f32*);
|
||||
f32 func_800BB2F4(s32, f32, f32, Vec3f *);
|
||||
void func_800B8C04(s32, s32, s32, s32, s32);
|
||||
void func_800BF524(Object *);
|
||||
f32 func_800BEFC4(s32, s32, s32);
|
||||
|
||||
Reference in New Issue
Block a user