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

Decomp 37 functions
This commit is contained in:
AnonymousRandomPerson
2026-07-11 23:52:39 -04:00
committed by GitHub
50 changed files with 2131 additions and 2160 deletions

View File

@@ -1,3 +1 @@
#pragma once
.public NATURAL_LOG_VALUE_TABLE
.public PRNG_SEQUENCE_NUM

View File

@@ -1,2 +1 @@
#pragma once

View File

@@ -0,0 +1 @@
#pragma once

View File

@@ -0,0 +1,6 @@
#pragma once
.public FixedPoint64IsNegative
.public FixedPoint64IsZero
.public NATURAL_LOG_VALUE_TABLE
.public NegateFixedPoint64
.public UFixedPoint64CmpLt

View File

@@ -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

View 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

View 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

View File

@@ -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

View File

@@ -0,0 +1,3 @@
#pragma once
.public Rand16Bit
.public _s32_div_f

View File

@@ -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

View File

@@ -1,6 +0,0 @@
#pragma once
.public FemaleToMaleForm
.public GetBaseFormBurmyWormadamShellosGastrodonCherrim
.public GetBaseFormCastformDeoxysCherrim
.public GetDexNumber
.public IsUnown

View File

@@ -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
View 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
View 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
View 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
View 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

View File

@@ -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}

View File

@@ -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
View 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

View File

@@ -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}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
};

View File

@@ -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
View 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
View 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
View 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

View File

@@ -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
View 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

View File

@@ -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);

View File

@@ -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
View 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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
View 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
View 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
View 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;
}

View File

@@ -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
View 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;
}

View File

@@ -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);

View File

@@ -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
View 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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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++;
}

View File

@@ -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) {