Merge pull request #143 from AnonymousRandomPerson/main
Some checks failed
build / build (push) Has been cancelled

Decomped more AI functions
This commit is contained in:
AnonymousRandomPerson
2025-06-23 22:25:26 -05:00
committed by GitHub
100 changed files with 29046 additions and 28700 deletions

View File

@@ -9,6 +9,6 @@
.public GetTreatmentBetweenMonsters
.public InitMove
.public IsMonster__0231A9D4
.public ov29_0231985C
.public ResetAiCanAttackInDirection
.public ov29_0231B008
.public TryAddTargetToAiTargetList

View File

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

View File

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

View File

@@ -1,477 +1,3 @@
#pragma once
.public _02098EA8
.public _02098EE0
.public _02098F60
.public _02098F78
.public _02098F90
.public _02098FA8
.public _02098FBC
.public _02098FC0
.public _02098FC8
.public _0209901C
.public _02099020
.public _02099024
.public _02099028
.public _0209902C
.public _02099080
.public _02099110
.public _02099124
.public _02099138
.public _02099140
.public _0209915C
.public _0209916C
.public _0209918C
.public _020991C8
.public _020991F0
.public _02099210
.public _02099224
.public _02099240
.public _0209939C
.public _020993B4
.public _020993D0
.public _020993E8
.public _02099404
.public _02099404_EU
.public _02099418
.public _02099434
.public _02099448
.public _02099464
.public _02099470
.public _0209947C
.public _0209948C
.public _0209949C
.public _020994B0
.public _020994C0
.public _020994D8
.public _02099500
.public _02099514
.public _02099528
.public _0209953C
.public _02099554
.public _0209956C
.public _02099584
.public _0209958C
.public _02099594
.public _020995BC
.public _020995D0
.public _020995E8
.public _020995F8
.public _0209960C
.public _02099620
.public _02099634
.public _02099644
.public _02099650
.public _02099660
.public _02099684
.public _020996A4
.public _020996C0
.public _020996D8
.public _020996E0
.public _02099714
.public _0209971C
.public _02099720
.public _020997A4
.public _020997B4
.public _020997E4
.public _0209990C
.public _0209995C
.public _020999AC
.public _020999B0
.public _020999C8
.public _020999CC
.public _020999D0
.public _020999D4
.public _020999D8
.public _020999E4
.public _020999F0
.public _020999F4
.public _020999F8
.public _020999FC
.public _02099A00
.public _02099A04
.public _02099A08
.public _02099A10
.public _02099A14
.public _02099A18
.public _02099A1C
.public _02099A24
.public _02099A28
.public _02099A2C
.public _02099A30
.public _02099A34
.public _02099A38
.public _02099A40
.public _02099A44
.public _02099A5C
.public _02099A64
.public _02099A70
.public _02099A74
.public _02099A7C
.public _02099A84
.public _02099A8C
.public _02099A98
.public _02099AA0
.public _02099AA4
.public _02099AAC
.public _02099AB8
.public _02099AC0
.public _02099AC8
.public _02099AD0
.public _02099AD4
.public _02099AE0
.public _02099AF0
.public _02099AF8
.public _02099B04
.public _02099B10
.public _02099B18
.public _02099B24
.public _02099B2C
.public _02099B34
.public _02099B40
.public _02099B48
.public _02099B50
.public _02099B58
.public _02099B60
.public _02099B6C
.public _02099B74
.public _02099B7C
.public _02099B8C
.public _02099B9C
.public _02099BA8
.public _02099BB0
.public _02099BBC
.public _02099BC4
.public _02099BCC
.public _02099BD4
.public _02099BDC
.public _02099BE4
.public _02099BEC
.public _02099BF0_EU
.public _02099BF4
.public _02099BFC
.public _02099C04_EU
.public _02099C0C
.public _02099C14
.public _02099C1C
.public _02099C24
.public _02099C2C
.public _02099C34
.public _02099C44
.public _02099C4C
.public _02099C54
.public _02099C5C
.public _02099C68
.public _02099C70
.public _02099C78
.public _02099C84
.public _02099CA0
.public _02099CA4
.public _02099CAC
.public _02099CB8
.public _02099CC4
.public _02099D0C
.public _02099D10
.public _02099D1C
.public _02099D2C
.public _02099D3C
.public _02099D50
.public _02099D54
.public _02099D64
.public _02099D74
.public _02099D84
.public _02099D8C
.public _02099D90
.public _02099DA0
.public _02099DB0
.public _02099DC0
.public _02099DD0
.public _02099DEC
.public _02099E08
.public _02099E18
.public _02099E20
.public _02099E40
.public _02099E64_EU
.public _0209A230_EU
.public _0209A2D4_EU
.public _0209A2F4_EU
.public _020AF6E8
.public _020AF6F0
.public _020AF6F8
.public _020AF700
.public _020AF710
.public _020AF714
.public _020AF720
.public _020AF721
.public _020AF722
.public _020AF760
.public _020AF76C
.public _020AF77C
.public _020AF780
.public _020AF784
.public _020AF798
.public _020AF7AC
.public _020AF7C0
.public _020AF7E4
.public _020AF890
.public _020AF96C
.public _020AFA48
.public _020AFB24
.public _020AFB28
.public _020AFB4C
.public _020AFB6C
.public _020AFC28
.public _020AFC30
.public _020AFC3C
.public _020AFC4C
.public _020AFC50
.public _020AFC64
.public _020AFC6C
.public _020AFC70
.public _020AFCE4
.public _020B05AC_EU
.public _020B05B0_EU
.public _020B05BC_EU
.public _020B05C0_EU
.public _020B05D4_EU
.public _020B05D8_EU
.public _022A4BE8
.public _022A4BEC
.public _022A4C00
.public _022A4C28
.public _022A4E50
.public _022A4E58
.public _022A4E7C
.public _022A4E84
.public _022A4E8C
.public _022A4EA4
.public _022A4EAC
.public _022A4EB4
.public _022A4EC4
.public _022A4ECC
.public _022A4EF4
.public _022A4EFC
.public _022A4F38
.public _022A5038
.public _022A5048
.public _022A504C
.public _022A5068
.public _022A5268
.public _022A5468
.public _022A5969
.public _022A596A
.public _022A5970
.public _s32_div_f
.public _u32_div_f
.public ArrayCopy32
.public ArrayFill32
.public AUDIO_COMMANDS_BUFFER
.public BagHasExclusiveItemTypeForMonster
.public CopyAndInterleave
.public CopyAndInterleave0
.public CopyBitsFrom
.public CopyBitsTo
.public CopyStringFromId
.public Debug_FatalError
.public Debug_GetDebugFlag
.public Debug_Print
.public Debug_Print0
.public DirectoryFileMngr_GetDirectoryFileSize
.public DirectoryFileMngr_LoadDirectoryFile
.public DirectoryFileMngr_OpenDirectoryFile
.public DseBgm_IsPlaying
.public DseBgm_Load
.public DseBgm_SetFades
.public DseBgm_SetSignalCallback
.public DseBgm_Stop
.public DseBgm_Unload
.public DseDriver_ConfigureHeap
.public DseDriver_Init
.public DseDriver_LoadDefaultSettings
.public DseSe_GetUsedBankIDs
.public DseSe_HasPlayingInstances
.public DseSe_Load
.public DseSe_Play
.public DseSe_Stop
.public DseSe_StopAll
.public DseSe_Unload
.public DseSequence_GetParameter
.public DseSwd_IsBankLoading
.public DseSwd_LoadBank
.public DseSwd_LoadMainBank
.public DseSwd_LoadWaves
.public DseSwd_Unload
.public DUNGEON_MOVE_TABLES
.public DungeonGoesUp
.public DungeonSwapIdxToId
.public EnqueueRender3dTexture
.public ENTITIES
.public FileClose
.public FileGetSize
.public FileRom_HandleOpen
.public FileRom_HandleRead
.public FileRom_InitDataTransfer
.public FileRom_StopDataTransfer
.public FileRom_Veneer_FileInit
.public G3i_LookAt_
.public G3i_OrthoW_
.public GetAbility
.public GetAbilityString
.public GetActiveRosterIndex
.public GetActiveTeamMember
.public GetActorMatchingStorageId
.public GetCurrentBagCapacity
.public GetDsFirmwareUserSettingsVeneer
.public GetExecuteSpecialEpisodeType
.public GetGameMode
.public GetInfoMoveGround
.public GetIqSkillStringId
.public GetItemMoveId16
.public GetItemNameFormatted
.public GetMainTeamName
.public GetMonsterGender
.public GetMonsterGenderVeneer
.public GetMoveName
.public GetNameString
.public GetNbFloors
.public GetNbFloorsPlusOne
.public GetPerformanceFlagWithChecks
.public GetStringFromFileVeneer
.public GetTeamMember
.public GetTypeStringId
.public GX_BeginLoadBGExtPltt
.public GX_BeginLoadOBJExtPltt
.public GX_BeginLoadTex
.public GX_BeginLoadTexPltt
.public GX_EndLoadBGExtPltt
.public GX_EndLoadOBJExtPltt
.public GX_EndLoadTex
.public GX_EndLoadTexPltt
.public GX_LoadTex
.public GX_LoadTexPltt
.public GXS_BeginLoadBGExtPltt
.public GXS_BeginLoadOBJExtPltt
.public GXS_EndLoadBGExtPltt
.public GXS_EndLoadOBJExtPltt
.public IqSkillFlagTest
.public LANGUAGE_INFO_DATA
.public LoadFileFromRom
.public LoadScriptVariableValue
.public LoadScriptVariableValueAtIndex
.public LoadStringFile
.public MemAlloc
.public MemArenaAlloc
.public Memcpy32
.public MemFree
.public MemLocateSet
.public MemLocateUnset
.public memset
.public MemZero
.public MemZero32
.public MOVE_ACCURACY_STARS_TABLE
.public MOVE_POWER_STARS_TABLE
.public MultiplyByFixedPoint
.public NewRender3dQuadrilateral
.public NewRender3dRectangle
.public NewRender3dTexture
.public NewRender3dTiling
.public ov10_022BDADC
.public ov10_022C2528
.public PointsToZero
.public PUNCH_MOVE_LIST
.public Rand16Bit
.public RECOIL_MOVE_LIST
.public Render3dProcessQueue
.public RENDER_3D
.public RENDER_3D_FUNCTIONS_64
.public ResumeBgm
.public Rgb8ToRgb5
.public sprintf
.public strcat
.public strcmp
.public strcpy
.public StringFromId
.public strlen
.public strncmp
.public StrncpySimpleNoPadSafe
.public strstr
.public sub_01FF8F04
.public sub_02002778
.public sub_020027E8
.public sub_02002A9C
.public sub_02002C40
.public sub_02002CAC
.public sub_02002CB4
.public sub_02002D14
.public sub_02002E98
.public sub_02002ECC
.public sub_02002F34
.public sub_02002F7C
.public sub_02002F98
.public sub_02002FB4
.public sub_0200302C
.public sub_020030FC
.public sub_02003AB0
.public sub_02006220
.public sub_020063A0
.public sub_020063D4
.public sub_0200A124
.public sub_0200A174
.public sub_0200A180
.public sub_0200A184
.public sub_0200A29C
.public sub_0200A2B4
.public sub_0200A478
.public sub_0200A504
.public sub_0200A510
.public sub_0200A590
.public sub_0200A5B0
.public sub_0200A5F8
.public sub_0200A618
.public sub_0200B330
.public sub_0200B3C0
.public sub_0200B3D4
.public sub_0200B3FC
.public sub_0200B508
.public sub_0200B570
.public sub_0200B57C
.public sub_0200B630
.public sub_0200B67C
.public sub_0200B6F0
.public sub_0200B768
.public sub_0200D310
.public sub_02025480
.public sub_020257FC
.public sub_0204BBB0
.public sub_0204E530
.public sub_0204F6F8
.public sub_0204F77C
.public sub_02053D1C
.public sub_020564B0
.public sub_02058C30
.public sub_0206549C
.public sub_02065B14
.public sub_02065BF0
.public sub_02065CD8
.public sub_0206A90C
.public sub_0206AA5C
.public sub_0206AB98
.public sub_0206ABB0
.public sub_0206AD4C
.public sub_0206ADA0
.public sub_0206ADB8
.public sub_0206BA5C
.public sub_0206C36C
.public sub_0206C39C
.public sub_0206C620
.public sub_0206C6BC
.public sub_0206C754
.public sub_0206F5C8
.public sub_0207A2DC
.public sub_0207C9C4
.public sub_0207C9E4
.public sub_0207CC10
.public TEAM_MEMBER_TABLE_PTR
.public UnloadFile
.public vsprintf
.public WAN_TABLE
.public ZInit8
.public _s32_div_f

View File

@@ -0,0 +1,479 @@
#pragma once
.public AUDIO_COMMANDS_BUFFER
.public ArrayCopy32
.public ArrayFill32
.public BagHasExclusiveItemTypeForMonster
.public CopyAndInterleave
.public CopyAndInterleave0
.public CopyBitsFrom
.public CopyBitsTo
.public CopyStringFromId
.public DUNGEON_MOVE_TABLES
.public Debug_FatalError
.public Debug_GetDebugFlag
.public Debug_Print
.public Debug_Print0
.public DirectoryFileMngr_GetDirectoryFileSize
.public DirectoryFileMngr_LoadDirectoryFile
.public DirectoryFileMngr_OpenDirectoryFile
.public DseBgm_IsPlaying
.public DseBgm_Load
.public DseBgm_SetFades
.public DseBgm_SetSignalCallback
.public DseBgm_Stop
.public DseBgm_Unload
.public DseDriver_ConfigureHeap
.public DseDriver_Init
.public DseDriver_LoadDefaultSettings
.public DseSe_GetUsedBankIDs
.public DseSe_HasPlayingInstances
.public DseSe_Load
.public DseSe_Play
.public DseSe_Stop
.public DseSe_StopAll
.public DseSe_Unload
.public DseSequence_GetParameter
.public DseSwd_IsBankLoading
.public DseSwd_LoadBank
.public DseSwd_LoadMainBank
.public DseSwd_LoadWaves
.public DseSwd_Unload
.public DungeonGoesUp
.public DungeonSwapIdxToId
.public ENTITIES
.public EnqueueRender3dTexture
.public FileClose
.public FileGetSize
.public FileRom_HandleOpen
.public FileRom_HandleRead
.public FileRom_InitDataTransfer
.public FileRom_StopDataTransfer
.public FileRom_Veneer_FileInit
.public G3i_LookAt_
.public G3i_OrthoW_
.public GXS_BeginLoadBGExtPltt
.public GXS_BeginLoadOBJExtPltt
.public GXS_EndLoadBGExtPltt
.public GXS_EndLoadOBJExtPltt
.public GX_BeginLoadBGExtPltt
.public GX_BeginLoadOBJExtPltt
.public GX_BeginLoadTex
.public GX_BeginLoadTexPltt
.public GX_EndLoadBGExtPltt
.public GX_EndLoadOBJExtPltt
.public GX_EndLoadTex
.public GX_EndLoadTexPltt
.public GX_LoadTex
.public GX_LoadTexPltt
.public GetAbility
.public GetAbilityString
.public GetActiveRosterIndex
.public GetActiveTeamMember
.public GetActorMatchingStorageId
.public GetCurrentBagCapacity
.public GetDsFirmwareUserSettingsVeneer
.public GetExecuteSpecialEpisodeType
.public GetGameMode
.public GetInfoMoveGround
.public GetIqSkillStringId
.public GetItemMoveId16
.public GetItemNameFormatted
.public GetMainTeamName
.public GetMonsterGender
.public GetMonsterGenderVeneer
.public GetMoveActualAccuracy
.public GetMoveBasePowerFromId
.public GetMoveName
.public GetNameString
.public GetNbFloors
.public GetNbFloorsPlusOne
.public GetPerformanceFlagWithChecks
.public GetStringFromFileVeneer
.public GetTeamMember
.public GetTypeStringId
.public IqSkillFlagTest
.public LANGUAGE_INFO_DATA
.public LoadFileFromRom
.public LoadScriptVariableValue
.public LoadScriptVariableValueAtIndex
.public LoadStringFile
.public MOVE_ACCURACY_STARS_TABLE
.public MOVE_POWER_STARS_TABLE
.public MemAlloc
.public MemArenaAlloc
.public MemFree
.public MemLocateSet
.public MemLocateUnset
.public MemZero
.public MemZero32
.public Memcpy32
.public MultiplyByFixedPoint
.public NewRender3dQuadrilateral
.public NewRender3dRectangle
.public NewRender3dTexture
.public NewRender3dTiling
.public PUNCH_MOVE_LIST
.public PointsToZero
.public RECOIL_MOVE_LIST
.public RENDER_3D
.public RENDER_3D_FUNCTIONS_64
.public Rand16Bit
.public Render3dProcessQueue
.public ResumeBgm
.public Rgb8ToRgb5
.public StringFromId
.public StrncpySimpleNoPadSafe
.public TEAM_MEMBER_TABLE_PTR
.public UnloadFile
.public WAN_TABLE
.public ZInit8
.public _02098EA8
.public _02098EE0
.public _02098F60
.public _02098F78
.public _02098F90
.public _02098FA8
.public _02098FBC
.public _02098FC0
.public _02098FC8
.public _0209901C
.public _02099020
.public _02099024
.public _02099028
.public _0209902C
.public _02099080
.public _02099110
.public _02099124
.public _02099138
.public _02099140
.public _0209915C
.public _0209916C
.public _0209918C
.public _020991C8
.public _020991F0
.public _02099210
.public _02099224
.public _02099240
.public _0209939C
.public _020993B4
.public _020993D0
.public _020993E8
.public _02099404
.public _02099404_EU
.public _02099418
.public _02099434
.public _02099448
.public _02099464
.public _02099470
.public _0209947C
.public _0209948C
.public _0209949C
.public _020994B0
.public _020994C0
.public _020994D8
.public _02099500
.public _02099514
.public _02099528
.public _0209953C
.public _02099554
.public _0209956C
.public _02099584
.public _0209958C
.public _02099594
.public _020995BC
.public _020995D0
.public _020995E8
.public _020995F8
.public _0209960C
.public _02099620
.public _02099634
.public _02099644
.public _02099650
.public _02099660
.public _02099684
.public _020996A4
.public _020996C0
.public _020996D8
.public _020996E0
.public _02099714
.public _0209971C
.public _02099720
.public _020997A4
.public _020997B4
.public _020997E4
.public _0209990C
.public _0209995C
.public _020999AC
.public _020999B0
.public _020999C8
.public _020999CC
.public _020999D0
.public _020999D4
.public _020999D8
.public _020999E4
.public _020999F0
.public _020999F4
.public _020999F8
.public _020999FC
.public _02099A00
.public _02099A04
.public _02099A08
.public _02099A10
.public _02099A14
.public _02099A18
.public _02099A1C
.public _02099A24
.public _02099A28
.public _02099A2C
.public _02099A30
.public _02099A34
.public _02099A38
.public _02099A40
.public _02099A44
.public _02099A5C
.public _02099A64
.public _02099A70
.public _02099A74
.public _02099A7C
.public _02099A84
.public _02099A8C
.public _02099A98
.public _02099AA0
.public _02099AA4
.public _02099AAC
.public _02099AB8
.public _02099AC0
.public _02099AC8
.public _02099AD0
.public _02099AD4
.public _02099AE0
.public _02099AF0
.public _02099AF8
.public _02099B04
.public _02099B10
.public _02099B18
.public _02099B24
.public _02099B2C
.public _02099B34
.public _02099B40
.public _02099B48
.public _02099B50
.public _02099B58
.public _02099B60
.public _02099B6C
.public _02099B74
.public _02099B7C
.public _02099B8C
.public _02099B9C
.public _02099BA8
.public _02099BB0
.public _02099BBC
.public _02099BC4
.public _02099BCC
.public _02099BD4
.public _02099BDC
.public _02099BE4
.public _02099BEC
.public _02099BF0_EU
.public _02099BF4
.public _02099BFC
.public _02099C04_EU
.public _02099C0C
.public _02099C14
.public _02099C1C
.public _02099C24
.public _02099C2C
.public _02099C34
.public _02099C44
.public _02099C4C
.public _02099C54
.public _02099C5C
.public _02099C68
.public _02099C70
.public _02099C78
.public _02099C84
.public _02099CA0
.public _02099CA4
.public _02099CAC
.public _02099CB8
.public _02099CC4
.public _02099D0C
.public _02099D10
.public _02099D1C
.public _02099D2C
.public _02099D3C
.public _02099D50
.public _02099D54
.public _02099D64
.public _02099D74
.public _02099D84
.public _02099D8C
.public _02099D90
.public _02099DA0
.public _02099DB0
.public _02099DC0
.public _02099DD0
.public _02099DEC
.public _02099E08
.public _02099E18
.public _02099E20
.public _02099E40
.public _02099E64_EU
.public _0209A230_EU
.public _0209A2D4_EU
.public _0209A2F4_EU
.public _020AF6E8
.public _020AF6F0
.public _020AF6F8
.public _020AF700
.public _020AF710
.public _020AF714
.public _020AF720
.public _020AF721
.public _020AF722
.public _020AF760
.public _020AF76C
.public _020AF77C
.public _020AF780
.public _020AF784
.public _020AF798
.public _020AF7AC
.public _020AF7C0
.public _020AF7E4
.public _020AF890
.public _020AF96C
.public _020AFA48
.public _020AFB24
.public _020AFB28
.public _020AFB4C
.public _020AFB6C
.public _020AFC28
.public _020AFC30
.public _020AFC3C
.public _020AFC4C
.public _020AFC50
.public _020AFC64
.public _020AFC6C
.public _020AFC70
.public _020AFCE4
.public _020B05AC_EU
.public _020B05B0_EU
.public _020B05BC_EU
.public _020B05C0_EU
.public _020B05D4_EU
.public _020B05D8_EU
.public _022A4BE8
.public _022A4BEC
.public _022A4C00
.public _022A4C28
.public _022A4E50
.public _022A4E58
.public _022A4E7C
.public _022A4E84
.public _022A4E8C
.public _022A4EA4
.public _022A4EAC
.public _022A4EB4
.public _022A4EC4
.public _022A4ECC
.public _022A4EF4
.public _022A4EFC
.public _022A4F38
.public _022A5038
.public _022A5048
.public _022A504C
.public _022A5068
.public _022A5268
.public _022A5468
.public _022A5969
.public _022A596A
.public _022A5970
.public _s32_div_f
.public _u32_div_f
.public memset
.public ov10_022BDADC
.public ov10_022C2528
.public sprintf
.public strcat
.public strcmp
.public strcpy
.public strlen
.public strncmp
.public strstr
.public sub_01FF8F04
.public sub_02002778
.public sub_020027E8
.public sub_02002A9C
.public sub_02002C40
.public sub_02002CAC
.public sub_02002CB4
.public sub_02002D14
.public sub_02002E98
.public sub_02002ECC
.public sub_02002F34
.public sub_02002F7C
.public sub_02002F98
.public sub_02002FB4
.public sub_0200302C
.public sub_020030FC
.public sub_02003AB0
.public sub_02006220
.public sub_020063A0
.public sub_020063D4
.public sub_0200A124
.public sub_0200A174
.public sub_0200A180
.public sub_0200A184
.public sub_0200A29C
.public sub_0200A2B4
.public sub_0200A478
.public sub_0200A504
.public sub_0200A510
.public sub_0200A590
.public sub_0200A5B0
.public sub_0200A5F8
.public sub_0200A618
.public sub_0200B330
.public sub_0200B3C0
.public sub_0200B3D4
.public sub_0200B3FC
.public sub_0200B508
.public sub_0200B570
.public sub_0200B57C
.public sub_0200B630
.public sub_0200B67C
.public sub_0200B6F0
.public sub_0200B768
.public sub_0200D310
.public sub_02025480
.public sub_020257FC
.public sub_0204BBB0
.public sub_0204E530
.public sub_0204F6F8
.public sub_0204F77C
.public sub_02053D1C
.public sub_020564B0
.public sub_02058C30
.public sub_0206549C
.public sub_02065B14
.public sub_02065BF0
.public sub_02065CD8
.public sub_0206A90C
.public sub_0206AA5C
.public sub_0206AB98
.public sub_0206ABB0
.public sub_0206AD4C
.public sub_0206ADA0
.public sub_0206ADB8
.public sub_0206BA5C
.public sub_0206C36C
.public sub_0206C39C
.public sub_0206C620
.public sub_0206C6BC
.public sub_0206C754
.public sub_0206F5C8
.public sub_0207A2DC
.public sub_0207C9C4
.public sub_0207C9E4
.public sub_0207CC10
.public vsprintf

View File

@@ -3,21 +3,18 @@
.public AdvanceFrame
.public AiMovement
.public AnimationDelayOrSomething
.public ApplyItemEffect
.public BAG_ITEMS_PTR_MIRROR
.public BELLY_DRAIN_IN_WALLS_INT
.public CanMonsterSpawn
.public CanMonsterUseItem
.public CeilFixedPoint
.public ChangeMonsterAnimation
.public CheckTeamMemberIdx
.public CheckVariousStatuses
.public CheckVariousStatuses2
.public Conversion2IsActive
.public DefenderAbilityIsActive__022F96CC
.public DIRECTIONS_XY
.public DiscoverMinimap
.public DUNGEON_PTR
.public DefenderAbilityIsActive__022F96CC
.public DiscoverMinimap
.public DungeonRandInt
.public EnableIqSkill
.public EndBurnClassStatus
@@ -26,48 +23,48 @@
.public EndReflectClassStatus
.public EndSleepClassStatus
.public EntityIsValid__022F7364
.public ExclusiveItemEffectFlagTest
.public ExclusiveItemEffectIsActive__022FAC98
.public GetActiveTeamMember
.public GetChebyshevDistance
.public GetConversion2ConvertToType
.public GetDirectionTowardsPosition
.public GetExclusiveItemWithEffectFromBag
.public GetFloorType
.public GetIdleAnimationId
.public GetLeader
.public GetLearnableIqSkills
.public GetMaxPp
.public GetMaxPpWrapper
.public GetMobilityType
.public GetMonsterEvoStatus
.public GetMoveType
.public GetMoveTypeForMonster
.public GetNbItemsInBag
.public GetScenarioBalance
.public GetStairsRoom
.public GetStairsSpawnPosition
.public GetTile
.public GetTileAtEntity
.public GetTileSafe
.public GetTreatmentBetweenMonsters
.public GetTypeMatchupBothTypes
.public HasHeldItem
.public HasMaxGinsengBoost99
.public IqSkillIsEnabled
.public IsCurrentFixedRoomBossFight
.public IsFullFloorFixedRoom
.public IsMonsterIdInNormalRange
.public IsMonsterSleeping
.public IsOneHitKoMove
.public ItemZInit
.public LogMessageByIdWithPopup
.public LogMessageByIdWithPopupCheckUser
.public LogMessageByIdWithPopupCheckUserTarget
.public PointCameraToMonster
.public RestoreAllMovePP
.public SECONDARY_TERRAIN_TYPES
.public SetActionPassTurnOrWalk
.public ShouldDisplayEntityWrapper
.public ShowPpRestoreEffect
.public SubFixedPoint
.public SubstitutePlaceholderStringTags
.public TryInflictBurnStatus
.public TryInflictPausedStatus
.public UpdateCamera
.public UpdateMinimap
.public UpdateStatusIconFlags
.public ov29_022E0A04
.public ov29_022E4160
.public ov29_022E68BC
.public ov29_022E68D8
.public ov29_022E6928
.public ov29_022E8104
.public ov29_022E81F8
.public ov29_022EA370
@@ -79,31 +76,12 @@
.public ov29_02304A48
.public ov29_02307CE0
.public ov29_02307DD0
.public ov29_0230F9A4
.public ov29_02344B44
.public ov29_0234B034
.public ov29_0234B084
.public ov29_0234B09C
.public PointCameraToMonster
.public RandInt
.public RemoveEquivItem
.public RestoreAllMovePP
.public SECONDARY_TERRAIN_TYPES
.public SetActionPassTurnOrWalk
.public ShouldDisplayEntityWrapper
.public ShouldTryEatItem
.public ShowPpRestoreEffect
.public sub_0201405C
.public sub_02017C50
.public sub_0204AEF0
.public sub_02050FF8
.public sub_02052E2C
.public sub_02056228
.public SubFixedPoint
.public SubstitutePlaceholderStringTags
.public TryIncreaseHp
.public TryInflictBurnStatus
.public TryInflictPausedStatus
.public UpdateCamera
.public UpdateMinimap
.public UpdateStatusIconFlags

View File

@@ -0,0 +1,32 @@
#pragma once
.public ApplyItemEffect
.public BAG_ITEMS_PTR_MIRROR
.public CanMonsterUseItem
.public DUNGEON_PTR
.public EntityIsValid__022F7364
.public ExclusiveItemEffectIsActive__022FAC98
.public GetFloorType
.public GetLeader
.public GetMoveType
.public GetNbItemsInBag
.public GetScenarioBalance
.public GetStairsSpawnPosition
.public GetTreatmentBetweenMonsters
.public GetTypeMatchupBothTypes
.public HasMaxGinsengBoost99
.public IqSkillIsEnabled
.public IsCurrentFixedRoomBossFight
.public IsOneHitKoMove
.public ItemZInit
.public LogMessageByIdWithPopupCheckUser
.public LogMessageByIdWithPopupCheckUserTarget
.public RandInt
.public RemoveEquivItem
.public ShouldTryEatItem
.public SubstitutePlaceholderStringTags
.public TryIncreaseHp
.public ov29_022E6928
.public ov29_022EA370
.public ov29_0230F9A4
.public ov29_02344B44
.public ov29_0234B09C

View File

@@ -1,21 +1,12 @@
#pragma once
.public AbilityIsActive
.public DUNGEON_PTR
.public EntityIsValid__023000E4
.public EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST
.public EXCL_ITEM_EFFECTS_WEATHER_MOVE_SPEED_BOOST
.public ExclusiveItemEffectFlagTest
.public ExclusiveItemEffectIsActive__022FFF28
.public GetApparentWeather
.public GetExclusiveItemWithEffectFromBag
.public GetMobilityTypeCheckSlipAndFloating
.public GetSpeedStatus
.public GetTile
.public IqSkillIsEnabled
.public IsCurrentTilesetBackground
.public ItemIsActive__022FF898
.public LogMessageByIdWithPopupCheckUser
.public MonsterIsType
.public ov29_022E655C
.public ov29_02344B44
.public SubstitutePlaceholderStringTags
.public UpdateStateFlags

View File

@@ -0,0 +1,13 @@
#pragma once
.public AbilityIsActive
.public CalcSpeedStage
.public EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST
.public EntityIsValid__023000E4
.public ExclusiveItemEffectIsActive__022FFF28
.public GetApparentWeather
.public GetExclusiveItemWithEffectFromBag
.public LogMessageByIdWithPopupCheckUser
.public SubstitutePlaceholderStringTags
.public UpdateStateFlags
.public ov29_022E655C
.public ov29_02344B44

View File

@@ -1,7 +1,7 @@
#pragma once
.public AbilityIsActive
.public DefenderAbilityIsActive__02301A0C
.public DUNGEON_PTR
.public DefenderAbilityIsActive__02301A0C
.public EntityIsValid__023000E4
.public GravityIsActive
.public ov29_022FAFD4

View File

@@ -0,0 +1,2 @@
#pragma once
.public GravityIsActive

View File

@@ -1,2 +0,0 @@
#pragma once
.public ExclusiveItemEffectFlagTest

View File

@@ -1,8 +1,4 @@
#pragma once
.public DIRECTIONS_XY
.public DUNGEON_PTR
.public EntityIsValid__0230F008
.public ExclusiveItemEffectFlagTest
.public GetTile
.public IsMonster__0230F980
.public ItemIsActive__0230F810
.public ExclusiveItemEffectIsActive__0230F8AC

View File

@@ -0,0 +1,6 @@
#pragma once
.public DIRECTIONS_XY
.public EntityIsValid__0230F008
.public GetTile
.public IsMonster__0230F980
.public ItemIsActive__0230F810

View File

@@ -18,7 +18,7 @@
.public EndSureShotClassStatus
.public EntityIsValid__02311010
.public EntityIsValid__023118B4
.public ExclusiveItemEffectFlagTest
.public ExclusiveItemEffectIsActive__02311064
.public GetApparentWeather
.public GetRegenSpeed
.public ICE_BODY_BONUS_REGEN
@@ -26,12 +26,12 @@
.public IsFloorOver
.public ItemIsActive__02311034
.public LogMessageByIdWithPopupCheckUser
.public ov10_022C4674
.public ov10_022C46F8
.public ov29_0234B294
.public ov29_02353318
.public RAIN_ABILITY_BONUS_REGEN
.public SubstitutePlaceholderStringTags
.public TickStatusTurnCounter
.public UpdateStatusIconFlags
.public WISH_BONUS_REGEN
.public ov10_022C4674
.public ov10_022C46F8
.public ov29_0234B294
.public ov29_02353318

View File

@@ -1,19 +1,16 @@
#pragma once
.public AbilityIsActiveVeneer
.public AllocateTemp1024ByteBufferFromPool
.public CalcSpeedStage
.public CalcSpeedStageWrapper
.public CalcStatusDuration
.public ChangeShayminForme
.public CopyStringFromId
.public DefenderAbilityIsActive__02311B94
.public DIRECTIONS_XY
.public DUNGEON_PTR
.public DungeonRandInt
.public DungeonRandOutcome__022EAB20
.public DefenderAbilityIsActive__02311B94
.public EntityIsValid__023118B4
.public EntityIsValid__02315118
.public ExclusiveItemEffectFlagTest
.public ExclusiveItemEffectIsActiveWithLogging
.public ExclusiveItemEffectIsActive__023147EC
.public GetExclusiveItemWithEffectFromBag
.public GetTile
.public GetTileAtEntity
@@ -21,11 +18,16 @@
.public IsProtectedFromSleepClassStatus
.public IsProtectedFromStatDrops
.public ItemIsActive__02311BF8
.public ItemIsActive__0231513C
.public LogMessageByIdWithPopupCheckUserTarget
.public MonsterIsType
.public MultiplyByFixedPoint
.public ov10_022C4618
.public PlayExclamationPointEffect__022E5D4C
.public SECONDARY_TERRAIN_TYPES
.public SafeguardIsActive
.public SubstitutePlaceholderStringTags
.public TryActivateQuickFeet
.public TryActivateSteadfast
.public UpdateStatusIconFlags
.public ov10_022C4728
.public ov10_022C479C
.public ov10_022C47A0
@@ -35,14 +37,11 @@
.public ov10_022C4878
.public ov10_022C4880
.public ov10_022C4884
.public ov10_022C488C
.public ov10_022C4890
.public ov10_022C4894
.public ov10_022C4898
.public ov10_022C48A0
.public ov10_022C48AC
.public ov10_022C48B8
.public ov29_022E41CC
.public ov29_022E41F0
.public ov29_022E4240
.public ov29_022E4290
@@ -53,8 +52,6 @@
.public ov29_022E4388
.public ov29_022E43D8
.public ov29_022E4428
.public ov29_022E44CC
.public ov29_022E451C
.public ov29_022E4B8C
.public ov29_022E4BA0
.public ov29_022E4BB4
@@ -72,8 +69,6 @@
.public ov29_022E5258
.public ov29_022E52F8
.public ov29_022E53EC
.public ov29_022E543C
.public ov29_022E60E4
.public ov29_0230040C
.public ov29_023018AC
.public ov29_02304A48
@@ -82,11 +77,3 @@
.public ov29_0234B034
.public ov29_0234B084
.public ov29_0234B0B4
.public ov29_02353318
.public PlayExclamationPointEffect__022E5D4C
.public SafeguardIsActive
.public SECONDARY_TERRAIN_TYPES
.public SPEED_BOOST_TURN_RANGE
.public SubstitutePlaceholderStringTags
.public TryActivateSteadfast
.public UpdateStatusIconFlags

View File

@@ -0,0 +1,29 @@
#pragma once
.public AbilityIsActiveVeneer
.public CalcSpeedStage
.public CalcSpeedStageWrapper
.public CalcStatusDuration
.public DungeonRandInt
.public DungeonRandOutcome__022EAB20
.public EntityIsValid__023118B4
.public EntityIsValid__02315118
.public ExclusiveItemEffectIsActive__023147EC
.public GetExclusiveItemWithEffectFromBag
.public IsProtectedFromNegativeStatus
.public ItemIsActive__0231513C
.public LogMessageByIdWithPopupCheckUserTarget
.public SPEED_BOOST_TURN_RANGE
.public SafeguardIsActive
.public SubstitutePlaceholderStringTags
.public UpdateStatusIconFlags
.public ov10_022C4618
.public ov10_022C488C
.public ov10_022C4890
.public ov29_022E41CC
.public ov29_022E44CC
.public ov29_022E451C
.public ov29_022E543C
.public ov29_022E60E4
.public ov29_02344B44
.public ov29_0234B084
.public ov29_02353318

View File

@@ -1,36 +1,12 @@
#pragma once
.public AbilityIsActiveVeneer
.public CAN_ATTACK_IN_DIRECTION
.public CalcStatusDuration
.public CanAttackInDirection
.public CanSeeTarget
.public DIRECTIONS_XY
.public DUNGEON_PTR
.public DungeonRandInt
.public DungeonRandOutcome__022EAB20
.public EntityIsValid__02318E4C
.public EntityIsValid__02319F8C
.public ExclusiveItemEffectFlagTest
.public GetDirectionTowardsPosition
.public GetEntityMoveTargetAndRange
.public GetMoveTargetAndRange
.public GetMoveTypeForMonster
.public GetTile
.public IqSkillIsEnabled
.public IsAffectedByTaunt
.public IsAiTargetEligible
.public IsBlinded
.public IsTargetInRange
.public ExclusiveItemEffectIsActive__023197A8
.public LogMessageByIdWithPopupCheckUserTarget
.public POTENTIAL_ATTACK_TARGET_DIRECTIONS
.public POTENTIAL_ATTACK_TARGET_WEIGHTS
.public POTENTIAL_TARGETS
.public StatusCheckerCheck
.public SubstitutePlaceholderStringTags
.public TryAddTargetToAiTargetList
.public UpdateStatusIconFlags
.public WeightMove
.public abs
.public ov10_022C4648
.public ov10_022C472C
.public ov10_022C4730

View File

