mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-25 15:42:34 -05:00
4093 lines
80 KiB
ArmAsm
4093 lines
80 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_02311C28.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start ov29_02311C28
|
|
ov29_02311C28: ; 0x02311C28
|
|
stmdb sp!, {r3, lr}
|
|
ldrb ip, [sp, #8]
|
|
str ip, [sp]
|
|
bl IsProtectedFromSleepClassStatus
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_02311C28
|
|
|
|
arm_func_start TryInflictNightmareStatus
|
|
TryInflictNightmareStatus: ; 0x02311C4C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #4
|
|
mov r8, r2
|
|
mov r2, #1
|
|
mov r3, r2
|
|
mov r7, r0
|
|
mov r6, r1
|
|
str r2, [sp]
|
|
mov r4, #0
|
|
bl IsProtectedFromSleepClassStatus
|
|
cmp r0, #0
|
|
bne _02311D4C
|
|
ldr r5, [r6, #0xb4]
|
|
ldrb r0, [r5, #0xbd]
|
|
cmp r0, #2
|
|
beq _02311D34
|
|
mov r0, r6
|
|
bl ov29_022E4B8C
|
|
ldrb r0, [r5, #0xbd]
|
|
cmp r0, #3
|
|
beq _02311CE0
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, #0x2f
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
strb r8, [r5, #0xbe]
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _02311CE4
|
|
ldrb r0, [r5, #0xbe]
|
|
mov r1, r0, asr #1
|
|
and r0, r1, #0xff
|
|
cmp r0, #1
|
|
strb r1, [r5, #0xbe]
|
|
movlo r0, #1
|
|
strlob r0, [r5, #0xbe]
|
|
b _02311CE4
|
|
_02311CE0:
|
|
mov r4, #1
|
|
_02311CE4:
|
|
mov r2, #3
|
|
mov r0, r6
|
|
mov r1, #8
|
|
strb r2, [r5, #0xbd]
|
|
bl ov29_02304A48
|
|
cmp r4, #0
|
|
beq _02311D14
|
|
ldr r2, _02311D54 ; =0x00000D0D
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02311D44
|
|
_02311D14:
|
|
ldr r2, _02311D58 ; =0x00000D0C
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl TryActivateQuickFeet
|
|
b _02311D44
|
|
_02311D34:
|
|
ldr r2, _02311D5C ; =0x00000D0E
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02311D44:
|
|
mov r0, r6
|
|
bl UpdateStatusIconFlags
|
|
_02311D4C:
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02311D54: .word 0x00000A4D
|
|
_02311D58: .word 0x00000A4C
|
|
_02311D5C: .word 0x00000A4E
|
|
#else
|
|
_02311D54: .word 0x00000D0D
|
|
_02311D58: .word 0x00000D0C
|
|
_02311D5C: .word 0x00000D0E
|
|
#endif
|
|
arm_func_end TryInflictNightmareStatus
|
|
|
|
arm_func_start TryInflictNappingStatus
|
|
TryInflictNappingStatus: ; 0x02311D60
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #4
|
|
mov r4, #0
|
|
mov r6, r2
|
|
mov r5, #1
|
|
mov r2, r4
|
|
mov r3, r4
|
|
mov r8, r0
|
|
mov r7, r1
|
|
str r5, [sp]
|
|
bl IsProtectedFromSleepClassStatus
|
|
cmp r0, #0
|
|
bne _02311E5C
|
|
ldr r5, [r7, #0xb4]
|
|
ldrb r0, [r5, #0xbd]
|
|
cmp r0, #2
|
|
beq _02311E44
|
|
mov r0, r7
|
|
bl ov29_022E4BA0
|
|
ldrb r0, [r5, #0xbd]
|
|
cmp r0, #0
|
|
cmpne r0, #4
|
|
bne _02311DFC
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, #0x2f
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
strb r6, [r5, #0xbe]
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _02311E00
|
|
ldrb r0, [r5, #0xbe]
|
|
mov r1, r0, asr #1
|
|
and r0, r1, #0xff
|
|
cmp r0, #1
|
|
strb r1, [r5, #0xbe]
|
|
movlo r0, #1
|
|
strlob r0, [r5, #0xbe]
|
|
b _02311E00
|
|
_02311DFC:
|
|
mov r4, #1
|
|
_02311E00:
|
|
mov r2, #5
|
|
mov r0, r7
|
|
mov r1, #8
|
|
strb r2, [r5, #0xbd]
|
|
bl ov29_02304A48
|
|
cmp r4, #0
|
|
beq _02311E30
|
|
ldr r2, _02311E64 ; =0x00000D08
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02311E54
|
|
_02311E30:
|
|
ldr r2, _02311E68 ; =0x00000D05
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02311E54
|
|
_02311E44:
|
|
ldr r2, _02311E6C ; =0x00000D0B
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02311E54:
|
|
mov r0, r7
|
|
bl UpdateStatusIconFlags
|
|
_02311E5C:
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02311E64: .word 0x00000A48
|
|
_02311E68: .word 0x00000A45
|
|
_02311E6C: .word 0x00000A4B
|
|
#else
|
|
_02311E64: .word 0x00000D08
|
|
_02311E68: .word 0x00000D05
|
|
_02311E6C: .word 0x00000D0B
|
|
#endif
|
|
arm_func_end TryInflictNappingStatus
|
|
|
|
arm_func_start TryInflictYawningStatus
|
|
TryInflictYawningStatus: ; 0x02311E70
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
mov r4, r2
|
|
mov r2, #1
|
|
mov r3, r2
|
|
mov r6, r0
|
|
mov r5, r1
|
|
str r2, [sp]
|
|
bl IsProtectedFromSleepClassStatus
|
|
cmp r0, #0
|
|
bne _02311F6C
|
|
ldr r1, [r5, #0xb4]
|
|
ldrb r0, [r1, #0xbd]
|
|
cmp r0, #0
|
|
bne _02311EEC
|
|
mov r0, #4
|
|
strb r0, [r1, #0xbd]
|
|
mov r0, r5
|
|
strb r4, [r1, #0xbe]
|
|
bl ov29_022E53EC
|
|
mov r0, r5
|
|
mov r1, #8
|
|
bl ov29_02304A48
|
|
ldr r2, _02311F74 ; =0x00000D0F
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl TryActivateQuickFeet
|
|
b _02311F64
|
|
_02311EEC:
|
|
cmp r0, #1
|
|
cmpne r0, #3
|
|
cmpne r0, #5
|
|
bne _02311F10
|
|
ldr r2, _02311F78 ; =0x00000D12
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02311F64
|
|
_02311F10:
|
|
cmp r0, #2
|
|
bne _02311F2C
|
|
mov r0, r6
|
|
mov r1, r5
|
|
#ifdef JAPAN
|
|
mov r2, #0xa50
|
|
#else
|
|
mov r2, #0xd10
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02311F64
|
|
_02311F2C:
|
|
cmp r0, #4
|
|
bne _02311F48
|
|
ldr r2, _02311F7C ; =0x00000D11
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02311F64
|
|
_02311F48:
|
|
ldr r2, _02311F74 ; =0x00000D0F
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl TryActivateQuickFeet
|
|
_02311F64:
|
|
mov r0, r5
|
|
bl UpdateStatusIconFlags
|
|
_02311F6C:
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02311F74: .word 0x00000A4F
|
|
_02311F78: .word 0x00000A52
|
|
_02311F7C: .word 0x00000A51
|
|
#else
|
|
_02311F74: .word 0x00000D0F
|
|
_02311F78: .word 0x00000D12
|
|
_02311F7C: .word 0x00000D11
|
|
#endif
|
|
arm_func_end TryInflictYawningStatus
|
|
|
|
arm_func_start TryInflictSleeplessStatus
|
|
TryInflictSleeplessStatus: ; 0x02311F80
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r0, r6
|
|
mov r4, #0
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r5, [r6, #0xb4]
|
|
mov r1, r6
|
|
ldrb r0, [r5, #0xbd]
|
|
cmp r0, #1
|
|
cmpne r0, #5
|
|
cmpne r0, #3
|
|
mov r0, #0
|
|
mov r2, r0
|
|
moveq r4, #1
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r0, [r5, #0xbd]
|
|
cmp r0, #2
|
|
beq _02312040
|
|
ldr r1, _0231205C ; =ov10_022C4728
|
|
mov r3, #2
|
|
mov r0, r6
|
|
mov r2, #0
|
|
strb r3, [r5, #0xbd]
|
|
bl CalcStatusDuration
|
|
add r0, r0, #1
|
|
strb r0, [r5, #0xbe]
|
|
mov r1, #0xff
|
|
#ifdef JAPAN
|
|
strb r1, [r5, #0x174]
|
|
mov r0, r6
|
|
strb r1, [r5, #0x173]
|
|
#else
|
|
strb r1, [r5, #0x178]
|
|
mov r0, r6
|
|
strb r1, [r5, #0x177]
|
|
#endif
|
|
bl ov29_022E4BB4
|
|
mov r0, r6
|
|
mov r1, #8
|
|
bl ov29_02304A48
|
|
cmp r4, #0
|
|
beq _0231202C
|
|
ldr r2, _02312060 ; =0x00000D13
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0231202C:
|
|
ldr r2, _02312064 ; =0x00000D15
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02312050
|
|
_02312040:
|
|
ldr r2, _02312068 ; =0x00000D14
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312050:
|
|
mov r0, r6
|
|
bl UpdateStatusIconFlags
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0231205C: .word ov10_022C4728
|
|
#ifdef JAPAN
|
|
_02312060: .word 0x00000A53
|
|
_02312064: .word 0x00000A55
|
|
_02312068: .word 0x00000A54
|
|
#else
|
|
_02312060: .word 0x00000D13
|
|
_02312064: .word 0x00000D15
|
|
_02312068: .word 0x00000D14
|
|
#endif
|
|
arm_func_end TryInflictSleeplessStatus
|
|
|
|
arm_func_start TryInflictPausedStatus
|
|
TryInflictPausedStatus: ; 0x0231206C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r0, r6
|
|
mov r4, r2
|
|
mov r5, r3
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
cmp r4, #0
|
|
ldr r4, [r6, #0xb4]
|
|
beq _023120BC
|
|
ldrb r2, [sp, #0x18]
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_023120BC:
|
|
ldrb r2, [sp, #0x18]
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldrb r0, [sp, #0x1c]
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
bl ov29_0234B034
|
|
mov r1, #0
|
|
mov r2, r4
|
|
mov r3, r1
|
|
str r1, [sp]
|
|
bl ov29_0230040C
|
|
ldrb r0, [r4, #0xd0]
|
|
cmp r0, #3
|
|
beq _02312160
|
|
mov r1, #3
|
|
mov r0, r6
|
|
strb r1, [r4, #0xd0]
|
|
add r1, r5, #1
|
|
strb r1, [r4, #0xd1]
|
|
bl ov29_022E4428
|
|
cmp r5, #1
|
|
bne _02312140
|
|
ldr r2, _0231219C ; =0x00000D16
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02312150
|
|
_02312140:
|
|
ldr r2, _023121A0 ; =0x00000D18
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312150:
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl TryActivateQuickFeet
|
|
b _0231218C
|
|
_02312160:
|
|
cmp r5, #1
|
|
bne _0231217C
|
|
ldr r2, _023121A4 ; =0x00000D17
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _0231218C
|
|
_0231217C:
|
|
ldr r2, _023121A8 ; =0x00000D19
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0231218C:
|
|
mov r0, r6
|
|
bl UpdateStatusIconFlags
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_PAUSED_STATUS_OFFSET -0x2C0
|
|
#else
|
|
#define TRY_INFLICT_PAUSED_STATUS_OFFSET 0
|
|
#endif
|
|
_0231219C: .word 0x00000D16 + TRY_INFLICT_PAUSED_STATUS_OFFSET
|
|
_023121A0: .word 0x00000D18 + TRY_INFLICT_PAUSED_STATUS_OFFSET
|
|
_023121A4: .word 0x00000D17 + TRY_INFLICT_PAUSED_STATUS_OFFSET
|
|
_023121A8: .word 0x00000D19 + TRY_INFLICT_PAUSED_STATUS_OFFSET
|
|
arm_func_end TryInflictPausedStatus
|
|
|
|
arm_func_start TryInflictInfatuatedStatus
|
|
TryInflictInfatuatedStatus: ; 0x023121AC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #4
|
|
mov r4, r1
|
|
mov r5, r0
|
|
mov r0, r4
|
|
mov r8, r2
|
|
mov r7, r3
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _0231231C
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, r8
|
|
ldr r6, [r4, #0xb4]
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _0231231C
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, r8
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _0231231C
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0x29
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _02312260
|
|
mov r0, #0
|
|
mov r1, r4
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
cmp r8, #0
|
|
beq _02312258
|
|
ldr r2, _02312324 ; =0x00000DA3
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312258:
|
|
mov r0, #0
|
|
b _0231231C
|
|
_02312260:
|
|
ldr r3, _02312328 ; =0x00000DBB
|
|
mov ip, #3
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, r8
|
|
str ip, [sp]
|
|
bl ExclusiveItemEffectIsActiveWithLogging
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _0231231C
|
|
cmp r7, #0
|
|
movne r0, #1
|
|
bne _0231231C
|
|
bl ov29_0234B034
|
|
mov r1, #0
|
|
mov r2, r6
|
|
mov r3, r1
|
|
str r1, [sp]
|
|
bl ov29_0230040C
|
|
ldrb r0, [r6, #0xd0]
|
|
cmp r0, #7
|
|
beq _02312300
|
|
ldr r1, _0231232C ; =ov10_022C4804
|
|
mov r3, #7
|
|
mov r0, r4
|
|
mov r2, #1
|
|
strb r3, [r6, #0xd0]
|
|
bl CalcStatusDuration
|
|
add r1, r0, #1
|
|
mov r0, r4
|
|
strb r1, [r6, #0xd1]
|
|
bl ov29_022E4C00
|
|
ldr r2, _02312330 ; =0x00000D1A
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl TryActivateQuickFeet
|
|
b _02312310
|
|
_02312300:
|
|
ldr r2, _02312334 ; =0x00000D1B
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312310:
|
|
mov r0, r4
|
|
bl UpdateStatusIconFlags
|
|
mov r0, #1
|
|
_0231231C:
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_INFATUATED_STATUS_OFFSET -0x2C0
|
|
#else
|
|
#define TRY_INFLICT_INFATUATED_STATUS_OFFSET 0
|
|
#endif
|
|
_02312324: .word 0x00000DA3 + TRY_INFLICT_INFATUATED_STATUS_OFFSET
|
|
_02312328: .word 0x00000DBB + TRY_INFLICT_INFATUATED_STATUS_OFFSET
|
|
_0231232C: .word ov10_022C4804
|
|
_02312330: .word 0x00000D1A + TRY_INFLICT_INFATUATED_STATUS_OFFSET
|
|
_02312334: .word 0x00000D1B + TRY_INFLICT_INFATUATED_STATUS_OFFSET
|
|
arm_func_end TryInflictInfatuatedStatus
|
|
|
|
arm_func_start TryInflictBurnStatus
|
|
TryInflictBurnStatus: ; 0x02312338
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sb, r1
|
|
mov sl, r0
|
|
mov r0, sb
|
|
mov r4, r2
|
|
mov r8, r3
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r8
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r8
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldr r7, [sb, #0xb4]
|
|
bl ov29_0234B034
|
|
mov r1, #0
|
|
mov r2, r7
|
|
mov r3, r1
|
|
str r1, [sp]
|
|
bl ov29_0230040C
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x42
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _023123F0
|
|
cmp r8, #0
|
|
beq _023123E8
|
|
ldr r2, _023125F0 ; =0x00000DAB
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023123E8:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_023123F0:
|
|
mov r0, sb
|
|
mov r1, #2
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
beq _02312424
|
|
cmp r8, #0
|
|
beq _0231241C
|
|
ldr r2, _023125F4 ; =0x00000DAC
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0231241C:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_02312424:
|
|
mov r0, sb
|
|
bl GetTileAtEntity
|
|
ldrh r0, [r0]
|
|
and r0, r0, #3
|
|
cmp r0, #2
|
|
bne _0231247C
|
|
ldr r0, _023125F8 ; =DUNGEON_PTR
|
|
ldr r1, _023125FC ; =SECONDARY_TERRAIN_TYPES
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x4000
|
|
#ifdef JAPAN
|
|
ldrsh r0, [r0, #0x30]
|
|
#else
|
|
ldrsh r0, [r0, #0xd4]
|
|
#endif
|
|
ldrb r0, [r1, r0]
|
|
cmp r0, #1
|
|
beq _0231247C
|
|
cmp r8, #0
|
|
beq _02312474
|
|
ldr r2, _02312600 ; =0x00000DB9
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312474:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0231247C:
|
|
ldrb r0, [sp, #0x28]
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldrb r0, [r7, #0xbf]
|
|
mov r5, #1
|
|
cmp r0, #1
|
|
beq _023124F4
|
|
ldr r1, _02312604 ; =ov10_022C4874
|
|
mov r0, sb
|
|
mov r2, r5
|
|
strb r5, [r7, #0xbf]
|
|
bl CalcStatusDuration
|
|
add r0, r0, #1
|
|
strb r0, [r7, #0xc0]
|
|
mov r5, #0
|
|
strb r5, [r7, #0xc1]
|
|
strb r5, [r7, #0xc2]
|
|
cmp r4, #0
|
|
beq _023124D4
|
|
mov r0, sb
|
|
bl ov29_022E4294
|
|
_023124D4:
|
|
ldr r2, _02312608 ; =0x00000D1C
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl TryActivateQuickFeet
|
|
b _02312504
|
|
_023124F4:
|
|
ldr r2, _0231260C ; =0x00000D1D
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312504:
|
|
mov r0, sb
|
|
bl UpdateStatusIconFlags
|
|
mov r0, sb
|
|
mov r1, #0x19
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _023125E8
|
|
cmp r5, #0
|
|
bne _023125E8
|
|
mov r5, #0
|
|
ldr fp, _02312610 ; =DIRECTIONS_XY
|
|
mov r4, r5
|
|
_02312534:
|
|
mov r1, r4, lsl #2
|
|
add r0, fp, r4, lsl #2
|
|
ldrsh r3, [fp, r1]
|
|
ldrsh r1, [r0, #2]
|
|
ldrsh r0, [sb, #4]
|
|
ldrsh r2, [sb, #6]
|
|
add r0, r0, r3
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldr r6, [r0, #0xc]
|
|
mov r0, r6
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _023125DC
|
|
ldr r0, [r6]
|
|
cmp r0, #1
|
|
bne _023125DC
|
|
cmp r5, #0
|
|
bne _023125AC
|
|
mov r5, #1
|
|
bl ov29_0234B034
|
|
mov r1, #0
|
|
mov r2, r7
|
|
mov r3, r1
|
|
str r1, [sp]
|
|
bl ov29_0230040C
|
|
ldr r2, _02312614 ; =0x00000DC5
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023125AC:
|
|
mov r0, sb
|
|
mov r1, r6
|
|
bl ov29_023018AC
|
|
cmp r0, #1
|
|
bne _023125DC
|
|
mov r2, #0
|
|
str r2, [sp]
|
|
mov r0, sl
|
|
mov r1, r6
|
|
mov r2, #1
|
|
mov r3, r8
|
|
bl TryInflictBurnStatus
|
|
_023125DC:
|
|
add r4, r4, #1
|
|
cmp r4, #8
|
|
blt _02312534
|
|
_023125E8:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_BURN_STATUS_OFFSET -0x2C0
|
|
#else
|
|
#define TRY_INFLICT_BURN_STATUS_OFFSET 0
|
|
#endif
|
|
_023125F0: .word 0x00000DAB + TRY_INFLICT_BURN_STATUS_OFFSET
|
|
_023125F4: .word 0x00000DAC + TRY_INFLICT_BURN_STATUS_OFFSET
|
|
_023125F8: .word DUNGEON_PTR
|
|
_023125FC: .word SECONDARY_TERRAIN_TYPES
|
|
_02312600: .word 0x00000DB9 + TRY_INFLICT_BURN_STATUS_OFFSET
|
|
_02312604: .word ov10_022C4874
|
|
_02312608: .word 0x00000D1C + TRY_INFLICT_BURN_STATUS_OFFSET
|
|
_0231260C: .word 0x00000D1D + TRY_INFLICT_BURN_STATUS_OFFSET
|
|
_02312610: .word DIRECTIONS_XY
|
|
_02312614: .word 0x00000DC5 + TRY_INFLICT_BURN_STATUS_OFFSET
|
|
arm_func_end TryInflictBurnStatus
|
|
|
|
arm_func_start TryInflictBurnStatusWholeTeam
|
|
TryInflictBurnStatusWholeTeam: ; 0x02312618
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, #0
|
|
ldr r4, _02312660 ; =DUNGEON_PTR
|
|
mov r6, r7
|
|
mov r5, #1
|
|
_0231262C:
|
|
ldr r0, [r4]
|
|
mov r2, r5
|
|
add r0, r0, r7, lsl #2
|
|
str r6, [sp]
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r0, [r0, #0xa84]
|
|
#else
|
|
ldr r0, [r0, #0xb28]
|
|
#endif
|
|
mov r3, r5
|
|
mov r1, r0
|
|
bl TryInflictBurnStatus
|
|
add r7, r7, #1
|
|
cmp r7, #4
|
|
blt _0231262C
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_02312660: .word DUNGEON_PTR
|
|
arm_func_end TryInflictBurnStatusWholeTeam
|
|
|
|
arm_func_start TryInflictPoisonedStatus
|
|
TryInflictPoisonedStatus: ; 0x02312664
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_POISONED_STATUS_OFFSET -0x2C0
|
|
#else
|
|
#define TRY_INFLICT_POISONED_STATUS_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sb, r1
|
|
mov sl, r0
|
|
mov r0, sb
|
|
mov r8, r2
|
|
mov r4, r3
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r8
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r8
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldr r7, [sb, #0xb4]
|
|
bl ov29_0234B034
|
|
mov r1, #0
|
|
mov r2, r7
|
|
mov r3, r1
|
|
str r1, [sp]
|
|
bl ov29_0230040C
|
|
mov r0, sb
|
|
mov r1, #0x1b
|
|
bl ItemIsActive__02311BF8
|
|
cmp r0, #0
|
|
beq _02312714
|
|
cmp r8, #0
|
|
beq _0231270C
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0xdb0 + TRY_INFLICT_POISONED_STATUS_OFFSET
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0231270C:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_02312714:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x45
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _02312750
|
|
cmp r8, #0
|
|
beq _02312748
|
|
ldr r2, _02312924 ; =0x00000DAD
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312748:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_02312750:
|
|
mov r0, sb
|
|
mov r1, #8
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
bne _02312778
|
|
mov r0, sb
|
|
mov r1, #0x11
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
beq _02312798
|
|
_02312778:
|
|
cmp r8, #0
|
|
beq _02312790
|
|
ldr r2, _02312928 ; =0x00000DAE
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312790:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_02312798:
|
|
cmp r4, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldrb r0, [r7, #0xbf]
|
|
mov r4, #1
|
|
cmp r0, #3
|
|
beq _02312830
|
|
cmp r0, #2
|
|
beq _0231281C
|
|
ldr r1, _0231292C ; =ov10_022C4878
|
|
mov r3, #2
|
|
mov r0, sb
|
|
mov r2, r4
|
|
strb r3, [r7, #0xbf]
|
|
bl CalcStatusDuration
|
|
add r0, r0, #1
|
|
strb r0, [r7, #0xc0]
|
|
mov r4, #0
|
|
strb r4, [r7, #0xc1]
|
|
mov r0, sb
|
|
strb r4, [r7, #0xc2]
|
|
bl ov29_022E4388
|
|
ldr r2, _02312930 ; =0x00000D1E
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, sb
|
|
mov r1, #8
|
|
bl ov29_02304A84
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl TryActivateQuickFeet
|
|
b _02312840
|
|
_0231281C:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0xd20 + TRY_INFLICT_POISONED_STATUS_OFFSET
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02312840
|
|
_02312830:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
add r2, r4, #0xd20 + TRY_INFLICT_POISONED_STATUS_OFFSET
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312840:
|
|
mov r0, sb
|
|
mov r1, #0x19
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _02312914
|
|
cmp r4, #0
|
|
bne _02312914
|
|
mov r5, #0
|
|
ldr fp, _02312934 ; =DIRECTIONS_XY
|
|
mov r4, r5
|
|
_02312868:
|
|
mov r1, r4, lsl #2
|
|
add r0, fp, r4, lsl #2
|
|
ldrsh r6, [sb, #4]
|
|
ldrsh r3, [fp, r1]
|
|
ldrsh r1, [r0, #2]
|
|
ldrsh r2, [sb, #6]
|
|
add r0, r6, r3
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldr r6, [r0, #0xc]
|
|
mov r0, r6
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _02312908
|
|
ldr r0, [r6]
|
|
cmp r0, #1
|
|
bne _02312908
|
|
cmp r5, #0
|
|
bne _023128E0
|
|
mov r5, #1
|
|
bl ov29_0234B034
|
|
mov r1, #0
|
|
mov r2, r7
|
|
mov r3, r1
|
|
str r1, [sp]
|
|
bl ov29_0230040C
|
|
ldr r2, _02312938 ; =0x00000DC5
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023128E0:
|
|
mov r0, sb
|
|
mov r1, r6
|
|
bl ov29_023018AC
|
|
cmp r0, #1
|
|
bne _02312908
|
|
mov r0, sl
|
|
mov r1, r6
|
|
mov r2, r8
|
|
mov r3, #0
|
|
bl TryInflictPoisonedStatus
|
|
_02312908:
|
|
add r4, r4, #1
|
|
cmp r4, #8
|
|
blt _02312868
|
|
_02312914:
|
|
mov r0, sb
|
|
bl UpdateStatusIconFlags
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_02312924: .word 0x00000DAD + TRY_INFLICT_POISONED_STATUS_OFFSET
|
|
_02312928: .word 0x00000DAE + TRY_INFLICT_POISONED_STATUS_OFFSET
|
|
_0231292C: .word ov10_022C4878
|
|
_02312930: .word 0x00000D1E + TRY_INFLICT_POISONED_STATUS_OFFSET
|
|
_02312934: .word DIRECTIONS_XY
|
|
_02312938: .word 0x00000DC5 + TRY_INFLICT_POISONED_STATUS_OFFSET
|
|
arm_func_end TryInflictPoisonedStatus
|
|
|
|
arm_func_start TryInflictBadlyPoisonedStatus
|
|
TryInflictBadlyPoisonedStatus: ; 0x0231293C
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET -0x2C0
|
|
#else
|
|
#define TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sb, r1
|
|
mov sl, r0
|
|
mov r0, sb
|
|
mov r8, r2
|
|
mov r4, r3
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r8
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r8
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldr r7, [sb, #0xb4]
|
|
bl ov29_0234B034
|
|
mov r1, #0
|
|
mov r2, r7
|
|
mov r3, r1
|
|
str r1, [sp]
|
|
bl ov29_0230040C
|
|
mov r0, sb
|
|
mov r1, #0x1b
|
|
bl ItemIsActive__02311BF8
|
|
cmp r0, #0
|
|
beq _023129EC
|
|
cmp r8, #0
|
|
beq _023129E4
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0xdb0 + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023129E4:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_023129EC:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x45
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _02312A28
|
|
cmp r8, #0
|
|
beq _02312A20
|
|
ldr r2, _02312BE0 ; =0x00000DAD
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312A20:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_02312A28:
|
|
mov r0, sb
|
|
mov r1, #8
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
bne _02312A50
|
|
mov r0, sb
|
|
mov r1, #0x11
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
beq _02312A70
|
|
_02312A50:
|
|
cmp r8, #0
|
|
beq _02312A68
|
|
ldr r2, _02312BE4 ; =0x00000DAE
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312A68:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_02312A70:
|
|
cmp r4, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldrb r0, [r7, #0xbf]
|
|
mov r4, #1
|
|
cmp r0, #3
|
|
beq _02312AEC
|
|
ldr r1, _02312BE8 ; =ov10_022C4880
|
|
mov r3, #3
|
|
mov r0, sb
|
|
mov r2, r4
|
|
strb r3, [r7, #0xbf]
|
|
bl CalcStatusDuration
|
|
add r0, r0, #1
|
|
strb r0, [r7, #0xc0]
|
|
mov r4, #0
|
|
strb r4, [r7, #0xc1]
|
|
mov r0, sb
|
|
strb r4, [r7, #0xc2]
|
|
bl ov29_022E43D8
|
|
ldr r2, _02312BEC ; =0x00000D1F
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, sb
|
|
mov r1, #8
|
|
bl ov29_02304A84
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl TryActivateQuickFeet
|
|
b _02312AFC
|
|
_02312AEC:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
add r2, r4, #0xd20 + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312AFC:
|
|
mov r0, sb
|
|
mov r1, #0x19
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _02312BD0
|
|
cmp r4, #0
|
|
bne _02312BD0
|
|
mov r5, #0
|
|
ldr fp, _02312BF0 ; =DIRECTIONS_XY
|
|
mov r4, r5
|
|
_02312B24:
|
|
mov r1, r4, lsl #2
|
|
add r0, fp, r4, lsl #2
|
|
ldrsh r6, [sb, #4]
|
|
ldrsh r3, [fp, r1]
|
|
ldrsh r1, [r0, #2]
|
|
ldrsh r2, [sb, #6]
|
|
add r0, r6, r3
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldr r6, [r0, #0xc]
|
|
mov r0, r6
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _02312BC4
|
|
ldr r0, [r6]
|
|
cmp r0, #1
|
|
bne _02312BC4
|
|
cmp r5, #0
|
|
bne _02312B9C
|
|
mov r5, #1
|
|
bl ov29_0234B034
|
|
mov r1, #0
|
|
mov r2, r7
|
|
mov r3, r1
|
|
str r1, [sp]
|
|
bl ov29_0230040C
|
|
ldr r2, _02312BF4 ; =0x00000DC5
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312B9C:
|
|
mov r0, sb
|
|
mov r1, r6
|
|
bl ov29_023018AC
|
|
cmp r0, #1
|
|
bne _02312BC4
|
|
mov r0, sl
|
|
mov r1, r6
|
|
mov r2, r8
|
|
mov r3, #0
|
|
bl TryInflictBadlyPoisonedStatus
|
|
_02312BC4:
|
|
add r4, r4, #1
|
|
cmp r4, #8
|
|
blt _02312B24
|
|
_02312BD0:
|
|
mov r0, sb
|
|
bl UpdateStatusIconFlags
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_02312BE0: .word 0x00000DAD + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET
|
|
_02312BE4: .word 0x00000DAE + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET
|
|
_02312BE8: .word ov10_022C4880
|
|
_02312BEC: .word 0x00000D1F + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET
|
|
_02312BF0: .word DIRECTIONS_XY
|
|
_02312BF4: .word 0x00000DC5 + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET
|
|
arm_func_end TryInflictBadlyPoisonedStatus
|
|
|
|
arm_func_start TryInflictFrozenStatus
|
|
TryInflictFrozenStatus: ; 0x02312BF8
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_FROZEN_STATUS_OFFSET -0x2C0
|
|
#else
|
|
#define TRY_INFLICT_FROZEN_STATUS_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r0, r6
|
|
mov r5, r2
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r4, [r6, #0xb4]
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov ip, #4
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
rsb r3, ip, #0xdc0 + TRY_INFLICT_FROZEN_STATUS_OFFSET
|
|
str ip, [sp]
|
|
bl ExclusiveItemEffectIsActiveWithLogging
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, #0x41
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _02312CC4
|
|
cmp r5, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r2, _02312E00 ; =0x00000DA8
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_02312CC4:
|
|
mov r0, r6
|
|
mov r1, #6
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
beq _02312CF4
|
|
cmp r5, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r2, _02312E04 ; =0x00000DA9
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_02312CF4:
|
|
mov r0, r6
|
|
bl GetTileAtEntity
|
|
ldrh r0, [r0]
|
|
and r0, r0, #3
|
|
cmp r0, #2
|
|
bne _02312D48
|
|
ldr r0, _02312E08 ; =DUNGEON_PTR
|
|
ldr r1, _02312E0C ; =SECONDARY_TERRAIN_TYPES
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x4000
|
|
#ifdef JAPAN
|
|
ldrsh r0, [r0, #0x30]
|
|
#else
|
|
ldrsh r0, [r0, #0xd4]
|
|
#endif
|
|
ldrb r0, [r1, r0]
|
|
cmp r0, #1
|
|
bne _02312D48
|
|
cmp r5, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r2, _02312E10 ; =0x00000DAA
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_02312D48:
|
|
mov ip, #4
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
rsb r3, ip, #0xdc0 + TRY_INFLICT_FROZEN_STATUS_OFFSET
|
|
str ip, [sp]
|
|
bl ExclusiveItemEffectIsActiveWithLogging
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldrb r0, [r4, #0xc4]
|
|
add r0, r0, #0xfd
|
|
and r0, r0, #0xff
|
|
cmp r0, #1
|
|
bhi _02312D88
|
|
ldr r0, [r4, #0xb4]
|
|
bl FreeOtherWrappedMonsters
|
|
_02312D88:
|
|
mov r0, r6
|
|
bl ov29_022E4C4C
|
|
mov r2, #1
|
|
ldr r1, _02312E14 ; =ov10_022C4870
|
|
mov r0, r6
|
|
strb r2, [r4, #0xc4]
|
|
bl CalcStatusDuration
|
|
add r3, r0, #1
|
|
strb r3, [r4, #0xcc]
|
|
mov r3, #0
|
|
ldr r2, _02312E18 ; =0x00000D22
|
|
mov r0, r7
|
|
mov r1, r6
|
|
strb r3, [r4, #0xcd]
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r6
|
|
bl UpdateStatusIconFlags
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl TryActivateQuickFeet
|
|
mov r0, r6
|
|
mov r1, #0
|
|
bl ChangeShayminForme
|
|
cmp r0, #3
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r2, _02312E1C ; =0x00000D23
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_02312E00: .word 0x00000DA8 + TRY_INFLICT_FROZEN_STATUS_OFFSET
|
|
_02312E04: .word 0x00000DA9 + TRY_INFLICT_FROZEN_STATUS_OFFSET
|
|
_02312E08: .word DUNGEON_PTR
|
|
_02312E0C: .word SECONDARY_TERRAIN_TYPES
|
|
_02312E10: .word 0x00000DAA + TRY_INFLICT_FROZEN_STATUS_OFFSET
|
|
_02312E14: .word ov10_022C4870
|
|
_02312E18: .word 0x00000D22 + TRY_INFLICT_FROZEN_STATUS_OFFSET
|
|
_02312E1C: .word 0x00000D23 + TRY_INFLICT_FROZEN_STATUS_OFFSET
|
|
arm_func_end TryInflictFrozenStatus
|
|
|
|
arm_func_start TryInflictConstrictionStatus
|
|
TryInflictConstrictionStatus: ; 0x02312E20
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r0, r6
|
|
mov r5, r2
|
|
mov r4, r3
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r4
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r4
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r4, [r6, #0xb4]
|
|
ldrb r1, [r4, #0xc4]
|
|
add r0, r1, #0xfd
|
|
and r0, r0, #0xff
|
|
cmp r0, #1
|
|
bhi _02312EA4
|
|
ldr r0, [r4, #0xb4]
|
|
bl FreeOtherWrappedMonsters
|
|
b _02312ECC
|
|
_02312EA4:
|
|
cmp r1, #5
|
|
bne _02312ECC
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _02312F68 ; =0x00000C9B
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312ECC:
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #7
|
|
beq _02312F48
|
|
ldr r1, _02312F6C ; =ov10_022C48A0
|
|
mov r3, #7
|
|
mov r0, r6
|
|
mov r2, #1
|
|
strb r3, [r4, #0xc4]
|
|
bl CalcStatusDuration
|
|
add r0, r0, #1
|
|
strb r0, [r4, #0xcc]
|
|
mov r0, #0
|
|
strb r0, [r4, #0xcd]
|
|
mov r0, r6
|
|
str r5, [r4, #0xc8]
|
|
bl ov29_022E42E4
|
|
ldr r2, _02312F70 ; =0x00000D24
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r6
|
|
mov r1, #8
|
|
bl ov29_02304A84
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl TryActivateQuickFeet
|
|
b _02312F58
|
|
_02312F48:
|
|
ldr r2, _02312F74 ; =0x00000D25
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02312F58:
|
|
mov r0, r6
|
|
bl UpdateStatusIconFlags
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_CONSTRICTION_STATUS_OFFSET -0x2C0
|
|
#else
|
|
#define TRY_INFLICT_CONSTRICTION_STATUS_OFFSET 0
|
|
#endif
|
|
_02312F68: .word 0x00000C9B + TRY_INFLICT_CONSTRICTION_STATUS_OFFSET
|
|
_02312F6C: .word ov10_022C48A0
|
|
_02312F70: .word 0x00000D24 + TRY_INFLICT_CONSTRICTION_STATUS_OFFSET
|
|
_02312F74: .word 0x00000D25 + TRY_INFLICT_CONSTRICTION_STATUS_OFFSET
|
|
arm_func_end TryInflictConstrictionStatus
|
|
|
|
arm_func_start TryInflictShadowHoldStatus
|
|
TryInflictShadowHoldStatus: ; 0x02312F78
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r1
|
|
mov r6, r0
|
|
mov r0, r5
|
|
mov r4, r2
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #1
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #1
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0x2b
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _0231302C
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, #1
|
|
mov r1, #0x2b
|
|
bl ov29_0234B084
|
|
cmp r4, #0
|
|
bne _02313024
|
|
ldr r2, _0231311C ; =0x00000D28
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02313024:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0231302C:
|
|
cmp r4, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
ldr r4, [r5, #0xb4]
|
|
ldrb r1, [r4, #0xc4]
|
|
add r0, r1, #0xfd
|
|
and r0, r0, #0xff
|
|
cmp r0, #1
|
|
bhi _0231305C
|
|
ldr r0, [r4, #0xb4]
|
|
bl FreeOtherWrappedMonsters
|
|
b _02313084
|
|
_0231305C:
|
|
cmp r1, #5
|
|
bne _02313084
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _02313120 ; =0x00000C9B
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02313084:
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #2
|
|
beq _023130FC
|
|
ldr r1, _02313124 ; =ov10_022C4898
|
|
mov r3, #2
|
|
mov r0, r5
|
|
mov r2, #1
|
|
strb r3, [r4, #0xc4]
|
|
bl CalcStatusDuration
|
|
add r1, r0, #1
|
|
mov r0, r5
|
|
strb r1, [r4, #0xcc]
|
|
mov r1, #0
|
|
strb r1, [r4, #0xcd]
|
|
bl ov29_022E42E0
|
|
ldr r2, _02313128 ; =0x00000D26
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r5
|
|
mov r1, #8
|
|
bl ov29_02304A84
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl TryActivateQuickFeet
|
|
b _0231310C
|
|
_023130FC:
|
|
ldr r2, _0231312C ; =0x00000D27
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0231310C:
|
|
mov r0, r5
|
|
bl UpdateStatusIconFlags
|
|
mov r0, #1
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET -0x2C0
|
|
#else
|
|
#define TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET 0
|
|
#endif
|
|
_0231311C: .word 0x00000D28 + TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET
|
|
_02313120: .word 0x00000C9B + TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET
|
|
_02313124: .word ov10_022C4898
|
|
_02313128: .word 0x00000D26 + TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET
|
|
_0231312C: .word 0x00000D27 + TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET
|
|
arm_func_end TryInflictShadowHoldStatus
|
|
|
|
arm_func_start TryInflictIngrainStatus
|
|
TryInflictIngrainStatus: ; 0x02313130
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r1
|
|
mov r6, r0
|
|
mov r0, r5
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
ldr r4, [r5, #0xb4]
|
|
ldrb r0, [r4, #0xc4]
|
|
add r0, r0, #0xfd
|
|
and r0, r0, #0xff
|
|
cmp r0, #1
|
|
bhi _0231316C
|
|
ldr r0, [r4, #0xb4]
|
|
bl FreeOtherWrappedMonsters
|
|
_0231316C:
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #5
|
|
beq _023131CC
|
|
ldr r1, _023131E8 ; =ov10_022C48B8
|
|
mov r3, #5
|
|
mov r0, r5
|
|
mov r2, #0
|
|
strb r3, [r4, #0xc4]
|
|
bl CalcStatusDuration
|
|
add r1, r0, #1
|
|
mov r0, r5
|
|
strb r1, [r4, #0xcc]
|
|
mov r1, #0
|
|
strb r1, [r4, #0xcd]
|
|
bl ov29_022E4D24
|
|
ldr r2, _023131EC ; =0x00000D29
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _023131DC
|
|
_023131CC:
|
|
ldr r2, _023131F0 ; =0x00000D2A
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023131DC:
|
|
mov r0, r5
|
|
bl UpdateStatusIconFlags
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_023131E8: .word ov10_022C48B8
|
|
#ifdef JAPAN
|
|
_023131EC: .word 0x00000A69
|
|
_023131F0: .word 0x00000A6A
|
|
#else
|
|
_023131EC: .word 0x00000D29
|
|
_023131F0: .word 0x00000D2A
|
|
#endif
|
|
arm_func_end TryInflictIngrainStatus
|
|
|
|
arm_func_start TryInflictWrappedStatus
|
|
TryInflictWrappedStatus: ; 0x023131F4
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_WRAPPED_STATUS_OFFSET -0xA4
|
|
#else
|
|
#define TRY_INFLICT_WRAPPED_STATUS_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r0, r6
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, #1
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, #1
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r4, [r7, #0xb4]
|
|
ldr r5, [r6, #0xb4]
|
|
ldrb r1, [r4, #0xc4]
|
|
cmp r1, #3
|
|
cmpne r1, #4
|
|
ldrneb r0, [r5, #0xc4]
|
|
cmpne r0, #3
|
|
cmpne r0, #4
|
|
beq _02313324
|
|
mov r0, #3
|
|
strb r0, [r4, #0xc4]
|
|
mov r0, #0x7f
|
|
strb r0, [r4, #0xcc]
|
|
mov r2, #0
|
|
ldr r1, _023133DC ; =ov10_022C48AC
|
|
mov r0, r6
|
|
strb r2, [r4, #0xcd]
|
|
mov r3, #4
|
|
mov r2, #1
|
|
strb r3, [r5, #0xc4]
|
|
bl CalcStatusDuration
|
|
add r0, r0, #1
|
|
strb r0, [r5, #0xcc]
|
|
mov r0, #0
|
|
ldr r3, _023133E0 ; =DUNGEON_PTR
|
|
strb r0, [r5, #0xcd]
|
|
ldr r1, [r3]
|
|
mov r0, r7
|
|
add r1, r1, #0x3000
|
|
ldr r2, [r1, #0xe30 + TRY_INFLICT_WRAPPED_STATUS_OFFSET]
|
|
mov r1, r6
|
|
str r2, [r4, #0xb4]
|
|
ldr r2, [r3]
|
|
add r2, r2, #0x3000
|
|
ldr r2, [r2, #0xe30 + TRY_INFLICT_WRAPPED_STATUS_OFFSET]
|
|
str r2, [r5, #0xb4]
|
|
ldr r2, [r3]
|
|
add r2, r2, #0x3000
|
|
ldr r3, [r2, #0xe30 + TRY_INFLICT_WRAPPED_STATUS_OFFSET]
|
|
add r3, r3, #1
|
|
str r3, [r2, #0xe30 + TRY_INFLICT_WRAPPED_STATUS_OFFSET]
|
|
bl ov29_022E4290
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _023133E4 ; =0x00000D2B
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r6
|
|
mov r1, #8
|
|
bl ov29_02304A84
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl TryActivateQuickFeet
|
|
b _023133D0
|
|
_02313324:
|
|
cmp r1, #3
|
|
bne _0231334C
|
|
mov r0, #0
|
|
mov r1, r7
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _023133E8 ; =0x00000D2C
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0231334C:
|
|
ldrb r0, [r5, #0xc4]
|
|
cmp r0, #3
|
|
bne _02313378
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _023133E8 ; =0x00000D2C
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02313378:
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #4
|
|
bne _023133A4
|
|
mov r0, #0
|
|
mov r1, r7
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _023133EC ; =0x00000D2D
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023133A4:
|
|
ldrb r0, [r5, #0xc4]
|
|
cmp r0, #4
|
|
bne _023133D0
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _023133EC ; =0x00000D2D
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023133D0:
|
|
mov r0, r6
|
|
bl UpdateStatusIconFlags
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET -0x2C0
|
|
#else
|
|
#define TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET 0
|
|
#endif
|
|
_023133DC: .word ov10_022C48AC
|
|
_023133E0: .word DUNGEON_PTR
|
|
_023133E4: .word 0x00000D2B + TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET
|
|
_023133E8: .word 0x00000D2C + TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET
|
|
_023133EC: .word 0x00000D2D + TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET
|
|
arm_func_end TryInflictWrappedStatus
|
|
|
|
arm_func_start FreeOtherWrappedMonsters
|
|
FreeOtherWrappedMonsters: ; 0x023133F0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r4, #0
|
|
ldr r7, _02313468 ; =DUNGEON_PTR
|
|
mov r6, r0
|
|
mov sb, r4
|
|
mov r8, r4
|
|
_02313408:
|
|
ldr r0, [r7]
|
|
add r0, r0, r4, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r5, [r0, #0xad4]
|
|
#else
|
|
ldr r5, [r0, #0xb78]
|
|
#endif
|
|
mov r0, r5
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _02313458
|
|
ldr r1, [r5, #0xb4]
|
|
ldr r0, [r1, #0xb4]
|
|
cmp r0, r6
|
|
bne _02313450
|
|
ldrb r0, [r1, #0xc4]
|
|
add r0, r0, #0xfd
|
|
and r0, r0, #0xff
|
|
cmp r0, #1
|
|
strlsb sb, [r1, #0xc4]
|
|
str r8, [r1, #0xb4]
|
|
_02313450:
|
|
mov r0, r5
|
|
bl UpdateStatusIconFlags
|
|
_02313458:
|
|
add r4, r4, #1
|
|
cmp r4, #0x14
|
|
blt _02313408
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_02313468: .word DUNGEON_PTR
|
|
arm_func_end FreeOtherWrappedMonsters
|
|
|
|
arm_func_start TryInflictPetrifiedStatus
|
|
TryInflictPetrifiedStatus: ; 0x0231346C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r5, r1
|
|
mov r6, r0
|
|
mov r0, r5
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #1
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #1
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r0, r5
|
|
bl ov29_022E41F0
|
|
ldr r4, [r5, #0xb4]
|
|
ldrb r0, [r4, #0xc4]
|
|
add r0, r0, #0xfd
|
|
and r0, r0, #0xff
|
|
cmp r0, #1
|
|
bhi _023134E0
|
|
ldr r0, [r4, #0xb4]
|
|
bl FreeOtherWrappedMonsters
|
|
_023134E0:
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #6
|
|
beq _02313560
|
|
mov r0, #6
|
|
strb r0, [r4, #0xc4]
|
|
ldrb r0, [r4, #7]
|
|
mov r2, #1
|
|
cmp r0, #0
|
|
beq _02313524
|
|
ldr r1, _023135E8 ; =ov10_022C479C
|
|
mov r0, r5
|
|
bl CalcStatusDuration
|
|
b _02313530
|
|
_02313524:
|
|
ldr r1, _023135EC ; =ov10_022C47A0
|
|
mov r0, r5
|
|
bl CalcStatusDuration
|
|
_02313530:
|
|
add r0, r0, #1
|
|
strb r0, [r4, #0xcc]
|
|
mov r3, #0
|
|
ldr r2, _023135F0 ; =0x00000D32
|
|
mov r0, r6
|
|
mov r1, r5
|
|
strb r3, [r4, #0xcd]
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl TryActivateQuickFeet
|
|
b _02313570
|
|
_02313560:
|
|
ldr r2, _023135F4 ; =0x00000D33
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02313570:
|
|
ldrb r0, [r4, #6]
|
|
cmp r0, #0
|
|
beq _023135DC
|
|
mov r4, #0
|
|
ldr r6, _023135F8 ; =DUNGEON_PTR
|
|
mov r8, #6
|
|
mov r7, r4
|
|
_0231358C:
|
|
ldr r0, [r6]
|
|
add r0, r0, r4, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr sb, [r0, #0xa84]
|
|
#else
|
|
ldr sb, [r0, #0xb28]
|
|
#endif
|
|
mov r0, sb
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _023135D0
|
|
ldr r1, [sb, #0xb4]
|
|
ldrb r0, [r1, #0x7c]
|
|
cmp r0, #1
|
|
ldreq r0, [r1, #0x84]
|
|
cmpeq r0, r5
|
|
streqb r8, [r1, #0x7c]
|
|
streq r7, [r1, #0x84]
|
|
streqh r7, [r1, #0x80]
|
|
streqb r7, [r1, #0x7e]
|
|
_023135D0:
|
|
add r4, r4, #1
|
|
cmp r4, #4
|
|
blt _0231358C
|
|
_023135DC:
|
|
mov r0, r5
|
|
bl UpdateStatusIconFlags
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_023135E8: .word ov10_022C479C
|
|
_023135EC: .word ov10_022C47A0
|
|
#ifdef JAPAN
|
|
_023135F0: .word 0x00000A72
|
|
_023135F4: .word 0x00000A73
|
|
#else
|
|
_023135F0: .word 0x00000D32
|
|
_023135F4: .word 0x00000D33
|
|
#endif
|
|
_023135F8: .word DUNGEON_PTR
|
|
arm_func_end TryInflictPetrifiedStatus
|
|
|
|
arm_func_start LowerOffensiveStat
|
|
LowerOffensiveStat: ; 0x023135FC
|
|
stmdb sp!, {r0, r1, r2, r3}
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r7, r1
|
|
mov r5, r3
|
|
mov r8, r0
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r6, r0
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r4, r0
|
|
mov r1, r5, lsl #0x10
|
|
mov r0, r7
|
|
mov r5, r1, asr #0x10
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _023137E8
|
|
ldr r0, [sp, #0x20]
|
|
cmp r0, #0
|
|
beq _02313660
|
|
ldr r1, _023137F4 ; =0x00000DCB
|
|
mov r0, r6
|
|
bl CopyStringFromId
|
|
mov r1, r6
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
b _02313678
|
|
_02313660:
|
|
ldr r1, _023137F8 ; =0x00000DCA
|
|
mov r0, r6
|
|
bl CopyStringFromId
|
|
mov r1, r6
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
_02313678:
|
|
ldrb r0, [sp, #0x28]
|
|
cmp r0, #0
|
|
beq _02313720
|
|
ldrb r2, [sp, #0x2c]
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl IsProtectedFromStatDrops
|
|
cmp r0, #0
|
|
bne _023137E8
|
|
mov r0, r7
|
|
mov r1, #0x12
|
|
bl ItemIsActive__02311BF8
|
|
cmp r0, #0
|
|
beq _023136D4
|
|
mov r0, #0
|
|
mov r1, r7
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _023137FC ; =0x00000DB2
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _023137E8
|
|
_023136D4:
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, #9
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _02313720
|
|
ldr r0, [sp, #0x20]
|
|
cmp r0, #0
|
|
bne _02313720
|
|
mov r0, #0
|
|
mov r1, r7
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _02313800 ; =0x00000D9E
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _023137E8
|
|
_02313720:
|
|
mov r0, #0
|
|
mov r1, r7
|
|
mov r2, r0
|
|
ldr r6, [r7, #0xb4]
|
|
bl SubstitutePlaceholderStringTags
|
|
add r1, sp, #0x20
|
|
ldr r1, [r1]
|
|
mov r0, r7
|
|
bl ov29_022E4D28
|
|
mov r0, r7
|
|
mov r1, #0x61
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, r5, lsl #0x11
|
|
movne r5, r0, asr #0x10
|
|
cmp r5, #1
|
|
bne _02313780
|
|
ldr r1, _02313804 ; =0x00000DCD
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
mov r1, r4
|
|
mov r0, #2
|
|
bl ov29_0234B0B4
|
|
b _02313798
|
|
_02313780:
|
|
ldr r1, _02313808 ; =0x00000DCC
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
mov r1, r4
|
|
mov r0, #2
|
|
bl ov29_0234B0B4
|
|
_02313798:
|
|
ldr r1, [sp, #0x20]
|
|
add r0, r6, r1, lsl #1
|
|
ldrsh r0, [r0, #0x24]
|
|
subs r4, r0, r5
|
|
movmi r4, #0
|
|
cmp r4, r0
|
|
beq _023137D0
|
|
ldr r2, _0231380C ; =0x00000D91
|
|
add r3, r6, r1, lsl #1
|
|
mov r0, r8
|
|
mov r1, r7
|
|
strh r4, [r3, #0x24]
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _023137E0
|
|
_023137D0:
|
|
ldr r2, _02313810 ; =0x00000DD9
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023137E0:
|
|
mov r0, r7
|
|
bl UpdateStatusIconFlags
|
|
_023137E8:
|
|
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define LOWER_OFFENSIVE_STAT_OFFSET -0x2C0
|
|
#else
|
|
#define LOWER_OFFENSIVE_STAT_OFFSET 0
|
|
#endif
|
|
_023137F4: .word 0x00000DCB + LOWER_OFFENSIVE_STAT_OFFSET
|
|
_023137F8: .word 0x00000DCA + LOWER_OFFENSIVE_STAT_OFFSET
|
|
_023137FC: .word 0x00000DB2 + LOWER_OFFENSIVE_STAT_OFFSET
|
|
_02313800: .word 0x00000D9E + LOWER_OFFENSIVE_STAT_OFFSET
|
|
_02313804: .word 0x00000DCD + LOWER_OFFENSIVE_STAT_OFFSET
|
|
_02313808: .word 0x00000DCC + LOWER_OFFENSIVE_STAT_OFFSET
|
|
_0231380C: .word 0x00000D91 + LOWER_OFFENSIVE_STAT_OFFSET
|
|
_02313810: .word 0x00000DD9 + LOWER_OFFENSIVE_STAT_OFFSET
|
|
arm_func_end LowerOffensiveStat
|
|
|
|
arm_func_start LowerDefensiveStat
|
|
LowerDefensiveStat: ; 0x02313814
|
|
#ifdef JAPAN
|
|
#define LOWER_DEFENSIVE_STAT_OFFSET -0x2C0
|
|
#else
|
|
#define LOWER_DEFENSIVE_STAT_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r0, r1, r2, r3}
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r7, r1
|
|
mov r5, r3
|
|
mov r8, r0
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r6, r0
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r4, r0
|
|
mov r1, r5, lsl #0x10
|
|
mov r0, r7
|
|
mov r5, r1, asr #0x10
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _0231397C
|
|
ldr r0, [sp, #0x20]
|
|
cmp r0, #0
|
|
beq _02313878
|
|
ldr r1, _02313988 ; =0x00000DC9
|
|
mov r0, r6
|
|
bl CopyStringFromId
|
|
mov r1, r6
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
b _02313890
|
|
_02313878:
|
|
ldr r1, _0231398C ; =0x00000DC8
|
|
mov r0, r6
|
|
bl CopyStringFromId
|
|
mov r1, r6
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
_02313890:
|
|
ldrb r0, [sp, #0x28]
|
|
cmp r0, #0
|
|
beq _023138B4
|
|
ldrb r2, [sp, #0x2c]
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl IsProtectedFromStatDrops
|
|
cmp r0, #0
|
|
bne _0231397C
|
|
_023138B4:
|
|
mov r0, #0
|
|
mov r1, r7
|
|
mov r2, r0
|
|
ldr r6, [r7, #0xb4]
|
|
bl SubstitutePlaceholderStringTags
|
|
add r1, sp, #0x20
|
|
ldr r1, [r1]
|
|
mov r0, r7
|
|
bl ov29_022E4DCC
|
|
mov r0, r7
|
|
mov r1, #0x61
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, r5, lsl #0x11
|
|
movne r5, r0, asr #0x10
|
|
cmp r5, #1
|
|
bne _02313914
|
|
ldr r1, _02313990 ; =0x00000DCD
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
mov r1, r4
|
|
mov r0, #2
|
|
bl ov29_0234B0B4
|
|
b _0231392C
|
|
_02313914:
|
|
ldr r1, _02313994 ; =0x00000DCC
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
mov r1, r4
|
|
mov r0, #2
|
|
bl ov29_0234B0B4
|
|
_0231392C:
|
|
ldr r1, [sp, #0x20]
|
|
add r0, r6, r1, lsl #1
|
|
ldrsh r0, [r0, #0x28]
|
|
subs r4, r0, r5
|
|
movmi r4, #0
|
|
cmp r4, r0
|
|
beq _02313964
|
|
add r3, r6, r1, lsl #1
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, #0xd90 + LOWER_DEFENSIVE_STAT_OFFSET
|
|
strh r4, [r3, #0x28]
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02313974
|
|
_02313964:
|
|
ldr r2, _02313998 ; =0x00000DD7
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02313974:
|
|
mov r0, r7
|
|
bl UpdateStatusIconFlags
|
|
_0231397C:
|
|
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
_02313988: .word 0x00000DC9 + LOWER_DEFENSIVE_STAT_OFFSET
|
|
_0231398C: .word 0x00000DC8 + LOWER_DEFENSIVE_STAT_OFFSET
|
|
_02313990: .word 0x00000DCD + LOWER_DEFENSIVE_STAT_OFFSET
|
|
_02313994: .word 0x00000DCC + LOWER_DEFENSIVE_STAT_OFFSET
|
|
_02313998: .word 0x00000DD7 + LOWER_DEFENSIVE_STAT_OFFSET
|
|
arm_func_end LowerDefensiveStat
|
|
|
|
arm_func_start BoostOffensiveStat
|
|
BoostOffensiveStat: ; 0x0231399C
|
|
stmdb sp!, {r0, r1, r2, r3}
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r8, r1
|
|
mov r6, r3
|
|
mov sb, r0
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r4, r0
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r5, r0
|
|
mov r1, r6, lsl #0x10
|
|
mov r0, r8
|
|
mov r6, r1, asr #0x10
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _02313AE4
|
|
mov r0, #0
|
|
mov r1, r8
|
|
mov r2, r0
|
|
ldr r7, [r8, #0xb4]
|
|
bl SubstitutePlaceholderStringTags
|
|
add r1, sp, #0x28
|
|
ldr r1, [r1]
|
|
mov r0, r8
|
|
bl ov29_022E4E74
|
|
ldr r0, [sp, #0x28]
|
|
cmp r0, #0
|
|
beq _02313A24
|
|
ldr r1, _02313AF0 ; =0x00000DCB
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
mov r1, r4
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
b _02313A3C
|
|
_02313A24:
|
|
ldr r1, _02313AF4 ; =0x00000DCA
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
mov r1, r4
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
_02313A3C:
|
|
mov r0, r8
|
|
mov r1, #0x61
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, r6, lsl #0x11
|
|
movne r6, r0, asr #0x10
|
|
cmp r6, #1
|
|
bne _02313A78
|
|
ldr r1, _02313AF8 ; =0x00000DCD
|
|
mov r0, r5
|
|
bl CopyStringFromId
|
|
mov r1, r5
|
|
mov r0, #2
|
|
bl ov29_0234B0B4
|
|
b _02313A90
|
|
_02313A78:
|
|
ldr r1, _02313AFC ; =0x00000DCC
|
|
mov r0, r5
|
|
bl CopyStringFromId
|
|
mov r1, r5
|
|
mov r0, #2
|
|
bl ov29_0234B0B4
|
|
_02313A90:
|
|
ldr r1, [sp, #0x28]
|
|
add r0, r7, r1, lsl #1
|
|
ldrsh r0, [r0, #0x24]
|
|
add r4, r0, r6
|
|
cmp r4, #0x14
|
|
movge r4, #0x14
|
|
cmp r4, r0
|
|
beq _02313ACC
|
|
ldr r2, _02313B00 ; =0x00000D8F
|
|
add r3, r7, r1, lsl #1
|
|
mov r0, sb
|
|
mov r1, r8
|
|
strh r4, [r3, #0x24]
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02313ADC
|
|
_02313ACC:
|
|
ldr r2, _02313B04 ; =0x00000DD8
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02313ADC:
|
|
mov r0, r8
|
|
bl UpdateStatusIconFlags
|
|
_02313AE4:
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define BOOST_OFFENSIVE_STAT_OFFSET -0x2C0
|
|
#else
|
|
#define BOOST_OFFENSIVE_STAT_OFFSET 0
|
|
#endif
|
|
_02313AF0: .word 0x00000DCB + BOOST_OFFENSIVE_STAT_OFFSET
|
|
_02313AF4: .word 0x00000DCA + BOOST_OFFENSIVE_STAT_OFFSET
|
|
_02313AF8: .word 0x00000DCD + BOOST_OFFENSIVE_STAT_OFFSET
|
|
_02313AFC: .word 0x00000DCC + BOOST_OFFENSIVE_STAT_OFFSET
|
|
_02313B00: .word 0x00000D8F + BOOST_OFFENSIVE_STAT_OFFSET
|
|
_02313B04: .word 0x00000DD8 + BOOST_OFFENSIVE_STAT_OFFSET
|
|
arm_func_end BoostOffensiveStat
|
|
|
|
; https://decomp.me/scratch/90P8f
|
|
arm_func_start BoostDefensiveStat
|
|
BoostDefensiveStat: ; 0x02313B08
|
|
stmdb sp!, {r0, r1, r2, r3}
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r8, r1
|
|
mov r6, r3
|
|
mov sb, r0
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r4, r0
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r5, r0
|
|
mov r1, r6, lsl #0x10
|
|
mov r0, r8
|
|
mov r6, r1, asr #0x10
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _02313C50
|
|
mov r0, #0
|
|
mov r1, r8
|
|
mov r2, r0
|
|
ldr r7, [r8, #0xb4]
|
|
bl SubstitutePlaceholderStringTags
|
|
add r1, sp, #0x28
|
|
ldr r1, [r1]
|
|
mov r0, r8
|
|
bl ov29_022E4F1C
|
|
ldr r0, [sp, #0x28]
|
|
cmp r0, #0
|
|
beq _02313B90
|
|
ldr r1, _02313C5C ; =0x00000DC9
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
mov r1, r4
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
b _02313BA8
|
|
_02313B90:
|
|
ldr r1, _02313C60 ; =0x00000DC8
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
mov r1, r4
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
_02313BA8:
|
|
mov r0, r8
|
|
mov r1, #0x61
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, r6, lsl #0x11
|
|
movne r6, r0, asr #0x10
|
|
cmp r6, #1
|
|
bne _02313BE4
|
|
ldr r1, _02313C64 ; =0x00000DCD
|
|
mov r0, r5
|
|
bl CopyStringFromId
|
|
mov r1, r5
|
|
mov r0, #2
|
|
bl ov29_0234B0B4
|
|
b _02313BFC
|
|
_02313BE4:
|
|
ldr r1, _02313C68 ; =0x00000DCC
|
|
mov r0, r5
|
|
bl CopyStringFromId
|
|
mov r1, r5
|
|
mov r0, #2
|
|
bl ov29_0234B0B4
|
|
_02313BFC:
|
|
ldr r1, [sp, #0x28]
|
|
add r0, r7, r1, lsl #1
|
|
ldrsh r0, [r0, #0x28]
|
|
add r4, r0, r6
|
|
cmp r4, #0x14
|
|
movge r4, #0x14
|
|
cmp r4, r0
|
|
beq _02313C38
|
|
ldr r2, _02313C6C ; =0x00000D8E
|
|
add r3, r7, r1, lsl #1
|
|
mov r0, sb
|
|
mov r1, r8
|
|
strh r4, [r3, #0x28]
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02313C48
|
|
_02313C38:
|
|
ldr r2, _02313C70 ; =0x00000DD6
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02313C48:
|
|
mov r0, r8
|
|
bl UpdateStatusIconFlags
|
|
_02313C50:
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define BOOST_DEFENSIVE_STAT_OFFSET -0x2C0
|
|
#else
|
|
#define BOOST_DEFENSIVE_STAT_OFFSET 0
|
|
#endif
|
|
_02313C5C: .word 0x00000DC9 + BOOST_DEFENSIVE_STAT_OFFSET
|
|
_02313C60: .word 0x00000DC8 + BOOST_DEFENSIVE_STAT_OFFSET
|
|
_02313C64: .word 0x00000DCD + BOOST_DEFENSIVE_STAT_OFFSET
|
|
_02313C68: .word 0x00000DCC + BOOST_DEFENSIVE_STAT_OFFSET
|
|
_02313C6C: .word 0x00000D8E + BOOST_DEFENSIVE_STAT_OFFSET
|
|
_02313C70: .word 0x00000DD6 + BOOST_DEFENSIVE_STAT_OFFSET
|
|
arm_func_end BoostDefensiveStat
|
|
|
|
arm_func_start FlashFireShouldActivate
|
|
FlashFireShouldActivate: ; 0x02313C74
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r5, r0
|
|
mov r0, r4
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, #0x6b
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0x48
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r0, [r4, #0xb4]
|
|
ldrsh r0, [r0, #0x30]
|
|
cmp r0, #2
|
|
movge r0, #1
|
|
movlt r0, #2
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end FlashFireShouldActivate
|
|
|
|
arm_func_start ActivateFlashFire
|
|
ActivateFlashFire: ; 0x02313CE4
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r1
|
|
mov r0, r5
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, #0
|
|
ldr r4, [r5, #0xb4]
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrsh r0, [r4, #0x30]
|
|
add r1, r0, #1
|
|
cmp r1, #2
|
|
movge r1, #2
|
|
cmp r0, r1
|
|
beq _02313D34
|
|
mov r0, r5
|
|
strh r1, [r4, #0x30]
|
|
bl ov29_022E4338
|
|
_02313D34:
|
|
mov r0, r5
|
|
bl UpdateStatusIconFlags
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ActivateFlashFire
|
|
|
|
arm_func_start ApplyOffensiveStatMultiplier
|
|
ApplyOffensiveStatMultiplier: ; 0x02313D40
|
|
#ifdef JAPAN
|
|
#define APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET -0x2C0
|
|
#else
|
|
#define APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r0, r1, r2, r3}
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r8, r1
|
|
mov sb, r0
|
|
mov r7, r3
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r4, r0
|
|
mov r0, r8
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _02313F3C
|
|
ldr r0, [sp, #0x28]
|
|
cmp r0, #0
|
|
beq _02313D94
|
|
ldr r1, _02313F48 ; =0x00000DCB
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
mov r1, r4
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
b _02313DAC
|
|
_02313D94:
|
|
ldr r1, _02313F4C ; =0x00000DCA
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
mov r1, r4
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
_02313DAC:
|
|
cmp r7, #0x100
|
|
bge _02313DCC
|
|
ldrb r2, [sp, #0x30]
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl IsProtectedFromStatDrops
|
|
cmp r0, #0
|
|
bne _02313F3C
|
|
_02313DCC:
|
|
mov r0, r8
|
|
mov r1, #0x12
|
|
bl ItemIsActive__02311BF8
|
|
cmp r0, #0
|
|
beq _02313E0C
|
|
cmp r7, #0x100
|
|
bge _02313E0C
|
|
mov r0, #0
|
|
mov r1, r8
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _02313F50 ; =0x00000DB2
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02313F3C
|
|
_02313E0C:
|
|
mov r0, sb
|
|
mov r1, r8
|
|
mov r2, #9
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _02313E6C
|
|
ldr r0, [sp, #0x28]
|
|
cmp r0, #0
|
|
bne _02313E6C
|
|
cmp r7, #0x100
|
|
bge _02313E6C
|
|
ldrb r0, [sp, #0x30]
|
|
cmp r0, #0
|
|
beq _02313F3C
|
|
mov r0, #0
|
|
mov r1, r8
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _02313F54 ; =0x00000D9E
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02313F3C
|
|
_02313E6C:
|
|
mov r0, #0
|
|
mov r1, r8
|
|
mov r2, r0
|
|
ldr r5, [r8, #0xb4]
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r6, [sp, #0x28]
|
|
cmp r7, #0x100
|
|
add r0, r5, r6, lsl #2
|
|
ldr r4, [r0, #0x34]
|
|
add r1, sp, #0x28
|
|
mov r0, r8
|
|
bge _02313EA8
|
|
ldr r1, [r1]
|
|
bl ov29_022E5068
|
|
b _02313EB0
|
|
_02313EA8:
|
|
ldr r1, [r1]
|
|
bl ov29_022E4FC0
|
|
_02313EB0:
|
|
add r0, r5, r6, lsl #2
|
|
ldr r0, [r0, #0x34]
|
|
mov r1, r7
|
|
bl MultiplyByFixedPoint
|
|
add r1, r5, r6, lsl #2
|
|
str r0, [r1, #0x34]
|
|
cmp r0, #2
|
|
movlt r0, #2
|
|
strlt r0, [r1, #0x34]
|
|
add r2, r5, r6, lsl #2
|
|
ldr r1, [r2, #0x34]
|
|
ldr r0, _02313F58 ; =0x000063FD
|
|
cmp r1, r0
|
|
strgt r0, [r2, #0x34]
|
|
add r0, r5, r6, lsl #2
|
|
ldr r0, [r0, #0x34]
|
|
cmp r4, r0
|
|
ble _02313F0C
|
|
ldr r2, _02313F5C ; =0x00000DD1
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02313F34
|
|
_02313F0C:
|
|
bge _02313F24
|
|
mov r0, sb
|
|
mov r1, r8
|
|
mov r2, #0xdd0 + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02313F34
|
|
_02313F24:
|
|
ldr r2, _02313F60 ; =0x00000DD3
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02313F34:
|
|
mov r0, r8
|
|
bl UpdateStatusIconFlags
|
|
_02313F3C:
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
_02313F48: .word 0x00000DCB + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET
|
|
_02313F4C: .word 0x00000DCA + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET
|
|
_02313F50: .word 0x00000DB2 + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET
|
|
_02313F54: .word 0x00000D9E + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET
|
|
_02313F58: .word 0x000063FD
|
|
_02313F5C: .word 0x00000DD1 + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET
|
|
_02313F60: .word 0x00000DD3 + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET
|
|
arm_func_end ApplyOffensiveStatMultiplier
|
|
|
|
arm_func_start ApplyDefensiveStatMultiplier
|
|
ApplyDefensiveStatMultiplier: ; 0x02313F64
|
|
stmdb sp!, {r0, r1, r2, r3}
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r8, r1
|
|
mov sb, r0
|
|
mov r7, r3
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r4, r0
|
|
mov r0, r8
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _023140C0
|
|
ldr r0, [sp, #0x28]
|
|
cmp r0, #0
|
|
beq _02313FB8
|
|
ldr r1, _023140CC ; =0x00000DC9
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
mov r1, r4
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
b _02313FD0
|
|
_02313FB8:
|
|
ldr r1, _023140D0 ; =0x00000DC8
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
mov r1, r4
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
_02313FD0:
|
|
cmp r7, #0x100
|
|
bge _02313FF0
|
|
ldrb r2, [sp, #0x30]
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl IsProtectedFromStatDrops
|
|
cmp r0, #0
|
|
bne _023140C0
|
|
_02313FF0:
|
|
mov r0, #0
|
|
mov r1, r8
|
|
mov r2, r0
|
|
ldr r5, [r8, #0xb4]
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r6, [sp, #0x28]
|
|
cmp r7, #0x100
|
|
add r0, r5, r6, lsl #2
|
|
ldr r4, [r0, #0x3c]
|
|
add r1, sp, #0x28
|
|
mov r0, r8
|
|
bge _0231402C
|
|
ldr r1, [r1]
|
|
bl ov29_022E51B0
|
|
b _02314034
|
|
_0231402C:
|
|
ldr r1, [r1]
|
|
bl ov29_022E510C
|
|
_02314034:
|
|
add r0, r5, r6, lsl #2
|
|
ldr r0, [r0, #0x3c]
|
|
mov r1, r7
|
|
bl MultiplyByFixedPoint
|
|
add r1, r5, r6, lsl #2
|
|
str r0, [r1, #0x3c]
|
|
cmp r0, #2
|
|
movlt r0, #2
|
|
strlt r0, [r1, #0x3c]
|
|
add r2, r5, r6, lsl #2
|
|
ldr r1, [r2, #0x3c]
|
|
ldr r0, _023140D4 ; =0x000063FD
|
|
cmp r1, r0
|
|
strgt r0, [r2, #0x3c]
|
|
add r0, r5, r6, lsl #2
|
|
ldr r0, [r0, #0x3c]
|
|
cmp r4, r0
|
|
ble _02314090
|
|
ldr r2, _023140D8 ; =0x00000DCF
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _023140B8
|
|
_02314090:
|
|
bge _023140A8
|
|
ldr r2, _023140DC ; =0x00000DCE
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _023140B8
|
|
_023140A8:
|
|
ldr r2, _023140E0 ; =0x00000DD2
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023140B8:
|
|
mov r0, r8
|
|
bl UpdateStatusIconFlags
|
|
_023140C0:
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET -0x2C0
|
|
#else
|
|
#define APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET 0
|
|
#endif
|
|
_023140CC: .word 0x00000DC9 + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET
|
|
_023140D0: .word 0x00000DC8 + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET
|
|
_023140D4: .word 0x000063FD
|
|
_023140D8: .word 0x00000DCF + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET
|
|
_023140DC: .word 0x00000DCE + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET
|
|
_023140E0: .word 0x00000DD2 + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET
|
|
arm_func_end ApplyDefensiveStatMultiplier
|
|
|
|
arm_func_start BoostHitChanceStat
|
|
BoostHitChanceStat: ; 0x023140E4
|
|
stmdb sp!, {r0, r1, r2, r3}
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r8, r0
|
|
mov r0, r6
|
|
mov r4, #1
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _0231420C
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
ldr r5, [r6, #0xb4]
|
|
bl SubstitutePlaceholderStringTags
|
|
add r1, sp, #0x20
|
|
ldr r1, [r1]
|
|
mov r0, r6
|
|
bl ov29_022E5258
|
|
ldr r0, [sp, #0x20]
|
|
cmp r0, #0
|
|
beq _0231415C
|
|
ldr r1, _02314218 ; =0x00000DC7
|
|
mov r0, r8
|
|
bl CopyStringFromId
|
|
mov r1, r8
|
|
mov r0, r4
|
|
bl ov29_0234B0B4
|
|
b _02314174
|
|
_0231415C:
|
|
ldr r1, _0231421C ; =0x00000DC6
|
|
mov r0, r8
|
|
bl CopyStringFromId
|
|
mov r1, r8
|
|
mov r0, r4
|
|
bl ov29_0234B0B4
|
|
_02314174:
|
|
mov r0, r6
|
|
mov r1, #0x61
|
|
bl AbilityIsActiveVeneer
|
|
ldr r1, [sp, #0x20]
|
|
cmp r0, #0
|
|
movne r0, r4, lsl #0x11
|
|
add r2, r5, r1, lsl #1
|
|
movne r4, r0, asr #0x10
|
|
ldrsh r0, [r2, #0x2c]
|
|
mov r3, r1, lsl #1
|
|
cmp r0, #0x14
|
|
bge _023141F4
|
|
add r1, r5, #0x2c
|
|
ldrsh r0, [r1, r3]
|
|
add r0, r0, r4
|
|
strh r0, [r1, r3]
|
|
ldrsh r0, [r2, #0x2c]
|
|
cmp r0, #0x14
|
|
movgt r0, #0x14
|
|
strgth r0, [r2, #0x2c]
|
|
cmp r4, #2
|
|
blt _023141E0
|
|
ldr r2, _02314220 ; =0x00000D95
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02314204
|
|
_023141E0:
|
|
ldr r2, _02314224 ; =0x00000D93
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02314204
|
|
_023141F4:
|
|
ldr r2, _02314228 ; =0x00000DD5
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02314204:
|
|
mov r0, r6
|
|
bl UpdateStatusIconFlags
|
|
_0231420C:
|
|
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define BOOST_HIT_CHANCE_STAT_OFFSET -0x2C0
|
|
#else
|
|
#define BOOST_HIT_CHANCE_STAT_OFFSET 0
|
|
#endif
|
|
_02314218: .word 0x00000DC7 + BOOST_HIT_CHANCE_STAT_OFFSET
|
|
_0231421C: .word 0x00000DC6 + BOOST_HIT_CHANCE_STAT_OFFSET
|
|
_02314220: .word 0x00000D95 + BOOST_HIT_CHANCE_STAT_OFFSET
|
|
_02314224: .word 0x00000D93 + BOOST_HIT_CHANCE_STAT_OFFSET
|
|
_02314228: .word 0x00000DD5 + BOOST_HIT_CHANCE_STAT_OFFSET
|
|
arm_func_end BoostHitChanceStat
|
|
|
|
arm_func_start LowerHitChanceStat
|
|
LowerHitChanceStat: ; 0x0231422C
|
|
stmdb sp!, {r0, r1, r2, r3}
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r8, r3
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r5, r0
|
|
mov r0, r6
|
|
mov r4, #1
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _023143C4
|
|
ldr r0, [sp, #0x20]
|
|
cmp r0, #0
|
|
beq _02314284
|
|
ldr r1, _023143D0 ; =0x00000DC7
|
|
mov r0, r5
|
|
bl CopyStringFromId
|
|
mov r1, r5
|
|
mov r0, r4
|
|
bl ov29_0234B0B4
|
|
b _0231429C
|
|
_02314284:
|
|
ldr r1, _023143D4 ; =0x00000DC6
|
|
mov r0, r5
|
|
bl CopyStringFromId
|
|
mov r1, r5
|
|
mov r0, r4
|
|
bl ov29_0234B0B4
|
|
_0231429C:
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r8
|
|
bl IsProtectedFromStatDrops
|
|
cmp r0, #0
|
|
bne _023143C4
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, #0x1e
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _02314308
|
|
ldr r0, [sp, #0x20]
|
|
cmp r0, #0
|
|
bne _02314308
|
|
cmp r8, #0
|
|
beq _023143C4
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _023143D8 ; =0x00000D9F
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _023143C4
|
|
_02314308:
|
|
mov r0, r6
|
|
mov r1, #0x61
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, r4, lsl #0x11
|
|
movne r4, r0, asr #0x10
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
ldr r5, [r6, #0xb4]
|
|
bl SubstitutePlaceholderStringTags
|
|
add r1, sp, #0x20
|
|
ldr r1, [r1]
|
|
mov r0, r6
|
|
bl ov29_022E52F8
|
|
ldr r1, [sp, #0x20]
|
|
add r2, r5, r1, lsl #1
|
|
ldrsh r0, [r2, #0x2c]
|
|
mov r3, r1, lsl #1
|
|
cmp r0, #0
|
|
ble _023143AC
|
|
add r1, r5, #0x2c
|
|
ldrsh r0, [r1, r3]
|
|
sub r0, r0, r4
|
|
strh r0, [r1, r3]
|
|
ldrsh r0, [r2, #0x2c]
|
|
cmp r0, #0
|
|
movlt r0, #0
|
|
strlth r0, [r2, #0x2c]
|
|
cmp r4, #2
|
|
blt _02314398
|
|
ldr r2, _023143DC ; =0x00000D94
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _023143BC
|
|
_02314398:
|
|
ldr r2, _023143E0 ; =0x00000D92
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _023143BC
|
|
_023143AC:
|
|
ldr r2, _023143E4 ; =0x00000DD4
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023143BC:
|
|
mov r0, r6
|
|
bl UpdateStatusIconFlags
|
|
_023143C4:
|
|
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define LOWER_HIT_CHANCE_STAT_OFFSET -0x2C0
|
|
#else
|
|
#define LOWER_HIT_CHANCE_STAT_OFFSET 0
|
|
#endif
|
|
_023143D0: .word 0x00000DC7 + LOWER_HIT_CHANCE_STAT_OFFSET
|
|
_023143D4: .word 0x00000DC6 + LOWER_HIT_CHANCE_STAT_OFFSET
|
|
_023143D8: .word 0x00000D9F + LOWER_HIT_CHANCE_STAT_OFFSET
|
|
_023143DC: .word 0x00000D94 + LOWER_HIT_CHANCE_STAT_OFFSET
|
|
_023143E0: .word 0x00000D92 + LOWER_HIT_CHANCE_STAT_OFFSET
|
|
_023143E4: .word 0x00000DD4 + LOWER_HIT_CHANCE_STAT_OFFSET
|
|
arm_func_end LowerHitChanceStat
|
|
|
|
arm_func_start TryInflictCringeStatus
|
|
TryInflictCringeStatus: ; 0x023143E8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r5, r2
|
|
mov r4, r3
|
|
bl AllocateTemp1024ByteBufferFromPool
|
|
mov r0, r6
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, #0x1f
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _02314498
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
cmp r5, #0
|
|
beq _02314490
|
|
ldr r2, _02314534 ; =0x00000DA2
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02314490:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_02314498:
|
|
cmp r4, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, #0
|
|
ldr r4, [r6, #0xb4]
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r0, [r4, #0xd0]
|
|
cmp r0, #1
|
|
beq _02314514
|
|
ldr r1, _02314538 ; =ov10_022C4884
|
|
mov r2, #1
|
|
mov r0, r6
|
|
strb r2, [r4, #0xd0]
|
|
bl CalcStatusDuration
|
|
add r1, r0, #1
|
|
mov r0, r6
|
|
strb r1, [r4, #0xd1]
|
|
bl PlayExclamationPointEffect__022E5D4C
|
|
ldr r2, _0231453C ; =0x00000D02
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl TryActivateSteadfast
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl TryActivateQuickFeet
|
|
b _02314524
|
|
_02314514:
|
|
ldr r2, _02314540 ; =0x00000D03
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02314524:
|
|
mov r0, r6
|
|
bl UpdateStatusIconFlags
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_CRINGE_STATUS_OFFSET -0x2C0
|
|
#else
|
|
#define TRY_INFLICT_CRINGE_STATUS_OFFSET 0
|
|
#endif
|
|
_02314534: .word 0x00000DA2 + TRY_INFLICT_CRINGE_STATUS_OFFSET
|
|
_02314538: .word ov10_022C4884
|
|
_0231453C: .word 0x00000D02 + TRY_INFLICT_CRINGE_STATUS_OFFSET
|
|
_02314540: .word 0x00000D03 + TRY_INFLICT_CRINGE_STATUS_OFFSET
|
|
arm_func_end TryInflictCringeStatus
|
|
|
|
arm_func_start TryInflictParalysisStatus
|
|
TryInflictParalysisStatus: ; 0x02314544
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_PARALYSIS_STATUS_OFFSET -0x2C0
|
|
#else
|
|
#define TRY_INFLICT_PARALYSIS_STATUS_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0xc
|
|
mov sb, r1
|
|
mov sl, r0
|
|
mov r0, sb
|
|
mov r8, r2
|
|
mov r4, r3
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _023147D0
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r8
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _023147D0
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r8
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _023147D0
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x16
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02311B94
|
|
cmp r0, #0
|
|
beq _023145F4
|
|
mov r0, #0
|
|
mov r1, sb
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
cmp r8, #0
|
|
beq _023145EC
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0xda0 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023145EC:
|
|
mov r0, #0
|
|
b _023147D0
|
|
_023145F4:
|
|
mov r0, sb
|
|
mov r1, #1
|
|
bl ExclusiveItemEffectIsActive__023147EC
|
|
cmp r0, #0
|
|
beq _02314654
|
|
cmp r8, #0
|
|
beq _0231464C
|
|
mov r0, #0
|
|
mov r1, sb
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
add r2, sp, #4
|
|
mov r0, sb
|
|
mov r1, #1
|
|
bl GetExclusiveItemWithEffectFromBag
|
|
add r1, sp, #4
|
|
mov r0, #1
|
|
bl ov29_02344B44
|
|
ldr r2, _023147D8 ; =0x00000DA1
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0231464C:
|
|
mov r0, #0
|
|
b _023147D0
|
|
_02314654:
|
|
cmp r4, #0
|
|
movne r0, #1
|
|
bne _023147D0
|
|
mov r0, #0
|
|
ldr r7, [sb, #0xb4]
|
|
mov r1, sb
|
|
mov r2, r0
|
|
mov r4, #1
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r0, [r7, #0xbf]
|
|
cmp r0, #4
|
|
beq _023146E0
|
|
ldr r1, _023147DC ; =ov10_022C4894
|
|
mov r3, #4
|
|
mov r0, sb
|
|
mov r2, r4
|
|
strb r3, [r7, #0xbf]
|
|
bl CalcStatusDuration
|
|
add r0, r0, #1
|
|
strb r0, [r7, #0xc0]
|
|
mov r4, #0
|
|
strb r4, [r7, #0xc1]
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0xd00 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET
|
|
strb r4, [r7, #0xc2]
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, sb
|
|
bl ov29_022E4240
|
|
mov r0, sb
|
|
bl CalcSpeedStageWrapper
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl TryActivateQuickFeet
|
|
b _023146F0
|
|
_023146E0:
|
|
ldr r2, _023147E0 ; =0x00000D01
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023146F0:
|
|
mov r0, sb
|
|
mov r1, #0x19
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _023147C4
|
|
cmp r4, #0
|
|
bne _023147C4
|
|
mov r5, #0
|
|
ldr fp, _023147E4 ; =DIRECTIONS_XY
|
|
mov r4, r5
|
|
_02314718:
|
|
mov r1, r4, lsl #2
|
|
add r0, fp, r4, lsl #2
|
|
ldrsh r6, [sb, #4]
|
|
ldrsh r3, [fp, r1]
|
|
ldrsh r1, [r0, #2]
|
|
ldrsh r2, [sb, #6]
|
|
add r0, r6, r3
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldr r6, [r0, #0xc]
|
|
mov r0, r6
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
beq _023147B8
|
|
ldr r0, [r6]
|
|
cmp r0, #1
|
|
bne _023147B8
|
|
cmp r5, #0
|
|
bne _02314790
|
|
mov r5, #1
|
|
bl ov29_0234B034
|
|
mov r1, #0
|
|
mov r2, r7
|
|
mov r3, r1
|
|
str r1, [sp]
|
|
bl ov29_0230040C
|
|
ldr r2, _023147E8 ; =0x00000DC5
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02314790:
|
|
mov r0, sb
|
|
mov r1, r6
|
|
bl ov29_023018AC
|
|
cmp r0, #1
|
|
bne _023147B8
|
|
mov r0, sl
|
|
mov r1, r6
|
|
mov r2, r8
|
|
mov r3, #0
|
|
bl TryInflictParalysisStatus
|
|
_023147B8:
|
|
add r4, r4, #1
|
|
cmp r4, #8
|
|
blt _02314718
|
|
_023147C4:
|
|
mov r0, sb
|
|
bl UpdateStatusIconFlags
|
|
mov r0, #1
|
|
_023147D0:
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_023147D8: .word 0x00000DA1 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET
|
|
_023147DC: .word ov10_022C4894
|
|
_023147E0: .word 0x00000D01 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET
|
|
_023147E4: .word DIRECTIONS_XY
|
|
_023147E8: .word 0x00000DC5 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET
|
|
arm_func_end TryInflictParalysisStatus
|
|
|
|
arm_func_start ExclusiveItemEffectIsActive__023147EC
|
|
ExclusiveItemEffectIsActive__023147EC: ; 0x023147EC
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, [r0, #0xb4]
|
|
ldrb r0, [r2, #6]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, pc}
|
|
#ifdef JAPAN
|
|
add r0, r2, #0x224
|
|
#else
|
|
add r0, r2, #0x228
|
|
#endif
|
|
bl ExclusiveItemEffectFlagTest
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ExclusiveItemEffectIsActive__023147EC
|
|
|
|
arm_func_start BoostSpeed
|
|
BoostSpeed: ; 0x02314810
|
|
#ifdef JAPAN
|
|
#define BOOST_SPEED_OFFSET -4
|
|
#else
|
|
#define BOOST_SPEED_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r8, r1
|
|
mov sb, r0
|
|
mov r0, r8
|
|
mov r7, r2
|
|
mov r6, r3
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
cmp r6, #0
|
|
bne _02314850
|
|
ldr r1, _0231492C ; =SPEED_BOOST_TURN_RANGE
|
|
mov r0, r8
|
|
mov r2, #0
|
|
bl CalcStatusDuration
|
|
add r6, r0, #1
|
|
_02314850:
|
|
mov r0, #0
|
|
mov r1, r8
|
|
mov r2, r0
|
|
ldr r5, [r8, #0xb4]
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl CalcSpeedStage
|
|
mov r4, r0
|
|
cmp r4, #4
|
|
bne _0231489C
|
|
ldrb r0, [sp, #0x20]
|
|
cmp r0, #0
|
|
beq _02314920
|
|
ldr r2, _02314930 ; =0x00000DDB
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02314920
|
|
_0231489C:
|
|
mov r2, #0
|
|
b _023148BC
|
|
_023148A4:
|
|
add r1, r5, r2
|
|
ldrb r0, [r1, #0x114 + BOOST_SPEED_OFFSET]
|
|
cmp r0, #0
|
|
streqb r6, [r1, #0x114 + BOOST_SPEED_OFFSET]
|
|
beq _023148C4
|
|
add r2, r2, #1
|
|
_023148BC:
|
|
cmp r2, #5
|
|
blt _023148A4
|
|
_023148C4:
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl CalcSpeedStage
|
|
mov r6, r0
|
|
cmp r4, r6
|
|
bne _023148F0
|
|
ldr r2, _02314934 ; =0x00000DDA
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02314920
|
|
_023148F0:
|
|
mov r0, r8
|
|
bl ov29_022E44CC
|
|
ldr r0, _02314938 ; =ov29_02353318
|
|
mov r1, r6, lsl #1
|
|
ldrh r2, [r0, r1]
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, #1
|
|
strb r0, [r5, #0x101]
|
|
mov r0, #0
|
|
strb r0, [r5, #0x152 + BOOST_SPEED_OFFSET]
|
|
_02314920:
|
|
mov r0, r8
|
|
bl UpdateStatusIconFlags
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_0231492C: .word SPEED_BOOST_TURN_RANGE
|
|
#ifdef JAPAN
|
|
_02314930: .word 0x00000B1B
|
|
_02314934: .word 0x00000B1A
|
|
#else
|
|
_02314930: .word 0x00000DDB
|
|
_02314934: .word 0x00000DDA
|
|
#endif
|
|
_02314938: .word ov29_02353318
|
|
arm_func_end BoostSpeed
|
|
|
|
arm_func_start BoostSpeedOneStage
|
|
BoostSpeedOneStage: ; 0x0231493C
|
|
stmdb sp!, {r3, lr}
|
|
str r3, [sp]
|
|
mov r3, r2
|
|
mov r2, #1
|
|
bl BoostSpeed
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end BoostSpeedOneStage
|
|
|
|
arm_func_start LowerSpeed
|
|
LowerSpeed: ; 0x02314954
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sb, r1
|
|
mov sl, r0
|
|
mov r0, sb
|
|
mov r8, r2
|
|
mov r7, r3
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r7
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r7
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r0, #0
|
|
mov r1, sb
|
|
mov r2, r0
|
|
ldr r4, [sb, #0xb4]
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, sb
|
|
bl CalcSpeedStageWrapper
|
|
movs fp, r0
|
|
bne _023149E8
|
|
cmp r7, #0
|
|
beq _02314AA0
|
|
ldr r2, _02314AAC ; =0x00000DDC
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02314AA0
|
|
_023149E8:
|
|
mov r5, #0
|
|
b _02314A34
|
|
_023149F0:
|
|
mov r1, #0
|
|
b _02314A28
|
|
_023149F8:
|
|
add r6, r4, r1
|
|
#ifdef JAPAN
|
|
ldrb r0, [r6, #0x115]
|
|
#else
|
|
ldrb r0, [r6, #0x119]
|
|
#endif
|
|
cmp r0, #0
|
|
bne _02314A24
|
|
ldr r1, _02314AB0 ; =ov10_022C488C
|
|
mov r0, sb
|
|
mov r2, #1
|
|
bl CalcStatusDuration
|
|
add r0, r0, #1
|
|
#ifdef JAPAN
|
|
strb r0, [r6, #0x115]
|
|
#else
|
|
strb r0, [r6, #0x119]
|
|
#endif
|
|
b _02314A30
|
|
_02314A24:
|
|
add r1, r1, #1
|
|
_02314A28:
|
|
cmp r1, #5
|
|
blt _023149F8
|
|
_02314A30:
|
|
add r5, r5, #1
|
|
_02314A34:
|
|
cmp r5, r8
|
|
blt _023149F0
|
|
mov r0, sb
|
|
bl CalcSpeedStageWrapper
|
|
mov r4, r0
|
|
cmp fp, r4
|
|
bne _02314A6C
|
|
cmp r7, #0
|
|
beq _02314AA0
|
|
ldr r2, _02314AB4 ; =0x00000DDA
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02314AA0
|
|
_02314A6C:
|
|
mov r0, sb
|
|
bl ov29_022E451C
|
|
ldr r0, _02314AB8 ; =ov29_02353318
|
|
mov r1, r4, lsl #1
|
|
ldrh r2, [r0, r1]
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
cmp r4, #0
|
|
bne _02314AA0
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl TryActivateQuickFeet
|
|
_02314AA0:
|
|
mov r0, sb
|
|
bl UpdateStatusIconFlags
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02314AAC: .word 0x00000B1C
|
|
_02314AB0: .word ov10_022C488C
|
|
_02314AB4: .word 0x00000B1A
|
|
#else
|
|
_02314AAC: .word 0x00000DDC
|
|
_02314AB0: .word ov10_022C488C
|
|
_02314AB4: .word 0x00000DDA
|
|
#endif
|
|
_02314AB8: .word ov29_02353318
|
|
arm_func_end LowerSpeed
|
|
|
|
arm_func_start TrySealMove
|
|
TrySealMove: ; 0x02314ABC
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
|
|
sub sp, sp, #0x14
|
|
mov r5, #0
|
|
movs r7, r1
|
|
mov r8, r0
|
|
mov r6, r2
|
|
moveq r0, r5
|
|
beq _02314C18
|
|
mov r2, #1
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
movne r0, r5
|
|
bne _02314C18
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, #1
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
movne r0, r5
|
|
bne _02314C18
|
|
ldr r0, [r7, #0xb4]
|
|
mov r4, r5
|
|
#ifdef JAPAN
|
|
add ip, r0, #0x120
|
|
#else
|
|
add ip, r0, #0x124
|
|
#endif
|
|
mov lr, r4
|
|
mov r2, r5
|
|
mov r3, #1
|
|
add r0, sp, #4
|
|
_02314B28:
|
|
ldrb r1, [ip, lr, lsl #3]
|
|
add sb, ip, lr, lsl #3
|
|
tst r1, #1
|
|
movne r1, r3
|
|
moveq r1, r2
|
|
tst r1, #0xff
|
|
beq _02314B54
|
|
ldrh r1, [sb, #2]
|
|
tst r1, #1
|
|
streq sb, [r0, r4, lsl #2]
|
|
addeq r4, r4, #1
|
|
_02314B54:
|
|
add lr, lr, #1
|
|
cmp lr, #4
|
|
blt _02314B28
|
|
cmp r6, #0
|
|
beq _02314B74
|
|
cmp r4, #0
|
|
moveq r0, #0
|
|
beq _02314C18
|
|
_02314B74:
|
|
cmp r4, #0
|
|
beq _02314BE8
|
|
ldr r3, _02314C20 ; =0x00000DBE
|
|
mov r5, #8
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, #1
|
|
str r5, [sp]
|
|
bl ExclusiveItemEffectIsActiveWithLogging
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _02314C18
|
|
cmp r6, #0
|
|
movne r0, #1
|
|
bne _02314C18
|
|
mov r0, r4
|
|
bl DungeonRandInt
|
|
add r1, sp, #4
|
|
ldr r2, [r1, r0, lsl #2]
|
|
mov r0, #0
|
|
ldrh r1, [r2, #2]
|
|
orr r1, r1, #1
|
|
strh r1, [r2, #2]
|
|
ldrh r1, [r2, #4]
|
|
bl ov29_0234B084
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r5, #1
|
|
bl TryActivateQuickFeet
|
|
_02314BE8:
|
|
cmp r5, #0
|
|
beq _02314C04
|
|
ldr r2, _02314C24 ; =0x00000DE3
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02314C14
|
|
_02314C04:
|
|
ldr r2, _02314C28 ; =0x00000DE4
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02314C14:
|
|
mov r0, #1
|
|
_02314C18:
|
|
add sp, sp, #0x14
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02314C20: .word 0x00000AFE
|
|
_02314C24: .word 0x00000B23
|
|
_02314C28: .word 0x00000B24
|
|
#else
|
|
_02314C20: .word 0x00000DBE
|
|
_02314C24: .word 0x00000DE3
|
|
_02314C28: .word 0x00000DE4
|
|
#endif
|
|
arm_func_end TrySealMove
|
|
|
|
arm_func_start BoostOrLowerSpeed
|
|
BoostOrLowerSpeed: ; 0x02314C2C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r5, r0
|
|
mov r0, r4
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, #0x32
|
|
bl DungeonRandOutcome__022EAB20
|
|
cmp r0, #0
|
|
mov r2, #1
|
|
mov r0, r5
|
|
beq _02314C74
|
|
mov r1, r4
|
|
mov r3, r2
|
|
bl LowerSpeed
|
|
b _02314C84
|
|
_02314C74:
|
|
mov r1, r4
|
|
mov r3, #0
|
|
str r2, [sp]
|
|
bl BoostSpeed
|
|
_02314C84:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end BoostOrLowerSpeed
|
|
|
|
arm_func_start ResetHitChanceStat
|
|
ResetHitChanceStat: ; 0x02314C8C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r5, r1
|
|
mov r6, r0
|
|
mov r0, r5
|
|
mov r8, r2
|
|
mov r4, r3
|
|
mov r7, #0
|
|
bl EntityIsValid__023118B4
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
ldr r0, [r5, #0xb4]
|
|
add r1, r0, r8, lsl #1
|
|
ldrsh r0, [r1, #0x2c]
|
|
cmp r0, #0xa
|
|
movne r0, #0xa
|
|
movne r7, #1
|
|
strneh r0, [r1, #0x2c]
|
|
cmp r7, #0
|
|
beq _02314CE4
|
|
mov r0, r5
|
|
bl ov29_022E543C
|
|
b _02314CF4
|
|
_02314CE4:
|
|
cmp r4, #0
|
|
beq _02314CF4
|
|
mov r0, r5
|
|
bl ov29_022E543C
|
|
_02314CF4:
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
cmp r7, #0
|
|
beq _02314D20
|
|
mov r0, r6
|
|
mov r1, r5
|
|
#ifdef JAPAN
|
|
mov r2, #0xaa0
|
|
#else
|
|
mov r2, #0xd60
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02314D30
|
|
_02314D20:
|
|
ldr r2, _02314D3C ; =0x00000D61
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02314D30:
|
|
mov r0, r5
|
|
bl UpdateStatusIconFlags
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02314D3C: .word 0x00000AA1
|
|
#else
|
|
_02314D3C: .word 0x00000D61
|
|
#endif
|
|
arm_func_end ResetHitChanceStat
|
|
|
|
arm_func_start ExclusiveItemEffectIsActiveWithLogging
|
|
ExclusiveItemEffectIsActiveWithLogging: ; 0x02314D40
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
sub sp, sp, #8
|
|
mov r6, r1
|
|
ldrb r1, [sp, #0x20]
|
|
mov r7, r0
|
|
mov r0, r6
|
|
mov r5, r2
|
|
mov r4, r3
|
|
bl ExclusiveItemEffectIsActive__023147EC
|
|
cmp r0, #0
|
|
beq _02314DB8
|
|
cmp r5, #0
|
|
beq _02314DB0
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r1, [sp, #0x20]
|
|
add r2, sp, #0
|
|
mov r0, r6
|
|
bl GetExclusiveItemWithEffectFromBag
|
|
add r1, sp, #0
|
|
mov r0, #1
|
|
bl ov29_02344B44
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02314DB0:
|
|
mov r0, #1
|
|
b _02314DBC
|
|
_02314DB8:
|
|
mov r0, #0
|
|
_02314DBC:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end ExclusiveItemEffectIsActiveWithLogging
|
|
|
|
arm_func_start ov29_02314DC4
|
|
ov29_02314DC4: ; 0x02314DC4
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
sub sp, sp, #8
|
|
mov r7, r0
|
|
mov r0, #0
|
|
mov r5, r2
|
|
mov r2, r0
|
|
mov r6, r1
|
|
mov r4, r3
|
|
bl SubstitutePlaceholderStringTags
|
|
add r2, sp, #0
|
|
mov r0, r6
|
|
mov r1, r4
|
|
bl GetExclusiveItemWithEffectFromBag
|
|
add r1, sp, #0
|
|
mov r0, #1
|
|
bl ov29_02344B44
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end ov29_02314DC4
|
|
|
|
arm_func_start TryActivateQuickFeet
|
|
TryActivateQuickFeet: ; 0x02314E1C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r5, r0
|
|
mov r0, r4
|
|
mov r1, #0x6d
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r3, #0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #1
|
|
str r3, [sp]
|
|
bl BoostSpeed
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end TryActivateQuickFeet
|
|
|
|
arm_func_start TryInflictTerrifiedStatus
|
|
TryInflictTerrifiedStatus: ; 0x02314E60
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r2, _02314EB0 ; =ov10_022C4618
|
|
mov r4, r1
|
|
ldr ip, [r4, #0xb4]
|
|
mov r3, #1
|
|
mov r5, r0
|
|
ldrsh r1, [r2]
|
|
#ifdef JAPAN
|
|
strb r3, [ip, #0x103]
|
|
mov r0, r4
|
|
strb r1, [ip, #0x104]
|
|
#else
|
|
strb r3, [ip, #0x104]
|
|
mov r0, r4
|
|
strb r1, [ip, #0x105]
|
|
#endif
|
|
bl ov29_022E60E4
|
|
mov r0, #0
|
|
mov r1, r4
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _02314EB4 ; =0x00000DE5
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02314EB0: .word ov10_022C4618
|
|
#ifdef JAPAN
|
|
_02314EB4: .word 0x00000B25
|
|
#else
|
|
_02314EB4: .word 0x00000DE5
|
|
#endif
|
|
arm_func_end TryInflictTerrifiedStatus
|
|
|
|
arm_func_start TryInflictGrudgeStatus
|
|
TryInflictGrudgeStatus: ; 0x02314EB8
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r7, r1
|
|
ldr r5, [r7, #0xb4]
|
|
mov r8, r0
|
|
mov r4, #0
|
|
mov r6, r2
|
|
mov r2, r4
|
|
mov r0, #1
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r0, [r5, #0xfd]
|
|
cmp r0, #0
|
|
beq _02314F04
|
|
cmp r6, #0
|
|
beq _02314F2C
|
|
ldr r2, _02314F34 ; =0x00000ED1
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02314F2C
|
|
_02314F04:
|
|
mov r4, #1
|
|
mov r0, r7
|
|
strb r4, [r5, #0xfd]
|
|
bl UpdateStatusIconFlags
|
|
cmp r6, #0
|
|
beq _02314F2C
|
|
#ifdef JAPAN
|
|
ldr r2, _0231640C ; =0x00000C12
|
|
mov r0, r8
|
|
mov r1, r7
|
|
#else
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r2, #0xed0
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02314F2C:
|
|
mov r0, r4
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02314F34: .word 0x00000C13
|
|
_0231640C: .word 0x00000C12
|
|
#else
|
|
_02314F34: .word 0x00000ED1
|
|
#endif
|
|
arm_func_end TryInflictGrudgeStatus
|
|
|
|
arm_func_start TryInflictConfusedStatus
|
|
TryInflictConfusedStatus: ; 0x02314F38
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r0, r6
|
|
mov r5, r2
|
|
mov r4, r3
|
|
bl EntityIsValid__02315118
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
bl SafeguardIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
bl IsProtectedFromNegativeStatus
|
|
cmp r0, #0
|
|
mov r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, r6
|
|
mov r1, #0x19
|
|
bl ItemIsActive__0231513C
|
|
cmp r0, #0
|
|
beq _02314FD8
|
|
cmp r5, #0
|
|
beq _02314FD0
|
|
ldr r2, _02315100 ; =0x00000DAF
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02314FD0:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_02314FD8:
|
|
mov ip, #2
|
|
ldr r3, _02315104 ; =0x00000DBA
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
str ip, [sp]
|
|
bl ExclusiveItemEffectIsActiveWithLogging
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
cmp r7, r6
|
|
beq _02315048
|
|
cmp r7, #0
|
|
moveq r0, #0
|
|
beq _02315028
|
|
ldr r0, [r7]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
_02315028:
|
|
cmp r0, #0
|
|
beq _02315048
|
|
mov r0, r7
|
|
mov r1, #0x53
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _02315054
|
|
_02315048:
|
|
mov r0, r6
|
|
mov r1, #0x40
|
|
bl AbilityIsActiveVeneer
|
|
_02315054:
|
|
cmp r0, #0
|
|
beq _0231507C
|
|
cmp r5, #0
|
|
beq _02315074
|
|
ldr r2, _02315108 ; =0x00000DA7
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02315074:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0231507C:
|
|
cmp r4, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r6
|
|
bl ov29_022E41CC
|
|
ldr r4, [r6, #0xb4]
|
|
ldrb r0, [r4, #0xd0]
|
|
cmp r0, #2
|
|
beq _023150E0
|
|
ldr r1, _0231510C ; =ov10_022C4890
|
|
mov r3, #2
|
|
mov r0, r6
|
|
mov r2, #1
|
|
strb r3, [r4, #0xd0]
|
|
bl CalcStatusDuration
|
|
add r3, r0, #1
|
|
ldr r2, _02315110 ; =0x00000CFE
|
|
mov r0, r7
|
|
mov r1, r6
|
|
strb r3, [r4, #0xd1]
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl TryActivateQuickFeet
|
|
b _023150F0
|
|
_023150E0:
|
|
ldr r2, _02315114 ; =0x00000CFF
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023150F0:
|
|
mov r0, r6
|
|
bl UpdateStatusIconFlags
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define TRY_INFLICT_CONFUSED_STATUS_OFFSET -0x2C0
|
|
#else
|
|
#define TRY_INFLICT_CONFUSED_STATUS_OFFSET 0
|
|
#endif
|
|
_02315100: .word 0x00000DAF + TRY_INFLICT_CONFUSED_STATUS_OFFSET
|
|
_02315104: .word 0x00000DBA + TRY_INFLICT_CONFUSED_STATUS_OFFSET
|
|
_02315108: .word 0x00000DA7 + TRY_INFLICT_CONFUSED_STATUS_OFFSET
|
|
_0231510C: .word ov10_022C4890
|
|
_02315110: .word 0x00000CFE + TRY_INFLICT_CONFUSED_STATUS_OFFSET
|
|
_02315114: .word 0x00000CFF + TRY_INFLICT_CONFUSED_STATUS_OFFSET
|
|
arm_func_end TryInflictConfusedStatus
|