mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
match: func_800BE654 (#537)
* match: func_800BE654 * lint: run format.sh * refac: replace 0xFFFFFFF with COLOUR_TAG_CYAN
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 28, 2025, this is our current score:
|
||||
As of April 29, 2025, this is our current score:
|
||||
|
||||
    Decomp progress: 81.27%
|
||||
    Decomp progress: 81.51%
|
||||
|
||||
    Documentation progress: 53.79%
|
||||
<!-- README_SCORE_SUMMARY_END -->
|
||||
@@ -117,20 +117,20 @@ s32 is_drumstick_unlocked(void) {
|
||||
```
|
||||
|
||||
<!-- README_SCORE_BEGIN -->
|
||||
As of April 28, 2025, this is our current score:
|
||||
As of April 29, 2025, this is our current score:
|
||||
```
|
||||
========================================================
|
||||
ADVENTURE ONE (ASM -> C Decompilation)
|
||||
-------- 81.27% Complete (84.08% NON_MATCHING) ---------
|
||||
# Decompiled functions: 1865
|
||||
# GLOBAL_ASM remaining: 86
|
||||
-------- 81.51% Complete (84.33% NON_MATCHING) ---------
|
||||
# Decompiled functions: 1866
|
||||
# GLOBAL_ASM remaining: 85
|
||||
# NON_MATCHING functions: 13
|
||||
# NON_EQUIVALENT WIP functions: 27
|
||||
--------------------- Game Status ----------------------
|
||||
Balloons: 39/47, Keys: 4/4, Trophies: 3/5
|
||||
T.T. Amulets: 4/4, Wizpig Amulets: 3/4
|
||||
--------------------------------------------------------
|
||||
We are racing in the rematch against Smokey. (Lap 2/3)
|
||||
We are racing in the rematch against Smokey. (Lap 3/3)
|
||||
========================================================
|
||||
ADVENTURE TWO (Cleanup & Documentation)
|
||||
------------------- 53.79% Complete --------------------
|
||||
|
||||
+11
-3
@@ -1065,9 +1065,17 @@ typedef struct Object_Boost {
|
||||
} Object_Boost;
|
||||
|
||||
typedef struct Object_EffectBox {
|
||||
/* 0x000 */ u8 pad0[0x1FE];
|
||||
/* 0x1FE */ u8 unk1FE;
|
||||
/* 0x1FF */ u8 unk1FF;
|
||||
s16 unk0;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
s16 unk4;
|
||||
s16 unk6;
|
||||
s16 unk8;
|
||||
s16 unkA;
|
||||
s16 unkC;
|
||||
s8 unkE[0x1FE - 0xE];
|
||||
u8 unk1FE;
|
||||
u8 unk1FF;
|
||||
} Object_EffectBox;
|
||||
|
||||
typedef struct Object_EggCreator {
|
||||
|
||||
+2
-2
@@ -2192,7 +2192,7 @@ s32 check_if_in_draw_range(Object *obj) {
|
||||
case BHV_HIT_TESTER_2: // animated objects?
|
||||
case BHV_ANIMATED_OBJECT_2: // space ships
|
||||
obj64 = obj->unk64;
|
||||
obj->segment.object.opacity = obj64->effect_box.pad0[0x42];
|
||||
obj->segment.object.opacity = obj64->wizpig2.pad0[0x42];
|
||||
break;
|
||||
case BHV_PARK_WARDEN:
|
||||
case BHV_GOLDEN_BALLOON:
|
||||
@@ -3686,7 +3686,7 @@ void func_800304C8(Vec4f *arg0) {
|
||||
temp = (gNewShadowObj->segment.trans.z_position - arg0[1].z);
|
||||
|
||||
if ((((gNewShadowObj->segment.trans.x_position - arg0[0].x) * (arg0[1].z - arg00z)) -
|
||||
((arg0[1].x - arg0[0].x) * (((0, gNewShadowObj->segment.trans.z_position)) -arg00z))) >= compare) {
|
||||
((arg0[1].x - arg0[0].x) * (((0, gNewShadowObj->segment.trans.z_position)) - arg00z))) >= compare) {
|
||||
found1 = TRUE;
|
||||
}
|
||||
if ((((gNewShadowObj->segment.trans.x_position - arg0[1].x) * (arg0[2].z - arg0[1].z)) -
|
||||
|
||||
+197
-2
@@ -1834,8 +1834,203 @@ s32 func_800BDC80(s32 arg0, unkArg1 *arg1, unkArg2 *arg2, f32 shadowXNegPosition
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/waves/func_800BDC80.s")
|
||||
#endif
|
||||
// https://decomp.me/scratch/2RF3k
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/waves/func_800BE654.s")
|
||||
|
||||
Object_64 *func_800BE654(s32 arg0, f32 arg1, f32 arg2) {
|
||||
f32 spE4;
|
||||
f32 temp_f;
|
||||
s32 pad;
|
||||
f32 var_f0;
|
||||
s32 pad2;
|
||||
f32 var_f12;
|
||||
s32 var_t4;
|
||||
f32 temp_f2;
|
||||
s32 spC4;
|
||||
s32 spC0;
|
||||
f32 var_f18;
|
||||
f32 var_f20;
|
||||
f32 var_f22;
|
||||
s32 spB0;
|
||||
s32 var_t1;
|
||||
s32 var_a0;
|
||||
s16 var_t0;
|
||||
s16 var_v1;
|
||||
s16 var_a3;
|
||||
s16 var_a1;
|
||||
f32 var_f2;
|
||||
s32 var_v0;
|
||||
f32 var_f14;
|
||||
s32 var_v0_2;
|
||||
s32 var_a2;
|
||||
s32 sp80[3];
|
||||
s32 sp68[6];
|
||||
s32 sp5C[3];
|
||||
f32 sp50[3];
|
||||
Object_64 *object;
|
||||
|
||||
var_t0 = 0x80;
|
||||
object = NULL;
|
||||
if ((D_800E3040 != NULL) && (arg0 >= 0) && (arg0 < gNumberOfLevelSegments)) {
|
||||
object = mempool_alloc_safe((D_80129FC8.unk20 >> 1) + 0xE, COLOUR_TAG_CYAN);
|
||||
object->effect_box.unk0 = D_800E30D8[arg0].unk6;
|
||||
object->effect_box.unk2 = 0;
|
||||
object->effect_box.unk3 = 1;
|
||||
object->effect_box.unk4 = 0;
|
||||
object->effect_box.unk6 = D_80129FC8.unk20;
|
||||
var_f20 = D_8012A0BC;
|
||||
var_f22 = D_8012A0B8;
|
||||
temp_f2 = (1.0f - D_80129FC8.unk44) / 127.0f;
|
||||
var_f2 = temp_f2;
|
||||
spB0 = (arg0 * D_800E317C);
|
||||
if (D_80129FC8.unk28 != 0) {
|
||||
var_t4 = (D_80129FC8.unk0 * 2) + 1;
|
||||
var_f20 *= 0.5f;
|
||||
var_f22 *= 0.5f;
|
||||
} else {
|
||||
var_t4 = D_80129FC8.unk0 + 1;
|
||||
}
|
||||
arg1 -= D_800E30D8[arg0].unk4;
|
||||
if (arg1 < 0.0f) {
|
||||
arg1 = 0.0f;
|
||||
// clang-format off
|
||||
} else if (arg1 >= D_8012A0A0) { \
|
||||
arg1 = D_8012A0A0 - 1;
|
||||
// clang-format on
|
||||
}
|
||||
arg2 -= D_800E30D8[arg0].unk8;
|
||||
if (arg2 < 0.0f) {
|
||||
arg2 = 0.0f;
|
||||
} else if (D_8012A0A4 <= arg2) {
|
||||
arg2 = D_8012A0A4 - 1;
|
||||
}
|
||||
spC4 = arg1 / var_f22;
|
||||
spC0 = arg2 / var_f20;
|
||||
object->effect_box.unk8 = spC4;
|
||||
object->effect_box.unkA = spC0;
|
||||
object->effect_box.unkC = arg0;
|
||||
arg1 -= (spC4 * var_f22);
|
||||
arg2 -= (spC0 * var_f20);
|
||||
var_a0 = D_800E30D8[arg0].unk12 + spC4;
|
||||
while (var_a0 >= D_80129FC8.unk4) {
|
||||
var_a0 -= D_80129FC8.unk4;
|
||||
}
|
||||
|
||||
var_v0 = D_800E30D8[arg0].unk10 + spC0;
|
||||
while (var_v0 >= D_80129FC8.unk4) {
|
||||
var_v0 -= D_80129FC8.unk4;
|
||||
}
|
||||
|
||||
var_t1 = 0;
|
||||
if ((arg2 != var_f20) && (arg1 < (((var_f20 - arg2) / var_f20) * var_f22))) {
|
||||
var_t1 = 1;
|
||||
}
|
||||
|
||||
if (var_t1 != 0) {
|
||||
sp80[0] = (var_v0 * D_80129FC8.unk4) + var_a0;
|
||||
|
||||
if ((var_v0 + 1) >= D_80129FC8.unk4) {
|
||||
sp80[1] = var_a0;
|
||||
} else {
|
||||
sp80[1] = ((var_v0 + 1) * D_80129FC8.unk4) + var_a0;
|
||||
}
|
||||
|
||||
if ((var_a0 + 1) >= D_80129FC8.unk4) {
|
||||
sp80[2] = (var_v0 * D_80129FC8.unk4);
|
||||
} else {
|
||||
sp80[2] = (var_v0 * D_80129FC8.unk4) + var_a0 + 1;
|
||||
}
|
||||
|
||||
spE4 = 0.0f;
|
||||
sp5C[0] = (spB0 + spC4) + (spC0 * var_t4);
|
||||
sp5C[1] = (spB0 + spC4) + ((spC0 + 1) * var_t4);
|
||||
sp5C[2] = (spB0 + spC4) + (spC0 * var_t4) + 1;
|
||||
} else {
|
||||
if ((var_a0 + 1) >= D_80129FC8.unk4) {
|
||||
sp80[0] = var_v0 * D_80129FC8.unk4;
|
||||
} else {
|
||||
sp80[0] = var_a0 + 1 + (var_v0 * D_80129FC8.unk4);
|
||||
}
|
||||
|
||||
if ((var_v0 + 1) >= D_80129FC8.unk4) {
|
||||
sp80[1] = var_a0;
|
||||
} else {
|
||||
sp80[1] = ((var_v0 + 1) * D_80129FC8.unk4) + var_a0;
|
||||
}
|
||||
|
||||
if ((var_a0 + 1) >= D_80129FC8.unk4) {
|
||||
sp80[2] = 0;
|
||||
} else {
|
||||
sp80[2] = var_a0 + 1;
|
||||
}
|
||||
|
||||
if ((var_v0 + 1) < D_80129FC8.unk4) {
|
||||
sp80[2] += (var_v0 + 1) * D_80129FC8.unk4;
|
||||
}
|
||||
|
||||
spE4 = var_f22;
|
||||
sp5C[0] = (spC4 + spB0) + (spC0 * var_t4) + 1;
|
||||
sp5C[1] = (spC4 + spB0) + (spC0 + 1) * var_t4;
|
||||
sp5C[2] = (spC4 + spB0) + (spC0 + 1) * var_t4 + 1;
|
||||
}
|
||||
|
||||
for (var_a3 = 0; var_a3 < 3; var_a3++) {
|
||||
sp68[var_a3 * 2] = D_800E3044[sp80[var_a3]].s[0];
|
||||
sp68[var_a3 * 2 + 1] = D_800E3044[sp80[var_a3]].s[1];
|
||||
sp50[var_a3] = 1.0f;
|
||||
|
||||
var_a2 = D_800E3178[sp5C[var_a3]];
|
||||
if (var_a2 < 0x7F) {
|
||||
sp50[var_a3] *= D_80129FC8.unk44 + (var_a2 * var_f2);
|
||||
}
|
||||
}
|
||||
|
||||
if (D_80129FC8.unk28 != 0) {
|
||||
sp50[0] *= 0.5;
|
||||
sp50[1] *= 0.5;
|
||||
sp50[2] *= 0.5;
|
||||
}
|
||||
|
||||
for (var_a3 = 0; var_a3 < (D_80129FC8.unk20 >> 1); var_a3++) {
|
||||
temp_f = (D_800E3040[sp68[0]] + D_800E3040[sp68[1]]) * sp50[0];
|
||||
var_f12 = (D_800E3040[sp68[2]] + D_800E3040[sp68[3]]) * sp50[1];
|
||||
var_f0 = (D_800E3040[sp68[4]] + D_800E3040[sp68[5]]) * sp50[2];
|
||||
if (var_t1 != 0) {
|
||||
var_f2 = (temp_f - var_f0) * var_f20;
|
||||
var_f14 = (temp_f - var_f12) * var_f22;
|
||||
} else {
|
||||
var_f2 = (var_f12 - var_f0) * var_f20;
|
||||
var_f14 = (temp_f - var_f0) * var_f22;
|
||||
}
|
||||
var_f18 = var_f20 * var_f22;
|
||||
var_f0 = sqrtf((var_f2 * var_f2) + (var_f18 * var_f18) + (var_f14 * var_f14));
|
||||
var_f2 /= var_f0;
|
||||
var_f14 /= var_f0;
|
||||
var_f12 = var_f18 / var_f0;
|
||||
var_v0_2 = -(s32) (((var_f2 * arg1) + (var_f14 * arg2) - ((spE4 * var_f2) + (temp_f * var_f12))) * 16.0f /
|
||||
var_f12);
|
||||
if ((var_v0_2 >= var_t0) || (var_v0_2 < -var_t0)) {
|
||||
var_v1 = 0;
|
||||
do {
|
||||
var_t0 += var_t0;
|
||||
var_v1++;
|
||||
} while (var_v0_2 >= var_t0 || var_v0_2 < -var_t0);
|
||||
|
||||
for (var_a1 = 0; var_a1 < var_a3; var_a1++) {
|
||||
object->effect_box.unkE[var_a1] >>= var_v1;
|
||||
}
|
||||
object->effect_box.unk2 += var_v1;
|
||||
}
|
||||
object->effect_box.unkE[var_a3] = (var_v0_2 >> object->effect_box.unk2);
|
||||
for (var_a1 = 0; var_a1 < 6; var_a1++) {
|
||||
sp68[var_a1] += 2;
|
||||
while (sp68[var_a1] >= D_80129FC8.unk20) {
|
||||
sp68[var_a1] -= D_80129FC8.unk20;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the wave height and returns it for the spinning log object.
|
||||
|
||||
+1
-1
@@ -145,7 +145,7 @@ unk800E3190 *func_800BF634(Object *obj, f32 xPos, f32 zPos, f32 arg3, s32 arg4,
|
||||
void wave_init(void);
|
||||
void func_800BA4B8(TextureHeader *tex, s32 rtile);
|
||||
|
||||
Object_64 *func_800BE654(s16, f32, f32); // Non Matching
|
||||
Object_64 *func_800BE654(s32, f32, f32);
|
||||
void func_800BBF78(LevelModel *model); // Non Matching
|
||||
f32 func_800BB2F4(s32, f32, f32, Vec3f *);
|
||||
void func_800B8C04(s32, s32, s32, s32, s32);
|
||||
|
||||
Reference in New Issue
Block a user