mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
improve match for func_800BDC80 & match func_80060EA8, func_8002F2AC (#609)
* improve match for func_800BDC80 & match func_80060EA8 * match: func_8002F2AC
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 June 5, 2025, this is our current score:
|
||||
As of June 8, 2025, this is our current score:
|
||||
|
||||
    Decomp progress: 89.17%
|
||||
    Decomp progress: 89.54%
|
||||
|
||||
    Documentation progress: 59.17%
|
||||
<!-- README_SCORE_SUMMARY_END -->
|
||||
@@ -117,20 +117,20 @@ s32 is_drumstick_unlocked(void) {
|
||||
```
|
||||
|
||||
<!-- README_SCORE_BEGIN -->
|
||||
As of June 5, 2025, this is our current score:
|
||||
As of June 8, 2025, this is our current score:
|
||||
```
|
||||
====================================================================
|
||||
ADVENTURE ONE (ASM -> C Decompilation)
|
||||
-------------- 89.17% Complete (90.50% NON_MATCHING) ---------------
|
||||
# Decompiled functions: 1907
|
||||
# GLOBAL_ASM remaining: 44
|
||||
-------------- 89.54% Complete (90.88% NON_MATCHING) ---------------
|
||||
# Decompiled functions: 1909
|
||||
# GLOBAL_ASM remaining: 42
|
||||
# NON_MATCHING functions: 6
|
||||
# NON_EQUIVALENT WIP functions: 23
|
||||
# NON_EQUIVALENT WIP functions: 21
|
||||
--------------------------- Game Status ----------------------------
|
||||
Balloons: 41/47, Keys: 4/4, Trophies: 4/5
|
||||
Balloons: 42/47, Keys: 4/4, Trophies: 4/5
|
||||
T.T. Amulets: 4/4, Wizpig Amulets: 4/4
|
||||
--------------------------------------------------------------------
|
||||
We are racing in Spaceport Alpha. (Lap 3/3)
|
||||
We are racing in Star City. (Lap 1/3)
|
||||
====================================================================
|
||||
ADVENTURE TWO (Cleanup & Documentation)
|
||||
------------------------- 59.17% Complete --------------------------
|
||||
|
||||
+158
-302
File diff suppressed because it is too large
Load Diff
+6
-6
@@ -2460,7 +2460,7 @@ void func_800101AC(Object *obj, s32 arg1) {
|
||||
}
|
||||
} else {
|
||||
for (j = 0; j < numberOfModelIds; j++) {
|
||||
sprite_free(&tempObj->unk68[j]->sprite);
|
||||
sprite_free(tempObj->unk68[j]->sprite);
|
||||
}
|
||||
}
|
||||
try_free_object_header(tempObj->segment.object.unk2C);
|
||||
@@ -2509,7 +2509,7 @@ void func_800101AC(Object *obj, s32 arg1) {
|
||||
// TODO: Get a Snowball struct?
|
||||
snowball = &obj->unk64->racer;
|
||||
if (snowball->unk20 != NULL) {
|
||||
audspat_point_stop(snowball->unk20);
|
||||
audspat_point_stop((AudioPoint *) snowball->unk20);
|
||||
}
|
||||
break;
|
||||
case BHV_WAVE_GENERATOR:
|
||||
@@ -2520,7 +2520,7 @@ void func_800101AC(Object *obj, s32 arg1) {
|
||||
break;
|
||||
case BHV_ANIMATION:
|
||||
if (obj->unk64 != NULL && arg1 == 0) {
|
||||
free_object(&obj->unk64->obj);
|
||||
free_object(obj->unk64->obj);
|
||||
}
|
||||
break;
|
||||
case BHV_OVERRIDE_POS:
|
||||
@@ -2610,7 +2610,7 @@ void func_800101AC(Object *obj, s32 arg1) {
|
||||
}
|
||||
if (gObjPtrList[i]->behaviorId == BHV_WEAPON_2 || gObjPtrList[i]->behaviorId == BHV_FLY_COIN ||
|
||||
gObjPtrList[i]->behaviorId == BHV_WEAPON) {
|
||||
free_object(gObjPtrList[i]);
|
||||
free_object((Object *) gObjPtrList[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2629,11 +2629,11 @@ void func_800101AC(Object *obj, s32 arg1) {
|
||||
}
|
||||
} else if (obj->segment.header->modelType == OBJECT_MODEL_TYPE_MISC) {
|
||||
for (i = 0; i < numberOfModelIds; i++) {
|
||||
tex_free(&obj->unk68[i]->texHeader);
|
||||
tex_free(obj->unk68[i]->texHeader);
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < numberOfModelIds; i++) {
|
||||
sprite_free(&obj->unk68[i]->sprite);
|
||||
sprite_free(obj->unk68[i]->sprite);
|
||||
}
|
||||
}
|
||||
if (obj->segment.header->particleCount > 0) {
|
||||
|
||||
+72
-76
@@ -3775,11 +3775,11 @@ void func_8002E904(LevelModelSegment *arg0, s32 arg1, s32 arg2) {
|
||||
if (gNewShadowY2 >= minY) {
|
||||
if (maxY >= gNewShadowY1) {
|
||||
for (i = 0; i < 3; i++) {
|
||||
sp100[i].unk0 = vertices[triangles->verticesArray[i + 1]].x;
|
||||
sp100[i].unk8 = vertices[triangles->verticesArray[i + 1]].z;
|
||||
sp100[i].unkE = -1;
|
||||
sp100[i].x = vertices[triangles->verticesArray[i + 1]].x;
|
||||
sp100[i].z = vertices[triangles->verticesArray[i + 1]].z;
|
||||
sp100[i].unkC_union.s.unkE = -1;
|
||||
}
|
||||
// @note while the cast to Vec4f is incorrect, func_8002FD74 only uses unk0 and unk8 which
|
||||
// @note while the cast to Vec4f is incorrect, func_8002FD74 x uses unk0 and z which
|
||||
// are both floats so this is fine as the size is the same
|
||||
if (func_8002FD74(spD0[2].x, spD0[2].y, spD0[0].x, spD0[0].y, 3, (Vec4f *) sp100) != 0) {
|
||||
temp_t6 = arg0->unk14[curFacesOffset].triangleIndex * 4;
|
||||
@@ -3792,26 +3792,26 @@ void func_8002E904(LevelModelSegment *arg0, s32 arg1, s32 arg2) {
|
||||
if (someCount >= 3) {
|
||||
D_8011C238[D_8011C230].unk1 = 0;
|
||||
for (i2 = 0; i2 < someCount; i2++) {
|
||||
if (sp100[i2].unkE < 0) {
|
||||
if (sp100[i2].unkC_union.s.unkE < 0) {
|
||||
foundIndex = -1;
|
||||
i = 0;
|
||||
while ((i < D_8011B118) && (foundIndex == -1)) {
|
||||
if ((D_8011B120[i].x == sp100[i2].unk0) &&
|
||||
(D_8011B120[i].z == sp100[i2].unk8)) {
|
||||
if ((D_8011B120[i].x == sp100[i2].x) &&
|
||||
(D_8011B120[i].z == sp100[i2].z)) {
|
||||
foundIndex = i;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (foundIndex == -1) {
|
||||
D_8011B120[D_8011B118].x = sp100[i2].unk0;
|
||||
D_8011B120[D_8011B118].x = sp100[i2].x;
|
||||
D_8011B120[D_8011B118].unkC = D_8011D0BC;
|
||||
D_8011B120[D_8011B118].z = sp100[i2].unk8;
|
||||
D_8011B120[D_8011B118].z = sp100[i2].z;
|
||||
D_8011C238[D_8011C230].unk2[i2] = D_8011B118++;
|
||||
} else {
|
||||
D_8011C238[D_8011C230].unk2[i2] = foundIndex;
|
||||
}
|
||||
} else {
|
||||
D_8011C238[D_8011C230].unk2[i2] = sp100[i2].unkE;
|
||||
D_8011C238[D_8011C230].unk2[i2] = sp100[i2].unkC_union.s.unkE;
|
||||
D_8011C238[D_8011C230].unk1 |= 1 << i2;
|
||||
}
|
||||
}
|
||||
@@ -3833,6 +3833,7 @@ void func_8002E904(LevelModelSegment *arg0, s32 arg1, s32 arg2) {
|
||||
}
|
||||
}
|
||||
|
||||
// Handles water shadow generation?
|
||||
void func_8002EEEC(s32 arg0) {
|
||||
unk8011C8B8 spA8[8];
|
||||
Vec2f sp88[4];
|
||||
@@ -3863,29 +3864,29 @@ void func_8002EEEC(s32 arg0) {
|
||||
// clang-format on
|
||||
|
||||
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;
|
||||
var_a0 = D_8011C3B8[var_s4].y1;
|
||||
var_a1 = D_8011C3B8[var_s4].y1;
|
||||
if (D_8011C3B8[var_s4].y2 < var_a0) {
|
||||
var_a0 = D_8011C3B8[var_s4].y2;
|
||||
} else if (var_a1 < D_8011C3B8[var_s4].y2) {
|
||||
var_a1 = D_8011C3B8[var_s4].y2;
|
||||
}
|
||||
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 (D_8011C3B8[var_s4].y3 < var_a0) {
|
||||
var_a0 = D_8011C3B8[var_s4].y3;
|
||||
} else if (var_a1 < D_8011C3B8[var_s4].y3) {
|
||||
var_a1 = D_8011C3B8[var_s4].y3;
|
||||
}
|
||||
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;
|
||||
spA8[0].x = D_8011C3B8[var_s4].x1;
|
||||
spA8[0].z = D_8011C3B8[var_s4].z1;
|
||||
spA8[1].x = D_8011C3B8[var_s4].x2;
|
||||
spA8[1].z = D_8011C3B8[var_s4].z2;
|
||||
spA8[2].x = D_8011C3B8[var_s4].x3;
|
||||
spA8[2].z = D_8011C3B8[var_s4].z3;
|
||||
|
||||
for (var_v0 = 0; var_v0 != 3; var_v0++) {
|
||||
spA8[var_v0].unkE = -1;
|
||||
spA8[var_v0].unkC_union.s.unkE = -1;
|
||||
}
|
||||
|
||||
D_8011D0BC = &D_8011C8B8[D_8011D0B8 + var_s4];
|
||||
@@ -3894,26 +3895,26 @@ void func_8002EEEC(s32 arg0) {
|
||||
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) {
|
||||
if (spA8[var_t1].unkC_union.s.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)) {
|
||||
if ((D_8011B120[var_v1].x == spA8[var_t1].x) &&
|
||||
(D_8011B120[var_v1].z == spA8[var_t1].z)) {
|
||||
var_a1 = var_v1;
|
||||
}
|
||||
var_v1++;
|
||||
}
|
||||
if (var_a1 == -1) {
|
||||
D_8011B120[D_8011B118].x = spA8[var_t1].unk0;
|
||||
D_8011B120[D_8011B118].x = spA8[var_t1].x;
|
||||
D_8011B120[D_8011B118].unkC = D_8011D0BC;
|
||||
D_8011B120[D_8011B118].z = spA8[var_t1].unk8;
|
||||
D_8011B120[D_8011B118].z = spA8[var_t1].z;
|
||||
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].unk2[var_t1] = spA8[var_t1].unkC_union.s.unkE;
|
||||
D_8011C238[tempIdx].unk1 |= 1 << var_t1;
|
||||
}
|
||||
}
|
||||
@@ -3927,32 +3928,29 @@ void func_8002EEEC(s32 arg0) {
|
||||
D_8011D0B8 += temp_v0;
|
||||
}
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
void func_8002F2AC(void) {
|
||||
f32 temp_f12;
|
||||
f32 temp_f16;
|
||||
unk8011C8B8 *var_v0;
|
||||
s32 i, j;
|
||||
s32 i, j, k;
|
||||
unk8011B330 *curr;
|
||||
|
||||
for (i = 0; i < D_8011B118; i++) {
|
||||
var_v0 = D_8011B120[i].unkC;
|
||||
temp_f16 = D_8011B120[i].x * var_v0->unk0;
|
||||
temp_f12 = D_8011B120[i].z * var_v0->unk8;
|
||||
D_8011B120[i].y = (f32) (-(temp_f16 + temp_f12 + var_v0->unkC) / var_v0->unk4);
|
||||
temp_f16 = D_8011B120[i].x * var_v0->x;
|
||||
temp_f12 = D_8011B120[i].z * var_v0->z;
|
||||
D_8011B120[i].y = (f32) (-(temp_f16 + temp_f12 + var_v0->unkC_union.w) / var_v0->y);
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_8011B320); i++) {
|
||||
for (j = 0; j < D_8011B320[i]; j++) {
|
||||
var_v0 = D_8011B330[j + i].unkC;
|
||||
temp_f16 = D_8011B330[j + i].x * var_v0->unk0;
|
||||
temp_f12 = D_8011B330[j + i].z * var_v0->unk8;
|
||||
D_8011B330[j + i].y = (f32) (-(temp_f16 + temp_f12 + var_v0->unkC) / var_v0->unk4);
|
||||
for (j = 0, k = i * sizeof(unk8011B330); j < D_8011B320[i]; j++, k++) {
|
||||
var_v0 = D_8011B330[k].unkC;
|
||||
temp_f16 = D_8011B330[k].x * var_v0->x;
|
||||
temp_f12 = D_8011B330[k].z * var_v0->z;
|
||||
D_8011B330[k].y = (f32) (-(temp_f16 + temp_f12 + var_v0->unkC_union.w) / var_v0->y);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/tracks/func_8002F2AC.s")
|
||||
#endif
|
||||
|
||||
void func_8002F440(void) {
|
||||
s32 spAC;
|
||||
@@ -4185,58 +4183,56 @@ s32 func_8002FF6C(s32 arg0, unk8011C8B8 *arg1, s32 arg2, Vec2f *arg3) {
|
||||
if (var_v1 >= var_s2) {
|
||||
var_v1 = 0;
|
||||
}
|
||||
temp_f16 = (temp_f12 * var_s3[var_t1].unk0) + (var_s3[var_t1].unk8 * temp_f14) + var_f2;
|
||||
temp_f22 = (temp_f12 * var_s3[var_v1].unk0) + (var_s3[var_v1].unk8 * temp_f14) + var_f2;
|
||||
temp_f16 = (temp_f12 * var_s3[var_t1].x) + (var_s3[var_t1].z * temp_f14) + var_f2;
|
||||
temp_f22 = (temp_f12 * var_s3[var_v1].x) + (var_s3[var_v1].z * temp_f14) + var_f2;
|
||||
if ((temp_f16 >= 0.0f && temp_f22 < 0.0f) || (temp_f16 < 0.0f && temp_f22 >= 0.0f)) {
|
||||
var_a0 = D_8011B320[var_v0];
|
||||
var_a1 = -1;
|
||||
var_v1_3 = var_v0 << 5;
|
||||
while (var_a0 > 0 && var_a1 < 0) {
|
||||
if ((D_8011B330[var_v1_3].unk10 == var_s3[var_t1].unk0) &&
|
||||
(D_8011B330[var_v1_3].unk14 == var_s3[var_t1].unk8) &&
|
||||
(D_8011B330[var_v1_3].unk18 == var_s3[var_v1].unk0) &&
|
||||
(D_8011B330[var_v1_3].unk1C == var_s3[var_v1].unk8)) {
|
||||
if ((D_8011B330[var_v1_3].unk10 == var_s3[var_t1].x) &&
|
||||
(D_8011B330[var_v1_3].unk14 == var_s3[var_t1].z) &&
|
||||
(D_8011B330[var_v1_3].unk18 == var_s3[var_v1].x) &&
|
||||
(D_8011B330[var_v1_3].unk1C == var_s3[var_v1].z)) {
|
||||
var_a1 = var_v1_3;
|
||||
} else if ((D_8011B330[var_v1_3].unk10 == var_s3[var_v1].unk0) &&
|
||||
(D_8011B330[var_v1_3].unk14 == var_s3[var_v1].unk8) &&
|
||||
(D_8011B330[var_v1_3].unk18 == var_s3[var_t1].unk0) &&
|
||||
(D_8011B330[var_v1_3].unk1C == var_s3[var_t1].unk8)) {
|
||||
} else if ((D_8011B330[var_v1_3].unk10 == var_s3[var_v1].x) &&
|
||||
(D_8011B330[var_v1_3].unk14 == var_s3[var_v1].z) &&
|
||||
(D_8011B330[var_v1_3].unk18 == var_s3[var_t1].x) &&
|
||||
(D_8011B330[var_v1_3].unk1C == var_s3[var_t1].z)) {
|
||||
var_a1 = var_v1_3;
|
||||
}
|
||||
var_a0 -= 1;
|
||||
var_v1_3++;
|
||||
}
|
||||
if (var_a1 >= 0) {
|
||||
var_s0[var_t2].unkE = var_a1;
|
||||
var_s0[var_t2].unk0 = D_8011B330[var_a1].x;
|
||||
var_s0[var_t2].unk8 = D_8011B330[var_a1].z;
|
||||
var_s0[var_t2].unkC_union.s.unkE = var_a1;
|
||||
var_s0[var_t2].x = D_8011B330[var_a1].x;
|
||||
var_s0[var_t2].z = D_8011B330[var_a1].z;
|
||||
var_t2++;
|
||||
} else {
|
||||
temp_f24 = temp_f16 / (temp_f16 - temp_f22);
|
||||
var_s0[var_t2].unk0 =
|
||||
var_s3[var_t1].unk0 + ((var_s3[var_v1].unk0 - var_s3[var_t1].unk0) * temp_f24);
|
||||
var_s0[var_t2].unk8 =
|
||||
var_s3[var_t1].unk8 + ((var_s3[var_v1].unk8 - var_s3[var_t1].unk8) * temp_f24);
|
||||
var_s0[var_t2].x = var_s3[var_t1].x + ((var_s3[var_v1].x - var_s3[var_t1].x) * temp_f24);
|
||||
var_s0[var_t2].z = var_s3[var_t1].z + ((var_s3[var_v1].z - var_s3[var_t1].z) * temp_f24);
|
||||
if (D_8011B320[var_v0] > 0x1F) {
|
||||
D_8011B320[var_v0] = 0x1F;
|
||||
}
|
||||
var_v1_3 = D_8011B320[var_v0] + (var_v0 << 5);
|
||||
D_8011B330[var_v1_3].unk10 = var_s3[var_t1].unk0;
|
||||
D_8011B330[var_v1_3].unk14 = var_s3[var_t1].unk8;
|
||||
D_8011B330[var_v1_3].unk18 = var_s3[var_v1].unk0;
|
||||
D_8011B330[var_v1_3].unk1C = var_s3[var_v1].unk8;
|
||||
D_8011B330[var_v1_3].x = var_s0[var_t2].unk0;
|
||||
D_8011B330[var_v1_3].z = var_s0[var_t2].unk8;
|
||||
D_8011B330[var_v1_3].unk10 = var_s3[var_t1].x;
|
||||
D_8011B330[var_v1_3].unk14 = var_s3[var_t1].z;
|
||||
D_8011B330[var_v1_3].unk18 = var_s3[var_v1].x;
|
||||
D_8011B330[var_v1_3].unk1C = var_s3[var_v1].z;
|
||||
D_8011B330[var_v1_3].x = var_s0[var_t2].x;
|
||||
D_8011B330[var_v1_3].z = var_s0[var_t2].z;
|
||||
D_8011B330[var_v1_3].unkC = D_8011D0BC;
|
||||
D_8011B320[var_v0]++;
|
||||
var_s0[var_t2].unkE = var_v1_3;
|
||||
var_s0[var_t2].unkC_union.s.unkE = var_v1_3;
|
||||
var_t2++;
|
||||
}
|
||||
}
|
||||
if (temp_f22 <= 0.0f) {
|
||||
var_s0[var_t2].unkE = var_s3[var_v1].unkE;
|
||||
var_s0[var_t2].unk0 = var_s3[var_v1].unk0;
|
||||
var_s0[var_t2].unk8 = var_s3[var_v1].unk8;
|
||||
var_s0[var_t2].unkC_union.s.unkE = var_s3[var_v1].unkC_union.s.unkE;
|
||||
var_s0[var_t2].x = var_s3[var_v1].x;
|
||||
var_s0[var_t2].z = var_s3[var_v1].z;
|
||||
var_t2++;
|
||||
}
|
||||
}
|
||||
@@ -4251,9 +4247,9 @@ s32 func_8002FF6C(s32 arg0, unk8011C8B8 *arg1, s32 arg2, Vec2f *arg3) {
|
||||
if (var_s2 >= 3) {
|
||||
if (var_s3 != arg1) {
|
||||
for (var_t1 = 0; var_t1 < var_s2; var_t1++) {
|
||||
arg1[var_t1].unk0 = var_s3[var_t1].unk0;
|
||||
arg1[var_t1].unk8 = var_s3[var_t1].unk8;
|
||||
arg1[var_t1].unkE = var_s3[var_t1].unkE;
|
||||
arg1[var_t1].x = var_s3[var_t1].x;
|
||||
arg1[var_t1].z = var_s3[var_t1].z;
|
||||
arg1[var_t1].unkC_union.s.unkE = var_s3[var_t1].unkC_union.s.unkE;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
+32
-27
@@ -18,31 +18,36 @@ enum ShadowUpdate {
|
||||
|
||||
/* Size: 0x10 bytes */
|
||||
typedef struct unk8011C8B8 {
|
||||
f32 unk0;
|
||||
f32 unk4;
|
||||
f32 unk8;
|
||||
s16 unkC;
|
||||
s16 unkE;
|
||||
/* 0x00 */ f32 x;
|
||||
/* 0x04 */ f32 y;
|
||||
/* 0x08 */ f32 z;
|
||||
union {
|
||||
/* 0x0C */ f32 w;
|
||||
struct {
|
||||
/* 0x0C */ s16 unkC;
|
||||
/* 0x0E */ s16 unkE;
|
||||
} s;
|
||||
} unkC_union;
|
||||
} unk8011C8B8;
|
||||
|
||||
/* Size: 0x10 bytes */
|
||||
typedef struct unk8011B120 {
|
||||
f32 x;
|
||||
f32 y;
|
||||
f32 z;
|
||||
unk8011C8B8 *unkC;
|
||||
/* 0x00 */ f32 x;
|
||||
/* 0x04 */ f32 y;
|
||||
/* 0x08 */ f32 z;
|
||||
/* 0x0C */ unk8011C8B8 *unkC;
|
||||
} unk8011B120;
|
||||
|
||||
/* Size: 0x20 bytes */
|
||||
typedef struct unk8011B330 {
|
||||
f32 x;
|
||||
f32 y;
|
||||
f32 z;
|
||||
unk8011C8B8 *unkC;
|
||||
f32 unk10;
|
||||
f32 unk14;
|
||||
f32 unk18;
|
||||
f32 unk1C;
|
||||
/* 0x00 */ f32 x;
|
||||
/* 0x04 */ f32 y;
|
||||
/* 0x08 */ f32 z;
|
||||
/* 0x0C */ unk8011C8B8 *unkC;
|
||||
/* 0x10 */ f32 unk10;
|
||||
/* 0x14 */ f32 unk14;
|
||||
/* 0x18 */ f32 unk18;
|
||||
/* 0x1C */ f32 unk1C;
|
||||
} unk8011B330;
|
||||
|
||||
/* Size: 0x10 bytes */
|
||||
@@ -69,16 +74,16 @@ typedef struct unk8011D478 {
|
||||
|
||||
/* 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;
|
||||
/* 0x00 */ s16 x1;
|
||||
/* 0x02 */ s16 y1;
|
||||
/* 0x04 */ s16 z1;
|
||||
/* 0x06 */ s16 x2;
|
||||
/* 0x08 */ s16 y2;
|
||||
/* 0x0A */ s16 z2;
|
||||
/* 0x0C */ s16 x3;
|
||||
/* 0x0E */ s16 y3;
|
||||
/* 0x10 */ s16 z3;
|
||||
/* 0x12 */ s16 unk12;
|
||||
} unk8011C3B8;
|
||||
|
||||
// In this struct, data is rightshifted 16 bytes, so make the smooth transition more precise.
|
||||
|
||||
+175
-238
@@ -1837,291 +1837,228 @@ void func_800BCC70(LevelModel *model) {
|
||||
#ifdef NON_EQUIVALENT
|
||||
s32 func_800BDC80(s32 arg0, unk8011C3B8 *arg1, unk8011C8B8 *arg2, f32 shadowXNegPosition, f32 shadowZNegPosition,
|
||||
f32 shadowXPosition, f32 shadowZPosition) {
|
||||
s32 sp36C;
|
||||
s32 sp368;
|
||||
s32 sp364;
|
||||
s32 colCount;
|
||||
s32 startCol; // sp368
|
||||
s32 startRow; // sp364
|
||||
f32 var_f0;
|
||||
f32 var_f12;
|
||||
s32 sp358;
|
||||
s32 sp354;
|
||||
f32 var_f14;
|
||||
s32 sp34C;
|
||||
f32 var_f16;
|
||||
f32 var_f18;
|
||||
f32 pad_sp35C;
|
||||
s32 endCol; // sp358
|
||||
s32 endRow; // sp354
|
||||
s32 colOffset; // sp350
|
||||
s32 rowOffset; // sp34C
|
||||
f32 pad_sp348;
|
||||
f32 pad_sp344;
|
||||
f32 pad_sp340;
|
||||
f32 var_f24;
|
||||
f32 var_f26;
|
||||
f32 var_f28;
|
||||
f32 var_f20;
|
||||
f32 pad_sp334;
|
||||
s16 var_a1; // sp332
|
||||
f32 var_f20;
|
||||
f32 var_f22;
|
||||
s16 var_s8;
|
||||
s16 var_s2_s16;
|
||||
s16 var_s3_2;
|
||||
s32 var_s5;
|
||||
s32 var_a2_2;
|
||||
s32 var_lo;
|
||||
s32 var_lo_2;
|
||||
s32 pad_sp27C;
|
||||
s32 pad_sp278;
|
||||
s32 pad_sp274;
|
||||
s32 pad_sp270;
|
||||
s32 var_s0;
|
||||
s32 var_s1;
|
||||
s32 var_v1;
|
||||
s32 var_s6;
|
||||
s32 var_t0;
|
||||
s32 currentCol;
|
||||
s32 currentRow;
|
||||
s32 waveCount;
|
||||
s32 temp1_2;
|
||||
s32 temp2_2;
|
||||
s16 spD8[0x110]; // probably incorrect size
|
||||
s32 pad_sp254;
|
||||
s32 var_a3;
|
||||
s32 pad_sp24C;
|
||||
s32 var_t0;
|
||||
s32 var_v0;
|
||||
unk8011C8B8 *var_v0_4;
|
||||
s32 pad_sp23C;
|
||||
unk8011C3B8 *var_s0_2;
|
||||
s16 spD8[256]; // 16 x 16
|
||||
s32 var_s2;
|
||||
s32 var_s4;
|
||||
f32 spCC;
|
||||
f32 spC8;
|
||||
s32 var_v0;
|
||||
s32 spA4;
|
||||
unk8011C8B8 *var_v0_4;
|
||||
s32 sp98;
|
||||
unk8011C3B8 *var_s0_2;
|
||||
s32 sp90;
|
||||
f32 steps[2]; // spC8
|
||||
s32 pad_spC4;
|
||||
s32 temp3_2;
|
||||
s32 temp4_2;
|
||||
s32 var_s7; // sp74
|
||||
s32 counter;
|
||||
s32 var_t8;
|
||||
s32 var_t6;
|
||||
s32 pad[3];
|
||||
|
||||
var_t0 = (arg0 * gWaveTileTotal);
|
||||
spCC = gWaveVtxStepX;
|
||||
spC8 = gWaveVtxStepZ;
|
||||
steps[1] = gWaveVtxStepX;
|
||||
steps[0] = gWaveVtxStepZ;
|
||||
var_f24 = (1.0f - gWaveController.unk44) / 127.0f;
|
||||
if (gWaveController.doubleDensity != FALSE) {
|
||||
sp36C = gWaveController.subdivisions * 2;
|
||||
spCC *= 0.5;
|
||||
spC8 *= 0.5;
|
||||
waveCount = (arg0 * gWaveTileTotal);
|
||||
if (gWaveController.doubleDensity) {
|
||||
var_f22 = 0.5f;
|
||||
steps[1] *= 0.5;
|
||||
steps[0] *= 0.5;
|
||||
colCount = gWaveController.subdivisions * 2;
|
||||
} else {
|
||||
var_f22 = 1.0f;
|
||||
sp36C = gWaveController.subdivisions;
|
||||
colCount = gWaveController.subdivisions;
|
||||
}
|
||||
|
||||
var_f12 = shadowXNegPosition - gWaveModel[arg0].originX;
|
||||
var_f14 = shadowZNegPosition - gWaveModel[arg0].originZ;
|
||||
var_f16 = shadowXPosition - gWaveModel[arg0].originX;
|
||||
var_f18 = shadowZPosition - gWaveModel[arg0].originZ;
|
||||
shadowXNegPosition -= gWaveModel[arg0].originX;
|
||||
shadowZNegPosition -= gWaveModel[arg0].originZ;
|
||||
shadowXPosition -= gWaveModel[arg0].originX;
|
||||
shadowZPosition -= gWaveModel[arg0].originZ;
|
||||
|
||||
if (var_f12 < 0.0f) {
|
||||
sp368 = 0;
|
||||
if (shadowXNegPosition < 0.0f) {
|
||||
startCol = 0;
|
||||
} else {
|
||||
sp368 = var_f12 / spCC;
|
||||
startCol = shadowXNegPosition / steps[1];
|
||||
}
|
||||
|
||||
if (var_f14 < 0.0f) {
|
||||
sp364 = 0;
|
||||
// 0 instead of 0.0f is "correct" here
|
||||
if (shadowZNegPosition < 0) {
|
||||
startRow = 0;
|
||||
} else {
|
||||
sp364 = var_f14 / spC8;
|
||||
startRow = shadowZNegPosition / steps[0];
|
||||
}
|
||||
|
||||
if (gWaveBoundingBoxW <= var_f16) {
|
||||
sp358 = sp36C;
|
||||
if (gWaveBoundingBoxW <= shadowXPosition) {
|
||||
endCol = colCount;
|
||||
} else {
|
||||
sp358 = (s32) (var_f16 / spCC) + 1;
|
||||
endCol = (s32) (shadowXPosition / steps[1]) + 1;
|
||||
}
|
||||
|
||||
if (gWaveBoundingBoxH <= var_f18) {
|
||||
sp354 = sp36C;
|
||||
if (gWaveBoundingBoxH <= shadowZPosition) {
|
||||
endRow = colCount;
|
||||
} else {
|
||||
sp354 = (s32) (var_f18 / spCC) + 1;
|
||||
endRow = (s32) (shadowZPosition / steps[1]) + 1;
|
||||
}
|
||||
|
||||
var_v1 = gWaveModel[arg0].unk12 + sp368;
|
||||
while (var_v1 >= gWaveController.tileCount) {
|
||||
var_v1 -= gWaveController.tileCount;
|
||||
colOffset = gWaveModel[arg0].unk12 + startCol;
|
||||
while (colOffset >= gWaveController.tileCount) {
|
||||
colOffset -= gWaveController.tileCount;
|
||||
}
|
||||
|
||||
var_v0 = gWaveModel[arg0].unk10 + sp364;
|
||||
while (var_v0 >= gWaveController.tileCount) {
|
||||
var_v0 -= gWaveController.tileCount;
|
||||
rowOffset = gWaveModel[arg0].unk10 + startRow;
|
||||
while (rowOffset >= gWaveController.tileCount) {
|
||||
rowOffset -= gWaveController.tileCount;
|
||||
}
|
||||
|
||||
var_s6 = sp364;
|
||||
var_s7 = 0;
|
||||
if (sp354 >= sp364) {
|
||||
spA4 = var_t0 + sp368 + (sp364 * sp36C);
|
||||
sp90 = sp354 + 1;
|
||||
sp34C = var_v0;
|
||||
do {
|
||||
var_s4 = spA4;
|
||||
var_s0 = var_v1;
|
||||
var_s2 = (sp34C * gWaveController.tileCount) + var_v1;
|
||||
if (sp358 >= sp368) {
|
||||
var_s1 = sp368;
|
||||
var_s5 = sp358 + 1;
|
||||
do {
|
||||
var_f20 = (gWaveHeightTable[gWaveHeightIndices[var_s2].s[0]] +
|
||||
gWaveHeightTable[gWaveHeightIndices[var_s2].s[1]]) *
|
||||
gWaveController.magnitude;
|
||||
if (gWaveGenCount > 0) {
|
||||
var_f20 += waves_get_y(arg0, var_s1, var_s6);
|
||||
}
|
||||
if (D_800E3178[var_s4] < 0x7F) {
|
||||
// s32 cast below required
|
||||
var_f20 *= gWaveController.unk44 + ((s32) D_800E3178[var_s4] * var_f24);
|
||||
}
|
||||
var_s1++;
|
||||
var_s7++;
|
||||
var_s0++;
|
||||
var_s4++;
|
||||
var_s2++;
|
||||
spD8[var_s7 - 1] = gWaveModel[arg0].originY + (s32) (var_f20 * var_f22);
|
||||
if (var_s0 >= gWaveController.tileCount) {
|
||||
var_s0 -= gWaveController.tileCount;
|
||||
var_s2 -= gWaveController.tileCount;
|
||||
}
|
||||
} while (var_s5 != var_s1);
|
||||
for (currentRow = startRow, counter = 0; endRow >= currentRow; currentRow++) {
|
||||
var_s0 = colOffset;
|
||||
var_s2 = (rowOffset * gWaveController.tileCount) + var_s0;
|
||||
var_s4 = waveCount + startCol + (currentRow * colCount);
|
||||
for (currentCol = startCol; endCol >= currentCol; currentCol++) {
|
||||
var_f20 = (gWaveHeightTable[gWaveHeightIndices[var_s2].s[0]] +
|
||||
gWaveHeightTable[gWaveHeightIndices[var_s2].s[1]]) *
|
||||
gWaveController.magnitude;
|
||||
if (gWaveGenCount > 0) {
|
||||
var_f20 += waves_get_y(arg0, currentCol, currentRow);
|
||||
}
|
||||
sp34C++;
|
||||
if (sp34C >= gWaveController.tileCount) {
|
||||
sp34C -= gWaveController.tileCount;
|
||||
var_v0 = D_800E3178[var_s4];
|
||||
if (var_v0 < 0x7F) {
|
||||
var_f20 *= gWaveController.unk44 + (var_v0 * var_f24);
|
||||
}
|
||||
spA4 += sp36C;
|
||||
var_s6++;
|
||||
} while (sp90 != var_s6);
|
||||
|
||||
// s32 cast below required
|
||||
spD8[counter] = gWaveModel[arg0].originY + (s32) (var_f20 * var_f22);
|
||||
|
||||
counter++;
|
||||
var_s4++;
|
||||
var_s0++;
|
||||
var_s2++;
|
||||
if (var_s0 >= gWaveController.tileCount) {
|
||||
var_s0 -= gWaveController.tileCount;
|
||||
var_s2 -= gWaveController.tileCount;
|
||||
}
|
||||
}
|
||||
|
||||
rowOffset++;
|
||||
if (rowOffset >= gWaveController.tileCount) {
|
||||
rowOffset -= gWaveController.tileCount;
|
||||
}
|
||||
}
|
||||
|
||||
var_s7 = 0;
|
||||
sp36C = (sp358 - sp368) + 1;
|
||||
var_a1 = gWaveModel[arg0].originZ + (s32) (sp364 * spC8);
|
||||
if (sp364 < sp354) {
|
||||
sp98 = sp368 * spCC;
|
||||
var_s6 = sp364;
|
||||
do {
|
||||
var_s8 = gWaveModel[arg0].originZ + (s32) ((var_s6 + 1) * spC8);
|
||||
var_s3_2 = gWaveModel[arg0].originX + sp98;
|
||||
if (sp368 < sp358) {
|
||||
var_s0_2 = &arg1[var_s7];
|
||||
// a3 / t5 as index
|
||||
var_lo = (var_s6 - sp364) * sp36C;
|
||||
// t0 / t8 as index
|
||||
var_lo_2 = ((var_s6 - sp364) + 1) * sp36C;
|
||||
/*
|
||||
t4 = sp368
|
||||
t8 = t4 - t4 ????
|
||||
t6 = t8 * 2
|
||||
t3 = spD8
|
||||
v0 = t6 + t3
|
||||
--
|
||||
a3 = a2 * t7 (var_lo)
|
||||
t5 = a3 * 2
|
||||
s4 = v0 + t5
|
||||
*/
|
||||
// temp1 = &spD8[sp368 - sp368 + var_lo];
|
||||
var_t8 = sp368;
|
||||
temp1_2 = sp368 + var_lo - sp368;
|
||||
/*
|
||||
t4 = sp368
|
||||
t6 = t4 * 2
|
||||
at = neg t4
|
||||
t3 = at * 2
|
||||
t9 = t6 + t3
|
||||
t1 = t9 + t5
|
||||
--
|
||||
a3 = a2 * t7 (var_lo)
|
||||
t5 = a3 * 2
|
||||
a3 = t5
|
||||
--
|
||||
v1 = t1 + a3
|
||||
*/
|
||||
// temp2 = &spD8[sp368 + var_lo];
|
||||
temp2_2 = sp368 + var_lo;
|
||||
/*
|
||||
t4 = sp368
|
||||
t8 = t4 - t4 ????
|
||||
t6 = t8 * 2
|
||||
t3 = spD8
|
||||
v0 = t6 + t3
|
||||
--
|
||||
t0 = t2 * t7 (var_lo_2)
|
||||
t8 = t0 * 2
|
||||
--
|
||||
s5 = v0 + t8
|
||||
*/
|
||||
// temp3 = &spD8[(sp368 - sp368) + var_lo_2];
|
||||
temp3_2 = sp368 + var_lo_2 - sp368;
|
||||
/*
|
||||
t4 = sp368
|
||||
t6 = t4 * 2
|
||||
at = neg t4
|
||||
t3 = at * 2
|
||||
t9 = t6 + t3
|
||||
t1 = t9 + t5
|
||||
--
|
||||
t0 = t2 * t7 (var_lo_2)
|
||||
t8 = t0 * 2
|
||||
--
|
||||
a0 = t1 + t8
|
||||
*/
|
||||
// temp4 = &spD8[sp368 + var_lo_2];
|
||||
temp4_2 = sp368 + var_lo_2;
|
||||
var_s1 = var_s6;
|
||||
var_f26 = spCC * spC8;
|
||||
var_f28 = var_f26 * var_f26;
|
||||
do {
|
||||
var_s0_2->unk0 = var_s3_2;
|
||||
var_s2_s16 = gWaveModel[arg0].originX + (s32) (var_s1 * spCC);
|
||||
var_s0_2->unk6 = var_s3_2;
|
||||
var_s0_2->unkC = var_s2_s16;
|
||||
var_s0_2->unk2 = spD8[temp1_2];
|
||||
var_s0_2->unk8 = spD8[temp3_2];
|
||||
var_s0_2->unkE = spD8[temp2_2 + 1];
|
||||
var_s0_2->unk4 = var_a1;
|
||||
var_s0_2->unkA = var_s8;
|
||||
var_s0_2->unk10 = var_a1;
|
||||
var_f20 = (var_s0_2->unk2 - var_s0_2->unkE) * spC8;
|
||||
var_f22 = (var_s0_2->unk2 - var_s0_2->unk8) * spCC;
|
||||
var_f0 = sqrtf((var_f20 * var_f20) + var_f28 + (var_f22 * var_f22));
|
||||
if (var_f0 > 0.0f) {
|
||||
var_f24 = (1.0f / var_f0);
|
||||
var_v0_4 = &arg2[var_s7];
|
||||
var_v0_4->unk0 = var_f20 * var_f24;
|
||||
var_v0_4->unk4 = var_f26 * var_f24;
|
||||
var_v0_4->unk8 = var_f22 * var_f24;
|
||||
var_v0_4->unkC = -((var_v0_4->unk8 * var_s0_2->unk4) +
|
||||
((var_s0_2->unk0 * var_v0_4->unk0) + (var_s0_2->unk2 * var_v0_4->unk4)));
|
||||
var_s7++;
|
||||
var_s0_2++;
|
||||
}
|
||||
var_s0_2->unk0 = var_s2_s16;
|
||||
var_s0_2->unk6 = var_s3_2;
|
||||
var_s0_2->unkC = var_s2_s16;
|
||||
var_s0_2->unk2 = spD8[temp1_2 + 1];
|
||||
var_s0_2->unk8 = spD8[temp3_2];
|
||||
var_s0_2->unkE = spD8[temp4_2 + 1];
|
||||
var_s0_2->unk4 = var_a1;
|
||||
var_s0_2->unkA = var_s8;
|
||||
var_s0_2->unk10 = var_s8;
|
||||
var_f20 = (var_s0_2->unk8 - var_s0_2->unkE) * spC8;
|
||||
var_f22 = (var_s0_2->unk2 - var_s0_2->unkE) * spCC;
|
||||
var_f0 = sqrtf((var_f20 * var_f20) + var_f28 + (var_f22 * var_f22));
|
||||
if (var_f0 > 0.0f) {
|
||||
var_f24 = (1.0f / var_f0);
|
||||
var_v0_4 = &arg2[var_s7];
|
||||
var_v0_4->unk0 = var_f20 * var_f24;
|
||||
var_v0_4->unk4 = var_f26 * var_f24;
|
||||
var_v0_4->unk8 = var_f22 * var_f24;
|
||||
colCount = (endCol - startCol) + 1;
|
||||
var_a1 = gWaveModel[arg0].originZ + (s32) (steps[0] * startRow);
|
||||
var_s3_2 = gWaveModel[arg0].originX + (s32) (steps[1] * startCol);
|
||||
counter = 0;
|
||||
var_s0_2 = &arg1[counter];
|
||||
for (currentRow = startRow; currentRow < endRow; currentRow++) {
|
||||
// 0 .. 15
|
||||
var_a3 = (currentRow - startRow) * colCount;
|
||||
// 1 .. 16
|
||||
var_t0 = ((currentRow - startRow) + 1) * colCount;
|
||||
|
||||
var_v0_4->unkC = -((var_v0_4->unk8 * var_s0_2->unk4) +
|
||||
((var_s0_2->unk0 * var_v0_4->unk0) + (var_s0_2->unk2 * var_v0_4->unk4)));
|
||||
var_s7++;
|
||||
var_s0_2++;
|
||||
}
|
||||
var_s1++;
|
||||
temp1_2++;
|
||||
temp3_2++;
|
||||
temp2_2++;
|
||||
temp4_2++;
|
||||
var_s3_2 = var_s2_s16;
|
||||
} while (var_s1 != sp358);
|
||||
}
|
||||
var_a1 = var_s8;
|
||||
var_s6++;
|
||||
} while (var_s6 != sp354);
|
||||
var_s8 = gWaveModel[arg0].originZ + (s32) (steps[0] * (currentRow + 1));
|
||||
var_f26 = steps[0] * steps[1];
|
||||
if (startCol < endCol) {
|
||||
currentCol = startCol; // s1
|
||||
do {
|
||||
// v0 = currentCol - startCol as index of spD8
|
||||
// t1 = -currentCol + startCol as index of spD8
|
||||
var_t6 = (startCol * -1) + currentCol;
|
||||
var_t8 = currentCol - startCol;
|
||||
temp1_2 = var_a3 + var_t8; // s4 current row + col
|
||||
temp2_2 = var_t0 + var_t8; // v1 current row + next col
|
||||
temp3_2 = var_a3 + var_t6; // s5 next row + current col
|
||||
temp4_2 = var_t0 + var_t6; // a0 next row + col
|
||||
pad_spC4 = steps[1] * (currentCol + 1);
|
||||
var_s2_s16 = gWaveModel[arg0].originX + pad_spC4;
|
||||
var_s0_2->x1 = var_s3_2;
|
||||
var_s0_2->x2 = var_s3_2;
|
||||
var_s0_2->x3 = var_s2_s16;
|
||||
var_s0_2->y1 = spD8[temp1_2];
|
||||
var_s0_2->y2 = spD8[temp3_2];
|
||||
var_s0_2->y3 = spD8[temp2_2 + 1];
|
||||
var_s0_2->z1 = var_a1;
|
||||
var_s0_2->z2 = var_s8;
|
||||
var_s0_2->z3 = var_a1;
|
||||
var_f20 = (var_s0_2->y1 - var_s0_2->y3) * steps[0];
|
||||
var_f22 = (var_s0_2->y1 - var_s0_2->y2) * steps[1];
|
||||
var_f0 = sqrtf((var_f20 * var_f20) + (var_f26 * var_f26) + (var_f22 * var_f22));
|
||||
if (var_f0 > 0.0f) {
|
||||
var_f24 = (1.0f / var_f0);
|
||||
var_v0_4 = &arg2[counter];
|
||||
var_v0_4->x = var_f20 * var_f24;
|
||||
var_v0_4->y = var_f26 * var_f24;
|
||||
var_v0_4->z = var_f22 * var_f24;
|
||||
var_v0_4->unkC_union.w =
|
||||
-((var_v0_4->z * var_s0_2->z1) + ((var_s0_2->x1 * var_v0_4->x) + (var_s0_2->y1 * var_v0_4->y)));
|
||||
counter++;
|
||||
var_s0_2++;
|
||||
}
|
||||
var_s0_2->x1 = var_s2_s16;
|
||||
var_s0_2->x2 = var_s3_2;
|
||||
var_s0_2->x3 = var_s2_s16;
|
||||
var_s0_2->y1 = spD8[temp1_2 + 1];
|
||||
var_s0_2->y2 = spD8[temp3_2];
|
||||
var_s0_2->y3 = spD8[temp4_2 + 1];
|
||||
var_s0_2->z1 = var_a1;
|
||||
var_s0_2->z2 = var_s8;
|
||||
var_s0_2->z3 = var_s8;
|
||||
var_f20 = (var_s0_2->y2 - var_s0_2->y3) * steps[0];
|
||||
var_f22 = (var_s0_2->y1 - var_s0_2->y3) * steps[1];
|
||||
var_f0 = sqrtf((var_f20 * var_f20) + (var_f26 * var_f26) + (var_f22 * var_f22));
|
||||
if (var_f0 > 0) {
|
||||
var_f24 = (1.0f / var_f0);
|
||||
var_v0_4 = &arg2[counter];
|
||||
var_v0_4->x = var_f20 * var_f24;
|
||||
var_v0_4->y = var_f26 * var_f24;
|
||||
var_v0_4->z = var_f22 * var_f24;
|
||||
|
||||
var_v0_4->unkC_union.w =
|
||||
-((var_v0_4->z * var_s0_2->z1) + ((var_s0_2->x1 * var_v0_4->x) + (var_s0_2->y1 * var_v0_4->y)));
|
||||
counter++;
|
||||
var_s0_2++;
|
||||
}
|
||||
currentCol++;
|
||||
var_s3_2 = var_s2_s16;
|
||||
} while (currentCol < endCol);
|
||||
}
|
||||
|
||||
var_a1 = var_s8;
|
||||
}
|
||||
|
||||
return var_s7;
|
||||
return counter;
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/waves/func_800BDC80.s")
|
||||
|
||||
Reference in New Issue
Block a user