Code:
@convert to thumb
add r2, pc, #1
bx r2
.thumb
ldr r0, Location
ldrb r0, [r0]
cmp r0, #0x0
bne Exit
adr r4, Timer
ldr r0, IOKeys
ldrh r0, [r0]
ldr r5, NormalButtons
ldr r3, ButtonPointer
ldrb r1, [r4,#2]
cmp r1, #0x1
beq SetTimer
bgt DecrementTimer
mov r2, #0x30
lsl r2, #4
tst r0, r2
bne Exit
Return:
mov r1, #0x1
strb r1, [r4,#2]
str r5, [r3]
ldr r0, MapSlot
mov r2, #0x1F
lsl r2, #0x8
add r2, #0xFE
MapSearch:
ldrh r3, [r0,r2]
cmp r3, #0x1F
beq GetItemCoordinates
cmp r3, #0x21
blt NoTeleport
cmp r3,#0x24
ble GetItemCoordinates
NoTeleport:
sub r2, #0x2
bpl MapSearch
ExitCode:
mov r1, #0x0
strb r1, [r4,#2]
FinishStuff:
str r5, [r3]
bx lr
GetItemCoordinates:
lsr r2, #1
mov r4, #0xFF
lsr r0, r2, #8
and r2, r4
mov r5,#3
lsr r4, r0, #2
and r0, r5
lsl r5, r4, #0x5
add r5, #0x21
lsl r1, r0, #0x5
add r1, #0x21
lsl r5, #0xC
lsl r1, #0xC
mov r0, #0xF
lsr r4, r2, #4
and r2, r0
lsl r4, #0xD
add r5,r4
lsl r2, #0xD
add r1,r2
@now teleport to item
ldr r0, Coordinates
ldr r0,[r0]
mov r2, #0xA9
lsl r2, #3
sub r0,r2
str r1,[r0]
str r5,[r0,#8]
bx lr
SetTimer:
mov r1, #2
strb r1, [r4,#2]
ldr r0, Fake_B
str r0, [r3]
mov r2, #0xD0
lsl r2, #1
strh r2, [r4]
bx lr
DecrementTimer:
tst r0, r1
beq ExitCode
ldrh r1, [r4]
sub r1, #0x1
bmi Return
strh r1, [r4]
cmp r1, #0xD0
beq FinishStuff
Exit:
bx lr
.arm
IOKeys:
.long 0x4000130
Coordinates:
.long 0x21C6DEC
MapSlot:
.long 0x21E3124
ButtonPointer:
.long 0x20E7E4C
Location:
.long 0x21EED6C
NormalButtons:
.long 0xE1D120B0
Fake_B:
.long 0xE3E02002
Timer:
.short 0x0000
ExecutionCycle:
.byte 0x0