mirror of
https://github.com/pret/pmd-sky.git
synced 2026-08-28 05:38:04 -05:00
Merge pull request #140 from AnonymousRandomPerson/main
Decomped more AI functions
This commit is contained in:
@@ -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
|
||||
|
||||
28
asm/include/overlay_29_022EBCE8.inc
Normal file
28
asm/include/overlay_29_022EBCE8.inc
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
1
asm/include/overlay_29_rodata_02352780.inc
Normal file
1
asm/include/overlay_29_rodata_02352780.inc
Normal file
@@ -0,0 +1 @@
|
||||
#pragma once
|
||||
@@ -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
656
asm/overlay_29_022EBCE8.s
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -17,5 +17,6 @@ enum direction_id {
|
||||
|
||||
#define DIRECTION_MASK 7
|
||||
#define NUM_DIRECTIONS 8
|
||||
#define DIR_NONE_UNSIGNED 0xFF
|
||||
|
||||
#endif //PMDSKY_DIRECTION_H
|
||||
11
include/directional_bit_masks.h
Normal file
11
include/directional_bit_masks.h
Normal 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
|
||||
8
include/dungeon_action_helper.h
Normal file
8
include/dungeon_action_helper.h
Normal 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
|
||||
@@ -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
|
||||
12
include/dungeon_capabilities_4.h
Normal file
12
include/dungeon_capabilities_4.h
Normal 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
|
||||
@@ -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;
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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
|
||||
15
include/two_turn_moves_and_statuses.h
Normal file
15
include/two_turn_moves_and_statuses.h
Normal 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
|
||||
9
main.lsf
9
main.lsf
@@ -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
|
||||
|
||||
8
src/directional_bit_masks.c
Normal file
8
src/directional_bit_masks.c
Normal 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};
|
||||
11
src/dungeon_action_helper.c
Normal file
11
src/dungeon_action_helper.c
Normal 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;
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
70
src/dungeon_capabilities_4.c
Normal file
70
src/dungeon_capabilities_4.c
Normal 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;
|
||||
}
|
||||
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
|
||||
15
src/two_turn_moves_and_statuses.c
Normal file
15
src/two_turn_moves_and_statuses.c
Normal 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}
|
||||
};
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user