diff --git a/asm/non_matching/beanstalkSubtask/DeleteLoadedTileEntity.inc b/asm/non_matching/beanstalkSubtask/DeleteLoadedTileEntity.inc deleted file mode 100644 index ee3be1c6..00000000 --- a/asm/non_matching/beanstalkSubtask/DeleteLoadedTileEntity.inc +++ /dev/null @@ -1,46 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r4, r0, #0 - lsls r1, r1, #0xc - orrs r4, r1 - ldr r2, _0801AFB8 @ =gUnk_0200B240 - ldr r0, _0801AFBC @ =gRoomVars - ldrh r1, [r0, #0xe] - movs r3, #0 - adds r5, r2, #0 - cmp r3, r1 - bhs _0801AFE0 - ldrh r6, [r2] - cmp r4, r6 - bne _0801AFC0 - subs r1, #1 - strh r1, [r0, #0xe] - lsls r0, r1, #2 - adds r0, r0, r2 - ldr r0, [r0] - str r0, [r2] - b _0801AFE0 - .align 2, 0 -_0801AFB8: .4byte gUnk_0200B240 -_0801AFBC: .4byte gRoomVars -_0801AFC0: - adds r2, #4 - adds r3, #1 - cmp r3, r1 - bhs _0801AFE0 - ldrh r6, [r2] - cmp r4, r6 - bne _0801AFC0 - subs r1, #1 - strh r1, [r0, #0xe] - adds r2, r5, #0 - lsls r0, r3, #2 - adds r0, r0, r2 - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - str r1, [r0] -_0801AFE0: - pop {r4, r5, r6, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/beanstalkSubtask/sub_0801A2B0.inc b/asm/non_matching/beanstalkSubtask/sub_0801A2B0.inc deleted file mode 100644 index 8c19bbe9..00000000 --- a/asm/non_matching/beanstalkSubtask/sub_0801A2B0.inc +++ /dev/null @@ -1,95 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r4, r1, #0 - adds r6, r2, #0 - ldr r1, _0801A31C @ =gUnk_080B4488 - ldr r2, _0801A320 @ =gPlayerEntity - ldrb r0, [r2, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r3, [r0] - ldr r1, _0801A324 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x35 - ldrb r0, [r0] - ldrb r1, [r1, #0xd] - orrs r0, r1 - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0801A36C - adds r0, r2, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0801A36C - adds r0, r4, r3 - lsls r0, r0, #0x10 - lsrs r4, r0, #0x10 - adds r0, r2, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r4, #0 - bl GetTileType - bl sub_080B1B54 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - adds r1, r0, #0 - cmp r0, #0x52 - beq _0801A36C - cmp r0, #0x52 - bgt _0801A328 - cmp r0, #0x26 - blt _0801A32C - cmp r0, #0x27 - ble _0801A36C - cmp r0, #0x29 - beq _0801A36C - b _0801A32C - .align 2, 0 -_0801A31C: .4byte gUnk_080B4488 -_0801A320: .4byte gPlayerEntity -_0801A324: .4byte gPlayerState -_0801A328: - cmp r1, #0x74 - beq _0801A36C -_0801A32C: - ldr r0, _0801A364 @ =0x00002004 - adds r3, r5, r0 - adds r0, r3, r4 - ldrb r0, [r0] - cmp r0, #0x28 - beq _0801A36C - movs r1, #0x3f - ands r1, r4 - ldr r0, _0801A368 @ =gRoomControls - lsls r1, r1, #4 - ldrh r2, [r0, #6] - adds r1, r1, r2 - lsrs r2, r4, #6 - lsls r2, r2, #4 - ldrh r0, [r0, #8] - adds r2, r2, r0 - lsls r1, r1, #0x10 - asrs r1, r1, #0x10 - lsls r2, r2, #0x10 - asrs r2, r2, #0x10 - adds r0, r3, #0 - adds r3, r6, #0 - bl IsTileCollision - cmp r0, #0 - bne _0801A36C - movs r0, #1 - b _0801A36E - .align 2, 0 -_0801A364: .4byte 0x00002004 -_0801A368: .4byte gRoomControls -_0801A36C: - movs r0, #0 -_0801A36E: - pop {r4, r5, r6, pc} - .syntax divided diff --git a/src/beanstalkSubtask.c b/src/beanstalkSubtask.c index 0b872fca..56ef2349 100644 --- a/src/beanstalkSubtask.c +++ b/src/beanstalkSubtask.c @@ -142,21 +142,15 @@ void sub_080197D4(u32* param_1) { // Has ifdefs for other variants ASM_FUNC("asm/non_matching/beanstalkSubtask/UpdatePlayerCollision.inc", void UpdatePlayerCollision()) -NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A2B0.inc", - bool32 sub_0801A2B0(LayerStruct* layer, u32 position, u32 collisionType)) { +bool32 sub_0801A2B0(LayerStruct* layer, u32 position, u32 collisionType) { u16 uVar1; - u32 uVar2; - bool32 bVar3; - u32 pos; - s16 temp; - s16 temp2; - u16 temp3; + s16 x; + s16 y; u16 temp4; - u32 temp5; uVar1 = gUnk_080B4488[gPlayerEntity.animationState >> 1]; if ((((gPlayerState.field_0x35 | gPlayerState.direction) & 0x80) == 0) && ((gPlayerEntity.frame & 1) != 0)) { - position = (u16)(position + uVar1); + position = (u16)(position - (-uVar1)); // necessary for match temp4 = sub_080B1B54(GetTileType(position, gPlayerEntity.collisionLayer)); switch (temp4) { case 0x52: @@ -170,9 +164,9 @@ NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A2B0.inc", return FALSE; default: if ((layer->collisionData[(position)] != 0x28)) { - temp = (((position & 0x3f) * 0x10 + (u32)gRoomControls.origin_x)); - temp2 = (((position >> 6) * 0x10 + (u32)gRoomControls.origin_y)); - if ((!IsTileCollision(layer->collisionData, temp, temp2, collisionType))) { + x = (((position & 0x3f) * 0x10 + (u32)gRoomControls.origin_x)); + y = (((position >> 6) * 0x10 + (u32)gRoomControls.origin_y)); + if ((!IsTileCollision(layer->collisionData, x, y, collisionType))) { return TRUE; } } @@ -181,7 +175,6 @@ NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A2B0.inc", } return FALSE; } -END_NONMATCH bool32 sub_0801A370(LayerStruct* layer, u32 position) { LayerStruct* topLayer; @@ -566,8 +559,40 @@ void sub_0801AF48(u32 data, u32 position, u32 layer) { } } -ASM_FUNC("asm/non_matching/beanstalkSubtask/DeleteLoadedTileEntity.inc", - void DeleteLoadedTileEntity(u32 position, u32 layer)) +void DeleteLoadedTileEntity(u32 position, s32 layer) { + u32 count; + struct_0200B240* ptr; + u32 positionLayer; + u32 t; + + layer = layer << 12; + positionLayer = position | layer; + ptr = gUnk_0200B240; + count = gRoomVars.unk_0e; + t = 0; + + if (t >= count) { + return; + } + + if (positionLayer == ptr->position) { + count--; + gRoomVars.unk_0e = count; + ptr[0] = ptr[count]; + return; + } + while (positionLayer != ptr->position) { + ptr++; + t++; + if (t >= count) { + return; + } + } + count--; + gRoomVars.unk_0e = count; + ptr = gUnk_0200B240; + ptr[t] = ptr[count]; +} ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801AFE4.inc", void sub_0801AFE4(void))