diff --git a/asm/non_matchings/objects/func_80016BC4.s b/asm/non_matchings/objects/func_80016BC4.s deleted file mode 100644 index e11d4b6b..00000000 --- a/asm/non_matchings/objects/func_80016BC4.s +++ /dev/null @@ -1,46 +0,0 @@ -glabel func_80016BC4 -/* 0177C4 80016BC4 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0177C8 80016BC8 AFBF0024 */ sw $ra, 0x24($sp) -/* 0177CC 80016BCC AFB20020 */ sw $s2, 0x20($sp) -/* 0177D0 80016BD0 AFB1001C */ sw $s1, 0x1c($sp) -/* 0177D4 80016BD4 AFB00018 */ sw $s0, 0x18($sp) -/* 0177D8 80016BD8 8C8E005C */ lw $t6, 0x5c($a0) -/* 0177DC 80016BDC 00809025 */ move $s2, $a0 -/* 0177E0 80016BE0 0C005C27 */ jal func_8001709C -/* 0177E4 80016BE4 A1C00104 */ sb $zero, 0x104($t6) -/* 0177E8 80016BE8 0C005C27 */ jal func_8001709C -/* 0177EC 80016BEC 02402025 */ move $a0, $s2 -/* 0177F0 80016BF0 8E4F0040 */ lw $t7, 0x40($s2) -/* 0177F4 80016BF4 00008825 */ move $s1, $zero -/* 0177F8 80016BF8 81E30055 */ lb $v1, 0x55($t7) -/* 0177FC 80016BFC 00008025 */ move $s0, $zero -/* 017800 80016C00 18600014 */ blez $v1, .L80016C54 -/* 017804 80016C04 8FBF0024 */ lw $ra, 0x24($sp) -.L80016C08: -/* 017808 80016C08 8E580068 */ lw $t8, 0x68($s2) -/* 01780C 80016C0C 00000000 */ nop -/* 017810 80016C10 0310C821 */ addu $t9, $t8, $s0 -/* 017814 80016C14 8F220000 */ lw $v0, ($t9) -/* 017818 80016C18 00000000 */ nop -/* 01781C 80016C1C 10400008 */ beqz $v0, .L80016C40 -/* 017820 80016C20 00000000 */ nop -/* 017824 80016C24 8C440000 */ lw $a0, ($v0) -/* 017828 80016C28 0C01805F */ jal func_8006017C -/* 01782C 80016C2C 00000000 */ nop -/* 017830 80016C30 8E480040 */ lw $t0, 0x40($s2) -/* 017834 80016C34 00000000 */ nop -/* 017838 80016C38 81030055 */ lb $v1, 0x55($t0) -/* 01783C 80016C3C 00000000 */ nop -.L80016C40: -/* 017840 80016C40 26310001 */ addiu $s1, $s1, 1 -/* 017844 80016C44 0223082A */ slt $at, $s1, $v1 -/* 017848 80016C48 1420FFEF */ bnez $at, .L80016C08 -/* 01784C 80016C4C 26100004 */ addiu $s0, $s0, 4 -/* 017850 80016C50 8FBF0024 */ lw $ra, 0x24($sp) -.L80016C54: -/* 017854 80016C54 8FB00018 */ lw $s0, 0x18($sp) -/* 017858 80016C58 8FB1001C */ lw $s1, 0x1c($sp) -/* 01785C 80016C5C 8FB20020 */ lw $s2, 0x20($sp) -/* 017860 80016C60 03E00008 */ jr $ra -/* 017864 80016C64 27BD0028 */ addiu $sp, $sp, 0x28 - diff --git a/src/objects.c b/src/objects.c index e5ae3cdb..9d9f779a 100644 --- a/src/objects.c +++ b/src/objects.c @@ -836,7 +836,7 @@ s32 func_8000FD20(unk8000FD20 *arg0, unk8000FD20_2 *arg1) { s32 func_8000FD34(unk8000FD34 *arg0, s32 arg1) { arg0->unk5C = arg1; - func_80016BC4(); + func_80016BC4(arg0); return 0x10C; } @@ -1483,7 +1483,32 @@ GLOBAL_ASM("asm/non_matchings/objects/func_800155B8.s") GLOBAL_ASM("asm/non_matchings/objects/func_800159C8.s") GLOBAL_ASM("asm/non_matchings/objects/func_80016500.s") GLOBAL_ASM("asm/non_matchings/objects/func_80016748.s") -GLOBAL_ASM("asm/non_matchings/objects/func_80016BC4.s") + +void func_80016BC4(unk8000FD34 *arg0) { + s32 var_s0; + s32 var_s1; + s32 *temp_v0; + s8 var_v1; + + arg0->unk5C->unk104 = 0; + func_8001709C(); + func_8001709C(arg0); + var_s1 = 0; + var_v1 = arg0->unk40->unk55; + var_s0 = 0; + if (var_v1 > 0) { + do { + temp_v0 = *(arg0->unk68 + var_s0); + if (temp_v0 != NULL) { + func_8006017C(*temp_v0); + var_v1 = arg0->unk40->unk55; + } + var_s1 += 1; + var_s0 += 1; + } while (var_s1 < var_v1); + } +} + GLOBAL_ASM("asm/non_matchings/objects/func_80016C68.s") GLOBAL_ASM("asm/non_matchings/objects/func_80016DE8.s") GLOBAL_ASM("asm/non_matchings/objects/func_8001709C.s") diff --git a/src/objects.h b/src/objects.h index 6772c5f6..ffe42997 100644 --- a/src/objects.h +++ b/src/objects.h @@ -218,10 +218,26 @@ typedef struct unk8000FD20 { unk8000FD20_2 *unk4C; } unk8000FD20; +/* Unknown Size */ +typedef struct unk_80016BC4_2 { + u8 pad0[0x104]; + s8 unk104; +} unk_80016BC4_2; + +/* Unknown Size */ +typedef struct unk_80016BC4_3 { + u8 pad0[0x55]; + s8 unk55; +} unk_80016BC4_3; + /* Unknown Size. This might just be unk8000FD20. */ typedef struct unk8000FD34 { - u8 unk00[0x5C]; - s32 unk5C; + u8 pad0[0x40]; + unk_80016BC4_3 *unk40; + u8 pad44[0x18]; + unk_80016BC4_2 *unk5C; + u8 pad60[0x8]; + s32* unk68; } unk8000FD34; typedef struct struct_8000FC6C { @@ -441,6 +457,7 @@ s32 func_8000FC6C(struct_8000FC6C_3 *arg0, struct_8000FC6C *arg1); void render_3d_billboard(Object *obj); void func_80011960(Object *obj, Vertex *verts, u32 numVertices, Triangle *triangles, u32 numTriangles, TextureHeader *tex, u32 arg6, u32 arg7, f32 arg8); void func_8000B290(void); +void func_80016BC4(unk8000FD34*); //Non Matching void calc_dynamic_lighting_for_object_1(Object *, ObjectModel *, s16, Object *, f32, f32);