Merge pull request #141 from AnonymousRandomPerson/main
Some checks are pending
build / build (push) Waiting to run

Decomped more AI functions
This commit is contained in:
AnonymousRandomPerson
2025-06-19 00:22:02 -05:00
committed by GitHub
15 changed files with 836 additions and 824 deletions

View File

@@ -1,37 +1,12 @@
#pragma once
.public _0209889C
.public _020988A4
.public _020988A8
.public _020988D0
.public _020988D4
.public _020988D8
.public _02098CB4
.public _02098CCC
.public _02098D24
.public _02098D48
.public _02098D64
.public _02098D68
.public _02098DE4
.public _02098DF4
.public _02098E04
.public _02098E0C
.public _02098E14
.public _02098E58
.public _02098E9C
.public _020A1878
.public _020AF6D0
.public _020AF6D4
.public _020AF700
.public _022A4BD8
.public _s32_div_f
.public AreItemsEquivalent
.public BAG_ITEMS_PTR_MIRROR
.public BulkItemToItem
.public CALCIUM_STAT_BOOST
.public CopyBitsFrom
.public CopyBitsTo
.public Debug_Print0
.public DUNGEON_MOVE_TABLES
.public Debug_Print0
.public EXCLUSIVE_ITEM_ATTACK_BOOSTS
.public EXCLUSIVE_ITEM_DEFENSE_BOOSTS
.public EXCLUSIVE_ITEM_EFFECT_DATA
@@ -39,6 +14,8 @@
.public EXCLUSIVE_ITEM_SPECIAL_DEFENSE_BOOSTS
.public EXCLUSIVE_ITEM_STAT_BOOST_DATA_INDEXES
.public FemaleToMaleForm
.public GINSENG_CHANCE_3
.public GUMMI_STAT_BOOST
.public GetBagCapacity
.public GetBagCapacitySpecialEpisode
.public GetBaseFormCastformDeoxysCherrim
@@ -52,6 +29,7 @@
.public GetItemCategoryVeneer
.public GetItemIdFromList
.public GetMaxPp
.public GetMoveBasePowerGround
.public GetMoveMaxGinsengBoostGround
.public GetPartyMembers
.public GetPerformanceFlagWithChecks
@@ -60,12 +38,10 @@
.public GetScenarioBalance
.public GetTeamMember
.public GetType
.public GINSENG_CHANCE_3
.public GUMMI_STAT_BOOST
.public HasMonsterBeenAttackedInDungeons
.public InitBulkItem
.public IQ_GUMMI_GAIN_TABLE
.public IRON_STAT_BOOST
.public InitBulkItem
.public Is2TurnsMove
.public IsGummi
.public IsItemInTimeDarkness
@@ -86,19 +62,49 @@
.public MemZero
.public OpenWaza
.public PROTEIN_STAT_BOOST
.public RECYCLE_SHOP_ITEM_LIST
.public Rand16Bit
.public RandInt
.public RandIntSafe
.public RandRange
.public RECYCLE_SHOP_ITEM_LIST
.public RemoveEmptyItems
.public SITRUS_BERRY_FULL_HP_BOOST
.public SaveScriptVariableValue
.public SelectWaza
.public SetItemAcquired
.public SetNbRecycled
.public SITRUS_BERRY_FULL_HP_BOOST
.public SortItemList
.public StringFromId
.public TYPE_SPECIFIC_EXCLUSIVE_ITEMS
.public UnloadFile
.public WONDER_GUMMI_IQ_GAIN
.public WONDER_GUMMI_STAT_BOOST
.public ZINC_STAT_BOOST
.public ZInit8
.public _0209889C
.public _020988A4
.public _020988A8
.public _020988D0
.public _020988D4
.public _020988D8
.public _02098CB4
.public _02098CCC
.public _02098D24
.public _02098D48
.public _02098D68
.public _02098DE4
.public _02098DF4
.public _02098E04
.public _02098E0C
.public _02098E14
.public _02098E58
.public _02098E9C
.public _020A1878
.public _020AF6D0
.public _020AF6D4
.public _020AF700
.public _022A4BD8
.public _s32_div_f
.public sub_0200D1F0
.public sub_0200D8AC
.public sub_0200EB90
@@ -110,10 +116,4 @@
.public sub_02055020
.public sub_02055054
.public sub_020582E0
.public TYPE_SPECIFIC_EXCLUSIVE_ITEMS
.public UnloadFile
.public vsprintf
.public WONDER_GUMMI_IQ_GAIN
.public WONDER_GUMMI_STAT_BOOST
.public ZINC_STAT_BOOST
.public ZInit8

View File

@@ -0,0 +1,4 @@
#pragma once
.public DUNGEON_MOVE_TABLES
.public GetMaxPp
.public _02098D64

View File

@@ -1,27 +1,23 @@
#pragma once
.public AbilityIsActiveVeneer
.public CanAttackInDirection
.public CASTFORM_WEATHER_ATTRIBUTE_TABLE
.public CeilFixedPoint
.public CheckTeamMemberIdx
.public DIRECTIONS_XY
.public DUNGEON_PTR
.public DeleteWanTableEntryVeneer
.public DetermineMonsterShadow
.public DIRECTIONS_XY
.public DirectoryFileMngr_GetDirectoryFileSize
.public DiscoverMinimap
.public DisplayMessage
.public DisplayMessage2
.public DrawMinimapTile
.public DUNGEON_PTR
.public DungeonRandInt
.public EnableAllLearnableIqSkills
.public EndFrozenClassStatus
.public EntityIsValid__022F7364
.public FreeOtherWrappedMonsters
.public GendersEqualNotGenderless
.public GetAbility
.public GetActiveTeamMember
.public GetApparentWeather
.public GetBodySize
.public GetForcedLossReason
.public GetLeader
@@ -29,7 +25,6 @@
.public GetMinimapDataE447
.public GetMonsterGender
.public GetMonsterName
.public GetMoveTypeForMonster
.public GetNumberOfAttacks
.public GetSpriteFileSize
.public GetSpriteIndex__020526EC
@@ -37,15 +32,11 @@
.public GetTile
.public GetTileAtEntity
.public GetTileSafe
.public GetType
.public IQ_SKILLS
.public IsLevelResetDungeon
.public IsMonster__022F9720
.public IsMonsterIdInNormalRange
.public IsOutlawOrChallengeRequestFloor
.public IsRecruitingAllowed
.public IsSecretBazaarNpcBehavior
.public IsSecretFloor
.public IsShaymin
.public ItemZInit
.public JoinedAtRangeCheck
@@ -53,21 +44,26 @@
.public LEADER_PTR
.public LoadWanTableEntryFromPack
.public LoadWanTableEntryFromPackUseProvidedMemory
.public LogMessageByIdWithPopupCheckUser
.public LogMessageByIdWithPopupCheckUserTarget
.public LowerSpeed
.public MemAlloc
.public MemFree
.public MonsterIsType
.public OpenMessageLog
.public ov10_022C4C6E
.public ov10_022C4C70
.public PopulateActiveMonsterPtrs
.public RemoveHolderForItemInBag
.public ReplaceWanFromBinFile
.public RevertGiratinaAndShaymin
.public SetForcedLossReason
.public SetMissionTargetEnemyDefeated
.public ShouldMonsterRunAway
.public StoryRestrictionsEnabled
.public TEAM_MEMBER_TABLE_PTR
.public UpdateMapSurveyorFlag
.public UpdateMinimap
.public WAN_TABLE
.public YesNoMenu
.public ov29_022DDB68
.public ov29_022E1C0C
.public ov29_022E2470
.public ov29_022E2A78
.public ov29_022E6260
.public ov29_022E647C
.public ov29_022E68BC
.public ov29_022E8104
.public ov29_022E81F8
@@ -85,29 +81,12 @@
.public ov29_02349688
.public ov29_0234B010
.public ov29_0234B06C
.public ov29_0234B084
.public ov29_0234B0B4
.public ov29_0234B1A4
.public ov29_0234EF24
.public ov29_0237C9B0
.public PopulateActiveMonsterPtrs
.public RemoveHolderForItemInBag
.public ReplaceWanFromBinFile
.public RevertGiratinaAndShaymin
.public SetForcedLossReason
.public SetMissionTargetEnemyDefeated
.public ShouldMonsterRunAway
.public StoryRestrictionsEnabled
.public sub_02053250
.public sub_0205349C
.public sub_02056228
.public sub_020566C4
.public sub_020585B4
.public SubstitutePlaceholderStringTags
.public TEAM_MEMBER_TABLE_PTR
.public TryEndStatusWithAbility
.public UpdateMapSurveyorFlag
.public UpdateMinimap
.public WAN_TABLE
.public WEATHER_BALL_TYPE_TABLE
.public YesNoMenu

