Decompiled obj_init_butterfly

This commit is contained in:
David
2023-11-04 16:42:03 -05:00
parent 67830385a9
commit 056dee0229
2 changed files with 55 additions and 62 deletions
+7 -7
View File
@@ -5,9 +5,9 @@ This repo contains a work-in-progress decompilation of Diddy Kong Racing for the
Currently, only the US 1.0 version of the game is supported. US 1.1, EU 1.0, EU 1.1, and JP are not supported at this time.
<!-- README_SCORE_SUMMARY_BEGIN -->
As of November 2, 2023, this is our current score:
As of November 4, 2023, this is our current score:
&emsp;&emsp;&emsp;&emsp;Decomp progress: 64.04%
&emsp;&emsp;&emsp;&emsp;Decomp progress: 64.12%
&emsp;&emsp;&emsp;&emsp;Documentation progress: 35.21%
<!-- README_SCORE_SUMMARY_END -->
@@ -128,15 +128,15 @@ s32 is_drumstick_unlocked(void) {
```
<!-- README_SCORE_BEGIN -->
As of November 2, 2023, this is our current score:
As of November 4, 2023, this is our current score:
```
====================================================================
ADVENTURE ONE (ASM -> C Decompilation)
-------------- 64.04% Complete (66.95% NON_MATCHING) ---------------
# Decompiled functions: 1664
# GLOBAL_ASM remaining: 181
-------------- 64.12% Complete (67.03% NON_MATCHING) ---------------
# Decompiled functions: 1665
# GLOBAL_ASM remaining: 180
# NON_MATCHING functions: 16
# NON_EQUIVALENT WIP functions: 50
# NON_EQUIVALENT WIP functions: 49
--------------------------- Game Status ----------------------------
Balloons: 30/47, Keys: 3/4, Trophies: 3/5
T.T. Amulets: 3/4, Wizpig Amulets: 3/4
+48 -55
View File
@@ -4798,78 +4798,71 @@ void obj_init_wavegenerator(Object *obj, UNUSED LevelObjectEntry_WaveGenerator *
func_800BF524(obj);
}
#ifdef NON_EQUIVALENT
void obj_init_butterfly(Object *obj, LevelObjectEntry_Butterfly *entry, s32 arg2) {
Object_Butterfly *obj64;
s32 i, j;
s32 uMask, vMask;
obj64 = &obj->unk64->butterfly;
void obj_init_butterfly(Object *butterflyObj, LevelObjectEntry_Butterfly *butterflyEntry, s32 arg2) {
Object_Butterfly *butterfly;
s32 uMask;
s32 vMask;
s32 i;
butterfly = &butterflyObj->unk64->butterfly;
if (arg2 == 0) {
obj->segment.y_velocity = 0.0f;
obj64->unkFE = 0;
obj64->unk100 = 0;
obj64->unk104 = 0;
obj64->unkFD = 0;
obj64->unk106 = 384;
obj64->unk108 = 0.0f;
// This loop is okay
butterflyObj->segment.y_velocity = 0.0f;
butterfly->unkFE = 0;
butterfly->unk100 = 0;
butterfly->unk104 = 0;
butterfly->unkFD = 0;
butterfly->unk106 = 0x180;
butterfly->unk108 = 0.0f;
for(i = 0; i < 8; i++) {
obj64->triangles[i].flags = D_800DCAA8[i].flags;
obj64->triangles[i].vi0 = D_800DCAA8[i].vi0;
obj64->triangles[i].vi1 = D_800DCAA8[i].vi1;
obj64->triangles[i].vi2 = D_800DCAA8[i].vi2;
butterfly->triangles[i].flags = D_800DCAA8[i].flags;
butterfly->triangles[i].vi0 = D_800DCAA8[i].vi0;
butterfly->triangles[i].vi1 = D_800DCAA8[i].vi1;
butterfly->triangles[i].vi2 = D_800DCAA8[i].vi2;
}
// This loop is not.
uMask = 0;
for(i = 0; i < 6; i++) {
//u32 j = i + 6;
obj64->vertices[i].x = D_800DCB28[i].x;
obj64->vertices[i].y = D_800DCB28[i+1].y;
obj64->vertices[i].z = D_800DCB28[i+1].z;
obj64->vertices[i].r = 255;
obj64->vertices[i].g = 255;
obj64->vertices[i].b = 255;
obj64->vertices[i].a = 255;
obj64->vertices[(u32)(i+6)].x = D_800DCB28[i+1].x;
obj64->vertices[i+6].y = D_800DCB28[i].y;
obj64->vertices[i+6].z = D_800DCB28[i].z;
obj64->vertices[i+6].r = 255;
obj64->vertices[i+6].g = 255;
obj64->vertices[i+6].b = 255;
obj64->vertices[i+6].a = 255;
butterfly->vertices[uMask].x = D_800DCB28[uMask].x;
butterfly->vertices[uMask].y = D_800DCB28[uMask].y;
butterfly->vertices[uMask].z = D_800DCB28[uMask].z;
butterfly->vertices[uMask].r = 255;
butterfly->vertices[uMask].g = 255;
butterfly->vertices[uMask].b = 255;
butterfly->vertices[uMask].a = 255;
butterfly->vertices[uMask+6].x = D_800DCB28[uMask].x;
butterfly->vertices[uMask+6].y = D_800DCB28[uMask].y;
butterfly->vertices[uMask+6].z = D_800DCB28[uMask].z;
butterfly->vertices[uMask+6].r = 255;
butterfly->vertices[uMask+6].g = 255;
butterfly->vertices[uMask+6].b = 255;
butterfly->vertices[uMask+6].a = 255;
uMask++;
}
obj64->unkFC = 1;
butterfly->unkFC = 1;
}
obj->segment.trans.scale = entry->unkB * 0.01f;
if (entry->unkA < obj->segment.header->numberOfModelIds) {
obj64->texture = (TextureHeader*)obj->unk68[entry->unkA];
butterflyObj->segment.trans.scale = butterflyEntry->unkB * 0.01f;
if (butterflyEntry->unkA < butterflyObj->segment.header->numberOfModelIds) {
butterfly->texture = (TextureHeader* ) butterflyObj->unk68[butterflyEntry->unkA];
} else {
obj64->texture = (TextureHeader*)obj->unk68[0];
butterfly->texture = (TextureHeader* ) butterflyObj->unk68[0];
}
if (obj64->texture) {
uMask = (obj64->texture->width - 1) << 5;
vMask = (obj64->texture->height - 1) << 5;
if (butterfly->texture != NULL) {
uMask = (butterfly->texture->width - 1) << 5;
vMask = (butterfly->texture->height - 1) << 5;
} else {
uMask = 0;
vMask = 0;
}
for(i = 0; i < 8; i++) {
obj64->triangles[i].uv0.u = D_800DCAA8[i].uv0.u & uMask;
obj64->triangles[i].uv0.v = D_800DCAA8[i].uv0.v & vMask;
obj64->triangles[i].uv1.u = D_800DCAA8[i].uv1.u & uMask;
obj64->triangles[i].uv1.v = D_800DCAA8[i].uv1.v & vMask;
obj64->triangles[i].uv2.u = D_800DCAA8[i].uv2.u & uMask;
obj64->triangles[i].uv2.v = D_800DCAA8[i].uv2.v & vMask;
butterfly->triangles[i].uv0.u = D_800DCAA8[i].uv0.u & uMask;
butterfly->triangles[i].uv0.v = D_800DCAA8[i].uv0.v & vMask;
butterfly->triangles[i].uv1.u = D_800DCAA8[i].uv1.u & uMask;
butterfly->triangles[i].uv1.v = D_800DCAA8[i].uv1.v & vMask;
butterfly->triangles[i].uv2.u = D_800DCAA8[i].uv2.u & uMask;
butterfly->triangles[i].uv2.v = D_800DCAA8[i].uv2.v & vMask;
}
}
#else
GLOBAL_ASM("asm/non_matchings/object_functions/obj_init_butterfly.s")
#endif
GLOBAL_ASM("asm/non_matchings/object_functions/obj_loop_butterfly.s")
//Scratch: https://decomp.me/scratch/h4CcJ