match: func_8002EEEC (#540)

* match: func_8002EEEC

* style: run format.sh
This commit is contained in:
Dominik Peters
2025-05-02 00:27:27 +02:00
committed by GitHub
parent 45208555b8
commit 55baf61e62
4 changed files with 124 additions and 35 deletions
+4 -4
View File
@@ -7,7 +7,7 @@ All versions are supported, and the US 1.0 version (SHA1 = 0cb115d8716dbbc2922fd
<!-- README_SCORE_SUMMARY_BEGIN -->
As of May 1, 2025, this is our current score:
&emsp;&emsp;&emsp;&emsp;Decomp progress: 81.98%
&emsp;&emsp;&emsp;&emsp;Decomp progress: 82.09%
&emsp;&emsp;&emsp;&emsp;Documentation progress: 53.79%
<!-- README_SCORE_SUMMARY_END -->
@@ -121,9 +121,9 @@ As of May 1, 2025, this is our current score:
```
=====================================================================
ADVENTURE ONE (ASM -> C Decompilation)
--------------- 81.98% Complete (84.79% NON_MATCHING) ---------------
# Decompiled functions: 1867
# GLOBAL_ASM remaining: 84
--------------- 82.09% Complete (84.90% NON_MATCHING) ---------------
# Decompiled functions: 1868
# GLOBAL_ASM remaining: 83
# NON_MATCHING functions: 13
# NON_EQUIVALENT WIP functions: 27
---------------------------- Game Status ----------------------------
+91 -4
View File
@@ -106,10 +106,10 @@ unk8011B330 D_8011B330[120]; // Struct sizeof(0x20) / sizeof(32)
s32 D_8011C230;
s32 D_8011C234;
unk8011C238 D_8011C238[32]; // Struct sizeof(0xC) / sizeof(12)
s32 D_8011C3B8[320];
s32 D_8011C8B8[512];
unk8011C3B8 D_8011C3B8[64];
unk8011C8B8 D_8011C8B8[128];
s32 D_8011D0B8;
Vec4f *D_8011D0BC;
unk8011C8B8 *D_8011D0BC;
TextureHeader *gNewShadowTexture;
Object *gNewShadowObj;
f32 D_8011D0C8;
@@ -3547,7 +3547,94 @@ void shadow_generate(Object *obj, s32 isWater) {
}
#pragma GLOBAL_ASM("asm/nonmatchings/tracks/func_8002E904.s")
#pragma GLOBAL_ASM("asm/nonmatchings/tracks/func_8002EEEC.s")
void func_8002EEEC(s32 arg0) {
unk8011C8B8 spA8[8];
f32 sp88[8];
s32 var_v0;
s32 var_a0;
s32 var_a1;
s32 temp_v0;
s32 temp_v0_3;
s32 var_s4;
s32 var_t1;
s32 var_v1;
s32 tempIdx;
sp88[0] = gNewShadowObj->segment.trans.x_position + gNewShadowWidth;
sp88[1] = gNewShadowObj->segment.trans.z_position + gNewShadowLength;
sp88[2] = gNewShadowObj->segment.trans.x_position - gNewShadowWidth;
sp88[3] = gNewShadowObj->segment.trans.z_position + gNewShadowLength;
sp88[4] = gNewShadowObj->segment.trans.x_position - gNewShadowWidth;
sp88[5] = gNewShadowObj->segment.trans.z_position - gNewShadowLength;
sp88[6] = gNewShadowObj->segment.trans.x_position + gNewShadowWidth;
sp88[7] = gNewShadowObj->segment.trans.z_position - gNewShadowLength;
temp_v0 = func_800BDC80(arg0, D_8011C3B8, &D_8011C8B8[D_8011D0B8], sp88[4], sp88[5], sp88[0], sp88[1]);
for (var_s4 = 0; var_s4 < temp_v0; var_s4++) {
var_a0 = D_8011C3B8[var_s4].unk2;
var_a1 = D_8011C3B8[var_s4].unk2;
if (D_8011C3B8[var_s4].unk8 < var_a1) {
var_a0 = D_8011C3B8[var_s4].unk8;
} else if (var_a1 < D_8011C3B8[var_s4].unk8) {
var_a1 = D_8011C3B8[var_s4].unk8;
}
if (D_8011C3B8[var_s4].unkE < var_a0) {
var_a0 = D_8011C3B8[var_s4].unkE;
} else if (var_a1 < D_8011C3B8[var_s4].unkE) {
var_a1 = D_8011C3B8[var_s4].unkE;
}
if (gNewShadowY2 >= var_a0) {
if (var_a1 >= gNewShadowY1) {
spA8[0].unk0 = D_8011C3B8[var_s4].unk0;
spA8[0].unk8 = D_8011C3B8[var_s4].unk4;
spA8[1].unk0 = D_8011C3B8[var_s4].unk6;
spA8[1].unk8 = D_8011C3B8[var_s4].unkA;
spA8[2].unk0 = D_8011C3B8[var_s4].unkC;
spA8[2].unk8 = D_8011C3B8[var_s4].unk10;
for (var_v0 = 0; var_v0 != 3; var_v0++) {
spA8[var_v0].unkE = -1;
}
D_8011D0BC = &D_8011C8B8[D_8011D0B8 + var_s4];
temp_v0_3 = func_8002FF6C(3, spA8, 4, sp88);
if (temp_v0_3 >= 3) {
tempIdx = D_8011C230;
D_8011C238[tempIdx].unk1 = 0;
for (var_t1 = 0; var_t1 < temp_v0_3; var_t1++) {
if (spA8[var_t1].unkE < 0) {
var_a1 = -1;
var_v1 = 0;
while (var_v1 < D_8011B118 && var_a1 == -1) {
if ((D_8011B120[var_v1].x == spA8[var_t1].unk0) &&
(D_8011B120[var_v1].z == spA8[var_t1].unk8)) {
var_a1 = var_v1;
}
var_v1++;
}
if (var_a1 == -1) {
D_8011B120[D_8011B118].x = spA8[var_t1].unk0;
D_8011B120[D_8011B118].unkC = (unk8011B120_unkC *) D_8011D0BC;
D_8011B120[D_8011B118].z = spA8[var_t1].unk8;
D_8011C238[tempIdx].unk2[var_t1] = D_8011B118++;
} else {
D_8011C238[tempIdx].unk2[var_t1] = var_a1;
}
} else {
D_8011C238[tempIdx].unk2[var_t1] = spA8[var_t1].unkE;
D_8011C238[tempIdx].unk1 |= 1 << var_t1;
}
}
D_8011C230 = tempIdx + 1;
D_8011C238[tempIdx].unk0 = temp_v0_3;
}
}
}
}
D_8011D0B8 += temp_v0;
}
#ifdef NON_EQUIVALENT
void func_8002F2AC(void) {
+26
View File
@@ -103,6 +103,30 @@ typedef struct unk8011D478 {
s8 unk7;
} unk8011D478;
/* Size: 0x10 bytes */
typedef struct unk8011C8B8 {
f32 unk0;
f32 unk4;
f32 unk8;
s16 unkC;
s16 unkE;
} unk8011C8B8;
/* Size: 0x14 bytes */
typedef struct unk8011C3B8 {
s16 unk0;
s16 unk2;
s16 unk4;
s16 unk6;
s16 unk8;
s16 unkA;
s16 unkC;
s16 unkE;
s16 unk10;
s16 unk12;
} unk8011C3B8;
// In this struct, data is rightshifted 16 bytes, so make the smooth transition more precise.
typedef struct EnvironmentFog {
s32 r;
@@ -212,5 +236,7 @@ void func_80025510(s32);
void func_8002C0C4(s32 modelId);
void func_800304C8(Vec4f *arg0);
s32 func_80027184(f32 *arg0, f32 *arg1, f32 arg2, f32 arg3);
s32 func_8002FF6C(s32, unk8011C8B8 *, s32, f32 *);
s32 func_800BDC80(s32, unk8011C3B8 *, unk8011C8B8 *, f32, f32, f32, f32);
#endif
+3 -27
View File
@@ -1776,31 +1776,7 @@ void func_800BCC70(LevelModel *arg0) {
}
#ifdef NON_EQUIVALENT
typedef struct unkArg1 {
s16 unk0;
s16 unk2;
s16 unk4;
s16 unk6;
s16 unk8;
s16 unkA;
s16 unkC;
s16 unkE;
s16 unk10;
s16 unk12;
} unkArg1;
typedef struct unkArg2 {
f32 unk0;
f32 unk4;
f32 unk8;
f32 unkC;
} unkArg2;
// arg0
// arg1 is s32 D_8011C3B8[320]; according to func_8002EEEC
// arg2 might be s32 D_8011C8B8[512]
s32 func_800BDC80(s32 arg0, unkArg1 *arg1, unkArg2 *arg2, f32 shadowXNegPosition, f32 shadowZNegPosition,
s32 func_800BDC80(s32 arg0, unk8011C3B8 *arg1, unk8011C8B8 *arg2, f32 shadowXNegPosition, f32 shadowZNegPosition,
f32 shadowXPosition, f32 shadowZPosition) {
s32 sp36C;
s32 sp368;
@@ -1840,9 +1816,9 @@ s32 func_800BDC80(s32 arg0, unkArg1 *arg1, unkArg2 *arg2, f32 shadowXNegPosition
f32 spC8;
s32 var_v0;
s32 spA4;
unkArg2 *var_v0_4;
unk8011C8B8 *var_v0_4;
s32 sp98;
unkArg1 *var_s0_2;
unk8011C3B8 *var_s0_2;
s32 sp90;
s32 temp3_2;
s32 temp4_2;