mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-25 07:24:42 -05:00
2506 lines
45 KiB
ArmAsm
2506 lines
45 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_0232C524.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start DoMoveRebound
|
|
DoMoveRebound: ; 0x0232C524
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #0xa
|
|
bl SetReflectStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveRebound
|
|
|
|
arm_func_start DoMoveSwitchPositions
|
|
DoMoveSwitchPositions: ; 0x0232C538
|
|
stmdb sp!, {r3, lr}
|
|
ldr r3, [r0, #0xb4]
|
|
#ifdef JAPAN
|
|
ldrb r2, [r3, #0x107]
|
|
cmp r2, #1
|
|
movlo r2, #1
|
|
strlob r2, [r3, #0x107]
|
|
#else
|
|
ldrb r2, [r3, #0x108]
|
|
cmp r2, #1
|
|
movlo r2, #1
|
|
strlob r2, [r3, #0x108]
|
|
#endif
|
|
mov r2, #1
|
|
bl TrySwitchPlace
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveSwitchPositions
|
|
|
|
arm_func_start DoMoveStayAway
|
|
DoMoveStayAway: ; 0x0232C560
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl TryWarp
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveStayAway
|
|
|
|
arm_func_start DoMoveCleanse
|
|
DoMoveCleanse: ; 0x0232C578
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sb, r1
|
|
ldr r1, [sb, #0xb4]
|
|
mov sl, r0
|
|
ldrb r0, [r1, #6]
|
|
mov r6, #0
|
|
cmp r0, #0
|
|
bne _0232C66C
|
|
mov fp, #1
|
|
ldr r4, _0232C6A8 ; =BAG_ITEMS_PTR_MIRROR
|
|
mov r2, r6
|
|
mov r8, r6
|
|
mov r5, fp
|
|
mov r3, #6
|
|
_0232C5B0:
|
|
mul r0, r2, r3
|
|
ldr r1, [r4]
|
|
ldr r1, [r1, #0x384]
|
|
ldrb r7, [r1, r0]
|
|
tst r7, #1
|
|
movne r7, fp
|
|
moveq r7, r8
|
|
tst r7, #0xff
|
|
beq _0232C5E8
|
|
ldrb r7, [r1, r0]
|
|
tst r7, #8
|
|
bicne r7, r7, #8
|
|
movne r6, r5
|
|
strneb r7, [r1, r0]
|
|
_0232C5E8:
|
|
add r2, r2, #1
|
|
cmp r2, #0x32
|
|
blt _0232C5B0
|
|
mov r8, #0
|
|
ldr r4, _0232C6AC ; =DUNGEON_PTR
|
|
mov fp, r8
|
|
mov r5, #1
|
|
_0232C604:
|
|
ldr r0, [r4]
|
|
add r0, r0, r8, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r7, [r0, #0xa84]
|
|
#else
|
|
ldr r7, [r0, #0xb28]
|
|
#endif
|
|
mov r0, r7
|
|
bl EntityIsValidMoveEffects__0232C500
|
|
cmp r0, #0
|
|
beq _0232C660
|
|
ldr r1, [r7, #0xb4]
|
|
ldrb r0, [r1, #0x62]
|
|
tst r0, #1
|
|
movne r2, r5
|
|
moveq r2, fp
|
|
tst r2, #0xff
|
|
beq _0232C660
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
ldrneb r0, [r1, #0x62]
|
|
movne r6, #1
|
|
bicne r0, r0, #8
|
|
strneb r0, [r1, #0x62]
|
|
_0232C660:
|
|
add r8, r8, #1
|
|
cmp r8, #4
|
|
blt _0232C604
|
|
_0232C66C:
|
|
cmp r6, #0
|
|
beq _0232C688
|
|
ldr r2, _0232C6B0 ; =0x00000EFF
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _0232C698
|
|
_0232C688:
|
|
#ifdef JAPAN
|
|
ldr r2, _0232DAF8 ; =0x00000C42
|
|
mov r0, sl
|
|
mov r1, sb
|
|
#else
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0xf00
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232C698:
|
|
bl ov29_022E8104
|
|
bl ov29_022E81F8
|
|
mov r0, r6
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0232C6A8: .word BAG_ITEMS_PTR_MIRROR
|
|
_0232C6AC: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_0232C6B0: .word 0x00000C41
|
|
_0232DAF8: .word 0x00000C42
|
|
#else
|
|
_0232C6B0: .word 0x00000EFF
|
|
#endif
|
|
arm_func_end DoMoveCleanse
|
|
|
|
arm_func_start DoMoveSiesta
|
|
DoMoveSiesta: ; 0x0232C6B4
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r5, r0
|
|
ldr r1, _0232C6EC ; =SLEEP_TURN_RANGE
|
|
mov r0, r4
|
|
mov r2, #1
|
|
bl CalcStatusDuration
|
|
mov r2, r0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r3, #1
|
|
bl TryInflictSleepStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232C6EC: .word SLEEP_TURN_RANGE
|
|
arm_func_end DoMoveSiesta
|
|
|
|
arm_func_start DoMoveTwoEdge
|
|
DoMoveTwoEdge: ; 0x0232C6F0
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #0x20
|
|
mov r4, #0
|
|
mov sb, r1
|
|
strb r4, [sp, #0x1d]
|
|
strb r4, [sp, #0x1c]
|
|
mov sl, r0
|
|
ldr r1, [sb, #0xb4]
|
|
mov r8, r2
|
|
ldrsh r0, [r1, #0x10]
|
|
mov r7, r3
|
|
ldr r6, [sl, #0xb4]
|
|
subs r5, r0, #1
|
|
ldrh r0, [r8, #4]
|
|
movmi r5, r4
|
|
bl GetMoveCategory
|
|
mov r4, r0
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl GetDamageSourceWrapper
|
|
mov r2, r5
|
|
add r5, sp, #0x1d
|
|
mov r3, #0
|
|
str r5, [sp]
|
|
stmib sp, {r3, r4}
|
|
str r0, [sp, #0xc]
|
|
str r3, [sp, #0x10]
|
|
str r3, [sp, #0x14]
|
|
mov r1, sb
|
|
str r3, [sp, #0x18]
|
|
mov r0, sl
|
|
bl CalcDamageFixedWrapper
|
|
ldrsh r0, [r6, #0x10]
|
|
add r0, r0, r0, lsr #31
|
|
movs r5, r0, asr #1
|
|
ldrh r0, [r8, #4]
|
|
movmi r5, #0
|
|
bl GetMoveCategory
|
|
mov r4, r0
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl GetDamageSourceWrapper
|
|
add r1, sp, #0x1c
|
|
mov r3, #0
|
|
stmia sp, {r1, r3, r4}
|
|
str r0, [sp, #0xc]
|
|
str r3, [sp, #0x10]
|
|
str r3, [sp, #0x14]
|
|
mov r0, sl
|
|
mov r1, sl
|
|
mov r2, r5
|
|
str r3, [sp, #0x18]
|
|
bl CalcDamageFixedWrapper
|
|
ldrb r0, [sp, #0x1d]
|
|
cmp r0, #0
|
|
moveq r1, #1
|
|
movne r1, #0
|
|
ldrb r0, [sp, #0x1c]
|
|
strb r1, [sp, #0x1d]
|
|
cmp r0, #0
|
|
moveq r1, #1
|
|
movne r1, #0
|
|
ldrb r0, [sp, #0x1d]
|
|
strb r1, [sp, #0x1c]
|
|
cmp r0, #0
|
|
bne _0232C800
|
|
tst r1, #0xff
|
|
beq _0232C808
|
|
_0232C800:
|
|
mov r0, #1
|
|
b _0232C80C
|
|
_0232C808:
|
|
mov r0, #0
|
|
_0232C80C:
|
|
and r0, r0, #0xff
|
|
add sp, sp, #0x20
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
arm_func_end DoMoveTwoEdge
|
|
|
|
arm_func_start DoMoveNoMove
|
|
DoMoveNoMove: ; 0x0232C818
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #0
|
|
bl TryInflictMuzzledStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveNoMove
|
|
|
|
arm_func_start DoMoveScan
|
|
DoMoveScan: ; 0x0232C82C
|
|
stmdb sp!, {r3, lr}
|
|
bl RevealItems
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveScan
|
|
|
|
arm_func_start DoMovePowerEars
|
|
DoMovePowerEars: ; 0x0232C83C
|
|
stmdb sp!, {r3, lr}
|
|
bl RevealEnemies
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMovePowerEars
|
|
|
|
arm_func_start DoMoveTransfer
|
|
DoMoveTransfer: ; 0x0232C84C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sb, r0
|
|
mov r8, r1
|
|
mov fp, #0
|
|
bl FixedRoomIsSubstituteRoom
|
|
cmp r0, #0
|
|
beq _0232C890
|
|
mov r0, fp
|
|
mov r1, r8
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _0232CA0C ; =0x00000F02
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, fp
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0232C890:
|
|
ldr r7, [r8, #0xb4]
|
|
ldrb r0, [r7, #6]
|
|
cmp r0, #0
|
|
beq _0232C9E4
|
|
ldrsh r4, [r7, #2]
|
|
mov r0, fp
|
|
mov r1, r8
|
|
mov r2, r0
|
|
mov r5, r4
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r0, [r7, #0xbc]
|
|
cmp r0, #6
|
|
bls _0232C8DC
|
|
ldr r2, _0232CA0C ; =0x00000F02
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, fp
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0232C8DC:
|
|
mov r6, fp
|
|
b _0232C970
|
|
_0232C8E4:
|
|
mov r0, #0
|
|
bl GetMonsterIdToSpawn
|
|
mov r1, #0
|
|
mov r4, r0
|
|
bl MewSpawnCheck
|
|
cmp r0, #0
|
|
beq _0232C96C
|
|
mov r0, r7
|
|
bl IsMonsterLoneOutlaw
|
|
cmp r0, #0
|
|
bne _0232C96C
|
|
ldrb r0, [r7, #6]
|
|
cmp r0, #0
|
|
cmpne r5, r4
|
|
beq _0232C96C
|
|
mov r0, r4
|
|
bl GetBodySize
|
|
mov sl, r0
|
|
mov r0, r5
|
|
bl GetBodySize
|
|
cmp sl, r0
|
|
bne _0232C96C
|
|
ldrb r1, [r8, #0xaa]
|
|
mov r0, r4
|
|
bl ov29_022E1AAC
|
|
str r0, [sp]
|
|
mov r0, r8
|
|
bl ov29_022E1AD4
|
|
mov sl, r0
|
|
bl ov29_022E1EF8
|
|
add r1, sl, r0
|
|
ldr r0, [sp]
|
|
cmp r1, r0
|
|
bge _0232C978
|
|
_0232C96C:
|
|
add r6, r6, #1
|
|
_0232C970:
|
|
cmp r6, #0x1e
|
|
blt _0232C8E4
|
|
_0232C978:
|
|
cmp r6, #0x1e
|
|
ldrnesh r0, [r7, #2]
|
|
cmpne r0, r4
|
|
bne _0232C99C
|
|
ldr r2, _0232CA0C ; =0x00000F02
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _0232CA04
|
|
_0232C99C:
|
|
mov r0, #1
|
|
bl GetSize0x80Buffer
|
|
mov r5, r0
|
|
mov r1, r4
|
|
mov r2, #0x4e
|
|
bl GetNameWithGender
|
|
mov r1, r5
|
|
mov r0, #1
|
|
bl SetMessageLogPreprocessorArgsString
|
|
ldr r2, _0232CA10 ; =0x00000F01
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r8
|
|
mov r1, r4
|
|
bl ov29_022FD7A0
|
|
mov fp, #1
|
|
b _0232CA04
|
|
_0232C9E4:
|
|
mov r0, fp
|
|
mov r1, r8
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _0232CA0C ; =0x00000F02
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232CA04:
|
|
mov r0, fp
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232CA0C: .word 0x00000C44
|
|
_0232CA10: .word 0x00000C43
|
|
#else
|
|
_0232CA0C: .word 0x00000F02
|
|
_0232CA10: .word 0x00000F01
|
|
#endif
|
|
arm_func_end DoMoveTransfer
|
|
|
|
arm_func_start DoMoveSlowDown
|
|
DoMoveSlowDown: ; 0x0232CA14
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, r2
|
|
bl LowerSpeed
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveSlowDown
|
|
|
|
arm_func_start DoMoveSearchlight
|
|
DoMoveSearchlight: ; 0x0232CA2C
|
|
stmdb sp!, {r3, lr}
|
|
bl RevealWholeFloor
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveSearchlight
|
|
|
|
arm_func_start DoMovePetrify
|
|
DoMovePetrify: ; 0x0232CA3C
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictPetrifiedStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMovePetrify
|
|
|
|
arm_func_start DoMovePounce
|
|
DoMovePounce: ; 0x0232CA4C
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #8
|
|
bl TryPounce
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMovePounce
|
|
|
|
arm_func_start DoMoveTrawl
|
|
DoMoveTrawl: ; 0x0232CA60
|
|
stmdb sp!, {r3, lr}
|
|
bl TryTrawl
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveTrawl
|
|
|
|
arm_func_start DoMoveEscape
|
|
DoMoveEscape: ; 0x0232CA70
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r0, #0
|
|
mov r4, r1
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r0, _0232CAFC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x790]
|
|
cmp r0, #0
|
|
beq _0232CAB4
|
|
ldr r2, _0232CB00 ; =0x00000F04
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _0232CAF4
|
|
_0232CAB4:
|
|
mov r0, r5
|
|
bl IsSecretBazaarNpc
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
tst r0, #0xff
|
|
beq _0232CAE8
|
|
ldr r2, _0232CB04 ; =0x00000F03
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #0xa
|
|
bl ov29_0234BA54
|
|
_0232CAE8:
|
|
mov r0, #1
|
|
mov r1, r0
|
|
bl SetDungeonEscapeFields
|
|
_0232CAF4:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232CAFC: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_0232CB00: .word 0x00000C46
|
|
_0232CB04: .word 0x00000C45
|
|
#else
|
|
_0232CB00: .word 0x00000F04
|
|
_0232CB04: .word 0x00000F03
|
|
#endif
|
|
arm_func_end DoMoveEscape
|
|
|
|
arm_func_start DoMoveDrought
|
|
DoMoveDrought: ; 0x0232CB08
|
|
stmdb sp!, {r3, lr}
|
|
bl TryDrought
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveDrought
|
|
|
|
arm_func_start DoMoveTrapBuster
|
|
DoMoveTrapBuster: ; 0x0232CB18
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0xc
|
|
mov sb, r1
|
|
mov sl, r0
|
|
mov r0, sb
|
|
mov r7, #0
|
|
bl GetTileAtEntity
|
|
mov r4, r0
|
|
bl IsFullFloorFixedRoom
|
|
cmp r0, #0
|
|
beq _0232CB58
|
|
ldr r1, _0232CCB0 ; =0x00000F07
|
|
mov r0, sl
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, r7
|
|
b _0232CCA8
|
|
_0232CB58:
|
|
ldrb r0, [r4, #7]
|
|
cmp r0, #0xff
|
|
beq _0232CB74
|
|
mov r0, sb
|
|
bl HasDropeyeStatus
|
|
cmp r0, #0
|
|
beq _0232CB94
|
|
_0232CB74:
|
|
bl GetVisibilityRange
|
|
ldrsh r2, [sb, #4]
|
|
ldrsh r1, [sb, #6]
|
|
sub r8, r2, r0
|
|
sub fp, r1, r0
|
|
add r4, r2, r0
|
|
add r5, r1, r0
|
|
b _0232CBD0
|
|
_0232CB94:
|
|
ldr r0, _0232CCB4 ; =DUNGEON_PTR
|
|
ldrb r2, [r4, #7]
|
|
ldr r0, [r0]
|
|
mov r1, #0x1c
|
|
#ifdef JAPAN
|
|
add r0, r0, #0x244
|
|
#else
|
|
add r0, r0, #0x2e8
|
|
#endif
|
|
add r0, r0, #0xec00
|
|
mla r0, r2, r1, r0
|
|
ldrsh r3, [r0, #2]
|
|
ldrsh r2, [r0, #4]
|
|
ldrsh r1, [r0, #6]
|
|
ldrsh r0, [r0, #8]
|
|
sub r8, r3, #1
|
|
sub fp, r2, #1
|
|
add r4, r1, #1
|
|
add r5, r0, #1
|
|
_0232CBD0:
|
|
ldr r0, _0232CCB8 ; =ov29_02352B38
|
|
ldrh r1, [r0]
|
|
ldrh r0, [r0, #2]
|
|
strh r1, [sp, #4]
|
|
strh r0, [sp, #6]
|
|
b _0232CC68
|
|
_0232CBE8:
|
|
mov r0, r8, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r6, fp
|
|
str r0, [sp]
|
|
b _0232CC5C
|
|
_0232CBFC:
|
|
mov r0, r8
|
|
mov r1, r6
|
|
bl GetTileSafe
|
|
ldr r0, [r0, #0x10]
|
|
cmp r0, #0
|
|
beq _0232CC58
|
|
ldr r1, [r0]
|
|
cmp r1, #2
|
|
bne _0232CC58
|
|
bl GetTrapInfo
|
|
ldrb r1, [r0, #2]
|
|
tst r1, #1
|
|
bne _0232CC58
|
|
ldrb r0, [r0]
|
|
cmp r0, #0x11
|
|
beq _0232CC58
|
|
ldr r2, [sp]
|
|
add r0, sp, #8
|
|
mov r1, #0
|
|
strh r2, [sp, #8]
|
|
strh r6, [sp, #0xa]
|
|
bl TryRemoveTrap
|
|
mov r7, #1
|
|
_0232CC58:
|
|
add r6, r6, #1
|
|
_0232CC5C:
|
|
cmp r6, r5
|
|
ble _0232CBFC
|
|
add r8, r8, #1
|
|
_0232CC68:
|
|
cmp r8, r4
|
|
ble _0232CBE8
|
|
cmp r7, #0
|
|
beq _0232CC94
|
|
ldr r2, _0232CCBC ; =0x00000F05
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
bl UpdateMinimap
|
|
bl UpdateTrapsVisibility
|
|
b _0232CCA4
|
|
_0232CC94:
|
|
ldr r2, _0232CCC0 ; =0x00000F06
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232CCA4:
|
|
mov r0, r7
|
|
_0232CCA8:
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define DO_MOVE_TRAP_BUSTER_OFFSET -0x2Be
|
|
#else
|
|
#define DO_MOVE_TRAP_BUSTER_OFFSET 0
|
|
#endif
|
|
_0232CCB0: .word 0x00000F07 + DO_MOVE_TRAP_BUSTER_OFFSET
|
|
_0232CCB4: .word DUNGEON_PTR
|
|
_0232CCB8: .word ov29_02352B38
|
|
_0232CCBC: .word 0x00000F05 + DO_MOVE_TRAP_BUSTER_OFFSET
|
|
_0232CCC0: .word 0x00000F06 + DO_MOVE_TRAP_BUSTER_OFFSET
|
|
arm_func_end DoMoveTrapBuster
|
|
|
|
arm_func_start DoMoveWildCall
|
|
DoMoveWildCall: ; 0x0232CCC4
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sl, r0
|
|
ldr r0, [sl, #0xb4]
|
|
mov sb, r1
|
|
ldrb r0, [r0, #6]
|
|
mov r6, #0
|
|
mov r4, #0
|
|
cmp r0, #0
|
|
ldrne r0, _0232CD88 ; =DUNGEON_PTR
|
|
movne r5, #0x10
|
|
ldrne r0, [r0]
|
|
moveq r5, #4
|
|
#ifdef JAPAN
|
|
addne r0, r0, #0x294
|
|
#else
|
|
addne r0, r0, #0x338
|
|
#endif
|
|
ldreq r0, _0232CD88 ; =DUNGEON_PTR
|
|
mov fp, #1
|
|
ldreq r0, [r0]
|
|
#ifdef JAPAN
|
|
addeq r0, r0, #0x284
|
|
#else
|
|
addeq r0, r0, #0x328
|
|
#endif
|
|
add r7, r0, #0x12800
|
|
b _0232CD60
|
|
_0232CD10:
|
|
ldr r8, [r7, r4, lsl #2]
|
|
mov r0, r8
|
|
bl EntityIsValidMoveEffects__0232C500
|
|
cmp r0, #0
|
|
cmpne sl, r8
|
|
beq _0232CD5C
|
|
mov r0, sl
|
|
mov r1, r8
|
|
mov r2, fp
|
|
mov r3, #0
|
|
bl GetTreatmentBetweenMonsters
|
|
cmp r0, #0
|
|
bne _0232CD5C
|
|
mov r0, sl
|
|
mov r1, r8
|
|
mov r2, #2
|
|
add r3, sl, #4
|
|
bl TryWarp
|
|
mov r6, #1
|
|
_0232CD5C:
|
|
add r4, r4, #1
|
|
_0232CD60:
|
|
cmp r4, r5
|
|
blt _0232CD10
|
|
cmp r6, #0
|
|
bne _0232CD80
|
|
ldr r2, _0232CD8C ; =0x00000F08
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232CD80:
|
|
mov r0, r6
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0232CD88: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_0232CD8C: .word 0x00000C4A
|
|
#else
|
|
_0232CD8C: .word 0x00000F08
|
|
#endif
|
|
arm_func_end DoMoveWildCall
|
|
|
|
arm_func_start DoMoveInvisify
|
|
DoMoveInvisify: ; 0x0232CD90
|
|
stmdb sp!, {r3, lr}
|
|
mov r1, r0
|
|
bl TryInflictInvisibleStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveInvisify
|
|
|
|
arm_func_start DoMoveOneShot
|
|
DoMoveOneShot: ; 0x0232CDA4
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #0x20
|
|
mov r5, #0
|
|
strb r5, [sp, #0x1c]
|
|
mov r7, r2
|
|
mov r4, r0
|
|
mov r0, r7
|
|
mov r8, r1
|
|
mov r5, r3
|
|
bl GetMoveType
|
|
mov r6, r0
|
|
ldrh r0, [r7, #4]
|
|
bl GetMoveCategory
|
|
mov r1, r5
|
|
mov r5, r0
|
|
mov r0, r7
|
|
bl GetDamageSourceWrapper
|
|
add r3, sp, #0x1c
|
|
stmia sp, {r3, r6}
|
|
str r5, [sp, #8]
|
|
str r0, [sp, #0xc]
|
|
mov r2, #0
|
|
str r2, [sp, #0x10]
|
|
mov r3, #1
|
|
str r3, [sp, #0x14]
|
|
str r2, [sp, #0x18]
|
|
ldr r2, _0232CE3C ; =0x0000270F
|
|
mov r1, r8
|
|
mov r0, r4
|
|
bl CalcDamageFixedWrapper
|
|
ldrb r0, [sp, #0x1c]
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
strb r0, [sp, #0x1c]
|
|
and r0, r0, #0xff
|
|
add sp, sp, #0x20
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_0232CE3C: .word 0x0000270F
|
|
arm_func_end DoMoveOneShot
|
|
|
|
arm_func_start DoMoveHpGauge
|
|
DoMoveHpGauge: ; 0x0232CE40
|
|
stmdb sp!, {r3, lr}
|
|
bl TryActivateIdentifyCondition
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveHpGauge
|
|
|
|
arm_func_start DoMoveVacuumCut
|
|
DoMoveVacuumCut: ; 0x0232CE50
|
|
stmdb sp!, {r3, lr}
|
|
ldr ip, _0232CE78 ; =ov10_022C456C
|
|
str r3, [sp]
|
|
ldrsh r3, [ip]
|
|
bl ov29_02332F18
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0232CE78: .word ov10_022C456C
|
|
arm_func_end DoMoveVacuumCut
|
|
|
|
arm_func_start DoMoveReviver
|
|
DoMoveReviver: ; 0x0232CE7C
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _0232CE90 ; =0x00000F09
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232CE90: .word 0x00000C4B
|
|
#else
|
|
_0232CE90: .word 0x00000F09
|
|
#endif
|
|
arm_func_end DoMoveReviver
|
|
|
|
arm_func_start DoMoveShocker
|
|
DoMoveShocker: ; 0x0232CE94
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl TryInflictCoweringStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveShocker
|
|
|
|
arm_func_start DoMoveEcho
|
|
DoMoveEcho: ; 0x0232CEAC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
sub sp, sp, #0x20
|
|
mov r5, #0
|
|
strb r5, [sp, #0x1c]
|
|
mov r4, r1
|
|
ldr r1, [r4, #0xb4]
|
|
mov r5, r0
|
|
ldrsh r0, [r1, #4]
|
|
mov sb, r2
|
|
mov r6, r3
|
|
bl GetSize
|
|
mov r8, r0
|
|
mov r0, sb
|
|
bl GetMoveType
|
|
mov r7, r0
|
|
ldrh r0, [sb, #4]
|
|
bl GetMoveCategory
|
|
mov r1, r6
|
|
mov r6, r0
|
|
mov r0, sb
|
|
bl GetDamageSourceWrapper
|
|
add r3, sp, #0x1c
|
|
stmia sp, {r3, r7}
|
|
str r6, [sp, #8]
|
|
mov r1, r4
|
|
str r0, [sp, #0xc]
|
|
mov r4, #0
|
|
str r4, [sp, #0x10]
|
|
mov r3, #1
|
|
str r3, [sp, #0x14]
|
|
mov r2, r8
|
|
mov r0, r5
|
|
str r4, [sp, #0x18]
|
|
bl CalcDamageFixedWrapper
|
|
ldrb r0, [sp, #0x1c]
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, r4
|
|
strb r0, [sp, #0x1c]
|
|
and r0, r0, #0xff
|
|
add sp, sp, #0x20
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
arm_func_end DoMoveEcho
|
|
|
|
arm_func_start DoMoveFamish
|
|
DoMoveFamish: ; 0x0232CF54
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _0232CF70 ; =ov10_022C45BC
|
|
mov r3, #0
|
|
ldrsh r2, [r2]
|
|
bl TryDecreaseBelly
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0232CF70: .word ov10_022C45BC
|
|
arm_func_end DoMoveFamish
|
|
|
|
arm_func_start DoMoveOneRoom
|
|
DoMoveOneRoom: ; 0x0232CF74
|
|
stmdb sp!, {r3, lr}
|
|
bl MakeFloorOneRoom
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveOneRoom
|
|
|
|
arm_func_start DoMoveFillIn
|
|
DoMoveFillIn: ; 0x0232CF84
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
ldr r5, [r6, #0xb4]
|
|
mov r4, #0
|
|
bl IsCurrentFixedRoomBossFight
|
|
cmp r0, #0
|
|
beq _0232CFB8
|
|
ldr r1, _0232D0E0 ; =0x00000F0B
|
|
mov r0, r7
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
_0232CFB8:
|
|
ldrb r1, [r5, #0x4c]
|
|
ldr r0, _0232D0E4 ; =DIRECTIONS_XY
|
|
ldrsh r3, [r6, #4]
|
|
mov r1, r1, lsl #2
|
|
ldrsh r2, [r0, r1]
|
|
ldr r1, _0232D0E8 ; =DIRECTIONS_XY + 2
|
|
add r0, sp, #0
|
|
add r2, r3, r2
|
|
strh r2, [sp]
|
|
ldrb r2, [r5, #0x4c]
|
|
ldrsh r3, [r6, #6]
|
|
mov r2, r2, lsl #2
|
|
ldrsh r1, [r1, r2]
|
|
add r1, r3, r1
|
|
strh r1, [sp, #2]
|
|
bl ov29_022E6770
|
|
ldrsh r0, [sp]
|
|
ldrsh r1, [sp, #2]
|
|
bl GetTileSafe
|
|
ldrh r1, [r0]
|
|
and r1, r1, #3
|
|
cmp r1, #2
|
|
bne _0232D06C
|
|
ldrh r1, [r0]
|
|
mvn r4, #0
|
|
mov r5, r4
|
|
bic r1, r1, #3
|
|
strh r1, [r0]
|
|
ldrh r1, [r0]
|
|
orr r1, r1, #1
|
|
strh r1, [r0]
|
|
_0232D034:
|
|
mov r8, r5
|
|
_0232D038:
|
|
ldrsh r0, [sp]
|
|
ldrsh r1, [sp, #2]
|
|
add r0, r0, r8
|
|
add r1, r1, r4
|
|
bl ov29_02336694
|
|
add r8, r8, #1
|
|
cmp r8, #1
|
|
ble _0232D038
|
|
add r4, r4, #1
|
|
cmp r4, #1
|
|
ble _0232D034
|
|
mov r4, #1
|
|
bl DetermineAllMonsterShadow
|
|
_0232D06C:
|
|
mov r8, #0
|
|
mov r5, r8
|
|
_0232D074:
|
|
mov sb, r5
|
|
_0232D078:
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl DetermineTileWalkableNeighbors
|
|
add sb, sb, #1
|
|
cmp sb, #0x38
|
|
blt _0232D078
|
|
add r8, r8, #1
|
|
cmp r8, #0x20
|
|
blt _0232D074
|
|
cmp r4, #0
|
|
beq _0232D0C0
|
|
add r0, sp, #0
|
|
bl ov29_022E6784
|
|
ldr r2, _0232D0EC ; =0x00000F0A
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _0232D0D0
|
|
_0232D0C0:
|
|
ldr r2, _0232D0E0 ; =0x00000F0B
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232D0D0:
|
|
bl UpdateMinimap
|
|
bl UpdateTrapsVisibility
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232D0E0: .word 0x00000C4D
|
|
_0232D0E4: .word DIRECTIONS_XY
|
|
_0232D0E8: .word DIRECTIONS_XY + 2
|
|
_0232D0EC: .word 0x00000C4C
|
|
#else
|
|
_0232D0E0: .word 0x00000F0B
|
|
_0232D0E4: .word DIRECTIONS_XY
|
|
_0232D0E8: .word DIRECTIONS_XY + 2
|
|
_0232D0EC: .word 0x00000F0A
|
|
#endif
|
|
arm_func_end DoMoveFillIn
|
|
|
|
arm_func_start DoMoveTrapper
|
|
DoMoveTrapper: ; 0x0232D0F0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl AreLateGameTrapsEnabledWrapper
|
|
cmp r0, #0
|
|
bne _0232D11C
|
|
#ifdef JAPAN
|
|
mov r0, r5
|
|
mov r1, #0xbc0
|
|
#else
|
|
ldr r1, _0232D144 ; =0x00000E7E
|
|
mov r0, r5
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_0232D11C:
|
|
ldr r0, [r4, #0xb4]
|
|
mov r1, #0x19
|
|
ldrb r0, [r0, #6]
|
|
cmp r0, #0
|
|
movne r2, #2
|
|
moveq r2, #1
|
|
add r0, r4, #4
|
|
bl PrepareTrapperTrap
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifndef JAPAN
|
|
_0232D144: .word 0x00000E7E
|
|
#endif
|
|
arm_func_end DoMoveTrapper
|
|
|
|
arm_func_start DoMoveItemize
|
|
DoMoveItemize: ; 0x0232D148
|
|
stmdb sp!, {r4, r5, lr}
|
|
sub sp, sp, #0xc
|
|
mov r4, r1
|
|
ldrh r2, [r4, #4]
|
|
mov r5, r0
|
|
strh r2, [sp, #6]
|
|
ldrh r2, [r4, #6]
|
|
strh r2, [sp, #8]
|
|
ldr r2, [r4, #0xb4]
|
|
ldrb r2, [r2, #0xbc]
|
|
cmp r2, #6
|
|
bls _0232D188
|
|
ldr r2, _0232D1D4 ; =0x00000F0C
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #0
|
|
b _0232D1CC
|
|
_0232D188:
|
|
mov r0, #0
|
|
strb r0, [r4, #0x20]
|
|
bl GetItemIdToSpawn
|
|
mov r1, r0
|
|
add r0, sp, #0
|
|
mov r2, #0
|
|
bl GenerateStandardItem
|
|
add r1, sp, #6
|
|
add r2, sp, #0
|
|
mov r0, r5
|
|
mov r3, #0
|
|
bl SpawnDroppedItemWrapper
|
|
ldr r1, _0232D1D8 ; =0x00000257
|
|
mov r0, r4
|
|
mov r2, r5
|
|
bl HandleFaint
|
|
mov r0, #1
|
|
_0232D1CC:
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232D1D4: .word 0x00000C4E
|
|
#else
|
|
_0232D1D4: .word 0x00000F0C
|
|
#endif
|
|
_0232D1D8: .word 0x00000257
|
|
arm_func_end DoMoveItemize
|
|
|
|
arm_func_start DoMoveHurl
|
|
DoMoveHurl: ; 0x0232D1DC
|
|
stmdb sp!, {r3, lr}
|
|
bl TryHurl
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveHurl
|
|
|
|
arm_func_start DoMoveMobile
|
|
DoMoveMobile: ; 0x0232D1EC
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictMobileStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveMobile
|
|
|
|
arm_func_start DoMoveSeeStairs
|
|
DoMoveSeeStairs: ; 0x0232D1FC
|
|
stmdb sp!, {r3, lr}
|
|
bl RevealStairs
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveSeeStairs
|
|
|
|
arm_func_start DoMoveLongToss
|
|
DoMoveLongToss: ; 0x0232D20C
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictLongTossStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveLongToss
|
|
|
|
arm_func_start DoMovePierce
|
|
DoMovePierce: ; 0x0232D21C
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictPierceStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMovePierce
|
|
|
|
arm_func_start DoMoveHammerArm
|
|
DoMoveHammerArm: ; 0x0232D22C
|
|
stmdb sp!, {r3, r4, lr}
|
|
sub sp, sp, #4
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r4, r0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _0232D268
|
|
mov r2, #1
|
|
mov r0, r4
|
|
mov r1, r4
|
|
mov r3, r2
|
|
bl LowerSpeed
|
|
mov r0, #1
|
|
_0232D268:
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, pc}
|
|
arm_func_end DoMoveHammerArm
|
|
|
|
arm_func_start DoMoveAquaRing
|
|
DoMoveAquaRing: ; 0x0232D270
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictAquaRingStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveAquaRing
|
|
|
|
arm_func_start DoMoveGastroAcid
|
|
DoMoveGastroAcid: ; 0x0232D280
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl TryInflictGastroAcidStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveGastroAcid
|
|
|
|
arm_func_start DoMoveHealingWish
|
|
DoMoveHealingWish: ; 0x0232D298
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
cmp r5, r4
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r2, _0232D2E4 ; =HEALING_WISH_HP_RESTORATION
|
|
mov ip, #1
|
|
ldrsh r2, [r2]
|
|
mov r3, #0
|
|
str ip, [sp]
|
|
bl TryIncreaseHp
|
|
mov r2, #1
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r3, r2
|
|
bl EndNegativeStatusConditionWrapper
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232D2E4: .word HEALING_WISH_HP_RESTORATION
|
|
arm_func_end DoMoveHealingWish
|
|
|
|
arm_func_start DoMoveCloseCombat
|
|
DoMoveCloseCombat: ; 0x0232D2E8
|
|
stmdb sp!, {r4, lr}
|
|
sub sp, sp, #8
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r4, r0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _0232D358
|
|
ldr r0, _0232D360 ; =ATK_STAT_IDX
|
|
mov r3, #1
|
|
ldr r2, [r0]
|
|
mov r0, r4
|
|
mov r1, r4
|
|
str r3, [sp]
|
|
mov ip, #0
|
|
str ip, [sp, #4]
|
|
bl LowerDefensiveStat
|
|
ldr r0, _0232D364 ; =SPATK_STAT_IDX
|
|
mov r3, #1
|
|
ldr r2, [r0]
|
|
mov r0, r4
|
|
mov r1, r4
|
|
str r3, [sp]
|
|
mov ip, #0
|
|
str ip, [sp, #4]
|
|
bl LowerDefensiveStat
|
|
mov r0, #1
|
|
_0232D358:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0232D360: .word ATK_STAT_IDX
|
|
_0232D364: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveCloseCombat
|
|
|
|
arm_func_start DoMoveLuckyChant
|
|
DoMoveLuckyChant: ; 0x0232D368
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictLuckyChantStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveLuckyChant
|
|
|
|
arm_func_start DoMoveGuardSwap
|
|
DoMoveGuardSwap: ; 0x0232D378
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
mov r2, #0
|
|
bl ov29_0230D874
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0
|
|
bl ov29_0230D8E8
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r4
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, r5
|
|
mov r1, r4
|
|
ldr r2, _0232D3D4 ; =0x00000F2E
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232D3D4: .word 0x00002495
|
|
#else
|
|
_0232D3D4: .word 0x00000F2E
|
|
#endif
|
|
arm_func_end DoMoveGuardSwap
|
|
|
|
arm_func_start DoMoveHealOrder
|
|
DoMoveHealOrder: ; 0x0232D3D8
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _0232D3FC ; =HEAL_ORDER_HP_RESTORATION
|
|
mov ip, #1
|
|
ldrsh r2, [r2]
|
|
mov r3, #0
|
|
str ip, [sp]
|
|
bl TryIncreaseHp
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0232D3FC: .word HEAL_ORDER_HP_RESTORATION
|
|
arm_func_end DoMoveHealOrder
|
|
|
|
arm_func_start DoMoveHealBlock
|
|
DoMoveHealBlock: ; 0x0232D400
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl TryInflictHealBlockStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveHealBlock
|
|
|
|
arm_func_start DoMoveThunderFang
|
|
DoMoveThunderFang: ; 0x0232D418
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r1, _0232D4A4 ; =THUNDER_FANG_PARALYZE_CHANCE
|
|
mov r0, r5
|
|
ldrsh r2, [r1]
|
|
mov r1, r4
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232D46C
|
|
mov r2, #0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r3, r2
|
|
bl TryInflictParalysisStatus
|
|
_0232D46C:
|
|
ldr r1, _0232D4A8 ; =THUNDER_FANG_CRINGE_CHANCE
|
|
mov r0, r5
|
|
ldrsh r2, [r1]
|
|
mov r1, r4
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232D49C
|
|
mov r2, #0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r3, r2
|
|
bl TryInflictCringeStatus
|
|
_0232D49C:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232D4A4: .word THUNDER_FANG_PARALYZE_CHANCE
|
|
_0232D4A8: .word THUNDER_FANG_CRINGE_CHANCE
|
|
arm_func_end DoMoveThunderFang
|
|
|
|
arm_func_start DoMoveDefog
|
|
DoMoveDefog: ; 0x0232D4AC
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r1
|
|
mov r6, r0
|
|
mov r0, r5
|
|
ldr r4, [r5, #0xb4]
|
|
bl MistIsActive
|
|
cmp r0, #0
|
|
bne _0232D4E0
|
|
ldrb r0, [r4, #0xd5]
|
|
add r0, r0, #0xff
|
|
and r0, r0, #0xff
|
|
cmp r0, #2
|
|
bhi _0232D4FC
|
|
_0232D4E0:
|
|
ldr r2, _0232D550 ; =0x00000ED2
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl EndReflectClassStatus
|
|
_0232D4FC:
|
|
ldr r1, _0232D554 ; =SPATK_STAT_IDX
|
|
mov r0, r6
|
|
ldr r2, [r1]
|
|
mov r1, r5
|
|
mov r3, #0
|
|
bl LowerHitChanceStat
|
|
mov r0, r6
|
|
bl GetApparentWeather
|
|
cmp r0, #6
|
|
bne _0232D548
|
|
ldr r1, _0232D558 ; =WEATHER_MOVE_TURN_COUNT
|
|
ldr r0, _0232D55C ; =DUNGEON_PTR
|
|
ldrsh r3, [r1]
|
|
ldr r1, [r0]
|
|
mov r0, #1
|
|
#ifdef JAPAN
|
|
add r2, r1, #0xcc00
|
|
mov r1, #0
|
|
strh r3, [r2, #0x96]
|
|
#else
|
|
add r2, r1, #0xcd00
|
|
mov r1, #0
|
|
strh r3, [r2, #0x3a]
|
|
#endif
|
|
bl TryActivateWeather
|
|
_0232D548:
|
|
mov r0, #1
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232D550: .word 0x00000C14
|
|
#else
|
|
_0232D550: .word 0x00000ED2
|
|
#endif
|
|
_0232D554: .word SPATK_STAT_IDX
|
|
_0232D558: .word WEATHER_MOVE_TURN_COUNT
|
|
_0232D55C: .word DUNGEON_PTR
|
|
arm_func_end DoMoveDefog
|
|
|
|
arm_func_start DoMoveTrumpCard
|
|
DoMoveTrumpCard: ; 0x0232D560
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #4
|
|
mov r6, r2
|
|
ldrb r4, [r6, #6]
|
|
mov r8, r0
|
|
mov r0, r6
|
|
mov r7, r1
|
|
mov r5, r3
|
|
bl GetMaxPp
|
|
movs r1, r0
|
|
mov r0, #0x64
|
|
mul r0, r4, r0
|
|
moveq r1, #1
|
|
bl _s32_div_f
|
|
cmp r0, #0x19
|
|
bgt _0232D5BC
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, r6
|
|
mov r3, #0x140
|
|
str r5, [sp]
|
|
bl DealDamage
|
|
b _0232D614
|
|
_0232D5BC:
|
|
cmp r0, #0x32
|
|
bgt _0232D5E0
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, r6
|
|
mov r3, #0x100
|
|
str r5, [sp]
|
|
bl DealDamage
|
|
b _0232D614
|
|
_0232D5E0:
|
|
cmp r0, #0x4b
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bgt _0232D604
|
|
mov r2, r6
|
|
mov r3, #0xc0
|
|
str r5, [sp]
|
|
bl DealDamage
|
|
b _0232D614
|
|
_0232D604:
|
|
mov r2, r6
|
|
mov r3, #0x80
|
|
str r5, [sp]
|
|
bl DealDamage
|
|
_0232D614:
|
|
mov r0, #1
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
arm_func_end DoMoveTrumpCard
|
|
|
|
arm_func_start DoMoveIceFang
|
|
DoMoveIceFang: ; 0x0232D620
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r1, _0232D6A8 ; =ICE_FANG_FREEZE_CHANCE
|
|
mov r0, r5
|
|
ldrsh r2, [r1]
|
|
mov r1, r4
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232D670
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0
|
|
bl TryInflictFrozenStatus
|
|
_0232D670:
|
|
ldr r1, _0232D6AC ; =ICE_FANG_CRINGE_CHANCE
|
|
mov r0, r5
|
|
ldrsh r2, [r1]
|
|
mov r1, r4
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232D6A0
|
|
mov r2, #0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r3, r2
|
|
bl TryInflictCringeStatus
|
|
_0232D6A0:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232D6A8: .word ICE_FANG_FREEZE_CHANCE
|
|
_0232D6AC: .word ICE_FANG_CRINGE_CHANCE
|
|
arm_func_end DoMoveIceFang
|
|
|
|
arm_func_start DoMovePsychoShift
|
|
DoMovePsychoShift: ; 0x0232D6B0
|
|
stmdb sp!, {r3, lr}
|
|
cmp r0, r1
|
|
beq _0232D6C8
|
|
mov r2, #0
|
|
mov r3, r2
|
|
bl TransferNegativeStatusCondition
|
|
_0232D6C8:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMovePsychoShift
|
|
|
|
arm_func_start DoMoveEmbargo
|
|
DoMoveEmbargo: ; 0x0232D6D0
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl TryInflictEmbargoStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveEmbargo
|
|
|
|
arm_func_start DoMoveBrine
|
|
DoMoveBrine: ; 0x0232D6E8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r5, [r1, #0xb4]
|
|
ldr ip, _0232D734 ; =0x000003E7
|
|
ldrsh r4, [r5, #0x12]
|
|
ldrsh lr, [r5, #0x16]
|
|
add r4, r4, lr
|
|
cmp r4, ip
|
|
movgt r4, ip
|
|
ldrsh ip, [r5, #0x10]
|
|
cmp r4, ip, lsl #1
|
|
movge r4, #2
|
|
movlt r4, #1
|
|
str r3, [sp]
|
|
mov r3, r4, lsl #8
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
movne r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232D734: .word 0x000003E7
|
|
arm_func_end DoMoveBrine
|
|
|
|
arm_func_start DoMoveNaturalGift
|
|
DoMoveNaturalGift: ; 0x0232D738
|
|
stmdb sp!, {r4, r5, r6, r7, lr}
|
|
sub sp, sp, #0x14
|
|
mov r7, r0
|
|
ldr r0, [r7, #0xb4]
|
|
mov r6, r1
|
|
ldrsh r0, [r0, #0x66]
|
|
mov r5, r2
|
|
mov r4, r3
|
|
cmp r0, #0
|
|
beq _0232D7C8
|
|
add r2, sp, #0xc
|
|
mov r3, r5
|
|
mov r1, #4
|
|
_0232D76C:
|
|
ldrh r0, [r3], #2
|
|
subs r1, r1, #1
|
|
strh r0, [r2], #2
|
|
bne _0232D76C
|
|
mov r0, r7
|
|
bl GetEntityNaturalGiftInfo
|
|
cmp r0, #0
|
|
beq _0232D7C8
|
|
str r4, [sp]
|
|
ldrb r3, [r0, #2]
|
|
add r2, sp, #0xc
|
|
mov r1, r6
|
|
str r3, [sp, #4]
|
|
ldrsh r4, [r0, #4]
|
|
mov r0, r7
|
|
mov r3, #0x100
|
|
str r4, [sp, #8]
|
|
bl DealDamageWithTypeAndPowerBoost
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
b _0232D7F0
|
|
_0232D7C8:
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
mov r3, #0x100
|
|
str r4, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
_0232D7F0:
|
|
add sp, sp, #0x14
|
|
ldmia sp!, {r4, r5, r6, r7, pc}
|
|
arm_func_end DoMoveNaturalGift
|
|
|
|
arm_func_start DoMoveGyroBall
|
|
DoMoveGyroBall: ; 0x0232D7F8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #4
|
|
mov r8, r0
|
|
ldr ip, [r8, #0xb4]
|
|
mov r7, r1
|
|
#ifdef JAPAN
|
|
ldr ip, [ip, #0x10c]
|
|
#else
|
|
ldr ip, [ip, #0x110]
|
|
#endif
|
|
mov r6, r2
|
|
cmp ip, #0
|
|
mov r5, r3
|
|
movne r4, #1
|
|
bne _0232D830
|
|
ldr r2, _0232D85C ; =0x00000F0D
|
|
mov r4, #2
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232D830:
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, r6
|
|
mov r3, r4, lsl #8
|
|
str r5, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
movne r0, #1
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232D85C: .word 0x00000C4F
|
|
#else
|
|
_0232D85C: .word 0x00000F0D
|
|
#endif
|
|
arm_func_end DoMoveGyroBall
|
|
|
|
arm_func_start DoMoveShadowForce
|
|
DoMoveShadowForce: ; 0x0232D860
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r5, r2
|
|
mov r6, r1
|
|
mov r1, r5
|
|
mov r7, r0
|
|
mov r4, r3
|
|
bl IsChargingTwoTurnMove
|
|
cmp r0, #0
|
|
beq _0232D8CC
|
|
ldr r1, _0232D8F4 ; =SHADOW_FORCE_DAMAGE_MULTIPLIER
|
|
mov r0, r7
|
|
ldr r3, [r1]
|
|
mov r1, r6
|
|
mov r2, r5
|
|
str r4, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r4, #1
|
|
moveq r4, #0
|
|
mov r0, r7
|
|
bl ov29_02318D58
|
|
tst r4, #0xff
|
|
beq _0232D8EC
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl EndProtectStatus
|
|
b _0232D8EC
|
|
_0232D8CC:
|
|
ldr r0, _0232D8F8 ; =0x00000CD7
|
|
bl StringFromId
|
|
str r0, [sp]
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r3, r5
|
|
mov r2, #0xd
|
|
bl ov29_02318BBC
|
|
_0232D8EC:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0232D8F4: .word SHADOW_FORCE_DAMAGE_MULTIPLIER
|
|
#ifdef JAPAN
|
|
_0232D8F8: .word 0x00000A17
|
|
#else
|
|
_0232D8F8: .word 0x00000CD7
|
|
#endif
|
|
arm_func_end DoMoveShadowForce
|
|
|
|
arm_func_start DoMoveGravity
|
|
DoMoveGravity: ; 0x0232D8FC
|
|
stmdb sp!, {r3, lr}
|
|
bl TryActivateGravity
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveGravity
|
|
|
|
arm_func_start DoMoveStealthRock
|
|
DoMoveStealthRock: ; 0x0232D90C
|
|
#ifdef JAPAN
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
ldr r0, [r6, #0xb4]
|
|
mov r5, r1
|
|
ldrb r0, [r0, #6]
|
|
mov r4, #0
|
|
mov r1, #0x14
|
|
cmp r0, #0
|
|
movne r2, #2
|
|
moveq r2, #1
|
|
add r0, r6, #4
|
|
#else
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
ldr r0, [r7, #0xb4]
|
|
mov r6, r1
|
|
ldrb r0, [r0, #6]
|
|
mov r4, #0
|
|
cmp r0, #0
|
|
movne r5, #2
|
|
moveq r5, #1
|
|
bl AreLateGameTrapsEnabledWrapper
|
|
cmp r0, #0
|
|
beq _0232D95C
|
|
mov r2, r5
|
|
add r0, r7, #4
|
|
mov r1, #0x14
|
|
#endif
|
|
mov r3, #0
|
|
bl TrySpawnTrap
|
|
cmp r0, #0
|
|
movne r4, #1
|
|
bne _0232D96C
|
|
_0232D95C:
|
|
ldr r2, _0232D978 ; =0x00000EEF
|
|
#ifdef JAPAN
|
|
mov r0, r6
|
|
mov r1, r5
|
|
#else
|
|
mov r0, r7
|
|
mov r1, r6
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232D96C:
|
|
bl UpdateTrapsVisibility
|
|
mov r0, r4
|
|
#ifdef JAPAN
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0232D978: .word 0x00000C31
|
|
#else
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0232D978: .word 0x00000EEF
|
|
#endif
|
|
arm_func_end DoMoveStealthRock
|
|
|
|
arm_func_start DoMoveChargeBeam
|
|
DoMoveChargeBeam: ; 0x0232D97C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r1, _0232D9DC ; =CHARGE_BEAM_BOOST_SPECIAL_ATTACK_CHANCE
|
|
mov r0, r5
|
|
ldrsh r2, [r1]
|
|
mov r1, r4
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232D9D4
|
|
ldr r1, _0232D9E0 ; =SPATK_STAT_IDX
|
|
mov r0, r5
|
|
ldr r2, [r1]
|
|
mov r1, r5
|
|
mov r3, #1
|
|
bl BoostOffensiveStat
|
|
_0232D9D4:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232D9DC: .word CHARGE_BEAM_BOOST_SPECIAL_ATTACK_CHANCE
|
|
_0232D9E0: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveChargeBeam
|
|
|
|
arm_func_start DoMoveDamageEatItem
|
|
DoMoveDamageEatItem: ; 0x0232D9E4
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
#ifdef EUROPE
|
|
mov r0, r5
|
|
bl ov29_022E34A8_EU
|
|
#else
|
|
#ifndef JAPAN
|
|
ldr r0, _0232DACC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #8]
|
|
cmp r0, #0
|
|
bne _0232DAC4
|
|
#endif
|
|
cmp r5, #0
|
|
moveq r0, #0
|
|
beq _0232DA3C
|
|
ldr r0, [r5]
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
_0232DA3C:
|
|
#endif
|
|
cmp r0, #0
|
|
beq _0232DAC4
|
|
cmp r5, r4
|
|
beq _0232DA8C
|
|
cmp r5, #0
|
|
moveq r0, #0
|
|
beq _0232DA6C
|
|
ldr r0, [r5]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
_0232DA6C:
|
|
cmp r0, #0
|
|
beq _0232DA8C
|
|
mov r0, r5
|
|
mov r1, #0x53
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _0232DA98
|
|
_0232DA8C:
|
|
mov r0, r4
|
|
mov r1, #0x2c
|
|
bl AbilityIsActiveVeneer
|
|
_0232DA98:
|
|
cmp r0, #0
|
|
bne _0232DAC4
|
|
ldr r1, [r5, #0xb4]
|
|
ldrb r0, [r1, #0xd8]
|
|
cmp r0, #6
|
|
ldrneb r0, [r1, #0xf3]
|
|
cmpne r0, #1
|
|
beq _0232DAC4
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl TryEatItem
|
|
_0232DAC4:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#if defined(NORTH_AMERICA)
|
|
_0232DACC: .word DUNGEON_PTR
|
|
#endif
|
|
arm_func_end DoMoveDamageEatItem
|
|
|
|
arm_func_start DoMoveAcupressure
|
|
DoMoveAcupressure: ; 0x0232DAD0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
sub sp, sp, #0x10
|
|
mov r4, r1
|
|
ldr ip, [r4, #0xb4]
|
|
ldr r1, _0232DC44 ; =ov29_02352B3C
|
|
mov r5, r0
|
|
add lr, sp, #0
|
|
ldmia r1, {r0, r1, r2, r3}
|
|
stmia lr, {r0, r1, r2, r3}
|
|
ldrsh r1, [ip, #0x24]
|
|
mov r0, #0
|
|
cmp r1, #0x14
|
|
strlt r0, [sp]
|
|
ldrsh r1, [ip, #0x26]
|
|
addlt r0, r0, #1
|
|
cmp r1, #0x14
|
|
addlt r1, sp, #0
|
|
movlt r2, #1
|
|
strlt r2, [r1, r0, lsl #2]
|
|
ldrsh r1, [ip, #0x28]
|
|
addlt r0, r0, #1
|
|
cmp r1, #0x14
|
|
addlt r1, sp, #0
|
|
movlt r2, #2
|
|
strlt r2, [r1, r0, lsl #2]
|
|
ldrsh r1, [ip, #0x2a]
|
|
addlt r0, r0, #1
|
|
cmp r1, #0x14
|
|
addlt r1, sp, #0
|
|
movlt r2, #3
|
|
strlt r2, [r1, r0, lsl #2]
|
|
addlt r0, r0, #1
|
|
cmp r0, #0
|
|
bne _0232DB7C
|
|
mov r0, #0
|
|
mov r1, r4
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
#ifdef JAPAN
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0xc50
|
|
#else
|
|
ldr r2, _0232DC48 ; =0x00000F0E
|
|
mov r0, r5
|
|
mov r1, r4
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _0232DC38
|
|
_0232DB7C:
|
|
bl DungeonRandInt
|
|
add r1, sp, #0
|
|
ldr r0, [r1, r0, lsl #2]
|
|
cmp r0, #0
|
|
bne _0232DBAC
|
|
ldr r1, _0232DC4C ; =ATK_STAT_IDX
|
|
mov r0, r5
|
|
ldr r2, [r1]
|
|
mov r1, r4
|
|
mov r3, #2
|
|
bl BoostOffensiveStat
|
|
b _0232DC38
|
|
_0232DBAC:
|
|
cmp r0, #2
|
|
bne _0232DBD0
|
|
ldr r1, _0232DC4C ; =ATK_STAT_IDX
|
|
mov r0, r5
|
|
ldr r2, [r1]
|
|
mov r1, r4
|
|
mov r3, #2
|
|
bl BoostDefensiveStat
|
|
b _0232DC38
|
|
_0232DBD0:
|
|
cmp r0, #1
|
|
bne _0232DBF4
|
|
ldr r1, _0232DC50 ; =SPATK_STAT_IDX
|
|
mov r0, r5
|
|
ldr r2, [r1]
|
|
mov r1, r4
|
|
mov r3, #2
|
|
bl BoostOffensiveStat
|
|
b _0232DC38
|
|
_0232DBF4:
|
|
cmp r0, #3
|
|
bne _0232DC18
|
|
ldr r1, _0232DC50 ; =SPATK_STAT_IDX
|
|
mov r0, r5
|
|
ldr r2, [r1]
|
|
mov r1, r4
|
|
mov r3, #2
|
|
bl BoostDefensiveStat
|
|
b _0232DC38
|
|
_0232DC18:
|
|
mov r0, #0
|
|
mov r1, r4
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
#ifdef JAPAN
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0xc50
|
|
#else
|
|
ldr r2, _0232DC48 ; =0x00000F0E
|
|
mov r0, r5
|
|
mov r1, r4
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232DC38:
|
|
mov r0, #1
|
|
add sp, sp, #0x10
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232DC44: .word ov29_02352B3C
|
|
#ifndef JAPAN
|
|
_0232DC48: .word 0x00000F0E
|
|
#endif
|
|
_0232DC4C: .word ATK_STAT_IDX
|
|
_0232DC50: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveAcupressure
|
|
|
|
arm_func_start DoMoveMagnetRise
|
|
DoMoveMagnetRise: ; 0x0232DC54
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictMagnetRiseStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveMagnetRise
|
|
|
|
arm_func_start DoMoveToxicSpikes
|
|
DoMoveToxicSpikes: ; 0x0232DC64
|
|
#ifdef JAPAN
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
ldr r0, [r6, #0xb4]
|
|
mov r5, r1
|
|
ldrb r0, [r0, #6]
|
|
mov r4, #0
|
|
mov r1, #0x15
|
|
cmp r0, #0
|
|
movne r2, #2
|
|
moveq r2, #1
|
|
add r0, r6, #4
|
|
#else
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
ldr r0, [r7, #0xb4]
|
|
mov r6, r1
|
|
ldrb r0, [r0, #6]
|
|
mov r4, #0
|
|
cmp r0, #0
|
|
movne r5, #2
|
|
moveq r5, #1
|
|
bl AreLateGameTrapsEnabledWrapper
|
|
cmp r0, #0
|
|
beq _0232DCB4
|
|
mov r2, r5
|
|
add r0, r7, #4
|
|
mov r1, #0x15
|
|
#endif
|
|
mov r3, #1
|
|
bl TrySpawnTrap
|
|
cmp r0, #0
|
|
movne r4, #1
|
|
bne _0232DCC4
|
|
_0232DCB4:
|
|
ldr r2, _0232DCD0 ; =0x00000EEF
|
|
#ifdef JAPAN
|
|
mov r0, r6
|
|
mov r1, r5
|
|
#else
|
|
mov r0, r7
|
|
mov r1, r6
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232DCC4:
|
|
bl UpdateTrapsVisibility
|
|
mov r0, r4
|
|
#ifdef JAPAN
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0232DCD0: .word 0x00000C31
|
|
#else
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0232DCD0: .word 0x00000EEF
|
|
#endif
|
|
arm_func_end DoMoveToxicSpikes
|
|
|
|
arm_func_start DoMoveLastResort
|
|
DoMoveLastResort: ; 0x0232DCD4
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #4
|
|
mov r8, r0
|
|
mov r7, r1
|
|
mov r6, r2
|
|
mov r5, r3
|
|
mov r4, #0
|
|
bl CountMovesOutOfPp
|
|
cmp r0, #0
|
|
ble _0232DD10
|
|
ldrb r1, [r6, #6]
|
|
cmp r1, #0
|
|
subeq r0, r0, #1
|
|
moveq r0, r0, lsl #0x10
|
|
moveq r0, r0, asr #0x10
|
|
_0232DD10:
|
|
cmp r0, #0
|
|
ble _0232DD44
|
|
ldr r1, _0232DD70 ; =LAST_RESORT_DAMAGE_MULT_TABLE
|
|
sub r0, r0, #1
|
|
ldr r3, [r1, r0, lsl #2]
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, r6
|
|
str r5, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
#ifdef JAPAN
|
|
moveq r4, #1
|
|
#else
|
|
movgt r4, #1
|
|
#endif
|
|
b _0232DD64
|
|
_0232DD44:
|
|
mov r1, r7
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _0232DD74 ; =0x00000EBC
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232DD64:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_0232DD70: .word LAST_RESORT_DAMAGE_MULT_TABLE
|
|
#ifdef JAPAN
|
|
_0232DD74: .word 0x00000BFE
|
|
#else
|
|
_0232DD74: .word 0x00000EBC
|
|
#endif
|
|
arm_func_end DoMoveLastResort
|
|
|
|
arm_func_start DoMoveTrickRoom
|
|
DoMoveTrickRoom: ; 0x0232DD78
|
|
stmdb sp!, {r3, lr}
|
|
bl BoostOrLowerSpeed
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveTrickRoom
|
|
|
|
arm_func_start DoMoveDamage__0232DD88
|
|
DoMoveDamage__0232DD88: ; 0x0232DD88
|
|
stmdb sp!, {r3, lr}
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveDamage__0232DD88
|
|
|
|
arm_func_start DoMoveWorrySeed
|
|
DoMoveWorrySeed: ; 0x0232DDAC
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
#ifndef JAPAN
|
|
mov r4, #1
|
|
mov r3, r4
|
|
#endif
|
|
mov r2, #0x2a
|
|
mov r6, r0
|
|
mov r5, r1
|
|
#ifdef JAPAN
|
|
mov r4, #1
|
|
#endif
|
|
bl DefenderAbilityIsActiveMoveEffects__0232DE20
|
|
cmp r0, #0
|
|
beq _0232DE00
|
|
mov r4, #0
|
|
mov r0, r4
|
|
mov r1, r5
|
|
mov r2, r4
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, #1
|
|
mov r1, #0x2a
|
|
bl SetPreprocessorArgsIdVal
|
|
ldr r2, _0232DE1C ; =0x00000F13
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232DE00:
|
|
cmp r4, #0
|
|
beq _0232DE14
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl TryInflictSleeplessStatus
|
|
_0232DE14:
|
|
mov r0, #1
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232DE1C: .word 0x00000C55
|
|
#else
|
|
_0232DE1C: .word 0x00000F13
|
|
#endif
|
|
arm_func_end DoMoveWorrySeed
|
|
|
|
arm_func_start DefenderAbilityIsActiveMoveEffects__0232DE20
|
|
DefenderAbilityIsActiveMoveEffects__0232DE20: ; 0x0232DE20
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r1
|
|
mov r4, r2
|
|
cmp r0, r5
|
|
beq _0232DE74
|
|
cmp r0, #0
|
|
moveq r1, #0
|
|
beq _0232DE54
|
|
ldr r1, [r0]
|
|
cmp r1, #1
|
|
moveq r1, #1
|
|
movne r1, #0
|
|
and r1, r1, #0xff
|
|
_0232DE54:
|
|
cmp r1, #0
|
|
#ifndef JAPAN
|
|
cmpne r3, #0
|
|
#endif
|
|
beq _0232DE74
|
|
mov r1, #0x53
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_0232DE74:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl AbilityIsActiveVeneer
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DefenderAbilityIsActiveMoveEffects__0232DE20
|
|
|
|
arm_func_start DoMoveDamageHpDependent
|
|
DoMoveDamageHpDependent: ; 0x0232DE84
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
ldr ip, [r1, #0xb4]
|
|
ldr r6, _0232DF30 ; =0x000003E7
|
|
ldrsh r5, [ip, #0x12]
|
|
ldrsh r4, [ip, #0x16]
|
|
ldrsh ip, [ip, #0x10]
|
|
add lr, r5, r4
|
|
cmp lr, r6
|
|
movle r6, lr
|
|
mov r4, r6, asr #1
|
|
add r4, r6, r4, lsr #30
|
|
cmp ip, r4, asr #2
|
|
movle r5, #0
|
|
ble _0232DF08
|
|
ldr r4, _0232DF30 ; =0x000003E7
|
|
cmp lr, r4
|
|
movle r4, lr
|
|
mov r5, r4, lsl #1
|
|
mov r4, r5, asr #1
|
|
add r4, r5, r4, lsr #30
|
|
cmp ip, r4, asr #2
|
|
movle r5, #1
|
|
ble _0232DF08
|
|
ldr r4, _0232DF30 ; =0x000003E7
|
|
cmp lr, r4
|
|
movgt lr, r4
|
|
add r4, lr, lr, lsl #1
|
|
mov lr, r4, asr #1
|
|
add lr, r4, lr, lsr #30
|
|
cmp ip, lr, asr #2
|
|
movle r5, #2
|
|
movgt r5, #3
|
|
_0232DF08:
|
|
ldr r4, _0232DF34 ; =WRING_OUT_DAMAGE_MULT_TABLE
|
|
str r3, [sp]
|
|
ldr r3, [r4, r5, lsl #2]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0232DF30: .word 0x000003E7
|
|
_0232DF34: .word WRING_OUT_DAMAGE_MULT_TABLE
|
|
arm_func_end DoMoveDamageHpDependent
|
|
|
|
arm_func_start DoMoveHeartSwap
|
|
DoMoveHeartSwap: ; 0x0232DF38
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
mov r2, #0
|
|
bl ov29_0230D95C
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0
|
|
bl ov29_0230D9D0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0
|
|
bl ov29_0230D874
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0
|
|
bl ov29_0230D8E8
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0
|
|
bl ov29_0230DA44
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, #1
|
|
mov r1, r4
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, r5
|
|
mov r1, r4
|
|
ldr r2, _0232DFC4 ; =0x00000F2F
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232DFC4: .word 0x00002496
|
|
#else
|
|
_0232DFC4: .word 0x00000F2F
|
|
#endif
|
|
arm_func_end DoMoveHeartSwap
|
|
|
|
arm_func_start DoMoveRoost
|
|
DoMoveRoost: ; 0x0232DFC8
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
mov r5, r0
|
|
mov r6, r1
|
|
ldr r4, [r5, #0xb4]
|
|
bl GetApparentWeather
|
|
mov r3, #1
|
|
str r3, [sp]
|
|
ldr r1, _0232E07C ; =ROOST_HP_RESTORATION_TABLE
|
|
mov r0, r0, lsl #1
|
|
ldrsh r2, [r1, r0]
|
|
mov r0, r5
|
|
mov r1, r6
|
|
mov r3, #0
|
|
bl TryIncreaseHp
|
|
ldrb r0, [r4, #0x5e]
|
|
mov ip, #0
|
|
mov r1, ip
|
|
strb r0, [r4, #0xaa]
|
|
ldrb r0, [r4, #0x5f]
|
|
strb r0, [r4, #0xab]
|
|
mov r0, #1
|
|
_0232E020:
|
|
add r3, r4, ip
|
|
ldrb r2, [r3, #0x5e]
|
|
add ip, ip, #1
|
|
cmp r2, #0xa
|
|
streqb r1, [r3, #0x5e]
|
|
streqb r0, [r4, #0xa9]
|
|
cmp ip, #2
|
|
blt _0232E020
|
|
ldrb r0, [r4, #0xa9]
|
|
cmp r0, #0
|
|
mov r0, #0
|
|
streqb r0, [r4, #0xaa]
|
|
streqb r0, [r4, #0xab]
|
|
beq _0232E070
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r1, _0232E080 ; =0x00000CC9
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_0232E070:
|
|
mov r0, #1
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0232E07C: .word ROOST_HP_RESTORATION_TABLE
|
|
#ifdef JAPAN
|
|
_0232E080: .word 0x00000A09
|
|
#else
|
|
_0232E080: .word 0x00000CC9
|
|
#endif
|
|
arm_func_end DoMoveRoost
|
|
|
|
arm_func_start DoMovePowerSwap
|
|
DoMovePowerSwap: ; 0x0232E084
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
mov r2, #0
|
|
bl ov29_0230D95C
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0
|
|
bl ov29_0230D9D0
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r4
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, r5
|
|
mov r1, r4
|
|
ldr r2, _0232E0E0 ; =0x00000F2B
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232E0E0: .word 0x00002492
|
|
#else
|
|
_0232E0E0: .word 0x00000F2B
|
|
#endif
|
|
arm_func_end DoMovePowerSwap
|
|
|
|
arm_func_start DoMovePowerTrick
|
|
DoMovePowerTrick: ; 0x0232E0E4
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
bl ov29_0230DAB8
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMovePowerTrick
|
|
|
|
arm_func_start DoMoveFeint
|
|
DoMoveFeint: ; 0x0232E0F8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl EndProtectStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DoMoveFeint
|
|
|
|
arm_func_start DoMoveFlareBlitz
|
|
DoMoveFlareBlitz: ; 0x0232E130
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
sub sp, sp, #0x18
|
|
mov r5, r0
|
|
mov r7, r1
|
|
mov r4, r2
|
|
mov r6, r3
|
|
bl EndFrozenStatus
|
|
mov r0, r5
|
|
mov r1, r7
|
|
mov r2, r4
|
|
mov r3, #0x100
|
|
str r6, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _0232E240
|
|
mov r0, r5
|
|
bl EntityIsValidMoveEffects__0232E250
|
|
cmp r0, #0
|
|
beq _0232E1B4
|
|
ldr r1, _0232E248 ; =FLARE_BLITZ_BURN_CHANCE
|
|
mov r0, r5
|
|
ldrsh r2, [r1]
|
|
mov r1, r7
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232E1B4
|
|
mov r2, #0
|
|
mov r0, r5
|
|
mov r1, r7
|
|
mov r3, r2
|
|
str r2, [sp]
|
|
bl TryInflictBurnStatus
|
|
_0232E1B4:
|
|
mov r0, r5
|
|
bl EntityIsValidMoveEffects__0232E250
|
|
cmp r0, #0
|
|
beq _0232E23C
|
|
mov r0, r5
|
|
mov r1, #7
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _0232E23C
|
|
ldr r1, [r5, #0xb4]
|
|
ldr r0, _0232E24C ; =0x000003E7
|
|
ldrsh r2, [r1, #0x12]
|
|
ldrsh r1, [r1, #0x16]
|
|
ldrh r3, [r4, #4]
|
|
add r1, r2, r1
|
|
cmp r1, r0
|
|
movgt r1, r0
|
|
mov r0, r1, asr #2
|
|
add r0, r1, r0, lsr #29
|
|
movs r1, r0, asr #3
|
|
mov r2, #0
|
|
str r3, [sp]
|
|
mov r0, #0x23c
|
|
str r2, [sp, #4]
|
|
str r0, [sp, #8]
|
|
mov r0, #0x14
|
|
str r0, [sp, #0xc]
|
|
mov r0, #1
|
|
str r0, [sp, #0x10]
|
|
moveq r1, #1
|
|
mov r0, r5
|
|
mov r3, r2
|
|
str r2, [sp, #0x14]
|
|
bl CalcRecoilDamageFixed
|
|
_0232E23C:
|
|
mov r0, #1
|
|
_0232E240:
|
|
add sp, sp, #0x18
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0232E248: .word FLARE_BLITZ_BURN_CHANCE
|
|
_0232E24C: .word 0x000003E7
|
|
arm_func_end DoMoveFlareBlitz
|