mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
3410 lines
63 KiB
ArmAsm
3410 lines
63 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_02325644.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start ov29_02325644
|
|
ov29_02325644: ; 0x02325644
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r5, r2
|
|
mov r0, r6
|
|
mov r4, r3
|
|
bl GetApparentWeather
|
|
mov r1, r0
|
|
ldrh r0, [r5, #4]
|
|
mov r2, r4
|
|
bl GetMoveAnimationId
|
|
bl GetMoveAnimation
|
|
ldrh r1, [r7]
|
|
ldrsh r0, [r0, #2]
|
|
cmp r1, #0
|
|
cmpne r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, #1
|
|
bl ov29_02325D7C
|
|
mov r0, #0x5a
|
|
bl AdvanceFrame
|
|
mov r0, r7
|
|
bl ov10_022BED90
|
|
mov r1, r6
|
|
mov r2, #1
|
|
bl ov29_022E6D68
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end ov29_02325644
|
|
|
|
arm_func_start PlayMoveAnimation
|
|
PlayMoveAnimation: ; 0x023256B4
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #0x18
|
|
mov r8, r2
|
|
mov sb, r1
|
|
mov r1, r8
|
|
mov sl, r0
|
|
mov r7, r3
|
|
bl ShouldMovePlayAlternativeAnimation
|
|
cmp r0, #0
|
|
movne r4, #1
|
|
mov r0, sl
|
|
moveq r4, #0
|
|
bl GetApparentWeather
|
|
mov r1, r0
|
|
ldrh r0, [r8, #4]
|
|
mov r2, r4
|
|
bl GetMoveAnimationId
|
|
mov r4, r0
|
|
bl GetMoveAnimation
|
|
ldrsh r5, [r0, #4]
|
|
mov r0, sb
|
|
mov r6, #0
|
|
bl EntityIsValid__02325620
|
|
cmp r0, #0
|
|
beq _02325730
|
|
mov r0, sb
|
|
ldr r6, [sb, #0xb4]
|
|
bl ShouldDisplayEntityAdvanced
|
|
cmp r0, #0
|
|
bne _02325740
|
|
b _023258E0
|
|
_02325730:
|
|
mov r0, r7
|
|
bl ov29_022E2CA0
|
|
cmp r0, #0
|
|
beq _023258E0
|
|
_02325740:
|
|
cmp r6, #0
|
|
cmpeq r4, #0x1f4
|
|
beq _023258E0
|
|
mov r0, sl
|
|
mov r1, r8
|
|
bl ov29_02325D20
|
|
cmp r0, #0
|
|
bne _023258E0
|
|
cmp r5, #0
|
|
beq _023258E0
|
|
ldr r1, _023258E8 ; =ov29_02352AD8
|
|
mov r0, r5
|
|
ldrh r2, [r1]
|
|
ldrh r1, [r1, #2]
|
|
strh r2, [sp]
|
|
strh r1, [sp, #2]
|
|
bl GetEffectAnimation
|
|
ldrsb r5, [r0, #0x19]
|
|
mvn r0, #0
|
|
cmp r5, r0
|
|
beq _023257C8
|
|
mov r0, sb
|
|
bl EntityIsValid__02325620
|
|
cmp r0, #0
|
|
ldreqh r1, [sp]
|
|
ldreqh r0, [sp, #2]
|
|
streqh r1, [sp, #0xc]
|
|
streqh r0, [sp, #0xe]
|
|
beq _023257D8
|
|
add r0, sp, #0xc
|
|
add r1, sb, #0x2c
|
|
and r2, r5, #0xff
|
|
bl sub_0201CF90
|
|
b _023257D8
|
|
_023257C8:
|
|
ldrh r1, [sp]
|
|
ldrh r0, [sp, #2]
|
|
strh r1, [sp, #0xc]
|
|
strh r0, [sp, #0xe]
|
|
_023257D8:
|
|
strh r4, [sp, #4]
|
|
cmp r6, #0
|
|
beq _02325828
|
|
ldrsh r1, [r6, #4]
|
|
cmp r4, #0x1f4
|
|
mov r0, #0
|
|
strh r1, [sp, #6]
|
|
ldr r1, [sb, #0xc]
|
|
cmpne r4, #0x50
|
|
mov r1, r1, asr #8
|
|
strh r1, [sp, #8]
|
|
ldr r1, [sb, #0x10]
|
|
mov r1, r1, asr #8
|
|
strh r1, [sp, #0xa]
|
|
str r0, [sp, #0x10]
|
|
ldreq r0, [sl, #0xb4]
|
|
ldreqb r0, [r0, #0x4c]
|
|
andeq r0, r0, #7
|
|
streq r0, [sp, #0x10]
|
|
b _0232586C
|
|
_02325828:
|
|
mov r0, #1
|
|
strh r0, [sp, #6]
|
|
ldrsh r2, [r7]
|
|
mov r0, #0x18
|
|
mov r1, #0
|
|
smulbb r2, r2, r0
|
|
add r2, r2, #0xc
|
|
mov r2, r2, lsl #8
|
|
mov r2, r2, asr #8
|
|
strh r2, [sp, #8]
|
|
ldrsh r2, [r7, #2]
|
|
smulbb r0, r2, r0
|
|
add r0, r0, #0x10
|
|
mov r0, r0, lsl #8
|
|
mov r0, r0, asr #8
|
|
strh r0, [sp, #0xa]
|
|
str r1, [sp, #0x10]
|
|
_0232586C:
|
|
mov r1, #0
|
|
add r0, sp, #4
|
|
str r1, [sp, #0x14]
|
|
bl ov10_022BF160
|
|
cmp r0, #0
|
|
beq _02325894
|
|
mov r0, #0x5d
|
|
bl ov29_0234BA54
|
|
mov r0, #0x5d
|
|
bl AdvanceFrame
|
|
_02325894:
|
|
add r0, sp, #4
|
|
bl ov10_022BFC5C
|
|
mov r4, r0
|
|
mov r0, #0x5b
|
|
bl AdvanceFrame
|
|
mov r0, r4
|
|
mov r1, sb
|
|
mov r2, #6
|
|
bl ov29_022E6D68
|
|
mov r0, r4, lsl #0x10
|
|
mov r4, r0, asr #0x10
|
|
mov r5, #0x28
|
|
b _023258D0
|
|
_023258C8:
|
|
mov r0, r5
|
|
bl AdvanceFrame
|
|
_023258D0:
|
|
mov r0, r4
|
|
bl AnimationHasMoreFrames
|
|
cmp r0, #0
|
|
bne _023258C8
|
|
_023258E0:
|
|
add sp, sp, #0x18
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_023258E8: .word ov29_02352AD8
|
|
arm_func_end PlayMoveAnimation
|
|
|
|
arm_func_start ov29_023258EC
|
|
ov29_023258EC: ; 0x023258EC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #0x2c
|
|
mov sl, r2
|
|
mov r4, r1
|
|
mov r1, sl
|
|
mov r5, r0
|
|
bl ShouldMovePlayAlternativeAnimation
|
|
cmp r0, #0
|
|
movne r6, #1
|
|
mov r0, r5
|
|
moveq r6, #0
|
|
bl GetApparentWeather
|
|
mov r1, r0
|
|
ldrh r0, [sl, #4]
|
|
mov r2, r6
|
|
bl GetMoveAnimationId
|
|
mov r6, r0
|
|
bl GetMoveAnimation
|
|
ldrsh r7, [r0, #4]
|
|
mov r0, r4
|
|
bl EntityIsValid__02325620
|
|
cmp r0, #0
|
|
bne _02325958
|
|
mov r0, r5
|
|
bl EntityIsValid__02325620
|
|
cmp r0, #0
|
|
beq _02325B04
|
|
_02325958:
|
|
mov r0, r5
|
|
ldr r8, [r5, #0xb4]
|
|
ldr sb, [r4, #0xb4]
|
|
bl ShouldDisplayEntityAdvanced
|
|
cmp r0, #0
|
|
beq _02325B04
|
|
mov r0, r4
|
|
bl ShouldDisplayEntityAdvanced
|
|
cmp r0, #0
|
|
beq _02325B04
|
|
mov r0, r5
|
|
mov r1, sl
|
|
bl ov29_02325D20
|
|
cmp r0, #0
|
|
bne _02325B04
|
|
cmp r8, #0
|
|
cmpne sb, #0
|
|
beq _02325B04
|
|
cmp r7, #0
|
|
beq _02325B04
|
|
ldr r1, _02325B0C ; =ov29_02352AD8
|
|
mov r0, r7
|
|
ldrh r2, [r1, #0xc]
|
|
ldrh r1, [r1, #0xe]
|
|
strh r2, [sp]
|
|
strh r1, [sp, #2]
|
|
bl GetEffectAnimation
|
|
ldrsb ip, [r0, #0x19]
|
|
mov r0, #0
|
|
add r7, sp, #0x18
|
|
strh r6, [sp, #0x18]
|
|
sub r6, r0, #1
|
|
str r0, [sp, #0x24]
|
|
str r0, [sp, #0x28]
|
|
ldmia r7!, {r0, r1, r2, r3}
|
|
cmp ip, r6
|
|
ldr r6, [r7]
|
|
add r7, sp, #4
|
|
stmia r7!, {r0, r1, r2, r3}
|
|
str r6, [r7]
|
|
beq _02325A24
|
|
and r6, ip, #0xff
|
|
add r0, sp, #0x20
|
|
mov r2, r6
|
|
add r1, r4, #0x2c
|
|
bl sub_0201CF90
|
|
add r0, sp, #0xc
|
|
mov r2, r6
|
|
add r1, r5, #0x2c
|
|
bl sub_0201CF90
|
|
b _02325A3C
|
|
_02325A24:
|
|
ldrh r1, [sp]
|
|
ldrh r0, [sp, #2]
|
|
strh r1, [sp, #0x20]
|
|
strh r0, [sp, #0x22]
|
|
strh r1, [sp, #0xc]
|
|
strh r0, [sp, #0xe]
|
|
_02325A3C:
|
|
ldrsh r1, [sb, #4]
|
|
add r0, sp, #0x18
|
|
strh r1, [sp, #0x1a]
|
|
ldr r1, [r4, #0xc]
|
|
mov r1, r1, asr #8
|
|
strh r1, [sp, #0x1c]
|
|
ldr r1, [r4, #0x10]
|
|
mov r1, r1, asr #8
|
|
strh r1, [sp, #0x1e]
|
|
ldrsh r1, [r8, #4]
|
|
strh r1, [sp, #6]
|
|
ldr r1, [r5, #0xc]
|
|
mov r1, r1, asr #8
|
|
strh r1, [sp, #8]
|
|
ldr r1, [r5, #0x10]
|
|
mov r1, r1, asr #8
|
|
strh r1, [sp, #0xa]
|
|
bl ov10_022BF160
|
|
cmp r0, #0
|
|
beq _02325A9C
|
|
mov r0, #0x5d
|
|
bl ov29_0234BA54
|
|
mov r0, #0x5d
|
|
bl AdvanceFrame
|
|
_02325A9C:
|
|
add r0, sp, #0x18
|
|
bl ov10_022BFC5C
|
|
mov r7, r0
|
|
add r0, sp, #4
|
|
bl ov10_022BFC5C
|
|
mov r6, r0
|
|
mov r0, #0x5b
|
|
bl AdvanceFrame
|
|
mov r0, r7
|
|
mov r1, r4
|
|
mov r2, #6
|
|
bl ov29_022E6D68
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #6
|
|
bl ov29_022E6D68
|
|
mov r0, r7, lsl #0x10
|
|
mov r4, r0, asr #0x10
|
|
mov r5, #0x28
|
|
b _02325AF4
|
|
_02325AEC:
|
|
mov r0, r5
|
|
bl AdvanceFrame
|
|
_02325AF4:
|
|
mov r0, r4
|
|
bl AnimationHasMoreFrames
|
|
cmp r0, #0
|
|
bne _02325AEC
|
|
_02325B04:
|
|
add sp, sp, #0x2c
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_02325B0C: .word ov29_02352AD8
|
|
arm_func_end ov29_023258EC
|
|
|
|
arm_func_start GetMoveAnimationId
|
|
GetMoveAnimationId: ; 0x02325B10
|
|
cmp r0, #0x1f
|
|
bne _02325B68
|
|
cmp r1, #7
|
|
addls pc, pc, r1, lsl #2
|
|
b _02325B64
|
|
_02325B24: ; jump table
|
|
b _02325B44 ; case 0
|
|
b _02325B48 ; case 1
|
|
b _02325B50 ; case 2
|
|
b _02325B44 ; case 3
|
|
b _02325B58 ; case 4
|
|
b _02325B60 ; case 5
|
|
b _02325B44 ; case 6
|
|
b _02325B60 ; case 7
|
|
_02325B44:
|
|
bx lr
|
|
_02325B48:
|
|
ldr r0, _02325C44 ; =0x0000021F
|
|
bx lr
|
|
_02325B50:
|
|
ldr r0, _02325C48 ; =0x00000222
|
|
bx lr
|
|
_02325B58:
|
|
ldr r0, _02325C4C ; =0x00000221
|
|
bx lr
|
|
_02325B60:
|
|
mov r0, #0x220
|
|
_02325B64:
|
|
bx lr
|
|
_02325B68:
|
|
cmp r2, #0
|
|
bxeq lr
|
|
cmp r0, #0x9c
|
|
bgt _02325BDC
|
|
cmp r0, #0x97
|
|
blt _02325B98
|
|
beq _02325C2C
|
|
cmp r0, #0x99
|
|
beq _02325C34
|
|
cmp r0, #0x9c
|
|
ldreq r0, _02325C50 ; =0x00000229
|
|
bx lr
|
|
_02325B98:
|
|
cmp r0, #0x3c
|
|
bgt _02325BC0
|
|
bge _02325C24
|
|
cmp r0, #8
|
|
bgt _02325BB4
|
|
ldreq r0, _02325C54 ; =0x00000223
|
|
bx lr
|
|
_02325BB4:
|
|
cmp r0, #0x19
|
|
ldreq r0, _02325C58 ; =0x0000022D
|
|
bx lr
|
|
_02325BC0:
|
|
cmp r0, #0x4b
|
|
bgt _02325BD0
|
|
ldreq r0, _02325C5C ; =0x00000225
|
|
bx lr
|
|
_02325BD0:
|
|
cmp r0, #0x64
|
|
ldreq r0, _02325C60 ; =0x00000226
|
|
bx lr
|
|
_02325BDC:
|
|
cmp r0, #0xed
|
|
bgt _02325C04
|
|
bge _02325C3C
|
|
cmp r0, #0xcd
|
|
bgt _02325BF8
|
|
ldreq r0, _02325C64 ; =0x0000022A
|
|
bx lr
|
|
_02325BF8:
|
|
cmp r0, #0xe3
|
|
ldreq r0, _02325C68 ; =0x0000022E
|
|
bx lr
|
|
_02325C04:
|
|
cmp r0, #0x15c
|
|
bgt _02325C14
|
|
ldreq r0, _02325C6C ; =0x0000022B
|
|
bx lr
|
|
_02325C14:
|
|
ldr r1, _02325C70 ; =0x000001DD
|
|
cmp r0, r1
|
|
moveq r0, #0x230
|
|
bx lr
|
|
_02325C24:
|
|
mov r0, #0x224
|
|
bx lr
|
|
_02325C2C:
|
|
ldr r0, _02325C74 ; =0x00000227
|
|
bx lr
|
|
_02325C34:
|
|
mov r0, #0x228
|
|
bx lr
|
|
_02325C3C:
|
|
mov r0, #0x22c
|
|
bx lr
|
|
.align 2, 0
|
|
_02325C44: .word 0x0000021F
|
|
_02325C48: .word 0x00000222
|
|
_02325C4C: .word 0x00000221
|
|
_02325C50: .word 0x00000229
|
|
_02325C54: .word 0x00000223
|
|
_02325C58: .word 0x0000022D
|
|
_02325C5C: .word 0x00000225
|
|
_02325C60: .word 0x00000226
|
|
_02325C64: .word 0x0000022A
|
|
_02325C68: .word 0x0000022E
|
|
_02325C6C: .word 0x0000022B
|
|
_02325C70: .word 0x000001DD
|
|
_02325C74: .word 0x00000227
|
|
arm_func_end GetMoveAnimationId
|
|
|
|
arm_func_start ShouldMovePlayAlternativeAnimation
|
|
ShouldMovePlayAlternativeAnimation: ; 0x02325C78
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
ldrh r1, [r4, #4]
|
|
mov r5, r0
|
|
cmp r1, #0xed
|
|
bne _02325CC8
|
|
bl EntityIsValid__02325620
|
|
cmp r0, #0
|
|
beq _02325D04
|
|
ldr r0, [r5]
|
|
cmp r0, #1
|
|
bne _02325D04
|
|
ldr r1, [r5, #0xb4]
|
|
ldrb r0, [r1, #0x5e]
|
|
cmp r0, #0xe
|
|
ldrneb r0, [r1, #0x5f]
|
|
cmpne r0, #0xe
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_02325CC8:
|
|
cmp r1, #0x19
|
|
cmpne r1, #0xe3
|
|
bne _02325CEC
|
|
mov r0, r5
|
|
bl IsMonsterSleeping
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
moveq r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_02325CEC:
|
|
cmp r1, #0x97
|
|
bne _02325D04
|
|
bl GetApparentWeather
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
_02325D04:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl IsChargingTwoTurnMove
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ShouldMovePlayAlternativeAnimation
|
|
|
|
arm_func_start ov29_02325D20
|
|
ov29_02325D20: ; 0x02325D20
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
ldrh r1, [r4, #4]
|
|
mov r5, r0
|
|
cmp r1, #0x9c
|
|
bne _02325D4C
|
|
bl GetTileAtEntity
|
|
bl IsTileGround
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_02325D4C:
|
|
ldrh r0, [r4, #4]
|
|
cmp r0, #8
|
|
bne _02325D74
|
|
mov r0, r5
|
|
bl GetTileAtEntity
|
|
ldrh r0, [r0]
|
|
and r0, r0, #3
|
|
cmp r0, #1
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_02325D74:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ov29_02325D20
|
|
|
|
arm_func_start ov29_02325D7C
|
|
ov29_02325D7C: ; 0x02325D7C
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r1
|
|
bl ov10_022BF160
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
mov r0, #0x5d
|
|
bl ov29_0234BA54
|
|
mov r0, #0x5d
|
|
bl AdvanceFrame
|
|
cmp r4, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
mov r0, #5
|
|
mov r1, #0
|
|
bl ov29_022EA428
|
|
mov r0, #0x5c
|
|
bl AdvanceFrame
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end ov29_02325D7C
|
|
|
|
arm_func_start DoMoveDamage__02325DC0
|
|
DoMoveDamage__02325DC0: ; 0x02325DC0
|
|
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__02325DC0
|
|
|
|
arm_func_start DoMoveIronTail
|
|
DoMoveIronTail: ; 0x02325DE4
|
|
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 _02325E50
|
|
ldr r1, _02325E5C ; =IRON_TAIL_LOWER_DEFENSE_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _02325E50
|
|
ldr r0, _02325E60 ; =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
|
|
_02325E50:
|
|
mov r0, r4
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02325E5C: .word IRON_TAIL_LOWER_DEFENSE_CHANCE
|
|
_02325E60: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveIronTail
|
|
|
|
arm_func_start DoMoveDamageMultihitUntilMiss
|
|
DoMoveDamageMultihitUntilMiss: ; 0x02325E64
|
|
stmdb sp!, {r3, r4, lr}
|
|
sub sp, sp, #4
|
|
ldr ip, _02325EB8 ; =ROLLOUT_ICE_BALL_SUCCESSIVE_HITS
|
|
str r3, [sp]
|
|
ldr ip, [ip]
|
|
ldr r3, _02325EBC ; =ROLLOUT_DAMAGE_MULT_TABLE
|
|
mov r4, #0
|
|
ldr r3, [r3, ip, lsl #2]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
ldreq r0, _02325EC0 ; =ROLLOUT_ICE_BALL_MISSED
|
|
moveq r1, #1
|
|
streqb r1, [r0]
|
|
ldr r1, _02325EB8 ; =ROLLOUT_ICE_BALL_SUCCESSIVE_HITS
|
|
movne r4, #1
|
|
ldr r2, [r1]
|
|
mov r0, r4
|
|
add r2, r2, #1
|
|
str r2, [r1]
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, pc}
|
|
.align 2, 0
|
|
_02325EB8: .word ROLLOUT_ICE_BALL_SUCCESSIVE_HITS
|
|
_02325EBC: .word ROLLOUT_DAMAGE_MULT_TABLE
|
|
_02325EC0: .word ROLLOUT_ICE_BALL_MISSED
|
|
arm_func_end DoMoveDamageMultihitUntilMiss
|
|
|
|
arm_func_start DoMoveYawn
|
|
DoMoveYawn: ; 0x02325EC4
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r5, r0
|
|
ldr r1, _02325EFC ; =YAWN_TURN_RANGE
|
|
mov r0, r4
|
|
mov r2, #1
|
|
bl CalcStatusDuration
|
|
mov r2, r0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
add r2, r2, #1
|
|
bl TryInflictYawningStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02325EFC: .word YAWN_TURN_RANGE
|
|
arm_func_end DoMoveYawn
|
|
|
|
arm_func_start DoMoveSleep
|
|
DoMoveSleep: ; 0x02325F00
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r5, r0
|
|
ldr r1, _02325F38 ; =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
|
|
_02325F38: .word SLEEP_TURN_RANGE
|
|
arm_func_end DoMoveSleep
|
|
|
|
arm_func_start DoMoveNightmare
|
|
DoMoveNightmare: ; 0x02325F3C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r5, r0
|
|
ldr r1, _02325F70 ; =NIGHTMARE_TURN_RANGE
|
|
mov r0, r4
|
|
mov r2, #1
|
|
bl CalcStatusDuration
|
|
mov r2, r0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl TryInflictNightmareStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02325F70: .word NIGHTMARE_TURN_RANGE
|
|
arm_func_end DoMoveNightmare
|
|
|
|
arm_func_start DoMoveMorningSun
|
|
DoMoveMorningSun: ; 0x02325F74
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl GetApparentWeather
|
|
mov ip, #1
|
|
ldr r1, _02325FB0 ; =MORNING_SUN_HP_RESTORATION_TABLE
|
|
mov r0, r0, lsl #1
|
|
ldrsh r2, [r1, r0]
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r3, #0
|
|
str ip, [sp]
|
|
bl TryIncreaseHp
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02325FB0: .word MORNING_SUN_HP_RESTORATION_TABLE
|
|
arm_func_end DoMoveMorningSun
|
|
|
|
arm_func_start DoMoveVitalThrow
|
|
DoMoveVitalThrow: ; 0x02325FB4
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictVitalThrowStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveVitalThrow
|
|
|
|
arm_func_start DoMoveDig
|
|
DoMoveDig: ; 0x02325FC4
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r8, r0
|
|
mov r7, r1
|
|
mov r6, r2
|
|
mov r5, r3
|
|
mov r4, #0
|
|
bl GetTileAtEntity
|
|
mov sb, r0
|
|
bl IsTileGround
|
|
cmp r0, #0
|
|
beq _02326000
|
|
ldrh r0, [sb]
|
|
and r0, r0, #3
|
|
cmp r0, #1
|
|
beq _02326014
|
|
_02326000:
|
|
ldr r2, _0232607C ; =0x00000EC4
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02326074
|
|
_02326014:
|
|
mov r0, r8
|
|
mov r1, r6
|
|
bl IsChargingTwoTurnMove
|
|
cmp r0, #0
|
|
beq _02326050
|
|
ldr r1, _02326080 ; =DIG_DAMAGE_MULTIPLIER
|
|
mov r0, r8
|
|
ldr r3, [r1]
|
|
mov r1, r7
|
|
mov r2, r6
|
|
str r5, [sp]
|
|
bl DealDamage
|
|
mov r0, r8
|
|
bl ov29_02318D58
|
|
b _02326070
|
|
_02326050:
|
|
ldr r0, _02326084 ; =0x00000CD6
|
|
bl StringFromId
|
|
str r0, [sp]
|
|
mov r0, r8
|
|
mov r1, r8
|
|
mov r3, r6
|
|
mov r2, #0xa
|
|
bl ov29_02318BBC
|
|
_02326070:
|
|
mov r4, #1
|
|
_02326074:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0232607C: .word 0x00000C06
|
|
_02326080: .word DIG_DAMAGE_MULTIPLIER
|
|
_02326084: .word 0x00000A16
|
|
#else
|
|
_0232607C: .word 0x00000EC4
|
|
_02326080: .word DIG_DAMAGE_MULTIPLIER
|
|
_02326084: .word 0x00000CD6
|
|
#endif
|
|
arm_func_end DoMoveDig
|
|
|
|
arm_func_start DoMoveSweetScent
|
|
DoMoveSweetScent: ; 0x02326088
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _023260A4 ; =SPATK_STAT_IDX
|
|
mov r3, #1
|
|
ldr r2, [r2]
|
|
bl LowerHitChanceStat
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_023260A4: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveSweetScent
|
|
|
|
arm_func_start DoMoveCharm
|
|
DoMoveCharm: ; 0x023260A8
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _023260CC ; =ATK_STAT_IDX
|
|
mov ip, #1
|
|
ldr r2, [r2]
|
|
mov r3, #0x80
|
|
str ip, [sp]
|
|
bl ApplyOffensiveStatMultiplier
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_023260CC: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveCharm
|
|
|
|
arm_func_start DoMoveRainDance
|
|
DoMoveRainDance: ; 0x023260D0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r3, _02326120 ; =WEATHER_MOVE_TURN_COUNT
|
|
ldr r2, _02326124 ; =DUNGEON_PTR
|
|
ldrsh r3, [r3]
|
|
ldr r2, [r2]
|
|
mov r5, r0
|
|
mov r4, r1
|
|
#ifdef JAPAN
|
|
add r2, r2, #0xcc00
|
|
mov r0, #1
|
|
mov r1, #0
|
|
strh r3, [r2, #0x9e]
|
|
#else
|
|
add r2, r2, #0xcd00
|
|
mov r0, #1
|
|
mov r1, #0
|
|
strh r3, [r2, #0x42]
|
|
#endif
|
|
bl TryActivateWeather
|
|
cmp r0, #0
|
|
bne _02326118
|
|
ldr r2, _02326128 ; =0x00000EC5
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02326118:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02326120: .word WEATHER_MOVE_TURN_COUNT
|
|
_02326124: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_02326128: .word 0x00000C07
|
|
#else
|
|
_02326128: .word 0x00000EC5
|
|
#endif
|
|
arm_func_end DoMoveRainDance
|
|
|
|
arm_func_start DoMoveHail
|
|
DoMoveHail: ; 0x0232612C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r3, _0232617C ; =WEATHER_MOVE_TURN_COUNT
|
|
ldr r2, _02326180 ; =DUNGEON_PTR
|
|
ldrsh r3, [r3]
|
|
ldr r2, [r2]
|
|
mov r5, r0
|
|
mov r4, r1
|
|
#ifdef JAPAN
|
|
add r2, r2, #0xcc00
|
|
mov r0, #1
|
|
mov r1, #0
|
|
strh r3, [r2, #0xa0]
|
|
#else
|
|
add r2, r2, #0xcd00
|
|
mov r0, #1
|
|
mov r1, #0
|
|
strh r3, [r2, #0x44]
|
|
#endif
|
|
bl TryActivateWeather
|
|
cmp r0, #0
|
|
bne _02326174
|
|
ldr r2, _02326184 ; =0x00000EC8
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02326174:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0232617C: .word WEATHER_MOVE_TURN_COUNT
|
|
_02326180: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_02326184: .word 0x00000C0A
|
|
#else
|
|
_02326184: .word 0x00000EC8
|
|
#endif
|
|
arm_func_end DoMoveHail
|
|
|
|
arm_func_start DoMoveHealStatus
|
|
DoMoveHealStatus: ; 0x02326188
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl EndNegativeStatusConditionWrapper
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveHealStatus
|
|
|
|
arm_func_start DoMoveBubble
|
|
DoMoveBubble: ; 0x023261A0
|
|
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 _023261FC
|
|
ldr r1, _02326208 ; =BUBBLE_LOWER_SPEED_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _023261FC
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, r4
|
|
mov r3, #0
|
|
bl LowerSpeed
|
|
_023261FC:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02326208: .word BUBBLE_LOWER_SPEED_CHANCE
|
|
arm_func_end DoMoveBubble
|
|
|
|
arm_func_start DoMoveEncore
|
|
DoMoveEncore: ; 0x0232620C
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #0
|
|
bl TryInflictEncoreStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveEncore
|
|
|
|
arm_func_start DoMoveRage
|
|
DoMoveRage: ; 0x02326220
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
mov r6, r0
|
|
ldr r0, _02326260 ; =0x00000CCF
|
|
mov r5, r1
|
|
mov r4, r2
|
|
bl StringFromId
|
|
str r0, [sp]
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r4
|
|
mov r2, #0xc
|
|
bl ov29_02318BBC
|
|
mov r0, #1
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02326260: .word 0x00000A0F
|
|
#else
|
|
_02326260: .word 0x00000CCF
|
|
#endif
|
|
arm_func_end DoMoveRage
|
|
|
|
arm_func_start DoMoveSuperFang
|
|
DoMoveSuperFang: ; 0x02326264
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #0x20
|
|
mov r7, r1
|
|
ldr r5, [r7, #0xb4]
|
|
mov r4, #0
|
|
ldrsh r5, [r5, #0x10]
|
|
mov r8, r0
|
|
mov r6, r2
|
|
add r2, r5, r5, lsr #31
|
|
mov r5, r3
|
|
strb r4, [sp, #0x1c]
|
|
movs sl, r2, asr #1
|
|
beq _02326304
|
|
mov r0, r6
|
|
bl GetMoveType
|
|
mov r4, r0
|
|
ldrh r0, [r6, #4]
|
|
bl GetMoveCategory
|
|
mov sb, r0
|
|
mov r1, r5
|
|
mov r0, r6
|
|
bl GetDamageSourceWrapper
|
|
add r3, sp, #0x1c
|
|
stmia sp, {r3, r4, sb}
|
|
str r0, [sp, #0xc]
|
|
mov r5, #0
|
|
str r5, [sp, #0x10]
|
|
mov r3, #1
|
|
str r3, [sp, #0x14]
|
|
mov r1, r7
|
|
mov r2, sl
|
|
mov r0, r8
|
|
str r5, [sp, #0x18]
|
|
bl CalcDamageFixedWrapper
|
|
ldrb r0, [sp, #0x1c]
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, r5
|
|
strb r0, [sp, #0x1c]
|
|
b _0232630C
|
|
_02326304:
|
|
ldr r2, _02326318 ; =0x00000EC9
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232630C:
|
|
ldrb r0, [sp, #0x1c]
|
|
add sp, sp, #0x20
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02326318: .word 0x00000C0B
|
|
#else
|
|
_02326318: .word 0x00000EC9
|
|
#endif
|
|
arm_func_end DoMoveSuperFang
|
|
|
|
arm_func_start DoMovePainSplit
|
|
DoMovePainSplit: ; 0x0232631C
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
ldr r4, [r6, #0xb4]
|
|
ldr r0, [r5, #0xb4]
|
|
ldrsh r3, [r4, #0x10]
|
|
ldrsh r2, [r0, #0x10]
|
|
ldr r1, _02326400 ; =0x000003E7
|
|
add r2, r3, r2
|
|
add r2, r2, r2, lsr #31
|
|
mov r2, r2, lsl #0xf
|
|
mov r2, r2, asr #0x10
|
|
strh r2, [r4, #0x10]
|
|
strh r2, [r0, #0x10]
|
|
ldrsh r3, [r4, #0x12]
|
|
ldrsh r2, [r4, #0x16]
|
|
add r3, r3, r2
|
|
cmp r3, r1
|
|
ldrsh r2, [r4, #0x10]
|
|
movle r1, r3
|
|
cmp r2, r1
|
|
ble _02326384
|
|
ldr r1, _02326400 ; =0x000003E7
|
|
cmp r3, r1
|
|
movgt r3, r1
|
|
strh r3, [r4, #0x10]
|
|
_02326384:
|
|
ldrsh r2, [r0, #0x12]
|
|
ldrsh r1, [r0, #0x16]
|
|
ldr r3, _02326400 ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r3
|
|
ldrsh r1, [r0, #0x10]
|
|
movle r3, r2
|
|
cmp r1, r3
|
|
ble _023263B8
|
|
ldr r1, _02326400 ; =0x000003E7
|
|
cmp r2, r1
|
|
movgt r2, r1
|
|
strh r2, [r0, #0x10]
|
|
_023263B8:
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r5
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
#ifdef JAPAN
|
|
ldrb r0, [r4, #0x107]
|
|
#else
|
|
ldrb r0, [r4, #0x108]
|
|
#endif
|
|
ldr r2, _02326404 ; =0x00000ECA
|
|
mov r1, r5
|
|
cmp r0, #1
|
|
movlo r0, #1
|
|
#ifdef JAPAN
|
|
strlob r0, [r4, #0x107]
|
|
#else
|
|
strlob r0, [r4, #0x108]
|
|
#endif
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #1
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02326400: .word 0x000003E7
|
|
#ifdef JAPAN
|
|
_02326404: .word 0x00000C0C
|
|
#else
|
|
_02326404: .word 0x00000ECA
|
|
#endif
|
|
arm_func_end DoMovePainSplit
|
|
|
|
arm_func_start DoMoveTorment
|
|
DoMoveTorment: ; 0x02326408
|
|
#ifdef JAPAN
|
|
#define DO_MOVE_TORMENT_OFFSET -4
|
|
#else
|
|
#define DO_MOVE_TORMENT_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #8
|
|
mov sb, r1
|
|
ldr r8, [sb, #0xb4]
|
|
mov r7, #0
|
|
mov sl, r0
|
|
mov r6, r7
|
|
add r5, r8, #0x124 + DO_MOVE_TORMENT_OFFSET
|
|
mov fp, #1
|
|
_0232642C:
|
|
ldrb r0, [r5, r6, lsl #3]
|
|
mov r4, r6, lsl #3
|
|
tst r0, #1
|
|
movne r0, fp
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _023264A0
|
|
ldrb r0, [r5, r4]
|
|
tst r0, #0x20
|
|
bne _02326494
|
|
tst r0, #0x10
|
|
beq _023264A0
|
|
bl GetMessageLogPreprocessorArgs
|
|
mov r1, #0
|
|
add r2, r5, r4
|
|
mov r3, r1
|
|
bl FormatMoveStringMore
|
|
ldr r2, _02326548 ; =0x00000ECB
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldrb r0, [r5, r4]
|
|
mov r7, #1
|
|
orr r0, r0, #0x20
|
|
strb r0, [r5, r4]
|
|
b _023264A0
|
|
_02326494:
|
|
tst r0, #0x10
|
|
biceq r0, r0, #0x20
|
|
streqb r0, [r5, r4]
|
|
_023264A0:
|
|
add r6, r6, #1
|
|
cmp r6, #4
|
|
blt _0232642C
|
|
ldrb r0, [r8, #0x144 + DO_MOVE_TORMENT_OFFSET]
|
|
tst r0, #0x20
|
|
bne _02326504
|
|
tst r0, #0x10
|
|
beq _02326510
|
|
add r0, sp, #0
|
|
mov r1, #0x160
|
|
bl InitMove
|
|
ldrb r0, [r8, #0x144 + DO_MOVE_TORMENT_OFFSET]
|
|
mov r7, #1
|
|
orr r0, r0, #0x20
|
|
strb r0, [r8, #0x144 + DO_MOVE_TORMENT_OFFSET]
|
|
bl GetMessageLogPreprocessorArgs
|
|
mov r1, #0
|
|
add r2, sp, #0
|
|
mov r3, r1
|
|
bl FormatMoveStringMore
|
|
ldr r2, _02326548 ; =0x00000ECB
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02326510
|
|
_02326504:
|
|
tst r0, #0x10
|
|
biceq r0, r0, #0x20
|
|
streqb r0, [r8, #0x144 + DO_MOVE_TORMENT_OFFSET]
|
|
_02326510:
|
|
cmp r7, #0
|
|
beq _0232652C
|
|
ldrb r0, [r8, #0xd2]
|
|
cmp r0, #1
|
|
moveq r0, #0
|
|
streqb r0, [r8, #0xd2]
|
|
b _0232653C
|
|
_0232652C:
|
|
ldr r2, _0232654C ; =0x00000ECC
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0232653C:
|
|
mov r0, r7
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02326548: .word 0x00000C0D
|
|
_0232654C: .word 0x00000C0E
|
|
#else
|
|
_02326548: .word 0x00000ECB
|
|
_0232654C: .word 0x00000ECC
|
|
#endif
|
|
arm_func_end DoMoveTorment
|
|
|
|
arm_func_start DoMoveStringShot
|
|
DoMoveStringShot: ; 0x02326550
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, r2
|
|
bl LowerSpeed
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveStringShot
|
|
|
|
arm_func_start DoMoveSwagger
|
|
DoMoveSwagger: ; 0x02326568
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r2, #1
|
|
mov r3, #0
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl TryInflictConfusedStatus
|
|
ldr r1, _023265A0 ; =ATK_STAT_IDX
|
|
mov r0, r5
|
|
ldr r2, [r1]
|
|
mov r1, r4
|
|
mov r3, #2
|
|
bl BoostOffensiveStat
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_023265A0: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveSwagger
|
|
|
|
arm_func_start DoMoveSnore
|
|
DoMoveSnore: ; 0x023265A4
|
|
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 IsMonsterSleeping
|
|
cmp r0, #0
|
|
beq _02326624
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, r6
|
|
mov r3, #0x100
|
|
str r5, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _02326634
|
|
ldr r1, _02326640 ; =SNORE_CRINGE_CHANCE
|
|
mov r0, r8
|
|
ldrsh r2, [r1]
|
|
mov r1, r7
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _02326634
|
|
mov r2, #0
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r3, r2
|
|
bl TryInflictCringeStatus
|
|
b _02326634
|
|
_02326624:
|
|
ldr r2, _02326644 ; =0x00000ECD
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02326634:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_02326640: .word SNORE_CRINGE_CHANCE
|
|
#ifdef JAPAN
|
|
_02326644: .word 0x00000C0F
|
|
#else
|
|
_02326644: .word 0x00000ECD
|
|
#endif
|
|
arm_func_end DoMoveSnore
|
|
|
|
arm_func_start DoMoveScreech
|
|
DoMoveScreech: ; 0x02326648
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _0232666C ; =ATK_STAT_IDX
|
|
mov ip, #1
|
|
ldr r2, [r2]
|
|
mov r3, #0x40
|
|
str ip, [sp]
|
|
bl ApplyDefensiveStatMultiplier
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0232666C: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveScreech
|
|
|
|
arm_func_start DoMoveDamageCringe30
|
|
DoMoveDamageCringe30: ; 0x02326670
|
|
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 _023266CC
|
|
ldr r1, _023266D8 ; =ROCK_SLIDE_CRINGE_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _023266CC
|
|
mov r2, #0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl TryInflictCringeStatus
|
|
_023266CC:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_023266D8: .word ROCK_SLIDE_CRINGE_CHANCE
|
|
arm_func_end DoMoveDamageCringe30
|
|
|
|
arm_func_start DoMoveWeatherBall
|
|
DoMoveWeatherBall: ; 0x023266DC
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #8
|
|
mov r8, r0
|
|
mov r7, r1
|
|
mov r6, r2
|
|
mov r5, r3
|
|
bl GetApparentWeather
|
|
mov r4, r0
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl EndFrozenStatus
|
|
ldr ip, _02326748 ; =WEATHER_BALL_DAMAGE_MULT_TABLE
|
|
ldr r2, _0232674C ; =WEATHER_BALL_TYPE_TABLE
|
|
ldr ip, [ip, r4, lsl #2]
|
|
ldrb r2, [r2, r4]
|
|
str ip, [sp]
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r3, r6
|
|
str r5, [sp, #4]
|
|
bl DealDamageWithType
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_02326748: .word WEATHER_BALL_DAMAGE_MULT_TABLE
|
|
_0232674C: .word WEATHER_BALL_TYPE_TABLE
|
|
arm_func_end DoMoveWeatherBall
|
|
|
|
arm_func_start DoMoveWhirlpool
|
|
DoMoveWhirlpool: ; 0x02326750
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
mov r5, r1
|
|
ldr r1, [r5, #0xb4]
|
|
mov r6, r0
|
|
ldrb r0, [r1, #0xd2]
|
|
mov r1, r5
|
|
mov r4, #0
|
|
cmp r0, #9
|
|
moveq ip, #0x200
|
|
movne ip, #0x100
|
|
str r3, [sp]
|
|
mov r0, r6
|
|
mov r3, ip
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _023267C8
|
|
ldr r1, _023267D4 ; =WHIRLPOOL_CONSTRICTION_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _023267C8
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0x3b
|
|
mov r3, #0
|
|
bl TryInflictConstrictionStatus
|
|
_023267C8:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_023267D4: .word WHIRLPOOL_CONSTRICTION_CHANCE
|
|
arm_func_end DoMoveWhirlpool
|
|
|
|
arm_func_start DoMoveFakeTears
|
|
DoMoveFakeTears: ; 0x023267D8
|
|
stmdb sp!, {r3, lr}
|
|
sub sp, sp, #8
|
|
ldr r2, _02326808 ; =SPATK_STAT_IDX
|
|
mov ip, #1
|
|
ldr r2, [r2]
|
|
str ip, [sp]
|
|
mov r3, #2
|
|
str ip, [sp, #4]
|
|
bl LowerDefensiveStat
|
|
mov r0, #1
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02326808: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveFakeTears
|
|
|
|
arm_func_start DoMoveSpite
|
|
DoMoveSpite: ; 0x0232680C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r5, r1
|
|
ldr r1, [r5, #0xb4]
|
|
mov r4, #0
|
|
#ifdef JAPAN
|
|
add lr, r1, #0x120
|
|
#else
|
|
add lr, r1, #0x124
|
|
#endif
|
|
mov ip, #1
|
|
mov r6, r0
|
|
mov r7, r4
|
|
mov r3, r4
|
|
mov r1, r4
|
|
mov r0, ip
|
|
_02326838:
|
|
ldrb r2, [lr, r7, lsl #3]
|
|
add r8, lr, r7, lsl #3
|
|
tst r2, #1
|
|
movne r2, ip
|
|
moveq r2, r3
|
|
tst r2, #0xff
|
|
beq _02326864
|
|
ldrb r2, [r8]
|
|
tst r2, #0x10
|
|
movne r4, r0
|
|
strneb r1, [r8, #6]
|
|
_02326864:
|
|
add r7, r7, #1
|
|
cmp r7, #4
|
|
blt _02326838
|
|
mov r1, r5
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
cmp r4, #0
|
|
beq _0232689C
|
|
#ifdef JAPAN
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0xc10
|
|
#else
|
|
ldr r2, _023268B4 ; =0x00000ECE
|
|
mov r0, r6
|
|
mov r1, r5
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _023268AC
|
|
_0232689C:
|
|
ldr r2, _023268B8 ; =0x00000ECF
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023268AC:
|
|
mov r0, r4
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_023268B8: .word 0x00000C11
|
|
#else
|
|
_023268B4: .word 0x00000ECE
|
|
_023268B8: .word 0x00000ECF
|
|
#endif
|
|
arm_func_end DoMoveSpite
|
|
|
|
arm_func_start DoMoveFocusEnergy
|
|
DoMoveFocusEnergy: ; 0x023268BC
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictFocusEnergyStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveFocusEnergy
|
|
|
|
arm_func_start DoMoveSmokescreen
|
|
DoMoveSmokescreen: ; 0x023268CC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r5, r0
|
|
ldr r1, _02326904 ; =SMOKESCREEN_TURN_RANGE
|
|
mov r0, r4
|
|
mov r2, #1
|
|
bl CalcStatusDuration
|
|
mov r2, r0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r3, #0
|
|
bl TryInflictWhifferStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02326904: .word SMOKESCREEN_TURN_RANGE
|
|
arm_func_end DoMoveSmokescreen
|
|
|
|
arm_func_start DoMoveMirrorMove
|
|
DoMoveMirrorMove: ; 0x02326908
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl EndFrozenStatus
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl TryInflictMirrorMoveStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DoMoveMirrorMove
|
|
|
|
arm_func_start DoMoveOverheat
|
|
DoMoveOverheat: ; 0x0232692C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov sb, r0
|
|
mov r8, r1
|
|
mov r7, r2
|
|
ldr r5, [sb, #0xb4]
|
|
mov r6, r3
|
|
mov r4, #0
|
|
bl EndFrozenStatus
|
|
mov r0, sb
|
|
mov r1, r8
|
|
mov r2, r7
|
|
mov r3, #0x100
|
|
str r6, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _02326988
|
|
mov r1, r4
|
|
mov r0, sb
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserAction
|
|
cmp r0, #0
|
|
movne r0, r4
|
|
#ifdef JAPAN
|
|
strneb r0, [r5, #0x15b]
|
|
#else
|
|
strneb r0, [r5, #0x15f]
|
|
#endif
|
|
_02326988:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
arm_func_end DoMoveOverheat
|
|
|
|
arm_func_start DoMoveAuroraBeam
|
|
DoMoveAuroraBeam: ; 0x02326990
|
|
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 _023269F8
|
|
ldr r1, _02326A04 ; =AURORA_BEAM_LOWER_ATTACK_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _023269F8
|
|
ldr r0, _02326A08 ; =ATK_STAT_IDX
|
|
mov ip, #0
|
|
ldr r2, [r0]
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, #0x80
|
|
str ip, [sp]
|
|
bl ApplyOffensiveStatMultiplier
|
|
_023269F8:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02326A04: .word AURORA_BEAM_LOWER_ATTACK_CHANCE
|
|
_02326A08: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveAuroraBeam
|
|
|
|
arm_func_start DoMoveMemento
|
|
DoMoveMemento: ; 0x02326A0C
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
mov r6, r0
|
|
ldr r2, _02326A6C ; =ATK_STAT_IDX
|
|
ldr r4, [r6, #0xb4]
|
|
mov ip, #1
|
|
strh ip, [r4, #0x10]
|
|
ldr r2, [r2]
|
|
mov r3, #0x40
|
|
mov r5, r1
|
|
str ip, [sp]
|
|
bl ApplyOffensiveStatMultiplier
|
|
ldr r0, _02326A70 ; =SPATK_STAT_IDX
|
|
mov ip, #1
|
|
ldr r2, [r0]
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, #0x40
|
|
str ip, [sp]
|
|
bl ApplyOffensiveStatMultiplier
|
|
mov r0, #1
|
|
#ifdef JAPAN
|
|
strb r0, [r4, #0x15a]
|
|
#else
|
|
strb r0, [r4, #0x15e]
|
|
#endif
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02326A6C: .word ATK_STAT_IDX
|
|
_02326A70: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveMemento
|
|
|
|
arm_func_start DoMoveOctazooka
|
|
DoMoveOctazooka: ; 0x02326A74
|
|
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 _02326AD4
|
|
ldr r1, _02326AE0 ; =OCTAZOOKA_LOWER_ACCURACY_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _02326AD4
|
|
ldr r1, _02326AE4 ; =ATK_STAT_IDX
|
|
mov r0, r6
|
|
ldr r2, [r1]
|
|
mov r1, r5
|
|
mov r3, #0
|
|
bl LowerHitChanceStat
|
|
_02326AD4:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02326AE0: .word OCTAZOOKA_LOWER_ACCURACY_CHANCE
|
|
_02326AE4: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveOctazooka
|
|
|
|
arm_func_start DoMoveFlatter
|
|
DoMoveFlatter: ; 0x02326AE8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r2, #1
|
|
mov r3, #0
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl TryInflictConfusedStatus
|
|
ldr r1, _02326B20 ; =SPATK_STAT_IDX
|
|
mov r0, r5
|
|
ldr r2, [r1]
|
|
mov r1, r4
|
|
mov r3, #1
|
|
bl BoostOffensiveStat
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02326B20: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveFlatter
|
|
|
|
arm_func_start DoMoveWillOWisp
|
|
DoMoveWillOWisp: ; 0x02326B24
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
mov r6, r0
|
|
mov r5, r1
|
|
bl GetFlashFireStatus
|
|
movs r4, r0
|
|
beq _02326B94
|
|
ldr r3, [r5, #0xb4]
|
|
#ifdef JAPAN
|
|
ldrb r0, [r3, #0x158]
|
|
#else
|
|
ldrb r0, [r3, #0x15c]
|
|
#endif
|
|
cmp r0, #0
|
|
bne _02326BAC
|
|
mov r0, #1
|
|
mov r1, r5
|
|
mov r2, #0
|
|
#ifdef JAPAN
|
|
strb r0, [r3, #0x158]
|
|
#else
|
|
strb r0, [r3, #0x15c]
|
|
#endif
|
|
bl SubstitutePlaceholderStringTags
|
|
cmp r4, #1
|
|
bne _02326B80
|
|
ldr r2, _02326BB8 ; =0x00000CDD
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02326BAC
|
|
_02326B80:
|
|
ldr r2, _02326BBC ; =0x00000CDC
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02326BAC
|
|
_02326B94:
|
|
mov r2, #0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, #1
|
|
str r2, [sp]
|
|
bl TryInflictBurnStatus
|
|
_02326BAC:
|
|
mov r0, #1
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02326BB8: .word 0x00000A1D
|
|
_02326BBC: .word 0x00000A1C
|
|
#else
|
|
_02326BB8: .word 0x00000CDD
|
|
_02326BBC: .word 0x00000CDC
|
|
#endif
|
|
arm_func_end DoMoveWillOWisp
|
|
|
|
arm_func_start DoMoveReturn
|
|
DoMoveReturn: ; 0x02326BC0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
sub sp, sp, #0x20
|
|
mov sb, r0
|
|
mov r4, r3
|
|
mov r8, r1
|
|
mov r7, r2
|
|
ldr lr, [sb, #0xb4]
|
|
mov r6, #1
|
|
mov ip, #0
|
|
ldr r3, _02326C98 ; =ov10_022C4C0C
|
|
ldr r0, _02326C9C ; =0x000003E7
|
|
b _02326C18
|
|
_02326BF0:
|
|
mov r5, ip, lsl #2
|
|
ldrsh r2, [r3, r5]
|
|
cmp r2, #0
|
|
blt _02326C20
|
|
ldrsh r1, [lr, #0xe]
|
|
cmp r1, r2
|
|
ldrlt r0, _02326CA0 ; =ov10_022C4C0E
|
|
ldrltsh r6, [r0, r5]
|
|
blt _02326C20
|
|
add ip, ip, #1
|
|
_02326C18:
|
|
cmp ip, r0
|
|
blt _02326BF0
|
|
_02326C20:
|
|
mov r0, r7
|
|
bl GetMoveType
|
|
mov r5, r0
|
|
ldrh r0, [r7, #4]
|
|
bl GetMoveCategory
|
|
mov r1, r4
|
|
mov r4, r0
|
|
mov r0, r7
|
|
bl GetDamageSourceWrapper
|
|
add r3, sp, #0x1c
|
|
stmia sp, {r3, r5}
|
|
str r4, [sp, #8]
|
|
mov r2, r6
|
|
str r0, [sp, #0xc]
|
|
mov r6, #0
|
|
str r6, [sp, #0x10]
|
|
mov r3, #1
|
|
str r3, [sp, #0x14]
|
|
mov r1, r8
|
|
mov r0, sb
|
|
str r6, [sp, #0x18]
|
|
bl CalcDamageFixedWrapper
|
|
ldrb r0, [sp, #0x1c]
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, r6
|
|
strb r0, [sp, #0x1c]
|
|
and r0, r0, #0xff
|
|
add sp, sp, #0x20
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_02326C98: .word ov10_022C4C0C
|
|
_02326C9C: .word 0x000003E7
|
|
_02326CA0: .word ov10_022C4C0E
|
|
arm_func_end DoMoveReturn
|
|
|
|
arm_func_start DoMoveGrudge
|
|
DoMoveGrudge: ; 0x02326CA4
|
|
ldr ip, _02326CB0 ; =TryInflictGrudgeStatus
|
|
mov r2, #1
|
|
bx ip
|
|
.align 2, 0
|
|
_02326CB0: .word TryInflictGrudgeStatus
|
|
arm_func_end DoMoveGrudge
|
|
|
|
arm_func_start DoMoveCounter
|
|
DoMoveCounter: ; 0x02326CB4
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #4
|
|
bl SetReflectStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveCounter
|
|
|
|
arm_func_start DoMoveDamageBurn10FlameWheel
|
|
DoMoveDamageBurn10FlameWheel: ; 0x02326CC8
|
|
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 _02326D40
|
|
ldr r1, _02326D4C ; =FLAME_WHEEL_BURN_CHANCE
|
|
mov r0, r8
|
|
ldrsh r2, [r1]
|
|
mov r1, r7
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _02326D40
|
|
mov r2, #0
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r3, r2
|
|
str r2, [sp]
|
|
bl TryInflictBurnStatus
|
|
_02326D40:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_02326D4C: .word FLAME_WHEEL_BURN_CHANCE
|
|
arm_func_end DoMoveDamageBurn10FlameWheel
|
|
|
|
arm_func_start DoMoveDamageBurn10
|
|
DoMoveDamageBurn10: ; 0x02326D50
|
|
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 _02326DC8
|
|
ldr r1, _02326DD4 ; =FLAMETHROWER_BURN_CHANCE
|
|
mov r0, r8
|
|
ldrsh r2, [r1]
|
|
mov r1, r7
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _02326DC8
|
|
mov r2, #0
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r3, r2
|
|
str r2, [sp]
|
|
bl TryInflictBurnStatus
|
|
_02326DC8:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_02326DD4: .word FLAMETHROWER_BURN_CHANCE
|
|
arm_func_end DoMoveDamageBurn10
|
|
|
|
arm_func_start DoMoveExpose
|
|
DoMoveExpose: ; 0x02326DD8
|
|
stmdb sp!, {r3, lr}
|
|
ldrh r3, [r2, #4]
|
|
ldr r2, _02326E00 ; =0x0000013B
|
|
cmp r3, r2
|
|
moveq r2, #0x7a
|
|
movne r2, #0x51
|
|
mov r3, #0
|
|
bl TryInflictExposedStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02326E00: .word 0x0000013B
|
|
arm_func_end DoMoveExpose
|
|
|
|
arm_func_start DoMoveDoubleTeam
|
|
DoMoveDoubleTeam: ; 0x02326E04
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _02326E1C ; =SPATK_STAT_IDX
|
|
ldr r2, [r2]
|
|
bl BoostHitChanceStat
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02326E1C: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveDoubleTeam
|
|
|
|
arm_func_start DoMoveGust
|
|
DoMoveGust: ; 0x02326E20
|
|
stmdb sp!, {r3, lr}
|
|
ldr ip, [r1, #0xb4]
|
|
mov lr, #1
|
|
ldrb ip, [ip, #0xd2]
|
|
add ip, ip, #0xf9
|
|
and ip, ip, #0xff
|
|
cmp ip, #1
|
|
movls lr, #2
|
|
str r3, [sp]
|
|
mov r3, lr, lsl #8
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveGust
|
|
|
|
arm_func_start DoMoveBoostDefense1
|
|
DoMoveBoostDefense1: ; 0x02326E60
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _02326E7C ; =ATK_STAT_IDX
|
|
mov r3, #1
|
|
ldr r2, [r2]
|
|
bl BoostDefensiveStat
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02326E7C: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveBoostDefense1
|
|
|
|
arm_func_start DoMoveParalyze__02326E80
|
|
DoMoveParalyze__02326E80: ; 0x02326E80
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl TryInflictParalysisStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveParalyze__02326E80
|
|
|
|
arm_func_start DoMoveBoostAttack1
|
|
DoMoveBoostAttack1: ; 0x02326E98
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _02326EB4 ; =ATK_STAT_IDX
|
|
mov r3, #1
|
|
ldr r2, [r2]
|
|
bl BoostOffensiveStat
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02326EB4: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveBoostAttack1
|
|
|
|
arm_func_start DoMoveRazorWind
|
|
DoMoveRazorWind: ; 0x02326EB8
|
|
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 _02326F14
|
|
ldr r1, _02326F40 ; =RAZOR_WIND_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 _02326F38
|
|
_02326F14:
|
|
ldr r0, _02326F44 ; =0x00000CCD
|
|
bl StringFromId
|
|
str r0, [sp]
|
|
mov r0, r7
|
|
mov r1, r7
|
|
mov r3, r5
|
|
mov r2, #4
|
|
bl ov29_02318BBC
|
|
mov r4, #1
|
|
_02326F38:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_02326F40: .word RAZOR_WIND_DAMAGE_MULTIPLIER
|
|
#ifdef JAPAN
|
|
_02326F44: .word 0x00000A0D
|
|
#else
|
|
_02326F44: .word 0x00000CCD
|
|
#endif
|
|
arm_func_end DoMoveRazorWind
|
|
|
|
arm_func_start DoMoveBide
|
|
DoMoveBide: ; 0x02326F48
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
mov r6, r0
|
|
ldr r0, _02326F88 ; =0x00000CCE
|
|
mov r5, r1
|
|
mov r4, r2
|
|
bl StringFromId
|
|
str r0, [sp]
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r4
|
|
mov r2, #1
|
|
bl ov29_02318BBC
|
|
mov r0, #1
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02326F88: .word 0x00000A0E
|
|
#else
|
|
_02326F88: .word 0x00000CCE
|
|
#endif
|
|
arm_func_end DoMoveBide
|
|
|
|
arm_func_start DoMoveBideUnleash
|
|
DoMoveBideUnleash: ; 0x02326F8C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #0x20
|
|
mov r3, #0
|
|
mov r6, r0
|
|
strb r3, [sp, #0x1c]
|
|
ldr r3, [r6, #0xb4]
|
|
ldr r0, _0232702C ; =0x000003E7
|
|
ldr r3, [r3, #0xb8]
|
|
mov r8, r2
|
|
mov r4, r3, lsl #1
|
|
cmp r0, r3, lsl #1
|
|
movlt r4, r0
|
|
mov r0, r8
|
|
mov r5, r1
|
|
bl GetMoveType
|
|
mov r7, r0
|
|
ldrh r0, [r8, #4]
|
|
bl GetMoveCategory
|
|
add r2, sp, #0x1c
|
|
stmia sp, {r2, r7}
|
|
str r0, [sp, #8]
|
|
ldr r1, _02327030 ; =0x0000023E
|
|
mov ip, #0
|
|
str r1, [sp, #0xc]
|
|
str ip, [sp, #0x10]
|
|
mov r3, #1
|
|
str r3, [sp, #0x14]
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, r4
|
|
str ip, [sp, #0x18]
|
|
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
|
|
_0232702C: .word 0x000003E7
|
|
_02327030: .word 0x0000023E
|
|
arm_func_end DoMoveBideUnleash
|
|
|
|
arm_func_start DoMoveCrunch
|
|
DoMoveCrunch: ; 0x02327034
|
|
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 _023270A0
|
|
ldr r1, _023270AC ; =CRUNCH_LOWER_DEFENSE_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _023270A0
|
|
ldr r0, _023270B0 ; =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
|
|
_023270A0:
|
|
mov r0, r4
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_023270AC: .word CRUNCH_LOWER_DEFENSE_CHANCE
|
|
_023270B0: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveCrunch
|
|
|
|
arm_func_start DoMoveDamageCringe20
|
|
DoMoveDamageCringe20: ; 0x023270B4
|
|
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 _02327110
|
|
ldr r1, _0232711C ; =BITE_CRINGE_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _02327110
|
|
mov r2, #0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl TryInflictCringeStatus
|
|
_02327110:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0232711C: .word BITE_CRINGE_CHANCE
|
|
arm_func_end DoMoveDamageCringe20
|
|
|
|
arm_func_start DoMoveDamageParalyze20
|
|
DoMoveDamageParalyze20: ; 0x02327120
|
|
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 _0232717C
|
|
ldr r1, _02327188 ; =THUNDER_PARALYZE_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _0232717C
|
|
mov r2, #0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl TryInflictParalysisStatus
|
|
_0232717C:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02327188: .word THUNDER_PARALYZE_CHANCE
|
|
arm_func_end DoMoveDamageParalyze20
|
|
|
|
arm_func_start DoMoveEndeavor
|
|
DoMoveEndeavor: ; 0x0232718C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
sub sp, sp, #0x20
|
|
mov r4, #0
|
|
mov sb, r0
|
|
strb r4, [sp, #0x1c]
|
|
mov r8, r1
|
|
ldr r1, [r8, #0xb4]
|
|
ldr r0, [sb, #0xb4]
|
|
ldrsh r1, [r1, #0x10]
|
|
ldrsh r0, [r0, #0x10]
|
|
mov r7, r2
|
|
mov r6, r3
|
|
subs r5, r1, r0
|
|
mov r0, r8
|
|
movmi r5, r4
|
|
bl MirrorMoveIsActive
|
|
cmp r0, #0
|
|
mov r0, r7
|
|
movne r8, sb
|
|
bl GetMoveType
|
|
mov r4, r0
|
|
ldrh r0, [r7, #4]
|
|
bl GetMoveCategory
|
|
mov r1, r6
|
|
mov r6, r0
|
|
mov r0, r7
|
|
bl GetDamageSourceWrapper
|
|
mov r2, r5
|
|
add r5, sp, #0x1c
|
|
str r5, [sp]
|
|
stmib sp, {r4, r6}
|
|
str r0, [sp, #0xc]
|
|
mov r3, #0
|
|
str r3, [sp, #0x10]
|
|
mov r4, #1
|
|
str r4, [sp, #0x14]
|
|
mov r1, r8
|
|
mov r0, sb
|
|
str r3, [sp, #0x18]
|
|
bl CalcDamageFixedWrapper
|
|
ldrb r0, [sp, #0x1c]
|
|
cmp r0, #0
|
|
moveq r0, r4
|
|
movne r0, #0
|
|
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 DoMoveEndeavor
|
|
|
|
arm_func_start DoMoveFacade
|
|
DoMoveFacade: ; 0x0232724C
|
|
stmdb sp!, {r3, lr}
|
|
ldr ip, [r0, #0xb4]
|
|
mov lr, #0x100
|
|
ldrb ip, [ip, #0xbf]
|
|
cmp ip, #0
|
|
ldrne ip, _02327288 ; =FACADE_DAMAGE_MULTIPLIER
|
|
str r3, [sp]
|
|
ldrne lr, [ip]
|
|
mov r3, lr
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02327288: .word FACADE_DAMAGE_MULTIPLIER
|
|
arm_func_end DoMoveFacade
|
|
|
|
arm_func_start DoMoveDamageLowerSpeed20
|
|
DoMoveDamageLowerSpeed20: ; 0x0232728C
|
|
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 _023272E8
|
|
ldr r1, _023272F4 ; =CONSTRICT_LOWER_SPEED_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _023272E8
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, r4
|
|
mov r3, #0
|
|
bl LowerSpeed
|
|
_023272E8:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_023272F4: .word CONSTRICT_LOWER_SPEED_CHANCE
|
|
arm_func_end DoMoveDamageLowerSpeed20
|
|
|
|
arm_func_start DoMoveBrickBreak
|
|
DoMoveBrickBreak: ; 0x023272F8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
ldr r5, [r6, #0xb4]
|
|
mov r7, r0
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, r4
|
|
orr r0, r4, r0
|
|
ands r4, r0, #0xff
|
|
beq _0232735C
|
|
ldrb r0, [r5, #0xd5]
|
|
cmp r0, #1
|
|
cmpne r0, #3
|
|
bne _0232735C
|
|
ldr r2, _02327364 ; =0x00000ED2
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl EndReflectClassStatus
|
|
_0232735C:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02327364: .word 0x00000C14
|
|
#else
|
|
_02327364: .word 0x00000ED2
|
|
#endif
|
|
arm_func_end DoMoveBrickBreak
|
|
|
|
arm_func_start DoMoveDamageLowerSpeed100
|
|
DoMoveDamageLowerSpeed100: ; 0x02327368
|
|
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 _023273C0
|
|
mov r2, r4
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _023273C0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, r4
|
|
mov r3, #0
|
|
bl LowerSpeed
|
|
_023273C0:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
arm_func_end DoMoveDamageLowerSpeed100
|
|
|
|
arm_func_start DoMoveFocusPunch
|
|
DoMoveFocusPunch: ; 0x023273CC
|
|
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 _02327428
|
|
ldr r1, _02327454 ; =FOCUS_PUNCH_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 _0232744C
|
|
_02327428:
|
|
#ifdef JAPAN
|
|
mov r0, #0xa10
|
|
#else
|
|
mov r0, #0xcd0
|
|
#endif
|
|
bl StringFromId
|
|
str r0, [sp]
|
|
mov r0, r7
|
|
mov r1, r7
|
|
mov r3, r5
|
|
mov r2, #5
|
|
bl ov29_02318BBC
|
|
mov r4, #1
|
|
_0232744C:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_02327454: .word FOCUS_PUNCH_DAMAGE_MULTIPLIER
|
|
arm_func_end DoMoveFocusPunch
|
|
|
|
arm_func_start DoMoveDamageDrain
|
|
DoMoveDamageDrain: ; 0x02327458
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov sb, r0
|
|
mov r8, r1
|
|
mov r7, r2
|
|
mov r5, r3
|
|
cmp sb, r8
|
|
mov r4, #0
|
|
beq _023274B8
|
|
cmp sb, #0
|
|
moveq r0, r4
|
|
beq _02327498
|
|
ldr r0, [sb]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
movne r0, r4
|
|
and r0, r0, #0xff
|
|
_02327498:
|
|
cmp r0, #0
|
|
beq _023274B8
|
|
mov r0, sb
|
|
mov r1, #0x53
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r6, #0
|
|
bne _023274C8
|
|
_023274B8:
|
|
mov r0, r8
|
|
mov r1, #0x3a
|
|
bl AbilityIsActiveVeneer
|
|
mov r6, r0
|
|
_023274C8:
|
|
mov r0, sb
|
|
mov r1, r8
|
|
mov r2, r7
|
|
mov r3, #0x100
|
|
str r5, [sp]
|
|
bl DealDamage
|
|
movs r5, r0
|
|
movne r4, #1
|
|
cmp r4, #0
|
|
beq _02327590
|
|
mov r0, sb
|
|
mov r1, #0
|
|
bl DungeonRandOutcomeUserAction
|
|
cmp r0, #0
|
|
beq _02327590
|
|
ldr r1, [sb, #0xb4]
|
|
add r0, r5, r5, lsr #31
|
|
mov r5, r0, asr #1
|
|
#ifdef JAPAN
|
|
ldrb r0, [r1, #0x107]
|
|
#else
|
|
ldrb r0, [r1, #0x108]
|
|
#endif
|
|
mov r4, #1
|
|
cmp r5, #1
|
|
movlt r5, r4
|
|
cmp r0, #1
|
|
movlo r0, #1
|
|
#ifdef JAPAN
|
|
strlob r0, [r1, #0x107]
|
|
#else
|
|
strlob r0, [r1, #0x108]
|
|
#endif
|
|
cmp r6, #0
|
|
beq _0232754C
|
|
mov r2, #0xd
|
|
mov r0, sb
|
|
mov r1, r5
|
|
add r3, r2, #0x22c
|
|
bl ApplyDamageAndEffectsWrapper
|
|
b _02327590
|
|
_0232754C:
|
|
ldr r1, [sb, #0xb4]
|
|
ldrb r0, [r1, #6]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _0232756C
|
|
#ifdef JAPAN
|
|
add r0, r1, #0x224
|
|
#else
|
|
add r0, r1, #0x228
|
|
#endif
|
|
mov r1, #0x57
|
|
bl ExclusiveItemEffectFlagTest
|
|
_0232756C:
|
|
cmp r0, #0
|
|
movne r5, r5, lsl #1
|
|
mov r6, #1
|
|
mov r0, sb
|
|
mov r1, sb
|
|
mov r2, r5
|
|
mov r3, #0
|
|
str r6, [sp]
|
|
bl TryIncreaseHp
|
|
_02327590:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
arm_func_end DoMoveDamageDrain
|
|
|
|
arm_func_start DoMoveReversal
|
|
DoMoveReversal: ; 0x02327598
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
ldr ip, [r0, #0xb4]
|
|
ldr r6, _02327644 ; =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 _0232761C
|
|
ldr r4, _02327644 ; =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 _0232761C
|
|
ldr r4, _02327644 ; =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
|
|
_0232761C:
|
|
ldr r4, _02327648 ; =REVERSAL_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
|
|
_02327644: .word 0x000003E7
|
|
_02327648: .word REVERSAL_DAMAGE_MULT_TABLE
|
|
arm_func_end DoMoveReversal
|
|
|
|
arm_func_start DoMoveSmellingSalt
|
|
DoMoveSmellingSalt: ; 0x0232764C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
ldr ip, [r4, #0xb4]
|
|
mov r5, r0
|
|
ldrb ip, [ip, #0xbf]
|
|
cmp ip, #4
|
|
str r3, [sp]
|
|
bne _02327694
|
|
mov r3, #0x200
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r2, #1
|
|
moveq r2, #0
|
|
mov r1, r4
|
|
mov r0, r5
|
|
and r4, r2, #0xff
|
|
bl EndBurnClassStatus
|
|
b _023276AC
|
|
_02327694:
|
|
mov r3, #0x100
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r4, r0, #0xff
|
|
_023276AC:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DoMoveSmellingSalt
|
|
|
|
arm_func_start DoMoveMetalSound
|
|
DoMoveMetalSound: ; 0x023276B4
|
|
stmdb sp!, {r3, lr}
|
|
sub sp, sp, #8
|
|
ldr r2, _023276E4 ; =SPATK_STAT_IDX
|
|
mov ip, #1
|
|
ldr r2, [r2]
|
|
str ip, [sp]
|
|
mov r3, #3
|
|
str ip, [sp, #4]
|
|
bl LowerDefensiveStat
|
|
mov r0, #1
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_023276E4: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveMetalSound
|
|
|
|
arm_func_start DoMoveTickle
|
|
DoMoveTickle: ; 0x023276E8
|
|
stmdb sp!, {r4, r5, lr}
|
|
sub sp, sp, #0xc
|
|
ldr r2, _02327740 ; =SPATK_STAT_IDX
|
|
mov r3, #1
|
|
ldr r2, [r2, #4]
|
|
str r3, [sp]
|
|
mov r5, r0
|
|
mov r4, r1
|
|
str r2, [sp, #8]
|
|
str r3, [sp, #4]
|
|
bl LowerOffensiveStat
|
|
add r0, sp, #8
|
|
mov r3, #1
|
|
ldr r2, [r0]
|
|
str r3, [sp]
|
|
mov r0, r5
|
|
mov r1, r4
|
|
str r3, [sp, #4]
|
|
bl LowerDefensiveStat
|
|
mov r0, #1
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, pc}
|
|
.align 2, 0
|
|
_02327740: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveTickle
|
|
|
|
arm_func_start DoMoveShadowHold
|
|
DoMoveShadowHold: ; 0x02327744
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #0
|
|
bl TryInflictShadowHoldStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveShadowHold
|
|
|
|
arm_func_start DoMoveHaze
|
|
DoMoveHaze: ; 0x02327758
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
bl TryResetStatChanges
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveHaze
|
|
|
|
arm_func_start DoMoveDamageMultihitFatigue
|
|
DoMoveDamageMultihitFatigue: ; 0x0232776C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r5, r0
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _023277AC
|
|
mov r1, r4
|
|
mov r0, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserAction
|
|
cmp r0, #0
|
|
ldrne r0, _023277B4 ; =MULTIHIT_FATIGUE_MOVE_USED
|
|
movne r1, r4
|
|
strneb r1, [r0]
|
|
_023277AC:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_023277B4: .word MULTIHIT_FATIGUE_MOVE_USED
|
|
arm_func_end DoMoveDamageMultihitFatigue
|
|
|
|
arm_func_start DoMoveDamageWeightDependent
|
|
DoMoveDamageWeightDependent: ; 0x023277B8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
ldr r1, [r6, #0xb4]
|
|
mov r7, r0
|
|
ldrsh r0, [r1, #4]
|
|
mov r5, r2
|
|
mov r4, r3
|
|
bl GetWeightMultiplier
|
|
mov r3, r0
|
|
mov r0, r7
|
|
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}
|
|
arm_func_end DoMoveDamageWeightDependent
|
|
|
|
arm_func_start DoMoveDamageBoostAllStats
|
|
DoMoveDamageBoostAllStats: ; 0x02327804
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #0xc
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r6, r0
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _023278D4
|
|
ldr r1, _023278E0 ; =SILVER_WIND_BOOST_CHANCE
|
|
mov r0, r6
|
|
ldrsh r1, [r1]
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserAction
|
|
cmp r0, #0
|
|
beq _023278D4
|
|
mov r0, r6
|
|
mov r1, r6
|
|
mov r2, #0
|
|
mov r3, r4
|
|
ldr r5, [r6, #0xb4]
|
|
bl BoostSpeedOneStage
|
|
ldr r1, _023278E4 ; =SPATK_STAT_IDX
|
|
mov r0, r6
|
|
ldr r2, [r1, #4]
|
|
mov r1, r6
|
|
mov r3, r4
|
|
str r2, [sp, #8]
|
|
bl BoostOffensiveStat
|
|
ldr r1, _023278E4 ; =SPATK_STAT_IDX
|
|
mov r0, r6
|
|
ldr r2, [r1]
|
|
mov r1, r6
|
|
mov r3, r4
|
|
str r2, [sp, #4]
|
|
bl BoostOffensiveStat
|
|
add r2, sp, #8
|
|
ldr r2, [r2]
|
|
mov r0, r6
|
|
mov r1, r6
|
|
mov r3, r4
|
|
bl BoostDefensiveStat
|
|
add r2, sp, #4
|
|
ldr r2, [r2]
|
|
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
|
|
_023278D4:
|
|
mov r0, r4
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_023278E0: .word SILVER_WIND_BOOST_CHANCE
|
|
_023278E4: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveDamageBoostAllStats
|
|
|
|
arm_func_start DoMoveSynthesis
|
|
DoMoveSynthesis: ; 0x023278E8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl GetApparentWeather
|
|
mov ip, #1
|
|
ldr r1, _02327924 ; =SYNTHESIS_HP_RESTORATION_TABLE
|
|
mov r0, r0, lsl #1
|
|
ldrsh r2, [r1, r0]
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r3, #0
|
|
str ip, [sp]
|
|
bl TryIncreaseHp
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02327924: .word SYNTHESIS_HP_RESTORATION_TABLE
|
|
arm_func_end DoMoveSynthesis
|
|
|
|
arm_func_start DoMoveBoostSpeed1
|
|
DoMoveBoostSpeed1: ; 0x02327928
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #0
|
|
mov r3, #1
|
|
bl BoostSpeedOneStage
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveBoostSpeed1
|
|
|
|
arm_func_start DoMoveRapidSpin
|
|
DoMoveRapidSpin: ; 0x02327940
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r5, r0
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _023279A0
|
|
mov r1, r4
|
|
mov r0, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserAction
|
|
cmp r0, #0
|
|
beq _023279A0
|
|
ldr r0, [r5, #0xb4]
|
|
add r0, r0, #0x100
|
|
#ifdef JAPAN
|
|
ldrh r0, [r0, #0x8e]
|
|
#else
|
|
ldrh r0, [r0, #0x92]
|
|
#endif
|
|
tst r0, #2
|
|
ldrne r0, _023279A8 ; =RAPID_SPIN_BINDING_REMOVAL
|
|
movne r1, #0
|
|
strneb r1, [r0]
|
|
ldreq r0, _023279A8 ; =RAPID_SPIN_BINDING_REMOVAL
|
|
moveq r1, r4
|
|
streqb r1, [r0]
|
|
_023279A0:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_023279A8: .word RAPID_SPIN_BINDING_REMOVAL
|
|
arm_func_end DoMoveRapidSpin
|
|
|
|
arm_func_start DoMoveSureShot
|
|
DoMoveSureShot: ; 0x023279AC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r5, r0
|
|
ldr r1, _023279E0 ; =SURE_SHOT_TURN_RANGE
|
|
mov r0, r4
|
|
mov r2, #0
|
|
bl CalcStatusDuration
|
|
mov r2, r0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl TryInflictSureShotStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_023279E0: .word SURE_SHOT_TURN_RANGE
|
|
arm_func_end DoMoveSureShot
|
|
|
|
arm_func_start DoMoveCosmicPower
|
|
DoMoveCosmicPower: ; 0x023279E4
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r2, _02327A20 ; =ATK_STAT_IDX
|
|
mov r3, #1
|
|
ldr r2, [r2]
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl BoostDefensiveStat
|
|
ldr r1, _02327A24 ; =SPATK_STAT_IDX
|
|
mov r0, r5
|
|
ldr r2, [r1]
|
|
mov r1, r4
|
|
mov r3, #1
|
|
bl BoostDefensiveStat
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02327A20: .word ATK_STAT_IDX
|
|
_02327A24: .word SPATK_STAT_IDX
|
|
arm_func_end DoMoveCosmicPower
|
|
|
|
arm_func_start DoMoveSkyAttack
|
|
DoMoveSkyAttack: ; 0x02327A28
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #4
|
|
mov r6, r2
|
|
mov r7, r1
|
|
mov r1, r6
|
|
mov r8, r0
|
|
mov r5, r3
|
|
mov r4, #0
|
|
bl IsChargingTwoTurnMove
|
|
cmp r0, #0
|
|
beq _02327AB8
|
|
ldr r1, _02327AE8 ; =SKY_ATTACK_DAMAGE_MULTIPLIER
|
|
mov r0, r8
|
|
ldr r3, [r1]
|
|
mov r1, r7
|
|
mov r2, r6
|
|
str r5, [sp]
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _02327AAC
|
|
ldr r1, _02327AEC ; =SKY_ATTACK_CRINGE_CHANCE
|
|
mov r0, r8
|
|
ldrsh r2, [r1]
|
|
mov r1, r7
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _02327AAC
|
|
mov r2, #0
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r3, r2
|
|
bl TryInflictCringeStatus
|
|
_02327AAC:
|
|
mov r0, r8
|
|
bl ov29_02318D58
|
|
b _02327ADC
|
|
_02327AB8:
|
|
ldr r0, _02327AF0 ; =0x00000CD1
|
|
bl StringFromId
|
|
str r0, [sp]
|
|
mov r0, r8
|
|
mov r1, r8
|
|
mov r3, r6
|
|
mov r2, #3
|
|
bl ov29_02318BBC
|
|
mov r4, #1
|
|
_02327ADC:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_02327AE8: .word SKY_ATTACK_DAMAGE_MULTIPLIER
|
|
_02327AEC: .word SKY_ATTACK_CRINGE_CHANCE
|
|
#ifdef JAPAN
|
|
_02327AF0: .word 0x00000A11
|
|
#else
|
|
_02327AF0: .word 0x00000CD1
|
|
#endif
|
|
arm_func_end DoMoveSkyAttack
|
|
|
|
arm_func_start DoMoveDamageFreeze15
|
|
DoMoveDamageFreeze15: ; 0x02327AF4
|
|
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 _02327B4C
|
|
ldr r1, _02327B58 ; =POWDER_SNOW_FREEZE_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _02327B4C
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0
|
|
bl TryInflictFrozenStatus
|
|
_02327B4C:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02327B58: .word POWDER_SNOW_FREEZE_CHANCE
|
|
arm_func_end DoMoveDamageFreeze15
|
|
|
|
arm_func_start DoMoveMeteorMash
|
|
DoMoveMeteorMash: ; 0x02327B5C
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r6, r0
|
|
#ifdef EUROPE
|
|
mov r5, r1
|
|
#endif
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _02327BCC
|
|
ldr r1, _02327BD8 ; =METEOR_MASH_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 _02327BCC
|
|
ldr r0, _02327BDC ; =ATK_STAT_IDX
|
|
ldr r5, [r6, #0xb4]
|
|
ldr r2, [r0]
|
|
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
|
|
_02327BCC:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02327BD8: .word METEOR_MASH_BOOST_ATTACK_CHANCE
|
|
_02327BDC: .word ATK_STAT_IDX
|
|
arm_func_end DoMoveMeteorMash
|
|
|
|
arm_func_start DoMoveEndure
|
|
DoMoveEndure: ; 0x02327BE0
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictEndureStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveEndure
|
|
|
|
arm_func_start DoMoveLowerSpeed1
|
|
DoMoveLowerSpeed1: ; 0x02327BF0
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, r2
|
|
bl LowerSpeed
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveLowerSpeed1
|
|
|
|
arm_func_start DoMoveDamageConfuse10
|
|
DoMoveDamageConfuse10: ; 0x02327C08
|
|
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 _02327C64
|
|
ldr r1, _02327C70 ; =PSYBEAM_CONFUSE_CHANCE
|
|
mov r0, r6
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _02327C64
|
|
mov r2, #0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl TryInflictConfusedStatus
|
|
_02327C64:
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02327C70: .word PSYBEAM_CONFUSE_CHANCE
|
|
arm_func_end DoMoveDamageConfuse10
|
|
|
|
arm_func_start DoMovePsywave
|
|
DoMovePsywave: ; 0x02327C74
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r0, #0x80
|
|
mov r1, #0x180
|
|
mov r5, r2
|
|
mov r4, r3
|
|
bl DungeonRandRange
|
|
ldr r1, [r7, #0xb4]
|
|
mov r2, r5
|
|
ldrb r1, [r1, #0xa]
|
|
mul r1, r0, r1
|
|
movs r3, r1, asr #8
|
|
movmi r3, #1
|
|
cmp r3, #0xc7
|
|
movgt r3, #0xc7
|
|
mov r0, r7
|
|
mov r1, r6
|
|
str r4, [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}
|
|
arm_func_end DoMovePsywave
|
|
|
|
arm_func_start DoMoveDamageLowerDefensiveStatVariable
|
|
DoMoveDamageLowerDefensiveStatVariable: ; 0x02327CD8
|
|
stmdb sp!, {r0, r1, r2, r3}
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #8
|
|
ldr ip, [sp, #0x30]
|
|
mov r3, #0x100
|
|
mov r6, r0
|
|
mov r5, r1
|
|
str ip, [sp]
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _02327D4C
|
|
ldrsh r2, [sp, #0x2c]
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserTargetInteraction
|
|
cmp r0, #0
|
|
beq _02327D4C
|
|
add r0, sp, #0x24
|
|
mov ip, r4
|
|
ldr r2, [r0]
|
|
str ip, [sp]
|
|
mov ip, #0
|
|
ldrsh r3, [sp, #0x28]
|
|
mov r0, r6
|
|
mov r1, r5
|
|
str ip, [sp, #4]
|
|
bl LowerDefensiveStat
|
|
_02327D4C:
|
|
mov r0, r4
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, r5, r6, lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
arm_func_end DoMoveDamageLowerDefensiveStatVariable
|
|
|
|
arm_func_start DoMovePsychoBoost
|
|
DoMovePsychoBoost: ; 0x02327D60
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
sub sp, sp, #8
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r5, r0
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _02327DC0
|
|
mov r1, r4
|
|
mov r0, r5
|
|
mov r4, #1
|
|
bl DungeonRandOutcomeUserAction
|
|
cmp r0, #0
|
|
beq _02327DC0
|
|
ldr r0, _02327DCC ; =SPATK_STAT_IDX
|
|
mov ip, #0
|
|
ldr r2, [r0]
|
|
str ip, [sp]
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r3, #2
|
|
str ip, [sp, #4]
|
|
bl LowerOffensiveStat
|
|
_02327DC0:
|
|
mov r0, r4
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02327DCC: .word SPATK_STAT_IDX
|
|
arm_func_end DoMovePsychoBoost
|
|
|
|
arm_func_start DoMoveUproar
|
|
DoMoveUproar: ; 0x02327DD0
|
|
stmdb sp!, {r3, lr}
|
|
bl TryInflictSleeplessStatus
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DoMoveUproar
|
|
|
|
arm_func_start DoMoveWaterSpout
|
|
DoMoveWaterSpout: ; 0x02327DE0
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
ldr ip, [r0, #0xb4]
|
|
ldr r6, _02327E8C ; =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 _02327E64
|
|
ldr r4, _02327E8C ; =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 _02327E64
|
|
ldr r4, _02327E8C ; =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
|
|
_02327E64:
|
|
ldr r4, _02327E90 ; =WATER_SPOUT_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
|
|
_02327E8C: .word 0x000003E7
|
|
_02327E90: .word WATER_SPOUT_DAMAGE_MULT_TABLE
|
|
arm_func_end DoMoveWaterSpout
|
|
|
|
arm_func_start DoMovePsychUp
|
|
DoMovePsychUp: ; 0x02327E94
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r0, r6
|
|
ldr r5, [r7, #0xb4]
|
|
ldr r4, [r6, #0xb4]
|
|
bl ov29_022E5474
|
|
mov r0, #0
|
|
_02327EB4:
|
|
add lr, r4, r0, lsl #1
|
|
ldrsh r1, [lr, #0x24]
|
|
add ip, r5, r0, lsl #1
|
|
add r3, r4, r0, lsl #2
|
|
strh r1, [ip, #0x24]
|
|
ldrsh r1, [lr, #0x28]
|
|
add r2, r5, r0, lsl #2
|
|
add r0, r0, #1
|
|
strh r1, [ip, #0x28]
|
|
ldrsh r1, [lr, #0x2c]
|
|
cmp r0, #2
|
|
strh r1, [ip, #0x2c]
|
|
ldr r1, [r3, #0x34]
|
|
str r1, [r2, #0x34]
|
|
ldr r1, [r3, #0x3c]
|
|
str r1, [r2, #0x3c]
|
|
blt _02327EB4
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _02327F30 ; =0x00000D62
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
#ifdef JAPAN
|
|
ldrb r0, [r5, #0x107]
|
|
cmp r0, #1
|
|
movlo r0, #1
|
|
strlob r0, [r5, #0x107]
|
|
#else
|
|
ldrb r0, [r5, #0x108]
|
|
cmp r0, #1
|
|
movlo r0, #1
|
|
strlob r0, [r5, #0x108]
|
|
#endif
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02327F30: .word 0x00000AA2
|
|
#else
|
|
_02327F30: .word 0x00000D62
|
|
#endif
|
|
arm_func_end DoMovePsychUp
|
|
|
|
arm_func_start DoMoveDamageWithRecoil
|
|
DoMoveDamageWithRecoil: ; 0x02327F34
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
sub sp, sp, #0x18
|
|
str r3, [sp]
|
|
mov r3, #0x100
|
|
mov r7, r0
|
|
mov r6, r2
|
|
mov r4, #0
|
|
bl DealDamage
|
|
cmp r0, #0
|
|
beq _02327FFC
|
|
mov r0, r7
|
|
bl EntityIsValidMoveEffects__0232800C
|
|
cmp r0, #0
|
|
beq _02327FFC
|
|
ldr r1, [r7, #0xb4]
|
|
ldr r0, _02328008 ; =0x000003E7
|
|
ldrsh r2, [r1, #0x12]
|
|
ldrsh r1, [r1, #0x16]
|
|
mov r4, #1
|
|
add r1, r2, r1
|
|
cmp r1, r0
|
|
movgt r1, r0
|
|
mov r0, r1, asr #2
|
|
add r0, r1, r0, lsr #29
|
|
movs r5, r0, asr #3
|
|
mov r0, r7
|
|
mov r1, #7
|
|
moveq r5, #1
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _02327FFC
|
|
mov r0, r7
|
|
mov r1, #0
|
|
bl DungeonRandOutcomeUserAction
|
|
cmp r0, #0
|
|
beq _02327FFC
|
|
ldrh r1, [r6, #4]
|
|
mov r2, #0
|
|
mov r0, #0x23c
|
|
stmia sp, {r1, r2}
|
|
str r0, [sp, #8]
|
|
mov r0, #0x14
|
|
str r0, [sp, #0xc]
|
|
mov r0, r4
|
|
str r0, [sp, #0x10]
|
|
mov r0, r7
|
|
mov r1, r5
|
|
mov r3, r2
|
|
str r2, [sp, #0x14]
|
|
bl CalcRecoilDamageFixed
|
|
_02327FFC:
|
|
mov r0, r4
|
|
add sp, sp, #0x18
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_02328008: .word 0x000003E7
|
|
arm_func_end DoMoveDamageWithRecoil
|