diff --git a/asm/include/main_02001A30.inc b/asm/include/main_02001A30.inc index f8dc2970..6f70f09b 100644 --- a/asm/include/main_02001A30.inc +++ b/asm/include/main_02001A30.inc @@ -1,3 +1 @@ #pragma once -.public NATURAL_LOG_VALUE_TABLE -.public PRNG_SEQUENCE_NUM diff --git a/asm/include/main_02054AD4.inc b/asm/include/main_02001B0C.inc similarity index 92% rename from asm/include/main_02054AD4.inc rename to asm/include/main_02001B0C.inc index 3f59c932..6f70f09b 100644 --- a/asm/include/main_02054AD4.inc +++ b/asm/include/main_02001B0C.inc @@ -1,2 +1 @@ #pragma once - diff --git a/asm/include/main_02001CB0.inc b/asm/include/main_02001CB0.inc new file mode 100644 index 00000000..6f70f09b --- /dev/null +++ b/asm/include/main_02001CB0.inc @@ -0,0 +1 @@ +#pragma once diff --git a/asm/include/main_02001D68.inc b/asm/include/main_02001D68.inc new file mode 100644 index 00000000..ad0bc982 --- /dev/null +++ b/asm/include/main_02001D68.inc @@ -0,0 +1,6 @@ +#pragma once +.public FixedPoint64IsNegative +.public FixedPoint64IsZero +.public NATURAL_LOG_VALUE_TABLE +.public NegateFixedPoint64 +.public UFixedPoint64CmpLt diff --git a/asm/include/main_0200CAFC.inc b/asm/include/main_0200CAFC.inc deleted file mode 100644 index 030ae894..00000000 --- a/asm/include/main_0200CAFC.inc +++ /dev/null @@ -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 diff --git a/asm/include/main_0200D1F0.inc b/asm/include/main_0200D1F0.inc new file mode 100644 index 00000000..cb56ace5 --- /dev/null +++ b/asm/include/main_0200D1F0.inc @@ -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 diff --git a/asm/include/main_0200D8E4.inc b/asm/include/main_0200D8E4.inc new file mode 100644 index 00000000..2694886a --- /dev/null +++ b/asm/include/main_0200D8E4.inc @@ -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 diff --git a/asm/include/main_0200EB30.inc b/asm/include/main_0200EB30.inc index 66b2ee7a..a2fd42c3 100644 --- a/asm/include/main_0200EB30.inc +++ b/asm/include/main_0200EB30.inc @@ -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 diff --git a/asm/include/main_02015090.inc b/asm/include/main_02015090.inc new file mode 100644 index 00000000..f8e3962a --- /dev/null +++ b/asm/include/main_02015090.inc @@ -0,0 +1,3 @@ +#pragma once +.public Rand16Bit +.public _s32_div_f diff --git a/asm/include/main_02014D18.inc b/asm/include/main_020151E4.inc similarity index 99% rename from asm/include/main_02014D18.inc rename to asm/include/main_020151E4.inc index aed21692..cc74c7bf 100644 --- a/asm/include/main_02014D18.inc +++ b/asm/include/main_020151E4.inc @@ -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 diff --git a/asm/include/main_02054CD8.inc b/asm/include/main_02054CD8.inc deleted file mode 100644 index 24f33e60..00000000 --- a/asm/include/main_02054CD8.inc +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once -.public FemaleToMaleForm -.public GetBaseFormBurmyWormadamShellosGastrodonCherrim -.public GetBaseFormCastformDeoxysCherrim -.public GetDexNumber -.public IsUnown diff --git a/asm/main_02001A30.s b/asm/main_02001A30.s index b47b63d6..f2d576cd 100644 --- a/asm/main_02001A30.s +++ b/asm/main_02001A30.s @@ -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 diff --git a/asm/main_02001B0C.s b/asm/main_02001B0C.s new file mode 100644 index 00000000..26c1e6f6 --- /dev/null +++ b/asm/main_02001B0C.s @@ -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 diff --git a/asm/main_02001CB0.s b/asm/main_02001CB0.s new file mode 100644 index 00000000..e3fcd8d2 --- /dev/null +++ b/asm/main_02001CB0.s @@ -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 diff --git a/asm/main_02001D68.s b/asm/main_02001D68.s new file mode 100644 index 00000000..6ed3b844 --- /dev/null +++ b/asm/main_02001D68.s @@ -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 diff --git a/asm/main_0200D1F0.s b/asm/main_0200D1F0.s new file mode 100644 index 00000000..673c51ab --- /dev/null +++ b/asm/main_0200D1F0.s @@ -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 diff --git a/asm/main_0200CAFC.s b/asm/main_0200D8E4.s similarity index 55% rename from asm/main_0200CAFC.s rename to asm/main_0200D8E4.s index fc9a3f72..668955c6 100644 --- a/asm/main_0200CAFC.s +++ b/asm/main_0200D8E4.s @@ -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} diff --git a/asm/main_0200EB30.s b/asm/main_0200EB30.s index f226b9c6..0f884e43 100644 --- a/asm/main_0200EB30.s +++ b/asm/main_0200EB30.s @@ -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 - diff --git a/asm/main_02015090.s b/asm/main_02015090.s new file mode 100644 index 00000000..0e5069c5 --- /dev/null +++ b/asm/main_02015090.s @@ -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 diff --git a/asm/main_02014D18.s b/asm/main_020151E4.s similarity index 98% rename from asm/main_02014D18.s rename to asm/main_020151E4.s index e80456a7..fd0da87a 100644 --- a/asm/main_02014D18.s +++ b/asm/main_020151E4.s @@ -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} diff --git a/asm/main_02054AD4.s b/asm/main_02054AD4.s deleted file mode 100644 index 2139c3b7..00000000 --- a/asm/main_02054AD4.s +++ /dev/null @@ -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 - diff --git a/asm/main_02054CD8.s b/asm/main_02054CD8.s deleted file mode 100644 index 91bfa7aa..00000000 --- a/asm/main_02054CD8.s +++ /dev/null @@ -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 diff --git a/include/common.h b/include/common.h index 5b9b25b9..85c094f2 100644 --- a/include/common.h +++ b/include/common.h @@ -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 diff --git a/include/item.h b/include/item.h index 0173693a..0706969c 100644 --- a/include/item.h +++ b/include/item.h @@ -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 }; diff --git a/include/item_util_4.h b/include/item_util_4.h index 6cd20d75..a3d855c8 100644 --- a/include/item_util_4.h +++ b/include/item_util_4.h @@ -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 diff --git a/include/main_02001A54.h b/include/main_02001A54.h new file mode 100644 index 00000000..4be3412c --- /dev/null +++ b/include/main_02001A54.h @@ -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 diff --git a/include/main_02001BB4.h b/include/main_02001BB4.h new file mode 100644 index 00000000..3573a59f --- /dev/null +++ b/include/main_02001BB4.h @@ -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 diff --git a/include/main_02001CD4.h b/include/main_02001CD4.h new file mode 100644 index 00000000..552b302a --- /dev/null +++ b/include/main_02001CD4.h @@ -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 diff --git a/include/main_0200224C.h b/include/main_0200224C.h index f03abae8..929a9c09 100644 --- a/include/main_0200224C.h +++ b/include/main_0200224C.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); diff --git a/include/main_0200D81C.h b/include/main_0200D81C.h new file mode 100644 index 00000000..f3e5ff55 --- /dev/null +++ b/include/main_0200D81C.h @@ -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 diff --git a/include/main_0200ECFC.h b/include/main_0200ECFC.h index c8b13078..7d52a7cb 100644 --- a/include/main_0200ECFC.h +++ b/include/main_0200ECFC.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); diff --git a/include/main_02014CEC.h b/include/main_02014CEC.h index cc7bd24a..ca09960b 100644 --- a/include/main_02014CEC.h +++ b/include/main_02014CEC.h @@ -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 diff --git a/include/main_0201514C.h b/include/main_0201514C.h new file mode 100644 index 00000000..947c1ad8 --- /dev/null +++ b/include/main_0201514C.h @@ -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 diff --git a/include/main_02054AA4.h b/include/main_02054AA4.h index 53404f8a..0a28576b 100644 --- a/include/main_02054AA4.h +++ b/include/main_02054AA4.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 diff --git a/include/main_02054C24.h b/include/main_02054C24.h index ba881b6e..c558b244 100644 --- a/include/main_02054C24.h +++ b/include/main_02054C24.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 diff --git a/include/util.h b/include/util.h index c700f204..d1f9f98d 100644 --- a/include/util.h +++ b/include/util.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 diff --git a/main.lsf b/main.lsf index a60c43ac..371ee3df 100644 --- a/main.lsf +++ b/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 diff --git a/src/item_util_4.c b/src/item_util_4.c index f5cc8200..9ecb5e24 100644 --- a/src/item_util_4.c +++ b/src/item_util_4.c @@ -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); +} diff --git a/src/main_02001A54.c b/src/main_02001A54.c new file mode 100644 index 00000000..e6f33a0a --- /dev/null +++ b/src/main_02001A54.c @@ -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; +} diff --git a/src/main_02001BB4.c b/src/main_02001BB4.c new file mode 100644 index 00000000..8032a27b --- /dev/null +++ b/src/main_02001BB4.c @@ -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; + } +} diff --git a/src/main_02001CD4.c b/src/main_02001CD4.c new file mode 100644 index 00000000..8748dc00 --- /dev/null +++ b/src/main_02001CD4.c @@ -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; +} diff --git a/src/main_0200224C.c b/src/main_0200224C.c index 6c57ce53..4f5312c7 100644 --- a/src/main_0200224C.c +++ b/src/main_0200224C.c @@ -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; diff --git a/src/main_0200D81C.c b/src/main_0200D81C.c new file mode 100644 index 00000000..3b8be333 --- /dev/null +++ b/src/main_0200D81C.c @@ -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; +} diff --git a/src/main_0200ECFC.c b/src/main_0200ECFC.c index 25dabbd9..4e3fb6f6 100644 --- a/src/main_0200ECFC.c +++ b/src/main_0200ECFC.c @@ -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); diff --git a/src/main_02014CEC.c b/src/main_02014CEC.c index ed026659..5d2bb692 100644 --- a/src/main_02014CEC.c +++ b/src/main_02014CEC.c @@ -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; +} diff --git a/src/main_0201514C.c b/src/main_0201514C.c new file mode 100644 index 00000000..aa063da2 --- /dev/null +++ b/src/main_0201514C.c @@ -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; +} diff --git a/src/main_02054AA4.c b/src/main_02054AA4.c index 7120ff07..4282b208 100644 --- a/src/main_02054AA4.c +++ b/src/main_02054AA4.c @@ -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; +} diff --git a/src/main_02054C24.c b/src/main_02054C24.c index 85c48db4..11a2ed0c 100644 --- a/src/main_02054C24.c +++ b/src/main_02054C24.c @@ -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; +} diff --git a/src/moves_3.c b/src/moves_3.c index 26f34467..42c4ea99 100644 --- a/src/moves_3.c +++ b/src/moves_3.c @@ -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++; } diff --git a/src/overlay_31_02383478.c b/src/overlay_31_02383478.c index 35ceea32..f228f174 100644 --- a/src/overlay_31_02383478.c +++ b/src/overlay_31_02383478.c @@ -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) {