From b9386e28610d80813024d8fb0c375dacdb9624af Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sat, 30 Apr 2022 21:40:52 +0300 Subject: [PATCH] Match sub_08078180 --- asm/non_matching/playerUtils/sub_08078180.inc | 157 ------------------ src/playerUtils.c | 72 +++++++- 2 files changed, 71 insertions(+), 158 deletions(-) delete mode 100644 asm/non_matching/playerUtils/sub_08078180.inc diff --git a/asm/non_matching/playerUtils/sub_08078180.inc b/asm/non_matching/playerUtils/sub_08078180.inc deleted file mode 100644 index 6588073b..00000000 --- a/asm/non_matching/playerUtils/sub_08078180.inc +++ /dev/null @@ -1,157 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - ldr r0, _080781C8 @ =gUnk_0200AF00 - adds r1, r0, #0 - adds r1, #0x2f - ldrb r1, [r1] - adds r6, r0, #0 - cmp r1, #0 - beq _08078192 - b _080782BC -_08078192: - movs r4, #0 - ldr r5, _080781CC @ =gPlayerState - ldrb r0, [r5, #2] - cmp r0, #0 - beq _0807819E - b _080782B6 -_0807819E: - ldr r0, [r5, #0x30] - ldr r1, _080781D0 @ =0x00104D00 - ands r0, r1 - cmp r0, #0 - beq _080781AA - b _080782B6 -_080781AA: - ldrb r0, [r5, #5] - subs r0, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bhi _080781D4 - adds r1, r6, #0 - adds r1, #0x2e - ldrb r0, [r1] - movs r4, #3 - cmp r0, #0 - bne _080781C4 - b _080782B6 -_080781C4: - adds r4, r0, #0 - b _080782B6 - .align 2, 0 -_080781C8: .4byte gUnk_0200AF00 -_080781CC: .4byte gPlayerState -_080781D0: .4byte 0x00104D00 -_080781D4: - adds r1, r6, #0 - adds r1, #0x2d - ldrb r0, [r1] - cmp r0, #0 - bne _080781C4 - bl sub_080784E4 - adds r1, r0, #0 - ldr r0, [r1, #8] - adds r0, #0x39 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bne _08078278 - ldrb r0, [r1, #1] - subs r0, #1 - cmp r0, #9 - bhi _080782B6 - lsls r0, r0, #2 - ldr r1, _08078204 @ =_08078208 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08078204: .4byte _08078208 -_08078208: @ jump table - .4byte _08078230 @ case 0 - .4byte _080782B6 @ case 1 - .4byte _08078254 @ case 2 - .4byte _080782B6 @ case 3 - .4byte _08078254 @ case 4 - .4byte _08078254 @ case 5 - .4byte _08078230 @ case 6 - .4byte _0807823C @ case 7 - .4byte _08078260 @ case 8 - .4byte _0807826C @ case 9 -_08078230: - movs r4, #7 - ldr r6, _08078238 @ =gUnk_0200AF00 - b _080782B6 - .align 2, 0 -_08078238: .4byte gUnk_0200AF00 -_0807823C: - ldr r0, _0807824C @ =gRoomVars - ldrb r0, [r0, #6] - ldr r6, _08078250 @ =gUnk_0200AF00 - cmp r0, #0 - bne _080782B6 - movs r4, #9 - b _080782B6 - .align 2, 0 -_0807824C: .4byte gRoomVars -_08078250: .4byte gUnk_0200AF00 -_08078254: - movs r4, #6 - ldr r6, _0807825C @ =gUnk_0200AF00 - b _080782B6 - .align 2, 0 -_0807825C: .4byte gUnk_0200AF00 -_08078260: - movs r4, #5 - ldr r6, _08078268 @ =gUnk_0200AF00 - b _080782B6 - .align 2, 0 -_08078268: .4byte gUnk_0200AF00 -_0807826C: - movs r4, #2 - ldr r6, _08078274 @ =gUnk_0200AF00 - b _080782B6 - .align 2, 0 -_08078274: .4byte gUnk_0200AF00 -_08078278: - bl sub_080789A8 - cmp r0, #0 - beq _080782A4 - adds r0, r5, #0 - adds r0, #0xa8 - ldrb r0, [r0] - cmp r0, #0xe - beq _080782BC - ldr r1, _080782A0 @ =gCarriedEntity - ldrb r0, [r1, #1] - movs r4, #9 - cmp r0, #2 - bne _080782B6 - ldr r0, [r1, #8] - ldrb r0, [r0, #0x16] - cmp r0, #1 - bne _080782B6 - movs r4, #8 - b _080782B6 - .align 2, 0 -_080782A0: .4byte gCarriedEntity -_080782A4: - adds r0, r5, #0 - adds r0, #0xa8 - ldrb r0, [r0] - cmp r0, #1 - bne _080782B6 - ldrb r0, [r5, #0x1a] - cmp r0, #0 - bne _080782B6 - movs r4, #0xc -_080782B6: - adds r0, r6, #0 - adds r0, #0x2c - strb r4, [r0] -_080782BC: - pop {r4, r5, r6, pc} - .align 2, 0 - .syntax divided diff --git a/src/playerUtils.c b/src/playerUtils.c index 3e236f6a..4ccd5a99 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -750,7 +750,77 @@ void ForceSetPlayerState(u32 framestate) { sub_08078B48(); } -ASM_FUNC("asm/non_matching/playerUtils/sub_08078180.inc", void sub_08078180()) +void sub_08078180(void) { + u8 uVar1; + u8 uVar3; + struct_03003DF8* ptr; + + if (gUnk_0200AF00.unk_2f != 0) + return; + + uVar1 = 0; + if ((gPlayerState.jump_status == 0) && + ((gPlayerState.flags & (PL_IN_HOLE | PL_FROZEN | PL_BURNING | PL_DISABLE_ITEMS | PL_DRUGGED)) == 0)) { + if ((u8)(gPlayerState.heldObject - 1) < 4) { + if (gUnk_0200AF00.unk_2e != 0) { + uVar1 = gUnk_0200AF00.unk_2e; + } else { + uVar1 = 3; + } + } else { + if (gUnk_0200AF00.unk_2d != 0) { + uVar1 = gUnk_0200AF00.unk_2d; + } else { + ptr = sub_080784E4(); + if (ptr->entity->interactType == 0) { + + switch (ptr->unk_1) { + case 1: + case 7: + uVar1 = 7; + break; + case 8: + if (gRoomVars.shopItemType == ITEM_NONE) { + uVar1 = 9; + } + break; + case 3: + case 5: + case 6: + uVar1 = 6; + break; + case 9: + uVar1 = 5; + break; + case 10: + uVar1 = 2; + break; + } + } else { + if (sub_080789A8()) { + if (((gPlayerState.framestate != 0x0e))) { + + if ((gCarriedEntity.unk_1 == 2) && ((gCarriedEntity.unk_8)->carryFlags == 1)) { + uVar1 = 8; + } else { + uVar1 = 9; + } + } else { + return; + } + } else { + if ((gPlayerState.framestate == 1) && (gPlayerState.mobility == 0)) { + uVar1 = 0xc; + } else { + uVar1 = 0; + } + } + } + } + } + } + gUnk_0200AF00.unk_2c = uVar1; +} bool32 sub_080782C0(void) { u8 tmp;