mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-13 16:47:22 -05:00
616 lines
8.7 KiB
ArmAsm
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
|