View File

@@ -0,0 +1,25 @@
#pragma once
.public AbilityIsActiveVeneer
.public CASTFORM_WEATHER_ATTRIBUTE_TABLE
.public DUNGEON_PTR
.public DungeonRandInt
.public EntityIsValid__022F7364
.public GetAbility
.public GetApparentWeather
.public GetMoveTypeForMonster
.public GetType
.public IsMonster__022F9720
.public IsSecretBazaarNpcBehavior
.public IsSecretFloor
.public LogMessageByIdWithPopupCheckUser
.public LogMessageByIdWithPopupCheckUserTarget
.public LowerSpeed
.public MonsterIsType
.public SubstitutePlaceholderStringTags
.public TryEndStatusWithAbility
.public WEATHER_BALL_TYPE_TABLE
.public ov10_022C4C6E
.public ov10_022C4C70
.public ov29_022E6260
.public ov29_022E647C
.public ov29_0234B084

View File

@@ -6017,243 +6017,3 @@ FormatMoveStringMore: ; 0x02013780
bl FormatMoveString
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end FormatMoveStringMore
arm_func_start InitMove
InitMove: ; 0x020137B8
stmdb sp!, {r4, lr}
mov r4, r0
mov r2, #5
strb r2, [r4]
mov r2, #0
strh r2, [r4, #2]
strh r1, [r4, #4]
bl GetMaxPp
strb r0, [r4, #6]
mov r0, #0
strb r0, [r4, #7]
ldmia sp!, {r4, pc}
arm_func_end InitMove
arm_func_start InitMoveCheckId
InitMoveCheckId: ; 0x020137E8
stmdb sp!, {r4, lr}
mov r4, r0
cmp r1, #0
moveq r0, #0
streqb r0, [r4]
ldmeqia sp!, {r4, pc}
mov r2, #5
strb r2, [r4]
mov r2, #0
strh r2, [r4, #2]
strh r1, [r4, #4]
bl GetMaxPp
strb r0, [r4, #6]
mov r0, #0
strb r0, [r4, #7]
ldmia sp!, {r4, pc}
arm_func_end InitMoveCheckId
arm_func_start GetInfoMoveGround
GetInfoMoveGround: ; 0x02013828
mov r2, #5
strb r2, [r0]
strh r1, [r0, #2]
mov r1, #0
strb r1, [r0, #4]
bx lr
arm_func_end GetInfoMoveGround
arm_func_start GetMoveTargetAndRange
GetMoveTargetAndRange: ; 0x02013840
ldr r2, _02013860 ; =DUNGEON_MOVE_TABLES
ldrh r3, [r0, #4]
ldr r2, [r2, #8]
mov r0, #0x1a
mla r0, r3, r0, r2
add r0, r0, r1, lsl #1
ldrsh r0, [r0, #4]
bx lr
.align 2, 0
_02013860: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveTargetAndRange
arm_func_start GetMoveType
GetMoveType: ; 0x02013864
ldr r1, _02013880 ; =DUNGEON_MOVE_TABLES
ldrh r2, [r0, #4]
ldr r1, [r1, #8]
mov r0, #0x1a
mla r0, r2, r0, r1
ldrb r0, [r0, #2]
bx lr
.align 2, 0
_02013880: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveType
arm_func_start GetMovesetLevelUpPtr
GetMovesetLevelUpPtr: ; 0x02013884
stmdb sp!, {r4, lr}
mov r4, r0
cmp r4, #0x258
subge r0, r4, #0x258
movge r0, r0, lsl #0x10
movge r4, r0, asr #0x10
mov r0, r4
bl IsInvalidMoveset
cmp r0, #0
ldrne r0, _020138C4 ; =_02098D64
ldreq r1, _020138C8 ; =DUNGEON_MOVE_TABLES
moveq r0, #0xc
smulbbeq r0, r4, r0
ldreq r1, [r1]
ldreq r0, [r1, r0]
ldmia sp!, {r4, pc}
.align 2, 0
_020138C4: .word _02098D64
_020138C8: .word DUNGEON_MOVE_TABLES
arm_func_end GetMovesetLevelUpPtr
arm_func_start IsInvalidMoveset
IsInvalidMoveset: ; 0x020138CC
cmp r0, #0
ble _020138E0
ldr r1, _020138F0 ; =0x00000229
cmp r0, r1
blt _020138E8
_020138E0:
mov r0, #1
bx lr
_020138E8:
mov r0, #0
bx lr
.align 2, 0
_020138F0: .word 0x00000229
arm_func_end IsInvalidMoveset
arm_func_start GetMovesetHmTmPtr
GetMovesetHmTmPtr: ; 0x020138F4
stmdb sp!, {r4, lr}
mov r4, r0
cmp r4, #0x258
subge r0, r4, #0x258
movge r0, r0, lsl #0x10
movge r4, r0, asr #0x10
mov r0, r4
bl IsInvalidMoveset
cmp r0, #0
ldrne r0, _02013938 ; =_02098D64
ldmneia sp!, {r4, pc}
ldr r1, _0201393C ; =DUNGEON_MOVE_TABLES
mov r0, #0xc
ldr r1, [r1]
smlabb r0, r4, r0, r1
ldr r0, [r0, #4]
ldmia sp!, {r4, pc}
.align 2, 0
_02013938: .word _02098D64
_0201393C: .word DUNGEON_MOVE_TABLES
arm_func_end GetMovesetHmTmPtr
arm_func_start GetMovesetEggPtr
GetMovesetEggPtr: ; 0x02013940
stmdb sp!, {r4, lr}
mov r4, r0
cmp r4, #0x258
subge r0, r4, #0x258
movge r0, r0, lsl #0x10
movge r4, r0, asr #0x10
mov r0, r4
bl IsInvalidMoveset
cmp r0, #0
ldrne r0, _02013984 ; =_02098D64
ldmneia sp!, {r4, pc}
ldr r1, _02013988 ; =DUNGEON_MOVE_TABLES
mov r0, #0xc
ldr r1, [r1]
smlabb r0, r4, r0, r1
ldr r0, [r0, #8]
ldmia sp!, {r4, pc}
.align 2, 0
_02013984: .word _02098D64
_02013988: .word DUNGEON_MOVE_TABLES
arm_func_end GetMovesetEggPtr
arm_func_start GetMoveAiWeight
GetMoveAiWeight: ; 0x0201398C
ldr r1, _020139A8 ; =DUNGEON_MOVE_TABLES
ldrh r2, [r0, #4]
ldr r1, [r1, #8]
mov r0, #0x1a
mla r0, r2, r0, r1
ldrb r0, [r0, #9]
bx lr
.align 2, 0
_020139A8: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveAiWeight
arm_func_start GetMoveNbStrikes
GetMoveNbStrikes: ; 0x020139AC
ldr r1, _020139C8 ; =DUNGEON_MOVE_TABLES
ldrh r2, [r0, #4]
ldr r1, [r1, #8]
mov r0, #0x1a
mla r0, r2, r0, r1
ldrb r0, [r0, #0xd]
bx lr
.align 2, 0
_020139C8: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveNbStrikes
arm_func_start GetMoveBasePower
GetMoveBasePower: ; 0x020139CC
ldrh r2, [r0, #4]
mov r0, #0x1a
ldr r1, _020139E8 ; =DUNGEON_MOVE_TABLES
mul r0, r2, r0
ldr r1, [r1, #8]
ldrsh r0, [r1, r0]
bx lr
.align 2, 0
_020139E8: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveBasePower
arm_func_start GetMoveBasePowerGround
GetMoveBasePowerGround: ; 0x020139EC
ldrh r2, [r0, #2]
mov r0, #0x1a
ldr r1, _02013A08 ; =DUNGEON_MOVE_TABLES
mul r0, r2, r0
ldr r1, [r1, #8]
ldrsh r0, [r1, r0]
bx lr
.align 2, 0
_02013A08: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveBasePowerGround
arm_func_start GetMoveAccuracyOrAiChance
GetMoveAccuracyOrAiChance: ; 0x02013A0C
ldr r2, _02013A2C ; =DUNGEON_MOVE_TABLES
ldrh r3, [r0, #4]
ldr r2, [r2, #8]
mov r0, #0x1a
mla r0, r3, r0, r2
add r0, r0, r1
ldrb r0, [r0, #0xa]
bx lr
.align 2, 0
_02013A2C: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveAccuracyOrAiChance
arm_func_start GetMoveBasePp
GetMoveBasePp: ; 0x02013A30
ldr r1, _02013A4C ; =DUNGEON_MOVE_TABLES
ldrh r2, [r0, #4]
ldr r1, [r1, #8]
mov r0, #0x1a
mla r0, r2, r0, r1
ldrb r0, [r0, #8]
bx lr
.align 2, 0
_02013A4C: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveBasePp

228
asm/main_020137E8.s Normal file
View File

@@ -0,0 +1,228 @@
.include "asm/macros.inc"
.include "main_020137E8.inc"
.text
arm_func_start InitMoveCheckId
InitMoveCheckId: ; 0x020137E8
stmdb sp!, {r4, lr}
mov r4, r0
cmp r1, #0
moveq r0, #0
streqb r0, [r4]
ldmeqia sp!, {r4, pc}
mov r2, #5
strb r2, [r4]
mov r2, #0
strh r2, [r4, #2]
strh r1, [r4, #4]
bl GetMaxPp
strb r0, [r4, #6]
mov r0, #0
strb r0, [r4, #7]
ldmia sp!, {r4, pc}
arm_func_end InitMoveCheckId
arm_func_start GetInfoMoveGround
GetInfoMoveGround: ; 0x02013828
mov r2, #5
strb r2, [r0]
strh r1, [r0, #2]
mov r1, #0
strb r1, [r0, #4]
bx lr
arm_func_end GetInfoMoveGround
arm_func_start GetMoveTargetAndRange
GetMoveTargetAndRange: ; 0x02013840
ldr r2, _02013860 ; =DUNGEON_MOVE_TABLES
ldrh r3, [r0, #4]
ldr r2, [r2, #8]
mov r0, #0x1a
mla r0, r3, r0, r2
add r0, r0, r1, lsl #1
ldrsh r0, [r0, #4]
bx lr
.align 2, 0
_02013860: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveTargetAndRange
arm_func_start GetMoveType
GetMoveType: ; 0x02013864
ldr r1, _02013880 ; =DUNGEON_MOVE_TABLES
ldrh r2, [r0, #4]
ldr r1, [r1, #8]
mov r0, #0x1a
mla r0, r2, r0, r1
ldrb r0, [r0, #2]
bx lr
.align 2, 0
_02013880: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveType
arm_func_start GetMovesetLevelUpPtr
GetMovesetLevelUpPtr: ; 0x02013884
stmdb sp!, {r4, lr}
mov r4, r0
cmp r4, #0x258
subge r0, r4, #0x258
movge r0, r0, lsl #0x10
movge r4, r0, asr #0x10
mov r0, r4
bl IsInvalidMoveset
cmp r0, #0
ldrne r0, _020138C4 ; =_02098D64
ldreq r1, _020138C8 ; =DUNGEON_MOVE_TABLES
moveq r0, #0xc
smulbbeq r0, r4, r0
ldreq r1, [r1]
ldreq r0, [r1, r0]
ldmia sp!, {r4, pc}
.align 2, 0
_020138C4: .word _02098D64
_020138C8: .word DUNGEON_MOVE_TABLES
arm_func_end GetMovesetLevelUpPtr
arm_func_start IsInvalidMoveset
IsInvalidMoveset: ; 0x020138CC
cmp r0, #0
ble _020138E0
ldr r1, _020138F0 ; =0x00000229
cmp r0, r1
blt _020138E8
_020138E0:
mov r0, #1
bx lr
_020138E8:
mov r0, #0
bx lr
.align 2, 0
_020138F0: .word 0x00000229
arm_func_end IsInvalidMoveset
arm_func_start GetMovesetHmTmPtr
GetMovesetHmTmPtr: ; 0x020138F4
stmdb sp!, {r4, lr}
mov r4, r0
cmp r4, #0x258
subge r0, r4, #0x258
movge r0, r0, lsl #0x10
movge r4, r0, asr #0x10
mov r0, r4
bl IsInvalidMoveset
cmp r0, #0
ldrne r0, _02013938 ; =_02098D64
ldmneia sp!, {r4, pc}
ldr r1, _0201393C ; =DUNGEON_MOVE_TABLES
mov r0, #0xc
ldr r1, [r1]
smlabb r0, r4, r0, r1
ldr r0, [r0, #4]
ldmia sp!, {r4, pc}
.align 2, 0
_02013938: .word _02098D64
_0201393C: .word DUNGEON_MOVE_TABLES
arm_func_end GetMovesetHmTmPtr
arm_func_start GetMovesetEggPtr
GetMovesetEggPtr: ; 0x02013940
stmdb sp!, {r4, lr}
mov r4, r0
cmp r4, #0x258
subge r0, r4, #0x258
movge r0, r0, lsl #0x10
movge r4, r0, asr #0x10
mov r0, r4
bl IsInvalidMoveset
cmp r0, #0
ldrne r0, _02013984 ; =_02098D64
ldmneia sp!, {r4, pc}
ldr r1, _02013988 ; =DUNGEON_MOVE_TABLES
mov r0, #0xc
ldr r1, [r1]
smlabb r0, r4, r0, r1
ldr r0, [r0, #8]
ldmia sp!, {r4, pc}
.align 2, 0
_02013984: .word _02098D64
_02013988: .word DUNGEON_MOVE_TABLES
arm_func_end GetMovesetEggPtr
arm_func_start GetMoveAiWeight
GetMoveAiWeight: ; 0x0201398C
ldr r1, _020139A8 ; =DUNGEON_MOVE_TABLES
ldrh r2, [r0, #4]
ldr r1, [r1, #8]
mov r0, #0x1a
mla r0, r2, r0, r1
ldrb r0, [r0, #9]
bx lr
.align 2, 0
_020139A8: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveAiWeight
arm_func_start GetMoveNbStrikes
GetMoveNbStrikes: ; 0x020139AC
ldr r1, _020139C8 ; =DUNGEON_MOVE_TABLES
ldrh r2, [r0, #4]
ldr r1, [r1, #8]
mov r0, #0x1a
mla r0, r2, r0, r1
ldrb r0, [r0, #0xd]
bx lr
.align 2, 0
_020139C8: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveNbStrikes
arm_func_start GetMoveBasePower
GetMoveBasePower: ; 0x020139CC
ldrh r2, [r0, #4]
mov r0, #0x1a
ldr r1, _020139E8 ; =DUNGEON_MOVE_TABLES
mul r0, r2, r0
ldr r1, [r1, #8]
ldrsh r0, [r1, r0]
bx lr
.align 2, 0
_020139E8: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveBasePower
arm_func_start GetMoveBasePowerGround
GetMoveBasePowerGround: ; 0x020139EC
ldrh r2, [r0, #2]
mov r0, #0x1a
ldr r1, _02013A08 ; =DUNGEON_MOVE_TABLES
mul r0, r2, r0
ldr r1, [r1, #8]
ldrsh r0, [r1, r0]
bx lr
.align 2, 0
_02013A08: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveBasePowerGround
arm_func_start GetMoveAccuracyOrAiChance
GetMoveAccuracyOrAiChance: ; 0x02013A0C
ldr r2, _02013A2C ; =DUNGEON_MOVE_TABLES
ldrh r3, [r0, #4]
ldr r2, [r2, #8]
mov r0, #0x1a
mla r0, r3, r0, r2
add r0, r0, r1
ldrb r0, [r0, #0xa]
bx lr
.align 2, 0
_02013A2C: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveAccuracyOrAiChance
arm_func_start GetMoveBasePp
GetMoveBasePp: ; 0x02013A30
ldr r1, _02013A4C ; =DUNGEON_MOVE_TABLES
ldrh r2, [r0, #4]
ldr r1, [r1, #8]
mov r0, #0x1a
mla r0, r2, r0, r1
ldrb r0, [r0, #8]
bx lr
.align 2, 0
_02013A4C: .word DUNGEON_MOVE_TABLES
arm_func_end GetMoveBasePp

View File

@@ -2440,510 +2440,3 @@ _022F90F8:
add sp, sp, #0xc
ldmia sp!, {r4, r5, pc}
arm_func_end ov29_022F9058
arm_func_start UpdateAiTargetPos
UpdateAiTargetPos: ; 0x022F9144
stmdb sp!, {r3, lr}
ldr lr, [r0, #0xb4]
ldr r2, _022F918C ; =DIRECTIONS_XY
ldrb r3, [lr, #0x4c]
ldrsh ip, [r0, #4]
add r1, lr, #0x100
mov r3, r3, lsl #2
ldrsh r3, [r2, r3]
ldr r2, _022F9190 ; =DIRECTIONS_XY + 2
add r3, ip, r3
#ifdef JAPAN
strh r3, [r1, #0x7a]
#else
strh r3, [r1, #0x7e]
#endif
ldrb r3, [lr, #0x4c]
ldrsh ip, [r0, #6]
mov r0, r3, lsl #2
ldrsh r0, [r2, r0]
add r0, ip, r0
#ifdef JAPAN
strh r0, [r1, #0x7c]
#else
strh r0, [r1, #0x80]
#endif
ldmia sp!, {r3, pc}
.align 2, 0
_022F918C: .word DIRECTIONS_XY
_022F9190: .word DIRECTIONS_XY + 2
arm_func_end UpdateAiTargetPos
arm_func_start SetMonsterTypeAndAbility
SetMonsterTypeAndAbility: ; 0x022F9194
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r1, #0x25
ldr r4, [r5, #0xb4]
bl AbilityIsActiveVeneer
cmp r0, #0
beq _022F91D8
mov r0, r5
bl GetApparentWeather
mov r1, #6
mul r2, r0, r1
ldr r1, _022F9234 ; =CASTFORM_WEATHER_ATTRIBUTE_TABLE
mov r0, #0
ldrb r1, [r1, r2]
strb r1, [r4, #0x5e]
strb r0, [r4, #0x5f]
b _022F91FC
_022F91D8:
mov r5, #0
_022F91DC:
ldrsh r0, [r4, #2]
mov r1, r5
bl GetType
add r1, r4, r5
add r5, r5, #1
strb r0, [r1, #0x5e]
cmp r5, #2
blt _022F91DC
_022F91FC:
mov r5, #0
_022F9200:
ldrsh r0, [r4, #2]
mov r1, r5
bl GetAbility
add r1, r4, r5
add r5, r5, #1
strb r0, [r1, #0x60]
cmp r5, #2
blt _022F9200
ldr r0, _022F9238 ; =DUNGEON_PTR
mov r1, #1
ldr r0, [r0]
strb r1, [r0, #0xe]
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_022F9234: .word CASTFORM_WEATHER_ATTRIBUTE_TABLE
_022F9238: .word DUNGEON_PTR
arm_func_end SetMonsterTypeAndAbility
arm_func_start TryActivateSlowStart
TryActivateSlowStart: ; 0x022F923C
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sb, #0
mov r7, #1
ldr r5, _022F92D0 ; =0x00000C17
ldr r4, _022F92D4 ; =DUNGEON_PTR
mov r6, sb
mov fp, r7
mov r8, #0x5e
_022F925C:
ldr r0, [r4]
add r0, r0, sb, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr sl, [r0, #0xad4]
#else
ldr sl, [r0, #0xb78]
#endif
mov r0, sl
bl EntityIsValid__022F7364
cmp r0, #0
beq _022F92C0
mov r0, sl
mov r1, r8
bl AbilityIsActiveVeneer
cmp r0, #0
beq _022F92C0
mov r0, r7
mov r1, sl
mov r2, r6
bl SubstitutePlaceholderStringTags
mov r0, sl
mov r1, r5
bl LogMessageByIdWithPopupCheckUser
mov r0, sl
mov r1, sl
mov r2, fp
mov r3, #0
bl LowerSpeed
_022F92C0:
add sb, sb, #1
cmp sb, #0x14
blt _022F925C
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
#ifdef JAPAN
_022F92D0: .word 0x00000956
#else
_022F92D0: .word 0x00000C17
#endif
_022F92D4: .word DUNGEON_PTR
arm_func_end TryActivateSlowStart
arm_func_start TryActivateArtificialWeatherAbilities
TryActivateArtificialWeatherAbilities: ; 0x022F92D8
#ifdef JAPAN
#define TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET -0xA4
#else
#define TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bl IsSecretFloor
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r4, _022F9404 ; =DUNGEON_PTR
ldr r1, [r4]
ldrb r0, [r1, #0xe]
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov sb, #0
strb sb, [r1, #0xe]
ldr r0, [r4]
mov r5, #1
add r0, r0, #0xc000
strb sb, [r0, #0xd5d + TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET]
mov r6, r5
mov r7, r5
mov r8, r5
mov fp, r5
_022F9324:
ldr r0, [r4]
add r0, r0, sb, lsl #2
add r0, r0, #0x12000
ldr sl, [r0, #0xb78 + TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET]
mov r0, sl
bl EntityIsValid__022F7364
cmp r0, #0
beq _022F93F4
mov r0, sl
mov r1, #4
bl AbilityIsActiveVeneer
cmp r0, #0
ldrne r0, [r4]
#ifdef JAPAN
addne r0, r0, #0xcc00
strneh r8, [r0, #0xae]
#else
addne r0, r0, #0xcd00
strneh r8, [r0, #0x52]
#endif
bne _022F93C0
mov r0, sl
mov r1, #0x1c
bl AbilityIsActiveVeneer
cmp r0, #0
ldrne r0, [r4]
#ifdef JAPAN
addne r0, r0, #0xcc00
strneh r7, [r0, #0xaa]
#else
addne r0, r0, #0xcd00
strneh r7, [r0, #0x4e]
#endif
bne _022F93C0
mov r0, sl
mov r1, #0x31
bl AbilityIsActiveVeneer
cmp r0, #0
ldrne r0, [r4]
#ifdef JAPAN
addne r0, r0, #0xcc00
strneh r6, [r0, #0xa8]
#else
addne r0, r0, #0xcd00
strneh r6, [r0, #0x4c]
#endif
bne _022F93C0
mov r0, sl
mov r1, #0x78
bl AbilityIsActiveVeneer
cmp r0, #0
ldrne r0, [r4]
#ifdef JAPAN
addne r0, r0, #0xcc00
strneh r5, [r0, #0xb0]
#else
addne r0, r0, #0xcd00
strneh r5, [r0, #0x54]
#endif
_022F93C0:
mov r0, sl
mov r1, #8
bl AbilityIsActiveVeneer
cmp r0, #0
bne _022F93E8
mov r0, sl
mov r1, #0x2d
bl AbilityIsActiveVeneer
cmp r0, #0
beq _022F93F4
_022F93E8:
ldr r0, [r4]
add r0, r0, #0xc000
strb fp, [r0, #0xd5d + TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET]
_022F93F4:
add sb, sb, #1
cmp sb, #0x14
blt _022F9324
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022F9404: .word DUNGEON_PTR
arm_func_end TryActivateArtificialWeatherAbilities
arm_func_start GetMonsterApparentId
GetMonsterApparentId: ; 0x022F9408
stmdb sp!, {r4, lr}
movs r4, r0
beq _022F94A8
ldr r2, _022F94E0 ; =0x0000017B
cmp r1, r2
blt _022F945C
add r2, r2, #3
cmp r1, r2
bgt _022F945C
mov r1, #0x25
bl AbilityIsActiveVeneer
cmp r0, #0
ldreq r0, _022F94E0 ; =0x0000017B
ldmeqia sp!, {r4, pc}
mov r0, r4
bl GetApparentWeather
mov r1, #6
mul r1, r0, r1
ldr r0, _022F94E4 ; =ov10_022C4C6E
ldrsh r0, [r0, r1]
ldmia sp!, {r4, pc}
_022F945C:
ldr r0, _022F94E8 ; =0x000003D3
cmp r1, r0
blt _022F94D8
add r0, r0, #3
cmp r1, r0
bgt _022F94D8
mov r0, r4
mov r1, #0x25
bl AbilityIsActiveVeneer
cmp r0, #0
ldreq r0, _022F94E8 ; =0x000003D3
ldmeqia sp!, {r4, pc}
mov r0, r4
bl GetApparentWeather
mov r1, #6
mul r1, r0, r1
ldr r0, _022F94EC ; =ov10_022C4C70
ldrsh r0, [r0, r1]
ldmia sp!, {r4, pc}
_022F94A8:
ldr r0, _022F94E0 ; =0x0000017B
cmp r1, r0
blt _022F94C0
add r2, r0, #3
cmp r1, r2
ldmleia sp!, {r4, pc}
_022F94C0:
ldr r0, _022F94E8 ; =0x000003D3
cmp r1, r0
blt _022F94D8
add r2, r0, #3
cmp r1, r2
ldmleia sp!, {r4, pc}
_022F94D8:
mov r0, r1
ldmia sp!, {r4, pc}
.align 2, 0
_022F94E0: .word 0x0000017B
_022F94E4: .word ov10_022C4C6E
_022F94E8: .word 0x000003D3
_022F94EC: .word ov10_022C4C70
arm_func_end GetMonsterApparentId
arm_func_start TryActivateTraceAndColorChange
TryActivateTraceAndColorChange: ; 0x022F94F0
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov sb, r0
mov r8, r1
mov r7, r2
bl EntityIsValid__022F7364
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, r8
bl EntityIsValid__022F7364
cmp r0, #0
cmpne sb, r8
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r5, [sb, #0xb4]
ldr r6, [r8, #0xb4]
ldrb r0, [r5, #0xbc]
bl IsSecretBazaarNpcBehavior
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrb r0, [r6, #0x60]
mvn r4, #0
cmp r0, #0x28
ldrb r0, [r6, #0x61]
moveq r4, #0
cmp r0, #0x28
moveq r4, #1
cmp r4, #0
blt _022F95FC
ldrb r1, [r5, #0x60]
ldrb r2, [r5, #0x61]
mov r0, #0
cmp r1, #0
strneb r1, [sp]
addne r0, r0, #1
cmp r2, #0
addne r1, sp, #0
strneb r2, [r1, r0]
addne r0, r0, #1
cmp r0, #0
mvneq r0, #0
beq _022F95A0
cmp r0, #1
moveq r0, #0
beq _022F95A0
bl DungeonRandInt
_022F95A0:
cmp r0, #0
blt _022F95FC
add r1, sp, #0
ldrb r3, [r1, r0]
ldr r1, _022F96BC ; =DUNGEON_PTR
add r2, r6, r4
strb r3, [r2, #0x60]
mov r0, #0
ldr r3, [r1]
mov r4, #1
mov r1, r8
mov r2, r0
strb r4, [r3, #0xe]
bl SubstitutePlaceholderStringTags
ldr r2, _022F96C0 ; =0x00000C18
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
mov r0, r8
bl ov29_022E6260
mov r0, sb
mov r1, r8
bl TryEndStatusWithAbility
_022F95FC:
#ifdef JAPAN
ldrb r0, [r6, #0x160]
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r3, #0
#else
ldrb r0, [r6, #0x164]
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r4, #0
#endif
mov r0, sb
mov r1, r8
mov r2, #0x3b
#ifdef JAPAN
strb r3, [r6, #0x160]
#else
mov r3, #1
strb r4, [r6, #0x164]
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, sb
mov r1, r7
bl GetMoveTypeForMonster
ldrh r1, [r7, #4]
mov r4, r0
cmp r1, #0x1f
bne _022F9658
mov r0, sb
bl GetApparentWeather
ldr r1, _022F96C4 ; =WEATHER_BALL_TYPE_TABLE
ldrb r4, [r1, r0]
_022F9658:
cmp r4, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, r8
mov r1, r4
bl MonsterIsType
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, #0
strb r4, [r6, #0x5e]
strb r0, [r6, #0x5f]
mov r3, #1
mov r1, r8
mov r2, r0
strb r3, [r6, #0xff]
bl SubstitutePlaceholderStringTags
ldrb r1, [r6, #0x5e]
mov r0, #0
bl ov29_0234B084
ldr r2, _022F96C8 ; =0x00000C19
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
mov r0, r8
bl ov29_022E647C
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_022F96BC: .word DUNGEON_PTR
#ifdef JAPAN
_022F96C0: .word 0x00000957
_022F96C4: .word WEATHER_BALL_TYPE_TABLE
_022F96C8: .word 0x00000958
#else
_022F96C0: .word 0x00000C18
_022F96C4: .word WEATHER_BALL_TYPE_TABLE
_022F96C8: .word 0x00000C19
#endif
arm_func_end TryActivateTraceAndColorChange
arm_func_start DefenderAbilityIsActive__022F96CC
DefenderAbilityIsActive__022F96CC: ; 0x022F96CC
#ifdef JAPAN
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, r1
mov r4, r2
cmp r6, r5
#else
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
mov r5, r2
mov r4, r3
cmp r7, r6
#endif
beq _022F9710
bl IsMonster__022F9720
cmp r0, #0
#ifdef JAPAN
beq _022F9710
mov r0, r6
#else
cmpne r4, #0
beq _022F9710
mov r0, r7
#endif
mov r1, #0x53
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, #0
#ifdef JAPAN
ldmneia sp!, {r4, r5, r6, pc}
_022F9710:
mov r0, r5
mov r1, r4
bl AbilityIsActiveVeneer
ldmia sp!, {r4, r5, r6, pc}
#else
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
_022F9710:
mov r0, r6
mov r1, r5
bl AbilityIsActiveVeneer
ldmia sp!, {r3, r4, r5, r6, r7, pc}
#endif
arm_func_end DefenderAbilityIsActive__022F96CC

478
asm/overlay_29_022F9194.s Normal file
View File

@@ -0,0 +1,478 @@
.include "asm/macros.inc"
.include "overlay_29_022F9194.inc"
.text
arm_func_start SetMonsterTypeAndAbility
SetMonsterTypeAndAbility: ; 0x022F9194
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r1, #0x25
ldr r4, [r5, #0xb4]
bl AbilityIsActiveVeneer
cmp r0, #0
beq _022F91D8
mov r0, r5
bl GetApparentWeather
mov r1, #6
mul r2, r0, r1
ldr r1, _022F9234 ; =CASTFORM_WEATHER_ATTRIBUTE_TABLE
mov r0, #0
ldrb r1, [r1, r2]
strb r1, [r4, #0x5e]
strb r0, [r4, #0x5f]
b _022F91FC
_022F91D8:
mov r5, #0
_022F91DC:
ldrsh r0, [r4, #2]
mov r1, r5
bl GetType
add r1, r4, r5
add r5, r5, #1
strb r0, [r1, #0x5e]
cmp r5, #2
blt _022F91DC
_022F91FC:
mov r5, #0
_022F9200:
ldrsh r0, [r4, #2]
mov r1, r5
bl GetAbility
add r1, r4, r5
add r5, r5, #1
strb r0, [r1, #0x60]
cmp r5, #2
blt _022F9200
ldr r0, _022F9238 ; =DUNGEON_PTR
mov r1, #1
ldr r0, [r0]
strb r1, [r0, #0xe]
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_022F9234: .word CASTFORM_WEATHER_ATTRIBUTE_TABLE
_022F9238: .word DUNGEON_PTR
arm_func_end SetMonsterTypeAndAbility
arm_func_start TryActivateSlowStart
TryActivateSlowStart: ; 0x022F923C
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sb, #0
mov r7, #1
ldr r5, _022F92D0 ; =0x00000C17
ldr r4, _022F92D4 ; =DUNGEON_PTR
mov r6, sb
mov fp, r7
mov r8, #0x5e
_022F925C:
ldr r0, [r4]
add r0, r0, sb, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr sl, [r0, #0xad4]
#else
ldr sl, [r0, #0xb78]
#endif
mov r0, sl
bl EntityIsValid__022F7364
cmp r0, #0
beq _022F92C0
mov r0, sl
mov r1, r8
bl AbilityIsActiveVeneer
cmp r0, #0
beq _022F92C0
mov r0, r7
mov r1, sl
mov r2, r6
bl SubstitutePlaceholderStringTags
mov r0, sl
mov r1, r5
bl LogMessageByIdWithPopupCheckUser
mov r0, sl
mov r1, sl
mov r2, fp
mov r3, #0
bl LowerSpeed
_022F92C0:
add sb, sb, #1
cmp sb, #0x14
blt _022F925C
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
#ifdef JAPAN
_022F92D0: .word 0x00000956
#else
_022F92D0: .word 0x00000C17
#endif
_022F92D4: .word DUNGEON_PTR
arm_func_end TryActivateSlowStart
arm_func_start TryActivateArtificialWeatherAbilities
TryActivateArtificialWeatherAbilities: ; 0x022F92D8
#ifdef JAPAN
#define TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET -0xA4
#else
#define TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bl IsSecretFloor
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r4, _022F9404 ; =DUNGEON_PTR
ldr r1, [r4]
ldrb r0, [r1, #0xe]
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov sb, #0
strb sb, [r1, #0xe]
ldr r0, [r4]
mov r5, #1
add r0, r0, #0xc000
strb sb, [r0, #0xd5d + TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET]
mov r6, r5
mov r7, r5
mov r8, r5
mov fp, r5
_022F9324:
ldr r0, [r4]
add r0, r0, sb, lsl #2
add r0, r0, #0x12000
ldr sl, [r0, #0xb78 + TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET]
mov r0, sl
bl EntityIsValid__022F7364
cmp r0, #0
beq _022F93F4
mov r0, sl
mov r1, #4
bl AbilityIsActiveVeneer
cmp r0, #0
ldrne r0, [r4]
#ifdef JAPAN
addne r0, r0, #0xcc00
strneh r8, [r0, #0xae]
#else
addne r0, r0, #0xcd00
strneh r8, [r0, #0x52]
#endif
bne _022F93C0
mov r0, sl
mov r1, #0x1c
bl AbilityIsActiveVeneer
cmp r0, #0
ldrne r0, [r4]
#ifdef JAPAN
addne r0, r0, #0xcc00
strneh r7, [r0, #0xaa]
#else
addne r0, r0, #0xcd00
strneh r7, [r0, #0x4e]
#endif
bne _022F93C0
mov r0, sl
mov r1, #0x31
bl AbilityIsActiveVeneer
cmp r0, #0
ldrne r0, [r4]
#ifdef JAPAN
addne r0, r0, #0xcc00
strneh r6, [r0, #0xa8]
#else
addne r0, r0, #0xcd00
strneh r6, [r0, #0x4c]
#endif
bne _022F93C0
mov r0, sl
mov r1, #0x78
bl AbilityIsActiveVeneer
cmp r0, #0
ldrne r0, [r4]
#ifdef JAPAN
addne r0, r0, #0xcc00
strneh r5, [r0, #0xb0]
#else
addne r0, r0, #0xcd00
strneh r5, [r0, #0x54]
#endif
_022F93C0:
mov r0, sl
mov r1, #8
bl AbilityIsActiveVeneer
cmp r0, #0
bne _022F93E8
mov r0, sl
mov r1, #0x2d
bl AbilityIsActiveVeneer
cmp r0, #0
beq _022F93F4
_022F93E8:
ldr r0, [r4]
add r0, r0, #0xc000
strb fp, [r0, #0xd5d + TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET]
_022F93F4:
add sb, sb, #1
cmp sb, #0x14
blt _022F9324
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022F9404: .word DUNGEON_PTR
arm_func_end TryActivateArtificialWeatherAbilities
arm_func_start GetMonsterApparentId
GetMonsterApparentId: ; 0x022F9408
stmdb sp!, {r4, lr}
movs r4, r0
beq _022F94A8
ldr r2, _022F94E0 ; =0x0000017B
cmp r1, r2
blt _022F945C
add r2, r2, #3
cmp r1, r2
bgt _022F945C
mov r1, #0x25
bl AbilityIsActiveVeneer
cmp r0, #0
ldreq r0, _022F94E0 ; =0x0000017B
ldmeqia sp!, {r4, pc}
mov r0, r4
bl GetApparentWeather
mov r1, #6
mul r1, r0, r1
ldr r0, _022F94E4 ; =ov10_022C4C6E
ldrsh r0, [r0, r1]
ldmia sp!, {r4, pc}
_022F945C:
ldr r0, _022F94E8 ; =0x000003D3
cmp r1, r0
blt _022F94D8
add r0, r0, #3
cmp r1, r0
bgt _022F94D8
mov r0, r4
mov r1, #0x25
bl AbilityIsActiveVeneer
cmp r0, #0
ldreq r0, _022F94E8 ; =0x000003D3
ldmeqia sp!, {r4, pc}
mov r0, r4
bl GetApparentWeather
mov r1, #6
mul r1, r0, r1
ldr r0, _022F94EC ; =ov10_022C4C70
ldrsh r0, [r0, r1]
ldmia sp!, {r4, pc}
_022F94A8:
ldr r0, _022F94E0 ; =0x0000017B
cmp r1, r0
blt _022F94C0
add r2, r0, #3
cmp r1, r2
ldmleia sp!, {r4, pc}
_022F94C0:
ldr r0, _022F94E8 ; =0x000003D3
cmp r1, r0
blt _022F94D8
add r2, r0, #3
cmp r1, r2
ldmleia sp!, {r4, pc}
_022F94D8:
mov r0, r1
ldmia sp!, {r4, pc}
.align 2, 0
_022F94E0: .word 0x0000017B
_022F94E4: .word ov10_022C4C6E
_022F94E8: .word 0x000003D3
_022F94EC: .word ov10_022C4C70
arm_func_end GetMonsterApparentId
arm_func_start TryActivateTraceAndColorChange
TryActivateTraceAndColorChange: ; 0x022F94F0
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov sb, r0
mov r8, r1
mov r7, r2
bl EntityIsValid__022F7364
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, r8
bl EntityIsValid__022F7364
cmp r0, #0
cmpne sb, r8
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r5, [sb, #0xb4]
ldr r6, [r8, #0xb4]
ldrb r0, [r5, #0xbc]
bl IsSecretBazaarNpcBehavior
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrb r0, [r6, #0x60]
mvn r4, #0
cmp r0, #0x28
ldrb r0, [r6, #0x61]
moveq r4, #0
cmp r0, #0x28
moveq r4, #1
cmp r4, #0
blt _022F95FC
ldrb r1, [r5, #0x60]
ldrb r2, [r5, #0x61]
mov r0, #0
cmp r1, #0
strneb r1, [sp]
addne r0, r0, #1
cmp r2, #0
addne r1, sp, #0
strneb r2, [r1, r0]
addne r0, r0, #1
cmp r0, #0
mvneq r0, #0
beq _022F95A0
cmp r0, #1
moveq r0, #0
beq _022F95A0
bl DungeonRandInt
_022F95A0:
cmp r0, #0
blt _022F95FC
add r1, sp, #0
ldrb r3, [r1, r0]
ldr r1, _022F96BC ; =DUNGEON_PTR
add r2, r6, r4
strb r3, [r2, #0x60]
mov r0, #0
ldr r3, [r1]
mov r4, #1
mov r1, r8
mov r2, r0
strb r4, [r3, #0xe]
bl SubstitutePlaceholderStringTags
ldr r2, _022F96C0 ; =0x00000C18
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
mov r0, r8
bl ov29_022E6260
mov r0, sb
mov r1, r8
bl TryEndStatusWithAbility
_022F95FC:
#ifdef JAPAN
ldrb r0, [r6, #0x160]
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r3, #0
#else
ldrb r0, [r6, #0x164]
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r4, #0
#endif
mov r0, sb
mov r1, r8
mov r2, #0x3b
#ifdef JAPAN
strb r3, [r6, #0x160]
#else
mov r3, #1
strb r4, [r6, #0x164]
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, sb
mov r1, r7
bl GetMoveTypeForMonster
ldrh r1, [r7, #4]
mov r4, r0
cmp r1, #0x1f
bne _022F9658
mov r0, sb
bl GetApparentWeather
ldr r1, _022F96C4 ; =WEATHER_BALL_TYPE_TABLE
ldrb r4, [r1, r0]
_022F9658:
cmp r4, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, r8
mov r1, r4
bl MonsterIsType
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, #0
strb r4, [r6, #0x5e]
strb r0, [r6, #0x5f]
mov r3, #1
mov r1, r8
mov r2, r0
strb r3, [r6, #0xff]
bl SubstitutePlaceholderStringTags
ldrb r1, [r6, #0x5e]
mov r0, #0
bl ov29_0234B084
ldr r2, _022F96C8 ; =0x00000C19
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
mov r0, r8
bl ov29_022E647C
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_022F96BC: .word DUNGEON_PTR
#ifdef JAPAN
_022F96C0: .word 0x00000957
_022F96C4: .word WEATHER_BALL_TYPE_TABLE
_022F96C8: .word 0x00000958
#else
_022F96C0: .word 0x00000C18
_022F96C4: .word WEATHER_BALL_TYPE_TABLE
_022F96C8: .word 0x00000C19
#endif
arm_func_end TryActivateTraceAndColorChange
arm_func_start DefenderAbilityIsActive__022F96CC
DefenderAbilityIsActive__022F96CC: ; 0x022F96CC
#ifdef JAPAN
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, r1
mov r4, r2
cmp r6, r5
#else
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
mov r5, r2
mov r4, r3
cmp r7, r6
#endif
beq _022F9710
bl IsMonster__022F9720
cmp r0, #0
#ifdef JAPAN
beq _022F9710
mov r0, r6
#else
cmpne r4, #0
beq _022F9710
mov r0, r7
#endif
mov r1, #0x53
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, #0
#ifdef JAPAN
ldmneia sp!, {r4, r5, r6, pc}
_022F9710:
mov r0, r5
mov r1, r4
bl AbilityIsActiveVeneer
ldmia sp!, {r4, r5, r6, pc}
#else
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
_022F9710:
mov r0, r6
mov r1, r5
bl AbilityIsActiveVeneer
ldmia sp!, {r3, r4, r5, r6, r7, pc}
#endif
arm_func_end DefenderAbilityIsActive__022F96CC

9
include/dungeon_misc.h Normal file
View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_DUNGEON_MISC_H
#define PMDSKY_DUNGEON_MISC_H
#include "dungeon_mode.h"
// Given a monster, updates its target_pos field based on its current position and the direction in which it plans to attack.
void UpdateAiTargetPos(struct entity *monster);
#endif //PMDSKY_DUNGEON_MISC_H

View File

@@ -37,8 +37,6 @@ struct move {
// bool8 f_disabled : 1; // For Torment (and maybe others)
// u8 flags_unk6 : 2;
u8 field_0x1;
// 0x2: flags2: 2-byte bitfield
u16 flags2;
// bool8 f_sealed : 1; // Sealed by a Seal Trap. Also prevents AI from using this move

12
include/moves_1.h Normal file
View File

@@ -0,0 +1,12 @@
#ifndef PMDSKY_MOVES_1_H
#define PMDSKY_MOVES_1_H
#include "move.h"
// Initializes a move info struct.
// This sets f_exists and f_enabled_for_ai on the flags, the ID to the given ID, the PP to the max PP for the move ID, and the ginseng boost to 0.
// move: pointer to move to initialize
// move_id: move ID
void InitMove(struct move *move, enum move_id move_id);
#endif //PMDSKY_MOVES_1_H

View File

@@ -33,6 +33,8 @@ Static main
Object asm/main_0200EB30.o
Object src/main_0200ECFC.o
Object asm/main_0200ED1C.o
Object src/moves_1.o
Object asm/main_020137E8.o
Object src/moves.o
Object asm/main_02013AD0.o
Object src/main_020251AC.o
@@ -317,6 +319,8 @@ Overlay OVY_29
Object asm/overlay_29_022F62CC.o
Object src/overlay_29_022F7364.o
Object asm/overlay_29_022F7388.o
Object src/dungeon_misc.o
Object asm/overlay_29_022F9194.o
Object src/overlay_29_022F9720.o
Object asm/overlay_29_022F9744.o
Object src/overlay_29_022FB538.o

View File

@@ -6,12 +6,14 @@
#include "dungeon_ai_targeting.h"
#include "dungeon_capabilities_3.h"
#include "dungeon_capabilities_4.h"
#include "dungeon_misc.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 "moves_1.h"
#define REGULAR_ATTACK_INDEX 4
@@ -21,8 +23,6 @@ const s16 AI_REGULAR_ATTACK_WEIGHTS[5] = { 100, 20, 30, 40, 50 };
extern struct dungeon *DUNGEON_PTR[];
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);
extern bool8 ov29_02338350(struct entity *monster);
extern bool8 TargetRegularAttack(struct entity *pokemon, u32 *target_dir, bool8 skip_petrified);

10
src/dungeon_misc.c Normal file
View File

@@ -0,0 +1,10 @@
#include "dungeon_misc.h"
#include "dungeon_util.h"
#include "dungeon_util_static.h"
void UpdateAiTargetPos(struct entity *monster)
{
struct monster *pokemon_info = GetEntInfo(monster);
pokemon_info->target_pos.x = monster->pos.x + DIRECTIONS_XY[pokemon_info->action.direction].x;
pokemon_info->target_pos.y = monster->pos.y + DIRECTIONS_XY[pokemon_info->action.direction].y;
}

12
src/moves_1.c Normal file
View File

@@ -0,0 +1,12 @@
#include "moves_1.h"
#include "moves.h"
void InitMove(struct move *move, enum move_id move_id)
{
move->flags0 = MOVE_FLAG_ENABLED_FOR_AI | MOVE_FLAG_EXISTS;
move->flags2 = 0;
move->id = move_id;
move->pp = GetMaxPp(move);
move->ginseng = 0;
}