Match sub_080A69E0

This commit is contained in:
Tal Hayon 2022-04-06 19:46:12 +03:00
parent 4250eee610
commit 6b44daa6c0
2 changed files with 35 additions and 86 deletions

View File

@ -1,85 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
sub sp, #4
adds r7, r0, #0
adds r6, r1, #0
orrs r0, r6
cmp r0, #0
beq _080A6A06
adds r0, r7, #0
adds r1, r6, #0
bl sub_080A6A80
adds r3, r0, #0
cmp r3, #0
beq _080A6A06
ldr r0, _080A6A0C @ =gMenu
ldrb r1, [r0, #3]
ldrb r2, [r3, #4]
cmp r1, r2
beq _080A6A10
_080A6A06:
movs r0, #1
rsbs r0, r0, #0
b _080A6A74
.align 2, 0
_080A6A0C: .4byte gMenu
_080A6A10:
ldrb r1, [r0, #3]
cmp r1, #7
beq _080A6A26
cmp r1, #7
bgt _080A6A20
cmp r1, #4
beq _080A6A26
b _080A6A48
_080A6A20:
cmp r1, #0xf
beq _080A6A44
b _080A6A48
_080A6A26:
ldrb r0, [r0, #3]
movs r2, #7
cmp r0, #4
bne _080A6A30
movs r2, #9
_080A6A30:
ldr r1, _080A6A40 @ =gAreaRoomHeaders
lsls r0, r2, #2
adds r0, r0, r1
ldr r0, [r0]
ldrh r0, [r0, #2]
subs r6, r6, r0
b _080A6A48
.align 2, 0
_080A6A40: .4byte gAreaRoomHeaders
_080A6A44:
ldr r0, _080A6A78 @ =0xFFFFFEF8
adds r7, r7, r0
_080A6A48:
ldrb r0, [r3]
lsls r0, r0, #4
subs r0, r7, r0
movs r4, #0x64
muls r0, r4, r0
ldr r5, _080A6A7C @ =0x0000023A
adds r1, r5, #0
str r3, [sp]
bl __divsi3
adds r7, r0, #0
ldr r3, [sp]
ldrb r0, [r3, #1]
lsls r0, r0, #4
subs r0, r6, r0
muls r0, r4, r0
adds r1, r5, #0
bl __divsi3
adds r6, r0, #0
lsls r0, r6, #0x10
orrs r0, r7
_080A6A74:
add sp, #4
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080A6A78: .4byte 0xFFFFFEF8
_080A6A7C: .4byte 0x0000023A
.syntax divided

View File

@ -28,6 +28,7 @@ void sub_080A67C4(u32);
void sub_080A68D4();
u32 sub_080A69E0();
void sub_080A6EE0(u32 param_1);
struct_08127F94* sub_080A6A80(u32 param_1, u32 param_2);
extern void DrawDungeonMap(u32 floor, struct_02019EE0* data, u32 size);
extern void LoadDungeonMap(void);
@ -606,7 +607,40 @@ void sub_080A698C(u32 param_1, u32 param_2, u32 param_3, u32 param_4) {
}
}
ASM_FUNC("asm/non_matching/subtask2/sub_080A69E0.inc", u32 sub_080A69E0())
u32 sub_080A69E0(u32 param_1, u32 param_2) {
const struct_08127F94* pbVar1;
int iVar3;
if ((param_1 | param_2) == 0)
return -1;
pbVar1 = sub_080A6A80(param_1, param_2);
if (pbVar1 == NULL)
return -1;
if (gMenu.field_0x3 != pbVar1->_4)
return -1;
switch (gMenu.field_0x3) {
case 4:
case 7:
if (gMenu.field_0x3 == 4) {
iVar3 = 9;
} else {
iVar3 = 7;
}
param_2 -= gAreaRoomHeaders[iVar3]->map_y;
break;
break;
case 15:
param_1 -= 0x108;
break;
}
param_1 = (s32)((param_1 - pbVar1->_0 * 0x10) * 100) / 0x23a;
param_2 = (s32)((param_2 - pbVar1->_1 * 0x10) * 100) / 0x23a;
return (param_2 << 0x10) | param_1;
}
struct_08127F94* sub_080A6A80(u32 param_1, u32 param_2) {
struct_08127F94* pbVar1;