diff --git a/asm/non_matching/playerUtils/sub_08079550.inc b/asm/non_matching/playerUtils/sub_08079550.inc deleted file mode 100644 index 0dcf64c4..00000000 --- a/asm/non_matching/playerUtils/sub_08079550.inc +++ /dev/null @@ -1,218 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - ldr r0, _080795A8 @ =gDiggingCaveEntranceTransition - ldrb r0, [r0, #8] - cmp r0, #0 - beq _08079562 - b _080796FC -_08079562: - ldr r2, _080795AC @ =gPlayerState - ldrb r0, [r2, #0x1e] - cmp r0, #0 - beq _08079576 - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #3 - ands r0, r1 - cmp r0, #0 - beq _080795B4 -_08079576: - adds r0, r2, #0 - adds r0, #0x26 - ldrb r0, [r0] - ldr r1, _080795B0 @ =gPlayerEntity - mov r8, r1 - cmp r0, #0 - bne _080795A0 - ldrb r1, [r2, #0x1b] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - bne _080795A0 - mov r3, r8 - ldrb r1, [r3, #0x15] - ldrb r2, [r2, #0xd] - cmp r1, r2 - bne _080795A0 - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080795B4 -_080795A0: - movs r0, #0 - mov r5, r8 - strb r0, [r5, #0xf] - b _080796FE - .align 2, 0 -_080795A8: .4byte gDiggingCaveEntranceTransition -_080795AC: .4byte gPlayerState -_080795B0: .4byte gPlayerEntity -_080795B4: - bl sub_08079778 - cmp r0, #0 - bne _080795BE - b _080796FC -_080795BE: - ldr r3, _08079610 @ =gPlayerEntity - ldrb r2, [r3, #0x14] - movs r0, #6 - ands r0, r2 - ldr r1, _08079614 @ =gUnk_0811C100 - adds r1, r0, r1 - movs r0, #2 - ands r0, r2 - mov r8, r3 - cmp r0, #0 - beq _0807961C - movs r6, #0x2e - ldrsh r2, [r3, r6] - movs r0, #0 - ldrsb r0, [r1, r0] - adds r2, r2, r0 - ldr r4, _08079618 @ =gRoomControls - ldrh r0, [r4, #6] - subs r2, r2, r0 - asrs r2, r2, #4 - movs r3, #0x3f - ands r2, r3 - mov r0, r8 - movs r5, #0x32 - ldrsh r1, [r0, r5] - ldr r0, [r0, #0x48] - ldrb r5, [r0, #3] - adds r0, r1, r5 - ldrh r4, [r4, #8] - subs r0, r0, r4 - asrs r0, r0, #4 - ands r0, r3 - lsls r7, r0, #6 - orrs r7, r2 - subs r1, r1, r5 - subs r1, r1, r4 - asrs r1, r1, #4 - ands r1, r3 - lsls r4, r1, #6 - orrs r4, r2 - b _0807965E - .align 2, 0 -_08079610: .4byte gPlayerEntity -_08079614: .4byte gUnk_0811C100 -_08079618: .4byte gRoomControls -_0807961C: - mov r6, r8 - movs r0, #0x2e - ldrsh r2, [r6, r0] - ldr r0, [r6, #0x48] - ldrb r0, [r0, #4] - mov ip, r0 - adds r0, r2, r0 - ldr r4, _080796EC @ =gRoomControls - ldrh r3, [r4, #6] - mov sb, r3 - subs r0, r0, r3 - asrs r7, r0, #4 - movs r3, #0x3f - ands r7, r3 - movs r5, #0x32 - ldrsh r0, [r6, r5] - ldrb r1, [r1, #1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - adds r0, r0, r1 - ldrh r1, [r4, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r7, r0 - mov r6, ip - subs r2, r2, r6 - mov r1, sb - subs r2, r2, r1 - asrs r4, r2, #4 - ands r4, r3 - orrs r4, r0 -_0807965E: - adds r0, r7, #0 - mov r5, r8 - adds r5, #0x38 - ldrb r1, [r5] - bl sub_080B1AE0 - adds r3, r0, #0 - ldr r6, _080796F0 @ =gUnk_0811C1E8 - mov r1, r8 - ldrb r0, [r1, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r6 - ldr r1, [r0] - adds r0, r3, #0 - bl sub_08007DD6 - adds r3, r0, #0 - cmp r3, #0 - beq _080796FC - adds r0, r4, #0 - ldrb r1, [r5] - bl sub_080B1AE0 - adds r3, r0, #0 - mov r5, r8 - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r6 - ldr r1, [r0] - adds r0, r3, #0 - bl sub_08007DD6 - adds r3, r0, #0 - cmp r3, #0 - beq _080796FC - ldr r1, _080796F4 @ =gPlayerState - ldrb r2, [r1, #6] - movs r0, #0x80 - orrs r0, r2 - strb r0, [r1, #6] - ldrb r0, [r1, #0x1e] - adds r4, r1, #0 - cmp r0, #0 - bne _080796C8 - ldrb r0, [r5, #0xf] - adds r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #5 - bls _080796FC -_080796C8: - ldr r0, _080796F8 @ =gPlayerEntity - subs r1, r3, #1 - movs r2, #0 - strb r1, [r0, #0x14] - movs r1, #4 - strb r1, [r0, #0xc] - strb r2, [r0, #0xd] - ldrb r2, [r0, #0x10] - movs r1, #0x7f - ands r1, r2 - strb r1, [r0, #0x10] - movs r1, #0x81 - strb r1, [r4, #2] - bl DoPlayerAction - movs r0, #1 - b _080796FE - .align 2, 0 -_080796EC: .4byte gRoomControls -_080796F0: .4byte gUnk_0811C1E8 -_080796F4: .4byte gPlayerState -_080796F8: .4byte gPlayerEntity -_080796FC: - movs r0, #0 -_080796FE: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/src/playerUtils.c b/src/playerUtils.c index 766da0ff..5b71aebe 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -1763,7 +1763,54 @@ u32 sub_0807953C(void) { return gPlayerState.playerInput.newInput & tmp; } -ASM_FUNC("asm/non_matching/playerUtils/sub_08079550.inc", u32 sub_08079550(void)) +bool32 sub_08079550(void) { + const s8* ptr; + u32 uVar3; + u32 tilePos2; + u32 tilePos1; + + if (gDiggingCaveEntranceTransition.isDiggingCave == 0) { + if ((gPlayerState.dash_state == 0 || (gPlayerState.flags & PL_BURNING)) && + (gPlayerState.swim_state != 0 || (gPlayerState.sword_state & 0x40) || + gPlayerEntity.direction != gPlayerState.direction || (gPlayerEntity.direction & 0x80))) { + gPlayerEntity.subtimer = 0; + return FALSE; + } + if (sub_08079778()) { + ptr = &gUnk_0811C100[gPlayerEntity.animationState & 6]; + if ((gPlayerEntity.animationState & 2) != 0) { + tilePos1 = COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr[0], -(gPlayerEntity.hitbox)->unk2[1]); + tilePos2 = COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr[0], +(gPlayerEntity.hitbox)->unk2[1]); + } else { + + tilePos1 = COORD_TO_TILE_OFFSET(&gPlayerEntity, -(gPlayerEntity.hitbox)->unk2[2], -ptr[1]); + tilePos2 = COORD_TO_TILE_OFFSET(&gPlayerEntity, (gPlayerEntity.hitbox)->unk2[2], -ptr[1]); + } + + uVar3 = sub_080B1AE0(tilePos1, gPlayerEntity.collisionLayer); + uVar3 = sub_08007DD6(uVar3, gUnk_0811C1E8[gPlayerEntity.animationState >> 1]); + if (uVar3 != 0) { + uVar3 = sub_080B1AE0(tilePos2, gPlayerEntity.collisionLayer); + uVar3 = sub_08007DD6(uVar3, gUnk_0811C1E8[gPlayerEntity.animationState >> 1]); + if (uVar3 != 0) { + gPlayerState.pushedObject |= 0x80; + if (gPlayerState.dash_state == 0 && (++gPlayerEntity.subtimer <= 5)) { + return FALSE; + } + + gPlayerEntity.animationState = uVar3 - 1; + gPlayerEntity.action = 4; + gPlayerEntity.subAction = 0; + COLLISION_OFF(&gPlayerEntity); + gPlayerState.jump_status = 0x81; + DoPlayerAction(&gPlayerEntity); + return TRUE; + } + } + } + } + return FALSE; +} void sub_08079708(Entity* this) { gPlayerState.framestate = PL_STATE_DIE;