diff --git a/asm/include/main_0200ED1C.inc b/asm/include/main_0200ED1C.inc index d87ced9e..ab3443d8 100644 --- a/asm/include/main_0200ED1C.inc +++ b/asm/include/main_0200ED1C.inc @@ -2,118 +2,35 @@ .public AreItemsEquivalent .public BAG_ITEMS_PTR_MIRROR .public BulkItemToItem -.public CALCIUM_STAT_BOOST -.public CopyBitsFrom -.public CopyBitsTo -.public DUNGEON_MOVE_TABLES -.public Debug_Print0 .public EXCLUSIVE_ITEM_ATTACK_BOOSTS .public EXCLUSIVE_ITEM_DEFENSE_BOOSTS -.public EXCLUSIVE_ITEM_EFFECT_DATA .public EXCLUSIVE_ITEM_SPECIAL_ATTACK_BOOSTS .public EXCLUSIVE_ITEM_SPECIAL_DEFENSE_BOOSTS .public EXCLUSIVE_ITEM_STAT_BOOST_DATA_INDEXES -.public FemaleToMaleForm -.public GINSENG_CHANCE_3 -.public GUMMI_STAT_BOOST .public GetBagCapacity .public GetBagCapacitySpecialEpisode -.public GetBaseFormCastformDeoxysCherrim -.public GetDungeonResultString -.public GetExclusiveItem -.public GetExclusiveItemParameter -.public GetExclusiveItemType .public GetExecuteSpecialEpisodeType -.public GetFamilyIndex .public GetItemCategory .public GetItemCategoryVeneer .public GetItemIdFromList -.public GetMaxPp -.public GetMoveBasePowerGround -.public GetMoveMaxGinsengBoostGround -.public GetPartyMembers .public GetPerformanceFlagWithChecks -.public GetRank .public GetRankStorageSize .public GetScenarioBalance -.public GetTeamMember -.public GetType -.public HasMonsterBeenAttackedInDungeons -.public IQ_GUMMI_GAIN_TABLE -.public IRON_STAT_BOOST .public InitBulkItem -.public Is2TurnsMove -.public IsGummi .public IsItemInTimeDarkness .public IsItemValidVeneer -.public IsMonsterValid .public IsStorableItem .public IsThrownItem -.public IsTicketItem .public IsTreasureBox .public ItemZInit .public KECLEON_SHOP_ITEM_TABLE_LISTS_1 .public KECLEON_SHOP_ITEM_TABLE_LISTS_2 -.public LIFE_SEED_HP_BOOST -.public LoadFileFromRom -.public LoadScriptVariableValue .public MemAlloc .public MemFree -.public MemZero -.public OpenWaza -.public PROTEIN_STAT_BOOST -.public RECYCLE_SHOP_ITEM_LIST -.public Rand16Bit -.public RandInt .public RandIntSafe -.public RandRange .public RemoveEmptyItems -.public SITRUS_BERRY_FULL_HP_BOOST -.public SaveScriptVariableValue -.public SelectWaza .public SetItemAcquired -.public SetNbRecycled .public SortItemList -.public StringFromId -.public TYPE_SPECIFIC_EXCLUSIVE_ITEMS -.public UnloadFile -.public WONDER_GUMMI_IQ_GAIN -.public WONDER_GUMMI_STAT_BOOST -.public ZINC_STAT_BOOST -.public ZInit8 -.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 _020AF6D4 -.public _020AF700 -.public _022A4BD8 -.public _s32_div_f .public sub_0200D1F0 .public sub_0200D8AC -.public sub_0200EB90 -.public sub_02050974 -.public sub_02050990 -.public sub_020509BC -.public sub_02054FB8 -.public sub_02054FEC -.public sub_02055020 -.public sub_02055054 .public sub_020582E0 -.public vsprintf diff --git a/asm/include/main_02010FC4.inc b/asm/include/main_02010FC4.inc new file mode 100644 index 00000000..ac7f8266 --- /dev/null +++ b/asm/include/main_02010FC4.inc @@ -0,0 +1,111 @@ +#pragma once +.public ApplyExclusiveItemStatBoosts +.public BAG_ITEMS_PTR_MIRROR +.public CALCIUM_STAT_BOOST +.public ConvertStorageItemAtIdxToBulkItem +.public CopyBitsFrom +.public CopyBitsTo +.public CountNbItemsOfTypeInBag +.public CountNbItemsOfTypeInStorage +.public CountNbOfItemsInStorage +.public DUNGEON_MOVE_TABLES +.public Debug_Print0 +.public EXCLUSIVE_ITEM_EFFECT_DATA +.public ExclusiveItemEffectFlagTest +.public FemaleToMaleForm +.public GINSENG_CHANCE_3 +.public GUMMI_STAT_BOOST +.public GetBaseFormCastformDeoxysCherrim +.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 HasMonsterBeenAttackedInDungeons +.public IQ_GUMMI_GAIN_TABLE +.public IRON_STAT_BOOST +.public InitBulkItem +.public Is2TurnsMove +.public IsGummi +.public IsMonsterValid +.public IsTicketItem +.public LIFE_SEED_HP_BOOST +.public LoadFileFromRom +.public LoadScriptVariableValue +.public MemAlloc +.public MemFree +.public MemZero +.public OpenWaza +.public PROTEIN_STAT_BOOST +.public RECYCLE_SHOP_ITEM_LIST +.public Rand16Bit +.public RandInt +.public RandIntSafe +.public RandRange +.public RemoveEmptyItemsInBag +.public RemoveItem +.public RemoveItemAtIdxInStorage +.public SITRUS_BERRY_FULL_HP_BOOST +.public SaveScriptVariableValue +.public SelectWaza +.public SetExclusiveItemEffect +.public SetNbRecycled +.public StringFromId +.public TYPE_SPECIFIC_EXCLUSIVE_ITEMS +.public UnloadFile +.public WONDER_GUMMI_IQ_GAIN +.public WONDER_GUMMI_STAT_BOOST +.public ZINC_STAT_BOOST +.public ZInit8 +.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 _020AF6D4 +.public _020AF700 +.public _022A4BD8 +.public _s32_div_f +.public sub_0200D1F0 +.public sub_0200EB90 +.public sub_02010044 +.public sub_0201007C +.public sub_02050974 +.public sub_02050990 +.public sub_020509BC +.public sub_02054FB8 +.public sub_02054FEC +.public sub_02055020 +.public sub_02055054 +.public vsprintf diff --git a/asm/main_0200ED1C.s b/asm/main_0200ED1C.s index c7731187..039e0bae 100644 --- a/asm/main_0200ED1C.s +++ b/asm/main_0200ED1C.s @@ -2857,3163 +2857,3 @@ SetExclusiveItemEffect: ; 0x02010F80 str r1, [r0, ip, lsl #2] bx lr arm_func_end SetExclusiveItemEffect - - arm_func_start ExclusiveItemEffectFlagTest -ExclusiveItemEffectFlagTest: ; 0x02010FA4 - mov r3, r1, lsr #5 - ldr r2, [r0, r3, lsl #2] - sub r0, r1, r3, lsl #5 - mov r1, #1 - tst r2, r1, lsl r0 - moveq r1, #0 - and r0, r1, #0xff - bx lr - arm_func_end ExclusiveItemEffectFlagTest - - arm_func_start IsExclusiveItemIdForMonster -IsExclusiveItemIdForMonster: ; 0x02010FC4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov sb, r0 - mov r8, r1 - mov r7, r2 - mov r6, r3 - bl GetItemCategory - cmp r0, #0xf - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - cmp r8, #0x258 - mov r5, #0 - ble _02011000 - mov r0, r8 - bl FemaleToMaleForm - mov r8, r0 -_02011000: - mov r0, sb - bl GetExclusiveItemType - movs r4, r0 - moveq r5, #0 - beq _0201108C - sub r0, r4, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #3 - mov r0, sb - bhi _0201104C - bl GetExclusiveItemParameter - and r0, r0, #0xff - cmp r7, r0 - cmpne r6, r0 - moveq r5, #1 - b _0201108C -_0201104C: - bl GetExclusiveItemParameter - mov r6, r0 - cmp r4, #9 - bne _02011068 - cmp r8, r6 - moveq r5, #1 - b _0201108C -_02011068: - cmp r4, #0xa - bne _0201107C - cmp r8, r6 - moveq r5, #1 - b _0201108C -_0201107C: - mov r0, r8 - bl GetFamilyIndex - cmp r6, r0 - moveq r5, #1 -_0201108C: - mov r0, r5 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - arm_func_end IsExclusiveItemIdForMonster - - arm_func_start IsExclusiveItemForMonster -IsExclusiveItemForMonster: ; 0x02011094 - stmdb sp!, {r3, lr} - ldrb ip, [r0] - tst ip, #1 - movne lr, #1 - moveq lr, #0 - tst lr, #0xff - moveq r0, #0 - ldmeqia sp!, {r3, pc} - tst ip, #8 - movne ip, #1 - moveq ip, #0 - tst ip, #0xff - movne r0, #0 - ldmneia sp!, {r3, pc} - ldrsh r0, [r0, #4] - bl IsExclusiveItemIdForMonster - ldmia sp!, {r3, pc} - arm_func_end IsExclusiveItemForMonster - - arm_func_start BagHasExclusiveItemTypeForMonster -BagHasExclusiveItemTypeForMonster: ; 0x020110D8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - mov sb, r1 - mov r8, r2 - mov r7, r3 - bl GetCurrentBagCapacity - mov r4, r0, lsl #0x10 - mov r5, #0 - ldr fp, _02011164 ; =EXCLUSIVE_ITEM_EFFECT_DATA - b _02011154 -_02011100: - ldr r0, _02011168 ; =BAG_ITEMS_PTR_MIRROR - mov r1, sb - ldr r0, [r0] - mov r2, r8 - ldr r3, [r0, #0x384] - mov r0, #6 - smlabb r6, r5, r0, r3 - mov r0, r6 - mov r3, r7 - bl IsExclusiveItemForMonster - cmp r0, #0 - beq _02011148 - ldrsh r0, [r6, #4] - bl GetExclusiveItemOffset - ldrb r0, [fp, r0, lsl #1] - cmp sl, r0 - ldreqsh r0, [r6, #4] - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_02011148: - add r0, r5, #1 - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 -_02011154: - cmp r5, r4, asr #16 - blt _02011100 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02011164: .word EXCLUSIVE_ITEM_EFFECT_DATA -_02011168: .word BAG_ITEMS_PTR_MIRROR - arm_func_end BagHasExclusiveItemTypeForMonster - - arm_func_start GetExclusiveItemForMonsterFromBag -GetExclusiveItemForMonsterFromBag: ; 0x0201116C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - mov sb, r1 - mov r8, r2 - mov fp, r3 - ldr r7, [sp, #0x28] - bl GetCurrentBagCapacity - mov r4, r0, lsl #0x10 - mov r5, #0 - b _02011208 -_02011194: - ldr r0, _02011218 ; =BAG_ITEMS_PTR_MIRROR - mov r1, r8 - ldr r0, [r0] - mov r2, fp - ldr r3, [r0, #0x384] - mov r0, #6 - smlabb r6, r5, r0, r3 - mov r0, r6 - mov r3, r7 - bl IsExclusiveItemForMonster - cmp r0, #0 - beq _020111FC - ldrsh r0, [r6, #4] - bl GetExclusiveItemOffset - ldr r1, _0201121C ; =EXCLUSIVE_ITEM_EFFECT_DATA - ldrb r0, [r1, r0, lsl #1] - cmp sb, r0 - bne _020111FC - ldrh r1, [r6] - mov r0, #1 - strh r1, [sl] - ldrh r1, [r6, #2] - strh r1, [sl, #2] - ldrh r1, [r6, #4] - strh r1, [sl, #4] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_020111FC: - add r0, r5, #1 - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 -_02011208: - cmp r5, r4, asr #16 - blt _02011194 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02011218: .word BAG_ITEMS_PTR_MIRROR -_0201121C: .word EXCLUSIVE_ITEM_EFFECT_DATA - arm_func_end GetExclusiveItemForMonsterFromBag - - arm_func_start sub_02011220 -sub_02011220: ; 0x02011220 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x68 - mov r8, r0 - mov r7, r1 - mov fp, r2 - str r3, [sp, #4] - bl GetCurrentBagCapacity - mov sb, r0, lsl #0x10 - mov r0, r8 - mov r1, #0x18 - mov r5, #0 - bl MemZero - mov r4, r5 - b _0201130C -_02011258: - ldr r1, _0201138C ; =BAG_ITEMS_PTR_MIRROR - mov r0, #6 - ldr r1, [r1] - smulbb r6, r4, r0 - ldr r0, [r1, #0x384] - ldr r3, [sp, #4] - mov r1, r7 - mov r2, fp - add r0, r0, r6 - bl IsExclusiveItemForMonster - cmp r0, #0 - beq _02011300 - ldr r0, _0201138C ; =BAG_ITEMS_PTR_MIRROR - mov lr, #0 - mov ip, lr - ldr sl, [r0] - b _020112D8 -_0201129C: - ldr r3, [sl, #0x384] - mov r1, ip, lsl #1 - add r0, sp, #8 - ldrsh r2, [r0, r1] - add r0, r3, r6 - ldrsh r1, [r0, #4] - mov r0, #6 - smlabb r0, r2, r0, r3 - ldrsh r0, [r0, #4] - cmp r0, r1 - moveq lr, #1 - beq _020112E0 - add r0, ip, #1 - mov r0, r0, lsl #0x10 - mov ip, r0, asr #0x10 -_020112D8: - cmp ip, r5 - blt _0201129C -_020112E0: - cmp lr, #0 - bne _02011300 - add r0, r5, #1 - mov r1, r0, lsl #0x10 - mov r2, r5, lsl #1 - add r0, sp, #8 - strh r4, [r0, r2] - mov r5, r1, asr #0x10 -_02011300: - add r0, r4, #1 - mov r0, r0, lsl #0x10 - mov r4, r0, asr #0x10 -_0201130C: - cmp r4, sb, asr #16 - blt _02011258 - mov sl, #0 - add r4, r8, #3 - add r7, sp, #8 - ldr r6, _02011390 ; =EXCLUSIVE_ITEM_EFFECT_DATA - ldr fp, _0201138C ; =BAG_ITEMS_PTR_MIRROR - b _0201137C -_0201132C: - mov r0, sl, lsl #1 - ldr r2, [fp] - ldrsh r1, [r7, r0] - ldr r2, [r2, #0x384] - mov r0, #6 - smlabb sb, r1, r0, r2 - ldrsh r0, [sb, #4] - bl GetExclusiveItemOffset - ldrb r1, [r6, r0, lsl #1] - add r0, r8, #4 - bl SetExclusiveItemEffect - str r4, [sp] - ldrsh r0, [sb, #4] - mov r1, r8 - add r2, r8, #1 - add r3, r8, #2 - bl ApplyExclusiveItemStatBoosts - add r0, sl, #1 - mov r0, r0, lsl #0x10 - mov sl, r0, asr #0x10 -_0201137C: - cmp sl, r5 - blt _0201132C - add sp, sp, #0x68 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0201138C: .word BAG_ITEMS_PTR_MIRROR -_02011390: .word EXCLUSIVE_ITEM_EFFECT_DATA - arm_func_end sub_02011220 - - arm_func_start GetHpBoostFromExclusiveItems -GetHpBoostFromExclusiveItems: ; 0x02011394 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - add r0, r5, #4 - mov r1, #0x4c - mov r4, #0 - bl ExclusiveItemEffectFlagTest - cmp r0, #0 - ldrne r0, _0201141C ; =_020A1878 - mov r1, #0x4d - ldrnesh r0, [r0] - addne r0, r4, r0 - movne r0, r0, lsl #0x10 - movne r4, r0, asr #0x10 - add r0, r5, #4 - bl ExclusiveItemEffectFlagTest - cmp r0, #0 - ldrne r0, _0201141C ; =_020A1878 - mov r1, #0x4e - ldrnesh r0, [r0] - addne r0, r4, r0, lsl #1 - movne r0, r0, lsl #0x10 - movne r4, r0, asr #0x10 - add r0, r5, #4 - bl ExclusiveItemEffectFlagTest - cmp r0, #0 - beq _02011414 - ldr r0, _0201141C ; =_020A1878 - ldrsh r0, [r0] - add r0, r0, r0, lsl #1 - add r0, r4, r0 - mov r0, r0, lsl #0x10 - mov r4, r0, asr #0x10 -_02011414: - mov r0, r4 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0201141C: .word _020A1878 - arm_func_end GetHpBoostFromExclusiveItems - - arm_func_start sub_02011420 -sub_02011420: ; 0x02011420 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - mov r1, #0 - bl GetType - mov r4, r0 - mov r0, sl - mov r1, #1 - bl GetType - mov r5, r0 - mov r0, #8 - mov r1, #0 - bl MemAlloc - mov r6, r0 - mov r0, #0xaf0 - mov r1, #0 - bl MemAlloc - ldr fp, _020114F4 ; =0x00000578 - mov r8, r0 - mov sb, #0 - mov r7, #0x1bc -_02011470: - mov r0, r7 - mov r1, sl - mov r2, r4 - mov r3, r5 - bl IsExclusiveItemIdForMonster - cmp r0, #0 - addne r0, sb, #1 - movne r1, sb, lsl #1 - movne r0, r0, lsl #0x10 - movne sb, r0, asr #0x10 - add r0, r7, #1 - mov r0, r0, lsl #0x10 - strneh r7, [r8, r1] - cmp fp, r0, asr #16 - mov r7, r0, asr #0x10 - bgt _02011470 - mov r0, sb, lsl #1 - mov r1, #0 - bl MemAlloc - stmia r6, {r0, sb} - mov r3, #0 - b _020114DC -_020114C8: - mov r2, r3, lsl #1 - ldrsh r1, [r8, r2] - ldr r0, [r6] - add r3, r3, #1 - strh r1, [r0, r2] -_020114DC: - cmp r3, sb - blt _020114C8 - mov r0, r8 - bl MemFree - mov r0, r6 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_020114F4: .word 0x00000578 - arm_func_end sub_02011420 - - arm_func_start sub_020114F8 -sub_020114F8: ; 0x020114F8 - 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_020114F8 - - arm_func_start ApplyGummiBoostsToGroundMonster -ApplyGummiBoostsToGroundMonster: ; 0x02011528 - stmdb sp!, {lr} - sub sp, sp, #0xc - mov ip, r0 - stmia sp, {r1, r2, r3} - add r0, ip, #4 - add r1, ip, #8 - add r2, ip, #0xc - add r3, ip, #0xe - bl ApplyGummiBoostsGroundMode - add sp, sp, #0xc - ldmia sp!, {pc} - arm_func_end ApplyGummiBoostsToGroundMonster - - arm_func_start ApplyGummiBoostsToTeamMember -ApplyGummiBoostsToTeamMember: ; 0x02011554 - stmdb sp!, {lr} - sub sp, sp, #0xc - mov ip, r0 - stmia sp, {r1, r2, r3} - add r0, ip, #0xc - add r1, ip, #6 - add r2, ip, #0x12 - add r3, ip, #0x14 - bl ApplyGummiBoostsGroundMode - add sp, sp, #0xc - ldmia sp!, {pc} - arm_func_end ApplyGummiBoostsToTeamMember - - arm_func_start ApplySitrusBerryBoostToGroundMonster -ApplySitrusBerryBoostToGroundMonster: ; 0x02011580 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r2, _020115B8 ; =SITRUS_BERRY_FULL_HP_BOOST - mov r7, r0 - ldrsh r5, [r2] - ldrsh r4, [r7, #0xa] - mov r6, r1 - add r0, r7, #0xa - mov r1, r5 - bl sub_02054FB8 - cmp r6, #0 - strne r5, [r6] - ldrsh r0, [r7, #0xa] - sub r0, r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_020115B8: .word SITRUS_BERRY_FULL_HP_BOOST - arm_func_end ApplySitrusBerryBoostToGroundMonster - - arm_func_start ApplyLifeSeedBoostToGroundMonster -ApplyLifeSeedBoostToGroundMonster: ; 0x020115BC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r2, _020115F4 ; =LIFE_SEED_HP_BOOST - mov r7, r0 - ldrsh r5, [r2] - ldrsh r4, [r7, #0xa] - mov r6, r1 - add r0, r7, #0xa - mov r1, r5 - bl sub_02054FB8 - cmp r6, #0 - strne r5, [r6] - ldrsh r0, [r7, #0xa] - sub r0, r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_020115F4: .word LIFE_SEED_HP_BOOST - arm_func_end ApplyLifeSeedBoostToGroundMonster - - arm_func_start ApplyGinsengToGroundMonster -ApplyGinsengToGroundMonster: ; 0x020115F8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r5, r0 - mov r0, #0x64 - mov sb, r1 - mov r8, r2 - mvn r4, #0 - mov r6, #0 - bl RandInt - ldr r1, _02011708 ; =GINSENG_CHANCE_3 - mov ip, #0 - ldrsh r1, [r1] - mov r2, #1 - cmp r0, r1 - movlt r7, #3 - movge r7, #1 - mov r1, ip - mov r0, #6 - b _02011664 -_02011640: - mla r3, ip, r0, r5 - ldrb r3, [r3, #0x22] - tst r3, #1 - movne r3, r2 - moveq r3, r1 - tst r3, #0xff - movne r4, ip - bne _0201166C - add ip, ip, #1 -_02011664: - cmp ip, #4 - blt _02011640 -_0201166C: - mvn r0, #0 - cmp r4, r0 - bne _02011698 - cmp sb, #0 - movne r0, #0 - strneh r0, [sb] - cmp r8, #0 - movne r0, #0 - strne r0, [r8] - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_02011698: - add r1, r5, #0x22 - mov r0, #6 - mla r5, r4, r0, r1 - mov r0, r5 - bl GetMoveBasePowerGround - cmp r0, #0 - beq _020116E4 - mov r0, r5 - ldrb r4, [r5, #4] - bl GetMoveMaxGinsengBoostGround - ldrb r1, [r5, #4] - add r2, r1, r7 - and r1, r2, #0xff - strb r2, [r5, #4] - cmp r1, r0 - strgeb r0, [r5, #4] - ldrb r0, [r5, #4] - cmp r4, r0 - movne r6, #1 -_020116E4: - cmp sb, #0 - ldrneh r0, [r5, #2] - strneh r0, [sb] - cmp r8, #0 - strne r7, [r8] - cmp r6, #0 - moveq r7, #0 - mov r0, r7 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02011708: .word GINSENG_CHANCE_3 - arm_func_end ApplyGinsengToGroundMonster - - arm_func_start ApplyProteinBoostToGroundMonster -ApplyProteinBoostToGroundMonster: ; 0x0201170C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r2, _02011744 ; =PROTEIN_STAT_BOOST - mov r7, r0 - ldrsh r5, [r2] - ldrb r4, [r7, #0xc] - mov r6, r1 - add r0, r7, #0xc - mov r1, r5 - bl sub_02054FEC - cmp r6, #0 - strne r5, [r6] - ldrb r0, [r7, #0xc] - sub r0, r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02011744: .word PROTEIN_STAT_BOOST - arm_func_end ApplyProteinBoostToGroundMonster - - arm_func_start ApplyCalciumBoostToGroundMonster -ApplyCalciumBoostToGroundMonster: ; 0x02011748 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r2, _02011780 ; =CALCIUM_STAT_BOOST - mov r7, r0 - ldrsh r5, [r2] - ldrb r4, [r7, #0xd] - mov r6, r1 - add r0, r7, #0xd - mov r1, r5 - bl sub_02054FEC - cmp r6, #0 - strne r5, [r6] - ldrb r0, [r7, #0xd] - sub r0, r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02011780: .word CALCIUM_STAT_BOOST - arm_func_end ApplyCalciumBoostToGroundMonster - - arm_func_start ApplyIronBoostToGroundMonster -ApplyIronBoostToGroundMonster: ; 0x02011784 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r2, _020117BC ; =IRON_STAT_BOOST - mov r7, r0 - ldrsh r5, [r2] - ldrb r4, [r7, #0xe] - mov r6, r1 - add r0, r7, #0xe - mov r1, r5 - bl sub_02055020 - cmp r6, #0 - strne r5, [r6] - ldrb r0, [r7, #0xe] - sub r0, r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_020117BC: .word IRON_STAT_BOOST - arm_func_end ApplyIronBoostToGroundMonster - - arm_func_start ApplyZincBoostToGroundMonster -ApplyZincBoostToGroundMonster: ; 0x020117C0 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r2, _020117F8 ; =ZINC_STAT_BOOST - mov r7, r0 - ldrsh r5, [r2] - ldrb r4, [r7, #0xf] - mov r6, r1 - add r0, r7, #0xf - mov r1, r5 - bl sub_02055020 - cmp r6, #0 - strne r5, [r6] - ldrb r0, [r7, #0xf] - sub r0, r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_020117F8: .word ZINC_STAT_BOOST - arm_func_end ApplyZincBoostToGroundMonster - - arm_func_start ApplyNectarBoostToGroundMonster -ApplyNectarBoostToGroundMonster: ; 0x020117FC - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - ldrsh r4, [r6, #8] - mov r5, r1 - add r0, r6, #8 - mov r1, #0xa - bl sub_02055054 - cmp r5, #0 - movne r0, #0xa - strne r0, [r5] - ldrsh r0, [r6, #8] - sub r0, r0, r4 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end ApplyNectarBoostToGroundMonster - - arm_func_start IsMonsterAffectedByGravelyrockGroundMode -IsMonsterAffectedByGravelyrockGroundMode: ; 0x02011830 - stmdb sp!, {r3, lr} - ldrsh r0, [r0, #4] - bl FemaleToMaleForm - cmp r0, #0x1e0 - cmpne r0, #0xb9 - moveq r0, #1 - movne r0, #0 - ldmia sp!, {r3, pc} - arm_func_end IsMonsterAffectedByGravelyrockGroundMode - - arm_func_start ApplyGravelyrockBoostToGroundMonster -ApplyGravelyrockBoostToGroundMonster: ; 0x02011850 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - ldrsh r4, [r6, #8] - bl IsMonsterAffectedByGravelyrockGroundMode - cmp r0, #0 - beq _02011884 - add r0, r6, #8 - mov r1, #0xa - bl sub_02055054 - cmp r5, #0 - movne r0, #0xa - b _0201188C -_02011884: - cmp r5, #0 - movne r0, #0 -_0201188C: - strne r0, [r5] - ldrsh r0, [r6, #8] - sub r0, r0, r4 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end ApplyGravelyrockBoostToGroundMonster - - arm_func_start ApplyGummiBoostsGroundMode -ApplyGummiBoostsGroundMode: ; 0x0201189C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - ldrsh r0, [sp, #0x28] - mov r4, #0 - ldr r6, [sp, #0x30] - sub r5, r4, #1 - strh r5, [r6] - mov sb, r1 - mov r8, r2 - mov r7, r3 - sub fp, r0, #0x77 - strh r4, [r6, #2] - bl IsGummi - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrsh r0, [sp, #0x28] - cmp r0, #0x88 - bne _020118FC - ldr r1, _02011AA0 ; =WONDER_GUMMI_IQ_GAIN - ldr r0, _02011AA4 ; =WONDER_GUMMI_STAT_BOOST - ldrsh r1, [r1] - ldrsh r5, [r0] - add r4, r4, r1 - b _02011950 -_020118FC: - ldrsh r0, [sl] - ldr r2, _02011AA8 ; =GUMMI_STAT_BOOST - mov r1, r4 - ldrsh r5, [r2] - bl GetType - str r0, [sp] - ldrsh r0, [sl] - mov r1, #1 - bl GetType - add sl, fp, #1 - ldr fp, _02011AAC ; =IQ_GUMMI_GAIN_TABLE - ldr r1, [sp] - mov r2, #0x24 - mla r3, r1, r2, fp - mla r1, r0, r2, fp - mov sl, sl, lsl #1 - ldrsh r2, [sl, r3] - ldrsh r0, [sl, r1] - cmp r2, r0 - addgt r4, r4, r2 - addle r4, r4, r0 -_02011950: - ldrsh r1, [sb] - add r0, r1, r4 - strh r0, [sb] - ldrsh r0, [sb] - cmp r0, #1 - sub r2, r0, r1 - movlt r0, #1 - strlth r0, [sb] - ldrsh r1, [sb] - ldr r0, _02011AB0 ; =0x000003E7 - cmp r1, r0 - strgth r0, [sb] - cmp r2, #9 - movge r1, #0 - bge _020119A4 - cmp r2, #5 - movge r1, #1 - bge _020119A4 - cmp r2, #3 - movge r1, #2 - movlt r1, #3 -_020119A4: - ldrb r0, [sp, #0x2c] - strh r1, [r6] - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - cmp r1, #0 - bne _020119D4 - mov r0, #0x10 - bl RandIntSafe - cmp r0, #0xa - moveq r0, #0xf - streqh r0, [r6, #2] - beq _020119EC -_020119D4: - mov r0, #4 - bl RandIntSafe - ldr r1, _02011AB4 ; =_0209889C - mov r0, r0, lsl #1 - ldrh r0, [r1, r0] - strh r0, [r6, #2] -_020119EC: - ldrh r1, [r6, #2] - tst r1, #1 - beq _02011A18 - ldrb r0, [r8] - cmp r0, #0xff - bichs r0, r1, #1 - strhsh r0, [r6, #2] - bhs _02011A18 - mov r0, r8 - mov r1, r5 - bl sub_02054FEC -_02011A18: - ldrh r1, [r6, #2] - tst r1, #2 - beq _02011A44 - ldrb r0, [r8, #1] - cmp r0, #0xff - bichs r0, r1, #2 - strhsh r0, [r6, #2] - bhs _02011A44 - mov r1, r5 - add r0, r8, #1 - bl sub_02054FEC -_02011A44: - ldrh r1, [r6, #2] - tst r1, #4 - beq _02011A70 - ldrb r0, [r7] - cmp r0, #0xff - bichs r0, r1, #4 - strhsh r0, [r6, #2] - bhs _02011A70 - mov r0, r7 - mov r1, r5 - bl sub_02055020 -_02011A70: - ldrh r1, [r6, #2] - tst r1, #8 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrb r0, [r7, #1] - cmp r0, #0xff - bichs r0, r1, #8 - strhsh r0, [r6, #2] - ldmhsia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r1, r5 - add r0, r7, #1 - bl sub_02055020 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02011AA0: .word WONDER_GUMMI_IQ_GAIN -_02011AA4: .word WONDER_GUMMI_STAT_BOOST -_02011AA8: .word GUMMI_STAT_BOOST -_02011AAC: .word IQ_GUMMI_GAIN_TABLE -_02011AB0: .word 0x000003E7 -_02011AB4: .word _0209889C - arm_func_end ApplyGummiBoostsGroundMode - - arm_func_start sub_02011AB8 -sub_02011AB8: ; 0x02011AB8 - stmdb sp!, {r3, lr} - ldr ip, _02011B38 ; =BAG_ITEMS_PTR_MIRROR - mov r0, #0 - ldr r1, [ip] - mov r2, r0 - add r1, r1, #0x1000 - strb r0, [r1, #0x3aa] - ldr r1, [ip] - sub lr, r0, #1 - add r1, r1, #0x1000 - str r0, [r1, #0x3ac] - ldr r3, [ip] - mov r1, #0x6d - add r3, r3, #0x1300 - strh r0, [r3, #0xb0] - ldr r3, [ip] - add r3, r3, #0x1300 - strh lr, [r3, #0xb2] - bl SaveScriptVariableValue - mov r0, #0 - mov r2, r0 - mov r1, #0x6b - bl SaveScriptVariableValue - mov r0, #0 - mov r2, r0 - mov r1, #0x6c - bl SaveScriptVariableValue - mov r0, #0 - mov r2, r0 - mov r1, #0x6a - bl SaveScriptVariableValue - ldmia sp!, {r3, pc} - .align 2, 0 -_02011B38: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02011AB8 - - arm_func_start sub_02011B3C -sub_02011B3C: ; 0x02011B3C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x1c - mov sl, r0 - mov r8, r1 - mov r7, r2 - mov r0, #8 - mov r1, #6 - bl MemAlloc - mov sb, r0 - mov r0, sl - mov r1, r8 - mov r2, r7 - bl sub_020128DC - movs r1, r0 - str r0, [sb, #4] - moveq r0, #0 - streq r0, [sb] - beq _02011CE8 - mov r0, #0x18 - mul r0, r1, r0 - mov r1, #6 - bl MemAlloc - str r0, [sb] - ldr r2, [sb, #4] - mov r1, #0x18 - mul r1, r2, r1 - bl MemZero - mov r5, #0 - mov r6, r5 - mov r4, #0x18 - b _02011BF8 -_02011BB8: - str r7, [sp] - ldr r0, [sb] - mov r1, r6 - mla r0, r5, r4, r0 - mov r2, sl - mov r3, r8 - bl sub_0201297C - cmp r0, #0 - beq _02011BEC - ldr r0, [sb, #4] - add r5, r5, #1 - cmp r5, r0 - beq _02011C00 -_02011BEC: - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 -_02011BF8: - cmp r6, #0x18 - blt _02011BB8 -_02011C00: - mov r8, #0 - b _02011CDC -_02011C08: - mov r0, #0x18 - mul sl, r8, r0 - ldr r0, [sb] - mvn r6, #0 - ldr r0, [r0, sl] - ldrsh r0, [r0] - bl sub_0200D1F0 - mov fp, r0 - add r7, r8, #1 - b _02011C68 -_02011C30: - mov r0, #0x18 - mul r4, r7, r0 - ldr r5, [sb] - ldr r0, [r5, r4] - ldrsh r0, [r0] - bl sub_0200D1F0 - cmp fp, r0 - ble _02011C64 - ldr r0, [r5, r4] - mov r6, r7 - ldrsh r0, [r0] - bl sub_0200D1F0 - mov fp, r0 -_02011C64: - add r7, r7, #1 -_02011C68: - ldr r0, [sb, #4] - cmp r7, r0 - blt _02011C30 - mvn r0, #0 - cmp r6, r0 - beq _02011CD8 - ldr r4, [sb] - mov r0, #0x18 - add fp, r4, sl - mul r5, r6, r0 - add r7, sp, #4 - mov sl, fp - mov r6, r7 - ldmia sl!, {r0, r1, r2, r3} - stmia r7!, {r0, r1, r2, r3} - ldmia sl, {r0, r1} - stmia r7, {r0, r1} - add r4, r4, r5 - ldmia r4!, {r0, r1, r2, r3} - stmia fp!, {r0, r1, r2, r3} - ldmia r4, {r0, r1} - stmia fp, {r0, r1} - ldr r4, [sb] - ldmia r6!, {r0, r1, r2, r3} - add r4, r4, r5 - stmia r4!, {r0, r1, r2, r3} - ldmia r6, {r0, r1} - stmia r4, {r0, r1} -_02011CD8: - add r8, r8, #1 -_02011CDC: - ldr r0, [sb, #4] - cmp r8, r0 - blt _02011C08 -_02011CE8: - mov r0, sb - add sp, sp, #0x1c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end sub_02011B3C - - arm_func_start sub_02011CF4 -sub_02011CF4: ; 0x02011CF4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r1 - mov r6, r2 - cmp r0, #2 - bne _02011D90 - ldr r0, _02011D98 ; =BAG_ITEMS_PTR_MIRROR - mvn r1, #0 - ldr r0, [r0] - add r0, r0, #0x1300 - ldrsh r5, [r0, #0xb2] - cmp r5, r1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, #8 - mov r1, #6 - bl MemAlloc - mov r4, r0 - mov r1, #1 - mov r0, #0x18 - smulbb r0, r1, r0 - str r1, [r4, #4] - mov r1, #6 - bl MemAlloc - str r0, [r4] - ldr r2, [r4, #4] - mov r1, #0x18 - mul r1, r2, r1 - bl MemZero - str r6, [sp] - ldr r0, [r4] - mov r1, r5 - mov r3, r7 - mov r2, #2 - bl sub_0201297C - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02011D90: - bl sub_02011B3C - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02011D98: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02011CF4 - - arm_func_start sub_02011D9C -sub_02011D9C: ; 0x02011D9C - ldr ip, _02011DB0 ; =sub_02011B3C - mov r1, r0 - ldr r2, _02011DB4 ; =0x000F423F - mov r0, #1 - bx ip - .align 2, 0 -_02011DB0: .word sub_02011B3C -_02011DB4: .word 0x000F423F - arm_func_end sub_02011D9C - - arm_func_start sub_02011DB8 -sub_02011DB8: ; 0x02011DB8 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, [r4] - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, [r0] - cmp r0, #0 - beq _02011DDC - bl MemFree -_02011DDC: - ldr r0, [r4] - bl MemFree - mov r0, #0 - str r0, [r4] - ldmia sp!, {r4, pc} - arm_func_end sub_02011DB8 - - arm_func_start sub_02011DF0 -sub_02011DF0: ; 0x02011DF0 - ldr r0, [r0] - ldrsh r0, [r0] - bx lr - arm_func_end sub_02011DF0 - - arm_func_start sub_02011DFC -sub_02011DFC: ; 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 sub_02011DFC - - arm_func_start sub_02011E18 -sub_02011E18: ; 0x02011E18 - ldr r0, [r0] - ldrh r0, [r0, #0x12] - bx lr - arm_func_end sub_02011E18 - - arm_func_start sub_02011E24 -sub_02011E24: ; 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 sub_02011E24 - - 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 sub_02011EC4 -sub_02011EC4: ; 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 sub_02011EC4 - - arm_func_start sub_02011EE8 -sub_02011EE8: ; 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 sub_02011EE8 - - arm_func_start sub_02011F14 -sub_02011F14: ; 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 sub_02011F14 - - arm_func_start sub_02011F30 -sub_02011F30: ; 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 sub_02011F30 - - arm_func_start sub_02011F48 -sub_02011F48: ; 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 sub_02011F48 - - arm_func_start sub_02011F60 -sub_02011F60: ; 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 sub_02011F60 - - arm_func_start sub_02011FA0 -sub_02011FA0: ; 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 sub_020128DC - mov r4, r0 - mov r1, r6 - mov r2, r5 - mov r0, #2 - bl sub_020128DC - 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 sub_020128DC - mov r1, r6 - mov r2, r5 - mov r5, r0 - mov r0, #2 - bl sub_020128DC - 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 sub_02012254 - 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 sub_02011DB8 - 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 sub_02012224 -_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 sub_02011FA0 - - arm_func_start sub_02012224 -sub_02012224: ; 0x02012224 - stmdb sp!, {r3, lr} - bl sub_02012254 - 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 sub_02012224 - - arm_func_start sub_02012254 -sub_02012254: ; 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 sub_02012254 - - arm_func_start sub_0201227C -sub_0201227C: ; 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 sub_0201227C - - 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 sub_02012630 - 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 sub_02012630 - 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 sub_020125FC -sub_020125FC: ; 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 sub_020125FC - - arm_func_start sub_02012630 -sub_02012630: ; 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 sub_020125FC - ldmia sp!, {r4, pc} - arm_func_end sub_02012630 - - arm_func_start sub_0201265C -sub_0201265C: ; 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 sub_02012630 - 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 sub_0201265C - - arm_func_start sub_020126C8 -sub_020126C8: ; 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 sub_02012630 - 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 sub_020126C8 - - 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 sub_0201265C - add r1, sl, r8, lsl #1 - strh r0, [r1, #4] - mov r0, #1 - bl sub_020126C8 - add r1, sl, r8, lsl #1 - strh r0, [r1, #0xc] - b _02012850 -_02012810: - mov r0, #0 - bl sub_0201265C - add r1, sl, r8, lsl #1 - strh r0, [r1, #4] - mov r0, #0 - bl sub_020126C8 - 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 sub_0201007C - 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 sub_0201007C - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02012874 - - arm_func_start sub_020128DC -sub_020128DC: ; 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 sub_02012954 - 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 sub_020128DC - - arm_func_start sub_02012954 -sub_02012954: ; 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 sub_02012954 - - 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 sub_02012954 - 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 sub_0201265C - add r1, sl, sb, lsl #1 - strh r0, [r1, #4] - mov r0, r5 - bl sub_020126C8 - add r1, sl, sb, lsl #1 - strh r0, [r1, #0xc] - b _02012A84 -_02012A44: - mov r0, fp - bl sub_0201265C - add r1, sl, sb, lsl #1 - strh r0, [r1, #4] - mov r0, #0 - bl sub_020126C8 - 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 sub_02012AB8 -sub_02012AB8: ; 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 sub_02012AB8 - - 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 ; =_020AF6D4 - 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 _020AF6D4 -_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 ; =_020AF6D4 - 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 _020AF6D4 - arm_func_end CloseSynthBin - - arm_func_start sub_02012B7C -sub_02012B7C: ; 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 sub_020132A4 - 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 sub_020132A4 - 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 sub_02012B7C - - arm_func_start sub_020130B8 -sub_020130B8: ; 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 sub_020130B8 - - arm_func_start sub_02013150 -sub_02013150: ; 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 sub_02013150 - - arm_func_start sub_02013190 -sub_02013190: ; 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 sub_02050974 - 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 sub_020509BC - 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 sub_02013190 - - arm_func_start sub_020131F0 -sub_020131F0: ; 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 sub_02050990 - 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 sub_020509BC - 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 sub_020131F0 - - 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 sub_020132A4 -sub_020132A4: ; 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 sub_0200EB90 - 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 sub_020132A4 - - 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_02010FC4.s b/asm/main_02010FC4.s new file mode 100644 index 00000000..c9ab8096 --- /dev/null +++ b/asm/main_02010FC4.s @@ -0,0 +1,3152 @@ + .include "asm/macros.inc" + .include "main_02010FC4.inc" + + .text + + arm_func_start IsExclusiveItemIdForMonster +IsExclusiveItemIdForMonster: ; 0x02010FC4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov sb, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + bl GetItemCategory + cmp r0, #0xf + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + cmp r8, #0x258 + mov r5, #0 + ble _02011000 + mov r0, r8 + bl FemaleToMaleForm + mov r8, r0 +_02011000: + mov r0, sb + bl GetExclusiveItemType + movs r4, r0 + moveq r5, #0 + beq _0201108C + sub r0, r4, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #3 + mov r0, sb + bhi _0201104C + bl GetExclusiveItemParameter + and r0, r0, #0xff + cmp r7, r0 + cmpne r6, r0 + moveq r5, #1 + b _0201108C +_0201104C: + bl GetExclusiveItemParameter + mov r6, r0 + cmp r4, #9 + bne _02011068 + cmp r8, r6 + moveq r5, #1 + b _0201108C +_02011068: + cmp r4, #0xa + bne _0201107C + cmp r8, r6 + moveq r5, #1 + b _0201108C +_0201107C: + mov r0, r8 + bl GetFamilyIndex + cmp r6, r0 + moveq r5, #1 +_0201108C: + mov r0, r5 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + arm_func_end IsExclusiveItemIdForMonster + + arm_func_start IsExclusiveItemForMonster +IsExclusiveItemForMonster: ; 0x02011094 + stmdb sp!, {r3, lr} + ldrb ip, [r0] + tst ip, #1 + movne lr, #1 + moveq lr, #0 + tst lr, #0xff + moveq r0, #0 + ldmeqia sp!, {r3, pc} + tst ip, #8 + movne ip, #1 + moveq ip, #0 + tst ip, #0xff + movne r0, #0 + ldmneia sp!, {r3, pc} + ldrsh r0, [r0, #4] + bl IsExclusiveItemIdForMonster + ldmia sp!, {r3, pc} + arm_func_end IsExclusiveItemForMonster + + arm_func_start BagHasExclusiveItemTypeForMonster +BagHasExclusiveItemTypeForMonster: ; 0x020110D8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + mov sb, r1 + mov r8, r2 + mov r7, r3 + bl GetCurrentBagCapacity + mov r4, r0, lsl #0x10 + mov r5, #0 + ldr fp, _02011164 ; =EXCLUSIVE_ITEM_EFFECT_DATA + b _02011154 +_02011100: + ldr r0, _02011168 ; =BAG_ITEMS_PTR_MIRROR + mov r1, sb + ldr r0, [r0] + mov r2, r8 + ldr r3, [r0, #0x384] + mov r0, #6 + smlabb r6, r5, r0, r3 + mov r0, r6 + mov r3, r7 + bl IsExclusiveItemForMonster + cmp r0, #0 + beq _02011148 + ldrsh r0, [r6, #4] + bl GetExclusiveItemOffset + ldrb r0, [fp, r0, lsl #1] + cmp sl, r0 + ldreqsh r0, [r6, #4] + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02011148: + add r0, r5, #1 + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 +_02011154: + cmp r5, r4, asr #16 + blt _02011100 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02011164: .word EXCLUSIVE_ITEM_EFFECT_DATA +_02011168: .word BAG_ITEMS_PTR_MIRROR + arm_func_end BagHasExclusiveItemTypeForMonster + + arm_func_start GetExclusiveItemForMonsterFromBag +GetExclusiveItemForMonsterFromBag: ; 0x0201116C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + mov sb, r1 + mov r8, r2 + mov fp, r3 + ldr r7, [sp, #0x28] + bl GetCurrentBagCapacity + mov r4, r0, lsl #0x10 + mov r5, #0 + b _02011208 +_02011194: + ldr r0, _02011218 ; =BAG_ITEMS_PTR_MIRROR + mov r1, r8 + ldr r0, [r0] + mov r2, fp + ldr r3, [r0, #0x384] + mov r0, #6 + smlabb r6, r5, r0, r3 + mov r0, r6 + mov r3, r7 + bl IsExclusiveItemForMonster + cmp r0, #0 + beq _020111FC + ldrsh r0, [r6, #4] + bl GetExclusiveItemOffset + ldr r1, _0201121C ; =EXCLUSIVE_ITEM_EFFECT_DATA + ldrb r0, [r1, r0, lsl #1] + cmp sb, r0 + bne _020111FC + ldrh r1, [r6] + mov r0, #1 + strh r1, [sl] + ldrh r1, [r6, #2] + strh r1, [sl, #2] + ldrh r1, [r6, #4] + strh r1, [sl, #4] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_020111FC: + add r0, r5, #1 + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 +_02011208: + cmp r5, r4, asr #16 + blt _02011194 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02011218: .word BAG_ITEMS_PTR_MIRROR +_0201121C: .word EXCLUSIVE_ITEM_EFFECT_DATA + arm_func_end GetExclusiveItemForMonsterFromBag + + arm_func_start sub_02011220 +sub_02011220: ; 0x02011220 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x68 + mov r8, r0 + mov r7, r1 + mov fp, r2 + str r3, [sp, #4] + bl GetCurrentBagCapacity + mov sb, r0, lsl #0x10 + mov r0, r8 + mov r1, #0x18 + mov r5, #0 + bl MemZero + mov r4, r5 + b _0201130C +_02011258: + ldr r1, _0201138C ; =BAG_ITEMS_PTR_MIRROR + mov r0, #6 + ldr r1, [r1] + smulbb r6, r4, r0 + ldr r0, [r1, #0x384] + ldr r3, [sp, #4] + mov r1, r7 + mov r2, fp + add r0, r0, r6 + bl IsExclusiveItemForMonster + cmp r0, #0 + beq _02011300 + ldr r0, _0201138C ; =BAG_ITEMS_PTR_MIRROR + mov lr, #0 + mov ip, lr + ldr sl, [r0] + b _020112D8 +_0201129C: + ldr r3, [sl, #0x384] + mov r1, ip, lsl #1 + add r0, sp, #8 + ldrsh r2, [r0, r1] + add r0, r3, r6 + ldrsh r1, [r0, #4] + mov r0, #6 + smlabb r0, r2, r0, r3 + ldrsh r0, [r0, #4] + cmp r0, r1 + moveq lr, #1 + beq _020112E0 + add r0, ip, #1 + mov r0, r0, lsl #0x10 + mov ip, r0, asr #0x10 +_020112D8: + cmp ip, r5 + blt _0201129C +_020112E0: + cmp lr, #0 + bne _02011300 + add r0, r5, #1 + mov r1, r0, lsl #0x10 + mov r2, r5, lsl #1 + add r0, sp, #8 + strh r4, [r0, r2] + mov r5, r1, asr #0x10 +_02011300: + add r0, r4, #1 + mov r0, r0, lsl #0x10 + mov r4, r0, asr #0x10 +_0201130C: + cmp r4, sb, asr #16 + blt _02011258 + mov sl, #0 + add r4, r8, #3 + add r7, sp, #8 + ldr r6, _02011390 ; =EXCLUSIVE_ITEM_EFFECT_DATA + ldr fp, _0201138C ; =BAG_ITEMS_PTR_MIRROR + b _0201137C +_0201132C: + mov r0, sl, lsl #1 + ldr r2, [fp] + ldrsh r1, [r7, r0] + ldr r2, [r2, #0x384] + mov r0, #6 + smlabb sb, r1, r0, r2 + ldrsh r0, [sb, #4] + bl GetExclusiveItemOffset + ldrb r1, [r6, r0, lsl #1] + add r0, r8, #4 + bl SetExclusiveItemEffect + str r4, [sp] + ldrsh r0, [sb, #4] + mov r1, r8 + add r2, r8, #1 + add r3, r8, #2 + bl ApplyExclusiveItemStatBoosts + add r0, sl, #1 + mov r0, r0, lsl #0x10 + mov sl, r0, asr #0x10 +_0201137C: + cmp sl, r5 + blt _0201132C + add sp, sp, #0x68 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0201138C: .word BAG_ITEMS_PTR_MIRROR +_02011390: .word EXCLUSIVE_ITEM_EFFECT_DATA + arm_func_end sub_02011220 + + arm_func_start GetHpBoostFromExclusiveItems +GetHpBoostFromExclusiveItems: ; 0x02011394 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + add r0, r5, #4 + mov r1, #0x4c + mov r4, #0 + bl ExclusiveItemEffectFlagTest + cmp r0, #0 + ldrne r0, _0201141C ; =_020A1878 + mov r1, #0x4d + ldrnesh r0, [r0] + addne r0, r4, r0 + movne r0, r0, lsl #0x10 + movne r4, r0, asr #0x10 + add r0, r5, #4 + bl ExclusiveItemEffectFlagTest + cmp r0, #0 + ldrne r0, _0201141C ; =_020A1878 + mov r1, #0x4e + ldrnesh r0, [r0] + addne r0, r4, r0, lsl #1 + movne r0, r0, lsl #0x10 + movne r4, r0, asr #0x10 + add r0, r5, #4 + bl ExclusiveItemEffectFlagTest + cmp r0, #0 + beq _02011414 + ldr r0, _0201141C ; =_020A1878 + ldrsh r0, [r0] + add r0, r0, r0, lsl #1 + add r0, r4, r0 + mov r0, r0, lsl #0x10 + mov r4, r0, asr #0x10 +_02011414: + mov r0, r4 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0201141C: .word _020A1878 + arm_func_end GetHpBoostFromExclusiveItems + + arm_func_start sub_02011420 +sub_02011420: ; 0x02011420 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + mov r1, #0 + bl GetType + mov r4, r0 + mov r0, sl + mov r1, #1 + bl GetType + mov r5, r0 + mov r0, #8 + mov r1, #0 + bl MemAlloc + mov r6, r0 + mov r0, #0xaf0 + mov r1, #0 + bl MemAlloc + ldr fp, _020114F4 ; =0x00000578 + mov r8, r0 + mov sb, #0 + mov r7, #0x1bc +_02011470: + mov r0, r7 + mov r1, sl + mov r2, r4 + mov r3, r5 + bl IsExclusiveItemIdForMonster + cmp r0, #0 + addne r0, sb, #1 + movne r1, sb, lsl #1 + movne r0, r0, lsl #0x10 + movne sb, r0, asr #0x10 + add r0, r7, #1 + mov r0, r0, lsl #0x10 + strneh r7, [r8, r1] + cmp fp, r0, asr #16 + mov r7, r0, asr #0x10 + bgt _02011470 + mov r0, sb, lsl #1 + mov r1, #0 + bl MemAlloc + stmia r6, {r0, sb} + mov r3, #0 + b _020114DC +_020114C8: + mov r2, r3, lsl #1 + ldrsh r1, [r8, r2] + ldr r0, [r6] + add r3, r3, #1 + strh r1, [r0, r2] +_020114DC: + cmp r3, sb + blt _020114C8 + mov r0, r8 + bl MemFree + mov r0, r6 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_020114F4: .word 0x00000578 + arm_func_end sub_02011420 + + arm_func_start sub_020114F8 +sub_020114F8: ; 0x020114F8 + 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_020114F8 + + arm_func_start ApplyGummiBoostsToGroundMonster +ApplyGummiBoostsToGroundMonster: ; 0x02011528 + stmdb sp!, {lr} + sub sp, sp, #0xc + mov ip, r0 + stmia sp, {r1, r2, r3} + add r0, ip, #4 + add r1, ip, #8 + add r2, ip, #0xc + add r3, ip, #0xe + bl ApplyGummiBoostsGroundMode + add sp, sp, #0xc + ldmia sp!, {pc} + arm_func_end ApplyGummiBoostsToGroundMonster + + arm_func_start ApplyGummiBoostsToTeamMember +ApplyGummiBoostsToTeamMember: ; 0x02011554 + stmdb sp!, {lr} + sub sp, sp, #0xc + mov ip, r0 + stmia sp, {r1, r2, r3} + add r0, ip, #0xc + add r1, ip, #6 + add r2, ip, #0x12 + add r3, ip, #0x14 + bl ApplyGummiBoostsGroundMode + add sp, sp, #0xc + ldmia sp!, {pc} + arm_func_end ApplyGummiBoostsToTeamMember + + arm_func_start ApplySitrusBerryBoostToGroundMonster +ApplySitrusBerryBoostToGroundMonster: ; 0x02011580 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r2, _020115B8 ; =SITRUS_BERRY_FULL_HP_BOOST + mov r7, r0 + ldrsh r5, [r2] + ldrsh r4, [r7, #0xa] + mov r6, r1 + add r0, r7, #0xa + mov r1, r5 + bl sub_02054FB8 + cmp r6, #0 + strne r5, [r6] + ldrsh r0, [r7, #0xa] + sub r0, r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_020115B8: .word SITRUS_BERRY_FULL_HP_BOOST + arm_func_end ApplySitrusBerryBoostToGroundMonster + + arm_func_start ApplyLifeSeedBoostToGroundMonster +ApplyLifeSeedBoostToGroundMonster: ; 0x020115BC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r2, _020115F4 ; =LIFE_SEED_HP_BOOST + mov r7, r0 + ldrsh r5, [r2] + ldrsh r4, [r7, #0xa] + mov r6, r1 + add r0, r7, #0xa + mov r1, r5 + bl sub_02054FB8 + cmp r6, #0 + strne r5, [r6] + ldrsh r0, [r7, #0xa] + sub r0, r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_020115F4: .word LIFE_SEED_HP_BOOST + arm_func_end ApplyLifeSeedBoostToGroundMonster + + arm_func_start ApplyGinsengToGroundMonster +ApplyGinsengToGroundMonster: ; 0x020115F8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r5, r0 + mov r0, #0x64 + mov sb, r1 + mov r8, r2 + mvn r4, #0 + mov r6, #0 + bl RandInt + ldr r1, _02011708 ; =GINSENG_CHANCE_3 + mov ip, #0 + ldrsh r1, [r1] + mov r2, #1 + cmp r0, r1 + movlt r7, #3 + movge r7, #1 + mov r1, ip + mov r0, #6 + b _02011664 +_02011640: + mla r3, ip, r0, r5 + ldrb r3, [r3, #0x22] + tst r3, #1 + movne r3, r2 + moveq r3, r1 + tst r3, #0xff + movne r4, ip + bne _0201166C + add ip, ip, #1 +_02011664: + cmp ip, #4 + blt _02011640 +_0201166C: + mvn r0, #0 + cmp r4, r0 + bne _02011698 + cmp sb, #0 + movne r0, #0 + strneh r0, [sb] + cmp r8, #0 + movne r0, #0 + strne r0, [r8] + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_02011698: + add r1, r5, #0x22 + mov r0, #6 + mla r5, r4, r0, r1 + mov r0, r5 + bl GetMoveBasePowerGround + cmp r0, #0 + beq _020116E4 + mov r0, r5 + ldrb r4, [r5, #4] + bl GetMoveMaxGinsengBoostGround + ldrb r1, [r5, #4] + add r2, r1, r7 + and r1, r2, #0xff + strb r2, [r5, #4] + cmp r1, r0 + strgeb r0, [r5, #4] + ldrb r0, [r5, #4] + cmp r4, r0 + movne r6, #1 +_020116E4: + cmp sb, #0 + ldrneh r0, [r5, #2] + strneh r0, [sb] + cmp r8, #0 + strne r7, [r8] + cmp r6, #0 + moveq r7, #0 + mov r0, r7 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02011708: .word GINSENG_CHANCE_3 + arm_func_end ApplyGinsengToGroundMonster + + arm_func_start ApplyProteinBoostToGroundMonster +ApplyProteinBoostToGroundMonster: ; 0x0201170C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r2, _02011744 ; =PROTEIN_STAT_BOOST + mov r7, r0 + ldrsh r5, [r2] + ldrb r4, [r7, #0xc] + mov r6, r1 + add r0, r7, #0xc + mov r1, r5 + bl sub_02054FEC + cmp r6, #0 + strne r5, [r6] + ldrb r0, [r7, #0xc] + sub r0, r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02011744: .word PROTEIN_STAT_BOOST + arm_func_end ApplyProteinBoostToGroundMonster + + arm_func_start ApplyCalciumBoostToGroundMonster +ApplyCalciumBoostToGroundMonster: ; 0x02011748 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r2, _02011780 ; =CALCIUM_STAT_BOOST + mov r7, r0 + ldrsh r5, [r2] + ldrb r4, [r7, #0xd] + mov r6, r1 + add r0, r7, #0xd + mov r1, r5 + bl sub_02054FEC + cmp r6, #0 + strne r5, [r6] + ldrb r0, [r7, #0xd] + sub r0, r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02011780: .word CALCIUM_STAT_BOOST + arm_func_end ApplyCalciumBoostToGroundMonster + + arm_func_start ApplyIronBoostToGroundMonster +ApplyIronBoostToGroundMonster: ; 0x02011784 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r2, _020117BC ; =IRON_STAT_BOOST + mov r7, r0 + ldrsh r5, [r2] + ldrb r4, [r7, #0xe] + mov r6, r1 + add r0, r7, #0xe + mov r1, r5 + bl sub_02055020 + cmp r6, #0 + strne r5, [r6] + ldrb r0, [r7, #0xe] + sub r0, r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_020117BC: .word IRON_STAT_BOOST + arm_func_end ApplyIronBoostToGroundMonster + + arm_func_start ApplyZincBoostToGroundMonster +ApplyZincBoostToGroundMonster: ; 0x020117C0 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r2, _020117F8 ; =ZINC_STAT_BOOST + mov r7, r0 + ldrsh r5, [r2] + ldrb r4, [r7, #0xf] + mov r6, r1 + add r0, r7, #0xf + mov r1, r5 + bl sub_02055020 + cmp r6, #0 + strne r5, [r6] + ldrb r0, [r7, #0xf] + sub r0, r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_020117F8: .word ZINC_STAT_BOOST + arm_func_end ApplyZincBoostToGroundMonster + + arm_func_start ApplyNectarBoostToGroundMonster +ApplyNectarBoostToGroundMonster: ; 0x020117FC + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldrsh r4, [r6, #8] + mov r5, r1 + add r0, r6, #8 + mov r1, #0xa + bl sub_02055054 + cmp r5, #0 + movne r0, #0xa + strne r0, [r5] + ldrsh r0, [r6, #8] + sub r0, r0, r4 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end ApplyNectarBoostToGroundMonster + + arm_func_start IsMonsterAffectedByGravelyrockGroundMode +IsMonsterAffectedByGravelyrockGroundMode: ; 0x02011830 + stmdb sp!, {r3, lr} + ldrsh r0, [r0, #4] + bl FemaleToMaleForm + cmp r0, #0x1e0 + cmpne r0, #0xb9 + moveq r0, #1 + movne r0, #0 + ldmia sp!, {r3, pc} + arm_func_end IsMonsterAffectedByGravelyrockGroundMode + + arm_func_start ApplyGravelyrockBoostToGroundMonster +ApplyGravelyrockBoostToGroundMonster: ; 0x02011850 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + ldrsh r4, [r6, #8] + bl IsMonsterAffectedByGravelyrockGroundMode + cmp r0, #0 + beq _02011884 + add r0, r6, #8 + mov r1, #0xa + bl sub_02055054 + cmp r5, #0 + movne r0, #0xa + b _0201188C +_02011884: + cmp r5, #0 + movne r0, #0 +_0201188C: + strne r0, [r5] + ldrsh r0, [r6, #8] + sub r0, r0, r4 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end ApplyGravelyrockBoostToGroundMonster + + arm_func_start ApplyGummiBoostsGroundMode +ApplyGummiBoostsGroundMode: ; 0x0201189C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + ldrsh r0, [sp, #0x28] + mov r4, #0 + ldr r6, [sp, #0x30] + sub r5, r4, #1 + strh r5, [r6] + mov sb, r1 + mov r8, r2 + mov r7, r3 + sub fp, r0, #0x77 + strh r4, [r6, #2] + bl IsGummi + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrsh r0, [sp, #0x28] + cmp r0, #0x88 + bne _020118FC + ldr r1, _02011AA0 ; =WONDER_GUMMI_IQ_GAIN + ldr r0, _02011AA4 ; =WONDER_GUMMI_STAT_BOOST + ldrsh r1, [r1] + ldrsh r5, [r0] + add r4, r4, r1 + b _02011950 +_020118FC: + ldrsh r0, [sl] + ldr r2, _02011AA8 ; =GUMMI_STAT_BOOST + mov r1, r4 + ldrsh r5, [r2] + bl GetType + str r0, [sp] + ldrsh r0, [sl] + mov r1, #1 + bl GetType + add sl, fp, #1 + ldr fp, _02011AAC ; =IQ_GUMMI_GAIN_TABLE + ldr r1, [sp] + mov r2, #0x24 + mla r3, r1, r2, fp + mla r1, r0, r2, fp + mov sl, sl, lsl #1 + ldrsh r2, [sl, r3] + ldrsh r0, [sl, r1] + cmp r2, r0 + addgt r4, r4, r2 + addle r4, r4, r0 +_02011950: + ldrsh r1, [sb] + add r0, r1, r4 + strh r0, [sb] + ldrsh r0, [sb] + cmp r0, #1 + sub r2, r0, r1 + movlt r0, #1 + strlth r0, [sb] + ldrsh r1, [sb] + ldr r0, _02011AB0 ; =0x000003E7 + cmp r1, r0 + strgth r0, [sb] + cmp r2, #9 + movge r1, #0 + bge _020119A4 + cmp r2, #5 + movge r1, #1 + bge _020119A4 + cmp r2, #3 + movge r1, #2 + movlt r1, #3 +_020119A4: + ldrb r0, [sp, #0x2c] + strh r1, [r6] + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + cmp r1, #0 + bne _020119D4 + mov r0, #0x10 + bl RandIntSafe + cmp r0, #0xa + moveq r0, #0xf + streqh r0, [r6, #2] + beq _020119EC +_020119D4: + mov r0, #4 + bl RandIntSafe + ldr r1, _02011AB4 ; =_0209889C + mov r0, r0, lsl #1 + ldrh r0, [r1, r0] + strh r0, [r6, #2] +_020119EC: + ldrh r1, [r6, #2] + tst r1, #1 + beq _02011A18 + ldrb r0, [r8] + cmp r0, #0xff + bichs r0, r1, #1 + strhsh r0, [r6, #2] + bhs _02011A18 + mov r0, r8 + mov r1, r5 + bl sub_02054FEC +_02011A18: + ldrh r1, [r6, #2] + tst r1, #2 + beq _02011A44 + ldrb r0, [r8, #1] + cmp r0, #0xff + bichs r0, r1, #2 + strhsh r0, [r6, #2] + bhs _02011A44 + mov r1, r5 + add r0, r8, #1 + bl sub_02054FEC +_02011A44: + ldrh r1, [r6, #2] + tst r1, #4 + beq _02011A70 + ldrb r0, [r7] + cmp r0, #0xff + bichs r0, r1, #4 + strhsh r0, [r6, #2] + bhs _02011A70 + mov r0, r7 + mov r1, r5 + bl sub_02055020 +_02011A70: + ldrh r1, [r6, #2] + tst r1, #8 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r0, [r7, #1] + cmp r0, #0xff + bichs r0, r1, #8 + strhsh r0, [r6, #2] + ldmhsia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r1, r5 + add r0, r7, #1 + bl sub_02055020 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02011AA0: .word WONDER_GUMMI_IQ_GAIN +_02011AA4: .word WONDER_GUMMI_STAT_BOOST +_02011AA8: .word GUMMI_STAT_BOOST +_02011AAC: .word IQ_GUMMI_GAIN_TABLE +_02011AB0: .word 0x000003E7 +_02011AB4: .word _0209889C + arm_func_end ApplyGummiBoostsGroundMode + + arm_func_start sub_02011AB8 +sub_02011AB8: ; 0x02011AB8 + stmdb sp!, {r3, lr} + ldr ip, _02011B38 ; =BAG_ITEMS_PTR_MIRROR + mov r0, #0 + ldr r1, [ip] + mov r2, r0 + add r1, r1, #0x1000 + strb r0, [r1, #0x3aa] + ldr r1, [ip] + sub lr, r0, #1 + add r1, r1, #0x1000 + str r0, [r1, #0x3ac] + ldr r3, [ip] + mov r1, #0x6d + add r3, r3, #0x1300 + strh r0, [r3, #0xb0] + ldr r3, [ip] + add r3, r3, #0x1300 + strh lr, [r3, #0xb2] + bl SaveScriptVariableValue + mov r0, #0 + mov r2, r0 + mov r1, #0x6b + bl SaveScriptVariableValue + mov r0, #0 + mov r2, r0 + mov r1, #0x6c + bl SaveScriptVariableValue + mov r0, #0 + mov r2, r0 + mov r1, #0x6a + bl SaveScriptVariableValue + ldmia sp!, {r3, pc} + .align 2, 0 +_02011B38: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02011AB8 + + arm_func_start sub_02011B3C +sub_02011B3C: ; 0x02011B3C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + mov sl, r0 + mov r8, r1 + mov r7, r2 + mov r0, #8 + mov r1, #6 + bl MemAlloc + mov sb, r0 + mov r0, sl + mov r1, r8 + mov r2, r7 + bl sub_020128DC + movs r1, r0 + str r0, [sb, #4] + moveq r0, #0 + streq r0, [sb] + beq _02011CE8 + mov r0, #0x18 + mul r0, r1, r0 + mov r1, #6 + bl MemAlloc + str r0, [sb] + ldr r2, [sb, #4] + mov r1, #0x18 + mul r1, r2, r1 + bl MemZero + mov r5, #0 + mov r6, r5 + mov r4, #0x18 + b _02011BF8 +_02011BB8: + str r7, [sp] + ldr r0, [sb] + mov r1, r6 + mla r0, r5, r4, r0 + mov r2, sl + mov r3, r8 + bl sub_0201297C + cmp r0, #0 + beq _02011BEC + ldr r0, [sb, #4] + add r5, r5, #1 + cmp r5, r0 + beq _02011C00 +_02011BEC: + add r0, r6, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 +_02011BF8: + cmp r6, #0x18 + blt _02011BB8 +_02011C00: + mov r8, #0 + b _02011CDC +_02011C08: + mov r0, #0x18 + mul sl, r8, r0 + ldr r0, [sb] + mvn r6, #0 + ldr r0, [r0, sl] + ldrsh r0, [r0] + bl sub_0200D1F0 + mov fp, r0 + add r7, r8, #1 + b _02011C68 +_02011C30: + mov r0, #0x18 + mul r4, r7, r0 + ldr r5, [sb] + ldr r0, [r5, r4] + ldrsh r0, [r0] + bl sub_0200D1F0 + cmp fp, r0 + ble _02011C64 + ldr r0, [r5, r4] + mov r6, r7 + ldrsh r0, [r0] + bl sub_0200D1F0 + mov fp, r0 +_02011C64: + add r7, r7, #1 +_02011C68: + ldr r0, [sb, #4] + cmp r7, r0 + blt _02011C30 + mvn r0, #0 + cmp r6, r0 + beq _02011CD8 + ldr r4, [sb] + mov r0, #0x18 + add fp, r4, sl + mul r5, r6, r0 + add r7, sp, #4 + mov sl, fp + mov r6, r7 + ldmia sl!, {r0, r1, r2, r3} + stmia r7!, {r0, r1, r2, r3} + ldmia sl, {r0, r1} + stmia r7, {r0, r1} + add r4, r4, r5 + ldmia r4!, {r0, r1, r2, r3} + stmia fp!, {r0, r1, r2, r3} + ldmia r4, {r0, r1} + stmia fp, {r0, r1} + ldr r4, [sb] + ldmia r6!, {r0, r1, r2, r3} + add r4, r4, r5 + stmia r4!, {r0, r1, r2, r3} + ldmia r6, {r0, r1} + stmia r4, {r0, r1} +_02011CD8: + add r8, r8, #1 +_02011CDC: + ldr r0, [sb, #4] + cmp r8, r0 + blt _02011C08 +_02011CE8: + mov r0, sb + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end sub_02011B3C + + arm_func_start sub_02011CF4 +sub_02011CF4: ; 0x02011CF4 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r1 + mov r6, r2 + cmp r0, #2 + bne _02011D90 + ldr r0, _02011D98 ; =BAG_ITEMS_PTR_MIRROR + mvn r1, #0 + ldr r0, [r0] + add r0, r0, #0x1300 + ldrsh r5, [r0, #0xb2] + cmp r5, r1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, #8 + mov r1, #6 + bl MemAlloc + mov r4, r0 + mov r1, #1 + mov r0, #0x18 + smulbb r0, r1, r0 + str r1, [r4, #4] + mov r1, #6 + bl MemAlloc + str r0, [r4] + ldr r2, [r4, #4] + mov r1, #0x18 + mul r1, r2, r1 + bl MemZero + str r6, [sp] + ldr r0, [r4] + mov r1, r5 + mov r3, r7 + mov r2, #2 + bl sub_0201297C + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02011D90: + bl sub_02011B3C + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02011D98: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02011CF4 + + arm_func_start sub_02011D9C +sub_02011D9C: ; 0x02011D9C + ldr ip, _02011DB0 ; =sub_02011B3C + mov r1, r0 + ldr r2, _02011DB4 ; =0x000F423F + mov r0, #1 + bx ip + .align 2, 0 +_02011DB0: .word sub_02011B3C +_02011DB4: .word 0x000F423F + arm_func_end sub_02011D9C + + arm_func_start sub_02011DB8 +sub_02011DB8: ; 0x02011DB8 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r0] + cmp r0, #0 + beq _02011DDC + bl MemFree +_02011DDC: + ldr r0, [r4] + bl MemFree + mov r0, #0 + str r0, [r4] + ldmia sp!, {r4, pc} + arm_func_end sub_02011DB8 + + arm_func_start sub_02011DF0 +sub_02011DF0: ; 0x02011DF0 + ldr r0, [r0] + ldrsh r0, [r0] + bx lr + arm_func_end sub_02011DF0 + + arm_func_start sub_02011DFC +sub_02011DFC: ; 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 sub_02011DFC + + arm_func_start sub_02011E18 +sub_02011E18: ; 0x02011E18 + ldr r0, [r0] + ldrh r0, [r0, #0x12] + bx lr + arm_func_end sub_02011E18 + + arm_func_start sub_02011E24 +sub_02011E24: ; 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 sub_02011E24 + + 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 sub_02011EC4 +sub_02011EC4: ; 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 sub_02011EC4 + + arm_func_start sub_02011EE8 +sub_02011EE8: ; 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 sub_02011EE8 + + arm_func_start sub_02011F14 +sub_02011F14: ; 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 sub_02011F14 + + arm_func_start sub_02011F30 +sub_02011F30: ; 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 sub_02011F30 + + arm_func_start sub_02011F48 +sub_02011F48: ; 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 sub_02011F48 + + arm_func_start sub_02011F60 +sub_02011F60: ; 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 sub_02011F60 + + arm_func_start sub_02011FA0 +sub_02011FA0: ; 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 sub_020128DC + mov r4, r0 + mov r1, r6 + mov r2, r5 + mov r0, #2 + bl sub_020128DC + 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 sub_020128DC + mov r1, r6 + mov r2, r5 + mov r5, r0 + mov r0, #2 + bl sub_020128DC + 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 sub_02012254 + 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 sub_02011DB8 + 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 sub_02012224 +_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 sub_02011FA0 + + arm_func_start sub_02012224 +sub_02012224: ; 0x02012224 + stmdb sp!, {r3, lr} + bl sub_02012254 + 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 sub_02012224 + + arm_func_start sub_02012254 +sub_02012254: ; 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 sub_02012254 + + arm_func_start sub_0201227C +sub_0201227C: ; 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 sub_0201227C + + 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 sub_02012630 + 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 sub_02012630 + 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 sub_020125FC +sub_020125FC: ; 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 sub_020125FC + + arm_func_start sub_02012630 +sub_02012630: ; 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 sub_020125FC + ldmia sp!, {r4, pc} + arm_func_end sub_02012630 + + arm_func_start sub_0201265C +sub_0201265C: ; 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 sub_02012630 + 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 sub_0201265C + + arm_func_start sub_020126C8 +sub_020126C8: ; 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 sub_02012630 + 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 sub_020126C8 + + 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 sub_0201265C + add r1, sl, r8, lsl #1 + strh r0, [r1, #4] + mov r0, #1 + bl sub_020126C8 + add r1, sl, r8, lsl #1 + strh r0, [r1, #0xc] + b _02012850 +_02012810: + mov r0, #0 + bl sub_0201265C + add r1, sl, r8, lsl #1 + strh r0, [r1, #4] + mov r0, #0 + bl sub_020126C8 + 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 sub_0201007C + 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 sub_0201007C + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02012874 + + arm_func_start sub_020128DC +sub_020128DC: ; 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 sub_02012954 + 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 sub_020128DC + + arm_func_start sub_02012954 +sub_02012954: ; 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 sub_02012954 + + 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 sub_02012954 + 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 sub_0201265C + add r1, sl, sb, lsl #1 + strh r0, [r1, #4] + mov r0, r5 + bl sub_020126C8 + add r1, sl, sb, lsl #1 + strh r0, [r1, #0xc] + b _02012A84 +_02012A44: + mov r0, fp + bl sub_0201265C + add r1, sl, sb, lsl #1 + strh r0, [r1, #4] + mov r0, #0 + bl sub_020126C8 + 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 sub_02012AB8 +sub_02012AB8: ; 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 sub_02012AB8 + + 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 ; =_020AF6D4 + 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 _020AF6D4 +_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 ; =_020AF6D4 + 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 _020AF6D4 + arm_func_end CloseSynthBin + + arm_func_start sub_02012B7C +sub_02012B7C: ; 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 sub_020132A4 + 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 sub_020132A4 + 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 sub_02012B7C + + arm_func_start sub_020130B8 +sub_020130B8: ; 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 sub_020130B8 + + arm_func_start sub_02013150 +sub_02013150: ; 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 sub_02013150 + + arm_func_start sub_02013190 +sub_02013190: ; 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 sub_02050974 + 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 sub_020509BC + 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 sub_02013190 + + arm_func_start sub_020131F0 +sub_020131F0: ; 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 sub_02050990 + 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 sub_020509BC + 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 sub_020131F0 + + 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 sub_020132A4 +sub_020132A4: ; 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 sub_0200EB90 + 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 sub_020132A4 + + 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/exclusive_item.h b/include/exclusive_item.h new file mode 100644 index 00000000..b6a4c43c --- /dev/null +++ b/include/exclusive_item.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_EXCLUSIVE_ITEM_H +#define PMDSKY_EXCLUSIVE_ITEM_H + +#include "util.h" + +// Tests the exclusive item bitvector for a specific exclusive item effect. +bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, u32 effect_id); + +#endif //PMDSKY_EXCLUSIVE_ITEM_H diff --git a/main.lsf b/main.lsf index 9cdc6c85..7a88d49b 100644 --- a/main.lsf +++ b/main.lsf @@ -33,6 +33,8 @@ Static main Object asm/main_0200EB30.o Object src/main_0200ECFC.o Object asm/main_0200ED1C.o + Object src/exclusive_item.o + Object asm/main_02010FC4.o Object src/moves_1.o Object asm/main_020137E8.o Object src/moves_2.o diff --git a/src/exclusive_item.c b/src/exclusive_item.c new file mode 100644 index 00000000..9cd84c50 --- /dev/null +++ b/src/exclusive_item.c @@ -0,0 +1,9 @@ +#include "exclusive_item.h" + +bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, u32 effect_id) +{ + u32 effect_bit = effect_id >> 5; + if (effect_flags[effect_bit] & 1 << effect_id - (effect_bit << 5)) + return TRUE; + return FALSE; +} diff --git a/src/overlay_29_022FAC98.c b/src/overlay_29_022FAC98.c index d6867634..8ae91b34 100644 --- a/src/overlay_29_022FAC98.c +++ b/src/overlay_29_022FAC98.c @@ -1,7 +1,6 @@ #include "overlay_29_022FAC98.h" #include "dungeon_util_static.h" - -extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id); +#include "exclusive_item.h" bool8 ExclusiveItemEffectIsActive__022FAC98(struct entity *entity, enum exclusive_item_effect_id effect_id) { diff --git a/src/overlay_29_022FFF28.c b/src/overlay_29_022FFF28.c index 9954bfc3..ff8f125c 100644 --- a/src/overlay_29_022FFF28.c +++ b/src/overlay_29_022FFF28.c @@ -1,7 +1,6 @@ #include "overlay_29_022FFF28.h" #include "dungeon_util_static.h" - -extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id); +#include "exclusive_item.h" bool8 ExclusiveItemEffectIsActive__022FFF28(struct entity *entity, enum exclusive_item_effect_id effect_id) { diff --git a/src/overlay_29_0230A994.c b/src/overlay_29_0230A994.c index 2267fe37..6bbebd12 100644 --- a/src/overlay_29_0230A994.c +++ b/src/overlay_29_0230A994.c @@ -1,7 +1,6 @@ #include "overlay_29_0230A994.h" #include "dungeon_util_static.h" - -extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id); +#include "exclusive_item.h" bool8 IsMonster__0230A994(struct entity *entity) { diff --git a/src/overlay_29_0230F8AC.c b/src/overlay_29_0230F8AC.c index cdee8862..f8f695cc 100644 --- a/src/overlay_29_0230F8AC.c +++ b/src/overlay_29_0230F8AC.c @@ -1,7 +1,6 @@ #include "overlay_29_0230F8AC.h" #include "dungeon_util_static.h" - -extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id); +#include "exclusive_item.h" bool8 ExclusiveItemEffectIsActive__0230F8AC(struct entity *entity, enum exclusive_item_effect_id effect_id) { diff --git a/src/overlay_29_02311010.c b/src/overlay_29_02311010.c index c2555827..5b870830 100644 --- a/src/overlay_29_02311010.c +++ b/src/overlay_29_02311010.c @@ -2,8 +2,7 @@ #include "dungeon_items.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_util_static.h" - -extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id); +#include "exclusive_item.h" bool8 EntityIsValid__02311010(struct entity *entity) { diff --git a/src/overlay_29_023147EC.c b/src/overlay_29_023147EC.c index d44d08be..87e2cf71 100644 --- a/src/overlay_29_023147EC.c +++ b/src/overlay_29_023147EC.c @@ -1,7 +1,6 @@ #include "overlay_29_023147EC.h" #include "dungeon_util_static.h" - -extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id); +#include "exclusive_item.h" bool8 ExclusiveItemEffectIsActive__023147EC(struct entity *entity, enum exclusive_item_effect_id effect_id) { diff --git a/src/overlay_29_023197A8.c b/src/overlay_29_023197A8.c index 897ebf55..41550a03 100644 --- a/src/overlay_29_023197A8.c +++ b/src/overlay_29_023197A8.c @@ -1,7 +1,6 @@ #include "overlay_29_023197A8.h" #include "dungeon_util_static.h" - -extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id); +#include "exclusive_item.h" bool8 ExclusiveItemEffectIsActive__023197A8(struct entity *entity, enum exclusive_item_effect_id effect_id) { diff --git a/src/overlay_29_0231A87C.c b/src/overlay_29_0231A87C.c index 5e1e100a..4fc0c59a 100644 --- a/src/overlay_29_0231A87C.c +++ b/src/overlay_29_0231A87C.c @@ -1,7 +1,6 @@ #include "overlay_29_0231A87C.h" #include "dungeon_util_static.h" - -extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id); +#include "exclusive_item.h" bool8 ExclusiveItemEffectIsActive__0231A87C(struct entity *entity, enum exclusive_item_effect_id effect_id) { diff --git a/src/overlay_29_02323918.c b/src/overlay_29_02323918.c index 904cf2b6..c7d33b6e 100644 --- a/src/overlay_29_02323918.c +++ b/src/overlay_29_02323918.c @@ -1,7 +1,6 @@ #include "overlay_29_02323918.h" #include "dungeon_util_static.h" - -extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id); +#include "exclusive_item.h" bool8 ExclusiveItemEffectIsActive__02323918(struct entity *entity, enum exclusive_item_effect_id effect_id) { diff --git a/src/overlay_29_023329E8.c b/src/overlay_29_023329E8.c index ec020d38..c38a137d 100644 --- a/src/overlay_29_023329E8.c +++ b/src/overlay_29_023329E8.c @@ -1,7 +1,6 @@ #include "overlay_29_023329E8.h" #include "dungeon_util_static.h" - -extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id); +#include "exclusive_item.h" bool8 ExclusiveItemEffectIsActive__023329E8(struct entity *entity, enum exclusive_item_effect_id effect_id) { diff --git a/src/overlay_29_02347B50.c b/src/overlay_29_02347B50.c index 6545db17..45f583c2 100644 --- a/src/overlay_29_02347B50.c +++ b/src/overlay_29_02347B50.c @@ -2,8 +2,7 @@ #include "dungeon_items.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_util_static.h" - -extern bool8 ExclusiveItemEffectFlagTest(u32 *effect_flags, enum exclusive_item_effect_id effect_id); +#include "exclusive_item.h" bool8 ItemIsActive__02347B50(struct entity *entity, enum item_id item_id) {