mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
2797 lines
51 KiB
ArmAsm
2797 lines
51 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_0232A3FC.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start DoMoveAssist
|
|
DoMoveAssist: ; 0x0232A3FC
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _0232A410 ; =0x00000EE3
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232A410: .word 0x00000C25
|
|
#else
|
|
_0232A410: .word 0x00000EE3
|
|
#endif
|
|
arm_func_end DoMoveAssist
|
|
|
|
arm_func_start DoMoveRest
|
|
DoMoveRest: ; 0x0232A414
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
ldr r1, [r4, #0xb4]
|
|
mov r5, r0
|
|
ldrb r0, [r1, #6]
|
|
cmp r0, #0
|
|
beq _0232A454
|
|
mov r0, #0x32
|
|
bl DungeonRandOutcome__022EAB20
|
|
cmp r0, #0
|
|
movne r2, #1
|
|
moveq r2, #2
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl TryInflictNappingStatus
|
|
b _0232A474
|
|
_0232A454:
|
|
ldr r1, _0232A47C ; =REST_TURN_RANGE
|
|
mov r0, r4
|
|
mov r2, #0
|
|
bl CalcStatusDuration
|
|
mov r2, r0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl TryInflictNappingStatus
|
|
_0232A474:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232A47C: .word REST_TURN_RANGE
|
|
arm_func_end DoMoveRest
|
|
|
|
arm_func_start DoMoveIngrain
|
|
DoMoveIngrain: ; 0x0232A480
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictIngrainStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveIngrain
|
|
|
|
arm_func_start DoMoveSwallow
|
|
DoMoveSwallow: ; 0x0232A490
|
|
stmdb sp!, {r3, r4, lr}
|
|
sub sp, sp, #4
|
|
ldr r4, [r1, #0xb4]
|
|
#ifdef JAPAN
|
|
ldrb r3, [r4, #0x11a]
|
|
#else
|
|
ldrb r3, [r4, #0x11e]
|
|
#endif
|
|
cmp r3, #0
|
|
beq _0232A4CC
|
|
ldr r2, _0232A4E0 ; =ov10_022C49D4
|
|
mov ip, #1
|
|
ldr r2, [r2, r3, lsl #2]
|
|
mov r3, #0
|
|
str ip, [sp]
|
|
bl TryIncreaseHp
|
|
mov r0, #0
|
|
#ifdef JAPAN
|
|
strb r0, [r4, #0x11a]
|
|
#else
|
|
strb r0, [r4, #0x11e]
|
|
#endif
|
|
b _0232A4D4
|
|
_0232A4CC:
|
|
ldr r2, _0232A4E4 ; =0x00000EE4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232A4D4:
|
|
mov r0, #1
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, pc}
|
|
.align 2, 0
|
|
_0232A4E0: .word ov10_022C49D4
|
|
#ifdef JAPAN
|
|
_0232A4E4: .word 0x00000C26
|
|
#else
|
|
_0232A4E4: .word 0x00000EE4
|
|
#endif
|
|
arm_func_end DoMoveSwallow
|
|
|
|
arm_func_start DoMoveCurse
|
|
DoMoveCurse: ; 0x0232A4E8
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl TryInflictCurseStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveCurse
|
|
|
|
arm_func_start DoMoveDamage__0232A500
|
|
DoMoveDamage__0232A500: ; 0x0232A500
|
|
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__0232A500
|
|
|
|
arm_func_start DoMoveSuperpower
|
|
DoMoveSuperpower: ; 0x0232A524
|
|
stmdb sp!, {r4, r5, lr}
|
|
sub sp, sp, #0xc
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r4, #0
|
|
mov r5, r0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r4, #1
|
|
cmp r4, #0
|
|
beq _0232A59C
|
|
ldr r0, _0232A5A8 ; =ATK_STAT_IDX
|
|
mov ip, #0
|
|
ldr r2, [r0]
|
|
str ip, [sp]
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r3, #1
|
|
str r2, [sp, #8]
|
|
str ip, [sp, #4]
|
|
bl LowerOffensiveStat
|
|
add r0, sp, #8
|
|
mov ip, #0
|
|
ldr r2, [r0]
|
|
str ip, [sp]
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r3, #1
|
|
str ip, [sp, #4]
|
|
bl LowerDefensiveStat
|
|
_0232A59C:
|
|
mov r0, r4
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, pc}
|
|
.align 2, 0
|
|
_0232A5A8: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveSuperpower
|
|
|
|
arm_func_start DoMoveSteelWing
|
|
DoMoveSteelWing: ; 0x0232A5AC
|
|
stmdb sp!, {r0, r1, r2, r3}
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
ldr ip, [sp, #0x28]
|
|
mov r3, #0x100
|
|
mov r6, r0
|
|
#ifndef JAPAN
|
|
mov r5, r1
|
|
#endif
|
|
str ip, [sp]
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232A628
|
|
ldr r1, _0232A63C ; =STEEL_WING_BOOST_DEFENSE_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
#ifdef JAPAN
|
|
mov r1, r6
|
|
#else
|
|
mov r1, r5
|
|
#endif
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232A628
|
|
add r0, sp, #0x24
|
|
ldr r2, [r0]
|
|
ldr r5, [r6, #0xb4]
|
|
mov r0, r6
|
|
mov r1, r6
|
|
mov r3, r4
|
|
bl BoostDefensiveStat
|
|
#ifdef JAPAN
|
|
ldrb r0, [r5, #0x107]
|
|
cmp r0, #1
|
|
movlo r0, r4
|
|
strlob r0, [r5, #0x107]
|
|
#else
|
|
ldrb r0, [r5, #0x108]
|
|
cmp r0, #1
|
|
movlo r0, r4
|
|
strlob r0, [r5, #0x108]
|
|
#endif
|
|
_0232A628:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
_0232A63C: .word STEEL_WING_BOOST_DEFENSE_CHANCE
|
|
arm_func_end DoMoveSteelWing
|
|
|
|
arm_func_start DoMoveSpitUp
|
|
DoMoveSpitUp: ; 0x0232A640
|
|
stmdb sp!, {r3, r4, lr}
|
|
sub sp, sp, #4
|
|
ldr r4, [r0, #0xb4]
|
|
#ifdef JAPAN
|
|
ldrb ip, [r4, #0x11a]
|
|
#else
|
|
ldrb ip, [r4, #0x11e]
|
|
#endif
|
|
cmp ip, #0
|
|
beq _0232A670
|
|
str r3, [sp]
|
|
mov r3, ip, lsl #8
|
|
bl DealDamage
|
|
mov r0, #0
|
|
#ifdef JAPAN
|
|
strb r0, [r4, #0x11a]
|
|
#else
|
|
strb r0, [r4, #0x11e]
|
|
#endif
|
|
b _0232A678
|
|
_0232A670:
|
|
ldr r2, _0232A684 ; =0x00000EE5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232A678:
|
|
mov r0, #1
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232A684: .word 0x00000C27
|
|
#else
|
|
_0232A684: .word 0x00000EE5
|
|
#endif
|
|
arm_func_end DoMoveSpitUp
|
|
|
|
arm_func_start DoMoveDynamicPunch
|
|
DoMoveDynamicPunch: ; 0x0232A688
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232A6E0
|
|
mov r2, r4
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232A6E0
|
|
mov r2, #0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl TryInflictConfusedStatus
|
|
_0232A6E0:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
arm_func_end DoMoveDynamicPunch
|
|
|
|
arm_func_start DoMoveKnockOff
|
|
DoMoveKnockOff: ; 0x0232A6EC
|
|
stmdb sp!, {r4, r5, r6, r7, lr}
|
|
sub sp, sp, #0xc
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r0, #0
|
|
mov r1, r7
|
|
mov r2, r0
|
|
ldr r4, [r7, #0xb4]
|
|
ldr r5, [r6, #0xb4]
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r6
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, #0x2c
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActiveMoveEffects__02329F14
|
|
cmp r0, #0
|
|
beq _0232A758
|
|
ldr r2, _0232A820 ; =0x00000EE6
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #0
|
|
b _0232A818
|
|
_0232A758:
|
|
ldrh r0, [r5, #0x62]
|
|
strh r0, [sp, #4]
|
|
ldrh r1, [r5, #0x64]
|
|
ldrb r0, [sp, #4]
|
|
strh r1, [sp, #6]
|
|
ldrh r1, [r5, #0x66]
|
|
tst r0, #1
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
strh r1, [sp, #8]
|
|
tst r0, #0xff
|
|
bne _0232A7A0
|
|
ldr r2, _0232A824 ; =0x00000EE8
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #0
|
|
b _0232A818
|
|
_0232A7A0:
|
|
ldrb r0, [r5, #6]
|
|
cmp r0, #0
|
|
bne _0232A7B4
|
|
add r0, r5, #0x62
|
|
bl RemoveEquivItem
|
|
_0232A7B4:
|
|
add r0, r5, #0x62
|
|
bl ItemZInit
|
|
ldr r2, _0232A828 ; =0x00000EE7
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldrb r1, [r4, #0x4c]
|
|
ldr r0, _0232A82C ; =DIRECTIONS_XY
|
|
ldr r5, _0232A830 ; =DIRECTIONS_XY + 2
|
|
mov r1, r1, lsl #2
|
|
ldrsh r1, [r0, r1]
|
|
add r2, sp, #4
|
|
mov r0, r7
|
|
strh r1, [sp]
|
|
ldrb r4, [r4, #0x4c]
|
|
mov r1, r6
|
|
add r3, sp, #0
|
|
mov r4, r4, lsl #2
|
|
ldrsh r4, [r5, r4]
|
|
strh r4, [sp, #2]
|
|
bl ov29_0232A834
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl ov29_02321164
|
|
mov r0, #1
|
|
_0232A818:
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232A820: .word 0x00000C28
|
|
_0232A824: .word 0x00000C2A
|
|
_0232A828: .word 0x00000C29
|
|
#else
|
|
_0232A820: .word 0x00000EE6
|
|
_0232A824: .word 0x00000EE8
|
|
_0232A828: .word 0x00000EE7
|
|
#endif
|
|
_0232A82C: .word DIRECTIONS_XY
|
|
_0232A830: .word DIRECTIONS_XY + 2
|
|
arm_func_end DoMoveKnockOff
|
|
|
|
arm_func_start ov29_0232A834
|
|
ov29_0232A834: ; 0x0232A834
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
sub sp, sp, #0xc0
|
|
mov r5, #0
|
|
mov r4, r2
|
|
mov ip, #3
|
|
mov r2, #1
|
|
strb r2, [sp, #0x28]
|
|
str ip, [sp, #8]
|
|
strb r5, [sp, #0x2c]
|
|
strb r5, [sp, #0x2a]
|
|
str r4, [sp, #0xbc]
|
|
ldrsh lr, [r1, #4]
|
|
ldrsh ip, [r3]
|
|
mov r5, r0
|
|
mov r2, #0x18
|
|
add r0, lr, ip
|
|
strh r0, [sp, #0xc]
|
|
ldrsh ip, [r1, #6]
|
|
ldrsh r3, [r3, #2]
|
|
add r0, sp, #8
|
|
add r3, ip, r3
|
|
strh r3, [sp, #0xe]
|
|
ldrsh r3, [r1, #4]
|
|
ldrsh r1, [r1, #6]
|
|
smulbb r3, r3, r2
|
|
smulbb r1, r1, r2
|
|
add r2, r1, #4
|
|
add r3, r3, #4
|
|
mov r1, r3, lsl #8
|
|
mov r2, r2, lsl #8
|
|
bl SetEntityPixelPosXY
|
|
mov r0, #0
|
|
add r1, sp, #8
|
|
mov r2, r0
|
|
strh r0, [sp, #0x2e]
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, #0
|
|
str r1, [sp]
|
|
str r1, [sp, #4]
|
|
mov r0, r5
|
|
mov r2, r4
|
|
add r1, sp, #8
|
|
mov r3, #1
|
|
bl SpawnDroppedItem
|
|
add sp, sp, #0xc0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ov29_0232A834
|
|
|
|
arm_func_start DoMoveSplash
|
|
DoMoveSplash: ; 0x0232A8EC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x28
|
|
mov sb, r1
|
|
ldrh r1, [sb, #4]
|
|
mov sl, r0
|
|
mov r8, r2
|
|
strh r1, [sp, #0x24]
|
|
ldrh r4, [sb, #6]
|
|
mov r0, sb
|
|
mov r1, #0xa
|
|
mov r2, #8
|
|
mov r7, r3
|
|
strh r4, [sp, #0x26]
|
|
bl ChangeMonsterAnimation
|
|
mov r4, #3
|
|
mov r5, #0
|
|
mov fp, r4
|
|
b _0232A990
|
|
_0232A934:
|
|
mov r0, r4
|
|
bl DungeonRandInt
|
|
mov r6, r0
|
|
mov r0, fp
|
|
bl DungeonRandInt
|
|
subs r1, r6, #1
|
|
bne _0232A958
|
|
subs r1, r0, #1
|
|
beq _0232A98C
|
|
_0232A958:
|
|
ldrsh r3, [sb, #4]
|
|
sub r1, r6, #1
|
|
sub r2, r0, #1
|
|
add r0, r3, r1
|
|
strh r0, [sp, #0x24]
|
|
ldrsh r3, [sb, #6]
|
|
mov r0, sb
|
|
add r1, sp, #0x24
|
|
add r2, r3, r2
|
|
strh r2, [sp, #0x26]
|
|
bl ov29_022FFB90
|
|
cmp r0, #0
|
|
beq _0232A998
|
|
_0232A98C:
|
|
add r5, r5, #1
|
|
_0232A990:
|
|
cmp r5, #0x28
|
|
blt _0232A934
|
|
_0232A998:
|
|
cmp r5, #0x28
|
|
bne _0232A9B8
|
|
ldr r2, _0232AC38 ; =0x00000EEA
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #0
|
|
b _0232AC30
|
|
_0232A9B8:
|
|
ldrsh r2, [sp, #0x24]
|
|
mov r0, #0x18
|
|
ldr r1, [sb, #0xc]
|
|
smulbb r0, r2, r0
|
|
add r0, r0, #0xc
|
|
rsb r0, r1, r0, lsl #8
|
|
mov r1, #0xc
|
|
bl _s32_div_f
|
|
ldrsh r3, [sp, #0x26]
|
|
mov r1, #0x18
|
|
ldr r2, [sb, #0x10]
|
|
smulbb r1, r3, r1
|
|
add r1, r1, #0x10
|
|
mov r5, r0
|
|
rsb r0, r2, r1, lsl #8
|
|
mov r1, #0xc
|
|
bl _s32_div_f
|
|
mov r4, r0
|
|
add r0, sb, #4
|
|
bl ov29_022E2CA0
|
|
cmp r0, #0
|
|
bne _0232AA20
|
|
add r0, sp, #0x24
|
|
bl ov29_022E2CA0
|
|
cmp r0, #0
|
|
beq _0232AA4C
|
|
_0232AA20:
|
|
mov r6, #0
|
|
mov fp, #0x2c
|
|
_0232AA28:
|
|
mov r0, sb
|
|
mov r1, r5
|
|
mov r2, r4
|
|
bl IncrementEntityPixelPosXY
|
|
mov r0, fp
|
|
bl AdvanceFrame
|
|
add r6, r6, #1
|
|
cmp r6, #0xc
|
|
blt _0232AA28
|
|
_0232AA4C:
|
|
ldrsh r0, [sp, #0x24]
|
|
ldrsh r1, [sp, #0x26]
|
|
bl GetTileSafe
|
|
ldr r6, [r0, #0xc]
|
|
cmp r6, #0
|
|
beq _0232ABC8
|
|
ldr r0, [r6]
|
|
cmp r0, #1
|
|
bne _0232AB5C
|
|
ldr r1, _0232AC3C ; =0x00000163
|
|
add r0, sp, #0x1c
|
|
bl InitMove
|
|
add r1, sp, #0x1c
|
|
mov r0, r6
|
|
bl TwoTurnMoveForcedMiss
|
|
cmp r0, #0
|
|
bne _0232AAD8
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl GetDamageSourceWrapper
|
|
mov r3, #0
|
|
str r3, [sp]
|
|
ldr r1, _0232AC40 ; =ov10_022C44B4
|
|
str r3, [sp, #4]
|
|
mov r2, #3
|
|
str r2, [sp, #8]
|
|
str r0, [sp, #0xc]
|
|
ldrsh r2, [r1]
|
|
str r3, [sp, #0x10]
|
|
mov r0, #1
|
|
str r0, [sp, #0x14]
|
|
mov r0, sl
|
|
mov r1, r6
|
|
str r3, [sp, #0x18]
|
|
bl CalcDamageFixedWrapper
|
|
_0232AAD8:
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
bne _0232AC30
|
|
mov r0, sl
|
|
bl EntityIsValidMoveEffects__0232A3D8
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
beq _0232AC30
|
|
mov r3, #0
|
|
str r3, [sp]
|
|
ldr r0, _0232AC40 ; =ov10_022C44B4
|
|
mov r1, #3
|
|
str r3, [sp, #4]
|
|
str r1, [sp, #8]
|
|
rsb r1, r1, #0x240
|
|
str r1, [sp, #0xc]
|
|
ldrsh r2, [r0]
|
|
str r3, [sp, #0x10]
|
|
str r3, [sp, #0x14]
|
|
mov r0, sl
|
|
mov r1, sl
|
|
str r3, [sp, #0x18]
|
|
bl CalcDamageFixedWrapper
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
bne _0232AC30
|
|
mov r0, sl
|
|
bl EntityIsValidMoveEffects__0232A3D8
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
beq _0232AC30
|
|
_0232AB5C:
|
|
mov r0, sb
|
|
bl EntityIsValidMoveEffects__0232A3D8
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
beq _0232AC30
|
|
add r0, sb, #4
|
|
bl ov29_022E2CA0
|
|
cmp r0, #0
|
|
bne _0232AB90
|
|
add r0, sp, #0x24
|
|
bl ov29_022E2CA0
|
|
cmp r0, #0
|
|
beq _0232ABDC
|
|
_0232AB90:
|
|
rsb r6, r4, #0
|
|
rsb r5, r5, #0
|
|
mov r7, #0
|
|
mov r4, #0x2c
|
|
_0232ABA0:
|
|
mov r0, sb
|
|
mov r1, r5
|
|
mov r2, r6
|
|
bl IncrementEntityPixelPosXY
|
|
mov r0, r4
|
|
bl AdvanceFrame
|
|
add r7, r7, #1
|
|
cmp r7, #0xc
|
|
blt _0232ABA0
|
|
b _0232ABDC
|
|
_0232ABC8:
|
|
ldrsh r1, [sp, #0x24]
|
|
ldrsh r2, [sp, #0x26]
|
|
mov r0, sb
|
|
mov r3, #0
|
|
bl MoveMonsterToPos
|
|
_0232ABDC:
|
|
mov r0, sb
|
|
bl EntityIsValidMoveEffects__0232A3D8
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
beq _0232AC30
|
|
mov r0, sb
|
|
mov r1, #0
|
|
bl UpdateEntityPixelPos
|
|
mov r0, sb
|
|
mov r1, #0xe
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _0232AC24
|
|
#ifndef JAPAN
|
|
mov r0, sb
|
|
bl ov29_02321260
|
|
#endif
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl ov29_02321164
|
|
_0232AC24:
|
|
mov r0, sb
|
|
bl ov29_02321260
|
|
mov r0, #1
|
|
_0232AC30:
|
|
add sp, sp, #0x28
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232AC38: .word 0x00000C2C
|
|
#else
|
|
_0232AC38: .word 0x00000EEA
|
|
#endif
|
|
_0232AC3C: .word 0x00000163
|
|
_0232AC40: .word ov10_022C44B4
|
|
arm_func_end DoMoveSplash
|
|
|
|
arm_func_start DoMoveSetDamage
|
|
DoMoveSetDamage: ; 0x0232AC44
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictSetDamageStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveSetDamage
|
|
|
|
arm_func_start DoMoveBellyDrum
|
|
DoMoveBellyDrum: ; 0x0232AC54
|
|
#ifdef JAPAN
|
|
#define DO_MOVE_BELLY_DRUM_OFFSET -4
|
|
#else
|
|
#define DO_MOVE_BELLY_DRUM_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
ldr r5, [r7, #0xb4]
|
|
sub r3, sp, #4
|
|
add r0, r5, #0x100
|
|
ldrh r2, [r0, #0x46 + DO_MOVE_BELLY_DRUM_OFFSET]
|
|
mov r6, r1
|
|
mov r4, #0
|
|
strh r2, [r3]
|
|
ldrh r0, [r0, #0x48 + DO_MOVE_BELLY_DRUM_OFFSET]
|
|
strh r0, [r3, #2]
|
|
ldr r0, [r3]
|
|
bl CeilFixedPoint
|
|
cmp r0, #1
|
|
ble _0232ACD8
|
|
ldr r1, _0232AD00 ; =ATK_STAT_IDX
|
|
mov r0, r7
|
|
ldr r2, [r1]
|
|
mov r1, r6
|
|
mov r3, #0x63
|
|
bl BoostOffensiveStat
|
|
mov r0, #1
|
|
bl sub_02050FF8
|
|
strh r0, [sp]
|
|
mov r0, r0, lsr #0x10
|
|
strh r0, [sp, #2]
|
|
ldrh r2, [sp]
|
|
add r0, r5, #0x100
|
|
ldrh r1, [sp, #2]
|
|
strh r2, [r0, #0x46 + DO_MOVE_BELLY_DRUM_OFFSET]
|
|
mov r4, #1
|
|
strh r1, [r0, #0x48 + DO_MOVE_BELLY_DRUM_OFFSET]
|
|
b _0232ACF8
|
|
_0232ACD8:
|
|
mov r0, r4
|
|
mov r1, r7
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _0232AD04 ; =0x00000EEB
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232ACF8:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0232AD00: .word ATK_STAT_IDX
|
|
#ifdef JAPAN
|
|
_0232AD04: .word 0x00000C2D
|
|
#else
|
|
_0232AD04: .word 0x00000EEB
|
|
#endif
|
|
arm_func_end DoMoveBellyDrum
|
|
|
|
arm_func_start DoMoveLightScreen
|
|
DoMoveLightScreen: ; 0x0232AD08
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictLightScreenStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveLightScreen
|
|
|
|
arm_func_start DoMoveSecretPower
|
|
DoMoveSecretPower: ; 0x0232AD18
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #8
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232AED0
|
|
ldr r1, _0232AEDC ; =SECRET_POWER_EFFECT_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232AED0
|
|
ldr r0, _0232AEE0 ; =DUNGEON_PTR
|
|
mov r1, #0xc
|
|
ldr r0, [r0]
|
|
ldr r2, _0232AEE4 ; =ov10_022C6321
|
|
add r0, r0, #0x4000
|
|
#ifdef JAPAN
|
|
ldrsh r0, [r0, #0x30]
|
|
#else
|
|
ldrsh r0, [r0, #0xd4]
|
|
#endif
|
|
smulbb r0, r0, r1
|
|
ldrb r0, [r2, r0]
|
|
cmp r0, #9
|
|
addls pc, pc, r0, lsl #2
|
|
b _0232AEBC
|
|
_0232AD8C: ; jump table
|
|
b _0232ADB4 ; case 0
|
|
b _0232ADCC ; case 1
|
|
b _0232ADF4 ; case 2
|
|
b _0232AE0C ; case 3
|
|
b _0232AE34 ; case 4
|
|
b _0232AE5C ; case 5
|
|
b _0232AE78 ; case 6
|
|
b _0232AE90 ; case 7
|
|
b _0232AEA8 ; case 8
|
|
b _0232AEBC ; case 9
|
|
_0232ADB4:
|
|
mov r2, #0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl TryInflictPoisonedStatus
|
|
b _0232AED0
|
|
_0232ADCC:
|
|
ldr r1, _0232AEE8 ; =SLEEP_TURN_RANGE
|
|
mov r0, r5
|
|
mov r2, r4
|
|
bl CalcStatusDuration
|
|
mov r2, r0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, #0
|
|
bl TryInflictSleepStatus
|
|
b _0232AED0
|
|
_0232ADF4:
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, r4
|
|
mov r3, #0
|
|
bl LowerSpeed
|
|
b _0232AED0
|
|
_0232AE0C:
|
|
ldr r0, _0232AEEC ; =ATK_STAT_IDX
|
|
mov r3, r4
|
|
ldr r2, [r0]
|
|
mov r1, r5
|
|
mov r0, r6
|
|
str r3, [sp]
|
|
mov r5, #0
|
|
str r5, [sp, #4]
|
|
bl LowerOffensiveStat
|
|
b _0232AED0
|
|
_0232AE34:
|
|
ldr r0, _0232AEEC ; =ATK_STAT_IDX
|
|
mov r3, r4
|
|
ldr r2, [r0]
|
|
mov r1, r5
|
|
mov r0, r6
|
|
str r3, [sp]
|
|
mov r5, #0
|
|
str r5, [sp, #4]
|
|
bl LowerDefensiveStat
|
|
b _0232AED0
|
|
_0232AE5C:
|
|
ldr r1, _0232AEEC ; =ATK_STAT_IDX
|
|
mov r0, r6
|
|
ldr r2, [r1]
|
|
mov r1, r5
|
|
mov r3, #0
|
|
bl LowerHitChanceStat
|
|
b _0232AED0
|
|
_0232AE78:
|
|
mov r2, #0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl TryInflictConfusedStatus
|
|
b _0232AED0
|
|
_0232AE90:
|
|
mov r2, #0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl TryInflictCringeStatus
|
|
b _0232AED0
|
|
_0232AEA8:
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0
|
|
bl TryInflictFrozenStatus
|
|
b _0232AED0
|
|
_0232AEBC:
|
|
mov r2, #0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl TryInflictParalysisStatus
|
|
_0232AED0:
|
|
mov r0, r4
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0232AEDC: .word SECRET_POWER_EFFECT_CHANCE
|
|
_0232AEE0: .word DUNGEON_PTR
|
|
_0232AEE4: .word ov10_022C6321
|
|
_0232AEE8: .word SLEEP_TURN_RANGE
|
|
_0232AEEC: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveSecretPower
|
|
|
|
arm_func_start DoMoveDamageConfuse30
|
|
DoMoveDamageConfuse30: ; 0x0232AEF0
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232AF4C
|
|
ldr r1, _0232AF58 ; =DIZZY_PUNCH_CONFUSE_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232AF4C
|
|
mov r2, #0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl TryInflictConfusedStatus
|
|
_0232AF4C:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0232AF58: .word DIZZY_PUNCH_CONFUSE_CHANCE
|
|
arm_func_end DoMoveDamageConfuse30
|
|
|
|
arm_func_start DoMoveBulkUp
|
|
DoMoveBulkUp: ; 0x0232AF5C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r2, _0232AF9C ; =ATK_STAT_IDX
|
|
mov r3, #1
|
|
ldr r2, [r2]
|
|
mov r5, r0
|
|
mov r4, r1
|
|
str r2, [sp]
|
|
bl BoostOffensiveStat
|
|
add r1, sp, #0
|
|
ldr r2, [r1]
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r3, #1
|
|
bl BoostDefensiveStat
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232AF9C: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveBulkUp
|
|
|
|
arm_func_start DoMovePause
|
|
DoMovePause: ; 0x0232AFA0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
sub sp, sp, #8
|
|
mov r4, r1
|
|
mov r5, r0
|
|
ldr r1, _0232AFEC ; =IMPRISON_TURN_RANGE
|
|
mov r0, r4
|
|
mov r2, #1
|
|
bl CalcStatusDuration
|
|
mov r2, #1
|
|
mov r3, r0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
str r2, [sp]
|
|
mov ip, #0
|
|
str ip, [sp, #4]
|
|
bl TryInflictPausedStatus
|
|
mov r0, #1
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232AFEC: .word IMPRISON_TURN_RANGE
|
|
arm_func_end DoMovePause
|
|
|
|
arm_func_start DoMoveFeatherDance
|
|
DoMoveFeatherDance: ; 0x0232AFF0
|
|
stmdb sp!, {r3, lr}
|
|
sub sp, sp, #8
|
|
ldr r2, _0232B020 ; =ATK_STAT_IDX
|
|
mov ip, #1
|
|
ldr r2, [r2]
|
|
str ip, [sp]
|
|
mov r3, #2
|
|
str ip, [sp, #4]
|
|
bl LowerOffensiveStat
|
|
mov r0, #1
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0232B020: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveFeatherDance
|
|
|
|
arm_func_start DoMoveBeatUp
|
|
DoMoveBeatUp: ; 0x0232B024
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sl, r0
|
|
ldr r8, [sl, #0xb4]
|
|
mov fp, r1
|
|
ldrb r0, [r8, #6]
|
|
mov r4, #0
|
|
mov r5, #0
|
|
cmp r0, #0
|
|
ldrne r0, _0232B110 ; =DUNGEON_PTR
|
|
movne r6, #0x10
|
|
ldrne r0, [r0]
|
|
moveq r6, #4
|
|
#ifdef JAPAN
|
|
addne r0, r0, #0x294
|
|
ldreq r0, _0232B110 ; =DUNGEON_PTR
|
|
ldreq r0, [r0]
|
|
addeq r0, r0, #0x284
|
|
#else
|
|
addne r0, r0, #0x338
|
|
ldreq r0, _0232B110 ; =DUNGEON_PTR
|
|
ldreq r0, [r0]
|
|
addeq r0, r0, #0x328
|
|
#endif
|
|
add r7, r0, #0x12800
|
|
b _0232B0E8
|
|
_0232B06C:
|
|
ldr sb, [r7, r5, lsl #2]
|
|
mov r0, sb
|
|
bl EntityIsValidMoveEffects__0232A3D8
|
|
cmp r0, #0
|
|
cmpne sl, sb
|
|
beq _0232B0E4
|
|
mov r2, #0
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r3, r2
|
|
bl GetTreatmentBetweenMonsters
|
|
cmp r0, #0
|
|
bne _0232B0E4
|
|
ldr r0, [sb, #0xb4]
|
|
ldrb r1, [r0, #0xbc]
|
|
cmp r1, #7
|
|
beq _0232B0E4
|
|
bl IsExperienceLocked
|
|
cmp r0, #0
|
|
bne _0232B0E4
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #2
|
|
add r3, fp, #4
|
|
bl TryWarp
|
|
#ifdef JAPAN
|
|
ldrb r0, [r8, #0x107]
|
|
#else
|
|
ldrb r0, [r8, #0x108]
|
|
#endif
|
|
mov r4, #1
|
|
cmp r0, #1
|
|
movlo r0, r4
|
|
#ifdef JAPAN
|
|
strlob r0, [r8, #0x107]
|
|
#else
|
|
strlob r0, [r8, #0x108]
|
|
#endif
|
|
_0232B0E4:
|
|
add r5, r5, #1
|
|
_0232B0E8:
|
|
cmp r5, r6
|
|
blt _0232B06C
|
|
cmp r4, #0
|
|
bne _0232B108
|
|
ldr r2, _0232B114 ; =0x00000EEC
|
|
mov r0, sl
|
|
mov r1, fp
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232B108:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0232B110: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_0232B114: .word 0x00000C2E
|
|
#else
|
|
_0232B114: .word 0x00000EEC
|
|
#endif
|
|
arm_func_end DoMoveBeatUp
|
|
|
|
arm_func_start DoMoveBlastBurn
|
|
DoMoveBlastBurn: ; 0x0232B118
|
|
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 EndFrozenStatus
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, r6
|
|
mov r3, #0x200
|
|
str r5, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r4, #1
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
arm_func_end DoMoveBlastBurn
|
|
|
|
arm_func_start DoMoveCrushClaw
|
|
DoMoveCrushClaw: ; 0x0232B164
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #8
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232B1D0
|
|
ldr r1, _0232B1DC ; =CRUSH_CLAW_LOWER_DEFENSE_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232B1D0
|
|
ldr r0, _0232B1E0 ; =ATK_STAT_IDX
|
|
mov r3, r4
|
|
ldr r2, [r0]
|
|
mov r0, r6
|
|
mov r1, r5
|
|
str r3, [sp]
|
|
mov ip, #0
|
|
str ip, [sp, #4]
|
|
bl LowerDefensiveStat
|
|
_0232B1D0:
|
|
mov r0, r4
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0232B1DC: .word CRUSH_CLAW_LOWER_DEFENSE_CHANCE
|
|
_0232B1E0: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveCrushClaw
|
|
|
|
arm_func_start DoMoveBlazeKick
|
|
DoMoveBlazeKick: ; 0x0232B1E4
|
|
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 EndFrozenStatus
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, r6
|
|
mov r3, #0x100
|
|
str r5, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232B25C
|
|
ldr r1, _0232B268 ; =BLAZE_KICK_BURN_CHANCE
|
|
mov r0, r8
|
|
ldrsh r2, [r1]
|
|
mov r1, r7
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232B25C
|
|
mov r2, #0
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r3, r2
|
|
str r2, [sp]
|
|
bl TryInflictBurnStatus
|
|
_0232B25C:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_0232B268: .word BLAZE_KICK_BURN_CHANCE
|
|
arm_func_end DoMoveBlazeKick
|
|
|
|
arm_func_start DoMovePresent
|
|
DoMovePresent: ; 0x0232B26C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r5, r0
|
|
mov r0, #0x64
|
|
mov r4, r1
|
|
mov r7, r2
|
|
mov r6, r3
|
|
bl DungeonRandInt
|
|
cmp r0, #0xa
|
|
bge _0232B2BC
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, r7
|
|
mov r3, #0x4b
|
|
str r6, [sp]
|
|
bl ov29_02332F18
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0232B2BC:
|
|
cmp r0, #0x1e
|
|
bge _0232B30C
|
|
ldr r1, [r4, #0xb4]
|
|
ldr r0, _0232B364 ; =0x000003E7
|
|
ldrsh r2, [r1, #0x12]
|
|
ldrsh r1, [r1, #0x16]
|
|
mov ip, #1
|
|
mov r3, #0
|
|
add r1, r2, r1
|
|
cmp r1, r0
|
|
movgt r1, r0
|
|
mov r0, r1, asr #1
|
|
add r2, r1, r0, lsr #30
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, r2, asr #2
|
|
str ip, [sp]
|
|
bl TryIncreaseHp
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0232B30C:
|
|
cmp r0, #0x3c
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bge _0232B340
|
|
mov r2, r7
|
|
mov r3, #0x32
|
|
str r6, [sp]
|
|
bl ov29_02332F18
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0232B340:
|
|
mov r2, r7
|
|
mov r3, #0x19
|
|
str r6, [sp]
|
|
bl ov29_02332F18
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0232B364: .word 0x000003E7
|
|
arm_func_end DoMovePresent
|
|
|
|
arm_func_start DoMoveEruption
|
|
DoMoveEruption: ; 0x0232B368
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r5, r2
|
|
mov r4, r3
|
|
bl EndFrozenStatus
|
|
ldr r2, [r7, #0xb4]
|
|
ldr r3, _0232B42C ; =0x000003E7
|
|
ldrsh r1, [r2, #0x12]
|
|
ldrsh r0, [r2, #0x16]
|
|
add r1, r1, r0
|
|
cmp r1, r3
|
|
movle r3, r1
|
|
ldrsh r0, [r2, #0x10]
|
|
mov r2, r3, asr #1
|
|
add r2, r3, r2, lsr #30
|
|
cmp r0, r2, asr #2
|
|
movle r2, #0
|
|
ble _0232B3FC
|
|
ldr r2, _0232B42C ; =0x000003E7
|
|
cmp r1, r2
|
|
movle r2, r1
|
|
mov r3, r2, lsl #1
|
|
mov r2, r3, asr #1
|
|
add r2, r3, r2, lsr #30
|
|
cmp r0, r2, asr #2
|
|
movle r2, #1
|
|
ble _0232B3FC
|
|
ldr r2, _0232B42C ; =0x000003E7
|
|
cmp r1, r2
|
|
movgt r1, r2
|
|
add r2, r1, r1, lsl #1
|
|
mov r1, r2, asr #1
|
|
add r1, r2, r1, lsr #30
|
|
cmp r0, r1, asr #2
|
|
movle r2, #2
|
|
movgt r2, #3
|
|
_0232B3FC:
|
|
ldr r1, _0232B430 ; =ERUPTION_DAMAGE_MULT_TABLE
|
|
mov r0, r7
|
|
ldr r3, [r1, r2, lsl #2]
|
|
mov r1, r6
|
|
mov r2, r5
|
|
str r4, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0232B42C: .word 0x000003E7
|
|
_0232B430: .word ERUPTION_DAMAGE_MULT_TABLE
|
|
arm_func_end DoMoveEruption
|
|
|
|
arm_func_start DoMoveParalyze__0232B434
|
|
DoMoveParalyze__0232B434: ; 0x0232B434
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl TryInflictParalysisStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveParalyze__0232B434
|
|
|
|
arm_func_start DoMoveTransform
|
|
DoMoveTransform: ; 0x0232B44C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl IsFullFloorFixedRoom
|
|
cmp r0, #0
|
|
beq _0232B47C
|
|
ldr r2, _0232B490 ; =0x00000EED
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_0232B47C:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl TryTransform
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232B490: .word 0x00000C2F
|
|
#else
|
|
_0232B490: .word 0x00000EED
|
|
#endif
|
|
arm_func_end DoMoveTransform
|
|
|
|
arm_func_start DoMovePoisonTail
|
|
DoMovePoisonTail: ; 0x0232B494
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232B4F0
|
|
ldr r1, _0232B4FC ; =POISON_TAIL_POISON_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232B4F0
|
|
mov r2, #0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl TryInflictPoisonedStatus
|
|
_0232B4F0:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0232B4FC: .word POISON_TAIL_POISON_CHANCE
|
|
arm_func_end DoMovePoisonTail
|
|
|
|
arm_func_start DoMoveBlowback
|
|
DoMoveBlowback: ; 0x0232B500
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, [r0, #0xb4]
|
|
ldrb r2, [r2, #0x4c]
|
|
bl TryBlowAway
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveBlowback
|
|
|
|
arm_func_start DoMoveCamouflage
|
|
DoMoveCamouflage: ; 0x0232B518
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
ldr r0, _0232B5B8 ; =DUNGEON_PTR
|
|
mov r2, #0xc
|
|
ldr r0, [r0]
|
|
ldr r3, _0232B5BC ; =ov10_022C6322
|
|
add r0, r0, #0x4000
|
|
#ifdef JAPAN
|
|
ldrsh ip, [r0, #0x30]
|
|
#else
|
|
ldrsh ip, [r0, #0xd4]
|
|
#endif
|
|
mov r0, r4
|
|
mov r1, #0x25
|
|
smulbb r2, ip, r2
|
|
ldr r7, [r4, #0xb4]
|
|
ldrb r6, [r3, r2]
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0232B578
|
|
ldr r2, _0232B5C0 ; =0x00000DC3
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0232B578:
|
|
strb r6, [r7, #0x5e]
|
|
mov r2, #0
|
|
mov r1, r4
|
|
strb r2, [r7, #0x5f]
|
|
mov r0, #1
|
|
strb r0, [r7, #0xff]
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r6
|
|
mov r0, #0
|
|
bl SetPreprocessorArgsIdVal
|
|
#ifdef JAPAN
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0xc30
|
|
#else
|
|
ldr r2, _0232B5C4 ; =0x00000EEE
|
|
mov r0, r5
|
|
mov r1, r4
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0232B5B8: .word DUNGEON_PTR
|
|
_0232B5BC: .word ov10_022C6322
|
|
#ifdef JAPAN
|
|
_0232B5C0: .word 0x00000B03
|
|
#else
|
|
_0232B5C0: .word 0x00000DC3
|
|
_0232B5C4: .word 0x00000EEE
|
|
#endif
|
|
arm_func_end DoMoveCamouflage
|
|
|
|
arm_func_start DoMoveTailGlow
|
|
DoMoveTailGlow: ; 0x0232B5C8
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _0232B5E4 ; =SPATK_STAT_IDX
|
|
mov r3, #2
|
|
ldr r2, [r2]
|
|
bl BoostOffensiveStat
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0232B5E4: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveTailGlow
|
|
|
|
arm_func_start DoMoveDamageConstrict10
|
|
DoMoveDamageConstrict10: ; 0x0232B5E8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r5, r2
|
|
ldrh ip, [r5, #4]
|
|
ldr r2, _0232B69C ; =0x00000123
|
|
mov r7, r0
|
|
cmp ip, r2
|
|
mov r6, r1
|
|
mov r4, r3
|
|
mov r8, #0
|
|
cmpne ip, #0x20c
|
|
bne _0232B628
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl EndFrozenStatus
|
|
mov sb, #0x13c
|
|
b _0232B640
|
|
_0232B628:
|
|
cmp ip, #0x45
|
|
moveq sb, #0x75
|
|
beq _0232B640
|
|
cmp ip, #0x7d
|
|
moveq sb, #0x7e
|
|
movne sb, #0xf1
|
|
_0232B640:
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
mov r3, #0x100
|
|
str r4, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232B694
|
|
ldr r1, _0232B6A0 ; =WHIRLPOOL_CONSTRICTION_CHANCE
|
|
mov r0, r7
|
|
ldrsh r2, [r1]
|
|
mov r1, r6
|
|
mov r8, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232B694
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, sb
|
|
mov r3, #0
|
|
bl TryInflictConstrictionStatus
|
|
_0232B694:
|
|
mov r0, r8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_0232B69C: .word 0x00000123
|
|
_0232B6A0: .word WHIRLPOOL_CONSTRICTION_CHANCE
|
|
arm_func_end DoMoveDamageConstrict10
|
|
|
|
arm_func_start DoMovePerishSong
|
|
DoMovePerishSong: ; 0x0232B6A4
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #0
|
|
bl TryInflictPerishSongStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMovePerishSong
|
|
|
|
arm_func_start DoMoveWrap
|
|
DoMoveWrap: ; 0x0232B6B8
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictWrappedStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveWrap
|
|
|
|
arm_func_start DoMoveSpikes
|
|
DoMoveSpikes: ; 0x0232B6C8
|
|
#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, #0x13
|
|
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 _0232B718
|
|
mov r2, r5
|
|
add r0, r7, #4
|
|
mov r1, #0x13
|
|
#endif
|
|
mov r3, #1
|
|
bl TrySpawnTrap
|
|
cmp r0, #0
|
|
movne r4, #1
|
|
bne _0232B728
|
|
_0232B718:
|
|
ldr r2, _0232B734 ; =0x00000EEF
|
|
#ifdef JAPAN
|
|
mov r0, r6
|
|
mov r1, r5
|
|
#else
|
|
mov r0, r7
|
|
mov r1, r6
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232B728:
|
|
bl UpdateTrapsVisibility
|
|
mov r0, r4
|
|
#ifdef JAPAN
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0232B734: .word 0x00000C31
|
|
#else
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0232B734: .word 0x00000EEF
|
|
#endif
|
|
arm_func_end DoMoveSpikes
|
|
|
|
arm_func_start DoMoveMagnitude
|
|
DoMoveMagnitude: ; 0x0232B738
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
ldr r4, _0232B7B0 ; =ov29_0237CA84
|
|
ldr r5, _0232B7B4 ; =DUNGEON_PTR
|
|
ldr ip, [r4]
|
|
ldr r6, _0232B7B8 ; =ov29_02352B1C
|
|
ldr r4, [r5]
|
|
ldr r6, [r6, ip, lsl #2]
|
|
ldr lr, [r1, #0xb4]
|
|
add r4, r4, #0x1a000
|
|
#ifdef JAPAN
|
|
str r6, [r4, #0x190]
|
|
#else
|
|
str r6, [r4, #0x234]
|
|
#endif
|
|
ldr r4, [r5]
|
|
mov r5, #0
|
|
add r4, r4, #0x1a000
|
|
#ifdef JAPAN
|
|
str r5, [r4, #0x194]
|
|
#else
|
|
str r5, [r4, #0x238]
|
|
#endif
|
|
ldrb r4, [lr, #0xd2]
|
|
ldr r5, _0232B7BC ; =ov10_022C4924
|
|
mov ip, ip, lsl #1
|
|
cmp r4, #0xa
|
|
ldrsh r4, [r5, ip]
|
|
str r3, [sp]
|
|
moveq r4, r4, lsl #1
|
|
mov r3, r4
|
|
bl ov29_02332F18
|
|
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
|
|
_0232B7B0: .word ov29_0237CA84
|
|
_0232B7B4: .word DUNGEON_PTR
|
|
_0232B7B8: .word ov29_02352B1C
|
|
_0232B7BC: .word ov10_022C4924
|
|
arm_func_end DoMoveMagnitude
|
|
|
|
arm_func_start DoMoveMagicCoat
|
|
DoMoveMagicCoat: ; 0x0232B7C0
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictMagicCoatStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveMagicCoat
|
|
|
|
arm_func_start DoMoveProtect
|
|
DoMoveProtect: ; 0x0232B7D0
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictProtectStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveProtect
|
|
|
|
arm_func_start DoMoveDefenseCurl
|
|
DoMoveDefenseCurl: ; 0x0232B7E0
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _0232B7FC ; =ATK_STAT_IDX
|
|
mov r3, #1
|
|
ldr r2, [r2]
|
|
bl BoostDefensiveStat
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0232B7FC: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveDefenseCurl
|
|
|
|
arm_func_start DoMoveDecoy
|
|
DoMoveDecoy: ; 0x0232B800
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov ip, #0
|
|
mov r3, r2
|
|
str ip, [sp]
|
|
bl TryInflictDecoyStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveDecoy
|
|
|
|
arm_func_start DoMoveMistBall
|
|
DoMoveMistBall: ; 0x0232B820
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #8
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232B88C
|
|
ldr r1, _0232B898 ; =MIST_BALL_LOWER_SPECIAL_ATTACK_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232B88C
|
|
ldr r0, _0232B89C ; =SPATK_STAT_IDX
|
|
mov r3, r4
|
|
ldr r2, [r0]
|
|
mov r0, r6
|
|
mov r1, r5
|
|
str r3, [sp]
|
|
mov ip, #0
|
|
str ip, [sp, #4]
|
|
bl LowerOffensiveStat
|
|
_0232B88C:
|
|
mov r0, r4
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0232B898: .word MIST_BALL_LOWER_SPECIAL_ATTACK_CHANCE
|
|
_0232B89C: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveMistBall
|
|
|
|
arm_func_start DoMoveDestinyBond
|
|
DoMoveDestinyBond: ; 0x0232B8A0
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictDestinyBondStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveDestinyBond
|
|
|
|
arm_func_start DoMoveDamage__0232B8B0
|
|
DoMoveDamage__0232B8B0: ; 0x0232B8B0
|
|
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__0232B8B0
|
|
|
|
arm_func_start DoMoveMirrorCoat
|
|
DoMoveMirrorCoat: ; 0x0232B8D4
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictMirrorCoatStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveMirrorCoat
|
|
|
|
arm_func_start DoMoveCalmMind
|
|
DoMoveCalmMind: ; 0x0232B8E4
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r2, _0232B924 ; =SPATK_STAT_IDX
|
|
mov r3, #1
|
|
ldr r2, [r2]
|
|
mov r5, r0
|
|
mov r4, r1
|
|
str r2, [sp]
|
|
bl BoostOffensiveStat
|
|
add r1, sp, #0
|
|
ldr r2, [r1]
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r3, #1
|
|
bl BoostDefensiveStat
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232B924: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveCalmMind
|
|
|
|
arm_func_start DoMoveHiddenPower
|
|
DoMoveHiddenPower: ; 0x0232B928
|
|
stmdb sp!, {r3, lr}
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
bl DealDamage
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveHiddenPower
|
|
|
|
arm_func_start DoMoveMetalClaw
|
|
DoMoveMetalClaw: ; 0x0232B940
|
|
stmdb sp!, {r0, r1, r2, r3}
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
ldr ip, [sp, #0x28]
|
|
mov r3, #0x100
|
|
mov r6, r0
|
|
#ifdef EUROPE
|
|
mov r5, r1
|
|
#endif
|
|
str ip, [sp]
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232B9B8
|
|
ldr r1, _0232B9CC ; =METAL_CLAW_BOOST_ATTACK_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
#ifdef EUROPE
|
|
mov r1, r5
|
|
#else
|
|
mov r1, r6
|
|
#endif
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232B9B8
|
|
add r0, sp, #0x24
|
|
ldr r2, [r0]
|
|
ldr r5, [r6, #0xb4]
|
|
mov r0, r6
|
|
mov r1, r6
|
|
mov r3, r4
|
|
bl BoostOffensiveStat
|
|
#ifdef JAPAN
|
|
ldrb r0, [r5, #0x107]
|
|
cmp r0, #1
|
|
movlo r0, r4
|
|
strlob r0, [r5, #0x107]
|
|
#else
|
|
ldrb r0, [r5, #0x108]
|
|
cmp r0, #1
|
|
movlo r0, r4
|
|
strlob r0, [r5, #0x108]
|
|
#endif
|
|
_0232B9B8:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
_0232B9CC: .word METAL_CLAW_BOOST_ATTACK_CHANCE
|
|
arm_func_end DoMoveMetalClaw
|
|
|
|
arm_func_start DoMoveAttract
|
|
DoMoveAttract: ; 0x0232B9D0
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
ldr r0, [r6, #0xb4]
|
|
ldr r1, [r5, #0xb4]
|
|
ldrsh r0, [r0, #2]
|
|
ldrsh r1, [r1, #2]
|
|
mov r4, #0
|
|
bl GendersNotEqualNotGenderless
|
|
cmp r0, #0
|
|
beq _0232BA14
|
|
mov r4, #1
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, r4
|
|
mov r3, #0
|
|
bl TryInflictInfatuatedStatus
|
|
_0232BA14:
|
|
cmp r4, #0
|
|
bne _0232BA3C
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
#ifdef JAPAN
|
|
ldr r2, _0232CE90 ; =0x00000C52
|
|
mov r0, r6
|
|
mov r1, r5
|
|
#else
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0xf10
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232BA3C:
|
|
mov r0, r4
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232CE90: .word 0x00000C52
|
|
#endif
|
|
arm_func_end DoMoveAttract
|
|
|
|
arm_func_start DoMoveCopycat
|
|
DoMoveCopycat: ; 0x0232BA44
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sl, r0
|
|
mov r0, r1
|
|
ldr r0, [r0, #0xb4]
|
|
mov r7, #0
|
|
#ifdef JAPAN
|
|
add r4, r0, #0x120
|
|
#else
|
|
add r4, r0, #0x124
|
|
#endif
|
|
ldr r0, _0232BB44 ; =0x0000020D
|
|
ldr sb, [sl, #0xb4]
|
|
str r1, [sp]
|
|
mov r6, r7
|
|
mov r5, r7
|
|
sub fp, r0, #0xc6
|
|
_0232BA74:
|
|
ldrb r0, [r4, r5, lsl #3]
|
|
add r8, r4, r5, lsl #3
|
|
tst r0, #1
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _0232BAE0
|
|
ldrh r1, [r8, #4]
|
|
mov r0, sl
|
|
bl ov29_02324D60
|
|
cmp r0, #0
|
|
bne _0232BAE0
|
|
ldrh r1, [r8, #4]
|
|
cmp r1, fp
|
|
cmpne r1, #0xe5
|
|
cmpne r1, #0x8a
|
|
cmpne r1, #0x28
|
|
cmpne r1, #0x11
|
|
ldrne r0, _0232BB44 ; =0x0000020D
|
|
cmpne r1, r0
|
|
beq _0232BAE0
|
|
ldrb r0, [r8]
|
|
tst r0, #0x10
|
|
addne r0, sb, r6, lsl #1
|
|
addne r0, r0, #0x100
|
|
#ifdef JAPAN
|
|
strneh r1, [r0, #0x90]
|
|
#else
|
|
strneh r1, [r0, #0x94]
|
|
#endif
|
|
addne r6, r6, #1
|
|
_0232BAE0:
|
|
add r5, r5, #1
|
|
cmp r5, #4
|
|
blt _0232BA74
|
|
mov r0, #0
|
|
mov r1, sl
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
cmp r6, #0
|
|
beq _0232BB2C
|
|
#ifdef JAPAN
|
|
ldrb r0, [sb, #0x107]
|
|
ldr r2, _0232CF98 ; =0x00000C32
|
|
ldr r1, [sp]
|
|
cmp r0, #1
|
|
movlo r0, #1
|
|
strlob r0, [sb, #0x107]
|
|
#else
|
|
ldrb r0, [sb, #0x108]
|
|
ldr r1, [sp]
|
|
mov r2, #0xef0
|
|
cmp r0, #1
|
|
movlo r0, #1
|
|
strlob r0, [sb, #0x108]
|
|
#endif
|
|
mov r0, sl
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r7, #1
|
|
b _0232BB3C
|
|
_0232BB2C:
|
|
ldr r2, _0232BB48 ; =0x00000EF1
|
|
ldr r1, [sp]
|
|
mov r0, sl
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232BB3C:
|
|
mov r0, r7
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0232BB44: .word 0x0000020D
|
|
#ifdef JAPAN
|
|
_0232CF98: .word 0x00000C32
|
|
_0232BB48: .word 0x00000C33
|
|
#else
|
|
_0232BB48: .word 0x00000EF1
|
|
#endif
|
|
arm_func_end DoMoveCopycat
|
|
|
|
arm_func_start DoMoveFrustration
|
|
DoMoveFrustration: ; 0x0232BB4C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #0x20
|
|
mov r7, #0
|
|
mov r6, r0
|
|
strb r7, [sp, #0x1c]
|
|
mov sl, r3
|
|
mov r5, r1
|
|
mov r4, r2
|
|
ldr ip, [r6, #0xb4]
|
|
mov sb, #1
|
|
ldr r3, _0232BC28 ; =ov10_022C4C3C
|
|
ldr r0, _0232BC2C ; =0x000003E7
|
|
b _0232BBA8
|
|
_0232BB80:
|
|
mov r8, r7, lsl #2
|
|
ldrsh r2, [r3, r8]
|
|
cmp r2, #0
|
|
blt _0232BBB0
|
|
ldrsh r1, [ip, #0xe]
|
|
cmp r1, r2
|
|
ldrlt r0, _0232BC30 ; =ov10_022C4C3E
|
|
ldrltsh sb, [r0, r8]
|
|
blt _0232BBB0
|
|
add r7, r7, #1
|
|
_0232BBA8:
|
|
cmp r7, r0
|
|
blt _0232BB80
|
|
_0232BBB0:
|
|
mov r0, r4
|
|
bl GetMoveType
|
|
mov r8, r0
|
|
ldrh r0, [r4, #4]
|
|
bl GetMoveCategory
|
|
mov r7, r0
|
|
mov r1, sl
|
|
mov r0, r4
|
|
bl GetDamageSourceWrapper
|
|
add r3, sp, #0x1c
|
|
stmia sp, {r3, r8}
|
|
str r7, [sp, #8]
|
|
str r0, [sp, #0xc]
|
|
mov r4, #0
|
|
str r4, [sp, #0x10]
|
|
mov r3, #1
|
|
str r3, [sp, #0x14]
|
|
mov r1, r5
|
|
mov r2, sb
|
|
mov r0, r6
|
|
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!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_0232BC28: .word ov10_022C4C3C
|
|
_0232BC2C: .word 0x000003E7
|
|
_0232BC30: .word ov10_022C4C3E
|
|
arm_func_end DoMoveFrustration
|
|
|
|
arm_func_start DoMoveLeechSeed
|
|
DoMoveLeechSeed: ; 0x0232BC34
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl TryInflictLeechSeedStatus
|
|
ldr r1, [r4, #0xb4]
|
|
#ifdef JAPAN
|
|
ldrb r0, [r1, #0x107]
|
|
cmp r0, #1
|
|
movlo r0, #1
|
|
strlob r0, [r1, #0x107]
|
|
#else
|
|
ldrb r0, [r1, #0x108]
|
|
cmp r0, #1
|
|
movlo r0, #1
|
|
strlob r0, [r1, #0x108]
|
|
#endif
|
|
mov r0, #1
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DoMoveLeechSeed
|
|
|
|
arm_func_start DoMoveMetronome
|
|
DoMoveMetronome: ; 0x0232BC64
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
sub sp, sp, #8
|
|
ldr r2, _0232BCB8 ; =METRONOME_NEXT_INDEX
|
|
mov r5, r0
|
|
ldr r6, [r2]
|
|
ldr r0, _0232BCBC ; =METRONOME_TABLE
|
|
mov r2, r6, lsl #3
|
|
mov r4, r1
|
|
ldrh r1, [r0, r2]
|
|
add r0, sp, #0
|
|
mov r7, r3
|
|
bl InitMove
|
|
ldr r0, _0232BCC0 ; =ov10_022C5DE0
|
|
add r2, sp, #0
|
|
ldr ip, [r0, r6, lsl #3]
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r3, r7
|
|
blx ip
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0232BCB8: .word METRONOME_NEXT_INDEX
|
|
_0232BCBC: .word METRONOME_TABLE
|
|
_0232BCC0: .word ov10_022C5DE0
|
|
arm_func_end DoMoveMetronome
|
|
|
|
arm_func_start DoMoveDreamEater
|
|
DoMoveDreamEater: ; 0x0232BCC4
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r8, r2
|
|
#ifdef JAPAN
|
|
mov sb, r1
|
|
mov r2, #0x3a
|
|
mov r7, r0
|
|
mov r6, r3
|
|
#else
|
|
mov r6, r3
|
|
mov sb, r1
|
|
mov r2, #0x3a
|
|
mov r3, #1
|
|
mov r7, r0
|
|
#endif
|
|
mov r4, #0
|
|
bl DefenderAbilityIsActiveMoveEffects__0232BDD0
|
|
mov r5, r0
|
|
mov r0, sb
|
|
bl IsMonsterSleeping
|
|
cmp r0, #0
|
|
beq _0232BDB4
|
|
mov r0, #1
|
|
bl AnimationDelayOrSomething
|
|
mov r0, r7
|
|
mov r1, sb
|
|
mov r2, r8
|
|
mov r3, #0x100
|
|
str r6, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232BDC4
|
|
add r0, r0, r0, lsr #31
|
|
mov r6, r0, asr #1
|
|
mov r4, #1
|
|
cmp r6, #1
|
|
mov r0, r7
|
|
mov r1, #0
|
|
movlt r6, r4
|
|
bl DungeonRandOutcomeUserAction
|
|
cmp r0, #0
|
|
beq _0232BDC4
|
|
ldr r1, [r7, #0xb4]
|
|
#ifdef JAPAN
|
|
ldrb r0, [r1, #0x107]
|
|
cmp r0, #1
|
|
movlo r0, #1
|
|
strlob r0, [r1, #0x107]
|
|
#else
|
|
ldrb r0, [r1, #0x108]
|
|
cmp r0, #1
|
|
movlo r0, #1
|
|
strlob r0, [r1, #0x108]
|
|
#endif
|
|
mov r0, r7
|
|
mov r1, #0
|
|
bl DungeonRandOutcomeUserAction
|
|
cmp r0, #0
|
|
beq _0232BDC4
|
|
cmp r5, #0
|
|
beq _0232BD94
|
|
mov r2, #0xd
|
|
mov r0, r7
|
|
mov r1, r6
|
|
add r3, r2, #0x22c
|
|
bl ApplyDamageAndEffectsWrapper
|
|
b _0232BDC4
|
|
_0232BD94:
|
|
mov r5, #1
|
|
mov r0, r7
|
|
mov r1, r7
|
|
mov r2, r6
|
|
mov r3, #0
|
|
str r5, [sp]
|
|
bl TryIncreaseHp
|
|
b _0232BDC4
|
|
_0232BDB4:
|
|
ldr r2, _0232BDCC ; =0x00000EF2
|
|
mov r0, r7
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232BDC4:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232BDCC: .word 0x00000C34
|
|
#else
|
|
_0232BDCC: .word 0x00000EF2
|
|
#endif
|
|
arm_func_end DoMoveDreamEater
|
|
|
|
arm_func_start DefenderAbilityIsActiveMoveEffects__0232BDD0
|
|
DefenderAbilityIsActiveMoveEffects__0232BDD0: ; 0x0232BDD0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r1
|
|
mov r4, r2
|
|
cmp r0, r5
|
|
beq _0232BE24
|
|
cmp r0, #0
|
|
moveq r1, #0
|
|
beq _0232BE04
|
|
ldr r1, [r0]
|
|
cmp r1, #1
|
|
moveq r1, #1
|
|
movne r1, #0
|
|
and r1, r1, #0xff
|
|
_0232BE04:
|
|
cmp r1, #0
|
|
#ifndef JAPAN
|
|
cmpne r3, #0
|
|
#endif
|
|
beq _0232BE24
|
|
mov r1, #0x53
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_0232BE24:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl AbilityIsActiveVeneer
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DefenderAbilityIsActiveMoveEffects__0232BDD0
|
|
|
|
arm_func_start DoMoveSnatch
|
|
DoMoveSnatch: ; 0x0232BE34
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictSnatchStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveSnatch
|
|
|
|
arm_func_start DoMoveRecycle
|
|
DoMoveRecycle: ; 0x0232BE44
|
|
#ifdef JAPAN
|
|
#define DO_MOVE_RECYCLE_OFFSET 4
|
|
#else
|
|
#define DO_MOVE_RECYCLE_OFFSET 0
|
|
#endif
|
|
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov r5, r1
|
|
ldr r1, [r5, #0xb4]
|
|
mov r6, r0
|
|
ldrb r0, [r1, #6]
|
|
mov sb, #0
|
|
cmp r0, #0
|
|
bne _0232BF34
|
|
ldr r7, _0232BF68 ; =DUNGEON_PTR
|
|
ldr r8, _0232BF6C ; =BAG_ITEMS_PTR_MIRROR
|
|
mov sl, sb
|
|
mov fp, #6
|
|
_0232BE74:
|
|
mul r4, sl, fp
|
|
ldr r0, [r8]
|
|
ldr r0, [r0, #0x384]
|
|
ldrb r1, [r0, r4]
|
|
add r2, r0, r4
|
|
tst r1, #1
|
|
movne r1, #1
|
|
moveq r1, #0
|
|
tst r1, #0xff
|
|
beq _0232BF28
|
|
ldrb r1, [r2]
|
|
tst r1, #2
|
|
ldreqsh r1, [r2, #4]
|
|
cmpeq r1, #0xbb
|
|
bne _0232BF28
|
|
ldrh r1, [r2, #2]
|
|
add r1, r1, #0xbc
|
|
mov r1, r1, lsl #0x10
|
|
mov r1, r1, asr #0x10
|
|
cmp r1, #0xfe
|
|
beq _0232BF28
|
|
add r0, r0, r4
|
|
mov r2, #0
|
|
ldrb sb, [r0, #1]
|
|
bl InitStandardItem
|
|
ldr r0, [r8]
|
|
cmp sb, #0
|
|
ldr r0, [r0, #0x384]
|
|
add r0, r0, r4
|
|
strb sb, [r0, #1]
|
|
beq _0232BF24
|
|
#ifdef JAPAN
|
|
ldr r2, [r7]
|
|
mov r0, #0x23c
|
|
ldr r1, [r8]
|
|
mla r0, sb, r0, r2
|
|
ldr r1, [r1, #0x384]
|
|
add r0, r0, #0x600
|
|
add r2, r1, r4
|
|
ldrh r1, [r1, r4]
|
|
#else
|
|
ldr r1, [r8]
|
|
ldr r2, [r7]
|
|
add r0, sb, sb, lsl #3
|
|
add r0, r2, r0, lsl #6
|
|
ldr r2, [r1, #0x384]
|
|
add r0, r0, #0x600
|
|
ldrh r1, [r2, r4]
|
|
add r2, r2, r4
|
|
#endif
|
|
strh r1, [r0, #0x16 + DO_MOVE_RECYCLE_OFFSET]
|
|
ldrh r1, [r2, #2]
|
|
strh r1, [r0, #0x18 + DO_MOVE_RECYCLE_OFFSET]
|
|
ldrh r1, [r2, #4]
|
|
strh r1, [r0, #0x1a + DO_MOVE_RECYCLE_OFFSET]
|
|
_0232BF24:
|
|
mov sb, #1
|
|
_0232BF28:
|
|
add sl, sl, #1
|
|
cmp sl, #0x32
|
|
blt _0232BE74
|
|
_0232BF34:
|
|
cmp sb, #0
|
|
beq _0232BF50
|
|
ldr r2, _0232BF70 ; =0x00000EF3
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _0232BF60
|
|
_0232BF50:
|
|
ldr r2, _0232BF74 ; =0x00000EF4
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232BF60:
|
|
mov r0, sb
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0232BF68: .word DUNGEON_PTR
|
|
_0232BF6C: .word BAG_ITEMS_PTR_MIRROR
|
|
#ifdef JAPAN
|
|
_0232BF70: .word 0x00000C35
|
|
_0232BF74: .word 0x00000C36
|
|
#else
|
|
_0232BF70: .word 0x00000EF3
|
|
_0232BF74: .word 0x00000EF4
|
|
#endif
|
|
arm_func_end DoMoveRecycle
|
|
|
|
arm_func_start DoMoveReflect
|
|
DoMoveReflect: ; 0x0232BF78
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictReflectStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveReflect
|
|
|
|
arm_func_start DoMoveDragonRage
|
|
DoMoveDragonRage: ; 0x0232BF88
|
|
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, _0232C024 ; =DRAGON_RAGE_FIXED_DAMAGE
|
|
mov r1, r8
|
|
ldrsh r2, [r2]
|
|
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
|
|
_0232C024: .word DRAGON_RAGE_FIXED_DAMAGE
|
|
arm_func_end DoMoveDragonRage
|
|
|
|
arm_func_start DoMoveDragonDance
|
|
DoMoveDragonDance: ; 0x0232C028
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r2, _0232C060 ; =ATK_STAT_IDX
|
|
mov r5, r0
|
|
ldr r2, [r2]
|
|
mov r4, r1
|
|
mov r3, #1
|
|
bl BoostOffensiveStat
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0
|
|
mov r3, #1
|
|
bl BoostSpeedOneStage
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232C060: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveDragonDance
|
|
|
|
arm_func_start DoMoveSkullBash
|
|
DoMoveSkullBash: ; 0x0232C064
|
|
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 _0232C0C0
|
|
ldr r1, _0232C0EC ; =SKULL_BASH_DAMAGE_MULTIPLIER
|
|
mov r0, r7
|
|
ldr r3, [r1]
|
|
mov r1, r6
|
|
mov r2, r5
|
|
str r4, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r1, #1
|
|
moveq r1, #0
|
|
mov r0, r7
|
|
and r4, r1, #0xff
|
|
bl ov29_02318D58
|
|
b _0232C0E4
|
|
_0232C0C0:
|
|
ldr r0, _0232C0F0 ; =0x00000CEB
|
|
bl StringFromId
|
|
str r0, [sp]
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r3, r5
|
|
mov r2, #6
|
|
bl ov29_02318BBC
|
|
mov r4, #1
|
|
_0232C0E4:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0232C0EC: .word SKULL_BASH_DAMAGE_MULTIPLIER
|
|
#ifdef JAPAN
|
|
_0232C0F0: .word 0x00000A2B
|
|
#else
|
|
_0232C0F0: .word 0x00000CEB
|
|
#endif
|
|
arm_func_end DoMoveSkullBash
|
|
|
|
arm_func_start DoMoveDamageLowerSpecialDefense50
|
|
DoMoveDamageLowerSpecialDefense50: ; 0x0232C0F4
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #8
|
|
mov r8, r2
|
|
ldrh ip, [r8, #4]
|
|
ldr r2, _0232C198 ; =0x0000014F
|
|
mov r5, r0
|
|
mov r4, r1
|
|
mov r7, r3
|
|
cmp ip, r2
|
|
mov r6, #0
|
|
bne _0232C128
|
|
mov r0, #1
|
|
bl AnimationDelayOrSomething
|
|
_0232C128:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, r8
|
|
mov r3, #0x100
|
|
str r7, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232C18C
|
|
ldr r1, _0232C19C ; =LUSTER_PURGE_LOWER_SPECIAL_DEFENSE_CHANCE
|
|
mov r0, r5
|
|
ldrsh r2, [r1]
|
|
mov r1, r4
|
|
mov r6, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232C18C
|
|
ldr r0, _0232C1A0 ; =SPATK_STAT_IDX
|
|
mov r3, r6
|
|
ldr r2, [r0]
|
|
mov r1, r4
|
|
mov r0, r5
|
|
str r3, [sp]
|
|
mov r4, #0
|
|
str r4, [sp, #4]
|
|
bl LowerDefensiveStat
|
|
_0232C18C:
|
|
mov r0, r6
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_0232C198: .word 0x0000014F
|
|
_0232C19C: .word LUSTER_PURGE_LOWER_SPECIAL_DEFENSE_CHANCE
|
|
_0232C1A0: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveDamageLowerSpecialDefense50
|
|
|
|
arm_func_start DoMoveStruggle
|
|
DoMoveStruggle: ; 0x0232C1A4
|
|
stmdb sp!, {r4, r5, r6, r7, lr}
|
|
sub sp, sp, #0x1c
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r7, r0
|
|
mov r6, r2
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232C26C
|
|
mov r1, r4
|
|
mov r0, r7
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserAction
|
|
cmp r0, #0
|
|
beq _0232C26C
|
|
ldr r1, [r7, #0xb4]
|
|
ldr r0, _0232C278 ; =0x000003E7
|
|
ldrsh r2, [r1, #0x12]
|
|
ldrsh r1, [r1, #0x16]
|
|
add r1, r2, r1
|
|
cmp r1, r0
|
|
movgt r1, r0
|
|
mov r0, r1, asr #1
|
|
add r0, r1, r0, lsr #30
|
|
mov r5, r0, asr #2
|
|
ldr r0, [r7, #0xb4]
|
|
cmp r5, #1
|
|
ldrsh r0, [r0, #0x10]
|
|
movlt r5, #1
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
beq _0232C270
|
|
ldrh r0, [r6, #4]
|
|
bl GetMoveCategory
|
|
mov r3, #0
|
|
str r3, [sp]
|
|
str r3, [sp, #4]
|
|
str r0, [sp, #8]
|
|
mov r0, #0x23c
|
|
str r0, [sp, #0xc]
|
|
mov r0, #4
|
|
str r0, [sp, #0x10]
|
|
mov r0, #1
|
|
str r0, [sp, #0x14]
|
|
mov r0, r7
|
|
mov r1, r7
|
|
mov r2, r5
|
|
str r3, [sp, #0x18]
|
|
bl CalcDamageFixedWrapper
|
|
_0232C26C:
|
|
mov r0, r4
|
|
_0232C270:
|
|
add sp, sp, #0x1c
|
|
ldmia sp!, {r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0232C278: .word 0x000003E7
|
|
arm_func_end DoMoveStruggle
|
|
|
|
arm_func_start DoMoveRockSmash
|
|
DoMoveRockSmash: ; 0x0232C27C
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
mov r6, r0
|
|
add r0, sp, #0
|
|
mov r5, r1
|
|
mov r4, #0
|
|
bl ov29_022F8FF8
|
|
cmp r0, #0
|
|
beq _0232C2B4
|
|
ldr r2, _0232C2F4 ; =0x00000EF5
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _0232C2E8
|
|
_0232C2B4:
|
|
add r0, sp, #0
|
|
bl TrySmashWall
|
|
movs r4, r0
|
|
beq _0232C2D8
|
|
ldr r2, _0232C2F8 ; =0x00000EF6
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _0232C2E8
|
|
_0232C2D8:
|
|
ldr r2, _0232C2FC ; =0x00000EF7
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232C2E8:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232C2F4: .word 0x00000C37
|
|
_0232C2F8: .word 0x00000C38
|
|
_0232C2FC: .word 0x00000C39
|
|
#else
|
|
_0232C2F4: .word 0x00000EF5
|
|
_0232C2F8: .word 0x00000EF6
|
|
_0232C2FC: .word 0x00000EF7
|
|
#endif
|
|
arm_func_end DoMoveRockSmash
|
|
|
|
arm_func_start DoMoveSeeTrap
|
|
DoMoveSeeTrap: ; 0x0232C300
|
|
stmdb sp!, {r3, lr}
|
|
bl RevealTrapsNearby
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveSeeTrap
|
|
|
|
arm_func_start DoMoveTakeaway
|
|
DoMoveTakeaway: ; 0x0232C310
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #4
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r8, r0
|
|
mov r7, r1
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _0232C4DC
|
|
mov r2, r4
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232C4BC
|
|
mov r0, #0
|
|
mov r1, r8
|
|
mov r2, r0
|
|
ldr r5, [r8, #0xb4]
|
|
ldr r6, [r7, #0xb4]
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r7
|
|
mov r0, r4
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, #0x2c
|
|
#ifndef JAPAN
|
|
mov r3, r4
|
|
#endif
|
|
bl DefenderAbilityIsActiveMoveEffects__0232BDD0
|
|
cmp r0, #0
|
|
beq _0232C3B0
|
|
#ifdef JAPAN
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, #0xc40
|
|
#else
|
|
ldr r2, _0232C4E8 ; =0x00000EFE
|
|
mov r0, r8
|
|
mov r1, r7
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r4
|
|
b _0232C4E0
|
|
_0232C3B0:
|
|
ldrb r0, [r5, #0x62]
|
|
tst r0, #1
|
|
movne r0, r4
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _0232C3E0
|
|
ldr r2, _0232C4EC ; =0x00000EFA
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #1
|
|
b _0232C4E0
|
|
_0232C3E0:
|
|
ldrb r0, [r6, #0x62]
|
|
tst r0, #1
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
bne _0232C410
|
|
ldr r2, _0232C4F0 ; =0x00000EFB
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #1
|
|
b _0232C4E0
|
|
_0232C410:
|
|
ldrb r0, [r5, #6]
|
|
cmp r0, #0
|
|
bne _0232C440
|
|
bl IsBagFull
|
|
cmp r0, #0
|
|
beq _0232C440
|
|
ldr r2, _0232C4F4 ; =0x00000EFC
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #1
|
|
b _0232C4E0
|
|
_0232C440:
|
|
ldrh r0, [r6, #0x62]
|
|
strh r0, [r5, #0x62]
|
|
ldrh r0, [r6, #0x64]
|
|
strh r0, [r5, #0x64]
|
|
ldrh r0, [r6, #0x66]
|
|
strh r0, [r5, #0x66]
|
|
ldrb r0, [r5, #6]
|
|
cmp r0, #0
|
|
bne _0232C46C
|
|
mov r0, r5
|
|
bl AddHeldItemToBag
|
|
_0232C46C:
|
|
ldrb r0, [r6, #6]
|
|
cmp r0, #0
|
|
bne _0232C480
|
|
add r0, r6, #0x62
|
|
bl RemoveEquivItem
|
|
_0232C480:
|
|
add r0, r6, #0x62
|
|
bl ItemZInit
|
|
mov r0, r8
|
|
bl ov29_022F9EA0
|
|
mov r0, r7
|
|
bl ov29_022F9EA0
|
|
#ifdef JAPAN
|
|
ldrb r0, [r5, #0x107]
|
|
#else
|
|
ldrb r0, [r5, #0x108]
|
|
#endif
|
|
ldr r2, _0232C4F8 ; =0x00000EF9
|
|
mov r1, r7
|
|
cmp r0, #1
|
|
movlo r0, #1
|
|
#ifdef JAPAN
|
|
strlob r0, [r5, #0x107]
|
|
#else
|
|
strlob r0, [r5, #0x108]
|
|
#endif
|
|
mov r0, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _0232C4DC
|
|
_0232C4BC:
|
|
mov r0, r7
|
|
bl EntityIsValidMoveEffects__0232C500
|
|
cmp r0, #0
|
|
beq _0232C4DC
|
|
ldr r2, _0232C4FC ; =0x00000EFD
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232C4DC:
|
|
mov r0, r4
|
|
_0232C4E0:
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define DO_MOVE_TAKEAWAY_OFFSET -0x2BE
|
|
#else
|
|
#define DO_MOVE_TAKEAWAY_OFFSET 0
|
|
#endif
|
|
#ifndef JAPAN
|
|
_0232C4E8: .word 0x00000EFE
|
|
#endif
|
|
_0232C4EC: .word 0x00000EFA + DO_MOVE_TAKEAWAY_OFFSET
|
|
_0232C4F0: .word 0x00000EFB + DO_MOVE_TAKEAWAY_OFFSET
|
|
_0232C4F4: .word 0x00000EFC + DO_MOVE_TAKEAWAY_OFFSET
|
|
_0232C4F8: .word 0x00000EF9 + DO_MOVE_TAKEAWAY_OFFSET
|
|
_0232C4FC: .word 0x00000EFD + DO_MOVE_TAKEAWAY_OFFSET
|
|
arm_func_end DoMoveTakeaway
|