Merge pull request #140 from AnonymousRandomPerson/main

Decomped more AI functions
This commit is contained in:
AnonymousRandomPerson
2025-06-17 23:20:34 -05:00
committed by GitHub
34 changed files with 919 additions and 924 deletions

View File

@@ -1,52 +1,26 @@
#pragma once
.public abs
.public AdvanceFrame
.public CalcSpeedStageWrapper
.public ChangeLeader
.public DecrementWindCounter
.public DisplayActions
.public DUNGEON_PTR
.public EnemyEvolution
.public EntityIsValid__022EC608
.public ExecuteMonsterAction
.public FRACTIONAL_TURN_SEQUENCE
.public GetEquivItemIndex
.public GetItemAtIdx
.public GetItemCategoryVeneer
.public GetItemInfo
.public GetLeader
.public GetTile
.public IsFloorOver
.public IsHM
.public ITEM_CATEGORY_ACTIONS
.public IsHM
.public ItemZInit
.public ov29_022E81F8
.public ov29_022EF9C8
.public ov29_0230FC24
.public RemoveEmptyItemsInBagWrapper
.public RemoveEquivItemNoHole
.public RemoveGroundItem
.public RemoveItem
.public SetItemAcquired
.public SetMonsterActionFields
.public ShouldDisplayEntityWrapper
.public SpawnItem
.public ov29_02347040
.public ov29_02348FD8
.public ov29_02352074
.public ov29_023522B6
.public ov29_0237C918
.public ov29_0237C91C
.public ov29_0237C91E
.public ov29_0237C920
.public ov29_0237C922
.public ov29_0237C96C
.public RemoveEmptyItemsInBagWrapper
.public RemoveEquivItemNoHole
.public RemoveGroundItem
.public RemoveItem
.public RunMonsterAi
.public SetItemAcquired
.public SetLeaderAction
.public SetMonsterActionFields
.public ShouldDisplayEntityWrapper
.public SpawnItem
.public sub_01FFBDF4
.public TickStatusAndHealthRegen
.public TryActivateArtificialWeatherAbilities
.public TryActivateWeather
.public TryForcedLoss
.public TryRestoreRoostTyping
.public TrySpawnMonsterAndActivatePlusMinus

View File

@@ -0,0 +1,28 @@
#pragma once
.public AdvanceFrame
.public CalcSpeedStageWrapper
.public ChangeLeader
.public DUNGEON_PTR
.public DecrementWindCounter
.public DisplayActions
.public EnemyEvolution
.public EntityIsValid__022EC608
.public ExecuteMonsterAction
.public FRACTIONAL_TURN_SEQUENCE
.public GetLeader
.public IsFloorOver
.public RunMonsterAi
.public SetLeaderAction
.public TickStatusAndHealthRegen
.public TryActivateArtificialWeatherAbilities
.public TryActivateWeather
.public TryForcedLoss
.public TryRestoreRoostTyping
.public TrySpawnMonsterAndActivatePlusMinus
.public abs
.public ov29_022E81F8
.public ov29_022EF9C8
.public ov29_0230FC24
.public ov29_02348FD8
.public ov29_023522B6
.public sub_01FFBDF4

View File

@@ -111,7 +111,7 @@
.public ov29_023009CC
.public ov29_02300FCC
.public ov29_0230105C
.public ov29_02301158
.public CanMonsterMoveOrSwapWithAllyInDirection
.public ov29_023055B0
.public ov29_02321164
.public ov29_02322DDC

View File

@@ -6,5 +6,5 @@
.public IqSkillIsEnabled
.public IsCurrentTilesetBackground
.public ItemIsActive__022FF898
.public ov29_02352788
.public ov29_02352790
.public DIRECTIONAL_BIT_MASKS__02352788
.public DIRECTIONAL_BIT_MASKS__02352790

View File

@@ -5,12 +5,10 @@
.public GetDirectionalMobilityType
.public GetMobilityTypeCheckSlipAndFloating
.public GetTile
.public GetTreatmentBetweenMonsters
.public IqSkillIsEnabled
.public IsCurrentTilesetBackground
.public IsTacticSet
.public ItemIsActive__022FF898
.public SECONDARY_TERRAIN_TYPES
.public ov29_02352770
.public ov29_02352778
.public ov29_02352780
.public DIRECTIONAL_BIT_MASKS__02352770
.public DIRECTIONAL_BIT_MASKS__02352778

View File

@@ -1,16 +1,15 @@
#pragma once
.public _s32_div_f
.public AbilityIsActiveVeneer
.public AdvanceFrame
.public AnimationDelayOrSomething
.public DefenderAbilityIsActive__02322D64
.public DETECT_BAND_MOVE_ACCURACY_DROP
.public DIRECTIONS_XY
.public DUNGEON_PTR
.public DefenderAbilityIsActive__02322D64
.public DungeonRandInt
.public DungeonRandRange
.public EntityIsValid__02321438
.public EXCL_ITEM_EFFECTS_EVASION_BOOST
.public EntityIsValid__02321438
.public ExclusiveItemEffectFlagTest
.public ExecuteMoveEffect
.public FormatMoveStringMore
@@ -27,11 +26,18 @@
.public GetTreatmentBetweenMonsters
.public HasHeldItem
.public IqSkillIsEnabled
.public IsChargingTwoTurnMove
.public LogMessageQuiet
.public LogMessageWithPopup
.public MALE_ACCURACY_STAGE_MULTIPLIERS
.public MALE_EVASION_STAGE_MULTIPLIERS
.public MoveIsNotPhysical
.public PlayMoveAnimation
.public PositionHasMonster
.public QUICK_DODGER_MOVE_ACCURACY_DROP
.public ShouldDisplayEntityWrapper
.public TwoTurnMoveForcedMiss
.public _s32_div_f
.public ov10_022BDE50
.public ov10_022BE9E8
.public ov10_022BEB2C
@@ -58,12 +64,6 @@
.public ov29_02352A6C
.public ov29_02352A8C
.public ov29_0235370C
.public PlayMoveAnimation
.public PositionHasMonster
.public QUICK_DODGER_MOVE_ACCURACY_DROP
.public ShouldDisplayEntityWrapper
.public sub_020018D0
.public sub_02001980
.public sub_0201CF90
.public TWO_TURN_MOVES_AND_STATUSES
.public TwoTurnMoveForcedMiss

View File

@@ -0,0 +1 @@
#pragma once

View File

