From 0fca2fad42c551ef5a74c682431c69856d244120 Mon Sep 17 00:00:00 2001 From: Mittenz Date: Sun, 23 Aug 2020 03:46:24 -0500 Subject: [PATCH] c: func_8002A2C8 --- .../unknown_0255E0/func_8002A134.s | 21 -------- src/unknown_0255E0.c | 51 ++++++++++++++++--- 2 files changed, 45 insertions(+), 27 deletions(-) diff --git a/asm/non_matchings/unknown_0255E0/func_8002A134.s b/asm/non_matchings/unknown_0255E0/func_8002A134.s index 8f0806a5..aa7be802 100644 --- a/asm/non_matchings/unknown_0255E0/func_8002A134.s +++ b/asm/non_matchings/unknown_0255E0/func_8002A134.s @@ -92,24 +92,3 @@ glabel func_8002A134 /* 02AE90 8002A290 27BD0018 */ addiu $sp, $sp, 0x18 /* 02AE94 8002A294 03E00008 */ jr $ra /* 02AE98 8002A298 00601025 */ move $v0, $v1 - -/* 02AE9C 8002A29C 04800008 */ bltz $a0, .L8002A2C0 -/* 02AEA0 8002A2A0 3C03800E */ lui $v1, %hi(D_800DC918) # $v1, 0x800e -/* 02AEA4 8002A2A4 8C63C918 */ lw $v1, %lo(D_800DC918)($v1) -/* 02AEA8 8002A2A8 0004C100 */ sll $t8, $a0, 4 -/* 02AEAC 8002A2AC 846E001A */ lh $t6, 0x1a($v1) -/* 02AEB0 8002A2B0 0304C021 */ addu $t8, $t8, $a0 -/* 02AEB4 8002A2B4 01C4082A */ slt $at, $t6, $a0 -/* 02AEB8 8002A2B8 10200003 */ beqz $at, .L8002A2C8 -/* 02AEBC 8002A2BC 00000000 */ nop -.L8002A2C0: -/* 02AEC0 8002A2C0 03E00008 */ jr $ra -/* 02AEC4 8002A2C4 00001025 */ move $v0, $zero - -.L8002A2C8: -/* 02AEC8 8002A2C8 8C6F0004 */ lw $t7, 4($v1) -/* 02AECC 8002A2CC 0018C080 */ sll $t8, $t8, 2 -/* 02AED0 8002A2D0 01F81021 */ addu $v0, $t7, $t8 -/* 02AED4 8002A2D4 03E00008 */ jr $ra -/* 02AED8 8002A2D8 00000000 */ nop - diff --git a/src/unknown_0255E0.c b/src/unknown_0255E0.c index 0f9a7f6f..d039862b 100644 --- a/src/unknown_0255E0.c +++ b/src/unknown_0255E0.c @@ -87,10 +87,10 @@ typedef struct{ typedef struct{ s16 unk00; - u8 pad02[0x02]; + s16 unk02; s16 unk04; s16 unk06; - u8 pad08[0x02]; + s16 unk08; s16 unk0A; } unk800DC918_08; @@ -99,7 +99,7 @@ typedef struct{ unk800DC918_04 *unk04; unk800DC918_08 *unk08; u8 pad0C[0x0E]; - s16 unk08_count; + s16 count; } unk800DC918; extern unk800DC918* D_800DC918; @@ -197,7 +197,7 @@ s32 func_8002A05C(s32 arg0, s32 arg1, s32* arg2){ s32 i; s32 cnt = 0; unk800DC918_08 * a0; - for(i = 0; i < D_800DC918->unk08_count; i++){ + for(i = 0; i < D_800DC918->count; i++){ a0 = D_800DC918->unk08 + i; if(arg0 < a0->unk06 + 4 && a0->unk00 - 4 < arg0 && arg1 < a0->unk0A + 4 && a0->unk04 - 4 < arg1 @@ -206,15 +206,54 @@ s32 func_8002A05C(s32 arg0, s32 arg1, s32* arg2){ cnt++; arg2++; } - } return cnt; } +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_8002A134.s") +#else +s32 func_8002A134(s32* arg0, unk800DC918_08 arg1){ + s32 i; + unk800DC918_08 * a0; + s32 cnt = 0; + unk800DC918_08 bnd; + + //BAD variable assignments; + bnd.unk00 = arg1.unk00 - 4; + bnd.unk02 = arg1.unk02 - 4; + bnd.unk04 = arg1.unk04 - 4; + bnd.unk06 = arg1.unk06 + 4; + bnd.unk08 = arg1.unk08 + 4; + bnd.unk0A = arg1.unk0A + 4; + + + for(i = 0; i < D_800DC918->count; i++){ + a0 = D_800DC918->unk08 + i; + if( a0->unk06 >= bnd.unk00 && bnd.unk06 >= a0->unk00 + && a0->unk0A >= bnd.unk04 && bnd.unk0A >= a0->unk04 + && a0->unk08 >= bnd.unk02 && bnd.unk08 >= a0->unk02 + ){ + *arg0 = i; + cnt++; + arg0++; + } + } + return cnt; +} +#endif + +unk800DC918_04 *func_8002A2C8(s32 arg0){ + if(arg0 < 0 || D_800DC918->count < arg0) + return NULL; + + return D_800DC918->unk04 + arg0; +} + + unk800DC918_08 *func_8002A2DC(s32 arg0){ - if(arg0 < 0 || D_800DC918->unk08_count < arg0) + if(arg0 < 0 || D_800DC918->count < arg0) return NULL; return D_800DC918->unk08 + arg0;