mirror of
https://github.com/pret/pmd-sky.git
synced 2026-08-27 21:25:43 -05:00
Decomped HasStatusThatPreventsActing
This commit is contained in:
@@ -1,30 +1,14 @@
|
||||
#pragma once
|
||||
.public ActivateFlashFire
|
||||
.public CanMonsterMoveInDirection
|
||||
.public CanMonsterUseMove
|
||||
.public ChooseAiMove
|
||||
.public DUNGEON_PTR
|
||||
.public DungeonRandInt
|
||||
.public EntityIsValid__022FED98
|
||||
.public GetMobilityType
|
||||
.public GetMobilityTypeAfterIqSkills
|
||||
.public GetTile
|
||||
.public IqSkillIsEnabled
|
||||
.public IsBlinded
|
||||
.public IsChargingTwoTurnMove
|
||||
.public IsCurrentTilesetBackground
|
||||
.public IsFloating
|
||||
.public IsMonsterSleeping
|
||||
.public ItemIsActive__022FF898
|
||||
.public LogMessageByIdWithPopupCheckUser
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public TickStatusTurnCounter
|
||||
.public ov29_022E56A0
|
||||
.public ov29_022FAA04
|
||||
.public ov29_02300DCC
|
||||
.public ov29_02318D58
|
||||
.public ov29_02322374
|
||||
.public ov29_0237C9B8
|
||||
.public SetActionPassTurnOrWalk
|
||||
.public SetActionUseMovePlayer
|
||||
.public SetMonsterActionFields
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public TickStatusTurnCounter
|
||||
|
||||
15
asm/include/overlay_29_022FF3F4.inc
Normal file
15
asm/include/overlay_29_022FF3F4.inc
Normal file
@@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
.public GetMobilityType
|
||||
.public GetMobilityTypeAfterIqSkills
|
||||
.public GetTile
|
||||
.public IqSkillIsEnabled
|
||||
.public IsChargingTwoTurnMove
|
||||
.public IsCurrentTilesetBackground
|
||||
.public IsFloating
|
||||
.public ItemIsActive__022FF898
|
||||
.public LogMessageByIdWithPopupCheckUser
|
||||
.public SetActionUseMovePlayer
|
||||
.public SetMonsterActionFields
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public ov29_02318D58
|
||||
.public ov29_0237C9B8
|
||||
@@ -336,576 +336,3 @@ _022FF1B4:
|
||||
.align 2, 0
|
||||
_022FF1C4: .word DUNGEON_PTR
|
||||
arm_func_end TryActivateFlashFireOnAllMonsters
|
||||
|
||||
arm_func_start HasStatusThatPreventsActing
|
||||
HasStatusThatPreventsActing: ; 0x022FF1C8
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r0, #0
|
||||
ldr r4, [r5, #0xb4]
|
||||
mov r1, r5
|
||||
mov r2, r0
|
||||
bl SubstitutePlaceholderStringTags
|
||||
add r0, r4, #0x4a
|
||||
mov r1, #1
|
||||
bl SetMonsterActionFields
|
||||
ldrb r0, [r4, #0xbd]
|
||||
cmp r0, #1
|
||||
cmpne r0, #3
|
||||
cmpne r0, #5
|
||||
bne _022FF20C
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022FF20C:
|
||||
ldrb r0, [r4, #0xc4]
|
||||
cmp r0, #6
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _022FF27C
|
||||
_022FF21C: ; jump table
|
||||
b _022FF27C ; case 0
|
||||
b _022FF238 ; case 1
|
||||
b _022FF27C ; case 2
|
||||
b _022FF24C ; case 3
|
||||
b _022FF260 ; case 4
|
||||
b _022FF27C ; case 5
|
||||
b _022FF274 ; case 6
|
||||
_022FF238:
|
||||
ldr r1, _022FF3DC ; =0x00000C28
|
||||
mov r0, r5
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022FF24C:
|
||||
ldr r1, _022FF3E0 ; =0x00000C29
|
||||
mov r0, r5
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022FF260:
|
||||
ldr r1, _022FF3E4 ; =0x00000C2A
|
||||
mov r0, r5
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022FF274:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022FF27C:
|
||||
ldrb r0, [r4, #0xd0]
|
||||
cmp r0, #3
|
||||
beq _022FF294
|
||||
cmp r0, #7
|
||||
beq _022FF2A8
|
||||
b _022FF2BC
|
||||
_022FF294:
|
||||
ldr r1, _022FF3E8 ; =0x00000C2B
|
||||
mov r0, r5
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022FF2A8:
|
||||
ldr r1, _022FF3EC ; =0x00000C2C
|
||||
mov r0, r5
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022FF2BC:
|
||||
ldrb r0, [r4, #0xd2]
|
||||
cmp r0, #1
|
||||
bne _022FF2DC
|
||||
ldr r1, _022FF3F0 ; =0x00000C2D
|
||||
mov r0, r5
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022FF2DC:
|
||||
ldrb r0, [r4, #0xd8]
|
||||
cmp r0, #2
|
||||
bne _022FF320
|
||||
ldrsh r1, [r4, #2]
|
||||
add r0, r4, #0x4a
|
||||
bl SetActionPassTurnOrWalk
|
||||
mov r0, #8
|
||||
bl DungeonRandInt
|
||||
strb r0, [r4, #0x4c]
|
||||
ldrsh r2, [r5, #4]
|
||||
add r1, r4, #0x100
|
||||
mov r0, #1
|
||||
#ifdef JAPAN
|
||||
strh r2, [r1, #0x7a]
|
||||
ldrsh r2, [r5, #6]
|
||||
sub r2, r2, #1
|
||||
strh r2, [r1, #0x7c]
|
||||
#else
|
||||
strh r2, [r1, #0x7e]
|
||||
ldrsh r2, [r5, #6]
|
||||
sub r2, r2, #1
|
||||
strh r2, [r1, #0x80]
|
||||
#endif
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022FF320:
|
||||
ldrb r0, [r4, #9]
|
||||
cmp r0, #1
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r5
|
||||
mov r1, #1
|
||||
bl IsBlinded
|
||||
cmp r0, #0
|
||||
beq _022FF3AC
|
||||
ldrb r1, [r4, #0x4c]
|
||||
mov r0, r5
|
||||
bl CanMonsterMoveInDirection
|
||||
cmp r0, #0
|
||||
beq _022FF368
|
||||
ldrsh r1, [r4, #2]
|
||||
add r0, r4, #0x4a
|
||||
bl SetActionPassTurnOrWalk
|
||||
b _022FF3A4
|
||||
_022FF368:
|
||||
mov r0, #2
|
||||
bl DungeonRandInt
|
||||
cmp r0, #0
|
||||
beq _022FF39C
|
||||
mov r0, #8
|
||||
bl DungeonRandInt
|
||||
and r1, r0, #0xff
|
||||
and r0, r1, #7
|
||||
strb r0, [r4, #0x4c]
|
||||
ldrsh r1, [r4, #2]
|
||||
add r0, r4, #0x4a
|
||||
bl SetActionPassTurnOrWalk
|
||||
b _022FF3A4
|
||||
_022FF39C:
|
||||
mov r0, r5
|
||||
bl ChooseAiMove
|
||||
_022FF3A4:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022FF3AC:
|
||||
ldrb r0, [r4, #0xf1]
|
||||
cmp r0, #2
|
||||
movne r0, #0
|
||||
ldmneia sp!, {r3, r4, r5, pc}
|
||||
ldrsh r1, [r4, #2]
|
||||
add r0, r4, #0x4a
|
||||
bl SetActionPassTurnOrWalk
|
||||
mov r0, #8
|
||||
bl DungeonRandInt
|
||||
strb r0, [r4, #0x4c]
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
#define HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET -0x2C1
|
||||
#else
|
||||
#define HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET 0
|
||||
#endif
|
||||
_022FF3DC: .word 0x00000C28 + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET
|
||||
_022FF3E0: .word 0x00000C29 + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET
|
||||
_022FF3E4: .word 0x00000C2A + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET
|
||||
_022FF3E8: .word 0x00000C2B + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET
|
||||
_022FF3EC: .word 0x00000C2C + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET
|
||||
_022FF3F0: .word 0x00000C2D + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET
|
||||
arm_func_end HasStatusThatPreventsActing
|
||||
|
||||
arm_func_start ov29_022FF3F4
|
||||
ov29_022FF3F4: ; 0x022FF3F4
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
mov r7, r0
|
||||
mov r4, #0
|
||||
ldr r6, [r7, #0xb4]
|
||||
mov r0, r4
|
||||
mov r1, r7
|
||||
mov r2, r4
|
||||
bl SubstitutePlaceholderStringTags
|
||||
add r0, r6, #0x4a
|
||||
mov r1, #1
|
||||
bl SetMonsterActionFields
|
||||
ldrb r0, [r6, #0xbd]
|
||||
cmp r0, #1
|
||||
cmpne r0, #3
|
||||
cmpne r0, #5
|
||||
bne _022FF448
|
||||
ldr r1, _022FF60C ; =0x00000C2E
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF448:
|
||||
ldrb r0, [r6, #0xc4]
|
||||
cmp r0, #6
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _022FF4B8
|
||||
_022FF458: ; jump table
|
||||
b _022FF4B8 ; case 0
|
||||
b _022FF474 ; case 1
|
||||
b _022FF4B8 ; case 2
|
||||
b _022FF488 ; case 3
|
||||
b _022FF49C ; case 4
|
||||
b _022FF4B8 ; case 5
|
||||
b _022FF4B0 ; case 6
|
||||
_022FF474:
|
||||
ldr r1, _022FF610 ; =0x00000C28
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF488:
|
||||
ldr r1, _022FF614 ; =0x00000C29
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF49C:
|
||||
ldr r1, _022FF618 ; =0x00000C2A
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF4B0:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF4B8:
|
||||
ldrb r0, [r6, #0xd0]
|
||||
cmp r0, #8
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _022FF51C
|
||||
_022FF4C8: ; jump table
|
||||
b _022FF51C ; case 0
|
||||
b _022FF51C ; case 1
|
||||
b _022FF4EC ; case 2
|
||||
b _022FF4F4 ; case 3
|
||||
b _022FF51C ; case 4
|
||||
b _022FF51C ; case 5
|
||||
b _022FF51C ; case 6
|
||||
b _022FF508 ; case 7
|
||||
b _022FF51C ; case 8
|
||||
_022FF4EC:
|
||||
mov r4, #1
|
||||
b _022FF51C
|
||||
_022FF4F4:
|
||||
ldr r1, _022FF61C ; =0x00000C2B
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF508:
|
||||
ldr r1, _022FF620 ; =0x00000C2C
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF51C:
|
||||
ldrb r0, [r6, #0xd2]
|
||||
cmp r0, #1
|
||||
bne _022FF53C
|
||||
ldr r1, _022FF624 ; =0x00000C2D
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF53C:
|
||||
cmp r0, #0
|
||||
cmpne r0, #0xb
|
||||
cmpne r0, #0xc
|
||||
beq _022FF604
|
||||
cmp r4, #0
|
||||
beq _022FF564
|
||||
ldr r1, _022FF628 ; =0x00000C2F
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
b _022FF5FC
|
||||
_022FF564:
|
||||
mov r5, #0
|
||||
#ifdef JAPAN
|
||||
add r4, r6, #0x120
|
||||
#else
|
||||
add r4, r6, #0x124
|
||||
#endif
|
||||
mov r8, r5
|
||||
mov sb, #1
|
||||
b _022FF5F4
|
||||
_022FF578:
|
||||
ldrb r0, [r4, r5, lsl #3]
|
||||
mov r1, r5, lsl #3
|
||||
tst r0, #1
|
||||
movne r0, sb
|
||||
moveq r0, r8
|
||||
tst r0, #0xff
|
||||
beq _022FF5F0
|
||||
mov r0, r7
|
||||
add r1, r4, r1
|
||||
bl IsChargingTwoTurnMove
|
||||
cmp r0, #0
|
||||
beq _022FF5F0
|
||||
ldrb r0, [r6, #0xd4]
|
||||
cmp r0, r5
|
||||
bne _022FF5F0
|
||||
b _022FF5CC
|
||||
_022FF5B8:
|
||||
add r0, r6, r5, lsl #3
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r0, #0x120]
|
||||
#else
|
||||
ldrb r0, [r0, #0x124]
|
||||
#endif
|
||||
tst r0, #2
|
||||
beq _022FF5D4
|
||||
sub r5, r5, #1
|
||||
_022FF5CC:
|
||||
cmp r5, #0
|
||||
bgt _022FF5B8
|
||||
_022FF5D4:
|
||||
ldrb r1, [r6, #0x4e]
|
||||
mov r2, r5, lsl #0x10
|
||||
add r0, r6, #0x4a
|
||||
mov r2, r2, asr #0x10
|
||||
bl SetActionUseMovePlayer
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF5F0:
|
||||
add r5, r5, #1
|
||||
_022FF5F4:
|
||||
cmp r5, #4
|
||||
blt _022FF578
|
||||
_022FF5FC:
|
||||
mov r0, r7
|
||||
bl ov29_02318D58
|
||||
_022FF604:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
#define OV29_022FF3F4_OFFSET -0x2C1
|
||||
#else
|
||||
#define OV29_022FF3F4_OFFSET 0
|
||||
#endif
|
||||
_022FF60C: .word 0x00000C2E + OV29_022FF3F4_OFFSET
|
||||
_022FF610: .word 0x00000C28 + OV29_022FF3F4_OFFSET
|
||||
_022FF614: .word 0x00000C29 + OV29_022FF3F4_OFFSET
|
||||
_022FF618: .word 0x00000C2A + OV29_022FF3F4_OFFSET
|
||||
_022FF61C: .word 0x00000C2B + OV29_022FF3F4_OFFSET
|
||||
_022FF620: .word 0x00000C2C + OV29_022FF3F4_OFFSET
|
||||
_022FF624: .word 0x00000C2D + OV29_022FF3F4_OFFSET
|
||||
_022FF628: .word 0x00000C2F + OV29_022FF3F4_OFFSET
|
||||
arm_func_end ov29_022FF3F4
|
||||
|
||||
arm_func_start GetMobilityTypeCheckSlip
|
||||
GetMobilityTypeCheckSlip: ; 0x022FF62C
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r1
|
||||
bl GetMobilityType
|
||||
cmp r4, #0
|
||||
beq _022FF660
|
||||
cmp r0, #0
|
||||
cmpne r0, #4
|
||||
moveq r1, #1
|
||||
movne r1, #0
|
||||
tst r1, #0xff
|
||||
ldrne r0, _022FF670 ; =ov29_0237C9B8
|
||||
ldrneb r0, [r0, #5]
|
||||
ldmneia sp!, {r4, pc}
|
||||
_022FF660:
|
||||
cmp r0, #4
|
||||
ldrhs r1, _022FF670 ; =ov29_0237C9B8
|
||||
ldrhsb r0, [r1, r0]
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_022FF670: .word ov29_0237C9B8
|
||||
arm_func_end GetMobilityTypeCheckSlip
|
||||
|
||||
arm_func_start GetMobilityTypeCheckSlipAndFloating
|
||||
GetMobilityTypeCheckSlipAndFloating: ; 0x022FF674
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
ldr r0, [r5, #0xb4]
|
||||
ldrb r0, [r0, #0xef]
|
||||
cmp r0, #4
|
||||
moveq r2, #1
|
||||
movne r2, #0
|
||||
mov r0, r1
|
||||
and r1, r2, #0xff
|
||||
bl GetMobilityTypeCheckSlip
|
||||
mov r4, r0
|
||||
cmp r4, #3
|
||||
beq _022FF6BC
|
||||
mov r0, r5
|
||||
bl IsFloating
|
||||
cmp r0, #0
|
||||
movne r0, #2
|
||||
ldmneia sp!, {r3, r4, r5, pc}
|
||||
_022FF6BC:
|
||||
mov r0, r4
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end GetMobilityTypeCheckSlipAndFloating
|
||||
|
||||
arm_func_start IsInvalidSpawnTile
|
||||
IsInvalidSpawnTile: ; 0x022FF6C4
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r1
|
||||
ldr r1, [r4, #0xc]
|
||||
cmp r1, #0
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r4, pc}
|
||||
ldrh r1, [r4]
|
||||
tst r1, #0x10
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r4, pc}
|
||||
mov r1, #0
|
||||
bl GetMobilityTypeCheckSlip
|
||||
ldrh r1, [r4]
|
||||
cmp r0, #3
|
||||
and r1, r1, #3
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _022FF754
|
||||
_022FF708: ; jump table
|
||||
b _022FF718 ; case 0
|
||||
b _022FF728 ; case 1
|
||||
b _022FF744 ; case 2
|
||||
b _022FF754 ; case 3
|
||||
_022FF718:
|
||||
cmp r1, #1
|
||||
bne _022FF75C
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
_022FF728:
|
||||
cmp r1, #2
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r1, #1
|
||||
bne _022FF75C
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
_022FF744:
|
||||
cmp r1, #0
|
||||
beq _022FF75C
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
_022FF754:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
_022FF75C:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end IsInvalidSpawnTile
|
||||
|
||||
arm_func_start ov29_022FF764
|
||||
ov29_022FF764: ; 0x022FF764
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r7, r1
|
||||
mov r6, r0
|
||||
ldrsh r0, [r7]
|
||||
ldrsh r1, [r7, #2]
|
||||
ldr r5, [r6, #0xb4]
|
||||
bl GetTile
|
||||
ldrsh r1, [r7]
|
||||
mov r4, r0
|
||||
cmp r1, #0
|
||||
movlt r0, #1
|
||||
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
ldrsh r0, [r7, #2]
|
||||
cmp r0, #0
|
||||
movlt r0, #1
|
||||
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
cmp r1, #0x38
|
||||
movge r0, #1
|
||||
ldmgeia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
cmp r0, #0x20
|
||||
movge r0, #1
|
||||
ldmgeia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
ldr r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
ldrh r0, [r4]
|
||||
tst r0, #0x10
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
bl IsCurrentTilesetBackground
|
||||
cmp r0, #0
|
||||
bne _022FF810
|
||||
ldrb r0, [r5, #0xef]
|
||||
cmp r0, #3
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
mov r0, r6
|
||||
mov r1, #0x10
|
||||
bl ItemIsActive__022FF898
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022FF810:
|
||||
ldrsh r1, [r5, #2]
|
||||
mov r0, r6
|
||||
bl GetMobilityTypeCheckSlipAndFloating
|
||||
ldrh r2, [r4]
|
||||
#ifdef JAPAN
|
||||
mov r4, r0
|
||||
mov r0, r6
|
||||
mov r1, #0xc
|
||||
and r5, r2, #3
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
mov r0, r6
|
||||
mov r1, #0xd
|
||||
movne r4, #2
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
movne r4, #3
|
||||
cmp r4, #3
|
||||
addls pc, pc, r4, lsl #2
|
||||
#else
|
||||
mov r1, r0
|
||||
mov r0, r6
|
||||
and r4, r2, #3
|
||||
bl GetMobilityTypeAfterIqSkills
|
||||
cmp r0, #3
|
||||
addls pc, pc, r0, lsl #2
|
||||
#endif
|
||||
b _022FF888
|
||||
_022FF83C: ; jump table
|
||||
b _022FF84C ; case 0
|
||||
b _022FF85C ; case 1
|
||||
b _022FF878 ; case 2
|
||||
b _022FF888 ; case 3
|
||||
_022FF84C:
|
||||
#ifdef JAPAN
|
||||
cmp r5, #1
|
||||
#else
|
||||
cmp r4, #1
|
||||
#endif
|
||||
bne _022FF890
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022FF85C:
|
||||
#ifdef JAPAN
|
||||
cmp r5, #2
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
cmp r5, #1
|
||||
#else
|
||||
cmp r4, #2
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
cmp r4, #1
|
||||
#endif
|
||||
bne _022FF890
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022FF878:
|
||||
#ifdef JAPAN
|
||||
cmp r5, #0
|
||||
#else
|
||||
cmp r4, #0
|
||||
#endif
|
||||
beq _022FF890
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022FF888:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022FF890:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
arm_func_end ov29_022FF764
|
||||
|
||||
405
asm/overlay_29_022FF3F4.s
Normal file
405
asm/overlay_29_022FF3F4.s
Normal file
@@ -0,0 +1,405 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_022FF3F4.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start ov29_022FF3F4
|
||||
ov29_022FF3F4: ; 0x022FF3F4
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
mov r7, r0
|
||||
mov r4, #0
|
||||
ldr r6, [r7, #0xb4]
|
||||
mov r0, r4
|
||||
mov r1, r7
|
||||
mov r2, r4
|
||||
bl SubstitutePlaceholderStringTags
|
||||
add r0, r6, #0x4a
|
||||
mov r1, #1
|
||||
bl SetMonsterActionFields
|
||||
ldrb r0, [r6, #0xbd]
|
||||
cmp r0, #1
|
||||
cmpne r0, #3
|
||||
cmpne r0, #5
|
||||
bne _022FF448
|
||||
ldr r1, _022FF60C ; =0x00000C2E
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF448:
|
||||
ldrb r0, [r6, #0xc4]
|
||||
cmp r0, #6
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _022FF4B8
|
||||
_022FF458: ; jump table
|
||||
b _022FF4B8 ; case 0
|
||||
b _022FF474 ; case 1
|
||||
b _022FF4B8 ; case 2
|
||||
b _022FF488 ; case 3
|
||||
b _022FF49C ; case 4
|
||||
b _022FF4B8 ; case 5
|
||||
b _022FF4B0 ; case 6
|
||||
_022FF474:
|
||||
ldr r1, _022FF610 ; =0x00000C28
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF488:
|
||||
ldr r1, _022FF614 ; =0x00000C29
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF49C:
|
||||
ldr r1, _022FF618 ; =0x00000C2A
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF4B0:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF4B8:
|
||||
ldrb r0, [r6, #0xd0]
|
||||
cmp r0, #8
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _022FF51C
|
||||
_022FF4C8: ; jump table
|
||||
b _022FF51C ; case 0
|
||||
b _022FF51C ; case 1
|
||||
b _022FF4EC ; case 2
|
||||
b _022FF4F4 ; case 3
|
||||
b _022FF51C ; case 4
|
||||
b _022FF51C ; case 5
|
||||
b _022FF51C ; case 6
|
||||
b _022FF508 ; case 7
|
||||
b _022FF51C ; case 8
|
||||
_022FF4EC:
|
||||
mov r4, #1
|
||||
b _022FF51C
|
||||
_022FF4F4:
|
||||
ldr r1, _022FF61C ; =0x00000C2B
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF508:
|
||||
ldr r1, _022FF620 ; =0x00000C2C
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF51C:
|
||||
ldrb r0, [r6, #0xd2]
|
||||
cmp r0, #1
|
||||
bne _022FF53C
|
||||
ldr r1, _022FF624 ; =0x00000C2D
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF53C:
|
||||
cmp r0, #0
|
||||
cmpne r0, #0xb
|
||||
cmpne r0, #0xc
|
||||
beq _022FF604
|
||||
cmp r4, #0
|
||||
beq _022FF564
|
||||
ldr r1, _022FF628 ; =0x00000C2F
|
||||
mov r0, r7
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
b _022FF5FC
|
||||
_022FF564:
|
||||
mov r5, #0
|
||||
#ifdef JAPAN
|
||||
add r4, r6, #0x120
|
||||
#else
|
||||
add r4, r6, #0x124
|
||||
#endif
|
||||
mov r8, r5
|
||||
mov sb, #1
|
||||
b _022FF5F4
|
||||
_022FF578:
|
||||
ldrb r0, [r4, r5, lsl #3]
|
||||
mov r1, r5, lsl #3
|
||||
tst r0, #1
|
||||
movne r0, sb
|
||||
moveq r0, r8
|
||||
tst r0, #0xff
|
||||
beq _022FF5F0
|
||||
mov r0, r7
|
||||
add r1, r4, r1
|
||||
bl IsChargingTwoTurnMove
|
||||
cmp r0, #0
|
||||
beq _022FF5F0
|
||||
ldrb r0, [r6, #0xd4]
|
||||
cmp r0, r5
|
||||
bne _022FF5F0
|
||||
b _022FF5CC
|
||||
_022FF5B8:
|
||||
add r0, r6, r5, lsl #3
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r0, #0x120]
|
||||
#else
|
||||
ldrb r0, [r0, #0x124]
|
||||
#endif
|
||||
tst r0, #2
|
||||
beq _022FF5D4
|
||||
sub r5, r5, #1
|
||||
_022FF5CC:
|
||||
cmp r5, #0
|
||||
bgt _022FF5B8
|
||||
_022FF5D4:
|
||||
ldrb r1, [r6, #0x4e]
|
||||
mov r2, r5, lsl #0x10
|
||||
add r0, r6, #0x4a
|
||||
mov r2, r2, asr #0x10
|
||||
bl SetActionUseMovePlayer
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_022FF5F0:
|
||||
add r5, r5, #1
|
||||
_022FF5F4:
|
||||
cmp r5, #4
|
||||
blt _022FF578
|
||||
_022FF5FC:
|
||||
mov r0, r7
|
||||
bl ov29_02318D58
|
||||
_022FF604:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
#define OV29_022FF3F4_OFFSET -0x2C1
|
||||
#else
|
||||
#define OV29_022FF3F4_OFFSET 0
|
||||
#endif
|
||||
_022FF60C: .word 0x00000C2E + OV29_022FF3F4_OFFSET
|
||||
_022FF610: .word 0x00000C28 + OV29_022FF3F4_OFFSET
|
||||
_022FF614: .word 0x00000C29 + OV29_022FF3F4_OFFSET
|
||||
_022FF618: .word 0x00000C2A + OV29_022FF3F4_OFFSET
|
||||
_022FF61C: .word 0x00000C2B + OV29_022FF3F4_OFFSET
|
||||
_022FF620: .word 0x00000C2C + OV29_022FF3F4_OFFSET
|
||||
_022FF624: .word 0x00000C2D + OV29_022FF3F4_OFFSET
|
||||
_022FF628: .word 0x00000C2F + OV29_022FF3F4_OFFSET
|
||||
arm_func_end ov29_022FF3F4
|
||||
|
||||
arm_func_start GetMobilityTypeCheckSlip
|
||||
GetMobilityTypeCheckSlip: ; 0x022FF62C
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r1
|
||||
bl GetMobilityType
|
||||
cmp r4, #0
|
||||
beq _022FF660
|
||||
cmp r0, #0
|
||||
cmpne r0, #4
|
||||
moveq r1, #1
|
||||
movne r1, #0
|
||||
tst r1, #0xff
|
||||
ldrne r0, _022FF670 ; =ov29_0237C9B8
|
||||
ldrneb r0, [r0, #5]
|
||||
ldmneia sp!, {r4, pc}
|
||||
_022FF660:
|
||||
cmp r0, #4
|
||||
ldrhs r1, _022FF670 ; =ov29_0237C9B8
|
||||
ldrhsb r0, [r1, r0]
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_022FF670: .word ov29_0237C9B8
|
||||
arm_func_end GetMobilityTypeCheckSlip
|
||||
|
||||
arm_func_start GetMobilityTypeCheckSlipAndFloating
|
||||
GetMobilityTypeCheckSlipAndFloating: ; 0x022FF674
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
ldr r0, [r5, #0xb4]
|
||||
ldrb r0, [r0, #0xef]
|
||||
cmp r0, #4
|
||||
moveq r2, #1
|
||||
movne r2, #0
|
||||
mov r0, r1
|
||||
and r1, r2, #0xff
|
||||
bl GetMobilityTypeCheckSlip
|
||||
mov r4, r0
|
||||
cmp r4, #3
|
||||
beq _022FF6BC
|
||||
mov r0, r5
|
||||
bl IsFloating
|
||||
cmp r0, #0
|
||||
movne r0, #2
|
||||
ldmneia sp!, {r3, r4, r5, pc}
|
||||
_022FF6BC:
|
||||
mov r0, r4
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end GetMobilityTypeCheckSlipAndFloating
|
||||
|
||||
arm_func_start IsInvalidSpawnTile
|
||||
IsInvalidSpawnTile: ; 0x022FF6C4
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r1
|
||||
ldr r1, [r4, #0xc]
|
||||
cmp r1, #0
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r4, pc}
|
||||
ldrh r1, [r4]
|
||||
tst r1, #0x10
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r4, pc}
|
||||
mov r1, #0
|
||||
bl GetMobilityTypeCheckSlip
|
||||
ldrh r1, [r4]
|
||||
cmp r0, #3
|
||||
and r1, r1, #3
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _022FF754
|
||||
_022FF708: ; jump table
|
||||
b _022FF718 ; case 0
|
||||
b _022FF728 ; case 1
|
||||
b _022FF744 ; case 2
|
||||
b _022FF754 ; case 3
|
||||
_022FF718:
|
||||
cmp r1, #1
|
||||
bne _022FF75C
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
_022FF728:
|
||||
cmp r1, #2
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r1, #1
|
||||
bne _022FF75C
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
_022FF744:
|
||||
cmp r1, #0
|
||||
beq _022FF75C
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
_022FF754:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
_022FF75C:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end IsInvalidSpawnTile
|
||||
|
||||
arm_func_start ov29_022FF764
|
||||
ov29_022FF764: ; 0x022FF764
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r7, r1
|
||||
mov r6, r0
|
||||
ldrsh r0, [r7]
|
||||
ldrsh r1, [r7, #2]
|
||||
ldr r5, [r6, #0xb4]
|
||||
bl GetTile
|
||||
ldrsh r1, [r7]
|
||||
mov r4, r0
|
||||
cmp r1, #0
|
||||
movlt r0, #1
|
||||
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
ldrsh r0, [r7, #2]
|
||||
cmp r0, #0
|
||||
movlt r0, #1
|
||||
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
cmp r1, #0x38
|
||||
movge r0, #1
|
||||
ldmgeia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
cmp r0, #0x20
|
||||
movge r0, #1
|
||||
ldmgeia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
ldr r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
ldrh r0, [r4]
|
||||
tst r0, #0x10
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
bl IsCurrentTilesetBackground
|
||||
cmp r0, #0
|
||||
bne _022FF810
|
||||
ldrb r0, [r5, #0xef]
|
||||
cmp r0, #3
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
mov r0, r6
|
||||
mov r1, #0x10
|
||||
bl ItemIsActive__022FF898
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022FF810:
|
||||
ldrsh r1, [r5, #2]
|
||||
mov r0, r6
|
||||
bl GetMobilityTypeCheckSlipAndFloating
|
||||
ldrh r2, [r4]
|
||||
#ifdef JAPAN
|
||||
mov r4, r0
|
||||
mov r0, r6
|
||||
mov r1, #0xc
|
||||
and r5, r2, #3
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
mov r0, r6
|
||||
mov r1, #0xd
|
||||
movne r4, #2
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
movne r4, #3
|
||||
cmp r4, #3
|
||||
addls pc, pc, r4, lsl #2
|
||||
#else
|
||||
mov r1, r0
|
||||
mov r0, r6
|
||||
and r4, r2, #3
|
||||
bl GetMobilityTypeAfterIqSkills
|
||||
cmp r0, #3
|
||||
addls pc, pc, r0, lsl #2
|
||||
#endif
|
||||
b _022FF888
|
||||
_022FF83C: ; jump table
|
||||
b _022FF84C ; case 0
|
||||
b _022FF85C ; case 1
|
||||
b _022FF878 ; case 2
|
||||
b _022FF888 ; case 3
|
||||
_022FF84C:
|
||||
#ifdef JAPAN
|
||||
cmp r5, #1
|
||||
#else
|
||||
cmp r4, #1
|
||||
#endif
|
||||
bne _022FF890
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022FF85C:
|
||||
#ifdef JAPAN
|
||||
cmp r5, #2
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
cmp r5, #1
|
||||
#else
|
||||
cmp r4, #2
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
cmp r4, #1
|
||||
#endif
|
||||
bne _022FF890
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022FF878:
|
||||
#ifdef JAPAN
|
||||
cmp r5, #0
|
||||
#else
|
||||
cmp r4, #0
|
||||
#endif
|
||||
beq _022FF890
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022FF888:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022FF890:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
arm_func_end ov29_022FF764
|
||||
@@ -104,7 +104,7 @@ struct action_parameter {
|
||||
// Contains data used to describe an action taken by a monster.
|
||||
struct action_data {
|
||||
enum action action_id; // 0x0: Action ID
|
||||
enum direction_id direction; // 0x2: Direction in which the action will be performed
|
||||
u8 direction; // 0x2: Direction in which the action will be performed
|
||||
u8 field_0x3;
|
||||
struct action_parameter action_parameters[2]; // 0x4: Parameters for the action
|
||||
// 0x10: Position of the target that the Pokémon wants throw an item at.
|
||||
|
||||
9
include/status_checks.h
Normal file
9
include/status_checks.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#ifndef PMDSKY_STATUS_CHECKS_H
|
||||
#define PMDSKY_STATUS_CHECKS_H
|
||||
|
||||
#include "dungeon_mode.h"
|
||||
|
||||
// Returns true if the monster has any status problem that prevents it from acting
|
||||
bool8 HasStatusThatPreventsActing(struct entity *monster);
|
||||
|
||||
#endif //PMDSKY_STATUS_CHECKS_H
|
||||
2
main.lsf
2
main.lsf
@@ -305,6 +305,8 @@ Overlay OVY_29
|
||||
Object asm/overlay_29_022FE4BC.o
|
||||
Object src/overlay_29_022FED98.o
|
||||
Object asm/overlay_29_022FEDBC.o
|
||||
Object src/status_checks.o
|
||||
Object asm/overlay_29_022FF3F4.o
|
||||
Object src/overlay_29_022FF898.o
|
||||
Object asm/overlay_29_022FF8C8.o
|
||||
Object src/overlay_29_023000E4.o
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "dungeon_util_static.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "dungeon_visibility.h"
|
||||
#include "status_checks.h"
|
||||
#include "targeting.h"
|
||||
|
||||
#ifdef JAPAN
|
||||
@@ -23,7 +24,6 @@ extern struct dungeon *DUNGEON_PTR[];
|
||||
extern void EndFrozenClassStatus(struct entity *user, struct entity *target, bool8 log);
|
||||
extern void SubstitutePlaceholderStringTags(u8 *string_id, struct entity *entity, u32 param_3);
|
||||
extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id);
|
||||
extern bool8 HasStatusThatPreventsActing(struct entity *monster);
|
||||
extern void ClearMonsterActionFields(struct action_data *monster_action);
|
||||
extern void SetActionPassTurnOrWalk(struct action_data *monster_action, s16 monster_id);
|
||||
extern void ChooseAiMove(struct entity *monster);
|
||||
|
||||
111
src/status_checks.c
Normal file
111
src/status_checks.c
Normal file
@@ -0,0 +1,111 @@
|
||||
#include "status_checks.h"
|
||||
#include "dg_random.h"
|
||||
#include "dungeon_action.h"
|
||||
#include "dungeon_statuses.h"
|
||||
#include "dungeon_util_static.h"
|
||||
|
||||
#ifdef JAPAN
|
||||
#define HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET -0x2C1
|
||||
#else
|
||||
#define HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET 0
|
||||
#endif
|
||||
|
||||
#define FROZEN_MESSAGE (0xC28 + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET)
|
||||
#define WRAPPED_AROUND_MESSAGE (0xC29 + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET)
|
||||
#define WRAPPED_BY_MESSAGE (0xC2A + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET)
|
||||
#define PAUSED_MESSAGE (0xC2B + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET)
|
||||
#define INFATUATED_MESSAGE (0xC2C + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET)
|
||||
#define BIDE_MESSAGE (0xC2D + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET)
|
||||
|
||||
extern void SubstitutePlaceholderStringTags(u8 *string_id, struct entity *entity, u32 param_3);
|
||||
extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id);
|
||||
extern void SetActionPassTurnOrWalk(struct action_data *monster_action, s16 monster_id);
|
||||
extern bool8 CanMonsterMoveInDirection(struct entity *monster, u8 direction);
|
||||
extern void ChooseAiMove(struct entity *monster);
|
||||
|
||||
bool8 HasStatusThatPreventsActing(struct entity *monster)
|
||||
{
|
||||
struct monster *pokemon_info = GetEntInfo(monster);
|
||||
SubstitutePlaceholderStringTags(0, monster, 0);
|
||||
SetMonsterActionFields(&pokemon_info->action, ACTION_PASS_TURN);
|
||||
|
||||
switch (pokemon_info->sleep_class_status.sleep)
|
||||
{
|
||||
case STATUS_SLEEP_NIGHTMARE:
|
||||
case STATUS_SLEEP_SLEEP:
|
||||
case STATUS_SLEEP_NAPPING:
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
switch (pokemon_info->frozen_class_status.freeze)
|
||||
{
|
||||
case STATUS_FROZEN_FROZEN:
|
||||
LogMessageByIdWithPopupCheckUser(monster, FROZEN_MESSAGE);
|
||||
return TRUE;
|
||||
case STATUS_FROZEN_WRAP:
|
||||
LogMessageByIdWithPopupCheckUser(monster, WRAPPED_AROUND_MESSAGE);
|
||||
return TRUE;
|
||||
case STATUS_FROZEN_WRAPPED:
|
||||
LogMessageByIdWithPopupCheckUser(monster, WRAPPED_BY_MESSAGE);
|
||||
return TRUE;
|
||||
case STATUS_FROZEN_PETRIFIED:
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
switch (pokemon_info->cringe_class_status.cringe)
|
||||
{
|
||||
case STATUS_CRINGE_PAUSED:
|
||||
LogMessageByIdWithPopupCheckUser(monster, PAUSED_MESSAGE);
|
||||
return TRUE;
|
||||
case STATUS_CRINGE_INFATUATED:
|
||||
LogMessageByIdWithPopupCheckUser(monster, INFATUATED_MESSAGE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (pokemon_info->bide_class_status.bide == STATUS_TWO_TURN_BIDE)
|
||||
{
|
||||
LogMessageByIdWithPopupCheckUser(monster, BIDE_MESSAGE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (pokemon_info->curse_class_status.curse == STATUS_CURSE_DECOY)
|
||||
{
|
||||
SetActionPassTurnOrWalk(&pokemon_info->action, pokemon_info->id);
|
||||
pokemon_info->action.direction = DungeonRandInt(NUM_DIRECTIONS);
|
||||
pokemon_info->target_pos.x = monster->pos.x;
|
||||
pokemon_info->target_pos.y = monster->pos.y - 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (pokemon_info->shopkeeper == SHOPKEEPER_MODE_SHOPKEEPER)
|
||||
return TRUE;
|
||||
|
||||
if (IsBlinded(monster, TRUE))
|
||||
{
|
||||
if (CanMonsterMoveInDirection(monster, pokemon_info->action.direction))
|
||||
{
|
||||
SetActionPassTurnOrWalk(&pokemon_info->action, pokemon_info->id);
|
||||
}
|
||||
else if (DungeonRandInt(2) != 0)
|
||||
{
|
||||
pokemon_info->action.direction = DungeonRandInt(NUM_DIRECTIONS);
|
||||
pokemon_info->action.direction = pokemon_info->action.direction & DIRECTION_MASK;
|
||||
SetActionPassTurnOrWalk(&pokemon_info->action, pokemon_info->id);
|
||||
}
|
||||
else
|
||||
{
|
||||
ChooseAiMove(monster);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (pokemon_info->blinker_class_status.blinded == STATUS_BLINKER_CROSS_EYED)
|
||||
{
|
||||
SetActionPassTurnOrWalk(&pokemon_info->action, pokemon_info->id);
|
||||
pokemon_info->action.direction = DungeonRandInt(NUM_DIRECTIONS);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
Reference in New Issue
Block a user