From 3d3b6c1b2c39ff8737ef51ce1f4da7b0c0652aa9 Mon Sep 17 00:00:00 2001 From: Reinmmar Date: Wed, 29 Nov 2023 09:13:55 +0100 Subject: [PATCH 1/2] cleaned up matching function --- asm/non_matching/playerUtils/sub_080792D8.inc | 139 ------------------ include/player.h | 1 + include/tiles.h | 9 ++ src/playerUtils.c | 40 ++++- 4 files changed, 48 insertions(+), 141 deletions(-) delete mode 100644 asm/non_matching/playerUtils/sub_080792D8.inc diff --git a/asm/non_matching/playerUtils/sub_080792D8.inc b/asm/non_matching/playerUtils/sub_080792D8.inc deleted file mode 100644 index e14695a1..00000000 --- a/asm/non_matching/playerUtils/sub_080792D8.inc +++ /dev/null @@ -1,139 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - ldr r5, _08079344 @ =gPlayerEntity - adds r3, r5, #0 - adds r3, #0x42 - ldrb r0, [r3] - cmp r0, #0 - beq _080793E0 - ldrb r2, [r5, #0xc] - cmp r2, #0xb - beq _08079338 - ldr r0, _08079348 @ =gPlayerState - ldrb r1, [r0, #0x1e] - adds r6, r0, #0 - cmp r1, #0 - bne _08079338 - ldrb r0, [r6, #5] - subs r0, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bls _08079338 - ldrb r0, [r6, #2] - cmp r0, #0 - bne _08079338 - ldrb r0, [r6, #0x12] - cmp r0, #0xff - beq _08079338 - ldrb r1, [r6, #7] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08079338 - adds r0, r6, #0 - adds r0, #0x26 - ldrb r1, [r0] - movs r0, #0xf - ands r0, r1 - subs r0, #1 - cmp r0, #0 - bgt _08079338 - cmp r2, #3 - beq _08079338 - ldr r1, [r6, #0x30] - movs r0, #0x80 - lsls r0, r0, #0xb - ands r1, r0 - cmp r1, #0 - beq _0807934C -_08079338: - adds r1, r5, #0 - adds r1, #0x42 - movs r0, #0 - strb r0, [r1] - b _080793E0 - .align 2, 0 -_08079344: .4byte gPlayerEntity -_08079348: .4byte gPlayerState -_0807934C: - cmp r2, #0x1d - bne _0807935E - adds r0, r5, #0 - adds r0, #0x3e - ldrb r0, [r0] - cmp r0, #0x10 - beq _0807935E - strb r1, [r3] - b _080793E0 -_0807935E: - adds r0, r5, #0 - adds r0, #0x42 - ldrb r3, [r0] - movs r1, #0 - ldrsb r1, [r0, r1] - adds r2, r0, #0 - cmp r1, #0 - ble _08079372 - subs r0, r3, #1 - b _08079374 -_08079372: - adds r0, r3, #1 -_08079374: - strb r0, [r2] - ldrb r0, [r2] - cmp r0, #0 - beq _080793E0 - adds r4, r6, #0 - ldrb r0, [r4, #7] - movs r1, #0xdf - ands r1, r0 - strb r1, [r4, #7] - adds r0, r5, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _080793CA - adds r0, r4, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - bne _080793CA - ldr r0, [r4, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _080793CA - ldrb r0, [r4, #2] - cmp r0, #0 - bne _080793CA - bl ResetActiveItems - ldr r0, [r4, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - bne _080793C4 - movs r0, #0x8a - lsls r0, r0, #1 - strh r0, [r4, #8] - b _080793CA -_080793C4: - movs r0, #0x83 - lsls r0, r0, #3 - strh r0, [r6, #8] -_080793CA: - movs r1, #0xa0 - lsls r1, r1, #2 - adds r4, r5, #0 - adds r4, #0x3e - ldrb r2, [r4] - adds r0, r5, #0 - bl sub_080027EA - ldrb r0, [r4] - bl sub_0807A5B8 -_080793E0: - pop {r4, r5, r6, pc} - .align 2, 0 - .syntax divided diff --git a/include/player.h b/include/player.h index 6cfd1383..a003a610 100644 --- a/include/player.h +++ b/include/player.h @@ -209,6 +209,7 @@ typedef enum { SURFACE_AUTO_LADDER, SURFACE_CLIMB_WALL, SURFACE_2C, + SURFACE_FF = 0xff, } SurfaceType; typedef enum { diff --git a/include/tiles.h b/include/tiles.h index 9915face..1d3cac90 100644 --- a/include/tiles.h +++ b/include/tiles.h @@ -8,6 +8,15 @@ typedef enum { CUT_TREE = 0x1F, ROCK = 0x55, CHEST = 0x73, + CHEST_OPEN = 0x74, + TORCH = 0x76, + TORCH_LIT = 0x77, + PRESSURE_BUTTON = 0x78, + PRESSURE_BUTTON_PRESSED = 0x79, + PRESSURE_SQUARE = 0x7a, + PRESSURE_SQUARE_PRESSED = 0x7b, + STAIRS_UP = 0x92, + STAIRS_DOWN = 0x93, SIGNPOST = 0x176, PERMA_ROCK = 0x1D3, PERMA_ROCK2 = 0x1D4, diff --git a/src/playerUtils.c b/src/playerUtils.c index 7678ab5a..7eacb048 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -1528,7 +1528,7 @@ void sub_08078FB0(Entity* this) { if (gPlayerState.flags & PL_MINISH) { animIndex = 0x18; } else { - if (gPlayerState.animation >> 8 == 7) { + if (gPlayerState.animation >> 8 == (ANIM_PORTAL_ACTIVATE >> 8)) { animIndex = 0x34; } else { animIndex = 0xb8; @@ -1688,7 +1688,43 @@ void sub_080792BC(s32 speed, u32 direction, u32 field_0x38) { gPlayerEntity.direction = direction; } -ASM_FUNC("asm/non_matching/playerUtils/sub_080792D8.inc", void sub_080792D8()) +void sub_080792D8(void) { + Entity* playerEntity = &gPlayerEntity; + + if (playerEntity->knockbackDuration == 0) + return; + + if (playerEntity->action == PLAYER_08071DB8 || gPlayerState.dash_state || (u8)(gPlayerState.heldObject - 1) < 4 || + gPlayerState.jump_status || gPlayerState.floor_type == SURFACE_FF || gPlayerState.field_0x7 & 0x80 || + 0 < (gPlayerState.swim_state & 0xf) - 1 || playerEntity->action == PLAYER_FALL || + gPlayerState.flags & PL_ROLLING) { + playerEntity->knockbackDuration = 0; + } else if (playerEntity->action == PLAYER_CLIMB && playerEntity->knockbackDirection != DirectionSouth) { + playerEntity->knockbackDuration = 0; + } else { + if ((s8)playerEntity->knockbackDuration >= 1) { + playerEntity->knockbackDuration--; + } else { + playerEntity->knockbackDuration++; + } + + if (playerEntity->knockbackDuration == 0) + return; + + gPlayerState.field_0x7 &= 0xdf; + if (0 < playerEntity->iframes && !gPlayerState.swim_state && !(gPlayerState.flags & PL_MINISH) && + !gPlayerState.jump_status) { + ResetActiveItems(); + if (!(gPlayerState.flags & PL_NO_CAP)) { + gPlayerState.animation = ANIM_BOUNCE; + } else { + gPlayerState.animation = ANIM_BOUNCE_NOCAP; + } + } + sub_080027EA(playerEntity, 0x280, playerEntity->knockbackDirection); + sub_0807A5B8(playerEntity->knockbackDirection); + } +} bool32 sub_080793E4(u32 param_1) { u32 tmp; From 4689a242386538e75f04caf382e2df5555d678fb Mon Sep 17 00:00:00 2001 From: Reinmmar Date: Wed, 29 Nov 2023 09:20:07 +0100 Subject: [PATCH 2/2] oops --- src/playerUtils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/playerUtils.c b/src/playerUtils.c index eeb478bc..7eacb048 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -1723,7 +1723,7 @@ void sub_080792D8(void) { } sub_080027EA(playerEntity, 0x280, playerEntity->knockbackDirection); sub_0807A5B8(playerEntity->knockbackDirection); - } + } } bool32 sub_080793E4(u32 param_1) {