@@ -732,670 +732,3 @@ SetActionUseMovePlayer: ; 0x022EBC98
strb r4, [r6, #0xa]
ldmia sp!, {r4, r5, r6, pc}
arm_func_end SetActionUseMovePlayer
arm_func_start SetActionUseMoveAi
SetActionUseMoveAi: ; 0x022EBCBC
stmdb sp!, {r4, r5, r6, lr}
mov r5, r1
mov r1, #0x15
mov r6, r0
mov r4, r2
bl SetMonsterActionFields
cmp r4, #0xff
strb r5, [r6, #4]
andne r0, r4, #7
strneb r0, [r6, #2]
ldmia sp!, {r4, r5, r6, pc}
arm_func_end SetActionUseMoveAi
arm_func_start ov29_022EBCE8
ov29_022EBCE8: ; 0x022EBCE8
ldrh r1, [r0]
cmp r1, #0x15
ldreqb r0, [r0, #4]
bxeq lr
cmp r1, #0x14
ldreqb r0, [r0, #0xa]
mvnne r0, #0
bx lr
arm_func_end ov29_022EBCE8
arm_func_start RunFractionalTurn
RunFractionalTurn: ; 0x022EBD08
#ifdef JAPAN
#define RUN_FRACTIONAL_TURN_OFFSET -0xA4
#define RUN_FRACTIONAL_TURN_OFFSET_2 -4
#else
#define RUN_FRACTIONAL_TURN_OFFSET 0
#define RUN_FRACTIONAL_TURN_OFFSET_2 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x40
mov r4, r0
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
bl TrySpawnMonsterAndActivatePlusMinus
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
mov r0, r4
bl RunLeaderTurn
mov r4, r0
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
cmp r4, #0
beq _022EBD60
bl DecrementWindCounter
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
_022EBD60:
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
bl GetLeader
mov r8, r0
bl ov29_02348FD8
mov r5, #0
b _022EBECC
_022EBD80:
ldr r0, _022EC2FC ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, r5, lsl #2
add r0, r0, #0x12000
ldr r4, [r0, #0xb28 + RUN_FRACTIONAL_TURN_OFFSET]
mov r0, r4
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EBEC8
ldr r6, [r4, #0xb4]
ldrb r0, [r6, #7]
cmp r0, #0
bne _022EBEC8
bl IsFloorOver
cmp r0, #0
bne _022EBED4
ldr r1, _022EC2FC ; =DUNGEON_PTR
mov r0, r4
ldr r1, [r1]
str r4, [r1, #0xc4]
bl sub_01FFBDF4
bl TryActivateArtificialWeatherAbilities
mov r1, #0
mov r0, r4
strb r1, [r6, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
bl CalcSpeedStageWrapper
ldr r1, _022EC2FC ; =DUNGEON_PTR
ldr r3, _022EC300 ; =FRACTIONAL_TURN_SEQUENCE
ldr r2, [r1]
mov r1, #0x32
add r2, r2, #0x700
ldrsh r2, [r2, #0x80]
mla r1, r0, r1, r3
mov r0, r2, lsl #1
ldrsh r0, [r0, r1]
cmp r0, #0
beq _022EBEC8
ldrb r0, [r6, #0x152 + RUN_FRACTIONAL_TURN_OFFSET_2]
cmp r0, #0
bne _022EBEC8
ldrh r0, [r6]
tst r0, #0x8000
bne _022EBEC8
tst r0, #0x4000
bicne r0, r0, #0x4000
strneh r0, [r6]
bne _022EBEC8
mov r1, #0
mov r0, r4
strb r1, [r6, #0x14f + RUN_FRACTIONAL_TURN_OFFSET_2]
bl TickStatusAndHealthRegen
mov r0, r4
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EBEC8
mov r0, r4
bl EnemyEvolution
mov r0, r4
mov r1, #1
bl TryRestoreRoostTyping
mov sb, #0
mov r7, sb
mov r6, sb
b _022EBEC0
_022EBE80:
mov r0, r4
mov r1, r7
bl RunMonsterAi
bl IsFloorOver
cmp r0, #0
bne _022EBEC8
mov r0, r4
bl ExecuteMonsterAction
cmp r0, #0
beq _022EBEC8
mov r0, r6
bl TryForcedLoss
bl IsFloorOver
cmp r0, #0
bne _022EBEC8
add sb, sb, #1
_022EBEC0:
cmp sb, #3
blt _022EBE80
_022EBEC8:
add r5, r5, #1
_022EBECC:
cmp r5, #4
blt _022EBD80
_022EBED4:
mov sb, #0
_022EBED8:
mov r3, #0
mov sl, r3
add r2, sp, #0
_022EBEE4:
mov r0, r3, lsl #3
str sl, [r2, r3, lsl #3]
add r3, r3, #1
add r1, r2, r3, lsl #3
add r0, r2, r0
str r1, [r0, #4]
cmp r3, #3
blt _022EBEE4
str sl, [sp, #0x18]
str sl, [sp, #0x1c]
add r4, sp, #0x20
add fp, sp, #0
mov r6, #0
_022EBF18:
ldr r0, _022EC2FC ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, sl, lsl #2
add r0, r0, #0x12000
ldr r7, [r0, #0xb28 + RUN_FRACTIONAL_TURN_OFFSET]
mov r0, r7
bl EntityIsValid__022EC608
cmp r0, #0
ldrne r1, [r7, #0xb4]
ldrneb r0, [r1, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
cmpne r0, #0
beq _022EBFA8
ldrb r0, [r1, #7]
cmp r0, #0
strneb r6, [r1, #0x14f + RUN_FRACTIONAL_TURN_OFFSET_2]
strneb r6, [r1, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
bne _022EBFA8
ldrsh r1, [r8, #6]
ldrsh r0, [r7, #6]
sub r0, r1, r0
bl abs
ldrsh r2, [r8, #4]
ldrsh r1, [r7, #4]
mov r5, r0
sub r0, r2, r1
bl abs
cmp r0, r5
movle r0, r5
cmp r0, #3
movge r0, #2
add r2, fp, r0, lsl #3
ldr r1, [r2, #4]
add r0, r4, sl, lsl #3
str r7, [r4, sl, lsl #3]
str r1, [r0, #4]
str r0, [r2, #4]
_022EBFA8:
add sl, sl, #1
cmp sl, #4
blt _022EBF18
mov r7, #0
add r5, sp, #0
mov sl, #1
mov r6, r7
b _022EC00C
_022EBFC8:
ldr r4, [r5]
cmp r4, #0
beq _022EC008
ldr r2, [r4, #0xb4]
mov r0, r4
strb sl, [r2, #0x14f + RUN_FRACTIONAL_TURN_OFFSET_2]
mov r1, sl
strb r7, [r2, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
bl RunMonsterAi
mov r0, r4
bl ExecuteMonsterAction
bl ov29_022EF9C8
mov r0, r6
bl TryForcedLoss
mov r0, r4
bl EntityIsValid__022EC608
_022EC008:
ldr r5, [r5, #4]
_022EC00C:
cmp r5, #0
bne _022EBFC8
add sb, sb, #1
cmp sb, #3
blt _022EBED8
bl IsFloorOver
cmp r0, #0
bne _022EC094
mov r4, #0
ldr r5, _022EC2FC ; =DUNGEON_PTR
mov r6, r4
_022EC038:
ldr r0, [r5]
add r0, r0, r4, lsl #2
add r0, r0, #0x12000
ldr r7, [r0, #0xb28 + RUN_FRACTIONAL_TURN_OFFSET]
mov r0, r7
bl EntityIsValid__022EC608
cmp r0, #0
ldrne r8, [r7, #0xb4]
ldrneb r0, [r8, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
cmpne r0, #0
beq _022EC088
mov r0, r7
bl ov29_0230FC24
mov r0, r7
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC088
mov r0, r7
bl EnemyEvolution
strb r6, [r8, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
_022EC088:
add r4, r4, #1
cmp r4, #4
blt _022EC038
_022EC094:
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
mov sb, #0
mov r5, sb
mov r7, sb
ldr r6, _022EC300 ; =FRACTIONAL_TURN_SEQUENCE
mov fp, #0x32
ldr r4, _022EC2FC ; =DUNGEON_PTR
b _022EC1C0
_022EC0BC:
ldr r0, [r4]
add r0, r0, sb, lsl #2
add r0, r0, #0x12000
ldr r8, [r0, #0xb38 + RUN_FRACTIONAL_TURN_OFFSET]
mov r0, r8
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC1BC
bl IsFloorOver
cmp r0, #0
bne _022EC1C8
ldr sl, [r8, #0xb4]
ldr r1, [r4]
mov r0, r8
str r8, [r1, #0xc4]
bl sub_01FFBDF4
bl TryActivateArtificialWeatherAbilities
ldrh r0, [sl]
tst r0, #0x8000
bne _022EC1BC
tst r0, #0x4000
bicne r0, r0, #0x4000
strneh r0, [sl]
bne _022EC1BC
mov r0, r8
strb r7, [sl, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
bl CalcSpeedStageWrapper
ldr r2, [r4]
mla r1, r0, fp, r6
add r0, r2, #0x700
ldrsh r0, [r0, #0x80]
mov r0, r0, lsl #1
ldrsh r0, [r0, r1]
cmp r0, #0
beq _022EC1BC
ldrb r0, [sl, #0x152 + RUN_FRACTIONAL_TURN_OFFSET_2]
cmp r0, #0
bne _022EC1BC
ldrh r1, [sl]
mov r0, r8
bic r1, r1, #0xc000
strh r1, [sl]
strb r5, [sl, #0x14f + RUN_FRACTIONAL_TURN_OFFSET_2]
bl TickStatusAndHealthRegen
mov r0, r8
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC1BC
mov r0, r8
bl EnemyEvolution
mov r0, r8
mov r1, #0
bl RunMonsterAi
bl IsFloorOver
cmp r0, #0
bne _022EC1C8
mov r0, r8
bl ExecuteMonsterAction
bl ov29_022EF9C8
mov r0, #0
bl TryForcedLoss
bl IsFloorOver
cmp r0, #0
bne _022EC1C8
_022EC1BC:
add sb, sb, #1
_022EC1C0:
cmp sb, #0x10
blt _022EC0BC
_022EC1C8:
bl IsFloorOver
cmp r0, #0
bne _022EC23C
mov r4, #0
ldr r5, _022EC2FC ; =DUNGEON_PTR
mov r6, r4
_022EC1E0:
ldr r0, [r5]
add r0, r0, r4, lsl #2
add r0, r0, #0x12000
ldr r7, [r0, #0xb38 + RUN_FRACTIONAL_TURN_OFFSET]
mov r0, r7
bl EntityIsValid__022EC608
cmp r0, #0
ldrne r8, [r7, #0xb4]
ldrneb r0, [r8, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
cmpne r0, #0
beq _022EC230
mov r0, r7
bl ov29_0230FC24
mov r0, r7
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC230
mov r0, r7
bl EnemyEvolution
strb r6, [r8, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
_022EC230:
add r4, r4, #1
cmp r4, #0x10
blt _022EC1E0
_022EC23C:
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
ldr r4, _022EC2FC ; =DUNGEON_PTR
ldr r1, _022EC304 ; =ov29_023522B6
ldr r0, [r4]
add r0, r0, #0x700
ldrsh r0, [r0, #0x80]
add r0, r0, #1
mov r0, r0, lsl #1
ldrsh r0, [r1, r0]
cmp r0, #0
beq _022EC2C4
mov r5, #0
b _022EC2A4
_022EC278:
ldr r0, [r4]
add r0, r0, r5, lsl #2
add r0, r0, #0x12000
ldr r0, [r0, #0xb78 + RUN_FRACTIONAL_TURN_OFFSET]
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC2A0
mov r0, #0
bl DisplayActions
b _022EC2AC
_022EC2A0:
add r5, r5, #1
_022EC2A4:
cmp r5, #0x14
blt _022EC278
_022EC2AC:
mov r0, #1
mov r1, #0
bl TryActivateWeather
bl ov29_022EF9C8
mov r0, #0
bl TryForcedLoss
_022EC2C4:
ldr r1, _022EC2FC ; =DUNGEON_PTR
ldr r0, [r1]
add r0, r0, #0x700
ldrsh r2, [r0, #0x80]
add r2, r2, #1
strh r2, [r0, #0x80]
ldr r0, [r1]
add r0, r0, #0x700
ldrsh r1, [r0, #0x80]
cmp r1, #0x18
moveq r1, #0
streqh r1, [r0, #0x80]
_022EC2F4:
add sp, sp, #0x40
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022EC2FC: .word DUNGEON_PTR
_022EC300: .word FRACTIONAL_TURN_SEQUENCE
_022EC304: .word ov29_023522B6
arm_func_end RunFractionalTurn
arm_func_start RunLeaderTurn
RunLeaderTurn: ; 0x022EC308
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sl, r0
bl GetLeader
movs r4, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
bl ov29_02348FD8
bl TryActivateArtificialWeatherAbilities
mov r0, r4
bl CalcSpeedStageWrapper
ldr r1, _022EC600 ; =DUNGEON_PTR
ldr r3, _022EC604 ; =FRACTIONAL_TURN_SEQUENCE
ldr r2, [r1]
mov r1, #0x32
add r2, r2, #0x700
mla r1, r0, r1, r3
ldrsh r2, [r2, #0x80]
mov r0, r2, lsl #1
ldrsh r0, [r0, r1]
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r0, [r4, #0xb4]
#ifdef JAPAN
ldrb r0, [r0, #0x14e]
#else
ldrb r0, [r0, #0x152]
#endif
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r0, r4
mov r1, #1
bl TryRestoreRoostTyping
_022EC380:
bl GetLeader
movs sb, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
bl sub_01FFBDF4
mov r0, #0
bl DisplayActions
cmp r0, #0
bne _022EC3C8
ldr r0, _022EC600 ; =DUNGEON_PTR
ldr r1, [r0]
ldrb r0, [r1, #0x78b]
cmp r0, #0
ldreqb r0, [r1, #0x78e]
cmpeq r0, #0
beq _022EC3C8
mov r0, #0xc
bl AdvanceFrame
_022EC3C8:
cmp sb, #0
moveq r0, #0
beq _022EC3E8
ldr r0, [sb]
cmp r0, #1
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
_022EC3E8:
cmp r0, #0
ldrne r0, [sb, #0xb4]
movne r1, #0
strneb r1, [r0, #0x101]
bl IsFloorOver
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r0, _022EC600 ; =DUNGEON_PTR
mov r1, #0
ldr r2, [r0]
cmp sl, #0
str sb, [r2, #0xc4]
ldr r0, [r0]
movne sl, r1
str r1, [r0, #0xc8]
bne _022EC434
mov r0, sb
bl TickStatusAndHealthRegen
_022EC434:
bl IsFloorOver
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
bl ov29_022E81F8
mov r0, sb
bl EnemyEvolution
ldr r0, _022EC600 ; =DUNGEON_PTR
mov r1, #1
ldr r0, [r0]
strb r1, [r0, #0x11]
bl SetLeaderAction
ldr r0, _022EC600 ; =DUNGEON_PTR
mov r1, #0
ldr r0, [r0]
strb r1, [r0, #0x11]
bl IsFloorOver
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r0, sb
bl ExecuteMonsterAction
bl ov29_022EF9C8
mov r0, #0
bl TryForcedLoss
bl IsFloorOver
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r1, [sb, #0xb4]
ldrh r0, [r1]
tst r0, #0x8000
bicne r0, r0, #0x8000
strneh r0, [r1]
ldrneh r0, [r1]
orrne r0, r0, #0x4000
strneh r0, [r1]
bl IsFloorOver
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r4, _022EC600 ; =DUNGEON_PTR
ldr r1, [r4]
ldrb r0, [r1, #0x10]
cmp r0, #0
beq _022EC59C
mov r7, #0
strb r7, [r1, #0x10]
mov r5, r7
mov fp, r7
b _022EC594
_022EC500:
ldr r0, [r4]
add r0, r0, r7, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r6, [r0, #0xad4]
#else
ldr r6, [r0, #0xb78]
#endif
mov r0, r6
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC590
ldr r8, [r6, #0xb4]
ldrh r0, [r8]
tst r0, #0x8000
beq _022EC590
bl IsFloorOver
cmp r0, #0
bne _022EC59C
mov r0, r6
bl TickStatusAndHealthRegen
mov r0, r6
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC590
mov r0, r6
bl EnemyEvolution
mov r0, r6
mov r1, r5
bl RunMonsterAi
mov r0, r6
bl ExecuteMonsterAction
mov r0, fp
bl TryForcedLoss
ldrh r0, [r8]
bic r0, r0, #0x8000
strh r0, [r8]
ldrh r0, [r8]
orr r0, r0, #0x4000
strh r0, [r8]
_022EC590:
add r7, r7, #1
_022EC594:
cmp r7, #0x14
blt _022EC500
_022EC59C:
bl IsFloorOver
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r0, _022EC600 ; =DUNGEON_PTR
ldr r1, [r0]
ldr r0, [r1, #0xc8]
cmp r0, #0
beq _022EC5DC
bl ChangeLeader
ldr r0, _022EC600 ; =DUNGEON_PTR
mov r1, #0
ldr r0, [r0]
mov sl, #1
str r1, [r0, #0xc8]
b _022EC380
_022EC5DC:
ldr r0, [sb, #0xb4]
ldrb r0, [r0, #0x101]
cmp r0, #0
addne r0, r1, #0x700
movne r1, #0
strneh r1, [r0, #0x80]
bne _022EC380
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022EC600: .word DUNGEON_PTR
_022EC604: .word FRACTIONAL_TURN_SEQUENCE
arm_func_end RunLeaderTurn

656
asm/overlay_29_022EBCE8.s Normal file
View File

@@ -0,0 +1,656 @@
.include "asm/macros.inc"
.include "overlay_29_022EBCE8.inc"
.text
arm_func_start ov29_022EBCE8
ov29_022EBCE8: ; 0x022EBCE8
ldrh r1, [r0]
cmp r1, #0x15
ldreqb r0, [r0, #4]
bxeq lr
cmp r1, #0x14
ldreqb r0, [r0, #0xa]
mvnne r0, #0
bx lr
arm_func_end ov29_022EBCE8
arm_func_start RunFractionalTurn
RunFractionalTurn: ; 0x022EBD08
#ifdef JAPAN
#define RUN_FRACTIONAL_TURN_OFFSET -0xA4
#define RUN_FRACTIONAL_TURN_OFFSET_2 -4
#else
#define RUN_FRACTIONAL_TURN_OFFSET 0
#define RUN_FRACTIONAL_TURN_OFFSET_2 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x40
mov r4, r0
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
bl TrySpawnMonsterAndActivatePlusMinus
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
mov r0, r4
bl RunLeaderTurn
mov r4, r0
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
cmp r4, #0
beq _022EBD60
bl DecrementWindCounter
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
_022EBD60:
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
bl GetLeader
mov r8, r0
bl ov29_02348FD8
mov r5, #0
b _022EBECC
_022EBD80:
ldr r0, _022EC2FC ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, r5, lsl #2
add r0, r0, #0x12000
ldr r4, [r0, #0xb28 + RUN_FRACTIONAL_TURN_OFFSET]
mov r0, r4
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EBEC8
ldr r6, [r4, #0xb4]
ldrb r0, [r6, #7]
cmp r0, #0
bne _022EBEC8
bl IsFloorOver
cmp r0, #0
bne _022EBED4
ldr r1, _022EC2FC ; =DUNGEON_PTR
mov r0, r4
ldr r1, [r1]
str r4, [r1, #0xc4]
bl sub_01FFBDF4
bl TryActivateArtificialWeatherAbilities
mov r1, #0
mov r0, r4
strb r1, [r6, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
bl CalcSpeedStageWrapper
ldr r1, _022EC2FC ; =DUNGEON_PTR
ldr r3, _022EC300 ; =FRACTIONAL_TURN_SEQUENCE
ldr r2, [r1]
mov r1, #0x32
add r2, r2, #0x700
ldrsh r2, [r2, #0x80]
mla r1, r0, r1, r3
mov r0, r2, lsl #1
ldrsh r0, [r0, r1]
cmp r0, #0
beq _022EBEC8
ldrb r0, [r6, #0x152 + RUN_FRACTIONAL_TURN_OFFSET_2]
cmp r0, #0
bne _022EBEC8
ldrh r0, [r6]
tst r0, #0x8000
bne _022EBEC8
tst r0, #0x4000
bicne r0, r0, #0x4000
strneh r0, [r6]
bne _022EBEC8
mov r1, #0
mov r0, r4
strb r1, [r6, #0x14f + RUN_FRACTIONAL_TURN_OFFSET_2]
bl TickStatusAndHealthRegen
mov r0, r4
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EBEC8
mov r0, r4
bl EnemyEvolution
mov r0, r4
mov r1, #1
bl TryRestoreRoostTyping
mov sb, #0
mov r7, sb
mov r6, sb
b _022EBEC0
_022EBE80:
mov r0, r4
mov r1, r7
bl RunMonsterAi
bl IsFloorOver
cmp r0, #0
bne _022EBEC8
mov r0, r4
bl ExecuteMonsterAction
cmp r0, #0
beq _022EBEC8
mov r0, r6
bl TryForcedLoss
bl IsFloorOver
cmp r0, #0
bne _022EBEC8
add sb, sb, #1
_022EBEC0:
cmp sb, #3
blt _022EBE80
_022EBEC8:
add r5, r5, #1
_022EBECC:
cmp r5, #4
blt _022EBD80
_022EBED4:
mov sb, #0
_022EBED8:
mov r3, #0
mov sl, r3
add r2, sp, #0
_022EBEE4:
mov r0, r3, lsl #3
str sl, [r2, r3, lsl #3]
add r3, r3, #1
add r1, r2, r3, lsl #3
add r0, r2, r0
str r1, [r0, #4]
cmp r3, #3
blt _022EBEE4
str sl, [sp, #0x18]
str sl, [sp, #0x1c]
add r4, sp, #0x20
add fp, sp, #0
mov r6, #0
_022EBF18:
ldr r0, _022EC2FC ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, sl, lsl #2
add r0, r0, #0x12000
ldr r7, [r0, #0xb28 + RUN_FRACTIONAL_TURN_OFFSET]
mov r0, r7
bl EntityIsValid__022EC608
cmp r0, #0
ldrne r1, [r7, #0xb4]
ldrneb r0, [r1, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
cmpne r0, #0
beq _022EBFA8
ldrb r0, [r1, #7]
cmp r0, #0
strneb r6, [r1, #0x14f + RUN_FRACTIONAL_TURN_OFFSET_2]
strneb r6, [r1, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
bne _022EBFA8
ldrsh r1, [r8, #6]
ldrsh r0, [r7, #6]
sub r0, r1, r0
bl abs
ldrsh r2, [r8, #4]
ldrsh r1, [r7, #4]
mov r5, r0
sub r0, r2, r1
bl abs
cmp r0, r5
movle r0, r5
cmp r0, #3
movge r0, #2
add r2, fp, r0, lsl #3
ldr r1, [r2, #4]
add r0, r4, sl, lsl #3
str r7, [r4, sl, lsl #3]
str r1, [r0, #4]
str r0, [r2, #4]
_022EBFA8:
add sl, sl, #1
cmp sl, #4
blt _022EBF18
mov r7, #0
add r5, sp, #0
mov sl, #1
mov r6, r7
b _022EC00C
_022EBFC8:
ldr r4, [r5]
cmp r4, #0
beq _022EC008
ldr r2, [r4, #0xb4]
mov r0, r4
strb sl, [r2, #0x14f + RUN_FRACTIONAL_TURN_OFFSET_2]
mov r1, sl
strb r7, [r2, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
bl RunMonsterAi
mov r0, r4
bl ExecuteMonsterAction
bl ov29_022EF9C8
mov r0, r6
bl TryForcedLoss
mov r0, r4
bl EntityIsValid__022EC608
_022EC008:
ldr r5, [r5, #4]
_022EC00C:
cmp r5, #0
bne _022EBFC8
add sb, sb, #1
cmp sb, #3
blt _022EBED8
bl IsFloorOver
cmp r0, #0
bne _022EC094
mov r4, #0
ldr r5, _022EC2FC ; =DUNGEON_PTR
mov r6, r4
_022EC038:
ldr r0, [r5]
add r0, r0, r4, lsl #2
add r0, r0, #0x12000
ldr r7, [r0, #0xb28 + RUN_FRACTIONAL_TURN_OFFSET]
mov r0, r7
bl EntityIsValid__022EC608
cmp r0, #0
ldrne r8, [r7, #0xb4]
ldrneb r0, [r8, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
cmpne r0, #0
beq _022EC088
mov r0, r7
bl ov29_0230FC24
mov r0, r7
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC088
mov r0, r7
bl EnemyEvolution
strb r6, [r8, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
_022EC088:
add r4, r4, #1
cmp r4, #4
blt _022EC038
_022EC094:
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
mov sb, #0
mov r5, sb
mov r7, sb
ldr r6, _022EC300 ; =FRACTIONAL_TURN_SEQUENCE
mov fp, #0x32
ldr r4, _022EC2FC ; =DUNGEON_PTR
b _022EC1C0
_022EC0BC:
ldr r0, [r4]
add r0, r0, sb, lsl #2
add r0, r0, #0x12000
ldr r8, [r0, #0xb38 + RUN_FRACTIONAL_TURN_OFFSET]
mov r0, r8
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC1BC
bl IsFloorOver
cmp r0, #0
bne _022EC1C8
ldr sl, [r8, #0xb4]
ldr r1, [r4]
mov r0, r8
str r8, [r1, #0xc4]
bl sub_01FFBDF4
bl TryActivateArtificialWeatherAbilities
ldrh r0, [sl]
tst r0, #0x8000
bne _022EC1BC
tst r0, #0x4000
bicne r0, r0, #0x4000
strneh r0, [sl]
bne _022EC1BC
mov r0, r8
strb r7, [sl, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
bl CalcSpeedStageWrapper
ldr r2, [r4]
mla r1, r0, fp, r6
add r0, r2, #0x700
ldrsh r0, [r0, #0x80]
mov r0, r0, lsl #1
ldrsh r0, [r0, r1]
cmp r0, #0
beq _022EC1BC
ldrb r0, [sl, #0x152 + RUN_FRACTIONAL_TURN_OFFSET_2]
cmp r0, #0
bne _022EC1BC
ldrh r1, [sl]
mov r0, r8
bic r1, r1, #0xc000
strh r1, [sl]
strb r5, [sl, #0x14f + RUN_FRACTIONAL_TURN_OFFSET_2]
bl TickStatusAndHealthRegen
mov r0, r8
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC1BC
mov r0, r8
bl EnemyEvolution
mov r0, r8
mov r1, #0
bl RunMonsterAi
bl IsFloorOver
cmp r0, #0
bne _022EC1C8
mov r0, r8
bl ExecuteMonsterAction
bl ov29_022EF9C8
mov r0, #0
bl TryForcedLoss
bl IsFloorOver
cmp r0, #0
bne _022EC1C8
_022EC1BC:
add sb, sb, #1
_022EC1C0:
cmp sb, #0x10
blt _022EC0BC
_022EC1C8:
bl IsFloorOver
cmp r0, #0
bne _022EC23C
mov r4, #0
ldr r5, _022EC2FC ; =DUNGEON_PTR
mov r6, r4
_022EC1E0:
ldr r0, [r5]
add r0, r0, r4, lsl #2
add r0, r0, #0x12000
ldr r7, [r0, #0xb38 + RUN_FRACTIONAL_TURN_OFFSET]
mov r0, r7
bl EntityIsValid__022EC608
cmp r0, #0
ldrne r8, [r7, #0xb4]
ldrneb r0, [r8, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
cmpne r0, #0
beq _022EC230
mov r0, r7
bl ov29_0230FC24
mov r0, r7
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC230
mov r0, r7
bl EnemyEvolution
strb r6, [r8, #0x14e + RUN_FRACTIONAL_TURN_OFFSET_2]
_022EC230:
add r4, r4, #1
cmp r4, #0x10
blt _022EC1E0
_022EC23C:
bl IsFloorOver
cmp r0, #0
bne _022EC2F4
ldr r4, _022EC2FC ; =DUNGEON_PTR
ldr r1, _022EC304 ; =ov29_023522B6
ldr r0, [r4]
add r0, r0, #0x700
ldrsh r0, [r0, #0x80]
add r0, r0, #1
mov r0, r0, lsl #1
ldrsh r0, [r1, r0]
cmp r0, #0
beq _022EC2C4
mov r5, #0
b _022EC2A4
_022EC278:
ldr r0, [r4]
add r0, r0, r5, lsl #2
add r0, r0, #0x12000
ldr r0, [r0, #0xb78 + RUN_FRACTIONAL_TURN_OFFSET]
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC2A0
mov r0, #0
bl DisplayActions
b _022EC2AC
_022EC2A0:
add r5, r5, #1
_022EC2A4:
cmp r5, #0x14
blt _022EC278
_022EC2AC:
mov r0, #1
mov r1, #0
bl TryActivateWeather
bl ov29_022EF9C8
mov r0, #0
bl TryForcedLoss
_022EC2C4:
ldr r1, _022EC2FC ; =DUNGEON_PTR
ldr r0, [r1]
add r0, r0, #0x700
ldrsh r2, [r0, #0x80]
add r2, r2, #1
strh r2, [r0, #0x80]
ldr r0, [r1]
add r0, r0, #0x700
ldrsh r1, [r0, #0x80]
cmp r1, #0x18
moveq r1, #0
streqh r1, [r0, #0x80]
_022EC2F4:
add sp, sp, #0x40
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022EC2FC: .word DUNGEON_PTR
_022EC300: .word FRACTIONAL_TURN_SEQUENCE
_022EC304: .word ov29_023522B6
arm_func_end RunFractionalTurn
arm_func_start RunLeaderTurn
RunLeaderTurn: ; 0x022EC308
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sl, r0
bl GetLeader
movs r4, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
bl ov29_02348FD8
bl TryActivateArtificialWeatherAbilities
mov r0, r4
bl CalcSpeedStageWrapper
ldr r1, _022EC600 ; =DUNGEON_PTR
ldr r3, _022EC604 ; =FRACTIONAL_TURN_SEQUENCE
ldr r2, [r1]
mov r1, #0x32
add r2, r2, #0x700
mla r1, r0, r1, r3
ldrsh r2, [r2, #0x80]
mov r0, r2, lsl #1
ldrsh r0, [r0, r1]
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r0, [r4, #0xb4]
#ifdef JAPAN
ldrb r0, [r0, #0x14e]
#else
ldrb r0, [r0, #0x152]
#endif
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r0, r4
mov r1, #1
bl TryRestoreRoostTyping
_022EC380:
bl GetLeader
movs sb, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
bl sub_01FFBDF4
mov r0, #0
bl DisplayActions
cmp r0, #0
bne _022EC3C8
ldr r0, _022EC600 ; =DUNGEON_PTR
ldr r1, [r0]
ldrb r0, [r1, #0x78b]
cmp r0, #0
ldreqb r0, [r1, #0x78e]
cmpeq r0, #0
beq _022EC3C8
mov r0, #0xc
bl AdvanceFrame
_022EC3C8:
cmp sb, #0
moveq r0, #0
beq _022EC3E8
ldr r0, [sb]
cmp r0, #1
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
_022EC3E8:
cmp r0, #0
ldrne r0, [sb, #0xb4]
movne r1, #0
strneb r1, [r0, #0x101]
bl IsFloorOver
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r0, _022EC600 ; =DUNGEON_PTR
mov r1, #0
ldr r2, [r0]
cmp sl, #0
str sb, [r2, #0xc4]
ldr r0, [r0]
movne sl, r1
str r1, [r0, #0xc8]
bne _022EC434
mov r0, sb
bl TickStatusAndHealthRegen
_022EC434:
bl IsFloorOver
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
bl ov29_022E81F8
mov r0, sb
bl EnemyEvolution
ldr r0, _022EC600 ; =DUNGEON_PTR
mov r1, #1
ldr r0, [r0]
strb r1, [r0, #0x11]
bl SetLeaderAction
ldr r0, _022EC600 ; =DUNGEON_PTR
mov r1, #0
ldr r0, [r0]
strb r1, [r0, #0x11]
bl IsFloorOver
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r0, sb
bl ExecuteMonsterAction
bl ov29_022EF9C8
mov r0, #0
bl TryForcedLoss
bl IsFloorOver
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r1, [sb, #0xb4]
ldrh r0, [r1]
tst r0, #0x8000
bicne r0, r0, #0x8000
strneh r0, [r1]
ldrneh r0, [r1]
orrne r0, r0, #0x4000
strneh r0, [r1]
bl IsFloorOver
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r4, _022EC600 ; =DUNGEON_PTR
ldr r1, [r4]
ldrb r0, [r1, #0x10]
cmp r0, #0
beq _022EC59C
mov r7, #0
strb r7, [r1, #0x10]
mov r5, r7
mov fp, r7
b _022EC594
_022EC500:
ldr r0, [r4]
add r0, r0, r7, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r6, [r0, #0xad4]
#else
ldr r6, [r0, #0xb78]
#endif
mov r0, r6
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC590
ldr r8, [r6, #0xb4]
ldrh r0, [r8]
tst r0, #0x8000
beq _022EC590
bl IsFloorOver
cmp r0, #0
bne _022EC59C
mov r0, r6
bl TickStatusAndHealthRegen
mov r0, r6
bl EntityIsValid__022EC608
cmp r0, #0
beq _022EC590
mov r0, r6
bl EnemyEvolution
mov r0, r6
mov r1, r5
bl RunMonsterAi
mov r0, r6
bl ExecuteMonsterAction
mov r0, fp
bl TryForcedLoss
ldrh r0, [r8]
bic r0, r0, #0x8000
strh r0, [r8]
ldrh r0, [r8]
orr r0, r0, #0x4000
strh r0, [r8]
_022EC590:
add r7, r7, #1
_022EC594:
cmp r7, #0x14
blt _022EC500
_022EC59C:
bl IsFloorOver
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r0, _022EC600 ; =DUNGEON_PTR
ldr r1, [r0]
ldr r0, [r1, #0xc8]
cmp r0, #0
beq _022EC5DC
bl ChangeLeader
ldr r0, _022EC600 ; =DUNGEON_PTR
mov r1, #0
ldr r0, [r0]
mov sl, #1
str r1, [r0, #0xc8]
b _022EC380
_022EC5DC:
ldr r0, [sb, #0xb4]
ldrb r0, [r0, #0x101]
cmp r0, #0
addne r0, r1, #0x700
movne r1, #0
strneh r1, [r0, #0x80]
bne _022EC380
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022EC600: .word DUNGEON_PTR
_022EC604: .word FRACTIONAL_TURN_SEQUENCE
arm_func_end RunLeaderTurn

View File

@@ -4229,7 +4229,7 @@ _022F4020:
beq _022F4098
mov r0, r5
mov r1, r6
bl ov29_02301158
bl CanMonsterMoveOrSwapWithAllyInDirection
cmp r0, #0
movne r0, r6
bne _022F40A4
@@ -4239,7 +4239,7 @@ _022F4020:
sub r1, r6, #1
mov r0, r5
and r1, r1, #7
bl ov29_02301158
bl CanMonsterMoveOrSwapWithAllyInDirection
cmp r0, #0
subne r0, r6, #1
andne r0, r0, #7
@@ -4247,7 +4247,7 @@ _022F4020:
add r1, r6, #1
mov r0, r5
and r1, r1, #7
bl ov29_02301158
bl CanMonsterMoveOrSwapWithAllyInDirection
cmp r0, #0
addne r0, r6, #1
andne r0, r0, #7
@@ -4290,7 +4290,7 @@ ov29_022F40B8: ; 0x022F40B8
mov r5, r0
mov r0, sl
mov r1, r5
bl ov29_02301158
bl CanMonsterMoveOrSwapWithAllyInDirection
cmp r0, #0
movne r0, r5
bne _022F425C
@@ -4356,7 +4356,7 @@ _022F4198:
bgt _022F4208
mov r0, sl
mov r1, r8
bl ov29_02301158
bl CanMonsterMoveOrSwapWithAllyInDirection
cmp r0, #0
movne r0, r8
bne _022F425C
@@ -4370,7 +4370,7 @@ _022F4218:
sub r1, r5, #1
mov r0, sl
and r1, r1, #7
bl ov29_02301158
bl CanMonsterMoveOrSwapWithAllyInDirection
cmp r0, #0
subne r0, r5, #1
andne r0, r0, #7
@@ -4378,7 +4378,7 @@ _022F4218:
add r1, r5, #1
mov r0, sl
and r1, r1, #7
bl ov29_02301158
bl CanMonsterMoveOrSwapWithAllyInDirection
cmp r0, #0
addne r0, r5, #1
andne r0, r0, #7

View File

@@ -29,7 +29,7 @@ ov29_02300FCC: ; 0x02300FCC
ldrsh r0, [r5, #4]
ldrsh r1, [r5, #6]
bl GetTile
ldr r1, _02301058 ; =ov29_02352790
ldr r1, _02301058 ; =DIRECTIONAL_BIT_MASKS__02352790
and r2, r4, #7
ldrb r1, [r1, r2]
ldrb r0, [r0, #8]
@@ -41,7 +41,7 @@ ov29_02300FCC: ; 0x02300FCC
.align 2, 0
_02301050: .word DIRECTIONS_XY
_02301054: .word DIRECTIONS_XY + 2
_02301058: .word ov29_02352790
_02301058: .word DIRECTIONAL_BIT_MASKS__02352790
arm_func_end ov29_02300FCC
arm_func_start ov29_0230105C
@@ -114,7 +114,7 @@ _023024DC_JP:
ldrsh r1, [r6, #6]
bl GetTile
add r0, r0, r4
ldr r1, _02301114 ; =ov29_02352788
ldr r1, _02301114 ; =DIRECTIONAL_BIT_MASKS__02352788
and r2, r5, #7
ldrb r1, [r1, r2]
ldrb r0, [r0, #8]
@@ -131,5 +131,5 @@ _023024DC_JP:
.align 2, 0
_0230110C: .word DIRECTIONS_XY
_02301110: .word DIRECTIONS_XY + 2
_02301114: .word ov29_02352788
_02301114: .word DIRECTIONAL_BIT_MASKS__02352788
arm_func_end ov29_0230105C

View File

@@ -1,101 +1,8 @@
.include "asm/macros.inc"
.include "overlay_29_02301158.inc"
.include "overlay_29_02301234.inc"
.text
arm_func_start ov29_02301158
ov29_02301158: ; 0x02301158
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
ldr r2, [r6, #0xb4]
mov r5, r1
ldrsh r1, [r2, #2]
bl GetMobilityTypeCheckSlipAndFloating
ldr r2, _02301228 ; =DIRECTIONS_XY
mov ip, r5, lsl #2
ldr r1, _0230122C ; =DIRECTIONS_XY + 2
ldrsh r3, [r2, ip]
ldrsh lr, [r6, #4]
mov r4, r0
ldrsh r2, [r6, #6]
ldrsh r1, [r1, ip]
add r0, lr, r3
add r1, r2, r1
bl GetTile
ldrh r1, [r0]
tst r1, #0x10
movne r0, #0
ldmneia sp!, {r4, r5, r6, pc}
ldr r1, [r0, #0xc]
cmp r1, #0
beq _023011E0
ldr r0, [r1]
cmp r0, #1
bne _023011E0
mov r0, r6
mov r2, #1
mov r3, #0
bl GetTreatmentBetweenMonsters
cmp r0, #1
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, pc}
_023011E0:
#ifdef JAPAN
bl IsCurrentTilesetBackground
cmp r0, #0
bne _02302654
ldr r0, [r6, #0xb4]
ldrb r0, [r0, #0xef]
cmp r0, #3
moveq r4, #3
beq _02302654
mov r0, r6
mov r1, #0x10
bl ItemIsActive__022FF898
cmp r0, #0
movne r4, #3
bne _02302654
mov r0, r6
mov r1, #0xc
bl IqSkillIsEnabled
cmp r0, #0
movne r4, #2
bne _02302654
mov r0, r6
mov r1, #0xd
bl IqSkillIsEnabled
cmp r0, #0
beq _02302654
tst r5, #1
movne r4, #2
moveq r4, #3
_02302654:
#else
mov r0, r6
mov r1, r4
and r2, r5, #0xff
bl GetDirectionalMobilityType
mov r4, r0
#endif
ldrsh r0, [r6, #4]
ldrsh r1, [r6, #6]
bl GetTile
add r0, r0, r4
ldr r1, _02301230 ; =ov29_02352780
and r2, r5, #7
ldrb r1, [r1, r2]
ldrb r0, [r0, #8]
tst r1, r0
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02301228: .word DIRECTIONS_XY
_0230122C: .word DIRECTIONS_XY + 2
_02301230: .word ov29_02352780
arm_func_end ov29_02301158
arm_func_start CanAttackInDirection
CanAttackInDirection: ; 0x02301234
stmdb sp!, {r4, r5, r6, lr}
@@ -168,7 +75,7 @@ _02302778:
ldrsh r1, [r6, #6]
bl GetTile
add r0, r0, r4
ldr r1, _023012F4 ; =ov29_02352778
ldr r1, _023012F4 ; =DIRECTIONAL_BIT_MASKS__02352778
and r2, r5, #7
ldrb r1, [r1, r2]
ldrb r0, [r0, #8]
@@ -185,7 +92,7 @@ _02302778:
.align 2, 0
_023012EC: .word DIRECTIONS_XY
_023012F0: .word DIRECTIONS_XY + 2
_023012F4: .word ov29_02352778
_023012F4: .word DIRECTIONAL_BIT_MASKS__02352778
arm_func_end CanAttackInDirection
arm_func_start CanAiMonsterMoveInDirection
@@ -316,7 +223,7 @@ _0230295C:
ldrsh r1, [r8, #6]
bl GetTile
add r0, r0, r5
ldr r1, _02301494 ; =ov29_02352770
ldr r1, _02301494 ; =DIRECTIONAL_BIT_MASKS__02352770
and r2, r7, #7
ldrb r1, [r1, r2]
ldrb r0, [r0, #8]
@@ -334,7 +241,7 @@ _02301484: .word DIRECTIONS_XY
_02301488: .word DIRECTIONS_XY + 2
_0230148C: .word DUNGEON_PTR
_02301490: .word SECONDARY_TERRAIN_TYPES
_02301494: .word ov29_02352770
_02301494: .word DIRECTIONAL_BIT_MASKS__02352770
arm_func_end CanAiMonsterMoveInDirection
arm_func_start ov29_02301498

View File

@@ -1719,40 +1719,3 @@ IsHyperBeamVariant: ; 0x02324534
.align 2, 0
_023245A0: .word 0x000001C5
arm_func_end IsHyperBeamVariant
arm_func_start IsChargingTwoTurnMove
IsChargingTwoTurnMove: ; 0x023245A4
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
bl EntityIsValid__02321438
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
ldr ip, [r5, #0xb4]
mov lr, #0
ldr r2, _02324618 ; =TWO_TURN_MOVES_AND_STATUSES
b _02324608
_023245D0:
mov r3, lr, lsl #2
ldrh r1, [r2, r3]
cmp r1, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
ldrh r0, [r4, #4]
cmp r0, r1
addeq r0, r2, r3
ldreqb r1, [ip, #0xd2]
ldreqb r0, [r0, #2]
cmpeq r1, r0
moveq r0, #1
ldmeqia sp!, {r3, r4, r5, pc}
add lr, lr, #1
_02324608:
cmp lr, #0x64
blt _023245D0
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_02324618: .word TWO_TURN_MOVES_AND_STATUSES
arm_func_end IsChargingTwoTurnMove

View File

@@ -430,20 +430,3 @@ BELLY_DRAIN_IN_WALLS_INT:
.global ov29_0235276C
ov29_0235276C:
.byte 0x00, 0x00, 0x00, 0x00
.global ov29_02352770
ov29_02352770:
.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
.global ov29_02352778
ov29_02352778:
.byte 0x01, 0x02, 0x04, 0x08
.byte 0x10, 0x20, 0x40, 0x80
.global ov29_02352780
ov29_02352780:
.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
.global ov29_02352788
ov29_02352788:
.byte 0x01, 0x02, 0x04, 0x08
.byte 0x10, 0x20, 0x40, 0x80
.global ov29_02352790
ov29_02352790:
.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80

View File

@@ -17,5 +17,6 @@ enum direction_id {
#define DIRECTION_MASK 7
#define NUM_DIRECTIONS 8
#define DIR_NONE_UNSIGNED 0xFF
#endif //PMDSKY_DIRECTION_H

View File

@@ -0,0 +1,11 @@
#ifndef PMDSKY_DIRECTIONAL_BIT_MASKS_H
#define PMDSKY_DIRECTIONAL_BIT_MASKS_H
extern const u8 DIRECTIONAL_BIT_MASKS__02352770[];
extern const u8 DIRECTIONAL_BIT_MASKS__02352778[];
extern const u8 DIRECTIONAL_BIT_MASKS__02352780[];
extern const u8 DIRECTIONAL_BIT_MASKS__02352788[];
extern const u8 DIRECTIONAL_BIT_MASKS__02352790[];
extern const u8 DIRECTIONAL_BIT_MASKS__02352798[];
#endif //PMDSKY_DIRECTIONAL_BIT_MASKS_H

View File

@@ -0,0 +1,8 @@
#ifndef PMDSKY_DUNGEON_ACTION_HELPER_H
#define PMDSKY_DUNGEON_ACTION_HELPER_H
#include "dungeon_mode.h"
void SetActionUseMoveAi(struct action_data *monster_action, s16 move_index, u8 direction);
#endif //PMDSKY_DUNGEON_ACTION_HELPER_H

View File

@@ -1,5 +1,5 @@
#ifndef PMDSKY_DUNGEON_LOGIC_3_H
#define PMDSKY_DUNGEON_LOGIC_3_H
#ifndef PMDSKY_DUNGEON_CAPABILITIES_3_H
#define PMDSKY_DUNGEON_CAPABILITIES_3_H
#include "dungeon_mode.h"
@@ -22,4 +22,4 @@ bool8 CanMonsterMoveInDirection(struct entity *monster, u16 direction);
enum mobility_type GetDirectionalMobilityType(struct entity *monster, enum mobility_type base_mobility, u8 direction);
#endif
#endif //PMDSKY_DUNGEON_LOGIC_3_H
#endif //PMDSKY_DUNGEON_CAPABILITIES_3_H

View File

@@ -0,0 +1,12 @@
#ifndef PMDSKY_DUNGEON_CAPABILITIES_4_H
#define PMDSKY_DUNGEON_CAPABILITIES_4_H
#include "dungeon_mode.h"
// True if the given monster is cornered (it can't move in any direction)
bool8 IsMonsterCornered(struct entity *monster);
// Checks if the given monster can move in the specified direction. Includes if an allied or neutral monster is standing on an adjacent tile, as the monsters can swap places.
// Returns false if an enemy monster is standing on the target tile
bool8 CanMonsterMoveOrSwapWithAllyInDirection(struct entity *monster, s32 direction);
#endif //PMDSKY_DUNGEON_CAPABILITIES_4_H

View File

@@ -105,7 +105,6 @@ struct action_parameter {
struct action_data {
enum action action_id; // 0x0: Action ID
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.
struct position item_target_position;

View File

@@ -3,6 +3,8 @@
#include "dungeon_mode.h"
// Checks if a monster is currently charging the specified two-turn move.
bool8 IsChargingTwoTurnMove(struct entity *user, struct move *move);
// Returns a boolean indicating whether or not the given entity is charging any two-turn move.
// pokemon: Entity pointer
// check_charge: Unused boolean which was supposed to make function return true if the entity is under the effect of Charge (the Electric-type move).

View File

@@ -1,9 +0,0 @@
#ifndef PMDSKY_OVERLAY_29_02301118_H
#define PMDSKY_OVERLAY_29_02301118_H
#include "dungeon_mode.h"
// True if the given monster is cornered (it can't move in any direction)
bool8 IsMonsterCornered(struct entity *monster);
#endif //PMDSKY_OVERLAY_29_02301118_H

View File

@@ -0,0 +1,15 @@
#ifndef PMDSKY_TWO_TURN_MOVES_AND_STATUSES_H
#define PMDSKY_TWO_TURN_MOVES_AND_STATUSES_H
#include "enums.h"
// Represents a two-turn move and its corresponding status_two_turn_id value
struct two_turn_move_and_status {
enum move_id move;
enum status_two_turn_id status;
};
// List that matches two-turn move IDs to their corresponding status ID. The last entry is null.
extern const struct two_turn_move_and_status TWO_TURN_MOVES_AND_STATUSES[11];
#endif //PMDSKY_TWO_TURN_MOVES_AND_STATUSES_H

View File

@@ -294,6 +294,8 @@ Overlay OVY_29
Object asm/overlay_29_022EAB50.o
Object src/dungeon_action.o
Object asm/overlay_29_022EB44C.o
Object src/dungeon_action_helper.o
Object asm/overlay_29_022EBCE8.o
Object src/overlay_29_022EC608.o
Object asm/overlay_29_022EC62C.o
Object src/overlay_29_022ECDC0.o
@@ -344,10 +346,11 @@ Overlay OVY_29
Object asm/overlay_29_02300BF8.o
Object src/dungeon_capabilities_2.o
Object asm/overlay_29_02300D00.o
Object src/dungeon_logic_3.o
Object src/directional_bit_masks.o
Object src/dungeon_capabilities_3.o
Object asm/overlay_29_02300FCC.o
Object src/overlay_29_02301118.o
Object asm/overlay_29_02301158.o
Object src/dungeon_capabilities_4.o
Object asm/overlay_29_02301234.o
Object src/dungeon_ai_targeting.o
Object asm/overlay_29_023016D8.o
Object src/dungeon_ai_targeting_1.o

View File

@@ -0,0 +1,8 @@
#include "directional_bit_masks.h"
const u8 DIRECTIONAL_BIT_MASKS__02352790[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
const u8 DIRECTIONAL_BIT_MASKS__02352788[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
const u8 DIRECTIONAL_BIT_MASKS__02352780[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
const u8 DIRECTIONAL_BIT_MASKS__02352778[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
const u8 DIRECTIONAL_BIT_MASKS__02352770[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
const u8 DIRECTIONAL_BIT_MASKS__02352798[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};

View File

@@ -0,0 +1,11 @@
#include "dungeon_action_helper.h"
#include "direction.h"
#include "dungeon_action.h"
void SetActionUseMoveAi(struct action_data *monster_action, s16 move_index, u8 direction)
{
SetMonsterActionFields(monster_action, ACTION_USE_MOVE_AI);
monster_action->action_parameters[0].action_use_idx = move_index;
if (direction != DIR_NONE_UNSIGNED)
monster_action->direction = direction & DIRECTION_MASK;
}

View File

@@ -2,23 +2,25 @@
#include "dg_random.h"
#include "direction.h"
#include "dungeon_action.h"
#include "dungeon_action_helper.h"
#include "dungeon_ai_targeting.h"
#include "dungeon_logic_3.h"
#include "dungeon_capabilities_3.h"
#include "dungeon_capabilities_4.h"
#include "dungeon_mode.h"
#include "dungeon_parameters.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_pokemon_attributes_1.h"
#include "dungeon_util_static.h"
#include "fixed_room_data.h"
#include "overlay_29_02301118.h"
#define REGULAR_ATTACK_INDEX 4
// The weight of the regular attack in the weighted random when the AI is deciding which move to use, depending on how many other attacks the AI can currently use.
// Each index in the array corresponds to the number of attacks (0-4) the AI can use (i.e., is enabled and has PP remaining).
const s16 AI_REGULAR_ATTACK_WEIGHTS[5] = { 100, 20, 30, 40, 50 };
extern struct dungeon *DUNGEON_PTR[];
extern bool8 IsChargingTwoTurnMove(struct entity *user, struct move *move);
extern void SetActionUseMoveAi(struct action_data *monster_action, s16 move_index, u8 direction);
extern void UpdateAiTargetPos(struct entity *monster);
extern void InitMove(struct move *move, enum move_id move_id);
extern u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *monster, struct move *move);

View File

@@ -1,4 +1,5 @@
#include "dungeon_logic_3.h"
#include "dungeon_capabilities_3.h"
#include "directional_bit_masks.h"
#include "dungeon_ai_targeting.h"
#include "dungeon_map_access.h"
#include "dungeon_mobility.h"
@@ -8,8 +9,6 @@
#include "overlay_29_022FF898.h"
#include "run_dungeon.h"
static const u8 DIRECTIONAL_BIT_MASKS[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
bool8 MonsterCannotAttack(struct entity *pokemon, bool8 skip_sleep)
{
struct monster *pokemon_info = GetEntInfo(pokemon);
@@ -89,7 +88,7 @@ bool8 CanMonsterMoveInDirection(struct entity *monster, u16 direction)
#endif
current_map_tile = GetTile(monster->pos.x, monster->pos.y);
if (current_map_tile->walkable_neighbor_flags[mobility] & DIRECTIONAL_BIT_MASKS[direction & DIRECTION_MASK])
if (current_map_tile->walkable_neighbor_flags[mobility] & DIRECTIONAL_BIT_MASKS__02352798[direction & DIRECTION_MASK])
return TRUE;
return FALSE;
@@ -108,7 +107,7 @@ enum mobility_type GetDirectionalMobilityType(struct entity* monster, enum mobil
else if (mobility != MOBILITY_INTANGIBLE && IqSkillIsEnabled(monster, IQ_ALL_TERRAIN_HIKER))
mobility = MOBILITY_HOVERING;
else if (IqSkillIsEnabled(monster, IQ_ABSOLUTE_MOVER)) {
if (direction == 0xFF)
if (direction == DIR_NONE_UNSIGNED)
mobility = MOBILITY_INTANGIBLE;
else if (direction & 1)
// Absolute Mover can't break walls diagonally.

View File

@@ -0,0 +1,70 @@
#include "dungeon_capabilities_4.h"
#include "direction.h"
#include "directional_bit_masks.h"
#include "dungeon.h"
#include "dungeon_ai_targeting_1.h"
#include "dungeon_capabilities_3.h"
#include "dungeon_map_access.h"
#include "dungeon_mobility.h"
#include "dungeon_pokemon_attributes_1.h"
#include "dungeon_util.h"
#include "dungeon_util_static.h"
#include "item.h"
#include "overlay_29_022FF898.h"
#include "run_dungeon.h"
#include "targeting.h"
bool8 IsMonsterCornered(struct entity *monster)
{
for (u8 i = 0; i < NUM_DIRECTIONS; i++)
{
if (CanMonsterMoveOrSwapWithAllyInDirection(monster, i))
return TRUE;
}
return FALSE;
}
bool8 CanMonsterMoveOrSwapWithAllyInDirection(struct entity *monster, s32 direction)
{
struct monster *monster_info = GetEntInfo(monster);
enum mobility_type mobility = GetMobilityTypeCheckSlipAndFloating(monster, monster_info->id);
const struct tile *current_map_tile = GetTile(monster->pos.x + DIRECTIONS_XY[direction].x,
monster->pos.y + DIRECTIONS_XY[direction].y);
if (current_map_tile->terrain_flags & TERRAIN_TYPE_IMPASSABLE_WALL)
return FALSE;
if (current_map_tile->monster != NULL &&
current_map_tile->monster->type == ENTITY_MONSTER &&
GetTreatmentBetweenMonsters(monster, current_map_tile->monster, TRUE, FALSE) == TREATMENT_TREAT_AS_ENEMY)
return FALSE;
#ifdef JAPAN
if (!IsCurrentTilesetBackground())
{
if (GetEntInfo(monster)->invisible_class_status.status == STATUS_INVISIBLE_MOBILE)
mobility = MOBILITY_INTANGIBLE;
else if (ItemIsActive__022FF898(monster, ITEM_MOBILE_SCARF))
mobility = MOBILITY_INTANGIBLE;
else if (IqSkillIsEnabled(monster, IQ_ALL_TERRAIN_HIKER))
// BUG: If a Pokémon can normally move through walls, All-Terrain Hiker will block them from moving through walls.
// This bug is fixed in the NA/EU versions.
mobility = MOBILITY_HOVERING;
else if (IqSkillIsEnabled(monster, IQ_ABSOLUTE_MOVER)) {
if (direction & 1)
// Absolute Mover can't break walls diagonally.
mobility = MOBILITY_HOVERING;
else
mobility = MOBILITY_INTANGIBLE;
}
}
#else
mobility = GetDirectionalMobilityType(monster, mobility, direction);
#endif
current_map_tile = GetTile(monster->pos.x, monster->pos.y);
if (current_map_tile->walkable_neighbor_flags[mobility] & DIRECTIONAL_BIT_MASKS__02352780[direction & DIRECTION_MASK])
return TRUE;
return FALSE;
}

View File

@@ -1,7 +1,9 @@
#include "dungeon_move.h"
#include "dungeon_util_static.h"
#include "overlay_29_02321438.h"
#include "two_turn_moves_and_statuses.h"
// Lists all status IDs that are for two-turn moves. The last entry is null.
const enum status_two_turn_id TWO_TURN_STATUSES[11] =
{
STATUS_TWO_TURN_SOLARBEAM,
@@ -17,6 +19,24 @@ const enum status_two_turn_id TWO_TURN_STATUSES[11] =
STATUS_TWO_TURN_NONE
};
bool8 IsChargingTwoTurnMove(struct entity *user, struct move *move)
{
if (!EntityIsValid__02321438(user))
return FALSE;
struct monster *pokemon_info = GetEntInfo(user);
for (s32 i = 0; i < 100; i++)
{
if (TWO_TURN_MOVES_AND_STATUSES[i].move == MOVE_NOTHING)
return FALSE;
if (move->id == TWO_TURN_MOVES_AND_STATUSES[i].move &&
pokemon_info->bide_class_status.bide == TWO_TURN_MOVES_AND_STATUSES[i].status)
return TRUE;
}
return FALSE;
}
bool8 IsChargingAnyTwoTurnMove(struct entity *entity, bool8 charge_check_unused)
{
if (!EntityIsValid__02321438(entity))

View File

@@ -1,16 +0,0 @@
#include "overlay_29_02301118.h"
#include "direction.h"
extern bool8 ov29_02301158(struct entity *monster, s32 direction);
bool8 IsMonsterCornered(struct entity *monster)
{
for (u8 i = 0; i < NUM_DIRECTIONS; i++)
{
if (ov29_02301158(monster, i))
{
return TRUE;
}
}
return FALSE;
}

View File

@@ -2,7 +2,7 @@
#include "dg_random.h"
#include "dungeon_action.h"
#include "dungeon_ai_itcm.h"
#include "dungeon_logic_3.h"
#include "dungeon_capabilities_3.h"
#include "dungeon_statuses.h"
#include "dungeon_util_static.h"

View File

@@ -0,0 +1,15 @@
#include "two_turn_moves_and_statuses.h"
const struct two_turn_move_and_status TWO_TURN_MOVES_AND_STATUSES[11] = {
{MOVE_SOLARBEAM, STATUS_TWO_TURN_SOLARBEAM},
{MOVE_SKY_ATTACK, STATUS_TWO_TURN_SKY_ATTACK},
{MOVE_RAZOR_WIND, STATUS_TWO_TURN_RAZOR_WIND},
{MOVE_FOCUS_PUNCH, STATUS_TWO_TURN_FOCUS_PUNCH},
{MOVE_SKULL_BASH, STATUS_TWO_TURN_SKULL_BASH},
{MOVE_FLY, STATUS_TWO_TURN_FLYING},
{MOVE_BOUNCE, STATUS_TWO_TURN_BOUNCING},
{MOVE_DIVE, STATUS_TWO_TURN_DIVING},
{MOVE_DIG, STATUS_TWO_TURN_DIGGING},
{MOVE_SHADOW_FORCE, STATUS_TWO_TURN_SHADOW_FORCE},
{MOVE_NOTHING, STATUS_TWO_TURN_NONE}
};

View File

@@ -46,7 +46,8 @@ def write_inc_file(lines: List[str], file_path: str):
write_lines = ['#pragma once\n']
for function in sorted(used_functions):
write_lines.append(f'.public {function}\n')
if ' ' not in function:
write_lines.append(f'.public {function}\n')
with open(file_path, 'w') as inc_file:
inc_file.writelines(write_lines)