mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-25 15:42:34 -05:00
2329 lines
43 KiB
ArmAsm
2329 lines
43 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_0230F02C.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start GetPossibleAiArcItemTargets
|
|
GetPossibleAiArcItemTargets: ; 0x0230F02C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr r4, _0230F138 ; =AI_THROWN_ITEM_ACTION_CHOICE_COUNT
|
|
mov r6, #0
|
|
mov sl, r0
|
|
mov fp, r1
|
|
mov sb, r2
|
|
mov r8, r3
|
|
str r6, [r4]
|
|
_0230F04C:
|
|
ldr r0, _0230F13C ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r7, [r0, #0xad4]
|
|
#else
|
|
ldr r7, [r0, #0xb78]
|
|
#endif
|
|
mov r0, r7
|
|
bl EntityIsValid__0230F008
|
|
cmp r0, #0
|
|
cmpne sl, r7
|
|
beq _0230F128
|
|
mov r0, sl
|
|
mov r1, r7
|
|
bl CanSeeTarget
|
|
cmp r0, #0
|
|
beq _0230F128
|
|
mov r0, sl
|
|
mov r1, r7
|
|
mov r2, #0
|
|
mov r3, #1
|
|
bl GetTreatmentBetweenMonsters
|
|
cmp r0, #1
|
|
bne _0230F128
|
|
ldrsh r1, [r7, #6]
|
|
ldrsh r0, [sl, #6]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
ldrsh r2, [r7, #4]
|
|
ldrsh r1, [sl, #4]
|
|
mov r5, r0
|
|
sub r0, r2, r1
|
|
bl abs
|
|
cmp r0, r5
|
|
movle r0, r5
|
|
cmp r0, #0xa
|
|
bgt _0230F128
|
|
cmp r8, #0
|
|
bne _0230F0FC
|
|
mov r0, r7
|
|
mov r1, fp
|
|
mov r2, #1
|
|
bl GetAiUseItemProbability
|
|
bl DungeonRandOutcome__022EAB20
|
|
cmp r0, #0
|
|
beq _0230F128
|
|
_0230F0FC:
|
|
ldr r0, [r4]
|
|
ldrsh r1, [r7, #4]
|
|
mov r0, r0, lsl #2
|
|
strh r1, [sb, r0]
|
|
ldr r0, [r4]
|
|
ldrsh r1, [r7, #6]
|
|
add r0, sb, r0, lsl #2
|
|
strh r1, [r0, #2]
|
|
ldr r0, [r4]
|
|
add r0, r0, #1
|
|
str r0, [r4]
|
|
_0230F128:
|
|
add r6, r6, #1
|
|
cmp r6, #0x14
|
|
blt _0230F04C
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0230F138: .word AI_THROWN_ITEM_ACTION_CHOICE_COUNT
|
|
_0230F13C: .word DUNGEON_PTR
|
|
arm_func_end GetPossibleAiArcItemTargets
|
|
|
|
arm_func_start ov29_0230F140
|
|
ov29_0230F140: ; 0x0230F140
|
|
ldr ip, _0230F148 ; =ov29_022F52BC
|
|
bx ip
|
|
.align 2, 0
|
|
_0230F148: .word ov29_022F52BC
|
|
arm_func_end ov29_0230F140
|
|
|
|
arm_func_start ov29_0230F14C
|
|
ov29_0230F14C: ; 0x0230F14C
|
|
ldr ip, _0230F154 ; =UseThrowableItem
|
|
bx ip
|
|
.align 2, 0
|
|
_0230F154: .word UseThrowableItem
|
|
arm_func_end ov29_0230F14C
|
|
|
|
arm_func_start ov29_0230F158
|
|
ov29_0230F158: ; 0x0230F158
|
|
ldr ip, _0230F160 ; =TryNonLeaderItemPickUp
|
|
bx ip
|
|
.align 2, 0
|
|
_0230F160: .word TryNonLeaderItemPickUp
|
|
arm_func_end ov29_0230F158
|
|
|
|
arm_func_start TryNonLeaderItemPickUp
|
|
TryNonLeaderItemPickUp: ; 0x0230F164
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x198
|
|
mov r8, r0
|
|
ldr r6, [r8, #0xb4]
|
|
bl GetTileAtEntity
|
|
mov r5, r0
|
|
ldr r4, [r5, #0x10]
|
|
cmp r4, #0
|
|
beq _0230F624
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _0230F624
|
|
mov r0, #0
|
|
mov r1, r8
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r0, [r6, #7]
|
|
cmp r0, #0
|
|
bne _0230F624
|
|
ldrb r0, [r6, #9]
|
|
cmp r0, #1
|
|
beq _0230F624
|
|
mov r0, r6
|
|
bl IsExperienceLocked
|
|
cmp r0, #0
|
|
bne _0230F624
|
|
ldrb r0, [r6, #0xbc]
|
|
cmp r0, #7
|
|
beq _0230F624
|
|
ldr r6, [r8, #0xb4]
|
|
mov r0, r4
|
|
mov r7, #1
|
|
bl GetItemInfo
|
|
ldrb r1, [r6, #6]
|
|
mov r4, r0
|
|
cmp r1, #0
|
|
beq _0230F204
|
|
bl ov29_02348D00
|
|
cmp r0, #0
|
|
bne _0230F624
|
|
_0230F204:
|
|
ldrb r0, [r4]
|
|
tst r0, #2
|
|
bne _0230F228
|
|
ldrb r0, [r6, #6]
|
|
cmp r0, #0
|
|
bne _0230F22C
|
|
ldrh r0, [r5]
|
|
tst r0, #0x20
|
|
beq _0230F22C
|
|
_0230F228:
|
|
mov r7, #0
|
|
_0230F22C:
|
|
cmp r7, #0
|
|
beq _0230F624
|
|
mov r0, r8
|
|
mov r1, #1
|
|
bl ShouldMonsterRunAwayVariation
|
|
cmp r0, #0
|
|
beq _0230F274
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bl ov29_02344B44
|
|
mov r0, #0
|
|
mov r1, r8
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r1, _0230F62C ; =0x00000C5E
|
|
mov r0, r8
|
|
bl LogMessageByIdWithPopup
|
|
b _0230F624
|
|
_0230F274:
|
|
ldrb r0, [r6, #6]
|
|
cmp r0, #0
|
|
bne _0230F300
|
|
ldrsh r0, [r4, #4]
|
|
bl GetItemCategoryVeneer
|
|
cmp r0, #6
|
|
bne _0230F300
|
|
ldrb r0, [r6, #6]
|
|
cmp r0, #0
|
|
beq _0230F2A8
|
|
ldr r0, _0230F630 ; =0x00001305
|
|
bl ov29_022EACCC
|
|
b _0230F2B0
|
|
_0230F2A8:
|
|
ldr r0, _0230F634 ; =0x00001308
|
|
bl ov29_022EACCC
|
|
_0230F2B0:
|
|
mov r0, r8
|
|
mov r1, #0x1b
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrneb r0, [r4]
|
|
orrne r0, r0, #0x20
|
|
strneb r0, [r4]
|
|
mov r0, r4
|
|
bl sub_0200D8AC
|
|
bl AddMoneyCarried
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bl ov29_02344B44
|
|
add r0, r8, #4
|
|
mov r1, #1
|
|
bl RemoveGroundItem
|
|
ldr r1, _0230F638 ; =0x00000C5F
|
|
mov r0, r8
|
|
bl LogMessageByIdWithPopup
|
|
b _0230F624
|
|
_0230F300:
|
|
ldr r0, _0230F63C ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb sb, [r0, #0x75b]
|
|
cmp sb, #0
|
|
beq _0230F36C
|
|
ldrb r0, [r6, #6]
|
|
cmp r0, #0
|
|
bne _0230F36C
|
|
ldr r0, _0230F640 ; =BAG_ITEMS_PTR_MIRROR
|
|
mov r5, #0
|
|
ldr r0, [r0]
|
|
add r2, sp, #0
|
|
ldr r7, [r0, #0x384]
|
|
add r1, sp, #0xcc
|
|
mov r0, #6
|
|
_0230F33C:
|
|
mla r3, r5, r0, r7
|
|
str r3, [r2, r5, lsl #2]
|
|
str r5, [r1, r5, lsl #2]
|
|
add r5, r5, #1
|
|
cmp r5, #0x32
|
|
blt _0230F33C
|
|
add r1, r6, #0x62
|
|
mvn r0, #0
|
|
str r1, [sp, #0xc8]
|
|
str r0, [sp, #0x194]
|
|
mov r5, #0x33
|
|
b _0230F380
|
|
_0230F36C:
|
|
add r1, r6, #0x62
|
|
mvn r0, #0
|
|
str r1, [sp]
|
|
str r0, [sp, #0xcc]
|
|
mov r5, #1
|
|
_0230F380:
|
|
ldrsh lr, [r4, #4]
|
|
cmp lr, #0xb
|
|
bge _0230F4B0
|
|
ldrb r0, [r4]
|
|
tst r0, #2
|
|
bne _0230F4B0
|
|
mvn r7, #0
|
|
mov ip, r7
|
|
mov sl, #0
|
|
and r0, r0, #8
|
|
add fp, sp, #0
|
|
b _0230F408
|
|
_0230F3B0:
|
|
ldr r1, [fp, sl, lsl #2]
|
|
ldrb r1, [r1]
|
|
tst r1, #1
|
|
movne r1, #1
|
|
moveq r1, #0
|
|
tst r1, #0xff
|
|
beq _0230F404
|
|
ldr r3, [fp, sl, lsl #2]
|
|
ldrb r2, [r3]
|
|
tst r2, #2
|
|
ldreqsh r1, [r3, #4]
|
|
cmpeq lr, r1
|
|
andeq r1, r2, #8
|
|
cmpeq r0, r1
|
|
bne _0230F404
|
|
ldrh r1, [r3, #2]
|
|
cmp r1, #0x63
|
|
beq _0230F404
|
|
cmp ip, r1
|
|
movlt ip, r1
|
|
movlt r7, sl
|
|
_0230F404:
|
|
add sl, sl, #1
|
|
_0230F408:
|
|
cmp sl, r5
|
|
blt _0230F3B0
|
|
mvn r0, #0
|
|
cmp r7, r0
|
|
beq _0230F4B0
|
|
add r1, sp, #0
|
|
ldr r2, [r1, r7, lsl #2]
|
|
ldrh r0, [r4, #2]
|
|
ldrh r1, [r2, #2]
|
|
add r0, r1, r0
|
|
cmp r0, #0x63
|
|
movge r0, #0x63
|
|
strh r0, [r2, #2]
|
|
ldrb r0, [r4]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
ldrneb r0, [r2]
|
|
orrne r0, r0, #8
|
|
strneb r0, [r2]
|
|
bl ov29_02347040
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bl ov29_02344B44
|
|
add r0, r8, #4
|
|
mov r1, #1
|
|
bl RemoveGroundItem
|
|
ldr r0, _0230F644 ; =0x00001304
|
|
bl ov29_022EACCC
|
|
add r0, sp, #0xcc
|
|
ldr r0, [r0, r7, lsl #2]
|
|
cmp r0, #0
|
|
bge _0230F4A0
|
|
#ifdef JAPAN
|
|
ldr r1, _02310B84 ; =0x0000099F
|
|
mov r0, r8
|
|
#else
|
|
mov r0, r8
|
|
mov r1, #0xc60
|
|
#endif
|
|
bl LogMessageByIdWithPopup
|
|
b _0230F624
|
|
_0230F4A0:
|
|
#ifdef JAPAN
|
|
mov r0, r8
|
|
mov r1, #0x9a0
|
|
#else
|
|
ldr r1, _0230F648 ; =0x00000C61
|
|
mov r0, r8
|
|
#endif
|
|
bl LogMessageByIdWithPopup
|
|
b _0230F624
|
|
_0230F4B0:
|
|
cmp sb, #0
|
|
beq _0230F4CC
|
|
ldrb r0, [r6, #6]
|
|
cmp r0, #0
|
|
bne _0230F4CC
|
|
bl GetCurrentBagCapacity
|
|
mov r5, r0
|
|
_0230F4CC:
|
|
mov r7, #0
|
|
add r3, sp, #0
|
|
mov r0, r7
|
|
mov r1, #1
|
|
b _0230F500
|
|
_0230F4E0:
|
|
ldr r2, [r3, r7, lsl #2]
|
|
ldrb r2, [r2]
|
|
tst r2, #1
|
|
movne r2, r1
|
|
moveq r2, r0
|
|
tst r2, #0xff
|
|
beq _0230F508
|
|
add r7, r7, #1
|
|
_0230F500:
|
|
cmp r7, r5
|
|
blt _0230F4E0
|
|
_0230F508:
|
|
mov r0, r8
|
|
mov r1, r4
|
|
mov r2, #1
|
|
bl ov29_02348DD8
|
|
cmp r0, #0
|
|
bne _0230F624
|
|
cmp r7, r5
|
|
bne _0230F544
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bl ov29_02344B44
|
|
ldr r1, _0230F64C ; =0x00000C62
|
|
mov r0, r8
|
|
bl LogMessageByIdWithPopup
|
|
b _0230F624
|
|
_0230F544:
|
|
ldrb r0, [r6, #6]
|
|
cmp r0, #0
|
|
beq _0230F55C
|
|
ldr r0, _0230F630 ; =0x00001305
|
|
bl ov29_022EACCC
|
|
b _0230F564
|
|
_0230F55C:
|
|
ldr r0, _0230F644 ; =0x00001304
|
|
bl ov29_022EACCC
|
|
_0230F564:
|
|
add r0, sp, #0xcc
|
|
ldr r0, [r0, r7, lsl #2]
|
|
cmp r0, #0
|
|
bge _0230F5BC
|
|
ldrh r1, [r4]
|
|
mov r0, r8
|
|
strh r1, [r6, #0x62]
|
|
ldrh r1, [r4, #2]
|
|
strh r1, [r6, #0x64]
|
|
ldrh r1, [r4, #4]
|
|
strh r1, [r6, #0x66]
|
|
bl ov29_022F9EA0
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bl ov29_02344B44
|
|
add r0, r8, #4
|
|
mov r1, #1
|
|
bl RemoveGroundItem
|
|
#ifdef JAPAN
|
|
ldr r1, _02310B84 ; =0x0000099F
|
|
mov r0, r8
|
|
#else
|
|
mov r0, r8
|
|
mov r1, #0xc60
|
|
#endif
|
|
bl LogMessageByIdWithPopup
|
|
b _0230F624
|
|
_0230F5BC:
|
|
mov r0, r4
|
|
bl ov29_02348D3C
|
|
mov r5, r0
|
|
mov r0, r4
|
|
bl ov29_02345004
|
|
cmp r0, #0
|
|
mov r0, #0
|
|
beq _0230F5F8
|
|
mov r1, r8
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r1, _0230F650 ; =0x00000C63
|
|
mov r0, r8
|
|
bl LogMessageByIdWithPopup
|
|
b _0230F624
|
|
_0230F5F8:
|
|
mov r1, r4
|
|
bl ov29_02344B44
|
|
add r0, r8, #4
|
|
mov r1, #1
|
|
bl RemoveGroundItem
|
|
#ifdef JAPAN
|
|
mov r0, r8
|
|
mov r1, #0x9a0
|
|
#else
|
|
ldr r1, _0230F648 ; =0x00000C61
|
|
mov r0, r8
|
|
#endif
|
|
bl LogMessageByIdWithPopup
|
|
mov r0, r4
|
|
mov r1, r5
|
|
bl ov29_02348ECC
|
|
_0230F624:
|
|
add sp, sp, #0x198
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define TRY_NON_LEADER_ITEM_PICK_UP_OFFSET -0x2C1
|
|
#else
|
|
#define TRY_NON_LEADER_ITEM_PICK_UP_OFFSET 0
|
|
#endif
|
|
_0230F62C: .word 0x00000C5E + TRY_NON_LEADER_ITEM_PICK_UP_OFFSET
|
|
_0230F630: .word 0x00001305
|
|
_0230F634: .word 0x00001308
|
|
_0230F638: .word 0x00000C5F + TRY_NON_LEADER_ITEM_PICK_UP_OFFSET
|
|
_0230F63C: .word DUNGEON_PTR
|
|
_0230F640: .word BAG_ITEMS_PTR_MIRROR
|
|
_0230F644: .word 0x00001304
|
|
#ifdef JAPAN
|
|
_02310B84: .word 0x0000099F
|
|
#else
|
|
_0230F648: .word 0x00000C61
|
|
#endif
|
|
_0230F64C: .word 0x00000C62 + TRY_NON_LEADER_ITEM_PICK_UP_OFFSET
|
|
_0230F650: .word 0x00000C63 + TRY_NON_LEADER_ITEM_PICK_UP_OFFSET
|
|
arm_func_end TryNonLeaderItemPickUp
|
|
|
|
arm_func_start GetExclusiveItemWithEffectFromBag
|
|
GetExclusiveItemWithEffectFromBag: ; 0x0230F654
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #0xc
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, r2
|
|
bl EntityIsValid__0230F008
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _0230F6C0
|
|
ldr r3, [r6, #0xb4]
|
|
add r0, sp, #4
|
|
ldrb r2, [r3, #0x5f]
|
|
mov r1, r5
|
|
str r2, [sp]
|
|
ldrsh r2, [r3, #4]
|
|
ldrb r3, [r3, #0x5e]
|
|
bl GetExclusiveItemForMonsterFromBag
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _0230F6C0
|
|
ldrh r1, [sp, #4]
|
|
mov r0, #1
|
|
strh r1, [r4]
|
|
ldrh r1, [sp, #6]
|
|
strh r1, [r4, #2]
|
|
ldrh r1, [sp, #8]
|
|
strh r1, [r4, #4]
|
|
_0230F6C0:
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
arm_func_end GetExclusiveItemWithEffectFromBag
|
|
|
|
arm_func_start AuraBowIsActive
|
|
AuraBowIsActive: ; 0x0230F6C8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
ldr r4, [r5, #0xb4]
|
|
mov r1, #0x6f
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0x62]
|
|
tst r0, #1
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _0230F710
|
|
ldrsh r0, [r4, #0x66]
|
|
bl IsAuraBow
|
|
cmp r0, #0
|
|
bne _0230F718
|
|
_0230F710:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_0230F718:
|
|
ldrsh r1, [r4, #0x66]
|
|
mov r0, r5
|
|
bl HasHeldItem
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end AuraBowIsActive
|
|
|
|
arm_func_start ov29_0230F728
|
|
ov29_0230F728: ; 0x0230F728
|
|
#ifdef JAPAN
|
|
#define OV29_0230F728_OFFSET -4
|
|
#else
|
|
#define OV29_0230F728_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, lr}
|
|
sub sp, sp, #0xc
|
|
ldr ip, [r1, #0xb4]
|
|
ldr r4, [r0, #0xb4]
|
|
ldrb r0, [ip, #0x5f]
|
|
mov r5, r3
|
|
mov r1, r2
|
|
str r0, [sp]
|
|
ldrsh r2, [ip, #4]
|
|
ldrb r3, [ip, #0x5e]
|
|
add r0, sp, #4
|
|
bl GetExclusiveItemForMonsterFromBag
|
|
ldr r1, [r4, #0x18c + OV29_0230F728_OFFSET]
|
|
add r0, r4, #0x100
|
|
orr r1, r1, r5
|
|
str r1, [r4, #0x18c + OV29_0230F728_OFFSET]
|
|
ldrsh r1, [sp, #8]
|
|
strh r1, [r0, #0x90 + OV29_0230F728_OFFSET]
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, pc}
|
|
arm_func_end ov29_0230F728
|
|
|
|
arm_func_start ExclusiveItemOffenseBoost
|
|
ExclusiveItemOffenseBoost: ; 0x0230F778
|
|
ldr r0, [r0, #0xb4]
|
|
add r0, r0, r1
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0x220]
|
|
#else
|
|
ldrb r0, [r0, #0x224]
|
|
#endif
|
|
bx lr
|
|
arm_func_end ExclusiveItemOffenseBoost
|
|
|
|
arm_func_start ExclusiveItemDefenseBoost
|
|
ExclusiveItemDefenseBoost: ; 0x0230F788
|
|
ldr r0, [r0, #0xb4]
|
|
add r0, r0, r1
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0x222]
|
|
#else
|
|
ldrb r0, [r0, #0x226]
|
|
#endif
|
|
bx lr
|
|
arm_func_end ExclusiveItemDefenseBoost
|
|
|
|
arm_func_start TeamMemberHasItemActive
|
|
TeamMemberHasItemActive: ; 0x0230F798
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r6, #0
|
|
ldr r4, _0230F80C ; =DUNGEON_PTR
|
|
mov sb, r0
|
|
mov r8, r1
|
|
mov r5, r6
|
|
_0230F7B0:
|
|
ldr r0, [r4]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r7, [r0, #0xa84]
|
|
#else
|
|
ldr r7, [r0, #0xb28]
|
|
#endif
|
|
mov r0, r7
|
|
bl EntityIsValid__0230F008
|
|
cmp r0, #0
|
|
beq _0230F7F0
|
|
mov r0, r7
|
|
mov r1, r8
|
|
bl ItemIsActive__0230F810
|
|
cmp r0, #0
|
|
addne r0, r6, #1
|
|
movne r0, r0, lsl #0x10
|
|
strne r7, [sb, r6, lsl #2]
|
|
movne r6, r0, asr #0x10
|
|
_0230F7F0:
|
|
add r0, r5, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r5, r0, asr #0x10
|
|
cmp r5, #4
|
|
blt _0230F7B0
|
|
mov r0, r6
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_0230F80C: .word DUNGEON_PTR
|
|
arm_func_end TeamMemberHasItemActive
|
|
|
|
arm_func_start ItemIsActive__0230F810
|
|
ItemIsActive__0230F810: ; 0x0230F810
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r1, #0x6f
|
|
mov r5, r0
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl HasHeldItem
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ItemIsActive__0230F810
|
|
|
|
arm_func_start TeamMemberHasExclusiveItemEffectActive
|
|
TeamMemberHasExclusiveItemEffectActive: ; 0x0230F840
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r4, r0
|
|
mov r6, #0
|
|
ldr r5, _0230F8A8 ; =DUNGEON_PTR
|
|
b _0230F898
|
|
_0230F854:
|
|
ldr r0, [r5]
|
|
add r0, r0, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r7, [r0, #0xa84]
|
|
#else
|
|
ldr r7, [r0, #0xb28]
|
|
#endif
|
|
mov r0, r7
|
|
bl EntityIsValid__0230F008
|
|
cmp r0, #0
|
|
beq _0230F88C
|
|
mov r0, r7
|
|
mov r1, r4
|
|
bl ExclusiveItemEffectIsActive__0230F8AC
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0230F88C:
|
|
add r0, r6, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r6, r0, asr #0x10
|
|
_0230F898:
|
|
cmp r6, #4
|
|
blt _0230F854
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0230F8A8: .word DUNGEON_PTR
|
|
arm_func_end TeamMemberHasExclusiveItemEffectActive
|
|
|
|
arm_func_start ExclusiveItemEffectIsActive__0230F8AC
|
|
ExclusiveItemEffectIsActive__0230F8AC: ; 0x0230F8AC
|
|
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__0230F8AC
|
|
|
|
arm_func_start ov29_0230F8D0
|
|
ov29_0230F8D0: ; 0x0230F8D0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r8, r0
|
|
mov r7, r1
|
|
bl EntityIsValid__0230F008
|
|
cmp r0, #0
|
|
moveq r0, #0xff
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
ldr r0, [r8, #0xb4]
|
|
mov r5, #0
|
|
ldrb r6, [r0, #0x4c]
|
|
ldr r4, _0230F97C ; =DIRECTIONS_XY
|
|
b _0230F96C
|
|
_0230F900:
|
|
mov r1, r6, lsl #2
|
|
add r0, r4, r6, lsl #2
|
|
ldrsh ip, [r8, #4]
|
|
ldrsh r3, [r4, r1]
|
|
ldrsh r2, [r8, #6]
|
|
ldrsh r1, [r0, #2]
|
|
add r0, ip, r3
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldr sb, [r0, #0xc]
|
|
cmp sb, #0
|
|
beq _0230F958
|
|
mov r0, sb
|
|
bl IsMonster__0230F980
|
|
cmp r0, #0
|
|
beq _0230F958
|
|
mov r0, sb
|
|
mov r1, r7
|
|
bl ItemIsActive__0230F810
|
|
cmp r0, #0
|
|
movne r0, r6
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
_0230F958:
|
|
add r0, r6, #1
|
|
and r0, r0, #0xff
|
|
add r1, r5, #1
|
|
and r6, r0, #7
|
|
and r5, r1, #0xff
|
|
_0230F96C:
|
|
cmp r5, #8
|
|
blo _0230F900
|
|
mov r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_0230F97C: .word DIRECTIONS_XY
|
|
arm_func_end ov29_0230F8D0
|
|
|
|
arm_func_start IsMonster__0230F980
|
|
IsMonster__0230F980: ; 0x0230F980
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
bxeq lr
|
|
ldr r0, [r0]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end IsMonster__0230F980
|
|
|
|
arm_func_start ov29_0230F9A4
|
|
ov29_0230F9A4: ; 0x0230F9A4
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl IsMonster__0230F980
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r0, [r5, #0xb4]
|
|
ldrb r0, [r0, #6]
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r0, r4
|
|
bl ov29_0234908C
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ov29_0230F9A4
|
|
|
|
arm_func_start TrySpawnEnemyItemDrop
|
|
TrySpawnEnemyItemDrop: ; 0x0230F9D8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
sub sp, sp, #8
|
|
ldr r2, _0230FB28 ; =DUNGEON_PTR
|
|
mov r6, r0
|
|
ldr r0, [r2]
|
|
mov r5, r1
|
|
ldrb r0, [r0, #0x748]
|
|
bl TreasureBoxDropsEnabled
|
|
cmp r0, #0
|
|
ldrne r4, [r5, #0xb4]
|
|
ldrneb r0, [r4, #6]
|
|
cmpne r0, #0
|
|
beq _0230FB20
|
|
ldr r0, [r6]
|
|
mov r7, #0
|
|
cmp r0, #1
|
|
bne _0230FA54
|
|
mov r0, r6
|
|
mov r1, #0x43
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
addne r0, r7, #1
|
|
movne r0, r0, lsl #0x10
|
|
movne r7, r0, asr #0x10
|
|
mov r0, r6
|
|
mov r1, #0x56
|
|
bl ExclusiveItemEffectIsActive__0230F8AC
|
|
cmp r0, #0
|
|
addne r0, r7, #1
|
|
movne r0, r0, lsl #0x10
|
|
movne r7, r0, asr #0x10
|
|
_0230FA54:
|
|
ldrsh r1, [r4, #2]
|
|
add r0, sp, #0
|
|
mov r2, r7
|
|
bl TryGenerateUnownStoneDrop
|
|
cmp r0, #0
|
|
beq _0230FA84
|
|
add r2, sp, #0
|
|
mov r0, r5
|
|
add r1, r5, #4
|
|
mov r3, #1
|
|
bl SpawnDroppedItemWrapper
|
|
b _0230FB20
|
|
_0230FA84:
|
|
mov r0, r6
|
|
mov r1, #0x75
|
|
bl AbilityIsActiveVeneer
|
|
mov r2, r0
|
|
add r0, sp, #0
|
|
mov r1, r5
|
|
mov r3, r7
|
|
bl ov29_023460DC
|
|
cmp r0, #0
|
|
beq _0230FAC4
|
|
add r2, sp, #0
|
|
mov r0, r5
|
|
add r1, r5, #4
|
|
mov r3, #1
|
|
bl SpawnDroppedItemWrapper
|
|
b _0230FB20
|
|
_0230FAC4:
|
|
mov r0, r6
|
|
bl IsMonster__0230F980
|
|
cmp r0, #0
|
|
beq _0230FB20
|
|
mov r0, r6
|
|
mov r1, #0x62
|
|
bl ExclusiveItemEffectIsActive__0230F8AC
|
|
cmp r0, #0
|
|
beq _0230FB20
|
|
ldr r0, _0230FB2C ; =ov10_022C4650
|
|
ldrsh r0, [r0]
|
|
bl DungeonRandOutcome__022EAB20
|
|
cmp r0, #0
|
|
beq _0230FB20
|
|
add r0, sp, #0
|
|
mov r1, #0xb7
|
|
mov r2, #2
|
|
bl GenerateStandardItem
|
|
add r2, sp, #0
|
|
mov r0, r5
|
|
add r1, r5, #4
|
|
mov r3, #1
|
|
bl SpawnDroppedItemWrapper
|
|
_0230FB20:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0230FB28: .word DUNGEON_PTR
|
|
_0230FB2C: .word ov10_022C4650
|
|
arm_func_end TrySpawnEnemyItemDrop
|
|
|
|
arm_func_start ov29_0230FB30
|
|
ov29_0230FB30: ; 0x0230FB30
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r1, _0230FB88 ; =ov29_023529A8
|
|
mov r5, r0
|
|
ldrh r2, [r1]
|
|
add r0, sp, #0
|
|
strh r2, [sp]
|
|
ldrh r1, [r1, #2]
|
|
strh r1, [sp, #2]
|
|
bl ov29_02347184
|
|
movs r4, r0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bl ov29_02344B9C
|
|
ldr r1, _0230FB8C ; =0x00000F62
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0230FB88: .word ov29_023529A8
|
|
#ifdef JAPAN
|
|
_0230FB8C: .word 0x000009B6
|
|
#else
|
|
_0230FB8C: .word 0x00000F62
|
|
#endif
|
|
arm_func_end ov29_0230FB30
|
|
|
|
arm_func_start TickNoSlipCap
|
|
TickNoSlipCap: ; 0x0230FB90
|
|
#ifdef JAPAN
|
|
#define TICK_NO_SLIP_CAP_OFFSET -1
|
|
#else
|
|
#define TICK_NO_SLIP_CAP_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r1, #0x6f
|
|
mov r5, r0
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _0230FBB8
|
|
mov r0, r5
|
|
mov r1, #0xd
|
|
bl HasHeldItem
|
|
_0230FBB8:
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r4, [r5, #0xb4]
|
|
ldrb r0, [r4, #6]
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0x107 + TICK_NO_SLIP_CAP_OFFSET]
|
|
add r1, r0, #1
|
|
and r0, r1, #0xff
|
|
cmp r0, #0x14
|
|
strb r1, [r4, #0x107 + TICK_NO_SLIP_CAP_OFFSET]
|
|
movhs r0, #0x13
|
|
strhsb r0, [r4, #0x107 + TICK_NO_SLIP_CAP_OFFSET]
|
|
mov r0, #0x64
|
|
bl DungeonRandInt
|
|
ldrb r2, [r4, #0x107 + TICK_NO_SLIP_CAP_OFFSET]
|
|
ldr r1, _0230FC20 ; =ov10_022C4BE4
|
|
mov r2, r2, lsl #1
|
|
ldrsh r1, [r1, r2]
|
|
cmp r0, r1
|
|
ldmgeia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
bl ov29_0230FB30
|
|
mov r0, #0
|
|
strb r0, [r4, #0x107 + TICK_NO_SLIP_CAP_OFFSET]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0230FC20: .word ov10_022C4BE4
|
|
arm_func_end TickNoSlipCap
|
|
|
|
arm_func_start ov29_0230FC24
|
|
ov29_0230FC24: ; 0x0230FC24
|
|
#ifdef JAPAN
|
|
#define OV29_0230FC24_OFFSET -4
|
|
#define OV29_0230FC24_OFFSET_2 -0xA4
|
|
#define OV29_0230FC24_OFFSET_3 -1
|
|
#else
|
|
#define OV29_0230FC24_OFFSET 0
|
|
#define OV29_0230FC24_OFFSET_2 0
|
|
#define OV29_0230FC24_OFFSET_3 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #0x34
|
|
movs r5, r0
|
|
beq _02310FF4
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
ldr r4, [r5, #0xb4]
|
|
mov r1, #0
|
|
mov r0, r5
|
|
strb r1, [r4, #0x150 + OV29_0230FC24_OFFSET]
|
|
bl ov29_022FB718
|
|
bl ov29_0234B294
|
|
mov r0, r5
|
|
bl TryWeatherFormChange
|
|
mov r0, r5
|
|
mov r1, #0x1d
|
|
bl ItemIsActive__02311034
|
|
cmp r0, #0
|
|
beq _0230FD0C
|
|
ldrb r0, [r4, #0x17c + OV29_0230FC24_OFFSET]
|
|
add r1, r0, #1
|
|
and r0, r1, #0xff
|
|
cmp r0, #0x14
|
|
strb r1, [r4, #0x17c + OV29_0230FC24_OFFSET]
|
|
movhs r0, #0x13
|
|
strhsb r0, [r4, #0x17c + OV29_0230FC24_OFFSET]
|
|
mov r0, #0x64
|
|
bl DungeonRandInt
|
|
ldrb r2, [r4, #0x17c + OV29_0230FC24_OFFSET]
|
|
ldr r1, _02310A6C ; =ov10_022C4BBC
|
|
mov r2, r2, lsl #1
|
|
ldrsh r1, [r1, r2]
|
|
cmp r0, r1
|
|
bge _0230FD0C
|
|
mov r1, #0
|
|
mov r0, r5
|
|
strb r1, [r4, #0x17c + OV29_0230FC24_OFFSET]
|
|
bl ov29_022EC62C
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
mov r2, #0
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl TryWarp
|
|
mov r0, r5
|
|
bl ov29_022F42F8
|
|
_0230FD0C:
|
|
ldrb r0, [r4, #7]
|
|
cmp r0, #0
|
|
beq _0231013C
|
|
mov r0, r5
|
|
mov r1, #0x1e
|
|
mov r7, #0xa
|
|
bl ItemIsActive__02311034
|
|
cmp r0, #0
|
|
movne r2, r7
|
|
moveq r2, #0
|
|
mov r0, r5
|
|
mov r1, #0x26
|
|
sub r7, r7, r2
|
|
bl ItemIsActive__02311034
|
|
cmp r0, #0
|
|
movne r2, #1
|
|
moveq r2, #0
|
|
mov r0, r5
|
|
mov r1, #0x10
|
|
sub r7, r7, r2
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
mov r0, r5
|
|
mov r1, #0x22
|
|
subne r7, r7, #1
|
|
bl ItemIsActive__02311034
|
|
cmp r0, #0
|
|
movne r2, #1
|
|
moveq r2, #0
|
|
mov r0, r5
|
|
mov r1, #0x11
|
|
add r7, r7, r2
|
|
bl ItemIsActive__02311034
|
|
cmp r0, #0
|
|
movne r2, #1
|
|
moveq r2, #0
|
|
mov r0, r5
|
|
mov r1, #0x32
|
|
add r7, r7, r2
|
|
bl ItemIsActive__02311034
|
|
cmp r0, #0
|
|
movne r2, #1
|
|
moveq r2, #0
|
|
mov r0, r5
|
|
mov r1, #0x59
|
|
add r7, r7, r2
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
adds r7, r7, r0
|
|
movmi r7, #0
|
|
ldr r3, _02310A70 ; =0x0000199A
|
|
cmp r7, #0x13
|
|
mov r6, #0
|
|
ldr r2, _02310A74 ; =ov10_022C4FC4
|
|
movgt r7, #0x13
|
|
add r0, sp, #0x2c
|
|
add r1, sp, #0x24
|
|
str r6, [sp, #0x24]
|
|
str r3, [sp, #0x28]
|
|
add r2, r2, r7, lsl #3
|
|
bl MultiplyFixedPoint64
|
|
ldrb r2, [r4, #0x15d + OV29_0230FC24_OFFSET]
|
|
cmp r2, #1
|
|
ldrhi r0, _02310A78 ; =ov10_022C4A5C
|
|
ldrhi r1, [sp, #0x30]
|
|
ldrhi r0, [r0, r2, lsl #2]
|
|
addhi r0, r1, r0, lsl #16
|
|
strhi r0, [sp, #0x30]
|
|
mov r0, #0
|
|
strb r0, [r4, #0x15d + OV29_0230FC24_OFFSET]
|
|
add r0, r4, #0x100
|
|
ldrh r2, [r0, #0x46 + OV29_0230FC24_OFFSET]
|
|
ldrh r1, [r0, #0x48 + OV29_0230FC24_OFFSET]
|
|
add r0, sp, #0x2c
|
|
strh r2, [sp, #0x20]
|
|
strh r1, [sp, #0x22]
|
|
bl BinToDecFixedPoint
|
|
strh r0, [sp, #0x14]
|
|
mov r0, r0, lsr #0x10
|
|
add r1, r4, #0x100
|
|
strh r0, [sp, #0x16]
|
|
ldrh r0, [r1, #0x46 + OV29_0230FC24_OFFSET]
|
|
sub r3, sp, #4
|
|
ldrh r2, [sp, #0x14]
|
|
strh r0, [r3]
|
|
ldrh r0, [r1, #0x48 + OV29_0230FC24_OFFSET]
|
|
ldrh r1, [sp, #0x16]
|
|
strh r0, [r3, #2]
|
|
ldr r0, [r3]
|
|
strh r2, [r3]
|
|
strh r1, [r3, #2]
|
|
ldr r1, [r3]
|
|
bl SubFixedPoint
|
|
strh r0, [sp, #0x10]
|
|
mov r0, r0, lsr #0x10
|
|
strh r0, [sp, #0x12]
|
|
ldrh r1, [sp, #0x10]
|
|
add r0, r4, #0x100
|
|
ldrh r3, [sp, #0x12]
|
|
strh r1, [r0, #0x46 + OV29_0230FC24_OFFSET]
|
|
ldrh r2, [sp, #0x20]
|
|
strh r3, [r0, #0x48 + OV29_0230FC24_OFFSET]
|
|
sub r0, sp, #4
|
|
ldrh r1, [sp, #0x22]
|
|
strh r2, [r0]
|
|
mov r6, #0
|
|
strh r1, [r0, #2]
|
|
ldr r0, [r0]
|
|
mov r7, #1
|
|
bl CeilFixedPoint
|
|
cmp r0, #0x14
|
|
blt _0230FEFC
|
|
add r0, r4, #0x100
|
|
ldrh r1, [r0, #0x46 + OV29_0230FC24_OFFSET]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
ldrh r0, [r0, #0x48 + OV29_0230FC24_OFFSET]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0x14
|
|
ldrlt r6, _02310A7C ; =0x00000DE6
|
|
_0230FEFC:
|
|
ldrh r1, [sp, #0x20]
|
|
ldrh r0, [sp, #0x22]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0xa
|
|
blt _0230FF48
|
|
add r0, r4, #0x100
|
|
ldrh r1, [r0, #0x46 + OV29_0230FC24_OFFSET]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
ldrh r0, [r0, #0x48 + OV29_0230FC24_OFFSET]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0xa
|
|
ldrlt r6, _02310A80 ; =0x00000DE7
|
|
_0230FF48:
|
|
add r0, r4, #0x100
|
|
ldrh r1, [r0, #0x46 + OV29_0230FC24_OFFSET]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
ldrh r0, [r0, #0x48 + OV29_0230FC24_OFFSET]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0
|
|
bne _0230FF98
|
|
mov r0, #0
|
|
bl sub_02050FF8
|
|
strh r0, [sp, #0xc]
|
|
mov r0, r0, lsr #0x10
|
|
strh r0, [sp, #0xe]
|
|
ldrh r2, [sp, #0xc]
|
|
add r0, r4, #0x100
|
|
ldrh r1, [sp, #0xe]
|
|
strh r2, [r0, #0x46 + OV29_0230FC24_OFFSET]
|
|
strh r1, [r0, #0x48 + OV29_0230FC24_OFFSET]
|
|
_0230FF98:
|
|
add r0, r4, #0x100
|
|
ldrh r1, [r0, #0x46 + OV29_0230FC24_OFFSET]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
ldrh r0, [r0, #0x48 + OV29_0230FC24_OFFSET]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0
|
|
bge _0230FFE8
|
|
mov r0, #0
|
|
bl sub_02050FF8
|
|
strh r0, [sp, #8]
|
|
mov r0, r0, lsr #0x10
|
|
strh r0, [sp, #0xa]
|
|
ldrh r2, [sp, #8]
|
|
add r0, r4, #0x100
|
|
ldrh r1, [sp, #0xa]
|
|
strh r2, [r0, #0x46 + OV29_0230FC24_OFFSET]
|
|
strh r1, [r0, #0x48 + OV29_0230FC24_OFFSET]
|
|
_0230FFE8:
|
|
add r0, r4, #0x100
|
|
ldrh r1, [r0, #0x46 + OV29_0230FC24_OFFSET]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
ldrh r0, [r0, #0x48 + OV29_0230FC24_OFFSET]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0
|
|
bne _023100D8
|
|
bl ov29_022F2FE4
|
|
mov r0, r5
|
|
bl ov29_022EC62C
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
ldr r0, _02310A84 ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
ldrb r0, [r1, #0x799]
|
|
cmp r0, #0xa
|
|
addlo r0, r0, #1
|
|
strlob r0, [r1, #0x799]
|
|
ldr r0, _02310A84 ; =DUNGEON_PTR
|
|
mov r1, r5
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x799]
|
|
cmp r0, #1
|
|
ldreq r6, _02310A88 ; =0x00000DE8
|
|
cmp r0, #2
|
|
ldreq r6, _02310A8C ; =0x00000DE9
|
|
moveq r7, #0
|
|
cmp r0, #3
|
|
mov r0, r5
|
|
ldreq r6, _02310A90 ; =0x00000DEA
|
|
moveq r7, #0
|
|
bl ov29_02307BDC
|
|
mov r0, r5
|
|
mov r1, #1
|
|
mov r2, #0xe
|
|
mov r3, #0x250
|
|
bl ApplyDamageAndEffectsWrapper
|
|
mov r0, #1
|
|
strb r0, [r4, #0x150 + OV29_0230FC24_OFFSET]
|
|
add r0, r4, #0x100
|
|
ldrh r1, [r0, #0x46 + OV29_0230FC24_OFFSET]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
ldrh r0, [r0, #0x48 + OV29_0230FC24_OFFSET]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0
|
|
movne r6, #0
|
|
b _023100E8
|
|
_023100D8:
|
|
ldr r0, _02310A84 ; =DUNGEON_PTR
|
|
mov r1, #0
|
|
ldr r0, [r0]
|
|
strb r1, [r0, #0x799]
|
|
_023100E8:
|
|
cmp r6, #0
|
|
beq _0231013C
|
|
cmp r7, #0
|
|
beq _02310124
|
|
#if defined(EUROPE)
|
|
mov r0, r5
|
|
bl ov29_022E34A8_EU
|
|
#elif defined(JAPAN)
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
#else
|
|
ldr r0, _02310A84 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #8]
|
|
cmp r0, #0
|
|
bne _02310124
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
#endif
|
|
cmp r0, #0
|
|
beq _02310124
|
|
ldr r0, _02310A94 ; =0x00001303
|
|
bl ov29_022EACCC
|
|
_02310124:
|
|
mov r0, r5
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, #0x1e
|
|
mov r1, #0x32
|
|
bl ov29_022EA370
|
|
_0231013C:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
ldr r0, _02310A84 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0xc000
|
|
ldrb r0, [r0, #0xd5a + OV29_0230FC24_OFFSET_2]
|
|
cmp r0, #0
|
|
bne _0231037C
|
|
mov r0, r5
|
|
bl GetApparentWeather
|
|
cmp r0, #5
|
|
mov r0, r5
|
|
bne _023101FC
|
|
mov r1, #0x77
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _02310360
|
|
mov r0, r5
|
|
mov r1, #0x4d
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _02310360
|
|
mov r0, r5
|
|
mov r1, #6
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
bne _02310360
|
|
ldr r3, _02310A98 ; =0x00000DBD
|
|
mov r6, #9
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r2, #1
|
|
str r6, [sp]
|
|
bl ExclusiveItemEffectIsActiveWithLogging
|
|
cmp r0, #0
|
|
bne _02310360
|
|
ldr r0, _02310A9C ; =ov10_022C46EC
|
|
ldr r3, _02310AA0 ; =0x0000025F
|
|
ldrsh r1, [r0]
|
|
mov r0, r5
|
|
mov r2, #0x12
|
|
bl ApplyDamageAndEffectsWrapper
|
|
b _02310360
|
|
_023101FC:
|
|
bl GetApparentWeather
|
|
cmp r0, #2
|
|
mov r0, r5
|
|
bne _02310298
|
|
mov r1, #0x1d
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _02310360
|
|
mov r0, r5
|
|
mov r1, #9
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
bne _02310360
|
|
mov r0, r5
|
|
mov r1, #0xd
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
bne _02310360
|
|
mov r0, r5
|
|
mov r1, #0x11
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
bne _02310360
|
|
ldr r3, _02310A98 ; =0x00000DBD
|
|
mov r6, #9
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r2, #1
|
|
str r6, [sp]
|
|
bl ExclusiveItemEffectIsActiveWithLogging
|
|
cmp r0, #0
|
|
bne _02310360
|
|
ldr r0, _02310A9C ; =ov10_022C46EC
|
|
ldr r3, _02310AA0 ; =0x0000025F
|
|
ldrsh r1, [r0]
|
|
mov r0, r5
|
|
mov r2, #0x12
|
|
bl ApplyDamageAndEffectsWrapper
|
|
b _02310360
|
|
_02310298:
|
|
bl GetApparentWeather
|
|
cmp r0, #1
|
|
bne _02310360
|
|
mov r0, r5
|
|
mov r1, #0x5a
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _02310304
|
|
ldr r3, _02310A98 ; =0x00000DBD
|
|
mov r6, #9
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r2, #1
|
|
str r6, [sp]
|
|
bl ExclusiveItemEffectIsActiveWithLogging
|
|
cmp r0, #0
|
|
bne _02310360
|
|
mov r0, #2
|
|
mov r1, #0x5a
|
|
bl ov29_0234B084
|
|
ldr r0, _02310A9C ; =ov10_022C46EC
|
|
mov r2, #0x19
|
|
ldrsh r1, [r0]
|
|
mov r0, r5
|
|
rsb r3, r2, #0x278
|
|
bl ApplyDamageAndEffectsWrapper
|
|
b _02310360
|
|
_02310304:
|
|
mov r0, r5
|
|
mov r1, #0x55
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _02310360
|
|
ldr r3, _02310A98 ; =0x00000DBD
|
|
mov r6, #9
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r2, #1
|
|
str r6, [sp]
|
|
bl ExclusiveItemEffectIsActiveWithLogging
|
|
cmp r0, #0
|
|
bne _02310360
|
|
mov r0, #2
|
|
mov r1, #0x55
|
|
bl ov29_0234B084
|
|
ldr r0, _02310A9C ; =ov10_022C46EC
|
|
ldr r3, _02310AA0 ; =0x0000025F
|
|
ldrsh r1, [r0]
|
|
mov r0, r5
|
|
mov r2, #0x1a
|
|
bl ApplyDamageAndEffectsWrapper
|
|
_02310360:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
_0231037C:
|
|
mov r0, #0x64
|
|
bl DungeonRandInt
|
|
mov r6, r0
|
|
mov r0, r5
|
|
mov r1, #0x21
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _023103F8
|
|
ldr r0, _02310AA4 ; =ov10_022C46A0
|
|
ldrsh r0, [r0]
|
|
cmp r6, r0
|
|
bge _023103F8
|
|
mov r0, r5
|
|
mov r1, #0
|
|
bl MonsterHasNegativeStatus
|
|
cmp r0, #0
|
|
beq _023103F8
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl EndNegativeStatusConditionWrapper
|
|
_023103F8:
|
|
mov r0, r5
|
|
mov r1, #0x51
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _02310474
|
|
mov r0, r5
|
|
bl GetApparentWeather
|
|
cmp r0, #4
|
|
bne _02310474
|
|
mov r0, r5
|
|
mov r1, #0
|
|
bl MonsterHasNegativeStatus
|
|
cmp r0, #0
|
|
ldrneb r0, [r4, #0xc4]
|
|
cmpne r0, #3
|
|
beq _02310474
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
mov r3, #0
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r2, #1
|
|
str r3, [sp]
|
|
bl EndNegativeStatusCondition
|
|
_02310474:
|
|
mov r0, r5
|
|
mov r1, #0xb
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _023104C0
|
|
ldrb r1, [r4, #0x11f + OV29_0230FC24_OFFSET]
|
|
ldr r0, _02310AA8 ; =SPEED_BOOST_TURNS
|
|
add r2, r1, #1
|
|
ldrsh r0, [r0]
|
|
and r1, r2, #0xff
|
|
strb r2, [r4, #0x11f + OV29_0230FC24_OFFSET]
|
|
cmp r1, r0
|
|
blt _023104C0
|
|
mov r3, #0
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r2, #0x7f
|
|
strb r3, [r4, #0x11f + OV29_0230FC24_OFFSET]
|
|
bl BoostSpeedOneStage
|
|
_023104C0:
|
|
ldrb r0, [r4, #0xbd]
|
|
cmp r0, #4
|
|
bne _023104F8
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
mov r0, r5
|
|
bl ov29_022E53F0
|
|
_023104F8:
|
|
ldrb r0, [r4, #0xbf]
|
|
cmp r0, #1
|
|
bne _02310590
|
|
ldrb r0, [r4, #0xc1]
|
|
cmp r0, #0
|
|
subne r0, r0, #1
|
|
strneb r0, [r4, #0xc1]
|
|
ldrb r0, [r4, #0xc1]
|
|
cmp r0, #0
|
|
bne _02310574
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
ldr r1, _02310AAC ; =BURN_DAMAGE_COOLDOWN
|
|
mov r0, r5
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
strb r2, [r4, #0xc1]
|
|
bl ov29_02307BDC
|
|
ldr r0, _02310AB0 ; =BURN_DAMAGE
|
|
mov r2, #1
|
|
ldrsh r1, [r0]
|
|
mov r0, r5
|
|
rsb r3, r2, #0x248
|
|
bl ApplyDamageAndEffectsWrapper
|
|
_02310574:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
_02310590:
|
|
bl GravityIsActive
|
|
cmp r0, #0
|
|
beq _023105DC
|
|
mov r0, r5
|
|
bl IsFloating
|
|
cmp r0, #0
|
|
beq _023105C0
|
|
mov r0, r5
|
|
mov r1, r5
|
|
bl EndMagnetRiseStatus
|
|
mov r0, r5
|
|
bl EnsureCanStandCurrentTile
|
|
_023105C0:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
_023105DC:
|
|
mov r0, r5
|
|
mov r1, #0x69
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _02310614
|
|
mov r0, r5
|
|
bl TryActivateBadDreams
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
_02310614:
|
|
mov r0, r5
|
|
bl GetTileAtEntity
|
|
bl ov29_02337E2C
|
|
cmp r0, #0
|
|
bne _023106A4
|
|
ldrsh r2, [r4, #0x12]
|
|
ldrsh r1, [r4, #0x16]
|
|
ldr r0, _02310AB4 ; =0x000003E7
|
|
add r1, r2, r1
|
|
cmp r1, r0
|
|
movgt r1, r0
|
|
ldrsh r0, [r4, #0x10]
|
|
cmp r0, r1
|
|
bge _0231067C
|
|
mov r0, r5
|
|
mov r1, #0x64
|
|
bl ExclusiveItemEffectIsActive__02311064
|
|
cmp r0, #0
|
|
beq _0231067C
|
|
ldr r0, _02310AB8 ; =ov10_022C4664
|
|
mov r3, #0
|
|
ldrsh r2, [r0]
|
|
mov r0, r5
|
|
mov r1, r5
|
|
str r3, [sp]
|
|
bl TryIncreaseHp
|
|
_0231067C:
|
|
mov r0, r5
|
|
mov r1, #0x65
|
|
bl ExclusiveItemEffectIsActive__02311064
|
|
cmp r0, #0
|
|
beq _023106A4
|
|
mov r2, #1
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl EndNegativeStatusConditionWrapper
|
|
_023106A4:
|
|
mov r0, r5
|
|
mov r1, #0x5c
|
|
bl ExclusiveItemEffectIsActive__02311064
|
|
cmp r0, #0
|
|
beq _02310754
|
|
mov sl, #0
|
|
ldr r6, _02310A84 ; =DUNGEON_PTR
|
|
mov sb, sl
|
|
mov r7, #1
|
|
_023106C8:
|
|
ldr r0, [r6]
|
|
add r0, r0, sb, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r8, [r0, #0xb28 + OV29_0230FC24_OFFSET_2]
|
|
mov r0, r8
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310718
|
|
ldr r0, [r8, #0xb4]
|
|
ldrb r0, [r0, #0xbf]
|
|
add r0, r0, #0xfe
|
|
and r0, r0, #0xff
|
|
cmp r0, #1
|
|
bhi _02310718
|
|
mov r0, r8
|
|
bl ov29_022E543C
|
|
mov r0, r8
|
|
mov r1, r8
|
|
bl EndBurnClassStatus
|
|
mov sl, r7
|
|
_02310718:
|
|
add r0, sb, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov sb, r0, asr #0x10
|
|
cmp sb, #4
|
|
blt _023106C8
|
|
cmp sl, #0
|
|
beq _02310754
|
|
ldr r0, _02310ABC ; =ov10_022C464C
|
|
mov r6, #1
|
|
ldrsh r2, [r0]
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r3, #0
|
|
str r6, [sp]
|
|
bl TryIncreaseHp
|
|
_02310754:
|
|
ldrb r0, [r4, #0xbf]
|
|
cmp r0, #2
|
|
bne _02310830
|
|
ldrb r0, [r4, #0xc1]
|
|
cmp r0, #0
|
|
subne r0, r0, #1
|
|
strneb r0, [r4, #0xc1]
|
|
ldrb r0, [r4, #0xc1]
|
|
cmp r0, #0
|
|
bne _02310810
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
ldreqb r0, [r4, #0xbf]
|
|
cmpeq r0, #2
|
|
bne _02310FF4
|
|
ldr r1, _02310AC0 ; =POISON_DAMAGE_COOLDOWN
|
|
mov r0, r5
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
strb r2, [r4, #0xc1]
|
|
bl ov29_02307BDC
|
|
mov r0, r5
|
|
mov r1, #0x72
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _023107F8
|
|
ldr r0, _02310AC4 ; =POISON_DAMAGE
|
|
mov r6, #1
|
|
ldrsh r2, [r0]
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r3, #0
|
|
str r6, [sp]
|
|
bl TryIncreaseHp
|
|
b _02310810
|
|
_023107F8:
|
|
ldr r0, _02310AC4 ; =POISON_DAMAGE
|
|
mov r2, #3
|
|
ldrsh r1, [r0]
|
|
mov r0, r5
|
|
rsb r3, r2, #0x24c
|
|
bl ApplyDamageAndEffectsWrapper
|
|
_02310810:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
beq _0231092C
|
|
b _02310FF4
|
|
_02310830:
|
|
cmp r0, #3
|
|
bne _0231092C
|
|
ldrb r0, [r4, #0xc1]
|
|
cmp r0, #0
|
|
subne r0, r0, #1
|
|
strneb r0, [r4, #0xc1]
|
|
ldrb r0, [r4, #0xc1]
|
|
cmp r0, #0
|
|
bne _02310910
|
|
ldrb r6, [r4, #0xc2]
|
|
cmp r6, #0x1d
|
|
addlo r0, r6, #1
|
|
strlob r0, [r4, #0xc2]
|
|
ldr r0, _02310AC8 ; =BAD_POISON_DAMAGE_COOLDOWN
|
|
cmp r6, #0x1d
|
|
ldrsh r0, [r0]
|
|
movge r6, #0x1d
|
|
cmp r6, #0
|
|
strb r0, [r4, #0xc1]
|
|
mov r0, #0
|
|
movlt r6, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
ldreqb r0, [r4, #0xbf]
|
|
cmpeq r0, #3
|
|
bne _02310FF4
|
|
mov r0, r5
|
|
mov r1, r5
|
|
bl ov29_02307BDC
|
|
mov r0, r5
|
|
mov r1, #0x72
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _023108F4
|
|
ldr r0, _02310ACC ; =BAD_POISON_DAMAGE_TABLE
|
|
mov r1, r6, lsl #1
|
|
ldrsh r2, [r0, r1]
|
|
mov r6, #1
|
|
mov r0, r5
|
|
mov r1, r5
|
|
mov r3, #0
|
|
str r6, [sp]
|
|
bl TryIncreaseHp
|
|
b _02310910
|
|
_023108F4:
|
|
ldr r0, _02310ACC ; =BAD_POISON_DAMAGE_TABLE
|
|
mov r1, r6, lsl #1
|
|
ldrsh r1, [r0, r1]
|
|
mov r2, #3
|
|
mov r0, r5
|
|
rsb r3, r2, #0x24c
|
|
bl ApplyDamageAndEffectsWrapper
|
|
_02310910:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
_0231092C:
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #7
|
|
bne _023109D4
|
|
ldrb r0, [r4, #0xcd]
|
|
cmp r0, #0
|
|
subne r0, r0, #1
|
|
strneb r0, [r4, #0xcd]
|
|
ldrb r0, [r4, #0xcd]
|
|
cmp r0, #0
|
|
bne _023109B4
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
ldr r1, _02310AD0 ; =ov10_022C4454
|
|
mov r0, r5
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
strb r2, [r4, #0xcd]
|
|
bl ov29_02307BDC
|
|
ldr r1, [r4, #0xc8]
|
|
mov r0, r5
|
|
bl ov29_022E42E8
|
|
ldr r1, _02310AD4 ; =ov10_022C446C
|
|
mov r0, r5
|
|
ldrsh r1, [r1]
|
|
mov r2, #2
|
|
mov r3, #0x248
|
|
bl ApplyDamageAndEffectsWrapper
|
|
_023109B4:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
beq _02310B6C
|
|
b _02310FF4
|
|
_023109D4:
|
|
cmp r0, #4
|
|
bne _02310AF8
|
|
ldrb r0, [r4, #0xcd]
|
|
cmp r0, #0
|
|
subne r0, r0, #1
|
|
strneb r0, [r4, #0xcd]
|
|
ldrb r0, [r4, #0xcd]
|
|
cmp r0, #0
|
|
bne _02310A4C
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
ldr r1, _02310AD8 ; =ov10_022C45F0
|
|
mov r0, r5
|
|
ldrsh r2, [r1]
|
|
mov r1, r5
|
|
strb r2, [r4, #0xcd]
|
|
bl ov29_02307BDC
|
|
ldr r0, _02310ADC ; =ov10_022C45D0
|
|
ldr r3, _02310AE0 ; =0x0000024A
|
|
ldrsh r1, [r0]
|
|
mov r0, r5
|
|
mov r2, #5
|
|
bl ApplyDamageAndEffectsWrapper
|
|
_02310A4C:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
beq _02310B6C
|
|
b _02310FF4
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define OV29_0230FC24_DATA_OFFSET -0x2C0
|
|
#else
|
|
#define OV29_0230FC24_DATA_OFFSET 0
|
|
#endif
|
|
_02310A6C: .word ov10_022C4BBC
|
|
_02310A70: .word 0x0000199A
|
|
_02310A74: .word ov10_022C4FC4
|
|
_02310A78: .word ov10_022C4A5C
|
|
_02310A7C: .word 0x00000DE6 + OV29_0230FC24_DATA_OFFSET
|
|
_02310A80: .word 0x00000DE7 + OV29_0230FC24_DATA_OFFSET
|
|
_02310A84: .word DUNGEON_PTR
|
|
_02310A88: .word 0x00000DE8 + OV29_0230FC24_DATA_OFFSET
|
|
_02310A8C: .word 0x00000DE9 + OV29_0230FC24_DATA_OFFSET
|
|
_02310A90: .word 0x00000DEA + OV29_0230FC24_DATA_OFFSET
|
|
_02310A94: .word 0x00001303
|
|
_02310A98: .word 0x00000DBD + OV29_0230FC24_DATA_OFFSET
|
|
_02310A9C: .word ov10_022C46EC
|
|
_02310AA0: .word 0x0000025F
|
|
_02310AA4: .word ov10_022C46A0
|
|
_02310AA8: .word SPEED_BOOST_TURNS
|
|
_02310AAC: .word BURN_DAMAGE_COOLDOWN
|
|
_02310AB0: .word BURN_DAMAGE
|
|
_02310AB4: .word 0x000003E7
|
|
_02310AB8: .word ov10_022C4664
|
|
_02310ABC: .word ov10_022C464C
|
|
_02310AC0: .word POISON_DAMAGE_COOLDOWN
|
|
_02310AC4: .word POISON_DAMAGE
|
|
_02310AC8: .word BAD_POISON_DAMAGE_COOLDOWN
|
|
_02310ACC: .word BAD_POISON_DAMAGE_TABLE
|
|
_02310AD0: .word ov10_022C4454
|
|
_02310AD4: .word ov10_022C446C
|
|
_02310AD8: .word ov10_022C45F0
|
|
_02310ADC: .word ov10_022C45D0
|
|
_02310AE0: .word 0x0000024A
|
|
_02310AE4: .word ov10_022C45E8
|
|
_02310AE8: .word ov10_022C4590
|
|
_02310AEC: .word ov10_022C44BC
|
|
_02310AF0: .word LEECH_SEED_DAMAGE_COOLDOWN
|
|
_02310AF4: .word LEECH_SEED_HP_DRAIN
|
|
_02310AF8:
|
|
cmp r0, #5
|
|
bne _02310B6C
|
|
ldrb r0, [r4, #0xcd]
|
|
cmp r0, #0
|
|
subne r0, r0, #1
|
|
strneb r0, [r4, #0xcd]
|
|
ldrb r0, [r4, #0xcd]
|
|
cmp r0, #0
|
|
bne _02310B6C
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
ldr r1, _02310AE4 ; =ov10_022C45E8
|
|
ldr r0, _02310AE8 ; =ov10_022C4590
|
|
ldrsh r3, [r1]
|
|
ldrsh r2, [r0]
|
|
mov r0, r5
|
|
mov r1, r5
|
|
strb r3, [r4, #0xcd]
|
|
mov r6, #1
|
|
mov r3, #0
|
|
str r6, [sp]
|
|
bl TryIncreaseHp
|
|
_02310B6C:
|
|
ldrb r0, [r4, #0xd8]
|
|
cmp r0, #1
|
|
bne _02310C28
|
|
ldrb r0, [r4, #0xdc]
|
|
cmp r0, #0
|
|
subne r0, r0, #1
|
|
strneb r0, [r4, #0xdc]
|
|
ldrb r0, [r4, #0xdc]
|
|
cmp r0, #0
|
|
bne _02310C0C
|
|
ldrsh r2, [r4, #0x12]
|
|
ldrsh r1, [r4, #0x16]
|
|
ldr r0, _02310AB4 ; =0x000003E7
|
|
add r1, r2, r1
|
|
cmp r1, r0
|
|
movgt r1, r0
|
|
mov r0, r1, asr #1
|
|
add r0, r1, r0, lsr #30
|
|
ldr r1, _02310AEC ; =ov10_022C44BC
|
|
movs r6, r0, asr #2
|
|
ldrsh r1, [r1]
|
|
mov r0, #0
|
|
addeq r6, r6, #1
|
|
strb r1, [r4, #0xdc]
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
mov r0, r5
|
|
mov r1, r5
|
|
bl ov29_02307BDC
|
|
mov r2, #7
|
|
mov r0, r5
|
|
mov r1, r6
|
|
add r3, r2, #0x244
|
|
bl ApplyDamageAndEffectsWrapper
|
|
_02310C0C:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
_02310C28:
|
|
ldrb r0, [r4, #0xe0]
|
|
cmp r0, #1
|
|
bne _02310DE0
|
|
ldrb r0, [r4, #0xea]
|
|
cmp r0, #0
|
|
subne r0, r0, #1
|
|
strneb r0, [r4, #0xea]
|
|
ldrb r0, [r4, #0xea]
|
|
cmp r0, #0
|
|
bne _02310DC4
|
|
ldr r0, _02310A84 ; =DUNGEON_PTR
|
|
ldrb r2, [r4, #0xe8]
|
|
ldr r0, [r0]
|
|
ldr r1, _02310AF0 ; =LEECH_SEED_DAMAGE_COOLDOWN
|
|
add r0, r0, r2, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r7, [r0, #0xb78 + OV29_0230FC24_OFFSET_2]
|
|
ldrsh r1, [r1]
|
|
ldr r0, _02310AF4 ; =LEECH_SEED_HP_DRAIN
|
|
cmp r7, #0
|
|
ldrsh r6, [r0]
|
|
strb r1, [r4, #0xea]
|
|
moveq r0, #0
|
|
streqb r0, [r4, #0xe0]
|
|
beq _02310DC4
|
|
ldr r0, [r7, #0xb4]
|
|
ldr r1, [r4, #0xe4]
|
|
ldr r0, [r0, #0xb0]
|
|
cmp r1, r0
|
|
movne r0, #0
|
|
strneb r0, [r4, #0xe0]
|
|
bne _02310DC4
|
|
cmp r7, r5
|
|
beq _02310CF0
|
|
cmp r7, #0
|
|
moveq r0, #0
|
|
beq _02310CD0
|
|
ldr r0, [r7]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
_02310CD0:
|
|
cmp r0, #0
|
|
beq _02310CF0
|
|
mov r0, r7
|
|
mov r1, #0x53
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r8, #0
|
|
bne _02310D00
|
|
_02310CF0:
|
|
mov r0, r5
|
|
mov r1, #0x3a
|
|
bl AbilityIsActiveVeneer
|
|
mov r8, r0
|
|
_02310D00:
|
|
mov r0, r5
|
|
bl ov29_022EC62C
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
mov r0, r7
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #1
|
|
beq _02310DC4
|
|
mov r0, r5
|
|
mov r1, r5
|
|
bl ov29_02307BDC
|
|
mov r0, r5
|
|
mov r1, r6
|
|
mov r2, #9
|
|
mov r3, #0x24c
|
|
bl ApplyDamageAndEffectsWrapper
|
|
cmp r8, #0
|
|
beq _02310D94
|
|
mov r0, r7
|
|
mov r1, r7
|
|
bl ov29_02307BDC
|
|
mov r2, #0xd
|
|
mov r0, r7
|
|
mov r1, r6
|
|
add r3, r2, #0x22c
|
|
bl ApplyDamageAndEffectsWrapper
|
|
b _02310DC4
|
|
_02310D94:
|
|
mov r0, r5
|
|
mov r1, #0x73
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _02310DC4
|
|
mov r8, #1
|
|
mov r0, r7
|
|
mov r1, r7
|
|
mov r2, r6
|
|
mov r3, #0
|
|
str r8, [sp]
|
|
bl TryIncreaseHp
|
|
_02310DC4:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
_02310DE0:
|
|
ldrb r0, [r4, #0x106 + OV29_0230FC24_OFFSET_3]
|
|
cmp r0, #0
|
|
beq _02310E9C
|
|
add r0, r4, #6 + OV29_0230FC24_OFFSET_3
|
|
add r0, r0, #0x100
|
|
bl TickStatusTurnCounter
|
|
ldrb r0, [r4, #0x106 + OV29_0230FC24_OFFSET_3]
|
|
cmp r0, #0
|
|
bne _02310E9C
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
mov r1, r5
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r1, _02310FFC ; =0x00000DEB
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, r5
|
|
mov r1, r5
|
|
bl ov29_02307BDC
|
|
ldrb r0, [r4, #0xd5]
|
|
cmp r0, #7
|
|
bne _02310E6C
|
|
ldr r1, _02311000 ; =0x00000DEC
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _02310E80
|
|
_02310E6C:
|
|
mov r2, #0xb
|
|
ldr r1, _02311004 ; =0x0000270F
|
|
mov r0, r5
|
|
rsb r3, r2, #0x258
|
|
bl ApplyDamageAndEffectsWrapper
|
|
_02310E80:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
_02310E9C:
|
|
ldrb r0, [r4, #0xd2]
|
|
cmp r0, #1
|
|
bne _02310F70
|
|
add r0, r4, #0xd3
|
|
bl TickStatusTurnCounter
|
|
ldrb r0, [r4, #0xd3]
|
|
cmp r0, #0
|
|
bne _02310F70
|
|
mov r1, #0
|
|
mov r0, r5
|
|
strb r1, [r4, #0xd2]
|
|
bl CheckVariousStatuses2
|
|
cmp r0, #0
|
|
bne _02310F70
|
|
mov r0, r5
|
|
mov r1, #0
|
|
bl ov29_02300DCC
|
|
cmp r0, #0
|
|
bne _02310F70
|
|
mov r0, r5
|
|
bl CheckVariousStatuses
|
|
cmp r0, #0
|
|
bne _02310F70
|
|
mov r0, #0
|
|
bl DisplayActions
|
|
ldrh r0, [r4, #0xac]
|
|
cmp r0, #0
|
|
ldreq r0, _02311008 ; =0x00000165
|
|
streqh r0, [r4, #0xac]
|
|
ldrh r1, [r4, #0xac]
|
|
add r0, sp, #0x18
|
|
bl InitMove
|
|
mov r1, #0
|
|
ldrb r0, [sp, #0x18]
|
|
add r6, sp, #0x18
|
|
mov r2, r1
|
|
orr r0, r0, #0x10
|
|
strb r0, [sp, #0x18]
|
|
mov r0, r5
|
|
mov r3, r1
|
|
stmia sp, {r1, r6}
|
|
bl ov29_02322374
|
|
mov r1, #0
|
|
mov r0, r5
|
|
strh r1, [r4, #0xac]
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
mov r0, #0
|
|
str r0, [r4, #0xb8]
|
|
_02310F70:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
ldrb r0, [r4, #0xd2]
|
|
cmp r0, #0xc
|
|
bne _02310FD0
|
|
add r0, r4, #0xd3
|
|
bl TickStatusTurnCounter
|
|
ldrb r0, [r4, #0xd3]
|
|
cmp r0, #0
|
|
bne _02310FD0
|
|
mov r0, #0
|
|
strb r0, [r4, #0xd2]
|
|
mov r1, r5
|
|
mov r2, r0
|
|
strb r0, [r4, #0x154 + OV29_0230FC24_OFFSET]
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r1, _0231100C ; =0x00000CBA
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_02310FD0:
|
|
mov r0, r5
|
|
bl EntityIsValid__02311010
|
|
cmp r0, #0
|
|
beq _02310FF4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _02310FF4
|
|
mov r0, r5
|
|
bl TickNoSlipCap
|
|
_02310FF4:
|
|
add sp, sp, #0x34
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_02310FFC: .word 0x00000DEB + OV29_0230FC24_DATA_OFFSET
|
|
_02311000: .word 0x00000DEC + OV29_0230FC24_DATA_OFFSET
|
|
_02311004: .word 0x0000270F
|
|
_02311008: .word 0x00000165
|
|
_0231100C: .word 0x00000CBA + OV29_0230FC24_DATA_OFFSET
|
|
arm_func_end ov29_0230FC24
|