mirror of
https://github.com/pret/pmd-sky.git
synced 2026-08-27 21:25:43 -05:00
Merge pull request #141 from AnonymousRandomPerson/main
Some checks are pending
build / build (push) Waiting to run
Some checks are pending
build / build (push) Waiting to run
Decomped more AI functions
This commit is contained in:
@@ -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
|
||||
|
||||
4
asm/include/main_020137E8.inc
Normal file
4
asm/include/main_020137E8.inc
Normal file
@@ -0,0 +1,4 @@
|
||||
#pragma once
|
||||
.public DUNGEON_MOVE_TABLES
|
||||
.public GetMaxPp
|
||||
.public _02098D64
|
||||
@@ -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
|
||||
|
||||
25
asm/include/overlay_29_022F9194.inc
Normal file
25
asm/include/overlay_29_022F9194.inc
Normal 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
|
||||
@@ -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
228
asm/main_020137E8.s
Normal 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
|
||||
@@ -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
478
asm/overlay_29_022F9194.s
Normal 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
9
include/dungeon_misc.h
Normal 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
|
||||
@@ -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
12
include/moves_1.h
Normal 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
|
||||
4
main.lsf
4
main.lsf
@@ -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
|
||||
|
||||
@@ -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
10
src/dungeon_misc.c
Normal 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
12
src/moves_1.c
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user