@@ -0,0 +1,3 @@
#pragma once
.public EntityIsValid__02318E4C
.public ExclusiveItemEffectIsActive__023197A8

View File

@@ -0,0 +1,26 @@
#pragma once
.public AI_CAN_ATTACK_IN_DIRECTION
.public AI_POTENTIAL_ATTACK_TARGETS
.public AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
.public AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
.public CanAttackInDirection
.public CanSeeTarget
.public DIRECTIONS_XY
.public DUNGEON_PTR
.public DungeonRandInt
.public EntityIsValid__02319F8C
.public GetDirectionTowardsPosition
.public GetEntityMoveTargetAndRange
.public GetMoveTargetAndRange
.public GetMoveTypeForMonster
.public GetTile
.public IqSkillIsEnabled
.public IsAffectedByTaunt
.public IsAiTargetEligible
.public IsBlinded
.public IsTargetInRange
.public ResetAiCanAttackInDirection
.public StatusCheckerCheck
.public TryAddTargetToAiTargetList
.public WeightMoveWithIqSkills
.public abs

View File

@@ -19,7 +19,7 @@
.public ov29_0230B7D4
.public ov29_0230F8D0
.public ov29_02333FD0
.public CAN_ATTACK_IN_DIRECTION
.public POTENTIAL_ATTACK_TARGET_DIRECTIONS
.public POTENTIAL_ATTACK_TARGET_WEIGHTS
.public POTENTIAL_TARGETS
.public AI_CAN_ATTACK_IN_DIRECTION
.public AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
.public AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
.public AI_POTENTIAL_ATTACK_TARGETS

View File

@@ -1,18 +1,8 @@
#pragma once
.public AreMovesEnabled
.public DUNGEON_PTR
.public DungeonRandOutcome__022EAB20
.public EntityIsValid__02319F8C
.public ExclusiveItemEffectFlagTest
.public GetNumberOfAttacks
.public ExclusiveItemEffectIsActive__0231A87C
.public IqSkillIsEnabled
.public IsFloorOver
.public IsMonster__0231A9D4
.public LogMessageByIdWithPopupCheckUser
.public ov10_022C459C
.public ov29_022FA574
.public ov29_0232145C
.public PlayExclamationPointEffect__022E4880
.public SubstitutePlaceholderStringTags
.public TryActivateTruant
.public UpdateMovePp
.public ov10_022C459C

View File

@@ -0,0 +1,13 @@
#pragma once
.public AreMovesEnabled
.public DUNGEON_PTR
.public EntityIsValid__02319F8C
.public GetNumberOfAttacks
.public IsFloorOver
.public IsMonster__0231A9D4
.public LogMessageByIdWithPopupCheckUser
.public ShouldUsePp
.public TryActivateTruant
.public UpdateMovePp
.public ov29_022FA574
.public ov29_0232145C

View File

@@ -1,39 +1,20 @@
#pragma once
.public AiConsiderMove
.public AreOrbsAllowed
.public BoostSpeedOneStage
.public DUNGEON_PTR
.public DungeonRandInt
.public EnemyEvolution
.public EntityIsValid__02319F8C
.public EntityIsValid__0231B194
.public ExclusiveItemEffectIsActive__0231A87C
.public GetApparentWeather
.public GetItemMoveId16
.public GetItemToUse
.public GetMoveTargetAndRange
.public GetTreasureBoxChances
.public InitMove
.public IsFloorOver
.public IsMonster__0231A9D4
.public IsMoveRangeString19
.public LogMessageByIdWithPopupCheckParticipants
.public LogMessageByIdWithPopupCheckUser
.public LogMessageByIdWithPopupCheckUserTarget
.public MonsterIsType
.public NATURAL_GIFT_ITEM_TABLE
.public ov29_022E4110
.public ov29_022EB4E8
.public ov29_022FB9E0
.public ov29_022FBAB4
.public ov29_02321274
.public ov29_0232145C
.public ov29_02322374
.public ov29_0232E80C
.public ov29_02344B44
.public RemoveUsedItem
.public SetActionUseMoveAi
.public SubstitutePlaceholderStringTags
.public TryActivateTruant
.public UpdateAiTargetPos
.public WEATHER_BALL_TYPE_TABLE
.public ov29_022EB4E8
.public ov29_022FBAB4
.public ov29_02321274
.public ov29_02322374
.public ov29_02344B44

View File

@@ -0,0 +1,20 @@
#pragma once
.public BoostSpeedOneStage
.public DUNGEON_PTR
.public DungeonRandInt
.public EntityIsValid__0231B194
.public GetApparentWeather
.public GetEntityMoveTargetAndRange
.public GetTreasureBoxChances
.public IsMonster__0231A9D4
.public LogMessageByIdWithPopupCheckParticipants
.public LogMessageByIdWithPopupCheckUserTarget
.public NATURAL_GIFT_ITEM_TABLE
.public SetActionUseMoveAi
.public SubstitutePlaceholderStringTags
.public WEATHER_BALL_TYPE_TABLE
.public ov29_022E4110
.public ov29_022FB9E0
.public ov29_0232145C
.public ov29_0232E80C
.public ov29_02344B44

View File

@@ -1,40 +1,24 @@
#pragma once
.public AbilityIsActiveVeneer
.public AdvanceFrame
.public AnimationDelayOrSomething
.public DETECT_BAND_MOVE_ACCURACY_DROP
.public DIRECTIONS_XY
.public DUNGEON_PTR
.public DefenderAbilityIsActive__02322D64
.public DungeonRandInt
.public DungeonRandRange
.public EXCL_ITEM_EFFECTS_EVASION_BOOST
.public EntityIsValid__02321438
.public ExclusiveItemEffectFlagTest
.public ExclusiveItemEffectIsActive__02323918
.public ExecuteMoveEffect
.public FormatMoveStringMore
.public GetApparentWeather
.public GetBodySize
.public GetEntityMoveTargetAndRange
.public GetMonsterGenderVeneer
.public GetMoveAccuracyOrAiChance
.public GetMoveAnimation
.public GetMoveAnimationId
.public GetMoveAnimationSpeed
.public GetMoveNbStrikes
.public GetTile
.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
@@ -43,16 +27,13 @@
.public ov10_022BEB2C
.public ov10_022BF01C
.public ov10_022BFDAC
.public ov29_022E28D4
.public ov29_022E2CA0
.public ov29_022EA370
.public ov29_022F87C0
.public ov29_022F8830
.public ov29_022F88C0
.public ov29_022FAFD4
.public ov29_0230040C
.public ov29_023024E0
.public ov29_02304A48
.public ov29_023243B4
.public ov29_02324D60
.public ov29_02324E78
.public ov29_023250D4
@@ -62,8 +43,6 @@
.public ov29_0235175C
.public ov29_02352A54
.public ov29_02352A6C
.public ov29_02352A8C
.public ov29_0235370C
.public sub_020018D0
.public sub_02001980
.public sub_0201CF90

View File

@@ -0,0 +1,45 @@
#pragma once
.public AbilityIsActiveVeneer
.public AdvanceFrame
.public AnimationDelayOrSomething
.public DETECT_BAND_MOVE_ACCURACY_DROP
.public DIRECTIONS_XY
.public DUNGEON_PTR
.public DefenderAbilityIsActive__02322D64
.public DungeonRandInt
.public DungeonRandRange
.public EXCL_ITEM_EFFECTS_EVASION_BOOST
.public EntityIsValid__02321438
.public ExclusiveItemEffectIsActive__02323918
.public GetApparentWeather
.public GetEntityMoveTargetAndRange
.public GetMonsterGenderVeneer
.public GetMoveAccuracyOrAiChance
.public GetMoveAnimationSpeed
.public GetMoveNbStrikes
.public GetTreatmentBetweenMonsters
.public HasHeldItem
.public IqSkillIsEnabled
.public IsChargingTwoTurnMove
.public MALE_ACCURACY_STAGE_MULTIPLIERS
.public MALE_EVASION_STAGE_MULTIPLIERS
.public MoveIsNotPhysical
.public PlayMoveAnimation
.public PositionHasMonster
.public QUICK_DODGER_MOVE_ACCURACY_DROP
.public TwoTurnMoveForcedMiss
.public _s32_div_f
.public ov10_022BDE50
.public ov10_022BEB2C
.public ov29_022E28D4
.public ov29_022E2CA0
.public ov29_022EA370
.public ov29_022F87C0
.public ov29_022F8830
.public ov29_022F88C0
.public ov29_023024E0
.public ov29_02322F78
.public ov29_0234B4CC
.public ov29_02352A8C
.public ov29_0235370C
.public sub_020018D0

View File

@@ -1,20 +1,16 @@
#pragma once
.public ATK_STAT_IDX
.public AbilityIsActiveVeneer
.public abs
.public AnimationDelayOrSomething
.public ApplyDamageAndEffects
.public ApplyDamageAndEffectsWrapper
.public AreEntitiesAdjacent
.public ATK_STAT_IDX
.public CalcDamage
.public CanAttackInDirection
.public CanBeSnatched
.public MonsterCannotAttack
.public CanSeeTarget
.public CanHitWithRegularAttack
.public CeilFixedPoint
.public Conversion2IsActive
.public CreateMainMenus
.public DIRECTIONS_XY
.public DUNGEON_PTR
.public DefenderAbilityIsActive__02332A0C
.public DisplayAnimatedNumbers
.public DoMoveAbsorb
.public DoMoveAcupressure
@@ -57,9 +53,6 @@
.public DoMoveCrunch
.public DoMoveCrushClaw
.public DoMoveCurse
.public DoMoveDamage__02325DC0
.public DoMoveDamage__0232A500
.public DoMoveDamage__0232B8B0
.public DoMoveDamageBoostAllStats
.public DoMoveDamageBurn10
.public DoMoveDamageBurn10FlameWheel
@@ -87,6 +80,9 @@
.public DoMoveDamageStealItem
.public DoMoveDamageWeightDependent
.public DoMoveDamageWithRecoil
.public DoMoveDamage__02325DC0
.public DoMoveDamage__0232A500
.public DoMoveDamage__0232B8B0
.public DoMoveDecoy
.public DoMoveDefendOrder
.public DoMoveDefenseCurl
@@ -138,16 +134,16 @@
.public DoMoveHail
.public DoMoveHammerArm
.public DoMoveHaze
.public DoMoveHeadbutt
.public DoMoveHeadSmash
.public DoMoveHeadbutt
.public DoMoveHealBlock
.public DoMoveHealingWish
.public DoMoveHealOrder
.public DoMoveHealStatus
.public DoMoveHealingWish
.public DoMoveHeartSwap
.public DoMoveHelpingHand
.public DoMoveHiddenPower
.public DoMoveHiJumpKick
.public DoMoveHiddenPower
.public DoMoveHornDrill
.public DoMoveHpGauge
.public DoMoveHurl
@@ -190,8 +186,8 @@
.public DoMoveNastyPlot
.public DoMoveNaturalGift
.public DoMoveNaturePower
.public DoMoveNightmare
.public DoMoveNightShade
.public DoMoveNightmare
.public DoMoveNoMove
.public DoMoveOctazooka
.public DoMoveOhko
@@ -216,9 +212,9 @@
.public DoMovePowerTrick
.public DoMovePresent
.public DoMoveProtect
.public DoMovePsychUp
.public DoMovePsychoBoost
.public DoMovePsychoShift
.public DoMovePsychUp
.public DoMovePsywave
.public DoMoveRage
.public DoMoveRainDance
@@ -268,8 +264,8 @@
.public DoMoveSolarBeam
.public DoMoveSonicBoom
.public DoMoveSpikes
.public DoMoveSpite
.public DoMoveSpitUp
.public DoMoveSpite
.public DoMoveSplash
.public DoMoveSport
.public DoMoveStayAway
@@ -296,10 +292,10 @@
.public DoMoveTailGlow
.public DoMoveTakeaway
.public DoMoveTaunt
.public DoMoveThunderbolt
.public DoMoveThunderFang
.public DoMoveThundershock
.public DoMoveThunderWave
.public DoMoveThunderbolt
.public DoMoveThundershock
.public DoMoveTickle
.public DoMoveTorment
.public DoMoveToxic
@@ -321,8 +317,8 @@
.public DoMoveVitalThrow
.public DoMoveWakeUpSlap
.public DoMoveWarp
.public DoMoveWaterfall
.public DoMoveWaterSpout
.public DoMoveWaterfall
.public DoMoveWeatherBall
.public DoMoveWhirlpool
.public DoMoveWildCall
@@ -332,25 +328,20 @@
.public DoMoveWrap
.public DoMoveYawn
.public DoMoveZapCannon
.public DUNGEON_PTR
.public DungeonRandInt
.public DungeonRandOutcome__022EAB20
.public DungeonRandOutcomeUserAction
.public DungeonRandOutcome__022EAB20
.public EntityIsValid__0232E840
.public EntityIsValid__02333FAC
.public ExclusiveItemEffectFlagTest
.public ExclusiveItemEffectIsActive__023329E8
.public FOREWARN_FORCED_MISS_CHANCE
.public GetApparentWeather
.public GetDamageSourceWrapper
.public GetDirectionTowardsPosition
.public GetEntityMoveTargetAndRange
.public GetExclusiveItemWithEffectFromBag
.public GetMoveCategory
.public GetMoveCritChance
.public GetMovePower
.public GetMoveTypeForMonster
.public GetTile
.public GetTileAtEntity
.public GetTreatmentBetweenMonsters
.public HasHeldItem
.public HasLowHealth
@@ -365,66 +356,17 @@
.public IsReflectedByMagicCoat
.public IsSoundMove
.public LightningRodStormDrainCheck
.public LogMessageByIdQuietCheckUserTarget
.public LogMessageByIdWithPopupCheckParticipants
.public LogMessageByIdWithPopupCheckUserTarget
.public LowerOffensiveStat
.public MirrorMoveIsActive
.public MistIsActive
.public MonsterHasNegativeStatus
.public MonsterIsType
.public MonsterCannotAttack
.public MoveHitCheck
.public ov10_022BFD6C
.public ov10_022C4480
.public ov10_022C4504
.public ov10_022C4508
.public ov10_022C45F8
.public ov10_022C460C
.public ov10_022C4614
.public ov10_022C483C
.public ov10_022C6322
.public ov29_022E3FCC
.public ov29_022E4110
.public ov29_022E56A0
.public ov29_022E576C
.public ov29_022E6338
.public ov29_022E6388
.public ov29_022E6424
.public ov29_022EA370
.public ov29_022EDC30
.public ov29_022F9840
.public ov29_022FB1A8
.public ov29_0230040C
.public ov29_023007DC
.public ov29_02300D50
.public ov29_02300DC0
.public ov29_02301C2C
.public ov29_02304A48
.public ov29_02304C3C
.public ov29_02307BDC
.public ov29_0230D088
.public ov29_02314DC4
.public ov29_0231AD38
.public ov29_023201D0
.public ov29_0232393C
.public ov29_02324D60
.public ov29_023258EC
.public ov29_0232E744
.public ov29_0233103C
.public ov29_023315F4
.public ov29_02337E2C
.public ov29_023381C0
.public ov29_02344B44
.public ov29_0234B034
.public ov29_02353718
.public ov29_0237CA68
.public ov29_0237CA74
.public ov29_0237CA80
.public PerformDamageSequence
.public PlayMoveAnimation
.public ROLLOUT_ICE_BALL_MISSED
.public ShouldDisplayEntityWrapper
.public SPATK_STAT_IDX
.public sub_02050FF8
.public ShouldDisplayEntityWrapper
.public SubFixedPoint
.public SubstitutePlaceholderStringTags
.public TryActivateConversion2
@@ -435,3 +377,43 @@
.public TryWarp
.public TwoTurnMoveForcedMiss
.public UpdateShopkeeperModeAfterAttack
.public ov10_022BFD6C
.public ov10_022C4480
.public ov10_022C4504
.public ov10_022C4508
.public ov10_022C45F8
.public ov10_022C460C
.public ov10_022C4614
.public ov10_022C483C
.public ov29_022E3FCC
.public ov29_022E4110
.public ov29_022E56A0
.public ov29_022E6338
.public ov29_022E6388
.public ov29_022E6424
.public ov29_022EA370
.public ov29_022F9840
.public ov29_022FB1A8
.public ov29_0230040C
.public ov29_02300D50
.public ov29_02300DC0
.public ov29_02301C2C
.public ov29_02304A48
.public ov29_02304C3C
.public ov29_02307BDC
.public ov29_02314DC4
.public ov29_0231AD38
.public ov29_023201D0
.public ov29_0232393C
.public ov29_02324D60
.public ov29_023258EC
.public ov29_0232E744
.public ov29_02333044
.public ov29_023381C0
.public ov29_02344B44
.public ov29_0234B034
.public ov29_02353718
.public ov29_0237CA68
.public ov29_0237CA74
.public ov29_0237CA80
.public sub_02050FF8

View File

@@ -0,0 +1,39 @@
#pragma once
.public AbilityIsActiveVeneer
.public ApplyDamageAndEffects
.public CalcDamage
.public CanAttackInDirection
.public CanSeeTarget
.public CeilFixedPoint
.public Conversion2IsActive
.public DUNGEON_PTR
.public DisplayAnimatedNumbers
.public EntityIsValid__0232E840
.public EntityIsValid__02333FAC
.public GetApparentWeather
.public GetDamageSourceWrapper
.public GetDirectionTowardsPosition
.public GetMoveCategory
.public GetMoveCritChance
.public GetMovePower
.public GetMoveTypeForMonster
.public GetTileAtEntity
.public IsCurrentFixedRoomBossFight
.public LogMessageByIdQuietCheckUserTarget
.public LogMessageByIdWithPopupCheckUserTarget
.public MirrorMoveIsActive
.public MistIsActive
.public MonsterHasNegativeStatus
.public MonsterIsType
.public MoveHitCheck
.public ShouldDisplayEntityWrapper
.public abs
.public ov10_022C6322
.public ov29_022E576C
.public ov29_022EDC30
.public ov29_0230040C
.public ov29_023007DC
.public ov29_02304A48
.public ov29_0230D088
.public ov29_02337E2C
.public ov29_0234B034

View File

@@ -1,2 +0,0 @@
#pragma once
.public ExclusiveItemEffectFlagTest

View File

@@ -207,7 +207,7 @@ sub_01FFBF78: ; 0x01FFBF78
mov r6, r0
mov r5, r1
mov r4, #0
bl ov29_0231985C
bl ResetAiCanAttackInDirection
mov r0, r6
mov r1, r5
bl CanSeeTarget

View File

@@ -32,197 +32,3 @@ GetInfoMoveGround: ; 0x02013828
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

184
asm/main_02013864.s Normal file
View File

@@ -0,0 +1,184 @@
.include "asm/macros.inc"
.include "main_02013864.inc"
.text
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

File diff suppressed because it is too large Load Diff

