pmd-sky/asm/overlay_29_022FE4BC.s
2025-06-11 00:02:33 -04:00

1319 lines
23 KiB
ArmAsm

.include "asm/macros.inc"
.include "overlay_29_022FE4BC.inc"
.text
arm_func_start ExecuteMonsterAction
ExecuteMonsterAction: ; 0x022FE4BC
#ifdef JAPAN
#define EXECUTE_MONSTER_ACTION_OFFSET -4
#else
#define EXECUTE_MONSTER_ACTION_OFFSET 0
#endif
#ifdef EUROPE
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #4
mov r6, r0
ldr r1, [r6, #0xb4]
mov r0, #1
ldrb r7, [r1, #6]
bl AnimationDelayOrSomething
bl ov29_022FBD08
mov r0, #1
bl ov29_0234B024
ldr r5, [r6, #0xb4]
mov r1, #0
strb r1, [r5, #0x109]
ldr r0, _022FED70 ; =0x02354138
strb r1, [r5, #0xfc]
ldr r1, [r0]
ldr r0, _022FED74 ; =0x022C5894
str r6, [r1, #0xc4]
ldrh r2, [r5, #0x4a]
ldrb r0, [r0, r2, lsl #1]
cmp r0, #0
beq _022FEF64
ldrb r0, [r5, #7]
cmp r0, #0
beq _022FEF54
ldr r1, _022FED78 ; =0x022C5895
mov r0, r6
ldrb r1, [r1, r2, lsl #1]
bl ov29_022F3890
b _022FEF64
_022FEF54:
ldr r1, _022FED78 ; =0x022C5895
mov r0, r6
ldrb r1, [r1, r2, lsl #1]
bl ov29_023085DC
_022FEF64:
mov r0, r6
mov r1, #0
bl MonsterCannotAttack
cmp r0, #0
beq _022FEF94
mov r0, r6
mov r1, #1
bl IsChargingAnyTwoTurnMove
cmp r0, #0
beq _022FEF94
mov r0, r6
bl ov29_02318D58
_022FEF94:
mov r8, #0
add r3, r5, #0x124
mov r1, r8
mov r2, #1
_022FEFA4:
ldrb r0, [r3, r8, lsl #3]
add r4, r3, r8, lsl #3
add r8, r8, #1
tst r0, #1
movne r0, r2
moveq r0, r1
tst r0, #0xff
ldrneh r0, [r4, #2]
bicne r0, r0, #4
strneh r0, [r4, #2]
cmp r8, #4
blt _022FEFA4
bl ov29_022E81F8
mov r0, r6
mov r1, #0
bl ov29_022EB944
cmp r0, #0
bne _022FF064
mov r0, r6
bl DisplayActions
cmp r0, #0
beq _022FF034
bl IsFloorOver
cmp r0, #0
movne r4, #0
bne _022FF798
mov r0, r6
bl EntityIsValid__022FED98
cmp r0, #0
moveq r4, #0
beq _022FF798
ldr r0, _022FED7C ; =0x0237D5C0
ldrb r0, [r0, #1]
cmp r0, #0
movne r4, #1
bne _022FF798
_022FF034:
ldrb r0, [r5, #7]
cmp r0, #0
bne _022FF048
mov r0, #0xa
bl ov29_0234BA54
_022FF048:
ldrb r0, [r5, #0x23c]
cmp r0, #0
bne _022FF05C
mov r0, r6
bl ov29_022F9840
_022FF05C:
mov r0, #0xa
bl AdvanceFrame
_022FF064:
mov r0, #0
strb r0, [r5, #0x23c]
ldrh r0, [r5, #0x4a]
mov r4, #0
ldr r1, _022FED80 ; =0x0237D66C
cmp r0, #1
cmpne r0, #0
cmpne r0, #4
cmpne r0, #2
movne r0, #1
strneb r0, [r5, #0x152]
strb r4, [r5, #0x154]
ldr r0, _022FED84 ; =0x0237D668
strb r4, [r1]
strb r4, [r0]
mov r1, #1
strb r1, [r5, #0x103]
ldrh r0, [r5, #0x4a]
cmp r0, #0x42
addls pc, pc, r0, lsl #2
b _022FF5D8
_022FF0B8: ; jump table
b _022FF5D8 ; case 0
b _022FF5D8 ; case 1
b _022FF1C4 ; case 2
b _022FF5D8 ; case 3
b _022FF5D8 ; case 4
b _022FF5D8 ; case 5
b _022FF5D8 ; case 6
b _022FF5D8 ; case 7
b _022FF4D0 ; case 8
b _022FF45C ; case 9
b _022FF4DC ; case 10
b _022FF4F4 ; case 11
b _022FF5D8 ; case 12
b _022FF434 ; case 13
b _022FF434 ; case 14
b _022FF5D8 ; case 15
b _022FF44C ; case 16
b _022FF5D8 ; case 17
b _022FF434 ; case 18
b _022FF538 ; case 19
b _022FF544 ; case 20
b _022FF3C8 ; case 21
b _022FF5D8 ; case 22
b _022FF550 ; case 23
b _022FF5D8 ; case 24
b _022FF5D8 ; case 25
b _022FF5D8 ; case 26
b _022FF5D8 ; case 27
b _022FF5D8 ; case 28
b _022FF5D8 ; case 29
b _022FF5D8 ; case 30
b _022FF5D8 ; case 31
b _022FF5D8 ; case 32
b _022FF5D8 ; case 33
b _022FF5D8 ; case 34
b _022FF594 ; case 35
b _022FF5A0 ; case 36
b _022FF570 ; case 37
b _022FF3D4 ; case 38
b _022FF4F4 ; case 39
b _022FF5D8 ; case 40
b _022FF5D8 ; case 41
b _022FF5D8 ; case 42
b _022FF5D8 ; case 43
b _022FF454 ; case 44
b _022FF5D8 ; case 45
b _022FF5D8 ; case 46
b _022FF5D8 ; case 47
b _022FF5D8 ; case 48
b _022FF440 ; case 49
b _022FF560 ; case 50
b _022FF5D8 ; case 51
b _022FF5D8 ; case 52
b _022FF5D8 ; case 53
b _022FF468 ; case 54
b _022FF474 ; case 55
b _022FF48C ; case 56
b _022FF5AC ; case 57
b _022FF4E8 ; case 58
b _022FF4B0 ; case 59
b _022FF498 ; case 60
b _022FF4A4 ; case 61
b _022FF480 ; case 62
b _022FF588 ; case 63
b _022FF5D8 ; case 64
b _022FF4F4 ; case 65
b _022FF5CC ; case 66
_022FF1C4:
ldrb r0, [r5, #0xc4]
cmp r0, #2
cmpne r0, #7
beq _022FF1E4
add r0, r0, #0xfd
and r0, r0, #0xff
cmp r0, #2
bhi _022FF244
_022FF1E4:
mov r0, #0
strh r0, [r5, #0x4a]
mov r0, #1
strb r0, [r5, #0x151]
ldrb r0, [r5, #7]
cmp r0, #0
beq _022FF5E0
ldr r0, _022FED70 ; =0x02354138
ldr r0, [r0]
add r0, r0, #0x100
ldrsh r0, [r0, #0xd8]
cmp r0, #0
blt _022FF220
mov r0, #0x56
bl AdvanceFrame
_022FF220:
ldr r1, _022FED70 ; =0x02354138
mvn r2, #0
ldr r0, [r1]
add r0, r0, #0x100
strh r2, [r0, #0xd8]
ldr r0, [r1]
add r0, r0, #0x100
strh r2, [r0, #0xda]
b _022FF5E0
_022FF244:
ldrb r1, [r5, #0x4c]
ldrh r3, [r5]
ldr r2, _022FED88 ; =0x02352328
mov sl, r1, lsl #2
ldr r0, _022FED8C ; =0x0235232A
ldrsh ip, [r6, #4]
ldrsh sb, [r2, sl]
ldrsh r8, [r6, #6]
ldrsh r2, [r0, sl]
add r0, ip, sb
mov r0, r0, lsl #0x10
add r2, r8, r2
mov r2, r2, lsl #0x10
mov r8, r4
tst r3, #0x8000
mov sb, r0, asr #0x10
mov sl, r2, asr #0x10
bne _022FF29C
mov r0, r6
bl CanMonsterMoveInDirection
cmp r0, #0
moveq r8, #1
_022FF29C:
cmp r8, #0
beq _022FF304
mov r0, #0
strh r0, [r5, #0x4a]
mov r0, #1
strb r0, [r5, #0x151]
ldrb r0, [r5, #7]
cmp r0, #0
beq _022FF5E0
ldr r0, _022FED70 ; =0x02354138
ldr r0, [r0]
add r0, r0, #0x100
ldrsh r0, [r0, #0xd8]
cmp r0, #0
blt _022FF2E0
mov r0, #0x56
bl AdvanceFrame
_022FF2E0:
ldr r1, _022FED70 ; =0x02354138
mvn r2, #0
ldr r0, [r1]
add r0, r0, #0x100
strh r2, [r0, #0xd8]
ldr r0, [r1]
add r0, r0, #0x100
strh r2, [r0, #0xda]
b _022FF5E0
_022FF304:
ldrsh r2, [r6, #4]
mov r0, r6
mov r1, sb
strh r2, [sp]
ldrsh r4, [r6, #6]
mov r2, sl
mov r3, #0
strh r4, [sp, #2]
bl MoveMonsterToPos
ldrb r1, [r5, #0x4c]
add r2, sp, #0
mov r0, r6
bl ov29_02304D20
mov r0, r6
mov r1, #0xd
bl IqSkillIsEnabled
cmp r0, #0
ldrneb r0, [r5, #0xef]
cmpne r0, #3
beq _022FF388
mov r0, r6
mov r1, #0x6f
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, #0
bne _022FF378
mov r0, r6
mov r1, #0x10
bl HasHeldItem
_022FF378:
cmp r0, #0
bne _022FF388
add r0, r6, #4
bl ov29_02337CCC
_022FF388:
ldrb r0, [r5, #7]
mov r4, #1
cmp r0, #0
beq _022FF5E0
ldrb r0, [r5, #0xd0]
cmp r0, #2
bne _022FF5E0
ldr r1, _022FED70 ; =0x02354138
sub r2, r4, #2
ldr r0, [r1]
add r0, r0, #0x100
strh r2, [r0, #0xd8]
ldr r0, [r1]
add r0, r0, #0x100
strh r2, [r0, #0xda]
b _022FF5E0
_022FF3C8:
mov r0, r6
bl ov29_0231A8A0
b _022FF5E0
_022FF3D4:
bl ov29_022E5D68
ldr r0, _022FED70 ; =0x02354138
mov r2, #1
ldr r0, [r0]
ldr r1, _022FED7C ; =0x0237D5C0
strb r2, [r0, #6]
ldrb r2, [r5, #0x4c]
add r0, r6, #4
strb r2, [r1]
bl PositionIsOnHiddenStairs
cmp r0, #0
beq _022FF5E0
bl GetHiddenStairsField
cmp r0, #1
bne _022FF41C
mov r0, #1
bl SetHiddenFloorField
b _022FF5E0
_022FF41C:
bl GetHiddenStairsField
cmp r0, #2
bne _022FF5E0
mov r0, #2
bl SetHiddenFloorField
b _022FF5E0
_022FF434:
mov r0, r6
bl UseSingleUseItemWrapper
b _022FF5E0
_022FF440:
mov r0, r6
bl ov29_0231A9F8
b _022FF5E0
_022FF44C:
strh r1, [r5, #0x4a]
b _022FF5E0
_022FF454:
strh r1, [r5, #0x4a]
b _022FF5E0
_022FF45C:
mov r0, r6
bl ov29_022F4350
b _022FF5E0
_022FF468:
mov r0, r6
bl ov29_022F45CC
b _022FF5E0
_022FF474:
mov r0, r6
bl ov29_022F48D8
b _022FF5E0
_022FF480:
mov r0, r6
bl ov29_022F49E0
b _022FF5E0
_022FF48C:
mov r0, r6
bl ov29_022F4BDC
b _022FF5E0
_022FF498:
mov r0, r6
bl ov29_022F4370
b _022FF5E0
_022FF4A4:
mov r0, r6
bl ov29_022F44F0
b _022FF5E0
_022FF4B0:
ldr r0, _022FED70 ; =0x02354138
ldrb r1, [r5, #0x4e]
ldr r2, [r0]
add r0, r2, r1, lsl #2
add r0, r0, #0x12000
ldr r0, [r0, #0xb28]
str r0, [r2, #0xc8]
b _022FF5E0
_022FF4D0:
mov r0, r6
bl ov29_022F4BF8
b _022FF5E0
_022FF4DC:
mov r0, r6
bl ov29_022F4DAC
b _022FF5E0
_022FF4E8:
mov r0, r6
bl ov29_022F505C
b _022FF5E0
_022FF4F4:
mov r0, r5
bl MonsterCanThrowItems
cmp r0, #0
beq _022FF518
mov r0, r6
bl ov29_022F996C
mov r0, r6
bl UseThrowableItem
b _022FF5E0
_022FF518:
mov r0, r4
mov r1, r6
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r0, r6
mov r1, #0xdf0
bl LogMessageByIdWithPopupCheckUser
b _022FF5E0
_022FF538:
mov r0, r6
bl ov29_022F59C4
b _022FF5E0
_022FF544:
mov r0, r6
bl ov29_022F5F18
b _022FF5E0
_022FF550:
mov r0, r6
mov r1, #0x160
bl ov29_022F6058
b _022FF5E0
_022FF560:
mov r0, r6
rsb r1, r1, #0x164
bl ov29_022F6058
b _022FF5E0
_022FF570:
mov r0, r6
mov r2, r4
mov r3, r4
add r1, r6, #4
bl TryTriggerTrap
b _022FF5E0
_022FF588:
mov r0, r6
bl ov29_0230F158
b _022FF5E0
_022FF594:
mov r0, r6
bl ov29_0230F140
b _022FF5E0
_022FF5A0:
mov r0, r6
bl ov29_0230F14C
b _022FF5E0
_022FF5AC:
mov r0, r4
mov r1, r6
mov r2, r4
bl SubstitutePlaceholderStringTags
ldr r1, _022FED90 ; =0x00000DF1
mov r0, r6
bl LogMessageByIdWithPopupCheckUser
b _022FF5E0
_022FF5CC:
mov r0, r6
bl ov29_022F52B0
b _022FF5E0
_022FF5D8:
mov r0, #1
strh r0, [r5, #0x4a]
_022FF5E0:
mov r0, r6
bl TrySpawnTrapperTrap
mov r0, r6
bl EntityIsValid__022FED98
cmp r0, #0
moveq r4, #0
beq _022FF798
ldr r2, [r6, #0xb4]
ldrb r0, [r2, #0x154]
cmp r0, #0
bne _022FF61C
mov r1, #0
mov r0, r6
strb r1, [r2, #0x154]
bl ov29_02318D58
_022FF61C:
mov r0, #0
bl ov29_022E3A58
mov r0, r6
bl EntityIsValid__022FED98
cmp r0, #0
moveq r4, #0
beq _022FF798
bl ov29_022EF9BC
ldrb r0, [r5, #0x155]
cmp r0, #0
beq _022FF6B4
mov r2, #0
mov lr, #1
mov r3, r2
strb r2, [r5, #0x155]
add r0, r5, #0x124
mov ip, r2
mov sb, r2
mov r8, lr
_022FF668:
ldrb sl, [r0, r3, lsl #3]
add r1, r0, r3, lsl #3
tst sl, #1
movne sl, lr
moveq sl, ip
tst sl, #0xff
beq _022FF694
ldrb sl, [r1]
tst sl, #0x10
movne r2, r8
strneb sb, [r1, #6]
_022FF694:
add r3, r3, #1
cmp r3, #4
blt _022FF668
cmp r2, #0
beq _022FF6B4
ldr r1, _022FED94 ; =0x00000DF2
mov r0, r6
bl LogMessageByIdWithPopupCheckUser
_022FF6B4:
bl TryActivateFlashFireOnAllMonsters
bl ov29_022EC85C
cmp r0, #0
bne _022FF6E0
bl ov29_022FEFC8
bl ov29_022FEDBC
mov r0, r6
bl EntityIsValid__022FED98
cmp r0, #0
moveq r4, #0
beq _022FF798
_022FF6E0:
mov r0, r6
bl EntityIsValid__022FED98
cmp r0, #0
moveq r4, #0
beq _022FF798
bl ov29_022EC85C
cmp r0, #0
bne _022FF704
bl ov29_02346888
_022FF704:
mov r0, #0
bl ov29_022E3A58
mov r0, r6
bl EntityIsValid__022FED98
cmp r0, #0
moveq r4, #0
beq _022FF798
ldrb r0, [r5, #0x14e]
cmp r0, #0
cmpeq r4, #0
bne _022FF794
mov r0, r6
add r1, r6, #4
bl CannotStandOnTile
cmp r0, #0
beq _022FF784
ldr r0, [r5, #0x110]
cmp r0, #1
ble _022FF77C
mov r0, #0
bl DisplayActions
mov r0, r6
bl EntityIsValid__022FED98
cmp r0, #0
beq _022FF774
bl IsFloorOver
cmp r0, #0
beq _022FF77C
_022FF774:
mov r4, #0
b _022FF798
_022FF77C:
mov r0, r6
bl EnsureCanStandCurrentTile
_022FF784:
mov r0, r6
bl ov29_0230FC24
mov r0, r6
bl EnemyEvolution
_022FF794:
mov r4, #0
_022FF798:
mov r0, r6
bl EntityIsValid__022FED98
cmp r0, #0
bne _022FF7B4
cmp r7, #0
beq _022FF7B4
bl ov29_022EF9BC
_022FF7B4:
mov r0, r4
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
#else
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov sb, r0
mov r0, #1
bl AnimationDelayOrSomething
#ifndef JAPAN
bl ov29_022FBD08
#endif
mov r0, #1
bl ov29_0234B024
ldr r6, [sb, #0xb4]
mov r1, #0
#ifdef JAPAN
strb r1, [r6, #0x108]
#else
strb r1, [r6, #0x109]
#endif
ldr r0, _022FED70 ; =DUNGEON_PTR
strb r1, [r6, #0xfc]
ldr r1, [r0]
ldr r0, _022FED74 ; =ov10_022C4F3C
str sb, [r1, #0xc4]
ldrh r2, [r6, #0x4a]
ldrb r0, [r0, r2, lsl #1]
cmp r0, #0
beq _022FE538
ldrb r0, [r6, #7]
cmp r0, #0
beq _022FE528
ldr r1, _022FED78 ; =ov10_022C4F3D
mov r0, sb
ldrb r1, [r1, r2, lsl #1]
bl ov29_022F3890
b _022FE538
_022FE528:
ldr r1, _022FED78 ; =ov10_022C4F3D
mov r0, sb
ldrb r1, [r1, r2, lsl #1]
bl ov29_023085DC
_022FE538:
mov r0, sb
mov r1, #0
bl MonsterCannotAttack
cmp r0, #0
beq _022FE568
mov r0, sb
mov r1, #1
bl IsChargingAnyTwoTurnMove
cmp r0, #0
beq _022FE568
mov r0, sb
bl ov29_02318D58
_022FE568:
mov r4, #0
add r3, r6, #0x124 + EXECUTE_MONSTER_ACTION_OFFSET
mov r1, r4
mov r2, #1
_022FE578:
ldrb r0, [r3, r4, lsl #3]
add r5, r3, r4, lsl #3
add r4, r4, #1
tst r0, #1
movne r0, r2
moveq r0, r1
tst r0, #0xff
ldrneh r0, [r5, #2]
bicne r0, r0, #4
strneh r0, [r5, #2]
cmp r4, #4
blt _022FE578
bl ov29_022E81F8
mov r0, sb
mov r1, #0
bl ov29_022EB944
cmp r0, #0
bne _022FE638
mov r0, sb
bl DisplayActions
cmp r0, #0
beq _022FE608
bl IsFloorOver
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, sb
bl EntityIsValid__022FED98
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r0, _022FED7C ; =ov29_0237C9C0
ldrb r0, [r0, #1]
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_022FE608:
ldrb r0, [r6, #7]
cmp r0, #0
bne _022FE61C
mov r0, #0xa
bl ov29_0234BA54
_022FE61C:
ldrb r0, [r6, #0x23c + EXECUTE_MONSTER_ACTION_OFFSET]
cmp r0, #0
bne _022FE630
mov r0, sb
bl ov29_022F9840
_022FE630:
mov r0, #0xa
bl AdvanceFrame
_022FE638:
mov r0, #0
strb r0, [r6, #0x23c + EXECUTE_MONSTER_ACTION_OFFSET]
ldrh r0, [r6, #0x4a]
mov r4, #0
ldr r1, _022FED80 ; =ov29_0237CA6C
cmp r0, #1
cmpne r0, #0
cmpne r0, #4
cmpne r0, #2
movne r0, #1
strneb r0, [r6, #0x152 + EXECUTE_MONSTER_ACTION_OFFSET]
strb r4, [r6, #0x154 + EXECUTE_MONSTER_ACTION_OFFSET]
ldr r0, _022FED84 ; =ov29_0237CA68
strb r4, [r1]
strb r4, [r0]
#ifndef JAPAN
mov r1, #1
strb r1, [r6, #0x103]
#endif
ldrh r0, [r6, #0x4a]
cmp r0, #0x42
addls pc, pc, r0, lsl #2
b _022FEBAC
_022FE68C: ; jump table
b _022FEBAC ; case 0
b _022FEBAC ; case 1
b _022FE798 ; case 2
b _022FEBAC ; case 3
b _022FEBAC ; case 4
b _022FEBAC ; case 5
b _022FEBAC ; case 6
b _022FEBAC ; case 7
b _022FEAA4 ; case 8
b _022FEA30 ; case 9
b _022FEAB0 ; case 10
b _022FEAC8 ; case 11
b _022FEBAC ; case 12
b _022FEA08 ; case 13
b _022FEA08 ; case 14
b _022FEBAC ; case 15
b _022FEA20 ; case 16
b _022FEBAC ; case 17
b _022FEA08 ; case 18
b _022FEB0C ; case 19
b _022FEB18 ; case 20
b _022FE99C ; case 21
b _022FEBAC ; case 22
b _022FEB24 ; case 23
b _022FEBAC ; case 24
b _022FEBAC ; case 25
b _022FEBAC ; case 26
b _022FEBAC ; case 27
b _022FEBAC ; case 28
b _022FEBAC ; case 29
b _022FEBAC ; case 30
b _022FEBAC ; case 31
b _022FEBAC ; case 32
b _022FEBAC ; case 33
b _022FEBAC ; case 34
b _022FEB68 ; case 35
b _022FEB74 ; case 36
b _022FEB44 ; case 37
b _022FE9A8 ; case 38
b _022FEAC8 ; case 39
b _022FEBAC ; case 40
b _022FEBAC ; case 41
b _022FEBAC ; case 42
b _022FEBAC ; case 43
b _022FEA28 ; case 44
b _022FEBAC ; case 45
b _022FEBAC ; case 46
b _022FEBAC ; case 47
b _022FEBAC ; case 48
b _022FEA14 ; case 49
b _022FEB34 ; case 50
b _022FEBAC ; case 51
b _022FEBAC ; case 52
b _022FEBAC ; case 53
b _022FEA3C ; case 54
b _022FEA48 ; case 55
b _022FEA60 ; case 56
b _022FEB80 ; case 57
b _022FEABC ; case 58
b _022FEA84 ; case 59
b _022FEA6C ; case 60
b _022FEA78 ; case 61
b _022FEA54 ; case 62
b _022FEB5C ; case 63
b _022FEBAC ; case 64
b _022FEAC8 ; case 65
b _022FEBA0 ; case 66
_022FE798:
ldrb r0, [r6, #0xc4]
cmp r0, #2
cmpne r0, #7
beq _022FE7B8
add r0, r0, #0xfd
and r0, r0, #0xff
cmp r0, #2
bhi _022FE818
_022FE7B8:
mov r0, #0
strh r0, [r6, #0x4a]
mov r0, #1
strb r0, [r6, #0x151 + EXECUTE_MONSTER_ACTION_OFFSET]
ldrb r0, [r6, #7]
cmp r0, #0
beq _022FEBB4
ldr r0, _022FED70 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x100
ldrsh r0, [r0, #0xd8]
cmp r0, #0
blt _022FE7F4
mov r0, #0x56
bl AdvanceFrame
_022FE7F4:
ldr r1, _022FED70 ; =DUNGEON_PTR
mvn r2, #0
ldr r0, [r1]
add r0, r0, #0x100
strh r2, [r0, #0xd8]
ldr r0, [r1]
add r0, r0, #0x100
strh r2, [r0, #0xda]
b _022FEBB4
_022FE818:
ldrb r1, [r6, #0x4c]
ldrh r3, [r6]
ldr r2, _022FED88 ; =DIRECTIONS_XY
mov r8, r1, lsl #2
ldr r0, _022FED8C ; =DIRECTIONS_XY + 2
ldrsh ip, [sb, #4]
ldrsh r7, [r2, r8]
ldrsh r5, [sb, #6]
ldrsh r2, [r0, r8]
add r0, ip, r7
mov r0, r0, lsl #0x10
add r2, r5, r2
mov r2, r2, lsl #0x10
mov r5, r4
tst r3, #0x8000
mov r7, r0, asr #0x10
mov r8, r2, asr #0x10
bne _022FE870
mov r0, sb
bl CanMonsterMoveInDirection
cmp r0, #0
moveq r5, #1
_022FE870:
cmp r5, #0
beq _022FE8D8
mov r0, #0
strh r0, [r6, #0x4a]
mov r0, #1
strb r0, [r6, #0x151 + EXECUTE_MONSTER_ACTION_OFFSET]
ldrb r0, [r6, #7]
cmp r0, #0
beq _022FEBB4
ldr r0, _022FED70 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x100
ldrsh r0, [r0, #0xd8]
cmp r0, #0
blt _022FE8B4
mov r0, #0x56
bl AdvanceFrame
_022FE8B4:
ldr r1, _022FED70 ; =DUNGEON_PTR
mvn r2, #0
ldr r0, [r1]
add r0, r0, #0x100
strh r2, [r0, #0xd8]
ldr r0, [r1]
add r0, r0, #0x100
strh r2, [r0, #0xda]
b _022FEBB4
_022FE8D8:
ldrsh r2, [sb, #4]
mov r0, sb
mov r1, r7
strh r2, [sp]
ldrsh r4, [sb, #6]
mov r2, r8
mov r3, #0
strh r4, [sp, #2]
bl MoveMonsterToPos
ldrb r1, [r6, #0x4c]
add r2, sp, #0
mov r0, sb
bl ov29_02304D20
mov r0, sb
mov r1, #0xd
bl IqSkillIsEnabled
cmp r0, #0
ldrneb r0, [r6, #0xef]
cmpne r0, #3
beq _022FE95C
mov r0, sb
mov r1, #0x6f
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, #0
bne _022FE94C
mov r0, sb
mov r1, #0x10
bl HasHeldItem
_022FE94C:
cmp r0, #0
bne _022FE95C
add r0, sb, #4
bl ov29_02337CCC
_022FE95C:
ldrb r0, [r6, #7]
mov r4, #1
cmp r0, #0
beq _022FEBB4
ldrb r0, [r6, #0xd0]
cmp r0, #2
bne _022FEBB4
ldr r1, _022FED70 ; =DUNGEON_PTR
sub r2, r4, #2
ldr r0, [r1]
add r0, r0, #0x100
strh r2, [r0, #0xd8]
ldr r0, [r1]
add r0, r0, #0x100
strh r2, [r0, #0xda]
b _022FEBB4
_022FE99C:
mov r0, sb
bl ov29_0231A8A0
b _022FEBB4
_022FE9A8:
bl ov29_022E5D68
ldr r0, _022FED70 ; =DUNGEON_PTR
mov r2, #1
ldr r0, [r0]
ldr r1, _022FED7C ; =ov29_0237C9C0
strb r2, [r0, #6]
ldrb r2, [r6, #0x4c]
add r0, sb, #4
strb r2, [r1]
bl PositionIsOnHiddenStairs
cmp r0, #0
beq _022FEBB4
bl GetHiddenStairsField
cmp r0, #1
bne _022FE9F0
mov r0, #1
bl SetHiddenFloorField
b _022FEBB4
_022FE9F0:
bl GetHiddenStairsField
cmp r0, #2
bne _022FEBB4
mov r0, #2
bl SetHiddenFloorField
b _022FEBB4
_022FEA08:
mov r0, sb
bl UseSingleUseItemWrapper
b _022FEBB4
_022FEA14:
mov r0, sb
bl ov29_0231A9F8
b _022FEBB4
_022FEA20:
#ifdef JAPAN
mov r0, #1
strh r0, [r6, #0x4a]
#else
strh r1, [r6, #0x4a]
#endif
b _022FEBB4
_022FEA28:
#ifdef JAPAN
mov r0, #1
strh r0, [r6, #0x4a]
#else
strh r1, [r6, #0x4a]
#endif
b _022FEBB4
_022FEA30:
mov r0, sb
bl ov29_022F4350
b _022FEBB4
_022FEA3C:
mov r0, sb
bl ov29_022F45CC
b _022FEBB4
_022FEA48:
mov r0, sb
bl ov29_022F48D8
b _022FEBB4
_022FEA54:
mov r0, sb
bl ov29_022F49E0
b _022FEBB4
_022FEA60:
mov r0, sb
bl ov29_022F4BDC
b _022FEBB4
_022FEA6C:
mov r0, sb
#ifdef JAPAN
mov r1, #1
#endif
bl ov29_022F4370
b _022FEBB4
_022FEA78:
mov r0, sb
#ifdef JAPAN
mov r1, #1
#endif
bl ov29_022F44F0
b _022FEBB4
_022FEA84:
ldr r0, _022FED70 ; =DUNGEON_PTR
ldrb r1, [r6, #0x4e]
ldr r2, [r0]
add r0, r2, r1, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r0, [r0, #0xa84]
#else
ldr r0, [r0, #0xb28]
#endif
str r0, [r2, #0xc8]
b _022FEBB4
_022FEAA4:
mov r0, sb
bl ov29_022F4BF8
b _022FEBB4
_022FEAB0:
mov r0, sb
bl ov29_022F4DAC
b _022FEBB4
_022FEABC:
mov r0, sb
bl ov29_022F505C
b _022FEBB4
_022FEAC8:
mov r0, r6
bl MonsterCanThrowItems
cmp r0, #0
beq _022FEAEC
mov r0, sb
bl ov29_022F996C
mov r0, sb
bl UseThrowableItem
b _022FEBB4
_022FEAEC:
mov r0, r4
mov r1, sb
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r0, sb
#ifdef JAPAN
mov r1, #0xb30
#else
mov r1, #0xdf0
#endif
bl LogMessageByIdWithPopupCheckUser
b _022FEBB4
_022FEB0C:
mov r0, sb
bl ov29_022F59C4
b _022FEBB4
_022FEB18:
mov r0, sb
bl ov29_022F5F18
b _022FEBB4
_022FEB24:
mov r0, sb
mov r1, #0x160
bl ov29_022F6058
b _022FEBB4
_022FEB34:
#ifdef JAPAN
ldr r1, _0230017C ; =0x00000163
mov r0, sb
#else
mov r0, sb
rsb r1, r1, #0x164
#endif
bl ov29_022F6058
b _022FEBB4
_022FEB44:
mov r0, sb
mov r2, r4
mov r3, r4
add r1, sb, #4
bl TryTriggerTrap
b _022FEBB4
_022FEB5C:
mov r0, sb
bl ov29_0230F158
b _022FEBB4
_022FEB68:
mov r0, sb
bl ov29_0230F140
b _022FEBB4
_022FEB74:
mov r0, sb
bl ov29_0230F14C
b _022FEBB4
_022FEB80:
mov r0, r4
mov r1, sb
mov r2, r4
bl SubstitutePlaceholderStringTags
ldr r1, _022FED90 ; =0x00000DF1
mov r0, sb
bl LogMessageByIdWithPopupCheckUser
b _022FEBB4
_022FEBA0:
mov r0, sb
bl ov29_022F52B0
b _022FEBB4
_022FEBAC:
mov r0, #1
strh r0, [r6, #0x4a]
_022FEBB4:
mov r0, sb
bl TrySpawnTrapperTrap
mov r0, sb
bl EntityIsValid__022FED98
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r2, [sb, #0xb4]
ldrb r0, [r2, #0x154 + EXECUTE_MONSTER_ACTION_OFFSET]
cmp r0, #0
bne _022FEBF0
mov r1, #0
mov r0, sb
strb r1, [r2, #0x154 + EXECUTE_MONSTER_ACTION_OFFSET]
bl ov29_02318D58
_022FEBF0:
mov r0, #0
bl ov29_022E3A58
mov r0, sb
bl EntityIsValid__022FED98
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
bl ov29_022EF9BC
ldrb r0, [r6, #0x155 + EXECUTE_MONSTER_ACTION_OFFSET]
cmp r0, #0
beq _022FEC88
mov ip, #0
mov r5, #1
mov r8, ip
strb ip, [r6, #0x155 + EXECUTE_MONSTER_ACTION_OFFSET]
add r7, r6, #0x124 + EXECUTE_MONSTER_ACTION_OFFSET
mov r3, ip
mov r1, ip
mov r0, r5
_022FEC3C:
ldrb r2, [r7, r8, lsl #3]
add lr, r7, r8, lsl #3
tst r2, #1
movne r2, r5
moveq r2, r3
tst r2, #0xff
beq _022FEC68
ldrb r2, [lr]
tst r2, #0x10
movne ip, r0
strneb r1, [lr, #6]
_022FEC68:
add r8, r8, #1
cmp r8, #4
blt _022FEC3C
cmp ip, #0
beq _022FEC88
ldr r1, _022FED94 ; =0x00000DF2
mov r0, sb
bl LogMessageByIdWithPopupCheckUser
_022FEC88:
bl TryActivateFlashFireOnAllMonsters
bl ov29_022EC85C
cmp r0, #0
bne _022FECB4
bl ov29_022FEFC8
bl ov29_022FEDBC
mov r0, sb
bl EntityIsValid__022FED98
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_022FECB4:
mov r0, sb
bl EntityIsValid__022FED98
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
bl ov29_022EC85C
cmp r0, #0
bne _022FECD8
bl ov29_02346888
_022FECD8:
mov r0, #0
bl ov29_022E3A58
mov r0, sb
bl EntityIsValid__022FED98
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrb r0, [r6, #0x14e + EXECUTE_MONSTER_ACTION_OFFSET]
cmp r0, #0
cmpeq r4, #0
bne _022FED68
mov r0, sb
add r1, sb, #4
bl CannotStandOnTile
cmp r0, #0
beq _022FED58
ldr r0, [r6, #0x110 + EXECUTE_MONSTER_ACTION_OFFSET]
cmp r0, #1
ble _022FED50
mov r0, #0
bl DisplayActions
mov r0, sb
bl EntityIsValid__022FED98
cmp r0, #0
beq _022FED48
bl IsFloorOver
cmp r0, #0
beq _022FED50
_022FED48:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_022FED50:
mov r0, sb
bl EnsureCanStandCurrentTile
_022FED58:
mov r0, sb
bl ov29_0230FC24
mov r0, sb
bl EnemyEvolution
_022FED68:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
#endif
.align 2, 0
_022FED70: .word DUNGEON_PTR
_022FED74: .word ov10_022C4F3C
_022FED78: .word ov10_022C4F3D
_022FED7C: .word ov29_0237C9C0
_022FED80: .word ov29_0237CA6C
_022FED84: .word ov29_0237CA68
_022FED88: .word DIRECTIONS_XY
_022FED8C: .word DIRECTIONS_XY + 2
#ifdef JAPAN
_0230017C: .word 0x00000163
_022FED90: .word 0x00000B31
_022FED94: .word 0x00000B32
#else
_022FED90: .word 0x00000DF1
_022FED94: .word 0x00000DF2
#endif
arm_func_end ExecuteMonsterAction