From 35134eced4b8d103e2dfb4bd0e7800292ad69adb Mon Sep 17 00:00:00 2001 From: cecilarmitais Date: Sun, 16 Aug 2026 17:28:27 -0700 Subject: [PATCH] Decomp twelve game-state and recycle-shop accessors Decompile from asm: AddMoneyStored 0x02010758 SetEggSpecies 0x02010794 SetUnkGameState0x13a6 0x020107C4 SetEggHatchTimer 0x020107F4 DecrementEggHatchTimer 0x0201080C GetRecycleItemId 0x02011DF0 RecycleItemHasTradeTypePrizeTicket 0x02011DFC GetRecycleItemBonusOdds 0x02011E18 ClearRecycleShopOffer 0x02011F14 GetGameStateRecycleCount 0x02011F30 GetRankForRecycleShop 0x02011F48 GetRecycleOfferCooldown 0x0201227C Nine of these reach BAG_ITEMS_PTR_MIRROR. Five are the setters matching getters already landed; the other four use offsets past them, so struct bag_items gains four more fields, up to 0x13B4. As with the previous extension they are appended past the end, and the field at 0x13AC is left to align naturally rather than declaring a byte at 0x13AB that nothing reads. AddMoneyStored tail-calls SetMoneyStored, which is still asm; its prototype is provisional. DecrementEggHatchTimer only decrements a non-zero timer, which the target expresses with predicated subne/strneh rather than a branch. The remaining three take a pointer to a pointer to a small struct with fields at 0x0, 0x4 and 0x12. No existing type matches that layout, so it is introduced as struct unk_02011DF0, named for the lowest-addressed function that takes it, with placeholder fields. The bytes between 0x8 and 0x12 are unexamined and left as filler. Every one of the twelve matched on the first candidate. No comments are added to any pmd-sky file. Authored by Claude (Opus 5) under human direction. Confirmed by a matching build: build/pmdsky.us/pmdsky.us.nds: OK. Co-Authored-By: Claude Opus 5 --- asm/include/main_020107C4.inc | 2 - .../{main_020107F4.inc => main_02010830.inc} | 0 asm/include/main_02010FC4.inc | 86 +- .../{main_02010794.inc => main_02011E24.inc} | 0 asm/include/main_02011F60.inc | 15 + asm/include/main_02012294.inc | 70 + asm/main_02010724.s | 14 - asm/main_02010794.s | 15 - asm/main_020107C4.s | 15 - asm/{main_020107F4.s => main_02010830.s} | 31 +- asm/main_02010FC4.s | 2070 ----------------- asm/main_02011E24.s | 88 + asm/main_02011F60.s | 233 ++ asm/main_02012294.s | 1691 ++++++++++++++ include/item.h | 4 + include/main_0201077C.h | 2 + include/main_020107AC.h | 1 + include/main_020107DC.h | 2 + include/main_02011DF0.h | 18 + include/main_02011F14.h | 8 + include/main_0201227C.h | 6 + main.lsf | 10 +- src/main_0201077C.c | 12 + src/main_020107AC.c | 5 + src/main_020107DC.c | 12 + src/main_02011DF0.c | 16 + src/main_02011F14.c | 19 + src/main_0201227C.c | 9 + 28 files changed, 2230 insertions(+), 2224 deletions(-) delete mode 100644 asm/include/main_020107C4.inc rename asm/include/{main_020107F4.inc => main_02010830.inc} (100%) rename asm/include/{main_02010794.inc => main_02011E24.inc} (100%) create mode 100644 asm/include/main_02011F60.inc create mode 100644 asm/include/main_02012294.inc delete mode 100644 asm/main_02010794.s delete mode 100644 asm/main_020107C4.s rename asm/{main_020107F4.s => main_02010830.s} (94%) create mode 100644 asm/main_02011E24.s create mode 100644 asm/main_02011F60.s create mode 100644 asm/main_02012294.s create mode 100644 include/main_02011DF0.h create mode 100644 include/main_02011F14.h create mode 100644 include/main_0201227C.h create mode 100644 src/main_02011DF0.c create mode 100644 src/main_02011F14.c create mode 100644 src/main_0201227C.c diff --git a/asm/include/main_020107C4.inc b/asm/include/main_020107C4.inc deleted file mode 100644 index 0b50efa5..00000000 --- a/asm/include/main_020107C4.inc +++ /dev/null @@ -1,2 +0,0 @@ -#pragma once -.public BAG_ITEMS_PTR_MIRROR diff --git a/asm/include/main_020107F4.inc b/asm/include/main_02010830.inc similarity index 100% rename from asm/include/main_020107F4.inc rename to asm/include/main_02010830.inc diff --git a/asm/include/main_02010FC4.inc b/asm/include/main_02010FC4.inc index ff23a184..97abe301 100644 --- a/asm/include/main_02010FC4.inc +++ b/asm/include/main_02010FC4.inc @@ -1,80 +1,26 @@ #pragma once -.public _0209889C -.public _020988A4 -.public _020988A8 -.public _020988D0 -.public _020988D4 -.public _020988D8 -.public _02098CB4 -.public _02098CCC -.public _02098D24 -.public _02098D48 -.public _02098D68 -.public _02098DE4 -.public _02098DF4 -.public _02098E04 -.public _02098E0C -.public _02098E14 -.public _02098E58 -.public _02098E9C -.public _020A1878 -.public _020AF6D0 -.public _020AF700 -.public _022A4BD8 -.public _s32_div_f .public ApplyExclusiveItemStatBoosts .public BAG_ITEMS_PTR_MIRROR -.public BitstreamDebug .public CALCIUM_STAT_BOOST -.public ConvertStorageItemAtIdxToBulkItem -.public CopyBitsFrom -.public CopyBitsTo -.public CountNbItemsOfTypeInBag -.public CountNbItemsOfTypeInStorage -.public CountNbOfItemsInStorage -.public Debug_Print0 -.public DUNGEON_MOVE_TABLES +.public CountValidRecycleShopItems .public EXCLUSIVE_ITEM_EFFECT_DATA .public ExclusiveItemEffectFlagTest .public FemaleToMaleForm -.public GetBaseFormCastformDeoxysCherrim +.public GINSENG_CHANCE_3 +.public GUMMI_STAT_BOOST .public GetCurrentBagCapacity -.public GetDungeonResultString -.public GetEquivBulkItemIdxInStorage -.public GetExclusiveItem .public GetExclusiveItemOffset .public GetExclusiveItemParameter .public GetExclusiveItemType .public GetFamilyIndex -.public GetFirstUnequippedItemOfType -.public GetItemAtIdx .public GetItemCategory -.public GetItemCategoryVeneer -.public GetMaxPp .public GetMoveBasePowerGround .public GetMoveMaxGinsengBoostGround -.public GetNbItemsInBag -.public GetPartyMembers -.public GetRank -.public GetScenarioBalance -.public GetTeamMember .public GetType -.public GINSENG_CHANCE_3 -.public GUMMI_STAT_BOOST -.public HasMonsterBeenAttackedInDungeons -.public InitBitstreamForRead -.public InitBitstreamForWrite -.public InitBulkItem .public IQ_GUMMI_GAIN_TABLE .public IRON_STAT_BOOST -.public Is2TurnsMove .public IsGummi -.public IsMonsterValid -.public IsTicketItem .public LIFE_SEED_HP_BOOST -.public LoadFileFromRom -.public LoadScriptVariableValue -.public MaybeUpdateStorage .public MemAlloc .public MemFree .public MemZero @@ -82,30 +28,16 @@ .public ModifyHpStat .public ModifyIqStat .public ModifyOffensiveStat -.public OpenWaza .public PROTEIN_STAT_BOOST -.public Rand16Bit .public RandInt .public RandIntSafe -.public RandRange -.public RECYCLE_SHOP_ITEM_LIST -.public RemoveEmptyItemsInBag -.public RemoveItem -.public RemoveItemAtIdxInStorage -.public ReturnEggExclusiveItem -.public SaveScriptVariableValue -.public SelectWaza -.public SetExclusiveItemEffect -.public SetNbRecycled .public SITRUS_BERRY_FULL_HP_BOOST -.public StringFromId -.public sub_0200D1F0 -.public sub_02010044 -.public SYNTH_BIN_FILE_PTR -.public TYPE_SPECIFIC_EXCLUSIVE_ITEMS -.public UnloadFile -.public vsprintf +.public SaveScriptVariableValue +.public SetExclusiveItemEffect .public WONDER_GUMMI_IQ_GAIN .public WONDER_GUMMI_STAT_BOOST .public ZINC_STAT_BOOST -.public ZInit8 +.public _0209889C +.public _020A1878 +.public sub_0200D1F0 +.public sub_0201297C diff --git a/asm/include/main_02010794.inc b/asm/include/main_02011E24.inc similarity index 100% rename from asm/include/main_02010794.inc rename to asm/include/main_02011E24.inc diff --git a/asm/include/main_02011F60.inc b/asm/include/main_02011F60.inc new file mode 100644 index 00000000..318ab4f7 --- /dev/null +++ b/asm/include/main_02011F60.inc @@ -0,0 +1,15 @@ +#pragma once +.public BAG_ITEMS_PTR_MIRROR +.public CountValidRecycleShopItems +.public FreeRecycleOfferItems +.public GetRank +.public GetScenarioBalance +.public LoadScriptVariableValue +.public RECYCLE_SHOP_ITEM_LIST +.public Rand16Bit +.public SaveScriptVariableValue +.public SetNbRecycled +.public _020988A4 +.public _020988A8 +.public _s32_div_f +.public sub_02011B3C diff --git a/asm/include/main_02012294.inc b/asm/include/main_02012294.inc new file mode 100644 index 00000000..4e903aa2 --- /dev/null +++ b/asm/include/main_02012294.inc @@ -0,0 +1,70 @@ +#pragma once +.public BAG_ITEMS_PTR_MIRROR +.public BitstreamDebug +.public ConvertStorageItemAtIdxToBulkItem +.public CopyBitsFrom +.public CopyBitsTo +.public CountNbItemsOfTypeInBag +.public CountNbItemsOfTypeInStorage +.public CountNbOfItemsInStorage +.public DUNGEON_MOVE_TABLES +.public Debug_Print0 +.public FemaleToMaleForm +.public GetBaseFormCastformDeoxysCherrim +.public GetDungeonResultString +.public GetEquivBulkItemIdxInStorage +.public GetExclusiveItem +.public GetFirstUnequippedItemOfType +.public GetItemAtIdx +.public GetItemCategoryVeneer +.public GetMaxPp +.public GetNbItemsInBag +.public GetPartyMembers +.public GetScenarioBalance +.public GetTeamMember +.public GetType +.public HasMonsterBeenAttackedInDungeons +.public InitBitstreamForRead +.public InitBitstreamForWrite +.public InitBulkItem +.public Is2TurnsMove +.public IsMonsterValid +.public IsTicketItem +.public LoadFileFromRom +.public MaybeUpdateStorage +.public MemAlloc +.public MemFree +.public OpenWaza +.public RECYCLE_SHOP_ITEM_LIST +.public RandInt +.public RandRange +.public RemoveEmptyItemsInBag +.public RemoveItem +.public RemoveItemAtIdxInStorage +.public ReturnEggExclusiveItem +.public SYNTH_BIN_FILE_PTR +.public SelectWaza +.public StringFromId +.public TYPE_SPECIFIC_EXCLUSIVE_ITEMS +.public UnloadFile +.public ZInit8 +.public _020988D0 +.public _020988D4 +.public _020988D8 +.public _02098CB4 +.public _02098CCC +.public _02098D24 +.public _02098D48 +.public _02098D68 +.public _02098DE4 +.public _02098DF4 +.public _02098E04 +.public _02098E0C +.public _02098E14 +.public _02098E58 +.public _02098E9C +.public _020AF6D0 +.public _020AF700 +.public _022A4BD8 +.public sub_02010044 +.public vsprintf diff --git a/asm/main_02010724.s b/asm/main_02010724.s index 7b90a22d..5d57a8c5 100644 --- a/asm/main_02010724.s +++ b/asm/main_02010724.s @@ -21,17 +21,3 @@ _0201073C: _02010750: .word 0x0098967F _02010754: .word BAG_ITEMS_PTR_MIRROR arm_func_end SetMoneyStored - - arm_func_start AddMoneyStored -AddMoneyStored: ; 0x02010758 - ldr r1, _02010774 ; =BAG_ITEMS_PTR_MIRROR - ldr ip, _02010778 ; =SetMoneyStored - ldr r1, [r1] - add r1, r1, #0x1000 - ldr r1, [r1, #0x3a0] - add r0, r1, r0 - bx ip - .align 2, 0 -_02010774: .word BAG_ITEMS_PTR_MIRROR -_02010778: .word SetMoneyStored - arm_func_end AddMoneyStored diff --git a/asm/main_02010794.s b/asm/main_02010794.s deleted file mode 100644 index 5854e073..00000000 --- a/asm/main_02010794.s +++ /dev/null @@ -1,15 +0,0 @@ - .include "asm/macros.inc" - .include "main_02010794.inc" - - .text - - arm_func_start SetEggSpecies -SetEggSpecies: ; 0x02010794 - ldr r1, _020107A8 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r1] - add r1, r1, #0x1300 - strh r0, [r1, #0xa4] - bx lr - .align 2, 0 -_020107A8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SetEggSpecies diff --git a/asm/main_020107C4.s b/asm/main_020107C4.s deleted file mode 100644 index 5faafa0d..00000000 --- a/asm/main_020107C4.s +++ /dev/null @@ -1,15 +0,0 @@ - .include "asm/macros.inc" - .include "main_020107C4.inc" - - .text - - arm_func_start SetUnkGameState0x13a6 -SetUnkGameState0x13a6: ; 0x020107C4 - ldr r1, _020107D8 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r1] - add r1, r1, #0x1300 - strh r0, [r1, #0xa6] - bx lr - .align 2, 0 -_020107D8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SetUnkGameState0x13a6 diff --git a/asm/main_020107F4.s b/asm/main_02010830.s similarity index 94% rename from asm/main_020107F4.s rename to asm/main_02010830.s index e5671a7b..b3263cf9 100644 --- a/asm/main_020107F4.s +++ b/asm/main_02010830.s @@ -1,33 +1,8 @@ .include "asm/macros.inc" - .include "main_020107F4.inc" + .include "main_02010830.inc" .text - arm_func_start SetEggHatchTimer -SetEggHatchTimer: ; 0x020107F4 - ldr r1, _02010808 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r1] - add r1, r1, #0x1300 - strh r0, [r1, #0xa8] - bx lr - .align 2, 0 -_02010808: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SetEggHatchTimer - - arm_func_start DecrementEggHatchTimer -DecrementEggHatchTimer: ; 0x0201080C - ldr r0, _0201082C ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, #0x1300 - ldrh r1, [r0, #0xa8] - cmp r1, #0 - subne r1, r1, #1 - strneh r1, [r0, #0xa8] - bx lr - .align 2, 0 -_0201082C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end DecrementEggHatchTimer - arm_func_start RemoveInvalidKecleonShop1Items RemoveInvalidKecleonShop1Items: ; 0x02010830 ldr r1, _02010868 ; =BAG_ITEMS_PTR_MIRROR @@ -212,7 +187,7 @@ _02010A58: cmp r4, #8 blt _02010A58 ldr r0, _02010AC0 ; =KECLEON_SHOP_ITEM_TABLE_LISTS_1 - ldr r5, _02010AC4 ; =0x0000270F + ldr r5, _02010AC4 ldr r6, [r0, r8, lsl #2] mov r7, #0 _02010A7C: @@ -461,7 +436,7 @@ _02010D64: ldr r0, _02010DC4 ; =KECLEON_SHOP_ITEM_TABLE_LISTS_2 mov r7, #0 ldr r6, [r0, r5, lsl #2] - ldr r5, _02010DC8 ; =0x0000270F + ldr r5, _02010DC8 _02010D88: mov r0, r5 bl RandIntSafe diff --git a/asm/main_02010FC4.s b/asm/main_02010FC4.s index 0f2861bf..781a13be 100644 --- a/asm/main_02010FC4.s +++ b/asm/main_02010FC4.s @@ -1080,2073 +1080,3 @@ _02011DDC: str r0, [r4] ldmia sp!, {r4, pc} arm_func_end FreeRecycleOfferItems - - arm_func_start GetRecycleItemId -GetRecycleItemId: ; 0x02011DF0 - ldr r0, [r0] - ldrsh r0, [r0] - bx lr - arm_func_end GetRecycleItemId - - arm_func_start RecycleItemHasTradeTypePrizeTicket -RecycleItemHasTradeTypePrizeTicket: ; 0x02011DFC - ldr r0, [r0] - ldr r0, [r0, #4] - cmp r0, #1 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end RecycleItemHasTradeTypePrizeTicket - - arm_func_start GetRecycleItemBonusOdds -GetRecycleItemBonusOdds: ; 0x02011E18 - ldr r0, [r0] - ldrh r0, [r0, #0x12] - bx lr - arm_func_end GetRecycleItemBonusOdds - - arm_func_start CountTradedRecycleItems -CountTradedRecycleItems: ; 0x02011E24 - mov ip, #0 - mov r3, ip - b _02011E58 -_02011E30: - ldr r2, [r0] - mov r1, r3, lsl #2 - add r2, r2, #0x14 - ldrsh r1, [r2, r1] - add r2, r2, r3, lsl #2 - cmp r1, #0 - beq _02011E60 - ldrsh r1, [r2, #2] - add r3, r3, #1 - add ip, ip, r1 -_02011E58: - cmp r3, #4 - blt _02011E30 -_02011E60: - mov r0, ip - bx lr - arm_func_end CountTradedRecycleItems - - arm_func_start sub_02011E68 -sub_02011E68: ; 0x02011E68 - stmdb sp!, {r3, lr} - mov lr, #0 - b _02011EB4 -_02011E74: - ldr r2, [r0] - mov r1, lr, lsl #2 - add r2, r2, #0x14 - ldrsh r1, [r2, r1] - add ip, r2, lr, lsl #2 - cmp r1, #0 - beq _02011EBC - add r1, r0, lr, lsl #1 - ldrsh r3, [r1, #4] - ldrsh r2, [r1, #0xc] - ldrsh r1, [ip, #2] - add r2, r3, r2 - cmp r2, r1 - movlt r0, #0 - ldmltia sp!, {r3, pc} - add lr, lr, #1 -_02011EB4: - cmp lr, #4 - blt _02011E74 -_02011EBC: - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end sub_02011E68 - - arm_func_start RecycleShopTradeIsNonspecific -RecycleShopTradeIsNonspecific: ; 0x02011EC4 - ldr r1, [r0] - ldr r0, _02011EE4 ; =0x00000578 - ldrsh r1, [r1, #0x14] - cmp r1, r0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_02011EE4: .word 0x00000578 - arm_func_end RecycleShopTradeIsNonspecific - - arm_func_start RecycleShopOfferExists -RecycleShopOfferExists: ; 0x02011EE8 - ldr r0, _02011F10 ; =BAG_ITEMS_PTR_MIRROR - mvn r1, #0 - ldr r0, [r0] - add r0, r0, #0x1300 - ldrsh r0, [r0, #0xb2] - cmp r0, r1 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_02011F10: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RecycleShopOfferExists - - arm_func_start ClearRecycleShopOffer -ClearRecycleShopOffer: ; 0x02011F14 - ldr r0, _02011F2C ; =BAG_ITEMS_PTR_MIRROR - mvn r1, #0 - ldr r0, [r0] - add r0, r0, #0x1300 - strh r1, [r0, #0xb2] - bx lr - .align 2, 0 -_02011F2C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end ClearRecycleShopOffer - - arm_func_start GetGameStateRecycleCount -GetGameStateRecycleCount: ; 0x02011F30 - ldr r0, _02011F44 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, #0x1000 - ldr r0, [r0, #0x3ac] - bx lr - .align 2, 0 -_02011F44: .word BAG_ITEMS_PTR_MIRROR - arm_func_end GetGameStateRecycleCount - - arm_func_start GetRankForRecycleShop -GetRankForRecycleShop: ; 0x02011F48 - ldr r0, _02011F5C ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, #0x1000 - ldrb r0, [r0, #0x3aa] - bx lr - .align 2, 0 -_02011F5C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end GetRankForRecycleShop - - arm_func_start IncrementRecycleCountVar -IncrementRecycleCountVar: ; 0x02011F60 - stmdb sp!, {r4, lr} - mov r0, #0 - mov r1, #0x6c - bl LoadScriptVariableValue - add r4, r0, #1 - ldr r1, _02011F9C ; =0x000F423F - mov r0, #0 - cmp r4, r1 - movgt r4, r1 - mov r2, r4 - mov r1, #0x6c - bl SaveScriptVariableValue - mov r0, r4 - bl SetNbRecycled - ldmia sp!, {r4, pc} - .align 2, 0 -_02011F9C: .word 0x000F423F - arm_func_end IncrementRecycleCountVar - - arm_func_start UpdateRecycleShop -UpdateRecycleShop: ; 0x02011FA0 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r0, #0 - mov r1, #0x71 - bl LoadScriptVariableValue - and r0, r0, #0xff - cmp r0, #1 - bne _0201207C - ldr r1, _02012214 ; =BAG_ITEMS_PTR_MIRROR - mov r0, #3 - ldr r1, [r1] - add r1, r1, #0x1000 - ldrb r6, [r1, #0x3aa] - ldr r5, [r1, #0x3ac] - mov r1, r6 - mov r2, r5 - bl CountValidRecycleShopItems - mov r4, r0 - mov r1, r6 - mov r2, r5 - mov r0, #2 - bl CountValidRecycleShopItems - sub r4, r4, r0 - mov r0, #0 - mov r1, #0x6c - bl LoadScriptVariableValue - ldr r1, _02012214 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r1] - add r1, r1, #0x1000 - str r0, [r1, #0x3ac] - bl GetRank - ldr r2, _02012214 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r2] - add r1, r1, #0x1000 - strb r0, [r1, #0x3aa] - ldr r1, [r2] - mov r0, #3 - add r1, r1, #0x1000 - ldr r5, [r1, #0x3ac] - ldrb r6, [r1, #0x3aa] - mov r2, r5 - mov r1, r6 - bl CountValidRecycleShopItems - mov r1, r6 - mov r2, r5 - mov r5, r0 - mov r0, #2 - bl CountValidRecycleShopItems - sub r0, r5, r0 - cmp r0, r4 - ble _0201207C - mov r0, #0 - mov r1, #0x6a - mov r2, #1 - bl SaveScriptVariableValue -_0201207C: - mov r0, #0 - mov r1, #0x6b - bl LoadScriptVariableValue - tst r0, #0xff - bne _02012104 - mov r0, #0 - mov r1, #0x6d - bl LoadScriptVariableValue - mov r4, r0 - cmp r4, #5 - bge _02012104 - ldr r0, _02012214 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, _02012218 ; =_020988A4 - ldr r0, [r0] - ldr r1, [r1, r4, lsl #3] - add r0, r0, #0x1000 - ldr r0, [r0, #0x3ac] - cmp r0, r1 - blt _02012104 - bl GetScenarioBalance - ldr r1, _0201221C ; =_020988A8 - mov r2, r4, lsl #3 - ldrsh r1, [r1, r2] - and r1, r1, #0xff - cmp r0, r1 - blo _02012104 - add r2, r4, #1 - mov r0, #0 - mov r1, #0x6d - bl SaveScriptVariableValue - mov r0, #0 - mov r1, #0x6b - mov r2, #1 - bl SaveScriptVariableValue -_02012104: - ldr r0, _02012214 ; =BAG_ITEMS_PTR_MIRROR - mvn r1, #0 - ldr r0, [r0] - add r0, r0, #0x1300 - ldrsh r0, [r0, #0xb2] - cmp r0, r1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _0201213C - bl IsRecycleOfferCooldownOver - cmp r0, #0 - moveq r2, #0 - beq _02012200 -_0201213C: - ldr r1, _02012214 ; =BAG_ITEMS_PTR_MIRROR - mov r0, #2 - ldr r1, [r1] - add r2, r1, #0x1000 - ldrb r1, [r2, #0x3aa] - ldr r2, [r2, #0x3ac] - bl sub_02011B3C - mov r4, r0 - str r4, [sp] - ldr r0, [r4, #4] - cmp r0, #0 - bne _02012184 - ldr r0, _02012214 ; =BAG_ITEMS_PTR_MIRROR - mvn r1, #0 - ldr r0, [r0] - add r0, r0, #0x1300 - strh r1, [r0, #0xb2] - b _020121E0 -_02012184: - bl Rand16Bit - ldr r1, [r4, #4] - bl _s32_div_f - mov r0, #0x18 - mul r0, r1, r0 - ldr r1, [r4] - ldr r2, _02012220 ; =RECYCLE_SHOP_ITEM_LIST - ldr r1, [r1, r0] - mov r3, #0 - b _020121C4 -_020121AC: - cmp r2, r1 - beq _020121D0 - add r0, r3, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 - add r2, r2, #0x24 -_020121C4: - cmp r3, #0x18 - blt _020121AC - mvn r3, #0 -_020121D0: - ldr r0, _02012214 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, #0x1300 - strh r3, [r0, #0xb2] -_020121E0: - add r0, sp, #0 - bl FreeRecycleOfferItems - ldr r0, _02012214 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #2 - ldr r0, [r0] - mov r2, #1 - add r0, r0, #0x1300 - strh r1, [r0, #0xb0] -_02012200: - cmp r2, #0 - bne _0201220C - bl DecrementRecycleOfferCooldown -_0201220C: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02012214: .word BAG_ITEMS_PTR_MIRROR -_02012218: .word _020988A4 -_0201221C: .word _020988A8 -_02012220: .word RECYCLE_SHOP_ITEM_LIST - arm_func_end UpdateRecycleShop - - arm_func_start DecrementRecycleOfferCooldown -DecrementRecycleOfferCooldown: ; 0x02012224 - stmdb sp!, {r3, lr} - bl IsRecycleOfferCooldownOver - cmp r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _02012250 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, #0x1300 - ldrsh r1, [r0, #0xb0] - sub r1, r1, #1 - strh r1, [r0, #0xb0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02012250: .word BAG_ITEMS_PTR_MIRROR - arm_func_end DecrementRecycleOfferCooldown - - arm_func_start IsRecycleOfferCooldownOver -IsRecycleOfferCooldownOver: ; 0x02012254 - ldr r0, _02012278 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, #0x1300 - ldrsh r0, [r0, #0xb0] - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_02012278: .word BAG_ITEMS_PTR_MIRROR - arm_func_end IsRecycleOfferCooldownOver - - arm_func_start GetRecycleOfferCooldown -GetRecycleOfferCooldown: ; 0x0201227C - ldr r0, _02012290 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, #0x1300 - ldrsh r0, [r0, #0xb0] - bx lr - .align 2, 0 -_02012290: .word BAG_ITEMS_PTR_MIRROR - arm_func_end GetRecycleOfferCooldown - - arm_func_start sub_02012294 -sub_02012294: ; 0x02012294 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov fp, r0 - mov r0, #8 - mov r1, #6 - bl MemAlloc - mov r8, #0 - mov r4, r0 - mov r7, r8 - mov r6, r8 - bl CountNbOfItemsInStorage - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - cmp r5, #0 - ble _02012324 - mov r0, r5, lsl #2 - mov r1, #6 - bl MemAlloc - mov sb, r6 - mov r8, r0 - mov sl, sb - b _0201231C -_020122E8: - mov r0, sb - bl sub_02010044 - mov r1, fp - bl RecycleShopIsTradableItem - cmp r0, #0 - moveq r1, r6, lsl #2 - addeq r0, r8, r6, lsl #2 - streqh sb, [r8, r1] - streqb sl, [r0, #2] - add r0, sb, #1 - mov r0, r0, lsl #0x10 - addeq r6, r6, #1 - mov sb, r0, asr #0x10 -_0201231C: - cmp sb, r5 - blt _020122E8 -_02012324: - mov r5, #0 - bl GetNbItemsInBag - mov r0, r0, lsl #0x10 - mov sb, r0, asr #0x10 - cmp sb, #0 - ble _0201239C - mov r0, sb, lsl #2 - mov r1, #6 - bl MemAlloc - mov r7, r0 - mov sl, r5 - b _02012394 -_02012354: - mov r0, sl - bl GetItemAtIdx - ldrsh r0, [r0, #4] - mov r1, fp - bl RecycleShopIsTradableItem - cmp r0, #0 - bne _02012388 - mov r0, r5, lsl #2 - add r1, r7, r5, lsl #2 - strh sl, [r7, r0] - mov r0, #0 - strb r0, [r1, #2] - add r5, r5, #1 -_02012388: - add r0, sl, #1 - mov r0, r0, lsl #0x10 - mov sl, r0, asr #0x10 -_02012394: - cmp sl, sb - blt _02012354 -_0201239C: - cmp r5, #0 - beq _020123B4 - mov r1, r6, lsr #0x1f - rsb r0, r1, r6, lsl #29 - adds r0, r1, r0, ror #29 - bne _020123BC -_020123B4: - mov sb, #0 - b _020123C0 -_020123BC: - rsb sb, r0, #8 -_020123C0: - add r0, r5, r6 - adds r0, sb, r0 - str r0, [r4, #4] - moveq r0, #0 - streq r0, [r4] - beq _020124B0 - mov r0, r0, lsl #3 - mov r1, #6 - bl MemAlloc - str r0, [r4] - mov sl, #0 - mov r3, #1 - b _02012418 -_020123F4: - str r3, [r0] - mov r1, sl, lsl #2 - ldrsh r2, [r8, r1] - add r1, r8, sl, lsl #2 - add sl, sl, #1 - strh r2, [r0, #4] - ldrb r1, [r1, #2] - strb r1, [r0, #7] - add r0, r0, #8 -_02012418: - cmp sl, r6 - blt _020123F4 - mov r6, #0 - mov r3, #2 - mvn r2, #0 - mov r1, r6 - b _02012448 -_02012434: - str r3, [r0] - strh r2, [r0, #4] - strb r1, [r0, #7] - add r6, r6, #1 - add r0, r0, #8 -_02012448: - cmp r6, sb - blt _02012434 - mov r6, #0 - mov r3, r6 - b _02012480 -_0201245C: - str r3, [r0] - mov r1, r6, lsl #2 - ldrsh r2, [r7, r1] - add r1, r7, r6, lsl #2 - add r6, r6, #1 - strh r2, [r0, #4] - ldrb r1, [r1, #2] - strb r1, [r0, #7] - add r0, r0, #8 -_02012480: - cmp r6, r5 - blt _0201245C - mov r3, #0 - ldr r2, [r4] - mov r1, r3 - b _020124A4 -_02012498: - strb r1, [r2, #6] - add r3, r3, #1 - add r2, r2, #8 -_020124A4: - ldr r0, [r4, #4] - cmp r3, r0 - blt _02012498 -_020124B0: - cmp r7, #0 - beq _020124C0 - mov r0, r7 - bl MemFree -_020124C0: - cmp r8, #0 - beq _020124D0 - mov r0, r8 - bl MemFree -_020124D0: - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end sub_02012294 - - arm_func_start sub_020124D8 -sub_020124D8: ; 0x020124D8 - stmdb sp!, {r3, lr} - ldr r1, [r0] - cmp r1, #0 - bne _020124F8 - ldrsh r0, [r0, #4] - bl GetItemAtIdx - ldrsh r0, [r0, #4] - ldmia sp!, {r3, pc} -_020124F8: - cmp r1, #1 - movne r0, #0 - ldmneia sp!, {r3, pc} - ldrsh r0, [r0, #4] - add r1, sp, #0 - bl ConvertStorageItemAtIdxToBulkItem - ldrsh r0, [sp] - ldmia sp!, {r3, pc} - arm_func_end sub_020124D8 - - arm_func_start sub_02012518 -sub_02012518: ; 0x02012518 - stmdb sp!, {r3, lr} - ldr r1, [r0] - cmp r1, #0 - bne _02012538 - ldrsh r0, [r0, #4] - bl GetItemAtIdx - ldrh r0, [r0, #2] - ldmia sp!, {r3, pc} -_02012538: - cmp r1, #1 - ldrne r0, _02012558 ; =0x0000FFFF - ldmneia sp!, {r3, pc} - ldrsh r0, [r0, #4] - add r1, sp, #0 - bl ConvertStorageItemAtIdxToBulkItem - ldrh r0, [sp, #2] - ldmia sp!, {r3, pc} - .align 2, 0 -_02012558: .word 0x0000FFFF - arm_func_end sub_02012518 - - arm_func_start sub_0201255C -sub_0201255C: ; 0x0201255C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r0, #8 - mov r1, #6 - bl MemAlloc - ldr r1, [r5, #4] - mov r4, r0 - mov r0, r1, lsl #3 - mov r1, #6 - bl MemAlloc - str r0, [r4] - mov ip, #0 - b _020125B4 -_02012590: - ldr r1, [r5] - ldr r3, [r4] - add r0, r1, ip, lsl #3 - ldr r2, [r1, ip, lsl #3] - ldr r1, [r0, #4] - add r0, r3, ip, lsl #3 - str r2, [r3, ip, lsl #3] - str r1, [r0, #4] - add ip, ip, #1 -_020125B4: - ldr r1, [r5, #4] - cmp ip, r1 - blt _02012590 - mov r0, r4 - str r1, [r4, #4] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_0201255C - - arm_func_start sub_020125CC -sub_020125CC: ; 0x020125CC - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, [r4] - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, [r0] - bl MemFree - ldr r0, [r4] - bl MemFree - mov r0, #0 - str r0, [r4] - ldmia sp!, {r4, pc} - arm_func_end sub_020125CC - - arm_func_start RecycleShopIsNotThrownItem -RecycleShopIsNotThrownItem: ; 0x020125FC - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetItemCategoryVeneer - cmp r0, #0 - beq _02012620 - mov r0, r4 - bl GetItemCategoryVeneer - cmp r0, #1 - bne _02012628 -_02012620: - mov r0, #1 - ldmia sp!, {r4, pc} -_02012628: - mov r0, #0 - ldmia sp!, {r4, pc} - arm_func_end RecycleShopIsNotThrownItem - - arm_func_start RecycleShopIsTradableItem -RecycleShopIsTradableItem: ; 0x02012630 - stmdb sp!, {r4, lr} - mov r4, r0 - cmp r1, #0 - beq _02012650 - bl IsTicketItem - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r4, pc} -_02012650: - mov r0, r4 - bl RecycleShopIsNotThrownItem - ldmia sp!, {r4, pc} - arm_func_end RecycleShopIsTradableItem - - arm_func_start RecycleShopCountTradableItemsInBag -RecycleShopCountTradableItemsInBag: ; 0x0201265C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r1, _020126C4 ; =BAG_ITEMS_PTR_MIRROR - mov r4, #0 - ldr r1, [r1] - mov r5, r0 - ldr r8, [r1, #0x384] - mov sb, r4 - mov r6, r4 - mov r7, #1 -_02012680: - ldrb r0, [r8] - tst r0, #1 - movne r0, r7 - moveq r0, r6 - tst r0, #0xff - beq _020126AC - ldrsh r0, [r8, #4] - mov r1, r5 - bl RecycleShopIsTradableItem - cmp r0, #0 - addeq r4, r4, #1 -_020126AC: - add sb, sb, #1 - cmp sb, #0x32 - add r8, r8, #6 - blt _02012680 - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_020126C4: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RecycleShopCountTradableItemsInBag - - arm_func_start RecycleShopCountTradableItemsInStorage -RecycleShopCountTradableItemsInStorage: ; 0x020126C8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r5, #0 - ldr r4, _02012718 ; =BAG_ITEMS_PTR_MIRROR - mov r7, r0 - mov r6, r5 -_020126DC: - ldr r0, [r4] - add r0, r0, r6, lsl #1 - add r0, r0, #0x300 - ldrsh r0, [r0, #0x8a] - cmp r0, #0 - beq _02012704 - mov r1, r7 - bl RecycleShopIsTradableItem - cmp r0, #0 - addeq r5, r5, #1 -_02012704: - add r6, r6, #1 - cmp r6, #0x3e8 - blt _020126DC - mov r0, r5 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02012718: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RecycleShopCountTradableItemsInStorage - - arm_func_start sub_0201271C -sub_0201271C: ; 0x0201271C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - mov sl, r0 - ldrsh r0, [sl, #0x14] - ldr r6, [sl] - mov r8, #0 - str r0, [sp] - b _02012854 -_0201273C: - add r5, r6, #0x14 - mov r4, r8, lsl #2 - ldrsh r1, [r5, r4] - add r0, sp, #4 - bl InitBulkItem - add r1, r6, r8, lsl #2 - add r0, sl, r8, lsl #1 - ldrsh r7, [r1, #0x16] - ldrsh fp, [r0, #0xc] - mov sb, #0 - b _02012780 -_02012768: - add r0, sp, #4 - bl GetEquivBulkItemIdxInStorage - bl RemoveItemAtIdxInStorage - cmp r0, #0 - subne r7, r7, #1 - add sb, sb, #1 -_02012780: - cmp sb, fp - bge _02012790 - cmp r7, #0 - bgt _02012768 -_02012790: - cmp r7, #0 - ble _020127CC - add r0, sl, r8, lsl #1 - ldrsh fp, [r0, #4] - mov sb, #0 - b _020127BC -_020127A8: - ldrsh r0, [sp, #4] - bl GetFirstUnequippedItemOfType - bl RemoveItem - sub r7, r7, #1 - add sb, sb, #1 -_020127BC: - cmp sb, fp - bge _020127CC - cmp r7, #0 - bgt _020127A8 -_020127CC: - ldrsh r0, [r5, r4] - ldr r1, _02012870 ; =0x00000578 - cmp r0, r1 - bne _02012834 - ldrsh r0, [r6] - bl IsTicketItem - cmp r0, #0 - beq _02012810 - mov r0, #1 - bl RecycleShopCountTradableItemsInBag - add r1, sl, r8, lsl #1 - strh r0, [r1, #4] - mov r0, #1 - bl RecycleShopCountTradableItemsInStorage - add r1, sl, r8, lsl #1 - strh r0, [r1, #0xc] - b _02012850 -_02012810: - mov r0, #0 - bl RecycleShopCountTradableItemsInBag - add r1, sl, r8, lsl #1 - strh r0, [r1, #4] - mov r0, #0 - bl RecycleShopCountTradableItemsInStorage - add r1, sl, r8, lsl #1 - strh r0, [r1, #0xc] - b _02012850 -_02012834: - bl CountNbItemsOfTypeInBag - add r1, sl, r8, lsl #1 - strh r0, [r1, #4] - ldrsh r0, [r5, r4] - bl CountNbItemsOfTypeInStorage - add r1, sl, r8, lsl #1 - strh r0, [r1, #0xc] -_02012850: - add r8, r8, #1 -_02012854: - ldr r0, [sp] - cmp r8, r0 - blt _0201273C - bl RemoveEmptyItemsInBag - bl MaybeUpdateStorage - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02012870: .word 0x00000578 - arm_func_end sub_0201271C - - arm_func_start sub_02012874 -sub_02012874: ; 0x02012874 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r4, #0 - b _020128C4 -_02012884: - ldr r0, [r5] - add r1, r0, r4, lsl #3 - ldrb r0, [r1, #6] - cmp r0, #0 - beq _020128C0 - ldr r0, [r1] - cmp r0, #0 - bne _020128B0 - ldrsh r0, [r1, #4] - bl RemoveItem - b _020128C0 -_020128B0: - cmp r0, #1 - bne _020128C0 - ldrsh r0, [r1, #4] - bl RemoveItemAtIdxInStorage -_020128C0: - add r4, r4, #1 -_020128C4: - ldr r0, [r5, #4] - cmp r4, r0 - blt _02012884 - bl RemoveEmptyItemsInBag - bl MaybeUpdateStorage - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02012874 - - arm_func_start CountValidRecycleShopItems -CountValidRecycleShopItems: ; 0x020128DC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r7, #0 - mov fp, #0x24 - ldr r5, _02012950 ; =RECYCLE_SHOP_ITEM_LIST - mov sl, r0 - mov sb, r1 - mov r8, r2 - mov r6, r7 - mov r4, fp -_02012900: - cmp sl, #3 - beq _02012920 - mla r0, r6, r4, r5 - ldr r1, [r0, #4] - mov r0, sl - bl IsRecycleTradeTypeValid - cmp r0, #0 - beq _0201293C -_02012920: - mla r1, r6, fp, r5 - ldrb r0, [r1, #8] - cmp r0, sb - bhi _0201293C - ldr r0, [r1, #0xc] - cmp r0, r8 - addle r7, r7, #1 -_0201293C: - add r6, r6, #1 - cmp r6, #0x18 - blt _02012900 - mov r0, r7 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02012950: .word RECYCLE_SHOP_ITEM_LIST - arm_func_end CountValidRecycleShopItems - - arm_func_start IsRecycleTradeTypeValid -IsRecycleTradeTypeValid: ; 0x02012954 - cmp r0, r1 - beq _0201296C - cmp r0, #0 - bne _02012974 - cmp r1, #2 - beq _02012974 -_0201296C: - mov r0, #1 - bx lr -_02012974: - mov r0, #0 - bx lr - arm_func_end IsRecycleTradeTypeValid - - arm_func_start sub_0201297C -sub_0201297C: ; 0x0201297C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r4, #0x24 - smulbb r4, r1, r4 - ldr r1, _02012AA4 ; =_020988D0 - mov sl, r0 - ldr r1, [r1, r4] - mov r0, r2 - mov r5, r3 - bl IsRecycleTradeTypeValid - cmp r0, #0 - beq _02012A9C - ldr r0, _02012AA8 ; =_020988D4 - ldrb r0, [r0, r4] - cmp r0, r5 - bhi _02012A9C - ldr r1, _02012AAC ; =_020988D8 - ldr r0, [sp, #0x28] - ldr r1, [r1, r4] - cmp r1, r0 - bgt _02012A9C - ldr r0, _02012AB0 ; =RECYCLE_SHOP_ITEM_LIST - mov sb, #0 - add r0, r0, r4 - mov r6, #1 - str r0, [sl] - mov fp, sb - mov r5, r6 - ldr r4, _02012AB4 ; =0x00000578 - b _02012A88 -_020129F0: - ldr r1, [sl] - mov r7, sb, lsl #2 - add r8, r1, #0x14 - ldrsh r0, [r8, r7] - cmp r0, #0 - beq _02012A90 - cmp r0, r4 - bne _02012A68 - ldrsh r0, [r1] - bl IsTicketItem - cmp r0, #0 - beq _02012A44 - mov r0, r6 - bl RecycleShopCountTradableItemsInBag - add r1, sl, sb, lsl #1 - strh r0, [r1, #4] - mov r0, r5 - bl RecycleShopCountTradableItemsInStorage - add r1, sl, sb, lsl #1 - strh r0, [r1, #0xc] - b _02012A84 -_02012A44: - mov r0, fp - bl RecycleShopCountTradableItemsInBag - add r1, sl, sb, lsl #1 - strh r0, [r1, #4] - mov r0, #0 - bl RecycleShopCountTradableItemsInStorage - add r1, sl, sb, lsl #1 - strh r0, [r1, #0xc] - b _02012A84 -_02012A68: - bl CountNbItemsOfTypeInBag - add r1, sl, sb, lsl #1 - strh r0, [r1, #4] - ldrsh r0, [r8, r7] - bl CountNbItemsOfTypeInStorage - add r1, sl, sb, lsl #1 - strh r0, [r1, #0xc] -_02012A84: - add sb, sb, #1 -_02012A88: - cmp sb, #4 - blt _020129F0 -_02012A90: - strh sb, [sl, #0x14] - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_02012A9C: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02012AA4: .word _020988D0 -_02012AA8: .word _020988D4 -_02012AAC: .word _020988D8 -_02012AB0: .word RECYCLE_SHOP_ITEM_LIST -_02012AB4: .word 0x00000578 - arm_func_end sub_0201297C - - arm_func_start ClearCroagunkItems -ClearCroagunkItems: ; 0x02012AB8 - mov r3, #0 - ldr r0, _02012ADC ; =_022A4BD8 - mov r2, r3 -_02012AC4: - mov r1, r3, lsl #1 - add r3, r3, #1 - strh r2, [r0, r1] - cmp r3, #8 - blt _02012AC4 - bx lr - .align 2, 0 -_02012ADC: .word _022A4BD8 - arm_func_end ClearCroagunkItems - - arm_func_start LoadSynthBin -LoadSynthBin: ; 0x02012AE0 - stmdb sp!, {r3, lr} - ldr r0, _02012B28 ; =_020AF6D0 - ldr r0, [r0, #4] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - movne r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _02012B2C ; =SYNTH_BIN_FILE_PTR - ldr r1, _02012B30 ; =_02098CB4 - mov r2, #0xe - bl LoadFileFromRom - ldr r1, _02012B28 ; =_020AF6D0 - mov r0, #1 - ldr r2, [r1, #4] - str r2, [r1] - ldmia sp!, {r3, pc} - .align 2, 0 -_02012B28: .word _020AF6D0 -_02012B2C: .word SYNTH_BIN_FILE_PTR -_02012B30: .word _02098CB4 - arm_func_end LoadSynthBin - - arm_func_start CloseSynthBin -CloseSynthBin: ; 0x02012B34 - stmdb sp!, {r3, lr} - ldr r0, _02012B74 ; =_020AF6D0 - ldr r0, [r0, #4] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - ldmeqia sp!, {r3, pc} - ldr r0, _02012B78 ; =SYNTH_BIN_FILE_PTR - bl UnloadFile - ldr r0, _02012B74 ; =_020AF6D0 - mov r1, #0 - str r1, [r0, #4] - str r1, [r0, #8] - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02012B74: .word _020AF6D0 -_02012B78: .word SYNTH_BIN_FILE_PTR - arm_func_end CloseSynthBin - - arm_func_start GenerateCroagunkItems -GenerateCroagunkItems: ; 0x02012B7C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x160 - bl GetScenarioBalance - ldr r1, _02013098 ; =_020AF6D0 - str r0, [sp, #8] - ldr r0, [r1, #4] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - movne r7, #0 - bne _02012BB4 - mov r7, #1 - bl LoadSynthBin -_02012BB4: - ldr r0, _0201309C ; =0x000045E0 - mov r1, #0xf - bl MemAlloc - mov r1, #0 - mov r4, r0 - mov r5, r1 - add r0, sp, #0x2c -_02012BD0: - strb r5, [r0, r1] - add r1, r1, #1 - cmp r1, #0x12 - blt _02012BD0 - ldr r0, _020130A0 ; =_02098CCC - mov r6, r5 - bl Debug_Print0 - add r0, sp, #0x24 - bl GetPartyMembers - str r0, [sp, #0xc] - mov r0, #0 - mov r1, #3 - bl RandRange - mov r8, #0 - mov fp, r0 - mov sl, r8 - b _02012C78 -_02012C14: - mov r1, sl, lsl #1 - add r0, sp, #0x24 - ldrsh r0, [r0, r1] - bl GetTeamMember - ldrsh r0, [r0, #4] - mov sb, #0 - bl FemaleToMaleForm - bl GetBaseFormCastformDeoxysCherrim - mov r3, sb - b _02012C58 -_02012C3C: - mov r2, r3, lsl #1 - add r1, sp, #0x1c - ldrsh r1, [r1, r2] - cmp r0, r1 - moveq sb, #1 - beq _02012C60 - add r3, r3, #1 -_02012C58: - cmp r3, r8 - blt _02012C3C -_02012C60: - cmp sb, #0 - moveq r2, r8, lsl #1 - addeq r1, sp, #0x1c - streqh r0, [r1, r2] - addeq r8, r8, #1 - add sl, sl, #1 -_02012C78: - ldr r0, [sp, #0xc] - cmp sl, r0 - blt _02012C14 - ldr r0, _020130A4 ; =_02098D24 - mov r2, #0 - mov r1, fp - mov r3, r8 - mov sb, r8 - str r2, [sp] - bl Debug_Print0 - add r0, r4, #0x12c - add r0, r0, #0x800 - str r0, [sp, #0x14] - mvn r0, #0 - str r0, [sp, #0x18] - b _02012D28 -_02012CB8: - mov r0, r8 - bl RandInt - str r0, [sp, #4] - mov r1, r0, lsl #1 - add r0, sp, #0x1c - ldrsh sl, [r0, r1] - cmp sl, #0 - blt _02012D28 - ldr r1, [sp, #0x14] - mov r2, #0x1c - mla r1, r6, r2, r1 - mov r0, sl - add r2, sp, #0x2c - bl GetValidSynthsForSpecies - cmp r0, #0 - addne r0, r4, r5, lsl #1 - addne r0, r0, #0x900 - strneh sl, [r0, #6] - ldr r0, [sp, #4] - ldr r1, [sp, #0x18] - mov r2, r0, lsl #1 - add r0, sp, #0x1c - sub sb, sb, #1 - addne r6, r6, #1 - addne r5, r5, #1 - strh r1, [r0, r2] - cmp sb, #0 - ble _02012D38 -_02012D28: - cmp r5, fp - bge _02012D38 - cmp r8, r5 - bgt _02012CB8 -_02012D38: - ldr fp, _020130A8 ; =0x00000229 - str r5, [sp, #0x10] - mov sl, #0 - mov sb, #1 -_02012D48: - mov r0, sb, lsl #0x10 - mov r0, r0, asr #0x10 - bl FemaleToMaleForm - bl GetBaseFormCastformDeoxysCherrim - mov r8, r0 - bl IsMonsterValid - cmp r0, #0 - beq _02012D80 - mov r0, r8 - bl HasMonsterBeenAttackedInDungeons - cmp r0, #0 - movne r0, sl, lsl #1 - strneh r8, [r4, r0] - addne sl, sl, #1 -_02012D80: - add sb, sb, #1 - cmp sb, fp - ble _02012D48 - b _02012E34 -_02012D90: - mov r0, sl - mov fp, #0 - bl RandInt - mov r8, r0 - mov r0, r8, lsl #1 - ldrsh sb, [r4, r0] - mov r1, fp - b _02012DCC -_02012DB0: - add r0, r4, r1, lsl #1 - add r0, r0, #0x900 - ldrsh r0, [r0, #6] - cmp sb, r0 - moveq fp, #1 - beq _02012DD4 - add r1, r1, #1 -_02012DCC: - cmp r1, r5 - blt _02012DB0 -_02012DD4: - cmp fp, #0 - bne _02012E10 - add r0, r4, #0x12c - add r1, r0, #0x800 - mov r0, #0x1c - mla r1, r6, r0, r1 - add r2, sp, #0x2c - mov r0, sb - bl GetValidSynthsForSpecies - cmp r0, #0 - addne r0, r4, r5, lsl #1 - addne r0, r0, #0x900 - strneh sb, [r0, #6] - addne r6, r6, #1 - addne r5, r5, #1 -_02012E10: - sub sl, sl, #1 - b _02012E2C -_02012E18: - add r0, r4, r8, lsl #1 - ldrsh r0, [r0, #2] - mov r1, r8, lsl #1 - add r8, r8, #1 - strh r0, [r4, r1] -_02012E2C: - cmp r8, sl - blt _02012E18 -_02012E34: - cmp r5, #0x10 - ldrlt r0, [sp, #0x10] - sublt r0, r5, r0 - cmplt r0, sl - blt _02012D90 - mov r8, #0 - mov sb, r8 -_02012E50: - add r0, sp, #0x2c - ldrb r0, [r0, sb] - cmp r0, #0 - beq _02012EB0 - ldr r0, _020130AC ; =TYPE_SPECIFIC_EXCLUSIVE_ITEMS - and r5, sb, #0xff - mov sl, #0 - add fp, r0, r5, lsl #3 -_02012E70: - cmp r5, #0x12 - movhs r0, #0 - addlo r0, fp, sl, lsl #1 - ldrlosh r0, [r0, #-8] - bl GetSynthItem - cmp r0, #0 - beq _02012EA4 - ldrh r2, [r0, #6] - ldr r1, [sp, #8] - cmp r2, r1 - addle r1, sp, #0x40 - strle r0, [r1, r8, lsl #2] - addle r8, r8, #1 -_02012EA4: - add sl, sl, #1 - cmp sl, #4 - blt _02012E70 -_02012EB0: - add sb, sb, #1 - cmp sb, #0x12 - blt _02012E50 - cmp r8, #0 - ble _02012F00 - mov r0, #0x1c - mul r5, r6, r0 - add r0, r4, #0x12c - add sb, r0, #0x800 - mov r0, r8 - add r8, sb, r5 - bl RandInt - add r2, sp, #0x40 - ldr r0, [r2, r0, lsl #2] - mov r1, #1 - str r0, [r8, #8] - str r1, [sb, r5] - ldrh r0, [r0, #2] - add r6, r6, #1 - str r0, [r8, #4] -_02012F00: - cmp r6, #0 - bne _02012F40 - mov r0, r4 - bl MemFree - cmp r7, #0 - beq _02012F1C - bl CloseSynthBin -_02012F1C: - mov r3, #0 - ldr r1, _020130B0 ; =_022A4BD8 - mov r0, r3 -_02012F28: - mov r2, r3, lsl #1 - add r3, r3, #1 - strh r0, [r1, r2] - cmp r3, #8 - blt _02012F28 - b _02013090 -_02012F40: - mov r0, #4 - mov r1, #9 - bl RandRange - mov fp, r0 - mov sb, #0 - b _02013050 -_02012F58: - mov r0, #0 - mov r3, r0 - mov r1, #0x1c - b _02012F78 -_02012F68: - mla r2, r3, r1, r4 - ldr r2, [r2, #0x930] - add r3, r3, #1 - add r0, r0, r2 -_02012F78: - cmp r3, r6 - blt _02012F68 - cmp r0, #0 - beq _02013058 - bl RandInt - mov r1, #0 - add r2, r4, #0x12c - add r8, r2, #0x800 - mov sl, r1 - mov r2, #0x1c - b _02013048 -_02012FA4: - mla r5, sl, r2, r8 - ldr r3, [r5, #4] - cmp r0, r3 - bhs _02013044 - ldr r8, [r5] - mov sl, #0 - b _02013030 -_02012FC0: - add r2, r5, sl, lsl #2 - ldr r3, [r2, #8] - ldrh r2, [r3, #2] - add r1, r1, r2 - cmp r0, r1 - bge _0201302C - ldrsh r8, [r3] - mov sl, #0 - ldr r1, _020130B0 ; =_022A4BD8 - b _0201300C -_02012FE8: - mov r0, sl, lsl #1 - ldrsh r0, [r1, r0] - cmp r8, r0 - bne _02013008 - ldr r0, _020130B4 ; =_02098D48 - mov r1, r8 - bl Debug_Print0 - b _02013014 -_02013008: - add sl, sl, #1 -_0201300C: - cmp sl, sb - blt _02012FE8 -_02013014: - cmp sl, sb - movge r1, sb, lsl #1 - ldrge r0, _020130B0 ; =_022A4BD8 - addge sb, sb, #1 - strgeh r8, [r0, r1] - b _02013038 -_0201302C: - add sl, sl, #1 -_02013030: - cmp sl, r8 - blt _02012FC0 -_02013038: - mov r0, #0 - str r0, [r5, #4] - b _02013050 -_02013044: - add sl, sl, #1 -_02013048: - cmp sl, r6 - blt _02012FA4 -_02013050: - cmp sb, fp - blt _02012F58 -_02013058: - mov r2, #0 - ldr r0, _020130B0 ; =_022A4BD8 - b _02013070 -_02013064: - mov r1, sb, lsl #1 - strh r2, [r0, r1] - add sb, sb, #1 -_02013070: - cmp sb, #8 - blt _02013064 - mov r0, r4 - bl MemFree - cmp r7, #0 - beq _0201308C - bl CloseSynthBin -_0201308C: - mov r0, #1 -_02013090: - add sp, sp, #0x160 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02013098: .word _020AF6D0 -_0201309C: .word 0x000045E0 -_020130A0: .word _02098CCC -_020130A4: .word _02098D24 -_020130A8: .word 0x00000229 -_020130AC: .word TYPE_SPECIFIC_EXCLUSIVE_ITEMS -_020130B0: .word _022A4BD8 -_020130B4: .word _02098D48 - arm_func_end GenerateCroagunkItems - - arm_func_start GetCroagunkItemTemplates -GetCroagunkItemTemplates: ; 0x020130B8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r1, _02013148 ; =_020AF6D0 - mov r7, r0 - ldr r0, [r1, #4] - ldr r4, _0201314C ; =_022A4BD8 - cmp r0, #0 - mov r5, #0 - movne r0, #1 - moveq r0, r5 - tst r0, #0xff - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r6, #0 -_020130EC: - mov r1, r6, lsl #1 - ldrsh r0, [r4, r1] - cmp r0, #0 - beq _02013130 - ldrsh r0, [r4, r1] - bl GetSynthItem - cmp r0, #0 - beq _02013130 - cmp r7, #0 - beq _0201312C - add r3, r7, r5, lsl #3 - mov r2, #4 -_0201311C: - ldrh r1, [r0], #2 - subs r2, r2, #1 - strh r1, [r3], #2 - bne _0201311C -_0201312C: - add r5, r5, #1 -_02013130: - add r6, r6, #1 - cmp r6, #8 - blt _020130EC - mov r0, r5, lsl #0x10 - mov r0, r0, lsr #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02013148: .word _020AF6D0 -_0201314C: .word _022A4BD8 - arm_func_end GetCroagunkItemTemplates - - arm_func_start PopCroagunkItem -PopCroagunkItem: ; 0x02013150 - ldr r3, _0201318C ; =_022A4BD8 - mov ip, #0 - b _0201317C -_0201315C: - mov r2, ip, lsl #1 - ldrsh r1, [r3, r2] - cmp r0, r1 - moveq r0, #0 - streqh r0, [r3, r2] - moveq r0, #1 - bxeq lr - add ip, ip, #1 -_0201317C: - cmp ip, #8 - blt _0201315C - mov r0, #0 - bx lr - .align 2, 0 -_0201318C: .word _022A4BD8 - arm_func_end PopCroagunkItem - - arm_func_start LoadCroagunkItems -LoadCroagunkItems: ; 0x02013190 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x10 - mov r3, r0 - mov r2, r1 - add r0, sp, #0 - mov r1, r3 - bl InitBitstreamForWrite - ldr r5, _020131EC ; =_022A4BD8 - mov r7, #0 - add r6, sp, #0 - mov r4, #0xb -_020131BC: - mov r0, r6 - mov r2, r4 - add r1, r5, r7, lsl #1 - bl CopyBitsFrom - add r7, r7, #1 - cmp r7, #8 - blt _020131BC - add r0, sp, #0 - bl BitstreamDebug - ldr r0, [sp, #8] - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_020131EC: .word _022A4BD8 - arm_func_end LoadCroagunkItems - - arm_func_start SaveCroagunkItems -SaveCroagunkItems: ; 0x020131F0 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x10 - mov r3, r0 - mov r2, r1 - add r0, sp, #0 - mov r1, r3 - bl InitBitstreamForRead - ldr r5, _0201324C ; =_022A4BD8 - mov r7, #0 - add r6, sp, #0 - mov r4, #0xb -_0201321C: - mov r0, r6 - mov r2, r4 - add r1, r5, r7, lsl #1 - bl CopyBitsTo - add r7, r7, #1 - cmp r7, #8 - blt _0201321C - add r0, sp, #0 - bl BitstreamDebug - ldr r0, [sp, #8] - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0201324C: .word _022A4BD8 - arm_func_end SaveCroagunkItems - - arm_func_start GetSynthItem -GetSynthItem: ; 0x02013250 - ldr r1, _020132A0 ; =_020AF6D0 - ldr r1, [r1, #4] - cmp r1, #0 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - moveq r0, #0 - bxeq lr - ldr r1, _020132A0 ; =_020AF6D0 - ldr r1, [r1] - b _0201328C -_0201327C: - cmp r2, r0 - moveq r0, r1 - bxeq lr - add r1, r1, #8 -_0201328C: - ldrsh r2, [r1] - cmp r2, #0 - bne _0201327C - mov r0, #0 - bx lr - .align 2, 0 -_020132A0: .word _020AF6D0 - arm_func_end GetSynthItem - - arm_func_start GetValidSynthsForSpecies -GetValidSynthsForSpecies: ; 0x020132A4 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov sl, r0 - mov sb, r1 - mov r8, r2 - bl GetScenarioBalance - mov r5, #0 - str r5, [sb] - mov r7, r0 - mov r6, r5 - str r5, [sb, #4] - mov r4, #1 -_020132D0: - mov r1, r6, lsl #0x10 - mov r0, sl - mov r1, r1, asr #0x10 - bl GetExclusiveItem - cmp r0, #0 - beq _0201332C - bl GetSynthItem - cmp r0, #0 - beq _0201332C - ldrh r1, [r0, #6] - cmp r1, r7 - bgt _0201332C - ldr r1, [sb] - mov r5, r4 - add r1, sb, r1, lsl #2 - str r0, [r1, #8] - ldrh r0, [r0, #2] - ldr r1, [sb, #4] - add r0, r1, r0 - str r0, [sb, #4] - ldr r0, [sb] - add r0, r0, #1 - str r0, [sb] -_0201332C: - add r6, r6, #1 - cmp r6, #4 - blt _020132D0 - mov r0, sl - bl ReturnEggExclusiveItem - cmp r0, #0 - beq _0201338C - bl GetSynthItem - cmp r0, #0 - beq _0201338C - ldrh r1, [r0, #6] - cmp r1, r7 - bgt _0201338C - ldr r1, [sb] - mov r5, #1 - add r1, sb, r1, lsl #2 - str r0, [r1, #8] - ldrh r0, [r0, #2] - ldr r1, [sb, #4] - add r0, r1, r0 - str r0, [sb, #4] - ldr r0, [sb] - add r0, r0, #1 - str r0, [sb] -_0201338C: - mov r0, sl - mov r1, #0 - bl GetType - cmp r0, #0 - movne r1, #1 - strneb r1, [r8, r0] - mov r0, sl - mov r1, #1 - bl GetType - cmp r0, #0 - movne r1, #1 - strneb r1, [r8, r0] - mov r0, r5 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end GetValidSynthsForSpecies - - arm_func_start LoadWazaP -LoadWazaP: ; 0x020133C4 - stmdb sp!, {r3, lr} - ldr r1, _020133E8 ; =DUNGEON_MOVE_TABLES - mov r0, #0 - str r0, [r1, #4] - bl OpenWaza - ldr r0, _020133E8 ; =DUNGEON_MOVE_TABLES - ldr r0, [r0, #4] - bl SelectWaza - ldmia sp!, {r3, pc} - .align 2, 0 -_020133E8: .word DUNGEON_MOVE_TABLES - arm_func_end LoadWazaP - - arm_func_start LoadWazaP2 -LoadWazaP2: ; 0x020133EC - stmdb sp!, {r3, lr} - ldr r1, _02013410 ; =DUNGEON_MOVE_TABLES - mov r0, #1 - str r0, [r1, #4] - bl OpenWaza - ldr r0, _02013410 ; =DUNGEON_MOVE_TABLES - ldr r0, [r0, #4] - bl SelectWaza - ldmia sp!, {r3, pc} - .align 2, 0 -_02013410: .word DUNGEON_MOVE_TABLES - arm_func_end LoadWazaP2 - - arm_func_start UnloadCurrentWazaP -UnloadCurrentWazaP: ; 0x02013414 - stmdb sp!, {r4, lr} - ldr r0, _0201344C ; =DUNGEON_MOVE_TABLES - ldr r1, _02013450 ; =_020AF700 - ldr r0, [r0, #4] - add r4, r1, r0, lsl #3 - mov r0, r4 - bl UnloadFile - mov r0, r4 - bl ZInit8 - ldr r1, _0201344C ; =DUNGEON_MOVE_TABLES - mov r0, #0 - str r0, [r1, #4] - bl SelectWaza - ldmia sp!, {r4, pc} - .align 2, 0 -_0201344C: .word DUNGEON_MOVE_TABLES -_02013450: .word _020AF700 - arm_func_end UnloadCurrentWazaP - - arm_func_start GetMoveName -GetMoveName: ; 0x02013454 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 -#if defined(EUROPE) - add r0, r0, #0xff0 - add r0, r0, #0x1000 -#elif defined(JAPAN) - add r0, r0, #0xb - add r0, r0, #0x1300 -#else - add r0, r0, #0xee - add r0, r0, #0x1f00 -#endif - mov r0, r0, lsl #0x10 - ldr ip, _02013474 ; =StringFromId - mov r0, r0, lsr #0x10 - bx ip - .align 2, 0 -_02013474: .word StringFromId - arm_func_end GetMoveName - - arm_func_start FormatMoveString -FormatMoveString: ; 0x02013478 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x1c - mov r6, r1 - ldrb r1, [r6] - mov r7, r0 - mov r5, r2 - tst r1, #0x20 - bne _020134A4 - ldrh r0, [r6, #2] - tst r0, #1 - beq _020134AC -_020134A4: - mov r0, #0x57 - b _020134B0 -_020134AC: - mov r0, #0x4d -_020134B0: - ldrb r3, [r6, #7] - cmp r5, #0 - ldreq r5, _02013738 ; =_02098D68 - and r4, r0, #0xff - cmp r3, #0 - moveq r0, #0 - streqb r0, [sp, #0x10] - beq _020134E0 - ldr r1, _0201373C ; =_02098DE4 - add r0, sp, #0x10 - mov r2, #0x56 - bl SprintfStatic__02013758 -_020134E0: - ldrb r0, [r5, #8] - cmp r0, #0 - movne r4, #0x57 - bne _0201350C - ldrb r0, [r5, #9] - cmp r0, #0 - beq _0201350C - ldrh r0, [r6, #4] - bl Is2TurnsMove - cmp r0, #0 - movne r4, #0x57 -_0201350C: - ldr r0, [r5] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _02013730 -_0201351C: ; jump table - b _02013534 ; case 0 - b _02013564 ; case 1 - b _020135C8 ; case 2 - b _0201362C ; case 3 - b _02013690 ; case 4 - b _020136F4 ; case 5 -_02013534: - ldrh r0, [r6, #4] -#if defined(EUROPE) - add r0, r0, #0xff0 - add r0, r0, #0x1000 -#elif defined(JAPAN) - add r0, r0, #0xb - add r0, r0, #0x1300 -#else - add r0, r0, #0xee - add r0, r0, #0x1f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r2, r0 - ldr r1, _02013740 ; =_02098DF4 - add r3, sp, #0x10 - mov r0, r7 - bl SprintfStatic__02013758 - b _02013730 -_02013564: - ldrh r0, [r6, #4] -#if defined(EUROPE) - add r0, r0, #0xff0 - add r0, r0, #0x1000 -#elif defined(JAPAN) - add r0, r0, #0xb - add r0, r0, #0x1300 -#else - add r0, r0, #0xee - add r0, r0, #0x1f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - ldrb r1, [r6] - mov r5, r0 - mov r0, r6 - tst r1, #8 - ldrne r8, _02013744 ; =_02098E04 - ldreq r8, _02013748 ; =_02098E0C - bl GetMaxPp - add r1, sp, #0x10 - str r5, [sp] - str r1, [sp, #4] - ldrb r3, [r6, #6] - ldr r1, _0201374C ; =_02098E14 - mov r2, r4 - str r3, [sp, #8] - str r0, [sp, #0xc] - mov r0, r7 - mov r3, r8 - bl SprintfStatic__02013758 - b _02013730 -_020135C8: - ldrh r0, [r6, #4] -#if defined(EUROPE) - add r0, r0, #0xff0 - add r0, r0, #0x1000 -#elif defined(JAPAN) - add r0, r0, #0xb - add r0, r0, #0x1300 -#else - add r0, r0, #0xee - add r0, r0, #0x1f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - ldrb r1, [r6] - mov r5, r0 - mov r0, r6 - tst r1, #8 - ldrne r8, _02013744 ; =_02098E04 - ldreq r8, _02013748 ; =_02098E0C - bl GetMaxPp - add r1, sp, #0x10 - str r5, [sp] - str r1, [sp, #4] - ldrb r3, [r6, #6] - ldr r1, _0201374C ; =_02098E14 - mov r2, r4 - str r3, [sp, #8] - str r0, [sp, #0xc] - mov r0, r7 - mov r3, r8 - bl SprintfStatic__02013758 - b _02013730 -_0201362C: - ldrh r0, [r6, #4] -#if defined(EUROPE) - add r0, r0, #0xff0 - add r0, r0, #0x1000 -#elif defined(JAPAN) - add r0, r0, #0xb - add r0, r0, #0x1300 -#else - add r0, r0, #0xee - add r0, r0, #0x1f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - ldrb r1, [r6] - mov r5, r0 - mov r0, r6 - tst r1, #4 - ldrne r8, _02013744 ; =_02098E04 - ldreq r8, _02013748 ; =_02098E0C - bl GetMaxPp - add r1, sp, #0x10 - str r5, [sp] - str r1, [sp, #4] - ldrb r3, [r6, #6] - ldr r1, _02013750 ; =_02098E58 - mov r2, r4 - str r3, [sp, #8] - str r0, [sp, #0xc] - mov r0, r7 - mov r3, r8 - bl SprintfStatic__02013758 - b _02013730 -_02013690: - ldrh r0, [r6, #4] -#if defined(EUROPE) - add r0, r0, #0xff0 - add r0, r0, #0x1000 -#elif defined(JAPAN) - add r0, r0, #0xb - add r0, r0, #0x1300 -#else - add r0, r0, #0xee - add r0, r0, #0x1f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - ldrb r1, [r6] - mov r5, r0 - mov r0, r6 - tst r1, #4 - ldrne r8, _02013744 ; =_02098E04 - ldreq r8, _02013748 ; =_02098E0C - bl GetMaxPp - add r1, sp, #0x10 - str r5, [sp] - str r1, [sp, #4] - ldrb r3, [r6, #6] - ldr r1, _0201374C ; =_02098E14 - mov r2, r4 - str r3, [sp, #8] - str r0, [sp, #0xc] - mov r0, r7 - mov r3, r8 - bl SprintfStatic__02013758 - b _02013730 -_020136F4: - ldrh r0, [r6, #4] -#if defined(EUROPE) - add r0, r0, #0xff0 - add r0, r0, #0x1000 -#elif defined(JAPAN) - add r0, r0, #0xb - add r0, r0, #0x1300 -#else - add r0, r0, #0xee - add r0, r0, #0x1f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r4, r0 - mov r0, r6 - bl GetMaxPp - str r0, [sp] - ldrb r3, [r6, #6] - ldr r1, _02013754 ; =_02098E9C - mov r0, r7 - mov r2, r4 - bl SprintfStatic__02013758 -_02013730: - add sp, sp, #0x1c - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02013738: .word _02098D68 -_0201373C: .word _02098DE4 -_02013740: .word _02098DF4 -_02013744: .word _02098E04 -_02013748: .word _02098E0C -_0201374C: .word _02098E14 -_02013750: .word _02098E58 -_02013754: .word _02098E9C - arm_func_end FormatMoveString - - arm_func_start SprintfStatic__02013758 -SprintfStatic__02013758: ; 0x02013758 - 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__02013758 - - arm_func_start FormatMoveStringMore -FormatMoveStringMore: ; 0x02013780 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r5, r2 - mov r4, r3 - mov r0, r6 - bl GetDungeonResultString - mov r1, r5 - mov r2, r4 - orr ip, r6, #0x10000 - add r3, r7, r6, lsl #2 - str ip, [r3, #0x10] - bl FormatMoveString - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end FormatMoveStringMore diff --git a/asm/main_02011E24.s b/asm/main_02011E24.s new file mode 100644 index 00000000..72b9ef85 --- /dev/null +++ b/asm/main_02011E24.s @@ -0,0 +1,88 @@ + .include "asm/macros.inc" + .include "main_02011E24.inc" + + .text + + arm_func_start CountTradedRecycleItems +CountTradedRecycleItems: ; 0x02011E24 + mov ip, #0 + mov r3, ip + b _02011E58 +_02011E30: + ldr r2, [r0] + mov r1, r3, lsl #2 + add r2, r2, #0x14 + ldrsh r1, [r2, r1] + add r2, r2, r3, lsl #2 + cmp r1, #0 + beq _02011E60 + ldrsh r1, [r2, #2] + add r3, r3, #1 + add ip, ip, r1 +_02011E58: + cmp r3, #4 + blt _02011E30 +_02011E60: + mov r0, ip + bx lr + arm_func_end CountTradedRecycleItems + + arm_func_start sub_02011E68 +sub_02011E68: ; 0x02011E68 + stmdb sp!, {r3, lr} + mov lr, #0 + b _02011EB4 +_02011E74: + ldr r2, [r0] + mov r1, lr, lsl #2 + add r2, r2, #0x14 + ldrsh r1, [r2, r1] + add ip, r2, lr, lsl #2 + cmp r1, #0 + beq _02011EBC + add r1, r0, lr, lsl #1 + ldrsh r3, [r1, #4] + ldrsh r2, [r1, #0xc] + ldrsh r1, [ip, #2] + add r2, r3, r2 + cmp r2, r1 + movlt r0, #0 + ldmltia sp!, {r3, pc} + add lr, lr, #1 +_02011EB4: + cmp lr, #4 + blt _02011E74 +_02011EBC: + mov r0, #1 + ldmia sp!, {r3, pc} + arm_func_end sub_02011E68 + + arm_func_start RecycleShopTradeIsNonspecific +RecycleShopTradeIsNonspecific: ; 0x02011EC4 + ldr r1, [r0] + ldr r0, _02011EE4 ; =0x00000578 + ldrsh r1, [r1, #0x14] + cmp r1, r0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_02011EE4: .word 0x00000578 + arm_func_end RecycleShopTradeIsNonspecific + + arm_func_start RecycleShopOfferExists +RecycleShopOfferExists: ; 0x02011EE8 + ldr r0, _02011F10 ; =BAG_ITEMS_PTR_MIRROR + mvn r1, #0 + ldr r0, [r0] + add r0, r0, #0x1300 + ldrsh r0, [r0, #0xb2] + cmp r0, r1 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_02011F10: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RecycleShopOfferExists diff --git a/asm/main_02011F60.s b/asm/main_02011F60.s new file mode 100644 index 00000000..1bbfadb5 --- /dev/null +++ b/asm/main_02011F60.s @@ -0,0 +1,233 @@ + .include "asm/macros.inc" + .include "main_02011F60.inc" + + .text + + arm_func_start IncrementRecycleCountVar +IncrementRecycleCountVar: ; 0x02011F60 + stmdb sp!, {r4, lr} + mov r0, #0 + mov r1, #0x6c + bl LoadScriptVariableValue + add r4, r0, #1 + ldr r1, _02011F9C ; =0x000F423F + mov r0, #0 + cmp r4, r1 + movgt r4, r1 + mov r2, r4 + mov r1, #0x6c + bl SaveScriptVariableValue + mov r0, r4 + bl SetNbRecycled + ldmia sp!, {r4, pc} + .align 2, 0 +_02011F9C: .word 0x000F423F + arm_func_end IncrementRecycleCountVar + + arm_func_start UpdateRecycleShop +UpdateRecycleShop: ; 0x02011FA0 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r0, #0 + mov r1, #0x71 + bl LoadScriptVariableValue + and r0, r0, #0xff + cmp r0, #1 + bne _0201207C + ldr r1, _02012214 ; =BAG_ITEMS_PTR_MIRROR + mov r0, #3 + ldr r1, [r1] + add r1, r1, #0x1000 + ldrb r6, [r1, #0x3aa] + ldr r5, [r1, #0x3ac] + mov r1, r6 + mov r2, r5 + bl CountValidRecycleShopItems + mov r4, r0 + mov r1, r6 + mov r2, r5 + mov r0, #2 + bl CountValidRecycleShopItems + sub r4, r4, r0 + mov r0, #0 + mov r1, #0x6c + bl LoadScriptVariableValue + ldr r1, _02012214 ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r1] + add r1, r1, #0x1000 + str r0, [r1, #0x3ac] + bl GetRank + ldr r2, _02012214 ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r2] + add r1, r1, #0x1000 + strb r0, [r1, #0x3aa] + ldr r1, [r2] + mov r0, #3 + add r1, r1, #0x1000 + ldr r5, [r1, #0x3ac] + ldrb r6, [r1, #0x3aa] + mov r2, r5 + mov r1, r6 + bl CountValidRecycleShopItems + mov r1, r6 + mov r2, r5 + mov r5, r0 + mov r0, #2 + bl CountValidRecycleShopItems + sub r0, r5, r0 + cmp r0, r4 + ble _0201207C + mov r0, #0 + mov r1, #0x6a + mov r2, #1 + bl SaveScriptVariableValue +_0201207C: + mov r0, #0 + mov r1, #0x6b + bl LoadScriptVariableValue + tst r0, #0xff + bne _02012104 + mov r0, #0 + mov r1, #0x6d + bl LoadScriptVariableValue + mov r4, r0 + cmp r4, #5 + bge _02012104 + ldr r0, _02012214 ; =BAG_ITEMS_PTR_MIRROR + ldr r1, _02012218 ; =_020988A4 + ldr r0, [r0] + ldr r1, [r1, r4, lsl #3] + add r0, r0, #0x1000 + ldr r0, [r0, #0x3ac] + cmp r0, r1 + blt _02012104 + bl GetScenarioBalance + ldr r1, _0201221C ; =_020988A8 + mov r2, r4, lsl #3 + ldrsh r1, [r1, r2] + and r1, r1, #0xff + cmp r0, r1 + blo _02012104 + add r2, r4, #1 + mov r0, #0 + mov r1, #0x6d + bl SaveScriptVariableValue + mov r0, #0 + mov r1, #0x6b + mov r2, #1 + bl SaveScriptVariableValue +_02012104: + ldr r0, _02012214 ; =BAG_ITEMS_PTR_MIRROR + mvn r1, #0 + ldr r0, [r0] + add r0, r0, #0x1300 + ldrsh r0, [r0, #0xb2] + cmp r0, r1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _0201213C + bl IsRecycleOfferCooldownOver + cmp r0, #0 + moveq r2, #0 + beq _02012200 +_0201213C: + ldr r1, _02012214 ; =BAG_ITEMS_PTR_MIRROR + mov r0, #2 + ldr r1, [r1] + add r2, r1, #0x1000 + ldrb r1, [r2, #0x3aa] + ldr r2, [r2, #0x3ac] + bl sub_02011B3C + mov r4, r0 + str r4, [sp] + ldr r0, [r4, #4] + cmp r0, #0 + bne _02012184 + ldr r0, _02012214 ; =BAG_ITEMS_PTR_MIRROR + mvn r1, #0 + ldr r0, [r0] + add r0, r0, #0x1300 + strh r1, [r0, #0xb2] + b _020121E0 +_02012184: + bl Rand16Bit + ldr r1, [r4, #4] + bl _s32_div_f + mov r0, #0x18 + mul r0, r1, r0 + ldr r1, [r4] + ldr r2, _02012220 ; =RECYCLE_SHOP_ITEM_LIST + ldr r1, [r1, r0] + mov r3, #0 + b _020121C4 +_020121AC: + cmp r2, r1 + beq _020121D0 + add r0, r3, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 + add r2, r2, #0x24 +_020121C4: + cmp r3, #0x18 + blt _020121AC + mvn r3, #0 +_020121D0: + ldr r0, _02012214 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + add r0, r0, #0x1300 + strh r3, [r0, #0xb2] +_020121E0: + add r0, sp, #0 + bl FreeRecycleOfferItems + ldr r0, _02012214 ; =BAG_ITEMS_PTR_MIRROR + mov r1, #2 + ldr r0, [r0] + mov r2, #1 + add r0, r0, #0x1300 + strh r1, [r0, #0xb0] +_02012200: + cmp r2, #0 + bne _0201220C + bl DecrementRecycleOfferCooldown +_0201220C: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02012214: .word BAG_ITEMS_PTR_MIRROR +_02012218: .word _020988A4 +_0201221C: .word _020988A8 +_02012220: .word RECYCLE_SHOP_ITEM_LIST + arm_func_end UpdateRecycleShop + + arm_func_start DecrementRecycleOfferCooldown +DecrementRecycleOfferCooldown: ; 0x02012224 + stmdb sp!, {r3, lr} + bl IsRecycleOfferCooldownOver + cmp r0, #0 + ldmneia sp!, {r3, pc} + ldr r0, _02012250 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + add r0, r0, #0x1300 + ldrsh r1, [r0, #0xb0] + sub r1, r1, #1 + strh r1, [r0, #0xb0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02012250: .word BAG_ITEMS_PTR_MIRROR + arm_func_end DecrementRecycleOfferCooldown + + arm_func_start IsRecycleOfferCooldownOver +IsRecycleOfferCooldownOver: ; 0x02012254 + ldr r0, _02012278 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + add r0, r0, #0x1300 + ldrsh r0, [r0, #0xb0] + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_02012278: .word BAG_ITEMS_PTR_MIRROR + arm_func_end IsRecycleOfferCooldownOver diff --git a/asm/main_02012294.s b/asm/main_02012294.s new file mode 100644 index 00000000..6c4a1ca5 --- /dev/null +++ b/asm/main_02012294.s @@ -0,0 +1,1691 @@ + .include "asm/macros.inc" + .include "main_02012294.inc" + + .text + + arm_func_start sub_02012294 +sub_02012294: ; 0x02012294 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov fp, r0 + mov r0, #8 + mov r1, #6 + bl MemAlloc + mov r8, #0 + mov r4, r0 + mov r7, r8 + mov r6, r8 + bl CountNbOfItemsInStorage + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + cmp r5, #0 + ble _02012324 + mov r0, r5, lsl #2 + mov r1, #6 + bl MemAlloc + mov sb, r6 + mov r8, r0 + mov sl, sb + b _0201231C +_020122E8: + mov r0, sb + bl sub_02010044 + mov r1, fp + bl RecycleShopIsTradableItem + cmp r0, #0 + moveq r1, r6, lsl #2 + addeq r0, r8, r6, lsl #2 + streqh sb, [r8, r1] + streqb sl, [r0, #2] + add r0, sb, #1 + mov r0, r0, lsl #0x10 + addeq r6, r6, #1 + mov sb, r0, asr #0x10 +_0201231C: + cmp sb, r5 + blt _020122E8 +_02012324: + mov r5, #0 + bl GetNbItemsInBag + mov r0, r0, lsl #0x10 + mov sb, r0, asr #0x10 + cmp sb, #0 + ble _0201239C + mov r0, sb, lsl #2 + mov r1, #6 + bl MemAlloc + mov r7, r0 + mov sl, r5 + b _02012394 +_02012354: + mov r0, sl + bl GetItemAtIdx + ldrsh r0, [r0, #4] + mov r1, fp + bl RecycleShopIsTradableItem + cmp r0, #0 + bne _02012388 + mov r0, r5, lsl #2 + add r1, r7, r5, lsl #2 + strh sl, [r7, r0] + mov r0, #0 + strb r0, [r1, #2] + add r5, r5, #1 +_02012388: + add r0, sl, #1 + mov r0, r0, lsl #0x10 + mov sl, r0, asr #0x10 +_02012394: + cmp sl, sb + blt _02012354 +_0201239C: + cmp r5, #0 + beq _020123B4 + mov r1, r6, lsr #0x1f + rsb r0, r1, r6, lsl #29 + adds r0, r1, r0, ror #29 + bne _020123BC +_020123B4: + mov sb, #0 + b _020123C0 +_020123BC: + rsb sb, r0, #8 +_020123C0: + add r0, r5, r6 + adds r0, sb, r0 + str r0, [r4, #4] + moveq r0, #0 + streq r0, [r4] + beq _020124B0 + mov r0, r0, lsl #3 + mov r1, #6 + bl MemAlloc + str r0, [r4] + mov sl, #0 + mov r3, #1 + b _02012418 +_020123F4: + str r3, [r0] + mov r1, sl, lsl #2 + ldrsh r2, [r8, r1] + add r1, r8, sl, lsl #2 + add sl, sl, #1 + strh r2, [r0, #4] + ldrb r1, [r1, #2] + strb r1, [r0, #7] + add r0, r0, #8 +_02012418: + cmp sl, r6 + blt _020123F4 + mov r6, #0 + mov r3, #2 + mvn r2, #0 + mov r1, r6 + b _02012448 +_02012434: + str r3, [r0] + strh r2, [r0, #4] + strb r1, [r0, #7] + add r6, r6, #1 + add r0, r0, #8 +_02012448: + cmp r6, sb + blt _02012434 + mov r6, #0 + mov r3, r6 + b _02012480 +_0201245C: + str r3, [r0] + mov r1, r6, lsl #2 + ldrsh r2, [r7, r1] + add r1, r7, r6, lsl #2 + add r6, r6, #1 + strh r2, [r0, #4] + ldrb r1, [r1, #2] + strb r1, [r0, #7] + add r0, r0, #8 +_02012480: + cmp r6, r5 + blt _0201245C + mov r3, #0 + ldr r2, [r4] + mov r1, r3 + b _020124A4 +_02012498: + strb r1, [r2, #6] + add r3, r3, #1 + add r2, r2, #8 +_020124A4: + ldr r0, [r4, #4] + cmp r3, r0 + blt _02012498 +_020124B0: + cmp r7, #0 + beq _020124C0 + mov r0, r7 + bl MemFree +_020124C0: + cmp r8, #0 + beq _020124D0 + mov r0, r8 + bl MemFree +_020124D0: + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end sub_02012294 + + arm_func_start sub_020124D8 +sub_020124D8: ; 0x020124D8 + stmdb sp!, {r3, lr} + ldr r1, [r0] + cmp r1, #0 + bne _020124F8 + ldrsh r0, [r0, #4] + bl GetItemAtIdx + ldrsh r0, [r0, #4] + ldmia sp!, {r3, pc} +_020124F8: + cmp r1, #1 + movne r0, #0 + ldmneia sp!, {r3, pc} + ldrsh r0, [r0, #4] + add r1, sp, #0 + bl ConvertStorageItemAtIdxToBulkItem + ldrsh r0, [sp] + ldmia sp!, {r3, pc} + arm_func_end sub_020124D8 + + arm_func_start sub_02012518 +sub_02012518: ; 0x02012518 + stmdb sp!, {r3, lr} + ldr r1, [r0] + cmp r1, #0 + bne _02012538 + ldrsh r0, [r0, #4] + bl GetItemAtIdx + ldrh r0, [r0, #2] + ldmia sp!, {r3, pc} +_02012538: + cmp r1, #1 + ldrne r0, _02012558 ; =0x0000FFFF + ldmneia sp!, {r3, pc} + ldrsh r0, [r0, #4] + add r1, sp, #0 + bl ConvertStorageItemAtIdxToBulkItem + ldrh r0, [sp, #2] + ldmia sp!, {r3, pc} + .align 2, 0 +_02012558: .word 0x0000FFFF + arm_func_end sub_02012518 + + arm_func_start sub_0201255C +sub_0201255C: ; 0x0201255C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r0, #8 + mov r1, #6 + bl MemAlloc + ldr r1, [r5, #4] + mov r4, r0 + mov r0, r1, lsl #3 + mov r1, #6 + bl MemAlloc + str r0, [r4] + mov ip, #0 + b _020125B4 +_02012590: + ldr r1, [r5] + ldr r3, [r4] + add r0, r1, ip, lsl #3 + ldr r2, [r1, ip, lsl #3] + ldr r1, [r0, #4] + add r0, r3, ip, lsl #3 + str r2, [r3, ip, lsl #3] + str r1, [r0, #4] + add ip, ip, #1 +_020125B4: + ldr r1, [r5, #4] + cmp ip, r1 + blt _02012590 + mov r0, r4 + str r1, [r4, #4] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_0201255C + + arm_func_start sub_020125CC +sub_020125CC: ; 0x020125CC + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r0] + bl MemFree + ldr r0, [r4] + bl MemFree + mov r0, #0 + str r0, [r4] + ldmia sp!, {r4, pc} + arm_func_end sub_020125CC + + arm_func_start RecycleShopIsNotThrownItem +RecycleShopIsNotThrownItem: ; 0x020125FC + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetItemCategoryVeneer + cmp r0, #0 + beq _02012620 + mov r0, r4 + bl GetItemCategoryVeneer + cmp r0, #1 + bne _02012628 +_02012620: + mov r0, #1 + ldmia sp!, {r4, pc} +_02012628: + mov r0, #0 + ldmia sp!, {r4, pc} + arm_func_end RecycleShopIsNotThrownItem + + arm_func_start RecycleShopIsTradableItem +RecycleShopIsTradableItem: ; 0x02012630 + stmdb sp!, {r4, lr} + mov r4, r0 + cmp r1, #0 + beq _02012650 + bl IsTicketItem + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r4, pc} +_02012650: + mov r0, r4 + bl RecycleShopIsNotThrownItem + ldmia sp!, {r4, pc} + arm_func_end RecycleShopIsTradableItem + + arm_func_start RecycleShopCountTradableItemsInBag +RecycleShopCountTradableItemsInBag: ; 0x0201265C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r1, _020126C4 ; =BAG_ITEMS_PTR_MIRROR + mov r4, #0 + ldr r1, [r1] + mov r5, r0 + ldr r8, [r1, #0x384] + mov sb, r4 + mov r6, r4 + mov r7, #1 +_02012680: + ldrb r0, [r8] + tst r0, #1 + movne r0, r7 + moveq r0, r6 + tst r0, #0xff + beq _020126AC + ldrsh r0, [r8, #4] + mov r1, r5 + bl RecycleShopIsTradableItem + cmp r0, #0 + addeq r4, r4, #1 +_020126AC: + add sb, sb, #1 + cmp sb, #0x32 + add r8, r8, #6 + blt _02012680 + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_020126C4: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RecycleShopCountTradableItemsInBag + + arm_func_start RecycleShopCountTradableItemsInStorage +RecycleShopCountTradableItemsInStorage: ; 0x020126C8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r5, #0 + ldr r4, _02012718 ; =BAG_ITEMS_PTR_MIRROR + mov r7, r0 + mov r6, r5 +_020126DC: + ldr r0, [r4] + add r0, r0, r6, lsl #1 + add r0, r0, #0x300 + ldrsh r0, [r0, #0x8a] + cmp r0, #0 + beq _02012704 + mov r1, r7 + bl RecycleShopIsTradableItem + cmp r0, #0 + addeq r5, r5, #1 +_02012704: + add r6, r6, #1 + cmp r6, #0x3e8 + blt _020126DC + mov r0, r5 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02012718: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RecycleShopCountTradableItemsInStorage + + arm_func_start sub_0201271C +sub_0201271C: ; 0x0201271C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + mov sl, r0 + ldrsh r0, [sl, #0x14] + ldr r6, [sl] + mov r8, #0 + str r0, [sp] + b _02012854 +_0201273C: + add r5, r6, #0x14 + mov r4, r8, lsl #2 + ldrsh r1, [r5, r4] + add r0, sp, #4 + bl InitBulkItem + add r1, r6, r8, lsl #2 + add r0, sl, r8, lsl #1 + ldrsh r7, [r1, #0x16] + ldrsh fp, [r0, #0xc] + mov sb, #0 + b _02012780 +_02012768: + add r0, sp, #4 + bl GetEquivBulkItemIdxInStorage + bl RemoveItemAtIdxInStorage + cmp r0, #0 + subne r7, r7, #1 + add sb, sb, #1 +_02012780: + cmp sb, fp + bge _02012790 + cmp r7, #0 + bgt _02012768 +_02012790: + cmp r7, #0 + ble _020127CC + add r0, sl, r8, lsl #1 + ldrsh fp, [r0, #4] + mov sb, #0 + b _020127BC +_020127A8: + ldrsh r0, [sp, #4] + bl GetFirstUnequippedItemOfType + bl RemoveItem + sub r7, r7, #1 + add sb, sb, #1 +_020127BC: + cmp sb, fp + bge _020127CC + cmp r7, #0 + bgt _020127A8 +_020127CC: + ldrsh r0, [r5, r4] + ldr r1, _02012870 ; =0x00000578 + cmp r0, r1 + bne _02012834 + ldrsh r0, [r6] + bl IsTicketItem + cmp r0, #0 + beq _02012810 + mov r0, #1 + bl RecycleShopCountTradableItemsInBag + add r1, sl, r8, lsl #1 + strh r0, [r1, #4] + mov r0, #1 + bl RecycleShopCountTradableItemsInStorage + add r1, sl, r8, lsl #1 + strh r0, [r1, #0xc] + b _02012850 +_02012810: + mov r0, #0 + bl RecycleShopCountTradableItemsInBag + add r1, sl, r8, lsl #1 + strh r0, [r1, #4] + mov r0, #0 + bl RecycleShopCountTradableItemsInStorage + add r1, sl, r8, lsl #1 + strh r0, [r1, #0xc] + b _02012850 +_02012834: + bl CountNbItemsOfTypeInBag + add r1, sl, r8, lsl #1 + strh r0, [r1, #4] + ldrsh r0, [r5, r4] + bl CountNbItemsOfTypeInStorage + add r1, sl, r8, lsl #1 + strh r0, [r1, #0xc] +_02012850: + add r8, r8, #1 +_02012854: + ldr r0, [sp] + cmp r8, r0 + blt _0201273C + bl RemoveEmptyItemsInBag + bl MaybeUpdateStorage + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02012870: .word 0x00000578 + arm_func_end sub_0201271C + + arm_func_start sub_02012874 +sub_02012874: ; 0x02012874 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r4, #0 + b _020128C4 +_02012884: + ldr r0, [r5] + add r1, r0, r4, lsl #3 + ldrb r0, [r1, #6] + cmp r0, #0 + beq _020128C0 + ldr r0, [r1] + cmp r0, #0 + bne _020128B0 + ldrsh r0, [r1, #4] + bl RemoveItem + b _020128C0 +_020128B0: + cmp r0, #1 + bne _020128C0 + ldrsh r0, [r1, #4] + bl RemoveItemAtIdxInStorage +_020128C0: + add r4, r4, #1 +_020128C4: + ldr r0, [r5, #4] + cmp r4, r0 + blt _02012884 + bl RemoveEmptyItemsInBag + bl MaybeUpdateStorage + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02012874 + + arm_func_start CountValidRecycleShopItems +CountValidRecycleShopItems: ; 0x020128DC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r7, #0 + mov fp, #0x24 + ldr r5, _02012950 ; =RECYCLE_SHOP_ITEM_LIST + mov sl, r0 + mov sb, r1 + mov r8, r2 + mov r6, r7 + mov r4, fp +_02012900: + cmp sl, #3 + beq _02012920 + mla r0, r6, r4, r5 + ldr r1, [r0, #4] + mov r0, sl + bl IsRecycleTradeTypeValid + cmp r0, #0 + beq _0201293C +_02012920: + mla r1, r6, fp, r5 + ldrb r0, [r1, #8] + cmp r0, sb + bhi _0201293C + ldr r0, [r1, #0xc] + cmp r0, r8 + addle r7, r7, #1 +_0201293C: + add r6, r6, #1 + cmp r6, #0x18 + blt _02012900 + mov r0, r7 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02012950: .word RECYCLE_SHOP_ITEM_LIST + arm_func_end CountValidRecycleShopItems + + arm_func_start IsRecycleTradeTypeValid +IsRecycleTradeTypeValid: ; 0x02012954 + cmp r0, r1 + beq _0201296C + cmp r0, #0 + bne _02012974 + cmp r1, #2 + beq _02012974 +_0201296C: + mov r0, #1 + bx lr +_02012974: + mov r0, #0 + bx lr + arm_func_end IsRecycleTradeTypeValid + + arm_func_start sub_0201297C +sub_0201297C: ; 0x0201297C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r4, #0x24 + smulbb r4, r1, r4 + ldr r1, _02012AA4 ; =_020988D0 + mov sl, r0 + ldr r1, [r1, r4] + mov r0, r2 + mov r5, r3 + bl IsRecycleTradeTypeValid + cmp r0, #0 + beq _02012A9C + ldr r0, _02012AA8 ; =_020988D4 + ldrb r0, [r0, r4] + cmp r0, r5 + bhi _02012A9C + ldr r1, _02012AAC ; =_020988D8 + ldr r0, [sp, #0x28] + ldr r1, [r1, r4] + cmp r1, r0 + bgt _02012A9C + ldr r0, _02012AB0 ; =RECYCLE_SHOP_ITEM_LIST + mov sb, #0 + add r0, r0, r4 + mov r6, #1 + str r0, [sl] + mov fp, sb + mov r5, r6 + ldr r4, _02012AB4 ; =0x00000578 + b _02012A88 +_020129F0: + ldr r1, [sl] + mov r7, sb, lsl #2 + add r8, r1, #0x14 + ldrsh r0, [r8, r7] + cmp r0, #0 + beq _02012A90 + cmp r0, r4 + bne _02012A68 + ldrsh r0, [r1] + bl IsTicketItem + cmp r0, #0 + beq _02012A44 + mov r0, r6 + bl RecycleShopCountTradableItemsInBag + add r1, sl, sb, lsl #1 + strh r0, [r1, #4] + mov r0, r5 + bl RecycleShopCountTradableItemsInStorage + add r1, sl, sb, lsl #1 + strh r0, [r1, #0xc] + b _02012A84 +_02012A44: + mov r0, fp + bl RecycleShopCountTradableItemsInBag + add r1, sl, sb, lsl #1 + strh r0, [r1, #4] + mov r0, #0 + bl RecycleShopCountTradableItemsInStorage + add r1, sl, sb, lsl #1 + strh r0, [r1, #0xc] + b _02012A84 +_02012A68: + bl CountNbItemsOfTypeInBag + add r1, sl, sb, lsl #1 + strh r0, [r1, #4] + ldrsh r0, [r8, r7] + bl CountNbItemsOfTypeInStorage + add r1, sl, sb, lsl #1 + strh r0, [r1, #0xc] +_02012A84: + add sb, sb, #1 +_02012A88: + cmp sb, #4 + blt _020129F0 +_02012A90: + strh sb, [sl, #0x14] + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02012A9C: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02012AA4: .word _020988D0 +_02012AA8: .word _020988D4 +_02012AAC: .word _020988D8 +_02012AB0: .word RECYCLE_SHOP_ITEM_LIST +_02012AB4: .word 0x00000578 + arm_func_end sub_0201297C + + arm_func_start ClearCroagunkItems +ClearCroagunkItems: ; 0x02012AB8 + mov r3, #0 + ldr r0, _02012ADC ; =_022A4BD8 + mov r2, r3 +_02012AC4: + mov r1, r3, lsl #1 + add r3, r3, #1 + strh r2, [r0, r1] + cmp r3, #8 + blt _02012AC4 + bx lr + .align 2, 0 +_02012ADC: .word _022A4BD8 + arm_func_end ClearCroagunkItems + + arm_func_start LoadSynthBin +LoadSynthBin: ; 0x02012AE0 + stmdb sp!, {r3, lr} + ldr r0, _02012B28 ; =_020AF6D0 + ldr r0, [r0, #4] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + movne r0, #0 + ldmneia sp!, {r3, pc} + ldr r0, _02012B2C ; =SYNTH_BIN_FILE_PTR + ldr r1, _02012B30 ; =_02098CB4 + mov r2, #0xe + bl LoadFileFromRom + ldr r1, _02012B28 ; =_020AF6D0 + mov r0, #1 + ldr r2, [r1, #4] + str r2, [r1] + ldmia sp!, {r3, pc} + .align 2, 0 +_02012B28: .word _020AF6D0 +_02012B2C: .word SYNTH_BIN_FILE_PTR +_02012B30: .word _02098CB4 + arm_func_end LoadSynthBin + + arm_func_start CloseSynthBin +CloseSynthBin: ; 0x02012B34 + stmdb sp!, {r3, lr} + ldr r0, _02012B74 ; =_020AF6D0 + ldr r0, [r0, #4] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + ldmeqia sp!, {r3, pc} + ldr r0, _02012B78 ; =SYNTH_BIN_FILE_PTR + bl UnloadFile + ldr r0, _02012B74 ; =_020AF6D0 + mov r1, #0 + str r1, [r0, #4] + str r1, [r0, #8] + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02012B74: .word _020AF6D0 +_02012B78: .word SYNTH_BIN_FILE_PTR + arm_func_end CloseSynthBin + + arm_func_start GenerateCroagunkItems +GenerateCroagunkItems: ; 0x02012B7C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x160 + bl GetScenarioBalance + ldr r1, _02013098 ; =_020AF6D0 + str r0, [sp, #8] + ldr r0, [r1, #4] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + movne r7, #0 + bne _02012BB4 + mov r7, #1 + bl LoadSynthBin +_02012BB4: + ldr r0, _0201309C ; =0x000045E0 + mov r1, #0xf + bl MemAlloc + mov r1, #0 + mov r4, r0 + mov r5, r1 + add r0, sp, #0x2c +_02012BD0: + strb r5, [r0, r1] + add r1, r1, #1 + cmp r1, #0x12 + blt _02012BD0 + ldr r0, _020130A0 ; =_02098CCC + mov r6, r5 + bl Debug_Print0 + add r0, sp, #0x24 + bl GetPartyMembers + str r0, [sp, #0xc] + mov r0, #0 + mov r1, #3 + bl RandRange + mov r8, #0 + mov fp, r0 + mov sl, r8 + b _02012C78 +_02012C14: + mov r1, sl, lsl #1 + add r0, sp, #0x24 + ldrsh r0, [r0, r1] + bl GetTeamMember + ldrsh r0, [r0, #4] + mov sb, #0 + bl FemaleToMaleForm + bl GetBaseFormCastformDeoxysCherrim + mov r3, sb + b _02012C58 +_02012C3C: + mov r2, r3, lsl #1 + add r1, sp, #0x1c + ldrsh r1, [r1, r2] + cmp r0, r1 + moveq sb, #1 + beq _02012C60 + add r3, r3, #1 +_02012C58: + cmp r3, r8 + blt _02012C3C +_02012C60: + cmp sb, #0 + moveq r2, r8, lsl #1 + addeq r1, sp, #0x1c + streqh r0, [r1, r2] + addeq r8, r8, #1 + add sl, sl, #1 +_02012C78: + ldr r0, [sp, #0xc] + cmp sl, r0 + blt _02012C14 + ldr r0, _020130A4 ; =_02098D24 + mov r2, #0 + mov r1, fp + mov r3, r8 + mov sb, r8 + str r2, [sp] + bl Debug_Print0 + add r0, r4, #0x12c + add r0, r0, #0x800 + str r0, [sp, #0x14] + mvn r0, #0 + str r0, [sp, #0x18] + b _02012D28 +_02012CB8: + mov r0, r8 + bl RandInt + str r0, [sp, #4] + mov r1, r0, lsl #1 + add r0, sp, #0x1c + ldrsh sl, [r0, r1] + cmp sl, #0 + blt _02012D28 + ldr r1, [sp, #0x14] + mov r2, #0x1c + mla r1, r6, r2, r1 + mov r0, sl + add r2, sp, #0x2c + bl GetValidSynthsForSpecies + cmp r0, #0 + addne r0, r4, r5, lsl #1 + addne r0, r0, #0x900 + strneh sl, [r0, #6] + ldr r0, [sp, #4] + ldr r1, [sp, #0x18] + mov r2, r0, lsl #1 + add r0, sp, #0x1c + sub sb, sb, #1 + addne r6, r6, #1 + addne r5, r5, #1 + strh r1, [r0, r2] + cmp sb, #0 + ble _02012D38 +_02012D28: + cmp r5, fp + bge _02012D38 + cmp r8, r5 + bgt _02012CB8 +_02012D38: + ldr fp, _020130A8 ; =0x00000229 + str r5, [sp, #0x10] + mov sl, #0 + mov sb, #1 +_02012D48: + mov r0, sb, lsl #0x10 + mov r0, r0, asr #0x10 + bl FemaleToMaleForm + bl GetBaseFormCastformDeoxysCherrim + mov r8, r0 + bl IsMonsterValid + cmp r0, #0 + beq _02012D80 + mov r0, r8 + bl HasMonsterBeenAttackedInDungeons + cmp r0, #0 + movne r0, sl, lsl #1 + strneh r8, [r4, r0] + addne sl, sl, #1 +_02012D80: + add sb, sb, #1 + cmp sb, fp + ble _02012D48 + b _02012E34 +_02012D90: + mov r0, sl + mov fp, #0 + bl RandInt + mov r8, r0 + mov r0, r8, lsl #1 + ldrsh sb, [r4, r0] + mov r1, fp + b _02012DCC +_02012DB0: + add r0, r4, r1, lsl #1 + add r0, r0, #0x900 + ldrsh r0, [r0, #6] + cmp sb, r0 + moveq fp, #1 + beq _02012DD4 + add r1, r1, #1 +_02012DCC: + cmp r1, r5 + blt _02012DB0 +_02012DD4: + cmp fp, #0 + bne _02012E10 + add r0, r4, #0x12c + add r1, r0, #0x800 + mov r0, #0x1c + mla r1, r6, r0, r1 + add r2, sp, #0x2c + mov r0, sb + bl GetValidSynthsForSpecies + cmp r0, #0 + addne r0, r4, r5, lsl #1 + addne r0, r0, #0x900 + strneh sb, [r0, #6] + addne r6, r6, #1 + addne r5, r5, #1 +_02012E10: + sub sl, sl, #1 + b _02012E2C +_02012E18: + add r0, r4, r8, lsl #1 + ldrsh r0, [r0, #2] + mov r1, r8, lsl #1 + add r8, r8, #1 + strh r0, [r4, r1] +_02012E2C: + cmp r8, sl + blt _02012E18 +_02012E34: + cmp r5, #0x10 + ldrlt r0, [sp, #0x10] + sublt r0, r5, r0 + cmplt r0, sl + blt _02012D90 + mov r8, #0 + mov sb, r8 +_02012E50: + add r0, sp, #0x2c + ldrb r0, [r0, sb] + cmp r0, #0 + beq _02012EB0 + ldr r0, _020130AC ; =TYPE_SPECIFIC_EXCLUSIVE_ITEMS + and r5, sb, #0xff + mov sl, #0 + add fp, r0, r5, lsl #3 +_02012E70: + cmp r5, #0x12 + movhs r0, #0 + addlo r0, fp, sl, lsl #1 + ldrlosh r0, [r0, #-8] + bl GetSynthItem + cmp r0, #0 + beq _02012EA4 + ldrh r2, [r0, #6] + ldr r1, [sp, #8] + cmp r2, r1 + addle r1, sp, #0x40 + strle r0, [r1, r8, lsl #2] + addle r8, r8, #1 +_02012EA4: + add sl, sl, #1 + cmp sl, #4 + blt _02012E70 +_02012EB0: + add sb, sb, #1 + cmp sb, #0x12 + blt _02012E50 + cmp r8, #0 + ble _02012F00 + mov r0, #0x1c + mul r5, r6, r0 + add r0, r4, #0x12c + add sb, r0, #0x800 + mov r0, r8 + add r8, sb, r5 + bl RandInt + add r2, sp, #0x40 + ldr r0, [r2, r0, lsl #2] + mov r1, #1 + str r0, [r8, #8] + str r1, [sb, r5] + ldrh r0, [r0, #2] + add r6, r6, #1 + str r0, [r8, #4] +_02012F00: + cmp r6, #0 + bne _02012F40 + mov r0, r4 + bl MemFree + cmp r7, #0 + beq _02012F1C + bl CloseSynthBin +_02012F1C: + mov r3, #0 + ldr r1, _020130B0 ; =_022A4BD8 + mov r0, r3 +_02012F28: + mov r2, r3, lsl #1 + add r3, r3, #1 + strh r0, [r1, r2] + cmp r3, #8 + blt _02012F28 + b _02013090 +_02012F40: + mov r0, #4 + mov r1, #9 + bl RandRange + mov fp, r0 + mov sb, #0 + b _02013050 +_02012F58: + mov r0, #0 + mov r3, r0 + mov r1, #0x1c + b _02012F78 +_02012F68: + mla r2, r3, r1, r4 + ldr r2, [r2, #0x930] + add r3, r3, #1 + add r0, r0, r2 +_02012F78: + cmp r3, r6 + blt _02012F68 + cmp r0, #0 + beq _02013058 + bl RandInt + mov r1, #0 + add r2, r4, #0x12c + add r8, r2, #0x800 + mov sl, r1 + mov r2, #0x1c + b _02013048 +_02012FA4: + mla r5, sl, r2, r8 + ldr r3, [r5, #4] + cmp r0, r3 + bhs _02013044 + ldr r8, [r5] + mov sl, #0 + b _02013030 +_02012FC0: + add r2, r5, sl, lsl #2 + ldr r3, [r2, #8] + ldrh r2, [r3, #2] + add r1, r1, r2 + cmp r0, r1 + bge _0201302C + ldrsh r8, [r3] + mov sl, #0 + ldr r1, _020130B0 ; =_022A4BD8 + b _0201300C +_02012FE8: + mov r0, sl, lsl #1 + ldrsh r0, [r1, r0] + cmp r8, r0 + bne _02013008 + ldr r0, _020130B4 ; =_02098D48 + mov r1, r8 + bl Debug_Print0 + b _02013014 +_02013008: + add sl, sl, #1 +_0201300C: + cmp sl, sb + blt _02012FE8 +_02013014: + cmp sl, sb + movge r1, sb, lsl #1 + ldrge r0, _020130B0 ; =_022A4BD8 + addge sb, sb, #1 + strgeh r8, [r0, r1] + b _02013038 +_0201302C: + add sl, sl, #1 +_02013030: + cmp sl, r8 + blt _02012FC0 +_02013038: + mov r0, #0 + str r0, [r5, #4] + b _02013050 +_02013044: + add sl, sl, #1 +_02013048: + cmp sl, r6 + blt _02012FA4 +_02013050: + cmp sb, fp + blt _02012F58 +_02013058: + mov r2, #0 + ldr r0, _020130B0 ; =_022A4BD8 + b _02013070 +_02013064: + mov r1, sb, lsl #1 + strh r2, [r0, r1] + add sb, sb, #1 +_02013070: + cmp sb, #8 + blt _02013064 + mov r0, r4 + bl MemFree + cmp r7, #0 + beq _0201308C + bl CloseSynthBin +_0201308C: + mov r0, #1 +_02013090: + add sp, sp, #0x160 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02013098: .word _020AF6D0 +_0201309C: .word 0x000045E0 +_020130A0: .word _02098CCC +_020130A4: .word _02098D24 +_020130A8: .word 0x00000229 +_020130AC: .word TYPE_SPECIFIC_EXCLUSIVE_ITEMS +_020130B0: .word _022A4BD8 +_020130B4: .word _02098D48 + arm_func_end GenerateCroagunkItems + + arm_func_start GetCroagunkItemTemplates +GetCroagunkItemTemplates: ; 0x020130B8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r1, _02013148 ; =_020AF6D0 + mov r7, r0 + ldr r0, [r1, #4] + ldr r4, _0201314C ; =_022A4BD8 + cmp r0, #0 + mov r5, #0 + movne r0, #1 + moveq r0, r5 + tst r0, #0xff + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r6, #0 +_020130EC: + mov r1, r6, lsl #1 + ldrsh r0, [r4, r1] + cmp r0, #0 + beq _02013130 + ldrsh r0, [r4, r1] + bl GetSynthItem + cmp r0, #0 + beq _02013130 + cmp r7, #0 + beq _0201312C + add r3, r7, r5, lsl #3 + mov r2, #4 +_0201311C: + ldrh r1, [r0], #2 + subs r2, r2, #1 + strh r1, [r3], #2 + bne _0201311C +_0201312C: + add r5, r5, #1 +_02013130: + add r6, r6, #1 + cmp r6, #8 + blt _020130EC + mov r0, r5, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02013148: .word _020AF6D0 +_0201314C: .word _022A4BD8 + arm_func_end GetCroagunkItemTemplates + + arm_func_start PopCroagunkItem +PopCroagunkItem: ; 0x02013150 + ldr r3, _0201318C ; =_022A4BD8 + mov ip, #0 + b _0201317C +_0201315C: + mov r2, ip, lsl #1 + ldrsh r1, [r3, r2] + cmp r0, r1 + moveq r0, #0 + streqh r0, [r3, r2] + moveq r0, #1 + bxeq lr + add ip, ip, #1 +_0201317C: + cmp ip, #8 + blt _0201315C + mov r0, #0 + bx lr + .align 2, 0 +_0201318C: .word _022A4BD8 + arm_func_end PopCroagunkItem + + arm_func_start LoadCroagunkItems +LoadCroagunkItems: ; 0x02013190 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x10 + mov r3, r0 + mov r2, r1 + add r0, sp, #0 + mov r1, r3 + bl InitBitstreamForWrite + ldr r5, _020131EC ; =_022A4BD8 + mov r7, #0 + add r6, sp, #0 + mov r4, #0xb +_020131BC: + mov r0, r6 + mov r2, r4 + add r1, r5, r7, lsl #1 + bl CopyBitsFrom + add r7, r7, #1 + cmp r7, #8 + blt _020131BC + add r0, sp, #0 + bl BitstreamDebug + ldr r0, [sp, #8] + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_020131EC: .word _022A4BD8 + arm_func_end LoadCroagunkItems + + arm_func_start SaveCroagunkItems +SaveCroagunkItems: ; 0x020131F0 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x10 + mov r3, r0 + mov r2, r1 + add r0, sp, #0 + mov r1, r3 + bl InitBitstreamForRead + ldr r5, _0201324C ; =_022A4BD8 + mov r7, #0 + add r6, sp, #0 + mov r4, #0xb +_0201321C: + mov r0, r6 + mov r2, r4 + add r1, r5, r7, lsl #1 + bl CopyBitsTo + add r7, r7, #1 + cmp r7, #8 + blt _0201321C + add r0, sp, #0 + bl BitstreamDebug + ldr r0, [sp, #8] + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0201324C: .word _022A4BD8 + arm_func_end SaveCroagunkItems + + arm_func_start GetSynthItem +GetSynthItem: ; 0x02013250 + ldr r1, _020132A0 ; =_020AF6D0 + ldr r1, [r1, #4] + cmp r1, #0 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + moveq r0, #0 + bxeq lr + ldr r1, _020132A0 ; =_020AF6D0 + ldr r1, [r1] + b _0201328C +_0201327C: + cmp r2, r0 + moveq r0, r1 + bxeq lr + add r1, r1, #8 +_0201328C: + ldrsh r2, [r1] + cmp r2, #0 + bne _0201327C + mov r0, #0 + bx lr + .align 2, 0 +_020132A0: .word _020AF6D0 + arm_func_end GetSynthItem + + arm_func_start GetValidSynthsForSpecies +GetValidSynthsForSpecies: ; 0x020132A4 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov sl, r0 + mov sb, r1 + mov r8, r2 + bl GetScenarioBalance + mov r5, #0 + str r5, [sb] + mov r7, r0 + mov r6, r5 + str r5, [sb, #4] + mov r4, #1 +_020132D0: + mov r1, r6, lsl #0x10 + mov r0, sl + mov r1, r1, asr #0x10 + bl GetExclusiveItem + cmp r0, #0 + beq _0201332C + bl GetSynthItem + cmp r0, #0 + beq _0201332C + ldrh r1, [r0, #6] + cmp r1, r7 + bgt _0201332C + ldr r1, [sb] + mov r5, r4 + add r1, sb, r1, lsl #2 + str r0, [r1, #8] + ldrh r0, [r0, #2] + ldr r1, [sb, #4] + add r0, r1, r0 + str r0, [sb, #4] + ldr r0, [sb] + add r0, r0, #1 + str r0, [sb] +_0201332C: + add r6, r6, #1 + cmp r6, #4 + blt _020132D0 + mov r0, sl + bl ReturnEggExclusiveItem + cmp r0, #0 + beq _0201338C + bl GetSynthItem + cmp r0, #0 + beq _0201338C + ldrh r1, [r0, #6] + cmp r1, r7 + bgt _0201338C + ldr r1, [sb] + mov r5, #1 + add r1, sb, r1, lsl #2 + str r0, [r1, #8] + ldrh r0, [r0, #2] + ldr r1, [sb, #4] + add r0, r1, r0 + str r0, [sb, #4] + ldr r0, [sb] + add r0, r0, #1 + str r0, [sb] +_0201338C: + mov r0, sl + mov r1, #0 + bl GetType + cmp r0, #0 + movne r1, #1 + strneb r1, [r8, r0] + mov r0, sl + mov r1, #1 + bl GetType + cmp r0, #0 + movne r1, #1 + strneb r1, [r8, r0] + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end GetValidSynthsForSpecies + + arm_func_start LoadWazaP +LoadWazaP: ; 0x020133C4 + stmdb sp!, {r3, lr} + ldr r1, _020133E8 ; =DUNGEON_MOVE_TABLES + mov r0, #0 + str r0, [r1, #4] + bl OpenWaza + ldr r0, _020133E8 ; =DUNGEON_MOVE_TABLES + ldr r0, [r0, #4] + bl SelectWaza + ldmia sp!, {r3, pc} + .align 2, 0 +_020133E8: .word DUNGEON_MOVE_TABLES + arm_func_end LoadWazaP + + arm_func_start LoadWazaP2 +LoadWazaP2: ; 0x020133EC + stmdb sp!, {r3, lr} + ldr r1, _02013410 ; =DUNGEON_MOVE_TABLES + mov r0, #1 + str r0, [r1, #4] + bl OpenWaza + ldr r0, _02013410 ; =DUNGEON_MOVE_TABLES + ldr r0, [r0, #4] + bl SelectWaza + ldmia sp!, {r3, pc} + .align 2, 0 +_02013410: .word DUNGEON_MOVE_TABLES + arm_func_end LoadWazaP2 + + arm_func_start UnloadCurrentWazaP +UnloadCurrentWazaP: ; 0x02013414 + stmdb sp!, {r4, lr} + ldr r0, _0201344C ; =DUNGEON_MOVE_TABLES + ldr r1, _02013450 ; =_020AF700 + ldr r0, [r0, #4] + add r4, r1, r0, lsl #3 + mov r0, r4 + bl UnloadFile + mov r0, r4 + bl ZInit8 + ldr r1, _0201344C ; =DUNGEON_MOVE_TABLES + mov r0, #0 + str r0, [r1, #4] + bl SelectWaza + ldmia sp!, {r4, pc} + .align 2, 0 +_0201344C: .word DUNGEON_MOVE_TABLES +_02013450: .word _020AF700 + arm_func_end UnloadCurrentWazaP + + arm_func_start GetMoveName +GetMoveName: ; 0x02013454 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 +#if defined(EUROPE) + add r0, r0, #0xff0 + add r0, r0, #0x1000 +#elif defined(JAPAN) + add r0, r0, #0xb + add r0, r0, #0x1300 +#else + add r0, r0, #0xee + add r0, r0, #0x1f00 +#endif + mov r0, r0, lsl #0x10 + ldr ip, _02013474 ; =StringFromId + mov r0, r0, lsr #0x10 + bx ip + .align 2, 0 +_02013474: .word StringFromId + arm_func_end GetMoveName + + arm_func_start FormatMoveString +FormatMoveString: ; 0x02013478 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x1c + mov r6, r1 + ldrb r1, [r6] + mov r7, r0 + mov r5, r2 + tst r1, #0x20 + bne _020134A4 + ldrh r0, [r6, #2] + tst r0, #1 + beq _020134AC +_020134A4: + mov r0, #0x57 + b _020134B0 +_020134AC: + mov r0, #0x4d +_020134B0: + ldrb r3, [r6, #7] + cmp r5, #0 + ldreq r5, _02013738 ; =_02098D68 + and r4, r0, #0xff + cmp r3, #0 + moveq r0, #0 + streqb r0, [sp, #0x10] + beq _020134E0 + ldr r1, _0201373C ; =_02098DE4 + add r0, sp, #0x10 + mov r2, #0x56 + bl SprintfStatic__02013758 +_020134E0: + ldrb r0, [r5, #8] + cmp r0, #0 + movne r4, #0x57 + bne _0201350C + ldrb r0, [r5, #9] + cmp r0, #0 + beq _0201350C + ldrh r0, [r6, #4] + bl Is2TurnsMove + cmp r0, #0 + movne r4, #0x57 +_0201350C: + ldr r0, [r5] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _02013730 +_0201351C: ; jump table + b _02013534 ; case 0 + b _02013564 ; case 1 + b _020135C8 ; case 2 + b _0201362C ; case 3 + b _02013690 ; case 4 + b _020136F4 ; case 5 +_02013534: + ldrh r0, [r6, #4] +#if defined(EUROPE) + add r0, r0, #0xff0 + add r0, r0, #0x1000 +#elif defined(JAPAN) + add r0, r0, #0xb + add r0, r0, #0x1300 +#else + add r0, r0, #0xee + add r0, r0, #0x1f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r2, r0 + ldr r1, _02013740 ; =_02098DF4 + add r3, sp, #0x10 + mov r0, r7 + bl SprintfStatic__02013758 + b _02013730 +_02013564: + ldrh r0, [r6, #4] +#if defined(EUROPE) + add r0, r0, #0xff0 + add r0, r0, #0x1000 +#elif defined(JAPAN) + add r0, r0, #0xb + add r0, r0, #0x1300 +#else + add r0, r0, #0xee + add r0, r0, #0x1f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + ldrb r1, [r6] + mov r5, r0 + mov r0, r6 + tst r1, #8 + ldrne r8, _02013744 ; =_02098E04 + ldreq r8, _02013748 ; =_02098E0C + bl GetMaxPp + add r1, sp, #0x10 + str r5, [sp] + str r1, [sp, #4] + ldrb r3, [r6, #6] + ldr r1, _0201374C ; =_02098E14 + mov r2, r4 + str r3, [sp, #8] + str r0, [sp, #0xc] + mov r0, r7 + mov r3, r8 + bl SprintfStatic__02013758 + b _02013730 +_020135C8: + ldrh r0, [r6, #4] +#if defined(EUROPE) + add r0, r0, #0xff0 + add r0, r0, #0x1000 +#elif defined(JAPAN) + add r0, r0, #0xb + add r0, r0, #0x1300 +#else + add r0, r0, #0xee + add r0, r0, #0x1f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + ldrb r1, [r6] + mov r5, r0 + mov r0, r6 + tst r1, #8 + ldrne r8, _02013744 ; =_02098E04 + ldreq r8, _02013748 ; =_02098E0C + bl GetMaxPp + add r1, sp, #0x10 + str r5, [sp] + str r1, [sp, #4] + ldrb r3, [r6, #6] + ldr r1, _0201374C ; =_02098E14 + mov r2, r4 + str r3, [sp, #8] + str r0, [sp, #0xc] + mov r0, r7 + mov r3, r8 + bl SprintfStatic__02013758 + b _02013730 +_0201362C: + ldrh r0, [r6, #4] +#if defined(EUROPE) + add r0, r0, #0xff0 + add r0, r0, #0x1000 +#elif defined(JAPAN) + add r0, r0, #0xb + add r0, r0, #0x1300 +#else + add r0, r0, #0xee + add r0, r0, #0x1f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + ldrb r1, [r6] + mov r5, r0 + mov r0, r6 + tst r1, #4 + ldrne r8, _02013744 ; =_02098E04 + ldreq r8, _02013748 ; =_02098E0C + bl GetMaxPp + add r1, sp, #0x10 + str r5, [sp] + str r1, [sp, #4] + ldrb r3, [r6, #6] + ldr r1, _02013750 ; =_02098E58 + mov r2, r4 + str r3, [sp, #8] + str r0, [sp, #0xc] + mov r0, r7 + mov r3, r8 + bl SprintfStatic__02013758 + b _02013730 +_02013690: + ldrh r0, [r6, #4] +#if defined(EUROPE) + add r0, r0, #0xff0 + add r0, r0, #0x1000 +#elif defined(JAPAN) + add r0, r0, #0xb + add r0, r0, #0x1300 +#else + add r0, r0, #0xee + add r0, r0, #0x1f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + ldrb r1, [r6] + mov r5, r0 + mov r0, r6 + tst r1, #4 + ldrne r8, _02013744 ; =_02098E04 + ldreq r8, _02013748 ; =_02098E0C + bl GetMaxPp + add r1, sp, #0x10 + str r5, [sp] + str r1, [sp, #4] + ldrb r3, [r6, #6] + ldr r1, _0201374C ; =_02098E14 + mov r2, r4 + str r3, [sp, #8] + str r0, [sp, #0xc] + mov r0, r7 + mov r3, r8 + bl SprintfStatic__02013758 + b _02013730 +_020136F4: + ldrh r0, [r6, #4] +#if defined(EUROPE) + add r0, r0, #0xff0 + add r0, r0, #0x1000 +#elif defined(JAPAN) + add r0, r0, #0xb + add r0, r0, #0x1300 +#else + add r0, r0, #0xee + add r0, r0, #0x1f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r4, r0 + mov r0, r6 + bl GetMaxPp + str r0, [sp] + ldrb r3, [r6, #6] + ldr r1, _02013754 ; =_02098E9C + mov r0, r7 + mov r2, r4 + bl SprintfStatic__02013758 +_02013730: + add sp, sp, #0x1c + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02013738: .word _02098D68 +_0201373C: .word _02098DE4 +_02013740: .word _02098DF4 +_02013744: .word _02098E04 +_02013748: .word _02098E0C +_0201374C: .word _02098E14 +_02013750: .word _02098E58 +_02013754: .word _02098E9C + arm_func_end FormatMoveString + + arm_func_start SprintfStatic__02013758 +SprintfStatic__02013758: ; 0x02013758 + 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__02013758 + + arm_func_start FormatMoveStringMore +FormatMoveStringMore: ; 0x02013780 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + mov r7, r0 + mov r5, r2 + mov r4, r3 + mov r0, r6 + bl GetDungeonResultString + mov r1, r5 + mov r2, r4 + orr ip, r6, #0x10000 + add r3, r7, r6, lsl #2 + str ip, [r3, #0x10] + bl FormatMoveString + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end FormatMoveStringMore diff --git a/include/item.h b/include/item.h index 2e7f0592..593d8cc9 100644 --- a/include/item.h +++ b/include/item.h @@ -1660,6 +1660,10 @@ struct bag_items { s16 field_0x13A4; u16 field_0x13A6; u16 field_0x13A8; + u8 field_0x13AA; + u32 field_0x13AC; + s16 field_0x13B0; + s16 field_0x13B2; }; struct bulk_item diff --git a/include/main_0201077C.h b/include/main_0201077C.h index 83d16aad..1d2267b6 100644 --- a/include/main_0201077C.h +++ b/include/main_0201077C.h @@ -1,6 +1,8 @@ #ifndef PMDSKY_MAIN_0201077C_H #define PMDSKY_MAIN_0201077C_H +void AddMoneyStored(s32 amount); s16 GetEggSpecies(void); +void SetEggSpecies(s16 species); #endif diff --git a/include/main_020107AC.h b/include/main_020107AC.h index 963e758b..f2163ef6 100644 --- a/include/main_020107AC.h +++ b/include/main_020107AC.h @@ -2,5 +2,6 @@ #define PMDSKY_MAIN_020107AC_H u16 GetUnkGameState0x13a6(void); +void SetUnkGameState0x13a6(u16 value); #endif diff --git a/include/main_020107DC.h b/include/main_020107DC.h index 7718f9cf..9f7d4aea 100644 --- a/include/main_020107DC.h +++ b/include/main_020107DC.h @@ -2,5 +2,7 @@ #define PMDSKY_MAIN_020107DC_H u16 GetEggHatchTimer(void); +void SetEggHatchTimer(u16 timer); +void DecrementEggHatchTimer(void); #endif diff --git a/include/main_02011DF0.h b/include/main_02011DF0.h new file mode 100644 index 00000000..9103303a --- /dev/null +++ b/include/main_02011DF0.h @@ -0,0 +1,18 @@ +#ifndef PMDSKY_MAIN_02011DF0_H +#define PMDSKY_MAIN_02011DF0_H + +#include "util.h" + +struct unk_02011DF0 { + s16 field_0x0; + s32 field_0x4; + u8 field_0x8[0xA]; + u16 field_0x12; +}; + + +s16 GetRecycleItemId(struct unk_02011DF0** p); +bool8 RecycleItemHasTradeTypePrizeTicket(struct unk_02011DF0** p); +u16 GetRecycleItemBonusOdds(struct unk_02011DF0** p); + +#endif diff --git a/include/main_02011F14.h b/include/main_02011F14.h new file mode 100644 index 00000000..a688ba87 --- /dev/null +++ b/include/main_02011F14.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_MAIN_02011F14_H +#define PMDSKY_MAIN_02011F14_H + +void ClearRecycleShopOffer(void); +u32 GetGameStateRecycleCount(void); +u8 GetRankForRecycleShop(void); + +#endif diff --git a/include/main_0201227C.h b/include/main_0201227C.h new file mode 100644 index 00000000..0ea5c5ca --- /dev/null +++ b/include/main_0201227C.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_0201227C_H +#define PMDSKY_MAIN_0201227C_H + +s16 GetRecycleOfferCooldown(void); + +#endif diff --git a/main.lsf b/main.lsf index 40bf97b9..c1bea284 100644 --- a/main.lsf +++ b/main.lsf @@ -85,13 +85,17 @@ Static main Object src/main_0201070C.o Object asm/main_02010724.o Object src/main_0201077C.o - Object asm/main_02010794.o Object src/main_020107AC.o - Object asm/main_020107C4.o Object src/main_020107DC.o - Object asm/main_020107F4.o + Object asm/main_02010830.o Object src/exclusive_item.o Object asm/main_02010FC4.o + Object src/main_02011DF0.o + Object asm/main_02011E24.o + Object src/main_02011F14.o + Object asm/main_02011F60.o + Object src/main_0201227C.o + Object asm/main_02012294.o Object src/moves_1.o Object src/moves_2.o Object asm/main_02013884.o diff --git a/src/main_0201077C.c b/src/main_0201077C.c index 0f7b64ac..e2461da5 100644 --- a/src/main_0201077C.c +++ b/src/main_0201077C.c @@ -1,9 +1,21 @@ #include "main_0201077C.h" #include "item.h" +void SetMoneyStored(s32 money); extern struct bag_items *BAG_ITEMS_PTR_MIRROR; +void AddMoneyStored(s32 amount) +{ + SetMoneyStored(BAG_ITEMS_PTR_MIRROR->field_0x13A0 + amount); +} + + s16 GetEggSpecies(void) { return BAG_ITEMS_PTR_MIRROR->field_0x13A4; } + +void SetEggSpecies(s16 species) +{ + BAG_ITEMS_PTR_MIRROR->field_0x13A4 = species; +} diff --git a/src/main_020107AC.c b/src/main_020107AC.c index eacafaba..c9ef8bed 100644 --- a/src/main_020107AC.c +++ b/src/main_020107AC.c @@ -7,3 +7,8 @@ u16 GetUnkGameState0x13a6(void) { return BAG_ITEMS_PTR_MIRROR->field_0x13A6; } + +void SetUnkGameState0x13a6(u16 value) +{ + BAG_ITEMS_PTR_MIRROR->field_0x13A6 = value; +} diff --git a/src/main_020107DC.c b/src/main_020107DC.c index 8fbacea2..db8e7b44 100644 --- a/src/main_020107DC.c +++ b/src/main_020107DC.c @@ -7,3 +7,15 @@ u16 GetEggHatchTimer(void) { return BAG_ITEMS_PTR_MIRROR->field_0x13A8; } + +void SetEggHatchTimer(u16 timer) +{ + BAG_ITEMS_PTR_MIRROR->field_0x13A8 = timer; +} + +void DecrementEggHatchTimer(void) +{ + if (BAG_ITEMS_PTR_MIRROR->field_0x13A8 != 0) { + BAG_ITEMS_PTR_MIRROR->field_0x13A8--; + } +} diff --git a/src/main_02011DF0.c b/src/main_02011DF0.c new file mode 100644 index 00000000..e900807a --- /dev/null +++ b/src/main_02011DF0.c @@ -0,0 +1,16 @@ +#include "main_02011DF0.h" + +s16 GetRecycleItemId(struct unk_02011DF0** p) +{ + return (*p)->field_0x0; +} + +bool8 RecycleItemHasTradeTypePrizeTicket(struct unk_02011DF0** p) +{ + return (*p)->field_0x4 == 1; +} + +u16 GetRecycleItemBonusOdds(struct unk_02011DF0** p) +{ + return (*p)->field_0x12; +} diff --git a/src/main_02011F14.c b/src/main_02011F14.c new file mode 100644 index 00000000..fa50b4f7 --- /dev/null +++ b/src/main_02011F14.c @@ -0,0 +1,19 @@ +#include "main_02011F14.h" +#include "item.h" + +extern struct bag_items *BAG_ITEMS_PTR_MIRROR; + +void ClearRecycleShopOffer(void) +{ + BAG_ITEMS_PTR_MIRROR->field_0x13B2 = -1; +} + +u32 GetGameStateRecycleCount(void) +{ + return BAG_ITEMS_PTR_MIRROR->field_0x13AC; +} + +u8 GetRankForRecycleShop(void) +{ + return BAG_ITEMS_PTR_MIRROR->field_0x13AA; +} diff --git a/src/main_0201227C.c b/src/main_0201227C.c new file mode 100644 index 00000000..6ec01fb0 --- /dev/null +++ b/src/main_0201227C.c @@ -0,0 +1,9 @@ +#include "main_0201227C.h" +#include "item.h" + +extern struct bag_items *BAG_ITEMS_PTR_MIRROR; + +s16 GetRecycleOfferCooldown(void) +{ + return BAG_ITEMS_PTR_MIRROR->field_0x13B0; +}