From 52e3382791186d899e130fcf185e56e0bbdc377b Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 15 Aug 2022 21:36:29 +0300 Subject: [PATCH 1/2] Match sub_0801AFE4 --- .../beanstalkSubtask/sub_0801AFE4.inc | 67 ------------------- src/beanstalkSubtask.c | 23 ++++++- 2 files changed, 22 insertions(+), 68 deletions(-) delete mode 100644 asm/non_matching/beanstalkSubtask/sub_0801AFE4.inc diff --git a/asm/non_matching/beanstalkSubtask/sub_0801AFE4.inc b/asm/non_matching/beanstalkSubtask/sub_0801AFE4.inc deleted file mode 100644 index 5aa6bf6d..00000000 --- a/asm/non_matching/beanstalkSubtask/sub_0801AFE4.inc +++ /dev/null @@ -1,67 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r3, _0801B018 @ =gMapBottom+0x2004 - ldr r0, _0801B01C @ =gRoomControls - ldrh r1, [r0, #0x1e] - lsrs r1, r1, #4 - mov sl, r1 - ldrh r0, [r0, #0x20] - lsrs r0, r0, #4 - mov sb, r0 - movs r7, #0 - cmp r7, sb - bhs _0801B054 -_0801B004: - movs r2, #0 - adds r0, r7, #1 - mov r8, r0 - cmp r2, sl - bhs _0801B046 -_0801B00E: - ldr r1, _0801B020 @ =gUnk_080B44D0 - adds r4, r3, #1 - adds r5, r2, #1 - b _0801B026 - .align 2, 0 -_0801B018: .4byte gMapBottom+0x2004 -_0801B01C: .4byte gRoomControls -_0801B020: .4byte gUnk_080B44D0 -_0801B024: - adds r1, #4 -_0801B026: - ldrh r0, [r1] - cmp r0, #0 - beq _0801B03E - ldrb r6, [r3] - cmp r0, r6 - bne _0801B024 - ldrh r0, [r1, #2] - lsls r1, r7, #6 - adds r1, r1, r2 - movs r2, #1 - bl SetTile -_0801B03E: - adds r3, r4, #0 - adds r2, r5, #0 - cmp r2, sl - blo _0801B00E -_0801B046: - adds r0, r3, #0 - adds r0, #0x40 - mov r1, sl - subs r3, r0, r1 - mov r7, r8 - cmp r7, sb - blo _0801B004 -_0801B054: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/src/beanstalkSubtask.c b/src/beanstalkSubtask.c index 56ef2349..b9bf1dc9 100644 --- a/src/beanstalkSubtask.c +++ b/src/beanstalkSubtask.c @@ -594,7 +594,28 @@ void DeleteLoadedTileEntity(u32 position, s32 layer) { ptr[t] = ptr[count]; } -ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801AFE4.inc", void sub_0801AFE4(void)) +void sub_0801AFE4(void) { + const u16* ptr; + u8* collisionData; + u32 x; + u32 y; + u32 width; + u32 height; + + collisionData = gMapBottom.collisionData; + width = gRoomControls.width >> 4; + height = gRoomControls.height >> 4; + for (y = 0; y < height; collisionData = collisionData + (0x40 - width), y++) { + for (x = 0; x < width; collisionData++, x++) { + for (ptr = gUnk_080B44D0; ptr[0] != 0; ptr += 2) { + if (ptr[0] == *collisionData) { + SetTile(ptr[1], y * 0x40 + x, 1); + break; + } + } + } + } +} void UpdateBgAnimations(void) { bool32 alreadyUploadedGfx = FALSE; From e67d2dbd3839c507c83d39a04615f05900c0ddbc Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 15 Aug 2022 22:49:13 +0300 Subject: [PATCH 2/2] Match sub_08078D60 --- asm/non_matching/playerUtils/sub_08078D60.inc | 152 ------------------ include/physics.h | 1 + src/playerItem/playerItemHeldObject.c | 1 - src/playerUtils.c | 47 +++++- 4 files changed, 47 insertions(+), 154 deletions(-) delete mode 100644 asm/non_matching/playerUtils/sub_08078D60.inc diff --git a/asm/non_matching/playerUtils/sub_08078D60.inc b/asm/non_matching/playerUtils/sub_08078D60.inc deleted file mode 100644 index 2ffb6b39..00000000 --- a/asm/non_matching/playerUtils/sub_08078D60.inc +++ /dev/null @@ -1,152 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - ldr r1, _08078DCC @ =gPlayerEntity - ldr r0, [r1, #0x74] - ldr r4, [r0, #0x54] - ldrb r0, [r4, #0xc] - adds r6, r1, #0 - cmp r0, #2 - beq _08078D72 - b _08078E82 -_08078D72: - adds r0, r6, #0 - adds r0, #0x63 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r6, #0x36] - adds r0, r0, r1 - strh r0, [r4, #0x36] - ldrb r1, [r6, #0x1b] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r4, #0x1b] - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1b] - adds r0, r6, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x38 - strb r1, [r0] - adds r0, r6, #0 - adds r0, #0x5a - ldrb r0, [r0] - movs r2, #0x7f - ands r2, r0 - ldr r1, _08078DD0 @ =gUnk_0811C0E8 - ldrb r0, [r4, #0x16] - lsrs r0, r0, #4 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - ldrb r0, [r6, #0x18] - lsls r0, r0, #0x19 - cmp r0, #0 - bge _08078DD4 - adds r2, r1, r2 - movs r1, #0 - ldrsb r1, [r2, r1] - ldrh r0, [r6, #0x2e] - subs r0, r0, r1 - strh r0, [r4, #0x2e] - adds r1, r2, #0 - b _08078DE0 - .align 2, 0 -_08078DCC: .4byte gPlayerEntity -_08078DD0: .4byte gUnk_0811C0E8 -_08078DD4: - adds r1, r1, r2 - movs r0, #0 - ldrsb r0, [r1, r0] - ldrh r2, [r6, #0x2e] - adds r0, r0, r2 - strh r0, [r4, #0x2e] -_08078DE0: - movs r0, #1 - ldrsb r0, [r1, r0] - ldrh r1, [r4, #0x36] - adds r0, r0, r1 - strh r0, [r4, #0x36] - adds r5, r6, #0 - ldrh r0, [r5, #0x32] - strh r0, [r4, #0x32] - adds r0, r5, #0 - adds r1, r4, #0 - bl SortEntityAbove - ldr r0, _08078E34 @ =gPlayerState - ldrb r0, [r0, #5] - cmp r0, #4 - bne _08078E4C - ldrb r1, [r5, #0x19] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r4, #0x19] - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r4, #0 - bl sub_0806F8DC - ldrb r1, [r4, #0x16] - movs r0, #0xf - ands r0, r1 - cmp r0, #2 - bne _08078E82 - ldr r0, _08078E38 @ =gRoomTransition - ldr r1, [r0] - movs r0, #3 - ands r1, r0 - cmp r1, #1 - beq _08078E3C - cmp r1, #3 - beq _08078E44 - b _08078E82 - .align 2, 0 -_08078E34: .4byte gPlayerState -_08078E38: .4byte gRoomTransition -_08078E3C: - ldrh r0, [r4, #0x2e] - adds r0, #1 - strh r0, [r4, #0x2e] - b _08078E82 -_08078E44: - ldrh r0, [r4, #0x2e] - subs r0, #1 - strh r0, [r4, #0x2e] - b _08078E82 -_08078E4C: - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - cmp r0, #0 - beq _08078E62 - adds r0, r5, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x1d - subs r1, #1 - b _08078E6E -_08078E62: - adds r0, r6, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x1d - adds r1, #1 -_08078E6E: - adds r3, r4, #0 - adds r3, #0x29 - movs r0, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_08078E82: - pop {r4, r5, r6, pc} - .syntax divided diff --git a/include/physics.h b/include/physics.h index 9389ea22..9afd0f9e 100644 --- a/include/physics.h +++ b/include/physics.h @@ -43,6 +43,7 @@ void sub_0806FF48(Entity*, u32, u32); void sub_0806FCF4(Entity*, s32, s32, s32); void sub_0806FD3C(Entity*); bool32 sub_0806FDA0(Entity*); +bool32 sub_0806F8DC(Entity*); void sub_0806FEBC(Entity*, u32, Entity*); extern bool32 ProcessMovement1(Entity*); extern bool32 ProcessMovement12(Entity*); diff --git a/src/playerItem/playerItemHeldObject.c b/src/playerItem/playerItemHeldObject.c index 8421c8fa..b470c242 100644 --- a/src/playerItem/playerItemHeldObject.c +++ b/src/playerItem/playerItemHeldObject.c @@ -34,7 +34,6 @@ void sub_080ACF2C(PlayerItemHeldObjectEntity*); void sub_080ACFCC(PlayerItemHeldObjectEntity*); void sub_080AD040(PlayerItemHeldObjectEntity*); void sub_080AD274(PlayerItemHeldObjectEntity*); -bool32 sub_0806F8DC(Entity*); void PlayerItemHeldObject(Entity* this) { static void (*const subActionFuncs[])(PlayerItemHeldObjectEntity*) = { diff --git a/src/playerUtils.c b/src/playerUtils.c index df6022b8..bda35fd8 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -32,6 +32,7 @@ void sub_08079064(Entity*); extern u8 gMapData; extern const u8 gUnk_020176E0[]; extern const ScreenTransitionData gUnk_0813AD88[]; +extern const s8* gUnk_0811C0E8[]; bool32 IsAbleToUseItem(PlayerEntity*); bool32 IsPreventedFromUsingItem(); @@ -1207,7 +1208,51 @@ void sub_08078CD0(PlayerEntity* this) { } } -ASM_FUNC("asm/non_matching/playerUtils/sub_08078D60.inc", void sub_08078D60()) +void sub_08078D60(void) { + const s8* puVar2; + u32 uVar3; + Entity* iVar4; + Entity* player; + + player = &gPlayerEntity; + iVar4 = (*(Entity**)&((GenericEntity*)player)->field_0x74)->child; + if (iVar4->action != 2) + return; + + iVar4->z.HALF.HI = gPlayerEntity.spriteOffsetY + gPlayerEntity.z.HALF.HI; + iVar4->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY; + iVar4->collisionLayer = gPlayerEntity.collisionLayer; + uVar3 = gPlayerEntity.frame & 0x7f; + puVar2 = gUnk_0811C0E8[iVar4->carryFlags >> 4]; + if (gPlayerEntity.spriteSettings.flipX) { + iVar4->x.HALF.HI = gPlayerEntity.x.HALF.HI - puVar2[uVar3]; + } else { + iVar4->x.HALF.HI = gPlayerEntity.x.HALF.HI + puVar2[uVar3]; + } + iVar4->z.HALF.HI = puVar2[uVar3 + 1] + iVar4->z.HALF.HI; + iVar4->y.HALF.HI = gPlayerEntity.y.HALF.HI; + SortEntityAbove(&gPlayerEntity, iVar4); + if (gPlayerState.heldObject == 4) { + iVar4->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3; + sub_0806F8DC(iVar4); + if ((iVar4->carryFlags & 0xf) == 2) { + switch (gRoomTransition.frameCount & 3) { + case 1: + iVar4->x.HALF.HI++; + break; + case 3: + iVar4->x.HALF.HI--; + break; + } + } + } else { + if (gPlayerEntity.animationState >> 1 != 0) { + iVar4->spritePriority.b0 = gPlayerEntity.spritePriority.b0 - 1; + } else { + iVar4->spritePriority.b0 = gPlayerEntity.spritePriority.b0 + 1; + } + } +} void sub_08078E84(Entity* param_1, Entity* param_2) { SpriteFrame* frame;