mirror of
https://github.com/pret/pmd-sky.git
synced 2026-08-25 12:04:58 -05:00
Merge pull request #280 from Zur3l/main
Some checks failed
build / build (push) Has been cancelled
Some checks failed
build / build (push) Has been cancelled
Decomp 37 functions
This commit is contained in:
@@ -1,3 +1 @@
|
||||
#pragma once
|
||||
.public NATURAL_LOG_VALUE_TABLE
|
||||
.public PRNG_SEQUENCE_NUM
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
#pragma once
|
||||
|
||||
1
asm/include/main_02001CB0.inc
Normal file
1
asm/include/main_02001CB0.inc
Normal file
@@ -0,0 +1 @@
|
||||
#pragma once
|
||||
6
asm/include/main_02001D68.inc
Normal file
6
asm/include/main_02001D68.inc
Normal file
@@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
.public FixedPoint64IsNegative
|
||||
.public FixedPoint64IsZero
|
||||
.public NATURAL_LOG_VALUE_TABLE
|
||||
.public NegateFixedPoint64
|
||||
.public UFixedPoint64CmpLt
|
||||
@@ -1,49 +0,0 @@
|
||||
#pragma once
|
||||
.public _02094D0C
|
||||
.public _02094D20
|
||||
.public _02097F34
|
||||
.public _02097F50
|
||||
.public _02097F58
|
||||
.public _02097F68
|
||||
.public _02097F6C
|
||||
.public _02097F7C
|
||||
.public _02097F90
|
||||
.public _02097F9C
|
||||
.public _02097FAC
|
||||
.public _02097FB8
|
||||
.public _02097FC4
|
||||
.public _02097FE4
|
||||
.public _020A18BC
|
||||
.public AVAILABLE_ITEMS_IN_GROUP_TABLE
|
||||
.public BAG_ITEMS_PTR_MIRROR
|
||||
.public BitstreamDebug
|
||||
.public CopyBitsFrom
|
||||
.public CopyBitsTo
|
||||
.public GetDungeonGroup
|
||||
.public GetExclusiveItemType
|
||||
.public GetItemActionName
|
||||
.public GetItemBuyPrice
|
||||
.public GetItemCategory
|
||||
.public GetItemMoveId
|
||||
.public GetItemName
|
||||
.public GetItemPaletteId
|
||||
.public GetItemSellPrice
|
||||
.public GetThrownItemQuantityLimit
|
||||
.public InitBitstreamForRead
|
||||
.public InitBitstreamForWrite
|
||||
.public InitItem
|
||||
.public IsAuraBow
|
||||
.public IsItemValid
|
||||
.public IsShoppableItem
|
||||
.public IsThrownItem
|
||||
.public ITEM_TABLES_PTRS_1
|
||||
.public MemAlloc
|
||||
.public MemFree
|
||||
.public MONEY_QUANTITY_TABLE
|
||||
.public MoneyQuantityToString__02023B30
|
||||
.public MultiplyByFixedPoint
|
||||
.public RandRangeSafe
|
||||
.public strcpy
|
||||
.public strncpy
|
||||
.public sub_0200EB64
|
||||
.public vsprintf
|
||||
28
asm/include/main_0200D1F0.inc
Normal file
28
asm/include/main_0200D1F0.inc
Normal file
@@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
.public BAG_ITEMS_PTR_MIRROR
|
||||
.public GetDisplayedBuyPrice
|
||||
.public GetDisplayedSellPrice
|
||||
.public GetItemActionName
|
||||
.public GetItemCategory
|
||||
.public GetItemName
|
||||
.public GetItemPaletteId
|
||||
.public GetMoneyQuantity
|
||||
.public InitItem
|
||||
.public MoneyQuantityToString__02023B30
|
||||
.public _02094D0C
|
||||
.public _02097F34
|
||||
.public _02097F50
|
||||
.public _02097F58
|
||||
.public _02097F68
|
||||
.public _02097F6C
|
||||
.public _02097F7C
|
||||
.public _02097F90
|
||||
.public _02097F9C
|
||||
.public _02097FAC
|
||||
.public _02097FB8
|
||||
.public _02097FC4
|
||||
.public _02097FE4
|
||||
.public strcpy
|
||||
.public strncpy
|
||||
.public sub_0200EB64
|
||||
.public vsprintf
|
||||
18
asm/include/main_0200D8E4.inc
Normal file
18
asm/include/main_0200D8E4.inc
Normal file
@@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
.public AVAILABLE_ITEMS_IN_GROUP_TABLE
|
||||
.public BAG_ITEMS_PTR_MIRROR
|
||||
.public BitstreamDebug
|
||||
.public CopyBitsFrom
|
||||
.public CopyBitsTo
|
||||
.public GetDungeonGroup
|
||||
.public GetExclusiveItemType
|
||||
.public GetItemCategory
|
||||
.public ITEM_TABLES_PTRS_1
|
||||
.public InitBitstreamForRead
|
||||
.public InitBitstreamForWrite
|
||||
.public IsThrownItem
|
||||
.public ItemZInit
|
||||
.public MemAlloc
|
||||
.public MemFree
|
||||
.public _02094D20
|
||||
.public sub_0200EB64
|
||||
@@ -1,7 +1,2 @@
|
||||
#pragma once
|
||||
.public BABY_EXCLUSIVE_ITEM_PAIRS
|
||||
.public BAG_ITEMS_PTR_MIRROR
|
||||
.public IsItemValid
|
||||
.public ITEM_DATA_TABLE_PTRS
|
||||
.public ItemZInit
|
||||
.public SetActiveInventory
|
||||
|
||||
3
asm/include/main_02015090.inc
Normal file
3
asm/include/main_02015090.inc
Normal file
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
.public Rand16Bit
|
||||
.public _s32_div_f
|
||||
@@ -1,4 +1,143 @@
|
||||
#pragma once
|
||||
.public AUDIO_COMMANDS_BUFFER
|
||||
.public AddObjToUngroupedOamObjs
|
||||
.public BagHasExclusiveItemTypeForMonster
|
||||
.public ClearGroupedOamObjsAndGroups
|
||||
.public CopyAndInterleave
|
||||
.public CopyAndInterleave0
|
||||
.public CopyAttributesToOam
|
||||
.public CopyColorToPaletteDataRgba
|
||||
.public CopyStringFromId
|
||||
.public DC_FlushRange
|
||||
.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 FillPaletteDataRgba
|
||||
.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 GetIqSkillStringId
|
||||
.public GetItemMoveId16
|
||||
.public GetItemNameFormatted
|
||||
.public GetMainTeamName
|
||||
.public GetMonsterGender
|
||||
.public GetMonsterGenderVeneer
|
||||
.public GetMoveActualAccuracy
|
||||
.public GetMoveBasePowerFromId
|
||||
.public GetMoveName
|
||||
.public GetNameString
|
||||
.public GetNbFloors
|
||||
.public GetNbFloorsPlusOne
|
||||
.public GetResolvedPerformanceProgressFlag
|
||||
.public GetStringFromFileVeneer
|
||||
.public GetTeamMember
|
||||
.public GetTypeStringId
|
||||
.public GroupOamObjs
|
||||
.public InitOamInfo
|
||||
.public IqSkillFlagTest
|
||||
.public LANGUAGE_INFO_DATA
|
||||
.public LoadFileFromRom
|
||||
.public LoadScriptVariableValue
|
||||
.public LoadScriptVariableValueAtIndex
|
||||
.public LoadScriptVariableValueString
|
||||
.public LoadStringFile
|
||||
.public MOVE_ACCURACY_STARS_TABLE
|
||||
.public MOVE_POWER_STARS_TABLE
|
||||
.public MTi_CpuClear32
|
||||
.public MTi_CpuCopy32
|
||||
.public MarkPaletteDataAsNeedingUpdate
|
||||
.public MaybeGetFormattedItemName
|
||||
.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 OBJ_GRAPHICS_CONTROLS_PTR
|
||||
.public PointsToZero
|
||||
.public RENDER_3D
|
||||
.public RENDER_3D_FUNCTIONS_64
|
||||
.public Rand16Bit
|
||||
.public Render3dProcessQueue
|
||||
.public ResumeBgm
|
||||
.public Rgb8ToRgb5
|
||||
.public SND_Init
|
||||
.public SetShouldCopyToOam
|
||||
.public Snd_LockChannel
|
||||
.public Snd_UnlockChannel
|
||||
.public StringFromId
|
||||
.public StrncpySimpleNoPadSafe
|
||||
.public TEAM_MEMBER_TABLE_PTR
|
||||
.public UnloadFile
|
||||
.public WAN_TABLE
|
||||
.public ZInit8
|
||||
.public _02098EA8
|
||||
.public _02098EE0
|
||||
.public _02098F60
|
||||
@@ -261,151 +400,14 @@
|
||||
.public _022A5970
|
||||
.public _s32_div_f
|
||||
.public _u32_div_f
|
||||
.public AddObjToUngroupedOamObjs
|
||||
.public AUDIO_COMMANDS_BUFFER
|
||||
.public BagHasExclusiveItemTypeForMonster
|
||||
.public ClearGroupedOamObjsAndGroups
|
||||
.public CopyAndInterleave
|
||||
.public CopyAndInterleave0
|
||||
.public CopyAttributesToOam
|
||||
.public CopyColorToPaletteDataRgba
|
||||
.public CopyStringFromId
|
||||
.public DC_FlushRange
|
||||
.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 FillPaletteDataRgba
|
||||
.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 GetIqSkillStringId
|
||||
.public GetItemMoveId16
|
||||
.public GetItemNameFormatted
|
||||
.public GetMainTeamName
|
||||
.public GetMonsterGender
|
||||
.public GetMonsterGenderVeneer
|
||||
.public GetMoveActualAccuracy
|
||||
.public GetMoveBasePowerFromId
|
||||
.public GetMoveName
|
||||
.public GetNameString
|
||||
.public GetNbFloors
|
||||
.public GetNbFloorsPlusOne
|
||||
.public GetResolvedPerformanceProgressFlag
|
||||
.public GetStringFromFileVeneer
|
||||
.public GetTeamMember
|
||||
.public GetTypeStringId
|
||||
.public GroupOamObjs
|
||||
.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 InitOamInfo
|
||||
.public IqSkillFlagTest
|
||||
.public Is2TurnsMove
|
||||
.public LANGUAGE_INFO_DATA
|
||||
.public LoadFileFromRom
|
||||
.public LoadScriptVariableValue
|
||||
.public LoadScriptVariableValueAtIndex
|
||||
.public LoadScriptVariableValueString
|
||||
.public LoadStringFile
|
||||
.public MarkPaletteDataAsNeedingUpdate
|
||||
.public MaybeGetFormattedItemName
|
||||
.public MemAlloc
|
||||
.public MemArenaAlloc
|
||||
.public Memcpy32
|
||||
.public MemFree
|
||||
.public MemLocateSet
|
||||
.public MemLocateUnset
|
||||
.public MemZero
|
||||
.public MemZero32
|
||||
.public MOVE_ACCURACY_STARS_TABLE
|
||||
.public MOVE_POWER_STARS_TABLE
|
||||
.public MTi_CpuClear32
|
||||
.public MTi_CpuCopy32
|
||||
.public MultiplyByFixedPoint
|
||||
.public NewRender3dQuadrilateral
|
||||
.public NewRender3dRectangle
|
||||
.public NewRender3dTexture
|
||||
.public NewRender3dTiling
|
||||
.public OBJ_GRAPHICS_CONTROLS_PTR
|
||||
.public ov10_022BDADC
|
||||
.public ov10_022C2528
|
||||
.public PointsToZero
|
||||
.public PUNCH_MOVE_LIST
|
||||
.public Rand16Bit
|
||||
.public Render3dProcessQueue
|
||||
.public RENDER_3D
|
||||
.public RENDER_3D_FUNCTIONS_64
|
||||
.public ResumeBgm
|
||||
.public Rgb8ToRgb5
|
||||
.public SetShouldCopyToOam
|
||||
.public SND_Init
|
||||
.public Snd_LockChannel
|
||||
.public Snd_UnlockChannel
|
||||
.public sprintf
|
||||
.public strcat
|
||||
.public strcmp
|
||||
.public strcpy
|
||||
.public StringFromId
|
||||
.public strlen
|
||||
.public strncmp
|
||||
.public StrncpySimpleNoPadSafe
|
||||
.public strstr
|
||||
.public sub_01FF8F04
|
||||
.public sub_02002778
|
||||
@@ -468,8 +470,4 @@
|
||||
.public sub_0206C6BC
|
||||
.public sub_0206C754
|
||||
.public sub_0206F5C8
|
||||
.public TEAM_MEMBER_TABLE_PTR
|
||||
.public UnloadFile
|
||||
.public vsprintf
|
||||
.public WAN_TABLE
|
||||
.public ZInit8
|
||||
@@ -1,6 +0,0 @@
|
||||
#pragma once
|
||||
.public FemaleToMaleForm
|
||||
.public GetBaseFormBurmyWormadamShellosGastrodonCherrim
|
||||
.public GetBaseFormCastformDeoxysCherrim
|
||||
.public GetDexNumber
|
||||
.public IsUnown
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
.text
|
||||
|
||||
; https://decomp.me/scratch/bOtSO
|
||||
arm_func_start UFixedPoint64CmpLt
|
||||
UFixedPoint64CmpLt: ; 0x02001A30
|
||||
cmp r0, r2
|
||||
@@ -15,620 +16,3 @@ UFixedPoint64CmpLt: ; 0x02001A30
|
||||
movhs r0, #0
|
||||
bx lr
|
||||
arm_func_end UFixedPoint64CmpLt
|
||||
|
||||
arm_func_start MultiplyByFixedPoint
|
||||
MultiplyByFixedPoint: ; 0x02001A54
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
tst r0, #0x80000000
|
||||
movne r2, #1
|
||||
moveq r2, #0
|
||||
tst r1, #0x80000000
|
||||
and r4, r2, #0xff
|
||||
movne r2, #1
|
||||
moveq r2, #0
|
||||
cmp r0, #0
|
||||
and r5, r2, #0xff
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
cmp r1, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
cmp r4, #0
|
||||
rsbne r0, r0, #0
|
||||
cmp r5, #0
|
||||
rsbne r1, r1, #0
|
||||
bl UMultiplyByFixedPoint
|
||||
cmp r4, r5
|
||||
rsbne r0, r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end MultiplyByFixedPoint
|
||||
|
||||
arm_func_start sub_02001AB0
|
||||
sub_02001AB0: ; 0x02001AB0
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
tst r0, #0x80000000
|
||||
movne r2, #1
|
||||
moveq r2, #0
|
||||
tst r1, #0x80000000
|
||||
and r4, r2, #0xff
|
||||
movne r2, #1
|
||||
moveq r2, #0
|
||||
cmp r1, #0
|
||||
and r5, r2, #0xff
|
||||
mvneq r0, #0x80000000
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
cmp r4, #0
|
||||
rsbne r0, r0, #0
|
||||
cmp r5, #0
|
||||
rsbne r1, r1, #0
|
||||
bl sub_02001BB4
|
||||
cmp r4, r5
|
||||
rsbne r0, r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end sub_02001AB0
|
||||
|
||||
arm_func_start UMultiplyByFixedPoint
|
||||
UMultiplyByFixedPoint: ; 0x02001B0C
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
cmp r1, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r3, #0
|
||||
mov r2, r3
|
||||
mov ip, r3
|
||||
mov lr, r3
|
||||
mov r4, r3
|
||||
_02001B3C:
|
||||
mov r5, lr
|
||||
tst r1, #1
|
||||
beq _02001B58
|
||||
add lr, lr, r0
|
||||
add ip, ip, r3
|
||||
cmp r5, lr
|
||||
addhi ip, ip, #1
|
||||
_02001B58:
|
||||
mov r1, r1, lsr #1
|
||||
tst r2, #1
|
||||
orrne r1, r1, #0x80000000
|
||||
mov r2, r2, lsr #1
|
||||
tst r0, #0x80000000
|
||||
mov r3, r3, lsl #1
|
||||
mov r0, r0, lsl #1
|
||||
add r4, r4, #1
|
||||
orrne r3, r3, #1
|
||||
bic r2, r2, #0x80000000
|
||||
cmp r4, #0x40
|
||||
bic r0, r0, #1
|
||||
blt _02001B3C
|
||||
mov r0, lr, lsr #8
|
||||
tst lr, #0x80
|
||||
movne r1, #1
|
||||
bic r0, r0, #0xff000000
|
||||
moveq r1, #0
|
||||
orr lr, r0, ip, lsl #24
|
||||
tst r1, #0xff
|
||||
addne lr, lr, #1
|
||||
mov r0, lr
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end UMultiplyByFixedPoint
|
||||
|
||||
arm_func_start sub_02001BB4
|
||||
sub_02001BB4: ; 0x02001BB4
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
movs sl, r1
|
||||
mvneq r0, #0x80000000
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
mov r8, #0
|
||||
mov r1, r0, asr #0x18
|
||||
mov r0, r0, lsl #8
|
||||
mov r4, r8
|
||||
mov r5, r8
|
||||
mov sb, r8
|
||||
and r6, r1, #0xff
|
||||
bic r7, r0, #0xff
|
||||
mov fp, r8
|
||||
_02001BF4:
|
||||
mov r0, r5, lsl #1
|
||||
tst r5, #0x80000000
|
||||
mov r4, r4, lsl #1
|
||||
orrne r4, r4, #1
|
||||
bic r5, r0, #1
|
||||
tst r6, #0x80000000
|
||||
orrne r5, r5, #1
|
||||
mov r3, r7, lsl #1
|
||||
tst r7, #0x80000000
|
||||
mov r6, r6, lsl #1
|
||||
bic r7, r3, #1
|
||||
mov r0, r4
|
||||
mov r1, r5
|
||||
mov r2, fp
|
||||
mov r3, sl
|
||||
orrne r6, r6, #1
|
||||
bl UFixedPoint64CmpLt
|
||||
cmp r0, #0
|
||||
bne _02001C58
|
||||
mov r0, r5
|
||||
sub r5, r5, sl
|
||||
cmp r0, r5
|
||||
mov r1, #1
|
||||
sublo r4, r4, #1
|
||||
b _02001C5C
|
||||
_02001C58:
|
||||
mov r1, #0
|
||||
_02001C5C:
|
||||
mov r0, r8, lsl #1
|
||||
bic r8, r0, #1
|
||||
cmp r1, #0
|
||||
add sb, sb, #1
|
||||
orrne r8, r8, #1
|
||||
cmp sb, #0x40
|
||||
blt _02001BF4
|
||||
mov r0, r8
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
arm_func_end sub_02001BB4
|
||||
|
||||
arm_func_start IntToFixedPoint64
|
||||
IntToFixedPoint64: ; 0x02001C80
|
||||
mov r2, #0x10000
|
||||
rsb r2, r2, #0
|
||||
and r3, r1, r2
|
||||
mov r3, r3, lsr #0x10
|
||||
str r3, [r0]
|
||||
mov r3, r1, lsl #0x10
|
||||
str r3, [r0, #4]
|
||||
tst r1, #0x8000
|
||||
ldrne r1, [r0]
|
||||
orrne r1, r1, r2
|
||||
strne r1, [r0]
|
||||
bx lr
|
||||
arm_func_end IntToFixedPoint64
|
||||
|
||||
arm_func_start FixedPoint64ToInt
|
||||
FixedPoint64ToInt: ; 0x02001CB0
|
||||
ldmia r0, {r1, r2}
|
||||
mov r0, #0x10000
|
||||
rsb r0, r0, #0
|
||||
mov r1, r1, lsl #0x10
|
||||
and r0, r2, r0
|
||||
orr r0, r1, r0, lsr #16
|
||||
tst r2, #0x8000
|
||||
addne r0, r0, #1
|
||||
bx lr
|
||||
arm_func_end FixedPoint64ToInt
|
||||
|
||||
arm_func_start FixedPoint32To64
|
||||
FixedPoint32To64: ; 0x02001CD4
|
||||
mov r2, r1, asr #0x18
|
||||
mov r3, r1, lsl #8
|
||||
tst r2, #0x80
|
||||
mvnne r1, #0x7f
|
||||
orrne r1, r2, r1
|
||||
stmia r0, {r2, r3}
|
||||
andeq r1, r2, #0x7f
|
||||
str r1, [r0]
|
||||
bx lr
|
||||
arm_func_end FixedPoint32To64
|
||||
|
||||
arm_func_start NegateFixedPoint64
|
||||
NegateFixedPoint64: ; 0x02001CF8
|
||||
ldr r2, [r0]
|
||||
mvn r1, #0
|
||||
eor r2, r2, r1
|
||||
str r2, [r0]
|
||||
ldr r2, [r0, #4]
|
||||
eor r2, r2, r1
|
||||
adds r1, r2, #1
|
||||
str r1, [r0, #4]
|
||||
ldreq r1, [r0]
|
||||
addeq r1, r1, #1
|
||||
streq r1, [r0]
|
||||
bx lr
|
||||
arm_func_end NegateFixedPoint64
|
||||
|
||||
arm_func_start FixedPoint64IsZero
|
||||
FixedPoint64IsZero: ; 0x02001D28
|
||||
ldr r1, [r0]
|
||||
cmp r1, #0
|
||||
movne r0, #0
|
||||
bxne lr
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
arm_func_end FixedPoint64IsZero
|
||||
|
||||
arm_func_start FixedPoint64IsNegative
|
||||
FixedPoint64IsNegative: ; 0x02001D50
|
||||
ldr r0, [r0]
|
||||
tst r0, #0x80000000
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
arm_func_end FixedPoint64IsNegative
|
||||
|
||||
arm_func_start FixedPoint64CmpLt
|
||||
FixedPoint64CmpLt: ; 0x02001D68
|
||||
stmdb sp!, {r3, lr}
|
||||
mov ip, r1
|
||||
ldr r2, [ip]
|
||||
mov lr, r0
|
||||
tst r2, #0x80000000
|
||||
movne r1, #2
|
||||
ldr r0, [lr]
|
||||
moveq r1, #0
|
||||
tst r0, #0x80000000
|
||||
movne r3, #1
|
||||
moveq r3, #0
|
||||
orr r1, r3, r1
|
||||
cmp r1, #3
|
||||
addls pc, pc, r1, lsl #2
|
||||
b _02001DB4
|
||||
_02001DA4: ; jump table
|
||||
b _02001DB4 ; case 0
|
||||
b _02001DC4 ; case 1
|
||||
b _02001DCC ; case 2
|
||||
b _02001DD4 ; case 3
|
||||
_02001DB4:
|
||||
ldr r1, [lr, #4]
|
||||
ldr r3, [ip, #4]
|
||||
bl UFixedPoint64CmpLt
|
||||
ldmia sp!, {r3, pc}
|
||||
_02001DC4:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, pc}
|
||||
_02001DCC:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, pc}
|
||||
_02001DD4:
|
||||
ldr r1, [lr, #4]
|
||||
ldr r3, [ip, #4]
|
||||
bl UFixedPoint64CmpLt
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end FixedPoint64CmpLt
|
||||
|
||||
arm_func_start MultiplyFixedPoint64
|
||||
MultiplyFixedPoint64: ; 0x02001DF4
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
sub sp, sp, #0x18
|
||||
ldr r3, [r1]
|
||||
mov r4, r0
|
||||
str r3, [sp, #0x10]
|
||||
ldr r1, [r1, #4]
|
||||
add r0, sp, #0x10
|
||||
str r1, [sp, #0x14]
|
||||
ldr r1, [r2]
|
||||
str r1, [sp, #8]
|
||||
ldr r1, [r2, #4]
|
||||
str r1, [sp, #0xc]
|
||||
bl FixedPoint64IsNegative
|
||||
mov r5, r0
|
||||
add r0, sp, #8
|
||||
bl FixedPoint64IsNegative
|
||||
mov r6, r0
|
||||
add r0, sp, #0x10
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strne r0, [r4]
|
||||
strne r0, [r4, #4]
|
||||
bne _02001EC0
|
||||
add r0, sp, #8
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strne r0, [r4]
|
||||
strne r0, [r4, #4]
|
||||
bne _02001EC0
|
||||
cmp r5, #0
|
||||
beq _02001E80
|
||||
add r0, sp, #0x10
|
||||
bl NegateFixedPoint64
|
||||
_02001E80:
|
||||
cmp r6, #0
|
||||
beq _02001E90
|
||||
add r0, sp, #8
|
||||
bl NegateFixedPoint64
|
||||
_02001E90:
|
||||
add r0, sp, #0
|
||||
add r1, sp, #0x10
|
||||
add r2, sp, #8
|
||||
bl UMultiplyFixedPoint64
|
||||
cmp r5, r6
|
||||
beq _02001EB0
|
||||
add r0, sp, #0
|
||||
bl NegateFixedPoint64
|
||||
_02001EB0:
|
||||
ldr r0, [sp]
|
||||
str r0, [r4]
|
||||
ldr r0, [sp, #4]
|
||||
str r0, [r4, #4]
|
||||
_02001EC0:
|
||||
add sp, sp, #0x18
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end MultiplyFixedPoint64
|
||||
|
||||
arm_func_start DivideFixedPoint64
|
||||
DivideFixedPoint64: ; 0x02001EC8
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
sub sp, sp, #0x18
|
||||
ldr r3, [r1]
|
||||
mov r4, r0
|
||||
str r3, [sp, #0x10]
|
||||
ldr r1, [r1, #4]
|
||||
add r0, sp, #0x10
|
||||
str r1, [sp, #0x14]
|
||||
ldr r1, [r2]
|
||||
str r1, [sp, #8]
|
||||
ldr r1, [r2, #4]
|
||||
str r1, [sp, #0xc]
|
||||
bl FixedPoint64IsNegative
|
||||
mov r5, r0
|
||||
add r0, sp, #8
|
||||
bl FixedPoint64IsNegative
|
||||
mov r6, r0
|
||||
add r0, sp, #8
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
mvnne r0, #0x80000000
|
||||
strne r0, [r4]
|
||||
subne r0, r0, #0x80000000
|
||||
strne r0, [r4, #4]
|
||||
bne _02001F98
|
||||
add r0, sp, #0x10
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strne r0, [r4]
|
||||
strne r0, [r4, #4]
|
||||
bne _02001F98
|
||||
cmp r5, #0
|
||||
beq _02001F58
|
||||
add r0, sp, #0x10
|
||||
bl NegateFixedPoint64
|
||||
_02001F58:
|
||||
cmp r6, #0
|
||||
beq _02001F68
|
||||
add r0, sp, #8
|
||||
bl NegateFixedPoint64
|
||||
_02001F68:
|
||||
add r0, sp, #0
|
||||
add r1, sp, #0x10
|
||||
add r2, sp, #8
|
||||
bl UDivideFixedPoint64
|
||||
cmp r5, r6
|
||||
beq _02001F88
|
||||
add r0, sp, #0
|
||||
bl NegateFixedPoint64
|
||||
_02001F88:
|
||||
ldr r0, [sp]
|
||||
str r0, [r4]
|
||||
ldr r0, [sp, #4]
|
||||
str r0, [r4, #4]
|
||||
_02001F98:
|
||||
add sp, sp, #0x18
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end DivideFixedPoint64
|
||||
|
||||
arm_func_start UMultiplyFixedPoint64
|
||||
UMultiplyFixedPoint64: ; 0x02001FA0
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r6, r1
|
||||
mov r4, r0
|
||||
mov r0, r6
|
||||
mov r5, r2
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strne r0, [r4]
|
||||
strne r0, [r4, #4]
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
mov r0, r5
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strne r0, [r4]
|
||||
strne r0, [r4, #4]
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
mov lr, #0
|
||||
ldmia r6, {r1, r2}
|
||||
ldmia r5, {r3, ip}
|
||||
mov r5, lr
|
||||
mov r6, lr
|
||||
_02001FFC:
|
||||
mov r0, r5
|
||||
tst ip, #1
|
||||
beq _02002018
|
||||
add r5, r5, r2
|
||||
add lr, lr, r1
|
||||
cmp r0, r5
|
||||
addhi lr, lr, #1
|
||||
_02002018:
|
||||
mov r0, r3, lsr #1
|
||||
tst r3, #1
|
||||
mov ip, ip, lsr #1
|
||||
bic r3, r0, #0x80000000
|
||||
orrne ip, ip, #0x80000000
|
||||
mov r1, r1, lsl #1
|
||||
tst r2, #0x80000000
|
||||
mov r0, r2, lsl #1
|
||||
add r6, r6, #1
|
||||
orrne r1, r1, #1
|
||||
cmp r6, #0x40
|
||||
bic r2, r0, #1
|
||||
blt _02001FFC
|
||||
mov r0, r5, lsr #0x10
|
||||
mov r0, r0, lsl #0x10
|
||||
tst r5, #0x8000
|
||||
mov r1, lr, lsl #0x10
|
||||
movne r2, #1
|
||||
orr r5, r1, r0, lsr #16
|
||||
mov r0, lr, lsr #0x10
|
||||
moveq r2, #0
|
||||
mov r0, r0, lsl #0x10
|
||||
tst r2, #0xff
|
||||
addne r5, r5, #1
|
||||
mov r0, r0, lsr #0x10
|
||||
stmia r4, {r0, r5}
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end UMultiplyFixedPoint64
|
||||
|
||||
arm_func_start UDivideFixedPoint64
|
||||
UDivideFixedPoint64: ; 0x02002084
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
sub sp, sp, #8
|
||||
mov r4, r2
|
||||
mov sl, r0
|
||||
mov r0, r4
|
||||
mov r5, r1
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
mvnne r0, #0x80000000
|
||||
strne r0, [sl]
|
||||
subne r0, r0, #0x80000000
|
||||
strne r0, [sl, #4]
|
||||
bne _020021C0
|
||||
mov r0, r5
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strne r0, [sl]
|
||||
strne r0, [sl, #4]
|
||||
bne _020021C0
|
||||
ldr r2, [r5, #4]
|
||||
mov r0, #0x10000
|
||||
mov r1, r2, lsr #0x10
|
||||
mov r8, #0
|
||||
ldr r3, [r5]
|
||||
rsb r0, r0, #0
|
||||
and r2, r0, r2, lsl #16
|
||||
and r3, r0, r3, lsl #16
|
||||
ldr r0, [r4]
|
||||
mov r1, r1, lsl #0x10
|
||||
ldr fp, [r4, #4]
|
||||
str r0, [sp, #4]
|
||||
mov sb, r8
|
||||
mov r4, r8
|
||||
mov r5, r8
|
||||
str r8, [sp]
|
||||
orr r6, r3, r1, lsr #16
|
||||
orr r7, r2, #0x8000
|
||||
_0200211C:
|
||||
mov r0, r5, lsl #1
|
||||
tst r5, #0x80000000
|
||||
mov r4, r4, lsl #1
|
||||
orrne r4, r4, #1
|
||||
bic r5, r0, #1
|
||||
tst r6, #0x80000000
|
||||
orrne r5, r5, #1
|
||||
mov r1, r7, lsl #1
|
||||
tst r7, #0x80000000
|
||||
mov r6, r6, lsl #1
|
||||
bic r7, r1, #1
|
||||
ldr r2, [sp, #4]
|
||||
mov r0, r4
|
||||
mov r1, r5
|
||||
mov r3, fp
|
||||
orrne r6, r6, #1
|
||||
bl UFixedPoint64CmpLt
|
||||
cmp r0, #0
|
||||
bne _02002188
|
||||
mov r0, r5
|
||||
sub r5, r5, fp
|
||||
cmp r0, r5
|
||||
ldr r0, [sp, #4]
|
||||
mov r1, #1
|
||||
sub r4, r4, r0
|
||||
sublo r4, r4, #1
|
||||
b _0200218C
|
||||
_02002188:
|
||||
mov r1, #0
|
||||
_0200218C:
|
||||
mov r0, sb, lsl #1
|
||||
tst sb, #0x80000000
|
||||
bic sb, r0, #1
|
||||
ldr r0, [sp]
|
||||
mov r8, r8, lsl #1
|
||||
add r0, r0, #1
|
||||
orrne r8, r8, #1
|
||||
cmp r1, #0
|
||||
orrne sb, sb, #1
|
||||
str r0, [sp]
|
||||
cmp r0, #0x40
|
||||
blt _0200211C
|
||||
stmia sl, {r8, sb}
|
||||
_020021C0:
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
arm_func_end UDivideFixedPoint64
|
||||
|
||||
arm_func_start AddFixedPoint64
|
||||
AddFixedPoint64: ; 0x020021C8
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr ip, [r1, #4]
|
||||
ldr lr, [r1]
|
||||
ldr r1, [r2]
|
||||
ldr r3, [r2, #4]
|
||||
add r1, lr, r1
|
||||
add r2, ip, r3
|
||||
cmp r2, ip
|
||||
addlo r1, r1, #1
|
||||
stmia r0, {r1, r2}
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end AddFixedPoint64
|
||||
|
||||
arm_func_start ClampedLn
|
||||
ClampedLn: ; 0x020021F4
|
||||
cmp r1, #1
|
||||
movlt r1, #1
|
||||
cmp r1, #0x800
|
||||
ldrge r1, _02002220 ; =0x000007FF
|
||||
ldr r2, _02002224 ; =NATURAL_LOG_VALUE_TABLE
|
||||
mov r1, r1, lsl #1
|
||||
ldrsh r2, [r2, r1]
|
||||
mov r1, #0
|
||||
mov r2, r2, lsl #4
|
||||
stmia r0, {r1, r2}
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02002220: .word 0x000007FF
|
||||
_02002224: .word NATURAL_LOG_VALUE_TABLE
|
||||
arm_func_end ClampedLn
|
||||
|
||||
arm_func_start sub_02002228
|
||||
sub_02002228: ; 0x02002228
|
||||
bx lr
|
||||
arm_func_end sub_02002228
|
||||
|
||||
arm_func_start GetRngSeed
|
||||
GetRngSeed: ; 0x0200222C
|
||||
ldr r0, _02002238 ; =PRNG_SEQUENCE_NUM
|
||||
ldrh r0, [r0]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02002238: .word PRNG_SEQUENCE_NUM
|
||||
arm_func_end GetRngSeed
|
||||
|
||||
arm_func_start SetRngSeed
|
||||
SetRngSeed: ; 0x0200223C
|
||||
ldr r1, _02002248 ; =PRNG_SEQUENCE_NUM
|
||||
strh r0, [r1]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02002248: .word PRNG_SEQUENCE_NUM
|
||||
arm_func_end SetRngSeed
|
||||
|
||||
53
asm/main_02001B0C.s
Normal file
53
asm/main_02001B0C.s
Normal file
@@ -0,0 +1,53 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_02001B0C.inc"
|
||||
|
||||
.text
|
||||
|
||||
; https://decomp.me/scratch/CGSpp
|
||||
arm_func_start UMultiplyByFixedPoint
|
||||
UMultiplyByFixedPoint: ; 0x02001B0C
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
cmp r1, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r3, #0
|
||||
mov r2, r3
|
||||
mov ip, r3
|
||||
mov lr, r3
|
||||
mov r4, r3
|
||||
_02001B3C:
|
||||
mov r5, lr
|
||||
tst r1, #1
|
||||
beq _02001B58
|
||||
add lr, lr, r0
|
||||
add ip, ip, r3
|
||||
cmp r5, lr
|
||||
addhi ip, ip, #1
|
||||
_02001B58:
|
||||
mov r1, r1, lsr #1
|
||||
tst r2, #1
|
||||
orrne r1, r1, #0x80000000
|
||||
mov r2, r2, lsr #1
|
||||
tst r0, #0x80000000
|
||||
mov r3, r3, lsl #1
|
||||
mov r0, r0, lsl #1
|
||||
add r4, r4, #1
|
||||
orrne r3, r3, #1
|
||||
bic r2, r2, #0x80000000
|
||||
cmp r4, #0x40
|
||||
bic r0, r0, #1
|
||||
blt _02001B3C
|
||||
mov r0, lr, lsr #8
|
||||
tst lr, #0x80
|
||||
movne r1, #1
|
||||
bic r0, r0, #0xff000000
|
||||
moveq r1, #0
|
||||
orr lr, r0, ip, lsl #24
|
||||
tst r1, #0xff
|
||||
addne lr, lr, #1
|
||||
mov r0, lr
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end UMultiplyByFixedPoint
|
||||
17
asm/main_02001CB0.s
Normal file
17
asm/main_02001CB0.s
Normal file
@@ -0,0 +1,17 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_02001CB0.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start FixedPoint64ToInt
|
||||
FixedPoint64ToInt: ; 0x02001CB0
|
||||
ldmia r0, {r1, r2}
|
||||
mov r0, #0x10000
|
||||
rsb r0, r0, #0
|
||||
mov r1, r1, lsl #0x10
|
||||
and r0, r2, r0
|
||||
orr r0, r1, r0, lsr #16
|
||||
tst r2, #0x8000
|
||||
addne r0, r0, #1
|
||||
bx lr
|
||||
arm_func_end FixedPoint64ToInt
|
||||
362
asm/main_02001D68.s
Normal file
362
asm/main_02001D68.s
Normal file
@@ -0,0 +1,362 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_02001D68.inc"
|
||||
|
||||
.text
|
||||
|
||||
; https://decomp.me/scratch/LEHLv
|
||||
arm_func_start FixedPoint64CmpLt
|
||||
FixedPoint64CmpLt: ; 0x02001D68
|
||||
stmdb sp!, {r3, lr}
|
||||
mov ip, r1
|
||||
ldr r2, [ip]
|
||||
mov lr, r0
|
||||
tst r2, #0x80000000
|
||||
movne r1, #2
|
||||
ldr r0, [lr]
|
||||
moveq r1, #0
|
||||
tst r0, #0x80000000
|
||||
movne r3, #1
|
||||
moveq r3, #0
|
||||
orr r1, r3, r1
|
||||
cmp r1, #3
|
||||
addls pc, pc, r1, lsl #2
|
||||
b _02001DB4
|
||||
_02001DA4: ; jump table
|
||||
b _02001DB4 ; case 0
|
||||
b _02001DC4 ; case 1
|
||||
b _02001DCC ; case 2
|
||||
b _02001DD4 ; case 3
|
||||
_02001DB4:
|
||||
ldr r1, [lr, #4]
|
||||
ldr r3, [ip, #4]
|
||||
bl UFixedPoint64CmpLt
|
||||
ldmia sp!, {r3, pc}
|
||||
_02001DC4:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, pc}
|
||||
_02001DCC:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, pc}
|
||||
_02001DD4:
|
||||
ldr r1, [lr, #4]
|
||||
ldr r3, [ip, #4]
|
||||
bl UFixedPoint64CmpLt
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end FixedPoint64CmpLt
|
||||
|
||||
arm_func_start MultiplyFixedPoint64
|
||||
MultiplyFixedPoint64: ; 0x02001DF4
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
sub sp, sp, #0x18
|
||||
ldr r3, [r1]
|
||||
mov r4, r0
|
||||
str r3, [sp, #0x10]
|
||||
ldr r1, [r1, #4]
|
||||
add r0, sp, #0x10
|
||||
str r1, [sp, #0x14]
|
||||
ldr r1, [r2]
|
||||
str r1, [sp, #8]
|
||||
ldr r1, [r2, #4]
|
||||
str r1, [sp, #0xc]
|
||||
bl FixedPoint64IsNegative
|
||||
mov r5, r0
|
||||
add r0, sp, #8
|
||||
bl FixedPoint64IsNegative
|
||||
mov r6, r0
|
||||
add r0, sp, #0x10
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strne r0, [r4]
|
||||
strne r0, [r4, #4]
|
||||
bne _02001EC0
|
||||
add r0, sp, #8
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strne r0, [r4]
|
||||
strne r0, [r4, #4]
|
||||
bne _02001EC0
|
||||
cmp r5, #0
|
||||
beq _02001E80
|
||||
add r0, sp, #0x10
|
||||
bl NegateFixedPoint64
|
||||
_02001E80:
|
||||
cmp r6, #0
|
||||
beq _02001E90
|
||||
add r0, sp, #8
|
||||
bl NegateFixedPoint64
|
||||
_02001E90:
|
||||
add r0, sp, #0
|
||||
add r1, sp, #0x10
|
||||
add r2, sp, #8
|
||||
bl UMultiplyFixedPoint64
|
||||
cmp r5, r6
|
||||
beq _02001EB0
|
||||
add r0, sp, #0
|
||||
bl NegateFixedPoint64
|
||||
_02001EB0:
|
||||
ldr r0, [sp]
|
||||
str r0, [r4]
|
||||
ldr r0, [sp, #4]
|
||||
str r0, [r4, #4]
|
||||
_02001EC0:
|
||||
add sp, sp, #0x18
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end MultiplyFixedPoint64
|
||||
|
||||
arm_func_start DivideFixedPoint64
|
||||
DivideFixedPoint64: ; 0x02001EC8
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
sub sp, sp, #0x18
|
||||
ldr r3, [r1]
|
||||
mov r4, r0
|
||||
str r3, [sp, #0x10]
|
||||
ldr r1, [r1, #4]
|
||||
add r0, sp, #0x10
|
||||
str r1, [sp, #0x14]
|
||||
ldr r1, [r2]
|
||||
str r1, [sp, #8]
|
||||
ldr r1, [r2, #4]
|
||||
str r1, [sp, #0xc]
|
||||
bl FixedPoint64IsNegative
|
||||
mov r5, r0
|
||||
add r0, sp, #8
|
||||
bl FixedPoint64IsNegative
|
||||
mov r6, r0
|
||||
add r0, sp, #8
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
mvnne r0, #0x80000000
|
||||
strne r0, [r4]
|
||||
subne r0, r0, #0x80000000
|
||||
strne r0, [r4, #4]
|
||||
bne _02001F98
|
||||
add r0, sp, #0x10
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strne r0, [r4]
|
||||
strne r0, [r4, #4]
|
||||
bne _02001F98
|
||||
cmp r5, #0
|
||||
beq _02001F58
|
||||
add r0, sp, #0x10
|
||||
bl NegateFixedPoint64
|
||||
_02001F58:
|
||||
cmp r6, #0
|
||||
beq _02001F68
|
||||
add r0, sp, #8
|
||||
bl NegateFixedPoint64
|
||||
_02001F68:
|
||||
add r0, sp, #0
|
||||
add r1, sp, #0x10
|
||||
add r2, sp, #8
|
||||
bl UDivideFixedPoint64
|
||||
cmp r5, r6
|
||||
beq _02001F88
|
||||
add r0, sp, #0
|
||||
bl NegateFixedPoint64
|
||||
_02001F88:
|
||||
ldr r0, [sp]
|
||||
str r0, [r4]
|
||||
ldr r0, [sp, #4]
|
||||
str r0, [r4, #4]
|
||||
_02001F98:
|
||||
add sp, sp, #0x18
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end DivideFixedPoint64
|
||||
|
||||
arm_func_start UMultiplyFixedPoint64
|
||||
UMultiplyFixedPoint64: ; 0x02001FA0
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r6, r1
|
||||
mov r4, r0
|
||||
mov r0, r6
|
||||
mov r5, r2
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strne r0, [r4]
|
||||
strne r0, [r4, #4]
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
mov r0, r5
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strne r0, [r4]
|
||||
strne r0, [r4, #4]
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
mov lr, #0
|
||||
ldmia r6, {r1, r2}
|
||||
ldmia r5, {r3, ip}
|
||||
mov r5, lr
|
||||
mov r6, lr
|
||||
_02001FFC:
|
||||
mov r0, r5
|
||||
tst ip, #1
|
||||
beq _02002018
|
||||
add r5, r5, r2
|
||||
add lr, lr, r1
|
||||
cmp r0, r5
|
||||
addhi lr, lr, #1
|
||||
_02002018:
|
||||
mov r0, r3, lsr #1
|
||||
tst r3, #1
|
||||
mov ip, ip, lsr #1
|
||||
bic r3, r0, #0x80000000
|
||||
orrne ip, ip, #0x80000000
|
||||
mov r1, r1, lsl #1
|
||||
tst r2, #0x80000000
|
||||
mov r0, r2, lsl #1
|
||||
add r6, r6, #1
|
||||
orrne r1, r1, #1
|
||||
cmp r6, #0x40
|
||||
bic r2, r0, #1
|
||||
blt _02001FFC
|
||||
mov r0, r5, lsr #0x10
|
||||
mov r0, r0, lsl #0x10
|
||||
tst r5, #0x8000
|
||||
mov r1, lr, lsl #0x10
|
||||
movne r2, #1
|
||||
orr r5, r1, r0, lsr #16
|
||||
mov r0, lr, lsr #0x10
|
||||
moveq r2, #0
|
||||
mov r0, r0, lsl #0x10
|
||||
tst r2, #0xff
|
||||
addne r5, r5, #1
|
||||
mov r0, r0, lsr #0x10
|
||||
stmia r4, {r0, r5}
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end UMultiplyFixedPoint64
|
||||
|
||||
arm_func_start UDivideFixedPoint64
|
||||
UDivideFixedPoint64: ; 0x02002084
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
sub sp, sp, #8
|
||||
mov r4, r2
|
||||
mov sl, r0
|
||||
mov r0, r4
|
||||
mov r5, r1
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
mvnne r0, #0x80000000
|
||||
strne r0, [sl]
|
||||
subne r0, r0, #0x80000000
|
||||
strne r0, [sl, #4]
|
||||
bne _020021C0
|
||||
mov r0, r5
|
||||
bl FixedPoint64IsZero
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strne r0, [sl]
|
||||
strne r0, [sl, #4]
|
||||
bne _020021C0
|
||||
ldr r2, [r5, #4]
|
||||
mov r0, #0x10000
|
||||
mov r1, r2, lsr #0x10
|
||||
mov r8, #0
|
||||
ldr r3, [r5]
|
||||
rsb r0, r0, #0
|
||||
and r2, r0, r2, lsl #16
|
||||
and r3, r0, r3, lsl #16
|
||||
ldr r0, [r4]
|
||||
mov r1, r1, lsl #0x10
|
||||
ldr fp, [r4, #4]
|
||||
str r0, [sp, #4]
|
||||
mov sb, r8
|
||||
mov r4, r8
|
||||
mov r5, r8
|
||||
str r8, [sp]
|
||||
orr r6, r3, r1, lsr #16
|
||||
orr r7, r2, #0x8000
|
||||
_0200211C:
|
||||
mov r0, r5, lsl #1
|
||||
tst r5, #0x80000000
|
||||
mov r4, r4, lsl #1
|
||||
orrne r4, r4, #1
|
||||
bic r5, r0, #1
|
||||
tst r6, #0x80000000
|
||||
orrne r5, r5, #1
|
||||
mov r1, r7, lsl #1
|
||||
tst r7, #0x80000000
|
||||
mov r6, r6, lsl #1
|
||||
bic r7, r1, #1
|
||||
ldr r2, [sp, #4]
|
||||
mov r0, r4
|
||||
mov r1, r5
|
||||
mov r3, fp
|
||||
orrne r6, r6, #1
|
||||
bl UFixedPoint64CmpLt
|
||||
cmp r0, #0
|
||||
bne _02002188
|
||||
mov r0, r5
|
||||
sub r5, r5, fp
|
||||
cmp r0, r5
|
||||
ldr r0, [sp, #4]
|
||||
mov r1, #1
|
||||
sub r4, r4, r0
|
||||
sublo r4, r4, #1
|
||||
b _0200218C
|
||||
_02002188:
|
||||
mov r1, #0
|
||||
_0200218C:
|
||||
mov r0, sb, lsl #1
|
||||
tst sb, #0x80000000
|
||||
bic sb, r0, #1
|
||||
ldr r0, [sp]
|
||||
mov r8, r8, lsl #1
|
||||
add r0, r0, #1
|
||||
orrne r8, r8, #1
|
||||
cmp r1, #0
|
||||
orrne sb, sb, #1
|
||||
str r0, [sp]
|
||||
cmp r0, #0x40
|
||||
blt _0200211C
|
||||
stmia sl, {r8, sb}
|
||||
_020021C0:
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
arm_func_end UDivideFixedPoint64
|
||||
|
||||
arm_func_start AddFixedPoint64
|
||||
AddFixedPoint64: ; 0x020021C8
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr ip, [r1, #4]
|
||||
ldr lr, [r1]
|
||||
ldr r1, [r2]
|
||||
ldr r3, [r2, #4]
|
||||
add r1, lr, r1
|
||||
add r2, ip, r3
|
||||
cmp r2, ip
|
||||
addlo r1, r1, #1
|
||||
stmia r0, {r1, r2}
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end AddFixedPoint64
|
||||
|
||||
arm_func_start ClampedLn
|
||||
ClampedLn: ; 0x020021F4
|
||||
cmp r1, #1
|
||||
movlt r1, #1
|
||||
cmp r1, #0x800
|
||||
ldrge r1, _02002220 ; =0x000007FF
|
||||
ldr r2, _02002224 ; =NATURAL_LOG_VALUE_TABLE
|
||||
mov r1, r1, lsl #1
|
||||
ldrsh r2, [r2, r1]
|
||||
mov r1, #0
|
||||
mov r2, r2, lsl #4
|
||||
stmia r0, {r1, r2}
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02002220: .word 0x000007FF
|
||||
_02002224: .word NATURAL_LOG_VALUE_TABLE
|
||||
arm_func_end ClampedLn
|
||||
|
||||
arm_func_start sub_02002228
|
||||
sub_02002228: ; 0x02002228
|
||||
bx lr
|
||||
arm_func_end sub_02002228
|
||||
556
asm/main_0200D1F0.s
Normal file
556
asm/main_0200D1F0.s
Normal file
@@ -0,0 +1,556 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_0200D1F0.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start sub_0200D1F0
|
||||
sub_0200D1F0: ; 0x0200D1F0
|
||||
ldr ip, _0200D1F8 ; =sub_0200EB64
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0200D1F8: .word sub_0200EB64
|
||||
arm_func_end sub_0200D1F0
|
||||
|
||||
arm_func_start sub_0200D1FC
|
||||
sub_0200D1FC: ; 0x0200D1FC
|
||||
ldr ip, _0200D204 ; =GetItemPaletteId
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0200D204: .word GetItemPaletteId
|
||||
arm_func_end sub_0200D1FC
|
||||
|
||||
arm_func_start sub_0200D208
|
||||
sub_0200D208: ; 0x0200D208
|
||||
ldr ip, _0200D210 ; =GetItemActionName
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0200D210: .word GetItemActionName
|
||||
arm_func_end sub_0200D208
|
||||
|
||||
arm_func_start sub_0200D214
|
||||
sub_0200D214: ; 0x0200D214
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
sub sp, sp, #0x58
|
||||
mov r5, r1
|
||||
mov r6, r0
|
||||
mov r0, r5
|
||||
mov r4, r2
|
||||
bl GetItemName
|
||||
mov r1, r0
|
||||
add r0, sp, #6
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
mov r2, #0
|
||||
mov r1, r5
|
||||
add r0, sp, #0
|
||||
mov r3, r2
|
||||
bl InitItem
|
||||
mov r1, #1
|
||||
strh r1, [sp, #2]
|
||||
mov r0, r6
|
||||
mov r3, r4
|
||||
add r1, sp, #6
|
||||
add r2, sp, #0
|
||||
bl sub_0200D688
|
||||
add sp, sp, #0x58
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end sub_0200D214
|
||||
|
||||
arm_func_start FindItemInInventory
|
||||
FindItemInInventory: ; 0x0200D278
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r1, _0200D30C ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r5, #0
|
||||
ldr r6, [r1]
|
||||
mov r3, r5
|
||||
mov ip, #1
|
||||
mov r1, #6
|
||||
b _0200D2D0
|
||||
_0200D298:
|
||||
mul lr, r5, r1
|
||||
ldr r4, [r6, #0x384]
|
||||
ldrb r2, [r4, lr]
|
||||
add r4, r4, lr
|
||||
tst r2, #1
|
||||
movne r2, ip
|
||||
moveq r2, r3
|
||||
tst r2, #0xff
|
||||
beq _0200D2CC
|
||||
ldrsh r2, [r4, #4]
|
||||
cmp r0, r2
|
||||
moveq r0, r5
|
||||
ldmeqia sp!, {r4, r5, r6, pc}
|
||||
_0200D2CC:
|
||||
add r5, r5, #1
|
||||
_0200D2D0:
|
||||
cmp r5, #0x32
|
||||
blt _0200D298
|
||||
mov r2, #0
|
||||
b _0200D2FC
|
||||
_0200D2E0:
|
||||
add r1, r6, r2, lsl #1
|
||||
add r1, r1, #0x300
|
||||
ldrsh r1, [r1, #0x8a]
|
||||
cmp r0, r1
|
||||
addeq r0, r2, #0x8000
|
||||
ldmeqia sp!, {r4, r5, r6, pc}
|
||||
add r2, r2, #1
|
||||
_0200D2FC:
|
||||
cmp r2, #0x3e8
|
||||
blt _0200D2E0
|
||||
mvn r0, #0
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0200D30C: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end FindItemInInventory
|
||||
|
||||
arm_func_start MaybeGetFormattedItemName
|
||||
MaybeGetFormattedItemName: ; 0x0200D310
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
sub sp, sp, #0xa0
|
||||
mov sb, r1
|
||||
mov sl, r0
|
||||
ldrsh r0, [sb, #4]
|
||||
mov r8, r2
|
||||
mov r7, r3
|
||||
mov r4, #0
|
||||
bl GetItemCategory
|
||||
mov r5, r4
|
||||
mov r6, r0
|
||||
cmp r8, #0
|
||||
ldrneb r0, [r8, #8]
|
||||
mov fp, r5
|
||||
cmpne r0, #0
|
||||
ldrsh r0, [sb, #4]
|
||||
movne r4, #1
|
||||
bl GetItemName
|
||||
mov r2, r0
|
||||
cmp r6, #0
|
||||
bne _0200D3B4
|
||||
cmp r4, #0
|
||||
add r0, sp, #0x50
|
||||
beq _0200D394
|
||||
cmp r7, #0
|
||||
ldrh r3, [sb, #2]
|
||||
beq _0200D388
|
||||
ldr r1, _0200D60C ; =_02097F34
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D388:
|
||||
ldr r1, _0200D610 ; =_02097F50
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D394:
|
||||
cmp r7, #0
|
||||
beq _0200D3A8
|
||||
ldr r1, _0200D614 ; =_02097F58
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D3A8:
|
||||
ldr r1, _0200D618 ; =_02097F68
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D3B4:
|
||||
cmp r6, #1
|
||||
bne _0200D40C
|
||||
cmp r4, #0
|
||||
add r0, sp, #0x50
|
||||
beq _0200D3EC
|
||||
cmp r7, #0
|
||||
ldrh r3, [sb, #2]
|
||||
beq _0200D3E0
|
||||
ldr r1, _0200D60C ; =_02097F34
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D3E0:
|
||||
ldr r1, _0200D610 ; =_02097F50
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D3EC:
|
||||
cmp r7, #0
|
||||
beq _0200D400
|
||||
ldr r1, _0200D614 ; =_02097F58
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D400:
|
||||
ldr r1, _0200D618 ; =_02097F68
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D40C:
|
||||
add r0, r6, #0xf4
|
||||
and r0, r0, #0xff
|
||||
cmp r0, #2
|
||||
bhi _0200D440
|
||||
cmp r7, #0
|
||||
add r0, sp, #0x50
|
||||
beq _0200D434
|
||||
ldr r1, _0200D61C ; =_02097F6C
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D434:
|
||||
mov r1, r2
|
||||
bl strcpy
|
||||
b _0200D4F8
|
||||
_0200D440:
|
||||
ldrsh r0, [sb, #4]
|
||||
cmp r0, #0xb7
|
||||
bne _0200D4AC
|
||||
mov r0, sb
|
||||
bl GetMoneyQuantity
|
||||
mov r1, r0
|
||||
add r0, sp, #0
|
||||
bl MoneyQuantityToString__02023B30
|
||||
cmp r7, #0
|
||||
add r0, sp, #0x50
|
||||
add r2, sp, #0
|
||||
beq _0200D47C
|
||||
ldr r1, _0200D620 ; =_02097F7C
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D484
|
||||
_0200D47C:
|
||||
ldr r1, _0200D624 ; =_02097F90
|
||||
bl SprintfStatic__0200D634
|
||||
_0200D484:
|
||||
cmp r7, #0
|
||||
add r0, sp, #0x50
|
||||
add r2, sp, #0
|
||||
beq _0200D4A0
|
||||
ldr r1, _0200D620 ; =_02097F7C
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D4A0:
|
||||
ldr r1, _0200D624 ; =_02097F90
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D4AC:
|
||||
cmp r6, #0xf
|
||||
add r0, sp, #0x50
|
||||
bne _0200D4D8
|
||||
cmp r7, #0
|
||||
beq _0200D4CC
|
||||
ldr r1, _0200D628 ; =_02097F9C
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D4CC:
|
||||
mov r1, r2
|
||||
bl strcpy
|
||||
b _0200D4F8
|
||||
_0200D4D8:
|
||||
cmp r7, #0
|
||||
beq _0200D4EC
|
||||
ldr r1, _0200D614 ; =_02097F58
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D4EC:
|
||||
mov r1, r2
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
_0200D4F8:
|
||||
ldrb r0, [sb]
|
||||
tst r0, #8
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
tst r0, #0xff
|
||||
beq _0200D538
|
||||
ldr r1, _0200D62C ; =_02097FAC
|
||||
add r2, sp, #0x50
|
||||
mov r0, sl
|
||||
bl SprintfStatic__0200D634
|
||||
add r0, sp, #0x50
|
||||
mov r1, sl
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
mov fp, #1
|
||||
b _0200D564
|
||||
_0200D538:
|
||||
ldrb r0, [sp, #0xc8]
|
||||
cmp r0, #0
|
||||
beq _0200D564
|
||||
ldr r1, _0200D630 ; =_02097FB8
|
||||
add r2, sp, #0x50
|
||||
mov r0, sl
|
||||
bl SprintfStatic__0200D634
|
||||
add r0, sp, #0x50
|
||||
mov r1, sl
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
_0200D564:
|
||||
cmp r8, #0
|
||||
bne _0200D580
|
||||
add r1, sp, #0x50
|
||||
mov r0, sl
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
b _0200D600
|
||||
_0200D580:
|
||||
ldrb r0, [r8, #4]
|
||||
cmp r0, #0
|
||||
beq _0200D5AC
|
||||
ldrb r0, [sb]
|
||||
tst r0, #0x10
|
||||
beq _0200D5AC
|
||||
cmp fp, #0
|
||||
movne r0, #0x35
|
||||
strneb r0, [sp, #0x54]
|
||||
moveq r0, #0x32
|
||||
streqb r0, [sp, #0x54]
|
||||
_0200D5AC:
|
||||
ldr r0, [r8]
|
||||
add r1, sp, #0x50
|
||||
cmp r0, #1
|
||||
cmpne r0, #3
|
||||
bne _0200D5F0
|
||||
ldrb r0, [sb]
|
||||
tst r0, #2
|
||||
mov r0, sl
|
||||
beq _0200D5E4
|
||||
mov r2, sb
|
||||
mov r3, r8
|
||||
bl sub_0200D688
|
||||
mov r5, #1
|
||||
b _0200D600
|
||||
_0200D5E4:
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
b _0200D600
|
||||
_0200D5F0:
|
||||
mov r0, sl
|
||||
mov r2, sb
|
||||
mov r3, r8
|
||||
bl sub_0200D688
|
||||
_0200D600:
|
||||
mov r0, r5
|
||||
add sp, sp, #0xa0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_0200D60C: .word _02097F34
|
||||
_0200D610: .word _02097F50
|
||||
_0200D614: .word _02097F58
|
||||
_0200D618: .word _02097F68
|
||||
_0200D61C: .word _02097F6C
|
||||
_0200D620: .word _02097F7C
|
||||
_0200D624: .word _02097F90
|
||||
_0200D628: .word _02097F9C
|
||||
_0200D62C: .word _02097FAC
|
||||
_0200D630: .word _02097FB8
|
||||
arm_func_end MaybeGetFormattedItemName
|
||||
|
||||
arm_func_start SprintfStatic__0200D634
|
||||
SprintfStatic__0200D634: ; 0x0200D634
|
||||
stmdb sp!, {r0, r1, r2, r3}
|
||||
stmdb sp!, {r3, lr}
|
||||
add r2, sp, #0xc
|
||||
bic r2, r2, #3
|
||||
ldr r1, [sp, #0xc]
|
||||
add r2, r2, #4
|
||||
bl vsprintf
|
||||
ldmia sp!, {r3, lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
arm_func_end SprintfStatic__0200D634
|
||||
|
||||
arm_func_start MaybeGetUncoloredFormattedItemName
|
||||
MaybeGetUncoloredFormattedItemName: ; 0x0200D65C
|
||||
stmdb sp!, {r3, lr}
|
||||
mov r3, #0
|
||||
str r3, [sp]
|
||||
bl MaybeGetFormattedItemName
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end MaybeGetUncoloredFormattedItemName
|
||||
|
||||
arm_func_start MaybeGetColoredFormattedItemName
|
||||
MaybeGetColoredFormattedItemName: ; 0x0200D670
|
||||
stmdb sp!, {r3, lr}
|
||||
mov ip, #0
|
||||
mov r3, #1
|
||||
str ip, [sp]
|
||||
bl MaybeGetFormattedItemName
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end MaybeGetColoredFormattedItemName
|
||||
|
||||
arm_func_start sub_0200D688
|
||||
sub_0200D688: ; 0x0200D688
|
||||
stmdb sp!, {r3, r4, r5, r6, lr}
|
||||
sub sp, sp, #0x2c
|
||||
movs r4, r3
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
bne _0200D6AC
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
b _0200D75C
|
||||
_0200D6AC:
|
||||
ldr r0, [r4]
|
||||
cmp r0, #4
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _0200D6E8
|
||||
_0200D6BC: ; jump table
|
||||
b _0200D6E8 ; case 0
|
||||
b _0200D6D0 ; case 1
|
||||
b _0200D6D0 ; case 2
|
||||
b _0200D6DC ; case 3
|
||||
b _0200D6DC ; case 4
|
||||
_0200D6D0:
|
||||
mov r0, r2
|
||||
bl GetDisplayedBuyPrice
|
||||
b _0200D6EC
|
||||
_0200D6DC:
|
||||
mov r0, r2
|
||||
bl GetDisplayedSellPrice
|
||||
b _0200D6EC
|
||||
_0200D6E8:
|
||||
mov r0, #0
|
||||
_0200D6EC:
|
||||
cmp r0, #0
|
||||
bne _0200D708
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
b _0200D75C
|
||||
_0200D708:
|
||||
ldrsh r1, [r4, #6]
|
||||
cmp r1, #0
|
||||
add r1, sp, #4
|
||||
beq _0200D740
|
||||
mov r2, #1
|
||||
bl sub_0200D76C
|
||||
add r0, sp, #4
|
||||
str r0, [sp]
|
||||
ldrsh r3, [r4, #6]
|
||||
ldr r1, _0200D764 ; =_02097FC4
|
||||
mov r0, r6
|
||||
mov r2, r5
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D75C
|
||||
_0200D740:
|
||||
mov r2, #0
|
||||
bl sub_0200D76C
|
||||
ldr r1, _0200D768 ; =_02097FE4
|
||||
add r3, sp, #4
|
||||
mov r0, r6
|
||||
mov r2, r5
|
||||
bl SprintfStatic__0200D634
|
||||
_0200D75C:
|
||||
add sp, sp, #0x2c
|
||||
ldmia sp!, {r3, r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0200D764: .word _02097FC4
|
||||
_0200D768: .word _02097FE4
|
||||
arm_func_end sub_0200D688
|
||||
|
||||
arm_func_start sub_0200D76C
|
||||
sub_0200D76C: ; 0x0200D76C
|
||||
#ifdef JAPAN
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r3, _0200D814 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov lr, #0
|
||||
ldr r4, [r3, #4]
|
||||
mov ip, lr
|
||||
mov r3, lr
|
||||
_0200D784:
|
||||
ldr r5, _0200D818 ; =_02094D0C
|
||||
mov r6, #0
|
||||
ldr r5, [r5, r3, lsl #2]
|
||||
b _0200D79C
|
||||
_0200D794:
|
||||
sub r0, r0, r5
|
||||
add r6, r6, #1
|
||||
_0200D79C:
|
||||
cmp r0, r5
|
||||
bge _0200D794
|
||||
cmp r6, #9
|
||||
movgt r6, #9
|
||||
cmp r6, #0
|
||||
beq _0200D7D8
|
||||
ldrb r5, [r4, r6, lsl #1]
|
||||
add r6, r4, r6, lsl #1
|
||||
add ip, ip, #1
|
||||
strb r5, [r1]
|
||||
ldrb r5, [r6, #1]
|
||||
mov lr, #1
|
||||
strb r5, [r1, #1]
|
||||
add r1, r1, #2
|
||||
b _0200D80C
|
||||
_0200D7D8:
|
||||
cmp lr, #0
|
||||
beq _0200D800
|
||||
ldrb r5, [r4, r6, lsl #1]
|
||||
add r6, r4, r6, lsl #1
|
||||
add ip, ip, #1
|
||||
strb r5, [r1]
|
||||
ldrb r5, [r6, #1]
|
||||
strb r5, [r1, #1]
|
||||
add r1, r1, #2
|
||||
b _0200D80C
|
||||
_0200D800:
|
||||
cmp r2, #0
|
||||
movne r5, #0x7f
|
||||
strneb r5, [r1], #1
|
||||
_0200D80C:
|
||||
add r3, r3, #1
|
||||
cmp r3, #5
|
||||
blt _0200D784
|
||||
ldr r2, _0200D814 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r3, #0
|
||||
ldr r2, [r2, #4]
|
||||
ldrb r4, [r2, r0, lsl #1]
|
||||
add r2, r2, r0, lsl #1
|
||||
add r0, ip, #1
|
||||
strb r4, [r1]
|
||||
ldrb r2, [r2, #1]
|
||||
strb r2, [r1, #1]
|
||||
strb r3, [r1, #2]
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
#else
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
ldr r3, _0200D814 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov ip, #0
|
||||
ldr lr, [r3, #4]
|
||||
ldr r8, _0200D818 ; =_02094D0C
|
||||
mov r3, ip
|
||||
mov sl, ip
|
||||
mov r7, #9
|
||||
mov r4, #0x7f
|
||||
mov r6, #1
|
||||
mov sb, ip
|
||||
_0200D798:
|
||||
mov r5, sb
|
||||
ldr fp, [r8, sl, lsl #2]
|
||||
b _0200D7AC
|
||||
_0200D7A4:
|
||||
sub r0, r0, fp
|
||||
add r5, r5, #1
|
||||
_0200D7AC:
|
||||
cmp r0, fp
|
||||
bge _0200D7A4
|
||||
cmp r5, #9
|
||||
movgt r5, r7
|
||||
cmp r5, #0
|
||||
ldrneb r5, [lr, r5]
|
||||
movne ip, r6
|
||||
addne r3, r3, #1
|
||||
strneb r5, [r1], #1
|
||||
bne _0200D7F0
|
||||
cmp ip, #0
|
||||
ldrneb r5, [lr, r5]
|
||||
addne r3, r3, #1
|
||||
strneb r5, [r1], #1
|
||||
bne _0200D7F0
|
||||
cmp r2, #0
|
||||
strneb r4, [r1], #1
|
||||
_0200D7F0:
|
||||
add sl, sl, #1
|
||||
cmp sl, #5
|
||||
blt _0200D798
|
||||
ldrb ip, [lr, r0]
|
||||
mov r2, #0
|
||||
add r0, r3, #1
|
||||
strb ip, [r1]
|
||||
strb r2, [r1, #1]
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
#endif
|
||||
.align 2, 0
|
||||
_0200D814: .word BAG_ITEMS_PTR_MIRROR
|
||||
_0200D818: .word _02094D0C
|
||||
arm_func_end sub_0200D76C
|
||||
@@ -1,790 +1,8 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_0200CAFC.inc"
|
||||
.include "main_0200D8E4.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start BulkItemToItem
|
||||
BulkItemToItem: ; 0x0200CFF0
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r4, r1
|
||||
ldrsh r1, [r4]
|
||||
mov r5, r0
|
||||
cmp r1, #0
|
||||
beq _0200D098
|
||||
mov r0, #1
|
||||
strb r0, [r5]
|
||||
ldrsh r1, [r4]
|
||||
mov r0, #0
|
||||
strh r1, [r5, #4]
|
||||
strb r0, [r5, #1]
|
||||
ldrsh r0, [r5, #4]
|
||||
bl IsThrownItem
|
||||
cmp r0, #0
|
||||
ldrneh r0, [r4, #2]
|
||||
strneh r0, [r5, #2]
|
||||
ldmneia sp!, {r3, r4, r5, pc}
|
||||
ldrsh r0, [r5, #4]
|
||||
bl GetItemCategory
|
||||
cmp r0, #0xe
|
||||
bgt _0200D078
|
||||
subs r1, r0, #6
|
||||
addpl pc, pc, r1, lsl #2
|
||||
b _0200D08C
|
||||
_0200D054: ; jump table
|
||||
b _0200D080 ; case 0
|
||||
b _0200D08C ; case 1
|
||||
b _0200D08C ; case 2
|
||||
b _0200D08C ; case 3
|
||||
b _0200D08C ; case 4
|
||||
b _0200D08C ; case 5
|
||||
b _0200D080 ; case 6
|
||||
b _0200D080 ; case 7
|
||||
b _0200D080 ; case 8
|
||||
_0200D078:
|
||||
cmp r0, #0xbb
|
||||
bne _0200D08C
|
||||
_0200D080:
|
||||
ldrh r0, [r4, #2]
|
||||
strh r0, [r5, #2]
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_0200D08C:
|
||||
mov r0, #0
|
||||
strh r0, [r5, #2]
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_0200D098:
|
||||
bl ItemZInit
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end BulkItemToItem
|
||||
|
||||
arm_func_start ItemToBulkItem
|
||||
ItemToBulkItem: ; 0x0200D0A0
|
||||
ldrb r2, [r1]
|
||||
tst r2, #1
|
||||
movne r2, #1
|
||||
moveq r2, #0
|
||||
tst r2, #0xff
|
||||
ldrnesh r2, [r1, #4]
|
||||
strneh r2, [r0]
|
||||
ldrneh r1, [r1, #2]
|
||||
moveq r1, #0
|
||||
streqh r1, [r0]
|
||||
strh r1, [r0, #2]
|
||||
bx lr
|
||||
arm_func_end ItemToBulkItem
|
||||
|
||||
arm_func_start GetDisplayedBuyPrice
|
||||
GetDisplayedBuyPrice: ; 0x0200D0D0
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
ldrsh r1, [r4, #4]
|
||||
cmp r1, #0xb7
|
||||
bne _0200D0EC
|
||||
bl GetMoneyQuantity
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200D0EC:
|
||||
mov r0, r1
|
||||
bl IsThrownItem
|
||||
cmp r0, #0
|
||||
ldrsh r0, [r4, #4]
|
||||
beq _0200D110
|
||||
bl GetItemBuyPrice
|
||||
ldrh r1, [r4, #2]
|
||||
mul r0, r1, r0
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200D110:
|
||||
bl GetItemBuyPrice
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end GetDisplayedBuyPrice
|
||||
|
||||
arm_func_start GetDisplayedSellPrice
|
||||
GetDisplayedSellPrice: ; 0x0200D118
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
ldrsh r1, [r4, #4]
|
||||
cmp r1, #0xb7
|
||||
bne _0200D134
|
||||
bl GetMoneyQuantity
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200D134:
|
||||
mov r0, r1
|
||||
bl IsThrownItem
|
||||
cmp r0, #0
|
||||
ldrsh r0, [r4, #4]
|
||||
beq _0200D158
|
||||
bl GetItemSellPrice
|
||||
ldrh r1, [r4, #2]
|
||||
mul r0, r1, r0
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200D158:
|
||||
bl GetItemSellPrice
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end GetDisplayedSellPrice
|
||||
|
||||
arm_func_start GetActualBuyPrice
|
||||
GetActualBuyPrice: ; 0x0200D160
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
ldrsh r0, [r4, #4]
|
||||
bl IsShoppableItem
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
ldrsh r0, [r4, #4]
|
||||
bl IsThrownItem
|
||||
cmp r0, #0
|
||||
ldrsh r0, [r4, #4]
|
||||
beq _0200D1A0
|
||||
bl GetItemBuyPrice
|
||||
ldrh r1, [r4, #2]
|
||||
mul r0, r1, r0
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200D1A0:
|
||||
bl GetItemBuyPrice
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end GetActualBuyPrice
|
||||
|
||||
arm_func_start GetActualSellPrice
|
||||
GetActualSellPrice: ; 0x0200D1A8
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
ldrsh r0, [r4, #4]
|
||||
bl IsShoppableItem
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
ldrsh r0, [r4, #4]
|
||||
bl IsThrownItem
|
||||
cmp r0, #0
|
||||
ldrsh r0, [r4, #4]
|
||||
beq _0200D1E8
|
||||
bl GetItemSellPrice
|
||||
ldrh r1, [r4, #2]
|
||||
mul r0, r1, r0
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200D1E8:
|
||||
bl GetItemSellPrice
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end GetActualSellPrice
|
||||
|
||||
arm_func_start sub_0200D1F0
|
||||
sub_0200D1F0: ; 0x0200D1F0
|
||||
ldr ip, _0200D1F8 ; =sub_0200EB64
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0200D1F8: .word sub_0200EB64
|
||||
arm_func_end sub_0200D1F0
|
||||
|
||||
arm_func_start sub_0200D1FC
|
||||
sub_0200D1FC: ; 0x0200D1FC
|
||||
ldr ip, _0200D204 ; =GetItemPaletteId
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0200D204: .word GetItemPaletteId
|
||||
arm_func_end sub_0200D1FC
|
||||
|
||||
arm_func_start sub_0200D208
|
||||
sub_0200D208: ; 0x0200D208
|
||||
ldr ip, _0200D210 ; =GetItemActionName
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0200D210: .word GetItemActionName
|
||||
arm_func_end sub_0200D208
|
||||
|
||||
arm_func_start sub_0200D214
|
||||
sub_0200D214: ; 0x0200D214
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
sub sp, sp, #0x58
|
||||
mov r5, r1
|
||||
mov r6, r0
|
||||
mov r0, r5
|
||||
mov r4, r2
|
||||
bl GetItemName
|
||||
mov r1, r0
|
||||
add r0, sp, #6
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
mov r2, #0
|
||||
mov r1, r5
|
||||
add r0, sp, #0
|
||||
mov r3, r2
|
||||
bl InitItem
|
||||
mov r1, #1
|
||||
strh r1, [sp, #2]
|
||||
mov r0, r6
|
||||
mov r3, r4
|
||||
add r1, sp, #6
|
||||
add r2, sp, #0
|
||||
bl sub_0200D688
|
||||
add sp, sp, #0x58
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end sub_0200D214
|
||||
|
||||
arm_func_start FindItemInInventory
|
||||
FindItemInInventory: ; 0x0200D278
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r1, _0200D30C ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r5, #0
|
||||
ldr r6, [r1]
|
||||
mov r3, r5
|
||||
mov ip, #1
|
||||
mov r1, #6
|
||||
b _0200D2D0
|
||||
_0200D298:
|
||||
mul lr, r5, r1
|
||||
ldr r4, [r6, #0x384]
|
||||
ldrb r2, [r4, lr]
|
||||
add r4, r4, lr
|
||||
tst r2, #1
|
||||
movne r2, ip
|
||||
moveq r2, r3
|
||||
tst r2, #0xff
|
||||
beq _0200D2CC
|
||||
ldrsh r2, [r4, #4]
|
||||
cmp r0, r2
|
||||
moveq r0, r5
|
||||
ldmeqia sp!, {r4, r5, r6, pc}
|
||||
_0200D2CC:
|
||||
add r5, r5, #1
|
||||
_0200D2D0:
|
||||
cmp r5, #0x32
|
||||
blt _0200D298
|
||||
mov r2, #0
|
||||
b _0200D2FC
|
||||
_0200D2E0:
|
||||
add r1, r6, r2, lsl #1
|
||||
add r1, r1, #0x300
|
||||
ldrsh r1, [r1, #0x8a]
|
||||
cmp r0, r1
|
||||
addeq r0, r2, #0x8000
|
||||
ldmeqia sp!, {r4, r5, r6, pc}
|
||||
add r2, r2, #1
|
||||
_0200D2FC:
|
||||
cmp r2, #0x3e8
|
||||
blt _0200D2E0
|
||||
mvn r0, #0
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0200D30C: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end FindItemInInventory
|
||||
|
||||
arm_func_start MaybeGetFormattedItemName
|
||||
MaybeGetFormattedItemName: ; 0x0200D310
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
sub sp, sp, #0xa0
|
||||
mov sb, r1
|
||||
mov sl, r0
|
||||
ldrsh r0, [sb, #4]
|
||||
mov r8, r2
|
||||
mov r7, r3
|
||||
mov r4, #0
|
||||
bl GetItemCategory
|
||||
mov r5, r4
|
||||
mov r6, r0
|
||||
cmp r8, #0
|
||||
ldrneb r0, [r8, #8]
|
||||
mov fp, r5
|
||||
cmpne r0, #0
|
||||
ldrsh r0, [sb, #4]
|
||||
movne r4, #1
|
||||
bl GetItemName
|
||||
mov r2, r0
|
||||
cmp r6, #0
|
||||
bne _0200D3B4
|
||||
cmp r4, #0
|
||||
add r0, sp, #0x50
|
||||
beq _0200D394
|
||||
cmp r7, #0
|
||||
ldrh r3, [sb, #2]
|
||||
beq _0200D388
|
||||
ldr r1, _0200D60C ; =_02097F34
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D388:
|
||||
ldr r1, _0200D610 ; =_02097F50
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D394:
|
||||
cmp r7, #0
|
||||
beq _0200D3A8
|
||||
ldr r1, _0200D614 ; =_02097F58
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D3A8:
|
||||
ldr r1, _0200D618 ; =_02097F68
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D3B4:
|
||||
cmp r6, #1
|
||||
bne _0200D40C
|
||||
cmp r4, #0
|
||||
add r0, sp, #0x50
|
||||
beq _0200D3EC
|
||||
cmp r7, #0
|
||||
ldrh r3, [sb, #2]
|
||||
beq _0200D3E0
|
||||
ldr r1, _0200D60C ; =_02097F34
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D3E0:
|
||||
ldr r1, _0200D610 ; =_02097F50
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D3EC:
|
||||
cmp r7, #0
|
||||
beq _0200D400
|
||||
ldr r1, _0200D614 ; =_02097F58
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D400:
|
||||
ldr r1, _0200D618 ; =_02097F68
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D40C:
|
||||
add r0, r6, #0xf4
|
||||
and r0, r0, #0xff
|
||||
cmp r0, #2
|
||||
bhi _0200D440
|
||||
cmp r7, #0
|
||||
add r0, sp, #0x50
|
||||
beq _0200D434
|
||||
ldr r1, _0200D61C ; =_02097F6C
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D434:
|
||||
mov r1, r2
|
||||
bl strcpy
|
||||
b _0200D4F8
|
||||
_0200D440:
|
||||
ldrsh r0, [sb, #4]
|
||||
cmp r0, #0xb7
|
||||
bne _0200D4AC
|
||||
mov r0, sb
|
||||
bl GetMoneyQuantity
|
||||
mov r1, r0
|
||||
add r0, sp, #0
|
||||
bl MoneyQuantityToString__02023B30
|
||||
cmp r7, #0
|
||||
add r0, sp, #0x50
|
||||
add r2, sp, #0
|
||||
beq _0200D47C
|
||||
ldr r1, _0200D620 ; =_02097F7C
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D484
|
||||
_0200D47C:
|
||||
ldr r1, _0200D624 ; =_02097F90
|
||||
bl SprintfStatic__0200D634
|
||||
_0200D484:
|
||||
cmp r7, #0
|
||||
add r0, sp, #0x50
|
||||
add r2, sp, #0
|
||||
beq _0200D4A0
|
||||
ldr r1, _0200D620 ; =_02097F7C
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D4A0:
|
||||
ldr r1, _0200D624 ; =_02097F90
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D4AC:
|
||||
cmp r6, #0xf
|
||||
add r0, sp, #0x50
|
||||
bne _0200D4D8
|
||||
cmp r7, #0
|
||||
beq _0200D4CC
|
||||
ldr r1, _0200D628 ; =_02097F9C
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D4CC:
|
||||
mov r1, r2
|
||||
bl strcpy
|
||||
b _0200D4F8
|
||||
_0200D4D8:
|
||||
cmp r7, #0
|
||||
beq _0200D4EC
|
||||
ldr r1, _0200D614 ; =_02097F58
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D4F8
|
||||
_0200D4EC:
|
||||
mov r1, r2
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
_0200D4F8:
|
||||
ldrb r0, [sb]
|
||||
tst r0, #8
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
tst r0, #0xff
|
||||
beq _0200D538
|
||||
ldr r1, _0200D62C ; =_02097FAC
|
||||
add r2, sp, #0x50
|
||||
mov r0, sl
|
||||
bl SprintfStatic__0200D634
|
||||
add r0, sp, #0x50
|
||||
mov r1, sl
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
mov fp, #1
|
||||
b _0200D564
|
||||
_0200D538:
|
||||
ldrb r0, [sp, #0xc8]
|
||||
cmp r0, #0
|
||||
beq _0200D564
|
||||
ldr r1, _0200D630 ; =_02097FB8
|
||||
add r2, sp, #0x50
|
||||
mov r0, sl
|
||||
bl SprintfStatic__0200D634
|
||||
add r0, sp, #0x50
|
||||
mov r1, sl
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
_0200D564:
|
||||
cmp r8, #0
|
||||
bne _0200D580
|
||||
add r1, sp, #0x50
|
||||
mov r0, sl
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
b _0200D600
|
||||
_0200D580:
|
||||
ldrb r0, [r8, #4]
|
||||
cmp r0, #0
|
||||
beq _0200D5AC
|
||||
ldrb r0, [sb]
|
||||
tst r0, #0x10
|
||||
beq _0200D5AC
|
||||
cmp fp, #0
|
||||
movne r0, #0x35
|
||||
strneb r0, [sp, #0x54]
|
||||
moveq r0, #0x32
|
||||
streqb r0, [sp, #0x54]
|
||||
_0200D5AC:
|
||||
ldr r0, [r8]
|
||||
add r1, sp, #0x50
|
||||
cmp r0, #1
|
||||
cmpne r0, #3
|
||||
bne _0200D5F0
|
||||
ldrb r0, [sb]
|
||||
tst r0, #2
|
||||
mov r0, sl
|
||||
beq _0200D5E4
|
||||
mov r2, sb
|
||||
mov r3, r8
|
||||
bl sub_0200D688
|
||||
mov r5, #1
|
||||
b _0200D600
|
||||
_0200D5E4:
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
b _0200D600
|
||||
_0200D5F0:
|
||||
mov r0, sl
|
||||
mov r2, sb
|
||||
mov r3, r8
|
||||
bl sub_0200D688
|
||||
_0200D600:
|
||||
mov r0, r5
|
||||
add sp, sp, #0xa0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_0200D60C: .word _02097F34
|
||||
_0200D610: .word _02097F50
|
||||
_0200D614: .word _02097F58
|
||||
_0200D618: .word _02097F68
|
||||
_0200D61C: .word _02097F6C
|
||||
_0200D620: .word _02097F7C
|
||||
_0200D624: .word _02097F90
|
||||
_0200D628: .word _02097F9C
|
||||
_0200D62C: .word _02097FAC
|
||||
_0200D630: .word _02097FB8
|
||||
arm_func_end MaybeGetFormattedItemName
|
||||
|
||||
arm_func_start SprintfStatic__0200D634
|
||||
SprintfStatic__0200D634: ; 0x0200D634
|
||||
stmdb sp!, {r0, r1, r2, r3}
|
||||
stmdb sp!, {r3, lr}
|
||||
add r2, sp, #0xc
|
||||
bic r2, r2, #3
|
||||
ldr r1, [sp, #0xc]
|
||||
add r2, r2, #4
|
||||
bl vsprintf
|
||||
ldmia sp!, {r3, lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
arm_func_end SprintfStatic__0200D634
|
||||
|
||||
arm_func_start MaybeGetUncoloredFormattedItemName
|
||||
MaybeGetUncoloredFormattedItemName: ; 0x0200D65C
|
||||
stmdb sp!, {r3, lr}
|
||||
mov r3, #0
|
||||
str r3, [sp]
|
||||
bl MaybeGetFormattedItemName
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end MaybeGetUncoloredFormattedItemName
|
||||
|
||||
arm_func_start MaybeGetColoredFormattedItemName
|
||||
MaybeGetColoredFormattedItemName: ; 0x0200D670
|
||||
stmdb sp!, {r3, lr}
|
||||
mov ip, #0
|
||||
mov r3, #1
|
||||
str ip, [sp]
|
||||
bl MaybeGetFormattedItemName
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end MaybeGetColoredFormattedItemName
|
||||
|
||||
arm_func_start sub_0200D688
|
||||
sub_0200D688: ; 0x0200D688
|
||||
stmdb sp!, {r3, r4, r5, r6, lr}
|
||||
sub sp, sp, #0x2c
|
||||
movs r4, r3
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
bne _0200D6AC
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
b _0200D75C
|
||||
_0200D6AC:
|
||||
ldr r0, [r4]
|
||||
cmp r0, #4
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _0200D6E8
|
||||
_0200D6BC: ; jump table
|
||||
b _0200D6E8 ; case 0
|
||||
b _0200D6D0 ; case 1
|
||||
b _0200D6D0 ; case 2
|
||||
b _0200D6DC ; case 3
|
||||
b _0200D6DC ; case 4
|
||||
_0200D6D0:
|
||||
mov r0, r2
|
||||
bl GetDisplayedBuyPrice
|
||||
b _0200D6EC
|
||||
_0200D6DC:
|
||||
mov r0, r2
|
||||
bl GetDisplayedSellPrice
|
||||
b _0200D6EC
|
||||
_0200D6E8:
|
||||
mov r0, #0
|
||||
_0200D6EC:
|
||||
cmp r0, #0
|
||||
bne _0200D708
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
mov r2, #0x50
|
||||
bl strncpy
|
||||
b _0200D75C
|
||||
_0200D708:
|
||||
ldrsh r1, [r4, #6]
|
||||
cmp r1, #0
|
||||
add r1, sp, #4
|
||||
beq _0200D740
|
||||
mov r2, #1
|
||||
bl sub_0200D76C
|
||||
add r0, sp, #4
|
||||
str r0, [sp]
|
||||
ldrsh r3, [r4, #6]
|
||||
ldr r1, _0200D764 ; =_02097FC4
|
||||
mov r0, r6
|
||||
mov r2, r5
|
||||
bl SprintfStatic__0200D634
|
||||
b _0200D75C
|
||||
_0200D740:
|
||||
mov r2, #0
|
||||
bl sub_0200D76C
|
||||
ldr r1, _0200D768 ; =_02097FE4
|
||||
add r3, sp, #4
|
||||
mov r0, r6
|
||||
mov r2, r5
|
||||
bl SprintfStatic__0200D634
|
||||
_0200D75C:
|
||||
add sp, sp, #0x2c
|
||||
ldmia sp!, {r3, r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0200D764: .word _02097FC4
|
||||
_0200D768: .word _02097FE4
|
||||
arm_func_end sub_0200D688
|
||||
|
||||
arm_func_start sub_0200D76C
|
||||
sub_0200D76C: ; 0x0200D76C
|
||||
#ifdef JAPAN
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r3, _0200D814 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov lr, #0
|
||||
ldr r4, [r3, #4]
|
||||
mov ip, lr
|
||||
mov r3, lr
|
||||
_0200D784:
|
||||
ldr r5, _0200D818 ; =_02094D0C
|
||||
mov r6, #0
|
||||
ldr r5, [r5, r3, lsl #2]
|
||||
b _0200D79C
|
||||
_0200D794:
|
||||
sub r0, r0, r5
|
||||
add r6, r6, #1
|
||||
_0200D79C:
|
||||
cmp r0, r5
|
||||
bge _0200D794
|
||||
cmp r6, #9
|
||||
movgt r6, #9
|
||||
cmp r6, #0
|
||||
beq _0200D7D8
|
||||
ldrb r5, [r4, r6, lsl #1]
|
||||
add r6, r4, r6, lsl #1
|
||||
add ip, ip, #1
|
||||
strb r5, [r1]
|
||||
ldrb r5, [r6, #1]
|
||||
mov lr, #1
|
||||
strb r5, [r1, #1]
|
||||
add r1, r1, #2
|
||||
b _0200D80C
|
||||
_0200D7D8:
|
||||
cmp lr, #0
|
||||
beq _0200D800
|
||||
ldrb r5, [r4, r6, lsl #1]
|
||||
add r6, r4, r6, lsl #1
|
||||
add ip, ip, #1
|
||||
strb r5, [r1]
|
||||
ldrb r5, [r6, #1]
|
||||
strb r5, [r1, #1]
|
||||
add r1, r1, #2
|
||||
b _0200D80C
|
||||
_0200D800:
|
||||
cmp r2, #0
|
||||
movne r5, #0x7f
|
||||
strneb r5, [r1], #1
|
||||
_0200D80C:
|
||||
add r3, r3, #1
|
||||
cmp r3, #5
|
||||
blt _0200D784
|
||||
ldr r2, _0200D814 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r3, #0
|
||||
ldr r2, [r2, #4]
|
||||
ldrb r4, [r2, r0, lsl #1]
|
||||
add r2, r2, r0, lsl #1
|
||||
add r0, ip, #1
|
||||
strb r4, [r1]
|
||||
ldrb r2, [r2, #1]
|
||||
strb r2, [r1, #1]
|
||||
strb r3, [r1, #2]
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
#else
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
ldr r3, _0200D814 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov ip, #0
|
||||
ldr lr, [r3, #4]
|
||||
ldr r8, _0200D818 ; =_02094D0C
|
||||
mov r3, ip
|
||||
mov sl, ip
|
||||
mov r7, #9
|
||||
mov r4, #0x7f
|
||||
mov r6, #1
|
||||
mov sb, ip
|
||||
_0200D798:
|
||||
mov r5, sb
|
||||
ldr fp, [r8, sl, lsl #2]
|
||||
b _0200D7AC
|
||||
_0200D7A4:
|
||||
sub r0, r0, fp
|
||||
add r5, r5, #1
|
||||
_0200D7AC:
|
||||
cmp r0, fp
|
||||
bge _0200D7A4
|
||||
cmp r5, #9
|
||||
movgt r5, r7
|
||||
cmp r5, #0
|
||||
ldrneb r5, [lr, r5]
|
||||
movne ip, r6
|
||||
addne r3, r3, #1
|
||||
strneb r5, [r1], #1
|
||||
bne _0200D7F0
|
||||
cmp ip, #0
|
||||
ldrneb r5, [lr, r5]
|
||||
addne r3, r3, #1
|
||||
strneb r5, [r1], #1
|
||||
bne _0200D7F0
|
||||
cmp r2, #0
|
||||
strneb r4, [r1], #1
|
||||
_0200D7F0:
|
||||
add sl, sl, #1
|
||||
cmp sl, #5
|
||||
blt _0200D798
|
||||
ldrb ip, [lr, r0]
|
||||
mov r2, #0
|
||||
add r0, r3, #1
|
||||
strb ip, [r1]
|
||||
strb r2, [r1, #1]
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
#endif
|
||||
.align 2, 0
|
||||
_0200D814: .word BAG_ITEMS_PTR_MIRROR
|
||||
_0200D818: .word _02094D0C
|
||||
arm_func_end sub_0200D76C
|
||||
|
||||
arm_func_start ItemZInit
|
||||
ItemZInit: ; 0x0200D81C
|
||||
mov r1, #0
|
||||
strh r1, [r0, #4]
|
||||
strh r1, [r0, #2]
|
||||
strb r1, [r0]
|
||||
strb r1, [r0, #1]
|
||||
bx lr
|
||||
arm_func_end ItemZInit
|
||||
|
||||
arm_func_start AreItemsEquivalent
|
||||
AreItemsEquivalent: ; 0x0200D834
|
||||
ldrb ip, [r0]
|
||||
ldrb r3, [r1]
|
||||
and ip, ip, r2
|
||||
and r2, r3, r2
|
||||
cmp ip, r2
|
||||
movne r0, #0
|
||||
bxne lr
|
||||
ldrb r3, [r0, #1]
|
||||
ldrb r2, [r1, #1]
|
||||
cmp r3, r2
|
||||
movne r0, #0
|
||||
bxne lr
|
||||
ldrh r3, [r0, #2]
|
||||
ldrh r2, [r1, #2]
|
||||
cmp r3, r2
|
||||
movne r0, #0
|
||||
bxne lr
|
||||
ldrsh r2, [r0, #4]
|
||||
ldrsh r0, [r1, #4]
|
||||
cmp r2, r0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
arm_func_end AreItemsEquivalent
|
||||
|
||||
arm_func_start sub_0200D894
|
||||
sub_0200D894: ; 0x0200D894
|
||||
mov r1, #0
|
||||
strb r1, [r0, #1]
|
||||
ldrb r1, [r0]
|
||||
bic r1, r1, #0x18
|
||||
strb r1, [r0]
|
||||
bx lr
|
||||
arm_func_end sub_0200D894
|
||||
|
||||
arm_func_start GetMoneyQuantity
|
||||
GetMoneyQuantity: ; 0x0200D8AC
|
||||
stmdb sp!, {r3, lr}
|
||||
ldrb r1, [r0]
|
||||
ldrh r2, [r0, #2]
|
||||
ldr r0, _0200D8DC ; =MONEY_QUANTITY_TABLE
|
||||
tst r1, #0x20
|
||||
ldr r0, [r0, r2, lsl #2]
|
||||
ldmeqia sp!, {r3, pc}
|
||||
ldr r1, _0200D8E0 ; =0x00000133
|
||||
mov r0, r0, lsl #8
|
||||
bl MultiplyByFixedPoint
|
||||
mov r0, r0, asr #8
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_0200D8DC: .word MONEY_QUANTITY_TABLE
|
||||
_0200D8E0: .word 0x00000133
|
||||
arm_func_end GetMoneyQuantity
|
||||
|
||||
arm_func_start sub_0200D8E4
|
||||
sub_0200D8E4: ; 0x0200D8E4
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
@@ -1728,6 +946,7 @@ _0200E5F4:
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
arm_func_end SortItemList
|
||||
|
||||
; https://decomp.me/scratch/3UbRu
|
||||
arm_func_start RemoveEmptyItems
|
||||
RemoveEmptyItems: ; 0x0200E610
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
@@ -19,26 +19,3 @@ sub_0200EB64: ; 0x0200EB64
|
||||
_0200EB88: .word ITEM_DATA_TABLE_PTRS
|
||||
_0200EB8C: .word 0x000007FF
|
||||
arm_func_end sub_0200EB64
|
||||
|
||||
arm_func_start ReturnEggExclusiveItem
|
||||
ReturnEggExclusiveItem: ; 0x0200EB90
|
||||
mov ip, #0
|
||||
ldr r2, _0200EBC8 ; =BABY_EXCLUSIVE_ITEM_PAIRS
|
||||
b _0200EBB8
|
||||
_0200EB9C:
|
||||
add r1, r2, ip, lsl #2
|
||||
ldrsh r1, [r1, #2]
|
||||
mov r3, ip, lsl #2
|
||||
cmp r0, r1
|
||||
ldreqsh r0, [r2, r3]
|
||||
bxeq lr
|
||||
add ip, ip, #1
|
||||
_0200EBB8:
|
||||
cmp ip, #0x10
|
||||
blt _0200EB9C
|
||||
mov r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200EBC8: .word BABY_EXCLUSIVE_ITEM_PAIRS
|
||||
arm_func_end ReturnEggExclusiveItem
|
||||
|
||||
|
||||
59
asm/main_02015090.s
Normal file
59
asm/main_02015090.s
Normal file
@@ -0,0 +1,59 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_02015090.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start sub_02015090
|
||||
sub_02015090: ; 0x02015090
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r4, #0
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
mov lr, r4
|
||||
mov r2, r4
|
||||
mov r3, #1
|
||||
mov r0, #6
|
||||
b _020150E0
|
||||
_020150B4:
|
||||
mul ip, lr, r0
|
||||
ldrb r1, [r6, ip]
|
||||
add lr, lr, #1
|
||||
tst r1, #1
|
||||
movne r1, r3
|
||||
moveq r1, r2
|
||||
tst r1, #0xff
|
||||
ldrneb r1, [r6, ip]
|
||||
addne r4, r4, #1
|
||||
bicne r1, r1, #2
|
||||
strneb r1, [r6, ip]
|
||||
_020150E0:
|
||||
cmp lr, r5
|
||||
blt _020150B4
|
||||
bl Rand16Bit
|
||||
mov r1, r4
|
||||
bl _s32_div_f
|
||||
mov r0, #6
|
||||
mla r0, r1, r0, r6
|
||||
ldrh r0, [r0, #2]
|
||||
sub r3, r5, #1
|
||||
mov r2, #6
|
||||
b _02015130
|
||||
_0201510C:
|
||||
mul r5, r1, r2
|
||||
add ip, r6, r5
|
||||
ldrh r4, [ip, #6]
|
||||
add r1, r1, #1
|
||||
strh r4, [r6, r5]
|
||||
ldrh r4, [ip, #8]
|
||||
strh r4, [ip, #2]
|
||||
ldrh r4, [ip, #0xa]
|
||||
strh r4, [ip, #4]
|
||||
_02015130:
|
||||
cmp r1, r3
|
||||
blt _0201510C
|
||||
mov r1, #6
|
||||
mul r1, r3, r1
|
||||
mov r2, #0
|
||||
strb r2, [r6, r1]
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end sub_02015090
|
||||
@@ -1,399 +1,8 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_02014D18.inc"
|
||||
.include "main_020151E4.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start IsPunchMove
|
||||
IsPunchMove: ; 0x02014D18
|
||||
mov r3, #0
|
||||
ldr r2, _02014D54 ; =PUNCH_MOVE_LIST
|
||||
b _02014D3C
|
||||
_02014D24:
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
add r1, r3, #1
|
||||
mov r1, r1, lsl #0x10
|
||||
mov r3, r1, asr #0x10
|
||||
_02014D3C:
|
||||
mov r1, r3, lsl #1
|
||||
ldrh r1, [r2, r1]
|
||||
cmp r1, #0
|
||||
bne _02014D24
|
||||
mov r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02014D54: .word PUNCH_MOVE_LIST
|
||||
arm_func_end IsPunchMove
|
||||
|
||||
arm_func_start IsHealingWishOrLunarDance
|
||||
IsHealingWishOrLunarDance: ; 0x02014D58
|
||||
ldr r1, _02014D80 ; =0x000001B7
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
add r1, r1, #0x57
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02014D80: .word 0x000001B7
|
||||
arm_func_end IsHealingWishOrLunarDance
|
||||
|
||||
arm_func_start IsCopyingMove
|
||||
IsCopyingMove: ; 0x02014D84
|
||||
ldr r1, _02014DB8 ; =0x00000147
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
cmp r0, #0x8a
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
add r1, r1, #0xc6
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02014DB8: .word 0x00000147
|
||||
arm_func_end IsCopyingMove
|
||||
|
||||
arm_func_start IsTrappingMove
|
||||
IsTrappingMove: ; 0x02014DBC
|
||||
ldr r1, _02014DFC ; =0x00000127
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
cmp r0, #0x1f0
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
cmp r0, #0x1e0
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
add r1, r1, #0x6a
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02014DFC: .word 0x00000127
|
||||
arm_func_end IsTrappingMove
|
||||
|
||||
arm_func_start IsOneHitKoMove
|
||||
IsOneHitKoMove: ; 0x02014E00
|
||||
cmp r0, #0x83
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
cmp r0, #0x96
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
cmp r0, #0xb1
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
cmp r0, #0xf7
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
arm_func_end IsOneHitKoMove
|
||||
|
||||
arm_func_start IsNot2TurnsMoveOrSketch
|
||||
IsNot2TurnsMoveOrSketch: ; 0x02014E38
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
bl Is2TurnsMove
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
ldmneia sp!, {r4, pc}
|
||||
cmp r4, #0x8a
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end IsNot2TurnsMoveOrSketch
|
||||
|
||||
arm_func_start IsRealMove
|
||||
IsRealMove: ; 0x02014E64
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
ldr r1, _02014EEC ; =0x000001D3
|
||||
cmp r0, r1
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
cmp r0, #0x160
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
sub r1, r1, #0x70
|
||||
cmp r0, r1
|
||||
blo _02014EA4
|
||||
cmp r0, #0x168
|
||||
movlo r0, #0
|
||||
bxlo lr
|
||||
_02014EA4:
|
||||
cmp r0, #0x168
|
||||
bls _02014EBC
|
||||
ldr r1, _02014EF0 ; =0x0000018A
|
||||
cmp r0, r1
|
||||
movlo r0, #0
|
||||
bxlo lr
|
||||
_02014EBC:
|
||||
ldr r1, _02014EF0 ; =0x0000018A
|
||||
cmp r0, r1
|
||||
bls _02014ED8
|
||||
add r1, r1, #0x23
|
||||
cmp r0, r1
|
||||
movls r0, #0
|
||||
bxls lr
|
||||
_02014ED8:
|
||||
ldr r1, _02014EF4 ; =0x0000021F
|
||||
cmp r0, r1
|
||||
movhs r0, #0
|
||||
movlo r0, #1
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02014EEC: .word 0x000001D3
|
||||
_02014EF0: .word 0x0000018A
|
||||
_02014EF4: .word 0x0000021F
|
||||
arm_func_end IsRealMove
|
||||
|
||||
arm_func_start IsMovesetValid
|
||||
IsMovesetValid: ; 0x02014EF8
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r8, #0
|
||||
mov r4, r0
|
||||
mov r6, r8
|
||||
mov r7, #1
|
||||
mov r5, #6
|
||||
b _02014F54
|
||||
_02014F14:
|
||||
smulbb r1, r8, r5
|
||||
ldrb r0, [r4, r1]
|
||||
add r1, r4, r1
|
||||
tst r0, #1
|
||||
movne r0, r7
|
||||
moveq r0, r6
|
||||
tst r0, #0xff
|
||||
beq _02014F48
|
||||
ldrh r0, [r1, #2]
|
||||
bl IsRealMove
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
_02014F48:
|
||||
add r0, r8, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r8, r0, asr #0x10
|
||||
_02014F54:
|
||||
cmp r8, #4
|
||||
blt _02014F14
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
arm_func_end IsMovesetValid
|
||||
|
||||
arm_func_start IsRealMoveInTimeDarkness
|
||||
IsRealMoveInTimeDarkness: ; 0x02014F64
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
ldr r1, _02014FF8 ; =0x000001D3
|
||||
cmp r0, r1
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
cmp r0, #0x1d4
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
cmp r0, #0x160
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
sub r1, r1, #0x70
|
||||
cmp r0, r1
|
||||
blo _02014FB0
|
||||
cmp r0, #0x168
|
||||
movlo r0, #0
|
||||
bxlo lr
|
||||
_02014FB0:
|
||||
cmp r0, #0x168
|
||||
bls _02014FC8
|
||||
ldr r1, _02014FFC ; =0x0000018A
|
||||
cmp r0, r1
|
||||
movlo r0, #0
|
||||
bxlo lr
|
||||
_02014FC8:
|
||||
ldr r1, _02014FFC ; =0x0000018A
|
||||
cmp r0, r1
|
||||
bls _02014FE4
|
||||
add r1, r1, #0x23
|
||||
cmp r0, r1
|
||||
movls r0, #0
|
||||
bxls lr
|
||||
_02014FE4:
|
||||
ldr r1, _02015000 ; =0x0000021F
|
||||
cmp r0, r1
|
||||
movhs r0, #0
|
||||
movlo r0, #1
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02014FF8: .word 0x000001D3
|
||||
_02014FFC: .word 0x0000018A
|
||||
_02015000: .word 0x0000021F
|
||||
arm_func_end IsRealMoveInTimeDarkness
|
||||
|
||||
arm_func_start IsMovesetValidInTimeDarkness
|
||||
IsMovesetValidInTimeDarkness: ; 0x02015004
|
||||
stmdb sp!, {r3, lr}
|
||||
bl GetFirstNotRealMoveInTimeDarkness
|
||||
mvn r1, #0
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end IsMovesetValidInTimeDarkness
|
||||
|
||||
arm_func_start GetFirstNotRealMoveInTimeDarkness
|
||||
GetFirstNotRealMoveInTimeDarkness: ; 0x02015024
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r8, #0
|
||||
mov r4, r0
|
||||
mov r6, r8
|
||||
mov r7, #1
|
||||
mov r5, #6
|
||||
b _02015080
|
||||
_02015040:
|
||||
smulbb r1, r8, r5
|
||||
ldrb r0, [r4, r1]
|
||||
add r1, r4, r1
|
||||
tst r0, #1
|
||||
movne r0, r7
|
||||
moveq r0, r6
|
||||
tst r0, #0xff
|
||||
beq _02015074
|
||||
ldrh r0, [r1, #2]
|
||||
bl IsRealMoveInTimeDarkness
|
||||
cmp r0, #0
|
||||
moveq r0, r8
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
_02015074:
|
||||
add r0, r8, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r8, r0, asr #0x10
|
||||
_02015080:
|
||||
cmp r8, #4
|
||||
blt _02015040
|
||||
mvn r0, #0
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
arm_func_end GetFirstNotRealMoveInTimeDarkness
|
||||
|
||||
arm_func_start sub_02015090
|
||||
sub_02015090: ; 0x02015090
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r4, #0
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
mov lr, r4
|
||||
mov r2, r4
|
||||
mov r3, #1
|
||||
mov r0, #6
|
||||
b _020150E0
|
||||
_020150B4:
|
||||
mul ip, lr, r0
|
||||
ldrb r1, [r6, ip]
|
||||
add lr, lr, #1
|
||||
tst r1, #1
|
||||
movne r1, r3
|
||||
moveq r1, r2
|
||||
tst r1, #0xff
|
||||
ldrneb r1, [r6, ip]
|
||||
addne r4, r4, #1
|
||||
bicne r1, r1, #2
|
||||
strneb r1, [r6, ip]
|
||||
_020150E0:
|
||||
cmp lr, r5
|
||||
blt _020150B4
|
||||
bl Rand16Bit
|
||||
mov r1, r4
|
||||
bl _s32_div_f
|
||||
mov r0, #6
|
||||
mla r0, r1, r0, r6
|
||||
ldrh r0, [r0, #2]
|
||||
sub r3, r5, #1
|
||||
mov r2, #6
|
||||
b _02015130
|
||||
_0201510C:
|
||||
mul r5, r1, r2
|
||||
add ip, r6, r5
|
||||
ldrh r4, [ip, #6]
|
||||
add r1, r1, #1
|
||||
strh r4, [r6, r5]
|
||||
ldrh r4, [ip, #8]
|
||||
strh r4, [ip, #2]
|
||||
ldrh r4, [ip, #0xa]
|
||||
strh r4, [ip, #4]
|
||||
_02015130:
|
||||
cmp r1, r3
|
||||
blt _0201510C
|
||||
mov r1, #6
|
||||
mul r1, r3, r1
|
||||
mov r2, #0
|
||||
strb r2, [r6, r1]
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end sub_02015090
|
||||
|
||||
arm_func_start IsSameMove
|
||||
IsSameMove: ; 0x0201514C
|
||||
stmdb sp!, {r4, lr}
|
||||
ldrb r2, [r1]
|
||||
tst r2, #1
|
||||
movne r2, #1
|
||||
moveq r2, #0
|
||||
tst r2, #0xff
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
mov r4, #0
|
||||
mov ip, r4
|
||||
mov lr, #1
|
||||
b _020151B8
|
||||
_0201517C:
|
||||
ldrb r2, [r0, r4, lsl #3]
|
||||
tst r2, #1
|
||||
movne r2, lr
|
||||
moveq r2, ip
|
||||
tst r2, #0xff
|
||||
beq _020151C0
|
||||
add r2, r0, r4, lsl #3
|
||||
ldrh r3, [r1, #4]
|
||||
ldrh r2, [r2, #4]
|
||||
cmp r3, r2
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r4, pc}
|
||||
add r2, r4, #1
|
||||
mov r2, r2, lsl #0x10
|
||||
mov r4, r2, asr #0x10
|
||||
_020151B8:
|
||||
cmp r4, #4
|
||||
blt _0201517C
|
||||
_020151C0:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end IsSameMove
|
||||
|
||||
arm_func_start GetMoveCategory
|
||||
GetMoveCategory: ; 0x020151C8
|
||||
ldr r2, _020151E0 ; =DUNGEON_MOVE_TABLES
|
||||
mov r1, #0x1a
|
||||
ldr r2, [r2, #8]
|
||||
mla r1, r0, r1, r2
|
||||
ldrb r0, [r1, #3]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_020151E0: .word DUNGEON_MOVE_TABLES
|
||||
arm_func_end GetMoveCategory
|
||||
|
||||
arm_func_start GetPpIncrease
|
||||
GetPpIncrease: ; 0x020151E4
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
@@ -1,59 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_02054AD4.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start IsCastform
|
||||
IsCastform: ; 0x02054AD4
|
||||
ldr r2, _02054B24 ; =0x0000017B
|
||||
cmp r0, r2
|
||||
cmpne r0, #0x17c
|
||||
addne r1, r2, #2
|
||||
cmpne r0, r1
|
||||
addne r1, r2, #3
|
||||
cmpne r0, r1
|
||||
beq _02054B14
|
||||
ldr r1, _02054B28 ; =0xFFFFFC2D
|
||||
add r0, r0, r1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r0, r0, asr #0x10
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r0, r0, lsr #0x10
|
||||
cmp r0, #3
|
||||
bhi _02054B1C
|
||||
_02054B14:
|
||||
mov r0, #1
|
||||
bx lr
|
||||
_02054B1C:
|
||||
mov r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02054B24: .word 0x0000017B
|
||||
_02054B28: .word 0xFFFFFC2D
|
||||
arm_func_end IsCastform
|
||||
|
||||
arm_func_start IsCherrim
|
||||
IsCherrim: ; 0x02054B2C
|
||||
cmp r0, #0x1cc
|
||||
ldrne r1, _02054B6C ; =0x000001CD
|
||||
cmpne r0, r1
|
||||
beq _02054B5C
|
||||
ldr r1, _02054B70 ; =0xFFFFFBDC
|
||||
add r0, r0, r1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r0, r0, asr #0x10
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r0, r0, lsr #0x10
|
||||
cmp r0, #1
|
||||
bhi _02054B64
|
||||
_02054B5C:
|
||||
mov r0, #1
|
||||
bx lr
|
||||
_02054B64:
|
||||
mov r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02054B6C: .word 0x000001CD
|
||||
_02054B70: .word 0xFFFFFBDC
|
||||
arm_func_end IsCherrim
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_02054CD8.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start BaseFormsEqual
|
||||
BaseFormsEqual: ; 0x02054CD8
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r4, r1
|
||||
bl FemaleToMaleForm
|
||||
mov r5, r0
|
||||
mov r0, r4
|
||||
bl FemaleToMaleForm
|
||||
mov r4, r0
|
||||
mov r0, r5
|
||||
bl GetBaseFormCastformDeoxysCherrim
|
||||
mov r5, r0
|
||||
mov r0, r4
|
||||
bl GetBaseFormCastformDeoxysCherrim
|
||||
mov r6, r0
|
||||
cmp r5, r6
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r4, r5, r6, pc}
|
||||
mov r0, r5
|
||||
bl IsUnown
|
||||
cmp r0, #0
|
||||
beq _02054D3C
|
||||
mov r0, r6
|
||||
bl IsUnown
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
_02054D3C:
|
||||
mov r0, r5
|
||||
bl GetBaseFormBurmyWormadamShellosGastrodonCherrim
|
||||
mov r4, r0
|
||||
mov r0, r6
|
||||
bl GetBaseFormBurmyWormadamShellosGastrodonCherrim
|
||||
ldr r1, _02054DB8 ; =0x000001BF
|
||||
cmp r4, r1
|
||||
cmpeq r0, r1
|
||||
beq _02054D8C
|
||||
ldr r1, _02054DBC ; =0x000001C2
|
||||
cmp r4, r1
|
||||
cmpeq r0, r1
|
||||
beq _02054D8C
|
||||
ldr r1, _02054DC0 ; =0x000001CE
|
||||
cmp r4, r1
|
||||
cmpeq r0, r1
|
||||
beq _02054D8C
|
||||
cmp r4, #0x1d0
|
||||
cmpeq r0, #0x1d0
|
||||
bne _02054D94
|
||||
_02054D8C:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
_02054D94:
|
||||
mov r0, r5
|
||||
bl GetDexNumber
|
||||
mov r4, r0
|
||||
mov r0, r6
|
||||
bl GetDexNumber
|
||||
cmp r4, r0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_02054DB8: .word 0x000001BF
|
||||
_02054DBC: .word 0x000001C2
|
||||
_02054DC0: .word 0x000001CE
|
||||
arm_func_end BaseFormsEqual
|
||||
@@ -6,6 +6,11 @@
|
||||
|
||||
#define MAX_GROUND_TEAM_MEMBERS 555
|
||||
|
||||
struct baby_exclusive_item_pair {
|
||||
s16 exc_item_id;
|
||||
s16 baby_monster;
|
||||
};
|
||||
|
||||
struct ground_move {
|
||||
// 0x0: flags: 1-byte bitfield
|
||||
// See move::flags0 for details
|
||||
|
||||
@@ -1435,6 +1435,7 @@ enum item_flag {
|
||||
ITEM_FLAG_UNPAID = 1 << 2, // Picked up in Kecleon shop but not paid for yet
|
||||
ITEM_FLAG_STICKY = 1 << 3,
|
||||
ITEM_FLAG_SET = 1 << 4, // This item can be thrown by pressing L+R instead of having to go to the bag menu.
|
||||
ITEM_FLAG_UNK_MONEY_QUANTITY = 1 << 5, // Something related to money quantity
|
||||
ITEM_FLAG_UNK_MISSION_ITEM_1 = 1 << 6,
|
||||
ITEM_FLAG_UNK_MISSION_ITEM_2 = 1 << 7
|
||||
};
|
||||
|
||||
@@ -14,6 +14,12 @@ void InitItem(struct item* item, s16 id, s16 quantity, bool8 isSticky);
|
||||
void InitStandardItem(struct item* item, s16 id, bool8 isSticky);
|
||||
void sub_0200CF6C(struct item* item, s16 id, s16 quantity, bool8 isSticky);
|
||||
void InitBulkItem(struct bulk_item* item, s16 id);
|
||||
void BulkItemToItem(struct item* item, struct bulk_item* bulk_item);
|
||||
void ItemToBulkItem(struct bulk_item* bulk, struct item* item);
|
||||
s32 GetDisplayedBuyPrice(struct item* item);
|
||||
s32 GetDisplayedSellPrice(struct item* item);
|
||||
s32 GetActualBuyPrice(struct item* item);
|
||||
s32 GetActualSellPrice(struct item* item);
|
||||
|
||||
#endif //PMDSKY_ITEM_UTIL_4_H
|
||||
|
||||
|
||||
9
include/main_02001A54.h
Normal file
9
include/main_02001A54.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#ifndef PMDSKY_MAIN_02001A54_H
|
||||
#define PMDSKY_MAIN_02001A54_H
|
||||
|
||||
#include "util.h"
|
||||
|
||||
s32 MultiplyByFixedPoint(s32 x, s32 y);
|
||||
s32 sub_02001AB0(s32 x, s32 y);
|
||||
|
||||
#endif //PMDSKY_MAIN_02001A54_H
|
||||
9
include/main_02001BB4.h
Normal file
9
include/main_02001BB4.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#ifndef PMDSKY_MAIN_02001BB4_H
|
||||
#define PMDSKY_MAIN_02001BB4_H
|
||||
|
||||
#include "util.h"
|
||||
|
||||
u32 sub_02001BB4(s32 x, s32 y);
|
||||
void IntToFixedPoint64(struct fixed_point_64* out, s32 x);
|
||||
|
||||
#endif //PMDSKY_MAIN_02001BB4_H
|
||||
11
include/main_02001CD4.h
Normal file
11
include/main_02001CD4.h
Normal file
@@ -0,0 +1,11 @@
|
||||
#ifndef PMDSKY_MAIN_02001CD4_H
|
||||
#define PMDSKY_MAIN_02001CD4_H
|
||||
|
||||
#include "util.h"
|
||||
|
||||
void FixedPoint32To64(struct fixed_point_64* out, s32 x);
|
||||
void NegateFixedPoint64(struct fixed_point_64* x);
|
||||
bool8 FixedPoint64IsZero(struct fixed_point_64* x);
|
||||
bool8 FixedPoint64IsNegative(struct fixed_point_64* x);
|
||||
|
||||
#endif //PMDSKY_MAIN_02001CD4_H
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef PMDSKY_MAIN_0200224C_H
|
||||
#define PMDSKY_MAIN_0200224C_H
|
||||
|
||||
u16 GetRngSeed(void);
|
||||
void SetRngSeed(u16 seed);
|
||||
u16 Rand16Bit();
|
||||
u32 RandInt(u32 n);
|
||||
s32 RandRange(s32 x, s32 y);
|
||||
|
||||
11
include/main_0200D81C.h
Normal file
11
include/main_0200D81C.h
Normal file
@@ -0,0 +1,11 @@
|
||||
#ifndef PMDSKY_MAIN_0200D81C_H
|
||||
#define PMDSKY_MAIN_0200D81C_H
|
||||
|
||||
#include "item.h"
|
||||
|
||||
void ItemZInit(struct item* item);
|
||||
bool8 AreItemsEquivalent(struct item* item1, struct item* item2, s32 bitmask);
|
||||
void sub_0200D894(struct item* item);
|
||||
s32 GetMoneyQuantity(struct item* item);
|
||||
|
||||
#endif //PMDSKY_MAIN_0200D81C_H
|
||||
@@ -1,6 +1,11 @@
|
||||
#ifndef PMDSKY_MAIN_0200ECFC_H
|
||||
#define PMDSKY_MAIN_0200ECFC_H
|
||||
|
||||
#include "common.h"
|
||||
#include "enums.h"
|
||||
|
||||
s16 ReturnEggExclusiveItem(enum monster_id monster_id);
|
||||
|
||||
// Set the active inventory to the main inventory
|
||||
void SetActiveInventoryToMain(void);
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef PMDSKY_MAIN_02014CEC_H
|
||||
#define PMDSKY_MAIN_02014CEC_H
|
||||
|
||||
#include "common.h"
|
||||
#include "enums.h"
|
||||
#include "util.h"
|
||||
|
||||
@@ -10,4 +11,28 @@ bool8 IsRegularAttackOrProjectile(enum move_id move_id);
|
||||
// Checks if the move is a two turn move
|
||||
bool8 Is2TurnsMove(enum move_id move_id);
|
||||
|
||||
// Checks if the move is a punch move
|
||||
bool8 IsPunchMove(enum move_id move_id);
|
||||
|
||||
// Checks if the move is a Healing Wish or Lunar Dance
|
||||
bool8 IsHealingWishOrLunarDance(enum move_id move_id);
|
||||
|
||||
// Checks if the move is a copying move
|
||||
bool8 IsCopyingMove(enum move_id move_id);
|
||||
|
||||
// Checks if the move is a trapping move
|
||||
bool8 IsTrappingMove(enum move_id move_id);
|
||||
|
||||
// Checks if the move is a one hit KO move
|
||||
bool8 IsOneHitKoMove(enum move_id move_id);
|
||||
|
||||
// Checks if the move is not a two turn move or sketch
|
||||
bool8 IsNot2TurnsMoveOrSketch(enum move_id move_id);
|
||||
|
||||
bool8 IsRealMove(enum move_id move_id);
|
||||
bool8 IsMovesetValid(struct ground_move* move);
|
||||
bool8 IsRealMoveInTimeDarkness(enum move_id move_id);
|
||||
bool8 IsMovesetValidInTimeDarkness(struct ground_move* moveset);
|
||||
s32 GetFirstNotRealMoveInTimeDarkness(struct ground_move* moveset);
|
||||
|
||||
#endif //PMDSKY_MAIN_02014CEC_H
|
||||
|
||||
12
include/main_0201514C.h
Normal file
12
include/main_0201514C.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef PMDSKY_MAIN_0201514C_H
|
||||
#define PMDSKY_MAIN_0201514C_H
|
||||
|
||||
#include "common.h"
|
||||
#include "enums.h"
|
||||
#include "move_data.h"
|
||||
#include "util.h"
|
||||
|
||||
bool8 IsSameMove(struct move* moveset, struct move* move);
|
||||
u8 GetMoveCategory(enum move_id move_id);
|
||||
|
||||
#endif //PMDSKY_MAIN_0201514C_H
|
||||
@@ -1,9 +1,12 @@
|
||||
#ifndef PMDSKY_MAIN_02054AA4_H
|
||||
#define PMDSKY_MAIN_02054AA4_H
|
||||
|
||||
#include "enums.h"
|
||||
#include "util.h"
|
||||
|
||||
bool8 IsUnown(s16 monster_id);
|
||||
bool8 IsShaymin(s16 monster_id);
|
||||
bool8 IsCastform(enum monster_id monster_id);
|
||||
bool8 IsCherrim(enum monster_id monster_id);
|
||||
|
||||
#endif //PMDSKY_MAIN_02054AA4_H
|
||||
|
||||
@@ -5,5 +5,6 @@
|
||||
#include "util.h"
|
||||
|
||||
enum monster_id GetBaseFormCastformDeoxysCherrim(enum monster_id monster_id);
|
||||
bool8 BaseFormsEqual(enum monster_id monster1, enum monster_id monster2);
|
||||
|
||||
#endif //PMDSKY_MAIN_02054C24_H
|
||||
|
||||
@@ -32,6 +32,13 @@ struct fixed_point {
|
||||
s16 fractional;
|
||||
};
|
||||
|
||||
// 64-bit signed fixed-point number with 16 fraction bits.
|
||||
// Represents the number ((upper << 16) + (lower >> 16) + (lower & 0xFFFF) * 2^-16)
|
||||
struct fixed_point_64 {
|
||||
s32 upper; // sign bit, plus the 31 most significant integer bits
|
||||
u32 lower; // the 32 least significant bits (16 integer + 16 fraction)
|
||||
};
|
||||
|
||||
// Compares two numbers and return the minimum
|
||||
#define MIN(A, B) ((A > B) ? B : A)
|
||||
|
||||
@@ -57,4 +64,13 @@ static inline s32 Max(s32 a, s32 b)
|
||||
b = temp; \
|
||||
}
|
||||
|
||||
// Returns a bool8 given a flag and the target bit
|
||||
#define GET_FLAG(FLAG, BIT) ((bool8) (((FLAG) & (BIT)) ? TRUE : FALSE))
|
||||
|
||||
// Same as GET_FLAG but as a static inline, since the macro doesn't match in some places
|
||||
static inline bool8 GetFlag(u8 flag, u8 bit)
|
||||
{
|
||||
return (flag & bit) != 0;
|
||||
}
|
||||
|
||||
#endif //PMDSKY_UTIL_H
|
||||
|
||||
16
main.lsf
16
main.lsf
@@ -18,6 +18,12 @@ Static main
|
||||
Object asm/main_020018A4.o
|
||||
Object src/main_020018D0.o
|
||||
Object asm/main_02001A30.o
|
||||
Object src/main_02001A54.o
|
||||
Object asm/main_02001B0C.o
|
||||
Object src/main_02001BB4.o
|
||||
Object asm/main_02001CB0.o
|
||||
Object src/main_02001CD4.o
|
||||
Object asm/main_02001D68.o
|
||||
Object src/main_0200224C.o
|
||||
Object asm/main_020022C4.o
|
||||
Object src/main_0200330C.o
|
||||
@@ -52,7 +58,9 @@ Static main
|
||||
Object asm/main_0200C5B4.o
|
||||
Object src/item_util.o
|
||||
Object src/item_util_4.o
|
||||
Object asm/main_0200CAFC.o
|
||||
Object asm/main_0200D1F0.o
|
||||
Object src/main_0200D81C.o
|
||||
Object asm/main_0200D8E4.o
|
||||
Object src/item_util_1.o
|
||||
Object asm/main_0200EB30.o
|
||||
Object src/main_0200ECFC.o
|
||||
@@ -71,7 +79,9 @@ Static main
|
||||
Object src/main_02014A4C.o
|
||||
Object asm/main_02014B1C.o
|
||||
Object src/main_02014CEC.o
|
||||
Object asm/main_02014D18.o
|
||||
Object asm/main_02015090.o
|
||||
Object src/main_0201514C.o
|
||||
Object asm/main_020151E4.o
|
||||
Object src/main_020251AC.o
|
||||
Object asm/main_020251F0.o
|
||||
Object src/main_02025788.o
|
||||
@@ -139,10 +149,8 @@ Static main
|
||||
Object src/main_02052B28.o
|
||||
Object asm/main_02052B44.o
|
||||
Object src/main_02054AA4.o
|
||||
Object asm/main_02054AD4.o
|
||||
Object src/main_02054BE0.o
|
||||
Object src/main_02054C24.o
|
||||
Object asm/main_02054CD8.o
|
||||
Object src/main_02054DC4.o
|
||||
Object asm/main_02054E4C.o
|
||||
Object src/main_02058C3C.o
|
||||
|
||||
@@ -6,6 +6,12 @@
|
||||
|
||||
extern s16 RandRangeSafe(s32, s32);
|
||||
extern s16 _020A18BC[10];
|
||||
extern void ItemZInit();
|
||||
extern u16 GetItemBuyPrice(s16);
|
||||
extern u16 GetItemSellPrice(s16);
|
||||
extern s32 GetMoneyQuantity(struct item*);
|
||||
extern bool8 IsShoppableItem(s16);
|
||||
extern bool8 IsThrownItem(s16);
|
||||
|
||||
BOOL IsLosableItem(struct item* item)
|
||||
{
|
||||
@@ -161,3 +167,86 @@ void InitBulkItem(struct bulk_item* item, s16 id) {
|
||||
item->quantity = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void BulkItemToItem(struct item* item, struct bulk_item* bulk_item)
|
||||
{
|
||||
if (bulk_item->id != 0) {
|
||||
item->flags = ITEM_FLAG_EXISTS;
|
||||
item->id = bulk_item->id;
|
||||
item->held_by = 0;
|
||||
if (IsThrownItem(item->id)) {
|
||||
item->quantity = bulk_item->quantity;
|
||||
return;
|
||||
}
|
||||
|
||||
switch(GetItemCategory(item->id)) {
|
||||
case CATEGORY_POKE:
|
||||
case CATEGORY_TREASURE_BOXES_1:
|
||||
case CATEGORY_TREASURE_BOXES_2:
|
||||
case CATEGORY_TREASURE_BOXES_3:
|
||||
case 0xBB:
|
||||
item->quantity = bulk_item->quantity;
|
||||
return;
|
||||
default:
|
||||
item->quantity = 0;
|
||||
}
|
||||
} else {
|
||||
ItemZInit();
|
||||
}
|
||||
}
|
||||
|
||||
void ItemToBulkItem(struct bulk_item* bulk, struct item* item)
|
||||
{
|
||||
if (GET_FLAG(item->flags, ITEM_FLAG_EXISTS)) {
|
||||
bulk->id = item->id;
|
||||
bulk->quantity = item->quantity;
|
||||
}
|
||||
else {
|
||||
bulk->id = 0;
|
||||
bulk->quantity = 0;
|
||||
}
|
||||
}
|
||||
|
||||
s32 GetDisplayedBuyPrice(struct item* item)
|
||||
{
|
||||
if (item->id == ITEM_POKE) {
|
||||
return GetMoneyQuantity(item);
|
||||
}
|
||||
if (IsThrownItem(item->id)) {
|
||||
return item->quantity * GetItemBuyPrice(item->id);
|
||||
}
|
||||
return GetItemBuyPrice(item->id);
|
||||
}
|
||||
|
||||
s32 GetDisplayedSellPrice(struct item* item)
|
||||
{
|
||||
if (item->id == ITEM_POKE) {
|
||||
return GetMoneyQuantity(item);
|
||||
}
|
||||
if (IsThrownItem(item->id)) {
|
||||
return item->quantity * GetItemSellPrice(item->id);
|
||||
}
|
||||
return GetItemSellPrice(item->id);
|
||||
}
|
||||
|
||||
s32 GetActualBuyPrice(struct item* item)
|
||||
{
|
||||
if (!IsShoppableItem(item->id)) {
|
||||
return 0;
|
||||
}
|
||||
if (IsThrownItem(item->id)) {
|
||||
return item->quantity * GetItemBuyPrice(item->id);
|
||||
}
|
||||
return GetItemBuyPrice(item->id);
|
||||
}
|
||||
|
||||
s32 GetActualSellPrice(struct item* item)
|
||||
{
|
||||
if (!IsShoppableItem(item->id)) {
|
||||
return 0;
|
||||
}
|
||||
if (IsThrownItem(item->id)) {
|
||||
return item->quantity * GetItemSellPrice(item->id);
|
||||
}
|
||||
return GetItemSellPrice(item->id);
|
||||
}
|
||||
|
||||
82
src/main_02001A54.c
Normal file
82
src/main_02001A54.c
Normal file
@@ -0,0 +1,82 @@
|
||||
#include "main_02001A54.h"
|
||||
|
||||
extern s32 UMultiplyByFixedPoint(s32, s32);
|
||||
extern s32 sub_02001BB4(s32, s32);
|
||||
|
||||
s32 MultiplyByFixedPoint(s32 x, s32 y)
|
||||
{
|
||||
s32 result;
|
||||
bool8 xNeg;
|
||||
bool8 yNeg;
|
||||
|
||||
// Same as checking if x < 0 and y < 0
|
||||
if (x & 0x80000000) {
|
||||
xNeg = TRUE;
|
||||
} else {
|
||||
xNeg = FALSE;
|
||||
}
|
||||
if (y & 0x80000000) {
|
||||
yNeg = TRUE;
|
||||
} else {
|
||||
yNeg = FALSE;
|
||||
}
|
||||
|
||||
if (x == 0) {
|
||||
return 0;
|
||||
}
|
||||
if (y == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (xNeg) {
|
||||
x = -x;
|
||||
}
|
||||
if (yNeg) {
|
||||
y = -y;
|
||||
}
|
||||
|
||||
result = UMultiplyByFixedPoint(x, y);
|
||||
if (xNeg != yNeg) {
|
||||
result = -result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
s32 sub_02001AB0(s32 x, s32 y)
|
||||
{
|
||||
s32 result;
|
||||
bool8 xNeg;
|
||||
bool8 yNeg;
|
||||
|
||||
// Same as checking if x < 0 and y < 0
|
||||
if (x & 0x80000000) {
|
||||
xNeg = TRUE;
|
||||
} else {
|
||||
xNeg = FALSE;
|
||||
}
|
||||
if (y & 0x80000000) {
|
||||
yNeg = TRUE;
|
||||
} else {
|
||||
yNeg = FALSE;
|
||||
}
|
||||
|
||||
if (y == 0) {
|
||||
return 0x7FFFFFFF;
|
||||
}
|
||||
if (x == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (xNeg) {
|
||||
x = -x;
|
||||
}
|
||||
if (yNeg) {
|
||||
y = -y;
|
||||
}
|
||||
|
||||
result = sub_02001BB4(x, y);
|
||||
if (xNeg != yNeg) {
|
||||
result = -result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
72
src/main_02001BB4.c
Normal file
72
src/main_02001BB4.c
Normal file
@@ -0,0 +1,72 @@
|
||||
#include "main_02001BB4.h"
|
||||
|
||||
extern s32 UFixedPoint64CmpLt(s32, u32, s32, u32);
|
||||
|
||||
u32 sub_02001BB4(s32 x, s32 y)
|
||||
{
|
||||
u32 var_r4;
|
||||
u32 var_r5;
|
||||
s32 var_r6;
|
||||
u32 var_r7;
|
||||
|
||||
u32 var_r8;
|
||||
|
||||
if (y == 0) {
|
||||
return 0x7FFFFFFFU;
|
||||
}
|
||||
if (x == 0) {
|
||||
return 0U;
|
||||
}
|
||||
|
||||
var_r8 = 0;
|
||||
|
||||
var_r4 = 0;
|
||||
var_r5 = 0;
|
||||
var_r6 = (x >> 0x18) & 0xFF;
|
||||
var_r7 = (x << 8) & ~0xFF;
|
||||
|
||||
for (int i = 0; i < 0x40; i++) {
|
||||
// 128-bit left shift by 1
|
||||
var_r4 = (var_r4 << 1);
|
||||
if (var_r5 & 0x80000000) {
|
||||
var_r4 |= 1;
|
||||
}
|
||||
var_r5 = (var_r5 << 1) & ~1;
|
||||
if (var_r6 & 0x80000000) {
|
||||
var_r5 |= 1;
|
||||
}
|
||||
var_r6 = (var_r6 << 1);
|
||||
if (var_r7 & 0x80000000) {
|
||||
var_r6 |= 1;
|
||||
}
|
||||
var_r7 = (var_r7 << 1) & ~1;
|
||||
|
||||
bool8 var_r1;
|
||||
if (UFixedPoint64CmpLt(var_r4, var_r5, 0, y) == 0) {
|
||||
u32 temp_r0 = var_r5;
|
||||
var_r5 -= y;
|
||||
var_r1 = TRUE;
|
||||
if (temp_r0 < var_r5) {
|
||||
var_r4 -= 1;
|
||||
}
|
||||
} else {
|
||||
var_r1 = FALSE;
|
||||
}
|
||||
|
||||
var_r8 = (var_r8 << 1) & ~1;
|
||||
if (var_r1) {
|
||||
var_r8 |= 1;
|
||||
}
|
||||
}
|
||||
|
||||
return var_r8;
|
||||
}
|
||||
|
||||
void IntToFixedPoint64(struct fixed_point_64* out, s32 x)
|
||||
{
|
||||
out->upper = (u32) (x & ~0xFFFF) >> 0x10;
|
||||
out->lower = x << 0x10;
|
||||
if (x & 0x8000) {
|
||||
out->upper = out->upper | ~0xFFFF;
|
||||
}
|
||||
}
|
||||
39
src/main_02001CD4.c
Normal file
39
src/main_02001CD4.c
Normal file
@@ -0,0 +1,39 @@
|
||||
#include "main_02001CD4.h"
|
||||
|
||||
void FixedPoint32To64(struct fixed_point_64* out, s32 x)
|
||||
{
|
||||
out->lower = (s32) (x << 8);
|
||||
out->upper = x >> 0x18;
|
||||
|
||||
if (out->upper & 0x80) {
|
||||
out->upper |= ~0x7F;
|
||||
} else {
|
||||
out->upper &= 0x7F;
|
||||
}
|
||||
}
|
||||
|
||||
void NegateFixedPoint64(struct fixed_point_64* x)
|
||||
{
|
||||
x->upper = x->upper ^ -1;
|
||||
|
||||
x->lower = x->lower ^ -1;
|
||||
x->lower += 1;
|
||||
|
||||
if (x->lower == 0) {
|
||||
x->upper = x->upper + 1;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 FixedPoint64IsZero(struct fixed_point_64* x)
|
||||
{
|
||||
if (x->upper != 0) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return x->lower == 0;
|
||||
}
|
||||
|
||||
bool8 FixedPoint64IsNegative(struct fixed_point_64* x)
|
||||
{
|
||||
return (x->upper & 0x80000000) != 0;
|
||||
}
|
||||
@@ -2,6 +2,16 @@
|
||||
|
||||
extern u16 PRNG_SEQUENCE_NUM;
|
||||
|
||||
u16 GetRngSeed(void)
|
||||
{
|
||||
return PRNG_SEQUENCE_NUM;
|
||||
}
|
||||
|
||||
void SetRngSeed(u16 seed)
|
||||
{
|
||||
PRNG_SEQUENCE_NUM = seed;
|
||||
}
|
||||
|
||||
u16 Rand16Bit() {
|
||||
PRNG_SEQUENCE_NUM = (PRNG_SEQUENCE_NUM * 0x6D) + 0x3FD;
|
||||
return PRNG_SEQUENCE_NUM;
|
||||
|
||||
46
src/main_0200D81C.c
Normal file
46
src/main_0200D81C.c
Normal file
@@ -0,0 +1,46 @@
|
||||
#include "main_0200D81C.h"
|
||||
|
||||
extern s32 MultiplyByFixedPoint(s32, s32);
|
||||
extern s32 MONEY_QUANTITY_TABLE[];
|
||||
|
||||
void ItemZInit(struct item* item)
|
||||
{
|
||||
item->id = 0;
|
||||
item->quantity = 0;
|
||||
item->flags = 0;
|
||||
item->held_by = 0;
|
||||
}
|
||||
|
||||
bool8 AreItemsEquivalent(struct item* item1, struct item* item2, s32 bitmask)
|
||||
{
|
||||
if ((item1->flags & bitmask) != (item2->flags & bitmask)) {
|
||||
return FALSE;
|
||||
}
|
||||
if (item1->held_by != item2->held_by) {
|
||||
return FALSE;
|
||||
}
|
||||
if (item1->quantity != item2->quantity) {
|
||||
return FALSE;
|
||||
}
|
||||
if (item1->id != item2->id) {
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_0200D894(struct item* item)
|
||||
{
|
||||
item->held_by = 0;
|
||||
item->flags = item->flags & ~(ITEM_FLAG_STICKY | ITEM_FLAG_SET);
|
||||
}
|
||||
|
||||
s32 GetMoneyQuantity(struct item* item)
|
||||
{
|
||||
s32 moneyQuantity = MONEY_QUANTITY_TABLE[item->quantity];
|
||||
|
||||
if (!(item->flags & ITEM_FLAG_UNK_MONEY_QUANTITY)) {
|
||||
return moneyQuantity;
|
||||
}
|
||||
|
||||
return MultiplyByFixedPoint(moneyQuantity << 8, 0x133) >> 8;
|
||||
}
|
||||
@@ -1,10 +1,22 @@
|
||||
#include "main_0200ECFC.h"
|
||||
#include "item.h"
|
||||
|
||||
extern struct baby_exclusive_item_pair BABY_EXCLUSIVE_ITEM_PAIRS[16];
|
||||
extern struct bag_items* BAG_ITEMS_PTR_MIRROR;
|
||||
|
||||
extern void ItemZInit(struct item *item);
|
||||
|
||||
s16 ReturnEggExclusiveItem(enum monster_id monster_id)
|
||||
{
|
||||
for (int i = 0; i < 16; i++) {
|
||||
if (monster_id == BABY_EXCLUSIVE_ITEM_PAIRS[i].baby_monster) {
|
||||
return BABY_EXCLUSIVE_ITEM_PAIRS[i].exc_item_id;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SetActiveInventoryToMain(void)
|
||||
{
|
||||
SetActiveInventory(MAIN_INVENTORY_INDEX);
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#include "main_02014CEC.h"
|
||||
#include "enums.h"
|
||||
|
||||
extern u16 PUNCH_MOVE_LIST[];
|
||||
extern s32 GetFirstNotRealMoveInTimeDarkness(struct ground_move*);
|
||||
|
||||
bool8 Is2TurnsMove(enum move_id move_id)
|
||||
{
|
||||
if (move_id == MOVE_SOLARBEAM) return TRUE;
|
||||
@@ -23,3 +26,316 @@ bool8 IsRegularAttackOrProjectile(enum move_id move_id)
|
||||
|
||||
return move_id == MOVE_PROJECTILE;
|
||||
}
|
||||
|
||||
bool8 IsPunchMove(enum move_id move_id)
|
||||
{
|
||||
for (s16 i = 0; PUNCH_MOVE_LIST[i] != 0; i++) {
|
||||
if (PUNCH_MOVE_LIST[i] == move_id) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 IsHealingWishOrLunarDance(enum move_id move_id)
|
||||
{
|
||||
if (move_id == MOVE_HEALING_WISH) return TRUE;
|
||||
if (move_id == MOVE_LUNAR_DANCE) return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 IsCopyingMove(enum move_id move_id)
|
||||
{
|
||||
if (move_id == MOVE_MIMIC) return TRUE;
|
||||
if (move_id == MOVE_SKETCH) return TRUE;
|
||||
if (move_id == MOVE_COPYCAT) return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 IsTrappingMove(enum move_id move_id)
|
||||
{
|
||||
if (move_id == MOVE_SPIKES) return TRUE;
|
||||
if (move_id == MOVE_TOXIC_SPIKES) return TRUE;
|
||||
if (move_id == MOVE_STEALTH_ROCK) return TRUE;
|
||||
if (move_id == MOVE_TRAPPER) return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 IsOneHitKoMove(enum move_id move_id)
|
||||
{
|
||||
if (move_id == MOVE_FISSURE) return TRUE;
|
||||
if (move_id == MOVE_SHEER_COLD) return TRUE;
|
||||
if (move_id == MOVE_HORN_DRILL) return TRUE;
|
||||
if (move_id == MOVE_GUILLOTINE) return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 IsNot2TurnsMoveOrSketch(enum move_id move_id)
|
||||
{
|
||||
if (Is2TurnsMove(move_id)) return FALSE;
|
||||
if (move_id == MOVE_SKETCH) return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 IsRealMove(enum move_id move_id)
|
||||
{
|
||||
if (move_id == MOVE_NOTHING) return FALSE;
|
||||
if (move_id == MOVE_JUDGMENT) return FALSE;
|
||||
if (move_id == MOVE_STRUGGLE) return FALSE;
|
||||
|
||||
// MOVE_REGULAR_ATTACK
|
||||
// MOVE_IS_WATCHING
|
||||
// MOVE_BIDE_UNLEASH
|
||||
// MOVE_REVENGE_UNLEASH
|
||||
// MOVE_AVALANCHE_UNLEASH
|
||||
if ((move_id >= MOVE_REGULAR_ATTACK) && (move_id < MOVE_WIDE_SLASH)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// MOVE_UNNAMED_0x169
|
||||
// MOVE_UNNAMED_0x16A
|
||||
// MOVE_SEE_TRAP
|
||||
// MOVE_TAKEAWAY
|
||||
// MOVE_REBOUND
|
||||
// MOVE_BLOOP_SLASH
|
||||
// MOVE_SWITCHER
|
||||
// MOVE_BLOWBACK
|
||||
// MOVE_WARP
|
||||
// MOVE_TRANSFER
|
||||
// MOVE_SLOW_DOWN
|
||||
// MOVE_SPEED_BOOST
|
||||
// MOVE_SEARCHLIGHT
|
||||
// MOVE_PETRIFY
|
||||
// MOVE_STAY_AWAY
|
||||
// MOVE_POUNCE
|
||||
// MOVE_TRAWL
|
||||
// MOVE_CLEANSE
|
||||
// MOVE_OBSERVER
|
||||
// MOVE_DECOY_MAKER
|
||||
// MOVE_SIESTA
|
||||
// MOVE_TOTTER
|
||||
// MOVE_TWO_EDGE
|
||||
// MOVE_NO_MOVE
|
||||
// MOVE_ESCAPE
|
||||
// MOVE_SCAN
|
||||
// MOVE_POWER_EARS
|
||||
// MOVE_DROUGHT
|
||||
// MOVE_TRAP_BUSTER
|
||||
// MOVE_WILD_CALL
|
||||
// MOVE_INVISIFY
|
||||
// MOVE_ONE_SHOT
|
||||
// MOVE_HP_GAUGE
|
||||
if ((move_id > MOVE_WIDE_SLASH) && (move_id < MOVE_VACUUM_CUT)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// MOVE_REVIVER
|
||||
// MOVE_SHOCKER
|
||||
// MOVE_ECHO
|
||||
// MOVE_FAMISH
|
||||
// MOVE_ONE_ROOM
|
||||
// MOVE_FILL_IN
|
||||
// MOVE_TRAPPER
|
||||
// MOVE_POSSESS
|
||||
// MOVE_ITEMIZE
|
||||
// MOVE_TAG_0x194
|
||||
// MOVE_PROJECTILE
|
||||
// MOVE_HURL
|
||||
// MOVE_MOBILE
|
||||
// MOVE_ITEM_TOSS
|
||||
// MOVE_SEE_STAIRS
|
||||
// MOVE_LONG_TOSS
|
||||
// MOVE_TAG_0x19B
|
||||
// MOVE_PIERCE
|
||||
// MOVE_TAG_0x19D
|
||||
// MOVE_TAG_0x19E
|
||||
// MOVE_TAG_0x19F
|
||||
// MOVE_TAG_0x1A0
|
||||
// MOVE_TAG_0x1A1
|
||||
// MOVE_TAG_0x1A2
|
||||
// MOVE_TAG_0x1A3
|
||||
// MOVE_TAG_0x1A4
|
||||
// MOVE_TAG_0x1A5
|
||||
// MOVE_TAG_0x1A6
|
||||
// MOVE_TAG_0x1A7
|
||||
// MOVE_TAG_0x1A8
|
||||
// MOVE_TAG_0x1A9
|
||||
// MOVE_TAG_0x1AA
|
||||
// MOVE_TAG_0x1AB
|
||||
// MOVE_TAG_0x1AC
|
||||
// MOVE_TAG_0x1AD
|
||||
if ((move_id > MOVE_VACUUM_CUT) && (move_id <= MOVE_TAG_0x1AD)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// MOVE_TAG_0x21F
|
||||
// MOVE_TAG_0x220
|
||||
// MOVE_TAG_0x221
|
||||
// MOVE_TAG_0x222
|
||||
// MOVE_TAG_0x223
|
||||
// MOVE_TAG_0x224
|
||||
// MOVE_TAG_0x225
|
||||
// MOVE_TAG_0x226
|
||||
// MOVE_TAG_0x227
|
||||
// MOVE_TAG_0x228
|
||||
// MOVE_TAG_0x229
|
||||
// MOVE_TAG_0x22A
|
||||
// MOVE_TAG_0x22B
|
||||
// MOVE_TAG_0x22C
|
||||
// MOVE_TAG_0x22D
|
||||
// MOVE_TAG_0x22E
|
||||
// ...
|
||||
if (move_id >= MOVE_TAG_0x21F) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 IsMovesetValid(struct ground_move* move)
|
||||
{
|
||||
for (s16 i = 0; i < 4; i++) {
|
||||
if (GetFlag(move[i].flags0, MOVE_FLAG_EXISTS) && !IsRealMove(move[i].id)) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 IsRealMoveInTimeDarkness(enum move_id move_id)
|
||||
{
|
||||
if (move_id == MOVE_NOTHING) return FALSE;
|
||||
if (move_id == MOVE_JUDGMENT) return FALSE;
|
||||
if (move_id == MOVE_SEED_FLARE) return FALSE;
|
||||
if (move_id == MOVE_STRUGGLE) return FALSE;
|
||||
|
||||
// MOVE_REGULAR_ATTACK
|
||||
// MOVE_IS_WATCHING
|
||||
// MOVE_BIDE_UNLEASH
|
||||
// MOVE_REVENGE_UNLEASH
|
||||
// MOVE_AVALANCHE_UNLEASH
|
||||
if ((move_id >= MOVE_REGULAR_ATTACK) && (move_id < MOVE_WIDE_SLASH)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// MOVE_UNNAMED_0x169
|
||||
// MOVE_UNNAMED_0x16A
|
||||
// MOVE_SEE_TRAP
|
||||
// MOVE_TAKEAWAY
|
||||
// MOVE_REBOUND
|
||||
// MOVE_BLOOP_SLASH
|
||||
// MOVE_SWITCHER
|
||||
// MOVE_BLOWBACK
|
||||
// MOVE_WARP
|
||||
// MOVE_TRANSFER
|
||||
// MOVE_SLOW_DOWN
|
||||
// MOVE_SPEED_BOOST
|
||||
// MOVE_SEARCHLIGHT
|
||||
// MOVE_PETRIFY
|
||||
// MOVE_STAY_AWAY
|
||||
// MOVE_POUNCE
|
||||
// MOVE_TRAWL
|
||||
// MOVE_CLEANSE
|
||||
// MOVE_OBSERVER
|
||||
// MOVE_DECOY_MAKER
|
||||
// MOVE_SIESTA
|
||||
// MOVE_TOTTER
|
||||
// MOVE_TWO_EDGE
|
||||
// MOVE_NO_MOVE
|
||||
// MOVE_ESCAPE
|
||||
// MOVE_SCAN
|
||||
// MOVE_POWER_EARS
|
||||
// MOVE_DROUGHT
|
||||
// MOVE_TRAP_BUSTER
|
||||
// MOVE_WILD_CALL
|
||||
// MOVE_INVISIFY
|
||||
// MOVE_ONE_SHOT
|
||||
// MOVE_HP_GAUGE
|
||||
if ((move_id > MOVE_WIDE_SLASH) && (move_id < MOVE_VACUUM_CUT)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// MOVE_REVIVER
|
||||
// MOVE_SHOCKER
|
||||
// MOVE_ECHO
|
||||
// MOVE_FAMISH
|
||||
// MOVE_ONE_ROOM
|
||||
// MOVE_FILL_IN
|
||||
// MOVE_TRAPPER
|
||||
// MOVE_POSSESS
|
||||
// MOVE_ITEMIZE
|
||||
// MOVE_TAG_0x194
|
||||
// MOVE_PROJECTILE
|
||||
// MOVE_HURL
|
||||
// MOVE_MOBILE
|
||||
// MOVE_ITEM_TOSS
|
||||
// MOVE_SEE_STAIRS
|
||||
// MOVE_LONG_TOSS
|
||||
// MOVE_TAG_0x19B
|
||||
// MOVE_PIERCE
|
||||
// MOVE_TAG_0x19D
|
||||
// MOVE_TAG_0x19E
|
||||
// MOVE_TAG_0x19F
|
||||
// MOVE_TAG_0x1A0
|
||||
// MOVE_TAG_0x1A1
|
||||
// MOVE_TAG_0x1A2
|
||||
// MOVE_TAG_0x1A3
|
||||
// MOVE_TAG_0x1A4
|
||||
// MOVE_TAG_0x1A5
|
||||
// MOVE_TAG_0x1A6
|
||||
// MOVE_TAG_0x1A7
|
||||
// MOVE_TAG_0x1A8
|
||||
// MOVE_TAG_0x1A9
|
||||
// MOVE_TAG_0x1AA
|
||||
// MOVE_TAG_0x1AB
|
||||
// MOVE_TAG_0x1AC
|
||||
// MOVE_TAG_0x1AD
|
||||
if ((move_id > MOVE_VACUUM_CUT) && (move_id <= MOVE_TAG_0x1AD)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// MOVE_TAG_0x21F
|
||||
// MOVE_TAG_0x220
|
||||
// MOVE_TAG_0x221
|
||||
// MOVE_TAG_0x222
|
||||
// MOVE_TAG_0x223
|
||||
// MOVE_TAG_0x224
|
||||
// MOVE_TAG_0x225
|
||||
// MOVE_TAG_0x226
|
||||
// MOVE_TAG_0x227
|
||||
// MOVE_TAG_0x228
|
||||
// MOVE_TAG_0x229
|
||||
// MOVE_TAG_0x22A
|
||||
// MOVE_TAG_0x22B
|
||||
// MOVE_TAG_0x22C
|
||||
// MOVE_TAG_0x22D
|
||||
// MOVE_TAG_0x22E
|
||||
// ...
|
||||
if (move_id >= MOVE_TAG_0x21F) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 IsMovesetValidInTimeDarkness(struct ground_move* moveset)
|
||||
{
|
||||
return GetFirstNotRealMoveInTimeDarkness(moveset) == -1;
|
||||
}
|
||||
|
||||
s32 GetFirstNotRealMoveInTimeDarkness(struct ground_move* moveset)
|
||||
{
|
||||
for (s16 i = 0; i < 4; i++) {
|
||||
if (GetFlag(moveset[i].flags0, MOVE_FLAG_EXISTS) && !IsRealMoveInTimeDarkness(moveset[i].id)) {
|
||||
return (s64) i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
26
src/main_0201514C.c
Normal file
26
src/main_0201514C.c
Normal file
@@ -0,0 +1,26 @@
|
||||
#include "main_0201514C.h"
|
||||
|
||||
extern struct move_data_table_outer DUNGEON_MOVE_TABLES;
|
||||
|
||||
bool8 IsSameMove(struct move* moveset, struct move* move) {
|
||||
if (!GET_FLAG(move->flags0, MOVE_FLAG_EXISTS)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (s16 i = 0; i < 4; i++) {
|
||||
if (!GET_FLAG(moveset[i].flags0, MOVE_FLAG_EXISTS)) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (move->id == moveset[i].id) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u8 GetMoveCategory(enum move_id move_id)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move_id].category;
|
||||
}
|
||||
@@ -10,3 +10,28 @@ bool8 IsUnown(s16 monster_id) {
|
||||
bool8 IsShaymin(s16 monster_id) {
|
||||
return (u16)(s16)(monster_id - MONSTER_SHAYMIN_LAND) <= 1;
|
||||
}
|
||||
|
||||
bool8 IsCastform(enum monster_id monster_id)
|
||||
{
|
||||
if(monster_id == MONSTER_CASTFORM_NORMAL ||
|
||||
monster_id == MONSTER_CASTFORM_SNOWY ||
|
||||
monster_id == MONSTER_CASTFORM_SUNNY ||
|
||||
monster_id == MONSTER_CASTFORM_RAINY ||
|
||||
((u16)(s16)(monster_id - MONSTER_CASTFORM_NORMAL_SECONDARY) <= 3)
|
||||
) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 IsCherrim(enum monster_id monster_id)
|
||||
{
|
||||
if (monster_id == MONSTER_CHERRIM_OVERCAST ||
|
||||
monster_id == MONSTER_CHERRIM_SUNSHINE ||
|
||||
((u16)(s16)(monster_id - MONSTER_CHERRIM_OVERCAST_SECONDARY) <= 1)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
#include "main_02054C24.h"
|
||||
|
||||
extern enum monster_id FemaleToMaleForm(enum monster_id);
|
||||
extern enum monster_id GetBaseFormBurmyWormadamShellosGastrodonCherrim(enum monster_id);
|
||||
extern s16 GetDexNumber(enum monster_id);
|
||||
extern bool8 IsDeoxys(enum monster_id monster_id);
|
||||
extern bool8 IsUnown(enum monster_id);
|
||||
|
||||
enum monster_id GetBaseFormCastformDeoxysCherrim(enum monster_id monster_id)
|
||||
{
|
||||
@@ -21,3 +25,36 @@ enum monster_id GetBaseFormCastformDeoxysCherrim(enum monster_id monster_id)
|
||||
}
|
||||
return monster_id;
|
||||
}
|
||||
|
||||
bool8 BaseFormsEqual(enum monster_id monster1, enum monster_id monster2)
|
||||
{
|
||||
monster1 = FemaleToMaleForm(monster1);
|
||||
monster2 = FemaleToMaleForm(monster2);
|
||||
|
||||
monster1 = GetBaseFormCastformDeoxysCherrim(monster1);
|
||||
monster2 = GetBaseFormCastformDeoxysCherrim(monster2);
|
||||
|
||||
if (monster1 == monster2) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (IsUnown(monster1) && IsUnown(monster2)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
enum monster_id monster1Base = GetBaseFormBurmyWormadamShellosGastrodonCherrim(monster1);
|
||||
enum monster_id monster2Base = GetBaseFormBurmyWormadamShellosGastrodonCherrim(monster2);
|
||||
|
||||
if ((monster1Base == MONSTER_BURMY_SANDY && monster2Base == MONSTER_BURMY_SANDY) ||
|
||||
(monster1Base == MONSTER_WORMADAM_SANDY && monster2Base == MONSTER_WORMADAM_SANDY) ||
|
||||
(monster1Base == MONSTER_SHELLOS_EAST && monster2Base == MONSTER_SHELLOS_EAST) ||
|
||||
(monster1Base == MONSTER_GASTRODON_EAST && monster2Base == MONSTER_GASTRODON_EAST)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (GetDexNumber(monster1) == GetDexNumber(monster2)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -64,8 +64,6 @@ u8 *GetMoveMessageFromId(s32 move_id)
|
||||
return StringFromId((u16)(DUNGEON_MOVE_TABLES.moves->moves[move_id].message_string_idx + MESSAGE_ID));
|
||||
}
|
||||
|
||||
#define GET_BIT(BYTE, N) ((u8)(BYTE & (1 << N) ? 1 : 0))
|
||||
|
||||
s32 GetNbMoves(struct moves *moves)
|
||||
{
|
||||
s32 index;
|
||||
@@ -81,7 +79,7 @@ s32 GetNbMoves(struct moves *moves)
|
||||
// fake
|
||||
u8 flag = *(u8*)((u32)moves + (index * 6));
|
||||
|
||||
if(GET_BIT(flag, 0))
|
||||
if(GET_FLAG(flag, MOVE_FLAG_EXISTS))
|
||||
num_moves++;
|
||||
|
||||
}
|
||||
|
||||
@@ -14,8 +14,6 @@ extern u8* strcpy(u8* dest, const u8* src);
|
||||
extern void sub_0200D894(struct item*);
|
||||
extern void ov10_022BD394(char*, s32, u32, u32);
|
||||
|
||||
#define GET_BIT(BYTE, N) ((u8)(BYTE & (1 << N) ? 1 : 0))
|
||||
|
||||
char* ov31_02383478(char* arg1, s32 arg2, u32 arg3)
|
||||
{
|
||||
u32 a = 1;
|
||||
@@ -36,7 +34,7 @@ char* ov31_02383478(char* arg1, s32 arg2, u32 arg3)
|
||||
struct tile* tile = GetTile(x, y);
|
||||
struct item* item = GetItemInfo(tile->object);
|
||||
|
||||
if (GET_BIT(item->flags, 0)) {
|
||||
if (GET_FLAG(item->flags, ITEM_FLAG_EXISTS)) {
|
||||
MaybeGetFormattedItemName(arg1, item, &OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0, a, 1);
|
||||
OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x1277 = 0;
|
||||
} else {
|
||||
@@ -44,7 +42,7 @@ char* ov31_02383478(char* arg1, s32 arg2, u32 arg3)
|
||||
OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x1277 = 3;
|
||||
}
|
||||
} else {
|
||||
if (GET_BIT(BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].flags, 0) &&
|
||||
if (GET_FLAG(BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].flags, ITEM_FLAG_EXISTS) &&
|
||||
BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].held_by) {
|
||||
u32 r1 = (BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].held_by - 1);
|
||||
if (EntityIsValidOverlay31(DUNGEON_PTR[0]->monster_slots.party_members[r1]) == 0) {
|
||||
|
||||
Reference in New Issue
Block a user