Merge pull request #559 from hatal175/sub_0801AFE4

This commit is contained in:
notyourav 2022-08-15 22:26:32 -07:00 committed by GitHub
commit 052bead796
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 69 additions and 222 deletions

View File

@ -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

View File

@ -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

View File

@ -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*);

View File

@ -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;

View File

@ -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*) = {

View File

@ -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;