mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-25 07:24:42 -05:00
1331 lines
22 KiB
ArmAsm
1331 lines
22 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "main_02013C30.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start GetMoveMessageFromId
|
|
GetMoveMessageFromId: ; 0x02013C30
|
|
ldr r2, _02013C5C ; =DUNGEON_MOVE_TABLES
|
|
mov r1, #0x1a
|
|
ldr r2, [r2, #8]
|
|
ldr ip, _02013C60 ; =StringFromId
|
|
mla r1, r0, r1, r2
|
|
ldrh r0, [r1, #0x18]
|
|
#ifdef JAPAN
|
|
add r0, r0, #0x13c
|
|
add r0, r0, #0x1400
|
|
#else
|
|
add r0, r0, #0x314
|
|
add r0, r0, #0xc00
|
|
#endif
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
bx ip
|
|
.align 2, 0
|
|
_02013C5C: .word DUNGEON_MOVE_TABLES
|
|
_02013C60: .word StringFromId
|
|
arm_func_end GetMoveMessageFromId
|
|
|
|
arm_func_start GetNbMoves
|
|
GetNbMoves: ; 0x02013C64
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, #0
|
|
mov lr, r4
|
|
mov r2, r4
|
|
mov r3, #1
|
|
mov r1, #6
|
|
_02013C7C:
|
|
mul ip, lr, r1
|
|
ldrb ip, [r0, ip]
|
|
add lr, lr, #1
|
|
tst ip, #1
|
|
movne ip, r3
|
|
moveq ip, r2
|
|
tst ip, #0xff
|
|
addne r4, r4, #1
|
|
cmp lr, #4
|
|
blt _02013C7C
|
|
mov r0, r4
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end GetNbMoves
|
|
|
|
arm_func_start GetMovesetIdx__02013CAC
|
|
GetMovesetIdx__02013CAC: ; 0x02013CAC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, #0
|
|
mov ip, r5
|
|
mov lr, #1
|
|
mov r2, #6
|
|
b _02013CF8
|
|
_02013CC4:
|
|
mul r4, r5, r2
|
|
ldrb r3, [r0, r4]
|
|
add r4, r0, r4
|
|
tst r3, #1
|
|
movne r3, lr
|
|
moveq r3, ip
|
|
tst r3, #0xff
|
|
beq _02013CF4
|
|
ldrh r3, [r4, #2]
|
|
cmp r1, r3
|
|
moveq r0, r5
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
_02013CF4:
|
|
add r5, r5, #1
|
|
_02013CF8:
|
|
cmp r5, #4
|
|
blt _02013CC4
|
|
mvn r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end GetMovesetIdx__02013CAC
|
|
|
|
arm_func_start IsReflectedByMagicCoat
|
|
IsReflectedByMagicCoat: ; 0x02013D08
|
|
ldr r2, _02013D20 ; =DUNGEON_MOVE_TABLES
|
|
mov r1, #0x1a
|
|
ldr r2, [r2, #8]
|
|
mla r1, r0, r1, r2
|
|
ldrb r0, [r1, #0x10]
|
|
bx lr
|
|
.align 2, 0
|
|
_02013D20: .word DUNGEON_MOVE_TABLES
|
|
arm_func_end IsReflectedByMagicCoat
|
|
|
|
arm_func_start CanBeSnatched
|
|
CanBeSnatched: ; 0x02013D24
|
|
ldr r2, _02013D3C ; =DUNGEON_MOVE_TABLES
|
|
mov r1, #0x1a
|
|
ldr r2, [r2, #8]
|
|
mla r1, r0, r1, r2
|
|
ldrb r0, [r1, #0x11]
|
|
bx lr
|
|
.align 2, 0
|
|
_02013D3C: .word DUNGEON_MOVE_TABLES
|
|
arm_func_end CanBeSnatched
|
|
|
|
arm_func_start FailsWhileMuzzled
|
|
FailsWhileMuzzled: ; 0x02013D40
|
|
ldr r2, _02013D58 ; =DUNGEON_MOVE_TABLES
|
|
mov r1, #0x1a
|
|
ldr r2, [r2, #8]
|
|
mla r1, r0, r1, r2
|
|
ldrb r0, [r1, #0x12]
|
|
bx lr
|
|
.align 2, 0
|
|
_02013D58: .word DUNGEON_MOVE_TABLES
|
|
arm_func_end FailsWhileMuzzled
|
|
|
|
arm_func_start IsSoundMove
|
|
IsSoundMove: ; 0x02013D5C
|
|
ldrh r2, [r0, #4]
|
|
cmp r2, #0xd9
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r2, #0x11c
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r2, #0x53
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r2, #0x22
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r2, #0x54
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r2, #0xab
|
|
moveq r0, #1
|
|
bxeq lr
|
|
ldr r1, _02013E10 ; =0x00000125
|
|
cmp r2, r1
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r2, #0x1b
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r2, #0xf1
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r2, #0x19
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r2, #0x1a
|
|
moveq r0, #1
|
|
bxeq lr
|
|
add r0, r1, #0xed
|
|
cmp r2, r0
|
|
moveq r0, #1
|
|
bxeq lr
|
|
add r0, r1, #0x99
|
|
cmp r2, r0
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
.align 2, 0
|
|
_02013E10: .word 0x00000125
|
|
arm_func_end IsSoundMove
|
|
|
|
arm_func_start IsRecoilMove
|
|
IsRecoilMove: ; 0x02013E14
|
|
mov r3, #0
|
|
ldr r2, _02013E50 ; =RECOIL_MOVE_LIST
|
|
b _02013E38
|
|
_02013E20:
|
|
cmp r0, r1
|
|
moveq r0, #1
|
|
bxeq lr
|
|
add r1, r3, #1
|
|
mov r1, r1, lsl #0x10
|
|
mov r3, r1, asr #0x10
|
|
_02013E38:
|
|
mov r1, r3, lsl #1
|
|
ldrh r1, [r2, r1]
|
|
cmp r1, #0
|
|
bne _02013E20
|
|
mov r0, #0
|
|
bx lr
|
|
.align 2, 0
|
|
_02013E50: .word RECOIL_MOVE_LIST
|
|
arm_func_end IsRecoilMove
|
|
|
|
arm_func_start sub_02013E54
|
|
sub_02013E54: ; 0x02013E54
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #0x88
|
|
mov r4, r1
|
|
mov r5, r0
|
|
ldrb r2, [r5, r4, lsl #3]
|
|
add r1, sp, #8
|
|
orr r2, r2, #0x80
|
|
strb r2, [r5, r4, lsl #3]
|
|
bl ManipMoves1v1
|
|
add r0, sp, #8
|
|
bl sub_02014230
|
|
cmp r0, #0
|
|
blt _02013F14
|
|
cmp r0, #3
|
|
bge _02013F14
|
|
add r1, r0, #1
|
|
mov r2, #0
|
|
_02013E98:
|
|
add r3, sp, #8
|
|
add r3, r3, r0, lsl #5
|
|
add ip, sp, #0
|
|
add lr, r3, r2, lsl #3
|
|
mov r6, #4
|
|
_02013EAC:
|
|
ldrh r3, [lr], #2
|
|
subs r6, r6, #1
|
|
strh r3, [ip], #2
|
|
bne _02013EAC
|
|
add r3, sp, #8
|
|
add ip, r3, r0, lsl #5
|
|
add r3, r3, r1, lsl #5
|
|
mov r6, #4
|
|
add lr, r3, r2, lsl #3
|
|
add ip, ip, r2, lsl #3
|
|
_02013ED4:
|
|
ldrh r3, [lr], #2
|
|
subs r6, r6, #1
|
|
strh r3, [ip], #2
|
|
bne _02013ED4
|
|
add r3, sp, #8
|
|
add r3, r3, r1, lsl #5
|
|
add r6, sp, #0
|
|
add lr, r3, r2, lsl #3
|
|
mov ip, #4
|
|
_02013EF8:
|
|
ldrh r3, [r6], #2
|
|
subs ip, ip, #1
|
|
strh r3, [lr], #2
|
|
bne _02013EF8
|
|
add r2, r2, #1
|
|
cmp r2, #4
|
|
blt _02013E98
|
|
_02013F14:
|
|
add r1, sp, #8
|
|
mov r0, r5
|
|
bl ManipMoves1v2
|
|
mov r1, #0
|
|
b _02013F44
|
|
_02013F28:
|
|
ldrb r0, [r5, r1, lsl #3]
|
|
tst r0, #0x80
|
|
bicne r0, r0, #0x80
|
|
movne r4, r1
|
|
strneb r0, [r5, r1, lsl #3]
|
|
bne _02013F4C
|
|
add r1, r1, #1
|
|
_02013F44:
|
|
cmp r1, #4
|
|
blt _02013F28
|
|
_02013F4C:
|
|
mov r0, r4
|
|
add sp, sp, #0x88
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end sub_02013E54
|
|
|
|
arm_func_start sub_02013F58
|
|
sub_02013F58: ; 0x02013F58
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #0x88
|
|
mov r4, r1
|
|
mov r5, r0
|
|
ldrb r2, [r5, r4, lsl #3]
|
|
add r1, sp, #8
|
|
orr r2, r2, #0x80
|
|
strb r2, [r5, r4, lsl #3]
|
|
bl ManipMoves1v1
|
|
add r0, sp, #8
|
|
bl sub_02014230
|
|
cmp r0, #1
|
|
blt _02014018
|
|
cmp r0, #4
|
|
bge _02014018
|
|
sub r1, r0, #1
|
|
mov r2, #0
|
|
_02013F9C:
|
|
add r3, sp, #8
|
|
add r3, r3, r0, lsl #5
|
|
add ip, sp, #0
|
|
add lr, r3, r2, lsl #3
|
|
mov r6, #4
|
|
_02013FB0:
|
|
ldrh r3, [lr], #2
|
|
subs r6, r6, #1
|
|
strh r3, [ip], #2
|
|
bne _02013FB0
|
|
add r3, sp, #8
|
|
add ip, r3, r0, lsl #5
|
|
add r3, r3, r1, lsl #5
|
|
mov r6, #4
|
|
add lr, r3, r2, lsl #3
|
|
add ip, ip, r2, lsl #3
|
|
_02013FD8:
|
|
ldrh r3, [lr], #2
|
|
subs r6, r6, #1
|
|
strh r3, [ip], #2
|
|
bne _02013FD8
|
|
add r3, sp, #8
|
|
add r3, r3, r1, lsl #5
|
|
add r6, sp, #0
|
|
add lr, r3, r2, lsl #3
|
|
mov ip, #4
|
|
_02013FFC:
|
|
ldrh r3, [r6], #2
|
|
subs ip, ip, #1
|
|
strh r3, [lr], #2
|
|
bne _02013FFC
|
|
add r2, r2, #1
|
|
cmp r2, #4
|
|
blt _02013F9C
|
|
_02014018:
|
|
add r1, sp, #8
|
|
mov r0, r5
|
|
bl ManipMoves1v2
|
|
mov r1, #0
|
|
b _02014048
|
|
_0201402C:
|
|
ldrb r0, [r5, r1, lsl #3]
|
|
tst r0, #0x80
|
|
bicne r0, r0, #0x80
|
|
movne r4, r1
|
|
strneb r0, [r5, r1, lsl #3]
|
|
bne _02014050
|
|
add r1, r1, #1
|
|
_02014048:
|
|
cmp r1, #4
|
|
blt _0201402C
|
|
_02014050:
|
|
mov r0, r4
|
|
add sp, sp, #0x88
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end sub_02013F58
|
|
|
|
arm_func_start sub_0201405C
|
|
sub_0201405C: ; 0x0201405C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r3, #0
|
|
mov ip, r3
|
|
mov lr, #0x63
|
|
mov r4, r3
|
|
mov r5, #1
|
|
b _020140A4
|
|
_02014078:
|
|
ldrb r2, [r0, r1, lsl #3]
|
|
mov r6, r1, lsl #3
|
|
tst r2, #1
|
|
movne r2, r5
|
|
moveq r2, r4
|
|
tst r2, #0xff
|
|
beq _020140AC
|
|
ldrb r2, [r0, r6]
|
|
tst r2, #2
|
|
beq _020140AC
|
|
sub r1, r1, #1
|
|
_020140A4:
|
|
cmp r1, #0
|
|
bge _02014078
|
|
_020140AC:
|
|
mov r7, #1
|
|
add r2, r1, #1
|
|
mov r6, #0
|
|
mov r4, r7
|
|
b _020140F0
|
|
_020140C0:
|
|
ldrb r5, [r0, r2, lsl #3]
|
|
mov r8, r2, lsl #3
|
|
tst r5, #1
|
|
movne r5, r7
|
|
moveq r5, r6
|
|
tst r5, #0xff
|
|
beq _020140F8
|
|
ldrb r5, [r0, r8]
|
|
tst r5, #2
|
|
beq _020140F8
|
|
mov ip, r4
|
|
add r2, r2, #1
|
|
_020140F0:
|
|
cmp r2, #4
|
|
blt _020140C0
|
|
_020140F8:
|
|
cmp ip, #0
|
|
moveq r0, #0x63
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r8, #1
|
|
mov ip, #0
|
|
sub r2, r2, #1
|
|
mov r7, ip
|
|
mov r6, r8
|
|
mov r4, r8
|
|
b _02014168
|
|
_02014120:
|
|
ldrb r5, [r0, r2, lsl #3]
|
|
add sb, r0, r2, lsl #3
|
|
tst r5, #1
|
|
movne r5, r8
|
|
moveq r5, r7
|
|
tst r5, #0xff
|
|
beq _02014170
|
|
ldrb r5, [sb, #6]
|
|
sub r2, r2, #1
|
|
cmp lr, r5
|
|
movgt lr, r5
|
|
cmp r5, #0
|
|
ldrh r5, [sb, #2]
|
|
moveq ip, r6
|
|
tst r5, #0x20
|
|
bicne r5, r5, #0x20
|
|
movne ip, r4
|
|
strneh r5, [sb, #2]
|
|
_02014168:
|
|
cmp r2, r1
|
|
bge _02014120
|
|
_02014170:
|
|
cmp ip, #0
|
|
moveq r0, lr
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r4, #1
|
|
add r6, r1, #1
|
|
mov ip, #0
|
|
mov r1, r4
|
|
b _020141C8
|
|
_02014190:
|
|
ldrb r2, [r0, r6, lsl #3]
|
|
mov r5, r6, lsl #3
|
|
tst r2, #1
|
|
movne r2, r4
|
|
moveq r2, ip
|
|
tst r2, #0xff
|
|
beq _020141D0
|
|
ldrb r2, [r0, r5]
|
|
tst r2, #2
|
|
beq _020141D0
|
|
bic r2, r2, #2
|
|
mov r3, r1
|
|
strb r2, [r0, r5]
|
|
add r6, r6, #1
|
|
_020141C8:
|
|
cmp r6, #4
|
|
blt _02014190
|
|
_020141D0:
|
|
cmp r3, #0
|
|
movne lr, #0
|
|
mov r0, lr
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
arm_func_end sub_0201405C
|
|
|
|
arm_func_start AllManip1
|
|
AllManip1: ; 0x020141E0
|
|
stmdb sp!, {r4, lr}
|
|
sub sp, sp, #0x80
|
|
add r1, sp, #0
|
|
mov r4, r0
|
|
bl ManipMoves1v1
|
|
add r1, sp, #0
|
|
mov r0, r4
|
|
bl ManipMoves1v2
|
|
add sp, sp, #0x80
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end AllManip1
|
|
|
|
arm_func_start AllManip2
|
|
AllManip2: ; 0x02014208
|
|
stmdb sp!, {r4, lr}
|
|
sub sp, sp, #0x200
|
|
add r1, sp, #0
|
|
mov r4, r0
|
|
bl ManipMoves2v1
|
|
add r1, sp, #0
|
|
mov r0, r4
|
|
bl ManipMoves2v2
|
|
add sp, sp, #0x200
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end AllManip2
|
|
|
|
arm_func_start sub_02014230
|
|
sub_02014230: ; 0x02014230
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, #0
|
|
mov r2, r4
|
|
mov r3, #1
|
|
mov lr, r4
|
|
b _0201428C
|
|
_02014248:
|
|
mov r5, lr
|
|
add ip, r0, r4, lsl #5
|
|
b _02014280
|
|
_02014254:
|
|
ldrb r1, [ip, r5, lsl #3]
|
|
tst r1, #1
|
|
movne r1, r3
|
|
moveq r1, r2
|
|
tst r1, #0xff
|
|
beq _0201427C
|
|
ldrb r1, [ip, r5, lsl #3]
|
|
tst r1, #0x80
|
|
movne r0, r4
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_0201427C:
|
|
add r5, r5, #1
|
|
_02014280:
|
|
cmp r5, #4
|
|
blt _02014254
|
|
add r4, r4, #1
|
|
_0201428C:
|
|
cmp r4, #4
|
|
blt _02014248
|
|
mvn r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end sub_02014230
|
|
|
|
arm_func_start ManipMoves1v1
|
|
ManipMoves1v1: ; 0x0201429C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r4, #0
|
|
mov ip, r4
|
|
mov r3, r4
|
|
_020142AC:
|
|
mov r5, r3
|
|
add r2, r1, r4, lsl #5
|
|
_020142B4:
|
|
strb ip, [r2, r5, lsl #3]
|
|
add r5, r5, #1
|
|
cmp r5, #4
|
|
blt _020142B4
|
|
add r4, r4, #1
|
|
cmp r4, #4
|
|
blt _020142AC
|
|
mov r2, ip
|
|
mvn r3, #0
|
|
mov r7, #0
|
|
_020142DC:
|
|
cmp r2, #0
|
|
beq _020142F0
|
|
ldrb r4, [r0, r2, lsl #3]
|
|
tst r4, #2
|
|
bne _020142F8
|
|
_020142F0:
|
|
mov ip, r7
|
|
add r3, r3, #1
|
|
_020142F8:
|
|
add r4, r1, r3, lsl #5
|
|
add r6, r0, r2, lsl #3
|
|
add r5, r4, ip, lsl #3
|
|
mov lr, #4
|
|
_02014308:
|
|
ldrh r4, [r6], #2
|
|
subs lr, lr, #1
|
|
strh r4, [r5], #2
|
|
bne _02014308
|
|
add r4, r1, r3, lsl #5
|
|
ldrb lr, [r4, ip, lsl #3]
|
|
add r2, r2, #1
|
|
cmp r2, #4
|
|
bic lr, lr, #2
|
|
strb lr, [r4, ip, lsl #3]
|
|
add ip, ip, #1
|
|
blt _020142DC
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end ManipMoves1v1
|
|
|
|
arm_func_start ManipMoves1v2
|
|
ManipMoves1v2: ; 0x0201433C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #8
|
|
mov r2, #0
|
|
mov r4, #1
|
|
mov r7, r2
|
|
mov r3, r2
|
|
mov fp, r4
|
|
mov sb, r4
|
|
add r6, sp, #4
|
|
mov lr, r2
|
|
add ip, sp, #0
|
|
_02014368:
|
|
mov r8, lr
|
|
strb lr, [r6, r7]
|
|
strb lr, [ip, r7]
|
|
add r5, r1, r7, lsl #5
|
|
_02014378:
|
|
ldrb sl, [r5, r8, lsl #3]
|
|
tst sl, #1
|
|
movne sl, r4
|
|
moveq sl, r3
|
|
tst sl, #0xff
|
|
beq _020143A8
|
|
ldrb sl, [r5, r8, lsl #3]
|
|
tst sl, #8
|
|
strneb fp, [r6, r7]
|
|
ldrb sl, [r5, r8, lsl #3]
|
|
tst sl, #4
|
|
strneb sb, [ip, r7]
|
|
_020143A8:
|
|
add r8, r8, #1
|
|
cmp r8, #4
|
|
blt _02014378
|
|
add r7, r7, #1
|
|
cmp r7, #4
|
|
blt _02014368
|
|
mov r6, #0
|
|
b _02014494
|
|
_020143C8:
|
|
mov r7, #0
|
|
add r5, sp, #4
|
|
add r4, sp, #0
|
|
add lr, r1, r6, lsl #5
|
|
mov r3, r7
|
|
mov ip, #1
|
|
b _02014488
|
|
_020143E4:
|
|
ldrb r8, [lr, r7, lsl #3]
|
|
tst r8, #1
|
|
movne r8, ip
|
|
moveq r8, r3
|
|
tst r8, #0xff
|
|
beq _02014484
|
|
add fp, lr, r7, lsl #3
|
|
add sl, r0, r2, lsl #3
|
|
mov sb, #4
|
|
_02014408:
|
|
ldrh r8, [fp], #2
|
|
subs sb, sb, #1
|
|
strh r8, [sl], #2
|
|
bne _02014408
|
|
ldrb r8, [r0, r2, lsl #3]
|
|
cmp r7, #0
|
|
biceq r8, r8, #2
|
|
orrne r8, r8, #2
|
|
strb r8, [r0, r2, lsl #3]
|
|
ldrb r8, [r0, r2, lsl #3]
|
|
bic sb, r8, #8
|
|
and r8, sb, #0xff
|
|
bic r8, r8, #4
|
|
strb r8, [r0, r2, lsl #3]
|
|
ldrb r8, [r5, r6]
|
|
cmp r8, #0
|
|
beq _0201445C
|
|
cmp r7, #0
|
|
ldreqb r8, [r0, r2, lsl #3]
|
|
orreq r8, r8, #8
|
|
streqb r8, [r0, r2, lsl #3]
|
|
_0201445C:
|
|
ldrb r8, [r4, r6]
|
|
cmp r8, #0
|
|
beq _02014478
|
|
cmp r7, #0
|
|
ldreqb r8, [r0, r2, lsl #3]
|
|
orreq r8, r8, #4
|
|
streqb r8, [r0, r2, lsl #3]
|
|
_02014478:
|
|
add r2, r2, #1
|
|
cmp r2, #4
|
|
beq _0201449C
|
|
_02014484:
|
|
add r7, r7, #1
|
|
_02014488:
|
|
cmp r7, #4
|
|
blt _020143E4
|
|
add r6, r6, #1
|
|
_02014494:
|
|
cmp r6, #4
|
|
blt _020143C8
|
|
_0201449C:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
arm_func_end ManipMoves1v2
|
|
|
|
arm_func_start ManipMoves2v1
|
|
ManipMoves2v1: ; 0x020144A4
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r4, #0
|
|
mov ip, r4
|
|
mov r3, r4
|
|
_020144B4:
|
|
mov r5, r3
|
|
add r2, r1, r4, lsl #6
|
|
_020144BC:
|
|
strb ip, [r2, r5, lsl #3]
|
|
add r5, r5, #1
|
|
cmp r5, #8
|
|
blt _020144BC
|
|
add r4, r4, #1
|
|
cmp r4, #8
|
|
blt _020144B4
|
|
mov r2, ip
|
|
mvn r3, #0
|
|
mov r7, #0
|
|
_020144E4:
|
|
cmp r2, #0
|
|
beq _020144F8
|
|
ldrb r4, [r0, r2, lsl #3]
|
|
tst r4, #2
|
|
bne _02014500
|
|
_020144F8:
|
|
mov ip, r7
|
|
add r3, r3, #1
|
|
_02014500:
|
|
add r4, r1, r3, lsl #6
|
|
add r6, r0, r2, lsl #3
|
|
add r5, r4, ip, lsl #3
|
|
mov lr, #4
|
|
_02014510:
|
|
ldrh r4, [r6], #2
|
|
subs lr, lr, #1
|
|
strh r4, [r5], #2
|
|
bne _02014510
|
|
add r4, r1, r3, lsl #6
|
|
ldrb lr, [r4, ip, lsl #3]
|
|
add r2, r2, #1
|
|
cmp r2, #8
|
|
bic lr, lr, #2
|
|
strb lr, [r4, ip, lsl #3]
|
|
add ip, ip, #1
|
|
blt _020144E4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end ManipMoves2v1
|
|
|
|
arm_func_start ManipMoves2v2
|
|
ManipMoves2v2: ; 0x02014544
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x10
|
|
mov r2, #0
|
|
mov r4, #1
|
|
mov r7, r2
|
|
mov r3, r2
|
|
mov fp, r4
|
|
mov sb, r4
|
|
add r6, sp, #8
|
|
mov lr, r2
|
|
add ip, sp, #0
|
|
_02014570:
|
|
mov r8, lr
|
|
strb lr, [r6, r7]
|
|
strb lr, [ip, r7]
|
|
add r5, r1, r7, lsl #6
|
|
_02014580:
|
|
ldrb sl, [r5, r8, lsl #3]
|
|
tst sl, #1
|
|
movne sl, r4
|
|
moveq sl, r3
|
|
tst sl, #0xff
|
|
beq _020145B0
|
|
ldrb sl, [r5, r8, lsl #3]
|
|
tst sl, #8
|
|
strneb fp, [r6, r7]
|
|
ldrb sl, [r5, r8, lsl #3]
|
|
tst sl, #4
|
|
strneb sb, [ip, r7]
|
|
_020145B0:
|
|
add r8, r8, #1
|
|
cmp r8, #8
|
|
blt _02014580
|
|
add r7, r7, #1
|
|
cmp r7, #8
|
|
blt _02014570
|
|
mov r6, #0
|
|
b _0201469C
|
|
_020145D0:
|
|
mov r7, #0
|
|
add r5, sp, #8
|
|
add r4, sp, #0
|
|
add lr, r1, r6, lsl #6
|
|
mov r3, r7
|
|
mov ip, #1
|
|
b _02014690
|
|
_020145EC:
|
|
ldrb r8, [lr, r7, lsl #3]
|
|
tst r8, #1
|
|
movne r8, ip
|
|
moveq r8, r3
|
|
tst r8, #0xff
|
|
beq _0201468C
|
|
add fp, lr, r7, lsl #3
|
|
add sl, r0, r2, lsl #3
|
|
mov sb, #4
|
|
_02014610:
|
|
ldrh r8, [fp], #2
|
|
subs sb, sb, #1
|
|
strh r8, [sl], #2
|
|
bne _02014610
|
|
ldrb r8, [r0, r2, lsl #3]
|
|
cmp r7, #0
|
|
biceq r8, r8, #2
|
|
orrne r8, r8, #2
|
|
strb r8, [r0, r2, lsl #3]
|
|
ldrb r8, [r0, r2, lsl #3]
|
|
bic sb, r8, #8
|
|
and r8, sb, #0xff
|
|
bic r8, r8, #4
|
|
strb r8, [r0, r2, lsl #3]
|
|
ldrb r8, [r5, r6]
|
|
cmp r8, #0
|
|
beq _02014664
|
|
cmp r7, #0
|
|
ldreqb r8, [r0, r2, lsl #3]
|
|
orreq r8, r8, #8
|
|
streqb r8, [r0, r2, lsl #3]
|
|
_02014664:
|
|
ldrb r8, [r4, r6]
|
|
cmp r8, #0
|
|
beq _02014680
|
|
cmp r7, #0
|
|
ldreqb r8, [r0, r2, lsl #3]
|
|
orreq r8, r8, #4
|
|
streqb r8, [r0, r2, lsl #3]
|
|
_02014680:
|
|
add r2, r2, #1
|
|
cmp r2, #8
|
|
beq _020146A4
|
|
_0201468C:
|
|
add r7, r7, #1
|
|
_02014690:
|
|
cmp r7, #8
|
|
blt _020145EC
|
|
add r6, r6, #1
|
|
_0201469C:
|
|
cmp r6, #8
|
|
blt _020145D0
|
|
_020146A4:
|
|
add sp, sp, #0x10
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
arm_func_end ManipMoves2v2
|
|
|
|
arm_func_start DungeonMoveToGroundMove
|
|
DungeonMoveToGroundMove: ; 0x020146AC
|
|
ldrb r2, [r1]
|
|
tst r2, #1
|
|
movne r3, #1
|
|
moveq r3, #0
|
|
tst r3, #0xff
|
|
moveq r1, #0
|
|
streqb r1, [r0]
|
|
bxeq lr
|
|
strb r2, [r0]
|
|
ldrh r2, [r1, #4]
|
|
strh r2, [r0, #2]
|
|
ldrb r1, [r1, #7]
|
|
strb r1, [r0, #4]
|
|
bx lr
|
|
arm_func_end DungeonMoveToGroundMove
|
|
|
|
arm_func_start GroundToDungeonMoveset
|
|
GroundToDungeonMoveset: ; 0x020146E4
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov r4, #0
|
|
mov r5, #6
|
|
ldr r8, _02014774 ; =DUNGEON_MOVE_TABLES
|
|
mov lr, #1
|
|
mov sb, r4
|
|
mov r3, r4
|
|
mov r6, #0x1a
|
|
mov r7, r5
|
|
_02014708:
|
|
mul r2, r4, r7
|
|
ldrb r2, [r1, r2]
|
|
tst r2, #1
|
|
movne sl, lr
|
|
moveq sl, #0
|
|
tst sl, #0xff
|
|
streqb sb, [r0, r4, lsl #3]
|
|
beq _0201475C
|
|
mla ip, r4, r5, r1
|
|
strb r2, [r0, r4, lsl #3]
|
|
add r2, r0, r4, lsl #3
|
|
strh r3, [r2, #2]
|
|
ldrh sl, [ip, #2]
|
|
strh sl, [r2, #4]
|
|
ldrh fp, [ip, #2]
|
|
ldr sl, [r8, #8]
|
|
mla sl, fp, r6, sl
|
|
ldrb sl, [sl, #8]
|
|
strb sl, [r2, #6]
|
|
ldrb ip, [ip, #4]
|
|
strb ip, [r2, #7]
|
|
_0201475C:
|
|
add r4, r4, #1
|
|
cmp r4, #4
|
|
blt _02014708
|
|
mov r1, #0
|
|
strb r1, [r0, #0x20]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_02014774: .word DUNGEON_MOVE_TABLES
|
|
arm_func_end GroundToDungeonMoveset
|
|
|
|
arm_func_start DungeonToGroundMoveset
|
|
DungeonToGroundMoveset: ; 0x02014778
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, #0
|
|
mov r2, #6
|
|
_02014784:
|
|
mul lr, r4, r2
|
|
ldrb r3, [r1, r4, lsl #3]
|
|
add ip, r1, r4, lsl #3
|
|
add r4, r4, #1
|
|
strb r3, [r0, lr]
|
|
ldrh r3, [ip, #4]
|
|
add lr, r0, lr
|
|
cmp r4, #4
|
|
strh r3, [lr, #2]
|
|
ldrb r3, [ip, #7]
|
|
strb r3, [lr, #4]
|
|
blt _02014784
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DungeonToGroundMoveset
|
|
|
|
arm_func_start GetInfoGroundMoveset
|
|
GetInfoGroundMoveset: ; 0x020147B8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r4, #0
|
|
mov r7, #6
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov sb, r4
|
|
mov r8, r7
|
|
_020147D4:
|
|
mov r0, r4, lsl #1
|
|
ldrh r1, [r5, r0]
|
|
cmp r1, #0
|
|
muleq r0, r4, r7
|
|
streqb sb, [r6, r0]
|
|
beq _020147F4
|
|
mla r0, r4, r8, r6
|
|
bl GetInfoMoveGround
|
|
_020147F4:
|
|
add r4, r4, #1
|
|
cmp r4, #4
|
|
blt _020147D4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
arm_func_end GetInfoGroundMoveset
|
|
|
|
arm_func_start GetMovesetIdx__02014804
|
|
GetMovesetIdx__02014804: ; 0x02014804
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, #0
|
|
mov ip, r5
|
|
mov lr, #1
|
|
mov r2, #6
|
|
b _02014850
|
|
_0201481C:
|
|
mul r4, r5, r2
|
|
ldrb r3, [r0, r4]
|
|
add r4, r0, r4
|
|
tst r3, #1
|
|
movne r3, lr
|
|
moveq r3, ip
|
|
tst r3, #0xff
|
|
beq _0201484C
|
|
ldrh r3, [r4, #2]
|
|
cmp r1, r3
|
|
moveq r0, r5
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
_0201484C:
|
|
add r5, r5, #1
|
|
_02014850:
|
|
cmp r5, #4
|
|
blt _0201481C
|
|
mvn r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end GetMovesetIdx__02014804
|
|
|
|
arm_func_start FindFirstFreeMovesetIdx
|
|
FindFirstFreeMovesetIdx: ; 0x02014860
|
|
stmdb sp!, {r3, lr}
|
|
mov lr, #0
|
|
mov r2, lr
|
|
mov r3, #1
|
|
mov r1, #6
|
|
b _0201489C
|
|
_02014878:
|
|
mul ip, lr, r1
|
|
ldrb ip, [r0, ip]
|
|
tst ip, #1
|
|
movne ip, r3
|
|
moveq ip, r2
|
|
tst ip, #0xff
|
|
moveq r0, lr
|
|
ldmeqia sp!, {r3, pc}
|
|
add lr, lr, #1
|
|
_0201489C:
|
|
cmp lr, #4
|
|
blt _02014878
|
|
mvn r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end FindFirstFreeMovesetIdx
|
|
|
|
arm_func_start LearnMoves
|
|
LearnMoves: ; 0x020148AC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #0x14
|
|
mov r7, r1
|
|
mov r1, #0
|
|
mov r8, r0
|
|
mov r6, r1
|
|
add r0, sp, #0
|
|
_020148C8:
|
|
strb r6, [r0, r1]
|
|
add r1, r1, #1
|
|
cmp r1, #4
|
|
blt _020148C8
|
|
b _020149B0
|
|
_020148DC:
|
|
mov r0, r6, lsl #1
|
|
ldrh r4, [r7, r0]
|
|
cmp r4, #0
|
|
beq _020149B8
|
|
mov r0, r8
|
|
mov r1, r4
|
|
bl GetMovesetIdx__02014804
|
|
mvn r1, #0
|
|
cmp r0, r1
|
|
addne r1, sp, #0
|
|
movne r2, #1
|
|
strneb r2, [r1, r0]
|
|
bne _020149AC
|
|
mov r0, r8
|
|
bl FindFirstFreeMovesetIdx
|
|
mvn r1, #0
|
|
cmp r0, r1
|
|
bne _02014990
|
|
mov r5, #0
|
|
mov r3, r5
|
|
add r0, sp, #4
|
|
add r2, sp, #0
|
|
_02014934:
|
|
ldrb r1, [r2, r3]
|
|
cmp r1, #0
|
|
streq r3, [r0, r5, lsl #2]
|
|
add r3, r3, #1
|
|
addeq r5, r5, #1
|
|
cmp r3, #4
|
|
blt _02014934
|
|
bl Rand16Bit
|
|
mov r1, r5
|
|
bl _s32_div_f
|
|
add r2, sp, #4
|
|
ldr r5, [r2, r1, lsl #2]
|
|
mov r0, #6
|
|
mul r3, r5, r0
|
|
mov r2, #0
|
|
mov r1, r4
|
|
add r0, r8, r3
|
|
strb r2, [r8, r3]
|
|
bl GetInfoMoveGround
|
|
add r0, sp, #0
|
|
mov r1, #1
|
|
strb r1, [r0, r5]
|
|
b _020149AC
|
|
_02014990:
|
|
mov r1, #6
|
|
mla r0, r1, r0, r8
|
|
mov r1, r4
|
|
bl GetInfoMoveGround
|
|
add r0, sp, #0
|
|
mov r1, #1
|
|
strb r1, [r0, r6]
|
|
_020149AC:
|
|
add r6, r6, #1
|
|
_020149B0:
|
|
cmp r6, #4
|
|
blt _020148DC
|
|
_020149B8:
|
|
add sp, sp, #0x14
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
arm_func_end LearnMoves
|
|
|
|
arm_func_start sub_020149C0
|
|
sub_020149C0: ; 0x020149C0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r2, #0
|
|
mov r3, r2
|
|
mov r6, r2
|
|
mov r7, #1
|
|
b _02014A24
|
|
_020149D8:
|
|
ldrb r4, [r1, r3, lsl #3]
|
|
tst r4, #1
|
|
movne r4, r7
|
|
moveq r4, r6
|
|
tst r4, #0xff
|
|
beq _02014A2C
|
|
add r5, r1, r3, lsl #3
|
|
add r4, r0, r3, lsl #3
|
|
mov lr, #4
|
|
_020149FC:
|
|
ldrh ip, [r5], #2
|
|
subs lr, lr, #1
|
|
strh ip, [r4], #2
|
|
bne _020149FC
|
|
add lr, r0, r3, lsl #3
|
|
ldrh ip, [lr, #2]
|
|
add r2, r2, #1
|
|
add r3, r3, #1
|
|
bic ip, ip, #4
|
|
strh ip, [lr, #2]
|
|
_02014A24:
|
|
cmp r3, #4
|
|
blt _020149D8
|
|
_02014A2C:
|
|
mov r1, #0
|
|
b _02014A3C
|
|
_02014A34:
|
|
strb r1, [r0, r3, lsl #3]
|
|
add r3, r3, #1
|
|
_02014A3C:
|
|
cmp r3, #8
|
|
blt _02014A34
|
|
mov r0, r2
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end sub_020149C0
|
|
|
|
arm_func_start CopyMoveTo
|
|
CopyMoveTo: ; 0x02014A4C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
mov r2, #4
|
|
bl CopyBitsTo
|
|
mov r0, r5
|
|
add r1, r4, #2
|
|
mov r2, #0xa
|
|
bl CopyBitsTo
|
|
mov r0, r5
|
|
add r1, r4, #4
|
|
mov r2, #7
|
|
bl CopyBitsTo
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end CopyMoveTo
|
|
|
|
arm_func_start CopyMoveFrom
|
|
CopyMoveFrom: ; 0x02014A84
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
mov r2, #4
|
|
bl CopyBitsFrom
|
|
mov r0, r5
|
|
add r1, r4, #2
|
|
mov r2, #0xa
|
|
bl CopyBitsFrom
|
|
mov r0, r5
|
|
add r1, r4, #4
|
|
mov r2, #7
|
|
bl CopyBitsFrom
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end CopyMoveFrom
|
|
|
|
arm_func_start CopyMovesetTo
|
|
CopyMovesetTo: ; 0x02014ABC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r5, #0
|
|
mov r4, #6
|
|
_02014AD0:
|
|
mla r1, r5, r4, r6
|
|
mov r0, r7
|
|
bl CopyMoveTo
|
|
add r5, r5, #1
|
|
cmp r5, #4
|
|
blt _02014AD0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end CopyMovesetTo
|
|
|
|
arm_func_start CopyMovesetFrom
|
|
CopyMovesetFrom: ; 0x02014AEC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r5, #0
|
|
mov r4, #6
|
|
_02014B00:
|
|
mla r1, r5, r4, r6
|
|
mov r0, r7
|
|
bl CopyMoveFrom
|
|
add r5, r5, #1
|
|
cmp r5, #4
|
|
blt _02014B00
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end CopyMovesetFrom
|
|
|
|
arm_func_start sub_02014B1C
|
|
sub_02014B1C: ; 0x02014B1C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
mov r2, #4
|
|
bl CopyBitsTo
|
|
mov r0, r5
|
|
add r1, r4, #2
|
|
mov r2, #1
|
|
bl CopyBitsTo
|
|
mov r0, r5
|
|
add r1, r4, #4
|
|
mov r2, #0xa
|
|
bl CopyBitsTo
|
|
mov r0, r5
|
|
add r1, r4, #6
|
|
mov r2, #7
|
|
bl CopyBitsTo
|
|
mov r0, r5
|
|
add r1, r4, #7
|
|
mov r2, #7
|
|
bl CopyBitsTo
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end sub_02014B1C
|
|
|
|
arm_func_start sub_02014B74
|
|
sub_02014B74: ; 0x02014B74
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, #0
|
|
_02014B84:
|
|
mov r0, r6
|
|
add r1, r5, r4, lsl #3
|
|
bl sub_02014B1C
|
|
add r4, r4, #1
|
|
cmp r4, #4
|
|
blt _02014B84
|
|
mov r0, r6
|
|
add r1, r5, #0x20
|
|
mov r2, #8
|
|
bl CopyBitsTo
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end sub_02014B74
|
|
|
|
arm_func_start sub_02014BB0
|
|
sub_02014BB0: ; 0x02014BB0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r5, r0
|
|
mov r0, r4
|
|
mov r1, #0
|
|
mov r2, #8
|
|
bl memset
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #4
|
|
bl CopyBitsFrom
|
|
mov r0, r5
|
|
add r1, r4, #2
|
|
mov r2, #1
|
|
bl CopyBitsFrom
|
|
mov r0, r5
|
|
add r1, r4, #4
|
|
mov r2, #0xa
|
|
bl CopyBitsFrom
|
|
mov r0, r5
|
|
add r1, r4, #6
|
|
mov r2, #7
|
|
bl CopyBitsFrom
|
|
mov r0, r5
|
|
add r1, r4, #7
|
|
mov r2, #7
|
|
bl CopyBitsFrom
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end sub_02014BB0
|
|
|
|
arm_func_start sub_02014C20
|
|
sub_02014C20: ; 0x02014C20
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, #0
|
|
_02014C30:
|
|
mov r0, r6
|
|
add r1, r5, r4, lsl #3
|
|
bl sub_02014BB0
|
|
add r4, r4, #1
|
|
cmp r4, #4
|
|
blt _02014C30
|
|
mov r3, #0
|
|
mov r0, r6
|
|
add r1, r5, #0x20
|
|
mov r2, #8
|
|
strb r3, [r5, #0x20]
|
|
bl CopyBitsFrom
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end sub_02014C20
|
|
|
|
arm_func_start Is2TurnsMove
|
|
Is2TurnsMove: ; 0x02014C64
|
|
cmp r0, #0x97
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #0x64
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #0x3c
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #0x4b
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #0x15c
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #0x99
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #0xcd
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #0x9c
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #8
|
|
moveq r0, #1
|
|
bxeq lr
|
|
ldr r1, _02014CE8 ; =0x000001DD
|
|
cmp r0, r1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
.align 2, 0
|
|
_02014CE8: .word 0x000001DD
|
|
arm_func_end Is2TurnsMove
|