Match sub_0801A8D0

This commit is contained in:
Tal Hayon 2022-05-18 19:59:09 +03:00
parent e94528d9bf
commit 1c970613ec
2 changed files with 22 additions and 114 deletions

View File

@ -1,92 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
adds r5, r0, #0
adds r4, r1, #0
cmp r5, #0
beq _0801A978
adds r0, r5, #0
adds r0, #0x38
ldrb r0, [r0]
bl GetLayerByIndex
adds r6, r0, #4
cmp r4, #0
bne _0801A92C
movs r1, #0x2e
ldrsh r0, [r5, r1]
ldr r2, _0801A91C @ =gRoomControls
ldrh r1, [r2, #6]
subs r0, r0, r1
asrs r4, r0, #4
movs r3, #0x3f
ands r4, r3
movs r1, #0x32
ldrsh r0, [r5, r1]
ldrh r1, [r2, #8]
adds r1, #8
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r4, r0
lsls r0, r4, #1
adds r0, r0, r6
ldrh r1, [r0]
ldr r0, _0801A920 @ =0x00004055
cmp r1, r0
bne _0801A924
subs r0, r4, #1
b _0801A97A
.align 2, 0
_0801A91C: .4byte gRoomControls
_0801A920: .4byte 0x00004055
_0801A924:
ldr r0, _0801A928 @ =0x00004056
b _0801A96A
.align 2, 0
_0801A928: .4byte 0x00004056
_0801A92C:
movs r0, #0x2e
ldrsh r1, [r5, r0]
ldr r3, _0801A960 @ =gRoomControls
ldrh r0, [r3, #6]
adds r0, #8
subs r1, r1, r0
asrs r4, r1, #4
movs r2, #0x3f
ands r4, r2
movs r1, #0x32
ldrsh r0, [r5, r1]
ldrh r1, [r3, #8]
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r4, r0
lsls r0, r4, #1
adds r0, r0, r6
ldrh r1, [r0]
ldr r0, _0801A964 @ =0x00004057
cmp r1, r0
bne _0801A968
adds r0, r4, #0
subs r0, #0x40
b _0801A97A
.align 2, 0
_0801A960: .4byte gRoomControls
_0801A964: .4byte 0x00004057
_0801A968:
ldr r0, _0801A974 @ =0x00004058
_0801A96A:
cmp r1, r0
bne _0801A978
adds r0, r4, #0
b _0801A97A
.align 2, 0
_0801A974: .4byte 0x00004058
_0801A978:
ldr r0, _0801A97C @ =0x0000FFFF
_0801A97A:
pop {r4, r5, r6, pc}
.align 2, 0
_0801A97C: .4byte 0x0000FFFF
.syntax divided

View File

@ -280,36 +280,36 @@ bool32 sub_0801A4F8(void) {
ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801A570.inc", void sub_0801A570())
NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A8D0.inc", u32 sub_0801A8D0(Entity* this, u32 param_2)) {
u32 sub_0801A8D0(Entity* this, u32 param_2) {
u16* mapData;
u32 tile;
u32 position;
if (this != NULL) {
mapData = GetLayerByIndex(this->collisionLayer)->mapData;
if (param_2 == 0) {
position = COORD_TO_TILE_OFFSET(this, 0, 8);
tile = mapData[position];
if (tile == 0x4055) {
return position - 1;
}
if (tile == 0x4056) {
return position;
}
} else {
position = COORD_TO_TILE_OFFSET(this, 8, 0);
tile = mapData[position];
if (tile == 0x4057) {
return position - 0x40;
}
if (tile == 0x4058) {
return position;
}
if (this == NULL)
return 0xffff;
mapData = GetLayerByIndex(this->collisionLayer)->mapData;
if (param_2 == 0) {
position = COORD_TO_TILE_OFFSET(this, 0, 8);
tile = mapData[position];
if (tile == 0x4055) {
return position - 1;
}
if (tile == 0x4056) {
return position;
}
} else {
position = COORD_TO_TILE_OFFSET(this, 8, 0);
tile = mapData[position];
if (tile == 0x4057) {
return position - 0x40;
}
if (tile == 0x4058) {
return position;
}
}
return 0xffff;
}
END_NONMATCH
bool32 sub_0801A980(void) {
u16 tileType;