From 81c8e7622f5f5f16b111aa31e20e956cdc7c6c41 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Wed, 29 Sep 2021 10:24:28 +0200 Subject: [PATCH] manager4: matched sub_0805795C --- asm/non_matching/manager4/sub_0805795C.inc | 94 ---------------------- src/manager/manager4.c | 32 +++----- 2 files changed, 13 insertions(+), 113 deletions(-) delete mode 100644 asm/non_matching/manager4/sub_0805795C.inc diff --git a/asm/non_matching/manager4/sub_0805795C.inc b/asm/non_matching/manager4/sub_0805795C.inc deleted file mode 100644 index a74f41ed..00000000 --- a/asm/non_matching/manager4/sub_0805795C.inc +++ /dev/null @@ -1,94 +0,0 @@ - push {r4, r5, r6, r7, lr} - add r7, r0, #0 - add r6, r1, #0 - ldr r0, _080579BC @ =gUnk_03004030 - ldrb r0, [r0, #8] - cmp r0, #0 - beq _080579C8 - ldr r1, _080579C0 @ =gPlayerEntity - ldr r3, _080579C4 @ =gRoomControls - ldrh r2, [r1, #0x2e] - ldrh r0, [r3, #6] - sub r2, r2, r0 - lsl r2, r2, #0x10 - lsr r2, r2, #0x10 - ldrh r0, [r1, #0x32] - ldrh r1, [r3, #8] - sub r0, r0, r1 - lsl r0, r0, #0x10 - lsr r4, r0, #0x10 - ldrh r3, [r6] - mov r1, #0x3f - and r1, r3 - lsl r1, r1, #4 - add r1, #8 - mov r0, #0xfc - lsl r0, r0, #4 - and r0, r3 - lsl r0, r0, #0xe - mov r3, #0xc0 - lsl r3, r3, #0xd - add r0, r0, r3 - lsr r3, r0, #0x10 - sub r2, r2, r1 - add r0, r2, #0 - add r0, #0x18 - cmp r0, #0x30 - bhi _08057A14 - sub r0, r4, r3 - add r0, #8 - cmp r0, #0x10 - bhi _08057A14 - cmp r4, r3 - bhs _08057A00 - add r0, r2, #0 - add r0, #0xc - cmp r0, #0x18 - bls _08057A14 - b _08057A00 - .align 2, 0 -_080579BC: .4byte gUnk_03004030 -_080579C0: .4byte gPlayerEntity -_080579C4: .4byte gRoomControls -_080579C8: - ldr r3, _08057A0C @ =gPlayerEntity - mov r1, #0x2e - ldrsh r0, [r3, r1] - ldr r2, _08057A10 @ =gRoomControls - ldrh r1, [r2, #6] - sub r0, r0, r1 - asr r4, r0, #4 - mov r1, #0x3f - and r4, r1 - mov r0, #0x32 - ldrsh r5, [r3, r0] - ldrh r2, [r2, #8] - sub r0, r5, r2 - asr r0, r0, #4 - and r0, r1 - lsl r0, r0, #6 - orr r4, r0 - ldrh r1, [r6] - cmp r4, r1 - bne _08057A14 - lsr r0, r4, #6 - lsl r0, r0, #4 - add r0, r2, r0 - add r0, #6 - lsl r0, r0, #0x10 - lsr r3, r0, #0x10 - cmp r5, r3 - bge _08057A14 -_08057A00: - add r0, r7, #0 - add r1, r6, #0 - bl sub_08057A18 - mov r0, #1 - b _08057A16 - .align 2, 0 -_08057A0C: .4byte gPlayerEntity -_08057A10: .4byte gRoomControls -_08057A14: - mov r0, #0 -_08057A16: - pop {r4, r5, r6, r7, pc} diff --git a/src/manager/manager4.c b/src/manager/manager4.c index 970c544f..50c497b5 100644 --- a/src/manager/manager4.c +++ b/src/manager/manager4.c @@ -62,37 +62,31 @@ void sub_08057920(Manager* this) { void sub_08057A18(Manager*, DiggingCaveEntrance*); -NONMATCH("asm/non_matching/manager4/sub_0805795C.inc", u32 sub_0805795C(Manager* this, DiggingCaveEntrance* entr)) { +u32 sub_0805795C(Manager* this, DiggingCaveEntrance* entr) { u16 offsetX, offsetY, offsetX2, offsetY2; - u32 tmp; - if (gUnk_03004030.unk_00) { // TODO .address_width (?) + u32 tmp, tmp2; + if (gUnk_03004030.unk_08) { offsetX = gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX; offsetY = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY; offsetX2 = (entr->unk_00 & 0x3F) * 16 + 8; offsetY2 = ((entr->unk_00 & 0xFC0) >> 6) * 16 + 0x18; - if ((u32)(offsetX - offsetX2) + 0x18 > 0x30) + tmp = offsetX - offsetX2; + if (tmp + 0x18 > 0x30 || offsetY - offsetY2 + 8 > 0x10U) return 0; - if ((u32)(offsetY - offsetY2) + 8 > 0x10) + if (offsetY < offsetY2 && tmp + 0xC <= 0x18) return 0; - if (((offsetY < offsetY2))) - if ((u32)(offsetX - offsetX2) + 0xC <= 0x18) - return 0; - + sub_08057A18(this, entr); + return 1; } else { - // offsetX = ((gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 0x3F; - // offsetY = ((gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 0x3F; - // tmp = offsetX | (offsetY << 6); - tmp = COORD_TO_TILE((&gPlayerEntity)); - if (tmp != entr->unk_00) + if (COORD_TO_TILE(&gPlayerEntity) != entr->unk_00) return 0; - offsetY = gRoomControls.roomOriginY + ((tmp >> 6) * 16) + 6; - if (gPlayerEntity.y.HALF.HI >= offsetY) + offsetY2 = gRoomControls.roomOriginY + ((entr->unk_00 >> 6) << 4) + 6; + if (gPlayerEntity.y.HALF.HI >= offsetY2) return 0; + sub_08057A18(this, entr); + return 1; } - sub_08057A18(this, entr); - return 1; } -END_NONMATCH extern void sub_08080930();