pmd-red/asm/code_80A59DC.s
2025-04-10 20:51:38 -07:00

616 lines
8.7 KiB
ArmAsm

#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_80A59DC
sub_80A59DC:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x58
ldr r7, _080A5A34
ldr r0, [r7]
cmp r0, 0
bne _080A59F0
b _080A5E5A
_080A59F0:
mov r9, sp
mov r0, sp
bl sub_809D248
lsls r0, 24
lsrs r0, 24
cmp r0, 0
bne _080A5A04
str r0, [sp]
str r0, [sp, 0x4]
_080A5A04:
ldr r0, _080A5A38
mov r8, r0
ldr r3, [r0]
adds r0, r3, 0
adds r0, 0xE4
movs r1, 0
ldrsh r0, [r0, r1]
mov r6, r8
cmp r0, 0xAB
bne _080A5A1A
b _080A5BBE
_080A5A1A:
cmp r0, 0xAB
bgt _080A5A46
cmp r0, 0xA3
bgt _080A5A3C
cmp r0, 0xA2
bge _080A5A76
cmp r0, 0x4
bne _080A5A2C
b _080A5D76
_080A5A2C:
cmp r0, 0xA1
bne _080A5A32
b _080A5E28
_080A5A32:
b _080A5E46
.align 2, 0
_080A5A34: .4byte gGroundMapDungeon_3001B70
_080A5A38: .4byte gGroundMapAction
_080A5A3C:
cmp r0, 0xA8
beq _080A5AF4
cmp r0, 0xAA
beq _080A5AF4
b _080A5E46
_080A5A46:
cmp r0, 0xB0
bne _080A5A4C
b _080A5C76
_080A5A4C:
cmp r0, 0xB0
bgt _080A5A5E
cmp r0, 0xAE
bne _080A5A56
b _080A5B58
_080A5A56:
cmp r0, 0xAF
bne _080A5A5C
b _080A5BD8
_080A5A5C:
b _080A5E46
_080A5A5E:
cmp r0, 0xDF
beq _080A5A76
cmp r0, 0xDF
bgt _080A5A6E
cmp r0, 0xBA
bne _080A5A6C
b _080A5D18
_080A5A6C:
b _080A5E46
_080A5A6E:
cmp r0, 0xE0
bne _080A5A74
b _080A5DDA
_080A5A74:
b _080A5E46
_080A5A76:
ldr r3, [r6]
adds r2, r3, 0
adds r2, 0xF4
ldr r1, [r2]
adds r0, r1, 0x2
str r0, [r2]
adds r4, r3, 0
adds r4, 0xFC
cmp r0, 0
bge _080A5A8C
adds r0, r1, 0x5
_080A5A8C:
asrs r1, r0, 2
ldr r0, [r4]
adds r0, r1
str r0, [r4]
ldr r0, [r2]
movs r1, 0x3
ands r0, r1
str r0, [r2]
ldr r5, _080A5AF0
ldr r0, [r5]
adds r2, r3, 0
adds r2, 0xF8
movs r1, 0
bl sub_80A4580
ldr r0, [sp]
str r0, [sp, 0x8]
ldr r0, [r6]
adds r0, 0xFC
ldr r1, [sp, 0x4]
ldr r0, [r0]
adds r1, r0
add r4, sp, 0x8
str r1, [r4, 0x4]
ldr r0, [r5]
movs r1, 0
adds r2, r4, 0
bl sub_80A4580
ldr r0, [r5]
movs r1, 0
adds r2, r4, 0
bl sub_80A456C
ldr r0, [sp]
str r0, [sp, 0x8]
ldr r0, [r6]
adds r0, 0xFC
ldr r1, [sp, 0x4]
ldr r0, [r0]
subs r1, r0
str r1, [r4, 0x4]
ldr r0, [r5]
movs r1, 0x1
adds r2, r4, 0
bl sub_80A4580
ldr r0, [r5]
b _080A5DD0
.align 2, 0
_080A5AF0: .4byte gGroundMapDungeon_3001B70
_080A5AF4:
ldr r2, [r6]
adds r3, r2, 0
adds r3, 0xF0
adds r0, r2, 0
adds r0, 0xE8
ldr r1, [r3]
ldr r0, [r0]
adds r1, r0
str r1, [r3]
adds r2, 0xF8
cmp r1, 0
bge _080A5B0E
adds r1, 0x7
_080A5B0E:
asrs r1, 3
ldr r0, [r2]
adds r0, r1
str r0, [r2]
ldr r1, [r3]
adds r0, r1, 0
cmp r1, 0
bge _080A5B20
adds r0, r1, 0x7
_080A5B20:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
str r0, [r3]
ldr r5, _080A5B54
ldr r0, [r5]
movs r1, 0
bl sub_80A4580
ldr r0, [r6]
adds r0, 0xF8
ldr r1, [sp]
ldr r0, [r0]
adds r1, r0
str r1, [sp, 0x10]
ldr r0, [sp, 0x4]
add r4, sp, 0x10
str r0, [r4, 0x4]
ldr r0, [r5]
movs r1, 0
adds r2, r4, 0
bl sub_80A4580
ldr r0, [r5]
movs r1, 0
b _080A5DD2
.align 2, 0
_080A5B54: .4byte gGroundMapDungeon_3001B70
_080A5B58:
adds r4, r3, 0
adds r4, 0xF0
adds r0, r3, 0
adds r0, 0xE8
ldr r1, [r4]
ldr r0, [r0]
adds r1, r0
str r1, [r4]
adds r2, r3, 0
adds r2, 0xF8
cmp r1, 0
bge _080A5B72
adds r1, 0x7
_080A5B72:
asrs r1, 3
ldr r0, [r2]
adds r0, r1
str r0, [r2]
ldr r1, [r4]
adds r0, r1, 0
cmp r1, 0
bge _080A5B84
adds r0, r1, 0x7
_080A5B84:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
str r0, [r4]
ldr r0, [r7]
movs r1, 0
bl sub_80A4580
mov r1, r8
ldr r0, [r1]
adds r0, 0xF8
ldr r1, [sp]
ldr r0, [r0]
adds r1, r0
str r1, [sp, 0x18]
ldr r0, [sp, 0x4]
add r4, sp, 0x18
str r0, [r4, 0x4]
ldr r0, [r7]
movs r1, 0
adds r2, r4, 0
bl sub_80A4580
ldr r0, [r7]
movs r1, 0
adds r2, r4, 0
bl sub_80A456C
b _080A5DCE
_080A5BBE:
ldr r0, [sp]
ldr r1, [sp, 0x4]
str r0, [sp, 0x20]
str r1, [sp, 0x24]
ldr r0, [r7]
add r4, sp, 0x20
movs r1, 0
adds r2, r4, 0
bl sub_80A4580
ldr r0, [r7]
movs r1, 0
b _080A5DD2
_080A5BD8:
ldr r0, [r7]
movs r1, 0
mov r2, sp
bl sub_80A456C
mov r0, r8
ldr r3, [r0]
adds r4, r3, 0
adds r4, 0xF0
adds r1, r3, 0
adds r1, 0xE8
ldr r0, [r4]
ldr r1, [r1]
adds r0, r1
str r0, [r4]
adds r5, r3, 0
adds r5, 0xF4
adds r1, r3, 0
adds r1, 0xEC
ldr r0, [r5]
ldr r1, [r1]
adds r0, r1
str r0, [r5]
adds r2, r3, 0
adds r2, 0xF8
ldr r1, [r4]
cmp r1, 0
bge _080A5C12
adds r1, 0x7
_080A5C12:
asrs r1, 3
ldr r0, [r2]
adds r0, r1
str r0, [r2]
adds r3, 0xFC
ldr r1, [r5]
cmp r1, 0
bge _080A5C24
adds r1, 0x7
_080A5C24:
asrs r1, 3
ldr r0, [r3]
adds r0, r1
str r0, [r3]
ldr r1, [r4]
adds r0, r1, 0
cmp r1, 0
bge _080A5C36
adds r0, r1, 0x7
_080A5C36:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
str r0, [r4]
ldr r1, [r5]
adds r0, r1, 0
cmp r1, 0
bge _080A5C48
adds r0, r1, 0x7
_080A5C48:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
str r0, [r5]
ldr r0, [r7]
movs r1, 0
bl sub_80A4580
mov r1, r8
ldr r2, [r1]
adds r1, r2, 0
adds r1, 0xF8
ldr r0, [sp]
ldr r1, [r1]
adds r0, r1
str r0, [sp, 0x28]
adds r2, 0xFC
mov r1, r9
ldr r0, [r1, 0x4]
ldr r1, [r2]
adds r0, r1
add r4, sp, 0x28
b _080A5DC2
_080A5C76:
adds r4, r3, 0
adds r4, 0xF0
adds r1, r3, 0
adds r1, 0xE8
ldr r0, [r4]
ldr r1, [r1]
adds r0, r1
str r0, [r4]
adds r5, r3, 0
adds r5, 0xF4
adds r1, r3, 0
adds r1, 0xEC
ldr r0, [r5]
ldr r1, [r1]
adds r0, r1
str r0, [r5]
adds r6, r3, 0
adds r6, 0xF8
ldr r1, [r4]
cmp r1, 0
bge _080A5CA2
adds r1, 0x7
_080A5CA2:
asrs r1, 3
ldr r0, [r6]
adds r0, r1
str r0, [r6]
adds r2, r3, 0
adds r2, 0xFC
ldr r1, [r5]
cmp r1, 0
bge _080A5CB6
adds r1, 0x7
_080A5CB6:
asrs r1, 3
ldr r0, [r2]
adds r0, r1
str r0, [r2]
ldr r1, [r4]
adds r0, r1, 0
cmp r1, 0
bge _080A5CC8
adds r0, r1, 0x7
_080A5CC8:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
str r0, [r4]
ldr r1, [r5]
adds r0, r1, 0
cmp r1, 0
bge _080A5CDA
adds r0, r1, 0x7
_080A5CDA:
asrs r0, 3
lsls r0, 3
subs r0, r1, r0
str r0, [r5]
ldr r0, [r7]
movs r1, 0
adds r2, r6, 0
bl sub_80A4580
mov r0, r8
ldr r2, [r0]
adds r1, r2, 0
adds r1, 0xF8
ldr r0, [sp]
ldr r1, [r1]
adds r0, r1
str r0, [sp, 0x30]
adds r2, 0xFC
ldr r0, [sp, 0x4]
ldr r1, [r2]
adds r0, r1
add r4, sp, 0x30
str r0, [r4, 0x4]
ldr r0, [r7]
movs r1, 0
adds r2, r4, 0
bl sub_80A4580
ldr r0, [r7]
movs r1, 0
b _080A5DD2
_080A5D18:
ldr r0, [r7]
movs r1, 0x1
mov r2, sp
bl sub_80A456C
mov r0, r8
ldr r1, [r0]
adds r3, r1, 0
adds r3, 0xF0
ldr r4, [r3]
adds r0, r4, 0x1
str r0, [r3]
adds r2, r1, 0
adds r2, 0xF8
cmp r0, 0
bge _080A5D3A
adds r0, r4, 0x4
_080A5D3A:
asrs r1, r0, 2
ldr r0, [r2]
adds r0, r1
str r0, [r2]
ldr r0, [r3]
movs r1, 0x3
ands r0, r1
str r0, [r3]
ldr r0, [r7]
movs r1, 0x1
bl sub_80A4580
mov r1, r8
ldr r0, [r1]
adds r0, 0xF8
ldr r1, [sp]
ldr r0, [r0]
adds r1, r0
str r1, [sp, 0x38]
ldr r0, [sp, 0x4]
add r4, sp, 0x38
str r0, [r4, 0x4]
ldr r0, [r7]
movs r1, 0
adds r2, r4, 0
bl sub_80A4580
ldr r0, [r7]
movs r1, 0
b _080A5DD2
_080A5D76:
ldr r0, [r7]
movs r1, 0
mov r2, sp
bl sub_80A456C
mov r0, r8
ldr r1, [r0]
adds r3, r1, 0
adds r3, 0xF0
ldr r4, [r3]
adds r0, r4, 0x1
str r0, [r3]
adds r2, r1, 0
adds r2, 0xF8
cmp r0, 0
bge _080A5D98
adds r0, 0x7
_080A5D98:
asrs r1, r0, 3
ldr r0, [r2]
adds r0, r1
str r0, [r2]
ldr r0, [r3]
movs r1, 0x7
ands r0, r1
str r0, [r3]
ldr r0, [r7]
movs r1, 0x1
bl sub_80A4580
mov r1, r8
ldr r0, [r1]
adds r0, 0xF8
ldr r1, [sp]
ldr r0, [r0]
adds r1, r0
str r1, [sp, 0x40]
ldr r0, [sp, 0x4]
add r4, sp, 0x40
_080A5DC2:
str r0, [r4, 0x4]
ldr r0, [r7]
movs r1, 0x1
adds r2, r4, 0
bl sub_80A4580
_080A5DCE:
ldr r0, [r7]
_080A5DD0:
movs r1, 0x1
_080A5DD2:
adds r2, r4, 0
bl sub_80A456C
b _080A5E52
_080A5DDA:
ldr r0, [r7]
movs r1, 0
mov r2, sp
bl sub_80A456C
mov r0, r8
ldr r1, [r0]
adds r3, r1, 0
adds r3, 0xF0
ldr r4, [r3]
adds r0, r4, 0x1
str r0, [r3]
adds r2, r1, 0
adds r2, 0xF8
cmp r0, 0
bge _080A5DFC
adds r0, 0x7
_080A5DFC:
asrs r1, r0, 3
ldr r0, [r2]
adds r0, r1
str r0, [r2]
ldr r0, [r3]
movs r1, 0x7
ands r0, r1
str r0, [r3]
ldr r0, [r7]
movs r1, 0x1
bl sub_80A4580
mov r1, r8
ldr r0, [r1]
adds r0, 0xF8
ldr r0, [r0]
str r0, [sp, 0x48]
ldr r0, [sp, 0x4]
add r2, sp, 0x48
str r0, [r2, 0x4]
ldr r0, [r7]
b _080A5E3E
_080A5E28:
ldr r0, [r7]
movs r1, 0
mov r2, sp
bl sub_80A456C
movs r0, 0
movs r1, 0
str r0, [sp, 0x50]
str r1, [sp, 0x54]
ldr r0, [r7]
add r2, sp, 0x50
_080A5E3E:
movs r1, 0x1
bl sub_80A456C
b _080A5E52
_080A5E46:
ldr r0, _080A5E6C
ldr r0, [r0]
movs r1, 0
mov r2, sp
bl sub_80A456C
_080A5E52:
ldr r0, _080A5E6C
ldr r0, [r0]
bl sub_80A4764
_080A5E5A:
bl sub_80A60D8
add sp, 0x58
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080A5E6C: .4byte gGroundMapDungeon_3001B70
thumb_func_end sub_80A59DC
.align 2,0