summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/non_matching/playerUtils/sub_080792D8.inc139
-rw-r--r--include/player.h1
-rw-r--r--include/tiles.h9
-rw-r--r--src/playerUtils.c40
4 files changed, 48 insertions, 141 deletions
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;