22182
asm/main_02013C30.s Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1802,720 +1802,3 @@ _022FAC94: .word 0x00000962
_022FAC94: .word 0x00000C23
#endif
arm_func_end ov29_022FAA58
arm_func_start ExclusiveItemEffectIsActive__022FAC98
ExclusiveItemEffectIsActive__022FAC98: ; 0x022FAC98
stmdb sp!, {r3, lr}
ldr r2, [r0, #0xb4]
ldrb r0, [r2, #6]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, pc}
#ifdef JAPAN
add r0, r2, #0x224
#else
add r0, r2, #0x228
#endif
bl ExclusiveItemEffectFlagTest
ldmia sp!, {r3, pc}
arm_func_end ExclusiveItemEffectIsActive__022FAC98
arm_func_start ov29_022FACBC
ov29_022FACBC: ; 0x022FACBC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #4
ldr r1, _022FAD44 ; =DUNGEON_PTR
mov sb, r0
ldr r0, [r1]
mov r8, #0
#ifdef JAPAN
add r0, r0, #0x284
#else
add r0, r0, #0x328
#endif
ldr r5, _022FAD48 ; =0x000003E7
add r7, r0, #0x12800
mov r4, r8
mov r6, #0x48
_022FACE8:
ldr sl, [r7, r8, lsl #2]
mov r0, sl
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FAD28
mov r0, sl
mov r1, r6
bl ExclusiveItemEffectIsActive__022FAC98
cmp r0, #0
beq _022FAD28
mov r0, sl
mov r1, sl
mov r2, r5
mov r3, r4
str sb, [sp]
bl TryIncreaseHp
_022FAD28:
add r0, r8, #1
mov r0, r0, lsl #0x10
mov r8, r0, asr #0x10
cmp r8, #4
blt _022FACE8
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_022FAD44: .word DUNGEON_PTR
_022FAD48: .word 0x000003E7
arm_func_end ov29_022FACBC
arm_func_start ov29_022FAD4C
ov29_022FAD4C: ; 0x022FAD4C
#ifdef JAPAN
#define OV29_022FAD4C_OFFSET -0xA4
#else
#define OV29_022FAD4C_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r1, _022FAF00 ; =DUNGEON_PTR
mov r8, #0
ldr r1, [r1]
sub r3, r8, #1
add r2, r1, #0xcc00
ldrsh r4, [r2, #0xe4 + OV29_022FAD4C_OFFSET]
add r1, r1, #0x328 + OV29_022FAD4C_OFFSET
add r5, r1, #0x12800
cmp r4, r3
ldreqsh r1, [r2, #0xe6 + OV29_022FAD4C_OFFSET]
mov sb, r0
moveq r0, r3
cmpeq r1, r0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r7, #0
mov r4, #0x1a
b _022FADE4
_022FAD94:
ldr r6, [r5, r7, lsl #2]
mov r0, r6
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FADD8
ldr r0, [r6, #0xb4]
ldrb r0, [r0, #0x48]
cmp r0, #0xd9
blo _022FADC0
cmp r0, #0xe4
blo _022FADD8
_022FADC0:
mov r0, r6
mov r1, r4
bl IqSkillIsEnabled
cmp r0, #0
movne r8, #1
bne _022FADEC
_022FADD8:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
_022FADE4:
cmp r7, #4
blt _022FAD94
_022FADEC:
cmp r8, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
bl GetFloorType
cmp r0, #0
bne _022FAEEC
cmp sb, #0
bne _022FAE14
#ifdef JAPAN
mov r0, r6
mov r1, #0x960
#else
ldr r1, _022FAF04 ; =0x00000C21
mov r0, r6
#endif
bl LogMessageByIdWithPopupCheckUser
_022FAE14:
bl GetLeader
mov r5, r0
add r0, sp, #0
add r1, sp, #2
mov r4, #0
bl GetStairsSpawnPosition
ldrsh r1, [sp]
ldrsh r3, [r5, #4]
ldrsh r2, [sp, #2]
cmp r3, r1
ldreqsh r0, [r5, #6]
cmpeq r0, r2
cmp r3, r1
bne _022FAE58
ldrsh r0, [r5, #6]
cmp r0, r2
movlt r4, #0
_022FAE58:
cmp r3, r1
ldrltsh r0, [r5, #6]
cmplt r0, r2
movlt r4, #1
cmp r3, r1
bge _022FAE7C
ldrsh r0, [r5, #6]
cmp r0, r2
moveq r4, #2
_022FAE7C:
cmp r3, r1
bge _022FAE90
ldrsh r0, [r5, #6]
cmp r0, r2
movgt r4, #3
_022FAE90:
cmp r3, r1
bne _022FAEA4
ldrsh r0, [r5, #6]
cmp r0, r2
movgt r4, #4
_022FAEA4:
cmp r3, r1
ldrgtsh r0, [r5, #6]
cmpgt r0, r2
movgt r4, #5
cmp r3, r1
ble _022FAEC8
ldrsh r0, [r5, #6]
cmp r0, r2
moveq r4, #6
_022FAEC8:
cmp r3, r1
ble _022FAEDC
ldrsh r0, [r5, #6]
cmp r0, r2
movlt r4, #7
_022FAEDC:
mov r0, r5
mov r1, r4
bl ov29_022E6928
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_022FAEEC:
bl GetFloorType
cmp r0, #1
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
bl GetFloorType
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_022FAF00: .word DUNGEON_PTR
#ifndef JAPAN
_022FAF04: .word 0x00000C21
#endif
arm_func_end ov29_022FAD4C
arm_func_start ov29_022FAF08
ov29_022FAF08: ; 0x022FAF08
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r1, _022FAFC8 ; =DUNGEON_PTR
mov r6, r0
ldr r0, [r1]
mov r5, #0
#ifdef JAPAN
add r0, r0, #0x284
#else
add r0, r0, #0x328
#endif
add r8, r0, #0x12800
bl IsCurrentFixedRoomBossFight
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov sb, r5
mov r7, #0x36
b _022FAF74
_022FAF3C:
ldr r4, [r8, sb, lsl #2]
mov r0, r4
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FAF68
mov r0, r4
mov r1, r7
bl IqSkillIsEnabled
cmp r0, #0
movne r5, #1
bne _022FAF7C
_022FAF68:
add r0, sb, #1
mov r0, r0, lsl #0x10
mov sb, r0, asr #0x10
_022FAF74:
cmp sb, #4
blt _022FAF3C
_022FAF7C:
cmp r5, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r1, _022FAFC8 ; =DUNGEON_PTR
ldr r0, _022FAFCC ; =0x00012AF8
ldr r1, [r1]
ldrsh r1, [r1, r0]
cmp r1, #0
ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
cmp r6, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, #0
bl ov29_0234B09C
ldr r1, _022FAFD0 ; =0x00000C22
mov r0, r4
bl LogMessageByIdWithPopupCheckUser
mov r0, #0x78
mov r1, #0xa
bl ov29_022EA370
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_022FAFC8: .word DUNGEON_PTR
#ifdef JAPAN
_022FAFCC: .word 0x00012A54
_022FAFD0: .word 0x00000961
#else
_022FAFCC: .word 0x00012AF8
_022FAFD0: .word 0x00000C22
#endif
arm_func_end ov29_022FAF08
arm_func_start ov29_022FAFD4
ov29_022FAFD4: ; 0x022FAFD4
stmdb sp!, {r3, lr}
mov r2, #1
mov r3, #0
bl GetTreatmentBetweenMonsters
cmp r0, #0
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
ldmia sp!, {r3, pc}
arm_func_end ov29_022FAFD4
arm_func_start GetTeamMemberWithIqSkill
GetTeamMemberWithIqSkill: ; 0x022FAFF8
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r1, _022FB060 ; =DUNGEON_PTR
mov r4, #0
ldr r1, [r1]
mov r5, r0
#ifdef JAPAN
add r0, r1, #0x284
#else
add r0, r1, #0x328
#endif
mov r7, r4
add r6, r0, #0x12800
b _022FB050
_022FB01C:
ldr r0, [r6, r7, lsl #2]
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FB044
ldr r0, [r6, r7, lsl #2]
mov r1, r5
bl IqSkillIsEnabled
cmp r0, #0
ldrne r4, [r6, r7, lsl #2]
bne _022FB058
_022FB044:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
_022FB050:
cmp r7, #4
blt _022FB01C
_022FB058:
mov r0, r4
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_022FB060: .word DUNGEON_PTR
arm_func_end GetTeamMemberWithIqSkill
arm_func_start TeamMemberHasEnabledIqSkill
TeamMemberHasEnabledIqSkill: ; 0x022FB064
stmdb sp!, {r3, lr}
bl GetTeamMemberWithIqSkill
cmp r0, #0
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
ldmia sp!, {r3, pc}
arm_func_end TeamMemberHasEnabledIqSkill
arm_func_start TeamLeaderIqSkillIsEnabled
TeamLeaderIqSkillIsEnabled: ; 0x022FB080
stmdb sp!, {r4, lr}
mov r4, r0
bl GetLeader
mov r1, r4
bl IqSkillIsEnabled
cmp r0, #0
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
ldmia sp!, {r4, pc}
arm_func_end TeamLeaderIqSkillIsEnabled
arm_func_start CountMovesOutOfPp
CountMovesOutOfPp: ; 0x022FB0A8
stmdb sp!, {r3, lr}
ldr ip, [r0, #0xb4]
mov r0, #0
mov lr, r0
mov r2, r0
mov r3, #1
_022FB0C0:
add r1, ip, lr, lsl #3
#ifdef JAPAN
ldrb r1, [r1, #0x120]
#else
ldrb r1, [r1, #0x124]
#endif
tst r1, #1
movne r1, r3
moveq r1, r2
tst r1, #0xff
beq _022FB0F4
add r1, ip, lr, lsl #3
#ifdef JAPAN
ldrb r1, [r1, #0x126]
#else
ldrb r1, [r1, #0x12a]
#endif
cmp r1, #0
addeq r0, r0, #1
moveq r0, r0, lsl #0x10
moveq r0, r0, asr #0x10
_022FB0F4:
add r1, lr, #1
mov r1, r1, lsl #0x10
mov lr, r1, asr #0x10
cmp lr, #4
blt _022FB0C0
ldmia sp!, {r3, pc}
arm_func_end CountMovesOutOfPp
arm_func_start HasSuperEffectiveMoveAgainstUser
HasSuperEffectiveMoveAgainstUser: ; 0x022FB10C
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sb, r1
ldr r6, [sb, #0xb4]
mov r7, #0
mov sl, r0
mov r8, r2
#ifdef JAPAN
add r4, r6, #0x120
#else
add r4, r6, #0x124
#endif
mov fp, r7
mov r5, #1
b _022FB198
_022FB134:
add r0, r6, r7, lsl #3
#ifdef JAPAN
ldrb r0, [r0, #0x120]
#else
ldrb r0, [r0, #0x124]
#endif
tst r0, #1
movne r0, r5
moveq r0, fp
tst r0, #0xff
beq _022FB18C
cmp r8, #0
beq _022FB168
add r0, r4, r7, lsl #3
bl HasMaxGinsengBoost99
cmp r0, #0
beq _022FB18C
_022FB168:
add r0, r4, r7, lsl #3
bl GetMoveType
mov r2, r0
mov r0, sb
mov r1, sl
bl GetTypeMatchupBothTypes
cmp r0, #3
moveq r0, #1
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_022FB18C:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
_022FB198:
cmp r7, #4
blt _022FB134
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
arm_func_end HasSuperEffectiveMoveAgainstUser
arm_func_start ov29_022FB1A8
ov29_022FB1A8: ; 0x022FB1A8
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, #0
ldr r6, [r0, #0xb4]
mov r4, r7
mov r5, #1
b _022FB204
_022FB1C0:
add r0, r6, r7, lsl #3
#ifdef JAPAN
ldrb r0, [r0, #0x120]
#else
ldrb r0, [r0, #0x124]
#endif
tst r0, #1
movne r0, r5
moveq r0, r4
tst r0, #0xff
beq _022FB1F8
add r0, r6, r7, lsl #3
add r0, r0, #0x100
#ifdef JAPAN
ldrh r0, [r0, #0x24]
#else
ldrh r0, [r0, #0x28]
#endif
bl IsOneHitKoMove
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
_022FB1F8:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
_022FB204:
cmp r7, #4
blt _022FB1C0
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end ov29_022FB1A8
arm_func_start TryEatItem
TryEatItem: ; 0x022FB214
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x74
mov sl, r0
mov sb, r1
mov r5, #0
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FB244
mov r0, sb
bl EntityIsValid__022F7364
cmp r0, #0
bne _022FB24C
_022FB244:
mov r0, #0
b _022FB508
_022FB24C:
ldr r4, [sb, #0xb4]
ldrb r0, [r4, #6]
cmp r0, #0
ldrsh r0, [r4, #0x66]
beq _022FB31C
cmp r0, #0
beq _022FB504
ldrsh r0, [r4, #0x66]
bl ShouldTryEatItem
cmp r0, #0
beq _022FB504
mov r0, sl
add r1, r4, #0x62
bl CanMonsterUseItem
cmp r0, #0
beq _022FB504
mov r0, r5
mov r1, sl
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r1, sb
mov r0, #1
mov r2, r5
bl SubstitutePlaceholderStringTags
add r1, r4, #0x62
mov r0, #1
bl ov29_02344B44
ldr r2, _022FB510 ; =0x00000C24
mov r0, sl
mov r1, sb
bl LogMessageByIdWithPopupCheckUserTarget
ldrh r2, [r4, #0x62]
mov r0, sl
add r1, r4, #0x62
strh r2, [sp, #8]
ldrh r2, [r4, #0x64]
strh r2, [sp, #0xa]
ldrh r2, [r4, #0x66]
strh r2, [sp, #0xc]
bl ov29_0230F9A4
add r0, r4, #0x62
bl ItemZInit
mov r0, r5
str sl, [sp]
add r1, sp, #8
str r1, [sp, #4]
mov r3, sb
mov r1, r0
mov r2, r0
bl ApplyItemEffect
mov r5, #1
b _022FB504
_022FB31C:
bl ShouldTryEatItem
cmp r0, #0
beq _022FB3D4
mov r0, sl
add r1, r4, #0x62
bl CanMonsterUseItem
cmp r0, #0
beq _022FB504
mov r0, r5
mov r1, sl
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r1, sb
mov r0, #1
mov r2, r5
bl SubstitutePlaceholderStringTags
add r1, r4, #0x62
mov r0, #1
bl ov29_02344B44
ldr r2, _022FB510 ; =0x00000C24
mov r0, sl
mov r1, sb
bl LogMessageByIdWithPopupCheckUserTarget
ldrh r2, [r4, #0x62]
mov r0, sl
add r1, r4, #0x62
strh r2, [sp, #8]
ldrh r2, [r4, #0x64]
strh r2, [sp, #0xa]
ldrh r2, [r4, #0x66]
strh r2, [sp, #0xc]
bl ov29_0230F9A4
add r0, r4, #0x62
bl RemoveEquivItem
add r0, r4, #0x62
bl ItemZInit
mov r0, r5
str sl, [sp]
add r1, sp, #8
str r1, [sp, #4]
mov r3, sb
mov r1, r0
mov r2, r0
bl ApplyItemEffect
mov r5, #1
b _022FB504
_022FB3D4:
bl GetNbItemsInBag
mov r7, r0
mov r6, r5
add r4, sp, #0xe
b _022FB3F8
_022FB3E8:
mov r0, r7
bl RandInt
strb r0, [r4, r6]
add r6, r6, #1
_022FB3F8:
cmp r6, r7
blt _022FB3E8
add r0, sp, #0xe
mov r1, #0
add r0, r0, r7
b _022FB418
_022FB410:
strb r1, [r0, r1]
add r1, r1, #1
_022FB418:
cmp r1, r7
blt _022FB410
mov r8, #0
add r4, sp, #0xe
ldr fp, _022FB514 ; =BAG_ITEMS_PTR_MIRROR
b _022FB4FC
_022FB430:
ldrb r1, [r4, r8]
ldr r3, [fp]
mov r0, #6
smulbb r2, r1, r0
ldr r1, [r3, #0x384]
ldrb r0, [r1, r2]
add r6, r1, r2
tst r0, #1
movne r0, #1
moveq r0, #0
tst r0, #0xff
beq _022FB4F8
ldrb r0, [r6, #1]
cmp r0, #0
bne _022FB4F8
ldrsh r0, [r6, #4]
bl ShouldTryEatItem
cmp r0, #0
beq _022FB4F8
mov r0, sl
mov r1, r6
bl CanMonsterUseItem
cmp r0, #0
beq _022FB504
mov r0, #0
mov r1, sl
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r1, sb
mov r0, #1
mov r2, #0
bl SubstitutePlaceholderStringTags
mov r1, r6
mov r0, #1
bl ov29_02344B44
mov r0, sl
mov r1, sb
ldr r2, _022FB518 ; =0x00000C25
bl LogMessageByIdWithPopupCheckUserTarget
str sl, [sp]
mov r3, sb
str r6, [sp, #4]
mov r0, #0
mov r1, r0
mov r2, r0
bl ApplyItemEffect
mov r0, r6
bl RemoveEquivItem
mov r5, #1
b _022FB504
_022FB4F8:
add r8, r8, #1
_022FB4FC:
cmp r8, r7, lsl #1
blt _022FB430
_022FB504:
mov r0, r5
_022FB508:
add sp, sp, #0x74
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
#ifdef JAPAN
_022FB510: .word 0x00000963
_022FB514: .word BAG_ITEMS_PTR_MIRROR
_022FB518: .word 0x00000964
#else
_022FB510: .word 0x00000C24
_022FB514: .word BAG_ITEMS_PTR_MIRROR
_022FB518: .word 0x00000C25
#endif
arm_func_end TryEatItem
arm_func_start ov29_022FB51C
ov29_022FB51C: ; 0x022FB51C
stmdb sp!, {r3, lr}
bl GetScenarioBalance
cmp r0, #2
movhs r0, #1
movlo r0, #0
and r0, r0, #0xff
ldmia sp!, {r3, pc}
arm_func_end ov29_022FB51C

704
asm/overlay_29_022FACBC.s Normal file
View File

@@ -0,0 +1,704 @@
.include "asm/macros.inc"
.include "overlay_29_022FACBC.inc"
.text
arm_func_start ov29_022FACBC
ov29_022FACBC: ; 0x022FACBC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #4
ldr r1, _022FAD44 ; =DUNGEON_PTR
mov sb, r0
ldr r0, [r1]
mov r8, #0
#ifdef JAPAN
add r0, r0, #0x284
#else
add r0, r0, #0x328
#endif
ldr r5, _022FAD48 ; =0x000003E7
add r7, r0, #0x12800
mov r4, r8
mov r6, #0x48
_022FACE8:
ldr sl, [r7, r8, lsl #2]
mov r0, sl
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FAD28
mov r0, sl
mov r1, r6
bl ExclusiveItemEffectIsActive__022FAC98
cmp r0, #0
beq _022FAD28
mov r0, sl
mov r1, sl
mov r2, r5
mov r3, r4
str sb, [sp]
bl TryIncreaseHp
_022FAD28:
add r0, r8, #1
mov r0, r0, lsl #0x10
mov r8, r0, asr #0x10
cmp r8, #4
blt _022FACE8
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_022FAD44: .word DUNGEON_PTR
_022FAD48: .word 0x000003E7
arm_func_end ov29_022FACBC
arm_func_start ov29_022FAD4C
ov29_022FAD4C: ; 0x022FAD4C
#ifdef JAPAN
#define OV29_022FAD4C_OFFSET -0xA4
#else
#define OV29_022FAD4C_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r1, _022FAF00 ; =DUNGEON_PTR
mov r8, #0
ldr r1, [r1]
sub r3, r8, #1
add r2, r1, #0xcc00
ldrsh r4, [r2, #0xe4 + OV29_022FAD4C_OFFSET]
add r1, r1, #0x328 + OV29_022FAD4C_OFFSET
add r5, r1, #0x12800
cmp r4, r3
ldreqsh r1, [r2, #0xe6 + OV29_022FAD4C_OFFSET]
mov sb, r0
moveq r0, r3
cmpeq r1, r0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r7, #0
mov r4, #0x1a
b _022FADE4
_022FAD94:
ldr r6, [r5, r7, lsl #2]
mov r0, r6
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FADD8
ldr r0, [r6, #0xb4]
ldrb r0, [r0, #0x48]
cmp r0, #0xd9
blo _022FADC0
cmp r0, #0xe4
blo _022FADD8
_022FADC0:
mov r0, r6
mov r1, r4
bl IqSkillIsEnabled
cmp r0, #0
movne r8, #1
bne _022FADEC
_022FADD8:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
_022FADE4:
cmp r7, #4
blt _022FAD94
_022FADEC:
cmp r8, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
bl GetFloorType
cmp r0, #0
bne _022FAEEC
cmp sb, #0
bne _022FAE14
#ifdef JAPAN
mov r0, r6
mov r1, #0x960
#else
ldr r1, _022FAF04 ; =0x00000C21
mov r0, r6
#endif
bl LogMessageByIdWithPopupCheckUser
_022FAE14:
bl GetLeader
mov r5, r0
add r0, sp, #0
add r1, sp, #2
mov r4, #0
bl GetStairsSpawnPosition
ldrsh r1, [sp]
ldrsh r3, [r5, #4]
ldrsh r2, [sp, #2]
cmp r3, r1
ldreqsh r0, [r5, #6]
cmpeq r0, r2
cmp r3, r1
bne _022FAE58
ldrsh r0, [r5, #6]
cmp r0, r2
movlt r4, #0
_022FAE58:
cmp r3, r1
ldrltsh r0, [r5, #6]
cmplt r0, r2
movlt r4, #1
cmp r3, r1
bge _022FAE7C
ldrsh r0, [r5, #6]
cmp r0, r2
moveq r4, #2
_022FAE7C:
cmp r3, r1
bge _022FAE90
ldrsh r0, [r5, #6]
cmp r0, r2
movgt r4, #3
_022FAE90:
cmp r3, r1
bne _022FAEA4
ldrsh r0, [r5, #6]
cmp r0, r2
movgt r4, #4
_022FAEA4:
cmp r3, r1
ldrgtsh r0, [r5, #6]
cmpgt r0, r2
movgt r4, #5
cmp r3, r1
ble _022FAEC8
ldrsh r0, [r5, #6]
cmp r0, r2
moveq r4, #6
_022FAEC8:
cmp r3, r1
ble _022FAEDC
ldrsh r0, [r5, #6]
cmp r0, r2
movlt r4, #7
_022FAEDC:
mov r0, r5
mov r1, r4
bl ov29_022E6928
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_022FAEEC:
bl GetFloorType
cmp r0, #1
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
bl GetFloorType
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_022FAF00: .word DUNGEON_PTR
#ifndef JAPAN
_022FAF04: .word 0x00000C21
#endif
arm_func_end ov29_022FAD4C
arm_func_start ov29_022FAF08
ov29_022FAF08: ; 0x022FAF08
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r1, _022FAFC8 ; =DUNGEON_PTR
mov r6, r0
ldr r0, [r1]
mov r5, #0
#ifdef JAPAN
add r0, r0, #0x284
#else
add r0, r0, #0x328
#endif
add r8, r0, #0x12800
bl IsCurrentFixedRoomBossFight
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov sb, r5
mov r7, #0x36
b _022FAF74
_022FAF3C:
ldr r4, [r8, sb, lsl #2]
mov r0, r4
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FAF68
mov r0, r4
mov r1, r7
bl IqSkillIsEnabled
cmp r0, #0
movne r5, #1
bne _022FAF7C
_022FAF68:
add r0, sb, #1
mov r0, r0, lsl #0x10
mov sb, r0, asr #0x10
_022FAF74:
cmp sb, #4
blt _022FAF3C
_022FAF7C:
cmp r5, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r1, _022FAFC8 ; =DUNGEON_PTR
ldr r0, _022FAFCC ; =0x00012AF8
ldr r1, [r1]
ldrsh r1, [r1, r0]
cmp r1, #0
ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
cmp r6, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, #0
bl ov29_0234B09C
ldr r1, _022FAFD0 ; =0x00000C22
mov r0, r4
bl LogMessageByIdWithPopupCheckUser
mov r0, #0x78
mov r1, #0xa
bl ov29_022EA370
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_022FAFC8: .word DUNGEON_PTR
#ifdef JAPAN
_022FAFCC: .word 0x00012A54
_022FAFD0: .word 0x00000961
#else
_022FAFCC: .word 0x00012AF8
_022FAFD0: .word 0x00000C22
#endif
arm_func_end ov29_022FAF08
arm_func_start ov29_022FAFD4
ov29_022FAFD4: ; 0x022FAFD4
stmdb sp!, {r3, lr}
mov r2, #1
mov r3, #0
bl GetTreatmentBetweenMonsters
cmp r0, #0
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
ldmia sp!, {r3, pc}
arm_func_end ov29_022FAFD4
arm_func_start GetTeamMemberWithIqSkill
GetTeamMemberWithIqSkill: ; 0x022FAFF8
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r1, _022FB060 ; =DUNGEON_PTR
mov r4, #0
ldr r1, [r1]
mov r5, r0
#ifdef JAPAN
add r0, r1, #0x284
#else
add r0, r1, #0x328
#endif
mov r7, r4
add r6, r0, #0x12800
b _022FB050
_022FB01C:
ldr r0, [r6, r7, lsl #2]
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FB044
ldr r0, [r6, r7, lsl #2]
mov r1, r5
bl IqSkillIsEnabled
cmp r0, #0
ldrne r4, [r6, r7, lsl #2]
bne _022FB058
_022FB044:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
_022FB050:
cmp r7, #4
blt _022FB01C
_022FB058:
mov r0, r4
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_022FB060: .word DUNGEON_PTR
arm_func_end GetTeamMemberWithIqSkill
arm_func_start TeamMemberHasEnabledIqSkill
TeamMemberHasEnabledIqSkill: ; 0x022FB064
stmdb sp!, {r3, lr}
bl GetTeamMemberWithIqSkill
cmp r0, #0
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
ldmia sp!, {r3, pc}
arm_func_end TeamMemberHasEnabledIqSkill
arm_func_start TeamLeaderIqSkillIsEnabled
TeamLeaderIqSkillIsEnabled: ; 0x022FB080
stmdb sp!, {r4, lr}
mov r4, r0
bl GetLeader
mov r1, r4
bl IqSkillIsEnabled
cmp r0, #0
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
ldmia sp!, {r4, pc}
arm_func_end TeamLeaderIqSkillIsEnabled
arm_func_start CountMovesOutOfPp
CountMovesOutOfPp: ; 0x022FB0A8
stmdb sp!, {r3, lr}
ldr ip, [r0, #0xb4]
mov r0, #0
mov lr, r0
mov r2, r0
mov r3, #1
_022FB0C0:
add r1, ip, lr, lsl #3
#ifdef JAPAN
ldrb r1, [r1, #0x120]
#else
ldrb r1, [r1, #0x124]
#endif
tst r1, #1
movne r1, r3
moveq r1, r2
tst r1, #0xff
beq _022FB0F4
add r1, ip, lr, lsl #3
#ifdef JAPAN
ldrb r1, [r1, #0x126]
#else
ldrb r1, [r1, #0x12a]
#endif
cmp r1, #0
addeq r0, r0, #1
moveq r0, r0, lsl #0x10
moveq r0, r0, asr #0x10
_022FB0F4:
add r1, lr, #1
mov r1, r1, lsl #0x10
mov lr, r1, asr #0x10
cmp lr, #4
blt _022FB0C0
ldmia sp!, {r3, pc}
arm_func_end CountMovesOutOfPp
arm_func_start HasSuperEffectiveMoveAgainstUser
HasSuperEffectiveMoveAgainstUser: ; 0x022FB10C
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sb, r1
ldr r6, [sb, #0xb4]
mov r7, #0
mov sl, r0
mov r8, r2
#ifdef JAPAN
add r4, r6, #0x120
#else
add r4, r6, #0x124
#endif
mov fp, r7
mov r5, #1
b _022FB198
_022FB134:
add r0, r6, r7, lsl #3
#ifdef JAPAN
ldrb r0, [r0, #0x120]
#else
ldrb r0, [r0, #0x124]
#endif
tst r0, #1
movne r0, r5
moveq r0, fp
tst r0, #0xff
beq _022FB18C
cmp r8, #0
beq _022FB168
add r0, r4, r7, lsl #3
bl HasMaxGinsengBoost99
cmp r0, #0
beq _022FB18C
_022FB168:
add r0, r4, r7, lsl #3
bl GetMoveType
mov r2, r0
mov r0, sb
mov r1, sl
bl GetTypeMatchupBothTypes
cmp r0, #3
moveq r0, #1
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_022FB18C:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
_022FB198:
cmp r7, #4
blt _022FB134
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
arm_func_end HasSuperEffectiveMoveAgainstUser
arm_func_start ov29_022FB1A8
ov29_022FB1A8: ; 0x022FB1A8
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, #0
ldr r6, [r0, #0xb4]
mov r4, r7
mov r5, #1
b _022FB204
_022FB1C0:
add r0, r6, r7, lsl #3
#ifdef JAPAN
ldrb r0, [r0, #0x120]
#else
ldrb r0, [r0, #0x124]
#endif
tst r0, #1
movne r0, r5
moveq r0, r4
tst r0, #0xff
beq _022FB1F8
add r0, r6, r7, lsl #3
add r0, r0, #0x100
#ifdef JAPAN
ldrh r0, [r0, #0x24]
#else
ldrh r0, [r0, #0x28]
#endif
bl IsOneHitKoMove
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
_022FB1F8:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
_022FB204:
cmp r7, #4
blt _022FB1C0
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end ov29_022FB1A8
arm_func_start TryEatItem
TryEatItem: ; 0x022FB214
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x74
mov sl, r0
mov sb, r1
mov r5, #0
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FB244
mov r0, sb
bl EntityIsValid__022F7364
cmp r0, #0
bne _022FB24C
_022FB244:
mov r0, #0
b _022FB508
_022FB24C:
ldr r4, [sb, #0xb4]
ldrb r0, [r4, #6]
cmp r0, #0
ldrsh r0, [r4, #0x66]
beq _022FB31C
cmp r0, #0
beq _022FB504
ldrsh r0, [r4, #0x66]
bl ShouldTryEatItem
cmp r0, #0
beq _022FB504
mov r0, sl
add r1, r4, #0x62
bl CanMonsterUseItem
cmp r0, #0
beq _022FB504
mov r0, r5
mov r1, sl
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r1, sb
mov r0, #1
mov r2, r5
bl SubstitutePlaceholderStringTags
add r1, r4, #0x62
mov r0, #1
bl ov29_02344B44
ldr r2, _022FB510 ; =0x00000C24
mov r0, sl
mov r1, sb
bl LogMessageByIdWithPopupCheckUserTarget
ldrh r2, [r4, #0x62]
mov r0, sl
add r1, r4, #0x62
strh r2, [sp, #8]
ldrh r2, [r4, #0x64]
strh r2, [sp, #0xa]
ldrh r2, [r4, #0x66]
strh r2, [sp, #0xc]
bl ov29_0230F9A4
add r0, r4, #0x62
bl ItemZInit
mov r0, r5
str sl, [sp]
add r1, sp, #8
str r1, [sp, #4]
mov r3, sb
mov r1, r0
mov r2, r0
bl ApplyItemEffect
mov r5, #1
b _022FB504
_022FB31C:
bl ShouldTryEatItem
cmp r0, #0
beq _022FB3D4
mov r0, sl
add r1, r4, #0x62
bl CanMonsterUseItem
cmp r0, #0
beq _022FB504
mov r0, r5
mov r1, sl
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r1, sb
mov r0, #1
mov r2, r5
bl SubstitutePlaceholderStringTags
add r1, r4, #0x62
mov r0, #1
bl ov29_02344B44
ldr r2, _022FB510 ; =0x00000C24
mov r0, sl
mov r1, sb
bl LogMessageByIdWithPopupCheckUserTarget
ldrh r2, [r4, #0x62]
mov r0, sl
add r1, r4, #0x62
strh r2, [sp, #8]
ldrh r2, [r4, #0x64]
strh r2, [sp, #0xa]
ldrh r2, [r4, #0x66]
strh r2, [sp, #0xc]
bl ov29_0230F9A4
add r0, r4, #0x62
bl RemoveEquivItem
add r0, r4, #0x62
bl ItemZInit
mov r0, r5
str sl, [sp]
add r1, sp, #8
str r1, [sp, #4]
mov r3, sb
mov r1, r0
mov r2, r0
bl ApplyItemEffect
mov r5, #1
b _022FB504
_022FB3D4:
bl GetNbItemsInBag
mov r7, r0
mov r6, r5
add r4, sp, #0xe
b _022FB3F8
_022FB3E8:
mov r0, r7
bl RandInt
strb r0, [r4, r6]
add r6, r6, #1
_022FB3F8:
cmp r6, r7
blt _022FB3E8
add r0, sp, #0xe
mov r1, #0
add r0, r0, r7
b _022FB418
_022FB410:
strb r1, [r0, r1]
add r1, r1, #1
_022FB418:
cmp r1, r7
blt _022FB410
mov r8, #0
add r4, sp, #0xe
ldr fp, _022FB514 ; =BAG_ITEMS_PTR_MIRROR
b _022FB4FC
_022FB430:
ldrb r1, [r4, r8]
ldr r3, [fp]
mov r0, #6
smulbb r2, r1, r0
ldr r1, [r3, #0x384]
ldrb r0, [r1, r2]
add r6, r1, r2
tst r0, #1
movne r0, #1
moveq r0, #0
tst r0, #0xff
beq _022FB4F8
ldrb r0, [r6, #1]
cmp r0, #0
bne _022FB4F8
ldrsh r0, [r6, #4]
bl ShouldTryEatItem
cmp r0, #0
beq _022FB4F8
mov r0, sl
mov r1, r6
bl CanMonsterUseItem
cmp r0, #0
beq _022FB504
mov r0, #0
mov r1, sl
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r1, sb
mov r0, #1
mov r2, #0
bl SubstitutePlaceholderStringTags
mov r1, r6
mov r0, #1
bl ov29_02344B44
mov r0, sl
mov r1, sb
ldr r2, _022FB518 ; =0x00000C25
bl LogMessageByIdWithPopupCheckUserTarget
str sl, [sp]
mov r3, sb
str r6, [sp, #4]
mov r0, #0
mov r1, r0
mov r2, r0
bl ApplyItemEffect
mov r0, r6
bl RemoveEquivItem
mov r5, #1
b _022FB504
_022FB4F8:
add r8, r8, #1
_022FB4FC:
cmp r8, r7, lsl #1
blt _022FB430
_022FB504:
mov r0, r5
_022FB508:
add sp, sp, #0x74
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
#ifdef JAPAN
_022FB510: .word 0x00000963
_022FB514: .word BAG_ITEMS_PTR_MIRROR
_022FB518: .word 0x00000964
#else
_022FB510: .word 0x00000C24
_022FB514: .word BAG_ITEMS_PTR_MIRROR
_022FB518: .word 0x00000C25
#endif
arm_func_end TryEatItem
arm_func_start ov29_022FB51C
ov29_022FB51C: ; 0x022FB51C
stmdb sp!, {r3, lr}
bl GetScenarioBalance
cmp r0, #2
movhs r0, #1
movlo r0, #0
and r0, r0, #0xff
ldmia sp!, {r3, pc}
arm_func_end ov29_022FB51C

View File

@@ -562,153 +562,3 @@ _022FFF1C: .word 0x000001A5
_022FFF20: .word 0x0000017F
_022FFF24: .word DUNGEON_PTR
arm_func_end CalcSpeedStage
arm_func_start ExclusiveItemEffectIsActive__022FFF28
ExclusiveItemEffectIsActive__022FFF28: ; 0x022FFF28
stmdb sp!, {r3, lr}
ldr r2, [r0, #0xb4]
ldrb r0, [r2, #6]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, pc}
#ifdef JAPAN
add r0, r2, #0x224
#else
add r0, r2, #0x228
#endif
bl ExclusiveItemEffectFlagTest
ldmia sp!, {r3, pc}
arm_func_end ExclusiveItemEffectIsActive__022FFF28
arm_func_start CalcSpeedStageWrapper
CalcSpeedStageWrapper: ; 0x022FFF4C
ldr ip, _022FFF58 ; =CalcSpeedStage
mov r1, #1
bx ip
.align 2, 0
_022FFF58: .word CalcSpeedStage
arm_func_end CalcSpeedStageWrapper
arm_func_start GetNumberOfAttacks
GetNumberOfAttacks: ; 0x022FFF5C
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #8
mov r5, #0
mov sl, r0
mov sb, r1
mov r6, r5
mov r7, r5
bl EntityIsValid__023000E4
cmp r0, #0
moveq r0, r5
beq _023000D4
mov r0, sl
bl GetApparentWeather
mov r8, r0
cmp r8, #4
bne _022FFFB8
mov r0, sl
mov r1, #0x1b
bl AbilityIsActive
cmp r0, #0
movne r5, #1
movne r6, r5
b _022FFFD8
_022FFFB8:
cmp r8, #1
bne _022FFFD8
mov r0, sl
mov r1, #0x4a
bl AbilityIsActive
cmp r0, #0
movne r5, #1
movne r6, r5
_022FFFD8:
ldr r4, _023000DC ; =EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST
ldrb r0, [r4, r8]
cmp r0, #0
beq _02300000
ldrb r1, [r4, r8]
mov r0, sl
bl ExclusiveItemEffectIsActive__022FFF28
cmp r0, #0
ldrneb r7, [r4, r8]
movne r5, #1
_02300000:
mov r0, sl
mov r1, #0x54
bl AbilityIsActive
cmp r0, #0
beq _02300028
ldr r0, [sl, #0xb4]
ldrsh r0, [r0, #0x66]
cmp r0, #0
moveq r5, #1
moveq r6, r5
_02300028:
cmp sb, #0
beq _023000C8
cmp r6, #0
beq _02300068
ldr r0, [sl, #0xb4]
mov r2, r5
mov r1, #0x40
bl UpdateStateFlags
cmp r0, #0
beq _023000C8
mov r0, sl
bl ov29_022E655C
#ifdef JAPAN
ldr r1, _02301510 ; =0x0000096F
mov r0, sl
#else
mov r0, sl
mov r1, #0xc30
#endif
bl LogMessageByIdWithPopupCheckUser
b _023000C8
_02300068:
cmp r7, #0
beq _023000C8
ldr r0, [sl, #0xb4]
mov r2, r5
mov r1, #0x40
bl UpdateStateFlags
cmp r0, #0
beq _023000C8
mov r0, sl
bl ov29_022E655C
mov r0, #0
mov r1, sl
mov r2, r0
bl SubstitutePlaceholderStringTags
add r2, sp, #0
mov r0, sl
mov r1, r7
bl GetExclusiveItemWithEffectFromBag
add r1, sp, #0
mov r0, #0
bl ov29_02344B44
#ifdef JAPAN
mov r0, sl
mov r1, #0x970
#else
ldr r1, _023000E0 ; =0x00000C31
mov r0, sl
#endif
bl LogMessageByIdWithPopupCheckUser
_023000C8:
cmp r5, #0
movne r0, #2
moveq r0, #1
_023000D4:
add sp, sp, #8
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_023000DC: .word EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST
#ifdef JAPAN
_02301510: .word 0x0000096F
#else
_023000E0: .word 0x00000C31
#endif
arm_func_end GetNumberOfAttacks

137
asm/overlay_29_022FFF4C.s Normal file
View File

@@ -0,0 +1,137 @@
.include "asm/macros.inc"
.include "overlay_29_022FFF4C.inc"
.text
arm_func_start CalcSpeedStageWrapper
CalcSpeedStageWrapper: ; 0x022FFF4C
ldr ip, _022FFF58 ; =CalcSpeedStage
mov r1, #1
bx ip
.align 2, 0
_022FFF58: .word CalcSpeedStage
arm_func_end CalcSpeedStageWrapper
arm_func_start GetNumberOfAttacks
GetNumberOfAttacks: ; 0x022FFF5C
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #8
mov r5, #0
mov sl, r0
mov sb, r1
mov r6, r5
mov r7, r5
bl EntityIsValid__023000E4
cmp r0, #0
moveq r0, r5
beq _023000D4
mov r0, sl
bl GetApparentWeather
mov r8, r0
cmp r8, #4
bne _022FFFB8
mov r0, sl
mov r1, #0x1b
bl AbilityIsActive
cmp r0, #0
movne r5, #1
movne r6, r5
b _022FFFD8
_022FFFB8:
cmp r8, #1
bne _022FFFD8
mov r0, sl
mov r1, #0x4a
bl AbilityIsActive
cmp r0, #0
movne r5, #1
movne r6, r5
_022FFFD8:
ldr r4, _023000DC ; =EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST
ldrb r0, [r4, r8]
cmp r0, #0
beq _02300000
ldrb r1, [r4, r8]
mov r0, sl
bl ExclusiveItemEffectIsActive__022FFF28
cmp r0, #0
ldrneb r7, [r4, r8]
movne r5, #1
_02300000:
mov r0, sl
mov r1, #0x54
bl AbilityIsActive
cmp r0, #0
beq _02300028
ldr r0, [sl, #0xb4]
ldrsh r0, [r0, #0x66]
cmp r0, #0
moveq r5, #1
moveq r6, r5
_02300028:
cmp sb, #0
beq _023000C8
cmp r6, #0
beq _02300068
ldr r0, [sl, #0xb4]
mov r2, r5
mov r1, #0x40
bl UpdateStateFlags
cmp r0, #0
beq _023000C8
mov r0, sl
bl ov29_022E655C
#ifdef JAPAN
ldr r1, _02301510 ; =0x0000096F
mov r0, sl
#else
mov r0, sl
mov r1, #0xc30
#endif
bl LogMessageByIdWithPopupCheckUser
b _023000C8
_02300068:
cmp r7, #0
beq _023000C8
ldr r0, [sl, #0xb4]
mov r2, r5
mov r1, #0x40
bl UpdateStateFlags
cmp r0, #0
beq _023000C8
mov r0, sl
bl ov29_022E655C
mov r0, #0
mov r1, sl
mov r2, r0
bl SubstitutePlaceholderStringTags
add r2, sp, #0
mov r0, sl
mov r1, r7
bl GetExclusiveItemWithEffectFromBag
add r1, sp, #0
mov r0, #0
bl ov29_02344B44
#ifdef JAPAN
mov r0, sl
mov r1, #0x970
#else
ldr r1, _023000E0 ; =0x00000C31
mov r0, sl
#endif
bl LogMessageByIdWithPopupCheckUser
_023000C8:
cmp r5, #0
movne r0, #2
moveq r0, #1
_023000D4:
add sp, sp, #8
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_023000DC: .word EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST
#ifdef JAPAN
_02301510: .word 0x0000096F
#else
_023000E0: .word 0x00000C31
#endif
arm_func_end GetNumberOfAttacks

View File

@@ -105,56 +105,3 @@ LevitateIsActive: ; 0x02301E18
and r0, r0, #0xff
ldmia sp!, {r4, pc}
arm_func_end LevitateIsActive
arm_func_start MonsterIsType
MonsterIsType: ; 0x02301E50
cmp r1, #0
ldr r2, [r0, #0xb4]
moveq r0, #0
bxeq lr
ldrb r0, [r2, #0x5e]
cmp r0, r1
moveq r0, #1
bxeq lr
ldrb r0, [r2, #0x5f]
cmp r0, r1
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
bx lr
arm_func_end MonsterIsType
arm_func_start IsTypeAffectedByGravity
IsTypeAffectedByGravity: ; 0x02301E88
stmdb sp!, {r3, lr}
cmp r1, #0xa
bne _02301EA4
bl GravityIsActive
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, pc}
_02301EA4:
mov r0, #1
ldmia sp!, {r3, pc}
arm_func_end IsTypeAffectedByGravity
arm_func_start HasTypeAffectedByGravity
HasTypeAffectedByGravity: ; 0x02301EAC
stmdb sp!, {r3, lr}
ldr r3, [r0, #0xb4]
cmp r1, #0
moveq r0, #0
ldmeqia sp!, {r3, pc}
ldrb r2, [r3, #0x5e]
cmp r2, r1
bne _02301ED4
bl IsTypeAffectedByGravity
ldmia sp!, {r3, pc}
_02301ED4:
ldrb r2, [r3, #0x5f]
cmp r2, r1
movne r0, #0
ldmneia sp!, {r3, pc}
bl IsTypeAffectedByGravity
ldmia sp!, {r3, pc}
arm_func_end HasTypeAffectedByGravity

39
asm/overlay_29_02301E88.s Normal file
View File

@@ -0,0 +1,39 @@
.include "asm/macros.inc"
.include "overlay_29_02301E88.inc"
.text
arm_func_start IsTypeAffectedByGravity
IsTypeAffectedByGravity: ; 0x02301E88
stmdb sp!, {r3, lr}
cmp r1, #0xa
bne _02301EA4
bl GravityIsActive
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, pc}
_02301EA4:
mov r0, #1
ldmia sp!, {r3, pc}
arm_func_end IsTypeAffectedByGravity
arm_func_start HasTypeAffectedByGravity
HasTypeAffectedByGravity: ; 0x02301EAC
stmdb sp!, {r3, lr}
ldr r3, [r0, #0xb4]
cmp r1, #0
moveq r0, #0
ldmeqia sp!, {r3, pc}
ldrb r2, [r3, #0x5e]
cmp r2, r1
bne _02301ED4
bl IsTypeAffectedByGravity
ldmia sp!, {r3, pc}
_02301ED4:
ldrb r2, [r3, #0x5f]
cmp r2, r1
movne r0, #0
ldmneia sp!, {r3, pc}
bl IsTypeAffectedByGravity
ldmia sp!, {r3, pc}
arm_func_end HasTypeAffectedByGravity

View File

@@ -1,21 +0,0 @@
.include "asm/macros.inc"
.include "overlay_29_0230A9B8.inc"
.text
arm_func_start ExclusiveItemEffectIsActive__0230A9B8
ExclusiveItemEffectIsActive__0230A9B8: ; 0x0230A9B8
stmdb sp!, {r3, lr}
ldr r2, [r0, #0xb4]
ldrb r0, [r2, #6]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, pc}
#ifdef JAPAN
add r0, r2, #0x224
#else
add r0, r2, #0x228
#endif
bl ExclusiveItemEffectFlagTest
ldmia sp!, {r3, pc}
arm_func_end ExclusiveItemEffectIsActive__0230A9B8

View File

@@ -41,72 +41,3 @@ _0230F898:
.align 2, 0
_0230F8A8: .word DUNGEON_PTR
arm_func_end TeamMemberHasExclusiveItemEffectActive
arm_func_start ExclusiveItemEffectIsActive__0230F8AC
ExclusiveItemEffectIsActive__0230F8AC: ; 0x0230F8AC
stmdb sp!, {r3, lr}
ldr r2, [r0, #0xb4]
ldrb r0, [r2, #6]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, pc}
#ifdef JAPAN
add r0, r2, #0x224
#else
add r0, r2, #0x228
#endif
bl ExclusiveItemEffectFlagTest
ldmia sp!, {r3, pc}
arm_func_end ExclusiveItemEffectIsActive__0230F8AC
arm_func_start ov29_0230F8D0
ov29_0230F8D0: ; 0x0230F8D0
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r8, r0
mov r7, r1
bl EntityIsValid__0230F008
cmp r0, #0
moveq r0, #0xff
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r0, [r8, #0xb4]
mov r5, #0
ldrb r6, [r0, #0x4c]
ldr r4, _0230F97C ; =DIRECTIONS_XY
b _0230F96C
_0230F900:
mov r1, r6, lsl #2
add r0, r4, r6, lsl #2
ldrsh ip, [r8, #4]
ldrsh r3, [r4, r1]
ldrsh r2, [r8, #6]
ldrsh r1, [r0, #2]
add r0, ip, r3
add r1, r2, r1
bl GetTile
ldr sb, [r0, #0xc]
cmp sb, #0
beq _0230F958
mov r0, sb
bl IsMonster__0230F980
cmp r0, #0
beq _0230F958
mov r0, sb
mov r1, r7
bl ItemIsActive__0230F810
cmp r0, #0
movne r0, r6
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0230F958:
add r0, r6, #1
and r0, r0, #0xff
add r1, r5, #1
and r6, r0, #7
and r5, r1, #0xff
_0230F96C:
cmp r5, #8
blo _0230F900
mov r0, #0xff
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_0230F97C: .word DIRECTIONS_XY
arm_func_end ov29_0230F8D0

56
asm/overlay_29_0230F8D0.s Normal file
View File

@@ -0,0 +1,56 @@
.include "asm/macros.inc"
.include "overlay_29_0230F8D0.inc"
.text
arm_func_start ov29_0230F8D0
ov29_0230F8D0: ; 0x0230F8D0
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r8, r0
mov r7, r1
bl EntityIsValid__0230F008
cmp r0, #0
moveq r0, #0xff
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r0, [r8, #0xb4]
mov r5, #0
ldrb r6, [r0, #0x4c]
ldr r4, _0230F97C ; =DIRECTIONS_XY
b _0230F96C
_0230F900:
mov r1, r6, lsl #2
add r0, r4, r6, lsl #2
ldrsh ip, [r8, #4]
ldrsh r3, [r4, r1]
ldrsh r2, [r8, #6]
ldrsh r1, [r0, #2]
add r0, ip, r3
add r1, r2, r1
bl GetTile
ldr sb, [r0, #0xc]
cmp sb, #0
beq _0230F958
mov r0, sb
bl IsMonster__0230F980
cmp r0, #0
beq _0230F958
mov r0, sb
mov r1, r7
bl ItemIsActive__0230F810
cmp r0, #0
movne r0, r6
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0230F958:
add r0, r6, #1
and r0, r0, #0xff
add r1, r5, #1
and r6, r0, #7
and r5, r1, #0xff
_0230F96C:
cmp r5, #8
blo _0230F900
mov r0, #0xff
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_0230F97C: .word DIRECTIONS_XY
arm_func_end ov29_0230F8D0

View File

@@ -1,25 +1,8 @@
.include "asm/macros.inc"
.include "overlay_29_02311064.inc"
.include "overlay_29_02311088.inc"
.text
arm_func_start ExclusiveItemEffectIsActive__02311064
ExclusiveItemEffectIsActive__02311064: ; 0x02311064
stmdb sp!, {r3, lr}
ldr r2, [r0, #0xb4]
ldrb r0, [r2, #6]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, pc}
#ifdef JAPAN
add r0, r2, #0x224
#else
add r0, r2, #0x228
#endif
bl ExclusiveItemEffectFlagTest
ldmia sp!, {r3, pc}
arm_func_end ExclusiveItemEffectIsActive__02311064
arm_func_start TickStatusAndHealthRegen
TickStatusAndHealthRegen: ; 0x02311088
#ifdef JAPAN

View File

@@ -3329,764 +3329,3 @@ _023147E0: .word 0x00000D01 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET
_023147E4: .word DIRECTIONS_XY
_023147E8: .word 0x00000DC5 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET
arm_func_end TryInflictParalysisStatus
arm_func_start ExclusiveItemEffectIsActive__023147EC
ExclusiveItemEffectIsActive__023147EC: ; 0x023147EC
stmdb sp!, {r3, lr}
ldr r2, [r0, #0xb4]
ldrb r0, [r2, #6]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, pc}
#ifdef JAPAN
add r0, r2, #0x224
#else
add r0, r2, #0x228
#endif
bl ExclusiveItemEffectFlagTest
ldmia sp!, {r3, pc}
arm_func_end ExclusiveItemEffectIsActive__023147EC
arm_func_start BoostSpeed
BoostSpeed: ; 0x02314810
#ifdef JAPAN
#define BOOST_SPEED_OFFSET -4
#else
#define BOOST_SPEED_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r8, r1
mov sb, r0
mov r0, r8
mov r7, r2
mov r6, r3
bl EntityIsValid__023118B4
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
cmp r6, #0
bne _02314850
ldr r1, _0231492C ; =SPEED_BOOST_TURN_RANGE
mov r0, r8
mov r2, #0
bl CalcStatusDuration
add r6, r0, #1
_02314850:
mov r0, #0
mov r1, r8
mov r2, r0
ldr r5, [r8, #0xb4]
bl SubstitutePlaceholderStringTags
mov r0, r8
mov r1, r7
bl CalcSpeedStage
mov r4, r0
cmp r4, #4
bne _0231489C
ldrb r0, [sp, #0x20]
cmp r0, #0
beq _02314920
ldr r2, _02314930 ; =0x00000DDB
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
b _02314920
_0231489C:
mov r2, #0
b _023148BC
_023148A4:
add r1, r5, r2
ldrb r0, [r1, #0x114 + BOOST_SPEED_OFFSET]
cmp r0, #0
streqb r6, [r1, #0x114 + BOOST_SPEED_OFFSET]
beq _023148C4
add r2, r2, #1
_023148BC:
cmp r2, #5
blt _023148A4
_023148C4:
mov r0, r8
mov r1, r7
bl CalcSpeedStage
mov r6, r0
cmp r4, r6
bne _023148F0
ldr r2, _02314934 ; =0x00000DDA
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
b _02314920
_023148F0:
mov r0, r8
bl ov29_022E44CC
ldr r0, _02314938 ; =ov29_02353318
mov r1, r6, lsl #1
ldrh r2, [r0, r1]
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
mov r0, #1
strb r0, [r5, #0x101]
mov r0, #0
strb r0, [r5, #0x152 + BOOST_SPEED_OFFSET]
_02314920:
mov r0, r8
bl UpdateStatusIconFlags
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_0231492C: .word SPEED_BOOST_TURN_RANGE
#ifdef JAPAN
_02314930: .word 0x00000B1B
_02314934: .word 0x00000B1A
#else
_02314930: .word 0x00000DDB
_02314934: .word 0x00000DDA
#endif
_02314938: .word ov29_02353318
arm_func_end BoostSpeed
arm_func_start BoostSpeedOneStage
BoostSpeedOneStage: ; 0x0231493C
stmdb sp!, {r3, lr}
str r3, [sp]
mov r3, r2
mov r2, #1
bl BoostSpeed
ldmia sp!, {r3, pc}
arm_func_end BoostSpeedOneStage
arm_func_start LowerSpeed
LowerSpeed: ; 0x02314954
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sb, r1
mov sl, r0
mov r0, sb
mov r8, r2
mov r7, r3
bl EntityIsValid__023118B4
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r0, sl
mov r1, sb
mov r2, r7
bl SafeguardIsActive
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r0, sl
mov r1, sb
mov r2, r7
bl IsProtectedFromNegativeStatus
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r0, #0
mov r1, sb
mov r2, r0
ldr r4, [sb, #0xb4]
bl SubstitutePlaceholderStringTags
mov r0, sb
bl CalcSpeedStageWrapper
movs fp, r0
bne _023149E8
cmp r7, #0
beq _02314AA0
ldr r2, _02314AAC ; =0x00000DDC
mov r0, sl
mov r1, sb
bl LogMessageByIdWithPopupCheckUserTarget
b _02314AA0
_023149E8:
mov r5, #0
b _02314A34
_023149F0:
mov r1, #0
b _02314A28
_023149F8:
add r6, r4, r1
#ifdef JAPAN
ldrb r0, [r6, #0x115]
#else
ldrb r0, [r6, #0x119]
#endif
cmp r0, #0
bne _02314A24
ldr r1, _02314AB0 ; =ov10_022C488C
mov r0, sb
mov r2, #1
bl CalcStatusDuration
add r0, r0, #1
#ifdef JAPAN
strb r0, [r6, #0x115]
#else
strb r0, [r6, #0x119]
#endif
b _02314A30
_02314A24:
add r1, r1, #1
_02314A28:
cmp r1, #5
blt _023149F8
_02314A30:
add r5, r5, #1
_02314A34:
cmp r5, r8
blt _023149F0
mov r0, sb
bl CalcSpeedStageWrapper
mov r4, r0
cmp fp, r4
bne _02314A6C
cmp r7, #0
beq _02314AA0
ldr r2, _02314AB4 ; =0x00000DDA
mov r0, sl
mov r1, sb
bl LogMessageByIdWithPopupCheckUserTarget
b _02314AA0
_02314A6C:
mov r0, sb
bl ov29_022E451C
ldr r0, _02314AB8 ; =ov29_02353318
mov r1, r4, lsl #1
ldrh r2, [r0, r1]
mov r0, sl
mov r1, sb
bl LogMessageByIdWithPopupCheckUserTarget
cmp r4, #0
bne _02314AA0
mov r0, sl
mov r1, sb
bl TryActivateQuickFeet
_02314AA0:
mov r0, sb
bl UpdateStatusIconFlags
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
#ifdef JAPAN
_02314AAC: .word 0x00000B1C
_02314AB0: .word ov10_022C488C
_02314AB4: .word 0x00000B1A
#else
_02314AAC: .word 0x00000DDC
_02314AB0: .word ov10_022C488C
_02314AB4: .word 0x00000DDA
#endif
_02314AB8: .word ov29_02353318
arm_func_end LowerSpeed
arm_func_start TrySealMove
TrySealMove: ; 0x02314ABC
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #0x14
mov r5, #0
movs r7, r1
mov r8, r0
mov r6, r2
moveq r0, r5
beq _02314C18
mov r2, #1
bl SafeguardIsActive
cmp r0, #0
movne r0, r5
bne _02314C18
mov r0, r8
mov r1, r7
mov r2, #1
bl IsProtectedFromNegativeStatus
cmp r0, #0
movne r0, r5
bne _02314C18
ldr r0, [r7, #0xb4]
mov r4, r5
#ifdef JAPAN
add ip, r0, #0x120
#else
add ip, r0, #0x124
#endif
mov lr, r4
mov r2, r5
mov r3, #1
add r0, sp, #4
_02314B28:
ldrb r1, [ip, lr, lsl #3]
add sb, ip, lr, lsl #3
tst r1, #1
movne r1, r3
moveq r1, r2
tst r1, #0xff
beq _02314B54
ldrh r1, [sb, #2]
tst r1, #1
streq sb, [r0, r4, lsl #2]
addeq r4, r4, #1
_02314B54:
add lr, lr, #1
cmp lr, #4
blt _02314B28
cmp r6, #0
beq _02314B74
cmp r4, #0
moveq r0, #0
beq _02314C18
_02314B74:
cmp r4, #0
beq _02314BE8
ldr r3, _02314C20 ; =0x00000DBE
mov r5, #8
mov r0, r8
mov r1, r7
mov r2, #1
str r5, [sp]
bl ExclusiveItemEffectIsActiveWithLogging
cmp r0, #0
movne r0, #0
bne _02314C18
cmp r6, #0
movne r0, #1
bne _02314C18
mov r0, r4
bl DungeonRandInt
add r1, sp, #4
ldr r2, [r1, r0, lsl #2]
mov r0, #0
ldrh r1, [r2, #2]
orr r1, r1, #1
strh r1, [r2, #2]
ldrh r1, [r2, #4]
bl ov29_0234B084
mov r0, r8
mov r1, r7
mov r5, #1
bl TryActivateQuickFeet
_02314BE8:
cmp r5, #0
beq _02314C04
ldr r2, _02314C24 ; =0x00000DE3
mov r0, r8
mov r1, r7
bl LogMessageByIdWithPopupCheckUserTarget
b _02314C14
_02314C04:
ldr r2, _02314C28 ; =0x00000DE4
mov r0, r8
mov r1, r7
bl LogMessageByIdWithPopupCheckUserTarget
_02314C14:
mov r0, #1
_02314C18:
add sp, sp, #0x14
ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
#ifdef JAPAN
_02314C20: .word 0x00000AFE
_02314C24: .word 0x00000B23
_02314C28: .word 0x00000B24
#else
_02314C20: .word 0x00000DBE
_02314C24: .word 0x00000DE3
_02314C28: .word 0x00000DE4
#endif
arm_func_end TrySealMove
arm_func_start BoostOrLowerSpeed
BoostOrLowerSpeed: ; 0x02314C2C
stmdb sp!, {r3, r4, r5, lr}
mov r4, r1
mov r5, r0
mov r0, r4
bl EntityIsValid__023118B4
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
mov r0, #0x32
bl DungeonRandOutcome__022EAB20
cmp r0, #0
mov r2, #1
mov r0, r5
beq _02314C74
mov r1, r4
mov r3, r2
bl LowerSpeed
b _02314C84
_02314C74:
mov r1, r4
mov r3, #0
str r2, [sp]
bl BoostSpeed
_02314C84:
mov r0, #1
ldmia sp!, {r3, r4, r5, pc}
arm_func_end BoostOrLowerSpeed
arm_func_start ResetHitChanceStat
ResetHitChanceStat: ; 0x02314C8C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r5, r1
mov r6, r0
mov r0, r5
mov r8, r2
mov r4, r3
mov r7, #0
bl EntityIsValid__023118B4
cmp r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
ldr r0, [r5, #0xb4]
add r1, r0, r8, lsl #1
ldrsh r0, [r1, #0x2c]
cmp r0, #0xa
movne r0, #0xa
movne r7, #1
strneh r0, [r1, #0x2c]
cmp r7, #0
beq _02314CE4
mov r0, r5
bl ov29_022E543C
b _02314CF4
_02314CE4:
cmp r4, #0
beq _02314CF4
mov r0, r5
bl ov29_022E543C
_02314CF4:
mov r0, #0
mov r1, r5
mov r2, r0
bl SubstitutePlaceholderStringTags
cmp r7, #0
beq _02314D20
mov r0, r6
mov r1, r5
#ifdef JAPAN
mov r2, #0xaa0
#else
mov r2, #0xd60
#endif
bl LogMessageByIdWithPopupCheckUserTarget
b _02314D30
_02314D20:
ldr r2, _02314D3C ; =0x00000D61
mov r0, r6
mov r1, r5
bl LogMessageByIdWithPopupCheckUserTarget
_02314D30:
mov r0, r5
bl UpdateStatusIconFlags
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
#ifdef JAPAN
_02314D3C: .word 0x00000AA1
#else
_02314D3C: .word 0x00000D61
#endif
arm_func_end ResetHitChanceStat
arm_func_start ExclusiveItemEffectIsActiveWithLogging
ExclusiveItemEffectIsActiveWithLogging: ; 0x02314D40
stmdb sp!, {r3, r4, r5, r6, r7, lr}
sub sp, sp, #8
mov r6, r1
ldrb r1, [sp, #0x20]
mov r7, r0
mov r0, r6
mov r5, r2
mov r4, r3
bl ExclusiveItemEffectIsActive__023147EC
cmp r0, #0
beq _02314DB8
cmp r5, #0
beq _02314DB0
mov r0, #0
mov r1, r6
mov r2, r0
bl SubstitutePlaceholderStringTags
ldrb r1, [sp, #0x20]
add r2, sp, #0
mov r0, r6
bl GetExclusiveItemWithEffectFromBag
add r1, sp, #0
mov r0, #1
bl ov29_02344B44
mov r0, r7
mov r1, r6
mov r2, r4
bl LogMessageByIdWithPopupCheckUserTarget
_02314DB0:
mov r0, #1
b _02314DBC
_02314DB8:
mov r0, #0
_02314DBC:
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end ExclusiveItemEffectIsActiveWithLogging
arm_func_start ov29_02314DC4
ov29_02314DC4: ; 0x02314DC4
stmdb sp!, {r3, r4, r5, r6, r7, lr}
sub sp, sp, #8
mov r7, r0
mov r0, #0
mov r5, r2
mov r2, r0
mov r6, r1
mov r4, r3
bl SubstitutePlaceholderStringTags
add r2, sp, #0
mov r0, r6
mov r1, r4
bl GetExclusiveItemWithEffectFromBag
add r1, sp, #0
mov r0, #1
bl ov29_02344B44
mov r0, r7
mov r1, r6
mov r2, r5
bl LogMessageByIdWithPopupCheckUserTarget
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end ov29_02314DC4
arm_func_start TryActivateQuickFeet
TryActivateQuickFeet: ; 0x02314E1C
stmdb sp!, {r3, r4, r5, lr}
mov r4, r1
mov r5, r0
mov r0, r4
mov r1, #0x6d
bl AbilityIsActiveVeneer
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
mov r3, #0
mov r0, r5
mov r1, r4
mov r2, #1
str r3, [sp]
bl BoostSpeed
mov r0, #1
ldmia sp!, {r3, r4, r5, pc}
arm_func_end TryActivateQuickFeet
arm_func_start TryInflictTerrifiedStatus
TryInflictTerrifiedStatus: ; 0x02314E60
stmdb sp!, {r3, r4, r5, lr}
ldr r2, _02314EB0 ; =ov10_022C4618
mov r4, r1
ldr ip, [r4, #0xb4]
mov r3, #1
mov r5, r0
ldrsh r1, [r2]
#ifdef JAPAN
strb r3, [ip, #0x103]
mov r0, r4
strb r1, [ip, #0x104]
#else
strb r3, [ip, #0x104]
mov r0, r4
strb r1, [ip, #0x105]
#endif
bl ov29_022E60E4
mov r0, #0
mov r1, r4
mov r2, r0
bl SubstitutePlaceholderStringTags
ldr r2, _02314EB4 ; =0x00000DE5
mov r0, r5
mov r1, r4
bl LogMessageByIdWithPopupCheckUserTarget
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_02314EB0: .word ov10_022C4618
#ifdef JAPAN
_02314EB4: .word 0x00000B25
#else
_02314EB4: .word 0x00000DE5
#endif
arm_func_end TryInflictTerrifiedStatus
arm_func_start TryInflictGrudgeStatus
TryInflictGrudgeStatus: ; 0x02314EB8
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r7, r1
ldr r5, [r7, #0xb4]
mov r8, r0
mov r4, #0
mov r6, r2
mov r2, r4
mov r0, #1
bl SubstitutePlaceholderStringTags
ldrb r0, [r5, #0xfd]
cmp r0, #0
beq _02314F04
cmp r6, #0
beq _02314F2C
ldr r2, _02314F34 ; =0x00000ED1
mov r0, r8
mov r1, r7
bl LogMessageByIdWithPopupCheckUserTarget
b _02314F2C
_02314F04:
mov r4, #1
mov r0, r7
strb r4, [r5, #0xfd]
bl UpdateStatusIconFlags
cmp r6, #0
beq _02314F2C
#ifdef JAPAN
ldr r2, _0231640C ; =0x00000C12
mov r0, r8
mov r1, r7
#else
mov r0, r8
mov r1, r7
mov r2, #0xed0
#endif
bl LogMessageByIdWithPopupCheckUserTarget
_02314F2C:
mov r0, r4
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
#ifdef JAPAN
_02314F34: .word 0x00000C13
_0231640C: .word 0x00000C12
#else
_02314F34: .word 0x00000ED1
#endif
arm_func_end TryInflictGrudgeStatus
arm_func_start TryInflictConfusedStatus
TryInflictConfusedStatus: ; 0x02314F38
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r6, r1
mov r7, r0
mov r0, r6
mov r5, r2
mov r4, r3
bl EntityIsValid__02315118
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
mov r0, r7
mov r1, r6
mov r2, r5
bl SafeguardIsActive
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
mov r0, r7
mov r1, r6
mov r2, r5
bl IsProtectedFromNegativeStatus
cmp r0, #0
mov r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
mov r1, r6
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r0, r6
mov r1, #0x19
bl ItemIsActive__0231513C
cmp r0, #0
beq _02314FD8
cmp r5, #0
beq _02314FD0
ldr r2, _02315100 ; =0x00000DAF
mov r0, r7
mov r1, r6
bl LogMessageByIdWithPopupCheckUserTarget
_02314FD0:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_02314FD8:
mov ip, #2
ldr r3, _02315104 ; =0x00000DBA
mov r0, r7
mov r1, r6
mov r2, r5
str ip, [sp]
bl ExclusiveItemEffectIsActiveWithLogging
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
cmp r7, r6
beq _02315048
cmp r7, #0
moveq r0, #0
beq _02315028
ldr r0, [r7]
cmp r0, #1
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
_02315028:
cmp r0, #0
beq _02315048
mov r0, r7
mov r1, #0x53
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, #0
bne _02315054
_02315048:
mov r0, r6
mov r1, #0x40
bl AbilityIsActiveVeneer
_02315054:
cmp r0, #0
beq _0231507C
cmp r5, #0
beq _02315074
ldr r2, _02315108 ; =0x00000DA7
mov r0, r7
mov r1, r6
bl LogMessageByIdWithPopupCheckUserTarget
_02315074:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_0231507C:
cmp r4, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
mov r0, r6
bl ov29_022E41CC
ldr r4, [r6, #0xb4]
ldrb r0, [r4, #0xd0]
cmp r0, #2
beq _023150E0
ldr r1, _0231510C ; =ov10_022C4890
mov r3, #2
mov r0, r6
mov r2, #1
strb r3, [r4, #0xd0]
bl CalcStatusDuration
add r3, r0, #1
ldr r2, _02315110 ; =0x00000CFE
mov r0, r7
mov r1, r6
strb r3, [r4, #0xd1]
bl LogMessageByIdWithPopupCheckUserTarget
mov r0, r7
mov r1, r6
bl TryActivateQuickFeet
b _023150F0
_023150E0:
ldr r2, _02315114 ; =0x00000CFF
mov r0, r7
mov r1, r6
bl LogMessageByIdWithPopupCheckUserTarget
_023150F0:
mov r0, r6
bl UpdateStatusIconFlags
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
#ifdef JAPAN
#define TRY_INFLICT_CONFUSED_STATUS_OFFSET -0x2C0
#else
#define TRY_INFLICT_CONFUSED_STATUS_OFFSET 0
#endif
_02315100: .word 0x00000DAF + TRY_INFLICT_CONFUSED_STATUS_OFFSET
_02315104: .word 0x00000DBA + TRY_INFLICT_CONFUSED_STATUS_OFFSET
_02315108: .word 0x00000DA7 + TRY_INFLICT_CONFUSED_STATUS_OFFSET
_0231510C: .word ov10_022C4890
_02315110: .word 0x00000CFE + TRY_INFLICT_CONFUSED_STATUS_OFFSET
_02315114: .word 0x00000CFF + TRY_INFLICT_CONFUSED_STATUS_OFFSET
arm_func_end TryInflictConfusedStatus

748
asm/overlay_29_02314810.s Normal file
View File

@@ -0,0 +1,748 @@
.include "asm/macros.inc"
.include "overlay_29_02314810.inc"
.text
arm_func_start BoostSpeed
BoostSpeed: ; 0x02314810
#ifdef JAPAN
#define BOOST_SPEED_OFFSET -4
#else
#define BOOST_SPEED_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r8, r1
mov sb, r0
mov r0, r8
mov r7, r2
mov r6, r3
bl EntityIsValid__023118B4
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
cmp r6, #0
bne _02314850
ldr r1, _0231492C ; =SPEED_BOOST_TURN_RANGE
mov r0, r8
mov r2, #0
bl CalcStatusDuration
add r6, r0, #1
_02314850:
mov r0, #0
mov r1, r8
mov r2, r0
ldr r5, [r8, #0xb4]
bl SubstitutePlaceholderStringTags
mov r0, r8
mov r1, r7
bl CalcSpeedStage
mov r4, r0
cmp r4, #4
bne _0231489C
ldrb r0, [sp, #0x20]
cmp r0, #0
beq _02314920
ldr r2, _02314930 ; =0x00000DDB
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
b _02314920
_0231489C:
mov r2, #0
b _023148BC
_023148A4:
add r1, r5, r2
ldrb r0, [r1, #0x114 + BOOST_SPEED_OFFSET]
cmp r0, #0
streqb r6, [r1, #0x114 + BOOST_SPEED_OFFSET]
beq _023148C4
add r2, r2, #1
_023148BC:
cmp r2, #5
blt _023148A4
_023148C4:
mov r0, r8
mov r1, r7
bl CalcSpeedStage
mov r6, r0
cmp r4, r6
bne _023148F0
ldr r2, _02314934 ; =0x00000DDA
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
b _02314920
_023148F0:
mov r0, r8
bl ov29_022E44CC
ldr r0, _02314938 ; =ov29_02353318
mov r1, r6, lsl #1
ldrh r2, [r0, r1]
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
mov r0, #1
strb r0, [r5, #0x101]
mov r0, #0
strb r0, [r5, #0x152 + BOOST_SPEED_OFFSET]
_02314920:
mov r0, r8
bl UpdateStatusIconFlags
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_0231492C: .word SPEED_BOOST_TURN_RANGE
#ifdef JAPAN
_02314930: .word 0x00000B1B
_02314934: .word 0x00000B1A
#else
_02314930: .word 0x00000DDB
_02314934: .word 0x00000DDA
#endif
_02314938: .word ov29_02353318
arm_func_end BoostSpeed
arm_func_start BoostSpeedOneStage
BoostSpeedOneStage: ; 0x0231493C
stmdb sp!, {r3, lr}
str r3, [sp]
mov r3, r2
mov r2, #1
bl BoostSpeed
ldmia sp!, {r3, pc}
arm_func_end BoostSpeedOneStage
arm_func_start LowerSpeed
LowerSpeed: ; 0x02314954
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sb, r1
mov sl, r0
mov r0, sb
mov r8, r2
mov r7, r3
bl EntityIsValid__023118B4
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r0, sl
mov r1, sb
mov r2, r7
bl SafeguardIsActive
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r0, sl
mov r1, sb
mov r2, r7
bl IsProtectedFromNegativeStatus
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r0, #0
mov r1, sb
mov r2, r0
ldr r4, [sb, #0xb4]
bl SubstitutePlaceholderStringTags
mov r0, sb
bl CalcSpeedStageWrapper
movs fp, r0
bne _023149E8
cmp r7, #0
beq _02314AA0
ldr r2, _02314AAC ; =0x00000DDC
mov r0, sl
mov r1, sb
bl LogMessageByIdWithPopupCheckUserTarget
b _02314AA0
_023149E8:
mov r5, #0
b _02314A34
_023149F0:
mov r1, #0
b _02314A28
_023149F8:
add r6, r4, r1
#ifdef JAPAN
ldrb r0, [r6, #0x115]
#else
ldrb r0, [r6, #0x119]
#endif
cmp r0, #0
bne _02314A24
ldr r1, _02314AB0 ; =ov10_022C488C
mov r0, sb
mov r2, #1
bl CalcStatusDuration
add r0, r0, #1
#ifdef JAPAN
strb r0, [r6, #0x115]
#else
strb r0, [r6, #0x119]
#endif
b _02314A30
_02314A24:
add r1, r1, #1
_02314A28:
cmp r1, #5
blt _023149F8
_02314A30:
add r5, r5, #1
_02314A34:
cmp r5, r8
blt _023149F0
mov r0, sb
bl CalcSpeedStageWrapper
mov r4, r0
cmp fp, r4
bne _02314A6C
cmp r7, #0
beq _02314AA0
ldr r2, _02314AB4 ; =0x00000DDA
mov r0, sl
mov r1, sb
bl LogMessageByIdWithPopupCheckUserTarget
b _02314AA0
_02314A6C:
mov r0, sb
bl ov29_022E451C
ldr r0, _02314AB8 ; =ov29_02353318
mov r1, r4, lsl #1
ldrh r2, [r0, r1]
mov r0, sl
mov r1, sb
bl LogMessageByIdWithPopupCheckUserTarget
cmp r4, #0
bne _02314AA0
mov r0, sl
mov r1, sb
bl TryActivateQuickFeet
_02314AA0:
mov r0, sb
bl UpdateStatusIconFlags
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
#ifdef JAPAN
_02314AAC: .word 0x00000B1C
_02314AB0: .word ov10_022C488C
_02314AB4: .word 0x00000B1A
#else
_02314AAC: .word 0x00000DDC
_02314AB0: .word ov10_022C488C
_02314AB4: .word 0x00000DDA
#endif
_02314AB8: .word ov29_02353318
arm_func_end LowerSpeed
arm_func_start TrySealMove
TrySealMove: ; 0x02314ABC
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #0x14
mov r5, #0
movs r7, r1
mov r8, r0
mov r6, r2
moveq r0, r5
beq _02314C18
mov r2, #1
bl SafeguardIsActive
cmp r0, #0
movne r0, r5
bne _02314C18
mov r0, r8
mov r1, r7
mov r2, #1
bl IsProtectedFromNegativeStatus
cmp r0, #0
movne r0, r5
bne _02314C18
ldr r0, [r7, #0xb4]
mov r4, r5
#ifdef JAPAN
add ip, r0, #0x120
#else
add ip, r0, #0x124
#endif
mov lr, r4
mov r2, r5
mov r3, #1
add r0, sp, #4
_02314B28:
ldrb r1, [ip, lr, lsl #3]
add sb, ip, lr, lsl #3
tst r1, #1
movne r1, r3
moveq r1, r2
tst r1, #0xff
beq _02314B54
ldrh r1, [sb, #2]
tst r1, #1
streq sb, [r0, r4, lsl #2]
addeq r4, r4, #1
_02314B54:
add lr, lr, #1
cmp lr, #4
blt _02314B28
cmp r6, #0
beq _02314B74
cmp r4, #0
moveq r0, #0
beq _02314C18
_02314B74:
cmp r4, #0
beq _02314BE8
ldr r3, _02314C20 ; =0x00000DBE
mov r5, #8
mov r0, r8
mov r1, r7
mov r2, #1
str r5, [sp]
bl ExclusiveItemEffectIsActiveWithLogging
cmp r0, #0
movne r0, #0
bne _02314C18
cmp r6, #0
movne r0, #1
bne _02314C18
mov r0, r4
bl DungeonRandInt
add r1, sp, #4
ldr r2, [r1, r0, lsl #2]
mov r0, #0
ldrh r1, [r2, #2]
orr r1, r1, #1
strh r1, [r2, #2]
ldrh r1, [r2, #4]
bl ov29_0234B084
mov r0, r8
mov r1, r7
mov r5, #1
bl TryActivateQuickFeet
_02314BE8:
cmp r5, #0
beq _02314C04
ldr r2, _02314C24 ; =0x00000DE3
mov r0, r8
mov r1, r7
bl LogMessageByIdWithPopupCheckUserTarget
b _02314C14
_02314C04:
ldr r2, _02314C28 ; =0x00000DE4
mov r0, r8
mov r1, r7
bl LogMessageByIdWithPopupCheckUserTarget
_02314C14:
mov r0, #1
_02314C18:
add sp, sp, #0x14
ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
#ifdef JAPAN
_02314C20: .word 0x00000AFE
_02314C24: .word 0x00000B23
_02314C28: .word 0x00000B24
#else
_02314C20: .word 0x00000DBE
_02314C24: .word 0x00000DE3
_02314C28: .word 0x00000DE4
#endif
arm_func_end TrySealMove
arm_func_start BoostOrLowerSpeed
BoostOrLowerSpeed: ; 0x02314C2C
stmdb sp!, {r3, r4, r5, lr}
mov r4, r1
mov r5, r0
mov r0, r4
bl EntityIsValid__023118B4
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
mov r0, #0x32
bl DungeonRandOutcome__022EAB20
cmp r0, #0
mov r2, #1
mov r0, r5
beq _02314C74
mov r1, r4
mov r3, r2
bl LowerSpeed
b _02314C84
_02314C74:
mov r1, r4
mov r3, #0
str r2, [sp]
bl BoostSpeed
_02314C84:
mov r0, #1
ldmia sp!, {r3, r4, r5, pc}
arm_func_end BoostOrLowerSpeed
arm_func_start ResetHitChanceStat
ResetHitChanceStat: ; 0x02314C8C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r5, r1
mov r6, r0
mov r0, r5
mov r8, r2
mov r4, r3
mov r7, #0
bl EntityIsValid__023118B4
cmp r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
ldr r0, [r5, #0xb4]
add r1, r0, r8, lsl #1
ldrsh r0, [r1, #0x2c]
cmp r0, #0xa
movne r0, #0xa
movne r7, #1
strneh r0, [r1, #0x2c]
cmp r7, #0
beq _02314CE4
mov r0, r5
bl ov29_022E543C
b _02314CF4
_02314CE4:
cmp r4, #0
beq _02314CF4
mov r0, r5
bl ov29_022E543C
_02314CF4:
mov r0, #0
mov r1, r5
mov r2, r0
bl SubstitutePlaceholderStringTags
cmp r7, #0
beq _02314D20
mov r0, r6
mov r1, r5
#ifdef JAPAN
mov r2, #0xaa0
#else
mov r2, #0xd60
#endif
bl LogMessageByIdWithPopupCheckUserTarget
b _02314D30
_02314D20:
ldr r2, _02314D3C ; =0x00000D61
mov r0, r6
mov r1, r5
bl LogMessageByIdWithPopupCheckUserTarget
_02314D30:
mov r0, r5
bl UpdateStatusIconFlags
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
#ifdef JAPAN
_02314D3C: .word 0x00000AA1
#else
_02314D3C: .word 0x00000D61
#endif
arm_func_end ResetHitChanceStat
arm_func_start ExclusiveItemEffectIsActiveWithLogging
ExclusiveItemEffectIsActiveWithLogging: ; 0x02314D40
stmdb sp!, {r3, r4, r5, r6, r7, lr}
sub sp, sp, #8
mov r6, r1
ldrb r1, [sp, #0x20]
mov r7, r0
mov r0, r6
mov r5, r2
mov r4, r3
bl ExclusiveItemEffectIsActive__023147EC
cmp r0, #0
beq _02314DB8
cmp r5, #0
beq _02314DB0
mov r0, #0
mov r1, r6
mov r2, r0
bl SubstitutePlaceholderStringTags
ldrb r1, [sp, #0x20]
add r2, sp, #0
mov r0, r6
bl GetExclusiveItemWithEffectFromBag
add r1, sp, #0
mov r0, #1
bl ov29_02344B44
mov r0, r7
mov r1, r6
mov r2, r4
bl LogMessageByIdWithPopupCheckUserTarget
_02314DB0:
mov r0, #1
b _02314DBC
_02314DB8:
mov r0, #0
_02314DBC:
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end ExclusiveItemEffectIsActiveWithLogging
arm_func_start ov29_02314DC4
ov29_02314DC4: ; 0x02314DC4
stmdb sp!, {r3, r4, r5, r6, r7, lr}
sub sp, sp, #8
mov r7, r0
mov r0, #0
mov r5, r2
mov r2, r0
mov r6, r1
mov r4, r3
bl SubstitutePlaceholderStringTags
add r2, sp, #0
mov r0, r6
mov r1, r4
bl GetExclusiveItemWithEffectFromBag
add r1, sp, #0
mov r0, #1
bl ov29_02344B44
mov r0, r7
mov r1, r6
mov r2, r5
bl LogMessageByIdWithPopupCheckUserTarget
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end ov29_02314DC4
arm_func_start TryActivateQuickFeet
TryActivateQuickFeet: ; 0x02314E1C
stmdb sp!, {r3, r4, r5, lr}
mov r4, r1
mov r5, r0
mov r0, r4
mov r1, #0x6d
bl AbilityIsActiveVeneer
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
mov r3, #0
mov r0, r5
mov r1, r4
mov r2, #1
str r3, [sp]
bl BoostSpeed
mov r0, #1
ldmia sp!, {r3, r4, r5, pc}
arm_func_end TryActivateQuickFeet
arm_func_start TryInflictTerrifiedStatus
TryInflictTerrifiedStatus: ; 0x02314E60
stmdb sp!, {r3, r4, r5, lr}
ldr r2, _02314EB0 ; =ov10_022C4618
mov r4, r1
ldr ip, [r4, #0xb4]
mov r3, #1
mov r5, r0
ldrsh r1, [r2]
#ifdef JAPAN
strb r3, [ip, #0x103]
mov r0, r4
strb r1, [ip, #0x104]
#else
strb r3, [ip, #0x104]
mov r0, r4
strb r1, [ip, #0x105]
#endif
bl ov29_022E60E4
mov r0, #0
mov r1, r4
mov r2, r0
bl SubstitutePlaceholderStringTags
ldr r2, _02314EB4 ; =0x00000DE5
mov r0, r5
mov r1, r4
bl LogMessageByIdWithPopupCheckUserTarget
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_02314EB0: .word ov10_022C4618
#ifdef JAPAN
_02314EB4: .word 0x00000B25
#else
_02314EB4: .word 0x00000DE5
#endif
arm_func_end TryInflictTerrifiedStatus
arm_func_start TryInflictGrudgeStatus
TryInflictGrudgeStatus: ; 0x02314EB8
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r7, r1
ldr r5, [r7, #0xb4]
mov r8, r0
mov r4, #0
mov r6, r2
mov r2, r4
mov r0, #1
bl SubstitutePlaceholderStringTags
ldrb r0, [r5, #0xfd]
cmp r0, #0
beq _02314F04
cmp r6, #0
beq _02314F2C
ldr r2, _02314F34 ; =0x00000ED1
mov r0, r8
mov r1, r7
bl LogMessageByIdWithPopupCheckUserTarget
b _02314F2C
_02314F04:
mov r4, #1
mov r0, r7
strb r4, [r5, #0xfd]
bl UpdateStatusIconFlags
cmp r6, #0
beq _02314F2C
#ifdef JAPAN
ldr r2, _0231640C ; =0x00000C12
mov r0, r8
mov r1, r7
#else
mov r0, r8
mov r1, r7
mov r2, #0xed0
#endif
bl LogMessageByIdWithPopupCheckUserTarget
_02314F2C:
mov r0, r4
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
#ifdef JAPAN
_02314F34: .word 0x00000C13
_0231640C: .word 0x00000C12
#else
_02314F34: .word 0x00000ED1
#endif
arm_func_end TryInflictGrudgeStatus
arm_func_start TryInflictConfusedStatus
TryInflictConfusedStatus: ; 0x02314F38
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r6, r1
mov r7, r0
mov r0, r6
mov r5, r2
mov r4, r3
bl EntityIsValid__02315118
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
mov r0, r7
mov r1, r6
mov r2, r5
bl SafeguardIsActive
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
mov r0, r7
mov r1, r6
mov r2, r5
bl IsProtectedFromNegativeStatus
cmp r0, #0
mov r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
mov r1, r6
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r0, r6
mov r1, #0x19
bl ItemIsActive__0231513C
cmp r0, #0
beq _02314FD8
cmp r5, #0
beq _02314FD0
ldr r2, _02315100 ; =0x00000DAF
mov r0, r7
mov r1, r6
bl LogMessageByIdWithPopupCheckUserTarget
_02314FD0:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_02314FD8:
mov ip, #2
ldr r3, _02315104 ; =0x00000DBA
mov r0, r7
mov r1, r6
mov r2, r5
str ip, [sp]
bl ExclusiveItemEffectIsActiveWithLogging
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
cmp r7, r6
beq _02315048
cmp r7, #0
moveq r0, #0
beq _02315028
ldr r0, [r7]
cmp r0, #1
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
_02315028:
cmp r0, #0
beq _02315048
mov r0, r7
mov r1, #0x53
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, #0
bne _02315054
_02315048:
mov r0, r6
mov r1, #0x40
bl AbilityIsActiveVeneer
_02315054:
cmp r0, #0
beq _0231507C
cmp r5, #0
beq _02315074
ldr r2, _02315108 ; =0x00000DA7
mov r0, r7
mov r1, r6
bl LogMessageByIdWithPopupCheckUserTarget
_02315074:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_0231507C:
cmp r4, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
mov r0, r6
bl ov29_022E41CC
ldr r4, [r6, #0xb4]
ldrb r0, [r4, #0xd0]
cmp r0, #2
beq _023150E0
ldr r1, _0231510C ; =ov10_022C4890
mov r3, #2
mov r0, r6
mov r2, #1
strb r3, [r4, #0xd0]
bl CalcStatusDuration
add r3, r0, #1
ldr r2, _02315110 ; =0x00000CFE
mov r0, r7
mov r1, r6
strb r3, [r4, #0xd1]
bl LogMessageByIdWithPopupCheckUserTarget
mov r0, r7
mov r1, r6
bl TryActivateQuickFeet
b _023150F0
_023150E0:
ldr r2, _02315114 ; =0x00000CFF
mov r0, r7
mov r1, r6
bl LogMessageByIdWithPopupCheckUserTarget
_023150F0:
mov r0, r6
bl UpdateStatusIconFlags
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
#ifdef JAPAN
#define TRY_INFLICT_CONFUSED_STATUS_OFFSET -0x2C0
#else
#define TRY_INFLICT_CONFUSED_STATUS_OFFSET 0
#endif
_02315100: .word 0x00000DAF + TRY_INFLICT_CONFUSED_STATUS_OFFSET
_02315104: .word 0x00000DBA + TRY_INFLICT_CONFUSED_STATUS_OFFSET
_02315108: .word 0x00000DA7 + TRY_INFLICT_CONFUSED_STATUS_OFFSET
_0231510C: .word ov10_022C4890
_02315110: .word 0x00000CFE + TRY_INFLICT_CONFUSED_STATUS_OFFSET
_02315114: .word 0x00000CFF + TRY_INFLICT_CONFUSED_STATUS_OFFSET
arm_func_end TryInflictConfusedStatus

View File

@@ -767,585 +767,3 @@ _0231979C:
.align 2, 0
_023197A4: .word ov10_022C4648
arm_func_end MirrorMoveIsActive
arm_func_start ExclusiveItemEffectIsActive__023197A8
ExclusiveItemEffectIsActive__023197A8: ; 0x023197A8
stmdb sp!, {r3, lr}
ldr r2, [r0, #0xb4]
ldrb r0, [r2, #6]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, pc}
#ifdef JAPAN
add r0, r2, #0x224
#else
add r0, r2, #0x228
#endif
bl ExclusiveItemEffectFlagTest
ldmia sp!, {r3, pc}
arm_func_end ExclusiveItemEffectIsActive__023197A8
arm_func_start MistIsActive
MistIsActive: ; 0x023197CC
stmdb sp!, {r4, lr}
mov r4, r0
bl EntityIsValid__02318E4C
cmp r0, #0
beq _0231980C
ldr r0, [r4, #0xb4]
ldrb r0, [r0, #0xd5]
cmp r0, #0xe
moveq r0, #1
ldmeqia sp!, {r4, pc}
mov r0, r4
mov r1, #0x26
bl ExclusiveItemEffectIsActive__023197A8
cmp r0, #0
movne r0, #2
ldmneia sp!, {r4, pc}
_0231980C:
mov r0, #0
ldmia sp!, {r4, pc}
arm_func_end MistIsActive
arm_func_start Conversion2IsActive
Conversion2IsActive: ; 0x02319814
stmdb sp!, {r4, lr}
mov r4, r0
bl EntityIsValid__02318E4C
cmp r0, #0
beq _02319854
ldr r0, [r4, #0xb4]
ldrb r0, [r0, #0xd5]
cmp r0, #0xc
moveq r0, #1
ldmeqia sp!, {r4, pc}
mov r0, r4
mov r1, #0x27
bl ExclusiveItemEffectIsActive__023197A8
cmp r0, #0
movne r0, #2
ldmneia sp!, {r4, pc}
_02319854:
mov r0, #0
ldmia sp!, {r4, pc}
arm_func_end Conversion2IsActive
arm_func_start ov29_0231985C
ov29_0231985C: ; 0x0231985C
mov r2, #0
ldr r0, _0231987C ; =CAN_ATTACK_IN_DIRECTION
mov r1, r2
_02319868:
strb r1, [r0, r2]
add r2, r2, #1
cmp r2, #8
blt _02319868
bx lr
.align 2, 0
_0231987C: .word CAN_ATTACK_IN_DIRECTION
arm_func_end ov29_0231985C
; https://decomp.me/scratch/jVfou
#ifndef NONMATCHING
arm_func_start AiConsiderMove
AiConsiderMove: ; 0x02319880
#ifdef JAPAN
#define AI_CONSIDER_MOVE_OFFSET -0xA4
#else
#define AI_CONSIDER_MOVE_OFFSET 0
#endif
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x2c
mov sl, r1
str r0, [sp, #8]
mov r0, #1
mov sb, r2
ldr r6, [sl, #0xb4]
str r0, [sp, #0x14]
mov r5, #0
bl ov29_0231985C
mov r0, sl
mov r1, sb
mov r2, #1
bl GetEntityMoveTargetAndRange
str r0, [sp, #0x24]
mov r0, sl
mov r1, #8
bl IqSkillIsEnabled
mov r4, r0
ldr r0, [sp, #8]
mov r1, r5
strb r1, [r0]
ldrb r0, [r6, #0xd0]
cmp r0, #5
bne _023198F8
mov r0, sb
bl IsAffectedByTaunt
cmp r0, #0
moveq r0, #1
beq _02319F64
_023198F8:
cmp r4, #0
beq _02319918
mov r0, sl
mov r1, sb
bl StatusCheckerCheck
cmp r0, #0
moveq r0, #1
beq _02319F64
_02319918:
mov r0, sb
mov r1, #0
bl GetMoveTargetAndRange
ldr r1, _02319F6C ; =0x00000273
cmp r0, r1
bne _02319958
ldrsh r3, [r6, #0x12]
ldrsh r2, [r6, #0x16]
add r0, r1, #0x174
add r2, r3, r2
cmp r2, r0
movgt r2, r0
ldrsh r0, [r6, #0x10]
cmp r0, r2
moveq r0, #1
beq _02319F64
_02319958:
ldr r0, [sp, #0x24]
ands r7, r0, #0xf0
cmpne r7, #0x10
cmpne r7, #0x20
bne _02319A54
mov r0, sl
mov r1, #1
bl IsBlinded
cmp r0, #0
beq _023199C0
ldrb r6, [r6, #0x4c]
ldr r4, _02319F70 ; =CAN_ATTACK_IN_DIRECTION
ldrb r0, [r4, r6]
cmp r0, #0
bne _02319E88
ldr r1, _02319F74 ; =POTENTIAL_ATTACK_TARGET_DIRECTIONS
mov r3, #1
ldr r0, _02319F78 ; =POTENTIAL_ATTACK_TARGET_WEIGHTS
mov r2, #0x63
strb r3, [r4, r6]
strb r6, [r1]
str r2, [r0]
mov r1, #0
str r1, [r0, #0x20]
add r5, r5, #1
b _02319E88
_023199C0:
ldr fp, _02319F7C ; =DIRECTIONS_XY
mov r8, #0
_023199C8:
mov r1, r8, lsl #2
add r0, fp, r8, lsl #2
ldrsh r6, [sl, #4]
ldrsh r3, [fp, r1]
ldrsh r2, [sl, #6]
ldrsh r1, [r0, #2]
add r0, r6, r3
add r1, r2, r1
bl GetTile
ldr r6, [r0, #0xc]
cmp r6, #0
beq _02319A44
ldr r0, [r6]
cmp r0, #1
bne _02319A44
cmp r7, #0x10
cmpne r7, #0x20
beq _02319A24
mov r0, sl
mov r1, r8
bl CanAttackInDirection
cmp r0, #0
beq _02319A44
_02319A24:
str sb, [sp]
ldr r1, [sp, #0x24]
mov r0, r5
mov r2, sl
mov r3, r6
str r4, [sp, #4]
bl TryAddTargetToAiTargetList
mov r5, r0
_02319A44:
add r8, r8, #1
cmp r8, #8
blt _023199C8
b _02319E88
_02319A54:
cmp r7, #0x30
bne _02319AC8
ldr r7, _02319F80 ; =DUNGEON_PTR
mov r6, #0
_02319A64:
ldr r0, [r7]
add r0, r0, r6, lsl #2
add r0, r0, #0x12000
ldr r8, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET]
mov r0, r8
bl EntityIsValid__02319F8C
cmp r0, #0
beq _02319AB8
mov r0, sl
mov r1, r8
bl CanSeeTarget
cmp r0, #0
beq _02319AB8
str sb, [sp]
ldr r1, [sp, #0x24]
mov r0, r5
mov r2, sl
mov r3, r8
str r4, [sp, #4]
bl TryAddTargetToAiTargetList
mov r5, r0
_02319AB8:
add r6, r6, #1
cmp r6, #0x14
blt _02319A64
b _02319E88
_02319AC8:
cmp r7, #0x40
bne _02319BB0
mov r8, #0
_02319AD4:
ldr r0, _02319F7C ; =DIRECTIONS_XY
mov r2, r8, lsl #2
add r0, r0, r8, lsl #2
ldrsh r6, [r0, #2]
ldr r0, _02319F7C ; =DIRECTIONS_XY
ldrsh r1, [sl, #6]
ldrsh r7, [r0, r2]
ldrsh r0, [sl, #4]
add r1, r1, r6
add r0, r0, r7
bl GetTile
mov fp, r0
mov r0, sl
mov r1, r8
bl CanAttackInDirection
cmp r0, #0
beq _02319BA0
ldr r3, [fp, #0xc]
cmp r3, #0
beq _02319B58
ldr r0, [r3]
cmp r0, #1
bne _02319B58
str sb, [sp]
ldr r1, [sp, #0x24]
mov r0, r5
mov r2, sl
str r4, [sp, #4]
mov fp, r5
bl TryAddTargetToAiTargetList
mov r5, r0
cmp fp, r5
bne _02319BA0
_02319B58:
ldrsh r0, [sl, #4]
ldrsh r1, [sl, #6]
add r0, r0, r7, lsl #1
add r1, r1, r6, lsl #1
bl GetTile
ldr r3, [r0, #0xc]
cmp r3, #0
beq _02319BA0
ldr r0, [r3]
cmp r0, #1
bne _02319BA0
str sb, [sp]
ldr r1, [sp, #0x24]
mov r0, r5
mov r2, sl
str r4, [sp, #4]
bl TryAddTargetToAiTargetList
mov r5, r0
_02319BA0:
add r8, r8, #1
cmp r8, #8
blt _02319AD4
b _02319E88
_02319BB0:
cmp r7, #0x50
cmpne r7, #0x80
cmpne r7, #0x90
bne _02319E00
cmp r7, #0x50
moveq r0, #0xa
streq r0, [sp, #0xc]
movne r0, #1
strne r0, [sp, #0xc]
cmp r7, #0x90
moveq r0, #2
streq r0, [sp, #0xc]
mov r0, #0
str r0, [sp, #0x20]
mvn r0, #0
str r0, [sp, #0x28]
_02319BF0:
ldr r0, _02319F80 ; =DUNGEON_PTR
ldr r1, [r0]
ldr r0, [sp, #0x20]
add r0, r1, r0, lsl #2
add r0, r0, #0x12000
ldr r0, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET]
str r0, [sp, #0x18]
bl EntityIsValid__02319F8C
cmp r0, #0
ldrne r0, [sp, #0x18]
cmpne sl, r0
beq _02319DE8
ldr r1, [sp, #0x18]
add r0, sl, #4
add r1, r1, #4
bl GetDirectionTowardsPosition
ldr r1, _02319F70 ; =CAN_ATTACK_IN_DIRECTION
str r0, [sp, #0x1c]
ldrb r0, [r1, r0]
cmp r0, #0
bne _02319DE8
ldr r1, [sp, #0x18]
mov r0, sl
bl CanSeeTarget
cmp r0, #0
beq _02319DE8
ldr r0, [sp, #0x18]
ldrsh r6, [sl, #4]
ldrsh fp, [r0, #4]
sub r0, r6, fp
bl abs
str r0, [sp, #0x10]
ldr r0, [sp, #0x18]
ldrsh r8, [sl, #6]
ldrsh r7, [r0, #6]
sub r0, r8, r7
bl abs
ldr r1, [sp, #0x10]
cmp r1, r0
movgt r2, r1
movle r2, r0
cmp r2, #0xa
movgt r0, #0
bgt _02319D50
ldr r1, [sp, #0xc]
cmp r2, r1
movgt r0, #0
bgt _02319D50
ldr r1, [sp, #0x10]
cmp r1, r0
ldr r0, [sp, #0x28]
bne _02319CF8
cmp r6, fp
cmplt r8, r7
movlt r0, #1
blt _02319D44
cmp r6, fp
bge _02319CE4
cmp r8, r7
movgt r0, #3
bgt _02319D44
_02319CE4:
cmp r6, fp
cmpgt r8, r7
movgt r0, #5
movle r0, #7
b _02319D44
_02319CF8:
cmp r6, fp
bne _02319D0C
cmp r8, r7
movlt r0, #0
blt _02319D44
_02319D0C:
cmp r6, fp
bge _02319D20
cmp r8, r7
moveq r0, #2
beq _02319D44
_02319D20:
cmp r6, fp
bne _02319D34
cmp r8, r7
movgt r0, #4
bgt _02319D44
_02319D34:
cmp r6, fp
ble _02319D44
cmp r8, r7
moveq r0, #6
_02319D44:
cmp r0, #0
movge r0, #1
movlt r0, #0
_02319D50:
cmp r0, #0
beq _02319DE8
str r4, [sp]
ldr r0, [sp, #0x24]
ldr r2, [sp, #0x18]
mov r1, sl
mov r3, sb
bl IsAiTargetEligible
cmp r0, #0
beq _02319DE8
ldr r1, [sp, #0x18]
ldr r2, [sp, #0x1c]
ldr r3, [sp, #0xc]
mov r0, sl
bl IsTargetInRange
cmp r0, #0
beq _02319DE8
ldr r1, _02319F70 ; =CAN_ATTACK_IN_DIRECTION
ldr r0, [sp, #0x1c]
mov r2, #1
strb r2, [r1, r0]
mov r1, r0
ldr r0, _02319F74 ; =POTENTIAL_ATTACK_TARGET_DIRECTIONS
strb r1, [r0, r5]
mov r0, sl
mov r1, sb
bl GetMoveTypeForMonster
mov r3, r0
ldr r1, [sp, #0x24]
ldr r2, [sp, #0x18]
mov r0, sl
bl WeightMove
ldr r1, _02319F84 ; =POTENTIAL_ATTACK_TARGET_WEIGHTS
str r0, [r1, r5, lsl #2]
ldr r1, [sp, #0x18]
ldr r0, _02319F88 ; =POTENTIAL_TARGETS
str r1, [r0, r5, lsl #2]
add r5, r5, #1
_02319DE8:
ldr r0, [sp, #0x20]
add r0, r0, #1
str r0, [sp, #0x20]
cmp r0, #0x14
blt _02319BF0
b _02319E88
_02319E00:
cmp r7, #0x60
bne _02319E60
ldr r7, _02319F80 ; =DUNGEON_PTR
mov r6, #0
_02319E10:
ldr r0, [r7]
add r0, r0, r6, lsl #2
add r0, r0, #0x12000
ldr r8, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET]
mov r0, r8
bl EntityIsValid__02319F8C
cmp r0, #0
beq _02319E50
str sb, [sp]
ldr r1, [sp, #0x24]
mov r0, r5
mov r2, sl
mov r3, r8
str r4, [sp, #4]
bl TryAddTargetToAiTargetList
mov r5, r0
_02319E50:
add r6, r6, #1
cmp r6, #0x14
blt _02319E10
b _02319E88
_02319E60:
cmp r7, #0x70
bne _02319E88
str sb, [sp]
ldr r1, [sp, #0x24]
mov r2, sl
mov r3, sl
mov r0, #0
str r4, [sp, #4]
bl TryAddTargetToAiTargetList
mov r5, r0
_02319E88:
cmp r5, #0
ldreq r0, [sp, #8]
moveq r1, #0
streqb r1, [r0]
beq _02319F60
mov r0, #0
str r0, [sp, #0x14]
mov r4, r0
ldr r3, _02319F84 ; =POTENTIAL_ATTACK_TARGET_WEIGHTS
b _02319EC4
_02319EB0:
ldr r2, [r3, r4, lsl #2]
ldr r1, [sp, #0x14]
add r4, r4, #1
cmp r1, r2
strlt r2, [sp, #0x14]
_02319EC4:
cmp r4, r5
blt _02319EB0
mov r6, #0
mov r2, r6
ldr r4, _02319F84 ; =POTENTIAL_ATTACK_TARGET_WEIGHTS
b _02319EF0
_02319EDC:
ldr r3, [r4, r6, lsl #2]
ldr r1, [sp, #0x14]
cmp r1, r3
strne r2, [r4, r6, lsl #2]
add r6, r6, #1
_02319EF0:
cmp r6, r5
blt _02319EDC
mov r3, #0
ldr r2, _02319F84 ; =POTENTIAL_ATTACK_TARGET_WEIGHTS
b _02319F10
_02319F04:
ldr r1, [r2, r3, lsl #2]
add r3, r3, #1
add r0, r0, r1
_02319F10:
cmp r3, r5
blt _02319F04
bl DungeonRandInt
mov r3, #0
ldr r2, _02319F84 ; =POTENTIAL_ATTACK_TARGET_WEIGHTS
b _02319F38
_02319F28:
ldr r1, [r2, r3, lsl #2]
subs r0, r0, r1
bmi _02319F40
add r3, r3, #1
_02319F38:
cmp r3, r5
blt _02319F28
_02319F40:
ldr r1, _02319F74 ; =POTENTIAL_ATTACK_TARGET_DIRECTIONS
ldr r0, [sp, #8]
mov r2, #1
strb r2, [r0]
ldrb r2, [r1, r3]
mov r1, #8
strb r2, [r0, #1]
str r1, [r0, #4]
_02319F60:
ldr r0, [sp, #0x14]
_02319F64:
add sp, sp, #0x2c
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02319F6C: .word 0x00000273
_02319F70: .word CAN_ATTACK_IN_DIRECTION
_02319F74: .word POTENTIAL_ATTACK_TARGET_DIRECTIONS
_02319F78: .word POTENTIAL_ATTACK_TARGET_WEIGHTS
_02319F7C: .word DIRECTIONS_XY
_02319F80: .word DUNGEON_PTR
_02319F84: .word POTENTIAL_ATTACK_TARGET_WEIGHTS
_02319F88: .word POTENTIAL_TARGETS
arm_func_end AiConsiderMove
#endif

50
asm/overlay_29_023197CC.s Normal file
View File

@@ -0,0 +1,50 @@
.include "asm/macros.inc"
.include "overlay_29_023197CC.inc"
.text
arm_func_start MistIsActive
MistIsActive: ; 0x023197CC
stmdb sp!, {r4, lr}
mov r4, r0
bl EntityIsValid__02318E4C
cmp r0, #0
beq _0231980C
ldr r0, [r4, #0xb4]
ldrb r0, [r0, #0xd5]
cmp r0, #0xe
moveq r0, #1
ldmeqia sp!, {r4, pc}
mov r0, r4
mov r1, #0x26
bl ExclusiveItemEffectIsActive__023197A8
cmp r0, #0
movne r0, #2
ldmneia sp!, {r4, pc}
_0231980C:
mov r0, #0
ldmia sp!, {r4, pc}
arm_func_end MistIsActive
arm_func_start Conversion2IsActive
Conversion2IsActive: ; 0x02319814
stmdb sp!, {r4, lr}
mov r4, r0
bl EntityIsValid__02318E4C
cmp r0, #0
beq _02319854
ldr r0, [r4, #0xb4]
ldrb r0, [r0, #0xd5]
cmp r0, #0xc
moveq r0, #1
ldmeqia sp!, {r4, pc}
mov r0, r4
mov r1, #0x27
bl ExclusiveItemEffectIsActive__023197A8
cmp r0, #0
movne r0, #2
ldmneia sp!, {r4, pc}
_02319854:
mov r0, #0
ldmia sp!, {r4, pc}
arm_func_end Conversion2IsActive

508
asm/overlay_29_02319880.s Normal file
View File

@@ -0,0 +1,508 @@
.include "asm/macros.inc"
.include "overlay_29_02319880.inc"
.text
; https://decomp.me/scratch/jVfou
#ifndef NONMATCHING
arm_func_start AiConsiderMove
AiConsiderMove: ; 0x02319880
#ifdef JAPAN
#define AI_CONSIDER_MOVE_OFFSET -0xA4
#else
#define AI_CONSIDER_MOVE_OFFSET 0
#endif
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x2c
mov sl, r1
str r0, [sp, #8]
mov r0, #1
mov sb, r2
ldr r6, [sl, #0xb4]
str r0, [sp, #0x14]
mov r5, #0
bl ResetAiCanAttackInDirection
mov r0, sl
mov r1, sb
mov r2, #1
bl GetEntityMoveTargetAndRange
str r0, [sp, #0x24]
mov r0, sl
mov r1, #8
bl IqSkillIsEnabled
mov r4, r0
ldr r0, [sp, #8]
mov r1, r5
strb r1, [r0]
ldrb r0, [r6, #0xd0]
cmp r0, #5
bne _023198F8
mov r0, sb
bl IsAffectedByTaunt
cmp r0, #0
moveq r0, #1
beq _02319F64
_023198F8:
cmp r4, #0
beq _02319918
mov r0, sl
mov r1, sb
bl StatusCheckerCheck
cmp r0, #0
moveq r0, #1
beq _02319F64
_02319918:
mov r0, sb
mov r1, #0
bl GetMoveTargetAndRange
ldr r1, _02319F6C ; =0x00000273
cmp r0, r1
bne _02319958
ldrsh r3, [r6, #0x12]
ldrsh r2, [r6, #0x16]
add r0, r1, #0x174
add r2, r3, r2
cmp r2, r0
movgt r2, r0
ldrsh r0, [r6, #0x10]
cmp r0, r2
moveq r0, #1
beq _02319F64
_02319958:
ldr r0, [sp, #0x24]
ands r7, r0, #0xf0
cmpne r7, #0x10
cmpne r7, #0x20
bne _02319A54
mov r0, sl
mov r1, #1
bl IsBlinded
cmp r0, #0
beq _023199C0
ldrb r6, [r6, #0x4c]
ldr r4, _02319F70 ; =AI_CAN_ATTACK_IN_DIRECTION
ldrb r0, [r4, r6]
cmp r0, #0
bne _02319E88
ldr r1, _02319F74 ; =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
mov r3, #1
ldr r0, _02319F78 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
mov r2, #0x63
strb r3, [r4, r6]
strb r6, [r1]
str r2, [r0]
mov r1, #0
str r1, [r0, #0x20]
add r5, r5, #1
b _02319E88
_023199C0:
ldr fp, _02319F7C ; =DIRECTIONS_XY
mov r8, #0
_023199C8:
mov r1, r8, lsl #2
add r0, fp, r8, lsl #2
ldrsh r6, [sl, #4]
ldrsh r3, [fp, r1]
ldrsh r2, [sl, #6]
ldrsh r1, [r0, #2]
add r0, r6, r3
add r1, r2, r1
bl GetTile
ldr r6, [r0, #0xc]
cmp r6, #0
beq _02319A44
ldr r0, [r6]
cmp r0, #1
bne _02319A44
cmp r7, #0x10
cmpne r7, #0x20
beq _02319A24
mov r0, sl
mov r1, r8
bl CanAttackInDirection
cmp r0, #0
beq _02319A44
_02319A24:
str sb, [sp]
ldr r1, [sp, #0x24]
mov r0, r5
mov r2, sl
mov r3, r6
str r4, [sp, #4]
bl TryAddTargetToAiTargetList
mov r5, r0
_02319A44:
add r8, r8, #1
cmp r8, #8
blt _023199C8
b _02319E88
_02319A54:
cmp r7, #0x30
bne _02319AC8
ldr r7, _02319F80 ; =DUNGEON_PTR
mov r6, #0
_02319A64:
ldr r0, [r7]
add r0, r0, r6, lsl #2
add r0, r0, #0x12000
ldr r8, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET]
mov r0, r8
bl EntityIsValid__02319F8C
cmp r0, #0
beq _02319AB8
mov r0, sl
mov r1, r8
bl CanSeeTarget
cmp r0, #0
beq _02319AB8
str sb, [sp]
ldr r1, [sp, #0x24]
mov r0, r5
mov r2, sl
mov r3, r8
str r4, [sp, #4]
bl TryAddTargetToAiTargetList
mov r5, r0
_02319AB8:
add r6, r6, #1
cmp r6, #0x14
blt _02319A64
b _02319E88
_02319AC8:
cmp r7, #0x40
bne _02319BB0
mov r8, #0
_02319AD4:
ldr r0, _02319F7C ; =DIRECTIONS_XY
mov r2, r8, lsl #2
add r0, r0, r8, lsl #2
ldrsh r6, [r0, #2]
ldr r0, _02319F7C ; =DIRECTIONS_XY
ldrsh r1, [sl, #6]
ldrsh r7, [r0, r2]
ldrsh r0, [sl, #4]
add r1, r1, r6
add r0, r0, r7
bl GetTile
mov fp, r0
mov r0, sl
mov r1, r8
bl CanAttackInDirection
cmp r0, #0
beq _02319BA0
ldr r3, [fp, #0xc]
cmp r3, #0
beq _02319B58
ldr r0, [r3]
cmp r0, #1
bne _02319B58
str sb, [sp]
ldr r1, [sp, #0x24]
mov r0, r5
mov r2, sl
str r4, [sp, #4]
mov fp, r5
bl TryAddTargetToAiTargetList
mov r5, r0
cmp fp, r5
bne _02319BA0
_02319B58:
ldrsh r0, [sl, #4]
ldrsh r1, [sl, #6]
add r0, r0, r7, lsl #1
add r1, r1, r6, lsl #1
bl GetTile
ldr r3, [r0, #0xc]
cmp r3, #0
beq _02319BA0
ldr r0, [r3]
cmp r0, #1
bne _02319BA0
str sb, [sp]
ldr r1, [sp, #0x24]
mov r0, r5
mov r2, sl
str r4, [sp, #4]
bl TryAddTargetToAiTargetList
mov r5, r0
_02319BA0:
add r8, r8, #1
cmp r8, #8
blt _02319AD4
b _02319E88
_02319BB0:
cmp r7, #0x50
cmpne r7, #0x80
cmpne r7, #0x90
bne _02319E00
cmp r7, #0x50
moveq r0, #0xa
streq r0, [sp, #0xc]
movne r0, #1
strne r0, [sp, #0xc]
cmp r7, #0x90
moveq r0, #2
streq r0, [sp, #0xc]
mov r0, #0
str r0, [sp, #0x20]
mvn r0, #0
str r0, [sp, #0x28]
_02319BF0:
ldr r0, _02319F80 ; =DUNGEON_PTR
ldr r1, [r0]
ldr r0, [sp, #0x20]
add r0, r1, r0, lsl #2
add r0, r0, #0x12000
ldr r0, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET]
str r0, [sp, #0x18]
bl EntityIsValid__02319F8C
cmp r0, #0
ldrne r0, [sp, #0x18]
cmpne sl, r0
beq _02319DE8
ldr r1, [sp, #0x18]
add r0, sl, #4
add r1, r1, #4
bl GetDirectionTowardsPosition
ldr r1, _02319F70 ; =AI_CAN_ATTACK_IN_DIRECTION
str r0, [sp, #0x1c]
ldrb r0, [r1, r0]
cmp r0, #0
bne _02319DE8
ldr r1, [sp, #0x18]
mov r0, sl
bl CanSeeTarget
cmp r0, #0
beq _02319DE8
ldr r0, [sp, #0x18]
ldrsh r6, [sl, #4]
ldrsh fp, [r0, #4]
sub r0, r6, fp
bl abs
str r0, [sp, #0x10]
ldr r0, [sp, #0x18]
ldrsh r8, [sl, #6]
ldrsh r7, [r0, #6]
sub r0, r8, r7
bl abs
ldr r1, [sp, #0x10]
cmp r1, r0
movgt r2, r1
movle r2, r0
cmp r2, #0xa
movgt r0, #0
bgt _02319D50
ldr r1, [sp, #0xc]
cmp r2, r1
movgt r0, #0
bgt _02319D50
ldr r1, [sp, #0x10]
cmp r1, r0
ldr r0, [sp, #0x28]
bne _02319CF8
cmp r6, fp
cmplt r8, r7
movlt r0, #1
blt _02319D44
cmp r6, fp
bge _02319CE4
cmp r8, r7
movgt r0, #3
bgt _02319D44
_02319CE4:
cmp r6, fp
cmpgt r8, r7
movgt r0, #5
movle r0, #7
b _02319D44
_02319CF8:
cmp r6, fp
bne _02319D0C
cmp r8, r7
movlt r0, #0
blt _02319D44
_02319D0C:
cmp r6, fp
bge _02319D20
cmp r8, r7
moveq r0, #2
beq _02319D44
_02319D20:
cmp r6, fp
bne _02319D34
cmp r8, r7
movgt r0, #4
bgt _02319D44
_02319D34:
cmp r6, fp
ble _02319D44
cmp r8, r7
moveq r0, #6
_02319D44:
cmp r0, #0
movge r0, #1
movlt r0, #0
_02319D50:
cmp r0, #0
beq _02319DE8
str r4, [sp]
ldr r0, [sp, #0x24]
ldr r2, [sp, #0x18]
mov r1, sl
mov r3, sb
bl IsAiTargetEligible
cmp r0, #0
beq _02319DE8
ldr r1, [sp, #0x18]
ldr r2, [sp, #0x1c]
ldr r3, [sp, #0xc]
mov r0, sl
bl IsTargetInRange
cmp r0, #0
beq _02319DE8
ldr r1, _02319F70 ; =AI_CAN_ATTACK_IN_DIRECTION
ldr r0, [sp, #0x1c]
mov r2, #1
strb r2, [r1, r0]
mov r1, r0
ldr r0, _02319F74 ; =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
strb r1, [r0, r5]
mov r0, sl
mov r1, sb
bl GetMoveTypeForMonster
mov r3, r0
ldr r1, [sp, #0x24]
ldr r2, [sp, #0x18]
mov r0, sl
bl WeightMoveWithIqSkills
ldr r1, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
str r0, [r1, r5, lsl #2]
ldr r1, [sp, #0x18]
ldr r0, _02319F88 ; =AI_POTENTIAL_ATTACK_TARGETS
str r1, [r0, r5, lsl #2]
add r5, r5, #1
_02319DE8:
ldr r0, [sp, #0x20]
add r0, r0, #1
str r0, [sp, #0x20]
cmp r0, #0x14
blt _02319BF0
b _02319E88
_02319E00:
cmp r7, #0x60
bne _02319E60
ldr r7, _02319F80 ; =DUNGEON_PTR
mov r6, #0
_02319E10:
ldr r0, [r7]
add r0, r0, r6, lsl #2
add r0, r0, #0x12000
ldr r8, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET]
mov r0, r8
bl EntityIsValid__02319F8C
cmp r0, #0
beq _02319E50
str sb, [sp]
ldr r1, [sp, #0x24]
mov r0, r5
mov r2, sl
mov r3, r8
str r4, [sp, #4]
bl TryAddTargetToAiTargetList
mov r5, r0
_02319E50:
add r6, r6, #1
cmp r6, #0x14
blt _02319E10
b _02319E88
_02319E60:
cmp r7, #0x70
bne _02319E88
str sb, [sp]
ldr r1, [sp, #0x24]
mov r2, sl
mov r3, sl
mov r0, #0
str r4, [sp, #4]
bl TryAddTargetToAiTargetList
mov r5, r0
_02319E88:
cmp r5, #0
ldreq r0, [sp, #8]
moveq r1, #0
streqb r1, [r0]
beq _02319F60
mov r0, #0
str r0, [sp, #0x14]
mov r4, r0
ldr r3, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
b _02319EC4
_02319EB0:
ldr r2, [r3, r4, lsl #2]
ldr r1, [sp, #0x14]
add r4, r4, #1
cmp r1, r2
strlt r2, [sp, #0x14]
_02319EC4:
cmp r4, r5
blt _02319EB0
mov r6, #0
mov r2, r6
ldr r4, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
b _02319EF0
_02319EDC:
ldr r3, [r4, r6, lsl #2]
ldr r1, [sp, #0x14]
cmp r1, r3
strne r2, [r4, r6, lsl #2]
add r6, r6, #1
_02319EF0:
cmp r6, r5
blt _02319EDC
mov r3, #0
ldr r2, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
b _02319F10
_02319F04:
ldr r1, [r2, r3, lsl #2]
add r3, r3, #1
add r0, r0, r1
_02319F10:
cmp r3, r5
blt _02319F04
bl DungeonRandInt
mov r3, #0
ldr r2, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
b _02319F38
_02319F28:
ldr r1, [r2, r3, lsl #2]
subs r0, r0, r1
bmi _02319F40
add r3, r3, #1
_02319F38:
cmp r3, r5
blt _02319F28
_02319F40:
ldr r1, _02319F74 ; =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
ldr r0, [sp, #8]
mov r2, #1
strb r2, [r0]
ldrb r2, [r1, r3]
mov r1, #8
strb r2, [r0, #1]
str r1, [r0, #4]
_02319F60:
ldr r0, [sp, #0x14]
_02319F64:
add sp, sp, #0x2c
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02319F6C: .word 0x00000273
_02319F70: .word AI_CAN_ATTACK_IN_DIRECTION
_02319F74: .word AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
_02319F78: .word AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
_02319F7C: .word DIRECTIONS_XY
_02319F80: .word DUNGEON_PTR
_02319F84: .word AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
_02319F88: .word AI_POTENTIAL_ATTACK_TARGETS
arm_func_end AiConsiderMove
#endif

View File

@@ -30,7 +30,7 @@ TryAddTargetToAiTargetList: ; 0x02319FB0
bl GetDirectionTowardsPosition
mov r5, r0
_0231A010:
ldr r4, _0231A094 ; =CAN_ATTACK_IN_DIRECTION
ldr r4, _0231A094 ; =AI_CAN_ATTACK_IN_DIRECTION
ldrb r0, [r4, r5]
cmp r0, #0
movne r0, sb
@@ -44,7 +44,7 @@ _0231A010:
bl IsAiTargetEligible
cmp r0, #0
beq _0231A08C
ldr r2, _0231A098 ; =POTENTIAL_ATTACK_TARGET_DIRECTIONS
ldr r2, _0231A098 ; =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
mov r3, #1
ldr r1, [sp, #0x20]
mov r0, r7
@@ -55,9 +55,9 @@ _0231A010:
mov r0, r7
mov r1, r8
mov r2, r6
bl WeightMove
ldr r2, _0231A09C ; =POTENTIAL_ATTACK_TARGET_WEIGHTS
ldr r1, _0231A0A0 ; =POTENTIAL_TARGETS
bl WeightMoveWithIqSkills
ldr r2, _0231A09C ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
ldr r1, _0231A0A0 ; =AI_POTENTIAL_ATTACK_TARGETS
str r0, [r2, sb, lsl #2]
str r6, [r1, sb, lsl #2]
add sb, sb, #1
@@ -65,10 +65,10 @@ _0231A08C:
mov r0, sb
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_0231A094: .word CAN_ATTACK_IN_DIRECTION
_0231A098: .word POTENTIAL_ATTACK_TARGET_DIRECTIONS
_0231A09C: .word POTENTIAL_ATTACK_TARGET_WEIGHTS
_0231A0A0: .word POTENTIAL_TARGETS
_0231A094: .word AI_CAN_ATTACK_IN_DIRECTION
_0231A098: .word AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
_0231A09C: .word AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
_0231A0A0: .word AI_POTENTIAL_ATTACK_TARGETS
arm_func_end TryAddTargetToAiTargetList
arm_func_start IsAiTargetEligible
@@ -266,8 +266,8 @@ _0231A358:
_0231A360: .word 0x000001B7
arm_func_end IsAiTargetEligible
arm_func_start WeightMove
WeightMove: ; 0x0231A364
arm_func_start WeightMoveWithIqSkills
WeightMoveWithIqSkills: ; 0x0231A364
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r7, r2
mov sb, r0
@@ -340,7 +340,7 @@ _0231A454:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_0231A45C: .word DUNGEON_PTR
arm_func_end WeightMove
arm_func_end WeightMoveWithIqSkills
arm_func_start TargetRegularAttack
TargetRegularAttack: ; 0x0231A460
@@ -431,7 +431,7 @@ _0231A58C:
mov r2, r8
mov r0, sl
mov r3, r1
bl WeightMove
bl WeightMoveWithIqSkills
add r1, sp, #8
cmp fp, #0
str r0, [r1, r4, lsl #2]

View File

@@ -69,122 +69,3 @@ _0231A874: .word 0x00000DF5
_0231A878: .word 0x00000DF7
#endif
arm_func_end ShouldUsePp
arm_func_start ExclusiveItemEffectIsActive__0231A87C
ExclusiveItemEffectIsActive__0231A87C: ; 0x0231A87C
stmdb sp!, {r3, lr}
ldr r2, [r0, #0xb4]
ldrb r0, [r2, #6]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, pc}
#ifdef JAPAN
add r0, r2, #0x224
#else
add r0, r2, #0x228
#endif
bl ExclusiveItemEffectFlagTest
ldmia sp!, {r3, pc}
arm_func_end ExclusiveItemEffectIsActive__0231A87C
arm_func_start ov29_0231A8A0
ov29_0231A8A0: ; 0x0231A8A0
#ifdef JAPAN
#define OV29_0231A8A0_OFFSET -4
#else
#define OV29_0231A8A0_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #4
mov sb, r0
mov r7, #0
bl IsMonster__0231A9D4
cmp r0, #0
beq _0231A910
ldr r0, _0231A9CC ; =DUNGEON_PTR
ldr r4, [sb, #0xb4]
ldr r0, [r0]
add r0, r0, #0x4000
#ifdef JAPAN
ldrb r0, [r0, #0x36]
#else
ldrb r0, [r0, #0xda]
#endif
bl AreMovesEnabled
cmp r0, #0
bne _0231A8EC
ldr r1, _0231A9D0 ; =0x00000DFD
mov r0, sb
bl LogMessageByIdWithPopupCheckUser
b _0231A9C4
_0231A8EC:
mov r1, r7
mov r0, sb
strb r1, [r4, #0x23f + OV29_0231A8A0_OFFSET]
bl ShouldUsePp
cmp r0, #0
movne r7, #1
strneb r7, [r4, #0x23f + OV29_0231A8A0_OFFSET]
mov r0, #0
strb r0, [r4, #0x23e + OV29_0231A8A0_OFFSET]
_0231A910:
mov r6, #0
mov r4, #1
mov r5, r6
mov sl, r4
b _0231A970
_0231A924:
ldr r8, [sb, #0xb4]
mov r0, sb
str r5, [sp]
ldrb r1, [r8, #0x4e]
mov r2, r4
mov r3, r5
bl ov29_0232145C
mov r0, sb
bl EntityIsValid__02319F8C
cmp r0, #0
beq _0231A984
bl IsFloorOver
cmp r0, #0
ldreqb r0, [r8, #0x23e + OV29_0231A8A0_OFFSET]
cmpeq r0, #0
ldreqb r0, [r8, #0x163 + OV29_0231A8A0_OFFSET]
cmpeq r0, #0
bne _0231A984
add r6, r6, #1
_0231A970:
mov r0, sb
mov r1, sl
bl GetNumberOfAttacks
cmp r6, r0
blt _0231A924
_0231A984:
mov r0, sb
bl EntityIsValid__02319F8C
cmp r0, #0
beq _0231A9BC
cmp r7, #0
moveq r1, #1
movne r1, #0
ldr r4, [sb, #0xb4]
mov r0, sb
and r1, r1, #0xff
bl UpdateMovePp
ldrb r1, [r4, #0x4e]
mov r0, sb
bl ov29_022FA574
_0231A9BC:
mov r0, sb
bl TryActivateTruant
_0231A9C4:
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_0231A9CC: .word DUNGEON_PTR
#ifdef JAPAN
_0231A9D0: .word 0x00000B3D
#else
_0231A9D0: .word 0x00000DFD
#endif
arm_func_end ov29_0231A8A0

106
asm/overlay_29_0231A8A0.s Normal file
View File

@@ -0,0 +1,106 @@
.include "asm/macros.inc"
.include "overlay_29_0231A8A0.inc"
.text
arm_func_start ov29_0231A8A0
ov29_0231A8A0: ; 0x0231A8A0
#ifdef JAPAN
#define OV29_0231A8A0_OFFSET -4
#else
#define OV29_0231A8A0_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #4
mov sb, r0
mov r7, #0
bl IsMonster__0231A9D4
cmp r0, #0
beq _0231A910
ldr r0, _0231A9CC ; =DUNGEON_PTR
ldr r4, [sb, #0xb4]
ldr r0, [r0]
add r0, r0, #0x4000
#ifdef JAPAN
ldrb r0, [r0, #0x36]
#else
ldrb r0, [r0, #0xda]
#endif
bl AreMovesEnabled
cmp r0, #0
bne _0231A8EC
ldr r1, _0231A9D0 ; =0x00000DFD
mov r0, sb
bl LogMessageByIdWithPopupCheckUser
b _0231A9C4
_0231A8EC:
mov r1, r7
mov r0, sb
strb r1, [r4, #0x23f + OV29_0231A8A0_OFFSET]
bl ShouldUsePp
cmp r0, #0
movne r7, #1
strneb r7, [r4, #0x23f + OV29_0231A8A0_OFFSET]
mov r0, #0
strb r0, [r4, #0x23e + OV29_0231A8A0_OFFSET]
_0231A910:
mov r6, #0
mov r4, #1
mov r5, r6
mov sl, r4
b _0231A970
_0231A924:
ldr r8, [sb, #0xb4]
mov r0, sb
str r5, [sp]
ldrb r1, [r8, #0x4e]
mov r2, r4
mov r3, r5
bl ov29_0232145C
mov r0, sb
bl EntityIsValid__02319F8C
cmp r0, #0
beq _0231A984
bl IsFloorOver
cmp r0, #0
ldreqb r0, [r8, #0x23e + OV29_0231A8A0_OFFSET]
cmpeq r0, #0
ldreqb r0, [r8, #0x163 + OV29_0231A8A0_OFFSET]
cmpeq r0, #0
bne _0231A984
add r6, r6, #1
_0231A970:
mov r0, sb
mov r1, sl
bl GetNumberOfAttacks
cmp r6, r0
blt _0231A924
_0231A984:
mov r0, sb
bl EntityIsValid__02319F8C
cmp r0, #0
beq _0231A9BC
cmp r7, #0
moveq r1, #1
movne r1, #0
ldr r4, [sb, #0xb4]
mov r0, sb
and r1, r1, #0xff
bl UpdateMovePp
ldrb r1, [r4, #0x4e]
mov r0, sb
bl ov29_022FA574
_0231A9BC:
mov r0, sb
bl TryActivateTruant
_0231A9C4:
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_0231A9CC: .word DUNGEON_PTR
#ifdef JAPAN
_0231A9D0: .word 0x00000B3D
#else
_0231A9D0: .word 0x00000DFD
#endif
arm_func_end ov29_0231A8A0

View File

@@ -207,422 +207,3 @@ _0231ACA0: .word 0x00000DFB + OV29_0231A9F8_OFFSET
_0231ACA4: .word 0x00000DFC + OV29_0231A9F8_OFFSET
_0231ACA8: .word 0x00000141
arm_func_end ov29_0231A9F8
arm_func_start GetEntityMoveTargetAndRange
GetEntityMoveTargetAndRange: ; 0x0231ACAC
stmdb sp!, {r4, r5, r6, lr}
mov r5, r1
ldrh r1, [r5, #4]
mov r4, r2
mov r6, r0
cmp r1, #0xed
cmpeq r4, #0
bne _0231ACE0
mov r1, #0xe
bl MonsterIsType
cmp r0, #0
moveq r0, #0x73
ldmeqia sp!, {r4, r5, r6, pc}
_0231ACE0:
mov r0, r5
mov r1, r4
bl GetMoveTargetAndRange
mov r4, r0
mov r0, r5
bl IsMoveRangeString19
cmp r0, #0
beq _0231AD2C
mov r0, r6
mov r1, #0x55
bl ExclusiveItemEffectIsActive__0231A87C
cmp r0, #0
beq _0231AD2C
ldr r0, _0231AD34 ; =0x00000273
cmp r4, r0
subeq r4, r0, #0x12
beq _0231AD2C
cmp r4, #0x73
moveq r4, #0x61
_0231AD2C:
mov r0, r4
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_0231AD34: .word 0x00000273
arm_func_end GetEntityMoveTargetAndRange
arm_func_start ov29_0231AD38
ov29_0231AD38: ; 0x0231AD38
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, r1
mov r2, #1
bl GetEntityMoveTargetAndRange
and r4, r0, #0xf
mov r0, r6
mov r1, r5
mov r2, #0
bl GetEntityMoveTargetAndRange
cmp r4, #3
and r0, r0, #0xf
cmpne r4, #1
cmpne r0, #4
cmpne r0, #3
cmpne r0, #1
cmpne r0, #6
beq _0231ADA0
mov r0, r6
mov r1, r5
mov r2, #0
bl GetEntityMoveTargetAndRange
and r0, r0, #0xf0
cmp r0, #0x70
movne r0, #0
ldmneia sp!, {r4, r5, r6, pc}
_0231ADA0:
mov r0, #1
ldmia sp!, {r4, r5, r6, pc}
arm_func_end ov29_0231AD38
arm_func_start ov29_0231ADA8
ov29_0231ADA8: ; 0x0231ADA8
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #8
ldr r1, [r0, #0xb4]
mov r0, #0
mov r5, r0
#ifdef JAPAN
add r4, r1, #0x120
#else
add r4, r1, #0x124
#endif
mov ip, r0
mov lr, #1
add r2, sp, #0
_0231ADCC:
ldrb r1, [r4, r5, lsl #3]
add r3, r4, r5, lsl #3
tst r1, #1
movne r1, lr
moveq r1, ip
tst r1, #0xff
beq _0231AE00
ldrh r3, [r3, #4]
add r1, r0, #1
mov r0, r0, lsl #1
mov r1, r1, lsl #0x10
strh r3, [r2, r0]
mov r0, r1, lsr #0x10
_0231AE00:
add r1, r5, #1
mov r1, r1, lsl #0x10
mov r5, r1, lsr #0x10
cmp r5, #4
blo _0231ADCC
cmp r0, #0
moveq r0, #0
beq _0231AE34
bl DungeonRandInt
mov r0, r0, lsl #0x10
add r1, sp, #0
mov r0, r0, lsr #0xf
ldrh r0, [r1, r0]
_0231AE34:
add sp, sp, #8
ldmia sp!, {r3, r4, r5, pc}
arm_func_end ov29_0231ADA8
arm_func_start ov29_0231AE3C
ov29_0231AE3C: ; 0x0231AE3C
stmdb sp!, {r3, lr}
ldr ip, [r0, #0xb4]
mov r0, #0
mov lr, r0
mov r2, r0
mov r3, #1
_0231AE54:
add r1, ip, lr, lsl #3
#ifdef JAPAN
ldrb r1, [r1, #0x120]
#else
ldrb r1, [r1, #0x124]
#endif
tst r1, #1
movne r1, r3
moveq r1, r2
tst r1, #0xff
add r1, lr, #1
addne r0, r0, #1
mov r1, r1, lsl #0x10
movne r0, r0, lsl #0x10
mov lr, r1, lsr #0x10
movne r0, r0, lsr #0x10
cmp lr, #4
blo _0231AE54
ldmia sp!, {r3, pc}
arm_func_end ov29_0231AE3C
arm_func_start GetEntityNaturalGiftInfo
GetEntityNaturalGiftInfo: ; 0x0231AE90
stmdb sp!, {r3, r4, r5, lr}
mov r4, r0
bl IsMonster__0231A9D4
cmp r0, #0
ldrne r4, [r4, #0xb4]
ldrnesh r0, [r4, #0x66]
cmpne r0, #0
beq _0231AF00
mov ip, #0
ldr r3, _0231AF08 ; =NATURAL_GIFT_ITEM_TABLE
mov lr, ip
mov r1, #6
_0231AEC0:
smulbb r5, lr, r1
ldrsh r2, [r3, r5]
cmp r2, #0
beq _0231AEF0
ldrsh r0, [r4, #0x66]
cmp r0, r2
moveq ip, #1
beq _0231AEF0
add r0, lr, #1
mov r0, r0, lsl #0x10
mov lr, r0, asr #0x10
b _0231AEC0
_0231AEF0:
cmp ip, #0
ldrne r0, _0231AF08 ; =NATURAL_GIFT_ITEM_TABLE
addne r0, r0, r5
ldmneia sp!, {r3, r4, r5, pc}
_0231AF00:
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_0231AF08: .word NATURAL_GIFT_ITEM_TABLE
arm_func_end GetEntityNaturalGiftInfo
arm_func_start GetEntityWeatherBallType
GetEntityWeatherBallType: ; 0x0231AF0C
stmdb sp!, {r3, lr}
bl GetApparentWeather
ldr r1, _0231AF20 ; =WEATHER_BALL_TYPE_TABLE
ldrb r0, [r1, r0]
ldmia sp!, {r3, pc}
.align 2, 0
_0231AF20: .word WEATHER_BALL_TYPE_TABLE
arm_func_end GetEntityWeatherBallType
arm_func_start ov29_0231AF24
ov29_0231AF24: ; 0x0231AF24
#ifdef JAPAN
#define OV29_0231AF24_OFFSET -4
#else
#define OV29_0231AF24_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
mov r6, r0
mov r5, r1
mov r4, r2
bl IsMonster__0231A9D4
cmp r0, #0
beq _0231AFAC
mov r0, r6
mov r1, r5
bl ov29_022FB9E0
mov r1, r0
cmp r4, #0
beq _0231AF98
cmp r1, #0
bge _0231AF98
ldr r4, [r6, #0xb4]
mov r1, #0
mov r2, r1
add r0, r4, #0x4a
bl SetActionUseMoveAi
mov r2, #1
strb r2, [r4, #0x124 + OV29_0231AF24_OFFSET]
add r0, r4, #0x100
mov r1, #0
strh r1, [r0, #0x26 + OV29_0231AF24_OFFSET]
strh r5, [r0, #0x28 + OV29_0231AF24_OFFSET]
strb r2, [r4, #0x12a + OV29_0231AF24_OFFSET]
strb r1, [r4, #0x12b + OV29_0231AF24_OFFSET]
_0231AF98:
mov r3, #0
mov r0, r6
mov r2, #1
str r3, [sp]
bl ov29_0232145C
_0231AFAC:
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, pc}
arm_func_end ov29_0231AF24
arm_func_start ov29_0231AFB4
ov29_0231AFB4: ; 0x0231AFB4
stmdb sp!, {r4, lr}
mov ip, #0
ldr r1, _0231B004 ; =DUNGEON_PTR
mov r2, ip
mov r3, ip
_0231AFC8:
ldr r0, [r1]
mov r4, r3
#ifdef JAPAN
add r0, r0, #0x1840
add r0, r0, #0x18000
#else
add r0, r0, #0xe4
add r0, r0, #0x19800
#endif
add lr, r0, ip, lsl #4
_0231AFDC:
str r2, [lr, r4, lsl #3]
add r0, lr, r4, lsl #3
add r4, r4, #1
str r2, [r0, #4]
cmp r4, #2
blt _0231AFDC
add ip, ip, #1
cmp ip, #2
blt _0231AFC8
ldmia sp!, {r4, pc}
.align 2, 0
_0231B004: .word DUNGEON_PTR
arm_func_end ov29_0231AFB4
arm_func_start ov29_0231B008
ov29_0231B008: ; 0x0231B008
stmdb sp!, {r3, r4, r5, lr}
mov lr, #0
ldr r1, _0231B05C ; =DUNGEON_PTR
mov r3, lr
mov r2, #2
mov ip, lr
_0231B020:
ldr r0, [r1]
mov r5, ip
#ifdef JAPAN
add r0, r0, #0x1840
add r0, r0, #0x18000
#else
add r0, r0, #0xe4
add r0, r0, #0x19800
#endif
add r4, r0, lr, lsl #4
_0231B034:
str r3, [r4, r5, lsl #3]
add r0, r4, r5, lsl #3
add r5, r5, #1
str r2, [r0, #4]
cmp r5, #2
blt _0231B034
add lr, lr, #1
cmp lr, #2
blt _0231B020
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_0231B05C: .word DUNGEON_PTR
arm_func_end ov29_0231B008
arm_func_start ActivateMotorDrive
ActivateMotorDrive: ; 0x0231B060
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
#ifdef JAPAN
mov ip, #0x66
mov r4, r0
rsb r2, ip, #0x9e0
#else
ldr r2, _0231B0A0 ; =0x00000C3B
mov ip, #0x66
mov r4, r0
#endif
mov r1, #0
mov r3, #2
str ip, [sp]
bl LogMessageByIdWithPopupCheckParticipants
mov r0, r4
mov r1, r4
mov r2, #0
mov r3, #1
bl BoostSpeedOneStage
add sp, sp, #4
ldmia sp!, {r3, r4, pc}
.align 2, 0
#ifndef JAPAN
_0231B0A0: .word 0x00000C3B
#endif
arm_func_end ActivateMotorDrive
arm_func_start TryActivateFrisk
TryActivateFrisk: ; 0x0231B0A4
stmdb sp!, {r4, r5, r6, lr}
sub sp, sp, #8
mov r5, r0
mov r4, r1
bl EntityIsValid__0231B194
cmp r0, #0
beq _0231B184
mov r0, r4
bl EntityIsValid__0231B194
cmp r0, #0
beq _0231B184
ldr r0, [r5, #0xb4]
ldr r6, [r4, #0xb4]
ldrb r0, [r0, #6]
cmp r0, #0
bne _0231B184
bl ov29_0232E80C
cmp r4, r0
ldrneb r0, [r6, #6]
cmpne r0, #0
beq _0231B184
ldrsh r0, [r6, #0x66]
cmp r0, #0
bne _0231B150
ldrsh r0, [r6, #2]
add r1, sp, #0
bl GetTreasureBoxChances
ldrsh r0, [sp, #4]
cmp r0, #0
ldrlesh r0, [sp, #6]
cmple r0, #0
ble _0231B184
mov r0, r5
bl ov29_022E4110
mov r1, r4
mov r0, #1
mov r2, #0
bl SubstitutePlaceholderStringTags
ldr r2, _0231B18C ; =0x00000C3D
mov r0, r5
mov r1, r4
bl LogMessageByIdWithPopupCheckUserTarget
b _0231B184
_0231B150:
mov r0, r5
bl ov29_022E4110
mov r1, r4
mov r0, #1
mov r2, #0
bl SubstitutePlaceholderStringTags
add r1, r6, #0x62
mov r0, #2
bl ov29_02344B44
ldr r2, _0231B190 ; =0x00000C3C
mov r0, r5
mov r1, r4
bl LogMessageByIdWithPopupCheckUserTarget
_0231B184:
add sp, sp, #8
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
#ifdef JAPAN
_0231B18C: .word 0x0000097C
_0231B190: .word 0x0000097B
#else
_0231B18C: .word 0x00000C3D
_0231B190: .word 0x00000C3C
#endif
arm_func_end TryActivateFrisk

381
asm/overlay_29_0231AD38.s Normal file
View File

@@ -0,0 +1,381 @@
.include "asm/macros.inc"
.include "overlay_29_0231AD38.inc"
.text
arm_func_start ov29_0231AD38
ov29_0231AD38: ; 0x0231AD38
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, r1
mov r2, #1
bl GetEntityMoveTargetAndRange
and r4, r0, #0xf
mov r0, r6
mov r1, r5
mov r2, #0
bl GetEntityMoveTargetAndRange
cmp r4, #3
and r0, r0, #0xf
cmpne r4, #1
cmpne r0, #4
cmpne r0, #3
cmpne r0, #1
cmpne r0, #6
beq _0231ADA0
mov r0, r6
mov r1, r5
mov r2, #0
bl GetEntityMoveTargetAndRange
and r0, r0, #0xf0
cmp r0, #0x70
movne r0, #0
ldmneia sp!, {r4, r5, r6, pc}
_0231ADA0:
mov r0, #1
ldmia sp!, {r4, r5, r6, pc}
arm_func_end ov29_0231AD38
arm_func_start ov29_0231ADA8
ov29_0231ADA8: ; 0x0231ADA8
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #8
ldr r1, [r0, #0xb4]
mov r0, #0
mov r5, r0
#ifdef JAPAN
add r4, r1, #0x120
#else
add r4, r1, #0x124
#endif
mov ip, r0
mov lr, #1
add r2, sp, #0
_0231ADCC:
ldrb r1, [r4, r5, lsl #3]
add r3, r4, r5, lsl #3
tst r1, #1
movne r1, lr
moveq r1, ip
tst r1, #0xff
beq _0231AE00
ldrh r3, [r3, #4]
add r1, r0, #1
mov r0, r0, lsl #1
mov r1, r1, lsl #0x10
strh r3, [r2, r0]
mov r0, r1, lsr #0x10
_0231AE00:
add r1, r5, #1
mov r1, r1, lsl #0x10
mov r5, r1, lsr #0x10
cmp r5, #4
blo _0231ADCC
cmp r0, #0
moveq r0, #0
beq _0231AE34
bl DungeonRandInt
mov r0, r0, lsl #0x10
add r1, sp, #0
mov r0, r0, lsr #0xf
ldrh r0, [r1, r0]
_0231AE34:
add sp, sp, #8
ldmia sp!, {r3, r4, r5, pc}
arm_func_end ov29_0231ADA8
arm_func_start ov29_0231AE3C
ov29_0231AE3C: ; 0x0231AE3C
stmdb sp!, {r3, lr}
ldr ip, [r0, #0xb4]
mov r0, #0
mov lr, r0
mov r2, r0
mov r3, #1
_0231AE54:
add r1, ip, lr, lsl #3
#ifdef JAPAN
ldrb r1, [r1, #0x120]
#else
ldrb r1, [r1, #0x124]
#endif
tst r1, #1
movne r1, r3
moveq r1, r2
tst r1, #0xff
add r1, lr, #1
addne r0, r0, #1
mov r1, r1, lsl #0x10
movne r0, r0, lsl #0x10
mov lr, r1, lsr #0x10
movne r0, r0, lsr #0x10
cmp lr, #4
blo _0231AE54
ldmia sp!, {r3, pc}
arm_func_end ov29_0231AE3C
arm_func_start GetEntityNaturalGiftInfo
GetEntityNaturalGiftInfo: ; 0x0231AE90
stmdb sp!, {r3, r4, r5, lr}
mov r4, r0
bl IsMonster__0231A9D4
cmp r0, #0
ldrne r4, [r4, #0xb4]
ldrnesh r0, [r4, #0x66]
cmpne r0, #0
beq _0231AF00
mov ip, #0
ldr r3, _0231AF08 ; =NATURAL_GIFT_ITEM_TABLE
mov lr, ip
mov r1, #6
_0231AEC0:
smulbb r5, lr, r1
ldrsh r2, [r3, r5]
cmp r2, #0
beq _0231AEF0
ldrsh r0, [r4, #0x66]
cmp r0, r2
moveq ip, #1
beq _0231AEF0
add r0, lr, #1
mov r0, r0, lsl #0x10
mov lr, r0, asr #0x10
b _0231AEC0
_0231AEF0:
cmp ip, #0
ldrne r0, _0231AF08 ; =NATURAL_GIFT_ITEM_TABLE
addne r0, r0, r5
ldmneia sp!, {r3, r4, r5, pc}
_0231AF00:
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_0231AF08: .word NATURAL_GIFT_ITEM_TABLE
arm_func_end GetEntityNaturalGiftInfo
arm_func_start GetEntityWeatherBallType
GetEntityWeatherBallType: ; 0x0231AF0C
stmdb sp!, {r3, lr}
bl GetApparentWeather
ldr r1, _0231AF20 ; =WEATHER_BALL_TYPE_TABLE
ldrb r0, [r1, r0]
ldmia sp!, {r3, pc}
.align 2, 0
_0231AF20: .word WEATHER_BALL_TYPE_TABLE
arm_func_end GetEntityWeatherBallType
arm_func_start ov29_0231AF24
ov29_0231AF24: ; 0x0231AF24
#ifdef JAPAN
#define OV29_0231AF24_OFFSET -4
#else
#define OV29_0231AF24_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
mov r6, r0
mov r5, r1
mov r4, r2
bl IsMonster__0231A9D4
cmp r0, #0
beq _0231AFAC
mov r0, r6
mov r1, r5
bl ov29_022FB9E0
mov r1, r0
cmp r4, #0
beq _0231AF98
cmp r1, #0
bge _0231AF98
ldr r4, [r6, #0xb4]
mov r1, #0
mov r2, r1
add r0, r4, #0x4a
bl SetActionUseMoveAi
mov r2, #1
strb r2, [r4, #0x124 + OV29_0231AF24_OFFSET]
add r0, r4, #0x100
mov r1, #0
strh r1, [r0, #0x26 + OV29_0231AF24_OFFSET]
strh r5, [r0, #0x28 + OV29_0231AF24_OFFSET]
strb r2, [r4, #0x12a + OV29_0231AF24_OFFSET]
strb r1, [r4, #0x12b + OV29_0231AF24_OFFSET]
_0231AF98:
mov r3, #0
mov r0, r6
mov r2, #1
str r3, [sp]
bl ov29_0232145C
_0231AFAC:
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, pc}
arm_func_end ov29_0231AF24
arm_func_start ov29_0231AFB4
ov29_0231AFB4: ; 0x0231AFB4
stmdb sp!, {r4, lr}
mov ip, #0
ldr r1, _0231B004 ; =DUNGEON_PTR
mov r2, ip
mov r3, ip
_0231AFC8:
ldr r0, [r1]
mov r4, r3
#ifdef JAPAN
add r0, r0, #0x1840
add r0, r0, #0x18000
#else
add r0, r0, #0xe4
add r0, r0, #0x19800
#endif
add lr, r0, ip, lsl #4
_0231AFDC:
str r2, [lr, r4, lsl #3]
add r0, lr, r4, lsl #3
add r4, r4, #1
str r2, [r0, #4]
cmp r4, #2
blt _0231AFDC
add ip, ip, #1
cmp ip, #2
blt _0231AFC8
ldmia sp!, {r4, pc}
.align 2, 0
_0231B004: .word DUNGEON_PTR
arm_func_end ov29_0231AFB4
arm_func_start ov29_0231B008
ov29_0231B008: ; 0x0231B008
stmdb sp!, {r3, r4, r5, lr}
mov lr, #0
ldr r1, _0231B05C ; =DUNGEON_PTR
mov r3, lr
mov r2, #2
mov ip, lr
_0231B020:
ldr r0, [r1]
mov r5, ip
#ifdef JAPAN
add r0, r0, #0x1840
add r0, r0, #0x18000
#else
add r0, r0, #0xe4
add r0, r0, #0x19800
#endif
add r4, r0, lr, lsl #4
_0231B034:
str r3, [r4, r5, lsl #3]
add r0, r4, r5, lsl #3
add r5, r5, #1
str r2, [r0, #4]
cmp r5, #2
blt _0231B034
add lr, lr, #1
cmp lr, #2
blt _0231B020
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_0231B05C: .word DUNGEON_PTR
arm_func_end ov29_0231B008
arm_func_start ActivateMotorDrive
ActivateMotorDrive: ; 0x0231B060
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
#ifdef JAPAN
mov ip, #0x66
mov r4, r0
rsb r2, ip, #0x9e0
#else
ldr r2, _0231B0A0 ; =0x00000C3B
mov ip, #0x66
mov r4, r0
#endif
mov r1, #0
mov r3, #2
str ip, [sp]
bl LogMessageByIdWithPopupCheckParticipants
mov r0, r4
mov r1, r4
mov r2, #0
mov r3, #1
bl BoostSpeedOneStage
add sp, sp, #4
ldmia sp!, {r3, r4, pc}
.align 2, 0
#ifndef JAPAN
_0231B0A0: .word 0x00000C3B
#endif
arm_func_end ActivateMotorDrive
arm_func_start TryActivateFrisk
TryActivateFrisk: ; 0x0231B0A4
stmdb sp!, {r4, r5, r6, lr}
sub sp, sp, #8
mov r5, r0
mov r4, r1
bl EntityIsValid__0231B194
cmp r0, #0
beq _0231B184
mov r0, r4
bl EntityIsValid__0231B194
cmp r0, #0
beq _0231B184
ldr r0, [r5, #0xb4]
ldr r6, [r4, #0xb4]
ldrb r0, [r0, #6]
cmp r0, #0
bne _0231B184
bl ov29_0232E80C
cmp r4, r0
ldrneb r0, [r6, #6]
cmpne r0, #0
beq _0231B184
ldrsh r0, [r6, #0x66]
cmp r0, #0
bne _0231B150
ldrsh r0, [r6, #2]
add r1, sp, #0
bl GetTreasureBoxChances
ldrsh r0, [sp, #4]
cmp r0, #0
ldrlesh r0, [sp, #6]
cmple r0, #0
ble _0231B184
mov r0, r5
bl ov29_022E4110
mov r1, r4
mov r0, #1
mov r2, #0
bl SubstitutePlaceholderStringTags
ldr r2, _0231B18C ; =0x00000C3D
mov r0, r5
mov r1, r4
bl LogMessageByIdWithPopupCheckUserTarget
b _0231B184
_0231B150:
mov r0, r5
bl ov29_022E4110
mov r1, r4
mov r0, #1
mov r2, #0
bl SubstitutePlaceholderStringTags
add r1, r6, #0x62
mov r0, #2
bl ov29_02344B44
ldr r2, _0231B190 ; =0x00000C3C
mov r0, r5
mov r1, r4
bl LogMessageByIdWithPopupCheckUserTarget
_0231B184:
add sp, sp, #8
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
#ifdef JAPAN
_0231B18C: .word 0x0000097C
_0231B190: .word 0x0000097B
#else
_0231B18C: .word 0x00000C3D
_0231B190: .word 0x00000C3C
#endif
arm_func_end TryActivateFrisk

View File

@@ -800,922 +800,3 @@ _02323910: .word 0x0001A226
#endif
_02323914: .word 0x000001E5
arm_func_end ov29_023230FC
arm_func_start ExclusiveItemEffectIsActive__02323918
ExclusiveItemEffectIsActive__02323918: ; 0x02323918
stmdb sp!, {r3, lr}
ldr r2, [r0, #0xb4]
ldrb r0, [r2, #6]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, pc}
#ifdef JAPAN
add r0, r2, #0x224
#else
add r0, r2, #0x228
#endif
bl ExclusiveItemEffectFlagTest
ldmia sp!, {r3, pc}
arm_func_end ExclusiveItemEffectIsActive__02323918
arm_func_start ov29_0232393C
ov29_0232393C: ; 0x0232393C
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x38
ldr r0, [r0, #0xb4]
mov sb, r2
str r0, [sp, #0x18]
mov sl, r1
ldrh r0, [sb, #4]
ldr r1, [sp, #0x60]
str r3, [sp]
str r1, [sp, #0x60]
ldr r7, [sl, #0xb4]
bl GetMoveAnimationSpeed
cmp r0, #1
moveq r6, #2
beq _02323984
cmp r0, #2
moveq r6, #3
movne r6, #6
_02323984:
ldr r0, [sp, #0x18]
ldr r4, _02323C30 ; =DIRECTIONS_XY
ldrb r1, [r0, #0x4c]
ldrsh r0, [sl, #4]
ldr r5, _02323C34 ; =DIRECTIONS_XY + 2
add r1, r1, #4
strh r0, [sp, #0x34]
and r0, r1, #7
mov r8, r0, lsl #2
ldrsh r4, [r4, r8]
ldrsh r3, [sl, #6]
add r1, sp, #0x34
str r4, [sp, #0x24]
ldrsh r4, [r5, r8]
strh r3, [sp, #0x36]
ldr r3, [sp]
mov r0, sl
mov r2, sb
str r4, [sp, #0x20]
bl ov29_02322F78
mov r4, r0
mov r1, r6
mov r0, #0x18
bl _s32_div_f
str r0, [sp, #4]
ldr r0, [sp]
cmp r0, #2
mov r2, r0
ldr r0, [sp, #4]
mul r1, r2, r0
blt _02323A18
add r0, r1, #8
str r0, [sp, #0x14]
cmp r0, #0x40
movge r0, #0x40
strge r0, [sp, #0x14]
b _02323A20
_02323A18:
mov r0, #0x20
str r0, [sp, #0x14]
_02323A20:
mov r0, #0x80000
mov r5, #0
bl _s32_div_f
str r0, [sp, #0x1c]
ldrb r2, [r7, #0x4c]
ldr r1, _02323C38 ; =ov29_02352A8C
mov r0, #1
ldr r1, [r1, r2, lsl #2]
str r1, [sp, #0x10]
bl ov29_0234B4CC
ldr r0, [sp, #0x24]
mov r2, r6, lsl #8
mul r1, r0, r2
ldr r0, [sp, #0x20]
str r1, [sp, #0xc]
mul r1, r0, r2
mov fp, r5
str r1, [sp, #8]
b _02323BC0
_02323A6C:
ldrsh r2, [sp, #0x34]
cmp r2, #0
ldrgesh r1, [sp, #0x36]
cmpge r1, #0
blt _02323BCC
cmp r2, #0x38
cmplt r1, #0x20
bge _02323BCC
ldr r0, [sp, #0x24]
ldrh r6, [sp, #0x34]
add r2, r2, r0
ldr r0, [sp, #0x20]
ldrh r3, [sp, #0x36]
add r1, r1, r0
add r0, sp, #0x34
strh r6, [sp, #0x30]
strh r3, [sp, #0x32]
strh r2, [sp, #0x34]
strh r1, [sp, #0x36]
bl ov29_022E2CA0
cmp r0, #0
beq _02323BB0
ldr r0, _02323C3C ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x1a000
#ifdef JAPAN
ldrb r0, [r0, #0x19a]
#else
ldrb r0, [r0, #0x23e]
#endif
cmp r0, #0
bne _02323BB0
ldrsh r2, [sp, #0x30]
ldrsh r1, [sp, #0x32]
mov r0, #0x18
smulbb r2, r2, r0
smulbb r0, r1, r0
add r0, r0, #0x10
mov r8, r0, lsl #8
mov r0, r4, lsl #0x10
add r1, r2, #0xc
mov r0, r0, asr #0x10
mov r7, r1, lsl #8
mov r6, #0
str r0, [sp, #0x28]
b _02323BA0
_02323B14:
cmp r4, #0
blt _02323B7C
ldr r0, [sp, #0x60]
cmp r0, #1
movne r0, #0
bne _02323B3C
mov r0, r5, asr #8
bl sub_020018D0
ldr r1, [sp, #0x14]
mul r0, r1, r0
_02323B3C:
sub r0, r8, r0
ldr r2, _02323C3C ; =DUNGEON_PTR
mov r0, r0, asr #8
strh r0, [sp, #0x2e]
mov r0, r7, asr #8
ldr r3, [r2]
strh r0, [sp, #0x2c]
ldr r2, _02323C40 ; =0x0001A226
ldr r0, [sp, #0x28]
ldrsh r2, [r3, r2]
add r1, sp, #0x2c
rsb r2, r2, r8, asr #8
add r3, r2, r2, lsr #31
ldr r2, [sp, #0x10]
add r2, r2, r3, asr #1
bl ov10_022BEB2C
_02323B7C:
mov r0, #0x30
bl AdvanceFrame
ldr r0, [sp, #0xc]
add r6, r6, #1
add r7, r7, r0
ldr r0, [sp, #8]
add r8, r8, r0
ldr r0, [sp, #0x1c]
add r5, r5, r0
_02323BA0:
ldr r0, [sp, #4]
cmp r6, r0
blt _02323B14
b _02323BBC
_02323BB0:
ldr r1, [sp, #0x1c]
ldr r0, [sp, #4]
mla r5, r1, r0, r5
_02323BBC:
add fp, fp, #1
_02323BC0:
ldr r0, [sp]
cmp fp, r0
blt _02323A6C
_02323BCC:
cmp r4, #0
blt _02323BE0
mov r0, r4, lsl #0x10
mov r0, r0, asr #0x10
bl ov10_022BDE50
_02323BE0:
mov r0, #1
bl AnimationDelayOrSomething
mov r0, #0
bl ov29_0234B4CC
mov r0, #1
mov r1, #0x4a
bl ov29_022EA370
ldrh r1, [sb, #4]
ldr r0, _02323C44 ; =0x00000232
add r3, sp, #0x34
cmp r1, r0
ldreq r0, [sp, #0x18]
moveq r1, #0
#ifdef JAPAN
streqb r1, [r0, #0x16c]
#else
streqb r1, [r0, #0x170]
#endif
mov r0, sl
mov r2, sb
mov r1, #0
bl PlayMoveAnimation
add sp, sp, #0x38
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02323C30: .word DIRECTIONS_XY
_02323C34: .word DIRECTIONS_XY + 2
_02323C38: .word ov29_02352A8C
_02323C3C: .word DUNGEON_PTR
#ifdef JAPAN
_02323C40: .word 0x0001A182
#else
_02323C40: .word 0x0001A226
#endif
_02323C44: .word 0x00000232
arm_func_end ov29_0232393C
arm_func_start MoveHitCheck
MoveHitCheck: ; 0x02323C48
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xc
mov fp, r2
mov r7, r0
mov r6, r1
mov r0, fp
mov r1, r3
bl GetMoveAccuracyOrAiChance
mov r8, r0
mov r0, #0x64
bl DungeonRandInt
mov r1, #0
str r1, [sp, #4]
ldr sb, [r7, #0xb4]
str r0, [sp, #8]
ldrsh r0, [sb, #2]
mov r1, r1
str r1, [sp]
ldr r5, [r6, #0xb4]
bl GetMonsterGenderVeneer
cmp r0, #2
moveq r0, #1
streq r0, [sp, #4]
ldrsh r0, [r5, #2]
bl GetMonsterGenderVeneer
cmp r0, #2
moveq r0, #1
streq r0, [sp]
ldrb r0, [sp, #0x30]
mov sl, #0
mov r4, sl
cmp r0, #0
beq _02323CD8
cmp r7, r6
moveq r0, #1
beq _02324008
_02323CD8:
ldrh r1, [fp, #4]
ldr r0, _02324010 ; =0x00000163
cmp r1, r0
bne _02323D00
mov r0, r7
mov r1, #4
bl IqSkillIsEnabled
cmp r0, #0
movne r0, #1
bne _02324008
_02323D00:
ldrb r0, [sb, #0xec]
cmp r0, #1
moveq r0, #1
beq _02324008
cmp r0, #2
moveq r0, #0
beq _02324008
cmp r8, #0x64
movgt r0, #1
bgt _02324008
mov r0, r6
mov r1, #0x6f
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, #0
bne _02323D4C
mov r0, r6
mov r1, #0x2a
bl HasHeldItem
_02323D4C:
cmp r0, #0
ldrne r0, _02324014 ; =DETECT_BAND_MOVE_ACCURACY_DROP
mov r1, #5
ldrne r0, [r0]
subne r8, r8, r0
mov r0, r6
bl IqSkillIsEnabled
cmp r0, #0
ldrne r0, _02324018 ; =QUICK_DODGER_MOVE_ACCURACY_DROP
mov r1, #0x33
ldrne r0, [r0]
ldrsh sb, [sb, #0x2c]
subne r8, r8, r0
mov r0, r7
bl AbilityIsActiveVeneer
cmp r0, #0
ldrh r0, [fp, #4]
addne sl, sl, #2
cmp r0, #0x40
bne _02323DB8
mov r0, r7
bl GetApparentWeather
cmp r0, #4
moveq r0, #1
beq _02324008
cmp r0, #1
subeq sl, sl, #2
_02323DB8:
ldrh r1, [fp, #4]
ldr r0, _0232401C ; =0x0000010E
cmp r1, r0
bne _02323DDC
mov r0, r7
bl GetApparentWeather
cmp r0, #5
moveq r0, #1
beq _02324008
_02323DDC:
mov r0, r7
mov r1, #0x30
bl IqSkillIsEnabled
cmp r0, #0
addne sl, sl, #1
ldrb r0, [r5, #0xfe]
add sb, sb, sl
ldrsh sl, [r5, #0x2e]
cmp r0, #0
mov r0, r6
movne sl, #0xa
bl GetApparentWeather
cmp r0, #2
bne _02323E30
mov r0, r7
mov r1, r6
mov r2, #0x1d
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__02322D64
cmp r0, #0
addne r4, r4, #2
_02323E30:
mov r0, r7
mov r1, #0x30
bl AbilityIsActiveVeneer
cmp r0, #0
beq _02323E54
ldrh r0, [fp, #4]
bl MoveIsNotPhysical
cmp r0, #0
addeq r4, r4, #2
_02323E54:
mov r0, r6
mov r1, #0x3f
bl IqSkillIsEnabled
cmp r0, #0
beq _02323E94
ldrsh r2, [r5, #0x12]
ldrsh r1, [r5, #0x16]
ldr r0, _02324020 ; =0x000003E7
add r2, r2, r1
cmp r2, r0
movgt r2, r0
mov r0, r2, asr #1
ldrsh r1, [r5, #0x10]
add r0, r2, r0, lsr #30
cmp r1, r0, asr #2
addle r4, r4, #2
_02323E94:
mov r0, r6
mov r1, #0x30
bl IqSkillIsEnabled
cmp r0, #0
mov r0, r7
mov r1, r6
mov r2, #0x62
#ifndef JAPAN
mov r3, #1
#endif
subne r4, r4, #1
bl DefenderAbilityIsActive__02322D64
cmp r0, #0
beq _02323ED8
ldrb r0, [r5, #0xd0]
cmp r0, #2
ldrneb r0, [r5, #0xf1]
cmpne r0, #2
addeq r4, r4, #3
_02323ED8:
mov r0, r7
mov r1, r6
mov r2, #0x77
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__02322D64
cmp r0, #0
beq _02323F18
mov r0, r6
bl GetApparentWeather
cmp r0, #5
beq _02323F14
mov r0, r6
bl GetApparentWeather
cmp r0, #7
bne _02323F18
_02323F14:
add r4, r4, #2
_02323F18:
mov r0, r6
bl GetApparentWeather
ldr r2, _02324024 ; =EXCL_ITEM_EFFECTS_EVASION_BOOST
ldrb r1, [r2, r0]
cmp r1, #0
beq _02323F44
ldrb r1, [r2, r0]
mov r0, r6
bl ExclusiveItemEffectIsActive__02323918
cmp r0, #0
addne r4, r4, #1
_02323F44:
mov r0, r7
mov r1, #0x6a
add sl, sl, r4
bl AbilityIsActiveVeneer
cmp r0, #0
movne sb, #0xa
mov r0, r7
mov r1, r6
mov r2, #0x6a
#ifndef JAPAN
mov r3, #1
#endif
movne sl, sb
bl DefenderAbilityIsActive__02322D64
cmp r0, #0
movne sb, #0xa
movne sl, sb
cmp sb, #0
movlt sb, #0
blt _02323F94
cmp sb, #0x14
movgt sb, #0x14
_02323F94:
ldr r2, _02324028 ; =MALE_ACCURACY_STAGE_MULTIPLIERS
ldr r0, [sp, #4]
mov r1, #0xa8
mla r1, r0, r1, r2
ldr r3, [r1, sb, lsl #2]
cmp sl, #0
movlt sl, #0
cmp sl, #0x14
movgt sl, #0x14
cmp r3, #0
movlt r3, #0
cmp r3, #0x6400
ldr r2, _0232402C ; =MALE_EVASION_STAGE_MULTIPLIERS
ldr r0, [sp]
mov r1, #0xa8
mla r1, r0, r1, r2
movgt r3, #0x6400
mul r0, r8, r3
ldr r1, [r1, sl, lsl #2]
mov r8, r0, asr #8
cmp r1, #0
movlt r1, #0
cmp r1, #0x6400
movgt r1, #0x6400
mul r1, r8, r1
ldr r0, [sp, #8]
cmp r0, r1, asr #8
movlt r0, #1
movge r0, #0
_02324008:
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02324010: .word 0x00000163
_02324014: .word DETECT_BAND_MOVE_ACCURACY_DROP
_02324018: .word QUICK_DODGER_MOVE_ACCURACY_DROP
_0232401C: .word 0x0000010E
_02324020: .word 0x000003E7
_02324024: .word EXCL_ITEM_EFFECTS_EVASION_BOOST
_02324028: .word MALE_ACCURACY_STAGE_MULTIPLIERS
_0232402C: .word MALE_EVASION_STAGE_MULTIPLIERS
arm_func_end MoveHitCheck
arm_func_start BuildMoveTargetList
BuildMoveTargetList: ; 0x02324030
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x18
mov sb, r1
mov sl, r0
mov r0, sb
mov r1, #1
mov r4, #0
mov r8, r2
bl ov29_023024E0
mov r6, r0
mov r0, sb
mov r1, r4
bl ov29_023024E0
str r0, [sp, #0x10]
mov r0, sb
mov r1, r8
mov r2, r4
bl GetEntityMoveTargetAndRange
mov r5, r0
and r0, r5, #0xf
cmp r0, #4
bne _023240C0
mov r0, sb
mov r1, r8
bl IsChargingTwoTurnMove
ldrh r1, [r8, #4]
mov r5, r0
cmp r1, #0x97
bne _023240B4
mov r0, sb
bl GetApparentWeather
cmp r0, #1
moveq r5, #1
_023240B4:
cmp r5, #0
movne r5, #0
moveq r5, #0x73
_023240C0:
ands r0, r5, #0xf0
bne _023240FC
mov r0, sb
bl ov29_022F87C0
cmp r0, #0
beq _0232439C
stmia sp, {r0, r8}
mov r1, sl
mov r2, r5
mov r3, sb
mov r0, #0
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
b _0232439C
_023240FC:
cmp r0, #0x10
cmpne r0, #0x20
bne _023241AC
cmp r0, #0x20
ldr r0, [sb, #0xb4]
mov fp, #0
ldreqb r7, [r0, #0x4c]
moveq r0, #8
ldrneb r1, [r0, #0x4c]
streq r0, [sp, #0xc]
movne r0, #3
strne r0, [sp, #0xc]
subne r7, r1, #1
b _0232419C
_02324134:
and r7, r7, #7
ldr r1, _023243AC ; =DIRECTIONS_XY
mov r2, r7, lsl #2
ldrsh r2, [r1, r2]
ldrsh r0, [sb, #4]
add r1, r1, r7, lsl #2
ldrsh r1, [r1, #2]
add r0, r0, r2
strh r0, [sp, #0x14]
ldrsh r2, [sb, #6]
add r0, sp, #0x14
add r1, r2, r1
strh r1, [sp, #0x16]
bl PositionHasMonster
cmp r0, #0
beq _02324194
stmia sp, {r0, r8}
mov r0, r4
mov r1, sl
mov r2, r5
mov r3, sb
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
_02324194:
add fp, fp, #1
add r7, r7, #1
_0232419C:
ldr r0, [sp, #0xc]
cmp fp, r0
blt _02324134
b _0232439C
_023241AC:
cmp r0, #0x30
bne _02324248
mov fp, #0
_023241B8:
ldr r0, _023243B0 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, fp, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r7, [r0, #0xad4]
#else
ldr r7, [r0, #0xb78]
#endif
mov r0, r7
bl EntityIsValid__02321438
cmp r0, #0
beq _02324238
mov r0, sb
mov r1, r7
bl ov29_022E28D4
cmp r0, #0
beq _02324238
cmp r7, sb
stmia sp, {r7, r8}
mov r0, r4
bne _02324220
ldr r4, [sp, #0x10]
mov r1, sl
mov r2, r5
mov r3, sb
str r4, [sp, #8]
bl ov29_023243B4
mov r4, r0
b _02324238
_02324220:
mov r1, sl
mov r2, r5
mov r3, sb
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
_02324238:
add fp, fp, #1
cmp fp, #0x14
blt _023241B8
b _0232439C
_02324248:
cmp r0, #0x40
bne _023242C4
mov r0, sb
mov r7, #0
bl ov29_022F8830
cmp r0, #0
beq _02324288
stmia sp, {r0, r8}
mov r1, sl
mov r2, r5
mov r3, sb
mov r0, r7
str r6, [sp, #8]
bl ov29_023243B4
movs r4, r0
movne r7, #1
_02324288:
cmp r7, #0
bne _0232439C
mov r0, sb
bl ov29_022F88C0
cmp r0, #0
beq _0232439C
stmia sp, {r0, r8}
mov r0, r4
mov r1, sl
mov r2, r5
mov r3, sb
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
b _0232439C
_023242C4:
cmp r0, #0x50
beq _0232439C
cmp r0, #0x80
cmpne r0, #0x90
bne _0232430C
mov r0, sb
bl ov29_022F8830
cmp r0, #0
beq _0232439C
stmia sp, {r0, r8}
mov r1, sl
mov r2, r5
mov r3, sb
mov r0, #0
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
b _0232439C
_0232430C:
cmp r0, #0x60
bne _02324370
mov r7, #0
_02324318:
ldr r0, _023243B0 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, r7, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr fp, [r0, #0xad4]
#else
ldr fp, [r0, #0xb78]
#endif
mov r0, fp
bl EntityIsValid__02321438
cmp r0, #0
beq _02324360
str fp, [sp]
str r8, [sp, #4]
mov r0, r4
mov r1, sl
mov r2, r5
mov r3, sb
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
_02324360:
add r7, r7, #1
cmp r7, #0x14
blt _02324318
b _0232439C
_02324370:
cmp r0, #0x70
bne _0232439C
str sb, [sp]
str r8, [sp, #4]
mov r1, sl
mov r2, r5
mov r3, sb
mov r0, #0
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
_0232439C:
mov r0, #0
str r0, [sl, r4, lsl #2]
add sp, sp, #0x18
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_023243AC: .word DIRECTIONS_XY
_023243B0: .word DUNGEON_PTR
arm_func_end BuildMoveTargetList
arm_func_start ov29_023243B4
ov29_023243B4: ; 0x023243B4
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r4, [sp, #0x1c]
ldr r5, [sp, #0x18]
ldrh r4, [r4, #4]
mov r7, r1
mov r8, r0
cmp r4, #0xfc
mov r6, r3
mov r4, #0
ldr r1, [r5, #0xb4]
cmpeq r6, r5
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
ldrb r0, [r1, #9]
cmp r0, #1
moveq r0, r8
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
ldrb r0, [r1, #0xbc]
cmp r0, #7
moveq r0, r8
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
ldrb r0, [sp, #0x20]
cmp r0, #0
movne r4, #1
bne _023244C0
ands r0, r2, #0xf
cmpne r0, #4
bne _02324440
mov r0, r6
mov r1, r5
mov r2, #1
mov r3, #0
bl GetTreatmentBetweenMonsters
cmp r0, #1
moveq r4, #1
b _023244C0
_02324440:
cmp r0, #1
bne _02324468
mov r0, r6
mov r1, r5
mov r2, #1
mov r3, #0
bl GetTreatmentBetweenMonsters
cmp r0, #0
moveq r4, #1
b _023244C0
_02324468:
cmp r0, #2
moveq r4, #1
beq _023244C0
cmp r0, #5
bne _02324488
cmp r6, r5
movne r4, #1
b _023244C0
_02324488:
cmp r0, #6
bne _023244B8
mov r0, r6
mov r1, r5
mov r2, #1
mov r3, #0
bl GetTreatmentBetweenMonsters
cmp r0, #0
bne _023244C0
cmp r6, r5
movne r4, #1
b _023244C0
_023244B8:
cmp r0, #3
moveq r4, #1
_023244C0:
ldr r1, [sp, #0x1c]
mov r0, r5
bl TwoTurnMoveForcedMiss
cmp r0, #0
movne r4, #0
cmp r4, #0
beq _02324508
cmp r8, #0x40
bge _02324508
str r5, [r7, r8, lsl #2]
ldr r0, [r5, #0xb4]
add r8, r8, #1
ldrb r0, [r0, #6]
cmp r0, #0
ldreq r0, _02324510 ; =ov29_0235370C
ldreq r1, [r0]
cmpeq r1, #0
streq r5, [r0]
_02324508:
mov r0, r8
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
_02324510: .word ov29_0235370C
arm_func_end ov29_023243B4
arm_func_start ov29_02324514
ov29_02324514: ; 0x02324514
stmdb sp!, {r3, lr}
bl GetMoveNbStrikes
cmp r0, #0
ldmneia sp!, {r3, pc}
mov r0, #2
mov r1, #6
bl DungeonRandRange
ldmia sp!, {r3, pc}
arm_func_end ov29_02324514
arm_func_start IsHyperBeamVariant
IsHyperBeamVariant: ; 0x02324534
ldrh r2, [r0, #4]
cmp r2, #0xee
moveq r0, #1
bxeq lr
cmp r2, #0xef
moveq r0, #1
bxeq lr
cmp r2, #0xf2
moveq r0, #1
bxeq lr
cmp r2, #0x110
moveq r0, #1
bxeq lr
ldr r1, _023245A0 ; =0x000001C5
cmp r2, r1
moveq r0, #1
bxeq lr
add r0, r1, #2
cmp r2, r0
moveq r0, #1
bxeq lr
add r0, r1, #0x29
cmp r2, r0
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
bx lr
.align 2, 0
_023245A0: .word 0x000001C5
arm_func_end IsHyperBeamVariant

906
asm/overlay_29_0232393C.s Normal file
View File

@@ -0,0 +1,906 @@
.include "asm/macros.inc"
.include "overlay_29_0232393C.inc"
.text
arm_func_start ov29_0232393C
ov29_0232393C: ; 0x0232393C
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x38
ldr r0, [r0, #0xb4]
mov sb, r2
str r0, [sp, #0x18]
mov sl, r1
ldrh r0, [sb, #4]
ldr r1, [sp, #0x60]
str r3, [sp]
str r1, [sp, #0x60]
ldr r7, [sl, #0xb4]
bl GetMoveAnimationSpeed
cmp r0, #1
moveq r6, #2
beq _02323984
cmp r0, #2
moveq r6, #3
movne r6, #6
_02323984:
ldr r0, [sp, #0x18]
ldr r4, _02323C30 ; =DIRECTIONS_XY
ldrb r1, [r0, #0x4c]
ldrsh r0, [sl, #4]
ldr r5, _02323C34 ; =DIRECTIONS_XY + 2
add r1, r1, #4
strh r0, [sp, #0x34]
and r0, r1, #7
mov r8, r0, lsl #2
ldrsh r4, [r4, r8]
ldrsh r3, [sl, #6]
add r1, sp, #0x34
str r4, [sp, #0x24]
ldrsh r4, [r5, r8]
strh r3, [sp, #0x36]
ldr r3, [sp]
mov r0, sl
mov r2, sb
str r4, [sp, #0x20]
bl ov29_02322F78
mov r4, r0
mov r1, r6
mov r0, #0x18
bl _s32_div_f
str r0, [sp, #4]
ldr r0, [sp]
cmp r0, #2
mov r2, r0
ldr r0, [sp, #4]
mul r1, r2, r0
blt _02323A18
add r0, r1, #8
str r0, [sp, #0x14]
cmp r0, #0x40
movge r0, #0x40
strge r0, [sp, #0x14]
b _02323A20
_02323A18:
mov r0, #0x20
str r0, [sp, #0x14]
_02323A20:
mov r0, #0x80000
mov r5, #0
bl _s32_div_f
str r0, [sp, #0x1c]
ldrb r2, [r7, #0x4c]
ldr r1, _02323C38 ; =ov29_02352A8C
mov r0, #1
ldr r1, [r1, r2, lsl #2]
str r1, [sp, #0x10]
bl ov29_0234B4CC
ldr r0, [sp, #0x24]
mov r2, r6, lsl #8
mul r1, r0, r2
ldr r0, [sp, #0x20]
str r1, [sp, #0xc]
mul r1, r0, r2
mov fp, r5
str r1, [sp, #8]
b _02323BC0
_02323A6C:
ldrsh r2, [sp, #0x34]
cmp r2, #0
ldrgesh r1, [sp, #0x36]
cmpge r1, #0
blt _02323BCC
cmp r2, #0x38
cmplt r1, #0x20
bge _02323BCC
ldr r0, [sp, #0x24]
ldrh r6, [sp, #0x34]
add r2, r2, r0
ldr r0, [sp, #0x20]
ldrh r3, [sp, #0x36]
add r1, r1, r0
add r0, sp, #0x34
strh r6, [sp, #0x30]
strh r3, [sp, #0x32]
strh r2, [sp, #0x34]
strh r1, [sp, #0x36]
bl ov29_022E2CA0
cmp r0, #0
beq _02323BB0
ldr r0, _02323C3C ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x1a000
#ifdef JAPAN
ldrb r0, [r0, #0x19a]
#else
ldrb r0, [r0, #0x23e]
#endif
cmp r0, #0
bne _02323BB0
ldrsh r2, [sp, #0x30]
ldrsh r1, [sp, #0x32]
mov r0, #0x18
smulbb r2, r2, r0
smulbb r0, r1, r0
add r0, r0, #0x10
mov r8, r0, lsl #8
mov r0, r4, lsl #0x10
add r1, r2, #0xc
mov r0, r0, asr #0x10
mov r7, r1, lsl #8
mov r6, #0
str r0, [sp, #0x28]
b _02323BA0
_02323B14:
cmp r4, #0
blt _02323B7C
ldr r0, [sp, #0x60]
cmp r0, #1
movne r0, #0
bne _02323B3C
mov r0, r5, asr #8
bl sub_020018D0
ldr r1, [sp, #0x14]
mul r0, r1, r0
_02323B3C:
sub r0, r8, r0
ldr r2, _02323C3C ; =DUNGEON_PTR
mov r0, r0, asr #8
strh r0, [sp, #0x2e]
mov r0, r7, asr #8
ldr r3, [r2]
strh r0, [sp, #0x2c]
ldr r2, _02323C40 ; =0x0001A226
ldr r0, [sp, #0x28]
ldrsh r2, [r3, r2]
add r1, sp, #0x2c
rsb r2, r2, r8, asr #8
add r3, r2, r2, lsr #31
ldr r2, [sp, #0x10]
add r2, r2, r3, asr #1
bl ov10_022BEB2C
_02323B7C:
mov r0, #0x30
bl AdvanceFrame
ldr r0, [sp, #0xc]
add r6, r6, #1
add r7, r7, r0
ldr r0, [sp, #8]
add r8, r8, r0
ldr r0, [sp, #0x1c]
add r5, r5, r0
_02323BA0:
ldr r0, [sp, #4]
cmp r6, r0
blt _02323B14
b _02323BBC
_02323BB0:
ldr r1, [sp, #0x1c]
ldr r0, [sp, #4]
mla r5, r1, r0, r5
_02323BBC:
add fp, fp, #1
_02323BC0:
ldr r0, [sp]
cmp fp, r0
blt _02323A6C
_02323BCC:
cmp r4, #0
blt _02323BE0
mov r0, r4, lsl #0x10
mov r0, r0, asr #0x10
bl ov10_022BDE50
_02323BE0:
mov r0, #1
bl AnimationDelayOrSomething
mov r0, #0
bl ov29_0234B4CC
mov r0, #1
mov r1, #0x4a
bl ov29_022EA370
ldrh r1, [sb, #4]
ldr r0, _02323C44 ; =0x00000232
add r3, sp, #0x34
cmp r1, r0
ldreq r0, [sp, #0x18]
moveq r1, #0
#ifdef JAPAN
streqb r1, [r0, #0x16c]
#else
streqb r1, [r0, #0x170]
#endif
mov r0, sl
mov r2, sb
mov r1, #0
bl PlayMoveAnimation
add sp, sp, #0x38
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02323C30: .word DIRECTIONS_XY
_02323C34: .word DIRECTIONS_XY + 2
_02323C38: .word ov29_02352A8C
_02323C3C: .word DUNGEON_PTR
#ifdef JAPAN
_02323C40: .word 0x0001A182
#else
_02323C40: .word 0x0001A226
#endif
_02323C44: .word 0x00000232
arm_func_end ov29_0232393C
arm_func_start MoveHitCheck
MoveHitCheck: ; 0x02323C48
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xc
mov fp, r2
mov r7, r0
mov r6, r1
mov r0, fp
mov r1, r3
bl GetMoveAccuracyOrAiChance
mov r8, r0
mov r0, #0x64
bl DungeonRandInt
mov r1, #0
str r1, [sp, #4]
ldr sb, [r7, #0xb4]
str r0, [sp, #8]
ldrsh r0, [sb, #2]
mov r1, r1
str r1, [sp]
ldr r5, [r6, #0xb4]
bl GetMonsterGenderVeneer
cmp r0, #2
moveq r0, #1
streq r0, [sp, #4]
ldrsh r0, [r5, #2]
bl GetMonsterGenderVeneer
cmp r0, #2
moveq r0, #1
streq r0, [sp]
ldrb r0, [sp, #0x30]
mov sl, #0
mov r4, sl
cmp r0, #0
beq _02323CD8
cmp r7, r6
moveq r0, #1
beq _02324008
_02323CD8:
ldrh r1, [fp, #4]
ldr r0, _02324010 ; =0x00000163
cmp r1, r0
bne _02323D00
mov r0, r7
mov r1, #4
bl IqSkillIsEnabled
cmp r0, #0
movne r0, #1
bne _02324008
_02323D00:
ldrb r0, [sb, #0xec]
cmp r0, #1
moveq r0, #1
beq _02324008
cmp r0, #2
moveq r0, #0
beq _02324008
cmp r8, #0x64
movgt r0, #1
bgt _02324008
mov r0, r6
mov r1, #0x6f
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, #0
bne _02323D4C
mov r0, r6
mov r1, #0x2a
bl HasHeldItem
_02323D4C:
cmp r0, #0
ldrne r0, _02324014 ; =DETECT_BAND_MOVE_ACCURACY_DROP
mov r1, #5
ldrne r0, [r0]
subne r8, r8, r0
mov r0, r6
bl IqSkillIsEnabled
cmp r0, #0
ldrne r0, _02324018 ; =QUICK_DODGER_MOVE_ACCURACY_DROP
mov r1, #0x33
ldrne r0, [r0]
ldrsh sb, [sb, #0x2c]
subne r8, r8, r0
mov r0, r7
bl AbilityIsActiveVeneer
cmp r0, #0
ldrh r0, [fp, #4]
addne sl, sl, #2
cmp r0, #0x40
bne _02323DB8
mov r0, r7
bl GetApparentWeather
cmp r0, #4
moveq r0, #1
beq _02324008
cmp r0, #1
subeq sl, sl, #2
_02323DB8:
ldrh r1, [fp, #4]
ldr r0, _0232401C ; =0x0000010E
cmp r1, r0
bne _02323DDC
mov r0, r7
bl GetApparentWeather
cmp r0, #5
moveq r0, #1
beq _02324008
_02323DDC:
mov r0, r7
mov r1, #0x30
bl IqSkillIsEnabled
cmp r0, #0
addne sl, sl, #1
ldrb r0, [r5, #0xfe]
add sb, sb, sl
ldrsh sl, [r5, #0x2e]
cmp r0, #0
mov r0, r6
movne sl, #0xa
bl GetApparentWeather
cmp r0, #2
bne _02323E30
mov r0, r7
mov r1, r6
mov r2, #0x1d
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__02322D64
cmp r0, #0
addne r4, r4, #2
_02323E30:
mov r0, r7
mov r1, #0x30
bl AbilityIsActiveVeneer
cmp r0, #0
beq _02323E54
ldrh r0, [fp, #4]
bl MoveIsNotPhysical
cmp r0, #0
addeq r4, r4, #2
_02323E54:
mov r0, r6
mov r1, #0x3f
bl IqSkillIsEnabled
cmp r0, #0
beq _02323E94
ldrsh r2, [r5, #0x12]
ldrsh r1, [r5, #0x16]
ldr r0, _02324020 ; =0x000003E7
add r2, r2, r1
cmp r2, r0
movgt r2, r0
mov r0, r2, asr #1
ldrsh r1, [r5, #0x10]
add r0, r2, r0, lsr #30
cmp r1, r0, asr #2
addle r4, r4, #2
_02323E94:
mov r0, r6
mov r1, #0x30
bl IqSkillIsEnabled
cmp r0, #0
mov r0, r7
mov r1, r6
mov r2, #0x62
#ifndef JAPAN
mov r3, #1
#endif
subne r4, r4, #1
bl DefenderAbilityIsActive__02322D64
cmp r0, #0
beq _02323ED8
ldrb r0, [r5, #0xd0]
cmp r0, #2
ldrneb r0, [r5, #0xf1]
cmpne r0, #2
addeq r4, r4, #3
_02323ED8:
mov r0, r7
mov r1, r6
mov r2, #0x77
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__02322D64
cmp r0, #0
beq _02323F18
mov r0, r6
bl GetApparentWeather
cmp r0, #5
beq _02323F14
mov r0, r6
bl GetApparentWeather
cmp r0, #7
bne _02323F18
_02323F14:
add r4, r4, #2
_02323F18:
mov r0, r6
bl GetApparentWeather
ldr r2, _02324024 ; =EXCL_ITEM_EFFECTS_EVASION_BOOST
ldrb r1, [r2, r0]
cmp r1, #0
beq _02323F44
ldrb r1, [r2, r0]
mov r0, r6
bl ExclusiveItemEffectIsActive__02323918
cmp r0, #0
addne r4, r4, #1
_02323F44:
mov r0, r7
mov r1, #0x6a
add sl, sl, r4
bl AbilityIsActiveVeneer
cmp r0, #0
movne sb, #0xa
mov r0, r7
mov r1, r6
mov r2, #0x6a
#ifndef JAPAN
mov r3, #1
#endif
movne sl, sb
bl DefenderAbilityIsActive__02322D64
cmp r0, #0
movne sb, #0xa
movne sl, sb
cmp sb, #0
movlt sb, #0
blt _02323F94
cmp sb, #0x14
movgt sb, #0x14
_02323F94:
ldr r2, _02324028 ; =MALE_ACCURACY_STAGE_MULTIPLIERS
ldr r0, [sp, #4]
mov r1, #0xa8
mla r1, r0, r1, r2
ldr r3, [r1, sb, lsl #2]
cmp sl, #0
movlt sl, #0
cmp sl, #0x14
movgt sl, #0x14
cmp r3, #0
movlt r3, #0
cmp r3, #0x6400
ldr r2, _0232402C ; =MALE_EVASION_STAGE_MULTIPLIERS
ldr r0, [sp]
mov r1, #0xa8
mla r1, r0, r1, r2
movgt r3, #0x6400
mul r0, r8, r3
ldr r1, [r1, sl, lsl #2]
mov r8, r0, asr #8
cmp r1, #0
movlt r1, #0
cmp r1, #0x6400
movgt r1, #0x6400
mul r1, r8, r1
ldr r0, [sp, #8]
cmp r0, r1, asr #8
movlt r0, #1
movge r0, #0
_02324008:
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02324010: .word 0x00000163
_02324014: .word DETECT_BAND_MOVE_ACCURACY_DROP
_02324018: .word QUICK_DODGER_MOVE_ACCURACY_DROP
_0232401C: .word 0x0000010E
_02324020: .word 0x000003E7
_02324024: .word EXCL_ITEM_EFFECTS_EVASION_BOOST
_02324028: .word MALE_ACCURACY_STAGE_MULTIPLIERS
_0232402C: .word MALE_EVASION_STAGE_MULTIPLIERS
arm_func_end MoveHitCheck
arm_func_start BuildMoveTargetList
BuildMoveTargetList: ; 0x02324030
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x18
mov sb, r1
mov sl, r0
mov r0, sb
mov r1, #1
mov r4, #0
mov r8, r2
bl ov29_023024E0
mov r6, r0
mov r0, sb
mov r1, r4
bl ov29_023024E0
str r0, [sp, #0x10]
mov r0, sb
mov r1, r8
mov r2, r4
bl GetEntityMoveTargetAndRange
mov r5, r0
and r0, r5, #0xf
cmp r0, #4
bne _023240C0
mov r0, sb
mov r1, r8
bl IsChargingTwoTurnMove
ldrh r1, [r8, #4]
mov r5, r0
cmp r1, #0x97
bne _023240B4
mov r0, sb
bl GetApparentWeather
cmp r0, #1
moveq r5, #1
_023240B4:
cmp r5, #0
movne r5, #0
moveq r5, #0x73
_023240C0:
ands r0, r5, #0xf0
bne _023240FC
mov r0, sb
bl ov29_022F87C0
cmp r0, #0
beq _0232439C
stmia sp, {r0, r8}
mov r1, sl
mov r2, r5
mov r3, sb
mov r0, #0
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
b _0232439C
_023240FC:
cmp r0, #0x10
cmpne r0, #0x20
bne _023241AC
cmp r0, #0x20
ldr r0, [sb, #0xb4]
mov fp, #0
ldreqb r7, [r0, #0x4c]
moveq r0, #8
ldrneb r1, [r0, #0x4c]
streq r0, [sp, #0xc]
movne r0, #3
strne r0, [sp, #0xc]
subne r7, r1, #1
b _0232419C
_02324134:
and r7, r7, #7
ldr r1, _023243AC ; =DIRECTIONS_XY
mov r2, r7, lsl #2
ldrsh r2, [r1, r2]
ldrsh r0, [sb, #4]
add r1, r1, r7, lsl #2
ldrsh r1, [r1, #2]
add r0, r0, r2
strh r0, [sp, #0x14]
ldrsh r2, [sb, #6]
add r0, sp, #0x14
add r1, r2, r1
strh r1, [sp, #0x16]
bl PositionHasMonster
cmp r0, #0
beq _02324194
stmia sp, {r0, r8}
mov r0, r4
mov r1, sl
mov r2, r5
mov r3, sb
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
_02324194:
add fp, fp, #1
add r7, r7, #1
_0232419C:
ldr r0, [sp, #0xc]
cmp fp, r0
blt _02324134
b _0232439C
_023241AC:
cmp r0, #0x30
bne _02324248
mov fp, #0
_023241B8:
ldr r0, _023243B0 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, fp, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r7, [r0, #0xad4]
#else
ldr r7, [r0, #0xb78]
#endif
mov r0, r7
bl EntityIsValid__02321438
cmp r0, #0
beq _02324238
mov r0, sb
mov r1, r7
bl ov29_022E28D4
cmp r0, #0
beq _02324238
cmp r7, sb
stmia sp, {r7, r8}
mov r0, r4
bne _02324220
ldr r4, [sp, #0x10]
mov r1, sl
mov r2, r5
mov r3, sb
str r4, [sp, #8]
bl ov29_023243B4
mov r4, r0
b _02324238
_02324220:
mov r1, sl
mov r2, r5
mov r3, sb
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
_02324238:
add fp, fp, #1
cmp fp, #0x14
blt _023241B8
b _0232439C
_02324248:
cmp r0, #0x40
bne _023242C4
mov r0, sb
mov r7, #0
bl ov29_022F8830
cmp r0, #0
beq _02324288
stmia sp, {r0, r8}
mov r1, sl
mov r2, r5
mov r3, sb
mov r0, r7
str r6, [sp, #8]
bl ov29_023243B4
movs r4, r0
movne r7, #1
_02324288:
cmp r7, #0
bne _0232439C
mov r0, sb
bl ov29_022F88C0
cmp r0, #0
beq _0232439C
stmia sp, {r0, r8}
mov r0, r4
mov r1, sl
mov r2, r5
mov r3, sb
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
b _0232439C
_023242C4:
cmp r0, #0x50
beq _0232439C
cmp r0, #0x80
cmpne r0, #0x90
bne _0232430C
mov r0, sb
bl ov29_022F8830
cmp r0, #0
beq _0232439C
stmia sp, {r0, r8}
mov r1, sl
mov r2, r5
mov r3, sb
mov r0, #0
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
b _0232439C
_0232430C:
cmp r0, #0x60
bne _02324370
mov r7, #0
_02324318:
ldr r0, _023243B0 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, r7, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr fp, [r0, #0xad4]
#else
ldr fp, [r0, #0xb78]
#endif
mov r0, fp
bl EntityIsValid__02321438
cmp r0, #0
beq _02324360
str fp, [sp]
str r8, [sp, #4]
mov r0, r4
mov r1, sl
mov r2, r5
mov r3, sb
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
_02324360:
add r7, r7, #1
cmp r7, #0x14
blt _02324318
b _0232439C
_02324370:
cmp r0, #0x70
bne _0232439C
str sb, [sp]
str r8, [sp, #4]
mov r1, sl
mov r2, r5
mov r3, sb
mov r0, #0
str r6, [sp, #8]
bl ov29_023243B4
mov r4, r0
_0232439C:
mov r0, #0
str r0, [sl, r4, lsl #2]
add sp, sp, #0x18
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_023243AC: .word DIRECTIONS_XY
_023243B0: .word DUNGEON_PTR
arm_func_end BuildMoveTargetList
arm_func_start ov29_023243B4
ov29_023243B4: ; 0x023243B4
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r4, [sp, #0x1c]
ldr r5, [sp, #0x18]
ldrh r4, [r4, #4]
mov r7, r1
mov r8, r0
cmp r4, #0xfc
mov r6, r3
mov r4, #0
ldr r1, [r5, #0xb4]
cmpeq r6, r5
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
ldrb r0, [r1, #9]
cmp r0, #1
moveq r0, r8
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
ldrb r0, [r1, #0xbc]
cmp r0, #7
moveq r0, r8
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
ldrb r0, [sp, #0x20]
cmp r0, #0
movne r4, #1
bne _023244C0
ands r0, r2, #0xf
cmpne r0, #4
bne _02324440
mov r0, r6
mov r1, r5
mov r2, #1
mov r3, #0
bl GetTreatmentBetweenMonsters
cmp r0, #1
moveq r4, #1
b _023244C0
_02324440:
cmp r0, #1
bne _02324468
mov r0, r6
mov r1, r5
mov r2, #1
mov r3, #0
bl GetTreatmentBetweenMonsters
cmp r0, #0
moveq r4, #1
b _023244C0
_02324468:
cmp r0, #2
moveq r4, #1
beq _023244C0
cmp r0, #5
bne _02324488
cmp r6, r5
movne r4, #1
b _023244C0
_02324488:
cmp r0, #6
bne _023244B8
mov r0, r6
mov r1, r5
mov r2, #1
mov r3, #0
bl GetTreatmentBetweenMonsters
cmp r0, #0
bne _023244C0
cmp r6, r5
movne r4, #1
b _023244C0
_023244B8:
cmp r0, #3
moveq r4, #1
_023244C0:
ldr r1, [sp, #0x1c]
mov r0, r5
bl TwoTurnMoveForcedMiss
cmp r0, #0
movne r4, #0
cmp r4, #0
beq _02324508
cmp r8, #0x40
bge _02324508
str r5, [r7, r8, lsl #2]
ldr r0, [r5, #0xb4]
add r8, r8, #1
ldrb r0, [r0, #6]
cmp r0, #0
ldreq r0, _02324510 ; =ov29_0235370C
ldreq r1, [r0]
cmpeq r1, #0
streq r5, [r0]
_02324508:
mov r0, r8
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
_02324510: .word ov29_0235370C
arm_func_end ov29_023243B4
arm_func_start ov29_02324514
ov29_02324514: ; 0x02324514
stmdb sp!, {r3, lr}
bl GetMoveNbStrikes
cmp r0, #0
ldmneia sp!, {r3, pc}
mov r0, #2
mov r1, #6
bl DungeonRandRange
ldmia sp!, {r3, pc}
arm_func_end ov29_02324514
arm_func_start IsHyperBeamVariant
IsHyperBeamVariant: ; 0x02324534
ldrh r2, [r0, #4]
cmp r2, #0xee
moveq r0, #1
bxeq lr
cmp r2, #0xef
moveq r0, #1
bxeq lr
cmp r2, #0xf2
moveq r0, #1
bxeq lr
cmp r2, #0x110
moveq r0, #1
bxeq lr
ldr r1, _023245A0 ; =0x000001C5
cmp r2, r1
moveq r0, #1
bxeq lr
add r0, r1, #2
cmp r2, r0
moveq r0, #1
bxeq lr
add r0, r1, #0x29
cmp r2, r0
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
bx lr
.align 2, 0
_023245A0: .word 0x000001C5
arm_func_end IsHyperBeamVariant

File diff suppressed because it is too large Load Diff

1640
asm/overlay_29_02332A0C.s Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,21 +0,0 @@
.include "asm/macros.inc"
.include "overlay_29_02347B80.inc"
.text
arm_func_start ExclusiveItemEffectIsActive__02347B80
ExclusiveItemEffectIsActive__02347B80: ; 0x02347B80
stmdb sp!, {r3, lr}
ldr r2, [r0, #0xb4]
ldrb r0, [r2, #6]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, pc}
#ifdef JAPAN
add r0, r2, #0x224
#else
add r0, r2, #0x228
#endif
bl ExclusiveItemEffectFlagTest
ldmia sp!, {r3, pc}
arm_func_end ExclusiveItemEffectIsActive__02347B80

View File

@@ -2,17 +2,17 @@
.include "overlay_29_bss_0237CA18.inc"
.bss
.global CAN_ATTACK_IN_DIRECTION
CAN_ATTACK_IN_DIRECTION:
.global AI_CAN_ATTACK_IN_DIRECTION
AI_CAN_ATTACK_IN_DIRECTION:
.space 0x8
.global POTENTIAL_ATTACK_TARGET_DIRECTIONS
POTENTIAL_ATTACK_TARGET_DIRECTIONS:
.global AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS:
.space 0x8
.global POTENTIAL_ATTACK_TARGET_WEIGHTS
POTENTIAL_ATTACK_TARGET_WEIGHTS:
.global AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
AI_POTENTIAL_ATTACK_TARGET_WEIGHTS:
.space 0x20
.global POTENTIAL_TARGETS
POTENTIAL_TARGETS:
.global AI_POTENTIAL_ATTACK_TARGETS
AI_POTENTIAL_ATTACK_TARGETS:
.space 0x20
.global ov29_0237CA68
ov29_0237CA68:

View File

@@ -12,7 +12,7 @@ struct ai_possible_move
s32 weight;
};
// The AI uses this function to check if a move has any potential targets, to calculate the list of potential targets and to calculate the move's special weight. The weight is calculated using WeightMove.
// The AI uses this function to check if a move has any potential targets, to calculate the list of potential targets and to calculate the move's special weight. The weight is calculated using WeightMoveWithIqSkills.
// This function also sets the flag can_be_used on the ai_possible_move struct if it makes sense to use it.
// The weight returned by this function is not the same as GetMoveAiWeight. If the AI does not have Weak-Type Picker, AiConsiderMove is called after the AI has selected which move it will use (using GetMoveAiWeight). It determines whether it makes sense for the AI to actually use the chosen move (i.e., whether targets are in range), and which direction the AI will use the move in if so. The return value of this function is not used anywhere in this case.
// If the AI has Weak-Type Picker, the AI calls this function earlier in the AI logic to determine which move to use, using the returned special weight to find which move has the most advantageous type matchups.

View File

@@ -0,0 +1,7 @@
#ifndef PMDSKY_DUNGEON_AI_ATTACK_2_H
#define PMDSKY_DUNGEON_AI_ATTACK_2_H
// Sets all values in AI_CAN_ATTACK_IN_DIRECTION to false.
void ResetAiCanAttackInDirection();
#endif //PMDSKY_DUNGEON_AI_ATTACK_2_H

View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_DUNGEON_LOGIC_3_H
#define PMDSKY_DUNGEON_LOGIC_3_H
#include "dungeon_mode.h"
// Checks if a monster is a given type.
bool8 MonsterIsType(struct entity *entity, enum type_id type_id);
#endif //PMDSKY_DUNGEON_LOGIC_3_H

View File

@@ -1460,6 +1460,143 @@ enum item_data_flag {
ITEM_DATA_FLAG_THROWABLE_AT_ENEMY = 1 << 7,
};
// Exclusive effect ID. These are usually encoded as bitvectors.
// Some of these are unused in-game but still labeled if easy to infer.
// See https://docs.google.com/spreadsheets/d/1XfE0x6JtLKDlCCvp5doNwyFpMX0C2HZCUCiDc1eMb1g
// for a list of exclusive items that map to each effect.
enum exclusive_item_effect_id {
EXCLUSIVE_EFF_STAT_BOOST = 0, // Normal stat boosts; don't have a unique effect
EXCLUSIVE_EFF_NO_PARALYSIS = 1,
EXCLUSIVE_EFF_NO_CONFUSION = 2,
EXCLUSIVE_EFF_NO_INFATUATION = 3,
EXCLUSIVE_EFF_NO_FREEZE = 4,
EXCLUSIVE_EFF_NO_CRITICAL_HITS = 5,
EXCLUSIVE_EFF_HALVED_EXPLOSION_DAMAGE = 6,
EXCLUSIVE_EFF_NO_EXPLOSION_DAMAGE = 7,
EXCLUSIVE_EFF_NO_MOVE_DISABLING = 8,
EXCLUSIVE_EFF_NO_WEATHER_DAMAGE = 9,
EXCLUSIVE_EFF_NO_SLEEP = 10,
EXCLUSIVE_EFF_MAY_POISON_PARALYZE_SLEEP_ATTACKERS = 11,
EXCLUSIVE_EFF_UNUSED_0xC = 12, // Probably "may afflict <some status> on attackers"
EXCLUSIVE_EFF_MAY_SLEEP_ATTACKERS = 13,
EXCLUSIVE_EFF_MAY_NIGHTMARE_ATTACKERS = 14,
EXCLUSIVE_EFF_MAY_BURN_ATTACKERS = 15,
EXCLUSIVE_EFF_MAY_PARALYZE_ATTACKERS = 16,
EXCLUSIVE_EFF_MAY_CONFUSE_ATTACKERS = 17,
EXCLUSIVE_EFF_MAY_INFATUATE_ATTACKERS = 18,
EXCLUSIVE_EFF_MAY_FREEZE_ATTACKERS = 19,
EXCLUSIVE_EFF_MAY_SHADOW_HOLD_ATTACKERS = 20,
EXCLUSIVE_EFF_MAY_CONSTRICT_ATTACKERS = 21,
EXCLUSIVE_EFF_MAY_CRINGE_ATTACKERS = 22,
EXCLUSIVE_EFF_MAY_BLINKER_ATTACKERS = 23,
EXCLUSIVE_EFF_MAY_SEAL_ATTACKER_MOVES = 24,
EXCLUSIVE_EFF_MAY_GO_INVISIBLE_WHEN_ATTACKED = 25,
EXCLUSIVE_EFF_MAY_BOOST_MOVEMENT_SPEED_WHEN_ATTACKED = 26,
EXCLUSIVE_EFF_MAY_WARP_WHEN_ATTACKED = 27,
EXCLUSIVE_EFF_MAY_PERISH_SONG_ATTACKERS = 28,
EXCLUSIVE_EFF_MAY_SLOW_ATTACKERS = 29,
EXCLUSIVE_EFF_HALVED_PHYSICAL_DAMAGE = 30,
EXCLUSIVE_EFF_HALVED_SPECIAL_DAMAGE = 31,
EXCLUSIVE_EFF_COUNTER_PHYSICAL_DAMAGE = 32,
EXCLUSIVE_EFF_MAY_BOUNCE_STATUS_MOVES = 33,
EXCLUSIVE_EFF_MAY_ENDURE = 34,
EXCLUSIVE_EFF_COUNTER_25_PCT_PHYSICAL_DAMAGE = 35,
EXCLUSIVE_EFF_LONG_TOSS = 36,
EXCLUSIVE_EFF_MAY_BOUNCE_MOVES = 37,
EXCLUSIVE_EFF_NO_STAT_DROPS = 38,
EXCLUSIVE_EFF_CONVERSION_2_WHEN_HIT = 39,
EXCLUSIVE_EFF_NO_STATUS_WHEN_CLEAR = 40,
EXCLUSIVE_EFF_NO_STATUS_WHEN_SUNNY = 41,
EXCLUSIVE_EFF_NO_STATUS_WHEN_SANDSTORM = 42,
EXCLUSIVE_EFF_NO_STATUS_WHEN_CLOUDY = 43,
EXCLUSIVE_EFF_NO_STATUS_WHEN_RAINY = 44,
EXCLUSIVE_EFF_NO_STATUS_WHEN_HAIL = 45,
EXCLUSIVE_EFF_NO_STATUS_WHEN_FOGGY = 46,
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_CLEAR = 47,
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_SUNNY = 48,
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_SANDSTORM = 49,
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_CLOUDY = 50,
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_RAINY = 51,
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_HAIL = 52,
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_FOGGY = 53,
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_CLEAR = 54,
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_SUNNY = 55,
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_SANDSTORM = 56, // Unused in-game
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_CLOUDY = 57, // Unused in-game
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_RAINY = 58,
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_HAIL = 59,
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_FOGGY = 60, // Unused in-game
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_CLEAR = 61,
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_SUNNY = 62,
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_SANDSTORM = 63,
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_CLOUDY = 64,
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_RAINY = 65,
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_HAIL = 66, // Unused in-game
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_FOGGY = 67,
EXCLUSIVE_EFF_BYPASS_REFLECT_LIGHT_SCREEN = 68,
EXCLUSIVE_EFF_SCRAPPY = 69,
EXCLUSIVE_EFF_MIRACLE_EYE = 70,
EXCLUSIVE_EFF_RESTORE_PP_ON_NEW_FLOORS = 71,
EXCLUSIVE_EFF_RESTORE_HP_ON_NEW_FLOORS = 72,
EXCLUSIVE_EFF_INCREASED_HP_RECOVERY = 73,
EXCLUSIVE_EFF_MAX_PP_BOOST = 74,
EXCLUSIVE_EFF_UNUSED_0x4B = 75,
EXCLUSIVE_EFF_MAX_HP_BOOST_10 = 76,
EXCLUSIVE_EFF_MAX_HP_BOOST_20 = 77, // Unused in-game
EXCLUSIVE_EFF_MAX_HP_BOOST_30 = 78, // Unused in-game
EXCLUSIVE_EFF_EXP_BOOST = 79,
EXCLUSIVE_EFF_EXP_FROM_DAMAGE = 80,
EXCLUSIVE_EFF_MAY_RESTORE_PP_FROM_DAMAGE = 81,
EXCLUSIVE_EFF_MAY_NOT_CONSUME_PP = 82,
EXCLUSIVE_EFF_THROWN_ITEM_PROTECTION = 83,
EXCLUSIVE_EFF_BOUNCE_THROWN_ITEMS = 84,
EXCLUSIVE_EFF_EXTEND_SELF_EFFECTS_TO_TEAM = 85,
EXCLUSIVE_EFF_MORE_TREASURE_DROPS = 86,
EXCLUSIVE_EFF_HP_DRAIN_RECOVERY_BOOST = 87,
EXCLUSIVE_EFF_PRESSURE_BOOST = 88,
EXCLUSIVE_EFF_NO_STATUS = 89,
EXCLUSIVE_EFF_HALVED_DAMAGE = 90,
EXCLUSIVE_EFF_DAMAGE_BOOST_50_PCT = 91,
EXCLUSIVE_EFF_ABSORB_TEAMMATE_POISON = 92,
EXCLUSIVE_EFF_RECOVER_HP_FROM_APPLES_AND_BERRIES = 93,
EXCLUSIVE_EFF_MORE_KECLEON_SHOPS = 94,
EXCLUSIVE_EFF_MORE_HIDDEN_STAIRS = 95,
EXCLUSIVE_EFF_NO_FRIENDLY_FIRE = 96,
EXCLUSIVE_EFF_PICKUP_BOOST = 97,
EXCLUSIVE_EFF_MORE_MONEY_DROPS = 98,
EXCLUSIVE_EFF_UNUSED_0x63 = 99,
EXCLUSIVE_EFF_RECOVER_HP_FROM_WATERY_TERRAIN = 100,
EXCLUSIVE_EFF_HEAL_STATUS_FROM_WATERY_TERRAIN = 101,
EXCLUSIVE_EFF_NO_FIRE_DAMAGE = 102,
EXCLUSIVE_EFF_NO_WATER_DAMAGE = 103,
EXCLUSIVE_EFF_NO_GRASS_DAMAGE = 104,
EXCLUSIVE_EFF_NO_ELECTRIC_DAMAGE = 105,
EXCLUSIVE_EFF_NO_FIGHTING_DAMAGE = 106,
EXCLUSIVE_EFF_NO_GROUND_DAMAGE = 107,
EXCLUSIVE_EFF_NO_FLYING_DAMAGE = 108,
EXCLUSIVE_EFF_NO_PSYCHIC_DAMAGE = 109,
EXCLUSIVE_EFF_NO_GHOST_DAMAGE = 110,
EXCLUSIVE_EFF_NO_DRAGON_DAMAGE = 111,
EXCLUSIVE_EFF_NO_DARK_DAMAGE = 112,
EXCLUSIVE_EFF_NO_STEEL_DAMAGE = 113,
EXCLUSIVE_EFF_ABSORB_FIRE_DAMAGE = 114,
EXCLUSIVE_EFF_ABSORB_WATER_DAMAGE = 115,
EXCLUSIVE_EFF_ABSORB_GRASS_DAMAGE = 116,
EXCLUSIVE_EFF_ABSORB_ELECTRIC_DAMAGE = 117,
EXCLUSIVE_EFF_ABSORB_ICE_DAMAGE = 118,
EXCLUSIVE_EFF_ABSORB_FIGHTING_DAMAGE = 119,
EXCLUSIVE_EFF_ABSORB_GROUND_DAMAGE = 120,
EXCLUSIVE_EFF_ABSORB_FLYING_DAMAGE = 121,
EXCLUSIVE_EFF_ABSORB_PSYCHIC_DAMAGE = 122,
EXCLUSIVE_EFF_ABSORB_BUG_DAMAGE = 123,
EXCLUSIVE_EFF_ABSORB_ROCK_DAMAGE = 124,
EXCLUSIVE_EFF_ABSORB_GHOST_DAMAGE = 125,
EXCLUSIVE_EFF_ABSORB_DRAGON_DAMAGE = 126,
EXCLUSIVE_EFF_ABSORB_DARK_DAMAGE = 127,
EXCLUSIVE_EFF_ABSORB_STEEL_DAMAGE = 128,
EXCLUSIVE_EFF_LAST = 129, // Used as a null-terminator in some places
};
#define GROUND_ITEM_TOOLBOX_INDEX 0x80
#define HELD_ITEM_TOOLBOX_INDEX 0x81
#define INVENTORY_SIZE 52

9
include/main_02013C04.h Normal file
View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_MAIN_02013C04_H
#define PMDSKY_MAIN_02013C04_H
#include "move.h"
#include "util.h"
bool32 IsMoveRangeStringUser(struct move *move);
#endif //PMDSKY_MAIN_02013C04_H

View File

@@ -54,14 +54,15 @@ enum move_ai_condition
AI_CONDITION_HP_25_OR_STATUS = 0x600, // Target has HP <= 25% or a negative status condition
};
#define MOVE_RANGE_STRING_USER 19
// Data for a single move
struct move_data
{
u16 base_power; // 0x0
u8 type; // 0x2
u8 category; // 0x3
u16 target_range; // 0x4
u16 ai_target_range; // 0x6: Target/range as seen by the AI
u16 target_range[2]; // 0x4
u8 pp; // 0x8
u8 ai_weight; // 0x9: Possibly. Weight for AI's random move selection
// 0xA: Both accuracy values are used to calculate the move's actual accuracy.

10
include/moves_2.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef PMDSKY_MOVES_2_H
#define PMDSKY_MOVES_2_H
#include "move.h"
#include "util.h"
// Gets the move target-and-range field.
s16 GetMoveTargetAndRange(struct move *move, bool8 is_ai);
#endif //PMDSKY_MOVES_2_H

View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_OVERLAY_29_022FAC98_H
#define PMDSKY_OVERLAY_29_022FAC98_H
#include "dungeon_mode.h"
// Checks if a monster is a team member under the effects of a certain exclusive item effect.
bool8 ExclusiveItemEffectIsActive__022FAC98(struct entity *entity, enum exclusive_item_effect_id effect_id);
#endif //PMDSKY_OVERLAY_29_022FAC98_H

View File

@@ -0,0 +1,10 @@
#ifndef PMDSKY_OVERLAY_29_022FFF28_H
#define PMDSKY_OVERLAY_29_022FFF28_H
#include "dungeon_mode.h"
// Checks if a monster is a team member under the effects of a certain exclusive item effect.
bool8 ExclusiveItemEffectIsActive__022FFF28(struct entity *entity, enum exclusive_item_effect_id effect_id);
#endif //PMDSKY_OVERLAY_29_022FFF28_H

View File

@@ -5,5 +5,7 @@
// Checks if an entity is a monster (entity type 1).
bool8 IsMonster__0230A994(struct entity *entity);
// Checks if a monster is a team member under the effects of a certain exclusive item effect.
bool8 ExclusiveItemEffectIsActive__0230A9B8(struct entity *entity, enum exclusive_item_effect_id effect_id);
#endif //PMDSKY_OVERLAY_29_0230A994_H

View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_OVERLAY_29_0230F8AC_H
#define PMDSKY_OVERLAY_29_0230F8AC_H
#include "dungeon_mode.h"
// Checks if a monster is a team member under the effects of a certain exclusive item effect.
bool8 ExclusiveItemEffectIsActive__0230F8AC(struct entity *entity, enum exclusive_item_effect_id effect_id);
#endif //PMDSKY_OVERLAY_29_0230F8AC_H

View File

@@ -7,5 +7,7 @@
bool8 EntityIsValid__02311010(struct entity *entity);
// Checks if a monster is holding a certain item that isn't disabled by Klutz.
bool8 ItemIsActive__02311034(struct entity *entity, enum item_id item_id);
// Checks if a monster is a team member under the effects of a certain exclusive item effect.
bool8 ExclusiveItemEffectIsActive__02311064(struct entity *entity, enum exclusive_item_effect_id effect_id);
#endif //PMDSKY_OVERLAY_29_02311010_H

View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_OVERLAY_29_023147EC_H
#define PMDSKY_OVERLAY_29_023147EC_H
#include "dungeon_mode.h"
// Checks if a monster is a team member under the effects of a certain exclusive item effect.
bool8 ExclusiveItemEffectIsActive__023147EC(struct entity *entity, enum exclusive_item_effect_id effect_id);
#endif //PMDSKY_OVERLAY_29_023147EC_H

View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_OVERLAY_29_023197A8_H
#define PMDSKY_OVERLAY_29_023197A8_H
#include "dungeon_mode.h"
// Checks if a monster is a team member under the effects of a certain exclusive item effect.
bool8 ExclusiveItemEffectIsActive__023197A8(struct entity *entity, enum exclusive_item_effect_id effect_id);
#endif //PMDSKY_OVERLAY_29_023197A8_H

View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_OVERLAY_29_0231A87C_H
#define PMDSKY_OVERLAY_29_0231A87C_H
#include "dungeon_mode.h"
// Checks if a monster is a team member under the effects of a certain exclusive item effect.
bool8 ExclusiveItemEffectIsActive__0231A87C(struct entity *entity, enum exclusive_item_effect_id effect_id);
#endif //PMDSKY_OVERLAY_29_0231A87C_H

View File

@@ -0,0 +1,13 @@
#ifndef PMDSKY_OVERLAY_29_0231ACAC_H
#define PMDSKY_OVERLAY_29_0231ACAC_H
#include "dungeon_mode.h"
// Gets the move target-and-range field when used by a given entity.
// entity: entity pointer
// move: move pointer
// is_ai: AI flag (same as GetMoveTargetAndRange)
// return: move target and range
u32 GetEntityMoveTargetAndRange(struct entity *entity, struct move *move, bool8 is_ai);
#endif //PMDSKY_OVERLAY_29_0231ACAC_H

View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_OVERLAY_29_02323918_H
#define PMDSKY_OVERLAY_29_02323918_H
#include "dungeon_mode.h"
// Checks if a monster is a team member under the effects of a certain exclusive item effect.
bool8 ExclusiveItemEffectIsActive__02323918(struct entity *entity, enum exclusive_item_effect_id effect_id);
#endif //PMDSKY_OVERLAY_29_02323918_H

View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_OVERLAY_29_023329E8_H
#define PMDSKY_OVERLAY_29_023329E8_H
#include "dungeon_mode.h"
// Checks if a monster is a team member under the effects of a certain exclusive item effect.
bool8 ExclusiveItemEffectIsActive__023329E8(struct entity *entity, enum exclusive_item_effect_id effect_id);
#endif //PMDSKY_OVERLAY_29_023329E8_H

View File

@@ -5,5 +5,7 @@
// Checks if a monster is holding a certain item that isn't disabled by Klutz.
bool8 ItemIsActive__02347B50(struct entity *entity, enum item_id item_id);
// Checks if a monster is a team member under the effects of a certain exclusive item effect.
bool8 ExclusiveItemEffectIsActive__02347B80(struct entity *entity, enum exclusive_item_effect_id effect_id);
#endif //PMDSKY_OVERLAY_29_02347B50_H

View File

@@ -4,6 +4,7 @@
typedef s32 fx32_8; // 32-bit signed fixed-point number with 8 fraction bits
typedef u32 ufx32_8; // 32-bit unsigned fixed-point number with 8 fraction bits
typedef u8 bool8;
typedef u32 bool32;
// RGBA8 structure. Sometimes alpha is ignored and only used for padding
struct rgba {

View File

@@ -35,8 +35,12 @@ Static main
Object asm/main_0200ED1C.o
Object src/moves_1.o
Object asm/main_020137E8.o
Object src/moves_2.o
Object asm/main_02013864.o
Object src/moves.o
Object asm/main_02013AD0.o
Object src/main_02013C04.o
Object asm/main_02013C30.o
Object src/main_020251AC.o
Object asm/main_020251F0.o
Object src/main_02025788.o
@@ -323,6 +327,8 @@ Overlay OVY_29
Object asm/overlay_29_022F9194.o
Object src/overlay_29_022F9720.o
Object asm/overlay_29_022F9744.o
Object src/overlay_29_022FAC98.o
Object asm/overlay_29_022FACBC.o
Object src/overlay_29_022FB538.o
Object asm/overlay_29_022FB5EC.o
Object src/joined_at_checks.o
@@ -339,6 +345,8 @@ Overlay OVY_29
Object asm/overlay_29_022FF6C4.o
Object src/overlay_29_022FF898.o
Object asm/overlay_29_022FF8C8.o
Object src/overlay_29_022FFF28.o
Object asm/overlay_29_022FFF4C.o
Object src/overlay_29_023000E4.o
Object asm/overlay_29_02300108.o
Object src/dungeon_logic.o
@@ -364,6 +372,8 @@ Overlay OVY_29
Object asm/overlay_29_02301A84.o
Object src/dungeon_pokemon_attributes.o
Object asm/overlay_29_02301D84.o
Object src/dungeon_logic_3.o
Object asm/overlay_29_02301E88.o
Object src/dungeon_pokemon_attributes_1.o
Object asm/overlay_29_02301FBC.o
Object src/dungeon_logic_2.o
@@ -387,7 +397,6 @@ Overlay OVY_29
Object src/overlay_29_02308FBC.o
Object asm/overlay_29_02308FE0.o
Object src/overlay_29_0230A994.o
Object asm/overlay_29_0230A9B8.o
Object src/overlay_29_0230A9DC.o
Object asm/overlay_29_0230AA0C.o
Object src/overlay_29_0230E578.o
@@ -399,14 +408,18 @@ Overlay OVY_29
Object asm/overlay_29_0230F02C.o
Object src/overlay_29_0230F810.o
Object asm/overlay_29_0230F840.o
Object src/overlay_29_0230F8AC.o
Object asm/overlay_29_0230F8D0.o
Object src/overlay_29_0230F980.o
Object asm/overlay_29_0230F9A4.o
Object src/overlay_29_02311010.o
Object asm/overlay_29_02311064.o
Object asm/overlay_29_02311088.o
Object src/overlay_29_023118B4.o
Object asm/overlay_29_023118D8.o
Object src/overlay_29_02311BF8.o
Object asm/overlay_29_02311C28.o
Object src/overlay_29_023147EC.o
Object asm/overlay_29_02314810.o
Object src/overlay_29_02315118.o
Object asm/overlay_29_0231516C.o
Object src/dungeon_statuses.o
@@ -419,12 +432,20 @@ Overlay OVY_29
Object asm/overlay_29_02318D58.o
Object src/overlay_29_02318E4C.o
Object asm/overlay_29_02318E70.o
Object src/overlay_29_023197A8.o
Object asm/overlay_29_023197CC.o
Object src/dungeon_ai_attack_2.o
Object asm/overlay_29_02319880.o
Object src/dungeon_ai_attack.o
Object asm/overlay_29_02319FB0.o
Object src/dungeon_ai_attack_1.o
Object asm/overlay_29_0231A7A0.o
Object src/overlay_29_0231A87C.o
Object asm/overlay_29_0231A8A0.o
Object src/overlay_29_0231A9D4.o
Object asm/overlay_29_0231A9F8.o
Object src/overlay_29_0231ACAC.o
Object asm/overlay_29_0231AD38.o
Object src/overlay_29_0231B194.o
Object asm/overlay_29_0231B1B8.o
Object src/overlay_29_0231B318.o
@@ -449,6 +470,8 @@ Overlay OVY_29
Object asm/overlay_29_0232145C.o
Object src/overlay_29_02322DB8.o
Object asm/overlay_29_02322DDC.o
Object src/overlay_29_02323918.o
Object asm/overlay_29_0232393C.o
Object src/dungeon_move.o
Object asm/overlay_29_rodata_02352A6C.o
Object asm/overlay_29_02324698.o
@@ -464,6 +487,8 @@ Overlay OVY_29
Object asm/overlay_29_0232E2B8.o
Object src/overlay_29_0232E840.o
Object asm/overlay_29_0232E864.o
Object src/overlay_29_023329E8.o
Object asm/overlay_29_02332A0C.o
Object src/overlay_29_02333FAC.o
Object asm/overlay_29_02333FD0.o
Object src/overlay_29_023350D8.o
@@ -491,7 +516,6 @@ Overlay OVY_29
Object src/dungeon_items.o
Object asm/overlay_29_02346834.o
Object src/overlay_29_02347B50.o
Object asm/overlay_29_02347B80.o
Object src/overlay_29_02347BA4.o
Object asm/overlay_29_02347BC8.o
Object src/overlay_29_0234987C.o

View File

@@ -1,6 +1,7 @@
#include "dungeon_ai_attack.h"
#include "dg_random.h"
#include "dungeon_ai_attack_1.h"
#include "dungeon_ai_attack_2.h"
#include "dungeon_map_access.h"
#include "dungeon_pokemon_attributes_1.h"
#include "dungeon_statuses.h"
@@ -9,24 +10,23 @@
#include "dungeon_visibility.h"
#include "main_0208655C.h"
#include "move_data.h"
#include "moves_2.h"
#include "overlay_29_0231ACAC.h"
#include "position_util.h"
extern struct dungeon *DUNGEON_PTR[];
extern bool8 CAN_ATTACK_IN_DIRECTION[NUM_DIRECTIONS];
extern u8 POTENTIAL_ATTACK_TARGET_DIRECTIONS[NUM_DIRECTIONS];
extern s32 POTENTIAL_ATTACK_TARGET_WEIGHTS[NUM_DIRECTIONS];
extern struct entity *POTENTIAL_TARGETS[NUM_DIRECTIONS];
extern bool8 AI_CAN_ATTACK_IN_DIRECTION[NUM_DIRECTIONS];
extern u8 AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS[NUM_DIRECTIONS];
extern s32 AI_POTENTIAL_ATTACK_TARGET_WEIGHTS[NUM_DIRECTIONS];
extern struct entity *AI_POTENTIAL_ATTACK_TARGETS[NUM_DIRECTIONS];
extern void ov29_0231985C();
extern u16 GetEntityMoveTargetAndRange(struct entity *entity, struct move *move, bool8 is_ai);
extern bool8 IsAffectedByTaunt(struct move *move);
extern bool8 StatusCheckerCheck(struct entity *attacker, struct move *move);
extern u16 GetMoveTargetAndRange(struct move *move, bool8 is_ai);
extern bool8 CanAttackInDirection(struct entity *monster, s32 direction);
extern s32 TryAddTargetToAiTargetList(s32 current_num_targets, s32 move_ai_range, struct entity *user, struct entity *target, struct move *move, bool8 check_all_conditions);
extern bool8 IsAiTargetEligible(s32 move_ai_range, struct entity *user, struct entity *target, struct move *move, bool8 check_all_conditions);
extern enum type_id GetMoveTypeForMonster(struct entity *entity, struct move *move);
extern s32 WeightMove(struct entity *user, s32 targeting_flags, struct entity *target, enum type_id move_type);
extern s32 WeightMoveWithIqSkills(struct entity *user, s32 move_ai_range, struct entity *target, enum type_id move_type);
// https://decomp.me/scratch/jVfou
#ifdef NONMATCHING
@@ -36,9 +36,9 @@ u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *mon
s32 move_weight = 1;
bool8 has_status_checker;
s32 num_potential_targets = 0;
ov29_0231985C();
ResetAiCanAttackInDirection();
s32 targeting_flags = GetEntityMoveTargetAndRange(monster, move, TRUE);
s32 move_target_and_range = GetEntityMoveTargetAndRange(monster, move, TRUE);
has_status_checker = IqSkillIsEnabled(monster, IQ_STATUS_CHECKER);
ai_possible_move->can_be_used = FALSE;
if (pokemon_info->cringe_class_status.cringe == STATUS_CRINGE_TAUNTED && !IsAffectedByTaunt(move))
@@ -47,7 +47,7 @@ u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *mon
if (has_status_checker && !StatusCheckerCheck(monster, move))
return move_weight;
if (GetMoveTargetAndRange(move, FALSE) == TARGET_USER + RANGE_USER + AI_CONDITION_HP_25)
if (GetMoveTargetAndRange(move, FALSE) == TARGET_USER | RANGE_USER | AI_CONDITION_HP_25)
{
s32 max_hp = MIN(pokemon_info->max_hp_stat + pokemon_info->max_hp_boost, 999);
if (pokemon_info->hp == max_hp)
@@ -55,20 +55,20 @@ u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *mon
}
s32 i;
s32 range_targeting_flags = targeting_flags & 0xF0;
if (range_targeting_flags == RANGE_FRONT ||
range_targeting_flags == RANGE_FRONT_AND_SIDES ||
range_targeting_flags == RANGE_NEARBY)
s32 move_range = move_target_and_range & 0xF0;
if (move_range == RANGE_FRONT ||
move_range == RANGE_FRONT_AND_SIDES ||
move_range == RANGE_NEARBY)
{
if (IsBlinded(monster, TRUE))
{
u8 direction = pokemon_info->action.direction;
if (!CAN_ATTACK_IN_DIRECTION[direction])
if (!AI_CAN_ATTACK_IN_DIRECTION[direction])
{
CAN_ATTACK_IN_DIRECTION[direction] = TRUE;
POTENTIAL_ATTACK_TARGET_DIRECTIONS[num_potential_targets] = direction;
POTENTIAL_ATTACK_TARGET_WEIGHTS[num_potential_targets] = 99;
POTENTIAL_ATTACK_TARGET_WEIGHTS[NUM_DIRECTIONS] = 0;
AI_CAN_ATTACK_IN_DIRECTION[direction] = TRUE;
AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS[num_potential_targets] = direction;
AI_POTENTIAL_ATTACK_TARGET_WEIGHTS[num_potential_targets] = 99;
AI_POTENTIAL_ATTACK_TARGET_WEIGHTS[NUM_DIRECTIONS] = 0;
num_potential_targets++;
}
}
@@ -79,25 +79,25 @@ u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *mon
struct entity *adjacent_monster = GetTile(monster->pos.x + DIRECTIONS_XY[i].x, monster->pos.y + DIRECTIONS_XY[i].y)->monster;
if (adjacent_monster != NULL &&
adjacent_monster->type == ENTITY_MONSTER &&
(range_targeting_flags == RANGE_FRONT_AND_SIDES ||
range_targeting_flags == RANGE_NEARBY ||
(move_range == RANGE_FRONT_AND_SIDES ||
move_range == RANGE_NEARBY ||
CanAttackInDirection(monster, i)))
{
num_potential_targets = TryAddTargetToAiTargetList(num_potential_targets, targeting_flags, monster, adjacent_monster, move, has_status_checker);
num_potential_targets = TryAddTargetToAiTargetList(num_potential_targets, move_target_and_range, monster, adjacent_monster, move, has_status_checker);
}
}
}
}
else if (range_targeting_flags == RANGE_ROOM)
else if (move_range == RANGE_ROOM)
{
for (i = 0; i < DUNGEON_MAX_POKEMON; i++)
{
struct entity *target = DUNGEON_PTR[0]->active_monster_ptrs[i];
if (EntityIsValid__02319F8C(target) && CanSeeTarget(monster, target))
num_potential_targets = TryAddTargetToAiTargetList(num_potential_targets, targeting_flags, monster, target, move, has_status_checker);
num_potential_targets = TryAddTargetToAiTargetList(num_potential_targets, move_target_and_range, monster, target, move, has_status_checker);
}
}
else if (range_targeting_flags == RANGE_FRONT_2)
else if (move_range == RANGE_FRONT_2)
{
for (i = 0; i < NUM_DIRECTIONS; i++)
{
@@ -107,27 +107,27 @@ u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *mon
if (target_tile->monster != NULL && target_tile->monster->type == ENTITY_MONSTER)
{
s32 prev_num_potential_targets = num_potential_targets;
num_potential_targets = TryAddTargetToAiTargetList(num_potential_targets, targeting_flags, monster, target_tile->monster, move, has_status_checker);
num_potential_targets = TryAddTargetToAiTargetList(num_potential_targets, move_target_and_range, monster, target_tile->monster, move, has_status_checker);
if (prev_num_potential_targets != num_potential_targets)
continue;
}
target_tile = GetTile(monster->pos.x + DIRECTIONS_XY[i].x * 2, monster->pos.y + DIRECTIONS_XY[i].y * 2);
if (target_tile->monster != NULL && target_tile->monster->type == ENTITY_MONSTER)
num_potential_targets = TryAddTargetToAiTargetList(num_potential_targets, targeting_flags, monster, target_tile->monster, move, has_status_checker);
num_potential_targets = TryAddTargetToAiTargetList(num_potential_targets, move_target_and_range, monster, target_tile->monster, move, has_status_checker);
}
}
}
else if (range_targeting_flags == RANGE_FRONT_10 ||
range_targeting_flags == RANGE_FRONT_WITH_CORNER_CUTTING ||
range_targeting_flags == RANGE_FRONT_2_WITH_CORNER_CUTTING)
else if (move_range == RANGE_FRONT_10 ||
move_range == RANGE_FRONT_WITH_CORNER_CUTTING ||
move_range == RANGE_FRONT_2_WITH_CORNER_CUTTING)
{
s32 max_range;
if (range_targeting_flags == RANGE_FRONT_10)
if (move_range == RANGE_FRONT_10)
max_range = RANGED_ATTACK_RANGE;
else
max_range = 1;
if (range_targeting_flags == RANGE_FRONT_2_WITH_CORNER_CUTTING)
if (move_range == RANGE_FRONT_2_WITH_CORNER_CUTTING)
max_range = 2;
for (s32 i = 0; i < DUNGEON_MAX_POKEMON; i++)
@@ -137,7 +137,7 @@ u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *mon
if (EntityIsValid__02319F8C(target) && monster != target)
{
direction = GetDirectionTowardsPosition(&monster->pos, &target->pos);
if (!CAN_ATTACK_IN_DIRECTION[direction] && CanSeeTarget(monster, target))
if (!AI_CAN_ATTACK_IN_DIRECTION[direction] && CanSeeTarget(monster, target))
{
s32 target_pos_x = target->pos.x;
s32 monster_pos_x = monster->pos.x;
@@ -183,13 +183,13 @@ u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *mon
if (is_target_in_line_range)
{
if (IsAiTargetEligible(targeting_flags, monster, target, move, has_status_checker) &&
if (IsAiTargetEligible(move_target_and_range, monster, target, move, has_status_checker) &&
IsTargetInRange(monster, target, direction, max_range))
{
CAN_ATTACK_IN_DIRECTION[direction] = TRUE;
POTENTIAL_ATTACK_TARGET_DIRECTIONS[num_potential_targets] = direction;
POTENTIAL_ATTACK_TARGET_WEIGHTS[num_potential_targets] = WeightMove(monster, targeting_flags, target, GetMoveTypeForMonster(monster, move));
POTENTIAL_TARGETS[num_potential_targets] = target;
AI_CAN_ATTACK_IN_DIRECTION[direction] = TRUE;
AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS[num_potential_targets] = direction;
AI_POTENTIAL_ATTACK_TARGET_WEIGHTS[num_potential_targets] = WeightMoveWithIqSkills(monster, move_target_and_range, target, GetMoveTypeForMonster(monster, move));
AI_POTENTIAL_ATTACK_TARGETS[num_potential_targets] = target;
num_potential_targets++;
}
}
@@ -197,17 +197,17 @@ u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *mon
}
}
}
else if (range_targeting_flags == RANGE_FLOOR)
else if (move_range == RANGE_FLOOR)
{
for (i = 0; i < DUNGEON_MAX_POKEMON; i++)
{
struct entity *target = DUNGEON_PTR[0]->active_monster_ptrs[i];
if (EntityIsValid__02319F8C(target))
num_potential_targets = TryAddTargetToAiTargetList(num_potential_targets, targeting_flags, monster, target, move, has_status_checker);
num_potential_targets = TryAddTargetToAiTargetList(num_potential_targets, move_target_and_range, monster, target, move, has_status_checker);
}
}
else if (range_targeting_flags == RANGE_USER)
num_potential_targets = TryAddTargetToAiTargetList(num_potential_targets, targeting_flags, monster, monster, move, has_status_checker);
else if (move_range == RANGE_USER)
num_potential_targets = TryAddTargetToAiTargetList(num_potential_targets, move_target_and_range, monster, monster, move, has_status_checker);
if (num_potential_targets == 0)
ai_possible_move->can_be_used = FALSE;
@@ -217,32 +217,32 @@ u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *mon
s32 max_weight = 0;
for (i = 0; i < num_potential_targets; i++)
{
if (max_weight < POTENTIAL_ATTACK_TARGET_WEIGHTS[i])
max_weight = POTENTIAL_ATTACK_TARGET_WEIGHTS[i];
if (max_weight < AI_POTENTIAL_ATTACK_TARGET_WEIGHTS[i])
max_weight = AI_POTENTIAL_ATTACK_TARGET_WEIGHTS[i];
}
for (i = 0; i < num_potential_targets; i++)
{
if (max_weight != POTENTIAL_ATTACK_TARGET_WEIGHTS[i])
POTENTIAL_ATTACK_TARGET_WEIGHTS[i] = 0;
if (max_weight != AI_POTENTIAL_ATTACK_TARGET_WEIGHTS[i])
AI_POTENTIAL_ATTACK_TARGET_WEIGHTS[i] = 0;
}
move_weight = max_weight;
for (i = 0; i < num_potential_targets; i++)
{
total_weight += POTENTIAL_ATTACK_TARGET_WEIGHTS[i];
total_weight += AI_POTENTIAL_ATTACK_TARGET_WEIGHTS[i];
}
s32 weight_counter = DungeonRandInt(total_weight);
for (i = 0; i < num_potential_targets; i++)
{
weight_counter -= POTENTIAL_ATTACK_TARGET_WEIGHTS[i];
weight_counter -= AI_POTENTIAL_ATTACK_TARGET_WEIGHTS[i];
if (weight_counter < 0)
break;
}
ai_possible_move->can_be_used = TRUE;
ai_possible_move->direction = POTENTIAL_ATTACK_TARGET_DIRECTIONS[i];
ai_possible_move->direction = AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS[i];
ai_possible_move->weight = 8;
}

13
src/dungeon_ai_attack_2.c Normal file
View File

@@ -0,0 +1,13 @@
#include "dungeon_ai_attack_2.h"
#include "direction.h"
#include "util.h"
extern bool8 AI_CAN_ATTACK_IN_DIRECTION[NUM_DIRECTIONS];
void ResetAiCanAttackInDirection()
{
for (s32 i = 0; i < NUM_DIRECTIONS; i++)
{
AI_CAN_ATTACK_IN_DIRECTION[i] = FALSE;
}
}

17
src/dungeon_logic_3.c Normal file
View File

@@ -0,0 +1,17 @@
#include "dungeon_logic_3.h"
#include "dungeon_util_static.h"
bool8 MonsterIsType(struct entity *entity, enum type_id type_id)
{
struct monster *pokemon_info = pokemon_info = GetEntInfo(entity);
if (type_id == TYPE_NONE)
return FALSE;
if (pokemon_info->types[0] == type_id)
return TRUE;
if (pokemon_info->types[1] == type_id)
return TRUE;
return FALSE;
}

9
src/main_02013C04.c Normal file
View File

@@ -0,0 +1,9 @@
#include "main_02013C04.h"
#include "move_data.h"
extern struct move_data_table_outer DUNGEON_MOVE_TABLES;
bool32 IsMoveRangeStringUser(struct move *move)
{
return DUNGEON_MOVE_TABLES.moves->moves[move->id].range_string_idx == MOVE_RANGE_STRING_USER;
}

9
src/moves_2.c Normal file
View File

@@ -0,0 +1,9 @@
#include "moves_2.h"
#include "move_data.h"
extern struct move_data_table_outer DUNGEON_MOVE_TABLES;
s16 GetMoveTargetAndRange(struct move *move, bool8 is_ai)
{
return DUNGEON_MOVE_TABLES.moves->moves[move->id].target_range[is_ai];
}

13
src/overlay_29_022FAC98.c Normal file
View File

@@ -0,0 +1,13 @@
#include "overlay_29_022FAC98.h"
#include "dungeon_util_static.h"
extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id);
bool8 ExclusiveItemEffectIsActive__022FAC98(struct entity *entity, enum exclusive_item_effect_id effect_id)
{
struct monster *monster = GetEntInfo(entity);
if (!monster->is_not_team_member)
return ExclusiveItemEffectFlagTest(monster->exclusive_item_effect_flags, effect_id);
return FALSE;
}

13
src/overlay_29_022FFF28.c Normal file
View File

@@ -0,0 +1,13 @@
#include "overlay_29_022FFF28.h"
#include "dungeon_util_static.h"
extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id);
bool8 ExclusiveItemEffectIsActive__022FFF28(struct entity *entity, enum exclusive_item_effect_id effect_id)
{
struct monster *monster = GetEntInfo(entity);
if (!monster->is_not_team_member)
return ExclusiveItemEffectFlagTest(monster->exclusive_item_effect_flags, effect_id);
return FALSE;
}

View File

@@ -1,4 +1,7 @@
#include "overlay_29_0230A994.h"
#include "dungeon_util_static.h"
extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id);
bool8 IsMonster__0230A994(struct entity *entity)
{
@@ -7,3 +10,12 @@ bool8 IsMonster__0230A994(struct entity *entity)
return entity->type == ENTITY_MONSTER;
}
bool8 ExclusiveItemEffectIsActive__0230A9B8(struct entity *entity, enum exclusive_item_effect_id effect_id)
{
struct monster *monster = GetEntInfo(entity);
if (!monster->is_not_team_member)
return ExclusiveItemEffectFlagTest(monster->exclusive_item_effect_flags, effect_id);
return FALSE;
}

13
src/overlay_29_0230F8AC.c Normal file
View File

@@ -0,0 +1,13 @@
#include "overlay_29_0230F8AC.h"
#include "dungeon_util_static.h"
extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id);
bool8 ExclusiveItemEffectIsActive__0230F8AC(struct entity *entity, enum exclusive_item_effect_id effect_id)
{
struct monster *monster = GetEntInfo(entity);
if (!monster->is_not_team_member)
return ExclusiveItemEffectFlagTest(monster->exclusive_item_effect_flags, effect_id);
return FALSE;
}

View File

@@ -1,6 +1,9 @@
#include "overlay_29_02311010.h"
#include "dungeon_items.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_util_static.h"
extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id);
bool8 EntityIsValid__02311010(struct entity *entity)
{
@@ -17,3 +20,12 @@ bool8 ItemIsActive__02311034(struct entity *entity, enum item_id item_id)
return HasHeldItem(entity, item_id);
}
bool8 ExclusiveItemEffectIsActive__02311064(struct entity *entity, enum exclusive_item_effect_id effect_id)
{
struct monster *monster = GetEntInfo(entity);
if (!monster->is_not_team_member)
return ExclusiveItemEffectFlagTest(monster->exclusive_item_effect_flags, effect_id);
return FALSE;
}

13
src/overlay_29_023147EC.c Normal file
View File

@@ -0,0 +1,13 @@
#include "overlay_29_023147EC.h"
#include "dungeon_util_static.h"
extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id);
bool8 ExclusiveItemEffectIsActive__023147EC(struct entity *entity, enum exclusive_item_effect_id effect_id)
{
struct monster *monster = GetEntInfo(entity);
if (!monster->is_not_team_member)
return ExclusiveItemEffectFlagTest(monster->exclusive_item_effect_flags, effect_id);
return FALSE;
}

13
src/overlay_29_023197A8.c Normal file
View File

@@ -0,0 +1,13 @@
#include "overlay_29_023197A8.h"
#include "dungeon_util_static.h"
extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id);
bool8 ExclusiveItemEffectIsActive__023197A8(struct entity *entity, enum exclusive_item_effect_id effect_id)
{
struct monster *monster = GetEntInfo(entity);
if (!monster->is_not_team_member)
return ExclusiveItemEffectFlagTest(monster->exclusive_item_effect_flags, effect_id);
return FALSE;
}

13
src/overlay_29_0231A87C.c Normal file
View File

@@ -0,0 +1,13 @@
#include "overlay_29_0231A87C.h"
#include "dungeon_util_static.h"
extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id);
bool8 ExclusiveItemEffectIsActive__0231A87C(struct entity *entity, enum exclusive_item_effect_id effect_id)
{
struct monster *monster = GetEntInfo(entity);
if (!monster->is_not_team_member)
return ExclusiveItemEffectFlagTest(monster->exclusive_item_effect_flags, effect_id);
return FALSE;
}

25
src/overlay_29_0231ACAC.c Normal file
View File

@@ -0,0 +1,25 @@
#include "overlay_29_0231ACAC.h"
#include "dungeon_logic_3.h"
#include "item.h"
#include "main_02013C04.h"
#include "move_data.h"
#include "moves_2.h"
#include "overlay_29_0231A87C.h"
u32 GetEntityMoveTargetAndRange(struct entity *entity, struct move *move, bool8 is_ai)
{
if (move->id == MOVE_CURSE && !is_ai && !MonsterIsType(entity, TYPE_GHOST))
return TARGET_USER | RANGE_USER;
s16 move_target_and_range = GetMoveTargetAndRange(move, is_ai);
if (IsMoveRangeStringUser(move) && ExclusiveItemEffectIsActive__0231A87C(entity, EXCLUSIVE_EFF_EXTEND_SELF_EFFECTS_TO_TEAM))
{
if (move_target_and_range == (TARGET_USER | RANGE_USER | AI_CONDITION_HP_25))
move_target_and_range = TARGET_PARTY | RANGE_FLOOR | AI_CONDITION_HP_25;
else if (move_target_and_range == (TARGET_USER | RANGE_USER))
move_target_and_range = TARGET_PARTY | RANGE_FLOOR;
}
return move_target_and_range;
}

13
src/overlay_29_02323918.c Normal file
View File

@@ -0,0 +1,13 @@
#include "overlay_29_02323918.h"
#include "dungeon_util_static.h"
extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id);
bool8 ExclusiveItemEffectIsActive__02323918(struct entity *entity, enum exclusive_item_effect_id effect_id)
{
struct monster *monster = GetEntInfo(entity);
if (!monster->is_not_team_member)
return ExclusiveItemEffectFlagTest(monster->exclusive_item_effect_flags, effect_id);
return FALSE;
}

13
src/overlay_29_023329E8.c Normal file
View File

@@ -0,0 +1,13 @@
#include "overlay_29_023329E8.h"
#include "dungeon_util_static.h"
extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id);
bool8 ExclusiveItemEffectIsActive__023329E8(struct entity *entity, enum exclusive_item_effect_id effect_id)
{
struct monster *monster = GetEntInfo(entity);
if (!monster->is_not_team_member)
return ExclusiveItemEffectFlagTest(monster->exclusive_item_effect_flags, effect_id);
return FALSE;
}

View File

@@ -1,6 +1,9 @@
#include "overlay_29_02347B50.h"
#include "dungeon_items.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_util_static.h"
extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id);
bool8 ItemIsActive__02347B50(struct entity *entity, enum item_id item_id)
{
@@ -9,3 +12,12 @@ bool8 ItemIsActive__02347B50(struct entity *entity, enum item_id item_id)
return HasHeldItem(entity, item_id);
}
bool8 ExclusiveItemEffectIsActive__02347B80(struct entity *entity, enum exclusive_item_effect_id effect_id)
{
struct monster *monster = GetEntInfo(entity);
if (!monster->is_not_team_member)
return ExclusiveItemEffectFlagTest(monster->exclusive_item_effect_flags, effect_id);
return FALSE;
}

View File

@@ -128,7 +128,8 @@ def sync_xmap_symbol(address: int, symbol: SymbolDetails, language: str, section
for yaml_symbol in symbol_array:
if yaml_symbol['name'] == base_old_symbol_name:
if 'aliases' in yaml_symbol:
yaml_symbol['aliases'].append(base_symbol_name)
if base_symbol_name not in yaml_symbol['aliases']:
yaml_symbol['aliases'].append(base_symbol_name)
else:
yaml_symbol['aliases'] = [base_symbol_name]
break