From f48046a07abbc33d3a696c97ea372ed737267560 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 16 Jul 2025 20:34:14 -0400 Subject: [PATCH 01/40] Decomped ov31_02383328 Decomped by anonymous user: https://decomp.me/scratch/00xRD --- asm/include/overlay_31_02382FBC.inc | 293 +- asm/include/overlay_31_0238335C.inc | 301 + asm/overlay_31_02382FBC.s | 9005 +-------------------------- asm/overlay_31_0238335C.s | 8988 ++++++++++++++++++++++++++ include/overlay_31_02383328.h | 6 + main.lsf | 2 + src/overlay_31_02383328.c | 15 + 7 files changed, 9319 insertions(+), 9291 deletions(-) create mode 100644 asm/include/overlay_31_0238335C.inc create mode 100644 asm/overlay_31_0238335C.s create mode 100644 include/overlay_31_02383328.h create mode 100644 src/overlay_31_02383328.c diff --git a/asm/include/overlay_31_02382FBC.inc b/asm/include/overlay_31_02382FBC.inc index 576fe87e..2194899b 100644 --- a/asm/include/overlay_31_02382FBC.inc +++ b/asm/include/overlay_31_02382FBC.inc @@ -1,308 +1,23 @@ #pragma once -.public _020A1870 -.public AddDungeonSubMenuOption -.public AdvanceFrame -.public AiMovement -.public AllManip1 -.public AllManip2 -.public Arm9LoadUnkFieldNa0x2029EC8 -.public Arm9StoreUnkFieldNa0x2029ED8 -.public BAG_ITEMS_PTR_MIRROR -.public BaseFormsEqual -.public CanAiUseMove -.public CanMonsterSpawn -.public CheckTeamMemberIdxVeneer -.public CheckVariousConditions -.public CheckVariousStatuses2 .public CloseAdvancedTextBox -.public CloseAdvancedTextBox2 -.public CloseDialogueBox -.public CloseInventoryMenu .public CloseParentMenu -.public CloseScrollBox -.public CloseTextBox -.public CloseTextBox2 .public CreateAdvancedTextBox -.public CreateDialogueBox -.public CreateInventoryMenu -.public CreateMonsterSummaryFromMonster -.public CreateParentMenu .public CreateParentMenuFromStringIds -.public CreateParentMenuWrapper -.public CreateScrollBoxSingle -.public CreateTextBox -.public CreateTextBoxWithArg -.public Debug_Print0 -.public DisableDungeonSubMenuOption -.public DisplayMessage -.public DrawTextInWindow -.public DrawTileGrid -.public DUNGEON_PTR .public DUNGEON_SUBMENU_ITEMS_1 -.public DUNGEON_SUBMENU_ITEMS_5 -.public DUNGEON_SUBMENU_ITEMS_6 -.public DUNGEON_WINDOW_PARAMS_10 -.public DUNGEON_WINDOW_PARAMS_11 -.public DUNGEON_WINDOW_PARAMS_12 -.public DUNGEON_WINDOW_PARAMS_13 -.public DUNGEON_WINDOW_PARAMS_14 -.public DUNGEON_WINDOW_PARAMS_15 -.public DUNGEON_WINDOW_PARAMS_16 -.public DUNGEON_WINDOW_PARAMS_17 -.public DUNGEON_WINDOW_PARAMS_18 -.public DUNGEON_WINDOW_PARAMS_19 -.public DUNGEON_WINDOW_PARAMS_20 -.public DUNGEON_WINDOW_PARAMS_21 -.public DUNGEON_WINDOW_PARAMS_22 -.public DUNGEON_WINDOW_PARAMS_23 -.public DUNGEON_WINDOW_PARAMS_24 -.public DUNGEON_WINDOW_PARAMS_25 -.public DUNGEON_WINDOW_PARAMS_26 -.public DUNGEON_WINDOW_PARAMS_27 -.public DUNGEON_WINDOW_PARAMS_28 -.public DUNGEON_WINDOW_PARAMS_29 -.public DUNGEON_WINDOW_PARAMS_30 -.public DUNGEON_WINDOW_PARAMS_31 -.public DUNGEON_WINDOW_PARAMS_32 .public DUNGEON_WINDOW_PARAMS_5 .public DUNGEON_WINDOW_PARAMS_6 .public DUNGEON_WINDOW_PARAMS_7 -.public DUNGEON_WINDOW_PARAMS_8 -.public DUNGEON_WINDOW_PARAMS_9 -.public FormatMoveString -.public FormatMoveStringMore -.public GetActiveTeamMember -.public GetCurrentBagCapacity -.public GetDexNumber -.public GetItemAction -.public GetItemCategoryVeneer -.public GetItemInfo -.public GetItemToUse -.public GetItemToUseByIndex -.public GetKecleonIdToSpawnByFloor +.public DrawTextInWindow .public GetLeader -.public GetLeaderAction -.public GetLeaderChangeFlag -.public GetLeaderMonster -.public GetMaxPp -.public GetMonsterIdFromSpawnEntry -.public GetMonsterName -.public GetNbItemsInBag -.public GetPressedButtons -.public GetRecruitRate2 -.public GetSpeciesString -.public GetStringFromFileVeneer -.public GetTeamMember -.public GetTeamMemberIndex -.public GetTile -.public GetTrapInfo -.public GetUnlockedTactics -.public GetWindowRectangle -.public HideTileGrid -.public InitPreprocessorArgs -.public IqSkillFlagTest .public IsAdvancedTextBoxActive -.public IsBagFull -.public IsBlinded -.public IsExperienceLocked -.public IsHeldItemInBag -.public IsInventoryMenuActive -.public IsItemUsableNow -.public IsMonsterOnTeam -.public IsNot2TurnsMoveOrSketch .public IsParentMenuActive -.public IsRecruitingAllowed -.public IsScrollBoxActive -.public ItemZInit -.public JoinedAtRangeCheck2Veneer -.public LogMessageByIdWithPopupCheckUser -.public MemAlloc -.public memcpy .public MemFree -.public memset -.public MemZero -.public MonsterCanThrowItems -.public MonsterHasEmbargoStatus -.public ov10_022BCC60 -.public ov10_022BCC7C -.public ov10_022BCCB0 -.public ov10_022BCD10 -.public ov10_022BCDA8 -.public ov10_022BCDBC -.public ov10_022BCDF4 -.public ov10_022BCE44 -.public ov10_022BD394 -.public ov10_022BD474 -.public ov29_022E08F4 -.public ov29_022E1618 -.public ov29_022E1620 -.public ov29_022E2A78 -.public ov29_022E8708 -.public ov29_022E87DC -.public ov29_022EA370 -.public ov29_022EA428 -.public ov29_022EA62C -.public ov29_022EAC78 -.public ov29_022EACCC -.public ov29_022EB2C8 -.public ov29_022EB398 -.public ov29_022EB804 -.public ov29_022EB8B0 -.public ov29_022EB9A0 -.public ov29_022EBA70 -.public ov29_022EBA84 -.public ov29_022EBA94 -.public ov29_022EBAB0 -.public ov29_022EBB4C -.public ov29_022EBB68 -.public ov29_022EBB8C -.public ov29_022EBB98 -.public ov29_022EBBA8 -.public ov29_022EBBE8 -.public ov29_022EBC2C -.public ov29_022ECDE4 -.public ov29_022F0B9C -.public ov29_022F9C34 -.public ov29_023002F0 -.public ov29_02300BF8 -.public ov29_023021F0 -.public ov29_02302388 -.public ov29_0233A0E8 -.public ov29_023468FC -.public ov29_02346E5C -.public ov29_02347100 -.public ov29_02348D00 -.public ov29_0234B034 -.public ov29_0234B084 -.public ov29_0234E988 -.public ov29_0234EA18 -.public ov29_0234EBCC -.public ov29_0234F77C -.public ov29_0234FB50 -.public ov29_0234FB60 -.public ov29_0234FBD4 -.public ov29_0235352C -.public ov29_0237C91C -.public ov29_0238280C -.public ov31_02382B54 -.public ov31_02382DAC -.public ov31_02389E22 -.public ov31_02389F5C -.public ov31_0238A044 -.public ov31_0238A04C -.public ov31_0238A054 -.public ov31_0238A05C -.public ov31_0238A064 -.public ov31_0238A06C -.public ov31_0238A074 -.public ov31_0238A07C -.public ov31_0238A084 -.public ov31_0238A0A8 -.public ov31_0238A0B0 -.public ov31_0238A0B8 -.public ov31_0238A0C0 -.public ov31_0238A0C8 -.public ov31_0238A0D0 -.public ov31_0238A0D8 -.public ov31_0238A0E0 -.public ov31_0238A0E8 -.public ov31_0238A154 -.public ov31_0238A228 -.public ov31_0238A23C -.public ov31_0238A2A0 -.public ov31_0238A2A8 -.public OVERLAY31_JP_STRING -.public OVERLAY31_UNKNOWN_POINTER__NA_238A268 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A26C -.public OVERLAY31_UNKNOWN_POINTER__NA_238A270 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A27C -.public OVERLAY31_UNKNOWN_POINTER__NA_238A280 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A284 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A288 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A28C .public OVERLAY31_UNKNOWN_STRING_IDS -.public OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 -.public OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 -.public OVERLAY31_UNKNOWN_STRUCT__NA_238A144 -.public OVERLAY31_UNKNOWN_STRUCT__NA_238A190 -.public PlaySeVolumeWrapper -.public PlayWindowInputSound -.public PopInventoryMenuField0x1A3 -.public PositionHasItem -.public PreprocessString -.public PreprocessStringFromId -.public PrintIqSkillsMenu -.public ResumeParentMenu -.public SetAdvancedTextBoxField0x1C2 .public SetAdvancedTextBoxField0x1C4 -.public SetAdvancedTextBoxState5 .public SetMonsterActionFields -.public ShowStringInDialogueBox -.public SortItemsInBag -.public SpecificRecruitCheck .public StairsSubheadingCallback -.public strcpy .public StringFromId -.public sub_02001808 -.public sub_0200B3D4 -.public sub_0200D310 -.public sub_0200D894 -.public sub_02017C74 -.public sub_02017C80 -.public sub_02027B1C -.public sub_0202810C -.public sub_0202812C -.public sub_020282F4 -.public sub_02028354 -.public sub_0202A98C -.public sub_0202AB80 -.public sub_0202AB94 +.public ov29_0237C91C +.public ov31_02389E22 +.public ov31_0238A2A0 .public sub_0202ABB0 -.public sub_0202B030 -.public sub_0202F334 -.public sub_0202F474 -.public sub_0202F954 -.public sub_0202F9B8 -.public sub_020307EC -.public sub_02030A18 -.public sub_02030A2C -.public sub_020348E4 -.public sub_020355DC -.public sub_02035CE4 -.public sub_0203F150 -.public sub_0203F398 -.public sub_0203F990 -.public sub_0203F9CC -.public sub_0203FD14 -.public sub_0203FD38 -.public sub_0203FD44 -.public sub_0204018C -.public sub_0204019C -.public sub_020407C0 -.public sub_020407EC -.public sub_02041094 -.public sub_020410A4 -.public sub_02041154 -.public sub_02041178 -.public sub_02041364 -.public sub_02041484 -.public sub_020416BC -.public sub_020416DC -.public sub_020416FC -.public sub_020417A8 -.public sub_02041A00 -.public sub_02041A18 -.public sub_02041B7C -.public sub_020420F4 -.public sub_0204AEA0 -.public sub_0204F10C -.public sub_02053CA0 -.public sub_02054F44 -.public sub_02056228 -.public sub_020585B4 -.public TeamMemberHasEnabledIqSkill -.public TryPointCameraToMonster -.public UpdateMapSurveyorFlag -.public UpdateWindow -.public vsprintf -.public YesNoMenu diff --git a/asm/include/overlay_31_0238335C.inc b/asm/include/overlay_31_0238335C.inc new file mode 100644 index 00000000..6e1bc634 --- /dev/null +++ b/asm/include/overlay_31_0238335C.inc @@ -0,0 +1,301 @@ +#pragma once +.public AddDungeonSubMenuOption +.public AdvanceFrame +.public AiMovement +.public AllManip1 +.public AllManip2 +.public Arm9LoadUnkFieldNa0x2029EC8 +.public Arm9StoreUnkFieldNa0x2029ED8 +.public BAG_ITEMS_PTR_MIRROR +.public BaseFormsEqual +.public CanAiUseMove +.public CanMonsterSpawn +.public CheckTeamMemberIdxVeneer +.public CheckVariousConditions +.public CheckVariousStatuses2 +.public CloseAdvancedTextBox +.public CloseAdvancedTextBox2 +.public CloseDialogueBox +.public CloseInventoryMenu +.public CloseParentMenu +.public CloseScrollBox +.public CloseTextBox +.public CloseTextBox2 +.public CreateAdvancedTextBox +.public CreateDialogueBox +.public CreateInventoryMenu +.public CreateMonsterSummaryFromMonster +.public CreateParentMenu +.public CreateParentMenuFromStringIds +.public CreateParentMenuWrapper +.public CreateScrollBoxSingle +.public CreateTextBox +.public CreateTextBoxWithArg +.public DUNGEON_PTR +.public DUNGEON_SUBMENU_ITEMS_5 +.public DUNGEON_SUBMENU_ITEMS_6 +.public DUNGEON_WINDOW_PARAMS_10 +.public DUNGEON_WINDOW_PARAMS_11 +.public DUNGEON_WINDOW_PARAMS_12 +.public DUNGEON_WINDOW_PARAMS_13 +.public DUNGEON_WINDOW_PARAMS_14 +.public DUNGEON_WINDOW_PARAMS_15 +.public DUNGEON_WINDOW_PARAMS_16 +.public DUNGEON_WINDOW_PARAMS_17 +.public DUNGEON_WINDOW_PARAMS_18 +.public DUNGEON_WINDOW_PARAMS_19 +.public DUNGEON_WINDOW_PARAMS_20 +.public DUNGEON_WINDOW_PARAMS_21 +.public DUNGEON_WINDOW_PARAMS_22 +.public DUNGEON_WINDOW_PARAMS_23 +.public DUNGEON_WINDOW_PARAMS_24 +.public DUNGEON_WINDOW_PARAMS_25 +.public DUNGEON_WINDOW_PARAMS_26 +.public DUNGEON_WINDOW_PARAMS_27 +.public DUNGEON_WINDOW_PARAMS_28 +.public DUNGEON_WINDOW_PARAMS_29 +.public DUNGEON_WINDOW_PARAMS_30 +.public DUNGEON_WINDOW_PARAMS_31 +.public DUNGEON_WINDOW_PARAMS_32 +.public DUNGEON_WINDOW_PARAMS_8 +.public DUNGEON_WINDOW_PARAMS_9 +.public Debug_Print0 +.public DisableDungeonSubMenuOption +.public DisplayMessage +.public DrawTextInWindow +.public DrawTileGrid +.public FormatMoveString +.public FormatMoveStringMore +.public GetActiveTeamMember +.public GetCurrentBagCapacity +.public GetDexNumber +.public GetItemAction +.public GetItemCategoryVeneer +.public GetItemInfo +.public GetItemToUse +.public GetItemToUseByIndex +.public GetKecleonIdToSpawnByFloor +.public GetLeader +.public GetLeaderAction +.public GetLeaderChangeFlag +.public GetLeaderMonster +.public GetMaxPp +.public GetMonsterIdFromSpawnEntry +.public GetMonsterName +.public GetNbItemsInBag +.public GetPressedButtons +.public GetRecruitRate2 +.public GetSpeciesString +.public GetStringFromFileVeneer +.public GetTeamMember +.public GetTeamMemberIndex +.public GetTile +.public GetTrapInfo +.public GetUnlockedTactics +.public GetWindowRectangle +.public HandleStairsMenu +.public HideTileGrid +.public InitPreprocessorArgs +.public IqSkillFlagTest +.public IsAdvancedTextBoxActive +.public IsBagFull +.public IsBlinded +.public IsExperienceLocked +.public IsHeldItemInBag +.public IsInventoryMenuActive +.public IsItemUsableNow +.public IsMonsterOnTeam +.public IsNot2TurnsMoveOrSketch +.public IsParentMenuActive +.public IsRecruitingAllowed +.public IsScrollBoxActive +.public ItemZInit +.public JoinedAtRangeCheck2Veneer +.public LogMessageByIdWithPopupCheckUser +.public MemAlloc +.public MemFree +.public MemZero +.public MonsterCanThrowItems +.public MonsterHasEmbargoStatus +.public OVERLAY31_JP_STRING +.public OVERLAY31_UNKNOWN_POINTER__NA_238A268 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A26C +.public OVERLAY31_UNKNOWN_POINTER__NA_238A270 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A27C +.public OVERLAY31_UNKNOWN_POINTER__NA_238A280 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A284 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A288 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A28C +.public OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 +.public OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 +.public OVERLAY31_UNKNOWN_STRUCT__NA_238A144 +.public OVERLAY31_UNKNOWN_STRUCT__NA_238A190 +.public PlaySeVolumeWrapper +.public PlayWindowInputSound +.public PopInventoryMenuField0x1A3 +.public PositionHasItem +.public PreprocessString +.public PreprocessStringFromId +.public PrintIqSkillsMenu +.public ResumeParentMenu +.public SetAdvancedTextBoxField0x1C2 +.public SetAdvancedTextBoxState5 +.public SetMonsterActionFields +.public ShowStringInDialogueBox +.public SortItemsInBag +.public SpecificRecruitCheck +.public StringFromId +.public TeamMemberHasEnabledIqSkill +.public TryPointCameraToMonster +.public UpdateMapSurveyorFlag +.public UpdateWindow +.public YesNoMenu +.public _020A1870 +.public memcpy +.public memset +.public ov10_022BCC60 +.public ov10_022BCC7C +.public ov10_022BCCB0 +.public ov10_022BCD10 +.public ov10_022BCDA8 +.public ov10_022BCDBC +.public ov10_022BCDF4 +.public ov10_022BCE44 +.public ov10_022BD394 +.public ov10_022BD474 +.public ov29_022E08F4 +.public ov29_022E1618 +.public ov29_022E1620 +.public ov29_022E2A78 +.public ov29_022E87DC +.public ov29_022EA370 +.public ov29_022EA428 +.public ov29_022EA62C +.public ov29_022EAC78 +.public ov29_022EACCC +.public ov29_022EB2C8 +.public ov29_022EB398 +.public ov29_022EB804 +.public ov29_022EB8B0 +.public ov29_022EB9A0 +.public ov29_022EBA70 +.public ov29_022EBA84 +.public ov29_022EBA94 +.public ov29_022EBAB0 +.public ov29_022EBB4C +.public ov29_022EBB68 +.public ov29_022EBB8C +.public ov29_022EBB98 +.public ov29_022EBBA8 +.public ov29_022EBBE8 +.public ov29_022EBC2C +.public ov29_022ECDE4 +.public ov29_022F0B9C +.public ov29_022F9C34 +.public ov29_023002F0 +.public ov29_02300BF8 +.public ov29_023021F0 +.public ov29_02302388 +.public ov29_0233A0E8 +.public ov29_023468FC +.public ov29_02346E5C +.public ov29_02347100 +.public ov29_02348D00 +.public ov29_0234B034 +.public ov29_0234B084 +.public ov29_0234E988 +.public ov29_0234EA18 +.public ov29_0234EBCC +.public ov29_0234F77C +.public ov29_0234FB50 +.public ov29_0234FB60 +.public ov29_0234FBD4 +.public ov29_0235352C +.public ov29_0237C91C +.public ov29_0238280C +.public ov31_02382B54 +.public ov31_02382DAC +.public ov31_023832F0 +.public ov31_02383328 +.public ov31_02389F5C +.public ov31_0238A044 +.public ov31_0238A04C +.public ov31_0238A054 +.public ov31_0238A05C +.public ov31_0238A064 +.public ov31_0238A06C +.public ov31_0238A074 +.public ov31_0238A07C +.public ov31_0238A084 +.public ov31_0238A0A8 +.public ov31_0238A0B0 +.public ov31_0238A0B8 +.public ov31_0238A0C0 +.public ov31_0238A0C8 +.public ov31_0238A0D0 +.public ov31_0238A0D8 +.public ov31_0238A0E0 +.public ov31_0238A0E8 +.public ov31_0238A154 +.public ov31_0238A228 +.public ov31_0238A23C +.public ov31_0238A2A8 +.public strcpy +.public sub_02001808 +.public sub_0200B3D4 +.public sub_0200D310 +.public sub_0200D894 +.public sub_02017C74 +.public sub_02017C80 +.public sub_02027B1C +.public sub_0202810C +.public sub_0202812C +.public sub_020282F4 +.public sub_02028354 +.public sub_0202A98C +.public sub_0202AB80 +.public sub_0202AB94 +.public sub_0202ABB0 +.public sub_0202B030 +.public sub_0202F334 +.public sub_0202F474 +.public sub_0202F954 +.public sub_0202F9B8 +.public sub_020307EC +.public sub_02030A18 +.public sub_02030A2C +.public sub_020348E4 +.public sub_020355DC +.public sub_02035CE4 +.public sub_0203F150 +.public sub_0203F398 +.public sub_0203F990 +.public sub_0203F9CC +.public sub_0203FD14 +.public sub_0203FD38 +.public sub_0203FD44 +.public sub_0204018C +.public sub_0204019C +.public sub_020407C0 +.public sub_020407EC +.public sub_02041094 +.public sub_020410A4 +.public sub_02041154 +.public sub_02041178 +.public sub_02041364 +.public sub_02041484 +.public sub_020416BC +.public sub_020416DC +.public sub_020416FC +.public sub_020417A8 +.public sub_02041A00 +.public sub_02041A18 +.public sub_02041B7C +.public sub_020420F4 +.public sub_0204AEA0 +.public sub_0204F10C +.public sub_02053CA0 +.public sub_02054F44 +.public sub_02056228 +.public sub_020585B4 +.public vsprintf diff --git a/asm/overlay_31_02382FBC.s b/asm/overlay_31_02382FBC.s index d854d771..fc14e285 100644 --- a/asm/overlay_31_02382FBC.s +++ b/asm/overlay_31_02382FBC.s @@ -183,6 +183,7 @@ _02383240: .word 0x00001812 _02383244: .word ov31_02383248 arm_func_end HandleStairsMenu +; https://decomp.me/scratch/VPa2L arm_func_start ov31_02383248 ov31_02383248: ; 0x02383248 stmdb sp!, {r4, lr} @@ -205,6 +206,7 @@ _02383284: .word ov31_0238A2A0 _02383288: .word OVERLAY31_UNKNOWN_STRING_IDS arm_func_end ov31_02383248 +; https://decomp.me/scratch/oWQ5d arm_func_start ov31_0238328C ov31_0238328C: ; 0x0238328C stmdb sp!, {r3, lr} @@ -236,6 +238,7 @@ _023832BC: _023832EC: .word ov31_0238A2A0 arm_func_end ov31_0238328C +; https://decomp.me/scratch/MmxLF arm_func_start ov31_023832F0 ov31_023832F0: ; 0x023832F0 stmdb sp!, {r3, lr} @@ -254,9005 +257,3 @@ ov31_023832F0: ; 0x023832F0 .align 2, 0 _02383324: .word ov31_0238A2A0 arm_func_end ov31_023832F0 - - arm_func_start ov31_02383328 -ov31_02383328: ; 0x02383328 - stmdb sp!, {r3, lr} - bl sub_0204AEA0 - ldr r1, _02383354 ; =ov31_0238A2A8 - ldrb r1, [r1] - cmp r1, r0 - ldmeqia sp!, {r3, pc} - bl ov29_022E8708 - ldr r0, _02383358 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 - mov r1, #1 - strb r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02383354: .word ov31_0238A2A8 -_02383358: .word OVERLAY31_UNKNOWN_POINTER__NA_238A268 - arm_func_end ov31_02383328 - - arm_func_start ov31_0238335C -ov31_0238335C: ; 0x0238335C - stmdb sp!, {r4, lr} - ldr r1, _023833B0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 - mov r4, r0 - ldrb r0, [r1] - cmp r0, #0 - beq _02383390 - bl ov29_022E87DC - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, _023833B0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 - mov r1, #0 - strb r1, [r0] -_02383390: - cmp r4, #0 - beq _0238339C - blx r4 -_0238339C: - ldr r0, _023833B0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 - mov r1, #0 - strb r1, [r0, #1] - mov r0, #1 - ldmia sp!, {r4, pc} - .align 2, 0 -_023833B0: .word OVERLAY31_UNKNOWN_POINTER__NA_238A268 - arm_func_end ov31_0238335C - - arm_func_start ov31_023833B4 -ov31_023833B4: ; 0x023833B4 - stmdb sp!, {r3, lr} - cmp r0, #0 - beq _023833C4 - blx r0 -_023833C4: - ldr r0, _023833D4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 - mov r1, #0 - strb r1, [r0, #1] - ldmia sp!, {r3, pc} - .align 2, 0 -_023833D4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A268 - arm_func_end ov31_023833B4 - -; https://decomp.me/scratch/Q183B - arm_func_start ov31_023833D8 -ov31_023833D8: ; 0x023833D8 - stmdb sp!, {r3, lr} - sub sp, sp, #0x98 - ldr lr, _02383424 ; =ov31_02383328 - ldr r3, _02383428 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 - mov ip, #1 - str r0, [sp, #0x88] - strb ip, [r3, #1] - ldr r2, _0238342C ; =ov31_0238335C - add r1, sp, #0 - str lr, [sp, #0x84] - mov ip, #0 - mov r0, #0x100 - strb ip, [r3] - bl sub_020355DC - bl sub_0204AEA0 - ldr r1, _02383430 ; =ov31_0238A2A8 - strb r0, [r1] - add sp, sp, #0x98 - ldmia sp!, {r3, pc} - .align 2, 0 -_02383424: .word ov31_02383328 -_02383428: .word OVERLAY31_UNKNOWN_POINTER__NA_238A268 -_0238342C: .word ov31_0238335C -_02383430: .word ov31_0238A2A8 - arm_func_end ov31_023833D8 - - arm_func_start ov31_02383434 -ov31_02383434: ; 0x02383434 - stmdb sp!, {r3, lr} - sub sp, sp, #0x98 - ldr ip, _02383470 ; =ov31_023833B4 - ldr r3, _02383474 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 - mov r1, #1 - str r0, [sp, #0x88] - strb r1, [r3, #1] - add r2, sp, #0 - str ip, [sp, #0x84] - mov r0, #0 - mov r1, #0x100 - strb r0, [r3] - bl sub_02035CE4 - add sp, sp, #0x98 - ldmia sp!, {r3, pc} - .align 2, 0 -_02383470: .word ov31_023833B4 -_02383474: .word OVERLAY31_UNKNOWN_POINTER__NA_238A268 - arm_func_end ov31_02383434 - - arm_func_start ov31_02383478 -ov31_02383478: ; 0x02383478 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - movs r7, r1 - mov r8, r0 - mov r6, r2 - mov r4, #1 - bmi _023834AC - ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r1, #0 - ldr r0, [r0] - add r0, r0, r7 - add r0, r0, #0x1000 - strb r1, [r0, #0x1f8] -_023834AC: - ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r3, [r0] - add r0, r3, #0x1000 - ldr r2, [r0, #0x1b4] - cmp r2, #0 - beq _02383508 - cmp r7, #0 - blt _02383508 - ldr r1, _02383648 ; =BAG_ITEMS_PTR_MIRROR - mov r0, #6 - ldr r1, [r1] - ldr r1, [r1, #0x384] - mla r0, r7, r0, r1 - cmp r0, r2 - beq _023834F4 - ldrb r0, [r0, #1] - cmp r0, #0 - beq _02383508 -_023834F4: - add r0, r3, r7 - add r0, r0, #0x1000 - mov r1, #3 - strb r1, [r0, #0x1f8] - mov r4, #0 -_02383508: - ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r0] - add r0, r1, #0x1000 - ldrb r0, [r0, #0x1b2] - cmp r0, #0 - bne _02383528 - cmp r7, #0 - bge _023835B4 -_02383528: - add r0, r1, #0x1000 - ldr r1, [r0, #0x19c] - ldrsh r0, [r1, #4] - ldrsh r1, [r1, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - mov r1, r0 - ldrb r0, [r1] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02383590 - ldr r2, _0238364C ; =OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 - mov r5, #1 - mov r0, r8 - mov r3, r4 - str r5, [sp] - bl sub_0200D310 - ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x277] - b _02383638 -_02383590: - ldr r1, _02383650 ; =ov31_02389F5C - mov r0, r8 - bl strcpy - ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r1, #3 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x277] - b _02383638 -_023835B4: - mov r0, #6 - ldr r1, _02383648 ; =BAG_ITEMS_PTR_MIRROR - mul r5, r7, r0 - ldr r0, [r1] - ldr r1, [r0, #0x384] - ldrb r0, [r1, r5] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - addne r0, r1, r5 - ldrneb r1, [r0, #1] - cmpne r1, #0 - beq _02383624 - ldr r0, _02383654 ; =DUNGEON_PTR - sub r1, r1, #1 - ldr r0, [r0] - add r0, r0, r1, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - bl ov31_02383658 - cmp r0, #0 - bne _02383624 - ldr r0, _02383648 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r0, [r0, #0x384] - add r0, r0, r5 - bl sub_0200D894 -_02383624: - mov r0, r8 - mov r1, r7 - mov r2, r4 - mov r3, r6 - bl ov10_022BD394 -_02383638: - mov r0, r8 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02383644: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C -_02383648: .word BAG_ITEMS_PTR_MIRROR -_0238364C: .word OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 -_02383650: .word ov31_02389F5C -_02383654: .word DUNGEON_PTR - arm_func_end ov31_02383478 - - arm_func_start ov31_02383658 -ov31_02383658: ; 0x02383658 - cmp r0, #0 - moveq r0, #0 - bxeq lr - ldr r0, [r0] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end ov31_02383658 - - arm_func_start ov31_0238367C -ov31_0238367C: ; 0x0238367C - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x5c - bl GetLeader - mov r1, #0 - mov r2, #0xb - bl GetItemToUse - ldrsh r1, [r0, #4] - mov r2, #0 - add lr, sp, #0xc - str r1, [sp, #0x1c] - ldrh r4, [r0, #2] - ldr r1, _02383720 ; =0x00001013 - ldr r3, _02383724 ; =0x000008E4 - str r4, [sp, #0x30] - ldrh r4, [r0, #2] - add r4, r4, #0xbc - str r4, [sp, #0x24] - str r2, [sp, #0x38] - str lr, [sp] - ldrsh r4, [r0, #4] - ldr r0, _02383728 ; =DUNGEON_WINDOW_PARAMS_8 -#if defined(EUROPE) - add ip, r4, #0xd3 - add r4, ip, #0x2900 -#elif defined(JAPAN) - add ip, r4, #0xce - add r4, ip, #0x4100 -#else - add ip, r4, #0xd1 - add r4, ip, #0x2900 -#endif - mov ip, r4, lsl #0x10 - mov r4, ip, lsr #0x10 - stmib sp, {r4, lr} - bl CreateScrollBoxSingle - mov r5, r0 - mov r4, #0x16 -_023836F0: - mov r0, r4 - bl AdvanceFrame - mov r0, r5 - bl IsScrollBoxActive - cmp r0, #0 - bne _023836F0 - mov r0, r5 - bl CloseScrollBox - mov r0, #0x16 - bl AdvanceFrame - add sp, sp, #0x5c - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_02383720: .word 0x00001013 -#ifdef JAPAN -_02383724: .word 0x00001D3C -#else -_02383724: .word 0x000008E4 -#endif -_02383728: .word DUNGEON_WINDOW_PARAMS_8 - arm_func_end ov31_0238367C - - arm_func_start ov31_0238372C -ov31_0238372C: ; 0x0238372C - stmdb sp!, {r3, lr} - ldr r1, _02383764 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r1] - add r1, r1, #0x1000 - ldrb r1, [r1, #0x1b1] - cmp r1, #0 - beq _0238375C - add r0, r0, #4 - bl PositionHasItem - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, pc} -_0238375C: - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02383764: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C - arm_func_end ov31_0238372C - - arm_func_start ov31_02383768 -ov31_02383768: ; 0x02383768 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - ldrsb r0, [r7] - mvn r1, #1 - cmp r0, r1 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - bl ov10_022BCD10 - cmp r0, #0 - beq _023837B4 - mvn r4, #3 - sub r5, r4, #1 - mov r6, #0x62 -_02383798: - mov r0, r6 - bl AdvanceFrame - ldrsb r0, [r7] - bl sub_020282F4 - cmp r0, r5 - cmpne r0, r4 - bne _02383798 -_023837B4: - ldrsb r0, [r7] - bl CloseInventoryMenu - mvn r0, #1 - strb r0, [r7] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end ov31_02383768 - - arm_func_start ov31_023837C8 -ov31_023837C8: ; 0x023837C8 - stmdb sp!, {r3, lr} - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x92 - add r0, r0, #0x1100 - bl ov29_0234E988 - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x94] - cmp r0, r1 - beq _02383800 - bl CloseTextBox2 -_02383800: - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x95] - cmp r0, r1 - beq _02383820 - bl CloseTextBox2 -_02383820: - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x93 - add r0, r0, #0x1100 - bl ov31_02383768 - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - bl MemFree - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02383850: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C - arm_func_end ov31_023837C8 - -; https://decomp.me/scratch/VL6fa - arm_func_start ov31_02383854 -ov31_02383854: ; 0x02383854 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, _0238387C ; =0x000008E6 - bl StringFromId - mov r1, #2 - mov r3, r0 - mov r0, r4 - mov r2, r1 - bl DrawTextInWindow - ldmia sp!, {r4, pc} - .align 2, 0 -#ifdef JAPAN -_0238387C: .word 0x00001D3E -#else -_0238387C: .word 0x000008E6 -#endif - arm_func_end ov31_02383854 - - arm_func_start ov31_02383880 -ov31_02383880: ; 0x02383880 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r5, #0 - mov r7, r0 - add r0, r5, #1 - ldr r8, _023838E0 ; =DUNGEON_PTR - strb r5, [r7] - and r6, r0, #0xff - mov r4, r5 -_023838A0: - ldr r0, [r8] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - bl ov31_02383658 - cmp r0, #0 - addeq r0, r7, r5 - streqb r4, [r0, #1] - addne r0, r7, r5 - addne r1, r6, #1 - strneb r6, [r0, #1] - add r5, r5, #1 - andne r6, r1, #0xff - cmp r5, #4 - blt _023838A0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_023838E0: .word DUNGEON_PTR - arm_func_end ov31_02383880 - - arm_func_start ov31_023838E4 -ov31_023838E4: ; 0x023838E4 -#ifdef JAPAN -#define OV31_023838E4_OFFSET -0xA4 -#else -#define OV31_023838E4_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x234 - sub sp, sp, #0x400 - mov r2, #0 - mov r5, r2 - str r2, [sp, #0x30] - mov sl, r0 - mov sb, r1 - mov r6, r5 - ldr r7, [sl, #0xb4] - bl ov29_022EBB4C - mov r0, #0x1280 - mov r1, #8 - bl MemAlloc - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r4, #1 - str r0, [r1] - add r0, r0, #0x1000 - str sl, [r0, #0x19c] - ldr r0, [r1] - add r3, r4, #1 - add r0, r0, #0x1000 - strb r4, [r0, #0x193] - ldr r0, [r1] - mov r2, #0 - add r0, r0, #0x1000 - strb r4, [r0, #0x192] - ldr r8, [r1] - mov r0, #1 - add r8, r8, #0x1000 - strb r4, [r8, #0x194] - ldr r8, [r1] - add r8, r8, #0x1000 - strb r4, [r8, #0x195] - ldr r4, [r1] - add r4, r4, #0x1000 - str r3, [r4, #0x198] - ldr r3, [r1] - add r3, r3, #0x1000 - str r2, [r3, #0x1ac] - ldr r3, [r1] - add r3, r3, #0x1000 - strb r0, [r3, #0x1b1] - ldr r0, [r1] - add r0, r0, #0x1000 - strb r2, [r0, #0x1b2] - ldr r0, [r1] - add r0, r0, #0x1000 - str r2, [r0, #0x1b4] - ldr r0, [r1] - add r0, r0, #0x278 - add r0, r0, #0x1000 - bl ov31_02383880 - cmp sb, #0 - beq _02383A1C - ldrb r0, [sb] - cmp r0, #0 - beq _023839E4 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [sb, #4] - ldr r0, [r0] - mov r6, #1 - add r0, r0, #0x1000 - str r1, [r0, #0x1b4] -_023839E4: - ldrb r0, [sb, #1] - cmp r0, #0 - ldreq r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - moveq r1, #0 - ldreq r0, [r0] - addeq r0, r0, #0x1000 - streqb r1, [r0, #0x1b1] - ldrb r0, [sb, #2] - cmp r0, #0 - ldrne r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - movne r1, #1 - ldrne r0, [r0] - addne r0, r0, #0x1000 - strneb r1, [r0, #0x1b2] -_02383A1C: - mov r0, #3 - bl Arm9LoadUnkFieldNa0x2029EC8 - mov r1, r0 - ldr r0, _0238489C ; =OVERLAY31_JP_STRING - bl Debug_Print0 - bl GetNbItemsInBag - ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - cmp r6, #0 - ldr r1, [r2] - add r1, r1, #0x1000 - str r0, [r1, #0x1a8] - ldrne r0, [r2] - movne r1, #0 - addne r0, r0, #0x1000 - strneb r1, [r0, #0x1b3] - bne _02383A74 - mov r0, sl - bl ov31_0238372C - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r1] - add r1, r1, #0x1000 - strb r0, [r1, #0x1b3] -_02383A74: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r2, [r0] - add r0, r2, #0x1000 - ldrb r1, [r0, #0x1b2] - cmp r1, #0 - ldreq r1, [r0, #0x1a8] - cmpeq r1, #0 - ldreqb r0, [r0, #0x1b3] - cmpeq r0, #0 - bne _02383AC4 - ldr r1, _023848A0 ; =0x000008E5 - mov r0, #0 - mov r2, #1 - bl DisplayMessage - bl ov31_023837C8 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #1 - b _0238511C -_02383AC4: - add r0, r2, #0x1000 - ldr r0, [r0, #0x1a8] - cmp r0, #0 - bne _02383B08 - mov r0, sl - bl ov31_0238372C - ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r3, #1 - ldr r1, [r2] - add r1, r1, #0x1000 - strb r0, [r1, #0x1b3] - ldr r0, [r2] - add r0, r0, #0x1000 - strb r3, [r0, #0x1b2] - ldr r0, [r2] - add r0, r0, #0x1000 - strb r3, [r0, #0x1b1] -_02383B08: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - cmp r0, r1 - beq _02383B48 - bl IsInventoryMenuActive - cmp r0, #0 - bne _02383D78 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCC7C - b _02383D78 -_02383B48: - bl GetNbItemsInBag - ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r4] - add r1, r1, #0x1000 - str r0, [r1, #0x1a8] - ldr r0, [r4] - add r0, r0, #0x1000 - ldr r0, [r0, #0x1a8] - cmp r0, #0 - beq _02383C44 - ldr fp, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - mov r8, #0 -_02383B78: - mov r0, #6 - mul r1, r8, r0 - ldr r0, [fp] - ldr r2, [r0, #0x384] - ldrb r0, [r2, r1] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02383BD8 - ldrb r0, [r2, r1] - tst r0, #4 - beq _02383BD8 - bic r0, r0, #4 - strb r0, [r2, r1] - ldr r1, [r4] - mov r0, #3 - add r1, r1, #0x1000 - str r8, [r1, #0x1ac] - ldr r1, [r4] - add r1, r1, #0x1000 - ldr r1, [r1, #0x1ac] - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 -_02383BD8: - add r8, r8, #1 - cmp r8, #0x32 - blt _02383B78 - ldr fp, _023848A8 ; =DUNGEON_PTR - mov r4, #0 -_02383BEC: - ldr r0, [fp] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r8, [r0, #0xb28 + OV31_023838E4_OFFSET] - mov r0, r8 - bl ov31_02383658 - cmp r0, #0 - beq _02383C38 - ldr r1, [r8, #0xb4] - ldrb r0, [r1, #0x62] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02383C38 - ldrb r0, [r1, #0x62] - tst r0, #4 - bicne r0, r0, #4 - strneb r0, [r1, #0x62] -_02383C38: - add r4, r4, #1 - cmp r4, #4 - blt _02383BEC -_02383C44: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r4, [r0] - add r0, r4, #0x1000 - ldrb r1, [r0, #0x1b2] - cmp r1, #0 - bne _02383D1C - ldr r0, [r0, #0x1a8] - cmp r0, #0 - beq _02383D1C - mov r0, #3 - bl Arm9LoadUnkFieldNa0x2029EC8 - ldr r2, _023848AC ; =ov31_02383478 - add r1, r4, #0x278 - str r2, [sp] - add r1, r1, #0x1000 - str r1, [sp, #4] - add r1, r4, #0x1000 - ldrb r2, [r1, #0x1b3] - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r3, r4, #0x1f8 - str r2, [sp, #8] - ldr r1, [r1] - mov r2, r0 - add r0, r1, #0x1000 - ldr r0, [r0, #0x1a8] - mov r1, r6 - add r3, r3, #0x1000 - bl ov10_022BD474 - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - cmp r6, #0 - ldr r1, [r1] - add r1, r1, #0x1000 - strb r0, [r1, #0x193] - beq _02383CEC - ldr r0, _023848B0 ; =DUNGEON_WINDOW_PARAMS_10 - ldr r1, _023848B4 ; =ov31_02383854 - bl CreateTextBox - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r1] - add r1, r1, #0x1000 - strb r0, [r1, #0x194] - b _02383D78 -_02383CEC: - ldr r0, _023848B8 ; =DUNGEON_WINDOW_PARAMS_11 - mov r1, #0 - bl CreateTextBox - ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r3, #0 - ldr r1, [r2] - add r1, r1, #0x1000 - strb r0, [r1, #0x195] - ldr r0, [r2] - add r0, r0, #0x1000 - str r3, [r0, #0x198] - b _02383D78 -_02383D1C: - ldr r3, _023848BC ; =0x000008E3 - add r0, sp, #0x540 - add r1, r4, #0x278 - strh r3, [r0, #0x64] - mov r2, #0x10 - str r2, [sp, #0x5a8] - add r0, r1, #0x1000 - str r0, [sp] - mov r4, #1 - str r4, [sp, #4] - add r2, sp, #0x500 - str r4, [sp, #8] - mov r4, #0 - ldr r0, _023848C0 ; =DUNGEON_WINDOW_PARAMS_12 - ldr r1, _023848C4 ; =0x00400813 - ldr r3, _023848AC ; =ov31_02383478 - add r2, r2, #0x9c - str r4, [sp, #0xc] - bl CreateInventoryMenu - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r1] - add r1, r1, #0x1000 - strb r0, [r1, #0x193] -_02383D78: - mvn r0, #0 - str r0, [sp, #0x38] - sub r0, r0, #1 - ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - str r0, [sp, #0x3c] -_02383D8C: - mov r0, #0x14 - bl AdvanceFrame - mov r0, #0 - add r1, sp, #0x42 - bl GetPressedButtons - ldr r1, [r4] - add r0, r1, #0x1000 - ldrb r0, [r0, #0x1b2] - cmp r0, #0 - bne _023843D0 - add r0, r1, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCE44 - mov fp, r0 - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl PopInventoryMenuField0x1A3 - str r0, [sp, #0x2c] - ldr r0, [r4] - add r1, r0, #0x1100 - ldrsb r8, [r1, #0x95] - ldr r0, [sp, #0x3c] - cmp r8, r0 - beq _02384054 - ldrsb r0, [r1, #0x93] - bl ov10_022BCE44 - cmp r0, #0 - ldr r0, [r4] - bne _02383F7C - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDA8 - str r0, [sp, #0x34] - ldr r0, [r4] - add r1, r0, #0x1000 - ldr r2, [r1, #0x198] - ldr r0, [sp, #0x34] - cmp r2, r0 - beq _02384054 - str r0, [r1, #0x198] - ldr r1, [r4] - mov r0, r8 - add r1, r1, #0x1000 - ldr r1, [r1, #0x19c] - str r1, [sp, #0x28] - bl sub_02027B1C - ldr r1, [sp, #0x34] - mov r0, #6 - mul r2, r1, r0 - ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r0, [r0, #0x384] - add r1, r0, r2 - ldrb r0, [r0, r2] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02383F28 - ldrb r0, [r1, #1] - str r0, [sp, #0x10] - cmp r0, #0 - beq _02383F00 - ldr r1, _023848A8 ; =DUNGEON_PTR - add r0, sp, #0x400 - ldr r3, [r1] - ldr r1, [sp, #0x10] - add r0, r0, #0x4c - add r1, r3, r1, lsl #2 - add r1, r1, #0x12000 - ldr r1, [r1, #0xb24 + OV31_023838E4_OFFSET] - mov r2, #0 - bl ov29_022E2A78 - add r0, sp, #0x400 - add r0, r0, #0x4c - str r0, [sp, #0x584] - add r0, sp, #0x500 -#ifdef JAPAN - ldr r2, [sp, #0x38] - add r0, r0, #0x4c - str r0, [sp] - add r0, sp, #0x4c - mov r1, #0x400 - add r2, r2, #0x1d40 -#else - add r0, r0, #0x4c - str r0, [sp] - ldr r2, _023848C8 ; =0x000008E7 - add r0, sp, #0x4c - mov r1, #0x400 -#endif - mov r3, #0 - bl PreprocessStringFromId - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r1, [r0] - ldr r0, [sp, #0x10] - add r0, r1, r0, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb24 + OV31_023838E4_OFFSET] - str r0, [sp, #0x28] - b _02383F34 -_02383F00: - ldrsh r0, [r1, #4] -#if defined(EUROPE) - add r0, r0, #0x4b - add r0, r0, #0x2f00 -#elif defined(JAPAN) - add r0, r0, #0x41 - add r0, r0, #0x1d00 -#else - add r0, r0, #0x49 - add r0, r0, #0x2f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r1, r0 - add r0, sp, #0x4c - bl strcpy - b _02383F34 -_02383F28: - ldr r1, _023848CC ; =ov31_02389F5C - add r0, sp, #0x4c - bl strcpy -_02383F34: - mov r1, #2 - mov r0, r8 - mov r2, r1 - add r3, sp, #0x4c - bl DrawTextInWindow - mov r0, r8 - bl UpdateWindow - ldr r0, [sp, #0x28] - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - ldr r0, [sp, #0x28] - mov r2, #1 - add r0, r0, #4 - mov r1, #0 - mov r3, r2 - bl DrawTileGrid - b _02384054 -_02383F7C: - add r0, r0, #0x1000 - ldr r1, [r0, #0x198] - cmp r1, #0x7f - beq _02384054 - ldr r1, [r0, #0x19c] - ldrsh r0, [r1, #4] - ldrsh r1, [r1, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _02383FE4 - ldrsh r0, [r0, #4] -#if defined(EUROPE) - add r0, r0, #0x4b - add r0, r0, #0x2f00 -#elif defined(JAPAN) - add r0, r0, #0x41 - add r0, r0, #0x1d00 -#else - add r0, r0, #0x49 - add r0, r0, #0x2f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r1, r0 - add r0, sp, #0x4c - bl strcpy - b _02383FF0 -_02383FE4: - ldr r1, _023848CC ; =ov31_02389F5C - add r0, sp, #0x4c - bl strcpy -_02383FF0: - mov r0, r8 - bl sub_02027B1C - mov r1, #2 - mov r0, r8 - mov r2, r1 - add r3, sp, #0x4c - bl DrawTextInWindow - mov r0, r8 - bl UpdateWindow - ldr r0, [r4] - mov r1, #0 - add r2, r0, #0x1000 - mov r0, #0x7f - str r0, [r2, #0x198] - ldr r0, [r4] - mov r2, #1 - add r0, r0, #0x1000 - ldr r8, [r0, #0x19c] - mov r0, r8 - bl TryPointCameraToMonster - mov r2, #1 - add r0, r8, #4 - mov r1, #0 - mov r3, r2 - bl DrawTileGrid -_02384054: - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl IsInventoryMenuActive - cmp r0, #0 - beq _02384088 - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDA8 - and r1, r0, #0xff - mov r0, #3 - bl Arm9StoreUnkFieldNa0x2029ED8 -_02384088: - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl IsInventoryMenuActive - cmp r0, #0 - bne _023841A4 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDBC - movs r4, r0 - bmi _0238419C - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - and r1, r4, #0xff - ldr r2, [r0] - mov r0, #3 - add r2, r2, #0x1000 - str r4, [r2, #0x1ac] - bl Arm9StoreUnkFieldNa0x2029ED8 - cmp fp, #0 - bne _02384138 - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r0, #6 - ldr r1, [r1] - mul r8, r4, r0 - add r0, r1, #0x1000 - ldrb r3, [r0, #0x1b2] - ldr r2, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - add r1, sl, #4 - str r3, [sp] - ldr r2, [r2] - ldr r0, [r0, #0x1ac] - ldr r2, [r2, #0x384] - mov r3, #0 - add r2, r2, r8 - ldrb r2, [r2, #1] - bl ov29_022EBAB0 - ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r0, [r0, #0x384] - add r0, r0, r8 - str r0, [sb, #4] - b _02384194 -_02384138: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r1, sl, #4 - ldr r0, [r0] - mov r2, #0 - add r0, r0, #0x1000 - ldrb r4, [r0, #0x1b2] - mov r3, #1 - str r4, [sp] - ldr r0, [r0, #0x1ac] - bl ov29_022EBAB0 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - strne r0, [sb, #4] - moveq r0, #0 - streq r0, [sb, #4] -_02384194: - mov r4, #1 - b _02384438 -_0238419C: - mov r4, #2 - b _02384438 -_023841A4: - ldrh r0, [sp, #0x42] - tst r0, #8 - beq _023842DC - ldr r0, _023848D0 ; =0x00003F04 - bl sub_02017C80 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDF4 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDBC - ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r2] - add r1, r1, #0x1000 - str r0, [r1, #0x1ac] - ldr r1, [r2] - mov r0, #3 - add r1, r1, #0x1000 - ldr r1, [r1, #0x1ac] - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 - cmp fp, #0 - bne _02384278 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r3, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - mov r2, #6 - add r0, r0, #0x1000 - ldrb r4, [r0, #0x1b2] - ldr r0, [r0, #0x1ac] - add r1, sl, #4 - str r4, [sp] - ldr r4, [r3] - mov r3, #0 - ldr r4, [r4, #0x384] - mla r2, r0, r2, r4 - ldrb r2, [r2, #1] - bl ov29_022EBAB0 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r1, [r1] - add r0, r0, #0x1000 - ldr r2, [r1, #0x384] - ldr r1, [r0, #0x1ac] - mov r0, #6 - mla r0, r1, r0, r2 - str r0, [sb, #4] - b _023842D4 -_02384278: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r1, sl, #4 - ldr r0, [r0] - mov r2, #0 - add r0, r0, #0x1000 - ldrb r4, [r0, #0x1b2] - mov r3, #1 - str r4, [sp] - ldr r0, [r0, #0x1ac] - bl ov29_022EBAB0 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - strne r0, [sb, #4] - moveq r0, #0 - streq r0, [sb, #4] -_023842D4: - mov r4, #3 - b _02384438 -_023842DC: - tst r0, #4 - bne _023842F4 - tst r0, #0x800 - ldreq r0, [sp, #0x2c] - cmpeq r0, #0 - beq _02383D8C -_023842F4: - cmp r6, #0 - cmpeq fp, #0 - bne _02383D8C - ldr r0, [sp, #0x2c] - cmp r0, #0 - bne _02384314 - mov r0, #5 - bl PlaySeVolumeWrapper -_02384314: - bl ov29_02346E5C - bl SortItemsInBag - mov r8, #0 -_02384320: - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r8, lsl #2 - add r0, r0, #0x12000 - ldr fp, [r0, #0xb28 + OV31_023838E4_OFFSET] - mov r0, fp - bl ov31_02383658 - cmp r0, #0 - beq _02384374 - ldr r1, [fp, #0xb4] - ldrb r0, [r1, #0x62] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02384374 - ldrsh r0, [r1, #0x66] - cmp r0, #0xb7 - bne _02384374 - add r0, r1, #0x62 - bl ItemZInit -_02384374: - add r8, r8, #1 - cmp r8, #4 - blt _02384320 - ldr r0, [r4] - add r1, r0, #0x1000 - ldr r0, [sp, #0x38] - str r0, [r1, #0x198] - bl GetNbItemsInBag - movs r1, r0 - beq _023843C0 - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCC60 - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCCB0 - b _02383D8C -_023843C0: - mov r0, #1 - str r0, [sp, #0x30] - mov r4, #2 - b _02384438 -_023843D0: - add r0, r1, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDF4 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r1, sl, #4 - ldr r0, [r0] - mov r2, #0 - add r0, r0, #0x1000 - ldrb r4, [r0, #0x1b2] - mov r3, #1 - str r4, [sp] - ldr r0, [r0, #0x1ac] - bl ov29_022EBAB0 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - ldrb r1, [r0] - mov r4, #1 - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - moveq r0, #0 - str r0, [sb, #4] -_02384438: - mov r0, #0x14 - bl AdvanceFrame - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r0] - add r0, r1, #0x1000 - ldrb r0, [r0, #0x1b2] - cmp r0, #0 - bne _02384490 - add r0, r1, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCE44 - cmp r0, #0 - bne _02384490 - ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r0, [r0, #0x384] - ldrb r0, [r0] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - moveq r4, #2 -_02384490: - cmp r4, #2 - bne _023844AC - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #1 - b _023850D8 -_023844AC: - cmp r4, #0 - beq _023850D8 - cmp r4, #3 - bne _023844D8 - add r0, r7, #0x4a - bl ov29_022EBBE8 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_023844D8: - cmp r6, #0 - beq _023844FC - add r0, r7, #0x54 - bl ov29_022EBB68 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_023844FC: - bl ov29_022EBB8C - mov r1, r0 - mov r0, sl - mov r2, #0xa - bl GetItemToUseByIndex - mov r8, r0 - ldr r0, [sl, #0xb4] - str r0, [sp, #0x14] - bl ov29_022EBA70 - bl ov29_022EBB98 - cmp r0, #0x90 - bhs _023849F4 - bl ov29_022EBB98 - cmp r0, #0x80 - bne _02384598 - ldrsh r1, [r8, #4] - mov r0, #9 - bl AddDungeonSubMenuOption - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #6 - beq _02384598 - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _02384570 - bl IsBagFull - b _02384588 -_02384570: - ldr r0, [sp, #0x14] - ldrb r0, [r0, #0x62] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_02384588: - cmp r0, #0 - beq _02384598 - mov r0, #9 - bl DisableDungeonSubMenuOption -_02384598: - bl ov29_022EBB98 - cmp r0, #0x80 - bne _023845C4 - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _023845C4 - ldrsh r1, [r8, #4] - mov r0, #0xa - bl AddDungeonSubMenuOption -_023845C4: - mov r0, r8 - bl GetItemAction - movs r4, r0 - beq _02384654 - ldrsh r1, [r8, #4] - bl AddDungeonSubMenuOption - ldrb r0, [r8] - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _023845FC - mov r0, r4 - bl DisableDungeonSubMenuOption -_023845FC: - mov r0, r8 - bl ov29_023468FC - cmp r0, #0 - bne _02384614 - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384614: - mov r0, sl - bl MonsterHasEmbargoStatus - cmp r0, #0 - bne _02384634 - mov r0, r8 - bl ov29_02348D00 - cmp r0, #0 - beq _0238463C -_02384634: - mov r0, r4 - bl DisableDungeonSubMenuOption -_0238463C: - mov r0, r8 - bl IsItemUsableNow - cmp r0, #0 - bne _02384654 - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384654: - bl ov29_022EBB98 - cmp r0, #0x33 - bhs _02384728 - ldrb r0, [r8, #1] - cmp r0, #0 - bne _02384728 - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #0 - beq _0238468C - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #1 - bne _02384728 -_0238468C: - ldrb r0, [r8] - ldrsh r1, [r8, #4] - tst r0, #0x10 - beq _023846A8 - mov r0, #0x3d - bl AddDungeonSubMenuOption - b _023846B0 -_023846A8: - mov r0, #0x3c - bl AddDungeonSubMenuOption -_023846B0: - ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - mov r3, #0 - ldr r4, [r0] - mov lr, #1 - mov r0, #6 - b _02384720 -_023846C8: - mul r1, r3, r0 - ldr r2, [r4, #0x384] - ldrb fp, [r2, r1] - tst fp, #1 - movne ip, lr - moveq ip, #0 - tst ip, #0xff - beq _0238471C - ldrb r1, [r2, r1] - tst r1, #0x10 - beq _0238471C - tst fp, #8 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _0238471C - mov r0, #0x3c - bl DisableDungeonSubMenuOption - mov r0, #0x3d - bl DisableDungeonSubMenuOption - b _02384728 -_0238471C: - add r3, r3, #1 -_02384720: - cmp r3, #0x32 - blt _023846C8 -_02384728: - bl ov29_022EBB98 - cmp r0, #0x81 - beq _02384804 - bl ov29_022EBB98 - cmp r0, #0x80 - beq _02384860 - ldrsh r1, [r8, #4] - mov r2, #0 - mov r0, #0x36 - str r2, [sp, #0x18] - bl AddDungeonSubMenuOption - mov r4, #0 -_02384758: - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] - str r0, [sp, #0x1c] - bl ov31_02383658 - cmp r0, #0 - beq _023847A0 - ldr r0, [sp, #0x1c] - mov r1, #0 - ldr fp, [r0, #0xb4] -#ifdef JAPAN - strb r1, [fp, #0x15d] -#else - strb r1, [fp, #0x161] -#endif - bl ov29_02300BF8 - cmp r0, #0 - moveq r0, #1 - streq r0, [sp, #0x18] -#ifdef JAPAN - streqb r0, [fp, #0x15d] -#else - streqb r0, [fp, #0x161] -#endif -_023847A0: - add r4, r4, #1 - cmp r4, #4 - blt _02384758 - add r0, sp, #0x40 - bl sub_0204F10C - cmp r0, #0 - beq _023847EC - bl GetCurrentBagCapacity - cmp r0, #2 - bge _023847EC - ldrsh r0, [sp, #0x40] - sub r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #1 - movls r0, #0 - strls r0, [sp, #0x18] -_023847EC: - ldr r0, [sp, #0x18] - cmp r0, #0 - bne _02384860 - mov r0, #0x36 - bl DisableDungeonSubMenuOption - b _02384860 -_02384804: - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _02384860 - ldrsh r1, [r8, #4] - mov r0, #0x37 - bl AddDungeonSubMenuOption - mov r0, r8 - bl IsHeldItemInBag - cmp r0, #0 - beq _02384840 - ldrsh r1, [r8, #4] - mov r0, #0x3e - bl AddDungeonSubMenuOption -_02384840: - mov r0, sl - bl CheckVariousConditions - cmp r0, #0 - beq _02384860 - mov r0, #0x37 - bl DisableDungeonSubMenuOption - mov r0, #0x3e - bl DisableDungeonSubMenuOption -_02384860: - bl ov29_022EBB98 - cmp r0, #0x33 - bhs _02384908 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - bl GetTile - mov r4, r0 - ldr r0, [r4, #0x10] - cmp r0, #0 - bne _023848D4 - ldrsh r1, [r8, #4] - mov r0, #8 - bl AddDungeonSubMenuOption - b _02384908 - .align 2, 0 -#ifdef JAPAN -#define OV31_023838E4_OFFSET_2 0x1458 -#else -#define OV31_023838E4_OFFSET_2 0 -#endif -_02384898: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C -_0238489C: .word OVERLAY31_JP_STRING -_023848A0: .word 0x000008E5 + OV31_023838E4_OFFSET_2 -_023848A4: .word BAG_ITEMS_PTR_MIRROR -_023848A8: .word DUNGEON_PTR -_023848AC: .word ov31_02383478 -_023848B0: .word DUNGEON_WINDOW_PARAMS_10 -_023848B4: .word ov31_02383854 -_023848B8: .word DUNGEON_WINDOW_PARAMS_11 -_023848BC: .word 0x000008E3 + OV31_023838E4_OFFSET_2 -_023848C0: .word DUNGEON_WINDOW_PARAMS_12 -_023848C4: .word 0x00400813 -#ifndef JAPAN -_023848C8: .word 0x000008E7 -#endif -_023848CC: .word ov31_02389F5C -_023848D0: .word 0x00003F04 -_023848D4: - ldr r0, [r0] - cmp r0, #3 - bne _02384908 - ldrsh r1, [r8, #4] - mov r0, #0x3a - bl AddDungeonSubMenuOption - ldr r0, [r4, #0x10] - bl ov29_022E1620 - bl ov29_02348D00 - cmp r0, #0 - beq _02384908 - mov r0, #0x3a - bl DisableDungeonSubMenuOption -_02384908: - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #0 - bne _02384928 - ldrsh r1, [r8, #4] - mov r0, #0x27 - bl AddDungeonSubMenuOption - b _02384950 -_02384928: - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #1 - ldrsh r1, [r8, #4] - bne _02384948 - mov r0, #0x41 - bl AddDungeonSubMenuOption - b _02384950 -_02384948: - mov r0, #0xb - bl AddDungeonSubMenuOption -_02384950: - ldr r0, [sp, #0x14] - bl MonsterCanThrowItems - cmp r0, #0 - bne _02384978 - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption - mov r0, #0xb - bl DisableDungeonSubMenuOption -_02384978: - mov r0, sl - bl MonsterHasEmbargoStatus - cmp r0, #0 - beq _023849A0 - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption - mov r0, #0xb - bl DisableDungeonSubMenuOption -_023849A0: - mov r0, r8 - bl ov29_02348D00 - cmp r0, #0 - beq _023849D8 - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption - mov r0, #0xb - bl DisableDungeonSubMenuOption - mov r0, #0xa - bl DisableDungeonSubMenuOption - mov r0, #9 - bl DisableDungeonSubMenuOption -_023849D8: - mov r0, r8 - bl IsItemUsableNow - cmp r0, #0 - bne _02384C48 - mov r0, #0xb - bl DisableDungeonSubMenuOption - b _02384C48 -_023849F4: - bl ov29_022EBB98 - ldr r1, _023848A8 ; =DUNGEON_PTR - sub r2, r0, #0x90 - ldr r0, [r1] - add r0, r0, r2, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] - str r0, [sp, #0x20] - bl ov31_02383658 - cmp r0, #0 - beq _02384C48 - mov r0, #0 - str r0, [sp, #0x24] - ldr r0, [sp, #0x20] - ldr r4, [sp, #0x24] - mov r1, r0 - ldr fp, [r1, #0xb4] - bl CheckVariousConditions - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #0x24] - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #5 - ldrsh r0, [r8, #4] - moveq r4, #1 - bl GetItemCategoryVeneer - cmp r0, #9 - ldr r0, _023848A8 ; =DUNGEON_PTR - moveq r4, #1 - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _02384AC0 - ldrsh r1, [r8, #4] - mov r0, #0x37 - bl AddDungeonSubMenuOption - mov r0, r8 - bl IsHeldItemInBag - cmp r0, #0 - beq _02384AA4 - ldrsh r1, [r8, #4] - mov r0, #0x3e - bl AddDungeonSubMenuOption -_02384AA4: - ldr r0, [sp, #0x24] - cmp r0, #0 - beq _02384AC0 - mov r0, #0x37 - bl DisableDungeonSubMenuOption - mov r0, #0x3e - bl DisableDungeonSubMenuOption -_02384AC0: - ldrb r0, [fp, #7] - cmp r0, #0 - beq _02384BEC - mov r0, r8 - bl GetItemAction - movs r4, r0 - beq _02384B5C - ldrsh r1, [r8, #4] - bl AddDungeonSubMenuOption - ldrb r0, [r8] - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02384B04 - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384B04: - mov r0, r8 - bl ov29_023468FC - cmp r0, #0 - bne _02384B1C - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384B1C: - ldr r0, [sp, #0x20] - bl MonsterHasEmbargoStatus - cmp r0, #0 - bne _02384B3C - mov r0, r8 - bl ov29_02348D00 - cmp r0, #0 - beq _02384B44 -_02384B3C: - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384B44: - mov r0, r8 - bl IsItemUsableNow - cmp r0, #0 - bne _02384B5C - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384B5C: - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #0 - bne _02384B7C - ldrsh r1, [r8, #4] - mov r0, #0x27 - bl AddDungeonSubMenuOption - b _02384B98 -_02384B7C: - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #1 - bne _02384B98 - ldrsh r1, [r8, #4] - mov r0, #0x41 - bl AddDungeonSubMenuOption -_02384B98: - ldr r0, [sp, #0x14] - bl MonsterCanThrowItems - cmp r0, #0 - bne _02384BB8 - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption -_02384BB8: - mov r0, sl - bl MonsterHasEmbargoStatus - cmp r0, #0 - bne _02384BD8 - mov r0, sl - bl MonsterHasEmbargoStatus - cmp r0, #0 - beq _02384C48 -_02384BD8: - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption - b _02384C48 -_02384BEC: - ldrsh r1, [r8, #4] - mov r0, #0x38 - bl AddDungeonSubMenuOption - cmp r4, #0 - beq _02384C08 - mov r0, #0x38 - bl DisableDungeonSubMenuOption -_02384C08: - ldr r0, [sp, #0x20] - bl MonsterHasEmbargoStatus - cmp r0, #0 - bne _02384C28 - mov r0, r8 - bl ov29_02348D00 - cmp r0, #0 - beq _02384C30 -_02384C28: - mov r0, #0x38 - bl DisableDungeonSubMenuOption -_02384C30: - mov r0, r8 - bl IsItemUsableNow - cmp r0, #0 - bne _02384C48 - mov r0, #0x38 - bl DisableDungeonSubMenuOption -_02384C48: - ldrsh r1, [r8, #4] - mov r0, #0xc - bl AddDungeonSubMenuOption - bl ov29_022EB9A0 - bl ov29_022EBA84 - mov r2, #0 - ldr r1, _02385128 ; =ov29_0237C91C - ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - b _02384C9C -_02384C6C: - add r8, r1, r2, lsl #3 - ldr r3, [r4] - ldrh r8, [r8, #6] - add r3, r3, r2, lsl #3 - add r3, r3, #0x1100 - strh r8, [r3, #0x38] - mov r8, r2, lsl #3 - ldr r3, [r4] - add r2, r2, #1 - add r3, r3, r8 - add r3, r3, #0x1000 - str r2, [r3, #0x13c] -_02384C9C: - cmp r2, r0 - blt _02384C6C - ldr r3, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C -#ifdef JAPAN - mov r4, #0x1d40 -#else - ldr r4, _0238512C ; =0x000008E8 -#endif - ldr r1, [r3] - mvn r0, #0 - add r1, r1, r2, lsl #3 - add r1, r1, #0x1100 - strh r4, [r1, #0x38] - ldr r1, [r3] - mov r4, #0 - add r1, r1, r2, lsl #3 - add r1, r1, #0x1000 - str r0, [r1, #0x13c] - ldr r1, [r3] - add r1, r1, r2, lsl #3 - add r1, r1, #0x1100 - strh r4, [r1, #0x40] - ldr r1, [r3] - add r1, r1, r2, lsl #3 - add r1, r1, #0x1000 - str r0, [r1, #0x144] - ldr r0, [r3] - add r0, r0, #0x92 - add r0, r0, #0x1100 - bl ov29_0234E988 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r2, r4 - ldr r1, [r0] - add r0, r1, #0x138 - add r1, r1, #0x188 - add r0, r0, #0x1000 - add r1, r1, #0x1000 - bl ov31_0238513C - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r2, sp, #0x500 - ldr r1, [r0] - add r2, r2, #0x9c - add r0, r1, #0x188 - add r0, r0, #0x1000 - str r0, [sp, #0x5fc] - add r0, r1, #0x1000 - add r3, r1, #0x138 - ldrb r0, [r0, #0x1b2] - ldr r1, _02385130 ; =0x00000213 - add r3, r3, #0x1000 - cmp r0, #0 - ldrne r0, _02385134 ; =DUNGEON_WINDOW_PARAMS_13 - ldreq r0, _02385138 ; =DUNGEON_WINDOW_PARAMS_9 - bl CreateParentMenuFromStringIds - ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r8, #0x14 - ldr r1, [r4] - add r1, r1, #0x1000 - strb r0, [r1, #0x192] -_02384D78: - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x92] - bl IsParentMenuActive - cmp r0, #0 - bne _02384E24 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x92] - bl sub_0202ABB0 - cmp r0, #0 - blt _02384E04 - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - sub r2, r0, #1 - ldr r0, [r1] - add r0, r0, #0x1000 - str r2, [r0, #0x1a4] - ldr r0, [r1] - add r0, r0, #0x1000 - ldr r0, [r0, #0x1a4] - bl ov29_022EB804 - cmp r0, #0 - mov r4, #0 - beq _02384E30 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r2, _02385128 ; =ov29_0237C91C - ldr r1, [r0] - add r0, r7, #0x4a - add r1, r1, #0x1000 - ldr r1, [r1, #0x1a4] - mov r1, r1, lsl #3 - ldrh r1, [r2, r1] - bl ov29_022EBBA8 - b _02384E30 -_02384E04: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r4, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - ldrb r0, [r0, #0x1b2] - cmp r0, #0 - movne r4, #2 - b _02384E30 -_02384E24: - mov r0, r8 - bl AdvanceFrame - b _02384D78 -_02384E30: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x92 - add r0, r0, #0x1100 - bl ov29_0234E988 - ldr r0, _023848A8 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - cmp r4, #1 - add r0, r0, #0x1a000 -#ifdef JAPAN - strb r1, [r0, #0x1a3] -#else - strb r1, [r0, #0x247] -#endif - ldreq r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldreq r0, [r0] - addeq r0, r0, #0x1000 - ldreqb r0, [r0, #0x1b2] - cmpeq r0, #0 - beq _02383B08 - cmp r4, #2 - bne _02384E90 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #1 - b _023850D8 -_02384E90: - ldrh r0, [r7, #0x4a] - cmp r0, #0x38 - cmpne r0, #0x37 - cmpne r0, #0x3e - bne _02384EC4 - bl ov29_022EBB98 - sub r2, r0, #0x90 - mov r0, #0xb - mov r1, #0 - strb r2, [r7, #0x4e] - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_02384EC4: - cmp r0, #0x36 - bne _02384FA0 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x94] - cmp r0, r1 - beq _02384F00 - bl CloseTextBox2 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x194] -_02384F00: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x95] - cmp r0, r1 - beq _02384F34 - bl CloseTextBox2 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x195] -_02384F34: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x93 - add r0, r0, #0x1100 - bl ov31_02383768 - mov r0, #0x62 - bl AdvanceFrame - add r0, sp, #0x48 - mov r1, #2 - mov r2, #0 -#ifndef JAPAN - mov r3, #1 -#endif - bl ov31_023877EC - cmp r0, #0 - beq _02384F88 - ldr r2, [sp, #0x48] - mov r0, #0 - mov r1, r0 - strb r2, [r7, #0x54] - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_02384F88: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #1 - bl ov29_022EB398 - b _02383B08 -_02384FA0: - cmp r0, #0x12 - beq _02384FC0 - add r0, r0, #0xf3 - add r0, r0, #0xff00 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #1 - bhi _023850C8 -_02384FC0: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x94] - cmp r0, r1 - beq _02384FF4 - bl CloseTextBox2 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x194] -_02384FF4: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x95] - cmp r0, r1 - beq _02385028 - bl CloseTextBox2 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x195] -_02385028: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x93 - add r0, r0, #0x1100 - bl ov31_02383768 - mov r0, #0x62 - bl AdvanceFrame - mov r0, #0x62 - bl AdvanceFrame -#ifdef JAPAN - add r0, sp, #0x44 - mov r1, #3 - mov r2, #1 -#else - mov r2, #1 - add r0, sp, #0x44 - mov r1, #3 - mov r3, r2 -#endif - bl ov31_023877EC - cmp r0, #0 - beq _023850B0 - ldr r1, [sp, #0x44] - ldr r0, _023848A8 ; =DUNGEON_PTR - strb r1, [r7, #0x54] - ldr r2, [r0] - ldr r0, [sp, #0x44] - mov r1, #0 - add r0, r2, r0, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] - mov r2, #1 - bl TryPointCameraToMonster - mov r0, #0 - mov r2, #1 - mov r1, r0 -#ifdef JAPAN - strb r2, [r7, #0x238] -#else - strb r2, [r7, #0x23c] -#endif - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_023850B0: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #1 - bl ov29_022EB398 - b _02383B08 -_023850C8: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #0 -_023850D8: - ldr r0, _023848A8 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x1a000 - strb r1, [r0, #0x247 + OV31_023838E4_OFFSET] - bl HideTileGrid - bl ov31_023837C8 - mov r0, #0x14 - bl AdvanceFrame - ldr r0, [sp, #0x30] - cmp r0, #0 - beq _02385118 - ldr r1, _023848A0 ; =0x000008E5 - mov r0, #0 - mov r2, #1 - bl DisplayMessage -_02385118: - mov r0, r5 -_0238511C: - add sp, sp, #0x234 - add sp, sp, #0x400 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02385128: .word ov29_0237C91C -#ifndef JAPAN -_0238512C: .word 0x000008E8 -#endif -_02385130: .word 0x00000213 -_02385134: .word DUNGEON_WINDOW_PARAMS_13 -_02385138: .word DUNGEON_WINDOW_PARAMS_9 - arm_func_end ov31_023838E4 - - arm_func_start ov31_0238513C -ov31_0238513C: ; 0x0238513C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - bl ov29_022EBA84 - mov r4, #0 - mov r5, r0 - mov sb, #3 - mov sl, r4 - b _02385190 -_02385164: - mov r0, r4 - mov r1, r6 - bl ov29_022EB2C8 - mov r1, r4, lsl #3 - strh r0, [r8, r1] - mov r0, r4 - bl ov29_022EB804 - cmp r0, #0 - strneb sl, [r7, r4] - streqb sb, [r7, r4] - add r4, r4, #1 -_02385190: - cmp r4, r5 - blt _02385164 -#ifdef JAPAN - mov r1, r4, lsl #3 - mov r2, #0x1d40 -#else - ldr r2, _023851BC ; =0x000008E8 - mov r1, r4, lsl #3 -#endif - add r0, r4, #1 - strh r2, [r8, r1] - mov r1, #0 - strb r1, [r7, r4] - mov r0, r0, lsl #3 - strh r1, [r8, r0] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -#ifndef JAPAN - .align 2, 0 -_023851BC: .word 0x000008E8 -#endif - arm_func_end ov31_0238513C - - arm_func_start MovesMenu -MovesMenu: ; 0x023851C0 - stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0xc - ldr r1, _023853B8 ; =DUNGEON_PTR - ldrb r4, [r0, #4] - ldr r0, [r1] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r5, [r0, #0xa84] -#else - ldr r5, [r0, #0xb28] -#endif - str r5, [sp, #8] -_023851E4: - mov r6, #0 - ldr sb, _023853B8 ; =DUNGEON_PTR - mov r7, r6 - mov r8, r6 -_023851F4: - ldr r0, [sb] - add r0, r0, r8, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - bl ov29_02302388 - cmp r0, #0 - beq _0238521C - cmp r8, r4 - moveq r6, r7 - add r7, r7, #1 -_0238521C: - add r8, r8, #1 - cmp r8, #4 - blt _023851F4 - ldr r0, [sp, #8] - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - ldr r0, [sp, #8] - mov r2, #1 - mov r3, r2 - add r0, r0, #4 - mov r1, #0 - bl DrawTileGrid - mov r0, #1 - bl ov29_022EB398 - str r7, [sp] - mov r1, #0 - mov r3, r6 - add r0, sp, #8 - mov r2, #1 - str r1, [sp, #4] - bl HandleMovesMenu - cmp r0, #0 - bne _023853B0 - bl ov29_022F0B9C - cmp r0, #0x1d - bne _0238529C - bl GetLeaderAction - bl ov31_02385FE0 - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_0238529C: - bl ov29_022F0B9C - cmp r0, #0x1e - bne _023852CC - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - mov r1, #0 - bl ov31_023860A4 - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_023852CC: - bl ov29_022F0B9C - cmp r0, #0x33 - bne _023852FC - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - mov r1, #0 - bl ov31_023860A4 - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_023852FC: - bl ov29_022F0B9C - cmp r0, #0x1f - bne _02385328 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - bl ov31_0238619C - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_02385328: - bl ov29_022F0B9C - cmp r0, #0x20 - bne _02385354 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - bl ov31_02386204 - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_02385354: - bl ov29_022F0B9C - cmp r0, #0x21 - bne _02385380 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - mov r1, #1 - bl ov31_02386308 - mov r0, #1 - bl ov29_022EB398 -_02385380: - bl ov29_022F0B9C - cmp r0, #0 - beq _023851E4 - mov r0, r5 - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - mov r2, #1 - mov r3, r2 - add r0, r5, #4 - mov r1, #0 - bl DrawTileGrid -_023853B0: - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_023853B8: .word DUNGEON_PTR - arm_func_end MovesMenu - - arm_func_start HandleMovesMenuWrapper0 -HandleMovesMenuWrapper0: ; 0x023853BC - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr lr, [sp, #0x10] - mov ip, #0 - str lr, [sp] - str ip, [sp, #4] - bl HandleMovesMenu - add sp, sp, #8 - ldmia sp!, {r3, pc} - arm_func_end HandleMovesMenuWrapper0 - - arm_func_start HandleMovesMenuWrapper1 -HandleMovesMenuWrapper1: ; 0x023853E0 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr lr, [sp, #0x10] - mov ip, #1 - str lr, [sp] - str ip, [sp, #4] - bl HandleMovesMenu - add sp, sp, #8 - ldmia sp!, {r3, pc} - arm_func_end HandleMovesMenuWrapper1 - - arm_func_start HandleMovesMenu -HandleMovesMenu: ; 0x02385404 -#ifdef JAPAN -#define HANDLE_MOVES_MENU_OFFSET -0xA4 -#define HANDLE_MOVES_MENU_OFFSET_2 -4 -#else -#define HANDLE_MOVES_MENU_OFFSET 0 -#define HANDLE_MOVES_MENU_OFFSET_2 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x12c - str r1, [sp, #4] - str r0, [sp] - mov r0, #0x14 - mov r1, #8 - str r2, [sp, #8] - bl MemAlloc - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r2, #0 - str r0, [r1, #8] - str r2, [r0, #0x10] - mov r0, #0x62 - bl AdvanceFrame - ldr r0, [sp, #0x154] - cmp r0, #1 - bne _0238547C - ldr r0, _02385F74 ; =DUNGEON_WINDOW_PARAMS_14 - bl CreateDialogueBox - mov r1, #0 - str r0, [sp, #0x14] - bl sub_0202F474 - ldr r0, _02385F78 ; =0x00003FCD - bl StringFromId - mov r2, r0 - ldr r0, [sp, #0x14] - ldr r1, _02385F7C ; =0x00000404 - mov r3, #0 - bl ShowStringInDialogueBox - b _023854AC -_0238547C: - ldr r0, _02385F80 ; =DUNGEON_WINDOW_PARAMS_16 - bl CreateDialogueBox - mov r1, #0 - str r0, [sp, #0x14] - bl sub_0202F474 - ldr r0, _02385F84 ; =0x00003FCC - bl StringFromId - mov r2, r0 - ldr r0, [sp, #0x14] - ldr r1, _02385F7C ; =0x00000404 - mov r3, #0 - bl ShowStringInDialogueBox -_023854AC: - ldr r0, [sp] - ldr r6, [r0] - ldr sl, [r6, #0xb4] - bl GetLeader - ldr r7, [r0, #0xb4] - mov r0, r6 - bl sub_0203F9CC - mov r8, #0 - ldr sb, _02385F88 ; =DUNGEON_PTR - mov r4, r8 - add fp, sp, #0x2c -_023854D8: - ldr r0, [sb] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] - bl ov29_02302388 - cmp r0, #0 - beq _02385514 - ldr r0, [sb] - str r4, [fp, r8, lsl #2] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] - cmp r6, r0 - streq r8, [sp, #0x10] - add r8, r8, #1 -_02385514: - add r4, r4, #1 - cmp r4, #4 - blt _023854D8 - ldr r0, [sp, #0x154] - ldr r2, [sp, #0x10] - mov r1, r8 - bl sub_0204018C - str r0, [sp, #0x18] - bl sub_02041094 - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - str r0, [r1] - mov r0, #0x1e - bl AdvanceFrame -_02385548: - mov r4, #0 - str r4, [sp, #0xc] - mov sb, r4 - bl ov29_022EA62C - ldr fp, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 -_0238555C: - bl sub_020407EC - mov r8, r0 - cmp r8, #9 - addls pc, pc, r8, lsl #2 - b _02385680 -_02385570: ; jump table - b _02385680 ; case 0 - b _0238562C ; case 1 - b _02385678 ; case 2 - b _023855A0 ; case 3 - b _023855A0 ; case 4 - b _023855A8 ; case 5 - b _02385634 ; case 6 - b _0238566C ; case 7 - b _02385650 ; case 8 - b _02385598 ; case 9 -_02385598: - mov sb, #1 - b _02385680 -_023855A0: - mov sb, #1 - b _02385680 -_023855A8: - ldr r0, [sp, #0x18] - bl sub_02030A18 - mov r1, #0 - str r1, [fp] - add r1, sp, #0x2c - str r0, [sp, #0x10] - ldr sb, [r1, r0, lsl #2] - ldr r0, _02385F88 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, sb, lsl #2 - add r0, r0, #0x12000 - ldr r6, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] - ldr r0, [sp] - ldr sl, [r6, #0xb4] - str r6, [r0] - bl GetLeaderMonster - strb sb, [r0, #0x4e] - mov r0, r6 - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - mov r2, #1 - add r0, r6, #4 - mov r1, #0 - mov r3, r2 - bl DrawTileGrid - mov r0, #0 - bl ov29_022EB398 - mov r0, r6 - bl sub_0203F9CC - bl sub_02041178 - mov sb, #1 - b _02385680 -_0238562C: - mov r4, #1 - b _02385680 -_02385634: - ldrb r1, [r6, #0x24] - mov r0, #2 - str r0, [sp, #0xc] - strb r1, [r7, #0x4e] - ldr r0, [fp] - strb r0, [r7, #0x54] - b _02385680 -_02385650: - ldrb r1, [r6, #0x24] - mov r0, #3 - str r0, [sp, #0xc] - strb r1, [r7, #0x4e] - ldr r0, [fp] - strb r0, [r7, #0x54] - b _02385680 -_0238566C: - mov r0, #1 - str r0, [sp, #0xc] - b _02385680 -_02385678: - bl sub_02041094 - str r0, [fp] -_02385680: - cmp r8, #9 - addls pc, pc, r8, lsl #2 - b _023856D0 -_0238568C: ; jump table - b _023856D0 ; case 0 - b _023856D0 ; case 1 - b _023856D0 ; case 2 - b _023856B4 ; case 3 - b _023856B4 ; case 4 - b _023856C4 ; case 5 - b _023856D0 ; case 6 - b _023856D0 ; case 7 - b _023856D0 ; case 8 - b _023856B4 ; case 9 -_023856B4: - mov r0, r6 - bl sub_0203FD44 - str r0, [fp] - b _023856D0 -_023856C4: - mov r0, r6 - bl sub_0203F9CC - bl sub_02041178 -_023856D0: - mov r0, #0x1e - bl AdvanceFrame - cmp r8, #0 - beq _0238555C - cmp r4, #0 - bne _02385EFC - cmp sb, #0 - bne _02385548 - ldr r0, [sp, #0xc] - cmp r0, #1 - bne _02385738 - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldrb r1, [r6, #0x24] - ldr r2, [r0] - add r0, r7, #0x4a - mov r2, r2, lsl #0x10 - mov r2, r2, asr #0x10 - bl ov29_022EBC2C - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #8 - mov r1, #0x1b - bl ov29_022EA370 - mov r4, #0 - b _02385EFC -_02385738: - ldr r8, [r6, #0xb4] - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - add sb, r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2 - ldr fp, [r0] - bl ov29_022EBA70 - ldrb r0, [r8, #7] - cmp r0, #0 - beq _023857B0 - ldr r0, [sp, #8] - cmp r0, #0 - beq _02385770 - mov r0, #0x14 - mov r1, #0 - bl AddDungeonSubMenuOption -_02385770: - ldrb r0, [sb, fp, lsl #3] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _023857BC - ldrb r0, [sb, fp, lsl #3] - mov r1, #0 - tst r0, #8 - beq _023857A4 - mov r0, #0x33 - bl AddDungeonSubMenuOption - b _023857BC -_023857A4: - mov r0, #0x1e - bl AddDungeonSubMenuOption - b _023857BC -_023857B0: - mov r0, #0x1f - mov r1, #0 - bl AddDungeonSubMenuOption -_023857BC: - ldr r0, [sp, #4] - cmp r0, #0 - beq _023857E0 - mov r0, #0x20 - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0x21 - mov r1, #0 - bl AddDungeonSubMenuOption -_023857E0: - mov r0, #0x1d - mov r1, #0 - bl AddDungeonSubMenuOption - ldr r0, [sp, #4] - cmp r0, #0 - bne _02385804 - mov r0, #0x20 - bl DisableDungeonSubMenuOption - b _0238595C -_02385804: - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr fp, [r0] - add r0, r8, fp, lsl #3 - add r0, r0, #0x100 - ldrh r0, [r0, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] - mov sb, fp - bl IsNot2TurnsMoveOrSketch - cmp r0, #0 - moveq r0, #0 - beq _0238592C - add sb, sb, #1 - b _02385920 -_02385834: - add r0, r8, sb, lsl #3 - ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02385928 - add r0, r8, sb, lsl #3 - add r0, r0, #0x100 - ldrh r0, [r0, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] - bl IsNot2TurnsMoveOrSketch - cmp r0, #0 - beq _02385928 - add r0, r8, sb, lsl #3 - ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r0, #2 - bne _0238591C - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 - b _023858A4 -_02385888: - add r0, r8, r3, lsl #3 - ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r0, #2 - beq _023858AC - add r0, r3, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 -_023858A4: - cmp r3, #4 - blt _02385888 -_023858AC: - mov r0, fp, lsl #0x10 - mov r2, r0, asr #0x10 - b _0238590C -_023858B8: - add r0, r2, #1 - mov r0, r0, lsl #0x10 - mov r1, r0, asr #0x10 - add r0, r8, r2, lsl #3 - add sb, r0, #0x100 - b _023858F8 -_023858D0: - add fp, r8, r1, lsl #3 - add fp, fp, #0x100 - ldrh r0, [sb, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] - ldrh fp, [fp, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] - cmp r0, fp - moveq r0, #0 - beq _0238592C - add r0, r1, #1 - mov r0, r0, lsl #0x10 - mov r1, r0, asr #0x10 -_023858F8: - cmp r1, r3 - blt _023858D0 - add r0, r2, #1 - mov r0, r0, lsl #0x10 - mov r2, r0, asr #0x10 -_0238590C: - cmp r2, r3 - blt _023858B8 - mov r0, #1 - b _0238592C -_0238591C: - add sb, sb, #1 -_02385920: - cmp sb, #4 - blt _02385834 -_02385928: - mov r0, #0 -_0238592C: - cmp r0, #0 - bne _0238593C - mov r0, #0x20 - bl DisableDungeonSubMenuOption -_0238593C: - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r0, r8 - ldr r1, [r1] - bl ov31_023863F8 - cmp r0, #0 - bne _0238595C - mov r0, #0x21 - bl DisableDungeonSubMenuOption -_0238595C: - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r0, r8 - ldr r1, [r1] - bl ov31_023863F8 - cmp r0, #0 - bne _0238597C - mov r0, #0x21 - bl DisableDungeonSubMenuOption -_0238597C: - ldr r0, [sp, #8] - cmp r0, #0 - beq _023859C0 - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r8, #0 - ldr r1, [r0] - cmp r1, #4 - bge _023859B0 - mov r0, r6 - mov r2, #1 - bl CanAiUseMove - cmp r0, #0 - movne r8, #1 -_023859B0: - cmp r8, #0 -#ifdef EUROPE - bne _023859C0 - mov r0, #0x14 - bl DisableDungeonSubMenuOption -_023859C0: - bl ov29_022EB9A0 - mov r0, #0x14 - bl ov29_022EB8B0 - mvn r1, #0 - cmp r0, r1 - moveq r8, #0 - beq _023865E4 - bl ov29_022EB804 - mov r8, r0 -_023865E4: -#else - bne _023859C0 - mov r0, #0x14 - bl DisableDungeonSubMenuOption -_023859C0: - bl ov29_022EB9A0 -#endif - ldr r0, [sp, #0xc] - cmp r0, #3 - bne _02385A40 - mov r0, #0x20 - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385A08 - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 - b _02385EFC -_02385A08: - mov r0, #0x21 - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385EFC - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 - b _02385EFC -_02385A40: - cmp r0, #2 - bne _02385AF8 - ldrb r0, [sl, #7] - cmp r0, #0 - beq _02385AC0 - mov r0, #0x1e - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385A88 - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 -_02385A88: - mov r0, #0x33 - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385EFC - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 - b _02385EFC -_02385AC0: - mov r0, #0x1f - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385EFC - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 - b _02385EFC -_02385AF8: - mov r0, #0x62 - bl AdvanceFrame - add r1, sp, #0x20 - add r0, sp, #0xd4 - mov r2, #0 - str r1, [sp, #0x9c] - bl ov31_0238513C - bl ov29_022EBA84 - mov r1, #0 - add r3, sp, #0xd4 - b _02385B30 -_02385B24: - add r2, r3, r1, lsl #3 - str r1, [r2, #4] - add r1, r1, #1 -_02385B30: - cmp r1, r0 - blt _02385B24 -#ifdef JAPAN - ldr r0, _02385F8C ; =0x00001D34 - add sb, sp, #0xd4 - mov sl, r1, lsl #3 - strh r0, [sb, sl] - add r8, sb, r1, lsl #3 - mvn r0, #0 - mov r4, #0 - str r0, [r8, #4] - strh r4, [r8, #8] - sub r0, r4, #2 - str r0, [r8, #0xc] - ldrh r0, [r8, #8] - add r3, sp, #0x20 - ldr r2, _02387200 ; =0x0000087A - strh r0, [r8, #0x18] - ldr fp, [r8, #0xc] - add r0, r3, r1 - str fp, [r8, #0x1c] - ldrh sl, [sb, sl] - ldrb fp, [r0, #1] - mov sb, #0x14 - strh sl, [r8, #0x10] - strb fp, [r0, #3] - ldrb sl, [r3, r1] - ldr fp, [r8, #4] - ldr r3, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - str fp, [r8, #0x14] - ldrh fp, [r8, #-8] - strb sl, [r0, #2] - ldrb sl, [r0, #-1] - strh fp, [r8, #8] - ldr fp, [r8, #-4] - ldr r3, [r3] - strb sl, [r0, #1] - str fp, [r8, #0xc] - strh r2, [r8, #-8] - str sb, [r8, #-4] - cmp r3, #0 - strb r4, [r0, #-1] - movle r2, #3 - strleb r2, [r0, #-1] - add r2, r3, #1 - mov r2, r2, lsl #0x10 - mov r4, r2, asr #0x10 - mov r3, #0 - ldr sb, _02387204 ; =0x0000087B - add r8, sp, #0xd4 - mov r2, r1, lsl #3 - strh sb, [r8, r2] - add r1, r8, r1, lsl #3 - mov r2, #0x15 - str r2, [r1, #4] -#else -#ifdef EUROPE - ldr r0, _02385F8C ; =0x000008DC - add sl, sp, #0xd4 - mov fp, r1, lsl #3 - strh r0, [sl, fp] - mvn r0, #0 - add sb, sl, r1, lsl #3 - str r0, [sb, #4] - mov ip, #0 - add r2, r0, #0xa40 - strh ip, [sb, #8] - sub r0, ip, #2 - str r0, [sb, #0xc] - ldrh r0, [sb, #8] - add r3, sp, #0x20 - mov lr, #0x14 -#else - ldr r2, _02385F8C ; =0x000008DC - add sl, sp, #0xd4 - mov fp, r1, lsl #3 - mvn r0, #0 - strh r2, [sl, fp] - add sb, sl, r1, lsl #3 - str r0, [sb, #4] - mov r8, #0 - add r2, r0, #0xa40 - strh r8, [sb, #8] - sub r0, r8, #2 - str r0, [sb, #0xc] - ldrh r0, [sb, #8] - add r3, sp, #0x20 - mov ip, #0x14 -#endif - strh r0, [sb, #0x18] - ldr r4, [sb, #0xc] - add r0, r3, r1 - str r4, [sb, #0x1c] - ldrh r4, [sl, fp] - ldrb sl, [r0, #1] - ldr fp, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - strh r4, [sb, #0x10] - strb sl, [r0, #3] - ldrb r4, [r3, r1] - ldr sl, [sb, #4] - ldr r3, [fp] - str sl, [sb, #0x14] - ldrh sl, [sb, #-8] - strb r4, [r0, #2] - ldrb r4, [r0, #-1] - strh sl, [sb, #8] - cmp r3, #0 - strb r4, [r0, #1] - ldr r4, [sb, #-4] -#ifdef EUROPE - strb ip, [r0, #-1] - str r4, [sb, #0xc] - strh r2, [sb, #-8] - movle r2, #3 - strleb r2, [r0, #-1] - add r2, r3, #1 - mov r2, r2, lsl #0x10 - str lr, [sb, #-4] - mov r4, r2, asr #0x10 - add sb, sp, #0xd4 - mov r2, r1, lsl #3 - mov r3, #0xa40 - strh r3, [sb, r2] - mov r3, #0 - add r1, sb, r1, lsl #3 - mov r2, #0x15 - str r2, [r1, #4] -#else - strb r8, [r0, #-1] - str r4, [sb, #0xc] - strh r2, [sb, #-8] - movle r2, #3 - str ip, [sb, #-4] - add r8, sp, #0xd4 - strleb r2, [r0, #-1] - mov sb, r1, lsl #3 - add r2, r8, r1, lsl #3 - add r1, r3, #1 - mov r1, r1, lsl #0x10 - mov r4, r1, asr #0x10 - mov r1, #0xa40 - strh r1, [r8, sb] - mov r1, #0x15 - mov r3, #0 - str r1, [r2, #4] -#endif -#endif - strb r3, [r0] - ldr sl, [r6, #0xb4] - mov r1, r3 - mov r2, #1 - b _02385C58 -_02385C1C: -#ifdef EUROPE - add sb, sl, r4, lsl #3 - ldrb sb, [sb, #0x124] - tst sb, #1 - movne sb, r2 - moveq sb, r1 - tst sb, #0xff - beq _02385C4C - add sb, sl, r4, lsl #3 - ldrb sb, [sb, #0x124] - tst sb, #2 -#else - add r8, sl, r4, lsl #3 - ldrb r8, [r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r8, #1 - movne r8, r2 - moveq r8, r1 - tst r8, #0xff - beq _02385C4C - add r8, sl, r4, lsl #3 - ldrb r8, [r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r8, #2 -#endif - moveq r3, #1 - beq _02385C60 -_02385C4C: - add r4, r4, #1 - mov r4, r4, lsl #0x10 - mov r4, r4, asr #0x10 -_02385C58: - cmp r4, #4 - blt _02385C1C -_02385C60: - cmp r3, #0 - moveq r1, #3 - streqb r1, [r0] - ldr r0, _02385F90 ; =DUNGEON_WINDOW_PARAMS_15 - ldr r1, _02385F94 ; =0x80000213 - add r2, sp, #0x3c - add r3, sp, #0xd4 - bl CreateParentMenuFromStringIds - strb r0, [sp, #0x1c] - mov r0, #0x1b - bl AdvanceFrame -#ifdef EUROPE - add r4, sp, #0xd4 - mov fp, #0x1b - ldr sb, _02385F98 ; =0x0000099B - b _02385D0C -_02385CA0: - mov r0, fp - bl AdvanceFrame - mov r0, #0 -#else - add r8, sp, #0xd4 - mov sb, #0x1b - mov fp, #0 - ldr r4, _02385F98 ; =0x0000099B - b _02385D0C -_02385CA0: - mov r0, sb - bl AdvanceFrame - mov r0, fp -#endif - add r1, sp, #0x1e - bl GetPressedButtons - ldrh r0, [sp, #0x1e] - tst r0, #0x400 - beq _02385D0C - mov r5, #0 - b _02385CEC -_02385CC8: - mov r1, r5, lsl #3 -#ifdef EUROPE - add r0, r4, r5, lsl #3 - ldr r0, [r0, #4] - cmp r0, #0 - blt _02385CF4 - cmp r8, #0 - beq _0238690C - ldrh r0, [r4, r1] - cmp r0, sb - beq _02385CF4 -_0238690C: -#else - add r0, r8, r5, lsl #3 - ldr r0, [r0, #4] - cmp r0, #0 - blt _02385CF4 - ldrh r0, [r8, r1] - cmp r0, r4 - beq _02385CF4 -#endif - add r5, r5, #1 -_02385CEC: - cmp r5, #0xa - blt _02385CC8 -_02385CF4: -#ifdef EUROPE - add r0, r4, r5, lsl #3 -#else - add r0, r8, r5, lsl #3 -#endif - ldr r0, [r0, #4] - cmp r0, #0 - blt _02385D0C - cmp r5, #0xa - blt _02385D1C -_02385D0C: - ldrsb r0, [sp, #0x1c] - bl IsParentMenuActive - cmp r0, #0 - bne _02385CA0 -_02385D1C: - ldrh r0, [sp, #0x1e] - tst r0, #0x400 - bne _02385D34 - ldrsb r0, [sp, #0x1c] - bl sub_0202ABB0 - mov r5, r0 -_02385D34: - ldrsb r0, [sp, #0x1c] - bl sub_0202AB80 - cmp r0, #0 - ble _02385D78 - mvn r0, #0 - cmp r5, r0 - bne _02385D78 - ldrsb r0, [sp, #0x1c] - bl sub_0202AB80 - add r1, sp, #0xd4 - mov r0, r0, lsl #3 - ldrh r1, [r1, r0] - ldr r0, _02385F8C ; =0x000008DC - cmp r1, r0 - bne _02385D78 - mov r0, #0 - bl PlaySeVolumeWrapper -_02385D78: - add r0, sp, #0x1c - bl ov29_0234E988 - mov r0, #0x1b - bl AdvanceFrame - cmp r5, #0 - blt _02385ED8 - add r0, sp, #0xd4 - mov r1, r5, lsl #3 - ldrh r1, [r0, r1] - ldr r0, _02385F9C ; =0x000009A8 - cmp r1, r0 - bgt _02385DC8 - sub r0, r0, #3 - subs r0, r1, r0 - addpl pc, pc, r0, lsl #2 - b _02385DE4 -_02385DB8: ; jump table - b _02385DD4 ; case 0 - b _02385DD4 ; case 1 - b _02385DD4 ; case 2 - b _02385DD4 ; case 3 -_02385DC8: - ldr r0, _02385FA0 ; =0x000009BA - cmp r1, r0 - bne _02385DE4 -_02385DD4: - ldr r0, _02385FA4 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - b _02385DEC -_02385DE4: - mov r0, #0 - bl PlaySeVolumeWrapper -_02385DEC: - cmp r5, #0x14 - bne _02385E4C - mov r0, r6 - bl sub_0203F9CC - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_020416BC - ldr r2, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r1, r0, lsl #0x10 - str r0, [r2] - mov r0, r1, asr #0x10 - bl sub_020410A4 - mov r0, r6 - bl sub_0203FD44 - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - str r0, [r1] - ldr r0, [sp, #0x18] - bl sub_020307EC - bl sub_02041178 - mov r0, #0x1b - bl AdvanceFrame - b _02385548 -_02385E4C: - cmp r5, #0x15 - bne _02385EAC - mov r0, r6 - bl sub_0203F9CC - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_020416DC - ldr r2, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r1, r0, lsl #0x10 - str r0, [r2] - mov r0, r1, asr #0x10 - bl sub_020410A4 - mov r0, r6 - bl sub_0203FD44 - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - str r0, [r1] - ldr r0, [sp, #0x18] - bl sub_020307EC - bl sub_02041178 - mov r0, #0x1b - bl AdvanceFrame - b _02385548 -_02385EAC: - mov r0, r5 - bl ov29_022EB804 - cmp r0, #0 - beq _02385EF0 - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - b _02385EF0 -_02385ED8: - ldr r0, [sp, #0x18] - bl sub_020307EC - bl sub_02041178 - mov r0, #0x1b - bl AdvanceFrame - b _02385548 -_02385EF0: - mov r0, #0x1b - bl AdvanceFrame - mov r4, #0 -_02385EFC: - ldr r0, [sp, #0x18] - bl CloseAdvancedTextBox2 - ldr r0, [sp, #0x14] - bl sub_0202F334 - ldr r0, [sp, #0x14] - bl CloseDialogueBox - mov r0, #8 - mov r1, #0x1e - bl ov29_022EA370 - bl HideTileGrid - mov r0, #0x1b - bl AdvanceFrame - bl sub_020407C0 - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0, #8] - cmp r0, #0 - beq _02385F50 - bl MemFree - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r1, #0 - str r1, [r0, #8] -_02385F50: - bl GetLeaderMonster - ldr r1, [sp, #0x10] - add r2, sp, #0x2c - ldr r1, [r2, r1, lsl #2] - strb r1, [r0, #0x4e] - mov r0, r4 - add sp, sp, #0x12c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#if defined(EUROPE) -#define HANDLE_MOVES_MENU_DATA_OFFSET 2 -#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0 -#elif defined(JAPAN) -#define HANDLE_MOVES_MENU_DATA_OFFSET 0xA03 -#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0x19D0 -#else -#define HANDLE_MOVES_MENU_DATA_OFFSET 0 -#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0 -#endif -_02385F70: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 -_02385F74: .word DUNGEON_WINDOW_PARAMS_14 -_02385F78: .word 0x00003FCD + HANDLE_MOVES_MENU_DATA_OFFSET -_02385F7C: .word 0x00000404 -_02385F80: .word DUNGEON_WINDOW_PARAMS_16 -_02385F84: .word 0x00003FCC + HANDLE_MOVES_MENU_DATA_OFFSET -_02385F88: .word DUNGEON_PTR -#ifdef JAPAN -_02385F8C: .word 0x00001D34 -_02387200: .word 0x0000087A -_02387204: .word 0x0000087B -#else -_02385F8C: .word 0x000008DC -#endif -_02385F90: .word DUNGEON_WINDOW_PARAMS_15 -_02385F94: .word 0x80000213 -_02385F98: .word 0x0000099B + HANDLE_MOVES_MENU_DATA_OFFSET_2 -_02385F9C: .word 0x000009A8 + HANDLE_MOVES_MENU_DATA_OFFSET_2 -_02385FA0: .word 0x000009BA + HANDLE_MOVES_MENU_DATA_OFFSET_2 -_02385FA4: .word 0x00003F07 - arm_func_end HandleMovesMenu - - arm_func_start ov31_02385FA8 -ov31_02385FA8: ; 0x02385FA8 - stmdb sp!, {r3, r4, r5, lr} - ldr r3, _02385FD8 ; =ov29_0237C91C - mov r1, r1, lsl #3 - ldrh r1, [r3, r1] - mov r5, r0 - mov r4, r2 - bl SetMonsterActionFields - ldr r0, _02385FDC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - strb r4, [r5, #4] - ldr r0, [r0] - strb r0, [r5, #0xa] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02385FD8: .word ov29_0237C91C -_02385FDC: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 - arm_func_end ov31_02385FA8 - - arm_func_start ov31_02385FE0 -ov31_02385FE0: ; 0x02385FE0 -#ifdef JAPAN -#define OV31_02385FE0_OFFSET -4 -#else -#define OV31_02385FE0_OFFSET 0 -#endif - stmdb sp!, {r3, lr} - ldr r1, _0238604C ; =DUNGEON_PTR - ldrb r3, [r0, #4] - ldr r1, [r1] - ldrb r2, [r0, #0xa] - add r1, r1, r3, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r1, [r1, #0xa84] -#else - ldr r1, [r1, #0xb28] -#endif - mov r2, r2, lsl #3 - ldr ip, [r1, #0xb4] - add r1, ip, #0x26 + OV31_02385FE0_OFFSET - add r3, r1, #0x100 - ldrh r1, [r3, r2] - orr r1, r1, #2 - strh r1, [r3, r2] - ldrb r1, [r0, #0xa] - cmp r1, #4 - bhs _02386038 - add r0, ip, #0x124 + OV31_02385FE0_OFFSET - mov r2, #4 - bl ov31_02386050 - ldmia sp!, {r3, pc} -_02386038: - add r0, ip, #0x144 + OV31_02385FE0_OFFSET - mov r1, #0 - mov r2, #1 - bl ov31_02386050 - ldmia sp!, {r3, pc} - .align 2, 0 -_0238604C: .word DUNGEON_PTR - arm_func_end ov31_02385FE0 - - arm_func_start ov31_02386050 -ov31_02386050: ; 0x02386050 - stmdb sp!, {r3, r4, r5, lr} - mov r3, r1 - mov r1, r2 - mov r2, r3 - mov r3, #0 - bl sub_020417A8 - mov r5, r0 - mov r4, #0x62 -_02386070: - bl sub_02041A18 - cmp r0, #0 - beq _0238608C - bl sub_02041A00 - mov r0, r5 - bl CloseScrollBox - b _02386098 -_0238608C: - mov r0, r4 - bl AdvanceFrame - b _02386070 -_02386098: - mov r0, #0x62 - bl AdvanceFrame - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov31_02386050 - - arm_func_start ov31_023860A4 -ov31_023860A4: ; 0x023860A4 -#ifdef JAPAN -#define OV31_023860A4_OFFSET -4 -#else -#define OV31_023860A4_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r2, _02386190 ; =DUNGEON_PTR - ldrb r3, [r0, #4] - ldr r4, [r2] - ldrb r2, [r0, #0xa] - add r0, r4, r3, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r4, [r0, #0xa84] -#else - ldr r4, [r0, #0xb28] -#endif - mov r8, r1 - ldr r7, [r4, #0xb4] - mov r6, #0 - add r1, r7, #0x124 + OV31_023860A4_OFFSET - ldrb r0, [r1, r2, lsl #3] - mov ip, #0 - add r5, r1, r2, lsl #3 - tst r0, #8 - movne r6, #1 - mov r2, ip - mov r3, #1 -_023860F0: - add r0, r7, ip, lsl #3 - ldrb r0, [r0, #0x124 + OV31_023860A4_OFFSET] - tst r0, #1 - movne r0, r3 - moveq r0, r2 - tst r0, #0xff - addne r1, r7, ip, lsl #3 - ldrneb r0, [r1, #0x124 + OV31_023860A4_OFFSET] - add ip, ip, #1 - bicne r0, r0, #8 - strneb r0, [r1, #0x124 + OV31_023860A4_OFFSET] - cmp ip, #4 - blt _023860F0 - bl ov29_0234B034 - ldrh r1, [r5, #4] - cmp r6, #0 - str r1, [r0, #0x10] - ldreqb r0, [r5] - orreq r0, r0, #8 - streqb r0, [r5] - add r0, r7, #0x124 + OV31_023860A4_OFFSET - bl AllManip1 - ldrh r0, [r5, #2] - cmp r8, #0 - orr r0, r0, #2 - strh r0, [r5, #2] - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - cmp r6, #0 - bne _02386174 - ldr r1, _02386194 ; =0x000008D8 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - b _02386180 -_02386174: - ldr r1, _02386198 ; =0x000008D9 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser -_02386180: - mov r0, #0x78 - mov r1, #0x1f - bl ov29_022EA370 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02386190: .word DUNGEON_PTR -#ifdef JAPAN -_02386194: .word 0x00001D30 -_02386198: .word 0x00001D31 -#else -_02386194: .word 0x000008D8 -_02386198: .word 0x000008D9 -#endif - arm_func_end ov31_023860A4 - - arm_func_start ov31_0238619C -ov31_0238619C: ; 0x0238619C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r1, _02386200 ; =DUNGEON_PTR - ldrb r2, [r0, #4] - ldr r1, [r1] - ldrb r4, [r0, #0xa] - add r0, r1, r2, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] - ldr r7, [r0, #0xb4] - add r5, r7, #0x120 -#else - ldr r0, [r0, #0xb28] - ldr r7, [r0, #0xb4] - add r5, r7, #0x124 -#endif - add r6, r5, r4, lsl #3 - bl ov29_0234B034 - mov r1, #0 - mov r2, r6 - mov r3, r1 - bl FormatMoveStringMore - ldrb r1, [r5, r4, lsl #3] - mov r0, r5 - eor r1, r1, #4 - strb r1, [r5, r4, lsl #3] - bl AllManip1 - ldrh r0, [r6, #2] - orr r0, r0, #2 - strh r0, [r6, #2] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02386200: .word DUNGEON_PTR - arm_func_end ov31_0238619C - - arm_func_start ov31_02386204 -ov31_02386204: ; 0x02386204 -#ifdef JAPAN -#define OV31_02386204_OFFSET -4 -#else -#define OV31_02386204_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #0xa0 - ldr r1, _02386304 ; =DUNGEON_PTR - ldrb r2, [r0, #4] - ldr r1, [r1] - ldrb r5, [r0, #0xa] - add r0, r1, r2, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r1, [r0, #0xa84] -#else - ldr r1, [r0, #0xb28] -#endif - add r0, sp, #0 - ldr r4, [r1, #0xb4] - mov r2, #0 - add r1, r4, #0x124 + OV31_02386204_OFFSET - add r1, r1, r5, lsl #3 - bl FormatMoveString - add r0, r4, #0x26 + OV31_02386204_OFFSET - add r2, r0, #0x100 - mov r1, r5, lsl #3 - ldrh r0, [r2, r1] - mov r3, #0 - orr r0, r0, #2 - strh r0, [r2, r1] - mov r1, r3 - mov r2, #1 - b _023862A4 -_02386268: - add r5, r5, #1 - cmp r5, #4 - bge _023862AC - add r0, r4, r5, lsl #3 - ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] - tst r0, #1 - movne r0, r2 - moveq r0, r1 - tst r0, #0xff - beq _023862AC - add r0, r4, r5, lsl #3 - ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] - tst r0, #2 - beq _023862AC - add r3, r3, #1 -_023862A4: - cmp r3, #4 - blt _02386268 -_023862AC: - add r0, r4, r5, lsl #3 - ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - moveq r5, #4 - cmp r5, #4 - bge _023862F4 - add ip, r4, #0x124 + OV31_02386204_OFFSET - ldrb r2, [ip, r5, lsl #3] - add r0, sp, #0x50 - add r1, ip, r5, lsl #3 - orr r2, r2, #2 - bic r3, r2, #4 - mov r2, #0 - strb r3, [ip, r5, lsl #3] - bl FormatMoveString -_023862F4: - add r0, r4, #0x124 + OV31_02386204_OFFSET - bl AllManip1 - add sp, sp, #0xa0 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02386304: .word DUNGEON_PTR - arm_func_end ov31_02386204 - - arm_func_start ov31_02386308 -ov31_02386308: ; 0x02386308 -#ifdef JAPAN -#define OV31_02386308_OFFSET -4 -#else -#define OV31_02386308_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r2, _023863EC ; =DUNGEON_PTR - ldrb r3, [r0, #4] - ldr r2, [r2] - ldrb r7, [r0, #0xa] - add r0, r2, r3, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r4, [r0, #0xa84] -#else - ldr r4, [r0, #0xb28] -#endif - mov r8, r1 - ldr r6, [r4, #0xb4] - mov r5, #0 - bl ov29_0234B034 - add r1, r6, r7, lsl #3 - add r1, r1, #0x100 - ldrh r2, [r1, #0x28 + OV31_02386308_OFFSET] - mov r3, r7, lsl #3 - add r1, r6, #0x26 + OV31_02386308_OFFSET - str r2, [r0, #0x10] - add r2, r1, #0x100 - ldrh r1, [r2, r3] - add r7, r7, #1 - mov r0, r5 - orr r1, r1, #2 - strh r1, [r2, r3] - add ip, r6, #0x124 + OV31_02386308_OFFSET - mov r1, #1 - b _023863A0 -_02386374: - cmp r7, #4 - bge _023863A8 - ldrb r2, [ip, r7, lsl #3] - mov r3, r7, lsl #3 - tst r2, #2 - beq _023863A8 - bic r2, r2, #2 - mov r5, r1 - strb r2, [ip, r3] - add r7, r7, #1 - add r0, r0, #1 -_023863A0: - cmp r0, #4 - blt _02386374 -_023863A8: - add r0, r6, #0x124 + OV31_02386308_OFFSET - bl AllManip1 - cmp r8, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - cmp r5, #0 - beq _023863D0 - ldr r1, _023863F0 ; =0x000008DA - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - b _023863DC -_023863D0: - ldr r1, _023863F4 ; =0x000008DB - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser -_023863DC: - mov r0, #0x78 - mov r1, #0x1f - bl ov29_022EA370 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_023863EC: .word DUNGEON_PTR -#ifdef JAPAN -_023863F0: .word 0x00001D32 -_023863F4: .word 0x00001D33 -#else -_023863F0: .word 0x000008DA -_023863F4: .word 0x000008DB -#endif - arm_func_end ov31_02386308 - - arm_func_start ov31_023863F8 -ov31_023863F8: ; 0x023863F8 - stmdb sp!, {r3, lr} - mov lr, #0 - mov ip, lr - add r1, r1, #1 - mov r2, #1 - b _02386434 -_02386410: - cmp r1, #4 - bge _0238643C - add r3, r0, r1, lsl #3 -#ifdef JAPAN - ldrb r3, [r3, #0x120] -#else - ldrb r3, [r3, #0x124] -#endif - tst r3, #2 - beq _0238643C - mov lr, r2 - add r1, r1, #1 - add ip, ip, #1 -_02386434: - cmp ip, #4 - blt _02386410 -_0238643C: - cmp lr, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end ov31_023863F8 - - arm_func_start ov31_02386450 -ov31_02386450: ; 0x02386450 - stmdb sp!, {r3, lr} - ldr r0, _02386478 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0, #4] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _02386478 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r1, #0 - str r1, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_02386478: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 - arm_func_end ov31_02386450 - - arm_func_start ov31_0238647C -ov31_0238647C: ; 0x0238647C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x114 - mov r6, r0 - mov r5, r1 - str r2, [sp, #4] - mov r0, #0x284 - mov r1, #8 - str r3, [sp, #8] - mvn r4, #1 - bl MemAlloc - ldr r1, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r2, #0 - str r0, [r1, #4] - str r2, [r1] -_023864B4: - mov r0, #6 - mov r1, #0 - bl ov29_022EA428 - ldr r0, _02386B10 ; =ov29_0235352C - ldr r0, [r0] - ldr r0, [r0, #0x24] - bl sub_0200B3D4 - mvn sb, #1 - ldr r7, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - add r8, sb, #1 - add fp, sp, #0xbc -_023864E0: - cmp r4, sb - bne _02386578 - ldr r3, [r6, #0xb4] - add r0, sp, #0x14 - ldrsh r2, [r3, #2] - ldrb r3, [r3, #0x48] - mov r1, #2 - bl sub_02053CA0 - mov r0, r6 - bl sub_0203F9CC - mov r1, #0 - b _0238652C -_02386510: - add r0, r5, r1, lsl #3 - ldrh r0, [r0, #2] - tst r0, #4 - bne _02386534 - add r0, r1, #1 - mov r0, r0, lsl #0x10 - mov r1, r0, asr #0x10 -_0238652C: - cmp r1, #8 - blt _02386510 -_02386534: - add r0, r5, r1, lsl #3 - ldrh r0, [r0, #4] - bl sub_0203FD14 - ldr r0, [sp, #8] - mov r1, #0 - cmp r0, #0 - add r3, sp, #0x14 - beq _02386568 - mov r0, #2 - mov r2, r1 - bl sub_0204019C - mov r4, r0 - b _02386578 -_02386568: - mov r0, #3 - mov r2, r1 - bl sub_0204019C - mov r4, r0 -_02386578: - mov r0, #0x1e - bl AdvanceFrame - bl sub_020407EC - mov sl, r0 - bl sub_02041094 - cmp sl, #2 - str r0, [r7] - moveq sl, #0 - beq _023865B4 - cmp sl, #1 - moveq sl, #1 - beq _023865B4 - cmp sl, #7 - bne _02386578 - mov sl, #2 -_023865B4: - mov r0, #0x1e - bl AdvanceFrame - cmp sl, #1 - ldreq r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mvneq r1, #0 - streq r1, [r0] - beq _02386924 - cmp sl, #2 - bne _02386694 - mov r0, r4 - bl SetAdvancedTextBoxState5 - mov r0, #0x1e - bl AdvanceFrame - mov r0, r4 - bl CloseAdvancedTextBox - mov r0, #0x1b - mov r4, sb - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - ldr r0, [r7] - cmp r0, #4 - bge _02386664 - ldr r1, [r7] - mov r0, r5 - mov r2, #4 - bl ov31_02386050 - b _02386674 -_02386664: - add r0, r5, #0x20 - mov r1, #0 - mov r2, #1 - bl ov31_02386050 -_02386674: - bl sub_020407C0 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #2 - mov r1, #0x1b - bl ov29_022EA370 - b _023864E0 -_02386694: - bl ov29_022EBA70 - mov r0, #0x22 - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0x21 - mov r1, #0 - bl AddDungeonSubMenuOption - ldr r0, [r7] - mov r3, #0 - add r1, r0, #1 - mov r2, r3 - b _023866E4 -_023866C4: - cmp r1, #8 - bge _023866EC - ldrb r0, [r5, r1, lsl #3] - tst r0, #2 - beq _023866EC - mov r3, #1 - add r1, r1, #1 - add r2, r2, #1 -_023866E4: - cmp r2, #8 - blt _023866C4 -_023866EC: - cmp r3, #0 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - bne _02386708 - mov r0, #0x21 - bl DisableDungeonSubMenuOption -_02386708: - mov r0, #0x1d - mov r1, #0 - bl AddDungeonSubMenuOption - add r0, sp, #0x18 - str r0, [sp, #0x84] - mov r0, fp - add r1, sp, #0x18 - mov r2, #0 - bl ov31_0238513C - bl ov29_022EBA84 - mov r2, #0 - b _0238674C -_02386738: - add r1, fp, r2, lsl #3 - str r2, [r1, #4] - add r1, r2, #1 - mov r1, r1, lsl #0x10 - mov r2, r1, asr #0x10 -_0238674C: - cmp r2, r0 - blt _02386738 - ldr r0, _02386B14 ; =0x000008DC - mov r1, r2, lsl #3 - strh r0, [fp, r1] - add r0, fp, r2, lsl #3 - str r8, [r0, #4] - add r0, r2, #1 - mov r0, r0, lsl #0x10 - mov r2, r0, asr #0x10 - mov r1, r2, lsl #3 - mov r0, #0 - strh r0, [fp, r1] - add r0, fp, r2, lsl #3 - str r8, [r0, #4] - ldr r0, _02386B18 ; =DUNGEON_WINDOW_PARAMS_15 - ldr r1, _02386B1C ; =0x00000213 - add r2, sp, #0x24 - mov r3, fp - bl CreateParentMenuFromStringIds - str r0, [sp, #0x10] -_023867A0: - mov r0, #0x1b - bl AdvanceFrame - ldr r0, [sp, #0x10] - bl IsParentMenuActive - cmp r0, #0 - bne _023867A0 - ldr r0, [sp, #0x10] - bl sub_0202ABB0 - movs sl, r0 - movmi r0, #1 - strmi r0, [sp, #0xc] - movpl r0, #0 - strpl r0, [sp, #0xc] - mov r0, #0x1b - bl AdvanceFrame - ldr r0, [sp, #0x10] - bl CloseParentMenu - ldr r0, [sp, #0xc] - cmp r0, #1 - bne _023867F8 - bl sub_020416FC - b _023864E0 -_023867F8: - mov r0, #6 - mov r1, #0 - bl ov29_022EA428 - mov r0, r4 - bl SetAdvancedTextBoxState5 -_0238680C: - mov r0, #0x1b - bl AdvanceFrame - mov r0, r4 - bl IsAdvancedTextBoxActive - cmp r0, #0 - bne _0238680C - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, r4 - bl CloseAdvancedTextBox - mov r4, sb - bl sub_020407C0 - cmp sl, #1 - bne _023868E8 - ldr r0, [r7] - mov r1, #0 - add r2, r0, #1 - b _023868C0 -_0238689C: - cmp r2, #8 - bge _023868C8 - ldrb r0, [r5, r2, lsl #3] - tst r0, #2 - beq _023868C8 - bic r0, r0, #2 - strb r0, [r5, r2, lsl #3] - add r2, r2, #1 - add r1, r1, #1 -_023868C0: - cmp r1, #8 - blt _0238689C -_023868C8: - mov r0, r5 - bl AllManip2 - ldr r0, [r6, #0xb4] - mov r1, r5 -#ifdef JAPAN - add r0, r0, #0x120 -#else - add r0, r0, #0x124 -#endif - mov r2, #0x22 - bl memcpy - b _023864E0 -_023868E8: - cmp sl, #2 - bne _02386924 - ldr r0, [r7] - cmp r0, #4 - bge _02386910 - ldr r1, [r7] - mov r0, r5 - mov r2, #4 - bl ov31_02386050 - b _023864E0 -_02386910: - add r0, r5, #0x20 - mov r1, #0 - mov r2, #1 - bl ov31_02386050 - b _023864E0 -_02386924: - mvn r0, #1 - cmp r4, r0 - beq _02386950 - mov r0, r4 - bl SetAdvancedTextBoxState5 - mov r0, #0x1b - bl AdvanceFrame - mov r0, r4 - bl CloseAdvancedTextBox - mvn r4, #1 - bl sub_020407C0 -_02386950: - ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r1, [r0] - cmp r1, #0 - blt _02386AE8 - ldr r0, [sp, #4] - cmp r0, #0 - beq _02386A04 - mov r0, r1, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02041154 - mov r1, r0 - mov r0, #0 - bl ov29_0234B084 - ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - cmp r0, #4 - bge _023869D8 - bl sub_02041364 - cmp r0, #0 - mov r0, #0 - mov r2, #1 - beq _023869C0 - ldr r1, _02386B20 ; =0x000008D6 - mov r3, r0 - str r2, [sp] - bl YesNoMenu - mov r7, r0 - b _023869F4 -_023869C0: - ldr r1, _02386B24 ; =0x000008D7 - mov r3, r0 - str r2, [sp] - bl YesNoMenu - mov r7, r0 - b _023869F4 -_023869D8: - mov r0, #0 - mov r2, #1 - ldr r1, _02386B24 ; =0x000008D7 - mov r3, r0 - str r2, [sp] - bl YesNoMenu - mov r7, r0 -_023869F4: - mov r0, #1 - mov r1, #0 - bl ov29_0233A0E8 - b _02386A08 -_02386A04: - mov r7, #1 -_02386A08: - cmp r7, #1 - bne _023864B4 - ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - cmp r0, #4 - movge r1, #0 - strgeb r1, [r5, r0, lsl #3] - bge _02386AE8 - bl sub_02041484 - bl sub_0203FD38 - mov r1, #0 - mov r2, r1 - mov r3, #1 - b _02386A80 -_02386A40: - add r8, r0, r1, lsl #3 - add r7, r5, r1, lsl #3 - mov r6, #4 -_02386A4C: - ldrh r4, [r8], #2 - subs r6, r6, #1 - strh r4, [r7], #2 - bne _02386A4C - ldrb r4, [r5, r1, lsl #3] - tst r4, #1 - movne r4, r3 - moveq r4, r2 - tst r4, #0xff - beq _02386A88 - add r1, r1, #1 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 -_02386A80: - cmp r1, #4 - blt _02386A40 -_02386A88: - mov r6, #4 -_02386A8C: - add r4, r5, r6, lsl #3 - add r3, r5, r1, lsl #3 - mov r2, #4 -_02386A98: - ldrh r0, [r4], #2 - subs r2, r2, #1 - strh r0, [r3], #2 - bne _02386A98 - add r0, r6, #1 - mov r0, r0, lsl #0x10 - add r1, r1, #1 - mov r6, r0, asr #0x10 - mov r0, r1, lsl #0x10 - cmp r6, #8 - mov r1, r0, asr #0x10 - blt _02386A8C - mov r2, #0 - b _02386AE0 -_02386AD0: - add r0, r1, #1 - mov r0, r0, lsl #0x10 - strb r2, [r5, r1, lsl #3] - mov r1, r0, asr #0x10 -_02386AE0: - cmp r1, #8 - blt _02386AD0 -_02386AE8: - bl ov31_02386450 - ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - cmp r0, #0 - movge r0, #1 - movlt r0, #0 - and r0, r0, #0xff - add sp, sp, #0x114 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define OV31_0238647C_OFFSET 0x1458 -#else -#define OV31_0238647C_OFFSET 0 -#endif -_02386B0C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 -_02386B10: .word ov29_0235352C -_02386B14: .word 0x000008DC + OV31_0238647C_OFFSET -_02386B18: .word DUNGEON_WINDOW_PARAMS_15 -_02386B1C: .word 0x00000213 -_02386B20: .word 0x000008D6 + OV31_0238647C_OFFSET -_02386B24: .word 0x000008D7 + OV31_0238647C_OFFSET - arm_func_end ov31_0238647C - - arm_func_start ov31_02386B28 -ov31_02386B28: ; 0x02386B28 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #0xa4 - ldr r0, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - ldr r1, [r0, #0x64] - ldrsh r0, [r1, #4] - ldrsh r1, [r1, #6] - bl GetTile - mov r4, r0 - ldr r0, _02386C0C ; =0x000008D1 - bl StringFromId - ldr r1, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r3, r0 - ldr r0, [r1] - mov r1, #8 - add r0, r0, #0x100 - ldrsb r0, [r0, #0x60] - mov r2, #2 - bl DrawTextInWindow - ldr r1, [r4, #0x10] - cmp r1, #0 - moveq r0, #0 - beq _02386B98 - ldr r0, [r1] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_02386B98: - cmp r0, #0 - beq _02386C00 - add r0, sp, #0x54 - mov r2, #0 - bl ov29_022E2A78 - ldr r0, [r4, #0x10] - bl ov29_022E1618 - ldrb r1, [r0] - ldr r0, _02386C10 ; =0x000008D2 - str r1, [sp, #0x14] - bl StringFromId - add r1, sp, #4 - mov r2, r0 - str r1, [sp] - add r0, sp, #0x54 - mov r1, #0x50 - mov r3, #0 - bl PreprocessString - ldr r0, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r1, #0x10 - ldr r0, [r0] - mov r2, #0x12 - add r0, r0, #0x100 - ldrsb r0, [r0, #0x60] - add r3, sp, #0x54 - bl DrawTextInWindow -_02386C00: - add sp, sp, #0xa4 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_02386C08: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C -#ifdef JAPAN -_02386C0C: .word 0x00001D29 -_02386C10: .word 0x00001D2A -#else -_02386C0C: .word 0x000008D1 -_02386C10: .word 0x000008D2 -#endif - arm_func_end ov31_02386B28 - - arm_func_start ov31_02386C14 -ov31_02386C14: ; 0x02386C14 - stmdb sp!, {r3, lr} - ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - add r0, r0, #0x61 - add r0, r0, #0x100 - bl ov29_0234E988 - ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - add r0, r0, #0x100 - ldrsb r0, [r0, #0x60] - bl sub_0202F954 - mov r0, #0x62 - bl AdvanceFrame - mov r0, #0x62 - bl AdvanceFrame - ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - add r0, r0, #0x100 - ldrsb r0, [r0, #0x60] - bl CloseTextBox - ldmia sp!, {r3, pc} - .align 2, 0 -_02386C68: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C - arm_func_end ov31_02386C14 - - arm_func_start ov31_02386C6C -ov31_02386C6C: ; 0x02386C6C - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #0xf4 - mov r5, r0 - mov r0, #0x164 - mov r1, #8 - bl MemAlloc - ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - str r0, [r1] - str r5, [r0, #0x64] -_02386C90: - bl ov29_022EA62C - ldr r0, _02386F10 ; =DUNGEON_WINDOW_PARAMS_18 - ldr r1, _02386F14 ; =ov31_02386B28 - bl CreateTextBox - ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r1, [r1] - strb r0, [r1, #0x160] - bl ov29_022EBA70 - mov r0, #0x25 - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0xc - mov r1, #0 - bl AddDungeonSubMenuOption - bl ov29_022EB9A0 - bl ov29_022EBA84 - mov r1, #0 - ldr r2, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - b _02386CF0 -_02386CDC: - ldr r3, [r2] - add r4, r1, #1 - add r3, r3, r1, lsl #3 - mov r1, r4 - str r4, [r3, #4] -_02386CF0: - cmp r1, r0 - blt _02386CDC - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r2, #0 - ldr r4, [r0] - mov r3, r1, lsl #3 - strh r2, [r4, r3] - ldr r3, [r0] - sub r4, r2, #1 - add r3, r3, r1, lsl #3 - str r4, [r3, #4] - ldr r3, [r0] - add r3, r3, r1, lsl #3 - strh r2, [r3, #8] - ldr r3, [r0] - add r1, r3, r1, lsl #3 - str r4, [r1, #0xc] - ldr r0, [r0] - add r1, r0, #0x58 - bl ov31_0238513C - ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, _02386F18 ; =DUNGEON_WINDOW_PARAMS_17 - ldr r3, [r1] - ldr r1, _02386F1C ; =0x00000213 - add r4, r3, #0x58 - add r2, sp, #0x5c - str r4, [sp, #0xbc] - bl CreateParentMenuFromStringIds - ldr r6, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r4, #0x2d - ldr r1, [r6] - strb r0, [r1, #0x161] -_02386D70: - mov r0, r4 - bl AdvanceFrame - ldr r0, [r6] - add r0, r0, #0x100 - ldrsb r0, [r0, #0x61] - bl IsParentMenuActive - cmp r0, #0 - bne _02386D70 - ldr r0, [r6] - add r0, r0, #0x100 - ldrsb r0, [r0, #0x61] - bl sub_0202ABB0 - ldr r1, [r6] - sub r0, r0, #1 - str r0, [r1, #0x124] - ldr r0, [r6] - ldr r0, [r0, #0x124] - cmp r0, #0 - movlt r6, #1 - blt _02386EBC - cmp r0, #1 - bne _02386E70 - bl ov31_02386C14 - ldrsh r0, [r5, #4] - ldrsh r1, [r5, #6] - bl GetTile - ldr r0, [r0, #0x10] - cmp r0, #0 - beq _02386E68 - ldr r1, [r0] - cmp r1, #2 - bne _02386E68 - bl GetTrapInfo - ldrb r3, [r0] - add r2, sp, #0xc - ldr r1, _02386F20 ; =0x00001013 - str r3, [sp, #0x1c] - str r2, [sp] - ldrb r2, [r0] - ldr r0, _02386F24 ; =DUNGEON_WINDOW_PARAMS_19 -#if defined(EUROPE) - sub r3, r1, #0x740 - add r2, r2, #0xdc - add r2, r2, #0x3400 -#elif defined(JAPAN) - ldr r3, _023881A0 ; =0x00001D2B - add r2, r2, #0x5f - add r2, r2, #0x4700 -#else - sub r3, r1, #0x740 - add r2, r2, #0xda - add r2, r2, #0x3400 -#endif - mov r2, r2, lsl #0x10 - mov r2, r2, lsr #0x10 - str r2, [sp, #4] - mov r2, #0 - str r2, [sp, #8] - bl CreateScrollBoxSingle - mov r6, r0 - mov r4, #0x16 -_02386E3C: - mov r0, r4 - bl AdvanceFrame - mov r0, r6 - bl IsScrollBoxActive - cmp r0, #0 - bne _02386E3C - mov r0, r6 - bl CloseScrollBox - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 -_02386E68: - mov r6, #2 - b _02386EBC -_02386E70: - bl ov29_022EB804 - cmp r0, #0 - beq _02386D70 - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r4, [r5, #0xb4] - ldr r0, [r0] - ldr r1, _02386F28 ; =ov29_0237C91C - ldr r2, [r0, #0x124] - add r0, r4, #0x4a - mov r2, r2, lsl #3 - ldrh r1, [r1, r2] - bl SetMonsterActionFields - mov r6, #0 - strb r6, [r4, #0x4e] - strh r6, [r4, #0x50] - strh r6, [r4, #0x52] - strb r6, [r4, #0x54] - strh r6, [r4, #0x56] - strh r6, [r4, #0x58] -_02386EBC: - mov r0, #0x2d - bl AdvanceFrame - cmp r6, #2 - beq _02386C90 - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - cmp r0, #0 - beq _02386EF8 - bl ov31_02386C14 - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - bl MemFree - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r1, #0 - str r1, [r0] -_02386EF8: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - add sp, sp, #0xf4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02386F0C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C -_02386F10: .word DUNGEON_WINDOW_PARAMS_18 -_02386F14: .word ov31_02386B28 -_02386F18: .word DUNGEON_WINDOW_PARAMS_17 -_02386F1C: .word 0x00000213 -_02386F20: .word 0x00001013 -_02386F24: .word DUNGEON_WINDOW_PARAMS_19 -#ifdef JAPAN -_023881A0: .word 0x00001D2B -#endif -_02386F28: .word ov29_0237C91C - arm_func_end ov31_02386C6C - - arm_func_start ov31_02386F2C -ov31_02386F2C: ; 0x02386F2C - stmdb sp!, {r3, lr} - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x294 - add r0, r0, #0x400 - bl ov29_0234E988 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x97] - cmp r0, r1 - beq _02386F64 - bl CloseAdvancedTextBox -_02386F64: - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x98] - cmp r0, r1 - beq _02386F98 - bl CloseAdvancedTextBox - bl sub_020407C0 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x698] -_02386F98: - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x96] - cmp r0, r1 - beq _02386FB8 - bl CloseTextBox -_02386FB8: - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x3a4 - add r0, r0, #0x400 - bl ov31_023899D4 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x3a8 - add r0, r0, #0x400 - bl ov31_02388714 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x95 - add r0, r0, #0x600 - bl ov29_0234E988 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - bl MemFree - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02387010: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 - arm_func_end ov31_02386F2C - - arm_func_start ov31_02387014 -ov31_02387014: ; 0x02387014 - ldr r1, [r0, #0xb4] - ldr ip, _02387044 ; =ov31_023899B8 - ldrb r0, [r1, #7] - mov r2, #1 - cmp r0, #0 - movne r1, #0xb - ldr r0, _02387048 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldreqb r1, [r1, #0xa8] - ldr r0, [r0] - and r1, r1, #0xff - ldr r0, [r0, #0x7a4] - bx ip - .align 2, 0 -_02387044: .word ov31_023899B8 -_02387048: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 - arm_func_end ov31_02387014 - - arm_func_start TeamMenu -TeamMenu: ; 0x0238704C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x13c - mov sl, r0 - ldr r0, _02387614 ; =0x000007AC - mov r1, #8 - bl MemAlloc - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - str r0, [r1] - bl ov31_023880D8 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - str sl, [r0, #0x69c] - bl ov29_0234EBCC - mov r7, #0 - add r0, sp, #0xb0 - mov r1, #1 - mov r2, r7 - mov r3, r7 - str r7, [sp] - mov r8, r7 - bl ov29_0234EA18 - ldr r2, _0238761C ; =ov31_02387014 - add r0, sp, #0xb0 - mov r1, #0xe - mov r3, r7 - bl ov31_02388114 - ldr r2, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, _02387620 ; =DUNGEON_WINDOW_PARAMS_22 - ldr r3, [r2] - str r0, [r3, #0x7a8] - ldr r0, [r2] - ldr r0, [r0, #0x7a8] - bl ov31_02388444 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r1, sp, #8 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_02388704 - ldr r1, [sp, #0xc] - ldr r0, [sp, #0x10] - add r1, r1, #8 - mov r0, r0, lsl #0x10 - mov r1, r1, lsl #0x10 - mov r0, r0, asr #0x10 - mov r1, r1, asr #0x10 - bl ov31_0238991C - ldr r3, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r1, #0xb - ldr r4, [r3] - mov r2, r7 - str r0, [r4, #0x7a4] - ldr r0, [r3] - ldr r0, [r0, #0x7a4] - bl ov31_023899B8 -_02387124: - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_02388534 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_023886D4 - cmp r0, #1 - moveq r7, #1 - beq _023875D8 - cmp r0, #2 - bne _02387184 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r8, #1 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_023886DC - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r2, [r1] - str r0, [r2, #0x760] - ldr r0, [r1] - ldr sb, [r0, #0x760] - b _023871B0 -_02387184: - cmp r0, #3 - bne _023871B0 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_023886DC - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r2, [r1] - str r0, [r2, #0x760] - ldr r0, [r1] - ldr sb, [r0, #0x760] -_023871B0: - bl ov29_022EBA70 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r1, sp, #0xb0 - ldr r2, [r0] - ldr r0, _02387624 ; =DUNGEON_PTR - ldr r2, [r2, #0x760] - ldr r3, [r0] - add r0, r1, r2, lsl #5 - ldr r1, [r0, #4] - mov r0, #0x1b - add r1, r3, r1, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r4, [r1, #0xa84] -#else - ldr r4, [r1, #0xb28] -#endif - mov r1, #0 - ldr r5, [r4, #0xb4] - bl AddDungeonSubMenuOption - mov r0, #0x19 - mov r1, #0 - bl AddDungeonSubMenuOption - ldrb r0, [r5, #7] - cmp r0, #0 - bne _02387278 - ldr r0, _02387624 ; =DUNGEON_PTR - ldr r1, [r0] - ldrb r0, [r1, #0x75d] - cmp r0, #0 - ldreqb r0, [r1, #0x75e] - cmpeq r0, #0 - bne _0238726C - ldrsh r0, [r5, #0xc] - bl GetActiveTeamMember - ldrsh r1, [r0, #8] - ldr r0, _02387628 ; =0x00005AA5 - cmp r1, r0 - beq _0238726C - ldrb r0, [r5, #0x48] - bl JoinedAtRangeCheck2Veneer - cmp r0, #0 - beq _02387260 - ldr r0, _02387624 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75c] - cmp r0, #0 - beq _0238726C -_02387260: - mov r0, #0x34 - mov r1, #0 - bl AddDungeonSubMenuOption -_0238726C: - mov r0, #0x1c - mov r1, #0 - bl AddDungeonSubMenuOption -_02387278: - mov r0, #0x30 - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0x1a - mov r1, #0 - bl AddDungeonSubMenuOption - ldrb r0, [r5, #7] - cmp r0, #0 - ldreq r0, _02387624 ; =DUNGEON_PTR - ldreq r1, [r0] - ldreqb r0, [r1, #0x75e] - cmpeq r0, #0 - bne _02387320 - ldrb r0, [r1, #0x75c] - cmp r0, #0 - beq _02387320 - ldrb r0, [r1, #0x748] - bl GetLeaderChangeFlag - cmp r0, #0 - beq _02387320 - mov r0, #0x3b - mov r1, #0 - bl AddDungeonSubMenuOption - ldrsh r0, [r5, #0xc] - mov r6, #1 - cmp r0, #4 - movge r6, #0 - bge _023872FC - bl GetActiveTeamMember - ldrsh r0, [r0, #8] - bl ov29_022F9C34 - cmp r0, #0 - movne r6, #0 -_023872FC: - mov r0, r4 - mov r1, #0 - bl CheckVariousStatuses2 - cmp r0, #0 - movne r6, #0 - cmp r6, #0 - bne _02387320 - mov r0, #0x3b - bl DisableDungeonSubMenuOption -_02387320: - mov r0, r5 - bl IsExperienceLocked - cmp r0, #0 - beq _0238735C - mov r0, #0x19 - bl DisableDungeonSubMenuOption - mov r0, #0x3b - bl DisableDungeonSubMenuOption - mov r0, #0x1a - bl DisableDungeonSubMenuOption - mov r0, #0x30 - bl DisableDungeonSubMenuOption - mov r0, #0x34 - bl DisableDungeonSubMenuOption - b _02387380 -_0238735C: - ldrb r0, [r5, #7] - cmp r0, #0 - beq _02387380 - mov r0, r4 - bl ov29_0234FBD4 - cmp r0, #0 - bne _02387380 - mov r0, #0x1a - bl DisableDungeonSubMenuOption -_02387380: - bl ov29_022EB9A0 - cmp r8, #0 - beq _023873C8 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r3, [sl, #0xb4] - ldr r0, [r0] - add r1, sp, #0xb4 - ldr r2, [r0, #0x760] - add r0, r3, #0x4a - ldr r1, [r1, r2, lsl #5] - bl ov29_022EBA94 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r7, #0 - ldr r0, [r0] - add r0, r0, #0x294 - add r0, r0, #0x400 - bl ov29_0234E988 - b _023875D8 -_023873C8: - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - cmp sb, #0 - ldr r0, [r0] - moveq r2, #1 - add r1, r0, #0x188 - movne r2, #0 - add r0, r0, #0x530 - add r1, r1, #0x400 - bl ov31_0238513C - bl ov29_022EBA84 - mov r2, #0 - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - b _02387410 -_023873FC: - ldr r3, [r1] - add r4, r2, #1 - add r3, r3, r2, lsl #3 - mov r2, r4 - str r4, [r3, #0x534] -_02387410: - cmp r2, r0 - blt _023873FC - ldr r4, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r3, _0238762C ; =0x00000A3C - ldr r0, [r4] - mvn r1, #0 - add r0, r0, r2, lsl #3 - add r0, r0, #0x500 - strh r3, [r0, #0x30] - ldr r0, [r4] - mov r5, #0 - add r0, r0, r2, lsl #3 - str r1, [r0, #0x534] - ldr r3, [r4] - mov r0, #0xa - add r3, r3, r2, lsl #3 - add r3, r3, #0x500 - strh r5, [r3, #0x38] - ldr r3, [r4] - add r2, r3, r2, lsl #3 - str r1, [r2, #0x53c] - ldr r1, [r4] - add r1, r1, #0x188 - add r1, r1, #0x400 - str r1, [sp, #0x78] - bl Arm9LoadUnkFieldNa0x2029EC8 - add r4, r0, #1 - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, _02387630 ; =DUNGEON_WINDOW_PARAMS_23 - ldr r3, [r1] - ldr r1, _02387634 ; =0x00000233 - add r2, sp, #0x18 - add r3, r3, #0x530 - str r4, [sp, #0x18] - bl CreateParentMenuFromStringIds - ldr r4, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r6, #0x1b - ldr r1, [r4] - add fp, sp, #4 - strb r0, [r1, #0x694] -_023874B0: - mov r0, r6 - bl AdvanceFrame - mov r0, r5 - mov r1, fp - bl GetPressedButtons - ldr r0, [r4] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x94] - bl IsParentMenuActive - cmp r0, #0 - ldr r0, [r4] - add r0, r0, #0x600 - bne _02387578 - ldrsb r0, [r0, #0x94] - bl sub_0202ABB0 - subs r1, r0, #1 - bmi _0238754C - ldr r0, [r4] - str r1, [r0, #0x760] - ldr r0, [r4] - ldr r0, [r0, #0x760] - bl ov29_022EB804 - cmp r0, #0 - beq _023874B0 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, _02387638 ; =ov29_0237C91C - ldr r0, [r0] - ldr r5, [sl, #0xb4] - ldr r2, [r0, #0x760] - add r0, r5, #0x4a - mov r2, r2, lsl #3 - ldrh r1, [r1, r2] - bl SetMonsterActionFields - add r0, sp, #0xb0 - add r0, r0, sb, lsl #5 - ldr r0, [r0, #4] - mov r4, #0 - strb r0, [r5, #0x4e] - b _02387594 -_0238754C: - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x294 - add r0, r0, #0x400 - bl ov29_0234E988 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_023886F4 - mov r4, #1 - b _02387594 -_02387578: - ldrsb r0, [r0, #0x94] - bl sub_0202AB80 - mov r1, r0 - mov r0, #0xa - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 - b _023874B0 -_02387594: - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x294 - add r0, r0, #0x400 - bl ov29_0234E988 - cmp r4, #1 - beq _02387124 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x95 - add r0, r0, #0x600 - bl ov29_0234E988 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x3a4 - add r0, r0, #0x400 - bl ov31_023899D4 -_023875D8: - cmp r7, #0 - beq _023875F0 - bl GetLeader - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster -_023875F0: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl ov31_02386F2C - mov r0, #0x1b - bl AdvanceFrame - mov r0, r7 - add sp, sp, #0x13c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02387614: .word 0x000007AC -_02387618: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 -_0238761C: .word ov31_02387014 -_02387620: .word DUNGEON_WINDOW_PARAMS_22 -_02387624: .word DUNGEON_PTR -_02387628: .word 0x00005AA5 -#ifdef JAPAN -_0238762C: .word 0x00000877 -#else -_0238762C: .word 0x00000A3C -#endif -_02387630: .word DUNGEON_WINDOW_PARAMS_23 -_02387634: .word 0x00000233 -_02387638: .word ov29_0237C91C - arm_func_end TeamMenu - - arm_func_start ov31_0238763C -ov31_0238763C: ; 0x0238763C - cmp r0, #0 - moveq r0, #0 - bxeq lr - ldr r0, [r0] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end ov31_0238763C - - arm_func_start ov31_02387660 -ov31_02387660: ; 0x02387660 - ldr r1, _02387680 ; =DUNGEON_PTR - ldrb r0, [r0, #4] - ldr r1, [r1] - ldr ip, _02387684 ; =ov31_0238948C - add r0, r1, r0, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - bx ip - .align 2, 0 -_02387680: .word DUNGEON_PTR -_02387684: .word ov31_0238948C - arm_func_end ov31_02387660 - - arm_func_start ov31_02387688 -ov31_02387688: ; 0x02387688 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x78 - ldr r2, _02387788 ; =DUNGEON_PTR - ldrb r0, [r0, #4] - ldr r2, [r2] - mov r4, r1 - add r0, r2, r0, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr sb, [r0, #0xa84] -#else - ldr sb, [r0, #0xb28] -#endif - bl ov29_022EA62C - cmp r4, #0 - beq _023876C4 - mov r0, sb - bl ov31_023889DC - b _0238776C -_023876C4: - ldr r0, [sb, #0xb4] - bl IsExperienceLocked - cmp r0, #0 - movne r4, #1 - bne _023876E4 - cmp r4, #0 - movne r4, #2 - moveq r4, #0 -_023876E4: - add r0, sp, #0 - mov r1, sb - bl CreateMonsterSummaryFromMonster - mov r2, #0 - add r0, sp, #0 - mov r1, r4 - strh r2, [sp, #0x40] - strh r2, [sp, #0x56] - bl sub_0203F150 - mov r7, #0x62 - mov r6, r7 - mov r5, r7 - mov r4, #1 - mov fp, #0x1c - mov r8, #0 -_02387720: - mov sl, r8 - bl ov29_022EA62C -_02387728: - mov r0, r7 - bl AdvanceFrame - bl sub_0203F398 - cmp r0, #2 - beq _0238775C - cmp r0, #1 - bne _02387728 - bl sub_0203F990 - mov r0, r6 - bl AdvanceFrame - mov r0, r5 - bl AdvanceFrame - mov sl, r4 -_0238775C: - mov r0, fp - bl AdvanceFrame - cmp sl, #0 - beq _02387720 -_0238776C: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, sb - bl ov29_023021F0 - add sp, sp, #0x78 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02387788: .word DUNGEON_PTR - arm_func_end ov31_02387688 - - arm_func_start ov31_0238778C -ov31_0238778C: ; 0x0238778C - stmdb sp!, {r4, lr} - ldr r1, _023877C0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r4, r0 - ldr r0, [r1] - add r0, r0, #0x600 - ldrh r0, [r0, #0x92] - bl StringFromId - mov r1, #2 - mov r3, r0 - mov r0, r4 - mov r2, r1 - bl DrawTextInWindow - ldmia sp!, {r4, pc} - .align 2, 0 -_023877C0: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 - arm_func_end ov31_0238778C - - arm_func_start ov31_023877C4 -ov31_023877C4: ; 0x023877C4 - ldr r2, _023877E4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr ip, _023877E8 ; =DrawTextInWindow - ldr r3, [r2] - mov r1, #2 - add r3, r3, #0x12 - mov r2, #0x10 - add r3, r3, #0x600 - bx ip - .align 2, 0 -_023877E4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 -_023877E8: .word DrawTextInWindow - arm_func_end ov31_023877C4 - - arm_func_start ov31_023877EC -ov31_023877EC: ; 0x023877EC -#ifdef JAPAN -#define OV31_023877EC_OFFSET -8 -#define OV31_023877EC_OFFSET_2 -4 -#define OV31_023877EC_OFFSET_3 -0xA4 -#else -#define OV31_023877EC_OFFSET 0 -#define OV31_023877EC_OFFSET_2 0 -#define OV31_023877EC_OFFSET_3 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2a4 + OV31_023877EC_OFFSET - mov r4, #0 - movs sl, r0 -#ifndef JAPAN - str r3, [sp, #8] -#endif - subne r0, r4, #1 - strne r0, [sl] - mov sb, r1 - ldr r0, _02388080 ; =0x000007AC - mov r1, #8 - mov fp, r2 - bl MemAlloc - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - str r0, [r1] - bl ov31_023880D8 - mov r7, #0 - mov r6, r7 -_02387830: - ldr r0, _02388088 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 - ldr r5, [r0, #0xb28 + OV31_023877EC_OFFSET_3] - mov r0, r5 - bl ov31_0238763C - cmp r0, #0 - beq _0238789C - cmp fp, #0 - beq _0238786C - mov r0, r5 - ldr r8, [r5, #0xb4] - bl ov29_02347100 -#ifdef JAPAN - strb r0, [r8, #0x15d] -#else - strb r0, [r8, #0x161] -#endif -_0238786C: - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r7, lsl #5 - str r6, [r0, #4] - ldr r0, [r5, #0xb4] -#ifdef JAPAN - ldrb r0, [r0, #0x15d] -#else - ldrb r0, [r0, #0x161] -#endif - cmp r0, #0 - movne r1, #0 - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r7 - moveq r1, #3 - strb r1, [r0, #0x84] - add r7, r7, #1 -_0238789C: - add r6, r6, #1 - cmp r6, #4 - blt _02387830 - mov r6, r7 - mvn r5, #0 - add r3, sp, #0x218 + OV31_023877EC_OFFSET - mov r1, #0 - b _023878D0 -_023878BC: - add r2, r3, r6, lsl #5 - add r0, r3, r6 - str r5, [r2, #4] - strb r1, [r0, #0x84] - add r6, r6, #1 -_023878D0: - cmp r6, #4 - blt _023878BC - mov r0, #0xb - bl Arm9LoadUnkFieldNa0x2029EC8 - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r2, #0 - ldr r3, [r1] - str r0, [r3, #0x760] - ldr r0, [r1] - str r7, [r0, #0x764] - ldr r0, [r1] - str r7, [r0, #0x768] - ldr r0, [r1] - str r2, [r0, #0x76c] - ldr r0, [r1] - str r2, [r0, #0x770] - ldr r0, [r1] - str r2, [r0, #0x754] - ldr r0, [r1] - str r2, [r0, #0x758] - bl ov29_022EA62C - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x95 - add r0, r0, #0x600 - bl ov29_0234E988 - mov r5, #0 - add r0, sp, #0x68 + OV31_023877EC_OFFSET - mov r1, r5 - mov r2, #0x80 - bl memset - mov r8, r5 - ldr fp, _0238808C ; =0x000003E7 - b _02387B80 -_02387958: - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r8, lsl #5 - ldr r1, [r0, #4] - cmp r1, #0 - blt _02387B7C - ldr r0, _02388088 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r1, lsl #2 - add r0, r0, #0x12000 - ldr r6, [r0, #0xb28 + OV31_023877EC_OFFSET_3] - mov r0, r6 - bl ov31_0238763C - cmp r0, #0 - beq _02387B7C - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r8 - ldrb r0, [r0, #0x84] - ldr r6, [r6, #0xb4] - cmp r0, #0 - movne r0, #0x57 - moveq r0, #0x44 - and r2, r0, #0xff - add r0, sp, #0x68 + OV31_023877EC_OFFSET - mov r1, r6 - bl ov29_023002F0 - add r0, sp, #0x68 + OV31_023877EC_OFFSET - str r0, [sp, #0x50 + OV31_023877EC_OFFSET] - ldrsh r0, [r6, #0xc] - bl GetActiveTeamMember - ldrsh r0, [r0, #8] - bl ov29_022F9C34 - cmp r0, #0 - ldrsh r1, [r6, #0x12] - ldrsh r0, [r6, #0x16] - beq _02387A84 - add r1, r1, r0 - cmp r1, fp - movgt r3, fp - movle r3, r1 - mov r2, r3, asr #1 - ldrsh r0, [r6, #0x10] - add r2, r3, r2, lsr #30 - cmp r0, r2, asr #2 - bgt _02387A18 - ldr r1, _02388090 ; =ov31_0238A044 - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bl strcpy - b _02387B20 -_02387A18: - cmp r1, fp - movgt r3, fp - movle r3, r1 - mov r2, r3, asr #1 - add r2, r3, r2, lsr #30 - mov r2, r2, asr #2 - cmp r0, r2, lsl #1 - bgt _02387A48 - ldr r1, _02388094 ; =ov31_0238A04C - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bl strcpy - b _02387B20 -_02387A48: - cmp r1, fp - movgt r1, fp - mov r2, r1, asr #1 - add r1, r1, r2, lsr #30 - mov r1, r1, asr #2 - add r1, r1, r1, lsl #1 - cmp r0, r1 - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bgt _02387A78 - ldr r1, _02388098 ; =ov31_0238A054 - bl strcpy - b _02387B20 -_02387A78: - ldr r1, _0238809C ; =ov31_0238A05C - bl strcpy - b _02387B20 -_02387A84: - add r1, r1, r0 - cmp r1, fp - movgt r3, fp - movle r3, r1 - mov r2, r3, asr #1 - ldrsh r0, [r6, #0x10] - add r2, r3, r2, lsr #30 - cmp r0, r2, asr #2 - bgt _02387AB8 - ldr r1, _023880A0 ; =ov31_0238A064 - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bl strcpy - b _02387B20 -_02387AB8: - cmp r1, fp - movgt r3, fp - movle r3, r1 - mov r2, r3, asr #1 - add r2, r3, r2, lsr #30 - mov r2, r2, asr #2 - cmp r0, r2, lsl #1 - bgt _02387AE8 - ldr r1, _023880A4 ; =ov31_0238A06C - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bl strcpy - b _02387B20 -_02387AE8: - cmp r1, fp - movgt r1, fp - mov r2, r1, asr #1 - add r1, r1, r2, lsr #30 - mov r1, r1, asr #2 - add r1, r1, r1, lsl #1 - cmp r0, r1 - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bgt _02387B18 - ldr r1, _023880A8 ; =ov31_0238A074 - bl strcpy - b _02387B20 -_02387B18: - ldr r1, _023880AC ; =ov31_0238A07C - bl strcpy -_02387B20: - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - str r0, [sp, #0x54 + OV31_023877EC_OFFSET] - add r0, sp, #0x18 + OV31_023877EC_OFFSET - str r0, [sp] - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r2, _023880B0 ; =ov31_0238A084 - ldr r0, [r0] - mov r1, #0x100 - add r0, r0, #0x30 - add r0, r0, r5, lsl #8 - mov r3, #0 - bl PreprocessString - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r1, r5, lsl #3 - ldr r2, [r0] - add r0, r2, #0x30 - add r0, r0, r5, lsl #8 - str r0, [r2, r5, lsl #3] - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r5, r5, #1 - ldr r0, [r0] - add r0, r0, r1 - str r5, [r0, #4] -_02387B7C: - add r8, r8, #1 -_02387B80: - cmp r8, r7 - blt _02387958 - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r3, #0 - ldr r1, [r0] - sub r2, r3, #1 - str r3, [r1, r5, lsl #3] - ldr r1, [r0] - ldr r0, _02388088 ; =DUNGEON_PTR - add r1, r1, r5, lsl #3 - str r2, [r1, #4] - ldr r0, [r0] - ldrb r5, [r0, #0x75b] - cmp r5, #0 - ldrne r1, _023880B4 ; =0x00000A3A - movne r0, #0x10 - strne r0, [sp, #0xf4 + OV31_023877EC_OFFSET] - mov r0, #0xb - strneh r1, [sp, #0xf0 + OV31_023877EC_OFFSET] - bl Arm9LoadUnkFieldNa0x2029EC8 - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - cmp r5, #0 - ldr r3, [r1] - add r2, sp, #0x29c + OV31_023877EC_OFFSET - str r0, [r3, #0x760] - ldr r0, [r1] - movne r1, #0x800 - ldr r0, [r0, #0x760] - moveq r1, #0 - add r0, r0, #1 - str r0, [sp, #0xe8 + OV31_023877EC_OFFSET] - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - orr r1, r1, #0x33 - ldr r3, [r0] - str r2, [sp, #0x148 + OV31_023877EC_OFFSET] - ldr r0, _023880B8 ; =DUNGEON_WINDOW_PARAMS_21 - add r2, sp, #0xe8 + OV31_023877EC_OFFSET - orr r1, r1, #0x1200 - bl CreateParentMenu - ldr r2, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, _023880BC ; =ov31_0238778C - ldr r2, [r2] - strb r0, [r2, #0x695] - ldr r0, _023880C0 ; =DUNGEON_WINDOW_PARAMS_24 - bl CreateTextBox - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r3, _023880C4 ; =0x00000A36 - ldr r2, [r1] - mov r5, #0x10 - strb r0, [r2, #0x696] - ldr r2, [r1] - str r5, [sp, #0x18c + OV31_023877EC_OFFSET] - add r0, r2, #0x92 - add r1, r0, #0x500 - add r0, sp, #0x118 + OV31_023877EC_OFFSET - strh r3, [r0, #0x70] - str r1, [sp, #0x1c8 + OV31_023877EC_OFFSET] - cmp sb, #3 - bne _02387CA8 - add r1, r3, #3 - add r0, r2, #0x600 - strh r1, [r0, #0x92] - mov r5, #0 - str r5, [sp] - ldr r0, _023880C8 ; =DUNGEON_WINDOW_PARAMS_20 - ldr r3, _023880CC ; =ov31_023877C4 - add r2, sp, #0x180 + OV31_023877EC_OFFSET - mov r1, #0x800 - str r5, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, [r1] - strb r0, [r1, #0x697] - b _02387CF4 -_02387CA8: - cmp sb, #2 - addne r1, r3, #3 - addne r0, r2, #0x600 - strneh r1, [r0, #0x92] - bne _02387CF4 - add r1, r3, #2 - add r0, r2, #0x600 - strh r1, [r0, #0x92] - mov r5, #0 - str r5, [sp] - ldr r0, _023880C8 ; =DUNGEON_WINDOW_PARAMS_20 - ldr r3, _023880CC ; =ov31_023877C4 - add r2, sp, #0x180 + OV31_023877EC_OFFSET - mov r1, #0x800 - str r5, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, [r1] - strb r0, [r1, #0x697] -_02387CF4: - sub r0, sb, #2 -#ifdef JAPAN - str r0, [sp, #0xc] - ldr r0, _023880D0 ; =0x00000872 - ldr r5, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r8, #0x3d8 - rsb fp, r0, #0x870 -#else - mvn r7, #0x3d8 - str r0, [sp, #0x10] - add r0, r7, #0xe10 - ldr r5, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - str r0, [sp, #0x14] - mov fp, r7, asr #9 -#endif -_02387D10: - ldr r0, [r5] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x95] - bl sub_0202AB80 - ldr r1, [r5] - str r0, [r1, #0x760] - ldr r1, [r5] - mov r0, #0xb - ldr r1, [r1, #0x760] - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 - ldr r0, [r5] - ldr r1, [r0, #0x760] - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r1, lsl #5 - ldr r6, [r0, #4] - cmp r6, #0 - blt _02387EC0 - ldr r0, _02388088 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r7, [r0, #0xa84] - mov r0, r7 - bl ov31_0238763C - cmp r0, #0 - cmpne r8, r6 - beq _02387E98 - cmp sb, #1 - bne _02387DCC - mov r0, r7 -#else - ldr r8, [r0, #0xb28] - mov r0, r8 - bl ov31_0238763C - cmp r0, #0 - cmpne r7, r6 - beq _02387E98 - cmp sb, #1 - bne _02387DCC - mov r0, r8 -#endif - bl sub_0203F9CC - ldr r0, [r5] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x98] - cmp r0, fp - bne _02387DC0 - mov r1, #0 - mov r0, #7 - mov r2, r1 - bl sub_0204018C - ldr r1, [r5] - strb r0, [r1, #0x698] - b _02387DC4 -_02387DC0: - bl sub_02041178 -_02387DC4: - bl sub_020407EC - b _02387E98 -_02387DCC: - ldr r0, [sp, #0x10 + OV31_023877EC_OFFSET_2] - cmp r0, #1 - bhi _02387E98 - ldr r1, [r5] - add r0, r1, #0x600 - ldrsb r0, [r0, #0x97] - str r0, [sp, #0xc + OV31_023877EC_OFFSET_2] - cmp r0, fp - beq _02387E98 - add r0, r1, #0x92 -#ifdef JAPAN - ldr r8, [r7, #0xb4] - add r0, r0, #0x500 - mov r1, r7 - mov r2, #0 - bl ov29_022E2A78 - ldrb r0, [r8, #0xbc] - cmp r0, #7 - beq _02387E24 - mov r0, r8 -#else - ldr r7, [r8, #0xb4] - add r0, r0, #0x500 - mov r1, r8 - mov r2, #0 - bl ov29_022E2A78 - ldrb r0, [r7, #0xbc] - cmp r0, #7 - beq _02387E24 - mov r0, r7 -#endif - bl IsExperienceLocked - cmp r0, #0 - beq _02387E3C -_02387E24: -#ifdef JAPAN - ldr r0, _023880D0 ; =0x00000872 - ldr r2, [r5] - add r1, r0, #6 - add r0, r2, #0x12 -#else - ldr r0, [r5] - ldr r1, _023880D0 ; =0x00000A3D - add r0, r0, #0x12 -#endif - add r0, r0, #0x600 - bl GetStringFromFileVeneer - b _02387E90 -_02387E3C: -#ifdef JAPAN - ldrb r0, [r8, #0x62] -#else - ldrb r0, [r7, #0x62] -#endif - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - bne _02387E6C - ldr r0, [r5] -#ifdef JAPAN - ldr r1, _023880D0 ; =0x00000872 -#else - ldr r1, [sp, #0x14] -#endif - add r0, r0, #0x12 - add r0, r0, #0x600 - bl GetStringFromFileVeneer - b _02387E90 -_02387E6C: - mov r0, #1 - str r0, [sp] - ldr r0, [r5] - ldr r2, _023880D4 ; =OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 - add r0, r0, #0x12 -#ifdef JAPAN - add r1, r8, #0x62 -#else - add r1, r7, #0x62 -#endif - add r0, r0, #0x600 - mov r3, #1 - bl sub_0200D310 -_02387E90: - ldr r0, [sp, #0xc + OV31_023877EC_OFFSET_2] - bl SetAdvancedTextBoxField0x1C2 -_02387E98: -#ifdef JAPAN - mov r0, r7 - mov r1, #0 - mov r2, #1 - mov r8, r6 - bl TryPointCameraToMonster - mov r2, #1 - add r0, r7, #4 -#else - mov r0, r8 - mov r1, #0 - mov r2, #1 - mov r7, r6 - bl TryPointCameraToMonster - mov r2, #1 - add r0, r8, #4 -#endif - mov r1, #0 - mov r3, r2 - bl DrawTileGrid -_02387EC0: - mov r0, #0x1b - bl AdvanceFrame - ldr r0, [r5] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x95] - bl IsParentMenuActive - cmp r0, #0 - bne _02387D10 - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x95] - bl sub_0202ABB0 - subs r3, r0, #1 - bmi _02387F24 - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r1, sp, #0x29c + OV31_023877EC_OFFSET - ldr r2, [r0] - str r3, [r2, #0x760] - ldr r0, [r0] - ldr r0, [r0, #0x760] - ldrb r0, [r1, r0] - cmp r0, #0 - movne r4, #1 - b _02387F28 -_02387F24: - mov r4, #1 -_02387F28: - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x97] - cmp r0, r1 - beq _02387F58 - bl CloseAdvancedTextBox - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x697] -_02387F58: - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x98] - cmp r0, r1 - beq _02387F8C - bl CloseAdvancedTextBox - bl sub_020407C0 - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x698] -_02387F8C: - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x96] - bl CloseTextBox - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r2, #1 - ldr r1, [r0] - mov r0, #0x1b - strb r2, [r1, #0x696] - bl AdvanceFrame - cmp sb, #3 - bne _02387FEC - cmp r4, #0 - beq _0238800C - bl HideTileGrid -#ifndef JAPAN - ldr r0, [sp, #8] - cmp r0, #0 - beq _0238800C -#endif - bl GetLeader - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - b _0238800C -_02387FEC: - bl HideTileGrid -#ifndef JAPAN - ldr r0, [sp, #8] - cmp r0, #0 - beq _0238800C -#endif - bl GetLeader - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster -_0238800C: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #4 - mov r1, #0x3e - bl ov29_022EA370 - cmp r4, #0 - beq _02388038 - bl ov31_02386F2C - mov r0, #0 - b _02388078 -_02388038: - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r1, sp, #0x21c + OV31_023877EC_OFFSET - ldr r0, [r0] - cmp sl, #0 - ldr r0, [r0, #0x760] - ldr r4, [r1, r0, lsl #5] - strne r4, [sl] - bl ov31_02386F2C - cmp r4, #0 - movlt r0, #0 - blt _02388078 - ldr r0, _02388088 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + OV31_023877EC_OFFSET_3] -_02388078: - add sp, sp, #0x2a4 + OV31_023877EC_OFFSET - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define OV31_023877EC_DATA_OFFSET -0x1C5 -#else -#define OV31_023877EC_DATA_OFFSET 0 -#endif -_02388080: .word 0x000007AC -_02388084: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 -_02388088: .word DUNGEON_PTR -_0238808C: .word 0x000003E7 -_02388090: .word ov31_0238A044 -_02388094: .word ov31_0238A04C -_02388098: .word ov31_0238A054 -_0238809C: .word ov31_0238A05C -_023880A0: .word ov31_0238A064 -_023880A4: .word ov31_0238A06C -_023880A8: .word ov31_0238A074 -_023880AC: .word ov31_0238A07C -_023880B0: .word ov31_0238A084 -_023880B4: .word 0x00000A3A + OV31_023877EC_DATA_OFFSET -_023880B8: .word DUNGEON_WINDOW_PARAMS_21 -_023880BC: .word ov31_0238778C -_023880C0: .word DUNGEON_WINDOW_PARAMS_24 -_023880C4: .word 0x00000A36 + OV31_023877EC_DATA_OFFSET -_023880C8: .word DUNGEON_WINDOW_PARAMS_20 -_023880CC: .word ov31_023877C4 -#ifdef JAPAN -_023880D0: .word 0x00000872 -#else -_023880D0: .word 0x00000A3D -#endif -_023880D4: .word OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 - arm_func_end ov31_023877EC - - arm_func_start ov31_023880D8 -ov31_023880D8: ; 0x023880D8 - mov r2, #0 - strb r2, [r0, #0x592] - strb r2, [r0, #0x612] - sub r1, r2, #2 - strb r1, [r0, #0x695] - strb r1, [r0, #0x694] - strb r1, [r0, #0x696] - strb r1, [r0, #0x697] - strb r1, [r0, #0x698] - str r2, [r0, #0x7a4] - str r2, [r0, #0x7a8] - str r2, [r0, #0x76c] - str r2, [r0, #0x770] - str r2, [r0, #0x760] - bx lr - arm_func_end ov31_023880D8 - - arm_func_start ov31_02388114 -ov31_02388114: ; 0x02388114 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - ldr r0, _02388154 ; =0x000006D4 - mov r4, r2 - mov r1, #8 - mov r5, r3 - bl MemAlloc - mov r1, r7 - mov r2, r6 - mov r3, r4 - mov r4, r0 - str r5, [sp] - bl ov31_02388158 - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02388154: .word 0x000006D4 - arm_func_end ov31_02388114 - - arm_func_start ov31_02388158 -ov31_02388158: ; 0x02388158 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xdc - mov sl, r0 - mvn r0, #1 - strb r0, [sl] - ldr r4, [sp, #0x100] - str r3, [sl, #0x6c4] - str r4, [sl, #0x6c8] - mov r0, #0 - str r0, [sl, #0x688] - str r0, [sl, #0x68c] - str r0, [sl, #0x67c] - mov sb, r1 - str r2, [sl, #0x6c0] - sub r0, r0, #1 - mov r7, sb - str r0, [sl, #0x6b8] - add r6, sl, #4 - mov r4, #8 -_023881A4: - ldmia r7!, {r0, r1, r2, r3} - stmia r6!, {r0, r1, r2, r3} - subs r4, r4, #1 - bne _023881A4 - ldmia r7, {r0, r1, r2} - stmia r6, {r0, r1, r2} - add r0, sp, #0xc - mov r1, #0x80 - bl MemZero - mov r4, #0 - add r0, sb, #0x14 - mov r7, r4 - str r0, [sp, #8] - add fp, sl, #0xc0 - b _023883F4 -_023881E0: - ldr r0, [sb] - cmp r0, #1 - bne _023882A0 - add r0, sb, r7, lsl #5 - ldr r1, [r0, #0x20] - cmp r1, #0 - beq _023883F0 - moveq r0, #0 - beq _02388218 - ldr r0, [r1] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_02388218: - cmp r0, #0 - beq _023883F0 - add r0, sb, r7 - ldrb r0, [r0, #0x84] - ldr r6, [r1, #0xb4] - add r1, sb, r7, lsl #5 - cmp r0, #0 - movne r0, #0x57 - moveq r0, #0x44 - and r2, r0, #0xff - ldrb r0, [r1, #0x14] - cmp r0, #0 - add r0, sp, #0xc - beq _02388264 - ldrb r2, [r1, #0x1e] - ldr r1, [sp, #8] - add r1, r1, r7, lsl #5 - bl sub_02054F44 - b _0238826C -_02388264: - mov r1, r6 - bl ov29_023002F0 -_0238826C: - ldrsh r1, [r6, #0x12] - ldrsh r0, [r6, #0x16] - ldrsh r5, [r6, #0x10] - add r8, r1, r0 - ldr r0, _0238841C ; =0x000003E7 - cmp r8, r0 - movgt r8, r0 - ldrsh r0, [r6, #0xc] - bl GetActiveTeamMember - ldrsh r0, [r0, #8] - bl ov29_022F9C34 - str r0, [sp, #4] - b _023882E8 -_023882A0: - cmp r0, #0 - bne _023882E8 - add r0, sb, r7, lsl #5 - ldr r6, [r0, #0x20] - ldrb r0, [r6] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _023883F0 - ldrsh r5, [r6, #0xe] - ldrsh r8, [r6, #0x10] - ldrsh r0, [r6, #8] - bl sub_02056228 - str r0, [sp, #4] - mov r1, r6 - add r0, sp, #0xc - bl sub_020585B4 -_023882E8: - add r0, sp, #0xc - str r0, [sp, #0xc4] - ldr r0, [sp, #4] - cmp r0, #0 - mov r0, r8, asr #1 - add r0, r8, r0, lsr #30 - beq _02388360 - cmp r5, r0, asr #2 - mov r0, r0, asr #2 - bgt _02388320 - ldr r1, _02388420 ; =ov31_0238A0A8 - add r0, sp, #0x4c - bl strcpy - b _023883B8 -_02388320: - cmp r5, r0, lsl #1 - bgt _02388338 - ldr r1, _02388424 ; =ov31_0238A0B0 - add r0, sp, #0x4c - bl strcpy - b _023883B8 -_02388338: - add r0, r0, r0, lsl #1 - cmp r5, r0 - add r0, sp, #0x4c - bgt _02388354 - ldr r1, _02388428 ; =ov31_0238A0B8 - bl strcpy - b _023883B8 -_02388354: - ldr r1, _0238842C ; =ov31_0238A0C0 - bl strcpy - b _023883B8 -_02388360: - cmp r5, r0, asr #2 - mov r0, r0, asr #2 - bgt _0238837C - ldr r1, _02388430 ; =ov31_0238A0C8 - add r0, sp, #0x4c - bl strcpy - b _023883B8 -_0238837C: - cmp r5, r0, lsl #1 - bgt _02388394 - ldr r1, _02388434 ; =ov31_0238A0D0 - add r0, sp, #0x4c - bl strcpy - b _023883B8 -_02388394: - add r0, r0, r0, lsl #1 - cmp r5, r0 - add r0, sp, #0x4c - bgt _023883B0 - ldr r1, _02388438 ; =ov31_0238A0D8 - bl strcpy - b _023883B8 -_023883B0: - ldr r1, _0238843C ; =ov31_0238A0E0 - bl strcpy -_023883B8: - add r0, sp, #0x4c - str r0, [sp, #0xc8] - add r0, sp, #0x8c - str r0, [sp] - ldr r2, _02388440 ; =ov31_0238A0E8 - add r0, fp, r4, lsl #8 - mov r1, #0x100 - mov r3, #0 - bl PreprocessString - add r1, fp, r4, lsl #8 - add r0, sl, r4, lsl #3 - str r1, [r0, #0x90] - add r4, r4, #1 - str r4, [r0, #0x94] -_023883F0: - add r7, r7, #1 -_023883F4: - ldr r0, [sb, #0x88] - cmp r7, r0 - blt _023881E0 - mov r0, #0 - add r1, sl, r4, lsl #3 - str r0, [r1, #0x90] - sub r0, r0, #1 - str r0, [r1, #0x94] - add sp, sp, #0xdc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0238841C: .word 0x000003E7 -_02388420: .word ov31_0238A0A8 -_02388424: .word ov31_0238A0B0 -_02388428: .word ov31_0238A0B8 -_0238842C: .word ov31_0238A0C0 -_02388430: .word ov31_0238A0C8 -_02388434: .word ov31_0238A0D0 -_02388438: .word ov31_0238A0D8 -_0238843C: .word ov31_0238A0E0 -_02388440: .word ov31_0238A0E8 - arm_func_end ov31_02388158 - - arm_func_start ov31_02388444 -ov31_02388444: ; 0x02388444 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x98 - mov r6, r0 - mov r5, r1 - bl ov29_0234E988 - mov r0, #0xb - bl Arm9LoadUnkFieldNa0x2029EC8 - str r0, [r6, #0x67c] - ldr r1, [r6, #0x8c] - mov r0, #0 - str r1, [r6, #0x680] - ldr r1, [r6, #0x8c] - str r1, [r6, #0x684] - str r0, [r6, #0x688] - str r0, [r6, #0x68c] - str r0, [r6, #0x670] - str r0, [r6, #0x674] - bl ov29_022EA62C - ldr r0, _02388528 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r4, [r0, #0x75b] - cmp r4, #0 - ldrne r1, _0238852C ; =0x00000A3A - movne r0, #0x10 - strne r0, [sp, #0xc] - strneh r1, [sp, #8] - mov r0, #0xb - bl Arm9LoadUnkFieldNa0x2029EC8 - str r0, [r6, #0x67c] - add r1, r0, #1 - add r0, r6, #0x88 - str r1, [sp] - str r0, [sp, #0x60] - ldr r0, [r6, #0x6c0] - add r2, sp, #0 - tst r0, #2 - beq _023884FC - cmp r4, #0 - movne r3, #0x800 - ldr r1, _02388530 ; =0x00401233 - moveq r3, #0 - orr r1, r3, r1 - mov r0, r5 - add r3, r6, #0x90 - bl CreateParentMenuWrapper - b _0238851C -_023884FC: - cmp r4, #0 - movne r0, #0x800 - moveq r0, #0 - orr r1, r0, #0x33 - mov r0, r5 - orr r1, r1, #0x1200 - add r3, r6, #0x90 - bl CreateParentMenu -_0238851C: - strb r0, [r6] - add sp, sp, #0x98 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02388528: .word DUNGEON_PTR -#ifdef JAPAN -_0238852C: .word 0x00000875 -#else -_0238852C: .word 0x00000A3A -#endif -_02388530: .word 0x00401233 - arm_func_end ov31_02388444 - - arm_func_start ov31_02388534 -ov31_02388534: ; 0x02388534 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - mov r0, #0 - str r0, [sl, #0x6cc] - add r4, sl, #0x2cc - str r0, [r4, #0x404] - add sb, sl, #4 - mov r5, #2 - mov r6, #0xb - mov fp, #0x1b - mov r8, r0 - add r7, sp, #0 -_02388564: - mov r0, r8 - mov r1, r7 - bl GetPressedButtons - ldrsb r0, [sl] - bl sub_0202AB80 - str r0, [sl, #0x67c] - ldr r1, [sl, #0x6b8] - cmp r1, r0 - beq _023885DC - str r0, [sl, #0x6b8] - ldr r1, [sb] - cmp r1, #1 - bne _023885B8 - add r0, sb, r0, lsl #5 - ldr r0, [r0, #0x20] - cmp r0, #0 - ldrne r1, [sl, #0x6c4] - cmpne r1, #0 - beq _023885DC - blx r1 - b _023885DC -_023885B8: - cmp r1, #0 - bne _023885DC - add r0, sb, r0, lsl #5 - ldr r0, [r0, #0x20] - cmp r0, #0 - ldrne r1, [sl, #0x6c4] - cmpne r1, #0 - beq _023885DC - blx r1 -_023885DC: - ldr r1, [sl, #0x67c] - mov r0, r6 - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 - ldr r0, [sl, #0x6c0] - tst r0, #4 - beq _02388644 - ldrh r0, [sp] - tst r0, #8 - beq _02388644 - ldr r0, [sl, #0x67c] - add r0, sb, r0 - ldrb r0, [r0, #0x84] - cmp r0, #0 - bne _02388638 - add r0, sl, #0x5c0 - mov r1, #0 - bl PlayWindowInputSound - mov r0, #2 - str r0, [r4, #0x400] - ldr r0, [sl, #0x6b8] - str r0, [r4, #0x404] - b _023886BC -_02388638: - mov r1, r5 - add r0, sl, #0x5c0 - bl PlayWindowInputSound -_02388644: - ldrsb r0, [sl] - bl IsParentMenuActive - cmp r0, #0 - bne _023886A8 - ldrsb r0, [sl] - bl sub_0202ABB0 - subs r0, r0, #1 - bmi _0238869C - ldrsb r0, [sl] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [sl, #0x67c] - add r0, sb, r0 - ldrb r0, [r0, #0x84] - cmp r0, #0 - moveq r0, #3 - streq r0, [r4, #0x400] - ldreq r0, [sl, #0x67c] - streq r0, [r4, #0x404] - movne r0, #1 - strne r0, [r4, #0x400] - b _023886BC -_0238869C: - mov r0, #1 - str r0, [r4, #0x400] - b _023886BC -_023886A8: - mov r0, sl - bl ov31_02388744 - mov r0, fp - bl AdvanceFrame - b _02388564 -_023886BC: - mov r0, sl - bl ov31_02388744 - mov r0, #0x1b - bl AdvanceFrame - bl HideTileGrid - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end ov31_02388534 - - arm_func_start ov31_023886D4 -ov31_023886D4: ; 0x023886D4 - ldr r0, [r0, #0x6cc] - bx lr - arm_func_end ov31_023886D4 - - arm_func_start ov31_023886DC -ov31_023886DC: ; 0x023886DC - ldr r1, [r0, #0x6cc] - sub r1, r1, #2 - cmp r1, #1 - ldrls r0, [r0, #0x6d0] - mvnhi r0, #0 - bx lr - arm_func_end ov31_023886DC - - arm_func_start ov31_023886F4 -ov31_023886F4: ; 0x023886F4 - ldr ip, _02388700 ; =ResumeParentMenu - ldrsb r0, [r0] - bx ip - .align 2, 0 -_02388700: .word ResumeParentMenu - arm_func_end ov31_023886F4 - - arm_func_start ov31_02388704 -ov31_02388704: ; 0x02388704 - ldr ip, _02388710 ; =GetWindowRectangle - ldrsb r0, [r0] - bx ip - .align 2, 0 -_02388710: .word GetWindowRectangle - arm_func_end ov31_02388704 - - arm_func_start ov31_02388714 -ov31_02388714: ; 0x02388714 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r4, [r5] - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, r4 - bl ov29_0234E988 - mov r0, r4 - bl MemFree - mov r0, #0 - str r0, [r5] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov31_02388714 - - arm_func_start ov31_02388744 -ov31_02388744: ; 0x02388744 - stmdb sp!, {r4, lr} - ldr r1, [r0, #0x6c0] - tst r1, #8 - ldrne r1, [r0, #0x67c] - addne r0, r0, r1, lsl #5 - ldrne r4, [r0, #0x24] - cmpne r4, #0 - ldmeqia sp!, {r4, pc} - mov r0, r4 - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - mov r2, #1 - mov r3, r2 - add r0, r4, #4 - mov r1, #0 - bl DrawTileGrid - ldmia sp!, {r4, pc} - arm_func_end ov31_02388744 - - arm_func_start RestMenu -RestMenu: ; 0x0238878C - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x9c - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r0, [r0] - cmp r0, #0 - bne _023887CC - mov r0, #0x10 - mov r1, #8 - bl MemAlloc - ldr r1, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r2, #0 - str r0, [r1] - str r2, [r0] - ldr r0, [r1] - sub r1, r2, #2 - strb r1, [r0, #4] -_023887CC: - mov r3, #0 - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r2, r3 -_023887D8: - ldr r1, [r0] - add r1, r1, r3 - add r3, r3, #1 - strb r2, [r1, #0xc] - cmp r3, #2 - blt _023887D8 - bl ov29_022E08F4 - cmp r0, #0 - ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - moveq r1, #3 - ldreq r0, [r0] - ldr ip, _023889BC ; =0x000008C2 - streqb r1, [r0, #0xc] - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r5, #0x10 - ldr r1, [r0] - ldr r0, _023889C0 ; =DUNGEON_WINDOW_PARAMS_25 - add r4, r1, #0xc - ldr r1, _023889C4 ; =0x00001A13 - ldr r3, _023889C8 ; =DUNGEON_SUBMENU_ITEMS_5 - add r2, sp, #4 - strh ip, [sp, #0xc] - str r5, [sp, #0x10] - str r4, [sp, #0x64] - bl CreateParentMenuFromStringIds - ldr r4, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r5, #0x62 - ldr r1, [r4] - strb r0, [r1, #4] -_0238884C: - mov r0, r5 - bl AdvanceFrame - ldr r0, [r4] - ldrsb r0, [r0, #4] - bl IsParentMenuActive - cmp r0, #0 - bne _0238884C - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r0, [r0] - ldrsb r0, [r0, #4] - bl sub_0202ABB0 - ldr r1, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r1, [r1] - str r0, [r1, #8] - mov r0, #0x62 - bl AdvanceFrame - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r0, [r0] - ldrsb r0, [r0, #4] - bl CloseParentMenu - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r1, [r0] - ldr r0, [r1, #8] - cmp r0, #1 - beq _023888BC - cmp r0, #2 - beq _02388908 - b _0238897C -_023888BC: - mov r2, #1 - ldr r1, _023889CC ; =0x000008C5 - mov r3, r2 - mov r0, #0 - str r2, [sp] - bl YesNoMenu - cmp r0, #1 - movne r0, #1 - bne _023888F0 - bl GetLeaderAction - mov r1, #0x2b - bl SetMonsterActionFields - mov r0, #0 -_023888F0: - cmp r0, #0 - ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mvneq r1, #0 - ldreq r0, [r0] - streq r1, [r0, #8] - b _02388984 -_02388908: - mov r2, #1 - ldr r1, _023889D0 ; =0x000008C6 - mov r3, r2 - mov r0, #0 - str r2, [sp] - bl YesNoMenu - cmp r0, #1 - movne r2, #1 - bne _02388964 - bl GetLeaderAction - mov r1, #0x2e - bl SetMonsterActionFields - bl GetLeader - mov r2, r0 - mov r1, #0 - ldr r0, _023889D4 ; =0x0000025A - mov r3, r1 - bl ov29_022ECDE4 - ldr r0, _023889D8 ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - mov r2, #0 - strb r1, [r0, #0x758] -_02388964: - cmp r2, #0 - ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mvneq r1, #0 - ldreq r0, [r0] - streq r1, [r0, #8] - b _02388984 -_0238897C: - mvn r0, #0 - str r0, [r1, #8] -_02388984: - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r0, [r0] - ldr r1, [r0, #8] - cmp r1, #0 - bge _023887CC - cmp r0, #0 - beq _023889B0 - bl MemFree - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r1, #0 - str r1, [r0] -_023889B0: - add sp, sp, #0x9c - ldmia sp!, {r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -#define REST_MENU_OFFSET 0x1458 -#else -#define REST_MENU_OFFSET 0 -#endif -_023889B8: .word OVERLAY31_UNKNOWN_POINTER__NA_238A284 -_023889BC: .word 0x000008C2 + REST_MENU_OFFSET -_023889C0: .word DUNGEON_WINDOW_PARAMS_25 -_023889C4: .word 0x00001A13 -_023889C8: .word DUNGEON_SUBMENU_ITEMS_5 -_023889CC: .word 0x000008C5 + REST_MENU_OFFSET -_023889D0: .word 0x000008C6 + REST_MENU_OFFSET -_023889D4: .word 0x0000025A -_023889D8: .word DUNGEON_PTR - arm_func_end RestMenu - - arm_func_start ov31_023889DC -ov31_023889DC: ; 0x023889DC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x18 - mov r6, r0 - ldr r4, [r6, #0xb4] - add r3, sp, #0xc - add r0, r4, #0x9c - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - mov r0, #8 - mov r1, #0x62 - bl ov29_022EA370 - mov r0, r6 - mov r1, #1 - bl IsBlinded - mov r3, r0 - ldrsh r0, [r4, #2] - ldrsh r2, [r4, #0xe] - add r1, r4, #0x90 - bl PrintIqSkillsMenu - mov r5, #0x62 -_02388A2C: - bl sub_02041B7C - movs r7, r0 - bne _02388A44 - mov r0, r5 - bl AdvanceFrame - b _02388A2C -_02388A44: - bl sub_020420F4 - mov r0, r6 - bl ov29_023021F0 - ldr r0, [r6, #0xb4] - add r3, sp, #0 - add r0, r0, #0x9c - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - add r0, sp, #0xc - mov r1, #0x38 - bl IqSkillFlagTest - mov r5, r0 - add r0, sp, #0 - mov r1, #0x38 - bl IqSkillFlagTest - cmp r5, #0 - bne _02388AA8 - cmp r0, #0 - beq _02388AF8 - ldr r0, _02388BFC ; =_020A1870 - ldrsh r1, [r4, #0x16] - ldrsh r0, [r0] - add r0, r1, r0 - strh r0, [r4, #0x16] - b _02388AF8 -_02388AA8: - cmp r0, #0 - bne _02388AF8 - ldr r0, _02388BFC ; =_020A1870 - ldrsh r1, [r4, #0x16] - ldrsh r0, [r0] - ldr r2, _02388C00 ; =0x000003E7 - sub r0, r1, r0 - strh r0, [r4, #0x16] - ldrsh r1, [r4, #0x12] - ldrsh r0, [r4, #0x16] - add r1, r1, r0 - cmp r1, r2 - ldrsh r0, [r4, #0x10] - movle r2, r1 - cmp r0, r2 - ble _02388AF8 - ldr r0, _02388C00 ; =0x000003E7 - cmp r1, r0 - movgt r1, r0 - strh r1, [r4, #0x10] -_02388AF8: -#ifdef JAPAN - mov r0, #0x41 - bl TeamMemberHasEnabledIqSkill - ldr r2, _02389E78 ; =DUNGEON_PTR - mov r1, #0x39 - ldr r2, [r2] - add r2, r2, #0x1a000 - strb r0, [r2, #0x19d] - add r0, sp, #0xc -#else - bl UpdateMapSurveyorFlag - add r0, sp, #0xc - mov r1, #0x39 -#endif - bl IqSkillFlagTest - mov r5, r0 - add r0, sp, #0 - mov r1, #0x39 - bl IqSkillFlagTest - cmp r5, #0 - bne _02388B74 - cmp r0, #0 - beq _02388BE8 - mov r5, #0 -#ifdef JAPAN - add r3, r4, #0x120 -#else - add r3, r4, #0x124 -#endif - mov r1, r5 - mov r2, #1 -_02388B38: - ldrb r0, [r3, r5, lsl #3] - add r4, r3, r5, lsl #3 - tst r0, #1 - movne r0, r2 - moveq r0, r1 - tst r0, #0xff - ldrneh r0, [r4, #2] - orrne r0, r0, #0x100 - strneh r0, [r4, #2] - add r0, r5, #1 - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - cmp r5, #4 - blt _02388B38 - b _02388BE8 -_02388B74: - cmp r0, #0 - bne _02388BE8 - mov sb, #0 -#ifdef JAPAN - add r6, r4, #0x120 -#else - add r6, r4, #0x124 -#endif - mov r4, sb - mov r5, #1 -_02388B8C: - ldrb r0, [r6, sb, lsl #3] - add r8, r6, sb, lsl #3 - tst r0, #1 - movne r0, r5 - moveq r0, r4 - tst r0, #0xff - beq _02388BD4 - ldrh r1, [r8, #2] - mov r0, r8 - bic r1, r1, #0x100 - strh r1, [r8, #2] - bl GetMaxPp - ldrb r1, [r8, #6] - cmp r1, r0 - ble _02388BD4 - mov r0, r8 - bl GetMaxPp - strb r0, [r8, #6] -_02388BD4: - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov sb, r0, asr #0x10 - cmp sb, #4 - blt _02388B8C -_02388BE8: - cmp r7, #0 - movne r0, #1 - moveq r0, #0 - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02388BFC: .word _020A1870 -_02388C00: .word 0x000003E7 -#ifdef JAPAN -_02389E78: .word DUNGEON_PTR -#endif - arm_func_end ov31_023889DC - - arm_func_start RecruitmentSearchMenuLoop -RecruitmentSearchMenuLoop: ; 0x02388C04 - stmdb sp!, {r3, lr} - sub sp, sp, #0xa0 - ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r1, [r0] - ldr r0, [r1, #0xd94] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _02388D24 -_02388C24: ; jump table - b _02388C34 ; case 0 - b _02388CD0 ; case 1 - b _02388CF8 ; case 2 - b _02388D18 ; case 3 -_02388C34: - ldr r0, _02388D34 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x748] - bl IsRecruitingAllowed - cmp r0, #0 - ldreq r2, _02388D38 ; =0x00000B44 - ldreq r1, _02388D3C ; =ov29_0238280C - moveq r0, #4 - streqh r2, [r1] - beq _02388D28 - ldr r0, _02388D34 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75d] - cmp r0, #0 - ldrne r2, _02388D40 ; =0x00000B45 - ldrne r1, _02388D3C ; =ov29_0238280C - movne r0, #4 - strneh r2, [r1] - bne _02388D28 - ldr r1, _02388D44 ; =0x00000B46 - mov r0, #0x10 - strh r1, [sp, #0x10] - str r0, [sp, #0x14] - mov ip, #0 - str ip, [sp] - ldr r0, _02388D48 ; =DUNGEON_WINDOW_PARAMS_26 - ldr r1, _02388D4C ; =0x00001813 - ldr r3, _02388D50 ; =ov31_02388D54 - add r2, sp, #8 - str ip, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r2, [r1] - strb r0, [r2] - ldr r1, [r1] - ldr r0, [r1, #0xd94] - add r0, r0, #1 - str r0, [r1, #0xd94] - b _02388D24 -_02388CD0: - ldrsb r0, [r1] - bl IsAdvancedTextBoxActive - cmp r0, #0 - bne _02388D24 - ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r1, [r0] - ldr r0, [r1, #0xd94] - add r0, r0, #1 - str r0, [r1, #0xd94] - b _02388D24 -_02388CF8: - ldrsb r0, [r1] - bl CloseAdvancedTextBox - ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r1, [r0] - ldr r0, [r1, #0xd94] - add r0, r0, #1 - str r0, [r1, #0xd94] - b _02388D24 -_02388D18: - bl ov29_0234F77C - mov r0, #4 - b _02388D28 -_02388D24: - mov r0, #1 -_02388D28: - add sp, sp, #0xa0 - ldmia sp!, {r3, pc} - .align 2, 0 -#ifdef JAPAN -#define RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -0x4FE -#else -#define RECRUITMENT_SEARCH_MENU_LOOP_OFFSET 0 -#endif -_02388D30: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 -_02388D34: .word DUNGEON_PTR -_02388D38: .word 0x00000B44 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -_02388D3C: .word ov29_0238280C -_02388D40: .word 0x00000B45 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -_02388D44: .word 0x00000B46 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -_02388D48: .word DUNGEON_WINDOW_PARAMS_26 -_02388D4C: .word 0x00001813 -_02388D50: .word ov31_02388D54 - arm_func_end RecruitmentSearchMenuLoop - - arm_func_start ov31_02388D54 -ov31_02388D54: ; 0x02388D54 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xd4 - ldr r4, _02388E54 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - mov sl, r0 - ldr r0, [r4] - mov r8, #4 - ldr r0, [r0, #0xd90] - mov sb, #0x14 - cmp r0, #0 - beq _02388E30 - mov r7, #0 - add r6, sp, #0x44 - add fp, sp, #4 - add r5, sp, #0x84 - b _02388E1C -_02388D90: - add r0, r1, r7, lsl #1 - ldrsh r1, [r0, #4] - mov r0, r6 - bl GetSpeciesString - ldr r0, [r4] - add r0, r0, r7, lsl #1 - ldrsh r0, [r0, #4] - bl GetDexNumber - ldr r2, [r4] - str r0, [sp, #0xa8] - add r2, r2, r7 - ldrb r2, [r2, #0x90a] - ldr r1, _02388E58 ; =ov31_0238A154 - mov r0, fp - mov r3, r6 - bl ov31_02388E60 - mov r0, r6 - mov r1, #0x40 - mov r2, fp - mov r3, #0 - str r5, [sp] - bl PreprocessString - mov r0, sl - mov r1, r8 - mov r2, sb - mov r3, r6 - bl DrawTextInWindow - add sb, sb, #0xd - cmp sb, #0x7c - blt _02388E18 - cmp r8, #4 - bgt _02388E4C - mov r8, #0x74 - mov sb, #0x14 -_02388E18: - add r7, r7, #1 -_02388E1C: - ldr r1, [r4] - ldr r0, [r1, #0xd90] - cmp r7, r0 - blt _02388D90 - b _02388E4C -_02388E30: - ldr r0, _02388E5C ; =0x00000B47 - bl StringFromId - mov r3, r0 - mov r0, sl - mov r1, r8 - mov r2, sb - bl DrawTextInWindow -_02388E4C: - add sp, sp, #0xd4 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02388E54: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 -_02388E58: .word ov31_0238A154 -#ifdef JAPAN -_02388E5C: .word 0x00000649 -#else -_02388E5C: .word 0x00000B47 -#endif - arm_func_end ov31_02388D54 - - arm_func_start ov31_02388E60 -ov31_02388E60: ; 0x02388E60 - 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 ov31_02388E60 - - arm_func_start ov31_02388E88 -ov31_02388E88: ; 0x02388E88 -#ifdef JAPAN -#define OV31_02388E88_OFFSET -0x50 -#else -#define OV31_02388E88_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x84 - sub sp, sp, #0x400 - ldr r0, _02389164 ; =OVERLAY31_UNKNOWN_STRUCT__NA_238A144 - bl sub_020348E4 - cmp r0, #0 - beq _02389158 - ldr r0, _02389168 ; =0x00000D98 - mov r1, #8 - bl MemAlloc - ldr r1, _0238916C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - mov r3, #0 - str r0, [r1] - add r5, r0, #4 - ldr r0, _02389170 ; =0x00000483 - mov r4, r3 - add r1, sp, #0 -_02388ECC: - add r2, r5, r3 - strb r4, [r1, r3] - add r3, r3, #1 - strb r4, [r2, #0x906] - cmp r3, r0 - blt _02388ECC - mov sb, #1 - mov r8, #2 - add r7, sp, #0 - ldr r6, _02389174 ; =DUNGEON_PTR - b _02388F3C -_02388EF8: - ldr r1, [r6] - mov sl, sb - add r1, r1, r4, lsl #3 - add r1, r1, #0x3900 - ldrsh r2, [r1, #0x76 + OV31_02388E88_OFFSET] - ldrsh r1, [r1, #0x78 + OV31_02388E88_OFFSET] - cmp r2, #0 - cmpeq r1, #0 - beq _02388F38 - add r0, r0, #0x174 + OV31_02388E88_OFFSET - add r0, r0, #0x3800 - add r0, r0, r4, lsl #3 - cmp r2, #0 - moveq sl, r8 - bl GetMonsterIdFromSpawnEntry - strb sl, [r7, r0] -_02388F38: - add r4, r4, #1 -_02388F3C: - ldr r0, [r6] - add r1, r0, #0x3000 -#ifdef JAPAN - ldr r1, [r1, #0xd7c] -#else - ldr r1, [r1, #0xe20] -#endif - cmp r4, r1 - blt _02388EF8 - ldrb r0, [r0, #0x790] - cmp r0, #0 - beq _02388F6C - bl GetKecleonIdToSpawnByFloor - add r1, sp, #0 - mov r2, #1 - strb r2, [r1, r0] -_02388F6C: - ldr r0, _02389174 ; =DUNGEON_PTR - mov sl, #0 - ldr r0, [r0] -#ifdef JAPAN - mov r8, #1 -#else - mov sb, #1 -#endif - add r0, r0, #0x700 - ldrsh r2, [r0, #0xa8] - cmp r2, #0 - addne r0, sp, #0 - movne r1, #1 - strneb r1, [r0, r2] -_02388F94: -#ifdef JAPAN - mov r0, r8, lsl #0x10 - add r1, sp, #0 - ldrb r1, [r1, r0, asr #16] - mov r7, r0, asr #0x10 -#else - mov r0, sb, lsl #0x10 - add r1, sp, #0 - ldrb r1, [r1, r0, asr #16] - mov r8, r0, asr #0x10 -#endif - mov r6, #0x44 - cmp r1, #0 - mov r4, #0 - beq _023890B4 -#ifdef JAPAN - mov r0, r7 -#else - mov r0, r8 -#endif - bl SpecificRecruitCheck - cmp r0, #0 - beq _023890B4 -#ifdef JAPAN - mov r0, r7 -#else - mov r0, r8 -#endif - bl CanMonsterSpawn - cmp r0, #0 - beq _023890B4 -#ifdef JAPAN - mov r0, r7 -#else - mov r0, r8 -#endif - bl GetRecruitRate2 - ldr r1, _02389178 ; =0xFFFFFC19 - cmp r0, r1 - beq _023890B4 -#ifdef JAPAN - mov sb, r4 - ldr fp, _0238A43C ; =0x0000022B - b _0238A2A8 -_0238A26C: - mov r0, sb, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetTeamMember - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _0238A2A4 - ldrsh r1, [r0, #4] - mov r0, r7 - bl BaseFormsEqual - cmp r0, #0 - bne _0238A2B0 -_0238A2A4: - add sb, sb, #1 -_0238A2A8: - cmp sb, fp - blt _0238A26C -_0238A2B0: - ldr r0, _0238A43C ; =0x0000022B - cmp sb, r0 - movne r4, #1 - cmp r4, #0 - bne _0238906C - mov sb, #0 - b _0238905C -_0238900C: - mov r0, sb, lsl #0x10 -#else - mov r0, r8 - mov r1, #1 - bl IsMonsterOnTeam - cmp r0, #0 - movne r4, #1 - cmp r4, #0 - bne _0238906C - mov r7, #0 - b _0238905C -_0238900C: - mov r0, r7, lsl #0x10 -#endif - mov r0, r0, asr #0x10 - bl GetActiveTeamMember - mov fp, r0 - ldrb r0, [fp] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02389058 - ldrsh r0, [fp, #8] - bl CheckTeamMemberIdxVeneer - cmp r0, #0 - bne _02389058 - ldrsh r1, [fp, #0xc] -#ifdef JAPAN - mov r0, r7 - bl BaseFormsEqual - cmp r0, #0 - bne _02389064 -_02389058: - add sb, sb, #1 -_0238905C: - cmp sb, #4 - blt _0238900C -_02389064: - cmp sb, #4 - movne r4, #1 -_0238906C: - add sb, r5, sl - ldrb r0, [sb, #0x906] -#else - mov r0, r8 - bl BaseFormsEqual - cmp r0, #0 - bne _02389064 -_02389058: - add r7, r7, #1 -_0238905C: - cmp r7, #4 - blt _0238900C -_02389064: - cmp r7, #4 - movne r4, #1 -_0238906C: - add r7, r5, sl - ldrb r0, [r7, #0x906] -#endif - cmp r4, #0 - movne r6, #0x46 - cmp r6, r0 - bne _023890A4 -#ifdef JAPAN - mov r0, r7 -#else - mov r0, r8 -#endif - bl GetDexNumber - mov r1, sl, lsl #1 - mov r4, r0 - ldrsh r0, [r5, r1] - bl GetDexNumber - cmp r4, r0 - beq _023890B4 -_023890A4: - mov r0, sl, lsl #1 -#ifdef JAPAN - strh r7, [r5, r0] - strb r6, [sb, #0x906] -#else - strh r8, [r5, r0] - strb r6, [r7, #0x906] -#endif - add sl, sl, #1 -_023890B4: - ldr r0, _02389170 ; =0x00000483 -#ifdef JAPAN - add r8, r8, #1 - cmp r8, r0 -#else - add sb, sb, #1 - cmp sb, r0 -#endif - blt _02388F94 - add r0, r5, #6 - str sl, [r5, #0xd8c] - add r6, r0, #0x900 - mov r8, #0 - b _02389140 -_023890D8: - add r7, r8, #1 - mov fp, r8, lsl #1 - b _02389134 -_023890E4: - mov r1, r7, lsl #1 - ldrsh r0, [r5, r1] - ldrsh sb, [r5, r1] - bl GetDexNumber - mov r4, r0 - ldrsh r0, [r5, fp] - bl GetDexNumber - ldrsh r2, [r5, fp] - add r1, sb, r4, lsl #11 - add r0, r2, r0, lsl #11 - cmp r1, r0 - bge _02389130 - ldrb r1, [r6, r7] - mov r0, r7, lsl #1 - strh r2, [r5, r0] - ldrb r0, [r6, r8] - strb r0, [r6, r7] - strh sb, [r5, fp] - strb r1, [r6, r8] -_02389130: - add r7, r7, #1 -_02389134: - cmp r7, sl - blt _023890E4 - add r8, r8, #1 -_02389140: - cmp r8, sl - blt _023890D8 - ldr r0, _0238916C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0xd94] -_02389158: - add sp, sp, #0x84 - add sp, sp, #0x400 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02389164: .word OVERLAY31_UNKNOWN_STRUCT__NA_238A144 -_02389168: .word 0x00000D98 -_0238916C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 -_02389170: .word 0x00000483 -_02389174: .word DUNGEON_PTR -_02389178: .word 0xFFFFFC19 -#ifdef JAPAN -_0238A43C: .word 0x0000022B -#endif - arm_func_end ov31_02388E88 - - arm_func_start ov31_0238917C -ov31_0238917C: ; 0x0238917C - stmdb sp!, {r3, lr} - ldr r0, _023891A4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _023891A4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_023891A4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 - arm_func_end ov31_0238917C - - arm_func_start ov31_023891A8 -ov31_023891A8: ; 0x023891A8 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl sub_02030A18 - mov r4, r0 - ldr r0, _023891F8 ; =DUNGEON_SUBMENU_ITEMS_6 - mov r1, r4, lsl #3 - ldrh r1, [r0, r1] - mov r0, r5 - bl sub_02030A2C -#if defined(EUROPE) - add r0, r4, #0xb2 - add r0, r0, #0x3f00 -#elif defined(JAPAN) - add r0, r4, #0xb3 - add r0, r0, #0x4900 -#else - add r0, r4, #0xfb0 - add r0, r0, #0x3000 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r3, r0 - mov r0, r5 - mov r1, #4 - mov r2, #0x10 - bl DrawTextInWindow - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023891F8: .word DUNGEON_SUBMENU_ITEMS_6 - arm_func_end ov31_023891A8 - - arm_func_start HelpMenuLoop -HelpMenuLoop: ; 0x023891FC - stmdb sp!, {r4, lr} - sub sp, sp, #0xa0 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r2, [r0] - ldr r0, [r2, #8] - cmp r0, #6 - addls pc, pc, r0, lsl #2 - b _023893F0 -_0238921C: ; jump table - b _02389238 ; case 0 - b _023892B8 ; case 1 - b _02389278 ; case 2 - b _02389344 ; case 3 - b _023893A8 ; case 4 - b _023893DC ; case 5 - b _023893DC ; case 6 -_02389238: - ldr ip, _02389400 ; =0x00003FA7 - mov r4, #0x10 - ldr r0, _02389404 ; =DUNGEON_WINDOW_PARAMS_27 - ldr r1, _02389408 ; =0x00401813 - ldr r3, _0238940C ; =DUNGEON_SUBMENU_ITEMS_6 - add r2, sp, #8 - strh ip, [sp, #0x10] - str r4, [sp, #0x14] - bl CreateParentMenuFromStringIds - ldr r1, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r2, #1 - ldr r3, [r1] - strb r0, [r3] - ldr r0, [r1] - str r2, [r0, #8] - b _023893F0 -_02389278: - ldrsb r0, [r2] - bl sub_02028354 - cmp r0, #3 - bne _02389298 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202810C -_02389298: - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl ResumeParentMenu - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #1 - ldr r0, [r0] - str r1, [r0, #8] -_023892B8: - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl IsParentMenuActive - cmp r0, #0 - bne _023893F0 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202ABB0 - movs r4, r0 - bmi _02389320 - bl sub_02001808 - cmp r0, #0xa000 - ldrlt r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - movlt r1, #2 - ldrlt r0, [r0] - strlt r1, [r0, #8] - blt _023893F0 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #3 - ldr r2, [r0] - str r4, [r2, #4] - ldr r0, [r0] - str r1, [r0, #8] - b _02389330 -_02389320: - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #6 - ldr r0, [r0] - str r1, [r0, #8] -_02389330: - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202812C - b _023893F0 -_02389344: - mov r0, #0x10 - str r0, [sp, #0x14] - ldr r1, [r2, #4] - ldr r0, _0238940C ; =DUNGEON_SUBMENU_ITEMS_6 - mov r1, r1, lsl #3 - ldrh r1, [r0, r1] - mov ip, #8 - ldr r0, _02389410 ; =DUNGEON_WINDOW_PARAMS_28 - strh r1, [sp, #0x10] - ldr r2, [r2, #4] - ldr r1, _02389414 ; =0x00009833 - str r2, [sp, #8] - str ip, [sp] - mov ip, #1 - ldr r3, _02389418 ; =ov31_023891A8 - add r2, sp, #8 - str ip, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r2, #4 - ldr r3, [r1] - strb r0, [r3, #1] - ldr r0, [r1] - str r2, [r0, #8] - b _023893F0 -_023893A8: - ldrsb r0, [r2, #1] - bl IsAdvancedTextBoxActive - cmp r0, #0 - bne _023893F0 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0, #1] - bl CloseAdvancedTextBox - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #2 - ldr r0, [r0] - str r1, [r0, #8] - b _023893F0 -_023893DC: - ldrsb r0, [r2] - bl CloseParentMenu - bl ov29_0234F77C - mov r0, #4 - b _023893F4 -_023893F0: - mov r0, #1 -_023893F4: - add sp, sp, #0xa0 - ldmia sp!, {r4, pc} - .align 2, 0 -_023893FC: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C -#if defined(EUROPE) -_02389400: .word 0x00003FA9 -#elif defined(JAPAN) -_02389400: .word 0x000049AA -#else -_02389400: .word 0x00003FA7 -#endif -_02389404: .word DUNGEON_WINDOW_PARAMS_27 -_02389408: .word 0x00401813 -_0238940C: .word DUNGEON_SUBMENU_ITEMS_6 -_02389410: .word DUNGEON_WINDOW_PARAMS_28 -_02389414: .word 0x00009833 -_02389418: .word ov31_023891A8 - arm_func_end HelpMenuLoop - - arm_func_start ov31_0238941C -ov31_0238941C: ; 0x0238941C - stmdb sp!, {r3, lr} - ldr r0, _02389458 ; =OVERLAY31_UNKNOWN_STRUCT__NA_238A190 - bl sub_020348E4 - cmp r0, #0 - ldmeqia sp!, {r3, pc} - mov r0, #0xc - mov r1, #8 - bl MemAlloc - ldr r1, _0238945C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r2, #0 - str r0, [r1] - str r2, [r0, #4] - ldr r0, [r1] - str r2, [r0, #8] - ldmia sp!, {r3, pc} - .align 2, 0 -_02389458: .word OVERLAY31_UNKNOWN_STRUCT__NA_238A190 -_0238945C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C - arm_func_end ov31_0238941C - - arm_func_start ov31_02389460 -ov31_02389460: ; 0x02389460 - stmdb sp!, {r3, lr} - ldr r0, _02389488 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _02389488 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02389488: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C - arm_func_end ov31_02389460 - - arm_func_start ov31_0238948C -ov31_0238948C: ; 0x0238948C - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x134 -#ifdef JAPAN - mov r5, r0 - mov r0, #0x410 - mov r1, #8 - bl MemAlloc - mov r1, #0x410 - mov r4, r0 - bl MemZero - mvn r1, #1 - strb r1, [r4] - add r0, r4, #0x30c - strb r1, [r4, #1] - bl ov31_02389D80 - mov r0, #0 - str r0, [r4, #0x40c] - strb r0, [r4, #0x408] - bl ov29_022EA62C - mov r0, r4 - mov r1, r5 - bl ov31_02389A78 - ldr r1, [r4, #0x40c] - mov r0, #8 - str r1, [r4, #0x3cc] - str r0, [r4, #0x3d0] - mov r1, #0 - str r1, [r4, #0x3d4] - str r1, [r4, #0x3d8] - str r1, [r4, #0x3bc] - mov r0, #0x10 - str r0, [r4, #0x3c0] - mov r0, r4 - str r1, [r4, #0x3c8] - bl ov29_0234E988 - add r0, sp, #0xac - bl InitPreprocessorArgs - ldrb r0, [r4, #0x408] - cmp r0, #0 - ldrne r1, _023898F0 ; =0x0000158C - mov r0, #0x10 - ldreq r1, _023898F4 ; =0x0000158B - str r0, [sp, #0xa8] - strh r1, [sp, #0xa4] - ldrb r0, [r4, #0x408] - cmp r0, #0 - bne _0238A820 - ldr r1, [r4, #0x404] - add r0, r4, #0x78 - ldr r1, [r1, #0xb4] - bl GetMonsterName - add r0, r4, #0x78 - str r0, [sp, #0xe4] -_0238A820: - ldr r0, _023898F8 ; =DUNGEON_WINDOW_PARAMS_31 - ldr r1, _023898FC ; =0x80401813 - add r2, sp, #0x9c - add r3, r4, #0xc4 - bl CreateParentMenu - strb r0, [r4] -_0238A838: - mov r0, #0x3d - bl AdvanceFrame - ldr r0, [r4, #0x404] - bl ov29_0234FB50 - mov r7, r0 - add r1, sp, #0 - mov r0, #0 - bl GetPressedButtons - ldrsb r0, [r4] - bl IsParentMenuActive - cmp r0, #0 - bne _0238AA84 - ldrsb r0, [r4] - bl sub_0202ABB0 - movs r6, r0 - bmi _0238AA78 - ldrsb r0, [r4] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r4, #0x3c8] - add r1, r4, r0 - add r0, r4, #0x30c - ldrb r5, [r1, #0xb8] - bl ov31_02389D80 - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 - bl ov29_022EBA70 - mov r0, #0x2f - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0xc - mov r1, #0 - bl AddDungeonSubMenuOption - cmp r7, #0 - beq _0238A8CC - mov r0, #0x2f - bl DisableDungeonSubMenuOption -_0238A8CC: - add r1, r4, #0x6c - add r0, r4, #4 - mov r2, #0 - str r1, [sp, #0x64] - bl ov31_0238513C - bl ov29_022EBA84 - mov r3, #0 - b _0238A8FC -_0238A8EC: - add r2, r3, #1 - add r1, r4, r3, lsl #3 - mov r3, r2 - str r2, [r1, #8] -_0238A8FC: - cmp r3, r0 - blt _0238A8EC - ldr r0, _02389904 ; =0x00000877 - add r2, r4, r3, lsl #3 - strh r0, [r2, #4] - mvn r1, #1 - mov r0, #0 - str r1, [r2, #8] - strh r0, [r2, #0xc] - sub r1, r0, #1 - add r0, r4, #1 - str r1, [r2, #0x10] - bl ov29_0234E988 - ldr r0, _02389908 ; =0x0238B4C0 - ldr r1, _0238990C ; =0x80000213 - add r2, sp, #4 - add r3, r4, #4 - bl CreateParentMenuFromStringIds - strb r0, [r4, #1] - mvn r8, #0 - mov r7, #0x3d -_0238A950: - mov r0, r7 - bl AdvanceFrame - ldrsb r0, [r4, #1] - bl IsParentMenuActive - cmp r0, #0 - bne _0238A950 - ldrsb r0, [r4, #1] - bl sub_0202ABB0 - subs r1, r0, #1 - bmi _0238A998 - ldrsb r0, [r4, #1] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r4, #0x3c8] - bl ov29_022EB804 - cmp r0, #0 - movne r8, #0 - b _0238A9AC -_0238A998: - mvn r0, #2 - cmp r1, r0 - bne _0238A9AC - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 -_0238A9AC: - cmp r8, #0 - bge _0238A9C8 - add r0, r4, #1 - bl ov29_0234E988 - ldrsb r0, [r4] - bl ResumeParentMenu - b _0238AB68 -_0238A9C8: - ldr r0, [r4, #0x3c8] - cmp r0, #0 - bne _0238AA3C - ldr r0, _02389910 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldrb r0, [r4, #0x408] - cmp r0, #0 - beq _0238A9F8 - mov r0, r5 - bl ov31_02389C68 - b _0238AA04 -_0238A9F8: - ldr r0, [r4, #0x404] - mov r1, r5 - bl ov31_02389C2C -_0238AA04: - ldr r1, [r4, #0x404] - mov r0, r4 - bl ov31_02389A78 - add r0, r4, #1 - bl ov29_0234E988 - ldrsb r0, [r4] - bl ResumeParentMenu - ldrsb r0, [r4] - add r1, r4, #0xc4 - bl sub_0202A98C - ldrsb r0, [r4] - sub r1, r6, #1 - bl sub_0202AB94 - b _0238AB68 -_0238AA3C: - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 - bl sub_02001808 - cmp r0, #0xa000 - bge _0238AA64 - add r0, r4, #1 - bl ov29_0234E988 - ldrsb r0, [r4] - bl ResumeParentMenu - b _0238AB68 -_0238AA64: - ldrsb r1, [r4] - mov r0, r5 - mov r2, #1 - bl ov31_02389CC0 - b _0238AB68 -_0238AA78: - bl ov29_022EAC78 - mov r0, #1 - b _0238AB6C -_0238AA84: - ldrh r0, [sp] - tst r0, #8 - beq _0238AADC - ldr r0, _02389914 ; =0x00003F04 - bl ov29_022EACCC - bl sub_02001808 - cmp r0, #0xa000 - blt _0238AB68 - ldrsb r0, [r4] - bl sub_0202B030 - mov r0, #0x3d - bl AdvanceFrame - ldrsb r0, [r4] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r4, #0x3c8] - add r0, r4, r0 - ldrb r0, [r0, #0xb8] - ldrsb r1, [r4] - mov r2, #1 - bl ov31_02389CC0 - b _0238AB68 -_0238AADC: - tst r0, #4 - beq _0238AB68 - cmp r7, #0 - beq _0238AAFC - ldr r0, _02389918 ; =0x00003F03 - mov r1, #0x100 - bl sub_02017C74 - b _0238AB68 -_0238AAFC: - ldrsb r0, [r4] - bl sub_0202B030 - ldrsb r0, [r4] - bl sub_0202ABB0 - mov r5, r0 - ldr r0, _02389910 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldrb r0, [r4, #0x408] - cmp r0, #0 - add r0, r4, r5 - beq _0238AB38 - ldrb r0, [r0, #0xb7] - bl ov31_02389C68 - b _0238AB44 -_0238AB38: - ldrb r1, [r0, #0xb7] - ldr r0, [r4, #0x404] - bl ov31_02389C2C -_0238AB44: - ldr r1, [r4, #0x404] - mov r0, r4 - bl ov31_02389A78 - ldrsb r0, [r4] - add r1, r4, #0xc4 - bl sub_0202A98C - ldrsb r0, [r4] - sub r1, r5, #1 - bl sub_0202AB94 -_0238AB68: - mov r0, #0 -_0238AB6C: - cmp r0, #0 - beq _0238A838 - add r0, r4, #1 - bl ov29_0234E988 - mov r0, r4 - bl ov29_0234E988 - mov r0, #0x3d - bl AdvanceFrame - add r0, r4, #1 - bl ov29_0234E988 - mov r0, r4 - bl ov29_0234E988 - mov r0, r4 -#else - mov r4, r0 - mov r0, #0x530 - mov r1, #8 - bl MemAlloc - mov r5, r0 - mov r1, #0x530 - bl MemZero - add r0, r5, #0x2c - mvn r1, #1 - strb r1, [r5] - add r0, r0, #0x400 - strb r1, [r5, #1] - bl ov31_02389D80 - mov r0, #0 - str r0, [r5, #0x52c] - strb r0, [r5, #0x528] - bl ov29_022EA62C - mov r0, r5 - mov r1, r4 - bl ov31_02389A78 - ldr r1, [r5, #0x52c] - mov r0, #8 - str r1, [r5, #0x4ec] - str r0, [r5, #0x4f0] - mov r1, #0 - str r1, [r5, #0x4f4] - str r1, [r5, #0x4f8] - str r1, [r5, #0x4dc] - mov r0, #0x10 - str r0, [r5, #0x4e0] - mov r0, r5 - str r1, [r5, #0x4e8] - bl ov29_0234E988 - add r0, sp, #0xac - bl InitPreprocessorArgs - ldrb r0, [r5, #0x528] - cmp r0, #0 - ldrne r1, _023898F0 ; =0x00000F5F - mov r0, #0x10 - ldreq r1, _023898F4 ; =0x00000F5E - str r0, [sp, #0xa8] - strh r1, [sp, #0xa4] - ldrb r0, [r5, #0x528] - cmp r0, #0 - bne _02389560 - ldr r1, [r5, #0x524] - add r0, r5, #0x78 - ldr r1, [r1, #0xb4] - bl GetMonsterName - add r0, r5, #0x78 - str r0, [sp, #0xe4] -_02389560: - ldr r0, _023898F8 ; =DUNGEON_WINDOW_PARAMS_31 - ldr r1, _023898FC ; =0x80401813 - add r2, sp, #0x9c - add r3, r5, #0xc4 - bl CreateParentMenu - strb r0, [r5] -_02389578: - mov r0, #0x3d - bl AdvanceFrame - ldr r0, [r5, #0x524] - bl ov29_0234FB50 - mov r4, r0 - add r1, sp, #0 - mov r0, #0 - bl GetPressedButtons - ldrsb r0, [r5] - bl IsParentMenuActive - cmp r0, #0 - bne _023897C8 - ldrsb r0, [r5] - bl sub_0202ABB0 - movs r7, r0 - bmi _023897BC - ldrsb r0, [r5] - bl sub_0202ABB0 - sub r1, r0, #1 - add r0, r5, #0x2c - str r1, [r5, #0x4e8] - add r1, r5, r1 - add r0, r0, #0x400 - ldrb r6, [r1, #0xb8] - bl ov31_02389D80 - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 - bl ov29_022EBA70 - mov r0, #0x2f - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0xc - mov r1, #0 - bl AddDungeonSubMenuOption - cmp r4, #0 - beq _02389610 - mov r0, #0x2f - bl DisableDungeonSubMenuOption -_02389610: - add r1, r5, #0x6c - add r0, r5, #4 - mov r2, #0 - str r1, [sp, #0x64] - bl ov31_0238513C - bl ov29_022EBA84 - mov r3, #0 - b _02389640 -_02389630: - add r2, r3, #1 - add r1, r5, r3, lsl #3 - mov r3, r2 - str r2, [r1, #8] -_02389640: - cmp r3, r0 - blt _02389630 - ldr r0, _02389904 ; =0x00000A3C - add r2, r5, r3, lsl #3 - strh r0, [r2, #4] - mvn r1, #1 - mov r0, #0 - str r1, [r2, #8] - strh r0, [r2, #0xc] - sub r1, r0, #1 - add r0, r5, #1 - str r1, [r2, #0x10] - bl ov29_0234E988 - ldr r0, _02389908 ; =DUNGEON_WINDOW_PARAMS_30 - ldr r1, _0238990C ; =0x80000213 - add r2, sp, #4 - add r3, r5, #4 - bl CreateParentMenuFromStringIds - strb r0, [r5, #1] - mvn r8, #0 - mov r4, #0x3d -_02389694: - mov r0, r4 - bl AdvanceFrame - ldrsb r0, [r5, #1] - bl IsParentMenuActive - cmp r0, #0 - bne _02389694 - ldrsb r0, [r5, #1] - bl sub_0202ABB0 - subs r1, r0, #1 - bmi _023896DC - ldrsb r0, [r5, #1] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r5, #0x4e8] - bl ov29_022EB804 - cmp r0, #0 - movne r8, #0 - b _023896F0 -_023896DC: - mvn r0, #2 - cmp r1, r0 - bne _023896F0 - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 -_023896F0: - cmp r8, #0 - bge _0238970C - add r0, r5, #1 - bl ov29_0234E988 - ldrsb r0, [r5] - bl ResumeParentMenu - b _023898AC -_0238970C: - ldr r0, [r5, #0x4e8] - cmp r0, #0 - bne _02389780 - ldr r0, _02389910 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldrb r0, [r5, #0x528] - cmp r0, #0 - beq _0238973C - mov r0, r6 - bl ov31_02389C68 - b _02389748 -_0238973C: - ldr r0, [r5, #0x524] - mov r1, r6 - bl ov31_02389C2C -_02389748: - ldr r1, [r5, #0x524] - mov r0, r5 - bl ov31_02389A78 - add r0, r5, #1 - bl ov29_0234E988 - ldrsb r0, [r5] - bl ResumeParentMenu - ldrsb r0, [r5] - add r1, r5, #0xc4 - bl sub_0202A98C - ldrsb r0, [r5] - sub r1, r7, #1 - bl sub_0202AB94 - b _023898AC -_02389780: - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 - bl sub_02001808 - cmp r0, #0xa000 - bge _023897A8 - add r0, r5, #1 - bl ov29_0234E988 - ldrsb r0, [r5] - bl ResumeParentMenu - b _023898AC -_023897A8: - ldrsb r1, [r5] - mov r0, r6 - mov r2, #1 - bl ov31_02389CC0 - b _023898AC -_023897BC: - bl ov29_022EAC78 - mov r0, #1 - b _023898B0 -_023897C8: - ldrh r0, [sp] - tst r0, #8 - beq _02389820 - ldr r0, _02389914 ; =0x00003F04 - bl ov29_022EACCC - bl sub_02001808 - cmp r0, #0xa000 - blt _023898AC - ldrsb r0, [r5] - bl sub_0202B030 - mov r0, #0x3d - bl AdvanceFrame - ldrsb r0, [r5] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r5, #0x4e8] - add r0, r5, r0 - ldrb r0, [r0, #0xb8] - ldrsb r1, [r5] - mov r2, #1 - bl ov31_02389CC0 - b _023898AC -_02389820: - tst r0, #4 - beq _023898AC - cmp r4, #0 - beq _02389840 - ldr r0, _02389918 ; =0x00003F03 - mov r1, #0x100 - bl sub_02017C74 - b _023898AC -_02389840: - ldrsb r0, [r5] - bl sub_0202B030 - ldrsb r0, [r5] - bl sub_0202ABB0 - mov r4, r0 - ldr r0, _02389910 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldrb r0, [r5, #0x528] - cmp r0, #0 - add r0, r5, r4 - beq _0238987C - ldrb r0, [r0, #0xb7] - bl ov31_02389C68 - b _02389888 -_0238987C: - ldrb r1, [r0, #0xb7] - ldr r0, [r5, #0x524] - bl ov31_02389C2C -_02389888: - ldr r1, [r5, #0x524] - mov r0, r5 - bl ov31_02389A78 - ldrsb r0, [r5] - add r1, r5, #0xc4 - bl sub_0202A98C - ldrsb r0, [r5] - sub r1, r4, #1 - bl sub_0202AB94 -_023898AC: - mov r0, #0 -_023898B0: - cmp r0, #0 - beq _02389578 - add r0, r5, #1 - bl ov29_0234E988 - mov r0, r5 - bl ov29_0234E988 - mov r0, #0x3d - bl AdvanceFrame - add r0, r5, #1 - bl ov29_0234E988 - mov r0, r5 - bl ov29_0234E988 - mov r0, r5 -#endif - bl MemFree - add sp, sp, #0x134 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -_023898F0: .word 0x0000158C -_023898F4: .word 0x0000158B -#else -_023898F0: .word 0x00000F5F -_023898F4: .word 0x00000F5E -#endif -_023898F8: .word DUNGEON_WINDOW_PARAMS_31 -_023898FC: .word 0x80401813 -_02389900: .word 0x00003F02 -#ifdef JAPAN -_02389904: .word 0x00000877 -#else -_02389904: .word 0x00000A3C -#endif -_02389908: .word DUNGEON_WINDOW_PARAMS_30 -_0238990C: .word 0x80000213 -_02389910: .word 0x00003F07 -_02389914: .word 0x00003F04 -_02389918: .word 0x00003F03 - arm_func_end ov31_0238948C - - arm_func_start ov31_0238991C -ov31_0238991C: ; 0x0238991C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r0, #2 - mov r1, #8 - bl MemAlloc - mov r1, r5 - mov r2, r4 - mov r4, r0 - bl ov31_0238994C - mov r0, r4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov31_0238991C - - arm_func_start ov31_0238994C -ov31_0238994C: ; 0x0238994C - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x10 - mov r3, r2, asr #2 - mov r4, r0 - mov r0, r1, asr #2 - add r2, r2, r3, lsr #29 - add ip, r1, r0, lsr #29 - ldr r6, _023899B0 ; =DUNGEON_WINDOW_PARAMS_32 - mov lr, r2, asr #3 - add r5, sp, #0 - ldmia r6, {r0, r1, r2, r3} - stmia r5, {r0, r1, r2, r3} - mov ip, ip, asr #3 - add r3, lr, #1 - ldr r1, _023899B4 ; =ov31_02389A04 - mov r0, r5 - mov r2, r4 - strb ip, [sp, #4] - strb r3, [sp, #5] - bl CreateTextBoxWithArg - strb r0, [r4] - mov r0, #0xb - strb r0, [r4, #1] - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_023899B0: .word DUNGEON_WINDOW_PARAMS_32 -_023899B4: .word ov31_02389A04 - arm_func_end ov31_0238994C - - arm_func_start ov31_023899B8 -ov31_023899B8: ; 0x023899B8 - stmdb sp!, {r3, lr} - strb r1, [r0, #1] - cmp r2, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - bl sub_0202F9B8 - ldmia sp!, {r3, pc} - arm_func_end ov31_023899B8 - - arm_func_start ov31_023899D4 -ov31_023899D4: ; 0x023899D4 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r4, [r5] - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldrsb r0, [r4] - bl CloseTextBox2 - mov r0, r4 - bl MemFree - mov r0, #0 - str r0, [r5] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov31_023899D4 - - arm_func_start ov31_02389A04 -ov31_02389A04: ; 0x02389A04 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x94 - mov r5, r0 - mov r4, r1 - bl sub_02027B1C - add r0, sp, #0x44 - bl InitPreprocessorArgs - ldrb r0, [r4, #1] - ldr r3, _02389A70 ; =0x0000C402 - add ip, sp, #0x44 - cmp r0, #0xb - strne r0, [sp, #0x54] -#ifdef JAPAN - ldreq r2, _0238AD30 ; =0x0000158D - add r0, sp, #4 - ldrne r2, _02389A74 ; =0x0000158E -#else - moveq r2, #0xf60 - ldrne r2, _02389A74 ; =0x00000F61 - add r0, sp, #4 -#endif - mov r1, #0x40 - str ip, [sp] - bl PreprocessStringFromId - add r3, sp, #4 - mov r0, r5 - mov r1, #4 - mov r2, #2 - bl DrawTextInWindow - mov r0, r5 - bl UpdateWindow - add sp, sp, #0x94 - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_02389A70: .word 0x0000C402 -#ifdef JAPAN -_0238AD30: .word 0x0000158D -_02389A74: .word 0x0000158E -#else -_02389A74: .word 0x00000F61 -#endif - arm_func_end ov31_02389A04 - - arm_func_start ov31_02389A78 -ov31_02389A78: ; 0x02389A78 -#ifdef JAPAN -#define OV31_02389A78_OFFSET -0x120 -#else -#define OV31_02389A78_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x70 - mov sb, r1 - ldr r4, [sb, #0xb4] - mov sl, r0 - ldrb r0, [r4, #7] - strb r0, [sl, #0x528 + OV31_02389A78_OFFSET] - bl GetLeaderMonster - ldrb r1, [r0, #0xa] - add r0, sp, #0x14 - bl GetUnlockedTactics - ldrb r0, [sl, #0x528 + OV31_02389A78_OFFSET] - cmp r0, #0 - beq _02389B64 - mov r6, #0 - bl GetLeaderMonster - ldrb r1, [r0, #0xa] - add r0, sp, #8 - bl GetUnlockedTactics - ldr r4, _02389C20 ; =DUNGEON_PTR - mov r7, r6 - add r5, sp, #4 -_02389AD0: - ldr r0, [r4] - add r0, r0, r7, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r8, [r0, #0xa84] -#else - ldr r8, [r0, #0xb28] -#endif - mov r0, r8 - bl ov29_0234FB60 - cmp r0, #0 - beq _02389B08 - ldr r1, [r8, #0xb4] - add r0, r6, #1 - ldrb r1, [r1, #0xa8] - mov r0, r0, lsl #0x10 - strb r1, [r5, r6] - mov r6, r0, asr #0x10 -_02389B08: - add r0, r7, #1 - mov r0, r0, lsl #0x10 - mov r7, r0, asr #0x10 - cmp r7, #4 - blt _02389AD0 - cmp r6, #0 - moveq r6, #0xb - beq _02389B68 - mov r3, #1 - ldrb r2, [sp, #4] - add r1, sp, #4 - b _02389B54 -_02389B38: - ldrb r0, [r1, r3] - cmp r2, r0 - movne r6, #0xb - bne _02389B68 - add r0, r3, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 -_02389B54: - cmp r3, r6 - blt _02389B38 - ldrb r6, [sp, #4] - b _02389B68 -_02389B64: - ldrb r6, [r4, #0xa8] -_02389B68: - mov r8, #0 - add r4, sl, #0x12c - add fp, sp, #0x14 - add r5, sp, #0x20 - b _02389BF4 -_02389B7C: - ldrb r1, [fp, r8] - add r0, sl, r8 - strb r1, [r0, #0xb8] - cmp r1, #0xb - beq _02389BFC - str r1, [sp, #0x30] - cmp r6, #0xb - beq _02389BC4 - cmp r6, r1 - bne _02389BC4 -#ifdef JAPAN - mov r0, #0x28 - mul r7, r8, r0 - ldr r2, _02389C24 ; =ov31_0238A228 - add r0, r4, r7 - mov r1, #0x28 - mov r3, #0 - str r5, [sp] - bl PreprocessString - b _02389BE0 -_02389BC4: - mov r0, #0x28 - mul r7, r8, r0 - ldr r2, _02389C28 ; =ov31_0238A23C - add r0, r4, r7 - mov r1, #0x28 - mov r3, #0 - str r5, [sp] -#else - ldr r2, _02389C24 ; =ov31_0238A228 - mov r1, #0x40 - add r0, r4, r8, lsl #6 - mov r3, #0 - str r5, [sp] - mov r7, r8, lsl #6 - bl PreprocessString - b _02389BE0 -_02389BC4: - ldr r2, _02389C28 ; =ov31_0238A23C - mov r1, #0x40 - add r0, r4, r8, lsl #6 - mov r3, #0 - str r5, [sp] - mov r7, r8, lsl #6 -#endif - bl PreprocessString -_02389BE0: - add r1, r4, r7 - add r0, sl, r8, lsl #3 - str r1, [r0, #0xc4] - add r8, r8, #1 - str r8, [r0, #0xc8] -_02389BF4: - cmp r8, #0xc - blt _02389B7C -_02389BFC: - mov r0, #0 - str r8, [sl, #0x52c + OV31_02389A78_OFFSET] - add r1, sl, r8, lsl #3 - str r0, [r1, #0xc4] - sub r0, r0, #1 - str r0, [r1, #0xc8] - str sb, [sl, #0x524 + OV31_02389A78_OFFSET] - add sp, sp, #0x70 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02389C20: .word DUNGEON_PTR -_02389C24: .word ov31_0238A228 -_02389C28: .word ov31_0238A23C - arm_func_end ov31_02389A78 - - arm_func_start ov31_02389C2C -ov31_02389C2C: ; 0x02389C2C - stmdb sp!, {r3, lr} - ldr r3, [r0, #0xb4] - mov r2, #6 - strb r1, [r3, #0xa8] - strb r2, [r3, #0x7c] - mov r1, #0 - str r1, [r3, #0x84] - str r1, [r3, #0x88] - strh r1, [r3, #0x80] - ldrb r1, [r3, #7] - cmp r1, #0 - ldmneia sp!, {r3, pc} - mov r1, #1 - bl AiMovement - ldmia sp!, {r3, pc} - arm_func_end ov31_02389C2C - - arm_func_start ov31_02389C68 -ov31_02389C68: ; 0x02389C68 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r5, _02389CBC ; =DUNGEON_PTR - mov r4, r0 - mov r6, #0 -_02389C78: - ldr r0, [r5] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r7, [r0, #0xa84] -#else - ldr r7, [r0, #0xb28] -#endif - mov r0, r7 - bl ov29_0234FB60 - cmp r0, #0 - beq _02389CA4 - mov r0, r7 - mov r1, r4 - bl ov31_02389C2C -_02389CA4: - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 - cmp r6, #4 - blt _02389C78 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02389CBC: .word DUNGEON_PTR - arm_func_end ov31_02389C68 - - arm_func_start ov31_02389CC0 -ov31_02389CC0: ; 0x02389CC0 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #0x5c - mov r5, r1 - mov r6, r0 - mov r0, r5 - mov r4, r2 - bl sub_0202812C -#if defined(EUROPE) - add r0, r6, #0x2dc - add r0, r0, #0x2400 -#elif defined(JAPAN) - add r0, r6, #0x308 - add r0, r0, #0x3c00 -#else - add r0, r6, #0xda - add r0, r0, #0x2600 -#endif - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - add r1, sp, #0xc - str r6, [sp, #0x1c] - str r1, [sp] - str r2, [sp, #4] - mov r2, #0 - ldr r0, _02389D74 ; =DUNGEON_WINDOW_PARAMS_29 - ldr r1, _02389D78 ; =0x00001013 - ldr r3, _02389D7C ; =0x00000A3B - str r2, [sp, #8] - bl CreateScrollBoxSingle - mov r7, r0 - mov r6, #0x3e -_02389D1C: - mov r0, r6 - bl AdvanceFrame - mov r0, r7 - bl IsScrollBoxActive - cmp r0, #0 - bne _02389D1C - mov r0, r7 - bl CloseScrollBox - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #4 - mov r1, #0x3e - bl ov29_022EA370 - mov r0, r5 - bl sub_0202810C - cmp r4, #0 - beq _02389D6C - mov r0, r5 - bl ResumeParentMenu -_02389D6C: - add sp, sp, #0x5c - ldmia sp!, {r4, r5, r6, r7, pc} - .align 2, 0 -_02389D74: .word DUNGEON_WINDOW_PARAMS_29 -_02389D78: .word 0x00001013 -#ifdef JAPAN -_02389D7C: .word 0x00000876 -#else -_02389D7C: .word 0x00000A3B -#endif - arm_func_end ov31_02389CC0 - - arm_func_start ov31_02389D80 -ov31_02389D80: ; 0x02389D80 - mov r1, #0 - str r1, [r0, #0xc8] - str r1, [r0, #0xcc] - str r1, [r0, #0xbc] - bx lr - arm_func_end ov31_02389D80 - ; 0x02389D94 - - .rodata - .global DUNGEON_WINDOW_PARAMS_1 -DUNGEON_WINDOW_PARAMS_1: - .byte 0x00, 0x00, 0x00, 0x00 -#ifdef EUROPE - .byte 0x02, 0x02, 0x07, 0x0C -#else - .byte 0x02, 0x02, 0x00, 0x0C -#endif - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_2 -DUNGEON_WINDOW_PARAMS_2: - .byte 0x00, 0x00, 0x00, 0x00, 0x0B, 0x04, 0x13, 0x02, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_3 -DUNGEON_WINDOW_PARAMS_3: - .byte 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word ov31_02382DAC - .word ov31_02382B54 - .global DUNGEON_WINDOW_PARAMS_4 -DUNGEON_WINDOW_PARAMS_4: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x1C, 0x06, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_MAIN_MENU_ITEMS -DUNGEON_MAIN_MENU_ITEMS: -#ifdef JAPAN -#define OV31_DATA_OFFSET 0x1458 -#else -#define OV31_DATA_OFFSET 0 -#endif - .word 0x8AD + OV31_DATA_OFFSET - .byte 0x00, 0x00, 0x00, 0x00 - .word 0x8AE + OV31_DATA_OFFSET - .byte 0x01, 0x00, 0x00, 0x00 - .word 0x8AF + OV31_DATA_OFFSET - .byte 0x02, 0x00, 0x00, 0x00 - .word 0x8B0 + OV31_DATA_OFFSET - .byte 0x03, 0x00, 0x00, 0x00 - .word 0x8B1 + OV31_DATA_OFFSET - .byte 0x04, 0x00, 0x00, 0x00 - .word 0x8B3 + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8B4 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .global DUNGEON_MENU_SWITCH_STR1 -DUNGEON_MENU_SWITCH_STR1: - .string "[dungeon:0]" - .global OVERLAY31_UNKNOWN_STRING_IDS -OVERLAY31_UNKNOWN_STRING_IDS: - .hword 0x8C7 + OV31_DATA_OFFSET - .global ov31_02389E22 -ov31_02389E22: - .hword 0x8CB + OV31_DATA_OFFSET - .hword 0x8C8 + OV31_DATA_OFFSET - .hword 0x8CC + OV31_DATA_OFFSET - .hword 0x8C9 + OV31_DATA_OFFSET - .hword 0x8CD + OV31_DATA_OFFSET - .hword 0x8CA + OV31_DATA_OFFSET - .hword 0x8CE + OV31_DATA_OFFSET - .global OVERLAY31_UNKNOWN_STRUCT__NA_2389E30 -OVERLAY31_UNKNOWN_STRUCT__NA_2389E30: - .byte 0x0E, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .word ov31_023832F0 - .word HandleStairsMenu - .global DUNGEON_WINDOW_PARAMS_5 -DUNGEON_WINDOW_PARAMS_5: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x02, 0x1C, 0x0D, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_6 -DUNGEON_WINDOW_PARAMS_6: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x02, 0x13, 0x04, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_7 -DUNGEON_WINDOW_PARAMS_7: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x17, 0x02, 0x07, 0x06, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_SUBMENU_ITEMS_1 -DUNGEON_SUBMENU_ITEMS_1: -#ifdef JAPAN -#define DUNGEON_SUBMENU_ITEMS_1_OFFSET 0x19D0 -#else -#define DUNGEON_SUBMENU_ITEMS_1_OFFSET 0 -#endif - .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET - .byte 0x01, 0x00, 0x00, 0x00 - .word 0x8CF + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8D0 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET - .byte 0x02, 0x00, 0x00, 0x00 - .word 0x8CF + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8D0 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .word 0x9C9 + DUNGEON_SUBMENU_ITEMS_1_OFFSET - .byte 0x03, 0x00, 0x00, 0x00 - .word 0x8CF + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8D0 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET - .byte 0x04, 0x00, 0x00, 0x00 - .word 0x8CF + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8D0 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .global OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 -OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0: - .byte 0x01, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_8 -DUNGEON_WINDOW_PARAMS_8: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_9 -DUNGEON_WINDOW_PARAMS_9: - .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x07, 0x00 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_10 -DUNGEON_WINDOW_PARAMS_10: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x08, 0x02 - .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_11 -DUNGEON_WINDOW_PARAMS_11: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x12, 0x02 - .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_12 -DUNGEON_WINDOW_PARAMS_12: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x13, 0x00 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_13 -DUNGEON_WINDOW_PARAMS_13: - .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x07, 0x00 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global ov31_02389F5C -ov31_02389F5C: - .byte 0x20, 0x20, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00 - .global OVERLAY31_JP_STRING -OVERLAY31_JP_STRING: - .byte 0x0A, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x81, 0x40, 0x20, 0x8F, 0x89, 0x8A, 0xFA, 0x83, 0x7C, 0x83 - .byte 0x57, 0x83, 0x56, 0x83, 0x87, 0x83, 0x93, 0x3D, 0x25, 0x64, 0x81, 0x40, 0x2D, 0x2D, 0x2D, 0x2D - .byte 0x2D, 0x20, 0x0A, 0x00 - .global DUNGEON_WINDOW_PARAMS_14 -DUNGEON_WINDOW_PARAMS_14: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x11, 0x1C, 0x05, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_15 -DUNGEON_WINDOW_PARAMS_15: - .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_16 -DUNGEON_WINDOW_PARAMS_16: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x1C, 0x04, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_17 -DUNGEON_WINDOW_PARAMS_17: - .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_18 -DUNGEON_WINDOW_PARAMS_18: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x13, 0x04, 0x00, 0xFE, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_19 -DUNGEON_WINDOW_PARAMS_19: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 -OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8: - .byte 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_20 -DUNGEON_WINDOW_PARAMS_20: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x0E, 0x12, 0x04, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_21 -DUNGEON_WINDOW_PARAMS_21: - .byte 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x10, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_22 -DUNGEON_WINDOW_PARAMS_22: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_23 -DUNGEON_WINDOW_PARAMS_23: - .byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x02, 0x0B, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_24 -DUNGEON_WINDOW_PARAMS_24: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0A, 0x02, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global ov31_0238A044 -ov31_0238A044: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x30, 0x5D, 0x00, 0x00 - .global ov31_0238A04C -ov31_0238A04C: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x31, 0x5D, 0x00, 0x00 - .global ov31_0238A054 -ov31_0238A054: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x32, 0x5D, 0x00, 0x00 - .global ov31_0238A05C -ov31_0238A05C: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x33, 0x5D, 0x00, 0x00 - .global ov31_0238A064 -ov31_0238A064: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x34, 0x5D, 0x00, 0x00 - .global ov31_0238A06C -ov31_0238A06C: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x35, 0x5D, 0x00, 0x00 - .global ov31_0238A074 -ov31_0238A074: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x36, 0x5D, 0x00, 0x00 - .global ov31_0238A07C -ov31_0238A07C: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x37, 0x5D, 0x00, 0x00 - .global ov31_0238A084 -ov31_0238A084: - .byte 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x5D, 0x5B, 0x43, 0x4C, 0x55, 0x4D, 0x5F - .byte 0x53, 0x45, 0x54, 0x3A, 0x38, 0x30, 0x5D, 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x31 - .byte 0x5D, 0x00, 0x00, 0x00 - .global ov31_0238A0A8 -ov31_0238A0A8: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x30, 0x5D, 0x00, 0x00 - .global ov31_0238A0B0 -ov31_0238A0B0: - .byte 0x5B, 0x4D, 0x3A, 0x48 - .byte 0x31, 0x5D, 0x00, 0x00 - .global ov31_0238A0B8 -ov31_0238A0B8: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x32, 0x5D, 0x00, 0x00 - .global ov31_0238A0C0 -ov31_0238A0C0: - .byte 0x5B, 0x4D, 0x3A, 0x48 - .byte 0x33, 0x5D, 0x00, 0x00 - .global ov31_0238A0C8 -ov31_0238A0C8: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x34, 0x5D, 0x00, 0x00 - .global ov31_0238A0D0 -ov31_0238A0D0: - .byte 0x5B, 0x4D, 0x3A, 0x48 - .byte 0x35, 0x5D, 0x00, 0x00 - .global ov31_0238A0D8 -ov31_0238A0D8: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x36, 0x5D, 0x00, 0x00 - .global ov31_0238A0E0 -ov31_0238A0E0: - .byte 0x5B, 0x4D, 0x3A, 0x48 - .byte 0x37, 0x5D, 0x00, 0x00 - .global ov31_0238A0E8 -ov31_0238A0E8: - .byte 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x5D, 0x5B, 0x43 - .byte 0x4C, 0x55, 0x4D, 0x5F, 0x53, 0x45, 0x54, 0x3A, 0x38, 0x30, 0x5D, 0x5B, 0x73, 0x74, 0x72, 0x69 - .byte 0x6E, 0x67, 0x3A, 0x31, 0x5D, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_25 -DUNGEON_WINDOW_PARAMS_25: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0C, 0x00 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_SUBMENU_ITEMS_5 -DUNGEON_SUBMENU_ITEMS_5: - .word 0x8C3 + OV31_DATA_OFFSET - .byte 0x01, 0x00, 0x00, 0x00 - .word 0x8C4 + OV31_DATA_OFFSET - .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .global DUNGEON_WINDOW_PARAMS_26 -DUNGEON_WINDOW_PARAMS_26: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x1C, 0x12, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_STRUCT__NA_238A144 -OVERLAY31_UNKNOWN_STRUCT__NA_238A144: - .byte 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word ov31_0238917C - .word RecruitmentSearchMenuLoop - .global ov31_0238A154 -ov31_0238A154: - .byte 0x5B, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x30, 0x3A, 0x33, 0x5D, 0x20, 0x5B, 0x43, 0x53, 0x3A - .byte 0x25, 0x63, 0x5D, 0x25, 0x73, 0x5B, 0x43, 0x52, 0x5D, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_27 -DUNGEON_WINDOW_PARAMS_27: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x02, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_28 -DUNGEON_WINDOW_PARAMS_28: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x02, 0x1C, 0x14, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_STRUCT__NA_238A190 -OVERLAY31_UNKNOWN_STRUCT__NA_238A190: - .byte 0x0E, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .word ov31_02389460 - .word HelpMenuLoop - .global DUNGEON_SUBMENU_ITEMS_6 -DUNGEON_SUBMENU_ITEMS_6: -#if defined(EUROPE) -#define DUNGEON_SUBMENU_6_OFFSET 2 -#elif defined(JAPAN) -#define DUNGEON_SUBMENU_6_OFFSET 0xA03 -#else -#define DUNGEON_SUBMENU_6_OFFSET 0 -#endif - .word 0x3FA8 + DUNGEON_SUBMENU_6_OFFSET - .byte 0x00, 0x00, 0x00, 0x00 - .word 0x3FA9 + DUNGEON_SUBMENU_6_OFFSET - .byte 0x01, 0x00, 0x00, 0x00 - .word 0x3FAA + DUNGEON_SUBMENU_6_OFFSET - .byte 0x02, 0x00, 0x00, 0x00 - .word 0x3FAB + DUNGEON_SUBMENU_6_OFFSET - .byte 0x03, 0x00, 0x00, 0x00 - .word 0x3FAC + DUNGEON_SUBMENU_6_OFFSET - .byte 0x04, 0x00, 0x00, 0x00 - .word 0x3FAD + DUNGEON_SUBMENU_6_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x3FAE + DUNGEON_SUBMENU_6_OFFSET - .byte 0x06, 0x00, 0x00, 0x00 - .word 0x3FAF + DUNGEON_SUBMENU_6_OFFSET - .byte 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xFF, 0xFF, 0xFF, 0xFF - .global DUNGEON_WINDOW_PARAMS_29 -DUNGEON_WINDOW_PARAMS_29: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_30 -DUNGEON_WINDOW_PARAMS_30: - .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_31 -DUNGEON_WINDOW_PARAMS_31: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x12, 0x00, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_32 -DUNGEON_WINDOW_PARAMS_32: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x0F, 0x02, 0x00, 0xFE, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global ov31_0238A228 -ov31_0238A228: - .byte 0x5B, 0x4D, 0x3A, 0x53, 0x32, 0x5D, 0x5B, 0x74, 0x61, 0x63, 0x74, 0x69 - .byte 0x63, 0x73, 0x3A, 0x30, 0x5D, 0x00, 0x00, 0x00 - .global ov31_0238A23C -ov31_0238A23C: - .byte 0x5B, 0x4D, 0x3A, 0x53, 0x31, 0x5D, 0x5B, 0x74 - .byte 0x61, 0x63, 0x74, 0x69, 0x63, 0x73, 0x3A, 0x30, 0x5D, 0x00, 0x00, 0x00 - - .data - .global OVERLAY31_UNKNOWN_POINTER__NA_238A260 -OVERLAY31_UNKNOWN_POINTER__NA_238A260: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x0A, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A268 -OVERLAY31_UNKNOWN_POINTER__NA_238A268: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A26C -OVERLAY31_UNKNOWN_POINTER__NA_238A26C: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A270 -OVERLAY31_UNKNOWN_POINTER__NA_238A270: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A27C -OVERLAY31_UNKNOWN_POINTER__NA_238A27C: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A280 -OVERLAY31_UNKNOWN_POINTER__NA_238A280: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A284 -OVERLAY31_UNKNOWN_POINTER__NA_238A284: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A288 -OVERLAY31_UNKNOWN_POINTER__NA_238A288: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A28C -OVERLAY31_UNKNOWN_POINTER__NA_238A28C: - .byte 0x00, 0x00, 0x00, 0x00 - - .bss - .global ov31_0238A2A0 -ov31_0238A2A0: - .space 0x8 - .global ov31_0238A2A8 -ov31_0238A2A8: - .space 0x18 diff --git a/asm/overlay_31_0238335C.s b/asm/overlay_31_0238335C.s new file mode 100644 index 00000000..e6e795e8 --- /dev/null +++ b/asm/overlay_31_0238335C.s @@ -0,0 +1,8988 @@ + .include "asm/macros.inc" + .include "overlay_31_0238335C.inc" + + .text + + arm_func_start ov31_0238335C +ov31_0238335C: ; 0x0238335C + stmdb sp!, {r4, lr} + ldr r1, _023833B0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 + mov r4, r0 + ldrb r0, [r1] + cmp r0, #0 + beq _02383390 + bl ov29_022E87DC + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, _023833B0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 + mov r1, #0 + strb r1, [r0] +_02383390: + cmp r4, #0 + beq _0238339C + blx r4 +_0238339C: + ldr r0, _023833B0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 + mov r1, #0 + strb r1, [r0, #1] + mov r0, #1 + ldmia sp!, {r4, pc} + .align 2, 0 +_023833B0: .word OVERLAY31_UNKNOWN_POINTER__NA_238A268 + arm_func_end ov31_0238335C + + arm_func_start ov31_023833B4 +ov31_023833B4: ; 0x023833B4 + stmdb sp!, {r3, lr} + cmp r0, #0 + beq _023833C4 + blx r0 +_023833C4: + ldr r0, _023833D4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 + mov r1, #0 + strb r1, [r0, #1] + ldmia sp!, {r3, pc} + .align 2, 0 +_023833D4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A268 + arm_func_end ov31_023833B4 + +; https://decomp.me/scratch/Q183B + arm_func_start ov31_023833D8 +ov31_023833D8: ; 0x023833D8 + stmdb sp!, {r3, lr} + sub sp, sp, #0x98 + ldr lr, _02383424 ; =ov31_02383328 + ldr r3, _02383428 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 + mov ip, #1 + str r0, [sp, #0x88] + strb ip, [r3, #1] + ldr r2, _0238342C ; =ov31_0238335C + add r1, sp, #0 + str lr, [sp, #0x84] + mov ip, #0 + mov r0, #0x100 + strb ip, [r3] + bl sub_020355DC + bl sub_0204AEA0 + ldr r1, _02383430 ; =ov31_0238A2A8 + strb r0, [r1] + add sp, sp, #0x98 + ldmia sp!, {r3, pc} + .align 2, 0 +_02383424: .word ov31_02383328 +_02383428: .word OVERLAY31_UNKNOWN_POINTER__NA_238A268 +_0238342C: .word ov31_0238335C +_02383430: .word ov31_0238A2A8 + arm_func_end ov31_023833D8 + + arm_func_start ov31_02383434 +ov31_02383434: ; 0x02383434 + stmdb sp!, {r3, lr} + sub sp, sp, #0x98 + ldr ip, _02383470 ; =ov31_023833B4 + ldr r3, _02383474 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 + mov r1, #1 + str r0, [sp, #0x88] + strb r1, [r3, #1] + add r2, sp, #0 + str ip, [sp, #0x84] + mov r0, #0 + mov r1, #0x100 + strb r0, [r3] + bl sub_02035CE4 + add sp, sp, #0x98 + ldmia sp!, {r3, pc} + .align 2, 0 +_02383470: .word ov31_023833B4 +_02383474: .word OVERLAY31_UNKNOWN_POINTER__NA_238A268 + arm_func_end ov31_02383434 + + arm_func_start ov31_02383478 +ov31_02383478: ; 0x02383478 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + movs r7, r1 + mov r8, r0 + mov r6, r2 + mov r4, #1 + bmi _023834AC + ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r1, #0 + ldr r0, [r0] + add r0, r0, r7 + add r0, r0, #0x1000 + strb r1, [r0, #0x1f8] +_023834AC: + ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r3, [r0] + add r0, r3, #0x1000 + ldr r2, [r0, #0x1b4] + cmp r2, #0 + beq _02383508 + cmp r7, #0 + blt _02383508 + ldr r1, _02383648 ; =BAG_ITEMS_PTR_MIRROR + mov r0, #6 + ldr r1, [r1] + ldr r1, [r1, #0x384] + mla r0, r7, r0, r1 + cmp r0, r2 + beq _023834F4 + ldrb r0, [r0, #1] + cmp r0, #0 + beq _02383508 +_023834F4: + add r0, r3, r7 + add r0, r0, #0x1000 + mov r1, #3 + strb r1, [r0, #0x1f8] + mov r4, #0 +_02383508: + ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r0] + add r0, r1, #0x1000 + ldrb r0, [r0, #0x1b2] + cmp r0, #0 + bne _02383528 + cmp r7, #0 + bge _023835B4 +_02383528: + add r0, r1, #0x1000 + ldr r1, [r0, #0x19c] + ldrsh r0, [r1, #4] + ldrsh r1, [r1, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + mov r1, r0 + ldrb r0, [r1] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02383590 + ldr r2, _0238364C ; =OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 + mov r5, #1 + mov r0, r8 + mov r3, r4 + str r5, [sp] + bl sub_0200D310 + ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x277] + b _02383638 +_02383590: + ldr r1, _02383650 ; =ov31_02389F5C + mov r0, r8 + bl strcpy + ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r1, #3 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x277] + b _02383638 +_023835B4: + mov r0, #6 + ldr r1, _02383648 ; =BAG_ITEMS_PTR_MIRROR + mul r5, r7, r0 + ldr r0, [r1] + ldr r1, [r0, #0x384] + ldrb r0, [r1, r5] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + addne r0, r1, r5 + ldrneb r1, [r0, #1] + cmpne r1, #0 + beq _02383624 + ldr r0, _02383654 ; =DUNGEON_PTR + sub r1, r1, #1 + ldr r0, [r0] + add r0, r0, r1, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + bl ov31_02383658 + cmp r0, #0 + bne _02383624 + ldr r0, _02383648 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r0, [r0, #0x384] + add r0, r0, r5 + bl sub_0200D894 +_02383624: + mov r0, r8 + mov r1, r7 + mov r2, r4 + mov r3, r6 + bl ov10_022BD394 +_02383638: + mov r0, r8 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02383644: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C +_02383648: .word BAG_ITEMS_PTR_MIRROR +_0238364C: .word OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 +_02383650: .word ov31_02389F5C +_02383654: .word DUNGEON_PTR + arm_func_end ov31_02383478 + + arm_func_start ov31_02383658 +ov31_02383658: ; 0x02383658 + cmp r0, #0 + moveq r0, #0 + bxeq lr + ldr r0, [r0] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + arm_func_end ov31_02383658 + + arm_func_start ov31_0238367C +ov31_0238367C: ; 0x0238367C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x5c + bl GetLeader + mov r1, #0 + mov r2, #0xb + bl GetItemToUse + ldrsh r1, [r0, #4] + mov r2, #0 + add lr, sp, #0xc + str r1, [sp, #0x1c] + ldrh r4, [r0, #2] + ldr r1, _02383720 ; =0x00001013 + ldr r3, _02383724 ; =0x000008E4 + str r4, [sp, #0x30] + ldrh r4, [r0, #2] + add r4, r4, #0xbc + str r4, [sp, #0x24] + str r2, [sp, #0x38] + str lr, [sp] + ldrsh r4, [r0, #4] + ldr r0, _02383728 ; =DUNGEON_WINDOW_PARAMS_8 +#if defined(EUROPE) + add ip, r4, #0xd3 + add r4, ip, #0x2900 +#elif defined(JAPAN) + add ip, r4, #0xce + add r4, ip, #0x4100 +#else + add ip, r4, #0xd1 + add r4, ip, #0x2900 +#endif + mov ip, r4, lsl #0x10 + mov r4, ip, lsr #0x10 + stmib sp, {r4, lr} + bl CreateScrollBoxSingle + mov r5, r0 + mov r4, #0x16 +_023836F0: + mov r0, r4 + bl AdvanceFrame + mov r0, r5 + bl IsScrollBoxActive + cmp r0, #0 + bne _023836F0 + mov r0, r5 + bl CloseScrollBox + mov r0, #0x16 + bl AdvanceFrame + add sp, sp, #0x5c + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02383720: .word 0x00001013 +#ifdef JAPAN +_02383724: .word 0x00001D3C +#else +_02383724: .word 0x000008E4 +#endif +_02383728: .word DUNGEON_WINDOW_PARAMS_8 + arm_func_end ov31_0238367C + + arm_func_start ov31_0238372C +ov31_0238372C: ; 0x0238372C + stmdb sp!, {r3, lr} + ldr r1, _02383764 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r1] + add r1, r1, #0x1000 + ldrb r1, [r1, #0x1b1] + cmp r1, #0 + beq _0238375C + add r0, r0, #4 + bl PositionHasItem + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, pc} +_0238375C: + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_02383764: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C + arm_func_end ov31_0238372C + + arm_func_start ov31_02383768 +ov31_02383768: ; 0x02383768 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + ldrsb r0, [r7] + mvn r1, #1 + cmp r0, r1 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + bl ov10_022BCD10 + cmp r0, #0 + beq _023837B4 + mvn r4, #3 + sub r5, r4, #1 + mov r6, #0x62 +_02383798: + mov r0, r6 + bl AdvanceFrame + ldrsb r0, [r7] + bl sub_020282F4 + cmp r0, r5 + cmpne r0, r4 + bne _02383798 +_023837B4: + ldrsb r0, [r7] + bl CloseInventoryMenu + mvn r0, #1 + strb r0, [r7] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end ov31_02383768 + + arm_func_start ov31_023837C8 +ov31_023837C8: ; 0x023837C8 + stmdb sp!, {r3, lr} + ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x92 + add r0, r0, #0x1100 + bl ov29_0234E988 + ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x94] + cmp r0, r1 + beq _02383800 + bl CloseTextBox2 +_02383800: + ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x95] + cmp r0, r1 + beq _02383820 + bl CloseTextBox2 +_02383820: + ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x93 + add r0, r0, #0x1100 + bl ov31_02383768 + ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + bl MemFree + ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02383850: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C + arm_func_end ov31_023837C8 + +; https://decomp.me/scratch/VL6fa + arm_func_start ov31_02383854 +ov31_02383854: ; 0x02383854 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, _0238387C ; =0x000008E6 + bl StringFromId + mov r1, #2 + mov r3, r0 + mov r0, r4 + mov r2, r1 + bl DrawTextInWindow + ldmia sp!, {r4, pc} + .align 2, 0 +#ifdef JAPAN +_0238387C: .word 0x00001D3E +#else +_0238387C: .word 0x000008E6 +#endif + arm_func_end ov31_02383854 + + arm_func_start ov31_02383880 +ov31_02383880: ; 0x02383880 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r5, #0 + mov r7, r0 + add r0, r5, #1 + ldr r8, _023838E0 ; =DUNGEON_PTR + strb r5, [r7] + and r6, r0, #0xff + mov r4, r5 +_023838A0: + ldr r0, [r8] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + bl ov31_02383658 + cmp r0, #0 + addeq r0, r7, r5 + streqb r4, [r0, #1] + addne r0, r7, r5 + addne r1, r6, #1 + strneb r6, [r0, #1] + add r5, r5, #1 + andne r6, r1, #0xff + cmp r5, #4 + blt _023838A0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_023838E0: .word DUNGEON_PTR + arm_func_end ov31_02383880 + + arm_func_start ov31_023838E4 +ov31_023838E4: ; 0x023838E4 +#ifdef JAPAN +#define OV31_023838E4_OFFSET -0xA4 +#else +#define OV31_023838E4_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x234 + sub sp, sp, #0x400 + mov r2, #0 + mov r5, r2 + str r2, [sp, #0x30] + mov sl, r0 + mov sb, r1 + mov r6, r5 + ldr r7, [sl, #0xb4] + bl ov29_022EBB4C + mov r0, #0x1280 + mov r1, #8 + bl MemAlloc + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r4, #1 + str r0, [r1] + add r0, r0, #0x1000 + str sl, [r0, #0x19c] + ldr r0, [r1] + add r3, r4, #1 + add r0, r0, #0x1000 + strb r4, [r0, #0x193] + ldr r0, [r1] + mov r2, #0 + add r0, r0, #0x1000 + strb r4, [r0, #0x192] + ldr r8, [r1] + mov r0, #1 + add r8, r8, #0x1000 + strb r4, [r8, #0x194] + ldr r8, [r1] + add r8, r8, #0x1000 + strb r4, [r8, #0x195] + ldr r4, [r1] + add r4, r4, #0x1000 + str r3, [r4, #0x198] + ldr r3, [r1] + add r3, r3, #0x1000 + str r2, [r3, #0x1ac] + ldr r3, [r1] + add r3, r3, #0x1000 + strb r0, [r3, #0x1b1] + ldr r0, [r1] + add r0, r0, #0x1000 + strb r2, [r0, #0x1b2] + ldr r0, [r1] + add r0, r0, #0x1000 + str r2, [r0, #0x1b4] + ldr r0, [r1] + add r0, r0, #0x278 + add r0, r0, #0x1000 + bl ov31_02383880 + cmp sb, #0 + beq _02383A1C + ldrb r0, [sb] + cmp r0, #0 + beq _023839E4 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [sb, #4] + ldr r0, [r0] + mov r6, #1 + add r0, r0, #0x1000 + str r1, [r0, #0x1b4] +_023839E4: + ldrb r0, [sb, #1] + cmp r0, #0 + ldreq r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + moveq r1, #0 + ldreq r0, [r0] + addeq r0, r0, #0x1000 + streqb r1, [r0, #0x1b1] + ldrb r0, [sb, #2] + cmp r0, #0 + ldrne r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + movne r1, #1 + ldrne r0, [r0] + addne r0, r0, #0x1000 + strneb r1, [r0, #0x1b2] +_02383A1C: + mov r0, #3 + bl Arm9LoadUnkFieldNa0x2029EC8 + mov r1, r0 + ldr r0, _0238489C ; =OVERLAY31_JP_STRING + bl Debug_Print0 + bl GetNbItemsInBag + ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + cmp r6, #0 + ldr r1, [r2] + add r1, r1, #0x1000 + str r0, [r1, #0x1a8] + ldrne r0, [r2] + movne r1, #0 + addne r0, r0, #0x1000 + strneb r1, [r0, #0x1b3] + bne _02383A74 + mov r0, sl + bl ov31_0238372C + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r1] + add r1, r1, #0x1000 + strb r0, [r1, #0x1b3] +_02383A74: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r2, [r0] + add r0, r2, #0x1000 + ldrb r1, [r0, #0x1b2] + cmp r1, #0 + ldreq r1, [r0, #0x1a8] + cmpeq r1, #0 + ldreqb r0, [r0, #0x1b3] + cmpeq r0, #0 + bne _02383AC4 + ldr r1, _023848A0 ; =0x000008E5 + mov r0, #0 + mov r2, #1 + bl DisplayMessage + bl ov31_023837C8 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #1 + b _0238511C +_02383AC4: + add r0, r2, #0x1000 + ldr r0, [r0, #0x1a8] + cmp r0, #0 + bne _02383B08 + mov r0, sl + bl ov31_0238372C + ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r3, #1 + ldr r1, [r2] + add r1, r1, #0x1000 + strb r0, [r1, #0x1b3] + ldr r0, [r2] + add r0, r0, #0x1000 + strb r3, [r0, #0x1b2] + ldr r0, [r2] + add r0, r0, #0x1000 + strb r3, [r0, #0x1b1] +_02383B08: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + cmp r0, r1 + beq _02383B48 + bl IsInventoryMenuActive + cmp r0, #0 + bne _02383D78 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCC7C + b _02383D78 +_02383B48: + bl GetNbItemsInBag + ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r4] + add r1, r1, #0x1000 + str r0, [r1, #0x1a8] + ldr r0, [r4] + add r0, r0, #0x1000 + ldr r0, [r0, #0x1a8] + cmp r0, #0 + beq _02383C44 + ldr fp, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + mov r8, #0 +_02383B78: + mov r0, #6 + mul r1, r8, r0 + ldr r0, [fp] + ldr r2, [r0, #0x384] + ldrb r0, [r2, r1] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02383BD8 + ldrb r0, [r2, r1] + tst r0, #4 + beq _02383BD8 + bic r0, r0, #4 + strb r0, [r2, r1] + ldr r1, [r4] + mov r0, #3 + add r1, r1, #0x1000 + str r8, [r1, #0x1ac] + ldr r1, [r4] + add r1, r1, #0x1000 + ldr r1, [r1, #0x1ac] + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 +_02383BD8: + add r8, r8, #1 + cmp r8, #0x32 + blt _02383B78 + ldr fp, _023848A8 ; =DUNGEON_PTR + mov r4, #0 +_02383BEC: + ldr r0, [fp] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r8, [r0, #0xb28 + OV31_023838E4_OFFSET] + mov r0, r8 + bl ov31_02383658 + cmp r0, #0 + beq _02383C38 + ldr r1, [r8, #0xb4] + ldrb r0, [r1, #0x62] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02383C38 + ldrb r0, [r1, #0x62] + tst r0, #4 + bicne r0, r0, #4 + strneb r0, [r1, #0x62] +_02383C38: + add r4, r4, #1 + cmp r4, #4 + blt _02383BEC +_02383C44: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r4, [r0] + add r0, r4, #0x1000 + ldrb r1, [r0, #0x1b2] + cmp r1, #0 + bne _02383D1C + ldr r0, [r0, #0x1a8] + cmp r0, #0 + beq _02383D1C + mov r0, #3 + bl Arm9LoadUnkFieldNa0x2029EC8 + ldr r2, _023848AC ; =ov31_02383478 + add r1, r4, #0x278 + str r2, [sp] + add r1, r1, #0x1000 + str r1, [sp, #4] + add r1, r4, #0x1000 + ldrb r2, [r1, #0x1b3] + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r3, r4, #0x1f8 + str r2, [sp, #8] + ldr r1, [r1] + mov r2, r0 + add r0, r1, #0x1000 + ldr r0, [r0, #0x1a8] + mov r1, r6 + add r3, r3, #0x1000 + bl ov10_022BD474 + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + cmp r6, #0 + ldr r1, [r1] + add r1, r1, #0x1000 + strb r0, [r1, #0x193] + beq _02383CEC + ldr r0, _023848B0 ; =DUNGEON_WINDOW_PARAMS_10 + ldr r1, _023848B4 ; =ov31_02383854 + bl CreateTextBox + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r1] + add r1, r1, #0x1000 + strb r0, [r1, #0x194] + b _02383D78 +_02383CEC: + ldr r0, _023848B8 ; =DUNGEON_WINDOW_PARAMS_11 + mov r1, #0 + bl CreateTextBox + ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r3, #0 + ldr r1, [r2] + add r1, r1, #0x1000 + strb r0, [r1, #0x195] + ldr r0, [r2] + add r0, r0, #0x1000 + str r3, [r0, #0x198] + b _02383D78 +_02383D1C: + ldr r3, _023848BC ; =0x000008E3 + add r0, sp, #0x540 + add r1, r4, #0x278 + strh r3, [r0, #0x64] + mov r2, #0x10 + str r2, [sp, #0x5a8] + add r0, r1, #0x1000 + str r0, [sp] + mov r4, #1 + str r4, [sp, #4] + add r2, sp, #0x500 + str r4, [sp, #8] + mov r4, #0 + ldr r0, _023848C0 ; =DUNGEON_WINDOW_PARAMS_12 + ldr r1, _023848C4 ; =0x00400813 + ldr r3, _023848AC ; =ov31_02383478 + add r2, r2, #0x9c + str r4, [sp, #0xc] + bl CreateInventoryMenu + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r1] + add r1, r1, #0x1000 + strb r0, [r1, #0x193] +_02383D78: + mvn r0, #0 + str r0, [sp, #0x38] + sub r0, r0, #1 + ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + str r0, [sp, #0x3c] +_02383D8C: + mov r0, #0x14 + bl AdvanceFrame + mov r0, #0 + add r1, sp, #0x42 + bl GetPressedButtons + ldr r1, [r4] + add r0, r1, #0x1000 + ldrb r0, [r0, #0x1b2] + cmp r0, #0 + bne _023843D0 + add r0, r1, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCE44 + mov fp, r0 + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl PopInventoryMenuField0x1A3 + str r0, [sp, #0x2c] + ldr r0, [r4] + add r1, r0, #0x1100 + ldrsb r8, [r1, #0x95] + ldr r0, [sp, #0x3c] + cmp r8, r0 + beq _02384054 + ldrsb r0, [r1, #0x93] + bl ov10_022BCE44 + cmp r0, #0 + ldr r0, [r4] + bne _02383F7C + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDA8 + str r0, [sp, #0x34] + ldr r0, [r4] + add r1, r0, #0x1000 + ldr r2, [r1, #0x198] + ldr r0, [sp, #0x34] + cmp r2, r0 + beq _02384054 + str r0, [r1, #0x198] + ldr r1, [r4] + mov r0, r8 + add r1, r1, #0x1000 + ldr r1, [r1, #0x19c] + str r1, [sp, #0x28] + bl sub_02027B1C + ldr r1, [sp, #0x34] + mov r0, #6 + mul r2, r1, r0 + ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r0, [r0, #0x384] + add r1, r0, r2 + ldrb r0, [r0, r2] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02383F28 + ldrb r0, [r1, #1] + str r0, [sp, #0x10] + cmp r0, #0 + beq _02383F00 + ldr r1, _023848A8 ; =DUNGEON_PTR + add r0, sp, #0x400 + ldr r3, [r1] + ldr r1, [sp, #0x10] + add r0, r0, #0x4c + add r1, r3, r1, lsl #2 + add r1, r1, #0x12000 + ldr r1, [r1, #0xb24 + OV31_023838E4_OFFSET] + mov r2, #0 + bl ov29_022E2A78 + add r0, sp, #0x400 + add r0, r0, #0x4c + str r0, [sp, #0x584] + add r0, sp, #0x500 +#ifdef JAPAN + ldr r2, [sp, #0x38] + add r0, r0, #0x4c + str r0, [sp] + add r0, sp, #0x4c + mov r1, #0x400 + add r2, r2, #0x1d40 +#else + add r0, r0, #0x4c + str r0, [sp] + ldr r2, _023848C8 ; =0x000008E7 + add r0, sp, #0x4c + mov r1, #0x400 +#endif + mov r3, #0 + bl PreprocessStringFromId + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r1, [r0] + ldr r0, [sp, #0x10] + add r0, r1, r0, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb24 + OV31_023838E4_OFFSET] + str r0, [sp, #0x28] + b _02383F34 +_02383F00: + ldrsh r0, [r1, #4] +#if defined(EUROPE) + add r0, r0, #0x4b + add r0, r0, #0x2f00 +#elif defined(JAPAN) + add r0, r0, #0x41 + add r0, r0, #0x1d00 +#else + add r0, r0, #0x49 + add r0, r0, #0x2f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r1, r0 + add r0, sp, #0x4c + bl strcpy + b _02383F34 +_02383F28: + ldr r1, _023848CC ; =ov31_02389F5C + add r0, sp, #0x4c + bl strcpy +_02383F34: + mov r1, #2 + mov r0, r8 + mov r2, r1 + add r3, sp, #0x4c + bl DrawTextInWindow + mov r0, r8 + bl UpdateWindow + ldr r0, [sp, #0x28] + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + ldr r0, [sp, #0x28] + mov r2, #1 + add r0, r0, #4 + mov r1, #0 + mov r3, r2 + bl DrawTileGrid + b _02384054 +_02383F7C: + add r0, r0, #0x1000 + ldr r1, [r0, #0x198] + cmp r1, #0x7f + beq _02384054 + ldr r1, [r0, #0x19c] + ldrsh r0, [r1, #4] + ldrsh r1, [r1, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _02383FE4 + ldrsh r0, [r0, #4] +#if defined(EUROPE) + add r0, r0, #0x4b + add r0, r0, #0x2f00 +#elif defined(JAPAN) + add r0, r0, #0x41 + add r0, r0, #0x1d00 +#else + add r0, r0, #0x49 + add r0, r0, #0x2f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r1, r0 + add r0, sp, #0x4c + bl strcpy + b _02383FF0 +_02383FE4: + ldr r1, _023848CC ; =ov31_02389F5C + add r0, sp, #0x4c + bl strcpy +_02383FF0: + mov r0, r8 + bl sub_02027B1C + mov r1, #2 + mov r0, r8 + mov r2, r1 + add r3, sp, #0x4c + bl DrawTextInWindow + mov r0, r8 + bl UpdateWindow + ldr r0, [r4] + mov r1, #0 + add r2, r0, #0x1000 + mov r0, #0x7f + str r0, [r2, #0x198] + ldr r0, [r4] + mov r2, #1 + add r0, r0, #0x1000 + ldr r8, [r0, #0x19c] + mov r0, r8 + bl TryPointCameraToMonster + mov r2, #1 + add r0, r8, #4 + mov r1, #0 + mov r3, r2 + bl DrawTileGrid +_02384054: + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl IsInventoryMenuActive + cmp r0, #0 + beq _02384088 + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDA8 + and r1, r0, #0xff + mov r0, #3 + bl Arm9StoreUnkFieldNa0x2029ED8 +_02384088: + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl IsInventoryMenuActive + cmp r0, #0 + bne _023841A4 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDBC + movs r4, r0 + bmi _0238419C + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + and r1, r4, #0xff + ldr r2, [r0] + mov r0, #3 + add r2, r2, #0x1000 + str r4, [r2, #0x1ac] + bl Arm9StoreUnkFieldNa0x2029ED8 + cmp fp, #0 + bne _02384138 + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r0, #6 + ldr r1, [r1] + mul r8, r4, r0 + add r0, r1, #0x1000 + ldrb r3, [r0, #0x1b2] + ldr r2, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + add r1, sl, #4 + str r3, [sp] + ldr r2, [r2] + ldr r0, [r0, #0x1ac] + ldr r2, [r2, #0x384] + mov r3, #0 + add r2, r2, r8 + ldrb r2, [r2, #1] + bl ov29_022EBAB0 + ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r0, [r0, #0x384] + add r0, r0, r8 + str r0, [sb, #4] + b _02384194 +_02384138: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r1, sl, #4 + ldr r0, [r0] + mov r2, #0 + add r0, r0, #0x1000 + ldrb r4, [r0, #0x1b2] + mov r3, #1 + str r4, [sp] + ldr r0, [r0, #0x1ac] + bl ov29_022EBAB0 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + strne r0, [sb, #4] + moveq r0, #0 + streq r0, [sb, #4] +_02384194: + mov r4, #1 + b _02384438 +_0238419C: + mov r4, #2 + b _02384438 +_023841A4: + ldrh r0, [sp, #0x42] + tst r0, #8 + beq _023842DC + ldr r0, _023848D0 ; =0x00003F04 + bl sub_02017C80 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDF4 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDBC + ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r2] + add r1, r1, #0x1000 + str r0, [r1, #0x1ac] + ldr r1, [r2] + mov r0, #3 + add r1, r1, #0x1000 + ldr r1, [r1, #0x1ac] + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 + cmp fp, #0 + bne _02384278 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r3, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + mov r2, #6 + add r0, r0, #0x1000 + ldrb r4, [r0, #0x1b2] + ldr r0, [r0, #0x1ac] + add r1, sl, #4 + str r4, [sp] + ldr r4, [r3] + mov r3, #0 + ldr r4, [r4, #0x384] + mla r2, r0, r2, r4 + ldrb r2, [r2, #1] + bl ov29_022EBAB0 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r1, [r1] + add r0, r0, #0x1000 + ldr r2, [r1, #0x384] + ldr r1, [r0, #0x1ac] + mov r0, #6 + mla r0, r1, r0, r2 + str r0, [sb, #4] + b _023842D4 +_02384278: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r1, sl, #4 + ldr r0, [r0] + mov r2, #0 + add r0, r0, #0x1000 + ldrb r4, [r0, #0x1b2] + mov r3, #1 + str r4, [sp] + ldr r0, [r0, #0x1ac] + bl ov29_022EBAB0 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + strne r0, [sb, #4] + moveq r0, #0 + streq r0, [sb, #4] +_023842D4: + mov r4, #3 + b _02384438 +_023842DC: + tst r0, #4 + bne _023842F4 + tst r0, #0x800 + ldreq r0, [sp, #0x2c] + cmpeq r0, #0 + beq _02383D8C +_023842F4: + cmp r6, #0 + cmpeq fp, #0 + bne _02383D8C + ldr r0, [sp, #0x2c] + cmp r0, #0 + bne _02384314 + mov r0, #5 + bl PlaySeVolumeWrapper +_02384314: + bl ov29_02346E5C + bl SortItemsInBag + mov r8, #0 +_02384320: + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r8, lsl #2 + add r0, r0, #0x12000 + ldr fp, [r0, #0xb28 + OV31_023838E4_OFFSET] + mov r0, fp + bl ov31_02383658 + cmp r0, #0 + beq _02384374 + ldr r1, [fp, #0xb4] + ldrb r0, [r1, #0x62] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02384374 + ldrsh r0, [r1, #0x66] + cmp r0, #0xb7 + bne _02384374 + add r0, r1, #0x62 + bl ItemZInit +_02384374: + add r8, r8, #1 + cmp r8, #4 + blt _02384320 + ldr r0, [r4] + add r1, r0, #0x1000 + ldr r0, [sp, #0x38] + str r0, [r1, #0x198] + bl GetNbItemsInBag + movs r1, r0 + beq _023843C0 + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCC60 + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCCB0 + b _02383D8C +_023843C0: + mov r0, #1 + str r0, [sp, #0x30] + mov r4, #2 + b _02384438 +_023843D0: + add r0, r1, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDF4 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r1, sl, #4 + ldr r0, [r0] + mov r2, #0 + add r0, r0, #0x1000 + ldrb r4, [r0, #0x1b2] + mov r3, #1 + str r4, [sp] + ldr r0, [r0, #0x1ac] + bl ov29_022EBAB0 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + ldrb r1, [r0] + mov r4, #1 + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + moveq r0, #0 + str r0, [sb, #4] +_02384438: + mov r0, #0x14 + bl AdvanceFrame + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r0] + add r0, r1, #0x1000 + ldrb r0, [r0, #0x1b2] + cmp r0, #0 + bne _02384490 + add r0, r1, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCE44 + cmp r0, #0 + bne _02384490 + ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r0, [r0, #0x384] + ldrb r0, [r0] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + moveq r4, #2 +_02384490: + cmp r4, #2 + bne _023844AC + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #1 + b _023850D8 +_023844AC: + cmp r4, #0 + beq _023850D8 + cmp r4, #3 + bne _023844D8 + add r0, r7, #0x4a + bl ov29_022EBBE8 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_023844D8: + cmp r6, #0 + beq _023844FC + add r0, r7, #0x54 + bl ov29_022EBB68 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_023844FC: + bl ov29_022EBB8C + mov r1, r0 + mov r0, sl + mov r2, #0xa + bl GetItemToUseByIndex + mov r8, r0 + ldr r0, [sl, #0xb4] + str r0, [sp, #0x14] + bl ov29_022EBA70 + bl ov29_022EBB98 + cmp r0, #0x90 + bhs _023849F4 + bl ov29_022EBB98 + cmp r0, #0x80 + bne _02384598 + ldrsh r1, [r8, #4] + mov r0, #9 + bl AddDungeonSubMenuOption + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #6 + beq _02384598 + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _02384570 + bl IsBagFull + b _02384588 +_02384570: + ldr r0, [sp, #0x14] + ldrb r0, [r0, #0x62] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_02384588: + cmp r0, #0 + beq _02384598 + mov r0, #9 + bl DisableDungeonSubMenuOption +_02384598: + bl ov29_022EBB98 + cmp r0, #0x80 + bne _023845C4 + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _023845C4 + ldrsh r1, [r8, #4] + mov r0, #0xa + bl AddDungeonSubMenuOption +_023845C4: + mov r0, r8 + bl GetItemAction + movs r4, r0 + beq _02384654 + ldrsh r1, [r8, #4] + bl AddDungeonSubMenuOption + ldrb r0, [r8] + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _023845FC + mov r0, r4 + bl DisableDungeonSubMenuOption +_023845FC: + mov r0, r8 + bl ov29_023468FC + cmp r0, #0 + bne _02384614 + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384614: + mov r0, sl + bl MonsterHasEmbargoStatus + cmp r0, #0 + bne _02384634 + mov r0, r8 + bl ov29_02348D00 + cmp r0, #0 + beq _0238463C +_02384634: + mov r0, r4 + bl DisableDungeonSubMenuOption +_0238463C: + mov r0, r8 + bl IsItemUsableNow + cmp r0, #0 + bne _02384654 + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384654: + bl ov29_022EBB98 + cmp r0, #0x33 + bhs _02384728 + ldrb r0, [r8, #1] + cmp r0, #0 + bne _02384728 + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #0 + beq _0238468C + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #1 + bne _02384728 +_0238468C: + ldrb r0, [r8] + ldrsh r1, [r8, #4] + tst r0, #0x10 + beq _023846A8 + mov r0, #0x3d + bl AddDungeonSubMenuOption + b _023846B0 +_023846A8: + mov r0, #0x3c + bl AddDungeonSubMenuOption +_023846B0: + ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + mov r3, #0 + ldr r4, [r0] + mov lr, #1 + mov r0, #6 + b _02384720 +_023846C8: + mul r1, r3, r0 + ldr r2, [r4, #0x384] + ldrb fp, [r2, r1] + tst fp, #1 + movne ip, lr + moveq ip, #0 + tst ip, #0xff + beq _0238471C + ldrb r1, [r2, r1] + tst r1, #0x10 + beq _0238471C + tst fp, #8 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _0238471C + mov r0, #0x3c + bl DisableDungeonSubMenuOption + mov r0, #0x3d + bl DisableDungeonSubMenuOption + b _02384728 +_0238471C: + add r3, r3, #1 +_02384720: + cmp r3, #0x32 + blt _023846C8 +_02384728: + bl ov29_022EBB98 + cmp r0, #0x81 + beq _02384804 + bl ov29_022EBB98 + cmp r0, #0x80 + beq _02384860 + ldrsh r1, [r8, #4] + mov r2, #0 + mov r0, #0x36 + str r2, [sp, #0x18] + bl AddDungeonSubMenuOption + mov r4, #0 +_02384758: + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] + str r0, [sp, #0x1c] + bl ov31_02383658 + cmp r0, #0 + beq _023847A0 + ldr r0, [sp, #0x1c] + mov r1, #0 + ldr fp, [r0, #0xb4] +#ifdef JAPAN + strb r1, [fp, #0x15d] +#else + strb r1, [fp, #0x161] +#endif + bl ov29_02300BF8 + cmp r0, #0 + moveq r0, #1 + streq r0, [sp, #0x18] +#ifdef JAPAN + streqb r0, [fp, #0x15d] +#else + streqb r0, [fp, #0x161] +#endif +_023847A0: + add r4, r4, #1 + cmp r4, #4 + blt _02384758 + add r0, sp, #0x40 + bl sub_0204F10C + cmp r0, #0 + beq _023847EC + bl GetCurrentBagCapacity + cmp r0, #2 + bge _023847EC + ldrsh r0, [sp, #0x40] + sub r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #1 + movls r0, #0 + strls r0, [sp, #0x18] +_023847EC: + ldr r0, [sp, #0x18] + cmp r0, #0 + bne _02384860 + mov r0, #0x36 + bl DisableDungeonSubMenuOption + b _02384860 +_02384804: + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _02384860 + ldrsh r1, [r8, #4] + mov r0, #0x37 + bl AddDungeonSubMenuOption + mov r0, r8 + bl IsHeldItemInBag + cmp r0, #0 + beq _02384840 + ldrsh r1, [r8, #4] + mov r0, #0x3e + bl AddDungeonSubMenuOption +_02384840: + mov r0, sl + bl CheckVariousConditions + cmp r0, #0 + beq _02384860 + mov r0, #0x37 + bl DisableDungeonSubMenuOption + mov r0, #0x3e + bl DisableDungeonSubMenuOption +_02384860: + bl ov29_022EBB98 + cmp r0, #0x33 + bhs _02384908 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + bl GetTile + mov r4, r0 + ldr r0, [r4, #0x10] + cmp r0, #0 + bne _023848D4 + ldrsh r1, [r8, #4] + mov r0, #8 + bl AddDungeonSubMenuOption + b _02384908 + .align 2, 0 +#ifdef JAPAN +#define OV31_023838E4_OFFSET_2 0x1458 +#else +#define OV31_023838E4_OFFSET_2 0 +#endif +_02384898: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C +_0238489C: .word OVERLAY31_JP_STRING +_023848A0: .word 0x000008E5 + OV31_023838E4_OFFSET_2 +_023848A4: .word BAG_ITEMS_PTR_MIRROR +_023848A8: .word DUNGEON_PTR +_023848AC: .word ov31_02383478 +_023848B0: .word DUNGEON_WINDOW_PARAMS_10 +_023848B4: .word ov31_02383854 +_023848B8: .word DUNGEON_WINDOW_PARAMS_11 +_023848BC: .word 0x000008E3 + OV31_023838E4_OFFSET_2 +_023848C0: .word DUNGEON_WINDOW_PARAMS_12 +_023848C4: .word 0x00400813 +#ifndef JAPAN +_023848C8: .word 0x000008E7 +#endif +_023848CC: .word ov31_02389F5C +_023848D0: .word 0x00003F04 +_023848D4: + ldr r0, [r0] + cmp r0, #3 + bne _02384908 + ldrsh r1, [r8, #4] + mov r0, #0x3a + bl AddDungeonSubMenuOption + ldr r0, [r4, #0x10] + bl ov29_022E1620 + bl ov29_02348D00 + cmp r0, #0 + beq _02384908 + mov r0, #0x3a + bl DisableDungeonSubMenuOption +_02384908: + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #0 + bne _02384928 + ldrsh r1, [r8, #4] + mov r0, #0x27 + bl AddDungeonSubMenuOption + b _02384950 +_02384928: + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #1 + ldrsh r1, [r8, #4] + bne _02384948 + mov r0, #0x41 + bl AddDungeonSubMenuOption + b _02384950 +_02384948: + mov r0, #0xb + bl AddDungeonSubMenuOption +_02384950: + ldr r0, [sp, #0x14] + bl MonsterCanThrowItems + cmp r0, #0 + bne _02384978 + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption + mov r0, #0xb + bl DisableDungeonSubMenuOption +_02384978: + mov r0, sl + bl MonsterHasEmbargoStatus + cmp r0, #0 + beq _023849A0 + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption + mov r0, #0xb + bl DisableDungeonSubMenuOption +_023849A0: + mov r0, r8 + bl ov29_02348D00 + cmp r0, #0 + beq _023849D8 + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption + mov r0, #0xb + bl DisableDungeonSubMenuOption + mov r0, #0xa + bl DisableDungeonSubMenuOption + mov r0, #9 + bl DisableDungeonSubMenuOption +_023849D8: + mov r0, r8 + bl IsItemUsableNow + cmp r0, #0 + bne _02384C48 + mov r0, #0xb + bl DisableDungeonSubMenuOption + b _02384C48 +_023849F4: + bl ov29_022EBB98 + ldr r1, _023848A8 ; =DUNGEON_PTR + sub r2, r0, #0x90 + ldr r0, [r1] + add r0, r0, r2, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] + str r0, [sp, #0x20] + bl ov31_02383658 + cmp r0, #0 + beq _02384C48 + mov r0, #0 + str r0, [sp, #0x24] + ldr r0, [sp, #0x20] + ldr r4, [sp, #0x24] + mov r1, r0 + ldr fp, [r1, #0xb4] + bl CheckVariousConditions + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #0x24] + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #5 + ldrsh r0, [r8, #4] + moveq r4, #1 + bl GetItemCategoryVeneer + cmp r0, #9 + ldr r0, _023848A8 ; =DUNGEON_PTR + moveq r4, #1 + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _02384AC0 + ldrsh r1, [r8, #4] + mov r0, #0x37 + bl AddDungeonSubMenuOption + mov r0, r8 + bl IsHeldItemInBag + cmp r0, #0 + beq _02384AA4 + ldrsh r1, [r8, #4] + mov r0, #0x3e + bl AddDungeonSubMenuOption +_02384AA4: + ldr r0, [sp, #0x24] + cmp r0, #0 + beq _02384AC0 + mov r0, #0x37 + bl DisableDungeonSubMenuOption + mov r0, #0x3e + bl DisableDungeonSubMenuOption +_02384AC0: + ldrb r0, [fp, #7] + cmp r0, #0 + beq _02384BEC + mov r0, r8 + bl GetItemAction + movs r4, r0 + beq _02384B5C + ldrsh r1, [r8, #4] + bl AddDungeonSubMenuOption + ldrb r0, [r8] + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02384B04 + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384B04: + mov r0, r8 + bl ov29_023468FC + cmp r0, #0 + bne _02384B1C + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384B1C: + ldr r0, [sp, #0x20] + bl MonsterHasEmbargoStatus + cmp r0, #0 + bne _02384B3C + mov r0, r8 + bl ov29_02348D00 + cmp r0, #0 + beq _02384B44 +_02384B3C: + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384B44: + mov r0, r8 + bl IsItemUsableNow + cmp r0, #0 + bne _02384B5C + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384B5C: + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #0 + bne _02384B7C + ldrsh r1, [r8, #4] + mov r0, #0x27 + bl AddDungeonSubMenuOption + b _02384B98 +_02384B7C: + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #1 + bne _02384B98 + ldrsh r1, [r8, #4] + mov r0, #0x41 + bl AddDungeonSubMenuOption +_02384B98: + ldr r0, [sp, #0x14] + bl MonsterCanThrowItems + cmp r0, #0 + bne _02384BB8 + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption +_02384BB8: + mov r0, sl + bl MonsterHasEmbargoStatus + cmp r0, #0 + bne _02384BD8 + mov r0, sl + bl MonsterHasEmbargoStatus + cmp r0, #0 + beq _02384C48 +_02384BD8: + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption + b _02384C48 +_02384BEC: + ldrsh r1, [r8, #4] + mov r0, #0x38 + bl AddDungeonSubMenuOption + cmp r4, #0 + beq _02384C08 + mov r0, #0x38 + bl DisableDungeonSubMenuOption +_02384C08: + ldr r0, [sp, #0x20] + bl MonsterHasEmbargoStatus + cmp r0, #0 + bne _02384C28 + mov r0, r8 + bl ov29_02348D00 + cmp r0, #0 + beq _02384C30 +_02384C28: + mov r0, #0x38 + bl DisableDungeonSubMenuOption +_02384C30: + mov r0, r8 + bl IsItemUsableNow + cmp r0, #0 + bne _02384C48 + mov r0, #0x38 + bl DisableDungeonSubMenuOption +_02384C48: + ldrsh r1, [r8, #4] + mov r0, #0xc + bl AddDungeonSubMenuOption + bl ov29_022EB9A0 + bl ov29_022EBA84 + mov r2, #0 + ldr r1, _02385128 ; =ov29_0237C91C + ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + b _02384C9C +_02384C6C: + add r8, r1, r2, lsl #3 + ldr r3, [r4] + ldrh r8, [r8, #6] + add r3, r3, r2, lsl #3 + add r3, r3, #0x1100 + strh r8, [r3, #0x38] + mov r8, r2, lsl #3 + ldr r3, [r4] + add r2, r2, #1 + add r3, r3, r8 + add r3, r3, #0x1000 + str r2, [r3, #0x13c] +_02384C9C: + cmp r2, r0 + blt _02384C6C + ldr r3, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C +#ifdef JAPAN + mov r4, #0x1d40 +#else + ldr r4, _0238512C ; =0x000008E8 +#endif + ldr r1, [r3] + mvn r0, #0 + add r1, r1, r2, lsl #3 + add r1, r1, #0x1100 + strh r4, [r1, #0x38] + ldr r1, [r3] + mov r4, #0 + add r1, r1, r2, lsl #3 + add r1, r1, #0x1000 + str r0, [r1, #0x13c] + ldr r1, [r3] + add r1, r1, r2, lsl #3 + add r1, r1, #0x1100 + strh r4, [r1, #0x40] + ldr r1, [r3] + add r1, r1, r2, lsl #3 + add r1, r1, #0x1000 + str r0, [r1, #0x144] + ldr r0, [r3] + add r0, r0, #0x92 + add r0, r0, #0x1100 + bl ov29_0234E988 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r2, r4 + ldr r1, [r0] + add r0, r1, #0x138 + add r1, r1, #0x188 + add r0, r0, #0x1000 + add r1, r1, #0x1000 + bl ov31_0238513C + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r2, sp, #0x500 + ldr r1, [r0] + add r2, r2, #0x9c + add r0, r1, #0x188 + add r0, r0, #0x1000 + str r0, [sp, #0x5fc] + add r0, r1, #0x1000 + add r3, r1, #0x138 + ldrb r0, [r0, #0x1b2] + ldr r1, _02385130 ; =0x00000213 + add r3, r3, #0x1000 + cmp r0, #0 + ldrne r0, _02385134 ; =DUNGEON_WINDOW_PARAMS_13 + ldreq r0, _02385138 ; =DUNGEON_WINDOW_PARAMS_9 + bl CreateParentMenuFromStringIds + ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r8, #0x14 + ldr r1, [r4] + add r1, r1, #0x1000 + strb r0, [r1, #0x192] +_02384D78: + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x92] + bl IsParentMenuActive + cmp r0, #0 + bne _02384E24 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x92] + bl sub_0202ABB0 + cmp r0, #0 + blt _02384E04 + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + sub r2, r0, #1 + ldr r0, [r1] + add r0, r0, #0x1000 + str r2, [r0, #0x1a4] + ldr r0, [r1] + add r0, r0, #0x1000 + ldr r0, [r0, #0x1a4] + bl ov29_022EB804 + cmp r0, #0 + mov r4, #0 + beq _02384E30 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r2, _02385128 ; =ov29_0237C91C + ldr r1, [r0] + add r0, r7, #0x4a + add r1, r1, #0x1000 + ldr r1, [r1, #0x1a4] + mov r1, r1, lsl #3 + ldrh r1, [r2, r1] + bl ov29_022EBBA8 + b _02384E30 +_02384E04: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r4, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + ldrb r0, [r0, #0x1b2] + cmp r0, #0 + movne r4, #2 + b _02384E30 +_02384E24: + mov r0, r8 + bl AdvanceFrame + b _02384D78 +_02384E30: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x92 + add r0, r0, #0x1100 + bl ov29_0234E988 + ldr r0, _023848A8 ; =DUNGEON_PTR + mov r1, #0 + ldr r0, [r0] + cmp r4, #1 + add r0, r0, #0x1a000 +#ifdef JAPAN + strb r1, [r0, #0x1a3] +#else + strb r1, [r0, #0x247] +#endif + ldreq r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldreq r0, [r0] + addeq r0, r0, #0x1000 + ldreqb r0, [r0, #0x1b2] + cmpeq r0, #0 + beq _02383B08 + cmp r4, #2 + bne _02384E90 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #1 + b _023850D8 +_02384E90: + ldrh r0, [r7, #0x4a] + cmp r0, #0x38 + cmpne r0, #0x37 + cmpne r0, #0x3e + bne _02384EC4 + bl ov29_022EBB98 + sub r2, r0, #0x90 + mov r0, #0xb + mov r1, #0 + strb r2, [r7, #0x4e] + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_02384EC4: + cmp r0, #0x36 + bne _02384FA0 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x94] + cmp r0, r1 + beq _02384F00 + bl CloseTextBox2 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x194] +_02384F00: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x95] + cmp r0, r1 + beq _02384F34 + bl CloseTextBox2 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x195] +_02384F34: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x93 + add r0, r0, #0x1100 + bl ov31_02383768 + mov r0, #0x62 + bl AdvanceFrame + add r0, sp, #0x48 + mov r1, #2 + mov r2, #0 +#ifndef JAPAN + mov r3, #1 +#endif + bl ov31_023877EC + cmp r0, #0 + beq _02384F88 + ldr r2, [sp, #0x48] + mov r0, #0 + mov r1, r0 + strb r2, [r7, #0x54] + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_02384F88: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #1 + bl ov29_022EB398 + b _02383B08 +_02384FA0: + cmp r0, #0x12 + beq _02384FC0 + add r0, r0, #0xf3 + add r0, r0, #0xff00 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #1 + bhi _023850C8 +_02384FC0: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x94] + cmp r0, r1 + beq _02384FF4 + bl CloseTextBox2 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x194] +_02384FF4: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x95] + cmp r0, r1 + beq _02385028 + bl CloseTextBox2 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x195] +_02385028: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x93 + add r0, r0, #0x1100 + bl ov31_02383768 + mov r0, #0x62 + bl AdvanceFrame + mov r0, #0x62 + bl AdvanceFrame +#ifdef JAPAN + add r0, sp, #0x44 + mov r1, #3 + mov r2, #1 +#else + mov r2, #1 + add r0, sp, #0x44 + mov r1, #3 + mov r3, r2 +#endif + bl ov31_023877EC + cmp r0, #0 + beq _023850B0 + ldr r1, [sp, #0x44] + ldr r0, _023848A8 ; =DUNGEON_PTR + strb r1, [r7, #0x54] + ldr r2, [r0] + ldr r0, [sp, #0x44] + mov r1, #0 + add r0, r2, r0, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] + mov r2, #1 + bl TryPointCameraToMonster + mov r0, #0 + mov r2, #1 + mov r1, r0 +#ifdef JAPAN + strb r2, [r7, #0x238] +#else + strb r2, [r7, #0x23c] +#endif + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_023850B0: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #1 + bl ov29_022EB398 + b _02383B08 +_023850C8: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #0 +_023850D8: + ldr r0, _023848A8 ; =DUNGEON_PTR + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x1a000 + strb r1, [r0, #0x247 + OV31_023838E4_OFFSET] + bl HideTileGrid + bl ov31_023837C8 + mov r0, #0x14 + bl AdvanceFrame + ldr r0, [sp, #0x30] + cmp r0, #0 + beq _02385118 + ldr r1, _023848A0 ; =0x000008E5 + mov r0, #0 + mov r2, #1 + bl DisplayMessage +_02385118: + mov r0, r5 +_0238511C: + add sp, sp, #0x234 + add sp, sp, #0x400 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02385128: .word ov29_0237C91C +#ifndef JAPAN +_0238512C: .word 0x000008E8 +#endif +_02385130: .word 0x00000213 +_02385134: .word DUNGEON_WINDOW_PARAMS_13 +_02385138: .word DUNGEON_WINDOW_PARAMS_9 + arm_func_end ov31_023838E4 + + arm_func_start ov31_0238513C +ov31_0238513C: ; 0x0238513C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + bl ov29_022EBA84 + mov r4, #0 + mov r5, r0 + mov sb, #3 + mov sl, r4 + b _02385190 +_02385164: + mov r0, r4 + mov r1, r6 + bl ov29_022EB2C8 + mov r1, r4, lsl #3 + strh r0, [r8, r1] + mov r0, r4 + bl ov29_022EB804 + cmp r0, #0 + strneb sl, [r7, r4] + streqb sb, [r7, r4] + add r4, r4, #1 +_02385190: + cmp r4, r5 + blt _02385164 +#ifdef JAPAN + mov r1, r4, lsl #3 + mov r2, #0x1d40 +#else + ldr r2, _023851BC ; =0x000008E8 + mov r1, r4, lsl #3 +#endif + add r0, r4, #1 + strh r2, [r8, r1] + mov r1, #0 + strb r1, [r7, r4] + mov r0, r0, lsl #3 + strh r1, [r8, r0] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +#ifndef JAPAN + .align 2, 0 +_023851BC: .word 0x000008E8 +#endif + arm_func_end ov31_0238513C + + arm_func_start MovesMenu +MovesMenu: ; 0x023851C0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0xc + ldr r1, _023853B8 ; =DUNGEON_PTR + ldrb r4, [r0, #4] + ldr r0, [r1] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r5, [r0, #0xa84] +#else + ldr r5, [r0, #0xb28] +#endif + str r5, [sp, #8] +_023851E4: + mov r6, #0 + ldr sb, _023853B8 ; =DUNGEON_PTR + mov r7, r6 + mov r8, r6 +_023851F4: + ldr r0, [sb] + add r0, r0, r8, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + bl ov29_02302388 + cmp r0, #0 + beq _0238521C + cmp r8, r4 + moveq r6, r7 + add r7, r7, #1 +_0238521C: + add r8, r8, #1 + cmp r8, #4 + blt _023851F4 + ldr r0, [sp, #8] + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + ldr r0, [sp, #8] + mov r2, #1 + mov r3, r2 + add r0, r0, #4 + mov r1, #0 + bl DrawTileGrid + mov r0, #1 + bl ov29_022EB398 + str r7, [sp] + mov r1, #0 + mov r3, r6 + add r0, sp, #8 + mov r2, #1 + str r1, [sp, #4] + bl HandleMovesMenu + cmp r0, #0 + bne _023853B0 + bl ov29_022F0B9C + cmp r0, #0x1d + bne _0238529C + bl GetLeaderAction + bl ov31_02385FE0 + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_0238529C: + bl ov29_022F0B9C + cmp r0, #0x1e + bne _023852CC + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + mov r1, #0 + bl ov31_023860A4 + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_023852CC: + bl ov29_022F0B9C + cmp r0, #0x33 + bne _023852FC + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + mov r1, #0 + bl ov31_023860A4 + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_023852FC: + bl ov29_022F0B9C + cmp r0, #0x1f + bne _02385328 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + bl ov31_0238619C + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_02385328: + bl ov29_022F0B9C + cmp r0, #0x20 + bne _02385354 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + bl ov31_02386204 + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_02385354: + bl ov29_022F0B9C + cmp r0, #0x21 + bne _02385380 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + mov r1, #1 + bl ov31_02386308 + mov r0, #1 + bl ov29_022EB398 +_02385380: + bl ov29_022F0B9C + cmp r0, #0 + beq _023851E4 + mov r0, r5 + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + mov r2, #1 + mov r3, r2 + add r0, r5, #4 + mov r1, #0 + bl DrawTileGrid +_023853B0: + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_023853B8: .word DUNGEON_PTR + arm_func_end MovesMenu + + arm_func_start HandleMovesMenuWrapper0 +HandleMovesMenuWrapper0: ; 0x023853BC + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr lr, [sp, #0x10] + mov ip, #0 + str lr, [sp] + str ip, [sp, #4] + bl HandleMovesMenu + add sp, sp, #8 + ldmia sp!, {r3, pc} + arm_func_end HandleMovesMenuWrapper0 + + arm_func_start HandleMovesMenuWrapper1 +HandleMovesMenuWrapper1: ; 0x023853E0 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr lr, [sp, #0x10] + mov ip, #1 + str lr, [sp] + str ip, [sp, #4] + bl HandleMovesMenu + add sp, sp, #8 + ldmia sp!, {r3, pc} + arm_func_end HandleMovesMenuWrapper1 + + arm_func_start HandleMovesMenu +HandleMovesMenu: ; 0x02385404 +#ifdef JAPAN +#define HANDLE_MOVES_MENU_OFFSET -0xA4 +#define HANDLE_MOVES_MENU_OFFSET_2 -4 +#else +#define HANDLE_MOVES_MENU_OFFSET 0 +#define HANDLE_MOVES_MENU_OFFSET_2 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x12c + str r1, [sp, #4] + str r0, [sp] + mov r0, #0x14 + mov r1, #8 + str r2, [sp, #8] + bl MemAlloc + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r2, #0 + str r0, [r1, #8] + str r2, [r0, #0x10] + mov r0, #0x62 + bl AdvanceFrame + ldr r0, [sp, #0x154] + cmp r0, #1 + bne _0238547C + ldr r0, _02385F74 ; =DUNGEON_WINDOW_PARAMS_14 + bl CreateDialogueBox + mov r1, #0 + str r0, [sp, #0x14] + bl sub_0202F474 + ldr r0, _02385F78 ; =0x00003FCD + bl StringFromId + mov r2, r0 + ldr r0, [sp, #0x14] + ldr r1, _02385F7C ; =0x00000404 + mov r3, #0 + bl ShowStringInDialogueBox + b _023854AC +_0238547C: + ldr r0, _02385F80 ; =DUNGEON_WINDOW_PARAMS_16 + bl CreateDialogueBox + mov r1, #0 + str r0, [sp, #0x14] + bl sub_0202F474 + ldr r0, _02385F84 ; =0x00003FCC + bl StringFromId + mov r2, r0 + ldr r0, [sp, #0x14] + ldr r1, _02385F7C ; =0x00000404 + mov r3, #0 + bl ShowStringInDialogueBox +_023854AC: + ldr r0, [sp] + ldr r6, [r0] + ldr sl, [r6, #0xb4] + bl GetLeader + ldr r7, [r0, #0xb4] + mov r0, r6 + bl sub_0203F9CC + mov r8, #0 + ldr sb, _02385F88 ; =DUNGEON_PTR + mov r4, r8 + add fp, sp, #0x2c +_023854D8: + ldr r0, [sb] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] + bl ov29_02302388 + cmp r0, #0 + beq _02385514 + ldr r0, [sb] + str r4, [fp, r8, lsl #2] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] + cmp r6, r0 + streq r8, [sp, #0x10] + add r8, r8, #1 +_02385514: + add r4, r4, #1 + cmp r4, #4 + blt _023854D8 + ldr r0, [sp, #0x154] + ldr r2, [sp, #0x10] + mov r1, r8 + bl sub_0204018C + str r0, [sp, #0x18] + bl sub_02041094 + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + str r0, [r1] + mov r0, #0x1e + bl AdvanceFrame +_02385548: + mov r4, #0 + str r4, [sp, #0xc] + mov sb, r4 + bl ov29_022EA62C + ldr fp, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 +_0238555C: + bl sub_020407EC + mov r8, r0 + cmp r8, #9 + addls pc, pc, r8, lsl #2 + b _02385680 +_02385570: ; jump table + b _02385680 ; case 0 + b _0238562C ; case 1 + b _02385678 ; case 2 + b _023855A0 ; case 3 + b _023855A0 ; case 4 + b _023855A8 ; case 5 + b _02385634 ; case 6 + b _0238566C ; case 7 + b _02385650 ; case 8 + b _02385598 ; case 9 +_02385598: + mov sb, #1 + b _02385680 +_023855A0: + mov sb, #1 + b _02385680 +_023855A8: + ldr r0, [sp, #0x18] + bl sub_02030A18 + mov r1, #0 + str r1, [fp] + add r1, sp, #0x2c + str r0, [sp, #0x10] + ldr sb, [r1, r0, lsl #2] + ldr r0, _02385F88 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, sb, lsl #2 + add r0, r0, #0x12000 + ldr r6, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] + ldr r0, [sp] + ldr sl, [r6, #0xb4] + str r6, [r0] + bl GetLeaderMonster + strb sb, [r0, #0x4e] + mov r0, r6 + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + mov r2, #1 + add r0, r6, #4 + mov r1, #0 + mov r3, r2 + bl DrawTileGrid + mov r0, #0 + bl ov29_022EB398 + mov r0, r6 + bl sub_0203F9CC + bl sub_02041178 + mov sb, #1 + b _02385680 +_0238562C: + mov r4, #1 + b _02385680 +_02385634: + ldrb r1, [r6, #0x24] + mov r0, #2 + str r0, [sp, #0xc] + strb r1, [r7, #0x4e] + ldr r0, [fp] + strb r0, [r7, #0x54] + b _02385680 +_02385650: + ldrb r1, [r6, #0x24] + mov r0, #3 + str r0, [sp, #0xc] + strb r1, [r7, #0x4e] + ldr r0, [fp] + strb r0, [r7, #0x54] + b _02385680 +_0238566C: + mov r0, #1 + str r0, [sp, #0xc] + b _02385680 +_02385678: + bl sub_02041094 + str r0, [fp] +_02385680: + cmp r8, #9 + addls pc, pc, r8, lsl #2 + b _023856D0 +_0238568C: ; jump table + b _023856D0 ; case 0 + b _023856D0 ; case 1 + b _023856D0 ; case 2 + b _023856B4 ; case 3 + b _023856B4 ; case 4 + b _023856C4 ; case 5 + b _023856D0 ; case 6 + b _023856D0 ; case 7 + b _023856D0 ; case 8 + b _023856B4 ; case 9 +_023856B4: + mov r0, r6 + bl sub_0203FD44 + str r0, [fp] + b _023856D0 +_023856C4: + mov r0, r6 + bl sub_0203F9CC + bl sub_02041178 +_023856D0: + mov r0, #0x1e + bl AdvanceFrame + cmp r8, #0 + beq _0238555C + cmp r4, #0 + bne _02385EFC + cmp sb, #0 + bne _02385548 + ldr r0, [sp, #0xc] + cmp r0, #1 + bne _02385738 + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldrb r1, [r6, #0x24] + ldr r2, [r0] + add r0, r7, #0x4a + mov r2, r2, lsl #0x10 + mov r2, r2, asr #0x10 + bl ov29_022EBC2C + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #8 + mov r1, #0x1b + bl ov29_022EA370 + mov r4, #0 + b _02385EFC +_02385738: + ldr r8, [r6, #0xb4] + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + add sb, r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2 + ldr fp, [r0] + bl ov29_022EBA70 + ldrb r0, [r8, #7] + cmp r0, #0 + beq _023857B0 + ldr r0, [sp, #8] + cmp r0, #0 + beq _02385770 + mov r0, #0x14 + mov r1, #0 + bl AddDungeonSubMenuOption +_02385770: + ldrb r0, [sb, fp, lsl #3] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _023857BC + ldrb r0, [sb, fp, lsl #3] + mov r1, #0 + tst r0, #8 + beq _023857A4 + mov r0, #0x33 + bl AddDungeonSubMenuOption + b _023857BC +_023857A4: + mov r0, #0x1e + bl AddDungeonSubMenuOption + b _023857BC +_023857B0: + mov r0, #0x1f + mov r1, #0 + bl AddDungeonSubMenuOption +_023857BC: + ldr r0, [sp, #4] + cmp r0, #0 + beq _023857E0 + mov r0, #0x20 + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0x21 + mov r1, #0 + bl AddDungeonSubMenuOption +_023857E0: + mov r0, #0x1d + mov r1, #0 + bl AddDungeonSubMenuOption + ldr r0, [sp, #4] + cmp r0, #0 + bne _02385804 + mov r0, #0x20 + bl DisableDungeonSubMenuOption + b _0238595C +_02385804: + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr fp, [r0] + add r0, r8, fp, lsl #3 + add r0, r0, #0x100 + ldrh r0, [r0, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] + mov sb, fp + bl IsNot2TurnsMoveOrSketch + cmp r0, #0 + moveq r0, #0 + beq _0238592C + add sb, sb, #1 + b _02385920 +_02385834: + add r0, r8, sb, lsl #3 + ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02385928 + add r0, r8, sb, lsl #3 + add r0, r0, #0x100 + ldrh r0, [r0, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] + bl IsNot2TurnsMoveOrSketch + cmp r0, #0 + beq _02385928 + add r0, r8, sb, lsl #3 + ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r0, #2 + bne _0238591C + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 + b _023858A4 +_02385888: + add r0, r8, r3, lsl #3 + ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r0, #2 + beq _023858AC + add r0, r3, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 +_023858A4: + cmp r3, #4 + blt _02385888 +_023858AC: + mov r0, fp, lsl #0x10 + mov r2, r0, asr #0x10 + b _0238590C +_023858B8: + add r0, r2, #1 + mov r0, r0, lsl #0x10 + mov r1, r0, asr #0x10 + add r0, r8, r2, lsl #3 + add sb, r0, #0x100 + b _023858F8 +_023858D0: + add fp, r8, r1, lsl #3 + add fp, fp, #0x100 + ldrh r0, [sb, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] + ldrh fp, [fp, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] + cmp r0, fp + moveq r0, #0 + beq _0238592C + add r0, r1, #1 + mov r0, r0, lsl #0x10 + mov r1, r0, asr #0x10 +_023858F8: + cmp r1, r3 + blt _023858D0 + add r0, r2, #1 + mov r0, r0, lsl #0x10 + mov r2, r0, asr #0x10 +_0238590C: + cmp r2, r3 + blt _023858B8 + mov r0, #1 + b _0238592C +_0238591C: + add sb, sb, #1 +_02385920: + cmp sb, #4 + blt _02385834 +_02385928: + mov r0, #0 +_0238592C: + cmp r0, #0 + bne _0238593C + mov r0, #0x20 + bl DisableDungeonSubMenuOption +_0238593C: + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r0, r8 + ldr r1, [r1] + bl ov31_023863F8 + cmp r0, #0 + bne _0238595C + mov r0, #0x21 + bl DisableDungeonSubMenuOption +_0238595C: + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r0, r8 + ldr r1, [r1] + bl ov31_023863F8 + cmp r0, #0 + bne _0238597C + mov r0, #0x21 + bl DisableDungeonSubMenuOption +_0238597C: + ldr r0, [sp, #8] + cmp r0, #0 + beq _023859C0 + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r8, #0 + ldr r1, [r0] + cmp r1, #4 + bge _023859B0 + mov r0, r6 + mov r2, #1 + bl CanAiUseMove + cmp r0, #0 + movne r8, #1 +_023859B0: + cmp r8, #0 +#ifdef EUROPE + bne _023859C0 + mov r0, #0x14 + bl DisableDungeonSubMenuOption +_023859C0: + bl ov29_022EB9A0 + mov r0, #0x14 + bl ov29_022EB8B0 + mvn r1, #0 + cmp r0, r1 + moveq r8, #0 + beq _023865E4 + bl ov29_022EB804 + mov r8, r0 +_023865E4: +#else + bne _023859C0 + mov r0, #0x14 + bl DisableDungeonSubMenuOption +_023859C0: + bl ov29_022EB9A0 +#endif + ldr r0, [sp, #0xc] + cmp r0, #3 + bne _02385A40 + mov r0, #0x20 + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385A08 + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 + b _02385EFC +_02385A08: + mov r0, #0x21 + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385EFC + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 + b _02385EFC +_02385A40: + cmp r0, #2 + bne _02385AF8 + ldrb r0, [sl, #7] + cmp r0, #0 + beq _02385AC0 + mov r0, #0x1e + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385A88 + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 +_02385A88: + mov r0, #0x33 + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385EFC + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 + b _02385EFC +_02385AC0: + mov r0, #0x1f + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385EFC + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 + b _02385EFC +_02385AF8: + mov r0, #0x62 + bl AdvanceFrame + add r1, sp, #0x20 + add r0, sp, #0xd4 + mov r2, #0 + str r1, [sp, #0x9c] + bl ov31_0238513C + bl ov29_022EBA84 + mov r1, #0 + add r3, sp, #0xd4 + b _02385B30 +_02385B24: + add r2, r3, r1, lsl #3 + str r1, [r2, #4] + add r1, r1, #1 +_02385B30: + cmp r1, r0 + blt _02385B24 +#ifdef JAPAN + ldr r0, _02385F8C ; =0x00001D34 + add sb, sp, #0xd4 + mov sl, r1, lsl #3 + strh r0, [sb, sl] + add r8, sb, r1, lsl #3 + mvn r0, #0 + mov r4, #0 + str r0, [r8, #4] + strh r4, [r8, #8] + sub r0, r4, #2 + str r0, [r8, #0xc] + ldrh r0, [r8, #8] + add r3, sp, #0x20 + ldr r2, _02387200 ; =0x0000087A + strh r0, [r8, #0x18] + ldr fp, [r8, #0xc] + add r0, r3, r1 + str fp, [r8, #0x1c] + ldrh sl, [sb, sl] + ldrb fp, [r0, #1] + mov sb, #0x14 + strh sl, [r8, #0x10] + strb fp, [r0, #3] + ldrb sl, [r3, r1] + ldr fp, [r8, #4] + ldr r3, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + str fp, [r8, #0x14] + ldrh fp, [r8, #-8] + strb sl, [r0, #2] + ldrb sl, [r0, #-1] + strh fp, [r8, #8] + ldr fp, [r8, #-4] + ldr r3, [r3] + strb sl, [r0, #1] + str fp, [r8, #0xc] + strh r2, [r8, #-8] + str sb, [r8, #-4] + cmp r3, #0 + strb r4, [r0, #-1] + movle r2, #3 + strleb r2, [r0, #-1] + add r2, r3, #1 + mov r2, r2, lsl #0x10 + mov r4, r2, asr #0x10 + mov r3, #0 + ldr sb, _02387204 ; =0x0000087B + add r8, sp, #0xd4 + mov r2, r1, lsl #3 + strh sb, [r8, r2] + add r1, r8, r1, lsl #3 + mov r2, #0x15 + str r2, [r1, #4] +#else +#ifdef EUROPE + ldr r0, _02385F8C ; =0x000008DC + add sl, sp, #0xd4 + mov fp, r1, lsl #3 + strh r0, [sl, fp] + mvn r0, #0 + add sb, sl, r1, lsl #3 + str r0, [sb, #4] + mov ip, #0 + add r2, r0, #0xa40 + strh ip, [sb, #8] + sub r0, ip, #2 + str r0, [sb, #0xc] + ldrh r0, [sb, #8] + add r3, sp, #0x20 + mov lr, #0x14 +#else + ldr r2, _02385F8C ; =0x000008DC + add sl, sp, #0xd4 + mov fp, r1, lsl #3 + mvn r0, #0 + strh r2, [sl, fp] + add sb, sl, r1, lsl #3 + str r0, [sb, #4] + mov r8, #0 + add r2, r0, #0xa40 + strh r8, [sb, #8] + sub r0, r8, #2 + str r0, [sb, #0xc] + ldrh r0, [sb, #8] + add r3, sp, #0x20 + mov ip, #0x14 +#endif + strh r0, [sb, #0x18] + ldr r4, [sb, #0xc] + add r0, r3, r1 + str r4, [sb, #0x1c] + ldrh r4, [sl, fp] + ldrb sl, [r0, #1] + ldr fp, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + strh r4, [sb, #0x10] + strb sl, [r0, #3] + ldrb r4, [r3, r1] + ldr sl, [sb, #4] + ldr r3, [fp] + str sl, [sb, #0x14] + ldrh sl, [sb, #-8] + strb r4, [r0, #2] + ldrb r4, [r0, #-1] + strh sl, [sb, #8] + cmp r3, #0 + strb r4, [r0, #1] + ldr r4, [sb, #-4] +#ifdef EUROPE + strb ip, [r0, #-1] + str r4, [sb, #0xc] + strh r2, [sb, #-8] + movle r2, #3 + strleb r2, [r0, #-1] + add r2, r3, #1 + mov r2, r2, lsl #0x10 + str lr, [sb, #-4] + mov r4, r2, asr #0x10 + add sb, sp, #0xd4 + mov r2, r1, lsl #3 + mov r3, #0xa40 + strh r3, [sb, r2] + mov r3, #0 + add r1, sb, r1, lsl #3 + mov r2, #0x15 + str r2, [r1, #4] +#else + strb r8, [r0, #-1] + str r4, [sb, #0xc] + strh r2, [sb, #-8] + movle r2, #3 + str ip, [sb, #-4] + add r8, sp, #0xd4 + strleb r2, [r0, #-1] + mov sb, r1, lsl #3 + add r2, r8, r1, lsl #3 + add r1, r3, #1 + mov r1, r1, lsl #0x10 + mov r4, r1, asr #0x10 + mov r1, #0xa40 + strh r1, [r8, sb] + mov r1, #0x15 + mov r3, #0 + str r1, [r2, #4] +#endif +#endif + strb r3, [r0] + ldr sl, [r6, #0xb4] + mov r1, r3 + mov r2, #1 + b _02385C58 +_02385C1C: +#ifdef EUROPE + add sb, sl, r4, lsl #3 + ldrb sb, [sb, #0x124] + tst sb, #1 + movne sb, r2 + moveq sb, r1 + tst sb, #0xff + beq _02385C4C + add sb, sl, r4, lsl #3 + ldrb sb, [sb, #0x124] + tst sb, #2 +#else + add r8, sl, r4, lsl #3 + ldrb r8, [r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r8, #1 + movne r8, r2 + moveq r8, r1 + tst r8, #0xff + beq _02385C4C + add r8, sl, r4, lsl #3 + ldrb r8, [r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r8, #2 +#endif + moveq r3, #1 + beq _02385C60 +_02385C4C: + add r4, r4, #1 + mov r4, r4, lsl #0x10 + mov r4, r4, asr #0x10 +_02385C58: + cmp r4, #4 + blt _02385C1C +_02385C60: + cmp r3, #0 + moveq r1, #3 + streqb r1, [r0] + ldr r0, _02385F90 ; =DUNGEON_WINDOW_PARAMS_15 + ldr r1, _02385F94 ; =0x80000213 + add r2, sp, #0x3c + add r3, sp, #0xd4 + bl CreateParentMenuFromStringIds + strb r0, [sp, #0x1c] + mov r0, #0x1b + bl AdvanceFrame +#ifdef EUROPE + add r4, sp, #0xd4 + mov fp, #0x1b + ldr sb, _02385F98 ; =0x0000099B + b _02385D0C +_02385CA0: + mov r0, fp + bl AdvanceFrame + mov r0, #0 +#else + add r8, sp, #0xd4 + mov sb, #0x1b + mov fp, #0 + ldr r4, _02385F98 ; =0x0000099B + b _02385D0C +_02385CA0: + mov r0, sb + bl AdvanceFrame + mov r0, fp +#endif + add r1, sp, #0x1e + bl GetPressedButtons + ldrh r0, [sp, #0x1e] + tst r0, #0x400 + beq _02385D0C + mov r5, #0 + b _02385CEC +_02385CC8: + mov r1, r5, lsl #3 +#ifdef EUROPE + add r0, r4, r5, lsl #3 + ldr r0, [r0, #4] + cmp r0, #0 + blt _02385CF4 + cmp r8, #0 + beq _0238690C + ldrh r0, [r4, r1] + cmp r0, sb + beq _02385CF4 +_0238690C: +#else + add r0, r8, r5, lsl #3 + ldr r0, [r0, #4] + cmp r0, #0 + blt _02385CF4 + ldrh r0, [r8, r1] + cmp r0, r4 + beq _02385CF4 +#endif + add r5, r5, #1 +_02385CEC: + cmp r5, #0xa + blt _02385CC8 +_02385CF4: +#ifdef EUROPE + add r0, r4, r5, lsl #3 +#else + add r0, r8, r5, lsl #3 +#endif + ldr r0, [r0, #4] + cmp r0, #0 + blt _02385D0C + cmp r5, #0xa + blt _02385D1C +_02385D0C: + ldrsb r0, [sp, #0x1c] + bl IsParentMenuActive + cmp r0, #0 + bne _02385CA0 +_02385D1C: + ldrh r0, [sp, #0x1e] + tst r0, #0x400 + bne _02385D34 + ldrsb r0, [sp, #0x1c] + bl sub_0202ABB0 + mov r5, r0 +_02385D34: + ldrsb r0, [sp, #0x1c] + bl sub_0202AB80 + cmp r0, #0 + ble _02385D78 + mvn r0, #0 + cmp r5, r0 + bne _02385D78 + ldrsb r0, [sp, #0x1c] + bl sub_0202AB80 + add r1, sp, #0xd4 + mov r0, r0, lsl #3 + ldrh r1, [r1, r0] + ldr r0, _02385F8C ; =0x000008DC + cmp r1, r0 + bne _02385D78 + mov r0, #0 + bl PlaySeVolumeWrapper +_02385D78: + add r0, sp, #0x1c + bl ov29_0234E988 + mov r0, #0x1b + bl AdvanceFrame + cmp r5, #0 + blt _02385ED8 + add r0, sp, #0xd4 + mov r1, r5, lsl #3 + ldrh r1, [r0, r1] + ldr r0, _02385F9C ; =0x000009A8 + cmp r1, r0 + bgt _02385DC8 + sub r0, r0, #3 + subs r0, r1, r0 + addpl pc, pc, r0, lsl #2 + b _02385DE4 +_02385DB8: ; jump table + b _02385DD4 ; case 0 + b _02385DD4 ; case 1 + b _02385DD4 ; case 2 + b _02385DD4 ; case 3 +_02385DC8: + ldr r0, _02385FA0 ; =0x000009BA + cmp r1, r0 + bne _02385DE4 +_02385DD4: + ldr r0, _02385FA4 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + b _02385DEC +_02385DE4: + mov r0, #0 + bl PlaySeVolumeWrapper +_02385DEC: + cmp r5, #0x14 + bne _02385E4C + mov r0, r6 + bl sub_0203F9CC + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_020416BC + ldr r2, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r1, r0, lsl #0x10 + str r0, [r2] + mov r0, r1, asr #0x10 + bl sub_020410A4 + mov r0, r6 + bl sub_0203FD44 + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + str r0, [r1] + ldr r0, [sp, #0x18] + bl sub_020307EC + bl sub_02041178 + mov r0, #0x1b + bl AdvanceFrame + b _02385548 +_02385E4C: + cmp r5, #0x15 + bne _02385EAC + mov r0, r6 + bl sub_0203F9CC + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_020416DC + ldr r2, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r1, r0, lsl #0x10 + str r0, [r2] + mov r0, r1, asr #0x10 + bl sub_020410A4 + mov r0, r6 + bl sub_0203FD44 + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + str r0, [r1] + ldr r0, [sp, #0x18] + bl sub_020307EC + bl sub_02041178 + mov r0, #0x1b + bl AdvanceFrame + b _02385548 +_02385EAC: + mov r0, r5 + bl ov29_022EB804 + cmp r0, #0 + beq _02385EF0 + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + b _02385EF0 +_02385ED8: + ldr r0, [sp, #0x18] + bl sub_020307EC + bl sub_02041178 + mov r0, #0x1b + bl AdvanceFrame + b _02385548 +_02385EF0: + mov r0, #0x1b + bl AdvanceFrame + mov r4, #0 +_02385EFC: + ldr r0, [sp, #0x18] + bl CloseAdvancedTextBox2 + ldr r0, [sp, #0x14] + bl sub_0202F334 + ldr r0, [sp, #0x14] + bl CloseDialogueBox + mov r0, #8 + mov r1, #0x1e + bl ov29_022EA370 + bl HideTileGrid + mov r0, #0x1b + bl AdvanceFrame + bl sub_020407C0 + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0, #8] + cmp r0, #0 + beq _02385F50 + bl MemFree + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r1, #0 + str r1, [r0, #8] +_02385F50: + bl GetLeaderMonster + ldr r1, [sp, #0x10] + add r2, sp, #0x2c + ldr r1, [r2, r1, lsl #2] + strb r1, [r0, #0x4e] + mov r0, r4 + add sp, sp, #0x12c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#if defined(EUROPE) +#define HANDLE_MOVES_MENU_DATA_OFFSET 2 +#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0 +#elif defined(JAPAN) +#define HANDLE_MOVES_MENU_DATA_OFFSET 0xA03 +#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0x19D0 +#else +#define HANDLE_MOVES_MENU_DATA_OFFSET 0 +#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0 +#endif +_02385F70: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 +_02385F74: .word DUNGEON_WINDOW_PARAMS_14 +_02385F78: .word 0x00003FCD + HANDLE_MOVES_MENU_DATA_OFFSET +_02385F7C: .word 0x00000404 +_02385F80: .word DUNGEON_WINDOW_PARAMS_16 +_02385F84: .word 0x00003FCC + HANDLE_MOVES_MENU_DATA_OFFSET +_02385F88: .word DUNGEON_PTR +#ifdef JAPAN +_02385F8C: .word 0x00001D34 +_02387200: .word 0x0000087A +_02387204: .word 0x0000087B +#else +_02385F8C: .word 0x000008DC +#endif +_02385F90: .word DUNGEON_WINDOW_PARAMS_15 +_02385F94: .word 0x80000213 +_02385F98: .word 0x0000099B + HANDLE_MOVES_MENU_DATA_OFFSET_2 +_02385F9C: .word 0x000009A8 + HANDLE_MOVES_MENU_DATA_OFFSET_2 +_02385FA0: .word 0x000009BA + HANDLE_MOVES_MENU_DATA_OFFSET_2 +_02385FA4: .word 0x00003F07 + arm_func_end HandleMovesMenu + + arm_func_start ov31_02385FA8 +ov31_02385FA8: ; 0x02385FA8 + stmdb sp!, {r3, r4, r5, lr} + ldr r3, _02385FD8 ; =ov29_0237C91C + mov r1, r1, lsl #3 + ldrh r1, [r3, r1] + mov r5, r0 + mov r4, r2 + bl SetMonsterActionFields + ldr r0, _02385FDC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + strb r4, [r5, #4] + ldr r0, [r0] + strb r0, [r5, #0xa] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02385FD8: .word ov29_0237C91C +_02385FDC: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 + arm_func_end ov31_02385FA8 + + arm_func_start ov31_02385FE0 +ov31_02385FE0: ; 0x02385FE0 +#ifdef JAPAN +#define OV31_02385FE0_OFFSET -4 +#else +#define OV31_02385FE0_OFFSET 0 +#endif + stmdb sp!, {r3, lr} + ldr r1, _0238604C ; =DUNGEON_PTR + ldrb r3, [r0, #4] + ldr r1, [r1] + ldrb r2, [r0, #0xa] + add r1, r1, r3, lsl #2 + add r1, r1, #0x12000 +#ifdef JAPAN + ldr r1, [r1, #0xa84] +#else + ldr r1, [r1, #0xb28] +#endif + mov r2, r2, lsl #3 + ldr ip, [r1, #0xb4] + add r1, ip, #0x26 + OV31_02385FE0_OFFSET + add r3, r1, #0x100 + ldrh r1, [r3, r2] + orr r1, r1, #2 + strh r1, [r3, r2] + ldrb r1, [r0, #0xa] + cmp r1, #4 + bhs _02386038 + add r0, ip, #0x124 + OV31_02385FE0_OFFSET + mov r2, #4 + bl ov31_02386050 + ldmia sp!, {r3, pc} +_02386038: + add r0, ip, #0x144 + OV31_02385FE0_OFFSET + mov r1, #0 + mov r2, #1 + bl ov31_02386050 + ldmia sp!, {r3, pc} + .align 2, 0 +_0238604C: .word DUNGEON_PTR + arm_func_end ov31_02385FE0 + + arm_func_start ov31_02386050 +ov31_02386050: ; 0x02386050 + stmdb sp!, {r3, r4, r5, lr} + mov r3, r1 + mov r1, r2 + mov r2, r3 + mov r3, #0 + bl sub_020417A8 + mov r5, r0 + mov r4, #0x62 +_02386070: + bl sub_02041A18 + cmp r0, #0 + beq _0238608C + bl sub_02041A00 + mov r0, r5 + bl CloseScrollBox + b _02386098 +_0238608C: + mov r0, r4 + bl AdvanceFrame + b _02386070 +_02386098: + mov r0, #0x62 + bl AdvanceFrame + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov31_02386050 + + arm_func_start ov31_023860A4 +ov31_023860A4: ; 0x023860A4 +#ifdef JAPAN +#define OV31_023860A4_OFFSET -4 +#else +#define OV31_023860A4_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r2, _02386190 ; =DUNGEON_PTR + ldrb r3, [r0, #4] + ldr r4, [r2] + ldrb r2, [r0, #0xa] + add r0, r4, r3, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r4, [r0, #0xa84] +#else + ldr r4, [r0, #0xb28] +#endif + mov r8, r1 + ldr r7, [r4, #0xb4] + mov r6, #0 + add r1, r7, #0x124 + OV31_023860A4_OFFSET + ldrb r0, [r1, r2, lsl #3] + mov ip, #0 + add r5, r1, r2, lsl #3 + tst r0, #8 + movne r6, #1 + mov r2, ip + mov r3, #1 +_023860F0: + add r0, r7, ip, lsl #3 + ldrb r0, [r0, #0x124 + OV31_023860A4_OFFSET] + tst r0, #1 + movne r0, r3 + moveq r0, r2 + tst r0, #0xff + addne r1, r7, ip, lsl #3 + ldrneb r0, [r1, #0x124 + OV31_023860A4_OFFSET] + add ip, ip, #1 + bicne r0, r0, #8 + strneb r0, [r1, #0x124 + OV31_023860A4_OFFSET] + cmp ip, #4 + blt _023860F0 + bl ov29_0234B034 + ldrh r1, [r5, #4] + cmp r6, #0 + str r1, [r0, #0x10] + ldreqb r0, [r5] + orreq r0, r0, #8 + streqb r0, [r5] + add r0, r7, #0x124 + OV31_023860A4_OFFSET + bl AllManip1 + ldrh r0, [r5, #2] + cmp r8, #0 + orr r0, r0, #2 + strh r0, [r5, #2] + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + cmp r6, #0 + bne _02386174 + ldr r1, _02386194 ; =0x000008D8 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + b _02386180 +_02386174: + ldr r1, _02386198 ; =0x000008D9 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser +_02386180: + mov r0, #0x78 + mov r1, #0x1f + bl ov29_022EA370 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02386190: .word DUNGEON_PTR +#ifdef JAPAN +_02386194: .word 0x00001D30 +_02386198: .word 0x00001D31 +#else +_02386194: .word 0x000008D8 +_02386198: .word 0x000008D9 +#endif + arm_func_end ov31_023860A4 + + arm_func_start ov31_0238619C +ov31_0238619C: ; 0x0238619C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r1, _02386200 ; =DUNGEON_PTR + ldrb r2, [r0, #4] + ldr r1, [r1] + ldrb r4, [r0, #0xa] + add r0, r1, r2, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] + ldr r7, [r0, #0xb4] + add r5, r7, #0x120 +#else + ldr r0, [r0, #0xb28] + ldr r7, [r0, #0xb4] + add r5, r7, #0x124 +#endif + add r6, r5, r4, lsl #3 + bl ov29_0234B034 + mov r1, #0 + mov r2, r6 + mov r3, r1 + bl FormatMoveStringMore + ldrb r1, [r5, r4, lsl #3] + mov r0, r5 + eor r1, r1, #4 + strb r1, [r5, r4, lsl #3] + bl AllManip1 + ldrh r0, [r6, #2] + orr r0, r0, #2 + strh r0, [r6, #2] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02386200: .word DUNGEON_PTR + arm_func_end ov31_0238619C + + arm_func_start ov31_02386204 +ov31_02386204: ; 0x02386204 +#ifdef JAPAN +#define OV31_02386204_OFFSET -4 +#else +#define OV31_02386204_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #0xa0 + ldr r1, _02386304 ; =DUNGEON_PTR + ldrb r2, [r0, #4] + ldr r1, [r1] + ldrb r5, [r0, #0xa] + add r0, r1, r2, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r1, [r0, #0xa84] +#else + ldr r1, [r0, #0xb28] +#endif + add r0, sp, #0 + ldr r4, [r1, #0xb4] + mov r2, #0 + add r1, r4, #0x124 + OV31_02386204_OFFSET + add r1, r1, r5, lsl #3 + bl FormatMoveString + add r0, r4, #0x26 + OV31_02386204_OFFSET + add r2, r0, #0x100 + mov r1, r5, lsl #3 + ldrh r0, [r2, r1] + mov r3, #0 + orr r0, r0, #2 + strh r0, [r2, r1] + mov r1, r3 + mov r2, #1 + b _023862A4 +_02386268: + add r5, r5, #1 + cmp r5, #4 + bge _023862AC + add r0, r4, r5, lsl #3 + ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] + tst r0, #1 + movne r0, r2 + moveq r0, r1 + tst r0, #0xff + beq _023862AC + add r0, r4, r5, lsl #3 + ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] + tst r0, #2 + beq _023862AC + add r3, r3, #1 +_023862A4: + cmp r3, #4 + blt _02386268 +_023862AC: + add r0, r4, r5, lsl #3 + ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + moveq r5, #4 + cmp r5, #4 + bge _023862F4 + add ip, r4, #0x124 + OV31_02386204_OFFSET + ldrb r2, [ip, r5, lsl #3] + add r0, sp, #0x50 + add r1, ip, r5, lsl #3 + orr r2, r2, #2 + bic r3, r2, #4 + mov r2, #0 + strb r3, [ip, r5, lsl #3] + bl FormatMoveString +_023862F4: + add r0, r4, #0x124 + OV31_02386204_OFFSET + bl AllManip1 + add sp, sp, #0xa0 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02386304: .word DUNGEON_PTR + arm_func_end ov31_02386204 + + arm_func_start ov31_02386308 +ov31_02386308: ; 0x02386308 +#ifdef JAPAN +#define OV31_02386308_OFFSET -4 +#else +#define OV31_02386308_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r2, _023863EC ; =DUNGEON_PTR + ldrb r3, [r0, #4] + ldr r2, [r2] + ldrb r7, [r0, #0xa] + add r0, r2, r3, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r4, [r0, #0xa84] +#else + ldr r4, [r0, #0xb28] +#endif + mov r8, r1 + ldr r6, [r4, #0xb4] + mov r5, #0 + bl ov29_0234B034 + add r1, r6, r7, lsl #3 + add r1, r1, #0x100 + ldrh r2, [r1, #0x28 + OV31_02386308_OFFSET] + mov r3, r7, lsl #3 + add r1, r6, #0x26 + OV31_02386308_OFFSET + str r2, [r0, #0x10] + add r2, r1, #0x100 + ldrh r1, [r2, r3] + add r7, r7, #1 + mov r0, r5 + orr r1, r1, #2 + strh r1, [r2, r3] + add ip, r6, #0x124 + OV31_02386308_OFFSET + mov r1, #1 + b _023863A0 +_02386374: + cmp r7, #4 + bge _023863A8 + ldrb r2, [ip, r7, lsl #3] + mov r3, r7, lsl #3 + tst r2, #2 + beq _023863A8 + bic r2, r2, #2 + mov r5, r1 + strb r2, [ip, r3] + add r7, r7, #1 + add r0, r0, #1 +_023863A0: + cmp r0, #4 + blt _02386374 +_023863A8: + add r0, r6, #0x124 + OV31_02386308_OFFSET + bl AllManip1 + cmp r8, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + cmp r5, #0 + beq _023863D0 + ldr r1, _023863F0 ; =0x000008DA + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + b _023863DC +_023863D0: + ldr r1, _023863F4 ; =0x000008DB + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser +_023863DC: + mov r0, #0x78 + mov r1, #0x1f + bl ov29_022EA370 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_023863EC: .word DUNGEON_PTR +#ifdef JAPAN +_023863F0: .word 0x00001D32 +_023863F4: .word 0x00001D33 +#else +_023863F0: .word 0x000008DA +_023863F4: .word 0x000008DB +#endif + arm_func_end ov31_02386308 + + arm_func_start ov31_023863F8 +ov31_023863F8: ; 0x023863F8 + stmdb sp!, {r3, lr} + mov lr, #0 + mov ip, lr + add r1, r1, #1 + mov r2, #1 + b _02386434 +_02386410: + cmp r1, #4 + bge _0238643C + add r3, r0, r1, lsl #3 +#ifdef JAPAN + ldrb r3, [r3, #0x120] +#else + ldrb r3, [r3, #0x124] +#endif + tst r3, #2 + beq _0238643C + mov lr, r2 + add r1, r1, #1 + add ip, ip, #1 +_02386434: + cmp ip, #4 + blt _02386410 +_0238643C: + cmp lr, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end ov31_023863F8 + + arm_func_start ov31_02386450 +ov31_02386450: ; 0x02386450 + stmdb sp!, {r3, lr} + ldr r0, _02386478 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0, #4] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl MemFree + ldr r0, _02386478 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r1, #0 + str r1, [r0, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_02386478: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 + arm_func_end ov31_02386450 + + arm_func_start ov31_0238647C +ov31_0238647C: ; 0x0238647C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x114 + mov r6, r0 + mov r5, r1 + str r2, [sp, #4] + mov r0, #0x284 + mov r1, #8 + str r3, [sp, #8] + mvn r4, #1 + bl MemAlloc + ldr r1, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r2, #0 + str r0, [r1, #4] + str r2, [r1] +_023864B4: + mov r0, #6 + mov r1, #0 + bl ov29_022EA428 + ldr r0, _02386B10 ; =ov29_0235352C + ldr r0, [r0] + ldr r0, [r0, #0x24] + bl sub_0200B3D4 + mvn sb, #1 + ldr r7, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + add r8, sb, #1 + add fp, sp, #0xbc +_023864E0: + cmp r4, sb + bne _02386578 + ldr r3, [r6, #0xb4] + add r0, sp, #0x14 + ldrsh r2, [r3, #2] + ldrb r3, [r3, #0x48] + mov r1, #2 + bl sub_02053CA0 + mov r0, r6 + bl sub_0203F9CC + mov r1, #0 + b _0238652C +_02386510: + add r0, r5, r1, lsl #3 + ldrh r0, [r0, #2] + tst r0, #4 + bne _02386534 + add r0, r1, #1 + mov r0, r0, lsl #0x10 + mov r1, r0, asr #0x10 +_0238652C: + cmp r1, #8 + blt _02386510 +_02386534: + add r0, r5, r1, lsl #3 + ldrh r0, [r0, #4] + bl sub_0203FD14 + ldr r0, [sp, #8] + mov r1, #0 + cmp r0, #0 + add r3, sp, #0x14 + beq _02386568 + mov r0, #2 + mov r2, r1 + bl sub_0204019C + mov r4, r0 + b _02386578 +_02386568: + mov r0, #3 + mov r2, r1 + bl sub_0204019C + mov r4, r0 +_02386578: + mov r0, #0x1e + bl AdvanceFrame + bl sub_020407EC + mov sl, r0 + bl sub_02041094 + cmp sl, #2 + str r0, [r7] + moveq sl, #0 + beq _023865B4 + cmp sl, #1 + moveq sl, #1 + beq _023865B4 + cmp sl, #7 + bne _02386578 + mov sl, #2 +_023865B4: + mov r0, #0x1e + bl AdvanceFrame + cmp sl, #1 + ldreq r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mvneq r1, #0 + streq r1, [r0] + beq _02386924 + cmp sl, #2 + bne _02386694 + mov r0, r4 + bl SetAdvancedTextBoxState5 + mov r0, #0x1e + bl AdvanceFrame + mov r0, r4 + bl CloseAdvancedTextBox + mov r0, #0x1b + mov r4, sb + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + ldr r0, [r7] + cmp r0, #4 + bge _02386664 + ldr r1, [r7] + mov r0, r5 + mov r2, #4 + bl ov31_02386050 + b _02386674 +_02386664: + add r0, r5, #0x20 + mov r1, #0 + mov r2, #1 + bl ov31_02386050 +_02386674: + bl sub_020407C0 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #2 + mov r1, #0x1b + bl ov29_022EA370 + b _023864E0 +_02386694: + bl ov29_022EBA70 + mov r0, #0x22 + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0x21 + mov r1, #0 + bl AddDungeonSubMenuOption + ldr r0, [r7] + mov r3, #0 + add r1, r0, #1 + mov r2, r3 + b _023866E4 +_023866C4: + cmp r1, #8 + bge _023866EC + ldrb r0, [r5, r1, lsl #3] + tst r0, #2 + beq _023866EC + mov r3, #1 + add r1, r1, #1 + add r2, r2, #1 +_023866E4: + cmp r2, #8 + blt _023866C4 +_023866EC: + cmp r3, #0 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + bne _02386708 + mov r0, #0x21 + bl DisableDungeonSubMenuOption +_02386708: + mov r0, #0x1d + mov r1, #0 + bl AddDungeonSubMenuOption + add r0, sp, #0x18 + str r0, [sp, #0x84] + mov r0, fp + add r1, sp, #0x18 + mov r2, #0 + bl ov31_0238513C + bl ov29_022EBA84 + mov r2, #0 + b _0238674C +_02386738: + add r1, fp, r2, lsl #3 + str r2, [r1, #4] + add r1, r2, #1 + mov r1, r1, lsl #0x10 + mov r2, r1, asr #0x10 +_0238674C: + cmp r2, r0 + blt _02386738 + ldr r0, _02386B14 ; =0x000008DC + mov r1, r2, lsl #3 + strh r0, [fp, r1] + add r0, fp, r2, lsl #3 + str r8, [r0, #4] + add r0, r2, #1 + mov r0, r0, lsl #0x10 + mov r2, r0, asr #0x10 + mov r1, r2, lsl #3 + mov r0, #0 + strh r0, [fp, r1] + add r0, fp, r2, lsl #3 + str r8, [r0, #4] + ldr r0, _02386B18 ; =DUNGEON_WINDOW_PARAMS_15 + ldr r1, _02386B1C ; =0x00000213 + add r2, sp, #0x24 + mov r3, fp + bl CreateParentMenuFromStringIds + str r0, [sp, #0x10] +_023867A0: + mov r0, #0x1b + bl AdvanceFrame + ldr r0, [sp, #0x10] + bl IsParentMenuActive + cmp r0, #0 + bne _023867A0 + ldr r0, [sp, #0x10] + bl sub_0202ABB0 + movs sl, r0 + movmi r0, #1 + strmi r0, [sp, #0xc] + movpl r0, #0 + strpl r0, [sp, #0xc] + mov r0, #0x1b + bl AdvanceFrame + ldr r0, [sp, #0x10] + bl CloseParentMenu + ldr r0, [sp, #0xc] + cmp r0, #1 + bne _023867F8 + bl sub_020416FC + b _023864E0 +_023867F8: + mov r0, #6 + mov r1, #0 + bl ov29_022EA428 + mov r0, r4 + bl SetAdvancedTextBoxState5 +_0238680C: + mov r0, #0x1b + bl AdvanceFrame + mov r0, r4 + bl IsAdvancedTextBoxActive + cmp r0, #0 + bne _0238680C + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, r4 + bl CloseAdvancedTextBox + mov r4, sb + bl sub_020407C0 + cmp sl, #1 + bne _023868E8 + ldr r0, [r7] + mov r1, #0 + add r2, r0, #1 + b _023868C0 +_0238689C: + cmp r2, #8 + bge _023868C8 + ldrb r0, [r5, r2, lsl #3] + tst r0, #2 + beq _023868C8 + bic r0, r0, #2 + strb r0, [r5, r2, lsl #3] + add r2, r2, #1 + add r1, r1, #1 +_023868C0: + cmp r1, #8 + blt _0238689C +_023868C8: + mov r0, r5 + bl AllManip2 + ldr r0, [r6, #0xb4] + mov r1, r5 +#ifdef JAPAN + add r0, r0, #0x120 +#else + add r0, r0, #0x124 +#endif + mov r2, #0x22 + bl memcpy + b _023864E0 +_023868E8: + cmp sl, #2 + bne _02386924 + ldr r0, [r7] + cmp r0, #4 + bge _02386910 + ldr r1, [r7] + mov r0, r5 + mov r2, #4 + bl ov31_02386050 + b _023864E0 +_02386910: + add r0, r5, #0x20 + mov r1, #0 + mov r2, #1 + bl ov31_02386050 + b _023864E0 +_02386924: + mvn r0, #1 + cmp r4, r0 + beq _02386950 + mov r0, r4 + bl SetAdvancedTextBoxState5 + mov r0, #0x1b + bl AdvanceFrame + mov r0, r4 + bl CloseAdvancedTextBox + mvn r4, #1 + bl sub_020407C0 +_02386950: + ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r1, [r0] + cmp r1, #0 + blt _02386AE8 + ldr r0, [sp, #4] + cmp r0, #0 + beq _02386A04 + mov r0, r1, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02041154 + mov r1, r0 + mov r0, #0 + bl ov29_0234B084 + ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + cmp r0, #4 + bge _023869D8 + bl sub_02041364 + cmp r0, #0 + mov r0, #0 + mov r2, #1 + beq _023869C0 + ldr r1, _02386B20 ; =0x000008D6 + mov r3, r0 + str r2, [sp] + bl YesNoMenu + mov r7, r0 + b _023869F4 +_023869C0: + ldr r1, _02386B24 ; =0x000008D7 + mov r3, r0 + str r2, [sp] + bl YesNoMenu + mov r7, r0 + b _023869F4 +_023869D8: + mov r0, #0 + mov r2, #1 + ldr r1, _02386B24 ; =0x000008D7 + mov r3, r0 + str r2, [sp] + bl YesNoMenu + mov r7, r0 +_023869F4: + mov r0, #1 + mov r1, #0 + bl ov29_0233A0E8 + b _02386A08 +_02386A04: + mov r7, #1 +_02386A08: + cmp r7, #1 + bne _023864B4 + ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + cmp r0, #4 + movge r1, #0 + strgeb r1, [r5, r0, lsl #3] + bge _02386AE8 + bl sub_02041484 + bl sub_0203FD38 + mov r1, #0 + mov r2, r1 + mov r3, #1 + b _02386A80 +_02386A40: + add r8, r0, r1, lsl #3 + add r7, r5, r1, lsl #3 + mov r6, #4 +_02386A4C: + ldrh r4, [r8], #2 + subs r6, r6, #1 + strh r4, [r7], #2 + bne _02386A4C + ldrb r4, [r5, r1, lsl #3] + tst r4, #1 + movne r4, r3 + moveq r4, r2 + tst r4, #0xff + beq _02386A88 + add r1, r1, #1 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 +_02386A80: + cmp r1, #4 + blt _02386A40 +_02386A88: + mov r6, #4 +_02386A8C: + add r4, r5, r6, lsl #3 + add r3, r5, r1, lsl #3 + mov r2, #4 +_02386A98: + ldrh r0, [r4], #2 + subs r2, r2, #1 + strh r0, [r3], #2 + bne _02386A98 + add r0, r6, #1 + mov r0, r0, lsl #0x10 + add r1, r1, #1 + mov r6, r0, asr #0x10 + mov r0, r1, lsl #0x10 + cmp r6, #8 + mov r1, r0, asr #0x10 + blt _02386A8C + mov r2, #0 + b _02386AE0 +_02386AD0: + add r0, r1, #1 + mov r0, r0, lsl #0x10 + strb r2, [r5, r1, lsl #3] + mov r1, r0, asr #0x10 +_02386AE0: + cmp r1, #8 + blt _02386AD0 +_02386AE8: + bl ov31_02386450 + ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + cmp r0, #0 + movge r0, #1 + movlt r0, #0 + and r0, r0, #0xff + add sp, sp, #0x114 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define OV31_0238647C_OFFSET 0x1458 +#else +#define OV31_0238647C_OFFSET 0 +#endif +_02386B0C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 +_02386B10: .word ov29_0235352C +_02386B14: .word 0x000008DC + OV31_0238647C_OFFSET +_02386B18: .word DUNGEON_WINDOW_PARAMS_15 +_02386B1C: .word 0x00000213 +_02386B20: .word 0x000008D6 + OV31_0238647C_OFFSET +_02386B24: .word 0x000008D7 + OV31_0238647C_OFFSET + arm_func_end ov31_0238647C + + arm_func_start ov31_02386B28 +ov31_02386B28: ; 0x02386B28 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #0xa4 + ldr r0, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + ldr r1, [r0, #0x64] + ldrsh r0, [r1, #4] + ldrsh r1, [r1, #6] + bl GetTile + mov r4, r0 + ldr r0, _02386C0C ; =0x000008D1 + bl StringFromId + ldr r1, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r3, r0 + ldr r0, [r1] + mov r1, #8 + add r0, r0, #0x100 + ldrsb r0, [r0, #0x60] + mov r2, #2 + bl DrawTextInWindow + ldr r1, [r4, #0x10] + cmp r1, #0 + moveq r0, #0 + beq _02386B98 + ldr r0, [r1] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_02386B98: + cmp r0, #0 + beq _02386C00 + add r0, sp, #0x54 + mov r2, #0 + bl ov29_022E2A78 + ldr r0, [r4, #0x10] + bl ov29_022E1618 + ldrb r1, [r0] + ldr r0, _02386C10 ; =0x000008D2 + str r1, [sp, #0x14] + bl StringFromId + add r1, sp, #4 + mov r2, r0 + str r1, [sp] + add r0, sp, #0x54 + mov r1, #0x50 + mov r3, #0 + bl PreprocessString + ldr r0, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r1, #0x10 + ldr r0, [r0] + mov r2, #0x12 + add r0, r0, #0x100 + ldrsb r0, [r0, #0x60] + add r3, sp, #0x54 + bl DrawTextInWindow +_02386C00: + add sp, sp, #0xa4 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_02386C08: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C +#ifdef JAPAN +_02386C0C: .word 0x00001D29 +_02386C10: .word 0x00001D2A +#else +_02386C0C: .word 0x000008D1 +_02386C10: .word 0x000008D2 +#endif + arm_func_end ov31_02386B28 + + arm_func_start ov31_02386C14 +ov31_02386C14: ; 0x02386C14 + stmdb sp!, {r3, lr} + ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + add r0, r0, #0x61 + add r0, r0, #0x100 + bl ov29_0234E988 + ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + add r0, r0, #0x100 + ldrsb r0, [r0, #0x60] + bl sub_0202F954 + mov r0, #0x62 + bl AdvanceFrame + mov r0, #0x62 + bl AdvanceFrame + ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + add r0, r0, #0x100 + ldrsb r0, [r0, #0x60] + bl CloseTextBox + ldmia sp!, {r3, pc} + .align 2, 0 +_02386C68: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C + arm_func_end ov31_02386C14 + + arm_func_start ov31_02386C6C +ov31_02386C6C: ; 0x02386C6C + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #0xf4 + mov r5, r0 + mov r0, #0x164 + mov r1, #8 + bl MemAlloc + ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + str r0, [r1] + str r5, [r0, #0x64] +_02386C90: + bl ov29_022EA62C + ldr r0, _02386F10 ; =DUNGEON_WINDOW_PARAMS_18 + ldr r1, _02386F14 ; =ov31_02386B28 + bl CreateTextBox + ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r1, [r1] + strb r0, [r1, #0x160] + bl ov29_022EBA70 + mov r0, #0x25 + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0xc + mov r1, #0 + bl AddDungeonSubMenuOption + bl ov29_022EB9A0 + bl ov29_022EBA84 + mov r1, #0 + ldr r2, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + b _02386CF0 +_02386CDC: + ldr r3, [r2] + add r4, r1, #1 + add r3, r3, r1, lsl #3 + mov r1, r4 + str r4, [r3, #4] +_02386CF0: + cmp r1, r0 + blt _02386CDC + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r2, #0 + ldr r4, [r0] + mov r3, r1, lsl #3 + strh r2, [r4, r3] + ldr r3, [r0] + sub r4, r2, #1 + add r3, r3, r1, lsl #3 + str r4, [r3, #4] + ldr r3, [r0] + add r3, r3, r1, lsl #3 + strh r2, [r3, #8] + ldr r3, [r0] + add r1, r3, r1, lsl #3 + str r4, [r1, #0xc] + ldr r0, [r0] + add r1, r0, #0x58 + bl ov31_0238513C + ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, _02386F18 ; =DUNGEON_WINDOW_PARAMS_17 + ldr r3, [r1] + ldr r1, _02386F1C ; =0x00000213 + add r4, r3, #0x58 + add r2, sp, #0x5c + str r4, [sp, #0xbc] + bl CreateParentMenuFromStringIds + ldr r6, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r4, #0x2d + ldr r1, [r6] + strb r0, [r1, #0x161] +_02386D70: + mov r0, r4 + bl AdvanceFrame + ldr r0, [r6] + add r0, r0, #0x100 + ldrsb r0, [r0, #0x61] + bl IsParentMenuActive + cmp r0, #0 + bne _02386D70 + ldr r0, [r6] + add r0, r0, #0x100 + ldrsb r0, [r0, #0x61] + bl sub_0202ABB0 + ldr r1, [r6] + sub r0, r0, #1 + str r0, [r1, #0x124] + ldr r0, [r6] + ldr r0, [r0, #0x124] + cmp r0, #0 + movlt r6, #1 + blt _02386EBC + cmp r0, #1 + bne _02386E70 + bl ov31_02386C14 + ldrsh r0, [r5, #4] + ldrsh r1, [r5, #6] + bl GetTile + ldr r0, [r0, #0x10] + cmp r0, #0 + beq _02386E68 + ldr r1, [r0] + cmp r1, #2 + bne _02386E68 + bl GetTrapInfo + ldrb r3, [r0] + add r2, sp, #0xc + ldr r1, _02386F20 ; =0x00001013 + str r3, [sp, #0x1c] + str r2, [sp] + ldrb r2, [r0] + ldr r0, _02386F24 ; =DUNGEON_WINDOW_PARAMS_19 +#if defined(EUROPE) + sub r3, r1, #0x740 + add r2, r2, #0xdc + add r2, r2, #0x3400 +#elif defined(JAPAN) + ldr r3, _023881A0 ; =0x00001D2B + add r2, r2, #0x5f + add r2, r2, #0x4700 +#else + sub r3, r1, #0x740 + add r2, r2, #0xda + add r2, r2, #0x3400 +#endif + mov r2, r2, lsl #0x10 + mov r2, r2, lsr #0x10 + str r2, [sp, #4] + mov r2, #0 + str r2, [sp, #8] + bl CreateScrollBoxSingle + mov r6, r0 + mov r4, #0x16 +_02386E3C: + mov r0, r4 + bl AdvanceFrame + mov r0, r6 + bl IsScrollBoxActive + cmp r0, #0 + bne _02386E3C + mov r0, r6 + bl CloseScrollBox + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 +_02386E68: + mov r6, #2 + b _02386EBC +_02386E70: + bl ov29_022EB804 + cmp r0, #0 + beq _02386D70 + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r4, [r5, #0xb4] + ldr r0, [r0] + ldr r1, _02386F28 ; =ov29_0237C91C + ldr r2, [r0, #0x124] + add r0, r4, #0x4a + mov r2, r2, lsl #3 + ldrh r1, [r1, r2] + bl SetMonsterActionFields + mov r6, #0 + strb r6, [r4, #0x4e] + strh r6, [r4, #0x50] + strh r6, [r4, #0x52] + strb r6, [r4, #0x54] + strh r6, [r4, #0x56] + strh r6, [r4, #0x58] +_02386EBC: + mov r0, #0x2d + bl AdvanceFrame + cmp r6, #2 + beq _02386C90 + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + cmp r0, #0 + beq _02386EF8 + bl ov31_02386C14 + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + bl MemFree + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r1, #0 + str r1, [r0] +_02386EF8: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + add sp, sp, #0xf4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02386F0C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C +_02386F10: .word DUNGEON_WINDOW_PARAMS_18 +_02386F14: .word ov31_02386B28 +_02386F18: .word DUNGEON_WINDOW_PARAMS_17 +_02386F1C: .word 0x00000213 +_02386F20: .word 0x00001013 +_02386F24: .word DUNGEON_WINDOW_PARAMS_19 +#ifdef JAPAN +_023881A0: .word 0x00001D2B +#endif +_02386F28: .word ov29_0237C91C + arm_func_end ov31_02386C6C + + arm_func_start ov31_02386F2C +ov31_02386F2C: ; 0x02386F2C + stmdb sp!, {r3, lr} + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x294 + add r0, r0, #0x400 + bl ov29_0234E988 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x97] + cmp r0, r1 + beq _02386F64 + bl CloseAdvancedTextBox +_02386F64: + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x98] + cmp r0, r1 + beq _02386F98 + bl CloseAdvancedTextBox + bl sub_020407C0 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x698] +_02386F98: + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x96] + cmp r0, r1 + beq _02386FB8 + bl CloseTextBox +_02386FB8: + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x3a4 + add r0, r0, #0x400 + bl ov31_023899D4 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x3a8 + add r0, r0, #0x400 + bl ov31_02388714 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x95 + add r0, r0, #0x600 + bl ov29_0234E988 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + bl MemFree + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02387010: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 + arm_func_end ov31_02386F2C + + arm_func_start ov31_02387014 +ov31_02387014: ; 0x02387014 + ldr r1, [r0, #0xb4] + ldr ip, _02387044 ; =ov31_023899B8 + ldrb r0, [r1, #7] + mov r2, #1 + cmp r0, #0 + movne r1, #0xb + ldr r0, _02387048 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldreqb r1, [r1, #0xa8] + ldr r0, [r0] + and r1, r1, #0xff + ldr r0, [r0, #0x7a4] + bx ip + .align 2, 0 +_02387044: .word ov31_023899B8 +_02387048: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 + arm_func_end ov31_02387014 + + arm_func_start TeamMenu +TeamMenu: ; 0x0238704C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x13c + mov sl, r0 + ldr r0, _02387614 ; =0x000007AC + mov r1, #8 + bl MemAlloc + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + str r0, [r1] + bl ov31_023880D8 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + str sl, [r0, #0x69c] + bl ov29_0234EBCC + mov r7, #0 + add r0, sp, #0xb0 + mov r1, #1 + mov r2, r7 + mov r3, r7 + str r7, [sp] + mov r8, r7 + bl ov29_0234EA18 + ldr r2, _0238761C ; =ov31_02387014 + add r0, sp, #0xb0 + mov r1, #0xe + mov r3, r7 + bl ov31_02388114 + ldr r2, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, _02387620 ; =DUNGEON_WINDOW_PARAMS_22 + ldr r3, [r2] + str r0, [r3, #0x7a8] + ldr r0, [r2] + ldr r0, [r0, #0x7a8] + bl ov31_02388444 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r1, sp, #8 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_02388704 + ldr r1, [sp, #0xc] + ldr r0, [sp, #0x10] + add r1, r1, #8 + mov r0, r0, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r0, r0, asr #0x10 + mov r1, r1, asr #0x10 + bl ov31_0238991C + ldr r3, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r1, #0xb + ldr r4, [r3] + mov r2, r7 + str r0, [r4, #0x7a4] + ldr r0, [r3] + ldr r0, [r0, #0x7a4] + bl ov31_023899B8 +_02387124: + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_02388534 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_023886D4 + cmp r0, #1 + moveq r7, #1 + beq _023875D8 + cmp r0, #2 + bne _02387184 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r8, #1 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_023886DC + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r2, [r1] + str r0, [r2, #0x760] + ldr r0, [r1] + ldr sb, [r0, #0x760] + b _023871B0 +_02387184: + cmp r0, #3 + bne _023871B0 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_023886DC + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r2, [r1] + str r0, [r2, #0x760] + ldr r0, [r1] + ldr sb, [r0, #0x760] +_023871B0: + bl ov29_022EBA70 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r1, sp, #0xb0 + ldr r2, [r0] + ldr r0, _02387624 ; =DUNGEON_PTR + ldr r2, [r2, #0x760] + ldr r3, [r0] + add r0, r1, r2, lsl #5 + ldr r1, [r0, #4] + mov r0, #0x1b + add r1, r3, r1, lsl #2 + add r1, r1, #0x12000 +#ifdef JAPAN + ldr r4, [r1, #0xa84] +#else + ldr r4, [r1, #0xb28] +#endif + mov r1, #0 + ldr r5, [r4, #0xb4] + bl AddDungeonSubMenuOption + mov r0, #0x19 + mov r1, #0 + bl AddDungeonSubMenuOption + ldrb r0, [r5, #7] + cmp r0, #0 + bne _02387278 + ldr r0, _02387624 ; =DUNGEON_PTR + ldr r1, [r0] + ldrb r0, [r1, #0x75d] + cmp r0, #0 + ldreqb r0, [r1, #0x75e] + cmpeq r0, #0 + bne _0238726C + ldrsh r0, [r5, #0xc] + bl GetActiveTeamMember + ldrsh r1, [r0, #8] + ldr r0, _02387628 ; =0x00005AA5 + cmp r1, r0 + beq _0238726C + ldrb r0, [r5, #0x48] + bl JoinedAtRangeCheck2Veneer + cmp r0, #0 + beq _02387260 + ldr r0, _02387624 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75c] + cmp r0, #0 + beq _0238726C +_02387260: + mov r0, #0x34 + mov r1, #0 + bl AddDungeonSubMenuOption +_0238726C: + mov r0, #0x1c + mov r1, #0 + bl AddDungeonSubMenuOption +_02387278: + mov r0, #0x30 + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0x1a + mov r1, #0 + bl AddDungeonSubMenuOption + ldrb r0, [r5, #7] + cmp r0, #0 + ldreq r0, _02387624 ; =DUNGEON_PTR + ldreq r1, [r0] + ldreqb r0, [r1, #0x75e] + cmpeq r0, #0 + bne _02387320 + ldrb r0, [r1, #0x75c] + cmp r0, #0 + beq _02387320 + ldrb r0, [r1, #0x748] + bl GetLeaderChangeFlag + cmp r0, #0 + beq _02387320 + mov r0, #0x3b + mov r1, #0 + bl AddDungeonSubMenuOption + ldrsh r0, [r5, #0xc] + mov r6, #1 + cmp r0, #4 + movge r6, #0 + bge _023872FC + bl GetActiveTeamMember + ldrsh r0, [r0, #8] + bl ov29_022F9C34 + cmp r0, #0 + movne r6, #0 +_023872FC: + mov r0, r4 + mov r1, #0 + bl CheckVariousStatuses2 + cmp r0, #0 + movne r6, #0 + cmp r6, #0 + bne _02387320 + mov r0, #0x3b + bl DisableDungeonSubMenuOption +_02387320: + mov r0, r5 + bl IsExperienceLocked + cmp r0, #0 + beq _0238735C + mov r0, #0x19 + bl DisableDungeonSubMenuOption + mov r0, #0x3b + bl DisableDungeonSubMenuOption + mov r0, #0x1a + bl DisableDungeonSubMenuOption + mov r0, #0x30 + bl DisableDungeonSubMenuOption + mov r0, #0x34 + bl DisableDungeonSubMenuOption + b _02387380 +_0238735C: + ldrb r0, [r5, #7] + cmp r0, #0 + beq _02387380 + mov r0, r4 + bl ov29_0234FBD4 + cmp r0, #0 + bne _02387380 + mov r0, #0x1a + bl DisableDungeonSubMenuOption +_02387380: + bl ov29_022EB9A0 + cmp r8, #0 + beq _023873C8 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r3, [sl, #0xb4] + ldr r0, [r0] + add r1, sp, #0xb4 + ldr r2, [r0, #0x760] + add r0, r3, #0x4a + ldr r1, [r1, r2, lsl #5] + bl ov29_022EBA94 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r7, #0 + ldr r0, [r0] + add r0, r0, #0x294 + add r0, r0, #0x400 + bl ov29_0234E988 + b _023875D8 +_023873C8: + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + cmp sb, #0 + ldr r0, [r0] + moveq r2, #1 + add r1, r0, #0x188 + movne r2, #0 + add r0, r0, #0x530 + add r1, r1, #0x400 + bl ov31_0238513C + bl ov29_022EBA84 + mov r2, #0 + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + b _02387410 +_023873FC: + ldr r3, [r1] + add r4, r2, #1 + add r3, r3, r2, lsl #3 + mov r2, r4 + str r4, [r3, #0x534] +_02387410: + cmp r2, r0 + blt _023873FC + ldr r4, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r3, _0238762C ; =0x00000A3C + ldr r0, [r4] + mvn r1, #0 + add r0, r0, r2, lsl #3 + add r0, r0, #0x500 + strh r3, [r0, #0x30] + ldr r0, [r4] + mov r5, #0 + add r0, r0, r2, lsl #3 + str r1, [r0, #0x534] + ldr r3, [r4] + mov r0, #0xa + add r3, r3, r2, lsl #3 + add r3, r3, #0x500 + strh r5, [r3, #0x38] + ldr r3, [r4] + add r2, r3, r2, lsl #3 + str r1, [r2, #0x53c] + ldr r1, [r4] + add r1, r1, #0x188 + add r1, r1, #0x400 + str r1, [sp, #0x78] + bl Arm9LoadUnkFieldNa0x2029EC8 + add r4, r0, #1 + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, _02387630 ; =DUNGEON_WINDOW_PARAMS_23 + ldr r3, [r1] + ldr r1, _02387634 ; =0x00000233 + add r2, sp, #0x18 + add r3, r3, #0x530 + str r4, [sp, #0x18] + bl CreateParentMenuFromStringIds + ldr r4, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r6, #0x1b + ldr r1, [r4] + add fp, sp, #4 + strb r0, [r1, #0x694] +_023874B0: + mov r0, r6 + bl AdvanceFrame + mov r0, r5 + mov r1, fp + bl GetPressedButtons + ldr r0, [r4] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x94] + bl IsParentMenuActive + cmp r0, #0 + ldr r0, [r4] + add r0, r0, #0x600 + bne _02387578 + ldrsb r0, [r0, #0x94] + bl sub_0202ABB0 + subs r1, r0, #1 + bmi _0238754C + ldr r0, [r4] + str r1, [r0, #0x760] + ldr r0, [r4] + ldr r0, [r0, #0x760] + bl ov29_022EB804 + cmp r0, #0 + beq _023874B0 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, _02387638 ; =ov29_0237C91C + ldr r0, [r0] + ldr r5, [sl, #0xb4] + ldr r2, [r0, #0x760] + add r0, r5, #0x4a + mov r2, r2, lsl #3 + ldrh r1, [r1, r2] + bl SetMonsterActionFields + add r0, sp, #0xb0 + add r0, r0, sb, lsl #5 + ldr r0, [r0, #4] + mov r4, #0 + strb r0, [r5, #0x4e] + b _02387594 +_0238754C: + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x294 + add r0, r0, #0x400 + bl ov29_0234E988 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_023886F4 + mov r4, #1 + b _02387594 +_02387578: + ldrsb r0, [r0, #0x94] + bl sub_0202AB80 + mov r1, r0 + mov r0, #0xa + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 + b _023874B0 +_02387594: + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x294 + add r0, r0, #0x400 + bl ov29_0234E988 + cmp r4, #1 + beq _02387124 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x95 + add r0, r0, #0x600 + bl ov29_0234E988 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x3a4 + add r0, r0, #0x400 + bl ov31_023899D4 +_023875D8: + cmp r7, #0 + beq _023875F0 + bl GetLeader + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster +_023875F0: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl ov31_02386F2C + mov r0, #0x1b + bl AdvanceFrame + mov r0, r7 + add sp, sp, #0x13c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02387614: .word 0x000007AC +_02387618: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 +_0238761C: .word ov31_02387014 +_02387620: .word DUNGEON_WINDOW_PARAMS_22 +_02387624: .word DUNGEON_PTR +_02387628: .word 0x00005AA5 +#ifdef JAPAN +_0238762C: .word 0x00000877 +#else +_0238762C: .word 0x00000A3C +#endif +_02387630: .word DUNGEON_WINDOW_PARAMS_23 +_02387634: .word 0x00000233 +_02387638: .word ov29_0237C91C + arm_func_end TeamMenu + + arm_func_start ov31_0238763C +ov31_0238763C: ; 0x0238763C + cmp r0, #0 + moveq r0, #0 + bxeq lr + ldr r0, [r0] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + arm_func_end ov31_0238763C + + arm_func_start ov31_02387660 +ov31_02387660: ; 0x02387660 + ldr r1, _02387680 ; =DUNGEON_PTR + ldrb r0, [r0, #4] + ldr r1, [r1] + ldr ip, _02387684 ; =ov31_0238948C + add r0, r1, r0, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + bx ip + .align 2, 0 +_02387680: .word DUNGEON_PTR +_02387684: .word ov31_0238948C + arm_func_end ov31_02387660 + + arm_func_start ov31_02387688 +ov31_02387688: ; 0x02387688 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x78 + ldr r2, _02387788 ; =DUNGEON_PTR + ldrb r0, [r0, #4] + ldr r2, [r2] + mov r4, r1 + add r0, r2, r0, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr sb, [r0, #0xa84] +#else + ldr sb, [r0, #0xb28] +#endif + bl ov29_022EA62C + cmp r4, #0 + beq _023876C4 + mov r0, sb + bl ov31_023889DC + b _0238776C +_023876C4: + ldr r0, [sb, #0xb4] + bl IsExperienceLocked + cmp r0, #0 + movne r4, #1 + bne _023876E4 + cmp r4, #0 + movne r4, #2 + moveq r4, #0 +_023876E4: + add r0, sp, #0 + mov r1, sb + bl CreateMonsterSummaryFromMonster + mov r2, #0 + add r0, sp, #0 + mov r1, r4 + strh r2, [sp, #0x40] + strh r2, [sp, #0x56] + bl sub_0203F150 + mov r7, #0x62 + mov r6, r7 + mov r5, r7 + mov r4, #1 + mov fp, #0x1c + mov r8, #0 +_02387720: + mov sl, r8 + bl ov29_022EA62C +_02387728: + mov r0, r7 + bl AdvanceFrame + bl sub_0203F398 + cmp r0, #2 + beq _0238775C + cmp r0, #1 + bne _02387728 + bl sub_0203F990 + mov r0, r6 + bl AdvanceFrame + mov r0, r5 + bl AdvanceFrame + mov sl, r4 +_0238775C: + mov r0, fp + bl AdvanceFrame + cmp sl, #0 + beq _02387720 +_0238776C: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, sb + bl ov29_023021F0 + add sp, sp, #0x78 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02387788: .word DUNGEON_PTR + arm_func_end ov31_02387688 + + arm_func_start ov31_0238778C +ov31_0238778C: ; 0x0238778C + stmdb sp!, {r4, lr} + ldr r1, _023877C0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r4, r0 + ldr r0, [r1] + add r0, r0, #0x600 + ldrh r0, [r0, #0x92] + bl StringFromId + mov r1, #2 + mov r3, r0 + mov r0, r4 + mov r2, r1 + bl DrawTextInWindow + ldmia sp!, {r4, pc} + .align 2, 0 +_023877C0: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 + arm_func_end ov31_0238778C + + arm_func_start ov31_023877C4 +ov31_023877C4: ; 0x023877C4 + ldr r2, _023877E4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr ip, _023877E8 ; =DrawTextInWindow + ldr r3, [r2] + mov r1, #2 + add r3, r3, #0x12 + mov r2, #0x10 + add r3, r3, #0x600 + bx ip + .align 2, 0 +_023877E4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 +_023877E8: .word DrawTextInWindow + arm_func_end ov31_023877C4 + + arm_func_start ov31_023877EC +ov31_023877EC: ; 0x023877EC +#ifdef JAPAN +#define OV31_023877EC_OFFSET -8 +#define OV31_023877EC_OFFSET_2 -4 +#define OV31_023877EC_OFFSET_3 -0xA4 +#else +#define OV31_023877EC_OFFSET 0 +#define OV31_023877EC_OFFSET_2 0 +#define OV31_023877EC_OFFSET_3 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2a4 + OV31_023877EC_OFFSET + mov r4, #0 + movs sl, r0 +#ifndef JAPAN + str r3, [sp, #8] +#endif + subne r0, r4, #1 + strne r0, [sl] + mov sb, r1 + ldr r0, _02388080 ; =0x000007AC + mov r1, #8 + mov fp, r2 + bl MemAlloc + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + str r0, [r1] + bl ov31_023880D8 + mov r7, #0 + mov r6, r7 +_02387830: + ldr r0, _02388088 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 + ldr r5, [r0, #0xb28 + OV31_023877EC_OFFSET_3] + mov r0, r5 + bl ov31_0238763C + cmp r0, #0 + beq _0238789C + cmp fp, #0 + beq _0238786C + mov r0, r5 + ldr r8, [r5, #0xb4] + bl ov29_02347100 +#ifdef JAPAN + strb r0, [r8, #0x15d] +#else + strb r0, [r8, #0x161] +#endif +_0238786C: + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r7, lsl #5 + str r6, [r0, #4] + ldr r0, [r5, #0xb4] +#ifdef JAPAN + ldrb r0, [r0, #0x15d] +#else + ldrb r0, [r0, #0x161] +#endif + cmp r0, #0 + movne r1, #0 + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r7 + moveq r1, #3 + strb r1, [r0, #0x84] + add r7, r7, #1 +_0238789C: + add r6, r6, #1 + cmp r6, #4 + blt _02387830 + mov r6, r7 + mvn r5, #0 + add r3, sp, #0x218 + OV31_023877EC_OFFSET + mov r1, #0 + b _023878D0 +_023878BC: + add r2, r3, r6, lsl #5 + add r0, r3, r6 + str r5, [r2, #4] + strb r1, [r0, #0x84] + add r6, r6, #1 +_023878D0: + cmp r6, #4 + blt _023878BC + mov r0, #0xb + bl Arm9LoadUnkFieldNa0x2029EC8 + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r2, #0 + ldr r3, [r1] + str r0, [r3, #0x760] + ldr r0, [r1] + str r7, [r0, #0x764] + ldr r0, [r1] + str r7, [r0, #0x768] + ldr r0, [r1] + str r2, [r0, #0x76c] + ldr r0, [r1] + str r2, [r0, #0x770] + ldr r0, [r1] + str r2, [r0, #0x754] + ldr r0, [r1] + str r2, [r0, #0x758] + bl ov29_022EA62C + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x95 + add r0, r0, #0x600 + bl ov29_0234E988 + mov r5, #0 + add r0, sp, #0x68 + OV31_023877EC_OFFSET + mov r1, r5 + mov r2, #0x80 + bl memset + mov r8, r5 + ldr fp, _0238808C ; =0x000003E7 + b _02387B80 +_02387958: + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r8, lsl #5 + ldr r1, [r0, #4] + cmp r1, #0 + blt _02387B7C + ldr r0, _02388088 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r1, lsl #2 + add r0, r0, #0x12000 + ldr r6, [r0, #0xb28 + OV31_023877EC_OFFSET_3] + mov r0, r6 + bl ov31_0238763C + cmp r0, #0 + beq _02387B7C + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r8 + ldrb r0, [r0, #0x84] + ldr r6, [r6, #0xb4] + cmp r0, #0 + movne r0, #0x57 + moveq r0, #0x44 + and r2, r0, #0xff + add r0, sp, #0x68 + OV31_023877EC_OFFSET + mov r1, r6 + bl ov29_023002F0 + add r0, sp, #0x68 + OV31_023877EC_OFFSET + str r0, [sp, #0x50 + OV31_023877EC_OFFSET] + ldrsh r0, [r6, #0xc] + bl GetActiveTeamMember + ldrsh r0, [r0, #8] + bl ov29_022F9C34 + cmp r0, #0 + ldrsh r1, [r6, #0x12] + ldrsh r0, [r6, #0x16] + beq _02387A84 + add r1, r1, r0 + cmp r1, fp + movgt r3, fp + movle r3, r1 + mov r2, r3, asr #1 + ldrsh r0, [r6, #0x10] + add r2, r3, r2, lsr #30 + cmp r0, r2, asr #2 + bgt _02387A18 + ldr r1, _02388090 ; =ov31_0238A044 + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bl strcpy + b _02387B20 +_02387A18: + cmp r1, fp + movgt r3, fp + movle r3, r1 + mov r2, r3, asr #1 + add r2, r3, r2, lsr #30 + mov r2, r2, asr #2 + cmp r0, r2, lsl #1 + bgt _02387A48 + ldr r1, _02388094 ; =ov31_0238A04C + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bl strcpy + b _02387B20 +_02387A48: + cmp r1, fp + movgt r1, fp + mov r2, r1, asr #1 + add r1, r1, r2, lsr #30 + mov r1, r1, asr #2 + add r1, r1, r1, lsl #1 + cmp r0, r1 + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bgt _02387A78 + ldr r1, _02388098 ; =ov31_0238A054 + bl strcpy + b _02387B20 +_02387A78: + ldr r1, _0238809C ; =ov31_0238A05C + bl strcpy + b _02387B20 +_02387A84: + add r1, r1, r0 + cmp r1, fp + movgt r3, fp + movle r3, r1 + mov r2, r3, asr #1 + ldrsh r0, [r6, #0x10] + add r2, r3, r2, lsr #30 + cmp r0, r2, asr #2 + bgt _02387AB8 + ldr r1, _023880A0 ; =ov31_0238A064 + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bl strcpy + b _02387B20 +_02387AB8: + cmp r1, fp + movgt r3, fp + movle r3, r1 + mov r2, r3, asr #1 + add r2, r3, r2, lsr #30 + mov r2, r2, asr #2 + cmp r0, r2, lsl #1 + bgt _02387AE8 + ldr r1, _023880A4 ; =ov31_0238A06C + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bl strcpy + b _02387B20 +_02387AE8: + cmp r1, fp + movgt r1, fp + mov r2, r1, asr #1 + add r1, r1, r2, lsr #30 + mov r1, r1, asr #2 + add r1, r1, r1, lsl #1 + cmp r0, r1 + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bgt _02387B18 + ldr r1, _023880A8 ; =ov31_0238A074 + bl strcpy + b _02387B20 +_02387B18: + ldr r1, _023880AC ; =ov31_0238A07C + bl strcpy +_02387B20: + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + str r0, [sp, #0x54 + OV31_023877EC_OFFSET] + add r0, sp, #0x18 + OV31_023877EC_OFFSET + str r0, [sp] + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r2, _023880B0 ; =ov31_0238A084 + ldr r0, [r0] + mov r1, #0x100 + add r0, r0, #0x30 + add r0, r0, r5, lsl #8 + mov r3, #0 + bl PreprocessString + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r1, r5, lsl #3 + ldr r2, [r0] + add r0, r2, #0x30 + add r0, r0, r5, lsl #8 + str r0, [r2, r5, lsl #3] + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r5, r5, #1 + ldr r0, [r0] + add r0, r0, r1 + str r5, [r0, #4] +_02387B7C: + add r8, r8, #1 +_02387B80: + cmp r8, r7 + blt _02387958 + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r3, #0 + ldr r1, [r0] + sub r2, r3, #1 + str r3, [r1, r5, lsl #3] + ldr r1, [r0] + ldr r0, _02388088 ; =DUNGEON_PTR + add r1, r1, r5, lsl #3 + str r2, [r1, #4] + ldr r0, [r0] + ldrb r5, [r0, #0x75b] + cmp r5, #0 + ldrne r1, _023880B4 ; =0x00000A3A + movne r0, #0x10 + strne r0, [sp, #0xf4 + OV31_023877EC_OFFSET] + mov r0, #0xb + strneh r1, [sp, #0xf0 + OV31_023877EC_OFFSET] + bl Arm9LoadUnkFieldNa0x2029EC8 + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + cmp r5, #0 + ldr r3, [r1] + add r2, sp, #0x29c + OV31_023877EC_OFFSET + str r0, [r3, #0x760] + ldr r0, [r1] + movne r1, #0x800 + ldr r0, [r0, #0x760] + moveq r1, #0 + add r0, r0, #1 + str r0, [sp, #0xe8 + OV31_023877EC_OFFSET] + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + orr r1, r1, #0x33 + ldr r3, [r0] + str r2, [sp, #0x148 + OV31_023877EC_OFFSET] + ldr r0, _023880B8 ; =DUNGEON_WINDOW_PARAMS_21 + add r2, sp, #0xe8 + OV31_023877EC_OFFSET + orr r1, r1, #0x1200 + bl CreateParentMenu + ldr r2, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, _023880BC ; =ov31_0238778C + ldr r2, [r2] + strb r0, [r2, #0x695] + ldr r0, _023880C0 ; =DUNGEON_WINDOW_PARAMS_24 + bl CreateTextBox + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r3, _023880C4 ; =0x00000A36 + ldr r2, [r1] + mov r5, #0x10 + strb r0, [r2, #0x696] + ldr r2, [r1] + str r5, [sp, #0x18c + OV31_023877EC_OFFSET] + add r0, r2, #0x92 + add r1, r0, #0x500 + add r0, sp, #0x118 + OV31_023877EC_OFFSET + strh r3, [r0, #0x70] + str r1, [sp, #0x1c8 + OV31_023877EC_OFFSET] + cmp sb, #3 + bne _02387CA8 + add r1, r3, #3 + add r0, r2, #0x600 + strh r1, [r0, #0x92] + mov r5, #0 + str r5, [sp] + ldr r0, _023880C8 ; =DUNGEON_WINDOW_PARAMS_20 + ldr r3, _023880CC ; =ov31_023877C4 + add r2, sp, #0x180 + OV31_023877EC_OFFSET + mov r1, #0x800 + str r5, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, [r1] + strb r0, [r1, #0x697] + b _02387CF4 +_02387CA8: + cmp sb, #2 + addne r1, r3, #3 + addne r0, r2, #0x600 + strneh r1, [r0, #0x92] + bne _02387CF4 + add r1, r3, #2 + add r0, r2, #0x600 + strh r1, [r0, #0x92] + mov r5, #0 + str r5, [sp] + ldr r0, _023880C8 ; =DUNGEON_WINDOW_PARAMS_20 + ldr r3, _023880CC ; =ov31_023877C4 + add r2, sp, #0x180 + OV31_023877EC_OFFSET + mov r1, #0x800 + str r5, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, [r1] + strb r0, [r1, #0x697] +_02387CF4: + sub r0, sb, #2 +#ifdef JAPAN + str r0, [sp, #0xc] + ldr r0, _023880D0 ; =0x00000872 + ldr r5, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r8, #0x3d8 + rsb fp, r0, #0x870 +#else + mvn r7, #0x3d8 + str r0, [sp, #0x10] + add r0, r7, #0xe10 + ldr r5, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + str r0, [sp, #0x14] + mov fp, r7, asr #9 +#endif +_02387D10: + ldr r0, [r5] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x95] + bl sub_0202AB80 + ldr r1, [r5] + str r0, [r1, #0x760] + ldr r1, [r5] + mov r0, #0xb + ldr r1, [r1, #0x760] + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 + ldr r0, [r5] + ldr r1, [r0, #0x760] + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r1, lsl #5 + ldr r6, [r0, #4] + cmp r6, #0 + blt _02387EC0 + ldr r0, _02388088 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r7, [r0, #0xa84] + mov r0, r7 + bl ov31_0238763C + cmp r0, #0 + cmpne r8, r6 + beq _02387E98 + cmp sb, #1 + bne _02387DCC + mov r0, r7 +#else + ldr r8, [r0, #0xb28] + mov r0, r8 + bl ov31_0238763C + cmp r0, #0 + cmpne r7, r6 + beq _02387E98 + cmp sb, #1 + bne _02387DCC + mov r0, r8 +#endif + bl sub_0203F9CC + ldr r0, [r5] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x98] + cmp r0, fp + bne _02387DC0 + mov r1, #0 + mov r0, #7 + mov r2, r1 + bl sub_0204018C + ldr r1, [r5] + strb r0, [r1, #0x698] + b _02387DC4 +_02387DC0: + bl sub_02041178 +_02387DC4: + bl sub_020407EC + b _02387E98 +_02387DCC: + ldr r0, [sp, #0x10 + OV31_023877EC_OFFSET_2] + cmp r0, #1 + bhi _02387E98 + ldr r1, [r5] + add r0, r1, #0x600 + ldrsb r0, [r0, #0x97] + str r0, [sp, #0xc + OV31_023877EC_OFFSET_2] + cmp r0, fp + beq _02387E98 + add r0, r1, #0x92 +#ifdef JAPAN + ldr r8, [r7, #0xb4] + add r0, r0, #0x500 + mov r1, r7 + mov r2, #0 + bl ov29_022E2A78 + ldrb r0, [r8, #0xbc] + cmp r0, #7 + beq _02387E24 + mov r0, r8 +#else + ldr r7, [r8, #0xb4] + add r0, r0, #0x500 + mov r1, r8 + mov r2, #0 + bl ov29_022E2A78 + ldrb r0, [r7, #0xbc] + cmp r0, #7 + beq _02387E24 + mov r0, r7 +#endif + bl IsExperienceLocked + cmp r0, #0 + beq _02387E3C +_02387E24: +#ifdef JAPAN + ldr r0, _023880D0 ; =0x00000872 + ldr r2, [r5] + add r1, r0, #6 + add r0, r2, #0x12 +#else + ldr r0, [r5] + ldr r1, _023880D0 ; =0x00000A3D + add r0, r0, #0x12 +#endif + add r0, r0, #0x600 + bl GetStringFromFileVeneer + b _02387E90 +_02387E3C: +#ifdef JAPAN + ldrb r0, [r8, #0x62] +#else + ldrb r0, [r7, #0x62] +#endif + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + bne _02387E6C + ldr r0, [r5] +#ifdef JAPAN + ldr r1, _023880D0 ; =0x00000872 +#else + ldr r1, [sp, #0x14] +#endif + add r0, r0, #0x12 + add r0, r0, #0x600 + bl GetStringFromFileVeneer + b _02387E90 +_02387E6C: + mov r0, #1 + str r0, [sp] + ldr r0, [r5] + ldr r2, _023880D4 ; =OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 + add r0, r0, #0x12 +#ifdef JAPAN + add r1, r8, #0x62 +#else + add r1, r7, #0x62 +#endif + add r0, r0, #0x600 + mov r3, #1 + bl sub_0200D310 +_02387E90: + ldr r0, [sp, #0xc + OV31_023877EC_OFFSET_2] + bl SetAdvancedTextBoxField0x1C2 +_02387E98: +#ifdef JAPAN + mov r0, r7 + mov r1, #0 + mov r2, #1 + mov r8, r6 + bl TryPointCameraToMonster + mov r2, #1 + add r0, r7, #4 +#else + mov r0, r8 + mov r1, #0 + mov r2, #1 + mov r7, r6 + bl TryPointCameraToMonster + mov r2, #1 + add r0, r8, #4 +#endif + mov r1, #0 + mov r3, r2 + bl DrawTileGrid +_02387EC0: + mov r0, #0x1b + bl AdvanceFrame + ldr r0, [r5] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x95] + bl IsParentMenuActive + cmp r0, #0 + bne _02387D10 + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x95] + bl sub_0202ABB0 + subs r3, r0, #1 + bmi _02387F24 + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r1, sp, #0x29c + OV31_023877EC_OFFSET + ldr r2, [r0] + str r3, [r2, #0x760] + ldr r0, [r0] + ldr r0, [r0, #0x760] + ldrb r0, [r1, r0] + cmp r0, #0 + movne r4, #1 + b _02387F28 +_02387F24: + mov r4, #1 +_02387F28: + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x97] + cmp r0, r1 + beq _02387F58 + bl CloseAdvancedTextBox + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x697] +_02387F58: + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x98] + cmp r0, r1 + beq _02387F8C + bl CloseAdvancedTextBox + bl sub_020407C0 + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x698] +_02387F8C: + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x96] + bl CloseTextBox + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r2, #1 + ldr r1, [r0] + mov r0, #0x1b + strb r2, [r1, #0x696] + bl AdvanceFrame + cmp sb, #3 + bne _02387FEC + cmp r4, #0 + beq _0238800C + bl HideTileGrid +#ifndef JAPAN + ldr r0, [sp, #8] + cmp r0, #0 + beq _0238800C +#endif + bl GetLeader + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + b _0238800C +_02387FEC: + bl HideTileGrid +#ifndef JAPAN + ldr r0, [sp, #8] + cmp r0, #0 + beq _0238800C +#endif + bl GetLeader + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster +_0238800C: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #4 + mov r1, #0x3e + bl ov29_022EA370 + cmp r4, #0 + beq _02388038 + bl ov31_02386F2C + mov r0, #0 + b _02388078 +_02388038: + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r1, sp, #0x21c + OV31_023877EC_OFFSET + ldr r0, [r0] + cmp sl, #0 + ldr r0, [r0, #0x760] + ldr r4, [r1, r0, lsl #5] + strne r4, [sl] + bl ov31_02386F2C + cmp r4, #0 + movlt r0, #0 + blt _02388078 + ldr r0, _02388088 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + OV31_023877EC_OFFSET_3] +_02388078: + add sp, sp, #0x2a4 + OV31_023877EC_OFFSET + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define OV31_023877EC_DATA_OFFSET -0x1C5 +#else +#define OV31_023877EC_DATA_OFFSET 0 +#endif +_02388080: .word 0x000007AC +_02388084: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 +_02388088: .word DUNGEON_PTR +_0238808C: .word 0x000003E7 +_02388090: .word ov31_0238A044 +_02388094: .word ov31_0238A04C +_02388098: .word ov31_0238A054 +_0238809C: .word ov31_0238A05C +_023880A0: .word ov31_0238A064 +_023880A4: .word ov31_0238A06C +_023880A8: .word ov31_0238A074 +_023880AC: .word ov31_0238A07C +_023880B0: .word ov31_0238A084 +_023880B4: .word 0x00000A3A + OV31_023877EC_DATA_OFFSET +_023880B8: .word DUNGEON_WINDOW_PARAMS_21 +_023880BC: .word ov31_0238778C +_023880C0: .word DUNGEON_WINDOW_PARAMS_24 +_023880C4: .word 0x00000A36 + OV31_023877EC_DATA_OFFSET +_023880C8: .word DUNGEON_WINDOW_PARAMS_20 +_023880CC: .word ov31_023877C4 +#ifdef JAPAN +_023880D0: .word 0x00000872 +#else +_023880D0: .word 0x00000A3D +#endif +_023880D4: .word OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 + arm_func_end ov31_023877EC + + arm_func_start ov31_023880D8 +ov31_023880D8: ; 0x023880D8 + mov r2, #0 + strb r2, [r0, #0x592] + strb r2, [r0, #0x612] + sub r1, r2, #2 + strb r1, [r0, #0x695] + strb r1, [r0, #0x694] + strb r1, [r0, #0x696] + strb r1, [r0, #0x697] + strb r1, [r0, #0x698] + str r2, [r0, #0x7a4] + str r2, [r0, #0x7a8] + str r2, [r0, #0x76c] + str r2, [r0, #0x770] + str r2, [r0, #0x760] + bx lr + arm_func_end ov31_023880D8 + + arm_func_start ov31_02388114 +ov31_02388114: ; 0x02388114 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r1 + ldr r0, _02388154 ; =0x000006D4 + mov r4, r2 + mov r1, #8 + mov r5, r3 + bl MemAlloc + mov r1, r7 + mov r2, r6 + mov r3, r4 + mov r4, r0 + str r5, [sp] + bl ov31_02388158 + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02388154: .word 0x000006D4 + arm_func_end ov31_02388114 + + arm_func_start ov31_02388158 +ov31_02388158: ; 0x02388158 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xdc + mov sl, r0 + mvn r0, #1 + strb r0, [sl] + ldr r4, [sp, #0x100] + str r3, [sl, #0x6c4] + str r4, [sl, #0x6c8] + mov r0, #0 + str r0, [sl, #0x688] + str r0, [sl, #0x68c] + str r0, [sl, #0x67c] + mov sb, r1 + str r2, [sl, #0x6c0] + sub r0, r0, #1 + mov r7, sb + str r0, [sl, #0x6b8] + add r6, sl, #4 + mov r4, #8 +_023881A4: + ldmia r7!, {r0, r1, r2, r3} + stmia r6!, {r0, r1, r2, r3} + subs r4, r4, #1 + bne _023881A4 + ldmia r7, {r0, r1, r2} + stmia r6, {r0, r1, r2} + add r0, sp, #0xc + mov r1, #0x80 + bl MemZero + mov r4, #0 + add r0, sb, #0x14 + mov r7, r4 + str r0, [sp, #8] + add fp, sl, #0xc0 + b _023883F4 +_023881E0: + ldr r0, [sb] + cmp r0, #1 + bne _023882A0 + add r0, sb, r7, lsl #5 + ldr r1, [r0, #0x20] + cmp r1, #0 + beq _023883F0 + moveq r0, #0 + beq _02388218 + ldr r0, [r1] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_02388218: + cmp r0, #0 + beq _023883F0 + add r0, sb, r7 + ldrb r0, [r0, #0x84] + ldr r6, [r1, #0xb4] + add r1, sb, r7, lsl #5 + cmp r0, #0 + movne r0, #0x57 + moveq r0, #0x44 + and r2, r0, #0xff + ldrb r0, [r1, #0x14] + cmp r0, #0 + add r0, sp, #0xc + beq _02388264 + ldrb r2, [r1, #0x1e] + ldr r1, [sp, #8] + add r1, r1, r7, lsl #5 + bl sub_02054F44 + b _0238826C +_02388264: + mov r1, r6 + bl ov29_023002F0 +_0238826C: + ldrsh r1, [r6, #0x12] + ldrsh r0, [r6, #0x16] + ldrsh r5, [r6, #0x10] + add r8, r1, r0 + ldr r0, _0238841C ; =0x000003E7 + cmp r8, r0 + movgt r8, r0 + ldrsh r0, [r6, #0xc] + bl GetActiveTeamMember + ldrsh r0, [r0, #8] + bl ov29_022F9C34 + str r0, [sp, #4] + b _023882E8 +_023882A0: + cmp r0, #0 + bne _023882E8 + add r0, sb, r7, lsl #5 + ldr r6, [r0, #0x20] + ldrb r0, [r6] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _023883F0 + ldrsh r5, [r6, #0xe] + ldrsh r8, [r6, #0x10] + ldrsh r0, [r6, #8] + bl sub_02056228 + str r0, [sp, #4] + mov r1, r6 + add r0, sp, #0xc + bl sub_020585B4 +_023882E8: + add r0, sp, #0xc + str r0, [sp, #0xc4] + ldr r0, [sp, #4] + cmp r0, #0 + mov r0, r8, asr #1 + add r0, r8, r0, lsr #30 + beq _02388360 + cmp r5, r0, asr #2 + mov r0, r0, asr #2 + bgt _02388320 + ldr r1, _02388420 ; =ov31_0238A0A8 + add r0, sp, #0x4c + bl strcpy + b _023883B8 +_02388320: + cmp r5, r0, lsl #1 + bgt _02388338 + ldr r1, _02388424 ; =ov31_0238A0B0 + add r0, sp, #0x4c + bl strcpy + b _023883B8 +_02388338: + add r0, r0, r0, lsl #1 + cmp r5, r0 + add r0, sp, #0x4c + bgt _02388354 + ldr r1, _02388428 ; =ov31_0238A0B8 + bl strcpy + b _023883B8 +_02388354: + ldr r1, _0238842C ; =ov31_0238A0C0 + bl strcpy + b _023883B8 +_02388360: + cmp r5, r0, asr #2 + mov r0, r0, asr #2 + bgt _0238837C + ldr r1, _02388430 ; =ov31_0238A0C8 + add r0, sp, #0x4c + bl strcpy + b _023883B8 +_0238837C: + cmp r5, r0, lsl #1 + bgt _02388394 + ldr r1, _02388434 ; =ov31_0238A0D0 + add r0, sp, #0x4c + bl strcpy + b _023883B8 +_02388394: + add r0, r0, r0, lsl #1 + cmp r5, r0 + add r0, sp, #0x4c + bgt _023883B0 + ldr r1, _02388438 ; =ov31_0238A0D8 + bl strcpy + b _023883B8 +_023883B0: + ldr r1, _0238843C ; =ov31_0238A0E0 + bl strcpy +_023883B8: + add r0, sp, #0x4c + str r0, [sp, #0xc8] + add r0, sp, #0x8c + str r0, [sp] + ldr r2, _02388440 ; =ov31_0238A0E8 + add r0, fp, r4, lsl #8 + mov r1, #0x100 + mov r3, #0 + bl PreprocessString + add r1, fp, r4, lsl #8 + add r0, sl, r4, lsl #3 + str r1, [r0, #0x90] + add r4, r4, #1 + str r4, [r0, #0x94] +_023883F0: + add r7, r7, #1 +_023883F4: + ldr r0, [sb, #0x88] + cmp r7, r0 + blt _023881E0 + mov r0, #0 + add r1, sl, r4, lsl #3 + str r0, [r1, #0x90] + sub r0, r0, #1 + str r0, [r1, #0x94] + add sp, sp, #0xdc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0238841C: .word 0x000003E7 +_02388420: .word ov31_0238A0A8 +_02388424: .word ov31_0238A0B0 +_02388428: .word ov31_0238A0B8 +_0238842C: .word ov31_0238A0C0 +_02388430: .word ov31_0238A0C8 +_02388434: .word ov31_0238A0D0 +_02388438: .word ov31_0238A0D8 +_0238843C: .word ov31_0238A0E0 +_02388440: .word ov31_0238A0E8 + arm_func_end ov31_02388158 + + arm_func_start ov31_02388444 +ov31_02388444: ; 0x02388444 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x98 + mov r6, r0 + mov r5, r1 + bl ov29_0234E988 + mov r0, #0xb + bl Arm9LoadUnkFieldNa0x2029EC8 + str r0, [r6, #0x67c] + ldr r1, [r6, #0x8c] + mov r0, #0 + str r1, [r6, #0x680] + ldr r1, [r6, #0x8c] + str r1, [r6, #0x684] + str r0, [r6, #0x688] + str r0, [r6, #0x68c] + str r0, [r6, #0x670] + str r0, [r6, #0x674] + bl ov29_022EA62C + ldr r0, _02388528 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r4, [r0, #0x75b] + cmp r4, #0 + ldrne r1, _0238852C ; =0x00000A3A + movne r0, #0x10 + strne r0, [sp, #0xc] + strneh r1, [sp, #8] + mov r0, #0xb + bl Arm9LoadUnkFieldNa0x2029EC8 + str r0, [r6, #0x67c] + add r1, r0, #1 + add r0, r6, #0x88 + str r1, [sp] + str r0, [sp, #0x60] + ldr r0, [r6, #0x6c0] + add r2, sp, #0 + tst r0, #2 + beq _023884FC + cmp r4, #0 + movne r3, #0x800 + ldr r1, _02388530 ; =0x00401233 + moveq r3, #0 + orr r1, r3, r1 + mov r0, r5 + add r3, r6, #0x90 + bl CreateParentMenuWrapper + b _0238851C +_023884FC: + cmp r4, #0 + movne r0, #0x800 + moveq r0, #0 + orr r1, r0, #0x33 + mov r0, r5 + orr r1, r1, #0x1200 + add r3, r6, #0x90 + bl CreateParentMenu +_0238851C: + strb r0, [r6] + add sp, sp, #0x98 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02388528: .word DUNGEON_PTR +#ifdef JAPAN +_0238852C: .word 0x00000875 +#else +_0238852C: .word 0x00000A3A +#endif +_02388530: .word 0x00401233 + arm_func_end ov31_02388444 + + arm_func_start ov31_02388534 +ov31_02388534: ; 0x02388534 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + mov r0, #0 + str r0, [sl, #0x6cc] + add r4, sl, #0x2cc + str r0, [r4, #0x404] + add sb, sl, #4 + mov r5, #2 + mov r6, #0xb + mov fp, #0x1b + mov r8, r0 + add r7, sp, #0 +_02388564: + mov r0, r8 + mov r1, r7 + bl GetPressedButtons + ldrsb r0, [sl] + bl sub_0202AB80 + str r0, [sl, #0x67c] + ldr r1, [sl, #0x6b8] + cmp r1, r0 + beq _023885DC + str r0, [sl, #0x6b8] + ldr r1, [sb] + cmp r1, #1 + bne _023885B8 + add r0, sb, r0, lsl #5 + ldr r0, [r0, #0x20] + cmp r0, #0 + ldrne r1, [sl, #0x6c4] + cmpne r1, #0 + beq _023885DC + blx r1 + b _023885DC +_023885B8: + cmp r1, #0 + bne _023885DC + add r0, sb, r0, lsl #5 + ldr r0, [r0, #0x20] + cmp r0, #0 + ldrne r1, [sl, #0x6c4] + cmpne r1, #0 + beq _023885DC + blx r1 +_023885DC: + ldr r1, [sl, #0x67c] + mov r0, r6 + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 + ldr r0, [sl, #0x6c0] + tst r0, #4 + beq _02388644 + ldrh r0, [sp] + tst r0, #8 + beq _02388644 + ldr r0, [sl, #0x67c] + add r0, sb, r0 + ldrb r0, [r0, #0x84] + cmp r0, #0 + bne _02388638 + add r0, sl, #0x5c0 + mov r1, #0 + bl PlayWindowInputSound + mov r0, #2 + str r0, [r4, #0x400] + ldr r0, [sl, #0x6b8] + str r0, [r4, #0x404] + b _023886BC +_02388638: + mov r1, r5 + add r0, sl, #0x5c0 + bl PlayWindowInputSound +_02388644: + ldrsb r0, [sl] + bl IsParentMenuActive + cmp r0, #0 + bne _023886A8 + ldrsb r0, [sl] + bl sub_0202ABB0 + subs r0, r0, #1 + bmi _0238869C + ldrsb r0, [sl] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [sl, #0x67c] + add r0, sb, r0 + ldrb r0, [r0, #0x84] + cmp r0, #0 + moveq r0, #3 + streq r0, [r4, #0x400] + ldreq r0, [sl, #0x67c] + streq r0, [r4, #0x404] + movne r0, #1 + strne r0, [r4, #0x400] + b _023886BC +_0238869C: + mov r0, #1 + str r0, [r4, #0x400] + b _023886BC +_023886A8: + mov r0, sl + bl ov31_02388744 + mov r0, fp + bl AdvanceFrame + b _02388564 +_023886BC: + mov r0, sl + bl ov31_02388744 + mov r0, #0x1b + bl AdvanceFrame + bl HideTileGrid + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end ov31_02388534 + + arm_func_start ov31_023886D4 +ov31_023886D4: ; 0x023886D4 + ldr r0, [r0, #0x6cc] + bx lr + arm_func_end ov31_023886D4 + + arm_func_start ov31_023886DC +ov31_023886DC: ; 0x023886DC + ldr r1, [r0, #0x6cc] + sub r1, r1, #2 + cmp r1, #1 + ldrls r0, [r0, #0x6d0] + mvnhi r0, #0 + bx lr + arm_func_end ov31_023886DC + + arm_func_start ov31_023886F4 +ov31_023886F4: ; 0x023886F4 + ldr ip, _02388700 ; =ResumeParentMenu + ldrsb r0, [r0] + bx ip + .align 2, 0 +_02388700: .word ResumeParentMenu + arm_func_end ov31_023886F4 + + arm_func_start ov31_02388704 +ov31_02388704: ; 0x02388704 + ldr ip, _02388710 ; =GetWindowRectangle + ldrsb r0, [r0] + bx ip + .align 2, 0 +_02388710: .word GetWindowRectangle + arm_func_end ov31_02388704 + + arm_func_start ov31_02388714 +ov31_02388714: ; 0x02388714 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r4, [r5] + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, r4 + bl ov29_0234E988 + mov r0, r4 + bl MemFree + mov r0, #0 + str r0, [r5] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov31_02388714 + + arm_func_start ov31_02388744 +ov31_02388744: ; 0x02388744 + stmdb sp!, {r4, lr} + ldr r1, [r0, #0x6c0] + tst r1, #8 + ldrne r1, [r0, #0x67c] + addne r0, r0, r1, lsl #5 + ldrne r4, [r0, #0x24] + cmpne r4, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + mov r2, #1 + mov r3, r2 + add r0, r4, #4 + mov r1, #0 + bl DrawTileGrid + ldmia sp!, {r4, pc} + arm_func_end ov31_02388744 + + arm_func_start RestMenu +RestMenu: ; 0x0238878C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x9c + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r0, [r0] + cmp r0, #0 + bne _023887CC + mov r0, #0x10 + mov r1, #8 + bl MemAlloc + ldr r1, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r2, #0 + str r0, [r1] + str r2, [r0] + ldr r0, [r1] + sub r1, r2, #2 + strb r1, [r0, #4] +_023887CC: + mov r3, #0 + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r2, r3 +_023887D8: + ldr r1, [r0] + add r1, r1, r3 + add r3, r3, #1 + strb r2, [r1, #0xc] + cmp r3, #2 + blt _023887D8 + bl ov29_022E08F4 + cmp r0, #0 + ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + moveq r1, #3 + ldreq r0, [r0] + ldr ip, _023889BC ; =0x000008C2 + streqb r1, [r0, #0xc] + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r5, #0x10 + ldr r1, [r0] + ldr r0, _023889C0 ; =DUNGEON_WINDOW_PARAMS_25 + add r4, r1, #0xc + ldr r1, _023889C4 ; =0x00001A13 + ldr r3, _023889C8 ; =DUNGEON_SUBMENU_ITEMS_5 + add r2, sp, #4 + strh ip, [sp, #0xc] + str r5, [sp, #0x10] + str r4, [sp, #0x64] + bl CreateParentMenuFromStringIds + ldr r4, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r5, #0x62 + ldr r1, [r4] + strb r0, [r1, #4] +_0238884C: + mov r0, r5 + bl AdvanceFrame + ldr r0, [r4] + ldrsb r0, [r0, #4] + bl IsParentMenuActive + cmp r0, #0 + bne _0238884C + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r0, [r0] + ldrsb r0, [r0, #4] + bl sub_0202ABB0 + ldr r1, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r1, [r1] + str r0, [r1, #8] + mov r0, #0x62 + bl AdvanceFrame + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r0, [r0] + ldrsb r0, [r0, #4] + bl CloseParentMenu + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r1, [r0] + ldr r0, [r1, #8] + cmp r0, #1 + beq _023888BC + cmp r0, #2 + beq _02388908 + b _0238897C +_023888BC: + mov r2, #1 + ldr r1, _023889CC ; =0x000008C5 + mov r3, r2 + mov r0, #0 + str r2, [sp] + bl YesNoMenu + cmp r0, #1 + movne r0, #1 + bne _023888F0 + bl GetLeaderAction + mov r1, #0x2b + bl SetMonsterActionFields + mov r0, #0 +_023888F0: + cmp r0, #0 + ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mvneq r1, #0 + ldreq r0, [r0] + streq r1, [r0, #8] + b _02388984 +_02388908: + mov r2, #1 + ldr r1, _023889D0 ; =0x000008C6 + mov r3, r2 + mov r0, #0 + str r2, [sp] + bl YesNoMenu + cmp r0, #1 + movne r2, #1 + bne _02388964 + bl GetLeaderAction + mov r1, #0x2e + bl SetMonsterActionFields + bl GetLeader + mov r2, r0 + mov r1, #0 + ldr r0, _023889D4 ; =0x0000025A + mov r3, r1 + bl ov29_022ECDE4 + ldr r0, _023889D8 ; =DUNGEON_PTR + mov r1, #1 + ldr r0, [r0] + mov r2, #0 + strb r1, [r0, #0x758] +_02388964: + cmp r2, #0 + ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mvneq r1, #0 + ldreq r0, [r0] + streq r1, [r0, #8] + b _02388984 +_0238897C: + mvn r0, #0 + str r0, [r1, #8] +_02388984: + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r0, [r0] + ldr r1, [r0, #8] + cmp r1, #0 + bge _023887CC + cmp r0, #0 + beq _023889B0 + bl MemFree + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r1, #0 + str r1, [r0] +_023889B0: + add sp, sp, #0x9c + ldmia sp!, {r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +#define REST_MENU_OFFSET 0x1458 +#else +#define REST_MENU_OFFSET 0 +#endif +_023889B8: .word OVERLAY31_UNKNOWN_POINTER__NA_238A284 +_023889BC: .word 0x000008C2 + REST_MENU_OFFSET +_023889C0: .word DUNGEON_WINDOW_PARAMS_25 +_023889C4: .word 0x00001A13 +_023889C8: .word DUNGEON_SUBMENU_ITEMS_5 +_023889CC: .word 0x000008C5 + REST_MENU_OFFSET +_023889D0: .word 0x000008C6 + REST_MENU_OFFSET +_023889D4: .word 0x0000025A +_023889D8: .word DUNGEON_PTR + arm_func_end RestMenu + + arm_func_start ov31_023889DC +ov31_023889DC: ; 0x023889DC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x18 + mov r6, r0 + ldr r4, [r6, #0xb4] + add r3, sp, #0xc + add r0, r4, #0x9c + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + mov r0, #8 + mov r1, #0x62 + bl ov29_022EA370 + mov r0, r6 + mov r1, #1 + bl IsBlinded + mov r3, r0 + ldrsh r0, [r4, #2] + ldrsh r2, [r4, #0xe] + add r1, r4, #0x90 + bl PrintIqSkillsMenu + mov r5, #0x62 +_02388A2C: + bl sub_02041B7C + movs r7, r0 + bne _02388A44 + mov r0, r5 + bl AdvanceFrame + b _02388A2C +_02388A44: + bl sub_020420F4 + mov r0, r6 + bl ov29_023021F0 + ldr r0, [r6, #0xb4] + add r3, sp, #0 + add r0, r0, #0x9c + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + add r0, sp, #0xc + mov r1, #0x38 + bl IqSkillFlagTest + mov r5, r0 + add r0, sp, #0 + mov r1, #0x38 + bl IqSkillFlagTest + cmp r5, #0 + bne _02388AA8 + cmp r0, #0 + beq _02388AF8 + ldr r0, _02388BFC ; =_020A1870 + ldrsh r1, [r4, #0x16] + ldrsh r0, [r0] + add r0, r1, r0 + strh r0, [r4, #0x16] + b _02388AF8 +_02388AA8: + cmp r0, #0 + bne _02388AF8 + ldr r0, _02388BFC ; =_020A1870 + ldrsh r1, [r4, #0x16] + ldrsh r0, [r0] + ldr r2, _02388C00 ; =0x000003E7 + sub r0, r1, r0 + strh r0, [r4, #0x16] + ldrsh r1, [r4, #0x12] + ldrsh r0, [r4, #0x16] + add r1, r1, r0 + cmp r1, r2 + ldrsh r0, [r4, #0x10] + movle r2, r1 + cmp r0, r2 + ble _02388AF8 + ldr r0, _02388C00 ; =0x000003E7 + cmp r1, r0 + movgt r1, r0 + strh r1, [r4, #0x10] +_02388AF8: +#ifdef JAPAN + mov r0, #0x41 + bl TeamMemberHasEnabledIqSkill + ldr r2, _02389E78 ; =DUNGEON_PTR + mov r1, #0x39 + ldr r2, [r2] + add r2, r2, #0x1a000 + strb r0, [r2, #0x19d] + add r0, sp, #0xc +#else + bl UpdateMapSurveyorFlag + add r0, sp, #0xc + mov r1, #0x39 +#endif + bl IqSkillFlagTest + mov r5, r0 + add r0, sp, #0 + mov r1, #0x39 + bl IqSkillFlagTest + cmp r5, #0 + bne _02388B74 + cmp r0, #0 + beq _02388BE8 + mov r5, #0 +#ifdef JAPAN + add r3, r4, #0x120 +#else + add r3, r4, #0x124 +#endif + mov r1, r5 + mov r2, #1 +_02388B38: + ldrb r0, [r3, r5, lsl #3] + add r4, r3, r5, lsl #3 + tst r0, #1 + movne r0, r2 + moveq r0, r1 + tst r0, #0xff + ldrneh r0, [r4, #2] + orrne r0, r0, #0x100 + strneh r0, [r4, #2] + add r0, r5, #1 + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + cmp r5, #4 + blt _02388B38 + b _02388BE8 +_02388B74: + cmp r0, #0 + bne _02388BE8 + mov sb, #0 +#ifdef JAPAN + add r6, r4, #0x120 +#else + add r6, r4, #0x124 +#endif + mov r4, sb + mov r5, #1 +_02388B8C: + ldrb r0, [r6, sb, lsl #3] + add r8, r6, sb, lsl #3 + tst r0, #1 + movne r0, r5 + moveq r0, r4 + tst r0, #0xff + beq _02388BD4 + ldrh r1, [r8, #2] + mov r0, r8 + bic r1, r1, #0x100 + strh r1, [r8, #2] + bl GetMaxPp + ldrb r1, [r8, #6] + cmp r1, r0 + ble _02388BD4 + mov r0, r8 + bl GetMaxPp + strb r0, [r8, #6] +_02388BD4: + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov sb, r0, asr #0x10 + cmp sb, #4 + blt _02388B8C +_02388BE8: + cmp r7, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02388BFC: .word _020A1870 +_02388C00: .word 0x000003E7 +#ifdef JAPAN +_02389E78: .word DUNGEON_PTR +#endif + arm_func_end ov31_023889DC + + arm_func_start RecruitmentSearchMenuLoop +RecruitmentSearchMenuLoop: ; 0x02388C04 + stmdb sp!, {r3, lr} + sub sp, sp, #0xa0 + ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r1, [r0] + ldr r0, [r1, #0xd94] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _02388D24 +_02388C24: ; jump table + b _02388C34 ; case 0 + b _02388CD0 ; case 1 + b _02388CF8 ; case 2 + b _02388D18 ; case 3 +_02388C34: + ldr r0, _02388D34 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x748] + bl IsRecruitingAllowed + cmp r0, #0 + ldreq r2, _02388D38 ; =0x00000B44 + ldreq r1, _02388D3C ; =ov29_0238280C + moveq r0, #4 + streqh r2, [r1] + beq _02388D28 + ldr r0, _02388D34 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75d] + cmp r0, #0 + ldrne r2, _02388D40 ; =0x00000B45 + ldrne r1, _02388D3C ; =ov29_0238280C + movne r0, #4 + strneh r2, [r1] + bne _02388D28 + ldr r1, _02388D44 ; =0x00000B46 + mov r0, #0x10 + strh r1, [sp, #0x10] + str r0, [sp, #0x14] + mov ip, #0 + str ip, [sp] + ldr r0, _02388D48 ; =DUNGEON_WINDOW_PARAMS_26 + ldr r1, _02388D4C ; =0x00001813 + ldr r3, _02388D50 ; =ov31_02388D54 + add r2, sp, #8 + str ip, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r2, [r1] + strb r0, [r2] + ldr r1, [r1] + ldr r0, [r1, #0xd94] + add r0, r0, #1 + str r0, [r1, #0xd94] + b _02388D24 +_02388CD0: + ldrsb r0, [r1] + bl IsAdvancedTextBoxActive + cmp r0, #0 + bne _02388D24 + ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r1, [r0] + ldr r0, [r1, #0xd94] + add r0, r0, #1 + str r0, [r1, #0xd94] + b _02388D24 +_02388CF8: + ldrsb r0, [r1] + bl CloseAdvancedTextBox + ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r1, [r0] + ldr r0, [r1, #0xd94] + add r0, r0, #1 + str r0, [r1, #0xd94] + b _02388D24 +_02388D18: + bl ov29_0234F77C + mov r0, #4 + b _02388D28 +_02388D24: + mov r0, #1 +_02388D28: + add sp, sp, #0xa0 + ldmia sp!, {r3, pc} + .align 2, 0 +#ifdef JAPAN +#define RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -0x4FE +#else +#define RECRUITMENT_SEARCH_MENU_LOOP_OFFSET 0 +#endif +_02388D30: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 +_02388D34: .word DUNGEON_PTR +_02388D38: .word 0x00000B44 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET +_02388D3C: .word ov29_0238280C +_02388D40: .word 0x00000B45 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET +_02388D44: .word 0x00000B46 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET +_02388D48: .word DUNGEON_WINDOW_PARAMS_26 +_02388D4C: .word 0x00001813 +_02388D50: .word ov31_02388D54 + arm_func_end RecruitmentSearchMenuLoop + + arm_func_start ov31_02388D54 +ov31_02388D54: ; 0x02388D54 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xd4 + ldr r4, _02388E54 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + mov sl, r0 + ldr r0, [r4] + mov r8, #4 + ldr r0, [r0, #0xd90] + mov sb, #0x14 + cmp r0, #0 + beq _02388E30 + mov r7, #0 + add r6, sp, #0x44 + add fp, sp, #4 + add r5, sp, #0x84 + b _02388E1C +_02388D90: + add r0, r1, r7, lsl #1 + ldrsh r1, [r0, #4] + mov r0, r6 + bl GetSpeciesString + ldr r0, [r4] + add r0, r0, r7, lsl #1 + ldrsh r0, [r0, #4] + bl GetDexNumber + ldr r2, [r4] + str r0, [sp, #0xa8] + add r2, r2, r7 + ldrb r2, [r2, #0x90a] + ldr r1, _02388E58 ; =ov31_0238A154 + mov r0, fp + mov r3, r6 + bl ov31_02388E60 + mov r0, r6 + mov r1, #0x40 + mov r2, fp + mov r3, #0 + str r5, [sp] + bl PreprocessString + mov r0, sl + mov r1, r8 + mov r2, sb + mov r3, r6 + bl DrawTextInWindow + add sb, sb, #0xd + cmp sb, #0x7c + blt _02388E18 + cmp r8, #4 + bgt _02388E4C + mov r8, #0x74 + mov sb, #0x14 +_02388E18: + add r7, r7, #1 +_02388E1C: + ldr r1, [r4] + ldr r0, [r1, #0xd90] + cmp r7, r0 + blt _02388D90 + b _02388E4C +_02388E30: + ldr r0, _02388E5C ; =0x00000B47 + bl StringFromId + mov r3, r0 + mov r0, sl + mov r1, r8 + mov r2, sb + bl DrawTextInWindow +_02388E4C: + add sp, sp, #0xd4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02388E54: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 +_02388E58: .word ov31_0238A154 +#ifdef JAPAN +_02388E5C: .word 0x00000649 +#else +_02388E5C: .word 0x00000B47 +#endif + arm_func_end ov31_02388D54 + + arm_func_start ov31_02388E60 +ov31_02388E60: ; 0x02388E60 + 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 ov31_02388E60 + + arm_func_start ov31_02388E88 +ov31_02388E88: ; 0x02388E88 +#ifdef JAPAN +#define OV31_02388E88_OFFSET -0x50 +#else +#define OV31_02388E88_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x84 + sub sp, sp, #0x400 + ldr r0, _02389164 ; =OVERLAY31_UNKNOWN_STRUCT__NA_238A144 + bl sub_020348E4 + cmp r0, #0 + beq _02389158 + ldr r0, _02389168 ; =0x00000D98 + mov r1, #8 + bl MemAlloc + ldr r1, _0238916C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + mov r3, #0 + str r0, [r1] + add r5, r0, #4 + ldr r0, _02389170 ; =0x00000483 + mov r4, r3 + add r1, sp, #0 +_02388ECC: + add r2, r5, r3 + strb r4, [r1, r3] + add r3, r3, #1 + strb r4, [r2, #0x906] + cmp r3, r0 + blt _02388ECC + mov sb, #1 + mov r8, #2 + add r7, sp, #0 + ldr r6, _02389174 ; =DUNGEON_PTR + b _02388F3C +_02388EF8: + ldr r1, [r6] + mov sl, sb + add r1, r1, r4, lsl #3 + add r1, r1, #0x3900 + ldrsh r2, [r1, #0x76 + OV31_02388E88_OFFSET] + ldrsh r1, [r1, #0x78 + OV31_02388E88_OFFSET] + cmp r2, #0 + cmpeq r1, #0 + beq _02388F38 + add r0, r0, #0x174 + OV31_02388E88_OFFSET + add r0, r0, #0x3800 + add r0, r0, r4, lsl #3 + cmp r2, #0 + moveq sl, r8 + bl GetMonsterIdFromSpawnEntry + strb sl, [r7, r0] +_02388F38: + add r4, r4, #1 +_02388F3C: + ldr r0, [r6] + add r1, r0, #0x3000 +#ifdef JAPAN + ldr r1, [r1, #0xd7c] +#else + ldr r1, [r1, #0xe20] +#endif + cmp r4, r1 + blt _02388EF8 + ldrb r0, [r0, #0x790] + cmp r0, #0 + beq _02388F6C + bl GetKecleonIdToSpawnByFloor + add r1, sp, #0 + mov r2, #1 + strb r2, [r1, r0] +_02388F6C: + ldr r0, _02389174 ; =DUNGEON_PTR + mov sl, #0 + ldr r0, [r0] +#ifdef JAPAN + mov r8, #1 +#else + mov sb, #1 +#endif + add r0, r0, #0x700 + ldrsh r2, [r0, #0xa8] + cmp r2, #0 + addne r0, sp, #0 + movne r1, #1 + strneb r1, [r0, r2] +_02388F94: +#ifdef JAPAN + mov r0, r8, lsl #0x10 + add r1, sp, #0 + ldrb r1, [r1, r0, asr #16] + mov r7, r0, asr #0x10 +#else + mov r0, sb, lsl #0x10 + add r1, sp, #0 + ldrb r1, [r1, r0, asr #16] + mov r8, r0, asr #0x10 +#endif + mov r6, #0x44 + cmp r1, #0 + mov r4, #0 + beq _023890B4 +#ifdef JAPAN + mov r0, r7 +#else + mov r0, r8 +#endif + bl SpecificRecruitCheck + cmp r0, #0 + beq _023890B4 +#ifdef JAPAN + mov r0, r7 +#else + mov r0, r8 +#endif + bl CanMonsterSpawn + cmp r0, #0 + beq _023890B4 +#ifdef JAPAN + mov r0, r7 +#else + mov r0, r8 +#endif + bl GetRecruitRate2 + ldr r1, _02389178 ; =0xFFFFFC19 + cmp r0, r1 + beq _023890B4 +#ifdef JAPAN + mov sb, r4 + ldr fp, _0238A43C ; =0x0000022B + b _0238A2A8 +_0238A26C: + mov r0, sb, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetTeamMember + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _0238A2A4 + ldrsh r1, [r0, #4] + mov r0, r7 + bl BaseFormsEqual + cmp r0, #0 + bne _0238A2B0 +_0238A2A4: + add sb, sb, #1 +_0238A2A8: + cmp sb, fp + blt _0238A26C +_0238A2B0: + ldr r0, _0238A43C ; =0x0000022B + cmp sb, r0 + movne r4, #1 + cmp r4, #0 + bne _0238906C + mov sb, #0 + b _0238905C +_0238900C: + mov r0, sb, lsl #0x10 +#else + mov r0, r8 + mov r1, #1 + bl IsMonsterOnTeam + cmp r0, #0 + movne r4, #1 + cmp r4, #0 + bne _0238906C + mov r7, #0 + b _0238905C +_0238900C: + mov r0, r7, lsl #0x10 +#endif + mov r0, r0, asr #0x10 + bl GetActiveTeamMember + mov fp, r0 + ldrb r0, [fp] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02389058 + ldrsh r0, [fp, #8] + bl CheckTeamMemberIdxVeneer + cmp r0, #0 + bne _02389058 + ldrsh r1, [fp, #0xc] +#ifdef JAPAN + mov r0, r7 + bl BaseFormsEqual + cmp r0, #0 + bne _02389064 +_02389058: + add sb, sb, #1 +_0238905C: + cmp sb, #4 + blt _0238900C +_02389064: + cmp sb, #4 + movne r4, #1 +_0238906C: + add sb, r5, sl + ldrb r0, [sb, #0x906] +#else + mov r0, r8 + bl BaseFormsEqual + cmp r0, #0 + bne _02389064 +_02389058: + add r7, r7, #1 +_0238905C: + cmp r7, #4 + blt _0238900C +_02389064: + cmp r7, #4 + movne r4, #1 +_0238906C: + add r7, r5, sl + ldrb r0, [r7, #0x906] +#endif + cmp r4, #0 + movne r6, #0x46 + cmp r6, r0 + bne _023890A4 +#ifdef JAPAN + mov r0, r7 +#else + mov r0, r8 +#endif + bl GetDexNumber + mov r1, sl, lsl #1 + mov r4, r0 + ldrsh r0, [r5, r1] + bl GetDexNumber + cmp r4, r0 + beq _023890B4 +_023890A4: + mov r0, sl, lsl #1 +#ifdef JAPAN + strh r7, [r5, r0] + strb r6, [sb, #0x906] +#else + strh r8, [r5, r0] + strb r6, [r7, #0x906] +#endif + add sl, sl, #1 +_023890B4: + ldr r0, _02389170 ; =0x00000483 +#ifdef JAPAN + add r8, r8, #1 + cmp r8, r0 +#else + add sb, sb, #1 + cmp sb, r0 +#endif + blt _02388F94 + add r0, r5, #6 + str sl, [r5, #0xd8c] + add r6, r0, #0x900 + mov r8, #0 + b _02389140 +_023890D8: + add r7, r8, #1 + mov fp, r8, lsl #1 + b _02389134 +_023890E4: + mov r1, r7, lsl #1 + ldrsh r0, [r5, r1] + ldrsh sb, [r5, r1] + bl GetDexNumber + mov r4, r0 + ldrsh r0, [r5, fp] + bl GetDexNumber + ldrsh r2, [r5, fp] + add r1, sb, r4, lsl #11 + add r0, r2, r0, lsl #11 + cmp r1, r0 + bge _02389130 + ldrb r1, [r6, r7] + mov r0, r7, lsl #1 + strh r2, [r5, r0] + ldrb r0, [r6, r8] + strb r0, [r6, r7] + strh sb, [r5, fp] + strb r1, [r6, r8] +_02389130: + add r7, r7, #1 +_02389134: + cmp r7, sl + blt _023890E4 + add r8, r8, #1 +_02389140: + cmp r8, sl + blt _023890D8 + ldr r0, _0238916C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0xd94] +_02389158: + add sp, sp, #0x84 + add sp, sp, #0x400 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02389164: .word OVERLAY31_UNKNOWN_STRUCT__NA_238A144 +_02389168: .word 0x00000D98 +_0238916C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 +_02389170: .word 0x00000483 +_02389174: .word DUNGEON_PTR +_02389178: .word 0xFFFFFC19 +#ifdef JAPAN +_0238A43C: .word 0x0000022B +#endif + arm_func_end ov31_02388E88 + + arm_func_start ov31_0238917C +ov31_0238917C: ; 0x0238917C + stmdb sp!, {r3, lr} + ldr r0, _023891A4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl MemFree + ldr r0, _023891A4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_023891A4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 + arm_func_end ov31_0238917C + + arm_func_start ov31_023891A8 +ov31_023891A8: ; 0x023891A8 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl sub_02030A18 + mov r4, r0 + ldr r0, _023891F8 ; =DUNGEON_SUBMENU_ITEMS_6 + mov r1, r4, lsl #3 + ldrh r1, [r0, r1] + mov r0, r5 + bl sub_02030A2C +#if defined(EUROPE) + add r0, r4, #0xb2 + add r0, r0, #0x3f00 +#elif defined(JAPAN) + add r0, r4, #0xb3 + add r0, r0, #0x4900 +#else + add r0, r4, #0xfb0 + add r0, r0, #0x3000 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r3, r0 + mov r0, r5 + mov r1, #4 + mov r2, #0x10 + bl DrawTextInWindow + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_023891F8: .word DUNGEON_SUBMENU_ITEMS_6 + arm_func_end ov31_023891A8 + + arm_func_start HelpMenuLoop +HelpMenuLoop: ; 0x023891FC + stmdb sp!, {r4, lr} + sub sp, sp, #0xa0 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r2, [r0] + ldr r0, [r2, #8] + cmp r0, #6 + addls pc, pc, r0, lsl #2 + b _023893F0 +_0238921C: ; jump table + b _02389238 ; case 0 + b _023892B8 ; case 1 + b _02389278 ; case 2 + b _02389344 ; case 3 + b _023893A8 ; case 4 + b _023893DC ; case 5 + b _023893DC ; case 6 +_02389238: + ldr ip, _02389400 ; =0x00003FA7 + mov r4, #0x10 + ldr r0, _02389404 ; =DUNGEON_WINDOW_PARAMS_27 + ldr r1, _02389408 ; =0x00401813 + ldr r3, _0238940C ; =DUNGEON_SUBMENU_ITEMS_6 + add r2, sp, #8 + strh ip, [sp, #0x10] + str r4, [sp, #0x14] + bl CreateParentMenuFromStringIds + ldr r1, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r2, #1 + ldr r3, [r1] + strb r0, [r3] + ldr r0, [r1] + str r2, [r0, #8] + b _023893F0 +_02389278: + ldrsb r0, [r2] + bl sub_02028354 + cmp r0, #3 + bne _02389298 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202810C +_02389298: + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl ResumeParentMenu + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #1 + ldr r0, [r0] + str r1, [r0, #8] +_023892B8: + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl IsParentMenuActive + cmp r0, #0 + bne _023893F0 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202ABB0 + movs r4, r0 + bmi _02389320 + bl sub_02001808 + cmp r0, #0xa000 + ldrlt r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + movlt r1, #2 + ldrlt r0, [r0] + strlt r1, [r0, #8] + blt _023893F0 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #3 + ldr r2, [r0] + str r4, [r2, #4] + ldr r0, [r0] + str r1, [r0, #8] + b _02389330 +_02389320: + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #6 + ldr r0, [r0] + str r1, [r0, #8] +_02389330: + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202812C + b _023893F0 +_02389344: + mov r0, #0x10 + str r0, [sp, #0x14] + ldr r1, [r2, #4] + ldr r0, _0238940C ; =DUNGEON_SUBMENU_ITEMS_6 + mov r1, r1, lsl #3 + ldrh r1, [r0, r1] + mov ip, #8 + ldr r0, _02389410 ; =DUNGEON_WINDOW_PARAMS_28 + strh r1, [sp, #0x10] + ldr r2, [r2, #4] + ldr r1, _02389414 ; =0x00009833 + str r2, [sp, #8] + str ip, [sp] + mov ip, #1 + ldr r3, _02389418 ; =ov31_023891A8 + add r2, sp, #8 + str ip, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r2, #4 + ldr r3, [r1] + strb r0, [r3, #1] + ldr r0, [r1] + str r2, [r0, #8] + b _023893F0 +_023893A8: + ldrsb r0, [r2, #1] + bl IsAdvancedTextBoxActive + cmp r0, #0 + bne _023893F0 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0, #1] + bl CloseAdvancedTextBox + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #2 + ldr r0, [r0] + str r1, [r0, #8] + b _023893F0 +_023893DC: + ldrsb r0, [r2] + bl CloseParentMenu + bl ov29_0234F77C + mov r0, #4 + b _023893F4 +_023893F0: + mov r0, #1 +_023893F4: + add sp, sp, #0xa0 + ldmia sp!, {r4, pc} + .align 2, 0 +_023893FC: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C +#if defined(EUROPE) +_02389400: .word 0x00003FA9 +#elif defined(JAPAN) +_02389400: .word 0x000049AA +#else +_02389400: .word 0x00003FA7 +#endif +_02389404: .word DUNGEON_WINDOW_PARAMS_27 +_02389408: .word 0x00401813 +_0238940C: .word DUNGEON_SUBMENU_ITEMS_6 +_02389410: .word DUNGEON_WINDOW_PARAMS_28 +_02389414: .word 0x00009833 +_02389418: .word ov31_023891A8 + arm_func_end HelpMenuLoop + + arm_func_start ov31_0238941C +ov31_0238941C: ; 0x0238941C + stmdb sp!, {r3, lr} + ldr r0, _02389458 ; =OVERLAY31_UNKNOWN_STRUCT__NA_238A190 + bl sub_020348E4 + cmp r0, #0 + ldmeqia sp!, {r3, pc} + mov r0, #0xc + mov r1, #8 + bl MemAlloc + ldr r1, _0238945C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r2, #0 + str r0, [r1] + str r2, [r0, #4] + ldr r0, [r1] + str r2, [r0, #8] + ldmia sp!, {r3, pc} + .align 2, 0 +_02389458: .word OVERLAY31_UNKNOWN_STRUCT__NA_238A190 +_0238945C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C + arm_func_end ov31_0238941C + + arm_func_start ov31_02389460 +ov31_02389460: ; 0x02389460 + stmdb sp!, {r3, lr} + ldr r0, _02389488 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl MemFree + ldr r0, _02389488 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02389488: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C + arm_func_end ov31_02389460 + + arm_func_start ov31_0238948C +ov31_0238948C: ; 0x0238948C + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x134 +#ifdef JAPAN + mov r5, r0 + mov r0, #0x410 + mov r1, #8 + bl MemAlloc + mov r1, #0x410 + mov r4, r0 + bl MemZero + mvn r1, #1 + strb r1, [r4] + add r0, r4, #0x30c + strb r1, [r4, #1] + bl ov31_02389D80 + mov r0, #0 + str r0, [r4, #0x40c] + strb r0, [r4, #0x408] + bl ov29_022EA62C + mov r0, r4 + mov r1, r5 + bl ov31_02389A78 + ldr r1, [r4, #0x40c] + mov r0, #8 + str r1, [r4, #0x3cc] + str r0, [r4, #0x3d0] + mov r1, #0 + str r1, [r4, #0x3d4] + str r1, [r4, #0x3d8] + str r1, [r4, #0x3bc] + mov r0, #0x10 + str r0, [r4, #0x3c0] + mov r0, r4 + str r1, [r4, #0x3c8] + bl ov29_0234E988 + add r0, sp, #0xac + bl InitPreprocessorArgs + ldrb r0, [r4, #0x408] + cmp r0, #0 + ldrne r1, _023898F0 ; =0x0000158C + mov r0, #0x10 + ldreq r1, _023898F4 ; =0x0000158B + str r0, [sp, #0xa8] + strh r1, [sp, #0xa4] + ldrb r0, [r4, #0x408] + cmp r0, #0 + bne _0238A820 + ldr r1, [r4, #0x404] + add r0, r4, #0x78 + ldr r1, [r1, #0xb4] + bl GetMonsterName + add r0, r4, #0x78 + str r0, [sp, #0xe4] +_0238A820: + ldr r0, _023898F8 ; =DUNGEON_WINDOW_PARAMS_31 + ldr r1, _023898FC ; =0x80401813 + add r2, sp, #0x9c + add r3, r4, #0xc4 + bl CreateParentMenu + strb r0, [r4] +_0238A838: + mov r0, #0x3d + bl AdvanceFrame + ldr r0, [r4, #0x404] + bl ov29_0234FB50 + mov r7, r0 + add r1, sp, #0 + mov r0, #0 + bl GetPressedButtons + ldrsb r0, [r4] + bl IsParentMenuActive + cmp r0, #0 + bne _0238AA84 + ldrsb r0, [r4] + bl sub_0202ABB0 + movs r6, r0 + bmi _0238AA78 + ldrsb r0, [r4] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r4, #0x3c8] + add r1, r4, r0 + add r0, r4, #0x30c + ldrb r5, [r1, #0xb8] + bl ov31_02389D80 + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 + bl ov29_022EBA70 + mov r0, #0x2f + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0xc + mov r1, #0 + bl AddDungeonSubMenuOption + cmp r7, #0 + beq _0238A8CC + mov r0, #0x2f + bl DisableDungeonSubMenuOption +_0238A8CC: + add r1, r4, #0x6c + add r0, r4, #4 + mov r2, #0 + str r1, [sp, #0x64] + bl ov31_0238513C + bl ov29_022EBA84 + mov r3, #0 + b _0238A8FC +_0238A8EC: + add r2, r3, #1 + add r1, r4, r3, lsl #3 + mov r3, r2 + str r2, [r1, #8] +_0238A8FC: + cmp r3, r0 + blt _0238A8EC + ldr r0, _02389904 ; =0x00000877 + add r2, r4, r3, lsl #3 + strh r0, [r2, #4] + mvn r1, #1 + mov r0, #0 + str r1, [r2, #8] + strh r0, [r2, #0xc] + sub r1, r0, #1 + add r0, r4, #1 + str r1, [r2, #0x10] + bl ov29_0234E988 + ldr r0, _02389908 ; =0x0238B4C0 + ldr r1, _0238990C ; =0x80000213 + add r2, sp, #4 + add r3, r4, #4 + bl CreateParentMenuFromStringIds + strb r0, [r4, #1] + mvn r8, #0 + mov r7, #0x3d +_0238A950: + mov r0, r7 + bl AdvanceFrame + ldrsb r0, [r4, #1] + bl IsParentMenuActive + cmp r0, #0 + bne _0238A950 + ldrsb r0, [r4, #1] + bl sub_0202ABB0 + subs r1, r0, #1 + bmi _0238A998 + ldrsb r0, [r4, #1] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r4, #0x3c8] + bl ov29_022EB804 + cmp r0, #0 + movne r8, #0 + b _0238A9AC +_0238A998: + mvn r0, #2 + cmp r1, r0 + bne _0238A9AC + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 +_0238A9AC: + cmp r8, #0 + bge _0238A9C8 + add r0, r4, #1 + bl ov29_0234E988 + ldrsb r0, [r4] + bl ResumeParentMenu + b _0238AB68 +_0238A9C8: + ldr r0, [r4, #0x3c8] + cmp r0, #0 + bne _0238AA3C + ldr r0, _02389910 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldrb r0, [r4, #0x408] + cmp r0, #0 + beq _0238A9F8 + mov r0, r5 + bl ov31_02389C68 + b _0238AA04 +_0238A9F8: + ldr r0, [r4, #0x404] + mov r1, r5 + bl ov31_02389C2C +_0238AA04: + ldr r1, [r4, #0x404] + mov r0, r4 + bl ov31_02389A78 + add r0, r4, #1 + bl ov29_0234E988 + ldrsb r0, [r4] + bl ResumeParentMenu + ldrsb r0, [r4] + add r1, r4, #0xc4 + bl sub_0202A98C + ldrsb r0, [r4] + sub r1, r6, #1 + bl sub_0202AB94 + b _0238AB68 +_0238AA3C: + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 + bl sub_02001808 + cmp r0, #0xa000 + bge _0238AA64 + add r0, r4, #1 + bl ov29_0234E988 + ldrsb r0, [r4] + bl ResumeParentMenu + b _0238AB68 +_0238AA64: + ldrsb r1, [r4] + mov r0, r5 + mov r2, #1 + bl ov31_02389CC0 + b _0238AB68 +_0238AA78: + bl ov29_022EAC78 + mov r0, #1 + b _0238AB6C +_0238AA84: + ldrh r0, [sp] + tst r0, #8 + beq _0238AADC + ldr r0, _02389914 ; =0x00003F04 + bl ov29_022EACCC + bl sub_02001808 + cmp r0, #0xa000 + blt _0238AB68 + ldrsb r0, [r4] + bl sub_0202B030 + mov r0, #0x3d + bl AdvanceFrame + ldrsb r0, [r4] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r4, #0x3c8] + add r0, r4, r0 + ldrb r0, [r0, #0xb8] + ldrsb r1, [r4] + mov r2, #1 + bl ov31_02389CC0 + b _0238AB68 +_0238AADC: + tst r0, #4 + beq _0238AB68 + cmp r7, #0 + beq _0238AAFC + ldr r0, _02389918 ; =0x00003F03 + mov r1, #0x100 + bl sub_02017C74 + b _0238AB68 +_0238AAFC: + ldrsb r0, [r4] + bl sub_0202B030 + ldrsb r0, [r4] + bl sub_0202ABB0 + mov r5, r0 + ldr r0, _02389910 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldrb r0, [r4, #0x408] + cmp r0, #0 + add r0, r4, r5 + beq _0238AB38 + ldrb r0, [r0, #0xb7] + bl ov31_02389C68 + b _0238AB44 +_0238AB38: + ldrb r1, [r0, #0xb7] + ldr r0, [r4, #0x404] + bl ov31_02389C2C +_0238AB44: + ldr r1, [r4, #0x404] + mov r0, r4 + bl ov31_02389A78 + ldrsb r0, [r4] + add r1, r4, #0xc4 + bl sub_0202A98C + ldrsb r0, [r4] + sub r1, r5, #1 + bl sub_0202AB94 +_0238AB68: + mov r0, #0 +_0238AB6C: + cmp r0, #0 + beq _0238A838 + add r0, r4, #1 + bl ov29_0234E988 + mov r0, r4 + bl ov29_0234E988 + mov r0, #0x3d + bl AdvanceFrame + add r0, r4, #1 + bl ov29_0234E988 + mov r0, r4 + bl ov29_0234E988 + mov r0, r4 +#else + mov r4, r0 + mov r0, #0x530 + mov r1, #8 + bl MemAlloc + mov r5, r0 + mov r1, #0x530 + bl MemZero + add r0, r5, #0x2c + mvn r1, #1 + strb r1, [r5] + add r0, r0, #0x400 + strb r1, [r5, #1] + bl ov31_02389D80 + mov r0, #0 + str r0, [r5, #0x52c] + strb r0, [r5, #0x528] + bl ov29_022EA62C + mov r0, r5 + mov r1, r4 + bl ov31_02389A78 + ldr r1, [r5, #0x52c] + mov r0, #8 + str r1, [r5, #0x4ec] + str r0, [r5, #0x4f0] + mov r1, #0 + str r1, [r5, #0x4f4] + str r1, [r5, #0x4f8] + str r1, [r5, #0x4dc] + mov r0, #0x10 + str r0, [r5, #0x4e0] + mov r0, r5 + str r1, [r5, #0x4e8] + bl ov29_0234E988 + add r0, sp, #0xac + bl InitPreprocessorArgs + ldrb r0, [r5, #0x528] + cmp r0, #0 + ldrne r1, _023898F0 ; =0x00000F5F + mov r0, #0x10 + ldreq r1, _023898F4 ; =0x00000F5E + str r0, [sp, #0xa8] + strh r1, [sp, #0xa4] + ldrb r0, [r5, #0x528] + cmp r0, #0 + bne _02389560 + ldr r1, [r5, #0x524] + add r0, r5, #0x78 + ldr r1, [r1, #0xb4] + bl GetMonsterName + add r0, r5, #0x78 + str r0, [sp, #0xe4] +_02389560: + ldr r0, _023898F8 ; =DUNGEON_WINDOW_PARAMS_31 + ldr r1, _023898FC ; =0x80401813 + add r2, sp, #0x9c + add r3, r5, #0xc4 + bl CreateParentMenu + strb r0, [r5] +_02389578: + mov r0, #0x3d + bl AdvanceFrame + ldr r0, [r5, #0x524] + bl ov29_0234FB50 + mov r4, r0 + add r1, sp, #0 + mov r0, #0 + bl GetPressedButtons + ldrsb r0, [r5] + bl IsParentMenuActive + cmp r0, #0 + bne _023897C8 + ldrsb r0, [r5] + bl sub_0202ABB0 + movs r7, r0 + bmi _023897BC + ldrsb r0, [r5] + bl sub_0202ABB0 + sub r1, r0, #1 + add r0, r5, #0x2c + str r1, [r5, #0x4e8] + add r1, r5, r1 + add r0, r0, #0x400 + ldrb r6, [r1, #0xb8] + bl ov31_02389D80 + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 + bl ov29_022EBA70 + mov r0, #0x2f + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0xc + mov r1, #0 + bl AddDungeonSubMenuOption + cmp r4, #0 + beq _02389610 + mov r0, #0x2f + bl DisableDungeonSubMenuOption +_02389610: + add r1, r5, #0x6c + add r0, r5, #4 + mov r2, #0 + str r1, [sp, #0x64] + bl ov31_0238513C + bl ov29_022EBA84 + mov r3, #0 + b _02389640 +_02389630: + add r2, r3, #1 + add r1, r5, r3, lsl #3 + mov r3, r2 + str r2, [r1, #8] +_02389640: + cmp r3, r0 + blt _02389630 + ldr r0, _02389904 ; =0x00000A3C + add r2, r5, r3, lsl #3 + strh r0, [r2, #4] + mvn r1, #1 + mov r0, #0 + str r1, [r2, #8] + strh r0, [r2, #0xc] + sub r1, r0, #1 + add r0, r5, #1 + str r1, [r2, #0x10] + bl ov29_0234E988 + ldr r0, _02389908 ; =DUNGEON_WINDOW_PARAMS_30 + ldr r1, _0238990C ; =0x80000213 + add r2, sp, #4 + add r3, r5, #4 + bl CreateParentMenuFromStringIds + strb r0, [r5, #1] + mvn r8, #0 + mov r4, #0x3d +_02389694: + mov r0, r4 + bl AdvanceFrame + ldrsb r0, [r5, #1] + bl IsParentMenuActive + cmp r0, #0 + bne _02389694 + ldrsb r0, [r5, #1] + bl sub_0202ABB0 + subs r1, r0, #1 + bmi _023896DC + ldrsb r0, [r5, #1] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r5, #0x4e8] + bl ov29_022EB804 + cmp r0, #0 + movne r8, #0 + b _023896F0 +_023896DC: + mvn r0, #2 + cmp r1, r0 + bne _023896F0 + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 +_023896F0: + cmp r8, #0 + bge _0238970C + add r0, r5, #1 + bl ov29_0234E988 + ldrsb r0, [r5] + bl ResumeParentMenu + b _023898AC +_0238970C: + ldr r0, [r5, #0x4e8] + cmp r0, #0 + bne _02389780 + ldr r0, _02389910 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldrb r0, [r5, #0x528] + cmp r0, #0 + beq _0238973C + mov r0, r6 + bl ov31_02389C68 + b _02389748 +_0238973C: + ldr r0, [r5, #0x524] + mov r1, r6 + bl ov31_02389C2C +_02389748: + ldr r1, [r5, #0x524] + mov r0, r5 + bl ov31_02389A78 + add r0, r5, #1 + bl ov29_0234E988 + ldrsb r0, [r5] + bl ResumeParentMenu + ldrsb r0, [r5] + add r1, r5, #0xc4 + bl sub_0202A98C + ldrsb r0, [r5] + sub r1, r7, #1 + bl sub_0202AB94 + b _023898AC +_02389780: + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 + bl sub_02001808 + cmp r0, #0xa000 + bge _023897A8 + add r0, r5, #1 + bl ov29_0234E988 + ldrsb r0, [r5] + bl ResumeParentMenu + b _023898AC +_023897A8: + ldrsb r1, [r5] + mov r0, r6 + mov r2, #1 + bl ov31_02389CC0 + b _023898AC +_023897BC: + bl ov29_022EAC78 + mov r0, #1 + b _023898B0 +_023897C8: + ldrh r0, [sp] + tst r0, #8 + beq _02389820 + ldr r0, _02389914 ; =0x00003F04 + bl ov29_022EACCC + bl sub_02001808 + cmp r0, #0xa000 + blt _023898AC + ldrsb r0, [r5] + bl sub_0202B030 + mov r0, #0x3d + bl AdvanceFrame + ldrsb r0, [r5] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r5, #0x4e8] + add r0, r5, r0 + ldrb r0, [r0, #0xb8] + ldrsb r1, [r5] + mov r2, #1 + bl ov31_02389CC0 + b _023898AC +_02389820: + tst r0, #4 + beq _023898AC + cmp r4, #0 + beq _02389840 + ldr r0, _02389918 ; =0x00003F03 + mov r1, #0x100 + bl sub_02017C74 + b _023898AC +_02389840: + ldrsb r0, [r5] + bl sub_0202B030 + ldrsb r0, [r5] + bl sub_0202ABB0 + mov r4, r0 + ldr r0, _02389910 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldrb r0, [r5, #0x528] + cmp r0, #0 + add r0, r5, r4 + beq _0238987C + ldrb r0, [r0, #0xb7] + bl ov31_02389C68 + b _02389888 +_0238987C: + ldrb r1, [r0, #0xb7] + ldr r0, [r5, #0x524] + bl ov31_02389C2C +_02389888: + ldr r1, [r5, #0x524] + mov r0, r5 + bl ov31_02389A78 + ldrsb r0, [r5] + add r1, r5, #0xc4 + bl sub_0202A98C + ldrsb r0, [r5] + sub r1, r4, #1 + bl sub_0202AB94 +_023898AC: + mov r0, #0 +_023898B0: + cmp r0, #0 + beq _02389578 + add r0, r5, #1 + bl ov29_0234E988 + mov r0, r5 + bl ov29_0234E988 + mov r0, #0x3d + bl AdvanceFrame + add r0, r5, #1 + bl ov29_0234E988 + mov r0, r5 + bl ov29_0234E988 + mov r0, r5 +#endif + bl MemFree + add sp, sp, #0x134 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +_023898F0: .word 0x0000158C +_023898F4: .word 0x0000158B +#else +_023898F0: .word 0x00000F5F +_023898F4: .word 0x00000F5E +#endif +_023898F8: .word DUNGEON_WINDOW_PARAMS_31 +_023898FC: .word 0x80401813 +_02389900: .word 0x00003F02 +#ifdef JAPAN +_02389904: .word 0x00000877 +#else +_02389904: .word 0x00000A3C +#endif +_02389908: .word DUNGEON_WINDOW_PARAMS_30 +_0238990C: .word 0x80000213 +_02389910: .word 0x00003F07 +_02389914: .word 0x00003F04 +_02389918: .word 0x00003F03 + arm_func_end ov31_0238948C + + arm_func_start ov31_0238991C +ov31_0238991C: ; 0x0238991C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + mov r0, #2 + mov r1, #8 + bl MemAlloc + mov r1, r5 + mov r2, r4 + mov r4, r0 + bl ov31_0238994C + mov r0, r4 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov31_0238991C + + arm_func_start ov31_0238994C +ov31_0238994C: ; 0x0238994C + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + mov r3, r2, asr #2 + mov r4, r0 + mov r0, r1, asr #2 + add r2, r2, r3, lsr #29 + add ip, r1, r0, lsr #29 + ldr r6, _023899B0 ; =DUNGEON_WINDOW_PARAMS_32 + mov lr, r2, asr #3 + add r5, sp, #0 + ldmia r6, {r0, r1, r2, r3} + stmia r5, {r0, r1, r2, r3} + mov ip, ip, asr #3 + add r3, lr, #1 + ldr r1, _023899B4 ; =ov31_02389A04 + mov r0, r5 + mov r2, r4 + strb ip, [sp, #4] + strb r3, [sp, #5] + bl CreateTextBoxWithArg + strb r0, [r4] + mov r0, #0xb + strb r0, [r4, #1] + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_023899B0: .word DUNGEON_WINDOW_PARAMS_32 +_023899B4: .word ov31_02389A04 + arm_func_end ov31_0238994C + + arm_func_start ov31_023899B8 +ov31_023899B8: ; 0x023899B8 + stmdb sp!, {r3, lr} + strb r1, [r0, #1] + cmp r2, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + bl sub_0202F9B8 + ldmia sp!, {r3, pc} + arm_func_end ov31_023899B8 + + arm_func_start ov31_023899D4 +ov31_023899D4: ; 0x023899D4 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r4, [r5] + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldrsb r0, [r4] + bl CloseTextBox2 + mov r0, r4 + bl MemFree + mov r0, #0 + str r0, [r5] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov31_023899D4 + + arm_func_start ov31_02389A04 +ov31_02389A04: ; 0x02389A04 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x94 + mov r5, r0 + mov r4, r1 + bl sub_02027B1C + add r0, sp, #0x44 + bl InitPreprocessorArgs + ldrb r0, [r4, #1] + ldr r3, _02389A70 ; =0x0000C402 + add ip, sp, #0x44 + cmp r0, #0xb + strne r0, [sp, #0x54] +#ifdef JAPAN + ldreq r2, _0238AD30 ; =0x0000158D + add r0, sp, #4 + ldrne r2, _02389A74 ; =0x0000158E +#else + moveq r2, #0xf60 + ldrne r2, _02389A74 ; =0x00000F61 + add r0, sp, #4 +#endif + mov r1, #0x40 + str ip, [sp] + bl PreprocessStringFromId + add r3, sp, #4 + mov r0, r5 + mov r1, #4 + mov r2, #2 + bl DrawTextInWindow + mov r0, r5 + bl UpdateWindow + add sp, sp, #0x94 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02389A70: .word 0x0000C402 +#ifdef JAPAN +_0238AD30: .word 0x0000158D +_02389A74: .word 0x0000158E +#else +_02389A74: .word 0x00000F61 +#endif + arm_func_end ov31_02389A04 + + arm_func_start ov31_02389A78 +ov31_02389A78: ; 0x02389A78 +#ifdef JAPAN +#define OV31_02389A78_OFFSET -0x120 +#else +#define OV31_02389A78_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x70 + mov sb, r1 + ldr r4, [sb, #0xb4] + mov sl, r0 + ldrb r0, [r4, #7] + strb r0, [sl, #0x528 + OV31_02389A78_OFFSET] + bl GetLeaderMonster + ldrb r1, [r0, #0xa] + add r0, sp, #0x14 + bl GetUnlockedTactics + ldrb r0, [sl, #0x528 + OV31_02389A78_OFFSET] + cmp r0, #0 + beq _02389B64 + mov r6, #0 + bl GetLeaderMonster + ldrb r1, [r0, #0xa] + add r0, sp, #8 + bl GetUnlockedTactics + ldr r4, _02389C20 ; =DUNGEON_PTR + mov r7, r6 + add r5, sp, #4 +_02389AD0: + ldr r0, [r4] + add r0, r0, r7, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r8, [r0, #0xa84] +#else + ldr r8, [r0, #0xb28] +#endif + mov r0, r8 + bl ov29_0234FB60 + cmp r0, #0 + beq _02389B08 + ldr r1, [r8, #0xb4] + add r0, r6, #1 + ldrb r1, [r1, #0xa8] + mov r0, r0, lsl #0x10 + strb r1, [r5, r6] + mov r6, r0, asr #0x10 +_02389B08: + add r0, r7, #1 + mov r0, r0, lsl #0x10 + mov r7, r0, asr #0x10 + cmp r7, #4 + blt _02389AD0 + cmp r6, #0 + moveq r6, #0xb + beq _02389B68 + mov r3, #1 + ldrb r2, [sp, #4] + add r1, sp, #4 + b _02389B54 +_02389B38: + ldrb r0, [r1, r3] + cmp r2, r0 + movne r6, #0xb + bne _02389B68 + add r0, r3, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 +_02389B54: + cmp r3, r6 + blt _02389B38 + ldrb r6, [sp, #4] + b _02389B68 +_02389B64: + ldrb r6, [r4, #0xa8] +_02389B68: + mov r8, #0 + add r4, sl, #0x12c + add fp, sp, #0x14 + add r5, sp, #0x20 + b _02389BF4 +_02389B7C: + ldrb r1, [fp, r8] + add r0, sl, r8 + strb r1, [r0, #0xb8] + cmp r1, #0xb + beq _02389BFC + str r1, [sp, #0x30] + cmp r6, #0xb + beq _02389BC4 + cmp r6, r1 + bne _02389BC4 +#ifdef JAPAN + mov r0, #0x28 + mul r7, r8, r0 + ldr r2, _02389C24 ; =ov31_0238A228 + add r0, r4, r7 + mov r1, #0x28 + mov r3, #0 + str r5, [sp] + bl PreprocessString + b _02389BE0 +_02389BC4: + mov r0, #0x28 + mul r7, r8, r0 + ldr r2, _02389C28 ; =ov31_0238A23C + add r0, r4, r7 + mov r1, #0x28 + mov r3, #0 + str r5, [sp] +#else + ldr r2, _02389C24 ; =ov31_0238A228 + mov r1, #0x40 + add r0, r4, r8, lsl #6 + mov r3, #0 + str r5, [sp] + mov r7, r8, lsl #6 + bl PreprocessString + b _02389BE0 +_02389BC4: + ldr r2, _02389C28 ; =ov31_0238A23C + mov r1, #0x40 + add r0, r4, r8, lsl #6 + mov r3, #0 + str r5, [sp] + mov r7, r8, lsl #6 +#endif + bl PreprocessString +_02389BE0: + add r1, r4, r7 + add r0, sl, r8, lsl #3 + str r1, [r0, #0xc4] + add r8, r8, #1 + str r8, [r0, #0xc8] +_02389BF4: + cmp r8, #0xc + blt _02389B7C +_02389BFC: + mov r0, #0 + str r8, [sl, #0x52c + OV31_02389A78_OFFSET] + add r1, sl, r8, lsl #3 + str r0, [r1, #0xc4] + sub r0, r0, #1 + str r0, [r1, #0xc8] + str sb, [sl, #0x524 + OV31_02389A78_OFFSET] + add sp, sp, #0x70 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02389C20: .word DUNGEON_PTR +_02389C24: .word ov31_0238A228 +_02389C28: .word ov31_0238A23C + arm_func_end ov31_02389A78 + + arm_func_start ov31_02389C2C +ov31_02389C2C: ; 0x02389C2C + stmdb sp!, {r3, lr} + ldr r3, [r0, #0xb4] + mov r2, #6 + strb r1, [r3, #0xa8] + strb r2, [r3, #0x7c] + mov r1, #0 + str r1, [r3, #0x84] + str r1, [r3, #0x88] + strh r1, [r3, #0x80] + ldrb r1, [r3, #7] + cmp r1, #0 + ldmneia sp!, {r3, pc} + mov r1, #1 + bl AiMovement + ldmia sp!, {r3, pc} + arm_func_end ov31_02389C2C + + arm_func_start ov31_02389C68 +ov31_02389C68: ; 0x02389C68 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r5, _02389CBC ; =DUNGEON_PTR + mov r4, r0 + mov r6, #0 +_02389C78: + ldr r0, [r5] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r7, [r0, #0xa84] +#else + ldr r7, [r0, #0xb28] +#endif + mov r0, r7 + bl ov29_0234FB60 + cmp r0, #0 + beq _02389CA4 + mov r0, r7 + mov r1, r4 + bl ov31_02389C2C +_02389CA4: + add r0, r6, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 + cmp r6, #4 + blt _02389C78 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02389CBC: .word DUNGEON_PTR + arm_func_end ov31_02389C68 + + arm_func_start ov31_02389CC0 +ov31_02389CC0: ; 0x02389CC0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x5c + mov r5, r1 + mov r6, r0 + mov r0, r5 + mov r4, r2 + bl sub_0202812C +#if defined(EUROPE) + add r0, r6, #0x2dc + add r0, r0, #0x2400 +#elif defined(JAPAN) + add r0, r6, #0x308 + add r0, r0, #0x3c00 +#else + add r0, r6, #0xda + add r0, r0, #0x2600 +#endif + mov r0, r0, lsl #0x10 + mov r2, r0, lsr #0x10 + add r1, sp, #0xc + str r6, [sp, #0x1c] + str r1, [sp] + str r2, [sp, #4] + mov r2, #0 + ldr r0, _02389D74 ; =DUNGEON_WINDOW_PARAMS_29 + ldr r1, _02389D78 ; =0x00001013 + ldr r3, _02389D7C ; =0x00000A3B + str r2, [sp, #8] + bl CreateScrollBoxSingle + mov r7, r0 + mov r6, #0x3e +_02389D1C: + mov r0, r6 + bl AdvanceFrame + mov r0, r7 + bl IsScrollBoxActive + cmp r0, #0 + bne _02389D1C + mov r0, r7 + bl CloseScrollBox + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #4 + mov r1, #0x3e + bl ov29_022EA370 + mov r0, r5 + bl sub_0202810C + cmp r4, #0 + beq _02389D6C + mov r0, r5 + bl ResumeParentMenu +_02389D6C: + add sp, sp, #0x5c + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02389D74: .word DUNGEON_WINDOW_PARAMS_29 +_02389D78: .word 0x00001013 +#ifdef JAPAN +_02389D7C: .word 0x00000876 +#else +_02389D7C: .word 0x00000A3B +#endif + arm_func_end ov31_02389CC0 + + arm_func_start ov31_02389D80 +ov31_02389D80: ; 0x02389D80 + mov r1, #0 + str r1, [r0, #0xc8] + str r1, [r0, #0xcc] + str r1, [r0, #0xbc] + bx lr + arm_func_end ov31_02389D80 + ; 0x02389D94 + + .rodata + .global DUNGEON_WINDOW_PARAMS_1 +DUNGEON_WINDOW_PARAMS_1: + .byte 0x00, 0x00, 0x00, 0x00 +#ifdef EUROPE + .byte 0x02, 0x02, 0x07, 0x0C +#else + .byte 0x02, 0x02, 0x00, 0x0C +#endif + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_2 +DUNGEON_WINDOW_PARAMS_2: + .byte 0x00, 0x00, 0x00, 0x00, 0x0B, 0x04, 0x13, 0x02, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_3 +DUNGEON_WINDOW_PARAMS_3: + .byte 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .word ov31_02382DAC + .word ov31_02382B54 + .global DUNGEON_WINDOW_PARAMS_4 +DUNGEON_WINDOW_PARAMS_4: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x1C, 0x06, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_MAIN_MENU_ITEMS +DUNGEON_MAIN_MENU_ITEMS: +#ifdef JAPAN +#define OV31_DATA_OFFSET 0x1458 +#else +#define OV31_DATA_OFFSET 0 +#endif + .word 0x8AD + OV31_DATA_OFFSET + .byte 0x00, 0x00, 0x00, 0x00 + .word 0x8AE + OV31_DATA_OFFSET + .byte 0x01, 0x00, 0x00, 0x00 + .word 0x8AF + OV31_DATA_OFFSET + .byte 0x02, 0x00, 0x00, 0x00 + .word 0x8B0 + OV31_DATA_OFFSET + .byte 0x03, 0x00, 0x00, 0x00 + .word 0x8B1 + OV31_DATA_OFFSET + .byte 0x04, 0x00, 0x00, 0x00 + .word 0x8B3 + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8B4 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .global DUNGEON_MENU_SWITCH_STR1 +DUNGEON_MENU_SWITCH_STR1: + .string "[dungeon:0]" + .global OVERLAY31_UNKNOWN_STRING_IDS +OVERLAY31_UNKNOWN_STRING_IDS: + .hword 0x8C7 + OV31_DATA_OFFSET + .global ov31_02389E22 +ov31_02389E22: + .hword 0x8CB + OV31_DATA_OFFSET + .hword 0x8C8 + OV31_DATA_OFFSET + .hword 0x8CC + OV31_DATA_OFFSET + .hword 0x8C9 + OV31_DATA_OFFSET + .hword 0x8CD + OV31_DATA_OFFSET + .hword 0x8CA + OV31_DATA_OFFSET + .hword 0x8CE + OV31_DATA_OFFSET + .global OVERLAY31_UNKNOWN_STRUCT__NA_2389E30 +OVERLAY31_UNKNOWN_STRUCT__NA_2389E30: + .byte 0x0E, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .word ov31_023832F0 + .word HandleStairsMenu + .global DUNGEON_WINDOW_PARAMS_5 +DUNGEON_WINDOW_PARAMS_5: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x02, 0x1C, 0x0D, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_6 +DUNGEON_WINDOW_PARAMS_6: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x02, 0x13, 0x04, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_7 +DUNGEON_WINDOW_PARAMS_7: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x17, 0x02, 0x07, 0x06, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_SUBMENU_ITEMS_1 +DUNGEON_SUBMENU_ITEMS_1: +#ifdef JAPAN +#define DUNGEON_SUBMENU_ITEMS_1_OFFSET 0x19D0 +#else +#define DUNGEON_SUBMENU_ITEMS_1_OFFSET 0 +#endif + .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET + .byte 0x01, 0x00, 0x00, 0x00 + .word 0x8CF + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8D0 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET + .byte 0x02, 0x00, 0x00, 0x00 + .word 0x8CF + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8D0 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .word 0x9C9 + DUNGEON_SUBMENU_ITEMS_1_OFFSET + .byte 0x03, 0x00, 0x00, 0x00 + .word 0x8CF + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8D0 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET + .byte 0x04, 0x00, 0x00, 0x00 + .word 0x8CF + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8D0 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .global OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 +OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0: + .byte 0x01, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_8 +DUNGEON_WINDOW_PARAMS_8: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_9 +DUNGEON_WINDOW_PARAMS_9: + .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x07, 0x00 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_10 +DUNGEON_WINDOW_PARAMS_10: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x08, 0x02 + .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_11 +DUNGEON_WINDOW_PARAMS_11: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x12, 0x02 + .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_12 +DUNGEON_WINDOW_PARAMS_12: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x13, 0x00 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_13 +DUNGEON_WINDOW_PARAMS_13: + .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x07, 0x00 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global ov31_02389F5C +ov31_02389F5C: + .byte 0x20, 0x20, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00 + .global OVERLAY31_JP_STRING +OVERLAY31_JP_STRING: + .byte 0x0A, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x81, 0x40, 0x20, 0x8F, 0x89, 0x8A, 0xFA, 0x83, 0x7C, 0x83 + .byte 0x57, 0x83, 0x56, 0x83, 0x87, 0x83, 0x93, 0x3D, 0x25, 0x64, 0x81, 0x40, 0x2D, 0x2D, 0x2D, 0x2D + .byte 0x2D, 0x20, 0x0A, 0x00 + .global DUNGEON_WINDOW_PARAMS_14 +DUNGEON_WINDOW_PARAMS_14: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x11, 0x1C, 0x05, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_15 +DUNGEON_WINDOW_PARAMS_15: + .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_16 +DUNGEON_WINDOW_PARAMS_16: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x1C, 0x04, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_17 +DUNGEON_WINDOW_PARAMS_17: + .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_18 +DUNGEON_WINDOW_PARAMS_18: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x13, 0x04, 0x00, 0xFE, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_19 +DUNGEON_WINDOW_PARAMS_19: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 +OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8: + .byte 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_20 +DUNGEON_WINDOW_PARAMS_20: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x0E, 0x12, 0x04, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_21 +DUNGEON_WINDOW_PARAMS_21: + .byte 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x10, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_22 +DUNGEON_WINDOW_PARAMS_22: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_23 +DUNGEON_WINDOW_PARAMS_23: + .byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x02, 0x0B, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_24 +DUNGEON_WINDOW_PARAMS_24: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0A, 0x02, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global ov31_0238A044 +ov31_0238A044: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x30, 0x5D, 0x00, 0x00 + .global ov31_0238A04C +ov31_0238A04C: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x31, 0x5D, 0x00, 0x00 + .global ov31_0238A054 +ov31_0238A054: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x32, 0x5D, 0x00, 0x00 + .global ov31_0238A05C +ov31_0238A05C: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x33, 0x5D, 0x00, 0x00 + .global ov31_0238A064 +ov31_0238A064: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x34, 0x5D, 0x00, 0x00 + .global ov31_0238A06C +ov31_0238A06C: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x35, 0x5D, 0x00, 0x00 + .global ov31_0238A074 +ov31_0238A074: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x36, 0x5D, 0x00, 0x00 + .global ov31_0238A07C +ov31_0238A07C: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x37, 0x5D, 0x00, 0x00 + .global ov31_0238A084 +ov31_0238A084: + .byte 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x5D, 0x5B, 0x43, 0x4C, 0x55, 0x4D, 0x5F + .byte 0x53, 0x45, 0x54, 0x3A, 0x38, 0x30, 0x5D, 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x31 + .byte 0x5D, 0x00, 0x00, 0x00 + .global ov31_0238A0A8 +ov31_0238A0A8: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x30, 0x5D, 0x00, 0x00 + .global ov31_0238A0B0 +ov31_0238A0B0: + .byte 0x5B, 0x4D, 0x3A, 0x48 + .byte 0x31, 0x5D, 0x00, 0x00 + .global ov31_0238A0B8 +ov31_0238A0B8: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x32, 0x5D, 0x00, 0x00 + .global ov31_0238A0C0 +ov31_0238A0C0: + .byte 0x5B, 0x4D, 0x3A, 0x48 + .byte 0x33, 0x5D, 0x00, 0x00 + .global ov31_0238A0C8 +ov31_0238A0C8: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x34, 0x5D, 0x00, 0x00 + .global ov31_0238A0D0 +ov31_0238A0D0: + .byte 0x5B, 0x4D, 0x3A, 0x48 + .byte 0x35, 0x5D, 0x00, 0x00 + .global ov31_0238A0D8 +ov31_0238A0D8: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x36, 0x5D, 0x00, 0x00 + .global ov31_0238A0E0 +ov31_0238A0E0: + .byte 0x5B, 0x4D, 0x3A, 0x48 + .byte 0x37, 0x5D, 0x00, 0x00 + .global ov31_0238A0E8 +ov31_0238A0E8: + .byte 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x5D, 0x5B, 0x43 + .byte 0x4C, 0x55, 0x4D, 0x5F, 0x53, 0x45, 0x54, 0x3A, 0x38, 0x30, 0x5D, 0x5B, 0x73, 0x74, 0x72, 0x69 + .byte 0x6E, 0x67, 0x3A, 0x31, 0x5D, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_25 +DUNGEON_WINDOW_PARAMS_25: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0C, 0x00 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_SUBMENU_ITEMS_5 +DUNGEON_SUBMENU_ITEMS_5: + .word 0x8C3 + OV31_DATA_OFFSET + .byte 0x01, 0x00, 0x00, 0x00 + .word 0x8C4 + OV31_DATA_OFFSET + .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .global DUNGEON_WINDOW_PARAMS_26 +DUNGEON_WINDOW_PARAMS_26: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x1C, 0x12, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_STRUCT__NA_238A144 +OVERLAY31_UNKNOWN_STRUCT__NA_238A144: + .byte 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .word ov31_0238917C + .word RecruitmentSearchMenuLoop + .global ov31_0238A154 +ov31_0238A154: + .byte 0x5B, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x30, 0x3A, 0x33, 0x5D, 0x20, 0x5B, 0x43, 0x53, 0x3A + .byte 0x25, 0x63, 0x5D, 0x25, 0x73, 0x5B, 0x43, 0x52, 0x5D, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_27 +DUNGEON_WINDOW_PARAMS_27: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x02, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_28 +DUNGEON_WINDOW_PARAMS_28: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x02, 0x1C, 0x14, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_STRUCT__NA_238A190 +OVERLAY31_UNKNOWN_STRUCT__NA_238A190: + .byte 0x0E, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .word ov31_02389460 + .word HelpMenuLoop + .global DUNGEON_SUBMENU_ITEMS_6 +DUNGEON_SUBMENU_ITEMS_6: +#if defined(EUROPE) +#define DUNGEON_SUBMENU_6_OFFSET 2 +#elif defined(JAPAN) +#define DUNGEON_SUBMENU_6_OFFSET 0xA03 +#else +#define DUNGEON_SUBMENU_6_OFFSET 0 +#endif + .word 0x3FA8 + DUNGEON_SUBMENU_6_OFFSET + .byte 0x00, 0x00, 0x00, 0x00 + .word 0x3FA9 + DUNGEON_SUBMENU_6_OFFSET + .byte 0x01, 0x00, 0x00, 0x00 + .word 0x3FAA + DUNGEON_SUBMENU_6_OFFSET + .byte 0x02, 0x00, 0x00, 0x00 + .word 0x3FAB + DUNGEON_SUBMENU_6_OFFSET + .byte 0x03, 0x00, 0x00, 0x00 + .word 0x3FAC + DUNGEON_SUBMENU_6_OFFSET + .byte 0x04, 0x00, 0x00, 0x00 + .word 0x3FAD + DUNGEON_SUBMENU_6_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x3FAE + DUNGEON_SUBMENU_6_OFFSET + .byte 0x06, 0x00, 0x00, 0x00 + .word 0x3FAF + DUNGEON_SUBMENU_6_OFFSET + .byte 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0xFF, 0xFF, 0xFF, 0xFF + .global DUNGEON_WINDOW_PARAMS_29 +DUNGEON_WINDOW_PARAMS_29: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_30 +DUNGEON_WINDOW_PARAMS_30: + .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_31 +DUNGEON_WINDOW_PARAMS_31: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x12, 0x00, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_32 +DUNGEON_WINDOW_PARAMS_32: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x0F, 0x02, 0x00, 0xFE, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global ov31_0238A228 +ov31_0238A228: + .byte 0x5B, 0x4D, 0x3A, 0x53, 0x32, 0x5D, 0x5B, 0x74, 0x61, 0x63, 0x74, 0x69 + .byte 0x63, 0x73, 0x3A, 0x30, 0x5D, 0x00, 0x00, 0x00 + .global ov31_0238A23C +ov31_0238A23C: + .byte 0x5B, 0x4D, 0x3A, 0x53, 0x31, 0x5D, 0x5B, 0x74 + .byte 0x61, 0x63, 0x74, 0x69, 0x63, 0x73, 0x3A, 0x30, 0x5D, 0x00, 0x00, 0x00 + + .data + .global OVERLAY31_UNKNOWN_POINTER__NA_238A260 +OVERLAY31_UNKNOWN_POINTER__NA_238A260: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x0A, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A268 +OVERLAY31_UNKNOWN_POINTER__NA_238A268: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A26C +OVERLAY31_UNKNOWN_POINTER__NA_238A26C: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A270 +OVERLAY31_UNKNOWN_POINTER__NA_238A270: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A27C +OVERLAY31_UNKNOWN_POINTER__NA_238A27C: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A280 +OVERLAY31_UNKNOWN_POINTER__NA_238A280: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A284 +OVERLAY31_UNKNOWN_POINTER__NA_238A284: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A288 +OVERLAY31_UNKNOWN_POINTER__NA_238A288: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A28C +OVERLAY31_UNKNOWN_POINTER__NA_238A28C: + .byte 0x00, 0x00, 0x00, 0x00 + + .bss + .global ov31_0238A2A0 +ov31_0238A2A0: + .space 0x8 + .global ov31_0238A2A8 +ov31_0238A2A8: + .space 0x18 diff --git a/include/overlay_31_02383328.h b/include/overlay_31_02383328.h new file mode 100644 index 00000000..25bd6e8f --- /dev/null +++ b/include/overlay_31_02383328.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_OVERLAY_31_02383328_H +#define PMDSKY_OVERLAY_31_02383328_H + +void ov31_02383328(void (*f)(void)); + +#endif //PMDSKY_OVERLAY_31_02383328_H diff --git a/main.lsf b/main.lsf index efc7c362..43e17496 100644 --- a/main.lsf +++ b/main.lsf @@ -572,6 +572,8 @@ Overlay OVY_31 After OVY_29 Object src/overlay_31_02382820.o Object asm/overlay_31_02382FBC.o + Object src/overlay_31_02383328.o + Object asm/overlay_31_0238335C.o } Overlay OVY_32 { diff --git a/src/overlay_31_02383328.c b/src/overlay_31_02383328.c new file mode 100644 index 00000000..096535c1 --- /dev/null +++ b/src/overlay_31_02383328.c @@ -0,0 +1,15 @@ +#include "overlay_31_02383328.h" + +extern u8 OVERLAY31_UNKNOWN_POINTER__NA_238A268[]; +extern u8 ov31_0238A2A8; + +extern u8 sub_0204AEA0(void (*f)(void)); +extern void ov29_022E8708(); + +void ov31_02383328(void (*f)(void)) +{ + if (sub_0204AEA0(f) != ov31_0238A2A8) { + ov29_022E8708(); + OVERLAY31_UNKNOWN_POINTER__NA_238A268[0] = 1; + } +} From 607c7ee9376440f2ea63572c7f78ac66f2427e44 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 16 Jul 2025 20:36:31 -0400 Subject: [PATCH 02/40] Decomped ov31_0238335C Decomped by anonymous user: https://decomp.me/scratch/yDpgj --- ...1_0238335C.inc => overlay_31_023833B4.inc} | 2 +- ...ay_31_0238335C.s => overlay_31_023833B4.s} | 31 +------------------ include/overlay_31_02383328.h | 1 + main.lsf | 2 +- src/overlay_31_02383328.c | 16 ++++++++++ 5 files changed, 20 insertions(+), 32 deletions(-) rename asm/include/{overlay_31_0238335C.inc => overlay_31_023833B4.inc} (99%) rename asm/{overlay_31_0238335C.s => overlay_31_023833B4.s} (99%) diff --git a/asm/include/overlay_31_0238335C.inc b/asm/include/overlay_31_023833B4.inc similarity index 99% rename from asm/include/overlay_31_0238335C.inc rename to asm/include/overlay_31_023833B4.inc index 6e1bc634..d1439e5c 100644 --- a/asm/include/overlay_31_0238335C.inc +++ b/asm/include/overlay_31_023833B4.inc @@ -167,7 +167,6 @@ .public ov29_022E1618 .public ov29_022E1620 .public ov29_022E2A78 -.public ov29_022E87DC .public ov29_022EA370 .public ov29_022EA428 .public ov29_022EA62C @@ -217,6 +216,7 @@ .public ov31_02382DAC .public ov31_023832F0 .public ov31_02383328 +.public ov31_0238335C .public ov31_02389F5C .public ov31_0238A044 .public ov31_0238A04C diff --git a/asm/overlay_31_0238335C.s b/asm/overlay_31_023833B4.s similarity index 99% rename from asm/overlay_31_0238335C.s rename to asm/overlay_31_023833B4.s index e6e795e8..b186cb50 100644 --- a/asm/overlay_31_0238335C.s +++ b/asm/overlay_31_023833B4.s @@ -1,37 +1,8 @@ .include "asm/macros.inc" - .include "overlay_31_0238335C.inc" + .include "overlay_31_023833B4.inc" .text - arm_func_start ov31_0238335C -ov31_0238335C: ; 0x0238335C - stmdb sp!, {r4, lr} - ldr r1, _023833B0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 - mov r4, r0 - ldrb r0, [r1] - cmp r0, #0 - beq _02383390 - bl ov29_022E87DC - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, _023833B0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 - mov r1, #0 - strb r1, [r0] -_02383390: - cmp r4, #0 - beq _0238339C - blx r4 -_0238339C: - ldr r0, _023833B0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 - mov r1, #0 - strb r1, [r0, #1] - mov r0, #1 - ldmia sp!, {r4, pc} - .align 2, 0 -_023833B0: .word OVERLAY31_UNKNOWN_POINTER__NA_238A268 - arm_func_end ov31_0238335C - arm_func_start ov31_023833B4 ov31_023833B4: ; 0x023833B4 stmdb sp!, {r3, lr} diff --git a/include/overlay_31_02383328.h b/include/overlay_31_02383328.h index 25bd6e8f..c9db3e78 100644 --- a/include/overlay_31_02383328.h +++ b/include/overlay_31_02383328.h @@ -2,5 +2,6 @@ #define PMDSKY_OVERLAY_31_02383328_H void ov31_02383328(void (*f)(void)); +u32 ov31_0238335C(void (*f)(void)); #endif //PMDSKY_OVERLAY_31_02383328_H diff --git a/main.lsf b/main.lsf index 43e17496..173d6093 100644 --- a/main.lsf +++ b/main.lsf @@ -573,7 +573,7 @@ Overlay OVY_31 Object src/overlay_31_02382820.o Object asm/overlay_31_02382FBC.o Object src/overlay_31_02383328.o - Object asm/overlay_31_0238335C.o + Object asm/overlay_31_023833B4.o } Overlay OVY_32 { diff --git a/src/overlay_31_02383328.c b/src/overlay_31_02383328.c index 096535c1..b78f241a 100644 --- a/src/overlay_31_02383328.c +++ b/src/overlay_31_02383328.c @@ -5,6 +5,7 @@ extern u8 ov31_0238A2A8; extern u8 sub_0204AEA0(void (*f)(void)); extern void ov29_022E8708(); +extern u32 ov29_022E87DC(); void ov31_02383328(void (*f)(void)) { @@ -13,3 +14,18 @@ void ov31_02383328(void (*f)(void)) OVERLAY31_UNKNOWN_POINTER__NA_238A268[0] = 1; } } + +u32 ov31_0238335C(void (*f)(void)) +{ + if (OVERLAY31_UNKNOWN_POINTER__NA_238A268[0] != 0) { + if (ov29_022E87DC() == 0) { + return 0; + } + OVERLAY31_UNKNOWN_POINTER__NA_238A268[0] = 0; + } + if (f != NULL) { + (*f)(); + } + OVERLAY31_UNKNOWN_POINTER__NA_238A268[1] = 0; + return 1; +} From 9e42e6d0b9ed491e35a8ffba51a9a9f9ba5f3564 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 16 Jul 2025 20:39:23 -0400 Subject: [PATCH 03/40] Decomped ov31_023833B4 Decomped by anonymous user: https://decomp.me/scratch/tILlP --- ..._31_023833B4.inc => overlay_31_023833D8.inc} | 1 + ...rlay_31_023833B4.s => overlay_31_023833D8.s} | 17 +---------------- include/overlay_31_02383328.h | 1 + main.lsf | 2 +- src/overlay_31_02383328.c | 8 ++++++++ 5 files changed, 12 insertions(+), 17 deletions(-) rename asm/include/{overlay_31_023833B4.inc => overlay_31_023833D8.inc} (99%) rename asm/{overlay_31_023833B4.s => overlay_31_023833D8.s} (99%) diff --git a/asm/include/overlay_31_023833B4.inc b/asm/include/overlay_31_023833D8.inc similarity index 99% rename from asm/include/overlay_31_023833B4.inc rename to asm/include/overlay_31_023833D8.inc index d1439e5c..ff7bf4a2 100644 --- a/asm/include/overlay_31_023833B4.inc +++ b/asm/include/overlay_31_023833D8.inc @@ -217,6 +217,7 @@ .public ov31_023832F0 .public ov31_02383328 .public ov31_0238335C +.public ov31_023833B4 .public ov31_02389F5C .public ov31_0238A044 .public ov31_0238A04C diff --git a/asm/overlay_31_023833B4.s b/asm/overlay_31_023833D8.s similarity index 99% rename from asm/overlay_31_023833B4.s rename to asm/overlay_31_023833D8.s index b186cb50..eb82109f 100644 --- a/asm/overlay_31_023833B4.s +++ b/asm/overlay_31_023833D8.s @@ -1,23 +1,8 @@ .include "asm/macros.inc" - .include "overlay_31_023833B4.inc" + .include "overlay_31_023833D8.inc" .text - arm_func_start ov31_023833B4 -ov31_023833B4: ; 0x023833B4 - stmdb sp!, {r3, lr} - cmp r0, #0 - beq _023833C4 - blx r0 -_023833C4: - ldr r0, _023833D4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A268 - mov r1, #0 - strb r1, [r0, #1] - ldmia sp!, {r3, pc} - .align 2, 0 -_023833D4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A268 - arm_func_end ov31_023833B4 - ; https://decomp.me/scratch/Q183B arm_func_start ov31_023833D8 ov31_023833D8: ; 0x023833D8 diff --git a/include/overlay_31_02383328.h b/include/overlay_31_02383328.h index c9db3e78..34072203 100644 --- a/include/overlay_31_02383328.h +++ b/include/overlay_31_02383328.h @@ -3,5 +3,6 @@ void ov31_02383328(void (*f)(void)); u32 ov31_0238335C(void (*f)(void)); +void ov31_023833B4(void(*f)(void)); #endif //PMDSKY_OVERLAY_31_02383328_H diff --git a/main.lsf b/main.lsf index 173d6093..2e1b6731 100644 --- a/main.lsf +++ b/main.lsf @@ -573,7 +573,7 @@ Overlay OVY_31 Object src/overlay_31_02382820.o Object asm/overlay_31_02382FBC.o Object src/overlay_31_02383328.o - Object asm/overlay_31_023833B4.o + Object asm/overlay_31_023833D8.o } Overlay OVY_32 { diff --git a/src/overlay_31_02383328.c b/src/overlay_31_02383328.c index b78f241a..6ab34b73 100644 --- a/src/overlay_31_02383328.c +++ b/src/overlay_31_02383328.c @@ -29,3 +29,11 @@ u32 ov31_0238335C(void (*f)(void)) OVERLAY31_UNKNOWN_POINTER__NA_238A268[1] = 0; return 1; } + +void ov31_023833B4(void(*f)(void)) +{ + if (f != NULL) { + f(); + } + OVERLAY31_UNKNOWN_POINTER__NA_238A268[1] = 0; +} From 31520a525acbc85c02667be36a24681c27312e61 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 16 Jul 2025 20:50:38 -0400 Subject: [PATCH 04/40] Decomped ov31_02383478 Decomped by anonymous user: https://decomp.me/scratch/bJcDl --- asm/include/overlay_31_023833D8.inc | 293 - asm/include/overlay_31_02383658.inc | 292 + asm/overlay_31_023833D8.s | 8889 --------------------------- asm/overlay_31_02383658.s | 8756 ++++++++++++++++++++++++++ include/overlay_31_02383478.h | 18 + main.lsf | 2 + src/overlay_31_02383478.c | 58 + 7 files changed, 9126 insertions(+), 9182 deletions(-) create mode 100644 asm/include/overlay_31_02383658.inc create mode 100644 asm/overlay_31_02383658.s create mode 100644 include/overlay_31_02383478.h create mode 100644 src/overlay_31_02383478.c diff --git a/asm/include/overlay_31_023833D8.inc b/asm/include/overlay_31_023833D8.inc index ff7bf4a2..b3e431a6 100644 --- a/asm/include/overlay_31_023833D8.inc +++ b/asm/include/overlay_31_023833D8.inc @@ -1,302 +1,9 @@ #pragma once -.public AddDungeonSubMenuOption -.public AdvanceFrame -.public AiMovement -.public AllManip1 -.public AllManip2 -.public Arm9LoadUnkFieldNa0x2029EC8 -.public Arm9StoreUnkFieldNa0x2029ED8 -.public BAG_ITEMS_PTR_MIRROR -.public BaseFormsEqual -.public CanAiUseMove -.public CanMonsterSpawn -.public CheckTeamMemberIdxVeneer -.public CheckVariousConditions -.public CheckVariousStatuses2 -.public CloseAdvancedTextBox -.public CloseAdvancedTextBox2 -.public CloseDialogueBox -.public CloseInventoryMenu -.public CloseParentMenu -.public CloseScrollBox -.public CloseTextBox -.public CloseTextBox2 -.public CreateAdvancedTextBox -.public CreateDialogueBox -.public CreateInventoryMenu -.public CreateMonsterSummaryFromMonster -.public CreateParentMenu -.public CreateParentMenuFromStringIds -.public CreateParentMenuWrapper -.public CreateScrollBoxSingle -.public CreateTextBox -.public CreateTextBoxWithArg -.public DUNGEON_PTR -.public DUNGEON_SUBMENU_ITEMS_5 -.public DUNGEON_SUBMENU_ITEMS_6 -.public DUNGEON_WINDOW_PARAMS_10 -.public DUNGEON_WINDOW_PARAMS_11 -.public DUNGEON_WINDOW_PARAMS_12 -.public DUNGEON_WINDOW_PARAMS_13 -.public DUNGEON_WINDOW_PARAMS_14 -.public DUNGEON_WINDOW_PARAMS_15 -.public DUNGEON_WINDOW_PARAMS_16 -.public DUNGEON_WINDOW_PARAMS_17 -.public DUNGEON_WINDOW_PARAMS_18 -.public DUNGEON_WINDOW_PARAMS_19 -.public DUNGEON_WINDOW_PARAMS_20 -.public DUNGEON_WINDOW_PARAMS_21 -.public DUNGEON_WINDOW_PARAMS_22 -.public DUNGEON_WINDOW_PARAMS_23 -.public DUNGEON_WINDOW_PARAMS_24 -.public DUNGEON_WINDOW_PARAMS_25 -.public DUNGEON_WINDOW_PARAMS_26 -.public DUNGEON_WINDOW_PARAMS_27 -.public DUNGEON_WINDOW_PARAMS_28 -.public DUNGEON_WINDOW_PARAMS_29 -.public DUNGEON_WINDOW_PARAMS_30 -.public DUNGEON_WINDOW_PARAMS_31 -.public DUNGEON_WINDOW_PARAMS_32 -.public DUNGEON_WINDOW_PARAMS_8 -.public DUNGEON_WINDOW_PARAMS_9 -.public Debug_Print0 -.public DisableDungeonSubMenuOption -.public DisplayMessage -.public DrawTextInWindow -.public DrawTileGrid -.public FormatMoveString -.public FormatMoveStringMore -.public GetActiveTeamMember -.public GetCurrentBagCapacity -.public GetDexNumber -.public GetItemAction -.public GetItemCategoryVeneer -.public GetItemInfo -.public GetItemToUse -.public GetItemToUseByIndex -.public GetKecleonIdToSpawnByFloor -.public GetLeader -.public GetLeaderAction -.public GetLeaderChangeFlag -.public GetLeaderMonster -.public GetMaxPp -.public GetMonsterIdFromSpawnEntry -.public GetMonsterName -.public GetNbItemsInBag -.public GetPressedButtons -.public GetRecruitRate2 -.public GetSpeciesString -.public GetStringFromFileVeneer -.public GetTeamMember -.public GetTeamMemberIndex -.public GetTile -.public GetTrapInfo -.public GetUnlockedTactics -.public GetWindowRectangle -.public HandleStairsMenu -.public HideTileGrid -.public InitPreprocessorArgs -.public IqSkillFlagTest -.public IsAdvancedTextBoxActive -.public IsBagFull -.public IsBlinded -.public IsExperienceLocked -.public IsHeldItemInBag -.public IsInventoryMenuActive -.public IsItemUsableNow -.public IsMonsterOnTeam -.public IsNot2TurnsMoveOrSketch -.public IsParentMenuActive -.public IsRecruitingAllowed -.public IsScrollBoxActive -.public ItemZInit -.public JoinedAtRangeCheck2Veneer -.public LogMessageByIdWithPopupCheckUser -.public MemAlloc -.public MemFree -.public MemZero -.public MonsterCanThrowItems -.public MonsterHasEmbargoStatus -.public OVERLAY31_JP_STRING .public OVERLAY31_UNKNOWN_POINTER__NA_238A268 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A26C -.public OVERLAY31_UNKNOWN_POINTER__NA_238A270 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A27C -.public OVERLAY31_UNKNOWN_POINTER__NA_238A280 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A284 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A288 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A28C -.public OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 -.public OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 -.public OVERLAY31_UNKNOWN_STRUCT__NA_238A144 -.public OVERLAY31_UNKNOWN_STRUCT__NA_238A190 -.public PlaySeVolumeWrapper -.public PlayWindowInputSound -.public PopInventoryMenuField0x1A3 -.public PositionHasItem -.public PreprocessString -.public PreprocessStringFromId -.public PrintIqSkillsMenu -.public ResumeParentMenu -.public SetAdvancedTextBoxField0x1C2 -.public SetAdvancedTextBoxState5 -.public SetMonsterActionFields -.public ShowStringInDialogueBox -.public SortItemsInBag -.public SpecificRecruitCheck -.public StringFromId -.public TeamMemberHasEnabledIqSkill -.public TryPointCameraToMonster -.public UpdateMapSurveyorFlag -.public UpdateWindow -.public YesNoMenu -.public _020A1870 -.public memcpy -.public memset -.public ov10_022BCC60 -.public ov10_022BCC7C -.public ov10_022BCCB0 -.public ov10_022BCD10 -.public ov10_022BCDA8 -.public ov10_022BCDBC -.public ov10_022BCDF4 -.public ov10_022BCE44 -.public ov10_022BD394 -.public ov10_022BD474 -.public ov29_022E08F4 -.public ov29_022E1618 -.public ov29_022E1620 -.public ov29_022E2A78 -.public ov29_022EA370 -.public ov29_022EA428 -.public ov29_022EA62C -.public ov29_022EAC78 -.public ov29_022EACCC -.public ov29_022EB2C8 -.public ov29_022EB398 -.public ov29_022EB804 -.public ov29_022EB8B0 -.public ov29_022EB9A0 -.public ov29_022EBA70 -.public ov29_022EBA84 -.public ov29_022EBA94 -.public ov29_022EBAB0 -.public ov29_022EBB4C -.public ov29_022EBB68 -.public ov29_022EBB8C -.public ov29_022EBB98 -.public ov29_022EBBA8 -.public ov29_022EBBE8 -.public ov29_022EBC2C -.public ov29_022ECDE4 -.public ov29_022F0B9C -.public ov29_022F9C34 -.public ov29_023002F0 -.public ov29_02300BF8 -.public ov29_023021F0 -.public ov29_02302388 -.public ov29_0233A0E8 -.public ov29_023468FC -.public ov29_02346E5C -.public ov29_02347100 -.public ov29_02348D00 -.public ov29_0234B034 -.public ov29_0234B084 -.public ov29_0234E988 -.public ov29_0234EA18 -.public ov29_0234EBCC -.public ov29_0234F77C -.public ov29_0234FB50 -.public ov29_0234FB60 -.public ov29_0234FBD4 -.public ov29_0235352C -.public ov29_0237C91C -.public ov29_0238280C -.public ov31_02382B54 -.public ov31_02382DAC -.public ov31_023832F0 .public ov31_02383328 .public ov31_0238335C .public ov31_023833B4 -.public ov31_02389F5C -.public ov31_0238A044 -.public ov31_0238A04C -.public ov31_0238A054 -.public ov31_0238A05C -.public ov31_0238A064 -.public ov31_0238A06C -.public ov31_0238A074 -.public ov31_0238A07C -.public ov31_0238A084 -.public ov31_0238A0A8 -.public ov31_0238A0B0 -.public ov31_0238A0B8 -.public ov31_0238A0C0 -.public ov31_0238A0C8 -.public ov31_0238A0D0 -.public ov31_0238A0D8 -.public ov31_0238A0E0 -.public ov31_0238A0E8 -.public ov31_0238A154 -.public ov31_0238A228 -.public ov31_0238A23C .public ov31_0238A2A8 -.public strcpy -.public sub_02001808 -.public sub_0200B3D4 -.public sub_0200D310 -.public sub_0200D894 -.public sub_02017C74 -.public sub_02017C80 -.public sub_02027B1C -.public sub_0202810C -.public sub_0202812C -.public sub_020282F4 -.public sub_02028354 -.public sub_0202A98C -.public sub_0202AB80 -.public sub_0202AB94 -.public sub_0202ABB0 -.public sub_0202B030 -.public sub_0202F334 -.public sub_0202F474 -.public sub_0202F954 -.public sub_0202F9B8 -.public sub_020307EC -.public sub_02030A18 -.public sub_02030A2C -.public sub_020348E4 .public sub_020355DC .public sub_02035CE4 -.public sub_0203F150 -.public sub_0203F398 -.public sub_0203F990 -.public sub_0203F9CC -.public sub_0203FD14 -.public sub_0203FD38 -.public sub_0203FD44 -.public sub_0204018C -.public sub_0204019C -.public sub_020407C0 -.public sub_020407EC -.public sub_02041094 -.public sub_020410A4 -.public sub_02041154 -.public sub_02041178 -.public sub_02041364 -.public sub_02041484 -.public sub_020416BC -.public sub_020416DC -.public sub_020416FC -.public sub_020417A8 -.public sub_02041A00 -.public sub_02041A18 -.public sub_02041B7C -.public sub_020420F4 .public sub_0204AEA0 -.public sub_0204F10C -.public sub_02053CA0 -.public sub_02054F44 -.public sub_02056228 -.public sub_020585B4 -.public vsprintf diff --git a/asm/include/overlay_31_02383658.inc b/asm/include/overlay_31_02383658.inc new file mode 100644 index 00000000..01490b26 --- /dev/null +++ b/asm/include/overlay_31_02383658.inc @@ -0,0 +1,292 @@ +#pragma once +.public AddDungeonSubMenuOption +.public AdvanceFrame +.public AiMovement +.public AllManip1 +.public AllManip2 +.public Arm9LoadUnkFieldNa0x2029EC8 +.public Arm9StoreUnkFieldNa0x2029ED8 +.public BAG_ITEMS_PTR_MIRROR +.public BaseFormsEqual +.public CanAiUseMove +.public CanMonsterSpawn +.public CheckTeamMemberIdxVeneer +.public CheckVariousConditions +.public CheckVariousStatuses2 +.public CloseAdvancedTextBox +.public CloseAdvancedTextBox2 +.public CloseDialogueBox +.public CloseInventoryMenu +.public CloseParentMenu +.public CloseScrollBox +.public CloseTextBox +.public CloseTextBox2 +.public CreateAdvancedTextBox +.public CreateDialogueBox +.public CreateInventoryMenu +.public CreateMonsterSummaryFromMonster +.public CreateParentMenu +.public CreateParentMenuFromStringIds +.public CreateParentMenuWrapper +.public CreateScrollBoxSingle +.public CreateTextBox +.public CreateTextBoxWithArg +.public DUNGEON_PTR +.public DUNGEON_SUBMENU_ITEMS_5 +.public DUNGEON_SUBMENU_ITEMS_6 +.public DUNGEON_WINDOW_PARAMS_10 +.public DUNGEON_WINDOW_PARAMS_11 +.public DUNGEON_WINDOW_PARAMS_12 +.public DUNGEON_WINDOW_PARAMS_13 +.public DUNGEON_WINDOW_PARAMS_14 +.public DUNGEON_WINDOW_PARAMS_15 +.public DUNGEON_WINDOW_PARAMS_16 +.public DUNGEON_WINDOW_PARAMS_17 +.public DUNGEON_WINDOW_PARAMS_18 +.public DUNGEON_WINDOW_PARAMS_19 +.public DUNGEON_WINDOW_PARAMS_20 +.public DUNGEON_WINDOW_PARAMS_21 +.public DUNGEON_WINDOW_PARAMS_22 +.public DUNGEON_WINDOW_PARAMS_23 +.public DUNGEON_WINDOW_PARAMS_24 +.public DUNGEON_WINDOW_PARAMS_25 +.public DUNGEON_WINDOW_PARAMS_26 +.public DUNGEON_WINDOW_PARAMS_27 +.public DUNGEON_WINDOW_PARAMS_28 +.public DUNGEON_WINDOW_PARAMS_29 +.public DUNGEON_WINDOW_PARAMS_30 +.public DUNGEON_WINDOW_PARAMS_31 +.public DUNGEON_WINDOW_PARAMS_32 +.public DUNGEON_WINDOW_PARAMS_8 +.public DUNGEON_WINDOW_PARAMS_9 +.public Debug_Print0 +.public DisableDungeonSubMenuOption +.public DisplayMessage +.public DrawTextInWindow +.public DrawTileGrid +.public FormatMoveString +.public FormatMoveStringMore +.public GetActiveTeamMember +.public GetCurrentBagCapacity +.public GetDexNumber +.public GetItemAction +.public GetItemCategoryVeneer +.public GetItemInfo +.public GetItemToUse +.public GetItemToUseByIndex +.public GetKecleonIdToSpawnByFloor +.public GetLeader +.public GetLeaderAction +.public GetLeaderChangeFlag +.public GetLeaderMonster +.public GetMaxPp +.public GetMonsterIdFromSpawnEntry +.public GetMonsterName +.public GetNbItemsInBag +.public GetPressedButtons +.public GetRecruitRate2 +.public GetSpeciesString +.public GetStringFromFileVeneer +.public GetTeamMember +.public GetTeamMemberIndex +.public GetTile +.public GetTrapInfo +.public GetUnlockedTactics +.public GetWindowRectangle +.public HandleStairsMenu +.public HideTileGrid +.public InitPreprocessorArgs +.public IqSkillFlagTest +.public IsAdvancedTextBoxActive +.public IsBagFull +.public IsBlinded +.public IsExperienceLocked +.public IsHeldItemInBag +.public IsInventoryMenuActive +.public IsItemUsableNow +.public IsMonsterOnTeam +.public IsNot2TurnsMoveOrSketch +.public IsParentMenuActive +.public IsRecruitingAllowed +.public IsScrollBoxActive +.public ItemZInit +.public JoinedAtRangeCheck2Veneer +.public LogMessageByIdWithPopupCheckUser +.public MemAlloc +.public MemFree +.public MemZero +.public MonsterCanThrowItems +.public MonsterHasEmbargoStatus +.public OVERLAY31_JP_STRING +.public OVERLAY31_UNKNOWN_POINTER__NA_238A26C +.public OVERLAY31_UNKNOWN_POINTER__NA_238A270 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A27C +.public OVERLAY31_UNKNOWN_POINTER__NA_238A280 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A284 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A288 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A28C +.public OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 +.public OVERLAY31_UNKNOWN_STRUCT__NA_238A144 +.public OVERLAY31_UNKNOWN_STRUCT__NA_238A190 +.public PlaySeVolumeWrapper +.public PlayWindowInputSound +.public PopInventoryMenuField0x1A3 +.public PositionHasItem +.public PreprocessString +.public PreprocessStringFromId +.public PrintIqSkillsMenu +.public ResumeParentMenu +.public SetAdvancedTextBoxField0x1C2 +.public SetAdvancedTextBoxState5 +.public SetMonsterActionFields +.public ShowStringInDialogueBox +.public SortItemsInBag +.public SpecificRecruitCheck +.public StringFromId +.public TeamMemberHasEnabledIqSkill +.public TryPointCameraToMonster +.public UpdateMapSurveyorFlag +.public UpdateWindow +.public YesNoMenu +.public _020A1870 +.public memcpy +.public memset +.public ov10_022BCC60 +.public ov10_022BCC7C +.public ov10_022BCCB0 +.public ov10_022BCD10 +.public ov10_022BCDA8 +.public ov10_022BCDBC +.public ov10_022BCDF4 +.public ov10_022BCE44 +.public ov10_022BD474 +.public ov29_022E08F4 +.public ov29_022E1618 +.public ov29_022E1620 +.public ov29_022E2A78 +.public ov29_022EA370 +.public ov29_022EA428 +.public ov29_022EA62C +.public ov29_022EAC78 +.public ov29_022EACCC +.public ov29_022EB2C8 +.public ov29_022EB398 +.public ov29_022EB804 +.public ov29_022EB8B0 +.public ov29_022EB9A0 +.public ov29_022EBA70 +.public ov29_022EBA84 +.public ov29_022EBA94 +.public ov29_022EBAB0 +.public ov29_022EBB4C +.public ov29_022EBB68 +.public ov29_022EBB8C +.public ov29_022EBB98 +.public ov29_022EBBA8 +.public ov29_022EBBE8 +.public ov29_022EBC2C +.public ov29_022ECDE4 +.public ov29_022F0B9C +.public ov29_022F9C34 +.public ov29_023002F0 +.public ov29_02300BF8 +.public ov29_023021F0 +.public ov29_02302388 +.public ov29_0233A0E8 +.public ov29_023468FC +.public ov29_02346E5C +.public ov29_02347100 +.public ov29_02348D00 +.public ov29_0234B034 +.public ov29_0234B084 +.public ov29_0234E988 +.public ov29_0234EA18 +.public ov29_0234EBCC +.public ov29_0234F77C +.public ov29_0234FB50 +.public ov29_0234FB60 +.public ov29_0234FBD4 +.public ov29_0235352C +.public ov29_0237C91C +.public ov29_0238280C +.public ov31_02382B54 +.public ov31_02382DAC +.public ov31_023832F0 +.public ov31_02383478 +.public ov31_02389F5C +.public ov31_0238A044 +.public ov31_0238A04C +.public ov31_0238A054 +.public ov31_0238A05C +.public ov31_0238A064 +.public ov31_0238A06C +.public ov31_0238A074 +.public ov31_0238A07C +.public ov31_0238A084 +.public ov31_0238A0A8 +.public ov31_0238A0B0 +.public ov31_0238A0B8 +.public ov31_0238A0C0 +.public ov31_0238A0C8 +.public ov31_0238A0D0 +.public ov31_0238A0D8 +.public ov31_0238A0E0 +.public ov31_0238A0E8 +.public ov31_0238A154 +.public ov31_0238A228 +.public ov31_0238A23C +.public strcpy +.public sub_02001808 +.public sub_0200B3D4 +.public sub_0200D310 +.public sub_02017C74 +.public sub_02017C80 +.public sub_02027B1C +.public sub_0202810C +.public sub_0202812C +.public sub_020282F4 +.public sub_02028354 +.public sub_0202A98C +.public sub_0202AB80 +.public sub_0202AB94 +.public sub_0202ABB0 +.public sub_0202B030 +.public sub_0202F334 +.public sub_0202F474 +.public sub_0202F954 +.public sub_0202F9B8 +.public sub_020307EC +.public sub_02030A18 +.public sub_02030A2C +.public sub_020348E4 +.public sub_0203F150 +.public sub_0203F398 +.public sub_0203F990 +.public sub_0203F9CC +.public sub_0203FD14 +.public sub_0203FD38 +.public sub_0203FD44 +.public sub_0204018C +.public sub_0204019C +.public sub_020407C0 +.public sub_020407EC +.public sub_02041094 +.public sub_020410A4 +.public sub_02041154 +.public sub_02041178 +.public sub_02041364 +.public sub_02041484 +.public sub_020416BC +.public sub_020416DC +.public sub_020416FC +.public sub_020417A8 +.public sub_02041A00 +.public sub_02041A18 +.public sub_02041B7C +.public sub_020420F4 +.public sub_0204F10C +.public sub_02053CA0 +.public sub_02054F44 +.public sub_02056228 +.public sub_020585B4 +.public vsprintf diff --git a/asm/overlay_31_023833D8.s b/asm/overlay_31_023833D8.s index eb82109f..17e0bef5 100644 --- a/asm/overlay_31_023833D8.s +++ b/asm/overlay_31_023833D8.s @@ -53,8892 +53,3 @@ ov31_02383434: ; 0x02383434 _02383470: .word ov31_023833B4 _02383474: .word OVERLAY31_UNKNOWN_POINTER__NA_238A268 arm_func_end ov31_02383434 - - arm_func_start ov31_02383478 -ov31_02383478: ; 0x02383478 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - movs r7, r1 - mov r8, r0 - mov r6, r2 - mov r4, #1 - bmi _023834AC - ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r1, #0 - ldr r0, [r0] - add r0, r0, r7 - add r0, r0, #0x1000 - strb r1, [r0, #0x1f8] -_023834AC: - ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r3, [r0] - add r0, r3, #0x1000 - ldr r2, [r0, #0x1b4] - cmp r2, #0 - beq _02383508 - cmp r7, #0 - blt _02383508 - ldr r1, _02383648 ; =BAG_ITEMS_PTR_MIRROR - mov r0, #6 - ldr r1, [r1] - ldr r1, [r1, #0x384] - mla r0, r7, r0, r1 - cmp r0, r2 - beq _023834F4 - ldrb r0, [r0, #1] - cmp r0, #0 - beq _02383508 -_023834F4: - add r0, r3, r7 - add r0, r0, #0x1000 - mov r1, #3 - strb r1, [r0, #0x1f8] - mov r4, #0 -_02383508: - ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r0] - add r0, r1, #0x1000 - ldrb r0, [r0, #0x1b2] - cmp r0, #0 - bne _02383528 - cmp r7, #0 - bge _023835B4 -_02383528: - add r0, r1, #0x1000 - ldr r1, [r0, #0x19c] - ldrsh r0, [r1, #4] - ldrsh r1, [r1, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - mov r1, r0 - ldrb r0, [r1] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02383590 - ldr r2, _0238364C ; =OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 - mov r5, #1 - mov r0, r8 - mov r3, r4 - str r5, [sp] - bl sub_0200D310 - ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x277] - b _02383638 -_02383590: - ldr r1, _02383650 ; =ov31_02389F5C - mov r0, r8 - bl strcpy - ldr r0, _02383644 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r1, #3 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x277] - b _02383638 -_023835B4: - mov r0, #6 - ldr r1, _02383648 ; =BAG_ITEMS_PTR_MIRROR - mul r5, r7, r0 - ldr r0, [r1] - ldr r1, [r0, #0x384] - ldrb r0, [r1, r5] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - addne r0, r1, r5 - ldrneb r1, [r0, #1] - cmpne r1, #0 - beq _02383624 - ldr r0, _02383654 ; =DUNGEON_PTR - sub r1, r1, #1 - ldr r0, [r0] - add r0, r0, r1, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - bl ov31_02383658 - cmp r0, #0 - bne _02383624 - ldr r0, _02383648 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r0, [r0, #0x384] - add r0, r0, r5 - bl sub_0200D894 -_02383624: - mov r0, r8 - mov r1, r7 - mov r2, r4 - mov r3, r6 - bl ov10_022BD394 -_02383638: - mov r0, r8 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02383644: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C -_02383648: .word BAG_ITEMS_PTR_MIRROR -_0238364C: .word OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 -_02383650: .word ov31_02389F5C -_02383654: .word DUNGEON_PTR - arm_func_end ov31_02383478 - - arm_func_start ov31_02383658 -ov31_02383658: ; 0x02383658 - cmp r0, #0 - moveq r0, #0 - bxeq lr - ldr r0, [r0] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end ov31_02383658 - - arm_func_start ov31_0238367C -ov31_0238367C: ; 0x0238367C - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x5c - bl GetLeader - mov r1, #0 - mov r2, #0xb - bl GetItemToUse - ldrsh r1, [r0, #4] - mov r2, #0 - add lr, sp, #0xc - str r1, [sp, #0x1c] - ldrh r4, [r0, #2] - ldr r1, _02383720 ; =0x00001013 - ldr r3, _02383724 ; =0x000008E4 - str r4, [sp, #0x30] - ldrh r4, [r0, #2] - add r4, r4, #0xbc - str r4, [sp, #0x24] - str r2, [sp, #0x38] - str lr, [sp] - ldrsh r4, [r0, #4] - ldr r0, _02383728 ; =DUNGEON_WINDOW_PARAMS_8 -#if defined(EUROPE) - add ip, r4, #0xd3 - add r4, ip, #0x2900 -#elif defined(JAPAN) - add ip, r4, #0xce - add r4, ip, #0x4100 -#else - add ip, r4, #0xd1 - add r4, ip, #0x2900 -#endif - mov ip, r4, lsl #0x10 - mov r4, ip, lsr #0x10 - stmib sp, {r4, lr} - bl CreateScrollBoxSingle - mov r5, r0 - mov r4, #0x16 -_023836F0: - mov r0, r4 - bl AdvanceFrame - mov r0, r5 - bl IsScrollBoxActive - cmp r0, #0 - bne _023836F0 - mov r0, r5 - bl CloseScrollBox - mov r0, #0x16 - bl AdvanceFrame - add sp, sp, #0x5c - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_02383720: .word 0x00001013 -#ifdef JAPAN -_02383724: .word 0x00001D3C -#else -_02383724: .word 0x000008E4 -#endif -_02383728: .word DUNGEON_WINDOW_PARAMS_8 - arm_func_end ov31_0238367C - - arm_func_start ov31_0238372C -ov31_0238372C: ; 0x0238372C - stmdb sp!, {r3, lr} - ldr r1, _02383764 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r1] - add r1, r1, #0x1000 - ldrb r1, [r1, #0x1b1] - cmp r1, #0 - beq _0238375C - add r0, r0, #4 - bl PositionHasItem - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, pc} -_0238375C: - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02383764: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C - arm_func_end ov31_0238372C - - arm_func_start ov31_02383768 -ov31_02383768: ; 0x02383768 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - ldrsb r0, [r7] - mvn r1, #1 - cmp r0, r1 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - bl ov10_022BCD10 - cmp r0, #0 - beq _023837B4 - mvn r4, #3 - sub r5, r4, #1 - mov r6, #0x62 -_02383798: - mov r0, r6 - bl AdvanceFrame - ldrsb r0, [r7] - bl sub_020282F4 - cmp r0, r5 - cmpne r0, r4 - bne _02383798 -_023837B4: - ldrsb r0, [r7] - bl CloseInventoryMenu - mvn r0, #1 - strb r0, [r7] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end ov31_02383768 - - arm_func_start ov31_023837C8 -ov31_023837C8: ; 0x023837C8 - stmdb sp!, {r3, lr} - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x92 - add r0, r0, #0x1100 - bl ov29_0234E988 - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x94] - cmp r0, r1 - beq _02383800 - bl CloseTextBox2 -_02383800: - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x95] - cmp r0, r1 - beq _02383820 - bl CloseTextBox2 -_02383820: - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x93 - add r0, r0, #0x1100 - bl ov31_02383768 - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - bl MemFree - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02383850: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C - arm_func_end ov31_023837C8 - -; https://decomp.me/scratch/VL6fa - arm_func_start ov31_02383854 -ov31_02383854: ; 0x02383854 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, _0238387C ; =0x000008E6 - bl StringFromId - mov r1, #2 - mov r3, r0 - mov r0, r4 - mov r2, r1 - bl DrawTextInWindow - ldmia sp!, {r4, pc} - .align 2, 0 -#ifdef JAPAN -_0238387C: .word 0x00001D3E -#else -_0238387C: .word 0x000008E6 -#endif - arm_func_end ov31_02383854 - - arm_func_start ov31_02383880 -ov31_02383880: ; 0x02383880 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r5, #0 - mov r7, r0 - add r0, r5, #1 - ldr r8, _023838E0 ; =DUNGEON_PTR - strb r5, [r7] - and r6, r0, #0xff - mov r4, r5 -_023838A0: - ldr r0, [r8] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - bl ov31_02383658 - cmp r0, #0 - addeq r0, r7, r5 - streqb r4, [r0, #1] - addne r0, r7, r5 - addne r1, r6, #1 - strneb r6, [r0, #1] - add r5, r5, #1 - andne r6, r1, #0xff - cmp r5, #4 - blt _023838A0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_023838E0: .word DUNGEON_PTR - arm_func_end ov31_02383880 - - arm_func_start ov31_023838E4 -ov31_023838E4: ; 0x023838E4 -#ifdef JAPAN -#define OV31_023838E4_OFFSET -0xA4 -#else -#define OV31_023838E4_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x234 - sub sp, sp, #0x400 - mov r2, #0 - mov r5, r2 - str r2, [sp, #0x30] - mov sl, r0 - mov sb, r1 - mov r6, r5 - ldr r7, [sl, #0xb4] - bl ov29_022EBB4C - mov r0, #0x1280 - mov r1, #8 - bl MemAlloc - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r4, #1 - str r0, [r1] - add r0, r0, #0x1000 - str sl, [r0, #0x19c] - ldr r0, [r1] - add r3, r4, #1 - add r0, r0, #0x1000 - strb r4, [r0, #0x193] - ldr r0, [r1] - mov r2, #0 - add r0, r0, #0x1000 - strb r4, [r0, #0x192] - ldr r8, [r1] - mov r0, #1 - add r8, r8, #0x1000 - strb r4, [r8, #0x194] - ldr r8, [r1] - add r8, r8, #0x1000 - strb r4, [r8, #0x195] - ldr r4, [r1] - add r4, r4, #0x1000 - str r3, [r4, #0x198] - ldr r3, [r1] - add r3, r3, #0x1000 - str r2, [r3, #0x1ac] - ldr r3, [r1] - add r3, r3, #0x1000 - strb r0, [r3, #0x1b1] - ldr r0, [r1] - add r0, r0, #0x1000 - strb r2, [r0, #0x1b2] - ldr r0, [r1] - add r0, r0, #0x1000 - str r2, [r0, #0x1b4] - ldr r0, [r1] - add r0, r0, #0x278 - add r0, r0, #0x1000 - bl ov31_02383880 - cmp sb, #0 - beq _02383A1C - ldrb r0, [sb] - cmp r0, #0 - beq _023839E4 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [sb, #4] - ldr r0, [r0] - mov r6, #1 - add r0, r0, #0x1000 - str r1, [r0, #0x1b4] -_023839E4: - ldrb r0, [sb, #1] - cmp r0, #0 - ldreq r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - moveq r1, #0 - ldreq r0, [r0] - addeq r0, r0, #0x1000 - streqb r1, [r0, #0x1b1] - ldrb r0, [sb, #2] - cmp r0, #0 - ldrne r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - movne r1, #1 - ldrne r0, [r0] - addne r0, r0, #0x1000 - strneb r1, [r0, #0x1b2] -_02383A1C: - mov r0, #3 - bl Arm9LoadUnkFieldNa0x2029EC8 - mov r1, r0 - ldr r0, _0238489C ; =OVERLAY31_JP_STRING - bl Debug_Print0 - bl GetNbItemsInBag - ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - cmp r6, #0 - ldr r1, [r2] - add r1, r1, #0x1000 - str r0, [r1, #0x1a8] - ldrne r0, [r2] - movne r1, #0 - addne r0, r0, #0x1000 - strneb r1, [r0, #0x1b3] - bne _02383A74 - mov r0, sl - bl ov31_0238372C - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r1] - add r1, r1, #0x1000 - strb r0, [r1, #0x1b3] -_02383A74: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r2, [r0] - add r0, r2, #0x1000 - ldrb r1, [r0, #0x1b2] - cmp r1, #0 - ldreq r1, [r0, #0x1a8] - cmpeq r1, #0 - ldreqb r0, [r0, #0x1b3] - cmpeq r0, #0 - bne _02383AC4 - ldr r1, _023848A0 ; =0x000008E5 - mov r0, #0 - mov r2, #1 - bl DisplayMessage - bl ov31_023837C8 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #1 - b _0238511C -_02383AC4: - add r0, r2, #0x1000 - ldr r0, [r0, #0x1a8] - cmp r0, #0 - bne _02383B08 - mov r0, sl - bl ov31_0238372C - ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r3, #1 - ldr r1, [r2] - add r1, r1, #0x1000 - strb r0, [r1, #0x1b3] - ldr r0, [r2] - add r0, r0, #0x1000 - strb r3, [r0, #0x1b2] - ldr r0, [r2] - add r0, r0, #0x1000 - strb r3, [r0, #0x1b1] -_02383B08: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - cmp r0, r1 - beq _02383B48 - bl IsInventoryMenuActive - cmp r0, #0 - bne _02383D78 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCC7C - b _02383D78 -_02383B48: - bl GetNbItemsInBag - ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r4] - add r1, r1, #0x1000 - str r0, [r1, #0x1a8] - ldr r0, [r4] - add r0, r0, #0x1000 - ldr r0, [r0, #0x1a8] - cmp r0, #0 - beq _02383C44 - ldr fp, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - mov r8, #0 -_02383B78: - mov r0, #6 - mul r1, r8, r0 - ldr r0, [fp] - ldr r2, [r0, #0x384] - ldrb r0, [r2, r1] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02383BD8 - ldrb r0, [r2, r1] - tst r0, #4 - beq _02383BD8 - bic r0, r0, #4 - strb r0, [r2, r1] - ldr r1, [r4] - mov r0, #3 - add r1, r1, #0x1000 - str r8, [r1, #0x1ac] - ldr r1, [r4] - add r1, r1, #0x1000 - ldr r1, [r1, #0x1ac] - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 -_02383BD8: - add r8, r8, #1 - cmp r8, #0x32 - blt _02383B78 - ldr fp, _023848A8 ; =DUNGEON_PTR - mov r4, #0 -_02383BEC: - ldr r0, [fp] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r8, [r0, #0xb28 + OV31_023838E4_OFFSET] - mov r0, r8 - bl ov31_02383658 - cmp r0, #0 - beq _02383C38 - ldr r1, [r8, #0xb4] - ldrb r0, [r1, #0x62] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02383C38 - ldrb r0, [r1, #0x62] - tst r0, #4 - bicne r0, r0, #4 - strneb r0, [r1, #0x62] -_02383C38: - add r4, r4, #1 - cmp r4, #4 - blt _02383BEC -_02383C44: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r4, [r0] - add r0, r4, #0x1000 - ldrb r1, [r0, #0x1b2] - cmp r1, #0 - bne _02383D1C - ldr r0, [r0, #0x1a8] - cmp r0, #0 - beq _02383D1C - mov r0, #3 - bl Arm9LoadUnkFieldNa0x2029EC8 - ldr r2, _023848AC ; =ov31_02383478 - add r1, r4, #0x278 - str r2, [sp] - add r1, r1, #0x1000 - str r1, [sp, #4] - add r1, r4, #0x1000 - ldrb r2, [r1, #0x1b3] - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r3, r4, #0x1f8 - str r2, [sp, #8] - ldr r1, [r1] - mov r2, r0 - add r0, r1, #0x1000 - ldr r0, [r0, #0x1a8] - mov r1, r6 - add r3, r3, #0x1000 - bl ov10_022BD474 - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - cmp r6, #0 - ldr r1, [r1] - add r1, r1, #0x1000 - strb r0, [r1, #0x193] - beq _02383CEC - ldr r0, _023848B0 ; =DUNGEON_WINDOW_PARAMS_10 - ldr r1, _023848B4 ; =ov31_02383854 - bl CreateTextBox - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r1] - add r1, r1, #0x1000 - strb r0, [r1, #0x194] - b _02383D78 -_02383CEC: - ldr r0, _023848B8 ; =DUNGEON_WINDOW_PARAMS_11 - mov r1, #0 - bl CreateTextBox - ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r3, #0 - ldr r1, [r2] - add r1, r1, #0x1000 - strb r0, [r1, #0x195] - ldr r0, [r2] - add r0, r0, #0x1000 - str r3, [r0, #0x198] - b _02383D78 -_02383D1C: - ldr r3, _023848BC ; =0x000008E3 - add r0, sp, #0x540 - add r1, r4, #0x278 - strh r3, [r0, #0x64] - mov r2, #0x10 - str r2, [sp, #0x5a8] - add r0, r1, #0x1000 - str r0, [sp] - mov r4, #1 - str r4, [sp, #4] - add r2, sp, #0x500 - str r4, [sp, #8] - mov r4, #0 - ldr r0, _023848C0 ; =DUNGEON_WINDOW_PARAMS_12 - ldr r1, _023848C4 ; =0x00400813 - ldr r3, _023848AC ; =ov31_02383478 - add r2, r2, #0x9c - str r4, [sp, #0xc] - bl CreateInventoryMenu - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r1] - add r1, r1, #0x1000 - strb r0, [r1, #0x193] -_02383D78: - mvn r0, #0 - str r0, [sp, #0x38] - sub r0, r0, #1 - ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - str r0, [sp, #0x3c] -_02383D8C: - mov r0, #0x14 - bl AdvanceFrame - mov r0, #0 - add r1, sp, #0x42 - bl GetPressedButtons - ldr r1, [r4] - add r0, r1, #0x1000 - ldrb r0, [r0, #0x1b2] - cmp r0, #0 - bne _023843D0 - add r0, r1, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCE44 - mov fp, r0 - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl PopInventoryMenuField0x1A3 - str r0, [sp, #0x2c] - ldr r0, [r4] - add r1, r0, #0x1100 - ldrsb r8, [r1, #0x95] - ldr r0, [sp, #0x3c] - cmp r8, r0 - beq _02384054 - ldrsb r0, [r1, #0x93] - bl ov10_022BCE44 - cmp r0, #0 - ldr r0, [r4] - bne _02383F7C - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDA8 - str r0, [sp, #0x34] - ldr r0, [r4] - add r1, r0, #0x1000 - ldr r2, [r1, #0x198] - ldr r0, [sp, #0x34] - cmp r2, r0 - beq _02384054 - str r0, [r1, #0x198] - ldr r1, [r4] - mov r0, r8 - add r1, r1, #0x1000 - ldr r1, [r1, #0x19c] - str r1, [sp, #0x28] - bl sub_02027B1C - ldr r1, [sp, #0x34] - mov r0, #6 - mul r2, r1, r0 - ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r0, [r0, #0x384] - add r1, r0, r2 - ldrb r0, [r0, r2] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02383F28 - ldrb r0, [r1, #1] - str r0, [sp, #0x10] - cmp r0, #0 - beq _02383F00 - ldr r1, _023848A8 ; =DUNGEON_PTR - add r0, sp, #0x400 - ldr r3, [r1] - ldr r1, [sp, #0x10] - add r0, r0, #0x4c - add r1, r3, r1, lsl #2 - add r1, r1, #0x12000 - ldr r1, [r1, #0xb24 + OV31_023838E4_OFFSET] - mov r2, #0 - bl ov29_022E2A78 - add r0, sp, #0x400 - add r0, r0, #0x4c - str r0, [sp, #0x584] - add r0, sp, #0x500 -#ifdef JAPAN - ldr r2, [sp, #0x38] - add r0, r0, #0x4c - str r0, [sp] - add r0, sp, #0x4c - mov r1, #0x400 - add r2, r2, #0x1d40 -#else - add r0, r0, #0x4c - str r0, [sp] - ldr r2, _023848C8 ; =0x000008E7 - add r0, sp, #0x4c - mov r1, #0x400 -#endif - mov r3, #0 - bl PreprocessStringFromId - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r1, [r0] - ldr r0, [sp, #0x10] - add r0, r1, r0, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb24 + OV31_023838E4_OFFSET] - str r0, [sp, #0x28] - b _02383F34 -_02383F00: - ldrsh r0, [r1, #4] -#if defined(EUROPE) - add r0, r0, #0x4b - add r0, r0, #0x2f00 -#elif defined(JAPAN) - add r0, r0, #0x41 - add r0, r0, #0x1d00 -#else - add r0, r0, #0x49 - add r0, r0, #0x2f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r1, r0 - add r0, sp, #0x4c - bl strcpy - b _02383F34 -_02383F28: - ldr r1, _023848CC ; =ov31_02389F5C - add r0, sp, #0x4c - bl strcpy -_02383F34: - mov r1, #2 - mov r0, r8 - mov r2, r1 - add r3, sp, #0x4c - bl DrawTextInWindow - mov r0, r8 - bl UpdateWindow - ldr r0, [sp, #0x28] - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - ldr r0, [sp, #0x28] - mov r2, #1 - add r0, r0, #4 - mov r1, #0 - mov r3, r2 - bl DrawTileGrid - b _02384054 -_02383F7C: - add r0, r0, #0x1000 - ldr r1, [r0, #0x198] - cmp r1, #0x7f - beq _02384054 - ldr r1, [r0, #0x19c] - ldrsh r0, [r1, #4] - ldrsh r1, [r1, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _02383FE4 - ldrsh r0, [r0, #4] -#if defined(EUROPE) - add r0, r0, #0x4b - add r0, r0, #0x2f00 -#elif defined(JAPAN) - add r0, r0, #0x41 - add r0, r0, #0x1d00 -#else - add r0, r0, #0x49 - add r0, r0, #0x2f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r1, r0 - add r0, sp, #0x4c - bl strcpy - b _02383FF0 -_02383FE4: - ldr r1, _023848CC ; =ov31_02389F5C - add r0, sp, #0x4c - bl strcpy -_02383FF0: - mov r0, r8 - bl sub_02027B1C - mov r1, #2 - mov r0, r8 - mov r2, r1 - add r3, sp, #0x4c - bl DrawTextInWindow - mov r0, r8 - bl UpdateWindow - ldr r0, [r4] - mov r1, #0 - add r2, r0, #0x1000 - mov r0, #0x7f - str r0, [r2, #0x198] - ldr r0, [r4] - mov r2, #1 - add r0, r0, #0x1000 - ldr r8, [r0, #0x19c] - mov r0, r8 - bl TryPointCameraToMonster - mov r2, #1 - add r0, r8, #4 - mov r1, #0 - mov r3, r2 - bl DrawTileGrid -_02384054: - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl IsInventoryMenuActive - cmp r0, #0 - beq _02384088 - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDA8 - and r1, r0, #0xff - mov r0, #3 - bl Arm9StoreUnkFieldNa0x2029ED8 -_02384088: - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl IsInventoryMenuActive - cmp r0, #0 - bne _023841A4 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDBC - movs r4, r0 - bmi _0238419C - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - and r1, r4, #0xff - ldr r2, [r0] - mov r0, #3 - add r2, r2, #0x1000 - str r4, [r2, #0x1ac] - bl Arm9StoreUnkFieldNa0x2029ED8 - cmp fp, #0 - bne _02384138 - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r0, #6 - ldr r1, [r1] - mul r8, r4, r0 - add r0, r1, #0x1000 - ldrb r3, [r0, #0x1b2] - ldr r2, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - add r1, sl, #4 - str r3, [sp] - ldr r2, [r2] - ldr r0, [r0, #0x1ac] - ldr r2, [r2, #0x384] - mov r3, #0 - add r2, r2, r8 - ldrb r2, [r2, #1] - bl ov29_022EBAB0 - ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r0, [r0, #0x384] - add r0, r0, r8 - str r0, [sb, #4] - b _02384194 -_02384138: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r1, sl, #4 - ldr r0, [r0] - mov r2, #0 - add r0, r0, #0x1000 - ldrb r4, [r0, #0x1b2] - mov r3, #1 - str r4, [sp] - ldr r0, [r0, #0x1ac] - bl ov29_022EBAB0 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - strne r0, [sb, #4] - moveq r0, #0 - streq r0, [sb, #4] -_02384194: - mov r4, #1 - b _02384438 -_0238419C: - mov r4, #2 - b _02384438 -_023841A4: - ldrh r0, [sp, #0x42] - tst r0, #8 - beq _023842DC - ldr r0, _023848D0 ; =0x00003F04 - bl sub_02017C80 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDF4 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDBC - ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r2] - add r1, r1, #0x1000 - str r0, [r1, #0x1ac] - ldr r1, [r2] - mov r0, #3 - add r1, r1, #0x1000 - ldr r1, [r1, #0x1ac] - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 - cmp fp, #0 - bne _02384278 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r3, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - mov r2, #6 - add r0, r0, #0x1000 - ldrb r4, [r0, #0x1b2] - ldr r0, [r0, #0x1ac] - add r1, sl, #4 - str r4, [sp] - ldr r4, [r3] - mov r3, #0 - ldr r4, [r4, #0x384] - mla r2, r0, r2, r4 - ldrb r2, [r2, #1] - bl ov29_022EBAB0 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r1, [r1] - add r0, r0, #0x1000 - ldr r2, [r1, #0x384] - ldr r1, [r0, #0x1ac] - mov r0, #6 - mla r0, r1, r0, r2 - str r0, [sb, #4] - b _023842D4 -_02384278: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r1, sl, #4 - ldr r0, [r0] - mov r2, #0 - add r0, r0, #0x1000 - ldrb r4, [r0, #0x1b2] - mov r3, #1 - str r4, [sp] - ldr r0, [r0, #0x1ac] - bl ov29_022EBAB0 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - strne r0, [sb, #4] - moveq r0, #0 - streq r0, [sb, #4] -_023842D4: - mov r4, #3 - b _02384438 -_023842DC: - tst r0, #4 - bne _023842F4 - tst r0, #0x800 - ldreq r0, [sp, #0x2c] - cmpeq r0, #0 - beq _02383D8C -_023842F4: - cmp r6, #0 - cmpeq fp, #0 - bne _02383D8C - ldr r0, [sp, #0x2c] - cmp r0, #0 - bne _02384314 - mov r0, #5 - bl PlaySeVolumeWrapper -_02384314: - bl ov29_02346E5C - bl SortItemsInBag - mov r8, #0 -_02384320: - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r8, lsl #2 - add r0, r0, #0x12000 - ldr fp, [r0, #0xb28 + OV31_023838E4_OFFSET] - mov r0, fp - bl ov31_02383658 - cmp r0, #0 - beq _02384374 - ldr r1, [fp, #0xb4] - ldrb r0, [r1, #0x62] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02384374 - ldrsh r0, [r1, #0x66] - cmp r0, #0xb7 - bne _02384374 - add r0, r1, #0x62 - bl ItemZInit -_02384374: - add r8, r8, #1 - cmp r8, #4 - blt _02384320 - ldr r0, [r4] - add r1, r0, #0x1000 - ldr r0, [sp, #0x38] - str r0, [r1, #0x198] - bl GetNbItemsInBag - movs r1, r0 - beq _023843C0 - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCC60 - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCCB0 - b _02383D8C -_023843C0: - mov r0, #1 - str r0, [sp, #0x30] - mov r4, #2 - b _02384438 -_023843D0: - add r0, r1, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDF4 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r1, sl, #4 - ldr r0, [r0] - mov r2, #0 - add r0, r0, #0x1000 - ldrb r4, [r0, #0x1b2] - mov r3, #1 - str r4, [sp] - ldr r0, [r0, #0x1ac] - bl ov29_022EBAB0 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - ldrb r1, [r0] - mov r4, #1 - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - moveq r0, #0 - str r0, [sb, #4] -_02384438: - mov r0, #0x14 - bl AdvanceFrame - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r0] - add r0, r1, #0x1000 - ldrb r0, [r0, #0x1b2] - cmp r0, #0 - bne _02384490 - add r0, r1, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCE44 - cmp r0, #0 - bne _02384490 - ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r0, [r0, #0x384] - ldrb r0, [r0] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - moveq r4, #2 -_02384490: - cmp r4, #2 - bne _023844AC - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #1 - b _023850D8 -_023844AC: - cmp r4, #0 - beq _023850D8 - cmp r4, #3 - bne _023844D8 - add r0, r7, #0x4a - bl ov29_022EBBE8 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_023844D8: - cmp r6, #0 - beq _023844FC - add r0, r7, #0x54 - bl ov29_022EBB68 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_023844FC: - bl ov29_022EBB8C - mov r1, r0 - mov r0, sl - mov r2, #0xa - bl GetItemToUseByIndex - mov r8, r0 - ldr r0, [sl, #0xb4] - str r0, [sp, #0x14] - bl ov29_022EBA70 - bl ov29_022EBB98 - cmp r0, #0x90 - bhs _023849F4 - bl ov29_022EBB98 - cmp r0, #0x80 - bne _02384598 - ldrsh r1, [r8, #4] - mov r0, #9 - bl AddDungeonSubMenuOption - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #6 - beq _02384598 - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _02384570 - bl IsBagFull - b _02384588 -_02384570: - ldr r0, [sp, #0x14] - ldrb r0, [r0, #0x62] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_02384588: - cmp r0, #0 - beq _02384598 - mov r0, #9 - bl DisableDungeonSubMenuOption -_02384598: - bl ov29_022EBB98 - cmp r0, #0x80 - bne _023845C4 - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _023845C4 - ldrsh r1, [r8, #4] - mov r0, #0xa - bl AddDungeonSubMenuOption -_023845C4: - mov r0, r8 - bl GetItemAction - movs r4, r0 - beq _02384654 - ldrsh r1, [r8, #4] - bl AddDungeonSubMenuOption - ldrb r0, [r8] - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _023845FC - mov r0, r4 - bl DisableDungeonSubMenuOption -_023845FC: - mov r0, r8 - bl ov29_023468FC - cmp r0, #0 - bne _02384614 - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384614: - mov r0, sl - bl MonsterHasEmbargoStatus - cmp r0, #0 - bne _02384634 - mov r0, r8 - bl ov29_02348D00 - cmp r0, #0 - beq _0238463C -_02384634: - mov r0, r4 - bl DisableDungeonSubMenuOption -_0238463C: - mov r0, r8 - bl IsItemUsableNow - cmp r0, #0 - bne _02384654 - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384654: - bl ov29_022EBB98 - cmp r0, #0x33 - bhs _02384728 - ldrb r0, [r8, #1] - cmp r0, #0 - bne _02384728 - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #0 - beq _0238468C - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #1 - bne _02384728 -_0238468C: - ldrb r0, [r8] - ldrsh r1, [r8, #4] - tst r0, #0x10 - beq _023846A8 - mov r0, #0x3d - bl AddDungeonSubMenuOption - b _023846B0 -_023846A8: - mov r0, #0x3c - bl AddDungeonSubMenuOption -_023846B0: - ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - mov r3, #0 - ldr r4, [r0] - mov lr, #1 - mov r0, #6 - b _02384720 -_023846C8: - mul r1, r3, r0 - ldr r2, [r4, #0x384] - ldrb fp, [r2, r1] - tst fp, #1 - movne ip, lr - moveq ip, #0 - tst ip, #0xff - beq _0238471C - ldrb r1, [r2, r1] - tst r1, #0x10 - beq _0238471C - tst fp, #8 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _0238471C - mov r0, #0x3c - bl DisableDungeonSubMenuOption - mov r0, #0x3d - bl DisableDungeonSubMenuOption - b _02384728 -_0238471C: - add r3, r3, #1 -_02384720: - cmp r3, #0x32 - blt _023846C8 -_02384728: - bl ov29_022EBB98 - cmp r0, #0x81 - beq _02384804 - bl ov29_022EBB98 - cmp r0, #0x80 - beq _02384860 - ldrsh r1, [r8, #4] - mov r2, #0 - mov r0, #0x36 - str r2, [sp, #0x18] - bl AddDungeonSubMenuOption - mov r4, #0 -_02384758: - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] - str r0, [sp, #0x1c] - bl ov31_02383658 - cmp r0, #0 - beq _023847A0 - ldr r0, [sp, #0x1c] - mov r1, #0 - ldr fp, [r0, #0xb4] -#ifdef JAPAN - strb r1, [fp, #0x15d] -#else - strb r1, [fp, #0x161] -#endif - bl ov29_02300BF8 - cmp r0, #0 - moveq r0, #1 - streq r0, [sp, #0x18] -#ifdef JAPAN - streqb r0, [fp, #0x15d] -#else - streqb r0, [fp, #0x161] -#endif -_023847A0: - add r4, r4, #1 - cmp r4, #4 - blt _02384758 - add r0, sp, #0x40 - bl sub_0204F10C - cmp r0, #0 - beq _023847EC - bl GetCurrentBagCapacity - cmp r0, #2 - bge _023847EC - ldrsh r0, [sp, #0x40] - sub r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #1 - movls r0, #0 - strls r0, [sp, #0x18] -_023847EC: - ldr r0, [sp, #0x18] - cmp r0, #0 - bne _02384860 - mov r0, #0x36 - bl DisableDungeonSubMenuOption - b _02384860 -_02384804: - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _02384860 - ldrsh r1, [r8, #4] - mov r0, #0x37 - bl AddDungeonSubMenuOption - mov r0, r8 - bl IsHeldItemInBag - cmp r0, #0 - beq _02384840 - ldrsh r1, [r8, #4] - mov r0, #0x3e - bl AddDungeonSubMenuOption -_02384840: - mov r0, sl - bl CheckVariousConditions - cmp r0, #0 - beq _02384860 - mov r0, #0x37 - bl DisableDungeonSubMenuOption - mov r0, #0x3e - bl DisableDungeonSubMenuOption -_02384860: - bl ov29_022EBB98 - cmp r0, #0x33 - bhs _02384908 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - bl GetTile - mov r4, r0 - ldr r0, [r4, #0x10] - cmp r0, #0 - bne _023848D4 - ldrsh r1, [r8, #4] - mov r0, #8 - bl AddDungeonSubMenuOption - b _02384908 - .align 2, 0 -#ifdef JAPAN -#define OV31_023838E4_OFFSET_2 0x1458 -#else -#define OV31_023838E4_OFFSET_2 0 -#endif -_02384898: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C -_0238489C: .word OVERLAY31_JP_STRING -_023848A0: .word 0x000008E5 + OV31_023838E4_OFFSET_2 -_023848A4: .word BAG_ITEMS_PTR_MIRROR -_023848A8: .word DUNGEON_PTR -_023848AC: .word ov31_02383478 -_023848B0: .word DUNGEON_WINDOW_PARAMS_10 -_023848B4: .word ov31_02383854 -_023848B8: .word DUNGEON_WINDOW_PARAMS_11 -_023848BC: .word 0x000008E3 + OV31_023838E4_OFFSET_2 -_023848C0: .word DUNGEON_WINDOW_PARAMS_12 -_023848C4: .word 0x00400813 -#ifndef JAPAN -_023848C8: .word 0x000008E7 -#endif -_023848CC: .word ov31_02389F5C -_023848D0: .word 0x00003F04 -_023848D4: - ldr r0, [r0] - cmp r0, #3 - bne _02384908 - ldrsh r1, [r8, #4] - mov r0, #0x3a - bl AddDungeonSubMenuOption - ldr r0, [r4, #0x10] - bl ov29_022E1620 - bl ov29_02348D00 - cmp r0, #0 - beq _02384908 - mov r0, #0x3a - bl DisableDungeonSubMenuOption -_02384908: - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #0 - bne _02384928 - ldrsh r1, [r8, #4] - mov r0, #0x27 - bl AddDungeonSubMenuOption - b _02384950 -_02384928: - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #1 - ldrsh r1, [r8, #4] - bne _02384948 - mov r0, #0x41 - bl AddDungeonSubMenuOption - b _02384950 -_02384948: - mov r0, #0xb - bl AddDungeonSubMenuOption -_02384950: - ldr r0, [sp, #0x14] - bl MonsterCanThrowItems - cmp r0, #0 - bne _02384978 - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption - mov r0, #0xb - bl DisableDungeonSubMenuOption -_02384978: - mov r0, sl - bl MonsterHasEmbargoStatus - cmp r0, #0 - beq _023849A0 - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption - mov r0, #0xb - bl DisableDungeonSubMenuOption -_023849A0: - mov r0, r8 - bl ov29_02348D00 - cmp r0, #0 - beq _023849D8 - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption - mov r0, #0xb - bl DisableDungeonSubMenuOption - mov r0, #0xa - bl DisableDungeonSubMenuOption - mov r0, #9 - bl DisableDungeonSubMenuOption -_023849D8: - mov r0, r8 - bl IsItemUsableNow - cmp r0, #0 - bne _02384C48 - mov r0, #0xb - bl DisableDungeonSubMenuOption - b _02384C48 -_023849F4: - bl ov29_022EBB98 - ldr r1, _023848A8 ; =DUNGEON_PTR - sub r2, r0, #0x90 - ldr r0, [r1] - add r0, r0, r2, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] - str r0, [sp, #0x20] - bl ov31_02383658 - cmp r0, #0 - beq _02384C48 - mov r0, #0 - str r0, [sp, #0x24] - ldr r0, [sp, #0x20] - ldr r4, [sp, #0x24] - mov r1, r0 - ldr fp, [r1, #0xb4] - bl CheckVariousConditions - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #0x24] - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #5 - ldrsh r0, [r8, #4] - moveq r4, #1 - bl GetItemCategoryVeneer - cmp r0, #9 - ldr r0, _023848A8 ; =DUNGEON_PTR - moveq r4, #1 - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _02384AC0 - ldrsh r1, [r8, #4] - mov r0, #0x37 - bl AddDungeonSubMenuOption - mov r0, r8 - bl IsHeldItemInBag - cmp r0, #0 - beq _02384AA4 - ldrsh r1, [r8, #4] - mov r0, #0x3e - bl AddDungeonSubMenuOption -_02384AA4: - ldr r0, [sp, #0x24] - cmp r0, #0 - beq _02384AC0 - mov r0, #0x37 - bl DisableDungeonSubMenuOption - mov r0, #0x3e - bl DisableDungeonSubMenuOption -_02384AC0: - ldrb r0, [fp, #7] - cmp r0, #0 - beq _02384BEC - mov r0, r8 - bl GetItemAction - movs r4, r0 - beq _02384B5C - ldrsh r1, [r8, #4] - bl AddDungeonSubMenuOption - ldrb r0, [r8] - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02384B04 - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384B04: - mov r0, r8 - bl ov29_023468FC - cmp r0, #0 - bne _02384B1C - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384B1C: - ldr r0, [sp, #0x20] - bl MonsterHasEmbargoStatus - cmp r0, #0 - bne _02384B3C - mov r0, r8 - bl ov29_02348D00 - cmp r0, #0 - beq _02384B44 -_02384B3C: - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384B44: - mov r0, r8 - bl IsItemUsableNow - cmp r0, #0 - bne _02384B5C - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384B5C: - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #0 - bne _02384B7C - ldrsh r1, [r8, #4] - mov r0, #0x27 - bl AddDungeonSubMenuOption - b _02384B98 -_02384B7C: - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #1 - bne _02384B98 - ldrsh r1, [r8, #4] - mov r0, #0x41 - bl AddDungeonSubMenuOption -_02384B98: - ldr r0, [sp, #0x14] - bl MonsterCanThrowItems - cmp r0, #0 - bne _02384BB8 - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption -_02384BB8: - mov r0, sl - bl MonsterHasEmbargoStatus - cmp r0, #0 - bne _02384BD8 - mov r0, sl - bl MonsterHasEmbargoStatus - cmp r0, #0 - beq _02384C48 -_02384BD8: - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption - b _02384C48 -_02384BEC: - ldrsh r1, [r8, #4] - mov r0, #0x38 - bl AddDungeonSubMenuOption - cmp r4, #0 - beq _02384C08 - mov r0, #0x38 - bl DisableDungeonSubMenuOption -_02384C08: - ldr r0, [sp, #0x20] - bl MonsterHasEmbargoStatus - cmp r0, #0 - bne _02384C28 - mov r0, r8 - bl ov29_02348D00 - cmp r0, #0 - beq _02384C30 -_02384C28: - mov r0, #0x38 - bl DisableDungeonSubMenuOption -_02384C30: - mov r0, r8 - bl IsItemUsableNow - cmp r0, #0 - bne _02384C48 - mov r0, #0x38 - bl DisableDungeonSubMenuOption -_02384C48: - ldrsh r1, [r8, #4] - mov r0, #0xc - bl AddDungeonSubMenuOption - bl ov29_022EB9A0 - bl ov29_022EBA84 - mov r2, #0 - ldr r1, _02385128 ; =ov29_0237C91C - ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - b _02384C9C -_02384C6C: - add r8, r1, r2, lsl #3 - ldr r3, [r4] - ldrh r8, [r8, #6] - add r3, r3, r2, lsl #3 - add r3, r3, #0x1100 - strh r8, [r3, #0x38] - mov r8, r2, lsl #3 - ldr r3, [r4] - add r2, r2, #1 - add r3, r3, r8 - add r3, r3, #0x1000 - str r2, [r3, #0x13c] -_02384C9C: - cmp r2, r0 - blt _02384C6C - ldr r3, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C -#ifdef JAPAN - mov r4, #0x1d40 -#else - ldr r4, _0238512C ; =0x000008E8 -#endif - ldr r1, [r3] - mvn r0, #0 - add r1, r1, r2, lsl #3 - add r1, r1, #0x1100 - strh r4, [r1, #0x38] - ldr r1, [r3] - mov r4, #0 - add r1, r1, r2, lsl #3 - add r1, r1, #0x1000 - str r0, [r1, #0x13c] - ldr r1, [r3] - add r1, r1, r2, lsl #3 - add r1, r1, #0x1100 - strh r4, [r1, #0x40] - ldr r1, [r3] - add r1, r1, r2, lsl #3 - add r1, r1, #0x1000 - str r0, [r1, #0x144] - ldr r0, [r3] - add r0, r0, #0x92 - add r0, r0, #0x1100 - bl ov29_0234E988 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r2, r4 - ldr r1, [r0] - add r0, r1, #0x138 - add r1, r1, #0x188 - add r0, r0, #0x1000 - add r1, r1, #0x1000 - bl ov31_0238513C - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r2, sp, #0x500 - ldr r1, [r0] - add r2, r2, #0x9c - add r0, r1, #0x188 - add r0, r0, #0x1000 - str r0, [sp, #0x5fc] - add r0, r1, #0x1000 - add r3, r1, #0x138 - ldrb r0, [r0, #0x1b2] - ldr r1, _02385130 ; =0x00000213 - add r3, r3, #0x1000 - cmp r0, #0 - ldrne r0, _02385134 ; =DUNGEON_WINDOW_PARAMS_13 - ldreq r0, _02385138 ; =DUNGEON_WINDOW_PARAMS_9 - bl CreateParentMenuFromStringIds - ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r8, #0x14 - ldr r1, [r4] - add r1, r1, #0x1000 - strb r0, [r1, #0x192] -_02384D78: - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x92] - bl IsParentMenuActive - cmp r0, #0 - bne _02384E24 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x92] - bl sub_0202ABB0 - cmp r0, #0 - blt _02384E04 - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - sub r2, r0, #1 - ldr r0, [r1] - add r0, r0, #0x1000 - str r2, [r0, #0x1a4] - ldr r0, [r1] - add r0, r0, #0x1000 - ldr r0, [r0, #0x1a4] - bl ov29_022EB804 - cmp r0, #0 - mov r4, #0 - beq _02384E30 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r2, _02385128 ; =ov29_0237C91C - ldr r1, [r0] - add r0, r7, #0x4a - add r1, r1, #0x1000 - ldr r1, [r1, #0x1a4] - mov r1, r1, lsl #3 - ldrh r1, [r2, r1] - bl ov29_022EBBA8 - b _02384E30 -_02384E04: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r4, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - ldrb r0, [r0, #0x1b2] - cmp r0, #0 - movne r4, #2 - b _02384E30 -_02384E24: - mov r0, r8 - bl AdvanceFrame - b _02384D78 -_02384E30: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x92 - add r0, r0, #0x1100 - bl ov29_0234E988 - ldr r0, _023848A8 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - cmp r4, #1 - add r0, r0, #0x1a000 -#ifdef JAPAN - strb r1, [r0, #0x1a3] -#else - strb r1, [r0, #0x247] -#endif - ldreq r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldreq r0, [r0] - addeq r0, r0, #0x1000 - ldreqb r0, [r0, #0x1b2] - cmpeq r0, #0 - beq _02383B08 - cmp r4, #2 - bne _02384E90 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #1 - b _023850D8 -_02384E90: - ldrh r0, [r7, #0x4a] - cmp r0, #0x38 - cmpne r0, #0x37 - cmpne r0, #0x3e - bne _02384EC4 - bl ov29_022EBB98 - sub r2, r0, #0x90 - mov r0, #0xb - mov r1, #0 - strb r2, [r7, #0x4e] - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_02384EC4: - cmp r0, #0x36 - bne _02384FA0 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x94] - cmp r0, r1 - beq _02384F00 - bl CloseTextBox2 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x194] -_02384F00: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x95] - cmp r0, r1 - beq _02384F34 - bl CloseTextBox2 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x195] -_02384F34: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x93 - add r0, r0, #0x1100 - bl ov31_02383768 - mov r0, #0x62 - bl AdvanceFrame - add r0, sp, #0x48 - mov r1, #2 - mov r2, #0 -#ifndef JAPAN - mov r3, #1 -#endif - bl ov31_023877EC - cmp r0, #0 - beq _02384F88 - ldr r2, [sp, #0x48] - mov r0, #0 - mov r1, r0 - strb r2, [r7, #0x54] - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_02384F88: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #1 - bl ov29_022EB398 - b _02383B08 -_02384FA0: - cmp r0, #0x12 - beq _02384FC0 - add r0, r0, #0xf3 - add r0, r0, #0xff00 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #1 - bhi _023850C8 -_02384FC0: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x94] - cmp r0, r1 - beq _02384FF4 - bl CloseTextBox2 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x194] -_02384FF4: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x95] - cmp r0, r1 - beq _02385028 - bl CloseTextBox2 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x195] -_02385028: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x93 - add r0, r0, #0x1100 - bl ov31_02383768 - mov r0, #0x62 - bl AdvanceFrame - mov r0, #0x62 - bl AdvanceFrame -#ifdef JAPAN - add r0, sp, #0x44 - mov r1, #3 - mov r2, #1 -#else - mov r2, #1 - add r0, sp, #0x44 - mov r1, #3 - mov r3, r2 -#endif - bl ov31_023877EC - cmp r0, #0 - beq _023850B0 - ldr r1, [sp, #0x44] - ldr r0, _023848A8 ; =DUNGEON_PTR - strb r1, [r7, #0x54] - ldr r2, [r0] - ldr r0, [sp, #0x44] - mov r1, #0 - add r0, r2, r0, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] - mov r2, #1 - bl TryPointCameraToMonster - mov r0, #0 - mov r2, #1 - mov r1, r0 -#ifdef JAPAN - strb r2, [r7, #0x238] -#else - strb r2, [r7, #0x23c] -#endif - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_023850B0: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #1 - bl ov29_022EB398 - b _02383B08 -_023850C8: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #0 -_023850D8: - ldr r0, _023848A8 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x1a000 - strb r1, [r0, #0x247 + OV31_023838E4_OFFSET] - bl HideTileGrid - bl ov31_023837C8 - mov r0, #0x14 - bl AdvanceFrame - ldr r0, [sp, #0x30] - cmp r0, #0 - beq _02385118 - ldr r1, _023848A0 ; =0x000008E5 - mov r0, #0 - mov r2, #1 - bl DisplayMessage -_02385118: - mov r0, r5 -_0238511C: - add sp, sp, #0x234 - add sp, sp, #0x400 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02385128: .word ov29_0237C91C -#ifndef JAPAN -_0238512C: .word 0x000008E8 -#endif -_02385130: .word 0x00000213 -_02385134: .word DUNGEON_WINDOW_PARAMS_13 -_02385138: .word DUNGEON_WINDOW_PARAMS_9 - arm_func_end ov31_023838E4 - - arm_func_start ov31_0238513C -ov31_0238513C: ; 0x0238513C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - bl ov29_022EBA84 - mov r4, #0 - mov r5, r0 - mov sb, #3 - mov sl, r4 - b _02385190 -_02385164: - mov r0, r4 - mov r1, r6 - bl ov29_022EB2C8 - mov r1, r4, lsl #3 - strh r0, [r8, r1] - mov r0, r4 - bl ov29_022EB804 - cmp r0, #0 - strneb sl, [r7, r4] - streqb sb, [r7, r4] - add r4, r4, #1 -_02385190: - cmp r4, r5 - blt _02385164 -#ifdef JAPAN - mov r1, r4, lsl #3 - mov r2, #0x1d40 -#else - ldr r2, _023851BC ; =0x000008E8 - mov r1, r4, lsl #3 -#endif - add r0, r4, #1 - strh r2, [r8, r1] - mov r1, #0 - strb r1, [r7, r4] - mov r0, r0, lsl #3 - strh r1, [r8, r0] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -#ifndef JAPAN - .align 2, 0 -_023851BC: .word 0x000008E8 -#endif - arm_func_end ov31_0238513C - - arm_func_start MovesMenu -MovesMenu: ; 0x023851C0 - stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0xc - ldr r1, _023853B8 ; =DUNGEON_PTR - ldrb r4, [r0, #4] - ldr r0, [r1] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r5, [r0, #0xa84] -#else - ldr r5, [r0, #0xb28] -#endif - str r5, [sp, #8] -_023851E4: - mov r6, #0 - ldr sb, _023853B8 ; =DUNGEON_PTR - mov r7, r6 - mov r8, r6 -_023851F4: - ldr r0, [sb] - add r0, r0, r8, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - bl ov29_02302388 - cmp r0, #0 - beq _0238521C - cmp r8, r4 - moveq r6, r7 - add r7, r7, #1 -_0238521C: - add r8, r8, #1 - cmp r8, #4 - blt _023851F4 - ldr r0, [sp, #8] - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - ldr r0, [sp, #8] - mov r2, #1 - mov r3, r2 - add r0, r0, #4 - mov r1, #0 - bl DrawTileGrid - mov r0, #1 - bl ov29_022EB398 - str r7, [sp] - mov r1, #0 - mov r3, r6 - add r0, sp, #8 - mov r2, #1 - str r1, [sp, #4] - bl HandleMovesMenu - cmp r0, #0 - bne _023853B0 - bl ov29_022F0B9C - cmp r0, #0x1d - bne _0238529C - bl GetLeaderAction - bl ov31_02385FE0 - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_0238529C: - bl ov29_022F0B9C - cmp r0, #0x1e - bne _023852CC - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - mov r1, #0 - bl ov31_023860A4 - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_023852CC: - bl ov29_022F0B9C - cmp r0, #0x33 - bne _023852FC - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - mov r1, #0 - bl ov31_023860A4 - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_023852FC: - bl ov29_022F0B9C - cmp r0, #0x1f - bne _02385328 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - bl ov31_0238619C - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_02385328: - bl ov29_022F0B9C - cmp r0, #0x20 - bne _02385354 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - bl ov31_02386204 - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_02385354: - bl ov29_022F0B9C - cmp r0, #0x21 - bne _02385380 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - mov r1, #1 - bl ov31_02386308 - mov r0, #1 - bl ov29_022EB398 -_02385380: - bl ov29_022F0B9C - cmp r0, #0 - beq _023851E4 - mov r0, r5 - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - mov r2, #1 - mov r3, r2 - add r0, r5, #4 - mov r1, #0 - bl DrawTileGrid -_023853B0: - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_023853B8: .word DUNGEON_PTR - arm_func_end MovesMenu - - arm_func_start HandleMovesMenuWrapper0 -HandleMovesMenuWrapper0: ; 0x023853BC - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr lr, [sp, #0x10] - mov ip, #0 - str lr, [sp] - str ip, [sp, #4] - bl HandleMovesMenu - add sp, sp, #8 - ldmia sp!, {r3, pc} - arm_func_end HandleMovesMenuWrapper0 - - arm_func_start HandleMovesMenuWrapper1 -HandleMovesMenuWrapper1: ; 0x023853E0 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr lr, [sp, #0x10] - mov ip, #1 - str lr, [sp] - str ip, [sp, #4] - bl HandleMovesMenu - add sp, sp, #8 - ldmia sp!, {r3, pc} - arm_func_end HandleMovesMenuWrapper1 - - arm_func_start HandleMovesMenu -HandleMovesMenu: ; 0x02385404 -#ifdef JAPAN -#define HANDLE_MOVES_MENU_OFFSET -0xA4 -#define HANDLE_MOVES_MENU_OFFSET_2 -4 -#else -#define HANDLE_MOVES_MENU_OFFSET 0 -#define HANDLE_MOVES_MENU_OFFSET_2 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x12c - str r1, [sp, #4] - str r0, [sp] - mov r0, #0x14 - mov r1, #8 - str r2, [sp, #8] - bl MemAlloc - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r2, #0 - str r0, [r1, #8] - str r2, [r0, #0x10] - mov r0, #0x62 - bl AdvanceFrame - ldr r0, [sp, #0x154] - cmp r0, #1 - bne _0238547C - ldr r0, _02385F74 ; =DUNGEON_WINDOW_PARAMS_14 - bl CreateDialogueBox - mov r1, #0 - str r0, [sp, #0x14] - bl sub_0202F474 - ldr r0, _02385F78 ; =0x00003FCD - bl StringFromId - mov r2, r0 - ldr r0, [sp, #0x14] - ldr r1, _02385F7C ; =0x00000404 - mov r3, #0 - bl ShowStringInDialogueBox - b _023854AC -_0238547C: - ldr r0, _02385F80 ; =DUNGEON_WINDOW_PARAMS_16 - bl CreateDialogueBox - mov r1, #0 - str r0, [sp, #0x14] - bl sub_0202F474 - ldr r0, _02385F84 ; =0x00003FCC - bl StringFromId - mov r2, r0 - ldr r0, [sp, #0x14] - ldr r1, _02385F7C ; =0x00000404 - mov r3, #0 - bl ShowStringInDialogueBox -_023854AC: - ldr r0, [sp] - ldr r6, [r0] - ldr sl, [r6, #0xb4] - bl GetLeader - ldr r7, [r0, #0xb4] - mov r0, r6 - bl sub_0203F9CC - mov r8, #0 - ldr sb, _02385F88 ; =DUNGEON_PTR - mov r4, r8 - add fp, sp, #0x2c -_023854D8: - ldr r0, [sb] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] - bl ov29_02302388 - cmp r0, #0 - beq _02385514 - ldr r0, [sb] - str r4, [fp, r8, lsl #2] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] - cmp r6, r0 - streq r8, [sp, #0x10] - add r8, r8, #1 -_02385514: - add r4, r4, #1 - cmp r4, #4 - blt _023854D8 - ldr r0, [sp, #0x154] - ldr r2, [sp, #0x10] - mov r1, r8 - bl sub_0204018C - str r0, [sp, #0x18] - bl sub_02041094 - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - str r0, [r1] - mov r0, #0x1e - bl AdvanceFrame -_02385548: - mov r4, #0 - str r4, [sp, #0xc] - mov sb, r4 - bl ov29_022EA62C - ldr fp, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 -_0238555C: - bl sub_020407EC - mov r8, r0 - cmp r8, #9 - addls pc, pc, r8, lsl #2 - b _02385680 -_02385570: ; jump table - b _02385680 ; case 0 - b _0238562C ; case 1 - b _02385678 ; case 2 - b _023855A0 ; case 3 - b _023855A0 ; case 4 - b _023855A8 ; case 5 - b _02385634 ; case 6 - b _0238566C ; case 7 - b _02385650 ; case 8 - b _02385598 ; case 9 -_02385598: - mov sb, #1 - b _02385680 -_023855A0: - mov sb, #1 - b _02385680 -_023855A8: - ldr r0, [sp, #0x18] - bl sub_02030A18 - mov r1, #0 - str r1, [fp] - add r1, sp, #0x2c - str r0, [sp, #0x10] - ldr sb, [r1, r0, lsl #2] - ldr r0, _02385F88 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, sb, lsl #2 - add r0, r0, #0x12000 - ldr r6, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] - ldr r0, [sp] - ldr sl, [r6, #0xb4] - str r6, [r0] - bl GetLeaderMonster - strb sb, [r0, #0x4e] - mov r0, r6 - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - mov r2, #1 - add r0, r6, #4 - mov r1, #0 - mov r3, r2 - bl DrawTileGrid - mov r0, #0 - bl ov29_022EB398 - mov r0, r6 - bl sub_0203F9CC - bl sub_02041178 - mov sb, #1 - b _02385680 -_0238562C: - mov r4, #1 - b _02385680 -_02385634: - ldrb r1, [r6, #0x24] - mov r0, #2 - str r0, [sp, #0xc] - strb r1, [r7, #0x4e] - ldr r0, [fp] - strb r0, [r7, #0x54] - b _02385680 -_02385650: - ldrb r1, [r6, #0x24] - mov r0, #3 - str r0, [sp, #0xc] - strb r1, [r7, #0x4e] - ldr r0, [fp] - strb r0, [r7, #0x54] - b _02385680 -_0238566C: - mov r0, #1 - str r0, [sp, #0xc] - b _02385680 -_02385678: - bl sub_02041094 - str r0, [fp] -_02385680: - cmp r8, #9 - addls pc, pc, r8, lsl #2 - b _023856D0 -_0238568C: ; jump table - b _023856D0 ; case 0 - b _023856D0 ; case 1 - b _023856D0 ; case 2 - b _023856B4 ; case 3 - b _023856B4 ; case 4 - b _023856C4 ; case 5 - b _023856D0 ; case 6 - b _023856D0 ; case 7 - b _023856D0 ; case 8 - b _023856B4 ; case 9 -_023856B4: - mov r0, r6 - bl sub_0203FD44 - str r0, [fp] - b _023856D0 -_023856C4: - mov r0, r6 - bl sub_0203F9CC - bl sub_02041178 -_023856D0: - mov r0, #0x1e - bl AdvanceFrame - cmp r8, #0 - beq _0238555C - cmp r4, #0 - bne _02385EFC - cmp sb, #0 - bne _02385548 - ldr r0, [sp, #0xc] - cmp r0, #1 - bne _02385738 - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldrb r1, [r6, #0x24] - ldr r2, [r0] - add r0, r7, #0x4a - mov r2, r2, lsl #0x10 - mov r2, r2, asr #0x10 - bl ov29_022EBC2C - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #8 - mov r1, #0x1b - bl ov29_022EA370 - mov r4, #0 - b _02385EFC -_02385738: - ldr r8, [r6, #0xb4] - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - add sb, r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2 - ldr fp, [r0] - bl ov29_022EBA70 - ldrb r0, [r8, #7] - cmp r0, #0 - beq _023857B0 - ldr r0, [sp, #8] - cmp r0, #0 - beq _02385770 - mov r0, #0x14 - mov r1, #0 - bl AddDungeonSubMenuOption -_02385770: - ldrb r0, [sb, fp, lsl #3] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _023857BC - ldrb r0, [sb, fp, lsl #3] - mov r1, #0 - tst r0, #8 - beq _023857A4 - mov r0, #0x33 - bl AddDungeonSubMenuOption - b _023857BC -_023857A4: - mov r0, #0x1e - bl AddDungeonSubMenuOption - b _023857BC -_023857B0: - mov r0, #0x1f - mov r1, #0 - bl AddDungeonSubMenuOption -_023857BC: - ldr r0, [sp, #4] - cmp r0, #0 - beq _023857E0 - mov r0, #0x20 - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0x21 - mov r1, #0 - bl AddDungeonSubMenuOption -_023857E0: - mov r0, #0x1d - mov r1, #0 - bl AddDungeonSubMenuOption - ldr r0, [sp, #4] - cmp r0, #0 - bne _02385804 - mov r0, #0x20 - bl DisableDungeonSubMenuOption - b _0238595C -_02385804: - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr fp, [r0] - add r0, r8, fp, lsl #3 - add r0, r0, #0x100 - ldrh r0, [r0, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] - mov sb, fp - bl IsNot2TurnsMoveOrSketch - cmp r0, #0 - moveq r0, #0 - beq _0238592C - add sb, sb, #1 - b _02385920 -_02385834: - add r0, r8, sb, lsl #3 - ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02385928 - add r0, r8, sb, lsl #3 - add r0, r0, #0x100 - ldrh r0, [r0, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] - bl IsNot2TurnsMoveOrSketch - cmp r0, #0 - beq _02385928 - add r0, r8, sb, lsl #3 - ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r0, #2 - bne _0238591C - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 - b _023858A4 -_02385888: - add r0, r8, r3, lsl #3 - ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r0, #2 - beq _023858AC - add r0, r3, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 -_023858A4: - cmp r3, #4 - blt _02385888 -_023858AC: - mov r0, fp, lsl #0x10 - mov r2, r0, asr #0x10 - b _0238590C -_023858B8: - add r0, r2, #1 - mov r0, r0, lsl #0x10 - mov r1, r0, asr #0x10 - add r0, r8, r2, lsl #3 - add sb, r0, #0x100 - b _023858F8 -_023858D0: - add fp, r8, r1, lsl #3 - add fp, fp, #0x100 - ldrh r0, [sb, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] - ldrh fp, [fp, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] - cmp r0, fp - moveq r0, #0 - beq _0238592C - add r0, r1, #1 - mov r0, r0, lsl #0x10 - mov r1, r0, asr #0x10 -_023858F8: - cmp r1, r3 - blt _023858D0 - add r0, r2, #1 - mov r0, r0, lsl #0x10 - mov r2, r0, asr #0x10 -_0238590C: - cmp r2, r3 - blt _023858B8 - mov r0, #1 - b _0238592C -_0238591C: - add sb, sb, #1 -_02385920: - cmp sb, #4 - blt _02385834 -_02385928: - mov r0, #0 -_0238592C: - cmp r0, #0 - bne _0238593C - mov r0, #0x20 - bl DisableDungeonSubMenuOption -_0238593C: - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r0, r8 - ldr r1, [r1] - bl ov31_023863F8 - cmp r0, #0 - bne _0238595C - mov r0, #0x21 - bl DisableDungeonSubMenuOption -_0238595C: - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r0, r8 - ldr r1, [r1] - bl ov31_023863F8 - cmp r0, #0 - bne _0238597C - mov r0, #0x21 - bl DisableDungeonSubMenuOption -_0238597C: - ldr r0, [sp, #8] - cmp r0, #0 - beq _023859C0 - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r8, #0 - ldr r1, [r0] - cmp r1, #4 - bge _023859B0 - mov r0, r6 - mov r2, #1 - bl CanAiUseMove - cmp r0, #0 - movne r8, #1 -_023859B0: - cmp r8, #0 -#ifdef EUROPE - bne _023859C0 - mov r0, #0x14 - bl DisableDungeonSubMenuOption -_023859C0: - bl ov29_022EB9A0 - mov r0, #0x14 - bl ov29_022EB8B0 - mvn r1, #0 - cmp r0, r1 - moveq r8, #0 - beq _023865E4 - bl ov29_022EB804 - mov r8, r0 -_023865E4: -#else - bne _023859C0 - mov r0, #0x14 - bl DisableDungeonSubMenuOption -_023859C0: - bl ov29_022EB9A0 -#endif - ldr r0, [sp, #0xc] - cmp r0, #3 - bne _02385A40 - mov r0, #0x20 - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385A08 - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 - b _02385EFC -_02385A08: - mov r0, #0x21 - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385EFC - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 - b _02385EFC -_02385A40: - cmp r0, #2 - bne _02385AF8 - ldrb r0, [sl, #7] - cmp r0, #0 - beq _02385AC0 - mov r0, #0x1e - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385A88 - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 -_02385A88: - mov r0, #0x33 - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385EFC - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 - b _02385EFC -_02385AC0: - mov r0, #0x1f - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385EFC - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 - b _02385EFC -_02385AF8: - mov r0, #0x62 - bl AdvanceFrame - add r1, sp, #0x20 - add r0, sp, #0xd4 - mov r2, #0 - str r1, [sp, #0x9c] - bl ov31_0238513C - bl ov29_022EBA84 - mov r1, #0 - add r3, sp, #0xd4 - b _02385B30 -_02385B24: - add r2, r3, r1, lsl #3 - str r1, [r2, #4] - add r1, r1, #1 -_02385B30: - cmp r1, r0 - blt _02385B24 -#ifdef JAPAN - ldr r0, _02385F8C ; =0x00001D34 - add sb, sp, #0xd4 - mov sl, r1, lsl #3 - strh r0, [sb, sl] - add r8, sb, r1, lsl #3 - mvn r0, #0 - mov r4, #0 - str r0, [r8, #4] - strh r4, [r8, #8] - sub r0, r4, #2 - str r0, [r8, #0xc] - ldrh r0, [r8, #8] - add r3, sp, #0x20 - ldr r2, _02387200 ; =0x0000087A - strh r0, [r8, #0x18] - ldr fp, [r8, #0xc] - add r0, r3, r1 - str fp, [r8, #0x1c] - ldrh sl, [sb, sl] - ldrb fp, [r0, #1] - mov sb, #0x14 - strh sl, [r8, #0x10] - strb fp, [r0, #3] - ldrb sl, [r3, r1] - ldr fp, [r8, #4] - ldr r3, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - str fp, [r8, #0x14] - ldrh fp, [r8, #-8] - strb sl, [r0, #2] - ldrb sl, [r0, #-1] - strh fp, [r8, #8] - ldr fp, [r8, #-4] - ldr r3, [r3] - strb sl, [r0, #1] - str fp, [r8, #0xc] - strh r2, [r8, #-8] - str sb, [r8, #-4] - cmp r3, #0 - strb r4, [r0, #-1] - movle r2, #3 - strleb r2, [r0, #-1] - add r2, r3, #1 - mov r2, r2, lsl #0x10 - mov r4, r2, asr #0x10 - mov r3, #0 - ldr sb, _02387204 ; =0x0000087B - add r8, sp, #0xd4 - mov r2, r1, lsl #3 - strh sb, [r8, r2] - add r1, r8, r1, lsl #3 - mov r2, #0x15 - str r2, [r1, #4] -#else -#ifdef EUROPE - ldr r0, _02385F8C ; =0x000008DC - add sl, sp, #0xd4 - mov fp, r1, lsl #3 - strh r0, [sl, fp] - mvn r0, #0 - add sb, sl, r1, lsl #3 - str r0, [sb, #4] - mov ip, #0 - add r2, r0, #0xa40 - strh ip, [sb, #8] - sub r0, ip, #2 - str r0, [sb, #0xc] - ldrh r0, [sb, #8] - add r3, sp, #0x20 - mov lr, #0x14 -#else - ldr r2, _02385F8C ; =0x000008DC - add sl, sp, #0xd4 - mov fp, r1, lsl #3 - mvn r0, #0 - strh r2, [sl, fp] - add sb, sl, r1, lsl #3 - str r0, [sb, #4] - mov r8, #0 - add r2, r0, #0xa40 - strh r8, [sb, #8] - sub r0, r8, #2 - str r0, [sb, #0xc] - ldrh r0, [sb, #8] - add r3, sp, #0x20 - mov ip, #0x14 -#endif - strh r0, [sb, #0x18] - ldr r4, [sb, #0xc] - add r0, r3, r1 - str r4, [sb, #0x1c] - ldrh r4, [sl, fp] - ldrb sl, [r0, #1] - ldr fp, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - strh r4, [sb, #0x10] - strb sl, [r0, #3] - ldrb r4, [r3, r1] - ldr sl, [sb, #4] - ldr r3, [fp] - str sl, [sb, #0x14] - ldrh sl, [sb, #-8] - strb r4, [r0, #2] - ldrb r4, [r0, #-1] - strh sl, [sb, #8] - cmp r3, #0 - strb r4, [r0, #1] - ldr r4, [sb, #-4] -#ifdef EUROPE - strb ip, [r0, #-1] - str r4, [sb, #0xc] - strh r2, [sb, #-8] - movle r2, #3 - strleb r2, [r0, #-1] - add r2, r3, #1 - mov r2, r2, lsl #0x10 - str lr, [sb, #-4] - mov r4, r2, asr #0x10 - add sb, sp, #0xd4 - mov r2, r1, lsl #3 - mov r3, #0xa40 - strh r3, [sb, r2] - mov r3, #0 - add r1, sb, r1, lsl #3 - mov r2, #0x15 - str r2, [r1, #4] -#else - strb r8, [r0, #-1] - str r4, [sb, #0xc] - strh r2, [sb, #-8] - movle r2, #3 - str ip, [sb, #-4] - add r8, sp, #0xd4 - strleb r2, [r0, #-1] - mov sb, r1, lsl #3 - add r2, r8, r1, lsl #3 - add r1, r3, #1 - mov r1, r1, lsl #0x10 - mov r4, r1, asr #0x10 - mov r1, #0xa40 - strh r1, [r8, sb] - mov r1, #0x15 - mov r3, #0 - str r1, [r2, #4] -#endif -#endif - strb r3, [r0] - ldr sl, [r6, #0xb4] - mov r1, r3 - mov r2, #1 - b _02385C58 -_02385C1C: -#ifdef EUROPE - add sb, sl, r4, lsl #3 - ldrb sb, [sb, #0x124] - tst sb, #1 - movne sb, r2 - moveq sb, r1 - tst sb, #0xff - beq _02385C4C - add sb, sl, r4, lsl #3 - ldrb sb, [sb, #0x124] - tst sb, #2 -#else - add r8, sl, r4, lsl #3 - ldrb r8, [r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r8, #1 - movne r8, r2 - moveq r8, r1 - tst r8, #0xff - beq _02385C4C - add r8, sl, r4, lsl #3 - ldrb r8, [r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r8, #2 -#endif - moveq r3, #1 - beq _02385C60 -_02385C4C: - add r4, r4, #1 - mov r4, r4, lsl #0x10 - mov r4, r4, asr #0x10 -_02385C58: - cmp r4, #4 - blt _02385C1C -_02385C60: - cmp r3, #0 - moveq r1, #3 - streqb r1, [r0] - ldr r0, _02385F90 ; =DUNGEON_WINDOW_PARAMS_15 - ldr r1, _02385F94 ; =0x80000213 - add r2, sp, #0x3c - add r3, sp, #0xd4 - bl CreateParentMenuFromStringIds - strb r0, [sp, #0x1c] - mov r0, #0x1b - bl AdvanceFrame -#ifdef EUROPE - add r4, sp, #0xd4 - mov fp, #0x1b - ldr sb, _02385F98 ; =0x0000099B - b _02385D0C -_02385CA0: - mov r0, fp - bl AdvanceFrame - mov r0, #0 -#else - add r8, sp, #0xd4 - mov sb, #0x1b - mov fp, #0 - ldr r4, _02385F98 ; =0x0000099B - b _02385D0C -_02385CA0: - mov r0, sb - bl AdvanceFrame - mov r0, fp -#endif - add r1, sp, #0x1e - bl GetPressedButtons - ldrh r0, [sp, #0x1e] - tst r0, #0x400 - beq _02385D0C - mov r5, #0 - b _02385CEC -_02385CC8: - mov r1, r5, lsl #3 -#ifdef EUROPE - add r0, r4, r5, lsl #3 - ldr r0, [r0, #4] - cmp r0, #0 - blt _02385CF4 - cmp r8, #0 - beq _0238690C - ldrh r0, [r4, r1] - cmp r0, sb - beq _02385CF4 -_0238690C: -#else - add r0, r8, r5, lsl #3 - ldr r0, [r0, #4] - cmp r0, #0 - blt _02385CF4 - ldrh r0, [r8, r1] - cmp r0, r4 - beq _02385CF4 -#endif - add r5, r5, #1 -_02385CEC: - cmp r5, #0xa - blt _02385CC8 -_02385CF4: -#ifdef EUROPE - add r0, r4, r5, lsl #3 -#else - add r0, r8, r5, lsl #3 -#endif - ldr r0, [r0, #4] - cmp r0, #0 - blt _02385D0C - cmp r5, #0xa - blt _02385D1C -_02385D0C: - ldrsb r0, [sp, #0x1c] - bl IsParentMenuActive - cmp r0, #0 - bne _02385CA0 -_02385D1C: - ldrh r0, [sp, #0x1e] - tst r0, #0x400 - bne _02385D34 - ldrsb r0, [sp, #0x1c] - bl sub_0202ABB0 - mov r5, r0 -_02385D34: - ldrsb r0, [sp, #0x1c] - bl sub_0202AB80 - cmp r0, #0 - ble _02385D78 - mvn r0, #0 - cmp r5, r0 - bne _02385D78 - ldrsb r0, [sp, #0x1c] - bl sub_0202AB80 - add r1, sp, #0xd4 - mov r0, r0, lsl #3 - ldrh r1, [r1, r0] - ldr r0, _02385F8C ; =0x000008DC - cmp r1, r0 - bne _02385D78 - mov r0, #0 - bl PlaySeVolumeWrapper -_02385D78: - add r0, sp, #0x1c - bl ov29_0234E988 - mov r0, #0x1b - bl AdvanceFrame - cmp r5, #0 - blt _02385ED8 - add r0, sp, #0xd4 - mov r1, r5, lsl #3 - ldrh r1, [r0, r1] - ldr r0, _02385F9C ; =0x000009A8 - cmp r1, r0 - bgt _02385DC8 - sub r0, r0, #3 - subs r0, r1, r0 - addpl pc, pc, r0, lsl #2 - b _02385DE4 -_02385DB8: ; jump table - b _02385DD4 ; case 0 - b _02385DD4 ; case 1 - b _02385DD4 ; case 2 - b _02385DD4 ; case 3 -_02385DC8: - ldr r0, _02385FA0 ; =0x000009BA - cmp r1, r0 - bne _02385DE4 -_02385DD4: - ldr r0, _02385FA4 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - b _02385DEC -_02385DE4: - mov r0, #0 - bl PlaySeVolumeWrapper -_02385DEC: - cmp r5, #0x14 - bne _02385E4C - mov r0, r6 - bl sub_0203F9CC - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_020416BC - ldr r2, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r1, r0, lsl #0x10 - str r0, [r2] - mov r0, r1, asr #0x10 - bl sub_020410A4 - mov r0, r6 - bl sub_0203FD44 - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - str r0, [r1] - ldr r0, [sp, #0x18] - bl sub_020307EC - bl sub_02041178 - mov r0, #0x1b - bl AdvanceFrame - b _02385548 -_02385E4C: - cmp r5, #0x15 - bne _02385EAC - mov r0, r6 - bl sub_0203F9CC - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_020416DC - ldr r2, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r1, r0, lsl #0x10 - str r0, [r2] - mov r0, r1, asr #0x10 - bl sub_020410A4 - mov r0, r6 - bl sub_0203FD44 - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - str r0, [r1] - ldr r0, [sp, #0x18] - bl sub_020307EC - bl sub_02041178 - mov r0, #0x1b - bl AdvanceFrame - b _02385548 -_02385EAC: - mov r0, r5 - bl ov29_022EB804 - cmp r0, #0 - beq _02385EF0 - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - b _02385EF0 -_02385ED8: - ldr r0, [sp, #0x18] - bl sub_020307EC - bl sub_02041178 - mov r0, #0x1b - bl AdvanceFrame - b _02385548 -_02385EF0: - mov r0, #0x1b - bl AdvanceFrame - mov r4, #0 -_02385EFC: - ldr r0, [sp, #0x18] - bl CloseAdvancedTextBox2 - ldr r0, [sp, #0x14] - bl sub_0202F334 - ldr r0, [sp, #0x14] - bl CloseDialogueBox - mov r0, #8 - mov r1, #0x1e - bl ov29_022EA370 - bl HideTileGrid - mov r0, #0x1b - bl AdvanceFrame - bl sub_020407C0 - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0, #8] - cmp r0, #0 - beq _02385F50 - bl MemFree - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r1, #0 - str r1, [r0, #8] -_02385F50: - bl GetLeaderMonster - ldr r1, [sp, #0x10] - add r2, sp, #0x2c - ldr r1, [r2, r1, lsl #2] - strb r1, [r0, #0x4e] - mov r0, r4 - add sp, sp, #0x12c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#if defined(EUROPE) -#define HANDLE_MOVES_MENU_DATA_OFFSET 2 -#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0 -#elif defined(JAPAN) -#define HANDLE_MOVES_MENU_DATA_OFFSET 0xA03 -#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0x19D0 -#else -#define HANDLE_MOVES_MENU_DATA_OFFSET 0 -#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0 -#endif -_02385F70: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 -_02385F74: .word DUNGEON_WINDOW_PARAMS_14 -_02385F78: .word 0x00003FCD + HANDLE_MOVES_MENU_DATA_OFFSET -_02385F7C: .word 0x00000404 -_02385F80: .word DUNGEON_WINDOW_PARAMS_16 -_02385F84: .word 0x00003FCC + HANDLE_MOVES_MENU_DATA_OFFSET -_02385F88: .word DUNGEON_PTR -#ifdef JAPAN -_02385F8C: .word 0x00001D34 -_02387200: .word 0x0000087A -_02387204: .word 0x0000087B -#else -_02385F8C: .word 0x000008DC -#endif -_02385F90: .word DUNGEON_WINDOW_PARAMS_15 -_02385F94: .word 0x80000213 -_02385F98: .word 0x0000099B + HANDLE_MOVES_MENU_DATA_OFFSET_2 -_02385F9C: .word 0x000009A8 + HANDLE_MOVES_MENU_DATA_OFFSET_2 -_02385FA0: .word 0x000009BA + HANDLE_MOVES_MENU_DATA_OFFSET_2 -_02385FA4: .word 0x00003F07 - arm_func_end HandleMovesMenu - - arm_func_start ov31_02385FA8 -ov31_02385FA8: ; 0x02385FA8 - stmdb sp!, {r3, r4, r5, lr} - ldr r3, _02385FD8 ; =ov29_0237C91C - mov r1, r1, lsl #3 - ldrh r1, [r3, r1] - mov r5, r0 - mov r4, r2 - bl SetMonsterActionFields - ldr r0, _02385FDC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - strb r4, [r5, #4] - ldr r0, [r0] - strb r0, [r5, #0xa] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02385FD8: .word ov29_0237C91C -_02385FDC: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 - arm_func_end ov31_02385FA8 - - arm_func_start ov31_02385FE0 -ov31_02385FE0: ; 0x02385FE0 -#ifdef JAPAN -#define OV31_02385FE0_OFFSET -4 -#else -#define OV31_02385FE0_OFFSET 0 -#endif - stmdb sp!, {r3, lr} - ldr r1, _0238604C ; =DUNGEON_PTR - ldrb r3, [r0, #4] - ldr r1, [r1] - ldrb r2, [r0, #0xa] - add r1, r1, r3, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r1, [r1, #0xa84] -#else - ldr r1, [r1, #0xb28] -#endif - mov r2, r2, lsl #3 - ldr ip, [r1, #0xb4] - add r1, ip, #0x26 + OV31_02385FE0_OFFSET - add r3, r1, #0x100 - ldrh r1, [r3, r2] - orr r1, r1, #2 - strh r1, [r3, r2] - ldrb r1, [r0, #0xa] - cmp r1, #4 - bhs _02386038 - add r0, ip, #0x124 + OV31_02385FE0_OFFSET - mov r2, #4 - bl ov31_02386050 - ldmia sp!, {r3, pc} -_02386038: - add r0, ip, #0x144 + OV31_02385FE0_OFFSET - mov r1, #0 - mov r2, #1 - bl ov31_02386050 - ldmia sp!, {r3, pc} - .align 2, 0 -_0238604C: .word DUNGEON_PTR - arm_func_end ov31_02385FE0 - - arm_func_start ov31_02386050 -ov31_02386050: ; 0x02386050 - stmdb sp!, {r3, r4, r5, lr} - mov r3, r1 - mov r1, r2 - mov r2, r3 - mov r3, #0 - bl sub_020417A8 - mov r5, r0 - mov r4, #0x62 -_02386070: - bl sub_02041A18 - cmp r0, #0 - beq _0238608C - bl sub_02041A00 - mov r0, r5 - bl CloseScrollBox - b _02386098 -_0238608C: - mov r0, r4 - bl AdvanceFrame - b _02386070 -_02386098: - mov r0, #0x62 - bl AdvanceFrame - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov31_02386050 - - arm_func_start ov31_023860A4 -ov31_023860A4: ; 0x023860A4 -#ifdef JAPAN -#define OV31_023860A4_OFFSET -4 -#else -#define OV31_023860A4_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r2, _02386190 ; =DUNGEON_PTR - ldrb r3, [r0, #4] - ldr r4, [r2] - ldrb r2, [r0, #0xa] - add r0, r4, r3, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r4, [r0, #0xa84] -#else - ldr r4, [r0, #0xb28] -#endif - mov r8, r1 - ldr r7, [r4, #0xb4] - mov r6, #0 - add r1, r7, #0x124 + OV31_023860A4_OFFSET - ldrb r0, [r1, r2, lsl #3] - mov ip, #0 - add r5, r1, r2, lsl #3 - tst r0, #8 - movne r6, #1 - mov r2, ip - mov r3, #1 -_023860F0: - add r0, r7, ip, lsl #3 - ldrb r0, [r0, #0x124 + OV31_023860A4_OFFSET] - tst r0, #1 - movne r0, r3 - moveq r0, r2 - tst r0, #0xff - addne r1, r7, ip, lsl #3 - ldrneb r0, [r1, #0x124 + OV31_023860A4_OFFSET] - add ip, ip, #1 - bicne r0, r0, #8 - strneb r0, [r1, #0x124 + OV31_023860A4_OFFSET] - cmp ip, #4 - blt _023860F0 - bl ov29_0234B034 - ldrh r1, [r5, #4] - cmp r6, #0 - str r1, [r0, #0x10] - ldreqb r0, [r5] - orreq r0, r0, #8 - streqb r0, [r5] - add r0, r7, #0x124 + OV31_023860A4_OFFSET - bl AllManip1 - ldrh r0, [r5, #2] - cmp r8, #0 - orr r0, r0, #2 - strh r0, [r5, #2] - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - cmp r6, #0 - bne _02386174 - ldr r1, _02386194 ; =0x000008D8 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - b _02386180 -_02386174: - ldr r1, _02386198 ; =0x000008D9 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser -_02386180: - mov r0, #0x78 - mov r1, #0x1f - bl ov29_022EA370 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02386190: .word DUNGEON_PTR -#ifdef JAPAN -_02386194: .word 0x00001D30 -_02386198: .word 0x00001D31 -#else -_02386194: .word 0x000008D8 -_02386198: .word 0x000008D9 -#endif - arm_func_end ov31_023860A4 - - arm_func_start ov31_0238619C -ov31_0238619C: ; 0x0238619C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r1, _02386200 ; =DUNGEON_PTR - ldrb r2, [r0, #4] - ldr r1, [r1] - ldrb r4, [r0, #0xa] - add r0, r1, r2, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] - ldr r7, [r0, #0xb4] - add r5, r7, #0x120 -#else - ldr r0, [r0, #0xb28] - ldr r7, [r0, #0xb4] - add r5, r7, #0x124 -#endif - add r6, r5, r4, lsl #3 - bl ov29_0234B034 - mov r1, #0 - mov r2, r6 - mov r3, r1 - bl FormatMoveStringMore - ldrb r1, [r5, r4, lsl #3] - mov r0, r5 - eor r1, r1, #4 - strb r1, [r5, r4, lsl #3] - bl AllManip1 - ldrh r0, [r6, #2] - orr r0, r0, #2 - strh r0, [r6, #2] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02386200: .word DUNGEON_PTR - arm_func_end ov31_0238619C - - arm_func_start ov31_02386204 -ov31_02386204: ; 0x02386204 -#ifdef JAPAN -#define OV31_02386204_OFFSET -4 -#else -#define OV31_02386204_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #0xa0 - ldr r1, _02386304 ; =DUNGEON_PTR - ldrb r2, [r0, #4] - ldr r1, [r1] - ldrb r5, [r0, #0xa] - add r0, r1, r2, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r1, [r0, #0xa84] -#else - ldr r1, [r0, #0xb28] -#endif - add r0, sp, #0 - ldr r4, [r1, #0xb4] - mov r2, #0 - add r1, r4, #0x124 + OV31_02386204_OFFSET - add r1, r1, r5, lsl #3 - bl FormatMoveString - add r0, r4, #0x26 + OV31_02386204_OFFSET - add r2, r0, #0x100 - mov r1, r5, lsl #3 - ldrh r0, [r2, r1] - mov r3, #0 - orr r0, r0, #2 - strh r0, [r2, r1] - mov r1, r3 - mov r2, #1 - b _023862A4 -_02386268: - add r5, r5, #1 - cmp r5, #4 - bge _023862AC - add r0, r4, r5, lsl #3 - ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] - tst r0, #1 - movne r0, r2 - moveq r0, r1 - tst r0, #0xff - beq _023862AC - add r0, r4, r5, lsl #3 - ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] - tst r0, #2 - beq _023862AC - add r3, r3, #1 -_023862A4: - cmp r3, #4 - blt _02386268 -_023862AC: - add r0, r4, r5, lsl #3 - ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - moveq r5, #4 - cmp r5, #4 - bge _023862F4 - add ip, r4, #0x124 + OV31_02386204_OFFSET - ldrb r2, [ip, r5, lsl #3] - add r0, sp, #0x50 - add r1, ip, r5, lsl #3 - orr r2, r2, #2 - bic r3, r2, #4 - mov r2, #0 - strb r3, [ip, r5, lsl #3] - bl FormatMoveString -_023862F4: - add r0, r4, #0x124 + OV31_02386204_OFFSET - bl AllManip1 - add sp, sp, #0xa0 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02386304: .word DUNGEON_PTR - arm_func_end ov31_02386204 - - arm_func_start ov31_02386308 -ov31_02386308: ; 0x02386308 -#ifdef JAPAN -#define OV31_02386308_OFFSET -4 -#else -#define OV31_02386308_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r2, _023863EC ; =DUNGEON_PTR - ldrb r3, [r0, #4] - ldr r2, [r2] - ldrb r7, [r0, #0xa] - add r0, r2, r3, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r4, [r0, #0xa84] -#else - ldr r4, [r0, #0xb28] -#endif - mov r8, r1 - ldr r6, [r4, #0xb4] - mov r5, #0 - bl ov29_0234B034 - add r1, r6, r7, lsl #3 - add r1, r1, #0x100 - ldrh r2, [r1, #0x28 + OV31_02386308_OFFSET] - mov r3, r7, lsl #3 - add r1, r6, #0x26 + OV31_02386308_OFFSET - str r2, [r0, #0x10] - add r2, r1, #0x100 - ldrh r1, [r2, r3] - add r7, r7, #1 - mov r0, r5 - orr r1, r1, #2 - strh r1, [r2, r3] - add ip, r6, #0x124 + OV31_02386308_OFFSET - mov r1, #1 - b _023863A0 -_02386374: - cmp r7, #4 - bge _023863A8 - ldrb r2, [ip, r7, lsl #3] - mov r3, r7, lsl #3 - tst r2, #2 - beq _023863A8 - bic r2, r2, #2 - mov r5, r1 - strb r2, [ip, r3] - add r7, r7, #1 - add r0, r0, #1 -_023863A0: - cmp r0, #4 - blt _02386374 -_023863A8: - add r0, r6, #0x124 + OV31_02386308_OFFSET - bl AllManip1 - cmp r8, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - cmp r5, #0 - beq _023863D0 - ldr r1, _023863F0 ; =0x000008DA - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - b _023863DC -_023863D0: - ldr r1, _023863F4 ; =0x000008DB - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser -_023863DC: - mov r0, #0x78 - mov r1, #0x1f - bl ov29_022EA370 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_023863EC: .word DUNGEON_PTR -#ifdef JAPAN -_023863F0: .word 0x00001D32 -_023863F4: .word 0x00001D33 -#else -_023863F0: .word 0x000008DA -_023863F4: .word 0x000008DB -#endif - arm_func_end ov31_02386308 - - arm_func_start ov31_023863F8 -ov31_023863F8: ; 0x023863F8 - stmdb sp!, {r3, lr} - mov lr, #0 - mov ip, lr - add r1, r1, #1 - mov r2, #1 - b _02386434 -_02386410: - cmp r1, #4 - bge _0238643C - add r3, r0, r1, lsl #3 -#ifdef JAPAN - ldrb r3, [r3, #0x120] -#else - ldrb r3, [r3, #0x124] -#endif - tst r3, #2 - beq _0238643C - mov lr, r2 - add r1, r1, #1 - add ip, ip, #1 -_02386434: - cmp ip, #4 - blt _02386410 -_0238643C: - cmp lr, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end ov31_023863F8 - - arm_func_start ov31_02386450 -ov31_02386450: ; 0x02386450 - stmdb sp!, {r3, lr} - ldr r0, _02386478 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0, #4] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _02386478 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r1, #0 - str r1, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_02386478: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 - arm_func_end ov31_02386450 - - arm_func_start ov31_0238647C -ov31_0238647C: ; 0x0238647C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x114 - mov r6, r0 - mov r5, r1 - str r2, [sp, #4] - mov r0, #0x284 - mov r1, #8 - str r3, [sp, #8] - mvn r4, #1 - bl MemAlloc - ldr r1, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r2, #0 - str r0, [r1, #4] - str r2, [r1] -_023864B4: - mov r0, #6 - mov r1, #0 - bl ov29_022EA428 - ldr r0, _02386B10 ; =ov29_0235352C - ldr r0, [r0] - ldr r0, [r0, #0x24] - bl sub_0200B3D4 - mvn sb, #1 - ldr r7, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - add r8, sb, #1 - add fp, sp, #0xbc -_023864E0: - cmp r4, sb - bne _02386578 - ldr r3, [r6, #0xb4] - add r0, sp, #0x14 - ldrsh r2, [r3, #2] - ldrb r3, [r3, #0x48] - mov r1, #2 - bl sub_02053CA0 - mov r0, r6 - bl sub_0203F9CC - mov r1, #0 - b _0238652C -_02386510: - add r0, r5, r1, lsl #3 - ldrh r0, [r0, #2] - tst r0, #4 - bne _02386534 - add r0, r1, #1 - mov r0, r0, lsl #0x10 - mov r1, r0, asr #0x10 -_0238652C: - cmp r1, #8 - blt _02386510 -_02386534: - add r0, r5, r1, lsl #3 - ldrh r0, [r0, #4] - bl sub_0203FD14 - ldr r0, [sp, #8] - mov r1, #0 - cmp r0, #0 - add r3, sp, #0x14 - beq _02386568 - mov r0, #2 - mov r2, r1 - bl sub_0204019C - mov r4, r0 - b _02386578 -_02386568: - mov r0, #3 - mov r2, r1 - bl sub_0204019C - mov r4, r0 -_02386578: - mov r0, #0x1e - bl AdvanceFrame - bl sub_020407EC - mov sl, r0 - bl sub_02041094 - cmp sl, #2 - str r0, [r7] - moveq sl, #0 - beq _023865B4 - cmp sl, #1 - moveq sl, #1 - beq _023865B4 - cmp sl, #7 - bne _02386578 - mov sl, #2 -_023865B4: - mov r0, #0x1e - bl AdvanceFrame - cmp sl, #1 - ldreq r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mvneq r1, #0 - streq r1, [r0] - beq _02386924 - cmp sl, #2 - bne _02386694 - mov r0, r4 - bl SetAdvancedTextBoxState5 - mov r0, #0x1e - bl AdvanceFrame - mov r0, r4 - bl CloseAdvancedTextBox - mov r0, #0x1b - mov r4, sb - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - ldr r0, [r7] - cmp r0, #4 - bge _02386664 - ldr r1, [r7] - mov r0, r5 - mov r2, #4 - bl ov31_02386050 - b _02386674 -_02386664: - add r0, r5, #0x20 - mov r1, #0 - mov r2, #1 - bl ov31_02386050 -_02386674: - bl sub_020407C0 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #2 - mov r1, #0x1b - bl ov29_022EA370 - b _023864E0 -_02386694: - bl ov29_022EBA70 - mov r0, #0x22 - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0x21 - mov r1, #0 - bl AddDungeonSubMenuOption - ldr r0, [r7] - mov r3, #0 - add r1, r0, #1 - mov r2, r3 - b _023866E4 -_023866C4: - cmp r1, #8 - bge _023866EC - ldrb r0, [r5, r1, lsl #3] - tst r0, #2 - beq _023866EC - mov r3, #1 - add r1, r1, #1 - add r2, r2, #1 -_023866E4: - cmp r2, #8 - blt _023866C4 -_023866EC: - cmp r3, #0 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - bne _02386708 - mov r0, #0x21 - bl DisableDungeonSubMenuOption -_02386708: - mov r0, #0x1d - mov r1, #0 - bl AddDungeonSubMenuOption - add r0, sp, #0x18 - str r0, [sp, #0x84] - mov r0, fp - add r1, sp, #0x18 - mov r2, #0 - bl ov31_0238513C - bl ov29_022EBA84 - mov r2, #0 - b _0238674C -_02386738: - add r1, fp, r2, lsl #3 - str r2, [r1, #4] - add r1, r2, #1 - mov r1, r1, lsl #0x10 - mov r2, r1, asr #0x10 -_0238674C: - cmp r2, r0 - blt _02386738 - ldr r0, _02386B14 ; =0x000008DC - mov r1, r2, lsl #3 - strh r0, [fp, r1] - add r0, fp, r2, lsl #3 - str r8, [r0, #4] - add r0, r2, #1 - mov r0, r0, lsl #0x10 - mov r2, r0, asr #0x10 - mov r1, r2, lsl #3 - mov r0, #0 - strh r0, [fp, r1] - add r0, fp, r2, lsl #3 - str r8, [r0, #4] - ldr r0, _02386B18 ; =DUNGEON_WINDOW_PARAMS_15 - ldr r1, _02386B1C ; =0x00000213 - add r2, sp, #0x24 - mov r3, fp - bl CreateParentMenuFromStringIds - str r0, [sp, #0x10] -_023867A0: - mov r0, #0x1b - bl AdvanceFrame - ldr r0, [sp, #0x10] - bl IsParentMenuActive - cmp r0, #0 - bne _023867A0 - ldr r0, [sp, #0x10] - bl sub_0202ABB0 - movs sl, r0 - movmi r0, #1 - strmi r0, [sp, #0xc] - movpl r0, #0 - strpl r0, [sp, #0xc] - mov r0, #0x1b - bl AdvanceFrame - ldr r0, [sp, #0x10] - bl CloseParentMenu - ldr r0, [sp, #0xc] - cmp r0, #1 - bne _023867F8 - bl sub_020416FC - b _023864E0 -_023867F8: - mov r0, #6 - mov r1, #0 - bl ov29_022EA428 - mov r0, r4 - bl SetAdvancedTextBoxState5 -_0238680C: - mov r0, #0x1b - bl AdvanceFrame - mov r0, r4 - bl IsAdvancedTextBoxActive - cmp r0, #0 - bne _0238680C - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, r4 - bl CloseAdvancedTextBox - mov r4, sb - bl sub_020407C0 - cmp sl, #1 - bne _023868E8 - ldr r0, [r7] - mov r1, #0 - add r2, r0, #1 - b _023868C0 -_0238689C: - cmp r2, #8 - bge _023868C8 - ldrb r0, [r5, r2, lsl #3] - tst r0, #2 - beq _023868C8 - bic r0, r0, #2 - strb r0, [r5, r2, lsl #3] - add r2, r2, #1 - add r1, r1, #1 -_023868C0: - cmp r1, #8 - blt _0238689C -_023868C8: - mov r0, r5 - bl AllManip2 - ldr r0, [r6, #0xb4] - mov r1, r5 -#ifdef JAPAN - add r0, r0, #0x120 -#else - add r0, r0, #0x124 -#endif - mov r2, #0x22 - bl memcpy - b _023864E0 -_023868E8: - cmp sl, #2 - bne _02386924 - ldr r0, [r7] - cmp r0, #4 - bge _02386910 - ldr r1, [r7] - mov r0, r5 - mov r2, #4 - bl ov31_02386050 - b _023864E0 -_02386910: - add r0, r5, #0x20 - mov r1, #0 - mov r2, #1 - bl ov31_02386050 - b _023864E0 -_02386924: - mvn r0, #1 - cmp r4, r0 - beq _02386950 - mov r0, r4 - bl SetAdvancedTextBoxState5 - mov r0, #0x1b - bl AdvanceFrame - mov r0, r4 - bl CloseAdvancedTextBox - mvn r4, #1 - bl sub_020407C0 -_02386950: - ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r1, [r0] - cmp r1, #0 - blt _02386AE8 - ldr r0, [sp, #4] - cmp r0, #0 - beq _02386A04 - mov r0, r1, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02041154 - mov r1, r0 - mov r0, #0 - bl ov29_0234B084 - ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - cmp r0, #4 - bge _023869D8 - bl sub_02041364 - cmp r0, #0 - mov r0, #0 - mov r2, #1 - beq _023869C0 - ldr r1, _02386B20 ; =0x000008D6 - mov r3, r0 - str r2, [sp] - bl YesNoMenu - mov r7, r0 - b _023869F4 -_023869C0: - ldr r1, _02386B24 ; =0x000008D7 - mov r3, r0 - str r2, [sp] - bl YesNoMenu - mov r7, r0 - b _023869F4 -_023869D8: - mov r0, #0 - mov r2, #1 - ldr r1, _02386B24 ; =0x000008D7 - mov r3, r0 - str r2, [sp] - bl YesNoMenu - mov r7, r0 -_023869F4: - mov r0, #1 - mov r1, #0 - bl ov29_0233A0E8 - b _02386A08 -_02386A04: - mov r7, #1 -_02386A08: - cmp r7, #1 - bne _023864B4 - ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - cmp r0, #4 - movge r1, #0 - strgeb r1, [r5, r0, lsl #3] - bge _02386AE8 - bl sub_02041484 - bl sub_0203FD38 - mov r1, #0 - mov r2, r1 - mov r3, #1 - b _02386A80 -_02386A40: - add r8, r0, r1, lsl #3 - add r7, r5, r1, lsl #3 - mov r6, #4 -_02386A4C: - ldrh r4, [r8], #2 - subs r6, r6, #1 - strh r4, [r7], #2 - bne _02386A4C - ldrb r4, [r5, r1, lsl #3] - tst r4, #1 - movne r4, r3 - moveq r4, r2 - tst r4, #0xff - beq _02386A88 - add r1, r1, #1 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 -_02386A80: - cmp r1, #4 - blt _02386A40 -_02386A88: - mov r6, #4 -_02386A8C: - add r4, r5, r6, lsl #3 - add r3, r5, r1, lsl #3 - mov r2, #4 -_02386A98: - ldrh r0, [r4], #2 - subs r2, r2, #1 - strh r0, [r3], #2 - bne _02386A98 - add r0, r6, #1 - mov r0, r0, lsl #0x10 - add r1, r1, #1 - mov r6, r0, asr #0x10 - mov r0, r1, lsl #0x10 - cmp r6, #8 - mov r1, r0, asr #0x10 - blt _02386A8C - mov r2, #0 - b _02386AE0 -_02386AD0: - add r0, r1, #1 - mov r0, r0, lsl #0x10 - strb r2, [r5, r1, lsl #3] - mov r1, r0, asr #0x10 -_02386AE0: - cmp r1, #8 - blt _02386AD0 -_02386AE8: - bl ov31_02386450 - ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - cmp r0, #0 - movge r0, #1 - movlt r0, #0 - and r0, r0, #0xff - add sp, sp, #0x114 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define OV31_0238647C_OFFSET 0x1458 -#else -#define OV31_0238647C_OFFSET 0 -#endif -_02386B0C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 -_02386B10: .word ov29_0235352C -_02386B14: .word 0x000008DC + OV31_0238647C_OFFSET -_02386B18: .word DUNGEON_WINDOW_PARAMS_15 -_02386B1C: .word 0x00000213 -_02386B20: .word 0x000008D6 + OV31_0238647C_OFFSET -_02386B24: .word 0x000008D7 + OV31_0238647C_OFFSET - arm_func_end ov31_0238647C - - arm_func_start ov31_02386B28 -ov31_02386B28: ; 0x02386B28 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #0xa4 - ldr r0, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - ldr r1, [r0, #0x64] - ldrsh r0, [r1, #4] - ldrsh r1, [r1, #6] - bl GetTile - mov r4, r0 - ldr r0, _02386C0C ; =0x000008D1 - bl StringFromId - ldr r1, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r3, r0 - ldr r0, [r1] - mov r1, #8 - add r0, r0, #0x100 - ldrsb r0, [r0, #0x60] - mov r2, #2 - bl DrawTextInWindow - ldr r1, [r4, #0x10] - cmp r1, #0 - moveq r0, #0 - beq _02386B98 - ldr r0, [r1] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_02386B98: - cmp r0, #0 - beq _02386C00 - add r0, sp, #0x54 - mov r2, #0 - bl ov29_022E2A78 - ldr r0, [r4, #0x10] - bl ov29_022E1618 - ldrb r1, [r0] - ldr r0, _02386C10 ; =0x000008D2 - str r1, [sp, #0x14] - bl StringFromId - add r1, sp, #4 - mov r2, r0 - str r1, [sp] - add r0, sp, #0x54 - mov r1, #0x50 - mov r3, #0 - bl PreprocessString - ldr r0, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r1, #0x10 - ldr r0, [r0] - mov r2, #0x12 - add r0, r0, #0x100 - ldrsb r0, [r0, #0x60] - add r3, sp, #0x54 - bl DrawTextInWindow -_02386C00: - add sp, sp, #0xa4 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_02386C08: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C -#ifdef JAPAN -_02386C0C: .word 0x00001D29 -_02386C10: .word 0x00001D2A -#else -_02386C0C: .word 0x000008D1 -_02386C10: .word 0x000008D2 -#endif - arm_func_end ov31_02386B28 - - arm_func_start ov31_02386C14 -ov31_02386C14: ; 0x02386C14 - stmdb sp!, {r3, lr} - ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - add r0, r0, #0x61 - add r0, r0, #0x100 - bl ov29_0234E988 - ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - add r0, r0, #0x100 - ldrsb r0, [r0, #0x60] - bl sub_0202F954 - mov r0, #0x62 - bl AdvanceFrame - mov r0, #0x62 - bl AdvanceFrame - ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - add r0, r0, #0x100 - ldrsb r0, [r0, #0x60] - bl CloseTextBox - ldmia sp!, {r3, pc} - .align 2, 0 -_02386C68: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C - arm_func_end ov31_02386C14 - - arm_func_start ov31_02386C6C -ov31_02386C6C: ; 0x02386C6C - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #0xf4 - mov r5, r0 - mov r0, #0x164 - mov r1, #8 - bl MemAlloc - ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - str r0, [r1] - str r5, [r0, #0x64] -_02386C90: - bl ov29_022EA62C - ldr r0, _02386F10 ; =DUNGEON_WINDOW_PARAMS_18 - ldr r1, _02386F14 ; =ov31_02386B28 - bl CreateTextBox - ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r1, [r1] - strb r0, [r1, #0x160] - bl ov29_022EBA70 - mov r0, #0x25 - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0xc - mov r1, #0 - bl AddDungeonSubMenuOption - bl ov29_022EB9A0 - bl ov29_022EBA84 - mov r1, #0 - ldr r2, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - b _02386CF0 -_02386CDC: - ldr r3, [r2] - add r4, r1, #1 - add r3, r3, r1, lsl #3 - mov r1, r4 - str r4, [r3, #4] -_02386CF0: - cmp r1, r0 - blt _02386CDC - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r2, #0 - ldr r4, [r0] - mov r3, r1, lsl #3 - strh r2, [r4, r3] - ldr r3, [r0] - sub r4, r2, #1 - add r3, r3, r1, lsl #3 - str r4, [r3, #4] - ldr r3, [r0] - add r3, r3, r1, lsl #3 - strh r2, [r3, #8] - ldr r3, [r0] - add r1, r3, r1, lsl #3 - str r4, [r1, #0xc] - ldr r0, [r0] - add r1, r0, #0x58 - bl ov31_0238513C - ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, _02386F18 ; =DUNGEON_WINDOW_PARAMS_17 - ldr r3, [r1] - ldr r1, _02386F1C ; =0x00000213 - add r4, r3, #0x58 - add r2, sp, #0x5c - str r4, [sp, #0xbc] - bl CreateParentMenuFromStringIds - ldr r6, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r4, #0x2d - ldr r1, [r6] - strb r0, [r1, #0x161] -_02386D70: - mov r0, r4 - bl AdvanceFrame - ldr r0, [r6] - add r0, r0, #0x100 - ldrsb r0, [r0, #0x61] - bl IsParentMenuActive - cmp r0, #0 - bne _02386D70 - ldr r0, [r6] - add r0, r0, #0x100 - ldrsb r0, [r0, #0x61] - bl sub_0202ABB0 - ldr r1, [r6] - sub r0, r0, #1 - str r0, [r1, #0x124] - ldr r0, [r6] - ldr r0, [r0, #0x124] - cmp r0, #0 - movlt r6, #1 - blt _02386EBC - cmp r0, #1 - bne _02386E70 - bl ov31_02386C14 - ldrsh r0, [r5, #4] - ldrsh r1, [r5, #6] - bl GetTile - ldr r0, [r0, #0x10] - cmp r0, #0 - beq _02386E68 - ldr r1, [r0] - cmp r1, #2 - bne _02386E68 - bl GetTrapInfo - ldrb r3, [r0] - add r2, sp, #0xc - ldr r1, _02386F20 ; =0x00001013 - str r3, [sp, #0x1c] - str r2, [sp] - ldrb r2, [r0] - ldr r0, _02386F24 ; =DUNGEON_WINDOW_PARAMS_19 -#if defined(EUROPE) - sub r3, r1, #0x740 - add r2, r2, #0xdc - add r2, r2, #0x3400 -#elif defined(JAPAN) - ldr r3, _023881A0 ; =0x00001D2B - add r2, r2, #0x5f - add r2, r2, #0x4700 -#else - sub r3, r1, #0x740 - add r2, r2, #0xda - add r2, r2, #0x3400 -#endif - mov r2, r2, lsl #0x10 - mov r2, r2, lsr #0x10 - str r2, [sp, #4] - mov r2, #0 - str r2, [sp, #8] - bl CreateScrollBoxSingle - mov r6, r0 - mov r4, #0x16 -_02386E3C: - mov r0, r4 - bl AdvanceFrame - mov r0, r6 - bl IsScrollBoxActive - cmp r0, #0 - bne _02386E3C - mov r0, r6 - bl CloseScrollBox - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 -_02386E68: - mov r6, #2 - b _02386EBC -_02386E70: - bl ov29_022EB804 - cmp r0, #0 - beq _02386D70 - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r4, [r5, #0xb4] - ldr r0, [r0] - ldr r1, _02386F28 ; =ov29_0237C91C - ldr r2, [r0, #0x124] - add r0, r4, #0x4a - mov r2, r2, lsl #3 - ldrh r1, [r1, r2] - bl SetMonsterActionFields - mov r6, #0 - strb r6, [r4, #0x4e] - strh r6, [r4, #0x50] - strh r6, [r4, #0x52] - strb r6, [r4, #0x54] - strh r6, [r4, #0x56] - strh r6, [r4, #0x58] -_02386EBC: - mov r0, #0x2d - bl AdvanceFrame - cmp r6, #2 - beq _02386C90 - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - cmp r0, #0 - beq _02386EF8 - bl ov31_02386C14 - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - bl MemFree - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r1, #0 - str r1, [r0] -_02386EF8: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - add sp, sp, #0xf4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02386F0C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C -_02386F10: .word DUNGEON_WINDOW_PARAMS_18 -_02386F14: .word ov31_02386B28 -_02386F18: .word DUNGEON_WINDOW_PARAMS_17 -_02386F1C: .word 0x00000213 -_02386F20: .word 0x00001013 -_02386F24: .word DUNGEON_WINDOW_PARAMS_19 -#ifdef JAPAN -_023881A0: .word 0x00001D2B -#endif -_02386F28: .word ov29_0237C91C - arm_func_end ov31_02386C6C - - arm_func_start ov31_02386F2C -ov31_02386F2C: ; 0x02386F2C - stmdb sp!, {r3, lr} - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x294 - add r0, r0, #0x400 - bl ov29_0234E988 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x97] - cmp r0, r1 - beq _02386F64 - bl CloseAdvancedTextBox -_02386F64: - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x98] - cmp r0, r1 - beq _02386F98 - bl CloseAdvancedTextBox - bl sub_020407C0 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x698] -_02386F98: - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x96] - cmp r0, r1 - beq _02386FB8 - bl CloseTextBox -_02386FB8: - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x3a4 - add r0, r0, #0x400 - bl ov31_023899D4 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x3a8 - add r0, r0, #0x400 - bl ov31_02388714 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x95 - add r0, r0, #0x600 - bl ov29_0234E988 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - bl MemFree - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02387010: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 - arm_func_end ov31_02386F2C - - arm_func_start ov31_02387014 -ov31_02387014: ; 0x02387014 - ldr r1, [r0, #0xb4] - ldr ip, _02387044 ; =ov31_023899B8 - ldrb r0, [r1, #7] - mov r2, #1 - cmp r0, #0 - movne r1, #0xb - ldr r0, _02387048 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldreqb r1, [r1, #0xa8] - ldr r0, [r0] - and r1, r1, #0xff - ldr r0, [r0, #0x7a4] - bx ip - .align 2, 0 -_02387044: .word ov31_023899B8 -_02387048: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 - arm_func_end ov31_02387014 - - arm_func_start TeamMenu -TeamMenu: ; 0x0238704C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x13c - mov sl, r0 - ldr r0, _02387614 ; =0x000007AC - mov r1, #8 - bl MemAlloc - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - str r0, [r1] - bl ov31_023880D8 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - str sl, [r0, #0x69c] - bl ov29_0234EBCC - mov r7, #0 - add r0, sp, #0xb0 - mov r1, #1 - mov r2, r7 - mov r3, r7 - str r7, [sp] - mov r8, r7 - bl ov29_0234EA18 - ldr r2, _0238761C ; =ov31_02387014 - add r0, sp, #0xb0 - mov r1, #0xe - mov r3, r7 - bl ov31_02388114 - ldr r2, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, _02387620 ; =DUNGEON_WINDOW_PARAMS_22 - ldr r3, [r2] - str r0, [r3, #0x7a8] - ldr r0, [r2] - ldr r0, [r0, #0x7a8] - bl ov31_02388444 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r1, sp, #8 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_02388704 - ldr r1, [sp, #0xc] - ldr r0, [sp, #0x10] - add r1, r1, #8 - mov r0, r0, lsl #0x10 - mov r1, r1, lsl #0x10 - mov r0, r0, asr #0x10 - mov r1, r1, asr #0x10 - bl ov31_0238991C - ldr r3, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r1, #0xb - ldr r4, [r3] - mov r2, r7 - str r0, [r4, #0x7a4] - ldr r0, [r3] - ldr r0, [r0, #0x7a4] - bl ov31_023899B8 -_02387124: - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_02388534 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_023886D4 - cmp r0, #1 - moveq r7, #1 - beq _023875D8 - cmp r0, #2 - bne _02387184 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r8, #1 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_023886DC - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r2, [r1] - str r0, [r2, #0x760] - ldr r0, [r1] - ldr sb, [r0, #0x760] - b _023871B0 -_02387184: - cmp r0, #3 - bne _023871B0 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_023886DC - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r2, [r1] - str r0, [r2, #0x760] - ldr r0, [r1] - ldr sb, [r0, #0x760] -_023871B0: - bl ov29_022EBA70 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r1, sp, #0xb0 - ldr r2, [r0] - ldr r0, _02387624 ; =DUNGEON_PTR - ldr r2, [r2, #0x760] - ldr r3, [r0] - add r0, r1, r2, lsl #5 - ldr r1, [r0, #4] - mov r0, #0x1b - add r1, r3, r1, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r4, [r1, #0xa84] -#else - ldr r4, [r1, #0xb28] -#endif - mov r1, #0 - ldr r5, [r4, #0xb4] - bl AddDungeonSubMenuOption - mov r0, #0x19 - mov r1, #0 - bl AddDungeonSubMenuOption - ldrb r0, [r5, #7] - cmp r0, #0 - bne _02387278 - ldr r0, _02387624 ; =DUNGEON_PTR - ldr r1, [r0] - ldrb r0, [r1, #0x75d] - cmp r0, #0 - ldreqb r0, [r1, #0x75e] - cmpeq r0, #0 - bne _0238726C - ldrsh r0, [r5, #0xc] - bl GetActiveTeamMember - ldrsh r1, [r0, #8] - ldr r0, _02387628 ; =0x00005AA5 - cmp r1, r0 - beq _0238726C - ldrb r0, [r5, #0x48] - bl JoinedAtRangeCheck2Veneer - cmp r0, #0 - beq _02387260 - ldr r0, _02387624 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75c] - cmp r0, #0 - beq _0238726C -_02387260: - mov r0, #0x34 - mov r1, #0 - bl AddDungeonSubMenuOption -_0238726C: - mov r0, #0x1c - mov r1, #0 - bl AddDungeonSubMenuOption -_02387278: - mov r0, #0x30 - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0x1a - mov r1, #0 - bl AddDungeonSubMenuOption - ldrb r0, [r5, #7] - cmp r0, #0 - ldreq r0, _02387624 ; =DUNGEON_PTR - ldreq r1, [r0] - ldreqb r0, [r1, #0x75e] - cmpeq r0, #0 - bne _02387320 - ldrb r0, [r1, #0x75c] - cmp r0, #0 - beq _02387320 - ldrb r0, [r1, #0x748] - bl GetLeaderChangeFlag - cmp r0, #0 - beq _02387320 - mov r0, #0x3b - mov r1, #0 - bl AddDungeonSubMenuOption - ldrsh r0, [r5, #0xc] - mov r6, #1 - cmp r0, #4 - movge r6, #0 - bge _023872FC - bl GetActiveTeamMember - ldrsh r0, [r0, #8] - bl ov29_022F9C34 - cmp r0, #0 - movne r6, #0 -_023872FC: - mov r0, r4 - mov r1, #0 - bl CheckVariousStatuses2 - cmp r0, #0 - movne r6, #0 - cmp r6, #0 - bne _02387320 - mov r0, #0x3b - bl DisableDungeonSubMenuOption -_02387320: - mov r0, r5 - bl IsExperienceLocked - cmp r0, #0 - beq _0238735C - mov r0, #0x19 - bl DisableDungeonSubMenuOption - mov r0, #0x3b - bl DisableDungeonSubMenuOption - mov r0, #0x1a - bl DisableDungeonSubMenuOption - mov r0, #0x30 - bl DisableDungeonSubMenuOption - mov r0, #0x34 - bl DisableDungeonSubMenuOption - b _02387380 -_0238735C: - ldrb r0, [r5, #7] - cmp r0, #0 - beq _02387380 - mov r0, r4 - bl ov29_0234FBD4 - cmp r0, #0 - bne _02387380 - mov r0, #0x1a - bl DisableDungeonSubMenuOption -_02387380: - bl ov29_022EB9A0 - cmp r8, #0 - beq _023873C8 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r3, [sl, #0xb4] - ldr r0, [r0] - add r1, sp, #0xb4 - ldr r2, [r0, #0x760] - add r0, r3, #0x4a - ldr r1, [r1, r2, lsl #5] - bl ov29_022EBA94 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r7, #0 - ldr r0, [r0] - add r0, r0, #0x294 - add r0, r0, #0x400 - bl ov29_0234E988 - b _023875D8 -_023873C8: - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - cmp sb, #0 - ldr r0, [r0] - moveq r2, #1 - add r1, r0, #0x188 - movne r2, #0 - add r0, r0, #0x530 - add r1, r1, #0x400 - bl ov31_0238513C - bl ov29_022EBA84 - mov r2, #0 - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - b _02387410 -_023873FC: - ldr r3, [r1] - add r4, r2, #1 - add r3, r3, r2, lsl #3 - mov r2, r4 - str r4, [r3, #0x534] -_02387410: - cmp r2, r0 - blt _023873FC - ldr r4, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r3, _0238762C ; =0x00000A3C - ldr r0, [r4] - mvn r1, #0 - add r0, r0, r2, lsl #3 - add r0, r0, #0x500 - strh r3, [r0, #0x30] - ldr r0, [r4] - mov r5, #0 - add r0, r0, r2, lsl #3 - str r1, [r0, #0x534] - ldr r3, [r4] - mov r0, #0xa - add r3, r3, r2, lsl #3 - add r3, r3, #0x500 - strh r5, [r3, #0x38] - ldr r3, [r4] - add r2, r3, r2, lsl #3 - str r1, [r2, #0x53c] - ldr r1, [r4] - add r1, r1, #0x188 - add r1, r1, #0x400 - str r1, [sp, #0x78] - bl Arm9LoadUnkFieldNa0x2029EC8 - add r4, r0, #1 - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, _02387630 ; =DUNGEON_WINDOW_PARAMS_23 - ldr r3, [r1] - ldr r1, _02387634 ; =0x00000233 - add r2, sp, #0x18 - add r3, r3, #0x530 - str r4, [sp, #0x18] - bl CreateParentMenuFromStringIds - ldr r4, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r6, #0x1b - ldr r1, [r4] - add fp, sp, #4 - strb r0, [r1, #0x694] -_023874B0: - mov r0, r6 - bl AdvanceFrame - mov r0, r5 - mov r1, fp - bl GetPressedButtons - ldr r0, [r4] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x94] - bl IsParentMenuActive - cmp r0, #0 - ldr r0, [r4] - add r0, r0, #0x600 - bne _02387578 - ldrsb r0, [r0, #0x94] - bl sub_0202ABB0 - subs r1, r0, #1 - bmi _0238754C - ldr r0, [r4] - str r1, [r0, #0x760] - ldr r0, [r4] - ldr r0, [r0, #0x760] - bl ov29_022EB804 - cmp r0, #0 - beq _023874B0 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, _02387638 ; =ov29_0237C91C - ldr r0, [r0] - ldr r5, [sl, #0xb4] - ldr r2, [r0, #0x760] - add r0, r5, #0x4a - mov r2, r2, lsl #3 - ldrh r1, [r1, r2] - bl SetMonsterActionFields - add r0, sp, #0xb0 - add r0, r0, sb, lsl #5 - ldr r0, [r0, #4] - mov r4, #0 - strb r0, [r5, #0x4e] - b _02387594 -_0238754C: - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x294 - add r0, r0, #0x400 - bl ov29_0234E988 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_023886F4 - mov r4, #1 - b _02387594 -_02387578: - ldrsb r0, [r0, #0x94] - bl sub_0202AB80 - mov r1, r0 - mov r0, #0xa - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 - b _023874B0 -_02387594: - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x294 - add r0, r0, #0x400 - bl ov29_0234E988 - cmp r4, #1 - beq _02387124 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x95 - add r0, r0, #0x600 - bl ov29_0234E988 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x3a4 - add r0, r0, #0x400 - bl ov31_023899D4 -_023875D8: - cmp r7, #0 - beq _023875F0 - bl GetLeader - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster -_023875F0: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl ov31_02386F2C - mov r0, #0x1b - bl AdvanceFrame - mov r0, r7 - add sp, sp, #0x13c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02387614: .word 0x000007AC -_02387618: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 -_0238761C: .word ov31_02387014 -_02387620: .word DUNGEON_WINDOW_PARAMS_22 -_02387624: .word DUNGEON_PTR -_02387628: .word 0x00005AA5 -#ifdef JAPAN -_0238762C: .word 0x00000877 -#else -_0238762C: .word 0x00000A3C -#endif -_02387630: .word DUNGEON_WINDOW_PARAMS_23 -_02387634: .word 0x00000233 -_02387638: .word ov29_0237C91C - arm_func_end TeamMenu - - arm_func_start ov31_0238763C -ov31_0238763C: ; 0x0238763C - cmp r0, #0 - moveq r0, #0 - bxeq lr - ldr r0, [r0] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end ov31_0238763C - - arm_func_start ov31_02387660 -ov31_02387660: ; 0x02387660 - ldr r1, _02387680 ; =DUNGEON_PTR - ldrb r0, [r0, #4] - ldr r1, [r1] - ldr ip, _02387684 ; =ov31_0238948C - add r0, r1, r0, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - bx ip - .align 2, 0 -_02387680: .word DUNGEON_PTR -_02387684: .word ov31_0238948C - arm_func_end ov31_02387660 - - arm_func_start ov31_02387688 -ov31_02387688: ; 0x02387688 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x78 - ldr r2, _02387788 ; =DUNGEON_PTR - ldrb r0, [r0, #4] - ldr r2, [r2] - mov r4, r1 - add r0, r2, r0, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr sb, [r0, #0xa84] -#else - ldr sb, [r0, #0xb28] -#endif - bl ov29_022EA62C - cmp r4, #0 - beq _023876C4 - mov r0, sb - bl ov31_023889DC - b _0238776C -_023876C4: - ldr r0, [sb, #0xb4] - bl IsExperienceLocked - cmp r0, #0 - movne r4, #1 - bne _023876E4 - cmp r4, #0 - movne r4, #2 - moveq r4, #0 -_023876E4: - add r0, sp, #0 - mov r1, sb - bl CreateMonsterSummaryFromMonster - mov r2, #0 - add r0, sp, #0 - mov r1, r4 - strh r2, [sp, #0x40] - strh r2, [sp, #0x56] - bl sub_0203F150 - mov r7, #0x62 - mov r6, r7 - mov r5, r7 - mov r4, #1 - mov fp, #0x1c - mov r8, #0 -_02387720: - mov sl, r8 - bl ov29_022EA62C -_02387728: - mov r0, r7 - bl AdvanceFrame - bl sub_0203F398 - cmp r0, #2 - beq _0238775C - cmp r0, #1 - bne _02387728 - bl sub_0203F990 - mov r0, r6 - bl AdvanceFrame - mov r0, r5 - bl AdvanceFrame - mov sl, r4 -_0238775C: - mov r0, fp - bl AdvanceFrame - cmp sl, #0 - beq _02387720 -_0238776C: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, sb - bl ov29_023021F0 - add sp, sp, #0x78 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02387788: .word DUNGEON_PTR - arm_func_end ov31_02387688 - - arm_func_start ov31_0238778C -ov31_0238778C: ; 0x0238778C - stmdb sp!, {r4, lr} - ldr r1, _023877C0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r4, r0 - ldr r0, [r1] - add r0, r0, #0x600 - ldrh r0, [r0, #0x92] - bl StringFromId - mov r1, #2 - mov r3, r0 - mov r0, r4 - mov r2, r1 - bl DrawTextInWindow - ldmia sp!, {r4, pc} - .align 2, 0 -_023877C0: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 - arm_func_end ov31_0238778C - - arm_func_start ov31_023877C4 -ov31_023877C4: ; 0x023877C4 - ldr r2, _023877E4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr ip, _023877E8 ; =DrawTextInWindow - ldr r3, [r2] - mov r1, #2 - add r3, r3, #0x12 - mov r2, #0x10 - add r3, r3, #0x600 - bx ip - .align 2, 0 -_023877E4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 -_023877E8: .word DrawTextInWindow - arm_func_end ov31_023877C4 - - arm_func_start ov31_023877EC -ov31_023877EC: ; 0x023877EC -#ifdef JAPAN -#define OV31_023877EC_OFFSET -8 -#define OV31_023877EC_OFFSET_2 -4 -#define OV31_023877EC_OFFSET_3 -0xA4 -#else -#define OV31_023877EC_OFFSET 0 -#define OV31_023877EC_OFFSET_2 0 -#define OV31_023877EC_OFFSET_3 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2a4 + OV31_023877EC_OFFSET - mov r4, #0 - movs sl, r0 -#ifndef JAPAN - str r3, [sp, #8] -#endif - subne r0, r4, #1 - strne r0, [sl] - mov sb, r1 - ldr r0, _02388080 ; =0x000007AC - mov r1, #8 - mov fp, r2 - bl MemAlloc - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - str r0, [r1] - bl ov31_023880D8 - mov r7, #0 - mov r6, r7 -_02387830: - ldr r0, _02388088 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 - ldr r5, [r0, #0xb28 + OV31_023877EC_OFFSET_3] - mov r0, r5 - bl ov31_0238763C - cmp r0, #0 - beq _0238789C - cmp fp, #0 - beq _0238786C - mov r0, r5 - ldr r8, [r5, #0xb4] - bl ov29_02347100 -#ifdef JAPAN - strb r0, [r8, #0x15d] -#else - strb r0, [r8, #0x161] -#endif -_0238786C: - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r7, lsl #5 - str r6, [r0, #4] - ldr r0, [r5, #0xb4] -#ifdef JAPAN - ldrb r0, [r0, #0x15d] -#else - ldrb r0, [r0, #0x161] -#endif - cmp r0, #0 - movne r1, #0 - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r7 - moveq r1, #3 - strb r1, [r0, #0x84] - add r7, r7, #1 -_0238789C: - add r6, r6, #1 - cmp r6, #4 - blt _02387830 - mov r6, r7 - mvn r5, #0 - add r3, sp, #0x218 + OV31_023877EC_OFFSET - mov r1, #0 - b _023878D0 -_023878BC: - add r2, r3, r6, lsl #5 - add r0, r3, r6 - str r5, [r2, #4] - strb r1, [r0, #0x84] - add r6, r6, #1 -_023878D0: - cmp r6, #4 - blt _023878BC - mov r0, #0xb - bl Arm9LoadUnkFieldNa0x2029EC8 - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r2, #0 - ldr r3, [r1] - str r0, [r3, #0x760] - ldr r0, [r1] - str r7, [r0, #0x764] - ldr r0, [r1] - str r7, [r0, #0x768] - ldr r0, [r1] - str r2, [r0, #0x76c] - ldr r0, [r1] - str r2, [r0, #0x770] - ldr r0, [r1] - str r2, [r0, #0x754] - ldr r0, [r1] - str r2, [r0, #0x758] - bl ov29_022EA62C - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x95 - add r0, r0, #0x600 - bl ov29_0234E988 - mov r5, #0 - add r0, sp, #0x68 + OV31_023877EC_OFFSET - mov r1, r5 - mov r2, #0x80 - bl memset - mov r8, r5 - ldr fp, _0238808C ; =0x000003E7 - b _02387B80 -_02387958: - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r8, lsl #5 - ldr r1, [r0, #4] - cmp r1, #0 - blt _02387B7C - ldr r0, _02388088 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r1, lsl #2 - add r0, r0, #0x12000 - ldr r6, [r0, #0xb28 + OV31_023877EC_OFFSET_3] - mov r0, r6 - bl ov31_0238763C - cmp r0, #0 - beq _02387B7C - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r8 - ldrb r0, [r0, #0x84] - ldr r6, [r6, #0xb4] - cmp r0, #0 - movne r0, #0x57 - moveq r0, #0x44 - and r2, r0, #0xff - add r0, sp, #0x68 + OV31_023877EC_OFFSET - mov r1, r6 - bl ov29_023002F0 - add r0, sp, #0x68 + OV31_023877EC_OFFSET - str r0, [sp, #0x50 + OV31_023877EC_OFFSET] - ldrsh r0, [r6, #0xc] - bl GetActiveTeamMember - ldrsh r0, [r0, #8] - bl ov29_022F9C34 - cmp r0, #0 - ldrsh r1, [r6, #0x12] - ldrsh r0, [r6, #0x16] - beq _02387A84 - add r1, r1, r0 - cmp r1, fp - movgt r3, fp - movle r3, r1 - mov r2, r3, asr #1 - ldrsh r0, [r6, #0x10] - add r2, r3, r2, lsr #30 - cmp r0, r2, asr #2 - bgt _02387A18 - ldr r1, _02388090 ; =ov31_0238A044 - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bl strcpy - b _02387B20 -_02387A18: - cmp r1, fp - movgt r3, fp - movle r3, r1 - mov r2, r3, asr #1 - add r2, r3, r2, lsr #30 - mov r2, r2, asr #2 - cmp r0, r2, lsl #1 - bgt _02387A48 - ldr r1, _02388094 ; =ov31_0238A04C - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bl strcpy - b _02387B20 -_02387A48: - cmp r1, fp - movgt r1, fp - mov r2, r1, asr #1 - add r1, r1, r2, lsr #30 - mov r1, r1, asr #2 - add r1, r1, r1, lsl #1 - cmp r0, r1 - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bgt _02387A78 - ldr r1, _02388098 ; =ov31_0238A054 - bl strcpy - b _02387B20 -_02387A78: - ldr r1, _0238809C ; =ov31_0238A05C - bl strcpy - b _02387B20 -_02387A84: - add r1, r1, r0 - cmp r1, fp - movgt r3, fp - movle r3, r1 - mov r2, r3, asr #1 - ldrsh r0, [r6, #0x10] - add r2, r3, r2, lsr #30 - cmp r0, r2, asr #2 - bgt _02387AB8 - ldr r1, _023880A0 ; =ov31_0238A064 - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bl strcpy - b _02387B20 -_02387AB8: - cmp r1, fp - movgt r3, fp - movle r3, r1 - mov r2, r3, asr #1 - add r2, r3, r2, lsr #30 - mov r2, r2, asr #2 - cmp r0, r2, lsl #1 - bgt _02387AE8 - ldr r1, _023880A4 ; =ov31_0238A06C - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bl strcpy - b _02387B20 -_02387AE8: - cmp r1, fp - movgt r1, fp - mov r2, r1, asr #1 - add r1, r1, r2, lsr #30 - mov r1, r1, asr #2 - add r1, r1, r1, lsl #1 - cmp r0, r1 - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bgt _02387B18 - ldr r1, _023880A8 ; =ov31_0238A074 - bl strcpy - b _02387B20 -_02387B18: - ldr r1, _023880AC ; =ov31_0238A07C - bl strcpy -_02387B20: - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - str r0, [sp, #0x54 + OV31_023877EC_OFFSET] - add r0, sp, #0x18 + OV31_023877EC_OFFSET - str r0, [sp] - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r2, _023880B0 ; =ov31_0238A084 - ldr r0, [r0] - mov r1, #0x100 - add r0, r0, #0x30 - add r0, r0, r5, lsl #8 - mov r3, #0 - bl PreprocessString - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r1, r5, lsl #3 - ldr r2, [r0] - add r0, r2, #0x30 - add r0, r0, r5, lsl #8 - str r0, [r2, r5, lsl #3] - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r5, r5, #1 - ldr r0, [r0] - add r0, r0, r1 - str r5, [r0, #4] -_02387B7C: - add r8, r8, #1 -_02387B80: - cmp r8, r7 - blt _02387958 - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r3, #0 - ldr r1, [r0] - sub r2, r3, #1 - str r3, [r1, r5, lsl #3] - ldr r1, [r0] - ldr r0, _02388088 ; =DUNGEON_PTR - add r1, r1, r5, lsl #3 - str r2, [r1, #4] - ldr r0, [r0] - ldrb r5, [r0, #0x75b] - cmp r5, #0 - ldrne r1, _023880B4 ; =0x00000A3A - movne r0, #0x10 - strne r0, [sp, #0xf4 + OV31_023877EC_OFFSET] - mov r0, #0xb - strneh r1, [sp, #0xf0 + OV31_023877EC_OFFSET] - bl Arm9LoadUnkFieldNa0x2029EC8 - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - cmp r5, #0 - ldr r3, [r1] - add r2, sp, #0x29c + OV31_023877EC_OFFSET - str r0, [r3, #0x760] - ldr r0, [r1] - movne r1, #0x800 - ldr r0, [r0, #0x760] - moveq r1, #0 - add r0, r0, #1 - str r0, [sp, #0xe8 + OV31_023877EC_OFFSET] - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - orr r1, r1, #0x33 - ldr r3, [r0] - str r2, [sp, #0x148 + OV31_023877EC_OFFSET] - ldr r0, _023880B8 ; =DUNGEON_WINDOW_PARAMS_21 - add r2, sp, #0xe8 + OV31_023877EC_OFFSET - orr r1, r1, #0x1200 - bl CreateParentMenu - ldr r2, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, _023880BC ; =ov31_0238778C - ldr r2, [r2] - strb r0, [r2, #0x695] - ldr r0, _023880C0 ; =DUNGEON_WINDOW_PARAMS_24 - bl CreateTextBox - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r3, _023880C4 ; =0x00000A36 - ldr r2, [r1] - mov r5, #0x10 - strb r0, [r2, #0x696] - ldr r2, [r1] - str r5, [sp, #0x18c + OV31_023877EC_OFFSET] - add r0, r2, #0x92 - add r1, r0, #0x500 - add r0, sp, #0x118 + OV31_023877EC_OFFSET - strh r3, [r0, #0x70] - str r1, [sp, #0x1c8 + OV31_023877EC_OFFSET] - cmp sb, #3 - bne _02387CA8 - add r1, r3, #3 - add r0, r2, #0x600 - strh r1, [r0, #0x92] - mov r5, #0 - str r5, [sp] - ldr r0, _023880C8 ; =DUNGEON_WINDOW_PARAMS_20 - ldr r3, _023880CC ; =ov31_023877C4 - add r2, sp, #0x180 + OV31_023877EC_OFFSET - mov r1, #0x800 - str r5, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, [r1] - strb r0, [r1, #0x697] - b _02387CF4 -_02387CA8: - cmp sb, #2 - addne r1, r3, #3 - addne r0, r2, #0x600 - strneh r1, [r0, #0x92] - bne _02387CF4 - add r1, r3, #2 - add r0, r2, #0x600 - strh r1, [r0, #0x92] - mov r5, #0 - str r5, [sp] - ldr r0, _023880C8 ; =DUNGEON_WINDOW_PARAMS_20 - ldr r3, _023880CC ; =ov31_023877C4 - add r2, sp, #0x180 + OV31_023877EC_OFFSET - mov r1, #0x800 - str r5, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, [r1] - strb r0, [r1, #0x697] -_02387CF4: - sub r0, sb, #2 -#ifdef JAPAN - str r0, [sp, #0xc] - ldr r0, _023880D0 ; =0x00000872 - ldr r5, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r8, #0x3d8 - rsb fp, r0, #0x870 -#else - mvn r7, #0x3d8 - str r0, [sp, #0x10] - add r0, r7, #0xe10 - ldr r5, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - str r0, [sp, #0x14] - mov fp, r7, asr #9 -#endif -_02387D10: - ldr r0, [r5] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x95] - bl sub_0202AB80 - ldr r1, [r5] - str r0, [r1, #0x760] - ldr r1, [r5] - mov r0, #0xb - ldr r1, [r1, #0x760] - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 - ldr r0, [r5] - ldr r1, [r0, #0x760] - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r1, lsl #5 - ldr r6, [r0, #4] - cmp r6, #0 - blt _02387EC0 - ldr r0, _02388088 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r7, [r0, #0xa84] - mov r0, r7 - bl ov31_0238763C - cmp r0, #0 - cmpne r8, r6 - beq _02387E98 - cmp sb, #1 - bne _02387DCC - mov r0, r7 -#else - ldr r8, [r0, #0xb28] - mov r0, r8 - bl ov31_0238763C - cmp r0, #0 - cmpne r7, r6 - beq _02387E98 - cmp sb, #1 - bne _02387DCC - mov r0, r8 -#endif - bl sub_0203F9CC - ldr r0, [r5] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x98] - cmp r0, fp - bne _02387DC0 - mov r1, #0 - mov r0, #7 - mov r2, r1 - bl sub_0204018C - ldr r1, [r5] - strb r0, [r1, #0x698] - b _02387DC4 -_02387DC0: - bl sub_02041178 -_02387DC4: - bl sub_020407EC - b _02387E98 -_02387DCC: - ldr r0, [sp, #0x10 + OV31_023877EC_OFFSET_2] - cmp r0, #1 - bhi _02387E98 - ldr r1, [r5] - add r0, r1, #0x600 - ldrsb r0, [r0, #0x97] - str r0, [sp, #0xc + OV31_023877EC_OFFSET_2] - cmp r0, fp - beq _02387E98 - add r0, r1, #0x92 -#ifdef JAPAN - ldr r8, [r7, #0xb4] - add r0, r0, #0x500 - mov r1, r7 - mov r2, #0 - bl ov29_022E2A78 - ldrb r0, [r8, #0xbc] - cmp r0, #7 - beq _02387E24 - mov r0, r8 -#else - ldr r7, [r8, #0xb4] - add r0, r0, #0x500 - mov r1, r8 - mov r2, #0 - bl ov29_022E2A78 - ldrb r0, [r7, #0xbc] - cmp r0, #7 - beq _02387E24 - mov r0, r7 -#endif - bl IsExperienceLocked - cmp r0, #0 - beq _02387E3C -_02387E24: -#ifdef JAPAN - ldr r0, _023880D0 ; =0x00000872 - ldr r2, [r5] - add r1, r0, #6 - add r0, r2, #0x12 -#else - ldr r0, [r5] - ldr r1, _023880D0 ; =0x00000A3D - add r0, r0, #0x12 -#endif - add r0, r0, #0x600 - bl GetStringFromFileVeneer - b _02387E90 -_02387E3C: -#ifdef JAPAN - ldrb r0, [r8, #0x62] -#else - ldrb r0, [r7, #0x62] -#endif - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - bne _02387E6C - ldr r0, [r5] -#ifdef JAPAN - ldr r1, _023880D0 ; =0x00000872 -#else - ldr r1, [sp, #0x14] -#endif - add r0, r0, #0x12 - add r0, r0, #0x600 - bl GetStringFromFileVeneer - b _02387E90 -_02387E6C: - mov r0, #1 - str r0, [sp] - ldr r0, [r5] - ldr r2, _023880D4 ; =OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 - add r0, r0, #0x12 -#ifdef JAPAN - add r1, r8, #0x62 -#else - add r1, r7, #0x62 -#endif - add r0, r0, #0x600 - mov r3, #1 - bl sub_0200D310 -_02387E90: - ldr r0, [sp, #0xc + OV31_023877EC_OFFSET_2] - bl SetAdvancedTextBoxField0x1C2 -_02387E98: -#ifdef JAPAN - mov r0, r7 - mov r1, #0 - mov r2, #1 - mov r8, r6 - bl TryPointCameraToMonster - mov r2, #1 - add r0, r7, #4 -#else - mov r0, r8 - mov r1, #0 - mov r2, #1 - mov r7, r6 - bl TryPointCameraToMonster - mov r2, #1 - add r0, r8, #4 -#endif - mov r1, #0 - mov r3, r2 - bl DrawTileGrid -_02387EC0: - mov r0, #0x1b - bl AdvanceFrame - ldr r0, [r5] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x95] - bl IsParentMenuActive - cmp r0, #0 - bne _02387D10 - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x95] - bl sub_0202ABB0 - subs r3, r0, #1 - bmi _02387F24 - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r1, sp, #0x29c + OV31_023877EC_OFFSET - ldr r2, [r0] - str r3, [r2, #0x760] - ldr r0, [r0] - ldr r0, [r0, #0x760] - ldrb r0, [r1, r0] - cmp r0, #0 - movne r4, #1 - b _02387F28 -_02387F24: - mov r4, #1 -_02387F28: - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x97] - cmp r0, r1 - beq _02387F58 - bl CloseAdvancedTextBox - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x697] -_02387F58: - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x98] - cmp r0, r1 - beq _02387F8C - bl CloseAdvancedTextBox - bl sub_020407C0 - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x698] -_02387F8C: - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x96] - bl CloseTextBox - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r2, #1 - ldr r1, [r0] - mov r0, #0x1b - strb r2, [r1, #0x696] - bl AdvanceFrame - cmp sb, #3 - bne _02387FEC - cmp r4, #0 - beq _0238800C - bl HideTileGrid -#ifndef JAPAN - ldr r0, [sp, #8] - cmp r0, #0 - beq _0238800C -#endif - bl GetLeader - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - b _0238800C -_02387FEC: - bl HideTileGrid -#ifndef JAPAN - ldr r0, [sp, #8] - cmp r0, #0 - beq _0238800C -#endif - bl GetLeader - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster -_0238800C: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #4 - mov r1, #0x3e - bl ov29_022EA370 - cmp r4, #0 - beq _02388038 - bl ov31_02386F2C - mov r0, #0 - b _02388078 -_02388038: - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r1, sp, #0x21c + OV31_023877EC_OFFSET - ldr r0, [r0] - cmp sl, #0 - ldr r0, [r0, #0x760] - ldr r4, [r1, r0, lsl #5] - strne r4, [sl] - bl ov31_02386F2C - cmp r4, #0 - movlt r0, #0 - blt _02388078 - ldr r0, _02388088 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + OV31_023877EC_OFFSET_3] -_02388078: - add sp, sp, #0x2a4 + OV31_023877EC_OFFSET - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define OV31_023877EC_DATA_OFFSET -0x1C5 -#else -#define OV31_023877EC_DATA_OFFSET 0 -#endif -_02388080: .word 0x000007AC -_02388084: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 -_02388088: .word DUNGEON_PTR -_0238808C: .word 0x000003E7 -_02388090: .word ov31_0238A044 -_02388094: .word ov31_0238A04C -_02388098: .word ov31_0238A054 -_0238809C: .word ov31_0238A05C -_023880A0: .word ov31_0238A064 -_023880A4: .word ov31_0238A06C -_023880A8: .word ov31_0238A074 -_023880AC: .word ov31_0238A07C -_023880B0: .word ov31_0238A084 -_023880B4: .word 0x00000A3A + OV31_023877EC_DATA_OFFSET -_023880B8: .word DUNGEON_WINDOW_PARAMS_21 -_023880BC: .word ov31_0238778C -_023880C0: .word DUNGEON_WINDOW_PARAMS_24 -_023880C4: .word 0x00000A36 + OV31_023877EC_DATA_OFFSET -_023880C8: .word DUNGEON_WINDOW_PARAMS_20 -_023880CC: .word ov31_023877C4 -#ifdef JAPAN -_023880D0: .word 0x00000872 -#else -_023880D0: .word 0x00000A3D -#endif -_023880D4: .word OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 - arm_func_end ov31_023877EC - - arm_func_start ov31_023880D8 -ov31_023880D8: ; 0x023880D8 - mov r2, #0 - strb r2, [r0, #0x592] - strb r2, [r0, #0x612] - sub r1, r2, #2 - strb r1, [r0, #0x695] - strb r1, [r0, #0x694] - strb r1, [r0, #0x696] - strb r1, [r0, #0x697] - strb r1, [r0, #0x698] - str r2, [r0, #0x7a4] - str r2, [r0, #0x7a8] - str r2, [r0, #0x76c] - str r2, [r0, #0x770] - str r2, [r0, #0x760] - bx lr - arm_func_end ov31_023880D8 - - arm_func_start ov31_02388114 -ov31_02388114: ; 0x02388114 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - ldr r0, _02388154 ; =0x000006D4 - mov r4, r2 - mov r1, #8 - mov r5, r3 - bl MemAlloc - mov r1, r7 - mov r2, r6 - mov r3, r4 - mov r4, r0 - str r5, [sp] - bl ov31_02388158 - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02388154: .word 0x000006D4 - arm_func_end ov31_02388114 - - arm_func_start ov31_02388158 -ov31_02388158: ; 0x02388158 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xdc - mov sl, r0 - mvn r0, #1 - strb r0, [sl] - ldr r4, [sp, #0x100] - str r3, [sl, #0x6c4] - str r4, [sl, #0x6c8] - mov r0, #0 - str r0, [sl, #0x688] - str r0, [sl, #0x68c] - str r0, [sl, #0x67c] - mov sb, r1 - str r2, [sl, #0x6c0] - sub r0, r0, #1 - mov r7, sb - str r0, [sl, #0x6b8] - add r6, sl, #4 - mov r4, #8 -_023881A4: - ldmia r7!, {r0, r1, r2, r3} - stmia r6!, {r0, r1, r2, r3} - subs r4, r4, #1 - bne _023881A4 - ldmia r7, {r0, r1, r2} - stmia r6, {r0, r1, r2} - add r0, sp, #0xc - mov r1, #0x80 - bl MemZero - mov r4, #0 - add r0, sb, #0x14 - mov r7, r4 - str r0, [sp, #8] - add fp, sl, #0xc0 - b _023883F4 -_023881E0: - ldr r0, [sb] - cmp r0, #1 - bne _023882A0 - add r0, sb, r7, lsl #5 - ldr r1, [r0, #0x20] - cmp r1, #0 - beq _023883F0 - moveq r0, #0 - beq _02388218 - ldr r0, [r1] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_02388218: - cmp r0, #0 - beq _023883F0 - add r0, sb, r7 - ldrb r0, [r0, #0x84] - ldr r6, [r1, #0xb4] - add r1, sb, r7, lsl #5 - cmp r0, #0 - movne r0, #0x57 - moveq r0, #0x44 - and r2, r0, #0xff - ldrb r0, [r1, #0x14] - cmp r0, #0 - add r0, sp, #0xc - beq _02388264 - ldrb r2, [r1, #0x1e] - ldr r1, [sp, #8] - add r1, r1, r7, lsl #5 - bl sub_02054F44 - b _0238826C -_02388264: - mov r1, r6 - bl ov29_023002F0 -_0238826C: - ldrsh r1, [r6, #0x12] - ldrsh r0, [r6, #0x16] - ldrsh r5, [r6, #0x10] - add r8, r1, r0 - ldr r0, _0238841C ; =0x000003E7 - cmp r8, r0 - movgt r8, r0 - ldrsh r0, [r6, #0xc] - bl GetActiveTeamMember - ldrsh r0, [r0, #8] - bl ov29_022F9C34 - str r0, [sp, #4] - b _023882E8 -_023882A0: - cmp r0, #0 - bne _023882E8 - add r0, sb, r7, lsl #5 - ldr r6, [r0, #0x20] - ldrb r0, [r6] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _023883F0 - ldrsh r5, [r6, #0xe] - ldrsh r8, [r6, #0x10] - ldrsh r0, [r6, #8] - bl sub_02056228 - str r0, [sp, #4] - mov r1, r6 - add r0, sp, #0xc - bl sub_020585B4 -_023882E8: - add r0, sp, #0xc - str r0, [sp, #0xc4] - ldr r0, [sp, #4] - cmp r0, #0 - mov r0, r8, asr #1 - add r0, r8, r0, lsr #30 - beq _02388360 - cmp r5, r0, asr #2 - mov r0, r0, asr #2 - bgt _02388320 - ldr r1, _02388420 ; =ov31_0238A0A8 - add r0, sp, #0x4c - bl strcpy - b _023883B8 -_02388320: - cmp r5, r0, lsl #1 - bgt _02388338 - ldr r1, _02388424 ; =ov31_0238A0B0 - add r0, sp, #0x4c - bl strcpy - b _023883B8 -_02388338: - add r0, r0, r0, lsl #1 - cmp r5, r0 - add r0, sp, #0x4c - bgt _02388354 - ldr r1, _02388428 ; =ov31_0238A0B8 - bl strcpy - b _023883B8 -_02388354: - ldr r1, _0238842C ; =ov31_0238A0C0 - bl strcpy - b _023883B8 -_02388360: - cmp r5, r0, asr #2 - mov r0, r0, asr #2 - bgt _0238837C - ldr r1, _02388430 ; =ov31_0238A0C8 - add r0, sp, #0x4c - bl strcpy - b _023883B8 -_0238837C: - cmp r5, r0, lsl #1 - bgt _02388394 - ldr r1, _02388434 ; =ov31_0238A0D0 - add r0, sp, #0x4c - bl strcpy - b _023883B8 -_02388394: - add r0, r0, r0, lsl #1 - cmp r5, r0 - add r0, sp, #0x4c - bgt _023883B0 - ldr r1, _02388438 ; =ov31_0238A0D8 - bl strcpy - b _023883B8 -_023883B0: - ldr r1, _0238843C ; =ov31_0238A0E0 - bl strcpy -_023883B8: - add r0, sp, #0x4c - str r0, [sp, #0xc8] - add r0, sp, #0x8c - str r0, [sp] - ldr r2, _02388440 ; =ov31_0238A0E8 - add r0, fp, r4, lsl #8 - mov r1, #0x100 - mov r3, #0 - bl PreprocessString - add r1, fp, r4, lsl #8 - add r0, sl, r4, lsl #3 - str r1, [r0, #0x90] - add r4, r4, #1 - str r4, [r0, #0x94] -_023883F0: - add r7, r7, #1 -_023883F4: - ldr r0, [sb, #0x88] - cmp r7, r0 - blt _023881E0 - mov r0, #0 - add r1, sl, r4, lsl #3 - str r0, [r1, #0x90] - sub r0, r0, #1 - str r0, [r1, #0x94] - add sp, sp, #0xdc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0238841C: .word 0x000003E7 -_02388420: .word ov31_0238A0A8 -_02388424: .word ov31_0238A0B0 -_02388428: .word ov31_0238A0B8 -_0238842C: .word ov31_0238A0C0 -_02388430: .word ov31_0238A0C8 -_02388434: .word ov31_0238A0D0 -_02388438: .word ov31_0238A0D8 -_0238843C: .word ov31_0238A0E0 -_02388440: .word ov31_0238A0E8 - arm_func_end ov31_02388158 - - arm_func_start ov31_02388444 -ov31_02388444: ; 0x02388444 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x98 - mov r6, r0 - mov r5, r1 - bl ov29_0234E988 - mov r0, #0xb - bl Arm9LoadUnkFieldNa0x2029EC8 - str r0, [r6, #0x67c] - ldr r1, [r6, #0x8c] - mov r0, #0 - str r1, [r6, #0x680] - ldr r1, [r6, #0x8c] - str r1, [r6, #0x684] - str r0, [r6, #0x688] - str r0, [r6, #0x68c] - str r0, [r6, #0x670] - str r0, [r6, #0x674] - bl ov29_022EA62C - ldr r0, _02388528 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r4, [r0, #0x75b] - cmp r4, #0 - ldrne r1, _0238852C ; =0x00000A3A - movne r0, #0x10 - strne r0, [sp, #0xc] - strneh r1, [sp, #8] - mov r0, #0xb - bl Arm9LoadUnkFieldNa0x2029EC8 - str r0, [r6, #0x67c] - add r1, r0, #1 - add r0, r6, #0x88 - str r1, [sp] - str r0, [sp, #0x60] - ldr r0, [r6, #0x6c0] - add r2, sp, #0 - tst r0, #2 - beq _023884FC - cmp r4, #0 - movne r3, #0x800 - ldr r1, _02388530 ; =0x00401233 - moveq r3, #0 - orr r1, r3, r1 - mov r0, r5 - add r3, r6, #0x90 - bl CreateParentMenuWrapper - b _0238851C -_023884FC: - cmp r4, #0 - movne r0, #0x800 - moveq r0, #0 - orr r1, r0, #0x33 - mov r0, r5 - orr r1, r1, #0x1200 - add r3, r6, #0x90 - bl CreateParentMenu -_0238851C: - strb r0, [r6] - add sp, sp, #0x98 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02388528: .word DUNGEON_PTR -#ifdef JAPAN -_0238852C: .word 0x00000875 -#else -_0238852C: .word 0x00000A3A -#endif -_02388530: .word 0x00401233 - arm_func_end ov31_02388444 - - arm_func_start ov31_02388534 -ov31_02388534: ; 0x02388534 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - mov r0, #0 - str r0, [sl, #0x6cc] - add r4, sl, #0x2cc - str r0, [r4, #0x404] - add sb, sl, #4 - mov r5, #2 - mov r6, #0xb - mov fp, #0x1b - mov r8, r0 - add r7, sp, #0 -_02388564: - mov r0, r8 - mov r1, r7 - bl GetPressedButtons - ldrsb r0, [sl] - bl sub_0202AB80 - str r0, [sl, #0x67c] - ldr r1, [sl, #0x6b8] - cmp r1, r0 - beq _023885DC - str r0, [sl, #0x6b8] - ldr r1, [sb] - cmp r1, #1 - bne _023885B8 - add r0, sb, r0, lsl #5 - ldr r0, [r0, #0x20] - cmp r0, #0 - ldrne r1, [sl, #0x6c4] - cmpne r1, #0 - beq _023885DC - blx r1 - b _023885DC -_023885B8: - cmp r1, #0 - bne _023885DC - add r0, sb, r0, lsl #5 - ldr r0, [r0, #0x20] - cmp r0, #0 - ldrne r1, [sl, #0x6c4] - cmpne r1, #0 - beq _023885DC - blx r1 -_023885DC: - ldr r1, [sl, #0x67c] - mov r0, r6 - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 - ldr r0, [sl, #0x6c0] - tst r0, #4 - beq _02388644 - ldrh r0, [sp] - tst r0, #8 - beq _02388644 - ldr r0, [sl, #0x67c] - add r0, sb, r0 - ldrb r0, [r0, #0x84] - cmp r0, #0 - bne _02388638 - add r0, sl, #0x5c0 - mov r1, #0 - bl PlayWindowInputSound - mov r0, #2 - str r0, [r4, #0x400] - ldr r0, [sl, #0x6b8] - str r0, [r4, #0x404] - b _023886BC -_02388638: - mov r1, r5 - add r0, sl, #0x5c0 - bl PlayWindowInputSound -_02388644: - ldrsb r0, [sl] - bl IsParentMenuActive - cmp r0, #0 - bne _023886A8 - ldrsb r0, [sl] - bl sub_0202ABB0 - subs r0, r0, #1 - bmi _0238869C - ldrsb r0, [sl] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [sl, #0x67c] - add r0, sb, r0 - ldrb r0, [r0, #0x84] - cmp r0, #0 - moveq r0, #3 - streq r0, [r4, #0x400] - ldreq r0, [sl, #0x67c] - streq r0, [r4, #0x404] - movne r0, #1 - strne r0, [r4, #0x400] - b _023886BC -_0238869C: - mov r0, #1 - str r0, [r4, #0x400] - b _023886BC -_023886A8: - mov r0, sl - bl ov31_02388744 - mov r0, fp - bl AdvanceFrame - b _02388564 -_023886BC: - mov r0, sl - bl ov31_02388744 - mov r0, #0x1b - bl AdvanceFrame - bl HideTileGrid - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end ov31_02388534 - - arm_func_start ov31_023886D4 -ov31_023886D4: ; 0x023886D4 - ldr r0, [r0, #0x6cc] - bx lr - arm_func_end ov31_023886D4 - - arm_func_start ov31_023886DC -ov31_023886DC: ; 0x023886DC - ldr r1, [r0, #0x6cc] - sub r1, r1, #2 - cmp r1, #1 - ldrls r0, [r0, #0x6d0] - mvnhi r0, #0 - bx lr - arm_func_end ov31_023886DC - - arm_func_start ov31_023886F4 -ov31_023886F4: ; 0x023886F4 - ldr ip, _02388700 ; =ResumeParentMenu - ldrsb r0, [r0] - bx ip - .align 2, 0 -_02388700: .word ResumeParentMenu - arm_func_end ov31_023886F4 - - arm_func_start ov31_02388704 -ov31_02388704: ; 0x02388704 - ldr ip, _02388710 ; =GetWindowRectangle - ldrsb r0, [r0] - bx ip - .align 2, 0 -_02388710: .word GetWindowRectangle - arm_func_end ov31_02388704 - - arm_func_start ov31_02388714 -ov31_02388714: ; 0x02388714 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r4, [r5] - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, r4 - bl ov29_0234E988 - mov r0, r4 - bl MemFree - mov r0, #0 - str r0, [r5] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov31_02388714 - - arm_func_start ov31_02388744 -ov31_02388744: ; 0x02388744 - stmdb sp!, {r4, lr} - ldr r1, [r0, #0x6c0] - tst r1, #8 - ldrne r1, [r0, #0x67c] - addne r0, r0, r1, lsl #5 - ldrne r4, [r0, #0x24] - cmpne r4, #0 - ldmeqia sp!, {r4, pc} - mov r0, r4 - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - mov r2, #1 - mov r3, r2 - add r0, r4, #4 - mov r1, #0 - bl DrawTileGrid - ldmia sp!, {r4, pc} - arm_func_end ov31_02388744 - - arm_func_start RestMenu -RestMenu: ; 0x0238878C - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x9c - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r0, [r0] - cmp r0, #0 - bne _023887CC - mov r0, #0x10 - mov r1, #8 - bl MemAlloc - ldr r1, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r2, #0 - str r0, [r1] - str r2, [r0] - ldr r0, [r1] - sub r1, r2, #2 - strb r1, [r0, #4] -_023887CC: - mov r3, #0 - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r2, r3 -_023887D8: - ldr r1, [r0] - add r1, r1, r3 - add r3, r3, #1 - strb r2, [r1, #0xc] - cmp r3, #2 - blt _023887D8 - bl ov29_022E08F4 - cmp r0, #0 - ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - moveq r1, #3 - ldreq r0, [r0] - ldr ip, _023889BC ; =0x000008C2 - streqb r1, [r0, #0xc] - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r5, #0x10 - ldr r1, [r0] - ldr r0, _023889C0 ; =DUNGEON_WINDOW_PARAMS_25 - add r4, r1, #0xc - ldr r1, _023889C4 ; =0x00001A13 - ldr r3, _023889C8 ; =DUNGEON_SUBMENU_ITEMS_5 - add r2, sp, #4 - strh ip, [sp, #0xc] - str r5, [sp, #0x10] - str r4, [sp, #0x64] - bl CreateParentMenuFromStringIds - ldr r4, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r5, #0x62 - ldr r1, [r4] - strb r0, [r1, #4] -_0238884C: - mov r0, r5 - bl AdvanceFrame - ldr r0, [r4] - ldrsb r0, [r0, #4] - bl IsParentMenuActive - cmp r0, #0 - bne _0238884C - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r0, [r0] - ldrsb r0, [r0, #4] - bl sub_0202ABB0 - ldr r1, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r1, [r1] - str r0, [r1, #8] - mov r0, #0x62 - bl AdvanceFrame - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r0, [r0] - ldrsb r0, [r0, #4] - bl CloseParentMenu - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r1, [r0] - ldr r0, [r1, #8] - cmp r0, #1 - beq _023888BC - cmp r0, #2 - beq _02388908 - b _0238897C -_023888BC: - mov r2, #1 - ldr r1, _023889CC ; =0x000008C5 - mov r3, r2 - mov r0, #0 - str r2, [sp] - bl YesNoMenu - cmp r0, #1 - movne r0, #1 - bne _023888F0 - bl GetLeaderAction - mov r1, #0x2b - bl SetMonsterActionFields - mov r0, #0 -_023888F0: - cmp r0, #0 - ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mvneq r1, #0 - ldreq r0, [r0] - streq r1, [r0, #8] - b _02388984 -_02388908: - mov r2, #1 - ldr r1, _023889D0 ; =0x000008C6 - mov r3, r2 - mov r0, #0 - str r2, [sp] - bl YesNoMenu - cmp r0, #1 - movne r2, #1 - bne _02388964 - bl GetLeaderAction - mov r1, #0x2e - bl SetMonsterActionFields - bl GetLeader - mov r2, r0 - mov r1, #0 - ldr r0, _023889D4 ; =0x0000025A - mov r3, r1 - bl ov29_022ECDE4 - ldr r0, _023889D8 ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - mov r2, #0 - strb r1, [r0, #0x758] -_02388964: - cmp r2, #0 - ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mvneq r1, #0 - ldreq r0, [r0] - streq r1, [r0, #8] - b _02388984 -_0238897C: - mvn r0, #0 - str r0, [r1, #8] -_02388984: - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r0, [r0] - ldr r1, [r0, #8] - cmp r1, #0 - bge _023887CC - cmp r0, #0 - beq _023889B0 - bl MemFree - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r1, #0 - str r1, [r0] -_023889B0: - add sp, sp, #0x9c - ldmia sp!, {r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -#define REST_MENU_OFFSET 0x1458 -#else -#define REST_MENU_OFFSET 0 -#endif -_023889B8: .word OVERLAY31_UNKNOWN_POINTER__NA_238A284 -_023889BC: .word 0x000008C2 + REST_MENU_OFFSET -_023889C0: .word DUNGEON_WINDOW_PARAMS_25 -_023889C4: .word 0x00001A13 -_023889C8: .word DUNGEON_SUBMENU_ITEMS_5 -_023889CC: .word 0x000008C5 + REST_MENU_OFFSET -_023889D0: .word 0x000008C6 + REST_MENU_OFFSET -_023889D4: .word 0x0000025A -_023889D8: .word DUNGEON_PTR - arm_func_end RestMenu - - arm_func_start ov31_023889DC -ov31_023889DC: ; 0x023889DC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x18 - mov r6, r0 - ldr r4, [r6, #0xb4] - add r3, sp, #0xc - add r0, r4, #0x9c - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - mov r0, #8 - mov r1, #0x62 - bl ov29_022EA370 - mov r0, r6 - mov r1, #1 - bl IsBlinded - mov r3, r0 - ldrsh r0, [r4, #2] - ldrsh r2, [r4, #0xe] - add r1, r4, #0x90 - bl PrintIqSkillsMenu - mov r5, #0x62 -_02388A2C: - bl sub_02041B7C - movs r7, r0 - bne _02388A44 - mov r0, r5 - bl AdvanceFrame - b _02388A2C -_02388A44: - bl sub_020420F4 - mov r0, r6 - bl ov29_023021F0 - ldr r0, [r6, #0xb4] - add r3, sp, #0 - add r0, r0, #0x9c - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - add r0, sp, #0xc - mov r1, #0x38 - bl IqSkillFlagTest - mov r5, r0 - add r0, sp, #0 - mov r1, #0x38 - bl IqSkillFlagTest - cmp r5, #0 - bne _02388AA8 - cmp r0, #0 - beq _02388AF8 - ldr r0, _02388BFC ; =_020A1870 - ldrsh r1, [r4, #0x16] - ldrsh r0, [r0] - add r0, r1, r0 - strh r0, [r4, #0x16] - b _02388AF8 -_02388AA8: - cmp r0, #0 - bne _02388AF8 - ldr r0, _02388BFC ; =_020A1870 - ldrsh r1, [r4, #0x16] - ldrsh r0, [r0] - ldr r2, _02388C00 ; =0x000003E7 - sub r0, r1, r0 - strh r0, [r4, #0x16] - ldrsh r1, [r4, #0x12] - ldrsh r0, [r4, #0x16] - add r1, r1, r0 - cmp r1, r2 - ldrsh r0, [r4, #0x10] - movle r2, r1 - cmp r0, r2 - ble _02388AF8 - ldr r0, _02388C00 ; =0x000003E7 - cmp r1, r0 - movgt r1, r0 - strh r1, [r4, #0x10] -_02388AF8: -#ifdef JAPAN - mov r0, #0x41 - bl TeamMemberHasEnabledIqSkill - ldr r2, _02389E78 ; =DUNGEON_PTR - mov r1, #0x39 - ldr r2, [r2] - add r2, r2, #0x1a000 - strb r0, [r2, #0x19d] - add r0, sp, #0xc -#else - bl UpdateMapSurveyorFlag - add r0, sp, #0xc - mov r1, #0x39 -#endif - bl IqSkillFlagTest - mov r5, r0 - add r0, sp, #0 - mov r1, #0x39 - bl IqSkillFlagTest - cmp r5, #0 - bne _02388B74 - cmp r0, #0 - beq _02388BE8 - mov r5, #0 -#ifdef JAPAN - add r3, r4, #0x120 -#else - add r3, r4, #0x124 -#endif - mov r1, r5 - mov r2, #1 -_02388B38: - ldrb r0, [r3, r5, lsl #3] - add r4, r3, r5, lsl #3 - tst r0, #1 - movne r0, r2 - moveq r0, r1 - tst r0, #0xff - ldrneh r0, [r4, #2] - orrne r0, r0, #0x100 - strneh r0, [r4, #2] - add r0, r5, #1 - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - cmp r5, #4 - blt _02388B38 - b _02388BE8 -_02388B74: - cmp r0, #0 - bne _02388BE8 - mov sb, #0 -#ifdef JAPAN - add r6, r4, #0x120 -#else - add r6, r4, #0x124 -#endif - mov r4, sb - mov r5, #1 -_02388B8C: - ldrb r0, [r6, sb, lsl #3] - add r8, r6, sb, lsl #3 - tst r0, #1 - movne r0, r5 - moveq r0, r4 - tst r0, #0xff - beq _02388BD4 - ldrh r1, [r8, #2] - mov r0, r8 - bic r1, r1, #0x100 - strh r1, [r8, #2] - bl GetMaxPp - ldrb r1, [r8, #6] - cmp r1, r0 - ble _02388BD4 - mov r0, r8 - bl GetMaxPp - strb r0, [r8, #6] -_02388BD4: - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov sb, r0, asr #0x10 - cmp sb, #4 - blt _02388B8C -_02388BE8: - cmp r7, #0 - movne r0, #1 - moveq r0, #0 - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02388BFC: .word _020A1870 -_02388C00: .word 0x000003E7 -#ifdef JAPAN -_02389E78: .word DUNGEON_PTR -#endif - arm_func_end ov31_023889DC - - arm_func_start RecruitmentSearchMenuLoop -RecruitmentSearchMenuLoop: ; 0x02388C04 - stmdb sp!, {r3, lr} - sub sp, sp, #0xa0 - ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r1, [r0] - ldr r0, [r1, #0xd94] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _02388D24 -_02388C24: ; jump table - b _02388C34 ; case 0 - b _02388CD0 ; case 1 - b _02388CF8 ; case 2 - b _02388D18 ; case 3 -_02388C34: - ldr r0, _02388D34 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x748] - bl IsRecruitingAllowed - cmp r0, #0 - ldreq r2, _02388D38 ; =0x00000B44 - ldreq r1, _02388D3C ; =ov29_0238280C - moveq r0, #4 - streqh r2, [r1] - beq _02388D28 - ldr r0, _02388D34 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75d] - cmp r0, #0 - ldrne r2, _02388D40 ; =0x00000B45 - ldrne r1, _02388D3C ; =ov29_0238280C - movne r0, #4 - strneh r2, [r1] - bne _02388D28 - ldr r1, _02388D44 ; =0x00000B46 - mov r0, #0x10 - strh r1, [sp, #0x10] - str r0, [sp, #0x14] - mov ip, #0 - str ip, [sp] - ldr r0, _02388D48 ; =DUNGEON_WINDOW_PARAMS_26 - ldr r1, _02388D4C ; =0x00001813 - ldr r3, _02388D50 ; =ov31_02388D54 - add r2, sp, #8 - str ip, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r2, [r1] - strb r0, [r2] - ldr r1, [r1] - ldr r0, [r1, #0xd94] - add r0, r0, #1 - str r0, [r1, #0xd94] - b _02388D24 -_02388CD0: - ldrsb r0, [r1] - bl IsAdvancedTextBoxActive - cmp r0, #0 - bne _02388D24 - ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r1, [r0] - ldr r0, [r1, #0xd94] - add r0, r0, #1 - str r0, [r1, #0xd94] - b _02388D24 -_02388CF8: - ldrsb r0, [r1] - bl CloseAdvancedTextBox - ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r1, [r0] - ldr r0, [r1, #0xd94] - add r0, r0, #1 - str r0, [r1, #0xd94] - b _02388D24 -_02388D18: - bl ov29_0234F77C - mov r0, #4 - b _02388D28 -_02388D24: - mov r0, #1 -_02388D28: - add sp, sp, #0xa0 - ldmia sp!, {r3, pc} - .align 2, 0 -#ifdef JAPAN -#define RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -0x4FE -#else -#define RECRUITMENT_SEARCH_MENU_LOOP_OFFSET 0 -#endif -_02388D30: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 -_02388D34: .word DUNGEON_PTR -_02388D38: .word 0x00000B44 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -_02388D3C: .word ov29_0238280C -_02388D40: .word 0x00000B45 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -_02388D44: .word 0x00000B46 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -_02388D48: .word DUNGEON_WINDOW_PARAMS_26 -_02388D4C: .word 0x00001813 -_02388D50: .word ov31_02388D54 - arm_func_end RecruitmentSearchMenuLoop - - arm_func_start ov31_02388D54 -ov31_02388D54: ; 0x02388D54 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xd4 - ldr r4, _02388E54 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - mov sl, r0 - ldr r0, [r4] - mov r8, #4 - ldr r0, [r0, #0xd90] - mov sb, #0x14 - cmp r0, #0 - beq _02388E30 - mov r7, #0 - add r6, sp, #0x44 - add fp, sp, #4 - add r5, sp, #0x84 - b _02388E1C -_02388D90: - add r0, r1, r7, lsl #1 - ldrsh r1, [r0, #4] - mov r0, r6 - bl GetSpeciesString - ldr r0, [r4] - add r0, r0, r7, lsl #1 - ldrsh r0, [r0, #4] - bl GetDexNumber - ldr r2, [r4] - str r0, [sp, #0xa8] - add r2, r2, r7 - ldrb r2, [r2, #0x90a] - ldr r1, _02388E58 ; =ov31_0238A154 - mov r0, fp - mov r3, r6 - bl ov31_02388E60 - mov r0, r6 - mov r1, #0x40 - mov r2, fp - mov r3, #0 - str r5, [sp] - bl PreprocessString - mov r0, sl - mov r1, r8 - mov r2, sb - mov r3, r6 - bl DrawTextInWindow - add sb, sb, #0xd - cmp sb, #0x7c - blt _02388E18 - cmp r8, #4 - bgt _02388E4C - mov r8, #0x74 - mov sb, #0x14 -_02388E18: - add r7, r7, #1 -_02388E1C: - ldr r1, [r4] - ldr r0, [r1, #0xd90] - cmp r7, r0 - blt _02388D90 - b _02388E4C -_02388E30: - ldr r0, _02388E5C ; =0x00000B47 - bl StringFromId - mov r3, r0 - mov r0, sl - mov r1, r8 - mov r2, sb - bl DrawTextInWindow -_02388E4C: - add sp, sp, #0xd4 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02388E54: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 -_02388E58: .word ov31_0238A154 -#ifdef JAPAN -_02388E5C: .word 0x00000649 -#else -_02388E5C: .word 0x00000B47 -#endif - arm_func_end ov31_02388D54 - - arm_func_start ov31_02388E60 -ov31_02388E60: ; 0x02388E60 - 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 ov31_02388E60 - - arm_func_start ov31_02388E88 -ov31_02388E88: ; 0x02388E88 -#ifdef JAPAN -#define OV31_02388E88_OFFSET -0x50 -#else -#define OV31_02388E88_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x84 - sub sp, sp, #0x400 - ldr r0, _02389164 ; =OVERLAY31_UNKNOWN_STRUCT__NA_238A144 - bl sub_020348E4 - cmp r0, #0 - beq _02389158 - ldr r0, _02389168 ; =0x00000D98 - mov r1, #8 - bl MemAlloc - ldr r1, _0238916C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - mov r3, #0 - str r0, [r1] - add r5, r0, #4 - ldr r0, _02389170 ; =0x00000483 - mov r4, r3 - add r1, sp, #0 -_02388ECC: - add r2, r5, r3 - strb r4, [r1, r3] - add r3, r3, #1 - strb r4, [r2, #0x906] - cmp r3, r0 - blt _02388ECC - mov sb, #1 - mov r8, #2 - add r7, sp, #0 - ldr r6, _02389174 ; =DUNGEON_PTR - b _02388F3C -_02388EF8: - ldr r1, [r6] - mov sl, sb - add r1, r1, r4, lsl #3 - add r1, r1, #0x3900 - ldrsh r2, [r1, #0x76 + OV31_02388E88_OFFSET] - ldrsh r1, [r1, #0x78 + OV31_02388E88_OFFSET] - cmp r2, #0 - cmpeq r1, #0 - beq _02388F38 - add r0, r0, #0x174 + OV31_02388E88_OFFSET - add r0, r0, #0x3800 - add r0, r0, r4, lsl #3 - cmp r2, #0 - moveq sl, r8 - bl GetMonsterIdFromSpawnEntry - strb sl, [r7, r0] -_02388F38: - add r4, r4, #1 -_02388F3C: - ldr r0, [r6] - add r1, r0, #0x3000 -#ifdef JAPAN - ldr r1, [r1, #0xd7c] -#else - ldr r1, [r1, #0xe20] -#endif - cmp r4, r1 - blt _02388EF8 - ldrb r0, [r0, #0x790] - cmp r0, #0 - beq _02388F6C - bl GetKecleonIdToSpawnByFloor - add r1, sp, #0 - mov r2, #1 - strb r2, [r1, r0] -_02388F6C: - ldr r0, _02389174 ; =DUNGEON_PTR - mov sl, #0 - ldr r0, [r0] -#ifdef JAPAN - mov r8, #1 -#else - mov sb, #1 -#endif - add r0, r0, #0x700 - ldrsh r2, [r0, #0xa8] - cmp r2, #0 - addne r0, sp, #0 - movne r1, #1 - strneb r1, [r0, r2] -_02388F94: -#ifdef JAPAN - mov r0, r8, lsl #0x10 - add r1, sp, #0 - ldrb r1, [r1, r0, asr #16] - mov r7, r0, asr #0x10 -#else - mov r0, sb, lsl #0x10 - add r1, sp, #0 - ldrb r1, [r1, r0, asr #16] - mov r8, r0, asr #0x10 -#endif - mov r6, #0x44 - cmp r1, #0 - mov r4, #0 - beq _023890B4 -#ifdef JAPAN - mov r0, r7 -#else - mov r0, r8 -#endif - bl SpecificRecruitCheck - cmp r0, #0 - beq _023890B4 -#ifdef JAPAN - mov r0, r7 -#else - mov r0, r8 -#endif - bl CanMonsterSpawn - cmp r0, #0 - beq _023890B4 -#ifdef JAPAN - mov r0, r7 -#else - mov r0, r8 -#endif - bl GetRecruitRate2 - ldr r1, _02389178 ; =0xFFFFFC19 - cmp r0, r1 - beq _023890B4 -#ifdef JAPAN - mov sb, r4 - ldr fp, _0238A43C ; =0x0000022B - b _0238A2A8 -_0238A26C: - mov r0, sb, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetTeamMember - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _0238A2A4 - ldrsh r1, [r0, #4] - mov r0, r7 - bl BaseFormsEqual - cmp r0, #0 - bne _0238A2B0 -_0238A2A4: - add sb, sb, #1 -_0238A2A8: - cmp sb, fp - blt _0238A26C -_0238A2B0: - ldr r0, _0238A43C ; =0x0000022B - cmp sb, r0 - movne r4, #1 - cmp r4, #0 - bne _0238906C - mov sb, #0 - b _0238905C -_0238900C: - mov r0, sb, lsl #0x10 -#else - mov r0, r8 - mov r1, #1 - bl IsMonsterOnTeam - cmp r0, #0 - movne r4, #1 - cmp r4, #0 - bne _0238906C - mov r7, #0 - b _0238905C -_0238900C: - mov r0, r7, lsl #0x10 -#endif - mov r0, r0, asr #0x10 - bl GetActiveTeamMember - mov fp, r0 - ldrb r0, [fp] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02389058 - ldrsh r0, [fp, #8] - bl CheckTeamMemberIdxVeneer - cmp r0, #0 - bne _02389058 - ldrsh r1, [fp, #0xc] -#ifdef JAPAN - mov r0, r7 - bl BaseFormsEqual - cmp r0, #0 - bne _02389064 -_02389058: - add sb, sb, #1 -_0238905C: - cmp sb, #4 - blt _0238900C -_02389064: - cmp sb, #4 - movne r4, #1 -_0238906C: - add sb, r5, sl - ldrb r0, [sb, #0x906] -#else - mov r0, r8 - bl BaseFormsEqual - cmp r0, #0 - bne _02389064 -_02389058: - add r7, r7, #1 -_0238905C: - cmp r7, #4 - blt _0238900C -_02389064: - cmp r7, #4 - movne r4, #1 -_0238906C: - add r7, r5, sl - ldrb r0, [r7, #0x906] -#endif - cmp r4, #0 - movne r6, #0x46 - cmp r6, r0 - bne _023890A4 -#ifdef JAPAN - mov r0, r7 -#else - mov r0, r8 -#endif - bl GetDexNumber - mov r1, sl, lsl #1 - mov r4, r0 - ldrsh r0, [r5, r1] - bl GetDexNumber - cmp r4, r0 - beq _023890B4 -_023890A4: - mov r0, sl, lsl #1 -#ifdef JAPAN - strh r7, [r5, r0] - strb r6, [sb, #0x906] -#else - strh r8, [r5, r0] - strb r6, [r7, #0x906] -#endif - add sl, sl, #1 -_023890B4: - ldr r0, _02389170 ; =0x00000483 -#ifdef JAPAN - add r8, r8, #1 - cmp r8, r0 -#else - add sb, sb, #1 - cmp sb, r0 -#endif - blt _02388F94 - add r0, r5, #6 - str sl, [r5, #0xd8c] - add r6, r0, #0x900 - mov r8, #0 - b _02389140 -_023890D8: - add r7, r8, #1 - mov fp, r8, lsl #1 - b _02389134 -_023890E4: - mov r1, r7, lsl #1 - ldrsh r0, [r5, r1] - ldrsh sb, [r5, r1] - bl GetDexNumber - mov r4, r0 - ldrsh r0, [r5, fp] - bl GetDexNumber - ldrsh r2, [r5, fp] - add r1, sb, r4, lsl #11 - add r0, r2, r0, lsl #11 - cmp r1, r0 - bge _02389130 - ldrb r1, [r6, r7] - mov r0, r7, lsl #1 - strh r2, [r5, r0] - ldrb r0, [r6, r8] - strb r0, [r6, r7] - strh sb, [r5, fp] - strb r1, [r6, r8] -_02389130: - add r7, r7, #1 -_02389134: - cmp r7, sl - blt _023890E4 - add r8, r8, #1 -_02389140: - cmp r8, sl - blt _023890D8 - ldr r0, _0238916C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0xd94] -_02389158: - add sp, sp, #0x84 - add sp, sp, #0x400 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02389164: .word OVERLAY31_UNKNOWN_STRUCT__NA_238A144 -_02389168: .word 0x00000D98 -_0238916C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 -_02389170: .word 0x00000483 -_02389174: .word DUNGEON_PTR -_02389178: .word 0xFFFFFC19 -#ifdef JAPAN -_0238A43C: .word 0x0000022B -#endif - arm_func_end ov31_02388E88 - - arm_func_start ov31_0238917C -ov31_0238917C: ; 0x0238917C - stmdb sp!, {r3, lr} - ldr r0, _023891A4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _023891A4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_023891A4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 - arm_func_end ov31_0238917C - - arm_func_start ov31_023891A8 -ov31_023891A8: ; 0x023891A8 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl sub_02030A18 - mov r4, r0 - ldr r0, _023891F8 ; =DUNGEON_SUBMENU_ITEMS_6 - mov r1, r4, lsl #3 - ldrh r1, [r0, r1] - mov r0, r5 - bl sub_02030A2C -#if defined(EUROPE) - add r0, r4, #0xb2 - add r0, r0, #0x3f00 -#elif defined(JAPAN) - add r0, r4, #0xb3 - add r0, r0, #0x4900 -#else - add r0, r4, #0xfb0 - add r0, r0, #0x3000 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r3, r0 - mov r0, r5 - mov r1, #4 - mov r2, #0x10 - bl DrawTextInWindow - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023891F8: .word DUNGEON_SUBMENU_ITEMS_6 - arm_func_end ov31_023891A8 - - arm_func_start HelpMenuLoop -HelpMenuLoop: ; 0x023891FC - stmdb sp!, {r4, lr} - sub sp, sp, #0xa0 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r2, [r0] - ldr r0, [r2, #8] - cmp r0, #6 - addls pc, pc, r0, lsl #2 - b _023893F0 -_0238921C: ; jump table - b _02389238 ; case 0 - b _023892B8 ; case 1 - b _02389278 ; case 2 - b _02389344 ; case 3 - b _023893A8 ; case 4 - b _023893DC ; case 5 - b _023893DC ; case 6 -_02389238: - ldr ip, _02389400 ; =0x00003FA7 - mov r4, #0x10 - ldr r0, _02389404 ; =DUNGEON_WINDOW_PARAMS_27 - ldr r1, _02389408 ; =0x00401813 - ldr r3, _0238940C ; =DUNGEON_SUBMENU_ITEMS_6 - add r2, sp, #8 - strh ip, [sp, #0x10] - str r4, [sp, #0x14] - bl CreateParentMenuFromStringIds - ldr r1, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r2, #1 - ldr r3, [r1] - strb r0, [r3] - ldr r0, [r1] - str r2, [r0, #8] - b _023893F0 -_02389278: - ldrsb r0, [r2] - bl sub_02028354 - cmp r0, #3 - bne _02389298 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202810C -_02389298: - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl ResumeParentMenu - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #1 - ldr r0, [r0] - str r1, [r0, #8] -_023892B8: - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl IsParentMenuActive - cmp r0, #0 - bne _023893F0 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202ABB0 - movs r4, r0 - bmi _02389320 - bl sub_02001808 - cmp r0, #0xa000 - ldrlt r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - movlt r1, #2 - ldrlt r0, [r0] - strlt r1, [r0, #8] - blt _023893F0 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #3 - ldr r2, [r0] - str r4, [r2, #4] - ldr r0, [r0] - str r1, [r0, #8] - b _02389330 -_02389320: - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #6 - ldr r0, [r0] - str r1, [r0, #8] -_02389330: - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202812C - b _023893F0 -_02389344: - mov r0, #0x10 - str r0, [sp, #0x14] - ldr r1, [r2, #4] - ldr r0, _0238940C ; =DUNGEON_SUBMENU_ITEMS_6 - mov r1, r1, lsl #3 - ldrh r1, [r0, r1] - mov ip, #8 - ldr r0, _02389410 ; =DUNGEON_WINDOW_PARAMS_28 - strh r1, [sp, #0x10] - ldr r2, [r2, #4] - ldr r1, _02389414 ; =0x00009833 - str r2, [sp, #8] - str ip, [sp] - mov ip, #1 - ldr r3, _02389418 ; =ov31_023891A8 - add r2, sp, #8 - str ip, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r2, #4 - ldr r3, [r1] - strb r0, [r3, #1] - ldr r0, [r1] - str r2, [r0, #8] - b _023893F0 -_023893A8: - ldrsb r0, [r2, #1] - bl IsAdvancedTextBoxActive - cmp r0, #0 - bne _023893F0 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0, #1] - bl CloseAdvancedTextBox - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #2 - ldr r0, [r0] - str r1, [r0, #8] - b _023893F0 -_023893DC: - ldrsb r0, [r2] - bl CloseParentMenu - bl ov29_0234F77C - mov r0, #4 - b _023893F4 -_023893F0: - mov r0, #1 -_023893F4: - add sp, sp, #0xa0 - ldmia sp!, {r4, pc} - .align 2, 0 -_023893FC: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C -#if defined(EUROPE) -_02389400: .word 0x00003FA9 -#elif defined(JAPAN) -_02389400: .word 0x000049AA -#else -_02389400: .word 0x00003FA7 -#endif -_02389404: .word DUNGEON_WINDOW_PARAMS_27 -_02389408: .word 0x00401813 -_0238940C: .word DUNGEON_SUBMENU_ITEMS_6 -_02389410: .word DUNGEON_WINDOW_PARAMS_28 -_02389414: .word 0x00009833 -_02389418: .word ov31_023891A8 - arm_func_end HelpMenuLoop - - arm_func_start ov31_0238941C -ov31_0238941C: ; 0x0238941C - stmdb sp!, {r3, lr} - ldr r0, _02389458 ; =OVERLAY31_UNKNOWN_STRUCT__NA_238A190 - bl sub_020348E4 - cmp r0, #0 - ldmeqia sp!, {r3, pc} - mov r0, #0xc - mov r1, #8 - bl MemAlloc - ldr r1, _0238945C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r2, #0 - str r0, [r1] - str r2, [r0, #4] - ldr r0, [r1] - str r2, [r0, #8] - ldmia sp!, {r3, pc} - .align 2, 0 -_02389458: .word OVERLAY31_UNKNOWN_STRUCT__NA_238A190 -_0238945C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C - arm_func_end ov31_0238941C - - arm_func_start ov31_02389460 -ov31_02389460: ; 0x02389460 - stmdb sp!, {r3, lr} - ldr r0, _02389488 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _02389488 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02389488: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C - arm_func_end ov31_02389460 - - arm_func_start ov31_0238948C -ov31_0238948C: ; 0x0238948C - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x134 -#ifdef JAPAN - mov r5, r0 - mov r0, #0x410 - mov r1, #8 - bl MemAlloc - mov r1, #0x410 - mov r4, r0 - bl MemZero - mvn r1, #1 - strb r1, [r4] - add r0, r4, #0x30c - strb r1, [r4, #1] - bl ov31_02389D80 - mov r0, #0 - str r0, [r4, #0x40c] - strb r0, [r4, #0x408] - bl ov29_022EA62C - mov r0, r4 - mov r1, r5 - bl ov31_02389A78 - ldr r1, [r4, #0x40c] - mov r0, #8 - str r1, [r4, #0x3cc] - str r0, [r4, #0x3d0] - mov r1, #0 - str r1, [r4, #0x3d4] - str r1, [r4, #0x3d8] - str r1, [r4, #0x3bc] - mov r0, #0x10 - str r0, [r4, #0x3c0] - mov r0, r4 - str r1, [r4, #0x3c8] - bl ov29_0234E988 - add r0, sp, #0xac - bl InitPreprocessorArgs - ldrb r0, [r4, #0x408] - cmp r0, #0 - ldrne r1, _023898F0 ; =0x0000158C - mov r0, #0x10 - ldreq r1, _023898F4 ; =0x0000158B - str r0, [sp, #0xa8] - strh r1, [sp, #0xa4] - ldrb r0, [r4, #0x408] - cmp r0, #0 - bne _0238A820 - ldr r1, [r4, #0x404] - add r0, r4, #0x78 - ldr r1, [r1, #0xb4] - bl GetMonsterName - add r0, r4, #0x78 - str r0, [sp, #0xe4] -_0238A820: - ldr r0, _023898F8 ; =DUNGEON_WINDOW_PARAMS_31 - ldr r1, _023898FC ; =0x80401813 - add r2, sp, #0x9c - add r3, r4, #0xc4 - bl CreateParentMenu - strb r0, [r4] -_0238A838: - mov r0, #0x3d - bl AdvanceFrame - ldr r0, [r4, #0x404] - bl ov29_0234FB50 - mov r7, r0 - add r1, sp, #0 - mov r0, #0 - bl GetPressedButtons - ldrsb r0, [r4] - bl IsParentMenuActive - cmp r0, #0 - bne _0238AA84 - ldrsb r0, [r4] - bl sub_0202ABB0 - movs r6, r0 - bmi _0238AA78 - ldrsb r0, [r4] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r4, #0x3c8] - add r1, r4, r0 - add r0, r4, #0x30c - ldrb r5, [r1, #0xb8] - bl ov31_02389D80 - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 - bl ov29_022EBA70 - mov r0, #0x2f - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0xc - mov r1, #0 - bl AddDungeonSubMenuOption - cmp r7, #0 - beq _0238A8CC - mov r0, #0x2f - bl DisableDungeonSubMenuOption -_0238A8CC: - add r1, r4, #0x6c - add r0, r4, #4 - mov r2, #0 - str r1, [sp, #0x64] - bl ov31_0238513C - bl ov29_022EBA84 - mov r3, #0 - b _0238A8FC -_0238A8EC: - add r2, r3, #1 - add r1, r4, r3, lsl #3 - mov r3, r2 - str r2, [r1, #8] -_0238A8FC: - cmp r3, r0 - blt _0238A8EC - ldr r0, _02389904 ; =0x00000877 - add r2, r4, r3, lsl #3 - strh r0, [r2, #4] - mvn r1, #1 - mov r0, #0 - str r1, [r2, #8] - strh r0, [r2, #0xc] - sub r1, r0, #1 - add r0, r4, #1 - str r1, [r2, #0x10] - bl ov29_0234E988 - ldr r0, _02389908 ; =0x0238B4C0 - ldr r1, _0238990C ; =0x80000213 - add r2, sp, #4 - add r3, r4, #4 - bl CreateParentMenuFromStringIds - strb r0, [r4, #1] - mvn r8, #0 - mov r7, #0x3d -_0238A950: - mov r0, r7 - bl AdvanceFrame - ldrsb r0, [r4, #1] - bl IsParentMenuActive - cmp r0, #0 - bne _0238A950 - ldrsb r0, [r4, #1] - bl sub_0202ABB0 - subs r1, r0, #1 - bmi _0238A998 - ldrsb r0, [r4, #1] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r4, #0x3c8] - bl ov29_022EB804 - cmp r0, #0 - movne r8, #0 - b _0238A9AC -_0238A998: - mvn r0, #2 - cmp r1, r0 - bne _0238A9AC - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 -_0238A9AC: - cmp r8, #0 - bge _0238A9C8 - add r0, r4, #1 - bl ov29_0234E988 - ldrsb r0, [r4] - bl ResumeParentMenu - b _0238AB68 -_0238A9C8: - ldr r0, [r4, #0x3c8] - cmp r0, #0 - bne _0238AA3C - ldr r0, _02389910 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldrb r0, [r4, #0x408] - cmp r0, #0 - beq _0238A9F8 - mov r0, r5 - bl ov31_02389C68 - b _0238AA04 -_0238A9F8: - ldr r0, [r4, #0x404] - mov r1, r5 - bl ov31_02389C2C -_0238AA04: - ldr r1, [r4, #0x404] - mov r0, r4 - bl ov31_02389A78 - add r0, r4, #1 - bl ov29_0234E988 - ldrsb r0, [r4] - bl ResumeParentMenu - ldrsb r0, [r4] - add r1, r4, #0xc4 - bl sub_0202A98C - ldrsb r0, [r4] - sub r1, r6, #1 - bl sub_0202AB94 - b _0238AB68 -_0238AA3C: - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 - bl sub_02001808 - cmp r0, #0xa000 - bge _0238AA64 - add r0, r4, #1 - bl ov29_0234E988 - ldrsb r0, [r4] - bl ResumeParentMenu - b _0238AB68 -_0238AA64: - ldrsb r1, [r4] - mov r0, r5 - mov r2, #1 - bl ov31_02389CC0 - b _0238AB68 -_0238AA78: - bl ov29_022EAC78 - mov r0, #1 - b _0238AB6C -_0238AA84: - ldrh r0, [sp] - tst r0, #8 - beq _0238AADC - ldr r0, _02389914 ; =0x00003F04 - bl ov29_022EACCC - bl sub_02001808 - cmp r0, #0xa000 - blt _0238AB68 - ldrsb r0, [r4] - bl sub_0202B030 - mov r0, #0x3d - bl AdvanceFrame - ldrsb r0, [r4] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r4, #0x3c8] - add r0, r4, r0 - ldrb r0, [r0, #0xb8] - ldrsb r1, [r4] - mov r2, #1 - bl ov31_02389CC0 - b _0238AB68 -_0238AADC: - tst r0, #4 - beq _0238AB68 - cmp r7, #0 - beq _0238AAFC - ldr r0, _02389918 ; =0x00003F03 - mov r1, #0x100 - bl sub_02017C74 - b _0238AB68 -_0238AAFC: - ldrsb r0, [r4] - bl sub_0202B030 - ldrsb r0, [r4] - bl sub_0202ABB0 - mov r5, r0 - ldr r0, _02389910 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldrb r0, [r4, #0x408] - cmp r0, #0 - add r0, r4, r5 - beq _0238AB38 - ldrb r0, [r0, #0xb7] - bl ov31_02389C68 - b _0238AB44 -_0238AB38: - ldrb r1, [r0, #0xb7] - ldr r0, [r4, #0x404] - bl ov31_02389C2C -_0238AB44: - ldr r1, [r4, #0x404] - mov r0, r4 - bl ov31_02389A78 - ldrsb r0, [r4] - add r1, r4, #0xc4 - bl sub_0202A98C - ldrsb r0, [r4] - sub r1, r5, #1 - bl sub_0202AB94 -_0238AB68: - mov r0, #0 -_0238AB6C: - cmp r0, #0 - beq _0238A838 - add r0, r4, #1 - bl ov29_0234E988 - mov r0, r4 - bl ov29_0234E988 - mov r0, #0x3d - bl AdvanceFrame - add r0, r4, #1 - bl ov29_0234E988 - mov r0, r4 - bl ov29_0234E988 - mov r0, r4 -#else - mov r4, r0 - mov r0, #0x530 - mov r1, #8 - bl MemAlloc - mov r5, r0 - mov r1, #0x530 - bl MemZero - add r0, r5, #0x2c - mvn r1, #1 - strb r1, [r5] - add r0, r0, #0x400 - strb r1, [r5, #1] - bl ov31_02389D80 - mov r0, #0 - str r0, [r5, #0x52c] - strb r0, [r5, #0x528] - bl ov29_022EA62C - mov r0, r5 - mov r1, r4 - bl ov31_02389A78 - ldr r1, [r5, #0x52c] - mov r0, #8 - str r1, [r5, #0x4ec] - str r0, [r5, #0x4f0] - mov r1, #0 - str r1, [r5, #0x4f4] - str r1, [r5, #0x4f8] - str r1, [r5, #0x4dc] - mov r0, #0x10 - str r0, [r5, #0x4e0] - mov r0, r5 - str r1, [r5, #0x4e8] - bl ov29_0234E988 - add r0, sp, #0xac - bl InitPreprocessorArgs - ldrb r0, [r5, #0x528] - cmp r0, #0 - ldrne r1, _023898F0 ; =0x00000F5F - mov r0, #0x10 - ldreq r1, _023898F4 ; =0x00000F5E - str r0, [sp, #0xa8] - strh r1, [sp, #0xa4] - ldrb r0, [r5, #0x528] - cmp r0, #0 - bne _02389560 - ldr r1, [r5, #0x524] - add r0, r5, #0x78 - ldr r1, [r1, #0xb4] - bl GetMonsterName - add r0, r5, #0x78 - str r0, [sp, #0xe4] -_02389560: - ldr r0, _023898F8 ; =DUNGEON_WINDOW_PARAMS_31 - ldr r1, _023898FC ; =0x80401813 - add r2, sp, #0x9c - add r3, r5, #0xc4 - bl CreateParentMenu - strb r0, [r5] -_02389578: - mov r0, #0x3d - bl AdvanceFrame - ldr r0, [r5, #0x524] - bl ov29_0234FB50 - mov r4, r0 - add r1, sp, #0 - mov r0, #0 - bl GetPressedButtons - ldrsb r0, [r5] - bl IsParentMenuActive - cmp r0, #0 - bne _023897C8 - ldrsb r0, [r5] - bl sub_0202ABB0 - movs r7, r0 - bmi _023897BC - ldrsb r0, [r5] - bl sub_0202ABB0 - sub r1, r0, #1 - add r0, r5, #0x2c - str r1, [r5, #0x4e8] - add r1, r5, r1 - add r0, r0, #0x400 - ldrb r6, [r1, #0xb8] - bl ov31_02389D80 - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 - bl ov29_022EBA70 - mov r0, #0x2f - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0xc - mov r1, #0 - bl AddDungeonSubMenuOption - cmp r4, #0 - beq _02389610 - mov r0, #0x2f - bl DisableDungeonSubMenuOption -_02389610: - add r1, r5, #0x6c - add r0, r5, #4 - mov r2, #0 - str r1, [sp, #0x64] - bl ov31_0238513C - bl ov29_022EBA84 - mov r3, #0 - b _02389640 -_02389630: - add r2, r3, #1 - add r1, r5, r3, lsl #3 - mov r3, r2 - str r2, [r1, #8] -_02389640: - cmp r3, r0 - blt _02389630 - ldr r0, _02389904 ; =0x00000A3C - add r2, r5, r3, lsl #3 - strh r0, [r2, #4] - mvn r1, #1 - mov r0, #0 - str r1, [r2, #8] - strh r0, [r2, #0xc] - sub r1, r0, #1 - add r0, r5, #1 - str r1, [r2, #0x10] - bl ov29_0234E988 - ldr r0, _02389908 ; =DUNGEON_WINDOW_PARAMS_30 - ldr r1, _0238990C ; =0x80000213 - add r2, sp, #4 - add r3, r5, #4 - bl CreateParentMenuFromStringIds - strb r0, [r5, #1] - mvn r8, #0 - mov r4, #0x3d -_02389694: - mov r0, r4 - bl AdvanceFrame - ldrsb r0, [r5, #1] - bl IsParentMenuActive - cmp r0, #0 - bne _02389694 - ldrsb r0, [r5, #1] - bl sub_0202ABB0 - subs r1, r0, #1 - bmi _023896DC - ldrsb r0, [r5, #1] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r5, #0x4e8] - bl ov29_022EB804 - cmp r0, #0 - movne r8, #0 - b _023896F0 -_023896DC: - mvn r0, #2 - cmp r1, r0 - bne _023896F0 - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 -_023896F0: - cmp r8, #0 - bge _0238970C - add r0, r5, #1 - bl ov29_0234E988 - ldrsb r0, [r5] - bl ResumeParentMenu - b _023898AC -_0238970C: - ldr r0, [r5, #0x4e8] - cmp r0, #0 - bne _02389780 - ldr r0, _02389910 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldrb r0, [r5, #0x528] - cmp r0, #0 - beq _0238973C - mov r0, r6 - bl ov31_02389C68 - b _02389748 -_0238973C: - ldr r0, [r5, #0x524] - mov r1, r6 - bl ov31_02389C2C -_02389748: - ldr r1, [r5, #0x524] - mov r0, r5 - bl ov31_02389A78 - add r0, r5, #1 - bl ov29_0234E988 - ldrsb r0, [r5] - bl ResumeParentMenu - ldrsb r0, [r5] - add r1, r5, #0xc4 - bl sub_0202A98C - ldrsb r0, [r5] - sub r1, r7, #1 - bl sub_0202AB94 - b _023898AC -_02389780: - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 - bl sub_02001808 - cmp r0, #0xa000 - bge _023897A8 - add r0, r5, #1 - bl ov29_0234E988 - ldrsb r0, [r5] - bl ResumeParentMenu - b _023898AC -_023897A8: - ldrsb r1, [r5] - mov r0, r6 - mov r2, #1 - bl ov31_02389CC0 - b _023898AC -_023897BC: - bl ov29_022EAC78 - mov r0, #1 - b _023898B0 -_023897C8: - ldrh r0, [sp] - tst r0, #8 - beq _02389820 - ldr r0, _02389914 ; =0x00003F04 - bl ov29_022EACCC - bl sub_02001808 - cmp r0, #0xa000 - blt _023898AC - ldrsb r0, [r5] - bl sub_0202B030 - mov r0, #0x3d - bl AdvanceFrame - ldrsb r0, [r5] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r5, #0x4e8] - add r0, r5, r0 - ldrb r0, [r0, #0xb8] - ldrsb r1, [r5] - mov r2, #1 - bl ov31_02389CC0 - b _023898AC -_02389820: - tst r0, #4 - beq _023898AC - cmp r4, #0 - beq _02389840 - ldr r0, _02389918 ; =0x00003F03 - mov r1, #0x100 - bl sub_02017C74 - b _023898AC -_02389840: - ldrsb r0, [r5] - bl sub_0202B030 - ldrsb r0, [r5] - bl sub_0202ABB0 - mov r4, r0 - ldr r0, _02389910 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldrb r0, [r5, #0x528] - cmp r0, #0 - add r0, r5, r4 - beq _0238987C - ldrb r0, [r0, #0xb7] - bl ov31_02389C68 - b _02389888 -_0238987C: - ldrb r1, [r0, #0xb7] - ldr r0, [r5, #0x524] - bl ov31_02389C2C -_02389888: - ldr r1, [r5, #0x524] - mov r0, r5 - bl ov31_02389A78 - ldrsb r0, [r5] - add r1, r5, #0xc4 - bl sub_0202A98C - ldrsb r0, [r5] - sub r1, r4, #1 - bl sub_0202AB94 -_023898AC: - mov r0, #0 -_023898B0: - cmp r0, #0 - beq _02389578 - add r0, r5, #1 - bl ov29_0234E988 - mov r0, r5 - bl ov29_0234E988 - mov r0, #0x3d - bl AdvanceFrame - add r0, r5, #1 - bl ov29_0234E988 - mov r0, r5 - bl ov29_0234E988 - mov r0, r5 -#endif - bl MemFree - add sp, sp, #0x134 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -_023898F0: .word 0x0000158C -_023898F4: .word 0x0000158B -#else -_023898F0: .word 0x00000F5F -_023898F4: .word 0x00000F5E -#endif -_023898F8: .word DUNGEON_WINDOW_PARAMS_31 -_023898FC: .word 0x80401813 -_02389900: .word 0x00003F02 -#ifdef JAPAN -_02389904: .word 0x00000877 -#else -_02389904: .word 0x00000A3C -#endif -_02389908: .word DUNGEON_WINDOW_PARAMS_30 -_0238990C: .word 0x80000213 -_02389910: .word 0x00003F07 -_02389914: .word 0x00003F04 -_02389918: .word 0x00003F03 - arm_func_end ov31_0238948C - - arm_func_start ov31_0238991C -ov31_0238991C: ; 0x0238991C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r0, #2 - mov r1, #8 - bl MemAlloc - mov r1, r5 - mov r2, r4 - mov r4, r0 - bl ov31_0238994C - mov r0, r4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov31_0238991C - - arm_func_start ov31_0238994C -ov31_0238994C: ; 0x0238994C - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x10 - mov r3, r2, asr #2 - mov r4, r0 - mov r0, r1, asr #2 - add r2, r2, r3, lsr #29 - add ip, r1, r0, lsr #29 - ldr r6, _023899B0 ; =DUNGEON_WINDOW_PARAMS_32 - mov lr, r2, asr #3 - add r5, sp, #0 - ldmia r6, {r0, r1, r2, r3} - stmia r5, {r0, r1, r2, r3} - mov ip, ip, asr #3 - add r3, lr, #1 - ldr r1, _023899B4 ; =ov31_02389A04 - mov r0, r5 - mov r2, r4 - strb ip, [sp, #4] - strb r3, [sp, #5] - bl CreateTextBoxWithArg - strb r0, [r4] - mov r0, #0xb - strb r0, [r4, #1] - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_023899B0: .word DUNGEON_WINDOW_PARAMS_32 -_023899B4: .word ov31_02389A04 - arm_func_end ov31_0238994C - - arm_func_start ov31_023899B8 -ov31_023899B8: ; 0x023899B8 - stmdb sp!, {r3, lr} - strb r1, [r0, #1] - cmp r2, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - bl sub_0202F9B8 - ldmia sp!, {r3, pc} - arm_func_end ov31_023899B8 - - arm_func_start ov31_023899D4 -ov31_023899D4: ; 0x023899D4 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r4, [r5] - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldrsb r0, [r4] - bl CloseTextBox2 - mov r0, r4 - bl MemFree - mov r0, #0 - str r0, [r5] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov31_023899D4 - - arm_func_start ov31_02389A04 -ov31_02389A04: ; 0x02389A04 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x94 - mov r5, r0 - mov r4, r1 - bl sub_02027B1C - add r0, sp, #0x44 - bl InitPreprocessorArgs - ldrb r0, [r4, #1] - ldr r3, _02389A70 ; =0x0000C402 - add ip, sp, #0x44 - cmp r0, #0xb - strne r0, [sp, #0x54] -#ifdef JAPAN - ldreq r2, _0238AD30 ; =0x0000158D - add r0, sp, #4 - ldrne r2, _02389A74 ; =0x0000158E -#else - moveq r2, #0xf60 - ldrne r2, _02389A74 ; =0x00000F61 - add r0, sp, #4 -#endif - mov r1, #0x40 - str ip, [sp] - bl PreprocessStringFromId - add r3, sp, #4 - mov r0, r5 - mov r1, #4 - mov r2, #2 - bl DrawTextInWindow - mov r0, r5 - bl UpdateWindow - add sp, sp, #0x94 - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_02389A70: .word 0x0000C402 -#ifdef JAPAN -_0238AD30: .word 0x0000158D -_02389A74: .word 0x0000158E -#else -_02389A74: .word 0x00000F61 -#endif - arm_func_end ov31_02389A04 - - arm_func_start ov31_02389A78 -ov31_02389A78: ; 0x02389A78 -#ifdef JAPAN -#define OV31_02389A78_OFFSET -0x120 -#else -#define OV31_02389A78_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x70 - mov sb, r1 - ldr r4, [sb, #0xb4] - mov sl, r0 - ldrb r0, [r4, #7] - strb r0, [sl, #0x528 + OV31_02389A78_OFFSET] - bl GetLeaderMonster - ldrb r1, [r0, #0xa] - add r0, sp, #0x14 - bl GetUnlockedTactics - ldrb r0, [sl, #0x528 + OV31_02389A78_OFFSET] - cmp r0, #0 - beq _02389B64 - mov r6, #0 - bl GetLeaderMonster - ldrb r1, [r0, #0xa] - add r0, sp, #8 - bl GetUnlockedTactics - ldr r4, _02389C20 ; =DUNGEON_PTR - mov r7, r6 - add r5, sp, #4 -_02389AD0: - ldr r0, [r4] - add r0, r0, r7, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r8, [r0, #0xa84] -#else - ldr r8, [r0, #0xb28] -#endif - mov r0, r8 - bl ov29_0234FB60 - cmp r0, #0 - beq _02389B08 - ldr r1, [r8, #0xb4] - add r0, r6, #1 - ldrb r1, [r1, #0xa8] - mov r0, r0, lsl #0x10 - strb r1, [r5, r6] - mov r6, r0, asr #0x10 -_02389B08: - add r0, r7, #1 - mov r0, r0, lsl #0x10 - mov r7, r0, asr #0x10 - cmp r7, #4 - blt _02389AD0 - cmp r6, #0 - moveq r6, #0xb - beq _02389B68 - mov r3, #1 - ldrb r2, [sp, #4] - add r1, sp, #4 - b _02389B54 -_02389B38: - ldrb r0, [r1, r3] - cmp r2, r0 - movne r6, #0xb - bne _02389B68 - add r0, r3, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 -_02389B54: - cmp r3, r6 - blt _02389B38 - ldrb r6, [sp, #4] - b _02389B68 -_02389B64: - ldrb r6, [r4, #0xa8] -_02389B68: - mov r8, #0 - add r4, sl, #0x12c - add fp, sp, #0x14 - add r5, sp, #0x20 - b _02389BF4 -_02389B7C: - ldrb r1, [fp, r8] - add r0, sl, r8 - strb r1, [r0, #0xb8] - cmp r1, #0xb - beq _02389BFC - str r1, [sp, #0x30] - cmp r6, #0xb - beq _02389BC4 - cmp r6, r1 - bne _02389BC4 -#ifdef JAPAN - mov r0, #0x28 - mul r7, r8, r0 - ldr r2, _02389C24 ; =ov31_0238A228 - add r0, r4, r7 - mov r1, #0x28 - mov r3, #0 - str r5, [sp] - bl PreprocessString - b _02389BE0 -_02389BC4: - mov r0, #0x28 - mul r7, r8, r0 - ldr r2, _02389C28 ; =ov31_0238A23C - add r0, r4, r7 - mov r1, #0x28 - mov r3, #0 - str r5, [sp] -#else - ldr r2, _02389C24 ; =ov31_0238A228 - mov r1, #0x40 - add r0, r4, r8, lsl #6 - mov r3, #0 - str r5, [sp] - mov r7, r8, lsl #6 - bl PreprocessString - b _02389BE0 -_02389BC4: - ldr r2, _02389C28 ; =ov31_0238A23C - mov r1, #0x40 - add r0, r4, r8, lsl #6 - mov r3, #0 - str r5, [sp] - mov r7, r8, lsl #6 -#endif - bl PreprocessString -_02389BE0: - add r1, r4, r7 - add r0, sl, r8, lsl #3 - str r1, [r0, #0xc4] - add r8, r8, #1 - str r8, [r0, #0xc8] -_02389BF4: - cmp r8, #0xc - blt _02389B7C -_02389BFC: - mov r0, #0 - str r8, [sl, #0x52c + OV31_02389A78_OFFSET] - add r1, sl, r8, lsl #3 - str r0, [r1, #0xc4] - sub r0, r0, #1 - str r0, [r1, #0xc8] - str sb, [sl, #0x524 + OV31_02389A78_OFFSET] - add sp, sp, #0x70 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02389C20: .word DUNGEON_PTR -_02389C24: .word ov31_0238A228 -_02389C28: .word ov31_0238A23C - arm_func_end ov31_02389A78 - - arm_func_start ov31_02389C2C -ov31_02389C2C: ; 0x02389C2C - stmdb sp!, {r3, lr} - ldr r3, [r0, #0xb4] - mov r2, #6 - strb r1, [r3, #0xa8] - strb r2, [r3, #0x7c] - mov r1, #0 - str r1, [r3, #0x84] - str r1, [r3, #0x88] - strh r1, [r3, #0x80] - ldrb r1, [r3, #7] - cmp r1, #0 - ldmneia sp!, {r3, pc} - mov r1, #1 - bl AiMovement - ldmia sp!, {r3, pc} - arm_func_end ov31_02389C2C - - arm_func_start ov31_02389C68 -ov31_02389C68: ; 0x02389C68 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r5, _02389CBC ; =DUNGEON_PTR - mov r4, r0 - mov r6, #0 -_02389C78: - ldr r0, [r5] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r7, [r0, #0xa84] -#else - ldr r7, [r0, #0xb28] -#endif - mov r0, r7 - bl ov29_0234FB60 - cmp r0, #0 - beq _02389CA4 - mov r0, r7 - mov r1, r4 - bl ov31_02389C2C -_02389CA4: - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 - cmp r6, #4 - blt _02389C78 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02389CBC: .word DUNGEON_PTR - arm_func_end ov31_02389C68 - - arm_func_start ov31_02389CC0 -ov31_02389CC0: ; 0x02389CC0 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #0x5c - mov r5, r1 - mov r6, r0 - mov r0, r5 - mov r4, r2 - bl sub_0202812C -#if defined(EUROPE) - add r0, r6, #0x2dc - add r0, r0, #0x2400 -#elif defined(JAPAN) - add r0, r6, #0x308 - add r0, r0, #0x3c00 -#else - add r0, r6, #0xda - add r0, r0, #0x2600 -#endif - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - add r1, sp, #0xc - str r6, [sp, #0x1c] - str r1, [sp] - str r2, [sp, #4] - mov r2, #0 - ldr r0, _02389D74 ; =DUNGEON_WINDOW_PARAMS_29 - ldr r1, _02389D78 ; =0x00001013 - ldr r3, _02389D7C ; =0x00000A3B - str r2, [sp, #8] - bl CreateScrollBoxSingle - mov r7, r0 - mov r6, #0x3e -_02389D1C: - mov r0, r6 - bl AdvanceFrame - mov r0, r7 - bl IsScrollBoxActive - cmp r0, #0 - bne _02389D1C - mov r0, r7 - bl CloseScrollBox - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #4 - mov r1, #0x3e - bl ov29_022EA370 - mov r0, r5 - bl sub_0202810C - cmp r4, #0 - beq _02389D6C - mov r0, r5 - bl ResumeParentMenu -_02389D6C: - add sp, sp, #0x5c - ldmia sp!, {r4, r5, r6, r7, pc} - .align 2, 0 -_02389D74: .word DUNGEON_WINDOW_PARAMS_29 -_02389D78: .word 0x00001013 -#ifdef JAPAN -_02389D7C: .word 0x00000876 -#else -_02389D7C: .word 0x00000A3B -#endif - arm_func_end ov31_02389CC0 - - arm_func_start ov31_02389D80 -ov31_02389D80: ; 0x02389D80 - mov r1, #0 - str r1, [r0, #0xc8] - str r1, [r0, #0xcc] - str r1, [r0, #0xbc] - bx lr - arm_func_end ov31_02389D80 - ; 0x02389D94 - - .rodata - .global DUNGEON_WINDOW_PARAMS_1 -DUNGEON_WINDOW_PARAMS_1: - .byte 0x00, 0x00, 0x00, 0x00 -#ifdef EUROPE - .byte 0x02, 0x02, 0x07, 0x0C -#else - .byte 0x02, 0x02, 0x00, 0x0C -#endif - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_2 -DUNGEON_WINDOW_PARAMS_2: - .byte 0x00, 0x00, 0x00, 0x00, 0x0B, 0x04, 0x13, 0x02, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_3 -DUNGEON_WINDOW_PARAMS_3: - .byte 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word ov31_02382DAC - .word ov31_02382B54 - .global DUNGEON_WINDOW_PARAMS_4 -DUNGEON_WINDOW_PARAMS_4: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x1C, 0x06, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_MAIN_MENU_ITEMS -DUNGEON_MAIN_MENU_ITEMS: -#ifdef JAPAN -#define OV31_DATA_OFFSET 0x1458 -#else -#define OV31_DATA_OFFSET 0 -#endif - .word 0x8AD + OV31_DATA_OFFSET - .byte 0x00, 0x00, 0x00, 0x00 - .word 0x8AE + OV31_DATA_OFFSET - .byte 0x01, 0x00, 0x00, 0x00 - .word 0x8AF + OV31_DATA_OFFSET - .byte 0x02, 0x00, 0x00, 0x00 - .word 0x8B0 + OV31_DATA_OFFSET - .byte 0x03, 0x00, 0x00, 0x00 - .word 0x8B1 + OV31_DATA_OFFSET - .byte 0x04, 0x00, 0x00, 0x00 - .word 0x8B3 + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8B4 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .global DUNGEON_MENU_SWITCH_STR1 -DUNGEON_MENU_SWITCH_STR1: - .string "[dungeon:0]" - .global OVERLAY31_UNKNOWN_STRING_IDS -OVERLAY31_UNKNOWN_STRING_IDS: - .hword 0x8C7 + OV31_DATA_OFFSET - .global ov31_02389E22 -ov31_02389E22: - .hword 0x8CB + OV31_DATA_OFFSET - .hword 0x8C8 + OV31_DATA_OFFSET - .hword 0x8CC + OV31_DATA_OFFSET - .hword 0x8C9 + OV31_DATA_OFFSET - .hword 0x8CD + OV31_DATA_OFFSET - .hword 0x8CA + OV31_DATA_OFFSET - .hword 0x8CE + OV31_DATA_OFFSET - .global OVERLAY31_UNKNOWN_STRUCT__NA_2389E30 -OVERLAY31_UNKNOWN_STRUCT__NA_2389E30: - .byte 0x0E, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .word ov31_023832F0 - .word HandleStairsMenu - .global DUNGEON_WINDOW_PARAMS_5 -DUNGEON_WINDOW_PARAMS_5: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x02, 0x1C, 0x0D, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_6 -DUNGEON_WINDOW_PARAMS_6: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x02, 0x13, 0x04, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_7 -DUNGEON_WINDOW_PARAMS_7: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x17, 0x02, 0x07, 0x06, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_SUBMENU_ITEMS_1 -DUNGEON_SUBMENU_ITEMS_1: -#ifdef JAPAN -#define DUNGEON_SUBMENU_ITEMS_1_OFFSET 0x19D0 -#else -#define DUNGEON_SUBMENU_ITEMS_1_OFFSET 0 -#endif - .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET - .byte 0x01, 0x00, 0x00, 0x00 - .word 0x8CF + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8D0 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET - .byte 0x02, 0x00, 0x00, 0x00 - .word 0x8CF + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8D0 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .word 0x9C9 + DUNGEON_SUBMENU_ITEMS_1_OFFSET - .byte 0x03, 0x00, 0x00, 0x00 - .word 0x8CF + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8D0 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET - .byte 0x04, 0x00, 0x00, 0x00 - .word 0x8CF + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8D0 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .global OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 -OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0: - .byte 0x01, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_8 -DUNGEON_WINDOW_PARAMS_8: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_9 -DUNGEON_WINDOW_PARAMS_9: - .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x07, 0x00 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_10 -DUNGEON_WINDOW_PARAMS_10: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x08, 0x02 - .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_11 -DUNGEON_WINDOW_PARAMS_11: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x12, 0x02 - .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_12 -DUNGEON_WINDOW_PARAMS_12: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x13, 0x00 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_13 -DUNGEON_WINDOW_PARAMS_13: - .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x07, 0x00 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global ov31_02389F5C -ov31_02389F5C: - .byte 0x20, 0x20, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00 - .global OVERLAY31_JP_STRING -OVERLAY31_JP_STRING: - .byte 0x0A, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x81, 0x40, 0x20, 0x8F, 0x89, 0x8A, 0xFA, 0x83, 0x7C, 0x83 - .byte 0x57, 0x83, 0x56, 0x83, 0x87, 0x83, 0x93, 0x3D, 0x25, 0x64, 0x81, 0x40, 0x2D, 0x2D, 0x2D, 0x2D - .byte 0x2D, 0x20, 0x0A, 0x00 - .global DUNGEON_WINDOW_PARAMS_14 -DUNGEON_WINDOW_PARAMS_14: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x11, 0x1C, 0x05, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_15 -DUNGEON_WINDOW_PARAMS_15: - .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_16 -DUNGEON_WINDOW_PARAMS_16: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x1C, 0x04, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_17 -DUNGEON_WINDOW_PARAMS_17: - .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_18 -DUNGEON_WINDOW_PARAMS_18: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x13, 0x04, 0x00, 0xFE, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_19 -DUNGEON_WINDOW_PARAMS_19: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 -OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8: - .byte 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_20 -DUNGEON_WINDOW_PARAMS_20: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x0E, 0x12, 0x04, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_21 -DUNGEON_WINDOW_PARAMS_21: - .byte 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x10, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_22 -DUNGEON_WINDOW_PARAMS_22: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_23 -DUNGEON_WINDOW_PARAMS_23: - .byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x02, 0x0B, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_24 -DUNGEON_WINDOW_PARAMS_24: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0A, 0x02, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global ov31_0238A044 -ov31_0238A044: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x30, 0x5D, 0x00, 0x00 - .global ov31_0238A04C -ov31_0238A04C: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x31, 0x5D, 0x00, 0x00 - .global ov31_0238A054 -ov31_0238A054: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x32, 0x5D, 0x00, 0x00 - .global ov31_0238A05C -ov31_0238A05C: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x33, 0x5D, 0x00, 0x00 - .global ov31_0238A064 -ov31_0238A064: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x34, 0x5D, 0x00, 0x00 - .global ov31_0238A06C -ov31_0238A06C: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x35, 0x5D, 0x00, 0x00 - .global ov31_0238A074 -ov31_0238A074: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x36, 0x5D, 0x00, 0x00 - .global ov31_0238A07C -ov31_0238A07C: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x37, 0x5D, 0x00, 0x00 - .global ov31_0238A084 -ov31_0238A084: - .byte 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x5D, 0x5B, 0x43, 0x4C, 0x55, 0x4D, 0x5F - .byte 0x53, 0x45, 0x54, 0x3A, 0x38, 0x30, 0x5D, 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x31 - .byte 0x5D, 0x00, 0x00, 0x00 - .global ov31_0238A0A8 -ov31_0238A0A8: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x30, 0x5D, 0x00, 0x00 - .global ov31_0238A0B0 -ov31_0238A0B0: - .byte 0x5B, 0x4D, 0x3A, 0x48 - .byte 0x31, 0x5D, 0x00, 0x00 - .global ov31_0238A0B8 -ov31_0238A0B8: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x32, 0x5D, 0x00, 0x00 - .global ov31_0238A0C0 -ov31_0238A0C0: - .byte 0x5B, 0x4D, 0x3A, 0x48 - .byte 0x33, 0x5D, 0x00, 0x00 - .global ov31_0238A0C8 -ov31_0238A0C8: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x34, 0x5D, 0x00, 0x00 - .global ov31_0238A0D0 -ov31_0238A0D0: - .byte 0x5B, 0x4D, 0x3A, 0x48 - .byte 0x35, 0x5D, 0x00, 0x00 - .global ov31_0238A0D8 -ov31_0238A0D8: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x36, 0x5D, 0x00, 0x00 - .global ov31_0238A0E0 -ov31_0238A0E0: - .byte 0x5B, 0x4D, 0x3A, 0x48 - .byte 0x37, 0x5D, 0x00, 0x00 - .global ov31_0238A0E8 -ov31_0238A0E8: - .byte 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x5D, 0x5B, 0x43 - .byte 0x4C, 0x55, 0x4D, 0x5F, 0x53, 0x45, 0x54, 0x3A, 0x38, 0x30, 0x5D, 0x5B, 0x73, 0x74, 0x72, 0x69 - .byte 0x6E, 0x67, 0x3A, 0x31, 0x5D, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_25 -DUNGEON_WINDOW_PARAMS_25: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0C, 0x00 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_SUBMENU_ITEMS_5 -DUNGEON_SUBMENU_ITEMS_5: - .word 0x8C3 + OV31_DATA_OFFSET - .byte 0x01, 0x00, 0x00, 0x00 - .word 0x8C4 + OV31_DATA_OFFSET - .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .global DUNGEON_WINDOW_PARAMS_26 -DUNGEON_WINDOW_PARAMS_26: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x1C, 0x12, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_STRUCT__NA_238A144 -OVERLAY31_UNKNOWN_STRUCT__NA_238A144: - .byte 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word ov31_0238917C - .word RecruitmentSearchMenuLoop - .global ov31_0238A154 -ov31_0238A154: - .byte 0x5B, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x30, 0x3A, 0x33, 0x5D, 0x20, 0x5B, 0x43, 0x53, 0x3A - .byte 0x25, 0x63, 0x5D, 0x25, 0x73, 0x5B, 0x43, 0x52, 0x5D, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_27 -DUNGEON_WINDOW_PARAMS_27: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x02, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_28 -DUNGEON_WINDOW_PARAMS_28: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x02, 0x1C, 0x14, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_STRUCT__NA_238A190 -OVERLAY31_UNKNOWN_STRUCT__NA_238A190: - .byte 0x0E, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .word ov31_02389460 - .word HelpMenuLoop - .global DUNGEON_SUBMENU_ITEMS_6 -DUNGEON_SUBMENU_ITEMS_6: -#if defined(EUROPE) -#define DUNGEON_SUBMENU_6_OFFSET 2 -#elif defined(JAPAN) -#define DUNGEON_SUBMENU_6_OFFSET 0xA03 -#else -#define DUNGEON_SUBMENU_6_OFFSET 0 -#endif - .word 0x3FA8 + DUNGEON_SUBMENU_6_OFFSET - .byte 0x00, 0x00, 0x00, 0x00 - .word 0x3FA9 + DUNGEON_SUBMENU_6_OFFSET - .byte 0x01, 0x00, 0x00, 0x00 - .word 0x3FAA + DUNGEON_SUBMENU_6_OFFSET - .byte 0x02, 0x00, 0x00, 0x00 - .word 0x3FAB + DUNGEON_SUBMENU_6_OFFSET - .byte 0x03, 0x00, 0x00, 0x00 - .word 0x3FAC + DUNGEON_SUBMENU_6_OFFSET - .byte 0x04, 0x00, 0x00, 0x00 - .word 0x3FAD + DUNGEON_SUBMENU_6_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x3FAE + DUNGEON_SUBMENU_6_OFFSET - .byte 0x06, 0x00, 0x00, 0x00 - .word 0x3FAF + DUNGEON_SUBMENU_6_OFFSET - .byte 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xFF, 0xFF, 0xFF, 0xFF - .global DUNGEON_WINDOW_PARAMS_29 -DUNGEON_WINDOW_PARAMS_29: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_30 -DUNGEON_WINDOW_PARAMS_30: - .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_31 -DUNGEON_WINDOW_PARAMS_31: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x12, 0x00, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_32 -DUNGEON_WINDOW_PARAMS_32: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x0F, 0x02, 0x00, 0xFE, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global ov31_0238A228 -ov31_0238A228: - .byte 0x5B, 0x4D, 0x3A, 0x53, 0x32, 0x5D, 0x5B, 0x74, 0x61, 0x63, 0x74, 0x69 - .byte 0x63, 0x73, 0x3A, 0x30, 0x5D, 0x00, 0x00, 0x00 - .global ov31_0238A23C -ov31_0238A23C: - .byte 0x5B, 0x4D, 0x3A, 0x53, 0x31, 0x5D, 0x5B, 0x74 - .byte 0x61, 0x63, 0x74, 0x69, 0x63, 0x73, 0x3A, 0x30, 0x5D, 0x00, 0x00, 0x00 - - .data - .global OVERLAY31_UNKNOWN_POINTER__NA_238A260 -OVERLAY31_UNKNOWN_POINTER__NA_238A260: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x0A, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A268 -OVERLAY31_UNKNOWN_POINTER__NA_238A268: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A26C -OVERLAY31_UNKNOWN_POINTER__NA_238A26C: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A270 -OVERLAY31_UNKNOWN_POINTER__NA_238A270: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A27C -OVERLAY31_UNKNOWN_POINTER__NA_238A27C: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A280 -OVERLAY31_UNKNOWN_POINTER__NA_238A280: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A284 -OVERLAY31_UNKNOWN_POINTER__NA_238A284: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A288 -OVERLAY31_UNKNOWN_POINTER__NA_238A288: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A28C -OVERLAY31_UNKNOWN_POINTER__NA_238A28C: - .byte 0x00, 0x00, 0x00, 0x00 - - .bss - .global ov31_0238A2A0 -ov31_0238A2A0: - .space 0x8 - .global ov31_0238A2A8 -ov31_0238A2A8: - .space 0x18 diff --git a/asm/overlay_31_02383658.s b/asm/overlay_31_02383658.s new file mode 100644 index 00000000..bcdcc21a --- /dev/null +++ b/asm/overlay_31_02383658.s @@ -0,0 +1,8756 @@ + .include "asm/macros.inc" + .include "overlay_31_02383658.inc" + + .text + + arm_func_start ov31_02383658 +ov31_02383658: ; 0x02383658 + cmp r0, #0 + moveq r0, #0 + bxeq lr + ldr r0, [r0] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + arm_func_end ov31_02383658 + + arm_func_start ov31_0238367C +ov31_0238367C: ; 0x0238367C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x5c + bl GetLeader + mov r1, #0 + mov r2, #0xb + bl GetItemToUse + ldrsh r1, [r0, #4] + mov r2, #0 + add lr, sp, #0xc + str r1, [sp, #0x1c] + ldrh r4, [r0, #2] + ldr r1, _02383720 ; =0x00001013 + ldr r3, _02383724 ; =0x000008E4 + str r4, [sp, #0x30] + ldrh r4, [r0, #2] + add r4, r4, #0xbc + str r4, [sp, #0x24] + str r2, [sp, #0x38] + str lr, [sp] + ldrsh r4, [r0, #4] + ldr r0, _02383728 ; =DUNGEON_WINDOW_PARAMS_8 +#if defined(EUROPE) + add ip, r4, #0xd3 + add r4, ip, #0x2900 +#elif defined(JAPAN) + add ip, r4, #0xce + add r4, ip, #0x4100 +#else + add ip, r4, #0xd1 + add r4, ip, #0x2900 +#endif + mov ip, r4, lsl #0x10 + mov r4, ip, lsr #0x10 + stmib sp, {r4, lr} + bl CreateScrollBoxSingle + mov r5, r0 + mov r4, #0x16 +_023836F0: + mov r0, r4 + bl AdvanceFrame + mov r0, r5 + bl IsScrollBoxActive + cmp r0, #0 + bne _023836F0 + mov r0, r5 + bl CloseScrollBox + mov r0, #0x16 + bl AdvanceFrame + add sp, sp, #0x5c + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02383720: .word 0x00001013 +#ifdef JAPAN +_02383724: .word 0x00001D3C +#else +_02383724: .word 0x000008E4 +#endif +_02383728: .word DUNGEON_WINDOW_PARAMS_8 + arm_func_end ov31_0238367C + + arm_func_start ov31_0238372C +ov31_0238372C: ; 0x0238372C + stmdb sp!, {r3, lr} + ldr r1, _02383764 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r1] + add r1, r1, #0x1000 + ldrb r1, [r1, #0x1b1] + cmp r1, #0 + beq _0238375C + add r0, r0, #4 + bl PositionHasItem + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, pc} +_0238375C: + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_02383764: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C + arm_func_end ov31_0238372C + + arm_func_start ov31_02383768 +ov31_02383768: ; 0x02383768 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + ldrsb r0, [r7] + mvn r1, #1 + cmp r0, r1 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + bl ov10_022BCD10 + cmp r0, #0 + beq _023837B4 + mvn r4, #3 + sub r5, r4, #1 + mov r6, #0x62 +_02383798: + mov r0, r6 + bl AdvanceFrame + ldrsb r0, [r7] + bl sub_020282F4 + cmp r0, r5 + cmpne r0, r4 + bne _02383798 +_023837B4: + ldrsb r0, [r7] + bl CloseInventoryMenu + mvn r0, #1 + strb r0, [r7] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end ov31_02383768 + + arm_func_start ov31_023837C8 +ov31_023837C8: ; 0x023837C8 + stmdb sp!, {r3, lr} + ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x92 + add r0, r0, #0x1100 + bl ov29_0234E988 + ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x94] + cmp r0, r1 + beq _02383800 + bl CloseTextBox2 +_02383800: + ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x95] + cmp r0, r1 + beq _02383820 + bl CloseTextBox2 +_02383820: + ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x93 + add r0, r0, #0x1100 + bl ov31_02383768 + ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + bl MemFree + ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02383850: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C + arm_func_end ov31_023837C8 + +; https://decomp.me/scratch/VL6fa + arm_func_start ov31_02383854 +ov31_02383854: ; 0x02383854 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, _0238387C ; =0x000008E6 + bl StringFromId + mov r1, #2 + mov r3, r0 + mov r0, r4 + mov r2, r1 + bl DrawTextInWindow + ldmia sp!, {r4, pc} + .align 2, 0 +#ifdef JAPAN +_0238387C: .word 0x00001D3E +#else +_0238387C: .word 0x000008E6 +#endif + arm_func_end ov31_02383854 + + arm_func_start ov31_02383880 +ov31_02383880: ; 0x02383880 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r5, #0 + mov r7, r0 + add r0, r5, #1 + ldr r8, _023838E0 ; =DUNGEON_PTR + strb r5, [r7] + and r6, r0, #0xff + mov r4, r5 +_023838A0: + ldr r0, [r8] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + bl ov31_02383658 + cmp r0, #0 + addeq r0, r7, r5 + streqb r4, [r0, #1] + addne r0, r7, r5 + addne r1, r6, #1 + strneb r6, [r0, #1] + add r5, r5, #1 + andne r6, r1, #0xff + cmp r5, #4 + blt _023838A0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_023838E0: .word DUNGEON_PTR + arm_func_end ov31_02383880 + + arm_func_start ov31_023838E4 +ov31_023838E4: ; 0x023838E4 +#ifdef JAPAN +#define OV31_023838E4_OFFSET -0xA4 +#else +#define OV31_023838E4_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x234 + sub sp, sp, #0x400 + mov r2, #0 + mov r5, r2 + str r2, [sp, #0x30] + mov sl, r0 + mov sb, r1 + mov r6, r5 + ldr r7, [sl, #0xb4] + bl ov29_022EBB4C + mov r0, #0x1280 + mov r1, #8 + bl MemAlloc + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r4, #1 + str r0, [r1] + add r0, r0, #0x1000 + str sl, [r0, #0x19c] + ldr r0, [r1] + add r3, r4, #1 + add r0, r0, #0x1000 + strb r4, [r0, #0x193] + ldr r0, [r1] + mov r2, #0 + add r0, r0, #0x1000 + strb r4, [r0, #0x192] + ldr r8, [r1] + mov r0, #1 + add r8, r8, #0x1000 + strb r4, [r8, #0x194] + ldr r8, [r1] + add r8, r8, #0x1000 + strb r4, [r8, #0x195] + ldr r4, [r1] + add r4, r4, #0x1000 + str r3, [r4, #0x198] + ldr r3, [r1] + add r3, r3, #0x1000 + str r2, [r3, #0x1ac] + ldr r3, [r1] + add r3, r3, #0x1000 + strb r0, [r3, #0x1b1] + ldr r0, [r1] + add r0, r0, #0x1000 + strb r2, [r0, #0x1b2] + ldr r0, [r1] + add r0, r0, #0x1000 + str r2, [r0, #0x1b4] + ldr r0, [r1] + add r0, r0, #0x278 + add r0, r0, #0x1000 + bl ov31_02383880 + cmp sb, #0 + beq _02383A1C + ldrb r0, [sb] + cmp r0, #0 + beq _023839E4 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [sb, #4] + ldr r0, [r0] + mov r6, #1 + add r0, r0, #0x1000 + str r1, [r0, #0x1b4] +_023839E4: + ldrb r0, [sb, #1] + cmp r0, #0 + ldreq r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + moveq r1, #0 + ldreq r0, [r0] + addeq r0, r0, #0x1000 + streqb r1, [r0, #0x1b1] + ldrb r0, [sb, #2] + cmp r0, #0 + ldrne r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + movne r1, #1 + ldrne r0, [r0] + addne r0, r0, #0x1000 + strneb r1, [r0, #0x1b2] +_02383A1C: + mov r0, #3 + bl Arm9LoadUnkFieldNa0x2029EC8 + mov r1, r0 + ldr r0, _0238489C ; =OVERLAY31_JP_STRING + bl Debug_Print0 + bl GetNbItemsInBag + ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + cmp r6, #0 + ldr r1, [r2] + add r1, r1, #0x1000 + str r0, [r1, #0x1a8] + ldrne r0, [r2] + movne r1, #0 + addne r0, r0, #0x1000 + strneb r1, [r0, #0x1b3] + bne _02383A74 + mov r0, sl + bl ov31_0238372C + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r1] + add r1, r1, #0x1000 + strb r0, [r1, #0x1b3] +_02383A74: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r2, [r0] + add r0, r2, #0x1000 + ldrb r1, [r0, #0x1b2] + cmp r1, #0 + ldreq r1, [r0, #0x1a8] + cmpeq r1, #0 + ldreqb r0, [r0, #0x1b3] + cmpeq r0, #0 + bne _02383AC4 + ldr r1, _023848A0 ; =0x000008E5 + mov r0, #0 + mov r2, #1 + bl DisplayMessage + bl ov31_023837C8 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #1 + b _0238511C +_02383AC4: + add r0, r2, #0x1000 + ldr r0, [r0, #0x1a8] + cmp r0, #0 + bne _02383B08 + mov r0, sl + bl ov31_0238372C + ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r3, #1 + ldr r1, [r2] + add r1, r1, #0x1000 + strb r0, [r1, #0x1b3] + ldr r0, [r2] + add r0, r0, #0x1000 + strb r3, [r0, #0x1b2] + ldr r0, [r2] + add r0, r0, #0x1000 + strb r3, [r0, #0x1b1] +_02383B08: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + cmp r0, r1 + beq _02383B48 + bl IsInventoryMenuActive + cmp r0, #0 + bne _02383D78 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCC7C + b _02383D78 +_02383B48: + bl GetNbItemsInBag + ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r4] + add r1, r1, #0x1000 + str r0, [r1, #0x1a8] + ldr r0, [r4] + add r0, r0, #0x1000 + ldr r0, [r0, #0x1a8] + cmp r0, #0 + beq _02383C44 + ldr fp, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + mov r8, #0 +_02383B78: + mov r0, #6 + mul r1, r8, r0 + ldr r0, [fp] + ldr r2, [r0, #0x384] + ldrb r0, [r2, r1] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02383BD8 + ldrb r0, [r2, r1] + tst r0, #4 + beq _02383BD8 + bic r0, r0, #4 + strb r0, [r2, r1] + ldr r1, [r4] + mov r0, #3 + add r1, r1, #0x1000 + str r8, [r1, #0x1ac] + ldr r1, [r4] + add r1, r1, #0x1000 + ldr r1, [r1, #0x1ac] + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 +_02383BD8: + add r8, r8, #1 + cmp r8, #0x32 + blt _02383B78 + ldr fp, _023848A8 ; =DUNGEON_PTR + mov r4, #0 +_02383BEC: + ldr r0, [fp] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r8, [r0, #0xb28 + OV31_023838E4_OFFSET] + mov r0, r8 + bl ov31_02383658 + cmp r0, #0 + beq _02383C38 + ldr r1, [r8, #0xb4] + ldrb r0, [r1, #0x62] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02383C38 + ldrb r0, [r1, #0x62] + tst r0, #4 + bicne r0, r0, #4 + strneb r0, [r1, #0x62] +_02383C38: + add r4, r4, #1 + cmp r4, #4 + blt _02383BEC +_02383C44: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r4, [r0] + add r0, r4, #0x1000 + ldrb r1, [r0, #0x1b2] + cmp r1, #0 + bne _02383D1C + ldr r0, [r0, #0x1a8] + cmp r0, #0 + beq _02383D1C + mov r0, #3 + bl Arm9LoadUnkFieldNa0x2029EC8 + ldr r2, _023848AC ; =ov31_02383478 + add r1, r4, #0x278 + str r2, [sp] + add r1, r1, #0x1000 + str r1, [sp, #4] + add r1, r4, #0x1000 + ldrb r2, [r1, #0x1b3] + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r3, r4, #0x1f8 + str r2, [sp, #8] + ldr r1, [r1] + mov r2, r0 + add r0, r1, #0x1000 + ldr r0, [r0, #0x1a8] + mov r1, r6 + add r3, r3, #0x1000 + bl ov10_022BD474 + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + cmp r6, #0 + ldr r1, [r1] + add r1, r1, #0x1000 + strb r0, [r1, #0x193] + beq _02383CEC + ldr r0, _023848B0 ; =DUNGEON_WINDOW_PARAMS_10 + ldr r1, _023848B4 ; =ov31_02383854 + bl CreateTextBox + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r1] + add r1, r1, #0x1000 + strb r0, [r1, #0x194] + b _02383D78 +_02383CEC: + ldr r0, _023848B8 ; =DUNGEON_WINDOW_PARAMS_11 + mov r1, #0 + bl CreateTextBox + ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r3, #0 + ldr r1, [r2] + add r1, r1, #0x1000 + strb r0, [r1, #0x195] + ldr r0, [r2] + add r0, r0, #0x1000 + str r3, [r0, #0x198] + b _02383D78 +_02383D1C: + ldr r3, _023848BC ; =0x000008E3 + add r0, sp, #0x540 + add r1, r4, #0x278 + strh r3, [r0, #0x64] + mov r2, #0x10 + str r2, [sp, #0x5a8] + add r0, r1, #0x1000 + str r0, [sp] + mov r4, #1 + str r4, [sp, #4] + add r2, sp, #0x500 + str r4, [sp, #8] + mov r4, #0 + ldr r0, _023848C0 ; =DUNGEON_WINDOW_PARAMS_12 + ldr r1, _023848C4 ; =0x00400813 + ldr r3, _023848AC ; =ov31_02383478 + add r2, r2, #0x9c + str r4, [sp, #0xc] + bl CreateInventoryMenu + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r1] + add r1, r1, #0x1000 + strb r0, [r1, #0x193] +_02383D78: + mvn r0, #0 + str r0, [sp, #0x38] + sub r0, r0, #1 + ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + str r0, [sp, #0x3c] +_02383D8C: + mov r0, #0x14 + bl AdvanceFrame + mov r0, #0 + add r1, sp, #0x42 + bl GetPressedButtons + ldr r1, [r4] + add r0, r1, #0x1000 + ldrb r0, [r0, #0x1b2] + cmp r0, #0 + bne _023843D0 + add r0, r1, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCE44 + mov fp, r0 + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl PopInventoryMenuField0x1A3 + str r0, [sp, #0x2c] + ldr r0, [r4] + add r1, r0, #0x1100 + ldrsb r8, [r1, #0x95] + ldr r0, [sp, #0x3c] + cmp r8, r0 + beq _02384054 + ldrsb r0, [r1, #0x93] + bl ov10_022BCE44 + cmp r0, #0 + ldr r0, [r4] + bne _02383F7C + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDA8 + str r0, [sp, #0x34] + ldr r0, [r4] + add r1, r0, #0x1000 + ldr r2, [r1, #0x198] + ldr r0, [sp, #0x34] + cmp r2, r0 + beq _02384054 + str r0, [r1, #0x198] + ldr r1, [r4] + mov r0, r8 + add r1, r1, #0x1000 + ldr r1, [r1, #0x19c] + str r1, [sp, #0x28] + bl sub_02027B1C + ldr r1, [sp, #0x34] + mov r0, #6 + mul r2, r1, r0 + ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r0, [r0, #0x384] + add r1, r0, r2 + ldrb r0, [r0, r2] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02383F28 + ldrb r0, [r1, #1] + str r0, [sp, #0x10] + cmp r0, #0 + beq _02383F00 + ldr r1, _023848A8 ; =DUNGEON_PTR + add r0, sp, #0x400 + ldr r3, [r1] + ldr r1, [sp, #0x10] + add r0, r0, #0x4c + add r1, r3, r1, lsl #2 + add r1, r1, #0x12000 + ldr r1, [r1, #0xb24 + OV31_023838E4_OFFSET] + mov r2, #0 + bl ov29_022E2A78 + add r0, sp, #0x400 + add r0, r0, #0x4c + str r0, [sp, #0x584] + add r0, sp, #0x500 +#ifdef JAPAN + ldr r2, [sp, #0x38] + add r0, r0, #0x4c + str r0, [sp] + add r0, sp, #0x4c + mov r1, #0x400 + add r2, r2, #0x1d40 +#else + add r0, r0, #0x4c + str r0, [sp] + ldr r2, _023848C8 ; =0x000008E7 + add r0, sp, #0x4c + mov r1, #0x400 +#endif + mov r3, #0 + bl PreprocessStringFromId + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r1, [r0] + ldr r0, [sp, #0x10] + add r0, r1, r0, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb24 + OV31_023838E4_OFFSET] + str r0, [sp, #0x28] + b _02383F34 +_02383F00: + ldrsh r0, [r1, #4] +#if defined(EUROPE) + add r0, r0, #0x4b + add r0, r0, #0x2f00 +#elif defined(JAPAN) + add r0, r0, #0x41 + add r0, r0, #0x1d00 +#else + add r0, r0, #0x49 + add r0, r0, #0x2f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r1, r0 + add r0, sp, #0x4c + bl strcpy + b _02383F34 +_02383F28: + ldr r1, _023848CC ; =ov31_02389F5C + add r0, sp, #0x4c + bl strcpy +_02383F34: + mov r1, #2 + mov r0, r8 + mov r2, r1 + add r3, sp, #0x4c + bl DrawTextInWindow + mov r0, r8 + bl UpdateWindow + ldr r0, [sp, #0x28] + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + ldr r0, [sp, #0x28] + mov r2, #1 + add r0, r0, #4 + mov r1, #0 + mov r3, r2 + bl DrawTileGrid + b _02384054 +_02383F7C: + add r0, r0, #0x1000 + ldr r1, [r0, #0x198] + cmp r1, #0x7f + beq _02384054 + ldr r1, [r0, #0x19c] + ldrsh r0, [r1, #4] + ldrsh r1, [r1, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _02383FE4 + ldrsh r0, [r0, #4] +#if defined(EUROPE) + add r0, r0, #0x4b + add r0, r0, #0x2f00 +#elif defined(JAPAN) + add r0, r0, #0x41 + add r0, r0, #0x1d00 +#else + add r0, r0, #0x49 + add r0, r0, #0x2f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r1, r0 + add r0, sp, #0x4c + bl strcpy + b _02383FF0 +_02383FE4: + ldr r1, _023848CC ; =ov31_02389F5C + add r0, sp, #0x4c + bl strcpy +_02383FF0: + mov r0, r8 + bl sub_02027B1C + mov r1, #2 + mov r0, r8 + mov r2, r1 + add r3, sp, #0x4c + bl DrawTextInWindow + mov r0, r8 + bl UpdateWindow + ldr r0, [r4] + mov r1, #0 + add r2, r0, #0x1000 + mov r0, #0x7f + str r0, [r2, #0x198] + ldr r0, [r4] + mov r2, #1 + add r0, r0, #0x1000 + ldr r8, [r0, #0x19c] + mov r0, r8 + bl TryPointCameraToMonster + mov r2, #1 + add r0, r8, #4 + mov r1, #0 + mov r3, r2 + bl DrawTileGrid +_02384054: + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl IsInventoryMenuActive + cmp r0, #0 + beq _02384088 + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDA8 + and r1, r0, #0xff + mov r0, #3 + bl Arm9StoreUnkFieldNa0x2029ED8 +_02384088: + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl IsInventoryMenuActive + cmp r0, #0 + bne _023841A4 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDBC + movs r4, r0 + bmi _0238419C + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + and r1, r4, #0xff + ldr r2, [r0] + mov r0, #3 + add r2, r2, #0x1000 + str r4, [r2, #0x1ac] + bl Arm9StoreUnkFieldNa0x2029ED8 + cmp fp, #0 + bne _02384138 + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r0, #6 + ldr r1, [r1] + mul r8, r4, r0 + add r0, r1, #0x1000 + ldrb r3, [r0, #0x1b2] + ldr r2, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + add r1, sl, #4 + str r3, [sp] + ldr r2, [r2] + ldr r0, [r0, #0x1ac] + ldr r2, [r2, #0x384] + mov r3, #0 + add r2, r2, r8 + ldrb r2, [r2, #1] + bl ov29_022EBAB0 + ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r0, [r0, #0x384] + add r0, r0, r8 + str r0, [sb, #4] + b _02384194 +_02384138: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r1, sl, #4 + ldr r0, [r0] + mov r2, #0 + add r0, r0, #0x1000 + ldrb r4, [r0, #0x1b2] + mov r3, #1 + str r4, [sp] + ldr r0, [r0, #0x1ac] + bl ov29_022EBAB0 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + strne r0, [sb, #4] + moveq r0, #0 + streq r0, [sb, #4] +_02384194: + mov r4, #1 + b _02384438 +_0238419C: + mov r4, #2 + b _02384438 +_023841A4: + ldrh r0, [sp, #0x42] + tst r0, #8 + beq _023842DC + ldr r0, _023848D0 ; =0x00003F04 + bl sub_02017C80 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDF4 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDBC + ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r2] + add r1, r1, #0x1000 + str r0, [r1, #0x1ac] + ldr r1, [r2] + mov r0, #3 + add r1, r1, #0x1000 + ldr r1, [r1, #0x1ac] + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 + cmp fp, #0 + bne _02384278 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r3, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + mov r2, #6 + add r0, r0, #0x1000 + ldrb r4, [r0, #0x1b2] + ldr r0, [r0, #0x1ac] + add r1, sl, #4 + str r4, [sp] + ldr r4, [r3] + mov r3, #0 + ldr r4, [r4, #0x384] + mla r2, r0, r2, r4 + ldrb r2, [r2, #1] + bl ov29_022EBAB0 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r1, [r1] + add r0, r0, #0x1000 + ldr r2, [r1, #0x384] + ldr r1, [r0, #0x1ac] + mov r0, #6 + mla r0, r1, r0, r2 + str r0, [sb, #4] + b _023842D4 +_02384278: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r1, sl, #4 + ldr r0, [r0] + mov r2, #0 + add r0, r0, #0x1000 + ldrb r4, [r0, #0x1b2] + mov r3, #1 + str r4, [sp] + ldr r0, [r0, #0x1ac] + bl ov29_022EBAB0 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + strne r0, [sb, #4] + moveq r0, #0 + streq r0, [sb, #4] +_023842D4: + mov r4, #3 + b _02384438 +_023842DC: + tst r0, #4 + bne _023842F4 + tst r0, #0x800 + ldreq r0, [sp, #0x2c] + cmpeq r0, #0 + beq _02383D8C +_023842F4: + cmp r6, #0 + cmpeq fp, #0 + bne _02383D8C + ldr r0, [sp, #0x2c] + cmp r0, #0 + bne _02384314 + mov r0, #5 + bl PlaySeVolumeWrapper +_02384314: + bl ov29_02346E5C + bl SortItemsInBag + mov r8, #0 +_02384320: + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r8, lsl #2 + add r0, r0, #0x12000 + ldr fp, [r0, #0xb28 + OV31_023838E4_OFFSET] + mov r0, fp + bl ov31_02383658 + cmp r0, #0 + beq _02384374 + ldr r1, [fp, #0xb4] + ldrb r0, [r1, #0x62] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02384374 + ldrsh r0, [r1, #0x66] + cmp r0, #0xb7 + bne _02384374 + add r0, r1, #0x62 + bl ItemZInit +_02384374: + add r8, r8, #1 + cmp r8, #4 + blt _02384320 + ldr r0, [r4] + add r1, r0, #0x1000 + ldr r0, [sp, #0x38] + str r0, [r1, #0x198] + bl GetNbItemsInBag + movs r1, r0 + beq _023843C0 + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCC60 + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCCB0 + b _02383D8C +_023843C0: + mov r0, #1 + str r0, [sp, #0x30] + mov r4, #2 + b _02384438 +_023843D0: + add r0, r1, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDF4 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r1, sl, #4 + ldr r0, [r0] + mov r2, #0 + add r0, r0, #0x1000 + ldrb r4, [r0, #0x1b2] + mov r3, #1 + str r4, [sp] + ldr r0, [r0, #0x1ac] + bl ov29_022EBAB0 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + ldrb r1, [r0] + mov r4, #1 + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + moveq r0, #0 + str r0, [sb, #4] +_02384438: + mov r0, #0x14 + bl AdvanceFrame + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r0] + add r0, r1, #0x1000 + ldrb r0, [r0, #0x1b2] + cmp r0, #0 + bne _02384490 + add r0, r1, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCE44 + cmp r0, #0 + bne _02384490 + ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r0, [r0, #0x384] + ldrb r0, [r0] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + moveq r4, #2 +_02384490: + cmp r4, #2 + bne _023844AC + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #1 + b _023850D8 +_023844AC: + cmp r4, #0 + beq _023850D8 + cmp r4, #3 + bne _023844D8 + add r0, r7, #0x4a + bl ov29_022EBBE8 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_023844D8: + cmp r6, #0 + beq _023844FC + add r0, r7, #0x54 + bl ov29_022EBB68 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_023844FC: + bl ov29_022EBB8C + mov r1, r0 + mov r0, sl + mov r2, #0xa + bl GetItemToUseByIndex + mov r8, r0 + ldr r0, [sl, #0xb4] + str r0, [sp, #0x14] + bl ov29_022EBA70 + bl ov29_022EBB98 + cmp r0, #0x90 + bhs _023849F4 + bl ov29_022EBB98 + cmp r0, #0x80 + bne _02384598 + ldrsh r1, [r8, #4] + mov r0, #9 + bl AddDungeonSubMenuOption + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #6 + beq _02384598 + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _02384570 + bl IsBagFull + b _02384588 +_02384570: + ldr r0, [sp, #0x14] + ldrb r0, [r0, #0x62] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_02384588: + cmp r0, #0 + beq _02384598 + mov r0, #9 + bl DisableDungeonSubMenuOption +_02384598: + bl ov29_022EBB98 + cmp r0, #0x80 + bne _023845C4 + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _023845C4 + ldrsh r1, [r8, #4] + mov r0, #0xa + bl AddDungeonSubMenuOption +_023845C4: + mov r0, r8 + bl GetItemAction + movs r4, r0 + beq _02384654 + ldrsh r1, [r8, #4] + bl AddDungeonSubMenuOption + ldrb r0, [r8] + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _023845FC + mov r0, r4 + bl DisableDungeonSubMenuOption +_023845FC: + mov r0, r8 + bl ov29_023468FC + cmp r0, #0 + bne _02384614 + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384614: + mov r0, sl + bl MonsterHasEmbargoStatus + cmp r0, #0 + bne _02384634 + mov r0, r8 + bl ov29_02348D00 + cmp r0, #0 + beq _0238463C +_02384634: + mov r0, r4 + bl DisableDungeonSubMenuOption +_0238463C: + mov r0, r8 + bl IsItemUsableNow + cmp r0, #0 + bne _02384654 + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384654: + bl ov29_022EBB98 + cmp r0, #0x33 + bhs _02384728 + ldrb r0, [r8, #1] + cmp r0, #0 + bne _02384728 + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #0 + beq _0238468C + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #1 + bne _02384728 +_0238468C: + ldrb r0, [r8] + ldrsh r1, [r8, #4] + tst r0, #0x10 + beq _023846A8 + mov r0, #0x3d + bl AddDungeonSubMenuOption + b _023846B0 +_023846A8: + mov r0, #0x3c + bl AddDungeonSubMenuOption +_023846B0: + ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + mov r3, #0 + ldr r4, [r0] + mov lr, #1 + mov r0, #6 + b _02384720 +_023846C8: + mul r1, r3, r0 + ldr r2, [r4, #0x384] + ldrb fp, [r2, r1] + tst fp, #1 + movne ip, lr + moveq ip, #0 + tst ip, #0xff + beq _0238471C + ldrb r1, [r2, r1] + tst r1, #0x10 + beq _0238471C + tst fp, #8 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _0238471C + mov r0, #0x3c + bl DisableDungeonSubMenuOption + mov r0, #0x3d + bl DisableDungeonSubMenuOption + b _02384728 +_0238471C: + add r3, r3, #1 +_02384720: + cmp r3, #0x32 + blt _023846C8 +_02384728: + bl ov29_022EBB98 + cmp r0, #0x81 + beq _02384804 + bl ov29_022EBB98 + cmp r0, #0x80 + beq _02384860 + ldrsh r1, [r8, #4] + mov r2, #0 + mov r0, #0x36 + str r2, [sp, #0x18] + bl AddDungeonSubMenuOption + mov r4, #0 +_02384758: + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] + str r0, [sp, #0x1c] + bl ov31_02383658 + cmp r0, #0 + beq _023847A0 + ldr r0, [sp, #0x1c] + mov r1, #0 + ldr fp, [r0, #0xb4] +#ifdef JAPAN + strb r1, [fp, #0x15d] +#else + strb r1, [fp, #0x161] +#endif + bl ov29_02300BF8 + cmp r0, #0 + moveq r0, #1 + streq r0, [sp, #0x18] +#ifdef JAPAN + streqb r0, [fp, #0x15d] +#else + streqb r0, [fp, #0x161] +#endif +_023847A0: + add r4, r4, #1 + cmp r4, #4 + blt _02384758 + add r0, sp, #0x40 + bl sub_0204F10C + cmp r0, #0 + beq _023847EC + bl GetCurrentBagCapacity + cmp r0, #2 + bge _023847EC + ldrsh r0, [sp, #0x40] + sub r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #1 + movls r0, #0 + strls r0, [sp, #0x18] +_023847EC: + ldr r0, [sp, #0x18] + cmp r0, #0 + bne _02384860 + mov r0, #0x36 + bl DisableDungeonSubMenuOption + b _02384860 +_02384804: + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _02384860 + ldrsh r1, [r8, #4] + mov r0, #0x37 + bl AddDungeonSubMenuOption + mov r0, r8 + bl IsHeldItemInBag + cmp r0, #0 + beq _02384840 + ldrsh r1, [r8, #4] + mov r0, #0x3e + bl AddDungeonSubMenuOption +_02384840: + mov r0, sl + bl CheckVariousConditions + cmp r0, #0 + beq _02384860 + mov r0, #0x37 + bl DisableDungeonSubMenuOption + mov r0, #0x3e + bl DisableDungeonSubMenuOption +_02384860: + bl ov29_022EBB98 + cmp r0, #0x33 + bhs _02384908 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + bl GetTile + mov r4, r0 + ldr r0, [r4, #0x10] + cmp r0, #0 + bne _023848D4 + ldrsh r1, [r8, #4] + mov r0, #8 + bl AddDungeonSubMenuOption + b _02384908 + .align 2, 0 +#ifdef JAPAN +#define OV31_023838E4_OFFSET_2 0x1458 +#else +#define OV31_023838E4_OFFSET_2 0 +#endif +_02384898: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C +_0238489C: .word OVERLAY31_JP_STRING +_023848A0: .word 0x000008E5 + OV31_023838E4_OFFSET_2 +_023848A4: .word BAG_ITEMS_PTR_MIRROR +_023848A8: .word DUNGEON_PTR +_023848AC: .word ov31_02383478 +_023848B0: .word DUNGEON_WINDOW_PARAMS_10 +_023848B4: .word ov31_02383854 +_023848B8: .word DUNGEON_WINDOW_PARAMS_11 +_023848BC: .word 0x000008E3 + OV31_023838E4_OFFSET_2 +_023848C0: .word DUNGEON_WINDOW_PARAMS_12 +_023848C4: .word 0x00400813 +#ifndef JAPAN +_023848C8: .word 0x000008E7 +#endif +_023848CC: .word ov31_02389F5C +_023848D0: .word 0x00003F04 +_023848D4: + ldr r0, [r0] + cmp r0, #3 + bne _02384908 + ldrsh r1, [r8, #4] + mov r0, #0x3a + bl AddDungeonSubMenuOption + ldr r0, [r4, #0x10] + bl ov29_022E1620 + bl ov29_02348D00 + cmp r0, #0 + beq _02384908 + mov r0, #0x3a + bl DisableDungeonSubMenuOption +_02384908: + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #0 + bne _02384928 + ldrsh r1, [r8, #4] + mov r0, #0x27 + bl AddDungeonSubMenuOption + b _02384950 +_02384928: + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #1 + ldrsh r1, [r8, #4] + bne _02384948 + mov r0, #0x41 + bl AddDungeonSubMenuOption + b _02384950 +_02384948: + mov r0, #0xb + bl AddDungeonSubMenuOption +_02384950: + ldr r0, [sp, #0x14] + bl MonsterCanThrowItems + cmp r0, #0 + bne _02384978 + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption + mov r0, #0xb + bl DisableDungeonSubMenuOption +_02384978: + mov r0, sl + bl MonsterHasEmbargoStatus + cmp r0, #0 + beq _023849A0 + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption + mov r0, #0xb + bl DisableDungeonSubMenuOption +_023849A0: + mov r0, r8 + bl ov29_02348D00 + cmp r0, #0 + beq _023849D8 + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption + mov r0, #0xb + bl DisableDungeonSubMenuOption + mov r0, #0xa + bl DisableDungeonSubMenuOption + mov r0, #9 + bl DisableDungeonSubMenuOption +_023849D8: + mov r0, r8 + bl IsItemUsableNow + cmp r0, #0 + bne _02384C48 + mov r0, #0xb + bl DisableDungeonSubMenuOption + b _02384C48 +_023849F4: + bl ov29_022EBB98 + ldr r1, _023848A8 ; =DUNGEON_PTR + sub r2, r0, #0x90 + ldr r0, [r1] + add r0, r0, r2, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] + str r0, [sp, #0x20] + bl ov31_02383658 + cmp r0, #0 + beq _02384C48 + mov r0, #0 + str r0, [sp, #0x24] + ldr r0, [sp, #0x20] + ldr r4, [sp, #0x24] + mov r1, r0 + ldr fp, [r1, #0xb4] + bl CheckVariousConditions + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #0x24] + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #5 + ldrsh r0, [r8, #4] + moveq r4, #1 + bl GetItemCategoryVeneer + cmp r0, #9 + ldr r0, _023848A8 ; =DUNGEON_PTR + moveq r4, #1 + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _02384AC0 + ldrsh r1, [r8, #4] + mov r0, #0x37 + bl AddDungeonSubMenuOption + mov r0, r8 + bl IsHeldItemInBag + cmp r0, #0 + beq _02384AA4 + ldrsh r1, [r8, #4] + mov r0, #0x3e + bl AddDungeonSubMenuOption +_02384AA4: + ldr r0, [sp, #0x24] + cmp r0, #0 + beq _02384AC0 + mov r0, #0x37 + bl DisableDungeonSubMenuOption + mov r0, #0x3e + bl DisableDungeonSubMenuOption +_02384AC0: + ldrb r0, [fp, #7] + cmp r0, #0 + beq _02384BEC + mov r0, r8 + bl GetItemAction + movs r4, r0 + beq _02384B5C + ldrsh r1, [r8, #4] + bl AddDungeonSubMenuOption + ldrb r0, [r8] + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02384B04 + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384B04: + mov r0, r8 + bl ov29_023468FC + cmp r0, #0 + bne _02384B1C + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384B1C: + ldr r0, [sp, #0x20] + bl MonsterHasEmbargoStatus + cmp r0, #0 + bne _02384B3C + mov r0, r8 + bl ov29_02348D00 + cmp r0, #0 + beq _02384B44 +_02384B3C: + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384B44: + mov r0, r8 + bl IsItemUsableNow + cmp r0, #0 + bne _02384B5C + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384B5C: + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #0 + bne _02384B7C + ldrsh r1, [r8, #4] + mov r0, #0x27 + bl AddDungeonSubMenuOption + b _02384B98 +_02384B7C: + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #1 + bne _02384B98 + ldrsh r1, [r8, #4] + mov r0, #0x41 + bl AddDungeonSubMenuOption +_02384B98: + ldr r0, [sp, #0x14] + bl MonsterCanThrowItems + cmp r0, #0 + bne _02384BB8 + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption +_02384BB8: + mov r0, sl + bl MonsterHasEmbargoStatus + cmp r0, #0 + bne _02384BD8 + mov r0, sl + bl MonsterHasEmbargoStatus + cmp r0, #0 + beq _02384C48 +_02384BD8: + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption + b _02384C48 +_02384BEC: + ldrsh r1, [r8, #4] + mov r0, #0x38 + bl AddDungeonSubMenuOption + cmp r4, #0 + beq _02384C08 + mov r0, #0x38 + bl DisableDungeonSubMenuOption +_02384C08: + ldr r0, [sp, #0x20] + bl MonsterHasEmbargoStatus + cmp r0, #0 + bne _02384C28 + mov r0, r8 + bl ov29_02348D00 + cmp r0, #0 + beq _02384C30 +_02384C28: + mov r0, #0x38 + bl DisableDungeonSubMenuOption +_02384C30: + mov r0, r8 + bl IsItemUsableNow + cmp r0, #0 + bne _02384C48 + mov r0, #0x38 + bl DisableDungeonSubMenuOption +_02384C48: + ldrsh r1, [r8, #4] + mov r0, #0xc + bl AddDungeonSubMenuOption + bl ov29_022EB9A0 + bl ov29_022EBA84 + mov r2, #0 + ldr r1, _02385128 ; =ov29_0237C91C + ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + b _02384C9C +_02384C6C: + add r8, r1, r2, lsl #3 + ldr r3, [r4] + ldrh r8, [r8, #6] + add r3, r3, r2, lsl #3 + add r3, r3, #0x1100 + strh r8, [r3, #0x38] + mov r8, r2, lsl #3 + ldr r3, [r4] + add r2, r2, #1 + add r3, r3, r8 + add r3, r3, #0x1000 + str r2, [r3, #0x13c] +_02384C9C: + cmp r2, r0 + blt _02384C6C + ldr r3, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C +#ifdef JAPAN + mov r4, #0x1d40 +#else + ldr r4, _0238512C ; =0x000008E8 +#endif + ldr r1, [r3] + mvn r0, #0 + add r1, r1, r2, lsl #3 + add r1, r1, #0x1100 + strh r4, [r1, #0x38] + ldr r1, [r3] + mov r4, #0 + add r1, r1, r2, lsl #3 + add r1, r1, #0x1000 + str r0, [r1, #0x13c] + ldr r1, [r3] + add r1, r1, r2, lsl #3 + add r1, r1, #0x1100 + strh r4, [r1, #0x40] + ldr r1, [r3] + add r1, r1, r2, lsl #3 + add r1, r1, #0x1000 + str r0, [r1, #0x144] + ldr r0, [r3] + add r0, r0, #0x92 + add r0, r0, #0x1100 + bl ov29_0234E988 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r2, r4 + ldr r1, [r0] + add r0, r1, #0x138 + add r1, r1, #0x188 + add r0, r0, #0x1000 + add r1, r1, #0x1000 + bl ov31_0238513C + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r2, sp, #0x500 + ldr r1, [r0] + add r2, r2, #0x9c + add r0, r1, #0x188 + add r0, r0, #0x1000 + str r0, [sp, #0x5fc] + add r0, r1, #0x1000 + add r3, r1, #0x138 + ldrb r0, [r0, #0x1b2] + ldr r1, _02385130 ; =0x00000213 + add r3, r3, #0x1000 + cmp r0, #0 + ldrne r0, _02385134 ; =DUNGEON_WINDOW_PARAMS_13 + ldreq r0, _02385138 ; =DUNGEON_WINDOW_PARAMS_9 + bl CreateParentMenuFromStringIds + ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r8, #0x14 + ldr r1, [r4] + add r1, r1, #0x1000 + strb r0, [r1, #0x192] +_02384D78: + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x92] + bl IsParentMenuActive + cmp r0, #0 + bne _02384E24 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x92] + bl sub_0202ABB0 + cmp r0, #0 + blt _02384E04 + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + sub r2, r0, #1 + ldr r0, [r1] + add r0, r0, #0x1000 + str r2, [r0, #0x1a4] + ldr r0, [r1] + add r0, r0, #0x1000 + ldr r0, [r0, #0x1a4] + bl ov29_022EB804 + cmp r0, #0 + mov r4, #0 + beq _02384E30 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r2, _02385128 ; =ov29_0237C91C + ldr r1, [r0] + add r0, r7, #0x4a + add r1, r1, #0x1000 + ldr r1, [r1, #0x1a4] + mov r1, r1, lsl #3 + ldrh r1, [r2, r1] + bl ov29_022EBBA8 + b _02384E30 +_02384E04: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r4, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + ldrb r0, [r0, #0x1b2] + cmp r0, #0 + movne r4, #2 + b _02384E30 +_02384E24: + mov r0, r8 + bl AdvanceFrame + b _02384D78 +_02384E30: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x92 + add r0, r0, #0x1100 + bl ov29_0234E988 + ldr r0, _023848A8 ; =DUNGEON_PTR + mov r1, #0 + ldr r0, [r0] + cmp r4, #1 + add r0, r0, #0x1a000 +#ifdef JAPAN + strb r1, [r0, #0x1a3] +#else + strb r1, [r0, #0x247] +#endif + ldreq r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldreq r0, [r0] + addeq r0, r0, #0x1000 + ldreqb r0, [r0, #0x1b2] + cmpeq r0, #0 + beq _02383B08 + cmp r4, #2 + bne _02384E90 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #1 + b _023850D8 +_02384E90: + ldrh r0, [r7, #0x4a] + cmp r0, #0x38 + cmpne r0, #0x37 + cmpne r0, #0x3e + bne _02384EC4 + bl ov29_022EBB98 + sub r2, r0, #0x90 + mov r0, #0xb + mov r1, #0 + strb r2, [r7, #0x4e] + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_02384EC4: + cmp r0, #0x36 + bne _02384FA0 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x94] + cmp r0, r1 + beq _02384F00 + bl CloseTextBox2 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x194] +_02384F00: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x95] + cmp r0, r1 + beq _02384F34 + bl CloseTextBox2 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x195] +_02384F34: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x93 + add r0, r0, #0x1100 + bl ov31_02383768 + mov r0, #0x62 + bl AdvanceFrame + add r0, sp, #0x48 + mov r1, #2 + mov r2, #0 +#ifndef JAPAN + mov r3, #1 +#endif + bl ov31_023877EC + cmp r0, #0 + beq _02384F88 + ldr r2, [sp, #0x48] + mov r0, #0 + mov r1, r0 + strb r2, [r7, #0x54] + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_02384F88: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #1 + bl ov29_022EB398 + b _02383B08 +_02384FA0: + cmp r0, #0x12 + beq _02384FC0 + add r0, r0, #0xf3 + add r0, r0, #0xff00 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #1 + bhi _023850C8 +_02384FC0: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x94] + cmp r0, r1 + beq _02384FF4 + bl CloseTextBox2 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x194] +_02384FF4: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x95] + cmp r0, r1 + beq _02385028 + bl CloseTextBox2 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x195] +_02385028: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x93 + add r0, r0, #0x1100 + bl ov31_02383768 + mov r0, #0x62 + bl AdvanceFrame + mov r0, #0x62 + bl AdvanceFrame +#ifdef JAPAN + add r0, sp, #0x44 + mov r1, #3 + mov r2, #1 +#else + mov r2, #1 + add r0, sp, #0x44 + mov r1, #3 + mov r3, r2 +#endif + bl ov31_023877EC + cmp r0, #0 + beq _023850B0 + ldr r1, [sp, #0x44] + ldr r0, _023848A8 ; =DUNGEON_PTR + strb r1, [r7, #0x54] + ldr r2, [r0] + ldr r0, [sp, #0x44] + mov r1, #0 + add r0, r2, r0, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] + mov r2, #1 + bl TryPointCameraToMonster + mov r0, #0 + mov r2, #1 + mov r1, r0 +#ifdef JAPAN + strb r2, [r7, #0x238] +#else + strb r2, [r7, #0x23c] +#endif + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_023850B0: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #1 + bl ov29_022EB398 + b _02383B08 +_023850C8: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #0 +_023850D8: + ldr r0, _023848A8 ; =DUNGEON_PTR + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x1a000 + strb r1, [r0, #0x247 + OV31_023838E4_OFFSET] + bl HideTileGrid + bl ov31_023837C8 + mov r0, #0x14 + bl AdvanceFrame + ldr r0, [sp, #0x30] + cmp r0, #0 + beq _02385118 + ldr r1, _023848A0 ; =0x000008E5 + mov r0, #0 + mov r2, #1 + bl DisplayMessage +_02385118: + mov r0, r5 +_0238511C: + add sp, sp, #0x234 + add sp, sp, #0x400 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02385128: .word ov29_0237C91C +#ifndef JAPAN +_0238512C: .word 0x000008E8 +#endif +_02385130: .word 0x00000213 +_02385134: .word DUNGEON_WINDOW_PARAMS_13 +_02385138: .word DUNGEON_WINDOW_PARAMS_9 + arm_func_end ov31_023838E4 + + arm_func_start ov31_0238513C +ov31_0238513C: ; 0x0238513C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + bl ov29_022EBA84 + mov r4, #0 + mov r5, r0 + mov sb, #3 + mov sl, r4 + b _02385190 +_02385164: + mov r0, r4 + mov r1, r6 + bl ov29_022EB2C8 + mov r1, r4, lsl #3 + strh r0, [r8, r1] + mov r0, r4 + bl ov29_022EB804 + cmp r0, #0 + strneb sl, [r7, r4] + streqb sb, [r7, r4] + add r4, r4, #1 +_02385190: + cmp r4, r5 + blt _02385164 +#ifdef JAPAN + mov r1, r4, lsl #3 + mov r2, #0x1d40 +#else + ldr r2, _023851BC ; =0x000008E8 + mov r1, r4, lsl #3 +#endif + add r0, r4, #1 + strh r2, [r8, r1] + mov r1, #0 + strb r1, [r7, r4] + mov r0, r0, lsl #3 + strh r1, [r8, r0] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +#ifndef JAPAN + .align 2, 0 +_023851BC: .word 0x000008E8 +#endif + arm_func_end ov31_0238513C + + arm_func_start MovesMenu +MovesMenu: ; 0x023851C0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0xc + ldr r1, _023853B8 ; =DUNGEON_PTR + ldrb r4, [r0, #4] + ldr r0, [r1] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r5, [r0, #0xa84] +#else + ldr r5, [r0, #0xb28] +#endif + str r5, [sp, #8] +_023851E4: + mov r6, #0 + ldr sb, _023853B8 ; =DUNGEON_PTR + mov r7, r6 + mov r8, r6 +_023851F4: + ldr r0, [sb] + add r0, r0, r8, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + bl ov29_02302388 + cmp r0, #0 + beq _0238521C + cmp r8, r4 + moveq r6, r7 + add r7, r7, #1 +_0238521C: + add r8, r8, #1 + cmp r8, #4 + blt _023851F4 + ldr r0, [sp, #8] + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + ldr r0, [sp, #8] + mov r2, #1 + mov r3, r2 + add r0, r0, #4 + mov r1, #0 + bl DrawTileGrid + mov r0, #1 + bl ov29_022EB398 + str r7, [sp] + mov r1, #0 + mov r3, r6 + add r0, sp, #8 + mov r2, #1 + str r1, [sp, #4] + bl HandleMovesMenu + cmp r0, #0 + bne _023853B0 + bl ov29_022F0B9C + cmp r0, #0x1d + bne _0238529C + bl GetLeaderAction + bl ov31_02385FE0 + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_0238529C: + bl ov29_022F0B9C + cmp r0, #0x1e + bne _023852CC + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + mov r1, #0 + bl ov31_023860A4 + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_023852CC: + bl ov29_022F0B9C + cmp r0, #0x33 + bne _023852FC + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + mov r1, #0 + bl ov31_023860A4 + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_023852FC: + bl ov29_022F0B9C + cmp r0, #0x1f + bne _02385328 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + bl ov31_0238619C + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_02385328: + bl ov29_022F0B9C + cmp r0, #0x20 + bne _02385354 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + bl ov31_02386204 + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_02385354: + bl ov29_022F0B9C + cmp r0, #0x21 + bne _02385380 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + mov r1, #1 + bl ov31_02386308 + mov r0, #1 + bl ov29_022EB398 +_02385380: + bl ov29_022F0B9C + cmp r0, #0 + beq _023851E4 + mov r0, r5 + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + mov r2, #1 + mov r3, r2 + add r0, r5, #4 + mov r1, #0 + bl DrawTileGrid +_023853B0: + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_023853B8: .word DUNGEON_PTR + arm_func_end MovesMenu + + arm_func_start HandleMovesMenuWrapper0 +HandleMovesMenuWrapper0: ; 0x023853BC + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr lr, [sp, #0x10] + mov ip, #0 + str lr, [sp] + str ip, [sp, #4] + bl HandleMovesMenu + add sp, sp, #8 + ldmia sp!, {r3, pc} + arm_func_end HandleMovesMenuWrapper0 + + arm_func_start HandleMovesMenuWrapper1 +HandleMovesMenuWrapper1: ; 0x023853E0 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr lr, [sp, #0x10] + mov ip, #1 + str lr, [sp] + str ip, [sp, #4] + bl HandleMovesMenu + add sp, sp, #8 + ldmia sp!, {r3, pc} + arm_func_end HandleMovesMenuWrapper1 + + arm_func_start HandleMovesMenu +HandleMovesMenu: ; 0x02385404 +#ifdef JAPAN +#define HANDLE_MOVES_MENU_OFFSET -0xA4 +#define HANDLE_MOVES_MENU_OFFSET_2 -4 +#else +#define HANDLE_MOVES_MENU_OFFSET 0 +#define HANDLE_MOVES_MENU_OFFSET_2 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x12c + str r1, [sp, #4] + str r0, [sp] + mov r0, #0x14 + mov r1, #8 + str r2, [sp, #8] + bl MemAlloc + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r2, #0 + str r0, [r1, #8] + str r2, [r0, #0x10] + mov r0, #0x62 + bl AdvanceFrame + ldr r0, [sp, #0x154] + cmp r0, #1 + bne _0238547C + ldr r0, _02385F74 ; =DUNGEON_WINDOW_PARAMS_14 + bl CreateDialogueBox + mov r1, #0 + str r0, [sp, #0x14] + bl sub_0202F474 + ldr r0, _02385F78 ; =0x00003FCD + bl StringFromId + mov r2, r0 + ldr r0, [sp, #0x14] + ldr r1, _02385F7C ; =0x00000404 + mov r3, #0 + bl ShowStringInDialogueBox + b _023854AC +_0238547C: + ldr r0, _02385F80 ; =DUNGEON_WINDOW_PARAMS_16 + bl CreateDialogueBox + mov r1, #0 + str r0, [sp, #0x14] + bl sub_0202F474 + ldr r0, _02385F84 ; =0x00003FCC + bl StringFromId + mov r2, r0 + ldr r0, [sp, #0x14] + ldr r1, _02385F7C ; =0x00000404 + mov r3, #0 + bl ShowStringInDialogueBox +_023854AC: + ldr r0, [sp] + ldr r6, [r0] + ldr sl, [r6, #0xb4] + bl GetLeader + ldr r7, [r0, #0xb4] + mov r0, r6 + bl sub_0203F9CC + mov r8, #0 + ldr sb, _02385F88 ; =DUNGEON_PTR + mov r4, r8 + add fp, sp, #0x2c +_023854D8: + ldr r0, [sb] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] + bl ov29_02302388 + cmp r0, #0 + beq _02385514 + ldr r0, [sb] + str r4, [fp, r8, lsl #2] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] + cmp r6, r0 + streq r8, [sp, #0x10] + add r8, r8, #1 +_02385514: + add r4, r4, #1 + cmp r4, #4 + blt _023854D8 + ldr r0, [sp, #0x154] + ldr r2, [sp, #0x10] + mov r1, r8 + bl sub_0204018C + str r0, [sp, #0x18] + bl sub_02041094 + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + str r0, [r1] + mov r0, #0x1e + bl AdvanceFrame +_02385548: + mov r4, #0 + str r4, [sp, #0xc] + mov sb, r4 + bl ov29_022EA62C + ldr fp, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 +_0238555C: + bl sub_020407EC + mov r8, r0 + cmp r8, #9 + addls pc, pc, r8, lsl #2 + b _02385680 +_02385570: ; jump table + b _02385680 ; case 0 + b _0238562C ; case 1 + b _02385678 ; case 2 + b _023855A0 ; case 3 + b _023855A0 ; case 4 + b _023855A8 ; case 5 + b _02385634 ; case 6 + b _0238566C ; case 7 + b _02385650 ; case 8 + b _02385598 ; case 9 +_02385598: + mov sb, #1 + b _02385680 +_023855A0: + mov sb, #1 + b _02385680 +_023855A8: + ldr r0, [sp, #0x18] + bl sub_02030A18 + mov r1, #0 + str r1, [fp] + add r1, sp, #0x2c + str r0, [sp, #0x10] + ldr sb, [r1, r0, lsl #2] + ldr r0, _02385F88 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, sb, lsl #2 + add r0, r0, #0x12000 + ldr r6, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] + ldr r0, [sp] + ldr sl, [r6, #0xb4] + str r6, [r0] + bl GetLeaderMonster + strb sb, [r0, #0x4e] + mov r0, r6 + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + mov r2, #1 + add r0, r6, #4 + mov r1, #0 + mov r3, r2 + bl DrawTileGrid + mov r0, #0 + bl ov29_022EB398 + mov r0, r6 + bl sub_0203F9CC + bl sub_02041178 + mov sb, #1 + b _02385680 +_0238562C: + mov r4, #1 + b _02385680 +_02385634: + ldrb r1, [r6, #0x24] + mov r0, #2 + str r0, [sp, #0xc] + strb r1, [r7, #0x4e] + ldr r0, [fp] + strb r0, [r7, #0x54] + b _02385680 +_02385650: + ldrb r1, [r6, #0x24] + mov r0, #3 + str r0, [sp, #0xc] + strb r1, [r7, #0x4e] + ldr r0, [fp] + strb r0, [r7, #0x54] + b _02385680 +_0238566C: + mov r0, #1 + str r0, [sp, #0xc] + b _02385680 +_02385678: + bl sub_02041094 + str r0, [fp] +_02385680: + cmp r8, #9 + addls pc, pc, r8, lsl #2 + b _023856D0 +_0238568C: ; jump table + b _023856D0 ; case 0 + b _023856D0 ; case 1 + b _023856D0 ; case 2 + b _023856B4 ; case 3 + b _023856B4 ; case 4 + b _023856C4 ; case 5 + b _023856D0 ; case 6 + b _023856D0 ; case 7 + b _023856D0 ; case 8 + b _023856B4 ; case 9 +_023856B4: + mov r0, r6 + bl sub_0203FD44 + str r0, [fp] + b _023856D0 +_023856C4: + mov r0, r6 + bl sub_0203F9CC + bl sub_02041178 +_023856D0: + mov r0, #0x1e + bl AdvanceFrame + cmp r8, #0 + beq _0238555C + cmp r4, #0 + bne _02385EFC + cmp sb, #0 + bne _02385548 + ldr r0, [sp, #0xc] + cmp r0, #1 + bne _02385738 + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldrb r1, [r6, #0x24] + ldr r2, [r0] + add r0, r7, #0x4a + mov r2, r2, lsl #0x10 + mov r2, r2, asr #0x10 + bl ov29_022EBC2C + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #8 + mov r1, #0x1b + bl ov29_022EA370 + mov r4, #0 + b _02385EFC +_02385738: + ldr r8, [r6, #0xb4] + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + add sb, r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2 + ldr fp, [r0] + bl ov29_022EBA70 + ldrb r0, [r8, #7] + cmp r0, #0 + beq _023857B0 + ldr r0, [sp, #8] + cmp r0, #0 + beq _02385770 + mov r0, #0x14 + mov r1, #0 + bl AddDungeonSubMenuOption +_02385770: + ldrb r0, [sb, fp, lsl #3] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _023857BC + ldrb r0, [sb, fp, lsl #3] + mov r1, #0 + tst r0, #8 + beq _023857A4 + mov r0, #0x33 + bl AddDungeonSubMenuOption + b _023857BC +_023857A4: + mov r0, #0x1e + bl AddDungeonSubMenuOption + b _023857BC +_023857B0: + mov r0, #0x1f + mov r1, #0 + bl AddDungeonSubMenuOption +_023857BC: + ldr r0, [sp, #4] + cmp r0, #0 + beq _023857E0 + mov r0, #0x20 + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0x21 + mov r1, #0 + bl AddDungeonSubMenuOption +_023857E0: + mov r0, #0x1d + mov r1, #0 + bl AddDungeonSubMenuOption + ldr r0, [sp, #4] + cmp r0, #0 + bne _02385804 + mov r0, #0x20 + bl DisableDungeonSubMenuOption + b _0238595C +_02385804: + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr fp, [r0] + add r0, r8, fp, lsl #3 + add r0, r0, #0x100 + ldrh r0, [r0, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] + mov sb, fp + bl IsNot2TurnsMoveOrSketch + cmp r0, #0 + moveq r0, #0 + beq _0238592C + add sb, sb, #1 + b _02385920 +_02385834: + add r0, r8, sb, lsl #3 + ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02385928 + add r0, r8, sb, lsl #3 + add r0, r0, #0x100 + ldrh r0, [r0, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] + bl IsNot2TurnsMoveOrSketch + cmp r0, #0 + beq _02385928 + add r0, r8, sb, lsl #3 + ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r0, #2 + bne _0238591C + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 + b _023858A4 +_02385888: + add r0, r8, r3, lsl #3 + ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r0, #2 + beq _023858AC + add r0, r3, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 +_023858A4: + cmp r3, #4 + blt _02385888 +_023858AC: + mov r0, fp, lsl #0x10 + mov r2, r0, asr #0x10 + b _0238590C +_023858B8: + add r0, r2, #1 + mov r0, r0, lsl #0x10 + mov r1, r0, asr #0x10 + add r0, r8, r2, lsl #3 + add sb, r0, #0x100 + b _023858F8 +_023858D0: + add fp, r8, r1, lsl #3 + add fp, fp, #0x100 + ldrh r0, [sb, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] + ldrh fp, [fp, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] + cmp r0, fp + moveq r0, #0 + beq _0238592C + add r0, r1, #1 + mov r0, r0, lsl #0x10 + mov r1, r0, asr #0x10 +_023858F8: + cmp r1, r3 + blt _023858D0 + add r0, r2, #1 + mov r0, r0, lsl #0x10 + mov r2, r0, asr #0x10 +_0238590C: + cmp r2, r3 + blt _023858B8 + mov r0, #1 + b _0238592C +_0238591C: + add sb, sb, #1 +_02385920: + cmp sb, #4 + blt _02385834 +_02385928: + mov r0, #0 +_0238592C: + cmp r0, #0 + bne _0238593C + mov r0, #0x20 + bl DisableDungeonSubMenuOption +_0238593C: + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r0, r8 + ldr r1, [r1] + bl ov31_023863F8 + cmp r0, #0 + bne _0238595C + mov r0, #0x21 + bl DisableDungeonSubMenuOption +_0238595C: + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r0, r8 + ldr r1, [r1] + bl ov31_023863F8 + cmp r0, #0 + bne _0238597C + mov r0, #0x21 + bl DisableDungeonSubMenuOption +_0238597C: + ldr r0, [sp, #8] + cmp r0, #0 + beq _023859C0 + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r8, #0 + ldr r1, [r0] + cmp r1, #4 + bge _023859B0 + mov r0, r6 + mov r2, #1 + bl CanAiUseMove + cmp r0, #0 + movne r8, #1 +_023859B0: + cmp r8, #0 +#ifdef EUROPE + bne _023859C0 + mov r0, #0x14 + bl DisableDungeonSubMenuOption +_023859C0: + bl ov29_022EB9A0 + mov r0, #0x14 + bl ov29_022EB8B0 + mvn r1, #0 + cmp r0, r1 + moveq r8, #0 + beq _023865E4 + bl ov29_022EB804 + mov r8, r0 +_023865E4: +#else + bne _023859C0 + mov r0, #0x14 + bl DisableDungeonSubMenuOption +_023859C0: + bl ov29_022EB9A0 +#endif + ldr r0, [sp, #0xc] + cmp r0, #3 + bne _02385A40 + mov r0, #0x20 + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385A08 + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 + b _02385EFC +_02385A08: + mov r0, #0x21 + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385EFC + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 + b _02385EFC +_02385A40: + cmp r0, #2 + bne _02385AF8 + ldrb r0, [sl, #7] + cmp r0, #0 + beq _02385AC0 + mov r0, #0x1e + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385A88 + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 +_02385A88: + mov r0, #0x33 + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385EFC + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 + b _02385EFC +_02385AC0: + mov r0, #0x1f + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385EFC + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 + b _02385EFC +_02385AF8: + mov r0, #0x62 + bl AdvanceFrame + add r1, sp, #0x20 + add r0, sp, #0xd4 + mov r2, #0 + str r1, [sp, #0x9c] + bl ov31_0238513C + bl ov29_022EBA84 + mov r1, #0 + add r3, sp, #0xd4 + b _02385B30 +_02385B24: + add r2, r3, r1, lsl #3 + str r1, [r2, #4] + add r1, r1, #1 +_02385B30: + cmp r1, r0 + blt _02385B24 +#ifdef JAPAN + ldr r0, _02385F8C ; =0x00001D34 + add sb, sp, #0xd4 + mov sl, r1, lsl #3 + strh r0, [sb, sl] + add r8, sb, r1, lsl #3 + mvn r0, #0 + mov r4, #0 + str r0, [r8, #4] + strh r4, [r8, #8] + sub r0, r4, #2 + str r0, [r8, #0xc] + ldrh r0, [r8, #8] + add r3, sp, #0x20 + ldr r2, _02387200 ; =0x0000087A + strh r0, [r8, #0x18] + ldr fp, [r8, #0xc] + add r0, r3, r1 + str fp, [r8, #0x1c] + ldrh sl, [sb, sl] + ldrb fp, [r0, #1] + mov sb, #0x14 + strh sl, [r8, #0x10] + strb fp, [r0, #3] + ldrb sl, [r3, r1] + ldr fp, [r8, #4] + ldr r3, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + str fp, [r8, #0x14] + ldrh fp, [r8, #-8] + strb sl, [r0, #2] + ldrb sl, [r0, #-1] + strh fp, [r8, #8] + ldr fp, [r8, #-4] + ldr r3, [r3] + strb sl, [r0, #1] + str fp, [r8, #0xc] + strh r2, [r8, #-8] + str sb, [r8, #-4] + cmp r3, #0 + strb r4, [r0, #-1] + movle r2, #3 + strleb r2, [r0, #-1] + add r2, r3, #1 + mov r2, r2, lsl #0x10 + mov r4, r2, asr #0x10 + mov r3, #0 + ldr sb, _02387204 ; =0x0000087B + add r8, sp, #0xd4 + mov r2, r1, lsl #3 + strh sb, [r8, r2] + add r1, r8, r1, lsl #3 + mov r2, #0x15 + str r2, [r1, #4] +#else +#ifdef EUROPE + ldr r0, _02385F8C ; =0x000008DC + add sl, sp, #0xd4 + mov fp, r1, lsl #3 + strh r0, [sl, fp] + mvn r0, #0 + add sb, sl, r1, lsl #3 + str r0, [sb, #4] + mov ip, #0 + add r2, r0, #0xa40 + strh ip, [sb, #8] + sub r0, ip, #2 + str r0, [sb, #0xc] + ldrh r0, [sb, #8] + add r3, sp, #0x20 + mov lr, #0x14 +#else + ldr r2, _02385F8C ; =0x000008DC + add sl, sp, #0xd4 + mov fp, r1, lsl #3 + mvn r0, #0 + strh r2, [sl, fp] + add sb, sl, r1, lsl #3 + str r0, [sb, #4] + mov r8, #0 + add r2, r0, #0xa40 + strh r8, [sb, #8] + sub r0, r8, #2 + str r0, [sb, #0xc] + ldrh r0, [sb, #8] + add r3, sp, #0x20 + mov ip, #0x14 +#endif + strh r0, [sb, #0x18] + ldr r4, [sb, #0xc] + add r0, r3, r1 + str r4, [sb, #0x1c] + ldrh r4, [sl, fp] + ldrb sl, [r0, #1] + ldr fp, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + strh r4, [sb, #0x10] + strb sl, [r0, #3] + ldrb r4, [r3, r1] + ldr sl, [sb, #4] + ldr r3, [fp] + str sl, [sb, #0x14] + ldrh sl, [sb, #-8] + strb r4, [r0, #2] + ldrb r4, [r0, #-1] + strh sl, [sb, #8] + cmp r3, #0 + strb r4, [r0, #1] + ldr r4, [sb, #-4] +#ifdef EUROPE + strb ip, [r0, #-1] + str r4, [sb, #0xc] + strh r2, [sb, #-8] + movle r2, #3 + strleb r2, [r0, #-1] + add r2, r3, #1 + mov r2, r2, lsl #0x10 + str lr, [sb, #-4] + mov r4, r2, asr #0x10 + add sb, sp, #0xd4 + mov r2, r1, lsl #3 + mov r3, #0xa40 + strh r3, [sb, r2] + mov r3, #0 + add r1, sb, r1, lsl #3 + mov r2, #0x15 + str r2, [r1, #4] +#else + strb r8, [r0, #-1] + str r4, [sb, #0xc] + strh r2, [sb, #-8] + movle r2, #3 + str ip, [sb, #-4] + add r8, sp, #0xd4 + strleb r2, [r0, #-1] + mov sb, r1, lsl #3 + add r2, r8, r1, lsl #3 + add r1, r3, #1 + mov r1, r1, lsl #0x10 + mov r4, r1, asr #0x10 + mov r1, #0xa40 + strh r1, [r8, sb] + mov r1, #0x15 + mov r3, #0 + str r1, [r2, #4] +#endif +#endif + strb r3, [r0] + ldr sl, [r6, #0xb4] + mov r1, r3 + mov r2, #1 + b _02385C58 +_02385C1C: +#ifdef EUROPE + add sb, sl, r4, lsl #3 + ldrb sb, [sb, #0x124] + tst sb, #1 + movne sb, r2 + moveq sb, r1 + tst sb, #0xff + beq _02385C4C + add sb, sl, r4, lsl #3 + ldrb sb, [sb, #0x124] + tst sb, #2 +#else + add r8, sl, r4, lsl #3 + ldrb r8, [r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r8, #1 + movne r8, r2 + moveq r8, r1 + tst r8, #0xff + beq _02385C4C + add r8, sl, r4, lsl #3 + ldrb r8, [r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r8, #2 +#endif + moveq r3, #1 + beq _02385C60 +_02385C4C: + add r4, r4, #1 + mov r4, r4, lsl #0x10 + mov r4, r4, asr #0x10 +_02385C58: + cmp r4, #4 + blt _02385C1C +_02385C60: + cmp r3, #0 + moveq r1, #3 + streqb r1, [r0] + ldr r0, _02385F90 ; =DUNGEON_WINDOW_PARAMS_15 + ldr r1, _02385F94 ; =0x80000213 + add r2, sp, #0x3c + add r3, sp, #0xd4 + bl CreateParentMenuFromStringIds + strb r0, [sp, #0x1c] + mov r0, #0x1b + bl AdvanceFrame +#ifdef EUROPE + add r4, sp, #0xd4 + mov fp, #0x1b + ldr sb, _02385F98 ; =0x0000099B + b _02385D0C +_02385CA0: + mov r0, fp + bl AdvanceFrame + mov r0, #0 +#else + add r8, sp, #0xd4 + mov sb, #0x1b + mov fp, #0 + ldr r4, _02385F98 ; =0x0000099B + b _02385D0C +_02385CA0: + mov r0, sb + bl AdvanceFrame + mov r0, fp +#endif + add r1, sp, #0x1e + bl GetPressedButtons + ldrh r0, [sp, #0x1e] + tst r0, #0x400 + beq _02385D0C + mov r5, #0 + b _02385CEC +_02385CC8: + mov r1, r5, lsl #3 +#ifdef EUROPE + add r0, r4, r5, lsl #3 + ldr r0, [r0, #4] + cmp r0, #0 + blt _02385CF4 + cmp r8, #0 + beq _0238690C + ldrh r0, [r4, r1] + cmp r0, sb + beq _02385CF4 +_0238690C: +#else + add r0, r8, r5, lsl #3 + ldr r0, [r0, #4] + cmp r0, #0 + blt _02385CF4 + ldrh r0, [r8, r1] + cmp r0, r4 + beq _02385CF4 +#endif + add r5, r5, #1 +_02385CEC: + cmp r5, #0xa + blt _02385CC8 +_02385CF4: +#ifdef EUROPE + add r0, r4, r5, lsl #3 +#else + add r0, r8, r5, lsl #3 +#endif + ldr r0, [r0, #4] + cmp r0, #0 + blt _02385D0C + cmp r5, #0xa + blt _02385D1C +_02385D0C: + ldrsb r0, [sp, #0x1c] + bl IsParentMenuActive + cmp r0, #0 + bne _02385CA0 +_02385D1C: + ldrh r0, [sp, #0x1e] + tst r0, #0x400 + bne _02385D34 + ldrsb r0, [sp, #0x1c] + bl sub_0202ABB0 + mov r5, r0 +_02385D34: + ldrsb r0, [sp, #0x1c] + bl sub_0202AB80 + cmp r0, #0 + ble _02385D78 + mvn r0, #0 + cmp r5, r0 + bne _02385D78 + ldrsb r0, [sp, #0x1c] + bl sub_0202AB80 + add r1, sp, #0xd4 + mov r0, r0, lsl #3 + ldrh r1, [r1, r0] + ldr r0, _02385F8C ; =0x000008DC + cmp r1, r0 + bne _02385D78 + mov r0, #0 + bl PlaySeVolumeWrapper +_02385D78: + add r0, sp, #0x1c + bl ov29_0234E988 + mov r0, #0x1b + bl AdvanceFrame + cmp r5, #0 + blt _02385ED8 + add r0, sp, #0xd4 + mov r1, r5, lsl #3 + ldrh r1, [r0, r1] + ldr r0, _02385F9C ; =0x000009A8 + cmp r1, r0 + bgt _02385DC8 + sub r0, r0, #3 + subs r0, r1, r0 + addpl pc, pc, r0, lsl #2 + b _02385DE4 +_02385DB8: ; jump table + b _02385DD4 ; case 0 + b _02385DD4 ; case 1 + b _02385DD4 ; case 2 + b _02385DD4 ; case 3 +_02385DC8: + ldr r0, _02385FA0 ; =0x000009BA + cmp r1, r0 + bne _02385DE4 +_02385DD4: + ldr r0, _02385FA4 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + b _02385DEC +_02385DE4: + mov r0, #0 + bl PlaySeVolumeWrapper +_02385DEC: + cmp r5, #0x14 + bne _02385E4C + mov r0, r6 + bl sub_0203F9CC + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_020416BC + ldr r2, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r1, r0, lsl #0x10 + str r0, [r2] + mov r0, r1, asr #0x10 + bl sub_020410A4 + mov r0, r6 + bl sub_0203FD44 + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + str r0, [r1] + ldr r0, [sp, #0x18] + bl sub_020307EC + bl sub_02041178 + mov r0, #0x1b + bl AdvanceFrame + b _02385548 +_02385E4C: + cmp r5, #0x15 + bne _02385EAC + mov r0, r6 + bl sub_0203F9CC + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_020416DC + ldr r2, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r1, r0, lsl #0x10 + str r0, [r2] + mov r0, r1, asr #0x10 + bl sub_020410A4 + mov r0, r6 + bl sub_0203FD44 + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + str r0, [r1] + ldr r0, [sp, #0x18] + bl sub_020307EC + bl sub_02041178 + mov r0, #0x1b + bl AdvanceFrame + b _02385548 +_02385EAC: + mov r0, r5 + bl ov29_022EB804 + cmp r0, #0 + beq _02385EF0 + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + b _02385EF0 +_02385ED8: + ldr r0, [sp, #0x18] + bl sub_020307EC + bl sub_02041178 + mov r0, #0x1b + bl AdvanceFrame + b _02385548 +_02385EF0: + mov r0, #0x1b + bl AdvanceFrame + mov r4, #0 +_02385EFC: + ldr r0, [sp, #0x18] + bl CloseAdvancedTextBox2 + ldr r0, [sp, #0x14] + bl sub_0202F334 + ldr r0, [sp, #0x14] + bl CloseDialogueBox + mov r0, #8 + mov r1, #0x1e + bl ov29_022EA370 + bl HideTileGrid + mov r0, #0x1b + bl AdvanceFrame + bl sub_020407C0 + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0, #8] + cmp r0, #0 + beq _02385F50 + bl MemFree + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r1, #0 + str r1, [r0, #8] +_02385F50: + bl GetLeaderMonster + ldr r1, [sp, #0x10] + add r2, sp, #0x2c + ldr r1, [r2, r1, lsl #2] + strb r1, [r0, #0x4e] + mov r0, r4 + add sp, sp, #0x12c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#if defined(EUROPE) +#define HANDLE_MOVES_MENU_DATA_OFFSET 2 +#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0 +#elif defined(JAPAN) +#define HANDLE_MOVES_MENU_DATA_OFFSET 0xA03 +#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0x19D0 +#else +#define HANDLE_MOVES_MENU_DATA_OFFSET 0 +#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0 +#endif +_02385F70: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 +_02385F74: .word DUNGEON_WINDOW_PARAMS_14 +_02385F78: .word 0x00003FCD + HANDLE_MOVES_MENU_DATA_OFFSET +_02385F7C: .word 0x00000404 +_02385F80: .word DUNGEON_WINDOW_PARAMS_16 +_02385F84: .word 0x00003FCC + HANDLE_MOVES_MENU_DATA_OFFSET +_02385F88: .word DUNGEON_PTR +#ifdef JAPAN +_02385F8C: .word 0x00001D34 +_02387200: .word 0x0000087A +_02387204: .word 0x0000087B +#else +_02385F8C: .word 0x000008DC +#endif +_02385F90: .word DUNGEON_WINDOW_PARAMS_15 +_02385F94: .word 0x80000213 +_02385F98: .word 0x0000099B + HANDLE_MOVES_MENU_DATA_OFFSET_2 +_02385F9C: .word 0x000009A8 + HANDLE_MOVES_MENU_DATA_OFFSET_2 +_02385FA0: .word 0x000009BA + HANDLE_MOVES_MENU_DATA_OFFSET_2 +_02385FA4: .word 0x00003F07 + arm_func_end HandleMovesMenu + + arm_func_start ov31_02385FA8 +ov31_02385FA8: ; 0x02385FA8 + stmdb sp!, {r3, r4, r5, lr} + ldr r3, _02385FD8 ; =ov29_0237C91C + mov r1, r1, lsl #3 + ldrh r1, [r3, r1] + mov r5, r0 + mov r4, r2 + bl SetMonsterActionFields + ldr r0, _02385FDC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + strb r4, [r5, #4] + ldr r0, [r0] + strb r0, [r5, #0xa] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02385FD8: .word ov29_0237C91C +_02385FDC: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 + arm_func_end ov31_02385FA8 + + arm_func_start ov31_02385FE0 +ov31_02385FE0: ; 0x02385FE0 +#ifdef JAPAN +#define OV31_02385FE0_OFFSET -4 +#else +#define OV31_02385FE0_OFFSET 0 +#endif + stmdb sp!, {r3, lr} + ldr r1, _0238604C ; =DUNGEON_PTR + ldrb r3, [r0, #4] + ldr r1, [r1] + ldrb r2, [r0, #0xa] + add r1, r1, r3, lsl #2 + add r1, r1, #0x12000 +#ifdef JAPAN + ldr r1, [r1, #0xa84] +#else + ldr r1, [r1, #0xb28] +#endif + mov r2, r2, lsl #3 + ldr ip, [r1, #0xb4] + add r1, ip, #0x26 + OV31_02385FE0_OFFSET + add r3, r1, #0x100 + ldrh r1, [r3, r2] + orr r1, r1, #2 + strh r1, [r3, r2] + ldrb r1, [r0, #0xa] + cmp r1, #4 + bhs _02386038 + add r0, ip, #0x124 + OV31_02385FE0_OFFSET + mov r2, #4 + bl ov31_02386050 + ldmia sp!, {r3, pc} +_02386038: + add r0, ip, #0x144 + OV31_02385FE0_OFFSET + mov r1, #0 + mov r2, #1 + bl ov31_02386050 + ldmia sp!, {r3, pc} + .align 2, 0 +_0238604C: .word DUNGEON_PTR + arm_func_end ov31_02385FE0 + + arm_func_start ov31_02386050 +ov31_02386050: ; 0x02386050 + stmdb sp!, {r3, r4, r5, lr} + mov r3, r1 + mov r1, r2 + mov r2, r3 + mov r3, #0 + bl sub_020417A8 + mov r5, r0 + mov r4, #0x62 +_02386070: + bl sub_02041A18 + cmp r0, #0 + beq _0238608C + bl sub_02041A00 + mov r0, r5 + bl CloseScrollBox + b _02386098 +_0238608C: + mov r0, r4 + bl AdvanceFrame + b _02386070 +_02386098: + mov r0, #0x62 + bl AdvanceFrame + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov31_02386050 + + arm_func_start ov31_023860A4 +ov31_023860A4: ; 0x023860A4 +#ifdef JAPAN +#define OV31_023860A4_OFFSET -4 +#else +#define OV31_023860A4_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r2, _02386190 ; =DUNGEON_PTR + ldrb r3, [r0, #4] + ldr r4, [r2] + ldrb r2, [r0, #0xa] + add r0, r4, r3, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r4, [r0, #0xa84] +#else + ldr r4, [r0, #0xb28] +#endif + mov r8, r1 + ldr r7, [r4, #0xb4] + mov r6, #0 + add r1, r7, #0x124 + OV31_023860A4_OFFSET + ldrb r0, [r1, r2, lsl #3] + mov ip, #0 + add r5, r1, r2, lsl #3 + tst r0, #8 + movne r6, #1 + mov r2, ip + mov r3, #1 +_023860F0: + add r0, r7, ip, lsl #3 + ldrb r0, [r0, #0x124 + OV31_023860A4_OFFSET] + tst r0, #1 + movne r0, r3 + moveq r0, r2 + tst r0, #0xff + addne r1, r7, ip, lsl #3 + ldrneb r0, [r1, #0x124 + OV31_023860A4_OFFSET] + add ip, ip, #1 + bicne r0, r0, #8 + strneb r0, [r1, #0x124 + OV31_023860A4_OFFSET] + cmp ip, #4 + blt _023860F0 + bl ov29_0234B034 + ldrh r1, [r5, #4] + cmp r6, #0 + str r1, [r0, #0x10] + ldreqb r0, [r5] + orreq r0, r0, #8 + streqb r0, [r5] + add r0, r7, #0x124 + OV31_023860A4_OFFSET + bl AllManip1 + ldrh r0, [r5, #2] + cmp r8, #0 + orr r0, r0, #2 + strh r0, [r5, #2] + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + cmp r6, #0 + bne _02386174 + ldr r1, _02386194 ; =0x000008D8 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + b _02386180 +_02386174: + ldr r1, _02386198 ; =0x000008D9 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser +_02386180: + mov r0, #0x78 + mov r1, #0x1f + bl ov29_022EA370 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02386190: .word DUNGEON_PTR +#ifdef JAPAN +_02386194: .word 0x00001D30 +_02386198: .word 0x00001D31 +#else +_02386194: .word 0x000008D8 +_02386198: .word 0x000008D9 +#endif + arm_func_end ov31_023860A4 + + arm_func_start ov31_0238619C +ov31_0238619C: ; 0x0238619C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r1, _02386200 ; =DUNGEON_PTR + ldrb r2, [r0, #4] + ldr r1, [r1] + ldrb r4, [r0, #0xa] + add r0, r1, r2, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] + ldr r7, [r0, #0xb4] + add r5, r7, #0x120 +#else + ldr r0, [r0, #0xb28] + ldr r7, [r0, #0xb4] + add r5, r7, #0x124 +#endif + add r6, r5, r4, lsl #3 + bl ov29_0234B034 + mov r1, #0 + mov r2, r6 + mov r3, r1 + bl FormatMoveStringMore + ldrb r1, [r5, r4, lsl #3] + mov r0, r5 + eor r1, r1, #4 + strb r1, [r5, r4, lsl #3] + bl AllManip1 + ldrh r0, [r6, #2] + orr r0, r0, #2 + strh r0, [r6, #2] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02386200: .word DUNGEON_PTR + arm_func_end ov31_0238619C + + arm_func_start ov31_02386204 +ov31_02386204: ; 0x02386204 +#ifdef JAPAN +#define OV31_02386204_OFFSET -4 +#else +#define OV31_02386204_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #0xa0 + ldr r1, _02386304 ; =DUNGEON_PTR + ldrb r2, [r0, #4] + ldr r1, [r1] + ldrb r5, [r0, #0xa] + add r0, r1, r2, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r1, [r0, #0xa84] +#else + ldr r1, [r0, #0xb28] +#endif + add r0, sp, #0 + ldr r4, [r1, #0xb4] + mov r2, #0 + add r1, r4, #0x124 + OV31_02386204_OFFSET + add r1, r1, r5, lsl #3 + bl FormatMoveString + add r0, r4, #0x26 + OV31_02386204_OFFSET + add r2, r0, #0x100 + mov r1, r5, lsl #3 + ldrh r0, [r2, r1] + mov r3, #0 + orr r0, r0, #2 + strh r0, [r2, r1] + mov r1, r3 + mov r2, #1 + b _023862A4 +_02386268: + add r5, r5, #1 + cmp r5, #4 + bge _023862AC + add r0, r4, r5, lsl #3 + ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] + tst r0, #1 + movne r0, r2 + moveq r0, r1 + tst r0, #0xff + beq _023862AC + add r0, r4, r5, lsl #3 + ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] + tst r0, #2 + beq _023862AC + add r3, r3, #1 +_023862A4: + cmp r3, #4 + blt _02386268 +_023862AC: + add r0, r4, r5, lsl #3 + ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + moveq r5, #4 + cmp r5, #4 + bge _023862F4 + add ip, r4, #0x124 + OV31_02386204_OFFSET + ldrb r2, [ip, r5, lsl #3] + add r0, sp, #0x50 + add r1, ip, r5, lsl #3 + orr r2, r2, #2 + bic r3, r2, #4 + mov r2, #0 + strb r3, [ip, r5, lsl #3] + bl FormatMoveString +_023862F4: + add r0, r4, #0x124 + OV31_02386204_OFFSET + bl AllManip1 + add sp, sp, #0xa0 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02386304: .word DUNGEON_PTR + arm_func_end ov31_02386204 + + arm_func_start ov31_02386308 +ov31_02386308: ; 0x02386308 +#ifdef JAPAN +#define OV31_02386308_OFFSET -4 +#else +#define OV31_02386308_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r2, _023863EC ; =DUNGEON_PTR + ldrb r3, [r0, #4] + ldr r2, [r2] + ldrb r7, [r0, #0xa] + add r0, r2, r3, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r4, [r0, #0xa84] +#else + ldr r4, [r0, #0xb28] +#endif + mov r8, r1 + ldr r6, [r4, #0xb4] + mov r5, #0 + bl ov29_0234B034 + add r1, r6, r7, lsl #3 + add r1, r1, #0x100 + ldrh r2, [r1, #0x28 + OV31_02386308_OFFSET] + mov r3, r7, lsl #3 + add r1, r6, #0x26 + OV31_02386308_OFFSET + str r2, [r0, #0x10] + add r2, r1, #0x100 + ldrh r1, [r2, r3] + add r7, r7, #1 + mov r0, r5 + orr r1, r1, #2 + strh r1, [r2, r3] + add ip, r6, #0x124 + OV31_02386308_OFFSET + mov r1, #1 + b _023863A0 +_02386374: + cmp r7, #4 + bge _023863A8 + ldrb r2, [ip, r7, lsl #3] + mov r3, r7, lsl #3 + tst r2, #2 + beq _023863A8 + bic r2, r2, #2 + mov r5, r1 + strb r2, [ip, r3] + add r7, r7, #1 + add r0, r0, #1 +_023863A0: + cmp r0, #4 + blt _02386374 +_023863A8: + add r0, r6, #0x124 + OV31_02386308_OFFSET + bl AllManip1 + cmp r8, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + cmp r5, #0 + beq _023863D0 + ldr r1, _023863F0 ; =0x000008DA + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + b _023863DC +_023863D0: + ldr r1, _023863F4 ; =0x000008DB + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser +_023863DC: + mov r0, #0x78 + mov r1, #0x1f + bl ov29_022EA370 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_023863EC: .word DUNGEON_PTR +#ifdef JAPAN +_023863F0: .word 0x00001D32 +_023863F4: .word 0x00001D33 +#else +_023863F0: .word 0x000008DA +_023863F4: .word 0x000008DB +#endif + arm_func_end ov31_02386308 + + arm_func_start ov31_023863F8 +ov31_023863F8: ; 0x023863F8 + stmdb sp!, {r3, lr} + mov lr, #0 + mov ip, lr + add r1, r1, #1 + mov r2, #1 + b _02386434 +_02386410: + cmp r1, #4 + bge _0238643C + add r3, r0, r1, lsl #3 +#ifdef JAPAN + ldrb r3, [r3, #0x120] +#else + ldrb r3, [r3, #0x124] +#endif + tst r3, #2 + beq _0238643C + mov lr, r2 + add r1, r1, #1 + add ip, ip, #1 +_02386434: + cmp ip, #4 + blt _02386410 +_0238643C: + cmp lr, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end ov31_023863F8 + + arm_func_start ov31_02386450 +ov31_02386450: ; 0x02386450 + stmdb sp!, {r3, lr} + ldr r0, _02386478 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0, #4] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl MemFree + ldr r0, _02386478 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r1, #0 + str r1, [r0, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_02386478: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 + arm_func_end ov31_02386450 + + arm_func_start ov31_0238647C +ov31_0238647C: ; 0x0238647C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x114 + mov r6, r0 + mov r5, r1 + str r2, [sp, #4] + mov r0, #0x284 + mov r1, #8 + str r3, [sp, #8] + mvn r4, #1 + bl MemAlloc + ldr r1, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r2, #0 + str r0, [r1, #4] + str r2, [r1] +_023864B4: + mov r0, #6 + mov r1, #0 + bl ov29_022EA428 + ldr r0, _02386B10 ; =ov29_0235352C + ldr r0, [r0] + ldr r0, [r0, #0x24] + bl sub_0200B3D4 + mvn sb, #1 + ldr r7, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + add r8, sb, #1 + add fp, sp, #0xbc +_023864E0: + cmp r4, sb + bne _02386578 + ldr r3, [r6, #0xb4] + add r0, sp, #0x14 + ldrsh r2, [r3, #2] + ldrb r3, [r3, #0x48] + mov r1, #2 + bl sub_02053CA0 + mov r0, r6 + bl sub_0203F9CC + mov r1, #0 + b _0238652C +_02386510: + add r0, r5, r1, lsl #3 + ldrh r0, [r0, #2] + tst r0, #4 + bne _02386534 + add r0, r1, #1 + mov r0, r0, lsl #0x10 + mov r1, r0, asr #0x10 +_0238652C: + cmp r1, #8 + blt _02386510 +_02386534: + add r0, r5, r1, lsl #3 + ldrh r0, [r0, #4] + bl sub_0203FD14 + ldr r0, [sp, #8] + mov r1, #0 + cmp r0, #0 + add r3, sp, #0x14 + beq _02386568 + mov r0, #2 + mov r2, r1 + bl sub_0204019C + mov r4, r0 + b _02386578 +_02386568: + mov r0, #3 + mov r2, r1 + bl sub_0204019C + mov r4, r0 +_02386578: + mov r0, #0x1e + bl AdvanceFrame + bl sub_020407EC + mov sl, r0 + bl sub_02041094 + cmp sl, #2 + str r0, [r7] + moveq sl, #0 + beq _023865B4 + cmp sl, #1 + moveq sl, #1 + beq _023865B4 + cmp sl, #7 + bne _02386578 + mov sl, #2 +_023865B4: + mov r0, #0x1e + bl AdvanceFrame + cmp sl, #1 + ldreq r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mvneq r1, #0 + streq r1, [r0] + beq _02386924 + cmp sl, #2 + bne _02386694 + mov r0, r4 + bl SetAdvancedTextBoxState5 + mov r0, #0x1e + bl AdvanceFrame + mov r0, r4 + bl CloseAdvancedTextBox + mov r0, #0x1b + mov r4, sb + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + ldr r0, [r7] + cmp r0, #4 + bge _02386664 + ldr r1, [r7] + mov r0, r5 + mov r2, #4 + bl ov31_02386050 + b _02386674 +_02386664: + add r0, r5, #0x20 + mov r1, #0 + mov r2, #1 + bl ov31_02386050 +_02386674: + bl sub_020407C0 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #2 + mov r1, #0x1b + bl ov29_022EA370 + b _023864E0 +_02386694: + bl ov29_022EBA70 + mov r0, #0x22 + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0x21 + mov r1, #0 + bl AddDungeonSubMenuOption + ldr r0, [r7] + mov r3, #0 + add r1, r0, #1 + mov r2, r3 + b _023866E4 +_023866C4: + cmp r1, #8 + bge _023866EC + ldrb r0, [r5, r1, lsl #3] + tst r0, #2 + beq _023866EC + mov r3, #1 + add r1, r1, #1 + add r2, r2, #1 +_023866E4: + cmp r2, #8 + blt _023866C4 +_023866EC: + cmp r3, #0 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + bne _02386708 + mov r0, #0x21 + bl DisableDungeonSubMenuOption +_02386708: + mov r0, #0x1d + mov r1, #0 + bl AddDungeonSubMenuOption + add r0, sp, #0x18 + str r0, [sp, #0x84] + mov r0, fp + add r1, sp, #0x18 + mov r2, #0 + bl ov31_0238513C + bl ov29_022EBA84 + mov r2, #0 + b _0238674C +_02386738: + add r1, fp, r2, lsl #3 + str r2, [r1, #4] + add r1, r2, #1 + mov r1, r1, lsl #0x10 + mov r2, r1, asr #0x10 +_0238674C: + cmp r2, r0 + blt _02386738 + ldr r0, _02386B14 ; =0x000008DC + mov r1, r2, lsl #3 + strh r0, [fp, r1] + add r0, fp, r2, lsl #3 + str r8, [r0, #4] + add r0, r2, #1 + mov r0, r0, lsl #0x10 + mov r2, r0, asr #0x10 + mov r1, r2, lsl #3 + mov r0, #0 + strh r0, [fp, r1] + add r0, fp, r2, lsl #3 + str r8, [r0, #4] + ldr r0, _02386B18 ; =DUNGEON_WINDOW_PARAMS_15 + ldr r1, _02386B1C ; =0x00000213 + add r2, sp, #0x24 + mov r3, fp + bl CreateParentMenuFromStringIds + str r0, [sp, #0x10] +_023867A0: + mov r0, #0x1b + bl AdvanceFrame + ldr r0, [sp, #0x10] + bl IsParentMenuActive + cmp r0, #0 + bne _023867A0 + ldr r0, [sp, #0x10] + bl sub_0202ABB0 + movs sl, r0 + movmi r0, #1 + strmi r0, [sp, #0xc] + movpl r0, #0 + strpl r0, [sp, #0xc] + mov r0, #0x1b + bl AdvanceFrame + ldr r0, [sp, #0x10] + bl CloseParentMenu + ldr r0, [sp, #0xc] + cmp r0, #1 + bne _023867F8 + bl sub_020416FC + b _023864E0 +_023867F8: + mov r0, #6 + mov r1, #0 + bl ov29_022EA428 + mov r0, r4 + bl SetAdvancedTextBoxState5 +_0238680C: + mov r0, #0x1b + bl AdvanceFrame + mov r0, r4 + bl IsAdvancedTextBoxActive + cmp r0, #0 + bne _0238680C + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, r4 + bl CloseAdvancedTextBox + mov r4, sb + bl sub_020407C0 + cmp sl, #1 + bne _023868E8 + ldr r0, [r7] + mov r1, #0 + add r2, r0, #1 + b _023868C0 +_0238689C: + cmp r2, #8 + bge _023868C8 + ldrb r0, [r5, r2, lsl #3] + tst r0, #2 + beq _023868C8 + bic r0, r0, #2 + strb r0, [r5, r2, lsl #3] + add r2, r2, #1 + add r1, r1, #1 +_023868C0: + cmp r1, #8 + blt _0238689C +_023868C8: + mov r0, r5 + bl AllManip2 + ldr r0, [r6, #0xb4] + mov r1, r5 +#ifdef JAPAN + add r0, r0, #0x120 +#else + add r0, r0, #0x124 +#endif + mov r2, #0x22 + bl memcpy + b _023864E0 +_023868E8: + cmp sl, #2 + bne _02386924 + ldr r0, [r7] + cmp r0, #4 + bge _02386910 + ldr r1, [r7] + mov r0, r5 + mov r2, #4 + bl ov31_02386050 + b _023864E0 +_02386910: + add r0, r5, #0x20 + mov r1, #0 + mov r2, #1 + bl ov31_02386050 + b _023864E0 +_02386924: + mvn r0, #1 + cmp r4, r0 + beq _02386950 + mov r0, r4 + bl SetAdvancedTextBoxState5 + mov r0, #0x1b + bl AdvanceFrame + mov r0, r4 + bl CloseAdvancedTextBox + mvn r4, #1 + bl sub_020407C0 +_02386950: + ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r1, [r0] + cmp r1, #0 + blt _02386AE8 + ldr r0, [sp, #4] + cmp r0, #0 + beq _02386A04 + mov r0, r1, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02041154 + mov r1, r0 + mov r0, #0 + bl ov29_0234B084 + ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + cmp r0, #4 + bge _023869D8 + bl sub_02041364 + cmp r0, #0 + mov r0, #0 + mov r2, #1 + beq _023869C0 + ldr r1, _02386B20 ; =0x000008D6 + mov r3, r0 + str r2, [sp] + bl YesNoMenu + mov r7, r0 + b _023869F4 +_023869C0: + ldr r1, _02386B24 ; =0x000008D7 + mov r3, r0 + str r2, [sp] + bl YesNoMenu + mov r7, r0 + b _023869F4 +_023869D8: + mov r0, #0 + mov r2, #1 + ldr r1, _02386B24 ; =0x000008D7 + mov r3, r0 + str r2, [sp] + bl YesNoMenu + mov r7, r0 +_023869F4: + mov r0, #1 + mov r1, #0 + bl ov29_0233A0E8 + b _02386A08 +_02386A04: + mov r7, #1 +_02386A08: + cmp r7, #1 + bne _023864B4 + ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + cmp r0, #4 + movge r1, #0 + strgeb r1, [r5, r0, lsl #3] + bge _02386AE8 + bl sub_02041484 + bl sub_0203FD38 + mov r1, #0 + mov r2, r1 + mov r3, #1 + b _02386A80 +_02386A40: + add r8, r0, r1, lsl #3 + add r7, r5, r1, lsl #3 + mov r6, #4 +_02386A4C: + ldrh r4, [r8], #2 + subs r6, r6, #1 + strh r4, [r7], #2 + bne _02386A4C + ldrb r4, [r5, r1, lsl #3] + tst r4, #1 + movne r4, r3 + moveq r4, r2 + tst r4, #0xff + beq _02386A88 + add r1, r1, #1 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 +_02386A80: + cmp r1, #4 + blt _02386A40 +_02386A88: + mov r6, #4 +_02386A8C: + add r4, r5, r6, lsl #3 + add r3, r5, r1, lsl #3 + mov r2, #4 +_02386A98: + ldrh r0, [r4], #2 + subs r2, r2, #1 + strh r0, [r3], #2 + bne _02386A98 + add r0, r6, #1 + mov r0, r0, lsl #0x10 + add r1, r1, #1 + mov r6, r0, asr #0x10 + mov r0, r1, lsl #0x10 + cmp r6, #8 + mov r1, r0, asr #0x10 + blt _02386A8C + mov r2, #0 + b _02386AE0 +_02386AD0: + add r0, r1, #1 + mov r0, r0, lsl #0x10 + strb r2, [r5, r1, lsl #3] + mov r1, r0, asr #0x10 +_02386AE0: + cmp r1, #8 + blt _02386AD0 +_02386AE8: + bl ov31_02386450 + ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + cmp r0, #0 + movge r0, #1 + movlt r0, #0 + and r0, r0, #0xff + add sp, sp, #0x114 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define OV31_0238647C_OFFSET 0x1458 +#else +#define OV31_0238647C_OFFSET 0 +#endif +_02386B0C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 +_02386B10: .word ov29_0235352C +_02386B14: .word 0x000008DC + OV31_0238647C_OFFSET +_02386B18: .word DUNGEON_WINDOW_PARAMS_15 +_02386B1C: .word 0x00000213 +_02386B20: .word 0x000008D6 + OV31_0238647C_OFFSET +_02386B24: .word 0x000008D7 + OV31_0238647C_OFFSET + arm_func_end ov31_0238647C + + arm_func_start ov31_02386B28 +ov31_02386B28: ; 0x02386B28 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #0xa4 + ldr r0, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + ldr r1, [r0, #0x64] + ldrsh r0, [r1, #4] + ldrsh r1, [r1, #6] + bl GetTile + mov r4, r0 + ldr r0, _02386C0C ; =0x000008D1 + bl StringFromId + ldr r1, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r3, r0 + ldr r0, [r1] + mov r1, #8 + add r0, r0, #0x100 + ldrsb r0, [r0, #0x60] + mov r2, #2 + bl DrawTextInWindow + ldr r1, [r4, #0x10] + cmp r1, #0 + moveq r0, #0 + beq _02386B98 + ldr r0, [r1] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_02386B98: + cmp r0, #0 + beq _02386C00 + add r0, sp, #0x54 + mov r2, #0 + bl ov29_022E2A78 + ldr r0, [r4, #0x10] + bl ov29_022E1618 + ldrb r1, [r0] + ldr r0, _02386C10 ; =0x000008D2 + str r1, [sp, #0x14] + bl StringFromId + add r1, sp, #4 + mov r2, r0 + str r1, [sp] + add r0, sp, #0x54 + mov r1, #0x50 + mov r3, #0 + bl PreprocessString + ldr r0, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r1, #0x10 + ldr r0, [r0] + mov r2, #0x12 + add r0, r0, #0x100 + ldrsb r0, [r0, #0x60] + add r3, sp, #0x54 + bl DrawTextInWindow +_02386C00: + add sp, sp, #0xa4 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_02386C08: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C +#ifdef JAPAN +_02386C0C: .word 0x00001D29 +_02386C10: .word 0x00001D2A +#else +_02386C0C: .word 0x000008D1 +_02386C10: .word 0x000008D2 +#endif + arm_func_end ov31_02386B28 + + arm_func_start ov31_02386C14 +ov31_02386C14: ; 0x02386C14 + stmdb sp!, {r3, lr} + ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + add r0, r0, #0x61 + add r0, r0, #0x100 + bl ov29_0234E988 + ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + add r0, r0, #0x100 + ldrsb r0, [r0, #0x60] + bl sub_0202F954 + mov r0, #0x62 + bl AdvanceFrame + mov r0, #0x62 + bl AdvanceFrame + ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + add r0, r0, #0x100 + ldrsb r0, [r0, #0x60] + bl CloseTextBox + ldmia sp!, {r3, pc} + .align 2, 0 +_02386C68: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C + arm_func_end ov31_02386C14 + + arm_func_start ov31_02386C6C +ov31_02386C6C: ; 0x02386C6C + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #0xf4 + mov r5, r0 + mov r0, #0x164 + mov r1, #8 + bl MemAlloc + ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + str r0, [r1] + str r5, [r0, #0x64] +_02386C90: + bl ov29_022EA62C + ldr r0, _02386F10 ; =DUNGEON_WINDOW_PARAMS_18 + ldr r1, _02386F14 ; =ov31_02386B28 + bl CreateTextBox + ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r1, [r1] + strb r0, [r1, #0x160] + bl ov29_022EBA70 + mov r0, #0x25 + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0xc + mov r1, #0 + bl AddDungeonSubMenuOption + bl ov29_022EB9A0 + bl ov29_022EBA84 + mov r1, #0 + ldr r2, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + b _02386CF0 +_02386CDC: + ldr r3, [r2] + add r4, r1, #1 + add r3, r3, r1, lsl #3 + mov r1, r4 + str r4, [r3, #4] +_02386CF0: + cmp r1, r0 + blt _02386CDC + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r2, #0 + ldr r4, [r0] + mov r3, r1, lsl #3 + strh r2, [r4, r3] + ldr r3, [r0] + sub r4, r2, #1 + add r3, r3, r1, lsl #3 + str r4, [r3, #4] + ldr r3, [r0] + add r3, r3, r1, lsl #3 + strh r2, [r3, #8] + ldr r3, [r0] + add r1, r3, r1, lsl #3 + str r4, [r1, #0xc] + ldr r0, [r0] + add r1, r0, #0x58 + bl ov31_0238513C + ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, _02386F18 ; =DUNGEON_WINDOW_PARAMS_17 + ldr r3, [r1] + ldr r1, _02386F1C ; =0x00000213 + add r4, r3, #0x58 + add r2, sp, #0x5c + str r4, [sp, #0xbc] + bl CreateParentMenuFromStringIds + ldr r6, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r4, #0x2d + ldr r1, [r6] + strb r0, [r1, #0x161] +_02386D70: + mov r0, r4 + bl AdvanceFrame + ldr r0, [r6] + add r0, r0, #0x100 + ldrsb r0, [r0, #0x61] + bl IsParentMenuActive + cmp r0, #0 + bne _02386D70 + ldr r0, [r6] + add r0, r0, #0x100 + ldrsb r0, [r0, #0x61] + bl sub_0202ABB0 + ldr r1, [r6] + sub r0, r0, #1 + str r0, [r1, #0x124] + ldr r0, [r6] + ldr r0, [r0, #0x124] + cmp r0, #0 + movlt r6, #1 + blt _02386EBC + cmp r0, #1 + bne _02386E70 + bl ov31_02386C14 + ldrsh r0, [r5, #4] + ldrsh r1, [r5, #6] + bl GetTile + ldr r0, [r0, #0x10] + cmp r0, #0 + beq _02386E68 + ldr r1, [r0] + cmp r1, #2 + bne _02386E68 + bl GetTrapInfo + ldrb r3, [r0] + add r2, sp, #0xc + ldr r1, _02386F20 ; =0x00001013 + str r3, [sp, #0x1c] + str r2, [sp] + ldrb r2, [r0] + ldr r0, _02386F24 ; =DUNGEON_WINDOW_PARAMS_19 +#if defined(EUROPE) + sub r3, r1, #0x740 + add r2, r2, #0xdc + add r2, r2, #0x3400 +#elif defined(JAPAN) + ldr r3, _023881A0 ; =0x00001D2B + add r2, r2, #0x5f + add r2, r2, #0x4700 +#else + sub r3, r1, #0x740 + add r2, r2, #0xda + add r2, r2, #0x3400 +#endif + mov r2, r2, lsl #0x10 + mov r2, r2, lsr #0x10 + str r2, [sp, #4] + mov r2, #0 + str r2, [sp, #8] + bl CreateScrollBoxSingle + mov r6, r0 + mov r4, #0x16 +_02386E3C: + mov r0, r4 + bl AdvanceFrame + mov r0, r6 + bl IsScrollBoxActive + cmp r0, #0 + bne _02386E3C + mov r0, r6 + bl CloseScrollBox + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 +_02386E68: + mov r6, #2 + b _02386EBC +_02386E70: + bl ov29_022EB804 + cmp r0, #0 + beq _02386D70 + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r4, [r5, #0xb4] + ldr r0, [r0] + ldr r1, _02386F28 ; =ov29_0237C91C + ldr r2, [r0, #0x124] + add r0, r4, #0x4a + mov r2, r2, lsl #3 + ldrh r1, [r1, r2] + bl SetMonsterActionFields + mov r6, #0 + strb r6, [r4, #0x4e] + strh r6, [r4, #0x50] + strh r6, [r4, #0x52] + strb r6, [r4, #0x54] + strh r6, [r4, #0x56] + strh r6, [r4, #0x58] +_02386EBC: + mov r0, #0x2d + bl AdvanceFrame + cmp r6, #2 + beq _02386C90 + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + cmp r0, #0 + beq _02386EF8 + bl ov31_02386C14 + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + bl MemFree + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r1, #0 + str r1, [r0] +_02386EF8: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + add sp, sp, #0xf4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02386F0C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C +_02386F10: .word DUNGEON_WINDOW_PARAMS_18 +_02386F14: .word ov31_02386B28 +_02386F18: .word DUNGEON_WINDOW_PARAMS_17 +_02386F1C: .word 0x00000213 +_02386F20: .word 0x00001013 +_02386F24: .word DUNGEON_WINDOW_PARAMS_19 +#ifdef JAPAN +_023881A0: .word 0x00001D2B +#endif +_02386F28: .word ov29_0237C91C + arm_func_end ov31_02386C6C + + arm_func_start ov31_02386F2C +ov31_02386F2C: ; 0x02386F2C + stmdb sp!, {r3, lr} + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x294 + add r0, r0, #0x400 + bl ov29_0234E988 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x97] + cmp r0, r1 + beq _02386F64 + bl CloseAdvancedTextBox +_02386F64: + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x98] + cmp r0, r1 + beq _02386F98 + bl CloseAdvancedTextBox + bl sub_020407C0 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x698] +_02386F98: + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x96] + cmp r0, r1 + beq _02386FB8 + bl CloseTextBox +_02386FB8: + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x3a4 + add r0, r0, #0x400 + bl ov31_023899D4 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x3a8 + add r0, r0, #0x400 + bl ov31_02388714 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x95 + add r0, r0, #0x600 + bl ov29_0234E988 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + bl MemFree + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02387010: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 + arm_func_end ov31_02386F2C + + arm_func_start ov31_02387014 +ov31_02387014: ; 0x02387014 + ldr r1, [r0, #0xb4] + ldr ip, _02387044 ; =ov31_023899B8 + ldrb r0, [r1, #7] + mov r2, #1 + cmp r0, #0 + movne r1, #0xb + ldr r0, _02387048 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldreqb r1, [r1, #0xa8] + ldr r0, [r0] + and r1, r1, #0xff + ldr r0, [r0, #0x7a4] + bx ip + .align 2, 0 +_02387044: .word ov31_023899B8 +_02387048: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 + arm_func_end ov31_02387014 + + arm_func_start TeamMenu +TeamMenu: ; 0x0238704C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x13c + mov sl, r0 + ldr r0, _02387614 ; =0x000007AC + mov r1, #8 + bl MemAlloc + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + str r0, [r1] + bl ov31_023880D8 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + str sl, [r0, #0x69c] + bl ov29_0234EBCC + mov r7, #0 + add r0, sp, #0xb0 + mov r1, #1 + mov r2, r7 + mov r3, r7 + str r7, [sp] + mov r8, r7 + bl ov29_0234EA18 + ldr r2, _0238761C ; =ov31_02387014 + add r0, sp, #0xb0 + mov r1, #0xe + mov r3, r7 + bl ov31_02388114 + ldr r2, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, _02387620 ; =DUNGEON_WINDOW_PARAMS_22 + ldr r3, [r2] + str r0, [r3, #0x7a8] + ldr r0, [r2] + ldr r0, [r0, #0x7a8] + bl ov31_02388444 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r1, sp, #8 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_02388704 + ldr r1, [sp, #0xc] + ldr r0, [sp, #0x10] + add r1, r1, #8 + mov r0, r0, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r0, r0, asr #0x10 + mov r1, r1, asr #0x10 + bl ov31_0238991C + ldr r3, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r1, #0xb + ldr r4, [r3] + mov r2, r7 + str r0, [r4, #0x7a4] + ldr r0, [r3] + ldr r0, [r0, #0x7a4] + bl ov31_023899B8 +_02387124: + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_02388534 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_023886D4 + cmp r0, #1 + moveq r7, #1 + beq _023875D8 + cmp r0, #2 + bne _02387184 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r8, #1 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_023886DC + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r2, [r1] + str r0, [r2, #0x760] + ldr r0, [r1] + ldr sb, [r0, #0x760] + b _023871B0 +_02387184: + cmp r0, #3 + bne _023871B0 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_023886DC + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r2, [r1] + str r0, [r2, #0x760] + ldr r0, [r1] + ldr sb, [r0, #0x760] +_023871B0: + bl ov29_022EBA70 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r1, sp, #0xb0 + ldr r2, [r0] + ldr r0, _02387624 ; =DUNGEON_PTR + ldr r2, [r2, #0x760] + ldr r3, [r0] + add r0, r1, r2, lsl #5 + ldr r1, [r0, #4] + mov r0, #0x1b + add r1, r3, r1, lsl #2 + add r1, r1, #0x12000 +#ifdef JAPAN + ldr r4, [r1, #0xa84] +#else + ldr r4, [r1, #0xb28] +#endif + mov r1, #0 + ldr r5, [r4, #0xb4] + bl AddDungeonSubMenuOption + mov r0, #0x19 + mov r1, #0 + bl AddDungeonSubMenuOption + ldrb r0, [r5, #7] + cmp r0, #0 + bne _02387278 + ldr r0, _02387624 ; =DUNGEON_PTR + ldr r1, [r0] + ldrb r0, [r1, #0x75d] + cmp r0, #0 + ldreqb r0, [r1, #0x75e] + cmpeq r0, #0 + bne _0238726C + ldrsh r0, [r5, #0xc] + bl GetActiveTeamMember + ldrsh r1, [r0, #8] + ldr r0, _02387628 ; =0x00005AA5 + cmp r1, r0 + beq _0238726C + ldrb r0, [r5, #0x48] + bl JoinedAtRangeCheck2Veneer + cmp r0, #0 + beq _02387260 + ldr r0, _02387624 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75c] + cmp r0, #0 + beq _0238726C +_02387260: + mov r0, #0x34 + mov r1, #0 + bl AddDungeonSubMenuOption +_0238726C: + mov r0, #0x1c + mov r1, #0 + bl AddDungeonSubMenuOption +_02387278: + mov r0, #0x30 + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0x1a + mov r1, #0 + bl AddDungeonSubMenuOption + ldrb r0, [r5, #7] + cmp r0, #0 + ldreq r0, _02387624 ; =DUNGEON_PTR + ldreq r1, [r0] + ldreqb r0, [r1, #0x75e] + cmpeq r0, #0 + bne _02387320 + ldrb r0, [r1, #0x75c] + cmp r0, #0 + beq _02387320 + ldrb r0, [r1, #0x748] + bl GetLeaderChangeFlag + cmp r0, #0 + beq _02387320 + mov r0, #0x3b + mov r1, #0 + bl AddDungeonSubMenuOption + ldrsh r0, [r5, #0xc] + mov r6, #1 + cmp r0, #4 + movge r6, #0 + bge _023872FC + bl GetActiveTeamMember + ldrsh r0, [r0, #8] + bl ov29_022F9C34 + cmp r0, #0 + movne r6, #0 +_023872FC: + mov r0, r4 + mov r1, #0 + bl CheckVariousStatuses2 + cmp r0, #0 + movne r6, #0 + cmp r6, #0 + bne _02387320 + mov r0, #0x3b + bl DisableDungeonSubMenuOption +_02387320: + mov r0, r5 + bl IsExperienceLocked + cmp r0, #0 + beq _0238735C + mov r0, #0x19 + bl DisableDungeonSubMenuOption + mov r0, #0x3b + bl DisableDungeonSubMenuOption + mov r0, #0x1a + bl DisableDungeonSubMenuOption + mov r0, #0x30 + bl DisableDungeonSubMenuOption + mov r0, #0x34 + bl DisableDungeonSubMenuOption + b _02387380 +_0238735C: + ldrb r0, [r5, #7] + cmp r0, #0 + beq _02387380 + mov r0, r4 + bl ov29_0234FBD4 + cmp r0, #0 + bne _02387380 + mov r0, #0x1a + bl DisableDungeonSubMenuOption +_02387380: + bl ov29_022EB9A0 + cmp r8, #0 + beq _023873C8 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r3, [sl, #0xb4] + ldr r0, [r0] + add r1, sp, #0xb4 + ldr r2, [r0, #0x760] + add r0, r3, #0x4a + ldr r1, [r1, r2, lsl #5] + bl ov29_022EBA94 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r7, #0 + ldr r0, [r0] + add r0, r0, #0x294 + add r0, r0, #0x400 + bl ov29_0234E988 + b _023875D8 +_023873C8: + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + cmp sb, #0 + ldr r0, [r0] + moveq r2, #1 + add r1, r0, #0x188 + movne r2, #0 + add r0, r0, #0x530 + add r1, r1, #0x400 + bl ov31_0238513C + bl ov29_022EBA84 + mov r2, #0 + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + b _02387410 +_023873FC: + ldr r3, [r1] + add r4, r2, #1 + add r3, r3, r2, lsl #3 + mov r2, r4 + str r4, [r3, #0x534] +_02387410: + cmp r2, r0 + blt _023873FC + ldr r4, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r3, _0238762C ; =0x00000A3C + ldr r0, [r4] + mvn r1, #0 + add r0, r0, r2, lsl #3 + add r0, r0, #0x500 + strh r3, [r0, #0x30] + ldr r0, [r4] + mov r5, #0 + add r0, r0, r2, lsl #3 + str r1, [r0, #0x534] + ldr r3, [r4] + mov r0, #0xa + add r3, r3, r2, lsl #3 + add r3, r3, #0x500 + strh r5, [r3, #0x38] + ldr r3, [r4] + add r2, r3, r2, lsl #3 + str r1, [r2, #0x53c] + ldr r1, [r4] + add r1, r1, #0x188 + add r1, r1, #0x400 + str r1, [sp, #0x78] + bl Arm9LoadUnkFieldNa0x2029EC8 + add r4, r0, #1 + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, _02387630 ; =DUNGEON_WINDOW_PARAMS_23 + ldr r3, [r1] + ldr r1, _02387634 ; =0x00000233 + add r2, sp, #0x18 + add r3, r3, #0x530 + str r4, [sp, #0x18] + bl CreateParentMenuFromStringIds + ldr r4, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r6, #0x1b + ldr r1, [r4] + add fp, sp, #4 + strb r0, [r1, #0x694] +_023874B0: + mov r0, r6 + bl AdvanceFrame + mov r0, r5 + mov r1, fp + bl GetPressedButtons + ldr r0, [r4] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x94] + bl IsParentMenuActive + cmp r0, #0 + ldr r0, [r4] + add r0, r0, #0x600 + bne _02387578 + ldrsb r0, [r0, #0x94] + bl sub_0202ABB0 + subs r1, r0, #1 + bmi _0238754C + ldr r0, [r4] + str r1, [r0, #0x760] + ldr r0, [r4] + ldr r0, [r0, #0x760] + bl ov29_022EB804 + cmp r0, #0 + beq _023874B0 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, _02387638 ; =ov29_0237C91C + ldr r0, [r0] + ldr r5, [sl, #0xb4] + ldr r2, [r0, #0x760] + add r0, r5, #0x4a + mov r2, r2, lsl #3 + ldrh r1, [r1, r2] + bl SetMonsterActionFields + add r0, sp, #0xb0 + add r0, r0, sb, lsl #5 + ldr r0, [r0, #4] + mov r4, #0 + strb r0, [r5, #0x4e] + b _02387594 +_0238754C: + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x294 + add r0, r0, #0x400 + bl ov29_0234E988 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_023886F4 + mov r4, #1 + b _02387594 +_02387578: + ldrsb r0, [r0, #0x94] + bl sub_0202AB80 + mov r1, r0 + mov r0, #0xa + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 + b _023874B0 +_02387594: + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x294 + add r0, r0, #0x400 + bl ov29_0234E988 + cmp r4, #1 + beq _02387124 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x95 + add r0, r0, #0x600 + bl ov29_0234E988 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x3a4 + add r0, r0, #0x400 + bl ov31_023899D4 +_023875D8: + cmp r7, #0 + beq _023875F0 + bl GetLeader + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster +_023875F0: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl ov31_02386F2C + mov r0, #0x1b + bl AdvanceFrame + mov r0, r7 + add sp, sp, #0x13c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02387614: .word 0x000007AC +_02387618: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 +_0238761C: .word ov31_02387014 +_02387620: .word DUNGEON_WINDOW_PARAMS_22 +_02387624: .word DUNGEON_PTR +_02387628: .word 0x00005AA5 +#ifdef JAPAN +_0238762C: .word 0x00000877 +#else +_0238762C: .word 0x00000A3C +#endif +_02387630: .word DUNGEON_WINDOW_PARAMS_23 +_02387634: .word 0x00000233 +_02387638: .word ov29_0237C91C + arm_func_end TeamMenu + + arm_func_start ov31_0238763C +ov31_0238763C: ; 0x0238763C + cmp r0, #0 + moveq r0, #0 + bxeq lr + ldr r0, [r0] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + arm_func_end ov31_0238763C + + arm_func_start ov31_02387660 +ov31_02387660: ; 0x02387660 + ldr r1, _02387680 ; =DUNGEON_PTR + ldrb r0, [r0, #4] + ldr r1, [r1] + ldr ip, _02387684 ; =ov31_0238948C + add r0, r1, r0, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + bx ip + .align 2, 0 +_02387680: .word DUNGEON_PTR +_02387684: .word ov31_0238948C + arm_func_end ov31_02387660 + + arm_func_start ov31_02387688 +ov31_02387688: ; 0x02387688 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x78 + ldr r2, _02387788 ; =DUNGEON_PTR + ldrb r0, [r0, #4] + ldr r2, [r2] + mov r4, r1 + add r0, r2, r0, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr sb, [r0, #0xa84] +#else + ldr sb, [r0, #0xb28] +#endif + bl ov29_022EA62C + cmp r4, #0 + beq _023876C4 + mov r0, sb + bl ov31_023889DC + b _0238776C +_023876C4: + ldr r0, [sb, #0xb4] + bl IsExperienceLocked + cmp r0, #0 + movne r4, #1 + bne _023876E4 + cmp r4, #0 + movne r4, #2 + moveq r4, #0 +_023876E4: + add r0, sp, #0 + mov r1, sb + bl CreateMonsterSummaryFromMonster + mov r2, #0 + add r0, sp, #0 + mov r1, r4 + strh r2, [sp, #0x40] + strh r2, [sp, #0x56] + bl sub_0203F150 + mov r7, #0x62 + mov r6, r7 + mov r5, r7 + mov r4, #1 + mov fp, #0x1c + mov r8, #0 +_02387720: + mov sl, r8 + bl ov29_022EA62C +_02387728: + mov r0, r7 + bl AdvanceFrame + bl sub_0203F398 + cmp r0, #2 + beq _0238775C + cmp r0, #1 + bne _02387728 + bl sub_0203F990 + mov r0, r6 + bl AdvanceFrame + mov r0, r5 + bl AdvanceFrame + mov sl, r4 +_0238775C: + mov r0, fp + bl AdvanceFrame + cmp sl, #0 + beq _02387720 +_0238776C: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, sb + bl ov29_023021F0 + add sp, sp, #0x78 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02387788: .word DUNGEON_PTR + arm_func_end ov31_02387688 + + arm_func_start ov31_0238778C +ov31_0238778C: ; 0x0238778C + stmdb sp!, {r4, lr} + ldr r1, _023877C0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r4, r0 + ldr r0, [r1] + add r0, r0, #0x600 + ldrh r0, [r0, #0x92] + bl StringFromId + mov r1, #2 + mov r3, r0 + mov r0, r4 + mov r2, r1 + bl DrawTextInWindow + ldmia sp!, {r4, pc} + .align 2, 0 +_023877C0: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 + arm_func_end ov31_0238778C + + arm_func_start ov31_023877C4 +ov31_023877C4: ; 0x023877C4 + ldr r2, _023877E4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr ip, _023877E8 ; =DrawTextInWindow + ldr r3, [r2] + mov r1, #2 + add r3, r3, #0x12 + mov r2, #0x10 + add r3, r3, #0x600 + bx ip + .align 2, 0 +_023877E4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 +_023877E8: .word DrawTextInWindow + arm_func_end ov31_023877C4 + + arm_func_start ov31_023877EC +ov31_023877EC: ; 0x023877EC +#ifdef JAPAN +#define OV31_023877EC_OFFSET -8 +#define OV31_023877EC_OFFSET_2 -4 +#define OV31_023877EC_OFFSET_3 -0xA4 +#else +#define OV31_023877EC_OFFSET 0 +#define OV31_023877EC_OFFSET_2 0 +#define OV31_023877EC_OFFSET_3 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2a4 + OV31_023877EC_OFFSET + mov r4, #0 + movs sl, r0 +#ifndef JAPAN + str r3, [sp, #8] +#endif + subne r0, r4, #1 + strne r0, [sl] + mov sb, r1 + ldr r0, _02388080 ; =0x000007AC + mov r1, #8 + mov fp, r2 + bl MemAlloc + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + str r0, [r1] + bl ov31_023880D8 + mov r7, #0 + mov r6, r7 +_02387830: + ldr r0, _02388088 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 + ldr r5, [r0, #0xb28 + OV31_023877EC_OFFSET_3] + mov r0, r5 + bl ov31_0238763C + cmp r0, #0 + beq _0238789C + cmp fp, #0 + beq _0238786C + mov r0, r5 + ldr r8, [r5, #0xb4] + bl ov29_02347100 +#ifdef JAPAN + strb r0, [r8, #0x15d] +#else + strb r0, [r8, #0x161] +#endif +_0238786C: + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r7, lsl #5 + str r6, [r0, #4] + ldr r0, [r5, #0xb4] +#ifdef JAPAN + ldrb r0, [r0, #0x15d] +#else + ldrb r0, [r0, #0x161] +#endif + cmp r0, #0 + movne r1, #0 + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r7 + moveq r1, #3 + strb r1, [r0, #0x84] + add r7, r7, #1 +_0238789C: + add r6, r6, #1 + cmp r6, #4 + blt _02387830 + mov r6, r7 + mvn r5, #0 + add r3, sp, #0x218 + OV31_023877EC_OFFSET + mov r1, #0 + b _023878D0 +_023878BC: + add r2, r3, r6, lsl #5 + add r0, r3, r6 + str r5, [r2, #4] + strb r1, [r0, #0x84] + add r6, r6, #1 +_023878D0: + cmp r6, #4 + blt _023878BC + mov r0, #0xb + bl Arm9LoadUnkFieldNa0x2029EC8 + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r2, #0 + ldr r3, [r1] + str r0, [r3, #0x760] + ldr r0, [r1] + str r7, [r0, #0x764] + ldr r0, [r1] + str r7, [r0, #0x768] + ldr r0, [r1] + str r2, [r0, #0x76c] + ldr r0, [r1] + str r2, [r0, #0x770] + ldr r0, [r1] + str r2, [r0, #0x754] + ldr r0, [r1] + str r2, [r0, #0x758] + bl ov29_022EA62C + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x95 + add r0, r0, #0x600 + bl ov29_0234E988 + mov r5, #0 + add r0, sp, #0x68 + OV31_023877EC_OFFSET + mov r1, r5 + mov r2, #0x80 + bl memset + mov r8, r5 + ldr fp, _0238808C ; =0x000003E7 + b _02387B80 +_02387958: + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r8, lsl #5 + ldr r1, [r0, #4] + cmp r1, #0 + blt _02387B7C + ldr r0, _02388088 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r1, lsl #2 + add r0, r0, #0x12000 + ldr r6, [r0, #0xb28 + OV31_023877EC_OFFSET_3] + mov r0, r6 + bl ov31_0238763C + cmp r0, #0 + beq _02387B7C + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r8 + ldrb r0, [r0, #0x84] + ldr r6, [r6, #0xb4] + cmp r0, #0 + movne r0, #0x57 + moveq r0, #0x44 + and r2, r0, #0xff + add r0, sp, #0x68 + OV31_023877EC_OFFSET + mov r1, r6 + bl ov29_023002F0 + add r0, sp, #0x68 + OV31_023877EC_OFFSET + str r0, [sp, #0x50 + OV31_023877EC_OFFSET] + ldrsh r0, [r6, #0xc] + bl GetActiveTeamMember + ldrsh r0, [r0, #8] + bl ov29_022F9C34 + cmp r0, #0 + ldrsh r1, [r6, #0x12] + ldrsh r0, [r6, #0x16] + beq _02387A84 + add r1, r1, r0 + cmp r1, fp + movgt r3, fp + movle r3, r1 + mov r2, r3, asr #1 + ldrsh r0, [r6, #0x10] + add r2, r3, r2, lsr #30 + cmp r0, r2, asr #2 + bgt _02387A18 + ldr r1, _02388090 ; =ov31_0238A044 + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bl strcpy + b _02387B20 +_02387A18: + cmp r1, fp + movgt r3, fp + movle r3, r1 + mov r2, r3, asr #1 + add r2, r3, r2, lsr #30 + mov r2, r2, asr #2 + cmp r0, r2, lsl #1 + bgt _02387A48 + ldr r1, _02388094 ; =ov31_0238A04C + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bl strcpy + b _02387B20 +_02387A48: + cmp r1, fp + movgt r1, fp + mov r2, r1, asr #1 + add r1, r1, r2, lsr #30 + mov r1, r1, asr #2 + add r1, r1, r1, lsl #1 + cmp r0, r1 + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bgt _02387A78 + ldr r1, _02388098 ; =ov31_0238A054 + bl strcpy + b _02387B20 +_02387A78: + ldr r1, _0238809C ; =ov31_0238A05C + bl strcpy + b _02387B20 +_02387A84: + add r1, r1, r0 + cmp r1, fp + movgt r3, fp + movle r3, r1 + mov r2, r3, asr #1 + ldrsh r0, [r6, #0x10] + add r2, r3, r2, lsr #30 + cmp r0, r2, asr #2 + bgt _02387AB8 + ldr r1, _023880A0 ; =ov31_0238A064 + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bl strcpy + b _02387B20 +_02387AB8: + cmp r1, fp + movgt r3, fp + movle r3, r1 + mov r2, r3, asr #1 + add r2, r3, r2, lsr #30 + mov r2, r2, asr #2 + cmp r0, r2, lsl #1 + bgt _02387AE8 + ldr r1, _023880A4 ; =ov31_0238A06C + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bl strcpy + b _02387B20 +_02387AE8: + cmp r1, fp + movgt r1, fp + mov r2, r1, asr #1 + add r1, r1, r2, lsr #30 + mov r1, r1, asr #2 + add r1, r1, r1, lsl #1 + cmp r0, r1 + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bgt _02387B18 + ldr r1, _023880A8 ; =ov31_0238A074 + bl strcpy + b _02387B20 +_02387B18: + ldr r1, _023880AC ; =ov31_0238A07C + bl strcpy +_02387B20: + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + str r0, [sp, #0x54 + OV31_023877EC_OFFSET] + add r0, sp, #0x18 + OV31_023877EC_OFFSET + str r0, [sp] + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r2, _023880B0 ; =ov31_0238A084 + ldr r0, [r0] + mov r1, #0x100 + add r0, r0, #0x30 + add r0, r0, r5, lsl #8 + mov r3, #0 + bl PreprocessString + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r1, r5, lsl #3 + ldr r2, [r0] + add r0, r2, #0x30 + add r0, r0, r5, lsl #8 + str r0, [r2, r5, lsl #3] + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r5, r5, #1 + ldr r0, [r0] + add r0, r0, r1 + str r5, [r0, #4] +_02387B7C: + add r8, r8, #1 +_02387B80: + cmp r8, r7 + blt _02387958 + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r3, #0 + ldr r1, [r0] + sub r2, r3, #1 + str r3, [r1, r5, lsl #3] + ldr r1, [r0] + ldr r0, _02388088 ; =DUNGEON_PTR + add r1, r1, r5, lsl #3 + str r2, [r1, #4] + ldr r0, [r0] + ldrb r5, [r0, #0x75b] + cmp r5, #0 + ldrne r1, _023880B4 ; =0x00000A3A + movne r0, #0x10 + strne r0, [sp, #0xf4 + OV31_023877EC_OFFSET] + mov r0, #0xb + strneh r1, [sp, #0xf0 + OV31_023877EC_OFFSET] + bl Arm9LoadUnkFieldNa0x2029EC8 + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + cmp r5, #0 + ldr r3, [r1] + add r2, sp, #0x29c + OV31_023877EC_OFFSET + str r0, [r3, #0x760] + ldr r0, [r1] + movne r1, #0x800 + ldr r0, [r0, #0x760] + moveq r1, #0 + add r0, r0, #1 + str r0, [sp, #0xe8 + OV31_023877EC_OFFSET] + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + orr r1, r1, #0x33 + ldr r3, [r0] + str r2, [sp, #0x148 + OV31_023877EC_OFFSET] + ldr r0, _023880B8 ; =DUNGEON_WINDOW_PARAMS_21 + add r2, sp, #0xe8 + OV31_023877EC_OFFSET + orr r1, r1, #0x1200 + bl CreateParentMenu + ldr r2, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, _023880BC ; =ov31_0238778C + ldr r2, [r2] + strb r0, [r2, #0x695] + ldr r0, _023880C0 ; =DUNGEON_WINDOW_PARAMS_24 + bl CreateTextBox + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r3, _023880C4 ; =0x00000A36 + ldr r2, [r1] + mov r5, #0x10 + strb r0, [r2, #0x696] + ldr r2, [r1] + str r5, [sp, #0x18c + OV31_023877EC_OFFSET] + add r0, r2, #0x92 + add r1, r0, #0x500 + add r0, sp, #0x118 + OV31_023877EC_OFFSET + strh r3, [r0, #0x70] + str r1, [sp, #0x1c8 + OV31_023877EC_OFFSET] + cmp sb, #3 + bne _02387CA8 + add r1, r3, #3 + add r0, r2, #0x600 + strh r1, [r0, #0x92] + mov r5, #0 + str r5, [sp] + ldr r0, _023880C8 ; =DUNGEON_WINDOW_PARAMS_20 + ldr r3, _023880CC ; =ov31_023877C4 + add r2, sp, #0x180 + OV31_023877EC_OFFSET + mov r1, #0x800 + str r5, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, [r1] + strb r0, [r1, #0x697] + b _02387CF4 +_02387CA8: + cmp sb, #2 + addne r1, r3, #3 + addne r0, r2, #0x600 + strneh r1, [r0, #0x92] + bne _02387CF4 + add r1, r3, #2 + add r0, r2, #0x600 + strh r1, [r0, #0x92] + mov r5, #0 + str r5, [sp] + ldr r0, _023880C8 ; =DUNGEON_WINDOW_PARAMS_20 + ldr r3, _023880CC ; =ov31_023877C4 + add r2, sp, #0x180 + OV31_023877EC_OFFSET + mov r1, #0x800 + str r5, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, [r1] + strb r0, [r1, #0x697] +_02387CF4: + sub r0, sb, #2 +#ifdef JAPAN + str r0, [sp, #0xc] + ldr r0, _023880D0 ; =0x00000872 + ldr r5, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r8, #0x3d8 + rsb fp, r0, #0x870 +#else + mvn r7, #0x3d8 + str r0, [sp, #0x10] + add r0, r7, #0xe10 + ldr r5, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + str r0, [sp, #0x14] + mov fp, r7, asr #9 +#endif +_02387D10: + ldr r0, [r5] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x95] + bl sub_0202AB80 + ldr r1, [r5] + str r0, [r1, #0x760] + ldr r1, [r5] + mov r0, #0xb + ldr r1, [r1, #0x760] + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 + ldr r0, [r5] + ldr r1, [r0, #0x760] + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r1, lsl #5 + ldr r6, [r0, #4] + cmp r6, #0 + blt _02387EC0 + ldr r0, _02388088 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r7, [r0, #0xa84] + mov r0, r7 + bl ov31_0238763C + cmp r0, #0 + cmpne r8, r6 + beq _02387E98 + cmp sb, #1 + bne _02387DCC + mov r0, r7 +#else + ldr r8, [r0, #0xb28] + mov r0, r8 + bl ov31_0238763C + cmp r0, #0 + cmpne r7, r6 + beq _02387E98 + cmp sb, #1 + bne _02387DCC + mov r0, r8 +#endif + bl sub_0203F9CC + ldr r0, [r5] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x98] + cmp r0, fp + bne _02387DC0 + mov r1, #0 + mov r0, #7 + mov r2, r1 + bl sub_0204018C + ldr r1, [r5] + strb r0, [r1, #0x698] + b _02387DC4 +_02387DC0: + bl sub_02041178 +_02387DC4: + bl sub_020407EC + b _02387E98 +_02387DCC: + ldr r0, [sp, #0x10 + OV31_023877EC_OFFSET_2] + cmp r0, #1 + bhi _02387E98 + ldr r1, [r5] + add r0, r1, #0x600 + ldrsb r0, [r0, #0x97] + str r0, [sp, #0xc + OV31_023877EC_OFFSET_2] + cmp r0, fp + beq _02387E98 + add r0, r1, #0x92 +#ifdef JAPAN + ldr r8, [r7, #0xb4] + add r0, r0, #0x500 + mov r1, r7 + mov r2, #0 + bl ov29_022E2A78 + ldrb r0, [r8, #0xbc] + cmp r0, #7 + beq _02387E24 + mov r0, r8 +#else + ldr r7, [r8, #0xb4] + add r0, r0, #0x500 + mov r1, r8 + mov r2, #0 + bl ov29_022E2A78 + ldrb r0, [r7, #0xbc] + cmp r0, #7 + beq _02387E24 + mov r0, r7 +#endif + bl IsExperienceLocked + cmp r0, #0 + beq _02387E3C +_02387E24: +#ifdef JAPAN + ldr r0, _023880D0 ; =0x00000872 + ldr r2, [r5] + add r1, r0, #6 + add r0, r2, #0x12 +#else + ldr r0, [r5] + ldr r1, _023880D0 ; =0x00000A3D + add r0, r0, #0x12 +#endif + add r0, r0, #0x600 + bl GetStringFromFileVeneer + b _02387E90 +_02387E3C: +#ifdef JAPAN + ldrb r0, [r8, #0x62] +#else + ldrb r0, [r7, #0x62] +#endif + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + bne _02387E6C + ldr r0, [r5] +#ifdef JAPAN + ldr r1, _023880D0 ; =0x00000872 +#else + ldr r1, [sp, #0x14] +#endif + add r0, r0, #0x12 + add r0, r0, #0x600 + bl GetStringFromFileVeneer + b _02387E90 +_02387E6C: + mov r0, #1 + str r0, [sp] + ldr r0, [r5] + ldr r2, _023880D4 ; =OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 + add r0, r0, #0x12 +#ifdef JAPAN + add r1, r8, #0x62 +#else + add r1, r7, #0x62 +#endif + add r0, r0, #0x600 + mov r3, #1 + bl sub_0200D310 +_02387E90: + ldr r0, [sp, #0xc + OV31_023877EC_OFFSET_2] + bl SetAdvancedTextBoxField0x1C2 +_02387E98: +#ifdef JAPAN + mov r0, r7 + mov r1, #0 + mov r2, #1 + mov r8, r6 + bl TryPointCameraToMonster + mov r2, #1 + add r0, r7, #4 +#else + mov r0, r8 + mov r1, #0 + mov r2, #1 + mov r7, r6 + bl TryPointCameraToMonster + mov r2, #1 + add r0, r8, #4 +#endif + mov r1, #0 + mov r3, r2 + bl DrawTileGrid +_02387EC0: + mov r0, #0x1b + bl AdvanceFrame + ldr r0, [r5] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x95] + bl IsParentMenuActive + cmp r0, #0 + bne _02387D10 + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x95] + bl sub_0202ABB0 + subs r3, r0, #1 + bmi _02387F24 + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r1, sp, #0x29c + OV31_023877EC_OFFSET + ldr r2, [r0] + str r3, [r2, #0x760] + ldr r0, [r0] + ldr r0, [r0, #0x760] + ldrb r0, [r1, r0] + cmp r0, #0 + movne r4, #1 + b _02387F28 +_02387F24: + mov r4, #1 +_02387F28: + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x97] + cmp r0, r1 + beq _02387F58 + bl CloseAdvancedTextBox + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x697] +_02387F58: + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x98] + cmp r0, r1 + beq _02387F8C + bl CloseAdvancedTextBox + bl sub_020407C0 + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x698] +_02387F8C: + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x96] + bl CloseTextBox + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r2, #1 + ldr r1, [r0] + mov r0, #0x1b + strb r2, [r1, #0x696] + bl AdvanceFrame + cmp sb, #3 + bne _02387FEC + cmp r4, #0 + beq _0238800C + bl HideTileGrid +#ifndef JAPAN + ldr r0, [sp, #8] + cmp r0, #0 + beq _0238800C +#endif + bl GetLeader + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + b _0238800C +_02387FEC: + bl HideTileGrid +#ifndef JAPAN + ldr r0, [sp, #8] + cmp r0, #0 + beq _0238800C +#endif + bl GetLeader + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster +_0238800C: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #4 + mov r1, #0x3e + bl ov29_022EA370 + cmp r4, #0 + beq _02388038 + bl ov31_02386F2C + mov r0, #0 + b _02388078 +_02388038: + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r1, sp, #0x21c + OV31_023877EC_OFFSET + ldr r0, [r0] + cmp sl, #0 + ldr r0, [r0, #0x760] + ldr r4, [r1, r0, lsl #5] + strne r4, [sl] + bl ov31_02386F2C + cmp r4, #0 + movlt r0, #0 + blt _02388078 + ldr r0, _02388088 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + OV31_023877EC_OFFSET_3] +_02388078: + add sp, sp, #0x2a4 + OV31_023877EC_OFFSET + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define OV31_023877EC_DATA_OFFSET -0x1C5 +#else +#define OV31_023877EC_DATA_OFFSET 0 +#endif +_02388080: .word 0x000007AC +_02388084: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 +_02388088: .word DUNGEON_PTR +_0238808C: .word 0x000003E7 +_02388090: .word ov31_0238A044 +_02388094: .word ov31_0238A04C +_02388098: .word ov31_0238A054 +_0238809C: .word ov31_0238A05C +_023880A0: .word ov31_0238A064 +_023880A4: .word ov31_0238A06C +_023880A8: .word ov31_0238A074 +_023880AC: .word ov31_0238A07C +_023880B0: .word ov31_0238A084 +_023880B4: .word 0x00000A3A + OV31_023877EC_DATA_OFFSET +_023880B8: .word DUNGEON_WINDOW_PARAMS_21 +_023880BC: .word ov31_0238778C +_023880C0: .word DUNGEON_WINDOW_PARAMS_24 +_023880C4: .word 0x00000A36 + OV31_023877EC_DATA_OFFSET +_023880C8: .word DUNGEON_WINDOW_PARAMS_20 +_023880CC: .word ov31_023877C4 +#ifdef JAPAN +_023880D0: .word 0x00000872 +#else +_023880D0: .word 0x00000A3D +#endif +_023880D4: .word OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 + arm_func_end ov31_023877EC + + arm_func_start ov31_023880D8 +ov31_023880D8: ; 0x023880D8 + mov r2, #0 + strb r2, [r0, #0x592] + strb r2, [r0, #0x612] + sub r1, r2, #2 + strb r1, [r0, #0x695] + strb r1, [r0, #0x694] + strb r1, [r0, #0x696] + strb r1, [r0, #0x697] + strb r1, [r0, #0x698] + str r2, [r0, #0x7a4] + str r2, [r0, #0x7a8] + str r2, [r0, #0x76c] + str r2, [r0, #0x770] + str r2, [r0, #0x760] + bx lr + arm_func_end ov31_023880D8 + + arm_func_start ov31_02388114 +ov31_02388114: ; 0x02388114 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r1 + ldr r0, _02388154 ; =0x000006D4 + mov r4, r2 + mov r1, #8 + mov r5, r3 + bl MemAlloc + mov r1, r7 + mov r2, r6 + mov r3, r4 + mov r4, r0 + str r5, [sp] + bl ov31_02388158 + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02388154: .word 0x000006D4 + arm_func_end ov31_02388114 + + arm_func_start ov31_02388158 +ov31_02388158: ; 0x02388158 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xdc + mov sl, r0 + mvn r0, #1 + strb r0, [sl] + ldr r4, [sp, #0x100] + str r3, [sl, #0x6c4] + str r4, [sl, #0x6c8] + mov r0, #0 + str r0, [sl, #0x688] + str r0, [sl, #0x68c] + str r0, [sl, #0x67c] + mov sb, r1 + str r2, [sl, #0x6c0] + sub r0, r0, #1 + mov r7, sb + str r0, [sl, #0x6b8] + add r6, sl, #4 + mov r4, #8 +_023881A4: + ldmia r7!, {r0, r1, r2, r3} + stmia r6!, {r0, r1, r2, r3} + subs r4, r4, #1 + bne _023881A4 + ldmia r7, {r0, r1, r2} + stmia r6, {r0, r1, r2} + add r0, sp, #0xc + mov r1, #0x80 + bl MemZero + mov r4, #0 + add r0, sb, #0x14 + mov r7, r4 + str r0, [sp, #8] + add fp, sl, #0xc0 + b _023883F4 +_023881E0: + ldr r0, [sb] + cmp r0, #1 + bne _023882A0 + add r0, sb, r7, lsl #5 + ldr r1, [r0, #0x20] + cmp r1, #0 + beq _023883F0 + moveq r0, #0 + beq _02388218 + ldr r0, [r1] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_02388218: + cmp r0, #0 + beq _023883F0 + add r0, sb, r7 + ldrb r0, [r0, #0x84] + ldr r6, [r1, #0xb4] + add r1, sb, r7, lsl #5 + cmp r0, #0 + movne r0, #0x57 + moveq r0, #0x44 + and r2, r0, #0xff + ldrb r0, [r1, #0x14] + cmp r0, #0 + add r0, sp, #0xc + beq _02388264 + ldrb r2, [r1, #0x1e] + ldr r1, [sp, #8] + add r1, r1, r7, lsl #5 + bl sub_02054F44 + b _0238826C +_02388264: + mov r1, r6 + bl ov29_023002F0 +_0238826C: + ldrsh r1, [r6, #0x12] + ldrsh r0, [r6, #0x16] + ldrsh r5, [r6, #0x10] + add r8, r1, r0 + ldr r0, _0238841C ; =0x000003E7 + cmp r8, r0 + movgt r8, r0 + ldrsh r0, [r6, #0xc] + bl GetActiveTeamMember + ldrsh r0, [r0, #8] + bl ov29_022F9C34 + str r0, [sp, #4] + b _023882E8 +_023882A0: + cmp r0, #0 + bne _023882E8 + add r0, sb, r7, lsl #5 + ldr r6, [r0, #0x20] + ldrb r0, [r6] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _023883F0 + ldrsh r5, [r6, #0xe] + ldrsh r8, [r6, #0x10] + ldrsh r0, [r6, #8] + bl sub_02056228 + str r0, [sp, #4] + mov r1, r6 + add r0, sp, #0xc + bl sub_020585B4 +_023882E8: + add r0, sp, #0xc + str r0, [sp, #0xc4] + ldr r0, [sp, #4] + cmp r0, #0 + mov r0, r8, asr #1 + add r0, r8, r0, lsr #30 + beq _02388360 + cmp r5, r0, asr #2 + mov r0, r0, asr #2 + bgt _02388320 + ldr r1, _02388420 ; =ov31_0238A0A8 + add r0, sp, #0x4c + bl strcpy + b _023883B8 +_02388320: + cmp r5, r0, lsl #1 + bgt _02388338 + ldr r1, _02388424 ; =ov31_0238A0B0 + add r0, sp, #0x4c + bl strcpy + b _023883B8 +_02388338: + add r0, r0, r0, lsl #1 + cmp r5, r0 + add r0, sp, #0x4c + bgt _02388354 + ldr r1, _02388428 ; =ov31_0238A0B8 + bl strcpy + b _023883B8 +_02388354: + ldr r1, _0238842C ; =ov31_0238A0C0 + bl strcpy + b _023883B8 +_02388360: + cmp r5, r0, asr #2 + mov r0, r0, asr #2 + bgt _0238837C + ldr r1, _02388430 ; =ov31_0238A0C8 + add r0, sp, #0x4c + bl strcpy + b _023883B8 +_0238837C: + cmp r5, r0, lsl #1 + bgt _02388394 + ldr r1, _02388434 ; =ov31_0238A0D0 + add r0, sp, #0x4c + bl strcpy + b _023883B8 +_02388394: + add r0, r0, r0, lsl #1 + cmp r5, r0 + add r0, sp, #0x4c + bgt _023883B0 + ldr r1, _02388438 ; =ov31_0238A0D8 + bl strcpy + b _023883B8 +_023883B0: + ldr r1, _0238843C ; =ov31_0238A0E0 + bl strcpy +_023883B8: + add r0, sp, #0x4c + str r0, [sp, #0xc8] + add r0, sp, #0x8c + str r0, [sp] + ldr r2, _02388440 ; =ov31_0238A0E8 + add r0, fp, r4, lsl #8 + mov r1, #0x100 + mov r3, #0 + bl PreprocessString + add r1, fp, r4, lsl #8 + add r0, sl, r4, lsl #3 + str r1, [r0, #0x90] + add r4, r4, #1 + str r4, [r0, #0x94] +_023883F0: + add r7, r7, #1 +_023883F4: + ldr r0, [sb, #0x88] + cmp r7, r0 + blt _023881E0 + mov r0, #0 + add r1, sl, r4, lsl #3 + str r0, [r1, #0x90] + sub r0, r0, #1 + str r0, [r1, #0x94] + add sp, sp, #0xdc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0238841C: .word 0x000003E7 +_02388420: .word ov31_0238A0A8 +_02388424: .word ov31_0238A0B0 +_02388428: .word ov31_0238A0B8 +_0238842C: .word ov31_0238A0C0 +_02388430: .word ov31_0238A0C8 +_02388434: .word ov31_0238A0D0 +_02388438: .word ov31_0238A0D8 +_0238843C: .word ov31_0238A0E0 +_02388440: .word ov31_0238A0E8 + arm_func_end ov31_02388158 + + arm_func_start ov31_02388444 +ov31_02388444: ; 0x02388444 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x98 + mov r6, r0 + mov r5, r1 + bl ov29_0234E988 + mov r0, #0xb + bl Arm9LoadUnkFieldNa0x2029EC8 + str r0, [r6, #0x67c] + ldr r1, [r6, #0x8c] + mov r0, #0 + str r1, [r6, #0x680] + ldr r1, [r6, #0x8c] + str r1, [r6, #0x684] + str r0, [r6, #0x688] + str r0, [r6, #0x68c] + str r0, [r6, #0x670] + str r0, [r6, #0x674] + bl ov29_022EA62C + ldr r0, _02388528 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r4, [r0, #0x75b] + cmp r4, #0 + ldrne r1, _0238852C ; =0x00000A3A + movne r0, #0x10 + strne r0, [sp, #0xc] + strneh r1, [sp, #8] + mov r0, #0xb + bl Arm9LoadUnkFieldNa0x2029EC8 + str r0, [r6, #0x67c] + add r1, r0, #1 + add r0, r6, #0x88 + str r1, [sp] + str r0, [sp, #0x60] + ldr r0, [r6, #0x6c0] + add r2, sp, #0 + tst r0, #2 + beq _023884FC + cmp r4, #0 + movne r3, #0x800 + ldr r1, _02388530 ; =0x00401233 + moveq r3, #0 + orr r1, r3, r1 + mov r0, r5 + add r3, r6, #0x90 + bl CreateParentMenuWrapper + b _0238851C +_023884FC: + cmp r4, #0 + movne r0, #0x800 + moveq r0, #0 + orr r1, r0, #0x33 + mov r0, r5 + orr r1, r1, #0x1200 + add r3, r6, #0x90 + bl CreateParentMenu +_0238851C: + strb r0, [r6] + add sp, sp, #0x98 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02388528: .word DUNGEON_PTR +#ifdef JAPAN +_0238852C: .word 0x00000875 +#else +_0238852C: .word 0x00000A3A +#endif +_02388530: .word 0x00401233 + arm_func_end ov31_02388444 + + arm_func_start ov31_02388534 +ov31_02388534: ; 0x02388534 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + mov r0, #0 + str r0, [sl, #0x6cc] + add r4, sl, #0x2cc + str r0, [r4, #0x404] + add sb, sl, #4 + mov r5, #2 + mov r6, #0xb + mov fp, #0x1b + mov r8, r0 + add r7, sp, #0 +_02388564: + mov r0, r8 + mov r1, r7 + bl GetPressedButtons + ldrsb r0, [sl] + bl sub_0202AB80 + str r0, [sl, #0x67c] + ldr r1, [sl, #0x6b8] + cmp r1, r0 + beq _023885DC + str r0, [sl, #0x6b8] + ldr r1, [sb] + cmp r1, #1 + bne _023885B8 + add r0, sb, r0, lsl #5 + ldr r0, [r0, #0x20] + cmp r0, #0 + ldrne r1, [sl, #0x6c4] + cmpne r1, #0 + beq _023885DC + blx r1 + b _023885DC +_023885B8: + cmp r1, #0 + bne _023885DC + add r0, sb, r0, lsl #5 + ldr r0, [r0, #0x20] + cmp r0, #0 + ldrne r1, [sl, #0x6c4] + cmpne r1, #0 + beq _023885DC + blx r1 +_023885DC: + ldr r1, [sl, #0x67c] + mov r0, r6 + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 + ldr r0, [sl, #0x6c0] + tst r0, #4 + beq _02388644 + ldrh r0, [sp] + tst r0, #8 + beq _02388644 + ldr r0, [sl, #0x67c] + add r0, sb, r0 + ldrb r0, [r0, #0x84] + cmp r0, #0 + bne _02388638 + add r0, sl, #0x5c0 + mov r1, #0 + bl PlayWindowInputSound + mov r0, #2 + str r0, [r4, #0x400] + ldr r0, [sl, #0x6b8] + str r0, [r4, #0x404] + b _023886BC +_02388638: + mov r1, r5 + add r0, sl, #0x5c0 + bl PlayWindowInputSound +_02388644: + ldrsb r0, [sl] + bl IsParentMenuActive + cmp r0, #0 + bne _023886A8 + ldrsb r0, [sl] + bl sub_0202ABB0 + subs r0, r0, #1 + bmi _0238869C + ldrsb r0, [sl] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [sl, #0x67c] + add r0, sb, r0 + ldrb r0, [r0, #0x84] + cmp r0, #0 + moveq r0, #3 + streq r0, [r4, #0x400] + ldreq r0, [sl, #0x67c] + streq r0, [r4, #0x404] + movne r0, #1 + strne r0, [r4, #0x400] + b _023886BC +_0238869C: + mov r0, #1 + str r0, [r4, #0x400] + b _023886BC +_023886A8: + mov r0, sl + bl ov31_02388744 + mov r0, fp + bl AdvanceFrame + b _02388564 +_023886BC: + mov r0, sl + bl ov31_02388744 + mov r0, #0x1b + bl AdvanceFrame + bl HideTileGrid + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end ov31_02388534 + + arm_func_start ov31_023886D4 +ov31_023886D4: ; 0x023886D4 + ldr r0, [r0, #0x6cc] + bx lr + arm_func_end ov31_023886D4 + + arm_func_start ov31_023886DC +ov31_023886DC: ; 0x023886DC + ldr r1, [r0, #0x6cc] + sub r1, r1, #2 + cmp r1, #1 + ldrls r0, [r0, #0x6d0] + mvnhi r0, #0 + bx lr + arm_func_end ov31_023886DC + + arm_func_start ov31_023886F4 +ov31_023886F4: ; 0x023886F4 + ldr ip, _02388700 ; =ResumeParentMenu + ldrsb r0, [r0] + bx ip + .align 2, 0 +_02388700: .word ResumeParentMenu + arm_func_end ov31_023886F4 + + arm_func_start ov31_02388704 +ov31_02388704: ; 0x02388704 + ldr ip, _02388710 ; =GetWindowRectangle + ldrsb r0, [r0] + bx ip + .align 2, 0 +_02388710: .word GetWindowRectangle + arm_func_end ov31_02388704 + + arm_func_start ov31_02388714 +ov31_02388714: ; 0x02388714 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r4, [r5] + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, r4 + bl ov29_0234E988 + mov r0, r4 + bl MemFree + mov r0, #0 + str r0, [r5] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov31_02388714 + + arm_func_start ov31_02388744 +ov31_02388744: ; 0x02388744 + stmdb sp!, {r4, lr} + ldr r1, [r0, #0x6c0] + tst r1, #8 + ldrne r1, [r0, #0x67c] + addne r0, r0, r1, lsl #5 + ldrne r4, [r0, #0x24] + cmpne r4, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + mov r2, #1 + mov r3, r2 + add r0, r4, #4 + mov r1, #0 + bl DrawTileGrid + ldmia sp!, {r4, pc} + arm_func_end ov31_02388744 + + arm_func_start RestMenu +RestMenu: ; 0x0238878C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x9c + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r0, [r0] + cmp r0, #0 + bne _023887CC + mov r0, #0x10 + mov r1, #8 + bl MemAlloc + ldr r1, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r2, #0 + str r0, [r1] + str r2, [r0] + ldr r0, [r1] + sub r1, r2, #2 + strb r1, [r0, #4] +_023887CC: + mov r3, #0 + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r2, r3 +_023887D8: + ldr r1, [r0] + add r1, r1, r3 + add r3, r3, #1 + strb r2, [r1, #0xc] + cmp r3, #2 + blt _023887D8 + bl ov29_022E08F4 + cmp r0, #0 + ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + moveq r1, #3 + ldreq r0, [r0] + ldr ip, _023889BC ; =0x000008C2 + streqb r1, [r0, #0xc] + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r5, #0x10 + ldr r1, [r0] + ldr r0, _023889C0 ; =DUNGEON_WINDOW_PARAMS_25 + add r4, r1, #0xc + ldr r1, _023889C4 ; =0x00001A13 + ldr r3, _023889C8 ; =DUNGEON_SUBMENU_ITEMS_5 + add r2, sp, #4 + strh ip, [sp, #0xc] + str r5, [sp, #0x10] + str r4, [sp, #0x64] + bl CreateParentMenuFromStringIds + ldr r4, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r5, #0x62 + ldr r1, [r4] + strb r0, [r1, #4] +_0238884C: + mov r0, r5 + bl AdvanceFrame + ldr r0, [r4] + ldrsb r0, [r0, #4] + bl IsParentMenuActive + cmp r0, #0 + bne _0238884C + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r0, [r0] + ldrsb r0, [r0, #4] + bl sub_0202ABB0 + ldr r1, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r1, [r1] + str r0, [r1, #8] + mov r0, #0x62 + bl AdvanceFrame + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r0, [r0] + ldrsb r0, [r0, #4] + bl CloseParentMenu + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r1, [r0] + ldr r0, [r1, #8] + cmp r0, #1 + beq _023888BC + cmp r0, #2 + beq _02388908 + b _0238897C +_023888BC: + mov r2, #1 + ldr r1, _023889CC ; =0x000008C5 + mov r3, r2 + mov r0, #0 + str r2, [sp] + bl YesNoMenu + cmp r0, #1 + movne r0, #1 + bne _023888F0 + bl GetLeaderAction + mov r1, #0x2b + bl SetMonsterActionFields + mov r0, #0 +_023888F0: + cmp r0, #0 + ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mvneq r1, #0 + ldreq r0, [r0] + streq r1, [r0, #8] + b _02388984 +_02388908: + mov r2, #1 + ldr r1, _023889D0 ; =0x000008C6 + mov r3, r2 + mov r0, #0 + str r2, [sp] + bl YesNoMenu + cmp r0, #1 + movne r2, #1 + bne _02388964 + bl GetLeaderAction + mov r1, #0x2e + bl SetMonsterActionFields + bl GetLeader + mov r2, r0 + mov r1, #0 + ldr r0, _023889D4 ; =0x0000025A + mov r3, r1 + bl ov29_022ECDE4 + ldr r0, _023889D8 ; =DUNGEON_PTR + mov r1, #1 + ldr r0, [r0] + mov r2, #0 + strb r1, [r0, #0x758] +_02388964: + cmp r2, #0 + ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mvneq r1, #0 + ldreq r0, [r0] + streq r1, [r0, #8] + b _02388984 +_0238897C: + mvn r0, #0 + str r0, [r1, #8] +_02388984: + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r0, [r0] + ldr r1, [r0, #8] + cmp r1, #0 + bge _023887CC + cmp r0, #0 + beq _023889B0 + bl MemFree + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r1, #0 + str r1, [r0] +_023889B0: + add sp, sp, #0x9c + ldmia sp!, {r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +#define REST_MENU_OFFSET 0x1458 +#else +#define REST_MENU_OFFSET 0 +#endif +_023889B8: .word OVERLAY31_UNKNOWN_POINTER__NA_238A284 +_023889BC: .word 0x000008C2 + REST_MENU_OFFSET +_023889C0: .word DUNGEON_WINDOW_PARAMS_25 +_023889C4: .word 0x00001A13 +_023889C8: .word DUNGEON_SUBMENU_ITEMS_5 +_023889CC: .word 0x000008C5 + REST_MENU_OFFSET +_023889D0: .word 0x000008C6 + REST_MENU_OFFSET +_023889D4: .word 0x0000025A +_023889D8: .word DUNGEON_PTR + arm_func_end RestMenu + + arm_func_start ov31_023889DC +ov31_023889DC: ; 0x023889DC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x18 + mov r6, r0 + ldr r4, [r6, #0xb4] + add r3, sp, #0xc + add r0, r4, #0x9c + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + mov r0, #8 + mov r1, #0x62 + bl ov29_022EA370 + mov r0, r6 + mov r1, #1 + bl IsBlinded + mov r3, r0 + ldrsh r0, [r4, #2] + ldrsh r2, [r4, #0xe] + add r1, r4, #0x90 + bl PrintIqSkillsMenu + mov r5, #0x62 +_02388A2C: + bl sub_02041B7C + movs r7, r0 + bne _02388A44 + mov r0, r5 + bl AdvanceFrame + b _02388A2C +_02388A44: + bl sub_020420F4 + mov r0, r6 + bl ov29_023021F0 + ldr r0, [r6, #0xb4] + add r3, sp, #0 + add r0, r0, #0x9c + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + add r0, sp, #0xc + mov r1, #0x38 + bl IqSkillFlagTest + mov r5, r0 + add r0, sp, #0 + mov r1, #0x38 + bl IqSkillFlagTest + cmp r5, #0 + bne _02388AA8 + cmp r0, #0 + beq _02388AF8 + ldr r0, _02388BFC ; =_020A1870 + ldrsh r1, [r4, #0x16] + ldrsh r0, [r0] + add r0, r1, r0 + strh r0, [r4, #0x16] + b _02388AF8 +_02388AA8: + cmp r0, #0 + bne _02388AF8 + ldr r0, _02388BFC ; =_020A1870 + ldrsh r1, [r4, #0x16] + ldrsh r0, [r0] + ldr r2, _02388C00 ; =0x000003E7 + sub r0, r1, r0 + strh r0, [r4, #0x16] + ldrsh r1, [r4, #0x12] + ldrsh r0, [r4, #0x16] + add r1, r1, r0 + cmp r1, r2 + ldrsh r0, [r4, #0x10] + movle r2, r1 + cmp r0, r2 + ble _02388AF8 + ldr r0, _02388C00 ; =0x000003E7 + cmp r1, r0 + movgt r1, r0 + strh r1, [r4, #0x10] +_02388AF8: +#ifdef JAPAN + mov r0, #0x41 + bl TeamMemberHasEnabledIqSkill + ldr r2, _02389E78 ; =DUNGEON_PTR + mov r1, #0x39 + ldr r2, [r2] + add r2, r2, #0x1a000 + strb r0, [r2, #0x19d] + add r0, sp, #0xc +#else + bl UpdateMapSurveyorFlag + add r0, sp, #0xc + mov r1, #0x39 +#endif + bl IqSkillFlagTest + mov r5, r0 + add r0, sp, #0 + mov r1, #0x39 + bl IqSkillFlagTest + cmp r5, #0 + bne _02388B74 + cmp r0, #0 + beq _02388BE8 + mov r5, #0 +#ifdef JAPAN + add r3, r4, #0x120 +#else + add r3, r4, #0x124 +#endif + mov r1, r5 + mov r2, #1 +_02388B38: + ldrb r0, [r3, r5, lsl #3] + add r4, r3, r5, lsl #3 + tst r0, #1 + movne r0, r2 + moveq r0, r1 + tst r0, #0xff + ldrneh r0, [r4, #2] + orrne r0, r0, #0x100 + strneh r0, [r4, #2] + add r0, r5, #1 + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + cmp r5, #4 + blt _02388B38 + b _02388BE8 +_02388B74: + cmp r0, #0 + bne _02388BE8 + mov sb, #0 +#ifdef JAPAN + add r6, r4, #0x120 +#else + add r6, r4, #0x124 +#endif + mov r4, sb + mov r5, #1 +_02388B8C: + ldrb r0, [r6, sb, lsl #3] + add r8, r6, sb, lsl #3 + tst r0, #1 + movne r0, r5 + moveq r0, r4 + tst r0, #0xff + beq _02388BD4 + ldrh r1, [r8, #2] + mov r0, r8 + bic r1, r1, #0x100 + strh r1, [r8, #2] + bl GetMaxPp + ldrb r1, [r8, #6] + cmp r1, r0 + ble _02388BD4 + mov r0, r8 + bl GetMaxPp + strb r0, [r8, #6] +_02388BD4: + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov sb, r0, asr #0x10 + cmp sb, #4 + blt _02388B8C +_02388BE8: + cmp r7, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02388BFC: .word _020A1870 +_02388C00: .word 0x000003E7 +#ifdef JAPAN +_02389E78: .word DUNGEON_PTR +#endif + arm_func_end ov31_023889DC + + arm_func_start RecruitmentSearchMenuLoop +RecruitmentSearchMenuLoop: ; 0x02388C04 + stmdb sp!, {r3, lr} + sub sp, sp, #0xa0 + ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r1, [r0] + ldr r0, [r1, #0xd94] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _02388D24 +_02388C24: ; jump table + b _02388C34 ; case 0 + b _02388CD0 ; case 1 + b _02388CF8 ; case 2 + b _02388D18 ; case 3 +_02388C34: + ldr r0, _02388D34 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x748] + bl IsRecruitingAllowed + cmp r0, #0 + ldreq r2, _02388D38 ; =0x00000B44 + ldreq r1, _02388D3C ; =ov29_0238280C + moveq r0, #4 + streqh r2, [r1] + beq _02388D28 + ldr r0, _02388D34 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75d] + cmp r0, #0 + ldrne r2, _02388D40 ; =0x00000B45 + ldrne r1, _02388D3C ; =ov29_0238280C + movne r0, #4 + strneh r2, [r1] + bne _02388D28 + ldr r1, _02388D44 ; =0x00000B46 + mov r0, #0x10 + strh r1, [sp, #0x10] + str r0, [sp, #0x14] + mov ip, #0 + str ip, [sp] + ldr r0, _02388D48 ; =DUNGEON_WINDOW_PARAMS_26 + ldr r1, _02388D4C ; =0x00001813 + ldr r3, _02388D50 ; =ov31_02388D54 + add r2, sp, #8 + str ip, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r2, [r1] + strb r0, [r2] + ldr r1, [r1] + ldr r0, [r1, #0xd94] + add r0, r0, #1 + str r0, [r1, #0xd94] + b _02388D24 +_02388CD0: + ldrsb r0, [r1] + bl IsAdvancedTextBoxActive + cmp r0, #0 + bne _02388D24 + ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r1, [r0] + ldr r0, [r1, #0xd94] + add r0, r0, #1 + str r0, [r1, #0xd94] + b _02388D24 +_02388CF8: + ldrsb r0, [r1] + bl CloseAdvancedTextBox + ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r1, [r0] + ldr r0, [r1, #0xd94] + add r0, r0, #1 + str r0, [r1, #0xd94] + b _02388D24 +_02388D18: + bl ov29_0234F77C + mov r0, #4 + b _02388D28 +_02388D24: + mov r0, #1 +_02388D28: + add sp, sp, #0xa0 + ldmia sp!, {r3, pc} + .align 2, 0 +#ifdef JAPAN +#define RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -0x4FE +#else +#define RECRUITMENT_SEARCH_MENU_LOOP_OFFSET 0 +#endif +_02388D30: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 +_02388D34: .word DUNGEON_PTR +_02388D38: .word 0x00000B44 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET +_02388D3C: .word ov29_0238280C +_02388D40: .word 0x00000B45 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET +_02388D44: .word 0x00000B46 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET +_02388D48: .word DUNGEON_WINDOW_PARAMS_26 +_02388D4C: .word 0x00001813 +_02388D50: .word ov31_02388D54 + arm_func_end RecruitmentSearchMenuLoop + + arm_func_start ov31_02388D54 +ov31_02388D54: ; 0x02388D54 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xd4 + ldr r4, _02388E54 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + mov sl, r0 + ldr r0, [r4] + mov r8, #4 + ldr r0, [r0, #0xd90] + mov sb, #0x14 + cmp r0, #0 + beq _02388E30 + mov r7, #0 + add r6, sp, #0x44 + add fp, sp, #4 + add r5, sp, #0x84 + b _02388E1C +_02388D90: + add r0, r1, r7, lsl #1 + ldrsh r1, [r0, #4] + mov r0, r6 + bl GetSpeciesString + ldr r0, [r4] + add r0, r0, r7, lsl #1 + ldrsh r0, [r0, #4] + bl GetDexNumber + ldr r2, [r4] + str r0, [sp, #0xa8] + add r2, r2, r7 + ldrb r2, [r2, #0x90a] + ldr r1, _02388E58 ; =ov31_0238A154 + mov r0, fp + mov r3, r6 + bl ov31_02388E60 + mov r0, r6 + mov r1, #0x40 + mov r2, fp + mov r3, #0 + str r5, [sp] + bl PreprocessString + mov r0, sl + mov r1, r8 + mov r2, sb + mov r3, r6 + bl DrawTextInWindow + add sb, sb, #0xd + cmp sb, #0x7c + blt _02388E18 + cmp r8, #4 + bgt _02388E4C + mov r8, #0x74 + mov sb, #0x14 +_02388E18: + add r7, r7, #1 +_02388E1C: + ldr r1, [r4] + ldr r0, [r1, #0xd90] + cmp r7, r0 + blt _02388D90 + b _02388E4C +_02388E30: + ldr r0, _02388E5C ; =0x00000B47 + bl StringFromId + mov r3, r0 + mov r0, sl + mov r1, r8 + mov r2, sb + bl DrawTextInWindow +_02388E4C: + add sp, sp, #0xd4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02388E54: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 +_02388E58: .word ov31_0238A154 +#ifdef JAPAN +_02388E5C: .word 0x00000649 +#else +_02388E5C: .word 0x00000B47 +#endif + arm_func_end ov31_02388D54 + + arm_func_start ov31_02388E60 +ov31_02388E60: ; 0x02388E60 + 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 ov31_02388E60 + + arm_func_start ov31_02388E88 +ov31_02388E88: ; 0x02388E88 +#ifdef JAPAN +#define OV31_02388E88_OFFSET -0x50 +#else +#define OV31_02388E88_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x84 + sub sp, sp, #0x400 + ldr r0, _02389164 ; =OVERLAY31_UNKNOWN_STRUCT__NA_238A144 + bl sub_020348E4 + cmp r0, #0 + beq _02389158 + ldr r0, _02389168 ; =0x00000D98 + mov r1, #8 + bl MemAlloc + ldr r1, _0238916C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + mov r3, #0 + str r0, [r1] + add r5, r0, #4 + ldr r0, _02389170 ; =0x00000483 + mov r4, r3 + add r1, sp, #0 +_02388ECC: + add r2, r5, r3 + strb r4, [r1, r3] + add r3, r3, #1 + strb r4, [r2, #0x906] + cmp r3, r0 + blt _02388ECC + mov sb, #1 + mov r8, #2 + add r7, sp, #0 + ldr r6, _02389174 ; =DUNGEON_PTR + b _02388F3C +_02388EF8: + ldr r1, [r6] + mov sl, sb + add r1, r1, r4, lsl #3 + add r1, r1, #0x3900 + ldrsh r2, [r1, #0x76 + OV31_02388E88_OFFSET] + ldrsh r1, [r1, #0x78 + OV31_02388E88_OFFSET] + cmp r2, #0 + cmpeq r1, #0 + beq _02388F38 + add r0, r0, #0x174 + OV31_02388E88_OFFSET + add r0, r0, #0x3800 + add r0, r0, r4, lsl #3 + cmp r2, #0 + moveq sl, r8 + bl GetMonsterIdFromSpawnEntry + strb sl, [r7, r0] +_02388F38: + add r4, r4, #1 +_02388F3C: + ldr r0, [r6] + add r1, r0, #0x3000 +#ifdef JAPAN + ldr r1, [r1, #0xd7c] +#else + ldr r1, [r1, #0xe20] +#endif + cmp r4, r1 + blt _02388EF8 + ldrb r0, [r0, #0x790] + cmp r0, #0 + beq _02388F6C + bl GetKecleonIdToSpawnByFloor + add r1, sp, #0 + mov r2, #1 + strb r2, [r1, r0] +_02388F6C: + ldr r0, _02389174 ; =DUNGEON_PTR + mov sl, #0 + ldr r0, [r0] +#ifdef JAPAN + mov r8, #1 +#else + mov sb, #1 +#endif + add r0, r0, #0x700 + ldrsh r2, [r0, #0xa8] + cmp r2, #0 + addne r0, sp, #0 + movne r1, #1 + strneb r1, [r0, r2] +_02388F94: +#ifdef JAPAN + mov r0, r8, lsl #0x10 + add r1, sp, #0 + ldrb r1, [r1, r0, asr #16] + mov r7, r0, asr #0x10 +#else + mov r0, sb, lsl #0x10 + add r1, sp, #0 + ldrb r1, [r1, r0, asr #16] + mov r8, r0, asr #0x10 +#endif + mov r6, #0x44 + cmp r1, #0 + mov r4, #0 + beq _023890B4 +#ifdef JAPAN + mov r0, r7 +#else + mov r0, r8 +#endif + bl SpecificRecruitCheck + cmp r0, #0 + beq _023890B4 +#ifdef JAPAN + mov r0, r7 +#else + mov r0, r8 +#endif + bl CanMonsterSpawn + cmp r0, #0 + beq _023890B4 +#ifdef JAPAN + mov r0, r7 +#else + mov r0, r8 +#endif + bl GetRecruitRate2 + ldr r1, _02389178 ; =0xFFFFFC19 + cmp r0, r1 + beq _023890B4 +#ifdef JAPAN + mov sb, r4 + ldr fp, _0238A43C ; =0x0000022B + b _0238A2A8 +_0238A26C: + mov r0, sb, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetTeamMember + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _0238A2A4 + ldrsh r1, [r0, #4] + mov r0, r7 + bl BaseFormsEqual + cmp r0, #0 + bne _0238A2B0 +_0238A2A4: + add sb, sb, #1 +_0238A2A8: + cmp sb, fp + blt _0238A26C +_0238A2B0: + ldr r0, _0238A43C ; =0x0000022B + cmp sb, r0 + movne r4, #1 + cmp r4, #0 + bne _0238906C + mov sb, #0 + b _0238905C +_0238900C: + mov r0, sb, lsl #0x10 +#else + mov r0, r8 + mov r1, #1 + bl IsMonsterOnTeam + cmp r0, #0 + movne r4, #1 + cmp r4, #0 + bne _0238906C + mov r7, #0 + b _0238905C +_0238900C: + mov r0, r7, lsl #0x10 +#endif + mov r0, r0, asr #0x10 + bl GetActiveTeamMember + mov fp, r0 + ldrb r0, [fp] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02389058 + ldrsh r0, [fp, #8] + bl CheckTeamMemberIdxVeneer + cmp r0, #0 + bne _02389058 + ldrsh r1, [fp, #0xc] +#ifdef JAPAN + mov r0, r7 + bl BaseFormsEqual + cmp r0, #0 + bne _02389064 +_02389058: + add sb, sb, #1 +_0238905C: + cmp sb, #4 + blt _0238900C +_02389064: + cmp sb, #4 + movne r4, #1 +_0238906C: + add sb, r5, sl + ldrb r0, [sb, #0x906] +#else + mov r0, r8 + bl BaseFormsEqual + cmp r0, #0 + bne _02389064 +_02389058: + add r7, r7, #1 +_0238905C: + cmp r7, #4 + blt _0238900C +_02389064: + cmp r7, #4 + movne r4, #1 +_0238906C: + add r7, r5, sl + ldrb r0, [r7, #0x906] +#endif + cmp r4, #0 + movne r6, #0x46 + cmp r6, r0 + bne _023890A4 +#ifdef JAPAN + mov r0, r7 +#else + mov r0, r8 +#endif + bl GetDexNumber + mov r1, sl, lsl #1 + mov r4, r0 + ldrsh r0, [r5, r1] + bl GetDexNumber + cmp r4, r0 + beq _023890B4 +_023890A4: + mov r0, sl, lsl #1 +#ifdef JAPAN + strh r7, [r5, r0] + strb r6, [sb, #0x906] +#else + strh r8, [r5, r0] + strb r6, [r7, #0x906] +#endif + add sl, sl, #1 +_023890B4: + ldr r0, _02389170 ; =0x00000483 +#ifdef JAPAN + add r8, r8, #1 + cmp r8, r0 +#else + add sb, sb, #1 + cmp sb, r0 +#endif + blt _02388F94 + add r0, r5, #6 + str sl, [r5, #0xd8c] + add r6, r0, #0x900 + mov r8, #0 + b _02389140 +_023890D8: + add r7, r8, #1 + mov fp, r8, lsl #1 + b _02389134 +_023890E4: + mov r1, r7, lsl #1 + ldrsh r0, [r5, r1] + ldrsh sb, [r5, r1] + bl GetDexNumber + mov r4, r0 + ldrsh r0, [r5, fp] + bl GetDexNumber + ldrsh r2, [r5, fp] + add r1, sb, r4, lsl #11 + add r0, r2, r0, lsl #11 + cmp r1, r0 + bge _02389130 + ldrb r1, [r6, r7] + mov r0, r7, lsl #1 + strh r2, [r5, r0] + ldrb r0, [r6, r8] + strb r0, [r6, r7] + strh sb, [r5, fp] + strb r1, [r6, r8] +_02389130: + add r7, r7, #1 +_02389134: + cmp r7, sl + blt _023890E4 + add r8, r8, #1 +_02389140: + cmp r8, sl + blt _023890D8 + ldr r0, _0238916C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0xd94] +_02389158: + add sp, sp, #0x84 + add sp, sp, #0x400 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02389164: .word OVERLAY31_UNKNOWN_STRUCT__NA_238A144 +_02389168: .word 0x00000D98 +_0238916C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 +_02389170: .word 0x00000483 +_02389174: .word DUNGEON_PTR +_02389178: .word 0xFFFFFC19 +#ifdef JAPAN +_0238A43C: .word 0x0000022B +#endif + arm_func_end ov31_02388E88 + + arm_func_start ov31_0238917C +ov31_0238917C: ; 0x0238917C + stmdb sp!, {r3, lr} + ldr r0, _023891A4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl MemFree + ldr r0, _023891A4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_023891A4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 + arm_func_end ov31_0238917C + + arm_func_start ov31_023891A8 +ov31_023891A8: ; 0x023891A8 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl sub_02030A18 + mov r4, r0 + ldr r0, _023891F8 ; =DUNGEON_SUBMENU_ITEMS_6 + mov r1, r4, lsl #3 + ldrh r1, [r0, r1] + mov r0, r5 + bl sub_02030A2C +#if defined(EUROPE) + add r0, r4, #0xb2 + add r0, r0, #0x3f00 +#elif defined(JAPAN) + add r0, r4, #0xb3 + add r0, r0, #0x4900 +#else + add r0, r4, #0xfb0 + add r0, r0, #0x3000 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r3, r0 + mov r0, r5 + mov r1, #4 + mov r2, #0x10 + bl DrawTextInWindow + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_023891F8: .word DUNGEON_SUBMENU_ITEMS_6 + arm_func_end ov31_023891A8 + + arm_func_start HelpMenuLoop +HelpMenuLoop: ; 0x023891FC + stmdb sp!, {r4, lr} + sub sp, sp, #0xa0 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r2, [r0] + ldr r0, [r2, #8] + cmp r0, #6 + addls pc, pc, r0, lsl #2 + b _023893F0 +_0238921C: ; jump table + b _02389238 ; case 0 + b _023892B8 ; case 1 + b _02389278 ; case 2 + b _02389344 ; case 3 + b _023893A8 ; case 4 + b _023893DC ; case 5 + b _023893DC ; case 6 +_02389238: + ldr ip, _02389400 ; =0x00003FA7 + mov r4, #0x10 + ldr r0, _02389404 ; =DUNGEON_WINDOW_PARAMS_27 + ldr r1, _02389408 ; =0x00401813 + ldr r3, _0238940C ; =DUNGEON_SUBMENU_ITEMS_6 + add r2, sp, #8 + strh ip, [sp, #0x10] + str r4, [sp, #0x14] + bl CreateParentMenuFromStringIds + ldr r1, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r2, #1 + ldr r3, [r1] + strb r0, [r3] + ldr r0, [r1] + str r2, [r0, #8] + b _023893F0 +_02389278: + ldrsb r0, [r2] + bl sub_02028354 + cmp r0, #3 + bne _02389298 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202810C +_02389298: + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl ResumeParentMenu + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #1 + ldr r0, [r0] + str r1, [r0, #8] +_023892B8: + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl IsParentMenuActive + cmp r0, #0 + bne _023893F0 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202ABB0 + movs r4, r0 + bmi _02389320 + bl sub_02001808 + cmp r0, #0xa000 + ldrlt r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + movlt r1, #2 + ldrlt r0, [r0] + strlt r1, [r0, #8] + blt _023893F0 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #3 + ldr r2, [r0] + str r4, [r2, #4] + ldr r0, [r0] + str r1, [r0, #8] + b _02389330 +_02389320: + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #6 + ldr r0, [r0] + str r1, [r0, #8] +_02389330: + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202812C + b _023893F0 +_02389344: + mov r0, #0x10 + str r0, [sp, #0x14] + ldr r1, [r2, #4] + ldr r0, _0238940C ; =DUNGEON_SUBMENU_ITEMS_6 + mov r1, r1, lsl #3 + ldrh r1, [r0, r1] + mov ip, #8 + ldr r0, _02389410 ; =DUNGEON_WINDOW_PARAMS_28 + strh r1, [sp, #0x10] + ldr r2, [r2, #4] + ldr r1, _02389414 ; =0x00009833 + str r2, [sp, #8] + str ip, [sp] + mov ip, #1 + ldr r3, _02389418 ; =ov31_023891A8 + add r2, sp, #8 + str ip, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r2, #4 + ldr r3, [r1] + strb r0, [r3, #1] + ldr r0, [r1] + str r2, [r0, #8] + b _023893F0 +_023893A8: + ldrsb r0, [r2, #1] + bl IsAdvancedTextBoxActive + cmp r0, #0 + bne _023893F0 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0, #1] + bl CloseAdvancedTextBox + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #2 + ldr r0, [r0] + str r1, [r0, #8] + b _023893F0 +_023893DC: + ldrsb r0, [r2] + bl CloseParentMenu + bl ov29_0234F77C + mov r0, #4 + b _023893F4 +_023893F0: + mov r0, #1 +_023893F4: + add sp, sp, #0xa0 + ldmia sp!, {r4, pc} + .align 2, 0 +_023893FC: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C +#if defined(EUROPE) +_02389400: .word 0x00003FA9 +#elif defined(JAPAN) +_02389400: .word 0x000049AA +#else +_02389400: .word 0x00003FA7 +#endif +_02389404: .word DUNGEON_WINDOW_PARAMS_27 +_02389408: .word 0x00401813 +_0238940C: .word DUNGEON_SUBMENU_ITEMS_6 +_02389410: .word DUNGEON_WINDOW_PARAMS_28 +_02389414: .word 0x00009833 +_02389418: .word ov31_023891A8 + arm_func_end HelpMenuLoop + + arm_func_start ov31_0238941C +ov31_0238941C: ; 0x0238941C + stmdb sp!, {r3, lr} + ldr r0, _02389458 ; =OVERLAY31_UNKNOWN_STRUCT__NA_238A190 + bl sub_020348E4 + cmp r0, #0 + ldmeqia sp!, {r3, pc} + mov r0, #0xc + mov r1, #8 + bl MemAlloc + ldr r1, _0238945C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r2, #0 + str r0, [r1] + str r2, [r0, #4] + ldr r0, [r1] + str r2, [r0, #8] + ldmia sp!, {r3, pc} + .align 2, 0 +_02389458: .word OVERLAY31_UNKNOWN_STRUCT__NA_238A190 +_0238945C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C + arm_func_end ov31_0238941C + + arm_func_start ov31_02389460 +ov31_02389460: ; 0x02389460 + stmdb sp!, {r3, lr} + ldr r0, _02389488 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl MemFree + ldr r0, _02389488 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02389488: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C + arm_func_end ov31_02389460 + + arm_func_start ov31_0238948C +ov31_0238948C: ; 0x0238948C + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x134 +#ifdef JAPAN + mov r5, r0 + mov r0, #0x410 + mov r1, #8 + bl MemAlloc + mov r1, #0x410 + mov r4, r0 + bl MemZero + mvn r1, #1 + strb r1, [r4] + add r0, r4, #0x30c + strb r1, [r4, #1] + bl ov31_02389D80 + mov r0, #0 + str r0, [r4, #0x40c] + strb r0, [r4, #0x408] + bl ov29_022EA62C + mov r0, r4 + mov r1, r5 + bl ov31_02389A78 + ldr r1, [r4, #0x40c] + mov r0, #8 + str r1, [r4, #0x3cc] + str r0, [r4, #0x3d0] + mov r1, #0 + str r1, [r4, #0x3d4] + str r1, [r4, #0x3d8] + str r1, [r4, #0x3bc] + mov r0, #0x10 + str r0, [r4, #0x3c0] + mov r0, r4 + str r1, [r4, #0x3c8] + bl ov29_0234E988 + add r0, sp, #0xac + bl InitPreprocessorArgs + ldrb r0, [r4, #0x408] + cmp r0, #0 + ldrne r1, _023898F0 ; =0x0000158C + mov r0, #0x10 + ldreq r1, _023898F4 ; =0x0000158B + str r0, [sp, #0xa8] + strh r1, [sp, #0xa4] + ldrb r0, [r4, #0x408] + cmp r0, #0 + bne _0238A820 + ldr r1, [r4, #0x404] + add r0, r4, #0x78 + ldr r1, [r1, #0xb4] + bl GetMonsterName + add r0, r4, #0x78 + str r0, [sp, #0xe4] +_0238A820: + ldr r0, _023898F8 ; =DUNGEON_WINDOW_PARAMS_31 + ldr r1, _023898FC ; =0x80401813 + add r2, sp, #0x9c + add r3, r4, #0xc4 + bl CreateParentMenu + strb r0, [r4] +_0238A838: + mov r0, #0x3d + bl AdvanceFrame + ldr r0, [r4, #0x404] + bl ov29_0234FB50 + mov r7, r0 + add r1, sp, #0 + mov r0, #0 + bl GetPressedButtons + ldrsb r0, [r4] + bl IsParentMenuActive + cmp r0, #0 + bne _0238AA84 + ldrsb r0, [r4] + bl sub_0202ABB0 + movs r6, r0 + bmi _0238AA78 + ldrsb r0, [r4] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r4, #0x3c8] + add r1, r4, r0 + add r0, r4, #0x30c + ldrb r5, [r1, #0xb8] + bl ov31_02389D80 + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 + bl ov29_022EBA70 + mov r0, #0x2f + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0xc + mov r1, #0 + bl AddDungeonSubMenuOption + cmp r7, #0 + beq _0238A8CC + mov r0, #0x2f + bl DisableDungeonSubMenuOption +_0238A8CC: + add r1, r4, #0x6c + add r0, r4, #4 + mov r2, #0 + str r1, [sp, #0x64] + bl ov31_0238513C + bl ov29_022EBA84 + mov r3, #0 + b _0238A8FC +_0238A8EC: + add r2, r3, #1 + add r1, r4, r3, lsl #3 + mov r3, r2 + str r2, [r1, #8] +_0238A8FC: + cmp r3, r0 + blt _0238A8EC + ldr r0, _02389904 ; =0x00000877 + add r2, r4, r3, lsl #3 + strh r0, [r2, #4] + mvn r1, #1 + mov r0, #0 + str r1, [r2, #8] + strh r0, [r2, #0xc] + sub r1, r0, #1 + add r0, r4, #1 + str r1, [r2, #0x10] + bl ov29_0234E988 + ldr r0, _02389908 ; =0x0238B4C0 + ldr r1, _0238990C ; =0x80000213 + add r2, sp, #4 + add r3, r4, #4 + bl CreateParentMenuFromStringIds + strb r0, [r4, #1] + mvn r8, #0 + mov r7, #0x3d +_0238A950: + mov r0, r7 + bl AdvanceFrame + ldrsb r0, [r4, #1] + bl IsParentMenuActive + cmp r0, #0 + bne _0238A950 + ldrsb r0, [r4, #1] + bl sub_0202ABB0 + subs r1, r0, #1 + bmi _0238A998 + ldrsb r0, [r4, #1] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r4, #0x3c8] + bl ov29_022EB804 + cmp r0, #0 + movne r8, #0 + b _0238A9AC +_0238A998: + mvn r0, #2 + cmp r1, r0 + bne _0238A9AC + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 +_0238A9AC: + cmp r8, #0 + bge _0238A9C8 + add r0, r4, #1 + bl ov29_0234E988 + ldrsb r0, [r4] + bl ResumeParentMenu + b _0238AB68 +_0238A9C8: + ldr r0, [r4, #0x3c8] + cmp r0, #0 + bne _0238AA3C + ldr r0, _02389910 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldrb r0, [r4, #0x408] + cmp r0, #0 + beq _0238A9F8 + mov r0, r5 + bl ov31_02389C68 + b _0238AA04 +_0238A9F8: + ldr r0, [r4, #0x404] + mov r1, r5 + bl ov31_02389C2C +_0238AA04: + ldr r1, [r4, #0x404] + mov r0, r4 + bl ov31_02389A78 + add r0, r4, #1 + bl ov29_0234E988 + ldrsb r0, [r4] + bl ResumeParentMenu + ldrsb r0, [r4] + add r1, r4, #0xc4 + bl sub_0202A98C + ldrsb r0, [r4] + sub r1, r6, #1 + bl sub_0202AB94 + b _0238AB68 +_0238AA3C: + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 + bl sub_02001808 + cmp r0, #0xa000 + bge _0238AA64 + add r0, r4, #1 + bl ov29_0234E988 + ldrsb r0, [r4] + bl ResumeParentMenu + b _0238AB68 +_0238AA64: + ldrsb r1, [r4] + mov r0, r5 + mov r2, #1 + bl ov31_02389CC0 + b _0238AB68 +_0238AA78: + bl ov29_022EAC78 + mov r0, #1 + b _0238AB6C +_0238AA84: + ldrh r0, [sp] + tst r0, #8 + beq _0238AADC + ldr r0, _02389914 ; =0x00003F04 + bl ov29_022EACCC + bl sub_02001808 + cmp r0, #0xa000 + blt _0238AB68 + ldrsb r0, [r4] + bl sub_0202B030 + mov r0, #0x3d + bl AdvanceFrame + ldrsb r0, [r4] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r4, #0x3c8] + add r0, r4, r0 + ldrb r0, [r0, #0xb8] + ldrsb r1, [r4] + mov r2, #1 + bl ov31_02389CC0 + b _0238AB68 +_0238AADC: + tst r0, #4 + beq _0238AB68 + cmp r7, #0 + beq _0238AAFC + ldr r0, _02389918 ; =0x00003F03 + mov r1, #0x100 + bl sub_02017C74 + b _0238AB68 +_0238AAFC: + ldrsb r0, [r4] + bl sub_0202B030 + ldrsb r0, [r4] + bl sub_0202ABB0 + mov r5, r0 + ldr r0, _02389910 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldrb r0, [r4, #0x408] + cmp r0, #0 + add r0, r4, r5 + beq _0238AB38 + ldrb r0, [r0, #0xb7] + bl ov31_02389C68 + b _0238AB44 +_0238AB38: + ldrb r1, [r0, #0xb7] + ldr r0, [r4, #0x404] + bl ov31_02389C2C +_0238AB44: + ldr r1, [r4, #0x404] + mov r0, r4 + bl ov31_02389A78 + ldrsb r0, [r4] + add r1, r4, #0xc4 + bl sub_0202A98C + ldrsb r0, [r4] + sub r1, r5, #1 + bl sub_0202AB94 +_0238AB68: + mov r0, #0 +_0238AB6C: + cmp r0, #0 + beq _0238A838 + add r0, r4, #1 + bl ov29_0234E988 + mov r0, r4 + bl ov29_0234E988 + mov r0, #0x3d + bl AdvanceFrame + add r0, r4, #1 + bl ov29_0234E988 + mov r0, r4 + bl ov29_0234E988 + mov r0, r4 +#else + mov r4, r0 + mov r0, #0x530 + mov r1, #8 + bl MemAlloc + mov r5, r0 + mov r1, #0x530 + bl MemZero + add r0, r5, #0x2c + mvn r1, #1 + strb r1, [r5] + add r0, r0, #0x400 + strb r1, [r5, #1] + bl ov31_02389D80 + mov r0, #0 + str r0, [r5, #0x52c] + strb r0, [r5, #0x528] + bl ov29_022EA62C + mov r0, r5 + mov r1, r4 + bl ov31_02389A78 + ldr r1, [r5, #0x52c] + mov r0, #8 + str r1, [r5, #0x4ec] + str r0, [r5, #0x4f0] + mov r1, #0 + str r1, [r5, #0x4f4] + str r1, [r5, #0x4f8] + str r1, [r5, #0x4dc] + mov r0, #0x10 + str r0, [r5, #0x4e0] + mov r0, r5 + str r1, [r5, #0x4e8] + bl ov29_0234E988 + add r0, sp, #0xac + bl InitPreprocessorArgs + ldrb r0, [r5, #0x528] + cmp r0, #0 + ldrne r1, _023898F0 ; =0x00000F5F + mov r0, #0x10 + ldreq r1, _023898F4 ; =0x00000F5E + str r0, [sp, #0xa8] + strh r1, [sp, #0xa4] + ldrb r0, [r5, #0x528] + cmp r0, #0 + bne _02389560 + ldr r1, [r5, #0x524] + add r0, r5, #0x78 + ldr r1, [r1, #0xb4] + bl GetMonsterName + add r0, r5, #0x78 + str r0, [sp, #0xe4] +_02389560: + ldr r0, _023898F8 ; =DUNGEON_WINDOW_PARAMS_31 + ldr r1, _023898FC ; =0x80401813 + add r2, sp, #0x9c + add r3, r5, #0xc4 + bl CreateParentMenu + strb r0, [r5] +_02389578: + mov r0, #0x3d + bl AdvanceFrame + ldr r0, [r5, #0x524] + bl ov29_0234FB50 + mov r4, r0 + add r1, sp, #0 + mov r0, #0 + bl GetPressedButtons + ldrsb r0, [r5] + bl IsParentMenuActive + cmp r0, #0 + bne _023897C8 + ldrsb r0, [r5] + bl sub_0202ABB0 + movs r7, r0 + bmi _023897BC + ldrsb r0, [r5] + bl sub_0202ABB0 + sub r1, r0, #1 + add r0, r5, #0x2c + str r1, [r5, #0x4e8] + add r1, r5, r1 + add r0, r0, #0x400 + ldrb r6, [r1, #0xb8] + bl ov31_02389D80 + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 + bl ov29_022EBA70 + mov r0, #0x2f + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0xc + mov r1, #0 + bl AddDungeonSubMenuOption + cmp r4, #0 + beq _02389610 + mov r0, #0x2f + bl DisableDungeonSubMenuOption +_02389610: + add r1, r5, #0x6c + add r0, r5, #4 + mov r2, #0 + str r1, [sp, #0x64] + bl ov31_0238513C + bl ov29_022EBA84 + mov r3, #0 + b _02389640 +_02389630: + add r2, r3, #1 + add r1, r5, r3, lsl #3 + mov r3, r2 + str r2, [r1, #8] +_02389640: + cmp r3, r0 + blt _02389630 + ldr r0, _02389904 ; =0x00000A3C + add r2, r5, r3, lsl #3 + strh r0, [r2, #4] + mvn r1, #1 + mov r0, #0 + str r1, [r2, #8] + strh r0, [r2, #0xc] + sub r1, r0, #1 + add r0, r5, #1 + str r1, [r2, #0x10] + bl ov29_0234E988 + ldr r0, _02389908 ; =DUNGEON_WINDOW_PARAMS_30 + ldr r1, _0238990C ; =0x80000213 + add r2, sp, #4 + add r3, r5, #4 + bl CreateParentMenuFromStringIds + strb r0, [r5, #1] + mvn r8, #0 + mov r4, #0x3d +_02389694: + mov r0, r4 + bl AdvanceFrame + ldrsb r0, [r5, #1] + bl IsParentMenuActive + cmp r0, #0 + bne _02389694 + ldrsb r0, [r5, #1] + bl sub_0202ABB0 + subs r1, r0, #1 + bmi _023896DC + ldrsb r0, [r5, #1] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r5, #0x4e8] + bl ov29_022EB804 + cmp r0, #0 + movne r8, #0 + b _023896F0 +_023896DC: + mvn r0, #2 + cmp r1, r0 + bne _023896F0 + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 +_023896F0: + cmp r8, #0 + bge _0238970C + add r0, r5, #1 + bl ov29_0234E988 + ldrsb r0, [r5] + bl ResumeParentMenu + b _023898AC +_0238970C: + ldr r0, [r5, #0x4e8] + cmp r0, #0 + bne _02389780 + ldr r0, _02389910 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldrb r0, [r5, #0x528] + cmp r0, #0 + beq _0238973C + mov r0, r6 + bl ov31_02389C68 + b _02389748 +_0238973C: + ldr r0, [r5, #0x524] + mov r1, r6 + bl ov31_02389C2C +_02389748: + ldr r1, [r5, #0x524] + mov r0, r5 + bl ov31_02389A78 + add r0, r5, #1 + bl ov29_0234E988 + ldrsb r0, [r5] + bl ResumeParentMenu + ldrsb r0, [r5] + add r1, r5, #0xc4 + bl sub_0202A98C + ldrsb r0, [r5] + sub r1, r7, #1 + bl sub_0202AB94 + b _023898AC +_02389780: + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 + bl sub_02001808 + cmp r0, #0xa000 + bge _023897A8 + add r0, r5, #1 + bl ov29_0234E988 + ldrsb r0, [r5] + bl ResumeParentMenu + b _023898AC +_023897A8: + ldrsb r1, [r5] + mov r0, r6 + mov r2, #1 + bl ov31_02389CC0 + b _023898AC +_023897BC: + bl ov29_022EAC78 + mov r0, #1 + b _023898B0 +_023897C8: + ldrh r0, [sp] + tst r0, #8 + beq _02389820 + ldr r0, _02389914 ; =0x00003F04 + bl ov29_022EACCC + bl sub_02001808 + cmp r0, #0xa000 + blt _023898AC + ldrsb r0, [r5] + bl sub_0202B030 + mov r0, #0x3d + bl AdvanceFrame + ldrsb r0, [r5] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r5, #0x4e8] + add r0, r5, r0 + ldrb r0, [r0, #0xb8] + ldrsb r1, [r5] + mov r2, #1 + bl ov31_02389CC0 + b _023898AC +_02389820: + tst r0, #4 + beq _023898AC + cmp r4, #0 + beq _02389840 + ldr r0, _02389918 ; =0x00003F03 + mov r1, #0x100 + bl sub_02017C74 + b _023898AC +_02389840: + ldrsb r0, [r5] + bl sub_0202B030 + ldrsb r0, [r5] + bl sub_0202ABB0 + mov r4, r0 + ldr r0, _02389910 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldrb r0, [r5, #0x528] + cmp r0, #0 + add r0, r5, r4 + beq _0238987C + ldrb r0, [r0, #0xb7] + bl ov31_02389C68 + b _02389888 +_0238987C: + ldrb r1, [r0, #0xb7] + ldr r0, [r5, #0x524] + bl ov31_02389C2C +_02389888: + ldr r1, [r5, #0x524] + mov r0, r5 + bl ov31_02389A78 + ldrsb r0, [r5] + add r1, r5, #0xc4 + bl sub_0202A98C + ldrsb r0, [r5] + sub r1, r4, #1 + bl sub_0202AB94 +_023898AC: + mov r0, #0 +_023898B0: + cmp r0, #0 + beq _02389578 + add r0, r5, #1 + bl ov29_0234E988 + mov r0, r5 + bl ov29_0234E988 + mov r0, #0x3d + bl AdvanceFrame + add r0, r5, #1 + bl ov29_0234E988 + mov r0, r5 + bl ov29_0234E988 + mov r0, r5 +#endif + bl MemFree + add sp, sp, #0x134 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +_023898F0: .word 0x0000158C +_023898F4: .word 0x0000158B +#else +_023898F0: .word 0x00000F5F +_023898F4: .word 0x00000F5E +#endif +_023898F8: .word DUNGEON_WINDOW_PARAMS_31 +_023898FC: .word 0x80401813 +_02389900: .word 0x00003F02 +#ifdef JAPAN +_02389904: .word 0x00000877 +#else +_02389904: .word 0x00000A3C +#endif +_02389908: .word DUNGEON_WINDOW_PARAMS_30 +_0238990C: .word 0x80000213 +_02389910: .word 0x00003F07 +_02389914: .word 0x00003F04 +_02389918: .word 0x00003F03 + arm_func_end ov31_0238948C + + arm_func_start ov31_0238991C +ov31_0238991C: ; 0x0238991C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + mov r0, #2 + mov r1, #8 + bl MemAlloc + mov r1, r5 + mov r2, r4 + mov r4, r0 + bl ov31_0238994C + mov r0, r4 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov31_0238991C + + arm_func_start ov31_0238994C +ov31_0238994C: ; 0x0238994C + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + mov r3, r2, asr #2 + mov r4, r0 + mov r0, r1, asr #2 + add r2, r2, r3, lsr #29 + add ip, r1, r0, lsr #29 + ldr r6, _023899B0 ; =DUNGEON_WINDOW_PARAMS_32 + mov lr, r2, asr #3 + add r5, sp, #0 + ldmia r6, {r0, r1, r2, r3} + stmia r5, {r0, r1, r2, r3} + mov ip, ip, asr #3 + add r3, lr, #1 + ldr r1, _023899B4 ; =ov31_02389A04 + mov r0, r5 + mov r2, r4 + strb ip, [sp, #4] + strb r3, [sp, #5] + bl CreateTextBoxWithArg + strb r0, [r4] + mov r0, #0xb + strb r0, [r4, #1] + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_023899B0: .word DUNGEON_WINDOW_PARAMS_32 +_023899B4: .word ov31_02389A04 + arm_func_end ov31_0238994C + + arm_func_start ov31_023899B8 +ov31_023899B8: ; 0x023899B8 + stmdb sp!, {r3, lr} + strb r1, [r0, #1] + cmp r2, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + bl sub_0202F9B8 + ldmia sp!, {r3, pc} + arm_func_end ov31_023899B8 + + arm_func_start ov31_023899D4 +ov31_023899D4: ; 0x023899D4 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r4, [r5] + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldrsb r0, [r4] + bl CloseTextBox2 + mov r0, r4 + bl MemFree + mov r0, #0 + str r0, [r5] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov31_023899D4 + + arm_func_start ov31_02389A04 +ov31_02389A04: ; 0x02389A04 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x94 + mov r5, r0 + mov r4, r1 + bl sub_02027B1C + add r0, sp, #0x44 + bl InitPreprocessorArgs + ldrb r0, [r4, #1] + ldr r3, _02389A70 ; =0x0000C402 + add ip, sp, #0x44 + cmp r0, #0xb + strne r0, [sp, #0x54] +#ifdef JAPAN + ldreq r2, _0238AD30 ; =0x0000158D + add r0, sp, #4 + ldrne r2, _02389A74 ; =0x0000158E +#else + moveq r2, #0xf60 + ldrne r2, _02389A74 ; =0x00000F61 + add r0, sp, #4 +#endif + mov r1, #0x40 + str ip, [sp] + bl PreprocessStringFromId + add r3, sp, #4 + mov r0, r5 + mov r1, #4 + mov r2, #2 + bl DrawTextInWindow + mov r0, r5 + bl UpdateWindow + add sp, sp, #0x94 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02389A70: .word 0x0000C402 +#ifdef JAPAN +_0238AD30: .word 0x0000158D +_02389A74: .word 0x0000158E +#else +_02389A74: .word 0x00000F61 +#endif + arm_func_end ov31_02389A04 + + arm_func_start ov31_02389A78 +ov31_02389A78: ; 0x02389A78 +#ifdef JAPAN +#define OV31_02389A78_OFFSET -0x120 +#else +#define OV31_02389A78_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x70 + mov sb, r1 + ldr r4, [sb, #0xb4] + mov sl, r0 + ldrb r0, [r4, #7] + strb r0, [sl, #0x528 + OV31_02389A78_OFFSET] + bl GetLeaderMonster + ldrb r1, [r0, #0xa] + add r0, sp, #0x14 + bl GetUnlockedTactics + ldrb r0, [sl, #0x528 + OV31_02389A78_OFFSET] + cmp r0, #0 + beq _02389B64 + mov r6, #0 + bl GetLeaderMonster + ldrb r1, [r0, #0xa] + add r0, sp, #8 + bl GetUnlockedTactics + ldr r4, _02389C20 ; =DUNGEON_PTR + mov r7, r6 + add r5, sp, #4 +_02389AD0: + ldr r0, [r4] + add r0, r0, r7, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r8, [r0, #0xa84] +#else + ldr r8, [r0, #0xb28] +#endif + mov r0, r8 + bl ov29_0234FB60 + cmp r0, #0 + beq _02389B08 + ldr r1, [r8, #0xb4] + add r0, r6, #1 + ldrb r1, [r1, #0xa8] + mov r0, r0, lsl #0x10 + strb r1, [r5, r6] + mov r6, r0, asr #0x10 +_02389B08: + add r0, r7, #1 + mov r0, r0, lsl #0x10 + mov r7, r0, asr #0x10 + cmp r7, #4 + blt _02389AD0 + cmp r6, #0 + moveq r6, #0xb + beq _02389B68 + mov r3, #1 + ldrb r2, [sp, #4] + add r1, sp, #4 + b _02389B54 +_02389B38: + ldrb r0, [r1, r3] + cmp r2, r0 + movne r6, #0xb + bne _02389B68 + add r0, r3, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 +_02389B54: + cmp r3, r6 + blt _02389B38 + ldrb r6, [sp, #4] + b _02389B68 +_02389B64: + ldrb r6, [r4, #0xa8] +_02389B68: + mov r8, #0 + add r4, sl, #0x12c + add fp, sp, #0x14 + add r5, sp, #0x20 + b _02389BF4 +_02389B7C: + ldrb r1, [fp, r8] + add r0, sl, r8 + strb r1, [r0, #0xb8] + cmp r1, #0xb + beq _02389BFC + str r1, [sp, #0x30] + cmp r6, #0xb + beq _02389BC4 + cmp r6, r1 + bne _02389BC4 +#ifdef JAPAN + mov r0, #0x28 + mul r7, r8, r0 + ldr r2, _02389C24 ; =ov31_0238A228 + add r0, r4, r7 + mov r1, #0x28 + mov r3, #0 + str r5, [sp] + bl PreprocessString + b _02389BE0 +_02389BC4: + mov r0, #0x28 + mul r7, r8, r0 + ldr r2, _02389C28 ; =ov31_0238A23C + add r0, r4, r7 + mov r1, #0x28 + mov r3, #0 + str r5, [sp] +#else + ldr r2, _02389C24 ; =ov31_0238A228 + mov r1, #0x40 + add r0, r4, r8, lsl #6 + mov r3, #0 + str r5, [sp] + mov r7, r8, lsl #6 + bl PreprocessString + b _02389BE0 +_02389BC4: + ldr r2, _02389C28 ; =ov31_0238A23C + mov r1, #0x40 + add r0, r4, r8, lsl #6 + mov r3, #0 + str r5, [sp] + mov r7, r8, lsl #6 +#endif + bl PreprocessString +_02389BE0: + add r1, r4, r7 + add r0, sl, r8, lsl #3 + str r1, [r0, #0xc4] + add r8, r8, #1 + str r8, [r0, #0xc8] +_02389BF4: + cmp r8, #0xc + blt _02389B7C +_02389BFC: + mov r0, #0 + str r8, [sl, #0x52c + OV31_02389A78_OFFSET] + add r1, sl, r8, lsl #3 + str r0, [r1, #0xc4] + sub r0, r0, #1 + str r0, [r1, #0xc8] + str sb, [sl, #0x524 + OV31_02389A78_OFFSET] + add sp, sp, #0x70 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02389C20: .word DUNGEON_PTR +_02389C24: .word ov31_0238A228 +_02389C28: .word ov31_0238A23C + arm_func_end ov31_02389A78 + + arm_func_start ov31_02389C2C +ov31_02389C2C: ; 0x02389C2C + stmdb sp!, {r3, lr} + ldr r3, [r0, #0xb4] + mov r2, #6 + strb r1, [r3, #0xa8] + strb r2, [r3, #0x7c] + mov r1, #0 + str r1, [r3, #0x84] + str r1, [r3, #0x88] + strh r1, [r3, #0x80] + ldrb r1, [r3, #7] + cmp r1, #0 + ldmneia sp!, {r3, pc} + mov r1, #1 + bl AiMovement + ldmia sp!, {r3, pc} + arm_func_end ov31_02389C2C + + arm_func_start ov31_02389C68 +ov31_02389C68: ; 0x02389C68 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r5, _02389CBC ; =DUNGEON_PTR + mov r4, r0 + mov r6, #0 +_02389C78: + ldr r0, [r5] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r7, [r0, #0xa84] +#else + ldr r7, [r0, #0xb28] +#endif + mov r0, r7 + bl ov29_0234FB60 + cmp r0, #0 + beq _02389CA4 + mov r0, r7 + mov r1, r4 + bl ov31_02389C2C +_02389CA4: + add r0, r6, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 + cmp r6, #4 + blt _02389C78 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02389CBC: .word DUNGEON_PTR + arm_func_end ov31_02389C68 + + arm_func_start ov31_02389CC0 +ov31_02389CC0: ; 0x02389CC0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x5c + mov r5, r1 + mov r6, r0 + mov r0, r5 + mov r4, r2 + bl sub_0202812C +#if defined(EUROPE) + add r0, r6, #0x2dc + add r0, r0, #0x2400 +#elif defined(JAPAN) + add r0, r6, #0x308 + add r0, r0, #0x3c00 +#else + add r0, r6, #0xda + add r0, r0, #0x2600 +#endif + mov r0, r0, lsl #0x10 + mov r2, r0, lsr #0x10 + add r1, sp, #0xc + str r6, [sp, #0x1c] + str r1, [sp] + str r2, [sp, #4] + mov r2, #0 + ldr r0, _02389D74 ; =DUNGEON_WINDOW_PARAMS_29 + ldr r1, _02389D78 ; =0x00001013 + ldr r3, _02389D7C ; =0x00000A3B + str r2, [sp, #8] + bl CreateScrollBoxSingle + mov r7, r0 + mov r6, #0x3e +_02389D1C: + mov r0, r6 + bl AdvanceFrame + mov r0, r7 + bl IsScrollBoxActive + cmp r0, #0 + bne _02389D1C + mov r0, r7 + bl CloseScrollBox + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #4 + mov r1, #0x3e + bl ov29_022EA370 + mov r0, r5 + bl sub_0202810C + cmp r4, #0 + beq _02389D6C + mov r0, r5 + bl ResumeParentMenu +_02389D6C: + add sp, sp, #0x5c + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02389D74: .word DUNGEON_WINDOW_PARAMS_29 +_02389D78: .word 0x00001013 +#ifdef JAPAN +_02389D7C: .word 0x00000876 +#else +_02389D7C: .word 0x00000A3B +#endif + arm_func_end ov31_02389CC0 + + arm_func_start ov31_02389D80 +ov31_02389D80: ; 0x02389D80 + mov r1, #0 + str r1, [r0, #0xc8] + str r1, [r0, #0xcc] + str r1, [r0, #0xbc] + bx lr + arm_func_end ov31_02389D80 + ; 0x02389D94 + + .rodata + .global DUNGEON_WINDOW_PARAMS_1 +DUNGEON_WINDOW_PARAMS_1: + .byte 0x00, 0x00, 0x00, 0x00 +#ifdef EUROPE + .byte 0x02, 0x02, 0x07, 0x0C +#else + .byte 0x02, 0x02, 0x00, 0x0C +#endif + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_2 +DUNGEON_WINDOW_PARAMS_2: + .byte 0x00, 0x00, 0x00, 0x00, 0x0B, 0x04, 0x13, 0x02, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_3 +DUNGEON_WINDOW_PARAMS_3: + .byte 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .word ov31_02382DAC + .word ov31_02382B54 + .global DUNGEON_WINDOW_PARAMS_4 +DUNGEON_WINDOW_PARAMS_4: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x1C, 0x06, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_MAIN_MENU_ITEMS +DUNGEON_MAIN_MENU_ITEMS: +#ifdef JAPAN +#define OV31_DATA_OFFSET 0x1458 +#else +#define OV31_DATA_OFFSET 0 +#endif + .word 0x8AD + OV31_DATA_OFFSET + .byte 0x00, 0x00, 0x00, 0x00 + .word 0x8AE + OV31_DATA_OFFSET + .byte 0x01, 0x00, 0x00, 0x00 + .word 0x8AF + OV31_DATA_OFFSET + .byte 0x02, 0x00, 0x00, 0x00 + .word 0x8B0 + OV31_DATA_OFFSET + .byte 0x03, 0x00, 0x00, 0x00 + .word 0x8B1 + OV31_DATA_OFFSET + .byte 0x04, 0x00, 0x00, 0x00 + .word 0x8B3 + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8B4 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .global DUNGEON_MENU_SWITCH_STR1 +DUNGEON_MENU_SWITCH_STR1: + .string "[dungeon:0]" + .global OVERLAY31_UNKNOWN_STRING_IDS +OVERLAY31_UNKNOWN_STRING_IDS: + .hword 0x8C7 + OV31_DATA_OFFSET + .global ov31_02389E22 +ov31_02389E22: + .hword 0x8CB + OV31_DATA_OFFSET + .hword 0x8C8 + OV31_DATA_OFFSET + .hword 0x8CC + OV31_DATA_OFFSET + .hword 0x8C9 + OV31_DATA_OFFSET + .hword 0x8CD + OV31_DATA_OFFSET + .hword 0x8CA + OV31_DATA_OFFSET + .hword 0x8CE + OV31_DATA_OFFSET + .global OVERLAY31_UNKNOWN_STRUCT__NA_2389E30 +OVERLAY31_UNKNOWN_STRUCT__NA_2389E30: + .byte 0x0E, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .word ov31_023832F0 + .word HandleStairsMenu + .global DUNGEON_WINDOW_PARAMS_5 +DUNGEON_WINDOW_PARAMS_5: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x02, 0x1C, 0x0D, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_6 +DUNGEON_WINDOW_PARAMS_6: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x02, 0x13, 0x04, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_7 +DUNGEON_WINDOW_PARAMS_7: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x17, 0x02, 0x07, 0x06, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_SUBMENU_ITEMS_1 +DUNGEON_SUBMENU_ITEMS_1: +#ifdef JAPAN +#define DUNGEON_SUBMENU_ITEMS_1_OFFSET 0x19D0 +#else +#define DUNGEON_SUBMENU_ITEMS_1_OFFSET 0 +#endif + .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET + .byte 0x01, 0x00, 0x00, 0x00 + .word 0x8CF + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8D0 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET + .byte 0x02, 0x00, 0x00, 0x00 + .word 0x8CF + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8D0 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .word 0x9C9 + DUNGEON_SUBMENU_ITEMS_1_OFFSET + .byte 0x03, 0x00, 0x00, 0x00 + .word 0x8CF + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8D0 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET + .byte 0x04, 0x00, 0x00, 0x00 + .word 0x8CF + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8D0 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .global OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 +OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0: + .byte 0x01, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_8 +DUNGEON_WINDOW_PARAMS_8: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_9 +DUNGEON_WINDOW_PARAMS_9: + .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x07, 0x00 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_10 +DUNGEON_WINDOW_PARAMS_10: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x08, 0x02 + .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_11 +DUNGEON_WINDOW_PARAMS_11: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x12, 0x02 + .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_12 +DUNGEON_WINDOW_PARAMS_12: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x13, 0x00 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_13 +DUNGEON_WINDOW_PARAMS_13: + .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x07, 0x00 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global ov31_02389F5C +ov31_02389F5C: + .byte 0x20, 0x20, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00 + .global OVERLAY31_JP_STRING +OVERLAY31_JP_STRING: + .byte 0x0A, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x81, 0x40, 0x20, 0x8F, 0x89, 0x8A, 0xFA, 0x83, 0x7C, 0x83 + .byte 0x57, 0x83, 0x56, 0x83, 0x87, 0x83, 0x93, 0x3D, 0x25, 0x64, 0x81, 0x40, 0x2D, 0x2D, 0x2D, 0x2D + .byte 0x2D, 0x20, 0x0A, 0x00 + .global DUNGEON_WINDOW_PARAMS_14 +DUNGEON_WINDOW_PARAMS_14: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x11, 0x1C, 0x05, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_15 +DUNGEON_WINDOW_PARAMS_15: + .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_16 +DUNGEON_WINDOW_PARAMS_16: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x1C, 0x04, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_17 +DUNGEON_WINDOW_PARAMS_17: + .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_18 +DUNGEON_WINDOW_PARAMS_18: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x13, 0x04, 0x00, 0xFE, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_19 +DUNGEON_WINDOW_PARAMS_19: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 +OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8: + .byte 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_20 +DUNGEON_WINDOW_PARAMS_20: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x0E, 0x12, 0x04, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_21 +DUNGEON_WINDOW_PARAMS_21: + .byte 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x10, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_22 +DUNGEON_WINDOW_PARAMS_22: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_23 +DUNGEON_WINDOW_PARAMS_23: + .byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x02, 0x0B, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_24 +DUNGEON_WINDOW_PARAMS_24: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0A, 0x02, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global ov31_0238A044 +ov31_0238A044: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x30, 0x5D, 0x00, 0x00 + .global ov31_0238A04C +ov31_0238A04C: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x31, 0x5D, 0x00, 0x00 + .global ov31_0238A054 +ov31_0238A054: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x32, 0x5D, 0x00, 0x00 + .global ov31_0238A05C +ov31_0238A05C: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x33, 0x5D, 0x00, 0x00 + .global ov31_0238A064 +ov31_0238A064: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x34, 0x5D, 0x00, 0x00 + .global ov31_0238A06C +ov31_0238A06C: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x35, 0x5D, 0x00, 0x00 + .global ov31_0238A074 +ov31_0238A074: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x36, 0x5D, 0x00, 0x00 + .global ov31_0238A07C +ov31_0238A07C: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x37, 0x5D, 0x00, 0x00 + .global ov31_0238A084 +ov31_0238A084: + .byte 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x5D, 0x5B, 0x43, 0x4C, 0x55, 0x4D, 0x5F + .byte 0x53, 0x45, 0x54, 0x3A, 0x38, 0x30, 0x5D, 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x31 + .byte 0x5D, 0x00, 0x00, 0x00 + .global ov31_0238A0A8 +ov31_0238A0A8: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x30, 0x5D, 0x00, 0x00 + .global ov31_0238A0B0 +ov31_0238A0B0: + .byte 0x5B, 0x4D, 0x3A, 0x48 + .byte 0x31, 0x5D, 0x00, 0x00 + .global ov31_0238A0B8 +ov31_0238A0B8: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x32, 0x5D, 0x00, 0x00 + .global ov31_0238A0C0 +ov31_0238A0C0: + .byte 0x5B, 0x4D, 0x3A, 0x48 + .byte 0x33, 0x5D, 0x00, 0x00 + .global ov31_0238A0C8 +ov31_0238A0C8: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x34, 0x5D, 0x00, 0x00 + .global ov31_0238A0D0 +ov31_0238A0D0: + .byte 0x5B, 0x4D, 0x3A, 0x48 + .byte 0x35, 0x5D, 0x00, 0x00 + .global ov31_0238A0D8 +ov31_0238A0D8: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x36, 0x5D, 0x00, 0x00 + .global ov31_0238A0E0 +ov31_0238A0E0: + .byte 0x5B, 0x4D, 0x3A, 0x48 + .byte 0x37, 0x5D, 0x00, 0x00 + .global ov31_0238A0E8 +ov31_0238A0E8: + .byte 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x5D, 0x5B, 0x43 + .byte 0x4C, 0x55, 0x4D, 0x5F, 0x53, 0x45, 0x54, 0x3A, 0x38, 0x30, 0x5D, 0x5B, 0x73, 0x74, 0x72, 0x69 + .byte 0x6E, 0x67, 0x3A, 0x31, 0x5D, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_25 +DUNGEON_WINDOW_PARAMS_25: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0C, 0x00 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_SUBMENU_ITEMS_5 +DUNGEON_SUBMENU_ITEMS_5: + .word 0x8C3 + OV31_DATA_OFFSET + .byte 0x01, 0x00, 0x00, 0x00 + .word 0x8C4 + OV31_DATA_OFFSET + .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .global DUNGEON_WINDOW_PARAMS_26 +DUNGEON_WINDOW_PARAMS_26: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x1C, 0x12, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_STRUCT__NA_238A144 +OVERLAY31_UNKNOWN_STRUCT__NA_238A144: + .byte 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .word ov31_0238917C + .word RecruitmentSearchMenuLoop + .global ov31_0238A154 +ov31_0238A154: + .byte 0x5B, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x30, 0x3A, 0x33, 0x5D, 0x20, 0x5B, 0x43, 0x53, 0x3A + .byte 0x25, 0x63, 0x5D, 0x25, 0x73, 0x5B, 0x43, 0x52, 0x5D, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_27 +DUNGEON_WINDOW_PARAMS_27: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x02, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_28 +DUNGEON_WINDOW_PARAMS_28: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x02, 0x1C, 0x14, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_STRUCT__NA_238A190 +OVERLAY31_UNKNOWN_STRUCT__NA_238A190: + .byte 0x0E, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .word ov31_02389460 + .word HelpMenuLoop + .global DUNGEON_SUBMENU_ITEMS_6 +DUNGEON_SUBMENU_ITEMS_6: +#if defined(EUROPE) +#define DUNGEON_SUBMENU_6_OFFSET 2 +#elif defined(JAPAN) +#define DUNGEON_SUBMENU_6_OFFSET 0xA03 +#else +#define DUNGEON_SUBMENU_6_OFFSET 0 +#endif + .word 0x3FA8 + DUNGEON_SUBMENU_6_OFFSET + .byte 0x00, 0x00, 0x00, 0x00 + .word 0x3FA9 + DUNGEON_SUBMENU_6_OFFSET + .byte 0x01, 0x00, 0x00, 0x00 + .word 0x3FAA + DUNGEON_SUBMENU_6_OFFSET + .byte 0x02, 0x00, 0x00, 0x00 + .word 0x3FAB + DUNGEON_SUBMENU_6_OFFSET + .byte 0x03, 0x00, 0x00, 0x00 + .word 0x3FAC + DUNGEON_SUBMENU_6_OFFSET + .byte 0x04, 0x00, 0x00, 0x00 + .word 0x3FAD + DUNGEON_SUBMENU_6_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x3FAE + DUNGEON_SUBMENU_6_OFFSET + .byte 0x06, 0x00, 0x00, 0x00 + .word 0x3FAF + DUNGEON_SUBMENU_6_OFFSET + .byte 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0xFF, 0xFF, 0xFF, 0xFF + .global DUNGEON_WINDOW_PARAMS_29 +DUNGEON_WINDOW_PARAMS_29: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_30 +DUNGEON_WINDOW_PARAMS_30: + .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_31 +DUNGEON_WINDOW_PARAMS_31: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x12, 0x00, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_32 +DUNGEON_WINDOW_PARAMS_32: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x0F, 0x02, 0x00, 0xFE, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global ov31_0238A228 +ov31_0238A228: + .byte 0x5B, 0x4D, 0x3A, 0x53, 0x32, 0x5D, 0x5B, 0x74, 0x61, 0x63, 0x74, 0x69 + .byte 0x63, 0x73, 0x3A, 0x30, 0x5D, 0x00, 0x00, 0x00 + .global ov31_0238A23C +ov31_0238A23C: + .byte 0x5B, 0x4D, 0x3A, 0x53, 0x31, 0x5D, 0x5B, 0x74 + .byte 0x61, 0x63, 0x74, 0x69, 0x63, 0x73, 0x3A, 0x30, 0x5D, 0x00, 0x00, 0x00 + + .data + .global OVERLAY31_UNKNOWN_POINTER__NA_238A260 +OVERLAY31_UNKNOWN_POINTER__NA_238A260: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x0A, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A268 +OVERLAY31_UNKNOWN_POINTER__NA_238A268: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A26C +OVERLAY31_UNKNOWN_POINTER__NA_238A26C: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A270 +OVERLAY31_UNKNOWN_POINTER__NA_238A270: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A27C +OVERLAY31_UNKNOWN_POINTER__NA_238A27C: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A280 +OVERLAY31_UNKNOWN_POINTER__NA_238A280: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A284 +OVERLAY31_UNKNOWN_POINTER__NA_238A284: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A288 +OVERLAY31_UNKNOWN_POINTER__NA_238A288: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A28C +OVERLAY31_UNKNOWN_POINTER__NA_238A28C: + .byte 0x00, 0x00, 0x00, 0x00 + + .bss + .global ov31_0238A2A0 +ov31_0238A2A0: + .space 0x8 + .global ov31_0238A2A8 +ov31_0238A2A8: + .space 0x18 diff --git a/include/overlay_31_02383478.h b/include/overlay_31_02383478.h new file mode 100644 index 00000000..2dcc365f --- /dev/null +++ b/include/overlay_31_02383478.h @@ -0,0 +1,18 @@ +#ifndef PMDSKY_OVERLAY_31_02383478_H +#define PMDSKY_OVERLAY_31_02383478_H + +struct loc_struct { + u8 PAD_0x0000[4508]; + s16* field_0x119C; + u8 PAD_0x11A0[18]; + u8 field_0x11B2; + u8 field_0x11B3; + struct item* field_0x11B4; + u8 PAD_0x11B8[64]; + u8 field_0x11F8[127]; + u8 field_0x1277; +}; + +char* ov31_02383478(char* arg1, s32 arg2, u32 arg3); + +#endif //PMDSKY_OVERLAY_31_02383478_H diff --git a/main.lsf b/main.lsf index 2e1b6731..0d5f0a85 100644 --- a/main.lsf +++ b/main.lsf @@ -574,6 +574,8 @@ Overlay OVY_31 Object asm/overlay_31_02382FBC.o Object src/overlay_31_02383328.o Object asm/overlay_31_023833D8.o + Object src/overlay_31_02383478.o + Object asm/overlay_31_02383658.o } Overlay OVY_32 { diff --git a/src/overlay_31_02383478.c b/src/overlay_31_02383478.c new file mode 100644 index 00000000..d1e02b42 --- /dev/null +++ b/src/overlay_31_02383478.c @@ -0,0 +1,58 @@ +#include "overlay_31_02383478.h" +#include "dungeon.h" +#include "dungeon_map_access.h" +#include "overlay_29_022E1610.h" + +extern struct loc_struct* OVERLAY31_UNKNOWN_POINTER__NA_238A26C; +extern struct bag_items* BAG_ITEMS_PTR_MIRROR; +extern u32 OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0; +extern u8 ov31_02389F5C[]; +extern struct dungeon* DUNGEON_PTR[]; + +extern void sub_0200D310(char*, struct item*, u32*, u32, u32); +extern u8* strcpy(u8* dest, const u8* src); +extern u32 ov31_02383658(struct entity*); +extern void sub_0200D894(struct item*); +extern void ov10_022BD394(char*, s32, u32, u32); + +#define GET_BIT(BYTE, N) ((u8)(BYTE & (1 << N) ? 1 : 0)) + +char* ov31_02383478(char* arg1, s32 arg2, u32 arg3) +{ + u32 a = 1; + if (arg2 >= 0) { + OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x11F8[arg2] = 0; + } + if ( OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x11B4 != NULL && + arg2 >= 0 && + ( &(BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2]) == OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x11B4 || + BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].held_by != 0 ) ) { + OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x11F8[arg2] = 3; + a = 0; + } + if ( OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x11B2 != 0 || + arg2 < 0 ) { + s16 x = OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x119C[2]; + s16 y = OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x119C[3]; + struct tile* tile = GetTile(x, y); + struct item* item = GetItemInfo(tile->object); + + if (GET_BIT(item->flags, 0)) { + sub_0200D310(arg1, item, &OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0, a, 1); + OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x1277 = 0; + } else { + strcpy(arg1, ov31_02389F5C); + OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x1277 = 3; + } + } else { + if (GET_BIT(BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].flags, 0) && + BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].held_by) { + u32 r1 = (BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].held_by - 1); + if (ov31_02383658(DUNGEON_PTR[0]->monster_slots.party_members[r1]) == 0) { + sub_0200D894(&(BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2])); + } + } + ov10_022BD394(arg1, arg2, a, arg3); + } + return arg1; +} From ba80cbb8879c1d5b2514bb01113992d09bffa990 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 16 Jul 2025 20:54:18 -0400 Subject: [PATCH 05/40] Decomped EntityIsValid__02383658 Decomped by anonymous user: https://decomp.me/scratch/u0ggr --- ...1_02383658.inc => overlay_31_0238367C.inc} | 1 + ...ay_31_02383658.s => overlay_31_0238367C.s} | 25 +++++-------------- include/overlay_31_02383478.h | 4 +++ main.lsf | 2 +- src/overlay_31_02383478.c | 11 ++++++-- 5 files changed, 21 insertions(+), 22 deletions(-) rename asm/include/{overlay_31_02383658.inc => overlay_31_0238367C.inc} (99%) rename asm/{overlay_31_02383658.s => overlay_31_0238367C.s} (99%) diff --git a/asm/include/overlay_31_02383658.inc b/asm/include/overlay_31_0238367C.inc similarity index 99% rename from asm/include/overlay_31_02383658.inc rename to asm/include/overlay_31_0238367C.inc index 01490b26..805471c7 100644 --- a/asm/include/overlay_31_02383658.inc +++ b/asm/include/overlay_31_0238367C.inc @@ -213,6 +213,7 @@ .public ov31_02382DAC .public ov31_023832F0 .public ov31_02383478 +.public EntityIsValid__02383658 .public ov31_02389F5C .public ov31_0238A044 .public ov31_0238A04C diff --git a/asm/overlay_31_02383658.s b/asm/overlay_31_0238367C.s similarity index 99% rename from asm/overlay_31_02383658.s rename to asm/overlay_31_0238367C.s index bcdcc21a..6599ddb9 100644 --- a/asm/overlay_31_02383658.s +++ b/asm/overlay_31_0238367C.s @@ -1,21 +1,8 @@ .include "asm/macros.inc" - .include "overlay_31_02383658.inc" + .include "overlay_31_0238367C.inc" .text - arm_func_start ov31_02383658 -ov31_02383658: ; 0x02383658 - cmp r0, #0 - moveq r0, #0 - bxeq lr - ldr r0, [r0] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end ov31_02383658 - arm_func_start ov31_0238367C ov31_0238367C: ; 0x0238367C stmdb sp!, {r4, r5, lr} @@ -211,7 +198,7 @@ _023838A0: #else ldr r0, [r0, #0xb28] #endif - bl ov31_02383658 + bl EntityIsValid__02383658 cmp r0, #0 addeq r0, r7, r5 streqb r4, [r0, #1] @@ -442,7 +429,7 @@ _02383BEC: add r0, r0, #0x12000 ldr r8, [r0, #0xb28 + OV31_023838E4_OFFSET] mov r0, r8 - bl ov31_02383658 + bl EntityIsValid__02383658 cmp r0, #0 beq _02383C38 ldr r1, [r8, #0xb4] @@ -953,7 +940,7 @@ _02384320: add r0, r0, #0x12000 ldr fp, [r0, #0xb28 + OV31_023838E4_OFFSET] mov r0, fp - bl ov31_02383658 + bl EntityIsValid__02383658 cmp r0, #0 beq _02384374 ldr r1, [fp, #0xb4] @@ -1248,7 +1235,7 @@ _02384758: add r0, r0, #0x12000 ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] str r0, [sp, #0x1c] - bl ov31_02383658 + bl EntityIsValid__02383658 cmp r0, #0 beq _023847A0 ldr r0, [sp, #0x1c] @@ -1447,7 +1434,7 @@ _023849F4: add r0, r0, #0x12000 ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] str r0, [sp, #0x20] - bl ov31_02383658 + bl EntityIsValid__02383658 cmp r0, #0 beq _02384C48 mov r0, #0 diff --git a/include/overlay_31_02383478.h b/include/overlay_31_02383478.h index 2dcc365f..786cec07 100644 --- a/include/overlay_31_02383478.h +++ b/include/overlay_31_02383478.h @@ -1,6 +1,8 @@ #ifndef PMDSKY_OVERLAY_31_02383478_H #define PMDSKY_OVERLAY_31_02383478_H +#include "dungeon_mode.h" + struct loc_struct { u8 PAD_0x0000[4508]; s16* field_0x119C; @@ -14,5 +16,7 @@ struct loc_struct { }; char* ov31_02383478(char* arg1, s32 arg2, u32 arg3); +// Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity). +bool8 EntityIsValid__02383658(struct entity *entity); #endif //PMDSKY_OVERLAY_31_02383478_H diff --git a/main.lsf b/main.lsf index 0d5f0a85..ee1faf2a 100644 --- a/main.lsf +++ b/main.lsf @@ -575,7 +575,7 @@ Overlay OVY_31 Object src/overlay_31_02383328.o Object asm/overlay_31_023833D8.o Object src/overlay_31_02383478.o - Object asm/overlay_31_02383658.o + Object asm/overlay_31_0238367C.o } Overlay OVY_32 { diff --git a/src/overlay_31_02383478.c b/src/overlay_31_02383478.c index d1e02b42..b2647696 100644 --- a/src/overlay_31_02383478.c +++ b/src/overlay_31_02383478.c @@ -11,7 +11,6 @@ extern struct dungeon* DUNGEON_PTR[]; extern void sub_0200D310(char*, struct item*, u32*, u32, u32); extern u8* strcpy(u8* dest, const u8* src); -extern u32 ov31_02383658(struct entity*); extern void sub_0200D894(struct item*); extern void ov10_022BD394(char*, s32, u32, u32); @@ -48,7 +47,7 @@ char* ov31_02383478(char* arg1, s32 arg2, u32 arg3) if (GET_BIT(BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].flags, 0) && BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].held_by) { u32 r1 = (BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].held_by - 1); - if (ov31_02383658(DUNGEON_PTR[0]->monster_slots.party_members[r1]) == 0) { + if (EntityIsValid__02383658(DUNGEON_PTR[0]->monster_slots.party_members[r1]) == 0) { sub_0200D894(&(BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2])); } } @@ -56,3 +55,11 @@ char* ov31_02383478(char* arg1, s32 arg2, u32 arg3) } return arg1; } + +bool8 EntityIsValid__02383658(struct entity *entity) +{ + if (entity == NULL) + return FALSE; + + return entity->type != ENTITY_NOTHING; +} From 7052badfb387c59635ab130dcf365b4c18e67356 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 17 Jul 2025 21:46:00 -0400 Subject: [PATCH 06/40] Decomped sub_0203C760 Decomped by TiredPeanut --- asm/include/main_02034974.inc | 441 +- asm/include/main_0203C774.inc | 525 + asm/main_02034974.s | 18090 -------------------------------- asm/main_0203C774.s | 18084 +++++++++++++++++++++++++++++++ asm/overlay_17.s | 1 + asm/overlay_29_022EC62C.s | 1 + asm/overlay_31_02382FBC.s | 2 +- asm/overlay_31_023833D8.s | 3 +- asm/overlay_31_0238367C.s | 1 + include/main_0203C760.h | 6 + main.lsf | 2 + src/main_0203C760.c | 8 + 12 files changed, 18640 insertions(+), 18524 deletions(-) create mode 100644 asm/include/main_0203C774.inc create mode 100644 asm/main_0203C774.s create mode 100644 include/main_0203C760.h create mode 100644 src/main_0203C760.c diff --git a/asm/include/main_02034974.inc b/asm/include/main_02034974.inc index d10122ee..8463fd25 100644 --- a/asm/include/main_02034974.inc +++ b/asm/include/main_02034974.inc @@ -1,241 +1,99 @@ #pragma once -.public AddItemToStorage -.public AddMoneyCarried -.public ApplyLevelUpBoostsToGroundMonster -.public Arm9LoadUnkFieldNa0x2029EC8 -.public Arm9StoreUnkFieldNa0x2029ED8 -.public BAG_ITEMS_PTR_MIRROR -.public CanMonsterUseMove -.public CardBackupError -.public CardPullOutWithStatus .public CheckDebugMenuField0x1A4 .public CheckOptionsMenuField0x1A4 .public CheckParentMenuField0x1A0 -.public ClearAdventureLogStruct -.public ClearWindow .public CloseAdvancedMenu .public CloseAdvancedTextBox -.public CloseAdvancedTextBox2 -.public CloseCollectionMenu .public CloseDebugMenu .public CloseDialogueBox .public CloseOptionsMenu .public CloseParentMenu .public ClosePortraitBox -.public CloseScrollBox .public CloseSimpleMenu .public CloseTeamSelectionMenu .public CloseTextBox -.public CloseTextBox2 -.public ConvertStorageItemAtIdxToItem -.public CopyBitsFrom -.public CopyBitsTo -.public CopyNStringFromId -.public CopyProgressInfoFromScratchFrom -.public CopyProgressInfoFromScratchTo -.public CountNbOfItemsInStorage -.public CountNbOfValidItemsInStorage -.public CountNbOfValidItemsInTimeDarknessInStorage .public CreateAdvancedMenu .public CreateAdvancedTextBox -.public CreateAdvancedTextBoxWithArg -.public CreateCollectionMenu .public CreateDebugMenu .public CreateDialogueBox .public CreateOptionsMenu -.public CreateParentMenu .public CreateParentMenuFromStringIds .public CreatePortraitBox -.public CreateScrollBoxMulti -.public CreateScrollBoxSingle .public CreateSimpleMenu .public CreateSimpleMenuFromStringIds .public CreateTeamSelectionMenu .public CreateTextBox -.public CreateTextBoxWithArg -.public DEFAULT_HERO_ID -.public DUNGEON_PTR .public Debug_GetDebugFlag .public Debug_GetLogFlag .public Debug_Print0 .public Debug_SetDebugFlag .public Debug_SetLogFlag -.public DisableIqSkill .public DrawTextInWindow -.public DrawTileGrid -.public DumpScriptVariableValues -.public EnableAllLearnableIqSkills -.public EventFlagBackup -.public EventFlagResume -.public FORBIDDEN_FORGOT_MOVE_LIST .public FemaleToMaleForm -.public FormatMoveStringMore -.public GAME_MODE .public GetActiveRosterIndex .public GetActiveTeamMember -.public GetActualSellPrice -.public GetAdvancedMenuCurrentOption .public GetAdvancedMenuResult -.public GetAdvancedTextBoxFlags2 -.public GetAdventureLogDungeonFloor -.public GetCurrentBagCapacity .public GetDexNumber -.public GetDungeonResultString .public GetEvolutionPossibilities -.public GetExecuteSpecialEpisodeType .public GetHeldButtons .public GetHero .public GetHeroMemberIdx -.public GetInfoGroundMoveset -.public GetIqSkillStringId -.public GetItemAtIdx -.public GetItemCategory -.public GetItemCategoryVeneer .public GetItemMoveId16 .public GetKeyM2NSwitch -.public GetLanguageType -.public GetLearnableIqSkills .public GetMainCharacter1MemberIdx .public GetMainCharacter2MemberIdx .public GetMainCharacter3MemberIdx -.public GetMaxPp -.public GetMoneyCarried -.public GetMonsterGenderVeneer -.public GetMonsterName -.public GetMoveRangeId -.public GetMoveType -.public GetNameRaw .public GetNameString -.public GetNameWithGender -.public GetNbItemsInBag -.public GetNextIqSkill .public GetOptionsMenuResult .public GetOptionsMenuStates .public GetPartner .public GetPartnerMemberIdx -.public GetPerformanceFlagWithChecks -.public GetPpIncrease .public GetPressedButtons -.public GetRank -.public GetRankUpEntry -.public GetReleasedStylus -.public GetRngSeed .public GetSimpleMenuResult -.public GetSpecialEpisodeType -.public GetSpeciesString .public GetStringFromFileVeneer .public GetTeamMember -.public GetTime .public GetType -.public GetTypeStringId .public GetWindow .public HidePortraitBox -.public InitMove .public InitPortraitParams -.public InitPortraitParamsWithMonsterId -.public InitPreprocessorArgs -.public InitScriptVariableValues -.public IqSkillFlagTest -.public Is2TurnsMove .public IsAdvancedMenuActive2 .public IsAdvancedTextBoxActive -.public IsCollectionMenuActive -.public IsCollectionMenuState3 .public IsDebugMenuActive -.public IsDeoxys .public IsDialogueBoxActive -.public IsExclusiveItemIdForMonster -.public IsExperienceLocked -.public IsGummi -.public IsItemInTimeDarkness -.public IsItemValidVeneer .public IsMainCharacter -.public IsMonsterIllegalForMissions .public IsMovesetValidInTimeDarkness -.public IsNot2TurnsMoveOrSketch .public IsOptionsMenuActive .public IsParentMenuActive -.public IsScrollBoxActive .public IsShaymin -.public IsShoppableItem .public IsSimpleMenuActive -.public IsStorableItem -.public IsStorageFull .public IsTeamSelectionMenuActive .public IsTeamSelectionMenuState3 -.public IsThrownItem -.public IsTreasureBox .public IsValidPortrait .public IsValidTeamMember .public KEYBOARD_STRING_IDS -.public LAST_NEW_MOVE -.public LearnMoves .public LoadOverlay -.public LoadScriptVariableValue .public MemAlloc .public MemFree .public MemZero .public MemcpySimple -.public MemsetSimple -.public NOTIFY_NOTE -.public OS_GetLockID .public OverlayIsLoaded -.public PARTNER_TALK_KIND_TABLE -.public PlayAdvancedTextBoxInputSound -.public PlayBgmByIdVeneer .public PlaySeVolumeWrapper -.public PreprocessString .public PreprocessStringFromId -.public Rand32Bit -.public RandInt -.public RandIntSafe -.public ReadItemsFromSave -.public ReadMonsterInfoFromSave -.public ReadStringFromDialogueBox -.public RemoveEmptyItemsInBag -.public ResetGlobalProgress -.public RestoreScriptVariableValues -.public ResumeAdvancedMenu -.public SPECIAL_EPISODE_MAIN_CHARACTERS -.public STATUSES_FULL_DESCRIPTION_STRING_IDS -.public SaveScriptVariableValue .public SaveScriptVariableValueBytes -.public SetActiveInventory -.public SetActiveKecleonShop -.public SetActiveTeam .public SetAdvancedTextBoxField0x1C2 -.public SetAdvancedTextBoxPartialMenu .public SetAdvancedTextBoxState5 -.public SetBothScreensWindowsColor -.public SetCollectionMenuField0x1BC -.public SetCollectionMenuVoidFn -.public SetCollectionMenuWidth .public SetMainTeamName -.public SetPortraitEmotion -.public SetPortraitLayout -.public SetPortraitOffset -.public SetRngSeed +.public SetNotifyNote .public SetSimpleMenuField0x1AC -.public SetTeamSetupHeroAndPartnerOnly -.public SetUnkAdvancedTextBoxFn -.public SetUnkAdvancedTextBoxWindowFn .public ShowDialogueBox .public ShowPortraitInPortraitBox .public ShowStringIdInDialogueBox .public ShowStringInDialogueBox -.public SortItemsInBag -.public SortItemsInStorage -.public StoreDefaultTeamData .public StrcpySimple -.public StringFromId -.public StrncpyName .public StrncpySimple .public StrncpySimpleNoPadSafe .public TEAM_MEMBER_TABLE_PTR -.public TryPointCameraToMonster .public UpdateWindow -.public WriteItemsToSave -.public WriteMonsterInfoToSave .public _0209B08C .public _0209B09C .public _0209B0EC @@ -289,7 +147,6 @@ .public _0209C5D0 .public _0209C5E0 .public _0209C604 -.public _0209C60C .public _0209C618 .public _0209C628 .public _0209C638 @@ -303,108 +160,6 @@ .public _0209C764 .public _0209C798 .public _0209C7B8 -.public _0209C7CC -.public _0209C7D4 -.public _0209C7E4 -.public _0209C7F4 -.public _0209C820 -.public _0209C82C -.public _0209C83C -.public _0209C844 -.public _0209C846 -.public _0209C850 -.public _0209C85C -.public _0209C86C -.public _0209C884 -.public _0209C89C -.public _0209C8A8 -.public _0209C8B8 -.public _0209C8C8 -.public _0209C928 -.public _0209C92C -.public _0209C93C -.public _0209C94C -.public _0209C95C -.public _0209C96C -.public _0209C97C -.public _0209C98C -.public _0209C99C -.public _0209C9AC -.public _0209C9B0 -.public _0209C9CC -.public _0209C9D4 -.public _0209C9DC -.public _0209C9E4 -.public _0209C9F4 -.public _0209C9FC -.public _0209CA08 -.public _0209CA18 -.public _0209CA2C -.public _0209CA3C -.public _0209CA48 -.public _0209CA58 -.public _0209CA68 -.public _0209CA78 -.public _0209CA88 -.public _0209CA98 -.public _0209CAB4 -.public _0209CB0C -.public _0209CB3C -.public _0209CB4C -.public _0209CB6C -.public _0209CB78 -.public _0209CB88 -.public _0209CB98 -.public _0209CBA8 -.public _0209CBB0 -.public _0209CBB8 -.public _0209CBC0 -.public _0209CBC8 -.public _0209CBD0 -.public _0209CBD8 -.public _0209CBE0 -.public _0209CBE8 -.public _0209CC0C -.public _0209CC18 -.public _0209CC28 -.public _0209CC38 -.public _0209CC48 -.public _0209CC60 -.public _0209CC80 -.public _0209CC90 -.public _0209CCA0 -.public _0209CCB0 -.public _0209CCC0 -.public _0209CCD0 -.public _0209CCE0 -.public _0209CD4C -.public _0209CD6C -.public _0209CD84 -.public _0209CD94 -.public _0209CDA4 -.public _0209CDB8 -.public _0209CDD0 -.public _0209CDE0 -.public _0209CDF8 -.public _0209CE10 -.public _0209CE40 -.public _0209CE50 -.public _0209CE54 -.public _0209CE58 -.public _0209CE68 -.public _0209CE78 -.public _0209CE88 -.public _0209CE89 -.public _0209E912 -.public _020A2808 -.public _020A281C -.public _020A2830 -.public _020A2844 -.public _020A2858 -.public _020A286C -.public _020A2880 -.public _020A2894 -.public _020A28A8 .public _020AFDB8 .public _020AFDBC .public _020AFDD0 @@ -415,129 +170,22 @@ .public _020AFE40 .public _020AFE58 .public _020AFE5C -.public _020AFE70 -.public _020AFE74 -.public _020AFE78 -.public _020AFE7C -.public _020AFE8C -.public _020AFE90 -.public _020AFE98 -.public _020AFEA8 -.public _020AFEB4 -.public _020AFEC8 -.public _020AFECC -.public _020AFED0 -.public _020AFED4 -.public _020AFED8 -.public _020AFEDC -.public _020AFEE0 -.public _020AFEE4 -.public _020AFEE8 -.public _020AFEEC -.public _020AFEF4 -.public _020AFF00 -.public _020AFF14 -.public _020AFF38 -.public _020AFF40 -.public _020AFF4C -.public _020AFF54 -.public _020AFF5C -.public _020AFF64 -.public _020AFF68 -.public _020AFF6C .public _020B12A0_JP .public _022AADF8 -.public _022AADFC -.public _022AAE00 -.public _022AAE2A -.public _022AAE2E -.public _022AAE58 -.public _022AAE64 -.public _022AAE68 -.public _022AAE70 -.public _022AAE74 -.public _022AAE78 -.public _022AAEA4 -.public _022AAEA8 -.public _022AAEAC -.public _022AB09C -.public _022AB0A0 -.public _022AB0A1 -.public _022AB0A2 -.public _022AB0A9 -.public _f2d -.public _fsub .public _s32_div_f -.public memcpy .public ov11_022E6E68 -.public ov11_023061CC -.public ov11_023061E4 -.public ov11_02306C64 -.public ov11_02306C9C -.public ov11_0230D000 -.public ov11_0230D220 .public ov11_0230D71C -.public ov11_0230D92C -.public ov11_02310BDC -.public ov11_02310C18 -.public ov29_022E2A78 -.public ov29_022EA62C -.public ov29_023002F0 -.public ov29_02347100 .public sprintf -.public strcat .public strcpy -.public strlen -.public strncmp -.public strncpy -.public sub_02001808 -.public sub_02002580 -.public sub_020027F8 -.public sub_02003B94 -.public sub_02003BC8 .public sub_020063F4 -.public sub_02006498 -.public sub_02006BFC -.public sub_02006C8C -.public sub_0200C5DC -.public sub_0200CABC -.public sub_0200CAD4 -.public sub_0200CAE4 -.public sub_0200D310 -.public sub_0200D65C -.public sub_0200D670 -.public sub_0200FD48 -.public sub_02010044 -.public sub_02010060 -.public sub_02010154 -.public sub_0201077C -.public sub_02010794 -.public sub_020107F4 -.public sub_02012AB8 -.public sub_02013190 -.public sub_020131F0 -.public sub_02013E54 -.public sub_02013F58 -.public sub_02017C50 -.public sub_02017C74 -.public sub_02017C80 -.public sub_0202059C -.public sub_020205C0 .public sub_0202065C .public sub_020236FC .public sub_0202372C .public sub_02024B94 -.public sub_02024D7C .public sub_020251F0 .public sub_02025C7C .public sub_02025D50 -.public sub_02025E84 -.public sub_0202613C -.public sub_020261D4 -.public sub_02026204 .public sub_02026268 -.public sub_020262E0 -.public sub_020264A4 .public sub_020264F8 .public sub_020265A8 .public sub_02027180 @@ -545,27 +193,11 @@ .public sub_0202810C .public sub_0202812C .public sub_020282F4 -.public sub_02028324 .public sub_02028354 .public sub_0202836C -.public sub_020288DC .public sub_020288FC -.public sub_02029F88 -.public sub_02029FBC .public sub_0202A2A4 -.public sub_0202AAE8 -.public sub_0202AB80 .public sub_0202ABB0 -.public sub_0202C1E4 -.public sub_0202C620 -.public sub_0202C654 -.public sub_0202C6D4 -.public sub_0202C748 -.public sub_0202C75C -.public sub_0202D068 -.public sub_0202D0EC -.public sub_0202D134 -.public sub_0202D16C .public sub_0202D59C .public sub_0202DF64 .public sub_0202F16C @@ -575,19 +207,8 @@ .public sub_0202F3F8 .public sub_0202F954 .public sub_0202F9B8 -.public sub_020307EC -.public sub_020308E4 -.public sub_02030908 .public sub_02030940 -.public sub_02030978 .public sub_020309B8 -.public sub_02030A18 -.public sub_02030A50 -.public sub_02030A64 -.public sub_02030A74 -.public sub_02030A90 -.public sub_02030AAC -.public sub_02030EF0 .public sub_0203111C .public sub_0203115C .public sub_0203117C @@ -602,69 +223,25 @@ .public sub_020347F0 .public sub_02034840 .public sub_020348E4 -.public sub_0204B028 -.public sub_0204C9F4 -.public sub_0204CDB8 +.public sub_0203C784 +.public sub_0203C9A0 +.public sub_02048078 +.public sub_0204964C +.public sub_0204AB78 +.public sub_0204AB98 +.public sub_0204AF98 +.public sub_0204AFAC .public sub_0204DA1C -.public sub_0204E154 -.public sub_0204E19C .public sub_0204E210 .public sub_0204E3C8 -.public sub_0204F9B8 -.public sub_02050974 -.public sub_02050990 -.public sub_020509BC -.public sub_02050C10 -.public sub_02050CF8 -.public sub_02050D84 -.public sub_02052C74 -.public sub_02052CD8 -.public sub_02052CE8 -.public sub_02052E2C .public sub_02052FF8 -.public sub_02053568 -.public sub_02053628 -.public sub_02053660 -.public sub_02053A0C .public sub_02053D1C -.public sub_020547C8 -.public sub_020547D8 -.public sub_02054804 .public sub_02054F18 -.public sub_02055B78 -.public sub_02055D4C -.public sub_02056228 .public sub_02056410 .public sub_02056460 .public sub_020564B0 .public sub_020568A4 -.public sub_02056B58 -.public sub_02056BD4 .public sub_02056F60 -.public sub_02058460 .public sub_020584F8 -.public sub_020584FC -.public sub_020597B0 -.public sub_02059A74 .public sub_02059B08 -.public sub_0205A4B4 -.public sub_0205B028 -.public sub_0205B0A0 -.public sub_0205B0B8 -.public sub_0205B478 -.public sub_0205BD9C -.public sub_0205BFB0 -.public sub_0205C75C -.public sub_0205FAB0 -.public sub_0205FC20 -.public sub_0206637C -.public sub_02079094 -.public sub_0207B9EC -.public sub_0208346C -.public sub_0208347C -.public sub_02083A18 -.public sub_02083B00 -.public sub_02083B14 -.public sub_02083B3C -.public sub_02084304 .public vsprintf diff --git a/asm/include/main_0203C774.inc b/asm/include/main_0203C774.inc new file mode 100644 index 00000000..dc9f9b00 --- /dev/null +++ b/asm/include/main_0203C774.inc @@ -0,0 +1,525 @@ +#pragma once +.public AddItemToStorage +.public AddMoneyCarried +.public ApplyLevelUpBoostsToGroundMonster +.public Arm9LoadUnkFieldNa0x2029EC8 +.public Arm9StoreUnkFieldNa0x2029ED8 +.public BAG_ITEMS_PTR_MIRROR +.public CanMonsterUseMove +.public CardBackupError +.public CardPullOutWithStatus +.public ClearAdventureLogStruct +.public ClearWindow +.public CloseAdvancedMenu +.public CloseAdvancedTextBox +.public CloseAdvancedTextBox2 +.public CloseCollectionMenu +.public CloseDialogueBox +.public CloseParentMenu +.public ClosePortraitBox +.public CloseScrollBox +.public CloseSimpleMenu +.public CloseTextBox +.public CloseTextBox2 +.public ConvertStorageItemAtIdxToItem +.public CopyBitsFrom +.public CopyBitsTo +.public CopyNStringFromId +.public CopyProgressInfoFromScratchFrom +.public CopyProgressInfoFromScratchTo +.public CountNbOfItemsInStorage +.public CountNbOfValidItemsInStorage +.public CountNbOfValidItemsInTimeDarknessInStorage +.public CreateAdvancedMenu +.public CreateAdvancedTextBox +.public CreateAdvancedTextBoxWithArg +.public CreateCollectionMenu +.public CreateDialogueBox +.public CreateParentMenu +.public CreateParentMenuFromStringIds +.public CreatePortraitBox +.public CreateScrollBoxMulti +.public CreateScrollBoxSingle +.public CreateSimpleMenu +.public CreateSimpleMenuFromStringIds +.public CreateTextBox +.public CreateTextBoxWithArg +.public DEFAULT_HERO_ID +.public DUNGEON_PTR +.public Debug_GetDebugFlag +.public Debug_Print0 +.public DisableIqSkill +.public DrawTextInWindow +.public DrawTileGrid +.public DumpScriptVariableValues +.public EnableAllLearnableIqSkills +.public EventFlagBackup +.public EventFlagResume +.public FORBIDDEN_FORGOT_MOVE_LIST +.public FormatMoveStringMore +.public GAME_MODE +.public GetActiveTeamMember +.public GetActualSellPrice +.public GetAdvancedMenuCurrentOption +.public GetAdvancedMenuResult +.public GetAdvancedTextBoxFlags2 +.public GetAdventureLogDungeonFloor +.public GetCurrentBagCapacity +.public GetDexNumber +.public GetDungeonResultString +.public GetExecuteSpecialEpisodeType +.public GetHeldButtons +.public GetHero +.public GetHeroMemberIdx +.public GetInfoGroundMoveset +.public GetIqSkillStringId +.public GetItemAtIdx +.public GetItemCategory +.public GetItemCategoryVeneer +.public GetKeyboardStatus +.public GetKeyboardStringResult +.public GetLanguageType +.public GetLearnableIqSkills +.public GetMaxPp +.public GetMoneyCarried +.public GetMonsterGenderVeneer +.public GetMonsterName +.public GetMoveRangeId +.public GetMoveType +.public GetNameRaw +.public GetNameWithGender +.public GetNbItemsInBag +.public GetNextIqSkill +.public GetPartner +.public GetPartnerMemberIdx +.public GetPerformanceFlagWithChecks +.public GetPpIncrease +.public GetPressedButtons +.public GetRank +.public GetRankUpEntry +.public GetReleasedStylus +.public GetRngSeed +.public GetSimpleMenuResult +.public GetSpecialEpisodeType +.public GetSpeciesString +.public GetStringFromFileVeneer +.public GetTeamMember +.public GetTime +.public GetType +.public GetTypeStringId +.public HidePortraitBox +.public InitMove +.public InitPortraitParams +.public InitPortraitParamsWithMonsterId +.public InitPreprocessorArgs +.public InitScriptVariableValues +.public IqSkillFlagTest +.public Is2TurnsMove +.public IsAdvancedMenuActive2 +.public IsAdvancedTextBoxActive +.public IsCollectionMenuActive +.public IsCollectionMenuState3 +.public IsDeoxys +.public IsDialogueBoxActive +.public IsExclusiveItemIdForMonster +.public IsExperienceLocked +.public IsGummi +.public IsItemInTimeDarkness +.public IsItemValidVeneer +.public IsMonsterIllegalForMissions +.public IsNot2TurnsMoveOrSketch +.public IsParentMenuActive +.public IsScrollBoxActive +.public IsShoppableItem +.public IsSimpleMenuActive +.public IsStorableItem +.public IsStorageFull +.public IsThrownItem +.public IsTreasureBox +.public LAST_NEW_MOVE +.public LearnMoves +.public LoadScriptVariableValue +.public MemAlloc +.public MemFree +.public MemZero +.public MemcpySimple +.public MemsetSimple +.public NOTIFY_NOTE +.public OS_GetLockID +.public PARTNER_TALK_KIND_TABLE +.public PlayAdvancedTextBoxInputSound +.public PlayBgmByIdVeneer +.public PlaySeVolumeWrapper +.public PreprocessString +.public PreprocessStringFromId +.public Rand32Bit +.public RandInt +.public RandIntSafe +.public ReadItemsFromSave +.public ReadMonsterInfoFromSave +.public ReadStringFromDialogueBox +.public RemoveEmptyItemsInBag +.public ResetGlobalProgress +.public RestoreScriptVariableValues +.public ResumeAdvancedMenu +.public SPECIAL_EPISODE_MAIN_CHARACTERS +.public STATUSES_FULL_DESCRIPTION_STRING_IDS +.public SaveScriptVariableValue +.public SaveScriptVariableValueBytes +.public SetActiveInventory +.public SetActiveKecleonShop +.public SetActiveTeam +.public SetAdvancedTextBoxField0x1C2 +.public SetAdvancedTextBoxPartialMenu +.public SetAdvancedTextBoxState5 +.public SetBothScreensWindowsColor +.public SetCollectionMenuField0x1BC +.public SetCollectionMenuVoidFn +.public SetCollectionMenuWidth +.public SetPortraitEmotion +.public SetPortraitLayout +.public SetPortraitOffset +.public SetRngSeed +.public SetTeamSetupHeroAndPartnerOnly +.public SetUnkAdvancedTextBoxFn +.public SetUnkAdvancedTextBoxWindowFn +.public ShowDialogueBox +.public ShowKeyboard +.public ShowPortraitInPortraitBox +.public ShowStringIdInDialogueBox +.public ShowStringInDialogueBox +.public SortItemsInBag +.public SortItemsInStorage +.public StoreDefaultTeamData +.public StrcpySimple +.public StringFromId +.public StrncpyName +.public StrncpySimple +.public StrncpySimpleNoPadSafe +.public TEAM_MEMBER_TABLE_PTR +.public TryPointCameraToMonster +.public UpdateWindow +.public WriteItemsToSave +.public WriteMonsterInfoToSave +.public _0209C60C +.public _0209C7CC +.public _0209C7D4 +.public _0209C7E4 +.public _0209C7F4 +.public _0209C820 +.public _0209C82C +.public _0209C83C +.public _0209C844 +.public _0209C846 +.public _0209C850 +.public _0209C85C +.public _0209C86C +.public _0209C884 +.public _0209C89C +.public _0209C8A8 +.public _0209C8B8 +.public _0209C8C8 +.public _0209C928 +.public _0209C92C +.public _0209C93C +.public _0209C94C +.public _0209C95C +.public _0209C96C +.public _0209C97C +.public _0209C98C +.public _0209C99C +.public _0209C9AC +.public _0209C9B0 +.public _0209C9CC +.public _0209C9D4 +.public _0209C9DC +.public _0209C9E4 +.public _0209C9F4 +.public _0209C9FC +.public _0209CA08 +.public _0209CA18 +.public _0209CA2C +.public _0209CA3C +.public _0209CA48 +.public _0209CA58 +.public _0209CA68 +.public _0209CA78 +.public _0209CA88 +.public _0209CA98 +.public _0209CAB4 +.public _0209CB0C +.public _0209CB3C +.public _0209CB4C +.public _0209CB6C +.public _0209CB78 +.public _0209CB88 +.public _0209CB98 +.public _0209CBA8 +.public _0209CBB0 +.public _0209CBB8 +.public _0209CBC0 +.public _0209CBC8 +.public _0209CBD0 +.public _0209CBD8 +.public _0209CBE0 +.public _0209CBE8 +.public _0209CC0C +.public _0209CC18 +.public _0209CC28 +.public _0209CC38 +.public _0209CC48 +.public _0209CC60 +.public _0209CC80 +.public _0209CC90 +.public _0209CCA0 +.public _0209CCB0 +.public _0209CCC0 +.public _0209CCD0 +.public _0209CCE0 +.public _0209CD4C +.public _0209CD6C +.public _0209CD84 +.public _0209CD94 +.public _0209CDA4 +.public _0209CDB8 +.public _0209CDD0 +.public _0209CDE0 +.public _0209CDF8 +.public _0209CE10 +.public _0209CE40 +.public _0209CE50 +.public _0209CE54 +.public _0209CE58 +.public _0209CE68 +.public _0209CE78 +.public _0209CE88 +.public _0209CE89 +.public _0209E912 +.public _020A2808 +.public _020A281C +.public _020A2830 +.public _020A2844 +.public _020A2858 +.public _020A286C +.public _020A2880 +.public _020A2894 +.public _020A28A8 +.public _020AFE5C +.public _020AFE70 +.public _020AFE74 +.public _020AFE78 +.public _020AFE7C +.public _020AFE8C +.public _020AFE90 +.public _020AFE98 +.public _020AFEA8 +.public _020AFEB4 +.public _020AFEC8 +.public _020AFECC +.public _020AFED0 +.public _020AFED4 +.public _020AFED8 +.public _020AFEDC +.public _020AFEE0 +.public _020AFEE4 +.public _020AFEE8 +.public _020AFEEC +.public _020AFEF4 +.public _020AFF00 +.public _020AFF14 +.public _020AFF38 +.public _020AFF40 +.public _020AFF4C +.public _020AFF54 +.public _020AFF5C +.public _020AFF64 +.public _020AFF68 +.public _020AFF6C +.public _022AADFC +.public _022AAE00 +.public _022AAE2A +.public _022AAE2E +.public _022AAE58 +.public _022AAE64 +.public _022AAE68 +.public _022AAE70 +.public _022AAE74 +.public _022AAE78 +.public _022AAEA4 +.public _022AAEA8 +.public _022AAEAC +.public _022AB09C +.public _022AB0A0 +.public _022AB0A1 +.public _022AB0A2 +.public _022AB0A9 +.public _f2d +.public _fsub +.public _s32_div_f +.public memcpy +.public ov11_023061CC +.public ov11_023061E4 +.public ov11_02306C64 +.public ov11_02306C9C +.public ov11_0230D000 +.public ov11_0230D220 +.public ov11_0230D92C +.public ov11_02310BDC +.public ov11_02310C18 +.public ov29_022E2A78 +.public ov29_022EA62C +.public ov29_023002F0 +.public ov29_02347100 +.public strcat +.public strcpy +.public strlen +.public strncmp +.public strncpy +.public sub_02001808 +.public sub_02002580 +.public sub_020027F8 +.public sub_02003B94 +.public sub_02003BC8 +.public sub_020063F4 +.public sub_02006498 +.public sub_02006BFC +.public sub_02006C8C +.public sub_0200C5DC +.public sub_0200CABC +.public sub_0200CAD4 +.public sub_0200CAE4 +.public sub_0200D310 +.public sub_0200D65C +.public sub_0200D670 +.public sub_0200FD48 +.public sub_02010044 +.public sub_02010060 +.public sub_02010154 +.public sub_0201077C +.public sub_02010794 +.public sub_020107F4 +.public sub_02012AB8 +.public sub_02013190 +.public sub_020131F0 +.public sub_02013E54 +.public sub_02013F58 +.public sub_02017C50 +.public sub_02017C74 +.public sub_02017C80 +.public sub_0202059C +.public sub_020205C0 +.public sub_02024D7C +.public sub_02025D50 +.public sub_02025E84 +.public sub_0202613C +.public sub_020261D4 +.public sub_02026204 +.public sub_02026268 +.public sub_020262E0 +.public sub_020264A4 +.public sub_020265A8 +.public sub_02027180 +.public sub_02027B1C +.public sub_0202810C +.public sub_0202812C +.public sub_020282F4 +.public sub_02028324 +.public sub_02028354 +.public sub_0202836C +.public sub_020288DC +.public sub_02029F88 +.public sub_02029FBC +.public sub_0202A2A4 +.public sub_0202AAE8 +.public sub_0202AB80 +.public sub_0202ABB0 +.public sub_0202C1E4 +.public sub_0202C620 +.public sub_0202C654 +.public sub_0202C6D4 +.public sub_0202C748 +.public sub_0202C75C +.public sub_0202D068 +.public sub_0202D0EC +.public sub_0202D134 +.public sub_0202D16C +.public sub_0202F16C +.public sub_0202F2C4 +.public sub_0202F334 +.public sub_0202F954 +.public sub_0202F9B8 +.public sub_020307EC +.public sub_020308E4 +.public sub_02030908 +.public sub_02030940 +.public sub_02030978 +.public sub_02030A18 +.public sub_02030A50 +.public sub_02030A64 +.public sub_02030A74 +.public sub_02030A90 +.public sub_02030AAC +.public sub_02030EF0 +.public sub_020348E4 +.public sub_02034974 +.public sub_02034A38 +.public sub_02037468 +.public sub_0203909C +.public sub_02039218 +.public sub_0203931C +.public sub_0204B028 +.public sub_0204C9F4 +.public sub_0204CDB8 +.public sub_0204E154 +.public sub_0204E19C +.public sub_0204F9B8 +.public sub_02050974 +.public sub_02050990 +.public sub_020509BC +.public sub_02050C10 +.public sub_02050CF8 +.public sub_02050D84 +.public sub_02052C74 +.public sub_02052CD8 +.public sub_02052CE8 +.public sub_02052E2C +.public sub_02053568 +.public sub_02053628 +.public sub_02053660 +.public sub_02053A0C +.public sub_020547C8 +.public sub_020547D8 +.public sub_02054804 +.public sub_02055B78 +.public sub_02055D4C +.public sub_02056228 +.public sub_02056410 +.public sub_020564B0 +.public sub_02056B58 +.public sub_02056BD4 +.public sub_02056F60 +.public sub_02058460 +.public sub_020584FC +.public sub_020597B0 +.public sub_02059A74 +.public sub_0205A4B4 +.public sub_0205B028 +.public sub_0205B0A0 +.public sub_0205B0B8 +.public sub_0205B478 +.public sub_0205BD9C +.public sub_0205BFB0 +.public sub_0205C75C +.public sub_0205FAB0 +.public sub_0205FC20 +.public sub_0206637C +.public sub_02079094 +.public sub_0207B9EC +.public sub_0208346C +.public sub_0208347C +.public sub_02083A18 +.public sub_02083B00 +.public sub_02083B14 +.public sub_02083B3C +.public sub_02084304 +.public vsprintf diff --git a/asm/main_02034974.s b/asm/main_02034974.s index 182a7d9f..f9e545da 100644 --- a/asm/main_02034974.s +++ b/asm/main_02034974.s @@ -10170,18093 +10170,3 @@ sub_0203C73C: ; 0x0203C73C .align 2, 0 _0203C75C: .word _020AFE5C arm_func_end sub_0203C73C - - arm_func_start sub_0203C760 -sub_0203C760: ; 0x0203C760 - ldr r0, _0203C770 ; =_020AFE5C - mov r1, #0 - str r1, [r0, #8] - bx lr - .align 2, 0 -_0203C770: .word _020AFE5C - arm_func_end sub_0203C760 - - arm_func_start sub_0203C774 -sub_0203C774: ; 0x0203C774 - cmp r0, #0 - movne r0, #7 - moveq r0, #8 - bx lr - arm_func_end sub_0203C774 - - arm_func_start sub_0203C784 -sub_0203C784: ; 0x0203C784 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #0x54 - mov r4, r0 - bl sub_02027B1C - ldr r0, _0203C7DC ; =_020AFE5C - ldr r1, _0203C7E0 ; =_0209C60C - ldr r0, [r0, #0xc] - mov r0, r0, lsl #1 - ldrh r0, [r1, r0] - bl StringFromId - str r0, [sp, #0x3c] - add ip, sp, #4 -#ifdef JAPAN - ldr r3, _0203CBC8 ; =0x000023B4 -#endif - mov r0, r4 - mov r1, #0xa - mov r2, #2 -#ifndef JAPAN - mov r3, #0x30c -#endif - str ip, [sp] - bl sub_020262E0 - mov r0, r4 - bl UpdateWindow - add sp, sp, #0x54 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_0203C7DC: .word _020AFE5C -_0203C7E0: .word _0209C60C -#ifdef JAPAN -_0203CBC8: .word 0x000023B4 -#endif - arm_func_end sub_0203C784 - - arm_func_start sub_0203C7E4 -sub_0203C7E4: ; 0x0203C7E4 - stmdb sp!, {r4, lr} - ldr r1, _0203C870 ; =_020AFE70 - mov r4, r0 - ldr r0, [r1] - cmp r0, #0 - bne _0203C810 - mov r0, #0x10 - mov r1, #8 - bl MemAlloc - ldr r1, _0203C870 ; =_020AFE70 - str r0, [r1] -_0203C810: - ldr r1, _0203C870 ; =_020AFE70 - mvn r3, #0 - ldr r2, [r1] - mov r0, r4 - strh r3, [r2, #6] - ldr r1, [r1] - strh r3, [r1, #4] - bl sub_0203C9A0 - ldr r0, _0203C870 ; =_020AFE70 - mvn r2, #1 - ldr r1, [r0] - strb r2, [r1] - ldr r1, [r0] - strb r2, [r1, #1] - ldr r0, [r0] - strb r2, [r0, #2] - bl sub_0203C984 - ldr r0, _0203C870 ; =_020AFE70 - mov r2, #0 - ldr r1, [r0] - strb r2, [r1, #0xa] - ldr r0, [r0] - str r2, [r0, #0xc] - ldmia sp!, {r4, pc} - .align 2, 0 -_0203C870: .word _020AFE70 - arm_func_end sub_0203C7E4 - - arm_func_start sub_0203C874 -sub_0203C874: ; 0x0203C874 - ldr r0, _0203C8DC ; =_020AFE70 - mov r2, #1 - ldr r1, [r0] - strb r2, [r1, #0xa] - ldr r1, [r0] - ldr r0, [r1, #0xc] - cmp r0, #4 - addls pc, pc, r0, lsl #2 - bx lr -_0203C898: ; jump table - b _0203C8AC ; case 0 - b _0203C8B8 ; case 1 - b _0203C8C4 ; case 2 - bx lr ; case 3 - b _0203C8D0 ; case 4 -_0203C8AC: - mov r0, #7 - str r0, [r1, #0xc] - bx lr -_0203C8B8: - mov r0, #7 - str r0, [r1, #0xc] - bx lr -_0203C8C4: - mov r0, #7 - str r0, [r1, #0xc] - bx lr -_0203C8D0: - mov r0, #5 - str r0, [r1, #0xc] - bx lr - .align 2, 0 -_0203C8DC: .word _020AFE70 - arm_func_end sub_0203C874 - - arm_func_start sub_0203C8E0 -sub_0203C8E0: ; 0x0203C8E0 - ldr r0, _0203C90C ; =_020AFE70 - ldr r0, [r0] - cmp r0, #0 - moveq r0, #0 - bxeq lr - ldr r0, [r0, #0xc] - cmp r0, #0xa - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_0203C90C: .word _020AFE70 - arm_func_end sub_0203C8E0 - - arm_func_start sub_0203C910 -sub_0203C910: ; 0x0203C910 - ldr r0, _0203C93C ; =_020AFE70 - ldr r0, [r0] - cmp r0, #0 - moveq r0, #0 - bxeq lr - ldr r0, [r0, #0xc] - cmp r0, #4 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_0203C93C: .word _020AFE70 - arm_func_end sub_0203C910 - - arm_func_start sub_0203C940 -sub_0203C940: ; 0x0203C940 - stmdb sp!, {r3, lr} - ldr r0, _0203C980 ; =_020AFE70 - ldr r0, [r0] - cmp r0, #0 - moveq r0, #1 - ldmeqia sp!, {r3, pc} - ldr r1, [r0, #0xc] - cmp r1, #0xa - movne r0, #0 - ldmneia sp!, {r3, pc} - bl MemFree - ldr r0, _0203C980 ; =_020AFE70 - mov r1, #0 - str r1, [r0] - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0203C980: .word _020AFE70 - arm_func_end sub_0203C940 - - arm_func_start sub_0203C984 -sub_0203C984: ; 0x0203C984 - ldr r0, _0203C99C ; =_020AFE70 - ldr r1, [r0] - cmp r1, #0 - movne r0, #0 - strneh r0, [r1, #8] - bx lr - .align 2, 0 -_0203C99C: .word _020AFE70 - arm_func_end sub_0203C984 - - arm_func_start sub_0203C9A0 -sub_0203C9A0: ; 0x0203C9A0 - ldr r1, _0203C9C0 ; =_020AFE70 - ldr r2, [r1] - ldrsh r1, [r2, #4] - cmp r0, r1 - moveq r0, #0 - strneh r0, [r2, #4] - movne r0, #1 - bx lr - .align 2, 0 -_0203C9C0: .word _020AFE70 - arm_func_end sub_0203C9A0 - - arm_func_start sub_0203C9C4 -sub_0203C9C4: ; 0x0203C9C4 - ldr r0, _0203C9E0 ; =_020AFE70 - mvn r2, #0 - ldr r1, [r0] - strh r2, [r1, #6] - ldr r0, [r0] - strh r2, [r0, #4] - bx lr - .align 2, 0 -_0203C9E0: .word _020AFE70 - arm_func_end sub_0203C9C4 - - arm_func_start sub_0203C9E4 -sub_0203C9E4: ; 0x0203C9E4 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x2c - ldr r0, _0203CA38 ; =_020AFE70 - ldr r5, [r0] - cmp r5, #0 - beq _0203CA30 - ldr r4, _0203CA3C ; =_0209C7F4 - add lr, sp, #0 - mov ip, #2 -_0203CA08: - ldmia r4!, {r0, r1, r2, r3} - stmia lr!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _0203CA08 - ldmia r4, {r0, r1, r2} - stmia lr, {r0, r1, r2} - ldr r1, [r5, #0xc] - add r0, sp, #0 - ldr r0, [r0, r1, lsl #2] - blx r0 -_0203CA30: - add sp, sp, #0x2c - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_0203CA38: .word _020AFE70 -_0203CA3C: .word _0209C7F4 - arm_func_end sub_0203C9E4 - - arm_func_start sub_0203CA40 -sub_0203CA40: ; 0x0203CA40 - stmdb sp!, {r3, lr} - bl ov11_0230D220 - cmp r0, #0 - ldmneia sp!, {r3, pc} - bl ov11_0230D92C - ldr r0, _0203CA68 ; =_020AFE70 - mov r1, #1 - ldr r0, [r0] - str r1, [r0, #0xc] - ldmia sp!, {r3, pc} - .align 2, 0 -_0203CA68: .word _020AFE70 - arm_func_end sub_0203CA40 - - arm_func_start sub_0203CA6C -sub_0203CA6C: ; 0x0203CA6C - stmdb sp!, {r3, lr} - bl ov11_0230D220 - cmp r0, #0 - ldreq r0, _0203CA8C ; =_020AFE70 - moveq r1, #2 - ldreq r0, [r0] - streq r1, [r0, #0xc] - ldmia sp!, {r3, pc} - .align 2, 0 -_0203CA8C: .word _020AFE70 - arm_func_end sub_0203CA6C - - arm_func_start sub_0203CA90 -sub_0203CA90: ; 0x0203CA90 - stmdb sp!, {r3, lr} - bl ov11_0230D220 - cmp r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _0203CAC8 ; =_020AFE70 - ldr r0, [r0] - ldrsh r0, [r0, #4] - bl sub_0203CCD8 - bl ov11_02310C18 - ldr r0, _0203CAC8 ; =_020AFE70 - mov r1, #3 - ldr r0, [r0] - str r1, [r0, #0xc] - ldmia sp!, {r3, pc} - .align 2, 0 -_0203CAC8: .word _020AFE70 - arm_func_end sub_0203CA90 - - arm_func_start sub_0203CACC -sub_0203CACC: ; 0x0203CACC - stmdb sp!, {r3, lr} - bl ov11_0230D220 - cmp r0, #0 - ldreq r0, _0203CAEC ; =_020AFE70 - moveq r1, #4 - ldreq r0, [r0] - streq r1, [r0, #0xc] - ldmia sp!, {r3, pc} - .align 2, 0 -_0203CAEC: .word _020AFE70 - arm_func_end sub_0203CACC - - arm_func_start sub_0203CAF0 -sub_0203CAF0: ; 0x0203CAF0 - stmdb sp!, {r3, lr} - ldr r0, _0203CB54 ; =_020AFE70 - ldr r2, [r0] - ldrb r1, [r2, #0xa] - cmp r1, #0 - movne r0, #5 - strne r0, [r2, #0xc] - ldmneia sp!, {r3, pc} - ldrh r1, [r2, #8] - add r1, r1, #1 - strh r1, [r2, #8] - ldr r3, [r0] - ldrh r1, [r3, #8] - cmp r1, #0x1e - ldmloia sp!, {r3, pc} - ldrsh r2, [r3, #4] - ldrsh r1, [r3, #6] - cmp r2, r1 - ldmeqia sp!, {r3, pc} - mov r1, #0 - strh r1, [r3, #8] - ldr r0, [r0] - ldrsh r0, [r0, #4] - bl sub_0203CCD8 - ldmia sp!, {r3, pc} - .align 2, 0 -_0203CB54: .word _020AFE70 - arm_func_end sub_0203CAF0 - - arm_func_start sub_0203CB58 -sub_0203CB58: ; 0x0203CB58 - stmdb sp!, {r3, lr} - bl ov11_0230D220 - cmp r0, #0 - ldmneia sp!, {r3, pc} - bl ov11_0230D92C - ldr r0, _0203CB80 ; =_020AFE70 - mov r1, #6 - ldr r0, [r0] - str r1, [r0, #0xc] - ldmia sp!, {r3, pc} - .align 2, 0 -_0203CB80: .word _020AFE70 - arm_func_end sub_0203CB58 - - arm_func_start sub_0203CB84 -sub_0203CB84: ; 0x0203CB84 - stmdb sp!, {r3, lr} - bl ov11_0230D220 - cmp r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _0203CC5C ; =_020AFE70 - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0] - cmp r0, r1 - beq _0203CBD0 - bl HidePortraitBox - ldr r0, _0203CC5C ; =_020AFE70 - ldr r0, [r0] - ldrsb r0, [r0] - bl ClosePortraitBox - ldr r0, _0203CC5C ; =_020AFE70 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0] -_0203CBD0: - ldr r0, _0203CC5C ; =_020AFE70 - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0, #2] - cmp r0, r1 - beq _0203CC0C - bl sub_0202F954 - ldr r0, _0203CC5C ; =_020AFE70 - ldr r0, [r0] - ldrsb r0, [r0, #2] - bl CloseTextBox - ldr r0, _0203CC5C ; =_020AFE70 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #2] -_0203CC0C: - ldr r0, _0203CC5C ; =_020AFE70 - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0, #1] - cmp r0, r1 - beq _0203CC48 - bl sub_0202F954 - ldr r0, _0203CC5C ; =_020AFE70 - ldr r0, [r0] - ldrsb r0, [r0, #1] - bl CloseTextBox - ldr r0, _0203CC5C ; =_020AFE70 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #1] -_0203CC48: - ldr r0, _0203CC5C ; =_020AFE70 - mov r1, #0xa - ldr r0, [r0] - str r1, [r0, #0xc] - ldmia sp!, {r3, pc} - .align 2, 0 -_0203CC5C: .word _020AFE70 - arm_func_end sub_0203CB84 - - arm_func_start sub_0203CC60 -sub_0203CC60: ; 0x0203CC60 - stmdb sp!, {r3, lr} - bl ov11_0230D220 - cmp r0, #0 - ldreq r0, _0203CC80 ; =_020AFE70 - moveq r1, #0xa - ldreq r0, [r0] - streq r1, [r0, #0xc] - ldmia sp!, {r3, pc} - .align 2, 0 -_0203CC80: .word _020AFE70 - arm_func_end sub_0203CC60 - - arm_func_start sub_0203CC84 -sub_0203CC84: ; 0x0203CC84 - stmdb sp!, {r3, lr} - bl ov11_0230D220 - cmp r0, #0 - ldmneia sp!, {r3, pc} - bl ov11_0230D000 - ldr r0, _0203CCAC ; =_020AFE70 - mov r1, #9 - ldr r0, [r0] - str r1, [r0, #0xc] - ldmia sp!, {r3, pc} - .align 2, 0 -_0203CCAC: .word _020AFE70 - arm_func_end sub_0203CC84 - - arm_func_start sub_0203CCB0 -sub_0203CCB0: ; 0x0203CCB0 - stmdb sp!, {r3, lr} - bl ov11_0230D220 - cmp r0, #0 - ldreq r0, _0203CCD0 ; =_020AFE70 - moveq r1, #0xa - ldreq r0, [r0] - streq r1, [r0, #0xc] - ldmia sp!, {r3, pc} - .align 2, 0 -_0203CCD0: .word _020AFE70 - arm_func_end sub_0203CCB0 - - arm_func_start sub_0203CCD4 -sub_0203CCD4: ; 0x0203CCD4 - bx lr - arm_func_end sub_0203CCD4 - - arm_func_start sub_0203CCD8 -sub_0203CCD8: ; 0x0203CCD8 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r1, _0203CE00 ; =TEAM_MEMBER_TABLE_PTR - ldr r2, _0203CE04 ; =_020AFE70 - ldr r4, [r1] - ldr r3, [r2] - mov r1, #0x44 - strh r0, [r3, #6] - ldr r3, [r2] - sub r2, r1, #0x46 - ldrsb r3, [r3] - smlabb r4, r0, r1, r4 - cmp r3, r2 - bne _0203CD2C - mov r0, #1 - mov r1, #3 - mov r2, #0 - bl CreatePortraitBox - ldr r1, _0203CE04 ; =_020AFE70 - ldr r1, [r1] - strb r0, [r1] -_0203CD2C: - ldr r1, _0203CE04 ; =_020AFE70 - mvn r0, #1 - ldr r1, [r1] - ldrsb r1, [r1, #1] - cmp r1, r0 - bne _0203CD5C - ldr r0, _0203CE08 ; =_0209C7E4 - ldr r1, _0203CE0C ; =sub_0203CE1C - bl CreateTextBox - ldr r1, _0203CE04 ; =_020AFE70 - ldr r1, [r1] - strb r0, [r1, #1] -_0203CD5C: - ldr r1, _0203CE04 ; =_020AFE70 - mvn r0, #1 - ldr r1, [r1] - ldrsb r1, [r1, #2] - cmp r1, r0 - bne _0203CD8C - ldr r0, _0203CE10 ; =_0209C7D4 - ldr r1, _0203CE14 ; =sub_0203CFCC - bl CreateTextBox - ldr r1, _0203CE04 ; =_020AFE70 - ldr r1, [r1] - strb r0, [r1, #2] -_0203CD8C: - add r0, sp, #0 - bl InitPortraitParams - ldrsh r1, [r4, #4] - add r0, sp, #0 - bl InitPortraitParamsWithMonsterId - add r0, sp, #0 - mov r1, #2 - bl SetPortraitLayout - ldr r1, _0203CE18 ; =_0209C7CC - add r0, sp, #0 - bl SetPortraitOffset - add r0, sp, #0 - mov r1, #0 - bl SetPortraitEmotion - ldr r0, _0203CE04 ; =_020AFE70 - add r1, sp, #0 - ldr r0, [r0] - ldrsb r0, [r0] - bl ShowPortraitInPortraitBox - ldr r0, _0203CE04 ; =_020AFE70 - ldr r0, [r0] - ldrsb r0, [r0, #1] - bl sub_0202F9B8 - ldr r0, _0203CE04 ; =_020AFE70 - ldr r0, [r0] - ldrsb r0, [r0, #2] - bl sub_0202F9B8 - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_0203CE00: .word TEAM_MEMBER_TABLE_PTR -_0203CE04: .word _020AFE70 -_0203CE08: .word _0209C7E4 -_0203CE0C: .word sub_0203CE1C -_0203CE10: .word _0209C7D4 -_0203CE14: .word sub_0203CFCC -_0203CE18: .word _0209C7CC - arm_func_end sub_0203CCD8 - - arm_func_start sub_0203CE1C -sub_0203CE1C: ; 0x0203CE1C - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #0x1d4 - mov r5, r0 - mvn r1, #1 - cmp r5, r1 - beq _0203CF84 - ldr r1, _0203CF8C ; =_020AFE70 - ldr r2, _0203CF90 ; =TEAM_MEMBER_TABLE_PTR - ldr r1, [r1] - ldr r3, [r2] - ldrsh r2, [r1, #6] - mov r1, #0x44 - smlabb r4, r2, r1, r3 - bl ClearWindow - ldrsh r0, [r4, #4] - bl GetDexNumber - str r0, [sp, #0xa8] - add r1, sp, #0x84 - str r1, [sp] - ldr r2, _0203CF94 ; =_0209C820 - ldr r3, _0203CF98 ; =0x0000C402 - add r0, sp, #0xd4 - mov r1, #0x100 - bl PreprocessString - mov r0, r5 - mov r1, #0x20 - mov r2, #0 - add r3, sp, #0xd4 - bl DrawTextInWindow - ldr r0, _0203CF8C ; =_020AFE70 - ldr r0, [r0] - ldrsh r0, [r0, #6] - bl sub_02056410 - cmp r0, #0 - beq _0203CEC8 - ldr r0, _0203CF8C ; =_020AFE70 - ldr r0, [r0] - ldrsh r0, [r0, #6] - bl sub_020564B0 - cmp r0, #0 - movne r0, #0x59 - moveq r0, #0x46 - b _0203CEE4 -_0203CEC8: - ldr r0, _0203CF8C ; =_020AFE70 - ldr r0, [r0] - ldrsh r0, [r0, #6] - bl sub_02056F60 - cmp r0, #0 - movne r0, #0x44 - moveq r0, #0x57 -_0203CEE4: - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 - add r0, sp, #0xd4 - add r1, r4, #0x3a - mov r2, #0xa - bl StrncpySimpleNoPadSafe - ldr r1, _0203CF9C ; =_0209C82C - add r0, sp, #0x44 - add r3, sp, #0xd4 - mov r2, r6 - bl SprintfStatic__0203CFA4 - ldrsh r1, [r4, #4] - add r0, sp, #0xd4 - bl GetSpeciesString - ldr r1, _0203CF9C ; =_0209C82C - add r0, sp, #4 - mov r2, #0x4b - add r3, sp, #0xd4 - bl SprintfStatic__0203CFA4 - ldr r1, _0203CFA0 ; =_0209C83C - add r0, sp, #0xd4 - add r2, sp, #0x44 - add r3, sp, #4 - bl SprintfStatic__0203CFA4 - mov r0, r5 - mov r1, #0x4c - mov r2, #0 - add r3, sp, #0xd4 - bl DrawTextInWindow - ldrsh r1, [r4, #4] - add r0, sp, #0xd4 - orr r1, r1, #0x10000 - bl sub_02024D7C - mov r0, r5 - mov r1, #0xd0 - mov r2, #0 - add r3, sp, #0xd4 - bl DrawTextInWindow - mov r0, r5 - bl UpdateWindow -_0203CF84: - add sp, sp, #0x1d4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_0203CF8C: .word _020AFE70 -_0203CF90: .word TEAM_MEMBER_TABLE_PTR -_0203CF94: .word _0209C820 -_0203CF98: .word 0x0000C402 -_0203CF9C: .word _0209C82C -_0203CFA0: .word _0209C83C - arm_func_end sub_0203CE1C - - arm_func_start SprintfStatic__0203CFA4 -SprintfStatic__0203CFA4: ; 0x0203CFA4 - 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__0203CFA4 - - arm_func_start sub_0203CFCC -sub_0203CFCC: ; 0x0203CFCC - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #0xcc - sub sp, sp, #0x400 - mov r5, #4 - mov r6, r0 - sub r0, r5, #6 - cmp r6, r0 - beq _0203D3F4 - ldr r1, _0203D400 ; =_020AFE70 - add r0, sp, #4 - ldr r1, [r1] - ldrsh r1, [r1, #6] - bl sub_0205B028 - ldr r0, _0203D400 ; =_020AFE70 - ldr r1, _0203D404 ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - ldr r3, [r1] - ldrsh r2, [r0, #6] - mov r1, #0x44 - mov r0, r6 - smlabb r4, r2, r1, r3 - bl ClearWindow - ldrsh r0, [sp, #4] - mov r1, #0 - bl GetType - mov r8, r0 - ldrsh r0, [sp, #4] - mov r1, #1 - bl GetType - mov r1, r5 - mov r7, r0 - ldr r3, _0203D408 ; =0x00000976 - mov r0, r6 - mov r2, r1 - bl sub_02026268 - mov r0, r8 - bl GetTypeStringId - mov r3, r0 - mov r0, r6 - mov r1, #0x38 - mov r2, r5 - bl sub_02026268 - cmp r7, #0 - beq _0203D098 - mov r0, r7 - bl GetTypeStringId - mov r3, r0 - mov r0, r6 - mov r1, #0x68 - mov r2, r5 - bl sub_02026268 -_0203D098: - add r0, r5, #0xc - mov r1, r0, lsl #0x10 - ldr r2, [sp, #0x30] - ldr r0, _0203D40C ; =0x00000977 - str r2, [sp, #0xa0] - mov r5, r1, asr #0x10 - bl StringFromId - mov r2, r0 - add ip, sp, #0x7c - add r0, sp, #0xcc - mov r1, #0x400 - mov r3, #0 - str ip, [sp] - bl PreprocessString - add r3, sp, #0xcc - mov r0, r6 - mov r1, #4 - mov r2, r5 - bl DrawTextInWindow - add r0, r5, #0xc - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - ldr r0, [sp, #0x2c] - ldr r1, [sp, #0x28] - str r0, [sp, #0xa4] - ldr r0, _0203D410 ; =0x00000978 - str r1, [sp, #0xa0] - bl StringFromId - add r1, sp, #0x7c - mov r2, r0 - str r1, [sp] - add r0, sp, #0xcc - mov r1, #0x400 - mov r3, #0 - bl PreprocessString - mov r0, r6 - mov r1, #4 - mov r2, r5 - add r3, sp, #0xcc - bl DrawTextInWindow - add r0, r5, #0xc - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - ldr r0, _0203D414 ; =0x00000979 - bl StringFromId - add r1, sp, #0x7c - mov r2, r0 - str r1, [sp] - add r0, sp, #0xcc - mov r1, #0x400 - mov r3, #0 - bl PreprocessString - mov r0, r6 - mov r1, #4 - mov r2, r5 - add r3, sp, #0xcc - bl DrawTextInWindow - ldrb r2, [sp, #0x38] - ldrb r1, [sp, #0x3d] - ldr r0, _0203D418 ; =0x0000097B - str r2, [sp, #0xa0] - cmp r1, #0 - addne r1, r2, r1 - addne r0, r0, #1 - strne r1, [sp, #0xa0] - bl StringFromId - mov r2, r0 - add ip, sp, #0x7c - add r0, sp, #0xcc - mov r1, #0x400 - mov r3, #0 - str ip, [sp] - bl PreprocessString - add r3, sp, #0xcc - mov r0, r6 - mov r2, r5 - mov r1, #4 - bl DrawTextInWindow - ldrb r2, [sp, #0x3a] - ldrb r1, [sp, #0x3f] - ldr r0, _0203D41C ; =0x0000097F - str r2, [sp, #0xa0] - cmp r1, #0 -#ifdef JAPAN - addne r1, r2, r1 - strne r1, [sp, #0xa0] - addne r0, r0, #1 -#else - addne r0, r2, r1 - strne r0, [sp, #0xa0] - movne r0, #0x980 -#endif - bl StringFromId - mov r2, r0 - add ip, sp, #0x7c - add r0, sp, #0xcc - mov r1, #0x400 - mov r3, #0 - str ip, [sp] - bl PreprocessString - add r3, sp, #0xcc - mov r0, r6 - mov r2, r5 - mov r1, #4 - bl DrawTextInWindow - add r0, r5, #0xc - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - ldr r0, _0203D420 ; =0x0000097A - bl StringFromId - add r1, sp, #0x7c - mov r2, r0 - str r1, [sp] - add r0, sp, #0xcc - mov r1, #0x400 - mov r3, #0 - bl PreprocessString - mov r0, r6 - mov r1, #4 - mov r2, r5 - add r3, sp, #0xcc - bl DrawTextInWindow - ldrb r2, [sp, #0x39] - ldrb r1, [sp, #0x3e] - ldr r0, _0203D424 ; =0x0000097D - str r2, [sp, #0xa0] - cmp r1, #0 - addne r1, r2, r1 - addne r0, r0, #1 - strne r1, [sp, #0xa0] - bl StringFromId - mov r2, r0 - add ip, sp, #0x7c - add r0, sp, #0xcc - mov r1, #0x400 - mov r3, #0 - str ip, [sp] - bl PreprocessString - add r3, sp, #0xcc - mov r0, r6 - mov r2, r5 - mov r1, #4 - bl DrawTextInWindow - ldrb r2, [sp, #0x3b] - ldrb r1, [sp, #0x40] - ldr r0, _0203D428 ; =0x00000981 - str r2, [sp, #0xa0] - cmp r1, #0 - addne r1, r2, r1 - addne r0, r0, #1 - strne r1, [sp, #0xa0] - bl StringFromId - mov r2, r0 - add ip, sp, #0x7c - add r0, sp, #0xcc - mov r1, #0x400 - mov r3, #0 - str ip, [sp] - bl PreprocessString - add r3, sp, #0xcc - mov r0, r6 - mov r2, r5 - mov r1, #4 - bl DrawTextInWindow - ldrsh r0, [sp, #0x42] - mov r1, #0xa - str r0, [sp, #0xa0] - bl _s32_div_f - mov r0, r0, lsl #0x10 - movs r0, r0, asr #0x10 - movmi r0, #0 - bmi _0203D338 - cmp r0, #0x63 - movge r0, #0x63 -_0203D338: - bl sub_0205B0A0 - str r0, [sp, #0xb4] - ldr r0, _0203D42C ; =0x00000983 - bl StringFromId - add r1, sp, #0x7c - mov r2, r0 - str r1, [sp] - add r0, sp, #0xcc - mov r1, #0x400 - mov r3, #0 - bl PreprocessString - add r0, r5, #0xc - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - mov r0, r6 - mov r1, #4 - mov r2, r5 - add r3, sp, #0xcc - bl DrawTextInWindow - ldrsh r0, [r4, #4] - ldrsh r1, [sp, #0x42] - bl GetNextIqSkill - cmp r0, #0 - add r4, sp, #0x7c - mov r1, #0x400 - bne _0203D3B8 - ldr r2, _0203D430 ; =0x00000986 - add r0, sp, #0xcc - mov r3, #0 - str r4, [sp] - bl PreprocessStringFromId - b _0203D3D0 -_0203D3B8: - ldr r2, _0203D434 ; =0x00000985 - str r0, [sp, #0x8c] - add r0, sp, #0xcc - mov r3, #0 - str r4, [sp] - bl PreprocessStringFromId -_0203D3D0: - add r0, r5, #0xc - mov r1, r0, lsl #0x10 - mov r2, r1, asr #0x10 - add r3, sp, #0xcc - mov r0, r6 - mov r1, #4 - bl DrawTextInWindow - mov r0, r6 - bl UpdateWindow -_0203D3F4: - add sp, sp, #0xcc - add sp, sp, #0x400 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -#define SUB_0203CFCC_OFFSET 0x19D0 -#else -#define SUB_0203CFCC_OFFSET 0 -#endif -_0203D400: .word _020AFE70 -_0203D404: .word TEAM_MEMBER_TABLE_PTR -_0203D408: .word 0x00000976 + SUB_0203CFCC_OFFSET -_0203D40C: .word 0x00000977 + SUB_0203CFCC_OFFSET -_0203D410: .word 0x00000978 + SUB_0203CFCC_OFFSET -_0203D414: .word 0x00000979 + SUB_0203CFCC_OFFSET -_0203D418: .word 0x0000097B + SUB_0203CFCC_OFFSET -_0203D41C: .word 0x0000097F + SUB_0203CFCC_OFFSET -_0203D420: .word 0x0000097A + SUB_0203CFCC_OFFSET -_0203D424: .word 0x0000097D + SUB_0203CFCC_OFFSET -_0203D428: .word 0x00000981 + SUB_0203CFCC_OFFSET -_0203D42C: .word 0x00000983 + SUB_0203CFCC_OFFSET -_0203D430: .word 0x00000986 + SUB_0203CFCC_OFFSET -_0203D434: .word 0x00000985 + SUB_0203CFCC_OFFSET - arm_func_end sub_0203CFCC - - arm_func_start sub_0203D438 -sub_0203D438: ; 0x0203D438 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r0 - mov r5, r1 - mov r0, #0x3c0 - mov r1, #8 - mov r4, r2 - bl MemAlloc - ldr r2, _0203D534 ; =_020AFE74 - mov r1, #0x3c0 - str r0, [r2] - bl MemZero - ldr r0, _0203D534 ; =_020AFE74 - mov ip, #2 - ldr r7, [r0] - add lr, r7, #0x14 -_0203D474: - ldmia r6!, {r0, r1, r2, r3} - stmia lr!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _0203D474 - ldmia r6, {r0, r1, r2} - stmia lr, {r0, r1, r2} - mov r1, #0 - ldr r0, _0203D534 ; =_020AFE74 - str r1, [r7, #0x10] - ldr r1, [r0] - str r5, [r1, #8] - ldr r1, [r0] - str r4, [r1, #0xe4] - ldr r0, [r0] - add r0, r0, #0x8c - bl InitPreprocessorArgs - ldr r0, _0203D534 ; =_020AFE74 - mov r2, #0x70000 - ldr r1, [r0] - str r2, [r1, #0xd8] - ldr r2, [r0] - ldrsh r1, [r2, #0x14] - str r1, [r2, #0x8c] - ldr r0, [r0] - add r0, r0, #0x190 - bl InitPortraitParams - ldr r0, _0203D534 ; =_020AFE74 - ldr r0, [r0] - ldrsh r1, [r0, #0x14] - cmp r1, #0 - beq _0203D4F8 - add r0, r0, #0x190 - bl InitPortraitParamsWithMonsterId -_0203D4F8: - ldr r1, _0203D534 ; =_020AFE74 - mvn r4, #1 - ldr r0, [r1] - mov r3, #0 - strb r4, [r0, #4] - ldr r2, [r1] - mov r0, #1 - strb r4, [r2, #5] - ldr r2, [r1] - strb r4, [r2, #6] - ldr r2, [r1] - str r3, [r2] - ldr r1, [r1] - strb r4, [r1, #0x1a0] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0203D534: .word _020AFE74 - arm_func_end sub_0203D438 - - arm_func_start sub_0203D538 -sub_0203D538: ; 0x0203D538 -#ifdef JAPAN -#define SUB_0203D538_STACK_OFFSET -6 -#define SUB_0203D538_STACK_OFFSET_2 -8 -#else -#define SUB_0203D538_STACK_OFFSET 0 -#define SUB_0203D538_STACK_OFFSET_2 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x11c + SUB_0203D538_STACK_OFFSET_2 - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r4, [r1] - ldr r0, [r4] - cmp r0, #0x4c - addls pc, pc, r0, lsl #2 - b _0203EF9C -_0203D558: ; jump table - b _0203D68C ; case 0 - b _0203D7D4 ; case 1 - b _0203D89C ; case 2 - b _0203D8CC ; case 3 - b _0203D8EC ; case 4 - b _0203D954 ; case 5 - b _0203D984 ; case 6 - b _0203D9A4 ; case 7 - b _0203DA64 ; case 8 - b _0203DAA0 ; case 9 - b _0203DAEC ; case 10 - b _0203DB20 ; case 11 - b _0203DBB0 ; case 12 - b _0203DC68 ; case 13 - b _0203DC98 ; case 14 - b _0203DCB8 ; case 15 - b _0203DD68 ; case 16 - b _0203DDAC ; case 17 - b _0203DE38 ; case 18 - b _0203DE50 ; case 19 - b _0203DE6C ; case 20 - b _0203DEA0 ; case 21 - b _0203DEBC ; case 22 - b _0203DF1C ; case 23 - b _0203DF40 ; case 24 - b _0203DF5C ; case 25 - b _0203DF74 ; case 26 - b _0203DF90 ; case 27 - b _0203DFB0 ; case 28 - b _0203DFD8 ; case 29 - b _0203E10C ; case 30 - b _0203E150 ; case 31 - b _0203E038 ; case 32 - b _0203E0BC ; case 33 - b _0203E0EC ; case 34 - b _0203E198 ; case 35 - b _0203E1DC ; case 36 - b _0203E20C ; case 37 - b _0203E22C ; case 38 - b _0203E274 ; case 39 - b _0203E2A4 ; case 40 - b _0203E2C4 ; case 41 - b _0203E460 ; case 42 - b _0203E490 ; case 43 - b _0203E518 ; case 44 - b _0203E8E8 ; case 45 - b _0203E934 ; case 46 - b _0203E964 ; case 47 - b _0203E984 ; case 48 - b _0203E9A8 ; case 49 - b _0203E9D8 ; case 50 - b _0203E9F8 ; case 51 - b _0203E5B4 ; case 52 - b _0203E61C ; case 53 - b _0203E6B8 ; case 54 - b _0203E6D8 ; case 55 - b _0203E7EC ; case 56 - b _0203E80C ; case 57 - b _0203EA24 ; case 58 - b _0203EAB8 ; case 59 - b _0203EAE8 ; case 60 - b _0203EB08 ; case 61 - b _0203EB64 ; case 62 - b _0203EB94 ; case 63 - b _0203EBB4 ; case 64 - b _0203EC28 ; case 65 - b _0203EC5C ; case 66 - b _0203ECA8 ; case 67 - b _0203ECC4 ; case 68 - b _0203ED34 ; case 69 - b _0203ED50 ; case 70 - b _0203EE14 ; case 71 - b _0203EE30 ; case 72 - b _0203EE68 ; case 73 - b _0203EEBC ; case 74 - b _0203EF78 ; case 75 - b _0203EF94 ; case 76 -_0203D68C: - ldrb r0, [r4, #0x36] - cmp r0, #0 - beq _0203D6E4 - bl sub_0201077C - cmp r0, #0 - bne _0203D6B4 - mov r0, #0x1e - bl GetPerformanceFlagWithChecks - cmp r0, #0 - bne _0203D73C -_0203D6B4: - ldr r1, _0203E4B0 ; =_020AFE74 - mvn r0, #0 - ldr r4, [r1] - mov r2, #0 - ldr r3, [r4, #0x1c] - mul r0, r3, r0 - str r0, [r4, #0x1c] - ldr r0, [r1] - strb r2, [r0, #0x36] - ldr r0, [r1] - strh r2, [r0, #0x38] - b _0203D73C -_0203D6E4: - ldrsh r0, [r4, #0x38] - cmp r0, #0 - beq _0203D73C - mov r0, #0x1d - bl GetPerformanceFlagWithChecks - cmp r0, #0 - beq _0203D718 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - ldrsh r0, [r0, #0x38] - bl IsMonsterIllegalForMissions - cmp r0, #0 - beq _0203D73C -_0203D718: - ldr r1, _0203E4B0 ; =_020AFE74 - mov r3, #0 - ldr r2, [r1] - sub r0, r3, #1 - strh r3, [r2, #0x38] - ldr r2, [r1] - ldr r1, [r2, #0x1c] - mul r0, r1, r0 - str r0, [r2, #0x1c] -_0203D73C: - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - ldr r0, [r0, #0xe4] - tst r0, #0x10 - bne _0203D7C0 - mov r0, #0x1f - bl GetPerformanceFlagWithChecks - cmp r0, #0 - bne _0203D7C0 - mov r5, #0 - mov r4, r5 - ldr sb, _0203E4B0 ; =_020AFE74 - mvn r7, #0 - mov r8, #6 - b _0203D7B0 -_0203D778: - mul r6, r5, r8 - add r0, r1, r6 - ldrsh r0, [r0, #0x28] - bl GetItemCategory - cmp r0, #0xf - bne _0203D7AC - ldr r0, [sb] - add r0, r0, r6 - strh r4, [r0, #0x28] - ldr r2, [sb] - ldr r0, [r2, #0x1c] - mul r1, r0, r7 - str r1, [r2, #0x1c] -_0203D7AC: - add r5, r5, #1 -_0203D7B0: - ldr r1, [sb] - ldr r0, [r1, #0x20] - cmp r5, r0 - blt _0203D778 -_0203D7C0: - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #1 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203D7D4: - ldr r0, [r4, #0x1c] - cmp r0, #0 - movle r0, #7 - strle r0, [r4] - ble _0203EF9C - str r0, [r4, #0xb0] -#ifdef JAPAN - ldr r3, [r1] - mov r0, #0xa - ldr r2, [r3, #0x1c] - mul r0, r2, r0 - str r0, [r3, #0xb4] - ldr r1, [r1] - ldr r0, [r1, #8] - cmp r0, #0 - beq _0203D890 - cmp r0, #2 - bne _0203DC0C - ldr r4, _0203E4B4 ; =0x0000245D - bl sub_0203F00C - b _0203D864 -_0203DC0C: - cmp r0, #3 - bne _0203DC20 - ldr r4, _0203E89C ; =0x0000245E - bl sub_0203F00C - b _0203D864 -_0203DC20: - cmp r0, #4 - ldrne r4, _0203E8A0 ; =0x0000245C -#else - ldr r4, [r1] - mov r0, #0xa - ldr r2, [r4, #0x1c] - mul r3, r2, r0 - str r3, [r4, #0xb4] - ldr r2, [r1] - ldr r1, [r2, #8] - cmp r1, #0 - beq _0203D890 - cmp r1, #2 - bne _0203D824 - ldr r4, _0203E4B4 ; =0x00000289 - bl sub_0203F00C - b _0203D864 -_0203D824: - cmp r1, #3 - bne _0203D838 - add r4, r0, #0x280 - bl sub_0203F00C - b _0203D864 -_0203D838: - cmp r1, #4 - movne r4, #0x288 -#endif - bne _0203D864 - mov r0, #0 - mov r1, #0x69 - bl LoadScriptVariableValue -#ifdef JAPAN - add r0, r0, #0x5f - add r0, r0, #0x2400 -#else - add r0, r0, #0x8b - add r0, r0, #0x200 -#endif - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 - bl sub_0203F00C -_0203D864: - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r2, [r1] - mov r1, r4 - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #2 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203D890: - mov r0, #4 -#ifdef JAPAN - str r0, [r1] -#else - str r0, [r2] -#endif - b _0203EF9C -_0203D89C: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - bl sub_0203F05C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #3 - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203D8CC: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #4 - strle r1, [r0] - b _0203EF9C -_0203D8EC: - mov r0, #4 - bl sub_02017C50 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - ldr r0, [r0, #0x1c] - bl AddMoneyCarried - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r2, [r0] - ldr r0, [r2, #8] - cmp r0, #2 - ldreq r1, _0203E4BC ; =0x0000026F - beq _0203D934 - cmp r0, #3 -#ifdef JAPAN - ldreq r1, _0203E8AC ; =0x00002444 -#else - moveq r1, #0x270 -#endif - beq _0203D934 - cmp r0, #4 - ldreq r1, _0203E4C0 ; =0x00000271 - ldrne r1, _0203E4C4 ; =0x0000026E -_0203D934: - ldr r0, _0203E4B8 ; =0x0000101C - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #5 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203D954: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - bl sub_0203F05C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #6 - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203D984: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #7 - strle r1, [r0] - b _0203EF9C -_0203D9A4: - ldrsh r0, [r4, #0x38] - cmp r0, #0 - beq _0203D9BC - ldrb r0, [r4, #0x36] - cmp r0, #0 - beq _0203D9C8 -_0203D9BC: - mov r0, #0x29 - str r0, [r4] - b _0203EF9C -_0203D9C8: - ldrsh r0, [r4, #0x14] - str r0, [r4, #0x8c] - ldr r2, [r1] - ldrsh r0, [r2, #0x38] - str r0, [r2, #0x90] - ldr r1, [r1] - ldr r0, [r1, #8] - cmp r0, #0 - beq _0203DA58 - cmp r0, #2 - bne _0203DA00 - ldr r4, _0203E4C8 ; =0x0000029A - bl sub_0203F00C - b _0203DA2C -_0203DA00: - cmp r0, #4 - ldrne r4, _0203E4CC ; =0x00000299 - bne _0203DA2C - mov r0, #0 - mov r1, #0x69 - bl LoadScriptVariableValue -#ifdef JAPAN - add r0, r0, #0x6f - add r0, r0, #0x2400 -#else - add r0, r0, #0x9b - add r0, r0, #0x200 -#endif - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 - bl sub_0203F00C -_0203DA2C: - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4D0 ; =0x00003008 - ldr r2, [r1] - mov r1, r4 - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #8 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DA58: - mov r0, #0xb - str r0, [r1] - b _0203EF9C -_0203DA64: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - mov r0, #0 - ldr r3, _0203E4D4 ; =_0209C884 - mov r2, r0 - mov r1, #0x11 - bl CreateParentMenuFromStringIds - ldr r1, _0203E4B0 ; =_020AFE74 - mov r2, #9 - ldr r3, [r1] - strb r0, [r3, #4] - ldr r0, [r1] - str r2, [r0] - b _0203EF9C -_0203DAA0: - ldrsb r0, [r4, #4] - bl IsParentMenuActive - cmp r0, #0 - bne _0203EF9C - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - ldrsb r0, [r0, #4] - bl sub_0202ABB0 - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r1, [r1] - str r0, [r1, #0x18c] - bl sub_0203F05C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r2, #0xa - ldr r1, [r0] - str r2, [r1, #0x188] - ldr r0, [r0] - str r2, [r0] - b _0203EF9C -_0203DAEC: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - bgt _0203EF9C - ldr r1, [r1] - ldr r0, [r1, #0x18c] - cmp r0, #0 - moveq r0, #0xb - streq r0, [r1] - movne r0, #0x23 - strne r0, [r1] - b _0203EF9C -_0203DB20: - ldr r3, _0203E4D8 ; =_0209C846 - add r2, sp, #0x22 + SUB_0203D538_STACK_OFFSET - mov r1, #4 -_0203DB2C: - ldrh r0, [r3], #2 - subs r1, r1, #1 - strh r0, [r2], #2 - bne _0203DB2C - ldrsh r1, [r4, #0x38] - add r0, sp, #0x22 + SUB_0203D538_STACK_OFFSET - mov r2, #1 - mov r3, #0 - bl sub_02053A0C - ldr r0, _0203E4B0 ; =_020AFE74 - add r1, sp, #0x22 + SUB_0203D538_STACK_OFFSET - ldr r0, [r0] - ldr r3, _0203E4DC ; =_0209C844 - str r1, [sp] - ldrsh r1, [r0, #0x38] - add r0, r0, #0x40 - mov r2, #0 - bl sub_02052E2C - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - add r0, r0, #0x40 - bl sub_02055D4C - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r2, [r1] - str r0, [r2, #0x3b8] - ldr r1, [r1] - ldr r0, [r1, #0x3b8] - cmp r0, #0 - movne r0, #0xc - strne r0, [r1] - moveq r0, #0x1e - streq r0, [r1] - b _0203EF9C -_0203DBB0: - ldr r0, [r4, #0x18] - cmp r0, #1 - ble _0203DBD0 - mov r1, r0, lsl #0x10 - ldr r0, [r4, #0x3b8] - mov r1, r1, asr #0x10 - mov r2, #1 - bl ApplyLevelUpBoostsToGroundMonster -_0203DBD0: - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r2, [r0] - ldrsh r1, [r2, #0x38] - str r1, [r2, #0x8c] - ldr r4, [r0] - ldr r0, [r4, #8] - cmp r0, #2 - bne _0203DC18 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r1, _0203E4E0 ; =0x0000027A - add r2, r4, #0x8c - bl sub_02046BE8 - bl sub_0203F00C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0xd - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DC18: - cmp r0, #4 - movne r0, #0xf - strne r0, [r4] - bne _0203EF9C - mov r0, #0 - mov r1, #0x69 - bl LoadScriptVariableValue -#ifdef JAPAN - add r0, r0, #0x4f - add r0, r0, #0x2400 -#else - add r0, r0, #0x7b - add r0, r0, #0x200 -#endif - mov r1, r0, lsl #0x10 - ldr r0, _0203E4B8 ; =0x0000101C - mov r1, r1, lsr #0x10 - add r2, r4, #0x8c - bl sub_02046BE8 - bl sub_0203F00C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0xd - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DC68: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - bl sub_0203F05C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #0xe - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DC98: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #0xf - strle r1, [r0] - b _0203EF9C -_0203DCB8: - ldrsh r1, [r4, #0x38] - add r0, r4, #0xb5 - add r0, r0, #0x200 - mov r2, #0x4e - bl GetNameWithGender - ldr r3, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4E4 ; =0x0000100C - ldr r4, [r3] - ldr r1, _0203E4E8 ; =0x000002A6 - add r2, r4, #0xb5 - add r2, r2, #0x200 - str r2, [r4, #0xc4] - ldr r2, [r3] - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 -#ifndef JAPAN - mov r2, #0xa -#endif - ldr r0, [r0] - ldr r1, [r0, #0x3b8] - add r0, r0, #0xa1 - add r0, r0, #0x100 - add r1, r1, #0x3a -#ifdef JAPAN - bl StrcpySimple -#else - bl StrncpySimple -#endif - ldr r0, _0203E4B0 ; =_020AFE74 - mov r2, #0xa - ldr r0, [r0] - ldr r1, [r0, #0x3b8] - add r0, r0, #0xab - add r0, r0, #0x100 - add r1, r1, #0x3a - bl MemcpySimple - ldr r0, _0203E4B0 ; =_020AFE74 - mov r2, #0xa - ldr r1, [r0] - add r0, r1, #0xb5 - add r0, r0, #0x100 - add r1, r1, #0xab - add r1, r1, #0x100 - bl StrncpySimpleNoPadSafe - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x10 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DD68: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - ldr r0, _0203E4EC ; =_0209C85C - mov r4, #2 - ldr r1, _0203E4F0 ; =0x00300011 - ldr r3, _0203E4F4 ; =_0209C86C - mov r2, #0 - str r4, [sp] - bl CreateSimpleMenuFromStringIds - ldr r1, _0203E4B0 ; =_020AFE74 - mov r2, #0x11 - ldr r3, [r1] - strb r0, [r3, #0x1a0] - ldr r0, [r1] - str r2, [r0] - b _0203EF9C -_0203DDAC: - add r0, r4, #0x100 - ldrsb r0, [r0, #0xa0] - bl IsSimpleMenuActive - cmp r0, #0 - bne _0203EF9C - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - add r0, r0, #0x100 - ldrsb r0, [r0, #0xa0] - bl GetSimpleMenuResult - ldr r1, _0203E4B0 ; =_020AFE74 - mov r4, r0 - ldr r0, [r1] - add r0, r0, #0x100 - ldrsb r0, [r0, #0xa0] - bl CloseSimpleMenu - ldr r0, _0203E4B0 ; =_020AFE74 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x1a0] - bl sub_02046D20 - cmp r4, #0 - beq _0203DE10 - cmp r4, #1 - b _0203DE24 -_0203DE10: - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x12 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DE24: - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x20 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DE38: - bl ov11_0230D92C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x13 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DE50: - bl ov11_0230D220 - cmp r0, #0 - ldreq r0, _0203E4B0 ; =_020AFE74 - moveq r1, #0x14 - ldreq r0, [r0] - streq r1, [r0] - b _0203EF9C -_0203DE6C: - add r0, r4, #0xab - add r2, r4, #0xa1 - add r1, r0, #0x100 - add r3, r2, #0x100 - mov r0, #2 - mov r2, #0 - bl ShowKeyboard - bl ov11_02310BDC - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x15 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DEA0: - bl ov11_0230D220 - cmp r0, #0 - ldreq r0, _0203E4B0 ; =_020AFE74 - moveq r1, #0x16 - ldreq r0, [r0] - streq r1, [r0] - b _0203EF9C -_0203DEBC: - bl GetKeyboardStatus - cmp r0, #3 - bne _0203EF9C - bl GetKeyboardStringResult - ldr r2, _0203E4B0 ; =_020AFE74 - mov r1, r0 - ldr r0, [r2] - mov r2, #0xa - add r0, r0, #0xab - add r0, r0, #0x100 - bl MemcpySimple - ldr r0, _0203E4B0 ; =_020AFE74 - mov r2, #0xa - ldr r1, [r0] - add r0, r1, #0xb5 - add r1, r1, #0xab - add r0, r0, #0x100 - add r1, r1, #0x100 - bl StrncpySimpleNoPadSafe - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x17 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DF1C: - bl sub_02037468 - cmp r0, #0 - beq _0203EF9C - bl ov11_0230D92C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x18 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DF40: - bl ov11_0230D220 - cmp r0, #0 - ldreq r0, _0203E4B0 ; =_020AFE74 - moveq r1, #0x19 - ldreq r0, [r0] - streq r1, [r0] - b _0203EF9C -_0203DF5C: - bl ov11_0230D92C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x1a - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DF74: - bl ov11_0230D220 - cmp r0, #0 - ldreq r0, _0203E4B0 ; =_020AFE74 - moveq r1, #0x1b - ldreq r0, [r0] - streq r1, [r0] - b _0203EF9C -_0203DF90: - add r0, r4, #0xb5 - add r0, r0, #0x100 - bl sub_0203909C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x1c - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203DFB0: - bl sub_0203931C - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r2, [r1] - str r0, [r2, #0x3bc] - ldr r1, [r1] - ldr r0, [r1, #0x3bc] - cmp r0, #0 - movge r0, #0x1d - strge r0, [r1] - b _0203EF9C -_0203DFD8: - bl sub_02039218 - cmp r0, #0 - beq _0203EF9C - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r1, [r0] - ldr r0, [r1, #0x3bc] - cmp r0, #0 - beq _0203E000 - cmp r0, #1 - b _0203E02C -_0203E000: - ldr r0, [r1, #0x3b8] - add r1, r1, #0xab - add r0, r0, #0x3a - add r1, r1, #0x100 - mov r2, #0xa - bl MemcpySimple - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x20 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E02C: - mov r0, #0x12 - str r0, [r1] - b _0203EF9C -_0203E038: - ldrsh r0, [r4, #0x38] - mov r2, #0xa - orr r0, r0, #0x80000 - str r0, [r4, #0x8c] - ldr r1, [r1] - add r0, r1, #0xb5 - add r1, r1, #0xab - add r0, r0, #0x100 - add r1, r1, #0x100 - bl StrncpySimpleNoPadSafe - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r2, [r1] - add r0, r2, #0xb5 - add r0, r0, #0x100 - str r0, [r2, #0xc4] - ldr r0, [r1] - ldr r0, [r0, #8] - cmp r0, #2 - ldreq r4, _0203E4F8 ; =0x00000283 - mov r0, #5 - ldrne r4, _0203E4FC ; =0x00000281 - bl sub_02017C50 - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r2, [r1] - mov r1, r4 - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x21 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E0BC: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - bl sub_0203F05C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #0x22 - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E0EC: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #0x29 - strle r1, [r0] - b _0203EF9C -_0203E10C: - bl sub_02046D20 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r1, [r0] - ldr r0, [r1, #8] - sub r0, r0, #2 - cmp r0, #1 - add r0, r1, #0x40 - bhi _0203E138 - mov r1, #1 - bl ov11_023061E4 - b _0203E13C -_0203E138: - bl ov11_023061CC -_0203E13C: - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x1f - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E150: - bl ov11_02306C9C - cmp r0, #3 - cmpne r0, #4 - bne _0203EF9C - bl ov11_02306C64 - cmp r0, #0 - ldreq r0, _0203E4B0 ; =_020AFE74 - moveq r1, #0x23 - ldreq r0, [r0] - streq r1, [r0] - beq _0203EF9C - ldr r1, _0203E4B0 ; =_020AFE74 - mov r2, #0xc - ldr r3, [r1] - str r0, [r3, #0x3b8] - ldr r0, [r1] - str r2, [r0] - b _0203EF9C -_0203E198: - ldrsh r1, [r4, #0x38] - add r0, r4, #0xe8 - bl GetNameRaw - ldr r2, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r4, [r2] -#ifdef JAPAN - ldr r1, _0203E8F0 ; =0x00002458 -#else - mov r1, #0x284 -#endif - add r3, r4, #0xe8 - str r3, [r4, #0xc4] - ldr r2, [r2] - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x24 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E1DC: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - bl sub_0203F05C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #0x25 - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E20C: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #0x26 - strle r1, [r0] - b _0203EF9C -_0203E22C: - mov r0, #4 - bl sub_02017C50 - mov r0, #0x3e8 - bl AddMoneyCarried - ldr r1, _0203E4B0 ; =_020AFE74 - mov r3, #0x3e8 - ldr r2, [r1] - ldr r0, _0203E4B8 ; =0x0000101C - str r3, [r2, #0xb0] - ldr r2, [r1] - ldr r1, _0203E500 ; =0x00000285 - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x27 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E274: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - bl sub_0203F05C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #0x28 - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E2A4: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #0x29 - strle r1, [r0] - b _0203EF9C -_0203E2C4: - ldr r1, [r4, #0x10] - ldr r0, [r4, #0x20] - cmp r1, r0 - movge r0, #0x3a - strge r0, [r4] - bge _0203EF9C - mov r0, #6 - mla r0, r1, r0, r4 - ldrsh r0, [r0, #0x28] - mov r1, #0 - strh r0, [sp, #0x20 + SUB_0203D538_STACK_OFFSET] - strb r1, [sp, #0x1c + SUB_0203D538_STACK_OFFSET] - bl IsStorableItem - cmp r0, #0 - beq _0203E44C - ldrsh r0, [sp, #0x20 + SUB_0203D538_STACK_OFFSET] - bl IsThrownItem - cmp r0, #0 - bne _0203E328 - ldrsh r1, [sp, #0x20 + SUB_0203D538_STACK_OFFSET] - cmp r1, #0x16c - blt _0203E348 - ldr r0, _0203E504 ; =0x0000018F - cmp r1, r0 - bgt _0203E348 -_0203E328: - ldr r1, _0203E4B0 ; =_020AFE74 - mov r0, #6 - ldr r2, [r1] - ldr r1, [r2, #0x10] - mla r0, r1, r0, r2 - ldrh r0, [r0, #0x26] - strh r0, [sp, #0x1e + SUB_0203D538_STACK_OFFSET] - b _0203E350 -_0203E348: - mov r0, #0 - strh r0, [sp, #0x1e + SUB_0203D538_STACK_OFFSET] -_0203E350: - ldr r3, _0203E4B0 ; =_020AFE74 - mov r0, #1 - ldr r6, [r3] - strb r0, [sp, #0x1c + SUB_0203D538_STACK_OFFSET] - ldr r1, [r6, #0x10] - mov r0, #6 - mla r5, r1, r0, r6 - ldrh r0, [sp, #0x1c + SUB_0203D538_STACK_OFFSET] - mov r4, #0 - ldr r2, _0203E508 ; =_0209C850 - strh r0, [r5, #0x24] - ldrh r0, [sp, #0x1e + SUB_0203D538_STACK_OFFSET] - add r1, sp, #0x1c + SUB_0203D538_STACK_OFFSET - strh r0, [r5, #0x26] - ldrh r0, [sp, #0x20 + SUB_0203D538_STACK_OFFSET] - strh r0, [r5, #0x28] - ldrsh r0, [sp, #0x20 + SUB_0203D538_STACK_OFFSET] - str r0, [r6, #0x9c] - ldr r0, [r3] - str r4, [r0, #0xb0] - ldr r0, [r3] - add r0, r0, #0xe8 - bl sub_0200D670 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r2, [r0] - add r1, r2, #0xe8 - str r1, [r2, #0xc4] - ldr r2, [r0] - ldrsh r1, [r2, #0x14] - str r1, [r2, #0x8c] - ldr r1, [r0] - ldr r0, [r1, #8] - cmp r0, #0 - beq _0203E440 - cmp r0, #2 - bne _0203E3EC - ldr r4, _0203E50C ; =0x00000296 - bl sub_0203F00C - b _0203E414 -_0203E3EC: - cmp r0, #3 - bne _0203E400 - ldr r4, _0203E510 ; =0x00000297 - bl sub_0203F00C - b _0203E414 -_0203E400: - cmp r0, #4 - ldrne r4, _0203E514 ; =0x00000295 - bne _0203E414 -#ifdef JAPAN - ldr r4, _0203E90C ; =0x0000246C -#else - mov r4, #0x298 -#endif - bl sub_0203F00C -_0203E414: - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r2, [r1] - mov r1, r4 - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x2a - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E440: - mov r0, #0x2c - str r0, [r1] - b _0203EF9C -_0203E44C: - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x33 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E460: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - bl sub_0203F05C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #0x2b - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E490: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #0x2c - strle r1, [r0] - b _0203EF9C - .align 2, 0 -#ifdef JAPAN -#define SUB_0203D538_DATA_OFFSET 0x21D4 -#else -#define SUB_0203D538_DATA_OFFSET 0 -#endif -_0203E4B0: .word _020AFE74 -_0203E4B4: .word 0x00000289 + SUB_0203D538_DATA_OFFSET -#ifdef JAPAN -_0203E89C: .word 0x0000245E -_0203E8A0: .word 0x0000245C -#endif -_0203E4B8: .word 0x0000101C -_0203E4BC: .word 0x0000026F + SUB_0203D538_DATA_OFFSET -#ifdef JAPAN -_0203E8AC: .word 0x00002444 -#endif -_0203E4C0: .word 0x00000271 + SUB_0203D538_DATA_OFFSET -_0203E4C4: .word 0x0000026E + SUB_0203D538_DATA_OFFSET -_0203E4C8: .word 0x0000029A + SUB_0203D538_DATA_OFFSET -_0203E4CC: .word 0x00000299 + SUB_0203D538_DATA_OFFSET -_0203E4D0: .word 0x00003008 -_0203E4D4: .word _0209C884 -_0203E4D8: .word _0209C846 -_0203E4DC: .word _0209C844 -_0203E4E0: .word 0x0000027A + SUB_0203D538_DATA_OFFSET -_0203E4E4: .word 0x0000100C -_0203E4E8: .word 0x000002A6 + SUB_0203D538_DATA_OFFSET -_0203E4EC: .word _0209C85C -_0203E4F0: .word 0x00300011 -_0203E4F4: .word _0209C86C -_0203E4F8: .word 0x00000283 + SUB_0203D538_DATA_OFFSET -_0203E4FC: .word 0x00000281 + SUB_0203D538_DATA_OFFSET -#ifdef JAPAN -_0203E8F0: .word 0x00002458 -#endif -_0203E500: .word 0x00000285 + SUB_0203D538_DATA_OFFSET -_0203E504: .word 0x0000018F -_0203E508: .word _0209C850 -_0203E50C: .word 0x00000296 + SUB_0203D538_DATA_OFFSET -_0203E510: .word 0x00000297 + SUB_0203D538_DATA_OFFSET -_0203E514: .word 0x00000295 + SUB_0203D538_DATA_OFFSET -#ifdef JAPAN -_0203E90C: .word 0x0000246C -#endif -_0203E518: - ldr r1, [r4, #0x10] - add r2, r4, #0x24 - mov r0, #6 - mla r0, r1, r0, r2 - bl AddItemToStorage - cmp r0, #0 - beq _0203E5A0 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - ldr r0, [r0, #0xe4] - tst r0, #2 - bne _0203E550 - mov r0, #4 - bl sub_02017C50 -_0203E550: - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r2, [r0] - ldr r0, [r2, #0xe4] - tst r0, #4 - bne _0203E588 - ldr r1, _0203EFA8 ; =0x00000273 - add r2, r2, #0x8c - mov r0, #0x1c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x2e - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E588: - tst r0, #8 - movne r0, #0x30 - strne r0, [r2] - moveq r0, #0x33 - streq r0, [r2] - b _0203EF9C -_0203E5A0: - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x34 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E5B4: - ldr r2, [r4, #0x10] - mov r0, #6 - mla r1, r2, r0, r4 - ldrsh r2, [r1, #0x28] - mov r1, #0 - strh r2, [sp, #0x1a + SUB_0203D538_STACK_OFFSET] - ldr r2, [r4, #0x10] - mla r0, r2, r0, r4 - ldrh r0, [r0, #0x26] - strh r0, [sp, #0x18 + SUB_0203D538_STACK_OFFSET] - strb r1, [sp, #0x16 + SUB_0203D538_STACK_OFFSET] - bl sub_02046D20 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - ldr r0, [r0, #0xe4] - tst r0, #1 - moveq r1, #1 - movne r1, #0 - add r0, sp, #0x16 + SUB_0203D538_STACK_OFFSET - and r1, r1, #0xff - bl sub_020453F8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x35 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E61C: - bl sub_02046028 - cmp r0, #2 - beq _0203E658 - cmp r0, #3 - beq _0203E688 - cmp r0, #4 - bne _0203EF9C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #0x2d - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E658: - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - add r0, r0, #0xde - bl sub_02045FD0 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #0x36 - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E688: - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - add r0, r0, #0xde - bl sub_02045FD0 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #0x38 - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E6B8: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #0x37 - strle r1, [r0] - b _0203EF9C -_0203E6D8: - ldr r1, [r4, #0x10] - add r2, r4, #0x24 - mov r0, #6 - mla r0, r1, r0, r2 - bl AddItemToStorage - cmp r0, #0 - beq _0203E7D8 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - ldr r0, [r0, #0xe4] - tst r0, #2 - bne _0203E710 - mov r0, #4 - bl sub_02017C50 -_0203E710: - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #6 - ldr r5, [r0] - mov r6, #0 - ldr r4, [r5, #0x10] - ldr r2, _0203E508 ; =_0209C850 - mla r3, r4, r1, r5 - ldrsh r3, [r3, #0x28] - str r3, [r5, #0x9c] - ldr r3, [r0] - str r6, [r3, #0xb0] - ldr r4, [r0] - ldrsh r3, [r4, #0xdc] - str r3, [r4, #0xa4] - ldr r3, [r0] - str r6, [r3, #0xb8] - ldr r5, [r0] - ldrsh r3, [r5, #0xe2] - add r4, r5, #0x24 - add r0, r5, #0xe8 - strh r3, [sp, #0x14 + SUB_0203D538_STACK_OFFSET] - ldrh r3, [r5, #0xe0] - strb r6, [sp, #0x10 + SUB_0203D538_STACK_OFFSET] - strh r3, [sp, #0x12 + SUB_0203D538_STACK_OFFSET] - ldr r3, [r5, #0x10] - mla r1, r3, r1, r4 - bl sub_0200D670 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r2, _0203E508 ; =_0209C850 - ldr r0, [r0] - add r1, sp, #0x10 + SUB_0203D538_STACK_OFFSET - add r0, r0, #0x138 - bl sub_0200D670 - ldr r2, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r4, [r2] - ldr r1, _0203EFAC ; =0x00000275 - add r3, r4, #0x138 - str r3, [r4, #0xcc] - ldr r4, [r2] - add r3, r4, #0xe8 - str r3, [r4, #0xc4] - ldr r2, [r2] - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x2e - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E7D8: - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x34 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E7EC: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #0x39 - strle r1, [r0] - b _0203EF9C -_0203E80C: - ldr r1, [r4, #0x10] - add r2, r4, #0x24 - mov r0, #6 - mla r0, r1, r0, r2 - bl AddItemToStorage - cmp r0, #0 - beq _0203E8D4 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - ldr r0, [r0, #0xe4] - tst r0, #2 - bne _0203E844 - mov r0, #4 - bl sub_02017C50 -_0203E844: - ldr r1, _0203E4B0 ; =_020AFE74 - mov r0, #6 - ldr r6, [r1] - mov r5, #0 - ldr r4, [r6, #0x10] - ldr r2, _0203E508 ; =_0209C850 - mla r3, r4, r0, r6 - ldrsh r3, [r3, #0x28] - str r3, [r6, #0x9c] - ldr r3, [r1] - str r5, [r3, #0xb0] - ldr r4, [r1] - ldrsh r3, [r4, #0xdc] - str r3, [r4, #0xa4] - ldr r3, [r1] - str r5, [r3, #0xb8] - ldr r4, [r1] - ldr r3, [r4, #0x10] - add r1, r4, #0x24 - mla r1, r3, r0, r1 - add r0, r4, #0xe8 - bl sub_0200D670 - ldr r2, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r4, [r2] - ldr r1, _0203EFB0 ; =0x00000277 - add r3, r4, #0xe8 - str r3, [r4, #0xc4] - ldr r2, [r2] - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x2e - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E8D4: - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x34 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E8E8: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - bgt _0203EF9C - ldr r2, [r1] - ldr r0, _0203E4B8 ; =0x0000101C - ldr r1, _0203EFB4 ; =0x00000286 - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - add r0, r0, #0xde - bl sub_02045FD0 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x2e - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E934: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - bl sub_0203F05C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #0x2f - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E964: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #0x33 - strle r1, [r0] - b _0203EF9C -_0203E984: - ldr r0, _0203E4B8 ; =0x0000101C -#ifdef JAPAN - ldr r1, _0203F34C_JP ; =0x00002FEC - add r2, r4, #0x8c -#else - add r2, r4, #0x8c - mov r1, #0x2cc -#endif - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x31 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E9A8: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - bl sub_0203F05C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #0x32 - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203E9D8: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #0x33 - strle r1, [r0] - b _0203EF9C -_0203E9F8: - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - ldr r1, [r1] - ldr r0, [r1, #0x10] - cmp r0, #3 - movlt r0, #0x29 - strlt r0, [r1] - movge r0, #0x3a - strge r0, [r1] - b _0203EF9C -_0203EA24: - ldrb r0, [r4, #0x36] - cmp r0, #0 - moveq r0, #0x40 - streq r0, [r4] - beq _0203EF9C - ldr r0, [r4, #8] - cmp r0, #0 - beq _0203EAAC - cmp r0, #2 - bne _0203EA58 - ldr r4, _0203EFB8 ; =0x00000292 - bl sub_0203F00C - b _0203EA80 -_0203EA58: - cmp r0, #3 - bne _0203EA6C - ldr r4, _0203EFBC ; =0x00000293 - bl sub_0203F00C - b _0203EA80 -_0203EA6C: - cmp r0, #4 - ldrne r4, _0203EFC0 ; =0x00000291 - bne _0203EA80 -#ifdef JAPAN - ldr r4, _0203F35C_JP ; =0x00002468 -#else - mov r4, #0x294 -#endif - bl sub_0203F00C -_0203EA80: - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r2, [r1] - mov r1, r4 - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x3b - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203EAAC: - mov r0, #0x3d - str r0, [r4] - b _0203EF9C -_0203EAB8: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - bl sub_0203F05C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #0x3c - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203EAE8: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #0x3d - strle r1, [r0] - b _0203EF9C -_0203EB08: - mov r0, #5 - bl sub_02017C50 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - ldrsh r0, [r0, #0x38] - bl sub_02010794 - mov r0, #4 - bl RandIntSafe - add r0, r0, #6 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_020107F4 - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r2, [r1] - ldr r1, _0203EFC4 ; =0x00000272 - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x3e - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203EB64: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - bl sub_0203F05C - ldr r0, _0203E4B0 ; =_020AFE74 - mov r3, #0xa - ldr r2, [r0] - mov r1, #0x3f - str r3, [r2, #0x188] - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203EB94: - ldr r2, [r4, #0x188] - sub r0, r2, #1 - str r0, [r4, #0x188] - cmp r2, #0 - ldrle r0, [r1] - movle r1, #0x40 - strle r1, [r0] - b _0203EF9C -_0203EBB4: - ldr r0, [r4, #0x3c] - cmp r0, #0 - moveq r0, #0x4c - streq r0, [r4] - beq _0203EF9C - add r0, sp, #0xcc + SUB_0203D538_STACK_OFFSET_2 - bl InitPreprocessorArgs - bl GetRank - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r2, [r1] - strb r0, [r2, #0xc] - ldr r0, [r1] - ldr r0, [r0, #0x3c] - bl sub_02050C10 - mov r0, #4 - bl sub_02017C50 - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r2, [r1] - ldr r1, _0203EFC8 ; =0x000002A1 - ldr r3, [r2, #0x3c] - add r2, sp, #0xcc + SUB_0203D538_STACK_OFFSET_2 - str r3, [sp, #0xf0 + SUB_0203D538_STACK_OFFSET_2] - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x41 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203EC28: - bl sub_02046C78 - cmp r0, #0 - beq _0203EF9C - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r4, [r0] - bl GetRank - ldrb r1, [r4, #0xc] - cmp r1, r0 - movne r0, #0x42 - strne r0, [r4] - moveq r0, #0x4c - streq r0, [r4] - b _0203EF9C -_0203EC5C: - mov r0, #2 - bl sub_02017C50 - add r0, sp, #0x7c + SUB_0203D538_STACK_OFFSET_2 - bl InitPreprocessorArgs - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - ldrb r0, [r0, #0xc] - str r0, [sp, #0x94 + SUB_0203D538_STACK_OFFSET_2] - bl GetRank - str r0, [sp, #0x98 + SUB_0203D538_STACK_OFFSET_2] - ldr r0, _0203E4B8 ; =0x0000101C - ldr r1, _0203EFCC ; =0x000002A2 - add r2, sp, #0x7c + SUB_0203D538_STACK_OFFSET_2 - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x43 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203ECA8: - bl sub_02046C78 - cmp r0, #0 - ldrne r0, _0203E4B0 ; =_020AFE74 - movne r1, #0x44 - ldrne r0, [r0] - strne r1, [r0] - b _0203EF9C -_0203ECC4: - add r0, sp, #0x2c + SUB_0203D538_STACK_OFFSET_2 - bl InitPreprocessorArgs - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - ldrb r0, [r0, #0xc] - bl GetRankUpEntry - ldr r0, [r0, #8] - str r0, [sp, #0x50 + SUB_0203D538_STACK_OFFSET_2] - bl GetRank - bl GetRankUpEntry - ldr r1, [r0, #8] - ldr r0, [sp, #0x50 + SUB_0203D538_STACK_OFFSET_2] - str r1, [sp, #0x54 + SUB_0203D538_STACK_OFFSET_2] - cmp r0, r1 - ldreq r0, _0203E4B0 ; =_020AFE74 - moveq r1, #0x46 - ldreq r0, [r0] - streq r1, [r0] - beq _0203EF9C - ldr r0, _0203E4B8 ; =0x0000101C - ldr r1, _0203EFD0 ; =0x000002A3 - add r2, sp, #0x2c + SUB_0203D538_STACK_OFFSET_2 - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x45 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203ED34: - bl sub_02046C78 - cmp r0, #0 - ldrne r0, _0203E4B0 ; =_020AFE74 - movne r1, #0x46 - ldrne r0, [r0] - strne r1, [r0] - b _0203EF9C -_0203ED50: - bl GetRank - bl GetRankUpEntry - ldrsh r0, [r0, #0xc] - strh r0, [r4, #0x88] - cmp r0, #0 - bne _0203ED80 - bl sub_02046D20 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x4c - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203ED80: - bl IsStorableItem - cmp r0, #0 - beq _0203EDFC - ldrsh r0, [r4, #0x88] - bl IsThrownItem - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - strh r0, [r4, #0x86] - mov r0, #1 - strb r0, [r4, #0x84] - ldr r0, _0203E4B0 ; =_020AFE74 - ldrsh r3, [r4, #0x88] - ldr r1, [r0] - mov r2, #0 - str r3, [r1, #0x9c] - ldr r1, [r0] - mov r0, #4 - str r2, [r1, #0xb0] - bl sub_02017C50 - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r2, [r1] -#ifdef JAPAN - ldr r1, _0203F370 ; =0x00002478 -#else - mov r1, #0x2a4 -#endif - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x47 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203EDFC: - bl sub_02046D20 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x4c - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203EE14: - bl sub_02046C78 - cmp r0, #0 - ldrne r0, _0203E4B0 ; =_020AFE74 - movne r1, #0x48 - ldrne r0, [r0] - strne r1, [r0] - b _0203EF9C -_0203EE30: - add r0, r4, #0x84 - bl AddItemToStorage - cmp r0, #0 - ldreq r0, _0203E4B0 ; =_020AFE74 - moveq r1, #0x49 - ldreq r0, [r0] - streq r1, [r0] - beq _0203EF9C - bl sub_02046D20 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x4c - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203EE68: - ldrsh r1, [r4, #0x88] - mov r0, #0 - strh r1, [sp, #0xe + SUB_0203D538_STACK_OFFSET] - ldrh r1, [r4, #0x86] - strh r1, [sp, #0xc + SUB_0203D538_STACK_OFFSET] - strb r0, [sp, #0xa + SUB_0203D538_STACK_OFFSET] - bl sub_02046D20 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r0, [r0] - ldr r0, [r0, #0xe4] - tst r0, #1 - moveq r1, #1 - movne r1, #0 - add r0, sp, #0xa + SUB_0203D538_STACK_OFFSET - and r1, r1, #0xff - bl sub_020453F8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x4a - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203EEBC: - bl sub_02046028 -#ifdef JAPAN - cmp r0, #2 - cmpne r0, #3 - beq _0203EF64 - cmp r0, #4 - bne _0203EF9C - ldr r1, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r2, [r1] - ldr r1, _0203EFB4 ; =0x0000245A -#else - mov r4, r0 - cmp r4, #1 - beq _0203EF9C - add r0, sp, #4 - bl sub_02045FD0 - ldrsh r0, [sp, #8] - cmp r0, #0 - bne _0203EF00 - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r1, [r0] - ldrh r0, [r1, #0x84] - strh r0, [sp, #4] - ldrh r0, [r1, #0x86] - strh r0, [sp, #6] - ldrh r0, [r1, #0x88] - strh r0, [sp, #8] -_0203EF00: - cmp r4, #2 - cmpne r4, #3 - beq _0203EF64 - cmp r4, #4 - bne _0203EF9C - ldr r0, _0203E4B0 ; =_020AFE74 - ldr r2, _0203E508 ; =_0209C850 - ldr r0, [r0] - add r1, sp, #4 - add r0, r0, #0xe8 - bl sub_0200D670 - ldr r2, _0203E4B0 ; =_020AFE74 - ldr r0, _0203E4B8 ; =0x0000101C - ldr r4, [r2] - ldr r1, _0203EFB4 ; =0x00000286 - add r3, r4, #0xe8 - str r3, [r4, #0xc4] - ldr r2, [r2] -#endif - add r2, r2, #0x8c - bl sub_02046BE8 - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x4b - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203EF64: - ldr r0, _0203E4B0 ; =_020AFE74 - mov r1, #0x48 - ldr r0, [r0] - str r1, [r0] - b _0203EF9C -_0203EF78: - bl sub_02046C78 - cmp r0, #0 - ldrne r0, _0203E4B0 ; =_020AFE74 - movne r1, #0x4c - ldrne r0, [r0] - strne r1, [r0] - b _0203EF9C -_0203EF94: - mov r0, #1 - b _0203EFA0 -_0203EF9C: - mov r0, #0 -_0203EFA0: - add sp, sp, #0x11c + SUB_0203D538_STACK_OFFSET_2 - ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0203EFA8: .word 0x00000273 + SUB_0203D538_DATA_OFFSET -_0203EFAC: .word 0x00000275 + SUB_0203D538_DATA_OFFSET -_0203EFB0: .word 0x00000277 + SUB_0203D538_DATA_OFFSET -_0203EFB4: .word 0x00000286 + SUB_0203D538_DATA_OFFSET -#ifdef JAPAN -_0203F34C_JP: .word 0x00002FEC -#endif -_0203EFB8: .word 0x00000292 + SUB_0203D538_DATA_OFFSET -_0203EFBC: .word 0x00000293 + SUB_0203D538_DATA_OFFSET -_0203EFC0: .word 0x00000291 + SUB_0203D538_DATA_OFFSET -#ifdef JAPAN -_0203F35C_JP: .word 0x00002468 -#endif -_0203EFC4: .word 0x00000272 + SUB_0203D538_DATA_OFFSET -_0203EFC8: .word 0x000002A1 + SUB_0203D538_DATA_OFFSET -_0203EFCC: .word 0x000002A2 + SUB_0203D538_DATA_OFFSET -_0203EFD0: .word 0x000002A3 + SUB_0203D538_DATA_OFFSET -#ifdef JAPAN -_0203F370: .word 0x00002478 -#endif - arm_func_end sub_0203D538 - - arm_func_start sub_0203EFD4 -sub_0203EFD4: ; 0x0203EFD4 - stmdb sp!, {r3, lr} - ldr r0, _0203F008 ; =_020AFE74 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl sub_0203F05C - ldr r0, _0203F008 ; =_020AFE74 - ldr r0, [r0] - bl MemFree - ldr r0, _0203F008 ; =_020AFE74 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0203F008: .word _020AFE74 - arm_func_end sub_0203EFD4 - - arm_func_start sub_0203F00C -sub_0203F00C: ; 0x0203F00C - stmdb sp!, {r3, lr} - ldr r1, _0203F058 ; =_020AFE74 - mvn r0, #1 - ldr r1, [r1] - ldrsb r1, [r1, #6] - cmp r1, r0 - ldmneia sp!, {r3, pc} - mov r0, #0 - mov r1, #3 - mov r2, #1 - bl CreatePortraitBox - ldr r1, _0203F058 ; =_020AFE74 - ldr r2, [r1] - strb r0, [r2, #6] - ldr r1, [r1] - ldrsb r0, [r1, #6] - add r1, r1, #0x190 - bl ShowPortraitInPortraitBox - ldmia sp!, {r3, pc} - .align 2, 0 -_0203F058: .word _020AFE74 - arm_func_end sub_0203F00C - - arm_func_start sub_0203F05C -sub_0203F05C: ; 0x0203F05C - stmdb sp!, {r3, lr} - ldr r0, _0203F0EC ; =_020AFE74 - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0, #4] - cmp r0, r1 - beq _0203F08C - bl CloseParentMenu - ldr r0, _0203F0EC ; =_020AFE74 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #4] -_0203F08C: - ldr r0, _0203F0EC ; =_020AFE74 - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0, #5] - cmp r0, r1 - beq _0203F0B8 - bl CloseDialogueBox - ldr r0, _0203F0EC ; =_020AFE74 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #5] -_0203F0B8: - ldr r0, _0203F0EC ; =_020AFE74 - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0, #6] - cmp r0, r1 - beq _0203F0E4 - bl ClosePortraitBox - ldr r0, _0203F0EC ; =_020AFE74 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #6] -_0203F0E4: - bl sub_02046D20 - ldmia sp!, {r3, pc} - .align 2, 0 -_0203F0EC: .word _020AFE74 - arm_func_end sub_0203F05C - - arm_func_start sub_0203F0F0 -sub_0203F0F0: ; 0x0203F0F0 - stmdb sp!, {r4, lr} - ldr r1, _0203F148 ; =_020AFE78 - ldr r2, _0203F14C ; =_0209C89C - ldr r3, [r1] - mov r4, r0 - ldrsh r1, [r3, #0xc] - add r0, r3, #0xdc - add r1, r3, r1, lsl #2 - ldr r1, [r1, #0x14] - mov r1, r1, lsl #1 - ldrh r1, [r2, r1] - bl GetStringFromFileVeneer - ldr r0, _0203F148 ; =_020AFE78 - mov r3, r4 - ldr r4, [r0] - ldrsh r0, [r4, #0xc] - add r1, r4, #0x64 - add r2, r4, #0x30 - add r0, r4, r0, lsl #2 - ldr r0, [r0, #0x14] - bl sub_0205A4B4 - ldmia sp!, {r4, pc} - .align 2, 0 -_0203F148: .word _020AFE78 -_0203F14C: .word _0209C89C - arm_func_end sub_0203F0F0 - - arm_func_start sub_0203F150 -sub_0203F150: ; 0x0203F150 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0xa0 - mov r6, r0 - mov r5, r1 - mov r0, #0xfc - mov r1, #8 - bl MemAlloc - ldr r2, _0203F340 ; =_020AFE78 - mvn r1, #1 - str r0, [r2] - mov ip, #0 - strb r1, [r0] - mov r0, ip -_0203F184: - add r1, ip, #1 - ldr r3, [r2] - mov r1, r1, lsl #0x10 - add r3, r3, ip, lsl #2 - mov ip, r1, asr #0x10 - str r0, [r3, #0x14] - cmp ip, #6 - blt _0203F184 - ldr r3, _0203F344 ; =_0209C8C8 - ldr r2, _0203F340 ; =_020AFE78 - mov r1, #0x18 - ldr ip, [r2] - mla r1, r5, r1, r3 - strh r0, [ip, #0xe] - b _0203F1E0 -_0203F1C0: - ldr r0, [r2] - ldr r3, [r1, lr, lsl #2] - add r0, r0, lr, lsl #2 - str r3, [r0, #0x14] - ldr r3, [r2] - ldrsh r0, [r3, #0xe] - add r0, r0, #1 - strh r0, [r3, #0xe] -_0203F1E0: - ldr ip, [r2] - ldrsh lr, [ip, #0xe] - cmp lr, #6 - bge _0203F1FC - ldr r0, [r1, lr, lsl #2] - cmp r0, #0 - bne _0203F1C0 -_0203F1FC: - mov r3, #0 - strh r3, [ip, #0xc] - ldr r0, _0203F340 ; =_020AFE78 - sub r2, r3, #1 - ldr r1, [r0] - mov ip, #1 - strh r2, [r1, #0x10] - ldr r1, [r0] - strh r3, [r1, #0x12] - ldr r2, [r0] - mov r1, r6 - strb ip, [r2, #0x2c] - ldr r3, [r0] - mov r2, #0x78 - str r5, [r3, #4] - ldr r3, [r0] - str ip, [r3, #8] - ldr r0, [r0] - add r0, r0, #0x64 - bl memcpy - ldr r0, _0203F340 ; =_020AFE78 - ldr r1, _0203F348 ; =0x00000975 - ldr r3, [r0] - mov r0, #0x10 - str r0, [sp, #0x14] - strh r1, [sp, #0x10] - ldrsh r2, [r3, #0xc] - add r0, r3, #0xdc - mov r1, #0xc - str r1, [sp, #0xc] - str r0, [sp, #0x50] - str r2, [sp, #8] - ldrsh r2, [r3, #0xc] - ldr r1, _0203F34C ; =_0209C89C - add r2, r3, r2, lsl #2 - ldr r2, [r2, #0x14] - mov r2, r2, lsl #1 - ldrh r1, [r1, r2] - bl GetStringFromFileVeneer - ldr r0, _0203F340 ; =_020AFE78 - ldr r2, [r0] - ldr r0, [r2, #4] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0203F324 -_0203F2B0: ; jump table - b _0203F2C0 ; case 0 - b _0203F2C0 ; case 1 - b _0203F2FC ; case 2 - b _0203F2FC ; case 3 -_0203F2C0: - cmp r0, #1 - ldrsh r4, [r2, #0xe] - ldreq r1, _0203F350 ; =0x60481C3B - ldr r0, _0203F354 ; =_0209C8A8 - str r4, [sp] - mov r4, #1 - ldrne r1, _0203F358 ; =0x60489C3B - ldr r3, _0203F35C ; =sub_0203F0F0 - add r2, sp, #8 - str r4, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _0203F360 ; =sub_0203F928 - mov r4, r0 - bl SetUnkAdvancedTextBoxWindowFn - b _0203F324 -_0203F2FC: - ldrsh r4, [r2, #0xe] - ldr r0, _0203F354 ; =_0209C8A8 - ldr r1, _0203F364 ; =0x60089C3B - str r4, [sp] - mov r4, #1 - ldr r3, _0203F35C ; =sub_0203F0F0 - add r2, sp, #8 - str r4, [sp, #4] - bl CreateAdvancedTextBox - mov r4, r0 -_0203F324: - ldr r0, _0203F340 ; =_020AFE78 - ldr r1, [r0] - strb r4, [r1] - ldr r0, [r0] - ldrsb r0, [r0] - add sp, sp, #0xa0 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0203F340: .word _020AFE78 -_0203F344: .word _0209C8C8 -#ifdef JAPAN -_0203F348: .word 0x00002345 -#else -_0203F348: .word 0x00000975 -#endif -_0203F34C: .word _0209C89C -_0203F350: .word 0x60481C3B -_0203F354: .word _0209C8A8 -_0203F358: .word 0x60489C3B -_0203F35C: .word sub_0203F0F0 -_0203F360: .word sub_0203F928 -_0203F364: .word 0x60089C3B - arm_func_end sub_0203F150 - - arm_func_start sub_0203F368 -sub_0203F368: ; 0x0203F368 - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _0203F394 ; =_020AFE78 - mov r5, r0 - ldr r0, [r2] - mov r4, r1 - add r0, r0, #0x64 - bl sub_0205B0B8 - str r0, [r5] - mov r0, #0xc - str r0, [r4] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0203F394: .word _020AFE78 - arm_func_end sub_0203F368 - - arm_func_start sub_0203F398 -sub_0203F398: ; 0x0203F398 - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #0x10 - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r4, [r0] - cmp r4, #0 - moveq r0, #1 - beq _0203F8CC - ldr r0, [r4, #8] - cmp r0, #4 - addls pc, pc, r0, lsl #2 - b _0203F8C8 -_0203F3C4: ; jump table - b _0203F3D8 ; case 0 - b _0203F404 ; case 1 - b _0203F8C8 ; case 2 - b _0203F83C ; case 3 - b _0203F898 ; case 4 -_0203F3D8: - ldrsb r0, [r4] - bl sub_020307EC - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202810C - ldr r0, _0203F8D4 ; =_020AFE78 - mov r1, #1 - ldr r0, [r0] - str r1, [r0, #8] - b _0203F8C8 -_0203F404: - ldrsb r0, [r4] - mov r1, #0 - bl SetUnkAdvancedTextBoxFn - ldr r0, _0203F8D4 ; =_020AFE78 -#ifdef JAPAN - ldr r1, [r0] - ldrb r0, [r1, #0x2c] - cmp r0, #0 - beq _0203F464 - ldrsb r0, [r1] - ldrsh r1, [r1, #0x12] -#else - ldr r2, [r0] - ldrb r0, [r2, #0x2c] - cmp r0, #0 - beq _0203F464 - ldrsh r0, [r2, #0xc] - add r0, r2, r0, lsl #2 - ldr r0, [r0, #0x14] - cmp r0, #1 - ldreqsh r1, [r2, #0x12] - ldrsb r0, [r2] - movne r1, #0 -#endif - bl sub_02030A50 - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r0, [r0] - ldrsb r0, [r0] - bl SetAdvancedTextBoxField0x1C2 - ldr r0, _0203F8D4 ; =_020AFE78 - mov r1, #0 - ldr r0, [r0] - strb r1, [r0, #0x2c] -_0203F464: - add r1, sp, #0xc - mov r0, #0 - bl sub_02006498 - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_02030A18 - ldr r1, _0203F8D4 ; =_020AFE78 - ldr r2, [r1] - strh r0, [r2, #0xc] - ldr r3, [r1] - ldrsh r2, [r3, #0xc] - ldrsh r0, [r3, #0x10] - cmp r0, r2 - strneh r2, [r3, #0x10] - ldrne r0, [r1] - movne r1, #1 - strneb r1, [r0, #0x2c] - bne _0203F8C8 - add r0, r3, r2, lsl #2 - ldr r0, [r0, #0x14] - cmp r0, #1 - ldrsb r0, [r3] - bne _0203F7EC - ldr r1, _0203F8D8 ; =sub_0203F368 - bl SetUnkAdvancedTextBoxFn - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r0, [r0] - ldrsb r0, [r0] - bl GetAdvancedTextBoxFlags2 - ldr r1, _0203F8D4 ; =_020AFE78 - mov r4, r0 - ldr r0, [r1] - ldrsb r0, [r0] - bl sub_02028354 - cmp r0, #3 - beq _0203F508 - bl sub_0203F8EC - cmp r0, #0 - movne r1, #1 - bne _0203F50C -_0203F508: - mov r1, #0 -_0203F50C: - ldr r0, _0203F8D4 ; =_020AFE78 - and r5, r1, #0xff - ldr r0, [r0] - ldrsb r0, [r0] - bl IsAdvancedTextBoxActive - cmp r0, #0 - bne _0203F588 - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_02030908 - cmp r0, #0 - blt _0203F558 - bl sub_0203F8EC - cmp r0, #0 - beq _0203F558 - bl sub_02001808 - cmp r0, #0xa000 - bge _0203F560 -_0203F558: - mov r0, #1 - b _0203F8CC -_0203F560: - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202812C - ldr r0, _0203F8D4 ; =_020AFE78 - mov r1, #3 - ldr r0, [r0] - mov r5, #0 - str r1, [r0, #8] - b _0203F748 -_0203F588: - ldrh r0, [sp, #0xc] - tst r0, #8 - cmpne r5, #0 - beq _0203F5FC - bl sub_0203F8EC - cmp r0, #0 - beq _0203F748 - ldr r0, _0203F8D4 ; =_020AFE78 - mov r1, #0 - ldr r0, [r0] - ldrsb r0, [r0] - bl PlayAdvancedTextBoxInputSound - bl sub_02001808 - cmp r0, #0xa000 - blt _0203F748 - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_02030EF0 - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202812C - ldr r0, _0203F8D4 ; =_020AFE78 - mov r1, #3 - ldr r0, [r0] - mov r5, #0 - str r1, [r0, #8] - b _0203F748 -_0203F5FC: - tst r0, #0x40 - bne _0203F60C - tst r4, #0x40000 - beq _0203F698 -_0203F60C: - cmp r5, #0 - beq _0203F698 - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r2, [r0] - ldrsh r1, [r2, #0x12] - cmp r1, #0 - bne _0203F660 - ldrsh r1, [r2, #0xba] - cmp r1, #0 - beq _0203F748 - sub r1, r1, #1 - strh r1, [r2, #0xba] - ldr r0, [r0] - mov r1, #1 - strb r1, [r0, #0x2c] - ldrh r0, [sp, #0xc] - tst r0, #0x40 - beq _0203F748 - mov r0, #3 - bl PlaySeVolumeWrapper - b _0203F748 -_0203F660: - ldrsb r0, [r2] - bl sub_02030A64 - cmp r0, #0 - bne _0203F680 - tst r4, #0x40000 - bne _0203F680 - mov r0, #3 - bl PlaySeVolumeWrapper -_0203F680: - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r1, [r0] - ldrsh r0, [r1, #0x12] - sub r0, r0, #1 - strh r0, [r1, #0x12] - b _0203F748 -_0203F698: - tst r0, #0x80 - bne _0203F6A8 - tst r4, #0x80000 - beq _0203F748 -_0203F6A8: - cmp r5, #0 - beq _0203F748 - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r3, [r0] - ldrsh r1, [r3, #0x12] - cmp r1, #8 - bne _0203F708 - ldrsh r2, [r3, #0xba] - add r1, r2, #9 - add r1, r3, r1 - ldrb r1, [r1, #0xbc] - cmp r1, #0 - beq _0203F748 - add r1, r2, #1 - strh r1, [r3, #0xba] - ldr r0, [r0] - mov r1, #1 - strb r1, [r0, #0x2c] - ldrh r0, [sp, #0xc] - tst r0, #0x80 - beq _0203F748 - mov r0, #3 - bl PlaySeVolumeWrapper - b _0203F748 -_0203F708: - ldrsb r0, [r3] - bl sub_02030A64 - cmp r0, #8 - bne _0203F728 - tst r4, #0x80000 - bne _0203F728 - mov r0, #3 - bl PlaySeVolumeWrapper -_0203F728: - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r2, [r0] - ldrsh r0, [r2, #0x12] - add r1, r0, #1 - add r0, r2, r1 - ldrb r0, [r0, #0xbc] - cmp r0, #0 - strneh r1, [r2, #0x12] -_0203F748: - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r1, [r0] - ldrsh r0, [r1, #0xba] - add r0, r0, #9 - add r0, r1, r0 - ldrb r0, [r0, #0xbc] - cmp r0, #0 - ldrsb r0, [r1] - mov r1, #0x40000000 - beq _0203F778 - bl sub_02030A90 - b _0203F77C -_0203F778: - bl sub_02030A74 -_0203F77C: - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r1, [r0] - ldrsh r0, [r1, #0xba] - cmp r0, #0 - ldrsb r0, [r1] - mov r1, #0x20000000 - bne _0203F7A0 - bl sub_02030A74 - b _0203F7A4 -_0203F7A0: - bl sub_02030A90 -_0203F7A4: - cmp r5, #0 - beq _0203F7D8 - ldr r0, _0203F8D4 ; =_020AFE78 - mov r3, #0xc - ldr r0, [r0] - mov r1, #1 - ldrsh r4, [r0, #0x12] - ldrsb r0, [r0] - mov r2, #3 - smulbb r3, r4, r3 - add r3, r3, #0x11 - bl sub_02030978 - b _0203F8C8 -_0203F7D8: - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_020288DC - b _0203F8C8 -_0203F7EC: - mov r1, #0x20000000 - bl sub_02030A74 - ldr r0, _0203F8D4 ; =_020AFE78 - mov r1, #0x40000000 - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_02030A74 - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r0, [r0] - ldrsb r0, [r0] - bl IsAdvancedTextBoxActive - cmp r0, #0 - beq _0203F834 - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_020288DC - b _0203F8C8 -_0203F834: - mov r0, #1 - b _0203F8CC -_0203F83C: - ldrsh r2, [r4, #0xba] - ldrsh r0, [r4, #0x12] - ldr r3, _0203F8DC ; =_0209E912 - ldr r1, _0203F8E0 ; =STATUSES_FULL_DESCRIPTION_STRING_IDS - add r0, r2, r0 - add r0, r4, r0 - ldrb r4, [r0, #0xbc] - mov r2, #0 - ldr r0, _0203F8E4 ; =_0209C8B8 - mov r5, r4, lsl #2 - ldrh r4, [r3, r5] - ldrh r3, [r1, r5] - ldr r1, _0203F8E8 ; =0x00001013 - stmia sp, {r2, r4} - str r2, [sp, #8] - bl CreateScrollBoxSingle - ldr r1, _0203F8D4 ; =_020AFE78 - mov r2, #4 - ldr r3, [r1] - strb r0, [r3, #1] - ldr r0, [r1] - str r2, [r0, #8] - b _0203F8C8 -_0203F898: - ldrsb r0, [r4, #1] - bl IsScrollBoxActive - cmp r0, #0 - bne _0203F8C8 - ldr r0, _0203F8D4 ; =_020AFE78 - ldr r0, [r0] - ldrsb r0, [r0, #1] - bl CloseScrollBox - ldr r0, _0203F8D4 ; =_020AFE78 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #8] -_0203F8C8: - mov r0, #0 -_0203F8CC: - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0203F8D4: .word _020AFE78 -_0203F8D8: .word sub_0203F368 -_0203F8DC: .word _0209E912 -_0203F8E0: .word STATUSES_FULL_DESCRIPTION_STRING_IDS -_0203F8E4: .word _0209C8B8 -_0203F8E8: .word 0x00001013 - arm_func_end sub_0203F398 - - arm_func_start sub_0203F8EC -sub_0203F8EC: ; 0x0203F8EC - ldr r0, _0203F924 ; =_020AFE78 - mov r1, #0 - ldr r2, [r0] - b _0203F914 -_0203F8FC: - add r0, r2, r1 - ldrb r0, [r0, #0xbc] - cmp r0, #0 - movne r0, #1 - bxne lr - add r1, r1, #1 -_0203F914: - cmp r1, #0x1e - blt _0203F8FC - mov r0, #0 - bx lr - .align 2, 0 -_0203F924: .word _020AFE78 - arm_func_end sub_0203F8EC - - arm_func_start sub_0203F928 -sub_0203F928: ; 0x0203F928 - stmdb sp!, {r4, lr} - mov r4, r0 - cmp r1, #0 - ldmeqia sp!, {r4, pc} - bl sub_02030908 - ldr r2, _0203F970 ; =_020AFE78 - mov r3, #0xc - ldr ip, [r2] - mov r1, #1 - strh r0, [ip, #0x12] - ldr r2, [r2] - mov r0, r4 - ldrsh ip, [r2, #0x12] - mov r2, #3 - smulbb r3, ip, r3 - add r3, r3, #0x11 - bl sub_02030978 - ldmia sp!, {r4, pc} - .align 2, 0 -_0203F970: .word _020AFE78 - arm_func_end sub_0203F928 - - arm_func_start sub_0203F974 -sub_0203F974: ; 0x0203F974 - ldr r0, _0203F988 ; =_020AFE78 - ldr ip, _0203F98C ; =SetAdvancedTextBoxState5 - ldr r0, [r0] - ldrsb r0, [r0] - bx ip - .align 2, 0 -_0203F988: .word _020AFE78 -_0203F98C: .word SetAdvancedTextBoxState5 - arm_func_end sub_0203F974 - - arm_func_start sub_0203F990 -sub_0203F990: ; 0x0203F990 - stmdb sp!, {r3, lr} - ldr r0, _0203F9C8 ; =_020AFE78 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - bl CloseAdvancedTextBox - ldr r0, _0203F9C8 ; =_020AFE78 - ldr r0, [r0] - bl MemFree - ldr r0, _0203F9C8 ; =_020AFE78 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0203F9C8: .word _020AFE78 - arm_func_end sub_0203F990 - - arm_func_start sub_0203F9CC -sub_0203F9CC: ; 0x0203F9CC - stmdb sp!, {r3, r4, r5, lr} - ldr r1, _0203FA50 ; =_022AADFC - mov r2, #0 - mov r5, r0 - str r2, [r1] - ldr r4, [r5, #0xb4] - ldr r0, _0203FA54 ; =_022AAE00 - mov r1, r4 - bl GetMonsterName - ldr r0, _0203FA58 ; =_022AAE2A -#ifdef JAPAN - add r1, r4, #0x120 -#else - add r1, r4, #0x124 -#endif - mov r2, #0x22 - bl memcpy - ldrb r2, [r4, #7] - ldr r1, _0203FA50 ; =_022AADFC - mov r0, #0 - strb r2, [r1, #0x2c] - str r5, [r1] - strb r0, [r1, #0x58] - ldrsh r2, [r4, #4] - ldr r0, _0203FA5C ; =0x000001A2 - ldr r3, _0203FA60 ; =_022AAE58 - cmp r2, r0 - moveq r0, #1 - streqb r0, [r1, #0x58] - ldrsh r1, [r4, #2] - ldr r0, _0203FA50 ; =_022AADFC - strh r1, [r0, #0x5a] - add r0, r4, #0x9c - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0203FA50: .word _022AADFC -_0203FA54: .word _022AAE00 -_0203FA58: .word _022AAE2A -_0203FA5C: .word 0x000001A2 -_0203FA60: .word _022AAE58 - arm_func_end sub_0203F9CC - - arm_func_start sub_0203FA64 -sub_0203FA64: ; 0x0203FA64 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x14 - ldr r1, _0203FBBC ; =TEAM_MEMBER_TABLE_PTR - mov sl, r0 - mov r0, #0x44 - smulbb r2, sl, r0 - ldr r1, [r1] - mov r4, #0x46 - ldrb r0, [r1, r2] - add r8, r1, r2 - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - moveq r0, #0 - beq _0203FBB4 - ldr r1, _0203FBC0 ; =_022AADFC - mov r2, #0 - mov r0, sl - str r2, [r1] - bl sub_02056410 - cmp r0, #0 - mov r0, sl - beq _0203FAD4 - bl sub_020564B0 - cmp r0, #0 - movne r4, #0x59 - b _0203FAE4 -_0203FAD4: - bl sub_02056F60 - cmp r0, #0 - movne r4, #0x44 - moveq r4, #0x57 -_0203FAE4: - add r0, sp, #0 - add r1, r8, #0x3a - mov r2, #0xa - bl StrncpySimpleNoPadSafe - ldr r0, _0203FBC4 ; =_022AAE00 - ldr r1, _0203FBC8 ; =_0209C96C - add r3, sp, #0 - and r2, r4, #0xff - bl SprintfStatic__0204174C - ldrsh r1, [r8, #4] - ldr r0, _0203FBC0 ; =_022AADFC - ldr r3, _0203FBCC ; =_022AAE58 - strh r1, [r0, #0x5a] - add r4, r8, #0x14 - ldmia r4, {r0, r1, r2} - stmia r3, {r0, r1, r2} - ldrsh r0, [r8, #4] - mov r1, r4 - bl GetPpIncrease - mov r6, #0 - ldr r5, _0203FBD0 ; =_022AAE2A - ldr r4, _0203FBC0 ; =_022AADFC - mov r7, r0 - mov fp, r6 -_0203FB44: - mov r0, #6 - mla sb, r6, r0, r8 - ldrh r1, [sb, #0x24] - add r0, r5, r6, lsl #3 - bl InitMove - ldrb r1, [sb, #0x22] - add r2, r4, r6, lsl #3 - add r0, r5, r6, lsl #3 - strb r1, [r2, #0x2e] - strh r7, [r2, #0x30] - strb fp, [r2, #0x34] - ldrb r1, [sb, #0x26] - strb r1, [r2, #0x35] - bl GetMaxPp - add r1, r6, #1 - add r2, r4, r6, lsl #3 - mov r1, r1, lsl #0x10 - mov r6, r1, lsr #0x10 - strb r0, [r2, #0x34] - cmp r6, #4 - blo _0203FB44 - mov r0, sl - bl sub_020564B0 - ldr r1, _0203FBC0 ; =_022AADFC - strb r0, [r1, #0x2c] - ldrsh r0, [r8, #4] - bl sub_02041724 - mov r0, #1 -_0203FBB4: - add sp, sp, #0x14 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0203FBBC: .word TEAM_MEMBER_TABLE_PTR -_0203FBC0: .word _022AADFC -_0203FBC4: .word _022AAE00 -_0203FBC8: .word _0209C96C -_0203FBCC: .word _022AAE58 -_0203FBD0: .word _022AAE2A - arm_func_end sub_0203FA64 - - arm_func_start sub_0203FBD4 -sub_0203FBD4: ; 0x0203FBD4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x14 - ldr r1, _0203FCFC ; =TEAM_MEMBER_TABLE_PTR - mov r2, #0x68 - ldr r1, [r1] - ldr r3, _0203FD00 ; =_022AADFC - add r1, r1, #0x9000 - ldr r1, [r1, #0x84c] - mov r4, #0 - smlabb r8, r0, r2, r1 - str r4, [r3] - ldrsh r0, [r8, #8] - sub r1, r4, #1 - cmp r0, r1 - streqb r4, [r3, #0x2c] - beq _0203FC20 - bl sub_020564B0 - ldr r1, _0203FD00 ; =_022AADFC - strb r0, [r1, #0x2c] -_0203FC20: - ldr r0, _0203FD00 ; =_022AADFC - add r1, r8, #0x5e - ldrb r0, [r0, #0x2c] - mov r2, #0xa - cmp r0, #0 - movne r4, #0x59 - add r0, sp, #0 - moveq r4, #0x46 - bl StrncpySimpleNoPadSafe - ldr r0, _0203FD04 ; =_022AAE00 - ldr r1, _0203FD08 ; =_0209C96C - add r3, sp, #0 - and r2, r4, #0xff - bl SprintfStatic__0204174C - ldrsh r0, [r8, #0xc] - add r1, r8, #0x4c - bl GetPpIncrease - ldr r5, _0203FD0C ; =_022AAE2A - ldr r4, _0203FD00 ; =_022AADFC - mov r7, r0 - mov r6, #0 -_0203FC74: - add r0, r8, r6, lsl #3 - ldrh r1, [r0, #0x20] - add r0, r5, r6, lsl #3 - bl InitMove - add r3, r8, r6, lsl #3 - ldrb r1, [r3, #0x1c] - add r2, r4, r6, lsl #3 - add r0, r5, r6, lsl #3 - strb r1, [r2, #0x2e] - strh r7, [r2, #0x30] - ldrb r1, [r3, #0x22] - strb r1, [r2, #0x34] - ldrb r1, [r3, #0x23] - strb r1, [r2, #0x35] - bl GetMaxPp - add r1, r6, #1 - add r2, r4, r6, lsl #3 - mov r1, r1, lsl #0x10 - mov r6, r1, lsr #0x10 - strb r0, [r2, #0x34] - cmp r6, #4 - blo _0203FC74 - ldrsh r0, [r8, #0xc] - bl sub_02041724 - ldrsh r1, [r8, #0xc] - ldr r0, _0203FD00 ; =_022AADFC - ldr r3, _0203FD10 ; =_022AAE58 - strh r1, [r0, #0x5a] - add r0, r8, #0x4c - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - mov r0, #1 - add sp, sp, #0x14 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0203FCFC: .word TEAM_MEMBER_TABLE_PTR -_0203FD00: .word _022AADFC -_0203FD04: .word _022AAE00 -_0203FD08: .word _0209C96C -_0203FD0C: .word _022AAE2A -_0203FD10: .word _022AAE58 - arm_func_end sub_0203FBD4 - - arm_func_start sub_0203FD14 -sub_0203FD14: ; 0x0203FD14 - ldr ip, _0203FD24 ; =InitMove - mov r1, r0 - ldr r0, _0203FD28 ; =LAST_NEW_MOVE - bx ip - .align 2, 0 -_0203FD24: .word InitMove -_0203FD28: .word LAST_NEW_MOVE - arm_func_end sub_0203FD14 - - arm_func_start sub_0203FD2C -sub_0203FD2C: ; 0x0203FD2C - ldr r0, _0203FD34 ; =LAST_NEW_MOVE - bx lr - .align 2, 0 -_0203FD34: .word LAST_NEW_MOVE - arm_func_end sub_0203FD2C - - arm_func_start sub_0203FD38 -sub_0203FD38: ; 0x0203FD38 - ldr r0, _0203FD40 ; =_022AAE2A - bx lr - .align 2, 0 -_0203FD40: .word _022AAE2A - arm_func_end sub_0203FD38 - - arm_func_start sub_0203FD44 -sub_0203FD44: ; 0x0203FD44 - stmdb sp!, {r4, lr} - ldr r4, [r0, #0xb4] - ldr r1, _0203FD74 ; =_022AAE2A -#ifdef JAPAN - add r0, r4, #0x120 -#else - add r0, r4, #0x124 -#endif - mov r2, #0x22 - bl memcpy - ldr r1, _0203FD78 ; =_022AADFC - ldr r0, _0203FD7C ; =_020AFE7C - ldrb r1, [r1, #0x2c] - strb r1, [r4, #7] - ldrsh r0, [r0, #2] - ldmia sp!, {r4, pc} - .align 2, 0 -_0203FD74: .word _022AAE2A -_0203FD78: .word _022AADFC -_0203FD7C: .word _020AFE7C - arm_func_end sub_0203FD44 - - arm_func_start sub_0203FD80 -sub_0203FD80: ; 0x0203FD80 - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _0203FDE0 ; =TEAM_MEMBER_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - ldr ip, _0203FDE4 ; =_022AADFC - mla r5, r0, r1, r2 - mov r4, #0 - mov r0, #6 -_0203FDA0: - mla lr, r4, r0, r5 - add r3, ip, r4, lsl #3 - ldrb r2, [r3, #0x2e] - add r1, r4, #1 - mov r1, r1, lsl #0x10 - strb r2, [lr, #0x22] - ldrh r2, [r3, #0x32] - mov r4, r1, lsr #0x10 - cmp r4, #4 - strh r2, [lr, #0x24] - ldrb r1, [r3, #0x35] - strb r1, [lr, #0x26] - blo _0203FDA0 - ldr r0, _0203FDE8 ; =_020AFE7C - ldrsh r0, [r0, #2] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0203FDE0: .word TEAM_MEMBER_TABLE_PTR -_0203FDE4: .word _022AADFC -_0203FDE8: .word _020AFE7C - arm_func_end sub_0203FD80 - - arm_func_start sub_0203FDEC -sub_0203FDEC: ; 0x0203FDEC - stmdb sp!, {r4, lr} - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetActiveTeamMember - ldr lr, _0203FE54 ; =_022AADFC - mov r4, #0 -_0203FE04: - add ip, lr, r4, lsl #3 - ldrb r2, [ip, #0x2e] - add r3, r0, r4, lsl #3 - add r1, r4, #1 - strb r2, [r3, #0x1c] - ldrh r2, [ip, #0x30] - mov r1, r1, lsl #0x10 - mov r4, r1, lsr #0x10 - strh r2, [r3, #0x1e] - ldrh r1, [ip, #0x32] - cmp r4, #4 - strh r1, [r3, #0x20] - ldrb r1, [ip, #0x34] - strb r1, [r3, #0x22] - ldrb r1, [ip, #0x35] - strb r1, [r3, #0x23] - blo _0203FE04 - ldr r0, _0203FE58 ; =_020AFE7C - ldrsh r0, [r0, #2] - ldmia sp!, {r4, pc} - .align 2, 0 -_0203FE54: .word _022AADFC -_0203FE58: .word _020AFE7C - arm_func_end sub_0203FDEC - - arm_func_start sub_0203FE5C -sub_0203FE5C: ; 0x0203FE5C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #8 - mov r7, r0 - mov r6, r1 - mov r0, #0x3fc - mov r1, #8 - mov r5, r2 - mov r4, r3 - bl MemAlloc - ldr r1, _02040154 ; =_020AFE7C - mvn r2, #1 - str r0, [r1, #8] - strb r2, [r0] - ldr r0, [r1, #0xc] - ldr r2, _02040154 ; =_020AFE7C - cmp r0, r7 - strne r7, [r1, #0xc] - movne r0, #0 - strneh r0, [r1, #2] - ldr r0, _02040154 ; =_020AFE7C - ldr r3, _02040158 ; =0x00000A3E - ldrsh r1, [r0, #4] - mov r7, #0x17 - cmp r1, r6 - strneh r6, [r0, #4] - movne r1, #0 - strneh r1, [r0, #2] - ldr r0, [r2, #8] - mov r1, #0x10 - str r1, [r0, #0x10] - ldr r0, [r2, #8] - str r1, [r0, #8] - ldr r0, [r2, #8] - mov r1, #0 - strh r3, [r0, #0xc] - ldr r0, [r2, #8] - ldr r3, _0204015C ; =_022AAE00 - str r7, [r0, #0x98] - ldr r0, [r2, #8] - str r1, [r0, #0x64] - ldr r0, [r2, #8] - str r3, [r0, #0x4c] - ldr r0, [r2, #8] - strb r1, [r0, #0x3f8] - ldr r0, [r2, #8] - str r4, [r0, #0x3f4] - ldr r0, [r2, #0xc] - cmp r0, #7 - addls pc, pc, r0, lsl #2 - b _0203FF44 -_0203FF24: ; jump table - b _02040084 ; case 0 - b _0203FF44 ; case 1 - b _0203FFAC ; case 2 - b _0204003C ; case 3 - b _0203FF44 ; case 4 - b _0203FF44 ; case 5 - b _0203FFF4 ; case 6 - b _0203FF7C ; case 7 -_0203FF44: - mov r1, #0 - str r1, [sp] - ldr r0, _02040154 ; =_020AFE7C - str r1, [sp, #4] - ldr r2, [r0, #8] - ldr r0, _02040160 ; =_0209C93C - ldr r1, _02040164 ; =0x00401803 - ldr r3, _02040168 ; =sub_020401A8 - add r2, r2, #4 - bl CreateAdvancedTextBox - ldr r1, _02040154 ; =_020AFE7C - ldr r1, [r1, #8] - strb r0, [r1] - b _020400FC -_0203FF7C: - str r1, [sp] - str r1, [sp, #4] - ldr r2, [r2, #8] - ldr r0, _0204016C ; =_0209C94C - ldr r1, _02040170 ; =0x00400800 - ldr r3, _02040168 ; =sub_020401A8 - add r2, r2, #4 - bl CreateAdvancedTextBox - ldr r1, _02040154 ; =_020AFE7C - ldr r1, [r1, #8] - strb r0, [r1] - b _020400FC -_0203FFAC: - ldr r0, [r2, #8] - mov r3, #1 - strb r3, [r0, #0x3f8] - ldr r4, [r2, #8] - ldr r0, _02040174 ; =_0209C92C - add r3, r4, #0x3e0 - str r3, [r4, #0x64] - str r1, [sp] - str r1, [sp, #4] - ldr r2, [r2, #8] - ldr r1, _02040164 ; =0x00401803 - ldr r3, _02040168 ; =sub_020401A8 - add r2, r2, #4 - bl CreateAdvancedTextBox - ldr r1, _02040154 ; =_020AFE7C - ldr r1, [r1, #8] - strb r0, [r1] - b _020400FC -_0203FFF4: - ldr r0, [r2, #8] - mov r3, #1 - strb r3, [r0, #0x3f8] - ldr r4, [r2, #8] - ldr r0, _02040174 ; =_0209C92C - add r3, r4, #0x3e0 - str r3, [r4, #0x64] - str r1, [sp] - str r1, [sp, #4] - ldr r2, [r2, #8] - ldr r1, _02040178 ; =0x00401A03 - ldr r3, _02040168 ; =sub_020401A8 - add r2, r2, #4 - bl CreateAdvancedTextBox - ldr r1, _02040154 ; =_020AFE7C - ldr r1, [r1, #8] - strb r0, [r1] - b _020400FC -_0204003C: - ldr r0, [r2, #8] - mov r3, #1 - strb r3, [r0, #0x3f8] - ldr r4, [r2, #8] - ldr r0, _0204017C ; =_0209C95C - add r3, r4, #0x3e0 - str r3, [r4, #0x64] - str r1, [sp] - str r1, [sp, #4] - ldr r2, [r2, #8] - ldr r1, _02040180 ; =0x00400A00 - ldr r3, _02040168 ; =sub_020401A8 - add r2, r2, #4 - bl CreateAdvancedTextBox - ldr r1, _02040154 ; =_020AFE7C - ldr r1, [r1, #8] - strb r0, [r1] - b _020400FC -_02040084: - cmp r6, #1 - ble _020400C8 - ldr r1, [r2, #8] - mov r0, #1 - str r5, [r1, #4] - str r6, [sp] - str r0, [sp, #4] - ldr r2, [r2, #8] - ldr r0, _02040160 ; =_0209C93C - ldr r1, _02040184 ; =0x00409823 - ldr r3, _02040168 ; =sub_020401A8 - add r2, r2, #4 - bl CreateAdvancedTextBox - ldr r1, _02040154 ; =_020AFE7C - ldr r1, [r1, #8] - strb r0, [r1] - b _020400FC -_020400C8: - ldr r3, [r2, #8] - ldr r0, _02040160 ; =_0209C93C - str r1, [r3, #4] - str r1, [sp] - str r1, [sp, #4] - ldr r2, [r2, #8] - ldr r1, _02040188 ; =0x00401823 - ldr r3, _02040168 ; =sub_020401A8 - add r2, r2, #4 - bl CreateAdvancedTextBox - ldr r1, _02040154 ; =_020AFE7C - ldr r1, [r1, #8] - strb r0, [r1] -_020400FC: - ldr r0, _02040154 ; =_020AFE7C - ldr r0, [r0, #8] - ldrsb r0, [r0] - bl sub_02030A18 - ldr r1, _02040154 ; =_020AFE7C - ldr r1, [r1, #8] - add r1, r1, #0x300 - strh r0, [r1, #0xe8] - mov r0, #1 - bl sub_0204027C - bl PrintMoveOptionMenu - ldr r1, _02040154 ; =_020AFE7C - mov r2, #0 - ldr r0, [r1, #8] - strb r2, [r0, #0x3e5] - ldr r0, [r1, #8] - add r0, r0, #0x300 - strh r2, [r0, #0xe6] - ldr r0, [r1, #8] - ldrsb r0, [r0] - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02040154: .word _020AFE7C -#ifdef JAPAN -_02040158: .word 0x00000879 -#else -_02040158: .word 0x00000A3E -#endif -_0204015C: .word _022AAE00 -_02040160: .word _0209C93C -_02040164: .word 0x00401803 -_02040168: .word sub_020401A8 -_0204016C: .word _0209C94C -_02040170: .word 0x00400800 -_02040174: .word _0209C92C -_02040178: .word 0x00401A03 -_0204017C: .word _0209C95C -_02040180: .word 0x00400A00 -_02040184: .word 0x00409823 -_02040188: .word 0x00401823 - arm_func_end sub_0203FE5C - - arm_func_start sub_0204018C -sub_0204018C: ; 0x0204018C - ldr ip, _02040198 ; =sub_0203FE5C - mov r3, #0 - bx ip - .align 2, 0 -_02040198: .word sub_0203FE5C - arm_func_end sub_0204018C - - arm_func_start sub_0204019C -sub_0204019C: ; 0x0204019C - ldr ip, _020401A4 ; =sub_0203FE5C - bx ip - .align 2, 0 -_020401A4: .word sub_0203FE5C - arm_func_end sub_0204019C - - arm_func_start sub_020401A8 -sub_020401A8: ; 0x020401A8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - bl sub_02027B1C - ldr r4, _02040274 ; =_020AFE7C - mov sb, #0 - ldr r0, [r4, #8] - ldr r7, _02040278 ; =_022AADFC - ldr r0, [r0, #0x10] - mov fp, #8 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 - mov r6, #0xd - mov r5, #0x17 - b _02040250 -_020401E0: - add r0, r7, sb, lsl #3 - ldrb r0, [r0, #0x2e] - tst r0, #2 - add r0, r2, sb, lsl #3 - movne r1, r6 - ldr r3, [r0, #0xa8] - moveq r1, fp - mov r0, sl - add r2, r8, #2 - bl DrawTextInWindow - cmp sb, #0 - ble _02040238 - add r0, r7, sb, lsl #3 - ldrb r0, [r0, #0x2e] - tst r0, #2 - bne _02040238 - mov r0, sl - mov r1, #0x10 - mov r2, r8 - mov r3, #0x7e - str r5, [sp] - bl sub_02025D50 -_02040238: - add r0, r8, #0x10 - add r1, sb, #1 - mov r0, r0, lsl #0x10 - mov r1, r1, lsl #0x10 - mov r8, r0, asr #0x10 - mov sb, r1, asr #0x10 -_02040250: - ldr r2, [r4, #8] - ldrsh r0, [r2, #0xa4] - cmp sb, r0 - blt _020401E0 - mov r0, #1 - bl sub_0204027C - mov r0, sl - bl UpdateWindow - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02040274: .word _020AFE7C -_02040278: .word _022AADFC - arm_func_end sub_020401A8 - - arm_func_start sub_0204027C -sub_0204027C: ; 0x0204027C - cmp r0, #0 - ldrne r0, _020402BC ; =_020AFE7C - movne r3, #2 - ldrne r2, [r0, #8] - ldreq r0, _020402BC ; =_020AFE7C - moveq r3, #1 - ldreq r2, [r0, #8] - movne r1, #1 - str r3, [r2, #0x3ec] - ldr r0, [r0, #8] - moveq r1, #2 - str r1, [r0, #0x3f0] - ldr r0, _020402BC ; =_020AFE7C - ldr r0, [r0, #0xc] - cmp r0, #7 - bx lr - .align 2, 0 -_020402BC: .word _020AFE7C - arm_func_end sub_0204027C - - arm_func_start PrintMoveOptionMenu -PrintMoveOptionMenu: ; 0x020402C0 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x5c - ldr r0, _020407AC ; =_020AFE7C - ldr r2, _020407B0 ; =_022AAE00 - ldr r1, [r0, #8] - str r2, [r1, #0x4c] - ldr r1, [r0, #0xc] - cmp r1, #2 - cmpne r1, #3 - cmpne r1, #6 - beq _020402FC - ldrsh r1, [r0, #2] - cmp r1, #4 - movge r1, #0 - strgeh r1, [r0, #2] -_020402FC: - ldr r0, _020407AC ; =_020AFE7C - ldrsh r0, [r0, #2] - bl sub_020410A4 - ldr r1, _020407AC ; =_020AFE7C - mov r0, #0 - ldr r1, [r1, #8] - strh r0, [r1, #0xa4] -_02040318: - ldr r1, _020407AC ; =_020AFE7C - ldr r2, _020407B4 ; =_022AAE2A - ldr r1, [r1, #8] - mov r3, #0 - add r1, r1, r0 - strb r3, [r1, #0x3e0] - ldrb r1, [r2, r0, lsl #3] - add r4, r2, r0, lsl #3 - tst r1, #1 - movne r3, #1 - tst r3, #0xff - beq _020403B4 - ldr r1, _020407AC ; =_020AFE7C - ldr r3, [r1, #8] - ldrsh r2, [r3, #0xa4] - add r2, r2, #1 - strh r2, [r3, #0xa4] - ldr r5, [r1, #8] - ldrb r1, [r5, #0x3f8] - cmp r1, #0 - ldrne r2, [r5, #0x3f4] - cmpne r2, #0 - beq _020403C8 - ldrh r1, [r4, #4] - b _02040388 -_0204037C: - cmp r3, r1 - beq _02040394 - add r2, r2, #2 -_02040388: - ldrh r3, [r2] - cmp r3, #0 - bne _0204037C -_02040394: - cmp r3, #0 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - addne r1, r5, r0 - movne r2, #3 - strneb r2, [r1, #0x3e0] - b _020403C8 -_020403B4: - ldr r1, _020407AC ; =_020AFE7C - ldrsh r2, [r1, #2] - cmp r0, r2 - moveq r2, #0 - streqh r2, [r1, #2] -_020403C8: - add r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - cmp r0, #4 - blt _02040318 - ldr r1, _020407AC ; =_020AFE7C - mov r0, #0 - ldr r2, [r1, #8] - strb r0, [r2, #0x3e4] - ldr r2, [r1, #8] - ldrb r1, [r2, #0x3f8] - cmp r1, #0 - ldrne r1, [r2, #0x3f4] - cmpne r1, #0 - beq _020404B4 -_02040404: - ldr r1, _020407AC ; =_020AFE7C - ldr r3, _020407B4 ; =_022AAE2A - ldr r2, [r1, #8] - add r2, r2, r0 - ldrb r2, [r2, #0x3e0] - tst r2, #1 - beq _020404A0 - ldrb r2, [r3, r0, lsl #3] - tst r2, #2 - beq _02040464 - sub r6, r0, #1 - mov r5, #3 - ldr r3, _020407B8 ; =_022AADFC - b _0204045C -_0204043C: - ldr r4, [r1, #8] - add r2, r3, r6, lsl #3 - add r4, r4, r6 - strb r5, [r4, #0x3e0] - ldrb r2, [r2, #0x2e] - tst r2, #2 - beq _02040464 - sub r6, r6, #1 -_0204045C: - cmp r6, #0 - bge _0204043C -_02040464: - add r5, r0, #1 - ldr r4, _020407B8 ; =_022AADFC - mov r3, #3 - ldr r1, _020407AC ; =_020AFE7C - b _02040498 -_02040478: - add r2, r4, r5, lsl #3 - ldrb r2, [r2, #0x2e] - tst r2, #2 - beq _020404A0 - ldr r2, [r1, #8] - add r2, r2, r5 - strb r3, [r2, #0x3e0] - add r5, r5, #1 -_02040498: - cmp r5, #4 - blt _02040478 -_020404A0: - add r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - cmp r0, #4 - blt _02040404 -_020404B4: - ldr r0, _020407AC ; =_020AFE7C - mov r8, #0 - ldr r0, [r0, #0xc] - ldr fp, _020407B4 ; =_022AAE2A - cmp r0, #2 - cmpne r0, #3 - cmpne r0, #6 - ldreq r0, _020407AC ; =_020AFE7C - ldr r5, _020407B8 ; =_022AADFC - ldreq r1, [r0, #8] - ldr r4, _020407AC ; =_020AFE7C - ldreqsh r0, [r1, #0xa4] - mov sb, r8 - mov r7, r8 - addeq r0, r0, #1 - streqh r0, [r1, #0xa4] - mov r6, #0x6a -_020404F8: - ldrb r0, [fp, sb, lsl #3] - str r7, [sp] - str r6, [sp, #4] - tst r0, #1 - movne r0, #1 - moveq r0, r7 - strb r7, [sp, #8] - strb r7, [sp, #9] - add sl, fp, sb, lsl #3 - tst r0, #0xff - beq _02040634 - ldrb r0, [r5, #0x2c] - cmp r0, #0 - movne r0, #2 - strne r0, [sp] - moveq r0, #4 - streq r0, [sp] - ldr r0, [r4, #0xc] - cmp r0, #1 - cmpne r0, #5 - bne _02040574 - ldrh r0, [sl, #4] - bl Is2TurnsMove - cmp r0, #0 - movne r0, #1 - strneb r0, [sp, #9] - bne _02040574 - ldrh r0, [sl, #4] - cmp r0, #0x8a - moveq r0, #1 - streqb r0, [sp, #8] -_02040574: - ldr r0, [r4, #0xc] - cmp r0, #0 - cmpne r0, #1 - bne _020405A4 - ldr r0, [r5] - mov r1, sl - mov r2, #1 - bl CanMonsterUseMove - cmp r0, #0 - moveq r0, #1 - streqb r0, [sp, #8] - b _020405B4 -_020405A4: - ldrb r0, [sl, #6] - cmp r0, #0 - moveq r0, #1 - streqb r0, [sp, #8] -_020405B4: - ldr r1, [r4, #8] - ldrb r0, [r1, #0x3f8] - cmp r0, #0 - beq _020405D8 - add r0, r1, sb - ldrb r0, [r0, #0x3e0] - tst r0, #2 - movne r0, #1 - strneb r0, [sp, #8] -_020405D8: - mov r2, sl - add r0, sp, #0xc - mov r1, #0 - add r3, sp, #0 - bl FormatMoveStringMore - mov r0, #0 - bl GetDungeonResultString - mov r1, r0 - ldr r0, [r4, #8] - add r0, r0, #0xe0 - add r0, r0, r8, lsl #7 - bl strcpy - ldr r3, [r4, #8] - add r0, r8, #1 - add r1, r3, #0xe0 - add r2, r1, r8, lsl #7 - add r1, r3, r8, lsl #3 - str r2, [r1, #0xa8] - ldr r1, [r4, #8] - mov r0, r0, lsl #0x10 - add r1, r1, r8, lsl #3 - str r8, [r1, #0xac] - mov r8, r0, asr #0x10 -_02040634: - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov sb, r0, asr #0x10 - cmp sb, #4 - blt _020404F8 - cmp r8, #4 - bne _02040710 - ldr r0, _020407AC ; =_020AFE7C - ldr r0, [r0, #0xc] - cmp r0, #2 - cmpne r0, #3 - cmpne r0, #6 - bne _02040710 - ldr r0, _020407B8 ; =_022AADFC - mov r2, #0 - ldrb r0, [r0, #0x2c] - str r2, [sp] - strb r2, [sp, #8] - strb r2, [sp, #9] - ldr r2, _020407BC ; =LAST_NEW_MOVE - cmp r0, #0 - ldrb r0, [r2] - mov r1, #0x6a - str r1, [sp, #4] - movne r1, #2 - bicne r0, r0, #8 - strne r1, [sp] - moveq r1, #4 - biceq r0, r0, #4 - streq r1, [sp] - strb r0, [r2] - add r0, sp, #0xc - add r3, sp, #0 - mov r1, #0 - bl FormatMoveStringMore - mov r0, #0 - bl GetDungeonResultString - ldr r2, _020407AC ; =_020AFE7C - mov r1, r0 - ldr r0, [r2, #8] - add r0, r0, #0xe0 - add r0, r0, r8, lsl #7 - bl strcpy - ldr r1, _020407AC ; =_020AFE7C - add r0, r8, #1 - ldr r4, [r1, #8] - mov r0, r0, lsl #0x10 - add r2, r4, #0xe0 - add r3, r2, r8, lsl #7 - add r2, r4, r8, lsl #3 - str r3, [r2, #0xa8] - ldr r1, [r1, #8] - add r1, r1, r8, lsl #3 - str r8, [r1, #0xac] - mov r8, r0, asr #0x10 -_02040710: - ldr r0, _020407AC ; =_020AFE7C - mov r4, #0 - ldr r1, [r0, #8] - sub r3, r4, #1 - add r1, r1, r8, lsl #3 - str r4, [r1, #0xa8] - ldr r2, [r0, #8] - sub r1, r4, #2 - add r2, r2, r8, lsl #3 - str r3, [r2, #0xac] - ldr r0, [r0, #8] - ldrsb r0, [r0] - cmp r0, r1 - beq _0204075C - bl sub_020307EC - ldr r0, _020407AC ; =_020AFE7C - ldr r0, [r0, #8] - ldrsb r0, [r0] - bl SetAdvancedTextBoxField0x1C2 -_0204075C: - ldr r0, _020407AC ; =_020AFE7C - ldr r1, [r0, #0xc] - cmp r1, #7 - ldrne r3, [r0, #8] - ldrne r2, [r3, #0x3ec] - ldrne r1, [r3, #0x3f0] - cmpne r2, r1 - beq _020407A4 - str r1, [r3, #0x3ec] - ldr r3, [r0, #8] - ldrsh r1, [r0, #2] - ldr r2, [r3, #0x10] - ldrsb r0, [r3] - add r2, r2, r1, lsl #4 - ldr r1, [r3, #0x3ec] - add r3, r2, #4 - mov r2, #0 - bl sub_02030978 -_020407A4: - add sp, sp, #0x5c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_020407AC: .word _020AFE7C -_020407B0: .word _022AAE00 -_020407B4: .word _022AAE2A -_020407B8: .word _022AADFC -_020407BC: .word LAST_NEW_MOVE - arm_func_end PrintMoveOptionMenu - - arm_func_start sub_020407C0 -sub_020407C0: ; 0x020407C0 - stmdb sp!, {r3, lr} - ldr r0, _020407E8 ; =_020AFE7C - ldr r0, [r0, #8] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _020407E8 ; =_020AFE7C - mov r1, #0 - str r1, [r0, #8] - ldmia sp!, {r3, pc} - .align 2, 0 -_020407E8: .word _020AFE7C - arm_func_end sub_020407C0 - - arm_func_start sub_020407EC -sub_020407EC: ; 0x020407EC - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #0x34 - add r1, sp, #0xc - mov r0, #0 - bl GetHeldButtons - add r1, sp, #0xa - mov r0, #0 - bl GetPressedButtons - add r1, sp, #8 - mov r0, #0 - bl sub_020063F4 - ldrh r0, [sp, #0xc] - ldr r5, _02040F90 ; =_022AAE2A - tst r0, #0x200 - movne r1, #1 - moveq r1, #0 - and r6, r1, #0xff - ldr r1, _02040F94 ; =_020AFE7C - tst r0, #0x100 - movne r0, #1 - moveq r0, #0 - ldr r3, [r1, #8] - and r7, r0, #0xff - add r0, r3, #0x300 - ldrsh r2, [r0, #0xe6] - cmp r2, #0 - ble _0204087C - sub r2, r2, #1 - strh r2, [r0, #0xe6] - ldr r0, [r1, #8] - add r0, r0, #0x300 - ldrsh r0, [r0, #0xe6] - cmp r0, #0 - moveq r0, #2 - movne r0, #0 - b _02040F88 -_0204087C: - ldrsb r0, [r3] - bl IsAdvancedTextBoxActive - cmp r0, #0 - bne _020408B8 - ldr r0, _02040F94 ; =_020AFE7C - ldr r0, [r0, #8] - ldrsb r0, [r0] - bl sub_02030940 - mvn r1, #0 - cmp r0, r1 - bne _020408B8 - mov r0, #1 - bl PlaySeVolumeWrapper - mov r0, #1 - b _02040F88 -_020408B8: - ldr r0, _02040F94 ; =_020AFE7C - ldr r0, [r0, #0xc] - cmp r0, #9 - addls pc, pc, r0, lsl #2 - b _02040958 -_020408CC: ; jump table - b _02040958 ; case 0 - b _0204094C ; case 1 - b _0204090C ; case 2 - b _020408F4 ; case 3 - b _02040958 ; case 4 - b _02040958 ; case 5 - b _0204090C ; case 6 - b _0204093C ; case 7 - b _02040924 ; case 8 - b _0204090C ; case 9 -_020408F4: - ldrh r0, [sp, #0xa] - mov r6, #0 - mov r7, r6 - bic r0, r0, #6 - strh r0, [sp, #0xa] - b _02040958 -_0204090C: - ldrh r0, [sp, #0xa] - mov r6, #0 - mov r7, r6 - bic r0, r0, #4 - strh r0, [sp, #0xa] - b _02040958 -_02040924: - ldrh r0, [sp, #0xa] - mov r6, #0 - mov r7, r6 - bic r0, r0, #4 - strh r0, [sp, #0xa] - b _02040958 -_0204093C: - mov r6, #0 - mov r7, r6 - strh r6, [sp, #0xa] - b _02040958 -_0204094C: - ldrh r0, [sp, #8] - bic r0, r0, #0x30 - strh r0, [sp, #8] -_02040958: - ldr r0, _02040F94 ; =_020AFE7C - ldr r0, [r0, #8] - ldrb r0, [r0, #0x3e5] - cmp r0, #0 - beq _02040980 - bl PrintMoveOptionMenu - ldr r0, _02040F94 ; =_020AFE7C - mov r1, #0 - ldr r0, [r0, #8] - strb r1, [r0, #0x3e5] -_02040980: - ldrh r0, [sp, #8] - tst r0, #0x80 - beq _02040A44 - bl sub_02041178 - cmp r7, #0 - beq _020409E4 - ldr r1, _02040F94 ; =_020AFE7C - ldr r0, _02040F90 ; =_022AAE2A - ldrsh r1, [r1, #2] - bl sub_02013E54 - ldr r1, _02040F94 ; =_020AFE7C - mov r0, r0, lsl #0x10 - ldrsh r1, [r1, #2] - mov r4, r0, asr #0x10 - cmp r1, r0, asr #16 - beq _020409D8 - mov r0, #3 - bl PlaySeVolumeWrapper - ldr r1, _02040F94 ; =_020AFE7C - mov r0, #3 - strh r4, [r1, #2] - b _02040F88 -_020409D8: - mov r0, #2 - bl PlaySeVolumeWrapper - b _02040A44 -_020409E4: - mov r0, #3 - bl PlaySeVolumeWrapper - ldr r0, _02040F94 ; =_020AFE7C - ldr r1, [r0, #8] - ldrsh r2, [r0, #2] - ldrsh r1, [r1, #0xa4] - add r0, r2, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 - b _02040A24 -_02040A0C: - ldrb r0, [r5, r3, lsl #3] - tst r0, #2 - beq _02040A2C - add r0, r3, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 -_02040A24: - cmp r2, r1 - blt _02040A0C -_02040A2C: - cmp r3, r1 - ldr r1, _02040F94 ; =_020AFE7C - movge r3, #0 - mov r0, #9 - strh r3, [r1, #2] - b _02040F88 -_02040A44: - ldrh r0, [sp, #8] - tst r0, #0x40 - beq _02040B10 - bl sub_02041178 - cmp r7, #0 - beq _02040AA8 - ldr r1, _02040F94 ; =_020AFE7C - ldr r0, _02040F90 ; =_022AAE2A - ldrsh r1, [r1, #2] - bl sub_02013F58 - ldr r1, _02040F94 ; =_020AFE7C - mov r0, r0, lsl #0x10 - ldrsh r1, [r1, #2] - mov r4, r0, asr #0x10 - cmp r1, r0, asr #16 - beq _02040A9C - mov r0, #3 - bl PlaySeVolumeWrapper - ldr r1, _02040F94 ; =_020AFE7C - mov r0, #4 - strh r4, [r1, #2] - b _02040F88 -_02040A9C: - mov r0, #2 - bl PlaySeVolumeWrapper - b _02040B10 -_02040AA8: - mov r0, #3 - bl PlaySeVolumeWrapper - ldr r0, _02040F94 ; =_020AFE7C - ldrsh r1, [r0, #2] - cmp r1, #0 - subgt r0, r1, #1 - ldrle r0, [r0, #8] - ldrlesh r0, [r0, #0xa4] - suble r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r2, r0, asr #0x10 - b _02040AF0 -_02040AD8: - ldrb r0, [r5, r2, lsl #3] - tst r0, #2 - beq _02040AF8 - sub r0, r2, #1 - mov r0, r0, lsl #0x10 - mov r2, r0, asr #0x10 -_02040AF0: - cmp r1, #0 - bge _02040AD8 -_02040AF8: - ldr r1, _02040F94 ; =_020AFE7C - cmp r2, #0 - movlt r2, #0 - mov r0, #9 - strh r2, [r1, #2] - b _02040F88 -_02040B10: - mov r4, #0 - bl sub_0204AE60 - cmp r0, #0 - add r0, sp, #0x10 - beq _02040B2C - bl GetReleasedStylus - b _02040B30 -_02040B2C: - bl sub_02006BFC -_02040B30: - ldrh r0, [sp, #0x10] - tst r0, #0x40 - beq _02040C38 - tst r0, #2 - ldrne r0, _02040F94 ; =_020AFE7C - ldrne r0, [r0, #0xc] - cmpne r0, #7 - beq _02040C38 - cmp r0, #2 - cmpne r0, #3 - cmpne r0, #6 - bne _02040B68 - mov r1, #0x70 - b _02040B6C -_02040B68: - mov r1, #0x60 -_02040B6C: - ldr r0, [sp, #0x14] - cmp r0, #0x10 - blt _02040C38 - cmp r0, #0xa0 - bge _02040C38 - ldr r0, [sp, #0x18] - cmp r0, #0x20 - blt _02040C38 - cmp r0, r1 - bge _02040C38 - sub r1, r0, #0x20 - mov r0, r1, asr #3 - add r0, r1, r0, lsr #28 - mov r0, r0, lsl #0xc - ldr r2, _02040F94 ; =_020AFE7C - mov r1, r0, asr #0x10 - ldr r5, [r2, #8] - add r7, r1, #1 - mov r3, #0 - mvn r2, #0 - b _02040BDC -_02040BC0: - add r0, r5, r3, lsl #3 - ldr r0, [r0, #0xac] - cmp r0, r2 - beq _02040BE4 - add r0, r3, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 -_02040BDC: - cmp r3, r7 - blt _02040BC0 -_02040BE4: - cmp r3, r1 - ble _02040C38 - ldr r0, _02040F90 ; =_022AAE2A - ldrb r0, [r0, r1, lsl #3] - tst r0, #2 - bne _02040C38 - mov r0, r1, lsl #4 - ldr r3, _02040F94 ; =_020AFE7C - add r0, r0, #0x20 - mov r2, r0, lsl #0x10 - mov r0, #0x10 - ldr r4, _02040F98 ; =_0209C928 - strh r1, [r3, #2] - mov r3, r0 - str r4, [sp] - mov r4, #0x40 - mov r1, r2, asr #0x10 - mov r2, #0x90 - str r4, [sp, #4] - mov r4, #1 - bl sub_0202A2A4 -_02040C38: - ldr r0, _02040F94 ; =_020AFE7C - ldr r5, [r0, #8] - ldrsb r0, [r5] - bl sub_02030A18 - add r1, r5, #0x300 - ldrsh r1, [r1, #0xe8] - cmp r1, r0 - beq _02040C90 - mov r0, #4 - bl PlaySeVolumeWrapper - ldr r0, _02040F94 ; =_020AFE7C - mov r1, #0 - strh r1, [r0, #2] - ldr r0, [r0, #8] - ldrsb r0, [r0] - bl sub_02030A18 - ldr r1, _02040F94 ; =_020AFE7C - ldr r1, [r1, #8] - add r1, r1, #0x300 - strh r0, [r1, #0xe8] - mov r0, #5 - b _02040F88 -_02040C90: - ldrh r0, [sp, #0xa] - tst r0, #2 - beq _02040CAC - mov r0, #1 - bl PlaySeVolumeWrapper - mov r0, #1 - b _02040F88 -_02040CAC: - tst r0, #4 - beq _02040D0C - ldr r0, _02040F9C ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldr r0, _02040F94 ; =_020AFE7C - ldr r1, [r0, #0xc] - cmp r1, #3 - addls pc, pc, r1, lsl #2 - b _02040CF4 -_02040CD4: ; jump table - b _02040CE4 ; case 0 - b _02040CE4 ; case 1 - b _02040CE4 ; case 2 - b _02040CE4 ; case 3 -_02040CE4: - ldr r0, [r0, #8] - ldrsb r0, [r0] - bl sub_02030EF0 - b _02040D04 -_02040CF4: - bl sub_02041178 - ldr r0, _02040F94 ; =_020AFE7C - ldrsh r0, [r0, #2] - bl sub_02041000 -_02040D04: - mov r0, #6 - b _02040F88 -_02040D0C: - tst r0, #8 - beq _02040D28 - ldr r0, _02040FA0 ; =0x00003F04 - mov r1, #0x100 - bl sub_02017C74 - mov r0, #7 - b _02040F88 -_02040D28: -#ifndef JAPAN - ldrsb r0, [r5] - bl sub_020308E4 - cmp r0, #0 - bne _02040F84 - ldrh r0, [sp, #0xa] -#endif - tst r0, #0x400 - bne _02040D50 - tst r0, #1 - cmpeq r4, #0 - beq _02040F84 -_02040D50: -#ifdef JAPAN - ldrb r0, [r5, #0x3f8] - cmp r0, #0 - beq _020410EC - ldr r0, _02040F94 ; =_020AFE7C - ldrsh r0, [r0, #2] - add r0, r5, r0 - ldrb r0, [r0, #0x3e0] - tst r0, #1 - bne _02040F70 -_020410EC: - cmp r4, #0 - addne r0, r5, #0x300 -#else - ldr r0, _02040F94 ; =_020AFE7C - mov r2, #0 - ldr r3, [r0, #8] - ldrb r1, [r3, #0x3f8] - cmp r1, #0 - beq _02040D7C - ldrsh r0, [r0, #2] - add r0, r3, r0 - ldrb r0, [r0, #0x3e0] - tst r0, #1 - movne r2, #1 -_02040D7C: - cmp r2, #0 - bne _02040F70 - cmp r4, #0 - addne r0, r3, #0x300 -#endif - movne r1, #6 - strneh r1, [r0, #0xe6] - cmp r6, #0 - beq _02040EC8 - ldr r0, _02040F94 ; =_020AFE7C - ldr r0, [r0, #0xc] - cmp r0, #1 - cmpne r0, #5 - bne _02040EC8 - cmp r4, #0 - ldrne r0, _02040F94 ; =_020AFE7C - movne r1, #0 - ldrne r0, [r0, #8] - addne r0, r0, #0x300 - strneh r1, [r0, #0xe6] - ldr r0, _02040F94 ; =_020AFE7C - ldr r1, [r0, #0xc] - cmp r1, #3 - addls pc, pc, r1, lsl #2 - b _02040E34 -_02040DDC: ; jump table - b _02040DEC ; case 0 - b _02040DEC ; case 1 - b _02040DEC ; case 2 - b _02040DEC ; case 3 -_02040DEC: - ldrsh r0, [r0, #2] - bl sub_02041194 - cmp r0, #0 - bne _02040E10 - ldr r0, _02040F94 ; =_020AFE7C - ldrsh r0, [r0, #2] - bl sub_02041364 - cmp r0, #0 - beq _02040E34 -_02040E10: - ldr r0, _02040F9C ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldr r0, _02040F94 ; =_020AFE7C - ldr r0, [r0, #8] - ldrsb r0, [r0] - bl sub_02030EF0 - mov r0, #8 - b _02040F88 -_02040E34: - ldr r0, _02040F94 ; =_020AFE7C - ldrsh r0, [r0, #2] - bl sub_02041194 - cmp r0, #0 - beq _02040E88 - ldr r0, _02040F94 ; =_020AFE7C - ldr r1, [r0, #0xc] - cmp r1, #5 - ldreqb r0, [r0] - cmpeq r0, #0 - bne _02040E6C - ldr r0, _02040FA4 ; =0x00001308 - bl sub_02017C80 - b _02040E78 -_02040E6C: - ldr r0, _02040F9C ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 -_02040E78: - ldr r0, _02040F94 ; =_020AFE7C - ldrsh r0, [r0, #2] - bl sub_020412B0 - b _02040EC0 -_02040E88: - ldr r0, _02040F94 ; =_020AFE7C - ldrsh r0, [r0, #2] - bl sub_02041364 - cmp r0, #0 - beq _02040EB8 - ldr r0, _02040F9C ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldr r0, _02040F94 ; =_020AFE7C - ldrsh r0, [r0, #2] - bl sub_02041394 - b _02040EC0 -_02040EB8: - mov r0, #2 - bl PlaySeVolumeWrapper -_02040EC0: - bl sub_02041178 - b _02040F84 -_02040EC8: - cmp r4, #0 - beq _02040EEC - mov r0, #0 - bl PlaySeVolumeWrapper - ldr r0, _02040F94 ; =_020AFE7C - ldr r0, [r0, #8] - ldrsb r0, [r0] - bl sub_02030EF0 - b _02040F18 -_02040EEC: - ldrh r0, [sp, #0xa] - tst r0, #0x400 - mov r0, #0 - beq _02040F14 - bl PlaySeVolumeWrapper - ldr r0, _02040F94 ; =_020AFE7C - ldr r0, [r0, #8] - ldrsb r0, [r0] - bl sub_02030EF0 - b _02040F18 -_02040F14: - bl PlaySeVolumeWrapper -_02040F18: - ldr r0, _02040F94 ; =_020AFE7C - mov r1, #2 - ldr r3, [r0, #8] - mov r2, #0 - str r1, [r3, #0x3ec] - ldr r3, [r0, #8] - str r1, [r3, #0x3f0] - ldr r6, [r0, #8] - ldrsh r3, [r0, #2] - ldr r5, [r6, #0x10] - ldrsb r0, [r6] - add r3, r5, r3, lsl #4 - add r3, r3, #4 - bl sub_02030978 - ldr r0, _02040F94 ; =_020AFE7C - ldr r0, [r0, #8] - ldrsb r0, [r0] - bl UpdateWindow - cmp r4, #0 - bne _02040F84 - mov r0, #2 - b _02040F88 -_02040F70: - mov r0, #2 - bl PlaySeVolumeWrapper - cmp r4, #0 - beq _02040F84 - bl sub_02041178 -_02040F84: - mov r0, #0 -_02040F88: - add sp, sp, #0x34 - ldmia sp!, {r4, r5, r6, r7, pc} - .align 2, 0 -_02040F90: .word _022AAE2A -_02040F94: .word _020AFE7C -_02040F98: .word _0209C928 -_02040F9C: .word 0x00003F07 -_02040FA0: .word 0x00003F04 -_02040FA4: .word 0x00001308 - arm_func_end sub_020407EC - - arm_func_start sub_02040FA8 -sub_02040FA8: ; 0x02040FA8 - ldr r0, _02040FF4 ; =_022AADFC - ldrb r0, [r0, #0x2c] - cmp r0, #0 - beq _02040FD0 - ldr r0, _02040FF8 ; =_020AFE7C - ldr r1, _02040FFC ; =_022AAE2A - ldrsh r0, [r0, #2] - ldrb r0, [r1, r0, lsl #3] - tst r0, #8 - b _02040FE4 -_02040FD0: - ldr r0, _02040FF8 ; =_020AFE7C - ldr r1, _02040FFC ; =_022AAE2A - ldrsh r0, [r0, #2] - ldrb r0, [r1, r0, lsl #3] - tst r0, #4 -_02040FE4: - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_02040FF4: .word _022AADFC -_02040FF8: .word _020AFE7C -_02040FFC: .word _022AAE2A - arm_func_end sub_02040FA8 - - arm_func_start sub_02041000 -sub_02041000: ; 0x02041000 - stmdb sp!, {r4, lr} - mov r4, r0 - bl sub_02041178 - ldr r2, _0204108C ; =_022AADFC - ldrb r0, [r2, #0x2c] - cmp r0, #0 - beq _02041078 - ldr r1, _02041090 ; =_022AAE2A - ldrb r0, [r1, r4, lsl #3] - tst r0, #8 - eorne r0, r0, #8 - strneb r0, [r1, r4, lsl #3] - ldmneia sp!, {r4, pc} - mov r3, #0 -_02041038: - add r0, r2, r3, lsl #3 - ldrb r0, [r0, #0x2e] - tst r0, #8 - bne _02041050 - cmp r3, r4 - bne _02041060 -_02041050: - add r1, r2, r3, lsl #3 - ldrb r0, [r1, #0x2e] - eor r0, r0, #8 - strb r0, [r1, #0x2e] -_02041060: - add r0, r3, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 - cmp r3, #4 - blt _02041038 - ldmia sp!, {r4, pc} -_02041078: - ldr r1, _02041090 ; =_022AAE2A - ldrb r0, [r1, r4, lsl #3] - eor r0, r0, #4 - strb r0, [r1, r4, lsl #3] - ldmia sp!, {r4, pc} - .align 2, 0 -_0204108C: .word _022AADFC -_02041090: .word _022AAE2A - arm_func_end sub_02041000 - - arm_func_start sub_02041094 -sub_02041094: ; 0x02041094 - ldr r0, _020410A0 ; =_020AFE7C - ldrsh r0, [r0, #2] - bx lr - .align 2, 0 -_020410A0: .word _020AFE7C - arm_func_end sub_02041094 - - arm_func_start sub_020410A4 -sub_020410A4: ; 0x020410A4 - ldr r1, _0204114C ; =_020AFE7C - cmp r0, #0 - strh r0, [r1, #2] - movlt r0, #0 - strlth r0, [r1, #2] - ldr r0, _0204114C ; =_020AFE7C - ldrsh r2, [r0, #2] - cmp r2, #4 - blt _02041100 - ldr r1, [r0, #0xc] - cmp r1, #2 - cmpne r1, #3 - arm_func_end sub_020410A4 - - arm_func_start sub_020410D4 -sub_020410D4: ; 0x020410D4 - cmpne r1, #6 - arm_func_end sub_020410D4 - - arm_func_start sub_020410D8 -sub_020410D8: ; 0x020410D8 - bne _020410F8 - arm_func_end sub_020410D8 - - arm_func_start sub_020410DC -sub_020410DC: ; 0x020410DC - cmp r2, #4 - ldreq r0, _0204114C ; =_020AFE7C - moveq r1, #4 - ldrne r0, _0204114C ; =_020AFE7C - movne r1, #0 - strh r1, [r0, #2] - bx lr -_020410F8: - mov r1, #3 - strh r1, [r0, #2] -_02041100: - ldr r2, _02041150 ; =_022AADFC - ldr r0, _0204114C ; =_020AFE7C -_02041108: - ldrsh r1, [r0, #2] - cmp r1, #0 - ldrlt r0, _0204114C ; =_020AFE7C - movlt r1, #0 - strlth r1, [r0, #2] - bxlt lr - add r1, r2, r1, lsl #3 - ldrb r1, [r1, #0x2e] - tst r1, #1 - beq _02041138 - tst r1, #2 - bxeq lr -_02041138: - ldrsh r1, [r0, #2] - sub r1, r1, #1 - strh r1, [r0, #2] - b _02041108 -_02041148: - bx lr - .align 2, 0 -_0204114C: .word _020AFE7C -_02041150: .word _022AADFC - arm_func_end sub_020410DC - - arm_func_start sub_02041154 -sub_02041154: ; 0x02041154 - cmp r0, #4 - ldreq r0, _02041170 ; =_022AADFC - ldrne r1, _02041174 ; =_022AAE2E - ldreqh r0, [r0, #0x54] - movne r0, r0, lsl #3 - ldrneh r0, [r1, r0] - bx lr - .align 2, 0 -_02041170: .word _022AADFC -_02041174: .word _022AAE2E - arm_func_end sub_02041154 - - arm_func_start sub_02041178 -sub_02041178: ; 0x02041178 - ldr r0, _02041190 ; =_020AFE7C - ldr r1, [r0, #8] - cmp r1, #0 - movne r0, #1 - strneb r0, [r1, #0x3e5] - bx lr - .align 2, 0 -_02041190: .word _020AFE7C - arm_func_end sub_02041178 - - arm_func_start sub_02041194 -sub_02041194: ; 0x02041194 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r4, _020412AC ; =_022AAE2A - mov r6, r0 - add r0, r4, r6, lsl #3 - ldrh r0, [r0, #4] - bl IsNot2TurnsMoveOrSketch - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - add r5, r6, #1 - mov r7, #0 - mov r8, #1 - b _0204129C -_020411C8: - ldrb r0, [r4, r5, lsl #3] - tst r0, #1 - movne r0, r8 - moveq r0, r7 - tst r0, #0xff - beq _020412A4 - add r0, r4, r5, lsl #3 - ldrh r0, [r0, #4] - bl IsNot2TurnsMoveOrSketch - cmp r0, #0 - beq _020412A4 - ldrb r0, [r4, r5, lsl #3] - tst r0, #2 - bne _02041298 - add r0, r5, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - b _02041228 -_02041210: - ldrb r1, [r4, r0, lsl #3] - tst r1, #2 - beq _02041230 - add r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 -_02041228: - cmp r0, #4 - blt _02041210 -_02041230: - mov r1, r6, lsl #0x10 - mov r5, r1, asr #0x10 - b _02041288 -_0204123C: - add r1, r5, #1 - mov r1, r1, lsl #0x10 - mov r3, r1, asr #0x10 - add r1, r4, r5, lsl #3 - ldrh r2, [r1, #4] - b _02041274 -_02041254: - add r1, r4, r3, lsl #3 - ldrh r1, [r1, #4] - cmp r2, r1 - moveq r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - add r1, r3, #1 - mov r1, r1, lsl #0x10 - mov r3, r1, asr #0x10 -_02041274: - cmp r3, r0 - blt _02041254 - add r1, r5, #1 - mov r1, r1, lsl #0x10 - mov r5, r1, asr #0x10 -_02041288: - cmp r5, r0 - blt _0204123C - mov r0, #1 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_02041298: - add r5, r5, #1 -_0204129C: - cmp r5, #4 - blt _020411C8 -_020412A4: - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_020412AC: .word _022AAE2A - arm_func_end sub_02041194 - - arm_func_start sub_020412B0 -sub_020412B0: ; 0x020412B0 - stmdb sp!, {r4, lr} - mov r4, r0 - bl sub_02041194 - cmp r0, #0 - ldmeqia sp!, {r4, pc} - add r1, r4, #1 - ldr r0, _02041358 ; =_022AAE2A - mov r3, #0 - mov ip, #1 - b _0204133C -_020412D8: - ldrb r2, [r0, r1, lsl #3] - tst r2, #1 - movne r2, ip - moveq r2, r3 - tst r2, #0xff - beq _02041344 - ldrb r2, [r0, r1, lsl #3] - tst r2, #2 - bne _02041338 - ldr r2, _0204135C ; =_022AADFC - ldr lr, _02041358 ; =_022AAE2A - ldrb r2, [r2, #0x2c] - cmp r2, #0 - ldrne r3, _02041358 ; =_022AAE2A - ldrneb r2, [r3, r1, lsl #3] - bicne r2, r2, #8 - strneb r2, [r3, r1, lsl #3] - ldrb ip, [lr, r1, lsl #3] - ldr r2, _02041360 ; =_020AFE7C - mov r3, #1 - strb r3, [r2] - bic r2, ip, #4 - strb r2, [lr, r1, lsl #3] - b _02041344 -_02041338: - add r1, r1, #1 -_0204133C: - cmp r1, #4 - blt _020412D8 -_02041344: - ldrb r2, [r0, r1, lsl #3] - orr r2, r2, #2 - strb r2, [r0, r1, lsl #3] - bl sub_02041178 - ldmia sp!, {r4, pc} - .align 2, 0 -_02041358: .word _022AAE2A -_0204135C: .word _022AADFC -_02041360: .word _020AFE7C - arm_func_end sub_020412B0 - - arm_func_start sub_02041364 -sub_02041364: ; 0x02041364 - cmp r0, #3 - ldr r1, _02041390 ; =_022AAE2A - moveq r0, #0 - bxeq lr - add r0, r0, #1 - ldrb r0, [r1, r0, lsl #3] - tst r0, #2 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_02041390: .word _022AAE2A - arm_func_end sub_02041364 - - arm_func_start sub_02041394 -sub_02041394: ; 0x02041394 - stmdb sp!, {r4, lr} - mov r4, r0 - bl sub_02041364 - cmp r0, #0 - ldmeqia sp!, {r4, pc} - add ip, r4, #1 - ldr r3, _020413FC ; =_022AAE2A - mov r1, #0 - mov r2, #1 - b _020413EC -_020413BC: - ldrb r0, [r3, ip, lsl #3] - tst r0, #1 - movne r0, r2 - moveq r0, r1 - tst r0, #0xff - beq _020413F4 - ldrb r0, [r3, ip, lsl #3] - tst r0, #2 - beq _020413F4 - eor r0, r0, #2 - strb r0, [r3, ip, lsl #3] - add ip, ip, #1 -_020413EC: - cmp ip, #4 - blt _020413BC -_020413F4: - bl sub_02041178 - ldmia sp!, {r4, pc} - .align 2, 0 -_020413FC: .word _022AAE2A - arm_func_end sub_02041394 - - arm_func_start sub_02041400 -sub_02041400: ; 0x02041400 - ldr r0, _02041410 ; =_020AFE7C - mov r1, #0 - strb r1, [r0] - bx lr - .align 2, 0 -_02041410: .word _020AFE7C - arm_func_end sub_02041400 - - arm_func_start sub_02041414 -sub_02041414: ; 0x02041414 - ldr r0, _02041420 ; =_020AFE7C - ldrb r0, [r0] - bx lr - .align 2, 0 -_02041420: .word _020AFE7C - arm_func_end sub_02041414 - - arm_func_start sub_02041424 -sub_02041424: ; 0x02041424 - cmp r0, #0 - movgt r0, #1 - bxgt lr - mov ip, #1 - ldr r3, _02041480 ; =_022AAE2A - mov r1, #0 - mov r2, ip - b _02041470 -_02041444: - ldrb r0, [r3, ip, lsl #3] - tst r0, #1 - movne r0, r2 - moveq r0, r1 - tst r0, #0xff - beq _02041478 - ldrb r0, [r3, ip, lsl #3] - tst r0, #2 - moveq r0, #1 - bxeq lr - add ip, ip, #1 -_02041470: - cmp ip, #4 - blt _02041444 -_02041478: - mov r0, #0 - bx lr - .align 2, 0 -_02041480: .word _022AAE2A - arm_func_end sub_02041424 - - arm_func_start sub_02041484 -sub_02041484: ; 0x02041484 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x20 - ldr r1, _02041594 ; =_020AFE7C - ldr r0, _02041598 ; =_022AAE2A - ldrsh r2, [r1, #2] - mov r1, #0 - mov r3, r1 - strb r1, [r0, r2, lsl #3] - add r5, r2, #1 - mov r4, #1 - b _020414DC -_020414B0: - ldrb r2, [r0, r5, lsl #3] - tst r2, #1 - movne r2, r4 - moveq r2, r3 - tst r2, #0xff - beq _020414E4 - ldrb r2, [r0, r5, lsl #3] - tst r2, #2 - beq _020414E4 - strb r1, [r0, r5, lsl #3] - add r5, r5, #1 -_020414DC: - cmp r5, #4 - blt _020414B0 -_020414E4: - mov r6, #0 - mov r7, r6 - mov r4, r6 - mov r5, #1 - add lr, sp, #0 -_020414F8: - ldrb r1, [r0, r7, lsl #3] - tst r1, #1 - movne r1, r5 - moveq r1, r4 - tst r1, #0xff - beq _02041530 - add ip, r0, r7, lsl #3 - add r3, lr, r6, lsl #3 - mov r2, #4 -_0204151C: - ldrh r1, [ip], #2 - subs r2, r2, #1 - strh r1, [r3], #2 - bne _0204151C - add r6, r6, #1 -_02041530: - add r7, r7, #1 - cmp r7, #4 - blt _020414F8 - mov r2, #0 - add r1, sp, #0 - b _02041550 -_02041548: - strb r2, [r1, r6, lsl #3] - add r6, r6, #1 -_02041550: - cmp r6, #4 - blt _02041548 - mov r4, #0 - add lr, sp, #0 -_02041560: - add ip, lr, r4, lsl #3 - add r3, r0, r4, lsl #3 - mov r2, #4 -_0204156C: - ldrh r1, [ip], #2 - subs r2, r2, #1 - strh r1, [r3], #2 - bne _0204156C - add r4, r4, #1 - cmp r4, #4 - blt _02041560 - bl sub_02041178 - add sp, sp, #0x20 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02041594: .word _020AFE7C -_02041598: .word _022AAE2A - arm_func_end sub_02041484 - - arm_func_start sub_0204159C -sub_0204159C: ; 0x0204159C - ldr r0, _020415B8 ; =_022AADFC - ldrb r0, [r0, #0x58] - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_020415B8: .word _022AADFC - arm_func_end sub_0204159C - - arm_func_start sub_020415BC -sub_020415BC: ; 0x020415BC - mov r3, #0 - ldr ip, _02041610 ; =_022AAE2A - mov r1, r3 - mov r2, #1 - b _020415F4 -_020415D0: - ldrb r0, [ip, r3, lsl #3] - tst r0, #1 - movne r0, r2 - moveq r0, r1 - tst r0, #0xff - beq _020415FC - add r0, r3, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 -_020415F4: - cmp r3, #4 - blt _020415D0 -_020415FC: - cmp r3, #4 - movge r0, #1 - movlt r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_02041610: .word _022AAE2A - arm_func_end sub_020415BC - - arm_func_start sub_02041614 -sub_02041614: ; 0x02041614 - stmdb sp!, {r3, r4, r5, lr} - mov r5, #0 - ldr r4, _020416B0 ; =_022AAE2A - mov r2, r5 - mov r3, #1 - b _02041694 -_0204162C: - ldrb r1, [r4, r5, lsl #3] - tst r1, #1 - movne r1, r3 - moveq r1, r2 - tst r1, #0xff - bne _02041688 - mov r1, #5 - strb r1, [r4, r5, lsl #3] - add r2, r4, r5, lsl #3 - strh r0, [r2, #4] - mov r1, #0 - ldr r0, _020416B4 ; =_022AADFC - strb r1, [r2, #7] - ldrsh r0, [r0, #0x5a] - ldr r1, _020416B8 ; =_022AAE58 - bl GetPpIncrease - add r1, r4, r5, lsl #3 - strh r0, [r1, #2] - mov r0, r1 - bl GetMaxPp - add r1, r4, r5, lsl #3 - strb r0, [r1, #6] - b _0204169C -_02041688: - add r1, r5, #1 - mov r1, r1, lsl #0x10 - mov r5, r1, asr #0x10 -_02041694: - cmp r5, #4 - blt _0204162C -_0204169C: - cmp r5, #4 - mvnge r5, #0 - mov r0, r5, lsl #0x10 - mov r0, r0, asr #0x10 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020416B0: .word _022AAE2A -_020416B4: .word _022AADFC -_020416B8: .word _022AAE58 - arm_func_end sub_02041614 - - arm_func_start sub_020416BC -sub_020416BC: ; 0x020416BC - stmdb sp!, {r3, lr} - mov r1, r0 - ldr r0, _020416D8 ; =_022AAE2A - bl sub_02013F58 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - ldmia sp!, {r3, pc} - .align 2, 0 -_020416D8: .word _022AAE2A - arm_func_end sub_020416BC - - arm_func_start sub_020416DC -sub_020416DC: ; 0x020416DC - stmdb sp!, {r3, lr} - mov r1, r0 - ldr r0, _020416F8 ; =_022AAE2A - bl sub_02013E54 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - ldmia sp!, {r3, pc} - .align 2, 0 -_020416F8: .word _022AAE2A - arm_func_end sub_020416DC - - arm_func_start sub_020416FC -sub_020416FC: ; 0x020416FC - stmdb sp!, {r3, lr} - ldr r0, _02041720 ; =_020AFE7C - ldr r0, [r0, #8] - ldrsb r0, [r0] - bl sub_020307EC - mov r0, #1 - bl sub_0204027C - bl sub_02041178 - ldmia sp!, {r3, pc} - .align 2, 0 -_02041720: .word _020AFE7C - arm_func_end sub_020416FC - - arm_func_start sub_02041724 -sub_02041724: ; 0x02041724 - stmdb sp!, {r3, lr} - bl IsDeoxys - cmp r0, #0 - ldrne r0, _02041748 ; =_022AADFC - movne r1, #1 - ldreq r0, _02041748 ; =_022AADFC - moveq r1, #0 - strb r1, [r0, #0x58] - ldmia sp!, {r3, pc} - .align 2, 0 -_02041748: .word _022AADFC - arm_func_end sub_02041724 - - arm_func_start SprintfStatic__0204174C -SprintfStatic__0204174C: ; 0x0204174C - 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__0204174C - - arm_func_start sub_02041774 -sub_02041774: ; 0x02041774 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #0x2bc - mov r1, #8 - bl MemAlloc - ldr r1, _020417A4 ; =_020AFE8C - mvn r2, #1 - str r0, [r1] - str r4, [r0, #4] - ldr r0, [r1] - strb r2, [r0] - ldmia sp!, {r4, pc} - .align 2, 0 -_020417A4: .word _020AFE8C - arm_func_end sub_02041774 - - arm_func_start sub_020417A8 -sub_020417A8: ; 0x020417A8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r6, r1 - mov r4, r2 - mov r7, r0 - cmp r4, r6 - mvnge r0, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - ldrb r0, [r7, r4, lsl #3] - tst r0, #1 - mvneq r0, #1 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - mov r0, r3 - bl sub_02041774 - ldr r0, _0204185C ; =_020AFE8C - add r1, r7, r4, lsl #3 - ldr r0, [r0] - mov r2, #8 - add r0, r0, #8 - bl memcpy - add r5, r4, #1 - mov r4, #1 - mov sb, #8 - ldr r8, _0204185C ; =_020AFE8C - b _02041840 -_02041808: - ldrb r0, [r7, r5, lsl #3] - mov r1, r5, lsl #3 - tst r0, #1 - beq _0204183C - tst r0, #2 - beq _02041848 - ldr r0, [r8] - mov r2, sb - add r0, r0, #8 - add r0, r0, r4, lsl #3 - add r1, r7, r1 - bl memcpy - add r4, r4, #1 -_0204183C: - add r5, r5, #1 -_02041840: - cmp r5, r6 - blt _02041808 -_02041848: - ldr r0, _0204185C ; =_020AFE8C - ldr r0, [r0] - strh r4, [r0, #0x28] - bl sub_020418A4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0204185C: .word _020AFE8C - arm_func_end sub_020417A8 - - arm_func_start sub_02041860 -sub_02041860: ; 0x02041860 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, r1 - bl sub_02041774 - ldr r0, _020418A0 ; =_020AFE8C - mov r1, r4 - ldr r0, [r0] - mov r2, #8 - add r0, r0, #8 - bl memcpy - ldr r0, _020418A0 ; =_020AFE8C - mov r1, #1 - ldr r0, [r0] - strh r1, [r0, #0x28] - bl sub_020418A4 - ldmia sp!, {r4, pc} - .align 2, 0 -_020418A0: .word _020AFE8C - arm_func_end sub_02041860 - - arm_func_start sub_020418A4 -sub_020418A4: ; 0x020418A4 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x10 - mov r7, #0 - ldr r6, _020419F0 ; =0x000008D4 - ldr r5, _020419F4 ; =_020AFE8C - mov r4, #0x50 - b _02041950 -_020418C0: - ldr r1, [r5] - mul r8, r7, r4 - add r0, r1, r7, lsl #3 - ldrh r0, [r0, #0xc] - add r1, r1, r7, lsl #1 - add r1, r1, #0x200 - strh r6, [r1, #0xac] - ldr r2, [r5] -#if defined(EUROPE) - add r1, r0, #0x3a4 -#elif defined(JAPAN) - add r1, r0, #0x9f -#else - add r1, r0, #0xa2 -#endif - add r2, r2, r8 - str r0, [r2, #0x3c] - ldr r2, [r5] -#if defined(EUROPE) - add r3, r1, #0x2400 -#elif defined(JAPAN) - add r3, r1, #0x3f00 -#else - add r3, r1, #0x2700 -#endif - add r1, r2, r7, lsl #1 - add r1, r1, #0x200 - strh r3, [r1, #0xb4] - ldr r1, [r5] - add r1, r1, r8 - str r0, [r1, #0x17c] - ldr r0, [r5] - add r0, r0, #8 - add r0, r0, r7, lsl #3 - bl GetMoveRangeId - ldr r1, [r5] - add r1, r1, r8 - str r0, [r1, #0x180] - ldr r0, [r5] - add r0, r0, #8 - add r0, r0, r7, lsl #3 - bl GetMoveType - ldr r2, [r5] - add r1, r7, #1 - add r2, r2, r8 - mov r1, r1, lsl #0x10 - str r0, [r2, #0x184] - mov r7, r1, asr #0x10 -_02041950: - ldr r2, [r5] - ldrsh r3, [r2, #0x28] - cmp r7, r3 - blt _020418C0 - cmp r3, #1 - ble _020419A0 - add r0, r2, #0x2ac - str r0, [sp] - add r0, r2, #0x2c - str r0, [sp, #4] - add r4, r2, #0x2b4 - str r4, [sp, #8] - add r4, r2, #0x16c - ldr r0, _020419F8 ; =_0209C97C - ldr r1, _020419FC ; =0x00001013 - mov r2, #0 - str r4, [sp, #0xc] - bl CreateScrollBoxMulti - ldr r1, _020419F4 ; =_020AFE8C - b _020419D4 -_020419A0: - add r0, r2, #0x2c - str r0, [sp] - add r1, r2, #0x200 - ldrh r3, [r1, #0xb4] - add r2, r2, #0x16c - ldr r0, _020419F8 ; =_0209C97C - str r3, [sp, #4] - str r2, [sp, #8] - ldrh r3, [r1, #0xac] - ldr r1, _020419FC ; =0x00001013 - mov r2, #0 - bl CreateScrollBoxSingle - ldr r1, _020419F4 ; =_020AFE8C -_020419D4: - ldr r1, [r1] - strb r0, [r1] - ldr r0, _020419F4 ; =_020AFE8C - ldr r0, [r0] - ldrsb r0, [r0] - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -_020419F0: .word 0x00001D2C -#else -_020419F0: .word 0x000008D4 -#endif -_020419F4: .word _020AFE8C -_020419F8: .word _0209C97C -_020419FC: .word 0x00001013 - arm_func_end sub_020418A4 - - arm_func_start sub_02041A00 -sub_02041A00: ; 0x02041A00 - ldr r0, _02041A10 ; =_020AFE8C - ldr ip, _02041A14 ; =MemFree - ldr r0, [r0] - bx ip - .align 2, 0 -_02041A10: .word _020AFE8C -_02041A14: .word MemFree - arm_func_end sub_02041A00 - - arm_func_start sub_02041A18 -sub_02041A18: ; 0x02041A18 - stmdb sp!, {r3, lr} - ldr r0, _02041A3C ; =_020AFE8C - ldr r0, [r0] - ldrsb r0, [r0] - bl IsScrollBoxActive - cmp r0, #0 - movne r0, #0 - moveq r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02041A3C: .word _020AFE8C - arm_func_end sub_02041A18 - - arm_func_start PrintIqSkillsMenu -PrintIqSkillsMenu: ; 0x02041A40 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0xa0 - mov r7, r0 - mov r6, r1 - add r0, sp, #8 - mov r1, #0x98 - mov r5, r2 - mov r4, r3 - bl MemZero - mov r1, #0xd -#ifdef JAPAN - ldr r0, _02041ED4 ; =0x00001586 -#else - rsb r0, r1, #0xa80 -#endif - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #8] - mov r1, #0x10 - strh r0, [sp, #0x10] - str r1, [sp, #0x14] - mov r0, #0x840 - mov r1, #8 - bl MemAlloc - ldr r2, _02041B6C ; =_020AFE90 - mov r1, #0x840 - str r0, [r2, #4] - bl MemZero - ldr r3, _02041B6C ; =_020AFE90 - mov r1, r7 - ldr r0, [r3, #4] - mov r2, r5 - str r6, [r0, #0x790] - ldr r0, [r3, #4] - add r0, r0, #0x700 - strh r7, [r0, #0x94] - ldr r0, [r3, #4] - str r5, [r0, #0x798] - ldr r0, [r3, #4] - add r0, r0, #0x64 - bl GetLearnableIqSkills - ldr r3, _02041B6C ; =_020AFE90 - ldr r1, _02041B70 ; =0x80401C33 - ldr r2, [r3, #4] - mov r5, #8 - add r2, r2, #0x700 - strh r0, [r2, #0x8c] - ldr r2, [r3, #4] - ldr r0, _02041B74 ; =_0209C98C - add r2, r2, #0x700 - ldrsh r6, [r2, #0x8c] - ldr r3, _02041B78 ; =sub_0204213C - add r2, sp, #8 - str r6, [sp] - str r5, [sp, #4] - bl CreateAdvancedMenu - ldr r1, _02041B6C ; =_020AFE90 - mov r2, #0 - ldr r3, [r1, #4] - strb r0, [r3] - ldr r0, [r1, #4] - str r2, [r0, #0x6f0] - ldr r0, [r1, #4] - str r2, [r0, #0x6ec] - ldr r0, [r1, #4] - strb r4, [r0, #0x83c] - ldr r0, [r1, #4] - add r0, r0, #0x700 - strh r2, [r0, #0x8e] - ldr r0, [r1, #4] - add r0, r0, #0x14 - bl InitPreprocessorArgs - ldr r0, _02041B6C ; =_020AFE90 - ldr r1, [r0, #4] - add r0, r1, #0x34 - add r0, r0, #0x800 - str r0, [r1, #0x7fc] - add sp, sp, #0xa0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -#ifdef JAPAN -_02041ED4: .word 0x00001586 -#endif -_02041B6C: .word _020AFE90 -_02041B70: .word 0x80401C33 -_02041B74: .word _0209C98C -_02041B78: .word sub_0204213C - arm_func_end PrintIqSkillsMenu - - arm_func_start sub_02041B7C -sub_02041B7C: ; 0x02041B7C - stmdb sp!, {r4, lr} - sub sp, sp, #0xf8 - ldr r1, _020420BC ; =_020AFE90 - ldr r3, [r1, #4] - ldr r0, [r3, #0x6f0] - cmp r0, #8 - addls pc, pc, r0, lsl #2 - b _020420B0 -_02041B9C: ; jump table - b _02041BC0 ; case 0 - b _02041DB0 ; case 1 - b _02041E40 ; case 2 - b _02041EBC ; case 3 - b _02041F30 ; case 4 - b _02041EE4 ; case 5 - b _02041FA4 ; case 6 - b _02041FE8 ; case 7 - b _020420A0 ; case 8 -_02041BC0: - ldrsb r0, [r3] - bl IsAdvancedMenuActive2 - cmp r0, #0 - bne _02041CF8 - ldr r0, _020420BC ; =_020AFE90 - ldr r0, [r0, #4] - ldrsb r0, [r0] - bl GetAdvancedMenuResult - ldr r2, _020420BC ; =_020AFE90 - mvn r1, #0 - ldr r3, [r2, #4] - str r0, [r3, #0x838] - ldr r2, [r2, #4] - ldr r0, [r2, #0x838] - cmp r0, r1 - moveq r0, #8 - streq r0, [r2, #0x6f0] - beq _020420B0 - mov r0, #0 - bl PlaySeVolumeWrapper - ldr r0, _020420BC ; =_020AFE90 - ldr r2, _020420C0 ; =_0209C9B0 - ldrsb r3, [r0] - ldr r1, [r0, #4] - ldr r2, [r2, r3, lsl #3] - str r2, [r1, #0x79c] - ldr r3, [r0, #4] - ldr r2, [r3, #0x838] - ldrb r1, [r3, #0x83c] - add r2, r3, r2 - ldrb r2, [r2, #0x64] - cmp r1, #0 - bne _02041C60 - cmp r2, #0x18 - cmpne r2, #0x1b - beq _02041C60 - add r1, r2, #0xc8 - and r1, r1, #0xff - cmp r1, #1 - bhi _02041C7C -_02041C60: - mov r1, #3 - ldr r0, _020420BC ; =_020AFE90 - strb r1, [r3, #0x834] - ldr r0, [r0, #4] - mov r1, #0 - strb r1, [r0, #0x835] - b _02041C8C -_02041C7C: - mov r1, #0 - strb r1, [r3, #0x834] - ldr r0, [r0, #4] - strb r1, [r0, #0x835] -_02041C8C: - ldr r0, _020420BC ; =_020AFE90 - mov r1, #0x98 - ldr r0, [r0, #4] - add r0, r0, #0x39c - add r0, r0, #0x400 - bl MemZero - ldr r2, _020420BC ; =_020AFE90 - ldr r3, _020420C4 ; =_0209C9AC - ldr r4, [r2, #4] - mov r1, #0 - add r0, r4, #0x34 - add r0, r0, #0x800 - str r0, [r4, #0x7fc] - str r3, [sp] - str r1, [sp, #4] - str r1, [sp, #8] - ldr r2, [r2, #4] - ldr r0, _020420C8 ; =_0209C99C - add r3, r2, #0x39c - ldr r2, _020420CC ; =0x80000233 - add r3, r3, #0x400 - bl sub_02046A20 - ldr r0, _020420BC ; =_020AFE90 - mov r1, #1 - ldr r0, [r0, #4] - str r1, [r0, #0x6f0] - b _020420B0 -_02041CF8: - add r1, sp, #0xc - mov r0, #0 - bl GetPressedButtons - ldrh r0, [sp, #0xc] - tst r0, #8 - beq _02041D54 - ldr r0, _020420D0 ; =0x00003F04 - bl sub_02017C80 - ldr r0, _020420BC ; =_020AFE90 - ldr r0, [r0, #4] - ldrsb r0, [r0] - bl sub_0202C1E4 - ldr r0, _020420BC ; =_020AFE90 - ldr r0, [r0, #4] - ldrsb r0, [r0] - bl GetAdvancedMenuResult - ldr r1, _020420BC ; =_020AFE90 - mov r2, #3 - ldr r3, [r1, #4] - str r0, [r3, #0x838] - ldr r0, [r1, #4] - str r2, [r0, #0x6f0] - b _020420B0 -_02041D54: - tst r0, #4 - beq _020420B0 - ldr r0, _020420BC ; =_020AFE90 - ldr r1, [r0, #4] - ldrb r0, [r1, #0x83c] - cmp r0, #0 - beq _02041D7C - ldr r0, _020420D4 ; =0x00003F03 - bl sub_02017C80 - b _020420B0 -_02041D7C: - ldrsb r0, [r1] - bl sub_0202C1E4 - ldr r0, _020420BC ; =_020AFE90 - ldr r0, [r0, #4] - ldrsb r0, [r0] - bl GetAdvancedMenuResult - ldr r1, _020420BC ; =_020AFE90 - mov r2, #2 - ldr r3, [r1, #4] - str r0, [r3, #0x838] - ldr r0, [r1, #4] - str r2, [r0, #0x6f0] - b _020420B0 -_02041DB0: - bl sub_02046B04 - mov r4, r0 - bl sub_02046BA0 - ldr r1, _020420BC ; =_020AFE90 - add r2, r4, #2 - strb r0, [r1] - cmp r2, #4 - addls pc, pc, r2, lsl #2 - b _020420B0 -_02041DD4: ; jump table - b _02041DF0 ; case 0 - b _020420B0 ; case 1 - b _02041E14 ; case 2 - b _02041E24 ; case 3 - b _02041DE8 ; case 4 -_02041DE8: - mov r0, #0 - bl PlaySeVolumeWrapper -_02041DF0: - ldr r0, _020420BC ; =_020AFE90 - ldr r0, [r0, #4] - ldrsb r0, [r0] - bl ResumeAdvancedMenu - ldr r0, _020420BC ; =_020AFE90 - mov r1, #0 - ldr r0, [r0, #4] - str r1, [r0, #0x6f0] - b _020420B0 -_02041E14: - ldr r0, [r1, #4] - mov r1, #2 - str r1, [r0, #0x6f0] - b _020420B0 -_02041E24: - mov r0, #0 - bl PlaySeVolumeWrapper - ldr r0, _020420BC ; =_020AFE90 - mov r1, #3 - ldr r0, [r0, #4] - str r1, [r0, #0x6f0] - b _020420B0 -_02041E40: - ldr r1, [r3, #0x838] - add r2, r3, #0x64 - ldrb r0, [r2, r1] - cmp r0, #0x18 - bne _02041E60 - mov r0, #2 - bl PlaySeVolumeWrapper - b _02041E98 -_02041E60: - cmp r0, #0x1b - beq _02041E78 - add r0, r0, #0xc8 - and r0, r0, #0xff - cmp r0, #1 - bhi _02041E84 -_02041E78: - mov r0, #2 - bl PlaySeVolumeWrapper - b _02041E98 -_02041E84: - ldrb r1, [r2, r1] - ldr r0, [r3, #0x790] - bl DisableIqSkill - ldr r0, _020420D8 ; =0x00003F07 - bl sub_02017C80 -_02041E98: - ldr r0, _020420BC ; =_020AFE90 - ldr r0, [r0, #4] - ldrsb r0, [r0] - bl ResumeAdvancedMenu - ldr r0, _020420BC ; =_020AFE90 - mov r1, #0 - ldr r0, [r0, #4] - str r1, [r0, #0x6f0] - b _020420B0 -_02041EBC: - ldrsb r0, [r3] - bl sub_0202812C - ldr r1, _020420BC ; =_020AFE90 - mov r2, #5 - ldr r0, [r1, #4] - add r0, r0, #0x700 - strh r2, [r0, #0x8e] - ldr r0, [r1, #4] - str r2, [r0, #0x6f0] - b _020420B0 -_02041EE4: - add r0, r3, #0x700 - ldrsh r2, [r0, #0x8e] - sub r2, r2, #1 - strh r2, [r0, #0x8e] - ldr r2, [r1, #4] - add r0, r2, #0x700 - ldrsh r0, [r0, #0x8e] - cmp r0, #0 - bge _020420B0 - mov r0, #4 - str r0, [r2, #0x6f0] - ldr r0, [r1, #4] - ldrsb r0, [r0] - bl CloseAdvancedMenu - ldr r0, _020420BC ; =_020AFE90 - mvn r1, #1 - ldr r0, [r0, #4] - strb r1, [r0] - b _020420B0 -_02041F30: - add r0, sp, #0xa8 - bl InitPreprocessorArgs - ldr r0, _020420BC ; =_020AFE90 - add ip, sp, #0xa8 - ldr r3, [r0, #4] - ldr r0, _020420DC ; =_020AFE98 - ldr r2, [r3, #0x838] - ldr r1, _020420E0 ; =0x00001013 - add r2, r3, r2 - ldrb lr, [r2, #0x64] - ldr r3, _020420E4 ; =0x00000A77 - mov r2, #0 - str lr, [sp, #0xb8] - str ip, [sp] - ldr ip, [sp, #0xb8] -#if defined(EUROPE) - add ip, ip, #0x32c - add ip, ip, #0x2400 -#elif defined(JAPAN) - add ip, ip, #0x358 - add ip, ip, #0x3c00 -#else - add ip, ip, #0x2a - add ip, ip, #0x2700 -#endif - mov ip, ip, lsl #0x10 - mov ip, ip, lsr #0x10 - str ip, [sp, #4] - str r2, [sp, #8] - bl CreateScrollBoxSingle - ldr r1, _020420BC ; =_020AFE90 - mov r2, #6 - ldr r3, [r1, #4] - strb r0, [r3, #1] - ldr r0, [r1, #4] - str r2, [r0, #0x6f0] - b _020420B0 -_02041FA4: - ldrsb r0, [r3, #1] - bl IsScrollBoxActive - cmp r0, #0 - bne _020420B0 - ldr r0, _020420BC ; =_020AFE90 - ldr r0, [r0, #4] - ldrsb r0, [r0, #1] - bl CloseScrollBox - ldr r0, _020420BC ; =_020AFE90 - mov r3, #7 - ldr r2, [r0, #4] - mov r1, #8 - str r3, [r2, #0x6f0] - ldr r0, [r0, #4] - add r0, r0, #0x700 - strh r1, [r0, #0x8e] - b _020420B0 -_02041FE8: - add r0, r3, #0x700 - ldrsh r2, [r0, #0x8e] - sub r2, r2, #1 - strh r2, [r0, #0x8e] - ldr r0, [r1, #4] - add r0, r0, #0x700 - ldrsh r2, [r0, #0x8e] - cmp r2, #0 - bge _020420B0 - mov r3, #0 - strh r3, [r0, #0x8e] - ldr r2, [r1, #4] - mov r0, #0xd - str r3, [r2, #0x6f0] - ldr r3, [r1, #4] - str r0, [sp, #0x14] - ldr r2, [r3, #0x838] -#ifdef JAPAN - ldr r1, _02042454 ; =0x00001586 -#else - rsb r1, r0, #0xa80 -#endif - mov r0, #0x10 - str r0, [sp, #0x1c] - str r2, [sp, #0x10] - strh r1, [sp, #0x18] - add r0, r3, #0x700 - ldrsh r1, [r0, #0x94] - ldr r2, [r3, #0x798] - add r0, r3, #0x64 - bl GetLearnableIqSkills - ldr ip, _020420BC ; =_020AFE90 - ldr r1, _020420E8 ; =0x80401C33 - ldr r3, [ip, #4] - add r2, sp, #0x10 - add r3, r3, #0x700 - strh r0, [r3, #0x8c] - ldr r3, [ip, #4] - ldr r0, _020420EC ; =_0209C98C - add r3, r3, #0x700 - ldrsh lr, [r3, #0x8c] - ldr r3, _020420F0 ; =sub_0204213C - mov ip, #8 - str lr, [sp] - str ip, [sp, #4] - bl CreateAdvancedMenu - ldr r1, _020420BC ; =_020AFE90 - ldr r1, [r1, #4] - strb r0, [r1] - b _020420B0 -_020420A0: - mov r0, #9 - str r0, [r3, #0x6f0] - mov r0, #1 - b _020420B4 -_020420B0: - mov r0, #0 -_020420B4: - add sp, sp, #0xf8 - ldmia sp!, {r4, pc} - .align 2, 0 -_020420BC: .word _020AFE90 -_020420C0: .word _0209C9B0 -_020420C4: .word _0209C9AC -_020420C8: .word _0209C99C -_020420CC: .word 0x80000233 -_020420D0: .word 0x00003F04 -_020420D4: .word 0x00003F03 -_020420D8: .word 0x00003F07 -_020420DC: .word _020AFE98 -_020420E0: .word 0x00001013 -#ifdef JAPAN -_020420E4: .word 0x0000158A -_02042454: .word 0x00001586 -#else -_020420E4: .word 0x00000A77 -#endif -_020420E8: .word 0x80401C33 -_020420EC: .word _0209C98C -_020420F0: .word sub_0204213C - arm_func_end sub_02041B7C - - arm_func_start sub_020420F4 -sub_020420F4: ; 0x020420F4 - stmdb sp!, {r3, lr} - ldr r0, _02042138 ; =_020AFE90 - ldr r0, [r0, #4] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - mvn r1, #1 - cmp r0, r1 - beq _0204211C - bl CloseAdvancedMenu -_0204211C: - ldr r0, _02042138 ; =_020AFE90 - ldr r0, [r0, #4] - bl MemFree - ldr r0, _02042138 ; =_020AFE90 - mov r1, #0 - str r1, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_02042138: .word _020AFE90 - arm_func_end sub_020420F4 - - arm_func_start sub_0204213C -sub_0204213C: ; 0x0204213C - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #0x84 - ldr r2, _02042248 ; =_020AFE90 - mov r4, r0 - ldr r2, [r2, #4] - mov r6, #0 - add r0, r2, r1 - ldrb r5, [r0, #0x64] - ldr r0, [r2, #0x790] - cmp r5, #0x18 - bne _02042174 - mov r0, #3 - bl GetPerformanceFlagWithChecks - b _0204217C -_02042174: - mov r1, r5 - bl IqSkillFlagTest -_0204217C: - cmp r0, #0 - movne r6, #1 - cmp r6, #0 - beq _020421DC - cmp r5, #0x38 - bgt _020421B4 - bge _020421BC - cmp r5, #0x1b - bgt _020421CC - cmp r5, #0x18 - blt _020421CC - cmpne r5, #0x1b - beq _020421BC - b _020421CC -_020421B4: - cmp r5, #0x39 - bne _020421CC -_020421BC: - ldr r1, _0204224C ; =_0209C9CC - add r0, sp, #0x44 - bl strcpy - b _020421E8 -_020421CC: - ldr r1, _02042250 ; =_0209C9D4 - add r0, sp, #0x44 - bl strcpy - b _020421E8 -_020421DC: - ldr r1, _02042254 ; =_0209C9DC - add r0, sp, #0x44 - bl strcpy -_020421E8: - ldr r1, _02042248 ; =_020AFE90 - mov r0, r5 - ldr r1, [r1, #4] - str r5, [r1, #0x24] - bl GetIqSkillStringId - mov r1, r0 - add r0, sp, #4 - mov r2, #0x40 - bl CopyNStringFromId - add r0, sp, #0x44 - add r1, sp, #4 - bl strcat - ldr r1, _02042248 ; =_020AFE90 - mov r0, r4 - ldr r2, [r1, #4] - mov r1, #0x40 - add r2, r2, #0x14 - str r2, [sp] - add r2, sp, #0x44 - mov r3, #0 - bl PreprocessString - mov r0, r4 - add sp, sp, #0x84 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02042248: .word _020AFE90 -_0204224C: .word _0209C9CC -_02042250: .word _0209C9D4 -_02042254: .word _0209C9DC - arm_func_end sub_0204213C - - arm_func_start sub_02042258 -sub_02042258: ; 0x02042258 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #0xc - mov r6, r0 - mov r0, #0xa0 - mov r1, #8 - mov r5, r2 - mov r4, r3 - bl MemAlloc - ldr r1, _020423B4 ; =_020AFEA8 - str r0, [r1, #4] - str r6, [r0] - bl RemoveEmptyItemsInBag - mov r0, #0x14 - bl Arm9LoadUnkFieldNa0x2029EC8 - ldr r1, _020423B4 ; =_020AFEA8 - cmp r4, #0 - ldr r3, [r1, #4] - ldrne r4, _020423B8 ; =sub_020423D8 - str r0, [r3, #8] - ldr r2, _020423BC ; =0x0000032F - ldr r0, [r1, #4] - mov ip, #0x10 - strh r2, [r0, #0x10] - ldr r0, [r1, #4] - mov r3, #0xd - str ip, [r0, #0x14] - ldr r0, [r1, #4] - ldr r2, _020423C0 ; =sub_0204261C - str r3, [r0, #0xc] - ldr r0, [r1, #4] - moveq r4, #0 - str r2, [r0, #0x7c] - bl GetNbItemsInBag - str r4, [sp] - str r0, [sp, #4] - ldr r0, _020423B4 ; =_020AFEA8 - str r5, [sp, #8] - ldr r2, [r0, #4] - ldr r0, _020423C4 ; =_0209C9E4 - ldr r1, _020423C8 ; =0x00443C33 - ldr r3, _020423CC ; =sub_02042760 - add r2, r2, #8 - bl CreateCollectionMenu - ldr r2, _020423B4 ; =_020AFEA8 - ldr r1, _020423D0 ; =sub_0204262C - ldr r3, [r2, #4] - strb r0, [r3, #4] - ldr r0, [r2, #4] - ldrsb r0, [r0, #4] - bl sub_0202D068 - ldr r0, _020423B4 ; =_020AFEA8 - ldr r1, _020423D4 ; =sub_0204263C - ldr r0, [r0, #4] - ldrsb r0, [r0, #4] - bl SetCollectionMenuVoidFn - ldr r0, _020423B4 ; =_020AFEA8 - mov r1, #0xd - ldr r0, [r0, #4] - ldrsb r0, [r0, #4] - bl SetCollectionMenuField0x1BC - ldr r0, _020423B4 ; =_020AFEA8 - ldr r1, [r0, #4] - ldr r0, [r1] - cmp r0, #3 - beq _02042368 - cmp r0, #4 - beq _0204237C - b _020423A0 -_02042368: -#ifdef EUROPE - ldrsb r0, [r1, #4] - mov r1, #9 - bl SetCollectionMenuField0x1BC -#endif - mov r0, #0 - bl sub_0204440C - mov r0, #2 - bl sub_0204426C - b _020423A0 -_0204237C: - ldrsb r0, [r1, #4] -#ifdef EUROPE - mov r1, #9 - bl SetCollectionMenuField0x1BC - ldr r0, _020423B4 ; =_020AFEA8 -#endif - mov r1, #0x76 -#ifdef EUROPE - ldr r0, [r0, #4] - ldrsb r0, [r0, #4] -#endif - bl SetCollectionMenuWidth - mov r0, #0 - bl sub_0204440C - mov r0, #0 - bl sub_0204426C - mov r0, #0 - bl sub_02044568 -_020423A0: - ldr r0, _020423B4 ; =_020AFEA8 - ldr r0, [r0, #4] - ldrsb r0, [r0, #4] - add sp, sp, #0xc - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_020423B4: .word _020AFEA8 -_020423B8: .word sub_020423D8 -#ifdef JAPAN -_020423BC: .word 0x000031F4 -#else -_020423BC: .word 0x0000032F -#endif -_020423C0: .word sub_0204261C -_020423C4: .word _0209C9E4 -_020423C8: .word 0x00443C33 -_020423CC: .word sub_02042760 -_020423D0: .word sub_0204262C -_020423D4: .word sub_0204263C - arm_func_end sub_02042258 - - arm_func_start sub_020423D8 -sub_020423D8: ; 0x020423D8 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r1, _02042618 ; =_020AFEA8 - mov r5, #0 - ldr r2, [r1, #4] - ldr r1, [r2] - cmp r1, #3 - bne _02042498 - tst r0, #0x800 - beq _02042498 - bl sub_02042B20 - cmp r0, #0 - ble _0204241C - bl sub_02042AF8 - mov r0, #6 - bl PlaySeVolumeWrapper - mov r5, #1 - b _020425D8 -_0204241C: - bl sub_0200FD48 - mov r4, r0 - bl CountNbOfItemsInStorage - sub r7, r4, r0 - mov r8, r5 - mov r6, #1 - ldr r4, _02042618 ; =_020AFEA8 - b _02042470 -_0204243C: - cmp r7, #0 - ble _02042478 - mov r0, r8, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetItemAtIdx - ldrsh r0, [r0, #4] - bl IsStorableItem - cmp r0, #0 - ldrne r0, [r4, #8] - movne r5, r6 - strne r6, [r0, r8, lsl #2] - subne r7, r7, #1 - add r8, r8, #1 -_02042470: - cmp r8, #0x32 - blt _0204243C -_02042478: - cmp r5, #0 - beq _0204248C - mov r0, #6 - bl PlaySeVolumeWrapper - b _020425D8 -_0204248C: - mov r0, #2 - bl PlaySeVolumeWrapper - b _020425D8 -_02042498: - tst r0, #0x400 - beq _020425D8 - ldrsb r0, [r2, #4] - bl sub_0202D0EC - ldr r1, _02042618 ; =_020AFEA8 - mov r4, r0 - ldr r0, [r1, #4] - ldr r0, [r0] - cmp r0, #3 - beq _020424CC - cmp r0, #4 - beq _02042570 - b _020425D8 -_020424CC: - mov r0, r4, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetItemAtIdx - ldrsh r0, [r0, #4] - bl IsStorableItem - cmp r0, #0 - beq _02042560 - ldr r0, _02042618 ; =_020AFEA8 - ldr r2, [r0, #8] - ldr r0, [r2, r4, lsl #2] - tst r0, #1 - beq _02042514 - mov r1, #0 - mov r0, #6 - str r1, [r2, r4, lsl #2] - bl PlaySeVolumeWrapper - mov r5, #1 - b _020425D8 -_02042514: - bl CountNbOfItemsInStorage - mov r6, r0 - bl sub_02042B20 - mov r5, r0 - bl sub_0200FD48 - add r1, r6, r5 - cmp r1, r0 - bge _02042550 - mov r0, #6 - bl PlaySeVolumeWrapper - ldr r0, _02042618 ; =_020AFEA8 - mov r5, #1 - ldr r0, [r0, #8] - str r5, [r0, r4, lsl #2] - b _020425D8 -_02042550: - mov r0, #2 - bl PlaySeVolumeWrapper - mov r5, #0 - b _020425D8 -_02042560: - mov r0, #2 - bl PlaySeVolumeWrapper - mov r5, #0 - b _020425D8 -_02042570: - mov r0, r4, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetItemAtIdx - ldrsh r0, [r0, #4] - bl IsShoppableItem - cmp r0, #0 - beq _020425CC - ldr r0, _02042618 ; =_020AFEA8 - mov r5, #1 - ldr r2, [r0, #8] - ldr r0, [r2, r4, lsl #2] - tst r0, #1 - mov r0, #6 - beq _020425B8 - mov r1, #0 - str r1, [r2, r4, lsl #2] - bl PlaySeVolumeWrapper - b _020425D8 -_020425B8: - bl PlaySeVolumeWrapper - ldr r0, _02042618 ; =_020AFEA8 - ldr r0, [r0, #8] - str r5, [r0, r4, lsl #2] - b _020425D8 -_020425CC: - mov r0, #2 - bl PlaySeVolumeWrapper - mov r5, #0 -_020425D8: - bl sub_02042B20 - cmp r0, #0 - beq _020425FC - ldr r0, _02042618 ; =_020AFEA8 - mov r1, #1 - ldr r0, [r0, #4] - ldrsb r0, [r0, #4] - bl sub_0202D16C - b _02042610 -_020425FC: - ldr r0, _02042618 ; =_020AFEA8 - mov r1, #0 - ldr r0, [r0, #4] - ldrsb r0, [r0, #4] - bl sub_0202D16C -_02042610: - mov r0, r5 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02042618: .word _020AFEA8 - arm_func_end sub_020423D8 - - arm_func_start sub_0204261C -sub_0204261C: ; 0x0204261C - stmdb sp!, {r3, lr} - bl sub_02042BE0 - bl sub_02044308 - ldmia sp!, {r3, pc} - arm_func_end sub_0204261C - - arm_func_start sub_0204262C -sub_0204262C: ; 0x0204262C - stmdb sp!, {r3, lr} - bl sub_02042BE0 - bl sub_02044308 - ldmia sp!, {r3, pc} - arm_func_end sub_0204262C - - arm_func_start sub_0204263C -sub_0204263C: ; 0x0204263C - ldr r2, _0204265C ; =BAG_ITEMS_PTR_MIRROR - mov r1, #6 - ldr r2, [r2] - ldr ip, _02042660 ; =sub_020444B0 - ldr r2, [r2, #0x384] - mla r1, r0, r1, r2 - ldrsh r0, [r1, #4] - bx ip - .align 2, 0 -_0204265C: .word BAG_ITEMS_PTR_MIRROR -_02042660: .word sub_020444B0 - arm_func_end sub_0204263C - - arm_func_start sub_02042664 -sub_02042664: ; 0x02042664 - stmdb sp!, {r3, lr} - ldr r0, _020426B0 ; =_020AFEA8 - ldr r0, [r0, #4] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl sub_02044474 - bl sub_020442CC - bl sub_020445C8 - ldr r0, _020426B0 ; =_020AFEA8 - ldr r0, [r0, #4] - ldrsb r0, [r0, #4] - bl CloseCollectionMenu - ldr r0, _020426B0 ; =_020AFEA8 - ldr r0, [r0, #4] - bl MemFree - ldr r0, _020426B0 ; =_020AFEA8 - mov r1, #0 - str r1, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_020426B0: .word _020AFEA8 - arm_func_end sub_02042664 - - arm_func_start sub_020426B4 -sub_020426B4: ; 0x020426B4 - stmdb sp!, {r3, lr} - ldr r0, _0204272C ; =_020AFEA8 - ldr r0, [r0, #4] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0, #4] - bl IsCollectionMenuActive - cmp r0, #0 - bne _02042708 - ldr r0, _0204272C ; =_020AFEA8 - ldr r0, [r0, #4] - ldrsb r0, [r0, #4] - bl sub_0202C75C - mvn r1, #0 - cmp r0, r1 - ldrne r1, _0204272C ; =_020AFEA8 - moveq r0, #2 - strneh r0, [r1] - movne r0, #3 - ldmia sp!, {r3, pc} -_02042708: - ldr r0, _0204272C ; =_020AFEA8 - ldr r0, [r0, #4] - ldrsb r0, [r0, #4] - bl sub_0202C748 - and r1, r0, #0xff - mov r0, #0x14 - bl Arm9StoreUnkFieldNa0x2029ED8 - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0204272C: .word _020AFEA8 - arm_func_end sub_020426B4 - - arm_func_start sub_02042730 -sub_02042730: ; 0x02042730 - ldr r0, _02042740 ; =_020AFEA8 - mov r1, #0 - strh r1, [r0] - bx lr - .align 2, 0 -_02042740: .word _020AFEA8 - arm_func_end sub_02042730 - - arm_func_start sub_02042744 -sub_02042744: ; 0x02042744 - ldr r0, _02042758 ; =_020AFEA8 - ldr ip, _0204275C ; =sub_0202C620 - ldr r0, [r0, #4] - ldrsb r0, [r0, #4] - bx ip - .align 2, 0 -_02042758: .word _020AFEA8 -_0204275C: .word sub_0202C620 - arm_func_end sub_02042744 - - arm_func_start sub_02042760 -sub_02042760: ; 0x02042760 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #0x64 - mov r5, r1 - mov r1, #6 - ldr r3, _02042A64 ; =BAG_ITEMS_PTR_MIRROR - mul r4, r5, r1 - ldr r1, [r3] - ldr r3, _02042A68 ; =_020AFEA8 - ldr r6, [r1, #0x384] - ldr r7, [r3, #4] - ldrh r1, [r6, r4] - add lr, r6, r4 - mov r4, r2 - strh r1, [sp] - ldrh ip, [lr, #2] - mov r6, r0 - add r1, sp, #0 - strh ip, [sp, #2] - ldrh r2, [lr, #4] - strh r2, [sp, #4] - ldr r2, [r7] - cmp r2, #5 - addls pc, pc, r2, lsl #2 - b _02042A3C -_020427C0: ; jump table - b _020427D8 ; case 0 - b _020427E4 ; case 1 - b _020427E4 ; case 2 - b _02042808 ; case 3 - b _020428D4 ; case 4 - b _020429E8 ; case 5 -_020427D8: - mov r2, #0 - bl sub_0200D670 - b _02042A3C -_020427E4: - mov r7, #0 - mov r3, #1 - add r2, sp, #8 - str r7, [sp, #8] - strb r7, [sp, #0xc] - strb r3, [sp, #0x10] - strb r3, [sp] - bl sub_0200D670 - b _02042A3C -_02042808: - mov r1, #0 - mov r0, #1 - str r1, [sp, #8] - strb r1, [sp, #0xc] - strb r0, [sp, #0x10] - strb r0, [sp] - ldr r0, [r3, #8] - ldr r0, [r0, r5, lsl #2] - tst r0, #1 - bne _0204284C - mov r0, r5, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetItemAtIdx - ldrsh r0, [r0, #4] - bl IsStorableItem - cmp r0, #0 - beq _02042890 -_0204284C: - add r0, sp, #0x14 - add r1, sp, #0 - add r2, sp, #8 - bl sub_0200D670 - ldrb r2, [sp, #1] - cmp r2, #0 - beq _0204287C - ldr r1, _02042A6C ; =_0209C9F4 - add r3, sp, #0x14 - mov r0, r6 - bl SprintfStatic__02042A84 - b _02042A3C -_0204287C: - ldr r1, _02042A70 ; =_0209C9FC - add r2, sp, #0x14 - mov r0, r6 - bl SprintfStatic__02042A84 - b _02042A3C -_02042890: - add r0, sp, #0x14 - add r1, sp, #0 - add r2, sp, #8 - bl sub_0200D65C - ldrb r2, [sp, #1] - cmp r2, #0 - beq _020428C0 - ldr r1, _02042A74 ; =_0209CA08 - add r3, sp, #0x14 - mov r0, r6 - bl SprintfStatic__02042A84 - b _02042A3C -_020428C0: - ldr r1, _02042A78 ; =_0209CA18 - add r2, sp, #0x14 - mov r0, r6 - bl SprintfStatic__02042A84 - b _02042A3C -_020428D4: - ldrsh r0, [sp, #4] - bl IsShoppableItem - cmp r0, #0 - beq _020429A4 - mov r7, #3 - mov r3, #0 - mov r2, #0x6a - mov r1, #1 - add r0, sp, #0 - str r7, [sp, #8] - strb r3, [sp, #0xc] - strh r2, [sp, #0xe] - strb r1, [sp, #0x10] - strb r7, [sp] - bl GetActualSellPrice - mov r7, r0 - bl GetMoneyCarried - ldr r1, _02042A7C ; =0x0001869F - add r0, r7, r0 - cmp r0, r1 - add r0, sp, #0x14 - add r1, sp, #0 - add r2, sp, #8 - bgt _0204296C - bl sub_0200D670 - ldrb r2, [sp, #1] - cmp r2, #0 - beq _02042958 - ldr r1, _02042A6C ; =_0209C9F4 - add r3, sp, #0x14 - mov r0, r6 - bl SprintfStatic__02042A84 - b _02042A3C -_02042958: - ldr r1, _02042A70 ; =_0209C9FC - add r2, sp, #0x14 - mov r0, r6 - bl SprintfStatic__02042A84 - b _02042A3C -_0204296C: - bl sub_0200D65C - ldrb r2, [sp, #1] - cmp r2, #0 - beq _02042990 - ldr r1, _02042A74 ; =_0209CA08 - add r3, sp, #0x14 - mov r0, r6 - bl SprintfStatic__02042A84 - b _02042A3C -_02042990: - ldr r1, _02042A78 ; =_0209CA18 - add r2, sp, #0x14 - mov r0, r6 - bl SprintfStatic__02042A84 - b _02042A3C -_020429A4: - add r0, sp, #0x14 - add r1, sp, #0 - mov r2, #0 - bl sub_0200D65C - ldrb r2, [sp, #1] - cmp r2, #0 - beq _020429D4 - ldr r1, _02042A74 ; =_0209CA08 - add r3, sp, #0x14 - mov r0, r6 - bl SprintfStatic__02042A84 - b _02042A3C -_020429D4: - ldr r1, _02042A78 ; =_0209CA18 - add r2, sp, #0x14 - mov r0, r6 - bl SprintfStatic__02042A84 - b _02042A3C -_020429E8: - ldrsh r0, [sp, #4] - mov r2, #0 - mov r1, #1 - str r2, [sp, #8] - strb r2, [sp, #0xc] - strb r1, [sp, #0x10] - strb r1, [sp] - bl IsGummi - cmp r0, #0 - add r1, sp, #0 - add r2, sp, #8 - beq _02042A24 - mov r0, r6 - bl sub_0200D670 - b _02042A3C -_02042A24: - add r0, sp, #0x14 - bl sub_0200D65C - ldr r1, _02042A80 ; =_0209CA2C - add r2, sp, #0x14 - mov r0, r6 - bl SprintfStatic__02042A84 -_02042A3C: - ldr r0, _02042A68 ; =_020AFEA8 - ldr r0, [r0, #8] - ldr r0, [r0, r5, lsl #2] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - str r0, [r4] - mov r0, r6 - add sp, sp, #0x64 - ldmia sp!, {r4, r5, r6, r7, pc} - .align 2, 0 -_02042A64: .word BAG_ITEMS_PTR_MIRROR -_02042A68: .word _020AFEA8 -_02042A6C: .word _0209C9F4 -_02042A70: .word _0209C9FC -_02042A74: .word _0209CA08 -_02042A78: .word _0209CA18 -_02042A7C: .word 0x0001869F -_02042A80: .word _0209CA2C - arm_func_end sub_02042760 - - arm_func_start SprintfStatic__02042A84 -SprintfStatic__02042A84: ; 0x02042A84 - 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__02042A84 - - arm_func_start sub_02042AAC -sub_02042AAC: ; 0x02042AAC - stmdb sp!, {r3, lr} - ldr r0, _02042AD8 ; =_020AFEA8 - ldr r0, [r0, #4] - cmp r0, #0 - ldrnesb r0, [r0, #4] - mvnne r1, #1 - cmpne r0, r1 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - bl IsCollectionMenuState3 - ldmia sp!, {r3, pc} - .align 2, 0 -_02042AD8: .word _020AFEA8 - arm_func_end sub_02042AAC - - arm_func_start sub_02042ADC -sub_02042ADC: ; 0x02042ADC - ldr r0, _02042AF0 ; =_020AFEA8 - ldr ip, _02042AF4 ; =sub_0202D0EC - ldr r0, [r0, #4] - ldrsb r0, [r0, #4] - bx ip - .align 2, 0 -_02042AF0: .word _020AFEA8 -_02042AF4: .word sub_0202D0EC - arm_func_end sub_02042ADC - - arm_func_start sub_02042AF8 -sub_02042AF8: ; 0x02042AF8 - mov r3, #0 - ldr r0, _02042B1C ; =_020AFEA8 - mov r2, r3 -_02042B04: - ldr r1, [r0, #8] - str r2, [r1, r3, lsl #2] - add r3, r3, #1 - cmp r3, #0x32 - blt _02042B04 - bx lr - .align 2, 0 -_02042B1C: .word _020AFEA8 - arm_func_end sub_02042AF8 - - arm_func_start sub_02042B20 -sub_02042B20: ; 0x02042B20 - ldr r1, _02042B4C ; =_020AFEA8 - mov r0, #0 - ldr r3, [r1, #8] - mov r2, r0 -_02042B30: - ldr r1, [r3, r2, lsl #2] - add r2, r2, #1 - tst r1, #1 - addne r0, r0, #1 - cmp r2, #0x32 - blt _02042B30 - bx lr - .align 2, 0 -_02042B4C: .word _020AFEA8 - arm_func_end sub_02042B20 - - arm_func_start sub_02042B50 -sub_02042B50: ; 0x02042B50 - ldr r1, _02042B80 ; =_020AFEA8 - mov r0, #0 - ldr r2, [r1, #8] - b _02042B70 -_02042B60: - ldr r1, [r2, r0, lsl #2] - tst r1, #1 - bxne lr - add r0, r0, #1 -_02042B70: - cmp r0, #0x32 - blt _02042B60 - mvn r0, #0 - bx lr - .align 2, 0 -_02042B80: .word _020AFEA8 - arm_func_end sub_02042B50 - - arm_func_start sub_02042B84 -sub_02042B84: ; 0x02042B84 - ldr r1, _02042B94 ; =_020AFEA8 - ldr r1, [r1, #8] - ldr r0, [r1, r0, lsl #2] - bx lr - .align 2, 0 -_02042B94: .word _020AFEA8 - arm_func_end sub_02042B84 - - arm_func_start sub_02042B98 -sub_02042B98: ; 0x02042B98 - stmdb sp!, {r3, lr} - mov r0, #0xc8 - mov r1, #8 - bl MemAlloc - ldr r1, _02042BB8 ; =_020AFEA8 - str r0, [r1, #8] - bl sub_02042AF8 - ldmia sp!, {r3, pc} - .align 2, 0 -_02042BB8: .word _020AFEA8 - arm_func_end sub_02042B98 - - arm_func_start sub_02042BBC -sub_02042BBC: ; 0x02042BBC - stmdb sp!, {r3, lr} - ldr r0, _02042BDC ; =_020AFEA8 - ldr r0, [r0, #8] - bl MemFree - ldr r0, _02042BDC ; =_020AFEA8 - mov r1, #0 - str r1, [r0, #8] - ldmia sp!, {r3, pc} - .align 2, 0 -_02042BDC: .word _020AFEA8 - arm_func_end sub_02042BBC - - arm_func_start sub_02042BE0 -sub_02042BE0: ; 0x02042BE0 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - bl GetNbItemsInBag - mov r1, #6 - mov r4, r0 - mov r0, #0 - ldr ip, _02042CE8 ; =_020AFEA8 - ldr r3, _02042CEC ; =BAG_ITEMS_PTR_MIRROR - mov r2, r1 - b _02042C44 -_02042C04: - ldr r5, [ip, #8] - ldr r5, [r5, r0, lsl #2] - tst r5, #1 - muleq r6, r0, r1 - ldreq r5, [r3] - ldreq r7, [r5, #0x384] - ldreqb r5, [r7, r6] - biceq r5, r5, #0x80 - beq _02042C3C - mul r6, r0, r2 - ldr r5, [r3] - ldr r7, [r5, #0x384] - ldrb r5, [r7, r6] - orr r5, r5, #0x80 -_02042C3C: - strb r5, [r7, r6] - add r0, r0, #1 -_02042C44: - cmp r0, r4 - blt _02042C04 - bl SortItemsInBag - mov r2, #0 - mov r7, r2 - mov r0, #1 - mov r3, #6 - ldr lr, _02042CEC ; =BAG_ITEMS_PTR_MIRROR - ldr ip, _02042CE8 ; =_020AFEA8 - b _02042CA4 -_02042C6C: - mul r1, r2, r3 - ldr r5, [lr] - ldr r5, [r5, #0x384] - ldrb r5, [r5, r1] - tst r5, #0x80 - ldr r5, [ip, #8] - strne r0, [r5, r2, lsl #2] - streq r7, [r5, r2, lsl #2] - ldr r5, [lr] - add r2, r2, #1 - ldr r6, [r5, #0x384] - ldrb r5, [r6, r1] - bic r5, r5, #0x80 - strb r5, [r6, r1] -_02042CA4: - cmp r2, r4 - blt _02042C6C - ldr r1, _02042CE8 ; =_020AFEA8 - mvn r0, #1 - ldr r1, [r1, #4] - ldrsb r1, [r1, #4] - cmp r1, r0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - bl GetNbItemsInBag - ldr r2, _02042CE8 ; =_020AFEA8 - mov r1, r0 - ldr r0, [r2, #4] - mov r2, #8 - ldrsb r0, [r0, #4] - mov r3, #0 - bl sub_0202C654 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02042CE8: .word _020AFEA8 -_02042CEC: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02042BE0 - - arm_func_start sub_02042CF0 -sub_02042CF0: ; 0x02042CF0 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0xc - mov r5, r0 - mov r0, #0x18c0 - mov r1, #8 - mov r4, r2 - bl MemAlloc - ldr r2, _02042F88 ; =_020AFEB4 - mvn r3, #1 - str r0, [r2, #4] - str r5, [r0] - ldr r0, [r2, #4] - mov r1, #0 - strb r3, [r0, #0x7d5] - ldr r0, [r2, #4] - strb r3, [r0, #0x7d6] - ldr r0, [r2, #4] - strb r3, [r0, #0x7d7] - ldr r0, [r2, #4] - strb r3, [r0, #0x7d8] - ldr r0, [r2, #4] - strb r3, [r0, #0x7d9] - ldr r0, [r2, #4] - str r1, [r0, #0x90c] - ldr r0, [r2, #4] - add r0, r0, #0x900 - strh r1, [r0, #0x10] - ldr r0, [r2, #0x10] - bl sub_02043BFC - ldr r2, _02042F88 ; =_020AFEB4 - ldr r1, [r2, #4] - add r1, r1, #0x900 - strh r0, [r1, #0x10] - ldr r0, [r2, #4] - add r0, r0, #0x900 - ldrsh r0, [r0, #0x10] - cmp r0, #0 - ble _02042DB4 - ldr r0, [r2, #0x10] - cmp r0, #5 - bne _02042DB4 - ldrsh r0, [r2] - cmp r0, #0 - beq _02042DB4 - bl sub_020440F8 - ldr r1, _02042F88 ; =_020AFEB4 - ldr r1, [r1, #4] - add r1, r1, #0x900 - strh r0, [r1, #0x10] -_02042DB4: - ldr r0, _02042F88 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x900 - ldrsh r0, [r0, #0x10] - cmp r0, #0 - bgt _02042DF0 - mov r0, #9 - mov r1, #0 - bl sub_02043BFC - ldr r2, _02042F88 ; =_020AFEB4 - mov r3, #9 - ldr r1, [r2, #4] - add r1, r1, #0x900 - strh r0, [r1, #0x10] - str r3, [r2, #0x10] -_02042DF0: - ldr r1, _02042F88 ; =_020AFEB4 - sub r2, r5, #2 - ldr r0, [r1, #4] - ldr r5, _02042F8C ; =0x000002F3 - add r0, r0, #0x1000 - str r4, [r0, #0x8bc] - ldrsh ip, [r1, #2] - ldr r0, [r1, #4] - mov r3, #0x10 - str ip, [r0, #0x7dc] - ldr r0, [r1, #4] - mov ip, #0xd - add r0, r0, #0x700 - strh r5, [r0, #0xe4] - ldr r0, [r1, #4] - ldr r5, _02042F90 ; =_0204357C - str r3, [r0, #0x7e8] - ldr r0, [r1, #4] - ldr r3, _02042F94 ; =_020441BC - str ip, [r0, #0x7e0] - ldr r0, [r1, #4] - cmp r2, #5 - str r5, [r0, #0x858] - ldr r0, [r1, #4] - mov r5, #0 - str r3, [r0, #0x850] - bhi _02042E6C - mov r0, #1 - mov r1, r0, lsl r2 - tst r1, #0x2b - movne r5, r0 -_02042E6C: - ldr r1, _02042F88 ; =_020AFEB4 - cmp r5, #0 - movne r2, #0 - ldr r3, [r1, #4] - ldreq r2, _02042F98 ; =sub_02042FB8 - ldr r0, _02042F9C ; =_0209CA58 - str r2, [sp] - add r2, r3, #0x900 - ldrsh r5, [r2, #0x10] - add r2, r3, #0x3dc - ldr r1, _02042FA0 ; =0x00447C33 - str r5, [sp, #4] - ldr r3, _02042FA4 ; =_020432B4 - add r2, r2, #0x400 - str r4, [sp, #8] - bl CreateCollectionMenu - ldr r2, _02042F88 ; =_020AFEB4 - ldr r1, _02042FA8 ; =sub_020430F4 - ldr r3, [r2, #4] - strb r0, [r3, #0x7d4] - ldr r0, [r2, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_0202D068 - ldr r0, _02042F88 ; =_020AFEB4 - ldr r1, _02042FAC ; =sub_02043148 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl SetCollectionMenuVoidFn - ldr r0, _02042F88 ; =_020AFEB4 - ldr r0, [r0, #4] - ldr r0, [r0] - cmp r0, #7 - addls pc, pc, r0, lsl #2 - b _02042F70 -_02042EFC: ; jump table - b _02042F70 ; case 0 - b _02042F28 ; case 1 - b _02042F28 ; case 2 - b _02042F1C ; case 3 - b _02042F28 ; case 4 - b _02042F60 ; case 5 - b _02042F3C ; case 6 - b _02042F60 ; case 7 -_02042F1C: - mov r0, #0 - bl sub_0204440C - b _02042F70 -_02042F28: - mov r0, #0 - bl sub_0204440C - mov r0, #2 - bl sub_0204426C - b _02042F70 -_02042F3C: - ldr r0, _02042FB0 ; =_0209CA48 - ldr r1, _02042FB4 ; =sub_02044210 - bl CreateTextBox - ldr r1, _02042F88 ; =_020AFEB4 - ldr r1, [r1, #4] - strb r0, [r1, #0x7d5] - mov r0, #1 - bl sub_0204426C - b _02042F70 -_02042F60: - mov r0, #0 - bl sub_0204440C - mov r0, #1 - bl sub_0204426C -_02042F70: - ldr r0, _02042F88 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - add sp, sp, #0xc - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_02042F88: .word _020AFEB4 -#ifdef JAPAN -_02042F8C: .word 0x0000239B -#else -_02042F8C: .word 0x000002F3 -#endif -_02042F90: .word sub_0204357C -_02042F94: .word sub_020441BC -_02042F98: .word sub_02042FB8 -_02042F9C: .word _0209CA58 -_02042FA0: .word 0x00447C33 -_02042FA4: .word sub_020432B4 -_02042FA8: .word sub_020430F4 -_02042FAC: .word sub_02043148 -_02042FB0: .word _0209CA48 -_02042FB4: .word sub_02044210 - arm_func_end sub_02042CF0 - - arm_func_start sub_02042FB8 -sub_02042FB8: ; 0x02042FB8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - tst r0, #0x400 - mov r4, #0 - beq _020430A8 - ldr r0, _020430F0 ; =_020AFEB4 - ldr r0, [r0, #4] - ldr r0, [r0] - cmp r0, #1 - cmpne r0, #4 - cmpne r0, #6 - bne _020430A8 - bl sub_02043468 - ldr r1, _020430F0 ; =_020AFEB4 - mov r5, r0 - ldr r0, [r1, #8] - ldrb r0, [r0, r5] - tst r0, #1 - movne r4, #1 - bne _0204303C - ldr r0, [r1, #4] - ldr r0, [r0] - cmp r0, #1 - bne _02043038 - bl GetNbItemsInBag - mov r7, r0 - bl sub_020434FC - mov r6, r0 - bl GetCurrentBagCapacity - add r1, r7, r6 - cmp r1, r0 - movlt r4, #1 - b _0204303C -_02043038: - mov r4, #1 -_0204303C: - cmp r4, #0 - beq _020430A0 - mov r0, #6 - bl PlaySeVolumeWrapper - ldr r0, _020430F0 ; =_020AFEB4 - mvn r1, #1 - ldr r3, [r0, #8] - ldrb r2, [r3, r5] - eor r2, r2, #1 - strb r2, [r3, r5] - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd6] - cmp r0, r1 - beq _0204307C - bl sub_0202F9B8 -_0204307C: - ldr r0, _020430F0 ; =_020AFEB4 - ldr r1, [r0, #4] - ldr r0, [r1] - cmp r0, #6 - bne _020430A8 - add r0, r1, #0x700 - ldrsb r0, [r0, #0xd5] - bl sub_0202F9B8 - b _020430A8 -_020430A0: - mov r0, #2 - bl PlaySeVolumeWrapper -_020430A8: - bl sub_020434FC - cmp r0, #0 - ble _020430D0 - ldr r0, _020430F0 ; =_020AFEB4 - mov r1, #1 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_0202D16C - b _020430E8 -_020430D0: - ldr r0, _020430F0 ; =_020AFEB4 - mov r1, #0 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_0202D16C -_020430E8: - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_020430F0: .word _020AFEB4 - arm_func_end sub_02042FB8 - - arm_func_start sub_020430F4 -sub_020430F4: ; 0x020430F4 - stmdb sp!, {r3, lr} - ldr r0, _02043144 ; =_020AFEB4 - mov r1, #1 - ldr r0, [r0, #0x10] - bl sub_02043BFC - ldr r2, _02043144 ; =_020AFEB4 - mov r3, #0 - ldr r1, [r2, #4] - add r1, r1, #0x900 - strh r0, [r1, #0x10] - ldr r2, [r2, #4] - add r0, r2, #0x700 - add r1, r2, #0x900 - add r2, r2, #0x1000 - ldrsb r0, [r0, #0xd4] - ldrsh r1, [r1, #0x10] - ldr r2, [r2, #0x8bc] - bl sub_0202C654 - bl sub_02044308 - ldmia sp!, {r3, pc} - .align 2, 0 -_02043144: .word _020AFEB4 - arm_func_end sub_020430F4 - - arm_func_start sub_02043148 -sub_02043148: ; 0x02043148 - stmdb sp!, {r3, lr} - ldr r1, _02043168 ; =_020AFEB4 - ldr r1, [r1, #4] - add r0, r1, r0, lsl #1 - ldrsh r0, [r0, #4] - bl sub_02010044 - bl sub_020444B0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02043168: .word _020AFEB4 - arm_func_end sub_02043148 - - arm_func_start sub_0204316C -sub_0204316C: ; 0x0204316C - cmp r0, #0 - movne r0, #5 - moveq r0, #7 - bx lr - arm_func_end sub_0204316C - - arm_func_start sub_0204317C -sub_0204317C: ; 0x0204317C - stmdb sp!, {r3, lr} - ldr r0, _02043214 ; =_020AFEB4 - ldr r0, [r0, #4] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl sub_02044474 - bl sub_020442CC - bl sub_020445C8 - ldr r0, _02043214 ; =_020AFEB4 - ldr r1, [r0, #4] - ldr r0, [r1] - cmp r0, #6 - bne _020431BC - add r0, r1, #0x700 - ldrsb r0, [r0, #0xd5] - bl CloseTextBox -_020431BC: - ldr r0, _02043214 ; =_020AFEB4 - mvn r1, #1 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd6] - cmp r0, r1 - beq _020431DC - bl CloseTextBox -_020431DC: - ldr r1, _02043214 ; =_020AFEB4 - ldr r0, [r1, #4] - ldr r2, [r0] - add r0, r0, #0x700 - str r2, [r1, #0xc] - ldrsb r0, [r0, #0xd4] - bl CloseCollectionMenu - ldr r0, _02043214 ; =_020AFEB4 - ldr r0, [r0, #4] - bl MemFree - ldr r0, _02043214 ; =_020AFEB4 - mov r1, #0 - str r1, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_02043214: .word _020AFEB4 - arm_func_end sub_0204317C - - arm_func_start sub_02043218 -sub_02043218: ; 0x02043218 - ldr r0, _02043228 ; =_020AFEB4 - mov r1, #0 - strh r1, [r0, #2] - bx lr - .align 2, 0 -_02043228: .word _020AFEB4 - arm_func_end sub_02043218 - - arm_func_start sub_0204322C -sub_0204322C: ; 0x0204322C - ldr r1, _02043238 ; =_020AFEB4 - strh r0, [r1, #2] - bx lr - .align 2, 0 -_02043238: .word _020AFEB4 - arm_func_end sub_0204322C - - arm_func_start sub_0204323C -sub_0204323C: ; 0x0204323C - stmdb sp!, {r3, lr} - bl sub_02043254 - ldr r1, _02043250 ; =_020AFEB4 - strh r0, [r1, #2] - ldmia sp!, {r3, pc} - .align 2, 0 -_02043250: .word _020AFEB4 - arm_func_end sub_0204323C - - arm_func_start sub_02043254 -sub_02043254: ; 0x02043254 - ldr r1, _02043298 ; =_020AFEB4 - mov r3, #0 - ldr ip, [r1, #4] - mvn r1, #0 - b _02043278 -_02043268: - cmp r0, r2 - moveq r0, r3 - bxeq lr - add r3, r3, #1 -_02043278: - cmp r3, #0x3e8 - bge _02043290 - add r2, ip, r3, lsl #1 - ldrsh r2, [r2, #4] - cmp r2, r1 - bne _02043268 -_02043290: - mov r0, #0 - bx lr - .align 2, 0 -_02043298: .word _020AFEB4 - arm_func_end sub_02043254 - - arm_func_start sub_0204329C -sub_0204329C: ; 0x0204329C - ldr r1, _020432B0 ; =_020AFEB4 - ldr r1, [r1, #4] - add r0, r1, r0, lsl #1 - ldrsh r0, [r0, #4] - bx lr - .align 2, 0 -_020432B0: .word _020AFEB4 - arm_func_end sub_0204329C - - arm_func_start sub_020432B4 -sub_020432B4: ; 0x020432B4 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - ldr r3, _02043318 ; =_020AFEB4 - mov r5, r0 - ldr r0, [r3, #4] - mov r4, r2 - add r0, r0, r1, lsl #1 - ldrsh r6, [r0, #4] - add r1, sp, #0 - mov r0, r6 - bl ConvertStorageItemAtIdxToItem - ldr r2, _0204331C ; =_0209CA3C - add r1, sp, #0 - mov r0, r5 - bl sub_0200D670 - ldr r0, _02043318 ; =_020AFEB4 - ldr r0, [r0, #8] - ldrb r0, [r0, r6] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - str r0, [r4] - mov r0, r5 - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02043318: .word _020AFEB4 -_0204331C: .word _0209CA3C - arm_func_end sub_020432B4 - - arm_func_start sub_02043320 -sub_02043320: ; 0x02043320 - stmdb sp!, {r3, lr} - cmp r0, #7 - bne _02043344 - bl CountNbOfValidItemsInTimeDarknessInStorage - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} -_02043344: - sub r0, r0, #5 - cmp r0, #1 - bhi _02043368 - bl CountNbOfValidItemsInStorage - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} -_02043368: - bl CountNbOfItemsInStorage - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end sub_02043320 - - arm_func_start sub_02043380 -sub_02043380: ; 0x02043380 - stmdb sp!, {r3, lr} - cmp r0, #8 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - bl IsStorageFull - ldmia sp!, {r3, pc} - arm_func_end sub_02043380 - - arm_func_start sub_02043398 -sub_02043398: ; 0x02043398 - stmdb sp!, {r3, lr} - ldr r0, _020433BC ; =_020AFEB4 - ldr r0, [r0, #4] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_0202D134 - ldmia sp!, {r3, pc} - .align 2, 0 -_020433BC: .word _020AFEB4 - arm_func_end sub_02043398 - - arm_func_start sub_020433C0 -sub_020433C0: ; 0x020433C0 - ldr r0, _020433D8 ; =_020AFEB4 - ldr ip, _020433DC ; =sub_0202C620 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bx ip - .align 2, 0 -_020433D8: .word _020AFEB4 -_020433DC: .word sub_0202C620 - arm_func_end sub_020433C0 - - arm_func_start sub_020433E0 -sub_020433E0: ; 0x020433E0 - ldr r0, _020433FC ; =_020AFEB4 - ldr r0, [r0, #4] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_020433FC: .word _020AFEB4 - arm_func_end sub_020433E0 - - arm_func_start sub_02043400 -sub_02043400: ; 0x02043400 - stmdb sp!, {r3, lr} - ldr r0, _02043430 ; =_020AFEB4 - ldr r0, [r0, #4] - cmp r0, #0 - addne r0, r0, #0x700 - ldrnesb r0, [r0, #0xd4] - mvnne r1, #1 - cmpne r0, r1 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - bl IsCollectionMenuActive - ldmia sp!, {r3, pc} - .align 2, 0 -_02043430: .word _020AFEB4 - arm_func_end sub_02043400 - - arm_func_start sub_02043434 -sub_02043434: ; 0x02043434 - stmdb sp!, {r3, lr} - ldr r0, _02043464 ; =_020AFEB4 - ldr r0, [r0, #4] - cmp r0, #0 - addne r0, r0, #0x700 - ldrnesb r0, [r0, #0xd4] - mvnne r1, #1 - cmpne r0, r1 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - bl IsCollectionMenuState3 - ldmia sp!, {r3, pc} - .align 2, 0 -_02043464: .word _020AFEB4 - arm_func_end sub_02043434 - - arm_func_start sub_02043468 -sub_02043468: ; 0x02043468 - stmdb sp!, {r3, lr} - ldr r0, _020434D0 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl IsCollectionMenuActive - cmp r0, #0 - beq _020434A0 - ldr r0, _020434D0 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_0202C748 - b _020434B4 -_020434A0: - ldr r0, _020434D0 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_0202C75C -_020434B4: - cmp r0, #0 - ldrge r1, _020434D0 ; =_020AFEB4 - mvnlt r0, #0 - ldrge r1, [r1, #4] - addge r0, r1, r0, lsl #1 - ldrgesh r0, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_020434D0: .word _020AFEB4 - arm_func_end sub_02043468 - - arm_func_start sub_020434D4 -sub_020434D4: ; 0x020434D4 - mov r3, #0 - ldr r0, _020434F8 ; =_020AFEB4 - mov r2, r3 -_020434E0: - ldr r1, [r0, #8] - strb r2, [r1, r3] - add r3, r3, #1 - cmp r3, #0x3e8 - blt _020434E0 - bx lr - .align 2, 0 -_020434F8: .word _020AFEB4 - arm_func_end sub_020434D4 - - arm_func_start sub_020434FC -sub_020434FC: ; 0x020434FC - ldr r1, _02043528 ; =_020AFEB4 - mov r0, #0 - ldr r3, [r1, #8] - mov r2, r0 -_0204350C: - ldrb r1, [r3, r2] - add r2, r2, #1 - tst r1, #1 - addne r0, r0, #1 - cmp r2, #0x3e8 - blt _0204350C - bx lr - .align 2, 0 -_02043528: .word _020AFEB4 - arm_func_end sub_020434FC - - arm_func_start sub_0204352C -sub_0204352C: ; 0x0204352C - ldr r0, _02043564 ; =_020AFEB4 - mov r1, #0 - ldr r2, [r0, #8] - b _02043554 -_0204353C: - ldrb r0, [r2, r1] - tst r0, #1 - movne r0, r1, lsl #0x10 - movne r0, r0, asr #0x10 - bxne lr - add r1, r1, #1 -_02043554: - cmp r1, #0x3e8 - blt _0204353C - mvn r0, #0 - bx lr - .align 2, 0 -_02043564: .word _020AFEB4 - arm_func_end sub_0204352C - - arm_func_start sub_02043568 -sub_02043568: ; 0x02043568 - ldr r1, _02043578 ; =_020AFEB4 - ldr r1, [r1, #8] - ldrb r0, [r1, r0] - bx lr - .align 2, 0 -_02043578: .word _020AFEB4 - arm_func_end sub_02043568 - - arm_func_start sub_0204357C -sub_0204357C: ; 0x0204357C - stmdb sp!, {r3, r4, lr} - sub sp, sp, #0x1c - ldr r4, _020435C4 ; =_0209CA98 - add lr, sp, #0 - ldmia r4!, {r0, r1, r2, r3} - mov ip, lr - stmia lr!, {r0, r1, r2, r3} - ldmia r4, {r0, r1, r2} - ldr r3, _020435C8 ; =_020AFEB4 - stmia lr, {r0, r1, r2} - ldr r0, [r3, #4] - ldr r0, [r0, #0x90c] - cmp r0, #7 - bge _020435BC - ldr r0, [ip, r0, lsl #2] - blx r0 -_020435BC: - add sp, sp, #0x1c - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_020435C4: .word _0209CA98 -_020435C8: .word _020AFEB4 - arm_func_end sub_0204357C - - arm_func_start sub_020435CC -sub_020435CC: ; 0x020435CC - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - ldr r0, _02043760 ; =_020AFEB4 - mvn r1, #1 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd8] - cmp r0, r1 - bne _0204361C - ldr r0, _02043764 ; =_0209CA68 - mov r4, #0xa - ldr r3, _02043768 ; =_0209CAB4 - mov r1, #0x13 - mov r2, #0 - str r4, [sp] - bl CreateSimpleMenuFromStringIds - ldr r1, _02043760 ; =_020AFEB4 - ldr r1, [r1, #4] - strb r0, [r1, #0x7d8] - b _02043758 -_0204361C: - bl IsSimpleMenuActive - cmp r0, #0 - bne _02043758 - ldr r0, _02043760 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd8] - bl GetSimpleMenuResult - ldr r1, _02043760 ; =_020AFEB4 - mov r4, r0 - ldr r0, [r1, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd8] - bl CloseSimpleMenu - ldr r0, _02043760 ; =_020AFEB4 - mvn r2, #1 - ldr r1, [r0, #4] - cmp r4, #8 - strb r2, [r1, #0x7d8] - ldreq r0, [r0, #4] - mov r1, #0 - streq r1, [r0, #0x90c] - beq _02043744 - mov r0, r4 - bl sub_02043BFC - mvn r1, #0 - cmp r0, r1 - bne _020436F4 - ldr r0, _02043760 ; =_020AFEB4 - sub r1, r1, #1 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd5] - cmp r0, r1 - beq _020436AC - bl sub_0202812C -_020436AC: - ldr r0, _02043760 ; =_020AFEB4 - mvn r1, #1 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd6] - cmp r0, r1 - beq _020436CC - bl sub_0202812C -_020436CC: - ldr r0, _02043760 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_0202812C - ldr r0, _02043760 ; =_020AFEB4 - mov r1, #1 - ldr r0, [r0, #4] - str r1, [r0, #0x90c] - b _02043758 -_020436F4: - ldr r2, _02043760 ; =_020AFEB4 - ldr r1, [r2, #4] - add r1, r1, #0x900 - strh r0, [r1, #0x10] - ldr r1, [r2, #4] - add r0, r1, #0x700 - add r1, r1, #0x900 - ldrsb r0, [r0, #0xd4] - ldrsh r1, [r1, #0x10] - bl sub_0202C6D4 - cmp r4, #5 - ldreq r0, _02043760 ; =_020AFEB4 - moveq r1, #4 - ldreq r0, [r0, #4] - streq r1, [r0, #0x90c] - beq _02043758 - ldr r0, _02043760 ; =_020AFEB4 - mov r1, #0 - ldr r0, [r0, #4] - str r1, [r0, #0x90c] -_02043744: - ldr r0, _02043760 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_0202C620 -_02043758: - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_02043760: .word _020AFEB4 -_02043764: .word _0209CA68 -_02043768: .word _0209CAB4 - arm_func_end sub_020435CC - - arm_func_start sub_0204376C -sub_0204376C: ; 0x0204376C - stmdb sp!, {r3, lr} - ldr r0, _020437B4 ; =_0209CA88 - bl CreateDialogueBox - ldr r3, _020437B8 ; =_020AFEB4 - ldr r1, _020437BC ; =0x00000418 - ldr ip, [r3, #4] - ldr r2, _020437C0 ; =0x000002FF - strb r0, [ip, #0x7d7] - ldr r0, [r3, #4] - mov r3, #0 - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd7] - bl ShowStringIdInDialogueBox - ldr r0, _020437B8 ; =_020AFEB4 - mov r1, #2 - ldr r0, [r0, #4] - str r1, [r0, #0x90c] - ldmia sp!, {r3, pc} - .align 2, 0 -_020437B4: .word _0209CA88 -_020437B8: .word _020AFEB4 -_020437BC: .word 0x00000418 -#ifdef JAPAN -_020437C0: .word 0x000023A7 -#else -_020437C0: .word 0x000002FF -#endif - arm_func_end sub_0204376C - - arm_func_start sub_020437C4 -sub_020437C4: ; 0x020437C4 - stmdb sp!, {r3, lr} - ldr r0, _02043840 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd7] - bl IsDialogueBoxActive - cmp r0, #0 - ldmneia sp!, {r3, pc} - mov r0, #9 - mov r1, #0 - bl sub_02043BFC - ldr r2, _02043840 ; =_020AFEB4 - ldr r1, [r2, #4] - add r1, r1, #0x900 - strh r0, [r1, #0x10] - ldr r1, [r2, #4] - add r0, r1, #0x700 - add r1, r1, #0x900 - ldrsb r0, [r0, #0xd4] - ldrsh r1, [r1, #0x10] - bl sub_0202C6D4 - ldr r0, _02043840 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd7] - bl sub_0202F2C4 - ldr r0, _02043840 ; =_020AFEB4 - mov r1, #3 - ldr r0, [r0, #4] - str r1, [r0, #0x90c] - ldmia sp!, {r3, pc} - .align 2, 0 -_02043840: .word _020AFEB4 - arm_func_end sub_020437C4 - - arm_func_start sub_02043844 -sub_02043844: ; 0x02043844 - stmdb sp!, {r3, lr} - ldr r0, _02043940 ; =_020AFEB4 - mvn r1, #1 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd7] - cmp r0, r1 - ldmeqia sp!, {r3, pc} - bl CloseDialogueBox - ldr r0, _02043940 ; =_020AFEB4 - mvn r2, #1 - ldr r1, [r0, #4] - strb r2, [r1, #0x7d7] - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd5] - cmp r0, r2 - beq _020438AC - bl sub_02028354 - cmp r0, #3 - bne _020438AC - ldr r0, _02043940 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd5] - bl sub_0202810C -_020438AC: - ldr r0, _02043940 ; =_020AFEB4 - mvn r1, #1 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd6] - cmp r0, r1 - beq _020438E8 - bl sub_02028354 - cmp r0, #3 - bne _020438E8 - ldr r0, _02043940 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd6] - bl sub_0202810C -_020438E8: - ldr r0, _02043940 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_02028354 - cmp r0, #3 - bne _02043918 - ldr r0, _02043940 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_0202810C -_02043918: - ldr r0, _02043940 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_0202C620 - ldr r0, _02043940 ; =_020AFEB4 - mov r1, #0 - ldr r0, [r0, #4] - str r1, [r0, #0x90c] - ldmia sp!, {r3, pc} - .align 2, 0 -_02043940: .word _020AFEB4 - arm_func_end sub_02043844 - - arm_func_start sub_02043944 -sub_02043944: ; 0x02043944 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr r0, _020439E8 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0xb4 - add r0, r0, #0x1800 - bl sub_020547C8 - ldr r0, _020439E8 ; =_020AFEB4 - mov r1, #0 - ldr r0, [r0, #4] - add r0, r0, #0xb4 - add r0, r0, #0x1800 - bl sub_02054804 - ldr r1, _020439E8 ; =_020AFEB4 - ldr r2, _020439EC ; =0x000002FE - ldr r0, [r1, #4] - mov r3, #0x10 - add r0, r0, #0x800 - strh r2, [r0, #0x7c] - ldr r2, [r1, #4] - ldr r0, _020439F0 ; =_0209CA78 - str r3, [r2, #0x880] - ldr r3, [r1, #4] - ldr r1, _020439F4 ; =0x00481813 - add r2, r3, #0x1800 - ldrsh ip, [r2, #0xb4] - add r2, r3, #0x74 - ldr r3, _020439F8 ; =sub_02043BAC - str ip, [sp] - mov ip, #9 - add r2, r2, #0x800 - str ip, [sp, #4] - bl CreateAdvancedMenu - ldr r1, _020439E8 ; =_020AFEB4 - mov r2, #5 - ldr r3, [r1, #4] - strb r0, [r3, #0x7d9] - ldr r0, [r1, #4] - str r2, [r0, #0x90c] - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_020439E8: .word _020AFEB4 -#ifdef JAPAN -_020439EC: .word 0x000023A6 -#else -_020439EC: .word 0x000002FE -#endif -_020439F0: .word _0209CA78 -_020439F4: .word 0x00481813 -_020439F8: .word sub_02043BAC - arm_func_end sub_02043944 - - arm_func_start sub_020439FC -sub_020439FC: ; 0x020439FC - stmdb sp!, {r3, r4, r5, lr} - ldr r0, _02043B78 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd9] - bl IsAdvancedMenuActive2 - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - ldr r0, _02043B78 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd9] - bl GetAdvancedMenuCurrentOption - ldr r1, _02043B78 ; =_020AFEB4 - mov r4, r0, lsl #0x10 - ldr r0, [r1, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd9] - bl GetAdvancedMenuResult - ldr r1, _02043B78 ; =_020AFEB4 - mov r5, r0, lsl #0x10 - ldr r0, [r1, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd9] - bl CloseAdvancedMenu - ldr r0, _02043B78 ; =_020AFEB4 - mvn r3, #1 - ldr r1, [r0, #4] - mov r2, r4, asr #0xf - strb r3, [r1, #0x7d9] - ldr r1, [r0, #4] - add r0, r1, #0x1000 - add r1, r1, #0xb4 - ldr r3, [r0, #0x8b8] - add r0, r1, #0x1800 - ldrsh r4, [r3, r2] - bl sub_020547D8 - mvn r0, #0 - cmp r0, r5, asr #16 - bne _02043AB8 - ldr r0, _02043B78 ; =_020AFEB4 - mov r1, #0 - strh r1, [r0] - ldr r0, [r0, #4] - mov r1, #6 - str r1, [r0, #0x90c] - ldmia sp!, {r3, r4, r5, pc} -_02043AB8: - mov r0, r4 - bl sub_020440F8 - cmp r0, #0 - bgt _02043B38 - ldr r0, _02043B78 ; =_020AFEB4 - mov r1, #0 - strh r1, [r0] - ldr r0, [r0, #4] - sub r1, r1, #2 - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd5] - cmp r0, r1 - beq _02043AF0 - bl sub_0202812C -_02043AF0: - ldr r0, _02043B78 ; =_020AFEB4 - mvn r1, #1 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd6] - cmp r0, r1 - beq _02043B10 - bl sub_0202812C -_02043B10: - ldr r0, _02043B78 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_0202812C - ldr r0, _02043B78 ; =_020AFEB4 - mov r1, #1 - ldr r0, [r0, #4] - str r1, [r0, #0x90c] - ldmia sp!, {r3, r4, r5, pc} -_02043B38: - ldr r2, _02043B78 ; =_020AFEB4 - strh r4, [r2] - ldr r1, [r2, #4] - add r1, r1, #0x900 - strh r0, [r1, #0x10] - ldr r1, [r2, #4] - add r0, r1, #0x700 - add r1, r1, #0x900 - ldrsb r0, [r0, #0xd4] - ldrsh r1, [r1, #0x10] - bl sub_0202C6D4 - ldr r0, _02043B78 ; =_020AFEB4 - mov r1, #6 - ldr r0, [r0, #4] - str r1, [r0, #0x90c] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02043B78: .word _020AFEB4 - arm_func_end sub_020439FC - - arm_func_start sub_02043B7C -sub_02043B7C: ; 0x02043B7C - stmdb sp!, {r3, lr} - ldr r0, _02043BA8 ; =_020AFEB4 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd4] - bl sub_0202C620 - ldr r0, _02043BA8 ; =_020AFEB4 - mov r1, #0 - ldr r0, [r0, #4] - str r1, [r0, #0x90c] - ldmia sp!, {r3, pc} - .align 2, 0 -_02043BA8: .word _020AFEB4 - arm_func_end sub_02043B7C - - arm_func_start sub_02043BAC -sub_02043BAC: ; 0x02043BAC - stmdb sp!, {r4, lr} - mov r4, r0 - cmp r1, #0 - blt _02043BD4 - ldr r2, _02043BF8 ; =_020AFEB4 - ldr r3, [r2, #4] - add r2, r3, #0x1800 - ldrsh r2, [r2, #0xb4] - cmp r1, r2 - blt _02043BDC -_02043BD4: - mov r0, #0 - ldmia sp!, {r4, pc} -_02043BDC: - add r2, r3, #0x1000 - ldr r2, [r2, #0x8b8] - mov r1, r1, lsl #1 - ldrsh r1, [r2, r1] - bl GetNameRaw - mov r0, r4 - ldmia sp!, {r4, pc} - .align 2, 0 -_02043BF8: .word _020AFEB4 - arm_func_end sub_02043BAC - - arm_func_start sub_02043BFC -sub_02043BFC: ; 0x02043BFC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r2, _0204408C ; =_020AFEB4 - mov sb, r0 - ldr r0, [r2, #4] - mov r4, r1 - ldr r6, [r0] - bl sub_0200FD48 - sub r1, r6, #5 - mov r5, r0 - cmp r1, #2 - mov r7, #0 - movls r0, #1 - movhi r0, r7 - cmp r4, #0 - and r4, r0, #0xff - beq _02043D0C - mov r0, #0x3e8 - mov r1, #8 - bl MemAlloc - mov r8, r0 - mov sl, #0 - ldr r0, _0204408C ; =_020AFEB4 - mov r1, sl - mov r2, #1 -_02043C5C: - ldr r3, [r0, #8] - ldrb r3, [r3, sl] - cmp r3, #1 - moveq r3, r2 - movne r3, r1 - strb r3, [r8, sl] - add sl, sl, #1 - cmp sl, #0x3e8 - blt _02043C5C - bl sub_0200FD48 - mov r1, r0 - mov r0, r8 - bl SortItemsInStorage - mov sl, #0 - ldr r0, _0204408C ; =_020AFEB4 - mov r2, sl - mov r3, #1 -_02043CA0: - ldrb r1, [r8, sl] - cmp r1, #0 - movne fp, r3 - ldr r1, [r0, #8] - moveq fp, r2 - strb fp, [r1, sl] - add sl, sl, #1 - cmp sl, #0x3e8 - blt _02043CA0 - mov r0, r8 - bl MemFree - ldr r0, _0204408C ; =_020AFEB4 - mvn r1, #1 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd5] - cmp r0, r1 - beq _02043CEC - bl sub_0202F9B8 -_02043CEC: - ldr r0, _0204408C ; =_020AFEB4 - mvn r1, #1 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd6] - cmp r0, r1 - beq _02043D0C - bl sub_0202F9B8 -_02043D0C: - mov r8, #0 - b _02043DE4 -_02043D14: - ldr r0, _02044090 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, r8, lsl #1 - add r0, r0, #0x300 - ldrsh r1, [r0, #0x8a] - cmp r1, #0 - beq _02043DEC - cmp r4, #0 - beq _02043D48 - ldrsh r0, [r0, #0x8a] - bl IsItemValidVeneer - cmp r0, #0 - beq _02043DD8 -_02043D48: - cmp r6, #7 - bne _02043DBC - ldr r0, _02044090 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r1, r0, r8, lsl #1 - add r0, r1, #0x300 - ldrsh sl, [r0, #0x8a] - add r0, r1, #0xb00 - ldrh fp, [r0, #0x5a] - mov r0, sl - bl IsItemInTimeDarkness - cmp r0, #0 - beq _02043DB0 - mov r0, sl - bl IsTreasureBox - cmp r0, #0 - beq _02043DA8 - mov r0, fp, lsl #0x10 - mov r0, r0, asr #0x10 - bl IsItemInTimeDarkness - cmp r0, #0 - beq _02043DB0 - mov r0, #1 - b _02043DB4 -_02043DA8: - mov r0, #1 - b _02043DB4 -_02043DB0: - mov r0, #0 -_02043DB4: - cmp r0, #0 - beq _02043DD8 -_02043DBC: - ldr r0, _0204408C ; =_020AFEB4 - add r2, r7, #1 - ldr r0, [r0, #4] - add r1, r0, r7, lsl #1 - mov r0, r2, lsl #0x10 - strh r8, [r1, #4] - mov r7, r0, asr #0x10 -_02043DD8: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 -_02043DE4: - cmp r8, r5 - blt _02043D14 -_02043DEC: - mov r4, r7 - mvn r3, #0 - ldr r1, _0204408C ; =_020AFEB4 - b _02043E14 -_02043DFC: - ldr r2, [r1, #4] - add r0, r4, #1 - add r2, r2, r4, lsl #1 - mov r0, r0, lsl #0x10 - strh r3, [r2, #4] - mov r4, r0, asr #0x10 -_02043E14: - cmp r4, r5 - blt _02043DFC - mov r0, r7, lsl #0x10 - ldr r4, _0204408C ; =_020AFEB4 - mov r5, r0, asr #0x10 - cmp r5, #0 - str sb, [r4, #0x10] - movle r0, #9 - strle r0, [r4, #0x10] - suble r0, r0, #0xa - ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - cmp sb, #9 - moveq r0, r5 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r8, #0 - mov r7, r8 - mov fp, #1 - ldr sl, _02044090 ; =BAG_ITEMS_PTR_MIRROR - b _02044070 -_02043E60: - ldr r1, [r4, #4] - ldr r0, [sl] - add r1, r1, r7, lsl #1 - ldrsh r6, [r1, #4] - add r0, r0, r6, lsl #1 - add r0, r0, #0x300 - ldrsh r0, [r0, #0x8a] - bl GetItemCategoryVeneer - ldr r1, [sl] - add r1, r1, r6, lsl #1 - add r1, r1, #0x300 - ldrsh r1, [r1, #0x8a] - cmp r1, #0x5c - bgt _02043EA0 - beq _02043F20 - b _02043F24 -_02043EA0: - sub r1, r1, #0x190 - cmp r1, #0x1b - addls pc, pc, r1, lsl #2 - b _02043F24 -_02043EB0: ; jump table - b _02043F20 ; case 0 - b _02043F20 ; case 1 - b _02043F20 ; case 2 - b _02043F20 ; case 3 - b _02043F20 ; case 4 - b _02043F20 ; case 5 - b _02043F20 ; case 6 - b _02043F20 ; case 7 - b _02043F20 ; case 8 - b _02043F20 ; case 9 - b _02043F20 ; case 10 - b _02043F20 ; case 11 - b _02043F20 ; case 12 - b _02043F20 ; case 13 - b _02043F20 ; case 14 - b _02043F20 ; case 15 - b _02043F20 ; case 16 - b _02043F20 ; case 17 - b _02043F20 ; case 18 - b _02043F20 ; case 19 - b _02043F20 ; case 20 - b _02043F20 ; case 21 - b _02043F20 ; case 22 - b _02043F20 ; case 23 - b _02043F20 ; case 24 - b _02043F20 ; case 25 - b _02043F20 ; case 26 - b _02043F20 ; case 27 -_02043F20: - mov r0, #7 -_02043F24: - cmp sb, #9 - addls pc, pc, sb, lsl #2 - b _0204402C -_02043F30: ; jump table - b _02043F58 ; case 0 - b _02043F70 ; case 1 - b _02043F88 ; case 2 - b _02043F9C ; case 3 - b _02043FB4 ; case 4 - b _02043FC8 ; case 5 - b _02043FDC ; case 6 - b _02043FF8 ; case 7 - b _0204402C ; case 8 - b _0204402C ; case 9 -_02043F58: - cmp r0, #0 - cmpne r0, #1 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - b _02044030 -_02043F70: - cmp r0, #2 - cmpne r0, #3 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - b _02044030 -_02043F88: - cmp r0, #4 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - b _02044030 -_02043F9C: - cmp r0, #5 - cmpne r0, #0xb - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - b _02044030 -_02043FB4: - cmp r0, #9 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - b _02044030 -_02043FC8: - cmp r0, #0xf - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - b _02044030 -_02043FDC: - add r0, r0, #0xf4 - and r0, r0, #0xff - cmp r0, #2 - movls r0, #1 - movhi r0, #0 - and r0, r0, #0xff - b _02044030 -_02043FF8: - add r0, r0, #0xfa - and r0, r0, #0xff - cmp r0, #4 - mov r1, #0 - bhi _02044018 - mov r0, fp, lsl r0 - tst r0, #0x17 - movne r1, fp -_02044018: - cmp r1, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - b _02044030 -_0204402C: - mov r0, #1 -_02044030: - cmp r0, #0 - beq _02044064 - ldr r0, [r4, #4] - add r1, r8, #1 - mov r1, r1, lsl #0x10 - add r2, r0, r8, lsl #1 - ldrsh r2, [r2, #4] - add r0, r0, r7, lsl #1 - strh r2, [r0, #4] - ldr r0, [r4, #4] - add r0, r0, r8, lsl #1 - strh r6, [r0, #4] - mov r8, r1, asr #0x10 -_02044064: - add r0, r7, #1 - mov r0, r0, lsl #0x10 - mov r7, r0, asr #0x10 -_02044070: - cmp r7, r5 - blt _02043E60 - cmp r8, #0 - mvnle r8, #0 - mov r0, r8, lsl #0x10 - mov r0, r0, asr #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0204408C: .word _020AFEB4 -_02044090: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02043BFC - - arm_func_start sub_02044094 -sub_02044094: ; 0x02044094 - stmdb sp!, {r3, lr} - mov r0, #0x3e8 - mov r1, #8 - bl MemAlloc - ldr r1, _020440B4 ; =_020AFEB4 - str r0, [r1, #8] - bl sub_020434D4 - ldmia sp!, {r3, pc} - .align 2, 0 -_020440B4: .word _020AFEB4 - arm_func_end sub_02044094 - - arm_func_start sub_020440B8 -sub_020440B8: ; 0x020440B8 - stmdb sp!, {r3, lr} - ldr r0, _020440D8 ; =_020AFEB4 - ldr r0, [r0, #8] - bl MemFree - ldr r0, _020440D8 ; =_020AFEB4 - mov r1, #0 - str r1, [r0, #8] - ldmia sp!, {r3, pc} - .align 2, 0 -_020440D8: .word _020AFEB4 - arm_func_end sub_020440B8 - - arm_func_start sub_020440DC -sub_020440DC: ; 0x020440DC - ldr r0, _020440F4 ; =_020AFEB4 - mov r1, #9 - str r1, [r0, #0x10] - mov r1, #0 - strh r1, [r0] - bx lr - .align 2, 0 -_020440F4: .word _020AFEB4 - arm_func_end sub_020440DC - - arm_func_start sub_020440F8 -sub_020440F8: ; 0x020440F8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sb, #0 - mov sl, r0 - mov r1, sb - bl GetType - mov r6, r0 - mov r0, sl - mov r1, #1 - bl GetType - mov r7, r0 - mov r8, sb - ldr r4, _020441B4 ; =_020AFEB4 - ldr fp, _020441B8 ; =BAG_ITEMS_PTR_MIRROR - b _02044198 -_02044130: - add r0, r1, r8, lsl #1 - ldrsh r5, [r0, #4] - ldr r0, [fp] - mov r1, sl - add r0, r0, r5, lsl #1 - add r0, r0, #0x300 - ldrsh r0, [r0, #0x8a] - mov r2, r6 - mov r3, r7 - bl IsExclusiveItemIdForMonster - cmp r0, #0 - beq _0204418C - ldr r3, [r4, #4] - add r0, sb, #1 - add r1, r3, sb, lsl #1 - ldrsh r2, [r1, #4] - add r1, r3, r8, lsl #1 - mov r0, r0, lsl #0x10 - strh r2, [r1, #4] - ldr r1, [r4, #4] - add r1, r1, sb, lsl #1 - strh r5, [r1, #4] - mov sb, r0, asr #0x10 -_0204418C: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 -_02044198: - ldr r1, [r4, #4] - add r0, r1, #0x900 - ldrsh r0, [r0, #0x10] - cmp r8, r0 - blt _02044130 - mov r0, sb - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_020441B4: .word _020AFEB4 -_020441B8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_020440F8 - - arm_func_start sub_020441BC -sub_020441BC: ; 0x020441BC - stmdb sp!, {r3, lr} - ldr r0, _0204420C ; =_020AFEB4 - mov r1, #1 - ldr r0, [r0, #0x10] - bl sub_02043BFC - ldr r2, _0204420C ; =_020AFEB4 - mov r3, #0 - ldr r1, [r2, #4] - add r1, r1, #0x900 - strh r0, [r1, #0x10] - ldr r2, [r2, #4] - add r0, r2, #0x700 - add r1, r2, #0x900 - add r2, r2, #0x1000 - ldrsb r0, [r0, #0xd4] - ldrsh r1, [r1, #0x10] - ldr r2, [r2, #0x8bc] - bl sub_0202C654 - bl sub_02044308 - ldmia sp!, {r3, pc} - .align 2, 0 -_0204420C: .word _020AFEB4 - arm_func_end sub_020441BC - - arm_func_start sub_02044210 -sub_02044210: ; 0x02044210 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #0x54 - mov r4, r0 - bl sub_02027B1C -#ifdef JAPAN - ldr r3, _020445D8 ; =0x000023A8 -#endif - mov r0, r4 - mov r1, #0xa - mov r2, #2 -#ifndef JAPAN - mov r3, #0x300 -#endif - bl sub_02026268 - bl sub_020434FC - str r0, [sp, #0x28] - add r1, sp, #4 - str r1, [sp] - ldr r3, _02044268 ; =0x00000301 - mov r0, r4 - mov r1, #0x66 - mov r2, #2 - bl sub_020262E0 - mov r0, r4 - bl UpdateWindow - add sp, sp, #0x54 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -#ifdef JAPAN -_020445D8: .word 0x000023A8 -_02044268: .word 0x000023A9 -#else -_02044268: .word 0x00000301 -#endif - arm_func_end sub_02044210 - - arm_func_start sub_0204426C -sub_0204426C: ; 0x0204426C - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #8 - mov r1, r0 - bl MemAlloc - ldr r1, _020442C0 ; =_020AFEC8 - mov r3, #1 - str r0, [r1] - str r4, [r0] - ldr r0, [r1] - ldr r2, _020442C4 ; =_0209CB0C - strb r3, [r0, #4] - ldr r0, [r1] - ldr r1, _020442C8 ; =sub_02044338 - ldr r0, [r0] - add r0, r2, r0, lsl #4 - bl CreateTextBox - ldr r1, _020442C0 ; =_020AFEC8 - ldr r1, [r1] - strb r0, [r1, #5] - ldmia sp!, {r4, pc} - .align 2, 0 -_020442C0: .word _020AFEC8 -_020442C4: .word _0209CB0C -_020442C8: .word sub_02044338 - arm_func_end sub_0204426C - - arm_func_start sub_020442CC -sub_020442CC: ; 0x020442CC - stmdb sp!, {r3, lr} - ldr r0, _02044304 ; =_020AFEC8 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0, #5] - bl CloseTextBox2 - ldr r0, _02044304 ; =_020AFEC8 - ldr r0, [r0] - bl MemFree - ldr r0, _02044304 ; =_020AFEC8 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02044304: .word _020AFEC8 - arm_func_end sub_020442CC - - arm_func_start sub_02044308 -sub_02044308: ; 0x02044308 - stmdb sp!, {r3, lr} - ldr r0, _02044334 ; =_020AFEC8 - ldr r2, [r0] - cmp r2, #0 - ldmeqia sp!, {r3, pc} - mov r1, #1 - strb r1, [r2, #4] - ldr r0, [r0] - ldrsb r0, [r0, #5] - bl sub_0202F9B8 - ldmia sp!, {r3, pc} - .align 2, 0 -_02044334: .word _020AFEC8 - arm_func_end sub_02044308 - - arm_func_start sub_02044338 -sub_02044338: ; 0x02044338 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x54 - ldr r1, _02044404 ; =_020AFEC8 - mov r5, r0 - ldr r2, [r1] - ldrb r1, [r2, #4] - cmp r1, #0 - beq _020443FC - mov r1, #0 - strb r1, [r2, #4] - mov r4, #2 - bl sub_02027B1C - ldr r0, _02044404 ; =_020AFEC8 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, #0 - cmpne r0, #2 - bne _020443B0 - bl GetNbItemsInBag - str r0, [sp, #0x28] - bl GetCurrentBagCapacity -#ifdef JAPAN - str r0, [sp, #0x2c] - add r2, sp, #4 - str r2, [sp] - ldr r3, _0204477C ; =0x000031F7 - mov r0, r5 - mov r1, #0 - mov r2, #2 -#else - mov r2, #2 - str r0, [sp, #0x2c] - add r1, sp, #4 - str r1, [sp] - mov r0, r5 - add r3, r2, #0x330 - mov r1, #0 -#endif - bl sub_020262E0 - add r4, r4, #0x10 -_020443B0: - ldr r0, _02044404 ; =_020AFEC8 - ldr r0, [r0] - ldr r0, [r0] - sub r0, r0, #1 - cmp r0, #1 - bhi _020443F4 - bl CountNbOfItemsInStorage - str r0, [sp, #0x28] - bl sub_0200FD48 - str r0, [sp, #0x2c] - add ip, sp, #4 - ldr r3, _02044408 ; =0x00000333 - mov r0, r5 - mov r2, r4 - mov r1, #0 - str ip, [sp] - bl sub_020262E0 -_020443F4: - mov r0, r5 - bl UpdateWindow -_020443FC: - add sp, sp, #0x54 - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_02044404: .word _020AFEC8 -#ifdef JAPAN -_0204477C: .word 0x000031F7 -_02044408: .word 0x000031F8 -#else -_02044408: .word 0x00000333 -#endif - arm_func_end sub_02044338 - - arm_func_start sub_0204440C -sub_0204440C: ; 0x0204440C - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #0xc - mov r1, #8 - bl MemAlloc - ldr r2, _02044468 ; =_020AFECC - mov ip, #0 - str r0, [r2] - str r4, [r0] - ldr r1, [r2] - ldr r0, _0204446C ; =_0209CB3C - strh ip, [r1, #6] - ldr r3, [r2] - ldr r1, _02044470 ; =sub_020444F0 - strh ip, [r3, #8] - ldr r2, [r2] - mov r3, #1 - strb r3, [r2, #4] - bl CreateTextBox - ldr r1, _02044468 ; =_020AFECC - ldr r1, [r1] - strb r0, [r1, #0xa] - ldmia sp!, {r4, pc} - .align 2, 0 -_02044468: .word _020AFECC -_0204446C: .word _0209CB3C -_02044470: .word sub_020444F0 - arm_func_end sub_0204440C - - arm_func_start sub_02044474 -sub_02044474: ; 0x02044474 - stmdb sp!, {r3, lr} - ldr r0, _020444AC ; =_020AFECC - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0, #0xa] - bl CloseTextBox2 - ldr r0, _020444AC ; =_020AFECC - ldr r0, [r0] - bl MemFree - ldr r0, _020444AC ; =_020AFECC - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_020444AC: .word _020AFECC - arm_func_end sub_02044474 - - arm_func_start sub_020444B0 -sub_020444B0: ; 0x020444B0 - stmdb sp!, {r3, lr} - ldr r1, _020444EC ; =_020AFECC - ldr r3, [r1] - cmp r3, #0 - ldrnesh r2, [r3, #6] - cmpne r2, r0 - ldmeqia sp!, {r3, pc} - strh r0, [r3, #6] - ldr r0, [r1] - mov r2, #1 - strb r2, [r0, #4] - ldr r0, [r1] - ldrsb r0, [r0, #0xa] - bl sub_0202F9B8 - ldmia sp!, {r3, pc} - .align 2, 0 -_020444EC: .word _020AFECC - arm_func_end sub_020444B0 - - arm_func_start sub_020444F0 -sub_020444F0: ; 0x020444F0 - stmdb sp!, {r4, lr} - ldr r1, _02044564 ; =_020AFECC - mov r4, r0 - ldr r2, [r1] - ldrb r1, [r2, #4] - cmp r1, #0 - ldmeqia sp!, {r4, pc} - mov r1, #0 - strb r1, [r2, #4] - bl sub_02027B1C - ldr r0, _02044564 ; =_020AFECC - ldr r2, [r0] - ldrsh r1, [r2, #6] - strh r1, [r2, #8] - ldr r0, [r0] - ldrsh r0, [r0, #8] - cmp r0, #0 - beq _02044558 -#if defined(EUROPE) - add r0, r0, #0x4b - add r0, r0, #0x2f00 -#elif defined(JAPAN) - add r0, r0, #0x41 - add r0, r0, #0x1d00 -#else - add r0, r0, #0x49 - add r0, r0, #0x2f00 -#endif - mov r3, r0, lsl #0x10 - mov r1, #2 - mov r0, r4 - mov r2, r1 - mov r3, r3, lsr #0x10 - bl sub_02026268 -_02044558: - mov r0, r4 - bl UpdateWindow - ldmia sp!, {r4, pc} - .align 2, 0 -_02044564: .word _020AFECC - arm_func_end sub_020444F0 - - arm_func_start sub_02044568 -sub_02044568: ; 0x02044568 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #8 - mov r1, r0 - bl MemAlloc - ldr r1, _020445BC ; =_020AFED0 - mov r3, #1 - str r0, [r1] - str r4, [r0] - ldr r0, [r1] - ldr r2, _020445C0 ; =_0209CB4C - strb r3, [r0, #4] - ldr r0, [r1] - ldr r1, _020445C4 ; =sub_02044604 - ldr r0, [r0] - add r0, r2, r0, lsl #4 - bl CreateTextBox - ldr r1, _020445BC ; =_020AFED0 - ldr r1, [r1] - strb r0, [r1, #5] - ldmia sp!, {r4, pc} - .align 2, 0 -_020445BC: .word _020AFED0 -_020445C0: .word _0209CB4C -_020445C4: .word sub_02044604 - arm_func_end sub_02044568 - - arm_func_start sub_020445C8 -sub_020445C8: ; 0x020445C8 - stmdb sp!, {r3, lr} - ldr r0, _02044600 ; =_020AFED0 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0, #5] - bl CloseTextBox2 - ldr r0, _02044600 ; =_020AFED0 - ldr r0, [r0] - bl MemFree - ldr r0, _02044600 ; =_020AFED0 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02044600: .word _020AFED0 - arm_func_end sub_020445C8 - - arm_func_start sub_02044604 -sub_02044604: ; 0x02044604 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #0x54 - ldr r1, _02044680 ; =_020AFED0 - mov r4, r0 - ldr r2, [r1] - ldrb r1, [r2, #4] - cmp r1, #0 - beq _02044678 - mov r1, #0 - strb r1, [r2, #4] - bl sub_02027B1C -#ifdef JAPAN - ldr r3, _020449FC ; =0x000031F9 -#endif - mov r0, r4 - mov r1, #4 - mov r2, #0 -#ifndef JAPAN - mov r3, #0x334 -#endif - bl sub_02026268 - bl GetMoneyCarried - mov r1, #0x18 - str r1, [sp, #0x2c] - str r0, [sp, #0x28] - add r1, sp, #4 - str r1, [sp] - ldr r3, _02044684 ; =0x00000335 - mov r0, r4 - mov r1, #0x10 - mov r2, #0xc - bl sub_020262E0 - mov r0, r4 - bl UpdateWindow -_02044678: - add sp, sp, #0x54 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_02044680: .word _020AFED0 -#ifdef JAPAN -_020449FC: .word 0x000031F9 -_02044684: .word 0x000031FA -#else -_02044684: .word 0x00000335 -#endif - arm_func_end sub_02044604 - - arm_func_start sub_02044688 -sub_02044688: ; 0x02044688 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #0xa4 - mov r6, r0 - mov r5, r1 - ldr r0, _020447E8 ; =0x00000944 - mov r1, #8 - mov r8, r2 - mov r7, r3 - bl MemAlloc - ldr r1, _020447E8 ; =0x00000944 - mov r4, r0 - bl MemZero - mov r1, r8 - mov r2, r7 - mov r3, #0 - strb r3, [r4, #0x72e] - strb r3, [r4, #0x82e] - str r3, [r4, #0x940] - sub r0, r3, #1 - str r0, [r4, #0x930] - str r3, [r4, #0x940] - ldr r3, [sp, #0xc4] - add r0, r4, #4 - str r3, [sp] - ldrb r3, [sp, #0xc0] - bl sub_02044BF8 - ldr r0, _020447EC ; =_0209CB78 - ldr r1, _020447F0 ; =sub_02044964 - mov r2, r4 - bl CreateTextBoxWithArg - strb r0, [r4, #0x72c] - cmp r5, #3 - mov r0, #0x10 - str r0, [sp, #0x18] - ldr r1, _020447F4 ; =0x00000A36 - add r0, r4, #0x2e - add r0, r0, #0x700 - str r0, [sp, #0x54] - strh r1, [sp, #0x14] - bne _02044760 - add r1, r1, #3 - add r0, r4, #0x900 - strh r1, [r0, #0x2e] - str r4, [sp] - mov r1, #0 - str r1, [sp, #4] - str r1, [sp, #8] - ldr r0, _020447F8 ; =_0209CB88 - ldr r3, _020447FC ; =sub_02044990 - add r2, sp, #0xc - mov r1, #0x800 - bl CreateAdvancedTextBoxWithArg - strb r0, [r4, #0x72d] - b _020447A8 -_02044760: - cmp r5, #2 - addne r1, r1, #3 - addne r0, r4, #0x900 - strneh r1, [r0, #0x2e] - bne _020447A8 - add r1, r1, #2 - add r0, r4, #0x900 - strh r1, [r0, #0x2e] - str r4, [sp] - mov r1, #0 - str r1, [sp, #4] - str r1, [sp, #8] - ldr r0, _020447F8 ; =_0209CB88 - ldr r3, _020447FC ; =sub_02044990 - add r2, sp, #0xc - mov r1, #0x800 - bl CreateAdvancedTextBoxWithArg - strb r0, [r4, #0x72d] -_020447A8: - mov r0, r6 - str r6, [r4, #0x934] - bl GetItemAtIdx - ldrh r2, [r0] - add r1, r4, #0x900 - strh r2, [r1, #0x38] - ldrh r2, [r0, #2] - strh r2, [r1, #0x3a] - ldrh r2, [r0, #4] - mov r0, r4 - strh r2, [r1, #0x3c] - str r5, [r4] - bl sub_02044AEC - mov r0, r4 - add sp, sp, #0xa4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_020447E8: .word 0x00000944 -_020447EC: .word _0209CB78 -_020447F0: .word sub_02044964 -#ifdef JAPAN -_020447F4: .word 0x00000871 -#else -_020447F4: .word 0x00000A36 -#endif -_020447F8: .word _0209CB88 -_020447FC: .word sub_02044990 - arm_func_end sub_02044688 - - arm_func_start sub_02044800 -sub_02044800: ; 0x02044800 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r0, [r5, #0x940] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _020448E4 -_02044818: ; jump table - b _02044828 ; case 0 - b _02044830 ; case 1 - b _020448B8 ; case 2 - b _020448DC ; case 3 -_02044828: - mov r0, #1 - str r0, [r5, #0x940] -_02044830: - add r0, r5, #4 - bl sub_020451D8 - mov r4, r0 - mov r0, r5 - bl sub_02044AEC - cmp r4, #0 - beq _020448E4 - mov r0, #2 - str r0, [r5, #0x940] - cmp r4, #2 - bne _020448E4 - add r0, r5, #4 - bl sub_020452A0 - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _020448A0 -_02044870: ; jump table - b _02044880 ; case 0 - b _02044888 ; case 1 - b _02044890 ; case 2 - b _02044898 ; case 3 -_02044880: - mov r1, #1 - b _020448A4 -_02044888: - mov r1, #2 - b _020448A4 -_02044890: - mov r1, #3 - b _020448A4 -_02044898: - mov r1, #4 - b _020448A4 -_020448A0: - mov r1, #0 -_020448A4: - ldr r0, [r5, #0x934] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02058460 - b _020448E4 -_020448B8: - add r0, r5, #4 - bl sub_020452B8 - cmp r0, #0 - beq _020448E4 - mov r0, r5 - bl sub_02044918 - mov r0, #3 - str r0, [r5, #0x940] - b _020448E4 -_020448DC: - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} -_020448E4: - mov r0, #0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02044800 - - arm_func_start sub_020448EC -sub_020448EC: ; 0x020448EC - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, [r4] - cmp r0, #0 - ldmeqia sp!, {r4, pc} - bl sub_02044918 - ldr r0, [r4] - bl MemFree - mov r0, #0 - str r0, [r4] - ldmia sp!, {r4, pc} - arm_func_end sub_020448EC - - arm_func_start sub_02044918 -sub_02044918: ; 0x02044918 - stmdb sp!, {r4, lr} - mov r4, r0 - add r0, r4, #0x700 - ldrsb r0, [r0, #0x2d] - mvn r1, #1 - cmp r0, r1 - beq _02044940 - bl CloseAdvancedTextBox - mvn r0, #1 - strb r0, [r4, #0x72d] -_02044940: - add r0, r4, #0x700 - ldrsb r0, [r0, #0x2c] - mvn r1, #1 - cmp r0, r1 - ldmeqia sp!, {r4, pc} - bl CloseTextBox - mvn r0, #1 - strb r0, [r4, #0x72c] - ldmia sp!, {r4, pc} - arm_func_end sub_02044918 - - arm_func_start sub_02044964 -sub_02044964: ; 0x02044964 - stmdb sp!, {r4, lr} - add r1, r1, #0x900 - mov r4, r0 - ldrh r0, [r1, #0x2e] - bl StringFromId - mov r1, #2 - mov r3, r0 - mov r0, r4 - mov r2, r1 - bl DrawTextInWindow - ldmia sp!, {r4, pc} - arm_func_end sub_02044964 - - arm_func_start sub_02044990 -sub_02044990: ; 0x02044990 - ldr ip, _020449A8 ; =DrawTextInWindow - add r1, r1, #0x2e - add r3, r1, #0x800 - mov r1, #2 - mov r2, #0x10 - bx ip - .align 2, 0 -_020449A8: .word DrawTextInWindow - arm_func_end sub_02044990 - - arm_func_start sub_020449AC -sub_020449AC: ; 0x020449AC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r0 - add r0, r6, #4 - mov r5, r1 - mov r4, #0 - bl sub_02045298 - cmp r0, #0 -#ifdef JAPAN - beq _02044A30 -#else - bne _020449E8 - mov r0, r5 - bl sub_02045330 - add r2, r6, #0x2e - mov r1, r0 - add r0, r2, #0x700 - bl sub_020584FC - b _02044A30 -_020449E8: -#endif - ldr r1, _02044ADC ; =DUNGEON_PTR - add r0, r6, #0x2e - ldr r1, [r1] - add r0, r0, #0x700 - add r1, r1, r5, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r1, [r1, #0xa84] -#else - ldr r1, [r1, #0xb28] -#endif - mov r2, r4 - ldr r7, [r1, #0xb4] - bl ov29_022E2A78 - ldrb r0, [r7, #0xbc] - cmp r0, #7 - beq _02044A2C - mov r0, r7 - bl IsExperienceLocked - cmp r0, #0 - beq _02044A30 -_02044A2C: - mov r4, #1 -_02044A30: - cmp r4, #0 - beq _02044A4C - add r0, r6, #0x2e - ldr r1, _02044AE0 ; =0x00000A3D - add r0, r0, #0x800 - bl GetStringFromFileVeneer - b _02044ACC -_02044A4C: - add r0, r6, #4 - bl sub_02045298 - cmp r0, #0 - bne _02044A70 - mov r0, r5 - bl sub_02045330 - bl GetActiveTeamMember - add r1, r0, #0x3e - b _02044A8C -_02044A70: - ldr r0, _02044ADC ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - ldr r0, [r0, #0xb4] - add r1, r0, #0x62 -_02044A8C: - ldrb r0, [r1] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - add r0, r6, #0x2e - bne _02044AB8 - ldr r1, _02044AE4 ; =0x00000A37 - add r0, r0, #0x800 - bl GetStringFromFileVeneer - b _02044ACC -_02044AB8: - ldr r2, _02044AE8 ; =_0209CB6C - mov r3, #1 - add r0, r0, #0x800 - str r3, [sp] - bl sub_0200D310 -_02044ACC: - add r0, r6, #0x700 - ldrsb r0, [r0, #0x2d] - bl SetAdvancedTextBoxField0x1C2 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02044ADC: .word DUNGEON_PTR -#ifdef JAPAN -_02044AE0: .word 0x00000878 -_02044AE4: .word 0x00000872 -#else -_02044AE0: .word 0x00000A3D -_02044AE4: .word 0x00000A37 -#endif -_02044AE8: .word _0209CB6C - arm_func_end sub_020449AC - - arm_func_start sub_02044AEC -sub_02044AEC: ; 0x02044AEC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - add r0, r7, #4 - bl sub_020452A0 - mov r4, r0 - mvn r0, #0 - cmp r4, r0 - ldrne r0, [r7, #0x930] - ldr r5, [r7] - cmpne r0, r4 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - add r0, r7, #4 - bl sub_02045298 - cmp r0, #0 - bne _02044B5C - cmp r5, #1 - addne r0, r7, #0x700 - ldrnesb r1, [r0, #0x2d] - mvnne r0, #1 - cmpne r1, r0 - beq _02044BEC - sub r0, r5, #2 - cmp r0, #1 - bhi _02044BEC - mov r0, r7 - mov r1, r4 - bl sub_020449AC - b _02044BEC -_02044B5C: - ldr r0, _02044BF4 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r6, [r0, #0xa84] -#else - ldr r6, [r0, #0xb28] -#endif - cmp r6, #0 - moveq r0, #0 - beq _02044B90 - ldr r0, [r6] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_02044B90: - cmp r0, #0 - cmpne r5, #1 - beq _02044BC8 - sub r0, r5, #2 - cmp r0, #1 - bhi _02044BC8 - add r0, r7, #0x700 - ldrsb r1, [r0, #0x2d] - mvn r0, #1 - cmp r1, r0 - beq _02044BC8 - mov r0, r7 - mov r1, r4 - bl sub_020449AC -_02044BC8: - mov r0, r6 - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - mov r2, #1 - mov r3, r2 - add r0, r6, #4 - mov r1, #0 - bl DrawTileGrid -_02044BEC: - str r4, [r7, #0x930] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02044BF4: .word DUNGEON_PTR - arm_func_end sub_02044AEC - - arm_func_start sub_02044BF8 -sub_02044BF8: ; 0x02044BF8 -#ifdef JAPAN -#define SUB_02044BF8_LOAD_OFFSET #0xa84 -#else -#define SUB_02044BF8_LOAD_OFFSET #0xb28 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xbc - mov fp, r1 - str r2, [sp, #4] - ldr r1, _0204519C ; =0x00000728 - mov sl, r0 - str r3, [sp, #8] - bl MemZero - ldr sb, [sp, #0xe0] - add r0, sl, #0x20c - mov r4, #0 - str r4, [sl] - cmp sb, #0 - add r7, r0, #0x400 - bne _02044CD8 - mov r8, r4 - mov fp, r4 - mov r6, #1 - mov r5, r4 -_02044C44: - mov r0, r8 - bl GetActiveTeamMember - ldrb r0, [r0] - tst r0, #1 - movne r1, r6 - moveq r1, fp - tst r1, #0xff - beq _02044C88 - tst r0, #2 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - addne r1, r7, r4, lsl #2 - addne r0, r7, r4 - strne r8, [r1, #8] - strneb r5, [r0, #0x18] - addne r4, r4, #1 -_02044C88: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 - cmp r8, #4 - blt _02044C44 - mov r0, r4, lsl #0x10 - mov r5, r0, asr #0x10 - mvn r3, #0 - mov r2, #0 - b _02044CCC -_02044CB0: - add r1, r7, r5, lsl #2 - add r0, r5, #1 - str r3, [r1, #8] - add r1, r7, r5 - mov r0, r0, lsl #0x10 - strb r2, [r1, #0x18] - mov r5, r0, asr #0x10 -_02044CCC: - cmp r5, #4 - blt _02044CB0 - b _02044D78 -_02044CD8: - mov r5, r4 -_02044CDC: - ldr r0, _020451A0 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 - ldr r6, [r0, SUB_02044BF8_LOAD_OFFSET] - mov r0, r6 - bl sub_0204533C - cmp r0, #0 - beq _02044D40 - cmp fp, #0 - beq _02044D18 - mov r0, r6 - ldr r8, [r6, #0xb4] - bl ov29_02347100 -#ifdef JAPAN - strb r0, [r8, #0x15d] -#else - strb r0, [r8, #0x161] -#endif -_02044D18: - add r0, r7, r4, lsl #2 - str r5, [r0, #8] - ldr r0, [r6, #0xb4] -#ifdef JAPAN - ldrb r0, [r0, #0x15d] -#else - ldrb r0, [r0, #0x161] -#endif - cmp r0, #0 - movne r1, #0 - add r0, r7, r4 - moveq r1, #3 - strb r1, [r0, #0x18] - add r4, r4, #1 -_02044D40: - add r5, r5, #1 - cmp r5, #4 - blt _02044CDC - mov r5, r4 - mvn r3, #0 - mov r1, #0 - b _02044D70 -_02044D5C: - add r2, r7, r5, lsl #2 - add r0, r7, r5 - str r3, [r2, #8] - strb r1, [r0, #0x18] - add r5, r5, #1 -_02044D70: - cmp r5, #4 - blt _02044D5C -_02044D78: - ldr r0, [sp, #0xe0] - str r4, [r7, #0x1c] - str r0, [r7] - cmp sb, #0 - moveq r0, #0 - beq _02044D98 - mov r0, #0xb - bl Arm9LoadUnkFieldNa0x2029EC8 -_02044D98: - str r0, [sl, #0x6e8] - str r4, [sl, #0x6ec] - str r4, [sl, #0x6f0] - mov sb, #0 - str sb, [sl, #0x6f4] - str sb, [sl, #0x6f8] - add r0, sl, #0x18c - str sb, [sl, #0x6dc] - add r2, sl, #0x20c - add r0, r0, #0x400 - mov r1, #0x40 - str sb, [sl, #0x6e0] - add r5, r2, #0x400 - bl MemZero - add r0, sl, #0x1cc - add r0, r0, #0x400 - mov r1, #0x40 - bl MemZero - add r0, sl, #0x18c - add r0, r0, #0x400 - str r0, [sp, #0x14] - add r0, sl, #0x3c - add r1, sl, #0x1cc - add r2, sl, #0x13c - str r0, [sp, #0x10] - add r0, r2, #0x400 - str r0, [sp, #0x18] - ldr r0, _020451A4 ; =0x000003E7 - mov r6, sb - sub r0, r0, #0x3e8 - str r0, [sp, #0x20] - ldr r0, _020451A4 ; =0x000003E7 - add r4, r1, #0x400 - sub r0, r0, #0x3e8 - str r0, [sp, #0x1c] - b _020450F8 -_02044E28: - mov r0, r5 - mov r1, r6 - bl sub_02045360 - mov fp, r0 - ldr r0, [sp, #0x1c] - cmp fp, r0 - beq _020450F4 - ldr r0, [sp, #0x10] - mov r1, r6 - add r0, r0, sb, lsl #8 - str r0, [sp, #0xc] - mov r0, r5 - bl sub_02045360 - mov r1, r0 - ldr r0, [sp, #0x20] - cmp r1, r0 - beq _02044EC4 - ldr r0, [r5] - cmp r0, #0 - bne _02044E8C - mov r0, r1, lsl #0x10 - mov r1, r0, asr #0x10 - ldr r0, [sp, #0x14] - bl sub_020584FC - b _02044EC4 -_02044E8C: - ldr r3, _020451A0 ; =DUNGEON_PTR - add r0, r5, r6 - ldr r3, [r3] - ldrb r0, [r0, #0x18] - add r1, r3, r1, lsl #2 - add r1, r1, #0x12000 - cmp r0, #0 - movne r0, #0x57 - ldr r1, [r1, SUB_02044BF8_LOAD_OFFSET] - moveq r0, #0x44 - and r2, r0, #0xff - ldr r0, [sp, #0x14] - ldr r1, [r1, #0xb4] - bl ov29_023002F0 -_02044EC4: - ldr r0, [sp, #0x14] - str r0, [sl, #0x574] - ldr r0, [r5] - cmp r0, #0 - bne _02044EE8 - ldr r1, _020451A8 ; =_0209CBA8 - mov r0, r4 - bl strcpy - b _020450A8 -_02044EE8: - ldr r0, _020451A0 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, fp, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, SUB_02044BF8_LOAD_OFFSET] - bl sub_0204533C - cmp r0, #0 - beq _020450F4 - ldr r0, _020451A0 ; =DUNGEON_PTR - ldr r2, [r0] - ldr r0, _020451AC ; =TEAM_MEMBER_TABLE_PTR - ldr r1, [r0] - add r0, r2, fp, lsl #2 - add r0, r0, #0x12000 - ldr r2, [r0, SUB_02044BF8_LOAD_OFFSET] - add r0, r1, #0x9000 - ldr r8, [r2, #0xb4] - ldr r2, [r0, #0x84c] - ldrsh r1, [r8, #0xc] - mov r0, #0x68 - smlabb r0, r1, r0, r2 - ldrsh r0, [r0, #8] - bl sub_02056228 - cmp r0, #0 - ldrsh r1, [r8, #0x12] - ldrsh r0, [r8, #0x16] - beq _02045000 - add r1, r1, r0 - ldr r0, _020451A4 ; =0x000003E7 - cmp r1, r0 - movgt r3, r0 - movle r3, r1 - mov r2, r3, asr #1 - ldrsh r0, [r8, #0x10] - add r2, r3, r2, lsr #30 - cmp r0, r2, asr #2 - bgt _02044F8C - ldr r1, _020451B0 ; =_0209CBB0 - mov r0, r4 - bl strcpy - b _020450A8 -_02044F8C: - ldr r2, _020451A4 ; =0x000003E7 - cmp r1, r2 - movgt r3, r2 - movle r3, r1 - mov r2, r3, asr #1 - add r2, r3, r2, lsr #30 - mov r2, r2, asr #2 - cmp r0, r2, lsl #1 - bgt _02044FC0 - ldr r1, _020451B4 ; =_0209CBB8 - mov r0, r4 - bl strcpy - b _020450A8 -_02044FC0: - ldr r2, _020451A4 ; =0x000003E7 - cmp r1, r2 - movgt r1, r2 - mov r2, r1, asr #1 - add r1, r1, r2, lsr #30 - mov r1, r1, asr #2 - add r1, r1, r1, lsl #1 - cmp r0, r1 - mov r0, r4 - bgt _02044FF4 - ldr r1, _020451B8 ; =_0209CBC0 - bl strcpy - b _020450A8 -_02044FF4: - ldr r1, _020451BC ; =_0209CBC8 - bl strcpy - b _020450A8 -_02045000: - add r1, r1, r0 - ldr r0, _020451A4 ; =0x000003E7 - cmp r1, r0 - movgt r3, r0 - movle r3, r1 - mov r2, r3, asr #1 - ldrsh r0, [r8, #0x10] - add r2, r3, r2, lsr #30 - cmp r0, r2, asr #2 - bgt _02045038 - ldr r1, _020451C0 ; =_0209CBD0 - mov r0, r4 - bl strcpy - b _020450A8 -_02045038: - ldr r2, _020451A4 ; =0x000003E7 - cmp r1, r2 - movgt r3, r2 - movle r3, r1 - mov r2, r3, asr #1 - add r2, r3, r2, lsr #30 - mov r2, r2, asr #2 - cmp r0, r2, lsl #1 - bgt _0204506C - ldr r1, _020451C4 ; =_0209CBD8 - mov r0, r4 - bl strcpy - b _020450A8 -_0204506C: - ldr r2, _020451A4 ; =0x000003E7 - cmp r1, r2 - movgt r1, r2 - mov r2, r1, asr #1 - add r1, r1, r2, lsr #30 - mov r1, r1, asr #2 - add r1, r1, r1, lsl #1 - cmp r0, r1 - mov r0, r4 - bgt _020450A0 - ldr r1, _020451C8 ; =_0209CBE0 - bl strcpy - b _020450A8 -_020450A0: - ldr r1, _020451A8 ; =_0209CBA8 - bl strcpy -_020450A8: - str r4, [sl, #0x578] - ldr r0, [r5] - cmp r0, #0 - bne _020450C4 - mov r0, fp, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetActiveTeamMember -_020450C4: - ldr r0, [sp, #0x18] - ldr r2, _020451CC ; =_0209CBE8 - str r0, [sp] - ldr r0, [sp, #0xc] - mov r1, #0x100 - mov r3, #0 - bl PreprocessString - add r1, sl, sb, lsl #3 - ldr r0, [sp, #0xc] - add sb, sb, #1 - str r0, [r1, #0xc] - str sb, [r1, #0x10] -_020450F4: - add r6, r6, #1 -_020450F8: - ldr r0, [r5, #0x1c] - cmp r6, r0 - blt _02044E28 - mov r0, #0 - add r1, sl, sb, lsl #3 - str r0, [r1, #0xc] - sub r0, r0, #1 - str r0, [r1, #0x10] - ldr r0, [sp, #4] - add r2, sp, #0x24 - cmp r0, #0 - ldrne r1, _020451D0 ; =0x00000A3A - movne r0, #0x10 - strne r0, [sp, #0x30] - strneh r1, [sp, #0x2c] - ldr r1, [sl, #0x6e8] - add r0, r7, #0x18 - add r1, r1, #1 - str r1, [sp, #0x24] - str r0, [sp, #0x84] - ldr r0, [sp, #4] - add r3, sl, #0xc - cmp r0, #0 - movne r1, #0x800 - ldr r0, [sp, #8] - moveq r1, #0 - cmp r0, #0 - movne r0, #0x400000 - moveq r0, #0 - orr r0, r0, #0x33 - orr r1, r0, r1 - ldr r0, _020451D4 ; =_0209CB98 - orr r1, r1, #0x1200 - bl CreateParentMenu - ldr r1, [sp, #0xe0] - strb r0, [sl, #8] - cmp r1, #1 - bne _02045194 - bl ov29_022EA62C -_02045194: - add sp, sp, #0xbc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0204519C: .word 0x00000728 -_020451A0: .word DUNGEON_PTR -_020451A4: .word 0x000003E7 -_020451A8: .word _0209CBA8 -_020451AC: .word TEAM_MEMBER_TABLE_PTR -_020451B0: .word _0209CBB0 -_020451B4: .word _0209CBB8 -_020451B8: .word _0209CBC0 -_020451BC: .word _0209CBC8 -_020451C0: .word _0209CBD0 -_020451C4: .word _0209CBD8 -_020451C8: .word _0209CBE0 -_020451CC: .word _0209CBE8 -#ifdef JAPAN -_020451D0: .word 0x00000875 -#else -_020451D0: .word 0x00000A3A -#endif -_020451D4: .word _0209CB98 - arm_func_end sub_02044BF8 - - arm_func_start sub_020451D8 -sub_020451D8: ; 0x020451D8 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - ldr r1, [r4] - add r0, r4, #0x20c - cmp r1, #0 - add r5, r0, #0x400 - beq _02045208 - cmp r1, #1 - beq _02045220 - cmp r1, #2 - beq _02045288 - b _02045290 -_02045208: - ldrsb r0, [r4, #8] - bl IsParentMenuActive - cmp r0, #0 - beq _02045290 - mov r0, #1 - str r0, [r4] -_02045220: - ldrsb r0, [r4, #8] - bl IsParentMenuActive - cmp r0, #0 - bne _02045278 - mov r0, #2 - str r0, [r4] - ldrsb r0, [r4, #8] - bl sub_0202ABB0 - subs r0, r0, #1 - bmi _0204526C - str r0, [r4, #0x6e8] - add r0, r5, r0 - ldrb r0, [r0, #0x18] - cmp r0, #0 - moveq r0, #2 - streq r0, [r4, #0x724] - movne r0, #1 - strne r0, [r4, #0x724] - b _02045290 -_0204526C: - mov r0, #1 - str r0, [r4, #0x724] - b _02045290 -_02045278: - ldrsb r0, [r4, #8] - bl sub_0202AB80 - str r0, [r4, #0x6e8] - b _02045290 -_02045288: - ldr r0, [r4, #0x724] - ldmia sp!, {r3, r4, r5, pc} -_02045290: - mov r0, #0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_020451D8 - - arm_func_start sub_02045298 -sub_02045298: ; 0x02045298 - ldr r0, [r0, #0x60c] - bx lr - arm_func_end sub_02045298 - - arm_func_start sub_020452A0 -sub_020452A0: ; 0x020452A0 - ldr ip, _020452B4 ; =sub_02045360 - add r2, r0, #0x20c - ldr r1, [r0, #0x6e8] - add r0, r2, #0x400 - bx ip - .align 2, 0 -_020452B4: .word sub_02045360 - arm_func_end sub_020452A0 - - arm_func_start sub_020452B8 -sub_020452B8: ; 0x020452B8 - stmdb sp!, {r4, lr} - movs r4, r0 - ldrnesb r0, [r4, #8] - mvnne r1, #1 - cmpne r0, r1 - moveq r0, #1 - ldmeqia sp!, {r4, pc} - bl sub_0202AAE8 - cmp r0, #0 - ldrsb r0, [r4, #8] - beq _02045310 - bl sub_020282F4 - add r0, r0, #5 - cmp r0, #1 - movhi r0, #0 - bhi _02045320 - ldrsb r0, [r4, #8] - bl CloseParentMenu - mvn r0, #1 - strb r0, [r4, #8] - mov r0, #1 - b _02045320 -_02045310: - bl CloseParentMenu - mvn r0, #1 - strb r0, [r4, #8] - mov r0, #1 -_02045320: - cmp r0, #0 - movne r0, #2 - moveq r0, #0 - ldmia sp!, {r4, pc} - arm_func_end sub_020452B8 - - arm_func_start sub_02045330 -sub_02045330: ; 0x02045330 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bx lr - arm_func_end sub_02045330 - - arm_func_start sub_0204533C -sub_0204533C: ; 0x0204533C - cmp r0, #0 - moveq r0, #0 - bxeq lr - ldr r0, [r0] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end sub_0204533C - - arm_func_start sub_02045360 -sub_02045360: ; 0x02045360 - stmdb sp!, {r4, lr} - add r1, r0, r1, lsl #2 - ldr r4, [r1, #8] - mvn r1, #0 - cmp r4, r1 - moveq r0, r1 - ldmeqia sp!, {r4, pc} - ldr r0, [r0] - cmp r0, #0 - bne _020453C8 - mov r0, r4, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetActiveTeamMember - ldrb r0, [r0] - tst r0, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _020453C0 - tst r0, #2 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - bne _020453EC -_020453C0: - mvn r0, #0 - ldmia sp!, {r4, pc} -_020453C8: - ldr r0, _020453F4 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - bl sub_0204533C - cmp r0, #0 - mvneq r0, #0 - ldmeqia sp!, {r4, pc} -_020453EC: - mov r0, r4 - ldmia sp!, {r4, pc} - .align 2, 0 -_020453F4: .word DUNGEON_PTR - arm_func_end sub_02045360 - - arm_func_start sub_020453F8 -sub_020453F8: ; 0x020453F8 - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _020454DC ; =_020AFED4 - mov r5, r0 - ldr r0, [r2] - mov r4, r1 - cmp r0, #0 - bne _02045428 - mov r0, #0x410 - mov r1, #8 - bl MemAlloc - ldr r1, _020454DC ; =_020AFED4 - str r0, [r1] -_02045428: - bl sub_02044094 - bl sub_020440DC - ldr r1, _020454DC ; =_020AFED4 - mov r2, #0 - ldr r0, [r1] - strb r4, [r0, #0x386] - ldr r0, [r1] - add r0, r0, #0x300 - strh r2, [r0, #0x88] - ldr r0, [r1] - str r2, [r0, #0x38c] - ldr r0, [r1] - add r0, r0, #0x1c - bl InitPreprocessorArgs - ldr r1, _020454DC ; =_020AFED4 - mov r0, #0 - ldr r2, [r1] - sub r3, r0, #2 - str r0, [r2, #0x68] - ldr r2, [r1] - cmp r4, #0 - str r0, [r2, #0x1c] - ldr r2, [r1] - str r0, [r2, #0x18] - ldr r2, [r1] - strb r3, [r2, #0x14] - ldr r2, [r1] - strb r3, [r2, #0x16] - ldr r2, [r1] - strb r3, [r2, #0x15] - ldr r2, [r1] - strb r3, [r2, #0x17] - ldr r3, [r1] - ldrh r2, [r5] - add r1, r3, #0x300 - strh r2, [r1, #0x80] - ldrh r2, [r5, #2] - strh r2, [r1, #0x82] - ldrh r2, [r5, #4] - strh r2, [r1, #0x84] - str r0, [r3, #0x6c] - moveq r0, #0x13 - bl sub_020454E0 - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020454DC: .word _020AFED4 - arm_func_end sub_020453F8 - - arm_func_start sub_020454E0 -sub_020454E0: ; 0x020454E0 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x194 - ldr r1, _02045A1C ; =_020AFED4 - ldr r2, [r1] - str r0, [r2, #4] - ldr r4, [r1] - ldr r0, [r4, #4] - cmp r0, #0x13 - addls pc, pc, r0, lsl #2 - b _02045A14 -_02045508: ; jump table - b _02045558 ; case 0 - b _02045584 ; case 1 - b _020455CC ; case 2 - b _02045A14 ; case 3 - b _02045A14 ; case 4 - b _02045A14 ; case 5 - b _020458C0 ; case 6 - b _02045914 ; case 7 - b _02045844 ; case 8 - b _02045948 ; case 9 - b _02045984 ; case 10 - b _020459C0 ; case 11 - b _02045A14 ; case 12 - b _02045A14 ; case 13 - b _02045958 ; case 14 - b _02045798 ; case 15 - b _02045688 ; case 16 - b _02045764 ; case 17 - b _02045A14 ; case 18 - b _020459E0 ; case 19 -_02045558: - mov r0, #2 - str r0, [r4, #8] - bl sub_02046624 - ldr r0, _02045A1C ; =_020AFED4 - ldr r2, _02045A20 ; =0x000002CD - ldr r3, [r0] - mov r1, #8 - ldrsb r0, [r3, #0x14] - add r3, r3, #0x1c - bl ShowStringIdInDialogueBox - b _02045A14 -_02045584: - mov r0, #2 - str r0, [r4, #8] - bl sub_02046624 - ldr r0, _02045A1C ; =_020AFED4 - ldr r0, [r0] - ldrsb r0, [r0, #0x14] - bl ShowDialogueBox - ldr r0, _02045A1C ; =_020AFED4 - mov r3, #2 - ldr r1, [r0] - ldr r2, _02045A24 ; =0x000002D5 - str r3, [r1, #8] - ldr r3, [r0] - mov r1, #8 - ldrsb r0, [r3, #0x14] - add r3, r3, #0x1c - bl ShowStringIdInDialogueBox - b _02045A14 -_020455CC: - ldr r1, _02045A28 ; =0x000002CE - add r0, r4, #0x70 - bl GetStringFromFileVeneer - mov r1, #2 - add r0, sp, #0x14 - str r1, [r4, #0x170] - bl InitPreprocessorArgs - ldr r0, _02045A1C ; =_020AFED4 - ldr r2, _02045A2C ; =_0209CC0C - ldr r1, [r0] - add r0, r1, #0x390 - add r1, r1, #0x380 - bl sub_0200D670 - ldr r0, _02045A1C ; =_020AFED4 - ldr r2, _02045A30 ; =0x000002CF - ldr r5, [r0] - add ip, sp, #0x14 - add r3, r5, #0x300 - ldrsh lr, [r3, #0x84] - add r0, r4, #0x174 - mov r1, #0x100 - orr lr, lr, #0x10000 - str lr, [sp, #0x24] - ldrh lr, [r3, #0x82] - mov r3, #0 - str lr, [sp, #0x38] - ldrb lr, [r5, #0x380] - str lr, [sp, #0x3c] - str ip, [sp] - bl PreprocessStringFromId - mov r1, #3 - str r1, [r4, #0x274] - mov r2, #0 - strb r2, [r4, #0x278] - mov r0, #1 - str r0, [r4, #0x378] - str r1, [sp] - ldr r3, _02045A1C ; =_020AFED4 - ldr r0, _02045A34 ; =_0209CC38 - ldr r3, [r3] - ldr r1, _02045A38 ; =0x00300011 - add r3, r3, #0x70 - bl CreateSimpleMenu - ldr r1, _02045A1C ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x16] - b _02045A14 -_02045688: - mov r0, #0x11 - str r0, [r4, #8] - ldr r0, [r1] - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010044 - ldr r2, _02045A1C ; =_020AFED4 - ldr r1, [r2] - add r1, r1, #0x300 - strh r0, [r1, #0x88] - ldr r1, [r2] - add r0, r1, #0x300 - ldrsh r0, [r0, #0x88] - strh r0, [sp, #0x10] - ldr r0, [r1] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010060 - ldr r3, _02045A1C ; =_020AFED4 - ldr r2, _02045A2C ; =_0209CC0C - ldr r4, [r3] - add r1, sp, #0xc - str r0, [r4, #0x38c] - ldr r0, [r3] - mov r3, #0 - ldr r4, [r0, #0x38c] - add r0, r0, #0x390 - strh r4, [sp, #0xe] - strb r3, [sp, #0xc] - bl sub_0200D670 - ldr r0, _02045A1C ; =_020AFED4 - ldr r2, [r0] - add r1, r2, #0x390 - str r1, [r2, #0x54] - ldr r1, [r0] - add r0, r1, #0x300 - ldrsh r0, [r0, #0x88] - str r0, [r1, #0x2c] - bl sub_02046624 - ldr r0, _02045A1C ; =_020AFED4 - ldr r0, [r0] - ldrsb r0, [r0, #0x14] - bl ShowDialogueBox - ldr r0, _02045A1C ; =_020AFED4 - mov r4, #0x11 - ldr r3, [r0] -#ifdef JAPAN - ldr r2, _02045D9C ; =0x00002FC5 - str r4, [r3, #8] - ldr r3, [r0] - mov r1, #8 -#else - mov r1, #8 - str r4, [r3, #8] - ldr r3, [r0] - add r2, r4, #0x2c0 -#endif - ldrsb r0, [r3, #0x14] - add r3, r3, #0x1c - bl ShowStringIdInDialogueBox - b _02045A14 -_02045764: - mov r4, #3 - str r4, [sp, #0x64] - mov r4, #2 - ldr r0, _02045A34 ; =_0209CC38 - ldr r1, _02045A3C ; =0x00300033 - ldr r3, _02045A40 ; =_0209CC48 - add r2, sp, #0x64 - str r4, [sp] - bl CreateSimpleMenuFromStringIds - ldr r1, _02045A1C ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x16] - b _02045A14 -_02045798: - ldr r0, [r4] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010044 - ldr r2, _02045A1C ; =_020AFED4 - ldr r1, [r2] - add r1, r1, #0x300 - strh r0, [r1, #0x88] - ldr r0, [r2] - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010060 - ldr r4, _02045A1C ; =_020AFED4 - ldr r1, _02045A44 ; =0x00001013 - ldr r2, [r4] - ldr r3, _02045A48 ; =0x000008E4 - str r0, [r2, #0x38c] - ldr lr, [r4] - ldr r0, _02045A4C ; =_0209CC28 - add r2, lr, #0x300 - ldrsh ip, [r2, #0x88] - mov r2, #0 - str ip, [lr, #0x2c] - ldr lr, [r4] - ldr ip, [lr, #0x38c] - add ip, ip, #0xbc - str ip, [lr, #0x34] - ldr r4, [r4] - add ip, r4, #0x1c - add r4, r4, #0x300 - str ip, [sp] - ldrsh r4, [r4, #0x88] -#if defined(EUROPE) - add r4, r4, #0xd3 - add r4, r4, #0x2900 -#elif defined(JAPAN) - add r4, r4, #0xce - add r4, r4, #0x4100 -#else - add r4, r4, #0xd1 - add r4, r4, #0x2900 -#endif - mov r4, r4, lsl #0x10 - mov r4, r4, lsr #0x10 - stmib sp, {r4, ip} - bl CreateScrollBoxSingle - ldr r1, _02045A1C ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x17] - b _02045A14 -_02045844: - ldr r0, [r4] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010044 - ldr r2, _02045A1C ; =_020AFED4 - ldr r1, [r2] - add r1, r1, #0x300 - strh r0, [r1, #0x88] - ldr r0, [r2] - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010060 - ldr r1, _02045A1C ; =_020AFED4 - mov r2, #3 - ldr r3, [r1] - str r0, [r3, #0x38c] - ldr r3, [r1] - add r0, r3, #0x300 - ldrsh r0, [r0, #0x88] - str r0, [r3, #0x2c] - ldr r0, [r1] - str r2, [r0, #4] - bl sub_02045A5C - ldr r0, _02045A1C ; =_020AFED4 - ldr r0, [r0] - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010154 - b _02045A14 -_020458C0: - add r0, r4, #0x390 - str r0, [r4, #0x5c] - ldr r0, [r1] - mov r1, #7 - str r1, [r0, #8] - bl sub_02046624 - ldr r0, _02045A1C ; =_020AFED4 - ldr r0, [r0] - ldrsb r0, [r0, #0x14] - bl ShowDialogueBox - ldr r0, _02045A1C ; =_020AFED4 - mov r3, #7 - ldr r1, [r0] - ldr r2, _02045A50 ; =0x000002D6 - str r3, [r1, #8] - ldr r3, [r0] - mov r1, #8 - ldrsb r0, [r3, #0x14] - add r3, r3, #0x1c - bl ShowStringIdInDialogueBox - b _02045A14 -_02045914: - mov r4, #3 - str r4, [sp, #0xfc] - mov r4, #2 - ldr r0, _02045A34 ; =_0209CC38 - ldr r1, _02045A3C ; =0x00300033 - ldr r3, _02045A40 ; =_0209CC48 - add r2, sp, #0xfc - str r4, [sp] - bl CreateSimpleMenuFromStringIds - ldr r1, _02045A1C ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x16] - b _02045A14 -_02045948: - mov r0, #4 - str r0, [r4, #4] - bl sub_02045A5C - b _02045A14 -_02045958: - ldr r0, _02045A54 ; =_0209CC18 - mov r4, #3 - ldr r3, _02045A58 ; =_0209CC60 - mov r1, #0x13 - mov r2, #0 - str r4, [sp] - bl CreateSimpleMenuFromStringIds - ldr r1, _02045A1C ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x16] - b _02045A14 -_02045984: - ldrsb r0, [r4, #0x14] - bl CloseDialogueBox - ldr r0, _02045A1C ; =_020AFED4 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x14] - bl sub_02043218 - mov r0, #2 - mov r1, #0 - mov r2, #8 - bl sub_02042CF0 - ldr r1, _02045A1C ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x15] - b _02045A14 -_020459C0: - mov r0, #2 - mov r1, #0 - mov r2, #8 - bl sub_02042CF0 - ldr r1, _02045A1C ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x15] - b _02045A14 -_020459E0: - mov r0, #0xa - str r0, [r4, #8] - ldr r0, [r1] - mov r1, #0x12 - str r1, [r0, #4] - bl sub_02046624 - ldr r0, _02045A1C ; =_020AFED4 -#ifdef JAPAN - ldr r2, _02045DC0 ; =0x00002FC4 - ldr r3, [r0] - mov r1, #0x18 -#else - mov r1, #0x18 - ldr r3, [r0] - mov r2, #0x2d0 -#endif - ldrsb r0, [r3, #0x14] - add r3, r3, #0x1c - bl ShowStringIdInDialogueBox -_02045A14: - add sp, sp, #0x194 - ldmia sp!, {r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -#define SUB_020454E0_OFFSET 0x2CF4 -#else -#define SUB_020454E0_OFFSET 0 -#endif -_02045A1C: .word _020AFED4 -_02045A20: .word 0x000002CD + SUB_020454E0_OFFSET -_02045A24: .word 0x000002D5 + SUB_020454E0_OFFSET -_02045A28: .word 0x000002CE + SUB_020454E0_OFFSET -_02045A2C: .word _0209CC0C -_02045A30: .word 0x000002CF + SUB_020454E0_OFFSET -_02045A34: .word _0209CC38 -_02045A38: .word 0x00300011 -#ifdef JAPAN -_02045D9C: .word 0x00002FC5 -#endif -_02045A3C: .word 0x00300033 -_02045A40: .word _0209CC48 -_02045A44: .word 0x00001013 -#ifdef JAPAN -_02045A48: .word 0x00001D3C -#else -_02045A48: .word 0x000008E4 -#endif -_02045A4C: .word _0209CC28 -_02045A50: .word 0x000002D6 + SUB_020454E0_OFFSET -_02045A54: .word _0209CC18 -_02045A58: .word _0209CC60 -#ifdef JAPAN -_02045DC0: .word 0x00002FC4 -#endif - arm_func_end sub_020454E0 - - arm_func_start sub_02045A5C -sub_02045A5C: ; 0x02045A5C - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x194 - ldr r0, _02045F90 ; =_020AFED4 - ldr r4, [r0] - ldr r1, [r4, #4] - cmp r1, #0x13 - addls pc, pc, r1, lsl #2 - b _02045F88 -_02045A7C: ; jump table - b _02045ACC ; case 0 - b _02045AF8 ; case 1 - b _02045B40 ; case 2 - b _02045F88 ; case 3 - b _02045F88 ; case 4 - b _02045F88 ; case 5 - b _02045E34 ; case 6 - b _02045E88 ; case 7 - b _02045DB8 ; case 8 - b _02045EBC ; case 9 - b _02045EF8 ; case 10 - b _02045F34 ; case 11 - b _02045F88 ; case 12 - b _02045F88 ; case 13 - b _02045ECC ; case 14 - b _02045D0C ; case 15 - b _02045BFC ; case 16 - b _02045CD8 ; case 17 - b _02045F88 ; case 18 - b _02045F54 ; case 19 -_02045ACC: - mov r0, #2 - str r0, [r4, #8] - bl sub_02046624 - ldr r0, _02045F90 ; =_020AFED4 - ldr r2, _02045F94 ; =0x000002CD - ldr r3, [r0] - mov r1, #8 - ldrsb r0, [r3, #0x14] - add r3, r3, #0x1c - bl ShowStringIdInDialogueBox - b _02045F88 -_02045AF8: - mov r0, #2 - str r0, [r4, #8] - bl sub_02046624 - ldr r0, _02045F90 ; =_020AFED4 - ldr r0, [r0] - ldrsb r0, [r0, #0x14] - bl ShowDialogueBox - ldr r0, _02045F90 ; =_020AFED4 - mov r3, #2 - ldr r1, [r0] - ldr r2, _02045F98 ; =0x000002D5 - str r3, [r1, #8] - ldr r3, [r0] - mov r1, #8 - ldrsb r0, [r3, #0x14] - add r3, r3, #0x1c - bl ShowStringIdInDialogueBox - b _02045F88 -_02045B40: - ldr r1, _02045F9C ; =0x000002CE - add r0, r4, #0x70 - bl GetStringFromFileVeneer - mov r1, #2 - add r0, sp, #0x144 - str r1, [r4, #0x170] - bl InitPreprocessorArgs - ldr r0, _02045F90 ; =_020AFED4 - ldr r2, _02045FA0 ; =_0209CC0C - ldr r1, [r0] - add r0, r1, #0x390 - add r1, r1, #0x380 - bl sub_0200D670 - ldr r0, _02045F90 ; =_020AFED4 - ldr r2, _02045FA4 ; =0x000002CF - ldr r5, [r0] - add ip, sp, #0x144 - add r3, r5, #0x300 - ldrsh lr, [r3, #0x84] - add r0, r4, #0x174 - mov r1, #0x100 - orr lr, lr, #0x10000 - str lr, [sp, #0x154] - ldrh lr, [r3, #0x82] - mov r3, #0 - str lr, [sp, #0x168] - ldrb lr, [r5, #0x380] - str lr, [sp, #0x16c] - str ip, [sp] - bl PreprocessStringFromId - mov r1, #3 - str r1, [r4, #0x274] - mov r2, #0 - strb r2, [r4, #0x278] - mov r0, #1 - str r0, [r4, #0x378] - str r1, [sp] - ldr r3, _02045F90 ; =_020AFED4 - ldr r0, _02045FA8 ; =_0209CC38 - ldr r3, [r3] - ldr r1, _02045FAC ; =0x00300011 - add r3, r3, #0x70 - bl CreateSimpleMenu - ldr r1, _02045F90 ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x16] - b _02045F88 -_02045BFC: - mov r1, #0x11 - str r1, [r4, #8] - ldr r0, [r0] - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010044 - ldr r2, _02045F90 ; =_020AFED4 - ldr r1, [r2] - add r1, r1, #0x300 - strh r0, [r1, #0x88] - ldr r1, [r2] - add r0, r1, #0x300 - ldrsh r0, [r0, #0x88] - strh r0, [sp, #0x10] - ldr r0, [r1] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010060 - ldr r3, _02045F90 ; =_020AFED4 - ldr r2, _02045FA0 ; =_0209CC0C - ldr r4, [r3] - add r1, sp, #0xc - str r0, [r4, #0x38c] - ldr r0, [r3] - mov r3, #0 - ldr r4, [r0, #0x38c] - add r0, r0, #0x390 - strh r4, [sp, #0xe] - strb r3, [sp, #0xc] - bl sub_0200D670 - ldr r0, _02045F90 ; =_020AFED4 - ldr r2, [r0] - add r1, r2, #0x390 - str r1, [r2, #0x54] - ldr r1, [r0] - add r0, r1, #0x300 - ldrsh r0, [r0, #0x88] - str r0, [r1, #0x2c] - bl sub_02046624 - ldr r0, _02045F90 ; =_020AFED4 - ldr r0, [r0] - ldrsb r0, [r0, #0x14] - bl ShowDialogueBox - ldr r0, _02045F90 ; =_020AFED4 - mov r4, #0x11 - ldr r3, [r0] -#ifdef JAPAN - ldr r2, _02046318 ; =0x00002FC5 - str r4, [r3, #8] - ldr r3, [r0] - mov r1, #8 -#else - mov r1, #8 - str r4, [r3, #8] - ldr r3, [r0] - add r2, r4, #0x2c0 -#endif - ldrsb r0, [r3, #0x14] - add r3, r3, #0x1c - bl ShowStringIdInDialogueBox - b _02045F88 -_02045CD8: - mov r4, #3 - str r4, [sp, #0xac] - mov r4, #2 - ldr r0, _02045FA8 ; =_0209CC38 - ldr r1, _02045FB0 ; =0x00300033 - ldr r3, _02045FB4 ; =_0209CC48 - add r2, sp, #0xac - str r4, [sp] - bl CreateSimpleMenuFromStringIds - ldr r1, _02045F90 ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x16] - b _02045F88 -_02045D0C: - ldr r0, [r4] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010044 - ldr r2, _02045F90 ; =_020AFED4 - ldr r1, [r2] - add r1, r1, #0x300 - strh r0, [r1, #0x88] - ldr r0, [r2] - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010060 - ldr r4, _02045F90 ; =_020AFED4 - ldr r1, _02045FB8 ; =0x00001013 - ldr r2, [r4] - ldr r3, _02045FBC ; =0x000008E4 - str r0, [r2, #0x38c] - ldr lr, [r4] - ldr r0, _02045FC0 ; =_0209CC28 - add r2, lr, #0x300 - ldrsh ip, [r2, #0x88] - mov r2, #0 - str ip, [lr, #0x2c] - ldr lr, [r4] - ldr ip, [lr, #0x38c] - add ip, ip, #0xbc - str ip, [lr, #0x34] - ldr r4, [r4] - add ip, r4, #0x1c - add r4, r4, #0x300 - str ip, [sp] - ldrsh r4, [r4, #0x88] -#if defined(EUROPE) - add r4, r4, #0xd3 - add r4, r4, #0x2900 -#elif defined(JAPAN) - add r4, r4, #0xce - add r4, r4, #0x4100 -#else - add r4, r4, #0xd1 - add r4, r4, #0x2900 -#endif - mov r4, r4, lsl #0x10 - mov r4, r4, lsr #0x10 - stmib sp, {r4, ip} - bl CreateScrollBoxSingle - ldr r1, _02045F90 ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x17] - b _02045F88 -_02045DB8: - ldr r0, [r4] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010044 - ldr r2, _02045F90 ; =_020AFED4 - ldr r1, [r2] - add r1, r1, #0x300 - strh r0, [r1, #0x88] - ldr r0, [r2] - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010060 - ldr r1, _02045F90 ; =_020AFED4 - mov r2, #3 - ldr r3, [r1] - str r0, [r3, #0x38c] - ldr r3, [r1] - add r0, r3, #0x300 - ldrsh r0, [r0, #0x88] - str r0, [r3, #0x2c] - ldr r0, [r1] - str r2, [r0, #4] - bl sub_02045A5C - ldr r0, _02045F90 ; =_020AFED4 - ldr r0, [r0] - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010154 - b _02045F88 -_02045E34: - add r1, r4, #0x390 - str r1, [r4, #0x5c] - ldr r0, [r0] - mov r1, #7 - str r1, [r0, #8] - bl sub_02046624 - ldr r0, _02045F90 ; =_020AFED4 - ldr r0, [r0] - ldrsb r0, [r0, #0x14] - bl ShowDialogueBox - ldr r0, _02045F90 ; =_020AFED4 - mov r3, #7 - ldr r1, [r0] - ldr r2, _02045FC4 ; =0x000002D6 - str r3, [r1, #8] - ldr r3, [r0] - mov r1, #8 - ldrsb r0, [r3, #0x14] - add r3, r3, #0x1c - bl ShowStringIdInDialogueBox - b _02045F88 -_02045E88: - mov r4, #3 - str r4, [sp, #0x14] - mov r4, #2 - ldr r0, _02045FA8 ; =_0209CC38 - ldr r1, _02045FB0 ; =0x00300033 - ldr r3, _02045FB4 ; =_0209CC48 - add r2, sp, #0x14 - str r4, [sp] - bl CreateSimpleMenuFromStringIds - ldr r1, _02045F90 ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x16] - b _02045F88 -_02045EBC: - mov r0, #4 - str r0, [r4, #4] - bl sub_02045A5C - b _02045F88 -_02045ECC: - ldr r0, _02045FC8 ; =_0209CC18 - mov r4, #3 - ldr r3, _02045FCC ; =_0209CC60 - mov r1, #0x13 - mov r2, #0 - str r4, [sp] - bl CreateSimpleMenuFromStringIds - ldr r1, _02045F90 ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x16] - b _02045F88 -_02045EF8: - ldrsb r0, [r4, #0x14] - bl CloseDialogueBox - ldr r0, _02045F90 ; =_020AFED4 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x14] - bl sub_02043218 - mov r0, #2 - mov r1, #0 - mov r2, #8 - bl sub_02042CF0 - ldr r1, _02045F90 ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x15] - b _02045F88 -_02045F34: - mov r0, #2 - mov r1, #0 - mov r2, #8 - bl sub_02042CF0 - ldr r1, _02045F90 ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x15] - b _02045F88 -_02045F54: - mov r1, #0xa - str r1, [r4, #8] - ldr r0, [r0] - mov r1, #0x12 - str r1, [r0, #4] - bl sub_02046624 - ldr r0, _02045F90 ; =_020AFED4 -#ifdef JAPAN - ldr r2, _0204633C ; =0x00002FC4 - ldr r3, [r0] - mov r1, #0x18 -#else - mov r1, #0x18 - ldr r3, [r0] - mov r2, #0x2d0 -#endif - ldrsb r0, [r3, #0x14] - add r3, r3, #0x1c - bl ShowStringIdInDialogueBox -_02045F88: - add sp, sp, #0x194 - ldmia sp!, {r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -#define SUB_02045A5C_OFFSET 0x2CF4 -#else -#define SUB_02045A5C_OFFSET 0 -#endif -_02045F90: .word _020AFED4 -_02045F94: .word 0x000002CD + SUB_02045A5C_OFFSET -_02045F98: .word 0x000002D5 + SUB_02045A5C_OFFSET -_02045F9C: .word 0x000002CE + SUB_02045A5C_OFFSET -_02045FA0: .word _0209CC0C -_02045FA4: .word 0x000002CF + SUB_02045A5C_OFFSET -_02045FA8: .word _0209CC38 -_02045FAC: .word 0x00300011 -#ifdef JAPAN -_02046318: .word 0x00002FC5 -#endif -_02045FB0: .word 0x00300033 -_02045FB4: .word _0209CC48 -_02045FB8: .word 0x00001013 -#ifdef JAPAN -_02045FBC: .word 0x00001D3C -#else -_02045FBC: .word 0x000008E4 -#endif -_02045FC0: .word _0209CC28 -_02045FC4: .word 0x000002D6 + SUB_02045A5C_OFFSET -_02045FC8: .word _0209CC18 -_02045FCC: .word _0209CC60 -#ifdef JAPAN -_0204633C: .word 0x00002FC4 -#endif - arm_func_end sub_02045A5C - - arm_func_start sub_02045FD0 -sub_02045FD0: ; 0x02045FD0 - stmdb sp!, {r3, lr} - ldr r2, _02046024 ; =_020AFED4 - ldr r1, [r2] - cmp r1, #0 - moveq r1, #0 - streqh r1, [r0, #4] - ldmeqia sp!, {r3, pc} - add r1, r1, #0x300 - ldrsh r1, [r1, #0x88] - strh r1, [r0, #4] - ldr r1, [r2] - ldr r1, [r1, #0x38c] - strh r1, [r0, #2] - bl sub_020440B8 - ldr r0, _02046024 ; =_020AFED4 - ldr r0, [r0] - bl MemFree - ldr r0, _02046024 ; =_020AFED4 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02046024: .word _020AFED4 - arm_func_end sub_02045FD0 - - arm_func_start sub_02046028 -sub_02046028: ; 0x02046028 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - ldr r0, _020465D8 ; =_020AFED4 - ldr r2, [r0] - ldr r1, [r2, #0x18] - cmp r1, #3 - addls pc, pc, r1, lsl #2 - b _020465CC -_02046048: ; jump table - b _02046058 ; case 0 - b _02046064 ; case 1 - b _02046590 ; case 2 - b _020465C4 ; case 3 -_02046058: - mov r0, #1 - str r0, [r2, #0x18] - b _020465CC -_02046064: - ldr r1, [r2, #4] - cmp r1, #0x12 - addls pc, pc, r1, lsl #2 - b _0204650C -_02046074: ; jump table - b _0204650C ; case 0 - b _0204650C ; case 1 - b _020460C0 ; case 2 - b _020464B4 ; case 3 - b _020464BC ; case 4 - b _020464C4 ; case 5 - b _0204650C ; case 6 - b _02046168 ; case 7 - b _0204650C ; case 8 - b _0204650C ; case 9 - b _020461BC ; case 10 - b _020461BC ; case 11 - b _02046334 ; case 12 - b _02046364 ; case 13 - b _020463B4 ; case 14 - b _02046478 ; case 15 - b _0204650C ; case 16 - b _02046114 ; case 17 - b _020464CC ; case 18 -_020460C0: - ldrsb r0, [r2, #0x16] - bl GetSimpleMenuResult - cmp r0, #1 - ldrne r1, _020465D8 ; =_020AFED4 - ldrne r1, [r1] - strne r0, [r1, #0x10] - cmp r0, #1 - beq _02046104 - cmp r0, #2 - beq _020460F4 - cmp r0, #3 - beq _02046104 - b _0204653C -_020460F4: - bl sub_020465DC - mov r0, #0x13 - bl sub_020454E0 - b _0204653C -_02046104: - bl sub_020465DC - mov r0, #6 - bl sub_020454E0 - b _0204653C -_02046114: - ldrsb r0, [r2, #0x16] - bl GetSimpleMenuResult - cmp r0, #1 - ldrne r1, _020465D8 ; =_020AFED4 - ldrne r1, [r1] - strne r0, [r1, #0x10] - cmp r0, #1 - beq _02046158 - cmp r0, #2 - beq _02046148 - cmp r0, #3 - beq _02046158 - b _0204653C -_02046148: - bl sub_020465DC - mov r0, #8 - bl sub_020454E0 - b _0204653C -_02046158: - bl sub_020465DC - mov r0, #0x13 - bl sub_020454E0 - b _0204653C -_02046168: - ldrsb r0, [r2, #0x16] - bl GetSimpleMenuResult - cmp r0, #1 - ldrne r1, _020465D8 ; =_020AFED4 - ldrne r1, [r1] - strne r0, [r1, #0x10] - cmp r0, #1 - beq _020461AC - cmp r0, #2 - beq _0204619C - cmp r0, #3 - beq _020461AC - b _0204653C -_0204619C: - bl sub_020465DC - mov r0, #9 - bl sub_020454E0 - b _0204653C -_020461AC: - bl sub_020465DC - mov r0, #0 - bl sub_020454E0 - b _0204653C -_020461BC: - bl sub_02043468 - mov r4, r0 - bl sub_02043400 - cmp r0, #0 - bne _02046234 - mvn r0, #0 - cmp r4, r0 - bne _02046214 - bl sub_0204317C - ldr r0, _020465D8 ; =_020AFED4 - mvn r2, #1 - ldr r1, [r0] - mov r3, #2 - strb r2, [r1, #0x15] - ldr r1, [r0] - mov r2, #1 - str r3, [r1, #0xc] - ldr r1, [r0] - mov r0, #0xc - str r2, [r1, #8] - bl sub_020454E0 - b _0204653C -_02046214: - ldr r1, _020465D8 ; =_020AFED4 - mov r0, r4 - ldr r1, [r1] - str r4, [r1] - bl sub_0204323C - mov r0, #0xe - bl sub_020454E0 - b _0204653C -_02046234: - bl sub_02043434 - cmp r0, #0 - beq _0204653C - add r1, sp, #0 - mov r0, #0 - bl GetPressedButtons - ldrh r0, [sp] - tst r0, #8 - beq _020462F4 - mov r0, #0 - bl PlaySeVolumeWrapper - ldr r1, _020465D8 ; =_020AFED4 - mov r0, r4 - ldr r1, [r1] - str r4, [r1] - bl sub_0204323C - ldr r0, _020465D8 ; =_020AFED4 - ldr r0, [r0] - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010044 - ldr r2, _020465D8 ; =_020AFED4 - ldr r1, [r2] - add r1, r1, #0x300 - strh r0, [r1, #0x88] - ldr r0, [r2] - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02010060 - ldr r1, _020465D8 ; =_020AFED4 - ldr r1, [r1] - str r0, [r1, #0x38c] - bl sub_020465DC - bl sub_0204317C - ldr r0, _020465D8 ; =_020AFED4 - mvn r2, #1 - ldr r1, [r0] - mov r3, #2 - strb r2, [r1, #0x15] - ldr r1, [r0] - mov r2, #0xf - str r3, [r1, #0xc] - ldr r1, [r0] - mov r0, #0xc - str r2, [r1, #8] - bl sub_020454E0 -_020462F4: - bl CountNbOfItemsInStorage - mov r4, r0 - bl sub_0200FD48 - cmp r4, r0 - bge _0204653C - bl sub_02043398 - ldr r0, _020465D8 ; =_020AFED4 - mov r3, #0xa - ldr r1, [r0] - mov r2, #5 - str r3, [r1, #0xc] - ldr r1, [r0] - mov r0, #0xd - str r2, [r1, #8] - bl sub_020454E0 - b _0204653C -_02046334: - mvn r1, #1 - strb r1, [r2, #0x15] - ldr r3, [r0] - ldr r2, [r3, #0xc] - sub r1, r2, #1 - str r1, [r3, #0xc] - cmp r2, #0 - bne _0204653C - ldr r0, [r0] - ldr r0, [r0, #8] - bl sub_020454E0 - b _0204653C -_02046364: - ldr r1, [r2, #0xc] - sub r1, r1, #1 - str r1, [r2, #0xc] - ldr r0, [r0] - ldr r0, [r0, #0xc] - cmp r0, #1 - bgt _02046394 - bl sub_0204317C - ldr r0, _020465D8 ; =_020AFED4 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x15] -_02046394: - ldr r0, _020465D8 ; =_020AFED4 - ldr r1, [r0] - ldr r0, [r1, #0xc] - cmp r0, #0 - bgt _0204653C - ldr r0, [r1, #8] - bl sub_020454E0 - b _0204653C -_020463B4: - ldrsb r0, [r2, #0x16] - bl GetSimpleMenuResult - cmp r0, #6 - addls pc, pc, r0, lsl #2 - b _0204653C -_020463C8: ; jump table - b _0204653C ; case 0 - b _0204645C ; case 1 - b _0204653C ; case 2 - b _0204653C ; case 3 - b _020463E4 ; case 4 - b _02046420 ; case 5 - b _0204645C ; case 6 -_020463E4: - bl sub_020465DC - bl sub_0204317C - ldr r0, _020465D8 ; =_020AFED4 - mvn r2, #1 - ldr r1, [r0] - mov r3, #2 - strb r2, [r1, #0x15] - ldr r1, [r0] - mov r2, #0x10 - str r3, [r1, #0xc] - ldr r1, [r0] - mov r0, #0xc - str r2, [r1, #8] - bl sub_020454E0 - b _0204653C -_02046420: - bl sub_020465DC - bl sub_0204317C - ldr r0, _020465D8 ; =_020AFED4 - mvn r2, #1 - ldr r1, [r0] - mov r3, #2 - strb r2, [r1, #0x15] - ldr r1, [r0] - mov r2, #0xf - str r3, [r1, #0xc] - ldr r1, [r0] - mov r0, #0xc - str r2, [r1, #8] - bl sub_020454E0 - b _0204653C -_0204645C: - bl sub_020465DC - bl sub_020433C0 - ldr r0, _020465D8 ; =_020AFED4 - mov r1, #0xa - ldr r0, [r0] - str r1, [r0, #4] - b _0204653C -_02046478: - ldrsb r0, [r2, #0x17] - bl IsScrollBoxActive - cmp r0, #0 - bne _0204653C - ldr r0, _020465D8 ; =_020AFED4 - ldr r0, [r0] - ldrsb r0, [r0, #0x17] - bl CloseScrollBox - ldr r0, _020465D8 ; =_020AFED4 - mvn r2, #1 - ldr r1, [r0] - mov r0, #0xb - strb r2, [r1, #0x17] - bl sub_020454E0 - b _0204653C -_020464B4: - mov r2, #2 - b _02046540 -_020464BC: - mov r2, #4 - b _02046540 -_020464C4: - mov r2, #3 - b _02046540 -_020464CC: - ldrsb r0, [r2, #0x14] - bl IsDialogueBoxActive - cmp r0, #0 - bne _0204653C - ldr r0, _020465D8 ; =_020AFED4 - ldr r0, [r0] - ldrsb r0, [r0, #0x14] - bl ShowDialogueBox - ldr r0, _020465D8 ; =_020AFED4 - mov r2, #0x14 - ldr r1, [r0] - str r2, [r1, #4] - ldr r0, [r0] - ldrsb r0, [r0, #0x14] - bl sub_0202F2C4 - b _0204653C -_0204650C: - ldrsb r0, [r2, #0x14] - bl IsDialogueBoxActive - cmp r0, #0 - bne _0204653C - ldr r0, _020465D8 ; =_020AFED4 - ldr r0, [r0] - ldrsb r0, [r0, #0x14] - bl ShowDialogueBox - ldr r0, _020465D8 ; =_020AFED4 - ldr r0, [r0] - ldr r0, [r0, #8] - bl sub_020454E0 -_0204653C: - mov r2, #1 -_02046540: - ldr r0, _020465D8 ; =_020AFED4 - ldr r1, [r0] - str r2, [r1, #0x6c] - ldr r2, [r0] - ldr r1, [r2, #0x6c] - cmp r1, #1 - beq _020465CC - mov r1, #2 - str r1, [r2, #0x18] - ldr r0, [r0] - sub r1, r1, #4 - ldrsb r0, [r0, #0x14] - cmp r0, r1 - beq _020465CC - bl sub_0202836C - ldr r0, _020465D8 ; =_020AFED4 - ldr r0, [r0] - ldrsb r0, [r0, #0x14] - bl sub_0202F2C4 - b _020465CC -_02046590: - mov r1, #3 - str r1, [r2, #0x18] - ldr r0, [r0] - sub r1, r1, #5 - ldrsb r0, [r0, #0x14] - cmp r0, r1 - beq _020465CC - bl CloseDialogueBox - ldr r0, _020465D8 ; =_020AFED4 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x14] - b _020465CC -_020465C4: - ldr r0, [r2, #0x6c] - b _020465D0 -_020465CC: - mov r0, #1 -_020465D0: - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_020465D8: .word _020AFED4 - arm_func_end sub_02046028 - - arm_func_start sub_020465DC -sub_020465DC: ; 0x020465DC - stmdb sp!, {r3, lr} - ldr r0, _02046620 ; =_020AFED4 - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0, #0x16] - cmp r0, r1 - ldmeqia sp!, {r3, pc} - bl sub_0202836C - ldr r0, _02046620 ; =_020AFED4 - ldr r0, [r0] - ldrsb r0, [r0, #0x16] - bl CloseSimpleMenu - ldr r0, _02046620 ; =_020AFED4 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x16] - ldmia sp!, {r3, pc} - .align 2, 0 -_02046620: .word _020AFED4 - arm_func_end sub_020465DC - - arm_func_start sub_02046624 -sub_02046624: ; 0x02046624 - stmdb sp!, {r3, lr} - ldr r1, _02046658 ; =_020AFED4 - mvn r0, #1 - ldr r1, [r1] - ldrsb r1, [r1, #0x14] - cmp r1, r0 - ldmneia sp!, {r3, pc} - mov r0, #0 - bl CreateDialogueBox - ldr r1, _02046658 ; =_020AFED4 - ldr r1, [r1] - strb r0, [r1, #0x14] - ldmia sp!, {r3, pc} - .align 2, 0 -_02046658: .word _020AFED4 - arm_func_end sub_02046624 - - arm_func_start sub_0204665C -sub_0204665C: ; 0x0204665C - stmdb sp!, {r3, lr} - ldr r0, _02046694 ; =_020AFED8 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - bl CloseAdvancedTextBox - ldr r0, _02046694 ; =_020AFED8 - ldr r0, [r0] - bl MemFree - ldr r0, _02046694 ; =_020AFED8 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02046694: .word _020AFED8 - arm_func_end sub_0204665C - - arm_func_start sub_02046698 -sub_02046698: ; 0x02046698 - stmdb sp!, {r4, lr} - sub sp, sp, #0xa0 - mov r4, r0 - mov r0, #0xec - mov r1, #0 - bl MemAlloc - ldr r2, _0204672C ; =_020AFED8 - mov r1, #0xec - str r0, [r2] - bl MemZero - ldr r0, _0204672C ; =_020AFED8 - mov ip, #0xe - ldr r0, [r0] - add lr, r0, #4 -_020466D0: - ldmia r4!, {r0, r1, r2, r3} - stmia lr!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _020466D0 - ldmia r4, {r0, r1} - stmia lr, {r0, r1} - ldr r1, _02046730 ; =0x00000A43 - mov r0, #0x10 - strh r1, [sp, #0x10] - str r0, [sp, #0x14] - mov ip, #0 - str ip, [sp] - ldr r0, _02046734 ; =_0209CC80 - ldr r1, _02046738 ; =0x00001815 - ldr r3, _0204673C ; =sub_02046798 - add r2, sp, #8 - str ip, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _0204672C ; =_020AFED8 - ldr r1, [r1] - strb r0, [r1] - add sp, sp, #0xa0 - ldmia sp!, {r4, pc} - .align 2, 0 -_0204672C: .word _020AFED8 -#ifdef JAPAN -_02046730: .word 0x00000B8A -#else -_02046730: .word 0x00000A43 -#endif -_02046734: .word _0209CC80 -_02046738: .word 0x00001815 -_0204673C: .word sub_02046798 - arm_func_end sub_02046698 - - arm_func_start sub_02046740 -sub_02046740: ; 0x02046740 - stmdb sp!, {r3, lr} - ldr r1, _02046774 ; =_020AFED8 - ldr r0, _02046778 ; =0x00000279 - ldr r1, [r1] - ldrsh r1, [r1, #0x5e] - cmp r1, r0 - blt _02046768 - mov r0, #0x14 - bl PlayBgmByIdVeneer - ldmia sp!, {r3, pc} -_02046768: - mov r0, #0x13 - bl PlayBgmByIdVeneer - ldmia sp!, {r3, pc} - .align 2, 0 -_02046774: .word _020AFED8 -_02046778: .word 0x00000279 - arm_func_end sub_02046740 - - arm_func_start sub_0204677C -sub_0204677C: ; 0x0204677C - ldr r0, _02046790 ; =_020AFED8 - ldr ip, _02046794 ; =IsAdvancedTextBoxActive - ldr r0, [r0] - ldrsb r0, [r0] - bx ip - .align 2, 0 -_02046790: .word _020AFED8 -_02046794: .word IsAdvancedTextBoxActive - arm_func_end sub_0204677C - - arm_func_start sub_02046798 -sub_02046798: ; 0x02046798 - ldr r1, _020467AC ; =_020AFED8 - ldr ip, _020467B0 ; =sub_0200C5DC - ldr r1, [r1] - add r1, r1, #4 - bx ip - .align 2, 0 -_020467AC: .word _020AFED8 -_020467B0: .word sub_0200C5DC - arm_func_end sub_02046798 - - arm_func_start sub_020467B4 -sub_020467B4: ; 0x020467B4 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #0x24 - mov r4, r0 - bl sub_0204AE60 - cmp r0, #0 - moveq r0, #0 - beq _020467E8 - add r0, sp, #0 - bl GetReleasedStylus - add r0, sp, #0 - mov r2, r4 - mov r1, #2 - bl sub_02006C8C -_020467E8: - add sp, sp, #0x24 - ldmia sp!, {r3, r4, pc} - arm_func_end sub_020467B4 - - arm_func_start sub_020467F0 -sub_020467F0: ; 0x020467F0 - ldr ip, _020467FC ; =sub_020467B4 - ldr r0, _02046800 ; =_0209CC90 - bx ip - .align 2, 0 -_020467FC: .word sub_020467B4 -_02046800: .word _0209CC90 - arm_func_end sub_020467F0 - - arm_func_start sub_02046804 -sub_02046804: ; 0x02046804 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, _02046824 ; =_0209CCA0 - bl sub_02034974 - cmp r0, #0 - ldrne r0, _02046828 ; =_022AAE64 - strneh r4, [r0] - ldmia sp!, {r4, pc} - .align 2, 0 -_02046824: .word _0209CCA0 -_02046828: .word _022AAE64 - arm_func_end sub_02046804 - - arm_func_start sub_0204682C -sub_0204682C: ; 0x0204682C - stmdb sp!, {r3, lr} - mov r0, #0xa8 - mov r1, #8 - bl MemAlloc - ldr r1, _02046890 ; =_020AFEDC - str r0, [r1] - add r0, r0, #0x10 - bl sub_02034A38 - ldr r2, _02046890 ; =_020AFEDC - ldr r1, _02046894 ; =_022AAE64 - ldr r3, [r2] - str r0, [r3, #0xc] - ldrh r3, [r1] - ldr r1, [r2] - mov r0, #0 - strh r3, [r1, #8] - bl CreateDialogueBox - ldr r1, _02046890 ; =_020AFEDC - mov r2, #0 - ldr r3, [r1] - strb r0, [r3] - ldr r1, [r1] - mov r0, #1 - str r2, [r1, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_02046890: .word _020AFEDC -_02046894: .word _022AAE64 - arm_func_end sub_0204682C - - arm_func_start sub_02046898 -sub_02046898: ; 0x02046898 - stmdb sp!, {r3, lr} - ldr r0, _020468D0 ; =_020AFEDC - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - bl CloseDialogueBox - ldr r0, _020468D0 ; =_020AFEDC - ldr r0, [r0] - bl MemFree - ldr r0, _020468D0 ; =_020AFEDC - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_020468D0: .word _020AFEDC - arm_func_end sub_02046898 - - arm_func_start sub_020468D4 -sub_020468D4: ; 0x020468D4 - stmdb sp!, {r3, lr} - ldr r0, _020469B4 ; =_020AFEDC - ldr r2, [r0] - ldr r1, [r2, #4] - cmp r1, #3 - addls pc, pc, r1, lsl #2 - b _020469AC -_020468F0: ; jump table - b _02046900 ; case 0 - b _02046928 ; case 1 - b _0204695C ; case 2 - b _0204697C ; case 3 -_02046900: - ldrsb r0, [r2] - ldrh r2, [r2, #8] - ldr r1, _020469B8 ; =0x00000618 - mov r3, #0 - bl ShowStringIdInDialogueBox - ldr r0, _020469B4 ; =_020AFEDC - mov r1, #1 - ldr r0, [r0] - str r1, [r0, #4] - b _020469AC -_02046928: - ldrsb r0, [r2] - bl IsDialogueBoxActive - cmp r0, #0 - bne _020469AC - ldr r0, _020469B4 ; =_020AFEDC - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202F334 - ldr r0, _020469B4 ; =_020AFEDC - mov r1, #2 - ldr r0, [r0] - str r1, [r0, #4] - b _020469AC -_0204695C: - ldrsb r0, [r2] - bl IsDialogueBoxActive - cmp r0, #0 - ldreq r0, _020469B4 ; =_020AFEDC - moveq r1, #3 - ldreq r0, [r0] - streq r1, [r0, #4] - b _020469AC -_0204697C: - mov r1, #4 - str r1, [r2, #4] - ldr r1, [r0] - ldr r0, [r1, #0xc] - tst r0, #0x100 - beq _020469A4 - ldr r0, [r1, #0x98] - ldr r2, [r1, #0x94] - mov r1, #0 - blx r2 -_020469A4: - mov r0, #4 - ldmia sp!, {r3, pc} -_020469AC: - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_020469B4: .word _020AFEDC -_020469B8: .word 0x00000618 - arm_func_end sub_020468D4 - - arm_func_start sub_020469BC -sub_020469BC: ; 0x020469BC - stmdb sp!, {r3, lr} - mov r0, #0x2c - mov r1, #8 - bl MemAlloc - ldr r2, _020469E4 ; =_020AFEE0 - mov r1, #0x2c - str r0, [r2] - bl MemZero - bl sub_020471AC - ldmia sp!, {r3, pc} - .align 2, 0 -_020469E4: .word _020AFEE0 - arm_func_end sub_020469BC - - arm_func_start sub_020469E8 -sub_020469E8: ; 0x020469E8 - stmdb sp!, {r3, lr} - ldr r0, _02046A1C ; =_020AFEE0 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl sub_020471E8 - ldr r0, _02046A1C ; =_020AFEE0 - ldr r0, [r0] - bl MemFree - ldr r0, _02046A1C ; =_020AFEE0 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02046A1C: .word _020AFEE0 - arm_func_end sub_020469E8 - - arm_func_start sub_02046A20 -sub_02046A20: ; 0x02046A20 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x10 - ldr r4, _02046A98 ; =_020AFEE0 - mov r6, r1 - ldr r4, [r4] - mov r7, r0 - mov r0, r4 - mov r1, #0x2c - mov r5, r2 - mov r8, r3 - bl MemZero - ldr r0, [sp, #0x28] - str r8, [sp] - ldrh r1, [sp, #0x2c] - str r0, [sp, #4] - ldr r0, [sp, #0x30] - str r1, [sp, #8] - mov r1, r7 - mov r2, r6 - mov r3, r5 - str r0, [sp, #0xc] - add r0, r4, #0x10 - bl sub_02046D50 - mov r0, #1 - str r0, [r4, #0x14] - str r5, [r4, #0x24] - mov r0, #0 - str r0, [r4, #0x28] - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02046A98: .word _020AFEE0 - arm_func_end sub_02046A20 - - arm_func_start sub_02046A9C -sub_02046A9C: ; 0x02046A9C - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #0xa4 - mov r7, r0 - mov r6, r1 - add r0, sp, #0xc - mov r1, #0x98 - mov r5, r2 - mov r4, r3 - bl MemZero - ldrsb r0, [sp, #0xb8] - add r3, sp, #0xc - mov r1, r6 - cmp r0, #0 - addge r0, r5, r0, lsl #3 - ldrge r0, [r0, #4] - mov ip, #0 - movlt r0, #0 - str r0, [sp, #0xc] - str r5, [sp] - str r4, [sp, #4] - mov r0, r7 - mov r2, #0x33 - str ip, [sp, #8] - bl sub_02046A20 - add sp, sp, #0xa4 - ldmia sp!, {r4, r5, r6, r7, pc} - arm_func_end sub_02046A9C - - arm_func_start sub_02046B04 -sub_02046B04: ; 0x02046B04 - stmdb sp!, {r3, r4, r5, lr} - ldr r0, _02046B9C ; =_020AFEE0 - ldr r5, [r0] - ldr r0, [r5, #0x14] - cmp r0, #0 - beq _02046B94 - cmp r0, #1 - beq _02046B30 - cmp r0, #9 - beq _02046B64 - b _02046B94 -_02046B30: - ldr r0, [r5, #0x10] - bl sub_02046F40 - ldr r0, [r5, #0x10] - bl sub_02047030 - mov r4, r0 - ldr r0, [r5, #0x10] - bl sub_02047038 - mvn r1, #0 - str r0, [r5, #0x28] - cmp r4, r1 - movne r0, #9 - strne r0, [r5, #0x14] - b _02046B94 -_02046B64: - ldr r0, [r5, #0x10] - bl sub_02047030 - str r0, [r5, #0x20] - ldr r0, [r5, #0x24] - tst r0, #0x400000 - bne _02046B8C - add r0, r5, #0x10 - bl sub_02047040 - mov r0, #0 - str r0, [r5, #0x14] -_02046B8C: - ldr r0, [r5, #0x20] - ldmia sp!, {r3, r4, r5, pc} -_02046B94: - mvn r0, #0 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02046B9C: .word _020AFEE0 - arm_func_end sub_02046B04 - - arm_func_start sub_02046BA0 -sub_02046BA0: ; 0x02046BA0 - ldr r0, _02046BB0 ; =_020AFEE0 - ldr r0, [r0] - ldr r0, [r0, #0x28] - bx lr - .align 2, 0 -_02046BB0: .word _020AFEE0 - arm_func_end sub_02046BA0 - - arm_func_start sub_02046BB4 -sub_02046BB4: ; 0x02046BB4 - stmdb sp!, {r4, lr} - ldr r0, _02046BE4 ; =_020AFEE0 - ldr r4, [r0] - add r0, r4, #0x10 - bl sub_02047040 - mov r1, #0 - ldr r0, _02046BE4 ; =_020AFEE0 - str r1, [r4, #0x14] - ldr r0, [r0] - sub r1, r1, #2 - str r1, [r0, #0x20] - ldmia sp!, {r4, pc} - .align 2, 0 -_02046BE4: .word _020AFEE0 - arm_func_end sub_02046BB4 - - arm_func_start sub_02046BE8 -sub_02046BE8: ; 0x02046BE8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r3, _02046C2C ; =_020AFEE0 - mov r6, r1 - ldr r4, [r3] - mov r7, r0 - mov r5, r2 - mov r0, r4 - mov r1, #0x2c - bl MemZero - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl sub_020472A4 - mov r0, #1 - str r0, [r4, #0x14] - strh r7, [r4, #0x18] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02046C2C: .word _020AFEE0 - arm_func_end sub_02046BE8 - - arm_func_start sub_02046C30 -sub_02046C30: ; 0x02046C30 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r3, _02046C74 ; =_020AFEE0 - mov r6, r1 - ldr r4, [r3] - mov r7, r0 - mov r5, r2 - mov r0, r4 - mov r1, #0x2c - bl MemZero - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl sub_02047358 - mov r0, #1 - str r0, [r4, #0x14] - strh r7, [r4, #0x18] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02046C74: .word _020AFEE0 - arm_func_end sub_02046C30 - - arm_func_start sub_02046C78 -sub_02046C78: ; 0x02046C78 - stmdb sp!, {r4, lr} - ldr r0, _02046D1C ; =_020AFEE0 - ldr r4, [r0] - ldr r0, [r4, #0x14] - cmp r0, #9 - bgt _02046CB4 - bge _02046CF0 - cmp r0, #1 - bgt _02046D14 - cmp r0, #0 - blt _02046D14 - beq _02046D14 - cmp r0, #1 - beq _02046CC0 - b _02046D14 -_02046CB4: - cmp r0, #0xa - beq _02046D00 - b _02046D14 -_02046CC0: - bl sub_020473FC - cmp r0, #2 - bne _02046D14 - ldrh r0, [r4, #0x18] - tst r0, #0x400 - movne r0, #0xa - strne r0, [r4, #0x14] - movne r0, #0x3c - strne r0, [r4, #0x1c] - moveq r0, #9 - streq r0, [r4, #0x14] - b _02046D14 -_02046CF0: - mov r0, #0 - str r0, [r4, #0x14] - mov r0, #1 - ldmia sp!, {r4, pc} -_02046D00: - ldr r0, [r4, #0x1c] - subs r0, r0, #1 - str r0, [r4, #0x1c] - movmi r0, #9 - strmi r0, [r4, #0x14] -_02046D14: - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_02046D1C: .word _020AFEE0 - arm_func_end sub_02046C78 - - arm_func_start sub_02046D20 -sub_02046D20: ; 0x02046D20 - ldr ip, _02046D28 ; =sub_020473A4 - bx ip - .align 2, 0 -_02046D28: .word sub_020473A4 - arm_func_end sub_02046D20 - - arm_func_start sub_02046D2C -sub_02046D2C: ; 0x02046D2C - ldr r1, _02046D40 ; =_020AFEE0 - ldr r2, [r1] - str r0, [r1] - mov r0, r2 - bx lr - .align 2, 0 -_02046D40: .word _020AFEE0 - arm_func_end sub_02046D2C - - arm_func_start sub_02046D44 -sub_02046D44: ; 0x02046D44 - ldr ip, _02046D4C ; =sub_020474B8 - bx ip - .align 2, 0 -_02046D4C: .word sub_020474B8 - arm_func_end sub_02046D44 - - arm_func_start sub_02046D50 -sub_02046D50: ; 0x02046D50 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x410 - mov r4, r0 - mov r5, r1 - mov r0, #0xcc - mov r1, #8 - mov sb, r2 - mov r8, r3 - ldr r7, [sp, #0x434] - bl MemAlloc - mov r1, #0xcc - mov r6, r0 - str r0, [r4] - bl MemZero - cmp r5, #0 - bne _02046E48 - mov r5, #0 - sub r0, r5, #1 - str r5, [sp] - strb r0, [sp, #9] - cmp r7, #0 - beq _02046E54 - mov r4, r5 - add sl, sp, #0x10 - b _02046DE0 -_02046DB4: - mov r0, r4, lsl #3 - ldrh r1, [r7, r0] - cmp r1, #0 - beq _02046DE8 - mov r0, sl - bl GetStringFromFileVeneer - mov r0, sl - bl sub_020265A8 - cmp r0, r5 - movgt r5, r0 - add r4, r4, #1 -_02046DE0: - cmp r4, #0x64 - blt _02046DB4 -_02046DE8: - mov r0, #0xe - mul r1, r4, r0 - add r3, r5, #7 - mov r0, r3, asr #2 - add r2, r1, #7 - add r0, r3, r0, lsr #29 - mov r0, r0, asr #3 - add r3, r0, #2 - mov r1, r2, asr #2 - add r0, r2, r1, lsr #29 - mov r5, r0, asr #3 - rsb r4, r3, #0x1e - rsb r2, r5, #0xf - mov r1, #0 - strb r4, [sp, #4] - add r0, sp, #0 - strb r5, [sp, #7] - add r4, r6, #4 - strb r2, [sp, #5] - strb r3, [sp, #6] - str r1, [sp, #0xc] - ldmia r0, {r0, r1, r2, r3} - stmia r4, {r0, r1, r2, r3} - b _02046E54 -_02046E48: - add r4, r6, #4 - ldmia r5, {r0, r1, r2, r3} - stmia r4, {r0, r1, r2, r3} -_02046E54: - add r0, sp, #0x420 - ldrh r1, [r0, #0x18] - ldr ip, [sp, #0x430] - ldr r0, [sp, #0x43c] - strh r1, [r6, #0x20] - strh sb, [r6, #0x22] - str r0, [r6, #0x24] - str r7, [r6, #0x1c] - mvn r0, #0 - str r0, [r6, #0x14] - str r8, [r6, #0x28] - mov r0, #0 - str r0, [r6, #0x18] - cmp ip, #0 - streqb r0, [r6, #0xc4] - beq _02046EBC - add r5, r6, #0x2c - mov r4, #9 -_02046E9C: - ldmia ip!, {r0, r1, r2, r3} - stmia r5!, {r0, r1, r2, r3} - subs r4, r4, #1 - bne _02046E9C - ldmia ip, {r0, r1} - stmia r5, {r0, r1} - mov r0, #1 - strb r0, [r6, #0xc4] -_02046EBC: - mvn r0, #1 - strb r0, [r6] - ldrh r0, [r6, #0x20] - cmp r0, #0 - moveq r0, #0 - beq _02046EF8 - bl sub_020473FC - cmp r0, #1 - bne _02046EE4 - bl sub_02047220 -_02046EE4: - ldrh r0, [r6, #0x22] - ldrh r1, [r6, #0x20] - ldr r2, [r6, #0x24] - bl sub_02047244 - mov r0, #1 -_02046EF8: - cmp r0, #0 - bne _02046F2C - ldrb r0, [r6, #0xc4] - ldr r1, [r6, #0x28] - ldr r3, [r6, #0x1c] - cmp r0, #0 - addne r2, r6, #0x2c - moveq r2, #0 - add r0, r6, #4 - bl CreateParentMenuFromStringIds - strb r0, [r6] - mov r0, #1 - b _02046F30 -_02046F2C: - mov r0, #6 -_02046F30: - str r0, [r6, #0xc8] - mov r0, #1 - add sp, sp, #0x410 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end sub_02046D50 - - arm_func_start sub_02046F40 -sub_02046F40: ; 0x02046F40 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - ldr r0, [r4, #0xc8] - cmp r0, #9 - addls pc, pc, r0, lsl #2 - ldmia sp!, {r3, r4, r5, pc} -_02046F58: ; jump table - ldmia sp!, {r3, r4, r5, pc} ; case 0 - b _02046FBC ; case 1 - ldmia sp!, {r3, r4, r5, pc} ; case 2 - ldmia sp!, {r3, r4, r5, pc} ; case 3 - ldmia sp!, {r3, r4, r5, pc} ; case 4 - ldmia sp!, {r3, r4, r5, pc} ; case 5 - b _02046F80 ; case 6 - ldmia sp!, {r3, r4, r5, pc} ; case 7 - ldmia sp!, {r3, r4, r5, pc} ; case 8 - b _02047024 ; case 9 -_02046F80: - bl sub_020473FC - cmp r0, #2 - ldmneia sp!, {r3, r4, r5, pc} - ldrb r0, [r4, #0xc4] - ldr r1, [r4, #0x28] - ldr r3, [r4, #0x1c] - cmp r0, #0 - addne r2, r4, #0x2c - moveq r2, #0 - add r0, r4, #4 - bl CreateParentMenuFromStringIds - strb r0, [r4] - mov r0, #1 - str r0, [r4, #0xc8] - ldmia sp!, {r3, r4, r5, pc} -_02046FBC: - ldrsb r0, [r4] - bl sub_020282F4 - mov r5, r0 - ldrsb r0, [r4] - bl sub_0202AB80 - str r0, [r4, #0x18] - ldrsb r0, [r4] - bl IsParentMenuActive - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mvn r1, #3 - cmp r5, r1 - bne _02047008 - ldrsb r0, [r4] - bl sub_0202ABB0 - str r0, [r4, #0x14] - mov r0, #9 - str r0, [r4, #0xc8] - ldmia sp!, {r3, r4, r5, pc} -_02047008: - sub r0, r1, #1 - cmp r5, r0 - addeq r0, r1, #2 - streq r0, [r4, #0x14] - moveq r0, #9 - streq r0, [r4, #0xc8] - ldmia sp!, {r3, r4, r5, pc} -_02047024: - mov r0, #0xa - str r0, [r4, #0xc8] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02046F40 - - arm_func_start sub_02047030 -sub_02047030: ; 0x02047030 - ldr r0, [r0, #0x14] - bx lr - arm_func_end sub_02047030 - - arm_func_start sub_02047038 -sub_02047038: ; 0x02047038 - ldr r0, [r0, #0x18] - bx lr - arm_func_end sub_02047038 - - arm_func_start sub_02047040 -sub_02047040: ; 0x02047040 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r4, [r5] - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldrsb r0, [r4] - mvn r1, #1 - cmp r0, r1 - beq _02047068 - bl CloseParentMenu -_02047068: - mov r0, r4 - bl MemFree - mov r0, #0 - str r0, [r5] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02047040 - - arm_func_start sub_0204707C -sub_0204707C: ; 0x0204707C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r0, #0xc - mov r1, #8 - mov r5, r2 - bl MemAlloc - mov r1, #0xc - mov r4, r0 - str r0, [r7] - bl MemZero - mov r0, r6 - mov r1, r5 - bl CreateTextBox - strb r0, [r4] - mov r0, #3 - str r0, [r4, #8] - sub r0, r0, #4 - str r0, [r4, #4] - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end sub_0204707C - - arm_func_start sub_020470D0 -sub_020470D0: ; 0x020470D0 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, [r4, #8] - cmp r0, #0 - beq _020470FC - cmp r0, #3 - beq _02047108 - cmp r0, #4 - moveq r0, #8 - streq r0, [r4, #8] - ldmia sp!, {r4, pc} -_020470FC: - mov r0, #3 - str r0, [r4, #8] - ldmia sp!, {r4, pc} -_02047108: - ldrsb r0, [r4] - bl sub_020282F4 - mvn r2, #3 - cmp r0, r2 - addeq r0, r2, #1 - streq r0, [r4, #4] - moveq r0, #4 - streq r0, [r4, #8] - ldmeqia sp!, {r4, pc} - sub r1, r2, #1 - cmp r0, r1 - addeq r0, r2, #2 - streq r0, [r4, #4] - moveq r0, #4 - streq r0, [r4, #8] - ldmia sp!, {r4, pc} - arm_func_end sub_020470D0 - - arm_func_start sub_02047148 -sub_02047148: ; 0x02047148 - ldr r0, [r0, #4] - bx lr - arm_func_end sub_02047148 - - arm_func_start sub_02047150 -sub_02047150: ; 0x02047150 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r4, [r5] - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldrsb r0, [r4] - bl sub_0202812C - ldrsb r0, [r4] - bl CloseTextBox2 - mov r0, r4 - bl MemFree - mov r0, #0 - str r0, [r5] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02047150 - - arm_func_start sub_02047188 -sub_02047188: ; 0x02047188 - stmdb sp!, {r4, lr} - ldr r4, [r0] - cmp r4, #0 - ldmeqia sp!, {r4, pc} - ldrsb r0, [r4] - bl sub_02027B1C - ldrsb r0, [r4] - bl sub_0202F9B8 - ldmia sp!, {r4, pc} - arm_func_end sub_02047188 - - arm_func_start sub_020471AC -sub_020471AC: ; 0x020471AC - stmdb sp!, {r3, lr} - mov r0, #0x70 - mov r1, #8 - bl MemAlloc - ldr r2, _020471E4 ; =_020AFEE4 - mov r1, #0x70 - str r0, [r2] - bl MemZero - ldr r0, _020471E4 ; =_020AFEE4 - mvn r2, #1 - ldr r1, [r0] - mov r0, #1 - strb r2, [r1] - ldmia sp!, {r3, pc} - .align 2, 0 -_020471E4: .word _020AFEE4 - arm_func_end sub_020471AC - - arm_func_start sub_020471E8 -sub_020471E8: ; 0x020471E8 - stmdb sp!, {r3, lr} - ldr r0, _0204721C ; =_020AFEE4 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl sub_020473A4 - ldr r0, _0204721C ; =_020AFEE4 - ldr r0, [r0] - bl MemFree - ldr r0, _0204721C ; =_020AFEE4 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0204721C: .word _020AFEE4 - arm_func_end sub_020471E8 - - arm_func_start sub_02047220 -sub_02047220: ; 0x02047220 - stmdb sp!, {r3, lr} - mov r0, #0 - bl CreateDialogueBox - ldr r1, _02047240 ; =_020AFEE4 - ldr r1, [r1] - strb r0, [r1] - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02047240: .word _020AFEE4 - arm_func_end sub_02047220 - - arm_func_start sub_02047244 -sub_02047244: ; 0x02047244 - stmdb sp!, {r4, lr} - ldr r3, _020472A0 ; =_020AFEE4 - mov r4, r2 - ldr r2, [r3] - strh r1, [r2, #0x14] - ldr r1, [r3] - strh r0, [r1, #0x68] - ldr r0, [r3] - ldrsb r0, [r0] - bl sub_020288DC - ldr r0, _020472A0 ; =_020AFEE4 - ldr r0, [r0] - ldrsb r0, [r0] - bl ShowDialogueBox - ldr r0, _020472A0 ; =_020AFEE4 - mov r3, r4 - ldr r2, [r0] - ldrsb r0, [r2] - ldrh r1, [r2, #0x68] - ldrh r2, [r2, #0x14] - bl ShowStringIdInDialogueBox - mov r0, #1 - ldmia sp!, {r4, pc} - .align 2, 0 -_020472A0: .word _020AFEE4 - arm_func_end sub_02047244 - - arm_func_start sub_020472A4 -sub_020472A4: ; 0x020472A4 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl sub_020473FC - cmp r0, #1 - bne _020472D4 - mov r0, #0 - bl CreateDialogueBox - ldr r1, _020472EC ; =_020AFEE4 - ldr r1, [r1] - strb r0, [r1] -_020472D4: - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl sub_02047244 - mov r0, #1 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_020472EC: .word _020AFEE4 - arm_func_end sub_020472A4 - - arm_func_start sub_020472F0 -sub_020472F0: ; 0x020472F0 - stmdb sp!, {r3, r4, r5, lr} - ldr r3, _02047354 ; =_020AFEE4 - mov ip, #0 - ldr r4, [r3] - mov r5, r1 - strh ip, [r4, #0x14] - ldr r1, [r3] - mov r4, r2 - strh r0, [r1, #0x68] - ldr r0, [r3] - ldrsb r0, [r0] - bl sub_020288DC - ldr r0, _02047354 ; =_020AFEE4 - ldr r0, [r0] - ldrsb r0, [r0] - bl ShowDialogueBox - ldr r0, _02047354 ; =_020AFEE4 - mov r2, r5 - ldr r1, [r0] - mov r3, r4 - ldrsb r0, [r1] - ldrh r1, [r1, #0x68] - bl ShowStringInDialogueBox - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02047354: .word _020AFEE4 - arm_func_end sub_020472F0 - - arm_func_start sub_02047358 -sub_02047358: ; 0x02047358 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl sub_020473FC - cmp r0, #1 - bne _02047388 - mov r0, #0 - bl CreateDialogueBox - ldr r1, _020473A0 ; =_020AFEE4 - ldr r1, [r1] - strb r0, [r1] -_02047388: - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl sub_020472F0 - mov r0, #1 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_020473A0: .word _020AFEE4 - arm_func_end sub_02047358 - - arm_func_start sub_020473A4 -sub_020473A4: ; 0x020473A4 - stmdb sp!, {r3, lr} - ldr r0, _020473F8 ; =_020AFEE4 - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0] - cmp r0, r1 - ldmeqia sp!, {r3, pc} - bl sub_0202836C - ldr r0, _020473F8 ; =_020AFEE4 - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202F2C4 - ldr r0, _020473F8 ; =_020AFEE4 - ldr r0, [r0] - ldrsb r0, [r0] - bl CloseDialogueBox - ldr r0, _020473F8 ; =_020AFEE4 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_020473F8: .word _020AFEE4 - arm_func_end sub_020473A4 - - arm_func_start sub_020473FC -sub_020473FC: ; 0x020473FC - stmdb sp!, {r4, lr} - ldr r0, _0204749C ; =_020AFEE4 - mov r4, #0 - ldr r0, [r0] - sub r1, r4, #2 - ldrsb r0, [r0] - cmp r0, r1 - moveq r0, #1 - ldmeqia sp!, {r4, pc} - bl IsDialogueBoxActive - cmp r0, #0 - movne r0, #4 - bne _02047440 - ldr r0, _0204749C ; =_020AFEE4 - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202F16C -_02047440: - cmp r0, #0xa - addls pc, pc, r0, lsl #2 - b _02047494 -_0204744C: ; jump table - b _02047494 ; case 0 - b _02047490 ; case 1 - b _02047494 ; case 2 - b _02047494 ; case 3 - b _02047488 ; case 4 - b _02047494 ; case 5 - b _02047494 ; case 6 - b _02047494 ; case 7 - b _02047478 ; case 8 - b _02047478 ; case 9 - b _02047480 ; case 10 -_02047478: - mov r4, #4 - b _02047494 -_02047480: - mov r4, #5 - b _02047494 -_02047488: - mov r4, #3 - b _02047494 -_02047490: - mov r4, #2 -_02047494: - mov r0, r4 - ldmia sp!, {r4, pc} - .align 2, 0 -_0204749C: .word _020AFEE4 - arm_func_end sub_020473FC - - arm_func_start sub_020474A0 -sub_020474A0: ; 0x020474A0 - ldr r1, _020474B4 ; =_020AFEE4 - ldr r2, [r1] - str r0, [r1] - mov r0, r2 - bx lr - .align 2, 0 -_020474B4: .word _020AFEE4 - arm_func_end sub_020474A0 - - arm_func_start sub_020474B8 -sub_020474B8: ; 0x020474B8 - ldr r2, _020474D8 ; =_020AFEE4 - mov r3, r0 - ldr r0, [r2] - ldr ip, _020474DC ; =ReadStringFromDialogueBox - mov r2, r1 - ldrsb r0, [r0] - mov r1, r3 - bx ip - .align 2, 0 -_020474D8: .word _020AFEE4 -_020474DC: .word ReadStringFromDialogueBox - arm_func_end sub_020474B8 - - arm_func_start sub_020474E0 -sub_020474E0: ; 0x020474E0 - stmdb sp!, {r3, lr} - ldr r0, _02047574 ; =_022AAE68 - ldr r2, [r0] - cmp r2, #0 - beq _0204756C - ldr r1, [r2, #0x10] - cmp r1, #2 - bgt _02047520 - cmp r1, #0 - blt _0204756C - beq _02047528 - cmp r1, #1 - beq _02047534 - cmp r1, #2 - beq _02047554 - b _0204756C -_02047520: - cmp r1, #0xff - b _0204756C -_02047528: - add r0, r1, #1 - str r0, [r2, #0x10] - b _0204756C -_02047534: - mov r0, #0 - bl sub_02047C40 - cmp r0, #0 - ldrne r0, _02047574 ; =_022AAE68 - movne r1, #2 - ldrne r0, [r0] - strne r1, [r0, #0x10] - b _0204756C -_02047554: - mov r1, #1 - str r1, [r0, #4] - mov r0, #0xff - str r0, [r2, #0x10] - mov r0, #4 - ldmia sp!, {r3, pc} -_0204756C: - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02047574: .word _022AAE68 - arm_func_end sub_020474E0 - - arm_func_start sub_02047578 -sub_02047578: ; 0x02047578 - stmdb sp!, {r3, lr} - ldr r0, _020475B0 ; =_022AAE68 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - mov r0, #0 - bl sub_02047EF4 - ldr r0, _020475B0 ; =_022AAE68 - ldr r0, [r0] - bl MemFree - ldr r0, _020475B0 ; =_022AAE68 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_020475B0: .word _022AAE68 - arm_func_end sub_02047578 - - arm_func_start sub_020475B4 -sub_020475B4: ; 0x020475B4 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r6, r0 - ldr r3, _02047658 ; =_022AAE68 - mov ip, #0 - ldr r0, _0204765C ; =_0209CCB0 - mov r5, r1 - mov r4, r2 - str ip, [r3, #4] - bl sub_020348E4 - cmp r0, #0 - beq _02047650 - mov r0, #0x14 - mov r1, #8 - bl MemAlloc - ldr r2, _02047658 ; =_022AAE68 - mov r1, #0x14 - str r0, [r2] - bl MemZero - ldr r2, _02047658 ; =_022AAE68 - mov r1, #0 - str r1, [r2, #4] - ldr r3, [r2] - mov r0, r5 - str r6, [r3, #4] - ldr r3, [r2] - strh r1, [r3, #0xa] - ldr r2, [r2] - strh r5, [r2, #0xc] - bl sub_02047760 - ldr r0, _02047658 ; =_022AAE68 - mov r2, #0 - ldr r5, [r0] - mov r1, r4 - str r2, [sp] - ldrsh r3, [r5, #0xc] - ldr r0, [r5, #4] - add r2, r5, #0xa - bl sub_02047F38 -_02047650: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02047658: .word _022AAE68 -_0204765C: .word _0209CCB0 - arm_func_end sub_020475B4 - - arm_func_start sub_02047660 -sub_02047660: ; 0x02047660 - ldr r0, _0204766C ; =_022AAE68 - ldr r0, [r0, #4] - bx lr - .align 2, 0 -_0204766C: .word _022AAE68 - arm_func_end sub_02047660 - - arm_func_start sub_02047670 -sub_02047670: ; 0x02047670 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r0, #0x60 - mov r1, #8 - bl MemAlloc - ldr r2, _020476E8 ; =_020AFEE8 - mov r1, #0x60 - str r0, [r2] - bl MemZero - ldr r0, _020476E8 ; =_020AFEE8 - ldr r0, [r0] - bl InitPreprocessorArgs - ldr r1, _020476E8 ; =_020AFEE8 - mov r0, r4 - ldr r2, [r1] - mov r3, #0 - mov r1, #1 - str r3, [r2, #0x4c] - bl sub_02047760 - ldr r1, _020476E8 ; =_020AFEE8 - mov r3, #0 - ldr r2, [r1] - mov r0, #1 - strh r3, [r2, #0x58] - ldr r2, [r1] - strh r4, [r2, #0x56] - ldr r1, [r1] - str r5, [r1, #0x50] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020476E8: .word _020AFEE8 - arm_func_end sub_02047670 - - arm_func_start sub_020476EC -sub_020476EC: ; 0x020476EC - stmdb sp!, {r3, lr} - ldr r1, _02047718 ; =_020AFEE8 - mov r2, #1 - ldr ip, [r1] - mov r1, r0 - str r2, [sp] - ldrsh r3, [ip, #0x56] - ldr r0, [ip, #0x50] - add r2, ip, #0x58 - bl sub_02047F38 - ldmia sp!, {r3, pc} - .align 2, 0 -_02047718: .word _020AFEE8 - arm_func_end sub_020476EC - - arm_func_start sub_0204771C -sub_0204771C: ; 0x0204771C - stmdb sp!, {r3, lr} - ldr r0, _0204775C ; =_020AFEE8 - ldr r0, [r0] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - mov r0, #1 - bl sub_02047EF4 - ldr r0, _0204775C ; =_020AFEE8 - ldr r0, [r0] - bl MemFree - ldr r0, _0204775C ; =_020AFEE8 - mov r1, #0 - str r1, [r0] - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0204775C: .word _020AFEE8 - arm_func_end sub_0204771C - - arm_func_start sub_02047760 -sub_02047760: ; 0x02047760 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x18 - ldr r2, _02047920 ; =_020AFEEC - mov r5, r1 - ldr r1, [r2, r5, lsl #2] - mov r6, r0 - cmp r1, #0 - movne r0, #0 - bne _02047918 - ldr r0, _02047924 ; =0x00002020 - mov r1, #8 - bl MemAlloc - ldr r1, _02047924 ; =0x00002020 - mov r4, r0 - bl MemZero - cmp r5, #0 - bne _02047850 - ldr r0, _02047928 ; =_0209CCC0 - add lr, sp, #8 - ldmia r0, {r0, r1, r2, r3} - stmia lr, {r0, r1, r2, r3} - mov ip, #0 - add r2, r4, #0x384 - str ip, [sp, #8] - str r4, [sp, #0x14] - strb ip, [sp, #0x10] - add r0, r4, #0x1000 -#ifdef JAPAN - mov r1, #0x10 - str r1, [r0, #0xf90] - add r0, r4, #0x1f00 - mov r1, #0x1540 -#else - mov r3, #0x10 - str r3, [r0, #0xf90] - ldr r1, _0204792C ; =0x00000A44 - add r0, r4, #0x1f00 -#endif - strh r1, [r0, #0x8c] - str ip, [sp] - ldr r1, _02047930 ; =0x0040180A - ldr r3, _02047934 ; =sub_02047AB4 - mov r0, lr - add r2, r2, #0x1c00 - str ip, [sp, #4] - bl CreateAdvancedTextBox - add r1, r4, #0x100 - strb r0, [r4, #0x120] - ldrsb r0, [r1, #0x20] - mov r1, #1 - bl SetAdvancedTextBoxPartialMenu - add r0, r4, #0x100 - ldrsb r0, [r0, #0x20] - mov r1, #1 - bl sub_02030AAC - add r0, r4, #0x1f00 - mov r1, #0x14 - strh r1, [r0, #0x80] - add r0, r4, #0x100 - ldrsb r0, [r0, #0x20] - mov r1, #0x20000000 - bl sub_02030A90 - add r0, r4, #0x100 - ldrsb r0, [r0, #0x20] - mov r1, #0x40000000 - bl sub_02030A74 - b _020478A0 -_02047850: - ldr r0, _02047938 ; =_0209CCD0 - add ip, sp, #8 - ldmia r0, {r0, r1, r2, r3} - stmia ip, {r0, r1, r2, r3} - mov r1, #0 - mov r0, #1 - add r2, r4, #0x384 - strb r0, [sp, #0x10] - str r1, [sp, #8] - str r4, [sp, #0x14] - str r1, [sp] - ldr r3, _02047934 ; =sub_02047AB4 - mov r0, ip - add r2, r2, #0x1c00 - str r1, [sp, #4] - bl CreateAdvancedTextBox - strb r0, [r4, #0x120] - add r0, r4, #0x1f00 - mov r1, #8 - strh r1, [r0, #0x80] -_020478A0: - add r0, r4, #0x1000 - strb r5, [r0, #0xf7c] - add r0, r4, #0x100 - ldrsb r1, [r0, #0x20] - mov r0, r4 - bl sub_02025E84 - mov ip, #0 - str ip, [r4, #0x11c] - add r2, r4, #0x1f00 - strh r6, [r2, #0x72] - strb ip, [r4, #0x128] - ldrb r1, [sp, #0xe] - mov r3, #0x3c - add r0, r4, #0x2000 - mov r1, r1, lsl #3 - strh r1, [r2, #0x78] - strb ip, [r0, #0x1c] - add r0, r4, #0x1000 - mov r1, #0x80 - str r1, [r0, #0xf6c] - add r0, r4, #0x12c - add r1, r3, #0x1e00 - strh r3, [r2, #0x68] - bl MemZero - add r0, r4, #0x1000 - mov r2, #0 - ldr r1, _02047920 ; =_020AFEEC - strb r2, [r0, #0xf82] - str r4, [r1, r5, lsl #2] - mov r0, #1 -_02047918: - add sp, sp, #0x18 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02047920: .word _020AFEEC -_02047924: .word 0x00002020 -_02047928: .word _0209CCC0 -#ifndef JAPAN -_0204792C: .word 0x00000A44 -#endif -_02047930: .word 0x0040180A -_02047934: .word sub_02047AB4 -_02047938: .word _0209CCD0 - arm_func_end sub_02047760 - - arm_func_start sub_0204793C -sub_0204793C: ; 0x0204793C - ldr r1, _0204795C ; =_020AFEEC - mov r2, #0 - ldr r3, [r1, r0, lsl #2] - mov r1, #1 - add r0, r3, #0x1f00 - strh r2, [r0, #0x70] - strb r1, [r3, #0x128] - bx lr - .align 2, 0 -_0204795C: .word _020AFEEC - arm_func_end sub_0204793C - - arm_func_start sub_02047960 -sub_02047960: ; 0x02047960 - stmdb sp!, {r3, r4, r5, lr} - ldr r1, _02047A0C ; =_020AFEEC - mov r5, r0 - ldr r4, [r1, r5, lsl #2] - add r0, r4, #0x1f00 - ldrsh r1, [r0, #0x70] - cmp r1, #0 - addle r0, r4, #0x2000 - movle r1, #1 - strleb r1, [r0, #0x1c] - movle r2, #0 - ble _020479B0 - ldrsh r0, [r0, #0x72] - sub r0, r1, r0 - mov r0, r0, lsl #0x10 - movs r2, r0, asr #0x10 - addmi r0, r4, #0x2000 - movmi r1, #1 - strmib r1, [r0, #0x1c] - movmi r2, #0 -_020479B0: - add r0, r4, #0x1f00 - strh r2, [r0, #0x74] - mov r1, #0 - strb r1, [r4, #0x128] - strh r2, [r0, #0x7e] - add r0, r4, #0x100 - ldrsb r0, [r0, #0x20] - bl SetAdvancedTextBoxField0x1C2 - cmp r5, #0 - ldmneia sp!, {r3, r4, r5, pc} - add r0, r4, #0x2000 - ldrb r0, [r0, #0x1c] - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - add r0, r4, #0x100 - ldrsb r0, [r0, #0x20] - mov r1, #0x20000000 - bl sub_02030A74 - add r0, r4, #0x100 - ldrsb r0, [r0, #0x20] - mov r1, #0x40000000 - bl sub_02030A74 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02047A0C: .word _020AFEEC - arm_func_end sub_02047960 - - arm_func_start sub_02047A10 -sub_02047A10: ; 0x02047A10 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - ldr r4, _02047AB0 ; =_020AFEEC - mov r6, r0 - ldr r4, [r4, r3, lsl #2] - mov r5, r2 - ldrb r0, [r4, #0x128] - cmp r0, #0 - beq _02047AA8 - add r0, r4, #0x1f00 - ldrsh r3, [r0, #0x70] - ldrsh r2, [r0, #0x68] - cmp r3, r2 - bge _02047AA8 - add r2, r3, r3, lsl #7 - add r2, r4, r2 - strb r1, [r2, #0x1ac] - ldrsh r0, [r0, #0x70] - add r2, r4, #0x12c - mov r1, r6 - add r0, r0, r0, lsl #7 - add r0, r2, r0 - bl strcpy - str r5, [sp] - add r0, r4, #0x1f00 - ldrsh r1, [r0, #0x70] - add r0, r4, #0x1000 - add r5, r4, #0x12c - add r3, r1, r1, lsl #7 - ldr r1, [r0, #0xf6c] - mov r2, r6 - add r0, r5, r3 - mov r3, #0x400 - bl PreprocessString - add r0, r4, #0x1f00 - ldrsh r1, [r0, #0x70] - add r1, r1, #1 - strh r1, [r0, #0x70] -_02047AA8: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02047AB0: .word _020AFEEC - arm_func_end sub_02047A10 - - arm_func_start sub_02047AB4 -sub_02047AB4: ; 0x02047AB4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - mov sl, r0 - bl sub_02028324 - cmp r0, #0 - moveq r1, #0 - beq _02047ADC - cmp r0, #1 - moveq r1, #1 - bne _02047C34 -_02047ADC: - ldr r0, _02047C3C ; =_020AFEEC - ldr r5, [r0, r1, lsl #2] - add r0, r5, #0x100 - ldrsb r0, [r0, #0x20] - bl sub_02027B1C - ldr r0, [r5, #0x11c] - cmp r0, #2 - beq _02047B0C - mov r0, r5 - bl sub_0202613C - mov r0, #1 - str r0, [r5, #0x11c] -_02047B0C: - add r4, r5, #0x1f00 - ldrsh r0, [r4, #0x70] - ldrsh r7, [r4, #0x7e] - cmp r7, r0 - bge _02047C34 - ldr r1, [r5, #0x18] - ldr r2, [r5, #4] - mov r1, r1, lsl #0x10 - mov r2, r2, lsl #0x10 - mov r8, r1, asr #0x10 - mov r1, r2, asr #0x10 - str r1, [sp, #4] - mov r6, #0 - add fp, r5, #0x12c - b _02047BBC -_02047B48: - add sb, r7, r7, lsl #7 - add r0, r5, sb - ldrb r0, [r0, #0x1ac] - cmp r0, #0 - beq _02047B80 - mov r0, #0x17 - str r0, [sp] - ldrsh r1, [r4, #0x80] - ldrsh r3, [r4, #0x78] - mov r0, sl - mla r1, r6, r8, r1 - sub r2, r1, #2 - mov r1, #0 - bl sub_02025D50 -_02047B80: - ldrsh r2, [r4, #0x80] - ldr r1, [sp, #4] - mov r0, sl - mla r2, r6, r8, r2 - add r3, fp, sb - bl sub_020264A4 - add r0, r7, #1 - mov r1, r0, lsl #0x10 - ldrsh r0, [r4, #0x70] - mov r7, r1, asr #0x10 - cmp r0, r1, asr #16 - ble _02047BC8 - add r1, r6, #1 - mov r1, r1, lsl #0x10 - mov r6, r1, asr #0x10 -_02047BBC: - ldrsh r1, [r4, #0x72] - cmp r6, r1 - blt _02047B48 -_02047BC8: - add r1, r5, #0x1f00 - ldrsh r2, [r1, #0x72] - cmp r0, r2 - ble _02047C18 - sub r0, r0, r2 - sub r0, r0, #1 - ldrsh r1, [r1, #0x74] - mov r0, r0, lsl #0x10 - cmp r1, r0, asr #16 - addeq r0, r5, #0x1000 - moveq r1, #1 - streqb r1, [r0, #0xf82] - beq _02047C2C - cmp r1, #0 - add r0, r5, #0x1000 - moveq r1, #2 - streqb r1, [r0, #0xf82] - movne r1, #3 - strneb r1, [r0, #0xf82] - b _02047C2C -_02047C18: - add r0, r5, #0x1000 - mov r1, #0 - strb r1, [r0, #0xf82] - strb r1, [r0, #0xf7a] - strb r1, [r0, #0xf7b] -_02047C2C: - mov r0, sl - bl UpdateWindow -_02047C34: - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02047C3C: .word _020AFEEC - arm_func_end sub_02047AB4 - - arm_func_start sub_02047C40 -sub_02047C40: ; 0x02047C40 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - ldr r1, _02047EF0 ; =_020AFEEC - mov r6, #0 - ldr r5, [r1, r0, lsl #2] - add r1, sp, #0 - mov r0, r6 - bl sub_020063F4 - add r0, r5, #0x100 - ldrsb r0, [r0, #0x20] - bl GetAdvancedTextBoxFlags2 - ldr r1, [r5, #0x11c] - mov r4, r0 - cmp r1, #4 - addls pc, pc, r1, lsl #2 - b _02047EE4 -_02047C80: ; jump table - b _02047C94 ; case 0 - b _02047CAC ; case 1 - b _02047CB8 ; case 2 - b _02047EC0 ; case 3 - b _02047ECC ; case 4 -_02047C94: - mov r0, r5 - bl sub_020261D4 - cmp r0, #0 - beq _02047EE4 - mov r0, #1 - str r0, [r5, #0x11c] -_02047CAC: - mov r0, #2 - str r0, [r5, #0x11c] - b _02047EE4 -_02047CB8: - mov r0, r5 - bl sub_02026204 - add r1, r5, #0x1000 - ldrb r1, [r1, #0xf7c] - mov r7, r0 - cmp r1, #1 - beq _02047EE4 - add r0, r5, #0x100 - ldrsb r0, [r0, #0x20] - bl IsAdvancedTextBoxActive - cmp r0, #0 - beq _02047CF0 - ands r8, r4, #2 - beq _02047D0C -_02047CF0: - mov r0, #1 - bl PlaySeVolumeWrapper - mov r0, #3 - str r0, [r5, #0x11c] - mov r0, #1 - str r0, [r5, #0x124] - b _02047EE4 -_02047D0C: - add r0, r5, #0x1f00 - ldrsh r3, [r0, #0x72] - ldrsh ip, [r0, #0x70] - cmp ip, r3 - ble _02047E9C - ldrh r0, [sp] - tst r0, #0x40 - bne _02047D34 - tst r4, #0x40000 - beq _02047D7C -_02047D34: - add r0, r5, #0x1f00 - ldrsh r1, [r0, #0x74] - sub r1, r1, #1 - strh r1, [r0, #0x74] - ldrsh r1, [r0, #0x74] - cmp r1, #0 - bge _02047D6C - mov r1, #0 - strh r1, [r0, #0x74] - add r0, r5, #0x100 - ldrsb r0, [r0, #0x20] - mov r1, #0x20000000 - bl sub_02030A74 - b _02047D74 -_02047D6C: - mov r0, #3 - bl PlaySeVolumeWrapper -_02047D74: - mov r6, #1 - b _02047DC4 -_02047D7C: - tst r0, #0x80 - bne _02047D8C - tst r4, #0x80000 - beq _02047DC4 -_02047D8C: - add r1, r5, #0x1f00 - ldrsh r2, [r1, #0x74] - sub r0, ip, r3 - mov r0, r0, lsl #0x10 - add r2, r2, #1 - strh r2, [r1, #0x74] - ldrsh r2, [r1, #0x74] - mov r3, r0, asr #0x10 - cmp r2, r0, asr #16 - strgth r3, [r1, #0x74] - bgt _02047DC0 - mov r0, #3 - bl PlaySeVolumeWrapper -_02047DC0: - mov r6, #1 -_02047DC4: - add r0, r5, #0x1f00 - ldrsh r2, [r0, #0x74] - cmp r2, #1 - blt _02047E0C - ldrsh r1, [r0, #0x70] - ldrsh r0, [r0, #0x72] - sub r0, r1, r0 - cmp r2, r0 - bge _02047E0C - add r0, r5, #0x100 - ldrsb r0, [r0, #0x20] - mov r1, #0x20000000 - bl sub_02030A90 - add r0, r5, #0x100 - ldrsb r0, [r0, #0x20] - mov r1, #0x40000000 - bl sub_02030A90 - b _02047E70 -_02047E0C: - cmp r2, #0 - bne _02047E38 - add r0, r5, #0x100 - ldrsb r0, [r0, #0x20] - mov r1, #0x20000000 - bl sub_02030A74 - add r0, r5, #0x100 - ldrsb r0, [r0, #0x20] - mov r1, #0x40000000 - bl sub_02030A90 - b _02047E70 -_02047E38: - add r0, r5, #0x1f00 - ldrsh r1, [r0, #0x70] - ldrsh r0, [r0, #0x72] - sub r0, r1, r0 - cmp r2, r0 - bne _02047E70 - add r0, r5, #0x100 - ldrsb r0, [r0, #0x20] - mov r1, #0x20000000 - bl sub_02030A90 - add r0, r5, #0x100 - ldrsb r0, [r0, #0x20] - mov r1, #0x40000000 - bl sub_02030A74 -_02047E70: - ldrb r0, [r5, #0x129] - cmp r0, #0 - bne _02047E9C - cmp r6, #0 - beq _02047E9C - add r0, r5, #0x1f00 - ldrsh r2, [r0, #0x74] - add r1, r5, #0x100 - strh r2, [r0, #0x7e] - ldrsb r0, [r1, #0x20] - bl SetAdvancedTextBoxField0x1C2 -_02047E9C: - cmp r8, #0 - bne _02047EAC - cmp r7, #0x10 - bne _02047EE4 -_02047EAC: - mov r1, #3 - mov r0, #1 - str r1, [r5, #0x11c] - bl PlaySeVolumeWrapper - b _02047EE4 -_02047EC0: - mov r0, #4 - str r0, [r5, #0x11c] - b _02047EE4 -_02047ECC: - mov r1, r6 - mov r0, r5 - str r1, [r5, #0x11c] - bl sub_0202613C - mov r0, #1 - b _02047EE8 -_02047EE4: - mov r0, #0 -_02047EE8: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02047EF0: .word _020AFEEC - arm_func_end sub_02047C40 - - arm_func_start sub_02047EF4 -sub_02047EF4: ; 0x02047EF4 - stmdb sp!, {r4, lr} - ldr r1, _02047F34 ; =_020AFEEC - mov r4, r0 - ldr r0, [r1, r4, lsl #2] - cmp r0, #0 - ldmeqia sp!, {r4, pc} - add r0, r0, #0x100 - ldrsb r0, [r0, #0x20] - bl CloseAdvancedTextBox2 - ldr r0, _02047F34 ; =_020AFEEC - ldr r0, [r0, r4, lsl #2] - bl MemFree - ldr r0, _02047F34 ; =_020AFEEC - mov r1, #0 - str r1, [r0, r4, lsl #2] - ldmia sp!, {r4, pc} - .align 2, 0 -_02047F34: .word _020AFEEC - arm_func_end sub_02047EF4 - - arm_func_start sub_02047F38 -sub_02047F38: ; 0x02047F38 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sb, r1 - mov sl, r0 - ldr r6, [sp, #0x28] - mov r0, sb - mov r1, #0x3c - mov r8, r2 - mov r7, r3 - bl _s32_div_f - mov r1, r1, lsl #0x10 - mov r2, #0 - mov r0, r6 - strh r2, [r8] - mov sb, r1, asr #0x10 - bl sub_0204793C - mov r5, #0 - mov fp, #0x3c - mov r4, #0xd4 -_02047F80: - smulbb r1, sb, r4 - ldrb r0, [sl, r1] - add r2, sl, r1 - cmp r0, #0 - beq _02047FB4 - ldrb r1, [r2, #1] - mov r3, r6 - add r0, r2, #3 - add r2, r2, #0x84 - bl sub_02047A10 - ldrsh r0, [r8] - add r0, r0, #1 - strh r0, [r8] -_02047FB4: - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov r1, fp - mov r0, r0, asr #0x10 - bl _s32_div_f - add r0, r5, #1 - mov r2, r0, lsl #0x10 - mov r0, r1, lsl #0x10 - mov r5, r2, asr #0x10 - cmp r5, #0x3c - mov sb, r0, asr #0x10 - blt _02047F80 - ldrsh r0, [r8] - cmp r0, r7 - mov r0, r6 - strlth r7, [r8] - bl sub_02047960 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end sub_02047F38 - - arm_func_start sub_02047FFC -sub_02047FFC: ; 0x02047FFC - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #0x39c0 - mov r1, #0 - bl MemAlloc - ldr r2, _02048048 ; =_020AFEF4 - mov r1, #0x39c0 - str r0, [r2] - bl MemZero - ldr r1, _02048048 ; =_020AFEF4 - mov r2, #1 - ldr r0, [r1] - add r0, r0, #0x3000 - str r4, [r0, #0x1bc] - ldr r0, [r1] - add r0, r0, #0x3000 - strb r2, [r0, #0x1b3] - bl sub_020480CC - ldmia sp!, {r4, pc} - .align 2, 0 -_02048048: .word _020AFEF4 - arm_func_end sub_02047FFC - - arm_func_start sub_0204804C -sub_0204804C: ; 0x0204804C - stmdb sp!, {r3, lr} - ldr r0, _02048074 ; =_020AFEF4 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _02048074 ; =_020AFEF4 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02048074: .word _020AFEF4 - arm_func_end sub_0204804C - - arm_func_start sub_02048078 -sub_02048078: ; 0x02048078 - ldr r1, _0204809C ; =_020AFEF4 - ldr r1, [r1] - cmp r1, #0 - movne r2, #1 - moveq r2, #0 - tst r2, #0xff - addne r1, r1, #0x3000 - strneb r0, [r1, #0x1b3] - bx lr - .align 2, 0 -_0204809C: .word _020AFEF4 - arm_func_end sub_02048078 - - arm_func_start sub_020480A0 -sub_020480A0: ; 0x020480A0 - ldr r0, _020480C8 ; =_020AFEF4 - ldr r0, [r0] - cmp r0, #0 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - addne r0, r0, #0x3000 - ldrneb r0, [r0, #0x1b3] - moveq r0, #0 - bx lr - .align 2, 0 -_020480C8: .word _020AFEF4 - arm_func_end sub_020480A0 - - arm_func_start sub_020480CC -sub_020480CC: ; 0x020480CC - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r6, _02048130 ; =_020AFEF4 - mov r7, #0xd4 - ldr r0, [r6] - mov r4, #0 - add r0, r0, #0x3100 - strh r4, [r0, #0xb8] - ldr r0, [r6] - mov r1, #1 - add r0, r0, #0x3000 - strb r1, [r0, #0x1b0] - mov r5, r7 -_020480FC: - mul r8, r4, r5 - ldr r0, [r6] - mov r1, r7 - add r0, r0, r8 - bl MemZero - ldr r0, [r6] - add r0, r0, r8 - add r0, r0, #0x84 - bl InitPreprocessorArgs - add r4, r4, #1 - cmp r4, #0x3c - blt _020480FC - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02048130: .word _020AFEF4 - arm_func_end sub_020480CC - - arm_func_start sub_02048134 -sub_02048134: ; 0x02048134 - ldr r0, _0204814C ; =_020AFEF4 - mov r1, #1 - ldr r0, [r0] - add r0, r0, #0x3000 - strb r1, [r0, #0x1b0] - bx lr - .align 2, 0 -_0204814C: .word _020AFEF4 - arm_func_end sub_02048134 - - arm_func_start sub_02048150 -sub_02048150: ; 0x02048150 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl sub_020480A0 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - ldr r2, _0204823C ; =_020AFEF4 - mov r1, #0xd4 - ldr lr, [r2] - mov r3, #1 - add r0, lr, #0x3100 - ldrsh r0, [r0, #0xb8] - smulbb ip, r0, r1 - strb r3, [lr, ip] - ldr r0, [r2] - add r1, lr, ip - add r0, r0, ip - strb r5, [r0, #1] - ldr r0, [r2] - add r2, r1, #3 - add r0, r0, ip - strb r4, [r0, #2] - add r1, r1, #0x82 -_020481B0: - ldrb r0, [r6] - cmp r0, #0 - cmpne r0, #0xd - beq _020481D0 - cmp r2, r1 - strlob r0, [r2], #1 - add r6, r6, #1 - b _020481B0 -_020481D0: - mov r3, #0 - ldr r1, _0204823C ; =_020AFEF4 - strb r3, [r2] - ldr r0, [r1] - add r0, r0, #0x3100 - ldrsh r2, [r0, #0xb8] - add r2, r2, #1 - strh r2, [r0, #0xb8] - ldr r0, [r1] - mov r2, #1 - add r0, r0, #0x3100 - ldrsh r1, [r0, #0xb8] - cmp r1, #0x3c - ldr r1, _0204823C ; =_020AFEF4 - strgeh r3, [r0, #0xb8] - ldr r0, [r1] - add r0, r0, #0x3000 - strb r2, [r0, #0x1b0] - ldr r1, [r1] - add r0, r1, #0x3000 - ldrb r0, [r0, #0x1b2] - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - add r0, r1, #0x3100 - ldrsh r0, [r0, #0xb8] - bl sub_020476EC - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0204823C: .word _020AFEF4 - arm_func_end sub_02048150 - - arm_func_start sub_02048240 -sub_02048240: ; 0x02048240 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r2, _02048334 ; =_020AFEF4 - mov r1, r0 - ldr r0, [r2] - cmp r0, #0 - movne r2, #1 - moveq r2, #0 - tst r2, #0xff - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - add r0, r0, #0x31c0 - mov r8, #0 - bl strcpy - ldr r4, _02048334 ; =_020AFEF4 - mov r7, r8 - mov r6, #0x400 - mov fp, #0x440 - mov r5, r8 -_02048284: - ldr sb, [r4] - add r0, sb, r8 - add r0, r0, #0x3000 - ldrb r0, [r0, #0x1c0] - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - add r2, sb, #0x31c0 - mov r1, r6 - mov r3, fp - str r7, [sp] - add r0, sb, #0x35c0 - add r2, r2, r8 - bl PreprocessString - ldr r1, [r4] - add r8, r8, r0 - add r0, r1, r0 - add r0, r0, #0x3000 - strb r5, [r0, #0x5c0] - ldr sl, [r4] - add r0, sl, r8 - add r0, r0, #0x3000 - ldrb sb, [r0, #0x1c0] - cmp sb, #0 - beq _0204831C - add r0, sl, #0x31c0 - ldr r1, _02048338 ; =_0209CCE0 - mov r2, #3 - add r0, r0, r8 - bl strncmp - cmp r0, #0 - bne _02048310 - ldr r0, _02048338 ; =_0209CCE0 - bl strlen - add r8, r8, r0 - b _0204831C -_02048310: - cmp sb, #0xd - cmpne sb, #0xa - addeq r8, r8, #1 -_0204831C: - mov r1, #0 - mov r2, r1 - add r0, sl, #0x35c0 - bl sub_02048150 - b _02048284 -_02048330: - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02048334: .word _020AFEF4 -_02048338: .word _0209CCE0 - arm_func_end sub_02048240 - - arm_func_start sub_0204833C -sub_0204833C: ; 0x0204833C - ldr r0, _02048358 ; =_020AFEF4 - ldr ip, _0204835C ; =sub_020475B4 - ldr r0, [r0] - mov r1, #9 - add r2, r0, #0x3100 - ldrsh r2, [r2, #0xb8] - bx ip - .align 2, 0 -_02048358: .word _020AFEF4 -_0204835C: .word sub_020475B4 - arm_func_end sub_0204833C - - arm_func_start sub_02048360 -sub_02048360: ; 0x02048360 - stmdb sp!, {r3, lr} - bl sub_02047660 - cmp r0, #1 - moveq r0, #1 - ldmeqia sp!, {r3, pc} - cmp r0, #2 - moveq r0, #2 - movne r0, #0 - ldmia sp!, {r3, pc} - arm_func_end sub_02048360 - - arm_func_start sub_02048384 -sub_02048384: ; 0x02048384 - stmdb sp!, {r3, lr} - ldr r0, _020483B4 ; =_020AFEF4 - mov r1, #0xb - ldr r0, [r0] - bl sub_02047670 - cmp r0, #0 - ldrne r1, _020483B4 ; =_020AFEF4 - movne r2, #1 - ldrne r1, [r1] - addne r1, r1, #0x3000 - strneb r2, [r1, #0x1b2] - ldmia sp!, {r3, pc} - .align 2, 0 -_020483B4: .word _020AFEF4 - arm_func_end sub_02048384 - - arm_func_start sub_020483B8 -sub_020483B8: ; 0x020483B8 - ldr r0, _020483D0 ; =_020AFEF4 - ldr ip, _020483D4 ; =sub_020476EC - ldr r0, [r0] - add r0, r0, #0x3100 - ldrsh r0, [r0, #0xb8] - bx ip - .align 2, 0 -_020483D0: .word _020AFEF4 -_020483D4: .word sub_020476EC - arm_func_end sub_020483B8 - - arm_func_start sub_020483D8 -sub_020483D8: ; 0x020483D8 - stmdb sp!, {r3, lr} - bl sub_0204771C - cmp r0, #0 - ldrne r1, _020483FC ; =_020AFEF4 - movne r2, #0 - ldrne r1, [r1] - addne r1, r1, #0x3000 - strneb r2, [r1, #0x1b2] - ldmia sp!, {r3, pc} - .align 2, 0 -_020483FC: .word _020AFEF4 - arm_func_end sub_020483D8 - - arm_func_start sub_02048400 -sub_02048400: ; 0x02048400 - ldr r0, _0204841C ; =_020AFEF4 - ldr r0, [r0] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_0204841C: .word _020AFEF4 - arm_func_end sub_02048400 - - arm_func_start sub_02048420 -sub_02048420: ; 0x02048420 - stmdb sp!, {r3, lr} - bl sub_0204B028 - bl sub_02048B74 - ldmia sp!, {r3, pc} - arm_func_end sub_02048420 - - arm_func_start sub_02048430 -sub_02048430: ; 0x02048430 - stmdb sp!, {r3, lr} - bl sub_0206637C - mov r0, #0 - bl sub_02048C0C - mvn r0, #0 - bl sub_02048C4C - bl sub_0204F9B8 - bl sub_02048B48 - ldmia sp!, {r3, pc} - arm_func_end sub_02048430 - - arm_func_start sub_02048454 -sub_02048454: ; 0x02048454 - stmdb sp!, {r3, lr} - bl ClearAdventureLogStruct - bl sub_0206637C - mov r0, #0 - bl sub_02048C0C - mvn r0, #0 - bl sub_02048C4C - bl sub_0204F9B8 - bl sub_02048B48 - bl sub_02048C5C - ldmia sp!, {r3, pc} - arm_func_end sub_02048454 - - arm_func_start sub_02048480 -sub_02048480: ; 0x02048480 - stmdb sp!, {r3, lr} - bl sub_02048C3C - mvn r1, #0 - cmp r0, r1 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end sub_02048480 - - arm_func_start GetNotifyNote -GetNotifyNote: ; 0x020484A0 - ldr r0, _020484AC ; =NOTIFY_NOTE - ldrb r0, [r0] - bx lr - .align 2, 0 -_020484AC: .word NOTIFY_NOTE - arm_func_end GetNotifyNote - - arm_func_start SetNotifyNote -SetNotifyNote: ; 0x020484B0 - ldr r1, _020484BC ; =NOTIFY_NOTE - strb r0, [r1] - bx lr - .align 2, 0 -_020484BC: .word NOTIFY_NOTE - arm_func_end SetNotifyNote - - arm_func_start sub_020484C0 -sub_020484C0: ; 0x020484C0 - stmdb sp!, {r3, lr} - bl sub_0206637C - mov r0, #0 - bl sub_02048C0C - mvn r0, #0 - bl sub_02048C4C - bl sub_0204F9B8 - bl sub_02048B48 - bl sub_02048C5C - ldmia sp!, {r3, pc} - arm_func_end sub_020484C0 - - arm_func_start InitSpecialEpisodeHero -InitSpecialEpisodeHero: ; 0x020484E8 - stmdb sp!, {r4, lr} - bl GetSpecialEpisodeType - mov r4, r0 - bl sub_02052CD8 - bl sub_0200CAD4 - bl sub_0204CDB8 - mov r0, r4 - mov r1, #1 - bl sub_0204C9F4 - cmp r4, #4 - addls pc, pc, r4, lsl #2 - b _02048578 -_02048518: ; jump table - b _0204852C ; case 0 - b _0204853C ; case 1 - b _0204854C ; case 2 - b _0204855C ; case 3 - b _0204856C ; case 4 -_0204852C: - ldr r1, _020485AC ; =_020A2830 - mov r0, #2 - bl sub_02048AC4 - b _02048578 -_0204853C: - ldr r1, _020485B0 ; =_020A2808 - mov r0, #2 - bl sub_02048AC4 - b _02048578 -_0204854C: - ldr r1, _020485B4 ; =_020A2844 - mov r0, #2 - bl sub_02048AC4 - b _02048578 -_0204855C: - ldr r1, _020485B8 ; =_020A2880 - mov r0, #2 - bl sub_02048AC4 - b _02048578 -_0204856C: - ldr r1, _020485BC ; =_020A2894 - mov r0, #2 - bl sub_02048AC4 -_02048578: - mov r0, #2 - bl GetTeamMember - mov r4, r0 - mov r0, #2 - bl GetTeamMember - ldr r1, _020485C0 ; =FORBIDDEN_FORGOT_MOVE_LIST - bl sub_02053628 - mov r1, r0 - mov r0, r4 - mov r2, #1 - bl sub_02053660 - bl SetTeamSetupHeroAndPartnerOnly - ldmia sp!, {r4, pc} - .align 2, 0 -_020485AC: .word _020A2830 -_020485B0: .word _020A2808 -_020485B4: .word _020A2844 -_020485B8: .word _020A2880 -_020485BC: .word _020A2894 -_020485C0: .word FORBIDDEN_FORGOT_MOVE_LIST - arm_func_end InitSpecialEpisodeHero - - arm_func_start sub_020485C4 -sub_020485C4: ; 0x020485C4 - stmdb sp!, {r3, lr} - bl sub_02052CE8 - bl sub_0200CAE4 - bl sub_02056B58 - ldmia sp!, {r3, pc} - arm_func_end sub_020485C4 - - arm_func_start sub_020485D8 -sub_020485D8: ; 0x020485D8 - stmdb sp!, {r3, lr} - bl sub_02052CE8 - bl sub_0200CAE4 - bl sub_02056BD4 - ldmia sp!, {r3, pc} - arm_func_end sub_020485D8 - - arm_func_start sub_020485EC -sub_020485EC: ; 0x020485EC - stmdb sp!, {r3, lr} - bl sub_0206637C - mov r0, #0 - bl sub_02048C0C - mvn r0, #0 - bl sub_02048C4C - bl sub_0204F9B8 - bl sub_02048B48 - bl sub_02048C5C - ldmia sp!, {r3, pc} - arm_func_end sub_020485EC - - arm_func_start sub_02048614 -sub_02048614: ; 0x02048614 - stmdb sp!, {r3, lr} - bl sub_02048B48 - bl InitMainTeamAfterQuiz - ldmia sp!, {r3, pc} - arm_func_end sub_02048614 - - arm_func_start sub_02048624 -sub_02048624: ; 0x02048624 - stmdb sp!, {r3, lr} - mov r0, #0 - bl SetActiveInventory - mov r0, #0 - bl SetActiveKecleonShop - mov r0, #0 - bl SetActiveTeam - ldmia sp!, {r3, pc} - arm_func_end sub_02048624 - - arm_func_start sub_02048644 -sub_02048644: ; 0x02048644 - stmdb sp!, {r4, lr} - bl GetGameMode - mov r4, r0 - bl EventFlagResume - cmp r4, #4 - bne _02048678 - mov r0, #2 - bl SetActiveInventory - mov r0, #0 - bl SetActiveKecleonShop - mov r0, #2 - bl SetActiveTeam - b _020486D8 -_02048678: - cmp r4, #5 - bne _0204869C - mov r0, #2 - bl SetActiveInventory - mov r0, #0 - bl SetActiveKecleonShop - mov r0, #2 - bl SetActiveTeam - b _020486D8 -_0204869C: - cmp r4, #3 - bne _020486C0 - mov r0, #1 - bl SetActiveInventory - mov r0, #1 - bl SetActiveKecleonShop - mov r0, #1 - bl SetActiveTeam - b _020486D8 -_020486C0: - mov r0, #0 - bl SetActiveInventory - mov r0, #0 - bl SetActiveKecleonShop - mov r0, #0 - bl SetActiveTeam -_020486D8: - cmp r4, #3 - bne _020486EC - mov r0, #2 - bl SetBothScreensWindowsColor - ldmia sp!, {r4, pc} -_020486EC: - bl GetHeroMemberIdx - mvn r1, #0 - cmp r0, r1 - beq _02048720 - mov r0, #0 - mov r1, #0x42 - bl LoadScriptVariableValue - cmp r0, #5 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bl SetBothScreensWindowsColor - ldmia sp!, {r4, pc} -_02048720: - mov r0, #2 - bl SetBothScreensWindowsColor - ldmia sp!, {r4, pc} - arm_func_end sub_02048644 - - arm_func_start sub_0204872C -sub_0204872C: ; 0x0204872C - stmdb sp!, {r3, lr} - bl EventFlagBackup - mov r0, #2 - bl SetBothScreensWindowsColor - mov r0, #0 - bl SetActiveInventory - mov r0, #0 - bl SetActiveKecleonShop - mov r0, #0 - bl SetActiveTeam - ldmia sp!, {r3, pc} - arm_func_end sub_0204872C - - arm_func_start EventFlagBackupVeneer -EventFlagBackupVeneer: ; 0x02048758 - ldr ip, _02048760 ; =EventFlagBackup - bx ip - .align 2, 0 -_02048760: .word EventFlagBackup - arm_func_end EventFlagBackupVeneer - - arm_func_start sub_02048764 -sub_02048764: ; 0x02048764 - stmdb sp!, {r4, lr} - ldr lr, _02048790 ; =DEFAULT_HERO_ID - mov r4, r0 - mov ip, #3 -_02048774: - ldmia lr!, {r0, r1, r2, r3} - stmia r4!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _02048774 - ldmia lr, {r0, r1, r2} - stmia r4, {r0, r1, r2} - ldmia sp!, {r4, pc} - .align 2, 0 -_02048790: .word DEFAULT_HERO_ID - arm_func_end sub_02048764 - - arm_func_start sub_02048794 -sub_02048794: ; 0x02048794 - stmdb sp!, {r4, lr} - ldr lr, _020487C0 ; =DEFAULT_HERO_ID - mov r4, r0 - mov ip, #3 -_020487A4: - ldmia r4!, {r0, r1, r2, r3} - stmia lr!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _020487A4 - ldmia r4, {r0, r1, r2} - stmia lr, {r0, r1, r2} - ldmia sp!, {r4, pc} - .align 2, 0 -_020487C0: .word DEFAULT_HERO_ID - arm_func_end sub_02048794 - - arm_func_start InitMainTeamAfterQuiz -InitMainTeamAfterQuiz: ; 0x020487C4 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #0x14 - ldr r0, _020489F4 ; =NOTIFY_NOTE - mov r4, #0 - ldrb r0, [r0, #8] - cmp r0, #0 - bne _020487FC - ldr r1, _020489F8 ; =0x00000232 - add r0, sp, #0 - bl GetStringFromFileVeneer - ldr r0, _020489FC ; =_020AFF00 - add r1, sp, #0 - mov r2, #0xa - bl StrncpyName -_020487FC: - ldr r0, _020489F4 ; =NOTIFY_NOTE - ldrb r0, [r0, #0x1c] - cmp r0, #0 - bne _02048828 - ldr r1, _02048A00 ; =0x00000233 - add r0, sp, #0 - bl GetStringFromFileVeneer - ldr r0, _02048A04 ; =_020AFF14 - add r1, sp, #0 - mov r2, #0xa - bl StrncpyName -_02048828: - bl GetHeroMemberIdx - mvn r1, #0 - cmp r0, r1 - bne _02048898 - ldr r0, _020489F4 ; =NOTIFY_NOTE - ldr r3, _020489FC ; =_020AFF00 - ldrsh r1, [r0, #4] - mov r0, #0 - mov r2, #0xd6 - bl sub_02055B78 - bl GetHero - ldr r1, _020489F4 ; =NOTIFY_NOTE - mov r4, r0 - ldrsh r2, [r1, #4] - mov r0, #0 - mov r1, #0x3e - bl SaveScriptVariableValue - add r1, r4, #0x3a - mov r0, #0x3f - mov r2, #0xa - bl SaveScriptVariableValueBytes - mov r0, r4 - mov r1, #5 - mov r2, #0 - bl ApplyLevelUpBoostsToGroundMonster - mov r0, r4 - bl sub_02053568 - mov r4, #1 -_02048898: - bl GetPartnerMemberIdx - mvn r1, #0 - cmp r0, r1 - bne _02048908 - ldr r0, _020489F4 ; =NOTIFY_NOTE - ldr r3, _02048A04 ; =_020AFF14 - ldrsh r1, [r0, #6] - mov r0, #1 - mov r2, #0xd7 - bl sub_02055B78 - bl GetPartner - ldr r1, _020489F4 ; =NOTIFY_NOTE - mov r4, r0 - ldrsh r2, [r1, #6] - mov r0, #0 - mov r1, #0x40 - bl SaveScriptVariableValue - add r1, r4, #0x3a - mov r0, #0x41 - mov r2, #0xa - bl SaveScriptVariableValueBytes - mov r0, r4 - mov r1, #5 - mov r2, #0 - bl ApplyLevelUpBoostsToGroundMonster - mov r0, r4 - bl sub_02053568 - mov r4, #1 -_02048908: - cmp r4, #0 - beq _02048914 - bl SetTeamSetupHeroAndPartnerOnly -_02048914: - ldr r0, _020489F4 ; =NOTIFY_NOTE - ldrsh r0, [r0, #4] - cmp r0, #0 - beq _02048940 - bl GetMonsterGenderVeneer - cmp r0, #2 - moveq r2, #5 - movne r2, #4 - mov r0, #0 - mov r1, #0x42 - bl SaveScriptVariableValue -_02048940: - ldr r0, _020489F4 ; =NOTIFY_NOTE - ldrsh r1, [r0, #6] - cmp r1, #0 - beq _02048980 - ldr r0, _02048A08 ; =PARTNER_TALK_KIND_TABLE - b _02048964 -_02048958: - cmp r1, r2 - beq _02048970 - add r0, r0, #8 -_02048964: - ldrsh r2, [r0, #4] - cmp r2, #0 - bne _02048958 -_02048970: - ldr r2, [r0] - mov r0, #0 - mov r1, #0x43 - bl SaveScriptVariableValue -_02048980: - ldr r1, _020489F4 ; =NOTIFY_NOTE - mov r0, #0 - ldr r2, [r1, #0x30] - mov r1, #0x45 - bl SaveScriptVariableValue - mov r0, #1 - bl sub_02048C0C - bl sub_02048C3C - mvn r1, #0 - cmp r0, r1 - bne _020489B4 - bl Rand32Bit - bl sub_02048C4C -_020489B4: - bl GetGameMode - cmp r0, #1 - bhi _020489CC - mov r0, #2 - bl SetBothScreensWindowsColor - b _020489EC -_020489CC: - mov r0, #0 - mov r1, #0x42 - bl LoadScriptVariableValue - cmp r0, #5 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bl SetBothScreensWindowsColor -_020489EC: - add sp, sp, #0x14 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_020489F4: .word NOTIFY_NOTE -#ifdef JAPAN -_020489F8: .word 0x000004C3 -_020489FC: .word _020AFF00 -_02048A00: .word 0x000004C4 -#else -_020489F8: .word 0x00000232 -_020489FC: .word _020AFF00 -_02048A00: .word 0x00000233 -#endif -_02048A04: .word _020AFF14 -_02048A08: .word PARTNER_TALK_KIND_TABLE - arm_func_end InitMainTeamAfterQuiz - - arm_func_start InitSpecialEpisodePartners -InitSpecialEpisodePartners: ; 0x02048A0C - stmdb sp!, {r3, lr} - bl GetExecuteSpecialEpisodeType - cmp r0, #4 - addls pc, pc, r0, lsl #2 - b _02048A6C -_02048A20: ; jump table - b _02048A6C ; case 0 - b _02048A34 ; case 1 - b _02048A6C ; case 2 - b _02048A44 ; case 3 - b _02048A60 ; case 4 -_02048A34: - ldr r1, _02048A74 ; =_020A28A8 - mov r0, #3 - bl sub_02048AC4 - b _02048A6C -_02048A44: - ldr r1, _02048A78 ; =_020A2858 - mov r0, #3 - bl sub_02048AC4 - ldr r1, _02048A7C ; =_020A281C - mov r0, #4 - bl sub_02048AC4 - b _02048A6C -_02048A60: - ldr r1, _02048A80 ; =_020A286C - mov r0, #3 - bl sub_02048AC4 -_02048A6C: - bl SetTeamSetupHeroAndPartnerOnly - ldmia sp!, {r3, pc} - .align 2, 0 -_02048A74: .word _020A28A8 -_02048A78: .word _020A2858 -_02048A7C: .word _020A281C -_02048A80: .word _020A286C - arm_func_end InitSpecialEpisodePartners - - arm_func_start InitSpecialEpisodeExtraPartner -InitSpecialEpisodeExtraPartner: ; 0x02048A84 - stmdb sp!, {r3, lr} - bl GetExecuteSpecialEpisodeType - cmp r0, #4 - addls pc, pc, r0, lsl #2 - b _02048AB8 -_02048A98: ; jump table - b _02048AB8 ; case 0 - b _02048AB8 ; case 1 - b _02048AB8 ; case 2 - b _02048AB8 ; case 3 - b _02048AAC ; case 4 -_02048AAC: - ldr r1, _02048AC0 ; =SPECIAL_EPISODE_MAIN_CHARACTERS - mov r0, #4 - bl sub_02048AC4 -_02048AB8: - bl SetTeamSetupHeroAndPartnerOnly - ldmia sp!, {r3, pc} - .align 2, 0 -_02048AC0: .word SPECIAL_EPISODE_MAIN_CHARACTERS - arm_func_end InitSpecialEpisodeExtraPartner - - arm_func_start sub_02048AC4 -sub_02048AC4: ; 0x02048AC4 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - ldrsh r1, [r5] - ldrb r2, [r5, #2] - mov r4, r0 - mov r3, #0 - bl sub_02055B78 - mov r0, r4 - bl GetTeamMember - ldrsh r1, [r5, #0xe] - ldrb r2, [r5, #0xc] - mov r4, r0 - bl ApplyLevelUpBoostsToGroundMonster - ldrsh r0, [r5, #0x12] - cmp r0, #0 - strneh r0, [r4, #0xa] - ldrsh r2, [r5, #0x10] - add r0, r4, #0x14 - strh r2, [r4, #8] - ldrsh r1, [r4, #4] - bl EnableAllLearnableIqSkills - ldrh r0, [r5, #4] - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldrb r0, [r5, #0xc] - add r1, r5, #4 - cmp r0, #0 - add r0, r4, #0x22 - beq _02048B40 - bl LearnMoves - ldmia sp!, {r3, r4, r5, pc} -_02048B40: - bl GetInfoGroundMoveset - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02048AC4 - - arm_func_start sub_02048B48 -sub_02048B48: ; 0x02048B48 - stmdb sp!, {r3, lr} - bl sub_0204AB24 - bl InitScriptVariableValues - bl sub_02052C74 - bl sub_0200CABC - bl StoreDefaultTeamData - bl ResetGlobalProgress - bl sub_0205B478 - bl sub_0205C75C - bl sub_02012AB8 - ldmia sp!, {r3, pc} - arm_func_end sub_02048B48 - - arm_func_start sub_02048B74 -sub_02048B74: ; 0x02048B74 - stmdb sp!, {r3, lr} - ldr r1, _02048BA8 ; =_020AFF38 - ldr r0, _02048BAC ; =_0209CD4C - ldr r1, [r1, #4] - mov r2, #0 - bl Debug_Print0 - mov r3, #0 - ldr r1, _02048BA8 ; =_020AFF38 - ldr r0, _02048BB0 ; =_022AAE70 - sub r2, r3, #1 - str r3, [r1, #4] - str r2, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02048BA8: .word _020AFF38 -_02048BAC: .word _0209CD4C -_02048BB0: .word _022AAE70 - arm_func_end sub_02048B74 - - arm_func_start ReadStringSave -ReadStringSave: ; 0x02048BB4 - ldr r1, _02048BC8 ; =_020AFF38 - ldr ip, _02048BCC ; =strncpy - mov r2, #0x20 - ldr r1, [r1] - bx ip - .align 2, 0 -_02048BC8: .word _020AFF38 -_02048BCC: .word strncpy - arm_func_end ReadStringSave - - arm_func_start CheckStringSave -CheckStringSave: ; 0x02048BD0 - stmdb sp!, {r3, lr} - ldr r1, _02048BF8 ; =_020AFF38 - mov r2, #0x20 - ldr r1, [r1] - bl strncmp - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - .align 2, 0 -_02048BF8: .word _020AFF38 - arm_func_end CheckStringSave - - arm_func_start sub_02048BFC -sub_02048BFC: ; 0x02048BFC - ldr r0, _02048C08 ; =_020AFF38 - ldr r0, [r0, #4] - bx lr - .align 2, 0 -_02048C08: .word _020AFF38 - arm_func_end sub_02048BFC - - arm_func_start sub_02048C0C -sub_02048C0C: ; 0x02048C0C - stmdb sp!, {r4, lr} - ldr r1, _02048C34 ; =_020AFF38 - mov r4, r0 - ldr r1, [r1, #4] - ldr r0, _02048C38 ; =_0209CD4C - mov r2, r4 - bl Debug_Print0 - ldr r0, _02048C34 ; =_020AFF38 - str r4, [r0, #4] - ldmia sp!, {r4, pc} - .align 2, 0 -_02048C34: .word _020AFF38 -_02048C38: .word _0209CD4C - arm_func_end sub_02048C0C - - arm_func_start sub_02048C3C -sub_02048C3C: ; 0x02048C3C - ldr r0, _02048C48 ; =_022AAE70 - ldr r0, [r0] - bx lr - .align 2, 0 -_02048C48: .word _022AAE70 - arm_func_end sub_02048C3C - - arm_func_start sub_02048C4C -sub_02048C4C: ; 0x02048C4C - ldr r1, _02048C58 ; =_022AAE70 - str r0, [r1] - bx lr - .align 2, 0 -_02048C58: .word _022AAE70 - arm_func_end sub_02048C4C - - arm_func_start sub_02048C5C -sub_02048C5C: ; 0x02048C5C - stmdb sp!, {r3, lr} - ldr r0, _02048CA4 ; =_022AAE74 - mov r1, #0 - mov r2, #0x30 - bl MemsetSimple - ldr r2, _02048CA8 ; =0x09011416 - ldr r1, _02048CAC ; =_022AAE74 - ldr r0, _02048CB0 ; =_022AAE78 - str r2, [r1, #0x24] - bl ReadStringSave - ldr r2, _02048CB4 ; =0x000F1206 - ldr r0, _02048CAC ; =_022AAE74 - mov r1, #0xff - str r2, [r0, #0x28] - strb r1, [r0, #0x2c] - mov r1, #0 - strb r1, [r0, #0x2d] - ldmia sp!, {r3, pc} - .align 2, 0 -_02048CA4: .word _022AAE74 -_02048CA8: .word 0x09011416 -_02048CAC: .word _022AAE74 -_02048CB0: .word _022AAE78 -_02048CB4: .word 0x000F1206 - arm_func_end sub_02048C5C - - arm_func_start sub_02048CB8 -sub_02048CB8: ; 0x02048CB8 - stmdb sp!, {r3, lr} - mov r0, #9 - bl Debug_GetDebugFlag - cmp r0, #0 - beq _02048CE4 - ldr r1, _02048CF0 ; =_022AAE74 - ldr r0, _02048CF4 ; =0x000F1208 - ldr r1, [r1, #0x28] - cmp r1, r0 - subeq r0, r0, #1 - ldmeqia sp!, {r3, pc} -_02048CE4: - ldr r0, _02048CF0 ; =_022AAE74 - ldr r0, [r0, #0x28] - ldmia sp!, {r3, pc} - .align 2, 0 -_02048CF0: .word _022AAE74 -_02048CF4: .word 0x000F1208 - arm_func_end sub_02048CB8 - - arm_func_start sub_02048CF8 -sub_02048CF8: ; 0x02048CF8 - stmdb sp!, {r3, r4, r5, lr} - mov r0, #0x100 - mov r1, #5 - bl MemAlloc - mov r4, r0 - ldr r3, _02048DB0 ; =0x000001EA - add r0, sp, #0 - mov r1, r4 - mov r2, #0x100 - str r3, [sp] - bl ReadSaveFile - movs r5, r0 - cmpne r5, #2 - bne _02048D54 - add r0, r4, #4 - bl CheckStringSave - cmp r0, #0 - moveq r5, #5 - beq _02048D54 - ldr r1, [r4, #0x24] - ldr r0, _02048DB4 ; =0x09011416 - cmp r1, r0 - movne r5, #4 -_02048D54: - bl sub_02048C5C - cmp r5, #0 - bne _02048D80 - ldr r1, [r4, #0x28] - ldr r0, _02048DB8 ; =_022AAE74 - str r1, [r0, #0x28] - ldrb r1, [r4, #0x2c] - strb r1, [r0, #0x2c] - ldrb r1, [r4, #0x2d] - strb r1, [r0, #0x2d] - b _02048DA0 -_02048D80: - sub r0, r5, #4 - cmp r0, #1 - ldrls r1, _02048DBC ; =0x000F1206 - ldrls r0, _02048DB8 ; =_022AAE74 - strls r1, [r0, #0x28] - ldrhi r1, _02048DC0 ; =0x000F1209 - ldrhi r0, _02048DB8 ; =_022AAE74 - strhi r1, [r0, #0x28] -_02048DA0: - mov r0, r4 - bl MemFree - bl sub_02048CB8 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02048DB0: .word 0x000001EA -_02048DB4: .word 0x09011416 -_02048DB8: .word _022AAE74 -_02048DBC: .word 0x000F1206 -_02048DC0: .word 0x000F1209 - arm_func_end sub_02048CF8 - - arm_func_start sub_02048DC4 -sub_02048DC4: ; 0x02048DC4 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r6, r0 - mov r0, #0x100 - mov r1, #5 - bl MemAlloc - mov r4, r0 - bl sub_02048C5C - ldr r5, _02048E68 ; =_022AAE74 - mov lr, r4 - mov ip, #3 -_02048DF0: - ldmia r5!, {r0, r1, r2, r3} - stmia lr!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _02048DF0 - str r6, [r4, #0x28] - bl GetAdventureLogDungeonFloor - ldrb r2, [r0] - ldr r3, _02048E6C ; =0x000001EA - mov r1, r4 - strb r2, [r4, #0x2c] - ldrb ip, [r0, #1] - add r0, sp, #0 - mov r2, #0x100 - strb ip, [r4, #0x2d] - str r3, [sp] - bl WriteSaveFile - movs r5, r0 - bne _02048E54 - ldr r1, [r4, #0x28] - ldr r0, _02048E70 ; =_022AAE74 - str r1, [r0, #0x28] - ldrb r1, [r4, #0x2c] - strb r1, [r0, #0x2c] - ldrb r1, [r4, #0x2d] - strb r1, [r0, #0x2d] -_02048E54: - mov r0, r4 - bl MemFree - mov r0, r5 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02048E68: .word _022AAE74 -_02048E6C: .word 0x000001EA -_02048E70: .word _022AAE74 - arm_func_end sub_02048DC4 - - arm_func_start WriteSaveFile -WriteSaveFile: ; 0x02048E74 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r2 - add r3, r5, #0xff - mov r2, r3, asr #7 - ldr r4, [r0] - add r2, r3, r2, lsr #24 - mov r6, r1 - add r1, r4, r2, asr #8 - str r1, [r0] - mov r0, r6 - mov r1, r5 - bl CalcChecksum - mov r0, r4 - mov r1, r6 - mov r2, r5 - bl sub_0204A9C8 - cmp r0, #4 - moveq r0, #1 - ldmeqia sp!, {r4, r5, r6, pc} - cmp r0, #0 - movne r0, #2 - moveq r0, #0 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end WriteSaveFile - - arm_func_start ReadSaveFile -ReadSaveFile: ; 0x02048ED0 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r2 - add ip, r4, #0xff - mov r3, ip, asr #7 - ldr lr, [r0] - add r3, ip, r3, lsr #24 - add r3, lr, r3, asr #8 - str r3, [r0] - mov r0, lr - mov r5, r1 - bl sub_0204A8E0 - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl CheckChecksumInvalid - cmp r0, #0 - movne r0, #2 - moveq r0, #0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ReadSaveFile - - arm_func_start CalcChecksum -CalcChecksum: ; 0x02048F24 - mov r3, #0 - mov ip, #1 - b _02048F3C -_02048F30: - ldr r2, [r0, ip, lsl #2] - add ip, ip, #1 - add r3, r3, r2 -_02048F3C: - cmp ip, r1, lsr #2 - blt _02048F30 - str r3, [r0] - bx lr - arm_func_end CalcChecksum - - arm_func_start CheckChecksumInvalid -CheckChecksumInvalid: ; 0x02048F4C - mov r3, #0 - mov ip, #1 - b _02048F64 -_02048F58: - ldr r2, [r0, ip, lsl #2] - add ip, ip, #1 - add r3, r3, r2 -_02048F64: - cmp ip, r1, lsr #2 - blt _02048F58 - ldr r0, [r0] - cmp r0, r3 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end CheckChecksumInvalid - - arm_func_start NoteSaveBase -NoteSaveBase: ; 0x02048F84 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov sb, r0 - ldr r0, _02049218 ; =0x0000B65C - mov r1, #5 - bl MemAlloc - mov r4, r0 - add r0, r4, #0x64 - add r5, r0, #0x400 - bl sub_02048BFC - mov r2, r0 - ldr r0, _0204921C ; =_0209CD6C - mov r1, sb - bl Debug_Print0 - mov r0, #0 - bl SetNotifyNote - bl GetTime - mov r7, r0 - bl EventFlagBackupVeneer - cmp sb, #3 - bne _02048FE0 - bl sub_02048BFC - mov sb, r0 - b _02048FE8 -_02048FE0: - mov r0, sb - bl sub_02048C0C -_02048FE8: - str sb, [r4, #0x2c] - bl sub_02048C3C - str r0, [r4, #0x28] - bl GetRngSeed - str r0, [r4, #0x30] - cmp sb, #0 - mvneq r0, #0 - beq _0204900C - bl GetLanguageType -_0204900C: - ldr r1, _02049220 ; =0x09011416 - strb r0, [r4, #0x34] - add r0, r4, #4 - str r1, [r4, #0x24] - bl ReadStringSave - add r0, r4, #0x38 - bl DumpScriptVariableValues - ldr r1, _02049224 ; =0x00007F6B - mov r0, r5 - bl WriteMonsterInfoToSave - str r0, [r4, #0x438] - add r0, r5, #0x6b - ldr r1, _02049228 ; =0x000005DC - add r0, r0, #0x7f00 - bl sub_020597B0 - str r0, [r4, #0x43c] - add r0, r5, #0x47 - ldr r1, _0204922C ; =0x000001F7 - add r0, r0, #0x8500 - bl CopyProgressInfoFromScratchTo - str r0, [r4, #0x440] - add r0, r5, #0x3e - ldr r1, _02049230 ; =0x00000DAC - add r0, r0, #0x8700 - bl WriteItemsToSave - str r0, [r4, #0x444] - add r0, r5, #0xea - add r0, r0, #0x9400 - mov r1, #0x10 - bl sub_02050CF8 - str r0, [r4, #0x448] - add r0, r5, #0xfa - add r0, r0, #0x9400 - mov r1, #0x340 - bl sub_0204E154 - str r0, [r4, #0x450] - add r0, r5, #0x3a - ldr r1, _02049234 ; =0x000015A0 - add r0, r0, #0x9800 - bl sub_0205BFB0 - str r0, [r4, #0x454] - add r0, r5, #0xda - ldr r1, _02049238 ; =0x00000237 - add r0, r0, #0xad00 - bl sub_0205FC20 - str r0, [r4, #0x458] - add r0, r5, #0x11 - add r0, r0, #0xb000 - mov r1, #0xb - bl sub_020131F0 - add r1, r5, #0x1c - str r0, [r4, #0x45c] - add r0, r1, #0xb000 -#ifdef JAPAN - mov r1, #0x18c -#else - mov r1, #0x1dc -#endif - bl sub_0204A3E4 - str r0, [r4, #0x460] - bl GetTime - mov r1, r7 - mov r7, r0 - bl _fsub - bl _f2d - mov r3, r0 - mov r2, r1 - ldr r0, _0204923C ; =_0209CD84 - mov r1, r3 - bl Debug_Print0 - cmp sb, #2 - moveq r5, #0 - beq _0204912C - ldr r0, _02049240 ; =0x000F1206 - bl sub_02048DC4 - mov r5, r0 -_0204912C: - cmp r5, #0 - bne _020491C4 - bl sub_02049350 - cmp r0, #1 - add r0, sp, #0 - ldr r2, _02049218 ; =0x0000B65C - bne _02049188 - mov r3, #0 - mov r1, r4 - str r3, [sp] - bl WriteSaveFile - movs r6, r0 - bne _02049168 - mov r0, #0 - bl sub_02049360 -_02049168: - ldr r2, _02049218 ; =0x0000B65C - mov r3, #0xc8 - add r0, sp, #0 - mov r1, r4 - str r3, [sp] - bl WriteSaveFile - mov r8, r0 - b _020491C4 -_02049188: - mov r3, #0xc8 - mov r1, r4 - str r3, [sp] - bl WriteSaveFile - movs r8, r0 - bne _020491A8 - mov r0, #1 - bl sub_02049360 -_020491A8: - ldr r2, _02049218 ; =0x0000B65C - mov r3, #0 - add r0, sp, #0 - mov r1, r4 - str r3, [sp] - bl WriteSaveFile - mov r6, r0 -_020491C4: - bl GetTime - mov r1, r7 - bl _fsub - bl _f2d - mov r3, r0 - mov r2, r1 - ldr r0, _02049244 ; =_0209CD94 - mov r1, r3 - bl Debug_Print0 - mov r0, r4 - bl MemFree - cmp r5, #0 - movne r0, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - cmp r6, #0 - movne r0, r6 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - cmp r8, #0 - moveq r8, #0 - mov r0, r8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -#ifdef JAPAN -_02049218: .word 0x0000B60C -#else -_02049218: .word 0x0000B65C -#endif -_0204921C: .word _0209CD6C -_02049220: .word 0x09011416 -_02049224: .word 0x00007F6B -_02049228: .word 0x000005DC -_0204922C: .word 0x000001F7 -_02049230: .word 0x00000DAC -_02049234: .word 0x000015A0 -_02049238: .word 0x00000237 -_0204923C: .word _0209CD84 -_02049240: .word 0x000F1206 -_02049244: .word _0209CD94 - arm_func_end NoteSaveBase - - arm_func_start WriteQuickSaveInfo -WriteQuickSaveInfo: ; 0x02049248 - stmdb sp!, {r3, lr} - mov ip, r0 - mov r2, r1 - mov r3, #0x190 - add r0, sp, #0 - mov r1, ip - str r3, [sp] - bl WriteSaveFile - ldmia sp!, {r3, pc} - arm_func_end WriteQuickSaveInfo - - arm_func_start ReadSaveHeader -ReadSaveHeader: ; 0x0204926C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r0, _0204932C ; =0x0000B65C - mov r1, #5 - bl MemAlloc - mov r4, r0 - ldr r3, _02049330 ; =_020AFF40 - mov r0, #0 - mov r1, r4 - mov r2, #0x38 - str r0, [r3] - bl sub_0204A8E0 - cmp r0, #0 - beq _020492B4 - mov r1, r4 - mov r0, #0xc8 - mov r2, #0x38 - bl sub_0204A8E0 -_020492B4: - cmp r0, #0 - ldrne r0, _02049330 ; =_020AFF40 - movne r1, #1 - strne r1, [r0, #4] - bne _02049310 - add r0, r4, #4 - bl CheckStringSave - cmp r0, #0 - ldreq r0, _02049330 ; =_020AFF40 - moveq r1, #5 - streq r1, [r0, #4] - beq _02049310 - ldr r1, [r4, #0x24] - ldr r0, _02049334 ; =0x09011416 - cmp r1, r0 - ldrne r0, _02049330 ; =_020AFF40 - movne r1, #4 - strne r1, [r0, #4] -#ifdef EUROPE - bne _02049310 - ldr r1, [r4, #0x2c] - ldr r0, _02049330 ; =_020AFF40 - mov r2, #0 - stmia r0, {r1, r2} - ldr r1, [r4, #0x28] - sub r0, r2, #1 - cmp r1, r0 - beq _02049310 - ldrsb r0, [r4, #0x34] - bl sub_020205C0 - bl sub_0202059C -#else - ldreq r2, [r4, #0x2c] - ldreq r0, _02049330 ; =_020AFF40 - moveq r1, #0 - streq r2, [r0] - streq r1, [r0, #4] -#endif -_02049310: - mov r0, r4 - bl MemFree - ldr r0, _02049330 ; =_020AFF40 - ldr r1, [r0] - str r1, [r5] - ldr r0, [r0, #4] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_0204932C: .word 0x0000B60C -#else -_0204932C: .word 0x0000B65C -#endif -_02049330: .word _020AFF40 -_02049334: .word 0x09011416 - arm_func_end ReadSaveHeader - - arm_func_start sub_02049338 -sub_02049338: ; 0x02049338 - ldr r1, _0204934C ; =_020AFF40 - ldr r2, [r1] - str r2, [r0] - ldr r0, [r1, #4] - bx lr - .align 2, 0 -_0204934C: .word _020AFF40 - arm_func_end sub_02049338 - - arm_func_start sub_02049350 -sub_02049350: ; 0x02049350 - ldr r0, _0204935C ; =_020AFF40 - ldr r0, [r0, #8] - bx lr - .align 2, 0 -_0204935C: .word _020AFF40 - arm_func_end sub_02049350 - - arm_func_start sub_02049360 -sub_02049360: ; 0x02049360 - ldr r1, _0204936C ; =_020AFF40 - str r0, [r1, #8] - bx lr - .align 2, 0 -_0204936C: .word _020AFF40 - arm_func_end sub_02049360 - - arm_func_start NoteLoadBase -NoteLoadBase: ; 0x02049370 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - ldr r0, _020495FC ; =0x0000B65C - mov r1, #5 - bl MemAlloc - mov r4, r0 - add r0, r4, #0x64 - add r6, r0, #0x400 - bl sub_02048BFC - mov r1, r0 - ldr r0, _02049600 ; =_0209CDA4 - bl Debug_Print0 - mov r0, #0 - bl SetNotifyNote - mov r0, #0 - str r0, [sp] - ldr r2, _020495FC ; =0x0000B65C - add r0, sp, #0 - mov r1, r4 - bl ReadSaveFile - movs r5, r0 - beq _02049400 - ldr r2, _020495FC ; =0x0000B65C - mov r3, #0xc8 - add r0, sp, #0 - mov r1, r4 - str r3, [sp] - bl ReadSaveFile - movs r5, r0 - ldrne r0, _02049604 ; =_020AFF40 - mvnne r1, #0 - strne r1, [r0, #8] - ldreq r0, _02049604 ; =_020AFF40 - moveq r1, #1 - streq r1, [r0, #8] - b _0204940C -_02049400: - ldr r0, _02049604 ; =_020AFF40 - mov r1, #0 - str r1, [r0, #8] -_0204940C: - cmp r5, #0 - cmpne r5, #2 - bne _0204943C - add r0, r4, #4 - bl CheckStringSave - cmp r0, #0 - moveq r5, #5 - beq _0204943C - ldr r1, [r4, #0x24] - ldr r0, _02049608 ; =0x09011416 - cmp r1, r0 - movne r5, #4 -_0204943C: - cmp r5, #0 - bne _020494A0 - ldr r1, [r4, #0x2c] - ldr r0, _0204960C ; =_0209CDB8 - bl Debug_Print0 - ldr r0, [r4, #0x2c] - bl sub_02048C0C - ldr r0, [r4, #0x28] - bl sub_02048C4C - ldr r0, [r4, #0x30] - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl SetRngSeed - ldr r0, [r4, #0x2c] - cmp r0, #0 - mvneq r0, #0 - streqb r0, [r4, #0x34] - beq _020494A0 - ldr r1, [r4, #0x28] - mvn r0, #0 - cmp r1, r0 - beq _020494A0 - ldrsb r0, [r4, #0x34] - bl sub_020205C0 - bl sub_0202059C -_020494A0: - cmp r5, #0 - bne _020494B8 - add r0, r4, #0x38 - bl RestoreScriptVariableValues - cmp r0, #0 - moveq r5, #4 -_020494B8: - cmp r5, #0 - bne _020495D4 - ldr r1, _02049610 ; =0x00007F6B - mov r0, r6 - bl ReadMonsterInfoFromSave - ldr r1, [r4, #0x438] - cmp r0, r1 - add r0, r6, #0x6b - ldr r1, _02049614 ; =0x000005DC - add r0, r0, #0x7f00 - movne r5, #3 - bl sub_02059A74 - ldr r1, [r4, #0x43c] - cmp r0, r1 - add r0, r6, #0x47 - ldr r1, _02049618 ; =0x000001F7 - add r0, r0, #0x8500 - movne r5, #3 - bl CopyProgressInfoFromScratchFrom - ldr r1, [r4, #0x440] - cmp r0, r1 - add r0, r6, #0x3e - ldr r1, _0204961C ; =0x00000DAC - add r0, r0, #0x8700 - movne r5, #3 - bl ReadItemsFromSave - ldr r1, [r4, #0x444] - cmp r0, r1 - add r0, r6, #0xea - add r0, r0, #0x9400 - mov r1, #0x10 - movne r5, #3 - bl sub_02050D84 - ldr r1, [r4, #0x448] - cmp r0, r1 - add r0, r6, #0xfa - add r0, r0, #0x9400 - mov r1, #0x340 - movne r5, #3 - bl sub_0204E19C - ldr r1, [r4, #0x450] - cmp r0, r1 - add r0, r6, #0x3a - ldr r1, _02049620 ; =0x000015A0 - add r0, r0, #0x9800 - movne r5, #3 - bl sub_0205BD9C - ldr r1, [r4, #0x454] - cmp r0, r1 - add r0, r6, #0xda - ldr r1, _02049624 ; =0x00000237 - add r0, r0, #0xad00 - movne r5, #3 - bl sub_0205FAB0 - ldr r1, [r4, #0x458] - cmp r0, r1 - add r0, r6, #0x11 - add r0, r0, #0xb000 - mov r1, #0xb - movne r5, #3 - bl sub_02013190 - ldr r1, [r4, #0x45c] - cmp r0, r1 - add r0, r6, #0x1c - add r0, r0, #0xb000 -#ifdef JAPAN - mov r1, #0x18c -#else - mov r1, #0x1dc -#endif - movne r5, #3 - bl sub_0204A1DC - ldr r1, [r4, #0x460] - cmp r0, r1 - movne r5, #3 -_020495D4: - cmp r5, #0 - bne _020495E4 - bl sub_02048CF8 - b _020495E8 -_020495E4: - bl sub_02048C5C -_020495E8: - mov r0, r4 - bl MemFree - mov r0, r5 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -_020495FC: .word 0x0000B60C -#else -_020495FC: .word 0x0000B65C -#endif -_02049600: .word _0209CDA4 -_02049604: .word _020AFF40 -_02049608: .word 0x09011416 -_0204960C: .word _0209CDB8 -_02049610: .word 0x00007F6B -_02049614: .word 0x000005DC -_02049618: .word 0x000001F7 -_0204961C: .word 0x00000DAC -_02049620: .word 0x000015A0 -_02049624: .word 0x00000237 - arm_func_end NoteLoadBase - - arm_func_start ReadQuickSaveInfo -ReadQuickSaveInfo: ; 0x02049628 - stmdb sp!, {r3, lr} - mov ip, r0 - mov r2, r1 - mov r3, #0x190 - add r0, sp, #0 - mov r1, ip - str r3, [sp] - bl ReadSaveFile - ldmia sp!, {r3, pc} - arm_func_end ReadQuickSaveInfo - - arm_func_start sub_0204964C -sub_0204964C: ; 0x0204964C - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, _02049678 ; =_0209CDD0 - bl sub_02034974 - cmp r0, #0 - ldrne r1, _0204967C ; =_022AAEA4 - ldrne r0, _02049680 ; =_020AFF4C - movne r2, #0 - strne r4, [r1] - strne r2, [r0, #4] - ldmia sp!, {r4, pc} - .align 2, 0 -_02049678: .word _0209CDD0 -_0204967C: .word _022AAEA4 -_02049680: .word _020AFF4C - arm_func_end sub_0204964C - - arm_func_start sub_02049684 -sub_02049684: ; 0x02049684 - stmdb sp!, {r3, lr} - mov r0, #0xb4 - mov r1, #8 - bl MemAlloc - ldr r1, _020496EC ; =_020AFF4C - str r0, [r1] - add r0, r0, #0x1c - bl sub_02034A38 - ldr r2, _020496EC ; =_020AFF4C - ldr r1, _020496F0 ; =_022AAEA4 - ldr r3, [r2] - str r0, [r3, #0x18] - ldr r3, [r1] - ldr r1, [r2] - mov r0, #0 - str r3, [r1, #8] - bl CreateDialogueBox - ldr r1, _020496EC ; =_020AFF4C - mov r3, #0 - ldr r2, [r1] - strb r0, [r2] - ldr r2, [r1] - mov r0, #1 - str r3, [r2, #4] - str r3, [r1, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_020496EC: .word _020AFF4C -_020496F0: .word _022AAEA4 - arm_func_end sub_02049684 - - arm_func_start sub_020496F4 -sub_020496F4: ; 0x020496F4 - stmdb sp!, {r3, lr} - ldr r0, _0204972C ; =_020AFF4C - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - bl CloseDialogueBox - ldr r0, _0204972C ; =_020AFF4C - ldr r0, [r0] - bl MemFree - ldr r0, _0204972C ; =_020AFF4C - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0204972C: .word _020AFF4C - arm_func_end sub_020496F4 - - arm_func_start sub_02049730 -sub_02049730: ; 0x02049730 - stmdb sp!, {r3, lr} - ldr r1, _02049A18 ; =_020AFF4C - ldr r3, [r1] - ldr r0, [r3, #4] - cmp r0, #8 - addls pc, pc, r0, lsl #2 - b _02049A10 -_0204974C: ; jump table - b _02049770 ; case 0 - b _020497A4 ; case 1 - b _020497C4 ; case 2 - b _020497E8 ; case 3 - b _020498C8 ; case 4 - b _0204996C ; case 5 - b _020499A0 ; case 6 - b _020499CC ; case 7 - b _020499FC ; case 8 -_02049770: - ldr r0, [r3, #8] - ldr r1, _02049A1C ; =_0209CDE0 - mov r2, r0, lsl #1 - ldrsb r0, [r3] - ldrh r2, [r1, r2] - ldr r1, _02049A20 ; =0x00000408 - mov r3, #0 - bl ShowStringIdInDialogueBox - ldr r0, _02049A18 ; =_020AFF4C - mov r1, #1 - ldr r0, [r0] - str r1, [r0, #4] - b _02049A10 -_020497A4: - ldrsb r0, [r3] - bl IsDialogueBoxActive - cmp r0, #0 - ldreq r0, _02049A18 ; =_020AFF4C - moveq r1, #2 - ldreq r0, [r0] - streq r1, [r0, #4] - b _02049A10 -_020497C4: - mov r0, #0xe0 - mov r1, #0x88 - mov r2, #1 - bl sub_02029F88 - ldr r0, _02049A18 ; =_020AFF4C - mov r1, #3 - ldr r0, [r0] - str r1, [r0, #4] - b _02049A10 -_020497E8: - bl sub_02003B94 - ldr r0, _02049A18 ; =_020AFF4C - ldr r1, _02049A24 ; =_0209CE10 - ldr r3, [r0] - ldr r2, [r3, #8] - ldr r1, [r1, r2, lsl #2] - str r1, [r3, #0x10] - ldr r0, [r0] - ldr r0, [r0, #0x10] - cmp r0, #4 - bne _02049834 - ldr r0, _02049A28 ; =0x000F120A - bl sub_02048DC4 - mov r0, #2 - bl NoteSaveBase - ldr r1, _02049A18 ; =_020AFF4C - ldr r1, [r1] - str r0, [r1, #0xc] - b _020498B0 -_02049834: - cmp r0, #2 - bne _020498A0 - bl sub_02048CB8 - ldr r2, _02049A18 ; =_020AFF4C - ldr r1, _02049A2C ; =0x000F1207 - ldr r3, [r2] - str r0, [r3, #0x14] - ldr r0, [r2] - ldr r0, [r0, #0x14] - cmp r0, r1 - bne _02049868 - add r0, r1, #1 - bl sub_02048DC4 -_02049868: - mov r0, #2 - bl NoteSaveBase - ldr r1, _02049A18 ; =_020AFF4C - ldr r2, [r1] - str r0, [r2, #0xc] - ldr r1, [r1] - ldr r0, [r1, #0xc] - cmp r0, #0 - ldreq r0, [r1, #0x14] - ldreq r1, _02049A2C ; =0x000F1207 - cmpeq r0, r1 - bne _020498B0 - bl sub_02048DC4 - b _020498B0 -_020498A0: - bl NoteSaveBase - ldr r1, _02049A18 ; =_020AFF4C - ldr r1, [r1] - str r0, [r1, #0xc] -_020498B0: - bl sub_02003BC8 - ldr r0, _02049A18 ; =_020AFF4C - mov r1, #4 - ldr r0, [r0] - str r1, [r0, #4] - b _02049A10 -_020498C8: - bl sub_02029FBC - ldr r0, _02049A18 ; =_020AFF4C - ldr r3, [r0] - ldr r0, [r3, #0xc] - cmp r0, #1 - bne _02049908 -#ifdef JAPAN - ldr r1, _02049A30 ; =0x0000040C - ldrsb r0, [r3] - add r2, r1, #0xbd -#else - ldrsb r0, [r3] - ldr r1, _02049A30 ; =0x0000040C - mov r2, #0x238 -#endif - mov r3, #0 - bl ShowStringIdInDialogueBox - ldr r0, _02049A18 ; =_020AFF4C - mov r1, #8 - ldr r0, [r0] - str r1, [r0, #4] - b _02049A10 -_02049908: - cmp r0, #0 - bne _02049944 - ldr r0, [r3, #8] - ldr r1, _02049A34 ; =_0209CDF8 - mov r2, r0, lsl #1 - ldrsb r0, [r3] - ldrh r2, [r1, r2] - ldr r1, _02049A38 ; =0x0000061C - mov r3, #0 - bl ShowStringIdInDialogueBox - ldr r0, _02049A18 ; =_020AFF4C - mov r1, #5 - ldr r0, [r0] - str r1, [r0, #4] - b _02049A10 -_02049944: - ldrsb r0, [r3] - ldr r1, _02049A38 ; =0x0000061C - ldr r2, _02049A3C ; =0x00000239 - mov r3, #0 - bl ShowStringIdInDialogueBox - ldr r0, _02049A18 ; =_020AFF4C - mov r1, #5 - ldr r0, [r0] - str r1, [r0, #4] - b _02049A10 -_0204996C: - ldrsb r0, [r3] - bl IsDialogueBoxActive - cmp r0, #0 - bne _02049A10 - ldr r0, _02049A18 ; =_020AFF4C - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202F334 - ldr r0, _02049A18 ; =_020AFF4C - mov r1, #6 - ldr r0, [r0] - str r1, [r0, #4] - b _02049A10 -_020499A0: - ldrsb r0, [r3] - bl IsDialogueBoxActive - cmp r0, #0 - bne _02049A10 - ldr r0, _02049A18 ; =_020AFF4C - mov r1, #2 - str r1, [r0, #4] - ldr r0, [r0] - mov r1, #7 - str r1, [r0, #4] - b _02049A10 -_020499CC: - mov r0, #9 - str r0, [r3, #4] - ldr r2, [r1] - ldr r0, [r2, #0x18] - tst r0, #0x100 - beq _020499F4 - ldr r0, [r2, #0xa4] - ldr r1, [r1, #4] - ldr r2, [r2, #0xa0] - blx r2 -_020499F4: - mov r0, #4 - ldmia sp!, {r3, pc} -_020499FC: - ldrsb r0, [r3] - bl IsDialogueBoxActive - cmp r0, #0 - bne _02049A10 - bl CardBackupError -_02049A10: - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02049A18: .word _020AFF4C -_02049A1C: .word _0209CDE0 -_02049A20: .word 0x00000408 -_02049A24: .word _0209CE10 -_02049A28: .word 0x000F120A -_02049A2C: .word 0x000F1207 -_02049A30: .word 0x0000040C -_02049A34: .word _0209CDF8 -_02049A38: .word 0x0000061C -#ifdef JAPAN -_02049A3C: .word 0x000004CA -#else -_02049A3C: .word 0x00000239 -#endif - arm_func_end sub_02049730 - - arm_func_start sub_02049A40 -sub_02049A40: ; 0x02049A40 - stmdb sp!, {r3, lr} - mov r3, r0 - mov r2, r1 - ldr r0, _02049A6C ; =_0209CE40 - mov r1, r3 - bl sub_02034974 - cmp r0, #0 - ldrne r0, _02049A70 ; =_020AFF54 - movne r1, #0 - strne r1, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_02049A6C: .word _0209CE40 -_02049A70: .word _020AFF54 - arm_func_end sub_02049A40 - - arm_func_start sub_02049A74 -sub_02049A74: ; 0x02049A74 - stmdb sp!, {r3, lr} - mov r0, #0xa8 - mov r1, #8 - bl MemAlloc - ldr r1, _02049ACC ; =_020AFF54 - str r0, [r1] - add r0, r0, #0x10 - bl sub_02034A38 - ldr r1, _02049ACC ; =_020AFF54 - ldr r1, [r1] - str r0, [r1, #0xc] - mov r0, #0 - bl CreateDialogueBox - ldr r1, _02049ACC ; =_020AFF54 - mov r3, #0 - ldr r2, [r1] - strb r0, [r2] - ldr r2, [r1] - mov r0, #1 - str r3, [r2, #4] - str r3, [r1, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_02049ACC: .word _020AFF54 - arm_func_end sub_02049A74 - - arm_func_start sub_02049AD0 -sub_02049AD0: ; 0x02049AD0 - stmdb sp!, {r3, lr} - ldr r0, _02049B08 ; =_020AFF54 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - bl CloseDialogueBox - ldr r0, _02049B08 ; =_020AFF54 - ldr r0, [r0] - bl MemFree - ldr r0, _02049B08 ; =_020AFF54 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02049B08: .word _020AFF54 - arm_func_end sub_02049AD0 - - arm_func_start sub_02049B0C -sub_02049B0C: ; 0x02049B0C - stmdb sp!, {r3, lr} - ldr r0, _02049D34 ; =_020AFF54 - ldr r2, [r0] - ldr r0, [r2, #4] - cmp r0, #8 - addls pc, pc, r0, lsl #2 - b _02049D2C -_02049B28: ; jump table - b _02049B4C ; case 0 - b _02049B74 ; case 1 - b _02049B94 ; case 2 - b _02049BB8 ; case 3 - b _02049BEC ; case 4 - b _02049C74 ; case 5 - b _02049CA8 ; case 6 - b _02049CD4 ; case 7 - b _02049D18 ; case 8 -_02049B4C: - ldrsb r0, [r2] - ldr r1, _02049D38 ; =0x00000408 -#ifdef JAPAN - mov r2, #0x4e0 -#else - ldr r2, _02049D3C ; =0x0000024F -#endif - mov r3, #0 - bl ShowStringIdInDialogueBox - ldr r0, _02049D34 ; =_020AFF54 - mov r1, #1 - ldr r0, [r0] - str r1, [r0, #4] - b _02049D2C -_02049B74: - ldrsb r0, [r2] - bl IsDialogueBoxActive - cmp r0, #0 - ldreq r0, _02049D34 ; =_020AFF54 - moveq r1, #2 - ldreq r0, [r0] - streq r1, [r0, #4] - b _02049D2C -_02049B94: - mov r0, #0xe0 - mov r1, #0x88 - mov r2, #1 - bl sub_02029F88 - ldr r0, _02049D34 ; =_020AFF54 - mov r1, #3 - ldr r0, [r0] - str r1, [r0, #4] - b _02049D2C -_02049BB8: - bl sub_02003B94 - bl sub_02048454 - mov r0, #0 - bl NoteSaveBase - ldr r1, _02049D34 ; =_020AFF54 - ldr r1, [r1] - str r0, [r1, #8] - bl sub_02003BC8 - ldr r0, _02049D34 ; =_020AFF54 - mov r1, #4 - ldr r0, [r0] - str r1, [r0, #4] - b _02049D2C -_02049BEC: - bl sub_02029FBC - ldr r0, _02049D34 ; =_020AFF54 - mov r3, #0 -#ifdef JAPAN - ldr r2, [r0] - ldr r0, [r2, #8] - cmp r0, #1 - bne _02049C2C - ldr r1, _02049D40 ; =0x0000040C - ldrsb r0, [r2] - add r2, r1, #0xbd -#else - ldr r1, [r0] - ldr r0, [r1, #8] - cmp r0, #1 - bne _02049C2C - ldrsb r0, [r1] - ldr r1, _02049D40 ; =0x0000040C - mov r2, #0x238 -#endif - bl ShowStringIdInDialogueBox - ldr r0, _02049D34 ; =_020AFF54 - mov r1, #8 - ldr r0, [r0] - str r1, [r0, #4] - b _02049D2C -_02049C2C: - cmp r0, #0 -#ifdef JAPAN - ldrsb r0, [r2] - ldr r1, _02049D44 ; =0x0000061C - bne _02049C58 - ldr r2, _0204A0B0 ; =0x000004E1 -#else - ldrsb r0, [r1] - ldr r1, _02049D44 ; =0x0000061C - bne _02049C58 - mov r2, #0x250 -#endif - bl ShowStringIdInDialogueBox - ldr r0, _02049D34 ; =_020AFF54 - mov r1, #5 - ldr r0, [r0] - str r1, [r0, #4] - b _02049D2C -_02049C58: - ldr r2, _02049D48 ; =0x0000023A - bl ShowStringIdInDialogueBox - ldr r0, _02049D34 ; =_020AFF54 - mov r1, #5 - ldr r0, [r0] - str r1, [r0, #4] - b _02049D2C -_02049C74: - ldrsb r0, [r2] - bl IsDialogueBoxActive - cmp r0, #0 - bne _02049D2C - ldr r0, _02049D34 ; =_020AFF54 - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202F334 - ldr r0, _02049D34 ; =_020AFF54 - mov r1, #6 - ldr r0, [r0] - str r1, [r0, #4] - b _02049D2C -_02049CA8: - ldrsb r0, [r2] - bl IsDialogueBoxActive - cmp r0, #0 - bne _02049D2C - ldr r0, _02049D34 ; =_020AFF54 - mov r1, #2 - str r1, [r0, #4] - ldr r0, [r0] - mov r1, #7 - str r1, [r0, #4] - b _02049D2C -_02049CD4: - mov r1, #9 - add r0, sp, #0 - str r1, [r2, #4] - bl sub_0204AF98 - ldrb r0, [sp] - bl sub_02027180 - ldr r0, _02049D34 ; =_020AFF54 - ldr r1, [r0] - ldr r0, [r1, #0xc] - tst r0, #0x100 - beq _02049D10 - ldr r0, [r1, #0x98] - ldr r2, [r1, #0x94] - mov r1, #8 - blx r2 -_02049D10: - mov r0, #4 - ldmia sp!, {r3, pc} -_02049D18: - ldrsb r0, [r2] - bl IsDialogueBoxActive - cmp r0, #0 - bne _02049D2C - bl CardBackupError -_02049D2C: - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02049D34: .word _020AFF54 -_02049D38: .word 0x00000408 -#ifdef JAPAN -_02049D40: .word 0x0000040C -_02049D44: .word 0x0000061C -_0204A0B0: .word 0x000004E1 -_02049D48: .word 0x000004CB -#else -_02049D3C: .word 0x0000024F -_02049D40: .word 0x0000040C -_02049D44: .word 0x0000061C -_02049D48: .word 0x0000023A -#endif - arm_func_end sub_02049B0C - - arm_func_start sub_02049D4C -sub_02049D4C: ; 0x02049D4C - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, _02049D78 ; =_0209CE58 - bl sub_02034974 - cmp r0, #0 - ldrne r1, _02049D7C ; =_022AAEA8 - ldrne r0, _02049D80 ; =_020AFF5C - movne r2, #0 - strne r4, [r1] - strne r2, [r0] - ldmia sp!, {r4, pc} - .align 2, 0 -_02049D78: .word _0209CE58 -_02049D7C: .word _022AAEA8 -_02049D80: .word _020AFF5C - arm_func_end sub_02049D4C - - arm_func_start sub_02049D84 -sub_02049D84: ; 0x02049D84 - stmdb sp!, {r3, lr} - mov r0, #0xa8 - mov r1, #8 - bl MemAlloc - ldr r1, _02049DEC ; =_020AFF5C - str r0, [r1, #4] - add r0, r0, #0x10 - bl sub_02034A38 - ldr r2, _02049DEC ; =_020AFF5C - ldr r1, _02049DF0 ; =_022AAEA8 - ldr r3, [r2, #4] - str r0, [r3, #0xc] - ldr r3, [r1] - ldr r1, [r2, #4] - mov r0, #0 - str r3, [r1, #8] - bl CreateDialogueBox - ldr r1, _02049DEC ; =_020AFF5C - mov r3, #0 - ldr r2, [r1, #4] - strb r0, [r2] - ldr r2, [r1, #4] - mov r0, #1 - str r3, [r2, #4] - str r3, [r1] - ldmia sp!, {r3, pc} - .align 2, 0 -_02049DEC: .word _020AFF5C -_02049DF0: .word _022AAEA8 - arm_func_end sub_02049D84 - - arm_func_start sub_02049DF4 -sub_02049DF4: ; 0x02049DF4 - stmdb sp!, {r3, lr} - ldr r0, _02049E2C ; =_020AFF5C - ldr r0, [r0, #4] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - bl CloseDialogueBox - ldr r0, _02049E2C ; =_020AFF5C - ldr r0, [r0, #4] - bl MemFree - ldr r0, _02049E2C ; =_020AFF5C - mov r1, #0 - str r1, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_02049E2C: .word _020AFF5C - arm_func_end sub_02049DF4 - - arm_func_start sub_02049E30 -sub_02049E30: ; 0x02049E30 - stmdb sp!, {r3, lr} - ldr r1, _0204A004 ; =_020AFF5C - ldr r3, [r1, #4] - ldr r0, [r3, #4] - cmp r0, #7 - addls pc, pc, r0, lsl #2 - b _02049FFC -_02049E4C: ; jump table - b _02049E6C ; case 0 - b _02049EA0 ; case 1 - b _02049EC0 ; case 2 - b _02049EE4 ; case 3 - b _02049F2C ; case 4 - b _02049F6C ; case 5 - b _02049FA0 ; case 6 - b _02049FCC ; case 7 -_02049E6C: - ldr r0, [r3, #8] - ldr r1, _0204A008 ; =_0209CE54 - mov r2, r0, lsl #1 - ldrsb r0, [r3] - ldrh r2, [r1, r2] - ldr r1, _0204A00C ; =0x00000408 - mov r3, #0 - bl ShowStringIdInDialogueBox - ldr r0, _0204A004 ; =_020AFF5C - mov r1, #1 - ldr r0, [r0, #4] - str r1, [r0, #4] - b _02049FFC -_02049EA0: - ldrsb r0, [r3] - bl IsDialogueBoxActive - cmp r0, #0 - ldreq r0, _0204A004 ; =_020AFF5C - moveq r1, #2 - ldreq r0, [r0, #4] - streq r1, [r0, #4] - b _02049FFC -_02049EC0: - mov r0, #0xe0 - mov r1, #0x88 - mov r2, #1 - bl sub_02029F88 - ldr r0, _0204A004 ; =_020AFF5C - mov r1, #3 - ldr r0, [r0, #4] - str r1, [r0, #4] - b _02049FFC -_02049EE4: - bl sub_02003B94 - ldr r0, _0204A004 ; =_020AFF5C - ldr r0, [r0, #4] - ldr r0, [r0, #8] - cmp r0, #0 - beq _02049F08 - cmp r0, #1 - beq _02049F10 - b _02049F14 -_02049F08: - bl sub_0204A624 - b _02049F14 -_02049F10: - bl sub_0204A72C -_02049F14: - bl sub_02003BC8 - ldr r0, _0204A004 ; =_020AFF5C - mov r1, #4 - ldr r0, [r0, #4] - str r1, [r0, #4] - b _02049FFC -_02049F2C: - bl sub_02029FBC - ldr r0, _0204A004 ; =_020AFF5C - ldr r2, _0204A010 ; =_0209CE50 - ldr r0, [r0, #4] - ldr r1, _0204A014 ; =0x0000061C - ldr r3, [r0, #8] - ldrsb r0, [r0] - mov r3, r3, lsl #1 - ldrh r2, [r2, r3] - mov r3, #0 - bl ShowStringIdInDialogueBox - ldr r0, _0204A004 ; =_020AFF5C - mov r1, #5 - ldr r0, [r0, #4] - str r1, [r0, #4] - b _02049FFC -_02049F6C: - ldrsb r0, [r3] - bl IsDialogueBoxActive - cmp r0, #0 - bne _02049FFC - ldr r0, _0204A004 ; =_020AFF5C - ldr r0, [r0, #4] - ldrsb r0, [r0] - bl sub_0202F334 - ldr r0, _0204A004 ; =_020AFF5C - mov r1, #6 - ldr r0, [r0, #4] - str r1, [r0, #4] - b _02049FFC -_02049FA0: - ldrsb r0, [r3] - bl IsDialogueBoxActive - cmp r0, #0 - bne _02049FFC - ldr r0, _0204A004 ; =_020AFF5C - mov r1, #2 - str r1, [r0] - ldr r0, [r0, #4] - mov r1, #7 - str r1, [r0, #4] - b _02049FFC -_02049FCC: - mov r0, #8 - str r0, [r3, #4] - ldr r2, [r1, #4] - ldr r0, [r2, #0xc] - tst r0, #0x100 - beq _02049FF4 - ldr r0, [r2, #0x98] - ldr r1, [r1] - ldr r2, [r2, #0x94] - blx r2 -_02049FF4: - mov r0, #4 - ldmia sp!, {r3, pc} -_02049FFC: - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0204A004: .word _020AFF5C -_0204A008: .word _0209CE54 -_0204A00C: .word 0x00000408 -_0204A010: .word _0209CE50 -_0204A014: .word 0x0000061C - arm_func_end sub_02049E30 - - arm_func_start sub_0204A018 -sub_0204A018: ; 0x0204A018 - ldr ip, _0204A024 ; =sub_020348E4 - ldr r0, _0204A028 ; =_0209CE68 - bx ip - .align 2, 0 -_0204A024: .word sub_020348E4 -_0204A028: .word _0209CE68 - arm_func_end sub_0204A018 - - arm_func_start sub_0204A02C -sub_0204A02C: ; 0x0204A02C - stmdb sp!, {r3, lr} - mov r0, #1 - mov r1, #8 - bl MemAlloc - ldr r1, _0204A078 ; =_020AFF64 - str r0, [r1] - mov r0, #0 - bl CreateDialogueBox - ldr r3, _0204A078 ; =_020AFF64 - ldr r1, _0204A07C ; =0x00000408 - ldr ip, [r3] -#ifdef JAPAN - add r2, r1, #0xc1 -#else - mov r2, #0x238 -#endif - strb r0, [ip] - ldr r0, [r3] - mov r3, #0 - ldrsb r0, [r0] - bl ShowStringIdInDialogueBox - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0204A078: .word _020AFF64 -_0204A07C: .word 0x00000408 - arm_func_end sub_0204A02C - - arm_func_start sub_0204A080 -sub_0204A080: ; 0x0204A080 - stmdb sp!, {r3, lr} - ldr r0, _0204A0B8 ; =_020AFF64 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - bl CloseDialogueBox - ldr r0, _0204A0B8 ; =_020AFF64 - ldr r0, [r0] - bl MemFree - ldr r0, _0204A0B8 ; =_020AFF64 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0204A0B8: .word _020AFF64 - arm_func_end sub_0204A080 - - arm_func_start sub_0204A0BC -sub_0204A0BC: ; 0x0204A0BC - stmdb sp!, {r3, lr} - ldr r0, _0204A0E4 ; =_020AFF64 - ldr r0, [r0] - ldrsb r0, [r0] - bl IsDialogueBoxActive - cmp r0, #0 - bne _0204A0DC - bl CardBackupError -_0204A0DC: - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0204A0E4: .word _020AFF64 - arm_func_end sub_0204A0BC - - arm_func_start sub_0204A0E8 -sub_0204A0E8: ; 0x0204A0E8 - ldr ip, _0204A0F4 ; =sub_020348E4 - ldr r0, _0204A0F8 ; =_0209CE78 - bx ip - .align 2, 0 -_0204A0F4: .word sub_020348E4 -_0204A0F8: .word _0209CE78 - arm_func_end sub_0204A0E8 - - arm_func_start sub_0204A0FC -sub_0204A0FC: ; 0x0204A0FC - stmdb sp!, {r3, lr} - mov r0, #1 - mov r1, #8 - bl MemAlloc - ldr r1, _0204A148 ; =_020AFF68 - str r0, [r1] - mov r0, #0 - bl CreateDialogueBox - ldr r3, _0204A148 ; =_020AFF68 - ldr r1, _0204A14C ; =0x00000408 - ldr ip, [r3] -#ifdef JAPAN - add r2, r1, #0xd0 -#else - ldr r2, _0204A150 ; =0x00000247 -#endif - strb r0, [ip] - ldr r0, [r3] - mov r3, #0 - ldrsb r0, [r0] - bl ShowStringIdInDialogueBox - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0204A148: .word _020AFF68 -_0204A14C: .word 0x00000408 -#ifndef JAPAN -_0204A150: .word 0x00000247 -#endif - arm_func_end sub_0204A0FC - - arm_func_start sub_0204A154 -sub_0204A154: ; 0x0204A154 - stmdb sp!, {r3, lr} - ldr r0, _0204A18C ; =_020AFF68 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - bl CloseDialogueBox - ldr r0, _0204A18C ; =_020AFF68 - ldr r0, [r0] - bl MemFree - ldr r0, _0204A18C ; =_020AFF68 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0204A18C: .word _020AFF68 - arm_func_end sub_0204A154 - - arm_func_start sub_0204A190 -sub_0204A190: ; 0x0204A190 - mov r0, #1 - bx lr - arm_func_end sub_0204A190 - - arm_func_start sub_0204A198 -sub_0204A198: ; 0x0204A198 - ldr ip, _0204A1A0 ; =sub_0207B9EC - bx ip - .align 2, 0 -_0204A1A0: .word sub_0207B9EC - arm_func_end sub_0204A198 - - arm_func_start sub_0204A1A4 -sub_0204A1A4: ; 0x0204A1A4 - stmdb sp!, {r3, lr} - ldr r0, _0204A1C4 ; =_022AAEAC -#ifdef JAPAN - mov r1, #0x1a0 -#else - mov r1, #0x1f0 -#endif - bl MemZero - ldr r1, _0204A1C4 ; =_022AAEAC - ldr r0, _0204A1C8 ; =_020AFF6C - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0204A1C4: .word _022AAEAC -_0204A1C8: .word _020AFF6C - arm_func_end sub_0204A1A4 - - arm_func_start sub_0204A1CC -sub_0204A1CC: ; 0x0204A1CC - ldr r0, _0204A1D8 ; =_020AFF6C - ldr r0, [r0] - bx lr - .align 2, 0 -_0204A1D8: .word _020AFF6C - arm_func_end sub_0204A1CC - - arm_func_start sub_0204A1DC -sub_0204A1DC: ; 0x0204A1DC -#ifdef JAPAN -#define SUB_0204A1DC_OFFSET -0x50 -#else -#define SUB_0204A1DC_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x14 - mov r3, r0 - mov r2, r1 - add r0, sp, #4 - mov r1, r3 - bl sub_02050974 - ldr r1, _0204A3E0 ; =_020AFF6C - add r0, sp, #4 - ldr r1, [r1] - mov r2, #0x200 - bl CopyBitsFrom -#ifdef JAPAN - ldr r4, _0204A3E0 ; =_020AFF6C - mov r7, #0 - add r6, sp, #4 - mov r5, #0x28 -_0204A220: - ldr r0, [r4] - add r1, r7, r7, lsl #2 - add r3, r0, #0x40 - mov r0, r6 - mov r2, r5 - add r1, r3, r1 - bl CopyBitsFrom - add r7, r7, #1 - cmp r7, #0x10 -#else - ldr r5, _0204A3E0 ; =_020AFF6C - mov r8, #0 - add r7, sp, #4 - mov r6, #0x50 - mov r4, #0xa -_0204A220: - ldr r1, [r5] - mov r0, r7 - add r1, r1, #0x40 - mla r1, r8, r4, r1 - mov r2, r6 - bl CopyBitsFrom - add r8, r8, #1 - cmp r8, #0x10 -#endif - blt _0204A220 - ldr r5, _0204A3E0 ; =_020AFF6C - mov r8, #0 - add r7, sp, #4 - mov r6, #0x60 - mov r4, #0xc -_0204A258: - ldr r1, [r5] - mov r0, r7 - add r1, r1, #0xe0 + SUB_0204A1DC_OFFSET - mla r1, r8, r4, r1 - mov r2, r6 - bl CopyBitsFrom - add r8, r8, #1 - cmp r8, #0x10 - blt _0204A258 - mov sb, #0 - mov r5, #1 - ldr sl, _0204A3E0 ; =_020AFF6C - mov r4, sb - add r8, sp, #4 - add r7, sp, #0 - mov r6, r5 -_0204A298: - mov r0, r8 - mov r1, r7 - mov r2, r6 - bl CopyBitsFrom - ldrb r0, [sp] - cmp r0, #0 - ldr r0, [sl] - movne r1, r5 - add r0, r0, sb - moveq r1, r4 - add sb, sb, #1 - strb r1, [r0, #0x1a0 + SUB_0204A1DC_OFFSET] - cmp sb, #0x10 - blt _0204A298 - ldr r1, _0204A3E0 ; =_020AFF6C - add r0, sp, #4 - ldr r1, [r1] - mov r2, #0x1b0 - add r1, r1, #0x1b0 + SUB_0204A1DC_OFFSET - bl CopyBitsFrom - ldr r1, _0204A3E0 ; =_020AFF6C - add r0, sp, #4 - ldr r1, [r1] - mov r2, #0xe - add r1, r1, #0xe6 + SUB_0204A1DC_OFFSET - add r1, r1, #0x100 - bl CopyBitsFrom - ldr r1, _0204A3E0 ; =_020AFF6C - add r0, sp, #4 - ldr r1, [r1] - mov r2, #0xe - add r1, r1, #0x1e8 + SUB_0204A1DC_OFFSET - bl CopyBitsFrom - add r0, sp, #4 - add r1, sp, #0 - mov r2, #1 - bl CopyBitsFrom - ldrb r0, [sp] - ldr r1, _0204A3E0 ; =_020AFF6C - cmp r0, #0 - movne r3, #1 - ldr r2, [r1] - moveq r3, #0 - strb r3, [r2, #0x1ea + SUB_0204A1DC_OFFSET] - add r0, sp, #4 - add r1, sp, #0 - mov r2, #1 - bl CopyBitsFrom - ldrb r0, [sp] - ldr r1, _0204A3E0 ; =_020AFF6C - cmp r0, #0 - movne r3, #1 - ldr r2, [r1] - moveq r3, #0 - strb r3, [r2, #0x1eb + SUB_0204A1DC_OFFSET] - add r0, sp, #4 - add r1, sp, #0 - mov r2, #1 - bl CopyBitsFrom - ldrb r0, [sp] - ldr r1, _0204A3E0 ; =_020AFF6C - cmp r0, #0 - movne r3, #1 - ldr r2, [r1] - moveq r3, #0 - strb r3, [r2, #0x1ec + SUB_0204A1DC_OFFSET] - add r0, sp, #4 - add r1, sp, #0 - mov r2, #1 - bl CopyBitsFrom - ldrb r0, [sp] - ldr r1, _0204A3E0 ; =_020AFF6C - cmp r0, #0 - movne r2, #1 - ldr r1, [r1] - moveq r2, #0 - add r0, sp, #4 - strb r2, [r1, #0x1ed + SUB_0204A1DC_OFFSET] - bl sub_020509BC - ldr r0, [sp, #0xc] - add sp, sp, #0x14 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_0204A3E0: .word _020AFF6C - arm_func_end sub_0204A1DC - - arm_func_start sub_0204A3E4 -sub_0204A3E4: ; 0x0204A3E4 -#ifdef JAPAN -#define SUB_0204A3E4_OFFSET -0x50 -#else -#define SUB_0204A3E4_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x14 - mov r5, r0 - mov r2, r1 - mov r4, #0xff - mov r3, #0 - add r0, sp, #4 - mov r1, r5 - strb r4, [sp, #1] - strb r3, [sp] - bl sub_02050990 - ldr r1, _0204A5CC ; =_020AFF6C - add r0, sp, #4 - ldr r1, [r1] - mov r2, #0x200 - bl CopyBitsTo -#ifdef JAPAN - ldr r4, _0204A5CC ; =_020AFF6C - mov r7, #0 - add r6, sp, #4 - mov r5, #0x28 -_0204A438: - ldr r0, [r4] - add r1, r7, r7, lsl #2 - add r3, r0, #0x40 - mov r0, r6 - mov r2, r5 - add r1, r3, r1 - bl CopyBitsTo - add r7, r7, #1 - cmp r7, #0x10 -#else - ldr r5, _0204A5CC ; =_020AFF6C - mov r8, #0 - add r7, sp, #4 - mov r6, #0x50 - mov r4, #0xa -_0204A438: - ldr r1, [r5] - mov r0, r7 - add r1, r1, #0x40 - mla r1, r8, r4, r1 - mov r2, r6 - bl CopyBitsTo - add r8, r8, #1 - cmp r8, #0x10 -#endif - blt _0204A438 - ldr r5, _0204A5CC ; =_020AFF6C - mov r8, #0 - add r7, sp, #4 - mov r6, #0x60 - mov r4, #0xc -_0204A470: - ldr r1, [r5] - mov r0, r7 - add r1, r1, #0xe0 + SUB_0204A3E4_OFFSET - mla r1, r8, r4, r1 - mov r2, r6 - bl CopyBitsTo - add r8, r8, #1 - cmp r8, #0x10 - blt _0204A470 - ldr r5, _0204A5CC ; =_020AFF6C - mov r4, #0 - add r8, sp, #0 - add sb, sp, #1 - add r7, sp, #4 - mov r6, #1 -_0204A4AC: - ldr r0, [r5] - mov r2, r6 - add r0, r0, r4 - ldrb r0, [r0, #0x1a0 + SUB_0204A3E4_OFFSET] - cmp r0, #0 - movne r1, sb - moveq r1, r8 - mov r0, r7 - bl CopyBitsTo - add r4, r4, #1 - cmp r4, #0x10 - blt _0204A4AC - ldr r1, _0204A5CC ; =_020AFF6C - add r0, sp, #4 - ldr r1, [r1] - mov r2, #0x1b0 - add r1, r1, #0x1b0 + SUB_0204A3E4_OFFSET - bl CopyBitsTo - ldr r1, _0204A5CC ; =_020AFF6C - add r0, sp, #4 - ldr r1, [r1] - mov r2, #0xe - add r1, r1, #0xe6 + SUB_0204A3E4_OFFSET - add r1, r1, #0x100 - bl CopyBitsTo - ldr r1, _0204A5CC ; =_020AFF6C - add r0, sp, #4 - ldr r1, [r1] - mov r2, #0xe - add r1, r1, #0x1e8 + SUB_0204A3E4_OFFSET - bl CopyBitsTo - ldr r0, _0204A5CC ; =_020AFF6C - mov r2, #1 - ldr r0, [r0] - ldrb r0, [r0, #0x1ea + SUB_0204A3E4_OFFSET] - cmp r0, #0 - addne r1, sp, #1 - addeq r1, sp, #0 - add r0, sp, #4 - bl CopyBitsTo - ldr r0, _0204A5CC ; =_020AFF6C - mov r2, #1 - ldr r0, [r0] - ldrb r0, [r0, #0x1eb + SUB_0204A3E4_OFFSET] - cmp r0, #0 - addne r1, sp, #1 - addeq r1, sp, #0 - add r0, sp, #4 - bl CopyBitsTo - ldr r0, _0204A5CC ; =_020AFF6C - mov r2, #1 - ldr r0, [r0] - ldrb r0, [r0, #0x1ec + SUB_0204A3E4_OFFSET] - cmp r0, #0 - addne r1, sp, #1 - addeq r1, sp, #0 - add r0, sp, #4 - bl CopyBitsTo - ldr r0, _0204A5CC ; =_020AFF6C - mov r2, #1 - ldr r0, [r0] - ldrb r0, [r0, #0x1ed + SUB_0204A3E4_OFFSET] - cmp r0, #0 - addne r1, sp, #1 - addeq r1, sp, #0 - add r0, sp, #4 - bl CopyBitsTo - add r0, sp, #4 - bl sub_020509BC - ldr r0, [sp, #0xc] - add sp, sp, #0x14 - ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0204A5CC: .word _020AFF6C - arm_func_end sub_0204A3E4 - - arm_func_start sub_0204A5D0 -sub_0204A5D0: ; 0x0204A5D0 - stmdb sp!, {r4, lr} - bl sub_02084304 - bl OS_GetLockID - mov r4, r0 - mov r0, r4, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_0208346C - ldr r0, _0204A61C ; =0x00001101 - bl sub_02083B3C - bl sub_02083B14 - ldr r2, _0204A620 ; =_022AB09C - mov r1, r4, lsl #0x10 - str r0, [r2] - mov r0, r1, lsr #0x10 - bl sub_0208347C - mov r0, r4, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_02079094 - ldmia sp!, {r4, pc} - .align 2, 0 -_0204A61C: .word 0x00001101 -_0204A620: .word _022AB09C - arm_func_end sub_0204A5D0 - - arm_func_start sub_0204A624 -sub_0204A624: ; 0x0204A624 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x14 - sub sp, sp, #0x400 - bl sub_02083B00 - and r0, r0, #0xff - cmp r0, #1 - bne _0204A720 - mov r1, #0 - mov r0, #0xff - add r8, sp, #0x14 -_0204A64C: - strb r0, [r8, r1] - add r1, r1, #1 - cmp r1, #0x400 - blt _0204A64C - mov r7, #0 - mov fp, r7 -_0204A664: - mov r6, #0 - mov sb, r7, lsl #8 - b _0204A70C -_0204A670: - bl OS_GetLockID - mov r5, r0 - bl sub_02002580 - mov r4, r0 - mov r0, r5, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_0208346C - mov r0, r4 - mov r1, #0x13 - bl sub_020027F8 - str fp, [sp] - mov sl, r0 - str fp, [sp, #4] - mov r1, #8 - str r1, [sp, #8] - mov r1, #0xa - str r1, [sp, #0xc] - mov r1, #2 - str r1, [sp, #0x10] - mov r0, r8 - mov r1, sb - mov r2, #0x400 - mov r3, fp - bl sub_02083A18 - mov r1, sl - mov sl, r0 - mov r0, r4 - bl sub_020027F8 - mov r0, r5, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_0208347C - mov r0, r5, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_02079094 - cmp sl, #0 - bne _0204A714 - mov r0, #0 - bl CardPullOutWithStatus - add r6, r6, #1 -_0204A70C: - cmp r6, #4 - blt _0204A670 -_0204A714: - add r7, r7, #1 - cmp r7, #0x100 - blt _0204A664 -_0204A720: - add sp, sp, #0x14 - add sp, sp, #0x400 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end sub_0204A624 - - arm_func_start sub_0204A72C -sub_0204A72C: ; 0x0204A72C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x18 - sub sp, sp, #0x400 - mov r0, #0x400 - bl RandInt - str r0, [sp, #0x14] - bl sub_02083B00 - and r0, r0, #0xff - cmp r0, #1 - bne _0204A8D4 - mov r2, #0 - mov r1, #0xff -_0204A75C: - add r0, sp, #0x18 - strb r1, [r0, r2] - add r2, r2, #1 - cmp r2, #0x400 - blt _0204A75C - mov r5, #0 -_0204A774: - mov r1, r5, lsr #0x1f - rsb r0, r1, r5, lsl #22 - mov r8, r5, lsl #8 - add sb, r1, r0, ror #22 - mov r4, #0 - b _0204A8C0 -_0204A78C: - bl OS_GetLockID - mov r6, r0 - bl sub_02002580 - mov r7, r0 - mov r0, r6, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_0208346C - mov r0, r7 - mov r1, #0x13 - bl sub_020027F8 - mov r1, #0 - str r1, [sp] - str r1, [sp, #4] - mov r1, #6 - str r1, [sp, #8] - mov r1, #1 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov fp, r0 - mov r0, r8 - add r1, sp, #0x18 - mov r2, #0x400 - mov r3, #0 - bl sub_02083A18 - cmp r0, #0 - beq _0204A820 - mov r0, r7 - mov r1, fp - bl sub_020027F8 - mov r0, r6, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_0208347C - mov r0, r6, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_02079094 - b _0204A8C8 -_0204A820: - ldr r0, [sp, #0x14] - cmp sb, r0 - bne _0204A84C - mov sl, #0 -_0204A830: - mov r0, #0x100 - bl RandInt - add r1, sp, #0x18 - strb r0, [r1, sl] - add sl, sl, #1 - cmp sl, #0x400 - blt _0204A830 -_0204A84C: - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - mov r0, #0xa - str r0, [sp, #0xc] - mov r0, #2 - str r0, [sp, #0x10] - add r0, sp, #0x18 - mov r1, r8 - mov r2, #0x400 - mov r3, #0 - bl sub_02083A18 - mov sl, r0 - mov r1, fp - mov r0, r7 - bl sub_020027F8 - mov r0, r6, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_0208347C - mov r0, r6, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_02079094 - cmp sl, #0 - bne _0204A8C8 - mov r0, #0 - bl CardPullOutWithStatus - add r4, r4, #1 -_0204A8C0: - cmp r4, #4 - blt _0204A78C -_0204A8C8: - add r5, r5, #1 - cmp r5, #0x100 - blt _0204A774 -_0204A8D4: - add sp, sp, #0x18 - add sp, sp, #0x400 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end sub_0204A72C - - arm_func_start sub_0204A8E0 -sub_0204A8E0: ; 0x0204A8E0 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x14 - mov r4, r0 - mov sb, r1 - mov r8, r2 - bl sub_02083B00 - and r0, r0, #0xff - cmp r0, #1 - movne r0, #3 - bne _0204A9C0 - mov r6, #0 - mov r7, r4, lsl #8 - mov fp, r6 - b _0204A9B4 -_0204A918: - bl OS_GetLockID - mov r5, r0 - bl sub_02002580 - mov r4, r0 - mov r0, r5, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_0208346C - mov r0, r4 - mov r1, #0x13 - bl sub_020027F8 - str fp, [sp] - mov sl, r0 - str fp, [sp, #4] - mov r1, #6 - str r1, [sp, #8] - mov r1, #1 - str r1, [sp, #0xc] - mov r0, r7 - mov r1, sb - mov r2, r8 - mov r3, fp - str fp, [sp, #0x10] - bl sub_02083A18 - mov r1, sl - mov sl, r0 - mov r0, r4 - bl sub_020027F8 - mov r0, r5, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_0208347C - mov r0, r5, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_02079094 - cmp sl, #0 - movne r0, #0 - bne _0204A9C0 - mov r0, #0 - bl CardPullOutWithStatus - add r6, r6, #1 -_0204A9B4: - cmp r6, #4 - blt _0204A918 - mov r0, #3 -_0204A9C0: - add sp, sp, #0x14 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end sub_0204A8E0 - - arm_func_start sub_0204A9C8 -sub_0204A9C8: ; 0x0204A9C8 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x214 - mov r4, r0 - mov sb, r1 - mov r8, r2 - bl sub_02083B00 - and r0, r0, #0xff - cmp r0, #1 - movne r0, #3 - bne _0204AB10 - mov r7, r4, lsl #8 - mov r6, #0 - mov fp, #6 - b _0204AB04 -_0204AA00: - bl OS_GetLockID - mov r5, r0 - bl sub_02002580 - mov r1, #0x13 - mov r4, r0 - bl sub_020027F8 - mov sl, r0 - mov r0, r5, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_0208346C - mov r0, #0 - str r0, [sp] - stmib sp, {r0, fp} - mov r0, #1 - str r0, [sp, #0xc] - mov r0, #0 - str r0, [sp, #0x10] - mov r0, r7 - add r1, sp, #0x14 - mov r2, #0x80 - mov r3, #0 - bl sub_02083A18 - cmp r0, #0 - bne _0204AA8C - mov r0, r4 - mov r1, sl - bl sub_020027F8 - mov r0, r5, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_0208347C - mov r0, r5, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_02079094 - mov r0, #4 - b _0204AB10 -_0204AA8C: - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - mov r0, #0xa - str r0, [sp, #0xc] - mov r0, #2 - str r0, [sp, #0x10] - mov r0, sb - mov r1, r7 - mov r2, r8 - mov r3, #0 - bl sub_02083A18 - mov r1, sl - mov sl, r0 - mov r0, r4 - bl sub_020027F8 - mov r0, r5, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_0208347C - mov r0, r5, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_02079094 - cmp sl, #0 - movne r0, #0 - bne _0204AB10 - mov r0, #0 - bl CardPullOutWithStatus - add r6, r6, #1 -_0204AB04: - cmp r6, #4 - blt _0204AA00 - mov r0, #3 -_0204AB10: - add sp, sp, #0x214 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end sub_0204A9C8 - - arm_func_start sub_0204AB18 -sub_0204AB18: ; 0x0204AB18 - ldr ip, _0204AB20 ; =sub_0204AB24 - bx ip - .align 2, 0 -_0204AB20: .word sub_0204AB24 - arm_func_end sub_0204AB18 - - arm_func_start sub_0204AB24 -sub_0204AB24: ; 0x0204AB24 - stmdb sp!, {r3} - sub sp, sp, #4 - ldr r0, _0204AB74 ; =_022AB0A0 - mov r1, #2 - mov r2, #0 - strb r1, [r0] - strb r2, [r0, #2] - mov r1, #1 - strb r1, [r0, #1] - strb r1, [r0, #3] - strb r2, [r0, #4] - strb r1, [r0, #5] - strb r1, [r0, #6] - strb r2, [r0, #7] - strb r2, [r0, #8] - strb r2, [sp] - strb r2, [r0, #9] - add sp, sp, #4 - ldmia sp!, {r3} - bx lr - .align 2, 0 -_0204AB74: .word _022AB0A0 - arm_func_end sub_0204AB24 - - arm_func_start sub_0204AB78 -sub_0204AB78: ; 0x0204AB78 - ldr r3, _0204AB94 ; =_022AB0A0 - mov r2, #0xa -_0204AB80: - ldrb r1, [r3], #1 - subs r2, r2, #1 - strb r1, [r0], #1 - bne _0204AB80 - bx lr - .align 2, 0 -_0204AB94: .word _022AB0A0 - arm_func_end sub_0204AB78 - - arm_func_start sub_0204AB98 -sub_0204AB98: ; 0x0204AB98 - ldr r3, _0204ABB4 ; =_022AB0A0 - mov r2, #0xa -_0204ABA0: - ldrb r1, [r0], #1 - subs r2, r2, #1 - strb r1, [r3], #1 - bne _0204ABA0 - bx lr - .align 2, 0 -_0204ABB4: .word _022AB0A0 - arm_func_end sub_0204AB98 - - arm_func_start sub_0204ABB8 -sub_0204ABB8: ; 0x0204ABB8 - stmdb sp!, {r4, lr} - ldr r1, _0204ACC0 ; =_022AB0A0 - mov r2, #2 - mov r4, r0 - bl CopyBitsTo - ldr r1, _0204ACC4 ; =_022AB0A2 - mov r0, r4 - mov r2, #3 - bl CopyBitsTo - ldr r1, _0204ACC8 ; =_022AB0A1 - mov r0, r4 - mov r2, #2 - bl CopyBitsTo - ldr r0, _0204ACCC ; =_022AB0A0 - mov r2, #1 - ldrb r0, [r0, #3] - cmp r0, #0 - ldrne r1, _0204ACD0 ; =_0209CE88 - mov r0, r4 - ldreq r1, _0204ACD4 ; =_0209CE89 - bl CopyBitsTo - ldr r0, _0204ACCC ; =_022AB0A0 - mov r2, #1 - ldrb r0, [r0, #4] - cmp r0, #0 - ldrne r1, _0204ACD0 ; =_0209CE88 - mov r0, r4 - ldreq r1, _0204ACD4 ; =_0209CE89 - bl CopyBitsTo - ldr r0, _0204ACCC ; =_022AB0A0 - mov r2, #1 - ldrb r0, [r0, #5] - cmp r0, #0 - ldrne r1, _0204ACD0 ; =_0209CE88 - mov r0, r4 - ldreq r1, _0204ACD4 ; =_0209CE89 - bl CopyBitsTo - ldr r0, _0204ACCC ; =_022AB0A0 - mov r2, #1 - ldrb r0, [r0, #6] - cmp r0, #0 - ldrne r1, _0204ACD0 ; =_0209CE88 - mov r0, r4 - ldreq r1, _0204ACD4 ; =_0209CE89 - bl CopyBitsTo - ldr r0, _0204ACCC ; =_022AB0A0 - mov r2, #1 - ldrb r0, [r0, #7] - cmp r0, #0 - ldrne r1, _0204ACD0 ; =_0209CE88 - mov r0, r4 - ldreq r1, _0204ACD4 ; =_0209CE89 - bl CopyBitsTo - ldr r0, _0204ACCC ; =_022AB0A0 - mov r2, #1 - ldrb r0, [r0, #8] - cmp r0, #0 - ldrne r1, _0204ACD0 ; =_0209CE88 - mov r0, r4 - ldreq r1, _0204ACD4 ; =_0209CE89 - bl CopyBitsTo - ldr r1, _0204ACD8 ; =_022AB0A9 - mov r0, r4 - mov r2, #3 - bl CopyBitsTo - ldmia sp!, {r4, pc} - .align 2, 0 -_0204ACC0: .word _022AB0A0 -_0204ACC4: .word _022AB0A2 -_0204ACC8: .word _022AB0A1 -_0204ACCC: .word _022AB0A0 -_0204ACD0: .word _0209CE88 -_0204ACD4: .word _0209CE89 -_0204ACD8: .word _022AB0A9 - arm_func_end sub_0204ABB8 - - arm_func_start sub_0204ACDC -sub_0204ACDC: ; 0x0204ACDC - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - add r1, sp, #0 - mov r2, #2 - mov r4, r0 - bl CopyBitsFrom - ldrb r0, [sp] - ldr r3, _0204AE5C ; =_022AB0A0 - add r1, sp, #0 - and ip, r0, #3 - mov r0, r4 - mov r2, #3 - strb ip, [r3] - bl CopyBitsFrom - ldrb r0, [sp] - ldr r3, _0204AE5C ; =_022AB0A0 - add r1, sp, #0 - and ip, r0, #7 - mov r0, r4 - mov r2, #2 - strb ip, [r3, #2] - bl CopyBitsFrom - ldrb r0, [sp] - ldr r2, _0204AE5C ; =_022AB0A0 - add r1, sp, #0 - and r3, r0, #3 - strb r3, [r2, #1] - mov r0, r4 - mov r2, #1 - bl CopyBitsFrom - ldrb r0, [sp] - ldr r3, _0204AE5C ; =_022AB0A0 - add r1, sp, #0 - tst r0, #1 - movne ip, #1 - moveq ip, #0 - mov r0, r4 - mov r2, #1 - strb ip, [r3, #3] - bl CopyBitsFrom - ldrb r0, [sp] - ldr r3, _0204AE5C ; =_022AB0A0 - add r1, sp, #0 - tst r0, #1 - movne ip, #1 - moveq ip, #0 - mov r0, r4 - mov r2, #1 - strb ip, [r3, #4] - bl CopyBitsFrom - ldrb r0, [sp] - ldr r2, _0204AE5C ; =_022AB0A0 - add r1, sp, #0 - tst r0, #1 - movne r3, #1 - moveq r3, #0 - strb r3, [r2, #5] - mov r0, r4 - mov r2, #1 - bl CopyBitsFrom - ldrb r0, [sp] - ldr r2, _0204AE5C ; =_022AB0A0 - add r1, sp, #0 - tst r0, #1 - movne r3, #1 - moveq r3, #0 - strb r3, [r2, #6] - mov r0, r4 - mov r2, #1 - bl CopyBitsFrom - ldrb r0, [sp] - ldr r2, _0204AE5C ; =_022AB0A0 - add r1, sp, #0 - tst r0, #1 - movne r3, #1 - moveq r3, #0 - strb r3, [r2, #7] - mov r0, r4 - mov r2, #1 - bl CopyBitsFrom - ldrb r0, [sp] - ldr r2, _0204AE5C ; =_022AB0A0 - add r1, sp, #0 - tst r0, #1 - movne r3, #1 - moveq r3, #0 - strb r3, [r2, #8] - mov r0, r4 - mov r2, #3 - bl CopyBitsFrom - ldrb r1, [sp] - ldr r0, _0204AE5C ; =_022AB0A0 - and r1, r1, #7 - strb r1, [r0, #9] - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_0204AE5C: .word _022AB0A0 - arm_func_end sub_0204ACDC - - arm_func_start sub_0204AE60 -sub_0204AE60: ; 0x0204AE60 - ldr r0, _0204AE7C ; =_022AB0A0 - ldrb r0, [r0] - cmp r0, #1 - movhs r0, #1 - movlo r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_0204AE7C: .word _022AB0A0 - arm_func_end sub_0204AE60 - - arm_func_start sub_0204AE80 -sub_0204AE80: ; 0x0204AE80 - ldr r0, _0204AE9C ; =_022AB0A0 - ldrb r0, [r0] - cmp r0, #2 - movhs r0, #1 - movlo r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_0204AE9C: .word _022AB0A0 - arm_func_end sub_0204AE80 - - arm_func_start sub_0204AEA0 -sub_0204AEA0: ; 0x0204AEA0 - ldr r0, _0204AEAC ; =_022AB0A0 - ldrb r0, [r0, #2] - bx lr - .align 2, 0 -_0204AEAC: .word _022AB0A0 - arm_func_end sub_0204AEA0 - - arm_func_start sub_0204AEB0 -sub_0204AEB0: ; 0x0204AEB0 - ldr r1, _0204AEBC ; =_022AB0A0 - strb r0, [r1, #2] - bx lr - .align 2, 0 -_0204AEBC: .word _022AB0A0 - arm_func_end sub_0204AEB0 - - arm_func_start sub_0204AEC0 -sub_0204AEC0: ; 0x0204AEC0 - ldr r0, _0204AECC ; =_022AB0A0 - ldrb r0, [r0, #1] - bx lr - .align 2, 0 -_0204AECC: .word _022AB0A0 - arm_func_end sub_0204AEC0 - - arm_func_start sub_0204AED0 -sub_0204AED0: ; 0x0204AED0 - ldr r0, _0204AEDC ; =_022AB0A0 - ldrb r0, [r0, #3] - bx lr - .align 2, 0 -_0204AEDC: .word _022AB0A0 - arm_func_end sub_0204AED0 - - arm_func_start sub_0204AEE0 -sub_0204AEE0: ; 0x0204AEE0 - ldr r0, _0204AEEC ; =_022AB0A0 - ldrb r0, [r0, #4] - bx lr - .align 2, 0 -_0204AEEC: .word _022AB0A0 - arm_func_end sub_0204AEE0 - - arm_func_start sub_0204AEF0 -sub_0204AEF0: ; 0x0204AEF0 - ldr r0, _0204AEFC ; =_022AB0A0 - ldrb r0, [r0, #5] - bx lr - .align 2, 0 -_0204AEFC: .word _022AB0A0 - arm_func_end sub_0204AEF0 - - arm_func_start sub_0204AF00 -sub_0204AF00: ; 0x0204AF00 - ldr r0, _0204AF0C ; =_022AB0A0 - ldrb r0, [r0, #6] - bx lr - .align 2, 0 -_0204AF0C: .word _022AB0A0 - arm_func_end sub_0204AF00 - - arm_func_start sub_0204AF10 -sub_0204AF10: ; 0x0204AF10 - ldr r0, _0204AF1C ; =_022AB0A0 - ldrb r0, [r0, #7] - bx lr - .align 2, 0 -_0204AF1C: .word _022AB0A0 - arm_func_end sub_0204AF10 - - arm_func_start sub_0204AF20 -sub_0204AF20: ; 0x0204AF20 - ldr r0, _0204AF2C ; =_022AB0A0 - ldrb r0, [r0, #8] - bx lr - .align 2, 0 -_0204AF2C: .word _022AB0A0 - arm_func_end sub_0204AF20 - - arm_func_start sub_0204AF30 -sub_0204AF30: ; 0x0204AF30 - ldr r0, _0204AF54 ; =_022AB0A0 - ldrb r1, [r0, #1] - cmp r1, #1 - cmpne r1, #2 - ldrneb r0, [r0, #2] - cmpne r0, #3 - moveq r0, #1 - movne r0, #0 - bx lr - .align 2, 0 -_0204AF54: .word _022AB0A0 - arm_func_end sub_0204AF30 - - arm_func_start sub_0204AF58 -sub_0204AF58: ; 0x0204AF58 - ldr r0, _0204AF74 ; =_022AB0A0 - ldrb r0, [r0, #2] - cmp r0, #1 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_0204AF74: .word _022AB0A0 - arm_func_end sub_0204AF58 - - arm_func_start sub_0204AF78 -sub_0204AF78: ; 0x0204AF78 - ldr r0, _0204AF94 ; =_022AB0A0 - ldrb r0, [r0, #2] - cmp r0, #2 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_0204AF94: .word _022AB0A0 - arm_func_end sub_0204AF78 - - arm_func_start sub_0204AF98 -sub_0204AF98: ; 0x0204AF98 - ldr r1, _0204AFA8 ; =_022AB0A0 - ldrb r1, [r1, #9] - strb r1, [r0] - bx lr - .align 2, 0 -_0204AFA8: .word _022AB0A0 - arm_func_end sub_0204AF98 - - arm_func_start sub_0204AFAC -sub_0204AFAC: ; 0x0204AFAC - ldrb r1, [r0] - ldr r0, _0204AFBC ; =_022AB0A0 - strb r1, [r0, #9] - bx lr - .align 2, 0 -_0204AFBC: .word _022AB0A0 - arm_func_end sub_0204AFAC - - arm_func_start GetGameMode -GetGameMode: ; 0x0204AFC0 - ldr r0, _0204AFCC ; =GAME_MODE - ldrb r0, [r0] - bx lr - .align 2, 0 -_0204AFCC: .word GAME_MODE - arm_func_end GetGameMode - - arm_func_start sub_0204AFD0 -sub_0204AFD0: ; 0x0204AFD0 - ldr r0, _0204AFF4 ; =GAME_MODE - ldrb r0, [r0] - add r0, r0, #0xfe - and r0, r0, #0xff - cmp r0, #1 - movls r0, #1 - movhi r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_0204AFF4: .word GAME_MODE - arm_func_end sub_0204AFD0 diff --git a/asm/main_0203C774.s b/asm/main_0203C774.s new file mode 100644 index 00000000..1d2a6655 --- /dev/null +++ b/asm/main_0203C774.s @@ -0,0 +1,18084 @@ + .include "asm/macros.inc" + .include "main_0203C774.inc" + + .text + + arm_func_start sub_0203C774 +sub_0203C774: ; 0x0203C774 + cmp r0, #0 + movne r0, #7 + moveq r0, #8 + bx lr + arm_func_end sub_0203C774 + + arm_func_start sub_0203C784 +sub_0203C784: ; 0x0203C784 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #0x54 + mov r4, r0 + bl sub_02027B1C + ldr r0, _0203C7DC ; =_020AFE5C + ldr r1, _0203C7E0 ; =_0209C60C + ldr r0, [r0, #0xc] + mov r0, r0, lsl #1 + ldrh r0, [r1, r0] + bl StringFromId + str r0, [sp, #0x3c] + add ip, sp, #4 +#ifdef JAPAN + ldr r3, _0203CBC8 ; =0x000023B4 +#endif + mov r0, r4 + mov r1, #0xa + mov r2, #2 +#ifndef JAPAN + mov r3, #0x30c +#endif + str ip, [sp] + bl sub_020262E0 + mov r0, r4 + bl UpdateWindow + add sp, sp, #0x54 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_0203C7DC: .word _020AFE5C +_0203C7E0: .word _0209C60C +#ifdef JAPAN +_0203CBC8: .word 0x000023B4 +#endif + arm_func_end sub_0203C784 + + arm_func_start sub_0203C7E4 +sub_0203C7E4: ; 0x0203C7E4 + stmdb sp!, {r4, lr} + ldr r1, _0203C870 ; =_020AFE70 + mov r4, r0 + ldr r0, [r1] + cmp r0, #0 + bne _0203C810 + mov r0, #0x10 + mov r1, #8 + bl MemAlloc + ldr r1, _0203C870 ; =_020AFE70 + str r0, [r1] +_0203C810: + ldr r1, _0203C870 ; =_020AFE70 + mvn r3, #0 + ldr r2, [r1] + mov r0, r4 + strh r3, [r2, #6] + ldr r1, [r1] + strh r3, [r1, #4] + bl sub_0203C9A0 + ldr r0, _0203C870 ; =_020AFE70 + mvn r2, #1 + ldr r1, [r0] + strb r2, [r1] + ldr r1, [r0] + strb r2, [r1, #1] + ldr r0, [r0] + strb r2, [r0, #2] + bl sub_0203C984 + ldr r0, _0203C870 ; =_020AFE70 + mov r2, #0 + ldr r1, [r0] + strb r2, [r1, #0xa] + ldr r0, [r0] + str r2, [r0, #0xc] + ldmia sp!, {r4, pc} + .align 2, 0 +_0203C870: .word _020AFE70 + arm_func_end sub_0203C7E4 + + arm_func_start sub_0203C874 +sub_0203C874: ; 0x0203C874 + ldr r0, _0203C8DC ; =_020AFE70 + mov r2, #1 + ldr r1, [r0] + strb r2, [r1, #0xa] + ldr r1, [r0] + ldr r0, [r1, #0xc] + cmp r0, #4 + addls pc, pc, r0, lsl #2 + bx lr +_0203C898: ; jump table + b _0203C8AC ; case 0 + b _0203C8B8 ; case 1 + b _0203C8C4 ; case 2 + bx lr ; case 3 + b _0203C8D0 ; case 4 +_0203C8AC: + mov r0, #7 + str r0, [r1, #0xc] + bx lr +_0203C8B8: + mov r0, #7 + str r0, [r1, #0xc] + bx lr +_0203C8C4: + mov r0, #7 + str r0, [r1, #0xc] + bx lr +_0203C8D0: + mov r0, #5 + str r0, [r1, #0xc] + bx lr + .align 2, 0 +_0203C8DC: .word _020AFE70 + arm_func_end sub_0203C874 + + arm_func_start sub_0203C8E0 +sub_0203C8E0: ; 0x0203C8E0 + ldr r0, _0203C90C ; =_020AFE70 + ldr r0, [r0] + cmp r0, #0 + moveq r0, #0 + bxeq lr + ldr r0, [r0, #0xc] + cmp r0, #0xa + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_0203C90C: .word _020AFE70 + arm_func_end sub_0203C8E0 + + arm_func_start sub_0203C910 +sub_0203C910: ; 0x0203C910 + ldr r0, _0203C93C ; =_020AFE70 + ldr r0, [r0] + cmp r0, #0 + moveq r0, #0 + bxeq lr + ldr r0, [r0, #0xc] + cmp r0, #4 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_0203C93C: .word _020AFE70 + arm_func_end sub_0203C910 + + arm_func_start sub_0203C940 +sub_0203C940: ; 0x0203C940 + stmdb sp!, {r3, lr} + ldr r0, _0203C980 ; =_020AFE70 + ldr r0, [r0] + cmp r0, #0 + moveq r0, #1 + ldmeqia sp!, {r3, pc} + ldr r1, [r0, #0xc] + cmp r1, #0xa + movne r0, #0 + ldmneia sp!, {r3, pc} + bl MemFree + ldr r0, _0203C980 ; =_020AFE70 + mov r1, #0 + str r1, [r0] + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_0203C980: .word _020AFE70 + arm_func_end sub_0203C940 + + arm_func_start sub_0203C984 +sub_0203C984: ; 0x0203C984 + ldr r0, _0203C99C ; =_020AFE70 + ldr r1, [r0] + cmp r1, #0 + movne r0, #0 + strneh r0, [r1, #8] + bx lr + .align 2, 0 +_0203C99C: .word _020AFE70 + arm_func_end sub_0203C984 + + arm_func_start sub_0203C9A0 +sub_0203C9A0: ; 0x0203C9A0 + ldr r1, _0203C9C0 ; =_020AFE70 + ldr r2, [r1] + ldrsh r1, [r2, #4] + cmp r0, r1 + moveq r0, #0 + strneh r0, [r2, #4] + movne r0, #1 + bx lr + .align 2, 0 +_0203C9C0: .word _020AFE70 + arm_func_end sub_0203C9A0 + + arm_func_start sub_0203C9C4 +sub_0203C9C4: ; 0x0203C9C4 + ldr r0, _0203C9E0 ; =_020AFE70 + mvn r2, #0 + ldr r1, [r0] + strh r2, [r1, #6] + ldr r0, [r0] + strh r2, [r0, #4] + bx lr + .align 2, 0 +_0203C9E0: .word _020AFE70 + arm_func_end sub_0203C9C4 + + arm_func_start sub_0203C9E4 +sub_0203C9E4: ; 0x0203C9E4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x2c + ldr r0, _0203CA38 ; =_020AFE70 + ldr r5, [r0] + cmp r5, #0 + beq _0203CA30 + ldr r4, _0203CA3C ; =_0209C7F4 + add lr, sp, #0 + mov ip, #2 +_0203CA08: + ldmia r4!, {r0, r1, r2, r3} + stmia lr!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _0203CA08 + ldmia r4, {r0, r1, r2} + stmia lr, {r0, r1, r2} + ldr r1, [r5, #0xc] + add r0, sp, #0 + ldr r0, [r0, r1, lsl #2] + blx r0 +_0203CA30: + add sp, sp, #0x2c + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_0203CA38: .word _020AFE70 +_0203CA3C: .word _0209C7F4 + arm_func_end sub_0203C9E4 + + arm_func_start sub_0203CA40 +sub_0203CA40: ; 0x0203CA40 + stmdb sp!, {r3, lr} + bl ov11_0230D220 + cmp r0, #0 + ldmneia sp!, {r3, pc} + bl ov11_0230D92C + ldr r0, _0203CA68 ; =_020AFE70 + mov r1, #1 + ldr r0, [r0] + str r1, [r0, #0xc] + ldmia sp!, {r3, pc} + .align 2, 0 +_0203CA68: .word _020AFE70 + arm_func_end sub_0203CA40 + + arm_func_start sub_0203CA6C +sub_0203CA6C: ; 0x0203CA6C + stmdb sp!, {r3, lr} + bl ov11_0230D220 + cmp r0, #0 + ldreq r0, _0203CA8C ; =_020AFE70 + moveq r1, #2 + ldreq r0, [r0] + streq r1, [r0, #0xc] + ldmia sp!, {r3, pc} + .align 2, 0 +_0203CA8C: .word _020AFE70 + arm_func_end sub_0203CA6C + + arm_func_start sub_0203CA90 +sub_0203CA90: ; 0x0203CA90 + stmdb sp!, {r3, lr} + bl ov11_0230D220 + cmp r0, #0 + ldmneia sp!, {r3, pc} + ldr r0, _0203CAC8 ; =_020AFE70 + ldr r0, [r0] + ldrsh r0, [r0, #4] + bl sub_0203CCD8 + bl ov11_02310C18 + ldr r0, _0203CAC8 ; =_020AFE70 + mov r1, #3 + ldr r0, [r0] + str r1, [r0, #0xc] + ldmia sp!, {r3, pc} + .align 2, 0 +_0203CAC8: .word _020AFE70 + arm_func_end sub_0203CA90 + + arm_func_start sub_0203CACC +sub_0203CACC: ; 0x0203CACC + stmdb sp!, {r3, lr} + bl ov11_0230D220 + cmp r0, #0 + ldreq r0, _0203CAEC ; =_020AFE70 + moveq r1, #4 + ldreq r0, [r0] + streq r1, [r0, #0xc] + ldmia sp!, {r3, pc} + .align 2, 0 +_0203CAEC: .word _020AFE70 + arm_func_end sub_0203CACC + + arm_func_start sub_0203CAF0 +sub_0203CAF0: ; 0x0203CAF0 + stmdb sp!, {r3, lr} + ldr r0, _0203CB54 ; =_020AFE70 + ldr r2, [r0] + ldrb r1, [r2, #0xa] + cmp r1, #0 + movne r0, #5 + strne r0, [r2, #0xc] + ldmneia sp!, {r3, pc} + ldrh r1, [r2, #8] + add r1, r1, #1 + strh r1, [r2, #8] + ldr r3, [r0] + ldrh r1, [r3, #8] + cmp r1, #0x1e + ldmloia sp!, {r3, pc} + ldrsh r2, [r3, #4] + ldrsh r1, [r3, #6] + cmp r2, r1 + ldmeqia sp!, {r3, pc} + mov r1, #0 + strh r1, [r3, #8] + ldr r0, [r0] + ldrsh r0, [r0, #4] + bl sub_0203CCD8 + ldmia sp!, {r3, pc} + .align 2, 0 +_0203CB54: .word _020AFE70 + arm_func_end sub_0203CAF0 + + arm_func_start sub_0203CB58 +sub_0203CB58: ; 0x0203CB58 + stmdb sp!, {r3, lr} + bl ov11_0230D220 + cmp r0, #0 + ldmneia sp!, {r3, pc} + bl ov11_0230D92C + ldr r0, _0203CB80 ; =_020AFE70 + mov r1, #6 + ldr r0, [r0] + str r1, [r0, #0xc] + ldmia sp!, {r3, pc} + .align 2, 0 +_0203CB80: .word _020AFE70 + arm_func_end sub_0203CB58 + + arm_func_start sub_0203CB84 +sub_0203CB84: ; 0x0203CB84 + stmdb sp!, {r3, lr} + bl ov11_0230D220 + cmp r0, #0 + ldmneia sp!, {r3, pc} + ldr r0, _0203CC5C ; =_020AFE70 + mvn r1, #1 + ldr r0, [r0] + ldrsb r0, [r0] + cmp r0, r1 + beq _0203CBD0 + bl HidePortraitBox + ldr r0, _0203CC5C ; =_020AFE70 + ldr r0, [r0] + ldrsb r0, [r0] + bl ClosePortraitBox + ldr r0, _0203CC5C ; =_020AFE70 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0] +_0203CBD0: + ldr r0, _0203CC5C ; =_020AFE70 + mvn r1, #1 + ldr r0, [r0] + ldrsb r0, [r0, #2] + cmp r0, r1 + beq _0203CC0C + bl sub_0202F954 + ldr r0, _0203CC5C ; =_020AFE70 + ldr r0, [r0] + ldrsb r0, [r0, #2] + bl CloseTextBox + ldr r0, _0203CC5C ; =_020AFE70 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #2] +_0203CC0C: + ldr r0, _0203CC5C ; =_020AFE70 + mvn r1, #1 + ldr r0, [r0] + ldrsb r0, [r0, #1] + cmp r0, r1 + beq _0203CC48 + bl sub_0202F954 + ldr r0, _0203CC5C ; =_020AFE70 + ldr r0, [r0] + ldrsb r0, [r0, #1] + bl CloseTextBox + ldr r0, _0203CC5C ; =_020AFE70 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #1] +_0203CC48: + ldr r0, _0203CC5C ; =_020AFE70 + mov r1, #0xa + ldr r0, [r0] + str r1, [r0, #0xc] + ldmia sp!, {r3, pc} + .align 2, 0 +_0203CC5C: .word _020AFE70 + arm_func_end sub_0203CB84 + + arm_func_start sub_0203CC60 +sub_0203CC60: ; 0x0203CC60 + stmdb sp!, {r3, lr} + bl ov11_0230D220 + cmp r0, #0 + ldreq r0, _0203CC80 ; =_020AFE70 + moveq r1, #0xa + ldreq r0, [r0] + streq r1, [r0, #0xc] + ldmia sp!, {r3, pc} + .align 2, 0 +_0203CC80: .word _020AFE70 + arm_func_end sub_0203CC60 + + arm_func_start sub_0203CC84 +sub_0203CC84: ; 0x0203CC84 + stmdb sp!, {r3, lr} + bl ov11_0230D220 + cmp r0, #0 + ldmneia sp!, {r3, pc} + bl ov11_0230D000 + ldr r0, _0203CCAC ; =_020AFE70 + mov r1, #9 + ldr r0, [r0] + str r1, [r0, #0xc] + ldmia sp!, {r3, pc} + .align 2, 0 +_0203CCAC: .word _020AFE70 + arm_func_end sub_0203CC84 + + arm_func_start sub_0203CCB0 +sub_0203CCB0: ; 0x0203CCB0 + stmdb sp!, {r3, lr} + bl ov11_0230D220 + cmp r0, #0 + ldreq r0, _0203CCD0 ; =_020AFE70 + moveq r1, #0xa + ldreq r0, [r0] + streq r1, [r0, #0xc] + ldmia sp!, {r3, pc} + .align 2, 0 +_0203CCD0: .word _020AFE70 + arm_func_end sub_0203CCB0 + + arm_func_start sub_0203CCD4 +sub_0203CCD4: ; 0x0203CCD4 + bx lr + arm_func_end sub_0203CCD4 + + arm_func_start sub_0203CCD8 +sub_0203CCD8: ; 0x0203CCD8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r1, _0203CE00 ; =TEAM_MEMBER_TABLE_PTR + ldr r2, _0203CE04 ; =_020AFE70 + ldr r4, [r1] + ldr r3, [r2] + mov r1, #0x44 + strh r0, [r3, #6] + ldr r3, [r2] + sub r2, r1, #0x46 + ldrsb r3, [r3] + smlabb r4, r0, r1, r4 + cmp r3, r2 + bne _0203CD2C + mov r0, #1 + mov r1, #3 + mov r2, #0 + bl CreatePortraitBox + ldr r1, _0203CE04 ; =_020AFE70 + ldr r1, [r1] + strb r0, [r1] +_0203CD2C: + ldr r1, _0203CE04 ; =_020AFE70 + mvn r0, #1 + ldr r1, [r1] + ldrsb r1, [r1, #1] + cmp r1, r0 + bne _0203CD5C + ldr r0, _0203CE08 ; =_0209C7E4 + ldr r1, _0203CE0C ; =sub_0203CE1C + bl CreateTextBox + ldr r1, _0203CE04 ; =_020AFE70 + ldr r1, [r1] + strb r0, [r1, #1] +_0203CD5C: + ldr r1, _0203CE04 ; =_020AFE70 + mvn r0, #1 + ldr r1, [r1] + ldrsb r1, [r1, #2] + cmp r1, r0 + bne _0203CD8C + ldr r0, _0203CE10 ; =_0209C7D4 + ldr r1, _0203CE14 ; =sub_0203CFCC + bl CreateTextBox + ldr r1, _0203CE04 ; =_020AFE70 + ldr r1, [r1] + strb r0, [r1, #2] +_0203CD8C: + add r0, sp, #0 + bl InitPortraitParams + ldrsh r1, [r4, #4] + add r0, sp, #0 + bl InitPortraitParamsWithMonsterId + add r0, sp, #0 + mov r1, #2 + bl SetPortraitLayout + ldr r1, _0203CE18 ; =_0209C7CC + add r0, sp, #0 + bl SetPortraitOffset + add r0, sp, #0 + mov r1, #0 + bl SetPortraitEmotion + ldr r0, _0203CE04 ; =_020AFE70 + add r1, sp, #0 + ldr r0, [r0] + ldrsb r0, [r0] + bl ShowPortraitInPortraitBox + ldr r0, _0203CE04 ; =_020AFE70 + ldr r0, [r0] + ldrsb r0, [r0, #1] + bl sub_0202F9B8 + ldr r0, _0203CE04 ; =_020AFE70 + ldr r0, [r0] + ldrsb r0, [r0, #2] + bl sub_0202F9B8 + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_0203CE00: .word TEAM_MEMBER_TABLE_PTR +_0203CE04: .word _020AFE70 +_0203CE08: .word _0209C7E4 +_0203CE0C: .word sub_0203CE1C +_0203CE10: .word _0209C7D4 +_0203CE14: .word sub_0203CFCC +_0203CE18: .word _0209C7CC + arm_func_end sub_0203CCD8 + + arm_func_start sub_0203CE1C +sub_0203CE1C: ; 0x0203CE1C + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #0x1d4 + mov r5, r0 + mvn r1, #1 + cmp r5, r1 + beq _0203CF84 + ldr r1, _0203CF8C ; =_020AFE70 + ldr r2, _0203CF90 ; =TEAM_MEMBER_TABLE_PTR + ldr r1, [r1] + ldr r3, [r2] + ldrsh r2, [r1, #6] + mov r1, #0x44 + smlabb r4, r2, r1, r3 + bl ClearWindow + ldrsh r0, [r4, #4] + bl GetDexNumber + str r0, [sp, #0xa8] + add r1, sp, #0x84 + str r1, [sp] + ldr r2, _0203CF94 ; =_0209C820 + ldr r3, _0203CF98 ; =0x0000C402 + add r0, sp, #0xd4 + mov r1, #0x100 + bl PreprocessString + mov r0, r5 + mov r1, #0x20 + mov r2, #0 + add r3, sp, #0xd4 + bl DrawTextInWindow + ldr r0, _0203CF8C ; =_020AFE70 + ldr r0, [r0] + ldrsh r0, [r0, #6] + bl sub_02056410 + cmp r0, #0 + beq _0203CEC8 + ldr r0, _0203CF8C ; =_020AFE70 + ldr r0, [r0] + ldrsh r0, [r0, #6] + bl sub_020564B0 + cmp r0, #0 + movne r0, #0x59 + moveq r0, #0x46 + b _0203CEE4 +_0203CEC8: + ldr r0, _0203CF8C ; =_020AFE70 + ldr r0, [r0] + ldrsh r0, [r0, #6] + bl sub_02056F60 + cmp r0, #0 + movne r0, #0x44 + moveq r0, #0x57 +_0203CEE4: + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 + add r0, sp, #0xd4 + add r1, r4, #0x3a + mov r2, #0xa + bl StrncpySimpleNoPadSafe + ldr r1, _0203CF9C ; =_0209C82C + add r0, sp, #0x44 + add r3, sp, #0xd4 + mov r2, r6 + bl SprintfStatic__0203CFA4 + ldrsh r1, [r4, #4] + add r0, sp, #0xd4 + bl GetSpeciesString + ldr r1, _0203CF9C ; =_0209C82C + add r0, sp, #4 + mov r2, #0x4b + add r3, sp, #0xd4 + bl SprintfStatic__0203CFA4 + ldr r1, _0203CFA0 ; =_0209C83C + add r0, sp, #0xd4 + add r2, sp, #0x44 + add r3, sp, #4 + bl SprintfStatic__0203CFA4 + mov r0, r5 + mov r1, #0x4c + mov r2, #0 + add r3, sp, #0xd4 + bl DrawTextInWindow + ldrsh r1, [r4, #4] + add r0, sp, #0xd4 + orr r1, r1, #0x10000 + bl sub_02024D7C + mov r0, r5 + mov r1, #0xd0 + mov r2, #0 + add r3, sp, #0xd4 + bl DrawTextInWindow + mov r0, r5 + bl UpdateWindow +_0203CF84: + add sp, sp, #0x1d4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_0203CF8C: .word _020AFE70 +_0203CF90: .word TEAM_MEMBER_TABLE_PTR +_0203CF94: .word _0209C820 +_0203CF98: .word 0x0000C402 +_0203CF9C: .word _0209C82C +_0203CFA0: .word _0209C83C + arm_func_end sub_0203CE1C + + arm_func_start SprintfStatic__0203CFA4 +SprintfStatic__0203CFA4: ; 0x0203CFA4 + 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__0203CFA4 + + arm_func_start sub_0203CFCC +sub_0203CFCC: ; 0x0203CFCC + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #0xcc + sub sp, sp, #0x400 + mov r5, #4 + mov r6, r0 + sub r0, r5, #6 + cmp r6, r0 + beq _0203D3F4 + ldr r1, _0203D400 ; =_020AFE70 + add r0, sp, #4 + ldr r1, [r1] + ldrsh r1, [r1, #6] + bl sub_0205B028 + ldr r0, _0203D400 ; =_020AFE70 + ldr r1, _0203D404 ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + ldr r3, [r1] + ldrsh r2, [r0, #6] + mov r1, #0x44 + mov r0, r6 + smlabb r4, r2, r1, r3 + bl ClearWindow + ldrsh r0, [sp, #4] + mov r1, #0 + bl GetType + mov r8, r0 + ldrsh r0, [sp, #4] + mov r1, #1 + bl GetType + mov r1, r5 + mov r7, r0 + ldr r3, _0203D408 ; =0x00000976 + mov r0, r6 + mov r2, r1 + bl sub_02026268 + mov r0, r8 + bl GetTypeStringId + mov r3, r0 + mov r0, r6 + mov r1, #0x38 + mov r2, r5 + bl sub_02026268 + cmp r7, #0 + beq _0203D098 + mov r0, r7 + bl GetTypeStringId + mov r3, r0 + mov r0, r6 + mov r1, #0x68 + mov r2, r5 + bl sub_02026268 +_0203D098: + add r0, r5, #0xc + mov r1, r0, lsl #0x10 + ldr r2, [sp, #0x30] + ldr r0, _0203D40C ; =0x00000977 + str r2, [sp, #0xa0] + mov r5, r1, asr #0x10 + bl StringFromId + mov r2, r0 + add ip, sp, #0x7c + add r0, sp, #0xcc + mov r1, #0x400 + mov r3, #0 + str ip, [sp] + bl PreprocessString + add r3, sp, #0xcc + mov r0, r6 + mov r1, #4 + mov r2, r5 + bl DrawTextInWindow + add r0, r5, #0xc + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + ldr r0, [sp, #0x2c] + ldr r1, [sp, #0x28] + str r0, [sp, #0xa4] + ldr r0, _0203D410 ; =0x00000978 + str r1, [sp, #0xa0] + bl StringFromId + add r1, sp, #0x7c + mov r2, r0 + str r1, [sp] + add r0, sp, #0xcc + mov r1, #0x400 + mov r3, #0 + bl PreprocessString + mov r0, r6 + mov r1, #4 + mov r2, r5 + add r3, sp, #0xcc + bl DrawTextInWindow + add r0, r5, #0xc + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + ldr r0, _0203D414 ; =0x00000979 + bl StringFromId + add r1, sp, #0x7c + mov r2, r0 + str r1, [sp] + add r0, sp, #0xcc + mov r1, #0x400 + mov r3, #0 + bl PreprocessString + mov r0, r6 + mov r1, #4 + mov r2, r5 + add r3, sp, #0xcc + bl DrawTextInWindow + ldrb r2, [sp, #0x38] + ldrb r1, [sp, #0x3d] + ldr r0, _0203D418 ; =0x0000097B + str r2, [sp, #0xa0] + cmp r1, #0 + addne r1, r2, r1 + addne r0, r0, #1 + strne r1, [sp, #0xa0] + bl StringFromId + mov r2, r0 + add ip, sp, #0x7c + add r0, sp, #0xcc + mov r1, #0x400 + mov r3, #0 + str ip, [sp] + bl PreprocessString + add r3, sp, #0xcc + mov r0, r6 + mov r2, r5 + mov r1, #4 + bl DrawTextInWindow + ldrb r2, [sp, #0x3a] + ldrb r1, [sp, #0x3f] + ldr r0, _0203D41C ; =0x0000097F + str r2, [sp, #0xa0] + cmp r1, #0 +#ifdef JAPAN + addne r1, r2, r1 + strne r1, [sp, #0xa0] + addne r0, r0, #1 +#else + addne r0, r2, r1 + strne r0, [sp, #0xa0] + movne r0, #0x980 +#endif + bl StringFromId + mov r2, r0 + add ip, sp, #0x7c + add r0, sp, #0xcc + mov r1, #0x400 + mov r3, #0 + str ip, [sp] + bl PreprocessString + add r3, sp, #0xcc + mov r0, r6 + mov r2, r5 + mov r1, #4 + bl DrawTextInWindow + add r0, r5, #0xc + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + ldr r0, _0203D420 ; =0x0000097A + bl StringFromId + add r1, sp, #0x7c + mov r2, r0 + str r1, [sp] + add r0, sp, #0xcc + mov r1, #0x400 + mov r3, #0 + bl PreprocessString + mov r0, r6 + mov r1, #4 + mov r2, r5 + add r3, sp, #0xcc + bl DrawTextInWindow + ldrb r2, [sp, #0x39] + ldrb r1, [sp, #0x3e] + ldr r0, _0203D424 ; =0x0000097D + str r2, [sp, #0xa0] + cmp r1, #0 + addne r1, r2, r1 + addne r0, r0, #1 + strne r1, [sp, #0xa0] + bl StringFromId + mov r2, r0 + add ip, sp, #0x7c + add r0, sp, #0xcc + mov r1, #0x400 + mov r3, #0 + str ip, [sp] + bl PreprocessString + add r3, sp, #0xcc + mov r0, r6 + mov r2, r5 + mov r1, #4 + bl DrawTextInWindow + ldrb r2, [sp, #0x3b] + ldrb r1, [sp, #0x40] + ldr r0, _0203D428 ; =0x00000981 + str r2, [sp, #0xa0] + cmp r1, #0 + addne r1, r2, r1 + addne r0, r0, #1 + strne r1, [sp, #0xa0] + bl StringFromId + mov r2, r0 + add ip, sp, #0x7c + add r0, sp, #0xcc + mov r1, #0x400 + mov r3, #0 + str ip, [sp] + bl PreprocessString + add r3, sp, #0xcc + mov r0, r6 + mov r2, r5 + mov r1, #4 + bl DrawTextInWindow + ldrsh r0, [sp, #0x42] + mov r1, #0xa + str r0, [sp, #0xa0] + bl _s32_div_f + mov r0, r0, lsl #0x10 + movs r0, r0, asr #0x10 + movmi r0, #0 + bmi _0203D338 + cmp r0, #0x63 + movge r0, #0x63 +_0203D338: + bl sub_0205B0A0 + str r0, [sp, #0xb4] + ldr r0, _0203D42C ; =0x00000983 + bl StringFromId + add r1, sp, #0x7c + mov r2, r0 + str r1, [sp] + add r0, sp, #0xcc + mov r1, #0x400 + mov r3, #0 + bl PreprocessString + add r0, r5, #0xc + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + mov r0, r6 + mov r1, #4 + mov r2, r5 + add r3, sp, #0xcc + bl DrawTextInWindow + ldrsh r0, [r4, #4] + ldrsh r1, [sp, #0x42] + bl GetNextIqSkill + cmp r0, #0 + add r4, sp, #0x7c + mov r1, #0x400 + bne _0203D3B8 + ldr r2, _0203D430 ; =0x00000986 + add r0, sp, #0xcc + mov r3, #0 + str r4, [sp] + bl PreprocessStringFromId + b _0203D3D0 +_0203D3B8: + ldr r2, _0203D434 ; =0x00000985 + str r0, [sp, #0x8c] + add r0, sp, #0xcc + mov r3, #0 + str r4, [sp] + bl PreprocessStringFromId +_0203D3D0: + add r0, r5, #0xc + mov r1, r0, lsl #0x10 + mov r2, r1, asr #0x10 + add r3, sp, #0xcc + mov r0, r6 + mov r1, #4 + bl DrawTextInWindow + mov r0, r6 + bl UpdateWindow +_0203D3F4: + add sp, sp, #0xcc + add sp, sp, #0x400 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +#define SUB_0203CFCC_OFFSET 0x19D0 +#else +#define SUB_0203CFCC_OFFSET 0 +#endif +_0203D400: .word _020AFE70 +_0203D404: .word TEAM_MEMBER_TABLE_PTR +_0203D408: .word 0x00000976 + SUB_0203CFCC_OFFSET +_0203D40C: .word 0x00000977 + SUB_0203CFCC_OFFSET +_0203D410: .word 0x00000978 + SUB_0203CFCC_OFFSET +_0203D414: .word 0x00000979 + SUB_0203CFCC_OFFSET +_0203D418: .word 0x0000097B + SUB_0203CFCC_OFFSET +_0203D41C: .word 0x0000097F + SUB_0203CFCC_OFFSET +_0203D420: .word 0x0000097A + SUB_0203CFCC_OFFSET +_0203D424: .word 0x0000097D + SUB_0203CFCC_OFFSET +_0203D428: .word 0x00000981 + SUB_0203CFCC_OFFSET +_0203D42C: .word 0x00000983 + SUB_0203CFCC_OFFSET +_0203D430: .word 0x00000986 + SUB_0203CFCC_OFFSET +_0203D434: .word 0x00000985 + SUB_0203CFCC_OFFSET + arm_func_end sub_0203CFCC + + arm_func_start sub_0203D438 +sub_0203D438: ; 0x0203D438 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r0 + mov r5, r1 + mov r0, #0x3c0 + mov r1, #8 + mov r4, r2 + bl MemAlloc + ldr r2, _0203D534 ; =_020AFE74 + mov r1, #0x3c0 + str r0, [r2] + bl MemZero + ldr r0, _0203D534 ; =_020AFE74 + mov ip, #2 + ldr r7, [r0] + add lr, r7, #0x14 +_0203D474: + ldmia r6!, {r0, r1, r2, r3} + stmia lr!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _0203D474 + ldmia r6, {r0, r1, r2} + stmia lr, {r0, r1, r2} + mov r1, #0 + ldr r0, _0203D534 ; =_020AFE74 + str r1, [r7, #0x10] + ldr r1, [r0] + str r5, [r1, #8] + ldr r1, [r0] + str r4, [r1, #0xe4] + ldr r0, [r0] + add r0, r0, #0x8c + bl InitPreprocessorArgs + ldr r0, _0203D534 ; =_020AFE74 + mov r2, #0x70000 + ldr r1, [r0] + str r2, [r1, #0xd8] + ldr r2, [r0] + ldrsh r1, [r2, #0x14] + str r1, [r2, #0x8c] + ldr r0, [r0] + add r0, r0, #0x190 + bl InitPortraitParams + ldr r0, _0203D534 ; =_020AFE74 + ldr r0, [r0] + ldrsh r1, [r0, #0x14] + cmp r1, #0 + beq _0203D4F8 + add r0, r0, #0x190 + bl InitPortraitParamsWithMonsterId +_0203D4F8: + ldr r1, _0203D534 ; =_020AFE74 + mvn r4, #1 + ldr r0, [r1] + mov r3, #0 + strb r4, [r0, #4] + ldr r2, [r1] + mov r0, #1 + strb r4, [r2, #5] + ldr r2, [r1] + strb r4, [r2, #6] + ldr r2, [r1] + str r3, [r2] + ldr r1, [r1] + strb r4, [r1, #0x1a0] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0203D534: .word _020AFE74 + arm_func_end sub_0203D438 + + arm_func_start sub_0203D538 +sub_0203D538: ; 0x0203D538 +#ifdef JAPAN +#define SUB_0203D538_STACK_OFFSET -6 +#define SUB_0203D538_STACK_OFFSET_2 -8 +#else +#define SUB_0203D538_STACK_OFFSET 0 +#define SUB_0203D538_STACK_OFFSET_2 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x11c + SUB_0203D538_STACK_OFFSET_2 + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r4, [r1] + ldr r0, [r4] + cmp r0, #0x4c + addls pc, pc, r0, lsl #2 + b _0203EF9C +_0203D558: ; jump table + b _0203D68C ; case 0 + b _0203D7D4 ; case 1 + b _0203D89C ; case 2 + b _0203D8CC ; case 3 + b _0203D8EC ; case 4 + b _0203D954 ; case 5 + b _0203D984 ; case 6 + b _0203D9A4 ; case 7 + b _0203DA64 ; case 8 + b _0203DAA0 ; case 9 + b _0203DAEC ; case 10 + b _0203DB20 ; case 11 + b _0203DBB0 ; case 12 + b _0203DC68 ; case 13 + b _0203DC98 ; case 14 + b _0203DCB8 ; case 15 + b _0203DD68 ; case 16 + b _0203DDAC ; case 17 + b _0203DE38 ; case 18 + b _0203DE50 ; case 19 + b _0203DE6C ; case 20 + b _0203DEA0 ; case 21 + b _0203DEBC ; case 22 + b _0203DF1C ; case 23 + b _0203DF40 ; case 24 + b _0203DF5C ; case 25 + b _0203DF74 ; case 26 + b _0203DF90 ; case 27 + b _0203DFB0 ; case 28 + b _0203DFD8 ; case 29 + b _0203E10C ; case 30 + b _0203E150 ; case 31 + b _0203E038 ; case 32 + b _0203E0BC ; case 33 + b _0203E0EC ; case 34 + b _0203E198 ; case 35 + b _0203E1DC ; case 36 + b _0203E20C ; case 37 + b _0203E22C ; case 38 + b _0203E274 ; case 39 + b _0203E2A4 ; case 40 + b _0203E2C4 ; case 41 + b _0203E460 ; case 42 + b _0203E490 ; case 43 + b _0203E518 ; case 44 + b _0203E8E8 ; case 45 + b _0203E934 ; case 46 + b _0203E964 ; case 47 + b _0203E984 ; case 48 + b _0203E9A8 ; case 49 + b _0203E9D8 ; case 50 + b _0203E9F8 ; case 51 + b _0203E5B4 ; case 52 + b _0203E61C ; case 53 + b _0203E6B8 ; case 54 + b _0203E6D8 ; case 55 + b _0203E7EC ; case 56 + b _0203E80C ; case 57 + b _0203EA24 ; case 58 + b _0203EAB8 ; case 59 + b _0203EAE8 ; case 60 + b _0203EB08 ; case 61 + b _0203EB64 ; case 62 + b _0203EB94 ; case 63 + b _0203EBB4 ; case 64 + b _0203EC28 ; case 65 + b _0203EC5C ; case 66 + b _0203ECA8 ; case 67 + b _0203ECC4 ; case 68 + b _0203ED34 ; case 69 + b _0203ED50 ; case 70 + b _0203EE14 ; case 71 + b _0203EE30 ; case 72 + b _0203EE68 ; case 73 + b _0203EEBC ; case 74 + b _0203EF78 ; case 75 + b _0203EF94 ; case 76 +_0203D68C: + ldrb r0, [r4, #0x36] + cmp r0, #0 + beq _0203D6E4 + bl sub_0201077C + cmp r0, #0 + bne _0203D6B4 + mov r0, #0x1e + bl GetPerformanceFlagWithChecks + cmp r0, #0 + bne _0203D73C +_0203D6B4: + ldr r1, _0203E4B0 ; =_020AFE74 + mvn r0, #0 + ldr r4, [r1] + mov r2, #0 + ldr r3, [r4, #0x1c] + mul r0, r3, r0 + str r0, [r4, #0x1c] + ldr r0, [r1] + strb r2, [r0, #0x36] + ldr r0, [r1] + strh r2, [r0, #0x38] + b _0203D73C +_0203D6E4: + ldrsh r0, [r4, #0x38] + cmp r0, #0 + beq _0203D73C + mov r0, #0x1d + bl GetPerformanceFlagWithChecks + cmp r0, #0 + beq _0203D718 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + ldrsh r0, [r0, #0x38] + bl IsMonsterIllegalForMissions + cmp r0, #0 + beq _0203D73C +_0203D718: + ldr r1, _0203E4B0 ; =_020AFE74 + mov r3, #0 + ldr r2, [r1] + sub r0, r3, #1 + strh r3, [r2, #0x38] + ldr r2, [r1] + ldr r1, [r2, #0x1c] + mul r0, r1, r0 + str r0, [r2, #0x1c] +_0203D73C: + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + ldr r0, [r0, #0xe4] + tst r0, #0x10 + bne _0203D7C0 + mov r0, #0x1f + bl GetPerformanceFlagWithChecks + cmp r0, #0 + bne _0203D7C0 + mov r5, #0 + mov r4, r5 + ldr sb, _0203E4B0 ; =_020AFE74 + mvn r7, #0 + mov r8, #6 + b _0203D7B0 +_0203D778: + mul r6, r5, r8 + add r0, r1, r6 + ldrsh r0, [r0, #0x28] + bl GetItemCategory + cmp r0, #0xf + bne _0203D7AC + ldr r0, [sb] + add r0, r0, r6 + strh r4, [r0, #0x28] + ldr r2, [sb] + ldr r0, [r2, #0x1c] + mul r1, r0, r7 + str r1, [r2, #0x1c] +_0203D7AC: + add r5, r5, #1 +_0203D7B0: + ldr r1, [sb] + ldr r0, [r1, #0x20] + cmp r5, r0 + blt _0203D778 +_0203D7C0: + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #1 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203D7D4: + ldr r0, [r4, #0x1c] + cmp r0, #0 + movle r0, #7 + strle r0, [r4] + ble _0203EF9C + str r0, [r4, #0xb0] +#ifdef JAPAN + ldr r3, [r1] + mov r0, #0xa + ldr r2, [r3, #0x1c] + mul r0, r2, r0 + str r0, [r3, #0xb4] + ldr r1, [r1] + ldr r0, [r1, #8] + cmp r0, #0 + beq _0203D890 + cmp r0, #2 + bne _0203DC0C + ldr r4, _0203E4B4 ; =0x0000245D + bl sub_0203F00C + b _0203D864 +_0203DC0C: + cmp r0, #3 + bne _0203DC20 + ldr r4, _0203E89C ; =0x0000245E + bl sub_0203F00C + b _0203D864 +_0203DC20: + cmp r0, #4 + ldrne r4, _0203E8A0 ; =0x0000245C +#else + ldr r4, [r1] + mov r0, #0xa + ldr r2, [r4, #0x1c] + mul r3, r2, r0 + str r3, [r4, #0xb4] + ldr r2, [r1] + ldr r1, [r2, #8] + cmp r1, #0 + beq _0203D890 + cmp r1, #2 + bne _0203D824 + ldr r4, _0203E4B4 ; =0x00000289 + bl sub_0203F00C + b _0203D864 +_0203D824: + cmp r1, #3 + bne _0203D838 + add r4, r0, #0x280 + bl sub_0203F00C + b _0203D864 +_0203D838: + cmp r1, #4 + movne r4, #0x288 +#endif + bne _0203D864 + mov r0, #0 + mov r1, #0x69 + bl LoadScriptVariableValue +#ifdef JAPAN + add r0, r0, #0x5f + add r0, r0, #0x2400 +#else + add r0, r0, #0x8b + add r0, r0, #0x200 +#endif + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + bl sub_0203F00C +_0203D864: + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r2, [r1] + mov r1, r4 + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #2 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203D890: + mov r0, #4 +#ifdef JAPAN + str r0, [r1] +#else + str r0, [r2] +#endif + b _0203EF9C +_0203D89C: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + bl sub_0203F05C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #3 + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203D8CC: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #4 + strle r1, [r0] + b _0203EF9C +_0203D8EC: + mov r0, #4 + bl sub_02017C50 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + ldr r0, [r0, #0x1c] + bl AddMoneyCarried + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r2, [r0] + ldr r0, [r2, #8] + cmp r0, #2 + ldreq r1, _0203E4BC ; =0x0000026F + beq _0203D934 + cmp r0, #3 +#ifdef JAPAN + ldreq r1, _0203E8AC ; =0x00002444 +#else + moveq r1, #0x270 +#endif + beq _0203D934 + cmp r0, #4 + ldreq r1, _0203E4C0 ; =0x00000271 + ldrne r1, _0203E4C4 ; =0x0000026E +_0203D934: + ldr r0, _0203E4B8 ; =0x0000101C + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #5 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203D954: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + bl sub_0203F05C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #6 + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203D984: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #7 + strle r1, [r0] + b _0203EF9C +_0203D9A4: + ldrsh r0, [r4, #0x38] + cmp r0, #0 + beq _0203D9BC + ldrb r0, [r4, #0x36] + cmp r0, #0 + beq _0203D9C8 +_0203D9BC: + mov r0, #0x29 + str r0, [r4] + b _0203EF9C +_0203D9C8: + ldrsh r0, [r4, #0x14] + str r0, [r4, #0x8c] + ldr r2, [r1] + ldrsh r0, [r2, #0x38] + str r0, [r2, #0x90] + ldr r1, [r1] + ldr r0, [r1, #8] + cmp r0, #0 + beq _0203DA58 + cmp r0, #2 + bne _0203DA00 + ldr r4, _0203E4C8 ; =0x0000029A + bl sub_0203F00C + b _0203DA2C +_0203DA00: + cmp r0, #4 + ldrne r4, _0203E4CC ; =0x00000299 + bne _0203DA2C + mov r0, #0 + mov r1, #0x69 + bl LoadScriptVariableValue +#ifdef JAPAN + add r0, r0, #0x6f + add r0, r0, #0x2400 +#else + add r0, r0, #0x9b + add r0, r0, #0x200 +#endif + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + bl sub_0203F00C +_0203DA2C: + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4D0 ; =0x00003008 + ldr r2, [r1] + mov r1, r4 + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #8 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DA58: + mov r0, #0xb + str r0, [r1] + b _0203EF9C +_0203DA64: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + mov r0, #0 + ldr r3, _0203E4D4 ; =_0209C884 + mov r2, r0 + mov r1, #0x11 + bl CreateParentMenuFromStringIds + ldr r1, _0203E4B0 ; =_020AFE74 + mov r2, #9 + ldr r3, [r1] + strb r0, [r3, #4] + ldr r0, [r1] + str r2, [r0] + b _0203EF9C +_0203DAA0: + ldrsb r0, [r4, #4] + bl IsParentMenuActive + cmp r0, #0 + bne _0203EF9C + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + ldrsb r0, [r0, #4] + bl sub_0202ABB0 + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r1, [r1] + str r0, [r1, #0x18c] + bl sub_0203F05C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r2, #0xa + ldr r1, [r0] + str r2, [r1, #0x188] + ldr r0, [r0] + str r2, [r0] + b _0203EF9C +_0203DAEC: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + bgt _0203EF9C + ldr r1, [r1] + ldr r0, [r1, #0x18c] + cmp r0, #0 + moveq r0, #0xb + streq r0, [r1] + movne r0, #0x23 + strne r0, [r1] + b _0203EF9C +_0203DB20: + ldr r3, _0203E4D8 ; =_0209C846 + add r2, sp, #0x22 + SUB_0203D538_STACK_OFFSET + mov r1, #4 +_0203DB2C: + ldrh r0, [r3], #2 + subs r1, r1, #1 + strh r0, [r2], #2 + bne _0203DB2C + ldrsh r1, [r4, #0x38] + add r0, sp, #0x22 + SUB_0203D538_STACK_OFFSET + mov r2, #1 + mov r3, #0 + bl sub_02053A0C + ldr r0, _0203E4B0 ; =_020AFE74 + add r1, sp, #0x22 + SUB_0203D538_STACK_OFFSET + ldr r0, [r0] + ldr r3, _0203E4DC ; =_0209C844 + str r1, [sp] + ldrsh r1, [r0, #0x38] + add r0, r0, #0x40 + mov r2, #0 + bl sub_02052E2C + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + add r0, r0, #0x40 + bl sub_02055D4C + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r2, [r1] + str r0, [r2, #0x3b8] + ldr r1, [r1] + ldr r0, [r1, #0x3b8] + cmp r0, #0 + movne r0, #0xc + strne r0, [r1] + moveq r0, #0x1e + streq r0, [r1] + b _0203EF9C +_0203DBB0: + ldr r0, [r4, #0x18] + cmp r0, #1 + ble _0203DBD0 + mov r1, r0, lsl #0x10 + ldr r0, [r4, #0x3b8] + mov r1, r1, asr #0x10 + mov r2, #1 + bl ApplyLevelUpBoostsToGroundMonster +_0203DBD0: + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r2, [r0] + ldrsh r1, [r2, #0x38] + str r1, [r2, #0x8c] + ldr r4, [r0] + ldr r0, [r4, #8] + cmp r0, #2 + bne _0203DC18 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r1, _0203E4E0 ; =0x0000027A + add r2, r4, #0x8c + bl sub_02046BE8 + bl sub_0203F00C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0xd + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DC18: + cmp r0, #4 + movne r0, #0xf + strne r0, [r4] + bne _0203EF9C + mov r0, #0 + mov r1, #0x69 + bl LoadScriptVariableValue +#ifdef JAPAN + add r0, r0, #0x4f + add r0, r0, #0x2400 +#else + add r0, r0, #0x7b + add r0, r0, #0x200 +#endif + mov r1, r0, lsl #0x10 + ldr r0, _0203E4B8 ; =0x0000101C + mov r1, r1, lsr #0x10 + add r2, r4, #0x8c + bl sub_02046BE8 + bl sub_0203F00C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0xd + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DC68: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + bl sub_0203F05C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #0xe + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DC98: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #0xf + strle r1, [r0] + b _0203EF9C +_0203DCB8: + ldrsh r1, [r4, #0x38] + add r0, r4, #0xb5 + add r0, r0, #0x200 + mov r2, #0x4e + bl GetNameWithGender + ldr r3, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4E4 ; =0x0000100C + ldr r4, [r3] + ldr r1, _0203E4E8 ; =0x000002A6 + add r2, r4, #0xb5 + add r2, r2, #0x200 + str r2, [r4, #0xc4] + ldr r2, [r3] + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 +#ifndef JAPAN + mov r2, #0xa +#endif + ldr r0, [r0] + ldr r1, [r0, #0x3b8] + add r0, r0, #0xa1 + add r0, r0, #0x100 + add r1, r1, #0x3a +#ifdef JAPAN + bl StrcpySimple +#else + bl StrncpySimple +#endif + ldr r0, _0203E4B0 ; =_020AFE74 + mov r2, #0xa + ldr r0, [r0] + ldr r1, [r0, #0x3b8] + add r0, r0, #0xab + add r0, r0, #0x100 + add r1, r1, #0x3a + bl MemcpySimple + ldr r0, _0203E4B0 ; =_020AFE74 + mov r2, #0xa + ldr r1, [r0] + add r0, r1, #0xb5 + add r0, r0, #0x100 + add r1, r1, #0xab + add r1, r1, #0x100 + bl StrncpySimpleNoPadSafe + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x10 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DD68: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + ldr r0, _0203E4EC ; =_0209C85C + mov r4, #2 + ldr r1, _0203E4F0 ; =0x00300011 + ldr r3, _0203E4F4 ; =_0209C86C + mov r2, #0 + str r4, [sp] + bl CreateSimpleMenuFromStringIds + ldr r1, _0203E4B0 ; =_020AFE74 + mov r2, #0x11 + ldr r3, [r1] + strb r0, [r3, #0x1a0] + ldr r0, [r1] + str r2, [r0] + b _0203EF9C +_0203DDAC: + add r0, r4, #0x100 + ldrsb r0, [r0, #0xa0] + bl IsSimpleMenuActive + cmp r0, #0 + bne _0203EF9C + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + add r0, r0, #0x100 + ldrsb r0, [r0, #0xa0] + bl GetSimpleMenuResult + ldr r1, _0203E4B0 ; =_020AFE74 + mov r4, r0 + ldr r0, [r1] + add r0, r0, #0x100 + ldrsb r0, [r0, #0xa0] + bl CloseSimpleMenu + ldr r0, _0203E4B0 ; =_020AFE74 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x1a0] + bl sub_02046D20 + cmp r4, #0 + beq _0203DE10 + cmp r4, #1 + b _0203DE24 +_0203DE10: + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x12 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DE24: + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x20 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DE38: + bl ov11_0230D92C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x13 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DE50: + bl ov11_0230D220 + cmp r0, #0 + ldreq r0, _0203E4B0 ; =_020AFE74 + moveq r1, #0x14 + ldreq r0, [r0] + streq r1, [r0] + b _0203EF9C +_0203DE6C: + add r0, r4, #0xab + add r2, r4, #0xa1 + add r1, r0, #0x100 + add r3, r2, #0x100 + mov r0, #2 + mov r2, #0 + bl ShowKeyboard + bl ov11_02310BDC + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x15 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DEA0: + bl ov11_0230D220 + cmp r0, #0 + ldreq r0, _0203E4B0 ; =_020AFE74 + moveq r1, #0x16 + ldreq r0, [r0] + streq r1, [r0] + b _0203EF9C +_0203DEBC: + bl GetKeyboardStatus + cmp r0, #3 + bne _0203EF9C + bl GetKeyboardStringResult + ldr r2, _0203E4B0 ; =_020AFE74 + mov r1, r0 + ldr r0, [r2] + mov r2, #0xa + add r0, r0, #0xab + add r0, r0, #0x100 + bl MemcpySimple + ldr r0, _0203E4B0 ; =_020AFE74 + mov r2, #0xa + ldr r1, [r0] + add r0, r1, #0xb5 + add r1, r1, #0xab + add r0, r0, #0x100 + add r1, r1, #0x100 + bl StrncpySimpleNoPadSafe + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x17 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DF1C: + bl sub_02037468 + cmp r0, #0 + beq _0203EF9C + bl ov11_0230D92C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x18 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DF40: + bl ov11_0230D220 + cmp r0, #0 + ldreq r0, _0203E4B0 ; =_020AFE74 + moveq r1, #0x19 + ldreq r0, [r0] + streq r1, [r0] + b _0203EF9C +_0203DF5C: + bl ov11_0230D92C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x1a + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DF74: + bl ov11_0230D220 + cmp r0, #0 + ldreq r0, _0203E4B0 ; =_020AFE74 + moveq r1, #0x1b + ldreq r0, [r0] + streq r1, [r0] + b _0203EF9C +_0203DF90: + add r0, r4, #0xb5 + add r0, r0, #0x100 + bl sub_0203909C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x1c + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203DFB0: + bl sub_0203931C + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r2, [r1] + str r0, [r2, #0x3bc] + ldr r1, [r1] + ldr r0, [r1, #0x3bc] + cmp r0, #0 + movge r0, #0x1d + strge r0, [r1] + b _0203EF9C +_0203DFD8: + bl sub_02039218 + cmp r0, #0 + beq _0203EF9C + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r1, [r0] + ldr r0, [r1, #0x3bc] + cmp r0, #0 + beq _0203E000 + cmp r0, #1 + b _0203E02C +_0203E000: + ldr r0, [r1, #0x3b8] + add r1, r1, #0xab + add r0, r0, #0x3a + add r1, r1, #0x100 + mov r2, #0xa + bl MemcpySimple + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x20 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E02C: + mov r0, #0x12 + str r0, [r1] + b _0203EF9C +_0203E038: + ldrsh r0, [r4, #0x38] + mov r2, #0xa + orr r0, r0, #0x80000 + str r0, [r4, #0x8c] + ldr r1, [r1] + add r0, r1, #0xb5 + add r1, r1, #0xab + add r0, r0, #0x100 + add r1, r1, #0x100 + bl StrncpySimpleNoPadSafe + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r2, [r1] + add r0, r2, #0xb5 + add r0, r0, #0x100 + str r0, [r2, #0xc4] + ldr r0, [r1] + ldr r0, [r0, #8] + cmp r0, #2 + ldreq r4, _0203E4F8 ; =0x00000283 + mov r0, #5 + ldrne r4, _0203E4FC ; =0x00000281 + bl sub_02017C50 + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r2, [r1] + mov r1, r4 + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x21 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E0BC: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + bl sub_0203F05C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #0x22 + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E0EC: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #0x29 + strle r1, [r0] + b _0203EF9C +_0203E10C: + bl sub_02046D20 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r1, [r0] + ldr r0, [r1, #8] + sub r0, r0, #2 + cmp r0, #1 + add r0, r1, #0x40 + bhi _0203E138 + mov r1, #1 + bl ov11_023061E4 + b _0203E13C +_0203E138: + bl ov11_023061CC +_0203E13C: + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x1f + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E150: + bl ov11_02306C9C + cmp r0, #3 + cmpne r0, #4 + bne _0203EF9C + bl ov11_02306C64 + cmp r0, #0 + ldreq r0, _0203E4B0 ; =_020AFE74 + moveq r1, #0x23 + ldreq r0, [r0] + streq r1, [r0] + beq _0203EF9C + ldr r1, _0203E4B0 ; =_020AFE74 + mov r2, #0xc + ldr r3, [r1] + str r0, [r3, #0x3b8] + ldr r0, [r1] + str r2, [r0] + b _0203EF9C +_0203E198: + ldrsh r1, [r4, #0x38] + add r0, r4, #0xe8 + bl GetNameRaw + ldr r2, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r4, [r2] +#ifdef JAPAN + ldr r1, _0203E8F0 ; =0x00002458 +#else + mov r1, #0x284 +#endif + add r3, r4, #0xe8 + str r3, [r4, #0xc4] + ldr r2, [r2] + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x24 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E1DC: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + bl sub_0203F05C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #0x25 + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E20C: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #0x26 + strle r1, [r0] + b _0203EF9C +_0203E22C: + mov r0, #4 + bl sub_02017C50 + mov r0, #0x3e8 + bl AddMoneyCarried + ldr r1, _0203E4B0 ; =_020AFE74 + mov r3, #0x3e8 + ldr r2, [r1] + ldr r0, _0203E4B8 ; =0x0000101C + str r3, [r2, #0xb0] + ldr r2, [r1] + ldr r1, _0203E500 ; =0x00000285 + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x27 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E274: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + bl sub_0203F05C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #0x28 + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E2A4: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #0x29 + strle r1, [r0] + b _0203EF9C +_0203E2C4: + ldr r1, [r4, #0x10] + ldr r0, [r4, #0x20] + cmp r1, r0 + movge r0, #0x3a + strge r0, [r4] + bge _0203EF9C + mov r0, #6 + mla r0, r1, r0, r4 + ldrsh r0, [r0, #0x28] + mov r1, #0 + strh r0, [sp, #0x20 + SUB_0203D538_STACK_OFFSET] + strb r1, [sp, #0x1c + SUB_0203D538_STACK_OFFSET] + bl IsStorableItem + cmp r0, #0 + beq _0203E44C + ldrsh r0, [sp, #0x20 + SUB_0203D538_STACK_OFFSET] + bl IsThrownItem + cmp r0, #0 + bne _0203E328 + ldrsh r1, [sp, #0x20 + SUB_0203D538_STACK_OFFSET] + cmp r1, #0x16c + blt _0203E348 + ldr r0, _0203E504 ; =0x0000018F + cmp r1, r0 + bgt _0203E348 +_0203E328: + ldr r1, _0203E4B0 ; =_020AFE74 + mov r0, #6 + ldr r2, [r1] + ldr r1, [r2, #0x10] + mla r0, r1, r0, r2 + ldrh r0, [r0, #0x26] + strh r0, [sp, #0x1e + SUB_0203D538_STACK_OFFSET] + b _0203E350 +_0203E348: + mov r0, #0 + strh r0, [sp, #0x1e + SUB_0203D538_STACK_OFFSET] +_0203E350: + ldr r3, _0203E4B0 ; =_020AFE74 + mov r0, #1 + ldr r6, [r3] + strb r0, [sp, #0x1c + SUB_0203D538_STACK_OFFSET] + ldr r1, [r6, #0x10] + mov r0, #6 + mla r5, r1, r0, r6 + ldrh r0, [sp, #0x1c + SUB_0203D538_STACK_OFFSET] + mov r4, #0 + ldr r2, _0203E508 ; =_0209C850 + strh r0, [r5, #0x24] + ldrh r0, [sp, #0x1e + SUB_0203D538_STACK_OFFSET] + add r1, sp, #0x1c + SUB_0203D538_STACK_OFFSET + strh r0, [r5, #0x26] + ldrh r0, [sp, #0x20 + SUB_0203D538_STACK_OFFSET] + strh r0, [r5, #0x28] + ldrsh r0, [sp, #0x20 + SUB_0203D538_STACK_OFFSET] + str r0, [r6, #0x9c] + ldr r0, [r3] + str r4, [r0, #0xb0] + ldr r0, [r3] + add r0, r0, #0xe8 + bl sub_0200D670 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r2, [r0] + add r1, r2, #0xe8 + str r1, [r2, #0xc4] + ldr r2, [r0] + ldrsh r1, [r2, #0x14] + str r1, [r2, #0x8c] + ldr r1, [r0] + ldr r0, [r1, #8] + cmp r0, #0 + beq _0203E440 + cmp r0, #2 + bne _0203E3EC + ldr r4, _0203E50C ; =0x00000296 + bl sub_0203F00C + b _0203E414 +_0203E3EC: + cmp r0, #3 + bne _0203E400 + ldr r4, _0203E510 ; =0x00000297 + bl sub_0203F00C + b _0203E414 +_0203E400: + cmp r0, #4 + ldrne r4, _0203E514 ; =0x00000295 + bne _0203E414 +#ifdef JAPAN + ldr r4, _0203E90C ; =0x0000246C +#else + mov r4, #0x298 +#endif + bl sub_0203F00C +_0203E414: + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r2, [r1] + mov r1, r4 + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x2a + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E440: + mov r0, #0x2c + str r0, [r1] + b _0203EF9C +_0203E44C: + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x33 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E460: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + bl sub_0203F05C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #0x2b + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E490: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #0x2c + strle r1, [r0] + b _0203EF9C + .align 2, 0 +#ifdef JAPAN +#define SUB_0203D538_DATA_OFFSET 0x21D4 +#else +#define SUB_0203D538_DATA_OFFSET 0 +#endif +_0203E4B0: .word _020AFE74 +_0203E4B4: .word 0x00000289 + SUB_0203D538_DATA_OFFSET +#ifdef JAPAN +_0203E89C: .word 0x0000245E +_0203E8A0: .word 0x0000245C +#endif +_0203E4B8: .word 0x0000101C +_0203E4BC: .word 0x0000026F + SUB_0203D538_DATA_OFFSET +#ifdef JAPAN +_0203E8AC: .word 0x00002444 +#endif +_0203E4C0: .word 0x00000271 + SUB_0203D538_DATA_OFFSET +_0203E4C4: .word 0x0000026E + SUB_0203D538_DATA_OFFSET +_0203E4C8: .word 0x0000029A + SUB_0203D538_DATA_OFFSET +_0203E4CC: .word 0x00000299 + SUB_0203D538_DATA_OFFSET +_0203E4D0: .word 0x00003008 +_0203E4D4: .word _0209C884 +_0203E4D8: .word _0209C846 +_0203E4DC: .word _0209C844 +_0203E4E0: .word 0x0000027A + SUB_0203D538_DATA_OFFSET +_0203E4E4: .word 0x0000100C +_0203E4E8: .word 0x000002A6 + SUB_0203D538_DATA_OFFSET +_0203E4EC: .word _0209C85C +_0203E4F0: .word 0x00300011 +_0203E4F4: .word _0209C86C +_0203E4F8: .word 0x00000283 + SUB_0203D538_DATA_OFFSET +_0203E4FC: .word 0x00000281 + SUB_0203D538_DATA_OFFSET +#ifdef JAPAN +_0203E8F0: .word 0x00002458 +#endif +_0203E500: .word 0x00000285 + SUB_0203D538_DATA_OFFSET +_0203E504: .word 0x0000018F +_0203E508: .word _0209C850 +_0203E50C: .word 0x00000296 + SUB_0203D538_DATA_OFFSET +_0203E510: .word 0x00000297 + SUB_0203D538_DATA_OFFSET +_0203E514: .word 0x00000295 + SUB_0203D538_DATA_OFFSET +#ifdef JAPAN +_0203E90C: .word 0x0000246C +#endif +_0203E518: + ldr r1, [r4, #0x10] + add r2, r4, #0x24 + mov r0, #6 + mla r0, r1, r0, r2 + bl AddItemToStorage + cmp r0, #0 + beq _0203E5A0 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + ldr r0, [r0, #0xe4] + tst r0, #2 + bne _0203E550 + mov r0, #4 + bl sub_02017C50 +_0203E550: + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r2, [r0] + ldr r0, [r2, #0xe4] + tst r0, #4 + bne _0203E588 + ldr r1, _0203EFA8 ; =0x00000273 + add r2, r2, #0x8c + mov r0, #0x1c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x2e + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E588: + tst r0, #8 + movne r0, #0x30 + strne r0, [r2] + moveq r0, #0x33 + streq r0, [r2] + b _0203EF9C +_0203E5A0: + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x34 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E5B4: + ldr r2, [r4, #0x10] + mov r0, #6 + mla r1, r2, r0, r4 + ldrsh r2, [r1, #0x28] + mov r1, #0 + strh r2, [sp, #0x1a + SUB_0203D538_STACK_OFFSET] + ldr r2, [r4, #0x10] + mla r0, r2, r0, r4 + ldrh r0, [r0, #0x26] + strh r0, [sp, #0x18 + SUB_0203D538_STACK_OFFSET] + strb r1, [sp, #0x16 + SUB_0203D538_STACK_OFFSET] + bl sub_02046D20 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + ldr r0, [r0, #0xe4] + tst r0, #1 + moveq r1, #1 + movne r1, #0 + add r0, sp, #0x16 + SUB_0203D538_STACK_OFFSET + and r1, r1, #0xff + bl sub_020453F8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x35 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E61C: + bl sub_02046028 + cmp r0, #2 + beq _0203E658 + cmp r0, #3 + beq _0203E688 + cmp r0, #4 + bne _0203EF9C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #0x2d + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E658: + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + add r0, r0, #0xde + bl sub_02045FD0 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #0x36 + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E688: + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + add r0, r0, #0xde + bl sub_02045FD0 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #0x38 + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E6B8: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #0x37 + strle r1, [r0] + b _0203EF9C +_0203E6D8: + ldr r1, [r4, #0x10] + add r2, r4, #0x24 + mov r0, #6 + mla r0, r1, r0, r2 + bl AddItemToStorage + cmp r0, #0 + beq _0203E7D8 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + ldr r0, [r0, #0xe4] + tst r0, #2 + bne _0203E710 + mov r0, #4 + bl sub_02017C50 +_0203E710: + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #6 + ldr r5, [r0] + mov r6, #0 + ldr r4, [r5, #0x10] + ldr r2, _0203E508 ; =_0209C850 + mla r3, r4, r1, r5 + ldrsh r3, [r3, #0x28] + str r3, [r5, #0x9c] + ldr r3, [r0] + str r6, [r3, #0xb0] + ldr r4, [r0] + ldrsh r3, [r4, #0xdc] + str r3, [r4, #0xa4] + ldr r3, [r0] + str r6, [r3, #0xb8] + ldr r5, [r0] + ldrsh r3, [r5, #0xe2] + add r4, r5, #0x24 + add r0, r5, #0xe8 + strh r3, [sp, #0x14 + SUB_0203D538_STACK_OFFSET] + ldrh r3, [r5, #0xe0] + strb r6, [sp, #0x10 + SUB_0203D538_STACK_OFFSET] + strh r3, [sp, #0x12 + SUB_0203D538_STACK_OFFSET] + ldr r3, [r5, #0x10] + mla r1, r3, r1, r4 + bl sub_0200D670 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r2, _0203E508 ; =_0209C850 + ldr r0, [r0] + add r1, sp, #0x10 + SUB_0203D538_STACK_OFFSET + add r0, r0, #0x138 + bl sub_0200D670 + ldr r2, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r4, [r2] + ldr r1, _0203EFAC ; =0x00000275 + add r3, r4, #0x138 + str r3, [r4, #0xcc] + ldr r4, [r2] + add r3, r4, #0xe8 + str r3, [r4, #0xc4] + ldr r2, [r2] + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x2e + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E7D8: + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x34 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E7EC: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #0x39 + strle r1, [r0] + b _0203EF9C +_0203E80C: + ldr r1, [r4, #0x10] + add r2, r4, #0x24 + mov r0, #6 + mla r0, r1, r0, r2 + bl AddItemToStorage + cmp r0, #0 + beq _0203E8D4 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + ldr r0, [r0, #0xe4] + tst r0, #2 + bne _0203E844 + mov r0, #4 + bl sub_02017C50 +_0203E844: + ldr r1, _0203E4B0 ; =_020AFE74 + mov r0, #6 + ldr r6, [r1] + mov r5, #0 + ldr r4, [r6, #0x10] + ldr r2, _0203E508 ; =_0209C850 + mla r3, r4, r0, r6 + ldrsh r3, [r3, #0x28] + str r3, [r6, #0x9c] + ldr r3, [r1] + str r5, [r3, #0xb0] + ldr r4, [r1] + ldrsh r3, [r4, #0xdc] + str r3, [r4, #0xa4] + ldr r3, [r1] + str r5, [r3, #0xb8] + ldr r4, [r1] + ldr r3, [r4, #0x10] + add r1, r4, #0x24 + mla r1, r3, r0, r1 + add r0, r4, #0xe8 + bl sub_0200D670 + ldr r2, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r4, [r2] + ldr r1, _0203EFB0 ; =0x00000277 + add r3, r4, #0xe8 + str r3, [r4, #0xc4] + ldr r2, [r2] + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x2e + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E8D4: + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x34 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E8E8: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + bgt _0203EF9C + ldr r2, [r1] + ldr r0, _0203E4B8 ; =0x0000101C + ldr r1, _0203EFB4 ; =0x00000286 + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + add r0, r0, #0xde + bl sub_02045FD0 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x2e + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E934: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + bl sub_0203F05C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #0x2f + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E964: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #0x33 + strle r1, [r0] + b _0203EF9C +_0203E984: + ldr r0, _0203E4B8 ; =0x0000101C +#ifdef JAPAN + ldr r1, _0203F34C_JP ; =0x00002FEC + add r2, r4, #0x8c +#else + add r2, r4, #0x8c + mov r1, #0x2cc +#endif + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x31 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E9A8: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + bl sub_0203F05C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #0x32 + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203E9D8: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #0x33 + strle r1, [r0] + b _0203EF9C +_0203E9F8: + ldr r0, [r4, #0x10] + add r0, r0, #1 + str r0, [r4, #0x10] + ldr r1, [r1] + ldr r0, [r1, #0x10] + cmp r0, #3 + movlt r0, #0x29 + strlt r0, [r1] + movge r0, #0x3a + strge r0, [r1] + b _0203EF9C +_0203EA24: + ldrb r0, [r4, #0x36] + cmp r0, #0 + moveq r0, #0x40 + streq r0, [r4] + beq _0203EF9C + ldr r0, [r4, #8] + cmp r0, #0 + beq _0203EAAC + cmp r0, #2 + bne _0203EA58 + ldr r4, _0203EFB8 ; =0x00000292 + bl sub_0203F00C + b _0203EA80 +_0203EA58: + cmp r0, #3 + bne _0203EA6C + ldr r4, _0203EFBC ; =0x00000293 + bl sub_0203F00C + b _0203EA80 +_0203EA6C: + cmp r0, #4 + ldrne r4, _0203EFC0 ; =0x00000291 + bne _0203EA80 +#ifdef JAPAN + ldr r4, _0203F35C_JP ; =0x00002468 +#else + mov r4, #0x294 +#endif + bl sub_0203F00C +_0203EA80: + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r2, [r1] + mov r1, r4 + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x3b + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203EAAC: + mov r0, #0x3d + str r0, [r4] + b _0203EF9C +_0203EAB8: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + bl sub_0203F05C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #0x3c + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203EAE8: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #0x3d + strle r1, [r0] + b _0203EF9C +_0203EB08: + mov r0, #5 + bl sub_02017C50 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + ldrsh r0, [r0, #0x38] + bl sub_02010794 + mov r0, #4 + bl RandIntSafe + add r0, r0, #6 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_020107F4 + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r2, [r1] + ldr r1, _0203EFC4 ; =0x00000272 + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x3e + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203EB64: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + bl sub_0203F05C + ldr r0, _0203E4B0 ; =_020AFE74 + mov r3, #0xa + ldr r2, [r0] + mov r1, #0x3f + str r3, [r2, #0x188] + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203EB94: + ldr r2, [r4, #0x188] + sub r0, r2, #1 + str r0, [r4, #0x188] + cmp r2, #0 + ldrle r0, [r1] + movle r1, #0x40 + strle r1, [r0] + b _0203EF9C +_0203EBB4: + ldr r0, [r4, #0x3c] + cmp r0, #0 + moveq r0, #0x4c + streq r0, [r4] + beq _0203EF9C + add r0, sp, #0xcc + SUB_0203D538_STACK_OFFSET_2 + bl InitPreprocessorArgs + bl GetRank + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r2, [r1] + strb r0, [r2, #0xc] + ldr r0, [r1] + ldr r0, [r0, #0x3c] + bl sub_02050C10 + mov r0, #4 + bl sub_02017C50 + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r2, [r1] + ldr r1, _0203EFC8 ; =0x000002A1 + ldr r3, [r2, #0x3c] + add r2, sp, #0xcc + SUB_0203D538_STACK_OFFSET_2 + str r3, [sp, #0xf0 + SUB_0203D538_STACK_OFFSET_2] + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x41 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203EC28: + bl sub_02046C78 + cmp r0, #0 + beq _0203EF9C + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r4, [r0] + bl GetRank + ldrb r1, [r4, #0xc] + cmp r1, r0 + movne r0, #0x42 + strne r0, [r4] + moveq r0, #0x4c + streq r0, [r4] + b _0203EF9C +_0203EC5C: + mov r0, #2 + bl sub_02017C50 + add r0, sp, #0x7c + SUB_0203D538_STACK_OFFSET_2 + bl InitPreprocessorArgs + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + ldrb r0, [r0, #0xc] + str r0, [sp, #0x94 + SUB_0203D538_STACK_OFFSET_2] + bl GetRank + str r0, [sp, #0x98 + SUB_0203D538_STACK_OFFSET_2] + ldr r0, _0203E4B8 ; =0x0000101C + ldr r1, _0203EFCC ; =0x000002A2 + add r2, sp, #0x7c + SUB_0203D538_STACK_OFFSET_2 + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x43 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203ECA8: + bl sub_02046C78 + cmp r0, #0 + ldrne r0, _0203E4B0 ; =_020AFE74 + movne r1, #0x44 + ldrne r0, [r0] + strne r1, [r0] + b _0203EF9C +_0203ECC4: + add r0, sp, #0x2c + SUB_0203D538_STACK_OFFSET_2 + bl InitPreprocessorArgs + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + ldrb r0, [r0, #0xc] + bl GetRankUpEntry + ldr r0, [r0, #8] + str r0, [sp, #0x50 + SUB_0203D538_STACK_OFFSET_2] + bl GetRank + bl GetRankUpEntry + ldr r1, [r0, #8] + ldr r0, [sp, #0x50 + SUB_0203D538_STACK_OFFSET_2] + str r1, [sp, #0x54 + SUB_0203D538_STACK_OFFSET_2] + cmp r0, r1 + ldreq r0, _0203E4B0 ; =_020AFE74 + moveq r1, #0x46 + ldreq r0, [r0] + streq r1, [r0] + beq _0203EF9C + ldr r0, _0203E4B8 ; =0x0000101C + ldr r1, _0203EFD0 ; =0x000002A3 + add r2, sp, #0x2c + SUB_0203D538_STACK_OFFSET_2 + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x45 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203ED34: + bl sub_02046C78 + cmp r0, #0 + ldrne r0, _0203E4B0 ; =_020AFE74 + movne r1, #0x46 + ldrne r0, [r0] + strne r1, [r0] + b _0203EF9C +_0203ED50: + bl GetRank + bl GetRankUpEntry + ldrsh r0, [r0, #0xc] + strh r0, [r4, #0x88] + cmp r0, #0 + bne _0203ED80 + bl sub_02046D20 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x4c + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203ED80: + bl IsStorableItem + cmp r0, #0 + beq _0203EDFC + ldrsh r0, [r4, #0x88] + bl IsThrownItem + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + strh r0, [r4, #0x86] + mov r0, #1 + strb r0, [r4, #0x84] + ldr r0, _0203E4B0 ; =_020AFE74 + ldrsh r3, [r4, #0x88] + ldr r1, [r0] + mov r2, #0 + str r3, [r1, #0x9c] + ldr r1, [r0] + mov r0, #4 + str r2, [r1, #0xb0] + bl sub_02017C50 + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r2, [r1] +#ifdef JAPAN + ldr r1, _0203F370 ; =0x00002478 +#else + mov r1, #0x2a4 +#endif + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x47 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203EDFC: + bl sub_02046D20 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x4c + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203EE14: + bl sub_02046C78 + cmp r0, #0 + ldrne r0, _0203E4B0 ; =_020AFE74 + movne r1, #0x48 + ldrne r0, [r0] + strne r1, [r0] + b _0203EF9C +_0203EE30: + add r0, r4, #0x84 + bl AddItemToStorage + cmp r0, #0 + ldreq r0, _0203E4B0 ; =_020AFE74 + moveq r1, #0x49 + ldreq r0, [r0] + streq r1, [r0] + beq _0203EF9C + bl sub_02046D20 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x4c + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203EE68: + ldrsh r1, [r4, #0x88] + mov r0, #0 + strh r1, [sp, #0xe + SUB_0203D538_STACK_OFFSET] + ldrh r1, [r4, #0x86] + strh r1, [sp, #0xc + SUB_0203D538_STACK_OFFSET] + strb r0, [sp, #0xa + SUB_0203D538_STACK_OFFSET] + bl sub_02046D20 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r0, [r0] + ldr r0, [r0, #0xe4] + tst r0, #1 + moveq r1, #1 + movne r1, #0 + add r0, sp, #0xa + SUB_0203D538_STACK_OFFSET + and r1, r1, #0xff + bl sub_020453F8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x4a + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203EEBC: + bl sub_02046028 +#ifdef JAPAN + cmp r0, #2 + cmpne r0, #3 + beq _0203EF64 + cmp r0, #4 + bne _0203EF9C + ldr r1, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r2, [r1] + ldr r1, _0203EFB4 ; =0x0000245A +#else + mov r4, r0 + cmp r4, #1 + beq _0203EF9C + add r0, sp, #4 + bl sub_02045FD0 + ldrsh r0, [sp, #8] + cmp r0, #0 + bne _0203EF00 + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r1, [r0] + ldrh r0, [r1, #0x84] + strh r0, [sp, #4] + ldrh r0, [r1, #0x86] + strh r0, [sp, #6] + ldrh r0, [r1, #0x88] + strh r0, [sp, #8] +_0203EF00: + cmp r4, #2 + cmpne r4, #3 + beq _0203EF64 + cmp r4, #4 + bne _0203EF9C + ldr r0, _0203E4B0 ; =_020AFE74 + ldr r2, _0203E508 ; =_0209C850 + ldr r0, [r0] + add r1, sp, #4 + add r0, r0, #0xe8 + bl sub_0200D670 + ldr r2, _0203E4B0 ; =_020AFE74 + ldr r0, _0203E4B8 ; =0x0000101C + ldr r4, [r2] + ldr r1, _0203EFB4 ; =0x00000286 + add r3, r4, #0xe8 + str r3, [r4, #0xc4] + ldr r2, [r2] +#endif + add r2, r2, #0x8c + bl sub_02046BE8 + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x4b + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203EF64: + ldr r0, _0203E4B0 ; =_020AFE74 + mov r1, #0x48 + ldr r0, [r0] + str r1, [r0] + b _0203EF9C +_0203EF78: + bl sub_02046C78 + cmp r0, #0 + ldrne r0, _0203E4B0 ; =_020AFE74 + movne r1, #0x4c + ldrne r0, [r0] + strne r1, [r0] + b _0203EF9C +_0203EF94: + mov r0, #1 + b _0203EFA0 +_0203EF9C: + mov r0, #0 +_0203EFA0: + add sp, sp, #0x11c + SUB_0203D538_STACK_OFFSET_2 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0203EFA8: .word 0x00000273 + SUB_0203D538_DATA_OFFSET +_0203EFAC: .word 0x00000275 + SUB_0203D538_DATA_OFFSET +_0203EFB0: .word 0x00000277 + SUB_0203D538_DATA_OFFSET +_0203EFB4: .word 0x00000286 + SUB_0203D538_DATA_OFFSET +#ifdef JAPAN +_0203F34C_JP: .word 0x00002FEC +#endif +_0203EFB8: .word 0x00000292 + SUB_0203D538_DATA_OFFSET +_0203EFBC: .word 0x00000293 + SUB_0203D538_DATA_OFFSET +_0203EFC0: .word 0x00000291 + SUB_0203D538_DATA_OFFSET +#ifdef JAPAN +_0203F35C_JP: .word 0x00002468 +#endif +_0203EFC4: .word 0x00000272 + SUB_0203D538_DATA_OFFSET +_0203EFC8: .word 0x000002A1 + SUB_0203D538_DATA_OFFSET +_0203EFCC: .word 0x000002A2 + SUB_0203D538_DATA_OFFSET +_0203EFD0: .word 0x000002A3 + SUB_0203D538_DATA_OFFSET +#ifdef JAPAN +_0203F370: .word 0x00002478 +#endif + arm_func_end sub_0203D538 + + arm_func_start sub_0203EFD4 +sub_0203EFD4: ; 0x0203EFD4 + stmdb sp!, {r3, lr} + ldr r0, _0203F008 ; =_020AFE74 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl sub_0203F05C + ldr r0, _0203F008 ; =_020AFE74 + ldr r0, [r0] + bl MemFree + ldr r0, _0203F008 ; =_020AFE74 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_0203F008: .word _020AFE74 + arm_func_end sub_0203EFD4 + + arm_func_start sub_0203F00C +sub_0203F00C: ; 0x0203F00C + stmdb sp!, {r3, lr} + ldr r1, _0203F058 ; =_020AFE74 + mvn r0, #1 + ldr r1, [r1] + ldrsb r1, [r1, #6] + cmp r1, r0 + ldmneia sp!, {r3, pc} + mov r0, #0 + mov r1, #3 + mov r2, #1 + bl CreatePortraitBox + ldr r1, _0203F058 ; =_020AFE74 + ldr r2, [r1] + strb r0, [r2, #6] + ldr r1, [r1] + ldrsb r0, [r1, #6] + add r1, r1, #0x190 + bl ShowPortraitInPortraitBox + ldmia sp!, {r3, pc} + .align 2, 0 +_0203F058: .word _020AFE74 + arm_func_end sub_0203F00C + + arm_func_start sub_0203F05C +sub_0203F05C: ; 0x0203F05C + stmdb sp!, {r3, lr} + ldr r0, _0203F0EC ; =_020AFE74 + mvn r1, #1 + ldr r0, [r0] + ldrsb r0, [r0, #4] + cmp r0, r1 + beq _0203F08C + bl CloseParentMenu + ldr r0, _0203F0EC ; =_020AFE74 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #4] +_0203F08C: + ldr r0, _0203F0EC ; =_020AFE74 + mvn r1, #1 + ldr r0, [r0] + ldrsb r0, [r0, #5] + cmp r0, r1 + beq _0203F0B8 + bl CloseDialogueBox + ldr r0, _0203F0EC ; =_020AFE74 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #5] +_0203F0B8: + ldr r0, _0203F0EC ; =_020AFE74 + mvn r1, #1 + ldr r0, [r0] + ldrsb r0, [r0, #6] + cmp r0, r1 + beq _0203F0E4 + bl ClosePortraitBox + ldr r0, _0203F0EC ; =_020AFE74 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #6] +_0203F0E4: + bl sub_02046D20 + ldmia sp!, {r3, pc} + .align 2, 0 +_0203F0EC: .word _020AFE74 + arm_func_end sub_0203F05C + + arm_func_start sub_0203F0F0 +sub_0203F0F0: ; 0x0203F0F0 + stmdb sp!, {r4, lr} + ldr r1, _0203F148 ; =_020AFE78 + ldr r2, _0203F14C ; =_0209C89C + ldr r3, [r1] + mov r4, r0 + ldrsh r1, [r3, #0xc] + add r0, r3, #0xdc + add r1, r3, r1, lsl #2 + ldr r1, [r1, #0x14] + mov r1, r1, lsl #1 + ldrh r1, [r2, r1] + bl GetStringFromFileVeneer + ldr r0, _0203F148 ; =_020AFE78 + mov r3, r4 + ldr r4, [r0] + ldrsh r0, [r4, #0xc] + add r1, r4, #0x64 + add r2, r4, #0x30 + add r0, r4, r0, lsl #2 + ldr r0, [r0, #0x14] + bl sub_0205A4B4 + ldmia sp!, {r4, pc} + .align 2, 0 +_0203F148: .word _020AFE78 +_0203F14C: .word _0209C89C + arm_func_end sub_0203F0F0 + + arm_func_start sub_0203F150 +sub_0203F150: ; 0x0203F150 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0xa0 + mov r6, r0 + mov r5, r1 + mov r0, #0xfc + mov r1, #8 + bl MemAlloc + ldr r2, _0203F340 ; =_020AFE78 + mvn r1, #1 + str r0, [r2] + mov ip, #0 + strb r1, [r0] + mov r0, ip +_0203F184: + add r1, ip, #1 + ldr r3, [r2] + mov r1, r1, lsl #0x10 + add r3, r3, ip, lsl #2 + mov ip, r1, asr #0x10 + str r0, [r3, #0x14] + cmp ip, #6 + blt _0203F184 + ldr r3, _0203F344 ; =_0209C8C8 + ldr r2, _0203F340 ; =_020AFE78 + mov r1, #0x18 + ldr ip, [r2] + mla r1, r5, r1, r3 + strh r0, [ip, #0xe] + b _0203F1E0 +_0203F1C0: + ldr r0, [r2] + ldr r3, [r1, lr, lsl #2] + add r0, r0, lr, lsl #2 + str r3, [r0, #0x14] + ldr r3, [r2] + ldrsh r0, [r3, #0xe] + add r0, r0, #1 + strh r0, [r3, #0xe] +_0203F1E0: + ldr ip, [r2] + ldrsh lr, [ip, #0xe] + cmp lr, #6 + bge _0203F1FC + ldr r0, [r1, lr, lsl #2] + cmp r0, #0 + bne _0203F1C0 +_0203F1FC: + mov r3, #0 + strh r3, [ip, #0xc] + ldr r0, _0203F340 ; =_020AFE78 + sub r2, r3, #1 + ldr r1, [r0] + mov ip, #1 + strh r2, [r1, #0x10] + ldr r1, [r0] + strh r3, [r1, #0x12] + ldr r2, [r0] + mov r1, r6 + strb ip, [r2, #0x2c] + ldr r3, [r0] + mov r2, #0x78 + str r5, [r3, #4] + ldr r3, [r0] + str ip, [r3, #8] + ldr r0, [r0] + add r0, r0, #0x64 + bl memcpy + ldr r0, _0203F340 ; =_020AFE78 + ldr r1, _0203F348 ; =0x00000975 + ldr r3, [r0] + mov r0, #0x10 + str r0, [sp, #0x14] + strh r1, [sp, #0x10] + ldrsh r2, [r3, #0xc] + add r0, r3, #0xdc + mov r1, #0xc + str r1, [sp, #0xc] + str r0, [sp, #0x50] + str r2, [sp, #8] + ldrsh r2, [r3, #0xc] + ldr r1, _0203F34C ; =_0209C89C + add r2, r3, r2, lsl #2 + ldr r2, [r2, #0x14] + mov r2, r2, lsl #1 + ldrh r1, [r1, r2] + bl GetStringFromFileVeneer + ldr r0, _0203F340 ; =_020AFE78 + ldr r2, [r0] + ldr r0, [r2, #4] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0203F324 +_0203F2B0: ; jump table + b _0203F2C0 ; case 0 + b _0203F2C0 ; case 1 + b _0203F2FC ; case 2 + b _0203F2FC ; case 3 +_0203F2C0: + cmp r0, #1 + ldrsh r4, [r2, #0xe] + ldreq r1, _0203F350 ; =0x60481C3B + ldr r0, _0203F354 ; =_0209C8A8 + str r4, [sp] + mov r4, #1 + ldrne r1, _0203F358 ; =0x60489C3B + ldr r3, _0203F35C ; =sub_0203F0F0 + add r2, sp, #8 + str r4, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _0203F360 ; =sub_0203F928 + mov r4, r0 + bl SetUnkAdvancedTextBoxWindowFn + b _0203F324 +_0203F2FC: + ldrsh r4, [r2, #0xe] + ldr r0, _0203F354 ; =_0209C8A8 + ldr r1, _0203F364 ; =0x60089C3B + str r4, [sp] + mov r4, #1 + ldr r3, _0203F35C ; =sub_0203F0F0 + add r2, sp, #8 + str r4, [sp, #4] + bl CreateAdvancedTextBox + mov r4, r0 +_0203F324: + ldr r0, _0203F340 ; =_020AFE78 + ldr r1, [r0] + strb r4, [r1] + ldr r0, [r0] + ldrsb r0, [r0] + add sp, sp, #0xa0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0203F340: .word _020AFE78 +_0203F344: .word _0209C8C8 +#ifdef JAPAN +_0203F348: .word 0x00002345 +#else +_0203F348: .word 0x00000975 +#endif +_0203F34C: .word _0209C89C +_0203F350: .word 0x60481C3B +_0203F354: .word _0209C8A8 +_0203F358: .word 0x60489C3B +_0203F35C: .word sub_0203F0F0 +_0203F360: .word sub_0203F928 +_0203F364: .word 0x60089C3B + arm_func_end sub_0203F150 + + arm_func_start sub_0203F368 +sub_0203F368: ; 0x0203F368 + stmdb sp!, {r3, r4, r5, lr} + ldr r2, _0203F394 ; =_020AFE78 + mov r5, r0 + ldr r0, [r2] + mov r4, r1 + add r0, r0, #0x64 + bl sub_0205B0B8 + str r0, [r5] + mov r0, #0xc + str r0, [r4] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0203F394: .word _020AFE78 + arm_func_end sub_0203F368 + + arm_func_start sub_0203F398 +sub_0203F398: ; 0x0203F398 + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #0x10 + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r4, [r0] + cmp r4, #0 + moveq r0, #1 + beq _0203F8CC + ldr r0, [r4, #8] + cmp r0, #4 + addls pc, pc, r0, lsl #2 + b _0203F8C8 +_0203F3C4: ; jump table + b _0203F3D8 ; case 0 + b _0203F404 ; case 1 + b _0203F8C8 ; case 2 + b _0203F83C ; case 3 + b _0203F898 ; case 4 +_0203F3D8: + ldrsb r0, [r4] + bl sub_020307EC + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202810C + ldr r0, _0203F8D4 ; =_020AFE78 + mov r1, #1 + ldr r0, [r0] + str r1, [r0, #8] + b _0203F8C8 +_0203F404: + ldrsb r0, [r4] + mov r1, #0 + bl SetUnkAdvancedTextBoxFn + ldr r0, _0203F8D4 ; =_020AFE78 +#ifdef JAPAN + ldr r1, [r0] + ldrb r0, [r1, #0x2c] + cmp r0, #0 + beq _0203F464 + ldrsb r0, [r1] + ldrsh r1, [r1, #0x12] +#else + ldr r2, [r0] + ldrb r0, [r2, #0x2c] + cmp r0, #0 + beq _0203F464 + ldrsh r0, [r2, #0xc] + add r0, r2, r0, lsl #2 + ldr r0, [r0, #0x14] + cmp r0, #1 + ldreqsh r1, [r2, #0x12] + ldrsb r0, [r2] + movne r1, #0 +#endif + bl sub_02030A50 + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r0, [r0] + ldrsb r0, [r0] + bl SetAdvancedTextBoxField0x1C2 + ldr r0, _0203F8D4 ; =_020AFE78 + mov r1, #0 + ldr r0, [r0] + strb r1, [r0, #0x2c] +_0203F464: + add r1, sp, #0xc + mov r0, #0 + bl sub_02006498 + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_02030A18 + ldr r1, _0203F8D4 ; =_020AFE78 + ldr r2, [r1] + strh r0, [r2, #0xc] + ldr r3, [r1] + ldrsh r2, [r3, #0xc] + ldrsh r0, [r3, #0x10] + cmp r0, r2 + strneh r2, [r3, #0x10] + ldrne r0, [r1] + movne r1, #1 + strneb r1, [r0, #0x2c] + bne _0203F8C8 + add r0, r3, r2, lsl #2 + ldr r0, [r0, #0x14] + cmp r0, #1 + ldrsb r0, [r3] + bne _0203F7EC + ldr r1, _0203F8D8 ; =sub_0203F368 + bl SetUnkAdvancedTextBoxFn + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r0, [r0] + ldrsb r0, [r0] + bl GetAdvancedTextBoxFlags2 + ldr r1, _0203F8D4 ; =_020AFE78 + mov r4, r0 + ldr r0, [r1] + ldrsb r0, [r0] + bl sub_02028354 + cmp r0, #3 + beq _0203F508 + bl sub_0203F8EC + cmp r0, #0 + movne r1, #1 + bne _0203F50C +_0203F508: + mov r1, #0 +_0203F50C: + ldr r0, _0203F8D4 ; =_020AFE78 + and r5, r1, #0xff + ldr r0, [r0] + ldrsb r0, [r0] + bl IsAdvancedTextBoxActive + cmp r0, #0 + bne _0203F588 + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_02030908 + cmp r0, #0 + blt _0203F558 + bl sub_0203F8EC + cmp r0, #0 + beq _0203F558 + bl sub_02001808 + cmp r0, #0xa000 + bge _0203F560 +_0203F558: + mov r0, #1 + b _0203F8CC +_0203F560: + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202812C + ldr r0, _0203F8D4 ; =_020AFE78 + mov r1, #3 + ldr r0, [r0] + mov r5, #0 + str r1, [r0, #8] + b _0203F748 +_0203F588: + ldrh r0, [sp, #0xc] + tst r0, #8 + cmpne r5, #0 + beq _0203F5FC + bl sub_0203F8EC + cmp r0, #0 + beq _0203F748 + ldr r0, _0203F8D4 ; =_020AFE78 + mov r1, #0 + ldr r0, [r0] + ldrsb r0, [r0] + bl PlayAdvancedTextBoxInputSound + bl sub_02001808 + cmp r0, #0xa000 + blt _0203F748 + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_02030EF0 + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202812C + ldr r0, _0203F8D4 ; =_020AFE78 + mov r1, #3 + ldr r0, [r0] + mov r5, #0 + str r1, [r0, #8] + b _0203F748 +_0203F5FC: + tst r0, #0x40 + bne _0203F60C + tst r4, #0x40000 + beq _0203F698 +_0203F60C: + cmp r5, #0 + beq _0203F698 + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r2, [r0] + ldrsh r1, [r2, #0x12] + cmp r1, #0 + bne _0203F660 + ldrsh r1, [r2, #0xba] + cmp r1, #0 + beq _0203F748 + sub r1, r1, #1 + strh r1, [r2, #0xba] + ldr r0, [r0] + mov r1, #1 + strb r1, [r0, #0x2c] + ldrh r0, [sp, #0xc] + tst r0, #0x40 + beq _0203F748 + mov r0, #3 + bl PlaySeVolumeWrapper + b _0203F748 +_0203F660: + ldrsb r0, [r2] + bl sub_02030A64 + cmp r0, #0 + bne _0203F680 + tst r4, #0x40000 + bne _0203F680 + mov r0, #3 + bl PlaySeVolumeWrapper +_0203F680: + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r1, [r0] + ldrsh r0, [r1, #0x12] + sub r0, r0, #1 + strh r0, [r1, #0x12] + b _0203F748 +_0203F698: + tst r0, #0x80 + bne _0203F6A8 + tst r4, #0x80000 + beq _0203F748 +_0203F6A8: + cmp r5, #0 + beq _0203F748 + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r3, [r0] + ldrsh r1, [r3, #0x12] + cmp r1, #8 + bne _0203F708 + ldrsh r2, [r3, #0xba] + add r1, r2, #9 + add r1, r3, r1 + ldrb r1, [r1, #0xbc] + cmp r1, #0 + beq _0203F748 + add r1, r2, #1 + strh r1, [r3, #0xba] + ldr r0, [r0] + mov r1, #1 + strb r1, [r0, #0x2c] + ldrh r0, [sp, #0xc] + tst r0, #0x80 + beq _0203F748 + mov r0, #3 + bl PlaySeVolumeWrapper + b _0203F748 +_0203F708: + ldrsb r0, [r3] + bl sub_02030A64 + cmp r0, #8 + bne _0203F728 + tst r4, #0x80000 + bne _0203F728 + mov r0, #3 + bl PlaySeVolumeWrapper +_0203F728: + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r2, [r0] + ldrsh r0, [r2, #0x12] + add r1, r0, #1 + add r0, r2, r1 + ldrb r0, [r0, #0xbc] + cmp r0, #0 + strneh r1, [r2, #0x12] +_0203F748: + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r1, [r0] + ldrsh r0, [r1, #0xba] + add r0, r0, #9 + add r0, r1, r0 + ldrb r0, [r0, #0xbc] + cmp r0, #0 + ldrsb r0, [r1] + mov r1, #0x40000000 + beq _0203F778 + bl sub_02030A90 + b _0203F77C +_0203F778: + bl sub_02030A74 +_0203F77C: + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r1, [r0] + ldrsh r0, [r1, #0xba] + cmp r0, #0 + ldrsb r0, [r1] + mov r1, #0x20000000 + bne _0203F7A0 + bl sub_02030A74 + b _0203F7A4 +_0203F7A0: + bl sub_02030A90 +_0203F7A4: + cmp r5, #0 + beq _0203F7D8 + ldr r0, _0203F8D4 ; =_020AFE78 + mov r3, #0xc + ldr r0, [r0] + mov r1, #1 + ldrsh r4, [r0, #0x12] + ldrsb r0, [r0] + mov r2, #3 + smulbb r3, r4, r3 + add r3, r3, #0x11 + bl sub_02030978 + b _0203F8C8 +_0203F7D8: + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_020288DC + b _0203F8C8 +_0203F7EC: + mov r1, #0x20000000 + bl sub_02030A74 + ldr r0, _0203F8D4 ; =_020AFE78 + mov r1, #0x40000000 + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_02030A74 + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r0, [r0] + ldrsb r0, [r0] + bl IsAdvancedTextBoxActive + cmp r0, #0 + beq _0203F834 + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_020288DC + b _0203F8C8 +_0203F834: + mov r0, #1 + b _0203F8CC +_0203F83C: + ldrsh r2, [r4, #0xba] + ldrsh r0, [r4, #0x12] + ldr r3, _0203F8DC ; =_0209E912 + ldr r1, _0203F8E0 ; =STATUSES_FULL_DESCRIPTION_STRING_IDS + add r0, r2, r0 + add r0, r4, r0 + ldrb r4, [r0, #0xbc] + mov r2, #0 + ldr r0, _0203F8E4 ; =_0209C8B8 + mov r5, r4, lsl #2 + ldrh r4, [r3, r5] + ldrh r3, [r1, r5] + ldr r1, _0203F8E8 ; =0x00001013 + stmia sp, {r2, r4} + str r2, [sp, #8] + bl CreateScrollBoxSingle + ldr r1, _0203F8D4 ; =_020AFE78 + mov r2, #4 + ldr r3, [r1] + strb r0, [r3, #1] + ldr r0, [r1] + str r2, [r0, #8] + b _0203F8C8 +_0203F898: + ldrsb r0, [r4, #1] + bl IsScrollBoxActive + cmp r0, #0 + bne _0203F8C8 + ldr r0, _0203F8D4 ; =_020AFE78 + ldr r0, [r0] + ldrsb r0, [r0, #1] + bl CloseScrollBox + ldr r0, _0203F8D4 ; =_020AFE78 + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #8] +_0203F8C8: + mov r0, #0 +_0203F8CC: + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0203F8D4: .word _020AFE78 +_0203F8D8: .word sub_0203F368 +_0203F8DC: .word _0209E912 +_0203F8E0: .word STATUSES_FULL_DESCRIPTION_STRING_IDS +_0203F8E4: .word _0209C8B8 +_0203F8E8: .word 0x00001013 + arm_func_end sub_0203F398 + + arm_func_start sub_0203F8EC +sub_0203F8EC: ; 0x0203F8EC + ldr r0, _0203F924 ; =_020AFE78 + mov r1, #0 + ldr r2, [r0] + b _0203F914 +_0203F8FC: + add r0, r2, r1 + ldrb r0, [r0, #0xbc] + cmp r0, #0 + movne r0, #1 + bxne lr + add r1, r1, #1 +_0203F914: + cmp r1, #0x1e + blt _0203F8FC + mov r0, #0 + bx lr + .align 2, 0 +_0203F924: .word _020AFE78 + arm_func_end sub_0203F8EC + + arm_func_start sub_0203F928 +sub_0203F928: ; 0x0203F928 + stmdb sp!, {r4, lr} + mov r4, r0 + cmp r1, #0 + ldmeqia sp!, {r4, pc} + bl sub_02030908 + ldr r2, _0203F970 ; =_020AFE78 + mov r3, #0xc + ldr ip, [r2] + mov r1, #1 + strh r0, [ip, #0x12] + ldr r2, [r2] + mov r0, r4 + ldrsh ip, [r2, #0x12] + mov r2, #3 + smulbb r3, ip, r3 + add r3, r3, #0x11 + bl sub_02030978 + ldmia sp!, {r4, pc} + .align 2, 0 +_0203F970: .word _020AFE78 + arm_func_end sub_0203F928 + + arm_func_start sub_0203F974 +sub_0203F974: ; 0x0203F974 + ldr r0, _0203F988 ; =_020AFE78 + ldr ip, _0203F98C ; =SetAdvancedTextBoxState5 + ldr r0, [r0] + ldrsb r0, [r0] + bx ip + .align 2, 0 +_0203F988: .word _020AFE78 +_0203F98C: .word SetAdvancedTextBoxState5 + arm_func_end sub_0203F974 + + arm_func_start sub_0203F990 +sub_0203F990: ; 0x0203F990 + stmdb sp!, {r3, lr} + ldr r0, _0203F9C8 ; =_020AFE78 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + bl CloseAdvancedTextBox + ldr r0, _0203F9C8 ; =_020AFE78 + ldr r0, [r0] + bl MemFree + ldr r0, _0203F9C8 ; =_020AFE78 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_0203F9C8: .word _020AFE78 + arm_func_end sub_0203F990 + + arm_func_start sub_0203F9CC +sub_0203F9CC: ; 0x0203F9CC + stmdb sp!, {r3, r4, r5, lr} + ldr r1, _0203FA50 ; =_022AADFC + mov r2, #0 + mov r5, r0 + str r2, [r1] + ldr r4, [r5, #0xb4] + ldr r0, _0203FA54 ; =_022AAE00 + mov r1, r4 + bl GetMonsterName + ldr r0, _0203FA58 ; =_022AAE2A +#ifdef JAPAN + add r1, r4, #0x120 +#else + add r1, r4, #0x124 +#endif + mov r2, #0x22 + bl memcpy + ldrb r2, [r4, #7] + ldr r1, _0203FA50 ; =_022AADFC + mov r0, #0 + strb r2, [r1, #0x2c] + str r5, [r1] + strb r0, [r1, #0x58] + ldrsh r2, [r4, #4] + ldr r0, _0203FA5C ; =0x000001A2 + ldr r3, _0203FA60 ; =_022AAE58 + cmp r2, r0 + moveq r0, #1 + streqb r0, [r1, #0x58] + ldrsh r1, [r4, #2] + ldr r0, _0203FA50 ; =_022AADFC + strh r1, [r0, #0x5a] + add r0, r4, #0x9c + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0203FA50: .word _022AADFC +_0203FA54: .word _022AAE00 +_0203FA58: .word _022AAE2A +_0203FA5C: .word 0x000001A2 +_0203FA60: .word _022AAE58 + arm_func_end sub_0203F9CC + + arm_func_start sub_0203FA64 +sub_0203FA64: ; 0x0203FA64 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x14 + ldr r1, _0203FBBC ; =TEAM_MEMBER_TABLE_PTR + mov sl, r0 + mov r0, #0x44 + smulbb r2, sl, r0 + ldr r1, [r1] + mov r4, #0x46 + ldrb r0, [r1, r2] + add r8, r1, r2 + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + moveq r0, #0 + beq _0203FBB4 + ldr r1, _0203FBC0 ; =_022AADFC + mov r2, #0 + mov r0, sl + str r2, [r1] + bl sub_02056410 + cmp r0, #0 + mov r0, sl + beq _0203FAD4 + bl sub_020564B0 + cmp r0, #0 + movne r4, #0x59 + b _0203FAE4 +_0203FAD4: + bl sub_02056F60 + cmp r0, #0 + movne r4, #0x44 + moveq r4, #0x57 +_0203FAE4: + add r0, sp, #0 + add r1, r8, #0x3a + mov r2, #0xa + bl StrncpySimpleNoPadSafe + ldr r0, _0203FBC4 ; =_022AAE00 + ldr r1, _0203FBC8 ; =_0209C96C + add r3, sp, #0 + and r2, r4, #0xff + bl SprintfStatic__0204174C + ldrsh r1, [r8, #4] + ldr r0, _0203FBC0 ; =_022AADFC + ldr r3, _0203FBCC ; =_022AAE58 + strh r1, [r0, #0x5a] + add r4, r8, #0x14 + ldmia r4, {r0, r1, r2} + stmia r3, {r0, r1, r2} + ldrsh r0, [r8, #4] + mov r1, r4 + bl GetPpIncrease + mov r6, #0 + ldr r5, _0203FBD0 ; =_022AAE2A + ldr r4, _0203FBC0 ; =_022AADFC + mov r7, r0 + mov fp, r6 +_0203FB44: + mov r0, #6 + mla sb, r6, r0, r8 + ldrh r1, [sb, #0x24] + add r0, r5, r6, lsl #3 + bl InitMove + ldrb r1, [sb, #0x22] + add r2, r4, r6, lsl #3 + add r0, r5, r6, lsl #3 + strb r1, [r2, #0x2e] + strh r7, [r2, #0x30] + strb fp, [r2, #0x34] + ldrb r1, [sb, #0x26] + strb r1, [r2, #0x35] + bl GetMaxPp + add r1, r6, #1 + add r2, r4, r6, lsl #3 + mov r1, r1, lsl #0x10 + mov r6, r1, lsr #0x10 + strb r0, [r2, #0x34] + cmp r6, #4 + blo _0203FB44 + mov r0, sl + bl sub_020564B0 + ldr r1, _0203FBC0 ; =_022AADFC + strb r0, [r1, #0x2c] + ldrsh r0, [r8, #4] + bl sub_02041724 + mov r0, #1 +_0203FBB4: + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0203FBBC: .word TEAM_MEMBER_TABLE_PTR +_0203FBC0: .word _022AADFC +_0203FBC4: .word _022AAE00 +_0203FBC8: .word _0209C96C +_0203FBCC: .word _022AAE58 +_0203FBD0: .word _022AAE2A + arm_func_end sub_0203FA64 + + arm_func_start sub_0203FBD4 +sub_0203FBD4: ; 0x0203FBD4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x14 + ldr r1, _0203FCFC ; =TEAM_MEMBER_TABLE_PTR + mov r2, #0x68 + ldr r1, [r1] + ldr r3, _0203FD00 ; =_022AADFC + add r1, r1, #0x9000 + ldr r1, [r1, #0x84c] + mov r4, #0 + smlabb r8, r0, r2, r1 + str r4, [r3] + ldrsh r0, [r8, #8] + sub r1, r4, #1 + cmp r0, r1 + streqb r4, [r3, #0x2c] + beq _0203FC20 + bl sub_020564B0 + ldr r1, _0203FD00 ; =_022AADFC + strb r0, [r1, #0x2c] +_0203FC20: + ldr r0, _0203FD00 ; =_022AADFC + add r1, r8, #0x5e + ldrb r0, [r0, #0x2c] + mov r2, #0xa + cmp r0, #0 + movne r4, #0x59 + add r0, sp, #0 + moveq r4, #0x46 + bl StrncpySimpleNoPadSafe + ldr r0, _0203FD04 ; =_022AAE00 + ldr r1, _0203FD08 ; =_0209C96C + add r3, sp, #0 + and r2, r4, #0xff + bl SprintfStatic__0204174C + ldrsh r0, [r8, #0xc] + add r1, r8, #0x4c + bl GetPpIncrease + ldr r5, _0203FD0C ; =_022AAE2A + ldr r4, _0203FD00 ; =_022AADFC + mov r7, r0 + mov r6, #0 +_0203FC74: + add r0, r8, r6, lsl #3 + ldrh r1, [r0, #0x20] + add r0, r5, r6, lsl #3 + bl InitMove + add r3, r8, r6, lsl #3 + ldrb r1, [r3, #0x1c] + add r2, r4, r6, lsl #3 + add r0, r5, r6, lsl #3 + strb r1, [r2, #0x2e] + strh r7, [r2, #0x30] + ldrb r1, [r3, #0x22] + strb r1, [r2, #0x34] + ldrb r1, [r3, #0x23] + strb r1, [r2, #0x35] + bl GetMaxPp + add r1, r6, #1 + add r2, r4, r6, lsl #3 + mov r1, r1, lsl #0x10 + mov r6, r1, lsr #0x10 + strb r0, [r2, #0x34] + cmp r6, #4 + blo _0203FC74 + ldrsh r0, [r8, #0xc] + bl sub_02041724 + ldrsh r1, [r8, #0xc] + ldr r0, _0203FD00 ; =_022AADFC + ldr r3, _0203FD10 ; =_022AAE58 + strh r1, [r0, #0x5a] + add r0, r8, #0x4c + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + mov r0, #1 + add sp, sp, #0x14 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0203FCFC: .word TEAM_MEMBER_TABLE_PTR +_0203FD00: .word _022AADFC +_0203FD04: .word _022AAE00 +_0203FD08: .word _0209C96C +_0203FD0C: .word _022AAE2A +_0203FD10: .word _022AAE58 + arm_func_end sub_0203FBD4 + + arm_func_start sub_0203FD14 +sub_0203FD14: ; 0x0203FD14 + ldr ip, _0203FD24 ; =InitMove + mov r1, r0 + ldr r0, _0203FD28 ; =LAST_NEW_MOVE + bx ip + .align 2, 0 +_0203FD24: .word InitMove +_0203FD28: .word LAST_NEW_MOVE + arm_func_end sub_0203FD14 + + arm_func_start sub_0203FD2C +sub_0203FD2C: ; 0x0203FD2C + ldr r0, _0203FD34 ; =LAST_NEW_MOVE + bx lr + .align 2, 0 +_0203FD34: .word LAST_NEW_MOVE + arm_func_end sub_0203FD2C + + arm_func_start sub_0203FD38 +sub_0203FD38: ; 0x0203FD38 + ldr r0, _0203FD40 ; =_022AAE2A + bx lr + .align 2, 0 +_0203FD40: .word _022AAE2A + arm_func_end sub_0203FD38 + + arm_func_start sub_0203FD44 +sub_0203FD44: ; 0x0203FD44 + stmdb sp!, {r4, lr} + ldr r4, [r0, #0xb4] + ldr r1, _0203FD74 ; =_022AAE2A +#ifdef JAPAN + add r0, r4, #0x120 +#else + add r0, r4, #0x124 +#endif + mov r2, #0x22 + bl memcpy + ldr r1, _0203FD78 ; =_022AADFC + ldr r0, _0203FD7C ; =_020AFE7C + ldrb r1, [r1, #0x2c] + strb r1, [r4, #7] + ldrsh r0, [r0, #2] + ldmia sp!, {r4, pc} + .align 2, 0 +_0203FD74: .word _022AAE2A +_0203FD78: .word _022AADFC +_0203FD7C: .word _020AFE7C + arm_func_end sub_0203FD44 + + arm_func_start sub_0203FD80 +sub_0203FD80: ; 0x0203FD80 + stmdb sp!, {r3, r4, r5, lr} + ldr r2, _0203FDE0 ; =TEAM_MEMBER_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + ldr ip, _0203FDE4 ; =_022AADFC + mla r5, r0, r1, r2 + mov r4, #0 + mov r0, #6 +_0203FDA0: + mla lr, r4, r0, r5 + add r3, ip, r4, lsl #3 + ldrb r2, [r3, #0x2e] + add r1, r4, #1 + mov r1, r1, lsl #0x10 + strb r2, [lr, #0x22] + ldrh r2, [r3, #0x32] + mov r4, r1, lsr #0x10 + cmp r4, #4 + strh r2, [lr, #0x24] + ldrb r1, [r3, #0x35] + strb r1, [lr, #0x26] + blo _0203FDA0 + ldr r0, _0203FDE8 ; =_020AFE7C + ldrsh r0, [r0, #2] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0203FDE0: .word TEAM_MEMBER_TABLE_PTR +_0203FDE4: .word _022AADFC +_0203FDE8: .word _020AFE7C + arm_func_end sub_0203FD80 + + arm_func_start sub_0203FDEC +sub_0203FDEC: ; 0x0203FDEC + stmdb sp!, {r4, lr} + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetActiveTeamMember + ldr lr, _0203FE54 ; =_022AADFC + mov r4, #0 +_0203FE04: + add ip, lr, r4, lsl #3 + ldrb r2, [ip, #0x2e] + add r3, r0, r4, lsl #3 + add r1, r4, #1 + strb r2, [r3, #0x1c] + ldrh r2, [ip, #0x30] + mov r1, r1, lsl #0x10 + mov r4, r1, lsr #0x10 + strh r2, [r3, #0x1e] + ldrh r1, [ip, #0x32] + cmp r4, #4 + strh r1, [r3, #0x20] + ldrb r1, [ip, #0x34] + strb r1, [r3, #0x22] + ldrb r1, [ip, #0x35] + strb r1, [r3, #0x23] + blo _0203FE04 + ldr r0, _0203FE58 ; =_020AFE7C + ldrsh r0, [r0, #2] + ldmia sp!, {r4, pc} + .align 2, 0 +_0203FE54: .word _022AADFC +_0203FE58: .word _020AFE7C + arm_func_end sub_0203FDEC + + arm_func_start sub_0203FE5C +sub_0203FE5C: ; 0x0203FE5C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #8 + mov r7, r0 + mov r6, r1 + mov r0, #0x3fc + mov r1, #8 + mov r5, r2 + mov r4, r3 + bl MemAlloc + ldr r1, _02040154 ; =_020AFE7C + mvn r2, #1 + str r0, [r1, #8] + strb r2, [r0] + ldr r0, [r1, #0xc] + ldr r2, _02040154 ; =_020AFE7C + cmp r0, r7 + strne r7, [r1, #0xc] + movne r0, #0 + strneh r0, [r1, #2] + ldr r0, _02040154 ; =_020AFE7C + ldr r3, _02040158 ; =0x00000A3E + ldrsh r1, [r0, #4] + mov r7, #0x17 + cmp r1, r6 + strneh r6, [r0, #4] + movne r1, #0 + strneh r1, [r0, #2] + ldr r0, [r2, #8] + mov r1, #0x10 + str r1, [r0, #0x10] + ldr r0, [r2, #8] + str r1, [r0, #8] + ldr r0, [r2, #8] + mov r1, #0 + strh r3, [r0, #0xc] + ldr r0, [r2, #8] + ldr r3, _0204015C ; =_022AAE00 + str r7, [r0, #0x98] + ldr r0, [r2, #8] + str r1, [r0, #0x64] + ldr r0, [r2, #8] + str r3, [r0, #0x4c] + ldr r0, [r2, #8] + strb r1, [r0, #0x3f8] + ldr r0, [r2, #8] + str r4, [r0, #0x3f4] + ldr r0, [r2, #0xc] + cmp r0, #7 + addls pc, pc, r0, lsl #2 + b _0203FF44 +_0203FF24: ; jump table + b _02040084 ; case 0 + b _0203FF44 ; case 1 + b _0203FFAC ; case 2 + b _0204003C ; case 3 + b _0203FF44 ; case 4 + b _0203FF44 ; case 5 + b _0203FFF4 ; case 6 + b _0203FF7C ; case 7 +_0203FF44: + mov r1, #0 + str r1, [sp] + ldr r0, _02040154 ; =_020AFE7C + str r1, [sp, #4] + ldr r2, [r0, #8] + ldr r0, _02040160 ; =_0209C93C + ldr r1, _02040164 ; =0x00401803 + ldr r3, _02040168 ; =sub_020401A8 + add r2, r2, #4 + bl CreateAdvancedTextBox + ldr r1, _02040154 ; =_020AFE7C + ldr r1, [r1, #8] + strb r0, [r1] + b _020400FC +_0203FF7C: + str r1, [sp] + str r1, [sp, #4] + ldr r2, [r2, #8] + ldr r0, _0204016C ; =_0209C94C + ldr r1, _02040170 ; =0x00400800 + ldr r3, _02040168 ; =sub_020401A8 + add r2, r2, #4 + bl CreateAdvancedTextBox + ldr r1, _02040154 ; =_020AFE7C + ldr r1, [r1, #8] + strb r0, [r1] + b _020400FC +_0203FFAC: + ldr r0, [r2, #8] + mov r3, #1 + strb r3, [r0, #0x3f8] + ldr r4, [r2, #8] + ldr r0, _02040174 ; =_0209C92C + add r3, r4, #0x3e0 + str r3, [r4, #0x64] + str r1, [sp] + str r1, [sp, #4] + ldr r2, [r2, #8] + ldr r1, _02040164 ; =0x00401803 + ldr r3, _02040168 ; =sub_020401A8 + add r2, r2, #4 + bl CreateAdvancedTextBox + ldr r1, _02040154 ; =_020AFE7C + ldr r1, [r1, #8] + strb r0, [r1] + b _020400FC +_0203FFF4: + ldr r0, [r2, #8] + mov r3, #1 + strb r3, [r0, #0x3f8] + ldr r4, [r2, #8] + ldr r0, _02040174 ; =_0209C92C + add r3, r4, #0x3e0 + str r3, [r4, #0x64] + str r1, [sp] + str r1, [sp, #4] + ldr r2, [r2, #8] + ldr r1, _02040178 ; =0x00401A03 + ldr r3, _02040168 ; =sub_020401A8 + add r2, r2, #4 + bl CreateAdvancedTextBox + ldr r1, _02040154 ; =_020AFE7C + ldr r1, [r1, #8] + strb r0, [r1] + b _020400FC +_0204003C: + ldr r0, [r2, #8] + mov r3, #1 + strb r3, [r0, #0x3f8] + ldr r4, [r2, #8] + ldr r0, _0204017C ; =_0209C95C + add r3, r4, #0x3e0 + str r3, [r4, #0x64] + str r1, [sp] + str r1, [sp, #4] + ldr r2, [r2, #8] + ldr r1, _02040180 ; =0x00400A00 + ldr r3, _02040168 ; =sub_020401A8 + add r2, r2, #4 + bl CreateAdvancedTextBox + ldr r1, _02040154 ; =_020AFE7C + ldr r1, [r1, #8] + strb r0, [r1] + b _020400FC +_02040084: + cmp r6, #1 + ble _020400C8 + ldr r1, [r2, #8] + mov r0, #1 + str r5, [r1, #4] + str r6, [sp] + str r0, [sp, #4] + ldr r2, [r2, #8] + ldr r0, _02040160 ; =_0209C93C + ldr r1, _02040184 ; =0x00409823 + ldr r3, _02040168 ; =sub_020401A8 + add r2, r2, #4 + bl CreateAdvancedTextBox + ldr r1, _02040154 ; =_020AFE7C + ldr r1, [r1, #8] + strb r0, [r1] + b _020400FC +_020400C8: + ldr r3, [r2, #8] + ldr r0, _02040160 ; =_0209C93C + str r1, [r3, #4] + str r1, [sp] + str r1, [sp, #4] + ldr r2, [r2, #8] + ldr r1, _02040188 ; =0x00401823 + ldr r3, _02040168 ; =sub_020401A8 + add r2, r2, #4 + bl CreateAdvancedTextBox + ldr r1, _02040154 ; =_020AFE7C + ldr r1, [r1, #8] + strb r0, [r1] +_020400FC: + ldr r0, _02040154 ; =_020AFE7C + ldr r0, [r0, #8] + ldrsb r0, [r0] + bl sub_02030A18 + ldr r1, _02040154 ; =_020AFE7C + ldr r1, [r1, #8] + add r1, r1, #0x300 + strh r0, [r1, #0xe8] + mov r0, #1 + bl sub_0204027C + bl PrintMoveOptionMenu + ldr r1, _02040154 ; =_020AFE7C + mov r2, #0 + ldr r0, [r1, #8] + strb r2, [r0, #0x3e5] + ldr r0, [r1, #8] + add r0, r0, #0x300 + strh r2, [r0, #0xe6] + ldr r0, [r1, #8] + ldrsb r0, [r0] + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02040154: .word _020AFE7C +#ifdef JAPAN +_02040158: .word 0x00000879 +#else +_02040158: .word 0x00000A3E +#endif +_0204015C: .word _022AAE00 +_02040160: .word _0209C93C +_02040164: .word 0x00401803 +_02040168: .word sub_020401A8 +_0204016C: .word _0209C94C +_02040170: .word 0x00400800 +_02040174: .word _0209C92C +_02040178: .word 0x00401A03 +_0204017C: .word _0209C95C +_02040180: .word 0x00400A00 +_02040184: .word 0x00409823 +_02040188: .word 0x00401823 + arm_func_end sub_0203FE5C + + arm_func_start sub_0204018C +sub_0204018C: ; 0x0204018C + ldr ip, _02040198 ; =sub_0203FE5C + mov r3, #0 + bx ip + .align 2, 0 +_02040198: .word sub_0203FE5C + arm_func_end sub_0204018C + + arm_func_start sub_0204019C +sub_0204019C: ; 0x0204019C + ldr ip, _020401A4 ; =sub_0203FE5C + bx ip + .align 2, 0 +_020401A4: .word sub_0203FE5C + arm_func_end sub_0204019C + + arm_func_start sub_020401A8 +sub_020401A8: ; 0x020401A8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + bl sub_02027B1C + ldr r4, _02040274 ; =_020AFE7C + mov sb, #0 + ldr r0, [r4, #8] + ldr r7, _02040278 ; =_022AADFC + ldr r0, [r0, #0x10] + mov fp, #8 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 + mov r6, #0xd + mov r5, #0x17 + b _02040250 +_020401E0: + add r0, r7, sb, lsl #3 + ldrb r0, [r0, #0x2e] + tst r0, #2 + add r0, r2, sb, lsl #3 + movne r1, r6 + ldr r3, [r0, #0xa8] + moveq r1, fp + mov r0, sl + add r2, r8, #2 + bl DrawTextInWindow + cmp sb, #0 + ble _02040238 + add r0, r7, sb, lsl #3 + ldrb r0, [r0, #0x2e] + tst r0, #2 + bne _02040238 + mov r0, sl + mov r1, #0x10 + mov r2, r8 + mov r3, #0x7e + str r5, [sp] + bl sub_02025D50 +_02040238: + add r0, r8, #0x10 + add r1, sb, #1 + mov r0, r0, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r8, r0, asr #0x10 + mov sb, r1, asr #0x10 +_02040250: + ldr r2, [r4, #8] + ldrsh r0, [r2, #0xa4] + cmp sb, r0 + blt _020401E0 + mov r0, #1 + bl sub_0204027C + mov r0, sl + bl UpdateWindow + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02040274: .word _020AFE7C +_02040278: .word _022AADFC + arm_func_end sub_020401A8 + + arm_func_start sub_0204027C +sub_0204027C: ; 0x0204027C + cmp r0, #0 + ldrne r0, _020402BC ; =_020AFE7C + movne r3, #2 + ldrne r2, [r0, #8] + ldreq r0, _020402BC ; =_020AFE7C + moveq r3, #1 + ldreq r2, [r0, #8] + movne r1, #1 + str r3, [r2, #0x3ec] + ldr r0, [r0, #8] + moveq r1, #2 + str r1, [r0, #0x3f0] + ldr r0, _020402BC ; =_020AFE7C + ldr r0, [r0, #0xc] + cmp r0, #7 + bx lr + .align 2, 0 +_020402BC: .word _020AFE7C + arm_func_end sub_0204027C + + arm_func_start PrintMoveOptionMenu +PrintMoveOptionMenu: ; 0x020402C0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x5c + ldr r0, _020407AC ; =_020AFE7C + ldr r2, _020407B0 ; =_022AAE00 + ldr r1, [r0, #8] + str r2, [r1, #0x4c] + ldr r1, [r0, #0xc] + cmp r1, #2 + cmpne r1, #3 + cmpne r1, #6 + beq _020402FC + ldrsh r1, [r0, #2] + cmp r1, #4 + movge r1, #0 + strgeh r1, [r0, #2] +_020402FC: + ldr r0, _020407AC ; =_020AFE7C + ldrsh r0, [r0, #2] + bl sub_020410A4 + ldr r1, _020407AC ; =_020AFE7C + mov r0, #0 + ldr r1, [r1, #8] + strh r0, [r1, #0xa4] +_02040318: + ldr r1, _020407AC ; =_020AFE7C + ldr r2, _020407B4 ; =_022AAE2A + ldr r1, [r1, #8] + mov r3, #0 + add r1, r1, r0 + strb r3, [r1, #0x3e0] + ldrb r1, [r2, r0, lsl #3] + add r4, r2, r0, lsl #3 + tst r1, #1 + movne r3, #1 + tst r3, #0xff + beq _020403B4 + ldr r1, _020407AC ; =_020AFE7C + ldr r3, [r1, #8] + ldrsh r2, [r3, #0xa4] + add r2, r2, #1 + strh r2, [r3, #0xa4] + ldr r5, [r1, #8] + ldrb r1, [r5, #0x3f8] + cmp r1, #0 + ldrne r2, [r5, #0x3f4] + cmpne r2, #0 + beq _020403C8 + ldrh r1, [r4, #4] + b _02040388 +_0204037C: + cmp r3, r1 + beq _02040394 + add r2, r2, #2 +_02040388: + ldrh r3, [r2] + cmp r3, #0 + bne _0204037C +_02040394: + cmp r3, #0 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + addne r1, r5, r0 + movne r2, #3 + strneb r2, [r1, #0x3e0] + b _020403C8 +_020403B4: + ldr r1, _020407AC ; =_020AFE7C + ldrsh r2, [r1, #2] + cmp r0, r2 + moveq r2, #0 + streqh r2, [r1, #2] +_020403C8: + add r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + cmp r0, #4 + blt _02040318 + ldr r1, _020407AC ; =_020AFE7C + mov r0, #0 + ldr r2, [r1, #8] + strb r0, [r2, #0x3e4] + ldr r2, [r1, #8] + ldrb r1, [r2, #0x3f8] + cmp r1, #0 + ldrne r1, [r2, #0x3f4] + cmpne r1, #0 + beq _020404B4 +_02040404: + ldr r1, _020407AC ; =_020AFE7C + ldr r3, _020407B4 ; =_022AAE2A + ldr r2, [r1, #8] + add r2, r2, r0 + ldrb r2, [r2, #0x3e0] + tst r2, #1 + beq _020404A0 + ldrb r2, [r3, r0, lsl #3] + tst r2, #2 + beq _02040464 + sub r6, r0, #1 + mov r5, #3 + ldr r3, _020407B8 ; =_022AADFC + b _0204045C +_0204043C: + ldr r4, [r1, #8] + add r2, r3, r6, lsl #3 + add r4, r4, r6 + strb r5, [r4, #0x3e0] + ldrb r2, [r2, #0x2e] + tst r2, #2 + beq _02040464 + sub r6, r6, #1 +_0204045C: + cmp r6, #0 + bge _0204043C +_02040464: + add r5, r0, #1 + ldr r4, _020407B8 ; =_022AADFC + mov r3, #3 + ldr r1, _020407AC ; =_020AFE7C + b _02040498 +_02040478: + add r2, r4, r5, lsl #3 + ldrb r2, [r2, #0x2e] + tst r2, #2 + beq _020404A0 + ldr r2, [r1, #8] + add r2, r2, r5 + strb r3, [r2, #0x3e0] + add r5, r5, #1 +_02040498: + cmp r5, #4 + blt _02040478 +_020404A0: + add r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + cmp r0, #4 + blt _02040404 +_020404B4: + ldr r0, _020407AC ; =_020AFE7C + mov r8, #0 + ldr r0, [r0, #0xc] + ldr fp, _020407B4 ; =_022AAE2A + cmp r0, #2 + cmpne r0, #3 + cmpne r0, #6 + ldreq r0, _020407AC ; =_020AFE7C + ldr r5, _020407B8 ; =_022AADFC + ldreq r1, [r0, #8] + ldr r4, _020407AC ; =_020AFE7C + ldreqsh r0, [r1, #0xa4] + mov sb, r8 + mov r7, r8 + addeq r0, r0, #1 + streqh r0, [r1, #0xa4] + mov r6, #0x6a +_020404F8: + ldrb r0, [fp, sb, lsl #3] + str r7, [sp] + str r6, [sp, #4] + tst r0, #1 + movne r0, #1 + moveq r0, r7 + strb r7, [sp, #8] + strb r7, [sp, #9] + add sl, fp, sb, lsl #3 + tst r0, #0xff + beq _02040634 + ldrb r0, [r5, #0x2c] + cmp r0, #0 + movne r0, #2 + strne r0, [sp] + moveq r0, #4 + streq r0, [sp] + ldr r0, [r4, #0xc] + cmp r0, #1 + cmpne r0, #5 + bne _02040574 + ldrh r0, [sl, #4] + bl Is2TurnsMove + cmp r0, #0 + movne r0, #1 + strneb r0, [sp, #9] + bne _02040574 + ldrh r0, [sl, #4] + cmp r0, #0x8a + moveq r0, #1 + streqb r0, [sp, #8] +_02040574: + ldr r0, [r4, #0xc] + cmp r0, #0 + cmpne r0, #1 + bne _020405A4 + ldr r0, [r5] + mov r1, sl + mov r2, #1 + bl CanMonsterUseMove + cmp r0, #0 + moveq r0, #1 + streqb r0, [sp, #8] + b _020405B4 +_020405A4: + ldrb r0, [sl, #6] + cmp r0, #0 + moveq r0, #1 + streqb r0, [sp, #8] +_020405B4: + ldr r1, [r4, #8] + ldrb r0, [r1, #0x3f8] + cmp r0, #0 + beq _020405D8 + add r0, r1, sb + ldrb r0, [r0, #0x3e0] + tst r0, #2 + movne r0, #1 + strneb r0, [sp, #8] +_020405D8: + mov r2, sl + add r0, sp, #0xc + mov r1, #0 + add r3, sp, #0 + bl FormatMoveStringMore + mov r0, #0 + bl GetDungeonResultString + mov r1, r0 + ldr r0, [r4, #8] + add r0, r0, #0xe0 + add r0, r0, r8, lsl #7 + bl strcpy + ldr r3, [r4, #8] + add r0, r8, #1 + add r1, r3, #0xe0 + add r2, r1, r8, lsl #7 + add r1, r3, r8, lsl #3 + str r2, [r1, #0xa8] + ldr r1, [r4, #8] + mov r0, r0, lsl #0x10 + add r1, r1, r8, lsl #3 + str r8, [r1, #0xac] + mov r8, r0, asr #0x10 +_02040634: + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov sb, r0, asr #0x10 + cmp sb, #4 + blt _020404F8 + cmp r8, #4 + bne _02040710 + ldr r0, _020407AC ; =_020AFE7C + ldr r0, [r0, #0xc] + cmp r0, #2 + cmpne r0, #3 + cmpne r0, #6 + bne _02040710 + ldr r0, _020407B8 ; =_022AADFC + mov r2, #0 + ldrb r0, [r0, #0x2c] + str r2, [sp] + strb r2, [sp, #8] + strb r2, [sp, #9] + ldr r2, _020407BC ; =LAST_NEW_MOVE + cmp r0, #0 + ldrb r0, [r2] + mov r1, #0x6a + str r1, [sp, #4] + movne r1, #2 + bicne r0, r0, #8 + strne r1, [sp] + moveq r1, #4 + biceq r0, r0, #4 + streq r1, [sp] + strb r0, [r2] + add r0, sp, #0xc + add r3, sp, #0 + mov r1, #0 + bl FormatMoveStringMore + mov r0, #0 + bl GetDungeonResultString + ldr r2, _020407AC ; =_020AFE7C + mov r1, r0 + ldr r0, [r2, #8] + add r0, r0, #0xe0 + add r0, r0, r8, lsl #7 + bl strcpy + ldr r1, _020407AC ; =_020AFE7C + add r0, r8, #1 + ldr r4, [r1, #8] + mov r0, r0, lsl #0x10 + add r2, r4, #0xe0 + add r3, r2, r8, lsl #7 + add r2, r4, r8, lsl #3 + str r3, [r2, #0xa8] + ldr r1, [r1, #8] + add r1, r1, r8, lsl #3 + str r8, [r1, #0xac] + mov r8, r0, asr #0x10 +_02040710: + ldr r0, _020407AC ; =_020AFE7C + mov r4, #0 + ldr r1, [r0, #8] + sub r3, r4, #1 + add r1, r1, r8, lsl #3 + str r4, [r1, #0xa8] + ldr r2, [r0, #8] + sub r1, r4, #2 + add r2, r2, r8, lsl #3 + str r3, [r2, #0xac] + ldr r0, [r0, #8] + ldrsb r0, [r0] + cmp r0, r1 + beq _0204075C + bl sub_020307EC + ldr r0, _020407AC ; =_020AFE7C + ldr r0, [r0, #8] + ldrsb r0, [r0] + bl SetAdvancedTextBoxField0x1C2 +_0204075C: + ldr r0, _020407AC ; =_020AFE7C + ldr r1, [r0, #0xc] + cmp r1, #7 + ldrne r3, [r0, #8] + ldrne r2, [r3, #0x3ec] + ldrne r1, [r3, #0x3f0] + cmpne r2, r1 + beq _020407A4 + str r1, [r3, #0x3ec] + ldr r3, [r0, #8] + ldrsh r1, [r0, #2] + ldr r2, [r3, #0x10] + ldrsb r0, [r3] + add r2, r2, r1, lsl #4 + ldr r1, [r3, #0x3ec] + add r3, r2, #4 + mov r2, #0 + bl sub_02030978 +_020407A4: + add sp, sp, #0x5c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_020407AC: .word _020AFE7C +_020407B0: .word _022AAE00 +_020407B4: .word _022AAE2A +_020407B8: .word _022AADFC +_020407BC: .word LAST_NEW_MOVE + arm_func_end PrintMoveOptionMenu + + arm_func_start sub_020407C0 +sub_020407C0: ; 0x020407C0 + stmdb sp!, {r3, lr} + ldr r0, _020407E8 ; =_020AFE7C + ldr r0, [r0, #8] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl MemFree + ldr r0, _020407E8 ; =_020AFE7C + mov r1, #0 + str r1, [r0, #8] + ldmia sp!, {r3, pc} + .align 2, 0 +_020407E8: .word _020AFE7C + arm_func_end sub_020407C0 + + arm_func_start sub_020407EC +sub_020407EC: ; 0x020407EC + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x34 + add r1, sp, #0xc + mov r0, #0 + bl GetHeldButtons + add r1, sp, #0xa + mov r0, #0 + bl GetPressedButtons + add r1, sp, #8 + mov r0, #0 + bl sub_020063F4 + ldrh r0, [sp, #0xc] + ldr r5, _02040F90 ; =_022AAE2A + tst r0, #0x200 + movne r1, #1 + moveq r1, #0 + and r6, r1, #0xff + ldr r1, _02040F94 ; =_020AFE7C + tst r0, #0x100 + movne r0, #1 + moveq r0, #0 + ldr r3, [r1, #8] + and r7, r0, #0xff + add r0, r3, #0x300 + ldrsh r2, [r0, #0xe6] + cmp r2, #0 + ble _0204087C + sub r2, r2, #1 + strh r2, [r0, #0xe6] + ldr r0, [r1, #8] + add r0, r0, #0x300 + ldrsh r0, [r0, #0xe6] + cmp r0, #0 + moveq r0, #2 + movne r0, #0 + b _02040F88 +_0204087C: + ldrsb r0, [r3] + bl IsAdvancedTextBoxActive + cmp r0, #0 + bne _020408B8 + ldr r0, _02040F94 ; =_020AFE7C + ldr r0, [r0, #8] + ldrsb r0, [r0] + bl sub_02030940 + mvn r1, #0 + cmp r0, r1 + bne _020408B8 + mov r0, #1 + bl PlaySeVolumeWrapper + mov r0, #1 + b _02040F88 +_020408B8: + ldr r0, _02040F94 ; =_020AFE7C + ldr r0, [r0, #0xc] + cmp r0, #9 + addls pc, pc, r0, lsl #2 + b _02040958 +_020408CC: ; jump table + b _02040958 ; case 0 + b _0204094C ; case 1 + b _0204090C ; case 2 + b _020408F4 ; case 3 + b _02040958 ; case 4 + b _02040958 ; case 5 + b _0204090C ; case 6 + b _0204093C ; case 7 + b _02040924 ; case 8 + b _0204090C ; case 9 +_020408F4: + ldrh r0, [sp, #0xa] + mov r6, #0 + mov r7, r6 + bic r0, r0, #6 + strh r0, [sp, #0xa] + b _02040958 +_0204090C: + ldrh r0, [sp, #0xa] + mov r6, #0 + mov r7, r6 + bic r0, r0, #4 + strh r0, [sp, #0xa] + b _02040958 +_02040924: + ldrh r0, [sp, #0xa] + mov r6, #0 + mov r7, r6 + bic r0, r0, #4 + strh r0, [sp, #0xa] + b _02040958 +_0204093C: + mov r6, #0 + mov r7, r6 + strh r6, [sp, #0xa] + b _02040958 +_0204094C: + ldrh r0, [sp, #8] + bic r0, r0, #0x30 + strh r0, [sp, #8] +_02040958: + ldr r0, _02040F94 ; =_020AFE7C + ldr r0, [r0, #8] + ldrb r0, [r0, #0x3e5] + cmp r0, #0 + beq _02040980 + bl PrintMoveOptionMenu + ldr r0, _02040F94 ; =_020AFE7C + mov r1, #0 + ldr r0, [r0, #8] + strb r1, [r0, #0x3e5] +_02040980: + ldrh r0, [sp, #8] + tst r0, #0x80 + beq _02040A44 + bl sub_02041178 + cmp r7, #0 + beq _020409E4 + ldr r1, _02040F94 ; =_020AFE7C + ldr r0, _02040F90 ; =_022AAE2A + ldrsh r1, [r1, #2] + bl sub_02013E54 + ldr r1, _02040F94 ; =_020AFE7C + mov r0, r0, lsl #0x10 + ldrsh r1, [r1, #2] + mov r4, r0, asr #0x10 + cmp r1, r0, asr #16 + beq _020409D8 + mov r0, #3 + bl PlaySeVolumeWrapper + ldr r1, _02040F94 ; =_020AFE7C + mov r0, #3 + strh r4, [r1, #2] + b _02040F88 +_020409D8: + mov r0, #2 + bl PlaySeVolumeWrapper + b _02040A44 +_020409E4: + mov r0, #3 + bl PlaySeVolumeWrapper + ldr r0, _02040F94 ; =_020AFE7C + ldr r1, [r0, #8] + ldrsh r2, [r0, #2] + ldrsh r1, [r1, #0xa4] + add r0, r2, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 + b _02040A24 +_02040A0C: + ldrb r0, [r5, r3, lsl #3] + tst r0, #2 + beq _02040A2C + add r0, r3, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 +_02040A24: + cmp r2, r1 + blt _02040A0C +_02040A2C: + cmp r3, r1 + ldr r1, _02040F94 ; =_020AFE7C + movge r3, #0 + mov r0, #9 + strh r3, [r1, #2] + b _02040F88 +_02040A44: + ldrh r0, [sp, #8] + tst r0, #0x40 + beq _02040B10 + bl sub_02041178 + cmp r7, #0 + beq _02040AA8 + ldr r1, _02040F94 ; =_020AFE7C + ldr r0, _02040F90 ; =_022AAE2A + ldrsh r1, [r1, #2] + bl sub_02013F58 + ldr r1, _02040F94 ; =_020AFE7C + mov r0, r0, lsl #0x10 + ldrsh r1, [r1, #2] + mov r4, r0, asr #0x10 + cmp r1, r0, asr #16 + beq _02040A9C + mov r0, #3 + bl PlaySeVolumeWrapper + ldr r1, _02040F94 ; =_020AFE7C + mov r0, #4 + strh r4, [r1, #2] + b _02040F88 +_02040A9C: + mov r0, #2 + bl PlaySeVolumeWrapper + b _02040B10 +_02040AA8: + mov r0, #3 + bl PlaySeVolumeWrapper + ldr r0, _02040F94 ; =_020AFE7C + ldrsh r1, [r0, #2] + cmp r1, #0 + subgt r0, r1, #1 + ldrle r0, [r0, #8] + ldrlesh r0, [r0, #0xa4] + suble r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r2, r0, asr #0x10 + b _02040AF0 +_02040AD8: + ldrb r0, [r5, r2, lsl #3] + tst r0, #2 + beq _02040AF8 + sub r0, r2, #1 + mov r0, r0, lsl #0x10 + mov r2, r0, asr #0x10 +_02040AF0: + cmp r1, #0 + bge _02040AD8 +_02040AF8: + ldr r1, _02040F94 ; =_020AFE7C + cmp r2, #0 + movlt r2, #0 + mov r0, #9 + strh r2, [r1, #2] + b _02040F88 +_02040B10: + mov r4, #0 + bl sub_0204AE60 + cmp r0, #0 + add r0, sp, #0x10 + beq _02040B2C + bl GetReleasedStylus + b _02040B30 +_02040B2C: + bl sub_02006BFC +_02040B30: + ldrh r0, [sp, #0x10] + tst r0, #0x40 + beq _02040C38 + tst r0, #2 + ldrne r0, _02040F94 ; =_020AFE7C + ldrne r0, [r0, #0xc] + cmpne r0, #7 + beq _02040C38 + cmp r0, #2 + cmpne r0, #3 + cmpne r0, #6 + bne _02040B68 + mov r1, #0x70 + b _02040B6C +_02040B68: + mov r1, #0x60 +_02040B6C: + ldr r0, [sp, #0x14] + cmp r0, #0x10 + blt _02040C38 + cmp r0, #0xa0 + bge _02040C38 + ldr r0, [sp, #0x18] + cmp r0, #0x20 + blt _02040C38 + cmp r0, r1 + bge _02040C38 + sub r1, r0, #0x20 + mov r0, r1, asr #3 + add r0, r1, r0, lsr #28 + mov r0, r0, lsl #0xc + ldr r2, _02040F94 ; =_020AFE7C + mov r1, r0, asr #0x10 + ldr r5, [r2, #8] + add r7, r1, #1 + mov r3, #0 + mvn r2, #0 + b _02040BDC +_02040BC0: + add r0, r5, r3, lsl #3 + ldr r0, [r0, #0xac] + cmp r0, r2 + beq _02040BE4 + add r0, r3, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 +_02040BDC: + cmp r3, r7 + blt _02040BC0 +_02040BE4: + cmp r3, r1 + ble _02040C38 + ldr r0, _02040F90 ; =_022AAE2A + ldrb r0, [r0, r1, lsl #3] + tst r0, #2 + bne _02040C38 + mov r0, r1, lsl #4 + ldr r3, _02040F94 ; =_020AFE7C + add r0, r0, #0x20 + mov r2, r0, lsl #0x10 + mov r0, #0x10 + ldr r4, _02040F98 ; =_0209C928 + strh r1, [r3, #2] + mov r3, r0 + str r4, [sp] + mov r4, #0x40 + mov r1, r2, asr #0x10 + mov r2, #0x90 + str r4, [sp, #4] + mov r4, #1 + bl sub_0202A2A4 +_02040C38: + ldr r0, _02040F94 ; =_020AFE7C + ldr r5, [r0, #8] + ldrsb r0, [r5] + bl sub_02030A18 + add r1, r5, #0x300 + ldrsh r1, [r1, #0xe8] + cmp r1, r0 + beq _02040C90 + mov r0, #4 + bl PlaySeVolumeWrapper + ldr r0, _02040F94 ; =_020AFE7C + mov r1, #0 + strh r1, [r0, #2] + ldr r0, [r0, #8] + ldrsb r0, [r0] + bl sub_02030A18 + ldr r1, _02040F94 ; =_020AFE7C + ldr r1, [r1, #8] + add r1, r1, #0x300 + strh r0, [r1, #0xe8] + mov r0, #5 + b _02040F88 +_02040C90: + ldrh r0, [sp, #0xa] + tst r0, #2 + beq _02040CAC + mov r0, #1 + bl PlaySeVolumeWrapper + mov r0, #1 + b _02040F88 +_02040CAC: + tst r0, #4 + beq _02040D0C + ldr r0, _02040F9C ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldr r0, _02040F94 ; =_020AFE7C + ldr r1, [r0, #0xc] + cmp r1, #3 + addls pc, pc, r1, lsl #2 + b _02040CF4 +_02040CD4: ; jump table + b _02040CE4 ; case 0 + b _02040CE4 ; case 1 + b _02040CE4 ; case 2 + b _02040CE4 ; case 3 +_02040CE4: + ldr r0, [r0, #8] + ldrsb r0, [r0] + bl sub_02030EF0 + b _02040D04 +_02040CF4: + bl sub_02041178 + ldr r0, _02040F94 ; =_020AFE7C + ldrsh r0, [r0, #2] + bl sub_02041000 +_02040D04: + mov r0, #6 + b _02040F88 +_02040D0C: + tst r0, #8 + beq _02040D28 + ldr r0, _02040FA0 ; =0x00003F04 + mov r1, #0x100 + bl sub_02017C74 + mov r0, #7 + b _02040F88 +_02040D28: +#ifndef JAPAN + ldrsb r0, [r5] + bl sub_020308E4 + cmp r0, #0 + bne _02040F84 + ldrh r0, [sp, #0xa] +#endif + tst r0, #0x400 + bne _02040D50 + tst r0, #1 + cmpeq r4, #0 + beq _02040F84 +_02040D50: +#ifdef JAPAN + ldrb r0, [r5, #0x3f8] + cmp r0, #0 + beq _020410EC + ldr r0, _02040F94 ; =_020AFE7C + ldrsh r0, [r0, #2] + add r0, r5, r0 + ldrb r0, [r0, #0x3e0] + tst r0, #1 + bne _02040F70 +_020410EC: + cmp r4, #0 + addne r0, r5, #0x300 +#else + ldr r0, _02040F94 ; =_020AFE7C + mov r2, #0 + ldr r3, [r0, #8] + ldrb r1, [r3, #0x3f8] + cmp r1, #0 + beq _02040D7C + ldrsh r0, [r0, #2] + add r0, r3, r0 + ldrb r0, [r0, #0x3e0] + tst r0, #1 + movne r2, #1 +_02040D7C: + cmp r2, #0 + bne _02040F70 + cmp r4, #0 + addne r0, r3, #0x300 +#endif + movne r1, #6 + strneh r1, [r0, #0xe6] + cmp r6, #0 + beq _02040EC8 + ldr r0, _02040F94 ; =_020AFE7C + ldr r0, [r0, #0xc] + cmp r0, #1 + cmpne r0, #5 + bne _02040EC8 + cmp r4, #0 + ldrne r0, _02040F94 ; =_020AFE7C + movne r1, #0 + ldrne r0, [r0, #8] + addne r0, r0, #0x300 + strneh r1, [r0, #0xe6] + ldr r0, _02040F94 ; =_020AFE7C + ldr r1, [r0, #0xc] + cmp r1, #3 + addls pc, pc, r1, lsl #2 + b _02040E34 +_02040DDC: ; jump table + b _02040DEC ; case 0 + b _02040DEC ; case 1 + b _02040DEC ; case 2 + b _02040DEC ; case 3 +_02040DEC: + ldrsh r0, [r0, #2] + bl sub_02041194 + cmp r0, #0 + bne _02040E10 + ldr r0, _02040F94 ; =_020AFE7C + ldrsh r0, [r0, #2] + bl sub_02041364 + cmp r0, #0 + beq _02040E34 +_02040E10: + ldr r0, _02040F9C ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldr r0, _02040F94 ; =_020AFE7C + ldr r0, [r0, #8] + ldrsb r0, [r0] + bl sub_02030EF0 + mov r0, #8 + b _02040F88 +_02040E34: + ldr r0, _02040F94 ; =_020AFE7C + ldrsh r0, [r0, #2] + bl sub_02041194 + cmp r0, #0 + beq _02040E88 + ldr r0, _02040F94 ; =_020AFE7C + ldr r1, [r0, #0xc] + cmp r1, #5 + ldreqb r0, [r0] + cmpeq r0, #0 + bne _02040E6C + ldr r0, _02040FA4 ; =0x00001308 + bl sub_02017C80 + b _02040E78 +_02040E6C: + ldr r0, _02040F9C ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 +_02040E78: + ldr r0, _02040F94 ; =_020AFE7C + ldrsh r0, [r0, #2] + bl sub_020412B0 + b _02040EC0 +_02040E88: + ldr r0, _02040F94 ; =_020AFE7C + ldrsh r0, [r0, #2] + bl sub_02041364 + cmp r0, #0 + beq _02040EB8 + ldr r0, _02040F9C ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldr r0, _02040F94 ; =_020AFE7C + ldrsh r0, [r0, #2] + bl sub_02041394 + b _02040EC0 +_02040EB8: + mov r0, #2 + bl PlaySeVolumeWrapper +_02040EC0: + bl sub_02041178 + b _02040F84 +_02040EC8: + cmp r4, #0 + beq _02040EEC + mov r0, #0 + bl PlaySeVolumeWrapper + ldr r0, _02040F94 ; =_020AFE7C + ldr r0, [r0, #8] + ldrsb r0, [r0] + bl sub_02030EF0 + b _02040F18 +_02040EEC: + ldrh r0, [sp, #0xa] + tst r0, #0x400 + mov r0, #0 + beq _02040F14 + bl PlaySeVolumeWrapper + ldr r0, _02040F94 ; =_020AFE7C + ldr r0, [r0, #8] + ldrsb r0, [r0] + bl sub_02030EF0 + b _02040F18 +_02040F14: + bl PlaySeVolumeWrapper +_02040F18: + ldr r0, _02040F94 ; =_020AFE7C + mov r1, #2 + ldr r3, [r0, #8] + mov r2, #0 + str r1, [r3, #0x3ec] + ldr r3, [r0, #8] + str r1, [r3, #0x3f0] + ldr r6, [r0, #8] + ldrsh r3, [r0, #2] + ldr r5, [r6, #0x10] + ldrsb r0, [r6] + add r3, r5, r3, lsl #4 + add r3, r3, #4 + bl sub_02030978 + ldr r0, _02040F94 ; =_020AFE7C + ldr r0, [r0, #8] + ldrsb r0, [r0] + bl UpdateWindow + cmp r4, #0 + bne _02040F84 + mov r0, #2 + b _02040F88 +_02040F70: + mov r0, #2 + bl PlaySeVolumeWrapper + cmp r4, #0 + beq _02040F84 + bl sub_02041178 +_02040F84: + mov r0, #0 +_02040F88: + add sp, sp, #0x34 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02040F90: .word _022AAE2A +_02040F94: .word _020AFE7C +_02040F98: .word _0209C928 +_02040F9C: .word 0x00003F07 +_02040FA0: .word 0x00003F04 +_02040FA4: .word 0x00001308 + arm_func_end sub_020407EC + + arm_func_start sub_02040FA8 +sub_02040FA8: ; 0x02040FA8 + ldr r0, _02040FF4 ; =_022AADFC + ldrb r0, [r0, #0x2c] + cmp r0, #0 + beq _02040FD0 + ldr r0, _02040FF8 ; =_020AFE7C + ldr r1, _02040FFC ; =_022AAE2A + ldrsh r0, [r0, #2] + ldrb r0, [r1, r0, lsl #3] + tst r0, #8 + b _02040FE4 +_02040FD0: + ldr r0, _02040FF8 ; =_020AFE7C + ldr r1, _02040FFC ; =_022AAE2A + ldrsh r0, [r0, #2] + ldrb r0, [r1, r0, lsl #3] + tst r0, #4 +_02040FE4: + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_02040FF4: .word _022AADFC +_02040FF8: .word _020AFE7C +_02040FFC: .word _022AAE2A + arm_func_end sub_02040FA8 + + arm_func_start sub_02041000 +sub_02041000: ; 0x02041000 + stmdb sp!, {r4, lr} + mov r4, r0 + bl sub_02041178 + ldr r2, _0204108C ; =_022AADFC + ldrb r0, [r2, #0x2c] + cmp r0, #0 + beq _02041078 + ldr r1, _02041090 ; =_022AAE2A + ldrb r0, [r1, r4, lsl #3] + tst r0, #8 + eorne r0, r0, #8 + strneb r0, [r1, r4, lsl #3] + ldmneia sp!, {r4, pc} + mov r3, #0 +_02041038: + add r0, r2, r3, lsl #3 + ldrb r0, [r0, #0x2e] + tst r0, #8 + bne _02041050 + cmp r3, r4 + bne _02041060 +_02041050: + add r1, r2, r3, lsl #3 + ldrb r0, [r1, #0x2e] + eor r0, r0, #8 + strb r0, [r1, #0x2e] +_02041060: + add r0, r3, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 + cmp r3, #4 + blt _02041038 + ldmia sp!, {r4, pc} +_02041078: + ldr r1, _02041090 ; =_022AAE2A + ldrb r0, [r1, r4, lsl #3] + eor r0, r0, #4 + strb r0, [r1, r4, lsl #3] + ldmia sp!, {r4, pc} + .align 2, 0 +_0204108C: .word _022AADFC +_02041090: .word _022AAE2A + arm_func_end sub_02041000 + + arm_func_start sub_02041094 +sub_02041094: ; 0x02041094 + ldr r0, _020410A0 ; =_020AFE7C + ldrsh r0, [r0, #2] + bx lr + .align 2, 0 +_020410A0: .word _020AFE7C + arm_func_end sub_02041094 + + arm_func_start sub_020410A4 +sub_020410A4: ; 0x020410A4 + ldr r1, _0204114C ; =_020AFE7C + cmp r0, #0 + strh r0, [r1, #2] + movlt r0, #0 + strlth r0, [r1, #2] + ldr r0, _0204114C ; =_020AFE7C + ldrsh r2, [r0, #2] + cmp r2, #4 + blt _02041100 + ldr r1, [r0, #0xc] + cmp r1, #2 + cmpne r1, #3 + arm_func_end sub_020410A4 + + arm_func_start sub_020410D4 +sub_020410D4: ; 0x020410D4 + cmpne r1, #6 + arm_func_end sub_020410D4 + + arm_func_start sub_020410D8 +sub_020410D8: ; 0x020410D8 + bne _020410F8 + arm_func_end sub_020410D8 + + arm_func_start sub_020410DC +sub_020410DC: ; 0x020410DC + cmp r2, #4 + ldreq r0, _0204114C ; =_020AFE7C + moveq r1, #4 + ldrne r0, _0204114C ; =_020AFE7C + movne r1, #0 + strh r1, [r0, #2] + bx lr +_020410F8: + mov r1, #3 + strh r1, [r0, #2] +_02041100: + ldr r2, _02041150 ; =_022AADFC + ldr r0, _0204114C ; =_020AFE7C +_02041108: + ldrsh r1, [r0, #2] + cmp r1, #0 + ldrlt r0, _0204114C ; =_020AFE7C + movlt r1, #0 + strlth r1, [r0, #2] + bxlt lr + add r1, r2, r1, lsl #3 + ldrb r1, [r1, #0x2e] + tst r1, #1 + beq _02041138 + tst r1, #2 + bxeq lr +_02041138: + ldrsh r1, [r0, #2] + sub r1, r1, #1 + strh r1, [r0, #2] + b _02041108 +_02041148: + bx lr + .align 2, 0 +_0204114C: .word _020AFE7C +_02041150: .word _022AADFC + arm_func_end sub_020410DC + + arm_func_start sub_02041154 +sub_02041154: ; 0x02041154 + cmp r0, #4 + ldreq r0, _02041170 ; =_022AADFC + ldrne r1, _02041174 ; =_022AAE2E + ldreqh r0, [r0, #0x54] + movne r0, r0, lsl #3 + ldrneh r0, [r1, r0] + bx lr + .align 2, 0 +_02041170: .word _022AADFC +_02041174: .word _022AAE2E + arm_func_end sub_02041154 + + arm_func_start sub_02041178 +sub_02041178: ; 0x02041178 + ldr r0, _02041190 ; =_020AFE7C + ldr r1, [r0, #8] + cmp r1, #0 + movne r0, #1 + strneb r0, [r1, #0x3e5] + bx lr + .align 2, 0 +_02041190: .word _020AFE7C + arm_func_end sub_02041178 + + arm_func_start sub_02041194 +sub_02041194: ; 0x02041194 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r4, _020412AC ; =_022AAE2A + mov r6, r0 + add r0, r4, r6, lsl #3 + ldrh r0, [r0, #4] + bl IsNot2TurnsMoveOrSketch + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + add r5, r6, #1 + mov r7, #0 + mov r8, #1 + b _0204129C +_020411C8: + ldrb r0, [r4, r5, lsl #3] + tst r0, #1 + movne r0, r8 + moveq r0, r7 + tst r0, #0xff + beq _020412A4 + add r0, r4, r5, lsl #3 + ldrh r0, [r0, #4] + bl IsNot2TurnsMoveOrSketch + cmp r0, #0 + beq _020412A4 + ldrb r0, [r4, r5, lsl #3] + tst r0, #2 + bne _02041298 + add r0, r5, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + b _02041228 +_02041210: + ldrb r1, [r4, r0, lsl #3] + tst r1, #2 + beq _02041230 + add r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 +_02041228: + cmp r0, #4 + blt _02041210 +_02041230: + mov r1, r6, lsl #0x10 + mov r5, r1, asr #0x10 + b _02041288 +_0204123C: + add r1, r5, #1 + mov r1, r1, lsl #0x10 + mov r3, r1, asr #0x10 + add r1, r4, r5, lsl #3 + ldrh r2, [r1, #4] + b _02041274 +_02041254: + add r1, r4, r3, lsl #3 + ldrh r1, [r1, #4] + cmp r2, r1 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + add r1, r3, #1 + mov r1, r1, lsl #0x10 + mov r3, r1, asr #0x10 +_02041274: + cmp r3, r0 + blt _02041254 + add r1, r5, #1 + mov r1, r1, lsl #0x10 + mov r5, r1, asr #0x10 +_02041288: + cmp r5, r0 + blt _0204123C + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02041298: + add r5, r5, #1 +_0204129C: + cmp r5, #4 + blt _020411C8 +_020412A4: + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_020412AC: .word _022AAE2A + arm_func_end sub_02041194 + + arm_func_start sub_020412B0 +sub_020412B0: ; 0x020412B0 + stmdb sp!, {r4, lr} + mov r4, r0 + bl sub_02041194 + cmp r0, #0 + ldmeqia sp!, {r4, pc} + add r1, r4, #1 + ldr r0, _02041358 ; =_022AAE2A + mov r3, #0 + mov ip, #1 + b _0204133C +_020412D8: + ldrb r2, [r0, r1, lsl #3] + tst r2, #1 + movne r2, ip + moveq r2, r3 + tst r2, #0xff + beq _02041344 + ldrb r2, [r0, r1, lsl #3] + tst r2, #2 + bne _02041338 + ldr r2, _0204135C ; =_022AADFC + ldr lr, _02041358 ; =_022AAE2A + ldrb r2, [r2, #0x2c] + cmp r2, #0 + ldrne r3, _02041358 ; =_022AAE2A + ldrneb r2, [r3, r1, lsl #3] + bicne r2, r2, #8 + strneb r2, [r3, r1, lsl #3] + ldrb ip, [lr, r1, lsl #3] + ldr r2, _02041360 ; =_020AFE7C + mov r3, #1 + strb r3, [r2] + bic r2, ip, #4 + strb r2, [lr, r1, lsl #3] + b _02041344 +_02041338: + add r1, r1, #1 +_0204133C: + cmp r1, #4 + blt _020412D8 +_02041344: + ldrb r2, [r0, r1, lsl #3] + orr r2, r2, #2 + strb r2, [r0, r1, lsl #3] + bl sub_02041178 + ldmia sp!, {r4, pc} + .align 2, 0 +_02041358: .word _022AAE2A +_0204135C: .word _022AADFC +_02041360: .word _020AFE7C + arm_func_end sub_020412B0 + + arm_func_start sub_02041364 +sub_02041364: ; 0x02041364 + cmp r0, #3 + ldr r1, _02041390 ; =_022AAE2A + moveq r0, #0 + bxeq lr + add r0, r0, #1 + ldrb r0, [r1, r0, lsl #3] + tst r0, #2 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_02041390: .word _022AAE2A + arm_func_end sub_02041364 + + arm_func_start sub_02041394 +sub_02041394: ; 0x02041394 + stmdb sp!, {r4, lr} + mov r4, r0 + bl sub_02041364 + cmp r0, #0 + ldmeqia sp!, {r4, pc} + add ip, r4, #1 + ldr r3, _020413FC ; =_022AAE2A + mov r1, #0 + mov r2, #1 + b _020413EC +_020413BC: + ldrb r0, [r3, ip, lsl #3] + tst r0, #1 + movne r0, r2 + moveq r0, r1 + tst r0, #0xff + beq _020413F4 + ldrb r0, [r3, ip, lsl #3] + tst r0, #2 + beq _020413F4 + eor r0, r0, #2 + strb r0, [r3, ip, lsl #3] + add ip, ip, #1 +_020413EC: + cmp ip, #4 + blt _020413BC +_020413F4: + bl sub_02041178 + ldmia sp!, {r4, pc} + .align 2, 0 +_020413FC: .word _022AAE2A + arm_func_end sub_02041394 + + arm_func_start sub_02041400 +sub_02041400: ; 0x02041400 + ldr r0, _02041410 ; =_020AFE7C + mov r1, #0 + strb r1, [r0] + bx lr + .align 2, 0 +_02041410: .word _020AFE7C + arm_func_end sub_02041400 + + arm_func_start sub_02041414 +sub_02041414: ; 0x02041414 + ldr r0, _02041420 ; =_020AFE7C + ldrb r0, [r0] + bx lr + .align 2, 0 +_02041420: .word _020AFE7C + arm_func_end sub_02041414 + + arm_func_start sub_02041424 +sub_02041424: ; 0x02041424 + cmp r0, #0 + movgt r0, #1 + bxgt lr + mov ip, #1 + ldr r3, _02041480 ; =_022AAE2A + mov r1, #0 + mov r2, ip + b _02041470 +_02041444: + ldrb r0, [r3, ip, lsl #3] + tst r0, #1 + movne r0, r2 + moveq r0, r1 + tst r0, #0xff + beq _02041478 + ldrb r0, [r3, ip, lsl #3] + tst r0, #2 + moveq r0, #1 + bxeq lr + add ip, ip, #1 +_02041470: + cmp ip, #4 + blt _02041444 +_02041478: + mov r0, #0 + bx lr + .align 2, 0 +_02041480: .word _022AAE2A + arm_func_end sub_02041424 + + arm_func_start sub_02041484 +sub_02041484: ; 0x02041484 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x20 + ldr r1, _02041594 ; =_020AFE7C + ldr r0, _02041598 ; =_022AAE2A + ldrsh r2, [r1, #2] + mov r1, #0 + mov r3, r1 + strb r1, [r0, r2, lsl #3] + add r5, r2, #1 + mov r4, #1 + b _020414DC +_020414B0: + ldrb r2, [r0, r5, lsl #3] + tst r2, #1 + movne r2, r4 + moveq r2, r3 + tst r2, #0xff + beq _020414E4 + ldrb r2, [r0, r5, lsl #3] + tst r2, #2 + beq _020414E4 + strb r1, [r0, r5, lsl #3] + add r5, r5, #1 +_020414DC: + cmp r5, #4 + blt _020414B0 +_020414E4: + mov r6, #0 + mov r7, r6 + mov r4, r6 + mov r5, #1 + add lr, sp, #0 +_020414F8: + ldrb r1, [r0, r7, lsl #3] + tst r1, #1 + movne r1, r5 + moveq r1, r4 + tst r1, #0xff + beq _02041530 + add ip, r0, r7, lsl #3 + add r3, lr, r6, lsl #3 + mov r2, #4 +_0204151C: + ldrh r1, [ip], #2 + subs r2, r2, #1 + strh r1, [r3], #2 + bne _0204151C + add r6, r6, #1 +_02041530: + add r7, r7, #1 + cmp r7, #4 + blt _020414F8 + mov r2, #0 + add r1, sp, #0 + b _02041550 +_02041548: + strb r2, [r1, r6, lsl #3] + add r6, r6, #1 +_02041550: + cmp r6, #4 + blt _02041548 + mov r4, #0 + add lr, sp, #0 +_02041560: + add ip, lr, r4, lsl #3 + add r3, r0, r4, lsl #3 + mov r2, #4 +_0204156C: + ldrh r1, [ip], #2 + subs r2, r2, #1 + strh r1, [r3], #2 + bne _0204156C + add r4, r4, #1 + cmp r4, #4 + blt _02041560 + bl sub_02041178 + add sp, sp, #0x20 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02041594: .word _020AFE7C +_02041598: .word _022AAE2A + arm_func_end sub_02041484 + + arm_func_start sub_0204159C +sub_0204159C: ; 0x0204159C + ldr r0, _020415B8 ; =_022AADFC + ldrb r0, [r0, #0x58] + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_020415B8: .word _022AADFC + arm_func_end sub_0204159C + + arm_func_start sub_020415BC +sub_020415BC: ; 0x020415BC + mov r3, #0 + ldr ip, _02041610 ; =_022AAE2A + mov r1, r3 + mov r2, #1 + b _020415F4 +_020415D0: + ldrb r0, [ip, r3, lsl #3] + tst r0, #1 + movne r0, r2 + moveq r0, r1 + tst r0, #0xff + beq _020415FC + add r0, r3, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 +_020415F4: + cmp r3, #4 + blt _020415D0 +_020415FC: + cmp r3, #4 + movge r0, #1 + movlt r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_02041610: .word _022AAE2A + arm_func_end sub_020415BC + + arm_func_start sub_02041614 +sub_02041614: ; 0x02041614 + stmdb sp!, {r3, r4, r5, lr} + mov r5, #0 + ldr r4, _020416B0 ; =_022AAE2A + mov r2, r5 + mov r3, #1 + b _02041694 +_0204162C: + ldrb r1, [r4, r5, lsl #3] + tst r1, #1 + movne r1, r3 + moveq r1, r2 + tst r1, #0xff + bne _02041688 + mov r1, #5 + strb r1, [r4, r5, lsl #3] + add r2, r4, r5, lsl #3 + strh r0, [r2, #4] + mov r1, #0 + ldr r0, _020416B4 ; =_022AADFC + strb r1, [r2, #7] + ldrsh r0, [r0, #0x5a] + ldr r1, _020416B8 ; =_022AAE58 + bl GetPpIncrease + add r1, r4, r5, lsl #3 + strh r0, [r1, #2] + mov r0, r1 + bl GetMaxPp + add r1, r4, r5, lsl #3 + strb r0, [r1, #6] + b _0204169C +_02041688: + add r1, r5, #1 + mov r1, r1, lsl #0x10 + mov r5, r1, asr #0x10 +_02041694: + cmp r5, #4 + blt _0204162C +_0204169C: + cmp r5, #4 + mvnge r5, #0 + mov r0, r5, lsl #0x10 + mov r0, r0, asr #0x10 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020416B0: .word _022AAE2A +_020416B4: .word _022AADFC +_020416B8: .word _022AAE58 + arm_func_end sub_02041614 + + arm_func_start sub_020416BC +sub_020416BC: ; 0x020416BC + stmdb sp!, {r3, lr} + mov r1, r0 + ldr r0, _020416D8 ; =_022AAE2A + bl sub_02013F58 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + ldmia sp!, {r3, pc} + .align 2, 0 +_020416D8: .word _022AAE2A + arm_func_end sub_020416BC + + arm_func_start sub_020416DC +sub_020416DC: ; 0x020416DC + stmdb sp!, {r3, lr} + mov r1, r0 + ldr r0, _020416F8 ; =_022AAE2A + bl sub_02013E54 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + ldmia sp!, {r3, pc} + .align 2, 0 +_020416F8: .word _022AAE2A + arm_func_end sub_020416DC + + arm_func_start sub_020416FC +sub_020416FC: ; 0x020416FC + stmdb sp!, {r3, lr} + ldr r0, _02041720 ; =_020AFE7C + ldr r0, [r0, #8] + ldrsb r0, [r0] + bl sub_020307EC + mov r0, #1 + bl sub_0204027C + bl sub_02041178 + ldmia sp!, {r3, pc} + .align 2, 0 +_02041720: .word _020AFE7C + arm_func_end sub_020416FC + + arm_func_start sub_02041724 +sub_02041724: ; 0x02041724 + stmdb sp!, {r3, lr} + bl IsDeoxys + cmp r0, #0 + ldrne r0, _02041748 ; =_022AADFC + movne r1, #1 + ldreq r0, _02041748 ; =_022AADFC + moveq r1, #0 + strb r1, [r0, #0x58] + ldmia sp!, {r3, pc} + .align 2, 0 +_02041748: .word _022AADFC + arm_func_end sub_02041724 + + arm_func_start SprintfStatic__0204174C +SprintfStatic__0204174C: ; 0x0204174C + 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__0204174C + + arm_func_start sub_02041774 +sub_02041774: ; 0x02041774 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0x2bc + mov r1, #8 + bl MemAlloc + ldr r1, _020417A4 ; =_020AFE8C + mvn r2, #1 + str r0, [r1] + str r4, [r0, #4] + ldr r0, [r1] + strb r2, [r0] + ldmia sp!, {r4, pc} + .align 2, 0 +_020417A4: .word _020AFE8C + arm_func_end sub_02041774 + + arm_func_start sub_020417A8 +sub_020417A8: ; 0x020417A8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r6, r1 + mov r4, r2 + mov r7, r0 + cmp r4, r6 + mvnge r0, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + ldrb r0, [r7, r4, lsl #3] + tst r0, #1 + mvneq r0, #1 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + mov r0, r3 + bl sub_02041774 + ldr r0, _0204185C ; =_020AFE8C + add r1, r7, r4, lsl #3 + ldr r0, [r0] + mov r2, #8 + add r0, r0, #8 + bl memcpy + add r5, r4, #1 + mov r4, #1 + mov sb, #8 + ldr r8, _0204185C ; =_020AFE8C + b _02041840 +_02041808: + ldrb r0, [r7, r5, lsl #3] + mov r1, r5, lsl #3 + tst r0, #1 + beq _0204183C + tst r0, #2 + beq _02041848 + ldr r0, [r8] + mov r2, sb + add r0, r0, #8 + add r0, r0, r4, lsl #3 + add r1, r7, r1 + bl memcpy + add r4, r4, #1 +_0204183C: + add r5, r5, #1 +_02041840: + cmp r5, r6 + blt _02041808 +_02041848: + ldr r0, _0204185C ; =_020AFE8C + ldr r0, [r0] + strh r4, [r0, #0x28] + bl sub_020418A4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0204185C: .word _020AFE8C + arm_func_end sub_020417A8 + + arm_func_start sub_02041860 +sub_02041860: ; 0x02041860 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, r1 + bl sub_02041774 + ldr r0, _020418A0 ; =_020AFE8C + mov r1, r4 + ldr r0, [r0] + mov r2, #8 + add r0, r0, #8 + bl memcpy + ldr r0, _020418A0 ; =_020AFE8C + mov r1, #1 + ldr r0, [r0] + strh r1, [r0, #0x28] + bl sub_020418A4 + ldmia sp!, {r4, pc} + .align 2, 0 +_020418A0: .word _020AFE8C + arm_func_end sub_02041860 + + arm_func_start sub_020418A4 +sub_020418A4: ; 0x020418A4 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + mov r7, #0 + ldr r6, _020419F0 ; =0x000008D4 + ldr r5, _020419F4 ; =_020AFE8C + mov r4, #0x50 + b _02041950 +_020418C0: + ldr r1, [r5] + mul r8, r7, r4 + add r0, r1, r7, lsl #3 + ldrh r0, [r0, #0xc] + add r1, r1, r7, lsl #1 + add r1, r1, #0x200 + strh r6, [r1, #0xac] + ldr r2, [r5] +#if defined(EUROPE) + add r1, r0, #0x3a4 +#elif defined(JAPAN) + add r1, r0, #0x9f +#else + add r1, r0, #0xa2 +#endif + add r2, r2, r8 + str r0, [r2, #0x3c] + ldr r2, [r5] +#if defined(EUROPE) + add r3, r1, #0x2400 +#elif defined(JAPAN) + add r3, r1, #0x3f00 +#else + add r3, r1, #0x2700 +#endif + add r1, r2, r7, lsl #1 + add r1, r1, #0x200 + strh r3, [r1, #0xb4] + ldr r1, [r5] + add r1, r1, r8 + str r0, [r1, #0x17c] + ldr r0, [r5] + add r0, r0, #8 + add r0, r0, r7, lsl #3 + bl GetMoveRangeId + ldr r1, [r5] + add r1, r1, r8 + str r0, [r1, #0x180] + ldr r0, [r5] + add r0, r0, #8 + add r0, r0, r7, lsl #3 + bl GetMoveType + ldr r2, [r5] + add r1, r7, #1 + add r2, r2, r8 + mov r1, r1, lsl #0x10 + str r0, [r2, #0x184] + mov r7, r1, asr #0x10 +_02041950: + ldr r2, [r5] + ldrsh r3, [r2, #0x28] + cmp r7, r3 + blt _020418C0 + cmp r3, #1 + ble _020419A0 + add r0, r2, #0x2ac + str r0, [sp] + add r0, r2, #0x2c + str r0, [sp, #4] + add r4, r2, #0x2b4 + str r4, [sp, #8] + add r4, r2, #0x16c + ldr r0, _020419F8 ; =_0209C97C + ldr r1, _020419FC ; =0x00001013 + mov r2, #0 + str r4, [sp, #0xc] + bl CreateScrollBoxMulti + ldr r1, _020419F4 ; =_020AFE8C + b _020419D4 +_020419A0: + add r0, r2, #0x2c + str r0, [sp] + add r1, r2, #0x200 + ldrh r3, [r1, #0xb4] + add r2, r2, #0x16c + ldr r0, _020419F8 ; =_0209C97C + str r3, [sp, #4] + str r2, [sp, #8] + ldrh r3, [r1, #0xac] + ldr r1, _020419FC ; =0x00001013 + mov r2, #0 + bl CreateScrollBoxSingle + ldr r1, _020419F4 ; =_020AFE8C +_020419D4: + ldr r1, [r1] + strb r0, [r1] + ldr r0, _020419F4 ; =_020AFE8C + ldr r0, [r0] + ldrsb r0, [r0] + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +_020419F0: .word 0x00001D2C +#else +_020419F0: .word 0x000008D4 +#endif +_020419F4: .word _020AFE8C +_020419F8: .word _0209C97C +_020419FC: .word 0x00001013 + arm_func_end sub_020418A4 + + arm_func_start sub_02041A00 +sub_02041A00: ; 0x02041A00 + ldr r0, _02041A10 ; =_020AFE8C + ldr ip, _02041A14 ; =MemFree + ldr r0, [r0] + bx ip + .align 2, 0 +_02041A10: .word _020AFE8C +_02041A14: .word MemFree + arm_func_end sub_02041A00 + + arm_func_start sub_02041A18 +sub_02041A18: ; 0x02041A18 + stmdb sp!, {r3, lr} + ldr r0, _02041A3C ; =_020AFE8C + ldr r0, [r0] + ldrsb r0, [r0] + bl IsScrollBoxActive + cmp r0, #0 + movne r0, #0 + moveq r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_02041A3C: .word _020AFE8C + arm_func_end sub_02041A18 + + arm_func_start PrintIqSkillsMenu +PrintIqSkillsMenu: ; 0x02041A40 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0xa0 + mov r7, r0 + mov r6, r1 + add r0, sp, #8 + mov r1, #0x98 + mov r5, r2 + mov r4, r3 + bl MemZero + mov r1, #0xd +#ifdef JAPAN + ldr r0, _02041ED4 ; =0x00001586 +#else + rsb r0, r1, #0xa80 +#endif + str r1, [sp, #0xc] + mov r1, #0 + str r1, [sp, #8] + mov r1, #0x10 + strh r0, [sp, #0x10] + str r1, [sp, #0x14] + mov r0, #0x840 + mov r1, #8 + bl MemAlloc + ldr r2, _02041B6C ; =_020AFE90 + mov r1, #0x840 + str r0, [r2, #4] + bl MemZero + ldr r3, _02041B6C ; =_020AFE90 + mov r1, r7 + ldr r0, [r3, #4] + mov r2, r5 + str r6, [r0, #0x790] + ldr r0, [r3, #4] + add r0, r0, #0x700 + strh r7, [r0, #0x94] + ldr r0, [r3, #4] + str r5, [r0, #0x798] + ldr r0, [r3, #4] + add r0, r0, #0x64 + bl GetLearnableIqSkills + ldr r3, _02041B6C ; =_020AFE90 + ldr r1, _02041B70 ; =0x80401C33 + ldr r2, [r3, #4] + mov r5, #8 + add r2, r2, #0x700 + strh r0, [r2, #0x8c] + ldr r2, [r3, #4] + ldr r0, _02041B74 ; =_0209C98C + add r2, r2, #0x700 + ldrsh r6, [r2, #0x8c] + ldr r3, _02041B78 ; =sub_0204213C + add r2, sp, #8 + str r6, [sp] + str r5, [sp, #4] + bl CreateAdvancedMenu + ldr r1, _02041B6C ; =_020AFE90 + mov r2, #0 + ldr r3, [r1, #4] + strb r0, [r3] + ldr r0, [r1, #4] + str r2, [r0, #0x6f0] + ldr r0, [r1, #4] + str r2, [r0, #0x6ec] + ldr r0, [r1, #4] + strb r4, [r0, #0x83c] + ldr r0, [r1, #4] + add r0, r0, #0x700 + strh r2, [r0, #0x8e] + ldr r0, [r1, #4] + add r0, r0, #0x14 + bl InitPreprocessorArgs + ldr r0, _02041B6C ; =_020AFE90 + ldr r1, [r0, #4] + add r0, r1, #0x34 + add r0, r0, #0x800 + str r0, [r1, #0x7fc] + add sp, sp, #0xa0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +#ifdef JAPAN +_02041ED4: .word 0x00001586 +#endif +_02041B6C: .word _020AFE90 +_02041B70: .word 0x80401C33 +_02041B74: .word _0209C98C +_02041B78: .word sub_0204213C + arm_func_end PrintIqSkillsMenu + + arm_func_start sub_02041B7C +sub_02041B7C: ; 0x02041B7C + stmdb sp!, {r4, lr} + sub sp, sp, #0xf8 + ldr r1, _020420BC ; =_020AFE90 + ldr r3, [r1, #4] + ldr r0, [r3, #0x6f0] + cmp r0, #8 + addls pc, pc, r0, lsl #2 + b _020420B0 +_02041B9C: ; jump table + b _02041BC0 ; case 0 + b _02041DB0 ; case 1 + b _02041E40 ; case 2 + b _02041EBC ; case 3 + b _02041F30 ; case 4 + b _02041EE4 ; case 5 + b _02041FA4 ; case 6 + b _02041FE8 ; case 7 + b _020420A0 ; case 8 +_02041BC0: + ldrsb r0, [r3] + bl IsAdvancedMenuActive2 + cmp r0, #0 + bne _02041CF8 + ldr r0, _020420BC ; =_020AFE90 + ldr r0, [r0, #4] + ldrsb r0, [r0] + bl GetAdvancedMenuResult + ldr r2, _020420BC ; =_020AFE90 + mvn r1, #0 + ldr r3, [r2, #4] + str r0, [r3, #0x838] + ldr r2, [r2, #4] + ldr r0, [r2, #0x838] + cmp r0, r1 + moveq r0, #8 + streq r0, [r2, #0x6f0] + beq _020420B0 + mov r0, #0 + bl PlaySeVolumeWrapper + ldr r0, _020420BC ; =_020AFE90 + ldr r2, _020420C0 ; =_0209C9B0 + ldrsb r3, [r0] + ldr r1, [r0, #4] + ldr r2, [r2, r3, lsl #3] + str r2, [r1, #0x79c] + ldr r3, [r0, #4] + ldr r2, [r3, #0x838] + ldrb r1, [r3, #0x83c] + add r2, r3, r2 + ldrb r2, [r2, #0x64] + cmp r1, #0 + bne _02041C60 + cmp r2, #0x18 + cmpne r2, #0x1b + beq _02041C60 + add r1, r2, #0xc8 + and r1, r1, #0xff + cmp r1, #1 + bhi _02041C7C +_02041C60: + mov r1, #3 + ldr r0, _020420BC ; =_020AFE90 + strb r1, [r3, #0x834] + ldr r0, [r0, #4] + mov r1, #0 + strb r1, [r0, #0x835] + b _02041C8C +_02041C7C: + mov r1, #0 + strb r1, [r3, #0x834] + ldr r0, [r0, #4] + strb r1, [r0, #0x835] +_02041C8C: + ldr r0, _020420BC ; =_020AFE90 + mov r1, #0x98 + ldr r0, [r0, #4] + add r0, r0, #0x39c + add r0, r0, #0x400 + bl MemZero + ldr r2, _020420BC ; =_020AFE90 + ldr r3, _020420C4 ; =_0209C9AC + ldr r4, [r2, #4] + mov r1, #0 + add r0, r4, #0x34 + add r0, r0, #0x800 + str r0, [r4, #0x7fc] + str r3, [sp] + str r1, [sp, #4] + str r1, [sp, #8] + ldr r2, [r2, #4] + ldr r0, _020420C8 ; =_0209C99C + add r3, r2, #0x39c + ldr r2, _020420CC ; =0x80000233 + add r3, r3, #0x400 + bl sub_02046A20 + ldr r0, _020420BC ; =_020AFE90 + mov r1, #1 + ldr r0, [r0, #4] + str r1, [r0, #0x6f0] + b _020420B0 +_02041CF8: + add r1, sp, #0xc + mov r0, #0 + bl GetPressedButtons + ldrh r0, [sp, #0xc] + tst r0, #8 + beq _02041D54 + ldr r0, _020420D0 ; =0x00003F04 + bl sub_02017C80 + ldr r0, _020420BC ; =_020AFE90 + ldr r0, [r0, #4] + ldrsb r0, [r0] + bl sub_0202C1E4 + ldr r0, _020420BC ; =_020AFE90 + ldr r0, [r0, #4] + ldrsb r0, [r0] + bl GetAdvancedMenuResult + ldr r1, _020420BC ; =_020AFE90 + mov r2, #3 + ldr r3, [r1, #4] + str r0, [r3, #0x838] + ldr r0, [r1, #4] + str r2, [r0, #0x6f0] + b _020420B0 +_02041D54: + tst r0, #4 + beq _020420B0 + ldr r0, _020420BC ; =_020AFE90 + ldr r1, [r0, #4] + ldrb r0, [r1, #0x83c] + cmp r0, #0 + beq _02041D7C + ldr r0, _020420D4 ; =0x00003F03 + bl sub_02017C80 + b _020420B0 +_02041D7C: + ldrsb r0, [r1] + bl sub_0202C1E4 + ldr r0, _020420BC ; =_020AFE90 + ldr r0, [r0, #4] + ldrsb r0, [r0] + bl GetAdvancedMenuResult + ldr r1, _020420BC ; =_020AFE90 + mov r2, #2 + ldr r3, [r1, #4] + str r0, [r3, #0x838] + ldr r0, [r1, #4] + str r2, [r0, #0x6f0] + b _020420B0 +_02041DB0: + bl sub_02046B04 + mov r4, r0 + bl sub_02046BA0 + ldr r1, _020420BC ; =_020AFE90 + add r2, r4, #2 + strb r0, [r1] + cmp r2, #4 + addls pc, pc, r2, lsl #2 + b _020420B0 +_02041DD4: ; jump table + b _02041DF0 ; case 0 + b _020420B0 ; case 1 + b _02041E14 ; case 2 + b _02041E24 ; case 3 + b _02041DE8 ; case 4 +_02041DE8: + mov r0, #0 + bl PlaySeVolumeWrapper +_02041DF0: + ldr r0, _020420BC ; =_020AFE90 + ldr r0, [r0, #4] + ldrsb r0, [r0] + bl ResumeAdvancedMenu + ldr r0, _020420BC ; =_020AFE90 + mov r1, #0 + ldr r0, [r0, #4] + str r1, [r0, #0x6f0] + b _020420B0 +_02041E14: + ldr r0, [r1, #4] + mov r1, #2 + str r1, [r0, #0x6f0] + b _020420B0 +_02041E24: + mov r0, #0 + bl PlaySeVolumeWrapper + ldr r0, _020420BC ; =_020AFE90 + mov r1, #3 + ldr r0, [r0, #4] + str r1, [r0, #0x6f0] + b _020420B0 +_02041E40: + ldr r1, [r3, #0x838] + add r2, r3, #0x64 + ldrb r0, [r2, r1] + cmp r0, #0x18 + bne _02041E60 + mov r0, #2 + bl PlaySeVolumeWrapper + b _02041E98 +_02041E60: + cmp r0, #0x1b + beq _02041E78 + add r0, r0, #0xc8 + and r0, r0, #0xff + cmp r0, #1 + bhi _02041E84 +_02041E78: + mov r0, #2 + bl PlaySeVolumeWrapper + b _02041E98 +_02041E84: + ldrb r1, [r2, r1] + ldr r0, [r3, #0x790] + bl DisableIqSkill + ldr r0, _020420D8 ; =0x00003F07 + bl sub_02017C80 +_02041E98: + ldr r0, _020420BC ; =_020AFE90 + ldr r0, [r0, #4] + ldrsb r0, [r0] + bl ResumeAdvancedMenu + ldr r0, _020420BC ; =_020AFE90 + mov r1, #0 + ldr r0, [r0, #4] + str r1, [r0, #0x6f0] + b _020420B0 +_02041EBC: + ldrsb r0, [r3] + bl sub_0202812C + ldr r1, _020420BC ; =_020AFE90 + mov r2, #5 + ldr r0, [r1, #4] + add r0, r0, #0x700 + strh r2, [r0, #0x8e] + ldr r0, [r1, #4] + str r2, [r0, #0x6f0] + b _020420B0 +_02041EE4: + add r0, r3, #0x700 + ldrsh r2, [r0, #0x8e] + sub r2, r2, #1 + strh r2, [r0, #0x8e] + ldr r2, [r1, #4] + add r0, r2, #0x700 + ldrsh r0, [r0, #0x8e] + cmp r0, #0 + bge _020420B0 + mov r0, #4 + str r0, [r2, #0x6f0] + ldr r0, [r1, #4] + ldrsb r0, [r0] + bl CloseAdvancedMenu + ldr r0, _020420BC ; =_020AFE90 + mvn r1, #1 + ldr r0, [r0, #4] + strb r1, [r0] + b _020420B0 +_02041F30: + add r0, sp, #0xa8 + bl InitPreprocessorArgs + ldr r0, _020420BC ; =_020AFE90 + add ip, sp, #0xa8 + ldr r3, [r0, #4] + ldr r0, _020420DC ; =_020AFE98 + ldr r2, [r3, #0x838] + ldr r1, _020420E0 ; =0x00001013 + add r2, r3, r2 + ldrb lr, [r2, #0x64] + ldr r3, _020420E4 ; =0x00000A77 + mov r2, #0 + str lr, [sp, #0xb8] + str ip, [sp] + ldr ip, [sp, #0xb8] +#if defined(EUROPE) + add ip, ip, #0x32c + add ip, ip, #0x2400 +#elif defined(JAPAN) + add ip, ip, #0x358 + add ip, ip, #0x3c00 +#else + add ip, ip, #0x2a + add ip, ip, #0x2700 +#endif + mov ip, ip, lsl #0x10 + mov ip, ip, lsr #0x10 + str ip, [sp, #4] + str r2, [sp, #8] + bl CreateScrollBoxSingle + ldr r1, _020420BC ; =_020AFE90 + mov r2, #6 + ldr r3, [r1, #4] + strb r0, [r3, #1] + ldr r0, [r1, #4] + str r2, [r0, #0x6f0] + b _020420B0 +_02041FA4: + ldrsb r0, [r3, #1] + bl IsScrollBoxActive + cmp r0, #0 + bne _020420B0 + ldr r0, _020420BC ; =_020AFE90 + ldr r0, [r0, #4] + ldrsb r0, [r0, #1] + bl CloseScrollBox + ldr r0, _020420BC ; =_020AFE90 + mov r3, #7 + ldr r2, [r0, #4] + mov r1, #8 + str r3, [r2, #0x6f0] + ldr r0, [r0, #4] + add r0, r0, #0x700 + strh r1, [r0, #0x8e] + b _020420B0 +_02041FE8: + add r0, r3, #0x700 + ldrsh r2, [r0, #0x8e] + sub r2, r2, #1 + strh r2, [r0, #0x8e] + ldr r0, [r1, #4] + add r0, r0, #0x700 + ldrsh r2, [r0, #0x8e] + cmp r2, #0 + bge _020420B0 + mov r3, #0 + strh r3, [r0, #0x8e] + ldr r2, [r1, #4] + mov r0, #0xd + str r3, [r2, #0x6f0] + ldr r3, [r1, #4] + str r0, [sp, #0x14] + ldr r2, [r3, #0x838] +#ifdef JAPAN + ldr r1, _02042454 ; =0x00001586 +#else + rsb r1, r0, #0xa80 +#endif + mov r0, #0x10 + str r0, [sp, #0x1c] + str r2, [sp, #0x10] + strh r1, [sp, #0x18] + add r0, r3, #0x700 + ldrsh r1, [r0, #0x94] + ldr r2, [r3, #0x798] + add r0, r3, #0x64 + bl GetLearnableIqSkills + ldr ip, _020420BC ; =_020AFE90 + ldr r1, _020420E8 ; =0x80401C33 + ldr r3, [ip, #4] + add r2, sp, #0x10 + add r3, r3, #0x700 + strh r0, [r3, #0x8c] + ldr r3, [ip, #4] + ldr r0, _020420EC ; =_0209C98C + add r3, r3, #0x700 + ldrsh lr, [r3, #0x8c] + ldr r3, _020420F0 ; =sub_0204213C + mov ip, #8 + str lr, [sp] + str ip, [sp, #4] + bl CreateAdvancedMenu + ldr r1, _020420BC ; =_020AFE90 + ldr r1, [r1, #4] + strb r0, [r1] + b _020420B0 +_020420A0: + mov r0, #9 + str r0, [r3, #0x6f0] + mov r0, #1 + b _020420B4 +_020420B0: + mov r0, #0 +_020420B4: + add sp, sp, #0xf8 + ldmia sp!, {r4, pc} + .align 2, 0 +_020420BC: .word _020AFE90 +_020420C0: .word _0209C9B0 +_020420C4: .word _0209C9AC +_020420C8: .word _0209C99C +_020420CC: .word 0x80000233 +_020420D0: .word 0x00003F04 +_020420D4: .word 0x00003F03 +_020420D8: .word 0x00003F07 +_020420DC: .word _020AFE98 +_020420E0: .word 0x00001013 +#ifdef JAPAN +_020420E4: .word 0x0000158A +_02042454: .word 0x00001586 +#else +_020420E4: .word 0x00000A77 +#endif +_020420E8: .word 0x80401C33 +_020420EC: .word _0209C98C +_020420F0: .word sub_0204213C + arm_func_end sub_02041B7C + + arm_func_start sub_020420F4 +sub_020420F4: ; 0x020420F4 + stmdb sp!, {r3, lr} + ldr r0, _02042138 ; =_020AFE90 + ldr r0, [r0, #4] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + mvn r1, #1 + cmp r0, r1 + beq _0204211C + bl CloseAdvancedMenu +_0204211C: + ldr r0, _02042138 ; =_020AFE90 + ldr r0, [r0, #4] + bl MemFree + ldr r0, _02042138 ; =_020AFE90 + mov r1, #0 + str r1, [r0, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_02042138: .word _020AFE90 + arm_func_end sub_020420F4 + + arm_func_start sub_0204213C +sub_0204213C: ; 0x0204213C + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #0x84 + ldr r2, _02042248 ; =_020AFE90 + mov r4, r0 + ldr r2, [r2, #4] + mov r6, #0 + add r0, r2, r1 + ldrb r5, [r0, #0x64] + ldr r0, [r2, #0x790] + cmp r5, #0x18 + bne _02042174 + mov r0, #3 + bl GetPerformanceFlagWithChecks + b _0204217C +_02042174: + mov r1, r5 + bl IqSkillFlagTest +_0204217C: + cmp r0, #0 + movne r6, #1 + cmp r6, #0 + beq _020421DC + cmp r5, #0x38 + bgt _020421B4 + bge _020421BC + cmp r5, #0x1b + bgt _020421CC + cmp r5, #0x18 + blt _020421CC + cmpne r5, #0x1b + beq _020421BC + b _020421CC +_020421B4: + cmp r5, #0x39 + bne _020421CC +_020421BC: + ldr r1, _0204224C ; =_0209C9CC + add r0, sp, #0x44 + bl strcpy + b _020421E8 +_020421CC: + ldr r1, _02042250 ; =_0209C9D4 + add r0, sp, #0x44 + bl strcpy + b _020421E8 +_020421DC: + ldr r1, _02042254 ; =_0209C9DC + add r0, sp, #0x44 + bl strcpy +_020421E8: + ldr r1, _02042248 ; =_020AFE90 + mov r0, r5 + ldr r1, [r1, #4] + str r5, [r1, #0x24] + bl GetIqSkillStringId + mov r1, r0 + add r0, sp, #4 + mov r2, #0x40 + bl CopyNStringFromId + add r0, sp, #0x44 + add r1, sp, #4 + bl strcat + ldr r1, _02042248 ; =_020AFE90 + mov r0, r4 + ldr r2, [r1, #4] + mov r1, #0x40 + add r2, r2, #0x14 + str r2, [sp] + add r2, sp, #0x44 + mov r3, #0 + bl PreprocessString + mov r0, r4 + add sp, sp, #0x84 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02042248: .word _020AFE90 +_0204224C: .word _0209C9CC +_02042250: .word _0209C9D4 +_02042254: .word _0209C9DC + arm_func_end sub_0204213C + + arm_func_start sub_02042258 +sub_02042258: ; 0x02042258 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #0xc + mov r6, r0 + mov r0, #0xa0 + mov r1, #8 + mov r5, r2 + mov r4, r3 + bl MemAlloc + ldr r1, _020423B4 ; =_020AFEA8 + str r0, [r1, #4] + str r6, [r0] + bl RemoveEmptyItemsInBag + mov r0, #0x14 + bl Arm9LoadUnkFieldNa0x2029EC8 + ldr r1, _020423B4 ; =_020AFEA8 + cmp r4, #0 + ldr r3, [r1, #4] + ldrne r4, _020423B8 ; =sub_020423D8 + str r0, [r3, #8] + ldr r2, _020423BC ; =0x0000032F + ldr r0, [r1, #4] + mov ip, #0x10 + strh r2, [r0, #0x10] + ldr r0, [r1, #4] + mov r3, #0xd + str ip, [r0, #0x14] + ldr r0, [r1, #4] + ldr r2, _020423C0 ; =sub_0204261C + str r3, [r0, #0xc] + ldr r0, [r1, #4] + moveq r4, #0 + str r2, [r0, #0x7c] + bl GetNbItemsInBag + str r4, [sp] + str r0, [sp, #4] + ldr r0, _020423B4 ; =_020AFEA8 + str r5, [sp, #8] + ldr r2, [r0, #4] + ldr r0, _020423C4 ; =_0209C9E4 + ldr r1, _020423C8 ; =0x00443C33 + ldr r3, _020423CC ; =sub_02042760 + add r2, r2, #8 + bl CreateCollectionMenu + ldr r2, _020423B4 ; =_020AFEA8 + ldr r1, _020423D0 ; =sub_0204262C + ldr r3, [r2, #4] + strb r0, [r3, #4] + ldr r0, [r2, #4] + ldrsb r0, [r0, #4] + bl sub_0202D068 + ldr r0, _020423B4 ; =_020AFEA8 + ldr r1, _020423D4 ; =sub_0204263C + ldr r0, [r0, #4] + ldrsb r0, [r0, #4] + bl SetCollectionMenuVoidFn + ldr r0, _020423B4 ; =_020AFEA8 + mov r1, #0xd + ldr r0, [r0, #4] + ldrsb r0, [r0, #4] + bl SetCollectionMenuField0x1BC + ldr r0, _020423B4 ; =_020AFEA8 + ldr r1, [r0, #4] + ldr r0, [r1] + cmp r0, #3 + beq _02042368 + cmp r0, #4 + beq _0204237C + b _020423A0 +_02042368: +#ifdef EUROPE + ldrsb r0, [r1, #4] + mov r1, #9 + bl SetCollectionMenuField0x1BC +#endif + mov r0, #0 + bl sub_0204440C + mov r0, #2 + bl sub_0204426C + b _020423A0 +_0204237C: + ldrsb r0, [r1, #4] +#ifdef EUROPE + mov r1, #9 + bl SetCollectionMenuField0x1BC + ldr r0, _020423B4 ; =_020AFEA8 +#endif + mov r1, #0x76 +#ifdef EUROPE + ldr r0, [r0, #4] + ldrsb r0, [r0, #4] +#endif + bl SetCollectionMenuWidth + mov r0, #0 + bl sub_0204440C + mov r0, #0 + bl sub_0204426C + mov r0, #0 + bl sub_02044568 +_020423A0: + ldr r0, _020423B4 ; =_020AFEA8 + ldr r0, [r0, #4] + ldrsb r0, [r0, #4] + add sp, sp, #0xc + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_020423B4: .word _020AFEA8 +_020423B8: .word sub_020423D8 +#ifdef JAPAN +_020423BC: .word 0x000031F4 +#else +_020423BC: .word 0x0000032F +#endif +_020423C0: .word sub_0204261C +_020423C4: .word _0209C9E4 +_020423C8: .word 0x00443C33 +_020423CC: .word sub_02042760 +_020423D0: .word sub_0204262C +_020423D4: .word sub_0204263C + arm_func_end sub_02042258 + + arm_func_start sub_020423D8 +sub_020423D8: ; 0x020423D8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r1, _02042618 ; =_020AFEA8 + mov r5, #0 + ldr r2, [r1, #4] + ldr r1, [r2] + cmp r1, #3 + bne _02042498 + tst r0, #0x800 + beq _02042498 + bl sub_02042B20 + cmp r0, #0 + ble _0204241C + bl sub_02042AF8 + mov r0, #6 + bl PlaySeVolumeWrapper + mov r5, #1 + b _020425D8 +_0204241C: + bl sub_0200FD48 + mov r4, r0 + bl CountNbOfItemsInStorage + sub r7, r4, r0 + mov r8, r5 + mov r6, #1 + ldr r4, _02042618 ; =_020AFEA8 + b _02042470 +_0204243C: + cmp r7, #0 + ble _02042478 + mov r0, r8, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetItemAtIdx + ldrsh r0, [r0, #4] + bl IsStorableItem + cmp r0, #0 + ldrne r0, [r4, #8] + movne r5, r6 + strne r6, [r0, r8, lsl #2] + subne r7, r7, #1 + add r8, r8, #1 +_02042470: + cmp r8, #0x32 + blt _0204243C +_02042478: + cmp r5, #0 + beq _0204248C + mov r0, #6 + bl PlaySeVolumeWrapper + b _020425D8 +_0204248C: + mov r0, #2 + bl PlaySeVolumeWrapper + b _020425D8 +_02042498: + tst r0, #0x400 + beq _020425D8 + ldrsb r0, [r2, #4] + bl sub_0202D0EC + ldr r1, _02042618 ; =_020AFEA8 + mov r4, r0 + ldr r0, [r1, #4] + ldr r0, [r0] + cmp r0, #3 + beq _020424CC + cmp r0, #4 + beq _02042570 + b _020425D8 +_020424CC: + mov r0, r4, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetItemAtIdx + ldrsh r0, [r0, #4] + bl IsStorableItem + cmp r0, #0 + beq _02042560 + ldr r0, _02042618 ; =_020AFEA8 + ldr r2, [r0, #8] + ldr r0, [r2, r4, lsl #2] + tst r0, #1 + beq _02042514 + mov r1, #0 + mov r0, #6 + str r1, [r2, r4, lsl #2] + bl PlaySeVolumeWrapper + mov r5, #1 + b _020425D8 +_02042514: + bl CountNbOfItemsInStorage + mov r6, r0 + bl sub_02042B20 + mov r5, r0 + bl sub_0200FD48 + add r1, r6, r5 + cmp r1, r0 + bge _02042550 + mov r0, #6 + bl PlaySeVolumeWrapper + ldr r0, _02042618 ; =_020AFEA8 + mov r5, #1 + ldr r0, [r0, #8] + str r5, [r0, r4, lsl #2] + b _020425D8 +_02042550: + mov r0, #2 + bl PlaySeVolumeWrapper + mov r5, #0 + b _020425D8 +_02042560: + mov r0, #2 + bl PlaySeVolumeWrapper + mov r5, #0 + b _020425D8 +_02042570: + mov r0, r4, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetItemAtIdx + ldrsh r0, [r0, #4] + bl IsShoppableItem + cmp r0, #0 + beq _020425CC + ldr r0, _02042618 ; =_020AFEA8 + mov r5, #1 + ldr r2, [r0, #8] + ldr r0, [r2, r4, lsl #2] + tst r0, #1 + mov r0, #6 + beq _020425B8 + mov r1, #0 + str r1, [r2, r4, lsl #2] + bl PlaySeVolumeWrapper + b _020425D8 +_020425B8: + bl PlaySeVolumeWrapper + ldr r0, _02042618 ; =_020AFEA8 + ldr r0, [r0, #8] + str r5, [r0, r4, lsl #2] + b _020425D8 +_020425CC: + mov r0, #2 + bl PlaySeVolumeWrapper + mov r5, #0 +_020425D8: + bl sub_02042B20 + cmp r0, #0 + beq _020425FC + ldr r0, _02042618 ; =_020AFEA8 + mov r1, #1 + ldr r0, [r0, #4] + ldrsb r0, [r0, #4] + bl sub_0202D16C + b _02042610 +_020425FC: + ldr r0, _02042618 ; =_020AFEA8 + mov r1, #0 + ldr r0, [r0, #4] + ldrsb r0, [r0, #4] + bl sub_0202D16C +_02042610: + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02042618: .word _020AFEA8 + arm_func_end sub_020423D8 + + arm_func_start sub_0204261C +sub_0204261C: ; 0x0204261C + stmdb sp!, {r3, lr} + bl sub_02042BE0 + bl sub_02044308 + ldmia sp!, {r3, pc} + arm_func_end sub_0204261C + + arm_func_start sub_0204262C +sub_0204262C: ; 0x0204262C + stmdb sp!, {r3, lr} + bl sub_02042BE0 + bl sub_02044308 + ldmia sp!, {r3, pc} + arm_func_end sub_0204262C + + arm_func_start sub_0204263C +sub_0204263C: ; 0x0204263C + ldr r2, _0204265C ; =BAG_ITEMS_PTR_MIRROR + mov r1, #6 + ldr r2, [r2] + ldr ip, _02042660 ; =sub_020444B0 + ldr r2, [r2, #0x384] + mla r1, r0, r1, r2 + ldrsh r0, [r1, #4] + bx ip + .align 2, 0 +_0204265C: .word BAG_ITEMS_PTR_MIRROR +_02042660: .word sub_020444B0 + arm_func_end sub_0204263C + + arm_func_start sub_02042664 +sub_02042664: ; 0x02042664 + stmdb sp!, {r3, lr} + ldr r0, _020426B0 ; =_020AFEA8 + ldr r0, [r0, #4] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl sub_02044474 + bl sub_020442CC + bl sub_020445C8 + ldr r0, _020426B0 ; =_020AFEA8 + ldr r0, [r0, #4] + ldrsb r0, [r0, #4] + bl CloseCollectionMenu + ldr r0, _020426B0 ; =_020AFEA8 + ldr r0, [r0, #4] + bl MemFree + ldr r0, _020426B0 ; =_020AFEA8 + mov r1, #0 + str r1, [r0, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_020426B0: .word _020AFEA8 + arm_func_end sub_02042664 + + arm_func_start sub_020426B4 +sub_020426B4: ; 0x020426B4 + stmdb sp!, {r3, lr} + ldr r0, _0204272C ; =_020AFEA8 + ldr r0, [r0, #4] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0, #4] + bl IsCollectionMenuActive + cmp r0, #0 + bne _02042708 + ldr r0, _0204272C ; =_020AFEA8 + ldr r0, [r0, #4] + ldrsb r0, [r0, #4] + bl sub_0202C75C + mvn r1, #0 + cmp r0, r1 + ldrne r1, _0204272C ; =_020AFEA8 + moveq r0, #2 + strneh r0, [r1] + movne r0, #3 + ldmia sp!, {r3, pc} +_02042708: + ldr r0, _0204272C ; =_020AFEA8 + ldr r0, [r0, #4] + ldrsb r0, [r0, #4] + bl sub_0202C748 + and r1, r0, #0xff + mov r0, #0x14 + bl Arm9StoreUnkFieldNa0x2029ED8 + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0204272C: .word _020AFEA8 + arm_func_end sub_020426B4 + + arm_func_start sub_02042730 +sub_02042730: ; 0x02042730 + ldr r0, _02042740 ; =_020AFEA8 + mov r1, #0 + strh r1, [r0] + bx lr + .align 2, 0 +_02042740: .word _020AFEA8 + arm_func_end sub_02042730 + + arm_func_start sub_02042744 +sub_02042744: ; 0x02042744 + ldr r0, _02042758 ; =_020AFEA8 + ldr ip, _0204275C ; =sub_0202C620 + ldr r0, [r0, #4] + ldrsb r0, [r0, #4] + bx ip + .align 2, 0 +_02042758: .word _020AFEA8 +_0204275C: .word sub_0202C620 + arm_func_end sub_02042744 + + arm_func_start sub_02042760 +sub_02042760: ; 0x02042760 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x64 + mov r5, r1 + mov r1, #6 + ldr r3, _02042A64 ; =BAG_ITEMS_PTR_MIRROR + mul r4, r5, r1 + ldr r1, [r3] + ldr r3, _02042A68 ; =_020AFEA8 + ldr r6, [r1, #0x384] + ldr r7, [r3, #4] + ldrh r1, [r6, r4] + add lr, r6, r4 + mov r4, r2 + strh r1, [sp] + ldrh ip, [lr, #2] + mov r6, r0 + add r1, sp, #0 + strh ip, [sp, #2] + ldrh r2, [lr, #4] + strh r2, [sp, #4] + ldr r2, [r7] + cmp r2, #5 + addls pc, pc, r2, lsl #2 + b _02042A3C +_020427C0: ; jump table + b _020427D8 ; case 0 + b _020427E4 ; case 1 + b _020427E4 ; case 2 + b _02042808 ; case 3 + b _020428D4 ; case 4 + b _020429E8 ; case 5 +_020427D8: + mov r2, #0 + bl sub_0200D670 + b _02042A3C +_020427E4: + mov r7, #0 + mov r3, #1 + add r2, sp, #8 + str r7, [sp, #8] + strb r7, [sp, #0xc] + strb r3, [sp, #0x10] + strb r3, [sp] + bl sub_0200D670 + b _02042A3C +_02042808: + mov r1, #0 + mov r0, #1 + str r1, [sp, #8] + strb r1, [sp, #0xc] + strb r0, [sp, #0x10] + strb r0, [sp] + ldr r0, [r3, #8] + ldr r0, [r0, r5, lsl #2] + tst r0, #1 + bne _0204284C + mov r0, r5, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetItemAtIdx + ldrsh r0, [r0, #4] + bl IsStorableItem + cmp r0, #0 + beq _02042890 +_0204284C: + add r0, sp, #0x14 + add r1, sp, #0 + add r2, sp, #8 + bl sub_0200D670 + ldrb r2, [sp, #1] + cmp r2, #0 + beq _0204287C + ldr r1, _02042A6C ; =_0209C9F4 + add r3, sp, #0x14 + mov r0, r6 + bl SprintfStatic__02042A84 + b _02042A3C +_0204287C: + ldr r1, _02042A70 ; =_0209C9FC + add r2, sp, #0x14 + mov r0, r6 + bl SprintfStatic__02042A84 + b _02042A3C +_02042890: + add r0, sp, #0x14 + add r1, sp, #0 + add r2, sp, #8 + bl sub_0200D65C + ldrb r2, [sp, #1] + cmp r2, #0 + beq _020428C0 + ldr r1, _02042A74 ; =_0209CA08 + add r3, sp, #0x14 + mov r0, r6 + bl SprintfStatic__02042A84 + b _02042A3C +_020428C0: + ldr r1, _02042A78 ; =_0209CA18 + add r2, sp, #0x14 + mov r0, r6 + bl SprintfStatic__02042A84 + b _02042A3C +_020428D4: + ldrsh r0, [sp, #4] + bl IsShoppableItem + cmp r0, #0 + beq _020429A4 + mov r7, #3 + mov r3, #0 + mov r2, #0x6a + mov r1, #1 + add r0, sp, #0 + str r7, [sp, #8] + strb r3, [sp, #0xc] + strh r2, [sp, #0xe] + strb r1, [sp, #0x10] + strb r7, [sp] + bl GetActualSellPrice + mov r7, r0 + bl GetMoneyCarried + ldr r1, _02042A7C ; =0x0001869F + add r0, r7, r0 + cmp r0, r1 + add r0, sp, #0x14 + add r1, sp, #0 + add r2, sp, #8 + bgt _0204296C + bl sub_0200D670 + ldrb r2, [sp, #1] + cmp r2, #0 + beq _02042958 + ldr r1, _02042A6C ; =_0209C9F4 + add r3, sp, #0x14 + mov r0, r6 + bl SprintfStatic__02042A84 + b _02042A3C +_02042958: + ldr r1, _02042A70 ; =_0209C9FC + add r2, sp, #0x14 + mov r0, r6 + bl SprintfStatic__02042A84 + b _02042A3C +_0204296C: + bl sub_0200D65C + ldrb r2, [sp, #1] + cmp r2, #0 + beq _02042990 + ldr r1, _02042A74 ; =_0209CA08 + add r3, sp, #0x14 + mov r0, r6 + bl SprintfStatic__02042A84 + b _02042A3C +_02042990: + ldr r1, _02042A78 ; =_0209CA18 + add r2, sp, #0x14 + mov r0, r6 + bl SprintfStatic__02042A84 + b _02042A3C +_020429A4: + add r0, sp, #0x14 + add r1, sp, #0 + mov r2, #0 + bl sub_0200D65C + ldrb r2, [sp, #1] + cmp r2, #0 + beq _020429D4 + ldr r1, _02042A74 ; =_0209CA08 + add r3, sp, #0x14 + mov r0, r6 + bl SprintfStatic__02042A84 + b _02042A3C +_020429D4: + ldr r1, _02042A78 ; =_0209CA18 + add r2, sp, #0x14 + mov r0, r6 + bl SprintfStatic__02042A84 + b _02042A3C +_020429E8: + ldrsh r0, [sp, #4] + mov r2, #0 + mov r1, #1 + str r2, [sp, #8] + strb r2, [sp, #0xc] + strb r1, [sp, #0x10] + strb r1, [sp] + bl IsGummi + cmp r0, #0 + add r1, sp, #0 + add r2, sp, #8 + beq _02042A24 + mov r0, r6 + bl sub_0200D670 + b _02042A3C +_02042A24: + add r0, sp, #0x14 + bl sub_0200D65C + ldr r1, _02042A80 ; =_0209CA2C + add r2, sp, #0x14 + mov r0, r6 + bl SprintfStatic__02042A84 +_02042A3C: + ldr r0, _02042A68 ; =_020AFEA8 + ldr r0, [r0, #8] + ldr r0, [r0, r5, lsl #2] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + str r0, [r4] + mov r0, r6 + add sp, sp, #0x64 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02042A64: .word BAG_ITEMS_PTR_MIRROR +_02042A68: .word _020AFEA8 +_02042A6C: .word _0209C9F4 +_02042A70: .word _0209C9FC +_02042A74: .word _0209CA08 +_02042A78: .word _0209CA18 +_02042A7C: .word 0x0001869F +_02042A80: .word _0209CA2C + arm_func_end sub_02042760 + + arm_func_start SprintfStatic__02042A84 +SprintfStatic__02042A84: ; 0x02042A84 + 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__02042A84 + + arm_func_start sub_02042AAC +sub_02042AAC: ; 0x02042AAC + stmdb sp!, {r3, lr} + ldr r0, _02042AD8 ; =_020AFEA8 + ldr r0, [r0, #4] + cmp r0, #0 + ldrnesb r0, [r0, #4] + mvnne r1, #1 + cmpne r0, r1 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + bl IsCollectionMenuState3 + ldmia sp!, {r3, pc} + .align 2, 0 +_02042AD8: .word _020AFEA8 + arm_func_end sub_02042AAC + + arm_func_start sub_02042ADC +sub_02042ADC: ; 0x02042ADC + ldr r0, _02042AF0 ; =_020AFEA8 + ldr ip, _02042AF4 ; =sub_0202D0EC + ldr r0, [r0, #4] + ldrsb r0, [r0, #4] + bx ip + .align 2, 0 +_02042AF0: .word _020AFEA8 +_02042AF4: .word sub_0202D0EC + arm_func_end sub_02042ADC + + arm_func_start sub_02042AF8 +sub_02042AF8: ; 0x02042AF8 + mov r3, #0 + ldr r0, _02042B1C ; =_020AFEA8 + mov r2, r3 +_02042B04: + ldr r1, [r0, #8] + str r2, [r1, r3, lsl #2] + add r3, r3, #1 + cmp r3, #0x32 + blt _02042B04 + bx lr + .align 2, 0 +_02042B1C: .word _020AFEA8 + arm_func_end sub_02042AF8 + + arm_func_start sub_02042B20 +sub_02042B20: ; 0x02042B20 + ldr r1, _02042B4C ; =_020AFEA8 + mov r0, #0 + ldr r3, [r1, #8] + mov r2, r0 +_02042B30: + ldr r1, [r3, r2, lsl #2] + add r2, r2, #1 + tst r1, #1 + addne r0, r0, #1 + cmp r2, #0x32 + blt _02042B30 + bx lr + .align 2, 0 +_02042B4C: .word _020AFEA8 + arm_func_end sub_02042B20 + + arm_func_start sub_02042B50 +sub_02042B50: ; 0x02042B50 + ldr r1, _02042B80 ; =_020AFEA8 + mov r0, #0 + ldr r2, [r1, #8] + b _02042B70 +_02042B60: + ldr r1, [r2, r0, lsl #2] + tst r1, #1 + bxne lr + add r0, r0, #1 +_02042B70: + cmp r0, #0x32 + blt _02042B60 + mvn r0, #0 + bx lr + .align 2, 0 +_02042B80: .word _020AFEA8 + arm_func_end sub_02042B50 + + arm_func_start sub_02042B84 +sub_02042B84: ; 0x02042B84 + ldr r1, _02042B94 ; =_020AFEA8 + ldr r1, [r1, #8] + ldr r0, [r1, r0, lsl #2] + bx lr + .align 2, 0 +_02042B94: .word _020AFEA8 + arm_func_end sub_02042B84 + + arm_func_start sub_02042B98 +sub_02042B98: ; 0x02042B98 + stmdb sp!, {r3, lr} + mov r0, #0xc8 + mov r1, #8 + bl MemAlloc + ldr r1, _02042BB8 ; =_020AFEA8 + str r0, [r1, #8] + bl sub_02042AF8 + ldmia sp!, {r3, pc} + .align 2, 0 +_02042BB8: .word _020AFEA8 + arm_func_end sub_02042B98 + + arm_func_start sub_02042BBC +sub_02042BBC: ; 0x02042BBC + stmdb sp!, {r3, lr} + ldr r0, _02042BDC ; =_020AFEA8 + ldr r0, [r0, #8] + bl MemFree + ldr r0, _02042BDC ; =_020AFEA8 + mov r1, #0 + str r1, [r0, #8] + ldmia sp!, {r3, pc} + .align 2, 0 +_02042BDC: .word _020AFEA8 + arm_func_end sub_02042BBC + + arm_func_start sub_02042BE0 +sub_02042BE0: ; 0x02042BE0 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + bl GetNbItemsInBag + mov r1, #6 + mov r4, r0 + mov r0, #0 + ldr ip, _02042CE8 ; =_020AFEA8 + ldr r3, _02042CEC ; =BAG_ITEMS_PTR_MIRROR + mov r2, r1 + b _02042C44 +_02042C04: + ldr r5, [ip, #8] + ldr r5, [r5, r0, lsl #2] + tst r5, #1 + muleq r6, r0, r1 + ldreq r5, [r3] + ldreq r7, [r5, #0x384] + ldreqb r5, [r7, r6] + biceq r5, r5, #0x80 + beq _02042C3C + mul r6, r0, r2 + ldr r5, [r3] + ldr r7, [r5, #0x384] + ldrb r5, [r7, r6] + orr r5, r5, #0x80 +_02042C3C: + strb r5, [r7, r6] + add r0, r0, #1 +_02042C44: + cmp r0, r4 + blt _02042C04 + bl SortItemsInBag + mov r2, #0 + mov r7, r2 + mov r0, #1 + mov r3, #6 + ldr lr, _02042CEC ; =BAG_ITEMS_PTR_MIRROR + ldr ip, _02042CE8 ; =_020AFEA8 + b _02042CA4 +_02042C6C: + mul r1, r2, r3 + ldr r5, [lr] + ldr r5, [r5, #0x384] + ldrb r5, [r5, r1] + tst r5, #0x80 + ldr r5, [ip, #8] + strne r0, [r5, r2, lsl #2] + streq r7, [r5, r2, lsl #2] + ldr r5, [lr] + add r2, r2, #1 + ldr r6, [r5, #0x384] + ldrb r5, [r6, r1] + bic r5, r5, #0x80 + strb r5, [r6, r1] +_02042CA4: + cmp r2, r4 + blt _02042C6C + ldr r1, _02042CE8 ; =_020AFEA8 + mvn r0, #1 + ldr r1, [r1, #4] + ldrsb r1, [r1, #4] + cmp r1, r0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + bl GetNbItemsInBag + ldr r2, _02042CE8 ; =_020AFEA8 + mov r1, r0 + ldr r0, [r2, #4] + mov r2, #8 + ldrsb r0, [r0, #4] + mov r3, #0 + bl sub_0202C654 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02042CE8: .word _020AFEA8 +_02042CEC: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02042BE0 + + arm_func_start sub_02042CF0 +sub_02042CF0: ; 0x02042CF0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r5, r0 + mov r0, #0x18c0 + mov r1, #8 + mov r4, r2 + bl MemAlloc + ldr r2, _02042F88 ; =_020AFEB4 + mvn r3, #1 + str r0, [r2, #4] + str r5, [r0] + ldr r0, [r2, #4] + mov r1, #0 + strb r3, [r0, #0x7d5] + ldr r0, [r2, #4] + strb r3, [r0, #0x7d6] + ldr r0, [r2, #4] + strb r3, [r0, #0x7d7] + ldr r0, [r2, #4] + strb r3, [r0, #0x7d8] + ldr r0, [r2, #4] + strb r3, [r0, #0x7d9] + ldr r0, [r2, #4] + str r1, [r0, #0x90c] + ldr r0, [r2, #4] + add r0, r0, #0x900 + strh r1, [r0, #0x10] + ldr r0, [r2, #0x10] + bl sub_02043BFC + ldr r2, _02042F88 ; =_020AFEB4 + ldr r1, [r2, #4] + add r1, r1, #0x900 + strh r0, [r1, #0x10] + ldr r0, [r2, #4] + add r0, r0, #0x900 + ldrsh r0, [r0, #0x10] + cmp r0, #0 + ble _02042DB4 + ldr r0, [r2, #0x10] + cmp r0, #5 + bne _02042DB4 + ldrsh r0, [r2] + cmp r0, #0 + beq _02042DB4 + bl sub_020440F8 + ldr r1, _02042F88 ; =_020AFEB4 + ldr r1, [r1, #4] + add r1, r1, #0x900 + strh r0, [r1, #0x10] +_02042DB4: + ldr r0, _02042F88 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x900 + ldrsh r0, [r0, #0x10] + cmp r0, #0 + bgt _02042DF0 + mov r0, #9 + mov r1, #0 + bl sub_02043BFC + ldr r2, _02042F88 ; =_020AFEB4 + mov r3, #9 + ldr r1, [r2, #4] + add r1, r1, #0x900 + strh r0, [r1, #0x10] + str r3, [r2, #0x10] +_02042DF0: + ldr r1, _02042F88 ; =_020AFEB4 + sub r2, r5, #2 + ldr r0, [r1, #4] + ldr r5, _02042F8C ; =0x000002F3 + add r0, r0, #0x1000 + str r4, [r0, #0x8bc] + ldrsh ip, [r1, #2] + ldr r0, [r1, #4] + mov r3, #0x10 + str ip, [r0, #0x7dc] + ldr r0, [r1, #4] + mov ip, #0xd + add r0, r0, #0x700 + strh r5, [r0, #0xe4] + ldr r0, [r1, #4] + ldr r5, _02042F90 ; =_0204357C + str r3, [r0, #0x7e8] + ldr r0, [r1, #4] + ldr r3, _02042F94 ; =_020441BC + str ip, [r0, #0x7e0] + ldr r0, [r1, #4] + cmp r2, #5 + str r5, [r0, #0x858] + ldr r0, [r1, #4] + mov r5, #0 + str r3, [r0, #0x850] + bhi _02042E6C + mov r0, #1 + mov r1, r0, lsl r2 + tst r1, #0x2b + movne r5, r0 +_02042E6C: + ldr r1, _02042F88 ; =_020AFEB4 + cmp r5, #0 + movne r2, #0 + ldr r3, [r1, #4] + ldreq r2, _02042F98 ; =sub_02042FB8 + ldr r0, _02042F9C ; =_0209CA58 + str r2, [sp] + add r2, r3, #0x900 + ldrsh r5, [r2, #0x10] + add r2, r3, #0x3dc + ldr r1, _02042FA0 ; =0x00447C33 + str r5, [sp, #4] + ldr r3, _02042FA4 ; =_020432B4 + add r2, r2, #0x400 + str r4, [sp, #8] + bl CreateCollectionMenu + ldr r2, _02042F88 ; =_020AFEB4 + ldr r1, _02042FA8 ; =sub_020430F4 + ldr r3, [r2, #4] + strb r0, [r3, #0x7d4] + ldr r0, [r2, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_0202D068 + ldr r0, _02042F88 ; =_020AFEB4 + ldr r1, _02042FAC ; =sub_02043148 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl SetCollectionMenuVoidFn + ldr r0, _02042F88 ; =_020AFEB4 + ldr r0, [r0, #4] + ldr r0, [r0] + cmp r0, #7 + addls pc, pc, r0, lsl #2 + b _02042F70 +_02042EFC: ; jump table + b _02042F70 ; case 0 + b _02042F28 ; case 1 + b _02042F28 ; case 2 + b _02042F1C ; case 3 + b _02042F28 ; case 4 + b _02042F60 ; case 5 + b _02042F3C ; case 6 + b _02042F60 ; case 7 +_02042F1C: + mov r0, #0 + bl sub_0204440C + b _02042F70 +_02042F28: + mov r0, #0 + bl sub_0204440C + mov r0, #2 + bl sub_0204426C + b _02042F70 +_02042F3C: + ldr r0, _02042FB0 ; =_0209CA48 + ldr r1, _02042FB4 ; =sub_02044210 + bl CreateTextBox + ldr r1, _02042F88 ; =_020AFEB4 + ldr r1, [r1, #4] + strb r0, [r1, #0x7d5] + mov r0, #1 + bl sub_0204426C + b _02042F70 +_02042F60: + mov r0, #0 + bl sub_0204440C + mov r0, #1 + bl sub_0204426C +_02042F70: + ldr r0, _02042F88 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02042F88: .word _020AFEB4 +#ifdef JAPAN +_02042F8C: .word 0x0000239B +#else +_02042F8C: .word 0x000002F3 +#endif +_02042F90: .word sub_0204357C +_02042F94: .word sub_020441BC +_02042F98: .word sub_02042FB8 +_02042F9C: .word _0209CA58 +_02042FA0: .word 0x00447C33 +_02042FA4: .word sub_020432B4 +_02042FA8: .word sub_020430F4 +_02042FAC: .word sub_02043148 +_02042FB0: .word _0209CA48 +_02042FB4: .word sub_02044210 + arm_func_end sub_02042CF0 + + arm_func_start sub_02042FB8 +sub_02042FB8: ; 0x02042FB8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + tst r0, #0x400 + mov r4, #0 + beq _020430A8 + ldr r0, _020430F0 ; =_020AFEB4 + ldr r0, [r0, #4] + ldr r0, [r0] + cmp r0, #1 + cmpne r0, #4 + cmpne r0, #6 + bne _020430A8 + bl sub_02043468 + ldr r1, _020430F0 ; =_020AFEB4 + mov r5, r0 + ldr r0, [r1, #8] + ldrb r0, [r0, r5] + tst r0, #1 + movne r4, #1 + bne _0204303C + ldr r0, [r1, #4] + ldr r0, [r0] + cmp r0, #1 + bne _02043038 + bl GetNbItemsInBag + mov r7, r0 + bl sub_020434FC + mov r6, r0 + bl GetCurrentBagCapacity + add r1, r7, r6 + cmp r1, r0 + movlt r4, #1 + b _0204303C +_02043038: + mov r4, #1 +_0204303C: + cmp r4, #0 + beq _020430A0 + mov r0, #6 + bl PlaySeVolumeWrapper + ldr r0, _020430F0 ; =_020AFEB4 + mvn r1, #1 + ldr r3, [r0, #8] + ldrb r2, [r3, r5] + eor r2, r2, #1 + strb r2, [r3, r5] + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd6] + cmp r0, r1 + beq _0204307C + bl sub_0202F9B8 +_0204307C: + ldr r0, _020430F0 ; =_020AFEB4 + ldr r1, [r0, #4] + ldr r0, [r1] + cmp r0, #6 + bne _020430A8 + add r0, r1, #0x700 + ldrsb r0, [r0, #0xd5] + bl sub_0202F9B8 + b _020430A8 +_020430A0: + mov r0, #2 + bl PlaySeVolumeWrapper +_020430A8: + bl sub_020434FC + cmp r0, #0 + ble _020430D0 + ldr r0, _020430F0 ; =_020AFEB4 + mov r1, #1 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_0202D16C + b _020430E8 +_020430D0: + ldr r0, _020430F0 ; =_020AFEB4 + mov r1, #0 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_0202D16C +_020430E8: + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_020430F0: .word _020AFEB4 + arm_func_end sub_02042FB8 + + arm_func_start sub_020430F4 +sub_020430F4: ; 0x020430F4 + stmdb sp!, {r3, lr} + ldr r0, _02043144 ; =_020AFEB4 + mov r1, #1 + ldr r0, [r0, #0x10] + bl sub_02043BFC + ldr r2, _02043144 ; =_020AFEB4 + mov r3, #0 + ldr r1, [r2, #4] + add r1, r1, #0x900 + strh r0, [r1, #0x10] + ldr r2, [r2, #4] + add r0, r2, #0x700 + add r1, r2, #0x900 + add r2, r2, #0x1000 + ldrsb r0, [r0, #0xd4] + ldrsh r1, [r1, #0x10] + ldr r2, [r2, #0x8bc] + bl sub_0202C654 + bl sub_02044308 + ldmia sp!, {r3, pc} + .align 2, 0 +_02043144: .word _020AFEB4 + arm_func_end sub_020430F4 + + arm_func_start sub_02043148 +sub_02043148: ; 0x02043148 + stmdb sp!, {r3, lr} + ldr r1, _02043168 ; =_020AFEB4 + ldr r1, [r1, #4] + add r0, r1, r0, lsl #1 + ldrsh r0, [r0, #4] + bl sub_02010044 + bl sub_020444B0 + ldmia sp!, {r3, pc} + .align 2, 0 +_02043168: .word _020AFEB4 + arm_func_end sub_02043148 + + arm_func_start sub_0204316C +sub_0204316C: ; 0x0204316C + cmp r0, #0 + movne r0, #5 + moveq r0, #7 + bx lr + arm_func_end sub_0204316C + + arm_func_start sub_0204317C +sub_0204317C: ; 0x0204317C + stmdb sp!, {r3, lr} + ldr r0, _02043214 ; =_020AFEB4 + ldr r0, [r0, #4] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl sub_02044474 + bl sub_020442CC + bl sub_020445C8 + ldr r0, _02043214 ; =_020AFEB4 + ldr r1, [r0, #4] + ldr r0, [r1] + cmp r0, #6 + bne _020431BC + add r0, r1, #0x700 + ldrsb r0, [r0, #0xd5] + bl CloseTextBox +_020431BC: + ldr r0, _02043214 ; =_020AFEB4 + mvn r1, #1 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd6] + cmp r0, r1 + beq _020431DC + bl CloseTextBox +_020431DC: + ldr r1, _02043214 ; =_020AFEB4 + ldr r0, [r1, #4] + ldr r2, [r0] + add r0, r0, #0x700 + str r2, [r1, #0xc] + ldrsb r0, [r0, #0xd4] + bl CloseCollectionMenu + ldr r0, _02043214 ; =_020AFEB4 + ldr r0, [r0, #4] + bl MemFree + ldr r0, _02043214 ; =_020AFEB4 + mov r1, #0 + str r1, [r0, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_02043214: .word _020AFEB4 + arm_func_end sub_0204317C + + arm_func_start sub_02043218 +sub_02043218: ; 0x02043218 + ldr r0, _02043228 ; =_020AFEB4 + mov r1, #0 + strh r1, [r0, #2] + bx lr + .align 2, 0 +_02043228: .word _020AFEB4 + arm_func_end sub_02043218 + + arm_func_start sub_0204322C +sub_0204322C: ; 0x0204322C + ldr r1, _02043238 ; =_020AFEB4 + strh r0, [r1, #2] + bx lr + .align 2, 0 +_02043238: .word _020AFEB4 + arm_func_end sub_0204322C + + arm_func_start sub_0204323C +sub_0204323C: ; 0x0204323C + stmdb sp!, {r3, lr} + bl sub_02043254 + ldr r1, _02043250 ; =_020AFEB4 + strh r0, [r1, #2] + ldmia sp!, {r3, pc} + .align 2, 0 +_02043250: .word _020AFEB4 + arm_func_end sub_0204323C + + arm_func_start sub_02043254 +sub_02043254: ; 0x02043254 + ldr r1, _02043298 ; =_020AFEB4 + mov r3, #0 + ldr ip, [r1, #4] + mvn r1, #0 + b _02043278 +_02043268: + cmp r0, r2 + moveq r0, r3 + bxeq lr + add r3, r3, #1 +_02043278: + cmp r3, #0x3e8 + bge _02043290 + add r2, ip, r3, lsl #1 + ldrsh r2, [r2, #4] + cmp r2, r1 + bne _02043268 +_02043290: + mov r0, #0 + bx lr + .align 2, 0 +_02043298: .word _020AFEB4 + arm_func_end sub_02043254 + + arm_func_start sub_0204329C +sub_0204329C: ; 0x0204329C + ldr r1, _020432B0 ; =_020AFEB4 + ldr r1, [r1, #4] + add r0, r1, r0, lsl #1 + ldrsh r0, [r0, #4] + bx lr + .align 2, 0 +_020432B0: .word _020AFEB4 + arm_func_end sub_0204329C + + arm_func_start sub_020432B4 +sub_020432B4: ; 0x020432B4 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + ldr r3, _02043318 ; =_020AFEB4 + mov r5, r0 + ldr r0, [r3, #4] + mov r4, r2 + add r0, r0, r1, lsl #1 + ldrsh r6, [r0, #4] + add r1, sp, #0 + mov r0, r6 + bl ConvertStorageItemAtIdxToItem + ldr r2, _0204331C ; =_0209CA3C + add r1, sp, #0 + mov r0, r5 + bl sub_0200D670 + ldr r0, _02043318 ; =_020AFEB4 + ldr r0, [r0, #8] + ldrb r0, [r0, r6] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + str r0, [r4] + mov r0, r5 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02043318: .word _020AFEB4 +_0204331C: .word _0209CA3C + arm_func_end sub_020432B4 + + arm_func_start sub_02043320 +sub_02043320: ; 0x02043320 + stmdb sp!, {r3, lr} + cmp r0, #7 + bne _02043344 + bl CountNbOfValidItemsInTimeDarknessInStorage + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} +_02043344: + sub r0, r0, #5 + cmp r0, #1 + bhi _02043368 + bl CountNbOfValidItemsInStorage + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} +_02043368: + bl CountNbOfItemsInStorage + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end sub_02043320 + + arm_func_start sub_02043380 +sub_02043380: ; 0x02043380 + stmdb sp!, {r3, lr} + cmp r0, #8 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + bl IsStorageFull + ldmia sp!, {r3, pc} + arm_func_end sub_02043380 + + arm_func_start sub_02043398 +sub_02043398: ; 0x02043398 + stmdb sp!, {r3, lr} + ldr r0, _020433BC ; =_020AFEB4 + ldr r0, [r0, #4] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_0202D134 + ldmia sp!, {r3, pc} + .align 2, 0 +_020433BC: .word _020AFEB4 + arm_func_end sub_02043398 + + arm_func_start sub_020433C0 +sub_020433C0: ; 0x020433C0 + ldr r0, _020433D8 ; =_020AFEB4 + ldr ip, _020433DC ; =sub_0202C620 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bx ip + .align 2, 0 +_020433D8: .word _020AFEB4 +_020433DC: .word sub_0202C620 + arm_func_end sub_020433C0 + + arm_func_start sub_020433E0 +sub_020433E0: ; 0x020433E0 + ldr r0, _020433FC ; =_020AFEB4 + ldr r0, [r0, #4] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_020433FC: .word _020AFEB4 + arm_func_end sub_020433E0 + + arm_func_start sub_02043400 +sub_02043400: ; 0x02043400 + stmdb sp!, {r3, lr} + ldr r0, _02043430 ; =_020AFEB4 + ldr r0, [r0, #4] + cmp r0, #0 + addne r0, r0, #0x700 + ldrnesb r0, [r0, #0xd4] + mvnne r1, #1 + cmpne r0, r1 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + bl IsCollectionMenuActive + ldmia sp!, {r3, pc} + .align 2, 0 +_02043430: .word _020AFEB4 + arm_func_end sub_02043400 + + arm_func_start sub_02043434 +sub_02043434: ; 0x02043434 + stmdb sp!, {r3, lr} + ldr r0, _02043464 ; =_020AFEB4 + ldr r0, [r0, #4] + cmp r0, #0 + addne r0, r0, #0x700 + ldrnesb r0, [r0, #0xd4] + mvnne r1, #1 + cmpne r0, r1 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + bl IsCollectionMenuState3 + ldmia sp!, {r3, pc} + .align 2, 0 +_02043464: .word _020AFEB4 + arm_func_end sub_02043434 + + arm_func_start sub_02043468 +sub_02043468: ; 0x02043468 + stmdb sp!, {r3, lr} + ldr r0, _020434D0 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl IsCollectionMenuActive + cmp r0, #0 + beq _020434A0 + ldr r0, _020434D0 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_0202C748 + b _020434B4 +_020434A0: + ldr r0, _020434D0 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_0202C75C +_020434B4: + cmp r0, #0 + ldrge r1, _020434D0 ; =_020AFEB4 + mvnlt r0, #0 + ldrge r1, [r1, #4] + addge r0, r1, r0, lsl #1 + ldrgesh r0, [r0, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_020434D0: .word _020AFEB4 + arm_func_end sub_02043468 + + arm_func_start sub_020434D4 +sub_020434D4: ; 0x020434D4 + mov r3, #0 + ldr r0, _020434F8 ; =_020AFEB4 + mov r2, r3 +_020434E0: + ldr r1, [r0, #8] + strb r2, [r1, r3] + add r3, r3, #1 + cmp r3, #0x3e8 + blt _020434E0 + bx lr + .align 2, 0 +_020434F8: .word _020AFEB4 + arm_func_end sub_020434D4 + + arm_func_start sub_020434FC +sub_020434FC: ; 0x020434FC + ldr r1, _02043528 ; =_020AFEB4 + mov r0, #0 + ldr r3, [r1, #8] + mov r2, r0 +_0204350C: + ldrb r1, [r3, r2] + add r2, r2, #1 + tst r1, #1 + addne r0, r0, #1 + cmp r2, #0x3e8 + blt _0204350C + bx lr + .align 2, 0 +_02043528: .word _020AFEB4 + arm_func_end sub_020434FC + + arm_func_start sub_0204352C +sub_0204352C: ; 0x0204352C + ldr r0, _02043564 ; =_020AFEB4 + mov r1, #0 + ldr r2, [r0, #8] + b _02043554 +_0204353C: + ldrb r0, [r2, r1] + tst r0, #1 + movne r0, r1, lsl #0x10 + movne r0, r0, asr #0x10 + bxne lr + add r1, r1, #1 +_02043554: + cmp r1, #0x3e8 + blt _0204353C + mvn r0, #0 + bx lr + .align 2, 0 +_02043564: .word _020AFEB4 + arm_func_end sub_0204352C + + arm_func_start sub_02043568 +sub_02043568: ; 0x02043568 + ldr r1, _02043578 ; =_020AFEB4 + ldr r1, [r1, #8] + ldrb r0, [r1, r0] + bx lr + .align 2, 0 +_02043578: .word _020AFEB4 + arm_func_end sub_02043568 + + arm_func_start sub_0204357C +sub_0204357C: ; 0x0204357C + stmdb sp!, {r3, r4, lr} + sub sp, sp, #0x1c + ldr r4, _020435C4 ; =_0209CA98 + add lr, sp, #0 + ldmia r4!, {r0, r1, r2, r3} + mov ip, lr + stmia lr!, {r0, r1, r2, r3} + ldmia r4, {r0, r1, r2} + ldr r3, _020435C8 ; =_020AFEB4 + stmia lr, {r0, r1, r2} + ldr r0, [r3, #4] + ldr r0, [r0, #0x90c] + cmp r0, #7 + bge _020435BC + ldr r0, [ip, r0, lsl #2] + blx r0 +_020435BC: + add sp, sp, #0x1c + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_020435C4: .word _0209CA98 +_020435C8: .word _020AFEB4 + arm_func_end sub_0204357C + + arm_func_start sub_020435CC +sub_020435CC: ; 0x020435CC + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + ldr r0, _02043760 ; =_020AFEB4 + mvn r1, #1 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd8] + cmp r0, r1 + bne _0204361C + ldr r0, _02043764 ; =_0209CA68 + mov r4, #0xa + ldr r3, _02043768 ; =_0209CAB4 + mov r1, #0x13 + mov r2, #0 + str r4, [sp] + bl CreateSimpleMenuFromStringIds + ldr r1, _02043760 ; =_020AFEB4 + ldr r1, [r1, #4] + strb r0, [r1, #0x7d8] + b _02043758 +_0204361C: + bl IsSimpleMenuActive + cmp r0, #0 + bne _02043758 + ldr r0, _02043760 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd8] + bl GetSimpleMenuResult + ldr r1, _02043760 ; =_020AFEB4 + mov r4, r0 + ldr r0, [r1, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd8] + bl CloseSimpleMenu + ldr r0, _02043760 ; =_020AFEB4 + mvn r2, #1 + ldr r1, [r0, #4] + cmp r4, #8 + strb r2, [r1, #0x7d8] + ldreq r0, [r0, #4] + mov r1, #0 + streq r1, [r0, #0x90c] + beq _02043744 + mov r0, r4 + bl sub_02043BFC + mvn r1, #0 + cmp r0, r1 + bne _020436F4 + ldr r0, _02043760 ; =_020AFEB4 + sub r1, r1, #1 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd5] + cmp r0, r1 + beq _020436AC + bl sub_0202812C +_020436AC: + ldr r0, _02043760 ; =_020AFEB4 + mvn r1, #1 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd6] + cmp r0, r1 + beq _020436CC + bl sub_0202812C +_020436CC: + ldr r0, _02043760 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_0202812C + ldr r0, _02043760 ; =_020AFEB4 + mov r1, #1 + ldr r0, [r0, #4] + str r1, [r0, #0x90c] + b _02043758 +_020436F4: + ldr r2, _02043760 ; =_020AFEB4 + ldr r1, [r2, #4] + add r1, r1, #0x900 + strh r0, [r1, #0x10] + ldr r1, [r2, #4] + add r0, r1, #0x700 + add r1, r1, #0x900 + ldrsb r0, [r0, #0xd4] + ldrsh r1, [r1, #0x10] + bl sub_0202C6D4 + cmp r4, #5 + ldreq r0, _02043760 ; =_020AFEB4 + moveq r1, #4 + ldreq r0, [r0, #4] + streq r1, [r0, #0x90c] + beq _02043758 + ldr r0, _02043760 ; =_020AFEB4 + mov r1, #0 + ldr r0, [r0, #4] + str r1, [r0, #0x90c] +_02043744: + ldr r0, _02043760 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_0202C620 +_02043758: + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_02043760: .word _020AFEB4 +_02043764: .word _0209CA68 +_02043768: .word _0209CAB4 + arm_func_end sub_020435CC + + arm_func_start sub_0204376C +sub_0204376C: ; 0x0204376C + stmdb sp!, {r3, lr} + ldr r0, _020437B4 ; =_0209CA88 + bl CreateDialogueBox + ldr r3, _020437B8 ; =_020AFEB4 + ldr r1, _020437BC ; =0x00000418 + ldr ip, [r3, #4] + ldr r2, _020437C0 ; =0x000002FF + strb r0, [ip, #0x7d7] + ldr r0, [r3, #4] + mov r3, #0 + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd7] + bl ShowStringIdInDialogueBox + ldr r0, _020437B8 ; =_020AFEB4 + mov r1, #2 + ldr r0, [r0, #4] + str r1, [r0, #0x90c] + ldmia sp!, {r3, pc} + .align 2, 0 +_020437B4: .word _0209CA88 +_020437B8: .word _020AFEB4 +_020437BC: .word 0x00000418 +#ifdef JAPAN +_020437C0: .word 0x000023A7 +#else +_020437C0: .word 0x000002FF +#endif + arm_func_end sub_0204376C + + arm_func_start sub_020437C4 +sub_020437C4: ; 0x020437C4 + stmdb sp!, {r3, lr} + ldr r0, _02043840 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd7] + bl IsDialogueBoxActive + cmp r0, #0 + ldmneia sp!, {r3, pc} + mov r0, #9 + mov r1, #0 + bl sub_02043BFC + ldr r2, _02043840 ; =_020AFEB4 + ldr r1, [r2, #4] + add r1, r1, #0x900 + strh r0, [r1, #0x10] + ldr r1, [r2, #4] + add r0, r1, #0x700 + add r1, r1, #0x900 + ldrsb r0, [r0, #0xd4] + ldrsh r1, [r1, #0x10] + bl sub_0202C6D4 + ldr r0, _02043840 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd7] + bl sub_0202F2C4 + ldr r0, _02043840 ; =_020AFEB4 + mov r1, #3 + ldr r0, [r0, #4] + str r1, [r0, #0x90c] + ldmia sp!, {r3, pc} + .align 2, 0 +_02043840: .word _020AFEB4 + arm_func_end sub_020437C4 + + arm_func_start sub_02043844 +sub_02043844: ; 0x02043844 + stmdb sp!, {r3, lr} + ldr r0, _02043940 ; =_020AFEB4 + mvn r1, #1 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd7] + cmp r0, r1 + ldmeqia sp!, {r3, pc} + bl CloseDialogueBox + ldr r0, _02043940 ; =_020AFEB4 + mvn r2, #1 + ldr r1, [r0, #4] + strb r2, [r1, #0x7d7] + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd5] + cmp r0, r2 + beq _020438AC + bl sub_02028354 + cmp r0, #3 + bne _020438AC + ldr r0, _02043940 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd5] + bl sub_0202810C +_020438AC: + ldr r0, _02043940 ; =_020AFEB4 + mvn r1, #1 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd6] + cmp r0, r1 + beq _020438E8 + bl sub_02028354 + cmp r0, #3 + bne _020438E8 + ldr r0, _02043940 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd6] + bl sub_0202810C +_020438E8: + ldr r0, _02043940 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_02028354 + cmp r0, #3 + bne _02043918 + ldr r0, _02043940 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_0202810C +_02043918: + ldr r0, _02043940 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_0202C620 + ldr r0, _02043940 ; =_020AFEB4 + mov r1, #0 + ldr r0, [r0, #4] + str r1, [r0, #0x90c] + ldmia sp!, {r3, pc} + .align 2, 0 +_02043940: .word _020AFEB4 + arm_func_end sub_02043844 + + arm_func_start sub_02043944 +sub_02043944: ; 0x02043944 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr r0, _020439E8 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0xb4 + add r0, r0, #0x1800 + bl sub_020547C8 + ldr r0, _020439E8 ; =_020AFEB4 + mov r1, #0 + ldr r0, [r0, #4] + add r0, r0, #0xb4 + add r0, r0, #0x1800 + bl sub_02054804 + ldr r1, _020439E8 ; =_020AFEB4 + ldr r2, _020439EC ; =0x000002FE + ldr r0, [r1, #4] + mov r3, #0x10 + add r0, r0, #0x800 + strh r2, [r0, #0x7c] + ldr r2, [r1, #4] + ldr r0, _020439F0 ; =_0209CA78 + str r3, [r2, #0x880] + ldr r3, [r1, #4] + ldr r1, _020439F4 ; =0x00481813 + add r2, r3, #0x1800 + ldrsh ip, [r2, #0xb4] + add r2, r3, #0x74 + ldr r3, _020439F8 ; =sub_02043BAC + str ip, [sp] + mov ip, #9 + add r2, r2, #0x800 + str ip, [sp, #4] + bl CreateAdvancedMenu + ldr r1, _020439E8 ; =_020AFEB4 + mov r2, #5 + ldr r3, [r1, #4] + strb r0, [r3, #0x7d9] + ldr r0, [r1, #4] + str r2, [r0, #0x90c] + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_020439E8: .word _020AFEB4 +#ifdef JAPAN +_020439EC: .word 0x000023A6 +#else +_020439EC: .word 0x000002FE +#endif +_020439F0: .word _0209CA78 +_020439F4: .word 0x00481813 +_020439F8: .word sub_02043BAC + arm_func_end sub_02043944 + + arm_func_start sub_020439FC +sub_020439FC: ; 0x020439FC + stmdb sp!, {r3, r4, r5, lr} + ldr r0, _02043B78 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd9] + bl IsAdvancedMenuActive2 + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + ldr r0, _02043B78 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd9] + bl GetAdvancedMenuCurrentOption + ldr r1, _02043B78 ; =_020AFEB4 + mov r4, r0, lsl #0x10 + ldr r0, [r1, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd9] + bl GetAdvancedMenuResult + ldr r1, _02043B78 ; =_020AFEB4 + mov r5, r0, lsl #0x10 + ldr r0, [r1, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd9] + bl CloseAdvancedMenu + ldr r0, _02043B78 ; =_020AFEB4 + mvn r3, #1 + ldr r1, [r0, #4] + mov r2, r4, asr #0xf + strb r3, [r1, #0x7d9] + ldr r1, [r0, #4] + add r0, r1, #0x1000 + add r1, r1, #0xb4 + ldr r3, [r0, #0x8b8] + add r0, r1, #0x1800 + ldrsh r4, [r3, r2] + bl sub_020547D8 + mvn r0, #0 + cmp r0, r5, asr #16 + bne _02043AB8 + ldr r0, _02043B78 ; =_020AFEB4 + mov r1, #0 + strh r1, [r0] + ldr r0, [r0, #4] + mov r1, #6 + str r1, [r0, #0x90c] + ldmia sp!, {r3, r4, r5, pc} +_02043AB8: + mov r0, r4 + bl sub_020440F8 + cmp r0, #0 + bgt _02043B38 + ldr r0, _02043B78 ; =_020AFEB4 + mov r1, #0 + strh r1, [r0] + ldr r0, [r0, #4] + sub r1, r1, #2 + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd5] + cmp r0, r1 + beq _02043AF0 + bl sub_0202812C +_02043AF0: + ldr r0, _02043B78 ; =_020AFEB4 + mvn r1, #1 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd6] + cmp r0, r1 + beq _02043B10 + bl sub_0202812C +_02043B10: + ldr r0, _02043B78 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_0202812C + ldr r0, _02043B78 ; =_020AFEB4 + mov r1, #1 + ldr r0, [r0, #4] + str r1, [r0, #0x90c] + ldmia sp!, {r3, r4, r5, pc} +_02043B38: + ldr r2, _02043B78 ; =_020AFEB4 + strh r4, [r2] + ldr r1, [r2, #4] + add r1, r1, #0x900 + strh r0, [r1, #0x10] + ldr r1, [r2, #4] + add r0, r1, #0x700 + add r1, r1, #0x900 + ldrsb r0, [r0, #0xd4] + ldrsh r1, [r1, #0x10] + bl sub_0202C6D4 + ldr r0, _02043B78 ; =_020AFEB4 + mov r1, #6 + ldr r0, [r0, #4] + str r1, [r0, #0x90c] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02043B78: .word _020AFEB4 + arm_func_end sub_020439FC + + arm_func_start sub_02043B7C +sub_02043B7C: ; 0x02043B7C + stmdb sp!, {r3, lr} + ldr r0, _02043BA8 ; =_020AFEB4 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd4] + bl sub_0202C620 + ldr r0, _02043BA8 ; =_020AFEB4 + mov r1, #0 + ldr r0, [r0, #4] + str r1, [r0, #0x90c] + ldmia sp!, {r3, pc} + .align 2, 0 +_02043BA8: .word _020AFEB4 + arm_func_end sub_02043B7C + + arm_func_start sub_02043BAC +sub_02043BAC: ; 0x02043BAC + stmdb sp!, {r4, lr} + mov r4, r0 + cmp r1, #0 + blt _02043BD4 + ldr r2, _02043BF8 ; =_020AFEB4 + ldr r3, [r2, #4] + add r2, r3, #0x1800 + ldrsh r2, [r2, #0xb4] + cmp r1, r2 + blt _02043BDC +_02043BD4: + mov r0, #0 + ldmia sp!, {r4, pc} +_02043BDC: + add r2, r3, #0x1000 + ldr r2, [r2, #0x8b8] + mov r1, r1, lsl #1 + ldrsh r1, [r2, r1] + bl GetNameRaw + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_02043BF8: .word _020AFEB4 + arm_func_end sub_02043BAC + + arm_func_start sub_02043BFC +sub_02043BFC: ; 0x02043BFC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr r2, _0204408C ; =_020AFEB4 + mov sb, r0 + ldr r0, [r2, #4] + mov r4, r1 + ldr r6, [r0] + bl sub_0200FD48 + sub r1, r6, #5 + mov r5, r0 + cmp r1, #2 + mov r7, #0 + movls r0, #1 + movhi r0, r7 + cmp r4, #0 + and r4, r0, #0xff + beq _02043D0C + mov r0, #0x3e8 + mov r1, #8 + bl MemAlloc + mov r8, r0 + mov sl, #0 + ldr r0, _0204408C ; =_020AFEB4 + mov r1, sl + mov r2, #1 +_02043C5C: + ldr r3, [r0, #8] + ldrb r3, [r3, sl] + cmp r3, #1 + moveq r3, r2 + movne r3, r1 + strb r3, [r8, sl] + add sl, sl, #1 + cmp sl, #0x3e8 + blt _02043C5C + bl sub_0200FD48 + mov r1, r0 + mov r0, r8 + bl SortItemsInStorage + mov sl, #0 + ldr r0, _0204408C ; =_020AFEB4 + mov r2, sl + mov r3, #1 +_02043CA0: + ldrb r1, [r8, sl] + cmp r1, #0 + movne fp, r3 + ldr r1, [r0, #8] + moveq fp, r2 + strb fp, [r1, sl] + add sl, sl, #1 + cmp sl, #0x3e8 + blt _02043CA0 + mov r0, r8 + bl MemFree + ldr r0, _0204408C ; =_020AFEB4 + mvn r1, #1 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd5] + cmp r0, r1 + beq _02043CEC + bl sub_0202F9B8 +_02043CEC: + ldr r0, _0204408C ; =_020AFEB4 + mvn r1, #1 + ldr r0, [r0, #4] + add r0, r0, #0x700 + ldrsb r0, [r0, #0xd6] + cmp r0, r1 + beq _02043D0C + bl sub_0202F9B8 +_02043D0C: + mov r8, #0 + b _02043DE4 +_02043D14: + ldr r0, _02044090 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + add r0, r0, r8, lsl #1 + add r0, r0, #0x300 + ldrsh r1, [r0, #0x8a] + cmp r1, #0 + beq _02043DEC + cmp r4, #0 + beq _02043D48 + ldrsh r0, [r0, #0x8a] + bl IsItemValidVeneer + cmp r0, #0 + beq _02043DD8 +_02043D48: + cmp r6, #7 + bne _02043DBC + ldr r0, _02044090 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + add r1, r0, r8, lsl #1 + add r0, r1, #0x300 + ldrsh sl, [r0, #0x8a] + add r0, r1, #0xb00 + ldrh fp, [r0, #0x5a] + mov r0, sl + bl IsItemInTimeDarkness + cmp r0, #0 + beq _02043DB0 + mov r0, sl + bl IsTreasureBox + cmp r0, #0 + beq _02043DA8 + mov r0, fp, lsl #0x10 + mov r0, r0, asr #0x10 + bl IsItemInTimeDarkness + cmp r0, #0 + beq _02043DB0 + mov r0, #1 + b _02043DB4 +_02043DA8: + mov r0, #1 + b _02043DB4 +_02043DB0: + mov r0, #0 +_02043DB4: + cmp r0, #0 + beq _02043DD8 +_02043DBC: + ldr r0, _0204408C ; =_020AFEB4 + add r2, r7, #1 + ldr r0, [r0, #4] + add r1, r0, r7, lsl #1 + mov r0, r2, lsl #0x10 + strh r8, [r1, #4] + mov r7, r0, asr #0x10 +_02043DD8: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 +_02043DE4: + cmp r8, r5 + blt _02043D14 +_02043DEC: + mov r4, r7 + mvn r3, #0 + ldr r1, _0204408C ; =_020AFEB4 + b _02043E14 +_02043DFC: + ldr r2, [r1, #4] + add r0, r4, #1 + add r2, r2, r4, lsl #1 + mov r0, r0, lsl #0x10 + strh r3, [r2, #4] + mov r4, r0, asr #0x10 +_02043E14: + cmp r4, r5 + blt _02043DFC + mov r0, r7, lsl #0x10 + ldr r4, _0204408C ; =_020AFEB4 + mov r5, r0, asr #0x10 + cmp r5, #0 + str sb, [r4, #0x10] + movle r0, #9 + strle r0, [r4, #0x10] + suble r0, r0, #0xa + ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + cmp sb, #9 + moveq r0, r5 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r8, #0 + mov r7, r8 + mov fp, #1 + ldr sl, _02044090 ; =BAG_ITEMS_PTR_MIRROR + b _02044070 +_02043E60: + ldr r1, [r4, #4] + ldr r0, [sl] + add r1, r1, r7, lsl #1 + ldrsh r6, [r1, #4] + add r0, r0, r6, lsl #1 + add r0, r0, #0x300 + ldrsh r0, [r0, #0x8a] + bl GetItemCategoryVeneer + ldr r1, [sl] + add r1, r1, r6, lsl #1 + add r1, r1, #0x300 + ldrsh r1, [r1, #0x8a] + cmp r1, #0x5c + bgt _02043EA0 + beq _02043F20 + b _02043F24 +_02043EA0: + sub r1, r1, #0x190 + cmp r1, #0x1b + addls pc, pc, r1, lsl #2 + b _02043F24 +_02043EB0: ; jump table + b _02043F20 ; case 0 + b _02043F20 ; case 1 + b _02043F20 ; case 2 + b _02043F20 ; case 3 + b _02043F20 ; case 4 + b _02043F20 ; case 5 + b _02043F20 ; case 6 + b _02043F20 ; case 7 + b _02043F20 ; case 8 + b _02043F20 ; case 9 + b _02043F20 ; case 10 + b _02043F20 ; case 11 + b _02043F20 ; case 12 + b _02043F20 ; case 13 + b _02043F20 ; case 14 + b _02043F20 ; case 15 + b _02043F20 ; case 16 + b _02043F20 ; case 17 + b _02043F20 ; case 18 + b _02043F20 ; case 19 + b _02043F20 ; case 20 + b _02043F20 ; case 21 + b _02043F20 ; case 22 + b _02043F20 ; case 23 + b _02043F20 ; case 24 + b _02043F20 ; case 25 + b _02043F20 ; case 26 + b _02043F20 ; case 27 +_02043F20: + mov r0, #7 +_02043F24: + cmp sb, #9 + addls pc, pc, sb, lsl #2 + b _0204402C +_02043F30: ; jump table + b _02043F58 ; case 0 + b _02043F70 ; case 1 + b _02043F88 ; case 2 + b _02043F9C ; case 3 + b _02043FB4 ; case 4 + b _02043FC8 ; case 5 + b _02043FDC ; case 6 + b _02043FF8 ; case 7 + b _0204402C ; case 8 + b _0204402C ; case 9 +_02043F58: + cmp r0, #0 + cmpne r0, #1 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + b _02044030 +_02043F70: + cmp r0, #2 + cmpne r0, #3 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + b _02044030 +_02043F88: + cmp r0, #4 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + b _02044030 +_02043F9C: + cmp r0, #5 + cmpne r0, #0xb + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + b _02044030 +_02043FB4: + cmp r0, #9 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + b _02044030 +_02043FC8: + cmp r0, #0xf + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + b _02044030 +_02043FDC: + add r0, r0, #0xf4 + and r0, r0, #0xff + cmp r0, #2 + movls r0, #1 + movhi r0, #0 + and r0, r0, #0xff + b _02044030 +_02043FF8: + add r0, r0, #0xfa + and r0, r0, #0xff + cmp r0, #4 + mov r1, #0 + bhi _02044018 + mov r0, fp, lsl r0 + tst r0, #0x17 + movne r1, fp +_02044018: + cmp r1, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + b _02044030 +_0204402C: + mov r0, #1 +_02044030: + cmp r0, #0 + beq _02044064 + ldr r0, [r4, #4] + add r1, r8, #1 + mov r1, r1, lsl #0x10 + add r2, r0, r8, lsl #1 + ldrsh r2, [r2, #4] + add r0, r0, r7, lsl #1 + strh r2, [r0, #4] + ldr r0, [r4, #4] + add r0, r0, r8, lsl #1 + strh r6, [r0, #4] + mov r8, r1, asr #0x10 +_02044064: + add r0, r7, #1 + mov r0, r0, lsl #0x10 + mov r7, r0, asr #0x10 +_02044070: + cmp r7, r5 + blt _02043E60 + cmp r8, #0 + mvnle r8, #0 + mov r0, r8, lsl #0x10 + mov r0, r0, asr #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0204408C: .word _020AFEB4 +_02044090: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02043BFC + + arm_func_start sub_02044094 +sub_02044094: ; 0x02044094 + stmdb sp!, {r3, lr} + mov r0, #0x3e8 + mov r1, #8 + bl MemAlloc + ldr r1, _020440B4 ; =_020AFEB4 + str r0, [r1, #8] + bl sub_020434D4 + ldmia sp!, {r3, pc} + .align 2, 0 +_020440B4: .word _020AFEB4 + arm_func_end sub_02044094 + + arm_func_start sub_020440B8 +sub_020440B8: ; 0x020440B8 + stmdb sp!, {r3, lr} + ldr r0, _020440D8 ; =_020AFEB4 + ldr r0, [r0, #8] + bl MemFree + ldr r0, _020440D8 ; =_020AFEB4 + mov r1, #0 + str r1, [r0, #8] + ldmia sp!, {r3, pc} + .align 2, 0 +_020440D8: .word _020AFEB4 + arm_func_end sub_020440B8 + + arm_func_start sub_020440DC +sub_020440DC: ; 0x020440DC + ldr r0, _020440F4 ; =_020AFEB4 + mov r1, #9 + str r1, [r0, #0x10] + mov r1, #0 + strh r1, [r0] + bx lr + .align 2, 0 +_020440F4: .word _020AFEB4 + arm_func_end sub_020440DC + + arm_func_start sub_020440F8 +sub_020440F8: ; 0x020440F8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sb, #0 + mov sl, r0 + mov r1, sb + bl GetType + mov r6, r0 + mov r0, sl + mov r1, #1 + bl GetType + mov r7, r0 + mov r8, sb + ldr r4, _020441B4 ; =_020AFEB4 + ldr fp, _020441B8 ; =BAG_ITEMS_PTR_MIRROR + b _02044198 +_02044130: + add r0, r1, r8, lsl #1 + ldrsh r5, [r0, #4] + ldr r0, [fp] + mov r1, sl + add r0, r0, r5, lsl #1 + add r0, r0, #0x300 + ldrsh r0, [r0, #0x8a] + mov r2, r6 + mov r3, r7 + bl IsExclusiveItemIdForMonster + cmp r0, #0 + beq _0204418C + ldr r3, [r4, #4] + add r0, sb, #1 + add r1, r3, sb, lsl #1 + ldrsh r2, [r1, #4] + add r1, r3, r8, lsl #1 + mov r0, r0, lsl #0x10 + strh r2, [r1, #4] + ldr r1, [r4, #4] + add r1, r1, sb, lsl #1 + strh r5, [r1, #4] + mov sb, r0, asr #0x10 +_0204418C: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 +_02044198: + ldr r1, [r4, #4] + add r0, r1, #0x900 + ldrsh r0, [r0, #0x10] + cmp r8, r0 + blt _02044130 + mov r0, sb + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_020441B4: .word _020AFEB4 +_020441B8: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_020440F8 + + arm_func_start sub_020441BC +sub_020441BC: ; 0x020441BC + stmdb sp!, {r3, lr} + ldr r0, _0204420C ; =_020AFEB4 + mov r1, #1 + ldr r0, [r0, #0x10] + bl sub_02043BFC + ldr r2, _0204420C ; =_020AFEB4 + mov r3, #0 + ldr r1, [r2, #4] + add r1, r1, #0x900 + strh r0, [r1, #0x10] + ldr r2, [r2, #4] + add r0, r2, #0x700 + add r1, r2, #0x900 + add r2, r2, #0x1000 + ldrsb r0, [r0, #0xd4] + ldrsh r1, [r1, #0x10] + ldr r2, [r2, #0x8bc] + bl sub_0202C654 + bl sub_02044308 + ldmia sp!, {r3, pc} + .align 2, 0 +_0204420C: .word _020AFEB4 + arm_func_end sub_020441BC + + arm_func_start sub_02044210 +sub_02044210: ; 0x02044210 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #0x54 + mov r4, r0 + bl sub_02027B1C +#ifdef JAPAN + ldr r3, _020445D8 ; =0x000023A8 +#endif + mov r0, r4 + mov r1, #0xa + mov r2, #2 +#ifndef JAPAN + mov r3, #0x300 +#endif + bl sub_02026268 + bl sub_020434FC + str r0, [sp, #0x28] + add r1, sp, #4 + str r1, [sp] + ldr r3, _02044268 ; =0x00000301 + mov r0, r4 + mov r1, #0x66 + mov r2, #2 + bl sub_020262E0 + mov r0, r4 + bl UpdateWindow + add sp, sp, #0x54 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +#ifdef JAPAN +_020445D8: .word 0x000023A8 +_02044268: .word 0x000023A9 +#else +_02044268: .word 0x00000301 +#endif + arm_func_end sub_02044210 + + arm_func_start sub_0204426C +sub_0204426C: ; 0x0204426C + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #8 + mov r1, r0 + bl MemAlloc + ldr r1, _020442C0 ; =_020AFEC8 + mov r3, #1 + str r0, [r1] + str r4, [r0] + ldr r0, [r1] + ldr r2, _020442C4 ; =_0209CB0C + strb r3, [r0, #4] + ldr r0, [r1] + ldr r1, _020442C8 ; =sub_02044338 + ldr r0, [r0] + add r0, r2, r0, lsl #4 + bl CreateTextBox + ldr r1, _020442C0 ; =_020AFEC8 + ldr r1, [r1] + strb r0, [r1, #5] + ldmia sp!, {r4, pc} + .align 2, 0 +_020442C0: .word _020AFEC8 +_020442C4: .word _0209CB0C +_020442C8: .word sub_02044338 + arm_func_end sub_0204426C + + arm_func_start sub_020442CC +sub_020442CC: ; 0x020442CC + stmdb sp!, {r3, lr} + ldr r0, _02044304 ; =_020AFEC8 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0, #5] + bl CloseTextBox2 + ldr r0, _02044304 ; =_020AFEC8 + ldr r0, [r0] + bl MemFree + ldr r0, _02044304 ; =_020AFEC8 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02044304: .word _020AFEC8 + arm_func_end sub_020442CC + + arm_func_start sub_02044308 +sub_02044308: ; 0x02044308 + stmdb sp!, {r3, lr} + ldr r0, _02044334 ; =_020AFEC8 + ldr r2, [r0] + cmp r2, #0 + ldmeqia sp!, {r3, pc} + mov r1, #1 + strb r1, [r2, #4] + ldr r0, [r0] + ldrsb r0, [r0, #5] + bl sub_0202F9B8 + ldmia sp!, {r3, pc} + .align 2, 0 +_02044334: .word _020AFEC8 + arm_func_end sub_02044308 + + arm_func_start sub_02044338 +sub_02044338: ; 0x02044338 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x54 + ldr r1, _02044404 ; =_020AFEC8 + mov r5, r0 + ldr r2, [r1] + ldrb r1, [r2, #4] + cmp r1, #0 + beq _020443FC + mov r1, #0 + strb r1, [r2, #4] + mov r4, #2 + bl sub_02027B1C + ldr r0, _02044404 ; =_020AFEC8 + ldr r0, [r0] + ldr r0, [r0] + cmp r0, #0 + cmpne r0, #2 + bne _020443B0 + bl GetNbItemsInBag + str r0, [sp, #0x28] + bl GetCurrentBagCapacity +#ifdef JAPAN + str r0, [sp, #0x2c] + add r2, sp, #4 + str r2, [sp] + ldr r3, _0204477C ; =0x000031F7 + mov r0, r5 + mov r1, #0 + mov r2, #2 +#else + mov r2, #2 + str r0, [sp, #0x2c] + add r1, sp, #4 + str r1, [sp] + mov r0, r5 + add r3, r2, #0x330 + mov r1, #0 +#endif + bl sub_020262E0 + add r4, r4, #0x10 +_020443B0: + ldr r0, _02044404 ; =_020AFEC8 + ldr r0, [r0] + ldr r0, [r0] + sub r0, r0, #1 + cmp r0, #1 + bhi _020443F4 + bl CountNbOfItemsInStorage + str r0, [sp, #0x28] + bl sub_0200FD48 + str r0, [sp, #0x2c] + add ip, sp, #4 + ldr r3, _02044408 ; =0x00000333 + mov r0, r5 + mov r2, r4 + mov r1, #0 + str ip, [sp] + bl sub_020262E0 +_020443F4: + mov r0, r5 + bl UpdateWindow +_020443FC: + add sp, sp, #0x54 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02044404: .word _020AFEC8 +#ifdef JAPAN +_0204477C: .word 0x000031F7 +_02044408: .word 0x000031F8 +#else +_02044408: .word 0x00000333 +#endif + arm_func_end sub_02044338 + + arm_func_start sub_0204440C +sub_0204440C: ; 0x0204440C + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0xc + mov r1, #8 + bl MemAlloc + ldr r2, _02044468 ; =_020AFECC + mov ip, #0 + str r0, [r2] + str r4, [r0] + ldr r1, [r2] + ldr r0, _0204446C ; =_0209CB3C + strh ip, [r1, #6] + ldr r3, [r2] + ldr r1, _02044470 ; =sub_020444F0 + strh ip, [r3, #8] + ldr r2, [r2] + mov r3, #1 + strb r3, [r2, #4] + bl CreateTextBox + ldr r1, _02044468 ; =_020AFECC + ldr r1, [r1] + strb r0, [r1, #0xa] + ldmia sp!, {r4, pc} + .align 2, 0 +_02044468: .word _020AFECC +_0204446C: .word _0209CB3C +_02044470: .word sub_020444F0 + arm_func_end sub_0204440C + + arm_func_start sub_02044474 +sub_02044474: ; 0x02044474 + stmdb sp!, {r3, lr} + ldr r0, _020444AC ; =_020AFECC + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0, #0xa] + bl CloseTextBox2 + ldr r0, _020444AC ; =_020AFECC + ldr r0, [r0] + bl MemFree + ldr r0, _020444AC ; =_020AFECC + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_020444AC: .word _020AFECC + arm_func_end sub_02044474 + + arm_func_start sub_020444B0 +sub_020444B0: ; 0x020444B0 + stmdb sp!, {r3, lr} + ldr r1, _020444EC ; =_020AFECC + ldr r3, [r1] + cmp r3, #0 + ldrnesh r2, [r3, #6] + cmpne r2, r0 + ldmeqia sp!, {r3, pc} + strh r0, [r3, #6] + ldr r0, [r1] + mov r2, #1 + strb r2, [r0, #4] + ldr r0, [r1] + ldrsb r0, [r0, #0xa] + bl sub_0202F9B8 + ldmia sp!, {r3, pc} + .align 2, 0 +_020444EC: .word _020AFECC + arm_func_end sub_020444B0 + + arm_func_start sub_020444F0 +sub_020444F0: ; 0x020444F0 + stmdb sp!, {r4, lr} + ldr r1, _02044564 ; =_020AFECC + mov r4, r0 + ldr r2, [r1] + ldrb r1, [r2, #4] + cmp r1, #0 + ldmeqia sp!, {r4, pc} + mov r1, #0 + strb r1, [r2, #4] + bl sub_02027B1C + ldr r0, _02044564 ; =_020AFECC + ldr r2, [r0] + ldrsh r1, [r2, #6] + strh r1, [r2, #8] + ldr r0, [r0] + ldrsh r0, [r0, #8] + cmp r0, #0 + beq _02044558 +#if defined(EUROPE) + add r0, r0, #0x4b + add r0, r0, #0x2f00 +#elif defined(JAPAN) + add r0, r0, #0x41 + add r0, r0, #0x1d00 +#else + add r0, r0, #0x49 + add r0, r0, #0x2f00 +#endif + mov r3, r0, lsl #0x10 + mov r1, #2 + mov r0, r4 + mov r2, r1 + mov r3, r3, lsr #0x10 + bl sub_02026268 +_02044558: + mov r0, r4 + bl UpdateWindow + ldmia sp!, {r4, pc} + .align 2, 0 +_02044564: .word _020AFECC + arm_func_end sub_020444F0 + + arm_func_start sub_02044568 +sub_02044568: ; 0x02044568 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #8 + mov r1, r0 + bl MemAlloc + ldr r1, _020445BC ; =_020AFED0 + mov r3, #1 + str r0, [r1] + str r4, [r0] + ldr r0, [r1] + ldr r2, _020445C0 ; =_0209CB4C + strb r3, [r0, #4] + ldr r0, [r1] + ldr r1, _020445C4 ; =sub_02044604 + ldr r0, [r0] + add r0, r2, r0, lsl #4 + bl CreateTextBox + ldr r1, _020445BC ; =_020AFED0 + ldr r1, [r1] + strb r0, [r1, #5] + ldmia sp!, {r4, pc} + .align 2, 0 +_020445BC: .word _020AFED0 +_020445C0: .word _0209CB4C +_020445C4: .word sub_02044604 + arm_func_end sub_02044568 + + arm_func_start sub_020445C8 +sub_020445C8: ; 0x020445C8 + stmdb sp!, {r3, lr} + ldr r0, _02044600 ; =_020AFED0 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0, #5] + bl CloseTextBox2 + ldr r0, _02044600 ; =_020AFED0 + ldr r0, [r0] + bl MemFree + ldr r0, _02044600 ; =_020AFED0 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02044600: .word _020AFED0 + arm_func_end sub_020445C8 + + arm_func_start sub_02044604 +sub_02044604: ; 0x02044604 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #0x54 + ldr r1, _02044680 ; =_020AFED0 + mov r4, r0 + ldr r2, [r1] + ldrb r1, [r2, #4] + cmp r1, #0 + beq _02044678 + mov r1, #0 + strb r1, [r2, #4] + bl sub_02027B1C +#ifdef JAPAN + ldr r3, _020449FC ; =0x000031F9 +#endif + mov r0, r4 + mov r1, #4 + mov r2, #0 +#ifndef JAPAN + mov r3, #0x334 +#endif + bl sub_02026268 + bl GetMoneyCarried + mov r1, #0x18 + str r1, [sp, #0x2c] + str r0, [sp, #0x28] + add r1, sp, #4 + str r1, [sp] + ldr r3, _02044684 ; =0x00000335 + mov r0, r4 + mov r1, #0x10 + mov r2, #0xc + bl sub_020262E0 + mov r0, r4 + bl UpdateWindow +_02044678: + add sp, sp, #0x54 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_02044680: .word _020AFED0 +#ifdef JAPAN +_020449FC: .word 0x000031F9 +_02044684: .word 0x000031FA +#else +_02044684: .word 0x00000335 +#endif + arm_func_end sub_02044604 + + arm_func_start sub_02044688 +sub_02044688: ; 0x02044688 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #0xa4 + mov r6, r0 + mov r5, r1 + ldr r0, _020447E8 ; =0x00000944 + mov r1, #8 + mov r8, r2 + mov r7, r3 + bl MemAlloc + ldr r1, _020447E8 ; =0x00000944 + mov r4, r0 + bl MemZero + mov r1, r8 + mov r2, r7 + mov r3, #0 + strb r3, [r4, #0x72e] + strb r3, [r4, #0x82e] + str r3, [r4, #0x940] + sub r0, r3, #1 + str r0, [r4, #0x930] + str r3, [r4, #0x940] + ldr r3, [sp, #0xc4] + add r0, r4, #4 + str r3, [sp] + ldrb r3, [sp, #0xc0] + bl sub_02044BF8 + ldr r0, _020447EC ; =_0209CB78 + ldr r1, _020447F0 ; =sub_02044964 + mov r2, r4 + bl CreateTextBoxWithArg + strb r0, [r4, #0x72c] + cmp r5, #3 + mov r0, #0x10 + str r0, [sp, #0x18] + ldr r1, _020447F4 ; =0x00000A36 + add r0, r4, #0x2e + add r0, r0, #0x700 + str r0, [sp, #0x54] + strh r1, [sp, #0x14] + bne _02044760 + add r1, r1, #3 + add r0, r4, #0x900 + strh r1, [r0, #0x2e] + str r4, [sp] + mov r1, #0 + str r1, [sp, #4] + str r1, [sp, #8] + ldr r0, _020447F8 ; =_0209CB88 + ldr r3, _020447FC ; =sub_02044990 + add r2, sp, #0xc + mov r1, #0x800 + bl CreateAdvancedTextBoxWithArg + strb r0, [r4, #0x72d] + b _020447A8 +_02044760: + cmp r5, #2 + addne r1, r1, #3 + addne r0, r4, #0x900 + strneh r1, [r0, #0x2e] + bne _020447A8 + add r1, r1, #2 + add r0, r4, #0x900 + strh r1, [r0, #0x2e] + str r4, [sp] + mov r1, #0 + str r1, [sp, #4] + str r1, [sp, #8] + ldr r0, _020447F8 ; =_0209CB88 + ldr r3, _020447FC ; =sub_02044990 + add r2, sp, #0xc + mov r1, #0x800 + bl CreateAdvancedTextBoxWithArg + strb r0, [r4, #0x72d] +_020447A8: + mov r0, r6 + str r6, [r4, #0x934] + bl GetItemAtIdx + ldrh r2, [r0] + add r1, r4, #0x900 + strh r2, [r1, #0x38] + ldrh r2, [r0, #2] + strh r2, [r1, #0x3a] + ldrh r2, [r0, #4] + mov r0, r4 + strh r2, [r1, #0x3c] + str r5, [r4] + bl sub_02044AEC + mov r0, r4 + add sp, sp, #0xa4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_020447E8: .word 0x00000944 +_020447EC: .word _0209CB78 +_020447F0: .word sub_02044964 +#ifdef JAPAN +_020447F4: .word 0x00000871 +#else +_020447F4: .word 0x00000A36 +#endif +_020447F8: .word _0209CB88 +_020447FC: .word sub_02044990 + arm_func_end sub_02044688 + + arm_func_start sub_02044800 +sub_02044800: ; 0x02044800 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r0, [r5, #0x940] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _020448E4 +_02044818: ; jump table + b _02044828 ; case 0 + b _02044830 ; case 1 + b _020448B8 ; case 2 + b _020448DC ; case 3 +_02044828: + mov r0, #1 + str r0, [r5, #0x940] +_02044830: + add r0, r5, #4 + bl sub_020451D8 + mov r4, r0 + mov r0, r5 + bl sub_02044AEC + cmp r4, #0 + beq _020448E4 + mov r0, #2 + str r0, [r5, #0x940] + cmp r4, #2 + bne _020448E4 + add r0, r5, #4 + bl sub_020452A0 + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _020448A0 +_02044870: ; jump table + b _02044880 ; case 0 + b _02044888 ; case 1 + b _02044890 ; case 2 + b _02044898 ; case 3 +_02044880: + mov r1, #1 + b _020448A4 +_02044888: + mov r1, #2 + b _020448A4 +_02044890: + mov r1, #3 + b _020448A4 +_02044898: + mov r1, #4 + b _020448A4 +_020448A0: + mov r1, #0 +_020448A4: + ldr r0, [r5, #0x934] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02058460 + b _020448E4 +_020448B8: + add r0, r5, #4 + bl sub_020452B8 + cmp r0, #0 + beq _020448E4 + mov r0, r5 + bl sub_02044918 + mov r0, #3 + str r0, [r5, #0x940] + b _020448E4 +_020448DC: + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} +_020448E4: + mov r0, #0 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02044800 + + arm_func_start sub_020448EC +sub_020448EC: ; 0x020448EC + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + bl sub_02044918 + ldr r0, [r4] + bl MemFree + mov r0, #0 + str r0, [r4] + ldmia sp!, {r4, pc} + arm_func_end sub_020448EC + + arm_func_start sub_02044918 +sub_02044918: ; 0x02044918 + stmdb sp!, {r4, lr} + mov r4, r0 + add r0, r4, #0x700 + ldrsb r0, [r0, #0x2d] + mvn r1, #1 + cmp r0, r1 + beq _02044940 + bl CloseAdvancedTextBox + mvn r0, #1 + strb r0, [r4, #0x72d] +_02044940: + add r0, r4, #0x700 + ldrsb r0, [r0, #0x2c] + mvn r1, #1 + cmp r0, r1 + ldmeqia sp!, {r4, pc} + bl CloseTextBox + mvn r0, #1 + strb r0, [r4, #0x72c] + ldmia sp!, {r4, pc} + arm_func_end sub_02044918 + + arm_func_start sub_02044964 +sub_02044964: ; 0x02044964 + stmdb sp!, {r4, lr} + add r1, r1, #0x900 + mov r4, r0 + ldrh r0, [r1, #0x2e] + bl StringFromId + mov r1, #2 + mov r3, r0 + mov r0, r4 + mov r2, r1 + bl DrawTextInWindow + ldmia sp!, {r4, pc} + arm_func_end sub_02044964 + + arm_func_start sub_02044990 +sub_02044990: ; 0x02044990 + ldr ip, _020449A8 ; =DrawTextInWindow + add r1, r1, #0x2e + add r3, r1, #0x800 + mov r1, #2 + mov r2, #0x10 + bx ip + .align 2, 0 +_020449A8: .word DrawTextInWindow + arm_func_end sub_02044990 + + arm_func_start sub_020449AC +sub_020449AC: ; 0x020449AC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r0 + add r0, r6, #4 + mov r5, r1 + mov r4, #0 + bl sub_02045298 + cmp r0, #0 +#ifdef JAPAN + beq _02044A30 +#else + bne _020449E8 + mov r0, r5 + bl sub_02045330 + add r2, r6, #0x2e + mov r1, r0 + add r0, r2, #0x700 + bl sub_020584FC + b _02044A30 +_020449E8: +#endif + ldr r1, _02044ADC ; =DUNGEON_PTR + add r0, r6, #0x2e + ldr r1, [r1] + add r0, r0, #0x700 + add r1, r1, r5, lsl #2 + add r1, r1, #0x12000 +#ifdef JAPAN + ldr r1, [r1, #0xa84] +#else + ldr r1, [r1, #0xb28] +#endif + mov r2, r4 + ldr r7, [r1, #0xb4] + bl ov29_022E2A78 + ldrb r0, [r7, #0xbc] + cmp r0, #7 + beq _02044A2C + mov r0, r7 + bl IsExperienceLocked + cmp r0, #0 + beq _02044A30 +_02044A2C: + mov r4, #1 +_02044A30: + cmp r4, #0 + beq _02044A4C + add r0, r6, #0x2e + ldr r1, _02044AE0 ; =0x00000A3D + add r0, r0, #0x800 + bl GetStringFromFileVeneer + b _02044ACC +_02044A4C: + add r0, r6, #4 + bl sub_02045298 + cmp r0, #0 + bne _02044A70 + mov r0, r5 + bl sub_02045330 + bl GetActiveTeamMember + add r1, r0, #0x3e + b _02044A8C +_02044A70: + ldr r0, _02044ADC ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + ldr r0, [r0, #0xb4] + add r1, r0, #0x62 +_02044A8C: + ldrb r0, [r1] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + add r0, r6, #0x2e + bne _02044AB8 + ldr r1, _02044AE4 ; =0x00000A37 + add r0, r0, #0x800 + bl GetStringFromFileVeneer + b _02044ACC +_02044AB8: + ldr r2, _02044AE8 ; =_0209CB6C + mov r3, #1 + add r0, r0, #0x800 + str r3, [sp] + bl sub_0200D310 +_02044ACC: + add r0, r6, #0x700 + ldrsb r0, [r0, #0x2d] + bl SetAdvancedTextBoxField0x1C2 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02044ADC: .word DUNGEON_PTR +#ifdef JAPAN +_02044AE0: .word 0x00000878 +_02044AE4: .word 0x00000872 +#else +_02044AE0: .word 0x00000A3D +_02044AE4: .word 0x00000A37 +#endif +_02044AE8: .word _0209CB6C + arm_func_end sub_020449AC + + arm_func_start sub_02044AEC +sub_02044AEC: ; 0x02044AEC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + add r0, r7, #4 + bl sub_020452A0 + mov r4, r0 + mvn r0, #0 + cmp r4, r0 + ldrne r0, [r7, #0x930] + ldr r5, [r7] + cmpne r0, r4 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + add r0, r7, #4 + bl sub_02045298 + cmp r0, #0 + bne _02044B5C + cmp r5, #1 + addne r0, r7, #0x700 + ldrnesb r1, [r0, #0x2d] + mvnne r0, #1 + cmpne r1, r0 + beq _02044BEC + sub r0, r5, #2 + cmp r0, #1 + bhi _02044BEC + mov r0, r7 + mov r1, r4 + bl sub_020449AC + b _02044BEC +_02044B5C: + ldr r0, _02044BF4 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r6, [r0, #0xa84] +#else + ldr r6, [r0, #0xb28] +#endif + cmp r6, #0 + moveq r0, #0 + beq _02044B90 + ldr r0, [r6] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_02044B90: + cmp r0, #0 + cmpne r5, #1 + beq _02044BC8 + sub r0, r5, #2 + cmp r0, #1 + bhi _02044BC8 + add r0, r7, #0x700 + ldrsb r1, [r0, #0x2d] + mvn r0, #1 + cmp r1, r0 + beq _02044BC8 + mov r0, r7 + mov r1, r4 + bl sub_020449AC +_02044BC8: + mov r0, r6 + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + mov r2, #1 + mov r3, r2 + add r0, r6, #4 + mov r1, #0 + bl DrawTileGrid +_02044BEC: + str r4, [r7, #0x930] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02044BF4: .word DUNGEON_PTR + arm_func_end sub_02044AEC + + arm_func_start sub_02044BF8 +sub_02044BF8: ; 0x02044BF8 +#ifdef JAPAN +#define SUB_02044BF8_LOAD_OFFSET #0xa84 +#else +#define SUB_02044BF8_LOAD_OFFSET #0xb28 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xbc + mov fp, r1 + str r2, [sp, #4] + ldr r1, _0204519C ; =0x00000728 + mov sl, r0 + str r3, [sp, #8] + bl MemZero + ldr sb, [sp, #0xe0] + add r0, sl, #0x20c + mov r4, #0 + str r4, [sl] + cmp sb, #0 + add r7, r0, #0x400 + bne _02044CD8 + mov r8, r4 + mov fp, r4 + mov r6, #1 + mov r5, r4 +_02044C44: + mov r0, r8 + bl GetActiveTeamMember + ldrb r0, [r0] + tst r0, #1 + movne r1, r6 + moveq r1, fp + tst r1, #0xff + beq _02044C88 + tst r0, #2 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + addne r1, r7, r4, lsl #2 + addne r0, r7, r4 + strne r8, [r1, #8] + strneb r5, [r0, #0x18] + addne r4, r4, #1 +_02044C88: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 + cmp r8, #4 + blt _02044C44 + mov r0, r4, lsl #0x10 + mov r5, r0, asr #0x10 + mvn r3, #0 + mov r2, #0 + b _02044CCC +_02044CB0: + add r1, r7, r5, lsl #2 + add r0, r5, #1 + str r3, [r1, #8] + add r1, r7, r5 + mov r0, r0, lsl #0x10 + strb r2, [r1, #0x18] + mov r5, r0, asr #0x10 +_02044CCC: + cmp r5, #4 + blt _02044CB0 + b _02044D78 +_02044CD8: + mov r5, r4 +_02044CDC: + ldr r0, _020451A0 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 + ldr r6, [r0, SUB_02044BF8_LOAD_OFFSET] + mov r0, r6 + bl sub_0204533C + cmp r0, #0 + beq _02044D40 + cmp fp, #0 + beq _02044D18 + mov r0, r6 + ldr r8, [r6, #0xb4] + bl ov29_02347100 +#ifdef JAPAN + strb r0, [r8, #0x15d] +#else + strb r0, [r8, #0x161] +#endif +_02044D18: + add r0, r7, r4, lsl #2 + str r5, [r0, #8] + ldr r0, [r6, #0xb4] +#ifdef JAPAN + ldrb r0, [r0, #0x15d] +#else + ldrb r0, [r0, #0x161] +#endif + cmp r0, #0 + movne r1, #0 + add r0, r7, r4 + moveq r1, #3 + strb r1, [r0, #0x18] + add r4, r4, #1 +_02044D40: + add r5, r5, #1 + cmp r5, #4 + blt _02044CDC + mov r5, r4 + mvn r3, #0 + mov r1, #0 + b _02044D70 +_02044D5C: + add r2, r7, r5, lsl #2 + add r0, r7, r5 + str r3, [r2, #8] + strb r1, [r0, #0x18] + add r5, r5, #1 +_02044D70: + cmp r5, #4 + blt _02044D5C +_02044D78: + ldr r0, [sp, #0xe0] + str r4, [r7, #0x1c] + str r0, [r7] + cmp sb, #0 + moveq r0, #0 + beq _02044D98 + mov r0, #0xb + bl Arm9LoadUnkFieldNa0x2029EC8 +_02044D98: + str r0, [sl, #0x6e8] + str r4, [sl, #0x6ec] + str r4, [sl, #0x6f0] + mov sb, #0 + str sb, [sl, #0x6f4] + str sb, [sl, #0x6f8] + add r0, sl, #0x18c + str sb, [sl, #0x6dc] + add r2, sl, #0x20c + add r0, r0, #0x400 + mov r1, #0x40 + str sb, [sl, #0x6e0] + add r5, r2, #0x400 + bl MemZero + add r0, sl, #0x1cc + add r0, r0, #0x400 + mov r1, #0x40 + bl MemZero + add r0, sl, #0x18c + add r0, r0, #0x400 + str r0, [sp, #0x14] + add r0, sl, #0x3c + add r1, sl, #0x1cc + add r2, sl, #0x13c + str r0, [sp, #0x10] + add r0, r2, #0x400 + str r0, [sp, #0x18] + ldr r0, _020451A4 ; =0x000003E7 + mov r6, sb + sub r0, r0, #0x3e8 + str r0, [sp, #0x20] + ldr r0, _020451A4 ; =0x000003E7 + add r4, r1, #0x400 + sub r0, r0, #0x3e8 + str r0, [sp, #0x1c] + b _020450F8 +_02044E28: + mov r0, r5 + mov r1, r6 + bl sub_02045360 + mov fp, r0 + ldr r0, [sp, #0x1c] + cmp fp, r0 + beq _020450F4 + ldr r0, [sp, #0x10] + mov r1, r6 + add r0, r0, sb, lsl #8 + str r0, [sp, #0xc] + mov r0, r5 + bl sub_02045360 + mov r1, r0 + ldr r0, [sp, #0x20] + cmp r1, r0 + beq _02044EC4 + ldr r0, [r5] + cmp r0, #0 + bne _02044E8C + mov r0, r1, lsl #0x10 + mov r1, r0, asr #0x10 + ldr r0, [sp, #0x14] + bl sub_020584FC + b _02044EC4 +_02044E8C: + ldr r3, _020451A0 ; =DUNGEON_PTR + add r0, r5, r6 + ldr r3, [r3] + ldrb r0, [r0, #0x18] + add r1, r3, r1, lsl #2 + add r1, r1, #0x12000 + cmp r0, #0 + movne r0, #0x57 + ldr r1, [r1, SUB_02044BF8_LOAD_OFFSET] + moveq r0, #0x44 + and r2, r0, #0xff + ldr r0, [sp, #0x14] + ldr r1, [r1, #0xb4] + bl ov29_023002F0 +_02044EC4: + ldr r0, [sp, #0x14] + str r0, [sl, #0x574] + ldr r0, [r5] + cmp r0, #0 + bne _02044EE8 + ldr r1, _020451A8 ; =_0209CBA8 + mov r0, r4 + bl strcpy + b _020450A8 +_02044EE8: + ldr r0, _020451A0 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, fp, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, SUB_02044BF8_LOAD_OFFSET] + bl sub_0204533C + cmp r0, #0 + beq _020450F4 + ldr r0, _020451A0 ; =DUNGEON_PTR + ldr r2, [r0] + ldr r0, _020451AC ; =TEAM_MEMBER_TABLE_PTR + ldr r1, [r0] + add r0, r2, fp, lsl #2 + add r0, r0, #0x12000 + ldr r2, [r0, SUB_02044BF8_LOAD_OFFSET] + add r0, r1, #0x9000 + ldr r8, [r2, #0xb4] + ldr r2, [r0, #0x84c] + ldrsh r1, [r8, #0xc] + mov r0, #0x68 + smlabb r0, r1, r0, r2 + ldrsh r0, [r0, #8] + bl sub_02056228 + cmp r0, #0 + ldrsh r1, [r8, #0x12] + ldrsh r0, [r8, #0x16] + beq _02045000 + add r1, r1, r0 + ldr r0, _020451A4 ; =0x000003E7 + cmp r1, r0 + movgt r3, r0 + movle r3, r1 + mov r2, r3, asr #1 + ldrsh r0, [r8, #0x10] + add r2, r3, r2, lsr #30 + cmp r0, r2, asr #2 + bgt _02044F8C + ldr r1, _020451B0 ; =_0209CBB0 + mov r0, r4 + bl strcpy + b _020450A8 +_02044F8C: + ldr r2, _020451A4 ; =0x000003E7 + cmp r1, r2 + movgt r3, r2 + movle r3, r1 + mov r2, r3, asr #1 + add r2, r3, r2, lsr #30 + mov r2, r2, asr #2 + cmp r0, r2, lsl #1 + bgt _02044FC0 + ldr r1, _020451B4 ; =_0209CBB8 + mov r0, r4 + bl strcpy + b _020450A8 +_02044FC0: + ldr r2, _020451A4 ; =0x000003E7 + cmp r1, r2 + movgt r1, r2 + mov r2, r1, asr #1 + add r1, r1, r2, lsr #30 + mov r1, r1, asr #2 + add r1, r1, r1, lsl #1 + cmp r0, r1 + mov r0, r4 + bgt _02044FF4 + ldr r1, _020451B8 ; =_0209CBC0 + bl strcpy + b _020450A8 +_02044FF4: + ldr r1, _020451BC ; =_0209CBC8 + bl strcpy + b _020450A8 +_02045000: + add r1, r1, r0 + ldr r0, _020451A4 ; =0x000003E7 + cmp r1, r0 + movgt r3, r0 + movle r3, r1 + mov r2, r3, asr #1 + ldrsh r0, [r8, #0x10] + add r2, r3, r2, lsr #30 + cmp r0, r2, asr #2 + bgt _02045038 + ldr r1, _020451C0 ; =_0209CBD0 + mov r0, r4 + bl strcpy + b _020450A8 +_02045038: + ldr r2, _020451A4 ; =0x000003E7 + cmp r1, r2 + movgt r3, r2 + movle r3, r1 + mov r2, r3, asr #1 + add r2, r3, r2, lsr #30 + mov r2, r2, asr #2 + cmp r0, r2, lsl #1 + bgt _0204506C + ldr r1, _020451C4 ; =_0209CBD8 + mov r0, r4 + bl strcpy + b _020450A8 +_0204506C: + ldr r2, _020451A4 ; =0x000003E7 + cmp r1, r2 + movgt r1, r2 + mov r2, r1, asr #1 + add r1, r1, r2, lsr #30 + mov r1, r1, asr #2 + add r1, r1, r1, lsl #1 + cmp r0, r1 + mov r0, r4 + bgt _020450A0 + ldr r1, _020451C8 ; =_0209CBE0 + bl strcpy + b _020450A8 +_020450A0: + ldr r1, _020451A8 ; =_0209CBA8 + bl strcpy +_020450A8: + str r4, [sl, #0x578] + ldr r0, [r5] + cmp r0, #0 + bne _020450C4 + mov r0, fp, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetActiveTeamMember +_020450C4: + ldr r0, [sp, #0x18] + ldr r2, _020451CC ; =_0209CBE8 + str r0, [sp] + ldr r0, [sp, #0xc] + mov r1, #0x100 + mov r3, #0 + bl PreprocessString + add r1, sl, sb, lsl #3 + ldr r0, [sp, #0xc] + add sb, sb, #1 + str r0, [r1, #0xc] + str sb, [r1, #0x10] +_020450F4: + add r6, r6, #1 +_020450F8: + ldr r0, [r5, #0x1c] + cmp r6, r0 + blt _02044E28 + mov r0, #0 + add r1, sl, sb, lsl #3 + str r0, [r1, #0xc] + sub r0, r0, #1 + str r0, [r1, #0x10] + ldr r0, [sp, #4] + add r2, sp, #0x24 + cmp r0, #0 + ldrne r1, _020451D0 ; =0x00000A3A + movne r0, #0x10 + strne r0, [sp, #0x30] + strneh r1, [sp, #0x2c] + ldr r1, [sl, #0x6e8] + add r0, r7, #0x18 + add r1, r1, #1 + str r1, [sp, #0x24] + str r0, [sp, #0x84] + ldr r0, [sp, #4] + add r3, sl, #0xc + cmp r0, #0 + movne r1, #0x800 + ldr r0, [sp, #8] + moveq r1, #0 + cmp r0, #0 + movne r0, #0x400000 + moveq r0, #0 + orr r0, r0, #0x33 + orr r1, r0, r1 + ldr r0, _020451D4 ; =_0209CB98 + orr r1, r1, #0x1200 + bl CreateParentMenu + ldr r1, [sp, #0xe0] + strb r0, [sl, #8] + cmp r1, #1 + bne _02045194 + bl ov29_022EA62C +_02045194: + add sp, sp, #0xbc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0204519C: .word 0x00000728 +_020451A0: .word DUNGEON_PTR +_020451A4: .word 0x000003E7 +_020451A8: .word _0209CBA8 +_020451AC: .word TEAM_MEMBER_TABLE_PTR +_020451B0: .word _0209CBB0 +_020451B4: .word _0209CBB8 +_020451B8: .word _0209CBC0 +_020451BC: .word _0209CBC8 +_020451C0: .word _0209CBD0 +_020451C4: .word _0209CBD8 +_020451C8: .word _0209CBE0 +_020451CC: .word _0209CBE8 +#ifdef JAPAN +_020451D0: .word 0x00000875 +#else +_020451D0: .word 0x00000A3A +#endif +_020451D4: .word _0209CB98 + arm_func_end sub_02044BF8 + + arm_func_start sub_020451D8 +sub_020451D8: ; 0x020451D8 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + ldr r1, [r4] + add r0, r4, #0x20c + cmp r1, #0 + add r5, r0, #0x400 + beq _02045208 + cmp r1, #1 + beq _02045220 + cmp r1, #2 + beq _02045288 + b _02045290 +_02045208: + ldrsb r0, [r4, #8] + bl IsParentMenuActive + cmp r0, #0 + beq _02045290 + mov r0, #1 + str r0, [r4] +_02045220: + ldrsb r0, [r4, #8] + bl IsParentMenuActive + cmp r0, #0 + bne _02045278 + mov r0, #2 + str r0, [r4] + ldrsb r0, [r4, #8] + bl sub_0202ABB0 + subs r0, r0, #1 + bmi _0204526C + str r0, [r4, #0x6e8] + add r0, r5, r0 + ldrb r0, [r0, #0x18] + cmp r0, #0 + moveq r0, #2 + streq r0, [r4, #0x724] + movne r0, #1 + strne r0, [r4, #0x724] + b _02045290 +_0204526C: + mov r0, #1 + str r0, [r4, #0x724] + b _02045290 +_02045278: + ldrsb r0, [r4, #8] + bl sub_0202AB80 + str r0, [r4, #0x6e8] + b _02045290 +_02045288: + ldr r0, [r4, #0x724] + ldmia sp!, {r3, r4, r5, pc} +_02045290: + mov r0, #0 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_020451D8 + + arm_func_start sub_02045298 +sub_02045298: ; 0x02045298 + ldr r0, [r0, #0x60c] + bx lr + arm_func_end sub_02045298 + + arm_func_start sub_020452A0 +sub_020452A0: ; 0x020452A0 + ldr ip, _020452B4 ; =sub_02045360 + add r2, r0, #0x20c + ldr r1, [r0, #0x6e8] + add r0, r2, #0x400 + bx ip + .align 2, 0 +_020452B4: .word sub_02045360 + arm_func_end sub_020452A0 + + arm_func_start sub_020452B8 +sub_020452B8: ; 0x020452B8 + stmdb sp!, {r4, lr} + movs r4, r0 + ldrnesb r0, [r4, #8] + mvnne r1, #1 + cmpne r0, r1 + moveq r0, #1 + ldmeqia sp!, {r4, pc} + bl sub_0202AAE8 + cmp r0, #0 + ldrsb r0, [r4, #8] + beq _02045310 + bl sub_020282F4 + add r0, r0, #5 + cmp r0, #1 + movhi r0, #0 + bhi _02045320 + ldrsb r0, [r4, #8] + bl CloseParentMenu + mvn r0, #1 + strb r0, [r4, #8] + mov r0, #1 + b _02045320 +_02045310: + bl CloseParentMenu + mvn r0, #1 + strb r0, [r4, #8] + mov r0, #1 +_02045320: + cmp r0, #0 + movne r0, #2 + moveq r0, #0 + ldmia sp!, {r4, pc} + arm_func_end sub_020452B8 + + arm_func_start sub_02045330 +sub_02045330: ; 0x02045330 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bx lr + arm_func_end sub_02045330 + + arm_func_start sub_0204533C +sub_0204533C: ; 0x0204533C + cmp r0, #0 + moveq r0, #0 + bxeq lr + ldr r0, [r0] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + arm_func_end sub_0204533C + + arm_func_start sub_02045360 +sub_02045360: ; 0x02045360 + stmdb sp!, {r4, lr} + add r1, r0, r1, lsl #2 + ldr r4, [r1, #8] + mvn r1, #0 + cmp r4, r1 + moveq r0, r1 + ldmeqia sp!, {r4, pc} + ldr r0, [r0] + cmp r0, #0 + bne _020453C8 + mov r0, r4, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetActiveTeamMember + ldrb r0, [r0] + tst r0, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _020453C0 + tst r0, #2 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + bne _020453EC +_020453C0: + mvn r0, #0 + ldmia sp!, {r4, pc} +_020453C8: + ldr r0, _020453F4 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + bl sub_0204533C + cmp r0, #0 + mvneq r0, #0 + ldmeqia sp!, {r4, pc} +_020453EC: + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_020453F4: .word DUNGEON_PTR + arm_func_end sub_02045360 + + arm_func_start sub_020453F8 +sub_020453F8: ; 0x020453F8 + stmdb sp!, {r3, r4, r5, lr} + ldr r2, _020454DC ; =_020AFED4 + mov r5, r0 + ldr r0, [r2] + mov r4, r1 + cmp r0, #0 + bne _02045428 + mov r0, #0x410 + mov r1, #8 + bl MemAlloc + ldr r1, _020454DC ; =_020AFED4 + str r0, [r1] +_02045428: + bl sub_02044094 + bl sub_020440DC + ldr r1, _020454DC ; =_020AFED4 + mov r2, #0 + ldr r0, [r1] + strb r4, [r0, #0x386] + ldr r0, [r1] + add r0, r0, #0x300 + strh r2, [r0, #0x88] + ldr r0, [r1] + str r2, [r0, #0x38c] + ldr r0, [r1] + add r0, r0, #0x1c + bl InitPreprocessorArgs + ldr r1, _020454DC ; =_020AFED4 + mov r0, #0 + ldr r2, [r1] + sub r3, r0, #2 + str r0, [r2, #0x68] + ldr r2, [r1] + cmp r4, #0 + str r0, [r2, #0x1c] + ldr r2, [r1] + str r0, [r2, #0x18] + ldr r2, [r1] + strb r3, [r2, #0x14] + ldr r2, [r1] + strb r3, [r2, #0x16] + ldr r2, [r1] + strb r3, [r2, #0x15] + ldr r2, [r1] + strb r3, [r2, #0x17] + ldr r3, [r1] + ldrh r2, [r5] + add r1, r3, #0x300 + strh r2, [r1, #0x80] + ldrh r2, [r5, #2] + strh r2, [r1, #0x82] + ldrh r2, [r5, #4] + strh r2, [r1, #0x84] + str r0, [r3, #0x6c] + moveq r0, #0x13 + bl sub_020454E0 + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020454DC: .word _020AFED4 + arm_func_end sub_020453F8 + + arm_func_start sub_020454E0 +sub_020454E0: ; 0x020454E0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x194 + ldr r1, _02045A1C ; =_020AFED4 + ldr r2, [r1] + str r0, [r2, #4] + ldr r4, [r1] + ldr r0, [r4, #4] + cmp r0, #0x13 + addls pc, pc, r0, lsl #2 + b _02045A14 +_02045508: ; jump table + b _02045558 ; case 0 + b _02045584 ; case 1 + b _020455CC ; case 2 + b _02045A14 ; case 3 + b _02045A14 ; case 4 + b _02045A14 ; case 5 + b _020458C0 ; case 6 + b _02045914 ; case 7 + b _02045844 ; case 8 + b _02045948 ; case 9 + b _02045984 ; case 10 + b _020459C0 ; case 11 + b _02045A14 ; case 12 + b _02045A14 ; case 13 + b _02045958 ; case 14 + b _02045798 ; case 15 + b _02045688 ; case 16 + b _02045764 ; case 17 + b _02045A14 ; case 18 + b _020459E0 ; case 19 +_02045558: + mov r0, #2 + str r0, [r4, #8] + bl sub_02046624 + ldr r0, _02045A1C ; =_020AFED4 + ldr r2, _02045A20 ; =0x000002CD + ldr r3, [r0] + mov r1, #8 + ldrsb r0, [r3, #0x14] + add r3, r3, #0x1c + bl ShowStringIdInDialogueBox + b _02045A14 +_02045584: + mov r0, #2 + str r0, [r4, #8] + bl sub_02046624 + ldr r0, _02045A1C ; =_020AFED4 + ldr r0, [r0] + ldrsb r0, [r0, #0x14] + bl ShowDialogueBox + ldr r0, _02045A1C ; =_020AFED4 + mov r3, #2 + ldr r1, [r0] + ldr r2, _02045A24 ; =0x000002D5 + str r3, [r1, #8] + ldr r3, [r0] + mov r1, #8 + ldrsb r0, [r3, #0x14] + add r3, r3, #0x1c + bl ShowStringIdInDialogueBox + b _02045A14 +_020455CC: + ldr r1, _02045A28 ; =0x000002CE + add r0, r4, #0x70 + bl GetStringFromFileVeneer + mov r1, #2 + add r0, sp, #0x14 + str r1, [r4, #0x170] + bl InitPreprocessorArgs + ldr r0, _02045A1C ; =_020AFED4 + ldr r2, _02045A2C ; =_0209CC0C + ldr r1, [r0] + add r0, r1, #0x390 + add r1, r1, #0x380 + bl sub_0200D670 + ldr r0, _02045A1C ; =_020AFED4 + ldr r2, _02045A30 ; =0x000002CF + ldr r5, [r0] + add ip, sp, #0x14 + add r3, r5, #0x300 + ldrsh lr, [r3, #0x84] + add r0, r4, #0x174 + mov r1, #0x100 + orr lr, lr, #0x10000 + str lr, [sp, #0x24] + ldrh lr, [r3, #0x82] + mov r3, #0 + str lr, [sp, #0x38] + ldrb lr, [r5, #0x380] + str lr, [sp, #0x3c] + str ip, [sp] + bl PreprocessStringFromId + mov r1, #3 + str r1, [r4, #0x274] + mov r2, #0 + strb r2, [r4, #0x278] + mov r0, #1 + str r0, [r4, #0x378] + str r1, [sp] + ldr r3, _02045A1C ; =_020AFED4 + ldr r0, _02045A34 ; =_0209CC38 + ldr r3, [r3] + ldr r1, _02045A38 ; =0x00300011 + add r3, r3, #0x70 + bl CreateSimpleMenu + ldr r1, _02045A1C ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x16] + b _02045A14 +_02045688: + mov r0, #0x11 + str r0, [r4, #8] + ldr r0, [r1] + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010044 + ldr r2, _02045A1C ; =_020AFED4 + ldr r1, [r2] + add r1, r1, #0x300 + strh r0, [r1, #0x88] + ldr r1, [r2] + add r0, r1, #0x300 + ldrsh r0, [r0, #0x88] + strh r0, [sp, #0x10] + ldr r0, [r1] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010060 + ldr r3, _02045A1C ; =_020AFED4 + ldr r2, _02045A2C ; =_0209CC0C + ldr r4, [r3] + add r1, sp, #0xc + str r0, [r4, #0x38c] + ldr r0, [r3] + mov r3, #0 + ldr r4, [r0, #0x38c] + add r0, r0, #0x390 + strh r4, [sp, #0xe] + strb r3, [sp, #0xc] + bl sub_0200D670 + ldr r0, _02045A1C ; =_020AFED4 + ldr r2, [r0] + add r1, r2, #0x390 + str r1, [r2, #0x54] + ldr r1, [r0] + add r0, r1, #0x300 + ldrsh r0, [r0, #0x88] + str r0, [r1, #0x2c] + bl sub_02046624 + ldr r0, _02045A1C ; =_020AFED4 + ldr r0, [r0] + ldrsb r0, [r0, #0x14] + bl ShowDialogueBox + ldr r0, _02045A1C ; =_020AFED4 + mov r4, #0x11 + ldr r3, [r0] +#ifdef JAPAN + ldr r2, _02045D9C ; =0x00002FC5 + str r4, [r3, #8] + ldr r3, [r0] + mov r1, #8 +#else + mov r1, #8 + str r4, [r3, #8] + ldr r3, [r0] + add r2, r4, #0x2c0 +#endif + ldrsb r0, [r3, #0x14] + add r3, r3, #0x1c + bl ShowStringIdInDialogueBox + b _02045A14 +_02045764: + mov r4, #3 + str r4, [sp, #0x64] + mov r4, #2 + ldr r0, _02045A34 ; =_0209CC38 + ldr r1, _02045A3C ; =0x00300033 + ldr r3, _02045A40 ; =_0209CC48 + add r2, sp, #0x64 + str r4, [sp] + bl CreateSimpleMenuFromStringIds + ldr r1, _02045A1C ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x16] + b _02045A14 +_02045798: + ldr r0, [r4] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010044 + ldr r2, _02045A1C ; =_020AFED4 + ldr r1, [r2] + add r1, r1, #0x300 + strh r0, [r1, #0x88] + ldr r0, [r2] + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010060 + ldr r4, _02045A1C ; =_020AFED4 + ldr r1, _02045A44 ; =0x00001013 + ldr r2, [r4] + ldr r3, _02045A48 ; =0x000008E4 + str r0, [r2, #0x38c] + ldr lr, [r4] + ldr r0, _02045A4C ; =_0209CC28 + add r2, lr, #0x300 + ldrsh ip, [r2, #0x88] + mov r2, #0 + str ip, [lr, #0x2c] + ldr lr, [r4] + ldr ip, [lr, #0x38c] + add ip, ip, #0xbc + str ip, [lr, #0x34] + ldr r4, [r4] + add ip, r4, #0x1c + add r4, r4, #0x300 + str ip, [sp] + ldrsh r4, [r4, #0x88] +#if defined(EUROPE) + add r4, r4, #0xd3 + add r4, r4, #0x2900 +#elif defined(JAPAN) + add r4, r4, #0xce + add r4, r4, #0x4100 +#else + add r4, r4, #0xd1 + add r4, r4, #0x2900 +#endif + mov r4, r4, lsl #0x10 + mov r4, r4, lsr #0x10 + stmib sp, {r4, ip} + bl CreateScrollBoxSingle + ldr r1, _02045A1C ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x17] + b _02045A14 +_02045844: + ldr r0, [r4] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010044 + ldr r2, _02045A1C ; =_020AFED4 + ldr r1, [r2] + add r1, r1, #0x300 + strh r0, [r1, #0x88] + ldr r0, [r2] + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010060 + ldr r1, _02045A1C ; =_020AFED4 + mov r2, #3 + ldr r3, [r1] + str r0, [r3, #0x38c] + ldr r3, [r1] + add r0, r3, #0x300 + ldrsh r0, [r0, #0x88] + str r0, [r3, #0x2c] + ldr r0, [r1] + str r2, [r0, #4] + bl sub_02045A5C + ldr r0, _02045A1C ; =_020AFED4 + ldr r0, [r0] + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010154 + b _02045A14 +_020458C0: + add r0, r4, #0x390 + str r0, [r4, #0x5c] + ldr r0, [r1] + mov r1, #7 + str r1, [r0, #8] + bl sub_02046624 + ldr r0, _02045A1C ; =_020AFED4 + ldr r0, [r0] + ldrsb r0, [r0, #0x14] + bl ShowDialogueBox + ldr r0, _02045A1C ; =_020AFED4 + mov r3, #7 + ldr r1, [r0] + ldr r2, _02045A50 ; =0x000002D6 + str r3, [r1, #8] + ldr r3, [r0] + mov r1, #8 + ldrsb r0, [r3, #0x14] + add r3, r3, #0x1c + bl ShowStringIdInDialogueBox + b _02045A14 +_02045914: + mov r4, #3 + str r4, [sp, #0xfc] + mov r4, #2 + ldr r0, _02045A34 ; =_0209CC38 + ldr r1, _02045A3C ; =0x00300033 + ldr r3, _02045A40 ; =_0209CC48 + add r2, sp, #0xfc + str r4, [sp] + bl CreateSimpleMenuFromStringIds + ldr r1, _02045A1C ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x16] + b _02045A14 +_02045948: + mov r0, #4 + str r0, [r4, #4] + bl sub_02045A5C + b _02045A14 +_02045958: + ldr r0, _02045A54 ; =_0209CC18 + mov r4, #3 + ldr r3, _02045A58 ; =_0209CC60 + mov r1, #0x13 + mov r2, #0 + str r4, [sp] + bl CreateSimpleMenuFromStringIds + ldr r1, _02045A1C ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x16] + b _02045A14 +_02045984: + ldrsb r0, [r4, #0x14] + bl CloseDialogueBox + ldr r0, _02045A1C ; =_020AFED4 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x14] + bl sub_02043218 + mov r0, #2 + mov r1, #0 + mov r2, #8 + bl sub_02042CF0 + ldr r1, _02045A1C ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x15] + b _02045A14 +_020459C0: + mov r0, #2 + mov r1, #0 + mov r2, #8 + bl sub_02042CF0 + ldr r1, _02045A1C ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x15] + b _02045A14 +_020459E0: + mov r0, #0xa + str r0, [r4, #8] + ldr r0, [r1] + mov r1, #0x12 + str r1, [r0, #4] + bl sub_02046624 + ldr r0, _02045A1C ; =_020AFED4 +#ifdef JAPAN + ldr r2, _02045DC0 ; =0x00002FC4 + ldr r3, [r0] + mov r1, #0x18 +#else + mov r1, #0x18 + ldr r3, [r0] + mov r2, #0x2d0 +#endif + ldrsb r0, [r3, #0x14] + add r3, r3, #0x1c + bl ShowStringIdInDialogueBox +_02045A14: + add sp, sp, #0x194 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +#define SUB_020454E0_OFFSET 0x2CF4 +#else +#define SUB_020454E0_OFFSET 0 +#endif +_02045A1C: .word _020AFED4 +_02045A20: .word 0x000002CD + SUB_020454E0_OFFSET +_02045A24: .word 0x000002D5 + SUB_020454E0_OFFSET +_02045A28: .word 0x000002CE + SUB_020454E0_OFFSET +_02045A2C: .word _0209CC0C +_02045A30: .word 0x000002CF + SUB_020454E0_OFFSET +_02045A34: .word _0209CC38 +_02045A38: .word 0x00300011 +#ifdef JAPAN +_02045D9C: .word 0x00002FC5 +#endif +_02045A3C: .word 0x00300033 +_02045A40: .word _0209CC48 +_02045A44: .word 0x00001013 +#ifdef JAPAN +_02045A48: .word 0x00001D3C +#else +_02045A48: .word 0x000008E4 +#endif +_02045A4C: .word _0209CC28 +_02045A50: .word 0x000002D6 + SUB_020454E0_OFFSET +_02045A54: .word _0209CC18 +_02045A58: .word _0209CC60 +#ifdef JAPAN +_02045DC0: .word 0x00002FC4 +#endif + arm_func_end sub_020454E0 + + arm_func_start sub_02045A5C +sub_02045A5C: ; 0x02045A5C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x194 + ldr r0, _02045F90 ; =_020AFED4 + ldr r4, [r0] + ldr r1, [r4, #4] + cmp r1, #0x13 + addls pc, pc, r1, lsl #2 + b _02045F88 +_02045A7C: ; jump table + b _02045ACC ; case 0 + b _02045AF8 ; case 1 + b _02045B40 ; case 2 + b _02045F88 ; case 3 + b _02045F88 ; case 4 + b _02045F88 ; case 5 + b _02045E34 ; case 6 + b _02045E88 ; case 7 + b _02045DB8 ; case 8 + b _02045EBC ; case 9 + b _02045EF8 ; case 10 + b _02045F34 ; case 11 + b _02045F88 ; case 12 + b _02045F88 ; case 13 + b _02045ECC ; case 14 + b _02045D0C ; case 15 + b _02045BFC ; case 16 + b _02045CD8 ; case 17 + b _02045F88 ; case 18 + b _02045F54 ; case 19 +_02045ACC: + mov r0, #2 + str r0, [r4, #8] + bl sub_02046624 + ldr r0, _02045F90 ; =_020AFED4 + ldr r2, _02045F94 ; =0x000002CD + ldr r3, [r0] + mov r1, #8 + ldrsb r0, [r3, #0x14] + add r3, r3, #0x1c + bl ShowStringIdInDialogueBox + b _02045F88 +_02045AF8: + mov r0, #2 + str r0, [r4, #8] + bl sub_02046624 + ldr r0, _02045F90 ; =_020AFED4 + ldr r0, [r0] + ldrsb r0, [r0, #0x14] + bl ShowDialogueBox + ldr r0, _02045F90 ; =_020AFED4 + mov r3, #2 + ldr r1, [r0] + ldr r2, _02045F98 ; =0x000002D5 + str r3, [r1, #8] + ldr r3, [r0] + mov r1, #8 + ldrsb r0, [r3, #0x14] + add r3, r3, #0x1c + bl ShowStringIdInDialogueBox + b _02045F88 +_02045B40: + ldr r1, _02045F9C ; =0x000002CE + add r0, r4, #0x70 + bl GetStringFromFileVeneer + mov r1, #2 + add r0, sp, #0x144 + str r1, [r4, #0x170] + bl InitPreprocessorArgs + ldr r0, _02045F90 ; =_020AFED4 + ldr r2, _02045FA0 ; =_0209CC0C + ldr r1, [r0] + add r0, r1, #0x390 + add r1, r1, #0x380 + bl sub_0200D670 + ldr r0, _02045F90 ; =_020AFED4 + ldr r2, _02045FA4 ; =0x000002CF + ldr r5, [r0] + add ip, sp, #0x144 + add r3, r5, #0x300 + ldrsh lr, [r3, #0x84] + add r0, r4, #0x174 + mov r1, #0x100 + orr lr, lr, #0x10000 + str lr, [sp, #0x154] + ldrh lr, [r3, #0x82] + mov r3, #0 + str lr, [sp, #0x168] + ldrb lr, [r5, #0x380] + str lr, [sp, #0x16c] + str ip, [sp] + bl PreprocessStringFromId + mov r1, #3 + str r1, [r4, #0x274] + mov r2, #0 + strb r2, [r4, #0x278] + mov r0, #1 + str r0, [r4, #0x378] + str r1, [sp] + ldr r3, _02045F90 ; =_020AFED4 + ldr r0, _02045FA8 ; =_0209CC38 + ldr r3, [r3] + ldr r1, _02045FAC ; =0x00300011 + add r3, r3, #0x70 + bl CreateSimpleMenu + ldr r1, _02045F90 ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x16] + b _02045F88 +_02045BFC: + mov r1, #0x11 + str r1, [r4, #8] + ldr r0, [r0] + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010044 + ldr r2, _02045F90 ; =_020AFED4 + ldr r1, [r2] + add r1, r1, #0x300 + strh r0, [r1, #0x88] + ldr r1, [r2] + add r0, r1, #0x300 + ldrsh r0, [r0, #0x88] + strh r0, [sp, #0x10] + ldr r0, [r1] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010060 + ldr r3, _02045F90 ; =_020AFED4 + ldr r2, _02045FA0 ; =_0209CC0C + ldr r4, [r3] + add r1, sp, #0xc + str r0, [r4, #0x38c] + ldr r0, [r3] + mov r3, #0 + ldr r4, [r0, #0x38c] + add r0, r0, #0x390 + strh r4, [sp, #0xe] + strb r3, [sp, #0xc] + bl sub_0200D670 + ldr r0, _02045F90 ; =_020AFED4 + ldr r2, [r0] + add r1, r2, #0x390 + str r1, [r2, #0x54] + ldr r1, [r0] + add r0, r1, #0x300 + ldrsh r0, [r0, #0x88] + str r0, [r1, #0x2c] + bl sub_02046624 + ldr r0, _02045F90 ; =_020AFED4 + ldr r0, [r0] + ldrsb r0, [r0, #0x14] + bl ShowDialogueBox + ldr r0, _02045F90 ; =_020AFED4 + mov r4, #0x11 + ldr r3, [r0] +#ifdef JAPAN + ldr r2, _02046318 ; =0x00002FC5 + str r4, [r3, #8] + ldr r3, [r0] + mov r1, #8 +#else + mov r1, #8 + str r4, [r3, #8] + ldr r3, [r0] + add r2, r4, #0x2c0 +#endif + ldrsb r0, [r3, #0x14] + add r3, r3, #0x1c + bl ShowStringIdInDialogueBox + b _02045F88 +_02045CD8: + mov r4, #3 + str r4, [sp, #0xac] + mov r4, #2 + ldr r0, _02045FA8 ; =_0209CC38 + ldr r1, _02045FB0 ; =0x00300033 + ldr r3, _02045FB4 ; =_0209CC48 + add r2, sp, #0xac + str r4, [sp] + bl CreateSimpleMenuFromStringIds + ldr r1, _02045F90 ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x16] + b _02045F88 +_02045D0C: + ldr r0, [r4] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010044 + ldr r2, _02045F90 ; =_020AFED4 + ldr r1, [r2] + add r1, r1, #0x300 + strh r0, [r1, #0x88] + ldr r0, [r2] + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010060 + ldr r4, _02045F90 ; =_020AFED4 + ldr r1, _02045FB8 ; =0x00001013 + ldr r2, [r4] + ldr r3, _02045FBC ; =0x000008E4 + str r0, [r2, #0x38c] + ldr lr, [r4] + ldr r0, _02045FC0 ; =_0209CC28 + add r2, lr, #0x300 + ldrsh ip, [r2, #0x88] + mov r2, #0 + str ip, [lr, #0x2c] + ldr lr, [r4] + ldr ip, [lr, #0x38c] + add ip, ip, #0xbc + str ip, [lr, #0x34] + ldr r4, [r4] + add ip, r4, #0x1c + add r4, r4, #0x300 + str ip, [sp] + ldrsh r4, [r4, #0x88] +#if defined(EUROPE) + add r4, r4, #0xd3 + add r4, r4, #0x2900 +#elif defined(JAPAN) + add r4, r4, #0xce + add r4, r4, #0x4100 +#else + add r4, r4, #0xd1 + add r4, r4, #0x2900 +#endif + mov r4, r4, lsl #0x10 + mov r4, r4, lsr #0x10 + stmib sp, {r4, ip} + bl CreateScrollBoxSingle + ldr r1, _02045F90 ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x17] + b _02045F88 +_02045DB8: + ldr r0, [r4] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010044 + ldr r2, _02045F90 ; =_020AFED4 + ldr r1, [r2] + add r1, r1, #0x300 + strh r0, [r1, #0x88] + ldr r0, [r2] + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010060 + ldr r1, _02045F90 ; =_020AFED4 + mov r2, #3 + ldr r3, [r1] + str r0, [r3, #0x38c] + ldr r3, [r1] + add r0, r3, #0x300 + ldrsh r0, [r0, #0x88] + str r0, [r3, #0x2c] + ldr r0, [r1] + str r2, [r0, #4] + bl sub_02045A5C + ldr r0, _02045F90 ; =_020AFED4 + ldr r0, [r0] + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010154 + b _02045F88 +_02045E34: + add r1, r4, #0x390 + str r1, [r4, #0x5c] + ldr r0, [r0] + mov r1, #7 + str r1, [r0, #8] + bl sub_02046624 + ldr r0, _02045F90 ; =_020AFED4 + ldr r0, [r0] + ldrsb r0, [r0, #0x14] + bl ShowDialogueBox + ldr r0, _02045F90 ; =_020AFED4 + mov r3, #7 + ldr r1, [r0] + ldr r2, _02045FC4 ; =0x000002D6 + str r3, [r1, #8] + ldr r3, [r0] + mov r1, #8 + ldrsb r0, [r3, #0x14] + add r3, r3, #0x1c + bl ShowStringIdInDialogueBox + b _02045F88 +_02045E88: + mov r4, #3 + str r4, [sp, #0x14] + mov r4, #2 + ldr r0, _02045FA8 ; =_0209CC38 + ldr r1, _02045FB0 ; =0x00300033 + ldr r3, _02045FB4 ; =_0209CC48 + add r2, sp, #0x14 + str r4, [sp] + bl CreateSimpleMenuFromStringIds + ldr r1, _02045F90 ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x16] + b _02045F88 +_02045EBC: + mov r0, #4 + str r0, [r4, #4] + bl sub_02045A5C + b _02045F88 +_02045ECC: + ldr r0, _02045FC8 ; =_0209CC18 + mov r4, #3 + ldr r3, _02045FCC ; =_0209CC60 + mov r1, #0x13 + mov r2, #0 + str r4, [sp] + bl CreateSimpleMenuFromStringIds + ldr r1, _02045F90 ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x16] + b _02045F88 +_02045EF8: + ldrsb r0, [r4, #0x14] + bl CloseDialogueBox + ldr r0, _02045F90 ; =_020AFED4 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x14] + bl sub_02043218 + mov r0, #2 + mov r1, #0 + mov r2, #8 + bl sub_02042CF0 + ldr r1, _02045F90 ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x15] + b _02045F88 +_02045F34: + mov r0, #2 + mov r1, #0 + mov r2, #8 + bl sub_02042CF0 + ldr r1, _02045F90 ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x15] + b _02045F88 +_02045F54: + mov r1, #0xa + str r1, [r4, #8] + ldr r0, [r0] + mov r1, #0x12 + str r1, [r0, #4] + bl sub_02046624 + ldr r0, _02045F90 ; =_020AFED4 +#ifdef JAPAN + ldr r2, _0204633C ; =0x00002FC4 + ldr r3, [r0] + mov r1, #0x18 +#else + mov r1, #0x18 + ldr r3, [r0] + mov r2, #0x2d0 +#endif + ldrsb r0, [r3, #0x14] + add r3, r3, #0x1c + bl ShowStringIdInDialogueBox +_02045F88: + add sp, sp, #0x194 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +#define SUB_02045A5C_OFFSET 0x2CF4 +#else +#define SUB_02045A5C_OFFSET 0 +#endif +_02045F90: .word _020AFED4 +_02045F94: .word 0x000002CD + SUB_02045A5C_OFFSET +_02045F98: .word 0x000002D5 + SUB_02045A5C_OFFSET +_02045F9C: .word 0x000002CE + SUB_02045A5C_OFFSET +_02045FA0: .word _0209CC0C +_02045FA4: .word 0x000002CF + SUB_02045A5C_OFFSET +_02045FA8: .word _0209CC38 +_02045FAC: .word 0x00300011 +#ifdef JAPAN +_02046318: .word 0x00002FC5 +#endif +_02045FB0: .word 0x00300033 +_02045FB4: .word _0209CC48 +_02045FB8: .word 0x00001013 +#ifdef JAPAN +_02045FBC: .word 0x00001D3C +#else +_02045FBC: .word 0x000008E4 +#endif +_02045FC0: .word _0209CC28 +_02045FC4: .word 0x000002D6 + SUB_02045A5C_OFFSET +_02045FC8: .word _0209CC18 +_02045FCC: .word _0209CC60 +#ifdef JAPAN +_0204633C: .word 0x00002FC4 +#endif + arm_func_end sub_02045A5C + + arm_func_start sub_02045FD0 +sub_02045FD0: ; 0x02045FD0 + stmdb sp!, {r3, lr} + ldr r2, _02046024 ; =_020AFED4 + ldr r1, [r2] + cmp r1, #0 + moveq r1, #0 + streqh r1, [r0, #4] + ldmeqia sp!, {r3, pc} + add r1, r1, #0x300 + ldrsh r1, [r1, #0x88] + strh r1, [r0, #4] + ldr r1, [r2] + ldr r1, [r1, #0x38c] + strh r1, [r0, #2] + bl sub_020440B8 + ldr r0, _02046024 ; =_020AFED4 + ldr r0, [r0] + bl MemFree + ldr r0, _02046024 ; =_020AFED4 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02046024: .word _020AFED4 + arm_func_end sub_02045FD0 + + arm_func_start sub_02046028 +sub_02046028: ; 0x02046028 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + ldr r0, _020465D8 ; =_020AFED4 + ldr r2, [r0] + ldr r1, [r2, #0x18] + cmp r1, #3 + addls pc, pc, r1, lsl #2 + b _020465CC +_02046048: ; jump table + b _02046058 ; case 0 + b _02046064 ; case 1 + b _02046590 ; case 2 + b _020465C4 ; case 3 +_02046058: + mov r0, #1 + str r0, [r2, #0x18] + b _020465CC +_02046064: + ldr r1, [r2, #4] + cmp r1, #0x12 + addls pc, pc, r1, lsl #2 + b _0204650C +_02046074: ; jump table + b _0204650C ; case 0 + b _0204650C ; case 1 + b _020460C0 ; case 2 + b _020464B4 ; case 3 + b _020464BC ; case 4 + b _020464C4 ; case 5 + b _0204650C ; case 6 + b _02046168 ; case 7 + b _0204650C ; case 8 + b _0204650C ; case 9 + b _020461BC ; case 10 + b _020461BC ; case 11 + b _02046334 ; case 12 + b _02046364 ; case 13 + b _020463B4 ; case 14 + b _02046478 ; case 15 + b _0204650C ; case 16 + b _02046114 ; case 17 + b _020464CC ; case 18 +_020460C0: + ldrsb r0, [r2, #0x16] + bl GetSimpleMenuResult + cmp r0, #1 + ldrne r1, _020465D8 ; =_020AFED4 + ldrne r1, [r1] + strne r0, [r1, #0x10] + cmp r0, #1 + beq _02046104 + cmp r0, #2 + beq _020460F4 + cmp r0, #3 + beq _02046104 + b _0204653C +_020460F4: + bl sub_020465DC + mov r0, #0x13 + bl sub_020454E0 + b _0204653C +_02046104: + bl sub_020465DC + mov r0, #6 + bl sub_020454E0 + b _0204653C +_02046114: + ldrsb r0, [r2, #0x16] + bl GetSimpleMenuResult + cmp r0, #1 + ldrne r1, _020465D8 ; =_020AFED4 + ldrne r1, [r1] + strne r0, [r1, #0x10] + cmp r0, #1 + beq _02046158 + cmp r0, #2 + beq _02046148 + cmp r0, #3 + beq _02046158 + b _0204653C +_02046148: + bl sub_020465DC + mov r0, #8 + bl sub_020454E0 + b _0204653C +_02046158: + bl sub_020465DC + mov r0, #0x13 + bl sub_020454E0 + b _0204653C +_02046168: + ldrsb r0, [r2, #0x16] + bl GetSimpleMenuResult + cmp r0, #1 + ldrne r1, _020465D8 ; =_020AFED4 + ldrne r1, [r1] + strne r0, [r1, #0x10] + cmp r0, #1 + beq _020461AC + cmp r0, #2 + beq _0204619C + cmp r0, #3 + beq _020461AC + b _0204653C +_0204619C: + bl sub_020465DC + mov r0, #9 + bl sub_020454E0 + b _0204653C +_020461AC: + bl sub_020465DC + mov r0, #0 + bl sub_020454E0 + b _0204653C +_020461BC: + bl sub_02043468 + mov r4, r0 + bl sub_02043400 + cmp r0, #0 + bne _02046234 + mvn r0, #0 + cmp r4, r0 + bne _02046214 + bl sub_0204317C + ldr r0, _020465D8 ; =_020AFED4 + mvn r2, #1 + ldr r1, [r0] + mov r3, #2 + strb r2, [r1, #0x15] + ldr r1, [r0] + mov r2, #1 + str r3, [r1, #0xc] + ldr r1, [r0] + mov r0, #0xc + str r2, [r1, #8] + bl sub_020454E0 + b _0204653C +_02046214: + ldr r1, _020465D8 ; =_020AFED4 + mov r0, r4 + ldr r1, [r1] + str r4, [r1] + bl sub_0204323C + mov r0, #0xe + bl sub_020454E0 + b _0204653C +_02046234: + bl sub_02043434 + cmp r0, #0 + beq _0204653C + add r1, sp, #0 + mov r0, #0 + bl GetPressedButtons + ldrh r0, [sp] + tst r0, #8 + beq _020462F4 + mov r0, #0 + bl PlaySeVolumeWrapper + ldr r1, _020465D8 ; =_020AFED4 + mov r0, r4 + ldr r1, [r1] + str r4, [r1] + bl sub_0204323C + ldr r0, _020465D8 ; =_020AFED4 + ldr r0, [r0] + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010044 + ldr r2, _020465D8 ; =_020AFED4 + ldr r1, [r2] + add r1, r1, #0x300 + strh r0, [r1, #0x88] + ldr r0, [r2] + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02010060 + ldr r1, _020465D8 ; =_020AFED4 + ldr r1, [r1] + str r0, [r1, #0x38c] + bl sub_020465DC + bl sub_0204317C + ldr r0, _020465D8 ; =_020AFED4 + mvn r2, #1 + ldr r1, [r0] + mov r3, #2 + strb r2, [r1, #0x15] + ldr r1, [r0] + mov r2, #0xf + str r3, [r1, #0xc] + ldr r1, [r0] + mov r0, #0xc + str r2, [r1, #8] + bl sub_020454E0 +_020462F4: + bl CountNbOfItemsInStorage + mov r4, r0 + bl sub_0200FD48 + cmp r4, r0 + bge _0204653C + bl sub_02043398 + ldr r0, _020465D8 ; =_020AFED4 + mov r3, #0xa + ldr r1, [r0] + mov r2, #5 + str r3, [r1, #0xc] + ldr r1, [r0] + mov r0, #0xd + str r2, [r1, #8] + bl sub_020454E0 + b _0204653C +_02046334: + mvn r1, #1 + strb r1, [r2, #0x15] + ldr r3, [r0] + ldr r2, [r3, #0xc] + sub r1, r2, #1 + str r1, [r3, #0xc] + cmp r2, #0 + bne _0204653C + ldr r0, [r0] + ldr r0, [r0, #8] + bl sub_020454E0 + b _0204653C +_02046364: + ldr r1, [r2, #0xc] + sub r1, r1, #1 + str r1, [r2, #0xc] + ldr r0, [r0] + ldr r0, [r0, #0xc] + cmp r0, #1 + bgt _02046394 + bl sub_0204317C + ldr r0, _020465D8 ; =_020AFED4 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x15] +_02046394: + ldr r0, _020465D8 ; =_020AFED4 + ldr r1, [r0] + ldr r0, [r1, #0xc] + cmp r0, #0 + bgt _0204653C + ldr r0, [r1, #8] + bl sub_020454E0 + b _0204653C +_020463B4: + ldrsb r0, [r2, #0x16] + bl GetSimpleMenuResult + cmp r0, #6 + addls pc, pc, r0, lsl #2 + b _0204653C +_020463C8: ; jump table + b _0204653C ; case 0 + b _0204645C ; case 1 + b _0204653C ; case 2 + b _0204653C ; case 3 + b _020463E4 ; case 4 + b _02046420 ; case 5 + b _0204645C ; case 6 +_020463E4: + bl sub_020465DC + bl sub_0204317C + ldr r0, _020465D8 ; =_020AFED4 + mvn r2, #1 + ldr r1, [r0] + mov r3, #2 + strb r2, [r1, #0x15] + ldr r1, [r0] + mov r2, #0x10 + str r3, [r1, #0xc] + ldr r1, [r0] + mov r0, #0xc + str r2, [r1, #8] + bl sub_020454E0 + b _0204653C +_02046420: + bl sub_020465DC + bl sub_0204317C + ldr r0, _020465D8 ; =_020AFED4 + mvn r2, #1 + ldr r1, [r0] + mov r3, #2 + strb r2, [r1, #0x15] + ldr r1, [r0] + mov r2, #0xf + str r3, [r1, #0xc] + ldr r1, [r0] + mov r0, #0xc + str r2, [r1, #8] + bl sub_020454E0 + b _0204653C +_0204645C: + bl sub_020465DC + bl sub_020433C0 + ldr r0, _020465D8 ; =_020AFED4 + mov r1, #0xa + ldr r0, [r0] + str r1, [r0, #4] + b _0204653C +_02046478: + ldrsb r0, [r2, #0x17] + bl IsScrollBoxActive + cmp r0, #0 + bne _0204653C + ldr r0, _020465D8 ; =_020AFED4 + ldr r0, [r0] + ldrsb r0, [r0, #0x17] + bl CloseScrollBox + ldr r0, _020465D8 ; =_020AFED4 + mvn r2, #1 + ldr r1, [r0] + mov r0, #0xb + strb r2, [r1, #0x17] + bl sub_020454E0 + b _0204653C +_020464B4: + mov r2, #2 + b _02046540 +_020464BC: + mov r2, #4 + b _02046540 +_020464C4: + mov r2, #3 + b _02046540 +_020464CC: + ldrsb r0, [r2, #0x14] + bl IsDialogueBoxActive + cmp r0, #0 + bne _0204653C + ldr r0, _020465D8 ; =_020AFED4 + ldr r0, [r0] + ldrsb r0, [r0, #0x14] + bl ShowDialogueBox + ldr r0, _020465D8 ; =_020AFED4 + mov r2, #0x14 + ldr r1, [r0] + str r2, [r1, #4] + ldr r0, [r0] + ldrsb r0, [r0, #0x14] + bl sub_0202F2C4 + b _0204653C +_0204650C: + ldrsb r0, [r2, #0x14] + bl IsDialogueBoxActive + cmp r0, #0 + bne _0204653C + ldr r0, _020465D8 ; =_020AFED4 + ldr r0, [r0] + ldrsb r0, [r0, #0x14] + bl ShowDialogueBox + ldr r0, _020465D8 ; =_020AFED4 + ldr r0, [r0] + ldr r0, [r0, #8] + bl sub_020454E0 +_0204653C: + mov r2, #1 +_02046540: + ldr r0, _020465D8 ; =_020AFED4 + ldr r1, [r0] + str r2, [r1, #0x6c] + ldr r2, [r0] + ldr r1, [r2, #0x6c] + cmp r1, #1 + beq _020465CC + mov r1, #2 + str r1, [r2, #0x18] + ldr r0, [r0] + sub r1, r1, #4 + ldrsb r0, [r0, #0x14] + cmp r0, r1 + beq _020465CC + bl sub_0202836C + ldr r0, _020465D8 ; =_020AFED4 + ldr r0, [r0] + ldrsb r0, [r0, #0x14] + bl sub_0202F2C4 + b _020465CC +_02046590: + mov r1, #3 + str r1, [r2, #0x18] + ldr r0, [r0] + sub r1, r1, #5 + ldrsb r0, [r0, #0x14] + cmp r0, r1 + beq _020465CC + bl CloseDialogueBox + ldr r0, _020465D8 ; =_020AFED4 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x14] + b _020465CC +_020465C4: + ldr r0, [r2, #0x6c] + b _020465D0 +_020465CC: + mov r0, #1 +_020465D0: + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_020465D8: .word _020AFED4 + arm_func_end sub_02046028 + + arm_func_start sub_020465DC +sub_020465DC: ; 0x020465DC + stmdb sp!, {r3, lr} + ldr r0, _02046620 ; =_020AFED4 + mvn r1, #1 + ldr r0, [r0] + ldrsb r0, [r0, #0x16] + cmp r0, r1 + ldmeqia sp!, {r3, pc} + bl sub_0202836C + ldr r0, _02046620 ; =_020AFED4 + ldr r0, [r0] + ldrsb r0, [r0, #0x16] + bl CloseSimpleMenu + ldr r0, _02046620 ; =_020AFED4 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x16] + ldmia sp!, {r3, pc} + .align 2, 0 +_02046620: .word _020AFED4 + arm_func_end sub_020465DC + + arm_func_start sub_02046624 +sub_02046624: ; 0x02046624 + stmdb sp!, {r3, lr} + ldr r1, _02046658 ; =_020AFED4 + mvn r0, #1 + ldr r1, [r1] + ldrsb r1, [r1, #0x14] + cmp r1, r0 + ldmneia sp!, {r3, pc} + mov r0, #0 + bl CreateDialogueBox + ldr r1, _02046658 ; =_020AFED4 + ldr r1, [r1] + strb r0, [r1, #0x14] + ldmia sp!, {r3, pc} + .align 2, 0 +_02046658: .word _020AFED4 + arm_func_end sub_02046624 + + arm_func_start sub_0204665C +sub_0204665C: ; 0x0204665C + stmdb sp!, {r3, lr} + ldr r0, _02046694 ; =_020AFED8 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + bl CloseAdvancedTextBox + ldr r0, _02046694 ; =_020AFED8 + ldr r0, [r0] + bl MemFree + ldr r0, _02046694 ; =_020AFED8 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02046694: .word _020AFED8 + arm_func_end sub_0204665C + + arm_func_start sub_02046698 +sub_02046698: ; 0x02046698 + stmdb sp!, {r4, lr} + sub sp, sp, #0xa0 + mov r4, r0 + mov r0, #0xec + mov r1, #0 + bl MemAlloc + ldr r2, _0204672C ; =_020AFED8 + mov r1, #0xec + str r0, [r2] + bl MemZero + ldr r0, _0204672C ; =_020AFED8 + mov ip, #0xe + ldr r0, [r0] + add lr, r0, #4 +_020466D0: + ldmia r4!, {r0, r1, r2, r3} + stmia lr!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _020466D0 + ldmia r4, {r0, r1} + stmia lr, {r0, r1} + ldr r1, _02046730 ; =0x00000A43 + mov r0, #0x10 + strh r1, [sp, #0x10] + str r0, [sp, #0x14] + mov ip, #0 + str ip, [sp] + ldr r0, _02046734 ; =_0209CC80 + ldr r1, _02046738 ; =0x00001815 + ldr r3, _0204673C ; =sub_02046798 + add r2, sp, #8 + str ip, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _0204672C ; =_020AFED8 + ldr r1, [r1] + strb r0, [r1] + add sp, sp, #0xa0 + ldmia sp!, {r4, pc} + .align 2, 0 +_0204672C: .word _020AFED8 +#ifdef JAPAN +_02046730: .word 0x00000B8A +#else +_02046730: .word 0x00000A43 +#endif +_02046734: .word _0209CC80 +_02046738: .word 0x00001815 +_0204673C: .word sub_02046798 + arm_func_end sub_02046698 + + arm_func_start sub_02046740 +sub_02046740: ; 0x02046740 + stmdb sp!, {r3, lr} + ldr r1, _02046774 ; =_020AFED8 + ldr r0, _02046778 ; =0x00000279 + ldr r1, [r1] + ldrsh r1, [r1, #0x5e] + cmp r1, r0 + blt _02046768 + mov r0, #0x14 + bl PlayBgmByIdVeneer + ldmia sp!, {r3, pc} +_02046768: + mov r0, #0x13 + bl PlayBgmByIdVeneer + ldmia sp!, {r3, pc} + .align 2, 0 +_02046774: .word _020AFED8 +_02046778: .word 0x00000279 + arm_func_end sub_02046740 + + arm_func_start sub_0204677C +sub_0204677C: ; 0x0204677C + ldr r0, _02046790 ; =_020AFED8 + ldr ip, _02046794 ; =IsAdvancedTextBoxActive + ldr r0, [r0] + ldrsb r0, [r0] + bx ip + .align 2, 0 +_02046790: .word _020AFED8 +_02046794: .word IsAdvancedTextBoxActive + arm_func_end sub_0204677C + + arm_func_start sub_02046798 +sub_02046798: ; 0x02046798 + ldr r1, _020467AC ; =_020AFED8 + ldr ip, _020467B0 ; =sub_0200C5DC + ldr r1, [r1] + add r1, r1, #4 + bx ip + .align 2, 0 +_020467AC: .word _020AFED8 +_020467B0: .word sub_0200C5DC + arm_func_end sub_02046798 + + arm_func_start sub_020467B4 +sub_020467B4: ; 0x020467B4 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #0x24 + mov r4, r0 + bl sub_0204AE60 + cmp r0, #0 + moveq r0, #0 + beq _020467E8 + add r0, sp, #0 + bl GetReleasedStylus + add r0, sp, #0 + mov r2, r4 + mov r1, #2 + bl sub_02006C8C +_020467E8: + add sp, sp, #0x24 + ldmia sp!, {r3, r4, pc} + arm_func_end sub_020467B4 + + arm_func_start sub_020467F0 +sub_020467F0: ; 0x020467F0 + ldr ip, _020467FC ; =sub_020467B4 + ldr r0, _02046800 ; =_0209CC90 + bx ip + .align 2, 0 +_020467FC: .word sub_020467B4 +_02046800: .word _0209CC90 + arm_func_end sub_020467F0 + + arm_func_start sub_02046804 +sub_02046804: ; 0x02046804 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, _02046824 ; =_0209CCA0 + bl sub_02034974 + cmp r0, #0 + ldrne r0, _02046828 ; =_022AAE64 + strneh r4, [r0] + ldmia sp!, {r4, pc} + .align 2, 0 +_02046824: .word _0209CCA0 +_02046828: .word _022AAE64 + arm_func_end sub_02046804 + + arm_func_start sub_0204682C +sub_0204682C: ; 0x0204682C + stmdb sp!, {r3, lr} + mov r0, #0xa8 + mov r1, #8 + bl MemAlloc + ldr r1, _02046890 ; =_020AFEDC + str r0, [r1] + add r0, r0, #0x10 + bl sub_02034A38 + ldr r2, _02046890 ; =_020AFEDC + ldr r1, _02046894 ; =_022AAE64 + ldr r3, [r2] + str r0, [r3, #0xc] + ldrh r3, [r1] + ldr r1, [r2] + mov r0, #0 + strh r3, [r1, #8] + bl CreateDialogueBox + ldr r1, _02046890 ; =_020AFEDC + mov r2, #0 + ldr r3, [r1] + strb r0, [r3] + ldr r1, [r1] + mov r0, #1 + str r2, [r1, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_02046890: .word _020AFEDC +_02046894: .word _022AAE64 + arm_func_end sub_0204682C + + arm_func_start sub_02046898 +sub_02046898: ; 0x02046898 + stmdb sp!, {r3, lr} + ldr r0, _020468D0 ; =_020AFEDC + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + bl CloseDialogueBox + ldr r0, _020468D0 ; =_020AFEDC + ldr r0, [r0] + bl MemFree + ldr r0, _020468D0 ; =_020AFEDC + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_020468D0: .word _020AFEDC + arm_func_end sub_02046898 + + arm_func_start sub_020468D4 +sub_020468D4: ; 0x020468D4 + stmdb sp!, {r3, lr} + ldr r0, _020469B4 ; =_020AFEDC + ldr r2, [r0] + ldr r1, [r2, #4] + cmp r1, #3 + addls pc, pc, r1, lsl #2 + b _020469AC +_020468F0: ; jump table + b _02046900 ; case 0 + b _02046928 ; case 1 + b _0204695C ; case 2 + b _0204697C ; case 3 +_02046900: + ldrsb r0, [r2] + ldrh r2, [r2, #8] + ldr r1, _020469B8 ; =0x00000618 + mov r3, #0 + bl ShowStringIdInDialogueBox + ldr r0, _020469B4 ; =_020AFEDC + mov r1, #1 + ldr r0, [r0] + str r1, [r0, #4] + b _020469AC +_02046928: + ldrsb r0, [r2] + bl IsDialogueBoxActive + cmp r0, #0 + bne _020469AC + ldr r0, _020469B4 ; =_020AFEDC + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202F334 + ldr r0, _020469B4 ; =_020AFEDC + mov r1, #2 + ldr r0, [r0] + str r1, [r0, #4] + b _020469AC +_0204695C: + ldrsb r0, [r2] + bl IsDialogueBoxActive + cmp r0, #0 + ldreq r0, _020469B4 ; =_020AFEDC + moveq r1, #3 + ldreq r0, [r0] + streq r1, [r0, #4] + b _020469AC +_0204697C: + mov r1, #4 + str r1, [r2, #4] + ldr r1, [r0] + ldr r0, [r1, #0xc] + tst r0, #0x100 + beq _020469A4 + ldr r0, [r1, #0x98] + ldr r2, [r1, #0x94] + mov r1, #0 + blx r2 +_020469A4: + mov r0, #4 + ldmia sp!, {r3, pc} +_020469AC: + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_020469B4: .word _020AFEDC +_020469B8: .word 0x00000618 + arm_func_end sub_020468D4 + + arm_func_start sub_020469BC +sub_020469BC: ; 0x020469BC + stmdb sp!, {r3, lr} + mov r0, #0x2c + mov r1, #8 + bl MemAlloc + ldr r2, _020469E4 ; =_020AFEE0 + mov r1, #0x2c + str r0, [r2] + bl MemZero + bl sub_020471AC + ldmia sp!, {r3, pc} + .align 2, 0 +_020469E4: .word _020AFEE0 + arm_func_end sub_020469BC + + arm_func_start sub_020469E8 +sub_020469E8: ; 0x020469E8 + stmdb sp!, {r3, lr} + ldr r0, _02046A1C ; =_020AFEE0 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl sub_020471E8 + ldr r0, _02046A1C ; =_020AFEE0 + ldr r0, [r0] + bl MemFree + ldr r0, _02046A1C ; =_020AFEE0 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02046A1C: .word _020AFEE0 + arm_func_end sub_020469E8 + + arm_func_start sub_02046A20 +sub_02046A20: ; 0x02046A20 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + ldr r4, _02046A98 ; =_020AFEE0 + mov r6, r1 + ldr r4, [r4] + mov r7, r0 + mov r0, r4 + mov r1, #0x2c + mov r5, r2 + mov r8, r3 + bl MemZero + ldr r0, [sp, #0x28] + str r8, [sp] + ldrh r1, [sp, #0x2c] + str r0, [sp, #4] + ldr r0, [sp, #0x30] + str r1, [sp, #8] + mov r1, r7 + mov r2, r6 + mov r3, r5 + str r0, [sp, #0xc] + add r0, r4, #0x10 + bl sub_02046D50 + mov r0, #1 + str r0, [r4, #0x14] + str r5, [r4, #0x24] + mov r0, #0 + str r0, [r4, #0x28] + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02046A98: .word _020AFEE0 + arm_func_end sub_02046A20 + + arm_func_start sub_02046A9C +sub_02046A9C: ; 0x02046A9C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xa4 + mov r7, r0 + mov r6, r1 + add r0, sp, #0xc + mov r1, #0x98 + mov r5, r2 + mov r4, r3 + bl MemZero + ldrsb r0, [sp, #0xb8] + add r3, sp, #0xc + mov r1, r6 + cmp r0, #0 + addge r0, r5, r0, lsl #3 + ldrge r0, [r0, #4] + mov ip, #0 + movlt r0, #0 + str r0, [sp, #0xc] + str r5, [sp] + str r4, [sp, #4] + mov r0, r7 + mov r2, #0x33 + str ip, [sp, #8] + bl sub_02046A20 + add sp, sp, #0xa4 + ldmia sp!, {r4, r5, r6, r7, pc} + arm_func_end sub_02046A9C + + arm_func_start sub_02046B04 +sub_02046B04: ; 0x02046B04 + stmdb sp!, {r3, r4, r5, lr} + ldr r0, _02046B9C ; =_020AFEE0 + ldr r5, [r0] + ldr r0, [r5, #0x14] + cmp r0, #0 + beq _02046B94 + cmp r0, #1 + beq _02046B30 + cmp r0, #9 + beq _02046B64 + b _02046B94 +_02046B30: + ldr r0, [r5, #0x10] + bl sub_02046F40 + ldr r0, [r5, #0x10] + bl sub_02047030 + mov r4, r0 + ldr r0, [r5, #0x10] + bl sub_02047038 + mvn r1, #0 + str r0, [r5, #0x28] + cmp r4, r1 + movne r0, #9 + strne r0, [r5, #0x14] + b _02046B94 +_02046B64: + ldr r0, [r5, #0x10] + bl sub_02047030 + str r0, [r5, #0x20] + ldr r0, [r5, #0x24] + tst r0, #0x400000 + bne _02046B8C + add r0, r5, #0x10 + bl sub_02047040 + mov r0, #0 + str r0, [r5, #0x14] +_02046B8C: + ldr r0, [r5, #0x20] + ldmia sp!, {r3, r4, r5, pc} +_02046B94: + mvn r0, #0 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02046B9C: .word _020AFEE0 + arm_func_end sub_02046B04 + + arm_func_start sub_02046BA0 +sub_02046BA0: ; 0x02046BA0 + ldr r0, _02046BB0 ; =_020AFEE0 + ldr r0, [r0] + ldr r0, [r0, #0x28] + bx lr + .align 2, 0 +_02046BB0: .word _020AFEE0 + arm_func_end sub_02046BA0 + + arm_func_start sub_02046BB4 +sub_02046BB4: ; 0x02046BB4 + stmdb sp!, {r4, lr} + ldr r0, _02046BE4 ; =_020AFEE0 + ldr r4, [r0] + add r0, r4, #0x10 + bl sub_02047040 + mov r1, #0 + ldr r0, _02046BE4 ; =_020AFEE0 + str r1, [r4, #0x14] + ldr r0, [r0] + sub r1, r1, #2 + str r1, [r0, #0x20] + ldmia sp!, {r4, pc} + .align 2, 0 +_02046BE4: .word _020AFEE0 + arm_func_end sub_02046BB4 + + arm_func_start sub_02046BE8 +sub_02046BE8: ; 0x02046BE8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r3, _02046C2C ; =_020AFEE0 + mov r6, r1 + ldr r4, [r3] + mov r7, r0 + mov r5, r2 + mov r0, r4 + mov r1, #0x2c + bl MemZero + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl sub_020472A4 + mov r0, #1 + str r0, [r4, #0x14] + strh r7, [r4, #0x18] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02046C2C: .word _020AFEE0 + arm_func_end sub_02046BE8 + + arm_func_start sub_02046C30 +sub_02046C30: ; 0x02046C30 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r3, _02046C74 ; =_020AFEE0 + mov r6, r1 + ldr r4, [r3] + mov r7, r0 + mov r5, r2 + mov r0, r4 + mov r1, #0x2c + bl MemZero + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl sub_02047358 + mov r0, #1 + str r0, [r4, #0x14] + strh r7, [r4, #0x18] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02046C74: .word _020AFEE0 + arm_func_end sub_02046C30 + + arm_func_start sub_02046C78 +sub_02046C78: ; 0x02046C78 + stmdb sp!, {r4, lr} + ldr r0, _02046D1C ; =_020AFEE0 + ldr r4, [r0] + ldr r0, [r4, #0x14] + cmp r0, #9 + bgt _02046CB4 + bge _02046CF0 + cmp r0, #1 + bgt _02046D14 + cmp r0, #0 + blt _02046D14 + beq _02046D14 + cmp r0, #1 + beq _02046CC0 + b _02046D14 +_02046CB4: + cmp r0, #0xa + beq _02046D00 + b _02046D14 +_02046CC0: + bl sub_020473FC + cmp r0, #2 + bne _02046D14 + ldrh r0, [r4, #0x18] + tst r0, #0x400 + movne r0, #0xa + strne r0, [r4, #0x14] + movne r0, #0x3c + strne r0, [r4, #0x1c] + moveq r0, #9 + streq r0, [r4, #0x14] + b _02046D14 +_02046CF0: + mov r0, #0 + str r0, [r4, #0x14] + mov r0, #1 + ldmia sp!, {r4, pc} +_02046D00: + ldr r0, [r4, #0x1c] + subs r0, r0, #1 + str r0, [r4, #0x1c] + movmi r0, #9 + strmi r0, [r4, #0x14] +_02046D14: + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_02046D1C: .word _020AFEE0 + arm_func_end sub_02046C78 + + arm_func_start sub_02046D20 +sub_02046D20: ; 0x02046D20 + ldr ip, _02046D28 ; =sub_020473A4 + bx ip + .align 2, 0 +_02046D28: .word sub_020473A4 + arm_func_end sub_02046D20 + + arm_func_start sub_02046D2C +sub_02046D2C: ; 0x02046D2C + ldr r1, _02046D40 ; =_020AFEE0 + ldr r2, [r1] + str r0, [r1] + mov r0, r2 + bx lr + .align 2, 0 +_02046D40: .word _020AFEE0 + arm_func_end sub_02046D2C + + arm_func_start sub_02046D44 +sub_02046D44: ; 0x02046D44 + ldr ip, _02046D4C ; =sub_020474B8 + bx ip + .align 2, 0 +_02046D4C: .word sub_020474B8 + arm_func_end sub_02046D44 + + arm_func_start sub_02046D50 +sub_02046D50: ; 0x02046D50 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x410 + mov r4, r0 + mov r5, r1 + mov r0, #0xcc + mov r1, #8 + mov sb, r2 + mov r8, r3 + ldr r7, [sp, #0x434] + bl MemAlloc + mov r1, #0xcc + mov r6, r0 + str r0, [r4] + bl MemZero + cmp r5, #0 + bne _02046E48 + mov r5, #0 + sub r0, r5, #1 + str r5, [sp] + strb r0, [sp, #9] + cmp r7, #0 + beq _02046E54 + mov r4, r5 + add sl, sp, #0x10 + b _02046DE0 +_02046DB4: + mov r0, r4, lsl #3 + ldrh r1, [r7, r0] + cmp r1, #0 + beq _02046DE8 + mov r0, sl + bl GetStringFromFileVeneer + mov r0, sl + bl sub_020265A8 + cmp r0, r5 + movgt r5, r0 + add r4, r4, #1 +_02046DE0: + cmp r4, #0x64 + blt _02046DB4 +_02046DE8: + mov r0, #0xe + mul r1, r4, r0 + add r3, r5, #7 + mov r0, r3, asr #2 + add r2, r1, #7 + add r0, r3, r0, lsr #29 + mov r0, r0, asr #3 + add r3, r0, #2 + mov r1, r2, asr #2 + add r0, r2, r1, lsr #29 + mov r5, r0, asr #3 + rsb r4, r3, #0x1e + rsb r2, r5, #0xf + mov r1, #0 + strb r4, [sp, #4] + add r0, sp, #0 + strb r5, [sp, #7] + add r4, r6, #4 + strb r2, [sp, #5] + strb r3, [sp, #6] + str r1, [sp, #0xc] + ldmia r0, {r0, r1, r2, r3} + stmia r4, {r0, r1, r2, r3} + b _02046E54 +_02046E48: + add r4, r6, #4 + ldmia r5, {r0, r1, r2, r3} + stmia r4, {r0, r1, r2, r3} +_02046E54: + add r0, sp, #0x420 + ldrh r1, [r0, #0x18] + ldr ip, [sp, #0x430] + ldr r0, [sp, #0x43c] + strh r1, [r6, #0x20] + strh sb, [r6, #0x22] + str r0, [r6, #0x24] + str r7, [r6, #0x1c] + mvn r0, #0 + str r0, [r6, #0x14] + str r8, [r6, #0x28] + mov r0, #0 + str r0, [r6, #0x18] + cmp ip, #0 + streqb r0, [r6, #0xc4] + beq _02046EBC + add r5, r6, #0x2c + mov r4, #9 +_02046E9C: + ldmia ip!, {r0, r1, r2, r3} + stmia r5!, {r0, r1, r2, r3} + subs r4, r4, #1 + bne _02046E9C + ldmia ip, {r0, r1} + stmia r5, {r0, r1} + mov r0, #1 + strb r0, [r6, #0xc4] +_02046EBC: + mvn r0, #1 + strb r0, [r6] + ldrh r0, [r6, #0x20] + cmp r0, #0 + moveq r0, #0 + beq _02046EF8 + bl sub_020473FC + cmp r0, #1 + bne _02046EE4 + bl sub_02047220 +_02046EE4: + ldrh r0, [r6, #0x22] + ldrh r1, [r6, #0x20] + ldr r2, [r6, #0x24] + bl sub_02047244 + mov r0, #1 +_02046EF8: + cmp r0, #0 + bne _02046F2C + ldrb r0, [r6, #0xc4] + ldr r1, [r6, #0x28] + ldr r3, [r6, #0x1c] + cmp r0, #0 + addne r2, r6, #0x2c + moveq r2, #0 + add r0, r6, #4 + bl CreateParentMenuFromStringIds + strb r0, [r6] + mov r0, #1 + b _02046F30 +_02046F2C: + mov r0, #6 +_02046F30: + str r0, [r6, #0xc8] + mov r0, #1 + add sp, sp, #0x410 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end sub_02046D50 + + arm_func_start sub_02046F40 +sub_02046F40: ; 0x02046F40 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + ldr r0, [r4, #0xc8] + cmp r0, #9 + addls pc, pc, r0, lsl #2 + ldmia sp!, {r3, r4, r5, pc} +_02046F58: ; jump table + ldmia sp!, {r3, r4, r5, pc} ; case 0 + b _02046FBC ; case 1 + ldmia sp!, {r3, r4, r5, pc} ; case 2 + ldmia sp!, {r3, r4, r5, pc} ; case 3 + ldmia sp!, {r3, r4, r5, pc} ; case 4 + ldmia sp!, {r3, r4, r5, pc} ; case 5 + b _02046F80 ; case 6 + ldmia sp!, {r3, r4, r5, pc} ; case 7 + ldmia sp!, {r3, r4, r5, pc} ; case 8 + b _02047024 ; case 9 +_02046F80: + bl sub_020473FC + cmp r0, #2 + ldmneia sp!, {r3, r4, r5, pc} + ldrb r0, [r4, #0xc4] + ldr r1, [r4, #0x28] + ldr r3, [r4, #0x1c] + cmp r0, #0 + addne r2, r4, #0x2c + moveq r2, #0 + add r0, r4, #4 + bl CreateParentMenuFromStringIds + strb r0, [r4] + mov r0, #1 + str r0, [r4, #0xc8] + ldmia sp!, {r3, r4, r5, pc} +_02046FBC: + ldrsb r0, [r4] + bl sub_020282F4 + mov r5, r0 + ldrsb r0, [r4] + bl sub_0202AB80 + str r0, [r4, #0x18] + ldrsb r0, [r4] + bl IsParentMenuActive + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + mvn r1, #3 + cmp r5, r1 + bne _02047008 + ldrsb r0, [r4] + bl sub_0202ABB0 + str r0, [r4, #0x14] + mov r0, #9 + str r0, [r4, #0xc8] + ldmia sp!, {r3, r4, r5, pc} +_02047008: + sub r0, r1, #1 + cmp r5, r0 + addeq r0, r1, #2 + streq r0, [r4, #0x14] + moveq r0, #9 + streq r0, [r4, #0xc8] + ldmia sp!, {r3, r4, r5, pc} +_02047024: + mov r0, #0xa + str r0, [r4, #0xc8] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02046F40 + + arm_func_start sub_02047030 +sub_02047030: ; 0x02047030 + ldr r0, [r0, #0x14] + bx lr + arm_func_end sub_02047030 + + arm_func_start sub_02047038 +sub_02047038: ; 0x02047038 + ldr r0, [r0, #0x18] + bx lr + arm_func_end sub_02047038 + + arm_func_start sub_02047040 +sub_02047040: ; 0x02047040 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r4, [r5] + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldrsb r0, [r4] + mvn r1, #1 + cmp r0, r1 + beq _02047068 + bl CloseParentMenu +_02047068: + mov r0, r4 + bl MemFree + mov r0, #0 + str r0, [r5] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02047040 + + arm_func_start sub_0204707C +sub_0204707C: ; 0x0204707C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r1 + mov r0, #0xc + mov r1, #8 + mov r5, r2 + bl MemAlloc + mov r1, #0xc + mov r4, r0 + str r0, [r7] + bl MemZero + mov r0, r6 + mov r1, r5 + bl CreateTextBox + strb r0, [r4] + mov r0, #3 + str r0, [r4, #8] + sub r0, r0, #4 + str r0, [r4, #4] + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end sub_0204707C + + arm_func_start sub_020470D0 +sub_020470D0: ; 0x020470D0 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #8] + cmp r0, #0 + beq _020470FC + cmp r0, #3 + beq _02047108 + cmp r0, #4 + moveq r0, #8 + streq r0, [r4, #8] + ldmia sp!, {r4, pc} +_020470FC: + mov r0, #3 + str r0, [r4, #8] + ldmia sp!, {r4, pc} +_02047108: + ldrsb r0, [r4] + bl sub_020282F4 + mvn r2, #3 + cmp r0, r2 + addeq r0, r2, #1 + streq r0, [r4, #4] + moveq r0, #4 + streq r0, [r4, #8] + ldmeqia sp!, {r4, pc} + sub r1, r2, #1 + cmp r0, r1 + addeq r0, r2, #2 + streq r0, [r4, #4] + moveq r0, #4 + streq r0, [r4, #8] + ldmia sp!, {r4, pc} + arm_func_end sub_020470D0 + + arm_func_start sub_02047148 +sub_02047148: ; 0x02047148 + ldr r0, [r0, #4] + bx lr + arm_func_end sub_02047148 + + arm_func_start sub_02047150 +sub_02047150: ; 0x02047150 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r4, [r5] + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldrsb r0, [r4] + bl sub_0202812C + ldrsb r0, [r4] + bl CloseTextBox2 + mov r0, r4 + bl MemFree + mov r0, #0 + str r0, [r5] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02047150 + + arm_func_start sub_02047188 +sub_02047188: ; 0x02047188 + stmdb sp!, {r4, lr} + ldr r4, [r0] + cmp r4, #0 + ldmeqia sp!, {r4, pc} + ldrsb r0, [r4] + bl sub_02027B1C + ldrsb r0, [r4] + bl sub_0202F9B8 + ldmia sp!, {r4, pc} + arm_func_end sub_02047188 + + arm_func_start sub_020471AC +sub_020471AC: ; 0x020471AC + stmdb sp!, {r3, lr} + mov r0, #0x70 + mov r1, #8 + bl MemAlloc + ldr r2, _020471E4 ; =_020AFEE4 + mov r1, #0x70 + str r0, [r2] + bl MemZero + ldr r0, _020471E4 ; =_020AFEE4 + mvn r2, #1 + ldr r1, [r0] + mov r0, #1 + strb r2, [r1] + ldmia sp!, {r3, pc} + .align 2, 0 +_020471E4: .word _020AFEE4 + arm_func_end sub_020471AC + + arm_func_start sub_020471E8 +sub_020471E8: ; 0x020471E8 + stmdb sp!, {r3, lr} + ldr r0, _0204721C ; =_020AFEE4 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl sub_020473A4 + ldr r0, _0204721C ; =_020AFEE4 + ldr r0, [r0] + bl MemFree + ldr r0, _0204721C ; =_020AFEE4 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_0204721C: .word _020AFEE4 + arm_func_end sub_020471E8 + + arm_func_start sub_02047220 +sub_02047220: ; 0x02047220 + stmdb sp!, {r3, lr} + mov r0, #0 + bl CreateDialogueBox + ldr r1, _02047240 ; =_020AFEE4 + ldr r1, [r1] + strb r0, [r1] + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_02047240: .word _020AFEE4 + arm_func_end sub_02047220 + + arm_func_start sub_02047244 +sub_02047244: ; 0x02047244 + stmdb sp!, {r4, lr} + ldr r3, _020472A0 ; =_020AFEE4 + mov r4, r2 + ldr r2, [r3] + strh r1, [r2, #0x14] + ldr r1, [r3] + strh r0, [r1, #0x68] + ldr r0, [r3] + ldrsb r0, [r0] + bl sub_020288DC + ldr r0, _020472A0 ; =_020AFEE4 + ldr r0, [r0] + ldrsb r0, [r0] + bl ShowDialogueBox + ldr r0, _020472A0 ; =_020AFEE4 + mov r3, r4 + ldr r2, [r0] + ldrsb r0, [r2] + ldrh r1, [r2, #0x68] + ldrh r2, [r2, #0x14] + bl ShowStringIdInDialogueBox + mov r0, #1 + ldmia sp!, {r4, pc} + .align 2, 0 +_020472A0: .word _020AFEE4 + arm_func_end sub_02047244 + + arm_func_start sub_020472A4 +sub_020472A4: ; 0x020472A4 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl sub_020473FC + cmp r0, #1 + bne _020472D4 + mov r0, #0 + bl CreateDialogueBox + ldr r1, _020472EC ; =_020AFEE4 + ldr r1, [r1] + strb r0, [r1] +_020472D4: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl sub_02047244 + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_020472EC: .word _020AFEE4 + arm_func_end sub_020472A4 + + arm_func_start sub_020472F0 +sub_020472F0: ; 0x020472F0 + stmdb sp!, {r3, r4, r5, lr} + ldr r3, _02047354 ; =_020AFEE4 + mov ip, #0 + ldr r4, [r3] + mov r5, r1 + strh ip, [r4, #0x14] + ldr r1, [r3] + mov r4, r2 + strh r0, [r1, #0x68] + ldr r0, [r3] + ldrsb r0, [r0] + bl sub_020288DC + ldr r0, _02047354 ; =_020AFEE4 + ldr r0, [r0] + ldrsb r0, [r0] + bl ShowDialogueBox + ldr r0, _02047354 ; =_020AFEE4 + mov r2, r5 + ldr r1, [r0] + mov r3, r4 + ldrsb r0, [r1] + ldrh r1, [r1, #0x68] + bl ShowStringInDialogueBox + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02047354: .word _020AFEE4 + arm_func_end sub_020472F0 + + arm_func_start sub_02047358 +sub_02047358: ; 0x02047358 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl sub_020473FC + cmp r0, #1 + bne _02047388 + mov r0, #0 + bl CreateDialogueBox + ldr r1, _020473A0 ; =_020AFEE4 + ldr r1, [r1] + strb r0, [r1] +_02047388: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl sub_020472F0 + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_020473A0: .word _020AFEE4 + arm_func_end sub_02047358 + + arm_func_start sub_020473A4 +sub_020473A4: ; 0x020473A4 + stmdb sp!, {r3, lr} + ldr r0, _020473F8 ; =_020AFEE4 + mvn r1, #1 + ldr r0, [r0] + ldrsb r0, [r0] + cmp r0, r1 + ldmeqia sp!, {r3, pc} + bl sub_0202836C + ldr r0, _020473F8 ; =_020AFEE4 + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202F2C4 + ldr r0, _020473F8 ; =_020AFEE4 + ldr r0, [r0] + ldrsb r0, [r0] + bl CloseDialogueBox + ldr r0, _020473F8 ; =_020AFEE4 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_020473F8: .word _020AFEE4 + arm_func_end sub_020473A4 + + arm_func_start sub_020473FC +sub_020473FC: ; 0x020473FC + stmdb sp!, {r4, lr} + ldr r0, _0204749C ; =_020AFEE4 + mov r4, #0 + ldr r0, [r0] + sub r1, r4, #2 + ldrsb r0, [r0] + cmp r0, r1 + moveq r0, #1 + ldmeqia sp!, {r4, pc} + bl IsDialogueBoxActive + cmp r0, #0 + movne r0, #4 + bne _02047440 + ldr r0, _0204749C ; =_020AFEE4 + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202F16C +_02047440: + cmp r0, #0xa + addls pc, pc, r0, lsl #2 + b _02047494 +_0204744C: ; jump table + b _02047494 ; case 0 + b _02047490 ; case 1 + b _02047494 ; case 2 + b _02047494 ; case 3 + b _02047488 ; case 4 + b _02047494 ; case 5 + b _02047494 ; case 6 + b _02047494 ; case 7 + b _02047478 ; case 8 + b _02047478 ; case 9 + b _02047480 ; case 10 +_02047478: + mov r4, #4 + b _02047494 +_02047480: + mov r4, #5 + b _02047494 +_02047488: + mov r4, #3 + b _02047494 +_02047490: + mov r4, #2 +_02047494: + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_0204749C: .word _020AFEE4 + arm_func_end sub_020473FC + + arm_func_start sub_020474A0 +sub_020474A0: ; 0x020474A0 + ldr r1, _020474B4 ; =_020AFEE4 + ldr r2, [r1] + str r0, [r1] + mov r0, r2 + bx lr + .align 2, 0 +_020474B4: .word _020AFEE4 + arm_func_end sub_020474A0 + + arm_func_start sub_020474B8 +sub_020474B8: ; 0x020474B8 + ldr r2, _020474D8 ; =_020AFEE4 + mov r3, r0 + ldr r0, [r2] + ldr ip, _020474DC ; =ReadStringFromDialogueBox + mov r2, r1 + ldrsb r0, [r0] + mov r1, r3 + bx ip + .align 2, 0 +_020474D8: .word _020AFEE4 +_020474DC: .word ReadStringFromDialogueBox + arm_func_end sub_020474B8 + + arm_func_start sub_020474E0 +sub_020474E0: ; 0x020474E0 + stmdb sp!, {r3, lr} + ldr r0, _02047574 ; =_022AAE68 + ldr r2, [r0] + cmp r2, #0 + beq _0204756C + ldr r1, [r2, #0x10] + cmp r1, #2 + bgt _02047520 + cmp r1, #0 + blt _0204756C + beq _02047528 + cmp r1, #1 + beq _02047534 + cmp r1, #2 + beq _02047554 + b _0204756C +_02047520: + cmp r1, #0xff + b _0204756C +_02047528: + add r0, r1, #1 + str r0, [r2, #0x10] + b _0204756C +_02047534: + mov r0, #0 + bl sub_02047C40 + cmp r0, #0 + ldrne r0, _02047574 ; =_022AAE68 + movne r1, #2 + ldrne r0, [r0] + strne r1, [r0, #0x10] + b _0204756C +_02047554: + mov r1, #1 + str r1, [r0, #4] + mov r0, #0xff + str r0, [r2, #0x10] + mov r0, #4 + ldmia sp!, {r3, pc} +_0204756C: + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_02047574: .word _022AAE68 + arm_func_end sub_020474E0 + + arm_func_start sub_02047578 +sub_02047578: ; 0x02047578 + stmdb sp!, {r3, lr} + ldr r0, _020475B0 ; =_022AAE68 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + mov r0, #0 + bl sub_02047EF4 + ldr r0, _020475B0 ; =_022AAE68 + ldr r0, [r0] + bl MemFree + ldr r0, _020475B0 ; =_022AAE68 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_020475B0: .word _022AAE68 + arm_func_end sub_02047578 + + arm_func_start sub_020475B4 +sub_020475B4: ; 0x020475B4 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r6, r0 + ldr r3, _02047658 ; =_022AAE68 + mov ip, #0 + ldr r0, _0204765C ; =_0209CCB0 + mov r5, r1 + mov r4, r2 + str ip, [r3, #4] + bl sub_020348E4 + cmp r0, #0 + beq _02047650 + mov r0, #0x14 + mov r1, #8 + bl MemAlloc + ldr r2, _02047658 ; =_022AAE68 + mov r1, #0x14 + str r0, [r2] + bl MemZero + ldr r2, _02047658 ; =_022AAE68 + mov r1, #0 + str r1, [r2, #4] + ldr r3, [r2] + mov r0, r5 + str r6, [r3, #4] + ldr r3, [r2] + strh r1, [r3, #0xa] + ldr r2, [r2] + strh r5, [r2, #0xc] + bl sub_02047760 + ldr r0, _02047658 ; =_022AAE68 + mov r2, #0 + ldr r5, [r0] + mov r1, r4 + str r2, [sp] + ldrsh r3, [r5, #0xc] + ldr r0, [r5, #4] + add r2, r5, #0xa + bl sub_02047F38 +_02047650: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02047658: .word _022AAE68 +_0204765C: .word _0209CCB0 + arm_func_end sub_020475B4 + + arm_func_start sub_02047660 +sub_02047660: ; 0x02047660 + ldr r0, _0204766C ; =_022AAE68 + ldr r0, [r0, #4] + bx lr + .align 2, 0 +_0204766C: .word _022AAE68 + arm_func_end sub_02047660 + + arm_func_start sub_02047670 +sub_02047670: ; 0x02047670 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + mov r0, #0x60 + mov r1, #8 + bl MemAlloc + ldr r2, _020476E8 ; =_020AFEE8 + mov r1, #0x60 + str r0, [r2] + bl MemZero + ldr r0, _020476E8 ; =_020AFEE8 + ldr r0, [r0] + bl InitPreprocessorArgs + ldr r1, _020476E8 ; =_020AFEE8 + mov r0, r4 + ldr r2, [r1] + mov r3, #0 + mov r1, #1 + str r3, [r2, #0x4c] + bl sub_02047760 + ldr r1, _020476E8 ; =_020AFEE8 + mov r3, #0 + ldr r2, [r1] + mov r0, #1 + strh r3, [r2, #0x58] + ldr r2, [r1] + strh r4, [r2, #0x56] + ldr r1, [r1] + str r5, [r1, #0x50] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020476E8: .word _020AFEE8 + arm_func_end sub_02047670 + + arm_func_start sub_020476EC +sub_020476EC: ; 0x020476EC + stmdb sp!, {r3, lr} + ldr r1, _02047718 ; =_020AFEE8 + mov r2, #1 + ldr ip, [r1] + mov r1, r0 + str r2, [sp] + ldrsh r3, [ip, #0x56] + ldr r0, [ip, #0x50] + add r2, ip, #0x58 + bl sub_02047F38 + ldmia sp!, {r3, pc} + .align 2, 0 +_02047718: .word _020AFEE8 + arm_func_end sub_020476EC + + arm_func_start sub_0204771C +sub_0204771C: ; 0x0204771C + stmdb sp!, {r3, lr} + ldr r0, _0204775C ; =_020AFEE8 + ldr r0, [r0] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + mov r0, #1 + bl sub_02047EF4 + ldr r0, _0204775C ; =_020AFEE8 + ldr r0, [r0] + bl MemFree + ldr r0, _0204775C ; =_020AFEE8 + mov r1, #0 + str r1, [r0] + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_0204775C: .word _020AFEE8 + arm_func_end sub_0204771C + + arm_func_start sub_02047760 +sub_02047760: ; 0x02047760 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x18 + ldr r2, _02047920 ; =_020AFEEC + mov r5, r1 + ldr r1, [r2, r5, lsl #2] + mov r6, r0 + cmp r1, #0 + movne r0, #0 + bne _02047918 + ldr r0, _02047924 ; =0x00002020 + mov r1, #8 + bl MemAlloc + ldr r1, _02047924 ; =0x00002020 + mov r4, r0 + bl MemZero + cmp r5, #0 + bne _02047850 + ldr r0, _02047928 ; =_0209CCC0 + add lr, sp, #8 + ldmia r0, {r0, r1, r2, r3} + stmia lr, {r0, r1, r2, r3} + mov ip, #0 + add r2, r4, #0x384 + str ip, [sp, #8] + str r4, [sp, #0x14] + strb ip, [sp, #0x10] + add r0, r4, #0x1000 +#ifdef JAPAN + mov r1, #0x10 + str r1, [r0, #0xf90] + add r0, r4, #0x1f00 + mov r1, #0x1540 +#else + mov r3, #0x10 + str r3, [r0, #0xf90] + ldr r1, _0204792C ; =0x00000A44 + add r0, r4, #0x1f00 +#endif + strh r1, [r0, #0x8c] + str ip, [sp] + ldr r1, _02047930 ; =0x0040180A + ldr r3, _02047934 ; =sub_02047AB4 + mov r0, lr + add r2, r2, #0x1c00 + str ip, [sp, #4] + bl CreateAdvancedTextBox + add r1, r4, #0x100 + strb r0, [r4, #0x120] + ldrsb r0, [r1, #0x20] + mov r1, #1 + bl SetAdvancedTextBoxPartialMenu + add r0, r4, #0x100 + ldrsb r0, [r0, #0x20] + mov r1, #1 + bl sub_02030AAC + add r0, r4, #0x1f00 + mov r1, #0x14 + strh r1, [r0, #0x80] + add r0, r4, #0x100 + ldrsb r0, [r0, #0x20] + mov r1, #0x20000000 + bl sub_02030A90 + add r0, r4, #0x100 + ldrsb r0, [r0, #0x20] + mov r1, #0x40000000 + bl sub_02030A74 + b _020478A0 +_02047850: + ldr r0, _02047938 ; =_0209CCD0 + add ip, sp, #8 + ldmia r0, {r0, r1, r2, r3} + stmia ip, {r0, r1, r2, r3} + mov r1, #0 + mov r0, #1 + add r2, r4, #0x384 + strb r0, [sp, #0x10] + str r1, [sp, #8] + str r4, [sp, #0x14] + str r1, [sp] + ldr r3, _02047934 ; =sub_02047AB4 + mov r0, ip + add r2, r2, #0x1c00 + str r1, [sp, #4] + bl CreateAdvancedTextBox + strb r0, [r4, #0x120] + add r0, r4, #0x1f00 + mov r1, #8 + strh r1, [r0, #0x80] +_020478A0: + add r0, r4, #0x1000 + strb r5, [r0, #0xf7c] + add r0, r4, #0x100 + ldrsb r1, [r0, #0x20] + mov r0, r4 + bl sub_02025E84 + mov ip, #0 + str ip, [r4, #0x11c] + add r2, r4, #0x1f00 + strh r6, [r2, #0x72] + strb ip, [r4, #0x128] + ldrb r1, [sp, #0xe] + mov r3, #0x3c + add r0, r4, #0x2000 + mov r1, r1, lsl #3 + strh r1, [r2, #0x78] + strb ip, [r0, #0x1c] + add r0, r4, #0x1000 + mov r1, #0x80 + str r1, [r0, #0xf6c] + add r0, r4, #0x12c + add r1, r3, #0x1e00 + strh r3, [r2, #0x68] + bl MemZero + add r0, r4, #0x1000 + mov r2, #0 + ldr r1, _02047920 ; =_020AFEEC + strb r2, [r0, #0xf82] + str r4, [r1, r5, lsl #2] + mov r0, #1 +_02047918: + add sp, sp, #0x18 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02047920: .word _020AFEEC +_02047924: .word 0x00002020 +_02047928: .word _0209CCC0 +#ifndef JAPAN +_0204792C: .word 0x00000A44 +#endif +_02047930: .word 0x0040180A +_02047934: .word sub_02047AB4 +_02047938: .word _0209CCD0 + arm_func_end sub_02047760 + + arm_func_start sub_0204793C +sub_0204793C: ; 0x0204793C + ldr r1, _0204795C ; =_020AFEEC + mov r2, #0 + ldr r3, [r1, r0, lsl #2] + mov r1, #1 + add r0, r3, #0x1f00 + strh r2, [r0, #0x70] + strb r1, [r3, #0x128] + bx lr + .align 2, 0 +_0204795C: .word _020AFEEC + arm_func_end sub_0204793C + + arm_func_start sub_02047960 +sub_02047960: ; 0x02047960 + stmdb sp!, {r3, r4, r5, lr} + ldr r1, _02047A0C ; =_020AFEEC + mov r5, r0 + ldr r4, [r1, r5, lsl #2] + add r0, r4, #0x1f00 + ldrsh r1, [r0, #0x70] + cmp r1, #0 + addle r0, r4, #0x2000 + movle r1, #1 + strleb r1, [r0, #0x1c] + movle r2, #0 + ble _020479B0 + ldrsh r0, [r0, #0x72] + sub r0, r1, r0 + mov r0, r0, lsl #0x10 + movs r2, r0, asr #0x10 + addmi r0, r4, #0x2000 + movmi r1, #1 + strmib r1, [r0, #0x1c] + movmi r2, #0 +_020479B0: + add r0, r4, #0x1f00 + strh r2, [r0, #0x74] + mov r1, #0 + strb r1, [r4, #0x128] + strh r2, [r0, #0x7e] + add r0, r4, #0x100 + ldrsb r0, [r0, #0x20] + bl SetAdvancedTextBoxField0x1C2 + cmp r5, #0 + ldmneia sp!, {r3, r4, r5, pc} + add r0, r4, #0x2000 + ldrb r0, [r0, #0x1c] + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + add r0, r4, #0x100 + ldrsb r0, [r0, #0x20] + mov r1, #0x20000000 + bl sub_02030A74 + add r0, r4, #0x100 + ldrsb r0, [r0, #0x20] + mov r1, #0x40000000 + bl sub_02030A74 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02047A0C: .word _020AFEEC + arm_func_end sub_02047960 + + arm_func_start sub_02047A10 +sub_02047A10: ; 0x02047A10 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + ldr r4, _02047AB0 ; =_020AFEEC + mov r6, r0 + ldr r4, [r4, r3, lsl #2] + mov r5, r2 + ldrb r0, [r4, #0x128] + cmp r0, #0 + beq _02047AA8 + add r0, r4, #0x1f00 + ldrsh r3, [r0, #0x70] + ldrsh r2, [r0, #0x68] + cmp r3, r2 + bge _02047AA8 + add r2, r3, r3, lsl #7 + add r2, r4, r2 + strb r1, [r2, #0x1ac] + ldrsh r0, [r0, #0x70] + add r2, r4, #0x12c + mov r1, r6 + add r0, r0, r0, lsl #7 + add r0, r2, r0 + bl strcpy + str r5, [sp] + add r0, r4, #0x1f00 + ldrsh r1, [r0, #0x70] + add r0, r4, #0x1000 + add r5, r4, #0x12c + add r3, r1, r1, lsl #7 + ldr r1, [r0, #0xf6c] + mov r2, r6 + add r0, r5, r3 + mov r3, #0x400 + bl PreprocessString + add r0, r4, #0x1f00 + ldrsh r1, [r0, #0x70] + add r1, r1, #1 + strh r1, [r0, #0x70] +_02047AA8: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02047AB0: .word _020AFEEC + arm_func_end sub_02047A10 + + arm_func_start sub_02047AB4 +sub_02047AB4: ; 0x02047AB4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + mov sl, r0 + bl sub_02028324 + cmp r0, #0 + moveq r1, #0 + beq _02047ADC + cmp r0, #1 + moveq r1, #1 + bne _02047C34 +_02047ADC: + ldr r0, _02047C3C ; =_020AFEEC + ldr r5, [r0, r1, lsl #2] + add r0, r5, #0x100 + ldrsb r0, [r0, #0x20] + bl sub_02027B1C + ldr r0, [r5, #0x11c] + cmp r0, #2 + beq _02047B0C + mov r0, r5 + bl sub_0202613C + mov r0, #1 + str r0, [r5, #0x11c] +_02047B0C: + add r4, r5, #0x1f00 + ldrsh r0, [r4, #0x70] + ldrsh r7, [r4, #0x7e] + cmp r7, r0 + bge _02047C34 + ldr r1, [r5, #0x18] + ldr r2, [r5, #4] + mov r1, r1, lsl #0x10 + mov r2, r2, lsl #0x10 + mov r8, r1, asr #0x10 + mov r1, r2, asr #0x10 + str r1, [sp, #4] + mov r6, #0 + add fp, r5, #0x12c + b _02047BBC +_02047B48: + add sb, r7, r7, lsl #7 + add r0, r5, sb + ldrb r0, [r0, #0x1ac] + cmp r0, #0 + beq _02047B80 + mov r0, #0x17 + str r0, [sp] + ldrsh r1, [r4, #0x80] + ldrsh r3, [r4, #0x78] + mov r0, sl + mla r1, r6, r8, r1 + sub r2, r1, #2 + mov r1, #0 + bl sub_02025D50 +_02047B80: + ldrsh r2, [r4, #0x80] + ldr r1, [sp, #4] + mov r0, sl + mla r2, r6, r8, r2 + add r3, fp, sb + bl sub_020264A4 + add r0, r7, #1 + mov r1, r0, lsl #0x10 + ldrsh r0, [r4, #0x70] + mov r7, r1, asr #0x10 + cmp r0, r1, asr #16 + ble _02047BC8 + add r1, r6, #1 + mov r1, r1, lsl #0x10 + mov r6, r1, asr #0x10 +_02047BBC: + ldrsh r1, [r4, #0x72] + cmp r6, r1 + blt _02047B48 +_02047BC8: + add r1, r5, #0x1f00 + ldrsh r2, [r1, #0x72] + cmp r0, r2 + ble _02047C18 + sub r0, r0, r2 + sub r0, r0, #1 + ldrsh r1, [r1, #0x74] + mov r0, r0, lsl #0x10 + cmp r1, r0, asr #16 + addeq r0, r5, #0x1000 + moveq r1, #1 + streqb r1, [r0, #0xf82] + beq _02047C2C + cmp r1, #0 + add r0, r5, #0x1000 + moveq r1, #2 + streqb r1, [r0, #0xf82] + movne r1, #3 + strneb r1, [r0, #0xf82] + b _02047C2C +_02047C18: + add r0, r5, #0x1000 + mov r1, #0 + strb r1, [r0, #0xf82] + strb r1, [r0, #0xf7a] + strb r1, [r0, #0xf7b] +_02047C2C: + mov r0, sl + bl UpdateWindow +_02047C34: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02047C3C: .word _020AFEEC + arm_func_end sub_02047AB4 + + arm_func_start sub_02047C40 +sub_02047C40: ; 0x02047C40 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + ldr r1, _02047EF0 ; =_020AFEEC + mov r6, #0 + ldr r5, [r1, r0, lsl #2] + add r1, sp, #0 + mov r0, r6 + bl sub_020063F4 + add r0, r5, #0x100 + ldrsb r0, [r0, #0x20] + bl GetAdvancedTextBoxFlags2 + ldr r1, [r5, #0x11c] + mov r4, r0 + cmp r1, #4 + addls pc, pc, r1, lsl #2 + b _02047EE4 +_02047C80: ; jump table + b _02047C94 ; case 0 + b _02047CAC ; case 1 + b _02047CB8 ; case 2 + b _02047EC0 ; case 3 + b _02047ECC ; case 4 +_02047C94: + mov r0, r5 + bl sub_020261D4 + cmp r0, #0 + beq _02047EE4 + mov r0, #1 + str r0, [r5, #0x11c] +_02047CAC: + mov r0, #2 + str r0, [r5, #0x11c] + b _02047EE4 +_02047CB8: + mov r0, r5 + bl sub_02026204 + add r1, r5, #0x1000 + ldrb r1, [r1, #0xf7c] + mov r7, r0 + cmp r1, #1 + beq _02047EE4 + add r0, r5, #0x100 + ldrsb r0, [r0, #0x20] + bl IsAdvancedTextBoxActive + cmp r0, #0 + beq _02047CF0 + ands r8, r4, #2 + beq _02047D0C +_02047CF0: + mov r0, #1 + bl PlaySeVolumeWrapper + mov r0, #3 + str r0, [r5, #0x11c] + mov r0, #1 + str r0, [r5, #0x124] + b _02047EE4 +_02047D0C: + add r0, r5, #0x1f00 + ldrsh r3, [r0, #0x72] + ldrsh ip, [r0, #0x70] + cmp ip, r3 + ble _02047E9C + ldrh r0, [sp] + tst r0, #0x40 + bne _02047D34 + tst r4, #0x40000 + beq _02047D7C +_02047D34: + add r0, r5, #0x1f00 + ldrsh r1, [r0, #0x74] + sub r1, r1, #1 + strh r1, [r0, #0x74] + ldrsh r1, [r0, #0x74] + cmp r1, #0 + bge _02047D6C + mov r1, #0 + strh r1, [r0, #0x74] + add r0, r5, #0x100 + ldrsb r0, [r0, #0x20] + mov r1, #0x20000000 + bl sub_02030A74 + b _02047D74 +_02047D6C: + mov r0, #3 + bl PlaySeVolumeWrapper +_02047D74: + mov r6, #1 + b _02047DC4 +_02047D7C: + tst r0, #0x80 + bne _02047D8C + tst r4, #0x80000 + beq _02047DC4 +_02047D8C: + add r1, r5, #0x1f00 + ldrsh r2, [r1, #0x74] + sub r0, ip, r3 + mov r0, r0, lsl #0x10 + add r2, r2, #1 + strh r2, [r1, #0x74] + ldrsh r2, [r1, #0x74] + mov r3, r0, asr #0x10 + cmp r2, r0, asr #16 + strgth r3, [r1, #0x74] + bgt _02047DC0 + mov r0, #3 + bl PlaySeVolumeWrapper +_02047DC0: + mov r6, #1 +_02047DC4: + add r0, r5, #0x1f00 + ldrsh r2, [r0, #0x74] + cmp r2, #1 + blt _02047E0C + ldrsh r1, [r0, #0x70] + ldrsh r0, [r0, #0x72] + sub r0, r1, r0 + cmp r2, r0 + bge _02047E0C + add r0, r5, #0x100 + ldrsb r0, [r0, #0x20] + mov r1, #0x20000000 + bl sub_02030A90 + add r0, r5, #0x100 + ldrsb r0, [r0, #0x20] + mov r1, #0x40000000 + bl sub_02030A90 + b _02047E70 +_02047E0C: + cmp r2, #0 + bne _02047E38 + add r0, r5, #0x100 + ldrsb r0, [r0, #0x20] + mov r1, #0x20000000 + bl sub_02030A74 + add r0, r5, #0x100 + ldrsb r0, [r0, #0x20] + mov r1, #0x40000000 + bl sub_02030A90 + b _02047E70 +_02047E38: + add r0, r5, #0x1f00 + ldrsh r1, [r0, #0x70] + ldrsh r0, [r0, #0x72] + sub r0, r1, r0 + cmp r2, r0 + bne _02047E70 + add r0, r5, #0x100 + ldrsb r0, [r0, #0x20] + mov r1, #0x20000000 + bl sub_02030A90 + add r0, r5, #0x100 + ldrsb r0, [r0, #0x20] + mov r1, #0x40000000 + bl sub_02030A74 +_02047E70: + ldrb r0, [r5, #0x129] + cmp r0, #0 + bne _02047E9C + cmp r6, #0 + beq _02047E9C + add r0, r5, #0x1f00 + ldrsh r2, [r0, #0x74] + add r1, r5, #0x100 + strh r2, [r0, #0x7e] + ldrsb r0, [r1, #0x20] + bl SetAdvancedTextBoxField0x1C2 +_02047E9C: + cmp r8, #0 + bne _02047EAC + cmp r7, #0x10 + bne _02047EE4 +_02047EAC: + mov r1, #3 + mov r0, #1 + str r1, [r5, #0x11c] + bl PlaySeVolumeWrapper + b _02047EE4 +_02047EC0: + mov r0, #4 + str r0, [r5, #0x11c] + b _02047EE4 +_02047ECC: + mov r1, r6 + mov r0, r5 + str r1, [r5, #0x11c] + bl sub_0202613C + mov r0, #1 + b _02047EE8 +_02047EE4: + mov r0, #0 +_02047EE8: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02047EF0: .word _020AFEEC + arm_func_end sub_02047C40 + + arm_func_start sub_02047EF4 +sub_02047EF4: ; 0x02047EF4 + stmdb sp!, {r4, lr} + ldr r1, _02047F34 ; =_020AFEEC + mov r4, r0 + ldr r0, [r1, r4, lsl #2] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + add r0, r0, #0x100 + ldrsb r0, [r0, #0x20] + bl CloseAdvancedTextBox2 + ldr r0, _02047F34 ; =_020AFEEC + ldr r0, [r0, r4, lsl #2] + bl MemFree + ldr r0, _02047F34 ; =_020AFEEC + mov r1, #0 + str r1, [r0, r4, lsl #2] + ldmia sp!, {r4, pc} + .align 2, 0 +_02047F34: .word _020AFEEC + arm_func_end sub_02047EF4 + + arm_func_start sub_02047F38 +sub_02047F38: ; 0x02047F38 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sb, r1 + mov sl, r0 + ldr r6, [sp, #0x28] + mov r0, sb + mov r1, #0x3c + mov r8, r2 + mov r7, r3 + bl _s32_div_f + mov r1, r1, lsl #0x10 + mov r2, #0 + mov r0, r6 + strh r2, [r8] + mov sb, r1, asr #0x10 + bl sub_0204793C + mov r5, #0 + mov fp, #0x3c + mov r4, #0xd4 +_02047F80: + smulbb r1, sb, r4 + ldrb r0, [sl, r1] + add r2, sl, r1 + cmp r0, #0 + beq _02047FB4 + ldrb r1, [r2, #1] + mov r3, r6 + add r0, r2, #3 + add r2, r2, #0x84 + bl sub_02047A10 + ldrsh r0, [r8] + add r0, r0, #1 + strh r0, [r8] +_02047FB4: + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov r1, fp + mov r0, r0, asr #0x10 + bl _s32_div_f + add r0, r5, #1 + mov r2, r0, lsl #0x10 + mov r0, r1, lsl #0x10 + mov r5, r2, asr #0x10 + cmp r5, #0x3c + mov sb, r0, asr #0x10 + blt _02047F80 + ldrsh r0, [r8] + cmp r0, r7 + mov r0, r6 + strlth r7, [r8] + bl sub_02047960 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end sub_02047F38 + + arm_func_start sub_02047FFC +sub_02047FFC: ; 0x02047FFC + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0x39c0 + mov r1, #0 + bl MemAlloc + ldr r2, _02048048 ; =_020AFEF4 + mov r1, #0x39c0 + str r0, [r2] + bl MemZero + ldr r1, _02048048 ; =_020AFEF4 + mov r2, #1 + ldr r0, [r1] + add r0, r0, #0x3000 + str r4, [r0, #0x1bc] + ldr r0, [r1] + add r0, r0, #0x3000 + strb r2, [r0, #0x1b3] + bl sub_020480CC + ldmia sp!, {r4, pc} + .align 2, 0 +_02048048: .word _020AFEF4 + arm_func_end sub_02047FFC + + arm_func_start sub_0204804C +sub_0204804C: ; 0x0204804C + stmdb sp!, {r3, lr} + ldr r0, _02048074 ; =_020AFEF4 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl MemFree + ldr r0, _02048074 ; =_020AFEF4 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02048074: .word _020AFEF4 + arm_func_end sub_0204804C + + arm_func_start sub_02048078 +sub_02048078: ; 0x02048078 + ldr r1, _0204809C ; =_020AFEF4 + ldr r1, [r1] + cmp r1, #0 + movne r2, #1 + moveq r2, #0 + tst r2, #0xff + addne r1, r1, #0x3000 + strneb r0, [r1, #0x1b3] + bx lr + .align 2, 0 +_0204809C: .word _020AFEF4 + arm_func_end sub_02048078 + + arm_func_start sub_020480A0 +sub_020480A0: ; 0x020480A0 + ldr r0, _020480C8 ; =_020AFEF4 + ldr r0, [r0] + cmp r0, #0 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + addne r0, r0, #0x3000 + ldrneb r0, [r0, #0x1b3] + moveq r0, #0 + bx lr + .align 2, 0 +_020480C8: .word _020AFEF4 + arm_func_end sub_020480A0 + + arm_func_start sub_020480CC +sub_020480CC: ; 0x020480CC + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r6, _02048130 ; =_020AFEF4 + mov r7, #0xd4 + ldr r0, [r6] + mov r4, #0 + add r0, r0, #0x3100 + strh r4, [r0, #0xb8] + ldr r0, [r6] + mov r1, #1 + add r0, r0, #0x3000 + strb r1, [r0, #0x1b0] + mov r5, r7 +_020480FC: + mul r8, r4, r5 + ldr r0, [r6] + mov r1, r7 + add r0, r0, r8 + bl MemZero + ldr r0, [r6] + add r0, r0, r8 + add r0, r0, #0x84 + bl InitPreprocessorArgs + add r4, r4, #1 + cmp r4, #0x3c + blt _020480FC + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02048130: .word _020AFEF4 + arm_func_end sub_020480CC + + arm_func_start sub_02048134 +sub_02048134: ; 0x02048134 + ldr r0, _0204814C ; =_020AFEF4 + mov r1, #1 + ldr r0, [r0] + add r0, r0, #0x3000 + strb r1, [r0, #0x1b0] + bx lr + .align 2, 0 +_0204814C: .word _020AFEF4 + arm_func_end sub_02048134 + + arm_func_start sub_02048150 +sub_02048150: ; 0x02048150 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl sub_020480A0 + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r2, _0204823C ; =_020AFEF4 + mov r1, #0xd4 + ldr lr, [r2] + mov r3, #1 + add r0, lr, #0x3100 + ldrsh r0, [r0, #0xb8] + smulbb ip, r0, r1 + strb r3, [lr, ip] + ldr r0, [r2] + add r1, lr, ip + add r0, r0, ip + strb r5, [r0, #1] + ldr r0, [r2] + add r2, r1, #3 + add r0, r0, ip + strb r4, [r0, #2] + add r1, r1, #0x82 +_020481B0: + ldrb r0, [r6] + cmp r0, #0 + cmpne r0, #0xd + beq _020481D0 + cmp r2, r1 + strlob r0, [r2], #1 + add r6, r6, #1 + b _020481B0 +_020481D0: + mov r3, #0 + ldr r1, _0204823C ; =_020AFEF4 + strb r3, [r2] + ldr r0, [r1] + add r0, r0, #0x3100 + ldrsh r2, [r0, #0xb8] + add r2, r2, #1 + strh r2, [r0, #0xb8] + ldr r0, [r1] + mov r2, #1 + add r0, r0, #0x3100 + ldrsh r1, [r0, #0xb8] + cmp r1, #0x3c + ldr r1, _0204823C ; =_020AFEF4 + strgeh r3, [r0, #0xb8] + ldr r0, [r1] + add r0, r0, #0x3000 + strb r2, [r0, #0x1b0] + ldr r1, [r1] + add r0, r1, #0x3000 + ldrb r0, [r0, #0x1b2] + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + add r0, r1, #0x3100 + ldrsh r0, [r0, #0xb8] + bl sub_020476EC + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0204823C: .word _020AFEF4 + arm_func_end sub_02048150 + + arm_func_start sub_02048240 +sub_02048240: ; 0x02048240 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr r2, _02048334 ; =_020AFEF4 + mov r1, r0 + ldr r0, [r2] + cmp r0, #0 + movne r2, #1 + moveq r2, #0 + tst r2, #0xff + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r0, r0, #0x31c0 + mov r8, #0 + bl strcpy + ldr r4, _02048334 ; =_020AFEF4 + mov r7, r8 + mov r6, #0x400 + mov fp, #0x440 + mov r5, r8 +_02048284: + ldr sb, [r4] + add r0, sb, r8 + add r0, r0, #0x3000 + ldrb r0, [r0, #0x1c0] + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r2, sb, #0x31c0 + mov r1, r6 + mov r3, fp + str r7, [sp] + add r0, sb, #0x35c0 + add r2, r2, r8 + bl PreprocessString + ldr r1, [r4] + add r8, r8, r0 + add r0, r1, r0 + add r0, r0, #0x3000 + strb r5, [r0, #0x5c0] + ldr sl, [r4] + add r0, sl, r8 + add r0, r0, #0x3000 + ldrb sb, [r0, #0x1c0] + cmp sb, #0 + beq _0204831C + add r0, sl, #0x31c0 + ldr r1, _02048338 ; =_0209CCE0 + mov r2, #3 + add r0, r0, r8 + bl strncmp + cmp r0, #0 + bne _02048310 + ldr r0, _02048338 ; =_0209CCE0 + bl strlen + add r8, r8, r0 + b _0204831C +_02048310: + cmp sb, #0xd + cmpne sb, #0xa + addeq r8, r8, #1 +_0204831C: + mov r1, #0 + mov r2, r1 + add r0, sl, #0x35c0 + bl sub_02048150 + b _02048284 +_02048330: + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02048334: .word _020AFEF4 +_02048338: .word _0209CCE0 + arm_func_end sub_02048240 + + arm_func_start sub_0204833C +sub_0204833C: ; 0x0204833C + ldr r0, _02048358 ; =_020AFEF4 + ldr ip, _0204835C ; =sub_020475B4 + ldr r0, [r0] + mov r1, #9 + add r2, r0, #0x3100 + ldrsh r2, [r2, #0xb8] + bx ip + .align 2, 0 +_02048358: .word _020AFEF4 +_0204835C: .word sub_020475B4 + arm_func_end sub_0204833C + + arm_func_start sub_02048360 +sub_02048360: ; 0x02048360 + stmdb sp!, {r3, lr} + bl sub_02047660 + cmp r0, #1 + moveq r0, #1 + ldmeqia sp!, {r3, pc} + cmp r0, #2 + moveq r0, #2 + movne r0, #0 + ldmia sp!, {r3, pc} + arm_func_end sub_02048360 + + arm_func_start sub_02048384 +sub_02048384: ; 0x02048384 + stmdb sp!, {r3, lr} + ldr r0, _020483B4 ; =_020AFEF4 + mov r1, #0xb + ldr r0, [r0] + bl sub_02047670 + cmp r0, #0 + ldrne r1, _020483B4 ; =_020AFEF4 + movne r2, #1 + ldrne r1, [r1] + addne r1, r1, #0x3000 + strneb r2, [r1, #0x1b2] + ldmia sp!, {r3, pc} + .align 2, 0 +_020483B4: .word _020AFEF4 + arm_func_end sub_02048384 + + arm_func_start sub_020483B8 +sub_020483B8: ; 0x020483B8 + ldr r0, _020483D0 ; =_020AFEF4 + ldr ip, _020483D4 ; =sub_020476EC + ldr r0, [r0] + add r0, r0, #0x3100 + ldrsh r0, [r0, #0xb8] + bx ip + .align 2, 0 +_020483D0: .word _020AFEF4 +_020483D4: .word sub_020476EC + arm_func_end sub_020483B8 + + arm_func_start sub_020483D8 +sub_020483D8: ; 0x020483D8 + stmdb sp!, {r3, lr} + bl sub_0204771C + cmp r0, #0 + ldrne r1, _020483FC ; =_020AFEF4 + movne r2, #0 + ldrne r1, [r1] + addne r1, r1, #0x3000 + strneb r2, [r1, #0x1b2] + ldmia sp!, {r3, pc} + .align 2, 0 +_020483FC: .word _020AFEF4 + arm_func_end sub_020483D8 + + arm_func_start sub_02048400 +sub_02048400: ; 0x02048400 + ldr r0, _0204841C ; =_020AFEF4 + ldr r0, [r0] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_0204841C: .word _020AFEF4 + arm_func_end sub_02048400 + + arm_func_start sub_02048420 +sub_02048420: ; 0x02048420 + stmdb sp!, {r3, lr} + bl sub_0204B028 + bl sub_02048B74 + ldmia sp!, {r3, pc} + arm_func_end sub_02048420 + + arm_func_start sub_02048430 +sub_02048430: ; 0x02048430 + stmdb sp!, {r3, lr} + bl sub_0206637C + mov r0, #0 + bl sub_02048C0C + mvn r0, #0 + bl sub_02048C4C + bl sub_0204F9B8 + bl sub_02048B48 + ldmia sp!, {r3, pc} + arm_func_end sub_02048430 + + arm_func_start sub_02048454 +sub_02048454: ; 0x02048454 + stmdb sp!, {r3, lr} + bl ClearAdventureLogStruct + bl sub_0206637C + mov r0, #0 + bl sub_02048C0C + mvn r0, #0 + bl sub_02048C4C + bl sub_0204F9B8 + bl sub_02048B48 + bl sub_02048C5C + ldmia sp!, {r3, pc} + arm_func_end sub_02048454 + + arm_func_start sub_02048480 +sub_02048480: ; 0x02048480 + stmdb sp!, {r3, lr} + bl sub_02048C3C + mvn r1, #0 + cmp r0, r1 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end sub_02048480 + + arm_func_start GetNotifyNote +GetNotifyNote: ; 0x020484A0 + ldr r0, _020484AC ; =NOTIFY_NOTE + ldrb r0, [r0] + bx lr + .align 2, 0 +_020484AC: .word NOTIFY_NOTE + arm_func_end GetNotifyNote + + arm_func_start SetNotifyNote +SetNotifyNote: ; 0x020484B0 + ldr r1, _020484BC ; =NOTIFY_NOTE + strb r0, [r1] + bx lr + .align 2, 0 +_020484BC: .word NOTIFY_NOTE + arm_func_end SetNotifyNote + + arm_func_start sub_020484C0 +sub_020484C0: ; 0x020484C0 + stmdb sp!, {r3, lr} + bl sub_0206637C + mov r0, #0 + bl sub_02048C0C + mvn r0, #0 + bl sub_02048C4C + bl sub_0204F9B8 + bl sub_02048B48 + bl sub_02048C5C + ldmia sp!, {r3, pc} + arm_func_end sub_020484C0 + + arm_func_start InitSpecialEpisodeHero +InitSpecialEpisodeHero: ; 0x020484E8 + stmdb sp!, {r4, lr} + bl GetSpecialEpisodeType + mov r4, r0 + bl sub_02052CD8 + bl sub_0200CAD4 + bl sub_0204CDB8 + mov r0, r4 + mov r1, #1 + bl sub_0204C9F4 + cmp r4, #4 + addls pc, pc, r4, lsl #2 + b _02048578 +_02048518: ; jump table + b _0204852C ; case 0 + b _0204853C ; case 1 + b _0204854C ; case 2 + b _0204855C ; case 3 + b _0204856C ; case 4 +_0204852C: + ldr r1, _020485AC ; =_020A2830 + mov r0, #2 + bl sub_02048AC4 + b _02048578 +_0204853C: + ldr r1, _020485B0 ; =_020A2808 + mov r0, #2 + bl sub_02048AC4 + b _02048578 +_0204854C: + ldr r1, _020485B4 ; =_020A2844 + mov r0, #2 + bl sub_02048AC4 + b _02048578 +_0204855C: + ldr r1, _020485B8 ; =_020A2880 + mov r0, #2 + bl sub_02048AC4 + b _02048578 +_0204856C: + ldr r1, _020485BC ; =_020A2894 + mov r0, #2 + bl sub_02048AC4 +_02048578: + mov r0, #2 + bl GetTeamMember + mov r4, r0 + mov r0, #2 + bl GetTeamMember + ldr r1, _020485C0 ; =FORBIDDEN_FORGOT_MOVE_LIST + bl sub_02053628 + mov r1, r0 + mov r0, r4 + mov r2, #1 + bl sub_02053660 + bl SetTeamSetupHeroAndPartnerOnly + ldmia sp!, {r4, pc} + .align 2, 0 +_020485AC: .word _020A2830 +_020485B0: .word _020A2808 +_020485B4: .word _020A2844 +_020485B8: .word _020A2880 +_020485BC: .word _020A2894 +_020485C0: .word FORBIDDEN_FORGOT_MOVE_LIST + arm_func_end InitSpecialEpisodeHero + + arm_func_start sub_020485C4 +sub_020485C4: ; 0x020485C4 + stmdb sp!, {r3, lr} + bl sub_02052CE8 + bl sub_0200CAE4 + bl sub_02056B58 + ldmia sp!, {r3, pc} + arm_func_end sub_020485C4 + + arm_func_start sub_020485D8 +sub_020485D8: ; 0x020485D8 + stmdb sp!, {r3, lr} + bl sub_02052CE8 + bl sub_0200CAE4 + bl sub_02056BD4 + ldmia sp!, {r3, pc} + arm_func_end sub_020485D8 + + arm_func_start sub_020485EC +sub_020485EC: ; 0x020485EC + stmdb sp!, {r3, lr} + bl sub_0206637C + mov r0, #0 + bl sub_02048C0C + mvn r0, #0 + bl sub_02048C4C + bl sub_0204F9B8 + bl sub_02048B48 + bl sub_02048C5C + ldmia sp!, {r3, pc} + arm_func_end sub_020485EC + + arm_func_start sub_02048614 +sub_02048614: ; 0x02048614 + stmdb sp!, {r3, lr} + bl sub_02048B48 + bl InitMainTeamAfterQuiz + ldmia sp!, {r3, pc} + arm_func_end sub_02048614 + + arm_func_start sub_02048624 +sub_02048624: ; 0x02048624 + stmdb sp!, {r3, lr} + mov r0, #0 + bl SetActiveInventory + mov r0, #0 + bl SetActiveKecleonShop + mov r0, #0 + bl SetActiveTeam + ldmia sp!, {r3, pc} + arm_func_end sub_02048624 + + arm_func_start sub_02048644 +sub_02048644: ; 0x02048644 + stmdb sp!, {r4, lr} + bl GetGameMode + mov r4, r0 + bl EventFlagResume + cmp r4, #4 + bne _02048678 + mov r0, #2 + bl SetActiveInventory + mov r0, #0 + bl SetActiveKecleonShop + mov r0, #2 + bl SetActiveTeam + b _020486D8 +_02048678: + cmp r4, #5 + bne _0204869C + mov r0, #2 + bl SetActiveInventory + mov r0, #0 + bl SetActiveKecleonShop + mov r0, #2 + bl SetActiveTeam + b _020486D8 +_0204869C: + cmp r4, #3 + bne _020486C0 + mov r0, #1 + bl SetActiveInventory + mov r0, #1 + bl SetActiveKecleonShop + mov r0, #1 + bl SetActiveTeam + b _020486D8 +_020486C0: + mov r0, #0 + bl SetActiveInventory + mov r0, #0 + bl SetActiveKecleonShop + mov r0, #0 + bl SetActiveTeam +_020486D8: + cmp r4, #3 + bne _020486EC + mov r0, #2 + bl SetBothScreensWindowsColor + ldmia sp!, {r4, pc} +_020486EC: + bl GetHeroMemberIdx + mvn r1, #0 + cmp r0, r1 + beq _02048720 + mov r0, #0 + mov r1, #0x42 + bl LoadScriptVariableValue + cmp r0, #5 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bl SetBothScreensWindowsColor + ldmia sp!, {r4, pc} +_02048720: + mov r0, #2 + bl SetBothScreensWindowsColor + ldmia sp!, {r4, pc} + arm_func_end sub_02048644 + + arm_func_start sub_0204872C +sub_0204872C: ; 0x0204872C + stmdb sp!, {r3, lr} + bl EventFlagBackup + mov r0, #2 + bl SetBothScreensWindowsColor + mov r0, #0 + bl SetActiveInventory + mov r0, #0 + bl SetActiveKecleonShop + mov r0, #0 + bl SetActiveTeam + ldmia sp!, {r3, pc} + arm_func_end sub_0204872C + + arm_func_start EventFlagBackupVeneer +EventFlagBackupVeneer: ; 0x02048758 + ldr ip, _02048760 ; =EventFlagBackup + bx ip + .align 2, 0 +_02048760: .word EventFlagBackup + arm_func_end EventFlagBackupVeneer + + arm_func_start sub_02048764 +sub_02048764: ; 0x02048764 + stmdb sp!, {r4, lr} + ldr lr, _02048790 ; =DEFAULT_HERO_ID + mov r4, r0 + mov ip, #3 +_02048774: + ldmia lr!, {r0, r1, r2, r3} + stmia r4!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _02048774 + ldmia lr, {r0, r1, r2} + stmia r4, {r0, r1, r2} + ldmia sp!, {r4, pc} + .align 2, 0 +_02048790: .word DEFAULT_HERO_ID + arm_func_end sub_02048764 + + arm_func_start sub_02048794 +sub_02048794: ; 0x02048794 + stmdb sp!, {r4, lr} + ldr lr, _020487C0 ; =DEFAULT_HERO_ID + mov r4, r0 + mov ip, #3 +_020487A4: + ldmia r4!, {r0, r1, r2, r3} + stmia lr!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _020487A4 + ldmia r4, {r0, r1, r2} + stmia lr, {r0, r1, r2} + ldmia sp!, {r4, pc} + .align 2, 0 +_020487C0: .word DEFAULT_HERO_ID + arm_func_end sub_02048794 + + arm_func_start InitMainTeamAfterQuiz +InitMainTeamAfterQuiz: ; 0x020487C4 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #0x14 + ldr r0, _020489F4 ; =NOTIFY_NOTE + mov r4, #0 + ldrb r0, [r0, #8] + cmp r0, #0 + bne _020487FC + ldr r1, _020489F8 ; =0x00000232 + add r0, sp, #0 + bl GetStringFromFileVeneer + ldr r0, _020489FC ; =_020AFF00 + add r1, sp, #0 + mov r2, #0xa + bl StrncpyName +_020487FC: + ldr r0, _020489F4 ; =NOTIFY_NOTE + ldrb r0, [r0, #0x1c] + cmp r0, #0 + bne _02048828 + ldr r1, _02048A00 ; =0x00000233 + add r0, sp, #0 + bl GetStringFromFileVeneer + ldr r0, _02048A04 ; =_020AFF14 + add r1, sp, #0 + mov r2, #0xa + bl StrncpyName +_02048828: + bl GetHeroMemberIdx + mvn r1, #0 + cmp r0, r1 + bne _02048898 + ldr r0, _020489F4 ; =NOTIFY_NOTE + ldr r3, _020489FC ; =_020AFF00 + ldrsh r1, [r0, #4] + mov r0, #0 + mov r2, #0xd6 + bl sub_02055B78 + bl GetHero + ldr r1, _020489F4 ; =NOTIFY_NOTE + mov r4, r0 + ldrsh r2, [r1, #4] + mov r0, #0 + mov r1, #0x3e + bl SaveScriptVariableValue + add r1, r4, #0x3a + mov r0, #0x3f + mov r2, #0xa + bl SaveScriptVariableValueBytes + mov r0, r4 + mov r1, #5 + mov r2, #0 + bl ApplyLevelUpBoostsToGroundMonster + mov r0, r4 + bl sub_02053568 + mov r4, #1 +_02048898: + bl GetPartnerMemberIdx + mvn r1, #0 + cmp r0, r1 + bne _02048908 + ldr r0, _020489F4 ; =NOTIFY_NOTE + ldr r3, _02048A04 ; =_020AFF14 + ldrsh r1, [r0, #6] + mov r0, #1 + mov r2, #0xd7 + bl sub_02055B78 + bl GetPartner + ldr r1, _020489F4 ; =NOTIFY_NOTE + mov r4, r0 + ldrsh r2, [r1, #6] + mov r0, #0 + mov r1, #0x40 + bl SaveScriptVariableValue + add r1, r4, #0x3a + mov r0, #0x41 + mov r2, #0xa + bl SaveScriptVariableValueBytes + mov r0, r4 + mov r1, #5 + mov r2, #0 + bl ApplyLevelUpBoostsToGroundMonster + mov r0, r4 + bl sub_02053568 + mov r4, #1 +_02048908: + cmp r4, #0 + beq _02048914 + bl SetTeamSetupHeroAndPartnerOnly +_02048914: + ldr r0, _020489F4 ; =NOTIFY_NOTE + ldrsh r0, [r0, #4] + cmp r0, #0 + beq _02048940 + bl GetMonsterGenderVeneer + cmp r0, #2 + moveq r2, #5 + movne r2, #4 + mov r0, #0 + mov r1, #0x42 + bl SaveScriptVariableValue +_02048940: + ldr r0, _020489F4 ; =NOTIFY_NOTE + ldrsh r1, [r0, #6] + cmp r1, #0 + beq _02048980 + ldr r0, _02048A08 ; =PARTNER_TALK_KIND_TABLE + b _02048964 +_02048958: + cmp r1, r2 + beq _02048970 + add r0, r0, #8 +_02048964: + ldrsh r2, [r0, #4] + cmp r2, #0 + bne _02048958 +_02048970: + ldr r2, [r0] + mov r0, #0 + mov r1, #0x43 + bl SaveScriptVariableValue +_02048980: + ldr r1, _020489F4 ; =NOTIFY_NOTE + mov r0, #0 + ldr r2, [r1, #0x30] + mov r1, #0x45 + bl SaveScriptVariableValue + mov r0, #1 + bl sub_02048C0C + bl sub_02048C3C + mvn r1, #0 + cmp r0, r1 + bne _020489B4 + bl Rand32Bit + bl sub_02048C4C +_020489B4: + bl GetGameMode + cmp r0, #1 + bhi _020489CC + mov r0, #2 + bl SetBothScreensWindowsColor + b _020489EC +_020489CC: + mov r0, #0 + mov r1, #0x42 + bl LoadScriptVariableValue + cmp r0, #5 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bl SetBothScreensWindowsColor +_020489EC: + add sp, sp, #0x14 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_020489F4: .word NOTIFY_NOTE +#ifdef JAPAN +_020489F8: .word 0x000004C3 +_020489FC: .word _020AFF00 +_02048A00: .word 0x000004C4 +#else +_020489F8: .word 0x00000232 +_020489FC: .word _020AFF00 +_02048A00: .word 0x00000233 +#endif +_02048A04: .word _020AFF14 +_02048A08: .word PARTNER_TALK_KIND_TABLE + arm_func_end InitMainTeamAfterQuiz + + arm_func_start InitSpecialEpisodePartners +InitSpecialEpisodePartners: ; 0x02048A0C + stmdb sp!, {r3, lr} + bl GetExecuteSpecialEpisodeType + cmp r0, #4 + addls pc, pc, r0, lsl #2 + b _02048A6C +_02048A20: ; jump table + b _02048A6C ; case 0 + b _02048A34 ; case 1 + b _02048A6C ; case 2 + b _02048A44 ; case 3 + b _02048A60 ; case 4 +_02048A34: + ldr r1, _02048A74 ; =_020A28A8 + mov r0, #3 + bl sub_02048AC4 + b _02048A6C +_02048A44: + ldr r1, _02048A78 ; =_020A2858 + mov r0, #3 + bl sub_02048AC4 + ldr r1, _02048A7C ; =_020A281C + mov r0, #4 + bl sub_02048AC4 + b _02048A6C +_02048A60: + ldr r1, _02048A80 ; =_020A286C + mov r0, #3 + bl sub_02048AC4 +_02048A6C: + bl SetTeamSetupHeroAndPartnerOnly + ldmia sp!, {r3, pc} + .align 2, 0 +_02048A74: .word _020A28A8 +_02048A78: .word _020A2858 +_02048A7C: .word _020A281C +_02048A80: .word _020A286C + arm_func_end InitSpecialEpisodePartners + + arm_func_start InitSpecialEpisodeExtraPartner +InitSpecialEpisodeExtraPartner: ; 0x02048A84 + stmdb sp!, {r3, lr} + bl GetExecuteSpecialEpisodeType + cmp r0, #4 + addls pc, pc, r0, lsl #2 + b _02048AB8 +_02048A98: ; jump table + b _02048AB8 ; case 0 + b _02048AB8 ; case 1 + b _02048AB8 ; case 2 + b _02048AB8 ; case 3 + b _02048AAC ; case 4 +_02048AAC: + ldr r1, _02048AC0 ; =SPECIAL_EPISODE_MAIN_CHARACTERS + mov r0, #4 + bl sub_02048AC4 +_02048AB8: + bl SetTeamSetupHeroAndPartnerOnly + ldmia sp!, {r3, pc} + .align 2, 0 +_02048AC0: .word SPECIAL_EPISODE_MAIN_CHARACTERS + arm_func_end InitSpecialEpisodeExtraPartner + + arm_func_start sub_02048AC4 +sub_02048AC4: ; 0x02048AC4 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + ldrsh r1, [r5] + ldrb r2, [r5, #2] + mov r4, r0 + mov r3, #0 + bl sub_02055B78 + mov r0, r4 + bl GetTeamMember + ldrsh r1, [r5, #0xe] + ldrb r2, [r5, #0xc] + mov r4, r0 + bl ApplyLevelUpBoostsToGroundMonster + ldrsh r0, [r5, #0x12] + cmp r0, #0 + strneh r0, [r4, #0xa] + ldrsh r2, [r5, #0x10] + add r0, r4, #0x14 + strh r2, [r4, #8] + ldrsh r1, [r4, #4] + bl EnableAllLearnableIqSkills + ldrh r0, [r5, #4] + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldrb r0, [r5, #0xc] + add r1, r5, #4 + cmp r0, #0 + add r0, r4, #0x22 + beq _02048B40 + bl LearnMoves + ldmia sp!, {r3, r4, r5, pc} +_02048B40: + bl GetInfoGroundMoveset + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02048AC4 + + arm_func_start sub_02048B48 +sub_02048B48: ; 0x02048B48 + stmdb sp!, {r3, lr} + bl sub_0204AB24 + bl InitScriptVariableValues + bl sub_02052C74 + bl sub_0200CABC + bl StoreDefaultTeamData + bl ResetGlobalProgress + bl sub_0205B478 + bl sub_0205C75C + bl sub_02012AB8 + ldmia sp!, {r3, pc} + arm_func_end sub_02048B48 + + arm_func_start sub_02048B74 +sub_02048B74: ; 0x02048B74 + stmdb sp!, {r3, lr} + ldr r1, _02048BA8 ; =_020AFF38 + ldr r0, _02048BAC ; =_0209CD4C + ldr r1, [r1, #4] + mov r2, #0 + bl Debug_Print0 + mov r3, #0 + ldr r1, _02048BA8 ; =_020AFF38 + ldr r0, _02048BB0 ; =_022AAE70 + sub r2, r3, #1 + str r3, [r1, #4] + str r2, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02048BA8: .word _020AFF38 +_02048BAC: .word _0209CD4C +_02048BB0: .word _022AAE70 + arm_func_end sub_02048B74 + + arm_func_start ReadStringSave +ReadStringSave: ; 0x02048BB4 + ldr r1, _02048BC8 ; =_020AFF38 + ldr ip, _02048BCC ; =strncpy + mov r2, #0x20 + ldr r1, [r1] + bx ip + .align 2, 0 +_02048BC8: .word _020AFF38 +_02048BCC: .word strncpy + arm_func_end ReadStringSave + + arm_func_start CheckStringSave +CheckStringSave: ; 0x02048BD0 + stmdb sp!, {r3, lr} + ldr r1, _02048BF8 ; =_020AFF38 + mov r2, #0x20 + ldr r1, [r1] + bl strncmp + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + .align 2, 0 +_02048BF8: .word _020AFF38 + arm_func_end CheckStringSave + + arm_func_start sub_02048BFC +sub_02048BFC: ; 0x02048BFC + ldr r0, _02048C08 ; =_020AFF38 + ldr r0, [r0, #4] + bx lr + .align 2, 0 +_02048C08: .word _020AFF38 + arm_func_end sub_02048BFC + + arm_func_start sub_02048C0C +sub_02048C0C: ; 0x02048C0C + stmdb sp!, {r4, lr} + ldr r1, _02048C34 ; =_020AFF38 + mov r4, r0 + ldr r1, [r1, #4] + ldr r0, _02048C38 ; =_0209CD4C + mov r2, r4 + bl Debug_Print0 + ldr r0, _02048C34 ; =_020AFF38 + str r4, [r0, #4] + ldmia sp!, {r4, pc} + .align 2, 0 +_02048C34: .word _020AFF38 +_02048C38: .word _0209CD4C + arm_func_end sub_02048C0C + + arm_func_start sub_02048C3C +sub_02048C3C: ; 0x02048C3C + ldr r0, _02048C48 ; =_022AAE70 + ldr r0, [r0] + bx lr + .align 2, 0 +_02048C48: .word _022AAE70 + arm_func_end sub_02048C3C + + arm_func_start sub_02048C4C +sub_02048C4C: ; 0x02048C4C + ldr r1, _02048C58 ; =_022AAE70 + str r0, [r1] + bx lr + .align 2, 0 +_02048C58: .word _022AAE70 + arm_func_end sub_02048C4C + + arm_func_start sub_02048C5C +sub_02048C5C: ; 0x02048C5C + stmdb sp!, {r3, lr} + ldr r0, _02048CA4 ; =_022AAE74 + mov r1, #0 + mov r2, #0x30 + bl MemsetSimple + ldr r2, _02048CA8 ; =0x09011416 + ldr r1, _02048CAC ; =_022AAE74 + ldr r0, _02048CB0 ; =_022AAE78 + str r2, [r1, #0x24] + bl ReadStringSave + ldr r2, _02048CB4 ; =0x000F1206 + ldr r0, _02048CAC ; =_022AAE74 + mov r1, #0xff + str r2, [r0, #0x28] + strb r1, [r0, #0x2c] + mov r1, #0 + strb r1, [r0, #0x2d] + ldmia sp!, {r3, pc} + .align 2, 0 +_02048CA4: .word _022AAE74 +_02048CA8: .word 0x09011416 +_02048CAC: .word _022AAE74 +_02048CB0: .word _022AAE78 +_02048CB4: .word 0x000F1206 + arm_func_end sub_02048C5C + + arm_func_start sub_02048CB8 +sub_02048CB8: ; 0x02048CB8 + stmdb sp!, {r3, lr} + mov r0, #9 + bl Debug_GetDebugFlag + cmp r0, #0 + beq _02048CE4 + ldr r1, _02048CF0 ; =_022AAE74 + ldr r0, _02048CF4 ; =0x000F1208 + ldr r1, [r1, #0x28] + cmp r1, r0 + subeq r0, r0, #1 + ldmeqia sp!, {r3, pc} +_02048CE4: + ldr r0, _02048CF0 ; =_022AAE74 + ldr r0, [r0, #0x28] + ldmia sp!, {r3, pc} + .align 2, 0 +_02048CF0: .word _022AAE74 +_02048CF4: .word 0x000F1208 + arm_func_end sub_02048CB8 + + arm_func_start sub_02048CF8 +sub_02048CF8: ; 0x02048CF8 + stmdb sp!, {r3, r4, r5, lr} + mov r0, #0x100 + mov r1, #5 + bl MemAlloc + mov r4, r0 + ldr r3, _02048DB0 ; =0x000001EA + add r0, sp, #0 + mov r1, r4 + mov r2, #0x100 + str r3, [sp] + bl ReadSaveFile + movs r5, r0 + cmpne r5, #2 + bne _02048D54 + add r0, r4, #4 + bl CheckStringSave + cmp r0, #0 + moveq r5, #5 + beq _02048D54 + ldr r1, [r4, #0x24] + ldr r0, _02048DB4 ; =0x09011416 + cmp r1, r0 + movne r5, #4 +_02048D54: + bl sub_02048C5C + cmp r5, #0 + bne _02048D80 + ldr r1, [r4, #0x28] + ldr r0, _02048DB8 ; =_022AAE74 + str r1, [r0, #0x28] + ldrb r1, [r4, #0x2c] + strb r1, [r0, #0x2c] + ldrb r1, [r4, #0x2d] + strb r1, [r0, #0x2d] + b _02048DA0 +_02048D80: + sub r0, r5, #4 + cmp r0, #1 + ldrls r1, _02048DBC ; =0x000F1206 + ldrls r0, _02048DB8 ; =_022AAE74 + strls r1, [r0, #0x28] + ldrhi r1, _02048DC0 ; =0x000F1209 + ldrhi r0, _02048DB8 ; =_022AAE74 + strhi r1, [r0, #0x28] +_02048DA0: + mov r0, r4 + bl MemFree + bl sub_02048CB8 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02048DB0: .word 0x000001EA +_02048DB4: .word 0x09011416 +_02048DB8: .word _022AAE74 +_02048DBC: .word 0x000F1206 +_02048DC0: .word 0x000F1209 + arm_func_end sub_02048CF8 + + arm_func_start sub_02048DC4 +sub_02048DC4: ; 0x02048DC4 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r6, r0 + mov r0, #0x100 + mov r1, #5 + bl MemAlloc + mov r4, r0 + bl sub_02048C5C + ldr r5, _02048E68 ; =_022AAE74 + mov lr, r4 + mov ip, #3 +_02048DF0: + ldmia r5!, {r0, r1, r2, r3} + stmia lr!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _02048DF0 + str r6, [r4, #0x28] + bl GetAdventureLogDungeonFloor + ldrb r2, [r0] + ldr r3, _02048E6C ; =0x000001EA + mov r1, r4 + strb r2, [r4, #0x2c] + ldrb ip, [r0, #1] + add r0, sp, #0 + mov r2, #0x100 + strb ip, [r4, #0x2d] + str r3, [sp] + bl WriteSaveFile + movs r5, r0 + bne _02048E54 + ldr r1, [r4, #0x28] + ldr r0, _02048E70 ; =_022AAE74 + str r1, [r0, #0x28] + ldrb r1, [r4, #0x2c] + strb r1, [r0, #0x2c] + ldrb r1, [r4, #0x2d] + strb r1, [r0, #0x2d] +_02048E54: + mov r0, r4 + bl MemFree + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02048E68: .word _022AAE74 +_02048E6C: .word 0x000001EA +_02048E70: .word _022AAE74 + arm_func_end sub_02048DC4 + + arm_func_start WriteSaveFile +WriteSaveFile: ; 0x02048E74 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r2 + add r3, r5, #0xff + mov r2, r3, asr #7 + ldr r4, [r0] + add r2, r3, r2, lsr #24 + mov r6, r1 + add r1, r4, r2, asr #8 + str r1, [r0] + mov r0, r6 + mov r1, r5 + bl CalcChecksum + mov r0, r4 + mov r1, r6 + mov r2, r5 + bl sub_0204A9C8 + cmp r0, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, pc} + cmp r0, #0 + movne r0, #2 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end WriteSaveFile + + arm_func_start ReadSaveFile +ReadSaveFile: ; 0x02048ED0 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r2 + add ip, r4, #0xff + mov r3, ip, asr #7 + ldr lr, [r0] + add r3, ip, r3, lsr #24 + add r3, lr, r3, asr #8 + str r3, [r0] + mov r0, lr + mov r5, r1 + bl sub_0204A8E0 + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, r5 + mov r1, r4 + bl CheckChecksumInvalid + cmp r0, #0 + movne r0, #2 + moveq r0, #0 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ReadSaveFile + + arm_func_start CalcChecksum +CalcChecksum: ; 0x02048F24 + mov r3, #0 + mov ip, #1 + b _02048F3C +_02048F30: + ldr r2, [r0, ip, lsl #2] + add ip, ip, #1 + add r3, r3, r2 +_02048F3C: + cmp ip, r1, lsr #2 + blt _02048F30 + str r3, [r0] + bx lr + arm_func_end CalcChecksum + + arm_func_start CheckChecksumInvalid +CheckChecksumInvalid: ; 0x02048F4C + mov r3, #0 + mov ip, #1 + b _02048F64 +_02048F58: + ldr r2, [r0, ip, lsl #2] + add ip, ip, #1 + add r3, r3, r2 +_02048F64: + cmp ip, r1, lsr #2 + blt _02048F58 + ldr r0, [r0] + cmp r0, r3 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + arm_func_end CheckChecksumInvalid + + arm_func_start NoteSaveBase +NoteSaveBase: ; 0x02048F84 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov sb, r0 + ldr r0, _02049218 ; =0x0000B65C + mov r1, #5 + bl MemAlloc + mov r4, r0 + add r0, r4, #0x64 + add r5, r0, #0x400 + bl sub_02048BFC + mov r2, r0 + ldr r0, _0204921C ; =_0209CD6C + mov r1, sb + bl Debug_Print0 + mov r0, #0 + bl SetNotifyNote + bl GetTime + mov r7, r0 + bl EventFlagBackupVeneer + cmp sb, #3 + bne _02048FE0 + bl sub_02048BFC + mov sb, r0 + b _02048FE8 +_02048FE0: + mov r0, sb + bl sub_02048C0C +_02048FE8: + str sb, [r4, #0x2c] + bl sub_02048C3C + str r0, [r4, #0x28] + bl GetRngSeed + str r0, [r4, #0x30] + cmp sb, #0 + mvneq r0, #0 + beq _0204900C + bl GetLanguageType +_0204900C: + ldr r1, _02049220 ; =0x09011416 + strb r0, [r4, #0x34] + add r0, r4, #4 + str r1, [r4, #0x24] + bl ReadStringSave + add r0, r4, #0x38 + bl DumpScriptVariableValues + ldr r1, _02049224 ; =0x00007F6B + mov r0, r5 + bl WriteMonsterInfoToSave + str r0, [r4, #0x438] + add r0, r5, #0x6b + ldr r1, _02049228 ; =0x000005DC + add r0, r0, #0x7f00 + bl sub_020597B0 + str r0, [r4, #0x43c] + add r0, r5, #0x47 + ldr r1, _0204922C ; =0x000001F7 + add r0, r0, #0x8500 + bl CopyProgressInfoFromScratchTo + str r0, [r4, #0x440] + add r0, r5, #0x3e + ldr r1, _02049230 ; =0x00000DAC + add r0, r0, #0x8700 + bl WriteItemsToSave + str r0, [r4, #0x444] + add r0, r5, #0xea + add r0, r0, #0x9400 + mov r1, #0x10 + bl sub_02050CF8 + str r0, [r4, #0x448] + add r0, r5, #0xfa + add r0, r0, #0x9400 + mov r1, #0x340 + bl sub_0204E154 + str r0, [r4, #0x450] + add r0, r5, #0x3a + ldr r1, _02049234 ; =0x000015A0 + add r0, r0, #0x9800 + bl sub_0205BFB0 + str r0, [r4, #0x454] + add r0, r5, #0xda + ldr r1, _02049238 ; =0x00000237 + add r0, r0, #0xad00 + bl sub_0205FC20 + str r0, [r4, #0x458] + add r0, r5, #0x11 + add r0, r0, #0xb000 + mov r1, #0xb + bl sub_020131F0 + add r1, r5, #0x1c + str r0, [r4, #0x45c] + add r0, r1, #0xb000 +#ifdef JAPAN + mov r1, #0x18c +#else + mov r1, #0x1dc +#endif + bl sub_0204A3E4 + str r0, [r4, #0x460] + bl GetTime + mov r1, r7 + mov r7, r0 + bl _fsub + bl _f2d + mov r3, r0 + mov r2, r1 + ldr r0, _0204923C ; =_0209CD84 + mov r1, r3 + bl Debug_Print0 + cmp sb, #2 + moveq r5, #0 + beq _0204912C + ldr r0, _02049240 ; =0x000F1206 + bl sub_02048DC4 + mov r5, r0 +_0204912C: + cmp r5, #0 + bne _020491C4 + bl sub_02049350 + cmp r0, #1 + add r0, sp, #0 + ldr r2, _02049218 ; =0x0000B65C + bne _02049188 + mov r3, #0 + mov r1, r4 + str r3, [sp] + bl WriteSaveFile + movs r6, r0 + bne _02049168 + mov r0, #0 + bl sub_02049360 +_02049168: + ldr r2, _02049218 ; =0x0000B65C + mov r3, #0xc8 + add r0, sp, #0 + mov r1, r4 + str r3, [sp] + bl WriteSaveFile + mov r8, r0 + b _020491C4 +_02049188: + mov r3, #0xc8 + mov r1, r4 + str r3, [sp] + bl WriteSaveFile + movs r8, r0 + bne _020491A8 + mov r0, #1 + bl sub_02049360 +_020491A8: + ldr r2, _02049218 ; =0x0000B65C + mov r3, #0 + add r0, sp, #0 + mov r1, r4 + str r3, [sp] + bl WriteSaveFile + mov r6, r0 +_020491C4: + bl GetTime + mov r1, r7 + bl _fsub + bl _f2d + mov r3, r0 + mov r2, r1 + ldr r0, _02049244 ; =_0209CD94 + mov r1, r3 + bl Debug_Print0 + mov r0, r4 + bl MemFree + cmp r5, #0 + movne r0, r5 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + cmp r6, #0 + movne r0, r6 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + cmp r8, #0 + moveq r8, #0 + mov r0, r8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +#ifdef JAPAN +_02049218: .word 0x0000B60C +#else +_02049218: .word 0x0000B65C +#endif +_0204921C: .word _0209CD6C +_02049220: .word 0x09011416 +_02049224: .word 0x00007F6B +_02049228: .word 0x000005DC +_0204922C: .word 0x000001F7 +_02049230: .word 0x00000DAC +_02049234: .word 0x000015A0 +_02049238: .word 0x00000237 +_0204923C: .word _0209CD84 +_02049240: .word 0x000F1206 +_02049244: .word _0209CD94 + arm_func_end NoteSaveBase + + arm_func_start WriteQuickSaveInfo +WriteQuickSaveInfo: ; 0x02049248 + stmdb sp!, {r3, lr} + mov ip, r0 + mov r2, r1 + mov r3, #0x190 + add r0, sp, #0 + mov r1, ip + str r3, [sp] + bl WriteSaveFile + ldmia sp!, {r3, pc} + arm_func_end WriteQuickSaveInfo + + arm_func_start ReadSaveHeader +ReadSaveHeader: ; 0x0204926C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r0, _0204932C ; =0x0000B65C + mov r1, #5 + bl MemAlloc + mov r4, r0 + ldr r3, _02049330 ; =_020AFF40 + mov r0, #0 + mov r1, r4 + mov r2, #0x38 + str r0, [r3] + bl sub_0204A8E0 + cmp r0, #0 + beq _020492B4 + mov r1, r4 + mov r0, #0xc8 + mov r2, #0x38 + bl sub_0204A8E0 +_020492B4: + cmp r0, #0 + ldrne r0, _02049330 ; =_020AFF40 + movne r1, #1 + strne r1, [r0, #4] + bne _02049310 + add r0, r4, #4 + bl CheckStringSave + cmp r0, #0 + ldreq r0, _02049330 ; =_020AFF40 + moveq r1, #5 + streq r1, [r0, #4] + beq _02049310 + ldr r1, [r4, #0x24] + ldr r0, _02049334 ; =0x09011416 + cmp r1, r0 + ldrne r0, _02049330 ; =_020AFF40 + movne r1, #4 + strne r1, [r0, #4] +#ifdef EUROPE + bne _02049310 + ldr r1, [r4, #0x2c] + ldr r0, _02049330 ; =_020AFF40 + mov r2, #0 + stmia r0, {r1, r2} + ldr r1, [r4, #0x28] + sub r0, r2, #1 + cmp r1, r0 + beq _02049310 + ldrsb r0, [r4, #0x34] + bl sub_020205C0 + bl sub_0202059C +#else + ldreq r2, [r4, #0x2c] + ldreq r0, _02049330 ; =_020AFF40 + moveq r1, #0 + streq r2, [r0] + streq r1, [r0, #4] +#endif +_02049310: + mov r0, r4 + bl MemFree + ldr r0, _02049330 ; =_020AFF40 + ldr r1, [r0] + str r1, [r5] + ldr r0, [r0, #4] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_0204932C: .word 0x0000B60C +#else +_0204932C: .word 0x0000B65C +#endif +_02049330: .word _020AFF40 +_02049334: .word 0x09011416 + arm_func_end ReadSaveHeader + + arm_func_start sub_02049338 +sub_02049338: ; 0x02049338 + ldr r1, _0204934C ; =_020AFF40 + ldr r2, [r1] + str r2, [r0] + ldr r0, [r1, #4] + bx lr + .align 2, 0 +_0204934C: .word _020AFF40 + arm_func_end sub_02049338 + + arm_func_start sub_02049350 +sub_02049350: ; 0x02049350 + ldr r0, _0204935C ; =_020AFF40 + ldr r0, [r0, #8] + bx lr + .align 2, 0 +_0204935C: .word _020AFF40 + arm_func_end sub_02049350 + + arm_func_start sub_02049360 +sub_02049360: ; 0x02049360 + ldr r1, _0204936C ; =_020AFF40 + str r0, [r1, #8] + bx lr + .align 2, 0 +_0204936C: .word _020AFF40 + arm_func_end sub_02049360 + + arm_func_start NoteLoadBase +NoteLoadBase: ; 0x02049370 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + ldr r0, _020495FC ; =0x0000B65C + mov r1, #5 + bl MemAlloc + mov r4, r0 + add r0, r4, #0x64 + add r6, r0, #0x400 + bl sub_02048BFC + mov r1, r0 + ldr r0, _02049600 ; =_0209CDA4 + bl Debug_Print0 + mov r0, #0 + bl SetNotifyNote + mov r0, #0 + str r0, [sp] + ldr r2, _020495FC ; =0x0000B65C + add r0, sp, #0 + mov r1, r4 + bl ReadSaveFile + movs r5, r0 + beq _02049400 + ldr r2, _020495FC ; =0x0000B65C + mov r3, #0xc8 + add r0, sp, #0 + mov r1, r4 + str r3, [sp] + bl ReadSaveFile + movs r5, r0 + ldrne r0, _02049604 ; =_020AFF40 + mvnne r1, #0 + strne r1, [r0, #8] + ldreq r0, _02049604 ; =_020AFF40 + moveq r1, #1 + streq r1, [r0, #8] + b _0204940C +_02049400: + ldr r0, _02049604 ; =_020AFF40 + mov r1, #0 + str r1, [r0, #8] +_0204940C: + cmp r5, #0 + cmpne r5, #2 + bne _0204943C + add r0, r4, #4 + bl CheckStringSave + cmp r0, #0 + moveq r5, #5 + beq _0204943C + ldr r1, [r4, #0x24] + ldr r0, _02049608 ; =0x09011416 + cmp r1, r0 + movne r5, #4 +_0204943C: + cmp r5, #0 + bne _020494A0 + ldr r1, [r4, #0x2c] + ldr r0, _0204960C ; =_0209CDB8 + bl Debug_Print0 + ldr r0, [r4, #0x2c] + bl sub_02048C0C + ldr r0, [r4, #0x28] + bl sub_02048C4C + ldr r0, [r4, #0x30] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl SetRngSeed + ldr r0, [r4, #0x2c] + cmp r0, #0 + mvneq r0, #0 + streqb r0, [r4, #0x34] + beq _020494A0 + ldr r1, [r4, #0x28] + mvn r0, #0 + cmp r1, r0 + beq _020494A0 + ldrsb r0, [r4, #0x34] + bl sub_020205C0 + bl sub_0202059C +_020494A0: + cmp r5, #0 + bne _020494B8 + add r0, r4, #0x38 + bl RestoreScriptVariableValues + cmp r0, #0 + moveq r5, #4 +_020494B8: + cmp r5, #0 + bne _020495D4 + ldr r1, _02049610 ; =0x00007F6B + mov r0, r6 + bl ReadMonsterInfoFromSave + ldr r1, [r4, #0x438] + cmp r0, r1 + add r0, r6, #0x6b + ldr r1, _02049614 ; =0x000005DC + add r0, r0, #0x7f00 + movne r5, #3 + bl sub_02059A74 + ldr r1, [r4, #0x43c] + cmp r0, r1 + add r0, r6, #0x47 + ldr r1, _02049618 ; =0x000001F7 + add r0, r0, #0x8500 + movne r5, #3 + bl CopyProgressInfoFromScratchFrom + ldr r1, [r4, #0x440] + cmp r0, r1 + add r0, r6, #0x3e + ldr r1, _0204961C ; =0x00000DAC + add r0, r0, #0x8700 + movne r5, #3 + bl ReadItemsFromSave + ldr r1, [r4, #0x444] + cmp r0, r1 + add r0, r6, #0xea + add r0, r0, #0x9400 + mov r1, #0x10 + movne r5, #3 + bl sub_02050D84 + ldr r1, [r4, #0x448] + cmp r0, r1 + add r0, r6, #0xfa + add r0, r0, #0x9400 + mov r1, #0x340 + movne r5, #3 + bl sub_0204E19C + ldr r1, [r4, #0x450] + cmp r0, r1 + add r0, r6, #0x3a + ldr r1, _02049620 ; =0x000015A0 + add r0, r0, #0x9800 + movne r5, #3 + bl sub_0205BD9C + ldr r1, [r4, #0x454] + cmp r0, r1 + add r0, r6, #0xda + ldr r1, _02049624 ; =0x00000237 + add r0, r0, #0xad00 + movne r5, #3 + bl sub_0205FAB0 + ldr r1, [r4, #0x458] + cmp r0, r1 + add r0, r6, #0x11 + add r0, r0, #0xb000 + mov r1, #0xb + movne r5, #3 + bl sub_02013190 + ldr r1, [r4, #0x45c] + cmp r0, r1 + add r0, r6, #0x1c + add r0, r0, #0xb000 +#ifdef JAPAN + mov r1, #0x18c +#else + mov r1, #0x1dc +#endif + movne r5, #3 + bl sub_0204A1DC + ldr r1, [r4, #0x460] + cmp r0, r1 + movne r5, #3 +_020495D4: + cmp r5, #0 + bne _020495E4 + bl sub_02048CF8 + b _020495E8 +_020495E4: + bl sub_02048C5C +_020495E8: + mov r0, r4 + bl MemFree + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +#ifdef JAPAN +_020495FC: .word 0x0000B60C +#else +_020495FC: .word 0x0000B65C +#endif +_02049600: .word _0209CDA4 +_02049604: .word _020AFF40 +_02049608: .word 0x09011416 +_0204960C: .word _0209CDB8 +_02049610: .word 0x00007F6B +_02049614: .word 0x000005DC +_02049618: .word 0x000001F7 +_0204961C: .word 0x00000DAC +_02049620: .word 0x000015A0 +_02049624: .word 0x00000237 + arm_func_end NoteLoadBase + + arm_func_start ReadQuickSaveInfo +ReadQuickSaveInfo: ; 0x02049628 + stmdb sp!, {r3, lr} + mov ip, r0 + mov r2, r1 + mov r3, #0x190 + add r0, sp, #0 + mov r1, ip + str r3, [sp] + bl ReadSaveFile + ldmia sp!, {r3, pc} + arm_func_end ReadQuickSaveInfo + + arm_func_start sub_0204964C +sub_0204964C: ; 0x0204964C + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, _02049678 ; =_0209CDD0 + bl sub_02034974 + cmp r0, #0 + ldrne r1, _0204967C ; =_022AAEA4 + ldrne r0, _02049680 ; =_020AFF4C + movne r2, #0 + strne r4, [r1] + strne r2, [r0, #4] + ldmia sp!, {r4, pc} + .align 2, 0 +_02049678: .word _0209CDD0 +_0204967C: .word _022AAEA4 +_02049680: .word _020AFF4C + arm_func_end sub_0204964C + + arm_func_start sub_02049684 +sub_02049684: ; 0x02049684 + stmdb sp!, {r3, lr} + mov r0, #0xb4 + mov r1, #8 + bl MemAlloc + ldr r1, _020496EC ; =_020AFF4C + str r0, [r1] + add r0, r0, #0x1c + bl sub_02034A38 + ldr r2, _020496EC ; =_020AFF4C + ldr r1, _020496F0 ; =_022AAEA4 + ldr r3, [r2] + str r0, [r3, #0x18] + ldr r3, [r1] + ldr r1, [r2] + mov r0, #0 + str r3, [r1, #8] + bl CreateDialogueBox + ldr r1, _020496EC ; =_020AFF4C + mov r3, #0 + ldr r2, [r1] + strb r0, [r2] + ldr r2, [r1] + mov r0, #1 + str r3, [r2, #4] + str r3, [r1, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_020496EC: .word _020AFF4C +_020496F0: .word _022AAEA4 + arm_func_end sub_02049684 + + arm_func_start sub_020496F4 +sub_020496F4: ; 0x020496F4 + stmdb sp!, {r3, lr} + ldr r0, _0204972C ; =_020AFF4C + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + bl CloseDialogueBox + ldr r0, _0204972C ; =_020AFF4C + ldr r0, [r0] + bl MemFree + ldr r0, _0204972C ; =_020AFF4C + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_0204972C: .word _020AFF4C + arm_func_end sub_020496F4 + + arm_func_start sub_02049730 +sub_02049730: ; 0x02049730 + stmdb sp!, {r3, lr} + ldr r1, _02049A18 ; =_020AFF4C + ldr r3, [r1] + ldr r0, [r3, #4] + cmp r0, #8 + addls pc, pc, r0, lsl #2 + b _02049A10 +_0204974C: ; jump table + b _02049770 ; case 0 + b _020497A4 ; case 1 + b _020497C4 ; case 2 + b _020497E8 ; case 3 + b _020498C8 ; case 4 + b _0204996C ; case 5 + b _020499A0 ; case 6 + b _020499CC ; case 7 + b _020499FC ; case 8 +_02049770: + ldr r0, [r3, #8] + ldr r1, _02049A1C ; =_0209CDE0 + mov r2, r0, lsl #1 + ldrsb r0, [r3] + ldrh r2, [r1, r2] + ldr r1, _02049A20 ; =0x00000408 + mov r3, #0 + bl ShowStringIdInDialogueBox + ldr r0, _02049A18 ; =_020AFF4C + mov r1, #1 + ldr r0, [r0] + str r1, [r0, #4] + b _02049A10 +_020497A4: + ldrsb r0, [r3] + bl IsDialogueBoxActive + cmp r0, #0 + ldreq r0, _02049A18 ; =_020AFF4C + moveq r1, #2 + ldreq r0, [r0] + streq r1, [r0, #4] + b _02049A10 +_020497C4: + mov r0, #0xe0 + mov r1, #0x88 + mov r2, #1 + bl sub_02029F88 + ldr r0, _02049A18 ; =_020AFF4C + mov r1, #3 + ldr r0, [r0] + str r1, [r0, #4] + b _02049A10 +_020497E8: + bl sub_02003B94 + ldr r0, _02049A18 ; =_020AFF4C + ldr r1, _02049A24 ; =_0209CE10 + ldr r3, [r0] + ldr r2, [r3, #8] + ldr r1, [r1, r2, lsl #2] + str r1, [r3, #0x10] + ldr r0, [r0] + ldr r0, [r0, #0x10] + cmp r0, #4 + bne _02049834 + ldr r0, _02049A28 ; =0x000F120A + bl sub_02048DC4 + mov r0, #2 + bl NoteSaveBase + ldr r1, _02049A18 ; =_020AFF4C + ldr r1, [r1] + str r0, [r1, #0xc] + b _020498B0 +_02049834: + cmp r0, #2 + bne _020498A0 + bl sub_02048CB8 + ldr r2, _02049A18 ; =_020AFF4C + ldr r1, _02049A2C ; =0x000F1207 + ldr r3, [r2] + str r0, [r3, #0x14] + ldr r0, [r2] + ldr r0, [r0, #0x14] + cmp r0, r1 + bne _02049868 + add r0, r1, #1 + bl sub_02048DC4 +_02049868: + mov r0, #2 + bl NoteSaveBase + ldr r1, _02049A18 ; =_020AFF4C + ldr r2, [r1] + str r0, [r2, #0xc] + ldr r1, [r1] + ldr r0, [r1, #0xc] + cmp r0, #0 + ldreq r0, [r1, #0x14] + ldreq r1, _02049A2C ; =0x000F1207 + cmpeq r0, r1 + bne _020498B0 + bl sub_02048DC4 + b _020498B0 +_020498A0: + bl NoteSaveBase + ldr r1, _02049A18 ; =_020AFF4C + ldr r1, [r1] + str r0, [r1, #0xc] +_020498B0: + bl sub_02003BC8 + ldr r0, _02049A18 ; =_020AFF4C + mov r1, #4 + ldr r0, [r0] + str r1, [r0, #4] + b _02049A10 +_020498C8: + bl sub_02029FBC + ldr r0, _02049A18 ; =_020AFF4C + ldr r3, [r0] + ldr r0, [r3, #0xc] + cmp r0, #1 + bne _02049908 +#ifdef JAPAN + ldr r1, _02049A30 ; =0x0000040C + ldrsb r0, [r3] + add r2, r1, #0xbd +#else + ldrsb r0, [r3] + ldr r1, _02049A30 ; =0x0000040C + mov r2, #0x238 +#endif + mov r3, #0 + bl ShowStringIdInDialogueBox + ldr r0, _02049A18 ; =_020AFF4C + mov r1, #8 + ldr r0, [r0] + str r1, [r0, #4] + b _02049A10 +_02049908: + cmp r0, #0 + bne _02049944 + ldr r0, [r3, #8] + ldr r1, _02049A34 ; =_0209CDF8 + mov r2, r0, lsl #1 + ldrsb r0, [r3] + ldrh r2, [r1, r2] + ldr r1, _02049A38 ; =0x0000061C + mov r3, #0 + bl ShowStringIdInDialogueBox + ldr r0, _02049A18 ; =_020AFF4C + mov r1, #5 + ldr r0, [r0] + str r1, [r0, #4] + b _02049A10 +_02049944: + ldrsb r0, [r3] + ldr r1, _02049A38 ; =0x0000061C + ldr r2, _02049A3C ; =0x00000239 + mov r3, #0 + bl ShowStringIdInDialogueBox + ldr r0, _02049A18 ; =_020AFF4C + mov r1, #5 + ldr r0, [r0] + str r1, [r0, #4] + b _02049A10 +_0204996C: + ldrsb r0, [r3] + bl IsDialogueBoxActive + cmp r0, #0 + bne _02049A10 + ldr r0, _02049A18 ; =_020AFF4C + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202F334 + ldr r0, _02049A18 ; =_020AFF4C + mov r1, #6 + ldr r0, [r0] + str r1, [r0, #4] + b _02049A10 +_020499A0: + ldrsb r0, [r3] + bl IsDialogueBoxActive + cmp r0, #0 + bne _02049A10 + ldr r0, _02049A18 ; =_020AFF4C + mov r1, #2 + str r1, [r0, #4] + ldr r0, [r0] + mov r1, #7 + str r1, [r0, #4] + b _02049A10 +_020499CC: + mov r0, #9 + str r0, [r3, #4] + ldr r2, [r1] + ldr r0, [r2, #0x18] + tst r0, #0x100 + beq _020499F4 + ldr r0, [r2, #0xa4] + ldr r1, [r1, #4] + ldr r2, [r2, #0xa0] + blx r2 +_020499F4: + mov r0, #4 + ldmia sp!, {r3, pc} +_020499FC: + ldrsb r0, [r3] + bl IsDialogueBoxActive + cmp r0, #0 + bne _02049A10 + bl CardBackupError +_02049A10: + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_02049A18: .word _020AFF4C +_02049A1C: .word _0209CDE0 +_02049A20: .word 0x00000408 +_02049A24: .word _0209CE10 +_02049A28: .word 0x000F120A +_02049A2C: .word 0x000F1207 +_02049A30: .word 0x0000040C +_02049A34: .word _0209CDF8 +_02049A38: .word 0x0000061C +#ifdef JAPAN +_02049A3C: .word 0x000004CA +#else +_02049A3C: .word 0x00000239 +#endif + arm_func_end sub_02049730 + + arm_func_start sub_02049A40 +sub_02049A40: ; 0x02049A40 + stmdb sp!, {r3, lr} + mov r3, r0 + mov r2, r1 + ldr r0, _02049A6C ; =_0209CE40 + mov r1, r3 + bl sub_02034974 + cmp r0, #0 + ldrne r0, _02049A70 ; =_020AFF54 + movne r1, #0 + strne r1, [r0, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_02049A6C: .word _0209CE40 +_02049A70: .word _020AFF54 + arm_func_end sub_02049A40 + + arm_func_start sub_02049A74 +sub_02049A74: ; 0x02049A74 + stmdb sp!, {r3, lr} + mov r0, #0xa8 + mov r1, #8 + bl MemAlloc + ldr r1, _02049ACC ; =_020AFF54 + str r0, [r1] + add r0, r0, #0x10 + bl sub_02034A38 + ldr r1, _02049ACC ; =_020AFF54 + ldr r1, [r1] + str r0, [r1, #0xc] + mov r0, #0 + bl CreateDialogueBox + ldr r1, _02049ACC ; =_020AFF54 + mov r3, #0 + ldr r2, [r1] + strb r0, [r2] + ldr r2, [r1] + mov r0, #1 + str r3, [r2, #4] + str r3, [r1, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_02049ACC: .word _020AFF54 + arm_func_end sub_02049A74 + + arm_func_start sub_02049AD0 +sub_02049AD0: ; 0x02049AD0 + stmdb sp!, {r3, lr} + ldr r0, _02049B08 ; =_020AFF54 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + bl CloseDialogueBox + ldr r0, _02049B08 ; =_020AFF54 + ldr r0, [r0] + bl MemFree + ldr r0, _02049B08 ; =_020AFF54 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02049B08: .word _020AFF54 + arm_func_end sub_02049AD0 + + arm_func_start sub_02049B0C +sub_02049B0C: ; 0x02049B0C + stmdb sp!, {r3, lr} + ldr r0, _02049D34 ; =_020AFF54 + ldr r2, [r0] + ldr r0, [r2, #4] + cmp r0, #8 + addls pc, pc, r0, lsl #2 + b _02049D2C +_02049B28: ; jump table + b _02049B4C ; case 0 + b _02049B74 ; case 1 + b _02049B94 ; case 2 + b _02049BB8 ; case 3 + b _02049BEC ; case 4 + b _02049C74 ; case 5 + b _02049CA8 ; case 6 + b _02049CD4 ; case 7 + b _02049D18 ; case 8 +_02049B4C: + ldrsb r0, [r2] + ldr r1, _02049D38 ; =0x00000408 +#ifdef JAPAN + mov r2, #0x4e0 +#else + ldr r2, _02049D3C ; =0x0000024F +#endif + mov r3, #0 + bl ShowStringIdInDialogueBox + ldr r0, _02049D34 ; =_020AFF54 + mov r1, #1 + ldr r0, [r0] + str r1, [r0, #4] + b _02049D2C +_02049B74: + ldrsb r0, [r2] + bl IsDialogueBoxActive + cmp r0, #0 + ldreq r0, _02049D34 ; =_020AFF54 + moveq r1, #2 + ldreq r0, [r0] + streq r1, [r0, #4] + b _02049D2C +_02049B94: + mov r0, #0xe0 + mov r1, #0x88 + mov r2, #1 + bl sub_02029F88 + ldr r0, _02049D34 ; =_020AFF54 + mov r1, #3 + ldr r0, [r0] + str r1, [r0, #4] + b _02049D2C +_02049BB8: + bl sub_02003B94 + bl sub_02048454 + mov r0, #0 + bl NoteSaveBase + ldr r1, _02049D34 ; =_020AFF54 + ldr r1, [r1] + str r0, [r1, #8] + bl sub_02003BC8 + ldr r0, _02049D34 ; =_020AFF54 + mov r1, #4 + ldr r0, [r0] + str r1, [r0, #4] + b _02049D2C +_02049BEC: + bl sub_02029FBC + ldr r0, _02049D34 ; =_020AFF54 + mov r3, #0 +#ifdef JAPAN + ldr r2, [r0] + ldr r0, [r2, #8] + cmp r0, #1 + bne _02049C2C + ldr r1, _02049D40 ; =0x0000040C + ldrsb r0, [r2] + add r2, r1, #0xbd +#else + ldr r1, [r0] + ldr r0, [r1, #8] + cmp r0, #1 + bne _02049C2C + ldrsb r0, [r1] + ldr r1, _02049D40 ; =0x0000040C + mov r2, #0x238 +#endif + bl ShowStringIdInDialogueBox + ldr r0, _02049D34 ; =_020AFF54 + mov r1, #8 + ldr r0, [r0] + str r1, [r0, #4] + b _02049D2C +_02049C2C: + cmp r0, #0 +#ifdef JAPAN + ldrsb r0, [r2] + ldr r1, _02049D44 ; =0x0000061C + bne _02049C58 + ldr r2, _0204A0B0 ; =0x000004E1 +#else + ldrsb r0, [r1] + ldr r1, _02049D44 ; =0x0000061C + bne _02049C58 + mov r2, #0x250 +#endif + bl ShowStringIdInDialogueBox + ldr r0, _02049D34 ; =_020AFF54 + mov r1, #5 + ldr r0, [r0] + str r1, [r0, #4] + b _02049D2C +_02049C58: + ldr r2, _02049D48 ; =0x0000023A + bl ShowStringIdInDialogueBox + ldr r0, _02049D34 ; =_020AFF54 + mov r1, #5 + ldr r0, [r0] + str r1, [r0, #4] + b _02049D2C +_02049C74: + ldrsb r0, [r2] + bl IsDialogueBoxActive + cmp r0, #0 + bne _02049D2C + ldr r0, _02049D34 ; =_020AFF54 + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202F334 + ldr r0, _02049D34 ; =_020AFF54 + mov r1, #6 + ldr r0, [r0] + str r1, [r0, #4] + b _02049D2C +_02049CA8: + ldrsb r0, [r2] + bl IsDialogueBoxActive + cmp r0, #0 + bne _02049D2C + ldr r0, _02049D34 ; =_020AFF54 + mov r1, #2 + str r1, [r0, #4] + ldr r0, [r0] + mov r1, #7 + str r1, [r0, #4] + b _02049D2C +_02049CD4: + mov r1, #9 + add r0, sp, #0 + str r1, [r2, #4] + bl sub_0204AF98 + ldrb r0, [sp] + bl sub_02027180 + ldr r0, _02049D34 ; =_020AFF54 + ldr r1, [r0] + ldr r0, [r1, #0xc] + tst r0, #0x100 + beq _02049D10 + ldr r0, [r1, #0x98] + ldr r2, [r1, #0x94] + mov r1, #8 + blx r2 +_02049D10: + mov r0, #4 + ldmia sp!, {r3, pc} +_02049D18: + ldrsb r0, [r2] + bl IsDialogueBoxActive + cmp r0, #0 + bne _02049D2C + bl CardBackupError +_02049D2C: + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_02049D34: .word _020AFF54 +_02049D38: .word 0x00000408 +#ifdef JAPAN +_02049D40: .word 0x0000040C +_02049D44: .word 0x0000061C +_0204A0B0: .word 0x000004E1 +_02049D48: .word 0x000004CB +#else +_02049D3C: .word 0x0000024F +_02049D40: .word 0x0000040C +_02049D44: .word 0x0000061C +_02049D48: .word 0x0000023A +#endif + arm_func_end sub_02049B0C + + arm_func_start sub_02049D4C +sub_02049D4C: ; 0x02049D4C + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, _02049D78 ; =_0209CE58 + bl sub_02034974 + cmp r0, #0 + ldrne r1, _02049D7C ; =_022AAEA8 + ldrne r0, _02049D80 ; =_020AFF5C + movne r2, #0 + strne r4, [r1] + strne r2, [r0] + ldmia sp!, {r4, pc} + .align 2, 0 +_02049D78: .word _0209CE58 +_02049D7C: .word _022AAEA8 +_02049D80: .word _020AFF5C + arm_func_end sub_02049D4C + + arm_func_start sub_02049D84 +sub_02049D84: ; 0x02049D84 + stmdb sp!, {r3, lr} + mov r0, #0xa8 + mov r1, #8 + bl MemAlloc + ldr r1, _02049DEC ; =_020AFF5C + str r0, [r1, #4] + add r0, r0, #0x10 + bl sub_02034A38 + ldr r2, _02049DEC ; =_020AFF5C + ldr r1, _02049DF0 ; =_022AAEA8 + ldr r3, [r2, #4] + str r0, [r3, #0xc] + ldr r3, [r1] + ldr r1, [r2, #4] + mov r0, #0 + str r3, [r1, #8] + bl CreateDialogueBox + ldr r1, _02049DEC ; =_020AFF5C + mov r3, #0 + ldr r2, [r1, #4] + strb r0, [r2] + ldr r2, [r1, #4] + mov r0, #1 + str r3, [r2, #4] + str r3, [r1] + ldmia sp!, {r3, pc} + .align 2, 0 +_02049DEC: .word _020AFF5C +_02049DF0: .word _022AAEA8 + arm_func_end sub_02049D84 + + arm_func_start sub_02049DF4 +sub_02049DF4: ; 0x02049DF4 + stmdb sp!, {r3, lr} + ldr r0, _02049E2C ; =_020AFF5C + ldr r0, [r0, #4] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + bl CloseDialogueBox + ldr r0, _02049E2C ; =_020AFF5C + ldr r0, [r0, #4] + bl MemFree + ldr r0, _02049E2C ; =_020AFF5C + mov r1, #0 + str r1, [r0, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_02049E2C: .word _020AFF5C + arm_func_end sub_02049DF4 + + arm_func_start sub_02049E30 +sub_02049E30: ; 0x02049E30 + stmdb sp!, {r3, lr} + ldr r1, _0204A004 ; =_020AFF5C + ldr r3, [r1, #4] + ldr r0, [r3, #4] + cmp r0, #7 + addls pc, pc, r0, lsl #2 + b _02049FFC +_02049E4C: ; jump table + b _02049E6C ; case 0 + b _02049EA0 ; case 1 + b _02049EC0 ; case 2 + b _02049EE4 ; case 3 + b _02049F2C ; case 4 + b _02049F6C ; case 5 + b _02049FA0 ; case 6 + b _02049FCC ; case 7 +_02049E6C: + ldr r0, [r3, #8] + ldr r1, _0204A008 ; =_0209CE54 + mov r2, r0, lsl #1 + ldrsb r0, [r3] + ldrh r2, [r1, r2] + ldr r1, _0204A00C ; =0x00000408 + mov r3, #0 + bl ShowStringIdInDialogueBox + ldr r0, _0204A004 ; =_020AFF5C + mov r1, #1 + ldr r0, [r0, #4] + str r1, [r0, #4] + b _02049FFC +_02049EA0: + ldrsb r0, [r3] + bl IsDialogueBoxActive + cmp r0, #0 + ldreq r0, _0204A004 ; =_020AFF5C + moveq r1, #2 + ldreq r0, [r0, #4] + streq r1, [r0, #4] + b _02049FFC +_02049EC0: + mov r0, #0xe0 + mov r1, #0x88 + mov r2, #1 + bl sub_02029F88 + ldr r0, _0204A004 ; =_020AFF5C + mov r1, #3 + ldr r0, [r0, #4] + str r1, [r0, #4] + b _02049FFC +_02049EE4: + bl sub_02003B94 + ldr r0, _0204A004 ; =_020AFF5C + ldr r0, [r0, #4] + ldr r0, [r0, #8] + cmp r0, #0 + beq _02049F08 + cmp r0, #1 + beq _02049F10 + b _02049F14 +_02049F08: + bl sub_0204A624 + b _02049F14 +_02049F10: + bl sub_0204A72C +_02049F14: + bl sub_02003BC8 + ldr r0, _0204A004 ; =_020AFF5C + mov r1, #4 + ldr r0, [r0, #4] + str r1, [r0, #4] + b _02049FFC +_02049F2C: + bl sub_02029FBC + ldr r0, _0204A004 ; =_020AFF5C + ldr r2, _0204A010 ; =_0209CE50 + ldr r0, [r0, #4] + ldr r1, _0204A014 ; =0x0000061C + ldr r3, [r0, #8] + ldrsb r0, [r0] + mov r3, r3, lsl #1 + ldrh r2, [r2, r3] + mov r3, #0 + bl ShowStringIdInDialogueBox + ldr r0, _0204A004 ; =_020AFF5C + mov r1, #5 + ldr r0, [r0, #4] + str r1, [r0, #4] + b _02049FFC +_02049F6C: + ldrsb r0, [r3] + bl IsDialogueBoxActive + cmp r0, #0 + bne _02049FFC + ldr r0, _0204A004 ; =_020AFF5C + ldr r0, [r0, #4] + ldrsb r0, [r0] + bl sub_0202F334 + ldr r0, _0204A004 ; =_020AFF5C + mov r1, #6 + ldr r0, [r0, #4] + str r1, [r0, #4] + b _02049FFC +_02049FA0: + ldrsb r0, [r3] + bl IsDialogueBoxActive + cmp r0, #0 + bne _02049FFC + ldr r0, _0204A004 ; =_020AFF5C + mov r1, #2 + str r1, [r0] + ldr r0, [r0, #4] + mov r1, #7 + str r1, [r0, #4] + b _02049FFC +_02049FCC: + mov r0, #8 + str r0, [r3, #4] + ldr r2, [r1, #4] + ldr r0, [r2, #0xc] + tst r0, #0x100 + beq _02049FF4 + ldr r0, [r2, #0x98] + ldr r1, [r1] + ldr r2, [r2, #0x94] + blx r2 +_02049FF4: + mov r0, #4 + ldmia sp!, {r3, pc} +_02049FFC: + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_0204A004: .word _020AFF5C +_0204A008: .word _0209CE54 +_0204A00C: .word 0x00000408 +_0204A010: .word _0209CE50 +_0204A014: .word 0x0000061C + arm_func_end sub_02049E30 + + arm_func_start sub_0204A018 +sub_0204A018: ; 0x0204A018 + ldr ip, _0204A024 ; =sub_020348E4 + ldr r0, _0204A028 ; =_0209CE68 + bx ip + .align 2, 0 +_0204A024: .word sub_020348E4 +_0204A028: .word _0209CE68 + arm_func_end sub_0204A018 + + arm_func_start sub_0204A02C +sub_0204A02C: ; 0x0204A02C + stmdb sp!, {r3, lr} + mov r0, #1 + mov r1, #8 + bl MemAlloc + ldr r1, _0204A078 ; =_020AFF64 + str r0, [r1] + mov r0, #0 + bl CreateDialogueBox + ldr r3, _0204A078 ; =_020AFF64 + ldr r1, _0204A07C ; =0x00000408 + ldr ip, [r3] +#ifdef JAPAN + add r2, r1, #0xc1 +#else + mov r2, #0x238 +#endif + strb r0, [ip] + ldr r0, [r3] + mov r3, #0 + ldrsb r0, [r0] + bl ShowStringIdInDialogueBox + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_0204A078: .word _020AFF64 +_0204A07C: .word 0x00000408 + arm_func_end sub_0204A02C + + arm_func_start sub_0204A080 +sub_0204A080: ; 0x0204A080 + stmdb sp!, {r3, lr} + ldr r0, _0204A0B8 ; =_020AFF64 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + bl CloseDialogueBox + ldr r0, _0204A0B8 ; =_020AFF64 + ldr r0, [r0] + bl MemFree + ldr r0, _0204A0B8 ; =_020AFF64 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_0204A0B8: .word _020AFF64 + arm_func_end sub_0204A080 + + arm_func_start sub_0204A0BC +sub_0204A0BC: ; 0x0204A0BC + stmdb sp!, {r3, lr} + ldr r0, _0204A0E4 ; =_020AFF64 + ldr r0, [r0] + ldrsb r0, [r0] + bl IsDialogueBoxActive + cmp r0, #0 + bne _0204A0DC + bl CardBackupError +_0204A0DC: + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_0204A0E4: .word _020AFF64 + arm_func_end sub_0204A0BC + + arm_func_start sub_0204A0E8 +sub_0204A0E8: ; 0x0204A0E8 + ldr ip, _0204A0F4 ; =sub_020348E4 + ldr r0, _0204A0F8 ; =_0209CE78 + bx ip + .align 2, 0 +_0204A0F4: .word sub_020348E4 +_0204A0F8: .word _0209CE78 + arm_func_end sub_0204A0E8 + + arm_func_start sub_0204A0FC +sub_0204A0FC: ; 0x0204A0FC + stmdb sp!, {r3, lr} + mov r0, #1 + mov r1, #8 + bl MemAlloc + ldr r1, _0204A148 ; =_020AFF68 + str r0, [r1] + mov r0, #0 + bl CreateDialogueBox + ldr r3, _0204A148 ; =_020AFF68 + ldr r1, _0204A14C ; =0x00000408 + ldr ip, [r3] +#ifdef JAPAN + add r2, r1, #0xd0 +#else + ldr r2, _0204A150 ; =0x00000247 +#endif + strb r0, [ip] + ldr r0, [r3] + mov r3, #0 + ldrsb r0, [r0] + bl ShowStringIdInDialogueBox + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_0204A148: .word _020AFF68 +_0204A14C: .word 0x00000408 +#ifndef JAPAN +_0204A150: .word 0x00000247 +#endif + arm_func_end sub_0204A0FC + + arm_func_start sub_0204A154 +sub_0204A154: ; 0x0204A154 + stmdb sp!, {r3, lr} + ldr r0, _0204A18C ; =_020AFF68 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + bl CloseDialogueBox + ldr r0, _0204A18C ; =_020AFF68 + ldr r0, [r0] + bl MemFree + ldr r0, _0204A18C ; =_020AFF68 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_0204A18C: .word _020AFF68 + arm_func_end sub_0204A154 + + arm_func_start sub_0204A190 +sub_0204A190: ; 0x0204A190 + mov r0, #1 + bx lr + arm_func_end sub_0204A190 + + arm_func_start sub_0204A198 +sub_0204A198: ; 0x0204A198 + ldr ip, _0204A1A0 ; =sub_0207B9EC + bx ip + .align 2, 0 +_0204A1A0: .word sub_0207B9EC + arm_func_end sub_0204A198 + + arm_func_start sub_0204A1A4 +sub_0204A1A4: ; 0x0204A1A4 + stmdb sp!, {r3, lr} + ldr r0, _0204A1C4 ; =_022AAEAC +#ifdef JAPAN + mov r1, #0x1a0 +#else + mov r1, #0x1f0 +#endif + bl MemZero + ldr r1, _0204A1C4 ; =_022AAEAC + ldr r0, _0204A1C8 ; =_020AFF6C + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_0204A1C4: .word _022AAEAC +_0204A1C8: .word _020AFF6C + arm_func_end sub_0204A1A4 + + arm_func_start sub_0204A1CC +sub_0204A1CC: ; 0x0204A1CC + ldr r0, _0204A1D8 ; =_020AFF6C + ldr r0, [r0] + bx lr + .align 2, 0 +_0204A1D8: .word _020AFF6C + arm_func_end sub_0204A1CC + + arm_func_start sub_0204A1DC +sub_0204A1DC: ; 0x0204A1DC +#ifdef JAPAN +#define SUB_0204A1DC_OFFSET -0x50 +#else +#define SUB_0204A1DC_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x14 + mov r3, r0 + mov r2, r1 + add r0, sp, #4 + mov r1, r3 + bl sub_02050974 + ldr r1, _0204A3E0 ; =_020AFF6C + add r0, sp, #4 + ldr r1, [r1] + mov r2, #0x200 + bl CopyBitsFrom +#ifdef JAPAN + ldr r4, _0204A3E0 ; =_020AFF6C + mov r7, #0 + add r6, sp, #4 + mov r5, #0x28 +_0204A220: + ldr r0, [r4] + add r1, r7, r7, lsl #2 + add r3, r0, #0x40 + mov r0, r6 + mov r2, r5 + add r1, r3, r1 + bl CopyBitsFrom + add r7, r7, #1 + cmp r7, #0x10 +#else + ldr r5, _0204A3E0 ; =_020AFF6C + mov r8, #0 + add r7, sp, #4 + mov r6, #0x50 + mov r4, #0xa +_0204A220: + ldr r1, [r5] + mov r0, r7 + add r1, r1, #0x40 + mla r1, r8, r4, r1 + mov r2, r6 + bl CopyBitsFrom + add r8, r8, #1 + cmp r8, #0x10 +#endif + blt _0204A220 + ldr r5, _0204A3E0 ; =_020AFF6C + mov r8, #0 + add r7, sp, #4 + mov r6, #0x60 + mov r4, #0xc +_0204A258: + ldr r1, [r5] + mov r0, r7 + add r1, r1, #0xe0 + SUB_0204A1DC_OFFSET + mla r1, r8, r4, r1 + mov r2, r6 + bl CopyBitsFrom + add r8, r8, #1 + cmp r8, #0x10 + blt _0204A258 + mov sb, #0 + mov r5, #1 + ldr sl, _0204A3E0 ; =_020AFF6C + mov r4, sb + add r8, sp, #4 + add r7, sp, #0 + mov r6, r5 +_0204A298: + mov r0, r8 + mov r1, r7 + mov r2, r6 + bl CopyBitsFrom + ldrb r0, [sp] + cmp r0, #0 + ldr r0, [sl] + movne r1, r5 + add r0, r0, sb + moveq r1, r4 + add sb, sb, #1 + strb r1, [r0, #0x1a0 + SUB_0204A1DC_OFFSET] + cmp sb, #0x10 + blt _0204A298 + ldr r1, _0204A3E0 ; =_020AFF6C + add r0, sp, #4 + ldr r1, [r1] + mov r2, #0x1b0 + add r1, r1, #0x1b0 + SUB_0204A1DC_OFFSET + bl CopyBitsFrom + ldr r1, _0204A3E0 ; =_020AFF6C + add r0, sp, #4 + ldr r1, [r1] + mov r2, #0xe + add r1, r1, #0xe6 + SUB_0204A1DC_OFFSET + add r1, r1, #0x100 + bl CopyBitsFrom + ldr r1, _0204A3E0 ; =_020AFF6C + add r0, sp, #4 + ldr r1, [r1] + mov r2, #0xe + add r1, r1, #0x1e8 + SUB_0204A1DC_OFFSET + bl CopyBitsFrom + add r0, sp, #4 + add r1, sp, #0 + mov r2, #1 + bl CopyBitsFrom + ldrb r0, [sp] + ldr r1, _0204A3E0 ; =_020AFF6C + cmp r0, #0 + movne r3, #1 + ldr r2, [r1] + moveq r3, #0 + strb r3, [r2, #0x1ea + SUB_0204A1DC_OFFSET] + add r0, sp, #4 + add r1, sp, #0 + mov r2, #1 + bl CopyBitsFrom + ldrb r0, [sp] + ldr r1, _0204A3E0 ; =_020AFF6C + cmp r0, #0 + movne r3, #1 + ldr r2, [r1] + moveq r3, #0 + strb r3, [r2, #0x1eb + SUB_0204A1DC_OFFSET] + add r0, sp, #4 + add r1, sp, #0 + mov r2, #1 + bl CopyBitsFrom + ldrb r0, [sp] + ldr r1, _0204A3E0 ; =_020AFF6C + cmp r0, #0 + movne r3, #1 + ldr r2, [r1] + moveq r3, #0 + strb r3, [r2, #0x1ec + SUB_0204A1DC_OFFSET] + add r0, sp, #4 + add r1, sp, #0 + mov r2, #1 + bl CopyBitsFrom + ldrb r0, [sp] + ldr r1, _0204A3E0 ; =_020AFF6C + cmp r0, #0 + movne r2, #1 + ldr r1, [r1] + moveq r2, #0 + add r0, sp, #4 + strb r2, [r1, #0x1ed + SUB_0204A1DC_OFFSET] + bl sub_020509BC + ldr r0, [sp, #0xc] + add sp, sp, #0x14 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_0204A3E0: .word _020AFF6C + arm_func_end sub_0204A1DC + + arm_func_start sub_0204A3E4 +sub_0204A3E4: ; 0x0204A3E4 +#ifdef JAPAN +#define SUB_0204A3E4_OFFSET -0x50 +#else +#define SUB_0204A3E4_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x14 + mov r5, r0 + mov r2, r1 + mov r4, #0xff + mov r3, #0 + add r0, sp, #4 + mov r1, r5 + strb r4, [sp, #1] + strb r3, [sp] + bl sub_02050990 + ldr r1, _0204A5CC ; =_020AFF6C + add r0, sp, #4 + ldr r1, [r1] + mov r2, #0x200 + bl CopyBitsTo +#ifdef JAPAN + ldr r4, _0204A5CC ; =_020AFF6C + mov r7, #0 + add r6, sp, #4 + mov r5, #0x28 +_0204A438: + ldr r0, [r4] + add r1, r7, r7, lsl #2 + add r3, r0, #0x40 + mov r0, r6 + mov r2, r5 + add r1, r3, r1 + bl CopyBitsTo + add r7, r7, #1 + cmp r7, #0x10 +#else + ldr r5, _0204A5CC ; =_020AFF6C + mov r8, #0 + add r7, sp, #4 + mov r6, #0x50 + mov r4, #0xa +_0204A438: + ldr r1, [r5] + mov r0, r7 + add r1, r1, #0x40 + mla r1, r8, r4, r1 + mov r2, r6 + bl CopyBitsTo + add r8, r8, #1 + cmp r8, #0x10 +#endif + blt _0204A438 + ldr r5, _0204A5CC ; =_020AFF6C + mov r8, #0 + add r7, sp, #4 + mov r6, #0x60 + mov r4, #0xc +_0204A470: + ldr r1, [r5] + mov r0, r7 + add r1, r1, #0xe0 + SUB_0204A3E4_OFFSET + mla r1, r8, r4, r1 + mov r2, r6 + bl CopyBitsTo + add r8, r8, #1 + cmp r8, #0x10 + blt _0204A470 + ldr r5, _0204A5CC ; =_020AFF6C + mov r4, #0 + add r8, sp, #0 + add sb, sp, #1 + add r7, sp, #4 + mov r6, #1 +_0204A4AC: + ldr r0, [r5] + mov r2, r6 + add r0, r0, r4 + ldrb r0, [r0, #0x1a0 + SUB_0204A3E4_OFFSET] + cmp r0, #0 + movne r1, sb + moveq r1, r8 + mov r0, r7 + bl CopyBitsTo + add r4, r4, #1 + cmp r4, #0x10 + blt _0204A4AC + ldr r1, _0204A5CC ; =_020AFF6C + add r0, sp, #4 + ldr r1, [r1] + mov r2, #0x1b0 + add r1, r1, #0x1b0 + SUB_0204A3E4_OFFSET + bl CopyBitsTo + ldr r1, _0204A5CC ; =_020AFF6C + add r0, sp, #4 + ldr r1, [r1] + mov r2, #0xe + add r1, r1, #0xe6 + SUB_0204A3E4_OFFSET + add r1, r1, #0x100 + bl CopyBitsTo + ldr r1, _0204A5CC ; =_020AFF6C + add r0, sp, #4 + ldr r1, [r1] + mov r2, #0xe + add r1, r1, #0x1e8 + SUB_0204A3E4_OFFSET + bl CopyBitsTo + ldr r0, _0204A5CC ; =_020AFF6C + mov r2, #1 + ldr r0, [r0] + ldrb r0, [r0, #0x1ea + SUB_0204A3E4_OFFSET] + cmp r0, #0 + addne r1, sp, #1 + addeq r1, sp, #0 + add r0, sp, #4 + bl CopyBitsTo + ldr r0, _0204A5CC ; =_020AFF6C + mov r2, #1 + ldr r0, [r0] + ldrb r0, [r0, #0x1eb + SUB_0204A3E4_OFFSET] + cmp r0, #0 + addne r1, sp, #1 + addeq r1, sp, #0 + add r0, sp, #4 + bl CopyBitsTo + ldr r0, _0204A5CC ; =_020AFF6C + mov r2, #1 + ldr r0, [r0] + ldrb r0, [r0, #0x1ec + SUB_0204A3E4_OFFSET] + cmp r0, #0 + addne r1, sp, #1 + addeq r1, sp, #0 + add r0, sp, #4 + bl CopyBitsTo + ldr r0, _0204A5CC ; =_020AFF6C + mov r2, #1 + ldr r0, [r0] + ldrb r0, [r0, #0x1ed + SUB_0204A3E4_OFFSET] + cmp r0, #0 + addne r1, sp, #1 + addeq r1, sp, #0 + add r0, sp, #4 + bl CopyBitsTo + add r0, sp, #4 + bl sub_020509BC + ldr r0, [sp, #0xc] + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0204A5CC: .word _020AFF6C + arm_func_end sub_0204A3E4 + + arm_func_start sub_0204A5D0 +sub_0204A5D0: ; 0x0204A5D0 + stmdb sp!, {r4, lr} + bl sub_02084304 + bl OS_GetLockID + mov r4, r0 + mov r0, r4, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0208346C + ldr r0, _0204A61C ; =0x00001101 + bl sub_02083B3C + bl sub_02083B14 + ldr r2, _0204A620 ; =_022AB09C + mov r1, r4, lsl #0x10 + str r0, [r2] + mov r0, r1, lsr #0x10 + bl sub_0208347C + mov r0, r4, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_02079094 + ldmia sp!, {r4, pc} + .align 2, 0 +_0204A61C: .word 0x00001101 +_0204A620: .word _022AB09C + arm_func_end sub_0204A5D0 + + arm_func_start sub_0204A624 +sub_0204A624: ; 0x0204A624 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x14 + sub sp, sp, #0x400 + bl sub_02083B00 + and r0, r0, #0xff + cmp r0, #1 + bne _0204A720 + mov r1, #0 + mov r0, #0xff + add r8, sp, #0x14 +_0204A64C: + strb r0, [r8, r1] + add r1, r1, #1 + cmp r1, #0x400 + blt _0204A64C + mov r7, #0 + mov fp, r7 +_0204A664: + mov r6, #0 + mov sb, r7, lsl #8 + b _0204A70C +_0204A670: + bl OS_GetLockID + mov r5, r0 + bl sub_02002580 + mov r4, r0 + mov r0, r5, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0208346C + mov r0, r4 + mov r1, #0x13 + bl sub_020027F8 + str fp, [sp] + mov sl, r0 + str fp, [sp, #4] + mov r1, #8 + str r1, [sp, #8] + mov r1, #0xa + str r1, [sp, #0xc] + mov r1, #2 + str r1, [sp, #0x10] + mov r0, r8 + mov r1, sb + mov r2, #0x400 + mov r3, fp + bl sub_02083A18 + mov r1, sl + mov sl, r0 + mov r0, r4 + bl sub_020027F8 + mov r0, r5, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0208347C + mov r0, r5, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_02079094 + cmp sl, #0 + bne _0204A714 + mov r0, #0 + bl CardPullOutWithStatus + add r6, r6, #1 +_0204A70C: + cmp r6, #4 + blt _0204A670 +_0204A714: + add r7, r7, #1 + cmp r7, #0x100 + blt _0204A664 +_0204A720: + add sp, sp, #0x14 + add sp, sp, #0x400 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end sub_0204A624 + + arm_func_start sub_0204A72C +sub_0204A72C: ; 0x0204A72C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x18 + sub sp, sp, #0x400 + mov r0, #0x400 + bl RandInt + str r0, [sp, #0x14] + bl sub_02083B00 + and r0, r0, #0xff + cmp r0, #1 + bne _0204A8D4 + mov r2, #0 + mov r1, #0xff +_0204A75C: + add r0, sp, #0x18 + strb r1, [r0, r2] + add r2, r2, #1 + cmp r2, #0x400 + blt _0204A75C + mov r5, #0 +_0204A774: + mov r1, r5, lsr #0x1f + rsb r0, r1, r5, lsl #22 + mov r8, r5, lsl #8 + add sb, r1, r0, ror #22 + mov r4, #0 + b _0204A8C0 +_0204A78C: + bl OS_GetLockID + mov r6, r0 + bl sub_02002580 + mov r7, r0 + mov r0, r6, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0208346C + mov r0, r7 + mov r1, #0x13 + bl sub_020027F8 + mov r1, #0 + str r1, [sp] + str r1, [sp, #4] + mov r1, #6 + str r1, [sp, #8] + mov r1, #1 + str r1, [sp, #0xc] + mov r1, #0 + str r1, [sp, #0x10] + mov fp, r0 + mov r0, r8 + add r1, sp, #0x18 + mov r2, #0x400 + mov r3, #0 + bl sub_02083A18 + cmp r0, #0 + beq _0204A820 + mov r0, r7 + mov r1, fp + bl sub_020027F8 + mov r0, r6, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0208347C + mov r0, r6, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_02079094 + b _0204A8C8 +_0204A820: + ldr r0, [sp, #0x14] + cmp sb, r0 + bne _0204A84C + mov sl, #0 +_0204A830: + mov r0, #0x100 + bl RandInt + add r1, sp, #0x18 + strb r0, [r1, sl] + add sl, sl, #1 + cmp sl, #0x400 + blt _0204A830 +_0204A84C: + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r0, #0xa + str r0, [sp, #0xc] + mov r0, #2 + str r0, [sp, #0x10] + add r0, sp, #0x18 + mov r1, r8 + mov r2, #0x400 + mov r3, #0 + bl sub_02083A18 + mov sl, r0 + mov r1, fp + mov r0, r7 + bl sub_020027F8 + mov r0, r6, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0208347C + mov r0, r6, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_02079094 + cmp sl, #0 + bne _0204A8C8 + mov r0, #0 + bl CardPullOutWithStatus + add r4, r4, #1 +_0204A8C0: + cmp r4, #4 + blt _0204A78C +_0204A8C8: + add r5, r5, #1 + cmp r5, #0x100 + blt _0204A774 +_0204A8D4: + add sp, sp, #0x18 + add sp, sp, #0x400 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end sub_0204A72C + + arm_func_start sub_0204A8E0 +sub_0204A8E0: ; 0x0204A8E0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x14 + mov r4, r0 + mov sb, r1 + mov r8, r2 + bl sub_02083B00 + and r0, r0, #0xff + cmp r0, #1 + movne r0, #3 + bne _0204A9C0 + mov r6, #0 + mov r7, r4, lsl #8 + mov fp, r6 + b _0204A9B4 +_0204A918: + bl OS_GetLockID + mov r5, r0 + bl sub_02002580 + mov r4, r0 + mov r0, r5, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0208346C + mov r0, r4 + mov r1, #0x13 + bl sub_020027F8 + str fp, [sp] + mov sl, r0 + str fp, [sp, #4] + mov r1, #6 + str r1, [sp, #8] + mov r1, #1 + str r1, [sp, #0xc] + mov r0, r7 + mov r1, sb + mov r2, r8 + mov r3, fp + str fp, [sp, #0x10] + bl sub_02083A18 + mov r1, sl + mov sl, r0 + mov r0, r4 + bl sub_020027F8 + mov r0, r5, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0208347C + mov r0, r5, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_02079094 + cmp sl, #0 + movne r0, #0 + bne _0204A9C0 + mov r0, #0 + bl CardPullOutWithStatus + add r6, r6, #1 +_0204A9B4: + cmp r6, #4 + blt _0204A918 + mov r0, #3 +_0204A9C0: + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end sub_0204A8E0 + + arm_func_start sub_0204A9C8 +sub_0204A9C8: ; 0x0204A9C8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x214 + mov r4, r0 + mov sb, r1 + mov r8, r2 + bl sub_02083B00 + and r0, r0, #0xff + cmp r0, #1 + movne r0, #3 + bne _0204AB10 + mov r7, r4, lsl #8 + mov r6, #0 + mov fp, #6 + b _0204AB04 +_0204AA00: + bl OS_GetLockID + mov r5, r0 + bl sub_02002580 + mov r1, #0x13 + mov r4, r0 + bl sub_020027F8 + mov sl, r0 + mov r0, r5, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0208346C + mov r0, #0 + str r0, [sp] + stmib sp, {r0, fp} + mov r0, #1 + str r0, [sp, #0xc] + mov r0, #0 + str r0, [sp, #0x10] + mov r0, r7 + add r1, sp, #0x14 + mov r2, #0x80 + mov r3, #0 + bl sub_02083A18 + cmp r0, #0 + bne _0204AA8C + mov r0, r4 + mov r1, sl + bl sub_020027F8 + mov r0, r5, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0208347C + mov r0, r5, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_02079094 + mov r0, #4 + b _0204AB10 +_0204AA8C: + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r0, #0xa + str r0, [sp, #0xc] + mov r0, #2 + str r0, [sp, #0x10] + mov r0, sb + mov r1, r7 + mov r2, r8 + mov r3, #0 + bl sub_02083A18 + mov r1, sl + mov sl, r0 + mov r0, r4 + bl sub_020027F8 + mov r0, r5, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0208347C + mov r0, r5, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_02079094 + cmp sl, #0 + movne r0, #0 + bne _0204AB10 + mov r0, #0 + bl CardPullOutWithStatus + add r6, r6, #1 +_0204AB04: + cmp r6, #4 + blt _0204AA00 + mov r0, #3 +_0204AB10: + add sp, sp, #0x214 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end sub_0204A9C8 + + arm_func_start sub_0204AB18 +sub_0204AB18: ; 0x0204AB18 + ldr ip, _0204AB20 ; =sub_0204AB24 + bx ip + .align 2, 0 +_0204AB20: .word sub_0204AB24 + arm_func_end sub_0204AB18 + + arm_func_start sub_0204AB24 +sub_0204AB24: ; 0x0204AB24 + stmdb sp!, {r3} + sub sp, sp, #4 + ldr r0, _0204AB74 ; =_022AB0A0 + mov r1, #2 + mov r2, #0 + strb r1, [r0] + strb r2, [r0, #2] + mov r1, #1 + strb r1, [r0, #1] + strb r1, [r0, #3] + strb r2, [r0, #4] + strb r1, [r0, #5] + strb r1, [r0, #6] + strb r2, [r0, #7] + strb r2, [r0, #8] + strb r2, [sp] + strb r2, [r0, #9] + add sp, sp, #4 + ldmia sp!, {r3} + bx lr + .align 2, 0 +_0204AB74: .word _022AB0A0 + arm_func_end sub_0204AB24 + + arm_func_start sub_0204AB78 +sub_0204AB78: ; 0x0204AB78 + ldr r3, _0204AB94 ; =_022AB0A0 + mov r2, #0xa +_0204AB80: + ldrb r1, [r3], #1 + subs r2, r2, #1 + strb r1, [r0], #1 + bne _0204AB80 + bx lr + .align 2, 0 +_0204AB94: .word _022AB0A0 + arm_func_end sub_0204AB78 + + arm_func_start sub_0204AB98 +sub_0204AB98: ; 0x0204AB98 + ldr r3, _0204ABB4 ; =_022AB0A0 + mov r2, #0xa +_0204ABA0: + ldrb r1, [r0], #1 + subs r2, r2, #1 + strb r1, [r3], #1 + bne _0204ABA0 + bx lr + .align 2, 0 +_0204ABB4: .word _022AB0A0 + arm_func_end sub_0204AB98 + + arm_func_start sub_0204ABB8 +sub_0204ABB8: ; 0x0204ABB8 + stmdb sp!, {r4, lr} + ldr r1, _0204ACC0 ; =_022AB0A0 + mov r2, #2 + mov r4, r0 + bl CopyBitsTo + ldr r1, _0204ACC4 ; =_022AB0A2 + mov r0, r4 + mov r2, #3 + bl CopyBitsTo + ldr r1, _0204ACC8 ; =_022AB0A1 + mov r0, r4 + mov r2, #2 + bl CopyBitsTo + ldr r0, _0204ACCC ; =_022AB0A0 + mov r2, #1 + ldrb r0, [r0, #3] + cmp r0, #0 + ldrne r1, _0204ACD0 ; =_0209CE88 + mov r0, r4 + ldreq r1, _0204ACD4 ; =_0209CE89 + bl CopyBitsTo + ldr r0, _0204ACCC ; =_022AB0A0 + mov r2, #1 + ldrb r0, [r0, #4] + cmp r0, #0 + ldrne r1, _0204ACD0 ; =_0209CE88 + mov r0, r4 + ldreq r1, _0204ACD4 ; =_0209CE89 + bl CopyBitsTo + ldr r0, _0204ACCC ; =_022AB0A0 + mov r2, #1 + ldrb r0, [r0, #5] + cmp r0, #0 + ldrne r1, _0204ACD0 ; =_0209CE88 + mov r0, r4 + ldreq r1, _0204ACD4 ; =_0209CE89 + bl CopyBitsTo + ldr r0, _0204ACCC ; =_022AB0A0 + mov r2, #1 + ldrb r0, [r0, #6] + cmp r0, #0 + ldrne r1, _0204ACD0 ; =_0209CE88 + mov r0, r4 + ldreq r1, _0204ACD4 ; =_0209CE89 + bl CopyBitsTo + ldr r0, _0204ACCC ; =_022AB0A0 + mov r2, #1 + ldrb r0, [r0, #7] + cmp r0, #0 + ldrne r1, _0204ACD0 ; =_0209CE88 + mov r0, r4 + ldreq r1, _0204ACD4 ; =_0209CE89 + bl CopyBitsTo + ldr r0, _0204ACCC ; =_022AB0A0 + mov r2, #1 + ldrb r0, [r0, #8] + cmp r0, #0 + ldrne r1, _0204ACD0 ; =_0209CE88 + mov r0, r4 + ldreq r1, _0204ACD4 ; =_0209CE89 + bl CopyBitsTo + ldr r1, _0204ACD8 ; =_022AB0A9 + mov r0, r4 + mov r2, #3 + bl CopyBitsTo + ldmia sp!, {r4, pc} + .align 2, 0 +_0204ACC0: .word _022AB0A0 +_0204ACC4: .word _022AB0A2 +_0204ACC8: .word _022AB0A1 +_0204ACCC: .word _022AB0A0 +_0204ACD0: .word _0209CE88 +_0204ACD4: .word _0209CE89 +_0204ACD8: .word _022AB0A9 + arm_func_end sub_0204ABB8 + + arm_func_start sub_0204ACDC +sub_0204ACDC: ; 0x0204ACDC + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + add r1, sp, #0 + mov r2, #2 + mov r4, r0 + bl CopyBitsFrom + ldrb r0, [sp] + ldr r3, _0204AE5C ; =_022AB0A0 + add r1, sp, #0 + and ip, r0, #3 + mov r0, r4 + mov r2, #3 + strb ip, [r3] + bl CopyBitsFrom + ldrb r0, [sp] + ldr r3, _0204AE5C ; =_022AB0A0 + add r1, sp, #0 + and ip, r0, #7 + mov r0, r4 + mov r2, #2 + strb ip, [r3, #2] + bl CopyBitsFrom + ldrb r0, [sp] + ldr r2, _0204AE5C ; =_022AB0A0 + add r1, sp, #0 + and r3, r0, #3 + strb r3, [r2, #1] + mov r0, r4 + mov r2, #1 + bl CopyBitsFrom + ldrb r0, [sp] + ldr r3, _0204AE5C ; =_022AB0A0 + add r1, sp, #0 + tst r0, #1 + movne ip, #1 + moveq ip, #0 + mov r0, r4 + mov r2, #1 + strb ip, [r3, #3] + bl CopyBitsFrom + ldrb r0, [sp] + ldr r3, _0204AE5C ; =_022AB0A0 + add r1, sp, #0 + tst r0, #1 + movne ip, #1 + moveq ip, #0 + mov r0, r4 + mov r2, #1 + strb ip, [r3, #4] + bl CopyBitsFrom + ldrb r0, [sp] + ldr r2, _0204AE5C ; =_022AB0A0 + add r1, sp, #0 + tst r0, #1 + movne r3, #1 + moveq r3, #0 + strb r3, [r2, #5] + mov r0, r4 + mov r2, #1 + bl CopyBitsFrom + ldrb r0, [sp] + ldr r2, _0204AE5C ; =_022AB0A0 + add r1, sp, #0 + tst r0, #1 + movne r3, #1 + moveq r3, #0 + strb r3, [r2, #6] + mov r0, r4 + mov r2, #1 + bl CopyBitsFrom + ldrb r0, [sp] + ldr r2, _0204AE5C ; =_022AB0A0 + add r1, sp, #0 + tst r0, #1 + movne r3, #1 + moveq r3, #0 + strb r3, [r2, #7] + mov r0, r4 + mov r2, #1 + bl CopyBitsFrom + ldrb r0, [sp] + ldr r2, _0204AE5C ; =_022AB0A0 + add r1, sp, #0 + tst r0, #1 + movne r3, #1 + moveq r3, #0 + strb r3, [r2, #8] + mov r0, r4 + mov r2, #3 + bl CopyBitsFrom + ldrb r1, [sp] + ldr r0, _0204AE5C ; =_022AB0A0 + and r1, r1, #7 + strb r1, [r0, #9] + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_0204AE5C: .word _022AB0A0 + arm_func_end sub_0204ACDC + + arm_func_start sub_0204AE60 +sub_0204AE60: ; 0x0204AE60 + ldr r0, _0204AE7C ; =_022AB0A0 + ldrb r0, [r0] + cmp r0, #1 + movhs r0, #1 + movlo r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_0204AE7C: .word _022AB0A0 + arm_func_end sub_0204AE60 + + arm_func_start sub_0204AE80 +sub_0204AE80: ; 0x0204AE80 + ldr r0, _0204AE9C ; =_022AB0A0 + ldrb r0, [r0] + cmp r0, #2 + movhs r0, #1 + movlo r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_0204AE9C: .word _022AB0A0 + arm_func_end sub_0204AE80 + + arm_func_start sub_0204AEA0 +sub_0204AEA0: ; 0x0204AEA0 + ldr r0, _0204AEAC ; =_022AB0A0 + ldrb r0, [r0, #2] + bx lr + .align 2, 0 +_0204AEAC: .word _022AB0A0 + arm_func_end sub_0204AEA0 + + arm_func_start sub_0204AEB0 +sub_0204AEB0: ; 0x0204AEB0 + ldr r1, _0204AEBC ; =_022AB0A0 + strb r0, [r1, #2] + bx lr + .align 2, 0 +_0204AEBC: .word _022AB0A0 + arm_func_end sub_0204AEB0 + + arm_func_start sub_0204AEC0 +sub_0204AEC0: ; 0x0204AEC0 + ldr r0, _0204AECC ; =_022AB0A0 + ldrb r0, [r0, #1] + bx lr + .align 2, 0 +_0204AECC: .word _022AB0A0 + arm_func_end sub_0204AEC0 + + arm_func_start sub_0204AED0 +sub_0204AED0: ; 0x0204AED0 + ldr r0, _0204AEDC ; =_022AB0A0 + ldrb r0, [r0, #3] + bx lr + .align 2, 0 +_0204AEDC: .word _022AB0A0 + arm_func_end sub_0204AED0 + + arm_func_start sub_0204AEE0 +sub_0204AEE0: ; 0x0204AEE0 + ldr r0, _0204AEEC ; =_022AB0A0 + ldrb r0, [r0, #4] + bx lr + .align 2, 0 +_0204AEEC: .word _022AB0A0 + arm_func_end sub_0204AEE0 + + arm_func_start sub_0204AEF0 +sub_0204AEF0: ; 0x0204AEF0 + ldr r0, _0204AEFC ; =_022AB0A0 + ldrb r0, [r0, #5] + bx lr + .align 2, 0 +_0204AEFC: .word _022AB0A0 + arm_func_end sub_0204AEF0 + + arm_func_start sub_0204AF00 +sub_0204AF00: ; 0x0204AF00 + ldr r0, _0204AF0C ; =_022AB0A0 + ldrb r0, [r0, #6] + bx lr + .align 2, 0 +_0204AF0C: .word _022AB0A0 + arm_func_end sub_0204AF00 + + arm_func_start sub_0204AF10 +sub_0204AF10: ; 0x0204AF10 + ldr r0, _0204AF1C ; =_022AB0A0 + ldrb r0, [r0, #7] + bx lr + .align 2, 0 +_0204AF1C: .word _022AB0A0 + arm_func_end sub_0204AF10 + + arm_func_start sub_0204AF20 +sub_0204AF20: ; 0x0204AF20 + ldr r0, _0204AF2C ; =_022AB0A0 + ldrb r0, [r0, #8] + bx lr + .align 2, 0 +_0204AF2C: .word _022AB0A0 + arm_func_end sub_0204AF20 + + arm_func_start sub_0204AF30 +sub_0204AF30: ; 0x0204AF30 + ldr r0, _0204AF54 ; =_022AB0A0 + ldrb r1, [r0, #1] + cmp r1, #1 + cmpne r1, #2 + ldrneb r0, [r0, #2] + cmpne r0, #3 + moveq r0, #1 + movne r0, #0 + bx lr + .align 2, 0 +_0204AF54: .word _022AB0A0 + arm_func_end sub_0204AF30 + + arm_func_start sub_0204AF58 +sub_0204AF58: ; 0x0204AF58 + ldr r0, _0204AF74 ; =_022AB0A0 + ldrb r0, [r0, #2] + cmp r0, #1 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_0204AF74: .word _022AB0A0 + arm_func_end sub_0204AF58 + + arm_func_start sub_0204AF78 +sub_0204AF78: ; 0x0204AF78 + ldr r0, _0204AF94 ; =_022AB0A0 + ldrb r0, [r0, #2] + cmp r0, #2 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_0204AF94: .word _022AB0A0 + arm_func_end sub_0204AF78 + + arm_func_start sub_0204AF98 +sub_0204AF98: ; 0x0204AF98 + ldr r1, _0204AFA8 ; =_022AB0A0 + ldrb r1, [r1, #9] + strb r1, [r0] + bx lr + .align 2, 0 +_0204AFA8: .word _022AB0A0 + arm_func_end sub_0204AF98 + + arm_func_start sub_0204AFAC +sub_0204AFAC: ; 0x0204AFAC + ldrb r1, [r0] + ldr r0, _0204AFBC ; =_022AB0A0 + strb r1, [r0, #9] + bx lr + .align 2, 0 +_0204AFBC: .word _022AB0A0 + arm_func_end sub_0204AFAC + + arm_func_start GetGameMode +GetGameMode: ; 0x0204AFC0 + ldr r0, _0204AFCC ; =GAME_MODE + ldrb r0, [r0] + bx lr + .align 2, 0 +_0204AFCC: .word GAME_MODE + arm_func_end GetGameMode + + arm_func_start sub_0204AFD0 +sub_0204AFD0: ; 0x0204AFD0 + ldr r0, _0204AFF4 ; =GAME_MODE + ldrb r0, [r0] + add r0, r0, #0xfe + and r0, r0, #0xff + cmp r0, #1 + movls r0, #1 + movhi r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_0204AFF4: .word GAME_MODE + arm_func_end sub_0204AFD0 diff --git a/asm/overlay_17.s b/asm/overlay_17.s index 1153fcb7..b278ca0b 100644 --- a/asm/overlay_17.s +++ b/asm/overlay_17.s @@ -3,6 +3,7 @@ .text +; https://decomp.me/scratch/EJVO7 arm_func_start ov17_0238A140 ov17_0238A140: ; 0x0238A140 stmdb sp!, {r3, r4, r5, lr} diff --git a/asm/overlay_29_022EC62C.s b/asm/overlay_29_022EC62C.s index cea3d214..645a1e55 100644 --- a/asm/overlay_29_022EC62C.s +++ b/asm/overlay_29_022EC62C.s @@ -3,6 +3,7 @@ .text +; https://decomp.me/scratch/y7m40 arm_func_start ov29_022EC62C ov29_022EC62C: ; 0x022EC62C stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} diff --git a/asm/overlay_31_02382FBC.s b/asm/overlay_31_02382FBC.s index fc14e285..b4e19a67 100644 --- a/asm/overlay_31_02382FBC.s +++ b/asm/overlay_31_02382FBC.s @@ -3,7 +3,7 @@ .text -; https://decomp.me/scratch/D2RFJ +; https://decomp.me/scratch/jiDJb arm_func_start HandleStairsMenu HandleStairsMenu: ; 0x02382FBC stmdb sp!, {r4, lr} diff --git a/asm/overlay_31_023833D8.s b/asm/overlay_31_023833D8.s index 17e0bef5..1127e3b7 100644 --- a/asm/overlay_31_023833D8.s +++ b/asm/overlay_31_023833D8.s @@ -3,7 +3,7 @@ .text -; https://decomp.me/scratch/Q183B +; https://decomp.me/scratch/N2omQ arm_func_start ov31_023833D8 ov31_023833D8: ; 0x023833D8 stmdb sp!, {r3, lr} @@ -32,6 +32,7 @@ _0238342C: .word ov31_0238335C _02383430: .word ov31_0238A2A8 arm_func_end ov31_023833D8 +; https://decomp.me/scratch/6f1zw arm_func_start ov31_02383434 ov31_02383434: ; 0x02383434 stmdb sp!, {r3, lr} diff --git a/asm/overlay_31_0238367C.s b/asm/overlay_31_0238367C.s index 6599ddb9..2a2ea868 100644 --- a/asm/overlay_31_0238367C.s +++ b/asm/overlay_31_0238367C.s @@ -214,6 +214,7 @@ _023838A0: _023838E0: .word DUNGEON_PTR arm_func_end ov31_02383880 +; https://decomp.me/scratch/pyVsB arm_func_start ov31_023838E4 ov31_023838E4: ; 0x023838E4 #ifdef JAPAN diff --git a/include/main_0203C760.h b/include/main_0203C760.h new file mode 100644 index 00000000..dd2fc7cb --- /dev/null +++ b/include/main_0203C760.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_0203C760_H +#define PMDSKY_MAIN_0203C760_H + +void sub_0203C760(void); + +#endif //PMDSKY_MAIN_0203C760_H diff --git a/main.lsf b/main.lsf index ee1faf2a..e999a9b3 100644 --- a/main.lsf +++ b/main.lsf @@ -53,6 +53,8 @@ Static main Object asm/main_0202598C.o Object src/main_020348E4.o Object asm/main_02034974.o + Object src/main_0203C760.o + Object asm/main_0203C774.o Object src/main_0204AFF8.o Object asm/main_0204B018.o Object src/number_util.o diff --git a/src/main_0203C760.c b/src/main_0203C760.c new file mode 100644 index 00000000..50286e13 --- /dev/null +++ b/src/main_0203C760.c @@ -0,0 +1,8 @@ +#include "main_0203C760.h" + +extern u32 _020AFE5C[]; + +void sub_0203C760(void) +{ + _020AFE5C[2] = 0; +} From 937ae4a63affb8e4a410d40e8b5ad5c9a4732e79 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 17 Jul 2025 21:47:34 -0400 Subject: [PATCH 07/40] Decomped ov17_0238A71C Decomped by TiredPeanut --- asm/include/overlay_17.inc | 72 +- asm/include/overlay_17_0238A754.inc | 91 ++ asm/overlay_17.s | 1820 --------------------------- asm/overlay_17_0238A754.s | 1805 ++++++++++++++++++++++++++ include/overlay_17_0238A71C.h | 6 + main.lsf | 2 + src/overlay_17_0238A71C.c | 16 + 7 files changed, 1922 insertions(+), 1890 deletions(-) create mode 100644 asm/include/overlay_17_0238A754.inc create mode 100644 asm/overlay_17_0238A754.s create mode 100644 include/overlay_17_0238A71C.h create mode 100644 src/overlay_17_0238A71C.c diff --git a/asm/include/overlay_17.inc b/asm/include/overlay_17.inc index cabd3b40..625fffa8 100644 --- a/asm/include/overlay_17.inc +++ b/asm/include/overlay_17.inc @@ -4,91 +4,23 @@ .public ClosePortraitBox .public CloseScrollBox .public CloseSimpleMenu -.public CreateDialogueBox -.public CreatePortraitBox -.public CreateSimpleMenuFromStringIds -.public GetActiveRosterIndex -.public GetGameMode -.public GetMainCharacter1MemberIdx -.public GetPartnerMemberIdx -.public GetPerformanceFlagWithChecks -.public GetPressedButtons -.public GetSimpleMenuResult -.public GetTeamMember .public HidePortraitBox -.public InitPortraitParamsWithMonsterId .public InitPreprocessorArgs .public IsAdvancedTextBoxActive .public IsDialogueBoxActive -.public IsMainCharacter .public IsScrollBoxActive .public IsSimpleMenuActive .public MemAlloc -.public MemFree -.public ov11_022DC504 -.public ov11_022E6E68 -.public ov11_0238A08C -.public PlaySeVolumeWrapper +.public OVERLAY17_UNKNOWN_POINTER__NA_238BE00 .public PortraitBoxNeedsUpdate -.public PrintIqSkillsMenu .public SetAdvancedTextBoxState5 -.public SetPortraitEmotion -.public SetPortraitLayout .public SetScrollBoxState7 -.public ShowDialogueBox -.public ShowPortraitInPortraitBox -.public ShowStringIdInDialogueBox -.public sub_02017C10 -.public sub_02017C50 +.public ov11_0238A08C .public sub_0202F334 -.public sub_020307EC .public sub_02034A38 -.public sub_02039C3C .public sub_0203A51C -.public sub_0203A5A8 -.public sub_0203A5F0 .public sub_0203A618 -.public sub_0203A638 -.public sub_0203A998 .public sub_0203A9B8 -.public sub_0203A9EC -.public sub_0203AA20 -.public sub_0203AAB0 -.public sub_0203AF0C .public sub_0203C760 -.public sub_0203C7E4 -.public sub_0203C874 -.public sub_0203C8E0 -.public sub_0203C910 -.public sub_0203C940 -.public sub_0203C9C4 -.public sub_0203C9E4 -.public sub_0203F150 -.public sub_0203F398 -.public sub_0203F990 -.public sub_0203FA64 -.public sub_0203FD38 -.public sub_0203FD80 -.public sub_0204018C .public sub_020407C0 -.public sub_020407EC -.public sub_02041094 -.public sub_02041178 -.public sub_020417A8 .public sub_02041A00 -.public sub_02041A18 -.public sub_02041B7C -.public sub_020420F4 -.public sub_02055B20 -.public sub_02056410 -.public sub_020564B0 -.public sub_02056554 -.public sub_020566C4 -.public sub_02056F60 -.public sub_02057180 -.public sub_020572EC -.public sub_02057444 -.public sub_02058138 -.public sub_0205B028 -.public TEAM_MEMBER_TABLE_PTR -.public TryAddMonsterToActiveTeam diff --git a/asm/include/overlay_17_0238A754.inc b/asm/include/overlay_17_0238A754.inc new file mode 100644 index 00000000..dcfe3924 --- /dev/null +++ b/asm/include/overlay_17_0238A754.inc @@ -0,0 +1,91 @@ +#pragma once +.public ASSEMBLY_MAIN_MENU_ITEMS_1 +.public ASSEMBLY_MAIN_MENU_ITEMS_2 +.public ASSEMBLY_MENU_ITEMS_CONFIRM +.public ASSEMBLY_SUBMENU_ITEMS_1 +.public ASSEMBLY_SUBMENU_ITEMS_2 +.public ASSEMBLY_SUBMENU_ITEMS_3 +.public ASSEMBLY_SUBMENU_ITEMS_4 +.public ASSEMBLY_SUBMENU_ITEMS_5 +.public ASSEMBLY_SUBMENU_ITEMS_6 +.public ASSEMBLY_SUBMENU_ITEMS_7 +.public ASSEMBLY_WINDOW_PARAMS_1 +.public ASSEMBLY_WINDOW_PARAMS_2 +.public ASSEMBLY_WINDOW_PARAMS_3 +.public ASSEMBLY_WINDOW_PARAMS_4 +.public ASSEMBLY_WINDOW_PARAMS_5 +.public CreateDialogueBox +.public CreatePortraitBox +.public CreateSimpleMenuFromStringIds +.public GetActiveRosterIndex +.public GetGameMode +.public GetMainCharacter1MemberIdx +.public GetPartnerMemberIdx +.public GetPerformanceFlagWithChecks +.public GetPressedButtons +.public GetSimpleMenuResult +.public GetTeamMember +.public InitPortraitParamsWithMonsterId +.public IsDialogueBoxActive +.public IsMainCharacter +.public IsSimpleMenuActive +.public OVERLAY17_FUNCTION_POINTER_TABLE +.public OVERLAY17_UNKNOWN_POINTER__NA_238BE00 +.public PlaySeVolumeWrapper +.public PrintIqSkillsMenu +.public SetPortraitEmotion +.public SetPortraitLayout +.public ShowDialogueBox +.public ShowPortraitInPortraitBox +.public ShowStringIdInDialogueBox +.public TEAM_MEMBER_TABLE_PTR +.public TryAddMonsterToActiveTeam +.public ov11_022DC504 +.public ov11_022E6E68 +.public ov17_0238A278 +.public ov17_0238A364 +.public sub_02017C10 +.public sub_02017C50 +.public sub_020307EC +.public sub_02039C3C +.public sub_0203A51C +.public sub_0203A5A8 +.public sub_0203A5F0 +.public sub_0203A638 +.public sub_0203A998 +.public sub_0203A9EC +.public sub_0203AA20 +.public sub_0203AAB0 +.public sub_0203AF0C +.public sub_0203C7E4 +.public sub_0203C874 +.public sub_0203C8E0 +.public sub_0203C910 +.public sub_0203C940 +.public sub_0203C9C4 +.public sub_0203C9E4 +.public sub_0203F150 +.public sub_0203F398 +.public sub_0203F990 +.public sub_0203FA64 +.public sub_0203FD38 +.public sub_0203FD80 +.public sub_0204018C +.public sub_020407EC +.public sub_02041094 +.public sub_02041178 +.public sub_020417A8 +.public sub_02041A18 +.public sub_02041B7C +.public sub_020420F4 +.public sub_02055B20 +.public sub_02056410 +.public sub_020564B0 +.public sub_02056554 +.public sub_020566C4 +.public sub_02056F60 +.public sub_02057180 +.public sub_020572EC +.public sub_02057444 +.public sub_02058138 +.public sub_0205B028 diff --git a/asm/overlay_17.s b/asm/overlay_17.s index b278ca0b..01278f4c 100644 --- a/asm/overlay_17.s +++ b/asm/overlay_17.s @@ -417,1823 +417,3 @@ _0238A710: .align 2, 0 _0238A718: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 arm_func_end ov17_0238A364 - - arm_func_start ov17_0238A71C -ov17_0238A71C: ; 0x0238A71C - stmdb sp!, {r3, lr} - ldr r0, _0238A750 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl sub_0203C760 - ldr r0, _0238A750 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - bl MemFree - ldr r0, _0238A750 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238A750: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238A71C - - arm_func_start ov17_0238A754 -ov17_0238A754: ; 0x0238A754 - stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x124 - bl sub_0203C9E4 - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r4, [r0] - ldr r1, [r4, #0x6c] - cmp r1, #3 - addls pc, pc, r1, lsl #2 - b _0238AF90 -_0238A778: ; jump table - b _0238A788 ; case 0 - b _0238AF18 ; case 1 - b _0238AF4C ; case 2 - b _0238AF90 ; case 3 -_0238A788: - ldr r7, _0238AFA0 ; =OVERLAY17_FUNCTION_POINTER_TABLE - add r6, sp, #4 - mov r5, #0xa -_0238A794: - ldmia r7!, {r0, r1, r2, r3} - stmia r6!, {r0, r1, r2, r3} - subs r5, r5, #1 - bne _0238A794 - ldmia r7, {r0, r1} - stmia r6, {r0, r1} - ldr r0, [r4, #0x74] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0238AF10 -_0238A7BC: ; jump table - b _0238A7CC ; case 0 - b _0238A840 ; case 1 - b _0238AEC8 ; case 2 - b _0238A7CC ; case 3 -_0238A7CC: - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0 - str r1, [r4, #0x74] - ldr r1, [r0] - add r0, sp, #4 - ldr r1, [r1, #0x70] - ldr r0, [r0, r1, lsl #2] - blx r0 - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r3, [r0] - ldr r1, [r3, #0x70] - ldr r2, [r3, #0x78] - cmp r1, r2 - beq _0238AF10 - ldr r1, [r3, #0x74] - cmp r1, #3 - bne _0238A828 - str r2, [r3, #0x70] - ldr r1, [r0] - add r0, sp, #4 - ldr r1, [r1, #0x70] - ldr r0, [r0, r1, lsl #2] - blx r0 -_0238A828: - bl ov17_0238A278 - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #1 - ldr r0, [r0] - str r1, [r0, #0x74] - b _0238AF10 -_0238A840: - bl ov17_0238A364 - cmp r0, #0 - beq _0238AF10 - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r2, [r0] - ldrh r0, [r2, #0x7e] - tst r0, #1 - beq _0238AA30 - ldrsb r1, [r2] - mvn r0, #1 - ldrh r5, [r2, #0x7c] - cmp r1, r0 - ldr r4, _0238AFA4 ; =0x00003008 - bne _0238A898 - ldr r0, _0238AFA8 ; =ASSEMBLY_WINDOW_PARAMS_4 - bl CreateDialogueBox - ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r2, #0 - ldr r3, [r1] - strb r0, [r3] - ldr r0, [r1] - strh r2, [r0, #0x7c] -_0238A898: - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - ldrsb r0, [r0] - bl ShowDialogueBox - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r0] - ldr r0, [r1, #0x70] - cmp r0, #0x29 - addls pc, pc, r0, lsl #2 - b _0238A9F8 -_0238A8C0: ; jump table - b _0238A968 ; case 0 - b _0238A9F8 ; case 1 - b _0238A9F8 ; case 2 - b _0238A9F8 ; case 3 - b _0238A9AC ; case 4 - b _0238A9AC ; case 5 - b _0238A97C ; case 6 - b _0238A97C ; case 7 - b _0238A988 ; case 8 - b _0238A994 ; case 9 - b _0238A994 ; case 10 - b _0238A9A0 ; case 11 - b _0238A9F8 ; case 12 - b _0238A9F8 ; case 13 - b _0238A9F8 ; case 14 - b _0238A9F8 ; case 15 - b _0238A9B8 ; case 16 - b _0238A9B8 ; case 17 - b _0238A9B8 ; case 18 - b _0238A9C4 ; case 19 - b _0238A9C4 ; case 20 - b _0238A9D0 ; case 21 - b _0238A9D0 ; case 22 - b _0238A9D0 ; case 23 - b _0238A9DC ; case 24 - b _0238A9DC ; case 25 - b _0238A9DC ; case 26 - b _0238A9E4 ; case 27 - b _0238A9E4 ; case 28 - b _0238A9E4 ; case 29 - b _0238A9F8 ; case 30 - b _0238A9F8 ; case 31 - b _0238A9F8 ; case 32 - b _0238A9F8 ; case 33 - b _0238A9F8 ; case 34 - b _0238A9F8 ; case 35 - b _0238A9F8 ; case 36 - b _0238A9F8 ; case 37 - b _0238A9F8 ; case 38 - b _0238A9F8 ; case 39 - b _0238A9F0 ; case 40 - b _0238A9F0 ; case 41 -_0238A968: - ldrb r0, [r1, #9] - cmp r0, #0 -#ifdef JAPAN - movne r5, #0x3d00 -#else - ldrne r5, _0238AFAC ; =0x0000041E -#endif - ldreq r5, _0238AFB0 ; =0x0000041F - b _0238A9F8 -_0238A97C: - ldr r5, _0238AFB4 ; =0x00000425 - ldr r4, _0238AFB8 ; =0x00003018 - b _0238A9F8 -_0238A988: - ldr r5, _0238AFBC ; =0x00000426 -#ifdef JAPAN - sub r4, r5, #0xcf0 -#else - ldr r4, _0238AFB8 ; =0x00003018 -#endif - b _0238A9F8 -_0238A994: - ldr r5, _0238AFC0 ; =0x00000427 - ldr r4, _0238AFB8 ; =0x00003018 - b _0238A9F8 -_0238A9A0: - ldr r5, _0238AFC4 ; =0x00000428 -#ifdef JAPAN - ldr r4, _0238AFB8 ; =0x00003018 -#else - rsb r4, r5, #0x3440 -#endif - b _0238A9F8 -_0238A9AC: - ldr r5, _0238AFC8 ; =0x00000429 - ldr r4, _0238AFB8 ; =0x00003018 - b _0238A9F8 -_0238A9B8: -#ifdef JAPAN - ldr r5, _0238C528 ; =0x00003D02 -#else - mov r5, #0x420 -#endif - ldr r4, _0238AFB8 ; =0x00003018 - b _0238A9F8 -_0238A9C4: - ldr r5, _0238AFCC ; =0x00000422 - ldr r4, _0238AFB8 ; =0x00003018 - b _0238A9F8 -_0238A9D0: - ldr r5, _0238AFD0 ; =0x00000421 - ldr r4, _0238AFB8 ; =0x00003018 - b _0238A9F8 -_0238A9DC: - ldr r5, _0238AFD4 ; =0x00000423 - b _0238A9F8 -_0238A9E4: - ldr r5, _0238AFD8 ; =0x00000424 - ldr r4, _0238AFB8 ; =0x00003018 - b _0238A9F8 -_0238A9F0: - ldr r5, _0238AFDC ; =0x0000042A - ldr r4, _0238AFB8 ; =0x00003018 -_0238A9F8: - ldrh r0, [r1, #0x7c] - cmp r0, r5 - beq _0238AA30 - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - strh r5, [r1, #0x7c] - ldr r2, [r0] - ldr r3, _0238AFE0 ; =0x00000186 - mov r1, r4 - str r3, [r2, #0x58] - ldr r3, [r0] - ldrsb r0, [r3] - ldrh r2, [r3, #0x7c] - add r3, r3, #0xc - bl ShowStringIdInDialogueBox -_0238AA30: - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r0] - ldrh r0, [r1, #0x7e] - tst r0, #2 - beq _0238AABC - ldrsb r1, [r1, #1] - mvn r0, #1 - cmp r1, r0 - bne _0238AABC - mov r0, #0 - mov r1, #3 - mov r2, #1 - bl CreatePortraitBox - ldr r2, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, _0238AFE0 ; =0x00000186 - ldr r3, [r2] - strb r0, [r3, #1] - ldr r0, [r2] - add r0, r0, #0x5c - bl InitPortraitParamsWithMonsterId - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x5c - bl SetPortraitLayout - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x5c - bl SetPortraitEmotion - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r0] - ldrsb r0, [r1, #1] - add r1, r1, #0x5c - bl ShowPortraitInPortraitBox -_0238AABC: - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r0] - ldrh r0, [r1, #0x7e] - tst r0, #4 - beq _0238AB04 - ldrsb r1, [r1, #2] - mvn r0, #1 - cmp r1, r0 - bne _0238AB04 - ldr r0, _0238AFE4 ; =ASSEMBLY_WINDOW_PARAMS_1 - mov r2, #0 - ldr r1, _0238AFE8 ; =0x00300013 - ldr r3, _0238AFEC ; =ASSEMBLY_MAIN_MENU_ITEMS_2 - str r2, [sp] - bl CreateSimpleMenuFromStringIds - ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r1] - strb r0, [r1, #2] -_0238AB04: - ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r3, [r1] - ldrh r0, [r3, #0x7e] - tst r0, #0x10 - beq _0238AB5C - ldrsb r2, [r3, #3] - mvn r0, #1 - cmp r2, r0 - bne _0238AB5C - mov r0, #1 - str r0, [r3, #0x1b4] - mov r0, #0 - str r0, [sp] - ldr r2, [r1] - ldr r0, _0238AFF0 ; =ASSEMBLY_WINDOW_PARAMS_3 - ldr r1, _0238AFF4 ; =0x00300033 - ldr r3, _0238AFF8 ; =ASSEMBLY_MENU_ITEMS_CONFIRM - add r2, r2, #0x1b4 - bl CreateSimpleMenuFromStringIds - ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r1] - strb r0, [r1, #3] -_0238AB5C: - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - ldrh r0, [r0, #0x7e] - tst r0, #0x20 - beq _0238AB94 - bl sub_0203A998 - cmp r0, #0 - bne _0238AB94 - ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r0, #1 - ldr r1, [r1] - add r1, r1, #0x5a - add r1, r1, #0x200 - bl sub_02039C3C -_0238AB94: - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r2, [r0] - ldrh r0, [r2, #0x7e] - tst r0, #8 - beq _0238AD90 - ldrsb r1, [r2, #4] - mvn r0, #1 - cmp r1, r0 - bne _0238AD90 - add r0, r2, #0x200 - ldrsh r6, [r0, #0x58] - mov r0, r6 - bl GetTeamMember - mov r4, r0 - mov r0, r6 - bl sub_020564B0 - cmp r0, #0 - ldrne r7, _0238AFFC ; =ASSEMBLY_SUBMENU_ITEMS_1 - bne _0238ACEC - mov r0, r6 - bl IsMainCharacter - mov r8, r0 - mov r0, r6 - bl sub_02056410 - mov r7, r0 - mov r5, #0 - bl GetGameMode - cmp r0, #4 - beq _0238AC14 - bl GetGameMode - cmp r0, #5 - bne _0238AC1C -_0238AC14: - mov r5, #1 - b _0238AC28 -_0238AC1C: - ldrsh r0, [r4, #4] - cmp r0, #0x214 - moveq r5, #1 -_0238AC28: - mov r0, #0x14 - bl GetPerformanceFlagWithChecks - cmp r0, #0 - beq _0238AC84 - bl GetGameMode - cmp r0, #3 - beq _0238AC84 - cmp r8, #0 - beq _0238AC5C - cmp r7, #0 - ldrne r7, _0238B000 ; =ASSEMBLY_SUBMENU_ITEMS_6 - ldreq r7, _0238B004 ; =ASSEMBLY_SUBMENU_ITEMS_3 - b _0238ACEC -_0238AC5C: - cmp r5, #0 - beq _0238AC74 - cmp r7, #0 - ldrne r7, _0238B000 ; =ASSEMBLY_SUBMENU_ITEMS_6 - ldreq r7, _0238B004 ; =ASSEMBLY_SUBMENU_ITEMS_3 - b _0238ACEC -_0238AC74: - cmp r7, #0 - ldrne r7, _0238B008 ; =ASSEMBLY_SUBMENU_ITEMS_7 - ldreq r7, _0238B00C ; =ASSEMBLY_SUBMENU_ITEMS_5 - b _0238ACEC -_0238AC84: - cmp r8, #0 - beq _0238ACC8 - bl GetGameMode - cmp r0, #4 - beq _0238ACA4 - bl GetGameMode - cmp r0, #5 - bne _0238ACC0 -_0238ACA4: - bl GetPartnerMemberIdx - cmp r6, r0 - bne _0238ACC0 - cmp r7, #0 - ldrne r7, _0238B010 ; =ASSEMBLY_SUBMENU_ITEMS_2 - ldreq r7, _0238B004 ; =ASSEMBLY_SUBMENU_ITEMS_3 - b _0238ACEC -_0238ACC0: - ldr r7, _0238AFFC ; =ASSEMBLY_SUBMENU_ITEMS_1 - b _0238ACEC -_0238ACC8: - cmp r5, #0 - beq _0238ACE0 - cmp r7, #0 - ldrne r7, _0238B010 ; =ASSEMBLY_SUBMENU_ITEMS_2 - ldreq r7, _0238B004 ; =ASSEMBLY_SUBMENU_ITEMS_3 - b _0238ACEC -_0238ACE0: - cmp r7, #0 - ldrne r7, _0238B014 ; =ASSEMBLY_SUBMENU_ITEMS_4 - ldreq r7, _0238B00C ; =ASSEMBLY_SUBMENU_ITEMS_5 -_0238ACEC: - mov r8, #0 - mov r4, r8 - mov r5, #3 - ldr sb, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - b _0238AD4C -_0238AD00: - mov r1, r8, lsl #3 - ldrh r0, [r7, r1] - cmp r0, #0 - beq _0238AD54 - add r0, r7, r1 - ldr r0, [r0, #4] - cmp r0, #6 - bne _0238AD3C - mov r0, r6 - bl sub_02056F60 - cmp r0, #0 - ldreq r0, [sb] - addeq r0, r0, r8 - streqb r5, [r0, #0x24c] - beq _0238AD48 -_0238AD3C: - ldr r0, [sb] - add r0, r0, r8 - strb r4, [r0, #0x24c] -_0238AD48: - add r8, r8, #1 -_0238AD4C: - cmp r8, #0xc - blt _0238AD00 -_0238AD54: - ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r2, #0 - ldr r4, [r1] - ldr r0, _0238B018 ; =ASSEMBLY_WINDOW_PARAMS_2 - add r3, r4, #0x24c - str r3, [r4, #0x17c] - str r2, [sp] - ldr r2, [r1] - ldr r1, _0238B01C ; =0x00000213 - mov r3, r7 - add r2, r2, #0x11c - bl CreateSimpleMenuFromStringIds - ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r1] - strb r0, [r1, #4] -_0238AD90: - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r2, [r0] - ldrh r0, [r2, #0x7e] - tst r0, #0x40 - beq _0238ADDC - ldrsb r1, [r2, #5] - mvn r0, #1 - cmp r1, r0 - bne _0238ADDC - add r0, r2, #0x200 - ldrsh r1, [r0, #0x58] - add r0, sp, #0xac - bl sub_0205B028 - add r0, sp, #0xac - mov r1, #3 - bl sub_0203F150 - ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r1] - strb r0, [r1, #5] -_0238ADDC: - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r0] - ldrh r0, [r1, #0x7e] - tst r0, #0x80 - beq _0238AE24 - ldrsb r1, [r1, #6] - mvn r0, #1 - cmp r1, r0 - bne _0238AE20 - mov r1, #0 - mov r2, r1 - mov r0, #8 - bl sub_0204018C - ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r1] - strb r0, [r1, #6] - b _0238AE24 -_0238AE20: - bl sub_02041178 -_0238AE24: - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r3, [r0] - ldrh r0, [r3, #0x7e] - tst r0, #0x100 - beq _0238AE6C - ldrsb r1, [r3, #5] - mvn r0, #1 - cmp r1, r0 - bne _0238AE6C - add r0, r3, #0x200 - ldrsh r2, [r0, #0x68] - ldr r0, [r3, #0x264] - mov r1, #4 - mov r3, #1 - bl sub_020417A8 - ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r1] - strb r0, [r1, #7] -_0238AE6C: - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r0] - ldrh r0, [r1, #0x7e] - tst r0, #0x200 - beq _0238AEB4 - ldrsb r1, [r1, #8] - mvn r0, #1 - cmp r1, r0 - bne _0238AEB4 - ldr r0, _0238B020 ; =ASSEMBLY_WINDOW_PARAMS_5 - mov r2, #0 - ldr r3, _0238B024 ; =ASSEMBLY_MAIN_MENU_ITEMS_1 - mov r1, #0x13 - str r2, [sp] - bl CreateSimpleMenuFromStringIds - ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r1] - strb r0, [r1, #8] -_0238AEB4: - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #2 - ldr r0, [r0] - str r1, [r0, #0x74] - b _0238AF10 -_0238AEC8: - ldrh r0, [r4, #0x7e] - tst r0, #1 - beq _0238AEE8 - ldrsb r0, [r4] - bl IsDialogueBoxActive - cmp r0, #0 - movne r0, #0 - bne _0238AEEC -_0238AEE8: - mov r0, #1 -_0238AEEC: - cmp r0, #0 - beq _0238AF10 - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r2, #0 - ldr r1, [r0] - str r2, [r1, #0x74] - ldr r1, [r0] - ldr r0, [r1, #0x78] - str r0, [r1, #0x70] -_0238AF10: - mov r0, #1 - b _0238AF94 -_0238AF18: - bl sub_0203C874 - bl ov17_0238A364 - cmp r0, #0 - beq _0238AF90 - bl sub_0203C8E0 - cmp r0, #0 - bne _0238AF90 - bl sub_0203C940 - ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #2 - ldr r0, [r0] - str r1, [r0, #0x6c] - b _0238AF90 -_0238AF4C: - mov r1, #3 - str r1, [r4, #0x6c] - ldr r1, [r0] - ldr r0, [r1, #0x260] - cmp r0, #2 - bne _0238AF84 - ldr r0, [r1, #0x80] - tst r0, #0x100 - beq _0238AF88 - ldr r0, [r1, #0x10c] - ldr r2, [r1, #0x108] - mov r1, #0 - blx r2 - b _0238AF88 -_0238AF84: - bl ov11_022E6E68 -_0238AF88: - mov r0, #4 - b _0238AF94 -_0238AF90: - mov r0, #1 -_0238AF94: - add sp, sp, #0x124 - ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -#ifdef JAPAN -#define OV17_0238A754_OFFSET 0x38E2 -#else -#define OV17_0238A754_OFFSET 0 -#endif -_0238AF9C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 -_0238AFA0: .word OVERLAY17_FUNCTION_POINTER_TABLE -_0238AFA4: .word 0x00003008 -_0238AFA8: .word ASSEMBLY_WINDOW_PARAMS_4 -#ifndef JAPAN -_0238AFAC: .word 0x0000041E -#endif -_0238AFB0: .word 0x0000041F + OV17_0238A754_OFFSET -_0238AFB4: .word 0x00000425 + OV17_0238A754_OFFSET -_0238AFB8: .word 0x00003018 -_0238AFBC: .word 0x00000426 + OV17_0238A754_OFFSET -_0238AFC0: .word 0x00000427 + OV17_0238A754_OFFSET -_0238AFC4: .word 0x00000428 + OV17_0238A754_OFFSET -_0238AFC8: .word 0x00000429 + OV17_0238A754_OFFSET -#ifdef JAPAN -_0238C528: .word 0x00003D02 -#endif -_0238AFCC: .word 0x00000422 + OV17_0238A754_OFFSET -_0238AFD0: .word 0x00000421 + OV17_0238A754_OFFSET -_0238AFD4: .word 0x00000423 + OV17_0238A754_OFFSET -_0238AFD8: .word 0x00000424 + OV17_0238A754_OFFSET -_0238AFDC: .word 0x0000042A + OV17_0238A754_OFFSET -_0238AFE0: .word 0x00000186 -_0238AFE4: .word ASSEMBLY_WINDOW_PARAMS_1 -_0238AFE8: .word 0x00300013 -_0238AFEC: .word ASSEMBLY_MAIN_MENU_ITEMS_2 -_0238AFF0: .word ASSEMBLY_WINDOW_PARAMS_3 -_0238AFF4: .word 0x00300033 -_0238AFF8: .word ASSEMBLY_MENU_ITEMS_CONFIRM -_0238AFFC: .word ASSEMBLY_SUBMENU_ITEMS_1 -_0238B000: .word ASSEMBLY_SUBMENU_ITEMS_6 -_0238B004: .word ASSEMBLY_SUBMENU_ITEMS_3 -_0238B008: .word ASSEMBLY_SUBMENU_ITEMS_7 -_0238B00C: .word ASSEMBLY_SUBMENU_ITEMS_5 -_0238B010: .word ASSEMBLY_SUBMENU_ITEMS_2 -_0238B014: .word ASSEMBLY_SUBMENU_ITEMS_4 -_0238B018: .word ASSEMBLY_WINDOW_PARAMS_2 -_0238B01C: .word 0x00000213 -_0238B020: .word ASSEMBLY_WINDOW_PARAMS_5 -_0238B024: .word ASSEMBLY_MAIN_MENU_ITEMS_1 - arm_func_end ov17_0238A754 - - arm_func_start ov17_0238B028 -ov17_0238B028: ; 0x0238B028 - ldr r1, _0238B044 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #3 - ldr r2, [r1] - str r3, [r2, #0x74] - ldr r1, [r1] - str r0, [r1, #0x78] - bx lr - .align 2, 0 -_0238B044: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B028 - - arm_func_start ov17_0238B048 -ov17_0238B048: ; 0x0238B048 - ldr r0, _0238B074 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r2, #3 - ldr r1, [r0] - ldr r3, _0238B078 ; =0x00000186 - strh r2, [r1, #0x7e] - ldr r2, [r0] - mov r1, #1 - str r3, [r2, #0xc] - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B074: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 -_0238B078: .word 0x00000186 - arm_func_end ov17_0238B048 - - arm_func_start ov17_0238B07C -ov17_0238B07C: ; 0x0238B07C - stmdb sp!, {r3, lr} - ldr r0, _0238B0B0 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - ldrb r0, [r0, #9] - cmp r0, #0 - beq _0238B09C - bl GetMainCharacter1MemberIdx - bl sub_0203C7E4 -_0238B09C: - ldr r0, _0238B0B0 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #2 - ldr r0, [r0] - str r1, [r0, #0x78] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B0B0: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B07C - - arm_func_start ov17_0238B0B4 -ov17_0238B0B4: ; 0x0238B0B4 - stmdb sp!, {r3, lr} - ldr r0, _0238B108 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - ldrb r0, [r0, #9] - cmp r0, #0 - beq _0238B0E8 - bl sub_0203C910 - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldr r0, _0238B108 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0 - ldr r0, [r0] - strb r1, [r0, #9] -_0238B0E8: - ldr r0, _0238B108 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #7 - ldr r2, [r0] - mov r1, #3 - strh r3, [r2, #0x7e] - ldr r0, [r0] - str r1, [r0, #0x78] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B108: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B0B4 - - arm_func_start ov17_0238B10C -ov17_0238B10C: ; 0x0238B10C - stmdb sp!, {r3, lr} - ldr r0, _0238B190 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - ldrsb r0, [r0, #2] - bl IsSimpleMenuActive - cmp r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _0238B190 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - ldrsb r0, [r0, #2] - bl GetSimpleMenuResult - cmp r0, #2 - beq _0238B150 - cmp r0, #3 - beq _0238B15C - cmp r0, #4 - b _0238B184 -_0238B150: - mov r0, #0xc - bl ov17_0238B028 - ldmia sp!, {r3, pc} -_0238B15C: - bl GetGameMode - cmp r0, #4 - cmpne r0, #5 - bne _0238B178 - mov r0, #9 - bl ov17_0238B028 - ldmia sp!, {r3, pc} -_0238B178: - mov r0, #6 - bl ov17_0238B028 - ldmia sp!, {r3, pc} -_0238B184: - mov r0, #4 - bl ov17_0238B028 - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B190: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B10C - - arm_func_start ov17_0238B194 -ov17_0238B194: ; 0x0238B194 - ldr r0, _0238B1B4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #3 - ldr r2, [r0] - mov r1, #5 - strh r3, [r2, #0x7e] - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B1B4: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B194 - - arm_func_start ov17_0238B1B8 -ov17_0238B1B8: ; 0x0238B1B8 - stmdb sp!, {r3, lr} - ldr r0, _0238B1E4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0 - ldr r0, [r0] - strh r1, [r0, #0x7e] - bl ov17_0238A278 - ldr r0, _0238B1E4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #1 - ldr r0, [r0] - str r1, [r0, #0x6c] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B1E4: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B1B8 - - arm_func_start ov17_0238B1E8 -ov17_0238B1E8: ; 0x0238B1E8 - ldr r0, _0238B208 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #3 - ldr r2, [r0] - mov r1, #7 - strh r3, [r2, #0x7e] - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B208: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B1E8 - - arm_func_start ov17_0238B20C -ov17_0238B20C: ; 0x0238B20C - ldr r0, _0238B220 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #8 - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B220: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B20C - - arm_func_start ov17_0238B224 -ov17_0238B224: ; 0x0238B224 - ldr r0, _0238B238 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B238: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B224 - - arm_func_start ov17_0238B23C -ov17_0238B23C: ; 0x0238B23C - ldr r0, _0238B25C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #3 - ldr r2, [r0] - mov r1, #0xa - strh r3, [r2, #0x7e] - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B25C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B23C - - arm_func_start ov17_0238B260 -ov17_0238B260: ; 0x0238B260 - ldr r0, _0238B274 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0xb - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B274: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B260 - - arm_func_start ov17_0238B278 -ov17_0238B278: ; 0x0238B278 - ldr r0, _0238B28C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B28C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B278 - - arm_func_start ov17_0238B290 -ov17_0238B290: ; 0x0238B290 - ldr r0, _0238B2B0 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #0x20 - ldr r2, [r0] - mov r1, #0xd - strh r3, [r2, #0x7e] - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B2B0: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B290 - - arm_func_start ov17_0238B2B4 -ov17_0238B2B4: ; 0x0238B2B4 - stmdb sp!, {r3, lr} - bl sub_0203A5A8 - cmp r0, #0 - beq _0238B31C - bl sub_0203A9EC - cmp r0, #0 - ldmeqia sp!, {r3, pc} - add r1, sp, #0 - mov r0, #0 - bl GetPressedButtons - ldrh r0, [sp] - tst r0, #8 - ldmeqia sp!, {r3, pc} - mov r0, #0 - bl PlaySeVolumeWrapper - bl sub_0203AAB0 - ldr r1, _0238B368 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r1] - add r1, r1, #0x200 - strh r0, [r1, #0x58] - bl sub_0203A5F0 - ldr r0, _0238B368 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0x1e - ldr r0, [r0] - str r1, [r0, #0x78] - ldmia sp!, {r3, pc} -_0238B31C: - bl sub_0203AA20 - mvn r1, #0 - cmp r0, r1 - bne _0238B33C - bl sub_0203A51C - mov r0, #0 - bl ov17_0238B028 - ldmia sp!, {r3, pc} -_0238B33C: - ldr r2, _0238B368 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r2] - add r1, r1, #0x200 - strh r0, [r1, #0x58] - ldr r0, [r2] - add r0, r0, #0x200 - ldrsh r0, [r0, #0x58] - bl sub_0203FA64 - mov r0, #0xe - bl ov17_0238B028 - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B368: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B2B4 - - arm_func_start ov17_0238B36C -ov17_0238B36C: ; 0x0238B36C - ldr r0, _0238B38C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #0x28 - ldr r2, [r0] - mov r1, #0xf - strh r3, [r2, #0x7e] - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B38C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B36C - - arm_func_start ov17_0238B390 -ov17_0238B390: ; 0x0238B390 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - ldr r0, _0238B4CC ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - ldrsb r0, [r0, #4] - bl IsSimpleMenuActive - cmp r0, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - ldr r0, _0238B4CC ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - ldrsb r0, [r0, #4] - bl GetSimpleMenuResult - sub r0, r0, #5 - cmp r0, #7 - addls pc, pc, r0, lsl #2 - b _0238B4BC -_0238B3CC: ; jump table - b _0238B3EC ; case 0 - b _0238B3F8 ; case 1 - b _0238B46C ; case 2 - b _0238B478 ; case 3 - b _0238B484 ; case 4 - b _0238B490 ; case 5 - b _0238B49C ; case 6 - b _0238B4BC ; case 7 -_0238B3EC: - mov r0, #0x10 - bl ov17_0238B028 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_0238B3F8: - mov sl, #0 - ldr r6, _0238B4CC ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r4, _0238B4D0 ; =0x0000022B - ldr r7, _0238B4D4 ; =TEAM_MEMBER_TABLE_PTR - mov r8, sl - mov sb, #1 - mov r5, #0x44 -_0238B414: - smulbb r0, sl, r5 - ldr r1, [r7] - ldrb r0, [r1, r0] - tst r0, #1 - movne r0, sb - moveq r0, r8 - tst r0, #0xff - ldrne r0, [r6] - addne r0, r0, #0x200 - ldrnesh r0, [r0, #0x58] - cmpne r0, sl - beq _0238B44C - mov r0, sl - bl sub_02056410 -_0238B44C: - add r0, sl, #1 - mov r0, r0, lsl #0x10 - cmp r4, r0, asr #16 - mov sl, r0, asr #0x10 - bgt _0238B414 - mov r0, #0x13 - bl ov17_0238B028 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_0238B46C: - mov r0, #0x15 - bl ov17_0238B028 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_0238B478: - mov r0, #0x18 - bl ov17_0238B028 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_0238B484: - mov r0, #0x1e - bl ov17_0238B028 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_0238B490: - mov r0, #0x20 - bl ov17_0238B028 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_0238B49C: - ldr r0, _0238B4CC ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #0 - ldr r2, [r0] - mov r1, #0x22 - strh r3, [r2, #0x7e] - ldr r0, [r0] - str r1, [r0, #0x78] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_0238B4BC: - bl sub_0203A638 - mov r0, #0xc - bl ov17_0238B028 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_0238B4CC: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 -_0238B4D0: .word 0x0000022B -_0238B4D4: .word TEAM_MEMBER_TABLE_PTR - arm_func_end ov17_0238B390 - - arm_func_start ov17_0238B4D8 -ov17_0238B4D8: ; 0x0238B4D8 - ldr r1, _0238B50C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #3 - ldr r0, [r1] - mov r2, #0x11 - strh r3, [r0, #0x7e] - ldr r3, [r1] - add r0, r3, #0x200 - ldrsh r0, [r0, #0x58] - orr r0, r0, #0x20000 - str r0, [r3, #0xc] - ldr r0, [r1] - str r2, [r0, #0x78] - bx lr - .align 2, 0 -_0238B50C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B4D8 - - arm_func_start ov17_0238B510 -ov17_0238B510: ; 0x0238B510 - stmdb sp!, {r3, lr} - mov r0, #5 - bl sub_02017C50 - ldr r0, _0238B530 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0x12 - ldr r0, [r0] - str r1, [r0, #0x78] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B530: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B510 - - arm_func_start ov17_0238B534 -ov17_0238B534: ; 0x0238B534 - stmdb sp!, {r3, lr} - mov r0, #5 - bl sub_02017C10 - cmp r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _0238B578 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsh r0, [r0, #0x58] - bl TryAddMonsterToActiveTeam - bl sub_02057444 - bl ov11_022DC504 - ldr r0, _0238B578 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x78] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B578: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B534 - - arm_func_start ov17_0238B57C -ov17_0238B57C: ; 0x0238B57C - stmdb sp!, {r3, lr} - ldr r1, _0238B5D8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #3 - ldr r0, [r1] - add r2, r3, #0x1400 - strh r3, [r0, #0x7e] - ldr r3, [r1] - add r0, r3, #0x200 - ldrsh r0, [r0, #0x58] - orr r0, r0, #0x20000 - str r0, [r3, #0xc] - ldr r0, [r1] - str r2, [r0, #0x30] - ldr r0, [r1] - add r0, r0, #0x200 - ldrsh r0, [r0, #0x58] - bl sub_02056554 - bl sub_02057444 - ldr r0, _0238B5D8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0x14 - ldr r0, [r0] - str r1, [r0, #0x78] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B5D8: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B57C - - arm_func_start ov17_0238B5DC -ov17_0238B5DC: ; 0x0238B5DC - stmdb sp!, {r3, lr} - bl ov11_022DC504 - ldr r0, _0238B5F8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x78] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B5F8: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B5DC - - arm_func_start ov17_0238B5FC -ov17_0238B5FC: ; 0x0238B5FC - stmdb sp!, {r3, lr} - ldr r1, _0238B684 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #3 - ldr r2, [r1] - mov r0, #7 - strh r3, [r2, #0x7e] - ldr r2, [r1] - add r1, r2, #0x200 - ldrsh r1, [r1, #0x58] - orr r1, r1, #0x20000 - str r1, [r2, #0xc] - bl sub_02017C10 - cmp r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _0238B684 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsh r0, [r0, #0x58] - bl GetActiveRosterIndex - mvn r1, #0 - cmp r0, r1 - beq _0238B670 - bl sub_02058138 - ldr r0, _0238B684 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsh r0, [r0, #0x58] - bl sub_020566C4 - bl sub_02057444 -_0238B670: - ldr r0, _0238B684 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0x16 - ldr r0, [r0] - str r1, [r0, #0x78] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B684: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B5FC - - arm_func_start ov17_0238B688 -ov17_0238B688: ; 0x0238B688 - stmdb sp!, {r3, lr} - mov r0, #7 - bl sub_02017C50 - ldr r0, _0238B6A8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0x17 - ldr r0, [r0] - str r1, [r0, #0x78] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B6A8: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B688 - - arm_func_start ov17_0238B6AC -ov17_0238B6AC: ; 0x0238B6AC - stmdb sp!, {r3, lr} - mov r0, #7 - bl sub_02017C10 - cmp r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _0238B6D8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x78] - bl ov11_022DC504 - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B6D8: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B6AC - - arm_func_start ov17_0238B6DC -ov17_0238B6DC: ; 0x0238B6DC - ldr r1, _0238B710 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #3 - ldr r0, [r1] - mov r2, #0x19 - strh r3, [r0, #0x7e] - ldr r3, [r1] - add r0, r3, #0x200 - ldrsh r0, [r0, #0x58] - orr r0, r0, #0x20000 - str r0, [r3, #0xc] - ldr r0, [r1] - str r2, [r0, #0x78] - bx lr - .align 2, 0 -_0238B710: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B6DC - - arm_func_start ov17_0238B714 -ov17_0238B714: ; 0x0238B714 - ldr r0, _0238B734 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #0x13 - ldr r2, [r0] - mov r1, #0x1a - strh r3, [r2, #0x7e] - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B734: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B714 - - arm_func_start ov17_0238B738 -ov17_0238B738: ; 0x0238B738 - stmdb sp!, {r3, lr} - ldr r0, _0238B7A4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - ldrsb r0, [r0, #3] - bl IsSimpleMenuActive - cmp r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _0238B7A4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - ldrsb r0, [r0, #3] - bl GetSimpleMenuResult - cmp r0, #0 - beq _0238B780 - cmp r0, #1 - ldmneia sp!, {r3, pc} - mov r0, #0 - bl ov17_0238B028 - ldmia sp!, {r3, pc} -_0238B780: - ldr r1, _0238B7A4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r0, #0x1b - ldr r2, [r1] - add r1, r2, #0x200 - ldrsh r1, [r1, #0x58] - orr r1, r1, #0x20000 - str r1, [r2, #0xc] - bl ov17_0238B028 - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B7A4: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B738 - - arm_func_start ov17_0238B7A8 -ov17_0238B7A8: ; 0x0238B7A8 - ldr r0, _0238B7C8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #3 - ldr r2, [r0] - mov r1, #0x1c - strh r3, [r2, #0x7e] - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B7C8: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B7A8 - - arm_func_start ov17_0238B7CC -ov17_0238B7CC: ; 0x0238B7CC - stmdb sp!, {r3, lr} - ldr r1, _0238B850 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r0, #3 - ldr r1, [r1] - strh r0, [r1, #0x7e] - bl sub_02017C50 - ldr r0, _0238B850 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsh r0, [r0, #0x58] - bl GetActiveRosterIndex - mvn r1, #0 - cmp r0, r1 - beq _0238B81C - bl sub_02058138 - ldr r0, _0238B850 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsh r0, [r0, #0x58] - bl sub_020566C4 -_0238B81C: - ldr r0, _0238B850 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsh r0, [r0, #0x58] - bl sub_02055B20 - bl sub_0203C9C4 -#ifndef JAPAN - bl sub_0203AF0C -#endif - bl sub_02057180 - ldr r0, _0238B850 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0x1d - ldr r0, [r0] - str r1, [r0, #0x78] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B850: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B7CC - - arm_func_start ov17_0238B854 -ov17_0238B854: ; 0x0238B854 - stmdb sp!, {r3, lr} - mov r0, #3 - bl sub_02017C10 - cmp r0, #0 - ldreq r0, _0238B878 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - moveq r1, #0 - ldreq r0, [r0] - streq r1, [r0, #0x78] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B878: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B854 - - arm_func_start ov17_0238B87C -ov17_0238B87C: ; 0x0238B87C - ldr r0, _0238B89C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #0x40 - ldr r2, [r0] - mov r1, #0x1f - strh r3, [r2, #0x7e] - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B89C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B87C - - arm_func_start ov17_0238B8A0 -ov17_0238B8A0: ; 0x0238B8A0 - stmdb sp!, {r3, lr} - bl sub_0203F398 - cmp r0, #1 - ldmneia sp!, {r3, pc} - bl sub_0203F990 - ldr r0, _0238B8D0 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mvn r2, #1 - ldr r1, [r0] - mov r0, #0xc - strb r2, [r1, #5] - bl ov17_0238B028 - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B8D0: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B8A0 - - arm_func_start ov17_0238B8D4 -ov17_0238B8D4: ; 0x0238B8D4 - ldr r0, _0238B8F4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #0x80 - ldr r2, [r0] - mov r1, #0x21 - strh r3, [r2, #0x7e] - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B8F4: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B8D4 - - arm_func_start ov17_0238B8F8 -ov17_0238B8F8: ; 0x0238B8F8 - stmdb sp!, {r4, lr} - bl sub_020407EC - movs r4, r0 - beq _0238B91C - ldr r0, _0238B95C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsh r0, [r0, #0x58] - bl sub_0203FD80 -_0238B91C: - cmp r4, #1 - beq _0238B944 - cmp r4, #2 - beq _0238B938 - cmp r4, #7 - beq _0238B950 - ldmia sp!, {r4, pc} -_0238B938: - mov r0, #0x24 - bl ov17_0238B028 - ldmia sp!, {r4, pc} -_0238B944: - mov r0, #0xc - bl ov17_0238B028 - ldmia sp!, {r4, pc} -_0238B950: - mov r0, #0x26 - bl ov17_0238B028 - ldmia sp!, {r4, pc} - .align 2, 0 -_0238B95C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B8F8 - - arm_func_start ov17_0238B960 -ov17_0238B960: ; 0x0238B960 - stmdb sp!, {r3, lr} - ldr r1, _0238B9AC ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, _0238B9B0 ; =TEAM_MEMBER_TABLE_PTR - ldr r2, [r1] - ldr r1, [r0] - add r0, r2, #0x200 - ldrsh r2, [r0, #0x58] - mov r0, #0x44 - mov r3, #0 - smlabb r1, r2, r0, r1 - ldrsh r0, [r1, #4] - ldrsh r2, [r1, #8] - add r1, r1, #0x14 - bl PrintIqSkillsMenu - ldr r0, _0238B9AC ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0x23 - ldr r0, [r0] - str r1, [r0, #0x78] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B9AC: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 -_0238B9B0: .word TEAM_MEMBER_TABLE_PTR - arm_func_end ov17_0238B960 - - arm_func_start ov17_0238B9B4 -ov17_0238B9B4: ; 0x0238B9B4 - stmdb sp!, {r3, lr} - bl sub_02041B7C - cmp r0, #1 - ldmneia sp!, {r3, pc} - bl sub_020420F4 - bl sub_020572EC - mov r0, #0xc - bl ov17_0238B028 - ldmia sp!, {r3, pc} - arm_func_end ov17_0238B9B4 - - arm_func_start ov17_0238B9D8 -ov17_0238B9D8: ; 0x0238B9D8 - ldr r0, _0238B9F8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #0x280 - ldr r2, [r0] - mov r1, #0x25 - strh r3, [r2, #0x7e] - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238B9F8: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B9D8 - - arm_func_start ov17_0238B9FC -ov17_0238B9FC: ; 0x0238B9FC - stmdb sp!, {r4, lr} - ldr r0, _0238BA7C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r4, #0 - ldr r0, [r0] - ldrsb r0, [r0, #8] - bl IsSimpleMenuActive - cmp r0, #0 - ldmneia sp!, {r4, pc} - ldr r0, _0238BA7C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r0, [r0] - ldrsb r0, [r0, #8] - bl GetSimpleMenuResult - cmp r0, #3 - beq _0238BA3C - cmp r0, #4 - b _0238BA48 -_0238BA3C: - mov r0, #0x26 - bl ov17_0238B028 - b _0238BA4C -_0238BA48: - mov r4, #1 -_0238BA4C: - cmp r4, #0 - ldmeqia sp!, {r4, pc} - ldr r0, _0238BA7C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0, #6] - cmp r0, r1 - beq _0238BA70 - bl sub_020307EC -_0238BA70: - mov r0, #0x20 - bl ov17_0238B028 - ldmia sp!, {r4, pc} - .align 2, 0 -_0238BA7C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238B9FC - - arm_func_start ov17_0238BA80 -ov17_0238BA80: ; 0x0238BA80 - stmdb sp!, {r3, lr} - bl sub_0203FD38 - ldr r1, _0238BAC4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - ldr r1, [r1] - str r0, [r1, #0x264] - bl sub_02041094 - ldr r2, _0238BAC4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov ip, #0x100 - ldr r1, [r2] - mov r3, #0x27 - add r1, r1, #0x200 - strh r0, [r1, #0x68] - ldr r0, [r2] - strh ip, [r0, #0x7e] - ldr r0, [r2] - str r3, [r0, #0x78] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238BAC4: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238BA80 - - arm_func_start ov17_0238BAC8 -ov17_0238BAC8: ; 0x0238BAC8 - stmdb sp!, {r3, lr} - bl sub_02041A18 - cmp r0, #0 - ldmeqia sp!, {r3, pc} - mov r0, #0x20 - bl ov17_0238B028 - ldmia sp!, {r3, pc} - arm_func_end ov17_0238BAC8 - - arm_func_start ov17_0238BAE4 -ov17_0238BAE4: ; 0x0238BAE4 - ldr r1, _0238BB18 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r3, #3 - ldr r0, [r1] - mov r2, #0x29 - strh r3, [r0, #0x7e] - ldr r3, [r1] - add r0, r3, #0x200 - ldrsh r0, [r0, #0x58] - orr r0, r0, #0x20000 - str r0, [r3, #0xc] - ldr r0, [r1] - str r2, [r0, #0x78] - bx lr - .align 2, 0 -_0238BB18: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238BAE4 - - arm_func_start ov17_0238BB1C -ov17_0238BB1C: ; 0x0238BB1C - ldr r0, _0238BB30 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - mov r1, #0xc - ldr r0, [r0] - str r1, [r0, #0x78] - bx lr - .align 2, 0 -_0238BB30: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 - arm_func_end ov17_0238BB1C - ; 0x0238BB34 - - .rodata - .global ASSEMBLY_WINDOW_PARAMS_1 -ASSEMBLY_WINDOW_PARAMS_1: - .byte 0x00, 0x00, 0x00, 0x00, 0x1E, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global ASSEMBLY_WINDOW_PARAMS_2 -ASSEMBLY_WINDOW_PARAMS_2: - .byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x02, 0x0B, 0x00, 0x00, 0xFE, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global ASSEMBLY_WINDOW_PARAMS_3 -ASSEMBLY_WINDOW_PARAMS_3: - .byte 0x00, 0x00, 0x00, 0x00, 0x1E, 0x0F, 0x08, 0x00, 0x00, 0xFE, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global ASSEMBLY_WINDOW_PARAMS_4 -ASSEMBLY_WINDOW_PARAMS_4: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x11, 0x1C, 0x05, 0x00, 0xFD, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global ASSEMBLY_WINDOW_PARAMS_5 -ASSEMBLY_WINDOW_PARAMS_5: - .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFE, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global ASSEMBLY_MENU_ITEMS_CONFIRM -ASSEMBLY_MENU_ITEMS_CONFIRM: -#ifdef JAPAN -#define OV17_DATA_OFFSET 0x38E2 -#else -#define OV17_DATA_OFFSET 0 -#endif - .word 0x411 + OV17_DATA_OFFSET - .byte 0x00, 0x00, 0x00, 0x00 - .word 0x412 + OV17_DATA_OFFSET - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 - .global ASSEMBLY_MAIN_MENU_ITEMS_1 -ASSEMBLY_MAIN_MENU_ITEMS_1: - .word 0x414 + OV17_DATA_OFFSET - .byte 0x03, 0x00, 0x00, 0x00 - .word 0x415 + OV17_DATA_OFFSET - .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00 - .global ASSEMBLY_MAIN_MENU_ITEMS_2 -ASSEMBLY_MAIN_MENU_ITEMS_2: - .word 0x413 + OV17_DATA_OFFSET - .byte 0x02, 0x00, 0x00, 0x00 - .word 0x414 + OV17_DATA_OFFSET - .byte 0x03, 0x00, 0x00, 0x00 - .word 0x415 + OV17_DATA_OFFSET - .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00 - .global ASSEMBLY_SUBMENU_ITEMS_1 -ASSEMBLY_SUBMENU_ITEMS_1: - .word 0x41A + OV17_DATA_OFFSET - .byte 0x09, 0x00, 0x00, 0x00 - .word 0x41B + OV17_DATA_OFFSET - .byte 0x0A, 0x00, 0x00, 0x00 - .word 0x41C + OV17_DATA_OFFSET - .byte 0x0B, 0x00, 0x00, 0x00 - .word 0x41D + OV17_DATA_OFFSET - .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .global ASSEMBLY_SUBMENU_ITEMS_2 -ASSEMBLY_SUBMENU_ITEMS_2: - .word 0x418 + OV17_DATA_OFFSET - .byte 0x07, 0x00, 0x00, 0x00 - .word 0x41A + OV17_DATA_OFFSET - .byte 0x09, 0x00, 0x00, 0x00 - .word 0x41B + OV17_DATA_OFFSET - .byte 0x0A, 0x00, 0x00, 0x00 - .word 0x41C + OV17_DATA_OFFSET - .byte 0x0B, 0x00, 0x00, 0x00 - .word 0x41D + OV17_DATA_OFFSET - .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .global ASSEMBLY_SUBMENU_ITEMS_3 -ASSEMBLY_SUBMENU_ITEMS_3: - .word 0x417 + OV17_DATA_OFFSET - .byte 0x06, 0x00, 0x00, 0x00 - .word 0x41A + OV17_DATA_OFFSET - .byte 0x09, 0x00, 0x00, 0x00 - .word 0x41B + OV17_DATA_OFFSET - .byte 0x0A, 0x00, 0x00, 0x00 - .word 0x41C + OV17_DATA_OFFSET - .byte 0x0B, 0x00, 0x00, 0x00 - .word 0x41D + OV17_DATA_OFFSET - .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 -.global ASSEMBLY_SUBMENU_ITEMS_4 -ASSEMBLY_SUBMENU_ITEMS_4: - .word 0x418 + OV17_DATA_OFFSET - .byte 0x07, 0x00, 0x00, 0x00 - .word 0x419 + OV17_DATA_OFFSET - .byte 0x08, 0x00, 0x00, 0x00 - .word 0x41A + OV17_DATA_OFFSET - .byte 0x09, 0x00, 0x00, 0x00 - .word 0x41B + OV17_DATA_OFFSET - .byte 0x0A, 0x00, 0x00, 0x00 - .word 0x41C + OV17_DATA_OFFSET - .byte 0x0B, 0x00, 0x00, 0x00 - .word 0x41D + OV17_DATA_OFFSET - .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x0C, 0x00, 0x00, 0x00 - .global ASSEMBLY_SUBMENU_ITEMS_5 -ASSEMBLY_SUBMENU_ITEMS_5: - .word 0x417 + OV17_DATA_OFFSET - .byte 0x06, 0x00, 0x00, 0x00 - .word 0x419 + OV17_DATA_OFFSET - .byte 0x08, 0x00, 0x00, 0x00 - .word 0x41A + OV17_DATA_OFFSET - .byte 0x09, 0x00, 0x00, 0x00 - .word 0x41B + OV17_DATA_OFFSET - .byte 0x0A, 0x00, 0x00, 0x00 - .word 0x41C + OV17_DATA_OFFSET - .byte 0x0B, 0x00, 0x00, 0x00 - .word 0x41D + OV17_DATA_OFFSET - .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .global ASSEMBLY_SUBMENU_ITEMS_6 -ASSEMBLY_SUBMENU_ITEMS_6: - .word 0x416 + OV17_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x418 + OV17_DATA_OFFSET - .byte 0x07, 0x00, 0x00, 0x00 - .word 0x41A + OV17_DATA_OFFSET - .byte 0x09, 0x00, 0x00, 0x00 - .word 0x41B + OV17_DATA_OFFSET - .byte 0x0A, 0x00, 0x00, 0x00 - .word 0x41C + OV17_DATA_OFFSET - .byte 0x0B, 0x00, 0x00, 0x00 - .word 0x41D + OV17_DATA_OFFSET - .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x0C, 0x00, 0x00, 0x00 - .global ASSEMBLY_SUBMENU_ITEMS_7 -ASSEMBLY_SUBMENU_ITEMS_7: - .word 0x416 + OV17_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x418 + OV17_DATA_OFFSET - .byte 0x07, 0x00, 0x00, 0x00 - .word 0x419 + OV17_DATA_OFFSET - .byte 0x08, 0x00, 0x00, 0x00 - .word 0x41A + OV17_DATA_OFFSET - .byte 0x09, 0x00, 0x00, 0x00 - .word 0x41B + OV17_DATA_OFFSET - .byte 0x0A, 0x00, 0x00, 0x00 - .word 0x41C + OV17_DATA_OFFSET - .byte 0x0B, 0x00, 0x00, 0x00 - .word 0x41D + OV17_DATA_OFFSET - .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x0C, 0x00, 0x00, 0x00 - .global OVERLAY17_FUNCTION_POINTER_TABLE -OVERLAY17_FUNCTION_POINTER_TABLE: - .word ov17_0238B048 - .word ov17_0238B07C - .word ov17_0238B0B4 - .word ov17_0238B10C - .word ov17_0238B194 - .word ov17_0238B1B8 - .word ov17_0238B1E8 - .word ov17_0238B20C - .word ov17_0238B224 - .word ov17_0238B23C - .word ov17_0238B260 - .word ov17_0238B278 - .word ov17_0238B290 - .word ov17_0238B2B4 - .word ov17_0238B36C - .word ov17_0238B390 - .word ov17_0238B4D8 - .word ov17_0238B510 - .word ov17_0238B534 - .word ov17_0238B57C - .word ov17_0238B5DC - .word ov17_0238B5FC - .word ov17_0238B688 - .word ov17_0238B6AC - .word ov17_0238B6DC - .word ov17_0238B714 - .word ov17_0238B738 - .word ov17_0238B7A8 - .word ov17_0238B7CC - .word ov17_0238B854 - .word ov17_0238B87C - .word ov17_0238B8A0 - .word ov17_0238B8D4 - .word ov17_0238B8F8 - .word ov17_0238B960 - .word ov17_0238B9B4 - .word ov17_0238B9D8 - .word ov17_0238B9FC - .word ov17_0238BA80 - .word ov17_0238BAC8 - .word ov17_0238BAE4 - .word ov17_0238BB1C - - .data - .global OVERLAY17_UNKNOWN_POINTER__NA_238BE00 -OVERLAY17_UNKNOWN_POINTER__NA_238BE00: - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 diff --git a/asm/overlay_17_0238A754.s b/asm/overlay_17_0238A754.s new file mode 100644 index 00000000..5238f9f8 --- /dev/null +++ b/asm/overlay_17_0238A754.s @@ -0,0 +1,1805 @@ + .include "asm/macros.inc" + .include "overlay_17_0238A754.inc" + + .text + + arm_func_start ov17_0238A754 +ov17_0238A754: ; 0x0238A754 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x124 + bl sub_0203C9E4 + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r4, [r0] + ldr r1, [r4, #0x6c] + cmp r1, #3 + addls pc, pc, r1, lsl #2 + b _0238AF90 +_0238A778: ; jump table + b _0238A788 ; case 0 + b _0238AF18 ; case 1 + b _0238AF4C ; case 2 + b _0238AF90 ; case 3 +_0238A788: + ldr r7, _0238AFA0 ; =OVERLAY17_FUNCTION_POINTER_TABLE + add r6, sp, #4 + mov r5, #0xa +_0238A794: + ldmia r7!, {r0, r1, r2, r3} + stmia r6!, {r0, r1, r2, r3} + subs r5, r5, #1 + bne _0238A794 + ldmia r7, {r0, r1} + stmia r6, {r0, r1} + ldr r0, [r4, #0x74] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0238AF10 +_0238A7BC: ; jump table + b _0238A7CC ; case 0 + b _0238A840 ; case 1 + b _0238AEC8 ; case 2 + b _0238A7CC ; case 3 +_0238A7CC: + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0 + str r1, [r4, #0x74] + ldr r1, [r0] + add r0, sp, #4 + ldr r1, [r1, #0x70] + ldr r0, [r0, r1, lsl #2] + blx r0 + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r3, [r0] + ldr r1, [r3, #0x70] + ldr r2, [r3, #0x78] + cmp r1, r2 + beq _0238AF10 + ldr r1, [r3, #0x74] + cmp r1, #3 + bne _0238A828 + str r2, [r3, #0x70] + ldr r1, [r0] + add r0, sp, #4 + ldr r1, [r1, #0x70] + ldr r0, [r0, r1, lsl #2] + blx r0 +_0238A828: + bl ov17_0238A278 + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #1 + ldr r0, [r0] + str r1, [r0, #0x74] + b _0238AF10 +_0238A840: + bl ov17_0238A364 + cmp r0, #0 + beq _0238AF10 + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r2, [r0] + ldrh r0, [r2, #0x7e] + tst r0, #1 + beq _0238AA30 + ldrsb r1, [r2] + mvn r0, #1 + ldrh r5, [r2, #0x7c] + cmp r1, r0 + ldr r4, _0238AFA4 ; =0x00003008 + bne _0238A898 + ldr r0, _0238AFA8 ; =ASSEMBLY_WINDOW_PARAMS_4 + bl CreateDialogueBox + ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r2, #0 + ldr r3, [r1] + strb r0, [r3] + ldr r0, [r1] + strh r2, [r0, #0x7c] +_0238A898: + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + ldrsb r0, [r0] + bl ShowDialogueBox + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r0] + ldr r0, [r1, #0x70] + cmp r0, #0x29 + addls pc, pc, r0, lsl #2 + b _0238A9F8 +_0238A8C0: ; jump table + b _0238A968 ; case 0 + b _0238A9F8 ; case 1 + b _0238A9F8 ; case 2 + b _0238A9F8 ; case 3 + b _0238A9AC ; case 4 + b _0238A9AC ; case 5 + b _0238A97C ; case 6 + b _0238A97C ; case 7 + b _0238A988 ; case 8 + b _0238A994 ; case 9 + b _0238A994 ; case 10 + b _0238A9A0 ; case 11 + b _0238A9F8 ; case 12 + b _0238A9F8 ; case 13 + b _0238A9F8 ; case 14 + b _0238A9F8 ; case 15 + b _0238A9B8 ; case 16 + b _0238A9B8 ; case 17 + b _0238A9B8 ; case 18 + b _0238A9C4 ; case 19 + b _0238A9C4 ; case 20 + b _0238A9D0 ; case 21 + b _0238A9D0 ; case 22 + b _0238A9D0 ; case 23 + b _0238A9DC ; case 24 + b _0238A9DC ; case 25 + b _0238A9DC ; case 26 + b _0238A9E4 ; case 27 + b _0238A9E4 ; case 28 + b _0238A9E4 ; case 29 + b _0238A9F8 ; case 30 + b _0238A9F8 ; case 31 + b _0238A9F8 ; case 32 + b _0238A9F8 ; case 33 + b _0238A9F8 ; case 34 + b _0238A9F8 ; case 35 + b _0238A9F8 ; case 36 + b _0238A9F8 ; case 37 + b _0238A9F8 ; case 38 + b _0238A9F8 ; case 39 + b _0238A9F0 ; case 40 + b _0238A9F0 ; case 41 +_0238A968: + ldrb r0, [r1, #9] + cmp r0, #0 +#ifdef JAPAN + movne r5, #0x3d00 +#else + ldrne r5, _0238AFAC ; =0x0000041E +#endif + ldreq r5, _0238AFB0 ; =0x0000041F + b _0238A9F8 +_0238A97C: + ldr r5, _0238AFB4 ; =0x00000425 + ldr r4, _0238AFB8 ; =0x00003018 + b _0238A9F8 +_0238A988: + ldr r5, _0238AFBC ; =0x00000426 +#ifdef JAPAN + sub r4, r5, #0xcf0 +#else + ldr r4, _0238AFB8 ; =0x00003018 +#endif + b _0238A9F8 +_0238A994: + ldr r5, _0238AFC0 ; =0x00000427 + ldr r4, _0238AFB8 ; =0x00003018 + b _0238A9F8 +_0238A9A0: + ldr r5, _0238AFC4 ; =0x00000428 +#ifdef JAPAN + ldr r4, _0238AFB8 ; =0x00003018 +#else + rsb r4, r5, #0x3440 +#endif + b _0238A9F8 +_0238A9AC: + ldr r5, _0238AFC8 ; =0x00000429 + ldr r4, _0238AFB8 ; =0x00003018 + b _0238A9F8 +_0238A9B8: +#ifdef JAPAN + ldr r5, _0238C528 ; =0x00003D02 +#else + mov r5, #0x420 +#endif + ldr r4, _0238AFB8 ; =0x00003018 + b _0238A9F8 +_0238A9C4: + ldr r5, _0238AFCC ; =0x00000422 + ldr r4, _0238AFB8 ; =0x00003018 + b _0238A9F8 +_0238A9D0: + ldr r5, _0238AFD0 ; =0x00000421 + ldr r4, _0238AFB8 ; =0x00003018 + b _0238A9F8 +_0238A9DC: + ldr r5, _0238AFD4 ; =0x00000423 + b _0238A9F8 +_0238A9E4: + ldr r5, _0238AFD8 ; =0x00000424 + ldr r4, _0238AFB8 ; =0x00003018 + b _0238A9F8 +_0238A9F0: + ldr r5, _0238AFDC ; =0x0000042A + ldr r4, _0238AFB8 ; =0x00003018 +_0238A9F8: + ldrh r0, [r1, #0x7c] + cmp r0, r5 + beq _0238AA30 + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + strh r5, [r1, #0x7c] + ldr r2, [r0] + ldr r3, _0238AFE0 ; =0x00000186 + mov r1, r4 + str r3, [r2, #0x58] + ldr r3, [r0] + ldrsb r0, [r3] + ldrh r2, [r3, #0x7c] + add r3, r3, #0xc + bl ShowStringIdInDialogueBox +_0238AA30: + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r0] + ldrh r0, [r1, #0x7e] + tst r0, #2 + beq _0238AABC + ldrsb r1, [r1, #1] + mvn r0, #1 + cmp r1, r0 + bne _0238AABC + mov r0, #0 + mov r1, #3 + mov r2, #1 + bl CreatePortraitBox + ldr r2, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, _0238AFE0 ; =0x00000186 + ldr r3, [r2] + strb r0, [r3, #1] + ldr r0, [r2] + add r0, r0, #0x5c + bl InitPortraitParamsWithMonsterId + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x5c + bl SetPortraitLayout + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x5c + bl SetPortraitEmotion + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r0] + ldrsb r0, [r1, #1] + add r1, r1, #0x5c + bl ShowPortraitInPortraitBox +_0238AABC: + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r0] + ldrh r0, [r1, #0x7e] + tst r0, #4 + beq _0238AB04 + ldrsb r1, [r1, #2] + mvn r0, #1 + cmp r1, r0 + bne _0238AB04 + ldr r0, _0238AFE4 ; =ASSEMBLY_WINDOW_PARAMS_1 + mov r2, #0 + ldr r1, _0238AFE8 ; =0x00300013 + ldr r3, _0238AFEC ; =ASSEMBLY_MAIN_MENU_ITEMS_2 + str r2, [sp] + bl CreateSimpleMenuFromStringIds + ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r1] + strb r0, [r1, #2] +_0238AB04: + ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r3, [r1] + ldrh r0, [r3, #0x7e] + tst r0, #0x10 + beq _0238AB5C + ldrsb r2, [r3, #3] + mvn r0, #1 + cmp r2, r0 + bne _0238AB5C + mov r0, #1 + str r0, [r3, #0x1b4] + mov r0, #0 + str r0, [sp] + ldr r2, [r1] + ldr r0, _0238AFF0 ; =ASSEMBLY_WINDOW_PARAMS_3 + ldr r1, _0238AFF4 ; =0x00300033 + ldr r3, _0238AFF8 ; =ASSEMBLY_MENU_ITEMS_CONFIRM + add r2, r2, #0x1b4 + bl CreateSimpleMenuFromStringIds + ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r1] + strb r0, [r1, #3] +_0238AB5C: + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + ldrh r0, [r0, #0x7e] + tst r0, #0x20 + beq _0238AB94 + bl sub_0203A998 + cmp r0, #0 + bne _0238AB94 + ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r0, #1 + ldr r1, [r1] + add r1, r1, #0x5a + add r1, r1, #0x200 + bl sub_02039C3C +_0238AB94: + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r2, [r0] + ldrh r0, [r2, #0x7e] + tst r0, #8 + beq _0238AD90 + ldrsb r1, [r2, #4] + mvn r0, #1 + cmp r1, r0 + bne _0238AD90 + add r0, r2, #0x200 + ldrsh r6, [r0, #0x58] + mov r0, r6 + bl GetTeamMember + mov r4, r0 + mov r0, r6 + bl sub_020564B0 + cmp r0, #0 + ldrne r7, _0238AFFC ; =ASSEMBLY_SUBMENU_ITEMS_1 + bne _0238ACEC + mov r0, r6 + bl IsMainCharacter + mov r8, r0 + mov r0, r6 + bl sub_02056410 + mov r7, r0 + mov r5, #0 + bl GetGameMode + cmp r0, #4 + beq _0238AC14 + bl GetGameMode + cmp r0, #5 + bne _0238AC1C +_0238AC14: + mov r5, #1 + b _0238AC28 +_0238AC1C: + ldrsh r0, [r4, #4] + cmp r0, #0x214 + moveq r5, #1 +_0238AC28: + mov r0, #0x14 + bl GetPerformanceFlagWithChecks + cmp r0, #0 + beq _0238AC84 + bl GetGameMode + cmp r0, #3 + beq _0238AC84 + cmp r8, #0 + beq _0238AC5C + cmp r7, #0 + ldrne r7, _0238B000 ; =ASSEMBLY_SUBMENU_ITEMS_6 + ldreq r7, _0238B004 ; =ASSEMBLY_SUBMENU_ITEMS_3 + b _0238ACEC +_0238AC5C: + cmp r5, #0 + beq _0238AC74 + cmp r7, #0 + ldrne r7, _0238B000 ; =ASSEMBLY_SUBMENU_ITEMS_6 + ldreq r7, _0238B004 ; =ASSEMBLY_SUBMENU_ITEMS_3 + b _0238ACEC +_0238AC74: + cmp r7, #0 + ldrne r7, _0238B008 ; =ASSEMBLY_SUBMENU_ITEMS_7 + ldreq r7, _0238B00C ; =ASSEMBLY_SUBMENU_ITEMS_5 + b _0238ACEC +_0238AC84: + cmp r8, #0 + beq _0238ACC8 + bl GetGameMode + cmp r0, #4 + beq _0238ACA4 + bl GetGameMode + cmp r0, #5 + bne _0238ACC0 +_0238ACA4: + bl GetPartnerMemberIdx + cmp r6, r0 + bne _0238ACC0 + cmp r7, #0 + ldrne r7, _0238B010 ; =ASSEMBLY_SUBMENU_ITEMS_2 + ldreq r7, _0238B004 ; =ASSEMBLY_SUBMENU_ITEMS_3 + b _0238ACEC +_0238ACC0: + ldr r7, _0238AFFC ; =ASSEMBLY_SUBMENU_ITEMS_1 + b _0238ACEC +_0238ACC8: + cmp r5, #0 + beq _0238ACE0 + cmp r7, #0 + ldrne r7, _0238B010 ; =ASSEMBLY_SUBMENU_ITEMS_2 + ldreq r7, _0238B004 ; =ASSEMBLY_SUBMENU_ITEMS_3 + b _0238ACEC +_0238ACE0: + cmp r7, #0 + ldrne r7, _0238B014 ; =ASSEMBLY_SUBMENU_ITEMS_4 + ldreq r7, _0238B00C ; =ASSEMBLY_SUBMENU_ITEMS_5 +_0238ACEC: + mov r8, #0 + mov r4, r8 + mov r5, #3 + ldr sb, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + b _0238AD4C +_0238AD00: + mov r1, r8, lsl #3 + ldrh r0, [r7, r1] + cmp r0, #0 + beq _0238AD54 + add r0, r7, r1 + ldr r0, [r0, #4] + cmp r0, #6 + bne _0238AD3C + mov r0, r6 + bl sub_02056F60 + cmp r0, #0 + ldreq r0, [sb] + addeq r0, r0, r8 + streqb r5, [r0, #0x24c] + beq _0238AD48 +_0238AD3C: + ldr r0, [sb] + add r0, r0, r8 + strb r4, [r0, #0x24c] +_0238AD48: + add r8, r8, #1 +_0238AD4C: + cmp r8, #0xc + blt _0238AD00 +_0238AD54: + ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r2, #0 + ldr r4, [r1] + ldr r0, _0238B018 ; =ASSEMBLY_WINDOW_PARAMS_2 + add r3, r4, #0x24c + str r3, [r4, #0x17c] + str r2, [sp] + ldr r2, [r1] + ldr r1, _0238B01C ; =0x00000213 + mov r3, r7 + add r2, r2, #0x11c + bl CreateSimpleMenuFromStringIds + ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r1] + strb r0, [r1, #4] +_0238AD90: + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r2, [r0] + ldrh r0, [r2, #0x7e] + tst r0, #0x40 + beq _0238ADDC + ldrsb r1, [r2, #5] + mvn r0, #1 + cmp r1, r0 + bne _0238ADDC + add r0, r2, #0x200 + ldrsh r1, [r0, #0x58] + add r0, sp, #0xac + bl sub_0205B028 + add r0, sp, #0xac + mov r1, #3 + bl sub_0203F150 + ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r1] + strb r0, [r1, #5] +_0238ADDC: + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r0] + ldrh r0, [r1, #0x7e] + tst r0, #0x80 + beq _0238AE24 + ldrsb r1, [r1, #6] + mvn r0, #1 + cmp r1, r0 + bne _0238AE20 + mov r1, #0 + mov r2, r1 + mov r0, #8 + bl sub_0204018C + ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r1] + strb r0, [r1, #6] + b _0238AE24 +_0238AE20: + bl sub_02041178 +_0238AE24: + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r3, [r0] + ldrh r0, [r3, #0x7e] + tst r0, #0x100 + beq _0238AE6C + ldrsb r1, [r3, #5] + mvn r0, #1 + cmp r1, r0 + bne _0238AE6C + add r0, r3, #0x200 + ldrsh r2, [r0, #0x68] + ldr r0, [r3, #0x264] + mov r1, #4 + mov r3, #1 + bl sub_020417A8 + ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r1] + strb r0, [r1, #7] +_0238AE6C: + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r0] + ldrh r0, [r1, #0x7e] + tst r0, #0x200 + beq _0238AEB4 + ldrsb r1, [r1, #8] + mvn r0, #1 + cmp r1, r0 + bne _0238AEB4 + ldr r0, _0238B020 ; =ASSEMBLY_WINDOW_PARAMS_5 + mov r2, #0 + ldr r3, _0238B024 ; =ASSEMBLY_MAIN_MENU_ITEMS_1 + mov r1, #0x13 + str r2, [sp] + bl CreateSimpleMenuFromStringIds + ldr r1, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r1] + strb r0, [r1, #8] +_0238AEB4: + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #2 + ldr r0, [r0] + str r1, [r0, #0x74] + b _0238AF10 +_0238AEC8: + ldrh r0, [r4, #0x7e] + tst r0, #1 + beq _0238AEE8 + ldrsb r0, [r4] + bl IsDialogueBoxActive + cmp r0, #0 + movne r0, #0 + bne _0238AEEC +_0238AEE8: + mov r0, #1 +_0238AEEC: + cmp r0, #0 + beq _0238AF10 + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r2, #0 + ldr r1, [r0] + str r2, [r1, #0x74] + ldr r1, [r0] + ldr r0, [r1, #0x78] + str r0, [r1, #0x70] +_0238AF10: + mov r0, #1 + b _0238AF94 +_0238AF18: + bl sub_0203C874 + bl ov17_0238A364 + cmp r0, #0 + beq _0238AF90 + bl sub_0203C8E0 + cmp r0, #0 + bne _0238AF90 + bl sub_0203C940 + ldr r0, _0238AF9C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #2 + ldr r0, [r0] + str r1, [r0, #0x6c] + b _0238AF90 +_0238AF4C: + mov r1, #3 + str r1, [r4, #0x6c] + ldr r1, [r0] + ldr r0, [r1, #0x260] + cmp r0, #2 + bne _0238AF84 + ldr r0, [r1, #0x80] + tst r0, #0x100 + beq _0238AF88 + ldr r0, [r1, #0x10c] + ldr r2, [r1, #0x108] + mov r1, #0 + blx r2 + b _0238AF88 +_0238AF84: + bl ov11_022E6E68 +_0238AF88: + mov r0, #4 + b _0238AF94 +_0238AF90: + mov r0, #1 +_0238AF94: + add sp, sp, #0x124 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +#ifdef JAPAN +#define OV17_0238A754_OFFSET 0x38E2 +#else +#define OV17_0238A754_OFFSET 0 +#endif +_0238AF9C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 +_0238AFA0: .word OVERLAY17_FUNCTION_POINTER_TABLE +_0238AFA4: .word 0x00003008 +_0238AFA8: .word ASSEMBLY_WINDOW_PARAMS_4 +#ifndef JAPAN +_0238AFAC: .word 0x0000041E +#endif +_0238AFB0: .word 0x0000041F + OV17_0238A754_OFFSET +_0238AFB4: .word 0x00000425 + OV17_0238A754_OFFSET +_0238AFB8: .word 0x00003018 +_0238AFBC: .word 0x00000426 + OV17_0238A754_OFFSET +_0238AFC0: .word 0x00000427 + OV17_0238A754_OFFSET +_0238AFC4: .word 0x00000428 + OV17_0238A754_OFFSET +_0238AFC8: .word 0x00000429 + OV17_0238A754_OFFSET +#ifdef JAPAN +_0238C528: .word 0x00003D02 +#endif +_0238AFCC: .word 0x00000422 + OV17_0238A754_OFFSET +_0238AFD0: .word 0x00000421 + OV17_0238A754_OFFSET +_0238AFD4: .word 0x00000423 + OV17_0238A754_OFFSET +_0238AFD8: .word 0x00000424 + OV17_0238A754_OFFSET +_0238AFDC: .word 0x0000042A + OV17_0238A754_OFFSET +_0238AFE0: .word 0x00000186 +_0238AFE4: .word ASSEMBLY_WINDOW_PARAMS_1 +_0238AFE8: .word 0x00300013 +_0238AFEC: .word ASSEMBLY_MAIN_MENU_ITEMS_2 +_0238AFF0: .word ASSEMBLY_WINDOW_PARAMS_3 +_0238AFF4: .word 0x00300033 +_0238AFF8: .word ASSEMBLY_MENU_ITEMS_CONFIRM +_0238AFFC: .word ASSEMBLY_SUBMENU_ITEMS_1 +_0238B000: .word ASSEMBLY_SUBMENU_ITEMS_6 +_0238B004: .word ASSEMBLY_SUBMENU_ITEMS_3 +_0238B008: .word ASSEMBLY_SUBMENU_ITEMS_7 +_0238B00C: .word ASSEMBLY_SUBMENU_ITEMS_5 +_0238B010: .word ASSEMBLY_SUBMENU_ITEMS_2 +_0238B014: .word ASSEMBLY_SUBMENU_ITEMS_4 +_0238B018: .word ASSEMBLY_WINDOW_PARAMS_2 +_0238B01C: .word 0x00000213 +_0238B020: .word ASSEMBLY_WINDOW_PARAMS_5 +_0238B024: .word ASSEMBLY_MAIN_MENU_ITEMS_1 + arm_func_end ov17_0238A754 + + arm_func_start ov17_0238B028 +ov17_0238B028: ; 0x0238B028 + ldr r1, _0238B044 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #3 + ldr r2, [r1] + str r3, [r2, #0x74] + ldr r1, [r1] + str r0, [r1, #0x78] + bx lr + .align 2, 0 +_0238B044: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B028 + + arm_func_start ov17_0238B048 +ov17_0238B048: ; 0x0238B048 + ldr r0, _0238B074 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r2, #3 + ldr r1, [r0] + ldr r3, _0238B078 ; =0x00000186 + strh r2, [r1, #0x7e] + ldr r2, [r0] + mov r1, #1 + str r3, [r2, #0xc] + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B074: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 +_0238B078: .word 0x00000186 + arm_func_end ov17_0238B048 + + arm_func_start ov17_0238B07C +ov17_0238B07C: ; 0x0238B07C + stmdb sp!, {r3, lr} + ldr r0, _0238B0B0 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + ldrb r0, [r0, #9] + cmp r0, #0 + beq _0238B09C + bl GetMainCharacter1MemberIdx + bl sub_0203C7E4 +_0238B09C: + ldr r0, _0238B0B0 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #2 + ldr r0, [r0] + str r1, [r0, #0x78] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B0B0: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B07C + + arm_func_start ov17_0238B0B4 +ov17_0238B0B4: ; 0x0238B0B4 + stmdb sp!, {r3, lr} + ldr r0, _0238B108 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + ldrb r0, [r0, #9] + cmp r0, #0 + beq _0238B0E8 + bl sub_0203C910 + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldr r0, _0238B108 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0 + ldr r0, [r0] + strb r1, [r0, #9] +_0238B0E8: + ldr r0, _0238B108 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #7 + ldr r2, [r0] + mov r1, #3 + strh r3, [r2, #0x7e] + ldr r0, [r0] + str r1, [r0, #0x78] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B108: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B0B4 + + arm_func_start ov17_0238B10C +ov17_0238B10C: ; 0x0238B10C + stmdb sp!, {r3, lr} + ldr r0, _0238B190 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + ldrsb r0, [r0, #2] + bl IsSimpleMenuActive + cmp r0, #0 + ldmneia sp!, {r3, pc} + ldr r0, _0238B190 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + ldrsb r0, [r0, #2] + bl GetSimpleMenuResult + cmp r0, #2 + beq _0238B150 + cmp r0, #3 + beq _0238B15C + cmp r0, #4 + b _0238B184 +_0238B150: + mov r0, #0xc + bl ov17_0238B028 + ldmia sp!, {r3, pc} +_0238B15C: + bl GetGameMode + cmp r0, #4 + cmpne r0, #5 + bne _0238B178 + mov r0, #9 + bl ov17_0238B028 + ldmia sp!, {r3, pc} +_0238B178: + mov r0, #6 + bl ov17_0238B028 + ldmia sp!, {r3, pc} +_0238B184: + mov r0, #4 + bl ov17_0238B028 + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B190: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B10C + + arm_func_start ov17_0238B194 +ov17_0238B194: ; 0x0238B194 + ldr r0, _0238B1B4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #3 + ldr r2, [r0] + mov r1, #5 + strh r3, [r2, #0x7e] + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B1B4: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B194 + + arm_func_start ov17_0238B1B8 +ov17_0238B1B8: ; 0x0238B1B8 + stmdb sp!, {r3, lr} + ldr r0, _0238B1E4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0 + ldr r0, [r0] + strh r1, [r0, #0x7e] + bl ov17_0238A278 + ldr r0, _0238B1E4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #1 + ldr r0, [r0] + str r1, [r0, #0x6c] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B1E4: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B1B8 + + arm_func_start ov17_0238B1E8 +ov17_0238B1E8: ; 0x0238B1E8 + ldr r0, _0238B208 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #3 + ldr r2, [r0] + mov r1, #7 + strh r3, [r2, #0x7e] + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B208: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B1E8 + + arm_func_start ov17_0238B20C +ov17_0238B20C: ; 0x0238B20C + ldr r0, _0238B220 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #8 + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B220: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B20C + + arm_func_start ov17_0238B224 +ov17_0238B224: ; 0x0238B224 + ldr r0, _0238B238 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B238: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B224 + + arm_func_start ov17_0238B23C +ov17_0238B23C: ; 0x0238B23C + ldr r0, _0238B25C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #3 + ldr r2, [r0] + mov r1, #0xa + strh r3, [r2, #0x7e] + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B25C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B23C + + arm_func_start ov17_0238B260 +ov17_0238B260: ; 0x0238B260 + ldr r0, _0238B274 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0xb + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B274: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B260 + + arm_func_start ov17_0238B278 +ov17_0238B278: ; 0x0238B278 + ldr r0, _0238B28C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B28C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B278 + + arm_func_start ov17_0238B290 +ov17_0238B290: ; 0x0238B290 + ldr r0, _0238B2B0 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #0x20 + ldr r2, [r0] + mov r1, #0xd + strh r3, [r2, #0x7e] + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B2B0: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B290 + + arm_func_start ov17_0238B2B4 +ov17_0238B2B4: ; 0x0238B2B4 + stmdb sp!, {r3, lr} + bl sub_0203A5A8 + cmp r0, #0 + beq _0238B31C + bl sub_0203A9EC + cmp r0, #0 + ldmeqia sp!, {r3, pc} + add r1, sp, #0 + mov r0, #0 + bl GetPressedButtons + ldrh r0, [sp] + tst r0, #8 + ldmeqia sp!, {r3, pc} + mov r0, #0 + bl PlaySeVolumeWrapper + bl sub_0203AAB0 + ldr r1, _0238B368 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r1] + add r1, r1, #0x200 + strh r0, [r1, #0x58] + bl sub_0203A5F0 + ldr r0, _0238B368 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0x1e + ldr r0, [r0] + str r1, [r0, #0x78] + ldmia sp!, {r3, pc} +_0238B31C: + bl sub_0203AA20 + mvn r1, #0 + cmp r0, r1 + bne _0238B33C + bl sub_0203A51C + mov r0, #0 + bl ov17_0238B028 + ldmia sp!, {r3, pc} +_0238B33C: + ldr r2, _0238B368 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r2] + add r1, r1, #0x200 + strh r0, [r1, #0x58] + ldr r0, [r2] + add r0, r0, #0x200 + ldrsh r0, [r0, #0x58] + bl sub_0203FA64 + mov r0, #0xe + bl ov17_0238B028 + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B368: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B2B4 + + arm_func_start ov17_0238B36C +ov17_0238B36C: ; 0x0238B36C + ldr r0, _0238B38C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #0x28 + ldr r2, [r0] + mov r1, #0xf + strh r3, [r2, #0x7e] + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B38C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B36C + + arm_func_start ov17_0238B390 +ov17_0238B390: ; 0x0238B390 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr r0, _0238B4CC ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + ldrsb r0, [r0, #4] + bl IsSimpleMenuActive + cmp r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r0, _0238B4CC ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + ldrsb r0, [r0, #4] + bl GetSimpleMenuResult + sub r0, r0, #5 + cmp r0, #7 + addls pc, pc, r0, lsl #2 + b _0238B4BC +_0238B3CC: ; jump table + b _0238B3EC ; case 0 + b _0238B3F8 ; case 1 + b _0238B46C ; case 2 + b _0238B478 ; case 3 + b _0238B484 ; case 4 + b _0238B490 ; case 5 + b _0238B49C ; case 6 + b _0238B4BC ; case 7 +_0238B3EC: + mov r0, #0x10 + bl ov17_0238B028 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_0238B3F8: + mov sl, #0 + ldr r6, _0238B4CC ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r4, _0238B4D0 ; =0x0000022B + ldr r7, _0238B4D4 ; =TEAM_MEMBER_TABLE_PTR + mov r8, sl + mov sb, #1 + mov r5, #0x44 +_0238B414: + smulbb r0, sl, r5 + ldr r1, [r7] + ldrb r0, [r1, r0] + tst r0, #1 + movne r0, sb + moveq r0, r8 + tst r0, #0xff + ldrne r0, [r6] + addne r0, r0, #0x200 + ldrnesh r0, [r0, #0x58] + cmpne r0, sl + beq _0238B44C + mov r0, sl + bl sub_02056410 +_0238B44C: + add r0, sl, #1 + mov r0, r0, lsl #0x10 + cmp r4, r0, asr #16 + mov sl, r0, asr #0x10 + bgt _0238B414 + mov r0, #0x13 + bl ov17_0238B028 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_0238B46C: + mov r0, #0x15 + bl ov17_0238B028 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_0238B478: + mov r0, #0x18 + bl ov17_0238B028 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_0238B484: + mov r0, #0x1e + bl ov17_0238B028 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_0238B490: + mov r0, #0x20 + bl ov17_0238B028 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_0238B49C: + ldr r0, _0238B4CC ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #0 + ldr r2, [r0] + mov r1, #0x22 + strh r3, [r2, #0x7e] + ldr r0, [r0] + str r1, [r0, #0x78] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_0238B4BC: + bl sub_0203A638 + mov r0, #0xc + bl ov17_0238B028 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_0238B4CC: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 +_0238B4D0: .word 0x0000022B +_0238B4D4: .word TEAM_MEMBER_TABLE_PTR + arm_func_end ov17_0238B390 + + arm_func_start ov17_0238B4D8 +ov17_0238B4D8: ; 0x0238B4D8 + ldr r1, _0238B50C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #3 + ldr r0, [r1] + mov r2, #0x11 + strh r3, [r0, #0x7e] + ldr r3, [r1] + add r0, r3, #0x200 + ldrsh r0, [r0, #0x58] + orr r0, r0, #0x20000 + str r0, [r3, #0xc] + ldr r0, [r1] + str r2, [r0, #0x78] + bx lr + .align 2, 0 +_0238B50C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B4D8 + + arm_func_start ov17_0238B510 +ov17_0238B510: ; 0x0238B510 + stmdb sp!, {r3, lr} + mov r0, #5 + bl sub_02017C50 + ldr r0, _0238B530 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0x12 + ldr r0, [r0] + str r1, [r0, #0x78] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B530: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B510 + + arm_func_start ov17_0238B534 +ov17_0238B534: ; 0x0238B534 + stmdb sp!, {r3, lr} + mov r0, #5 + bl sub_02017C10 + cmp r0, #0 + ldmneia sp!, {r3, pc} + ldr r0, _0238B578 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + add r0, r0, #0x200 + ldrsh r0, [r0, #0x58] + bl TryAddMonsterToActiveTeam + bl sub_02057444 + bl ov11_022DC504 + ldr r0, _0238B578 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0x78] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B578: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B534 + + arm_func_start ov17_0238B57C +ov17_0238B57C: ; 0x0238B57C + stmdb sp!, {r3, lr} + ldr r1, _0238B5D8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #3 + ldr r0, [r1] + add r2, r3, #0x1400 + strh r3, [r0, #0x7e] + ldr r3, [r1] + add r0, r3, #0x200 + ldrsh r0, [r0, #0x58] + orr r0, r0, #0x20000 + str r0, [r3, #0xc] + ldr r0, [r1] + str r2, [r0, #0x30] + ldr r0, [r1] + add r0, r0, #0x200 + ldrsh r0, [r0, #0x58] + bl sub_02056554 + bl sub_02057444 + ldr r0, _0238B5D8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0x14 + ldr r0, [r0] + str r1, [r0, #0x78] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B5D8: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B57C + + arm_func_start ov17_0238B5DC +ov17_0238B5DC: ; 0x0238B5DC + stmdb sp!, {r3, lr} + bl ov11_022DC504 + ldr r0, _0238B5F8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0x78] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B5F8: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B5DC + + arm_func_start ov17_0238B5FC +ov17_0238B5FC: ; 0x0238B5FC + stmdb sp!, {r3, lr} + ldr r1, _0238B684 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #3 + ldr r2, [r1] + mov r0, #7 + strh r3, [r2, #0x7e] + ldr r2, [r1] + add r1, r2, #0x200 + ldrsh r1, [r1, #0x58] + orr r1, r1, #0x20000 + str r1, [r2, #0xc] + bl sub_02017C10 + cmp r0, #0 + ldmneia sp!, {r3, pc} + ldr r0, _0238B684 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + add r0, r0, #0x200 + ldrsh r0, [r0, #0x58] + bl GetActiveRosterIndex + mvn r1, #0 + cmp r0, r1 + beq _0238B670 + bl sub_02058138 + ldr r0, _0238B684 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + add r0, r0, #0x200 + ldrsh r0, [r0, #0x58] + bl sub_020566C4 + bl sub_02057444 +_0238B670: + ldr r0, _0238B684 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0x16 + ldr r0, [r0] + str r1, [r0, #0x78] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B684: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B5FC + + arm_func_start ov17_0238B688 +ov17_0238B688: ; 0x0238B688 + stmdb sp!, {r3, lr} + mov r0, #7 + bl sub_02017C50 + ldr r0, _0238B6A8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0x17 + ldr r0, [r0] + str r1, [r0, #0x78] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B6A8: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B688 + + arm_func_start ov17_0238B6AC +ov17_0238B6AC: ; 0x0238B6AC + stmdb sp!, {r3, lr} + mov r0, #7 + bl sub_02017C10 + cmp r0, #0 + ldmneia sp!, {r3, pc} + ldr r0, _0238B6D8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0x78] + bl ov11_022DC504 + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B6D8: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B6AC + + arm_func_start ov17_0238B6DC +ov17_0238B6DC: ; 0x0238B6DC + ldr r1, _0238B710 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #3 + ldr r0, [r1] + mov r2, #0x19 + strh r3, [r0, #0x7e] + ldr r3, [r1] + add r0, r3, #0x200 + ldrsh r0, [r0, #0x58] + orr r0, r0, #0x20000 + str r0, [r3, #0xc] + ldr r0, [r1] + str r2, [r0, #0x78] + bx lr + .align 2, 0 +_0238B710: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B6DC + + arm_func_start ov17_0238B714 +ov17_0238B714: ; 0x0238B714 + ldr r0, _0238B734 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #0x13 + ldr r2, [r0] + mov r1, #0x1a + strh r3, [r2, #0x7e] + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B734: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B714 + + arm_func_start ov17_0238B738 +ov17_0238B738: ; 0x0238B738 + stmdb sp!, {r3, lr} + ldr r0, _0238B7A4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + ldrsb r0, [r0, #3] + bl IsSimpleMenuActive + cmp r0, #0 + ldmneia sp!, {r3, pc} + ldr r0, _0238B7A4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + ldrsb r0, [r0, #3] + bl GetSimpleMenuResult + cmp r0, #0 + beq _0238B780 + cmp r0, #1 + ldmneia sp!, {r3, pc} + mov r0, #0 + bl ov17_0238B028 + ldmia sp!, {r3, pc} +_0238B780: + ldr r1, _0238B7A4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r0, #0x1b + ldr r2, [r1] + add r1, r2, #0x200 + ldrsh r1, [r1, #0x58] + orr r1, r1, #0x20000 + str r1, [r2, #0xc] + bl ov17_0238B028 + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B7A4: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B738 + + arm_func_start ov17_0238B7A8 +ov17_0238B7A8: ; 0x0238B7A8 + ldr r0, _0238B7C8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #3 + ldr r2, [r0] + mov r1, #0x1c + strh r3, [r2, #0x7e] + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B7C8: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B7A8 + + arm_func_start ov17_0238B7CC +ov17_0238B7CC: ; 0x0238B7CC + stmdb sp!, {r3, lr} + ldr r1, _0238B850 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r0, #3 + ldr r1, [r1] + strh r0, [r1, #0x7e] + bl sub_02017C50 + ldr r0, _0238B850 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + add r0, r0, #0x200 + ldrsh r0, [r0, #0x58] + bl GetActiveRosterIndex + mvn r1, #0 + cmp r0, r1 + beq _0238B81C + bl sub_02058138 + ldr r0, _0238B850 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + add r0, r0, #0x200 + ldrsh r0, [r0, #0x58] + bl sub_020566C4 +_0238B81C: + ldr r0, _0238B850 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + add r0, r0, #0x200 + ldrsh r0, [r0, #0x58] + bl sub_02055B20 + bl sub_0203C9C4 +#ifndef JAPAN + bl sub_0203AF0C +#endif + bl sub_02057180 + ldr r0, _0238B850 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0x1d + ldr r0, [r0] + str r1, [r0, #0x78] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B850: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B7CC + + arm_func_start ov17_0238B854 +ov17_0238B854: ; 0x0238B854 + stmdb sp!, {r3, lr} + mov r0, #3 + bl sub_02017C10 + cmp r0, #0 + ldreq r0, _0238B878 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + moveq r1, #0 + ldreq r0, [r0] + streq r1, [r0, #0x78] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B878: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B854 + + arm_func_start ov17_0238B87C +ov17_0238B87C: ; 0x0238B87C + ldr r0, _0238B89C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #0x40 + ldr r2, [r0] + mov r1, #0x1f + strh r3, [r2, #0x7e] + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B89C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B87C + + arm_func_start ov17_0238B8A0 +ov17_0238B8A0: ; 0x0238B8A0 + stmdb sp!, {r3, lr} + bl sub_0203F398 + cmp r0, #1 + ldmneia sp!, {r3, pc} + bl sub_0203F990 + ldr r0, _0238B8D0 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mvn r2, #1 + ldr r1, [r0] + mov r0, #0xc + strb r2, [r1, #5] + bl ov17_0238B028 + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B8D0: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B8A0 + + arm_func_start ov17_0238B8D4 +ov17_0238B8D4: ; 0x0238B8D4 + ldr r0, _0238B8F4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #0x80 + ldr r2, [r0] + mov r1, #0x21 + strh r3, [r2, #0x7e] + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B8F4: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B8D4 + + arm_func_start ov17_0238B8F8 +ov17_0238B8F8: ; 0x0238B8F8 + stmdb sp!, {r4, lr} + bl sub_020407EC + movs r4, r0 + beq _0238B91C + ldr r0, _0238B95C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + add r0, r0, #0x200 + ldrsh r0, [r0, #0x58] + bl sub_0203FD80 +_0238B91C: + cmp r4, #1 + beq _0238B944 + cmp r4, #2 + beq _0238B938 + cmp r4, #7 + beq _0238B950 + ldmia sp!, {r4, pc} +_0238B938: + mov r0, #0x24 + bl ov17_0238B028 + ldmia sp!, {r4, pc} +_0238B944: + mov r0, #0xc + bl ov17_0238B028 + ldmia sp!, {r4, pc} +_0238B950: + mov r0, #0x26 + bl ov17_0238B028 + ldmia sp!, {r4, pc} + .align 2, 0 +_0238B95C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B8F8 + + arm_func_start ov17_0238B960 +ov17_0238B960: ; 0x0238B960 + stmdb sp!, {r3, lr} + ldr r1, _0238B9AC ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, _0238B9B0 ; =TEAM_MEMBER_TABLE_PTR + ldr r2, [r1] + ldr r1, [r0] + add r0, r2, #0x200 + ldrsh r2, [r0, #0x58] + mov r0, #0x44 + mov r3, #0 + smlabb r1, r2, r0, r1 + ldrsh r0, [r1, #4] + ldrsh r2, [r1, #8] + add r1, r1, #0x14 + bl PrintIqSkillsMenu + ldr r0, _0238B9AC ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0x23 + ldr r0, [r0] + str r1, [r0, #0x78] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238B9AC: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 +_0238B9B0: .word TEAM_MEMBER_TABLE_PTR + arm_func_end ov17_0238B960 + + arm_func_start ov17_0238B9B4 +ov17_0238B9B4: ; 0x0238B9B4 + stmdb sp!, {r3, lr} + bl sub_02041B7C + cmp r0, #1 + ldmneia sp!, {r3, pc} + bl sub_020420F4 + bl sub_020572EC + mov r0, #0xc + bl ov17_0238B028 + ldmia sp!, {r3, pc} + arm_func_end ov17_0238B9B4 + + arm_func_start ov17_0238B9D8 +ov17_0238B9D8: ; 0x0238B9D8 + ldr r0, _0238B9F8 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #0x280 + ldr r2, [r0] + mov r1, #0x25 + strh r3, [r2, #0x7e] + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238B9F8: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B9D8 + + arm_func_start ov17_0238B9FC +ov17_0238B9FC: ; 0x0238B9FC + stmdb sp!, {r4, lr} + ldr r0, _0238BA7C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r4, #0 + ldr r0, [r0] + ldrsb r0, [r0, #8] + bl IsSimpleMenuActive + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r0, _0238BA7C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r0, [r0] + ldrsb r0, [r0, #8] + bl GetSimpleMenuResult + cmp r0, #3 + beq _0238BA3C + cmp r0, #4 + b _0238BA48 +_0238BA3C: + mov r0, #0x26 + bl ov17_0238B028 + b _0238BA4C +_0238BA48: + mov r4, #1 +_0238BA4C: + cmp r4, #0 + ldmeqia sp!, {r4, pc} + ldr r0, _0238BA7C ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mvn r1, #1 + ldr r0, [r0] + ldrsb r0, [r0, #6] + cmp r0, r1 + beq _0238BA70 + bl sub_020307EC +_0238BA70: + mov r0, #0x20 + bl ov17_0238B028 + ldmia sp!, {r4, pc} + .align 2, 0 +_0238BA7C: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238B9FC + + arm_func_start ov17_0238BA80 +ov17_0238BA80: ; 0x0238BA80 + stmdb sp!, {r3, lr} + bl sub_0203FD38 + ldr r1, _0238BAC4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + ldr r1, [r1] + str r0, [r1, #0x264] + bl sub_02041094 + ldr r2, _0238BAC4 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov ip, #0x100 + ldr r1, [r2] + mov r3, #0x27 + add r1, r1, #0x200 + strh r0, [r1, #0x68] + ldr r0, [r2] + strh ip, [r0, #0x7e] + ldr r0, [r2] + str r3, [r0, #0x78] + ldmia sp!, {r3, pc} + .align 2, 0 +_0238BAC4: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238BA80 + + arm_func_start ov17_0238BAC8 +ov17_0238BAC8: ; 0x0238BAC8 + stmdb sp!, {r3, lr} + bl sub_02041A18 + cmp r0, #0 + ldmeqia sp!, {r3, pc} + mov r0, #0x20 + bl ov17_0238B028 + ldmia sp!, {r3, pc} + arm_func_end ov17_0238BAC8 + + arm_func_start ov17_0238BAE4 +ov17_0238BAE4: ; 0x0238BAE4 + ldr r1, _0238BB18 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r3, #3 + ldr r0, [r1] + mov r2, #0x29 + strh r3, [r0, #0x7e] + ldr r3, [r1] + add r0, r3, #0x200 + ldrsh r0, [r0, #0x58] + orr r0, r0, #0x20000 + str r0, [r3, #0xc] + ldr r0, [r1] + str r2, [r0, #0x78] + bx lr + .align 2, 0 +_0238BB18: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238BAE4 + + arm_func_start ov17_0238BB1C +ov17_0238BB1C: ; 0x0238BB1C + ldr r0, _0238BB30 ; =OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + mov r1, #0xc + ldr r0, [r0] + str r1, [r0, #0x78] + bx lr + .align 2, 0 +_0238BB30: .word OVERLAY17_UNKNOWN_POINTER__NA_238BE00 + arm_func_end ov17_0238BB1C + ; 0x0238BB34 + + .rodata + .global ASSEMBLY_WINDOW_PARAMS_1 +ASSEMBLY_WINDOW_PARAMS_1: + .byte 0x00, 0x00, 0x00, 0x00, 0x1E, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global ASSEMBLY_WINDOW_PARAMS_2 +ASSEMBLY_WINDOW_PARAMS_2: + .byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x02, 0x0B, 0x00, 0x00, 0xFE, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global ASSEMBLY_WINDOW_PARAMS_3 +ASSEMBLY_WINDOW_PARAMS_3: + .byte 0x00, 0x00, 0x00, 0x00, 0x1E, 0x0F, 0x08, 0x00, 0x00, 0xFE, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global ASSEMBLY_WINDOW_PARAMS_4 +ASSEMBLY_WINDOW_PARAMS_4: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x11, 0x1C, 0x05, 0x00, 0xFD, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global ASSEMBLY_WINDOW_PARAMS_5 +ASSEMBLY_WINDOW_PARAMS_5: + .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFE, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global ASSEMBLY_MENU_ITEMS_CONFIRM +ASSEMBLY_MENU_ITEMS_CONFIRM: +#ifdef JAPAN +#define OV17_DATA_OFFSET 0x38E2 +#else +#define OV17_DATA_OFFSET 0 +#endif + .word 0x411 + OV17_DATA_OFFSET + .byte 0x00, 0x00, 0x00, 0x00 + .word 0x412 + OV17_DATA_OFFSET + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 + .global ASSEMBLY_MAIN_MENU_ITEMS_1 +ASSEMBLY_MAIN_MENU_ITEMS_1: + .word 0x414 + OV17_DATA_OFFSET + .byte 0x03, 0x00, 0x00, 0x00 + .word 0x415 + OV17_DATA_OFFSET + .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00 + .global ASSEMBLY_MAIN_MENU_ITEMS_2 +ASSEMBLY_MAIN_MENU_ITEMS_2: + .word 0x413 + OV17_DATA_OFFSET + .byte 0x02, 0x00, 0x00, 0x00 + .word 0x414 + OV17_DATA_OFFSET + .byte 0x03, 0x00, 0x00, 0x00 + .word 0x415 + OV17_DATA_OFFSET + .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00 + .global ASSEMBLY_SUBMENU_ITEMS_1 +ASSEMBLY_SUBMENU_ITEMS_1: + .word 0x41A + OV17_DATA_OFFSET + .byte 0x09, 0x00, 0x00, 0x00 + .word 0x41B + OV17_DATA_OFFSET + .byte 0x0A, 0x00, 0x00, 0x00 + .word 0x41C + OV17_DATA_OFFSET + .byte 0x0B, 0x00, 0x00, 0x00 + .word 0x41D + OV17_DATA_OFFSET + .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 + .global ASSEMBLY_SUBMENU_ITEMS_2 +ASSEMBLY_SUBMENU_ITEMS_2: + .word 0x418 + OV17_DATA_OFFSET + .byte 0x07, 0x00, 0x00, 0x00 + .word 0x41A + OV17_DATA_OFFSET + .byte 0x09, 0x00, 0x00, 0x00 + .word 0x41B + OV17_DATA_OFFSET + .byte 0x0A, 0x00, 0x00, 0x00 + .word 0x41C + OV17_DATA_OFFSET + .byte 0x0B, 0x00, 0x00, 0x00 + .word 0x41D + OV17_DATA_OFFSET + .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 + .global ASSEMBLY_SUBMENU_ITEMS_3 +ASSEMBLY_SUBMENU_ITEMS_3: + .word 0x417 + OV17_DATA_OFFSET + .byte 0x06, 0x00, 0x00, 0x00 + .word 0x41A + OV17_DATA_OFFSET + .byte 0x09, 0x00, 0x00, 0x00 + .word 0x41B + OV17_DATA_OFFSET + .byte 0x0A, 0x00, 0x00, 0x00 + .word 0x41C + OV17_DATA_OFFSET + .byte 0x0B, 0x00, 0x00, 0x00 + .word 0x41D + OV17_DATA_OFFSET + .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 +.global ASSEMBLY_SUBMENU_ITEMS_4 +ASSEMBLY_SUBMENU_ITEMS_4: + .word 0x418 + OV17_DATA_OFFSET + .byte 0x07, 0x00, 0x00, 0x00 + .word 0x419 + OV17_DATA_OFFSET + .byte 0x08, 0x00, 0x00, 0x00 + .word 0x41A + OV17_DATA_OFFSET + .byte 0x09, 0x00, 0x00, 0x00 + .word 0x41B + OV17_DATA_OFFSET + .byte 0x0A, 0x00, 0x00, 0x00 + .word 0x41C + OV17_DATA_OFFSET + .byte 0x0B, 0x00, 0x00, 0x00 + .word 0x41D + OV17_DATA_OFFSET + .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x0C, 0x00, 0x00, 0x00 + .global ASSEMBLY_SUBMENU_ITEMS_5 +ASSEMBLY_SUBMENU_ITEMS_5: + .word 0x417 + OV17_DATA_OFFSET + .byte 0x06, 0x00, 0x00, 0x00 + .word 0x419 + OV17_DATA_OFFSET + .byte 0x08, 0x00, 0x00, 0x00 + .word 0x41A + OV17_DATA_OFFSET + .byte 0x09, 0x00, 0x00, 0x00 + .word 0x41B + OV17_DATA_OFFSET + .byte 0x0A, 0x00, 0x00, 0x00 + .word 0x41C + OV17_DATA_OFFSET + .byte 0x0B, 0x00, 0x00, 0x00 + .word 0x41D + OV17_DATA_OFFSET + .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 + .global ASSEMBLY_SUBMENU_ITEMS_6 +ASSEMBLY_SUBMENU_ITEMS_6: + .word 0x416 + OV17_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x418 + OV17_DATA_OFFSET + .byte 0x07, 0x00, 0x00, 0x00 + .word 0x41A + OV17_DATA_OFFSET + .byte 0x09, 0x00, 0x00, 0x00 + .word 0x41B + OV17_DATA_OFFSET + .byte 0x0A, 0x00, 0x00, 0x00 + .word 0x41C + OV17_DATA_OFFSET + .byte 0x0B, 0x00, 0x00, 0x00 + .word 0x41D + OV17_DATA_OFFSET + .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x0C, 0x00, 0x00, 0x00 + .global ASSEMBLY_SUBMENU_ITEMS_7 +ASSEMBLY_SUBMENU_ITEMS_7: + .word 0x416 + OV17_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x418 + OV17_DATA_OFFSET + .byte 0x07, 0x00, 0x00, 0x00 + .word 0x419 + OV17_DATA_OFFSET + .byte 0x08, 0x00, 0x00, 0x00 + .word 0x41A + OV17_DATA_OFFSET + .byte 0x09, 0x00, 0x00, 0x00 + .word 0x41B + OV17_DATA_OFFSET + .byte 0x0A, 0x00, 0x00, 0x00 + .word 0x41C + OV17_DATA_OFFSET + .byte 0x0B, 0x00, 0x00, 0x00 + .word 0x41D + OV17_DATA_OFFSET + .byte 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x0C, 0x00, 0x00, 0x00 + .global OVERLAY17_FUNCTION_POINTER_TABLE +OVERLAY17_FUNCTION_POINTER_TABLE: + .word ov17_0238B048 + .word ov17_0238B07C + .word ov17_0238B0B4 + .word ov17_0238B10C + .word ov17_0238B194 + .word ov17_0238B1B8 + .word ov17_0238B1E8 + .word ov17_0238B20C + .word ov17_0238B224 + .word ov17_0238B23C + .word ov17_0238B260 + .word ov17_0238B278 + .word ov17_0238B290 + .word ov17_0238B2B4 + .word ov17_0238B36C + .word ov17_0238B390 + .word ov17_0238B4D8 + .word ov17_0238B510 + .word ov17_0238B534 + .word ov17_0238B57C + .word ov17_0238B5DC + .word ov17_0238B5FC + .word ov17_0238B688 + .word ov17_0238B6AC + .word ov17_0238B6DC + .word ov17_0238B714 + .word ov17_0238B738 + .word ov17_0238B7A8 + .word ov17_0238B7CC + .word ov17_0238B854 + .word ov17_0238B87C + .word ov17_0238B8A0 + .word ov17_0238B8D4 + .word ov17_0238B8F8 + .word ov17_0238B960 + .word ov17_0238B9B4 + .word ov17_0238B9D8 + .word ov17_0238B9FC + .word ov17_0238BA80 + .word ov17_0238BAC8 + .word ov17_0238BAE4 + .word ov17_0238BB1C + + .data + .global OVERLAY17_UNKNOWN_POINTER__NA_238BE00 +OVERLAY17_UNKNOWN_POINTER__NA_238BE00: + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 diff --git a/include/overlay_17_0238A71C.h b/include/overlay_17_0238A71C.h new file mode 100644 index 00000000..70987831 --- /dev/null +++ b/include/overlay_17_0238A71C.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_OVERLAY_17_0238A71C_H +#define PMDSKY_OVERLAY_17_0238A71C_H + +void ov17_0238A71C(void); + +#endif //PMDSKY_OVERLAY_17_0238A71C_H diff --git a/main.lsf b/main.lsf index e999a9b3..71db06cc 100644 --- a/main.lsf +++ b/main.lsf @@ -225,6 +225,8 @@ Overlay OVY_17 { After OVY_11 Object asm/overlay_17.o + Object src/overlay_17_0238A71C.o + Object asm/overlay_17_0238A754.o } Overlay OVY_18 { diff --git a/src/overlay_17_0238A71C.c b/src/overlay_17_0238A71C.c new file mode 100644 index 00000000..fe63a6b6 --- /dev/null +++ b/src/overlay_17_0238A71C.c @@ -0,0 +1,16 @@ +#include "overlay_17_0238A71C.h" + +extern void sub_0203C760(void); +extern void MemFree(void *); +extern void *OVERLAY17_UNKNOWN_POINTER__NA_238BE00; + +void ov17_0238A71C(void) +{ + if (OVERLAY17_UNKNOWN_POINTER__NA_238BE00 == NULL) { + return; + } + + sub_0203C760(); + MemFree(OVERLAY17_UNKNOWN_POINTER__NA_238BE00); + OVERLAY17_UNKNOWN_POINTER__NA_238BE00 = NULL; +} From 7b6a5099a56cd1a9186f58ea22338e00179759c7 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 17 Jul 2025 21:49:51 -0400 Subject: [PATCH 08/40] Decomped ov31_02383880 Decomped by anonymous user (https://decomp.me/scratch/vv7Lu) --- asm/include/overlay_31_0238367C.inc | 275 - asm/include/overlay_31_023838E4.inc | 292 + asm/overlay_31_0238367C.s | 8564 --------------------------- asm/overlay_31_023838E4.s | 8533 ++++++++++++++++++++++++++ include/overlay_31_02383880.h | 6 + main.lsf | 2 + src/overlay_31_02383880.c | 20 + 7 files changed, 8853 insertions(+), 8839 deletions(-) create mode 100644 asm/include/overlay_31_023838E4.inc create mode 100644 asm/overlay_31_023838E4.s create mode 100644 include/overlay_31_02383880.h create mode 100644 src/overlay_31_02383880.c diff --git a/asm/include/overlay_31_0238367C.inc b/asm/include/overlay_31_0238367C.inc index 805471c7..f7147eb0 100644 --- a/asm/include/overlay_31_0238367C.inc +++ b/asm/include/overlay_31_0238367C.inc @@ -1,293 +1,18 @@ #pragma once -.public AddDungeonSubMenuOption .public AdvanceFrame -.public AiMovement -.public AllManip1 -.public AllManip2 -.public Arm9LoadUnkFieldNa0x2029EC8 -.public Arm9StoreUnkFieldNa0x2029ED8 -.public BAG_ITEMS_PTR_MIRROR -.public BaseFormsEqual -.public CanAiUseMove -.public CanMonsterSpawn -.public CheckTeamMemberIdxVeneer -.public CheckVariousConditions -.public CheckVariousStatuses2 -.public CloseAdvancedTextBox -.public CloseAdvancedTextBox2 -.public CloseDialogueBox .public CloseInventoryMenu -.public CloseParentMenu .public CloseScrollBox -.public CloseTextBox .public CloseTextBox2 -.public CreateAdvancedTextBox -.public CreateDialogueBox -.public CreateInventoryMenu -.public CreateMonsterSummaryFromMonster -.public CreateParentMenu -.public CreateParentMenuFromStringIds -.public CreateParentMenuWrapper .public CreateScrollBoxSingle -.public CreateTextBox -.public CreateTextBoxWithArg -.public DUNGEON_PTR -.public DUNGEON_SUBMENU_ITEMS_5 -.public DUNGEON_SUBMENU_ITEMS_6 -.public DUNGEON_WINDOW_PARAMS_10 -.public DUNGEON_WINDOW_PARAMS_11 -.public DUNGEON_WINDOW_PARAMS_12 -.public DUNGEON_WINDOW_PARAMS_13 -.public DUNGEON_WINDOW_PARAMS_14 -.public DUNGEON_WINDOW_PARAMS_15 -.public DUNGEON_WINDOW_PARAMS_16 -.public DUNGEON_WINDOW_PARAMS_17 -.public DUNGEON_WINDOW_PARAMS_18 -.public DUNGEON_WINDOW_PARAMS_19 -.public DUNGEON_WINDOW_PARAMS_20 -.public DUNGEON_WINDOW_PARAMS_21 -.public DUNGEON_WINDOW_PARAMS_22 -.public DUNGEON_WINDOW_PARAMS_23 -.public DUNGEON_WINDOW_PARAMS_24 -.public DUNGEON_WINDOW_PARAMS_25 -.public DUNGEON_WINDOW_PARAMS_26 -.public DUNGEON_WINDOW_PARAMS_27 -.public DUNGEON_WINDOW_PARAMS_28 -.public DUNGEON_WINDOW_PARAMS_29 -.public DUNGEON_WINDOW_PARAMS_30 -.public DUNGEON_WINDOW_PARAMS_31 -.public DUNGEON_WINDOW_PARAMS_32 .public DUNGEON_WINDOW_PARAMS_8 -.public DUNGEON_WINDOW_PARAMS_9 -.public Debug_Print0 -.public DisableDungeonSubMenuOption -.public DisplayMessage .public DrawTextInWindow -.public DrawTileGrid -.public FormatMoveString -.public FormatMoveStringMore -.public GetActiveTeamMember -.public GetCurrentBagCapacity -.public GetDexNumber -.public GetItemAction -.public GetItemCategoryVeneer -.public GetItemInfo .public GetItemToUse -.public GetItemToUseByIndex -.public GetKecleonIdToSpawnByFloor .public GetLeader -.public GetLeaderAction -.public GetLeaderChangeFlag -.public GetLeaderMonster -.public GetMaxPp -.public GetMonsterIdFromSpawnEntry -.public GetMonsterName -.public GetNbItemsInBag -.public GetPressedButtons -.public GetRecruitRate2 -.public GetSpeciesString -.public GetStringFromFileVeneer -.public GetTeamMember -.public GetTeamMemberIndex -.public GetTile -.public GetTrapInfo -.public GetUnlockedTactics -.public GetWindowRectangle -.public HandleStairsMenu -.public HideTileGrid -.public InitPreprocessorArgs -.public IqSkillFlagTest -.public IsAdvancedTextBoxActive -.public IsBagFull -.public IsBlinded -.public IsExperienceLocked -.public IsHeldItemInBag -.public IsInventoryMenuActive -.public IsItemUsableNow -.public IsMonsterOnTeam -.public IsNot2TurnsMoveOrSketch -.public IsParentMenuActive -.public IsRecruitingAllowed .public IsScrollBoxActive -.public ItemZInit -.public JoinedAtRangeCheck2Veneer -.public LogMessageByIdWithPopupCheckUser -.public MemAlloc .public MemFree -.public MemZero -.public MonsterCanThrowItems -.public MonsterHasEmbargoStatus -.public OVERLAY31_JP_STRING .public OVERLAY31_UNKNOWN_POINTER__NA_238A26C -.public OVERLAY31_UNKNOWN_POINTER__NA_238A270 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A27C -.public OVERLAY31_UNKNOWN_POINTER__NA_238A280 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A284 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A288 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A28C -.public OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 -.public OVERLAY31_UNKNOWN_STRUCT__NA_238A144 -.public OVERLAY31_UNKNOWN_STRUCT__NA_238A190 -.public PlaySeVolumeWrapper -.public PlayWindowInputSound -.public PopInventoryMenuField0x1A3 .public PositionHasItem -.public PreprocessString -.public PreprocessStringFromId -.public PrintIqSkillsMenu -.public ResumeParentMenu -.public SetAdvancedTextBoxField0x1C2 -.public SetAdvancedTextBoxState5 -.public SetMonsterActionFields -.public ShowStringInDialogueBox -.public SortItemsInBag -.public SpecificRecruitCheck .public StringFromId -.public TeamMemberHasEnabledIqSkill -.public TryPointCameraToMonster -.public UpdateMapSurveyorFlag -.public UpdateWindow -.public YesNoMenu -.public _020A1870 -.public memcpy -.public memset -.public ov10_022BCC60 -.public ov10_022BCC7C -.public ov10_022BCCB0 .public ov10_022BCD10 -.public ov10_022BCDA8 -.public ov10_022BCDBC -.public ov10_022BCDF4 -.public ov10_022BCE44 -.public ov10_022BD474 -.public ov29_022E08F4 -.public ov29_022E1618 -.public ov29_022E1620 -.public ov29_022E2A78 -.public ov29_022EA370 -.public ov29_022EA428 -.public ov29_022EA62C -.public ov29_022EAC78 -.public ov29_022EACCC -.public ov29_022EB2C8 -.public ov29_022EB398 -.public ov29_022EB804 -.public ov29_022EB8B0 -.public ov29_022EB9A0 -.public ov29_022EBA70 -.public ov29_022EBA84 -.public ov29_022EBA94 -.public ov29_022EBAB0 -.public ov29_022EBB4C -.public ov29_022EBB68 -.public ov29_022EBB8C -.public ov29_022EBB98 -.public ov29_022EBBA8 -.public ov29_022EBBE8 -.public ov29_022EBC2C -.public ov29_022ECDE4 -.public ov29_022F0B9C -.public ov29_022F9C34 -.public ov29_023002F0 -.public ov29_02300BF8 -.public ov29_023021F0 -.public ov29_02302388 -.public ov29_0233A0E8 -.public ov29_023468FC -.public ov29_02346E5C -.public ov29_02347100 -.public ov29_02348D00 -.public ov29_0234B034 -.public ov29_0234B084 .public ov29_0234E988 -.public ov29_0234EA18 -.public ov29_0234EBCC -.public ov29_0234F77C -.public ov29_0234FB50 -.public ov29_0234FB60 -.public ov29_0234FBD4 -.public ov29_0235352C -.public ov29_0237C91C -.public ov29_0238280C -.public ov31_02382B54 -.public ov31_02382DAC -.public ov31_023832F0 -.public ov31_02383478 -.public EntityIsValid__02383658 -.public ov31_02389F5C -.public ov31_0238A044 -.public ov31_0238A04C -.public ov31_0238A054 -.public ov31_0238A05C -.public ov31_0238A064 -.public ov31_0238A06C -.public ov31_0238A074 -.public ov31_0238A07C -.public ov31_0238A084 -.public ov31_0238A0A8 -.public ov31_0238A0B0 -.public ov31_0238A0B8 -.public ov31_0238A0C0 -.public ov31_0238A0C8 -.public ov31_0238A0D0 -.public ov31_0238A0D8 -.public ov31_0238A0E0 -.public ov31_0238A0E8 -.public ov31_0238A154 -.public ov31_0238A228 -.public ov31_0238A23C -.public strcpy -.public sub_02001808 -.public sub_0200B3D4 -.public sub_0200D310 -.public sub_02017C74 -.public sub_02017C80 -.public sub_02027B1C -.public sub_0202810C -.public sub_0202812C .public sub_020282F4 -.public sub_02028354 -.public sub_0202A98C -.public sub_0202AB80 -.public sub_0202AB94 -.public sub_0202ABB0 -.public sub_0202B030 -.public sub_0202F334 -.public sub_0202F474 -.public sub_0202F954 -.public sub_0202F9B8 -.public sub_020307EC -.public sub_02030A18 -.public sub_02030A2C -.public sub_020348E4 -.public sub_0203F150 -.public sub_0203F398 -.public sub_0203F990 -.public sub_0203F9CC -.public sub_0203FD14 -.public sub_0203FD38 -.public sub_0203FD44 -.public sub_0204018C -.public sub_0204019C -.public sub_020407C0 -.public sub_020407EC -.public sub_02041094 -.public sub_020410A4 -.public sub_02041154 -.public sub_02041178 -.public sub_02041364 -.public sub_02041484 -.public sub_020416BC -.public sub_020416DC -.public sub_020416FC -.public sub_020417A8 -.public sub_02041A00 -.public sub_02041A18 -.public sub_02041B7C -.public sub_020420F4 -.public sub_0204F10C -.public sub_02053CA0 -.public sub_02054F44 -.public sub_02056228 -.public sub_020585B4 -.public vsprintf diff --git a/asm/include/overlay_31_023838E4.inc b/asm/include/overlay_31_023838E4.inc new file mode 100644 index 00000000..4d2cc086 --- /dev/null +++ b/asm/include/overlay_31_023838E4.inc @@ -0,0 +1,292 @@ +#pragma once +.public AddDungeonSubMenuOption +.public AdvanceFrame +.public AiMovement +.public AllManip1 +.public AllManip2 +.public Arm9LoadUnkFieldNa0x2029EC8 +.public Arm9StoreUnkFieldNa0x2029ED8 +.public BAG_ITEMS_PTR_MIRROR +.public BaseFormsEqual +.public CanAiUseMove +.public CanMonsterSpawn +.public CheckTeamMemberIdxVeneer +.public CheckVariousConditions +.public CheckVariousStatuses2 +.public CloseAdvancedTextBox +.public CloseAdvancedTextBox2 +.public CloseDialogueBox +.public CloseParentMenu +.public CloseScrollBox +.public CloseTextBox +.public CloseTextBox2 +.public CreateAdvancedTextBox +.public CreateDialogueBox +.public CreateInventoryMenu +.public CreateMonsterSummaryFromMonster +.public CreateParentMenu +.public CreateParentMenuFromStringIds +.public CreateParentMenuWrapper +.public CreateScrollBoxSingle +.public CreateTextBox +.public CreateTextBoxWithArg +.public DUNGEON_PTR +.public DUNGEON_SUBMENU_ITEMS_5 +.public DUNGEON_SUBMENU_ITEMS_6 +.public DUNGEON_WINDOW_PARAMS_10 +.public DUNGEON_WINDOW_PARAMS_11 +.public DUNGEON_WINDOW_PARAMS_12 +.public DUNGEON_WINDOW_PARAMS_13 +.public DUNGEON_WINDOW_PARAMS_14 +.public DUNGEON_WINDOW_PARAMS_15 +.public DUNGEON_WINDOW_PARAMS_16 +.public DUNGEON_WINDOW_PARAMS_17 +.public DUNGEON_WINDOW_PARAMS_18 +.public DUNGEON_WINDOW_PARAMS_19 +.public DUNGEON_WINDOW_PARAMS_20 +.public DUNGEON_WINDOW_PARAMS_21 +.public DUNGEON_WINDOW_PARAMS_22 +.public DUNGEON_WINDOW_PARAMS_23 +.public DUNGEON_WINDOW_PARAMS_24 +.public DUNGEON_WINDOW_PARAMS_25 +.public DUNGEON_WINDOW_PARAMS_26 +.public DUNGEON_WINDOW_PARAMS_27 +.public DUNGEON_WINDOW_PARAMS_28 +.public DUNGEON_WINDOW_PARAMS_29 +.public DUNGEON_WINDOW_PARAMS_30 +.public DUNGEON_WINDOW_PARAMS_31 +.public DUNGEON_WINDOW_PARAMS_32 +.public DUNGEON_WINDOW_PARAMS_9 +.public Debug_Print0 +.public DisableDungeonSubMenuOption +.public DisplayMessage +.public DrawTextInWindow +.public DrawTileGrid +.public EntityIsValid__02383658 +.public FormatMoveString +.public FormatMoveStringMore +.public GetActiveTeamMember +.public GetCurrentBagCapacity +.public GetDexNumber +.public GetItemAction +.public GetItemCategoryVeneer +.public GetItemInfo +.public GetItemToUseByIndex +.public GetKecleonIdToSpawnByFloor +.public GetLeader +.public GetLeaderAction +.public GetLeaderChangeFlag +.public GetLeaderMonster +.public GetMaxPp +.public GetMonsterIdFromSpawnEntry +.public GetMonsterName +.public GetNbItemsInBag +.public GetPressedButtons +.public GetRecruitRate2 +.public GetSpeciesString +.public GetStringFromFileVeneer +.public GetTeamMember +.public GetTeamMemberIndex +.public GetTile +.public GetTrapInfo +.public GetUnlockedTactics +.public GetWindowRectangle +.public HandleStairsMenu +.public HideTileGrid +.public InitPreprocessorArgs +.public IqSkillFlagTest +.public IsAdvancedTextBoxActive +.public IsBagFull +.public IsBlinded +.public IsExperienceLocked +.public IsHeldItemInBag +.public IsInventoryMenuActive +.public IsItemUsableNow +.public IsMonsterOnTeam +.public IsNot2TurnsMoveOrSketch +.public IsParentMenuActive +.public IsRecruitingAllowed +.public IsScrollBoxActive +.public ItemZInit +.public JoinedAtRangeCheck2Veneer +.public LogMessageByIdWithPopupCheckUser +.public MemAlloc +.public MemFree +.public MemZero +.public MonsterCanThrowItems +.public MonsterHasEmbargoStatus +.public OVERLAY31_JP_STRING +.public OVERLAY31_UNKNOWN_POINTER__NA_238A26C +.public OVERLAY31_UNKNOWN_POINTER__NA_238A270 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A27C +.public OVERLAY31_UNKNOWN_POINTER__NA_238A280 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A284 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A288 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A28C +.public OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 +.public OVERLAY31_UNKNOWN_STRUCT__NA_238A144 +.public OVERLAY31_UNKNOWN_STRUCT__NA_238A190 +.public PlaySeVolumeWrapper +.public PlayWindowInputSound +.public PopInventoryMenuField0x1A3 +.public PreprocessString +.public PreprocessStringFromId +.public PrintIqSkillsMenu +.public ResumeParentMenu +.public SetAdvancedTextBoxField0x1C2 +.public SetAdvancedTextBoxState5 +.public SetMonsterActionFields +.public ShowStringInDialogueBox +.public SortItemsInBag +.public SpecificRecruitCheck +.public StringFromId +.public TeamMemberHasEnabledIqSkill +.public TryPointCameraToMonster +.public UpdateMapSurveyorFlag +.public UpdateWindow +.public YesNoMenu +.public _020A1870 +.public memcpy +.public memset +.public ov10_022BCC60 +.public ov10_022BCC7C +.public ov10_022BCCB0 +.public ov10_022BCDA8 +.public ov10_022BCDBC +.public ov10_022BCDF4 +.public ov10_022BCE44 +.public ov10_022BD474 +.public ov29_022E08F4 +.public ov29_022E1618 +.public ov29_022E1620 +.public ov29_022E2A78 +.public ov29_022EA370 +.public ov29_022EA428 +.public ov29_022EA62C +.public ov29_022EAC78 +.public ov29_022EACCC +.public ov29_022EB2C8 +.public ov29_022EB398 +.public ov29_022EB804 +.public ov29_022EB8B0 +.public ov29_022EB9A0 +.public ov29_022EBA70 +.public ov29_022EBA84 +.public ov29_022EBA94 +.public ov29_022EBAB0 +.public ov29_022EBB4C +.public ov29_022EBB68 +.public ov29_022EBB8C +.public ov29_022EBB98 +.public ov29_022EBBA8 +.public ov29_022EBBE8 +.public ov29_022EBC2C +.public ov29_022ECDE4 +.public ov29_022F0B9C +.public ov29_022F9C34 +.public ov29_023002F0 +.public ov29_02300BF8 +.public ov29_023021F0 +.public ov29_02302388 +.public ov29_0233A0E8 +.public ov29_023468FC +.public ov29_02346E5C +.public ov29_02347100 +.public ov29_02348D00 +.public ov29_0234B034 +.public ov29_0234B084 +.public ov29_0234E988 +.public ov29_0234EA18 +.public ov29_0234EBCC +.public ov29_0234F77C +.public ov29_0234FB50 +.public ov29_0234FB60 +.public ov29_0234FBD4 +.public ov29_0235352C +.public ov29_0237C91C +.public ov29_0238280C +.public ov31_02382B54 +.public ov31_02382DAC +.public ov31_023832F0 +.public ov31_02383478 +.public ov31_0238372C +.public ov31_02383768 +.public ov31_023837C8 +.public ov31_02383854 +.public ov31_02383880 +.public ov31_02389F5C +.public ov31_0238A044 +.public ov31_0238A04C +.public ov31_0238A054 +.public ov31_0238A05C +.public ov31_0238A064 +.public ov31_0238A06C +.public ov31_0238A074 +.public ov31_0238A07C +.public ov31_0238A084 +.public ov31_0238A0A8 +.public ov31_0238A0B0 +.public ov31_0238A0B8 +.public ov31_0238A0C0 +.public ov31_0238A0C8 +.public ov31_0238A0D0 +.public ov31_0238A0D8 +.public ov31_0238A0E0 +.public ov31_0238A0E8 +.public ov31_0238A154 +.public ov31_0238A228 +.public ov31_0238A23C +.public strcpy +.public sub_02001808 +.public sub_0200B3D4 +.public sub_0200D310 +.public sub_02017C74 +.public sub_02017C80 +.public sub_02027B1C +.public sub_0202810C +.public sub_0202812C +.public sub_02028354 +.public sub_0202A98C +.public sub_0202AB80 +.public sub_0202AB94 +.public sub_0202ABB0 +.public sub_0202B030 +.public sub_0202F334 +.public sub_0202F474 +.public sub_0202F954 +.public sub_0202F9B8 +.public sub_020307EC +.public sub_02030A18 +.public sub_02030A2C +.public sub_020348E4 +.public sub_0203F150 +.public sub_0203F398 +.public sub_0203F990 +.public sub_0203F9CC +.public sub_0203FD14 +.public sub_0203FD38 +.public sub_0203FD44 +.public sub_0204018C +.public sub_0204019C +.public sub_020407C0 +.public sub_020407EC +.public sub_02041094 +.public sub_020410A4 +.public sub_02041154 +.public sub_02041178 +.public sub_02041364 +.public sub_02041484 +.public sub_020416BC +.public sub_020416DC +.public sub_020416FC +.public sub_020417A8 +.public sub_02041A00 +.public sub_02041A18 +.public sub_02041B7C +.public sub_020420F4 +.public sub_0204F10C +.public sub_02053CA0 +.public sub_02054F44 +.public sub_02056228 +.public sub_020585B4 +.public vsprintf diff --git a/asm/overlay_31_0238367C.s b/asm/overlay_31_0238367C.s index 2a2ea868..4255c9d0 100644 --- a/asm/overlay_31_0238367C.s +++ b/asm/overlay_31_0238367C.s @@ -178,8567 +178,3 @@ _0238387C: .word 0x00001D3E _0238387C: .word 0x000008E6 #endif arm_func_end ov31_02383854 - - arm_func_start ov31_02383880 -ov31_02383880: ; 0x02383880 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r5, #0 - mov r7, r0 - add r0, r5, #1 - ldr r8, _023838E0 ; =DUNGEON_PTR - strb r5, [r7] - and r6, r0, #0xff - mov r4, r5 -_023838A0: - ldr r0, [r8] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - bl EntityIsValid__02383658 - cmp r0, #0 - addeq r0, r7, r5 - streqb r4, [r0, #1] - addne r0, r7, r5 - addne r1, r6, #1 - strneb r6, [r0, #1] - add r5, r5, #1 - andne r6, r1, #0xff - cmp r5, #4 - blt _023838A0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_023838E0: .word DUNGEON_PTR - arm_func_end ov31_02383880 - -; https://decomp.me/scratch/pyVsB - arm_func_start ov31_023838E4 -ov31_023838E4: ; 0x023838E4 -#ifdef JAPAN -#define OV31_023838E4_OFFSET -0xA4 -#else -#define OV31_023838E4_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x234 - sub sp, sp, #0x400 - mov r2, #0 - mov r5, r2 - str r2, [sp, #0x30] - mov sl, r0 - mov sb, r1 - mov r6, r5 - ldr r7, [sl, #0xb4] - bl ov29_022EBB4C - mov r0, #0x1280 - mov r1, #8 - bl MemAlloc - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r4, #1 - str r0, [r1] - add r0, r0, #0x1000 - str sl, [r0, #0x19c] - ldr r0, [r1] - add r3, r4, #1 - add r0, r0, #0x1000 - strb r4, [r0, #0x193] - ldr r0, [r1] - mov r2, #0 - add r0, r0, #0x1000 - strb r4, [r0, #0x192] - ldr r8, [r1] - mov r0, #1 - add r8, r8, #0x1000 - strb r4, [r8, #0x194] - ldr r8, [r1] - add r8, r8, #0x1000 - strb r4, [r8, #0x195] - ldr r4, [r1] - add r4, r4, #0x1000 - str r3, [r4, #0x198] - ldr r3, [r1] - add r3, r3, #0x1000 - str r2, [r3, #0x1ac] - ldr r3, [r1] - add r3, r3, #0x1000 - strb r0, [r3, #0x1b1] - ldr r0, [r1] - add r0, r0, #0x1000 - strb r2, [r0, #0x1b2] - ldr r0, [r1] - add r0, r0, #0x1000 - str r2, [r0, #0x1b4] - ldr r0, [r1] - add r0, r0, #0x278 - add r0, r0, #0x1000 - bl ov31_02383880 - cmp sb, #0 - beq _02383A1C - ldrb r0, [sb] - cmp r0, #0 - beq _023839E4 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [sb, #4] - ldr r0, [r0] - mov r6, #1 - add r0, r0, #0x1000 - str r1, [r0, #0x1b4] -_023839E4: - ldrb r0, [sb, #1] - cmp r0, #0 - ldreq r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - moveq r1, #0 - ldreq r0, [r0] - addeq r0, r0, #0x1000 - streqb r1, [r0, #0x1b1] - ldrb r0, [sb, #2] - cmp r0, #0 - ldrne r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - movne r1, #1 - ldrne r0, [r0] - addne r0, r0, #0x1000 - strneb r1, [r0, #0x1b2] -_02383A1C: - mov r0, #3 - bl Arm9LoadUnkFieldNa0x2029EC8 - mov r1, r0 - ldr r0, _0238489C ; =OVERLAY31_JP_STRING - bl Debug_Print0 - bl GetNbItemsInBag - ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - cmp r6, #0 - ldr r1, [r2] - add r1, r1, #0x1000 - str r0, [r1, #0x1a8] - ldrne r0, [r2] - movne r1, #0 - addne r0, r0, #0x1000 - strneb r1, [r0, #0x1b3] - bne _02383A74 - mov r0, sl - bl ov31_0238372C - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r1] - add r1, r1, #0x1000 - strb r0, [r1, #0x1b3] -_02383A74: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r2, [r0] - add r0, r2, #0x1000 - ldrb r1, [r0, #0x1b2] - cmp r1, #0 - ldreq r1, [r0, #0x1a8] - cmpeq r1, #0 - ldreqb r0, [r0, #0x1b3] - cmpeq r0, #0 - bne _02383AC4 - ldr r1, _023848A0 ; =0x000008E5 - mov r0, #0 - mov r2, #1 - bl DisplayMessage - bl ov31_023837C8 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #1 - b _0238511C -_02383AC4: - add r0, r2, #0x1000 - ldr r0, [r0, #0x1a8] - cmp r0, #0 - bne _02383B08 - mov r0, sl - bl ov31_0238372C - ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r3, #1 - ldr r1, [r2] - add r1, r1, #0x1000 - strb r0, [r1, #0x1b3] - ldr r0, [r2] - add r0, r0, #0x1000 - strb r3, [r0, #0x1b2] - ldr r0, [r2] - add r0, r0, #0x1000 - strb r3, [r0, #0x1b1] -_02383B08: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - cmp r0, r1 - beq _02383B48 - bl IsInventoryMenuActive - cmp r0, #0 - bne _02383D78 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCC7C - b _02383D78 -_02383B48: - bl GetNbItemsInBag - ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r4] - add r1, r1, #0x1000 - str r0, [r1, #0x1a8] - ldr r0, [r4] - add r0, r0, #0x1000 - ldr r0, [r0, #0x1a8] - cmp r0, #0 - beq _02383C44 - ldr fp, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - mov r8, #0 -_02383B78: - mov r0, #6 - mul r1, r8, r0 - ldr r0, [fp] - ldr r2, [r0, #0x384] - ldrb r0, [r2, r1] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02383BD8 - ldrb r0, [r2, r1] - tst r0, #4 - beq _02383BD8 - bic r0, r0, #4 - strb r0, [r2, r1] - ldr r1, [r4] - mov r0, #3 - add r1, r1, #0x1000 - str r8, [r1, #0x1ac] - ldr r1, [r4] - add r1, r1, #0x1000 - ldr r1, [r1, #0x1ac] - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 -_02383BD8: - add r8, r8, #1 - cmp r8, #0x32 - blt _02383B78 - ldr fp, _023848A8 ; =DUNGEON_PTR - mov r4, #0 -_02383BEC: - ldr r0, [fp] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r8, [r0, #0xb28 + OV31_023838E4_OFFSET] - mov r0, r8 - bl EntityIsValid__02383658 - cmp r0, #0 - beq _02383C38 - ldr r1, [r8, #0xb4] - ldrb r0, [r1, #0x62] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02383C38 - ldrb r0, [r1, #0x62] - tst r0, #4 - bicne r0, r0, #4 - strneb r0, [r1, #0x62] -_02383C38: - add r4, r4, #1 - cmp r4, #4 - blt _02383BEC -_02383C44: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r4, [r0] - add r0, r4, #0x1000 - ldrb r1, [r0, #0x1b2] - cmp r1, #0 - bne _02383D1C - ldr r0, [r0, #0x1a8] - cmp r0, #0 - beq _02383D1C - mov r0, #3 - bl Arm9LoadUnkFieldNa0x2029EC8 - ldr r2, _023848AC ; =ov31_02383478 - add r1, r4, #0x278 - str r2, [sp] - add r1, r1, #0x1000 - str r1, [sp, #4] - add r1, r4, #0x1000 - ldrb r2, [r1, #0x1b3] - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r3, r4, #0x1f8 - str r2, [sp, #8] - ldr r1, [r1] - mov r2, r0 - add r0, r1, #0x1000 - ldr r0, [r0, #0x1a8] - mov r1, r6 - add r3, r3, #0x1000 - bl ov10_022BD474 - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - cmp r6, #0 - ldr r1, [r1] - add r1, r1, #0x1000 - strb r0, [r1, #0x193] - beq _02383CEC - ldr r0, _023848B0 ; =DUNGEON_WINDOW_PARAMS_10 - ldr r1, _023848B4 ; =ov31_02383854 - bl CreateTextBox - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r1] - add r1, r1, #0x1000 - strb r0, [r1, #0x194] - b _02383D78 -_02383CEC: - ldr r0, _023848B8 ; =DUNGEON_WINDOW_PARAMS_11 - mov r1, #0 - bl CreateTextBox - ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r3, #0 - ldr r1, [r2] - add r1, r1, #0x1000 - strb r0, [r1, #0x195] - ldr r0, [r2] - add r0, r0, #0x1000 - str r3, [r0, #0x198] - b _02383D78 -_02383D1C: - ldr r3, _023848BC ; =0x000008E3 - add r0, sp, #0x540 - add r1, r4, #0x278 - strh r3, [r0, #0x64] - mov r2, #0x10 - str r2, [sp, #0x5a8] - add r0, r1, #0x1000 - str r0, [sp] - mov r4, #1 - str r4, [sp, #4] - add r2, sp, #0x500 - str r4, [sp, #8] - mov r4, #0 - ldr r0, _023848C0 ; =DUNGEON_WINDOW_PARAMS_12 - ldr r1, _023848C4 ; =0x00400813 - ldr r3, _023848AC ; =ov31_02383478 - add r2, r2, #0x9c - str r4, [sp, #0xc] - bl CreateInventoryMenu - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r1] - add r1, r1, #0x1000 - strb r0, [r1, #0x193] -_02383D78: - mvn r0, #0 - str r0, [sp, #0x38] - sub r0, r0, #1 - ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - str r0, [sp, #0x3c] -_02383D8C: - mov r0, #0x14 - bl AdvanceFrame - mov r0, #0 - add r1, sp, #0x42 - bl GetPressedButtons - ldr r1, [r4] - add r0, r1, #0x1000 - ldrb r0, [r0, #0x1b2] - cmp r0, #0 - bne _023843D0 - add r0, r1, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCE44 - mov fp, r0 - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl PopInventoryMenuField0x1A3 - str r0, [sp, #0x2c] - ldr r0, [r4] - add r1, r0, #0x1100 - ldrsb r8, [r1, #0x95] - ldr r0, [sp, #0x3c] - cmp r8, r0 - beq _02384054 - ldrsb r0, [r1, #0x93] - bl ov10_022BCE44 - cmp r0, #0 - ldr r0, [r4] - bne _02383F7C - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDA8 - str r0, [sp, #0x34] - ldr r0, [r4] - add r1, r0, #0x1000 - ldr r2, [r1, #0x198] - ldr r0, [sp, #0x34] - cmp r2, r0 - beq _02384054 - str r0, [r1, #0x198] - ldr r1, [r4] - mov r0, r8 - add r1, r1, #0x1000 - ldr r1, [r1, #0x19c] - str r1, [sp, #0x28] - bl sub_02027B1C - ldr r1, [sp, #0x34] - mov r0, #6 - mul r2, r1, r0 - ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r0, [r0, #0x384] - add r1, r0, r2 - ldrb r0, [r0, r2] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02383F28 - ldrb r0, [r1, #1] - str r0, [sp, #0x10] - cmp r0, #0 - beq _02383F00 - ldr r1, _023848A8 ; =DUNGEON_PTR - add r0, sp, #0x400 - ldr r3, [r1] - ldr r1, [sp, #0x10] - add r0, r0, #0x4c - add r1, r3, r1, lsl #2 - add r1, r1, #0x12000 - ldr r1, [r1, #0xb24 + OV31_023838E4_OFFSET] - mov r2, #0 - bl ov29_022E2A78 - add r0, sp, #0x400 - add r0, r0, #0x4c - str r0, [sp, #0x584] - add r0, sp, #0x500 -#ifdef JAPAN - ldr r2, [sp, #0x38] - add r0, r0, #0x4c - str r0, [sp] - add r0, sp, #0x4c - mov r1, #0x400 - add r2, r2, #0x1d40 -#else - add r0, r0, #0x4c - str r0, [sp] - ldr r2, _023848C8 ; =0x000008E7 - add r0, sp, #0x4c - mov r1, #0x400 -#endif - mov r3, #0 - bl PreprocessStringFromId - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r1, [r0] - ldr r0, [sp, #0x10] - add r0, r1, r0, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb24 + OV31_023838E4_OFFSET] - str r0, [sp, #0x28] - b _02383F34 -_02383F00: - ldrsh r0, [r1, #4] -#if defined(EUROPE) - add r0, r0, #0x4b - add r0, r0, #0x2f00 -#elif defined(JAPAN) - add r0, r0, #0x41 - add r0, r0, #0x1d00 -#else - add r0, r0, #0x49 - add r0, r0, #0x2f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r1, r0 - add r0, sp, #0x4c - bl strcpy - b _02383F34 -_02383F28: - ldr r1, _023848CC ; =ov31_02389F5C - add r0, sp, #0x4c - bl strcpy -_02383F34: - mov r1, #2 - mov r0, r8 - mov r2, r1 - add r3, sp, #0x4c - bl DrawTextInWindow - mov r0, r8 - bl UpdateWindow - ldr r0, [sp, #0x28] - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - ldr r0, [sp, #0x28] - mov r2, #1 - add r0, r0, #4 - mov r1, #0 - mov r3, r2 - bl DrawTileGrid - b _02384054 -_02383F7C: - add r0, r0, #0x1000 - ldr r1, [r0, #0x198] - cmp r1, #0x7f - beq _02384054 - ldr r1, [r0, #0x19c] - ldrsh r0, [r1, #4] - ldrsh r1, [r1, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _02383FE4 - ldrsh r0, [r0, #4] -#if defined(EUROPE) - add r0, r0, #0x4b - add r0, r0, #0x2f00 -#elif defined(JAPAN) - add r0, r0, #0x41 - add r0, r0, #0x1d00 -#else - add r0, r0, #0x49 - add r0, r0, #0x2f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r1, r0 - add r0, sp, #0x4c - bl strcpy - b _02383FF0 -_02383FE4: - ldr r1, _023848CC ; =ov31_02389F5C - add r0, sp, #0x4c - bl strcpy -_02383FF0: - mov r0, r8 - bl sub_02027B1C - mov r1, #2 - mov r0, r8 - mov r2, r1 - add r3, sp, #0x4c - bl DrawTextInWindow - mov r0, r8 - bl UpdateWindow - ldr r0, [r4] - mov r1, #0 - add r2, r0, #0x1000 - mov r0, #0x7f - str r0, [r2, #0x198] - ldr r0, [r4] - mov r2, #1 - add r0, r0, #0x1000 - ldr r8, [r0, #0x19c] - mov r0, r8 - bl TryPointCameraToMonster - mov r2, #1 - add r0, r8, #4 - mov r1, #0 - mov r3, r2 - bl DrawTileGrid -_02384054: - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl IsInventoryMenuActive - cmp r0, #0 - beq _02384088 - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDA8 - and r1, r0, #0xff - mov r0, #3 - bl Arm9StoreUnkFieldNa0x2029ED8 -_02384088: - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl IsInventoryMenuActive - cmp r0, #0 - bne _023841A4 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDBC - movs r4, r0 - bmi _0238419C - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - and r1, r4, #0xff - ldr r2, [r0] - mov r0, #3 - add r2, r2, #0x1000 - str r4, [r2, #0x1ac] - bl Arm9StoreUnkFieldNa0x2029ED8 - cmp fp, #0 - bne _02384138 - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r0, #6 - ldr r1, [r1] - mul r8, r4, r0 - add r0, r1, #0x1000 - ldrb r3, [r0, #0x1b2] - ldr r2, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - add r1, sl, #4 - str r3, [sp] - ldr r2, [r2] - ldr r0, [r0, #0x1ac] - ldr r2, [r2, #0x384] - mov r3, #0 - add r2, r2, r8 - ldrb r2, [r2, #1] - bl ov29_022EBAB0 - ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r0, [r0, #0x384] - add r0, r0, r8 - str r0, [sb, #4] - b _02384194 -_02384138: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r1, sl, #4 - ldr r0, [r0] - mov r2, #0 - add r0, r0, #0x1000 - ldrb r4, [r0, #0x1b2] - mov r3, #1 - str r4, [sp] - ldr r0, [r0, #0x1ac] - bl ov29_022EBAB0 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - strne r0, [sb, #4] - moveq r0, #0 - streq r0, [sb, #4] -_02384194: - mov r4, #1 - b _02384438 -_0238419C: - mov r4, #2 - b _02384438 -_023841A4: - ldrh r0, [sp, #0x42] - tst r0, #8 - beq _023842DC - ldr r0, _023848D0 ; =0x00003F04 - bl sub_02017C80 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDF4 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDBC - ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r2] - add r1, r1, #0x1000 - str r0, [r1, #0x1ac] - ldr r1, [r2] - mov r0, #3 - add r1, r1, #0x1000 - ldr r1, [r1, #0x1ac] - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 - cmp fp, #0 - bne _02384278 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r3, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - mov r2, #6 - add r0, r0, #0x1000 - ldrb r4, [r0, #0x1b2] - ldr r0, [r0, #0x1ac] - add r1, sl, #4 - str r4, [sp] - ldr r4, [r3] - mov r3, #0 - ldr r4, [r4, #0x384] - mla r2, r0, r2, r4 - ldrb r2, [r2, #1] - bl ov29_022EBAB0 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r1, [r1] - add r0, r0, #0x1000 - ldr r2, [r1, #0x384] - ldr r1, [r0, #0x1ac] - mov r0, #6 - mla r0, r1, r0, r2 - str r0, [sb, #4] - b _023842D4 -_02384278: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r1, sl, #4 - ldr r0, [r0] - mov r2, #0 - add r0, r0, #0x1000 - ldrb r4, [r0, #0x1b2] - mov r3, #1 - str r4, [sp] - ldr r0, [r0, #0x1ac] - bl ov29_022EBAB0 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - strne r0, [sb, #4] - moveq r0, #0 - streq r0, [sb, #4] -_023842D4: - mov r4, #3 - b _02384438 -_023842DC: - tst r0, #4 - bne _023842F4 - tst r0, #0x800 - ldreq r0, [sp, #0x2c] - cmpeq r0, #0 - beq _02383D8C -_023842F4: - cmp r6, #0 - cmpeq fp, #0 - bne _02383D8C - ldr r0, [sp, #0x2c] - cmp r0, #0 - bne _02384314 - mov r0, #5 - bl PlaySeVolumeWrapper -_02384314: - bl ov29_02346E5C - bl SortItemsInBag - mov r8, #0 -_02384320: - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r8, lsl #2 - add r0, r0, #0x12000 - ldr fp, [r0, #0xb28 + OV31_023838E4_OFFSET] - mov r0, fp - bl EntityIsValid__02383658 - cmp r0, #0 - beq _02384374 - ldr r1, [fp, #0xb4] - ldrb r0, [r1, #0x62] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02384374 - ldrsh r0, [r1, #0x66] - cmp r0, #0xb7 - bne _02384374 - add r0, r1, #0x62 - bl ItemZInit -_02384374: - add r8, r8, #1 - cmp r8, #4 - blt _02384320 - ldr r0, [r4] - add r1, r0, #0x1000 - ldr r0, [sp, #0x38] - str r0, [r1, #0x198] - bl GetNbItemsInBag - movs r1, r0 - beq _023843C0 - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCC60 - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCCB0 - b _02383D8C -_023843C0: - mov r0, #1 - str r0, [sp, #0x30] - mov r4, #2 - b _02384438 -_023843D0: - add r0, r1, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCDF4 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r1, sl, #4 - ldr r0, [r0] - mov r2, #0 - add r0, r0, #0x1000 - ldrb r4, [r0, #0x1b2] - mov r3, #1 - str r4, [sp] - ldr r0, [r0, #0x1ac] - bl ov29_022EBAB0 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - bl GetTile - ldr r0, [r0, #0x10] - bl GetItemInfo - ldrb r1, [r0] - mov r4, #1 - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - moveq r0, #0 - str r0, [sb, #4] -_02384438: - mov r0, #0x14 - bl AdvanceFrame - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r0] - add r0, r1, #0x1000 - ldrb r0, [r0, #0x1b2] - cmp r0, #0 - bne _02384490 - add r0, r1, #0x1100 - ldrsb r0, [r0, #0x93] - bl ov10_022BCE44 - cmp r0, #0 - bne _02384490 - ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - ldr r0, [r0, #0x384] - ldrb r0, [r0] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - moveq r4, #2 -_02384490: - cmp r4, #2 - bne _023844AC - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #1 - b _023850D8 -_023844AC: - cmp r4, #0 - beq _023850D8 - cmp r4, #3 - bne _023844D8 - add r0, r7, #0x4a - bl ov29_022EBBE8 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_023844D8: - cmp r6, #0 - beq _023844FC - add r0, r7, #0x54 - bl ov29_022EBB68 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_023844FC: - bl ov29_022EBB8C - mov r1, r0 - mov r0, sl - mov r2, #0xa - bl GetItemToUseByIndex - mov r8, r0 - ldr r0, [sl, #0xb4] - str r0, [sp, #0x14] - bl ov29_022EBA70 - bl ov29_022EBB98 - cmp r0, #0x90 - bhs _023849F4 - bl ov29_022EBB98 - cmp r0, #0x80 - bne _02384598 - ldrsh r1, [r8, #4] - mov r0, #9 - bl AddDungeonSubMenuOption - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #6 - beq _02384598 - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _02384570 - bl IsBagFull - b _02384588 -_02384570: - ldr r0, [sp, #0x14] - ldrb r0, [r0, #0x62] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_02384588: - cmp r0, #0 - beq _02384598 - mov r0, #9 - bl DisableDungeonSubMenuOption -_02384598: - bl ov29_022EBB98 - cmp r0, #0x80 - bne _023845C4 - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _023845C4 - ldrsh r1, [r8, #4] - mov r0, #0xa - bl AddDungeonSubMenuOption -_023845C4: - mov r0, r8 - bl GetItemAction - movs r4, r0 - beq _02384654 - ldrsh r1, [r8, #4] - bl AddDungeonSubMenuOption - ldrb r0, [r8] - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _023845FC - mov r0, r4 - bl DisableDungeonSubMenuOption -_023845FC: - mov r0, r8 - bl ov29_023468FC - cmp r0, #0 - bne _02384614 - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384614: - mov r0, sl - bl MonsterHasEmbargoStatus - cmp r0, #0 - bne _02384634 - mov r0, r8 - bl ov29_02348D00 - cmp r0, #0 - beq _0238463C -_02384634: - mov r0, r4 - bl DisableDungeonSubMenuOption -_0238463C: - mov r0, r8 - bl IsItemUsableNow - cmp r0, #0 - bne _02384654 - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384654: - bl ov29_022EBB98 - cmp r0, #0x33 - bhs _02384728 - ldrb r0, [r8, #1] - cmp r0, #0 - bne _02384728 - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #0 - beq _0238468C - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #1 - bne _02384728 -_0238468C: - ldrb r0, [r8] - ldrsh r1, [r8, #4] - tst r0, #0x10 - beq _023846A8 - mov r0, #0x3d - bl AddDungeonSubMenuOption - b _023846B0 -_023846A8: - mov r0, #0x3c - bl AddDungeonSubMenuOption -_023846B0: - ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR - mov r3, #0 - ldr r4, [r0] - mov lr, #1 - mov r0, #6 - b _02384720 -_023846C8: - mul r1, r3, r0 - ldr r2, [r4, #0x384] - ldrb fp, [r2, r1] - tst fp, #1 - movne ip, lr - moveq ip, #0 - tst ip, #0xff - beq _0238471C - ldrb r1, [r2, r1] - tst r1, #0x10 - beq _0238471C - tst fp, #8 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _0238471C - mov r0, #0x3c - bl DisableDungeonSubMenuOption - mov r0, #0x3d - bl DisableDungeonSubMenuOption - b _02384728 -_0238471C: - add r3, r3, #1 -_02384720: - cmp r3, #0x32 - blt _023846C8 -_02384728: - bl ov29_022EBB98 - cmp r0, #0x81 - beq _02384804 - bl ov29_022EBB98 - cmp r0, #0x80 - beq _02384860 - ldrsh r1, [r8, #4] - mov r2, #0 - mov r0, #0x36 - str r2, [sp, #0x18] - bl AddDungeonSubMenuOption - mov r4, #0 -_02384758: - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] - str r0, [sp, #0x1c] - bl EntityIsValid__02383658 - cmp r0, #0 - beq _023847A0 - ldr r0, [sp, #0x1c] - mov r1, #0 - ldr fp, [r0, #0xb4] -#ifdef JAPAN - strb r1, [fp, #0x15d] -#else - strb r1, [fp, #0x161] -#endif - bl ov29_02300BF8 - cmp r0, #0 - moveq r0, #1 - streq r0, [sp, #0x18] -#ifdef JAPAN - streqb r0, [fp, #0x15d] -#else - streqb r0, [fp, #0x161] -#endif -_023847A0: - add r4, r4, #1 - cmp r4, #4 - blt _02384758 - add r0, sp, #0x40 - bl sub_0204F10C - cmp r0, #0 - beq _023847EC - bl GetCurrentBagCapacity - cmp r0, #2 - bge _023847EC - ldrsh r0, [sp, #0x40] - sub r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #1 - movls r0, #0 - strls r0, [sp, #0x18] -_023847EC: - ldr r0, [sp, #0x18] - cmp r0, #0 - bne _02384860 - mov r0, #0x36 - bl DisableDungeonSubMenuOption - b _02384860 -_02384804: - ldr r0, _023848A8 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _02384860 - ldrsh r1, [r8, #4] - mov r0, #0x37 - bl AddDungeonSubMenuOption - mov r0, r8 - bl IsHeldItemInBag - cmp r0, #0 - beq _02384840 - ldrsh r1, [r8, #4] - mov r0, #0x3e - bl AddDungeonSubMenuOption -_02384840: - mov r0, sl - bl CheckVariousConditions - cmp r0, #0 - beq _02384860 - mov r0, #0x37 - bl DisableDungeonSubMenuOption - mov r0, #0x3e - bl DisableDungeonSubMenuOption -_02384860: - bl ov29_022EBB98 - cmp r0, #0x33 - bhs _02384908 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - bl GetTile - mov r4, r0 - ldr r0, [r4, #0x10] - cmp r0, #0 - bne _023848D4 - ldrsh r1, [r8, #4] - mov r0, #8 - bl AddDungeonSubMenuOption - b _02384908 - .align 2, 0 -#ifdef JAPAN -#define OV31_023838E4_OFFSET_2 0x1458 -#else -#define OV31_023838E4_OFFSET_2 0 -#endif -_02384898: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C -_0238489C: .word OVERLAY31_JP_STRING -_023848A0: .word 0x000008E5 + OV31_023838E4_OFFSET_2 -_023848A4: .word BAG_ITEMS_PTR_MIRROR -_023848A8: .word DUNGEON_PTR -_023848AC: .word ov31_02383478 -_023848B0: .word DUNGEON_WINDOW_PARAMS_10 -_023848B4: .word ov31_02383854 -_023848B8: .word DUNGEON_WINDOW_PARAMS_11 -_023848BC: .word 0x000008E3 + OV31_023838E4_OFFSET_2 -_023848C0: .word DUNGEON_WINDOW_PARAMS_12 -_023848C4: .word 0x00400813 -#ifndef JAPAN -_023848C8: .word 0x000008E7 -#endif -_023848CC: .word ov31_02389F5C -_023848D0: .word 0x00003F04 -_023848D4: - ldr r0, [r0] - cmp r0, #3 - bne _02384908 - ldrsh r1, [r8, #4] - mov r0, #0x3a - bl AddDungeonSubMenuOption - ldr r0, [r4, #0x10] - bl ov29_022E1620 - bl ov29_02348D00 - cmp r0, #0 - beq _02384908 - mov r0, #0x3a - bl DisableDungeonSubMenuOption -_02384908: - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #0 - bne _02384928 - ldrsh r1, [r8, #4] - mov r0, #0x27 - bl AddDungeonSubMenuOption - b _02384950 -_02384928: - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #1 - ldrsh r1, [r8, #4] - bne _02384948 - mov r0, #0x41 - bl AddDungeonSubMenuOption - b _02384950 -_02384948: - mov r0, #0xb - bl AddDungeonSubMenuOption -_02384950: - ldr r0, [sp, #0x14] - bl MonsterCanThrowItems - cmp r0, #0 - bne _02384978 - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption - mov r0, #0xb - bl DisableDungeonSubMenuOption -_02384978: - mov r0, sl - bl MonsterHasEmbargoStatus - cmp r0, #0 - beq _023849A0 - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption - mov r0, #0xb - bl DisableDungeonSubMenuOption -_023849A0: - mov r0, r8 - bl ov29_02348D00 - cmp r0, #0 - beq _023849D8 - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption - mov r0, #0xb - bl DisableDungeonSubMenuOption - mov r0, #0xa - bl DisableDungeonSubMenuOption - mov r0, #9 - bl DisableDungeonSubMenuOption -_023849D8: - mov r0, r8 - bl IsItemUsableNow - cmp r0, #0 - bne _02384C48 - mov r0, #0xb - bl DisableDungeonSubMenuOption - b _02384C48 -_023849F4: - bl ov29_022EBB98 - ldr r1, _023848A8 ; =DUNGEON_PTR - sub r2, r0, #0x90 - ldr r0, [r1] - add r0, r0, r2, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] - str r0, [sp, #0x20] - bl EntityIsValid__02383658 - cmp r0, #0 - beq _02384C48 - mov r0, #0 - str r0, [sp, #0x24] - ldr r0, [sp, #0x20] - ldr r4, [sp, #0x24] - mov r1, r0 - ldr fp, [r1, #0xb4] - bl CheckVariousConditions - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #0x24] - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #5 - ldrsh r0, [r8, #4] - moveq r4, #1 - bl GetItemCategoryVeneer - cmp r0, #9 - ldr r0, _023848A8 ; =DUNGEON_PTR - moveq r4, #1 - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _02384AC0 - ldrsh r1, [r8, #4] - mov r0, #0x37 - bl AddDungeonSubMenuOption - mov r0, r8 - bl IsHeldItemInBag - cmp r0, #0 - beq _02384AA4 - ldrsh r1, [r8, #4] - mov r0, #0x3e - bl AddDungeonSubMenuOption -_02384AA4: - ldr r0, [sp, #0x24] - cmp r0, #0 - beq _02384AC0 - mov r0, #0x37 - bl DisableDungeonSubMenuOption - mov r0, #0x3e - bl DisableDungeonSubMenuOption -_02384AC0: - ldrb r0, [fp, #7] - cmp r0, #0 - beq _02384BEC - mov r0, r8 - bl GetItemAction - movs r4, r0 - beq _02384B5C - ldrsh r1, [r8, #4] - bl AddDungeonSubMenuOption - ldrb r0, [r8] - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02384B04 - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384B04: - mov r0, r8 - bl ov29_023468FC - cmp r0, #0 - bne _02384B1C - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384B1C: - ldr r0, [sp, #0x20] - bl MonsterHasEmbargoStatus - cmp r0, #0 - bne _02384B3C - mov r0, r8 - bl ov29_02348D00 - cmp r0, #0 - beq _02384B44 -_02384B3C: - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384B44: - mov r0, r8 - bl IsItemUsableNow - cmp r0, #0 - bne _02384B5C - mov r0, r4 - bl DisableDungeonSubMenuOption -_02384B5C: - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #0 - bne _02384B7C - ldrsh r1, [r8, #4] - mov r0, #0x27 - bl AddDungeonSubMenuOption - b _02384B98 -_02384B7C: - ldrsh r0, [r8, #4] - bl GetItemCategoryVeneer - cmp r0, #1 - bne _02384B98 - ldrsh r1, [r8, #4] - mov r0, #0x41 - bl AddDungeonSubMenuOption -_02384B98: - ldr r0, [sp, #0x14] - bl MonsterCanThrowItems - cmp r0, #0 - bne _02384BB8 - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption -_02384BB8: - mov r0, sl - bl MonsterHasEmbargoStatus - cmp r0, #0 - bne _02384BD8 - mov r0, sl - bl MonsterHasEmbargoStatus - cmp r0, #0 - beq _02384C48 -_02384BD8: - mov r0, #0x27 - bl DisableDungeonSubMenuOption - mov r0, #0x41 - bl DisableDungeonSubMenuOption - b _02384C48 -_02384BEC: - ldrsh r1, [r8, #4] - mov r0, #0x38 - bl AddDungeonSubMenuOption - cmp r4, #0 - beq _02384C08 - mov r0, #0x38 - bl DisableDungeonSubMenuOption -_02384C08: - ldr r0, [sp, #0x20] - bl MonsterHasEmbargoStatus - cmp r0, #0 - bne _02384C28 - mov r0, r8 - bl ov29_02348D00 - cmp r0, #0 - beq _02384C30 -_02384C28: - mov r0, #0x38 - bl DisableDungeonSubMenuOption -_02384C30: - mov r0, r8 - bl IsItemUsableNow - cmp r0, #0 - bne _02384C48 - mov r0, #0x38 - bl DisableDungeonSubMenuOption -_02384C48: - ldrsh r1, [r8, #4] - mov r0, #0xc - bl AddDungeonSubMenuOption - bl ov29_022EB9A0 - bl ov29_022EBA84 - mov r2, #0 - ldr r1, _02385128 ; =ov29_0237C91C - ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - b _02384C9C -_02384C6C: - add r8, r1, r2, lsl #3 - ldr r3, [r4] - ldrh r8, [r8, #6] - add r3, r3, r2, lsl #3 - add r3, r3, #0x1100 - strh r8, [r3, #0x38] - mov r8, r2, lsl #3 - ldr r3, [r4] - add r2, r2, #1 - add r3, r3, r8 - add r3, r3, #0x1000 - str r2, [r3, #0x13c] -_02384C9C: - cmp r2, r0 - blt _02384C6C - ldr r3, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C -#ifdef JAPAN - mov r4, #0x1d40 -#else - ldr r4, _0238512C ; =0x000008E8 -#endif - ldr r1, [r3] - mvn r0, #0 - add r1, r1, r2, lsl #3 - add r1, r1, #0x1100 - strh r4, [r1, #0x38] - ldr r1, [r3] - mov r4, #0 - add r1, r1, r2, lsl #3 - add r1, r1, #0x1000 - str r0, [r1, #0x13c] - ldr r1, [r3] - add r1, r1, r2, lsl #3 - add r1, r1, #0x1100 - strh r4, [r1, #0x40] - ldr r1, [r3] - add r1, r1, r2, lsl #3 - add r1, r1, #0x1000 - str r0, [r1, #0x144] - ldr r0, [r3] - add r0, r0, #0x92 - add r0, r0, #0x1100 - bl ov29_0234E988 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r2, r4 - ldr r1, [r0] - add r0, r1, #0x138 - add r1, r1, #0x188 - add r0, r0, #0x1000 - add r1, r1, #0x1000 - bl ov31_0238513C - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - add r2, sp, #0x500 - ldr r1, [r0] - add r2, r2, #0x9c - add r0, r1, #0x188 - add r0, r0, #0x1000 - str r0, [sp, #0x5fc] - add r0, r1, #0x1000 - add r3, r1, #0x138 - ldrb r0, [r0, #0x1b2] - ldr r1, _02385130 ; =0x00000213 - add r3, r3, #0x1000 - cmp r0, #0 - ldrne r0, _02385134 ; =DUNGEON_WINDOW_PARAMS_13 - ldreq r0, _02385138 ; =DUNGEON_WINDOW_PARAMS_9 - bl CreateParentMenuFromStringIds - ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r8, #0x14 - ldr r1, [r4] - add r1, r1, #0x1000 - strb r0, [r1, #0x192] -_02384D78: - ldr r0, [r4] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x92] - bl IsParentMenuActive - cmp r0, #0 - bne _02384E24 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x92] - bl sub_0202ABB0 - cmp r0, #0 - blt _02384E04 - ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - sub r2, r0, #1 - ldr r0, [r1] - add r0, r0, #0x1000 - str r2, [r0, #0x1a4] - ldr r0, [r1] - add r0, r0, #0x1000 - ldr r0, [r0, #0x1a4] - bl ov29_022EB804 - cmp r0, #0 - mov r4, #0 - beq _02384E30 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r2, _02385128 ; =ov29_0237C91C - ldr r1, [r0] - add r0, r7, #0x4a - add r1, r1, #0x1000 - ldr r1, [r1, #0x1a4] - mov r1, r1, lsl #3 - ldrh r1, [r2, r1] - bl ov29_022EBBA8 - b _02384E30 -_02384E04: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r4, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - ldrb r0, [r0, #0x1b2] - cmp r0, #0 - movne r4, #2 - b _02384E30 -_02384E24: - mov r0, r8 - bl AdvanceFrame - b _02384D78 -_02384E30: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x92 - add r0, r0, #0x1100 - bl ov29_0234E988 - ldr r0, _023848A8 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - cmp r4, #1 - add r0, r0, #0x1a000 -#ifdef JAPAN - strb r1, [r0, #0x1a3] -#else - strb r1, [r0, #0x247] -#endif - ldreq r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldreq r0, [r0] - addeq r0, r0, #0x1000 - ldreqb r0, [r0, #0x1b2] - cmpeq r0, #0 - beq _02383B08 - cmp r4, #2 - bne _02384E90 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #1 - b _023850D8 -_02384E90: - ldrh r0, [r7, #0x4a] - cmp r0, #0x38 - cmpne r0, #0x37 - cmpne r0, #0x3e - bne _02384EC4 - bl ov29_022EBB98 - sub r2, r0, #0x90 - mov r0, #0xb - mov r1, #0 - strb r2, [r7, #0x4e] - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_02384EC4: - cmp r0, #0x36 - bne _02384FA0 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x94] - cmp r0, r1 - beq _02384F00 - bl CloseTextBox2 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x194] -_02384F00: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x95] - cmp r0, r1 - beq _02384F34 - bl CloseTextBox2 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x195] -_02384F34: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x93 - add r0, r0, #0x1100 - bl ov31_02383768 - mov r0, #0x62 - bl AdvanceFrame - add r0, sp, #0x48 - mov r1, #2 - mov r2, #0 -#ifndef JAPAN - mov r3, #1 -#endif - bl ov31_023877EC - cmp r0, #0 - beq _02384F88 - ldr r2, [sp, #0x48] - mov r0, #0 - mov r1, r0 - strb r2, [r7, #0x54] - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_02384F88: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #1 - bl ov29_022EB398 - b _02383B08 -_02384FA0: - cmp r0, #0x12 - beq _02384FC0 - add r0, r0, #0xf3 - add r0, r0, #0xff00 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #1 - bhi _023850C8 -_02384FC0: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x94] - cmp r0, r1 - beq _02384FF4 - bl CloseTextBox2 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x194] -_02384FF4: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x95] - cmp r0, r1 - beq _02385028 - bl CloseTextBox2 - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1000 - strb r1, [r0, #0x195] -_02385028: - ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x93 - add r0, r0, #0x1100 - bl ov31_02383768 - mov r0, #0x62 - bl AdvanceFrame - mov r0, #0x62 - bl AdvanceFrame -#ifdef JAPAN - add r0, sp, #0x44 - mov r1, #3 - mov r2, #1 -#else - mov r2, #1 - add r0, sp, #0x44 - mov r1, #3 - mov r3, r2 -#endif - bl ov31_023877EC - cmp r0, #0 - beq _023850B0 - ldr r1, [sp, #0x44] - ldr r0, _023848A8 ; =DUNGEON_PTR - strb r1, [r7, #0x54] - ldr r2, [r0] - ldr r0, [sp, #0x44] - mov r1, #0 - add r0, r2, r0, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] - mov r2, #1 - bl TryPointCameraToMonster - mov r0, #0 - mov r2, #1 - mov r1, r0 -#ifdef JAPAN - strb r2, [r7, #0x238] -#else - strb r2, [r7, #0x23c] -#endif - bl ov29_022EA428 - mov r5, #0 - b _023850D8 -_023850B0: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #1 - bl ov29_022EB398 - b _02383B08 -_023850C8: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r5, #0 -_023850D8: - ldr r0, _023848A8 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x1a000 - strb r1, [r0, #0x247 + OV31_023838E4_OFFSET] - bl HideTileGrid - bl ov31_023837C8 - mov r0, #0x14 - bl AdvanceFrame - ldr r0, [sp, #0x30] - cmp r0, #0 - beq _02385118 - ldr r1, _023848A0 ; =0x000008E5 - mov r0, #0 - mov r2, #1 - bl DisplayMessage -_02385118: - mov r0, r5 -_0238511C: - add sp, sp, #0x234 - add sp, sp, #0x400 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02385128: .word ov29_0237C91C -#ifndef JAPAN -_0238512C: .word 0x000008E8 -#endif -_02385130: .word 0x00000213 -_02385134: .word DUNGEON_WINDOW_PARAMS_13 -_02385138: .word DUNGEON_WINDOW_PARAMS_9 - arm_func_end ov31_023838E4 - - arm_func_start ov31_0238513C -ov31_0238513C: ; 0x0238513C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - bl ov29_022EBA84 - mov r4, #0 - mov r5, r0 - mov sb, #3 - mov sl, r4 - b _02385190 -_02385164: - mov r0, r4 - mov r1, r6 - bl ov29_022EB2C8 - mov r1, r4, lsl #3 - strh r0, [r8, r1] - mov r0, r4 - bl ov29_022EB804 - cmp r0, #0 - strneb sl, [r7, r4] - streqb sb, [r7, r4] - add r4, r4, #1 -_02385190: - cmp r4, r5 - blt _02385164 -#ifdef JAPAN - mov r1, r4, lsl #3 - mov r2, #0x1d40 -#else - ldr r2, _023851BC ; =0x000008E8 - mov r1, r4, lsl #3 -#endif - add r0, r4, #1 - strh r2, [r8, r1] - mov r1, #0 - strb r1, [r7, r4] - mov r0, r0, lsl #3 - strh r1, [r8, r0] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -#ifndef JAPAN - .align 2, 0 -_023851BC: .word 0x000008E8 -#endif - arm_func_end ov31_0238513C - - arm_func_start MovesMenu -MovesMenu: ; 0x023851C0 - stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0xc - ldr r1, _023853B8 ; =DUNGEON_PTR - ldrb r4, [r0, #4] - ldr r0, [r1] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r5, [r0, #0xa84] -#else - ldr r5, [r0, #0xb28] -#endif - str r5, [sp, #8] -_023851E4: - mov r6, #0 - ldr sb, _023853B8 ; =DUNGEON_PTR - mov r7, r6 - mov r8, r6 -_023851F4: - ldr r0, [sb] - add r0, r0, r8, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - bl ov29_02302388 - cmp r0, #0 - beq _0238521C - cmp r8, r4 - moveq r6, r7 - add r7, r7, #1 -_0238521C: - add r8, r8, #1 - cmp r8, #4 - blt _023851F4 - ldr r0, [sp, #8] - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - ldr r0, [sp, #8] - mov r2, #1 - mov r3, r2 - add r0, r0, #4 - mov r1, #0 - bl DrawTileGrid - mov r0, #1 - bl ov29_022EB398 - str r7, [sp] - mov r1, #0 - mov r3, r6 - add r0, sp, #8 - mov r2, #1 - str r1, [sp, #4] - bl HandleMovesMenu - cmp r0, #0 - bne _023853B0 - bl ov29_022F0B9C - cmp r0, #0x1d - bne _0238529C - bl GetLeaderAction - bl ov31_02385FE0 - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_0238529C: - bl ov29_022F0B9C - cmp r0, #0x1e - bne _023852CC - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - mov r1, #0 - bl ov31_023860A4 - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_023852CC: - bl ov29_022F0B9C - cmp r0, #0x33 - bne _023852FC - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - mov r1, #0 - bl ov31_023860A4 - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_023852FC: - bl ov29_022F0B9C - cmp r0, #0x1f - bne _02385328 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - bl ov31_0238619C - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_02385328: - bl ov29_022F0B9C - cmp r0, #0x20 - bne _02385354 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - bl ov31_02386204 - mov r0, #1 - bl ov29_022EB398 - b _02385380 -_02385354: - bl ov29_022F0B9C - cmp r0, #0x21 - bne _02385380 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl GetLeaderAction - mov r1, #1 - bl ov31_02386308 - mov r0, #1 - bl ov29_022EB398 -_02385380: - bl ov29_022F0B9C - cmp r0, #0 - beq _023851E4 - mov r0, r5 - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - mov r2, #1 - mov r3, r2 - add r0, r5, #4 - mov r1, #0 - bl DrawTileGrid -_023853B0: - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_023853B8: .word DUNGEON_PTR - arm_func_end MovesMenu - - arm_func_start HandleMovesMenuWrapper0 -HandleMovesMenuWrapper0: ; 0x023853BC - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr lr, [sp, #0x10] - mov ip, #0 - str lr, [sp] - str ip, [sp, #4] - bl HandleMovesMenu - add sp, sp, #8 - ldmia sp!, {r3, pc} - arm_func_end HandleMovesMenuWrapper0 - - arm_func_start HandleMovesMenuWrapper1 -HandleMovesMenuWrapper1: ; 0x023853E0 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr lr, [sp, #0x10] - mov ip, #1 - str lr, [sp] - str ip, [sp, #4] - bl HandleMovesMenu - add sp, sp, #8 - ldmia sp!, {r3, pc} - arm_func_end HandleMovesMenuWrapper1 - - arm_func_start HandleMovesMenu -HandleMovesMenu: ; 0x02385404 -#ifdef JAPAN -#define HANDLE_MOVES_MENU_OFFSET -0xA4 -#define HANDLE_MOVES_MENU_OFFSET_2 -4 -#else -#define HANDLE_MOVES_MENU_OFFSET 0 -#define HANDLE_MOVES_MENU_OFFSET_2 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x12c - str r1, [sp, #4] - str r0, [sp] - mov r0, #0x14 - mov r1, #8 - str r2, [sp, #8] - bl MemAlloc - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r2, #0 - str r0, [r1, #8] - str r2, [r0, #0x10] - mov r0, #0x62 - bl AdvanceFrame - ldr r0, [sp, #0x154] - cmp r0, #1 - bne _0238547C - ldr r0, _02385F74 ; =DUNGEON_WINDOW_PARAMS_14 - bl CreateDialogueBox - mov r1, #0 - str r0, [sp, #0x14] - bl sub_0202F474 - ldr r0, _02385F78 ; =0x00003FCD - bl StringFromId - mov r2, r0 - ldr r0, [sp, #0x14] - ldr r1, _02385F7C ; =0x00000404 - mov r3, #0 - bl ShowStringInDialogueBox - b _023854AC -_0238547C: - ldr r0, _02385F80 ; =DUNGEON_WINDOW_PARAMS_16 - bl CreateDialogueBox - mov r1, #0 - str r0, [sp, #0x14] - bl sub_0202F474 - ldr r0, _02385F84 ; =0x00003FCC - bl StringFromId - mov r2, r0 - ldr r0, [sp, #0x14] - ldr r1, _02385F7C ; =0x00000404 - mov r3, #0 - bl ShowStringInDialogueBox -_023854AC: - ldr r0, [sp] - ldr r6, [r0] - ldr sl, [r6, #0xb4] - bl GetLeader - ldr r7, [r0, #0xb4] - mov r0, r6 - bl sub_0203F9CC - mov r8, #0 - ldr sb, _02385F88 ; =DUNGEON_PTR - mov r4, r8 - add fp, sp, #0x2c -_023854D8: - ldr r0, [sb] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] - bl ov29_02302388 - cmp r0, #0 - beq _02385514 - ldr r0, [sb] - str r4, [fp, r8, lsl #2] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] - cmp r6, r0 - streq r8, [sp, #0x10] - add r8, r8, #1 -_02385514: - add r4, r4, #1 - cmp r4, #4 - blt _023854D8 - ldr r0, [sp, #0x154] - ldr r2, [sp, #0x10] - mov r1, r8 - bl sub_0204018C - str r0, [sp, #0x18] - bl sub_02041094 - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - str r0, [r1] - mov r0, #0x1e - bl AdvanceFrame -_02385548: - mov r4, #0 - str r4, [sp, #0xc] - mov sb, r4 - bl ov29_022EA62C - ldr fp, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 -_0238555C: - bl sub_020407EC - mov r8, r0 - cmp r8, #9 - addls pc, pc, r8, lsl #2 - b _02385680 -_02385570: ; jump table - b _02385680 ; case 0 - b _0238562C ; case 1 - b _02385678 ; case 2 - b _023855A0 ; case 3 - b _023855A0 ; case 4 - b _023855A8 ; case 5 - b _02385634 ; case 6 - b _0238566C ; case 7 - b _02385650 ; case 8 - b _02385598 ; case 9 -_02385598: - mov sb, #1 - b _02385680 -_023855A0: - mov sb, #1 - b _02385680 -_023855A8: - ldr r0, [sp, #0x18] - bl sub_02030A18 - mov r1, #0 - str r1, [fp] - add r1, sp, #0x2c - str r0, [sp, #0x10] - ldr sb, [r1, r0, lsl #2] - ldr r0, _02385F88 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, sb, lsl #2 - add r0, r0, #0x12000 - ldr r6, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] - ldr r0, [sp] - ldr sl, [r6, #0xb4] - str r6, [r0] - bl GetLeaderMonster - strb sb, [r0, #0x4e] - mov r0, r6 - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - mov r2, #1 - add r0, r6, #4 - mov r1, #0 - mov r3, r2 - bl DrawTileGrid - mov r0, #0 - bl ov29_022EB398 - mov r0, r6 - bl sub_0203F9CC - bl sub_02041178 - mov sb, #1 - b _02385680 -_0238562C: - mov r4, #1 - b _02385680 -_02385634: - ldrb r1, [r6, #0x24] - mov r0, #2 - str r0, [sp, #0xc] - strb r1, [r7, #0x4e] - ldr r0, [fp] - strb r0, [r7, #0x54] - b _02385680 -_02385650: - ldrb r1, [r6, #0x24] - mov r0, #3 - str r0, [sp, #0xc] - strb r1, [r7, #0x4e] - ldr r0, [fp] - strb r0, [r7, #0x54] - b _02385680 -_0238566C: - mov r0, #1 - str r0, [sp, #0xc] - b _02385680 -_02385678: - bl sub_02041094 - str r0, [fp] -_02385680: - cmp r8, #9 - addls pc, pc, r8, lsl #2 - b _023856D0 -_0238568C: ; jump table - b _023856D0 ; case 0 - b _023856D0 ; case 1 - b _023856D0 ; case 2 - b _023856B4 ; case 3 - b _023856B4 ; case 4 - b _023856C4 ; case 5 - b _023856D0 ; case 6 - b _023856D0 ; case 7 - b _023856D0 ; case 8 - b _023856B4 ; case 9 -_023856B4: - mov r0, r6 - bl sub_0203FD44 - str r0, [fp] - b _023856D0 -_023856C4: - mov r0, r6 - bl sub_0203F9CC - bl sub_02041178 -_023856D0: - mov r0, #0x1e - bl AdvanceFrame - cmp r8, #0 - beq _0238555C - cmp r4, #0 - bne _02385EFC - cmp sb, #0 - bne _02385548 - ldr r0, [sp, #0xc] - cmp r0, #1 - bne _02385738 - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldrb r1, [r6, #0x24] - ldr r2, [r0] - add r0, r7, #0x4a - mov r2, r2, lsl #0x10 - mov r2, r2, asr #0x10 - bl ov29_022EBC2C - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #8 - mov r1, #0x1b - bl ov29_022EA370 - mov r4, #0 - b _02385EFC -_02385738: - ldr r8, [r6, #0xb4] - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - add sb, r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2 - ldr fp, [r0] - bl ov29_022EBA70 - ldrb r0, [r8, #7] - cmp r0, #0 - beq _023857B0 - ldr r0, [sp, #8] - cmp r0, #0 - beq _02385770 - mov r0, #0x14 - mov r1, #0 - bl AddDungeonSubMenuOption -_02385770: - ldrb r0, [sb, fp, lsl #3] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _023857BC - ldrb r0, [sb, fp, lsl #3] - mov r1, #0 - tst r0, #8 - beq _023857A4 - mov r0, #0x33 - bl AddDungeonSubMenuOption - b _023857BC -_023857A4: - mov r0, #0x1e - bl AddDungeonSubMenuOption - b _023857BC -_023857B0: - mov r0, #0x1f - mov r1, #0 - bl AddDungeonSubMenuOption -_023857BC: - ldr r0, [sp, #4] - cmp r0, #0 - beq _023857E0 - mov r0, #0x20 - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0x21 - mov r1, #0 - bl AddDungeonSubMenuOption -_023857E0: - mov r0, #0x1d - mov r1, #0 - bl AddDungeonSubMenuOption - ldr r0, [sp, #4] - cmp r0, #0 - bne _02385804 - mov r0, #0x20 - bl DisableDungeonSubMenuOption - b _0238595C -_02385804: - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr fp, [r0] - add r0, r8, fp, lsl #3 - add r0, r0, #0x100 - ldrh r0, [r0, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] - mov sb, fp - bl IsNot2TurnsMoveOrSketch - cmp r0, #0 - moveq r0, #0 - beq _0238592C - add sb, sb, #1 - b _02385920 -_02385834: - add r0, r8, sb, lsl #3 - ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02385928 - add r0, r8, sb, lsl #3 - add r0, r0, #0x100 - ldrh r0, [r0, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] - bl IsNot2TurnsMoveOrSketch - cmp r0, #0 - beq _02385928 - add r0, r8, sb, lsl #3 - ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r0, #2 - bne _0238591C - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 - b _023858A4 -_02385888: - add r0, r8, r3, lsl #3 - ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r0, #2 - beq _023858AC - add r0, r3, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 -_023858A4: - cmp r3, #4 - blt _02385888 -_023858AC: - mov r0, fp, lsl #0x10 - mov r2, r0, asr #0x10 - b _0238590C -_023858B8: - add r0, r2, #1 - mov r0, r0, lsl #0x10 - mov r1, r0, asr #0x10 - add r0, r8, r2, lsl #3 - add sb, r0, #0x100 - b _023858F8 -_023858D0: - add fp, r8, r1, lsl #3 - add fp, fp, #0x100 - ldrh r0, [sb, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] - ldrh fp, [fp, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] - cmp r0, fp - moveq r0, #0 - beq _0238592C - add r0, r1, #1 - mov r0, r0, lsl #0x10 - mov r1, r0, asr #0x10 -_023858F8: - cmp r1, r3 - blt _023858D0 - add r0, r2, #1 - mov r0, r0, lsl #0x10 - mov r2, r0, asr #0x10 -_0238590C: - cmp r2, r3 - blt _023858B8 - mov r0, #1 - b _0238592C -_0238591C: - add sb, sb, #1 -_02385920: - cmp sb, #4 - blt _02385834 -_02385928: - mov r0, #0 -_0238592C: - cmp r0, #0 - bne _0238593C - mov r0, #0x20 - bl DisableDungeonSubMenuOption -_0238593C: - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r0, r8 - ldr r1, [r1] - bl ov31_023863F8 - cmp r0, #0 - bne _0238595C - mov r0, #0x21 - bl DisableDungeonSubMenuOption -_0238595C: - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r0, r8 - ldr r1, [r1] - bl ov31_023863F8 - cmp r0, #0 - bne _0238597C - mov r0, #0x21 - bl DisableDungeonSubMenuOption -_0238597C: - ldr r0, [sp, #8] - cmp r0, #0 - beq _023859C0 - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r8, #0 - ldr r1, [r0] - cmp r1, #4 - bge _023859B0 - mov r0, r6 - mov r2, #1 - bl CanAiUseMove - cmp r0, #0 - movne r8, #1 -_023859B0: - cmp r8, #0 -#ifdef EUROPE - bne _023859C0 - mov r0, #0x14 - bl DisableDungeonSubMenuOption -_023859C0: - bl ov29_022EB9A0 - mov r0, #0x14 - bl ov29_022EB8B0 - mvn r1, #0 - cmp r0, r1 - moveq r8, #0 - beq _023865E4 - bl ov29_022EB804 - mov r8, r0 -_023865E4: -#else - bne _023859C0 - mov r0, #0x14 - bl DisableDungeonSubMenuOption -_023859C0: - bl ov29_022EB9A0 -#endif - ldr r0, [sp, #0xc] - cmp r0, #3 - bne _02385A40 - mov r0, #0x20 - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385A08 - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 - b _02385EFC -_02385A08: - mov r0, #0x21 - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385EFC - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 - b _02385EFC -_02385A40: - cmp r0, #2 - bne _02385AF8 - ldrb r0, [sl, #7] - cmp r0, #0 - beq _02385AC0 - mov r0, #0x1e - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385A88 - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 -_02385A88: - mov r0, #0x33 - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385EFC - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 - b _02385EFC -_02385AC0: - mov r0, #0x1f - bl ov29_022EB8B0 - mov r5, r0 - bl ov29_022EB804 - cmp r0, #0 - beq _02385EFC - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - mov r4, #0 - b _02385EFC -_02385AF8: - mov r0, #0x62 - bl AdvanceFrame - add r1, sp, #0x20 - add r0, sp, #0xd4 - mov r2, #0 - str r1, [sp, #0x9c] - bl ov31_0238513C - bl ov29_022EBA84 - mov r1, #0 - add r3, sp, #0xd4 - b _02385B30 -_02385B24: - add r2, r3, r1, lsl #3 - str r1, [r2, #4] - add r1, r1, #1 -_02385B30: - cmp r1, r0 - blt _02385B24 -#ifdef JAPAN - ldr r0, _02385F8C ; =0x00001D34 - add sb, sp, #0xd4 - mov sl, r1, lsl #3 - strh r0, [sb, sl] - add r8, sb, r1, lsl #3 - mvn r0, #0 - mov r4, #0 - str r0, [r8, #4] - strh r4, [r8, #8] - sub r0, r4, #2 - str r0, [r8, #0xc] - ldrh r0, [r8, #8] - add r3, sp, #0x20 - ldr r2, _02387200 ; =0x0000087A - strh r0, [r8, #0x18] - ldr fp, [r8, #0xc] - add r0, r3, r1 - str fp, [r8, #0x1c] - ldrh sl, [sb, sl] - ldrb fp, [r0, #1] - mov sb, #0x14 - strh sl, [r8, #0x10] - strb fp, [r0, #3] - ldrb sl, [r3, r1] - ldr fp, [r8, #4] - ldr r3, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - str fp, [r8, #0x14] - ldrh fp, [r8, #-8] - strb sl, [r0, #2] - ldrb sl, [r0, #-1] - strh fp, [r8, #8] - ldr fp, [r8, #-4] - ldr r3, [r3] - strb sl, [r0, #1] - str fp, [r8, #0xc] - strh r2, [r8, #-8] - str sb, [r8, #-4] - cmp r3, #0 - strb r4, [r0, #-1] - movle r2, #3 - strleb r2, [r0, #-1] - add r2, r3, #1 - mov r2, r2, lsl #0x10 - mov r4, r2, asr #0x10 - mov r3, #0 - ldr sb, _02387204 ; =0x0000087B - add r8, sp, #0xd4 - mov r2, r1, lsl #3 - strh sb, [r8, r2] - add r1, r8, r1, lsl #3 - mov r2, #0x15 - str r2, [r1, #4] -#else -#ifdef EUROPE - ldr r0, _02385F8C ; =0x000008DC - add sl, sp, #0xd4 - mov fp, r1, lsl #3 - strh r0, [sl, fp] - mvn r0, #0 - add sb, sl, r1, lsl #3 - str r0, [sb, #4] - mov ip, #0 - add r2, r0, #0xa40 - strh ip, [sb, #8] - sub r0, ip, #2 - str r0, [sb, #0xc] - ldrh r0, [sb, #8] - add r3, sp, #0x20 - mov lr, #0x14 -#else - ldr r2, _02385F8C ; =0x000008DC - add sl, sp, #0xd4 - mov fp, r1, lsl #3 - mvn r0, #0 - strh r2, [sl, fp] - add sb, sl, r1, lsl #3 - str r0, [sb, #4] - mov r8, #0 - add r2, r0, #0xa40 - strh r8, [sb, #8] - sub r0, r8, #2 - str r0, [sb, #0xc] - ldrh r0, [sb, #8] - add r3, sp, #0x20 - mov ip, #0x14 -#endif - strh r0, [sb, #0x18] - ldr r4, [sb, #0xc] - add r0, r3, r1 - str r4, [sb, #0x1c] - ldrh r4, [sl, fp] - ldrb sl, [r0, #1] - ldr fp, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - strh r4, [sb, #0x10] - strb sl, [r0, #3] - ldrb r4, [r3, r1] - ldr sl, [sb, #4] - ldr r3, [fp] - str sl, [sb, #0x14] - ldrh sl, [sb, #-8] - strb r4, [r0, #2] - ldrb r4, [r0, #-1] - strh sl, [sb, #8] - cmp r3, #0 - strb r4, [r0, #1] - ldr r4, [sb, #-4] -#ifdef EUROPE - strb ip, [r0, #-1] - str r4, [sb, #0xc] - strh r2, [sb, #-8] - movle r2, #3 - strleb r2, [r0, #-1] - add r2, r3, #1 - mov r2, r2, lsl #0x10 - str lr, [sb, #-4] - mov r4, r2, asr #0x10 - add sb, sp, #0xd4 - mov r2, r1, lsl #3 - mov r3, #0xa40 - strh r3, [sb, r2] - mov r3, #0 - add r1, sb, r1, lsl #3 - mov r2, #0x15 - str r2, [r1, #4] -#else - strb r8, [r0, #-1] - str r4, [sb, #0xc] - strh r2, [sb, #-8] - movle r2, #3 - str ip, [sb, #-4] - add r8, sp, #0xd4 - strleb r2, [r0, #-1] - mov sb, r1, lsl #3 - add r2, r8, r1, lsl #3 - add r1, r3, #1 - mov r1, r1, lsl #0x10 - mov r4, r1, asr #0x10 - mov r1, #0xa40 - strh r1, [r8, sb] - mov r1, #0x15 - mov r3, #0 - str r1, [r2, #4] -#endif -#endif - strb r3, [r0] - ldr sl, [r6, #0xb4] - mov r1, r3 - mov r2, #1 - b _02385C58 -_02385C1C: -#ifdef EUROPE - add sb, sl, r4, lsl #3 - ldrb sb, [sb, #0x124] - tst sb, #1 - movne sb, r2 - moveq sb, r1 - tst sb, #0xff - beq _02385C4C - add sb, sl, r4, lsl #3 - ldrb sb, [sb, #0x124] - tst sb, #2 -#else - add r8, sl, r4, lsl #3 - ldrb r8, [r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r8, #1 - movne r8, r2 - moveq r8, r1 - tst r8, #0xff - beq _02385C4C - add r8, sl, r4, lsl #3 - ldrb r8, [r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] - tst r8, #2 -#endif - moveq r3, #1 - beq _02385C60 -_02385C4C: - add r4, r4, #1 - mov r4, r4, lsl #0x10 - mov r4, r4, asr #0x10 -_02385C58: - cmp r4, #4 - blt _02385C1C -_02385C60: - cmp r3, #0 - moveq r1, #3 - streqb r1, [r0] - ldr r0, _02385F90 ; =DUNGEON_WINDOW_PARAMS_15 - ldr r1, _02385F94 ; =0x80000213 - add r2, sp, #0x3c - add r3, sp, #0xd4 - bl CreateParentMenuFromStringIds - strb r0, [sp, #0x1c] - mov r0, #0x1b - bl AdvanceFrame -#ifdef EUROPE - add r4, sp, #0xd4 - mov fp, #0x1b - ldr sb, _02385F98 ; =0x0000099B - b _02385D0C -_02385CA0: - mov r0, fp - bl AdvanceFrame - mov r0, #0 -#else - add r8, sp, #0xd4 - mov sb, #0x1b - mov fp, #0 - ldr r4, _02385F98 ; =0x0000099B - b _02385D0C -_02385CA0: - mov r0, sb - bl AdvanceFrame - mov r0, fp -#endif - add r1, sp, #0x1e - bl GetPressedButtons - ldrh r0, [sp, #0x1e] - tst r0, #0x400 - beq _02385D0C - mov r5, #0 - b _02385CEC -_02385CC8: - mov r1, r5, lsl #3 -#ifdef EUROPE - add r0, r4, r5, lsl #3 - ldr r0, [r0, #4] - cmp r0, #0 - blt _02385CF4 - cmp r8, #0 - beq _0238690C - ldrh r0, [r4, r1] - cmp r0, sb - beq _02385CF4 -_0238690C: -#else - add r0, r8, r5, lsl #3 - ldr r0, [r0, #4] - cmp r0, #0 - blt _02385CF4 - ldrh r0, [r8, r1] - cmp r0, r4 - beq _02385CF4 -#endif - add r5, r5, #1 -_02385CEC: - cmp r5, #0xa - blt _02385CC8 -_02385CF4: -#ifdef EUROPE - add r0, r4, r5, lsl #3 -#else - add r0, r8, r5, lsl #3 -#endif - ldr r0, [r0, #4] - cmp r0, #0 - blt _02385D0C - cmp r5, #0xa - blt _02385D1C -_02385D0C: - ldrsb r0, [sp, #0x1c] - bl IsParentMenuActive - cmp r0, #0 - bne _02385CA0 -_02385D1C: - ldrh r0, [sp, #0x1e] - tst r0, #0x400 - bne _02385D34 - ldrsb r0, [sp, #0x1c] - bl sub_0202ABB0 - mov r5, r0 -_02385D34: - ldrsb r0, [sp, #0x1c] - bl sub_0202AB80 - cmp r0, #0 - ble _02385D78 - mvn r0, #0 - cmp r5, r0 - bne _02385D78 - ldrsb r0, [sp, #0x1c] - bl sub_0202AB80 - add r1, sp, #0xd4 - mov r0, r0, lsl #3 - ldrh r1, [r1, r0] - ldr r0, _02385F8C ; =0x000008DC - cmp r1, r0 - bne _02385D78 - mov r0, #0 - bl PlaySeVolumeWrapper -_02385D78: - add r0, sp, #0x1c - bl ov29_0234E988 - mov r0, #0x1b - bl AdvanceFrame - cmp r5, #0 - blt _02385ED8 - add r0, sp, #0xd4 - mov r1, r5, lsl #3 - ldrh r1, [r0, r1] - ldr r0, _02385F9C ; =0x000009A8 - cmp r1, r0 - bgt _02385DC8 - sub r0, r0, #3 - subs r0, r1, r0 - addpl pc, pc, r0, lsl #2 - b _02385DE4 -_02385DB8: ; jump table - b _02385DD4 ; case 0 - b _02385DD4 ; case 1 - b _02385DD4 ; case 2 - b _02385DD4 ; case 3 -_02385DC8: - ldr r0, _02385FA0 ; =0x000009BA - cmp r1, r0 - bne _02385DE4 -_02385DD4: - ldr r0, _02385FA4 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - b _02385DEC -_02385DE4: - mov r0, #0 - bl PlaySeVolumeWrapper -_02385DEC: - cmp r5, #0x14 - bne _02385E4C - mov r0, r6 - bl sub_0203F9CC - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_020416BC - ldr r2, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r1, r0, lsl #0x10 - str r0, [r2] - mov r0, r1, asr #0x10 - bl sub_020410A4 - mov r0, r6 - bl sub_0203FD44 - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - str r0, [r1] - ldr r0, [sp, #0x18] - bl sub_020307EC - bl sub_02041178 - mov r0, #0x1b - bl AdvanceFrame - b _02385548 -_02385E4C: - cmp r5, #0x15 - bne _02385EAC - mov r0, r6 - bl sub_0203F9CC - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_020416DC - ldr r2, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r1, r0, lsl #0x10 - str r0, [r2] - mov r0, r1, asr #0x10 - bl sub_020410A4 - mov r0, r6 - bl sub_0203FD44 - ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - str r0, [r1] - ldr r0, [sp, #0x18] - bl sub_020307EC - bl sub_02041178 - mov r0, #0x1b - bl AdvanceFrame - b _02385548 -_02385EAC: - mov r0, r5 - bl ov29_022EB804 - cmp r0, #0 - beq _02385EF0 - mov r0, r6 - bl GetTeamMemberIndex - mov r2, r0 - mov r1, r5 - add r0, r7, #0x4a - bl ov31_02385FA8 - b _02385EF0 -_02385ED8: - ldr r0, [sp, #0x18] - bl sub_020307EC - bl sub_02041178 - mov r0, #0x1b - bl AdvanceFrame - b _02385548 -_02385EF0: - mov r0, #0x1b - bl AdvanceFrame - mov r4, #0 -_02385EFC: - ldr r0, [sp, #0x18] - bl CloseAdvancedTextBox2 - ldr r0, [sp, #0x14] - bl sub_0202F334 - ldr r0, [sp, #0x14] - bl CloseDialogueBox - mov r0, #8 - mov r1, #0x1e - bl ov29_022EA370 - bl HideTileGrid - mov r0, #0x1b - bl AdvanceFrame - bl sub_020407C0 - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0, #8] - cmp r0, #0 - beq _02385F50 - bl MemFree - ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r1, #0 - str r1, [r0, #8] -_02385F50: - bl GetLeaderMonster - ldr r1, [sp, #0x10] - add r2, sp, #0x2c - ldr r1, [r2, r1, lsl #2] - strb r1, [r0, #0x4e] - mov r0, r4 - add sp, sp, #0x12c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#if defined(EUROPE) -#define HANDLE_MOVES_MENU_DATA_OFFSET 2 -#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0 -#elif defined(JAPAN) -#define HANDLE_MOVES_MENU_DATA_OFFSET 0xA03 -#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0x19D0 -#else -#define HANDLE_MOVES_MENU_DATA_OFFSET 0 -#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0 -#endif -_02385F70: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 -_02385F74: .word DUNGEON_WINDOW_PARAMS_14 -_02385F78: .word 0x00003FCD + HANDLE_MOVES_MENU_DATA_OFFSET -_02385F7C: .word 0x00000404 -_02385F80: .word DUNGEON_WINDOW_PARAMS_16 -_02385F84: .word 0x00003FCC + HANDLE_MOVES_MENU_DATA_OFFSET -_02385F88: .word DUNGEON_PTR -#ifdef JAPAN -_02385F8C: .word 0x00001D34 -_02387200: .word 0x0000087A -_02387204: .word 0x0000087B -#else -_02385F8C: .word 0x000008DC -#endif -_02385F90: .word DUNGEON_WINDOW_PARAMS_15 -_02385F94: .word 0x80000213 -_02385F98: .word 0x0000099B + HANDLE_MOVES_MENU_DATA_OFFSET_2 -_02385F9C: .word 0x000009A8 + HANDLE_MOVES_MENU_DATA_OFFSET_2 -_02385FA0: .word 0x000009BA + HANDLE_MOVES_MENU_DATA_OFFSET_2 -_02385FA4: .word 0x00003F07 - arm_func_end HandleMovesMenu - - arm_func_start ov31_02385FA8 -ov31_02385FA8: ; 0x02385FA8 - stmdb sp!, {r3, r4, r5, lr} - ldr r3, _02385FD8 ; =ov29_0237C91C - mov r1, r1, lsl #3 - ldrh r1, [r3, r1] - mov r5, r0 - mov r4, r2 - bl SetMonsterActionFields - ldr r0, _02385FDC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - strb r4, [r5, #4] - ldr r0, [r0] - strb r0, [r5, #0xa] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02385FD8: .word ov29_0237C91C -_02385FDC: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 - arm_func_end ov31_02385FA8 - - arm_func_start ov31_02385FE0 -ov31_02385FE0: ; 0x02385FE0 -#ifdef JAPAN -#define OV31_02385FE0_OFFSET -4 -#else -#define OV31_02385FE0_OFFSET 0 -#endif - stmdb sp!, {r3, lr} - ldr r1, _0238604C ; =DUNGEON_PTR - ldrb r3, [r0, #4] - ldr r1, [r1] - ldrb r2, [r0, #0xa] - add r1, r1, r3, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r1, [r1, #0xa84] -#else - ldr r1, [r1, #0xb28] -#endif - mov r2, r2, lsl #3 - ldr ip, [r1, #0xb4] - add r1, ip, #0x26 + OV31_02385FE0_OFFSET - add r3, r1, #0x100 - ldrh r1, [r3, r2] - orr r1, r1, #2 - strh r1, [r3, r2] - ldrb r1, [r0, #0xa] - cmp r1, #4 - bhs _02386038 - add r0, ip, #0x124 + OV31_02385FE0_OFFSET - mov r2, #4 - bl ov31_02386050 - ldmia sp!, {r3, pc} -_02386038: - add r0, ip, #0x144 + OV31_02385FE0_OFFSET - mov r1, #0 - mov r2, #1 - bl ov31_02386050 - ldmia sp!, {r3, pc} - .align 2, 0 -_0238604C: .word DUNGEON_PTR - arm_func_end ov31_02385FE0 - - arm_func_start ov31_02386050 -ov31_02386050: ; 0x02386050 - stmdb sp!, {r3, r4, r5, lr} - mov r3, r1 - mov r1, r2 - mov r2, r3 - mov r3, #0 - bl sub_020417A8 - mov r5, r0 - mov r4, #0x62 -_02386070: - bl sub_02041A18 - cmp r0, #0 - beq _0238608C - bl sub_02041A00 - mov r0, r5 - bl CloseScrollBox - b _02386098 -_0238608C: - mov r0, r4 - bl AdvanceFrame - b _02386070 -_02386098: - mov r0, #0x62 - bl AdvanceFrame - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov31_02386050 - - arm_func_start ov31_023860A4 -ov31_023860A4: ; 0x023860A4 -#ifdef JAPAN -#define OV31_023860A4_OFFSET -4 -#else -#define OV31_023860A4_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r2, _02386190 ; =DUNGEON_PTR - ldrb r3, [r0, #4] - ldr r4, [r2] - ldrb r2, [r0, #0xa] - add r0, r4, r3, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r4, [r0, #0xa84] -#else - ldr r4, [r0, #0xb28] -#endif - mov r8, r1 - ldr r7, [r4, #0xb4] - mov r6, #0 - add r1, r7, #0x124 + OV31_023860A4_OFFSET - ldrb r0, [r1, r2, lsl #3] - mov ip, #0 - add r5, r1, r2, lsl #3 - tst r0, #8 - movne r6, #1 - mov r2, ip - mov r3, #1 -_023860F0: - add r0, r7, ip, lsl #3 - ldrb r0, [r0, #0x124 + OV31_023860A4_OFFSET] - tst r0, #1 - movne r0, r3 - moveq r0, r2 - tst r0, #0xff - addne r1, r7, ip, lsl #3 - ldrneb r0, [r1, #0x124 + OV31_023860A4_OFFSET] - add ip, ip, #1 - bicne r0, r0, #8 - strneb r0, [r1, #0x124 + OV31_023860A4_OFFSET] - cmp ip, #4 - blt _023860F0 - bl ov29_0234B034 - ldrh r1, [r5, #4] - cmp r6, #0 - str r1, [r0, #0x10] - ldreqb r0, [r5] - orreq r0, r0, #8 - streqb r0, [r5] - add r0, r7, #0x124 + OV31_023860A4_OFFSET - bl AllManip1 - ldrh r0, [r5, #2] - cmp r8, #0 - orr r0, r0, #2 - strh r0, [r5, #2] - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - cmp r6, #0 - bne _02386174 - ldr r1, _02386194 ; =0x000008D8 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - b _02386180 -_02386174: - ldr r1, _02386198 ; =0x000008D9 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser -_02386180: - mov r0, #0x78 - mov r1, #0x1f - bl ov29_022EA370 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02386190: .word DUNGEON_PTR -#ifdef JAPAN -_02386194: .word 0x00001D30 -_02386198: .word 0x00001D31 -#else -_02386194: .word 0x000008D8 -_02386198: .word 0x000008D9 -#endif - arm_func_end ov31_023860A4 - - arm_func_start ov31_0238619C -ov31_0238619C: ; 0x0238619C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r1, _02386200 ; =DUNGEON_PTR - ldrb r2, [r0, #4] - ldr r1, [r1] - ldrb r4, [r0, #0xa] - add r0, r1, r2, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] - ldr r7, [r0, #0xb4] - add r5, r7, #0x120 -#else - ldr r0, [r0, #0xb28] - ldr r7, [r0, #0xb4] - add r5, r7, #0x124 -#endif - add r6, r5, r4, lsl #3 - bl ov29_0234B034 - mov r1, #0 - mov r2, r6 - mov r3, r1 - bl FormatMoveStringMore - ldrb r1, [r5, r4, lsl #3] - mov r0, r5 - eor r1, r1, #4 - strb r1, [r5, r4, lsl #3] - bl AllManip1 - ldrh r0, [r6, #2] - orr r0, r0, #2 - strh r0, [r6, #2] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02386200: .word DUNGEON_PTR - arm_func_end ov31_0238619C - - arm_func_start ov31_02386204 -ov31_02386204: ; 0x02386204 -#ifdef JAPAN -#define OV31_02386204_OFFSET -4 -#else -#define OV31_02386204_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #0xa0 - ldr r1, _02386304 ; =DUNGEON_PTR - ldrb r2, [r0, #4] - ldr r1, [r1] - ldrb r5, [r0, #0xa] - add r0, r1, r2, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r1, [r0, #0xa84] -#else - ldr r1, [r0, #0xb28] -#endif - add r0, sp, #0 - ldr r4, [r1, #0xb4] - mov r2, #0 - add r1, r4, #0x124 + OV31_02386204_OFFSET - add r1, r1, r5, lsl #3 - bl FormatMoveString - add r0, r4, #0x26 + OV31_02386204_OFFSET - add r2, r0, #0x100 - mov r1, r5, lsl #3 - ldrh r0, [r2, r1] - mov r3, #0 - orr r0, r0, #2 - strh r0, [r2, r1] - mov r1, r3 - mov r2, #1 - b _023862A4 -_02386268: - add r5, r5, #1 - cmp r5, #4 - bge _023862AC - add r0, r4, r5, lsl #3 - ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] - tst r0, #1 - movne r0, r2 - moveq r0, r1 - tst r0, #0xff - beq _023862AC - add r0, r4, r5, lsl #3 - ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] - tst r0, #2 - beq _023862AC - add r3, r3, #1 -_023862A4: - cmp r3, #4 - blt _02386268 -_023862AC: - add r0, r4, r5, lsl #3 - ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - moveq r5, #4 - cmp r5, #4 - bge _023862F4 - add ip, r4, #0x124 + OV31_02386204_OFFSET - ldrb r2, [ip, r5, lsl #3] - add r0, sp, #0x50 - add r1, ip, r5, lsl #3 - orr r2, r2, #2 - bic r3, r2, #4 - mov r2, #0 - strb r3, [ip, r5, lsl #3] - bl FormatMoveString -_023862F4: - add r0, r4, #0x124 + OV31_02386204_OFFSET - bl AllManip1 - add sp, sp, #0xa0 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02386304: .word DUNGEON_PTR - arm_func_end ov31_02386204 - - arm_func_start ov31_02386308 -ov31_02386308: ; 0x02386308 -#ifdef JAPAN -#define OV31_02386308_OFFSET -4 -#else -#define OV31_02386308_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r2, _023863EC ; =DUNGEON_PTR - ldrb r3, [r0, #4] - ldr r2, [r2] - ldrb r7, [r0, #0xa] - add r0, r2, r3, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r4, [r0, #0xa84] -#else - ldr r4, [r0, #0xb28] -#endif - mov r8, r1 - ldr r6, [r4, #0xb4] - mov r5, #0 - bl ov29_0234B034 - add r1, r6, r7, lsl #3 - add r1, r1, #0x100 - ldrh r2, [r1, #0x28 + OV31_02386308_OFFSET] - mov r3, r7, lsl #3 - add r1, r6, #0x26 + OV31_02386308_OFFSET - str r2, [r0, #0x10] - add r2, r1, #0x100 - ldrh r1, [r2, r3] - add r7, r7, #1 - mov r0, r5 - orr r1, r1, #2 - strh r1, [r2, r3] - add ip, r6, #0x124 + OV31_02386308_OFFSET - mov r1, #1 - b _023863A0 -_02386374: - cmp r7, #4 - bge _023863A8 - ldrb r2, [ip, r7, lsl #3] - mov r3, r7, lsl #3 - tst r2, #2 - beq _023863A8 - bic r2, r2, #2 - mov r5, r1 - strb r2, [ip, r3] - add r7, r7, #1 - add r0, r0, #1 -_023863A0: - cmp r0, #4 - blt _02386374 -_023863A8: - add r0, r6, #0x124 + OV31_02386308_OFFSET - bl AllManip1 - cmp r8, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - cmp r5, #0 - beq _023863D0 - ldr r1, _023863F0 ; =0x000008DA - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - b _023863DC -_023863D0: - ldr r1, _023863F4 ; =0x000008DB - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser -_023863DC: - mov r0, #0x78 - mov r1, #0x1f - bl ov29_022EA370 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_023863EC: .word DUNGEON_PTR -#ifdef JAPAN -_023863F0: .word 0x00001D32 -_023863F4: .word 0x00001D33 -#else -_023863F0: .word 0x000008DA -_023863F4: .word 0x000008DB -#endif - arm_func_end ov31_02386308 - - arm_func_start ov31_023863F8 -ov31_023863F8: ; 0x023863F8 - stmdb sp!, {r3, lr} - mov lr, #0 - mov ip, lr - add r1, r1, #1 - mov r2, #1 - b _02386434 -_02386410: - cmp r1, #4 - bge _0238643C - add r3, r0, r1, lsl #3 -#ifdef JAPAN - ldrb r3, [r3, #0x120] -#else - ldrb r3, [r3, #0x124] -#endif - tst r3, #2 - beq _0238643C - mov lr, r2 - add r1, r1, #1 - add ip, ip, #1 -_02386434: - cmp ip, #4 - blt _02386410 -_0238643C: - cmp lr, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end ov31_023863F8 - - arm_func_start ov31_02386450 -ov31_02386450: ; 0x02386450 - stmdb sp!, {r3, lr} - ldr r0, _02386478 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0, #4] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _02386478 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r1, #0 - str r1, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_02386478: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 - arm_func_end ov31_02386450 - - arm_func_start ov31_0238647C -ov31_0238647C: ; 0x0238647C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x114 - mov r6, r0 - mov r5, r1 - str r2, [sp, #4] - mov r0, #0x284 - mov r1, #8 - str r3, [sp, #8] - mvn r4, #1 - bl MemAlloc - ldr r1, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mov r2, #0 - str r0, [r1, #4] - str r2, [r1] -_023864B4: - mov r0, #6 - mov r1, #0 - bl ov29_022EA428 - ldr r0, _02386B10 ; =ov29_0235352C - ldr r0, [r0] - ldr r0, [r0, #0x24] - bl sub_0200B3D4 - mvn sb, #1 - ldr r7, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - add r8, sb, #1 - add fp, sp, #0xbc -_023864E0: - cmp r4, sb - bne _02386578 - ldr r3, [r6, #0xb4] - add r0, sp, #0x14 - ldrsh r2, [r3, #2] - ldrb r3, [r3, #0x48] - mov r1, #2 - bl sub_02053CA0 - mov r0, r6 - bl sub_0203F9CC - mov r1, #0 - b _0238652C -_02386510: - add r0, r5, r1, lsl #3 - ldrh r0, [r0, #2] - tst r0, #4 - bne _02386534 - add r0, r1, #1 - mov r0, r0, lsl #0x10 - mov r1, r0, asr #0x10 -_0238652C: - cmp r1, #8 - blt _02386510 -_02386534: - add r0, r5, r1, lsl #3 - ldrh r0, [r0, #4] - bl sub_0203FD14 - ldr r0, [sp, #8] - mov r1, #0 - cmp r0, #0 - add r3, sp, #0x14 - beq _02386568 - mov r0, #2 - mov r2, r1 - bl sub_0204019C - mov r4, r0 - b _02386578 -_02386568: - mov r0, #3 - mov r2, r1 - bl sub_0204019C - mov r4, r0 -_02386578: - mov r0, #0x1e - bl AdvanceFrame - bl sub_020407EC - mov sl, r0 - bl sub_02041094 - cmp sl, #2 - str r0, [r7] - moveq sl, #0 - beq _023865B4 - cmp sl, #1 - moveq sl, #1 - beq _023865B4 - cmp sl, #7 - bne _02386578 - mov sl, #2 -_023865B4: - mov r0, #0x1e - bl AdvanceFrame - cmp sl, #1 - ldreq r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - mvneq r1, #0 - streq r1, [r0] - beq _02386924 - cmp sl, #2 - bne _02386694 - mov r0, r4 - bl SetAdvancedTextBoxState5 - mov r0, #0x1e - bl AdvanceFrame - mov r0, r4 - bl CloseAdvancedTextBox - mov r0, #0x1b - mov r4, sb - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - ldr r0, [r7] - cmp r0, #4 - bge _02386664 - ldr r1, [r7] - mov r0, r5 - mov r2, #4 - bl ov31_02386050 - b _02386674 -_02386664: - add r0, r5, #0x20 - mov r1, #0 - mov r2, #1 - bl ov31_02386050 -_02386674: - bl sub_020407C0 - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #2 - mov r1, #0x1b - bl ov29_022EA370 - b _023864E0 -_02386694: - bl ov29_022EBA70 - mov r0, #0x22 - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0x21 - mov r1, #0 - bl AddDungeonSubMenuOption - ldr r0, [r7] - mov r3, #0 - add r1, r0, #1 - mov r2, r3 - b _023866E4 -_023866C4: - cmp r1, #8 - bge _023866EC - ldrb r0, [r5, r1, lsl #3] - tst r0, #2 - beq _023866EC - mov r3, #1 - add r1, r1, #1 - add r2, r2, #1 -_023866E4: - cmp r2, #8 - blt _023866C4 -_023866EC: - cmp r3, #0 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - bne _02386708 - mov r0, #0x21 - bl DisableDungeonSubMenuOption -_02386708: - mov r0, #0x1d - mov r1, #0 - bl AddDungeonSubMenuOption - add r0, sp, #0x18 - str r0, [sp, #0x84] - mov r0, fp - add r1, sp, #0x18 - mov r2, #0 - bl ov31_0238513C - bl ov29_022EBA84 - mov r2, #0 - b _0238674C -_02386738: - add r1, fp, r2, lsl #3 - str r2, [r1, #4] - add r1, r2, #1 - mov r1, r1, lsl #0x10 - mov r2, r1, asr #0x10 -_0238674C: - cmp r2, r0 - blt _02386738 - ldr r0, _02386B14 ; =0x000008DC - mov r1, r2, lsl #3 - strh r0, [fp, r1] - add r0, fp, r2, lsl #3 - str r8, [r0, #4] - add r0, r2, #1 - mov r0, r0, lsl #0x10 - mov r2, r0, asr #0x10 - mov r1, r2, lsl #3 - mov r0, #0 - strh r0, [fp, r1] - add r0, fp, r2, lsl #3 - str r8, [r0, #4] - ldr r0, _02386B18 ; =DUNGEON_WINDOW_PARAMS_15 - ldr r1, _02386B1C ; =0x00000213 - add r2, sp, #0x24 - mov r3, fp - bl CreateParentMenuFromStringIds - str r0, [sp, #0x10] -_023867A0: - mov r0, #0x1b - bl AdvanceFrame - ldr r0, [sp, #0x10] - bl IsParentMenuActive - cmp r0, #0 - bne _023867A0 - ldr r0, [sp, #0x10] - bl sub_0202ABB0 - movs sl, r0 - movmi r0, #1 - strmi r0, [sp, #0xc] - movpl r0, #0 - strpl r0, [sp, #0xc] - mov r0, #0x1b - bl AdvanceFrame - ldr r0, [sp, #0x10] - bl CloseParentMenu - ldr r0, [sp, #0xc] - cmp r0, #1 - bne _023867F8 - bl sub_020416FC - b _023864E0 -_023867F8: - mov r0, #6 - mov r1, #0 - bl ov29_022EA428 - mov r0, r4 - bl SetAdvancedTextBoxState5 -_0238680C: - mov r0, #0x1b - bl AdvanceFrame - mov r0, r4 - bl IsAdvancedTextBoxActive - cmp r0, #0 - bne _0238680C - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, #0x1b - bl AdvanceFrame - mov r0, r4 - bl CloseAdvancedTextBox - mov r4, sb - bl sub_020407C0 - cmp sl, #1 - bne _023868E8 - ldr r0, [r7] - mov r1, #0 - add r2, r0, #1 - b _023868C0 -_0238689C: - cmp r2, #8 - bge _023868C8 - ldrb r0, [r5, r2, lsl #3] - tst r0, #2 - beq _023868C8 - bic r0, r0, #2 - strb r0, [r5, r2, lsl #3] - add r2, r2, #1 - add r1, r1, #1 -_023868C0: - cmp r1, #8 - blt _0238689C -_023868C8: - mov r0, r5 - bl AllManip2 - ldr r0, [r6, #0xb4] - mov r1, r5 -#ifdef JAPAN - add r0, r0, #0x120 -#else - add r0, r0, #0x124 -#endif - mov r2, #0x22 - bl memcpy - b _023864E0 -_023868E8: - cmp sl, #2 - bne _02386924 - ldr r0, [r7] - cmp r0, #4 - bge _02386910 - ldr r1, [r7] - mov r0, r5 - mov r2, #4 - bl ov31_02386050 - b _023864E0 -_02386910: - add r0, r5, #0x20 - mov r1, #0 - mov r2, #1 - bl ov31_02386050 - b _023864E0 -_02386924: - mvn r0, #1 - cmp r4, r0 - beq _02386950 - mov r0, r4 - bl SetAdvancedTextBoxState5 - mov r0, #0x1b - bl AdvanceFrame - mov r0, r4 - bl CloseAdvancedTextBox - mvn r4, #1 - bl sub_020407C0 -_02386950: - ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r1, [r0] - cmp r1, #0 - blt _02386AE8 - ldr r0, [sp, #4] - cmp r0, #0 - beq _02386A04 - mov r0, r1, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02041154 - mov r1, r0 - mov r0, #0 - bl ov29_0234B084 - ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - cmp r0, #4 - bge _023869D8 - bl sub_02041364 - cmp r0, #0 - mov r0, #0 - mov r2, #1 - beq _023869C0 - ldr r1, _02386B20 ; =0x000008D6 - mov r3, r0 - str r2, [sp] - bl YesNoMenu - mov r7, r0 - b _023869F4 -_023869C0: - ldr r1, _02386B24 ; =0x000008D7 - mov r3, r0 - str r2, [sp] - bl YesNoMenu - mov r7, r0 - b _023869F4 -_023869D8: - mov r0, #0 - mov r2, #1 - ldr r1, _02386B24 ; =0x000008D7 - mov r3, r0 - str r2, [sp] - bl YesNoMenu - mov r7, r0 -_023869F4: - mov r0, #1 - mov r1, #0 - bl ov29_0233A0E8 - b _02386A08 -_02386A04: - mov r7, #1 -_02386A08: - cmp r7, #1 - bne _023864B4 - ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - cmp r0, #4 - movge r1, #0 - strgeb r1, [r5, r0, lsl #3] - bge _02386AE8 - bl sub_02041484 - bl sub_0203FD38 - mov r1, #0 - mov r2, r1 - mov r3, #1 - b _02386A80 -_02386A40: - add r8, r0, r1, lsl #3 - add r7, r5, r1, lsl #3 - mov r6, #4 -_02386A4C: - ldrh r4, [r8], #2 - subs r6, r6, #1 - strh r4, [r7], #2 - bne _02386A4C - ldrb r4, [r5, r1, lsl #3] - tst r4, #1 - movne r4, r3 - moveq r4, r2 - tst r4, #0xff - beq _02386A88 - add r1, r1, #1 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 -_02386A80: - cmp r1, #4 - blt _02386A40 -_02386A88: - mov r6, #4 -_02386A8C: - add r4, r5, r6, lsl #3 - add r3, r5, r1, lsl #3 - mov r2, #4 -_02386A98: - ldrh r0, [r4], #2 - subs r2, r2, #1 - strh r0, [r3], #2 - bne _02386A98 - add r0, r6, #1 - mov r0, r0, lsl #0x10 - add r1, r1, #1 - mov r6, r0, asr #0x10 - mov r0, r1, lsl #0x10 - cmp r6, #8 - mov r1, r0, asr #0x10 - blt _02386A8C - mov r2, #0 - b _02386AE0 -_02386AD0: - add r0, r1, #1 - mov r0, r0, lsl #0x10 - strb r2, [r5, r1, lsl #3] - mov r1, r0, asr #0x10 -_02386AE0: - cmp r1, #8 - blt _02386AD0 -_02386AE8: - bl ov31_02386450 - ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 - ldr r0, [r0] - cmp r0, #0 - movge r0, #1 - movlt r0, #0 - and r0, r0, #0xff - add sp, sp, #0x114 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define OV31_0238647C_OFFSET 0x1458 -#else -#define OV31_0238647C_OFFSET 0 -#endif -_02386B0C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 -_02386B10: .word ov29_0235352C -_02386B14: .word 0x000008DC + OV31_0238647C_OFFSET -_02386B18: .word DUNGEON_WINDOW_PARAMS_15 -_02386B1C: .word 0x00000213 -_02386B20: .word 0x000008D6 + OV31_0238647C_OFFSET -_02386B24: .word 0x000008D7 + OV31_0238647C_OFFSET - arm_func_end ov31_0238647C - - arm_func_start ov31_02386B28 -ov31_02386B28: ; 0x02386B28 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #0xa4 - ldr r0, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - ldr r1, [r0, #0x64] - ldrsh r0, [r1, #4] - ldrsh r1, [r1, #6] - bl GetTile - mov r4, r0 - ldr r0, _02386C0C ; =0x000008D1 - bl StringFromId - ldr r1, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r3, r0 - ldr r0, [r1] - mov r1, #8 - add r0, r0, #0x100 - ldrsb r0, [r0, #0x60] - mov r2, #2 - bl DrawTextInWindow - ldr r1, [r4, #0x10] - cmp r1, #0 - moveq r0, #0 - beq _02386B98 - ldr r0, [r1] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_02386B98: - cmp r0, #0 - beq _02386C00 - add r0, sp, #0x54 - mov r2, #0 - bl ov29_022E2A78 - ldr r0, [r4, #0x10] - bl ov29_022E1618 - ldrb r1, [r0] - ldr r0, _02386C10 ; =0x000008D2 - str r1, [sp, #0x14] - bl StringFromId - add r1, sp, #4 - mov r2, r0 - str r1, [sp] - add r0, sp, #0x54 - mov r1, #0x50 - mov r3, #0 - bl PreprocessString - ldr r0, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r1, #0x10 - ldr r0, [r0] - mov r2, #0x12 - add r0, r0, #0x100 - ldrsb r0, [r0, #0x60] - add r3, sp, #0x54 - bl DrawTextInWindow -_02386C00: - add sp, sp, #0xa4 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_02386C08: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C -#ifdef JAPAN -_02386C0C: .word 0x00001D29 -_02386C10: .word 0x00001D2A -#else -_02386C0C: .word 0x000008D1 -_02386C10: .word 0x000008D2 -#endif - arm_func_end ov31_02386B28 - - arm_func_start ov31_02386C14 -ov31_02386C14: ; 0x02386C14 - stmdb sp!, {r3, lr} - ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - add r0, r0, #0x61 - add r0, r0, #0x100 - bl ov29_0234E988 - ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - add r0, r0, #0x100 - ldrsb r0, [r0, #0x60] - bl sub_0202F954 - mov r0, #0x62 - bl AdvanceFrame - mov r0, #0x62 - bl AdvanceFrame - ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - add r0, r0, #0x100 - ldrsb r0, [r0, #0x60] - bl CloseTextBox - ldmia sp!, {r3, pc} - .align 2, 0 -_02386C68: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C - arm_func_end ov31_02386C14 - - arm_func_start ov31_02386C6C -ov31_02386C6C: ; 0x02386C6C - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #0xf4 - mov r5, r0 - mov r0, #0x164 - mov r1, #8 - bl MemAlloc - ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - str r0, [r1] - str r5, [r0, #0x64] -_02386C90: - bl ov29_022EA62C - ldr r0, _02386F10 ; =DUNGEON_WINDOW_PARAMS_18 - ldr r1, _02386F14 ; =ov31_02386B28 - bl CreateTextBox - ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r1, [r1] - strb r0, [r1, #0x160] - bl ov29_022EBA70 - mov r0, #0x25 - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0xc - mov r1, #0 - bl AddDungeonSubMenuOption - bl ov29_022EB9A0 - bl ov29_022EBA84 - mov r1, #0 - ldr r2, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - b _02386CF0 -_02386CDC: - ldr r3, [r2] - add r4, r1, #1 - add r3, r3, r1, lsl #3 - mov r1, r4 - str r4, [r3, #4] -_02386CF0: - cmp r1, r0 - blt _02386CDC - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r2, #0 - ldr r4, [r0] - mov r3, r1, lsl #3 - strh r2, [r4, r3] - ldr r3, [r0] - sub r4, r2, #1 - add r3, r3, r1, lsl #3 - str r4, [r3, #4] - ldr r3, [r0] - add r3, r3, r1, lsl #3 - strh r2, [r3, #8] - ldr r3, [r0] - add r1, r3, r1, lsl #3 - str r4, [r1, #0xc] - ldr r0, [r0] - add r1, r0, #0x58 - bl ov31_0238513C - ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, _02386F18 ; =DUNGEON_WINDOW_PARAMS_17 - ldr r3, [r1] - ldr r1, _02386F1C ; =0x00000213 - add r4, r3, #0x58 - add r2, sp, #0x5c - str r4, [sp, #0xbc] - bl CreateParentMenuFromStringIds - ldr r6, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r4, #0x2d - ldr r1, [r6] - strb r0, [r1, #0x161] -_02386D70: - mov r0, r4 - bl AdvanceFrame - ldr r0, [r6] - add r0, r0, #0x100 - ldrsb r0, [r0, #0x61] - bl IsParentMenuActive - cmp r0, #0 - bne _02386D70 - ldr r0, [r6] - add r0, r0, #0x100 - ldrsb r0, [r0, #0x61] - bl sub_0202ABB0 - ldr r1, [r6] - sub r0, r0, #1 - str r0, [r1, #0x124] - ldr r0, [r6] - ldr r0, [r0, #0x124] - cmp r0, #0 - movlt r6, #1 - blt _02386EBC - cmp r0, #1 - bne _02386E70 - bl ov31_02386C14 - ldrsh r0, [r5, #4] - ldrsh r1, [r5, #6] - bl GetTile - ldr r0, [r0, #0x10] - cmp r0, #0 - beq _02386E68 - ldr r1, [r0] - cmp r1, #2 - bne _02386E68 - bl GetTrapInfo - ldrb r3, [r0] - add r2, sp, #0xc - ldr r1, _02386F20 ; =0x00001013 - str r3, [sp, #0x1c] - str r2, [sp] - ldrb r2, [r0] - ldr r0, _02386F24 ; =DUNGEON_WINDOW_PARAMS_19 -#if defined(EUROPE) - sub r3, r1, #0x740 - add r2, r2, #0xdc - add r2, r2, #0x3400 -#elif defined(JAPAN) - ldr r3, _023881A0 ; =0x00001D2B - add r2, r2, #0x5f - add r2, r2, #0x4700 -#else - sub r3, r1, #0x740 - add r2, r2, #0xda - add r2, r2, #0x3400 -#endif - mov r2, r2, lsl #0x10 - mov r2, r2, lsr #0x10 - str r2, [sp, #4] - mov r2, #0 - str r2, [sp, #8] - bl CreateScrollBoxSingle - mov r6, r0 - mov r4, #0x16 -_02386E3C: - mov r0, r4 - bl AdvanceFrame - mov r0, r6 - bl IsScrollBoxActive - cmp r0, #0 - bne _02386E3C - mov r0, r6 - bl CloseScrollBox - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 -_02386E68: - mov r6, #2 - b _02386EBC -_02386E70: - bl ov29_022EB804 - cmp r0, #0 - beq _02386D70 - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r4, [r5, #0xb4] - ldr r0, [r0] - ldr r1, _02386F28 ; =ov29_0237C91C - ldr r2, [r0, #0x124] - add r0, r4, #0x4a - mov r2, r2, lsl #3 - ldrh r1, [r1, r2] - bl SetMonsterActionFields - mov r6, #0 - strb r6, [r4, #0x4e] - strh r6, [r4, #0x50] - strh r6, [r4, #0x52] - strb r6, [r4, #0x54] - strh r6, [r4, #0x56] - strh r6, [r4, #0x58] -_02386EBC: - mov r0, #0x2d - bl AdvanceFrame - cmp r6, #2 - beq _02386C90 - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - cmp r0, #0 - beq _02386EF8 - bl ov31_02386C14 - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - ldr r0, [r0] - bl MemFree - ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C - mov r1, #0 - str r1, [r0] -_02386EF8: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - add sp, sp, #0xf4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02386F0C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C -_02386F10: .word DUNGEON_WINDOW_PARAMS_18 -_02386F14: .word ov31_02386B28 -_02386F18: .word DUNGEON_WINDOW_PARAMS_17 -_02386F1C: .word 0x00000213 -_02386F20: .word 0x00001013 -_02386F24: .word DUNGEON_WINDOW_PARAMS_19 -#ifdef JAPAN -_023881A0: .word 0x00001D2B -#endif -_02386F28: .word ov29_0237C91C - arm_func_end ov31_02386C6C - - arm_func_start ov31_02386F2C -ov31_02386F2C: ; 0x02386F2C - stmdb sp!, {r3, lr} - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x294 - add r0, r0, #0x400 - bl ov29_0234E988 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x97] - cmp r0, r1 - beq _02386F64 - bl CloseAdvancedTextBox -_02386F64: - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x98] - cmp r0, r1 - beq _02386F98 - bl CloseAdvancedTextBox - bl sub_020407C0 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x698] -_02386F98: - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x96] - cmp r0, r1 - beq _02386FB8 - bl CloseTextBox -_02386FB8: - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x3a4 - add r0, r0, #0x400 - bl ov31_023899D4 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x3a8 - add r0, r0, #0x400 - bl ov31_02388714 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x95 - add r0, r0, #0x600 - bl ov29_0234E988 - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - bl MemFree - ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02387010: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 - arm_func_end ov31_02386F2C - - arm_func_start ov31_02387014 -ov31_02387014: ; 0x02387014 - ldr r1, [r0, #0xb4] - ldr ip, _02387044 ; =ov31_023899B8 - ldrb r0, [r1, #7] - mov r2, #1 - cmp r0, #0 - movne r1, #0xb - ldr r0, _02387048 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldreqb r1, [r1, #0xa8] - ldr r0, [r0] - and r1, r1, #0xff - ldr r0, [r0, #0x7a4] - bx ip - .align 2, 0 -_02387044: .word ov31_023899B8 -_02387048: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 - arm_func_end ov31_02387014 - - arm_func_start TeamMenu -TeamMenu: ; 0x0238704C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x13c - mov sl, r0 - ldr r0, _02387614 ; =0x000007AC - mov r1, #8 - bl MemAlloc - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - str r0, [r1] - bl ov31_023880D8 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - str sl, [r0, #0x69c] - bl ov29_0234EBCC - mov r7, #0 - add r0, sp, #0xb0 - mov r1, #1 - mov r2, r7 - mov r3, r7 - str r7, [sp] - mov r8, r7 - bl ov29_0234EA18 - ldr r2, _0238761C ; =ov31_02387014 - add r0, sp, #0xb0 - mov r1, #0xe - mov r3, r7 - bl ov31_02388114 - ldr r2, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, _02387620 ; =DUNGEON_WINDOW_PARAMS_22 - ldr r3, [r2] - str r0, [r3, #0x7a8] - ldr r0, [r2] - ldr r0, [r0, #0x7a8] - bl ov31_02388444 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r1, sp, #8 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_02388704 - ldr r1, [sp, #0xc] - ldr r0, [sp, #0x10] - add r1, r1, #8 - mov r0, r0, lsl #0x10 - mov r1, r1, lsl #0x10 - mov r0, r0, asr #0x10 - mov r1, r1, asr #0x10 - bl ov31_0238991C - ldr r3, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r1, #0xb - ldr r4, [r3] - mov r2, r7 - str r0, [r4, #0x7a4] - ldr r0, [r3] - ldr r0, [r0, #0x7a4] - bl ov31_023899B8 -_02387124: - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_02388534 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_023886D4 - cmp r0, #1 - moveq r7, #1 - beq _023875D8 - cmp r0, #2 - bne _02387184 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r8, #1 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_023886DC - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r2, [r1] - str r0, [r2, #0x760] - ldr r0, [r1] - ldr sb, [r0, #0x760] - b _023871B0 -_02387184: - cmp r0, #3 - bne _023871B0 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_023886DC - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r2, [r1] - str r0, [r2, #0x760] - ldr r0, [r1] - ldr sb, [r0, #0x760] -_023871B0: - bl ov29_022EBA70 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r1, sp, #0xb0 - ldr r2, [r0] - ldr r0, _02387624 ; =DUNGEON_PTR - ldr r2, [r2, #0x760] - ldr r3, [r0] - add r0, r1, r2, lsl #5 - ldr r1, [r0, #4] - mov r0, #0x1b - add r1, r3, r1, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r4, [r1, #0xa84] -#else - ldr r4, [r1, #0xb28] -#endif - mov r1, #0 - ldr r5, [r4, #0xb4] - bl AddDungeonSubMenuOption - mov r0, #0x19 - mov r1, #0 - bl AddDungeonSubMenuOption - ldrb r0, [r5, #7] - cmp r0, #0 - bne _02387278 - ldr r0, _02387624 ; =DUNGEON_PTR - ldr r1, [r0] - ldrb r0, [r1, #0x75d] - cmp r0, #0 - ldreqb r0, [r1, #0x75e] - cmpeq r0, #0 - bne _0238726C - ldrsh r0, [r5, #0xc] - bl GetActiveTeamMember - ldrsh r1, [r0, #8] - ldr r0, _02387628 ; =0x00005AA5 - cmp r1, r0 - beq _0238726C - ldrb r0, [r5, #0x48] - bl JoinedAtRangeCheck2Veneer - cmp r0, #0 - beq _02387260 - ldr r0, _02387624 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75c] - cmp r0, #0 - beq _0238726C -_02387260: - mov r0, #0x34 - mov r1, #0 - bl AddDungeonSubMenuOption -_0238726C: - mov r0, #0x1c - mov r1, #0 - bl AddDungeonSubMenuOption -_02387278: - mov r0, #0x30 - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0x1a - mov r1, #0 - bl AddDungeonSubMenuOption - ldrb r0, [r5, #7] - cmp r0, #0 - ldreq r0, _02387624 ; =DUNGEON_PTR - ldreq r1, [r0] - ldreqb r0, [r1, #0x75e] - cmpeq r0, #0 - bne _02387320 - ldrb r0, [r1, #0x75c] - cmp r0, #0 - beq _02387320 - ldrb r0, [r1, #0x748] - bl GetLeaderChangeFlag - cmp r0, #0 - beq _02387320 - mov r0, #0x3b - mov r1, #0 - bl AddDungeonSubMenuOption - ldrsh r0, [r5, #0xc] - mov r6, #1 - cmp r0, #4 - movge r6, #0 - bge _023872FC - bl GetActiveTeamMember - ldrsh r0, [r0, #8] - bl ov29_022F9C34 - cmp r0, #0 - movne r6, #0 -_023872FC: - mov r0, r4 - mov r1, #0 - bl CheckVariousStatuses2 - cmp r0, #0 - movne r6, #0 - cmp r6, #0 - bne _02387320 - mov r0, #0x3b - bl DisableDungeonSubMenuOption -_02387320: - mov r0, r5 - bl IsExperienceLocked - cmp r0, #0 - beq _0238735C - mov r0, #0x19 - bl DisableDungeonSubMenuOption - mov r0, #0x3b - bl DisableDungeonSubMenuOption - mov r0, #0x1a - bl DisableDungeonSubMenuOption - mov r0, #0x30 - bl DisableDungeonSubMenuOption - mov r0, #0x34 - bl DisableDungeonSubMenuOption - b _02387380 -_0238735C: - ldrb r0, [r5, #7] - cmp r0, #0 - beq _02387380 - mov r0, r4 - bl ov29_0234FBD4 - cmp r0, #0 - bne _02387380 - mov r0, #0x1a - bl DisableDungeonSubMenuOption -_02387380: - bl ov29_022EB9A0 - cmp r8, #0 - beq _023873C8 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r3, [sl, #0xb4] - ldr r0, [r0] - add r1, sp, #0xb4 - ldr r2, [r0, #0x760] - add r0, r3, #0x4a - ldr r1, [r1, r2, lsl #5] - bl ov29_022EBA94 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r7, #0 - ldr r0, [r0] - add r0, r0, #0x294 - add r0, r0, #0x400 - bl ov29_0234E988 - b _023875D8 -_023873C8: - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - cmp sb, #0 - ldr r0, [r0] - moveq r2, #1 - add r1, r0, #0x188 - movne r2, #0 - add r0, r0, #0x530 - add r1, r1, #0x400 - bl ov31_0238513C - bl ov29_022EBA84 - mov r2, #0 - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - b _02387410 -_023873FC: - ldr r3, [r1] - add r4, r2, #1 - add r3, r3, r2, lsl #3 - mov r2, r4 - str r4, [r3, #0x534] -_02387410: - cmp r2, r0 - blt _023873FC - ldr r4, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r3, _0238762C ; =0x00000A3C - ldr r0, [r4] - mvn r1, #0 - add r0, r0, r2, lsl #3 - add r0, r0, #0x500 - strh r3, [r0, #0x30] - ldr r0, [r4] - mov r5, #0 - add r0, r0, r2, lsl #3 - str r1, [r0, #0x534] - ldr r3, [r4] - mov r0, #0xa - add r3, r3, r2, lsl #3 - add r3, r3, #0x500 - strh r5, [r3, #0x38] - ldr r3, [r4] - add r2, r3, r2, lsl #3 - str r1, [r2, #0x53c] - ldr r1, [r4] - add r1, r1, #0x188 - add r1, r1, #0x400 - str r1, [sp, #0x78] - bl Arm9LoadUnkFieldNa0x2029EC8 - add r4, r0, #1 - ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, _02387630 ; =DUNGEON_WINDOW_PARAMS_23 - ldr r3, [r1] - ldr r1, _02387634 ; =0x00000233 - add r2, sp, #0x18 - add r3, r3, #0x530 - str r4, [sp, #0x18] - bl CreateParentMenuFromStringIds - ldr r4, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r6, #0x1b - ldr r1, [r4] - add fp, sp, #4 - strb r0, [r1, #0x694] -_023874B0: - mov r0, r6 - bl AdvanceFrame - mov r0, r5 - mov r1, fp - bl GetPressedButtons - ldr r0, [r4] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x94] - bl IsParentMenuActive - cmp r0, #0 - ldr r0, [r4] - add r0, r0, #0x600 - bne _02387578 - ldrsb r0, [r0, #0x94] - bl sub_0202ABB0 - subs r1, r0, #1 - bmi _0238754C - ldr r0, [r4] - str r1, [r0, #0x760] - ldr r0, [r4] - ldr r0, [r0, #0x760] - bl ov29_022EB804 - cmp r0, #0 - beq _023874B0 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, _02387638 ; =ov29_0237C91C - ldr r0, [r0] - ldr r5, [sl, #0xb4] - ldr r2, [r0, #0x760] - add r0, r5, #0x4a - mov r2, r2, lsl #3 - ldrh r1, [r1, r2] - bl SetMonsterActionFields - add r0, sp, #0xb0 - add r0, r0, sb, lsl #5 - ldr r0, [r0, #4] - mov r4, #0 - strb r0, [r5, #0x4e] - b _02387594 -_0238754C: - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x294 - add r0, r0, #0x400 - bl ov29_0234E988 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - ldr r0, [r0, #0x7a8] - bl ov31_023886F4 - mov r4, #1 - b _02387594 -_02387578: - ldrsb r0, [r0, #0x94] - bl sub_0202AB80 - mov r1, r0 - mov r0, #0xa - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 - b _023874B0 -_02387594: - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x294 - add r0, r0, #0x400 - bl ov29_0234E988 - cmp r4, #1 - beq _02387124 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x95 - add r0, r0, #0x600 - bl ov29_0234E988 - ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x3a4 - add r0, r0, #0x400 - bl ov31_023899D4 -_023875D8: - cmp r7, #0 - beq _023875F0 - bl GetLeader - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster -_023875F0: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - bl ov31_02386F2C - mov r0, #0x1b - bl AdvanceFrame - mov r0, r7 - add sp, sp, #0x13c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02387614: .word 0x000007AC -_02387618: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 -_0238761C: .word ov31_02387014 -_02387620: .word DUNGEON_WINDOW_PARAMS_22 -_02387624: .word DUNGEON_PTR -_02387628: .word 0x00005AA5 -#ifdef JAPAN -_0238762C: .word 0x00000877 -#else -_0238762C: .word 0x00000A3C -#endif -_02387630: .word DUNGEON_WINDOW_PARAMS_23 -_02387634: .word 0x00000233 -_02387638: .word ov29_0237C91C - arm_func_end TeamMenu - - arm_func_start ov31_0238763C -ov31_0238763C: ; 0x0238763C - cmp r0, #0 - moveq r0, #0 - bxeq lr - ldr r0, [r0] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end ov31_0238763C - - arm_func_start ov31_02387660 -ov31_02387660: ; 0x02387660 - ldr r1, _02387680 ; =DUNGEON_PTR - ldrb r0, [r0, #4] - ldr r1, [r1] - ldr ip, _02387684 ; =ov31_0238948C - add r0, r1, r0, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - bx ip - .align 2, 0 -_02387680: .word DUNGEON_PTR -_02387684: .word ov31_0238948C - arm_func_end ov31_02387660 - - arm_func_start ov31_02387688 -ov31_02387688: ; 0x02387688 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x78 - ldr r2, _02387788 ; =DUNGEON_PTR - ldrb r0, [r0, #4] - ldr r2, [r2] - mov r4, r1 - add r0, r2, r0, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr sb, [r0, #0xa84] -#else - ldr sb, [r0, #0xb28] -#endif - bl ov29_022EA62C - cmp r4, #0 - beq _023876C4 - mov r0, sb - bl ov31_023889DC - b _0238776C -_023876C4: - ldr r0, [sb, #0xb4] - bl IsExperienceLocked - cmp r0, #0 - movne r4, #1 - bne _023876E4 - cmp r4, #0 - movne r4, #2 - moveq r4, #0 -_023876E4: - add r0, sp, #0 - mov r1, sb - bl CreateMonsterSummaryFromMonster - mov r2, #0 - add r0, sp, #0 - mov r1, r4 - strh r2, [sp, #0x40] - strh r2, [sp, #0x56] - bl sub_0203F150 - mov r7, #0x62 - mov r6, r7 - mov r5, r7 - mov r4, #1 - mov fp, #0x1c - mov r8, #0 -_02387720: - mov sl, r8 - bl ov29_022EA62C -_02387728: - mov r0, r7 - bl AdvanceFrame - bl sub_0203F398 - cmp r0, #2 - beq _0238775C - cmp r0, #1 - bne _02387728 - bl sub_0203F990 - mov r0, r6 - bl AdvanceFrame - mov r0, r5 - bl AdvanceFrame - mov sl, r4 -_0238775C: - mov r0, fp - bl AdvanceFrame - cmp sl, #0 - beq _02387720 -_0238776C: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, sb - bl ov29_023021F0 - add sp, sp, #0x78 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02387788: .word DUNGEON_PTR - arm_func_end ov31_02387688 - - arm_func_start ov31_0238778C -ov31_0238778C: ; 0x0238778C - stmdb sp!, {r4, lr} - ldr r1, _023877C0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r4, r0 - ldr r0, [r1] - add r0, r0, #0x600 - ldrh r0, [r0, #0x92] - bl StringFromId - mov r1, #2 - mov r3, r0 - mov r0, r4 - mov r2, r1 - bl DrawTextInWindow - ldmia sp!, {r4, pc} - .align 2, 0 -_023877C0: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 - arm_func_end ov31_0238778C - - arm_func_start ov31_023877C4 -ov31_023877C4: ; 0x023877C4 - ldr r2, _023877E4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr ip, _023877E8 ; =DrawTextInWindow - ldr r3, [r2] - mov r1, #2 - add r3, r3, #0x12 - mov r2, #0x10 - add r3, r3, #0x600 - bx ip - .align 2, 0 -_023877E4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 -_023877E8: .word DrawTextInWindow - arm_func_end ov31_023877C4 - - arm_func_start ov31_023877EC -ov31_023877EC: ; 0x023877EC -#ifdef JAPAN -#define OV31_023877EC_OFFSET -8 -#define OV31_023877EC_OFFSET_2 -4 -#define OV31_023877EC_OFFSET_3 -0xA4 -#else -#define OV31_023877EC_OFFSET 0 -#define OV31_023877EC_OFFSET_2 0 -#define OV31_023877EC_OFFSET_3 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2a4 + OV31_023877EC_OFFSET - mov r4, #0 - movs sl, r0 -#ifndef JAPAN - str r3, [sp, #8] -#endif - subne r0, r4, #1 - strne r0, [sl] - mov sb, r1 - ldr r0, _02388080 ; =0x000007AC - mov r1, #8 - mov fp, r2 - bl MemAlloc - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - str r0, [r1] - bl ov31_023880D8 - mov r7, #0 - mov r6, r7 -_02387830: - ldr r0, _02388088 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 - ldr r5, [r0, #0xb28 + OV31_023877EC_OFFSET_3] - mov r0, r5 - bl ov31_0238763C - cmp r0, #0 - beq _0238789C - cmp fp, #0 - beq _0238786C - mov r0, r5 - ldr r8, [r5, #0xb4] - bl ov29_02347100 -#ifdef JAPAN - strb r0, [r8, #0x15d] -#else - strb r0, [r8, #0x161] -#endif -_0238786C: - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r7, lsl #5 - str r6, [r0, #4] - ldr r0, [r5, #0xb4] -#ifdef JAPAN - ldrb r0, [r0, #0x15d] -#else - ldrb r0, [r0, #0x161] -#endif - cmp r0, #0 - movne r1, #0 - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r7 - moveq r1, #3 - strb r1, [r0, #0x84] - add r7, r7, #1 -_0238789C: - add r6, r6, #1 - cmp r6, #4 - blt _02387830 - mov r6, r7 - mvn r5, #0 - add r3, sp, #0x218 + OV31_023877EC_OFFSET - mov r1, #0 - b _023878D0 -_023878BC: - add r2, r3, r6, lsl #5 - add r0, r3, r6 - str r5, [r2, #4] - strb r1, [r0, #0x84] - add r6, r6, #1 -_023878D0: - cmp r6, #4 - blt _023878BC - mov r0, #0xb - bl Arm9LoadUnkFieldNa0x2029EC8 - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r2, #0 - ldr r3, [r1] - str r0, [r3, #0x760] - ldr r0, [r1] - str r7, [r0, #0x764] - ldr r0, [r1] - str r7, [r0, #0x768] - ldr r0, [r1] - str r2, [r0, #0x76c] - ldr r0, [r1] - str r2, [r0, #0x770] - ldr r0, [r1] - str r2, [r0, #0x754] - ldr r0, [r1] - str r2, [r0, #0x758] - bl ov29_022EA62C - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x95 - add r0, r0, #0x600 - bl ov29_0234E988 - mov r5, #0 - add r0, sp, #0x68 + OV31_023877EC_OFFSET - mov r1, r5 - mov r2, #0x80 - bl memset - mov r8, r5 - ldr fp, _0238808C ; =0x000003E7 - b _02387B80 -_02387958: - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r8, lsl #5 - ldr r1, [r0, #4] - cmp r1, #0 - blt _02387B7C - ldr r0, _02388088 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r1, lsl #2 - add r0, r0, #0x12000 - ldr r6, [r0, #0xb28 + OV31_023877EC_OFFSET_3] - mov r0, r6 - bl ov31_0238763C - cmp r0, #0 - beq _02387B7C - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r8 - ldrb r0, [r0, #0x84] - ldr r6, [r6, #0xb4] - cmp r0, #0 - movne r0, #0x57 - moveq r0, #0x44 - and r2, r0, #0xff - add r0, sp, #0x68 + OV31_023877EC_OFFSET - mov r1, r6 - bl ov29_023002F0 - add r0, sp, #0x68 + OV31_023877EC_OFFSET - str r0, [sp, #0x50 + OV31_023877EC_OFFSET] - ldrsh r0, [r6, #0xc] - bl GetActiveTeamMember - ldrsh r0, [r0, #8] - bl ov29_022F9C34 - cmp r0, #0 - ldrsh r1, [r6, #0x12] - ldrsh r0, [r6, #0x16] - beq _02387A84 - add r1, r1, r0 - cmp r1, fp - movgt r3, fp - movle r3, r1 - mov r2, r3, asr #1 - ldrsh r0, [r6, #0x10] - add r2, r3, r2, lsr #30 - cmp r0, r2, asr #2 - bgt _02387A18 - ldr r1, _02388090 ; =ov31_0238A044 - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bl strcpy - b _02387B20 -_02387A18: - cmp r1, fp - movgt r3, fp - movle r3, r1 - mov r2, r3, asr #1 - add r2, r3, r2, lsr #30 - mov r2, r2, asr #2 - cmp r0, r2, lsl #1 - bgt _02387A48 - ldr r1, _02388094 ; =ov31_0238A04C - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bl strcpy - b _02387B20 -_02387A48: - cmp r1, fp - movgt r1, fp - mov r2, r1, asr #1 - add r1, r1, r2, lsr #30 - mov r1, r1, asr #2 - add r1, r1, r1, lsl #1 - cmp r0, r1 - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bgt _02387A78 - ldr r1, _02388098 ; =ov31_0238A054 - bl strcpy - b _02387B20 -_02387A78: - ldr r1, _0238809C ; =ov31_0238A05C - bl strcpy - b _02387B20 -_02387A84: - add r1, r1, r0 - cmp r1, fp - movgt r3, fp - movle r3, r1 - mov r2, r3, asr #1 - ldrsh r0, [r6, #0x10] - add r2, r3, r2, lsr #30 - cmp r0, r2, asr #2 - bgt _02387AB8 - ldr r1, _023880A0 ; =ov31_0238A064 - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bl strcpy - b _02387B20 -_02387AB8: - cmp r1, fp - movgt r3, fp - movle r3, r1 - mov r2, r3, asr #1 - add r2, r3, r2, lsr #30 - mov r2, r2, asr #2 - cmp r0, r2, lsl #1 - bgt _02387AE8 - ldr r1, _023880A4 ; =ov31_0238A06C - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bl strcpy - b _02387B20 -_02387AE8: - cmp r1, fp - movgt r1, fp - mov r2, r1, asr #1 - add r1, r1, r2, lsr #30 - mov r1, r1, asr #2 - add r1, r1, r1, lsl #1 - cmp r0, r1 - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - bgt _02387B18 - ldr r1, _023880A8 ; =ov31_0238A074 - bl strcpy - b _02387B20 -_02387B18: - ldr r1, _023880AC ; =ov31_0238A07C - bl strcpy -_02387B20: - add r0, sp, #0xa8 + OV31_023877EC_OFFSET - str r0, [sp, #0x54 + OV31_023877EC_OFFSET] - add r0, sp, #0x18 + OV31_023877EC_OFFSET - str r0, [sp] - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r2, _023880B0 ; =ov31_0238A084 - ldr r0, [r0] - mov r1, #0x100 - add r0, r0, #0x30 - add r0, r0, r5, lsl #8 - mov r3, #0 - bl PreprocessString - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r1, r5, lsl #3 - ldr r2, [r0] - add r0, r2, #0x30 - add r0, r0, r5, lsl #8 - str r0, [r2, r5, lsl #3] - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r5, r5, #1 - ldr r0, [r0] - add r0, r0, r1 - str r5, [r0, #4] -_02387B7C: - add r8, r8, #1 -_02387B80: - cmp r8, r7 - blt _02387958 - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mov r3, #0 - ldr r1, [r0] - sub r2, r3, #1 - str r3, [r1, r5, lsl #3] - ldr r1, [r0] - ldr r0, _02388088 ; =DUNGEON_PTR - add r1, r1, r5, lsl #3 - str r2, [r1, #4] - ldr r0, [r0] - ldrb r5, [r0, #0x75b] - cmp r5, #0 - ldrne r1, _023880B4 ; =0x00000A3A - movne r0, #0x10 - strne r0, [sp, #0xf4 + OV31_023877EC_OFFSET] - mov r0, #0xb - strneh r1, [sp, #0xf0 + OV31_023877EC_OFFSET] - bl Arm9LoadUnkFieldNa0x2029EC8 - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - cmp r5, #0 - ldr r3, [r1] - add r2, sp, #0x29c + OV31_023877EC_OFFSET - str r0, [r3, #0x760] - ldr r0, [r1] - movne r1, #0x800 - ldr r0, [r0, #0x760] - moveq r1, #0 - add r0, r0, #1 - str r0, [sp, #0xe8 + OV31_023877EC_OFFSET] - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - orr r1, r1, #0x33 - ldr r3, [r0] - str r2, [sp, #0x148 + OV31_023877EC_OFFSET] - ldr r0, _023880B8 ; =DUNGEON_WINDOW_PARAMS_21 - add r2, sp, #0xe8 + OV31_023877EC_OFFSET - orr r1, r1, #0x1200 - bl CreateParentMenu - ldr r2, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, _023880BC ; =ov31_0238778C - ldr r2, [r2] - strb r0, [r2, #0x695] - ldr r0, _023880C0 ; =DUNGEON_WINDOW_PARAMS_24 - bl CreateTextBox - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r3, _023880C4 ; =0x00000A36 - ldr r2, [r1] - mov r5, #0x10 - strb r0, [r2, #0x696] - ldr r2, [r1] - str r5, [sp, #0x18c + OV31_023877EC_OFFSET] - add r0, r2, #0x92 - add r1, r0, #0x500 - add r0, sp, #0x118 + OV31_023877EC_OFFSET - strh r3, [r0, #0x70] - str r1, [sp, #0x1c8 + OV31_023877EC_OFFSET] - cmp sb, #3 - bne _02387CA8 - add r1, r3, #3 - add r0, r2, #0x600 - strh r1, [r0, #0x92] - mov r5, #0 - str r5, [sp] - ldr r0, _023880C8 ; =DUNGEON_WINDOW_PARAMS_20 - ldr r3, _023880CC ; =ov31_023877C4 - add r2, sp, #0x180 + OV31_023877EC_OFFSET - mov r1, #0x800 - str r5, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, [r1] - strb r0, [r1, #0x697] - b _02387CF4 -_02387CA8: - cmp sb, #2 - addne r1, r3, #3 - addne r0, r2, #0x600 - strneh r1, [r0, #0x92] - bne _02387CF4 - add r1, r3, #2 - add r0, r2, #0x600 - strh r1, [r0, #0x92] - mov r5, #0 - str r5, [sp] - ldr r0, _023880C8 ; =DUNGEON_WINDOW_PARAMS_20 - ldr r3, _023880CC ; =ov31_023877C4 - add r2, sp, #0x180 + OV31_023877EC_OFFSET - mov r1, #0x800 - str r5, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r1, [r1] - strb r0, [r1, #0x697] -_02387CF4: - sub r0, sb, #2 -#ifdef JAPAN - str r0, [sp, #0xc] - ldr r0, _023880D0 ; =0x00000872 - ldr r5, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r8, #0x3d8 - rsb fp, r0, #0x870 -#else - mvn r7, #0x3d8 - str r0, [sp, #0x10] - add r0, r7, #0xe10 - ldr r5, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - str r0, [sp, #0x14] - mov fp, r7, asr #9 -#endif -_02387D10: - ldr r0, [r5] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x95] - bl sub_0202AB80 - ldr r1, [r5] - str r0, [r1, #0x760] - ldr r1, [r5] - mov r0, #0xb - ldr r1, [r1, #0x760] - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 - ldr r0, [r5] - ldr r1, [r0, #0x760] - add r0, sp, #0x218 + OV31_023877EC_OFFSET - add r0, r0, r1, lsl #5 - ldr r6, [r0, #4] - cmp r6, #0 - blt _02387EC0 - ldr r0, _02388088 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r7, [r0, #0xa84] - mov r0, r7 - bl ov31_0238763C - cmp r0, #0 - cmpne r8, r6 - beq _02387E98 - cmp sb, #1 - bne _02387DCC - mov r0, r7 -#else - ldr r8, [r0, #0xb28] - mov r0, r8 - bl ov31_0238763C - cmp r0, #0 - cmpne r7, r6 - beq _02387E98 - cmp sb, #1 - bne _02387DCC - mov r0, r8 -#endif - bl sub_0203F9CC - ldr r0, [r5] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x98] - cmp r0, fp - bne _02387DC0 - mov r1, #0 - mov r0, #7 - mov r2, r1 - bl sub_0204018C - ldr r1, [r5] - strb r0, [r1, #0x698] - b _02387DC4 -_02387DC0: - bl sub_02041178 -_02387DC4: - bl sub_020407EC - b _02387E98 -_02387DCC: - ldr r0, [sp, #0x10 + OV31_023877EC_OFFSET_2] - cmp r0, #1 - bhi _02387E98 - ldr r1, [r5] - add r0, r1, #0x600 - ldrsb r0, [r0, #0x97] - str r0, [sp, #0xc + OV31_023877EC_OFFSET_2] - cmp r0, fp - beq _02387E98 - add r0, r1, #0x92 -#ifdef JAPAN - ldr r8, [r7, #0xb4] - add r0, r0, #0x500 - mov r1, r7 - mov r2, #0 - bl ov29_022E2A78 - ldrb r0, [r8, #0xbc] - cmp r0, #7 - beq _02387E24 - mov r0, r8 -#else - ldr r7, [r8, #0xb4] - add r0, r0, #0x500 - mov r1, r8 - mov r2, #0 - bl ov29_022E2A78 - ldrb r0, [r7, #0xbc] - cmp r0, #7 - beq _02387E24 - mov r0, r7 -#endif - bl IsExperienceLocked - cmp r0, #0 - beq _02387E3C -_02387E24: -#ifdef JAPAN - ldr r0, _023880D0 ; =0x00000872 - ldr r2, [r5] - add r1, r0, #6 - add r0, r2, #0x12 -#else - ldr r0, [r5] - ldr r1, _023880D0 ; =0x00000A3D - add r0, r0, #0x12 -#endif - add r0, r0, #0x600 - bl GetStringFromFileVeneer - b _02387E90 -_02387E3C: -#ifdef JAPAN - ldrb r0, [r8, #0x62] -#else - ldrb r0, [r7, #0x62] -#endif - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - bne _02387E6C - ldr r0, [r5] -#ifdef JAPAN - ldr r1, _023880D0 ; =0x00000872 -#else - ldr r1, [sp, #0x14] -#endif - add r0, r0, #0x12 - add r0, r0, #0x600 - bl GetStringFromFileVeneer - b _02387E90 -_02387E6C: - mov r0, #1 - str r0, [sp] - ldr r0, [r5] - ldr r2, _023880D4 ; =OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 - add r0, r0, #0x12 -#ifdef JAPAN - add r1, r8, #0x62 -#else - add r1, r7, #0x62 -#endif - add r0, r0, #0x600 - mov r3, #1 - bl sub_0200D310 -_02387E90: - ldr r0, [sp, #0xc + OV31_023877EC_OFFSET_2] - bl SetAdvancedTextBoxField0x1C2 -_02387E98: -#ifdef JAPAN - mov r0, r7 - mov r1, #0 - mov r2, #1 - mov r8, r6 - bl TryPointCameraToMonster - mov r2, #1 - add r0, r7, #4 -#else - mov r0, r8 - mov r1, #0 - mov r2, #1 - mov r7, r6 - bl TryPointCameraToMonster - mov r2, #1 - add r0, r8, #4 -#endif - mov r1, #0 - mov r3, r2 - bl DrawTileGrid -_02387EC0: - mov r0, #0x1b - bl AdvanceFrame - ldr r0, [r5] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x95] - bl IsParentMenuActive - cmp r0, #0 - bne _02387D10 - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x95] - bl sub_0202ABB0 - subs r3, r0, #1 - bmi _02387F24 - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r1, sp, #0x29c + OV31_023877EC_OFFSET - ldr r2, [r0] - str r3, [r2, #0x760] - ldr r0, [r0] - ldr r0, [r0, #0x760] - ldrb r0, [r1, r0] - cmp r0, #0 - movne r4, #1 - b _02387F28 -_02387F24: - mov r4, #1 -_02387F28: - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x97] - cmp r0, r1 - beq _02387F58 - bl CloseAdvancedTextBox - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x697] -_02387F58: - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x98] - cmp r0, r1 - beq _02387F8C - bl CloseAdvancedTextBox - bl sub_020407C0 - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x698] -_02387F8C: - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - ldr r0, [r0] - add r0, r0, #0x600 - ldrsb r0, [r0, #0x96] - bl CloseTextBox - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - mvn r2, #1 - ldr r1, [r0] - mov r0, #0x1b - strb r2, [r1, #0x696] - bl AdvanceFrame - cmp sb, #3 - bne _02387FEC - cmp r4, #0 - beq _0238800C - bl HideTileGrid -#ifndef JAPAN - ldr r0, [sp, #8] - cmp r0, #0 - beq _0238800C -#endif - bl GetLeader - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - b _0238800C -_02387FEC: - bl HideTileGrid -#ifndef JAPAN - ldr r0, [sp, #8] - cmp r0, #0 - beq _0238800C -#endif - bl GetLeader - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster -_0238800C: - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #4 - mov r1, #0x3e - bl ov29_022EA370 - cmp r4, #0 - beq _02388038 - bl ov31_02386F2C - mov r0, #0 - b _02388078 -_02388038: - ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 - add r1, sp, #0x21c + OV31_023877EC_OFFSET - ldr r0, [r0] - cmp sl, #0 - ldr r0, [r0, #0x760] - ldr r4, [r1, r0, lsl #5] - strne r4, [sl] - bl ov31_02386F2C - cmp r4, #0 - movlt r0, #0 - blt _02388078 - ldr r0, _02388088 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28 + OV31_023877EC_OFFSET_3] -_02388078: - add sp, sp, #0x2a4 + OV31_023877EC_OFFSET - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define OV31_023877EC_DATA_OFFSET -0x1C5 -#else -#define OV31_023877EC_DATA_OFFSET 0 -#endif -_02388080: .word 0x000007AC -_02388084: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 -_02388088: .word DUNGEON_PTR -_0238808C: .word 0x000003E7 -_02388090: .word ov31_0238A044 -_02388094: .word ov31_0238A04C -_02388098: .word ov31_0238A054 -_0238809C: .word ov31_0238A05C -_023880A0: .word ov31_0238A064 -_023880A4: .word ov31_0238A06C -_023880A8: .word ov31_0238A074 -_023880AC: .word ov31_0238A07C -_023880B0: .word ov31_0238A084 -_023880B4: .word 0x00000A3A + OV31_023877EC_DATA_OFFSET -_023880B8: .word DUNGEON_WINDOW_PARAMS_21 -_023880BC: .word ov31_0238778C -_023880C0: .word DUNGEON_WINDOW_PARAMS_24 -_023880C4: .word 0x00000A36 + OV31_023877EC_DATA_OFFSET -_023880C8: .word DUNGEON_WINDOW_PARAMS_20 -_023880CC: .word ov31_023877C4 -#ifdef JAPAN -_023880D0: .word 0x00000872 -#else -_023880D0: .word 0x00000A3D -#endif -_023880D4: .word OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 - arm_func_end ov31_023877EC - - arm_func_start ov31_023880D8 -ov31_023880D8: ; 0x023880D8 - mov r2, #0 - strb r2, [r0, #0x592] - strb r2, [r0, #0x612] - sub r1, r2, #2 - strb r1, [r0, #0x695] - strb r1, [r0, #0x694] - strb r1, [r0, #0x696] - strb r1, [r0, #0x697] - strb r1, [r0, #0x698] - str r2, [r0, #0x7a4] - str r2, [r0, #0x7a8] - str r2, [r0, #0x76c] - str r2, [r0, #0x770] - str r2, [r0, #0x760] - bx lr - arm_func_end ov31_023880D8 - - arm_func_start ov31_02388114 -ov31_02388114: ; 0x02388114 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - ldr r0, _02388154 ; =0x000006D4 - mov r4, r2 - mov r1, #8 - mov r5, r3 - bl MemAlloc - mov r1, r7 - mov r2, r6 - mov r3, r4 - mov r4, r0 - str r5, [sp] - bl ov31_02388158 - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02388154: .word 0x000006D4 - arm_func_end ov31_02388114 - - arm_func_start ov31_02388158 -ov31_02388158: ; 0x02388158 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xdc - mov sl, r0 - mvn r0, #1 - strb r0, [sl] - ldr r4, [sp, #0x100] - str r3, [sl, #0x6c4] - str r4, [sl, #0x6c8] - mov r0, #0 - str r0, [sl, #0x688] - str r0, [sl, #0x68c] - str r0, [sl, #0x67c] - mov sb, r1 - str r2, [sl, #0x6c0] - sub r0, r0, #1 - mov r7, sb - str r0, [sl, #0x6b8] - add r6, sl, #4 - mov r4, #8 -_023881A4: - ldmia r7!, {r0, r1, r2, r3} - stmia r6!, {r0, r1, r2, r3} - subs r4, r4, #1 - bne _023881A4 - ldmia r7, {r0, r1, r2} - stmia r6, {r0, r1, r2} - add r0, sp, #0xc - mov r1, #0x80 - bl MemZero - mov r4, #0 - add r0, sb, #0x14 - mov r7, r4 - str r0, [sp, #8] - add fp, sl, #0xc0 - b _023883F4 -_023881E0: - ldr r0, [sb] - cmp r0, #1 - bne _023882A0 - add r0, sb, r7, lsl #5 - ldr r1, [r0, #0x20] - cmp r1, #0 - beq _023883F0 - moveq r0, #0 - beq _02388218 - ldr r0, [r1] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_02388218: - cmp r0, #0 - beq _023883F0 - add r0, sb, r7 - ldrb r0, [r0, #0x84] - ldr r6, [r1, #0xb4] - add r1, sb, r7, lsl #5 - cmp r0, #0 - movne r0, #0x57 - moveq r0, #0x44 - and r2, r0, #0xff - ldrb r0, [r1, #0x14] - cmp r0, #0 - add r0, sp, #0xc - beq _02388264 - ldrb r2, [r1, #0x1e] - ldr r1, [sp, #8] - add r1, r1, r7, lsl #5 - bl sub_02054F44 - b _0238826C -_02388264: - mov r1, r6 - bl ov29_023002F0 -_0238826C: - ldrsh r1, [r6, #0x12] - ldrsh r0, [r6, #0x16] - ldrsh r5, [r6, #0x10] - add r8, r1, r0 - ldr r0, _0238841C ; =0x000003E7 - cmp r8, r0 - movgt r8, r0 - ldrsh r0, [r6, #0xc] - bl GetActiveTeamMember - ldrsh r0, [r0, #8] - bl ov29_022F9C34 - str r0, [sp, #4] - b _023882E8 -_023882A0: - cmp r0, #0 - bne _023882E8 - add r0, sb, r7, lsl #5 - ldr r6, [r0, #0x20] - ldrb r0, [r6] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _023883F0 - ldrsh r5, [r6, #0xe] - ldrsh r8, [r6, #0x10] - ldrsh r0, [r6, #8] - bl sub_02056228 - str r0, [sp, #4] - mov r1, r6 - add r0, sp, #0xc - bl sub_020585B4 -_023882E8: - add r0, sp, #0xc - str r0, [sp, #0xc4] - ldr r0, [sp, #4] - cmp r0, #0 - mov r0, r8, asr #1 - add r0, r8, r0, lsr #30 - beq _02388360 - cmp r5, r0, asr #2 - mov r0, r0, asr #2 - bgt _02388320 - ldr r1, _02388420 ; =ov31_0238A0A8 - add r0, sp, #0x4c - bl strcpy - b _023883B8 -_02388320: - cmp r5, r0, lsl #1 - bgt _02388338 - ldr r1, _02388424 ; =ov31_0238A0B0 - add r0, sp, #0x4c - bl strcpy - b _023883B8 -_02388338: - add r0, r0, r0, lsl #1 - cmp r5, r0 - add r0, sp, #0x4c - bgt _02388354 - ldr r1, _02388428 ; =ov31_0238A0B8 - bl strcpy - b _023883B8 -_02388354: - ldr r1, _0238842C ; =ov31_0238A0C0 - bl strcpy - b _023883B8 -_02388360: - cmp r5, r0, asr #2 - mov r0, r0, asr #2 - bgt _0238837C - ldr r1, _02388430 ; =ov31_0238A0C8 - add r0, sp, #0x4c - bl strcpy - b _023883B8 -_0238837C: - cmp r5, r0, lsl #1 - bgt _02388394 - ldr r1, _02388434 ; =ov31_0238A0D0 - add r0, sp, #0x4c - bl strcpy - b _023883B8 -_02388394: - add r0, r0, r0, lsl #1 - cmp r5, r0 - add r0, sp, #0x4c - bgt _023883B0 - ldr r1, _02388438 ; =ov31_0238A0D8 - bl strcpy - b _023883B8 -_023883B0: - ldr r1, _0238843C ; =ov31_0238A0E0 - bl strcpy -_023883B8: - add r0, sp, #0x4c - str r0, [sp, #0xc8] - add r0, sp, #0x8c - str r0, [sp] - ldr r2, _02388440 ; =ov31_0238A0E8 - add r0, fp, r4, lsl #8 - mov r1, #0x100 - mov r3, #0 - bl PreprocessString - add r1, fp, r4, lsl #8 - add r0, sl, r4, lsl #3 - str r1, [r0, #0x90] - add r4, r4, #1 - str r4, [r0, #0x94] -_023883F0: - add r7, r7, #1 -_023883F4: - ldr r0, [sb, #0x88] - cmp r7, r0 - blt _023881E0 - mov r0, #0 - add r1, sl, r4, lsl #3 - str r0, [r1, #0x90] - sub r0, r0, #1 - str r0, [r1, #0x94] - add sp, sp, #0xdc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0238841C: .word 0x000003E7 -_02388420: .word ov31_0238A0A8 -_02388424: .word ov31_0238A0B0 -_02388428: .word ov31_0238A0B8 -_0238842C: .word ov31_0238A0C0 -_02388430: .word ov31_0238A0C8 -_02388434: .word ov31_0238A0D0 -_02388438: .word ov31_0238A0D8 -_0238843C: .word ov31_0238A0E0 -_02388440: .word ov31_0238A0E8 - arm_func_end ov31_02388158 - - arm_func_start ov31_02388444 -ov31_02388444: ; 0x02388444 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x98 - mov r6, r0 - mov r5, r1 - bl ov29_0234E988 - mov r0, #0xb - bl Arm9LoadUnkFieldNa0x2029EC8 - str r0, [r6, #0x67c] - ldr r1, [r6, #0x8c] - mov r0, #0 - str r1, [r6, #0x680] - ldr r1, [r6, #0x8c] - str r1, [r6, #0x684] - str r0, [r6, #0x688] - str r0, [r6, #0x68c] - str r0, [r6, #0x670] - str r0, [r6, #0x674] - bl ov29_022EA62C - ldr r0, _02388528 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r4, [r0, #0x75b] - cmp r4, #0 - ldrne r1, _0238852C ; =0x00000A3A - movne r0, #0x10 - strne r0, [sp, #0xc] - strneh r1, [sp, #8] - mov r0, #0xb - bl Arm9LoadUnkFieldNa0x2029EC8 - str r0, [r6, #0x67c] - add r1, r0, #1 - add r0, r6, #0x88 - str r1, [sp] - str r0, [sp, #0x60] - ldr r0, [r6, #0x6c0] - add r2, sp, #0 - tst r0, #2 - beq _023884FC - cmp r4, #0 - movne r3, #0x800 - ldr r1, _02388530 ; =0x00401233 - moveq r3, #0 - orr r1, r3, r1 - mov r0, r5 - add r3, r6, #0x90 - bl CreateParentMenuWrapper - b _0238851C -_023884FC: - cmp r4, #0 - movne r0, #0x800 - moveq r0, #0 - orr r1, r0, #0x33 - mov r0, r5 - orr r1, r1, #0x1200 - add r3, r6, #0x90 - bl CreateParentMenu -_0238851C: - strb r0, [r6] - add sp, sp, #0x98 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02388528: .word DUNGEON_PTR -#ifdef JAPAN -_0238852C: .word 0x00000875 -#else -_0238852C: .word 0x00000A3A -#endif -_02388530: .word 0x00401233 - arm_func_end ov31_02388444 - - arm_func_start ov31_02388534 -ov31_02388534: ; 0x02388534 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - mov r0, #0 - str r0, [sl, #0x6cc] - add r4, sl, #0x2cc - str r0, [r4, #0x404] - add sb, sl, #4 - mov r5, #2 - mov r6, #0xb - mov fp, #0x1b - mov r8, r0 - add r7, sp, #0 -_02388564: - mov r0, r8 - mov r1, r7 - bl GetPressedButtons - ldrsb r0, [sl] - bl sub_0202AB80 - str r0, [sl, #0x67c] - ldr r1, [sl, #0x6b8] - cmp r1, r0 - beq _023885DC - str r0, [sl, #0x6b8] - ldr r1, [sb] - cmp r1, #1 - bne _023885B8 - add r0, sb, r0, lsl #5 - ldr r0, [r0, #0x20] - cmp r0, #0 - ldrne r1, [sl, #0x6c4] - cmpne r1, #0 - beq _023885DC - blx r1 - b _023885DC -_023885B8: - cmp r1, #0 - bne _023885DC - add r0, sb, r0, lsl #5 - ldr r0, [r0, #0x20] - cmp r0, #0 - ldrne r1, [sl, #0x6c4] - cmpne r1, #0 - beq _023885DC - blx r1 -_023885DC: - ldr r1, [sl, #0x67c] - mov r0, r6 - and r1, r1, #0xff - bl Arm9StoreUnkFieldNa0x2029ED8 - ldr r0, [sl, #0x6c0] - tst r0, #4 - beq _02388644 - ldrh r0, [sp] - tst r0, #8 - beq _02388644 - ldr r0, [sl, #0x67c] - add r0, sb, r0 - ldrb r0, [r0, #0x84] - cmp r0, #0 - bne _02388638 - add r0, sl, #0x5c0 - mov r1, #0 - bl PlayWindowInputSound - mov r0, #2 - str r0, [r4, #0x400] - ldr r0, [sl, #0x6b8] - str r0, [r4, #0x404] - b _023886BC -_02388638: - mov r1, r5 - add r0, sl, #0x5c0 - bl PlayWindowInputSound -_02388644: - ldrsb r0, [sl] - bl IsParentMenuActive - cmp r0, #0 - bne _023886A8 - ldrsb r0, [sl] - bl sub_0202ABB0 - subs r0, r0, #1 - bmi _0238869C - ldrsb r0, [sl] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [sl, #0x67c] - add r0, sb, r0 - ldrb r0, [r0, #0x84] - cmp r0, #0 - moveq r0, #3 - streq r0, [r4, #0x400] - ldreq r0, [sl, #0x67c] - streq r0, [r4, #0x404] - movne r0, #1 - strne r0, [r4, #0x400] - b _023886BC -_0238869C: - mov r0, #1 - str r0, [r4, #0x400] - b _023886BC -_023886A8: - mov r0, sl - bl ov31_02388744 - mov r0, fp - bl AdvanceFrame - b _02388564 -_023886BC: - mov r0, sl - bl ov31_02388744 - mov r0, #0x1b - bl AdvanceFrame - bl HideTileGrid - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end ov31_02388534 - - arm_func_start ov31_023886D4 -ov31_023886D4: ; 0x023886D4 - ldr r0, [r0, #0x6cc] - bx lr - arm_func_end ov31_023886D4 - - arm_func_start ov31_023886DC -ov31_023886DC: ; 0x023886DC - ldr r1, [r0, #0x6cc] - sub r1, r1, #2 - cmp r1, #1 - ldrls r0, [r0, #0x6d0] - mvnhi r0, #0 - bx lr - arm_func_end ov31_023886DC - - arm_func_start ov31_023886F4 -ov31_023886F4: ; 0x023886F4 - ldr ip, _02388700 ; =ResumeParentMenu - ldrsb r0, [r0] - bx ip - .align 2, 0 -_02388700: .word ResumeParentMenu - arm_func_end ov31_023886F4 - - arm_func_start ov31_02388704 -ov31_02388704: ; 0x02388704 - ldr ip, _02388710 ; =GetWindowRectangle - ldrsb r0, [r0] - bx ip - .align 2, 0 -_02388710: .word GetWindowRectangle - arm_func_end ov31_02388704 - - arm_func_start ov31_02388714 -ov31_02388714: ; 0x02388714 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r4, [r5] - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, r4 - bl ov29_0234E988 - mov r0, r4 - bl MemFree - mov r0, #0 - str r0, [r5] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov31_02388714 - - arm_func_start ov31_02388744 -ov31_02388744: ; 0x02388744 - stmdb sp!, {r4, lr} - ldr r1, [r0, #0x6c0] - tst r1, #8 - ldrne r1, [r0, #0x67c] - addne r0, r0, r1, lsl #5 - ldrne r4, [r0, #0x24] - cmpne r4, #0 - ldmeqia sp!, {r4, pc} - mov r0, r4 - mov r1, #0 - mov r2, #1 - bl TryPointCameraToMonster - mov r2, #1 - mov r3, r2 - add r0, r4, #4 - mov r1, #0 - bl DrawTileGrid - ldmia sp!, {r4, pc} - arm_func_end ov31_02388744 - - arm_func_start RestMenu -RestMenu: ; 0x0238878C - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x9c - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r0, [r0] - cmp r0, #0 - bne _023887CC - mov r0, #0x10 - mov r1, #8 - bl MemAlloc - ldr r1, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r2, #0 - str r0, [r1] - str r2, [r0] - ldr r0, [r1] - sub r1, r2, #2 - strb r1, [r0, #4] -_023887CC: - mov r3, #0 - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r2, r3 -_023887D8: - ldr r1, [r0] - add r1, r1, r3 - add r3, r3, #1 - strb r2, [r1, #0xc] - cmp r3, #2 - blt _023887D8 - bl ov29_022E08F4 - cmp r0, #0 - ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - moveq r1, #3 - ldreq r0, [r0] - ldr ip, _023889BC ; =0x000008C2 - streqb r1, [r0, #0xc] - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r5, #0x10 - ldr r1, [r0] - ldr r0, _023889C0 ; =DUNGEON_WINDOW_PARAMS_25 - add r4, r1, #0xc - ldr r1, _023889C4 ; =0x00001A13 - ldr r3, _023889C8 ; =DUNGEON_SUBMENU_ITEMS_5 - add r2, sp, #4 - strh ip, [sp, #0xc] - str r5, [sp, #0x10] - str r4, [sp, #0x64] - bl CreateParentMenuFromStringIds - ldr r4, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r5, #0x62 - ldr r1, [r4] - strb r0, [r1, #4] -_0238884C: - mov r0, r5 - bl AdvanceFrame - ldr r0, [r4] - ldrsb r0, [r0, #4] - bl IsParentMenuActive - cmp r0, #0 - bne _0238884C - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r0, [r0] - ldrsb r0, [r0, #4] - bl sub_0202ABB0 - ldr r1, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r1, [r1] - str r0, [r1, #8] - mov r0, #0x62 - bl AdvanceFrame - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r0, [r0] - ldrsb r0, [r0, #4] - bl CloseParentMenu - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r1, [r0] - ldr r0, [r1, #8] - cmp r0, #1 - beq _023888BC - cmp r0, #2 - beq _02388908 - b _0238897C -_023888BC: - mov r2, #1 - ldr r1, _023889CC ; =0x000008C5 - mov r3, r2 - mov r0, #0 - str r2, [sp] - bl YesNoMenu - cmp r0, #1 - movne r0, #1 - bne _023888F0 - bl GetLeaderAction - mov r1, #0x2b - bl SetMonsterActionFields - mov r0, #0 -_023888F0: - cmp r0, #0 - ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mvneq r1, #0 - ldreq r0, [r0] - streq r1, [r0, #8] - b _02388984 -_02388908: - mov r2, #1 - ldr r1, _023889D0 ; =0x000008C6 - mov r3, r2 - mov r0, #0 - str r2, [sp] - bl YesNoMenu - cmp r0, #1 - movne r2, #1 - bne _02388964 - bl GetLeaderAction - mov r1, #0x2e - bl SetMonsterActionFields - bl GetLeader - mov r2, r0 - mov r1, #0 - ldr r0, _023889D4 ; =0x0000025A - mov r3, r1 - bl ov29_022ECDE4 - ldr r0, _023889D8 ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - mov r2, #0 - strb r1, [r0, #0x758] -_02388964: - cmp r2, #0 - ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mvneq r1, #0 - ldreq r0, [r0] - streq r1, [r0, #8] - b _02388984 -_0238897C: - mvn r0, #0 - str r0, [r1, #8] -_02388984: - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - ldr r0, [r0] - ldr r1, [r0, #8] - cmp r1, #0 - bge _023887CC - cmp r0, #0 - beq _023889B0 - bl MemFree - ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 - mov r1, #0 - str r1, [r0] -_023889B0: - add sp, sp, #0x9c - ldmia sp!, {r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -#define REST_MENU_OFFSET 0x1458 -#else -#define REST_MENU_OFFSET 0 -#endif -_023889B8: .word OVERLAY31_UNKNOWN_POINTER__NA_238A284 -_023889BC: .word 0x000008C2 + REST_MENU_OFFSET -_023889C0: .word DUNGEON_WINDOW_PARAMS_25 -_023889C4: .word 0x00001A13 -_023889C8: .word DUNGEON_SUBMENU_ITEMS_5 -_023889CC: .word 0x000008C5 + REST_MENU_OFFSET -_023889D0: .word 0x000008C6 + REST_MENU_OFFSET -_023889D4: .word 0x0000025A -_023889D8: .word DUNGEON_PTR - arm_func_end RestMenu - - arm_func_start ov31_023889DC -ov31_023889DC: ; 0x023889DC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x18 - mov r6, r0 - ldr r4, [r6, #0xb4] - add r3, sp, #0xc - add r0, r4, #0x9c - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - mov r0, #8 - mov r1, #0x62 - bl ov29_022EA370 - mov r0, r6 - mov r1, #1 - bl IsBlinded - mov r3, r0 - ldrsh r0, [r4, #2] - ldrsh r2, [r4, #0xe] - add r1, r4, #0x90 - bl PrintIqSkillsMenu - mov r5, #0x62 -_02388A2C: - bl sub_02041B7C - movs r7, r0 - bne _02388A44 - mov r0, r5 - bl AdvanceFrame - b _02388A2C -_02388A44: - bl sub_020420F4 - mov r0, r6 - bl ov29_023021F0 - ldr r0, [r6, #0xb4] - add r3, sp, #0 - add r0, r0, #0x9c - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - add r0, sp, #0xc - mov r1, #0x38 - bl IqSkillFlagTest - mov r5, r0 - add r0, sp, #0 - mov r1, #0x38 - bl IqSkillFlagTest - cmp r5, #0 - bne _02388AA8 - cmp r0, #0 - beq _02388AF8 - ldr r0, _02388BFC ; =_020A1870 - ldrsh r1, [r4, #0x16] - ldrsh r0, [r0] - add r0, r1, r0 - strh r0, [r4, #0x16] - b _02388AF8 -_02388AA8: - cmp r0, #0 - bne _02388AF8 - ldr r0, _02388BFC ; =_020A1870 - ldrsh r1, [r4, #0x16] - ldrsh r0, [r0] - ldr r2, _02388C00 ; =0x000003E7 - sub r0, r1, r0 - strh r0, [r4, #0x16] - ldrsh r1, [r4, #0x12] - ldrsh r0, [r4, #0x16] - add r1, r1, r0 - cmp r1, r2 - ldrsh r0, [r4, #0x10] - movle r2, r1 - cmp r0, r2 - ble _02388AF8 - ldr r0, _02388C00 ; =0x000003E7 - cmp r1, r0 - movgt r1, r0 - strh r1, [r4, #0x10] -_02388AF8: -#ifdef JAPAN - mov r0, #0x41 - bl TeamMemberHasEnabledIqSkill - ldr r2, _02389E78 ; =DUNGEON_PTR - mov r1, #0x39 - ldr r2, [r2] - add r2, r2, #0x1a000 - strb r0, [r2, #0x19d] - add r0, sp, #0xc -#else - bl UpdateMapSurveyorFlag - add r0, sp, #0xc - mov r1, #0x39 -#endif - bl IqSkillFlagTest - mov r5, r0 - add r0, sp, #0 - mov r1, #0x39 - bl IqSkillFlagTest - cmp r5, #0 - bne _02388B74 - cmp r0, #0 - beq _02388BE8 - mov r5, #0 -#ifdef JAPAN - add r3, r4, #0x120 -#else - add r3, r4, #0x124 -#endif - mov r1, r5 - mov r2, #1 -_02388B38: - ldrb r0, [r3, r5, lsl #3] - add r4, r3, r5, lsl #3 - tst r0, #1 - movne r0, r2 - moveq r0, r1 - tst r0, #0xff - ldrneh r0, [r4, #2] - orrne r0, r0, #0x100 - strneh r0, [r4, #2] - add r0, r5, #1 - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - cmp r5, #4 - blt _02388B38 - b _02388BE8 -_02388B74: - cmp r0, #0 - bne _02388BE8 - mov sb, #0 -#ifdef JAPAN - add r6, r4, #0x120 -#else - add r6, r4, #0x124 -#endif - mov r4, sb - mov r5, #1 -_02388B8C: - ldrb r0, [r6, sb, lsl #3] - add r8, r6, sb, lsl #3 - tst r0, #1 - movne r0, r5 - moveq r0, r4 - tst r0, #0xff - beq _02388BD4 - ldrh r1, [r8, #2] - mov r0, r8 - bic r1, r1, #0x100 - strh r1, [r8, #2] - bl GetMaxPp - ldrb r1, [r8, #6] - cmp r1, r0 - ble _02388BD4 - mov r0, r8 - bl GetMaxPp - strb r0, [r8, #6] -_02388BD4: - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov sb, r0, asr #0x10 - cmp sb, #4 - blt _02388B8C -_02388BE8: - cmp r7, #0 - movne r0, #1 - moveq r0, #0 - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02388BFC: .word _020A1870 -_02388C00: .word 0x000003E7 -#ifdef JAPAN -_02389E78: .word DUNGEON_PTR -#endif - arm_func_end ov31_023889DC - - arm_func_start RecruitmentSearchMenuLoop -RecruitmentSearchMenuLoop: ; 0x02388C04 - stmdb sp!, {r3, lr} - sub sp, sp, #0xa0 - ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r1, [r0] - ldr r0, [r1, #0xd94] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _02388D24 -_02388C24: ; jump table - b _02388C34 ; case 0 - b _02388CD0 ; case 1 - b _02388CF8 ; case 2 - b _02388D18 ; case 3 -_02388C34: - ldr r0, _02388D34 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x748] - bl IsRecruitingAllowed - cmp r0, #0 - ldreq r2, _02388D38 ; =0x00000B44 - ldreq r1, _02388D3C ; =ov29_0238280C - moveq r0, #4 - streqh r2, [r1] - beq _02388D28 - ldr r0, _02388D34 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75d] - cmp r0, #0 - ldrne r2, _02388D40 ; =0x00000B45 - ldrne r1, _02388D3C ; =ov29_0238280C - movne r0, #4 - strneh r2, [r1] - bne _02388D28 - ldr r1, _02388D44 ; =0x00000B46 - mov r0, #0x10 - strh r1, [sp, #0x10] - str r0, [sp, #0x14] - mov ip, #0 - str ip, [sp] - ldr r0, _02388D48 ; =DUNGEON_WINDOW_PARAMS_26 - ldr r1, _02388D4C ; =0x00001813 - ldr r3, _02388D50 ; =ov31_02388D54 - add r2, sp, #8 - str ip, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r2, [r1] - strb r0, [r2] - ldr r1, [r1] - ldr r0, [r1, #0xd94] - add r0, r0, #1 - str r0, [r1, #0xd94] - b _02388D24 -_02388CD0: - ldrsb r0, [r1] - bl IsAdvancedTextBoxActive - cmp r0, #0 - bne _02388D24 - ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r1, [r0] - ldr r0, [r1, #0xd94] - add r0, r0, #1 - str r0, [r1, #0xd94] - b _02388D24 -_02388CF8: - ldrsb r0, [r1] - bl CloseAdvancedTextBox - ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r1, [r0] - ldr r0, [r1, #0xd94] - add r0, r0, #1 - str r0, [r1, #0xd94] - b _02388D24 -_02388D18: - bl ov29_0234F77C - mov r0, #4 - b _02388D28 -_02388D24: - mov r0, #1 -_02388D28: - add sp, sp, #0xa0 - ldmia sp!, {r3, pc} - .align 2, 0 -#ifdef JAPAN -#define RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -0x4FE -#else -#define RECRUITMENT_SEARCH_MENU_LOOP_OFFSET 0 -#endif -_02388D30: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 -_02388D34: .word DUNGEON_PTR -_02388D38: .word 0x00000B44 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -_02388D3C: .word ov29_0238280C -_02388D40: .word 0x00000B45 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -_02388D44: .word 0x00000B46 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -_02388D48: .word DUNGEON_WINDOW_PARAMS_26 -_02388D4C: .word 0x00001813 -_02388D50: .word ov31_02388D54 - arm_func_end RecruitmentSearchMenuLoop - - arm_func_start ov31_02388D54 -ov31_02388D54: ; 0x02388D54 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xd4 - ldr r4, _02388E54 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - mov sl, r0 - ldr r0, [r4] - mov r8, #4 - ldr r0, [r0, #0xd90] - mov sb, #0x14 - cmp r0, #0 - beq _02388E30 - mov r7, #0 - add r6, sp, #0x44 - add fp, sp, #4 - add r5, sp, #0x84 - b _02388E1C -_02388D90: - add r0, r1, r7, lsl #1 - ldrsh r1, [r0, #4] - mov r0, r6 - bl GetSpeciesString - ldr r0, [r4] - add r0, r0, r7, lsl #1 - ldrsh r0, [r0, #4] - bl GetDexNumber - ldr r2, [r4] - str r0, [sp, #0xa8] - add r2, r2, r7 - ldrb r2, [r2, #0x90a] - ldr r1, _02388E58 ; =ov31_0238A154 - mov r0, fp - mov r3, r6 - bl ov31_02388E60 - mov r0, r6 - mov r1, #0x40 - mov r2, fp - mov r3, #0 - str r5, [sp] - bl PreprocessString - mov r0, sl - mov r1, r8 - mov r2, sb - mov r3, r6 - bl DrawTextInWindow - add sb, sb, #0xd - cmp sb, #0x7c - blt _02388E18 - cmp r8, #4 - bgt _02388E4C - mov r8, #0x74 - mov sb, #0x14 -_02388E18: - add r7, r7, #1 -_02388E1C: - ldr r1, [r4] - ldr r0, [r1, #0xd90] - cmp r7, r0 - blt _02388D90 - b _02388E4C -_02388E30: - ldr r0, _02388E5C ; =0x00000B47 - bl StringFromId - mov r3, r0 - mov r0, sl - mov r1, r8 - mov r2, sb - bl DrawTextInWindow -_02388E4C: - add sp, sp, #0xd4 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02388E54: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 -_02388E58: .word ov31_0238A154 -#ifdef JAPAN -_02388E5C: .word 0x00000649 -#else -_02388E5C: .word 0x00000B47 -#endif - arm_func_end ov31_02388D54 - - arm_func_start ov31_02388E60 -ov31_02388E60: ; 0x02388E60 - 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 ov31_02388E60 - - arm_func_start ov31_02388E88 -ov31_02388E88: ; 0x02388E88 -#ifdef JAPAN -#define OV31_02388E88_OFFSET -0x50 -#else -#define OV31_02388E88_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x84 - sub sp, sp, #0x400 - ldr r0, _02389164 ; =OVERLAY31_UNKNOWN_STRUCT__NA_238A144 - bl sub_020348E4 - cmp r0, #0 - beq _02389158 - ldr r0, _02389168 ; =0x00000D98 - mov r1, #8 - bl MemAlloc - ldr r1, _0238916C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - mov r3, #0 - str r0, [r1] - add r5, r0, #4 - ldr r0, _02389170 ; =0x00000483 - mov r4, r3 - add r1, sp, #0 -_02388ECC: - add r2, r5, r3 - strb r4, [r1, r3] - add r3, r3, #1 - strb r4, [r2, #0x906] - cmp r3, r0 - blt _02388ECC - mov sb, #1 - mov r8, #2 - add r7, sp, #0 - ldr r6, _02389174 ; =DUNGEON_PTR - b _02388F3C -_02388EF8: - ldr r1, [r6] - mov sl, sb - add r1, r1, r4, lsl #3 - add r1, r1, #0x3900 - ldrsh r2, [r1, #0x76 + OV31_02388E88_OFFSET] - ldrsh r1, [r1, #0x78 + OV31_02388E88_OFFSET] - cmp r2, #0 - cmpeq r1, #0 - beq _02388F38 - add r0, r0, #0x174 + OV31_02388E88_OFFSET - add r0, r0, #0x3800 - add r0, r0, r4, lsl #3 - cmp r2, #0 - moveq sl, r8 - bl GetMonsterIdFromSpawnEntry - strb sl, [r7, r0] -_02388F38: - add r4, r4, #1 -_02388F3C: - ldr r0, [r6] - add r1, r0, #0x3000 -#ifdef JAPAN - ldr r1, [r1, #0xd7c] -#else - ldr r1, [r1, #0xe20] -#endif - cmp r4, r1 - blt _02388EF8 - ldrb r0, [r0, #0x790] - cmp r0, #0 - beq _02388F6C - bl GetKecleonIdToSpawnByFloor - add r1, sp, #0 - mov r2, #1 - strb r2, [r1, r0] -_02388F6C: - ldr r0, _02389174 ; =DUNGEON_PTR - mov sl, #0 - ldr r0, [r0] -#ifdef JAPAN - mov r8, #1 -#else - mov sb, #1 -#endif - add r0, r0, #0x700 - ldrsh r2, [r0, #0xa8] - cmp r2, #0 - addne r0, sp, #0 - movne r1, #1 - strneb r1, [r0, r2] -_02388F94: -#ifdef JAPAN - mov r0, r8, lsl #0x10 - add r1, sp, #0 - ldrb r1, [r1, r0, asr #16] - mov r7, r0, asr #0x10 -#else - mov r0, sb, lsl #0x10 - add r1, sp, #0 - ldrb r1, [r1, r0, asr #16] - mov r8, r0, asr #0x10 -#endif - mov r6, #0x44 - cmp r1, #0 - mov r4, #0 - beq _023890B4 -#ifdef JAPAN - mov r0, r7 -#else - mov r0, r8 -#endif - bl SpecificRecruitCheck - cmp r0, #0 - beq _023890B4 -#ifdef JAPAN - mov r0, r7 -#else - mov r0, r8 -#endif - bl CanMonsterSpawn - cmp r0, #0 - beq _023890B4 -#ifdef JAPAN - mov r0, r7 -#else - mov r0, r8 -#endif - bl GetRecruitRate2 - ldr r1, _02389178 ; =0xFFFFFC19 - cmp r0, r1 - beq _023890B4 -#ifdef JAPAN - mov sb, r4 - ldr fp, _0238A43C ; =0x0000022B - b _0238A2A8 -_0238A26C: - mov r0, sb, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetTeamMember - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _0238A2A4 - ldrsh r1, [r0, #4] - mov r0, r7 - bl BaseFormsEqual - cmp r0, #0 - bne _0238A2B0 -_0238A2A4: - add sb, sb, #1 -_0238A2A8: - cmp sb, fp - blt _0238A26C -_0238A2B0: - ldr r0, _0238A43C ; =0x0000022B - cmp sb, r0 - movne r4, #1 - cmp r4, #0 - bne _0238906C - mov sb, #0 - b _0238905C -_0238900C: - mov r0, sb, lsl #0x10 -#else - mov r0, r8 - mov r1, #1 - bl IsMonsterOnTeam - cmp r0, #0 - movne r4, #1 - cmp r4, #0 - bne _0238906C - mov r7, #0 - b _0238905C -_0238900C: - mov r0, r7, lsl #0x10 -#endif - mov r0, r0, asr #0x10 - bl GetActiveTeamMember - mov fp, r0 - ldrb r0, [fp] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02389058 - ldrsh r0, [fp, #8] - bl CheckTeamMemberIdxVeneer - cmp r0, #0 - bne _02389058 - ldrsh r1, [fp, #0xc] -#ifdef JAPAN - mov r0, r7 - bl BaseFormsEqual - cmp r0, #0 - bne _02389064 -_02389058: - add sb, sb, #1 -_0238905C: - cmp sb, #4 - blt _0238900C -_02389064: - cmp sb, #4 - movne r4, #1 -_0238906C: - add sb, r5, sl - ldrb r0, [sb, #0x906] -#else - mov r0, r8 - bl BaseFormsEqual - cmp r0, #0 - bne _02389064 -_02389058: - add r7, r7, #1 -_0238905C: - cmp r7, #4 - blt _0238900C -_02389064: - cmp r7, #4 - movne r4, #1 -_0238906C: - add r7, r5, sl - ldrb r0, [r7, #0x906] -#endif - cmp r4, #0 - movne r6, #0x46 - cmp r6, r0 - bne _023890A4 -#ifdef JAPAN - mov r0, r7 -#else - mov r0, r8 -#endif - bl GetDexNumber - mov r1, sl, lsl #1 - mov r4, r0 - ldrsh r0, [r5, r1] - bl GetDexNumber - cmp r4, r0 - beq _023890B4 -_023890A4: - mov r0, sl, lsl #1 -#ifdef JAPAN - strh r7, [r5, r0] - strb r6, [sb, #0x906] -#else - strh r8, [r5, r0] - strb r6, [r7, #0x906] -#endif - add sl, sl, #1 -_023890B4: - ldr r0, _02389170 ; =0x00000483 -#ifdef JAPAN - add r8, r8, #1 - cmp r8, r0 -#else - add sb, sb, #1 - cmp sb, r0 -#endif - blt _02388F94 - add r0, r5, #6 - str sl, [r5, #0xd8c] - add r6, r0, #0x900 - mov r8, #0 - b _02389140 -_023890D8: - add r7, r8, #1 - mov fp, r8, lsl #1 - b _02389134 -_023890E4: - mov r1, r7, lsl #1 - ldrsh r0, [r5, r1] - ldrsh sb, [r5, r1] - bl GetDexNumber - mov r4, r0 - ldrsh r0, [r5, fp] - bl GetDexNumber - ldrsh r2, [r5, fp] - add r1, sb, r4, lsl #11 - add r0, r2, r0, lsl #11 - cmp r1, r0 - bge _02389130 - ldrb r1, [r6, r7] - mov r0, r7, lsl #1 - strh r2, [r5, r0] - ldrb r0, [r6, r8] - strb r0, [r6, r7] - strh sb, [r5, fp] - strb r1, [r6, r8] -_02389130: - add r7, r7, #1 -_02389134: - cmp r7, sl - blt _023890E4 - add r8, r8, #1 -_02389140: - cmp r8, sl - blt _023890D8 - ldr r0, _0238916C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0xd94] -_02389158: - add sp, sp, #0x84 - add sp, sp, #0x400 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02389164: .word OVERLAY31_UNKNOWN_STRUCT__NA_238A144 -_02389168: .word 0x00000D98 -_0238916C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 -_02389170: .word 0x00000483 -_02389174: .word DUNGEON_PTR -_02389178: .word 0xFFFFFC19 -#ifdef JAPAN -_0238A43C: .word 0x0000022B -#endif - arm_func_end ov31_02388E88 - - arm_func_start ov31_0238917C -ov31_0238917C: ; 0x0238917C - stmdb sp!, {r3, lr} - ldr r0, _023891A4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _023891A4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_023891A4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 - arm_func_end ov31_0238917C - - arm_func_start ov31_023891A8 -ov31_023891A8: ; 0x023891A8 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl sub_02030A18 - mov r4, r0 - ldr r0, _023891F8 ; =DUNGEON_SUBMENU_ITEMS_6 - mov r1, r4, lsl #3 - ldrh r1, [r0, r1] - mov r0, r5 - bl sub_02030A2C -#if defined(EUROPE) - add r0, r4, #0xb2 - add r0, r0, #0x3f00 -#elif defined(JAPAN) - add r0, r4, #0xb3 - add r0, r0, #0x4900 -#else - add r0, r4, #0xfb0 - add r0, r0, #0x3000 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r3, r0 - mov r0, r5 - mov r1, #4 - mov r2, #0x10 - bl DrawTextInWindow - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023891F8: .word DUNGEON_SUBMENU_ITEMS_6 - arm_func_end ov31_023891A8 - - arm_func_start HelpMenuLoop -HelpMenuLoop: ; 0x023891FC - stmdb sp!, {r4, lr} - sub sp, sp, #0xa0 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r2, [r0] - ldr r0, [r2, #8] - cmp r0, #6 - addls pc, pc, r0, lsl #2 - b _023893F0 -_0238921C: ; jump table - b _02389238 ; case 0 - b _023892B8 ; case 1 - b _02389278 ; case 2 - b _02389344 ; case 3 - b _023893A8 ; case 4 - b _023893DC ; case 5 - b _023893DC ; case 6 -_02389238: - ldr ip, _02389400 ; =0x00003FA7 - mov r4, #0x10 - ldr r0, _02389404 ; =DUNGEON_WINDOW_PARAMS_27 - ldr r1, _02389408 ; =0x00401813 - ldr r3, _0238940C ; =DUNGEON_SUBMENU_ITEMS_6 - add r2, sp, #8 - strh ip, [sp, #0x10] - str r4, [sp, #0x14] - bl CreateParentMenuFromStringIds - ldr r1, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r2, #1 - ldr r3, [r1] - strb r0, [r3] - ldr r0, [r1] - str r2, [r0, #8] - b _023893F0 -_02389278: - ldrsb r0, [r2] - bl sub_02028354 - cmp r0, #3 - bne _02389298 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202810C -_02389298: - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl ResumeParentMenu - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #1 - ldr r0, [r0] - str r1, [r0, #8] -_023892B8: - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl IsParentMenuActive - cmp r0, #0 - bne _023893F0 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202ABB0 - movs r4, r0 - bmi _02389320 - bl sub_02001808 - cmp r0, #0xa000 - ldrlt r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - movlt r1, #2 - ldrlt r0, [r0] - strlt r1, [r0, #8] - blt _023893F0 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #3 - ldr r2, [r0] - str r4, [r2, #4] - ldr r0, [r0] - str r1, [r0, #8] - b _02389330 -_02389320: - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #6 - ldr r0, [r0] - str r1, [r0, #8] -_02389330: - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0] - bl sub_0202812C - b _023893F0 -_02389344: - mov r0, #0x10 - str r0, [sp, #0x14] - ldr r1, [r2, #4] - ldr r0, _0238940C ; =DUNGEON_SUBMENU_ITEMS_6 - mov r1, r1, lsl #3 - ldrh r1, [r0, r1] - mov ip, #8 - ldr r0, _02389410 ; =DUNGEON_WINDOW_PARAMS_28 - strh r1, [sp, #0x10] - ldr r2, [r2, #4] - ldr r1, _02389414 ; =0x00009833 - str r2, [sp, #8] - str ip, [sp] - mov ip, #1 - ldr r3, _02389418 ; =ov31_023891A8 - add r2, sp, #8 - str ip, [sp, #4] - bl CreateAdvancedTextBox - ldr r1, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r2, #4 - ldr r3, [r1] - strb r0, [r3, #1] - ldr r0, [r1] - str r2, [r0, #8] - b _023893F0 -_023893A8: - ldrsb r0, [r2, #1] - bl IsAdvancedTextBoxActive - cmp r0, #0 - bne _023893F0 - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - ldrsb r0, [r0, #1] - bl CloseAdvancedTextBox - ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #2 - ldr r0, [r0] - str r1, [r0, #8] - b _023893F0 -_023893DC: - ldrsb r0, [r2] - bl CloseParentMenu - bl ov29_0234F77C - mov r0, #4 - b _023893F4 -_023893F0: - mov r0, #1 -_023893F4: - add sp, sp, #0xa0 - ldmia sp!, {r4, pc} - .align 2, 0 -_023893FC: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C -#if defined(EUROPE) -_02389400: .word 0x00003FA9 -#elif defined(JAPAN) -_02389400: .word 0x000049AA -#else -_02389400: .word 0x00003FA7 -#endif -_02389404: .word DUNGEON_WINDOW_PARAMS_27 -_02389408: .word 0x00401813 -_0238940C: .word DUNGEON_SUBMENU_ITEMS_6 -_02389410: .word DUNGEON_WINDOW_PARAMS_28 -_02389414: .word 0x00009833 -_02389418: .word ov31_023891A8 - arm_func_end HelpMenuLoop - - arm_func_start ov31_0238941C -ov31_0238941C: ; 0x0238941C - stmdb sp!, {r3, lr} - ldr r0, _02389458 ; =OVERLAY31_UNKNOWN_STRUCT__NA_238A190 - bl sub_020348E4 - cmp r0, #0 - ldmeqia sp!, {r3, pc} - mov r0, #0xc - mov r1, #8 - bl MemAlloc - ldr r1, _0238945C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r2, #0 - str r0, [r1] - str r2, [r0, #4] - ldr r0, [r1] - str r2, [r0, #8] - ldmia sp!, {r3, pc} - .align 2, 0 -_02389458: .word OVERLAY31_UNKNOWN_STRUCT__NA_238A190 -_0238945C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C - arm_func_end ov31_0238941C - - arm_func_start ov31_02389460 -ov31_02389460: ; 0x02389460 - stmdb sp!, {r3, lr} - ldr r0, _02389488 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _02389488 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02389488: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C - arm_func_end ov31_02389460 - - arm_func_start ov31_0238948C -ov31_0238948C: ; 0x0238948C - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x134 -#ifdef JAPAN - mov r5, r0 - mov r0, #0x410 - mov r1, #8 - bl MemAlloc - mov r1, #0x410 - mov r4, r0 - bl MemZero - mvn r1, #1 - strb r1, [r4] - add r0, r4, #0x30c - strb r1, [r4, #1] - bl ov31_02389D80 - mov r0, #0 - str r0, [r4, #0x40c] - strb r0, [r4, #0x408] - bl ov29_022EA62C - mov r0, r4 - mov r1, r5 - bl ov31_02389A78 - ldr r1, [r4, #0x40c] - mov r0, #8 - str r1, [r4, #0x3cc] - str r0, [r4, #0x3d0] - mov r1, #0 - str r1, [r4, #0x3d4] - str r1, [r4, #0x3d8] - str r1, [r4, #0x3bc] - mov r0, #0x10 - str r0, [r4, #0x3c0] - mov r0, r4 - str r1, [r4, #0x3c8] - bl ov29_0234E988 - add r0, sp, #0xac - bl InitPreprocessorArgs - ldrb r0, [r4, #0x408] - cmp r0, #0 - ldrne r1, _023898F0 ; =0x0000158C - mov r0, #0x10 - ldreq r1, _023898F4 ; =0x0000158B - str r0, [sp, #0xa8] - strh r1, [sp, #0xa4] - ldrb r0, [r4, #0x408] - cmp r0, #0 - bne _0238A820 - ldr r1, [r4, #0x404] - add r0, r4, #0x78 - ldr r1, [r1, #0xb4] - bl GetMonsterName - add r0, r4, #0x78 - str r0, [sp, #0xe4] -_0238A820: - ldr r0, _023898F8 ; =DUNGEON_WINDOW_PARAMS_31 - ldr r1, _023898FC ; =0x80401813 - add r2, sp, #0x9c - add r3, r4, #0xc4 - bl CreateParentMenu - strb r0, [r4] -_0238A838: - mov r0, #0x3d - bl AdvanceFrame - ldr r0, [r4, #0x404] - bl ov29_0234FB50 - mov r7, r0 - add r1, sp, #0 - mov r0, #0 - bl GetPressedButtons - ldrsb r0, [r4] - bl IsParentMenuActive - cmp r0, #0 - bne _0238AA84 - ldrsb r0, [r4] - bl sub_0202ABB0 - movs r6, r0 - bmi _0238AA78 - ldrsb r0, [r4] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r4, #0x3c8] - add r1, r4, r0 - add r0, r4, #0x30c - ldrb r5, [r1, #0xb8] - bl ov31_02389D80 - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 - bl ov29_022EBA70 - mov r0, #0x2f - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0xc - mov r1, #0 - bl AddDungeonSubMenuOption - cmp r7, #0 - beq _0238A8CC - mov r0, #0x2f - bl DisableDungeonSubMenuOption -_0238A8CC: - add r1, r4, #0x6c - add r0, r4, #4 - mov r2, #0 - str r1, [sp, #0x64] - bl ov31_0238513C - bl ov29_022EBA84 - mov r3, #0 - b _0238A8FC -_0238A8EC: - add r2, r3, #1 - add r1, r4, r3, lsl #3 - mov r3, r2 - str r2, [r1, #8] -_0238A8FC: - cmp r3, r0 - blt _0238A8EC - ldr r0, _02389904 ; =0x00000877 - add r2, r4, r3, lsl #3 - strh r0, [r2, #4] - mvn r1, #1 - mov r0, #0 - str r1, [r2, #8] - strh r0, [r2, #0xc] - sub r1, r0, #1 - add r0, r4, #1 - str r1, [r2, #0x10] - bl ov29_0234E988 - ldr r0, _02389908 ; =0x0238B4C0 - ldr r1, _0238990C ; =0x80000213 - add r2, sp, #4 - add r3, r4, #4 - bl CreateParentMenuFromStringIds - strb r0, [r4, #1] - mvn r8, #0 - mov r7, #0x3d -_0238A950: - mov r0, r7 - bl AdvanceFrame - ldrsb r0, [r4, #1] - bl IsParentMenuActive - cmp r0, #0 - bne _0238A950 - ldrsb r0, [r4, #1] - bl sub_0202ABB0 - subs r1, r0, #1 - bmi _0238A998 - ldrsb r0, [r4, #1] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r4, #0x3c8] - bl ov29_022EB804 - cmp r0, #0 - movne r8, #0 - b _0238A9AC -_0238A998: - mvn r0, #2 - cmp r1, r0 - bne _0238A9AC - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 -_0238A9AC: - cmp r8, #0 - bge _0238A9C8 - add r0, r4, #1 - bl ov29_0234E988 - ldrsb r0, [r4] - bl ResumeParentMenu - b _0238AB68 -_0238A9C8: - ldr r0, [r4, #0x3c8] - cmp r0, #0 - bne _0238AA3C - ldr r0, _02389910 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldrb r0, [r4, #0x408] - cmp r0, #0 - beq _0238A9F8 - mov r0, r5 - bl ov31_02389C68 - b _0238AA04 -_0238A9F8: - ldr r0, [r4, #0x404] - mov r1, r5 - bl ov31_02389C2C -_0238AA04: - ldr r1, [r4, #0x404] - mov r0, r4 - bl ov31_02389A78 - add r0, r4, #1 - bl ov29_0234E988 - ldrsb r0, [r4] - bl ResumeParentMenu - ldrsb r0, [r4] - add r1, r4, #0xc4 - bl sub_0202A98C - ldrsb r0, [r4] - sub r1, r6, #1 - bl sub_0202AB94 - b _0238AB68 -_0238AA3C: - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 - bl sub_02001808 - cmp r0, #0xa000 - bge _0238AA64 - add r0, r4, #1 - bl ov29_0234E988 - ldrsb r0, [r4] - bl ResumeParentMenu - b _0238AB68 -_0238AA64: - ldrsb r1, [r4] - mov r0, r5 - mov r2, #1 - bl ov31_02389CC0 - b _0238AB68 -_0238AA78: - bl ov29_022EAC78 - mov r0, #1 - b _0238AB6C -_0238AA84: - ldrh r0, [sp] - tst r0, #8 - beq _0238AADC - ldr r0, _02389914 ; =0x00003F04 - bl ov29_022EACCC - bl sub_02001808 - cmp r0, #0xa000 - blt _0238AB68 - ldrsb r0, [r4] - bl sub_0202B030 - mov r0, #0x3d - bl AdvanceFrame - ldrsb r0, [r4] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r4, #0x3c8] - add r0, r4, r0 - ldrb r0, [r0, #0xb8] - ldrsb r1, [r4] - mov r2, #1 - bl ov31_02389CC0 - b _0238AB68 -_0238AADC: - tst r0, #4 - beq _0238AB68 - cmp r7, #0 - beq _0238AAFC - ldr r0, _02389918 ; =0x00003F03 - mov r1, #0x100 - bl sub_02017C74 - b _0238AB68 -_0238AAFC: - ldrsb r0, [r4] - bl sub_0202B030 - ldrsb r0, [r4] - bl sub_0202ABB0 - mov r5, r0 - ldr r0, _02389910 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldrb r0, [r4, #0x408] - cmp r0, #0 - add r0, r4, r5 - beq _0238AB38 - ldrb r0, [r0, #0xb7] - bl ov31_02389C68 - b _0238AB44 -_0238AB38: - ldrb r1, [r0, #0xb7] - ldr r0, [r4, #0x404] - bl ov31_02389C2C -_0238AB44: - ldr r1, [r4, #0x404] - mov r0, r4 - bl ov31_02389A78 - ldrsb r0, [r4] - add r1, r4, #0xc4 - bl sub_0202A98C - ldrsb r0, [r4] - sub r1, r5, #1 - bl sub_0202AB94 -_0238AB68: - mov r0, #0 -_0238AB6C: - cmp r0, #0 - beq _0238A838 - add r0, r4, #1 - bl ov29_0234E988 - mov r0, r4 - bl ov29_0234E988 - mov r0, #0x3d - bl AdvanceFrame - add r0, r4, #1 - bl ov29_0234E988 - mov r0, r4 - bl ov29_0234E988 - mov r0, r4 -#else - mov r4, r0 - mov r0, #0x530 - mov r1, #8 - bl MemAlloc - mov r5, r0 - mov r1, #0x530 - bl MemZero - add r0, r5, #0x2c - mvn r1, #1 - strb r1, [r5] - add r0, r0, #0x400 - strb r1, [r5, #1] - bl ov31_02389D80 - mov r0, #0 - str r0, [r5, #0x52c] - strb r0, [r5, #0x528] - bl ov29_022EA62C - mov r0, r5 - mov r1, r4 - bl ov31_02389A78 - ldr r1, [r5, #0x52c] - mov r0, #8 - str r1, [r5, #0x4ec] - str r0, [r5, #0x4f0] - mov r1, #0 - str r1, [r5, #0x4f4] - str r1, [r5, #0x4f8] - str r1, [r5, #0x4dc] - mov r0, #0x10 - str r0, [r5, #0x4e0] - mov r0, r5 - str r1, [r5, #0x4e8] - bl ov29_0234E988 - add r0, sp, #0xac - bl InitPreprocessorArgs - ldrb r0, [r5, #0x528] - cmp r0, #0 - ldrne r1, _023898F0 ; =0x00000F5F - mov r0, #0x10 - ldreq r1, _023898F4 ; =0x00000F5E - str r0, [sp, #0xa8] - strh r1, [sp, #0xa4] - ldrb r0, [r5, #0x528] - cmp r0, #0 - bne _02389560 - ldr r1, [r5, #0x524] - add r0, r5, #0x78 - ldr r1, [r1, #0xb4] - bl GetMonsterName - add r0, r5, #0x78 - str r0, [sp, #0xe4] -_02389560: - ldr r0, _023898F8 ; =DUNGEON_WINDOW_PARAMS_31 - ldr r1, _023898FC ; =0x80401813 - add r2, sp, #0x9c - add r3, r5, #0xc4 - bl CreateParentMenu - strb r0, [r5] -_02389578: - mov r0, #0x3d - bl AdvanceFrame - ldr r0, [r5, #0x524] - bl ov29_0234FB50 - mov r4, r0 - add r1, sp, #0 - mov r0, #0 - bl GetPressedButtons - ldrsb r0, [r5] - bl IsParentMenuActive - cmp r0, #0 - bne _023897C8 - ldrsb r0, [r5] - bl sub_0202ABB0 - movs r7, r0 - bmi _023897BC - ldrsb r0, [r5] - bl sub_0202ABB0 - sub r1, r0, #1 - add r0, r5, #0x2c - str r1, [r5, #0x4e8] - add r1, r5, r1 - add r0, r0, #0x400 - ldrb r6, [r1, #0xb8] - bl ov31_02389D80 - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 - bl ov29_022EBA70 - mov r0, #0x2f - mov r1, #0 - bl AddDungeonSubMenuOption - mov r0, #0xc - mov r1, #0 - bl AddDungeonSubMenuOption - cmp r4, #0 - beq _02389610 - mov r0, #0x2f - bl DisableDungeonSubMenuOption -_02389610: - add r1, r5, #0x6c - add r0, r5, #4 - mov r2, #0 - str r1, [sp, #0x64] - bl ov31_0238513C - bl ov29_022EBA84 - mov r3, #0 - b _02389640 -_02389630: - add r2, r3, #1 - add r1, r5, r3, lsl #3 - mov r3, r2 - str r2, [r1, #8] -_02389640: - cmp r3, r0 - blt _02389630 - ldr r0, _02389904 ; =0x00000A3C - add r2, r5, r3, lsl #3 - strh r0, [r2, #4] - mvn r1, #1 - mov r0, #0 - str r1, [r2, #8] - strh r0, [r2, #0xc] - sub r1, r0, #1 - add r0, r5, #1 - str r1, [r2, #0x10] - bl ov29_0234E988 - ldr r0, _02389908 ; =DUNGEON_WINDOW_PARAMS_30 - ldr r1, _0238990C ; =0x80000213 - add r2, sp, #4 - add r3, r5, #4 - bl CreateParentMenuFromStringIds - strb r0, [r5, #1] - mvn r8, #0 - mov r4, #0x3d -_02389694: - mov r0, r4 - bl AdvanceFrame - ldrsb r0, [r5, #1] - bl IsParentMenuActive - cmp r0, #0 - bne _02389694 - ldrsb r0, [r5, #1] - bl sub_0202ABB0 - subs r1, r0, #1 - bmi _023896DC - ldrsb r0, [r5, #1] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r5, #0x4e8] - bl ov29_022EB804 - cmp r0, #0 - movne r8, #0 - b _023896F0 -_023896DC: - mvn r0, #2 - cmp r1, r0 - bne _023896F0 - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 -_023896F0: - cmp r8, #0 - bge _0238970C - add r0, r5, #1 - bl ov29_0234E988 - ldrsb r0, [r5] - bl ResumeParentMenu - b _023898AC -_0238970C: - ldr r0, [r5, #0x4e8] - cmp r0, #0 - bne _02389780 - ldr r0, _02389910 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldrb r0, [r5, #0x528] - cmp r0, #0 - beq _0238973C - mov r0, r6 - bl ov31_02389C68 - b _02389748 -_0238973C: - ldr r0, [r5, #0x524] - mov r1, r6 - bl ov31_02389C2C -_02389748: - ldr r1, [r5, #0x524] - mov r0, r5 - bl ov31_02389A78 - add r0, r5, #1 - bl ov29_0234E988 - ldrsb r0, [r5] - bl ResumeParentMenu - ldrsb r0, [r5] - add r1, r5, #0xc4 - bl sub_0202A98C - ldrsb r0, [r5] - sub r1, r7, #1 - bl sub_0202AB94 - b _023898AC -_02389780: - ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 - bl sub_02001808 - cmp r0, #0xa000 - bge _023897A8 - add r0, r5, #1 - bl ov29_0234E988 - ldrsb r0, [r5] - bl ResumeParentMenu - b _023898AC -_023897A8: - ldrsb r1, [r5] - mov r0, r6 - mov r2, #1 - bl ov31_02389CC0 - b _023898AC -_023897BC: - bl ov29_022EAC78 - mov r0, #1 - b _023898B0 -_023897C8: - ldrh r0, [sp] - tst r0, #8 - beq _02389820 - ldr r0, _02389914 ; =0x00003F04 - bl ov29_022EACCC - bl sub_02001808 - cmp r0, #0xa000 - blt _023898AC - ldrsb r0, [r5] - bl sub_0202B030 - mov r0, #0x3d - bl AdvanceFrame - ldrsb r0, [r5] - bl sub_0202ABB0 - sub r0, r0, #1 - str r0, [r5, #0x4e8] - add r0, r5, r0 - ldrb r0, [r0, #0xb8] - ldrsb r1, [r5] - mov r2, #1 - bl ov31_02389CC0 - b _023898AC -_02389820: - tst r0, #4 - beq _023898AC - cmp r4, #0 - beq _02389840 - ldr r0, _02389918 ; =0x00003F03 - mov r1, #0x100 - bl sub_02017C74 - b _023898AC -_02389840: - ldrsb r0, [r5] - bl sub_0202B030 - ldrsb r0, [r5] - bl sub_0202ABB0 - mov r4, r0 - ldr r0, _02389910 ; =0x00003F07 - mov r1, #0x100 - bl sub_02017C74 - ldrb r0, [r5, #0x528] - cmp r0, #0 - add r0, r5, r4 - beq _0238987C - ldrb r0, [r0, #0xb7] - bl ov31_02389C68 - b _02389888 -_0238987C: - ldrb r1, [r0, #0xb7] - ldr r0, [r5, #0x524] - bl ov31_02389C2C -_02389888: - ldr r1, [r5, #0x524] - mov r0, r5 - bl ov31_02389A78 - ldrsb r0, [r5] - add r1, r5, #0xc4 - bl sub_0202A98C - ldrsb r0, [r5] - sub r1, r4, #1 - bl sub_0202AB94 -_023898AC: - mov r0, #0 -_023898B0: - cmp r0, #0 - beq _02389578 - add r0, r5, #1 - bl ov29_0234E988 - mov r0, r5 - bl ov29_0234E988 - mov r0, #0x3d - bl AdvanceFrame - add r0, r5, #1 - bl ov29_0234E988 - mov r0, r5 - bl ov29_0234E988 - mov r0, r5 -#endif - bl MemFree - add sp, sp, #0x134 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -_023898F0: .word 0x0000158C -_023898F4: .word 0x0000158B -#else -_023898F0: .word 0x00000F5F -_023898F4: .word 0x00000F5E -#endif -_023898F8: .word DUNGEON_WINDOW_PARAMS_31 -_023898FC: .word 0x80401813 -_02389900: .word 0x00003F02 -#ifdef JAPAN -_02389904: .word 0x00000877 -#else -_02389904: .word 0x00000A3C -#endif -_02389908: .word DUNGEON_WINDOW_PARAMS_30 -_0238990C: .word 0x80000213 -_02389910: .word 0x00003F07 -_02389914: .word 0x00003F04 -_02389918: .word 0x00003F03 - arm_func_end ov31_0238948C - - arm_func_start ov31_0238991C -ov31_0238991C: ; 0x0238991C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r0, #2 - mov r1, #8 - bl MemAlloc - mov r1, r5 - mov r2, r4 - mov r4, r0 - bl ov31_0238994C - mov r0, r4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov31_0238991C - - arm_func_start ov31_0238994C -ov31_0238994C: ; 0x0238994C - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x10 - mov r3, r2, asr #2 - mov r4, r0 - mov r0, r1, asr #2 - add r2, r2, r3, lsr #29 - add ip, r1, r0, lsr #29 - ldr r6, _023899B0 ; =DUNGEON_WINDOW_PARAMS_32 - mov lr, r2, asr #3 - add r5, sp, #0 - ldmia r6, {r0, r1, r2, r3} - stmia r5, {r0, r1, r2, r3} - mov ip, ip, asr #3 - add r3, lr, #1 - ldr r1, _023899B4 ; =ov31_02389A04 - mov r0, r5 - mov r2, r4 - strb ip, [sp, #4] - strb r3, [sp, #5] - bl CreateTextBoxWithArg - strb r0, [r4] - mov r0, #0xb - strb r0, [r4, #1] - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_023899B0: .word DUNGEON_WINDOW_PARAMS_32 -_023899B4: .word ov31_02389A04 - arm_func_end ov31_0238994C - - arm_func_start ov31_023899B8 -ov31_023899B8: ; 0x023899B8 - stmdb sp!, {r3, lr} - strb r1, [r0, #1] - cmp r2, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - bl sub_0202F9B8 - ldmia sp!, {r3, pc} - arm_func_end ov31_023899B8 - - arm_func_start ov31_023899D4 -ov31_023899D4: ; 0x023899D4 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r4, [r5] - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldrsb r0, [r4] - bl CloseTextBox2 - mov r0, r4 - bl MemFree - mov r0, #0 - str r0, [r5] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov31_023899D4 - - arm_func_start ov31_02389A04 -ov31_02389A04: ; 0x02389A04 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x94 - mov r5, r0 - mov r4, r1 - bl sub_02027B1C - add r0, sp, #0x44 - bl InitPreprocessorArgs - ldrb r0, [r4, #1] - ldr r3, _02389A70 ; =0x0000C402 - add ip, sp, #0x44 - cmp r0, #0xb - strne r0, [sp, #0x54] -#ifdef JAPAN - ldreq r2, _0238AD30 ; =0x0000158D - add r0, sp, #4 - ldrne r2, _02389A74 ; =0x0000158E -#else - moveq r2, #0xf60 - ldrne r2, _02389A74 ; =0x00000F61 - add r0, sp, #4 -#endif - mov r1, #0x40 - str ip, [sp] - bl PreprocessStringFromId - add r3, sp, #4 - mov r0, r5 - mov r1, #4 - mov r2, #2 - bl DrawTextInWindow - mov r0, r5 - bl UpdateWindow - add sp, sp, #0x94 - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_02389A70: .word 0x0000C402 -#ifdef JAPAN -_0238AD30: .word 0x0000158D -_02389A74: .word 0x0000158E -#else -_02389A74: .word 0x00000F61 -#endif - arm_func_end ov31_02389A04 - - arm_func_start ov31_02389A78 -ov31_02389A78: ; 0x02389A78 -#ifdef JAPAN -#define OV31_02389A78_OFFSET -0x120 -#else -#define OV31_02389A78_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x70 - mov sb, r1 - ldr r4, [sb, #0xb4] - mov sl, r0 - ldrb r0, [r4, #7] - strb r0, [sl, #0x528 + OV31_02389A78_OFFSET] - bl GetLeaderMonster - ldrb r1, [r0, #0xa] - add r0, sp, #0x14 - bl GetUnlockedTactics - ldrb r0, [sl, #0x528 + OV31_02389A78_OFFSET] - cmp r0, #0 - beq _02389B64 - mov r6, #0 - bl GetLeaderMonster - ldrb r1, [r0, #0xa] - add r0, sp, #8 - bl GetUnlockedTactics - ldr r4, _02389C20 ; =DUNGEON_PTR - mov r7, r6 - add r5, sp, #4 -_02389AD0: - ldr r0, [r4] - add r0, r0, r7, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r8, [r0, #0xa84] -#else - ldr r8, [r0, #0xb28] -#endif - mov r0, r8 - bl ov29_0234FB60 - cmp r0, #0 - beq _02389B08 - ldr r1, [r8, #0xb4] - add r0, r6, #1 - ldrb r1, [r1, #0xa8] - mov r0, r0, lsl #0x10 - strb r1, [r5, r6] - mov r6, r0, asr #0x10 -_02389B08: - add r0, r7, #1 - mov r0, r0, lsl #0x10 - mov r7, r0, asr #0x10 - cmp r7, #4 - blt _02389AD0 - cmp r6, #0 - moveq r6, #0xb - beq _02389B68 - mov r3, #1 - ldrb r2, [sp, #4] - add r1, sp, #4 - b _02389B54 -_02389B38: - ldrb r0, [r1, r3] - cmp r2, r0 - movne r6, #0xb - bne _02389B68 - add r0, r3, #1 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 -_02389B54: - cmp r3, r6 - blt _02389B38 - ldrb r6, [sp, #4] - b _02389B68 -_02389B64: - ldrb r6, [r4, #0xa8] -_02389B68: - mov r8, #0 - add r4, sl, #0x12c - add fp, sp, #0x14 - add r5, sp, #0x20 - b _02389BF4 -_02389B7C: - ldrb r1, [fp, r8] - add r0, sl, r8 - strb r1, [r0, #0xb8] - cmp r1, #0xb - beq _02389BFC - str r1, [sp, #0x30] - cmp r6, #0xb - beq _02389BC4 - cmp r6, r1 - bne _02389BC4 -#ifdef JAPAN - mov r0, #0x28 - mul r7, r8, r0 - ldr r2, _02389C24 ; =ov31_0238A228 - add r0, r4, r7 - mov r1, #0x28 - mov r3, #0 - str r5, [sp] - bl PreprocessString - b _02389BE0 -_02389BC4: - mov r0, #0x28 - mul r7, r8, r0 - ldr r2, _02389C28 ; =ov31_0238A23C - add r0, r4, r7 - mov r1, #0x28 - mov r3, #0 - str r5, [sp] -#else - ldr r2, _02389C24 ; =ov31_0238A228 - mov r1, #0x40 - add r0, r4, r8, lsl #6 - mov r3, #0 - str r5, [sp] - mov r7, r8, lsl #6 - bl PreprocessString - b _02389BE0 -_02389BC4: - ldr r2, _02389C28 ; =ov31_0238A23C - mov r1, #0x40 - add r0, r4, r8, lsl #6 - mov r3, #0 - str r5, [sp] - mov r7, r8, lsl #6 -#endif - bl PreprocessString -_02389BE0: - add r1, r4, r7 - add r0, sl, r8, lsl #3 - str r1, [r0, #0xc4] - add r8, r8, #1 - str r8, [r0, #0xc8] -_02389BF4: - cmp r8, #0xc - blt _02389B7C -_02389BFC: - mov r0, #0 - str r8, [sl, #0x52c + OV31_02389A78_OFFSET] - add r1, sl, r8, lsl #3 - str r0, [r1, #0xc4] - sub r0, r0, #1 - str r0, [r1, #0xc8] - str sb, [sl, #0x524 + OV31_02389A78_OFFSET] - add sp, sp, #0x70 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02389C20: .word DUNGEON_PTR -_02389C24: .word ov31_0238A228 -_02389C28: .word ov31_0238A23C - arm_func_end ov31_02389A78 - - arm_func_start ov31_02389C2C -ov31_02389C2C: ; 0x02389C2C - stmdb sp!, {r3, lr} - ldr r3, [r0, #0xb4] - mov r2, #6 - strb r1, [r3, #0xa8] - strb r2, [r3, #0x7c] - mov r1, #0 - str r1, [r3, #0x84] - str r1, [r3, #0x88] - strh r1, [r3, #0x80] - ldrb r1, [r3, #7] - cmp r1, #0 - ldmneia sp!, {r3, pc} - mov r1, #1 - bl AiMovement - ldmia sp!, {r3, pc} - arm_func_end ov31_02389C2C - - arm_func_start ov31_02389C68 -ov31_02389C68: ; 0x02389C68 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r5, _02389CBC ; =DUNGEON_PTR - mov r4, r0 - mov r6, #0 -_02389C78: - ldr r0, [r5] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r7, [r0, #0xa84] -#else - ldr r7, [r0, #0xb28] -#endif - mov r0, r7 - bl ov29_0234FB60 - cmp r0, #0 - beq _02389CA4 - mov r0, r7 - mov r1, r4 - bl ov31_02389C2C -_02389CA4: - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 - cmp r6, #4 - blt _02389C78 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02389CBC: .word DUNGEON_PTR - arm_func_end ov31_02389C68 - - arm_func_start ov31_02389CC0 -ov31_02389CC0: ; 0x02389CC0 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #0x5c - mov r5, r1 - mov r6, r0 - mov r0, r5 - mov r4, r2 - bl sub_0202812C -#if defined(EUROPE) - add r0, r6, #0x2dc - add r0, r0, #0x2400 -#elif defined(JAPAN) - add r0, r6, #0x308 - add r0, r0, #0x3c00 -#else - add r0, r6, #0xda - add r0, r0, #0x2600 -#endif - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - add r1, sp, #0xc - str r6, [sp, #0x1c] - str r1, [sp] - str r2, [sp, #4] - mov r2, #0 - ldr r0, _02389D74 ; =DUNGEON_WINDOW_PARAMS_29 - ldr r1, _02389D78 ; =0x00001013 - ldr r3, _02389D7C ; =0x00000A3B - str r2, [sp, #8] - bl CreateScrollBoxSingle - mov r7, r0 - mov r6, #0x3e -_02389D1C: - mov r0, r6 - bl AdvanceFrame - mov r0, r7 - bl IsScrollBoxActive - cmp r0, #0 - bne _02389D1C - mov r0, r7 - bl CloseScrollBox - mov r0, #0xb - mov r1, #0 - bl ov29_022EA428 - mov r0, #4 - mov r1, #0x3e - bl ov29_022EA370 - mov r0, r5 - bl sub_0202810C - cmp r4, #0 - beq _02389D6C - mov r0, r5 - bl ResumeParentMenu -_02389D6C: - add sp, sp, #0x5c - ldmia sp!, {r4, r5, r6, r7, pc} - .align 2, 0 -_02389D74: .word DUNGEON_WINDOW_PARAMS_29 -_02389D78: .word 0x00001013 -#ifdef JAPAN -_02389D7C: .word 0x00000876 -#else -_02389D7C: .word 0x00000A3B -#endif - arm_func_end ov31_02389CC0 - - arm_func_start ov31_02389D80 -ov31_02389D80: ; 0x02389D80 - mov r1, #0 - str r1, [r0, #0xc8] - str r1, [r0, #0xcc] - str r1, [r0, #0xbc] - bx lr - arm_func_end ov31_02389D80 - ; 0x02389D94 - - .rodata - .global DUNGEON_WINDOW_PARAMS_1 -DUNGEON_WINDOW_PARAMS_1: - .byte 0x00, 0x00, 0x00, 0x00 -#ifdef EUROPE - .byte 0x02, 0x02, 0x07, 0x0C -#else - .byte 0x02, 0x02, 0x00, 0x0C -#endif - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_2 -DUNGEON_WINDOW_PARAMS_2: - .byte 0x00, 0x00, 0x00, 0x00, 0x0B, 0x04, 0x13, 0x02, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_3 -DUNGEON_WINDOW_PARAMS_3: - .byte 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word ov31_02382DAC - .word ov31_02382B54 - .global DUNGEON_WINDOW_PARAMS_4 -DUNGEON_WINDOW_PARAMS_4: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x1C, 0x06, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_MAIN_MENU_ITEMS -DUNGEON_MAIN_MENU_ITEMS: -#ifdef JAPAN -#define OV31_DATA_OFFSET 0x1458 -#else -#define OV31_DATA_OFFSET 0 -#endif - .word 0x8AD + OV31_DATA_OFFSET - .byte 0x00, 0x00, 0x00, 0x00 - .word 0x8AE + OV31_DATA_OFFSET - .byte 0x01, 0x00, 0x00, 0x00 - .word 0x8AF + OV31_DATA_OFFSET - .byte 0x02, 0x00, 0x00, 0x00 - .word 0x8B0 + OV31_DATA_OFFSET - .byte 0x03, 0x00, 0x00, 0x00 - .word 0x8B1 + OV31_DATA_OFFSET - .byte 0x04, 0x00, 0x00, 0x00 - .word 0x8B3 + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8B4 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .global DUNGEON_MENU_SWITCH_STR1 -DUNGEON_MENU_SWITCH_STR1: - .string "[dungeon:0]" - .global OVERLAY31_UNKNOWN_STRING_IDS -OVERLAY31_UNKNOWN_STRING_IDS: - .hword 0x8C7 + OV31_DATA_OFFSET - .global ov31_02389E22 -ov31_02389E22: - .hword 0x8CB + OV31_DATA_OFFSET - .hword 0x8C8 + OV31_DATA_OFFSET - .hword 0x8CC + OV31_DATA_OFFSET - .hword 0x8C9 + OV31_DATA_OFFSET - .hword 0x8CD + OV31_DATA_OFFSET - .hword 0x8CA + OV31_DATA_OFFSET - .hword 0x8CE + OV31_DATA_OFFSET - .global OVERLAY31_UNKNOWN_STRUCT__NA_2389E30 -OVERLAY31_UNKNOWN_STRUCT__NA_2389E30: - .byte 0x0E, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .word ov31_023832F0 - .word HandleStairsMenu - .global DUNGEON_WINDOW_PARAMS_5 -DUNGEON_WINDOW_PARAMS_5: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x02, 0x1C, 0x0D, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_6 -DUNGEON_WINDOW_PARAMS_6: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x02, 0x13, 0x04, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_7 -DUNGEON_WINDOW_PARAMS_7: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x17, 0x02, 0x07, 0x06, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_SUBMENU_ITEMS_1 -DUNGEON_SUBMENU_ITEMS_1: -#ifdef JAPAN -#define DUNGEON_SUBMENU_ITEMS_1_OFFSET 0x19D0 -#else -#define DUNGEON_SUBMENU_ITEMS_1_OFFSET 0 -#endif - .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET - .byte 0x01, 0x00, 0x00, 0x00 - .word 0x8CF + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8D0 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET - .byte 0x02, 0x00, 0x00, 0x00 - .word 0x8CF + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8D0 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .word 0x9C9 + DUNGEON_SUBMENU_ITEMS_1_OFFSET - .byte 0x03, 0x00, 0x00, 0x00 - .word 0x8CF + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8D0 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET - .byte 0x04, 0x00, 0x00, 0x00 - .word 0x8CF + OV31_DATA_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x8D0 + OV31_DATA_OFFSET - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .global OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 -OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0: - .byte 0x01, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_8 -DUNGEON_WINDOW_PARAMS_8: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_9 -DUNGEON_WINDOW_PARAMS_9: - .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x07, 0x00 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_10 -DUNGEON_WINDOW_PARAMS_10: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x08, 0x02 - .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_11 -DUNGEON_WINDOW_PARAMS_11: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x12, 0x02 - .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_12 -DUNGEON_WINDOW_PARAMS_12: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x13, 0x00 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_13 -DUNGEON_WINDOW_PARAMS_13: - .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x07, 0x00 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global ov31_02389F5C -ov31_02389F5C: - .byte 0x20, 0x20, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00 - .global OVERLAY31_JP_STRING -OVERLAY31_JP_STRING: - .byte 0x0A, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x81, 0x40, 0x20, 0x8F, 0x89, 0x8A, 0xFA, 0x83, 0x7C, 0x83 - .byte 0x57, 0x83, 0x56, 0x83, 0x87, 0x83, 0x93, 0x3D, 0x25, 0x64, 0x81, 0x40, 0x2D, 0x2D, 0x2D, 0x2D - .byte 0x2D, 0x20, 0x0A, 0x00 - .global DUNGEON_WINDOW_PARAMS_14 -DUNGEON_WINDOW_PARAMS_14: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x11, 0x1C, 0x05, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_15 -DUNGEON_WINDOW_PARAMS_15: - .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_16 -DUNGEON_WINDOW_PARAMS_16: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x1C, 0x04, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_17 -DUNGEON_WINDOW_PARAMS_17: - .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_18 -DUNGEON_WINDOW_PARAMS_18: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x13, 0x04, 0x00, 0xFE, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_19 -DUNGEON_WINDOW_PARAMS_19: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 -OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8: - .byte 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_20 -DUNGEON_WINDOW_PARAMS_20: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x0E, 0x12, 0x04, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_21 -DUNGEON_WINDOW_PARAMS_21: - .byte 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x10, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_22 -DUNGEON_WINDOW_PARAMS_22: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_23 -DUNGEON_WINDOW_PARAMS_23: - .byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x02, 0x0B, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_24 -DUNGEON_WINDOW_PARAMS_24: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0A, 0x02, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global ov31_0238A044 -ov31_0238A044: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x30, 0x5D, 0x00, 0x00 - .global ov31_0238A04C -ov31_0238A04C: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x31, 0x5D, 0x00, 0x00 - .global ov31_0238A054 -ov31_0238A054: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x32, 0x5D, 0x00, 0x00 - .global ov31_0238A05C -ov31_0238A05C: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x33, 0x5D, 0x00, 0x00 - .global ov31_0238A064 -ov31_0238A064: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x34, 0x5D, 0x00, 0x00 - .global ov31_0238A06C -ov31_0238A06C: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x35, 0x5D, 0x00, 0x00 - .global ov31_0238A074 -ov31_0238A074: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x36, 0x5D, 0x00, 0x00 - .global ov31_0238A07C -ov31_0238A07C: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x37, 0x5D, 0x00, 0x00 - .global ov31_0238A084 -ov31_0238A084: - .byte 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x5D, 0x5B, 0x43, 0x4C, 0x55, 0x4D, 0x5F - .byte 0x53, 0x45, 0x54, 0x3A, 0x38, 0x30, 0x5D, 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x31 - .byte 0x5D, 0x00, 0x00, 0x00 - .global ov31_0238A0A8 -ov31_0238A0A8: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x30, 0x5D, 0x00, 0x00 - .global ov31_0238A0B0 -ov31_0238A0B0: - .byte 0x5B, 0x4D, 0x3A, 0x48 - .byte 0x31, 0x5D, 0x00, 0x00 - .global ov31_0238A0B8 -ov31_0238A0B8: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x32, 0x5D, 0x00, 0x00 - .global ov31_0238A0C0 -ov31_0238A0C0: - .byte 0x5B, 0x4D, 0x3A, 0x48 - .byte 0x33, 0x5D, 0x00, 0x00 - .global ov31_0238A0C8 -ov31_0238A0C8: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x34, 0x5D, 0x00, 0x00 - .global ov31_0238A0D0 -ov31_0238A0D0: - .byte 0x5B, 0x4D, 0x3A, 0x48 - .byte 0x35, 0x5D, 0x00, 0x00 - .global ov31_0238A0D8 -ov31_0238A0D8: - .byte 0x5B, 0x4D, 0x3A, 0x48, 0x36, 0x5D, 0x00, 0x00 - .global ov31_0238A0E0 -ov31_0238A0E0: - .byte 0x5B, 0x4D, 0x3A, 0x48 - .byte 0x37, 0x5D, 0x00, 0x00 - .global ov31_0238A0E8 -ov31_0238A0E8: - .byte 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x5D, 0x5B, 0x43 - .byte 0x4C, 0x55, 0x4D, 0x5F, 0x53, 0x45, 0x54, 0x3A, 0x38, 0x30, 0x5D, 0x5B, 0x73, 0x74, 0x72, 0x69 - .byte 0x6E, 0x67, 0x3A, 0x31, 0x5D, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_25 -DUNGEON_WINDOW_PARAMS_25: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0C, 0x00 - .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_SUBMENU_ITEMS_5 -DUNGEON_SUBMENU_ITEMS_5: - .word 0x8C3 + OV31_DATA_OFFSET - .byte 0x01, 0x00, 0x00, 0x00 - .word 0x8C4 + OV31_DATA_OFFSET - .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .global DUNGEON_WINDOW_PARAMS_26 -DUNGEON_WINDOW_PARAMS_26: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x1C, 0x12, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_STRUCT__NA_238A144 -OVERLAY31_UNKNOWN_STRUCT__NA_238A144: - .byte 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word ov31_0238917C - .word RecruitmentSearchMenuLoop - .global ov31_0238A154 -ov31_0238A154: - .byte 0x5B, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x30, 0x3A, 0x33, 0x5D, 0x20, 0x5B, 0x43, 0x53, 0x3A - .byte 0x25, 0x63, 0x5D, 0x25, 0x73, 0x5B, 0x43, 0x52, 0x5D, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_27 -DUNGEON_WINDOW_PARAMS_27: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x02, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_28 -DUNGEON_WINDOW_PARAMS_28: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x02, 0x1C, 0x14, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_STRUCT__NA_238A190 -OVERLAY31_UNKNOWN_STRUCT__NA_238A190: - .byte 0x0E, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .word ov31_02389460 - .word HelpMenuLoop - .global DUNGEON_SUBMENU_ITEMS_6 -DUNGEON_SUBMENU_ITEMS_6: -#if defined(EUROPE) -#define DUNGEON_SUBMENU_6_OFFSET 2 -#elif defined(JAPAN) -#define DUNGEON_SUBMENU_6_OFFSET 0xA03 -#else -#define DUNGEON_SUBMENU_6_OFFSET 0 -#endif - .word 0x3FA8 + DUNGEON_SUBMENU_6_OFFSET - .byte 0x00, 0x00, 0x00, 0x00 - .word 0x3FA9 + DUNGEON_SUBMENU_6_OFFSET - .byte 0x01, 0x00, 0x00, 0x00 - .word 0x3FAA + DUNGEON_SUBMENU_6_OFFSET - .byte 0x02, 0x00, 0x00, 0x00 - .word 0x3FAB + DUNGEON_SUBMENU_6_OFFSET - .byte 0x03, 0x00, 0x00, 0x00 - .word 0x3FAC + DUNGEON_SUBMENU_6_OFFSET - .byte 0x04, 0x00, 0x00, 0x00 - .word 0x3FAD + DUNGEON_SUBMENU_6_OFFSET - .byte 0x05, 0x00, 0x00, 0x00 - .word 0x3FAE + DUNGEON_SUBMENU_6_OFFSET - .byte 0x06, 0x00, 0x00, 0x00 - .word 0x3FAF + DUNGEON_SUBMENU_6_OFFSET - .byte 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xFF, 0xFF, 0xFF, 0xFF - .global DUNGEON_WINDOW_PARAMS_29 -DUNGEON_WINDOW_PARAMS_29: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_30 -DUNGEON_WINDOW_PARAMS_30: - .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_31 -DUNGEON_WINDOW_PARAMS_31: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x12, 0x00, 0x00, 0xFF, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global DUNGEON_WINDOW_PARAMS_32 -DUNGEON_WINDOW_PARAMS_32: - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x0F, 0x02, 0x00, 0xFE, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global ov31_0238A228 -ov31_0238A228: - .byte 0x5B, 0x4D, 0x3A, 0x53, 0x32, 0x5D, 0x5B, 0x74, 0x61, 0x63, 0x74, 0x69 - .byte 0x63, 0x73, 0x3A, 0x30, 0x5D, 0x00, 0x00, 0x00 - .global ov31_0238A23C -ov31_0238A23C: - .byte 0x5B, 0x4D, 0x3A, 0x53, 0x31, 0x5D, 0x5B, 0x74 - .byte 0x61, 0x63, 0x74, 0x69, 0x63, 0x73, 0x3A, 0x30, 0x5D, 0x00, 0x00, 0x00 - - .data - .global OVERLAY31_UNKNOWN_POINTER__NA_238A260 -OVERLAY31_UNKNOWN_POINTER__NA_238A260: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x0A, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A268 -OVERLAY31_UNKNOWN_POINTER__NA_238A268: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A26C -OVERLAY31_UNKNOWN_POINTER__NA_238A26C: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A270 -OVERLAY31_UNKNOWN_POINTER__NA_238A270: - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A27C -OVERLAY31_UNKNOWN_POINTER__NA_238A27C: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A280 -OVERLAY31_UNKNOWN_POINTER__NA_238A280: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A284 -OVERLAY31_UNKNOWN_POINTER__NA_238A284: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A288 -OVERLAY31_UNKNOWN_POINTER__NA_238A288: - .byte 0x00, 0x00, 0x00, 0x00 - .global OVERLAY31_UNKNOWN_POINTER__NA_238A28C -OVERLAY31_UNKNOWN_POINTER__NA_238A28C: - .byte 0x00, 0x00, 0x00, 0x00 - - .bss - .global ov31_0238A2A0 -ov31_0238A2A0: - .space 0x8 - .global ov31_0238A2A8 -ov31_0238A2A8: - .space 0x18 diff --git a/asm/overlay_31_023838E4.s b/asm/overlay_31_023838E4.s new file mode 100644 index 00000000..c6a05936 --- /dev/null +++ b/asm/overlay_31_023838E4.s @@ -0,0 +1,8533 @@ + .include "asm/macros.inc" + .include "overlay_31_023838E4.inc" + + .text + +; https://decomp.me/scratch/pyVsB + arm_func_start ov31_023838E4 +ov31_023838E4: ; 0x023838E4 +#ifdef JAPAN +#define OV31_023838E4_OFFSET -0xA4 +#else +#define OV31_023838E4_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x234 + sub sp, sp, #0x400 + mov r2, #0 + mov r5, r2 + str r2, [sp, #0x30] + mov sl, r0 + mov sb, r1 + mov r6, r5 + ldr r7, [sl, #0xb4] + bl ov29_022EBB4C + mov r0, #0x1280 + mov r1, #8 + bl MemAlloc + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r4, #1 + str r0, [r1] + add r0, r0, #0x1000 + str sl, [r0, #0x19c] + ldr r0, [r1] + add r3, r4, #1 + add r0, r0, #0x1000 + strb r4, [r0, #0x193] + ldr r0, [r1] + mov r2, #0 + add r0, r0, #0x1000 + strb r4, [r0, #0x192] + ldr r8, [r1] + mov r0, #1 + add r8, r8, #0x1000 + strb r4, [r8, #0x194] + ldr r8, [r1] + add r8, r8, #0x1000 + strb r4, [r8, #0x195] + ldr r4, [r1] + add r4, r4, #0x1000 + str r3, [r4, #0x198] + ldr r3, [r1] + add r3, r3, #0x1000 + str r2, [r3, #0x1ac] + ldr r3, [r1] + add r3, r3, #0x1000 + strb r0, [r3, #0x1b1] + ldr r0, [r1] + add r0, r0, #0x1000 + strb r2, [r0, #0x1b2] + ldr r0, [r1] + add r0, r0, #0x1000 + str r2, [r0, #0x1b4] + ldr r0, [r1] + add r0, r0, #0x278 + add r0, r0, #0x1000 + bl ov31_02383880 + cmp sb, #0 + beq _02383A1C + ldrb r0, [sb] + cmp r0, #0 + beq _023839E4 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [sb, #4] + ldr r0, [r0] + mov r6, #1 + add r0, r0, #0x1000 + str r1, [r0, #0x1b4] +_023839E4: + ldrb r0, [sb, #1] + cmp r0, #0 + ldreq r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + moveq r1, #0 + ldreq r0, [r0] + addeq r0, r0, #0x1000 + streqb r1, [r0, #0x1b1] + ldrb r0, [sb, #2] + cmp r0, #0 + ldrne r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + movne r1, #1 + ldrne r0, [r0] + addne r0, r0, #0x1000 + strneb r1, [r0, #0x1b2] +_02383A1C: + mov r0, #3 + bl Arm9LoadUnkFieldNa0x2029EC8 + mov r1, r0 + ldr r0, _0238489C ; =OVERLAY31_JP_STRING + bl Debug_Print0 + bl GetNbItemsInBag + ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + cmp r6, #0 + ldr r1, [r2] + add r1, r1, #0x1000 + str r0, [r1, #0x1a8] + ldrne r0, [r2] + movne r1, #0 + addne r0, r0, #0x1000 + strneb r1, [r0, #0x1b3] + bne _02383A74 + mov r0, sl + bl ov31_0238372C + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r1] + add r1, r1, #0x1000 + strb r0, [r1, #0x1b3] +_02383A74: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r2, [r0] + add r0, r2, #0x1000 + ldrb r1, [r0, #0x1b2] + cmp r1, #0 + ldreq r1, [r0, #0x1a8] + cmpeq r1, #0 + ldreqb r0, [r0, #0x1b3] + cmpeq r0, #0 + bne _02383AC4 + ldr r1, _023848A0 ; =0x000008E5 + mov r0, #0 + mov r2, #1 + bl DisplayMessage + bl ov31_023837C8 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #1 + b _0238511C +_02383AC4: + add r0, r2, #0x1000 + ldr r0, [r0, #0x1a8] + cmp r0, #0 + bne _02383B08 + mov r0, sl + bl ov31_0238372C + ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r3, #1 + ldr r1, [r2] + add r1, r1, #0x1000 + strb r0, [r1, #0x1b3] + ldr r0, [r2] + add r0, r0, #0x1000 + strb r3, [r0, #0x1b2] + ldr r0, [r2] + add r0, r0, #0x1000 + strb r3, [r0, #0x1b1] +_02383B08: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + cmp r0, r1 + beq _02383B48 + bl IsInventoryMenuActive + cmp r0, #0 + bne _02383D78 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCC7C + b _02383D78 +_02383B48: + bl GetNbItemsInBag + ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r4] + add r1, r1, #0x1000 + str r0, [r1, #0x1a8] + ldr r0, [r4] + add r0, r0, #0x1000 + ldr r0, [r0, #0x1a8] + cmp r0, #0 + beq _02383C44 + ldr fp, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + mov r8, #0 +_02383B78: + mov r0, #6 + mul r1, r8, r0 + ldr r0, [fp] + ldr r2, [r0, #0x384] + ldrb r0, [r2, r1] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02383BD8 + ldrb r0, [r2, r1] + tst r0, #4 + beq _02383BD8 + bic r0, r0, #4 + strb r0, [r2, r1] + ldr r1, [r4] + mov r0, #3 + add r1, r1, #0x1000 + str r8, [r1, #0x1ac] + ldr r1, [r4] + add r1, r1, #0x1000 + ldr r1, [r1, #0x1ac] + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 +_02383BD8: + add r8, r8, #1 + cmp r8, #0x32 + blt _02383B78 + ldr fp, _023848A8 ; =DUNGEON_PTR + mov r4, #0 +_02383BEC: + ldr r0, [fp] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r8, [r0, #0xb28 + OV31_023838E4_OFFSET] + mov r0, r8 + bl EntityIsValid__02383658 + cmp r0, #0 + beq _02383C38 + ldr r1, [r8, #0xb4] + ldrb r0, [r1, #0x62] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02383C38 + ldrb r0, [r1, #0x62] + tst r0, #4 + bicne r0, r0, #4 + strneb r0, [r1, #0x62] +_02383C38: + add r4, r4, #1 + cmp r4, #4 + blt _02383BEC +_02383C44: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r4, [r0] + add r0, r4, #0x1000 + ldrb r1, [r0, #0x1b2] + cmp r1, #0 + bne _02383D1C + ldr r0, [r0, #0x1a8] + cmp r0, #0 + beq _02383D1C + mov r0, #3 + bl Arm9LoadUnkFieldNa0x2029EC8 + ldr r2, _023848AC ; =ov31_02383478 + add r1, r4, #0x278 + str r2, [sp] + add r1, r1, #0x1000 + str r1, [sp, #4] + add r1, r4, #0x1000 + ldrb r2, [r1, #0x1b3] + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r3, r4, #0x1f8 + str r2, [sp, #8] + ldr r1, [r1] + mov r2, r0 + add r0, r1, #0x1000 + ldr r0, [r0, #0x1a8] + mov r1, r6 + add r3, r3, #0x1000 + bl ov10_022BD474 + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + cmp r6, #0 + ldr r1, [r1] + add r1, r1, #0x1000 + strb r0, [r1, #0x193] + beq _02383CEC + ldr r0, _023848B0 ; =DUNGEON_WINDOW_PARAMS_10 + ldr r1, _023848B4 ; =ov31_02383854 + bl CreateTextBox + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r1] + add r1, r1, #0x1000 + strb r0, [r1, #0x194] + b _02383D78 +_02383CEC: + ldr r0, _023848B8 ; =DUNGEON_WINDOW_PARAMS_11 + mov r1, #0 + bl CreateTextBox + ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r3, #0 + ldr r1, [r2] + add r1, r1, #0x1000 + strb r0, [r1, #0x195] + ldr r0, [r2] + add r0, r0, #0x1000 + str r3, [r0, #0x198] + b _02383D78 +_02383D1C: + ldr r3, _023848BC ; =0x000008E3 + add r0, sp, #0x540 + add r1, r4, #0x278 + strh r3, [r0, #0x64] + mov r2, #0x10 + str r2, [sp, #0x5a8] + add r0, r1, #0x1000 + str r0, [sp] + mov r4, #1 + str r4, [sp, #4] + add r2, sp, #0x500 + str r4, [sp, #8] + mov r4, #0 + ldr r0, _023848C0 ; =DUNGEON_WINDOW_PARAMS_12 + ldr r1, _023848C4 ; =0x00400813 + ldr r3, _023848AC ; =ov31_02383478 + add r2, r2, #0x9c + str r4, [sp, #0xc] + bl CreateInventoryMenu + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r1] + add r1, r1, #0x1000 + strb r0, [r1, #0x193] +_02383D78: + mvn r0, #0 + str r0, [sp, #0x38] + sub r0, r0, #1 + ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + str r0, [sp, #0x3c] +_02383D8C: + mov r0, #0x14 + bl AdvanceFrame + mov r0, #0 + add r1, sp, #0x42 + bl GetPressedButtons + ldr r1, [r4] + add r0, r1, #0x1000 + ldrb r0, [r0, #0x1b2] + cmp r0, #0 + bne _023843D0 + add r0, r1, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCE44 + mov fp, r0 + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl PopInventoryMenuField0x1A3 + str r0, [sp, #0x2c] + ldr r0, [r4] + add r1, r0, #0x1100 + ldrsb r8, [r1, #0x95] + ldr r0, [sp, #0x3c] + cmp r8, r0 + beq _02384054 + ldrsb r0, [r1, #0x93] + bl ov10_022BCE44 + cmp r0, #0 + ldr r0, [r4] + bne _02383F7C + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDA8 + str r0, [sp, #0x34] + ldr r0, [r4] + add r1, r0, #0x1000 + ldr r2, [r1, #0x198] + ldr r0, [sp, #0x34] + cmp r2, r0 + beq _02384054 + str r0, [r1, #0x198] + ldr r1, [r4] + mov r0, r8 + add r1, r1, #0x1000 + ldr r1, [r1, #0x19c] + str r1, [sp, #0x28] + bl sub_02027B1C + ldr r1, [sp, #0x34] + mov r0, #6 + mul r2, r1, r0 + ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r0, [r0, #0x384] + add r1, r0, r2 + ldrb r0, [r0, r2] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02383F28 + ldrb r0, [r1, #1] + str r0, [sp, #0x10] + cmp r0, #0 + beq _02383F00 + ldr r1, _023848A8 ; =DUNGEON_PTR + add r0, sp, #0x400 + ldr r3, [r1] + ldr r1, [sp, #0x10] + add r0, r0, #0x4c + add r1, r3, r1, lsl #2 + add r1, r1, #0x12000 + ldr r1, [r1, #0xb24 + OV31_023838E4_OFFSET] + mov r2, #0 + bl ov29_022E2A78 + add r0, sp, #0x400 + add r0, r0, #0x4c + str r0, [sp, #0x584] + add r0, sp, #0x500 +#ifdef JAPAN + ldr r2, [sp, #0x38] + add r0, r0, #0x4c + str r0, [sp] + add r0, sp, #0x4c + mov r1, #0x400 + add r2, r2, #0x1d40 +#else + add r0, r0, #0x4c + str r0, [sp] + ldr r2, _023848C8 ; =0x000008E7 + add r0, sp, #0x4c + mov r1, #0x400 +#endif + mov r3, #0 + bl PreprocessStringFromId + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r1, [r0] + ldr r0, [sp, #0x10] + add r0, r1, r0, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb24 + OV31_023838E4_OFFSET] + str r0, [sp, #0x28] + b _02383F34 +_02383F00: + ldrsh r0, [r1, #4] +#if defined(EUROPE) + add r0, r0, #0x4b + add r0, r0, #0x2f00 +#elif defined(JAPAN) + add r0, r0, #0x41 + add r0, r0, #0x1d00 +#else + add r0, r0, #0x49 + add r0, r0, #0x2f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r1, r0 + add r0, sp, #0x4c + bl strcpy + b _02383F34 +_02383F28: + ldr r1, _023848CC ; =ov31_02389F5C + add r0, sp, #0x4c + bl strcpy +_02383F34: + mov r1, #2 + mov r0, r8 + mov r2, r1 + add r3, sp, #0x4c + bl DrawTextInWindow + mov r0, r8 + bl UpdateWindow + ldr r0, [sp, #0x28] + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + ldr r0, [sp, #0x28] + mov r2, #1 + add r0, r0, #4 + mov r1, #0 + mov r3, r2 + bl DrawTileGrid + b _02384054 +_02383F7C: + add r0, r0, #0x1000 + ldr r1, [r0, #0x198] + cmp r1, #0x7f + beq _02384054 + ldr r1, [r0, #0x19c] + ldrsh r0, [r1, #4] + ldrsh r1, [r1, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _02383FE4 + ldrsh r0, [r0, #4] +#if defined(EUROPE) + add r0, r0, #0x4b + add r0, r0, #0x2f00 +#elif defined(JAPAN) + add r0, r0, #0x41 + add r0, r0, #0x1d00 +#else + add r0, r0, #0x49 + add r0, r0, #0x2f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r1, r0 + add r0, sp, #0x4c + bl strcpy + b _02383FF0 +_02383FE4: + ldr r1, _023848CC ; =ov31_02389F5C + add r0, sp, #0x4c + bl strcpy +_02383FF0: + mov r0, r8 + bl sub_02027B1C + mov r1, #2 + mov r0, r8 + mov r2, r1 + add r3, sp, #0x4c + bl DrawTextInWindow + mov r0, r8 + bl UpdateWindow + ldr r0, [r4] + mov r1, #0 + add r2, r0, #0x1000 + mov r0, #0x7f + str r0, [r2, #0x198] + ldr r0, [r4] + mov r2, #1 + add r0, r0, #0x1000 + ldr r8, [r0, #0x19c] + mov r0, r8 + bl TryPointCameraToMonster + mov r2, #1 + add r0, r8, #4 + mov r1, #0 + mov r3, r2 + bl DrawTileGrid +_02384054: + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl IsInventoryMenuActive + cmp r0, #0 + beq _02384088 + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDA8 + and r1, r0, #0xff + mov r0, #3 + bl Arm9StoreUnkFieldNa0x2029ED8 +_02384088: + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl IsInventoryMenuActive + cmp r0, #0 + bne _023841A4 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDBC + movs r4, r0 + bmi _0238419C + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + and r1, r4, #0xff + ldr r2, [r0] + mov r0, #3 + add r2, r2, #0x1000 + str r4, [r2, #0x1ac] + bl Arm9StoreUnkFieldNa0x2029ED8 + cmp fp, #0 + bne _02384138 + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r0, #6 + ldr r1, [r1] + mul r8, r4, r0 + add r0, r1, #0x1000 + ldrb r3, [r0, #0x1b2] + ldr r2, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + add r1, sl, #4 + str r3, [sp] + ldr r2, [r2] + ldr r0, [r0, #0x1ac] + ldr r2, [r2, #0x384] + mov r3, #0 + add r2, r2, r8 + ldrb r2, [r2, #1] + bl ov29_022EBAB0 + ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r0, [r0, #0x384] + add r0, r0, r8 + str r0, [sb, #4] + b _02384194 +_02384138: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r1, sl, #4 + ldr r0, [r0] + mov r2, #0 + add r0, r0, #0x1000 + ldrb r4, [r0, #0x1b2] + mov r3, #1 + str r4, [sp] + ldr r0, [r0, #0x1ac] + bl ov29_022EBAB0 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + strne r0, [sb, #4] + moveq r0, #0 + streq r0, [sb, #4] +_02384194: + mov r4, #1 + b _02384438 +_0238419C: + mov r4, #2 + b _02384438 +_023841A4: + ldrh r0, [sp, #0x42] + tst r0, #8 + beq _023842DC + ldr r0, _023848D0 ; =0x00003F04 + bl sub_02017C80 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDF4 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDBC + ldr r2, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r2] + add r1, r1, #0x1000 + str r0, [r1, #0x1ac] + ldr r1, [r2] + mov r0, #3 + add r1, r1, #0x1000 + ldr r1, [r1, #0x1ac] + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 + cmp fp, #0 + bne _02384278 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r3, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + mov r2, #6 + add r0, r0, #0x1000 + ldrb r4, [r0, #0x1b2] + ldr r0, [r0, #0x1ac] + add r1, sl, #4 + str r4, [sp] + ldr r4, [r3] + mov r3, #0 + ldr r4, [r4, #0x384] + mla r2, r0, r2, r4 + ldrb r2, [r2, #1] + bl ov29_022EBAB0 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r1, [r1] + add r0, r0, #0x1000 + ldr r2, [r1, #0x384] + ldr r1, [r0, #0x1ac] + mov r0, #6 + mla r0, r1, r0, r2 + str r0, [sb, #4] + b _023842D4 +_02384278: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r1, sl, #4 + ldr r0, [r0] + mov r2, #0 + add r0, r0, #0x1000 + ldrb r4, [r0, #0x1b2] + mov r3, #1 + str r4, [sp] + ldr r0, [r0, #0x1ac] + bl ov29_022EBAB0 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + strne r0, [sb, #4] + moveq r0, #0 + streq r0, [sb, #4] +_023842D4: + mov r4, #3 + b _02384438 +_023842DC: + tst r0, #4 + bne _023842F4 + tst r0, #0x800 + ldreq r0, [sp, #0x2c] + cmpeq r0, #0 + beq _02383D8C +_023842F4: + cmp r6, #0 + cmpeq fp, #0 + bne _02383D8C + ldr r0, [sp, #0x2c] + cmp r0, #0 + bne _02384314 + mov r0, #5 + bl PlaySeVolumeWrapper +_02384314: + bl ov29_02346E5C + bl SortItemsInBag + mov r8, #0 +_02384320: + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r8, lsl #2 + add r0, r0, #0x12000 + ldr fp, [r0, #0xb28 + OV31_023838E4_OFFSET] + mov r0, fp + bl EntityIsValid__02383658 + cmp r0, #0 + beq _02384374 + ldr r1, [fp, #0xb4] + ldrb r0, [r1, #0x62] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02384374 + ldrsh r0, [r1, #0x66] + cmp r0, #0xb7 + bne _02384374 + add r0, r1, #0x62 + bl ItemZInit +_02384374: + add r8, r8, #1 + cmp r8, #4 + blt _02384320 + ldr r0, [r4] + add r1, r0, #0x1000 + ldr r0, [sp, #0x38] + str r0, [r1, #0x198] + bl GetNbItemsInBag + movs r1, r0 + beq _023843C0 + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCC60 + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCCB0 + b _02383D8C +_023843C0: + mov r0, #1 + str r0, [sp, #0x30] + mov r4, #2 + b _02384438 +_023843D0: + add r0, r1, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCDF4 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r1, sl, #4 + ldr r0, [r0] + mov r2, #0 + add r0, r0, #0x1000 + ldrb r4, [r0, #0x1b2] + mov r3, #1 + str r4, [sp] + ldr r0, [r0, #0x1ac] + bl ov29_022EBAB0 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + bl GetTile + ldr r0, [r0, #0x10] + bl GetItemInfo + ldrb r1, [r0] + mov r4, #1 + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + moveq r0, #0 + str r0, [sb, #4] +_02384438: + mov r0, #0x14 + bl AdvanceFrame + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r1, [r0] + add r0, r1, #0x1000 + ldrb r0, [r0, #0x1b2] + cmp r0, #0 + bne _02384490 + add r0, r1, #0x1100 + ldrsb r0, [r0, #0x93] + bl ov10_022BCE44 + cmp r0, #0 + bne _02384490 + ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + ldr r0, [r0, #0x384] + ldrb r0, [r0] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + moveq r4, #2 +_02384490: + cmp r4, #2 + bne _023844AC + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #1 + b _023850D8 +_023844AC: + cmp r4, #0 + beq _023850D8 + cmp r4, #3 + bne _023844D8 + add r0, r7, #0x4a + bl ov29_022EBBE8 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_023844D8: + cmp r6, #0 + beq _023844FC + add r0, r7, #0x54 + bl ov29_022EBB68 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_023844FC: + bl ov29_022EBB8C + mov r1, r0 + mov r0, sl + mov r2, #0xa + bl GetItemToUseByIndex + mov r8, r0 + ldr r0, [sl, #0xb4] + str r0, [sp, #0x14] + bl ov29_022EBA70 + bl ov29_022EBB98 + cmp r0, #0x90 + bhs _023849F4 + bl ov29_022EBB98 + cmp r0, #0x80 + bne _02384598 + ldrsh r1, [r8, #4] + mov r0, #9 + bl AddDungeonSubMenuOption + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #6 + beq _02384598 + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _02384570 + bl IsBagFull + b _02384588 +_02384570: + ldr r0, [sp, #0x14] + ldrb r0, [r0, #0x62] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_02384588: + cmp r0, #0 + beq _02384598 + mov r0, #9 + bl DisableDungeonSubMenuOption +_02384598: + bl ov29_022EBB98 + cmp r0, #0x80 + bne _023845C4 + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _023845C4 + ldrsh r1, [r8, #4] + mov r0, #0xa + bl AddDungeonSubMenuOption +_023845C4: + mov r0, r8 + bl GetItemAction + movs r4, r0 + beq _02384654 + ldrsh r1, [r8, #4] + bl AddDungeonSubMenuOption + ldrb r0, [r8] + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _023845FC + mov r0, r4 + bl DisableDungeonSubMenuOption +_023845FC: + mov r0, r8 + bl ov29_023468FC + cmp r0, #0 + bne _02384614 + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384614: + mov r0, sl + bl MonsterHasEmbargoStatus + cmp r0, #0 + bne _02384634 + mov r0, r8 + bl ov29_02348D00 + cmp r0, #0 + beq _0238463C +_02384634: + mov r0, r4 + bl DisableDungeonSubMenuOption +_0238463C: + mov r0, r8 + bl IsItemUsableNow + cmp r0, #0 + bne _02384654 + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384654: + bl ov29_022EBB98 + cmp r0, #0x33 + bhs _02384728 + ldrb r0, [r8, #1] + cmp r0, #0 + bne _02384728 + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #0 + beq _0238468C + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #1 + bne _02384728 +_0238468C: + ldrb r0, [r8] + ldrsh r1, [r8, #4] + tst r0, #0x10 + beq _023846A8 + mov r0, #0x3d + bl AddDungeonSubMenuOption + b _023846B0 +_023846A8: + mov r0, #0x3c + bl AddDungeonSubMenuOption +_023846B0: + ldr r0, _023848A4 ; =BAG_ITEMS_PTR_MIRROR + mov r3, #0 + ldr r4, [r0] + mov lr, #1 + mov r0, #6 + b _02384720 +_023846C8: + mul r1, r3, r0 + ldr r2, [r4, #0x384] + ldrb fp, [r2, r1] + tst fp, #1 + movne ip, lr + moveq ip, #0 + tst ip, #0xff + beq _0238471C + ldrb r1, [r2, r1] + tst r1, #0x10 + beq _0238471C + tst fp, #8 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _0238471C + mov r0, #0x3c + bl DisableDungeonSubMenuOption + mov r0, #0x3d + bl DisableDungeonSubMenuOption + b _02384728 +_0238471C: + add r3, r3, #1 +_02384720: + cmp r3, #0x32 + blt _023846C8 +_02384728: + bl ov29_022EBB98 + cmp r0, #0x81 + beq _02384804 + bl ov29_022EBB98 + cmp r0, #0x80 + beq _02384860 + ldrsh r1, [r8, #4] + mov r2, #0 + mov r0, #0x36 + str r2, [sp, #0x18] + bl AddDungeonSubMenuOption + mov r4, #0 +_02384758: + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] + str r0, [sp, #0x1c] + bl EntityIsValid__02383658 + cmp r0, #0 + beq _023847A0 + ldr r0, [sp, #0x1c] + mov r1, #0 + ldr fp, [r0, #0xb4] +#ifdef JAPAN + strb r1, [fp, #0x15d] +#else + strb r1, [fp, #0x161] +#endif + bl ov29_02300BF8 + cmp r0, #0 + moveq r0, #1 + streq r0, [sp, #0x18] +#ifdef JAPAN + streqb r0, [fp, #0x15d] +#else + streqb r0, [fp, #0x161] +#endif +_023847A0: + add r4, r4, #1 + cmp r4, #4 + blt _02384758 + add r0, sp, #0x40 + bl sub_0204F10C + cmp r0, #0 + beq _023847EC + bl GetCurrentBagCapacity + cmp r0, #2 + bge _023847EC + ldrsh r0, [sp, #0x40] + sub r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #1 + movls r0, #0 + strls r0, [sp, #0x18] +_023847EC: + ldr r0, [sp, #0x18] + cmp r0, #0 + bne _02384860 + mov r0, #0x36 + bl DisableDungeonSubMenuOption + b _02384860 +_02384804: + ldr r0, _023848A8 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _02384860 + ldrsh r1, [r8, #4] + mov r0, #0x37 + bl AddDungeonSubMenuOption + mov r0, r8 + bl IsHeldItemInBag + cmp r0, #0 + beq _02384840 + ldrsh r1, [r8, #4] + mov r0, #0x3e + bl AddDungeonSubMenuOption +_02384840: + mov r0, sl + bl CheckVariousConditions + cmp r0, #0 + beq _02384860 + mov r0, #0x37 + bl DisableDungeonSubMenuOption + mov r0, #0x3e + bl DisableDungeonSubMenuOption +_02384860: + bl ov29_022EBB98 + cmp r0, #0x33 + bhs _02384908 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + bl GetTile + mov r4, r0 + ldr r0, [r4, #0x10] + cmp r0, #0 + bne _023848D4 + ldrsh r1, [r8, #4] + mov r0, #8 + bl AddDungeonSubMenuOption + b _02384908 + .align 2, 0 +#ifdef JAPAN +#define OV31_023838E4_OFFSET_2 0x1458 +#else +#define OV31_023838E4_OFFSET_2 0 +#endif +_02384898: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C +_0238489C: .word OVERLAY31_JP_STRING +_023848A0: .word 0x000008E5 + OV31_023838E4_OFFSET_2 +_023848A4: .word BAG_ITEMS_PTR_MIRROR +_023848A8: .word DUNGEON_PTR +_023848AC: .word ov31_02383478 +_023848B0: .word DUNGEON_WINDOW_PARAMS_10 +_023848B4: .word ov31_02383854 +_023848B8: .word DUNGEON_WINDOW_PARAMS_11 +_023848BC: .word 0x000008E3 + OV31_023838E4_OFFSET_2 +_023848C0: .word DUNGEON_WINDOW_PARAMS_12 +_023848C4: .word 0x00400813 +#ifndef JAPAN +_023848C8: .word 0x000008E7 +#endif +_023848CC: .word ov31_02389F5C +_023848D0: .word 0x00003F04 +_023848D4: + ldr r0, [r0] + cmp r0, #3 + bne _02384908 + ldrsh r1, [r8, #4] + mov r0, #0x3a + bl AddDungeonSubMenuOption + ldr r0, [r4, #0x10] + bl ov29_022E1620 + bl ov29_02348D00 + cmp r0, #0 + beq _02384908 + mov r0, #0x3a + bl DisableDungeonSubMenuOption +_02384908: + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #0 + bne _02384928 + ldrsh r1, [r8, #4] + mov r0, #0x27 + bl AddDungeonSubMenuOption + b _02384950 +_02384928: + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #1 + ldrsh r1, [r8, #4] + bne _02384948 + mov r0, #0x41 + bl AddDungeonSubMenuOption + b _02384950 +_02384948: + mov r0, #0xb + bl AddDungeonSubMenuOption +_02384950: + ldr r0, [sp, #0x14] + bl MonsterCanThrowItems + cmp r0, #0 + bne _02384978 + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption + mov r0, #0xb + bl DisableDungeonSubMenuOption +_02384978: + mov r0, sl + bl MonsterHasEmbargoStatus + cmp r0, #0 + beq _023849A0 + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption + mov r0, #0xb + bl DisableDungeonSubMenuOption +_023849A0: + mov r0, r8 + bl ov29_02348D00 + cmp r0, #0 + beq _023849D8 + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption + mov r0, #0xb + bl DisableDungeonSubMenuOption + mov r0, #0xa + bl DisableDungeonSubMenuOption + mov r0, #9 + bl DisableDungeonSubMenuOption +_023849D8: + mov r0, r8 + bl IsItemUsableNow + cmp r0, #0 + bne _02384C48 + mov r0, #0xb + bl DisableDungeonSubMenuOption + b _02384C48 +_023849F4: + bl ov29_022EBB98 + ldr r1, _023848A8 ; =DUNGEON_PTR + sub r2, r0, #0x90 + ldr r0, [r1] + add r0, r0, r2, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] + str r0, [sp, #0x20] + bl EntityIsValid__02383658 + cmp r0, #0 + beq _02384C48 + mov r0, #0 + str r0, [sp, #0x24] + ldr r0, [sp, #0x20] + ldr r4, [sp, #0x24] + mov r1, r0 + ldr fp, [r1, #0xb4] + bl CheckVariousConditions + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #0x24] + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #5 + ldrsh r0, [r8, #4] + moveq r4, #1 + bl GetItemCategoryVeneer + cmp r0, #9 + ldr r0, _023848A8 ; =DUNGEON_PTR + moveq r4, #1 + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _02384AC0 + ldrsh r1, [r8, #4] + mov r0, #0x37 + bl AddDungeonSubMenuOption + mov r0, r8 + bl IsHeldItemInBag + cmp r0, #0 + beq _02384AA4 + ldrsh r1, [r8, #4] + mov r0, #0x3e + bl AddDungeonSubMenuOption +_02384AA4: + ldr r0, [sp, #0x24] + cmp r0, #0 + beq _02384AC0 + mov r0, #0x37 + bl DisableDungeonSubMenuOption + mov r0, #0x3e + bl DisableDungeonSubMenuOption +_02384AC0: + ldrb r0, [fp, #7] + cmp r0, #0 + beq _02384BEC + mov r0, r8 + bl GetItemAction + movs r4, r0 + beq _02384B5C + ldrsh r1, [r8, #4] + bl AddDungeonSubMenuOption + ldrb r0, [r8] + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02384B04 + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384B04: + mov r0, r8 + bl ov29_023468FC + cmp r0, #0 + bne _02384B1C + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384B1C: + ldr r0, [sp, #0x20] + bl MonsterHasEmbargoStatus + cmp r0, #0 + bne _02384B3C + mov r0, r8 + bl ov29_02348D00 + cmp r0, #0 + beq _02384B44 +_02384B3C: + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384B44: + mov r0, r8 + bl IsItemUsableNow + cmp r0, #0 + bne _02384B5C + mov r0, r4 + bl DisableDungeonSubMenuOption +_02384B5C: + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #0 + bne _02384B7C + ldrsh r1, [r8, #4] + mov r0, #0x27 + bl AddDungeonSubMenuOption + b _02384B98 +_02384B7C: + ldrsh r0, [r8, #4] + bl GetItemCategoryVeneer + cmp r0, #1 + bne _02384B98 + ldrsh r1, [r8, #4] + mov r0, #0x41 + bl AddDungeonSubMenuOption +_02384B98: + ldr r0, [sp, #0x14] + bl MonsterCanThrowItems + cmp r0, #0 + bne _02384BB8 + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption +_02384BB8: + mov r0, sl + bl MonsterHasEmbargoStatus + cmp r0, #0 + bne _02384BD8 + mov r0, sl + bl MonsterHasEmbargoStatus + cmp r0, #0 + beq _02384C48 +_02384BD8: + mov r0, #0x27 + bl DisableDungeonSubMenuOption + mov r0, #0x41 + bl DisableDungeonSubMenuOption + b _02384C48 +_02384BEC: + ldrsh r1, [r8, #4] + mov r0, #0x38 + bl AddDungeonSubMenuOption + cmp r4, #0 + beq _02384C08 + mov r0, #0x38 + bl DisableDungeonSubMenuOption +_02384C08: + ldr r0, [sp, #0x20] + bl MonsterHasEmbargoStatus + cmp r0, #0 + bne _02384C28 + mov r0, r8 + bl ov29_02348D00 + cmp r0, #0 + beq _02384C30 +_02384C28: + mov r0, #0x38 + bl DisableDungeonSubMenuOption +_02384C30: + mov r0, r8 + bl IsItemUsableNow + cmp r0, #0 + bne _02384C48 + mov r0, #0x38 + bl DisableDungeonSubMenuOption +_02384C48: + ldrsh r1, [r8, #4] + mov r0, #0xc + bl AddDungeonSubMenuOption + bl ov29_022EB9A0 + bl ov29_022EBA84 + mov r2, #0 + ldr r1, _02385128 ; =ov29_0237C91C + ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + b _02384C9C +_02384C6C: + add r8, r1, r2, lsl #3 + ldr r3, [r4] + ldrh r8, [r8, #6] + add r3, r3, r2, lsl #3 + add r3, r3, #0x1100 + strh r8, [r3, #0x38] + mov r8, r2, lsl #3 + ldr r3, [r4] + add r2, r2, #1 + add r3, r3, r8 + add r3, r3, #0x1000 + str r2, [r3, #0x13c] +_02384C9C: + cmp r2, r0 + blt _02384C6C + ldr r3, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C +#ifdef JAPAN + mov r4, #0x1d40 +#else + ldr r4, _0238512C ; =0x000008E8 +#endif + ldr r1, [r3] + mvn r0, #0 + add r1, r1, r2, lsl #3 + add r1, r1, #0x1100 + strh r4, [r1, #0x38] + ldr r1, [r3] + mov r4, #0 + add r1, r1, r2, lsl #3 + add r1, r1, #0x1000 + str r0, [r1, #0x13c] + ldr r1, [r3] + add r1, r1, r2, lsl #3 + add r1, r1, #0x1100 + strh r4, [r1, #0x40] + ldr r1, [r3] + add r1, r1, r2, lsl #3 + add r1, r1, #0x1000 + str r0, [r1, #0x144] + ldr r0, [r3] + add r0, r0, #0x92 + add r0, r0, #0x1100 + bl ov29_0234E988 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r2, r4 + ldr r1, [r0] + add r0, r1, #0x138 + add r1, r1, #0x188 + add r0, r0, #0x1000 + add r1, r1, #0x1000 + bl ov31_0238513C + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + add r2, sp, #0x500 + ldr r1, [r0] + add r2, r2, #0x9c + add r0, r1, #0x188 + add r0, r0, #0x1000 + str r0, [sp, #0x5fc] + add r0, r1, #0x1000 + add r3, r1, #0x138 + ldrb r0, [r0, #0x1b2] + ldr r1, _02385130 ; =0x00000213 + add r3, r3, #0x1000 + cmp r0, #0 + ldrne r0, _02385134 ; =DUNGEON_WINDOW_PARAMS_13 + ldreq r0, _02385138 ; =DUNGEON_WINDOW_PARAMS_9 + bl CreateParentMenuFromStringIds + ldr r4, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r8, #0x14 + ldr r1, [r4] + add r1, r1, #0x1000 + strb r0, [r1, #0x192] +_02384D78: + ldr r0, [r4] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x92] + bl IsParentMenuActive + cmp r0, #0 + bne _02384E24 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x92] + bl sub_0202ABB0 + cmp r0, #0 + blt _02384E04 + ldr r1, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + sub r2, r0, #1 + ldr r0, [r1] + add r0, r0, #0x1000 + str r2, [r0, #0x1a4] + ldr r0, [r1] + add r0, r0, #0x1000 + ldr r0, [r0, #0x1a4] + bl ov29_022EB804 + cmp r0, #0 + mov r4, #0 + beq _02384E30 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r2, _02385128 ; =ov29_0237C91C + ldr r1, [r0] + add r0, r7, #0x4a + add r1, r1, #0x1000 + ldr r1, [r1, #0x1a4] + mov r1, r1, lsl #3 + ldrh r1, [r2, r1] + bl ov29_022EBBA8 + b _02384E30 +_02384E04: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mov r4, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + ldrb r0, [r0, #0x1b2] + cmp r0, #0 + movne r4, #2 + b _02384E30 +_02384E24: + mov r0, r8 + bl AdvanceFrame + b _02384D78 +_02384E30: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x92 + add r0, r0, #0x1100 + bl ov29_0234E988 + ldr r0, _023848A8 ; =DUNGEON_PTR + mov r1, #0 + ldr r0, [r0] + cmp r4, #1 + add r0, r0, #0x1a000 +#ifdef JAPAN + strb r1, [r0, #0x1a3] +#else + strb r1, [r0, #0x247] +#endif + ldreq r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldreq r0, [r0] + addeq r0, r0, #0x1000 + ldreqb r0, [r0, #0x1b2] + cmpeq r0, #0 + beq _02383B08 + cmp r4, #2 + bne _02384E90 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #1 + b _023850D8 +_02384E90: + ldrh r0, [r7, #0x4a] + cmp r0, #0x38 + cmpne r0, #0x37 + cmpne r0, #0x3e + bne _02384EC4 + bl ov29_022EBB98 + sub r2, r0, #0x90 + mov r0, #0xb + mov r1, #0 + strb r2, [r7, #0x4e] + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_02384EC4: + cmp r0, #0x36 + bne _02384FA0 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x94] + cmp r0, r1 + beq _02384F00 + bl CloseTextBox2 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x194] +_02384F00: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x95] + cmp r0, r1 + beq _02384F34 + bl CloseTextBox2 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x195] +_02384F34: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x93 + add r0, r0, #0x1100 + bl ov31_02383768 + mov r0, #0x62 + bl AdvanceFrame + add r0, sp, #0x48 + mov r1, #2 + mov r2, #0 +#ifndef JAPAN + mov r3, #1 +#endif + bl ov31_023877EC + cmp r0, #0 + beq _02384F88 + ldr r2, [sp, #0x48] + mov r0, #0 + mov r1, r0 + strb r2, [r7, #0x54] + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_02384F88: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #1 + bl ov29_022EB398 + b _02383B08 +_02384FA0: + cmp r0, #0x12 + beq _02384FC0 + add r0, r0, #0xf3 + add r0, r0, #0xff00 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #1 + bhi _023850C8 +_02384FC0: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x94] + cmp r0, r1 + beq _02384FF4 + bl CloseTextBox2 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x194] +_02384FF4: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1100 + ldrsb r0, [r0, #0x95] + cmp r0, r1 + beq _02385028 + bl CloseTextBox2 + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + strb r1, [r0, #0x195] +_02385028: + ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C + ldr r0, [r0] + add r0, r0, #0x93 + add r0, r0, #0x1100 + bl ov31_02383768 + mov r0, #0x62 + bl AdvanceFrame + mov r0, #0x62 + bl AdvanceFrame +#ifdef JAPAN + add r0, sp, #0x44 + mov r1, #3 + mov r2, #1 +#else + mov r2, #1 + add r0, sp, #0x44 + mov r1, #3 + mov r3, r2 +#endif + bl ov31_023877EC + cmp r0, #0 + beq _023850B0 + ldr r1, [sp, #0x44] + ldr r0, _023848A8 ; =DUNGEON_PTR + strb r1, [r7, #0x54] + ldr r2, [r0] + ldr r0, [sp, #0x44] + mov r1, #0 + add r0, r2, r0, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] + mov r2, #1 + bl TryPointCameraToMonster + mov r0, #0 + mov r2, #1 + mov r1, r0 +#ifdef JAPAN + strb r2, [r7, #0x238] +#else + strb r2, [r7, #0x23c] +#endif + bl ov29_022EA428 + mov r5, #0 + b _023850D8 +_023850B0: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #1 + bl ov29_022EB398 + b _02383B08 +_023850C8: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r5, #0 +_023850D8: + ldr r0, _023848A8 ; =DUNGEON_PTR + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x1a000 + strb r1, [r0, #0x247 + OV31_023838E4_OFFSET] + bl HideTileGrid + bl ov31_023837C8 + mov r0, #0x14 + bl AdvanceFrame + ldr r0, [sp, #0x30] + cmp r0, #0 + beq _02385118 + ldr r1, _023848A0 ; =0x000008E5 + mov r0, #0 + mov r2, #1 + bl DisplayMessage +_02385118: + mov r0, r5 +_0238511C: + add sp, sp, #0x234 + add sp, sp, #0x400 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02385128: .word ov29_0237C91C +#ifndef JAPAN +_0238512C: .word 0x000008E8 +#endif +_02385130: .word 0x00000213 +_02385134: .word DUNGEON_WINDOW_PARAMS_13 +_02385138: .word DUNGEON_WINDOW_PARAMS_9 + arm_func_end ov31_023838E4 + + arm_func_start ov31_0238513C +ov31_0238513C: ; 0x0238513C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + bl ov29_022EBA84 + mov r4, #0 + mov r5, r0 + mov sb, #3 + mov sl, r4 + b _02385190 +_02385164: + mov r0, r4 + mov r1, r6 + bl ov29_022EB2C8 + mov r1, r4, lsl #3 + strh r0, [r8, r1] + mov r0, r4 + bl ov29_022EB804 + cmp r0, #0 + strneb sl, [r7, r4] + streqb sb, [r7, r4] + add r4, r4, #1 +_02385190: + cmp r4, r5 + blt _02385164 +#ifdef JAPAN + mov r1, r4, lsl #3 + mov r2, #0x1d40 +#else + ldr r2, _023851BC ; =0x000008E8 + mov r1, r4, lsl #3 +#endif + add r0, r4, #1 + strh r2, [r8, r1] + mov r1, #0 + strb r1, [r7, r4] + mov r0, r0, lsl #3 + strh r1, [r8, r0] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +#ifndef JAPAN + .align 2, 0 +_023851BC: .word 0x000008E8 +#endif + arm_func_end ov31_0238513C + + arm_func_start MovesMenu +MovesMenu: ; 0x023851C0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0xc + ldr r1, _023853B8 ; =DUNGEON_PTR + ldrb r4, [r0, #4] + ldr r0, [r1] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r5, [r0, #0xa84] +#else + ldr r5, [r0, #0xb28] +#endif + str r5, [sp, #8] +_023851E4: + mov r6, #0 + ldr sb, _023853B8 ; =DUNGEON_PTR + mov r7, r6 + mov r8, r6 +_023851F4: + ldr r0, [sb] + add r0, r0, r8, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + bl ov29_02302388 + cmp r0, #0 + beq _0238521C + cmp r8, r4 + moveq r6, r7 + add r7, r7, #1 +_0238521C: + add r8, r8, #1 + cmp r8, #4 + blt _023851F4 + ldr r0, [sp, #8] + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + ldr r0, [sp, #8] + mov r2, #1 + mov r3, r2 + add r0, r0, #4 + mov r1, #0 + bl DrawTileGrid + mov r0, #1 + bl ov29_022EB398 + str r7, [sp] + mov r1, #0 + mov r3, r6 + add r0, sp, #8 + mov r2, #1 + str r1, [sp, #4] + bl HandleMovesMenu + cmp r0, #0 + bne _023853B0 + bl ov29_022F0B9C + cmp r0, #0x1d + bne _0238529C + bl GetLeaderAction + bl ov31_02385FE0 + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_0238529C: + bl ov29_022F0B9C + cmp r0, #0x1e + bne _023852CC + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + mov r1, #0 + bl ov31_023860A4 + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_023852CC: + bl ov29_022F0B9C + cmp r0, #0x33 + bne _023852FC + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + mov r1, #0 + bl ov31_023860A4 + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_023852FC: + bl ov29_022F0B9C + cmp r0, #0x1f + bne _02385328 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + bl ov31_0238619C + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_02385328: + bl ov29_022F0B9C + cmp r0, #0x20 + bne _02385354 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + bl ov31_02386204 + mov r0, #1 + bl ov29_022EB398 + b _02385380 +_02385354: + bl ov29_022F0B9C + cmp r0, #0x21 + bne _02385380 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl GetLeaderAction + mov r1, #1 + bl ov31_02386308 + mov r0, #1 + bl ov29_022EB398 +_02385380: + bl ov29_022F0B9C + cmp r0, #0 + beq _023851E4 + mov r0, r5 + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + mov r2, #1 + mov r3, r2 + add r0, r5, #4 + mov r1, #0 + bl DrawTileGrid +_023853B0: + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_023853B8: .word DUNGEON_PTR + arm_func_end MovesMenu + + arm_func_start HandleMovesMenuWrapper0 +HandleMovesMenuWrapper0: ; 0x023853BC + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr lr, [sp, #0x10] + mov ip, #0 + str lr, [sp] + str ip, [sp, #4] + bl HandleMovesMenu + add sp, sp, #8 + ldmia sp!, {r3, pc} + arm_func_end HandleMovesMenuWrapper0 + + arm_func_start HandleMovesMenuWrapper1 +HandleMovesMenuWrapper1: ; 0x023853E0 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr lr, [sp, #0x10] + mov ip, #1 + str lr, [sp] + str ip, [sp, #4] + bl HandleMovesMenu + add sp, sp, #8 + ldmia sp!, {r3, pc} + arm_func_end HandleMovesMenuWrapper1 + + arm_func_start HandleMovesMenu +HandleMovesMenu: ; 0x02385404 +#ifdef JAPAN +#define HANDLE_MOVES_MENU_OFFSET -0xA4 +#define HANDLE_MOVES_MENU_OFFSET_2 -4 +#else +#define HANDLE_MOVES_MENU_OFFSET 0 +#define HANDLE_MOVES_MENU_OFFSET_2 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x12c + str r1, [sp, #4] + str r0, [sp] + mov r0, #0x14 + mov r1, #8 + str r2, [sp, #8] + bl MemAlloc + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r2, #0 + str r0, [r1, #8] + str r2, [r0, #0x10] + mov r0, #0x62 + bl AdvanceFrame + ldr r0, [sp, #0x154] + cmp r0, #1 + bne _0238547C + ldr r0, _02385F74 ; =DUNGEON_WINDOW_PARAMS_14 + bl CreateDialogueBox + mov r1, #0 + str r0, [sp, #0x14] + bl sub_0202F474 + ldr r0, _02385F78 ; =0x00003FCD + bl StringFromId + mov r2, r0 + ldr r0, [sp, #0x14] + ldr r1, _02385F7C ; =0x00000404 + mov r3, #0 + bl ShowStringInDialogueBox + b _023854AC +_0238547C: + ldr r0, _02385F80 ; =DUNGEON_WINDOW_PARAMS_16 + bl CreateDialogueBox + mov r1, #0 + str r0, [sp, #0x14] + bl sub_0202F474 + ldr r0, _02385F84 ; =0x00003FCC + bl StringFromId + mov r2, r0 + ldr r0, [sp, #0x14] + ldr r1, _02385F7C ; =0x00000404 + mov r3, #0 + bl ShowStringInDialogueBox +_023854AC: + ldr r0, [sp] + ldr r6, [r0] + ldr sl, [r6, #0xb4] + bl GetLeader + ldr r7, [r0, #0xb4] + mov r0, r6 + bl sub_0203F9CC + mov r8, #0 + ldr sb, _02385F88 ; =DUNGEON_PTR + mov r4, r8 + add fp, sp, #0x2c +_023854D8: + ldr r0, [sb] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] + bl ov29_02302388 + cmp r0, #0 + beq _02385514 + ldr r0, [sb] + str r4, [fp, r8, lsl #2] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] + cmp r6, r0 + streq r8, [sp, #0x10] + add r8, r8, #1 +_02385514: + add r4, r4, #1 + cmp r4, #4 + blt _023854D8 + ldr r0, [sp, #0x154] + ldr r2, [sp, #0x10] + mov r1, r8 + bl sub_0204018C + str r0, [sp, #0x18] + bl sub_02041094 + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + str r0, [r1] + mov r0, #0x1e + bl AdvanceFrame +_02385548: + mov r4, #0 + str r4, [sp, #0xc] + mov sb, r4 + bl ov29_022EA62C + ldr fp, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 +_0238555C: + bl sub_020407EC + mov r8, r0 + cmp r8, #9 + addls pc, pc, r8, lsl #2 + b _02385680 +_02385570: ; jump table + b _02385680 ; case 0 + b _0238562C ; case 1 + b _02385678 ; case 2 + b _023855A0 ; case 3 + b _023855A0 ; case 4 + b _023855A8 ; case 5 + b _02385634 ; case 6 + b _0238566C ; case 7 + b _02385650 ; case 8 + b _02385598 ; case 9 +_02385598: + mov sb, #1 + b _02385680 +_023855A0: + mov sb, #1 + b _02385680 +_023855A8: + ldr r0, [sp, #0x18] + bl sub_02030A18 + mov r1, #0 + str r1, [fp] + add r1, sp, #0x2c + str r0, [sp, #0x10] + ldr sb, [r1, r0, lsl #2] + ldr r0, _02385F88 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, sb, lsl #2 + add r0, r0, #0x12000 + ldr r6, [r0, #0xb28 + HANDLE_MOVES_MENU_OFFSET] + ldr r0, [sp] + ldr sl, [r6, #0xb4] + str r6, [r0] + bl GetLeaderMonster + strb sb, [r0, #0x4e] + mov r0, r6 + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + mov r2, #1 + add r0, r6, #4 + mov r1, #0 + mov r3, r2 + bl DrawTileGrid + mov r0, #0 + bl ov29_022EB398 + mov r0, r6 + bl sub_0203F9CC + bl sub_02041178 + mov sb, #1 + b _02385680 +_0238562C: + mov r4, #1 + b _02385680 +_02385634: + ldrb r1, [r6, #0x24] + mov r0, #2 + str r0, [sp, #0xc] + strb r1, [r7, #0x4e] + ldr r0, [fp] + strb r0, [r7, #0x54] + b _02385680 +_02385650: + ldrb r1, [r6, #0x24] + mov r0, #3 + str r0, [sp, #0xc] + strb r1, [r7, #0x4e] + ldr r0, [fp] + strb r0, [r7, #0x54] + b _02385680 +_0238566C: + mov r0, #1 + str r0, [sp, #0xc] + b _02385680 +_02385678: + bl sub_02041094 + str r0, [fp] +_02385680: + cmp r8, #9 + addls pc, pc, r8, lsl #2 + b _023856D0 +_0238568C: ; jump table + b _023856D0 ; case 0 + b _023856D0 ; case 1 + b _023856D0 ; case 2 + b _023856B4 ; case 3 + b _023856B4 ; case 4 + b _023856C4 ; case 5 + b _023856D0 ; case 6 + b _023856D0 ; case 7 + b _023856D0 ; case 8 + b _023856B4 ; case 9 +_023856B4: + mov r0, r6 + bl sub_0203FD44 + str r0, [fp] + b _023856D0 +_023856C4: + mov r0, r6 + bl sub_0203F9CC + bl sub_02041178 +_023856D0: + mov r0, #0x1e + bl AdvanceFrame + cmp r8, #0 + beq _0238555C + cmp r4, #0 + bne _02385EFC + cmp sb, #0 + bne _02385548 + ldr r0, [sp, #0xc] + cmp r0, #1 + bne _02385738 + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldrb r1, [r6, #0x24] + ldr r2, [r0] + add r0, r7, #0x4a + mov r2, r2, lsl #0x10 + mov r2, r2, asr #0x10 + bl ov29_022EBC2C + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #8 + mov r1, #0x1b + bl ov29_022EA370 + mov r4, #0 + b _02385EFC +_02385738: + ldr r8, [r6, #0xb4] + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + add sb, r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2 + ldr fp, [r0] + bl ov29_022EBA70 + ldrb r0, [r8, #7] + cmp r0, #0 + beq _023857B0 + ldr r0, [sp, #8] + cmp r0, #0 + beq _02385770 + mov r0, #0x14 + mov r1, #0 + bl AddDungeonSubMenuOption +_02385770: + ldrb r0, [sb, fp, lsl #3] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _023857BC + ldrb r0, [sb, fp, lsl #3] + mov r1, #0 + tst r0, #8 + beq _023857A4 + mov r0, #0x33 + bl AddDungeonSubMenuOption + b _023857BC +_023857A4: + mov r0, #0x1e + bl AddDungeonSubMenuOption + b _023857BC +_023857B0: + mov r0, #0x1f + mov r1, #0 + bl AddDungeonSubMenuOption +_023857BC: + ldr r0, [sp, #4] + cmp r0, #0 + beq _023857E0 + mov r0, #0x20 + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0x21 + mov r1, #0 + bl AddDungeonSubMenuOption +_023857E0: + mov r0, #0x1d + mov r1, #0 + bl AddDungeonSubMenuOption + ldr r0, [sp, #4] + cmp r0, #0 + bne _02385804 + mov r0, #0x20 + bl DisableDungeonSubMenuOption + b _0238595C +_02385804: + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr fp, [r0] + add r0, r8, fp, lsl #3 + add r0, r0, #0x100 + ldrh r0, [r0, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] + mov sb, fp + bl IsNot2TurnsMoveOrSketch + cmp r0, #0 + moveq r0, #0 + beq _0238592C + add sb, sb, #1 + b _02385920 +_02385834: + add r0, r8, sb, lsl #3 + ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02385928 + add r0, r8, sb, lsl #3 + add r0, r0, #0x100 + ldrh r0, [r0, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] + bl IsNot2TurnsMoveOrSketch + cmp r0, #0 + beq _02385928 + add r0, r8, sb, lsl #3 + ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r0, #2 + bne _0238591C + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 + b _023858A4 +_02385888: + add r0, r8, r3, lsl #3 + ldrb r0, [r0, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r0, #2 + beq _023858AC + add r0, r3, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 +_023858A4: + cmp r3, #4 + blt _02385888 +_023858AC: + mov r0, fp, lsl #0x10 + mov r2, r0, asr #0x10 + b _0238590C +_023858B8: + add r0, r2, #1 + mov r0, r0, lsl #0x10 + mov r1, r0, asr #0x10 + add r0, r8, r2, lsl #3 + add sb, r0, #0x100 + b _023858F8 +_023858D0: + add fp, r8, r1, lsl #3 + add fp, fp, #0x100 + ldrh r0, [sb, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] + ldrh fp, [fp, #0x28 + HANDLE_MOVES_MENU_OFFSET_2] + cmp r0, fp + moveq r0, #0 + beq _0238592C + add r0, r1, #1 + mov r0, r0, lsl #0x10 + mov r1, r0, asr #0x10 +_023858F8: + cmp r1, r3 + blt _023858D0 + add r0, r2, #1 + mov r0, r0, lsl #0x10 + mov r2, r0, asr #0x10 +_0238590C: + cmp r2, r3 + blt _023858B8 + mov r0, #1 + b _0238592C +_0238591C: + add sb, sb, #1 +_02385920: + cmp sb, #4 + blt _02385834 +_02385928: + mov r0, #0 +_0238592C: + cmp r0, #0 + bne _0238593C + mov r0, #0x20 + bl DisableDungeonSubMenuOption +_0238593C: + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r0, r8 + ldr r1, [r1] + bl ov31_023863F8 + cmp r0, #0 + bne _0238595C + mov r0, #0x21 + bl DisableDungeonSubMenuOption +_0238595C: + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r0, r8 + ldr r1, [r1] + bl ov31_023863F8 + cmp r0, #0 + bne _0238597C + mov r0, #0x21 + bl DisableDungeonSubMenuOption +_0238597C: + ldr r0, [sp, #8] + cmp r0, #0 + beq _023859C0 + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r8, #0 + ldr r1, [r0] + cmp r1, #4 + bge _023859B0 + mov r0, r6 + mov r2, #1 + bl CanAiUseMove + cmp r0, #0 + movne r8, #1 +_023859B0: + cmp r8, #0 +#ifdef EUROPE + bne _023859C0 + mov r0, #0x14 + bl DisableDungeonSubMenuOption +_023859C0: + bl ov29_022EB9A0 + mov r0, #0x14 + bl ov29_022EB8B0 + mvn r1, #0 + cmp r0, r1 + moveq r8, #0 + beq _023865E4 + bl ov29_022EB804 + mov r8, r0 +_023865E4: +#else + bne _023859C0 + mov r0, #0x14 + bl DisableDungeonSubMenuOption +_023859C0: + bl ov29_022EB9A0 +#endif + ldr r0, [sp, #0xc] + cmp r0, #3 + bne _02385A40 + mov r0, #0x20 + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385A08 + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 + b _02385EFC +_02385A08: + mov r0, #0x21 + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385EFC + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 + b _02385EFC +_02385A40: + cmp r0, #2 + bne _02385AF8 + ldrb r0, [sl, #7] + cmp r0, #0 + beq _02385AC0 + mov r0, #0x1e + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385A88 + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 +_02385A88: + mov r0, #0x33 + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385EFC + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 + b _02385EFC +_02385AC0: + mov r0, #0x1f + bl ov29_022EB8B0 + mov r5, r0 + bl ov29_022EB804 + cmp r0, #0 + beq _02385EFC + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + mov r4, #0 + b _02385EFC +_02385AF8: + mov r0, #0x62 + bl AdvanceFrame + add r1, sp, #0x20 + add r0, sp, #0xd4 + mov r2, #0 + str r1, [sp, #0x9c] + bl ov31_0238513C + bl ov29_022EBA84 + mov r1, #0 + add r3, sp, #0xd4 + b _02385B30 +_02385B24: + add r2, r3, r1, lsl #3 + str r1, [r2, #4] + add r1, r1, #1 +_02385B30: + cmp r1, r0 + blt _02385B24 +#ifdef JAPAN + ldr r0, _02385F8C ; =0x00001D34 + add sb, sp, #0xd4 + mov sl, r1, lsl #3 + strh r0, [sb, sl] + add r8, sb, r1, lsl #3 + mvn r0, #0 + mov r4, #0 + str r0, [r8, #4] + strh r4, [r8, #8] + sub r0, r4, #2 + str r0, [r8, #0xc] + ldrh r0, [r8, #8] + add r3, sp, #0x20 + ldr r2, _02387200 ; =0x0000087A + strh r0, [r8, #0x18] + ldr fp, [r8, #0xc] + add r0, r3, r1 + str fp, [r8, #0x1c] + ldrh sl, [sb, sl] + ldrb fp, [r0, #1] + mov sb, #0x14 + strh sl, [r8, #0x10] + strb fp, [r0, #3] + ldrb sl, [r3, r1] + ldr fp, [r8, #4] + ldr r3, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + str fp, [r8, #0x14] + ldrh fp, [r8, #-8] + strb sl, [r0, #2] + ldrb sl, [r0, #-1] + strh fp, [r8, #8] + ldr fp, [r8, #-4] + ldr r3, [r3] + strb sl, [r0, #1] + str fp, [r8, #0xc] + strh r2, [r8, #-8] + str sb, [r8, #-4] + cmp r3, #0 + strb r4, [r0, #-1] + movle r2, #3 + strleb r2, [r0, #-1] + add r2, r3, #1 + mov r2, r2, lsl #0x10 + mov r4, r2, asr #0x10 + mov r3, #0 + ldr sb, _02387204 ; =0x0000087B + add r8, sp, #0xd4 + mov r2, r1, lsl #3 + strh sb, [r8, r2] + add r1, r8, r1, lsl #3 + mov r2, #0x15 + str r2, [r1, #4] +#else +#ifdef EUROPE + ldr r0, _02385F8C ; =0x000008DC + add sl, sp, #0xd4 + mov fp, r1, lsl #3 + strh r0, [sl, fp] + mvn r0, #0 + add sb, sl, r1, lsl #3 + str r0, [sb, #4] + mov ip, #0 + add r2, r0, #0xa40 + strh ip, [sb, #8] + sub r0, ip, #2 + str r0, [sb, #0xc] + ldrh r0, [sb, #8] + add r3, sp, #0x20 + mov lr, #0x14 +#else + ldr r2, _02385F8C ; =0x000008DC + add sl, sp, #0xd4 + mov fp, r1, lsl #3 + mvn r0, #0 + strh r2, [sl, fp] + add sb, sl, r1, lsl #3 + str r0, [sb, #4] + mov r8, #0 + add r2, r0, #0xa40 + strh r8, [sb, #8] + sub r0, r8, #2 + str r0, [sb, #0xc] + ldrh r0, [sb, #8] + add r3, sp, #0x20 + mov ip, #0x14 +#endif + strh r0, [sb, #0x18] + ldr r4, [sb, #0xc] + add r0, r3, r1 + str r4, [sb, #0x1c] + ldrh r4, [sl, fp] + ldrb sl, [r0, #1] + ldr fp, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + strh r4, [sb, #0x10] + strb sl, [r0, #3] + ldrb r4, [r3, r1] + ldr sl, [sb, #4] + ldr r3, [fp] + str sl, [sb, #0x14] + ldrh sl, [sb, #-8] + strb r4, [r0, #2] + ldrb r4, [r0, #-1] + strh sl, [sb, #8] + cmp r3, #0 + strb r4, [r0, #1] + ldr r4, [sb, #-4] +#ifdef EUROPE + strb ip, [r0, #-1] + str r4, [sb, #0xc] + strh r2, [sb, #-8] + movle r2, #3 + strleb r2, [r0, #-1] + add r2, r3, #1 + mov r2, r2, lsl #0x10 + str lr, [sb, #-4] + mov r4, r2, asr #0x10 + add sb, sp, #0xd4 + mov r2, r1, lsl #3 + mov r3, #0xa40 + strh r3, [sb, r2] + mov r3, #0 + add r1, sb, r1, lsl #3 + mov r2, #0x15 + str r2, [r1, #4] +#else + strb r8, [r0, #-1] + str r4, [sb, #0xc] + strh r2, [sb, #-8] + movle r2, #3 + str ip, [sb, #-4] + add r8, sp, #0xd4 + strleb r2, [r0, #-1] + mov sb, r1, lsl #3 + add r2, r8, r1, lsl #3 + add r1, r3, #1 + mov r1, r1, lsl #0x10 + mov r4, r1, asr #0x10 + mov r1, #0xa40 + strh r1, [r8, sb] + mov r1, #0x15 + mov r3, #0 + str r1, [r2, #4] +#endif +#endif + strb r3, [r0] + ldr sl, [r6, #0xb4] + mov r1, r3 + mov r2, #1 + b _02385C58 +_02385C1C: +#ifdef EUROPE + add sb, sl, r4, lsl #3 + ldrb sb, [sb, #0x124] + tst sb, #1 + movne sb, r2 + moveq sb, r1 + tst sb, #0xff + beq _02385C4C + add sb, sl, r4, lsl #3 + ldrb sb, [sb, #0x124] + tst sb, #2 +#else + add r8, sl, r4, lsl #3 + ldrb r8, [r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r8, #1 + movne r8, r2 + moveq r8, r1 + tst r8, #0xff + beq _02385C4C + add r8, sl, r4, lsl #3 + ldrb r8, [r8, #0x124 + HANDLE_MOVES_MENU_OFFSET_2] + tst r8, #2 +#endif + moveq r3, #1 + beq _02385C60 +_02385C4C: + add r4, r4, #1 + mov r4, r4, lsl #0x10 + mov r4, r4, asr #0x10 +_02385C58: + cmp r4, #4 + blt _02385C1C +_02385C60: + cmp r3, #0 + moveq r1, #3 + streqb r1, [r0] + ldr r0, _02385F90 ; =DUNGEON_WINDOW_PARAMS_15 + ldr r1, _02385F94 ; =0x80000213 + add r2, sp, #0x3c + add r3, sp, #0xd4 + bl CreateParentMenuFromStringIds + strb r0, [sp, #0x1c] + mov r0, #0x1b + bl AdvanceFrame +#ifdef EUROPE + add r4, sp, #0xd4 + mov fp, #0x1b + ldr sb, _02385F98 ; =0x0000099B + b _02385D0C +_02385CA0: + mov r0, fp + bl AdvanceFrame + mov r0, #0 +#else + add r8, sp, #0xd4 + mov sb, #0x1b + mov fp, #0 + ldr r4, _02385F98 ; =0x0000099B + b _02385D0C +_02385CA0: + mov r0, sb + bl AdvanceFrame + mov r0, fp +#endif + add r1, sp, #0x1e + bl GetPressedButtons + ldrh r0, [sp, #0x1e] + tst r0, #0x400 + beq _02385D0C + mov r5, #0 + b _02385CEC +_02385CC8: + mov r1, r5, lsl #3 +#ifdef EUROPE + add r0, r4, r5, lsl #3 + ldr r0, [r0, #4] + cmp r0, #0 + blt _02385CF4 + cmp r8, #0 + beq _0238690C + ldrh r0, [r4, r1] + cmp r0, sb + beq _02385CF4 +_0238690C: +#else + add r0, r8, r5, lsl #3 + ldr r0, [r0, #4] + cmp r0, #0 + blt _02385CF4 + ldrh r0, [r8, r1] + cmp r0, r4 + beq _02385CF4 +#endif + add r5, r5, #1 +_02385CEC: + cmp r5, #0xa + blt _02385CC8 +_02385CF4: +#ifdef EUROPE + add r0, r4, r5, lsl #3 +#else + add r0, r8, r5, lsl #3 +#endif + ldr r0, [r0, #4] + cmp r0, #0 + blt _02385D0C + cmp r5, #0xa + blt _02385D1C +_02385D0C: + ldrsb r0, [sp, #0x1c] + bl IsParentMenuActive + cmp r0, #0 + bne _02385CA0 +_02385D1C: + ldrh r0, [sp, #0x1e] + tst r0, #0x400 + bne _02385D34 + ldrsb r0, [sp, #0x1c] + bl sub_0202ABB0 + mov r5, r0 +_02385D34: + ldrsb r0, [sp, #0x1c] + bl sub_0202AB80 + cmp r0, #0 + ble _02385D78 + mvn r0, #0 + cmp r5, r0 + bne _02385D78 + ldrsb r0, [sp, #0x1c] + bl sub_0202AB80 + add r1, sp, #0xd4 + mov r0, r0, lsl #3 + ldrh r1, [r1, r0] + ldr r0, _02385F8C ; =0x000008DC + cmp r1, r0 + bne _02385D78 + mov r0, #0 + bl PlaySeVolumeWrapper +_02385D78: + add r0, sp, #0x1c + bl ov29_0234E988 + mov r0, #0x1b + bl AdvanceFrame + cmp r5, #0 + blt _02385ED8 + add r0, sp, #0xd4 + mov r1, r5, lsl #3 + ldrh r1, [r0, r1] + ldr r0, _02385F9C ; =0x000009A8 + cmp r1, r0 + bgt _02385DC8 + sub r0, r0, #3 + subs r0, r1, r0 + addpl pc, pc, r0, lsl #2 + b _02385DE4 +_02385DB8: ; jump table + b _02385DD4 ; case 0 + b _02385DD4 ; case 1 + b _02385DD4 ; case 2 + b _02385DD4 ; case 3 +_02385DC8: + ldr r0, _02385FA0 ; =0x000009BA + cmp r1, r0 + bne _02385DE4 +_02385DD4: + ldr r0, _02385FA4 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + b _02385DEC +_02385DE4: + mov r0, #0 + bl PlaySeVolumeWrapper +_02385DEC: + cmp r5, #0x14 + bne _02385E4C + mov r0, r6 + bl sub_0203F9CC + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_020416BC + ldr r2, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r1, r0, lsl #0x10 + str r0, [r2] + mov r0, r1, asr #0x10 + bl sub_020410A4 + mov r0, r6 + bl sub_0203FD44 + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + str r0, [r1] + ldr r0, [sp, #0x18] + bl sub_020307EC + bl sub_02041178 + mov r0, #0x1b + bl AdvanceFrame + b _02385548 +_02385E4C: + cmp r5, #0x15 + bne _02385EAC + mov r0, r6 + bl sub_0203F9CC + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_020416DC + ldr r2, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r1, r0, lsl #0x10 + str r0, [r2] + mov r0, r1, asr #0x10 + bl sub_020410A4 + mov r0, r6 + bl sub_0203FD44 + ldr r1, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + str r0, [r1] + ldr r0, [sp, #0x18] + bl sub_020307EC + bl sub_02041178 + mov r0, #0x1b + bl AdvanceFrame + b _02385548 +_02385EAC: + mov r0, r5 + bl ov29_022EB804 + cmp r0, #0 + beq _02385EF0 + mov r0, r6 + bl GetTeamMemberIndex + mov r2, r0 + mov r1, r5 + add r0, r7, #0x4a + bl ov31_02385FA8 + b _02385EF0 +_02385ED8: + ldr r0, [sp, #0x18] + bl sub_020307EC + bl sub_02041178 + mov r0, #0x1b + bl AdvanceFrame + b _02385548 +_02385EF0: + mov r0, #0x1b + bl AdvanceFrame + mov r4, #0 +_02385EFC: + ldr r0, [sp, #0x18] + bl CloseAdvancedTextBox2 + ldr r0, [sp, #0x14] + bl sub_0202F334 + ldr r0, [sp, #0x14] + bl CloseDialogueBox + mov r0, #8 + mov r1, #0x1e + bl ov29_022EA370 + bl HideTileGrid + mov r0, #0x1b + bl AdvanceFrame + bl sub_020407C0 + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0, #8] + cmp r0, #0 + beq _02385F50 + bl MemFree + ldr r0, _02385F70 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r1, #0 + str r1, [r0, #8] +_02385F50: + bl GetLeaderMonster + ldr r1, [sp, #0x10] + add r2, sp, #0x2c + ldr r1, [r2, r1, lsl #2] + strb r1, [r0, #0x4e] + mov r0, r4 + add sp, sp, #0x12c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#if defined(EUROPE) +#define HANDLE_MOVES_MENU_DATA_OFFSET 2 +#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0 +#elif defined(JAPAN) +#define HANDLE_MOVES_MENU_DATA_OFFSET 0xA03 +#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0x19D0 +#else +#define HANDLE_MOVES_MENU_DATA_OFFSET 0 +#define HANDLE_MOVES_MENU_DATA_OFFSET_2 0 +#endif +_02385F70: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 +_02385F74: .word DUNGEON_WINDOW_PARAMS_14 +_02385F78: .word 0x00003FCD + HANDLE_MOVES_MENU_DATA_OFFSET +_02385F7C: .word 0x00000404 +_02385F80: .word DUNGEON_WINDOW_PARAMS_16 +_02385F84: .word 0x00003FCC + HANDLE_MOVES_MENU_DATA_OFFSET +_02385F88: .word DUNGEON_PTR +#ifdef JAPAN +_02385F8C: .word 0x00001D34 +_02387200: .word 0x0000087A +_02387204: .word 0x0000087B +#else +_02385F8C: .word 0x000008DC +#endif +_02385F90: .word DUNGEON_WINDOW_PARAMS_15 +_02385F94: .word 0x80000213 +_02385F98: .word 0x0000099B + HANDLE_MOVES_MENU_DATA_OFFSET_2 +_02385F9C: .word 0x000009A8 + HANDLE_MOVES_MENU_DATA_OFFSET_2 +_02385FA0: .word 0x000009BA + HANDLE_MOVES_MENU_DATA_OFFSET_2 +_02385FA4: .word 0x00003F07 + arm_func_end HandleMovesMenu + + arm_func_start ov31_02385FA8 +ov31_02385FA8: ; 0x02385FA8 + stmdb sp!, {r3, r4, r5, lr} + ldr r3, _02385FD8 ; =ov29_0237C91C + mov r1, r1, lsl #3 + ldrh r1, [r3, r1] + mov r5, r0 + mov r4, r2 + bl SetMonsterActionFields + ldr r0, _02385FDC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + strb r4, [r5, #4] + ldr r0, [r0] + strb r0, [r5, #0xa] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02385FD8: .word ov29_0237C91C +_02385FDC: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 + arm_func_end ov31_02385FA8 + + arm_func_start ov31_02385FE0 +ov31_02385FE0: ; 0x02385FE0 +#ifdef JAPAN +#define OV31_02385FE0_OFFSET -4 +#else +#define OV31_02385FE0_OFFSET 0 +#endif + stmdb sp!, {r3, lr} + ldr r1, _0238604C ; =DUNGEON_PTR + ldrb r3, [r0, #4] + ldr r1, [r1] + ldrb r2, [r0, #0xa] + add r1, r1, r3, lsl #2 + add r1, r1, #0x12000 +#ifdef JAPAN + ldr r1, [r1, #0xa84] +#else + ldr r1, [r1, #0xb28] +#endif + mov r2, r2, lsl #3 + ldr ip, [r1, #0xb4] + add r1, ip, #0x26 + OV31_02385FE0_OFFSET + add r3, r1, #0x100 + ldrh r1, [r3, r2] + orr r1, r1, #2 + strh r1, [r3, r2] + ldrb r1, [r0, #0xa] + cmp r1, #4 + bhs _02386038 + add r0, ip, #0x124 + OV31_02385FE0_OFFSET + mov r2, #4 + bl ov31_02386050 + ldmia sp!, {r3, pc} +_02386038: + add r0, ip, #0x144 + OV31_02385FE0_OFFSET + mov r1, #0 + mov r2, #1 + bl ov31_02386050 + ldmia sp!, {r3, pc} + .align 2, 0 +_0238604C: .word DUNGEON_PTR + arm_func_end ov31_02385FE0 + + arm_func_start ov31_02386050 +ov31_02386050: ; 0x02386050 + stmdb sp!, {r3, r4, r5, lr} + mov r3, r1 + mov r1, r2 + mov r2, r3 + mov r3, #0 + bl sub_020417A8 + mov r5, r0 + mov r4, #0x62 +_02386070: + bl sub_02041A18 + cmp r0, #0 + beq _0238608C + bl sub_02041A00 + mov r0, r5 + bl CloseScrollBox + b _02386098 +_0238608C: + mov r0, r4 + bl AdvanceFrame + b _02386070 +_02386098: + mov r0, #0x62 + bl AdvanceFrame + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov31_02386050 + + arm_func_start ov31_023860A4 +ov31_023860A4: ; 0x023860A4 +#ifdef JAPAN +#define OV31_023860A4_OFFSET -4 +#else +#define OV31_023860A4_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r2, _02386190 ; =DUNGEON_PTR + ldrb r3, [r0, #4] + ldr r4, [r2] + ldrb r2, [r0, #0xa] + add r0, r4, r3, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r4, [r0, #0xa84] +#else + ldr r4, [r0, #0xb28] +#endif + mov r8, r1 + ldr r7, [r4, #0xb4] + mov r6, #0 + add r1, r7, #0x124 + OV31_023860A4_OFFSET + ldrb r0, [r1, r2, lsl #3] + mov ip, #0 + add r5, r1, r2, lsl #3 + tst r0, #8 + movne r6, #1 + mov r2, ip + mov r3, #1 +_023860F0: + add r0, r7, ip, lsl #3 + ldrb r0, [r0, #0x124 + OV31_023860A4_OFFSET] + tst r0, #1 + movne r0, r3 + moveq r0, r2 + tst r0, #0xff + addne r1, r7, ip, lsl #3 + ldrneb r0, [r1, #0x124 + OV31_023860A4_OFFSET] + add ip, ip, #1 + bicne r0, r0, #8 + strneb r0, [r1, #0x124 + OV31_023860A4_OFFSET] + cmp ip, #4 + blt _023860F0 + bl ov29_0234B034 + ldrh r1, [r5, #4] + cmp r6, #0 + str r1, [r0, #0x10] + ldreqb r0, [r5] + orreq r0, r0, #8 + streqb r0, [r5] + add r0, r7, #0x124 + OV31_023860A4_OFFSET + bl AllManip1 + ldrh r0, [r5, #2] + cmp r8, #0 + orr r0, r0, #2 + strh r0, [r5, #2] + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + cmp r6, #0 + bne _02386174 + ldr r1, _02386194 ; =0x000008D8 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + b _02386180 +_02386174: + ldr r1, _02386198 ; =0x000008D9 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser +_02386180: + mov r0, #0x78 + mov r1, #0x1f + bl ov29_022EA370 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02386190: .word DUNGEON_PTR +#ifdef JAPAN +_02386194: .word 0x00001D30 +_02386198: .word 0x00001D31 +#else +_02386194: .word 0x000008D8 +_02386198: .word 0x000008D9 +#endif + arm_func_end ov31_023860A4 + + arm_func_start ov31_0238619C +ov31_0238619C: ; 0x0238619C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r1, _02386200 ; =DUNGEON_PTR + ldrb r2, [r0, #4] + ldr r1, [r1] + ldrb r4, [r0, #0xa] + add r0, r1, r2, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] + ldr r7, [r0, #0xb4] + add r5, r7, #0x120 +#else + ldr r0, [r0, #0xb28] + ldr r7, [r0, #0xb4] + add r5, r7, #0x124 +#endif + add r6, r5, r4, lsl #3 + bl ov29_0234B034 + mov r1, #0 + mov r2, r6 + mov r3, r1 + bl FormatMoveStringMore + ldrb r1, [r5, r4, lsl #3] + mov r0, r5 + eor r1, r1, #4 + strb r1, [r5, r4, lsl #3] + bl AllManip1 + ldrh r0, [r6, #2] + orr r0, r0, #2 + strh r0, [r6, #2] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02386200: .word DUNGEON_PTR + arm_func_end ov31_0238619C + + arm_func_start ov31_02386204 +ov31_02386204: ; 0x02386204 +#ifdef JAPAN +#define OV31_02386204_OFFSET -4 +#else +#define OV31_02386204_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #0xa0 + ldr r1, _02386304 ; =DUNGEON_PTR + ldrb r2, [r0, #4] + ldr r1, [r1] + ldrb r5, [r0, #0xa] + add r0, r1, r2, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r1, [r0, #0xa84] +#else + ldr r1, [r0, #0xb28] +#endif + add r0, sp, #0 + ldr r4, [r1, #0xb4] + mov r2, #0 + add r1, r4, #0x124 + OV31_02386204_OFFSET + add r1, r1, r5, lsl #3 + bl FormatMoveString + add r0, r4, #0x26 + OV31_02386204_OFFSET + add r2, r0, #0x100 + mov r1, r5, lsl #3 + ldrh r0, [r2, r1] + mov r3, #0 + orr r0, r0, #2 + strh r0, [r2, r1] + mov r1, r3 + mov r2, #1 + b _023862A4 +_02386268: + add r5, r5, #1 + cmp r5, #4 + bge _023862AC + add r0, r4, r5, lsl #3 + ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] + tst r0, #1 + movne r0, r2 + moveq r0, r1 + tst r0, #0xff + beq _023862AC + add r0, r4, r5, lsl #3 + ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] + tst r0, #2 + beq _023862AC + add r3, r3, #1 +_023862A4: + cmp r3, #4 + blt _02386268 +_023862AC: + add r0, r4, r5, lsl #3 + ldrb r0, [r0, #0x124 + OV31_02386204_OFFSET] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + moveq r5, #4 + cmp r5, #4 + bge _023862F4 + add ip, r4, #0x124 + OV31_02386204_OFFSET + ldrb r2, [ip, r5, lsl #3] + add r0, sp, #0x50 + add r1, ip, r5, lsl #3 + orr r2, r2, #2 + bic r3, r2, #4 + mov r2, #0 + strb r3, [ip, r5, lsl #3] + bl FormatMoveString +_023862F4: + add r0, r4, #0x124 + OV31_02386204_OFFSET + bl AllManip1 + add sp, sp, #0xa0 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02386304: .word DUNGEON_PTR + arm_func_end ov31_02386204 + + arm_func_start ov31_02386308 +ov31_02386308: ; 0x02386308 +#ifdef JAPAN +#define OV31_02386308_OFFSET -4 +#else +#define OV31_02386308_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r2, _023863EC ; =DUNGEON_PTR + ldrb r3, [r0, #4] + ldr r2, [r2] + ldrb r7, [r0, #0xa] + add r0, r2, r3, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r4, [r0, #0xa84] +#else + ldr r4, [r0, #0xb28] +#endif + mov r8, r1 + ldr r6, [r4, #0xb4] + mov r5, #0 + bl ov29_0234B034 + add r1, r6, r7, lsl #3 + add r1, r1, #0x100 + ldrh r2, [r1, #0x28 + OV31_02386308_OFFSET] + mov r3, r7, lsl #3 + add r1, r6, #0x26 + OV31_02386308_OFFSET + str r2, [r0, #0x10] + add r2, r1, #0x100 + ldrh r1, [r2, r3] + add r7, r7, #1 + mov r0, r5 + orr r1, r1, #2 + strh r1, [r2, r3] + add ip, r6, #0x124 + OV31_02386308_OFFSET + mov r1, #1 + b _023863A0 +_02386374: + cmp r7, #4 + bge _023863A8 + ldrb r2, [ip, r7, lsl #3] + mov r3, r7, lsl #3 + tst r2, #2 + beq _023863A8 + bic r2, r2, #2 + mov r5, r1 + strb r2, [ip, r3] + add r7, r7, #1 + add r0, r0, #1 +_023863A0: + cmp r0, #4 + blt _02386374 +_023863A8: + add r0, r6, #0x124 + OV31_02386308_OFFSET + bl AllManip1 + cmp r8, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + cmp r5, #0 + beq _023863D0 + ldr r1, _023863F0 ; =0x000008DA + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + b _023863DC +_023863D0: + ldr r1, _023863F4 ; =0x000008DB + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser +_023863DC: + mov r0, #0x78 + mov r1, #0x1f + bl ov29_022EA370 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_023863EC: .word DUNGEON_PTR +#ifdef JAPAN +_023863F0: .word 0x00001D32 +_023863F4: .word 0x00001D33 +#else +_023863F0: .word 0x000008DA +_023863F4: .word 0x000008DB +#endif + arm_func_end ov31_02386308 + + arm_func_start ov31_023863F8 +ov31_023863F8: ; 0x023863F8 + stmdb sp!, {r3, lr} + mov lr, #0 + mov ip, lr + add r1, r1, #1 + mov r2, #1 + b _02386434 +_02386410: + cmp r1, #4 + bge _0238643C + add r3, r0, r1, lsl #3 +#ifdef JAPAN + ldrb r3, [r3, #0x120] +#else + ldrb r3, [r3, #0x124] +#endif + tst r3, #2 + beq _0238643C + mov lr, r2 + add r1, r1, #1 + add ip, ip, #1 +_02386434: + cmp ip, #4 + blt _02386410 +_0238643C: + cmp lr, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end ov31_023863F8 + + arm_func_start ov31_02386450 +ov31_02386450: ; 0x02386450 + stmdb sp!, {r3, lr} + ldr r0, _02386478 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0, #4] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl MemFree + ldr r0, _02386478 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r1, #0 + str r1, [r0, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_02386478: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 + arm_func_end ov31_02386450 + + arm_func_start ov31_0238647C +ov31_0238647C: ; 0x0238647C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x114 + mov r6, r0 + mov r5, r1 + str r2, [sp, #4] + mov r0, #0x284 + mov r1, #8 + str r3, [sp, #8] + mvn r4, #1 + bl MemAlloc + ldr r1, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mov r2, #0 + str r0, [r1, #4] + str r2, [r1] +_023864B4: + mov r0, #6 + mov r1, #0 + bl ov29_022EA428 + ldr r0, _02386B10 ; =ov29_0235352C + ldr r0, [r0] + ldr r0, [r0, #0x24] + bl sub_0200B3D4 + mvn sb, #1 + ldr r7, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + add r8, sb, #1 + add fp, sp, #0xbc +_023864E0: + cmp r4, sb + bne _02386578 + ldr r3, [r6, #0xb4] + add r0, sp, #0x14 + ldrsh r2, [r3, #2] + ldrb r3, [r3, #0x48] + mov r1, #2 + bl sub_02053CA0 + mov r0, r6 + bl sub_0203F9CC + mov r1, #0 + b _0238652C +_02386510: + add r0, r5, r1, lsl #3 + ldrh r0, [r0, #2] + tst r0, #4 + bne _02386534 + add r0, r1, #1 + mov r0, r0, lsl #0x10 + mov r1, r0, asr #0x10 +_0238652C: + cmp r1, #8 + blt _02386510 +_02386534: + add r0, r5, r1, lsl #3 + ldrh r0, [r0, #4] + bl sub_0203FD14 + ldr r0, [sp, #8] + mov r1, #0 + cmp r0, #0 + add r3, sp, #0x14 + beq _02386568 + mov r0, #2 + mov r2, r1 + bl sub_0204019C + mov r4, r0 + b _02386578 +_02386568: + mov r0, #3 + mov r2, r1 + bl sub_0204019C + mov r4, r0 +_02386578: + mov r0, #0x1e + bl AdvanceFrame + bl sub_020407EC + mov sl, r0 + bl sub_02041094 + cmp sl, #2 + str r0, [r7] + moveq sl, #0 + beq _023865B4 + cmp sl, #1 + moveq sl, #1 + beq _023865B4 + cmp sl, #7 + bne _02386578 + mov sl, #2 +_023865B4: + mov r0, #0x1e + bl AdvanceFrame + cmp sl, #1 + ldreq r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + mvneq r1, #0 + streq r1, [r0] + beq _02386924 + cmp sl, #2 + bne _02386694 + mov r0, r4 + bl SetAdvancedTextBoxState5 + mov r0, #0x1e + bl AdvanceFrame + mov r0, r4 + bl CloseAdvancedTextBox + mov r0, #0x1b + mov r4, sb + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + ldr r0, [r7] + cmp r0, #4 + bge _02386664 + ldr r1, [r7] + mov r0, r5 + mov r2, #4 + bl ov31_02386050 + b _02386674 +_02386664: + add r0, r5, #0x20 + mov r1, #0 + mov r2, #1 + bl ov31_02386050 +_02386674: + bl sub_020407C0 + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #2 + mov r1, #0x1b + bl ov29_022EA370 + b _023864E0 +_02386694: + bl ov29_022EBA70 + mov r0, #0x22 + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0x21 + mov r1, #0 + bl AddDungeonSubMenuOption + ldr r0, [r7] + mov r3, #0 + add r1, r0, #1 + mov r2, r3 + b _023866E4 +_023866C4: + cmp r1, #8 + bge _023866EC + ldrb r0, [r5, r1, lsl #3] + tst r0, #2 + beq _023866EC + mov r3, #1 + add r1, r1, #1 + add r2, r2, #1 +_023866E4: + cmp r2, #8 + blt _023866C4 +_023866EC: + cmp r3, #0 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + bne _02386708 + mov r0, #0x21 + bl DisableDungeonSubMenuOption +_02386708: + mov r0, #0x1d + mov r1, #0 + bl AddDungeonSubMenuOption + add r0, sp, #0x18 + str r0, [sp, #0x84] + mov r0, fp + add r1, sp, #0x18 + mov r2, #0 + bl ov31_0238513C + bl ov29_022EBA84 + mov r2, #0 + b _0238674C +_02386738: + add r1, fp, r2, lsl #3 + str r2, [r1, #4] + add r1, r2, #1 + mov r1, r1, lsl #0x10 + mov r2, r1, asr #0x10 +_0238674C: + cmp r2, r0 + blt _02386738 + ldr r0, _02386B14 ; =0x000008DC + mov r1, r2, lsl #3 + strh r0, [fp, r1] + add r0, fp, r2, lsl #3 + str r8, [r0, #4] + add r0, r2, #1 + mov r0, r0, lsl #0x10 + mov r2, r0, asr #0x10 + mov r1, r2, lsl #3 + mov r0, #0 + strh r0, [fp, r1] + add r0, fp, r2, lsl #3 + str r8, [r0, #4] + ldr r0, _02386B18 ; =DUNGEON_WINDOW_PARAMS_15 + ldr r1, _02386B1C ; =0x00000213 + add r2, sp, #0x24 + mov r3, fp + bl CreateParentMenuFromStringIds + str r0, [sp, #0x10] +_023867A0: + mov r0, #0x1b + bl AdvanceFrame + ldr r0, [sp, #0x10] + bl IsParentMenuActive + cmp r0, #0 + bne _023867A0 + ldr r0, [sp, #0x10] + bl sub_0202ABB0 + movs sl, r0 + movmi r0, #1 + strmi r0, [sp, #0xc] + movpl r0, #0 + strpl r0, [sp, #0xc] + mov r0, #0x1b + bl AdvanceFrame + ldr r0, [sp, #0x10] + bl CloseParentMenu + ldr r0, [sp, #0xc] + cmp r0, #1 + bne _023867F8 + bl sub_020416FC + b _023864E0 +_023867F8: + mov r0, #6 + mov r1, #0 + bl ov29_022EA428 + mov r0, r4 + bl SetAdvancedTextBoxState5 +_0238680C: + mov r0, #0x1b + bl AdvanceFrame + mov r0, r4 + bl IsAdvancedTextBoxActive + cmp r0, #0 + bne _0238680C + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, #0x1b + bl AdvanceFrame + mov r0, r4 + bl CloseAdvancedTextBox + mov r4, sb + bl sub_020407C0 + cmp sl, #1 + bne _023868E8 + ldr r0, [r7] + mov r1, #0 + add r2, r0, #1 + b _023868C0 +_0238689C: + cmp r2, #8 + bge _023868C8 + ldrb r0, [r5, r2, lsl #3] + tst r0, #2 + beq _023868C8 + bic r0, r0, #2 + strb r0, [r5, r2, lsl #3] + add r2, r2, #1 + add r1, r1, #1 +_023868C0: + cmp r1, #8 + blt _0238689C +_023868C8: + mov r0, r5 + bl AllManip2 + ldr r0, [r6, #0xb4] + mov r1, r5 +#ifdef JAPAN + add r0, r0, #0x120 +#else + add r0, r0, #0x124 +#endif + mov r2, #0x22 + bl memcpy + b _023864E0 +_023868E8: + cmp sl, #2 + bne _02386924 + ldr r0, [r7] + cmp r0, #4 + bge _02386910 + ldr r1, [r7] + mov r0, r5 + mov r2, #4 + bl ov31_02386050 + b _023864E0 +_02386910: + add r0, r5, #0x20 + mov r1, #0 + mov r2, #1 + bl ov31_02386050 + b _023864E0 +_02386924: + mvn r0, #1 + cmp r4, r0 + beq _02386950 + mov r0, r4 + bl SetAdvancedTextBoxState5 + mov r0, #0x1b + bl AdvanceFrame + mov r0, r4 + bl CloseAdvancedTextBox + mvn r4, #1 + bl sub_020407C0 +_02386950: + ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r1, [r0] + cmp r1, #0 + blt _02386AE8 + ldr r0, [sp, #4] + cmp r0, #0 + beq _02386A04 + mov r0, r1, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02041154 + mov r1, r0 + mov r0, #0 + bl ov29_0234B084 + ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + cmp r0, #4 + bge _023869D8 + bl sub_02041364 + cmp r0, #0 + mov r0, #0 + mov r2, #1 + beq _023869C0 + ldr r1, _02386B20 ; =0x000008D6 + mov r3, r0 + str r2, [sp] + bl YesNoMenu + mov r7, r0 + b _023869F4 +_023869C0: + ldr r1, _02386B24 ; =0x000008D7 + mov r3, r0 + str r2, [sp] + bl YesNoMenu + mov r7, r0 + b _023869F4 +_023869D8: + mov r0, #0 + mov r2, #1 + ldr r1, _02386B24 ; =0x000008D7 + mov r3, r0 + str r2, [sp] + bl YesNoMenu + mov r7, r0 +_023869F4: + mov r0, #1 + mov r1, #0 + bl ov29_0233A0E8 + b _02386A08 +_02386A04: + mov r7, #1 +_02386A08: + cmp r7, #1 + bne _023864B4 + ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + cmp r0, #4 + movge r1, #0 + strgeb r1, [r5, r0, lsl #3] + bge _02386AE8 + bl sub_02041484 + bl sub_0203FD38 + mov r1, #0 + mov r2, r1 + mov r3, #1 + b _02386A80 +_02386A40: + add r8, r0, r1, lsl #3 + add r7, r5, r1, lsl #3 + mov r6, #4 +_02386A4C: + ldrh r4, [r8], #2 + subs r6, r6, #1 + strh r4, [r7], #2 + bne _02386A4C + ldrb r4, [r5, r1, lsl #3] + tst r4, #1 + movne r4, r3 + moveq r4, r2 + tst r4, #0xff + beq _02386A88 + add r1, r1, #1 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 +_02386A80: + cmp r1, #4 + blt _02386A40 +_02386A88: + mov r6, #4 +_02386A8C: + add r4, r5, r6, lsl #3 + add r3, r5, r1, lsl #3 + mov r2, #4 +_02386A98: + ldrh r0, [r4], #2 + subs r2, r2, #1 + strh r0, [r3], #2 + bne _02386A98 + add r0, r6, #1 + mov r0, r0, lsl #0x10 + add r1, r1, #1 + mov r6, r0, asr #0x10 + mov r0, r1, lsl #0x10 + cmp r6, #8 + mov r1, r0, asr #0x10 + blt _02386A8C + mov r2, #0 + b _02386AE0 +_02386AD0: + add r0, r1, #1 + mov r0, r0, lsl #0x10 + strb r2, [r5, r1, lsl #3] + mov r1, r0, asr #0x10 +_02386AE0: + cmp r1, #8 + blt _02386AD0 +_02386AE8: + bl ov31_02386450 + ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 + ldr r0, [r0] + cmp r0, #0 + movge r0, #1 + movlt r0, #0 + and r0, r0, #0xff + add sp, sp, #0x114 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define OV31_0238647C_OFFSET 0x1458 +#else +#define OV31_0238647C_OFFSET 0 +#endif +_02386B0C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A270 +_02386B10: .word ov29_0235352C +_02386B14: .word 0x000008DC + OV31_0238647C_OFFSET +_02386B18: .word DUNGEON_WINDOW_PARAMS_15 +_02386B1C: .word 0x00000213 +_02386B20: .word 0x000008D6 + OV31_0238647C_OFFSET +_02386B24: .word 0x000008D7 + OV31_0238647C_OFFSET + arm_func_end ov31_0238647C + + arm_func_start ov31_02386B28 +ov31_02386B28: ; 0x02386B28 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #0xa4 + ldr r0, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + ldr r1, [r0, #0x64] + ldrsh r0, [r1, #4] + ldrsh r1, [r1, #6] + bl GetTile + mov r4, r0 + ldr r0, _02386C0C ; =0x000008D1 + bl StringFromId + ldr r1, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r3, r0 + ldr r0, [r1] + mov r1, #8 + add r0, r0, #0x100 + ldrsb r0, [r0, #0x60] + mov r2, #2 + bl DrawTextInWindow + ldr r1, [r4, #0x10] + cmp r1, #0 + moveq r0, #0 + beq _02386B98 + ldr r0, [r1] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_02386B98: + cmp r0, #0 + beq _02386C00 + add r0, sp, #0x54 + mov r2, #0 + bl ov29_022E2A78 + ldr r0, [r4, #0x10] + bl ov29_022E1618 + ldrb r1, [r0] + ldr r0, _02386C10 ; =0x000008D2 + str r1, [sp, #0x14] + bl StringFromId + add r1, sp, #4 + mov r2, r0 + str r1, [sp] + add r0, sp, #0x54 + mov r1, #0x50 + mov r3, #0 + bl PreprocessString + ldr r0, _02386C08 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r1, #0x10 + ldr r0, [r0] + mov r2, #0x12 + add r0, r0, #0x100 + ldrsb r0, [r0, #0x60] + add r3, sp, #0x54 + bl DrawTextInWindow +_02386C00: + add sp, sp, #0xa4 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_02386C08: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C +#ifdef JAPAN +_02386C0C: .word 0x00001D29 +_02386C10: .word 0x00001D2A +#else +_02386C0C: .word 0x000008D1 +_02386C10: .word 0x000008D2 +#endif + arm_func_end ov31_02386B28 + + arm_func_start ov31_02386C14 +ov31_02386C14: ; 0x02386C14 + stmdb sp!, {r3, lr} + ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + add r0, r0, #0x61 + add r0, r0, #0x100 + bl ov29_0234E988 + ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + add r0, r0, #0x100 + ldrsb r0, [r0, #0x60] + bl sub_0202F954 + mov r0, #0x62 + bl AdvanceFrame + mov r0, #0x62 + bl AdvanceFrame + ldr r0, _02386C68 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + add r0, r0, #0x100 + ldrsb r0, [r0, #0x60] + bl CloseTextBox + ldmia sp!, {r3, pc} + .align 2, 0 +_02386C68: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C + arm_func_end ov31_02386C14 + + arm_func_start ov31_02386C6C +ov31_02386C6C: ; 0x02386C6C + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #0xf4 + mov r5, r0 + mov r0, #0x164 + mov r1, #8 + bl MemAlloc + ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + str r0, [r1] + str r5, [r0, #0x64] +_02386C90: + bl ov29_022EA62C + ldr r0, _02386F10 ; =DUNGEON_WINDOW_PARAMS_18 + ldr r1, _02386F14 ; =ov31_02386B28 + bl CreateTextBox + ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r1, [r1] + strb r0, [r1, #0x160] + bl ov29_022EBA70 + mov r0, #0x25 + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0xc + mov r1, #0 + bl AddDungeonSubMenuOption + bl ov29_022EB9A0 + bl ov29_022EBA84 + mov r1, #0 + ldr r2, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + b _02386CF0 +_02386CDC: + ldr r3, [r2] + add r4, r1, #1 + add r3, r3, r1, lsl #3 + mov r1, r4 + str r4, [r3, #4] +_02386CF0: + cmp r1, r0 + blt _02386CDC + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r2, #0 + ldr r4, [r0] + mov r3, r1, lsl #3 + strh r2, [r4, r3] + ldr r3, [r0] + sub r4, r2, #1 + add r3, r3, r1, lsl #3 + str r4, [r3, #4] + ldr r3, [r0] + add r3, r3, r1, lsl #3 + strh r2, [r3, #8] + ldr r3, [r0] + add r1, r3, r1, lsl #3 + str r4, [r1, #0xc] + ldr r0, [r0] + add r1, r0, #0x58 + bl ov31_0238513C + ldr r1, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, _02386F18 ; =DUNGEON_WINDOW_PARAMS_17 + ldr r3, [r1] + ldr r1, _02386F1C ; =0x00000213 + add r4, r3, #0x58 + add r2, sp, #0x5c + str r4, [sp, #0xbc] + bl CreateParentMenuFromStringIds + ldr r6, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r4, #0x2d + ldr r1, [r6] + strb r0, [r1, #0x161] +_02386D70: + mov r0, r4 + bl AdvanceFrame + ldr r0, [r6] + add r0, r0, #0x100 + ldrsb r0, [r0, #0x61] + bl IsParentMenuActive + cmp r0, #0 + bne _02386D70 + ldr r0, [r6] + add r0, r0, #0x100 + ldrsb r0, [r0, #0x61] + bl sub_0202ABB0 + ldr r1, [r6] + sub r0, r0, #1 + str r0, [r1, #0x124] + ldr r0, [r6] + ldr r0, [r0, #0x124] + cmp r0, #0 + movlt r6, #1 + blt _02386EBC + cmp r0, #1 + bne _02386E70 + bl ov31_02386C14 + ldrsh r0, [r5, #4] + ldrsh r1, [r5, #6] + bl GetTile + ldr r0, [r0, #0x10] + cmp r0, #0 + beq _02386E68 + ldr r1, [r0] + cmp r1, #2 + bne _02386E68 + bl GetTrapInfo + ldrb r3, [r0] + add r2, sp, #0xc + ldr r1, _02386F20 ; =0x00001013 + str r3, [sp, #0x1c] + str r2, [sp] + ldrb r2, [r0] + ldr r0, _02386F24 ; =DUNGEON_WINDOW_PARAMS_19 +#if defined(EUROPE) + sub r3, r1, #0x740 + add r2, r2, #0xdc + add r2, r2, #0x3400 +#elif defined(JAPAN) + ldr r3, _023881A0 ; =0x00001D2B + add r2, r2, #0x5f + add r2, r2, #0x4700 +#else + sub r3, r1, #0x740 + add r2, r2, #0xda + add r2, r2, #0x3400 +#endif + mov r2, r2, lsl #0x10 + mov r2, r2, lsr #0x10 + str r2, [sp, #4] + mov r2, #0 + str r2, [sp, #8] + bl CreateScrollBoxSingle + mov r6, r0 + mov r4, #0x16 +_02386E3C: + mov r0, r4 + bl AdvanceFrame + mov r0, r6 + bl IsScrollBoxActive + cmp r0, #0 + bne _02386E3C + mov r0, r6 + bl CloseScrollBox + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 +_02386E68: + mov r6, #2 + b _02386EBC +_02386E70: + bl ov29_022EB804 + cmp r0, #0 + beq _02386D70 + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r4, [r5, #0xb4] + ldr r0, [r0] + ldr r1, _02386F28 ; =ov29_0237C91C + ldr r2, [r0, #0x124] + add r0, r4, #0x4a + mov r2, r2, lsl #3 + ldrh r1, [r1, r2] + bl SetMonsterActionFields + mov r6, #0 + strb r6, [r4, #0x4e] + strh r6, [r4, #0x50] + strh r6, [r4, #0x52] + strb r6, [r4, #0x54] + strh r6, [r4, #0x56] + strh r6, [r4, #0x58] +_02386EBC: + mov r0, #0x2d + bl AdvanceFrame + cmp r6, #2 + beq _02386C90 + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + cmp r0, #0 + beq _02386EF8 + bl ov31_02386C14 + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + ldr r0, [r0] + bl MemFree + ldr r0, _02386F0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A27C + mov r1, #0 + str r1, [r0] +_02386EF8: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + add sp, sp, #0xf4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02386F0C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A27C +_02386F10: .word DUNGEON_WINDOW_PARAMS_18 +_02386F14: .word ov31_02386B28 +_02386F18: .word DUNGEON_WINDOW_PARAMS_17 +_02386F1C: .word 0x00000213 +_02386F20: .word 0x00001013 +_02386F24: .word DUNGEON_WINDOW_PARAMS_19 +#ifdef JAPAN +_023881A0: .word 0x00001D2B +#endif +_02386F28: .word ov29_0237C91C + arm_func_end ov31_02386C6C + + arm_func_start ov31_02386F2C +ov31_02386F2C: ; 0x02386F2C + stmdb sp!, {r3, lr} + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x294 + add r0, r0, #0x400 + bl ov29_0234E988 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x97] + cmp r0, r1 + beq _02386F64 + bl CloseAdvancedTextBox +_02386F64: + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x98] + cmp r0, r1 + beq _02386F98 + bl CloseAdvancedTextBox + bl sub_020407C0 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x698] +_02386F98: + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x96] + cmp r0, r1 + beq _02386FB8 + bl CloseTextBox +_02386FB8: + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x3a4 + add r0, r0, #0x400 + bl ov31_023899D4 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x3a8 + add r0, r0, #0x400 + bl ov31_02388714 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x95 + add r0, r0, #0x600 + bl ov29_0234E988 + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + bl MemFree + ldr r0, _02387010 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02387010: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 + arm_func_end ov31_02386F2C + + arm_func_start ov31_02387014 +ov31_02387014: ; 0x02387014 + ldr r1, [r0, #0xb4] + ldr ip, _02387044 ; =ov31_023899B8 + ldrb r0, [r1, #7] + mov r2, #1 + cmp r0, #0 + movne r1, #0xb + ldr r0, _02387048 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldreqb r1, [r1, #0xa8] + ldr r0, [r0] + and r1, r1, #0xff + ldr r0, [r0, #0x7a4] + bx ip + .align 2, 0 +_02387044: .word ov31_023899B8 +_02387048: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 + arm_func_end ov31_02387014 + + arm_func_start TeamMenu +TeamMenu: ; 0x0238704C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x13c + mov sl, r0 + ldr r0, _02387614 ; =0x000007AC + mov r1, #8 + bl MemAlloc + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + str r0, [r1] + bl ov31_023880D8 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + str sl, [r0, #0x69c] + bl ov29_0234EBCC + mov r7, #0 + add r0, sp, #0xb0 + mov r1, #1 + mov r2, r7 + mov r3, r7 + str r7, [sp] + mov r8, r7 + bl ov29_0234EA18 + ldr r2, _0238761C ; =ov31_02387014 + add r0, sp, #0xb0 + mov r1, #0xe + mov r3, r7 + bl ov31_02388114 + ldr r2, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, _02387620 ; =DUNGEON_WINDOW_PARAMS_22 + ldr r3, [r2] + str r0, [r3, #0x7a8] + ldr r0, [r2] + ldr r0, [r0, #0x7a8] + bl ov31_02388444 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r1, sp, #8 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_02388704 + ldr r1, [sp, #0xc] + ldr r0, [sp, #0x10] + add r1, r1, #8 + mov r0, r0, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r0, r0, asr #0x10 + mov r1, r1, asr #0x10 + bl ov31_0238991C + ldr r3, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r1, #0xb + ldr r4, [r3] + mov r2, r7 + str r0, [r4, #0x7a4] + ldr r0, [r3] + ldr r0, [r0, #0x7a4] + bl ov31_023899B8 +_02387124: + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_02388534 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_023886D4 + cmp r0, #1 + moveq r7, #1 + beq _023875D8 + cmp r0, #2 + bne _02387184 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r8, #1 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_023886DC + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r2, [r1] + str r0, [r2, #0x760] + ldr r0, [r1] + ldr sb, [r0, #0x760] + b _023871B0 +_02387184: + cmp r0, #3 + bne _023871B0 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_023886DC + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r2, [r1] + str r0, [r2, #0x760] + ldr r0, [r1] + ldr sb, [r0, #0x760] +_023871B0: + bl ov29_022EBA70 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r1, sp, #0xb0 + ldr r2, [r0] + ldr r0, _02387624 ; =DUNGEON_PTR + ldr r2, [r2, #0x760] + ldr r3, [r0] + add r0, r1, r2, lsl #5 + ldr r1, [r0, #4] + mov r0, #0x1b + add r1, r3, r1, lsl #2 + add r1, r1, #0x12000 +#ifdef JAPAN + ldr r4, [r1, #0xa84] +#else + ldr r4, [r1, #0xb28] +#endif + mov r1, #0 + ldr r5, [r4, #0xb4] + bl AddDungeonSubMenuOption + mov r0, #0x19 + mov r1, #0 + bl AddDungeonSubMenuOption + ldrb r0, [r5, #7] + cmp r0, #0 + bne _02387278 + ldr r0, _02387624 ; =DUNGEON_PTR + ldr r1, [r0] + ldrb r0, [r1, #0x75d] + cmp r0, #0 + ldreqb r0, [r1, #0x75e] + cmpeq r0, #0 + bne _0238726C + ldrsh r0, [r5, #0xc] + bl GetActiveTeamMember + ldrsh r1, [r0, #8] + ldr r0, _02387628 ; =0x00005AA5 + cmp r1, r0 + beq _0238726C + ldrb r0, [r5, #0x48] + bl JoinedAtRangeCheck2Veneer + cmp r0, #0 + beq _02387260 + ldr r0, _02387624 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75c] + cmp r0, #0 + beq _0238726C +_02387260: + mov r0, #0x34 + mov r1, #0 + bl AddDungeonSubMenuOption +_0238726C: + mov r0, #0x1c + mov r1, #0 + bl AddDungeonSubMenuOption +_02387278: + mov r0, #0x30 + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0x1a + mov r1, #0 + bl AddDungeonSubMenuOption + ldrb r0, [r5, #7] + cmp r0, #0 + ldreq r0, _02387624 ; =DUNGEON_PTR + ldreq r1, [r0] + ldreqb r0, [r1, #0x75e] + cmpeq r0, #0 + bne _02387320 + ldrb r0, [r1, #0x75c] + cmp r0, #0 + beq _02387320 + ldrb r0, [r1, #0x748] + bl GetLeaderChangeFlag + cmp r0, #0 + beq _02387320 + mov r0, #0x3b + mov r1, #0 + bl AddDungeonSubMenuOption + ldrsh r0, [r5, #0xc] + mov r6, #1 + cmp r0, #4 + movge r6, #0 + bge _023872FC + bl GetActiveTeamMember + ldrsh r0, [r0, #8] + bl ov29_022F9C34 + cmp r0, #0 + movne r6, #0 +_023872FC: + mov r0, r4 + mov r1, #0 + bl CheckVariousStatuses2 + cmp r0, #0 + movne r6, #0 + cmp r6, #0 + bne _02387320 + mov r0, #0x3b + bl DisableDungeonSubMenuOption +_02387320: + mov r0, r5 + bl IsExperienceLocked + cmp r0, #0 + beq _0238735C + mov r0, #0x19 + bl DisableDungeonSubMenuOption + mov r0, #0x3b + bl DisableDungeonSubMenuOption + mov r0, #0x1a + bl DisableDungeonSubMenuOption + mov r0, #0x30 + bl DisableDungeonSubMenuOption + mov r0, #0x34 + bl DisableDungeonSubMenuOption + b _02387380 +_0238735C: + ldrb r0, [r5, #7] + cmp r0, #0 + beq _02387380 + mov r0, r4 + bl ov29_0234FBD4 + cmp r0, #0 + bne _02387380 + mov r0, #0x1a + bl DisableDungeonSubMenuOption +_02387380: + bl ov29_022EB9A0 + cmp r8, #0 + beq _023873C8 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r3, [sl, #0xb4] + ldr r0, [r0] + add r1, sp, #0xb4 + ldr r2, [r0, #0x760] + add r0, r3, #0x4a + ldr r1, [r1, r2, lsl #5] + bl ov29_022EBA94 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r7, #0 + ldr r0, [r0] + add r0, r0, #0x294 + add r0, r0, #0x400 + bl ov29_0234E988 + b _023875D8 +_023873C8: + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + cmp sb, #0 + ldr r0, [r0] + moveq r2, #1 + add r1, r0, #0x188 + movne r2, #0 + add r0, r0, #0x530 + add r1, r1, #0x400 + bl ov31_0238513C + bl ov29_022EBA84 + mov r2, #0 + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + b _02387410 +_023873FC: + ldr r3, [r1] + add r4, r2, #1 + add r3, r3, r2, lsl #3 + mov r2, r4 + str r4, [r3, #0x534] +_02387410: + cmp r2, r0 + blt _023873FC + ldr r4, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r3, _0238762C ; =0x00000A3C + ldr r0, [r4] + mvn r1, #0 + add r0, r0, r2, lsl #3 + add r0, r0, #0x500 + strh r3, [r0, #0x30] + ldr r0, [r4] + mov r5, #0 + add r0, r0, r2, lsl #3 + str r1, [r0, #0x534] + ldr r3, [r4] + mov r0, #0xa + add r3, r3, r2, lsl #3 + add r3, r3, #0x500 + strh r5, [r3, #0x38] + ldr r3, [r4] + add r2, r3, r2, lsl #3 + str r1, [r2, #0x53c] + ldr r1, [r4] + add r1, r1, #0x188 + add r1, r1, #0x400 + str r1, [sp, #0x78] + bl Arm9LoadUnkFieldNa0x2029EC8 + add r4, r0, #1 + ldr r1, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, _02387630 ; =DUNGEON_WINDOW_PARAMS_23 + ldr r3, [r1] + ldr r1, _02387634 ; =0x00000233 + add r2, sp, #0x18 + add r3, r3, #0x530 + str r4, [sp, #0x18] + bl CreateParentMenuFromStringIds + ldr r4, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r6, #0x1b + ldr r1, [r4] + add fp, sp, #4 + strb r0, [r1, #0x694] +_023874B0: + mov r0, r6 + bl AdvanceFrame + mov r0, r5 + mov r1, fp + bl GetPressedButtons + ldr r0, [r4] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x94] + bl IsParentMenuActive + cmp r0, #0 + ldr r0, [r4] + add r0, r0, #0x600 + bne _02387578 + ldrsb r0, [r0, #0x94] + bl sub_0202ABB0 + subs r1, r0, #1 + bmi _0238754C + ldr r0, [r4] + str r1, [r0, #0x760] + ldr r0, [r4] + ldr r0, [r0, #0x760] + bl ov29_022EB804 + cmp r0, #0 + beq _023874B0 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, _02387638 ; =ov29_0237C91C + ldr r0, [r0] + ldr r5, [sl, #0xb4] + ldr r2, [r0, #0x760] + add r0, r5, #0x4a + mov r2, r2, lsl #3 + ldrh r1, [r1, r2] + bl SetMonsterActionFields + add r0, sp, #0xb0 + add r0, r0, sb, lsl #5 + ldr r0, [r0, #4] + mov r4, #0 + strb r0, [r5, #0x4e] + b _02387594 +_0238754C: + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x294 + add r0, r0, #0x400 + bl ov29_0234E988 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + ldr r0, [r0, #0x7a8] + bl ov31_023886F4 + mov r4, #1 + b _02387594 +_02387578: + ldrsb r0, [r0, #0x94] + bl sub_0202AB80 + mov r1, r0 + mov r0, #0xa + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 + b _023874B0 +_02387594: + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x294 + add r0, r0, #0x400 + bl ov29_0234E988 + cmp r4, #1 + beq _02387124 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x95 + add r0, r0, #0x600 + bl ov29_0234E988 + ldr r0, _02387618 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x3a4 + add r0, r0, #0x400 + bl ov31_023899D4 +_023875D8: + cmp r7, #0 + beq _023875F0 + bl GetLeader + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster +_023875F0: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + bl ov31_02386F2C + mov r0, #0x1b + bl AdvanceFrame + mov r0, r7 + add sp, sp, #0x13c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02387614: .word 0x000007AC +_02387618: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 +_0238761C: .word ov31_02387014 +_02387620: .word DUNGEON_WINDOW_PARAMS_22 +_02387624: .word DUNGEON_PTR +_02387628: .word 0x00005AA5 +#ifdef JAPAN +_0238762C: .word 0x00000877 +#else +_0238762C: .word 0x00000A3C +#endif +_02387630: .word DUNGEON_WINDOW_PARAMS_23 +_02387634: .word 0x00000233 +_02387638: .word ov29_0237C91C + arm_func_end TeamMenu + + arm_func_start ov31_0238763C +ov31_0238763C: ; 0x0238763C + cmp r0, #0 + moveq r0, #0 + bxeq lr + ldr r0, [r0] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + arm_func_end ov31_0238763C + + arm_func_start ov31_02387660 +ov31_02387660: ; 0x02387660 + ldr r1, _02387680 ; =DUNGEON_PTR + ldrb r0, [r0, #4] + ldr r1, [r1] + ldr ip, _02387684 ; =ov31_0238948C + add r0, r1, r0, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + bx ip + .align 2, 0 +_02387680: .word DUNGEON_PTR +_02387684: .word ov31_0238948C + arm_func_end ov31_02387660 + + arm_func_start ov31_02387688 +ov31_02387688: ; 0x02387688 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x78 + ldr r2, _02387788 ; =DUNGEON_PTR + ldrb r0, [r0, #4] + ldr r2, [r2] + mov r4, r1 + add r0, r2, r0, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr sb, [r0, #0xa84] +#else + ldr sb, [r0, #0xb28] +#endif + bl ov29_022EA62C + cmp r4, #0 + beq _023876C4 + mov r0, sb + bl ov31_023889DC + b _0238776C +_023876C4: + ldr r0, [sb, #0xb4] + bl IsExperienceLocked + cmp r0, #0 + movne r4, #1 + bne _023876E4 + cmp r4, #0 + movne r4, #2 + moveq r4, #0 +_023876E4: + add r0, sp, #0 + mov r1, sb + bl CreateMonsterSummaryFromMonster + mov r2, #0 + add r0, sp, #0 + mov r1, r4 + strh r2, [sp, #0x40] + strh r2, [sp, #0x56] + bl sub_0203F150 + mov r7, #0x62 + mov r6, r7 + mov r5, r7 + mov r4, #1 + mov fp, #0x1c + mov r8, #0 +_02387720: + mov sl, r8 + bl ov29_022EA62C +_02387728: + mov r0, r7 + bl AdvanceFrame + bl sub_0203F398 + cmp r0, #2 + beq _0238775C + cmp r0, #1 + bne _02387728 + bl sub_0203F990 + mov r0, r6 + bl AdvanceFrame + mov r0, r5 + bl AdvanceFrame + mov sl, r4 +_0238775C: + mov r0, fp + bl AdvanceFrame + cmp sl, #0 + beq _02387720 +_0238776C: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, sb + bl ov29_023021F0 + add sp, sp, #0x78 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02387788: .word DUNGEON_PTR + arm_func_end ov31_02387688 + + arm_func_start ov31_0238778C +ov31_0238778C: ; 0x0238778C + stmdb sp!, {r4, lr} + ldr r1, _023877C0 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r4, r0 + ldr r0, [r1] + add r0, r0, #0x600 + ldrh r0, [r0, #0x92] + bl StringFromId + mov r1, #2 + mov r3, r0 + mov r0, r4 + mov r2, r1 + bl DrawTextInWindow + ldmia sp!, {r4, pc} + .align 2, 0 +_023877C0: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 + arm_func_end ov31_0238778C + + arm_func_start ov31_023877C4 +ov31_023877C4: ; 0x023877C4 + ldr r2, _023877E4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr ip, _023877E8 ; =DrawTextInWindow + ldr r3, [r2] + mov r1, #2 + add r3, r3, #0x12 + mov r2, #0x10 + add r3, r3, #0x600 + bx ip + .align 2, 0 +_023877E4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 +_023877E8: .word DrawTextInWindow + arm_func_end ov31_023877C4 + + arm_func_start ov31_023877EC +ov31_023877EC: ; 0x023877EC +#ifdef JAPAN +#define OV31_023877EC_OFFSET -8 +#define OV31_023877EC_OFFSET_2 -4 +#define OV31_023877EC_OFFSET_3 -0xA4 +#else +#define OV31_023877EC_OFFSET 0 +#define OV31_023877EC_OFFSET_2 0 +#define OV31_023877EC_OFFSET_3 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2a4 + OV31_023877EC_OFFSET + mov r4, #0 + movs sl, r0 +#ifndef JAPAN + str r3, [sp, #8] +#endif + subne r0, r4, #1 + strne r0, [sl] + mov sb, r1 + ldr r0, _02388080 ; =0x000007AC + mov r1, #8 + mov fp, r2 + bl MemAlloc + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + str r0, [r1] + bl ov31_023880D8 + mov r7, #0 + mov r6, r7 +_02387830: + ldr r0, _02388088 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 + ldr r5, [r0, #0xb28 + OV31_023877EC_OFFSET_3] + mov r0, r5 + bl ov31_0238763C + cmp r0, #0 + beq _0238789C + cmp fp, #0 + beq _0238786C + mov r0, r5 + ldr r8, [r5, #0xb4] + bl ov29_02347100 +#ifdef JAPAN + strb r0, [r8, #0x15d] +#else + strb r0, [r8, #0x161] +#endif +_0238786C: + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r7, lsl #5 + str r6, [r0, #4] + ldr r0, [r5, #0xb4] +#ifdef JAPAN + ldrb r0, [r0, #0x15d] +#else + ldrb r0, [r0, #0x161] +#endif + cmp r0, #0 + movne r1, #0 + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r7 + moveq r1, #3 + strb r1, [r0, #0x84] + add r7, r7, #1 +_0238789C: + add r6, r6, #1 + cmp r6, #4 + blt _02387830 + mov r6, r7 + mvn r5, #0 + add r3, sp, #0x218 + OV31_023877EC_OFFSET + mov r1, #0 + b _023878D0 +_023878BC: + add r2, r3, r6, lsl #5 + add r0, r3, r6 + str r5, [r2, #4] + strb r1, [r0, #0x84] + add r6, r6, #1 +_023878D0: + cmp r6, #4 + blt _023878BC + mov r0, #0xb + bl Arm9LoadUnkFieldNa0x2029EC8 + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r2, #0 + ldr r3, [r1] + str r0, [r3, #0x760] + ldr r0, [r1] + str r7, [r0, #0x764] + ldr r0, [r1] + str r7, [r0, #0x768] + ldr r0, [r1] + str r2, [r0, #0x76c] + ldr r0, [r1] + str r2, [r0, #0x770] + ldr r0, [r1] + str r2, [r0, #0x754] + ldr r0, [r1] + str r2, [r0, #0x758] + bl ov29_022EA62C + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x95 + add r0, r0, #0x600 + bl ov29_0234E988 + mov r5, #0 + add r0, sp, #0x68 + OV31_023877EC_OFFSET + mov r1, r5 + mov r2, #0x80 + bl memset + mov r8, r5 + ldr fp, _0238808C ; =0x000003E7 + b _02387B80 +_02387958: + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r8, lsl #5 + ldr r1, [r0, #4] + cmp r1, #0 + blt _02387B7C + ldr r0, _02388088 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r1, lsl #2 + add r0, r0, #0x12000 + ldr r6, [r0, #0xb28 + OV31_023877EC_OFFSET_3] + mov r0, r6 + bl ov31_0238763C + cmp r0, #0 + beq _02387B7C + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r8 + ldrb r0, [r0, #0x84] + ldr r6, [r6, #0xb4] + cmp r0, #0 + movne r0, #0x57 + moveq r0, #0x44 + and r2, r0, #0xff + add r0, sp, #0x68 + OV31_023877EC_OFFSET + mov r1, r6 + bl ov29_023002F0 + add r0, sp, #0x68 + OV31_023877EC_OFFSET + str r0, [sp, #0x50 + OV31_023877EC_OFFSET] + ldrsh r0, [r6, #0xc] + bl GetActiveTeamMember + ldrsh r0, [r0, #8] + bl ov29_022F9C34 + cmp r0, #0 + ldrsh r1, [r6, #0x12] + ldrsh r0, [r6, #0x16] + beq _02387A84 + add r1, r1, r0 + cmp r1, fp + movgt r3, fp + movle r3, r1 + mov r2, r3, asr #1 + ldrsh r0, [r6, #0x10] + add r2, r3, r2, lsr #30 + cmp r0, r2, asr #2 + bgt _02387A18 + ldr r1, _02388090 ; =ov31_0238A044 + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bl strcpy + b _02387B20 +_02387A18: + cmp r1, fp + movgt r3, fp + movle r3, r1 + mov r2, r3, asr #1 + add r2, r3, r2, lsr #30 + mov r2, r2, asr #2 + cmp r0, r2, lsl #1 + bgt _02387A48 + ldr r1, _02388094 ; =ov31_0238A04C + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bl strcpy + b _02387B20 +_02387A48: + cmp r1, fp + movgt r1, fp + mov r2, r1, asr #1 + add r1, r1, r2, lsr #30 + mov r1, r1, asr #2 + add r1, r1, r1, lsl #1 + cmp r0, r1 + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bgt _02387A78 + ldr r1, _02388098 ; =ov31_0238A054 + bl strcpy + b _02387B20 +_02387A78: + ldr r1, _0238809C ; =ov31_0238A05C + bl strcpy + b _02387B20 +_02387A84: + add r1, r1, r0 + cmp r1, fp + movgt r3, fp + movle r3, r1 + mov r2, r3, asr #1 + ldrsh r0, [r6, #0x10] + add r2, r3, r2, lsr #30 + cmp r0, r2, asr #2 + bgt _02387AB8 + ldr r1, _023880A0 ; =ov31_0238A064 + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bl strcpy + b _02387B20 +_02387AB8: + cmp r1, fp + movgt r3, fp + movle r3, r1 + mov r2, r3, asr #1 + add r2, r3, r2, lsr #30 + mov r2, r2, asr #2 + cmp r0, r2, lsl #1 + bgt _02387AE8 + ldr r1, _023880A4 ; =ov31_0238A06C + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bl strcpy + b _02387B20 +_02387AE8: + cmp r1, fp + movgt r1, fp + mov r2, r1, asr #1 + add r1, r1, r2, lsr #30 + mov r1, r1, asr #2 + add r1, r1, r1, lsl #1 + cmp r0, r1 + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + bgt _02387B18 + ldr r1, _023880A8 ; =ov31_0238A074 + bl strcpy + b _02387B20 +_02387B18: + ldr r1, _023880AC ; =ov31_0238A07C + bl strcpy +_02387B20: + add r0, sp, #0xa8 + OV31_023877EC_OFFSET + str r0, [sp, #0x54 + OV31_023877EC_OFFSET] + add r0, sp, #0x18 + OV31_023877EC_OFFSET + str r0, [sp] + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r2, _023880B0 ; =ov31_0238A084 + ldr r0, [r0] + mov r1, #0x100 + add r0, r0, #0x30 + add r0, r0, r5, lsl #8 + mov r3, #0 + bl PreprocessString + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r1, r5, lsl #3 + ldr r2, [r0] + add r0, r2, #0x30 + add r0, r0, r5, lsl #8 + str r0, [r2, r5, lsl #3] + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r5, r5, #1 + ldr r0, [r0] + add r0, r0, r1 + str r5, [r0, #4] +_02387B7C: + add r8, r8, #1 +_02387B80: + cmp r8, r7 + blt _02387958 + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mov r3, #0 + ldr r1, [r0] + sub r2, r3, #1 + str r3, [r1, r5, lsl #3] + ldr r1, [r0] + ldr r0, _02388088 ; =DUNGEON_PTR + add r1, r1, r5, lsl #3 + str r2, [r1, #4] + ldr r0, [r0] + ldrb r5, [r0, #0x75b] + cmp r5, #0 + ldrne r1, _023880B4 ; =0x00000A3A + movne r0, #0x10 + strne r0, [sp, #0xf4 + OV31_023877EC_OFFSET] + mov r0, #0xb + strneh r1, [sp, #0xf0 + OV31_023877EC_OFFSET] + bl Arm9LoadUnkFieldNa0x2029EC8 + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + cmp r5, #0 + ldr r3, [r1] + add r2, sp, #0x29c + OV31_023877EC_OFFSET + str r0, [r3, #0x760] + ldr r0, [r1] + movne r1, #0x800 + ldr r0, [r0, #0x760] + moveq r1, #0 + add r0, r0, #1 + str r0, [sp, #0xe8 + OV31_023877EC_OFFSET] + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + orr r1, r1, #0x33 + ldr r3, [r0] + str r2, [sp, #0x148 + OV31_023877EC_OFFSET] + ldr r0, _023880B8 ; =DUNGEON_WINDOW_PARAMS_21 + add r2, sp, #0xe8 + OV31_023877EC_OFFSET + orr r1, r1, #0x1200 + bl CreateParentMenu + ldr r2, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, _023880BC ; =ov31_0238778C + ldr r2, [r2] + strb r0, [r2, #0x695] + ldr r0, _023880C0 ; =DUNGEON_WINDOW_PARAMS_24 + bl CreateTextBox + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r3, _023880C4 ; =0x00000A36 + ldr r2, [r1] + mov r5, #0x10 + strb r0, [r2, #0x696] + ldr r2, [r1] + str r5, [sp, #0x18c + OV31_023877EC_OFFSET] + add r0, r2, #0x92 + add r1, r0, #0x500 + add r0, sp, #0x118 + OV31_023877EC_OFFSET + strh r3, [r0, #0x70] + str r1, [sp, #0x1c8 + OV31_023877EC_OFFSET] + cmp sb, #3 + bne _02387CA8 + add r1, r3, #3 + add r0, r2, #0x600 + strh r1, [r0, #0x92] + mov r5, #0 + str r5, [sp] + ldr r0, _023880C8 ; =DUNGEON_WINDOW_PARAMS_20 + ldr r3, _023880CC ; =ov31_023877C4 + add r2, sp, #0x180 + OV31_023877EC_OFFSET + mov r1, #0x800 + str r5, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, [r1] + strb r0, [r1, #0x697] + b _02387CF4 +_02387CA8: + cmp sb, #2 + addne r1, r3, #3 + addne r0, r2, #0x600 + strneh r1, [r0, #0x92] + bne _02387CF4 + add r1, r3, #2 + add r0, r2, #0x600 + strh r1, [r0, #0x92] + mov r5, #0 + str r5, [sp] + ldr r0, _023880C8 ; =DUNGEON_WINDOW_PARAMS_20 + ldr r3, _023880CC ; =ov31_023877C4 + add r2, sp, #0x180 + OV31_023877EC_OFFSET + mov r1, #0x800 + str r5, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r1, [r1] + strb r0, [r1, #0x697] +_02387CF4: + sub r0, sb, #2 +#ifdef JAPAN + str r0, [sp, #0xc] + ldr r0, _023880D0 ; =0x00000872 + ldr r5, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r8, #0x3d8 + rsb fp, r0, #0x870 +#else + mvn r7, #0x3d8 + str r0, [sp, #0x10] + add r0, r7, #0xe10 + ldr r5, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + str r0, [sp, #0x14] + mov fp, r7, asr #9 +#endif +_02387D10: + ldr r0, [r5] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x95] + bl sub_0202AB80 + ldr r1, [r5] + str r0, [r1, #0x760] + ldr r1, [r5] + mov r0, #0xb + ldr r1, [r1, #0x760] + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 + ldr r0, [r5] + ldr r1, [r0, #0x760] + add r0, sp, #0x218 + OV31_023877EC_OFFSET + add r0, r0, r1, lsl #5 + ldr r6, [r0, #4] + cmp r6, #0 + blt _02387EC0 + ldr r0, _02388088 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r7, [r0, #0xa84] + mov r0, r7 + bl ov31_0238763C + cmp r0, #0 + cmpne r8, r6 + beq _02387E98 + cmp sb, #1 + bne _02387DCC + mov r0, r7 +#else + ldr r8, [r0, #0xb28] + mov r0, r8 + bl ov31_0238763C + cmp r0, #0 + cmpne r7, r6 + beq _02387E98 + cmp sb, #1 + bne _02387DCC + mov r0, r8 +#endif + bl sub_0203F9CC + ldr r0, [r5] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x98] + cmp r0, fp + bne _02387DC0 + mov r1, #0 + mov r0, #7 + mov r2, r1 + bl sub_0204018C + ldr r1, [r5] + strb r0, [r1, #0x698] + b _02387DC4 +_02387DC0: + bl sub_02041178 +_02387DC4: + bl sub_020407EC + b _02387E98 +_02387DCC: + ldr r0, [sp, #0x10 + OV31_023877EC_OFFSET_2] + cmp r0, #1 + bhi _02387E98 + ldr r1, [r5] + add r0, r1, #0x600 + ldrsb r0, [r0, #0x97] + str r0, [sp, #0xc + OV31_023877EC_OFFSET_2] + cmp r0, fp + beq _02387E98 + add r0, r1, #0x92 +#ifdef JAPAN + ldr r8, [r7, #0xb4] + add r0, r0, #0x500 + mov r1, r7 + mov r2, #0 + bl ov29_022E2A78 + ldrb r0, [r8, #0xbc] + cmp r0, #7 + beq _02387E24 + mov r0, r8 +#else + ldr r7, [r8, #0xb4] + add r0, r0, #0x500 + mov r1, r8 + mov r2, #0 + bl ov29_022E2A78 + ldrb r0, [r7, #0xbc] + cmp r0, #7 + beq _02387E24 + mov r0, r7 +#endif + bl IsExperienceLocked + cmp r0, #0 + beq _02387E3C +_02387E24: +#ifdef JAPAN + ldr r0, _023880D0 ; =0x00000872 + ldr r2, [r5] + add r1, r0, #6 + add r0, r2, #0x12 +#else + ldr r0, [r5] + ldr r1, _023880D0 ; =0x00000A3D + add r0, r0, #0x12 +#endif + add r0, r0, #0x600 + bl GetStringFromFileVeneer + b _02387E90 +_02387E3C: +#ifdef JAPAN + ldrb r0, [r8, #0x62] +#else + ldrb r0, [r7, #0x62] +#endif + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + bne _02387E6C + ldr r0, [r5] +#ifdef JAPAN + ldr r1, _023880D0 ; =0x00000872 +#else + ldr r1, [sp, #0x14] +#endif + add r0, r0, #0x12 + add r0, r0, #0x600 + bl GetStringFromFileVeneer + b _02387E90 +_02387E6C: + mov r0, #1 + str r0, [sp] + ldr r0, [r5] + ldr r2, _023880D4 ; =OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 + add r0, r0, #0x12 +#ifdef JAPAN + add r1, r8, #0x62 +#else + add r1, r7, #0x62 +#endif + add r0, r0, #0x600 + mov r3, #1 + bl sub_0200D310 +_02387E90: + ldr r0, [sp, #0xc + OV31_023877EC_OFFSET_2] + bl SetAdvancedTextBoxField0x1C2 +_02387E98: +#ifdef JAPAN + mov r0, r7 + mov r1, #0 + mov r2, #1 + mov r8, r6 + bl TryPointCameraToMonster + mov r2, #1 + add r0, r7, #4 +#else + mov r0, r8 + mov r1, #0 + mov r2, #1 + mov r7, r6 + bl TryPointCameraToMonster + mov r2, #1 + add r0, r8, #4 +#endif + mov r1, #0 + mov r3, r2 + bl DrawTileGrid +_02387EC0: + mov r0, #0x1b + bl AdvanceFrame + ldr r0, [r5] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x95] + bl IsParentMenuActive + cmp r0, #0 + bne _02387D10 + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x95] + bl sub_0202ABB0 + subs r3, r0, #1 + bmi _02387F24 + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r1, sp, #0x29c + OV31_023877EC_OFFSET + ldr r2, [r0] + str r3, [r2, #0x760] + ldr r0, [r0] + ldr r0, [r0, #0x760] + ldrb r0, [r1, r0] + cmp r0, #0 + movne r4, #1 + b _02387F28 +_02387F24: + mov r4, #1 +_02387F28: + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x97] + cmp r0, r1 + beq _02387F58 + bl CloseAdvancedTextBox + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x697] +_02387F58: + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x98] + cmp r0, r1 + beq _02387F8C + bl CloseAdvancedTextBox + bl sub_020407C0 + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x698] +_02387F8C: + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + ldr r0, [r0] + add r0, r0, #0x600 + ldrsb r0, [r0, #0x96] + bl CloseTextBox + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + mvn r2, #1 + ldr r1, [r0] + mov r0, #0x1b + strb r2, [r1, #0x696] + bl AdvanceFrame + cmp sb, #3 + bne _02387FEC + cmp r4, #0 + beq _0238800C + bl HideTileGrid +#ifndef JAPAN + ldr r0, [sp, #8] + cmp r0, #0 + beq _0238800C +#endif + bl GetLeader + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + b _0238800C +_02387FEC: + bl HideTileGrid +#ifndef JAPAN + ldr r0, [sp, #8] + cmp r0, #0 + beq _0238800C +#endif + bl GetLeader + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster +_0238800C: + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #4 + mov r1, #0x3e + bl ov29_022EA370 + cmp r4, #0 + beq _02388038 + bl ov31_02386F2C + mov r0, #0 + b _02388078 +_02388038: + ldr r0, _02388084 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A280 + add r1, sp, #0x21c + OV31_023877EC_OFFSET + ldr r0, [r0] + cmp sl, #0 + ldr r0, [r0, #0x760] + ldr r4, [r1, r0, lsl #5] + strne r4, [sl] + bl ov31_02386F2C + cmp r4, #0 + movlt r0, #0 + blt _02388078 + ldr r0, _02388088 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28 + OV31_023877EC_OFFSET_3] +_02388078: + add sp, sp, #0x2a4 + OV31_023877EC_OFFSET + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define OV31_023877EC_DATA_OFFSET -0x1C5 +#else +#define OV31_023877EC_DATA_OFFSET 0 +#endif +_02388080: .word 0x000007AC +_02388084: .word OVERLAY31_UNKNOWN_POINTER__NA_238A280 +_02388088: .word DUNGEON_PTR +_0238808C: .word 0x000003E7 +_02388090: .word ov31_0238A044 +_02388094: .word ov31_0238A04C +_02388098: .word ov31_0238A054 +_0238809C: .word ov31_0238A05C +_023880A0: .word ov31_0238A064 +_023880A4: .word ov31_0238A06C +_023880A8: .word ov31_0238A074 +_023880AC: .word ov31_0238A07C +_023880B0: .word ov31_0238A084 +_023880B4: .word 0x00000A3A + OV31_023877EC_DATA_OFFSET +_023880B8: .word DUNGEON_WINDOW_PARAMS_21 +_023880BC: .word ov31_0238778C +_023880C0: .word DUNGEON_WINDOW_PARAMS_24 +_023880C4: .word 0x00000A36 + OV31_023877EC_DATA_OFFSET +_023880C8: .word DUNGEON_WINDOW_PARAMS_20 +_023880CC: .word ov31_023877C4 +#ifdef JAPAN +_023880D0: .word 0x00000872 +#else +_023880D0: .word 0x00000A3D +#endif +_023880D4: .word OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 + arm_func_end ov31_023877EC + + arm_func_start ov31_023880D8 +ov31_023880D8: ; 0x023880D8 + mov r2, #0 + strb r2, [r0, #0x592] + strb r2, [r0, #0x612] + sub r1, r2, #2 + strb r1, [r0, #0x695] + strb r1, [r0, #0x694] + strb r1, [r0, #0x696] + strb r1, [r0, #0x697] + strb r1, [r0, #0x698] + str r2, [r0, #0x7a4] + str r2, [r0, #0x7a8] + str r2, [r0, #0x76c] + str r2, [r0, #0x770] + str r2, [r0, #0x760] + bx lr + arm_func_end ov31_023880D8 + + arm_func_start ov31_02388114 +ov31_02388114: ; 0x02388114 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r1 + ldr r0, _02388154 ; =0x000006D4 + mov r4, r2 + mov r1, #8 + mov r5, r3 + bl MemAlloc + mov r1, r7 + mov r2, r6 + mov r3, r4 + mov r4, r0 + str r5, [sp] + bl ov31_02388158 + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02388154: .word 0x000006D4 + arm_func_end ov31_02388114 + + arm_func_start ov31_02388158 +ov31_02388158: ; 0x02388158 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xdc + mov sl, r0 + mvn r0, #1 + strb r0, [sl] + ldr r4, [sp, #0x100] + str r3, [sl, #0x6c4] + str r4, [sl, #0x6c8] + mov r0, #0 + str r0, [sl, #0x688] + str r0, [sl, #0x68c] + str r0, [sl, #0x67c] + mov sb, r1 + str r2, [sl, #0x6c0] + sub r0, r0, #1 + mov r7, sb + str r0, [sl, #0x6b8] + add r6, sl, #4 + mov r4, #8 +_023881A4: + ldmia r7!, {r0, r1, r2, r3} + stmia r6!, {r0, r1, r2, r3} + subs r4, r4, #1 + bne _023881A4 + ldmia r7, {r0, r1, r2} + stmia r6, {r0, r1, r2} + add r0, sp, #0xc + mov r1, #0x80 + bl MemZero + mov r4, #0 + add r0, sb, #0x14 + mov r7, r4 + str r0, [sp, #8] + add fp, sl, #0xc0 + b _023883F4 +_023881E0: + ldr r0, [sb] + cmp r0, #1 + bne _023882A0 + add r0, sb, r7, lsl #5 + ldr r1, [r0, #0x20] + cmp r1, #0 + beq _023883F0 + moveq r0, #0 + beq _02388218 + ldr r0, [r1] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_02388218: + cmp r0, #0 + beq _023883F0 + add r0, sb, r7 + ldrb r0, [r0, #0x84] + ldr r6, [r1, #0xb4] + add r1, sb, r7, lsl #5 + cmp r0, #0 + movne r0, #0x57 + moveq r0, #0x44 + and r2, r0, #0xff + ldrb r0, [r1, #0x14] + cmp r0, #0 + add r0, sp, #0xc + beq _02388264 + ldrb r2, [r1, #0x1e] + ldr r1, [sp, #8] + add r1, r1, r7, lsl #5 + bl sub_02054F44 + b _0238826C +_02388264: + mov r1, r6 + bl ov29_023002F0 +_0238826C: + ldrsh r1, [r6, #0x12] + ldrsh r0, [r6, #0x16] + ldrsh r5, [r6, #0x10] + add r8, r1, r0 + ldr r0, _0238841C ; =0x000003E7 + cmp r8, r0 + movgt r8, r0 + ldrsh r0, [r6, #0xc] + bl GetActiveTeamMember + ldrsh r0, [r0, #8] + bl ov29_022F9C34 + str r0, [sp, #4] + b _023882E8 +_023882A0: + cmp r0, #0 + bne _023882E8 + add r0, sb, r7, lsl #5 + ldr r6, [r0, #0x20] + ldrb r0, [r6] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _023883F0 + ldrsh r5, [r6, #0xe] + ldrsh r8, [r6, #0x10] + ldrsh r0, [r6, #8] + bl sub_02056228 + str r0, [sp, #4] + mov r1, r6 + add r0, sp, #0xc + bl sub_020585B4 +_023882E8: + add r0, sp, #0xc + str r0, [sp, #0xc4] + ldr r0, [sp, #4] + cmp r0, #0 + mov r0, r8, asr #1 + add r0, r8, r0, lsr #30 + beq _02388360 + cmp r5, r0, asr #2 + mov r0, r0, asr #2 + bgt _02388320 + ldr r1, _02388420 ; =ov31_0238A0A8 + add r0, sp, #0x4c + bl strcpy + b _023883B8 +_02388320: + cmp r5, r0, lsl #1 + bgt _02388338 + ldr r1, _02388424 ; =ov31_0238A0B0 + add r0, sp, #0x4c + bl strcpy + b _023883B8 +_02388338: + add r0, r0, r0, lsl #1 + cmp r5, r0 + add r0, sp, #0x4c + bgt _02388354 + ldr r1, _02388428 ; =ov31_0238A0B8 + bl strcpy + b _023883B8 +_02388354: + ldr r1, _0238842C ; =ov31_0238A0C0 + bl strcpy + b _023883B8 +_02388360: + cmp r5, r0, asr #2 + mov r0, r0, asr #2 + bgt _0238837C + ldr r1, _02388430 ; =ov31_0238A0C8 + add r0, sp, #0x4c + bl strcpy + b _023883B8 +_0238837C: + cmp r5, r0, lsl #1 + bgt _02388394 + ldr r1, _02388434 ; =ov31_0238A0D0 + add r0, sp, #0x4c + bl strcpy + b _023883B8 +_02388394: + add r0, r0, r0, lsl #1 + cmp r5, r0 + add r0, sp, #0x4c + bgt _023883B0 + ldr r1, _02388438 ; =ov31_0238A0D8 + bl strcpy + b _023883B8 +_023883B0: + ldr r1, _0238843C ; =ov31_0238A0E0 + bl strcpy +_023883B8: + add r0, sp, #0x4c + str r0, [sp, #0xc8] + add r0, sp, #0x8c + str r0, [sp] + ldr r2, _02388440 ; =ov31_0238A0E8 + add r0, fp, r4, lsl #8 + mov r1, #0x100 + mov r3, #0 + bl PreprocessString + add r1, fp, r4, lsl #8 + add r0, sl, r4, lsl #3 + str r1, [r0, #0x90] + add r4, r4, #1 + str r4, [r0, #0x94] +_023883F0: + add r7, r7, #1 +_023883F4: + ldr r0, [sb, #0x88] + cmp r7, r0 + blt _023881E0 + mov r0, #0 + add r1, sl, r4, lsl #3 + str r0, [r1, #0x90] + sub r0, r0, #1 + str r0, [r1, #0x94] + add sp, sp, #0xdc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0238841C: .word 0x000003E7 +_02388420: .word ov31_0238A0A8 +_02388424: .word ov31_0238A0B0 +_02388428: .word ov31_0238A0B8 +_0238842C: .word ov31_0238A0C0 +_02388430: .word ov31_0238A0C8 +_02388434: .word ov31_0238A0D0 +_02388438: .word ov31_0238A0D8 +_0238843C: .word ov31_0238A0E0 +_02388440: .word ov31_0238A0E8 + arm_func_end ov31_02388158 + + arm_func_start ov31_02388444 +ov31_02388444: ; 0x02388444 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x98 + mov r6, r0 + mov r5, r1 + bl ov29_0234E988 + mov r0, #0xb + bl Arm9LoadUnkFieldNa0x2029EC8 + str r0, [r6, #0x67c] + ldr r1, [r6, #0x8c] + mov r0, #0 + str r1, [r6, #0x680] + ldr r1, [r6, #0x8c] + str r1, [r6, #0x684] + str r0, [r6, #0x688] + str r0, [r6, #0x68c] + str r0, [r6, #0x670] + str r0, [r6, #0x674] + bl ov29_022EA62C + ldr r0, _02388528 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r4, [r0, #0x75b] + cmp r4, #0 + ldrne r1, _0238852C ; =0x00000A3A + movne r0, #0x10 + strne r0, [sp, #0xc] + strneh r1, [sp, #8] + mov r0, #0xb + bl Arm9LoadUnkFieldNa0x2029EC8 + str r0, [r6, #0x67c] + add r1, r0, #1 + add r0, r6, #0x88 + str r1, [sp] + str r0, [sp, #0x60] + ldr r0, [r6, #0x6c0] + add r2, sp, #0 + tst r0, #2 + beq _023884FC + cmp r4, #0 + movne r3, #0x800 + ldr r1, _02388530 ; =0x00401233 + moveq r3, #0 + orr r1, r3, r1 + mov r0, r5 + add r3, r6, #0x90 + bl CreateParentMenuWrapper + b _0238851C +_023884FC: + cmp r4, #0 + movne r0, #0x800 + moveq r0, #0 + orr r1, r0, #0x33 + mov r0, r5 + orr r1, r1, #0x1200 + add r3, r6, #0x90 + bl CreateParentMenu +_0238851C: + strb r0, [r6] + add sp, sp, #0x98 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02388528: .word DUNGEON_PTR +#ifdef JAPAN +_0238852C: .word 0x00000875 +#else +_0238852C: .word 0x00000A3A +#endif +_02388530: .word 0x00401233 + arm_func_end ov31_02388444 + + arm_func_start ov31_02388534 +ov31_02388534: ; 0x02388534 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + mov r0, #0 + str r0, [sl, #0x6cc] + add r4, sl, #0x2cc + str r0, [r4, #0x404] + add sb, sl, #4 + mov r5, #2 + mov r6, #0xb + mov fp, #0x1b + mov r8, r0 + add r7, sp, #0 +_02388564: + mov r0, r8 + mov r1, r7 + bl GetPressedButtons + ldrsb r0, [sl] + bl sub_0202AB80 + str r0, [sl, #0x67c] + ldr r1, [sl, #0x6b8] + cmp r1, r0 + beq _023885DC + str r0, [sl, #0x6b8] + ldr r1, [sb] + cmp r1, #1 + bne _023885B8 + add r0, sb, r0, lsl #5 + ldr r0, [r0, #0x20] + cmp r0, #0 + ldrne r1, [sl, #0x6c4] + cmpne r1, #0 + beq _023885DC + blx r1 + b _023885DC +_023885B8: + cmp r1, #0 + bne _023885DC + add r0, sb, r0, lsl #5 + ldr r0, [r0, #0x20] + cmp r0, #0 + ldrne r1, [sl, #0x6c4] + cmpne r1, #0 + beq _023885DC + blx r1 +_023885DC: + ldr r1, [sl, #0x67c] + mov r0, r6 + and r1, r1, #0xff + bl Arm9StoreUnkFieldNa0x2029ED8 + ldr r0, [sl, #0x6c0] + tst r0, #4 + beq _02388644 + ldrh r0, [sp] + tst r0, #8 + beq _02388644 + ldr r0, [sl, #0x67c] + add r0, sb, r0 + ldrb r0, [r0, #0x84] + cmp r0, #0 + bne _02388638 + add r0, sl, #0x5c0 + mov r1, #0 + bl PlayWindowInputSound + mov r0, #2 + str r0, [r4, #0x400] + ldr r0, [sl, #0x6b8] + str r0, [r4, #0x404] + b _023886BC +_02388638: + mov r1, r5 + add r0, sl, #0x5c0 + bl PlayWindowInputSound +_02388644: + ldrsb r0, [sl] + bl IsParentMenuActive + cmp r0, #0 + bne _023886A8 + ldrsb r0, [sl] + bl sub_0202ABB0 + subs r0, r0, #1 + bmi _0238869C + ldrsb r0, [sl] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [sl, #0x67c] + add r0, sb, r0 + ldrb r0, [r0, #0x84] + cmp r0, #0 + moveq r0, #3 + streq r0, [r4, #0x400] + ldreq r0, [sl, #0x67c] + streq r0, [r4, #0x404] + movne r0, #1 + strne r0, [r4, #0x400] + b _023886BC +_0238869C: + mov r0, #1 + str r0, [r4, #0x400] + b _023886BC +_023886A8: + mov r0, sl + bl ov31_02388744 + mov r0, fp + bl AdvanceFrame + b _02388564 +_023886BC: + mov r0, sl + bl ov31_02388744 + mov r0, #0x1b + bl AdvanceFrame + bl HideTileGrid + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end ov31_02388534 + + arm_func_start ov31_023886D4 +ov31_023886D4: ; 0x023886D4 + ldr r0, [r0, #0x6cc] + bx lr + arm_func_end ov31_023886D4 + + arm_func_start ov31_023886DC +ov31_023886DC: ; 0x023886DC + ldr r1, [r0, #0x6cc] + sub r1, r1, #2 + cmp r1, #1 + ldrls r0, [r0, #0x6d0] + mvnhi r0, #0 + bx lr + arm_func_end ov31_023886DC + + arm_func_start ov31_023886F4 +ov31_023886F4: ; 0x023886F4 + ldr ip, _02388700 ; =ResumeParentMenu + ldrsb r0, [r0] + bx ip + .align 2, 0 +_02388700: .word ResumeParentMenu + arm_func_end ov31_023886F4 + + arm_func_start ov31_02388704 +ov31_02388704: ; 0x02388704 + ldr ip, _02388710 ; =GetWindowRectangle + ldrsb r0, [r0] + bx ip + .align 2, 0 +_02388710: .word GetWindowRectangle + arm_func_end ov31_02388704 + + arm_func_start ov31_02388714 +ov31_02388714: ; 0x02388714 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r4, [r5] + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, r4 + bl ov29_0234E988 + mov r0, r4 + bl MemFree + mov r0, #0 + str r0, [r5] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov31_02388714 + + arm_func_start ov31_02388744 +ov31_02388744: ; 0x02388744 + stmdb sp!, {r4, lr} + ldr r1, [r0, #0x6c0] + tst r1, #8 + ldrne r1, [r0, #0x67c] + addne r0, r0, r1, lsl #5 + ldrne r4, [r0, #0x24] + cmpne r4, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + mov r1, #0 + mov r2, #1 + bl TryPointCameraToMonster + mov r2, #1 + mov r3, r2 + add r0, r4, #4 + mov r1, #0 + bl DrawTileGrid + ldmia sp!, {r4, pc} + arm_func_end ov31_02388744 + + arm_func_start RestMenu +RestMenu: ; 0x0238878C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x9c + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r0, [r0] + cmp r0, #0 + bne _023887CC + mov r0, #0x10 + mov r1, #8 + bl MemAlloc + ldr r1, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r2, #0 + str r0, [r1] + str r2, [r0] + ldr r0, [r1] + sub r1, r2, #2 + strb r1, [r0, #4] +_023887CC: + mov r3, #0 + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r2, r3 +_023887D8: + ldr r1, [r0] + add r1, r1, r3 + add r3, r3, #1 + strb r2, [r1, #0xc] + cmp r3, #2 + blt _023887D8 + bl ov29_022E08F4 + cmp r0, #0 + ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + moveq r1, #3 + ldreq r0, [r0] + ldr ip, _023889BC ; =0x000008C2 + streqb r1, [r0, #0xc] + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r5, #0x10 + ldr r1, [r0] + ldr r0, _023889C0 ; =DUNGEON_WINDOW_PARAMS_25 + add r4, r1, #0xc + ldr r1, _023889C4 ; =0x00001A13 + ldr r3, _023889C8 ; =DUNGEON_SUBMENU_ITEMS_5 + add r2, sp, #4 + strh ip, [sp, #0xc] + str r5, [sp, #0x10] + str r4, [sp, #0x64] + bl CreateParentMenuFromStringIds + ldr r4, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r5, #0x62 + ldr r1, [r4] + strb r0, [r1, #4] +_0238884C: + mov r0, r5 + bl AdvanceFrame + ldr r0, [r4] + ldrsb r0, [r0, #4] + bl IsParentMenuActive + cmp r0, #0 + bne _0238884C + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r0, [r0] + ldrsb r0, [r0, #4] + bl sub_0202ABB0 + ldr r1, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r1, [r1] + str r0, [r1, #8] + mov r0, #0x62 + bl AdvanceFrame + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r0, [r0] + ldrsb r0, [r0, #4] + bl CloseParentMenu + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r1, [r0] + ldr r0, [r1, #8] + cmp r0, #1 + beq _023888BC + cmp r0, #2 + beq _02388908 + b _0238897C +_023888BC: + mov r2, #1 + ldr r1, _023889CC ; =0x000008C5 + mov r3, r2 + mov r0, #0 + str r2, [sp] + bl YesNoMenu + cmp r0, #1 + movne r0, #1 + bne _023888F0 + bl GetLeaderAction + mov r1, #0x2b + bl SetMonsterActionFields + mov r0, #0 +_023888F0: + cmp r0, #0 + ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mvneq r1, #0 + ldreq r0, [r0] + streq r1, [r0, #8] + b _02388984 +_02388908: + mov r2, #1 + ldr r1, _023889D0 ; =0x000008C6 + mov r3, r2 + mov r0, #0 + str r2, [sp] + bl YesNoMenu + cmp r0, #1 + movne r2, #1 + bne _02388964 + bl GetLeaderAction + mov r1, #0x2e + bl SetMonsterActionFields + bl GetLeader + mov r2, r0 + mov r1, #0 + ldr r0, _023889D4 ; =0x0000025A + mov r3, r1 + bl ov29_022ECDE4 + ldr r0, _023889D8 ; =DUNGEON_PTR + mov r1, #1 + ldr r0, [r0] + mov r2, #0 + strb r1, [r0, #0x758] +_02388964: + cmp r2, #0 + ldreq r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mvneq r1, #0 + ldreq r0, [r0] + streq r1, [r0, #8] + b _02388984 +_0238897C: + mvn r0, #0 + str r0, [r1, #8] +_02388984: + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + ldr r0, [r0] + ldr r1, [r0, #8] + cmp r1, #0 + bge _023887CC + cmp r0, #0 + beq _023889B0 + bl MemFree + ldr r0, _023889B8 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A284 + mov r1, #0 + str r1, [r0] +_023889B0: + add sp, sp, #0x9c + ldmia sp!, {r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +#define REST_MENU_OFFSET 0x1458 +#else +#define REST_MENU_OFFSET 0 +#endif +_023889B8: .word OVERLAY31_UNKNOWN_POINTER__NA_238A284 +_023889BC: .word 0x000008C2 + REST_MENU_OFFSET +_023889C0: .word DUNGEON_WINDOW_PARAMS_25 +_023889C4: .word 0x00001A13 +_023889C8: .word DUNGEON_SUBMENU_ITEMS_5 +_023889CC: .word 0x000008C5 + REST_MENU_OFFSET +_023889D0: .word 0x000008C6 + REST_MENU_OFFSET +_023889D4: .word 0x0000025A +_023889D8: .word DUNGEON_PTR + arm_func_end RestMenu + + arm_func_start ov31_023889DC +ov31_023889DC: ; 0x023889DC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x18 + mov r6, r0 + ldr r4, [r6, #0xb4] + add r3, sp, #0xc + add r0, r4, #0x9c + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + mov r0, #8 + mov r1, #0x62 + bl ov29_022EA370 + mov r0, r6 + mov r1, #1 + bl IsBlinded + mov r3, r0 + ldrsh r0, [r4, #2] + ldrsh r2, [r4, #0xe] + add r1, r4, #0x90 + bl PrintIqSkillsMenu + mov r5, #0x62 +_02388A2C: + bl sub_02041B7C + movs r7, r0 + bne _02388A44 + mov r0, r5 + bl AdvanceFrame + b _02388A2C +_02388A44: + bl sub_020420F4 + mov r0, r6 + bl ov29_023021F0 + ldr r0, [r6, #0xb4] + add r3, sp, #0 + add r0, r0, #0x9c + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + add r0, sp, #0xc + mov r1, #0x38 + bl IqSkillFlagTest + mov r5, r0 + add r0, sp, #0 + mov r1, #0x38 + bl IqSkillFlagTest + cmp r5, #0 + bne _02388AA8 + cmp r0, #0 + beq _02388AF8 + ldr r0, _02388BFC ; =_020A1870 + ldrsh r1, [r4, #0x16] + ldrsh r0, [r0] + add r0, r1, r0 + strh r0, [r4, #0x16] + b _02388AF8 +_02388AA8: + cmp r0, #0 + bne _02388AF8 + ldr r0, _02388BFC ; =_020A1870 + ldrsh r1, [r4, #0x16] + ldrsh r0, [r0] + ldr r2, _02388C00 ; =0x000003E7 + sub r0, r1, r0 + strh r0, [r4, #0x16] + ldrsh r1, [r4, #0x12] + ldrsh r0, [r4, #0x16] + add r1, r1, r0 + cmp r1, r2 + ldrsh r0, [r4, #0x10] + movle r2, r1 + cmp r0, r2 + ble _02388AF8 + ldr r0, _02388C00 ; =0x000003E7 + cmp r1, r0 + movgt r1, r0 + strh r1, [r4, #0x10] +_02388AF8: +#ifdef JAPAN + mov r0, #0x41 + bl TeamMemberHasEnabledIqSkill + ldr r2, _02389E78 ; =DUNGEON_PTR + mov r1, #0x39 + ldr r2, [r2] + add r2, r2, #0x1a000 + strb r0, [r2, #0x19d] + add r0, sp, #0xc +#else + bl UpdateMapSurveyorFlag + add r0, sp, #0xc + mov r1, #0x39 +#endif + bl IqSkillFlagTest + mov r5, r0 + add r0, sp, #0 + mov r1, #0x39 + bl IqSkillFlagTest + cmp r5, #0 + bne _02388B74 + cmp r0, #0 + beq _02388BE8 + mov r5, #0 +#ifdef JAPAN + add r3, r4, #0x120 +#else + add r3, r4, #0x124 +#endif + mov r1, r5 + mov r2, #1 +_02388B38: + ldrb r0, [r3, r5, lsl #3] + add r4, r3, r5, lsl #3 + tst r0, #1 + movne r0, r2 + moveq r0, r1 + tst r0, #0xff + ldrneh r0, [r4, #2] + orrne r0, r0, #0x100 + strneh r0, [r4, #2] + add r0, r5, #1 + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + cmp r5, #4 + blt _02388B38 + b _02388BE8 +_02388B74: + cmp r0, #0 + bne _02388BE8 + mov sb, #0 +#ifdef JAPAN + add r6, r4, #0x120 +#else + add r6, r4, #0x124 +#endif + mov r4, sb + mov r5, #1 +_02388B8C: + ldrb r0, [r6, sb, lsl #3] + add r8, r6, sb, lsl #3 + tst r0, #1 + movne r0, r5 + moveq r0, r4 + tst r0, #0xff + beq _02388BD4 + ldrh r1, [r8, #2] + mov r0, r8 + bic r1, r1, #0x100 + strh r1, [r8, #2] + bl GetMaxPp + ldrb r1, [r8, #6] + cmp r1, r0 + ble _02388BD4 + mov r0, r8 + bl GetMaxPp + strb r0, [r8, #6] +_02388BD4: + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov sb, r0, asr #0x10 + cmp sb, #4 + blt _02388B8C +_02388BE8: + cmp r7, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02388BFC: .word _020A1870 +_02388C00: .word 0x000003E7 +#ifdef JAPAN +_02389E78: .word DUNGEON_PTR +#endif + arm_func_end ov31_023889DC + + arm_func_start RecruitmentSearchMenuLoop +RecruitmentSearchMenuLoop: ; 0x02388C04 + stmdb sp!, {r3, lr} + sub sp, sp, #0xa0 + ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r1, [r0] + ldr r0, [r1, #0xd94] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _02388D24 +_02388C24: ; jump table + b _02388C34 ; case 0 + b _02388CD0 ; case 1 + b _02388CF8 ; case 2 + b _02388D18 ; case 3 +_02388C34: + ldr r0, _02388D34 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x748] + bl IsRecruitingAllowed + cmp r0, #0 + ldreq r2, _02388D38 ; =0x00000B44 + ldreq r1, _02388D3C ; =ov29_0238280C + moveq r0, #4 + streqh r2, [r1] + beq _02388D28 + ldr r0, _02388D34 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75d] + cmp r0, #0 + ldrne r2, _02388D40 ; =0x00000B45 + ldrne r1, _02388D3C ; =ov29_0238280C + movne r0, #4 + strneh r2, [r1] + bne _02388D28 + ldr r1, _02388D44 ; =0x00000B46 + mov r0, #0x10 + strh r1, [sp, #0x10] + str r0, [sp, #0x14] + mov ip, #0 + str ip, [sp] + ldr r0, _02388D48 ; =DUNGEON_WINDOW_PARAMS_26 + ldr r1, _02388D4C ; =0x00001813 + ldr r3, _02388D50 ; =ov31_02388D54 + add r2, sp, #8 + str ip, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r2, [r1] + strb r0, [r2] + ldr r1, [r1] + ldr r0, [r1, #0xd94] + add r0, r0, #1 + str r0, [r1, #0xd94] + b _02388D24 +_02388CD0: + ldrsb r0, [r1] + bl IsAdvancedTextBoxActive + cmp r0, #0 + bne _02388D24 + ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r1, [r0] + ldr r0, [r1, #0xd94] + add r0, r0, #1 + str r0, [r1, #0xd94] + b _02388D24 +_02388CF8: + ldrsb r0, [r1] + bl CloseAdvancedTextBox + ldr r0, _02388D30 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r1, [r0] + ldr r0, [r1, #0xd94] + add r0, r0, #1 + str r0, [r1, #0xd94] + b _02388D24 +_02388D18: + bl ov29_0234F77C + mov r0, #4 + b _02388D28 +_02388D24: + mov r0, #1 +_02388D28: + add sp, sp, #0xa0 + ldmia sp!, {r3, pc} + .align 2, 0 +#ifdef JAPAN +#define RECRUITMENT_SEARCH_MENU_LOOP_OFFSET -0x4FE +#else +#define RECRUITMENT_SEARCH_MENU_LOOP_OFFSET 0 +#endif +_02388D30: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 +_02388D34: .word DUNGEON_PTR +_02388D38: .word 0x00000B44 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET +_02388D3C: .word ov29_0238280C +_02388D40: .word 0x00000B45 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET +_02388D44: .word 0x00000B46 + RECRUITMENT_SEARCH_MENU_LOOP_OFFSET +_02388D48: .word DUNGEON_WINDOW_PARAMS_26 +_02388D4C: .word 0x00001813 +_02388D50: .word ov31_02388D54 + arm_func_end RecruitmentSearchMenuLoop + + arm_func_start ov31_02388D54 +ov31_02388D54: ; 0x02388D54 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xd4 + ldr r4, _02388E54 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + mov sl, r0 + ldr r0, [r4] + mov r8, #4 + ldr r0, [r0, #0xd90] + mov sb, #0x14 + cmp r0, #0 + beq _02388E30 + mov r7, #0 + add r6, sp, #0x44 + add fp, sp, #4 + add r5, sp, #0x84 + b _02388E1C +_02388D90: + add r0, r1, r7, lsl #1 + ldrsh r1, [r0, #4] + mov r0, r6 + bl GetSpeciesString + ldr r0, [r4] + add r0, r0, r7, lsl #1 + ldrsh r0, [r0, #4] + bl GetDexNumber + ldr r2, [r4] + str r0, [sp, #0xa8] + add r2, r2, r7 + ldrb r2, [r2, #0x90a] + ldr r1, _02388E58 ; =ov31_0238A154 + mov r0, fp + mov r3, r6 + bl ov31_02388E60 + mov r0, r6 + mov r1, #0x40 + mov r2, fp + mov r3, #0 + str r5, [sp] + bl PreprocessString + mov r0, sl + mov r1, r8 + mov r2, sb + mov r3, r6 + bl DrawTextInWindow + add sb, sb, #0xd + cmp sb, #0x7c + blt _02388E18 + cmp r8, #4 + bgt _02388E4C + mov r8, #0x74 + mov sb, #0x14 +_02388E18: + add r7, r7, #1 +_02388E1C: + ldr r1, [r4] + ldr r0, [r1, #0xd90] + cmp r7, r0 + blt _02388D90 + b _02388E4C +_02388E30: + ldr r0, _02388E5C ; =0x00000B47 + bl StringFromId + mov r3, r0 + mov r0, sl + mov r1, r8 + mov r2, sb + bl DrawTextInWindow +_02388E4C: + add sp, sp, #0xd4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02388E54: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 +_02388E58: .word ov31_0238A154 +#ifdef JAPAN +_02388E5C: .word 0x00000649 +#else +_02388E5C: .word 0x00000B47 +#endif + arm_func_end ov31_02388D54 + + arm_func_start ov31_02388E60 +ov31_02388E60: ; 0x02388E60 + 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 ov31_02388E60 + + arm_func_start ov31_02388E88 +ov31_02388E88: ; 0x02388E88 +#ifdef JAPAN +#define OV31_02388E88_OFFSET -0x50 +#else +#define OV31_02388E88_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x84 + sub sp, sp, #0x400 + ldr r0, _02389164 ; =OVERLAY31_UNKNOWN_STRUCT__NA_238A144 + bl sub_020348E4 + cmp r0, #0 + beq _02389158 + ldr r0, _02389168 ; =0x00000D98 + mov r1, #8 + bl MemAlloc + ldr r1, _0238916C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + mov r3, #0 + str r0, [r1] + add r5, r0, #4 + ldr r0, _02389170 ; =0x00000483 + mov r4, r3 + add r1, sp, #0 +_02388ECC: + add r2, r5, r3 + strb r4, [r1, r3] + add r3, r3, #1 + strb r4, [r2, #0x906] + cmp r3, r0 + blt _02388ECC + mov sb, #1 + mov r8, #2 + add r7, sp, #0 + ldr r6, _02389174 ; =DUNGEON_PTR + b _02388F3C +_02388EF8: + ldr r1, [r6] + mov sl, sb + add r1, r1, r4, lsl #3 + add r1, r1, #0x3900 + ldrsh r2, [r1, #0x76 + OV31_02388E88_OFFSET] + ldrsh r1, [r1, #0x78 + OV31_02388E88_OFFSET] + cmp r2, #0 + cmpeq r1, #0 + beq _02388F38 + add r0, r0, #0x174 + OV31_02388E88_OFFSET + add r0, r0, #0x3800 + add r0, r0, r4, lsl #3 + cmp r2, #0 + moveq sl, r8 + bl GetMonsterIdFromSpawnEntry + strb sl, [r7, r0] +_02388F38: + add r4, r4, #1 +_02388F3C: + ldr r0, [r6] + add r1, r0, #0x3000 +#ifdef JAPAN + ldr r1, [r1, #0xd7c] +#else + ldr r1, [r1, #0xe20] +#endif + cmp r4, r1 + blt _02388EF8 + ldrb r0, [r0, #0x790] + cmp r0, #0 + beq _02388F6C + bl GetKecleonIdToSpawnByFloor + add r1, sp, #0 + mov r2, #1 + strb r2, [r1, r0] +_02388F6C: + ldr r0, _02389174 ; =DUNGEON_PTR + mov sl, #0 + ldr r0, [r0] +#ifdef JAPAN + mov r8, #1 +#else + mov sb, #1 +#endif + add r0, r0, #0x700 + ldrsh r2, [r0, #0xa8] + cmp r2, #0 + addne r0, sp, #0 + movne r1, #1 + strneb r1, [r0, r2] +_02388F94: +#ifdef JAPAN + mov r0, r8, lsl #0x10 + add r1, sp, #0 + ldrb r1, [r1, r0, asr #16] + mov r7, r0, asr #0x10 +#else + mov r0, sb, lsl #0x10 + add r1, sp, #0 + ldrb r1, [r1, r0, asr #16] + mov r8, r0, asr #0x10 +#endif + mov r6, #0x44 + cmp r1, #0 + mov r4, #0 + beq _023890B4 +#ifdef JAPAN + mov r0, r7 +#else + mov r0, r8 +#endif + bl SpecificRecruitCheck + cmp r0, #0 + beq _023890B4 +#ifdef JAPAN + mov r0, r7 +#else + mov r0, r8 +#endif + bl CanMonsterSpawn + cmp r0, #0 + beq _023890B4 +#ifdef JAPAN + mov r0, r7 +#else + mov r0, r8 +#endif + bl GetRecruitRate2 + ldr r1, _02389178 ; =0xFFFFFC19 + cmp r0, r1 + beq _023890B4 +#ifdef JAPAN + mov sb, r4 + ldr fp, _0238A43C ; =0x0000022B + b _0238A2A8 +_0238A26C: + mov r0, sb, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetTeamMember + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _0238A2A4 + ldrsh r1, [r0, #4] + mov r0, r7 + bl BaseFormsEqual + cmp r0, #0 + bne _0238A2B0 +_0238A2A4: + add sb, sb, #1 +_0238A2A8: + cmp sb, fp + blt _0238A26C +_0238A2B0: + ldr r0, _0238A43C ; =0x0000022B + cmp sb, r0 + movne r4, #1 + cmp r4, #0 + bne _0238906C + mov sb, #0 + b _0238905C +_0238900C: + mov r0, sb, lsl #0x10 +#else + mov r0, r8 + mov r1, #1 + bl IsMonsterOnTeam + cmp r0, #0 + movne r4, #1 + cmp r4, #0 + bne _0238906C + mov r7, #0 + b _0238905C +_0238900C: + mov r0, r7, lsl #0x10 +#endif + mov r0, r0, asr #0x10 + bl GetActiveTeamMember + mov fp, r0 + ldrb r0, [fp] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02389058 + ldrsh r0, [fp, #8] + bl CheckTeamMemberIdxVeneer + cmp r0, #0 + bne _02389058 + ldrsh r1, [fp, #0xc] +#ifdef JAPAN + mov r0, r7 + bl BaseFormsEqual + cmp r0, #0 + bne _02389064 +_02389058: + add sb, sb, #1 +_0238905C: + cmp sb, #4 + blt _0238900C +_02389064: + cmp sb, #4 + movne r4, #1 +_0238906C: + add sb, r5, sl + ldrb r0, [sb, #0x906] +#else + mov r0, r8 + bl BaseFormsEqual + cmp r0, #0 + bne _02389064 +_02389058: + add r7, r7, #1 +_0238905C: + cmp r7, #4 + blt _0238900C +_02389064: + cmp r7, #4 + movne r4, #1 +_0238906C: + add r7, r5, sl + ldrb r0, [r7, #0x906] +#endif + cmp r4, #0 + movne r6, #0x46 + cmp r6, r0 + bne _023890A4 +#ifdef JAPAN + mov r0, r7 +#else + mov r0, r8 +#endif + bl GetDexNumber + mov r1, sl, lsl #1 + mov r4, r0 + ldrsh r0, [r5, r1] + bl GetDexNumber + cmp r4, r0 + beq _023890B4 +_023890A4: + mov r0, sl, lsl #1 +#ifdef JAPAN + strh r7, [r5, r0] + strb r6, [sb, #0x906] +#else + strh r8, [r5, r0] + strb r6, [r7, #0x906] +#endif + add sl, sl, #1 +_023890B4: + ldr r0, _02389170 ; =0x00000483 +#ifdef JAPAN + add r8, r8, #1 + cmp r8, r0 +#else + add sb, sb, #1 + cmp sb, r0 +#endif + blt _02388F94 + add r0, r5, #6 + str sl, [r5, #0xd8c] + add r6, r0, #0x900 + mov r8, #0 + b _02389140 +_023890D8: + add r7, r8, #1 + mov fp, r8, lsl #1 + b _02389134 +_023890E4: + mov r1, r7, lsl #1 + ldrsh r0, [r5, r1] + ldrsh sb, [r5, r1] + bl GetDexNumber + mov r4, r0 + ldrsh r0, [r5, fp] + bl GetDexNumber + ldrsh r2, [r5, fp] + add r1, sb, r4, lsl #11 + add r0, r2, r0, lsl #11 + cmp r1, r0 + bge _02389130 + ldrb r1, [r6, r7] + mov r0, r7, lsl #1 + strh r2, [r5, r0] + ldrb r0, [r6, r8] + strb r0, [r6, r7] + strh sb, [r5, fp] + strb r1, [r6, r8] +_02389130: + add r7, r7, #1 +_02389134: + cmp r7, sl + blt _023890E4 + add r8, r8, #1 +_02389140: + cmp r8, sl + blt _023890D8 + ldr r0, _0238916C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0xd94] +_02389158: + add sp, sp, #0x84 + add sp, sp, #0x400 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02389164: .word OVERLAY31_UNKNOWN_STRUCT__NA_238A144 +_02389168: .word 0x00000D98 +_0238916C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 +_02389170: .word 0x00000483 +_02389174: .word DUNGEON_PTR +_02389178: .word 0xFFFFFC19 +#ifdef JAPAN +_0238A43C: .word 0x0000022B +#endif + arm_func_end ov31_02388E88 + + arm_func_start ov31_0238917C +ov31_0238917C: ; 0x0238917C + stmdb sp!, {r3, lr} + ldr r0, _023891A4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl MemFree + ldr r0, _023891A4 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A288 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_023891A4: .word OVERLAY31_UNKNOWN_POINTER__NA_238A288 + arm_func_end ov31_0238917C + + arm_func_start ov31_023891A8 +ov31_023891A8: ; 0x023891A8 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl sub_02030A18 + mov r4, r0 + ldr r0, _023891F8 ; =DUNGEON_SUBMENU_ITEMS_6 + mov r1, r4, lsl #3 + ldrh r1, [r0, r1] + mov r0, r5 + bl sub_02030A2C +#if defined(EUROPE) + add r0, r4, #0xb2 + add r0, r0, #0x3f00 +#elif defined(JAPAN) + add r0, r4, #0xb3 + add r0, r0, #0x4900 +#else + add r0, r4, #0xfb0 + add r0, r0, #0x3000 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r3, r0 + mov r0, r5 + mov r1, #4 + mov r2, #0x10 + bl DrawTextInWindow + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_023891F8: .word DUNGEON_SUBMENU_ITEMS_6 + arm_func_end ov31_023891A8 + + arm_func_start HelpMenuLoop +HelpMenuLoop: ; 0x023891FC + stmdb sp!, {r4, lr} + sub sp, sp, #0xa0 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r2, [r0] + ldr r0, [r2, #8] + cmp r0, #6 + addls pc, pc, r0, lsl #2 + b _023893F0 +_0238921C: ; jump table + b _02389238 ; case 0 + b _023892B8 ; case 1 + b _02389278 ; case 2 + b _02389344 ; case 3 + b _023893A8 ; case 4 + b _023893DC ; case 5 + b _023893DC ; case 6 +_02389238: + ldr ip, _02389400 ; =0x00003FA7 + mov r4, #0x10 + ldr r0, _02389404 ; =DUNGEON_WINDOW_PARAMS_27 + ldr r1, _02389408 ; =0x00401813 + ldr r3, _0238940C ; =DUNGEON_SUBMENU_ITEMS_6 + add r2, sp, #8 + strh ip, [sp, #0x10] + str r4, [sp, #0x14] + bl CreateParentMenuFromStringIds + ldr r1, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r2, #1 + ldr r3, [r1] + strb r0, [r3] + ldr r0, [r1] + str r2, [r0, #8] + b _023893F0 +_02389278: + ldrsb r0, [r2] + bl sub_02028354 + cmp r0, #3 + bne _02389298 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202810C +_02389298: + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl ResumeParentMenu + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #1 + ldr r0, [r0] + str r1, [r0, #8] +_023892B8: + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl IsParentMenuActive + cmp r0, #0 + bne _023893F0 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202ABB0 + movs r4, r0 + bmi _02389320 + bl sub_02001808 + cmp r0, #0xa000 + ldrlt r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + movlt r1, #2 + ldrlt r0, [r0] + strlt r1, [r0, #8] + blt _023893F0 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #3 + ldr r2, [r0] + str r4, [r2, #4] + ldr r0, [r0] + str r1, [r0, #8] + b _02389330 +_02389320: + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #6 + ldr r0, [r0] + str r1, [r0, #8] +_02389330: + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0] + bl sub_0202812C + b _023893F0 +_02389344: + mov r0, #0x10 + str r0, [sp, #0x14] + ldr r1, [r2, #4] + ldr r0, _0238940C ; =DUNGEON_SUBMENU_ITEMS_6 + mov r1, r1, lsl #3 + ldrh r1, [r0, r1] + mov ip, #8 + ldr r0, _02389410 ; =DUNGEON_WINDOW_PARAMS_28 + strh r1, [sp, #0x10] + ldr r2, [r2, #4] + ldr r1, _02389414 ; =0x00009833 + str r2, [sp, #8] + str ip, [sp] + mov ip, #1 + ldr r3, _02389418 ; =ov31_023891A8 + add r2, sp, #8 + str ip, [sp, #4] + bl CreateAdvancedTextBox + ldr r1, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r2, #4 + ldr r3, [r1] + strb r0, [r3, #1] + ldr r0, [r1] + str r2, [r0, #8] + b _023893F0 +_023893A8: + ldrsb r0, [r2, #1] + bl IsAdvancedTextBoxActive + cmp r0, #0 + bne _023893F0 + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + ldrsb r0, [r0, #1] + bl CloseAdvancedTextBox + ldr r0, _023893FC ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #2 + ldr r0, [r0] + str r1, [r0, #8] + b _023893F0 +_023893DC: + ldrsb r0, [r2] + bl CloseParentMenu + bl ov29_0234F77C + mov r0, #4 + b _023893F4 +_023893F0: + mov r0, #1 +_023893F4: + add sp, sp, #0xa0 + ldmia sp!, {r4, pc} + .align 2, 0 +_023893FC: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C +#if defined(EUROPE) +_02389400: .word 0x00003FA9 +#elif defined(JAPAN) +_02389400: .word 0x000049AA +#else +_02389400: .word 0x00003FA7 +#endif +_02389404: .word DUNGEON_WINDOW_PARAMS_27 +_02389408: .word 0x00401813 +_0238940C: .word DUNGEON_SUBMENU_ITEMS_6 +_02389410: .word DUNGEON_WINDOW_PARAMS_28 +_02389414: .word 0x00009833 +_02389418: .word ov31_023891A8 + arm_func_end HelpMenuLoop + + arm_func_start ov31_0238941C +ov31_0238941C: ; 0x0238941C + stmdb sp!, {r3, lr} + ldr r0, _02389458 ; =OVERLAY31_UNKNOWN_STRUCT__NA_238A190 + bl sub_020348E4 + cmp r0, #0 + ldmeqia sp!, {r3, pc} + mov r0, #0xc + mov r1, #8 + bl MemAlloc + ldr r1, _0238945C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r2, #0 + str r0, [r1] + str r2, [r0, #4] + ldr r0, [r1] + str r2, [r0, #8] + ldmia sp!, {r3, pc} + .align 2, 0 +_02389458: .word OVERLAY31_UNKNOWN_STRUCT__NA_238A190 +_0238945C: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C + arm_func_end ov31_0238941C + + arm_func_start ov31_02389460 +ov31_02389460: ; 0x02389460 + stmdb sp!, {r3, lr} + ldr r0, _02389488 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl MemFree + ldr r0, _02389488 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A28C + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02389488: .word OVERLAY31_UNKNOWN_POINTER__NA_238A28C + arm_func_end ov31_02389460 + + arm_func_start ov31_0238948C +ov31_0238948C: ; 0x0238948C + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x134 +#ifdef JAPAN + mov r5, r0 + mov r0, #0x410 + mov r1, #8 + bl MemAlloc + mov r1, #0x410 + mov r4, r0 + bl MemZero + mvn r1, #1 + strb r1, [r4] + add r0, r4, #0x30c + strb r1, [r4, #1] + bl ov31_02389D80 + mov r0, #0 + str r0, [r4, #0x40c] + strb r0, [r4, #0x408] + bl ov29_022EA62C + mov r0, r4 + mov r1, r5 + bl ov31_02389A78 + ldr r1, [r4, #0x40c] + mov r0, #8 + str r1, [r4, #0x3cc] + str r0, [r4, #0x3d0] + mov r1, #0 + str r1, [r4, #0x3d4] + str r1, [r4, #0x3d8] + str r1, [r4, #0x3bc] + mov r0, #0x10 + str r0, [r4, #0x3c0] + mov r0, r4 + str r1, [r4, #0x3c8] + bl ov29_0234E988 + add r0, sp, #0xac + bl InitPreprocessorArgs + ldrb r0, [r4, #0x408] + cmp r0, #0 + ldrne r1, _023898F0 ; =0x0000158C + mov r0, #0x10 + ldreq r1, _023898F4 ; =0x0000158B + str r0, [sp, #0xa8] + strh r1, [sp, #0xa4] + ldrb r0, [r4, #0x408] + cmp r0, #0 + bne _0238A820 + ldr r1, [r4, #0x404] + add r0, r4, #0x78 + ldr r1, [r1, #0xb4] + bl GetMonsterName + add r0, r4, #0x78 + str r0, [sp, #0xe4] +_0238A820: + ldr r0, _023898F8 ; =DUNGEON_WINDOW_PARAMS_31 + ldr r1, _023898FC ; =0x80401813 + add r2, sp, #0x9c + add r3, r4, #0xc4 + bl CreateParentMenu + strb r0, [r4] +_0238A838: + mov r0, #0x3d + bl AdvanceFrame + ldr r0, [r4, #0x404] + bl ov29_0234FB50 + mov r7, r0 + add r1, sp, #0 + mov r0, #0 + bl GetPressedButtons + ldrsb r0, [r4] + bl IsParentMenuActive + cmp r0, #0 + bne _0238AA84 + ldrsb r0, [r4] + bl sub_0202ABB0 + movs r6, r0 + bmi _0238AA78 + ldrsb r0, [r4] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r4, #0x3c8] + add r1, r4, r0 + add r0, r4, #0x30c + ldrb r5, [r1, #0xb8] + bl ov31_02389D80 + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 + bl ov29_022EBA70 + mov r0, #0x2f + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0xc + mov r1, #0 + bl AddDungeonSubMenuOption + cmp r7, #0 + beq _0238A8CC + mov r0, #0x2f + bl DisableDungeonSubMenuOption +_0238A8CC: + add r1, r4, #0x6c + add r0, r4, #4 + mov r2, #0 + str r1, [sp, #0x64] + bl ov31_0238513C + bl ov29_022EBA84 + mov r3, #0 + b _0238A8FC +_0238A8EC: + add r2, r3, #1 + add r1, r4, r3, lsl #3 + mov r3, r2 + str r2, [r1, #8] +_0238A8FC: + cmp r3, r0 + blt _0238A8EC + ldr r0, _02389904 ; =0x00000877 + add r2, r4, r3, lsl #3 + strh r0, [r2, #4] + mvn r1, #1 + mov r0, #0 + str r1, [r2, #8] + strh r0, [r2, #0xc] + sub r1, r0, #1 + add r0, r4, #1 + str r1, [r2, #0x10] + bl ov29_0234E988 + ldr r0, _02389908 ; =0x0238B4C0 + ldr r1, _0238990C ; =0x80000213 + add r2, sp, #4 + add r3, r4, #4 + bl CreateParentMenuFromStringIds + strb r0, [r4, #1] + mvn r8, #0 + mov r7, #0x3d +_0238A950: + mov r0, r7 + bl AdvanceFrame + ldrsb r0, [r4, #1] + bl IsParentMenuActive + cmp r0, #0 + bne _0238A950 + ldrsb r0, [r4, #1] + bl sub_0202ABB0 + subs r1, r0, #1 + bmi _0238A998 + ldrsb r0, [r4, #1] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r4, #0x3c8] + bl ov29_022EB804 + cmp r0, #0 + movne r8, #0 + b _0238A9AC +_0238A998: + mvn r0, #2 + cmp r1, r0 + bne _0238A9AC + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 +_0238A9AC: + cmp r8, #0 + bge _0238A9C8 + add r0, r4, #1 + bl ov29_0234E988 + ldrsb r0, [r4] + bl ResumeParentMenu + b _0238AB68 +_0238A9C8: + ldr r0, [r4, #0x3c8] + cmp r0, #0 + bne _0238AA3C + ldr r0, _02389910 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldrb r0, [r4, #0x408] + cmp r0, #0 + beq _0238A9F8 + mov r0, r5 + bl ov31_02389C68 + b _0238AA04 +_0238A9F8: + ldr r0, [r4, #0x404] + mov r1, r5 + bl ov31_02389C2C +_0238AA04: + ldr r1, [r4, #0x404] + mov r0, r4 + bl ov31_02389A78 + add r0, r4, #1 + bl ov29_0234E988 + ldrsb r0, [r4] + bl ResumeParentMenu + ldrsb r0, [r4] + add r1, r4, #0xc4 + bl sub_0202A98C + ldrsb r0, [r4] + sub r1, r6, #1 + bl sub_0202AB94 + b _0238AB68 +_0238AA3C: + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 + bl sub_02001808 + cmp r0, #0xa000 + bge _0238AA64 + add r0, r4, #1 + bl ov29_0234E988 + ldrsb r0, [r4] + bl ResumeParentMenu + b _0238AB68 +_0238AA64: + ldrsb r1, [r4] + mov r0, r5 + mov r2, #1 + bl ov31_02389CC0 + b _0238AB68 +_0238AA78: + bl ov29_022EAC78 + mov r0, #1 + b _0238AB6C +_0238AA84: + ldrh r0, [sp] + tst r0, #8 + beq _0238AADC + ldr r0, _02389914 ; =0x00003F04 + bl ov29_022EACCC + bl sub_02001808 + cmp r0, #0xa000 + blt _0238AB68 + ldrsb r0, [r4] + bl sub_0202B030 + mov r0, #0x3d + bl AdvanceFrame + ldrsb r0, [r4] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r4, #0x3c8] + add r0, r4, r0 + ldrb r0, [r0, #0xb8] + ldrsb r1, [r4] + mov r2, #1 + bl ov31_02389CC0 + b _0238AB68 +_0238AADC: + tst r0, #4 + beq _0238AB68 + cmp r7, #0 + beq _0238AAFC + ldr r0, _02389918 ; =0x00003F03 + mov r1, #0x100 + bl sub_02017C74 + b _0238AB68 +_0238AAFC: + ldrsb r0, [r4] + bl sub_0202B030 + ldrsb r0, [r4] + bl sub_0202ABB0 + mov r5, r0 + ldr r0, _02389910 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldrb r0, [r4, #0x408] + cmp r0, #0 + add r0, r4, r5 + beq _0238AB38 + ldrb r0, [r0, #0xb7] + bl ov31_02389C68 + b _0238AB44 +_0238AB38: + ldrb r1, [r0, #0xb7] + ldr r0, [r4, #0x404] + bl ov31_02389C2C +_0238AB44: + ldr r1, [r4, #0x404] + mov r0, r4 + bl ov31_02389A78 + ldrsb r0, [r4] + add r1, r4, #0xc4 + bl sub_0202A98C + ldrsb r0, [r4] + sub r1, r5, #1 + bl sub_0202AB94 +_0238AB68: + mov r0, #0 +_0238AB6C: + cmp r0, #0 + beq _0238A838 + add r0, r4, #1 + bl ov29_0234E988 + mov r0, r4 + bl ov29_0234E988 + mov r0, #0x3d + bl AdvanceFrame + add r0, r4, #1 + bl ov29_0234E988 + mov r0, r4 + bl ov29_0234E988 + mov r0, r4 +#else + mov r4, r0 + mov r0, #0x530 + mov r1, #8 + bl MemAlloc + mov r5, r0 + mov r1, #0x530 + bl MemZero + add r0, r5, #0x2c + mvn r1, #1 + strb r1, [r5] + add r0, r0, #0x400 + strb r1, [r5, #1] + bl ov31_02389D80 + mov r0, #0 + str r0, [r5, #0x52c] + strb r0, [r5, #0x528] + bl ov29_022EA62C + mov r0, r5 + mov r1, r4 + bl ov31_02389A78 + ldr r1, [r5, #0x52c] + mov r0, #8 + str r1, [r5, #0x4ec] + str r0, [r5, #0x4f0] + mov r1, #0 + str r1, [r5, #0x4f4] + str r1, [r5, #0x4f8] + str r1, [r5, #0x4dc] + mov r0, #0x10 + str r0, [r5, #0x4e0] + mov r0, r5 + str r1, [r5, #0x4e8] + bl ov29_0234E988 + add r0, sp, #0xac + bl InitPreprocessorArgs + ldrb r0, [r5, #0x528] + cmp r0, #0 + ldrne r1, _023898F0 ; =0x00000F5F + mov r0, #0x10 + ldreq r1, _023898F4 ; =0x00000F5E + str r0, [sp, #0xa8] + strh r1, [sp, #0xa4] + ldrb r0, [r5, #0x528] + cmp r0, #0 + bne _02389560 + ldr r1, [r5, #0x524] + add r0, r5, #0x78 + ldr r1, [r1, #0xb4] + bl GetMonsterName + add r0, r5, #0x78 + str r0, [sp, #0xe4] +_02389560: + ldr r0, _023898F8 ; =DUNGEON_WINDOW_PARAMS_31 + ldr r1, _023898FC ; =0x80401813 + add r2, sp, #0x9c + add r3, r5, #0xc4 + bl CreateParentMenu + strb r0, [r5] +_02389578: + mov r0, #0x3d + bl AdvanceFrame + ldr r0, [r5, #0x524] + bl ov29_0234FB50 + mov r4, r0 + add r1, sp, #0 + mov r0, #0 + bl GetPressedButtons + ldrsb r0, [r5] + bl IsParentMenuActive + cmp r0, #0 + bne _023897C8 + ldrsb r0, [r5] + bl sub_0202ABB0 + movs r7, r0 + bmi _023897BC + ldrsb r0, [r5] + bl sub_0202ABB0 + sub r1, r0, #1 + add r0, r5, #0x2c + str r1, [r5, #0x4e8] + add r1, r5, r1 + add r0, r0, #0x400 + ldrb r6, [r1, #0xb8] + bl ov31_02389D80 + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 + bl ov29_022EBA70 + mov r0, #0x2f + mov r1, #0 + bl AddDungeonSubMenuOption + mov r0, #0xc + mov r1, #0 + bl AddDungeonSubMenuOption + cmp r4, #0 + beq _02389610 + mov r0, #0x2f + bl DisableDungeonSubMenuOption +_02389610: + add r1, r5, #0x6c + add r0, r5, #4 + mov r2, #0 + str r1, [sp, #0x64] + bl ov31_0238513C + bl ov29_022EBA84 + mov r3, #0 + b _02389640 +_02389630: + add r2, r3, #1 + add r1, r5, r3, lsl #3 + mov r3, r2 + str r2, [r1, #8] +_02389640: + cmp r3, r0 + blt _02389630 + ldr r0, _02389904 ; =0x00000A3C + add r2, r5, r3, lsl #3 + strh r0, [r2, #4] + mvn r1, #1 + mov r0, #0 + str r1, [r2, #8] + strh r0, [r2, #0xc] + sub r1, r0, #1 + add r0, r5, #1 + str r1, [r2, #0x10] + bl ov29_0234E988 + ldr r0, _02389908 ; =DUNGEON_WINDOW_PARAMS_30 + ldr r1, _0238990C ; =0x80000213 + add r2, sp, #4 + add r3, r5, #4 + bl CreateParentMenuFromStringIds + strb r0, [r5, #1] + mvn r8, #0 + mov r4, #0x3d +_02389694: + mov r0, r4 + bl AdvanceFrame + ldrsb r0, [r5, #1] + bl IsParentMenuActive + cmp r0, #0 + bne _02389694 + ldrsb r0, [r5, #1] + bl sub_0202ABB0 + subs r1, r0, #1 + bmi _023896DC + ldrsb r0, [r5, #1] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r5, #0x4e8] + bl ov29_022EB804 + cmp r0, #0 + movne r8, #0 + b _023896F0 +_023896DC: + mvn r0, #2 + cmp r1, r0 + bne _023896F0 + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 +_023896F0: + cmp r8, #0 + bge _0238970C + add r0, r5, #1 + bl ov29_0234E988 + ldrsb r0, [r5] + bl ResumeParentMenu + b _023898AC +_0238970C: + ldr r0, [r5, #0x4e8] + cmp r0, #0 + bne _02389780 + ldr r0, _02389910 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldrb r0, [r5, #0x528] + cmp r0, #0 + beq _0238973C + mov r0, r6 + bl ov31_02389C68 + b _02389748 +_0238973C: + ldr r0, [r5, #0x524] + mov r1, r6 + bl ov31_02389C2C +_02389748: + ldr r1, [r5, #0x524] + mov r0, r5 + bl ov31_02389A78 + add r0, r5, #1 + bl ov29_0234E988 + ldrsb r0, [r5] + bl ResumeParentMenu + ldrsb r0, [r5] + add r1, r5, #0xc4 + bl sub_0202A98C + ldrsb r0, [r5] + sub r1, r7, #1 + bl sub_0202AB94 + b _023898AC +_02389780: + ldr r0, _02389900 ; =0x00003F02 + bl sub_02017C80 + bl sub_02001808 + cmp r0, #0xa000 + bge _023897A8 + add r0, r5, #1 + bl ov29_0234E988 + ldrsb r0, [r5] + bl ResumeParentMenu + b _023898AC +_023897A8: + ldrsb r1, [r5] + mov r0, r6 + mov r2, #1 + bl ov31_02389CC0 + b _023898AC +_023897BC: + bl ov29_022EAC78 + mov r0, #1 + b _023898B0 +_023897C8: + ldrh r0, [sp] + tst r0, #8 + beq _02389820 + ldr r0, _02389914 ; =0x00003F04 + bl ov29_022EACCC + bl sub_02001808 + cmp r0, #0xa000 + blt _023898AC + ldrsb r0, [r5] + bl sub_0202B030 + mov r0, #0x3d + bl AdvanceFrame + ldrsb r0, [r5] + bl sub_0202ABB0 + sub r0, r0, #1 + str r0, [r5, #0x4e8] + add r0, r5, r0 + ldrb r0, [r0, #0xb8] + ldrsb r1, [r5] + mov r2, #1 + bl ov31_02389CC0 + b _023898AC +_02389820: + tst r0, #4 + beq _023898AC + cmp r4, #0 + beq _02389840 + ldr r0, _02389918 ; =0x00003F03 + mov r1, #0x100 + bl sub_02017C74 + b _023898AC +_02389840: + ldrsb r0, [r5] + bl sub_0202B030 + ldrsb r0, [r5] + bl sub_0202ABB0 + mov r4, r0 + ldr r0, _02389910 ; =0x00003F07 + mov r1, #0x100 + bl sub_02017C74 + ldrb r0, [r5, #0x528] + cmp r0, #0 + add r0, r5, r4 + beq _0238987C + ldrb r0, [r0, #0xb7] + bl ov31_02389C68 + b _02389888 +_0238987C: + ldrb r1, [r0, #0xb7] + ldr r0, [r5, #0x524] + bl ov31_02389C2C +_02389888: + ldr r1, [r5, #0x524] + mov r0, r5 + bl ov31_02389A78 + ldrsb r0, [r5] + add r1, r5, #0xc4 + bl sub_0202A98C + ldrsb r0, [r5] + sub r1, r4, #1 + bl sub_0202AB94 +_023898AC: + mov r0, #0 +_023898B0: + cmp r0, #0 + beq _02389578 + add r0, r5, #1 + bl ov29_0234E988 + mov r0, r5 + bl ov29_0234E988 + mov r0, #0x3d + bl AdvanceFrame + add r0, r5, #1 + bl ov29_0234E988 + mov r0, r5 + bl ov29_0234E988 + mov r0, r5 +#endif + bl MemFree + add sp, sp, #0x134 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +_023898F0: .word 0x0000158C +_023898F4: .word 0x0000158B +#else +_023898F0: .word 0x00000F5F +_023898F4: .word 0x00000F5E +#endif +_023898F8: .word DUNGEON_WINDOW_PARAMS_31 +_023898FC: .word 0x80401813 +_02389900: .word 0x00003F02 +#ifdef JAPAN +_02389904: .word 0x00000877 +#else +_02389904: .word 0x00000A3C +#endif +_02389908: .word DUNGEON_WINDOW_PARAMS_30 +_0238990C: .word 0x80000213 +_02389910: .word 0x00003F07 +_02389914: .word 0x00003F04 +_02389918: .word 0x00003F03 + arm_func_end ov31_0238948C + + arm_func_start ov31_0238991C +ov31_0238991C: ; 0x0238991C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + mov r0, #2 + mov r1, #8 + bl MemAlloc + mov r1, r5 + mov r2, r4 + mov r4, r0 + bl ov31_0238994C + mov r0, r4 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov31_0238991C + + arm_func_start ov31_0238994C +ov31_0238994C: ; 0x0238994C + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + mov r3, r2, asr #2 + mov r4, r0 + mov r0, r1, asr #2 + add r2, r2, r3, lsr #29 + add ip, r1, r0, lsr #29 + ldr r6, _023899B0 ; =DUNGEON_WINDOW_PARAMS_32 + mov lr, r2, asr #3 + add r5, sp, #0 + ldmia r6, {r0, r1, r2, r3} + stmia r5, {r0, r1, r2, r3} + mov ip, ip, asr #3 + add r3, lr, #1 + ldr r1, _023899B4 ; =ov31_02389A04 + mov r0, r5 + mov r2, r4 + strb ip, [sp, #4] + strb r3, [sp, #5] + bl CreateTextBoxWithArg + strb r0, [r4] + mov r0, #0xb + strb r0, [r4, #1] + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_023899B0: .word DUNGEON_WINDOW_PARAMS_32 +_023899B4: .word ov31_02389A04 + arm_func_end ov31_0238994C + + arm_func_start ov31_023899B8 +ov31_023899B8: ; 0x023899B8 + stmdb sp!, {r3, lr} + strb r1, [r0, #1] + cmp r2, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + bl sub_0202F9B8 + ldmia sp!, {r3, pc} + arm_func_end ov31_023899B8 + + arm_func_start ov31_023899D4 +ov31_023899D4: ; 0x023899D4 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r4, [r5] + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldrsb r0, [r4] + bl CloseTextBox2 + mov r0, r4 + bl MemFree + mov r0, #0 + str r0, [r5] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov31_023899D4 + + arm_func_start ov31_02389A04 +ov31_02389A04: ; 0x02389A04 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x94 + mov r5, r0 + mov r4, r1 + bl sub_02027B1C + add r0, sp, #0x44 + bl InitPreprocessorArgs + ldrb r0, [r4, #1] + ldr r3, _02389A70 ; =0x0000C402 + add ip, sp, #0x44 + cmp r0, #0xb + strne r0, [sp, #0x54] +#ifdef JAPAN + ldreq r2, _0238AD30 ; =0x0000158D + add r0, sp, #4 + ldrne r2, _02389A74 ; =0x0000158E +#else + moveq r2, #0xf60 + ldrne r2, _02389A74 ; =0x00000F61 + add r0, sp, #4 +#endif + mov r1, #0x40 + str ip, [sp] + bl PreprocessStringFromId + add r3, sp, #4 + mov r0, r5 + mov r1, #4 + mov r2, #2 + bl DrawTextInWindow + mov r0, r5 + bl UpdateWindow + add sp, sp, #0x94 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02389A70: .word 0x0000C402 +#ifdef JAPAN +_0238AD30: .word 0x0000158D +_02389A74: .word 0x0000158E +#else +_02389A74: .word 0x00000F61 +#endif + arm_func_end ov31_02389A04 + + arm_func_start ov31_02389A78 +ov31_02389A78: ; 0x02389A78 +#ifdef JAPAN +#define OV31_02389A78_OFFSET -0x120 +#else +#define OV31_02389A78_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x70 + mov sb, r1 + ldr r4, [sb, #0xb4] + mov sl, r0 + ldrb r0, [r4, #7] + strb r0, [sl, #0x528 + OV31_02389A78_OFFSET] + bl GetLeaderMonster + ldrb r1, [r0, #0xa] + add r0, sp, #0x14 + bl GetUnlockedTactics + ldrb r0, [sl, #0x528 + OV31_02389A78_OFFSET] + cmp r0, #0 + beq _02389B64 + mov r6, #0 + bl GetLeaderMonster + ldrb r1, [r0, #0xa] + add r0, sp, #8 + bl GetUnlockedTactics + ldr r4, _02389C20 ; =DUNGEON_PTR + mov r7, r6 + add r5, sp, #4 +_02389AD0: + ldr r0, [r4] + add r0, r0, r7, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r8, [r0, #0xa84] +#else + ldr r8, [r0, #0xb28] +#endif + mov r0, r8 + bl ov29_0234FB60 + cmp r0, #0 + beq _02389B08 + ldr r1, [r8, #0xb4] + add r0, r6, #1 + ldrb r1, [r1, #0xa8] + mov r0, r0, lsl #0x10 + strb r1, [r5, r6] + mov r6, r0, asr #0x10 +_02389B08: + add r0, r7, #1 + mov r0, r0, lsl #0x10 + mov r7, r0, asr #0x10 + cmp r7, #4 + blt _02389AD0 + cmp r6, #0 + moveq r6, #0xb + beq _02389B68 + mov r3, #1 + ldrb r2, [sp, #4] + add r1, sp, #4 + b _02389B54 +_02389B38: + ldrb r0, [r1, r3] + cmp r2, r0 + movne r6, #0xb + bne _02389B68 + add r0, r3, #1 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 +_02389B54: + cmp r3, r6 + blt _02389B38 + ldrb r6, [sp, #4] + b _02389B68 +_02389B64: + ldrb r6, [r4, #0xa8] +_02389B68: + mov r8, #0 + add r4, sl, #0x12c + add fp, sp, #0x14 + add r5, sp, #0x20 + b _02389BF4 +_02389B7C: + ldrb r1, [fp, r8] + add r0, sl, r8 + strb r1, [r0, #0xb8] + cmp r1, #0xb + beq _02389BFC + str r1, [sp, #0x30] + cmp r6, #0xb + beq _02389BC4 + cmp r6, r1 + bne _02389BC4 +#ifdef JAPAN + mov r0, #0x28 + mul r7, r8, r0 + ldr r2, _02389C24 ; =ov31_0238A228 + add r0, r4, r7 + mov r1, #0x28 + mov r3, #0 + str r5, [sp] + bl PreprocessString + b _02389BE0 +_02389BC4: + mov r0, #0x28 + mul r7, r8, r0 + ldr r2, _02389C28 ; =ov31_0238A23C + add r0, r4, r7 + mov r1, #0x28 + mov r3, #0 + str r5, [sp] +#else + ldr r2, _02389C24 ; =ov31_0238A228 + mov r1, #0x40 + add r0, r4, r8, lsl #6 + mov r3, #0 + str r5, [sp] + mov r7, r8, lsl #6 + bl PreprocessString + b _02389BE0 +_02389BC4: + ldr r2, _02389C28 ; =ov31_0238A23C + mov r1, #0x40 + add r0, r4, r8, lsl #6 + mov r3, #0 + str r5, [sp] + mov r7, r8, lsl #6 +#endif + bl PreprocessString +_02389BE0: + add r1, r4, r7 + add r0, sl, r8, lsl #3 + str r1, [r0, #0xc4] + add r8, r8, #1 + str r8, [r0, #0xc8] +_02389BF4: + cmp r8, #0xc + blt _02389B7C +_02389BFC: + mov r0, #0 + str r8, [sl, #0x52c + OV31_02389A78_OFFSET] + add r1, sl, r8, lsl #3 + str r0, [r1, #0xc4] + sub r0, r0, #1 + str r0, [r1, #0xc8] + str sb, [sl, #0x524 + OV31_02389A78_OFFSET] + add sp, sp, #0x70 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02389C20: .word DUNGEON_PTR +_02389C24: .word ov31_0238A228 +_02389C28: .word ov31_0238A23C + arm_func_end ov31_02389A78 + + arm_func_start ov31_02389C2C +ov31_02389C2C: ; 0x02389C2C + stmdb sp!, {r3, lr} + ldr r3, [r0, #0xb4] + mov r2, #6 + strb r1, [r3, #0xa8] + strb r2, [r3, #0x7c] + mov r1, #0 + str r1, [r3, #0x84] + str r1, [r3, #0x88] + strh r1, [r3, #0x80] + ldrb r1, [r3, #7] + cmp r1, #0 + ldmneia sp!, {r3, pc} + mov r1, #1 + bl AiMovement + ldmia sp!, {r3, pc} + arm_func_end ov31_02389C2C + + arm_func_start ov31_02389C68 +ov31_02389C68: ; 0x02389C68 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r5, _02389CBC ; =DUNGEON_PTR + mov r4, r0 + mov r6, #0 +_02389C78: + ldr r0, [r5] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r7, [r0, #0xa84] +#else + ldr r7, [r0, #0xb28] +#endif + mov r0, r7 + bl ov29_0234FB60 + cmp r0, #0 + beq _02389CA4 + mov r0, r7 + mov r1, r4 + bl ov31_02389C2C +_02389CA4: + add r0, r6, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 + cmp r6, #4 + blt _02389C78 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02389CBC: .word DUNGEON_PTR + arm_func_end ov31_02389C68 + + arm_func_start ov31_02389CC0 +ov31_02389CC0: ; 0x02389CC0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x5c + mov r5, r1 + mov r6, r0 + mov r0, r5 + mov r4, r2 + bl sub_0202812C +#if defined(EUROPE) + add r0, r6, #0x2dc + add r0, r0, #0x2400 +#elif defined(JAPAN) + add r0, r6, #0x308 + add r0, r0, #0x3c00 +#else + add r0, r6, #0xda + add r0, r0, #0x2600 +#endif + mov r0, r0, lsl #0x10 + mov r2, r0, lsr #0x10 + add r1, sp, #0xc + str r6, [sp, #0x1c] + str r1, [sp] + str r2, [sp, #4] + mov r2, #0 + ldr r0, _02389D74 ; =DUNGEON_WINDOW_PARAMS_29 + ldr r1, _02389D78 ; =0x00001013 + ldr r3, _02389D7C ; =0x00000A3B + str r2, [sp, #8] + bl CreateScrollBoxSingle + mov r7, r0 + mov r6, #0x3e +_02389D1C: + mov r0, r6 + bl AdvanceFrame + mov r0, r7 + bl IsScrollBoxActive + cmp r0, #0 + bne _02389D1C + mov r0, r7 + bl CloseScrollBox + mov r0, #0xb + mov r1, #0 + bl ov29_022EA428 + mov r0, #4 + mov r1, #0x3e + bl ov29_022EA370 + mov r0, r5 + bl sub_0202810C + cmp r4, #0 + beq _02389D6C + mov r0, r5 + bl ResumeParentMenu +_02389D6C: + add sp, sp, #0x5c + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02389D74: .word DUNGEON_WINDOW_PARAMS_29 +_02389D78: .word 0x00001013 +#ifdef JAPAN +_02389D7C: .word 0x00000876 +#else +_02389D7C: .word 0x00000A3B +#endif + arm_func_end ov31_02389CC0 + + arm_func_start ov31_02389D80 +ov31_02389D80: ; 0x02389D80 + mov r1, #0 + str r1, [r0, #0xc8] + str r1, [r0, #0xcc] + str r1, [r0, #0xbc] + bx lr + arm_func_end ov31_02389D80 + ; 0x02389D94 + + .rodata + .global DUNGEON_WINDOW_PARAMS_1 +DUNGEON_WINDOW_PARAMS_1: + .byte 0x00, 0x00, 0x00, 0x00 +#ifdef EUROPE + .byte 0x02, 0x02, 0x07, 0x0C +#else + .byte 0x02, 0x02, 0x00, 0x0C +#endif + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_2 +DUNGEON_WINDOW_PARAMS_2: + .byte 0x00, 0x00, 0x00, 0x00, 0x0B, 0x04, 0x13, 0x02, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_3 +DUNGEON_WINDOW_PARAMS_3: + .byte 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .word ov31_02382DAC + .word ov31_02382B54 + .global DUNGEON_WINDOW_PARAMS_4 +DUNGEON_WINDOW_PARAMS_4: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x1C, 0x06, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_MAIN_MENU_ITEMS +DUNGEON_MAIN_MENU_ITEMS: +#ifdef JAPAN +#define OV31_DATA_OFFSET 0x1458 +#else +#define OV31_DATA_OFFSET 0 +#endif + .word 0x8AD + OV31_DATA_OFFSET + .byte 0x00, 0x00, 0x00, 0x00 + .word 0x8AE + OV31_DATA_OFFSET + .byte 0x01, 0x00, 0x00, 0x00 + .word 0x8AF + OV31_DATA_OFFSET + .byte 0x02, 0x00, 0x00, 0x00 + .word 0x8B0 + OV31_DATA_OFFSET + .byte 0x03, 0x00, 0x00, 0x00 + .word 0x8B1 + OV31_DATA_OFFSET + .byte 0x04, 0x00, 0x00, 0x00 + .word 0x8B3 + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8B4 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .global DUNGEON_MENU_SWITCH_STR1 +DUNGEON_MENU_SWITCH_STR1: + .string "[dungeon:0]" + .global OVERLAY31_UNKNOWN_STRING_IDS +OVERLAY31_UNKNOWN_STRING_IDS: + .hword 0x8C7 + OV31_DATA_OFFSET + .global ov31_02389E22 +ov31_02389E22: + .hword 0x8CB + OV31_DATA_OFFSET + .hword 0x8C8 + OV31_DATA_OFFSET + .hword 0x8CC + OV31_DATA_OFFSET + .hword 0x8C9 + OV31_DATA_OFFSET + .hword 0x8CD + OV31_DATA_OFFSET + .hword 0x8CA + OV31_DATA_OFFSET + .hword 0x8CE + OV31_DATA_OFFSET + .global OVERLAY31_UNKNOWN_STRUCT__NA_2389E30 +OVERLAY31_UNKNOWN_STRUCT__NA_2389E30: + .byte 0x0E, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .word ov31_023832F0 + .word HandleStairsMenu + .global DUNGEON_WINDOW_PARAMS_5 +DUNGEON_WINDOW_PARAMS_5: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x02, 0x1C, 0x0D, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_6 +DUNGEON_WINDOW_PARAMS_6: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x02, 0x13, 0x04, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_7 +DUNGEON_WINDOW_PARAMS_7: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x17, 0x02, 0x07, 0x06, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_SUBMENU_ITEMS_1 +DUNGEON_SUBMENU_ITEMS_1: +#ifdef JAPAN +#define DUNGEON_SUBMENU_ITEMS_1_OFFSET 0x19D0 +#else +#define DUNGEON_SUBMENU_ITEMS_1_OFFSET 0 +#endif + .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET + .byte 0x01, 0x00, 0x00, 0x00 + .word 0x8CF + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8D0 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET + .byte 0x02, 0x00, 0x00, 0x00 + .word 0x8CF + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8D0 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .word 0x9C9 + DUNGEON_SUBMENU_ITEMS_1_OFFSET + .byte 0x03, 0x00, 0x00, 0x00 + .word 0x8CF + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8D0 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .word 0x9AD + DUNGEON_SUBMENU_ITEMS_1_OFFSET + .byte 0x04, 0x00, 0x00, 0x00 + .word 0x8CF + OV31_DATA_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x8D0 + OV31_DATA_OFFSET + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .global OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0 +OVERLAY31_UNKNOWN_STRUCT__NA_2389EF0: + .byte 0x01, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_8 +DUNGEON_WINDOW_PARAMS_8: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_9 +DUNGEON_WINDOW_PARAMS_9: + .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x07, 0x00 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_10 +DUNGEON_WINDOW_PARAMS_10: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x08, 0x02 + .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_11 +DUNGEON_WINDOW_PARAMS_11: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x12, 0x02 + .byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_12 +DUNGEON_WINDOW_PARAMS_12: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x13, 0x00 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_13 +DUNGEON_WINDOW_PARAMS_13: + .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x07, 0x00 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global ov31_02389F5C +ov31_02389F5C: + .byte 0x20, 0x20, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00 + .global OVERLAY31_JP_STRING +OVERLAY31_JP_STRING: + .byte 0x0A, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x81, 0x40, 0x20, 0x8F, 0x89, 0x8A, 0xFA, 0x83, 0x7C, 0x83 + .byte 0x57, 0x83, 0x56, 0x83, 0x87, 0x83, 0x93, 0x3D, 0x25, 0x64, 0x81, 0x40, 0x2D, 0x2D, 0x2D, 0x2D + .byte 0x2D, 0x20, 0x0A, 0x00 + .global DUNGEON_WINDOW_PARAMS_14 +DUNGEON_WINDOW_PARAMS_14: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x11, 0x1C, 0x05, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_15 +DUNGEON_WINDOW_PARAMS_15: + .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_16 +DUNGEON_WINDOW_PARAMS_16: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x1C, 0x04, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_17 +DUNGEON_WINDOW_PARAMS_17: + .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_18 +DUNGEON_WINDOW_PARAMS_18: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x13, 0x04, 0x00, 0xFE, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_19 +DUNGEON_WINDOW_PARAMS_19: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 +OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8: + .byte 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_20 +DUNGEON_WINDOW_PARAMS_20: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x0E, 0x12, 0x04, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_21 +DUNGEON_WINDOW_PARAMS_21: + .byte 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x10, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_22 +DUNGEON_WINDOW_PARAMS_22: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_23 +DUNGEON_WINDOW_PARAMS_23: + .byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x02, 0x0B, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_24 +DUNGEON_WINDOW_PARAMS_24: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0A, 0x02, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global ov31_0238A044 +ov31_0238A044: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x30, 0x5D, 0x00, 0x00 + .global ov31_0238A04C +ov31_0238A04C: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x31, 0x5D, 0x00, 0x00 + .global ov31_0238A054 +ov31_0238A054: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x32, 0x5D, 0x00, 0x00 + .global ov31_0238A05C +ov31_0238A05C: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x33, 0x5D, 0x00, 0x00 + .global ov31_0238A064 +ov31_0238A064: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x34, 0x5D, 0x00, 0x00 + .global ov31_0238A06C +ov31_0238A06C: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x35, 0x5D, 0x00, 0x00 + .global ov31_0238A074 +ov31_0238A074: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x36, 0x5D, 0x00, 0x00 + .global ov31_0238A07C +ov31_0238A07C: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x37, 0x5D, 0x00, 0x00 + .global ov31_0238A084 +ov31_0238A084: + .byte 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x5D, 0x5B, 0x43, 0x4C, 0x55, 0x4D, 0x5F + .byte 0x53, 0x45, 0x54, 0x3A, 0x38, 0x30, 0x5D, 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x31 + .byte 0x5D, 0x00, 0x00, 0x00 + .global ov31_0238A0A8 +ov31_0238A0A8: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x30, 0x5D, 0x00, 0x00 + .global ov31_0238A0B0 +ov31_0238A0B0: + .byte 0x5B, 0x4D, 0x3A, 0x48 + .byte 0x31, 0x5D, 0x00, 0x00 + .global ov31_0238A0B8 +ov31_0238A0B8: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x32, 0x5D, 0x00, 0x00 + .global ov31_0238A0C0 +ov31_0238A0C0: + .byte 0x5B, 0x4D, 0x3A, 0x48 + .byte 0x33, 0x5D, 0x00, 0x00 + .global ov31_0238A0C8 +ov31_0238A0C8: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x34, 0x5D, 0x00, 0x00 + .global ov31_0238A0D0 +ov31_0238A0D0: + .byte 0x5B, 0x4D, 0x3A, 0x48 + .byte 0x35, 0x5D, 0x00, 0x00 + .global ov31_0238A0D8 +ov31_0238A0D8: + .byte 0x5B, 0x4D, 0x3A, 0x48, 0x36, 0x5D, 0x00, 0x00 + .global ov31_0238A0E0 +ov31_0238A0E0: + .byte 0x5B, 0x4D, 0x3A, 0x48 + .byte 0x37, 0x5D, 0x00, 0x00 + .global ov31_0238A0E8 +ov31_0238A0E8: + .byte 0x5B, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x5D, 0x5B, 0x43 + .byte 0x4C, 0x55, 0x4D, 0x5F, 0x53, 0x45, 0x54, 0x3A, 0x38, 0x30, 0x5D, 0x5B, 0x73, 0x74, 0x72, 0x69 + .byte 0x6E, 0x67, 0x3A, 0x31, 0x5D, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_25 +DUNGEON_WINDOW_PARAMS_25: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0C, 0x00 + .byte 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_SUBMENU_ITEMS_5 +DUNGEON_SUBMENU_ITEMS_5: + .word 0x8C3 + OV31_DATA_OFFSET + .byte 0x01, 0x00, 0x00, 0x00 + .word 0x8C4 + OV31_DATA_OFFSET + .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .global DUNGEON_WINDOW_PARAMS_26 +DUNGEON_WINDOW_PARAMS_26: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x1C, 0x12, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_STRUCT__NA_238A144 +OVERLAY31_UNKNOWN_STRUCT__NA_238A144: + .byte 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .word ov31_0238917C + .word RecruitmentSearchMenuLoop + .global ov31_0238A154 +ov31_0238A154: + .byte 0x5B, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x30, 0x3A, 0x33, 0x5D, 0x20, 0x5B, 0x43, 0x53, 0x3A + .byte 0x25, 0x63, 0x5D, 0x25, 0x73, 0x5B, 0x43, 0x52, 0x5D, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_27 +DUNGEON_WINDOW_PARAMS_27: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x02, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_28 +DUNGEON_WINDOW_PARAMS_28: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x02, 0x1C, 0x14, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_STRUCT__NA_238A190 +OVERLAY31_UNKNOWN_STRUCT__NA_238A190: + .byte 0x0E, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .word ov31_02389460 + .word HelpMenuLoop + .global DUNGEON_SUBMENU_ITEMS_6 +DUNGEON_SUBMENU_ITEMS_6: +#if defined(EUROPE) +#define DUNGEON_SUBMENU_6_OFFSET 2 +#elif defined(JAPAN) +#define DUNGEON_SUBMENU_6_OFFSET 0xA03 +#else +#define DUNGEON_SUBMENU_6_OFFSET 0 +#endif + .word 0x3FA8 + DUNGEON_SUBMENU_6_OFFSET + .byte 0x00, 0x00, 0x00, 0x00 + .word 0x3FA9 + DUNGEON_SUBMENU_6_OFFSET + .byte 0x01, 0x00, 0x00, 0x00 + .word 0x3FAA + DUNGEON_SUBMENU_6_OFFSET + .byte 0x02, 0x00, 0x00, 0x00 + .word 0x3FAB + DUNGEON_SUBMENU_6_OFFSET + .byte 0x03, 0x00, 0x00, 0x00 + .word 0x3FAC + DUNGEON_SUBMENU_6_OFFSET + .byte 0x04, 0x00, 0x00, 0x00 + .word 0x3FAD + DUNGEON_SUBMENU_6_OFFSET + .byte 0x05, 0x00, 0x00, 0x00 + .word 0x3FAE + DUNGEON_SUBMENU_6_OFFSET + .byte 0x06, 0x00, 0x00, 0x00 + .word 0x3FAF + DUNGEON_SUBMENU_6_OFFSET + .byte 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0xFF, 0xFF, 0xFF, 0xFF + .global DUNGEON_WINDOW_PARAMS_29 +DUNGEON_WINDOW_PARAMS_29: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x18, 0x13, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_30 +DUNGEON_WINDOW_PARAMS_30: + .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_31 +DUNGEON_WINDOW_PARAMS_31: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x12, 0x00, 0x00, 0xFF, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global DUNGEON_WINDOW_PARAMS_32 +DUNGEON_WINDOW_PARAMS_32: + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x0F, 0x02, 0x00, 0xFE, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global ov31_0238A228 +ov31_0238A228: + .byte 0x5B, 0x4D, 0x3A, 0x53, 0x32, 0x5D, 0x5B, 0x74, 0x61, 0x63, 0x74, 0x69 + .byte 0x63, 0x73, 0x3A, 0x30, 0x5D, 0x00, 0x00, 0x00 + .global ov31_0238A23C +ov31_0238A23C: + .byte 0x5B, 0x4D, 0x3A, 0x53, 0x31, 0x5D, 0x5B, 0x74 + .byte 0x61, 0x63, 0x74, 0x69, 0x63, 0x73, 0x3A, 0x30, 0x5D, 0x00, 0x00, 0x00 + + .data + .global OVERLAY31_UNKNOWN_POINTER__NA_238A260 +OVERLAY31_UNKNOWN_POINTER__NA_238A260: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x0A, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A268 +OVERLAY31_UNKNOWN_POINTER__NA_238A268: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A26C +OVERLAY31_UNKNOWN_POINTER__NA_238A26C: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A270 +OVERLAY31_UNKNOWN_POINTER__NA_238A270: + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A27C +OVERLAY31_UNKNOWN_POINTER__NA_238A27C: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A280 +OVERLAY31_UNKNOWN_POINTER__NA_238A280: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A284 +OVERLAY31_UNKNOWN_POINTER__NA_238A284: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A288 +OVERLAY31_UNKNOWN_POINTER__NA_238A288: + .byte 0x00, 0x00, 0x00, 0x00 + .global OVERLAY31_UNKNOWN_POINTER__NA_238A28C +OVERLAY31_UNKNOWN_POINTER__NA_238A28C: + .byte 0x00, 0x00, 0x00, 0x00 + + .bss + .global ov31_0238A2A0 +ov31_0238A2A0: + .space 0x8 + .global ov31_0238A2A8 +ov31_0238A2A8: + .space 0x18 diff --git a/include/overlay_31_02383880.h b/include/overlay_31_02383880.h new file mode 100644 index 00000000..aa1566f4 --- /dev/null +++ b/include/overlay_31_02383880.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_OVERLAY_31_02383880_H +#define PMDSKY_OVERLAY_31_02383880_H + +void ov31_02383880(u8* arg1); + +#endif //PMDSKY_OVERLAY_31_02383880_H diff --git a/main.lsf b/main.lsf index 71db06cc..3c35bfe6 100644 --- a/main.lsf +++ b/main.lsf @@ -580,6 +580,8 @@ Overlay OVY_31 Object asm/overlay_31_023833D8.o Object src/overlay_31_02383478.o Object asm/overlay_31_0238367C.o + Object src/overlay_31_02383880.o + Object asm/overlay_31_023838E4.o } Overlay OVY_32 { diff --git a/src/overlay_31_02383880.c b/src/overlay_31_02383880.c new file mode 100644 index 00000000..117e4da0 --- /dev/null +++ b/src/overlay_31_02383880.c @@ -0,0 +1,20 @@ +#include "overlay_31_02383880.h" +#include "dungeon.h" +#include "overlay_31_02383478.h" + +extern struct dungeon* DUNGEON_PTR[]; + +void ov31_02383880(u8* arg1) +{ + u8 count; + arg1[0] = 0; + count = arg1[0] + 1; + for (s32 i=0; i < MAX_TEAM_MEMBERS; i++) { + u8 test = EntityIsValid__02383658(DUNGEON_PTR[0]->monster_slots.party_members[i]); + if (!test) { + arg1[i+1] = 0; + } else { + arg1[i+1] = count++; + } + } +} From 397c0f7d765333f42b6ce1170587599e9f115357 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 17 Jul 2025 21:53:26 -0400 Subject: [PATCH 09/40] Decomped ov31_02383854 Decomped by anonymous user 9https://decomp.me/scratch/hEXqh) --- asm/include/overlay_31_0238367C.inc | 2 -- asm/overlay_31_0238367C.s | 20 -------------------- include/overlay_31_02383880.h | 5 +++++ src/overlay_31_02383880.c | 8 ++++++++ 4 files changed, 13 insertions(+), 22 deletions(-) diff --git a/asm/include/overlay_31_0238367C.inc b/asm/include/overlay_31_0238367C.inc index f7147eb0..3fdb452a 100644 --- a/asm/include/overlay_31_0238367C.inc +++ b/asm/include/overlay_31_0238367C.inc @@ -5,14 +5,12 @@ .public CloseTextBox2 .public CreateScrollBoxSingle .public DUNGEON_WINDOW_PARAMS_8 -.public DrawTextInWindow .public GetItemToUse .public GetLeader .public IsScrollBoxActive .public MemFree .public OVERLAY31_UNKNOWN_POINTER__NA_238A26C .public PositionHasItem -.public StringFromId .public ov10_022BCD10 .public ov29_0234E988 .public sub_020282F4 diff --git a/asm/overlay_31_0238367C.s b/asm/overlay_31_0238367C.s index 4255c9d0..91d2e01b 100644 --- a/asm/overlay_31_0238367C.s +++ b/asm/overlay_31_0238367C.s @@ -158,23 +158,3 @@ _02383820: _02383850: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C arm_func_end ov31_023837C8 -; https://decomp.me/scratch/VL6fa - arm_func_start ov31_02383854 -ov31_02383854: ; 0x02383854 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, _0238387C ; =0x000008E6 - bl StringFromId - mov r1, #2 - mov r3, r0 - mov r0, r4 - mov r2, r1 - bl DrawTextInWindow - ldmia sp!, {r4, pc} - .align 2, 0 -#ifdef JAPAN -_0238387C: .word 0x00001D3E -#else -_0238387C: .word 0x000008E6 -#endif - arm_func_end ov31_02383854 diff --git a/include/overlay_31_02383880.h b/include/overlay_31_02383880.h index aa1566f4..69ad2795 100644 --- a/include/overlay_31_02383880.h +++ b/include/overlay_31_02383880.h @@ -1,6 +1,11 @@ #ifndef PMDSKY_OVERLAY_31_02383880_H #define PMDSKY_OVERLAY_31_02383880_H +struct window +{ +}; + +void ov31_02383854(struct window* w); void ov31_02383880(u8* arg1); #endif //PMDSKY_OVERLAY_31_02383880_H diff --git a/src/overlay_31_02383880.c b/src/overlay_31_02383880.c index 117e4da0..7898c6ef 100644 --- a/src/overlay_31_02383880.c +++ b/src/overlay_31_02383880.c @@ -1,9 +1,17 @@ #include "overlay_31_02383880.h" #include "dungeon.h" +#include "main_0202593C.h" #include "overlay_31_02383478.h" extern struct dungeon* DUNGEON_PTR[]; +extern void DrawTextInWindow(struct window*, u32, u32, u8*); + +void ov31_02383854(struct window* w) +{ + DrawTextInWindow(w, 2, 2, StringFromId(0x08e6)); +} + void ov31_02383880(u8* arg1) { u8 count; From c607247fdb9178b053c2dc8e674b49a06129af99 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 17 Jul 2025 21:56:30 -0400 Subject: [PATCH 10/40] Decomped ov31_023837C8 Decomped by anonymous user (https://decomp.me/scratch/roJ4e) --- asm/include/overlay_31_0238367C.inc | 3 -- asm/overlay_31_0238367C.s | 43 ----------------------------- include/overlay_31_02383478.h | 10 +++++-- include/overlay_31_02383880.h | 2 ++ src/overlay_31_02383880.c | 17 ++++++++++++ 5 files changed, 27 insertions(+), 48 deletions(-) diff --git a/asm/include/overlay_31_0238367C.inc b/asm/include/overlay_31_0238367C.inc index 3fdb452a..5add71cc 100644 --- a/asm/include/overlay_31_0238367C.inc +++ b/asm/include/overlay_31_0238367C.inc @@ -2,15 +2,12 @@ .public AdvanceFrame .public CloseInventoryMenu .public CloseScrollBox -.public CloseTextBox2 .public CreateScrollBoxSingle .public DUNGEON_WINDOW_PARAMS_8 .public GetItemToUse .public GetLeader .public IsScrollBoxActive -.public MemFree .public OVERLAY31_UNKNOWN_POINTER__NA_238A26C .public PositionHasItem .public ov10_022BCD10 -.public ov29_0234E988 .public sub_020282F4 diff --git a/asm/overlay_31_0238367C.s b/asm/overlay_31_0238367C.s index 91d2e01b..2b7fc540 100644 --- a/asm/overlay_31_0238367C.s +++ b/asm/overlay_31_0238367C.s @@ -115,46 +115,3 @@ _023837B4: strb r0, [r7] ldmia sp!, {r3, r4, r5, r6, r7, pc} arm_func_end ov31_02383768 - - arm_func_start ov31_023837C8 -ov31_023837C8: ; 0x023837C8 - stmdb sp!, {r3, lr} - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x92 - add r0, r0, #0x1100 - bl ov29_0234E988 - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x94] - cmp r0, r1 - beq _02383800 - bl CloseTextBox2 -_02383800: - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mvn r1, #1 - ldr r0, [r0] - add r0, r0, #0x1100 - ldrsb r0, [r0, #0x95] - cmp r0, r1 - beq _02383820 - bl CloseTextBox2 -_02383820: - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - add r0, r0, #0x93 - add r0, r0, #0x1100 - bl ov31_02383768 - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r0, [r0] - bl MemFree - ldr r0, _02383850 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02383850: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C - arm_func_end ov31_023837C8 - diff --git a/include/overlay_31_02383478.h b/include/overlay_31_02383478.h index 786cec07..9b5f557b 100644 --- a/include/overlay_31_02383478.h +++ b/include/overlay_31_02383478.h @@ -4,9 +4,15 @@ #include "dungeon_mode.h" struct loc_struct { - u8 PAD_0x0000[4508]; + u8 PAD_0x0[0x1192]; + u8 field_0x1192; + u8 field_0x1193; + s8 field_0x1194; + s8 field_0x1195; + u8 PAD_0x1196[6]; s16* field_0x119C; - u8 PAD_0x11A0[18]; + u8 PAD_0x11A0[17]; + u8 field_0x11b1; u8 field_0x11B2; u8 field_0x11B3; struct item* field_0x11B4; diff --git a/include/overlay_31_02383880.h b/include/overlay_31_02383880.h index 69ad2795..ba29d847 100644 --- a/include/overlay_31_02383880.h +++ b/include/overlay_31_02383880.h @@ -5,6 +5,8 @@ struct window { }; +// Cleans up and frees OVERLAY31_UNKNOWN_POINTER__NA_238A26C +void ov31_023837C8(void); void ov31_02383854(struct window* w); void ov31_02383880(u8* arg1); diff --git a/src/overlay_31_02383880.c b/src/overlay_31_02383880.c index 7898c6ef..6c5b7de8 100644 --- a/src/overlay_31_02383880.c +++ b/src/overlay_31_02383880.c @@ -4,9 +4,26 @@ #include "overlay_31_02383478.h" extern struct dungeon* DUNGEON_PTR[]; +extern struct loc_struct* OVERLAY31_UNKNOWN_POINTER__NA_238A26C; +extern void ov29_0234E988(u8*); +extern void CloseTextBox2(); +extern void ov31_02383768(u8*); +extern void MemFree(void*); extern void DrawTextInWindow(struct window*, u32, u32, u8*); +void ov31_023837C8(void) +{ + ov29_0234E988(&(OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x1192)); + if ((OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x1194) != -2) + CloseTextBox2(); + if ((OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x1195) != -2) + CloseTextBox2(); + ov31_02383768(&(OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x1193)); + MemFree(OVERLAY31_UNKNOWN_POINTER__NA_238A26C); + OVERLAY31_UNKNOWN_POINTER__NA_238A26C = NULL; +} + void ov31_02383854(struct window* w) { DrawTextInWindow(w, 2, 2, StringFromId(0x08e6)); From a9073df4e9050cc4914802ac322635cd4a5810d3 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 17 Jul 2025 21:59:24 -0400 Subject: [PATCH 11/40] Decomped ov31_02383768 Decomped by anonymous user (https://decomp.me/scratch/Y1TTR) --- asm/include/overlay_31_0238367C.inc | 3 --- asm/overlay_31_0238367C.s | 30 ----------------------------- include/overlay_31_02383880.h | 1 + src/overlay_31_02383880.c | 23 +++++++++++++++++++++- 4 files changed, 23 insertions(+), 34 deletions(-) diff --git a/asm/include/overlay_31_0238367C.inc b/asm/include/overlay_31_0238367C.inc index 5add71cc..aefe5c7b 100644 --- a/asm/include/overlay_31_0238367C.inc +++ b/asm/include/overlay_31_0238367C.inc @@ -1,6 +1,5 @@ #pragma once .public AdvanceFrame -.public CloseInventoryMenu .public CloseScrollBox .public CreateScrollBoxSingle .public DUNGEON_WINDOW_PARAMS_8 @@ -9,5 +8,3 @@ .public IsScrollBoxActive .public OVERLAY31_UNKNOWN_POINTER__NA_238A26C .public PositionHasItem -.public ov10_022BCD10 -.public sub_020282F4 diff --git a/asm/overlay_31_0238367C.s b/asm/overlay_31_0238367C.s index 2b7fc540..75b0b2e8 100644 --- a/asm/overlay_31_0238367C.s +++ b/asm/overlay_31_0238367C.s @@ -85,33 +85,3 @@ _0238375C: .align 2, 0 _02383764: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C arm_func_end ov31_0238372C - - arm_func_start ov31_02383768 -ov31_02383768: ; 0x02383768 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - ldrsb r0, [r7] - mvn r1, #1 - cmp r0, r1 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - bl ov10_022BCD10 - cmp r0, #0 - beq _023837B4 - mvn r4, #3 - sub r5, r4, #1 - mov r6, #0x62 -_02383798: - mov r0, r6 - bl AdvanceFrame - ldrsb r0, [r7] - bl sub_020282F4 - cmp r0, r5 - cmpne r0, r4 - bne _02383798 -_023837B4: - ldrsb r0, [r7] - bl CloseInventoryMenu - mvn r0, #1 - strb r0, [r7] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end ov31_02383768 diff --git a/include/overlay_31_02383880.h b/include/overlay_31_02383880.h index ba29d847..42397e33 100644 --- a/include/overlay_31_02383880.h +++ b/include/overlay_31_02383880.h @@ -5,6 +5,7 @@ struct window { }; +void ov31_02383768(s8* arg1); // Cleans up and frees OVERLAY31_UNKNOWN_POINTER__NA_238A26C void ov31_023837C8(void); void ov31_02383854(struct window* w); diff --git a/src/overlay_31_02383880.c b/src/overlay_31_02383880.c index 6c5b7de8..f51736c2 100644 --- a/src/overlay_31_02383880.c +++ b/src/overlay_31_02383880.c @@ -6,12 +6,33 @@ extern struct dungeon* DUNGEON_PTR[]; extern struct loc_struct* OVERLAY31_UNKNOWN_POINTER__NA_238A26C; +extern bool8 ov10_022BCD10(s8); +extern void AdvanceFrame(u8); +extern s32 sub_020282F4(s8); +extern void CloseInventoryMenu(s8); extern void ov29_0234E988(u8*); extern void CloseTextBox2(); -extern void ov31_02383768(u8*); extern void MemFree(void*); extern void DrawTextInWindow(struct window*, u32, u32, u8*); +void ov31_02383768(s8* arg1) +{ + s32 x; + + if (arg1[0] == -2) { + return; + } + + if (ov10_022BCD10(arg1[0])) { + do { + AdvanceFrame(0x62); + x = sub_020282F4(arg1[0]); + } while (-5 != x && -4 != x); + } + CloseInventoryMenu(arg1[0]); + arg1[0] = -2; +} + void ov31_023837C8(void) { ov29_0234E988(&(OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x1192)); From 9f1de26d2656d524eef0b8aa04227633f5da3116 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 17 Jul 2025 22:02:19 -0400 Subject: [PATCH 12/40] Decomped ov31_0238372C Decomped by anonymous user (https://decomp.me/scratch/E4XD7) --- asm/include/overlay_31_0238367C.inc | 2 -- asm/overlay_31_0238367C.s | 21 --------------------- include/overlay_31_02383880.h | 3 +++ src/overlay_31_02383880.c | 10 ++++++++++ 4 files changed, 13 insertions(+), 23 deletions(-) diff --git a/asm/include/overlay_31_0238367C.inc b/asm/include/overlay_31_0238367C.inc index aefe5c7b..f0186139 100644 --- a/asm/include/overlay_31_0238367C.inc +++ b/asm/include/overlay_31_0238367C.inc @@ -6,5 +6,3 @@ .public GetItemToUse .public GetLeader .public IsScrollBoxActive -.public OVERLAY31_UNKNOWN_POINTER__NA_238A26C -.public PositionHasItem diff --git a/asm/overlay_31_0238367C.s b/asm/overlay_31_0238367C.s index 75b0b2e8..e88de482 100644 --- a/asm/overlay_31_0238367C.s +++ b/asm/overlay_31_0238367C.s @@ -64,24 +64,3 @@ _02383724: .word 0x000008E4 #endif _02383728: .word DUNGEON_WINDOW_PARAMS_8 arm_func_end ov31_0238367C - - arm_func_start ov31_0238372C -ov31_0238372C: ; 0x0238372C - stmdb sp!, {r3, lr} - ldr r1, _02383764 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C - ldr r1, [r1] - add r1, r1, #0x1000 - ldrb r1, [r1, #0x1b1] - cmp r1, #0 - beq _0238375C - add r0, r0, #4 - bl PositionHasItem - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, pc} -_0238375C: - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02383764: .word OVERLAY31_UNKNOWN_POINTER__NA_238A26C - arm_func_end ov31_0238372C diff --git a/include/overlay_31_02383880.h b/include/overlay_31_02383880.h index 42397e33..be7382f0 100644 --- a/include/overlay_31_02383880.h +++ b/include/overlay_31_02383880.h @@ -1,10 +1,13 @@ #ifndef PMDSKY_OVERLAY_31_02383880_H #define PMDSKY_OVERLAY_31_02383880_H +#include "dungeon_mode.h" + struct window { }; +u8 ov31_0238372C(struct position* x); void ov31_02383768(s8* arg1); // Cleans up and frees OVERLAY31_UNKNOWN_POINTER__NA_238A26C void ov31_023837C8(void); diff --git a/src/overlay_31_02383880.c b/src/overlay_31_02383880.c index f51736c2..f05e1a8b 100644 --- a/src/overlay_31_02383880.c +++ b/src/overlay_31_02383880.c @@ -6,6 +6,7 @@ extern struct dungeon* DUNGEON_PTR[]; extern struct loc_struct* OVERLAY31_UNKNOWN_POINTER__NA_238A26C; +extern u8 PositionHasItem(struct position* pos); extern bool8 ov10_022BCD10(s8); extern void AdvanceFrame(u8); extern s32 sub_020282F4(s8); @@ -15,6 +16,15 @@ extern void CloseTextBox2(); extern void MemFree(void*); extern void DrawTextInWindow(struct window*, u32, u32, u8*); +u8 ov31_0238372C(struct position* x) +{ + if (OVERLAY31_UNKNOWN_POINTER__NA_238A26C->field_0x11b1 != 0 && + PositionHasItem(&(x[1]))) { + return 1; + } + return 0; +} + void ov31_02383768(s8* arg1) { s32 x; From 8ffb100497f15042aca8bed2b198e4a90e737d77 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 17 Jul 2025 22:05:15 -0400 Subject: [PATCH 13/40] Decomped sub_0200383C Decomped by TiredPeanut and taxicat1 --- asm/include/main_02003328.inc | 36 +-- asm/include/main_020038D8.inc | 35 +++ asm/main_02003328.s | 408 ---------------------------------- asm/main_020038D8.s | 366 ++++++++++++++++++++++++++++++ include/main_0200383C.h | 6 + main.lsf | 2 + src/main_0200383C.c | 44 ++++ 7 files changed, 465 insertions(+), 432 deletions(-) create mode 100644 asm/include/main_020038D8.inc create mode 100644 asm/main_020038D8.s create mode 100644 include/main_0200383C.h create mode 100644 src/main_0200383C.c diff --git a/asm/include/main_02003328.inc b/asm/include/main_02003328.inc index 9ed123a0..f683d1ed 100644 --- a/asm/include/main_02003328.inc +++ b/asm/include/main_02003328.inc @@ -1,7 +1,15 @@ #pragma once +.public Debug_Print0 +.public GX_VBlankIntr +.public GetHeldButtons +.public GetReleasedStylus +.public HaltProcessDisp +.public KeyWaitInit +.public MainLoop +.public OS_IRQTable +.public Rand16Bit +.public WaitForever .public _020924D8 -.public _020924E8 -.public _020924F8 .public _020AEF7C .public _020AEFB4 .public _020AEFC8 @@ -11,24 +19,12 @@ .public _020AF050 .public _020AF078 .public _020AF154 -.public _0229B21C .public _0229B220 .public _0229B248 .public _0229F248 .public _fadd .public _fflt .public _fmul -.public Debug_Print0 -.public GetHeldButtons -.public GetReleasedStylus -.public GX_VBlankIntr -.public HaltProcessDisp -.public KeyWaitInit -.public MainLoop -.public OS_IRQTable -.public PlayBgmById -.public Rand16Bit -.public StopBgmCommand .public sub_02002580 .public sub_020025F8 .public sub_02002628 @@ -39,25 +35,19 @@ .public sub_020027E8 .public sub_020027F8 .public sub_02002858 -.public sub_02002860 .public sub_02002950 .public sub_020029A0 .public sub_020029B8 .public sub_02002A44 .public sub_02002C40 +.public sub_02003A40 +.public sub_02003B5C .public sub_02005EAC .public sub_02006098 .public sub_02006D4C .public sub_02006DEC -.public sub_020081C8 .public sub_020082E0 .public sub_02017D20 -.public sub_02017DB4 -.public sub_02017FF0 -.public sub_02018024 -.public sub_02018118 -.public sub_02018278 -.public sub_02018428 .public sub_0201849C .public sub_02078A98 .public sub_02078C68 @@ -66,7 +56,5 @@ .public sub_0207B370 .public sub_0207B4A4 .public sub_0207B4B8 -.public sub_0207B584 .public sub_020820E8 .public sub_02082420 -.public WaitForever diff --git a/asm/include/main_020038D8.inc b/asm/include/main_020038D8.inc new file mode 100644 index 00000000..eee804d6 --- /dev/null +++ b/asm/include/main_020038D8.inc @@ -0,0 +1,35 @@ +#pragma once +.public Debug_Print0 +.public DisableAllInterrupts +.public EnableAllInterrupts +.public PlayBgmById +.public StopBgmCommand +.public _020924E8 +.public _020924F8 +.public _020AEF7C +.public _020AF000 +.public _020AF028 +.public _020AF050 +.public _0229B21C +.public _0229B220 +.public sub_02002580 +.public sub_020025F8 +.public sub_02002628 +.public sub_0200265C +.public sub_02002670 +.public sub_020026B8 +.public sub_020027F8 +.public sub_02002860 +.public sub_020029A0 +.public sub_02002A44 +.public sub_020081C8 +.public sub_02017DB4 +.public sub_02017FF0 +.public sub_02018024 +.public sub_02018118 +.public sub_02018278 +.public sub_02018428 +.public sub_02078A98 +.public sub_02079888 +.public sub_02079940 +.public sub_0207B584 diff --git a/asm/main_02003328.s b/asm/main_02003328.s index d25eaeb5..bc85a5af 100644 --- a/asm/main_02003328.s +++ b/asm/main_02003328.s @@ -390,411 +390,3 @@ DisableAllInterrupts: ; 0x02003824 .align 2, 0 _02003838: .word 0x04000208 arm_func_end DisableAllInterrupts - - arm_func_start sub_0200383C -sub_0200383C: ; 0x0200383C - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #8 - mov r5, r0 - add r0, sp, #0 - mov r1, #0xb - bl sub_02002628 - bl sub_02002670 - ldr r0, _020038CC ; =_020AEF7C - mov r1, #1 - strb r1, [r0, #2] - ldr r4, [r0, #0x10] - str r5, [r0, #0x10] - bl sub_020026B8 - cmp r5, #0 - bne _02003898 - cmp r4, #0 - beq _020038BC - ldr r1, _020038CC ; =_020AEF7C - mov r2, #0 - ldr r0, _020038D0 ; =_020AF028 - strb r2, [r1, #3] - bl sub_020029A0 - b _020038BC -_02003898: - cmp r4, #0 - bne _020038BC - ldr r1, _020038CC ; =_020AEF7C - mov r2, #1 - ldr r0, _020038D0 ; =_020AF028 - strb r2, [r1] - bl sub_020029A0 - ldr r0, _020038D4 ; =_020AF000 - bl sub_02002A44 -_020038BC: - add r0, sp, #0 - bl sub_0200265C - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020038CC: .word _020AEF7C -_020038D0: .word _020AF028 -_020038D4: .word _020AF000 - arm_func_end sub_0200383C - - arm_func_start sub_020038D8 -sub_020038D8: ; 0x020038D8 - ldr r0, _020038E4 ; =_020AEF7C - ldrb r0, [r0, #3] - bx lr - .align 2, 0 -_020038E4: .word _020AEF7C - arm_func_end sub_020038D8 - - arm_func_start sub_020038E8 -sub_020038E8: ; 0x020038E8 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - add r0, sp, #0 - mov r1, #0xb - bl sub_02002628 - bl sub_02002670 - ldr r0, _02003988 ; =_020AEF7C - ldr r4, [r0, #0x18] - bl sub_020026B8 - cmp r4, #0 - beq _02003944 - ldr r0, _02003988 ; =_020AEF7C - mov r1, #1 - strb r1, [r0] - ldrb r1, [r0, #7] - cmp r1, #0 - beq _02003938 - ldr r0, [r0, #0x34] - ldr r0, [r0] - bl sub_02079940 -_02003938: - ldr r0, _0200398C ; =_020AF000 - bl sub_02002A44 - b _02003950 -_02003944: - ldr r0, _02003988 ; =_020AEF7C - mov r1, #0 - strb r1, [r0, #7] -_02003950: - ldr r1, _02003988 ; =_020AEF7C - add r0, sp, #0 - ldr r2, [r1, #0x2c] - add r2, r2, #1 - str r2, [r1, #0x2c] - bl sub_0200265C - ldr r0, _02003988 ; =_020AEF7C - ldrb r0, [r0, #0xd] - cmp r0, #0 - beq _02003980 - mov r0, #0 - bl sub_020025F8 -_02003980: - add sp, sp, #8 - ldmia sp!, {r4, pc} - .align 2, 0 -_02003988: .word _020AEF7C -_0200398C: .word _020AF000 - arm_func_end sub_020038E8 - - arm_func_start sub_02003990 -sub_02003990: ; 0x02003990 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr r0, _020039DC ; =_020AEF7C - ldrb r0, [r0, #3] - cmp r0, #0 - beq _020039D4 - add r0, sp, #0 - mov r1, #0xb - bl sub_02002628 - ldr r1, _020039DC ; =_020AEF7C - mov r2, #0 - strb r2, [r1, #3] - ldr r0, _020039E0 ; =_020AF000 - strb r2, [r1, #6] - bl sub_020029A0 - add r0, sp, #0 - bl sub_0200265C -_020039D4: - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_020039DC: .word _020AEF7C -_020039E0: .word _020AF000 - arm_func_end sub_02003990 - - arm_func_start sub_020039E4 -sub_020039E4: ; 0x020039E4 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr r0, _02003A34 ; =_020AEF7C - ldrb r0, [r0, #3] - cmp r0, #0 - beq _02003A2C - add r0, sp, #0 - mov r1, #0xb - bl sub_02002628 - ldr r1, _02003A34 ; =_020AEF7C - mov r2, #0 - ldr r0, _02003A38 ; =_020AF028 - strb r2, [r1, #6] - bl sub_020029A0 - ldr r0, _02003A3C ; =_020AF000 - bl sub_02002A44 - add r0, sp, #0 - bl sub_0200265C -_02003A2C: - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_02003A34: .word _020AEF7C -_02003A38: .word _020AF028 -_02003A3C: .word _020AF000 - arm_func_end sub_020039E4 - - arm_func_start sub_02003A40 -sub_02003A40: ; 0x02003A40 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - add r0, sp, #0 - mov r1, #0xb - bl sub_02002628 - ldr r1, _02003AAC ; =_020AEF7C - mov r2, #1 - ldrb r0, [r1, #0xa] - cmp r0, #0 - mov r0, #0 - beq _02003A7C - strb r0, [r1, #0xa] - strb r2, [r1, #7] - bl sub_02079888 - b _02003A90 -_02003A7C: - strb r2, [r1, #9] - bl sub_02079888 - ldr r0, _02003AAC ; =_020AEF7C - mov r1, #0 - strb r1, [r0, #9] -_02003A90: - ldr r1, _02003AAC ; =_020AEF7C - add r0, sp, #0 - ldrb r4, [r1] - bl sub_0200265C - mov r0, r4 - add sp, sp, #8 - ldmia sp!, {r4, pc} - .align 2, 0 -_02003AAC: .word _020AEF7C - arm_func_end sub_02003A40 - - arm_func_start sub_02003AB0 -sub_02003AB0: ; 0x02003AB0 - stmdb sp!, {r3, lr} - ldr r0, _02003AC8 ; =_020AF050 - bl sub_02002A44 - ldr r0, _02003ACC ; =_020AEF7C - ldr r0, [r0, #0x28] - ldmia sp!, {r3, pc} - .align 2, 0 -_02003AC8: .word _020AF050 -_02003ACC: .word _020AEF7C - arm_func_end sub_02003AB0 - - arm_func_start sub_02003AD0 -sub_02003AD0: ; 0x02003AD0 - stmdb sp!, {r3, lr} - ldr r0, _02003B50 ; =_020AEF7C - ldrb r0, [r0, #5] - cmp r0, #0 - ldmneia sp!, {r3, pc} - bl sub_02002580 - mov r1, #1 - bl sub_020027F8 - bl sub_02002580 - bl sub_02002860 - cmp r0, #0 - beq _02003B10 - ldr r0, _02003B54 ; =_020AF050 - bl sub_02002A44 - ldr r0, _02003B50 ; =_020AEF7C - ldr r0, [r0, #0x28] -_02003B10: - ldr r0, _02003B50 ; =_020AEF7C - mov r2, #1 - strb r2, [r0, #5] - ldrb r1, [r0, #0xf] - cmp r1, #0 - bne _02003B30 - strb r2, [r0, #0xf] - bl sub_020081C8 -_02003B30: - bl DisableAllInterrupts - ldr r0, _02003B58 ; =_0229B220 - bl sub_0207B584 - mov r0, #1 - mov r1, #0 - bl sub_02078A98 - bl EnableAllInterrupts - ldmia sp!, {r3, pc} - .align 2, 0 -_02003B50: .word _020AEF7C -_02003B54: .word _020AF050 -_02003B58: .word _0229B220 - arm_func_end sub_02003AD0 - - arm_func_start sub_02003B5C -sub_02003B5C: ; 0x02003B5C - ldr r0, _02003B8C ; =_020AEF7C - mov r1, #1 - ldrb r0, [r0, #0xb] - cmp r0, #0 - bne _02003B84 - ldr r0, _02003B90 ; =0x027FFFA8 - ldrh r0, [r0] - and r0, r0, #0x8000 - movs r0, r0, asr #0xf - moveq r1, #0 -_02003B84: - and r0, r1, #0xff - bx lr - .align 2, 0 -_02003B8C: .word _020AEF7C -_02003B90: .word 0x027FFFA8 - arm_func_end sub_02003B5C - - arm_func_start sub_02003B94 -sub_02003B94: ; 0x02003B94 - ldr r0, _02003BA8 ; =_020AEF7C - mov r1, #0 - strb r1, [r0, #1] - strb r1, [r0, #8] - bx lr - .align 2, 0 -_02003BA8: .word _020AEF7C - arm_func_end sub_02003B94 - - arm_func_start sub_02003BAC -sub_02003BAC: ; 0x02003BAC - ldr r0, _02003BC4 ; =_020AEF7C - mov r1, #0 - strb r1, [r0, #1] - mov r1, #1 - strb r1, [r0, #8] - bx lr - .align 2, 0 -_02003BC4: .word _020AEF7C - arm_func_end sub_02003BAC - - arm_func_start sub_02003BC8 -sub_02003BC8: ; 0x02003BC8 - stmdb sp!, {r3, lr} - bl SoundResume - ldr r0, _02003BE8 ; =_020AEF7C - mov r1, #1 - strb r1, [r0, #1] - mov r1, #0 - strb r1, [r0, #8] - ldmia sp!, {r3, pc} - .align 2, 0 -_02003BE8: .word _020AEF7C - arm_func_end sub_02003BC8 - - arm_func_start sub_02003BEC -sub_02003BEC: ; 0x02003BEC - ldr r0, _02003BF8 ; =_020AEF7C - ldrb r0, [r0, #1] - bx lr - .align 2, 0 -_02003BF8: .word _020AEF7C - arm_func_end sub_02003BEC - - arm_func_start sub_02003BFC -sub_02003BFC: ; 0x02003BFC - stmdb sp!, {r3, lr} - ldr r0, _02003CB4 ; =_020AEF7C - ldrb r1, [r0, #1] - cmp r1, #0 - bne _02003CAC - ldrb r0, [r0, #4] - cmp r0, #0 - beq _02003C5C - bl sub_02003B5C - cmp r0, #0 - bne _02003C54 - ldr r0, _02003CB8 ; =_020924E8 - bl Debug_Print0 - ldr r0, _02003CBC ; =_0229B21C - ldrh r0, [r0, #2] - bl PlayBgmById - ldr r0, _02003CBC ; =_0229B21C - ldrh r0, [r0] - bl sub_02018024 - ldr r0, _02003CB4 ; =_020AEF7C - mov r1, #0 - strb r1, [r0, #4] -_02003C54: - mov r0, #1 - ldmia sp!, {r3, pc} -_02003C5C: - bl sub_02003B5C - cmp r0, #0 - beq _02003CAC - ldr r0, _02003CC0 ; =_020924F8 - bl Debug_Print0 - bl sub_02017DB4 - ldr r1, _02003CBC ; =_0229B21C - strh r0, [r1, #2] - bl sub_02017FF0 - ldr r1, _02003CBC ; =_0229B21C - strh r0, [r1] - bl StopBgmCommand - bl sub_02018118 - bl sub_02018278 - mov r0, #0x3f00 - bl sub_02018428 - ldr r1, _02003CB4 ; =_020AEF7C - mov r0, #1 - strb r0, [r1, #4] - ldmia sp!, {r3, pc} -_02003CAC: - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02003CB4: .word _020AEF7C -_02003CB8: .word _020924E8 -_02003CBC: .word _0229B21C -_02003CC0: .word _020924F8 - arm_func_end sub_02003BFC - - arm_func_start SoundResume -SoundResume: ; 0x02003CC4 - stmdb sp!, {r3, lr} - ldr r0, _02003D20 ; =_020AEF7C - ldrb r1, [r0, #1] - cmp r1, #0 - bne _02003D18 - ldrb r0, [r0, #4] - cmp r0, #0 - beq _02003D18 - ldr r0, _02003D24 ; =_020924E8 - bl Debug_Print0 - ldr r0, _02003D28 ; =_0229B21C - ldrh r0, [r0, #2] - bl PlayBgmById - ldr r0, _02003D28 ; =_0229B21C - ldrh r0, [r0] - bl sub_02018024 - ldr r0, _02003D20 ; =_020AEF7C - mov r1, #0 - strb r1, [r0, #4] - mov r0, #1 - ldmia sp!, {r3, pc} -_02003D18: - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02003D20: .word _020AEF7C -_02003D24: .word _020924E8 -_02003D28: .word _0229B21C - arm_func_end SoundResume diff --git a/asm/main_020038D8.s b/asm/main_020038D8.s new file mode 100644 index 00000000..93b8bf0c --- /dev/null +++ b/asm/main_020038D8.s @@ -0,0 +1,366 @@ + .include "asm/macros.inc" + .include "main_020038D8.inc" + + .text + + arm_func_start sub_020038D8 +sub_020038D8: ; 0x020038D8 + ldr r0, _020038E4 ; =_020AEF7C + ldrb r0, [r0, #3] + bx lr + .align 2, 0 +_020038E4: .word _020AEF7C + arm_func_end sub_020038D8 + + arm_func_start sub_020038E8 +sub_020038E8: ; 0x020038E8 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + add r0, sp, #0 + mov r1, #0xb + bl sub_02002628 + bl sub_02002670 + ldr r0, _02003988 ; =_020AEF7C + ldr r4, [r0, #0x18] + bl sub_020026B8 + cmp r4, #0 + beq _02003944 + ldr r0, _02003988 ; =_020AEF7C + mov r1, #1 + strb r1, [r0] + ldrb r1, [r0, #7] + cmp r1, #0 + beq _02003938 + ldr r0, [r0, #0x34] + ldr r0, [r0] + bl sub_02079940 +_02003938: + ldr r0, _0200398C ; =_020AF000 + bl sub_02002A44 + b _02003950 +_02003944: + ldr r0, _02003988 ; =_020AEF7C + mov r1, #0 + strb r1, [r0, #7] +_02003950: + ldr r1, _02003988 ; =_020AEF7C + add r0, sp, #0 + ldr r2, [r1, #0x2c] + add r2, r2, #1 + str r2, [r1, #0x2c] + bl sub_0200265C + ldr r0, _02003988 ; =_020AEF7C + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _02003980 + mov r0, #0 + bl sub_020025F8 +_02003980: + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_02003988: .word _020AEF7C +_0200398C: .word _020AF000 + arm_func_end sub_020038E8 + + arm_func_start sub_02003990 +sub_02003990: ; 0x02003990 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr r0, _020039DC ; =_020AEF7C + ldrb r0, [r0, #3] + cmp r0, #0 + beq _020039D4 + add r0, sp, #0 + mov r1, #0xb + bl sub_02002628 + ldr r1, _020039DC ; =_020AEF7C + mov r2, #0 + strb r2, [r1, #3] + ldr r0, _020039E0 ; =_020AF000 + strb r2, [r1, #6] + bl sub_020029A0 + add r0, sp, #0 + bl sub_0200265C +_020039D4: + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_020039DC: .word _020AEF7C +_020039E0: .word _020AF000 + arm_func_end sub_02003990 + + arm_func_start sub_020039E4 +sub_020039E4: ; 0x020039E4 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr r0, _02003A34 ; =_020AEF7C + ldrb r0, [r0, #3] + cmp r0, #0 + beq _02003A2C + add r0, sp, #0 + mov r1, #0xb + bl sub_02002628 + ldr r1, _02003A34 ; =_020AEF7C + mov r2, #0 + ldr r0, _02003A38 ; =_020AF028 + strb r2, [r1, #6] + bl sub_020029A0 + ldr r0, _02003A3C ; =_020AF000 + bl sub_02002A44 + add r0, sp, #0 + bl sub_0200265C +_02003A2C: + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_02003A34: .word _020AEF7C +_02003A38: .word _020AF028 +_02003A3C: .word _020AF000 + arm_func_end sub_020039E4 + + arm_func_start sub_02003A40 +sub_02003A40: ; 0x02003A40 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + add r0, sp, #0 + mov r1, #0xb + bl sub_02002628 + ldr r1, _02003AAC ; =_020AEF7C + mov r2, #1 + ldrb r0, [r1, #0xa] + cmp r0, #0 + mov r0, #0 + beq _02003A7C + strb r0, [r1, #0xa] + strb r2, [r1, #7] + bl sub_02079888 + b _02003A90 +_02003A7C: + strb r2, [r1, #9] + bl sub_02079888 + ldr r0, _02003AAC ; =_020AEF7C + mov r1, #0 + strb r1, [r0, #9] +_02003A90: + ldr r1, _02003AAC ; =_020AEF7C + add r0, sp, #0 + ldrb r4, [r1] + bl sub_0200265C + mov r0, r4 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_02003AAC: .word _020AEF7C + arm_func_end sub_02003A40 + + arm_func_start sub_02003AB0 +sub_02003AB0: ; 0x02003AB0 + stmdb sp!, {r3, lr} + ldr r0, _02003AC8 ; =_020AF050 + bl sub_02002A44 + ldr r0, _02003ACC ; =_020AEF7C + ldr r0, [r0, #0x28] + ldmia sp!, {r3, pc} + .align 2, 0 +_02003AC8: .word _020AF050 +_02003ACC: .word _020AEF7C + arm_func_end sub_02003AB0 + + arm_func_start sub_02003AD0 +sub_02003AD0: ; 0x02003AD0 + stmdb sp!, {r3, lr} + ldr r0, _02003B50 ; =_020AEF7C + ldrb r0, [r0, #5] + cmp r0, #0 + ldmneia sp!, {r3, pc} + bl sub_02002580 + mov r1, #1 + bl sub_020027F8 + bl sub_02002580 + bl sub_02002860 + cmp r0, #0 + beq _02003B10 + ldr r0, _02003B54 ; =_020AF050 + bl sub_02002A44 + ldr r0, _02003B50 ; =_020AEF7C + ldr r0, [r0, #0x28] +_02003B10: + ldr r0, _02003B50 ; =_020AEF7C + mov r2, #1 + strb r2, [r0, #5] + ldrb r1, [r0, #0xf] + cmp r1, #0 + bne _02003B30 + strb r2, [r0, #0xf] + bl sub_020081C8 +_02003B30: + bl DisableAllInterrupts + ldr r0, _02003B58 ; =_0229B220 + bl sub_0207B584 + mov r0, #1 + mov r1, #0 + bl sub_02078A98 + bl EnableAllInterrupts + ldmia sp!, {r3, pc} + .align 2, 0 +_02003B50: .word _020AEF7C +_02003B54: .word _020AF050 +_02003B58: .word _0229B220 + arm_func_end sub_02003AD0 + + arm_func_start sub_02003B5C +sub_02003B5C: ; 0x02003B5C + ldr r0, _02003B8C ; =_020AEF7C + mov r1, #1 + ldrb r0, [r0, #0xb] + cmp r0, #0 + bne _02003B84 + ldr r0, _02003B90 ; =0x027FFFA8 + ldrh r0, [r0] + and r0, r0, #0x8000 + movs r0, r0, asr #0xf + moveq r1, #0 +_02003B84: + and r0, r1, #0xff + bx lr + .align 2, 0 +_02003B8C: .word _020AEF7C +_02003B90: .word 0x027FFFA8 + arm_func_end sub_02003B5C + + arm_func_start sub_02003B94 +sub_02003B94: ; 0x02003B94 + ldr r0, _02003BA8 ; =_020AEF7C + mov r1, #0 + strb r1, [r0, #1] + strb r1, [r0, #8] + bx lr + .align 2, 0 +_02003BA8: .word _020AEF7C + arm_func_end sub_02003B94 + + arm_func_start sub_02003BAC +sub_02003BAC: ; 0x02003BAC + ldr r0, _02003BC4 ; =_020AEF7C + mov r1, #0 + strb r1, [r0, #1] + mov r1, #1 + strb r1, [r0, #8] + bx lr + .align 2, 0 +_02003BC4: .word _020AEF7C + arm_func_end sub_02003BAC + + arm_func_start sub_02003BC8 +sub_02003BC8: ; 0x02003BC8 + stmdb sp!, {r3, lr} + bl SoundResume + ldr r0, _02003BE8 ; =_020AEF7C + mov r1, #1 + strb r1, [r0, #1] + mov r1, #0 + strb r1, [r0, #8] + ldmia sp!, {r3, pc} + .align 2, 0 +_02003BE8: .word _020AEF7C + arm_func_end sub_02003BC8 + + arm_func_start sub_02003BEC +sub_02003BEC: ; 0x02003BEC + ldr r0, _02003BF8 ; =_020AEF7C + ldrb r0, [r0, #1] + bx lr + .align 2, 0 +_02003BF8: .word _020AEF7C + arm_func_end sub_02003BEC + + arm_func_start sub_02003BFC +sub_02003BFC: ; 0x02003BFC + stmdb sp!, {r3, lr} + ldr r0, _02003CB4 ; =_020AEF7C + ldrb r1, [r0, #1] + cmp r1, #0 + bne _02003CAC + ldrb r0, [r0, #4] + cmp r0, #0 + beq _02003C5C + bl sub_02003B5C + cmp r0, #0 + bne _02003C54 + ldr r0, _02003CB8 ; =_020924E8 + bl Debug_Print0 + ldr r0, _02003CBC ; =_0229B21C + ldrh r0, [r0, #2] + bl PlayBgmById + ldr r0, _02003CBC ; =_0229B21C + ldrh r0, [r0] + bl sub_02018024 + ldr r0, _02003CB4 ; =_020AEF7C + mov r1, #0 + strb r1, [r0, #4] +_02003C54: + mov r0, #1 + ldmia sp!, {r3, pc} +_02003C5C: + bl sub_02003B5C + cmp r0, #0 + beq _02003CAC + ldr r0, _02003CC0 ; =_020924F8 + bl Debug_Print0 + bl sub_02017DB4 + ldr r1, _02003CBC ; =_0229B21C + strh r0, [r1, #2] + bl sub_02017FF0 + ldr r1, _02003CBC ; =_0229B21C + strh r0, [r1] + bl StopBgmCommand + bl sub_02018118 + bl sub_02018278 + mov r0, #0x3f00 + bl sub_02018428 + ldr r1, _02003CB4 ; =_020AEF7C + mov r0, #1 + strb r0, [r1, #4] + ldmia sp!, {r3, pc} +_02003CAC: + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_02003CB4: .word _020AEF7C +_02003CB8: .word _020924E8 +_02003CBC: .word _0229B21C +_02003CC0: .word _020924F8 + arm_func_end sub_02003BFC + + arm_func_start SoundResume +SoundResume: ; 0x02003CC4 + stmdb sp!, {r3, lr} + ldr r0, _02003D20 ; =_020AEF7C + ldrb r1, [r0, #1] + cmp r1, #0 + bne _02003D18 + ldrb r0, [r0, #4] + cmp r0, #0 + beq _02003D18 + ldr r0, _02003D24 ; =_020924E8 + bl Debug_Print0 + ldr r0, _02003D28 ; =_0229B21C + ldrh r0, [r0, #2] + bl PlayBgmById + ldr r0, _02003D28 ; =_0229B21C + ldrh r0, [r0] + bl sub_02018024 + ldr r0, _02003D20 ; =_020AEF7C + mov r1, #0 + strb r1, [r0, #4] + mov r0, #1 + ldmia sp!, {r3, pc} +_02003D18: + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_02003D20: .word _020AEF7C +_02003D24: .word _020924E8 +_02003D28: .word _0229B21C + arm_func_end SoundResume diff --git a/include/main_0200383C.h b/include/main_0200383C.h new file mode 100644 index 00000000..1e1cb52e --- /dev/null +++ b/include/main_0200383C.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_0200383C_H +#define PMDSKY_MAIN_0200383C_H + +void sub_0200383C(s32 arg); + +#endif //PMDSKY_MAIN_0200383C_H diff --git a/main.lsf b/main.lsf index 3c35bfe6..71f982f1 100644 --- a/main.lsf +++ b/main.lsf @@ -13,6 +13,8 @@ Static main Object asm/main_02000DE0.o Object src/main_0200330C.o Object asm/main_02003328.o + Object src/main_0200383C.o + Object asm/main_020038D8.o Object src/main_02003D2C.o Object asm/main_02003DB8.o Object src/main_02008210.o diff --git a/src/main_0200383C.c b/src/main_0200383C.c new file mode 100644 index 00000000..fb777253 --- /dev/null +++ b/src/main_0200383C.c @@ -0,0 +1,44 @@ +#include "main_0200383C.h" + +extern vu8 _020AEF7C[]; +extern void *_020AF028; +extern void *_020AF000; + +extern void sub_02002628(void*, u32); +extern void sub_02002670(); +extern void sub_020026B8(); +extern void sub_020029A0(void*); +extern void sub_02002A44(void*); +extern void sub_0200265C(void*); + +void sub_0200383C(s32 arg) +{ + u32 temp[2]; // allocate 8 bytes on stack + s32 r5 = arg; + + sub_02002628((void *)temp, 0xB); + sub_02002670(); + + vu8 *state = _020AEF7C; + state[2] = 1; + + u32 r4 = *((vu32 *)(state + 0x10)); + *((vu32 *)(state + 0x10)) = (u32)r5; + + sub_020026B8(); + + if (r5 == 0) { + if (r4 != 0) { + _020AEF7C[3] = 0; + sub_020029A0(&_020AF028); + } + } else { + if (r4 == 0) { + _020AEF7C[0] = 1; + sub_020029A0(&_020AF028); + sub_02002A44(&_020AF000); + } + } + + sub_0200265C((void *)temp); +} From 4e14734d61f1a9ec06d1ac72324832f6b8d60588 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 6 Aug 2025 18:20:46 -0400 Subject: [PATCH 14/40] Decomped DseTrackEvent_SubLoopBreakOnLastIteration Decomped by @Snioflake --- asm/include/main_0206C9BC.inc | 73 +- asm/include/main_02071AC0.inc | 42 + asm/main_0206C9BC.s | 3999 --------------------------------- asm/main_02071AC0.s | 3989 ++++++++++++++++++++++++++++++++ include/dse.h | 330 +++ include/main_02071A98.h | 8 + main.lsf | 2 + src/main_02071A98.c | 14 + 8 files changed, 4421 insertions(+), 4036 deletions(-) create mode 100644 asm/include/main_02071AC0.inc create mode 100644 asm/main_02071AC0.s create mode 100644 include/dse.h create mode 100644 include/main_02071A98.h create mode 100644 src/main_02071A98.c diff --git a/asm/include/main_0206C9BC.inc b/asm/include/main_0206C9BC.inc index 5c90e7b4..44d8157b 100644 --- a/asm/include/main_0206C9BC.inc +++ b/asm/include/main_0206C9BC.inc @@ -1,12 +1,42 @@ #pragma once +.public ArrayFill32Fast +.public DRIVER_WORK +.public DseChannel_AllocateNote +.public DseChannel_ChangeNote +.public DseChannel_DeallocateVoices +.public DseChannel_ReleaseNote +.public DseMem_AllocateUser +.public DseSynth_AllocateNew +.public DseSynth_ClearHeldNotes +.public DseSynth_ResetAllVoiceTimersAndVolumes +.public DseSynth_ResetAndSetBankAndSequence +.public DseSynth_RestoreHeldNotes +.public DseSynth_SetBend +.public DseSynth_SetGlobalVolumeIndex +.public DseSynth_SetPan +.public DseSynth_SetVolume +.public DseSynth_StopChannels +.public DseSynth_Unload +.public DseUtil_ByteSwap32 +.public DseVoice_Cleanup +.public DseVoice_CountNumActiveInChannel +.public DseVoice_Deallocate +.public DseVoice_PlayNote +.public DseVoice_ReleaseNote +.public DseVoice_UpdateHardware +.public DseVoice_UpdateParameters +.public Dse_SetError +.public Dse_SetError2 +.public FileInit +.public GetTimer0Control +.public SMD_EVENTS_FUN_TABLE +.public SoundEnvelope_ForceVolume +.public SoundLfoBank_Reset +.public StartThread +.public UpdateChannels .public _020B0B7C -.public _020B0D50 -.public _020B1310 -.public _020B1394 -.public _022B7370 .public _022B7380 .public _022B7388 -.public _022B7988 .public _022B7990 .public _022B7994 .public _022B7998 @@ -31,31 +61,8 @@ .public _fmul .public _s32_div_f .public _u32_div_f -.public ArrayFill32Fast -.public DRIVER_WORK -.public Dse_SetError -.public Dse_SetError2 -.public DseMem_AllocateUser -.public DseUtil_ByteSwap32 -.public DseUtil_GetRandomNumber -.public FileInit -.public GetTimer0Control -.public SMD_EVENTS_FUN_TABLE -.public SoundEnvelope_ForceVolume -.public SoundEnvelope_Release -.public SoundEnvelope_Reset -.public SoundEnvelope_SetParameters -.public SoundEnvelope_Stop -.public SoundEnvelope_Stop2 -.public SoundEnvelope_Tick -.public SoundEnvelopeParameters_CheckValidity -.public SoundEnvelopeParameters_Reset -.public SoundLfoBank_Reset -.public SoundLfoBank_Set -.public SoundLfoBank_SetConstEnvelopes -.public SoundLfoBank_Tick -.public StartThread .public sub_0206C688 +.public sub_02072BB8 .public sub_02079800 .public sub_02079888 .public sub_02079940 @@ -66,19 +73,11 @@ .public sub_0207C8E0 .public sub_0207C944 .public sub_0207C984 -.public sub_0207CA04 -.public sub_0207CA24 -.public sub_0207CA4C -.public sub_0207CA6C -.public sub_0207CAB8 -.public sub_0207CAE0 .public sub_0207CB54 .public sub_0207CD44 .public sub_0207CF14 -.public sub_0207D470 .public sub_0207F6C4 .public sub_0207F70C .public sub_0207F748 .public sub_0207F808 .public sub_0207F828 -.public UpdateTrackVolumeEnvelopes diff --git a/asm/include/main_02071AC0.inc b/asm/include/main_02071AC0.inc new file mode 100644 index 00000000..15e8429d --- /dev/null +++ b/asm/include/main_02071AC0.inc @@ -0,0 +1,42 @@ +#pragma once +.public DRIVER_WORK +.public DseMem_Allocate +.public DseMem_Free +.public DseSwd_GetBankById +.public DseSwd_GetInstrument +.public DseSwd_GetNextSplitInRange +.public DseUtil_GetRandomNumber +.public ReadWaviEntry +.public SoundEnvelopeParameters_CheckValidity +.public SoundEnvelopeParameters_Reset +.public SoundEnvelope_Release +.public SoundEnvelope_Reset +.public SoundEnvelope_SetParameters +.public SoundEnvelope_Stop +.public SoundEnvelope_Stop2 +.public SoundEnvelope_Tick +.public SoundLfoBank_Reset +.public SoundLfoBank_Set +.public SoundLfoBank_SetConstEnvelopes +.public SoundLfoBank_Tick +.public UpdateTrackVolumeEnvelopes +.public _020B0D50 +.public _020B1310 +.public _020B1394 +.public _022B7370 +.public _022B7988 +.public _022B7A30 +.public _022B7A6C +.public _022B8330 +.public _022B9584 +.public _s32_div_f +.public _u32_div_f +.public sub_0207C8B8 +.public sub_0207C8E0 +.public sub_0207CA04 +.public sub_0207CA24 +.public sub_0207CA4C +.public sub_0207CA6C +.public sub_0207CAB8 +.public sub_0207CAE0 +.public sub_0207D470 diff --git a/asm/main_0206C9BC.s b/asm/main_0206C9BC.s index ce6ff7cc..a73bc4a5 100644 --- a/asm/main_0206C9BC.s +++ b/asm/main_0206C9BC.s @@ -6125,4002 +6125,3 @@ DseTrackEvent_SubLoopEnd: ; 0x02071A5C ldr r0, [r3] bx lr arm_func_end DseTrackEvent_SubLoopEnd - - arm_func_start DseTrackEvent_SubLoopBreakOnLastIteration -DseTrackEvent_SubLoopBreakOnLastIteration: ; 0x02071A98 - ldrb ip, [r2, #6] - add r3, r2, #0x24 - mov r1, #0xc - sub ip, ip, #1 - mla r3, ip, r1, r3 - ldrb r1, [r3, #8] - subs r1, r1, #1 - ldreq r0, [r3, #4] - streqb ip, [r2, #6] - bx lr - arm_func_end DseTrackEvent_SubLoopBreakOnLastIteration - - arm_func_start DseTrackEvent_SetOctave -DseTrackEvent_SetOctave: ; 0x02071AC0 - ldrb r1, [r0], #1 - strb r1, [r2, #4] - bx lr - arm_func_end DseTrackEvent_SetOctave - - arm_func_start DseTrackEvent_OctaveDelta -DseTrackEvent_OctaveDelta: ; 0x02071ACC - ldrb r3, [r2, #4] - ldrsb r1, [r0], #1 - add r1, r3, r1 - strb r1, [r2, #4] - bx lr - arm_func_end DseTrackEvent_OctaveDelta - - arm_func_start DseTrackEvent_SetBpm -DseTrackEvent_SetBpm: ; 0x02071AE0 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - ldr r0, [r5, #0x48] - ldrb r4, [r6] - mov r0, r0, asr #0x10 - mul r1, r0, r4 - movs r1, r1, lsr #8 - ldr r0, _02071B1C ; =0x03938700 - moveq r1, #1 - bl _u32_div_f - str r0, [r5, #0x44] - strb r4, [r5, #0x17] - add r0, r6, #1 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02071B1C: .word 0x03938700 - arm_func_end DseTrackEvent_SetBpm - - arm_func_start DseTrackEvent_SetBpm2 -DseTrackEvent_SetBpm2: ; 0x02071B20 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - ldr r0, [r5, #0x48] - ldrb r4, [r6] - mov r0, r0, asr #0x10 - mul r1, r0, r4 - movs r1, r1, lsr #8 - ldr r0, _02071B5C ; =0x03938700 - moveq r1, #1 - bl _u32_div_f - str r0, [r5, #0x44] - strb r4, [r5, #0x17] - add r0, r6, #1 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02071B5C: .word 0x03938700 - arm_func_end DseTrackEvent_SetBpm2 - - arm_func_start DseTrackEvent_SetBank -DseTrackEvent_SetBank: ; 0x02071B60 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r2, [r4] - ldrb r1, [r4, #1] - mov r0, r3 - add r1, r1, r2, lsl #8 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bl DseChannel_SetBank - add r0, r4, #2 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetBank - - arm_func_start DseTrackEvent_SetBankMsb -DseTrackEvent_SetBankMsb: ; 0x02071B8C - stmdb sp!, {r4, lr} - mov r4, r0 - ldrh r1, [r3, #0xe] - ldrb r2, [r4] - mov r0, r3 - and r1, r1, #0xff - add r1, r1, r2, lsl #8 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bl DseChannel_SetBank - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetBankMsb - - arm_func_start DseTrackEvent_SetBankLsb -DseTrackEvent_SetBankLsb: ; 0x02071BBC - stmdb sp!, {r4, lr} - mov r4, r0 - ldrh r2, [r3, #0xe] - ldrb r1, [r4] - mov r0, r3 - bic r2, r2, #0xff - add r1, r2, r1 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bl DseChannel_SetBank - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetBankLsb - - arm_func_start DseTrackEvent_Dummy1Byte -DseTrackEvent_Dummy1Byte: ; 0x02071BEC - add r0, r0, #1 - bx lr - arm_func_end DseTrackEvent_Dummy1Byte - - arm_func_start DseTrackEvent_SetInstrument -DseTrackEvent_SetInstrument: ; 0x02071BF4 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r3 - ldrb r1, [r6] - mov r0, r4 - bl DseChannel_SetInstrument - movs r2, r0 - bpl _02071C34 - ldrh r1, [r4, #0xe] - ldr r0, [r5, #0x28] - ldr r3, [r5, #0xa0] - ldr ip, [r5, #0x9c] - rsb r2, r2, r1, lsl #16 - mvn r1, #0xcb - blx ip -_02071C34: - add r0, r6, #1 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseTrackEvent_SetInstrument - - arm_func_start DseTrackEvent_SongVolumeFade -DseTrackEvent_SongVolumeFade: ; 0x02071C3C - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrb r2, [r5] - ldrb r0, [r5, #1] - mov r4, r1 - add r0, r2, r0, lsl #8 - mov r0, r0, lsl #0x10 - movs r1, r0, lsr #0x10 - moveq r6, #0 - beq _02071C84 - mov r0, #0x3e8 - mul r0, r1, r0 - ldr r1, _02071CC4 ; =DRIVER_WORK - ldrsh r1, [r1, #0x28] - bl _u32_div_f - mov r0, r0, lsl #0x10 - movs r6, r0, lsr #0x10 - moveq r6, #1 -_02071C84: - ldrb r0, [r5, #2] - cmp r6, #0 - mov r1, r0, lsl #0x10 - str r1, [r4, #0x70] - streq r1, [r4, #0x68] - beq _02071CB8 - ldr r0, [r4, #0x68] - subs r0, r1, r0 - moveq r6, #0 - beq _02071CB8 - mov r1, r6 - bl _s32_div_f - str r0, [r4, #0x6c] -_02071CB8: - strh r6, [r4, #0x74] - add r0, r5, #3 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02071CC4: .word DRIVER_WORK - arm_func_end DseTrackEvent_SongVolumeFade - - arm_func_start DseTrackEvent_RestoreEnvelopeDefaults -DseTrackEvent_RestoreEnvelopeDefaults: ; 0x02071CC8 - stmdb sp!, {r4, lr} - mov r4, r0 - add r0, r3, #0x64 - bl SoundEnvelopeParameters_Reset - mov r0, r4 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_RestoreEnvelopeDefaults - - arm_func_start DseTrackEvent_SetEnvelopeAttackBegin -DseTrackEvent_SetEnvelopeAttackBegin: ; 0x02071CE0 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - add r0, r3, #0x64 - strb r1, [r3, #0x6c] - bl SoundEnvelopeParameters_CheckValidity - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetEnvelopeAttackBegin - - arm_func_start DseTrackEvent_SetEnvelopeAttackTime -DseTrackEvent_SetEnvelopeAttackTime: ; 0x02071D00 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - add r0, r3, #0x64 - strb r1, [r3, #0x6d] - bl SoundEnvelopeParameters_CheckValidity - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetEnvelopeAttackTime - - arm_func_start DseTrackEvent_SetEnvelopeHoldTime -DseTrackEvent_SetEnvelopeHoldTime: ; 0x02071D20 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - add r0, r3, #0x64 - strb r1, [r3, #0x70] - bl SoundEnvelopeParameters_CheckValidity - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetEnvelopeHoldTime - - arm_func_start DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel -DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel: ; 0x02071D40 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r0, [r4] - cmp r0, #0xff - strneb r0, [r3, #0x6e] - ldrb r0, [r4, #1] - cmp r0, #0xff - strneb r0, [r3, #0x6f] - add r0, r3, #0x64 - bl SoundEnvelopeParameters_CheckValidity - add r0, r4, #2 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel - - arm_func_start DseTrackEvent_SetEnvelopeSustainTime -DseTrackEvent_SetEnvelopeSustainTime: ; 0x02071D70 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - add r0, r3, #0x64 - strb r1, [r3, #0x71] - bl SoundEnvelopeParameters_CheckValidity - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetEnvelopeSustainTime - - arm_func_start DseTrackEvent_SetEnvelopeReleaseTime -DseTrackEvent_SetEnvelopeReleaseTime: ; 0x02071D90 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - add r0, r3, #0x64 - strb r1, [r3, #0x72] - bl SoundEnvelopeParameters_CheckValidity - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetEnvelopeReleaseTime - - arm_func_start DseTrackEvent_SetNoteDurationMultiplier -DseTrackEvent_SetNoteDurationMultiplier: ; 0x02071DB0 - ldrb r1, [r0], #1 - strb r1, [r2, #5] - bx lr - arm_func_end DseTrackEvent_SetNoteDurationMultiplier - - arm_func_start DseTrackEvent_ForceLfoEnvelopeLevel -DseTrackEvent_ForceLfoEnvelopeLevel: ; 0x02071DBC - stmdb sp!, {r4, lr} - mov r4, r0 - ldrsb r1, [r4] - mov r0, r3 - bl DseChannel_SetLfoConstEnvelopeLevel - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_ForceLfoEnvelopeLevel - - arm_func_start DseTrackEvent_SetHoldNotes -DseTrackEvent_SetHoldNotes: ; 0x02071DD8 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - ldr r0, [r2, #0x54] - cmp r1, #0x40 - ldrb r1, [r0, #4] - orrhs r1, r1, #1 - strhsb r1, [r0, #4] - bhs _02071E08 - bic r1, r1, #1 - strb r1, [r0, #4] - bl DseVoice_ReleaseHeld -_02071E08: - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetHoldNotes - - arm_func_start DseTrackEvent_SetFlagBit1Unknown -DseTrackEvent_SetFlagBit1Unknown: ; 0x02071E10 - ldrb r1, [r3, #4] - orr r1, r1, #2 - strb r1, [r3, #4] - bx lr - arm_func_end DseTrackEvent_SetFlagBit1Unknown - - arm_func_start DseTrackEvent_SetOptionalVolume -DseTrackEvent_SetOptionalVolume: ; 0x02071E20 - ldrb r1, [r0], #1 - strb r1, [r3, #0x58] - bx lr - arm_func_end DseTrackEvent_SetOptionalVolume - - arm_func_start DseTrackEvent_Dummy2Bytes -DseTrackEvent_Dummy2Bytes: ; 0x02071E2C - add r0, r0, #2 - bx lr - arm_func_end DseTrackEvent_Dummy2Bytes - - arm_func_start DseTrackEvent_SetTuning -DseTrackEvent_SetTuning: ; 0x02071E34 - stmdb sp!, {r4, lr} - ldrsb r1, [r0] - ldr ip, _02071EB0 ; =0x04000208 - mov r2, #0 - mov r1, r1, lsl #0x18 - mov r4, r1, asr #0x10 - strh r4, [r3, #0x54] - ldr lr, [r3, #0xc4] - ldr r1, [r3, #0x1c] - ldrsh lr, [lr, #4] - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - add r1, r4, r1, asr #16 - add r1, lr, r1 - strh r1, [r3, #0x16] - ldrh r4, [ip] - strh r2, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _02071E9C -_02071E84: - ldrh r1, [r2, #6] - orr r1, r1, #0x10 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02071E84 -_02071E9C: - ldr r2, _02071EB0 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r4, pc} - .align 2, 0 -_02071EB0: .word 0x04000208 - arm_func_end DseTrackEvent_SetTuning - - arm_func_start DseTrackEvent_TuningDeltaCoarse -DseTrackEvent_TuningDeltaCoarse: ; 0x02071EB4 - stmdb sp!, {r4, lr} - ldrsb r4, [r0] - ldrsh r1, [r3, #0x54] - ldr ip, _02071F38 ; =0x04000208 - mov r2, #0 - add r1, r1, r4, lsl #8 - mov r1, r1, lsl #0x10 - mov r4, r1, asr #0x10 - strh r4, [r3, #0x54] - ldr lr, [r3, #0xc4] - ldr r1, [r3, #0x1c] - ldrsh lr, [lr, #4] - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - add r1, r4, r1, asr #16 - add r1, lr, r1 - strh r1, [r3, #0x16] - ldrh r4, [ip] - strh r2, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _02071F24 -_02071F0C: - ldrh r1, [r2, #6] - orr r1, r1, #0x10 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02071F0C -_02071F24: - ldr r2, _02071F38 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r4, pc} - .align 2, 0 -_02071F38: .word 0x04000208 - arm_func_end DseTrackEvent_TuningDeltaCoarse - - arm_func_start DseTrackEvent_TuningDeltaFine -DseTrackEvent_TuningDeltaFine: ; 0x02071F3C - stmdb sp!, {r4, lr} - ldrsb r4, [r0] - ldrsh r1, [r3, #0x54] - ldr ip, _02071FC0 ; =0x04000208 - mov r2, #0 - add r1, r1, r4, lsl #2 - mov r1, r1, lsl #0x10 - mov r4, r1, asr #0x10 - strh r4, [r3, #0x54] - ldr lr, [r3, #0xc4] - ldr r1, [r3, #0x1c] - ldrsh lr, [lr, #4] - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - add r1, r4, r1, asr #16 - add r1, lr, r1 - strh r1, [r3, #0x16] - ldrh r4, [ip] - strh r2, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _02071FAC -_02071F94: - ldrh r1, [r2, #6] - orr r1, r1, #0x10 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02071F94 -_02071FAC: - ldr r2, _02071FC0 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r4, pc} - .align 2, 0 -_02071FC0: .word 0x04000208 - arm_func_end DseTrackEvent_TuningDeltaFine - - arm_func_start DseTrackEvent_TuningDeltaFull -DseTrackEvent_TuningDeltaFull: ; 0x02071FC4 - stmdb sp!, {r3, lr} - ldrb ip, [r0] - ldrb r1, [r0, #1] - ldrsh lr, [r3, #0x54] - ldr r2, _02072050 ; =0x04000208 - add r1, ip, r1, lsl #8 - add r1, lr, r1 - mov r1, r1, lsl #0x10 - mov lr, r1, asr #0x10 - strh lr, [r3, #0x54] - ldr ip, [r3, #0xc4] - ldr r1, [r3, #0x1c] - ldrsh ip, [ip, #4] - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - add r1, lr, r1, asr #16 - add r1, ip, r1 - strh r1, [r3, #0x16] - ldrh ip, [r2] - mov r1, #0 - strh r1, [r2] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _0207203C -_02072024: - ldrh r1, [r2, #6] - orr r1, r1, #0x10 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02072024 -_0207203C: - ldr r2, _02072050 ; =0x04000208 - add r0, r0, #2 - ldrh r1, [r2] - strh ip, [r2] - ldmia sp!, {r3, pc} - .align 2, 0 -_02072050: .word 0x04000208 - arm_func_end DseTrackEvent_TuningDeltaFull - - arm_func_start DseTrackEvent_TuningFade -DseTrackEvent_TuningFade: ; 0x02072054 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r3 - ldrb r1, [r6, #4] - ldrb r4, [r7] - ldrb r0, [r7, #1] - tst r1, #2 - ldrb r2, [r7, #2] - add r0, r4, r0, lsl #8 - mov r0, r0, lsl #0x10 - mov r5, r0, lsr #0x10 - ldr r4, [r6, #0xc4] - moveq r1, #0 - streq r1, [r6, #0x1c] - ldr r1, [r6, #0x1c] - mov r0, r2, lsl #0x18 - mov r1, r1, asr #0x10 - add r0, r1, r0, lsr #16 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - mov r1, r0, lsl #0x10 - str r1, [r6, #0x24] - cmp r5, #0 - streq r1, [r6, #0x1c] - beq _020720D4 - ldr r0, [r6, #0x1c] - subs r0, r1, r0 - moveq r5, #0 - beq _020720D4 - mov r1, r5 - bl _s32_div_f - str r0, [r6, #0x20] -_020720D4: - strh r5, [r6, #0x28] - ldr r0, [r6, #0x1c] - ldrsh r1, [r6, #0x54] - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - ldrsh r2, [r4, #4] - add r0, r1, r0, lsr #16 - ldr r1, _02072140 ; =0x04000208 - add r0, r2, r0 - strh r0, [r6, #0x16] - ldrh r3, [r1] - mov r0, #0 - strh r0, [r1] - ldr r1, [r6, #0xb4] - cmp r1, #0 - beq _0207212C -_02072114: - ldrh r0, [r1, #6] - orr r0, r0, #0x10 - strh r0, [r1, #6] - ldr r1, [r1, #0x154] - cmp r1, #0 - bne _02072114 -_0207212C: - ldr r2, _02072140 ; =0x04000208 - add r0, r7, #3 - ldrh r1, [r2] - strh r3, [r2] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02072140: .word 0x04000208 - arm_func_end DseTrackEvent_TuningFade - - arm_func_start DseTrackEvent_SetNoteRandomRegion -DseTrackEvent_SetNoteRandomRegion: ; 0x02072144 - ldrb r1, [r0] - ldrb ip, [r0, #1] - add r0, r0, #2 - mov r2, r1 - cmp r1, ip - movhi r2, ip - movhi ip, r1 - strb r2, [r3, #0xc] - strb ip, [r3, #0xd] - bx lr - arm_func_end DseTrackEvent_SetNoteRandomRegion - - arm_func_start DseTrackEvent_SetTuningJitterAmplitude -DseTrackEvent_SetTuningJitterAmplitude: ; 0x0207216C - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r0, r0, #2 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0xa] - bx lr - arm_func_end DseTrackEvent_SetTuningJitterAmplitude - - arm_func_start DseTrackEvent_SetKeyBend -DseTrackEvent_SetKeyBend: ; 0x02072184 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r2, [r4] - ldrb r1, [r4, #1] - mov r0, r3 - add r1, r1, r2, lsl #8 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 - bl DseChannel_SetKeyBend - add r0, r4, #2 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetKeyBend - - arm_func_start DseTrackEvent_SetUnknown2 -DseTrackEvent_SetUnknown2: ; 0x020721B0 - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r0, r0, #2 - add r1, r1, r2, lsl #8 - strh r1, [r3, #0x56] - bx lr - arm_func_end DseTrackEvent_SetUnknown2 - - arm_func_start DseTrackEvent_SetKeyBendRange -DseTrackEvent_SetKeyBendRange: ; 0x020721C8 - ldrb r1, [r0], #1 - strb r1, [r3, #0x59] - bx lr - arm_func_end DseTrackEvent_SetKeyBendRange - - arm_func_start DseTrackEvent_SetupKeyBendLfo -DseTrackEvent_SetupKeyBendLfo: ; 0x020721D4 - stmdb sp!, {r3, r4, r5, lr} - ldrb r5, [r0] - ldrb r4, [r0, #1] - ldrb lr, [r0, #2] - ldrb ip, [r0, #3] - ldrb r2, [r0, #4] - mov r1, #1 - add r4, r5, r4, lsl #8 - strb r1, [r3, #0x75] - strb r1, [r3, #0x76] - mov r1, r4, lsl #0x10 - strb r2, [r3, #0x77] - mov r1, r1, asr #0x10 - str r1, [r3, #0x78] - add r1, lr, ip, lsl #8 - strh r1, [r3, #0x7c] - mov r1, #0 - strh r1, [r3, #0x7e] - strh r1, [r3, #0x80] - strb r1, [r3, #0x82] - add r0, r0, #5 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseTrackEvent_SetupKeyBendLfo - - arm_func_start DseTrackEvent_SetupKeyBendLfoEnvelope -DseTrackEvent_SetupKeyBendLfoEnvelope: ; 0x0207222C - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x7e] - ldrb r2, [r0, #2] - ldrb r1, [r0, #3] - add r0, r0, #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x80] - bx lr - arm_func_end DseTrackEvent_SetupKeyBendLfoEnvelope - - arm_func_start DseTrackEvent_UseKeyBendLfo -DseTrackEvent_UseKeyBendLfo: ; 0x02072254 - ldrb r1, [r0] - add r0, r0, #1 - cmp r1, #2 - moveq r1, #1 - strb r1, [r3, #0x75] - cmp r1, #0 - moveq r1, #0 - movne r1, #1 - strb r1, [r3, #0x76] - bx lr - arm_func_end DseTrackEvent_UseKeyBendLfo - - arm_func_start DseTrackEvent_SetVolume -DseTrackEvent_SetVolume: ; 0x0207227C - stmdb sp!, {r3, r4, r5, lr} - ldrsb r4, [r0] - mov r5, #0 - ldr r2, _02072308 ; =0x82061029 - mov r1, r4, lsl #0x10 - str r1, [r3, #0x34] - str r1, [r3, #0x2c] - strh r5, [r3, #0x38] - ldr ip, [r3, #0xc4] - ldrb r1, [r3, #0x50] - ldrsb lr, [ip, #8] - ldr ip, _0207230C ; =0x04000208 - smulbb r1, r4, r1 - mul r4, lr, r1 - smull r1, lr, r2, r4 - add lr, r4, lr - mov r1, r4, lsr #0x1f - add lr, r1, lr, asr #13 - strh lr, [r3, #0x18] - ldrh r4, [ip] - strh r5, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _020722F4 -_020722DC: - ldrh r1, [r2, #6] - orr r1, r1, #0x20 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _020722DC -_020722F4: - ldr r2, _0207230C ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02072308: .word 0x82061029 -_0207230C: .word 0x04000208 - arm_func_end DseTrackEvent_SetVolume - - arm_func_start DseTrackEvent_VolumeDelta -DseTrackEvent_VolumeDelta: ; 0x02072310 - stmdb sp!, {r3, r4, r5, lr} - ldrsb r2, [r0] - ldr r1, [r3, #0x2c] - add r4, r2, r1, asr #16 - cmp r4, #0x7f - movgt r4, #0x7f - bgt _02072334 - cmp r4, #0 - movlt r4, #0 -_02072334: - mov r1, r4, lsl #0x10 - str r1, [r3, #0x34] - str r1, [r3, #0x2c] - mov r5, #0 - strh r5, [r3, #0x38] - ldrb r1, [r3, #0x50] - ldr ip, [r3, #0xc4] - ldr r2, _020723B8 ; =0x82061029 - mul r1, r4, r1 - ldrsb lr, [ip, #8] - ldr ip, _020723BC ; =0x04000208 - mul r4, lr, r1 - smull r1, lr, r2, r4 - add lr, r4, lr - mov r1, r4, lsr #0x1f - add lr, r1, lr, asr #13 - strh lr, [r3, #0x18] - ldrh r4, [ip] - strh r5, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _020723A4 -_0207238C: - ldrh r1, [r2, #6] - orr r1, r1, #0x20 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _0207238C -_020723A4: - ldr r2, _020723BC ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020723B8: .word 0x82061029 -_020723BC: .word 0x04000208 - arm_func_end DseTrackEvent_VolumeDelta - - arm_func_start DseTrackEvent_VolumeFade -DseTrackEvent_VolumeFade: ; 0x020723C0 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrsb r1, [r5, #2] - ldrb r2, [r5] - ldrb r0, [r5, #1] - mov r4, r3 - mov r1, r1, lsl #0x10 - add r0, r2, r0, lsl #8 - mov r0, r0, lsl #0x10 - str r1, [r4, #0x34] - movs r6, r0, lsr #0x10 - streq r1, [r4, #0x2c] - beq _02072410 - ldr r0, [r4, #0x2c] - subs r0, r1, r0 - moveq r6, #0 - beq _02072410 - mov r1, r6 - bl _s32_div_f - str r0, [r4, #0x30] -_02072410: - strh r6, [r4, #0x38] - add r0, r5, #3 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseTrackEvent_VolumeFade - - arm_func_start DseTrackEvent_SetExpression -DseTrackEvent_SetExpression: ; 0x0207241C - stmdb sp!, {r3, r4, r5, lr} - ldrb r4, [r0] - ldr r2, _020724A0 ; =0x82061029 - ldr lr, _020724A4 ; =0x04000208 - strb r4, [r3, #0x50] - ldr r1, [r3, #0x2c] - ldr ip, [r3, #0xc4] - mov r1, r1, asr #0x10 - mul r4, r1, r4 - ldrsb r1, [ip, #8] - mov ip, #0 - mul r4, r1, r4 - smull r1, r5, r2, r4 - add r5, r4, r5 - mov r1, r4, lsr #0x1f - add r5, r1, r5, asr #13 - strh r5, [r3, #0x18] - ldrh r4, [lr] - strh ip, [lr] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _0207248C -_02072474: - ldrh r1, [r2, #6] - orr r1, r1, #0x20 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02072474 -_0207248C: - ldr r2, _020724A4 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020724A0: .word 0x82061029 -_020724A4: .word 0x04000208 - arm_func_end DseTrackEvent_SetExpression - - arm_func_start DseTrackEvent_SetupVolumeLfo -DseTrackEvent_SetupVolumeLfo: ; 0x020724A8 - stmdb sp!, {r3, r4, r5, lr} - ldrb r5, [r0] - ldrb r1, [r0, #1] - ldrb r4, [r0, #2] - ldrb lr, [r0, #3] - ldrb ip, [r0, #4] - mov r2, #1 - add r1, r5, r1, lsl #8 - mov r1, r1, lsl #0x10 - strb r2, [r3, #0x85] - mov r2, #2 - strb r2, [r3, #0x86] - strb ip, [r3, #0x87] - mov r1, r1, asr #0x10 - str r1, [r3, #0x88] - add r1, r4, lr, lsl #8 - strh r1, [r3, #0x8c] - mov r1, #0 - strh r1, [r3, #0x8e] - strh r1, [r3, #0x90] - strb r1, [r3, #0x92] - add r0, r0, #5 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseTrackEvent_SetupVolumeLfo - - arm_func_start DseTrackEvent_SetupVolumeLfoEnvelope -DseTrackEvent_SetupVolumeLfoEnvelope: ; 0x02072504 - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x8e] - ldrb r2, [r0, #2] - ldrb r1, [r0, #3] - add r0, r0, #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x90] - bx lr - arm_func_end DseTrackEvent_SetupVolumeLfoEnvelope - - arm_func_start DseTrackEvent_UseVolumeLfo -DseTrackEvent_UseVolumeLfo: ; 0x0207252C - ldrb r1, [r0] - add r0, r0, #1 - cmp r1, #2 - moveq r1, #1 - strb r1, [r3, #0x85] - cmp r1, #0 - moveq r1, #0 - movne r1, #2 - strb r1, [r3, #0x86] - bx lr - arm_func_end DseTrackEvent_UseVolumeLfo - - arm_func_start DseTrackEvent_SetPan -DseTrackEvent_SetPan: ; 0x02072554 - stmdb sp!, {r3, lr} - ldrb lr, [r0] - mov ip, #0 - cmp lr, #0x7f - movgt lr, #0x7f - mov r1, lr, lsl #0x10 - str r1, [r3, #0x44] - str r1, [r3, #0x3c] - strh ip, [r3, #0x48] - ldr r2, [r3, #0xc4] - ldr r1, _020725D0 ; =0x04000208 - ldrsb r2, [r2, #7] - sub r2, r2, #0x40 - add r2, lr, r2 - strh r2, [r3, #0x1a] - ldrh lr, [r1] - strh ip, [r1] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _020725BC -_020725A4: - ldrh r1, [r2, #6] - orr r1, r1, #0x40 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _020725A4 -_020725BC: - ldr r2, _020725D0 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh lr, [r2] - ldmia sp!, {r3, pc} - .align 2, 0 -_020725D0: .word 0x04000208 - arm_func_end DseTrackEvent_SetPan - - arm_func_start DseTrackEvent_PanDelta -DseTrackEvent_PanDelta: ; 0x020725D4 - stmdb sp!, {r3, lr} - ldrsb r2, [r0] - ldr r1, [r3, #0x3c] - add lr, r2, r1, asr #16 - cmp lr, #0x7f - movgt lr, #0x7f - bgt _020725F8 - cmp lr, #0 - movlt lr, #0 -_020725F8: - mov r1, lr, lsl #0x10 - str r1, [r3, #0x44] - str r1, [r3, #0x3c] - mov ip, #0 - strh ip, [r3, #0x48] - ldr r2, [r3, #0xc4] - ldr r1, _02072664 ; =0x04000208 - ldrsb r2, [r2, #7] - sub r2, r2, #0x40 - add r2, lr, r2 - strh r2, [r3, #0x1a] - ldrh lr, [r1] - strh ip, [r1] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _02072650 -_02072638: - ldrh r1, [r2, #6] - orr r1, r1, #0x40 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02072638 -_02072650: - ldr r2, _02072664 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh lr, [r2] - ldmia sp!, {r3, pc} - .align 2, 0 -_02072664: .word 0x04000208 - arm_func_end DseTrackEvent_PanDelta - - arm_func_start DseTrackEvent_PanFade -DseTrackEvent_PanFade: ; 0x02072668 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrsb r1, [r5, #2] - ldrb r2, [r5] - ldrb r0, [r5, #1] - mov r4, r3 - mov r1, r1, lsl #0x10 - add r0, r2, r0, lsl #8 - mov r0, r0, lsl #0x10 - str r1, [r4, #0x44] - movs r6, r0, lsr #0x10 - streq r1, [r4, #0x3c] - beq _020726B8 - ldr r0, [r4, #0x3c] - subs r0, r1, r0 - moveq r6, #0 - beq _020726B8 - mov r1, r6 - bl _s32_div_f - str r0, [r4, #0x40] -_020726B8: - strh r6, [r4, #0x48] - add r0, r5, #3 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseTrackEvent_PanFade - - arm_func_start DseTrackEvent_SetupPanLfo -DseTrackEvent_SetupPanLfo: ; 0x020726C4 - stmdb sp!, {r3, r4, r5, lr} - ldrb r5, [r0] - ldrb r1, [r0, #1] - ldrb r4, [r0, #2] - ldrb lr, [r0, #3] - ldrb ip, [r0, #4] - mov r2, #1 - add r1, r5, r1, lsl #8 - mov r1, r1, lsl #0x10 - strb r2, [r3, #0x95] - mov r2, #3 - strb r2, [r3, #0x96] - strb ip, [r3, #0x97] - mov r1, r1, asr #0x10 - str r1, [r3, #0x98] - add r1, r4, lr, lsl #8 - strh r1, [r3, #0x9c] - mov r1, #0 - strh r1, [r3, #0x9e] - strh r1, [r3, #0xa0] - strb r1, [r3, #0xa2] - add r0, r0, #5 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseTrackEvent_SetupPanLfo - - arm_func_start DseTrackEvent_SetupPanLfoEnvelope -DseTrackEvent_SetupPanLfoEnvelope: ; 0x02072720 - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x9e] - ldrb r2, [r0, #2] - ldrb r1, [r0, #3] - add r0, r0, #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0xa0] - bx lr - arm_func_end DseTrackEvent_SetupPanLfoEnvelope - - arm_func_start DseTrackEvent_UsePanLfo -DseTrackEvent_UsePanLfo: ; 0x02072748 - ldrb r1, [r0] - add r0, r0, #1 - cmp r1, #2 - moveq r1, #1 - strb r1, [r3, #0x95] - cmp r1, #0 - moveq r1, #0 - movne r1, #3 - strb r1, [r3, #0x96] - bx lr - arm_func_end DseTrackEvent_UsePanLfo - - arm_func_start DseTrackEvent_SetupLfo -DseTrackEvent_SetupLfo: ; 0x02072770 - stmdb sp!, {r4, lr} - ldrb r2, [r0] - ldrb r1, [r0, #1] - ldrb ip, [r3, #0x61] - add r3, r3, #0x74 - add r1, r2, r1, lsl #8 - mov r1, r1, lsl #0x10 - ldrb r4, [r0, #2] - ldrb lr, [r0, #3] - ldrb r2, [r0, #4] - add r3, r3, ip, lsl #4 - mov r1, r1, asr #0x10 - strb r2, [r3, #3] - str r1, [r3, #4] - add r1, r4, lr, lsl #8 - strh r1, [r3, #8] - mov r1, #0 - strh r1, [r3, #0xa] - strh r1, [r3, #0xc] - strb r1, [r3, #0xe] - add r0, r0, #5 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetupLfo - - arm_func_start DseTrackEvent_SetupLfoEnvelope -DseTrackEvent_SetupLfoEnvelope: ; 0x020727C8 - ldrb ip, [r3, #0x61] - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r3, r3, #0x74 - add r3, r3, ip, lsl #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0xa] - ldrb r2, [r0, #2] - ldrb r1, [r0, #3] - add r0, r0, #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0xc] - bx lr - arm_func_end DseTrackEvent_SetupLfoEnvelope - - arm_func_start DseTrackEvent_SetLfoParameter -DseTrackEvent_SetLfoParameter: ; 0x020727FC - ldrb r1, [r3, #0x61] - ldrb ip, [r0] - add r2, r3, #0x74 - add r1, r2, r1, lsl #4 - ldrb r2, [r0, #1] - cmp ip, #0xa - addls pc, pc, ip, lsl #2 - b _02072930 -_0207281C: ; jump table - b _02072930 ; case 0 - b _02072848 ; case 1 - b _02072850 ; case 2 - b _02072858 ; case 3 - b _02072860 ; case 4 - b _02072868 ; case 5 - b _020728E0 ; case 6 - b _020728EC ; case 7 - b _020728FC ; case 8 - b _02072910 ; case 9 - b _02072924 ; case 10 -_02072848: - strb r2, [r3, #0x61] - b _02072930 -_02072850: - strb r2, [r1, #1] - b _02072930 -_02072858: - strb r2, [r1, #2] - b _02072930 -_02072860: - strb r2, [r1, #3] - b _02072930 -_02072868: - ldrb r3, [r1, #2] - cmp r3, #4 - addls pc, pc, r3, lsl #2 - b _020728CC -_02072878: ; jump table - b _020728CC ; case 0 - b _0207288C ; case 1 - b _0207289C ; case 2 - b _020728AC ; case 3 - b _020728BC ; case 4 -_0207288C: - mov r3, #0xa - mul r3, r2, r3 - mov r2, r3 - b _020728D8 -_0207289C: - mvn r3, #0x13 - mul r3, r2, r3 - mov r2, r3 - b _020728D8 -_020728AC: - mov r3, #0x14 - mul r3, r2, r3 - mov r2, r3 - b _020728D8 -_020728BC: - mov r3, #0xa - mul r3, r2, r3 - mov r2, r3 - b _020728D8 -_020728CC: - mov r3, #0x14 - mul r3, r2, r3 - mov r2, r3 -_020728D8: - str r2, [r1, #4] - b _02072930 -_020728E0: - add r2, r2, r2, lsl #2 - strh r2, [r1, #8] - b _02072930 -_020728EC: - mov r3, #0x14 - mul r3, r2, r3 - strh r3, [r1, #0xa] - b _02072930 -_020728FC: - ldrh r3, [r1, #0xa] - and r3, r3, #0xff00 - orr r2, r3, r2 - strh r2, [r1, #0xa] - b _02072930 -_02072910: - ldrh r3, [r1, #0xa] - and r3, r3, #0xff - orr r2, r3, r2, lsl #8 - strh r2, [r1, #0xa] - b _02072930 -_02072924: - mov r3, #0x14 - mul r3, r2, r3 - strh r3, [r1, #0xc] -_02072930: - add r0, r0, #2 - bx lr - arm_func_end DseTrackEvent_SetLfoParameter - - arm_func_start DseTrackEvent_UseLfo -DseTrackEvent_UseLfo: ; 0x02072938 - stmdb sp!, {r3, lr} - ldrb ip, [r0, #1] - ldrb r2, [r0] - ldrb lr, [r0, #2] - add r1, r3, #0x74 - cmp ip, #2 - strb r2, [r3, #0x61] - add r1, r1, r2, lsl #4 - moveq ip, #1 - strb ip, [r1, #1] - strb lr, [r1, #2] - add r0, r0, #3 - ldmia sp!, {r3, pc} - arm_func_end DseTrackEvent_UseLfo - - arm_func_start DseTrackEvent_Signal -DseTrackEvent_Signal: ; 0x0207296C - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r2, [r4] - mov ip, r1 - mov r1, #8 - strb r2, [ip, #0x16] - ldr r0, [ip, #0x28] - ldr r3, [ip, #0xa0] - ldr ip, [ip, #0x9c] - blx ip - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_Signal - - arm_func_start DseTrackEvent_Dummy2Bytes2 -DseTrackEvent_Dummy2Bytes2: ; 0x0207299C - add r0, r0, #2 - bx lr - arm_func_end DseTrackEvent_Dummy2Bytes2 - - arm_func_start sub_020729A4 -sub_020729A4: ; 0x020729A4 - ldr r0, _020729B4 ; =_022B9584 - mov r1, #0 - str r1, [r0] - bx lr - .align 2, 0 -_020729B4: .word _022B9584 - arm_func_end sub_020729A4 - - arm_func_start sub_020729B8 -sub_020729B8: ; 0x020729B8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr sb, _02072BB4 ; =_022B9584 - ldr r8, [sb] - ldrb r6, [r8, #0x86] - cmp r6, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrb r5, [r8, #0x85] - mov r1, #0 - cmp r6, #0 - str r1, [sp] - beq _02072B98 - mov fp, #3 - mov r1, #2 - mov r2, r1 - mov r3, fp - mov ip, r1 - mov lr, fp - mov r4, fp -_02072A04: - ldrb sl, [r8, #0x88] - add r7, r8, r5 - add r5, r5, #1 - sub r6, r6, #1 - and r5, r5, #0xff - cmp r5, #0x80 - moveq r5, #0 - ldrb r7, [r7, #4] - and r6, r6, #0xff - cmp sl, #0 - bne _02072B28 - tst r7, #0x80 - bne _02072A4C - add sl, sl, #1 - strb sl, [r8, #0x88] - ldr r8, [sb] - strb r7, [r8, #0x8c] - b _02072B30 -_02072A4C: - and sl, r7, #0xf0 - strb sl, [r8, #0x8a] - and r8, r7, #0xf - ldr r7, [sb] - strb r8, [r7, #0x8b] - ldr r7, [sb] - ldrb r8, [r7, #0x8a] - cmp r8, #0xc0 - bgt _02072AA8 - bge _02072AF8 - cmp r8, #0x90 - bgt _02072A8C - bge _02072AE0 - cmp r8, #0x80 - beq _02072AD8 - b _02072B1C -_02072A8C: - cmp r8, #0xa0 - bgt _02072A9C - beq _02072AE8 - b _02072B1C -_02072A9C: - cmp r8, #0xb0 - beq _02072AF0 - b _02072B1C -_02072AA8: - cmp r8, #0xe0 - bgt _02072AC0 - bge _02072B08 - cmp r8, #0xd0 - beq _02072B00 - b _02072B1C -_02072AC0: - cmp r8, #0xf0 - bgt _02072AD0 - beq _02072B10 - b _02072B1C -_02072AD0: - cmp r8, #0xff - b _02072B1C -_02072AD8: - strb r4, [r7, #0x87] - b _02072B30 -_02072AE0: - strb lr, [r7, #0x87] - b _02072B30 -_02072AE8: - strb ip, [r7, #0x87] - b _02072B30 -_02072AF0: - strb r3, [r7, #0x87] - b _02072B30 -_02072AF8: - strb r2, [r7, #0x87] - b _02072B30 -_02072B00: - strb r1, [r7, #0x87] - b _02072B30 -_02072B08: - strb fp, [r7, #0x87] - b _02072B30 -_02072B10: - mov r8, #3 - strb r8, [r7, #0x87] - b _02072B30 -_02072B1C: - mov r8, #0 - strb r8, [r7, #0x87] - b _02072B30 -_02072B28: - add r8, r8, sl - strb r7, [r8, #0x8b] -_02072B30: - ldr r7, [sb] - ldrb r8, [r7, #0x88] - add r8, r8, #1 - strb r8, [r7, #0x88] - ldr r8, [sb] - ldrb sl, [r8, #0x88] - ldrb r7, [r8, #0x87] - cmp sl, r7 - bne _02072B90 - mov r2, #0 - ldr r1, _02072BB4 ; =_022B9584 - strb r2, [r8, #0x88] - ldr r3, [r1] - mov r1, #1 - str r1, [sp] - ldrb r2, [r3, #0x8a] - ldrb r1, [r3, #0x8b] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #0x8c] - ldrb r1, [r3, #0x8d] - strb r2, [r0, #2] - strb r1, [r0, #3] - b _02072B98 -_02072B90: - cmp r6, #0 - bne _02072A04 -_02072B98: - ldr r1, _02072BB4 ; =_022B9584 - ldr r0, [sp] - ldr r2, [r1] - strb r6, [r2, #0x86] - ldr r1, [r1] - strb r5, [r1, #0x85] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02072BB4: .word _022B9584 - arm_func_end sub_020729B8 - - arm_func_start sub_02072BB8 -sub_02072BB8: ; 0x02072BB8 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc - ldr r0, _02072D94 ; =_022B9584 - ldr r0, [r0] - ldr r4, [r0] - cmp r4, #0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - add r0, sp, #8 - bl sub_020729B8 - cmp r0, #0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - add sb, r4, #0x10 - mov r6, #0 - ldr r4, _02072D98 ; =_020B0D50 - add r7, sp, #0 - mov r5, #1 - mov r8, r6 - mov fp, #0xc8 -_02072C08: - ldrb r1, [sp, #9] - ldrb r0, [sp, #8] - mla sl, r1, fp, sb - cmp r0, #0xc0 - bgt _02072C4C - bge _02072D4C - cmp r0, #0x90 - bgt _02072C38 - bge _02072CC0 - cmp r0, #0x80 - beq _02072C8C - b _02072D7C -_02072C38: - cmp r0, #0xa0 - ble _02072D7C - cmp r0, #0xb0 - beq _02072D2C - b _02072D7C -_02072C4C: - cmp r0, #0xf0 - bgt _02072C6C - bge _02072D7C - cmp r0, #0xd0 - ble _02072D7C - cmp r0, #0xe0 - beq _02072D5C - b _02072D7C -_02072C6C: - cmp r0, #0xf7 - ble _02072D7C - cmp r0, #0xff - bgt _02072D7C - cmp r0, #0xfe - blt _02072D7C - cmpne r0, #0xff - b _02072D7C -_02072C8C: - ldrb r1, [sp, #0xa] - ldrb r0, [sp, #0xb] - str r8, [sp, #4] - strb r1, [sp, #2] - strb r0, [sp, #3] - strb r8, [sp] - ldrb r0, [sl, #4] - tst r0, #1 - bne _02072D7C - mov r0, sl - mov r1, r7 - bl DseChannel_ReleaseNoteInternal - b _02072D7C -_02072CC0: - ldrb r0, [sp, #0xb] - ldrb r1, [sp, #0xa] - str r6, [sp, #4] - strb r0, [sp, #3] - strb r1, [sp, #2] - tst r0, #0xff - beq _02072D0C - mov r0, sl - mov r1, r7 - strb r5, [sp] - bl DseChannel_ReleaseNote - mov r0, sl - mov r1, r7 - bl DseChannel_AllocateNote - movs r1, r0 - beq _02072D7C - mov r0, sl - bl DseVoice_PlayNote - b _02072D7C -_02072D0C: - strb r6, [sp] - ldrb r0, [sl, #4] - tst r0, #1 - bne _02072D7C - mov r0, sl - mov r1, r7 - bl DseChannel_ReleaseNoteInternal - b _02072D7C -_02072D2C: - ldrb r0, [sp, #0xa] - ldr r2, [r4, r0, lsl #2] - cmp r2, #0 - beq _02072D7C - ldrb r1, [sp, #0xb] - mov r0, sl - blx r2 - b _02072D7C -_02072D4C: - ldrb r1, [sp, #0xa] - mov r0, sl - bl DseChannel_SetInstrument - b _02072D7C -_02072D5C: - ldrb r2, [sp, #0xa] - ldrb r1, [sp, #0xb] - mov r0, sl - add r1, r2, r1, lsl #7 - sub r1, r1, #0x2000 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 - bl DseChannel_SetKeyBend -_02072D7C: - add r0, sp, #8 - bl sub_020729B8 - cmp r0, #0 - bne _02072C08 - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02072D94: .word _022B9584 -_02072D98: .word _020B0D50 - arm_func_end sub_02072BB8 - - arm_func_start sub_02072D9C -sub_02072D9C: ; 0x02072D9C - ldrh r2, [r0, #0xe] - ldr ip, _02072DB8 ; =DseChannel_SetBank - and r2, r2, #0xff - add r1, r2, r1, lsl #8 - strh r1, [r0, #0xe] - ldrh r1, [r0, #0xe] - bx ip - .align 2, 0 -_02072DB8: .word DseChannel_SetBank - arm_func_end sub_02072D9C - - arm_func_start sub_02072DBC -sub_02072DBC: ; 0x02072DBC - ldrh r2, [r0, #0xe] - ldr ip, _02072DD8 ; =DseChannel_SetBank - bic r2, r2, #0xff - add r1, r2, r1 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bx ip - .align 2, 0 -_02072DD8: .word DseChannel_SetBank - arm_func_end sub_02072DBC - - arm_func_start sub_02072DDC -sub_02072DDC: ; 0x02072DDC - mov r1, r1, lsl #0x18 - mov r1, r1, asr #0x18 - ldr ip, _02072DF0 ; =DseChannel_SetLfoConstEnvelopeLevel - strb r1, [r0, #0x51] - bx ip - .align 2, 0 -_02072DF0: .word DseChannel_SetLfoConstEnvelopeLevel - arm_func_end sub_02072DDC - - arm_func_start sub_02072DF4 -sub_02072DF4: ; 0x02072DF4 - mov r2, #0xa - mul r2, r1, r2 - strh r2, [r0, #0x56] - bx lr - arm_func_end sub_02072DF4 - - arm_func_start sub_02072E04 -sub_02072E04: ; 0x02072E04 - stmdb sp!, {r4, lr} - mov r2, r1, lsl #0x10 - str r2, [r0, #0x34] - str r2, [r0, #0x2c] - mov r4, #0 - strh r4, [r0, #0x38] - ldrb r3, [r0, #0x50] - ldr lr, [r0, #0xc4] - ldr r2, _02072E88 ; =0x82061029 - mul ip, r1, r3 - ldrsb r1, [lr, #8] - ldr r3, _02072E8C ; =0x04000208 - mul ip, r1, ip - smull r1, lr, r2, ip - add lr, ip, lr - mov r1, ip, lsr #0x1f - add lr, r1, lr, asr #13 - strh lr, [r0, #0x18] - ldrh r2, [r3] - strh r4, [r3] - ldr r1, [r0, #0xb4] - cmp r1, #0 - beq _02072E78 -_02072E60: - ldrh r0, [r1, #6] - orr r0, r0, #0x20 - strh r0, [r1, #6] - ldr r1, [r1, #0x154] - cmp r1, #0 - bne _02072E60 -_02072E78: - ldr r1, _02072E8C ; =0x04000208 - ldrh r0, [r1] - strh r2, [r1] - ldmia sp!, {r4, pc} - .align 2, 0 -_02072E88: .word 0x82061029 -_02072E8C: .word 0x04000208 - arm_func_end sub_02072E04 - - arm_func_start sub_02072E90 -sub_02072E90: ; 0x02072E90 - mov r1, r1, lsl #0x10 - str r1, [r0, #0x44] - str r1, [r0, #0x3c] - mov r2, #0 - ldr r1, _02072EE4 ; =0x04000208 - strh r2, [r0, #0x48] - ldrh r3, [r1] - strh r2, [r1] - ldr r1, [r0, #0xb4] - cmp r1, #0 - beq _02072ED4 -_02072EBC: - ldrh r0, [r1, #6] - orr r0, r0, #0x40 - strh r0, [r1, #6] - ldr r1, [r1, #0x154] - cmp r1, #0 - bne _02072EBC -_02072ED4: - ldr r1, _02072EE4 ; =0x04000208 - ldrh r0, [r1] - strh r3, [r1] - bx lr - .align 2, 0 -_02072EE4: .word 0x04000208 - arm_func_end sub_02072E90 - - arm_func_start sub_02072EE8 -sub_02072EE8: ; 0x02072EE8 - ldr r2, _02072F30 ; =0x04000208 - strb r1, [r0, #0x50] - ldrh r3, [r2] - mov r1, #0 - strh r1, [r2] - ldr r1, [r0, #0xb4] - cmp r1, #0 - beq _02072F20 -_02072F08: - ldrh r0, [r1, #6] - orr r0, r0, #0x20 - strh r0, [r1, #6] - ldr r1, [r1, #0x154] - cmp r1, #0 - bne _02072F08 -_02072F20: - ldr r1, _02072F30 ; =0x04000208 - ldrh r0, [r1] - strh r3, [r1] - bx lr - .align 2, 0 -_02072F30: .word 0x04000208 - arm_func_end sub_02072EE8 - - arm_func_start sub_02072F34 -sub_02072F34: ; 0x02072F34 - strb r1, [r0, #0x58] - bx lr - arm_func_end sub_02072F34 - - arm_func_start sub_02072F3C -sub_02072F3C: ; 0x02072F3C - stmdb sp!, {r3, lr} - cmp r1, #0x40 - ldrb r1, [r0, #4] - orrhs r1, r1, #1 - strhsb r1, [r0, #4] - ldmhsia sp!, {r3, pc} - bic r1, r1, #1 - strb r1, [r0, #4] - bl DseVoice_ReleaseHeld - ldmia sp!, {r3, pc} - arm_func_end sub_02072F3C - - arm_func_start sub_02072F64 -sub_02072F64: ; 0x02072F64 - bx lr - arm_func_end sub_02072F64 - - arm_func_start sub_02072F68 -sub_02072F68: ; 0x02072F68 - bx lr - arm_func_end sub_02072F68 - - arm_func_start sub_02072F6C -sub_02072F6C: ; 0x02072F6C - bx lr - arm_func_end sub_02072F6C - - arm_func_start sub_02072F70 -sub_02072F70: ; 0x02072F70 - bx lr - arm_func_end sub_02072F70 - - arm_func_start sub_02072F74 -sub_02072F74: ; 0x02072F74 - strb r1, [r0, #0x5c] - mov r1, #1 - strb r1, [r0, #0x60] - bx lr - arm_func_end sub_02072F74 - - arm_func_start sub_02072F84 -sub_02072F84: ; 0x02072F84 - strb r1, [r0, #0x5a] - mov r1, #0 - strb r1, [r0, #0x60] - bx lr - arm_func_end sub_02072F84 - - arm_func_start sub_02072F94 -sub_02072F94: ; 0x02072F94 - strb r1, [r0, #0x5b] - mov r1, #0 - strb r1, [r0, #0x60] - bx lr - arm_func_end sub_02072F94 - - arm_func_start sub_02072FA4 -sub_02072FA4: ; 0x02072FA4 - bx lr - arm_func_end sub_02072FA4 - - arm_func_start sub_02072FA8 -sub_02072FA8: ; 0x02072FA8 - bx lr - arm_func_end sub_02072FA8 - - arm_func_start sub_02072FAC -sub_02072FAC: ; 0x02072FAC - stmdb sp!, {r3, lr} - ldr r0, _02072FD4 ; =_022B9584 - ldr r0, [r0] - ldr r0, [r0] - bl DseSynth_StopChannels - ldr r0, _02072FD4 ; =_022B9584 - ldr r0, [r0] - ldr r0, [r0] - bl DseSynth_ClearHeldNotes - ldmia sp!, {r3, pc} - .align 2, 0 -_02072FD4: .word _022B9584 - arm_func_end sub_02072FAC - - arm_func_start sub_02072FD8 -sub_02072FD8: ; 0x02072FD8 - ldr r0, _02072FF4 ; =_022B9584 - mov r1, #0 - ldr r0, [r0] - ldr ip, _02072FF8 ; =DseSynth_SetBankAndSequence - mov r2, r1 - ldr r0, [r0] - bx ip - .align 2, 0 -_02072FF4: .word _022B9584 -_02072FF8: .word DseSynth_SetBankAndSequence - arm_func_end sub_02072FD8 - - arm_func_start sub_02072FFC -sub_02072FFC: ; 0x02072FFC - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - bl DseChannel_DeallocateVoices - ldr r1, _02073074 ; =0x04000208 - mov r0, #0 - ldrh r5, [r1] - strh r0, [r1] - ldr lr, [r4, #0xb8] - cmp lr, #0 - ldreqh r0, [r1] - streqh r5, [r1] - ldmeqia sp!, {r3, r4, r5, pc} - mov ip, lr - mvn r1, #0 - mov r3, r0 -_02073038: - str r1, [lr, #4] - strb r3, [ip, #1] - ldr r0, [ip, #8] - cmp r0, #0 - movne ip, r0 - bne _02073038 - ldr r0, _02073078 ; =DRIVER_WORK - ldr r1, _02073074 ; =0x04000208 - ldr r2, [r0, #0x650] - str r2, [ip, #8] - str lr, [r0, #0x650] - str r3, [r4, #0xb8] - ldrh r0, [r1] - strh r5, [r1] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02073074: .word 0x04000208 -_02073078: .word DRIVER_WORK - arm_func_end sub_02072FFC - - arm_func_start sub_0207307C -sub_0207307C: ; 0x0207307C - mov r1, #0 - strb r1, [r0, #7] - bx lr - arm_func_end sub_0207307C - - arm_func_start sub_02073088 -sub_02073088: ; 0x02073088 - mov r1, #1 - strb r1, [r0, #7] - bx lr - arm_func_end sub_02073088 - - arm_func_start sub_02073094 -sub_02073094: ; 0x02073094 - ldr ip, _020730A4 ; =SoundEnvelopeParameters_CheckValidity - strb r1, [r0, #0x72] - add r0, r0, #0x64 - bx ip - .align 2, 0 -_020730A4: .word SoundEnvelopeParameters_CheckValidity - arm_func_end sub_02073094 - - arm_func_start sub_020730A8 -sub_020730A8: ; 0x020730A8 - ldr ip, _020730B8 ; =SoundEnvelopeParameters_CheckValidity - strb r1, [r0, #0x6d] - add r0, r0, #0x64 - bx ip - .align 2, 0 -_020730B8: .word SoundEnvelopeParameters_CheckValidity - arm_func_end sub_020730A8 - - arm_func_start sub_020730BC -sub_020730BC: ; 0x020730BC - ldr ip, _020730CC ; =SoundEnvelopeParameters_CheckValidity - strb r1, [r0, #0x6e] - add r0, r0, #0x64 - bx ip - .align 2, 0 -_020730CC: .word SoundEnvelopeParameters_CheckValidity - arm_func_end sub_020730BC - - arm_func_start sub_020730D0 -sub_020730D0: ; 0x020730D0 - ldr ip, _020730E0 ; =SoundEnvelopeParameters_CheckValidity - strb r1, [r0, #0x71] - add r0, r0, #0x64 - bx ip - .align 2, 0 -_020730E0: .word SoundEnvelopeParameters_CheckValidity - arm_func_end sub_020730D0 - - arm_func_start sub_020730E4 -sub_020730E4: ; 0x020730E4 - ldrb r2, [r0, #0x61] - add r1, r1, r1, lsl #2 - add r0, r0, r2, lsl #4 - strh r1, [r0, #0x7c] - bx lr - arm_func_end sub_020730E4 - - arm_func_start sub_020730F8 -sub_020730F8: ; 0x020730F8 - and r3, r1, #2 - add r2, r0, #0x74 - strb r3, [r0, #0x61] - add r2, r2, r3, lsl #4 - mov r0, r1, asr #2 - strb r0, [r2, #1] - add r0, r3, #1 - strb r0, [r2, #2] - bx lr - arm_func_end sub_020730F8 - - arm_func_start sub_0207311C -sub_0207311C: ; 0x0207311C - ldrb r2, [r0, #0x61] - add r0, r0, r2, lsl #4 - strb r1, [r0, #0x77] - bx lr - arm_func_end sub_0207311C - - arm_func_start sub_0207312C -sub_0207312C: ; 0x0207312C - ldrb r2, [r0, #0x61] - add r0, r0, #0x74 - add r0, r0, r2, lsl #4 - ldrb r2, [r0, #2] - cmp r2, #4 - addls pc, pc, r2, lsl #2 - b _020731AC -_02073148: ; jump table - b _020731AC ; case 0 - b _0207315C ; case 1 - b _02073170 ; case 2 - b _02073184 ; case 3 - b _02073198 ; case 4 -_0207315C: - mov r2, #0xa - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 - b _020731BC -_02073170: - mvn r2, #0x13 - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 - b _020731BC -_02073184: - mov r2, #0x14 - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 - b _020731BC -_02073198: - mov r2, #0xa - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 - b _020731BC -_020731AC: - mov r2, #0x14 - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 -_020731BC: - str r1, [r0, #4] - bx lr - arm_func_end sub_0207312C - - arm_func_start sub_020731C4 -sub_020731C4: ; 0x020731C4 - mov r2, #0x14 - mul r2, r1, r2 - ldrb r1, [r0, #0x61] - add r0, r0, r1, lsl #4 - strh r2, [r0, #0x7e] - bx lr - arm_func_end sub_020731C4 - - arm_func_start sub_020731DC -sub_020731DC: ; 0x020731DC - mov r2, #0x14 - mul r2, r1, r2 - ldrb r1, [r0, #0x61] - add r0, r0, r1, lsl #4 - strh r2, [r0, #0x80] - bx lr - arm_func_end sub_020731DC - - arm_func_start sub_020731F4 -sub_020731F4: ; 0x020731F4 - strb r1, [r0, #0x59] - bx lr - arm_func_end sub_020731F4 - - arm_func_start sub_020731FC -sub_020731FC: ; 0x020731FC - bx lr - arm_func_end sub_020731FC - - arm_func_start sub_02073200 -sub_02073200: ; 0x02073200 - bx lr - arm_func_end sub_02073200 - - arm_func_start sub_02073204 -sub_02073204: ; 0x02073204 - bx lr - arm_func_end sub_02073204 - - arm_func_start DseSynth_Reset -DseSynth_Reset: ; 0x02073208 - stmdb sp!, {r4, lr} - ldr r1, _02073274 ; =DRIVER_WORK - mov r2, #1 - ldrsb r3, [r1, #0x41] - mov r4, #0 - mov r1, #0x7f - strb r3, [r0, #2] - strb r2, [r0, #3] - strh r4, [r0, #4] - strb r1, [r0, #6] - mov r1, #0x40 - strb r1, [r0, #7] - ldrb ip, [r0, #2] - ldrsb r1, [r0, #6] - ldr r2, _02073278 ; =0x81020409 - ldr r3, _0207327C ; =_022B7A30 - smulbb ip, ip, r1 - smull r1, lr, r2, ip - add lr, ip, lr - mov r1, ip, lsr #0x1f - add lr, r1, lr, asr #6 - strb lr, [r0, #8] - strb r4, [r0, #9] - strb r4, [r0, #0xa] - ldrh r1, [r3, #0x2e] - strb r1, [r0, #0xb] - ldmia sp!, {r4, pc} - .align 2, 0 -_02073274: .word DRIVER_WORK -_02073278: .word 0x81020409 -_0207327C: .word _022B7A30 - arm_func_end DseSynth_Reset - - arm_func_start DseSynth_AllocateNew -DseSynth_AllocateNew: ; 0x02073280 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r0, #0xc8 - mul r0, r5, r0 - mov r2, r1 - add r0, r0, #0x10 - mov r1, #0x10 - bl DseMem_Allocate - movs r4, r0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r1, #0 - strb r1, [r4] - strb r5, [r4, #1] - str r1, [r4, #0xc] - bl DseSynth_Reset - cmp r5, #0 - add r1, r4, #0x10 - mov r2, #0 - ble _02073300 - mov r0, r2 -_020732D4: - str r0, [r1] - strb r2, [r1, #5] - str r0, [r1, #0xb4] - str r0, [r1, #0xb8] - str r0, [r1, #0xbc] - str r0, [r1, #0xc0] - add r2, r2, #1 - str r4, [r1, #0xc4] - cmp r2, r5 - add r1, r1, #0xc8 - blt _020732D4 -_02073300: - ldr r1, _02073348 ; =0x04000208 - mov r0, #0 - ldrh r3, [r1] - ldr r2, _0207334C ; =_022B7988 - strh r0, [r1] - ldr r0, [r2] - cmp r0, #0 - beq _02073330 -_02073320: - add r2, r0, #0xc - ldr r0, [r0, #0xc] - cmp r0, #0 - bne _02073320 -_02073330: - ldr r1, _02073348 ; =0x04000208 - str r4, [r2] - ldrh r0, [r1] - mov r0, r4 - strh r3, [r1] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02073348: .word 0x04000208 -_0207334C: .word _022B7988 - arm_func_end DseSynth_AllocateNew - - arm_func_start DseSynth_Unload -DseSynth_Unload: ; 0x02073350 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl DseSynth_StopChannels - ldr r2, _020733B4 ; =0x04000208 - mov r0, r5 - ldrh r4, [r2] - mov r1, #0 - strh r1, [r2] - bl DseSynth_ClearHeldNotes - ldr r1, _020733B8 ; =_022B7988 - b _02073380 -_0207337C: - add r1, r0, #0xc -_02073380: - ldr r0, [r1] - cmp r0, #0 - cmpne r0, r5 - bne _0207337C - cmp r0, r5 - ldreq r0, [r5, #0xc] - ldr r2, _020733B4 ; =0x04000208 - streq r0, [r1] - ldrh r1, [r2] - mov r0, r5 - strh r4, [r2] - bl DseMem_Free - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020733B4: .word 0x04000208 -_020733B8: .word _022B7988 - arm_func_end DseSynth_Unload - - arm_func_start DseSynth_ClearHeldNotes -DseSynth_ClearHeldNotes: ; 0x020733BC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldrb r3, [r0, #1] - add r1, r0, #0x10 - mov r2, #0 - cmp r3, #0 - ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - ldr r7, _02073450 ; =0x04000208 - ldr ip, _02073454 ; =DRIVER_WORK - mvn r5, #0 - mov r4, r2 - mov r6, r2 -_020733E8: - ldrh r3, [r7] - strh r6, [r7] - ldr sb, [r1, #0xb8] - cmp sb, #0 - ldreqh lr, [r7] - streqh r3, [r7] - beq _02073438 - mov r8, sb -_02073408: - str r5, [sb, #4] - strb r4, [r8, #1] - ldr lr, [r8, #8] - cmp lr, #0 - movne r8, lr - bne _02073408 - ldr lr, [ip, #0x650] - str lr, [r8, #8] - str sb, [ip, #0x650] - str r4, [r1, #0xb8] - ldrh lr, [r7] - strh r3, [r7] -_02073438: - ldrb r3, [r0, #1] - add r2, r2, #1 - add r1, r1, #0xc8 - cmp r2, r3 - blt _020733E8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02073450: .word 0x04000208 -_02073454: .word DRIVER_WORK - arm_func_end DseSynth_ClearHeldNotes - - arm_func_start DseSynth_ResetAndSetBankAndSequence -DseSynth_ResetAndSetBankAndSequence: ; 0x02073458 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl DseSynth_Reset - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl DseSynth_SetBankAndSequence - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseSynth_ResetAndSetBankAndSequence - - arm_func_start DseSynth_StopChannels -DseSynth_StopChannels: ; 0x02073480 - stmdb sp!, {r3, r4, r5, lr} - ldrb r5, [r0, #1] - add r4, r0, #0x10 - cmp r5, #0 - ldmeqia sp!, {r3, r4, r5, pc} -_02073494: - mov r0, r4 - bl DseChannel_DeallocateVoices - subs r5, r5, #1 - add r4, r4, #0xc8 - bne _02073494 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseSynth_StopChannels - - arm_func_start DseSynth_ResetAllVoiceTimersAndVolumes -DseSynth_ResetAllVoiceTimersAndVolumes: ; 0x020734AC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r3, _02073500 ; =0x04000208 - mov r2, #0 - ldrh r6, [r3] - mov r7, r1 - add r4, r0, #0x10 - strh r2, [r3] - strb r7, [r0, #9] - ldrb r5, [r0, #1] - cmp r5, #0 - beq _020734F0 -_020734D8: - mov r0, r4 - mov r1, r7 - bl DseChannel_ResetTimerAndVolumeForVoices - subs r5, r5, #1 - add r4, r4, #0xc8 - bne _020734D8 -_020734F0: - ldr r1, _02073500 ; =0x04000208 - ldrh r0, [r1] - strh r6, [r1] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02073500: .word 0x04000208 - arm_func_end DseSynth_ResetAllVoiceTimersAndVolumes - - arm_func_start DseSynth_RestoreHeldNotes -DseSynth_RestoreHeldNotes: ; 0x02073504 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r2, _02073568 ; =0x04000208 - ldrb r6, [r0, #1] - ldrh r4, [r2] - mov r1, #0 - cmp r6, #0 - strh r1, [r2] - add r5, r0, #0x10 - beq _02073558 -_02073528: - ldr r7, [r5, #0xb8] - cmp r7, #0 - beq _0207354C -_02073534: - mov r0, r5 - mov r1, r7 - bl DseVoice_PlayNote - ldr r7, [r7, #8] - cmp r7, #0 - bne _02073534 -_0207354C: - subs r6, r6, #1 - add r5, r5, #0xc8 - bne _02073528 -_02073558: - ldr r1, _02073568 ; =0x04000208 - ldrh r0, [r1] - strh r4, [r1] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02073568: .word 0x04000208 - arm_func_end DseSynth_RestoreHeldNotes - - arm_func_start DseSynth_SetGlobalVolumeIndex -DseSynth_SetGlobalVolumeIndex: ; 0x0207356C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r3, _02073644 ; =_022B7370 - ldr r4, _02073648 ; =0x81020409 - ldrsb r5, [r3, r1] - add r3, r0, #0x10 - mov ip, #0 - strb r5, [r0, #2] - strb r1, [r0, #3] - ldrb r5, [r0, #2] - ldrsb r1, [r0, #6] - smulbb r5, r5, r1 - smull r1, r6, r4, r5 - add r6, r5, r6 - mov r1, r5, lsr #0x1f - add r6, r1, r6, asr #6 - strb r6, [r0, #8] - ldrb r1, [r0, #1] - cmp r1, #0 - ldmleia sp!, {r4, r5, r6, r7, r8, pc} - ldr r6, _0207364C ; =0x04000208 - mov r5, ip -_020735C0: - ldr r4, [r3, #0x2c] - ldrb r1, [r3, #0x50] - mov r4, r4, asr #0x10 - ldrsb lr, [r0, #8] - mul r1, r4, r1 - mul r7, lr, r1 - ldr r4, _02073650 ; =0x82061029 - mov r1, r7, lsr #0x1f - smull lr, r8, r4, r7 - add r8, r7, r8 - add r8, r1, r8, asr #13 - strh r8, [r3, #0x18] - cmp r2, #1 - bne _0207362C - ldrh r7, [r6] - strh r5, [r6] - ldr r4, [r3, #0xb4] - cmp r4, #0 - beq _02073624 -_0207360C: - ldrh r1, [r4, #6] - orr r1, r1, #0x20 - strh r1, [r4, #6] - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _0207360C -_02073624: - ldrh r1, [r6] - strh r7, [r6] -_0207362C: - ldrb r1, [r0, #1] - add ip, ip, #1 - add r3, r3, #0xc8 - cmp ip, r1 - blt _020735C0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02073644: .word _022B7370 -_02073648: .word 0x81020409 -_0207364C: .word 0x04000208 -_02073650: .word 0x82061029 - arm_func_end DseSynth_SetGlobalVolumeIndex - - arm_func_start DseSynth_SetBend -DseSynth_SetBend: ; 0x02073654 - stmdb sp!, {r3, r4, r5, lr} - strh r1, [r0, #4] - ldrb r3, [r0, #1] - add r1, r0, #0x10 - mov r2, #0 - cmp r3, #0 - ldmleia sp!, {r3, r4, r5, pc} - ldr lr, _020736E4 ; =0x04000208 - mov ip, r2 -_02073678: - ldr r3, [r1, #0x1c] - ldrsh r4, [r1, #0x54] - mov r3, r3, asr #0x10 - mov r3, r3, lsl #0x10 - ldrsh r5, [r0, #4] - add r3, r4, r3, asr #16 - add r3, r5, r3 - strh r3, [r1, #0x16] - ldrh r5, [lr] - strh ip, [lr] - ldr r4, [r1, #0xb4] - cmp r4, #0 - beq _020736C4 -_020736AC: - ldrh r3, [r4, #6] - orr r3, r3, #0x10 - strh r3, [r4, #6] - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _020736AC -_020736C4: - ldrh r3, [lr] - add r2, r2, #1 - add r1, r1, #0xc8 - strh r5, [lr] - ldrb r3, [r0, #1] - cmp r2, r3 - blt _02073678 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020736E4: .word 0x04000208 - arm_func_end DseSynth_SetBend - - arm_func_start DseSynth_SetVolume -DseSynth_SetVolume: ; 0x020736E8 - stmdb sp!, {r4, r5, r6, lr} - strb r1, [r0, #6] - ldrb r4, [r0, #2] - ldrsb r2, [r0, #6] - ldr r3, _020737AC ; =0x81020409 - add r1, r0, #0x10 - smulbb r4, r4, r2 - smull r2, r5, r3, r4 - add r5, r4, r5 - mov r2, r4, lsr #0x1f - add r5, r2, r5, asr #6 - strb r5, [r0, #8] - ldrb r3, [r0, #1] - mov r2, #0 - cmp r3, #0 - ldmleia sp!, {r4, r5, r6, pc} - ldr r4, _020737B0 ; =0x04000208 - ldr ip, _020737B4 ; =0x82061029 - mov lr, r2 -_02073734: - ldr r5, [r1, #0x2c] - ldrb r3, [r1, #0x50] - mov r5, r5, asr #0x10 - ldrsb r6, [r0, #8] - mul r3, r5, r3 - mul r5, r6, r3 - smull r3, r6, ip, r5 - add r6, r5, r6 - mov r3, r5, lsr #0x1f - add r6, r3, r6, asr #13 - strh r6, [r1, #0x18] - ldrh r6, [r4] - strh lr, [r4] - ldr r5, [r1, #0xb4] - cmp r5, #0 - beq _0207378C -_02073774: - ldrh r3, [r5, #6] - orr r3, r3, #0x20 - strh r3, [r5, #6] - ldr r5, [r5, #0x154] - cmp r5, #0 - bne _02073774 -_0207378C: - ldrh r3, [r4] - add r2, r2, #1 - add r1, r1, #0xc8 - strh r6, [r4] - ldrb r3, [r0, #1] - cmp r2, r3 - blt _02073734 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_020737AC: .word 0x81020409 -_020737B0: .word 0x04000208 -_020737B4: .word 0x82061029 - arm_func_end DseSynth_SetVolume - - arm_func_start DseSynth_SetPan -DseSynth_SetPan: ; 0x020737B8 - stmdb sp!, {r3, r4, r5, lr} - strb r1, [r0, #7] - ldrb r3, [r0, #1] - add r1, r0, #0x10 - mov r2, #0 - cmp r3, #0 - ldmleia sp!, {r3, r4, r5, pc} - ldr lr, _02073848 ; =0x04000208 - mov ip, r2 -_020737DC: - ldr r3, [r1, #0xc4] - ldr r4, [r1, #0x3c] - ldrsb r3, [r3, #7] - mov r4, r4, asr #0x10 - and r4, r4, #0xff - sub r3, r3, #0x40 - add r3, r4, r3 - strh r3, [r1, #0x1a] - ldrh r5, [lr] - strh ip, [lr] - ldr r4, [r1, #0xb4] - cmp r4, #0 - beq _02073828 -_02073810: - ldrh r3, [r4, #6] - orr r3, r3, #0x40 - strh r3, [r4, #6] - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _02073810 -_02073828: - ldrh r3, [lr] - add r2, r2, #1 - add r1, r1, #0xc8 - strh r5, [lr] - ldrb r3, [r0, #1] - cmp r2, r3 - blt _020737DC - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02073848: .word 0x04000208 - arm_func_end DseSynth_SetPan - - arm_func_start DseSynth_SetBankAndSequence -DseSynth_SetBankAndSequence: ; 0x0207384C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - ldr r3, _020738D8 ; =DRIVER_WORK - mov sl, r0 - ldrsb r6, [r3, #0x3d] - mov r7, #0 - mov sb, r1 - strb r7, [r3, #0x3d] - ldrb r0, [sl, #1] - mov r8, r2 - add r5, sl, #0x10 - cmp r0, #0 - ble _020738CC - mov r0, sb, lsl #0x10 - mov r4, r0, lsr #0x10 -_02073884: - mov r0, r5 - bl DseChannel_DeallocateVoices - mov r0, r5 - mov r1, r8 - bl DseChannel_Init - cmp sb, #0 - blt _020738B8 - mov r0, r5 - mov r1, r4 - bl DseChannel_SetBank - mov r0, r5 - mov r1, r4 - bl DseChannel_SetInstrument -_020738B8: - ldrb r0, [sl, #1] - add r7, r7, #1 - add r5, r5, #0xc8 - cmp r7, r0 - blt _02073884 -_020738CC: - ldr r0, _020738D8 ; =DRIVER_WORK - strb r6, [r0, #0x3d] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_020738D8: .word DRIVER_WORK - arm_func_end DseSynth_SetBankAndSequence - - arm_func_start DseChannel_Init -DseChannel_Init: ; 0x020738DC - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - str r1, [r4] - mov r0, #0 - strb r0, [r4, #4] - strb r0, [r4, #6] - mov r1, #1 - strb r1, [r4, #7] - ldr r1, _02073A80 ; =_022B7A30 - strb r0, [r4, #8] - ldrh r3, [r1, #0x2e] - ldr r1, _02073A84 ; =DRIVER_WORK - mov r2, #0x7f - strb r3, [r4, #9] - strh r0, [r4, #0xa] - strb r0, [r4, #0xc] - strb r0, [r4, #0xd] - add r1, r1, #0x600 - ldrsb ip, [r1, #0x74] - ldrsb r3, [r1, #0x94] - add r3, r3, ip, lsl #8 - strh r3, [r4, #0xe] - strh r0, [r4, #0x10] - strh r0, [r4, #0x14] - str r0, [r4, #0x1c] - strh r0, [r4, #0x28] - ldrsb r3, [r1, #0x7b] - mov r3, r3, lsl #0x10 - str r3, [r4, #0x2c] - strh r0, [r4, #0x38] - ldrsb r3, [r1, #0x7e] - mov r3, r3, lsl #0x10 - str r3, [r4, #0x3c] - strh r0, [r4, #0x48] - strh r0, [r4, #0x54] - ldrsb r3, [r1, #0x7f] - strb r3, [r4, #0x50] - ldrsb r1, [r1, #0x75] - strb r1, [r4, #0x51] - strh r0, [r4, #0x52] - strh r0, [r4, #0x56] - strb r2, [r4, #0x58] - strb r0, [r4, #0x59] - strb r0, [r4, #0x5a] - strb r0, [r4, #0x5b] - strb r0, [r4, #0x5c] - strb r0, [r4, #0x5d] - strb r0, [r4, #0x5e] - strb r0, [r4, #0x5f] - strb r0, [r4, #0x60] - mov r2, r0 -_020739A8: - add r1, r4, r0, lsl #4 - strb r2, [r1, #0x75] - add r0, r0, #1 - strb r2, [r1, #0x76] - cmp r0, #4 - blt _020739A8 - add r0, r4, #0x64 - bl SoundEnvelopeParameters_Reset - mov r0, #0 - ldr r1, _02073A88 ; =0x04000208 - str r0, [r4, #0xb4] - ldrh r5, [r1] - strh r0, [r1] - ldr lr, [r4, #0xb8] - cmp lr, #0 - ldreqh r0, [r1] - streqh r5, [r1] - beq _02073A34 - mov ip, lr - mvn r1, #0 - mov r3, r0 -_020739FC: - str r1, [lr, #4] - strb r3, [ip, #1] - ldr r0, [ip, #8] - cmp r0, #0 - movne ip, r0 - bne _020739FC - ldr r0, _02073A84 ; =DRIVER_WORK - ldr r1, _02073A88 ; =0x04000208 - ldr r2, [r0, #0x650] - str r2, [ip, #8] - str lr, [r0, #0x650] - str r3, [r4, #0xb8] - ldrh r0, [r1] - strh r5, [r1] -_02073A34: - mov r1, #0 - str r1, [r4, #0xbc] - ldr r0, _02073A84 ; =DRIVER_WORK - str r1, [r4, #0xc0] - strh r1, [r4, #0x16] - add r0, r0, #0x600 - ldrsb r3, [r0, #0x7b] - ldrsb r0, [r0, #0x7f] - ldr r1, _02073A8C ; =0x82061029 - mov r2, #0x40 - smulbb r0, r3, r0 - rsb r3, r0, r0, lsl #7 - smull r0, ip, r1, r3 - add ip, r3, ip - mov r0, r3, lsr #0x1f - add ip, r0, ip, asr #13 - strh ip, [r4, #0x18] - strh r2, [r4, #0x1a] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02073A80: .word _022B7A30 -_02073A84: .word DRIVER_WORK -_02073A88: .word 0x04000208 -_02073A8C: .word 0x82061029 - arm_func_end DseChannel_Init - - arm_func_start DseChannel_DeallocateVoices -DseChannel_DeallocateVoices: ; 0x02073A90 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r6, [r0, #0xb4] - mov r1, #0 - str r1, [r0, #0xb4] - cmp r6, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - ldr r8, _02073B10 ; =_022B7A30 - mov r5, r1 - mov r4, r1 -_02073AB4: - ldr r7, [r6, #0x154] - add r0, r6, #0x3c - strh r5, [r6, #4] - str r5, [r6, #0x158] - str r5, [r6, #0x154] - bl SoundEnvelope_Stop - ldr r0, [r6, #0x14c] - cmp r7, #0 - and r0, r0, #0xff - str r0, [r6, #0x14c] - str r4, [r6] - strh r4, [r6, #0x18] - ldrh r2, [r6, #0xa] - ldrh r1, [r8, #0x32] - mov r6, r7 - mvn r0, r2 - and r0, r1, r0 - strh r0, [r8, #0x32] - ldrh r0, [r8, #0x36] - orr r0, r0, r2 - strh r0, [r8, #0x36] - bne _02073AB4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02073B10: .word _022B7A30 - arm_func_end DseChannel_DeallocateVoices - - arm_func_start DseChannel_ResetTimerAndVolumeForVoices -DseChannel_ResetTimerAndVolumeForVoices: ; 0x02073B14 - cmp r1, #1 - bne _02073B5C - ldrb r1, [r0, #4] - orr r1, r1, #0x40 - strb r1, [r0, #4] - ldr r2, [r0, #0xb4] - cmp r2, #0 - bxeq lr - mov r1, #0 -_02073B38: - str r1, [r2, #0x13c] - str r1, [r2, #0x140] - ldrh r0, [r2, #6] - orr r0, r0, #0x30 - strh r0, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02073B38 - bx lr -_02073B5C: - ldr r2, [r0, #0xb4] - cmp r2, #0 - beq _02073B80 -_02073B68: - ldrh r1, [r2, #6] - orr r1, r1, #0x30 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02073B68 -_02073B80: - ldrb r1, [r0, #4] - bic r1, r1, #0x40 - strb r1, [r0, #4] - bx lr - arm_func_end DseChannel_ResetTimerAndVolumeForVoices - - arm_func_start DseChannel_SetBank -DseChannel_SetBank: ; 0x02073B90 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, r1 - strh r1, [r4, #0xe] - bl DseSwd_GetBankById - str r0, [r4, #0xbc] - cmp r0, #0 - moveq r0, #0 - streq r0, [r4, #0xc0] - ldmeqia sp!, {r4, pc} - ldrh r1, [r4, #0x10] - mov r0, r4 - bl DseChannel_SetInstrument - ldmia sp!, {r4, pc} - arm_func_end DseChannel_SetBank - - arm_func_start DseChannel_SetInstrument -DseChannel_SetInstrument: ; 0x02073BC8 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r5, r0 - ldr r0, [r5, #0xbc] - mov r4, r1 - cmp r0, #0 - bne _02073BF0 - mov r0, #0 - str r0, [r5, #0xc0] - strh r0, [r5, #0x10] - b _02073C4C -_02073BF0: - mov r0, r4, lsl #0x10 - mov r1, r0, asr #0x10 - strh r1, [r5, #0x10] - ldr r0, [r5, #0xbc] - bl DseSwd_GetInstrument - movs lr, r0 - beq _02073C48 - mov r6, #0 - strb r6, [r5, #0x59] - add r7, lr, #0x10 - add r8, r5, #0x74 - mov ip, r6 -_02073C20: - ldrb r0, [r7, #1] - add r6, r6, #1 - cmp r0, #0 - ldmneia r7, {r0, r1, r2, r3} - stmneia r8, {r0, r1, r2, r3} - streqb ip, [r8, #1] - cmp r6, #4 - add r7, r7, #0x10 - add r8, r8, #0x10 - blt _02073C20 -_02073C48: - str lr, [r5, #0xc0] -_02073C4C: - add r0, r5, #0x64 - bl SoundEnvelopeParameters_Reset - mov r0, r4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - arm_func_end DseChannel_SetInstrument - - arm_func_start DseChannel_SetLfoConstEnvelopeLevel -DseChannel_SetLfoConstEnvelopeLevel: ; 0x02073C5C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - strb r5, [r0, #0x51] - ldr r4, [r0, #0xb4] - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} -_02073C74: - mov r1, r5 - add r0, r4, #0x5c - bl SoundLfoBank_SetConstEnvelopes - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _02073C74 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseChannel_SetLfoConstEnvelopeLevel - - arm_func_start DseChannel_SetKeyBend -DseChannel_SetKeyBend: ; 0x02073C90 - strh r1, [r0, #0x52] - ldr r2, [r0, #0xb4] - cmp r2, #0 - bxeq lr - mov r3, r1, lsl #8 -_02073CA4: - ldrb r0, [r2, #0xf] - mul r1, r0, r3 - mov r0, r1, asr #0xc - add r0, r1, r0, lsr #19 - mov r0, r0, asr #0xd - strh r0, [r2, #0x10] - ldrh r0, [r2, #6] - orr r0, r0, #0x10 - strh r0, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02073CA4 - bx lr - arm_func_end DseChannel_SetKeyBend - - arm_func_start DseChannel_AllocateNote -DseChannel_AllocateNote: ; 0x02073CD8 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrb r2, [r5, #0xd] - mov r4, r1 - cmp r2, #0 - beq _02073D18 - ldrb r0, [r5, #0xc] - sub r0, r2, r0 - add r6, r0, #1 - bl DseUtil_GetRandomNumber - mul r1, r6, r0 - mov r0, r1, asr #0xe - ldrb r2, [r5, #0xc] - add r0, r1, r0, lsr #17 - add r0, r2, r0, asr #15 - strb r0, [r4, #2] -_02073D18: - ldr r1, _02073D64 ; =DRIVER_WORK - ldr r0, [r1, #0x650] - cmp r0, #0 - moveq r0, #0 - ldrne r2, [r0, #8] - strne r2, [r1, #0x650] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - ldr r3, [r4] - ldr r2, [r4, #4] - mov r1, #1 - str r3, [r0] - str r2, [r0, #4] - strb r1, [r0, #1] - ldr r1, [r5, #0xb8] - str r1, [r0, #8] - str r0, [r5, #0xb8] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02073D64: .word DRIVER_WORK - arm_func_end DseChannel_AllocateNote - - arm_func_start DseChannel_ReleaseNoteInternal -DseChannel_ReleaseNoteInternal: ; 0x02073D68 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r0 - ldr r4, [r7, #0xb8] - mov r6, r1 - cmp r4, #0 - add r5, r7, #0xb8 - beq _02073DE4 - ldrb r1, [r6, #2] -_02073D88: - ldrb r0, [r4, #2] - cmp r0, r1 - bne _02073DD4 - ldr r8, [r7, #0xb4] - cmp r8, #0 - beq _02073DC8 -_02073DA0: - ldrb r1, [r8, #0xd] - ldrb r0, [r6, #2] - cmp r1, r0 - bne _02073DBC - mov r0, r7 - mov r1, r8 - bl DseVoice_Release -_02073DBC: - ldr r8, [r8, #0x154] - cmp r8, #0 - bne _02073DA0 -_02073DC8: - ldr r0, [r4, #8] - str r0, [r5] - b _02073DE4 -_02073DD4: - add r5, r4, #8 - ldr r4, [r4, #8] - cmp r4, #0 - bne _02073D88 -_02073DE4: - ldr r0, _02073E0C ; =DRIVER_WORK - mvn r2, #0 - ldr r3, [r0, #0x650] - mov r1, #0 - str r3, [r4, #8] - str r4, [r0, #0x650] - str r2, [r4, #4] - mov r0, r4 - strb r1, [r4, #1] - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02073E0C: .word DRIVER_WORK - arm_func_end DseChannel_ReleaseNoteInternal - - arm_func_start DseChannel_ChangeNote -DseChannel_ChangeNote: ; 0x02073E10 - stmdb sp!, {r4, lr} - ldr r4, [r0, #0xb8] - cmp r4, #0 - beq _02073E54 -_02073E20: - ldrb r3, [r4, #2] - cmp r3, r2 - bne _02073E48 - ldr lr, [r1] - ldr ip, [r1, #4] - mov r3, #1 - str lr, [r4] - str ip, [r4, #4] - strb r3, [r4, #1] - b _02073E54 -_02073E48: - ldr r4, [r4, #8] - cmp r4, #0 - bne _02073E20 -_02073E54: - ldr ip, [r0, #0xb4] - cmp ip, #0 - ldmeqia sp!, {r4, pc} -_02073E60: - ldrb r0, [ip, #0xd] - cmp r0, r2 - bne _02073E90 - ldrb r0, [r1, #2] - strb r0, [ip, #0xd] - ldrb r3, [r1, #2] - ldrsh r0, [ip, #0x14] - add r0, r0, r3, lsl #8 - strh r0, [ip, #0x12] - ldrh r0, [ip, #6] - orr r0, r0, #0x10 - strh r0, [ip, #6] -_02073E90: - ldr ip, [ip, #0x154] - cmp ip, #0 - bne _02073E60 - ldmia sp!, {r4, pc} - arm_func_end DseChannel_ChangeNote - - arm_func_start DseChannel_ReleaseNote -DseChannel_ReleaseNote: ; 0x02073EA0 - stmdb sp!, {r3, lr} - ldr r2, [r0, #0xb8] - cmp r2, #0 - ldmeqia sp!, {r3, pc} - ldrb r3, [r1, #2] -_02073EB4: - ldrb r1, [r2, #2] - cmp r1, r3 - bne _02073ECC - mov r1, r2 - bl DseChannel_ReleaseNoteInternal - ldmia sp!, {r3, pc} -_02073ECC: - ldr r2, [r2, #8] - cmp r2, #0 - bne _02073EB4 - ldmia sp!, {r3, pc} - arm_func_end DseChannel_ReleaseNote - - arm_func_start DseVoice_PlayNote -DseVoice_PlayNote: ; 0x02073EDC - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc - mov sl, r0 - ldrsh r4, [sl, #0xa] - mov sb, r1 - cmp r4, #0 - moveq r0, #0 - streq r0, [sp] - beq _02073F28 - bl DseUtil_GetRandomNumber - mov r1, r4, lsl #1 - mul r2, r1, r0 - mov r0, r2, asr #0xe - ldrsh r1, [sl, #0xa] - add r0, r2, r0, lsr #17 - rsb r0, r1, r0, asr #15 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp] -_02073F28: - ldr r6, [sl, #0xc0] - cmp r6, #0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r7, [sl, #0xbc] - mov r5, #0 -_02073F40: - ldrb r2, [sb, #2] - ldrsb r3, [sb, #3] - mov r0, r6 - mov r1, r5 - bl DseSwd_GetNextSplitInRange - movs r5, r0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrb r3, [r5, #0x1a] - ldrb r0, [r7, #0xc] - ldr r2, [r7, #0x18] - cmp r3, r0 - movge r3, #0 - add r1, r2, r3, lsl #3 - ldr r2, [r2, r3, lsl #3] - ldr r1, [r1, #4] - mov r0, r7 - str r2, [sp, #4] - str r1, [sp, #8] - ldrsh r1, [r5, #0x12] - bl ReadWaviEntry - movs fp, r0 - beq _02073F40 - ldrb r3, [sl, #5] - ldrb r2, [r5, #0x1a] - mov r0, sl - add r1, sp, #4 - add r8, r2, r3, lsl #8 - ldrb r3, [sp, #7] - mov r2, r8 - bl DseVoice_Allocate - movs r4, r0 - beq _02073F40 - mov r0, #0 - strh r0, [r4, #4] - ldr r0, [sl] - add fp, fp, #0x10 - str r0, [r4] - strh r8, [r4, #0x18] - ldrsh r0, [r5, #0x12] - add ip, r4, #0x1c - strb r0, [r4, #0xe] - ldmia fp!, {r0, r1, r2, r3} - stmia ip!, {r0, r1, r2, r3} - ldmia fp, {r0, r1, r2, r3} - stmia ip, {r0, r1, r2, r3} - ldr r1, [r4, #0x30] - ldr r0, [r7, #0x1c] - add r0, r1, r0 - str r0, [r4, #0x30] - ldrb r0, [sb, #2] - strb r0, [r4, #0xd] - ldrsb r1, [r5, #0x17] - ldrsh r0, [r5, #0x14] - add r1, r0, r1, lsl #8 - ldr r0, [sp] - add r0, r0, r1 - strh r0, [r4, #0x14] - ldrb r1, [sb, #2] - ldrsh r0, [r4, #0x14] - add r0, r0, r1, lsl #8 - strh r0, [r4, #0x12] - ldrb r0, [r5, #0x19] - strb r0, [r4, #0x17] - ldr r0, _02074144 ; =DRIVER_WORK - ldrb r0, [r0, #0x39] - cmp r0, #7 - bne _02074084 - ldrb r1, [sl, #0x58] - ldrb r0, [sb, #3] - ldrb r2, [r6, #4] - ldrb r3, [r5, #0x18] - smulbb r0, r1, r0 - mul r0, r2, r0 - mul r2, r3, r0 - ldr r0, _02074148 ; =0x4186143D - smull r1, r3, r0, r2 - mov r0, r2, lsr #0x1f - add r3, r0, r3, asr #19 - strb r3, [r4, #0x16] - b _020740B0 -_02074084: - ldrb r1, [sb, #3] - ldrb r0, [r6, #4] - ldrb r2, [r5, #0x18] - smulbb r0, r1, r0 - mul r3, r2, r0 - ldr r0, _0207414C ; =0x82061029 - smull r1, r2, r0, r3 - add r2, r3, r2 - mov r0, r3, lsr #0x1f - add r2, r0, r2, asr #13 - strb r2, [r4, #0x16] -_020740B0: - ldrb r2, [sl, #0x59] - ldrsh r3, [sl, #0x52] - add r0, r4, #0x5c - cmp r2, #0 - ldreqb r2, [r5, #2] - mov r3, r3, lsl #8 - add r1, sl, #0x74 - mul r8, r2, r3 - mov r3, r8, asr #0xc - add r3, r8, r3, lsr #19 - mov r3, r3, asr #0xd - strh r3, [r4, #0x10] - strb r2, [r4, #0xf] - ldrh r2, [r4, #6] - orr r2, r2, #0xff0 - strh r2, [r4, #6] - ldrsb r2, [sl, #0x51] - bl SoundLfoBank_Set - add r0, r5, #0x20 - add r8, r4, #0x3c - ldmia r0, {r0, r1, r2, r3} - stmia r8, {r0, r1, r2, r3} - mov r0, #1 - strb r0, [r4, #0x3c] - ldrb r0, [sl, #0x64] - cmp r0, #0 - beq _02074128 - mov r0, r8 - add r1, sl, #0x64 - bl SoundEnvelope_SetParameters -_02074128: - mov r1, r4 - mov r0, sl - ldrb r2, [sp, #7] - bl DseVoice_Start - b _02073F40 -_0207413C: - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02074144: .word DRIVER_WORK -_02074148: .word 0x4186143D -_0207414C: .word 0x82061029 - arm_func_end DseVoice_PlayNote - - arm_func_start DseVoice_ReleaseNote -DseVoice_ReleaseNote: ; 0x02074150 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - ldr r4, [r6, #0xb4] - mov r5, r1 - cmp r4, #0 - ldmeqia sp!, {r4, r5, r6, pc} -_02074168: - ldrb r1, [r4, #0xd] - ldrb r0, [r5, #2] - cmp r1, r0 - bne _02074184 - mov r0, r6 - mov r1, r4 - bl DseVoice_Release -_02074184: - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _02074168 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseVoice_ReleaseNote - - arm_func_start DseVoice_UpdateParameters -DseVoice_UpdateParameters: ; 0x02074194 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr fp, _0207431C ; =_022B7A30 - ldr r7, _02074320 ; =_022B7A6C - ldrh r0, [fp, #0x2e] - mov sb, #0 - cmp r0, #0 - ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r6, _02074324 ; =_020B1310 - ldr r5, _02074328 ; =_020B1394 - ldr r4, _0207432C ; =0x00FFB0FF -_020741BC: - ldr r8, [r7, #0x158] - cmp r8, #0 - beq _02074304 - ldrh sl, [r7, #6] - cmp sl, #0 - beq _02074300 - tst sl, #0x10 - beq _02074264 - ldrh r2, [r8, #0x16] - ldrsh r1, [r7, #0x12] - ldrsh r3, [r7, #0x10] - ldrsh r0, [r7, #0x5e] - add r1, r2, r1 - add r1, r3, r1 - add r0, r0, r1 - mov r0, r0, lsl #0x10 - mov r1, r0, lsr #0x10 - mov r0, r1, asr #8 - and r0, r0, #0x7f - ldrb r0, [r6, r0] - and r2, r1, #0xff - mov r1, r0, lsl #0x1c - add r1, r2, r1, lsr #20 - mov r1, r1, lsl #1 - mov r0, r0, asr #4 - ldrh r1, [r5, r1] - rsbs r0, r0, #4 - movpl r1, r1, lsr r0 - rsbmi r0, r0, #0 - movmi r1, r1, lsl r0 - ldrb r0, [r7, #0x1f] - cmp r0, #3 - mov r0, r4 - blo _0207425C - mov r2, r1, asr #3 - add r1, r1, r2, lsr #28 - mov r1, r1, asr #4 - bl _s32_div_f - str r0, [r7, #0x13c] - b _02074264 -_0207425C: - bl _s32_div_f - str r0, [r7, #0x13c] -_02074264: - tst sl, #0x20 - beq _020742C4 - ldrb r1, [r7, #0x16] - ldrsh r0, [r7, #0x60] - add r1, r1, r0, asr #6 - cmp r1, #0x7f - movgt r1, #0x7f - bgt _0207428C - cmp r1, #0 - movlt r1, #0 -_0207428C: - ldrh r0, [r8, #0x18] - ldrb r2, [r7, #0x14c] - mul r1, r0, r1 - mul r3, r2, r1 - ldr r0, _02074330 ; =0x828CBFBF - smull r1, r2, r0, r3 - add r2, r3, r2 - mov r0, r3, lsr #0x1f - add r2, r0, r2, asr #12 - mul r1, r2, r2 - mov r0, r1, asr #8 - add r0, r1, r0, lsr #23 - mov r0, r0, asr #9 - str r0, [r7, #0x140] -_020742C4: - tst sl, #0x40 - beq _02074300 - ldrsb r1, [r7, #0x17] - ldrsh r2, [r8, #0x1a] - ldrsh r0, [r7, #0x62] - sub r1, r1, #0x40 - add r1, r2, r1 - adds r1, r1, r0, asr #6 - ldr r0, _02074334 ; =_022B8330 - movmi r1, #0 - cmp r1, #0x7f - ldr r0, [r0, #0xed4] - movgt r1, #0x7f - ldrb r0, [r0, r1] - str r0, [r7, #0x144] -_02074300: - strh sl, [r7, #6] -_02074304: - ldrh r0, [fp, #0x2e] - add sb, sb, #1 - add r7, r7, #0x15c - cmp sb, r0 - blt _020741BC - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0207431C: .word _022B7A30 -_02074320: .word _022B7A6C -_02074324: .word _020B1310 -_02074328: .word _020B1394 -_0207432C: .word 0x00FFB0FF -_02074330: .word 0x828CBFBF -_02074334: .word _022B8330 - arm_func_end DseVoice_UpdateParameters - - arm_func_start DseVoice_ResetAll -DseVoice_ResetAll: ; 0x02074338 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - ldr sl, _020743D0 ; =_022B7A30 - mov r8, #0 - ldrh r0, [sl, #0x2e] - cmp r0, #0 - ble _020743C0 - ldr sb, _020743D4 ; =_022B7A6C - mov r7, r8 - mov r6, #1 - mov r5, #0x40 - mov r4, r8 -_02074364: - strh r7, [sb, #4] - strh r7, [sb, #6] - mov r0, r6, lsl r8 - strh r8, [sb, #8] - strh r0, [sb, #0xa] - str r7, [sb] - str r7, [sb, #0x14c] - strb r7, [sb, #0xd] - strb r7, [sb, #0xe] - strh r7, [sb, #0x12] - strb r7, [sb, #0x16] - add r0, sb, #0x3c - strb r5, [sb, #0x17] - bl SoundEnvelope_Reset - add r0, sb, #0x5c - bl SoundLfoBank_Reset - str r4, [sb, #0x154] - str r4, [sb, #0x158] - ldrh r0, [sl, #0x2e] - add r8, r8, #1 - add sb, sb, #0x15c - cmp r8, r0 - blt _02074364 -_020743C0: - ldr r0, _020743D8 ; =DRIVER_WORK - mov r1, #0 - str r1, [r0, #0x654] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_020743D0: .word _022B7A30 -_020743D4: .word _022B7A6C -_020743D8: .word DRIVER_WORK - arm_func_end DseVoice_ResetAll - - arm_func_start DseVoice_ResetHW -DseVoice_ResetHW: ; 0x020743DC - stmdb sp!, {r3, lr} - cmp r0, #0 - ble _02074414 - ldr r1, _0207447C ; =_022B7A30 - mov r2, #0x10 - strh r2, [r1, #0x2c] - cmp r0, #0x10 - movgt r0, r2, lsl #0x10 - ldr r2, _0207447C ; =_022B7A30 - movgt r0, r0, asr #0x10 - strh r0, [r2, #0x2e] - ldr r1, _02074480 ; =_022B8330 - mov r0, #0 - strb r0, [r1, #0xd0c] -_02074414: - ldr r2, _0207447C ; =_022B7A30 - mov r0, #0 - strh r0, [r2, #0x32] - strh r0, [r2, #0x34] - ldr r1, _02074484 ; =DRIVER_WORK - strh r0, [r2, #0x36] - strb r0, [r1, #0x738] - strb r0, [r1, #0x739] - ldr ip, _02074480 ; =_022B8330 - strh r0, [r2, #0x30] - str r0, [ip, #0xcfc] - str r0, [ip, #0xd00] - sub r2, r0, #1 - str r2, [ip, #0xd04] - ldrsh lr, [r1, #0x28] - mov r1, r0 - mov r2, r0 - mov r3, r0 - str lr, [ip, #0xd08] - bl sub_0207C8B8 - ldr r0, _02074488 ; =0x0000FFFF - mov r3, #0 - mov r1, r0 - mov r2, r0 - bl sub_0207C8E0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0207447C: .word _022B7A30 -_02074480: .word _022B8330 -_02074484: .word DRIVER_WORK -_02074488: .word 0x0000FFFF - arm_func_end DseVoice_ResetHW - - arm_func_start UpdateChannels -UpdateChannels: ; 0x0207448C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr sb, _02074570 ; =_022B7A30 - mov r7, #0 - ldrh r0, [sb, #0x2e] - mov r6, r7 - ldr r5, _02074574 ; =_022B7A6C - cmp r0, #0 - ble _0207452C - mov r4, #2 -_020744B0: - add r0, r5, #0x3c - bl SoundEnvelope_Tick - ldrsb r1, [r5, #0x5a] - mov r8, r0 - cmp r1, #1 - bne _02074514 - add r0, r5, #0x5c - bl SoundLfoBank_Tick - ldrh r1, [r5, #6] - orr r0, r1, r0 - strh r0, [r5, #6] - ldrb r0, [r5, #0x58] - cmp r0, #8 - bne _020744F8 - strb r4, [r5, #0x58] - ldrh r0, [r5, #6] - orr r0, r0, #2 - strh r0, [r5, #6] -_020744F8: - ldrb r0, [r5, #0x14c] - cmp r0, r8 - ldrneh r0, [r5, #6] - orrne r0, r0, #0x20 - strneh r0, [r5, #6] - cmp r8, #0 - addgt r7, r7, #1 -_02074514: - strb r8, [r5, #0x14c] - ldrh r0, [sb, #0x2e] - add r6, r6, #1 - add r5, r5, #0x15c - cmp r6, r0 - blt _020744B0 -_0207452C: - ldr r0, _02074578 ; =_022B8330 - ldr r1, [r0, #0xd04] - cmp r1, #0 - movlt r1, #0 - strlt r1, [r0, #0xd00] - ldr r0, _02074578 ; =_022B8330 - str r7, [r0, #0xcfc] - ldr r1, [r0, #0xd00] - cmp r1, r7 - strlt r7, [r0, #0xd00] - movlt r1, #0x64 - strlt r1, [r0, #0xd04] - ldr r0, _02074578 ; =_022B8330 - ldr r1, [r0, #0xd04] - sub r1, r1, #1 - str r1, [r0, #0xd04] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02074570: .word _022B7A30 -_02074574: .word _022B7A6C -_02074578: .word _022B8330 - arm_func_end UpdateChannels - - arm_func_start DseVoice_Cleanup -DseVoice_Cleanup: ; 0x0207457C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r6, _02074610 ; =_022B7A6C - bl sub_0207D470 - ldr r4, _02074614 ; =_022B7A30 - mov r0, r0, lsl #0x10 - ldrh r2, [r4, #0x30] - ldrh r1, [r4, #0x2e] - mov r7, #0 - orr r0, r2, r0, lsr #16 - mov r0, r0, lsl #0x10 - mov r8, r0, lsr #0x10 - cmp r1, #0 - ldmleia sp!, {r4, r5, r6, r7, r8, pc} - mov r5, r7 -_020745B4: - ldrsb r0, [r6, #0x5a] - cmp r0, #1 - bne _020745DC - tst r8, #1 - bne _020745F0 - add r0, r6, #0x3c - bl SoundEnvelope_Stop2 - add r0, r6, #0x100 - strh r5, [r0, #0x4c] - b _020745F0 -_020745DC: - and r0, r8, #1 - cmp r0, #1 - bne _020745F0 - mov r0, r6 - bl DseVoice_FlagForDeactivation -_020745F0: - ldrh r1, [r4, #0x2e] - mov r0, r8, lsl #0xf - add r7, r7, #1 - cmp r7, r1 - mov r8, r0, lsr #0x10 - add r6, r6, #0x15c - blt _020745B4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02074610: .word _022B7A6C -_02074614: .word _022B7A30 - arm_func_end DseVoice_Cleanup - - arm_func_start DseVoice_Allocate -DseVoice_Allocate: ; 0x02074618 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r4, _02074774 ; =_022B7A30 - mov r3, r3, lsl #0x10 - ldrh r5, [r4, #0x2e] - add r3, r3, #0xff - add r8, r3, #0x100 - ldrb r4, [r1, #5] - sub r5, r5, #1 - ldrb r3, [r0, #7] - cmp r4, r5 - movgt r4, r5 - ldrb r7, [r1, #4] - mov r6, #0 - cmp r3, #0 - beq _02074660 - cmp r3, #1 - beq _0207466C - b _0207476C -_02074660: - ldr r6, [r0, #0xb4] - cmp r6, #0 - bne _0207476C -_0207466C: - ldrb r3, [r1] - cmp r3, #0 - beq _02074708 - ldr r5, _02074778 ; =_022B7A6C - mov r3, #0x15c - mla r3, r7, r3, r5 - mov ip, r7 - mov lr, r4 - mov r5, r8 - cmp r7, r4 - mov r6, #0 - bgt _020746E4 - ldr r0, [r0] -_020746A0: - ldr sb, [r3] - cmp sb, r0 - ldreqh sb, [r3, #0x18] - cmpeq sb, r2 - bne _020746D4 - ldr sb, [r3, #0x14c] - add r6, r6, #1 - cmp r5, sb - movhi r5, sb - ldrb sb, [r1, #2] - movhi lr, ip - cmp r6, sb - bge _020746E4 -_020746D4: - add ip, ip, #1 - cmp ip, r4 - add r3, r3, #0x15c - ble _020746A0 -_020746E4: - ldrb r0, [r1, #2] - cmp r6, r0 - blt _02074708 - ldr r1, _02074778 ; =_022B7A6C - mov r0, #0x15c - mla r6, lr, r0, r1 - mov r0, r6 - bl DseVoice_Deallocate - b _0207476C -_02074708: - cmp r7, r4 - add r2, r4, #1 - bgt _0207474C - ldr r1, _0207477C ; =DRIVER_WORK - mov r0, #0x15c - mla r1, r7, r0, r1 -_02074720: - ldr r0, [r1, #0x888] - cmp r8, r0 - bls _0207473C - mov r2, r7 - cmp r0, #0 - beq _0207474C - mov r8, r0 -_0207473C: - add r7, r7, #1 - cmp r7, r4 - add r1, r1, #0x15c - ble _02074720 -_0207474C: - cmp r2, r4 - movgt r6, #0 - bgt _0207476C - ldr r1, _02074778 ; =_022B7A6C - mov r0, #0x15c - mla r6, r2, r0, r1 - mov r0, r6 - bl DseVoice_Deallocate -_0207476C: - mov r0, r6 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02074774: .word _022B7A30 -_02074778: .word _022B7A6C -_0207477C: .word DRIVER_WORK - arm_func_end DseVoice_Allocate - - arm_func_start DseVoice_Start -DseVoice_Start: ; 0x02074780 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - ldrh r3, [r4, #6] - mov r1, r2, lsl #0x10 - add r1, r1, #0xff - orr r2, r3, #1 - bic r2, r2, #2 - strh r2, [r4, #6] - ldr r2, [r4, #0x14c] - add r1, r1, #0x100 - orr r1, r2, r1 - mov r5, r0 - str r1, [r4, #0x14c] - add r0, r4, #0x3c - bl UpdateTrackVolumeEnvelopes - ldr r0, [r4, #0x158] - cmp r0, r5 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, [r5, #0xb4] - str r0, [r4, #0x154] - str r4, [r5, #0xb4] - str r5, [r4, #0x158] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseVoice_Start - - arm_func_start DseVoice_ReleaseHeld -DseVoice_ReleaseHeld: ; 0x020747DC - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r7, r0 - ldrb r0, [r7, #4] - tst r0, #3 - ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - ldr r4, [r7, #0xb8] - add r6, r7, #0xb8 - cmp r4, #0 - beq _0207484C - ldr r8, _02074858 ; =DRIVER_WORK - mvn sl, #0 - mov sb, #0 -_0207480C: - ldmib r4, {r0, r5} - cmp r0, #0 - strgt r4, [r6] - addgt r6, r4, #8 - bgt _02074840 - mov r0, r7 - mov r1, r4 - bl DseChannel_ReleaseNoteInternal - ldr r0, [r8, #0x650] - str r0, [r4, #8] - str r4, [r8, #0x650] - str sl, [r4, #4] - strb sb, [r4, #1] -_02074840: - mov r4, r5 - cmp r5, #0 - bne _0207480C -_0207484C: - mov r0, #0 - str r0, [r6] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02074858: .word DRIVER_WORK - arm_func_end DseVoice_ReleaseHeld - - arm_func_start DseVoice_Release -DseVoice_Release: ; 0x0207485C - stmdb sp!, {r4, lr} - mov r4, r1 - ldrh r1, [r4, #4] - orr r1, r1, #2 - strh r1, [r4, #4] - ldrb r0, [r0, #4] - tst r0, #1 - ldmneia sp!, {r4, pc} - ldr r1, [r4, #0x14c] - add r0, r4, #0x3c - and r1, r1, #0xff - str r1, [r4, #0x14c] - bl SoundEnvelope_Release - ldrh r0, [r4, #6] - bic r0, r0, #1 - strh r0, [r4, #6] - ldmia sp!, {r4, pc} - arm_func_end DseVoice_Release - - arm_func_start DseVoice_Deallocate -DseVoice_Deallocate: ; 0x020748A0 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r1, [r4, #0x158] - cmp r1, #0 - beq _02074948 - ldr r2, [r1, #0xb4] - cmp r2, r4 - ldreq r0, [r4, #0x154] - streq r0, [r1, #0xb4] - beq _020748F0 - cmp r2, #0 - beq _020748F0 -_020748D0: - ldr r0, [r2, #0x154] - cmp r0, r4 - ldreq r0, [r4, #0x154] - streq r0, [r2, #0x154] - beq _020748F0 - mov r2, r0 - cmp r0, #0 - bne _020748D0 -_020748F0: - mov r0, #0 - strh r0, [r4, #4] - str r0, [r4, #0x158] - str r0, [r4, #0x154] - add r0, r4, #0x3c - bl SoundEnvelope_Stop - ldr r1, [r4, #0x14c] - mov r0, #0 - and r1, r1, #0xff - str r1, [r4, #0x14c] - str r0, [r4] - strh r0, [r4, #0x18] - ldr r1, _020749A0 ; =_022B7A30 - ldrh r0, [r4, #0xa] - ldrh r3, [r1, #0x32] - mvn r2, r0 - and r2, r3, r2 - strh r2, [r1, #0x32] - ldrh r2, [r1, #0x36] - orr r2, r2, r0 - strh r2, [r1, #0x36] - ldmia sp!, {r4, pc} -_02074948: - mov r0, #0 - strh r0, [r4, #4] - str r0, [r4, #0x158] - str r0, [r4, #0x154] - add r0, r4, #0x3c - bl SoundEnvelope_Stop - ldr r1, [r4, #0x14c] - mov r0, #0 - and r1, r1, #0xff - str r1, [r4, #0x14c] - str r0, [r4] - strh r0, [r4, #0x18] - ldr r1, _020749A0 ; =_022B7A30 - ldrh r0, [r4, #0xa] - ldrh r3, [r1, #0x32] - mvn r2, r0 - and r2, r3, r2 - strh r2, [r1, #0x32] - ldrh r2, [r1, #0x36] - orr r2, r2, r0 - strh r2, [r1, #0x36] - ldmia sp!, {r4, pc} - .align 2, 0 -_020749A0: .word _022B7A30 - arm_func_end DseVoice_Deallocate - - arm_func_start DseVoice_FlagForActivation -DseVoice_FlagForActivation: ; 0x020749A4 - mov r1, #0xff0 - strh r1, [r0, #6] - ldr r2, [r0, #0x14c] - ldr r1, _020749F0 ; =_022B7A30 - orr r2, r2, #0xff - orr r2, r2, #0x100 - str r2, [r0, #0x14c] - ldrh r3, [r0, #0xa] - ldrh r0, [r1, #0x34] - mvn r2, r3 - and r0, r0, r2 - strh r0, [r1, #0x34] - ldrh r0, [r1, #0x36] - and r0, r0, r2 - strh r0, [r1, #0x36] - ldrh r0, [r1, #0x32] - orr r0, r0, r3 - strh r0, [r1, #0x32] - bx lr - .align 2, 0 -_020749F0: .word _022B7A30 - arm_func_end DseVoice_FlagForActivation - - arm_func_start DseVoice_FlagForDeactivation -DseVoice_FlagForDeactivation: ; 0x020749F4 - ldr r2, [r0, #0x14c] - ldr r1, _02074A28 ; =_022B7A30 - bic r2, r2, #0xff00 - str r2, [r0, #0x14c] - ldrh r3, [r0, #0xa] - ldrh r2, [r1, #0x32] - mvn r0, r3 - and r0, r2, r0 - strh r0, [r1, #0x32] - ldrh r0, [r1, #0x34] - orr r0, r0, r3 - strh r0, [r1, #0x34] - bx lr - .align 2, 0 -_02074A28: .word _022B7A30 - arm_func_end DseVoice_FlagForDeactivation - - arm_func_start DseVoice_CountNumActiveInChannel -DseVoice_CountNumActiveInChannel: ; 0x02074A2C - ldr r2, [r0, #0xb4] - mov r0, #0 - cmp r2, #0 - bxeq lr -_02074A3C: - ldrb r1, [r2, #0x14c] - ldr r2, [r2, #0x154] - cmp r1, #0 - addne r0, r0, #1 - cmp r2, #0 - bne _02074A3C - bx lr - arm_func_end DseVoice_CountNumActiveInChannel - - arm_func_start DseVoice_UpdateHardware -DseVoice_UpdateHardware: ; 0x02074A58 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x18 - ldr r4, _02074C64 ; =_022B7A30 - ldr r7, _02074C68 ; =_022B7A6C - ldrh r0, [r4, #0x2e] - mov r8, #0 - cmp r0, #0 - ble _02074BC8 - mov fp, #2 - mov sl, #1 - mov r6, r8 - mov r5, r8 -_02074A88: - ldrh sb, [r7, #6] - cmp sb, #0 - beq _02074BB4 - tst sb, #1 - beq _02074B5C - ldrsb r0, [r7, #0x21] - ldrb r1, [r7, #0x1f] - cmp r0, #0 - movne r3, sl - moveq r3, fp - cmp r1, #4 - addls pc, pc, r1, lsl #2 - b _02074B50 -_02074ABC: ; jump table - b _02074AD0 ; case 0 - b _02074AD0 ; case 1 - b _02074AD0 ; case 2 - b _02074B0C ; case 3 - b _02074B34 ; case 4 -_02074AD0: - ldr r0, [r7, #0x34] - str r0, [sp] - ldr r0, [r7, #0x38] - str r0, [sp, #4] - ldr r0, [r7, #0x140] - str r0, [sp, #8] - str r6, [sp, #0xc] - ldr r0, [r7, #0x13c] - str r0, [sp, #0x10] - ldr r0, [r7, #0x144] - str r0, [sp, #0x14] - ldrh r0, [r7, #8] - ldr r2, [r7, #0x30] - bl sub_0207CA6C - b _02074B50 -_02074B0C: - ldr r0, [r7, #0x13c] - mov r3, #0 - str r0, [sp] - ldr r0, [r7, #0x144] - str r0, [sp, #4] - ldrh r0, [r7, #8] - ldrb r1, [r7, #0x25] - ldr r2, [r7, #0x140] - bl sub_0207CAB8 - b _02074B50 -_02074B34: - ldr r0, [r7, #0x144] - mov r2, #0 - str r0, [sp] - ldrh r0, [r7, #8] - ldr r1, [r7, #0x140] - ldr r3, [r7, #0x13c] - bl sub_0207CAE0 -_02074B50: - mov r0, r7 - bl DseVoice_FlagForActivation - b _02074BB0 -_02074B5C: - tst sb, #2 - beq _02074B70 - mov r0, r7 - bl DseVoice_FlagForDeactivation - mov sb, #0 -_02074B70: - tst sb, #0x10 - beq _02074B84 - ldrh r0, [r7, #0xa] - ldr r1, [r7, #0x13c] - bl sub_0207CA04 -_02074B84: - tst sb, #0x20 - beq _02074B9C - ldrh r0, [r7, #0xa] - ldr r1, [r7, #0x140] - mov r2, #0 - bl sub_0207CA24 -_02074B9C: - tst sb, #0x40 - beq _02074BB0 - ldrh r0, [r7, #0xa] - ldr r1, [r7, #0x144] - bl sub_0207CA4C -_02074BB0: - strh r5, [r7, #6] -_02074BB4: - ldrh r0, [r4, #0x2e] - add r8, r8, #1 - add r7, r7, #0x15c - cmp r8, r0 - blt _02074A88 -_02074BC8: - ldr r1, _02074C64 ; =_022B7A30 - ldr r2, _02074C6C ; =DRIVER_WORK - ldrh r0, [r1, #0x32] - strh r0, [r1, #0x30] - ldrb r1, [r2, #0x73a] - ldrb r2, [r2, #0x738] - orr r3, r0, r1 - orrs r3, r2, r3 - beq _02074C0C - mov r3, #0 - bl sub_0207C8B8 - ldr r1, _02074C6C ; =DRIVER_WORK - mov r2, #0 - strb r2, [r1, #0x738] - ldr r0, _02074C64 ; =_022B7A30 - strb r2, [r1, #0x73a] - strh r2, [r0, #0x32] -_02074C0C: - ldr r1, _02074C64 ; =_022B7A30 - ldr r0, _02074C6C ; =DRIVER_WORK - ldrh r4, [r1, #0x34] - ldrh r3, [r1, #0x36] - ldrb r1, [r0, #0x73b] - ldrb r2, [r0, #0x739] - orr r0, r4, r3 - orr r3, r1, r0 - orrs r3, r2, r3 - addeq sp, sp, #0x18 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r3, #0 - bl sub_0207C8E0 - ldr r1, _02074C6C ; =DRIVER_WORK - mov r2, #0 - strb r2, [r1, #0x739] - ldr r0, _02074C64 ; =_022B7A30 - strb r2, [r1, #0x73b] - strh r2, [r0, #0x36] - strh r2, [r0, #0x34] - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02074C64: .word _022B7A30 -_02074C68: .word _022B7A6C -_02074C6C: .word DRIVER_WORK - arm_func_end DseVoice_UpdateHardware diff --git a/asm/main_02071AC0.s b/asm/main_02071AC0.s new file mode 100644 index 00000000..d902eb5a --- /dev/null +++ b/asm/main_02071AC0.s @@ -0,0 +1,3989 @@ + .include "asm/macros.inc" + .include "main_02071AC0.inc" + + .text + + arm_func_start DseTrackEvent_SetOctave +DseTrackEvent_SetOctave: ; 0x02071AC0 + ldrb r1, [r0], #1 + strb r1, [r2, #4] + bx lr + arm_func_end DseTrackEvent_SetOctave + + arm_func_start DseTrackEvent_OctaveDelta +DseTrackEvent_OctaveDelta: ; 0x02071ACC + ldrb r3, [r2, #4] + ldrsb r1, [r0], #1 + add r1, r3, r1 + strb r1, [r2, #4] + bx lr + arm_func_end DseTrackEvent_OctaveDelta + + arm_func_start DseTrackEvent_SetBpm +DseTrackEvent_SetBpm: ; 0x02071AE0 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + ldr r0, [r5, #0x48] + ldrb r4, [r6] + mov r0, r0, asr #0x10 + mul r1, r0, r4 + movs r1, r1, lsr #8 + ldr r0, _02071B1C ; =0x03938700 + moveq r1, #1 + bl _u32_div_f + str r0, [r5, #0x44] + strb r4, [r5, #0x17] + add r0, r6, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02071B1C: .word 0x03938700 + arm_func_end DseTrackEvent_SetBpm + + arm_func_start DseTrackEvent_SetBpm2 +DseTrackEvent_SetBpm2: ; 0x02071B20 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + ldr r0, [r5, #0x48] + ldrb r4, [r6] + mov r0, r0, asr #0x10 + mul r1, r0, r4 + movs r1, r1, lsr #8 + ldr r0, _02071B5C ; =0x03938700 + moveq r1, #1 + bl _u32_div_f + str r0, [r5, #0x44] + strb r4, [r5, #0x17] + add r0, r6, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02071B5C: .word 0x03938700 + arm_func_end DseTrackEvent_SetBpm2 + + arm_func_start DseTrackEvent_SetBank +DseTrackEvent_SetBank: ; 0x02071B60 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r2, [r4] + ldrb r1, [r4, #1] + mov r0, r3 + add r1, r1, r2, lsl #8 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bl DseChannel_SetBank + add r0, r4, #2 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetBank + + arm_func_start DseTrackEvent_SetBankMsb +DseTrackEvent_SetBankMsb: ; 0x02071B8C + stmdb sp!, {r4, lr} + mov r4, r0 + ldrh r1, [r3, #0xe] + ldrb r2, [r4] + mov r0, r3 + and r1, r1, #0xff + add r1, r1, r2, lsl #8 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bl DseChannel_SetBank + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetBankMsb + + arm_func_start DseTrackEvent_SetBankLsb +DseTrackEvent_SetBankLsb: ; 0x02071BBC + stmdb sp!, {r4, lr} + mov r4, r0 + ldrh r2, [r3, #0xe] + ldrb r1, [r4] + mov r0, r3 + bic r2, r2, #0xff + add r1, r2, r1 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bl DseChannel_SetBank + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetBankLsb + + arm_func_start DseTrackEvent_Dummy1Byte +DseTrackEvent_Dummy1Byte: ; 0x02071BEC + add r0, r0, #1 + bx lr + arm_func_end DseTrackEvent_Dummy1Byte + + arm_func_start DseTrackEvent_SetInstrument +DseTrackEvent_SetInstrument: ; 0x02071BF4 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r3 + ldrb r1, [r6] + mov r0, r4 + bl DseChannel_SetInstrument + movs r2, r0 + bpl _02071C34 + ldrh r1, [r4, #0xe] + ldr r0, [r5, #0x28] + ldr r3, [r5, #0xa0] + ldr ip, [r5, #0x9c] + rsb r2, r2, r1, lsl #16 + mvn r1, #0xcb + blx ip +_02071C34: + add r0, r6, #1 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseTrackEvent_SetInstrument + + arm_func_start DseTrackEvent_SongVolumeFade +DseTrackEvent_SongVolumeFade: ; 0x02071C3C + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + ldrb r2, [r5] + ldrb r0, [r5, #1] + mov r4, r1 + add r0, r2, r0, lsl #8 + mov r0, r0, lsl #0x10 + movs r1, r0, lsr #0x10 + moveq r6, #0 + beq _02071C84 + mov r0, #0x3e8 + mul r0, r1, r0 + ldr r1, _02071CC4 ; =DRIVER_WORK + ldrsh r1, [r1, #0x28] + bl _u32_div_f + mov r0, r0, lsl #0x10 + movs r6, r0, lsr #0x10 + moveq r6, #1 +_02071C84: + ldrb r0, [r5, #2] + cmp r6, #0 + mov r1, r0, lsl #0x10 + str r1, [r4, #0x70] + streq r1, [r4, #0x68] + beq _02071CB8 + ldr r0, [r4, #0x68] + subs r0, r1, r0 + moveq r6, #0 + beq _02071CB8 + mov r1, r6 + bl _s32_div_f + str r0, [r4, #0x6c] +_02071CB8: + strh r6, [r4, #0x74] + add r0, r5, #3 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02071CC4: .word DRIVER_WORK + arm_func_end DseTrackEvent_SongVolumeFade + + arm_func_start DseTrackEvent_RestoreEnvelopeDefaults +DseTrackEvent_RestoreEnvelopeDefaults: ; 0x02071CC8 + stmdb sp!, {r4, lr} + mov r4, r0 + add r0, r3, #0x64 + bl SoundEnvelopeParameters_Reset + mov r0, r4 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_RestoreEnvelopeDefaults + + arm_func_start DseTrackEvent_SetEnvelopeAttackBegin +DseTrackEvent_SetEnvelopeAttackBegin: ; 0x02071CE0 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r1, [r4] + add r0, r3, #0x64 + strb r1, [r3, #0x6c] + bl SoundEnvelopeParameters_CheckValidity + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetEnvelopeAttackBegin + + arm_func_start DseTrackEvent_SetEnvelopeAttackTime +DseTrackEvent_SetEnvelopeAttackTime: ; 0x02071D00 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r1, [r4] + add r0, r3, #0x64 + strb r1, [r3, #0x6d] + bl SoundEnvelopeParameters_CheckValidity + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetEnvelopeAttackTime + + arm_func_start DseTrackEvent_SetEnvelopeHoldTime +DseTrackEvent_SetEnvelopeHoldTime: ; 0x02071D20 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r1, [r4] + add r0, r3, #0x64 + strb r1, [r3, #0x70] + bl SoundEnvelopeParameters_CheckValidity + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetEnvelopeHoldTime + + arm_func_start DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel +DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel: ; 0x02071D40 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r0, [r4] + cmp r0, #0xff + strneb r0, [r3, #0x6e] + ldrb r0, [r4, #1] + cmp r0, #0xff + strneb r0, [r3, #0x6f] + add r0, r3, #0x64 + bl SoundEnvelopeParameters_CheckValidity + add r0, r4, #2 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel + + arm_func_start DseTrackEvent_SetEnvelopeSustainTime +DseTrackEvent_SetEnvelopeSustainTime: ; 0x02071D70 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r1, [r4] + add r0, r3, #0x64 + strb r1, [r3, #0x71] + bl SoundEnvelopeParameters_CheckValidity + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetEnvelopeSustainTime + + arm_func_start DseTrackEvent_SetEnvelopeReleaseTime +DseTrackEvent_SetEnvelopeReleaseTime: ; 0x02071D90 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r1, [r4] + add r0, r3, #0x64 + strb r1, [r3, #0x72] + bl SoundEnvelopeParameters_CheckValidity + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetEnvelopeReleaseTime + + arm_func_start DseTrackEvent_SetNoteDurationMultiplier +DseTrackEvent_SetNoteDurationMultiplier: ; 0x02071DB0 + ldrb r1, [r0], #1 + strb r1, [r2, #5] + bx lr + arm_func_end DseTrackEvent_SetNoteDurationMultiplier + + arm_func_start DseTrackEvent_ForceLfoEnvelopeLevel +DseTrackEvent_ForceLfoEnvelopeLevel: ; 0x02071DBC + stmdb sp!, {r4, lr} + mov r4, r0 + ldrsb r1, [r4] + mov r0, r3 + bl DseChannel_SetLfoConstEnvelopeLevel + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_ForceLfoEnvelopeLevel + + arm_func_start DseTrackEvent_SetHoldNotes +DseTrackEvent_SetHoldNotes: ; 0x02071DD8 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r1, [r4] + ldr r0, [r2, #0x54] + cmp r1, #0x40 + ldrb r1, [r0, #4] + orrhs r1, r1, #1 + strhsb r1, [r0, #4] + bhs _02071E08 + bic r1, r1, #1 + strb r1, [r0, #4] + bl DseVoice_ReleaseHeld +_02071E08: + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetHoldNotes + + arm_func_start DseTrackEvent_SetFlagBit1Unknown +DseTrackEvent_SetFlagBit1Unknown: ; 0x02071E10 + ldrb r1, [r3, #4] + orr r1, r1, #2 + strb r1, [r3, #4] + bx lr + arm_func_end DseTrackEvent_SetFlagBit1Unknown + + arm_func_start DseTrackEvent_SetOptionalVolume +DseTrackEvent_SetOptionalVolume: ; 0x02071E20 + ldrb r1, [r0], #1 + strb r1, [r3, #0x58] + bx lr + arm_func_end DseTrackEvent_SetOptionalVolume + + arm_func_start DseTrackEvent_Dummy2Bytes +DseTrackEvent_Dummy2Bytes: ; 0x02071E2C + add r0, r0, #2 + bx lr + arm_func_end DseTrackEvent_Dummy2Bytes + + arm_func_start DseTrackEvent_SetTuning +DseTrackEvent_SetTuning: ; 0x02071E34 + stmdb sp!, {r4, lr} + ldrsb r1, [r0] + ldr ip, _02071EB0 ; =0x04000208 + mov r2, #0 + mov r1, r1, lsl #0x18 + mov r4, r1, asr #0x10 + strh r4, [r3, #0x54] + ldr lr, [r3, #0xc4] + ldr r1, [r3, #0x1c] + ldrsh lr, [lr, #4] + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + add r1, r4, r1, asr #16 + add r1, lr, r1 + strh r1, [r3, #0x16] + ldrh r4, [ip] + strh r2, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _02071E9C +_02071E84: + ldrh r1, [r2, #6] + orr r1, r1, #0x10 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02071E84 +_02071E9C: + ldr r2, _02071EB0 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r4, pc} + .align 2, 0 +_02071EB0: .word 0x04000208 + arm_func_end DseTrackEvent_SetTuning + + arm_func_start DseTrackEvent_TuningDeltaCoarse +DseTrackEvent_TuningDeltaCoarse: ; 0x02071EB4 + stmdb sp!, {r4, lr} + ldrsb r4, [r0] + ldrsh r1, [r3, #0x54] + ldr ip, _02071F38 ; =0x04000208 + mov r2, #0 + add r1, r1, r4, lsl #8 + mov r1, r1, lsl #0x10 + mov r4, r1, asr #0x10 + strh r4, [r3, #0x54] + ldr lr, [r3, #0xc4] + ldr r1, [r3, #0x1c] + ldrsh lr, [lr, #4] + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + add r1, r4, r1, asr #16 + add r1, lr, r1 + strh r1, [r3, #0x16] + ldrh r4, [ip] + strh r2, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _02071F24 +_02071F0C: + ldrh r1, [r2, #6] + orr r1, r1, #0x10 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02071F0C +_02071F24: + ldr r2, _02071F38 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r4, pc} + .align 2, 0 +_02071F38: .word 0x04000208 + arm_func_end DseTrackEvent_TuningDeltaCoarse + + arm_func_start DseTrackEvent_TuningDeltaFine +DseTrackEvent_TuningDeltaFine: ; 0x02071F3C + stmdb sp!, {r4, lr} + ldrsb r4, [r0] + ldrsh r1, [r3, #0x54] + ldr ip, _02071FC0 ; =0x04000208 + mov r2, #0 + add r1, r1, r4, lsl #2 + mov r1, r1, lsl #0x10 + mov r4, r1, asr #0x10 + strh r4, [r3, #0x54] + ldr lr, [r3, #0xc4] + ldr r1, [r3, #0x1c] + ldrsh lr, [lr, #4] + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + add r1, r4, r1, asr #16 + add r1, lr, r1 + strh r1, [r3, #0x16] + ldrh r4, [ip] + strh r2, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _02071FAC +_02071F94: + ldrh r1, [r2, #6] + orr r1, r1, #0x10 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02071F94 +_02071FAC: + ldr r2, _02071FC0 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r4, pc} + .align 2, 0 +_02071FC0: .word 0x04000208 + arm_func_end DseTrackEvent_TuningDeltaFine + + arm_func_start DseTrackEvent_TuningDeltaFull +DseTrackEvent_TuningDeltaFull: ; 0x02071FC4 + stmdb sp!, {r3, lr} + ldrb ip, [r0] + ldrb r1, [r0, #1] + ldrsh lr, [r3, #0x54] + ldr r2, _02072050 ; =0x04000208 + add r1, ip, r1, lsl #8 + add r1, lr, r1 + mov r1, r1, lsl #0x10 + mov lr, r1, asr #0x10 + strh lr, [r3, #0x54] + ldr ip, [r3, #0xc4] + ldr r1, [r3, #0x1c] + ldrsh ip, [ip, #4] + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + add r1, lr, r1, asr #16 + add r1, ip, r1 + strh r1, [r3, #0x16] + ldrh ip, [r2] + mov r1, #0 + strh r1, [r2] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _0207203C +_02072024: + ldrh r1, [r2, #6] + orr r1, r1, #0x10 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02072024 +_0207203C: + ldr r2, _02072050 ; =0x04000208 + add r0, r0, #2 + ldrh r1, [r2] + strh ip, [r2] + ldmia sp!, {r3, pc} + .align 2, 0 +_02072050: .word 0x04000208 + arm_func_end DseTrackEvent_TuningDeltaFull + + arm_func_start DseTrackEvent_TuningFade +DseTrackEvent_TuningFade: ; 0x02072054 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r3 + ldrb r1, [r6, #4] + ldrb r4, [r7] + ldrb r0, [r7, #1] + tst r1, #2 + ldrb r2, [r7, #2] + add r0, r4, r0, lsl #8 + mov r0, r0, lsl #0x10 + mov r5, r0, lsr #0x10 + ldr r4, [r6, #0xc4] + moveq r1, #0 + streq r1, [r6, #0x1c] + ldr r1, [r6, #0x1c] + mov r0, r2, lsl #0x18 + mov r1, r1, asr #0x10 + add r0, r1, r0, lsr #16 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r1, r0, lsl #0x10 + str r1, [r6, #0x24] + cmp r5, #0 + streq r1, [r6, #0x1c] + beq _020720D4 + ldr r0, [r6, #0x1c] + subs r0, r1, r0 + moveq r5, #0 + beq _020720D4 + mov r1, r5 + bl _s32_div_f + str r0, [r6, #0x20] +_020720D4: + strh r5, [r6, #0x28] + ldr r0, [r6, #0x1c] + ldrsh r1, [r6, #0x54] + mov r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + ldrsh r2, [r4, #4] + add r0, r1, r0, lsr #16 + ldr r1, _02072140 ; =0x04000208 + add r0, r2, r0 + strh r0, [r6, #0x16] + ldrh r3, [r1] + mov r0, #0 + strh r0, [r1] + ldr r1, [r6, #0xb4] + cmp r1, #0 + beq _0207212C +_02072114: + ldrh r0, [r1, #6] + orr r0, r0, #0x10 + strh r0, [r1, #6] + ldr r1, [r1, #0x154] + cmp r1, #0 + bne _02072114 +_0207212C: + ldr r2, _02072140 ; =0x04000208 + add r0, r7, #3 + ldrh r1, [r2] + strh r3, [r2] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02072140: .word 0x04000208 + arm_func_end DseTrackEvent_TuningFade + + arm_func_start DseTrackEvent_SetNoteRandomRegion +DseTrackEvent_SetNoteRandomRegion: ; 0x02072144 + ldrb r1, [r0] + ldrb ip, [r0, #1] + add r0, r0, #2 + mov r2, r1 + cmp r1, ip + movhi r2, ip + movhi ip, r1 + strb r2, [r3, #0xc] + strb ip, [r3, #0xd] + bx lr + arm_func_end DseTrackEvent_SetNoteRandomRegion + + arm_func_start DseTrackEvent_SetTuningJitterAmplitude +DseTrackEvent_SetTuningJitterAmplitude: ; 0x0207216C + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r0, r0, #2 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0xa] + bx lr + arm_func_end DseTrackEvent_SetTuningJitterAmplitude + + arm_func_start DseTrackEvent_SetKeyBend +DseTrackEvent_SetKeyBend: ; 0x02072184 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r2, [r4] + ldrb r1, [r4, #1] + mov r0, r3 + add r1, r1, r2, lsl #8 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + bl DseChannel_SetKeyBend + add r0, r4, #2 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetKeyBend + + arm_func_start DseTrackEvent_SetUnknown2 +DseTrackEvent_SetUnknown2: ; 0x020721B0 + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r0, r0, #2 + add r1, r1, r2, lsl #8 + strh r1, [r3, #0x56] + bx lr + arm_func_end DseTrackEvent_SetUnknown2 + + arm_func_start DseTrackEvent_SetKeyBendRange +DseTrackEvent_SetKeyBendRange: ; 0x020721C8 + ldrb r1, [r0], #1 + strb r1, [r3, #0x59] + bx lr + arm_func_end DseTrackEvent_SetKeyBendRange + + arm_func_start DseTrackEvent_SetupKeyBendLfo +DseTrackEvent_SetupKeyBendLfo: ; 0x020721D4 + stmdb sp!, {r3, r4, r5, lr} + ldrb r5, [r0] + ldrb r4, [r0, #1] + ldrb lr, [r0, #2] + ldrb ip, [r0, #3] + ldrb r2, [r0, #4] + mov r1, #1 + add r4, r5, r4, lsl #8 + strb r1, [r3, #0x75] + strb r1, [r3, #0x76] + mov r1, r4, lsl #0x10 + strb r2, [r3, #0x77] + mov r1, r1, asr #0x10 + str r1, [r3, #0x78] + add r1, lr, ip, lsl #8 + strh r1, [r3, #0x7c] + mov r1, #0 + strh r1, [r3, #0x7e] + strh r1, [r3, #0x80] + strb r1, [r3, #0x82] + add r0, r0, #5 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseTrackEvent_SetupKeyBendLfo + + arm_func_start DseTrackEvent_SetupKeyBendLfoEnvelope +DseTrackEvent_SetupKeyBendLfoEnvelope: ; 0x0207222C + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x7e] + ldrb r2, [r0, #2] + ldrb r1, [r0, #3] + add r0, r0, #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x80] + bx lr + arm_func_end DseTrackEvent_SetupKeyBendLfoEnvelope + + arm_func_start DseTrackEvent_UseKeyBendLfo +DseTrackEvent_UseKeyBendLfo: ; 0x02072254 + ldrb r1, [r0] + add r0, r0, #1 + cmp r1, #2 + moveq r1, #1 + strb r1, [r3, #0x75] + cmp r1, #0 + moveq r1, #0 + movne r1, #1 + strb r1, [r3, #0x76] + bx lr + arm_func_end DseTrackEvent_UseKeyBendLfo + + arm_func_start DseTrackEvent_SetVolume +DseTrackEvent_SetVolume: ; 0x0207227C + stmdb sp!, {r3, r4, r5, lr} + ldrsb r4, [r0] + mov r5, #0 + ldr r2, _02072308 ; =0x82061029 + mov r1, r4, lsl #0x10 + str r1, [r3, #0x34] + str r1, [r3, #0x2c] + strh r5, [r3, #0x38] + ldr ip, [r3, #0xc4] + ldrb r1, [r3, #0x50] + ldrsb lr, [ip, #8] + ldr ip, _0207230C ; =0x04000208 + smulbb r1, r4, r1 + mul r4, lr, r1 + smull r1, lr, r2, r4 + add lr, r4, lr + mov r1, r4, lsr #0x1f + add lr, r1, lr, asr #13 + strh lr, [r3, #0x18] + ldrh r4, [ip] + strh r5, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _020722F4 +_020722DC: + ldrh r1, [r2, #6] + orr r1, r1, #0x20 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _020722DC +_020722F4: + ldr r2, _0207230C ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02072308: .word 0x82061029 +_0207230C: .word 0x04000208 + arm_func_end DseTrackEvent_SetVolume + + arm_func_start DseTrackEvent_VolumeDelta +DseTrackEvent_VolumeDelta: ; 0x02072310 + stmdb sp!, {r3, r4, r5, lr} + ldrsb r2, [r0] + ldr r1, [r3, #0x2c] + add r4, r2, r1, asr #16 + cmp r4, #0x7f + movgt r4, #0x7f + bgt _02072334 + cmp r4, #0 + movlt r4, #0 +_02072334: + mov r1, r4, lsl #0x10 + str r1, [r3, #0x34] + str r1, [r3, #0x2c] + mov r5, #0 + strh r5, [r3, #0x38] + ldrb r1, [r3, #0x50] + ldr ip, [r3, #0xc4] + ldr r2, _020723B8 ; =0x82061029 + mul r1, r4, r1 + ldrsb lr, [ip, #8] + ldr ip, _020723BC ; =0x04000208 + mul r4, lr, r1 + smull r1, lr, r2, r4 + add lr, r4, lr + mov r1, r4, lsr #0x1f + add lr, r1, lr, asr #13 + strh lr, [r3, #0x18] + ldrh r4, [ip] + strh r5, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _020723A4 +_0207238C: + ldrh r1, [r2, #6] + orr r1, r1, #0x20 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _0207238C +_020723A4: + ldr r2, _020723BC ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020723B8: .word 0x82061029 +_020723BC: .word 0x04000208 + arm_func_end DseTrackEvent_VolumeDelta + + arm_func_start DseTrackEvent_VolumeFade +DseTrackEvent_VolumeFade: ; 0x020723C0 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + ldrsb r1, [r5, #2] + ldrb r2, [r5] + ldrb r0, [r5, #1] + mov r4, r3 + mov r1, r1, lsl #0x10 + add r0, r2, r0, lsl #8 + mov r0, r0, lsl #0x10 + str r1, [r4, #0x34] + movs r6, r0, lsr #0x10 + streq r1, [r4, #0x2c] + beq _02072410 + ldr r0, [r4, #0x2c] + subs r0, r1, r0 + moveq r6, #0 + beq _02072410 + mov r1, r6 + bl _s32_div_f + str r0, [r4, #0x30] +_02072410: + strh r6, [r4, #0x38] + add r0, r5, #3 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseTrackEvent_VolumeFade + + arm_func_start DseTrackEvent_SetExpression +DseTrackEvent_SetExpression: ; 0x0207241C + stmdb sp!, {r3, r4, r5, lr} + ldrb r4, [r0] + ldr r2, _020724A0 ; =0x82061029 + ldr lr, _020724A4 ; =0x04000208 + strb r4, [r3, #0x50] + ldr r1, [r3, #0x2c] + ldr ip, [r3, #0xc4] + mov r1, r1, asr #0x10 + mul r4, r1, r4 + ldrsb r1, [ip, #8] + mov ip, #0 + mul r4, r1, r4 + smull r1, r5, r2, r4 + add r5, r4, r5 + mov r1, r4, lsr #0x1f + add r5, r1, r5, asr #13 + strh r5, [r3, #0x18] + ldrh r4, [lr] + strh ip, [lr] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _0207248C +_02072474: + ldrh r1, [r2, #6] + orr r1, r1, #0x20 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02072474 +_0207248C: + ldr r2, _020724A4 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020724A0: .word 0x82061029 +_020724A4: .word 0x04000208 + arm_func_end DseTrackEvent_SetExpression + + arm_func_start DseTrackEvent_SetupVolumeLfo +DseTrackEvent_SetupVolumeLfo: ; 0x020724A8 + stmdb sp!, {r3, r4, r5, lr} + ldrb r5, [r0] + ldrb r1, [r0, #1] + ldrb r4, [r0, #2] + ldrb lr, [r0, #3] + ldrb ip, [r0, #4] + mov r2, #1 + add r1, r5, r1, lsl #8 + mov r1, r1, lsl #0x10 + strb r2, [r3, #0x85] + mov r2, #2 + strb r2, [r3, #0x86] + strb ip, [r3, #0x87] + mov r1, r1, asr #0x10 + str r1, [r3, #0x88] + add r1, r4, lr, lsl #8 + strh r1, [r3, #0x8c] + mov r1, #0 + strh r1, [r3, #0x8e] + strh r1, [r3, #0x90] + strb r1, [r3, #0x92] + add r0, r0, #5 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseTrackEvent_SetupVolumeLfo + + arm_func_start DseTrackEvent_SetupVolumeLfoEnvelope +DseTrackEvent_SetupVolumeLfoEnvelope: ; 0x02072504 + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x8e] + ldrb r2, [r0, #2] + ldrb r1, [r0, #3] + add r0, r0, #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x90] + bx lr + arm_func_end DseTrackEvent_SetupVolumeLfoEnvelope + + arm_func_start DseTrackEvent_UseVolumeLfo +DseTrackEvent_UseVolumeLfo: ; 0x0207252C + ldrb r1, [r0] + add r0, r0, #1 + cmp r1, #2 + moveq r1, #1 + strb r1, [r3, #0x85] + cmp r1, #0 + moveq r1, #0 + movne r1, #2 + strb r1, [r3, #0x86] + bx lr + arm_func_end DseTrackEvent_UseVolumeLfo + + arm_func_start DseTrackEvent_SetPan +DseTrackEvent_SetPan: ; 0x02072554 + stmdb sp!, {r3, lr} + ldrb lr, [r0] + mov ip, #0 + cmp lr, #0x7f + movgt lr, #0x7f + mov r1, lr, lsl #0x10 + str r1, [r3, #0x44] + str r1, [r3, #0x3c] + strh ip, [r3, #0x48] + ldr r2, [r3, #0xc4] + ldr r1, _020725D0 ; =0x04000208 + ldrsb r2, [r2, #7] + sub r2, r2, #0x40 + add r2, lr, r2 + strh r2, [r3, #0x1a] + ldrh lr, [r1] + strh ip, [r1] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _020725BC +_020725A4: + ldrh r1, [r2, #6] + orr r1, r1, #0x40 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _020725A4 +_020725BC: + ldr r2, _020725D0 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh lr, [r2] + ldmia sp!, {r3, pc} + .align 2, 0 +_020725D0: .word 0x04000208 + arm_func_end DseTrackEvent_SetPan + + arm_func_start DseTrackEvent_PanDelta +DseTrackEvent_PanDelta: ; 0x020725D4 + stmdb sp!, {r3, lr} + ldrsb r2, [r0] + ldr r1, [r3, #0x3c] + add lr, r2, r1, asr #16 + cmp lr, #0x7f + movgt lr, #0x7f + bgt _020725F8 + cmp lr, #0 + movlt lr, #0 +_020725F8: + mov r1, lr, lsl #0x10 + str r1, [r3, #0x44] + str r1, [r3, #0x3c] + mov ip, #0 + strh ip, [r3, #0x48] + ldr r2, [r3, #0xc4] + ldr r1, _02072664 ; =0x04000208 + ldrsb r2, [r2, #7] + sub r2, r2, #0x40 + add r2, lr, r2 + strh r2, [r3, #0x1a] + ldrh lr, [r1] + strh ip, [r1] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _02072650 +_02072638: + ldrh r1, [r2, #6] + orr r1, r1, #0x40 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02072638 +_02072650: + ldr r2, _02072664 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh lr, [r2] + ldmia sp!, {r3, pc} + .align 2, 0 +_02072664: .word 0x04000208 + arm_func_end DseTrackEvent_PanDelta + + arm_func_start DseTrackEvent_PanFade +DseTrackEvent_PanFade: ; 0x02072668 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + ldrsb r1, [r5, #2] + ldrb r2, [r5] + ldrb r0, [r5, #1] + mov r4, r3 + mov r1, r1, lsl #0x10 + add r0, r2, r0, lsl #8 + mov r0, r0, lsl #0x10 + str r1, [r4, #0x44] + movs r6, r0, lsr #0x10 + streq r1, [r4, #0x3c] + beq _020726B8 + ldr r0, [r4, #0x3c] + subs r0, r1, r0 + moveq r6, #0 + beq _020726B8 + mov r1, r6 + bl _s32_div_f + str r0, [r4, #0x40] +_020726B8: + strh r6, [r4, #0x48] + add r0, r5, #3 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseTrackEvent_PanFade + + arm_func_start DseTrackEvent_SetupPanLfo +DseTrackEvent_SetupPanLfo: ; 0x020726C4 + stmdb sp!, {r3, r4, r5, lr} + ldrb r5, [r0] + ldrb r1, [r0, #1] + ldrb r4, [r0, #2] + ldrb lr, [r0, #3] + ldrb ip, [r0, #4] + mov r2, #1 + add r1, r5, r1, lsl #8 + mov r1, r1, lsl #0x10 + strb r2, [r3, #0x95] + mov r2, #3 + strb r2, [r3, #0x96] + strb ip, [r3, #0x97] + mov r1, r1, asr #0x10 + str r1, [r3, #0x98] + add r1, r4, lr, lsl #8 + strh r1, [r3, #0x9c] + mov r1, #0 + strh r1, [r3, #0x9e] + strh r1, [r3, #0xa0] + strb r1, [r3, #0xa2] + add r0, r0, #5 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseTrackEvent_SetupPanLfo + + arm_func_start DseTrackEvent_SetupPanLfoEnvelope +DseTrackEvent_SetupPanLfoEnvelope: ; 0x02072720 + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x9e] + ldrb r2, [r0, #2] + ldrb r1, [r0, #3] + add r0, r0, #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0xa0] + bx lr + arm_func_end DseTrackEvent_SetupPanLfoEnvelope + + arm_func_start DseTrackEvent_UsePanLfo +DseTrackEvent_UsePanLfo: ; 0x02072748 + ldrb r1, [r0] + add r0, r0, #1 + cmp r1, #2 + moveq r1, #1 + strb r1, [r3, #0x95] + cmp r1, #0 + moveq r1, #0 + movne r1, #3 + strb r1, [r3, #0x96] + bx lr + arm_func_end DseTrackEvent_UsePanLfo + + arm_func_start DseTrackEvent_SetupLfo +DseTrackEvent_SetupLfo: ; 0x02072770 + stmdb sp!, {r4, lr} + ldrb r2, [r0] + ldrb r1, [r0, #1] + ldrb ip, [r3, #0x61] + add r3, r3, #0x74 + add r1, r2, r1, lsl #8 + mov r1, r1, lsl #0x10 + ldrb r4, [r0, #2] + ldrb lr, [r0, #3] + ldrb r2, [r0, #4] + add r3, r3, ip, lsl #4 + mov r1, r1, asr #0x10 + strb r2, [r3, #3] + str r1, [r3, #4] + add r1, r4, lr, lsl #8 + strh r1, [r3, #8] + mov r1, #0 + strh r1, [r3, #0xa] + strh r1, [r3, #0xc] + strb r1, [r3, #0xe] + add r0, r0, #5 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetupLfo + + arm_func_start DseTrackEvent_SetupLfoEnvelope +DseTrackEvent_SetupLfoEnvelope: ; 0x020727C8 + ldrb ip, [r3, #0x61] + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r3, r3, #0x74 + add r3, r3, ip, lsl #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0xa] + ldrb r2, [r0, #2] + ldrb r1, [r0, #3] + add r0, r0, #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0xc] + bx lr + arm_func_end DseTrackEvent_SetupLfoEnvelope + + arm_func_start DseTrackEvent_SetLfoParameter +DseTrackEvent_SetLfoParameter: ; 0x020727FC + ldrb r1, [r3, #0x61] + ldrb ip, [r0] + add r2, r3, #0x74 + add r1, r2, r1, lsl #4 + ldrb r2, [r0, #1] + cmp ip, #0xa + addls pc, pc, ip, lsl #2 + b _02072930 +_0207281C: ; jump table + b _02072930 ; case 0 + b _02072848 ; case 1 + b _02072850 ; case 2 + b _02072858 ; case 3 + b _02072860 ; case 4 + b _02072868 ; case 5 + b _020728E0 ; case 6 + b _020728EC ; case 7 + b _020728FC ; case 8 + b _02072910 ; case 9 + b _02072924 ; case 10 +_02072848: + strb r2, [r3, #0x61] + b _02072930 +_02072850: + strb r2, [r1, #1] + b _02072930 +_02072858: + strb r2, [r1, #2] + b _02072930 +_02072860: + strb r2, [r1, #3] + b _02072930 +_02072868: + ldrb r3, [r1, #2] + cmp r3, #4 + addls pc, pc, r3, lsl #2 + b _020728CC +_02072878: ; jump table + b _020728CC ; case 0 + b _0207288C ; case 1 + b _0207289C ; case 2 + b _020728AC ; case 3 + b _020728BC ; case 4 +_0207288C: + mov r3, #0xa + mul r3, r2, r3 + mov r2, r3 + b _020728D8 +_0207289C: + mvn r3, #0x13 + mul r3, r2, r3 + mov r2, r3 + b _020728D8 +_020728AC: + mov r3, #0x14 + mul r3, r2, r3 + mov r2, r3 + b _020728D8 +_020728BC: + mov r3, #0xa + mul r3, r2, r3 + mov r2, r3 + b _020728D8 +_020728CC: + mov r3, #0x14 + mul r3, r2, r3 + mov r2, r3 +_020728D8: + str r2, [r1, #4] + b _02072930 +_020728E0: + add r2, r2, r2, lsl #2 + strh r2, [r1, #8] + b _02072930 +_020728EC: + mov r3, #0x14 + mul r3, r2, r3 + strh r3, [r1, #0xa] + b _02072930 +_020728FC: + ldrh r3, [r1, #0xa] + and r3, r3, #0xff00 + orr r2, r3, r2 + strh r2, [r1, #0xa] + b _02072930 +_02072910: + ldrh r3, [r1, #0xa] + and r3, r3, #0xff + orr r2, r3, r2, lsl #8 + strh r2, [r1, #0xa] + b _02072930 +_02072924: + mov r3, #0x14 + mul r3, r2, r3 + strh r3, [r1, #0xc] +_02072930: + add r0, r0, #2 + bx lr + arm_func_end DseTrackEvent_SetLfoParameter + + arm_func_start DseTrackEvent_UseLfo +DseTrackEvent_UseLfo: ; 0x02072938 + stmdb sp!, {r3, lr} + ldrb ip, [r0, #1] + ldrb r2, [r0] + ldrb lr, [r0, #2] + add r1, r3, #0x74 + cmp ip, #2 + strb r2, [r3, #0x61] + add r1, r1, r2, lsl #4 + moveq ip, #1 + strb ip, [r1, #1] + strb lr, [r1, #2] + add r0, r0, #3 + ldmia sp!, {r3, pc} + arm_func_end DseTrackEvent_UseLfo + + arm_func_start DseTrackEvent_Signal +DseTrackEvent_Signal: ; 0x0207296C + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r2, [r4] + mov ip, r1 + mov r1, #8 + strb r2, [ip, #0x16] + ldr r0, [ip, #0x28] + ldr r3, [ip, #0xa0] + ldr ip, [ip, #0x9c] + blx ip + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_Signal + + arm_func_start DseTrackEvent_Dummy2Bytes2 +DseTrackEvent_Dummy2Bytes2: ; 0x0207299C + add r0, r0, #2 + bx lr + arm_func_end DseTrackEvent_Dummy2Bytes2 + + arm_func_start sub_020729A4 +sub_020729A4: ; 0x020729A4 + ldr r0, _020729B4 ; =_022B9584 + mov r1, #0 + str r1, [r0] + bx lr + .align 2, 0 +_020729B4: .word _022B9584 + arm_func_end sub_020729A4 + + arm_func_start sub_020729B8 +sub_020729B8: ; 0x020729B8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr sb, _02072BB4 ; =_022B9584 + ldr r8, [sb] + ldrb r6, [r8, #0x86] + cmp r6, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r5, [r8, #0x85] + mov r1, #0 + cmp r6, #0 + str r1, [sp] + beq _02072B98 + mov fp, #3 + mov r1, #2 + mov r2, r1 + mov r3, fp + mov ip, r1 + mov lr, fp + mov r4, fp +_02072A04: + ldrb sl, [r8, #0x88] + add r7, r8, r5 + add r5, r5, #1 + sub r6, r6, #1 + and r5, r5, #0xff + cmp r5, #0x80 + moveq r5, #0 + ldrb r7, [r7, #4] + and r6, r6, #0xff + cmp sl, #0 + bne _02072B28 + tst r7, #0x80 + bne _02072A4C + add sl, sl, #1 + strb sl, [r8, #0x88] + ldr r8, [sb] + strb r7, [r8, #0x8c] + b _02072B30 +_02072A4C: + and sl, r7, #0xf0 + strb sl, [r8, #0x8a] + and r8, r7, #0xf + ldr r7, [sb] + strb r8, [r7, #0x8b] + ldr r7, [sb] + ldrb r8, [r7, #0x8a] + cmp r8, #0xc0 + bgt _02072AA8 + bge _02072AF8 + cmp r8, #0x90 + bgt _02072A8C + bge _02072AE0 + cmp r8, #0x80 + beq _02072AD8 + b _02072B1C +_02072A8C: + cmp r8, #0xa0 + bgt _02072A9C + beq _02072AE8 + b _02072B1C +_02072A9C: + cmp r8, #0xb0 + beq _02072AF0 + b _02072B1C +_02072AA8: + cmp r8, #0xe0 + bgt _02072AC0 + bge _02072B08 + cmp r8, #0xd0 + beq _02072B00 + b _02072B1C +_02072AC0: + cmp r8, #0xf0 + bgt _02072AD0 + beq _02072B10 + b _02072B1C +_02072AD0: + cmp r8, #0xff + b _02072B1C +_02072AD8: + strb r4, [r7, #0x87] + b _02072B30 +_02072AE0: + strb lr, [r7, #0x87] + b _02072B30 +_02072AE8: + strb ip, [r7, #0x87] + b _02072B30 +_02072AF0: + strb r3, [r7, #0x87] + b _02072B30 +_02072AF8: + strb r2, [r7, #0x87] + b _02072B30 +_02072B00: + strb r1, [r7, #0x87] + b _02072B30 +_02072B08: + strb fp, [r7, #0x87] + b _02072B30 +_02072B10: + mov r8, #3 + strb r8, [r7, #0x87] + b _02072B30 +_02072B1C: + mov r8, #0 + strb r8, [r7, #0x87] + b _02072B30 +_02072B28: + add r8, r8, sl + strb r7, [r8, #0x8b] +_02072B30: + ldr r7, [sb] + ldrb r8, [r7, #0x88] + add r8, r8, #1 + strb r8, [r7, #0x88] + ldr r8, [sb] + ldrb sl, [r8, #0x88] + ldrb r7, [r8, #0x87] + cmp sl, r7 + bne _02072B90 + mov r2, #0 + ldr r1, _02072BB4 ; =_022B9584 + strb r2, [r8, #0x88] + ldr r3, [r1] + mov r1, #1 + str r1, [sp] + ldrb r2, [r3, #0x8a] + ldrb r1, [r3, #0x8b] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #0x8c] + ldrb r1, [r3, #0x8d] + strb r2, [r0, #2] + strb r1, [r0, #3] + b _02072B98 +_02072B90: + cmp r6, #0 + bne _02072A04 +_02072B98: + ldr r1, _02072BB4 ; =_022B9584 + ldr r0, [sp] + ldr r2, [r1] + strb r6, [r2, #0x86] + ldr r1, [r1] + strb r5, [r1, #0x85] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02072BB4: .word _022B9584 + arm_func_end sub_020729B8 + + arm_func_start sub_02072BB8 +sub_02072BB8: ; 0x02072BB8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + ldr r0, _02072D94 ; =_022B9584 + ldr r0, [r0] + ldr r4, [r0] + cmp r4, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r0, sp, #8 + bl sub_020729B8 + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add sb, r4, #0x10 + mov r6, #0 + ldr r4, _02072D98 ; =_020B0D50 + add r7, sp, #0 + mov r5, #1 + mov r8, r6 + mov fp, #0xc8 +_02072C08: + ldrb r1, [sp, #9] + ldrb r0, [sp, #8] + mla sl, r1, fp, sb + cmp r0, #0xc0 + bgt _02072C4C + bge _02072D4C + cmp r0, #0x90 + bgt _02072C38 + bge _02072CC0 + cmp r0, #0x80 + beq _02072C8C + b _02072D7C +_02072C38: + cmp r0, #0xa0 + ble _02072D7C + cmp r0, #0xb0 + beq _02072D2C + b _02072D7C +_02072C4C: + cmp r0, #0xf0 + bgt _02072C6C + bge _02072D7C + cmp r0, #0xd0 + ble _02072D7C + cmp r0, #0xe0 + beq _02072D5C + b _02072D7C +_02072C6C: + cmp r0, #0xf7 + ble _02072D7C + cmp r0, #0xff + bgt _02072D7C + cmp r0, #0xfe + blt _02072D7C + cmpne r0, #0xff + b _02072D7C +_02072C8C: + ldrb r1, [sp, #0xa] + ldrb r0, [sp, #0xb] + str r8, [sp, #4] + strb r1, [sp, #2] + strb r0, [sp, #3] + strb r8, [sp] + ldrb r0, [sl, #4] + tst r0, #1 + bne _02072D7C + mov r0, sl + mov r1, r7 + bl DseChannel_ReleaseNoteInternal + b _02072D7C +_02072CC0: + ldrb r0, [sp, #0xb] + ldrb r1, [sp, #0xa] + str r6, [sp, #4] + strb r0, [sp, #3] + strb r1, [sp, #2] + tst r0, #0xff + beq _02072D0C + mov r0, sl + mov r1, r7 + strb r5, [sp] + bl DseChannel_ReleaseNote + mov r0, sl + mov r1, r7 + bl DseChannel_AllocateNote + movs r1, r0 + beq _02072D7C + mov r0, sl + bl DseVoice_PlayNote + b _02072D7C +_02072D0C: + strb r6, [sp] + ldrb r0, [sl, #4] + tst r0, #1 + bne _02072D7C + mov r0, sl + mov r1, r7 + bl DseChannel_ReleaseNoteInternal + b _02072D7C +_02072D2C: + ldrb r0, [sp, #0xa] + ldr r2, [r4, r0, lsl #2] + cmp r2, #0 + beq _02072D7C + ldrb r1, [sp, #0xb] + mov r0, sl + blx r2 + b _02072D7C +_02072D4C: + ldrb r1, [sp, #0xa] + mov r0, sl + bl DseChannel_SetInstrument + b _02072D7C +_02072D5C: + ldrb r2, [sp, #0xa] + ldrb r1, [sp, #0xb] + mov r0, sl + add r1, r2, r1, lsl #7 + sub r1, r1, #0x2000 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + bl DseChannel_SetKeyBend +_02072D7C: + add r0, sp, #8 + bl sub_020729B8 + cmp r0, #0 + bne _02072C08 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02072D94: .word _022B9584 +_02072D98: .word _020B0D50 + arm_func_end sub_02072BB8 + + arm_func_start sub_02072D9C +sub_02072D9C: ; 0x02072D9C + ldrh r2, [r0, #0xe] + ldr ip, _02072DB8 ; =DseChannel_SetBank + and r2, r2, #0xff + add r1, r2, r1, lsl #8 + strh r1, [r0, #0xe] + ldrh r1, [r0, #0xe] + bx ip + .align 2, 0 +_02072DB8: .word DseChannel_SetBank + arm_func_end sub_02072D9C + + arm_func_start sub_02072DBC +sub_02072DBC: ; 0x02072DBC + ldrh r2, [r0, #0xe] + ldr ip, _02072DD8 ; =DseChannel_SetBank + bic r2, r2, #0xff + add r1, r2, r1 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bx ip + .align 2, 0 +_02072DD8: .word DseChannel_SetBank + arm_func_end sub_02072DBC + + arm_func_start sub_02072DDC +sub_02072DDC: ; 0x02072DDC + mov r1, r1, lsl #0x18 + mov r1, r1, asr #0x18 + ldr ip, _02072DF0 ; =DseChannel_SetLfoConstEnvelopeLevel + strb r1, [r0, #0x51] + bx ip + .align 2, 0 +_02072DF0: .word DseChannel_SetLfoConstEnvelopeLevel + arm_func_end sub_02072DDC + + arm_func_start sub_02072DF4 +sub_02072DF4: ; 0x02072DF4 + mov r2, #0xa + mul r2, r1, r2 + strh r2, [r0, #0x56] + bx lr + arm_func_end sub_02072DF4 + + arm_func_start sub_02072E04 +sub_02072E04: ; 0x02072E04 + stmdb sp!, {r4, lr} + mov r2, r1, lsl #0x10 + str r2, [r0, #0x34] + str r2, [r0, #0x2c] + mov r4, #0 + strh r4, [r0, #0x38] + ldrb r3, [r0, #0x50] + ldr lr, [r0, #0xc4] + ldr r2, _02072E88 ; =0x82061029 + mul ip, r1, r3 + ldrsb r1, [lr, #8] + ldr r3, _02072E8C ; =0x04000208 + mul ip, r1, ip + smull r1, lr, r2, ip + add lr, ip, lr + mov r1, ip, lsr #0x1f + add lr, r1, lr, asr #13 + strh lr, [r0, #0x18] + ldrh r2, [r3] + strh r4, [r3] + ldr r1, [r0, #0xb4] + cmp r1, #0 + beq _02072E78 +_02072E60: + ldrh r0, [r1, #6] + orr r0, r0, #0x20 + strh r0, [r1, #6] + ldr r1, [r1, #0x154] + cmp r1, #0 + bne _02072E60 +_02072E78: + ldr r1, _02072E8C ; =0x04000208 + ldrh r0, [r1] + strh r2, [r1] + ldmia sp!, {r4, pc} + .align 2, 0 +_02072E88: .word 0x82061029 +_02072E8C: .word 0x04000208 + arm_func_end sub_02072E04 + + arm_func_start sub_02072E90 +sub_02072E90: ; 0x02072E90 + mov r1, r1, lsl #0x10 + str r1, [r0, #0x44] + str r1, [r0, #0x3c] + mov r2, #0 + ldr r1, _02072EE4 ; =0x04000208 + strh r2, [r0, #0x48] + ldrh r3, [r1] + strh r2, [r1] + ldr r1, [r0, #0xb4] + cmp r1, #0 + beq _02072ED4 +_02072EBC: + ldrh r0, [r1, #6] + orr r0, r0, #0x40 + strh r0, [r1, #6] + ldr r1, [r1, #0x154] + cmp r1, #0 + bne _02072EBC +_02072ED4: + ldr r1, _02072EE4 ; =0x04000208 + ldrh r0, [r1] + strh r3, [r1] + bx lr + .align 2, 0 +_02072EE4: .word 0x04000208 + arm_func_end sub_02072E90 + + arm_func_start sub_02072EE8 +sub_02072EE8: ; 0x02072EE8 + ldr r2, _02072F30 ; =0x04000208 + strb r1, [r0, #0x50] + ldrh r3, [r2] + mov r1, #0 + strh r1, [r2] + ldr r1, [r0, #0xb4] + cmp r1, #0 + beq _02072F20 +_02072F08: + ldrh r0, [r1, #6] + orr r0, r0, #0x20 + strh r0, [r1, #6] + ldr r1, [r1, #0x154] + cmp r1, #0 + bne _02072F08 +_02072F20: + ldr r1, _02072F30 ; =0x04000208 + ldrh r0, [r1] + strh r3, [r1] + bx lr + .align 2, 0 +_02072F30: .word 0x04000208 + arm_func_end sub_02072EE8 + + arm_func_start sub_02072F34 +sub_02072F34: ; 0x02072F34 + strb r1, [r0, #0x58] + bx lr + arm_func_end sub_02072F34 + + arm_func_start sub_02072F3C +sub_02072F3C: ; 0x02072F3C + stmdb sp!, {r3, lr} + cmp r1, #0x40 + ldrb r1, [r0, #4] + orrhs r1, r1, #1 + strhsb r1, [r0, #4] + ldmhsia sp!, {r3, pc} + bic r1, r1, #1 + strb r1, [r0, #4] + bl DseVoice_ReleaseHeld + ldmia sp!, {r3, pc} + arm_func_end sub_02072F3C + + arm_func_start sub_02072F64 +sub_02072F64: ; 0x02072F64 + bx lr + arm_func_end sub_02072F64 + + arm_func_start sub_02072F68 +sub_02072F68: ; 0x02072F68 + bx lr + arm_func_end sub_02072F68 + + arm_func_start sub_02072F6C +sub_02072F6C: ; 0x02072F6C + bx lr + arm_func_end sub_02072F6C + + arm_func_start sub_02072F70 +sub_02072F70: ; 0x02072F70 + bx lr + arm_func_end sub_02072F70 + + arm_func_start sub_02072F74 +sub_02072F74: ; 0x02072F74 + strb r1, [r0, #0x5c] + mov r1, #1 + strb r1, [r0, #0x60] + bx lr + arm_func_end sub_02072F74 + + arm_func_start sub_02072F84 +sub_02072F84: ; 0x02072F84 + strb r1, [r0, #0x5a] + mov r1, #0 + strb r1, [r0, #0x60] + bx lr + arm_func_end sub_02072F84 + + arm_func_start sub_02072F94 +sub_02072F94: ; 0x02072F94 + strb r1, [r0, #0x5b] + mov r1, #0 + strb r1, [r0, #0x60] + bx lr + arm_func_end sub_02072F94 + + arm_func_start sub_02072FA4 +sub_02072FA4: ; 0x02072FA4 + bx lr + arm_func_end sub_02072FA4 + + arm_func_start sub_02072FA8 +sub_02072FA8: ; 0x02072FA8 + bx lr + arm_func_end sub_02072FA8 + + arm_func_start sub_02072FAC +sub_02072FAC: ; 0x02072FAC + stmdb sp!, {r3, lr} + ldr r0, _02072FD4 ; =_022B9584 + ldr r0, [r0] + ldr r0, [r0] + bl DseSynth_StopChannels + ldr r0, _02072FD4 ; =_022B9584 + ldr r0, [r0] + ldr r0, [r0] + bl DseSynth_ClearHeldNotes + ldmia sp!, {r3, pc} + .align 2, 0 +_02072FD4: .word _022B9584 + arm_func_end sub_02072FAC + + arm_func_start sub_02072FD8 +sub_02072FD8: ; 0x02072FD8 + ldr r0, _02072FF4 ; =_022B9584 + mov r1, #0 + ldr r0, [r0] + ldr ip, _02072FF8 ; =DseSynth_SetBankAndSequence + mov r2, r1 + ldr r0, [r0] + bx ip + .align 2, 0 +_02072FF4: .word _022B9584 +_02072FF8: .word DseSynth_SetBankAndSequence + arm_func_end sub_02072FD8 + + arm_func_start sub_02072FFC +sub_02072FFC: ; 0x02072FFC + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + bl DseChannel_DeallocateVoices + ldr r1, _02073074 ; =0x04000208 + mov r0, #0 + ldrh r5, [r1] + strh r0, [r1] + ldr lr, [r4, #0xb8] + cmp lr, #0 + ldreqh r0, [r1] + streqh r5, [r1] + ldmeqia sp!, {r3, r4, r5, pc} + mov ip, lr + mvn r1, #0 + mov r3, r0 +_02073038: + str r1, [lr, #4] + strb r3, [ip, #1] + ldr r0, [ip, #8] + cmp r0, #0 + movne ip, r0 + bne _02073038 + ldr r0, _02073078 ; =DRIVER_WORK + ldr r1, _02073074 ; =0x04000208 + ldr r2, [r0, #0x650] + str r2, [ip, #8] + str lr, [r0, #0x650] + str r3, [r4, #0xb8] + ldrh r0, [r1] + strh r5, [r1] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02073074: .word 0x04000208 +_02073078: .word DRIVER_WORK + arm_func_end sub_02072FFC + + arm_func_start sub_0207307C +sub_0207307C: ; 0x0207307C + mov r1, #0 + strb r1, [r0, #7] + bx lr + arm_func_end sub_0207307C + + arm_func_start sub_02073088 +sub_02073088: ; 0x02073088 + mov r1, #1 + strb r1, [r0, #7] + bx lr + arm_func_end sub_02073088 + + arm_func_start sub_02073094 +sub_02073094: ; 0x02073094 + ldr ip, _020730A4 ; =SoundEnvelopeParameters_CheckValidity + strb r1, [r0, #0x72] + add r0, r0, #0x64 + bx ip + .align 2, 0 +_020730A4: .word SoundEnvelopeParameters_CheckValidity + arm_func_end sub_02073094 + + arm_func_start sub_020730A8 +sub_020730A8: ; 0x020730A8 + ldr ip, _020730B8 ; =SoundEnvelopeParameters_CheckValidity + strb r1, [r0, #0x6d] + add r0, r0, #0x64 + bx ip + .align 2, 0 +_020730B8: .word SoundEnvelopeParameters_CheckValidity + arm_func_end sub_020730A8 + + arm_func_start sub_020730BC +sub_020730BC: ; 0x020730BC + ldr ip, _020730CC ; =SoundEnvelopeParameters_CheckValidity + strb r1, [r0, #0x6e] + add r0, r0, #0x64 + bx ip + .align 2, 0 +_020730CC: .word SoundEnvelopeParameters_CheckValidity + arm_func_end sub_020730BC + + arm_func_start sub_020730D0 +sub_020730D0: ; 0x020730D0 + ldr ip, _020730E0 ; =SoundEnvelopeParameters_CheckValidity + strb r1, [r0, #0x71] + add r0, r0, #0x64 + bx ip + .align 2, 0 +_020730E0: .word SoundEnvelopeParameters_CheckValidity + arm_func_end sub_020730D0 + + arm_func_start sub_020730E4 +sub_020730E4: ; 0x020730E4 + ldrb r2, [r0, #0x61] + add r1, r1, r1, lsl #2 + add r0, r0, r2, lsl #4 + strh r1, [r0, #0x7c] + bx lr + arm_func_end sub_020730E4 + + arm_func_start sub_020730F8 +sub_020730F8: ; 0x020730F8 + and r3, r1, #2 + add r2, r0, #0x74 + strb r3, [r0, #0x61] + add r2, r2, r3, lsl #4 + mov r0, r1, asr #2 + strb r0, [r2, #1] + add r0, r3, #1 + strb r0, [r2, #2] + bx lr + arm_func_end sub_020730F8 + + arm_func_start sub_0207311C +sub_0207311C: ; 0x0207311C + ldrb r2, [r0, #0x61] + add r0, r0, r2, lsl #4 + strb r1, [r0, #0x77] + bx lr + arm_func_end sub_0207311C + + arm_func_start sub_0207312C +sub_0207312C: ; 0x0207312C + ldrb r2, [r0, #0x61] + add r0, r0, #0x74 + add r0, r0, r2, lsl #4 + ldrb r2, [r0, #2] + cmp r2, #4 + addls pc, pc, r2, lsl #2 + b _020731AC +_02073148: ; jump table + b _020731AC ; case 0 + b _0207315C ; case 1 + b _02073170 ; case 2 + b _02073184 ; case 3 + b _02073198 ; case 4 +_0207315C: + mov r2, #0xa + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 + b _020731BC +_02073170: + mvn r2, #0x13 + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 + b _020731BC +_02073184: + mov r2, #0x14 + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 + b _020731BC +_02073198: + mov r2, #0xa + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 + b _020731BC +_020731AC: + mov r2, #0x14 + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 +_020731BC: + str r1, [r0, #4] + bx lr + arm_func_end sub_0207312C + + arm_func_start sub_020731C4 +sub_020731C4: ; 0x020731C4 + mov r2, #0x14 + mul r2, r1, r2 + ldrb r1, [r0, #0x61] + add r0, r0, r1, lsl #4 + strh r2, [r0, #0x7e] + bx lr + arm_func_end sub_020731C4 + + arm_func_start sub_020731DC +sub_020731DC: ; 0x020731DC + mov r2, #0x14 + mul r2, r1, r2 + ldrb r1, [r0, #0x61] + add r0, r0, r1, lsl #4 + strh r2, [r0, #0x80] + bx lr + arm_func_end sub_020731DC + + arm_func_start sub_020731F4 +sub_020731F4: ; 0x020731F4 + strb r1, [r0, #0x59] + bx lr + arm_func_end sub_020731F4 + + arm_func_start sub_020731FC +sub_020731FC: ; 0x020731FC + bx lr + arm_func_end sub_020731FC + + arm_func_start sub_02073200 +sub_02073200: ; 0x02073200 + bx lr + arm_func_end sub_02073200 + + arm_func_start sub_02073204 +sub_02073204: ; 0x02073204 + bx lr + arm_func_end sub_02073204 + + arm_func_start DseSynth_Reset +DseSynth_Reset: ; 0x02073208 + stmdb sp!, {r4, lr} + ldr r1, _02073274 ; =DRIVER_WORK + mov r2, #1 + ldrsb r3, [r1, #0x41] + mov r4, #0 + mov r1, #0x7f + strb r3, [r0, #2] + strb r2, [r0, #3] + strh r4, [r0, #4] + strb r1, [r0, #6] + mov r1, #0x40 + strb r1, [r0, #7] + ldrb ip, [r0, #2] + ldrsb r1, [r0, #6] + ldr r2, _02073278 ; =0x81020409 + ldr r3, _0207327C ; =_022B7A30 + smulbb ip, ip, r1 + smull r1, lr, r2, ip + add lr, ip, lr + mov r1, ip, lsr #0x1f + add lr, r1, lr, asr #6 + strb lr, [r0, #8] + strb r4, [r0, #9] + strb r4, [r0, #0xa] + ldrh r1, [r3, #0x2e] + strb r1, [r0, #0xb] + ldmia sp!, {r4, pc} + .align 2, 0 +_02073274: .word DRIVER_WORK +_02073278: .word 0x81020409 +_0207327C: .word _022B7A30 + arm_func_end DseSynth_Reset + + arm_func_start DseSynth_AllocateNew +DseSynth_AllocateNew: ; 0x02073280 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r0, #0xc8 + mul r0, r5, r0 + mov r2, r1 + add r0, r0, #0x10 + mov r1, #0x10 + bl DseMem_Allocate + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r1, #0 + strb r1, [r4] + strb r5, [r4, #1] + str r1, [r4, #0xc] + bl DseSynth_Reset + cmp r5, #0 + add r1, r4, #0x10 + mov r2, #0 + ble _02073300 + mov r0, r2 +_020732D4: + str r0, [r1] + strb r2, [r1, #5] + str r0, [r1, #0xb4] + str r0, [r1, #0xb8] + str r0, [r1, #0xbc] + str r0, [r1, #0xc0] + add r2, r2, #1 + str r4, [r1, #0xc4] + cmp r2, r5 + add r1, r1, #0xc8 + blt _020732D4 +_02073300: + ldr r1, _02073348 ; =0x04000208 + mov r0, #0 + ldrh r3, [r1] + ldr r2, _0207334C ; =_022B7988 + strh r0, [r1] + ldr r0, [r2] + cmp r0, #0 + beq _02073330 +_02073320: + add r2, r0, #0xc + ldr r0, [r0, #0xc] + cmp r0, #0 + bne _02073320 +_02073330: + ldr r1, _02073348 ; =0x04000208 + str r4, [r2] + ldrh r0, [r1] + mov r0, r4 + strh r3, [r1] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02073348: .word 0x04000208 +_0207334C: .word _022B7988 + arm_func_end DseSynth_AllocateNew + + arm_func_start DseSynth_Unload +DseSynth_Unload: ; 0x02073350 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl DseSynth_StopChannels + ldr r2, _020733B4 ; =0x04000208 + mov r0, r5 + ldrh r4, [r2] + mov r1, #0 + strh r1, [r2] + bl DseSynth_ClearHeldNotes + ldr r1, _020733B8 ; =_022B7988 + b _02073380 +_0207337C: + add r1, r0, #0xc +_02073380: + ldr r0, [r1] + cmp r0, #0 + cmpne r0, r5 + bne _0207337C + cmp r0, r5 + ldreq r0, [r5, #0xc] + ldr r2, _020733B4 ; =0x04000208 + streq r0, [r1] + ldrh r1, [r2] + mov r0, r5 + strh r4, [r2] + bl DseMem_Free + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020733B4: .word 0x04000208 +_020733B8: .word _022B7988 + arm_func_end DseSynth_Unload + + arm_func_start DseSynth_ClearHeldNotes +DseSynth_ClearHeldNotes: ; 0x020733BC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldrb r3, [r0, #1] + add r1, r0, #0x10 + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + ldr r7, _02073450 ; =0x04000208 + ldr ip, _02073454 ; =DRIVER_WORK + mvn r5, #0 + mov r4, r2 + mov r6, r2 +_020733E8: + ldrh r3, [r7] + strh r6, [r7] + ldr sb, [r1, #0xb8] + cmp sb, #0 + ldreqh lr, [r7] + streqh r3, [r7] + beq _02073438 + mov r8, sb +_02073408: + str r5, [sb, #4] + strb r4, [r8, #1] + ldr lr, [r8, #8] + cmp lr, #0 + movne r8, lr + bne _02073408 + ldr lr, [ip, #0x650] + str lr, [r8, #8] + str sb, [ip, #0x650] + str r4, [r1, #0xb8] + ldrh lr, [r7] + strh r3, [r7] +_02073438: + ldrb r3, [r0, #1] + add r2, r2, #1 + add r1, r1, #0xc8 + cmp r2, r3 + blt _020733E8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02073450: .word 0x04000208 +_02073454: .word DRIVER_WORK + arm_func_end DseSynth_ClearHeldNotes + + arm_func_start DseSynth_ResetAndSetBankAndSequence +DseSynth_ResetAndSetBankAndSequence: ; 0x02073458 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl DseSynth_Reset + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl DseSynth_SetBankAndSequence + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseSynth_ResetAndSetBankAndSequence + + arm_func_start DseSynth_StopChannels +DseSynth_StopChannels: ; 0x02073480 + stmdb sp!, {r3, r4, r5, lr} + ldrb r5, [r0, #1] + add r4, r0, #0x10 + cmp r5, #0 + ldmeqia sp!, {r3, r4, r5, pc} +_02073494: + mov r0, r4 + bl DseChannel_DeallocateVoices + subs r5, r5, #1 + add r4, r4, #0xc8 + bne _02073494 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseSynth_StopChannels + + arm_func_start DseSynth_ResetAllVoiceTimersAndVolumes +DseSynth_ResetAllVoiceTimersAndVolumes: ; 0x020734AC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r3, _02073500 ; =0x04000208 + mov r2, #0 + ldrh r6, [r3] + mov r7, r1 + add r4, r0, #0x10 + strh r2, [r3] + strb r7, [r0, #9] + ldrb r5, [r0, #1] + cmp r5, #0 + beq _020734F0 +_020734D8: + mov r0, r4 + mov r1, r7 + bl DseChannel_ResetTimerAndVolumeForVoices + subs r5, r5, #1 + add r4, r4, #0xc8 + bne _020734D8 +_020734F0: + ldr r1, _02073500 ; =0x04000208 + ldrh r0, [r1] + strh r6, [r1] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02073500: .word 0x04000208 + arm_func_end DseSynth_ResetAllVoiceTimersAndVolumes + + arm_func_start DseSynth_RestoreHeldNotes +DseSynth_RestoreHeldNotes: ; 0x02073504 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r2, _02073568 ; =0x04000208 + ldrb r6, [r0, #1] + ldrh r4, [r2] + mov r1, #0 + cmp r6, #0 + strh r1, [r2] + add r5, r0, #0x10 + beq _02073558 +_02073528: + ldr r7, [r5, #0xb8] + cmp r7, #0 + beq _0207354C +_02073534: + mov r0, r5 + mov r1, r7 + bl DseVoice_PlayNote + ldr r7, [r7, #8] + cmp r7, #0 + bne _02073534 +_0207354C: + subs r6, r6, #1 + add r5, r5, #0xc8 + bne _02073528 +_02073558: + ldr r1, _02073568 ; =0x04000208 + ldrh r0, [r1] + strh r4, [r1] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02073568: .word 0x04000208 + arm_func_end DseSynth_RestoreHeldNotes + + arm_func_start DseSynth_SetGlobalVolumeIndex +DseSynth_SetGlobalVolumeIndex: ; 0x0207356C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r3, _02073644 ; =_022B7370 + ldr r4, _02073648 ; =0x81020409 + ldrsb r5, [r3, r1] + add r3, r0, #0x10 + mov ip, #0 + strb r5, [r0, #2] + strb r1, [r0, #3] + ldrb r5, [r0, #2] + ldrsb r1, [r0, #6] + smulbb r5, r5, r1 + smull r1, r6, r4, r5 + add r6, r5, r6 + mov r1, r5, lsr #0x1f + add r6, r1, r6, asr #6 + strb r6, [r0, #8] + ldrb r1, [r0, #1] + cmp r1, #0 + ldmleia sp!, {r4, r5, r6, r7, r8, pc} + ldr r6, _0207364C ; =0x04000208 + mov r5, ip +_020735C0: + ldr r4, [r3, #0x2c] + ldrb r1, [r3, #0x50] + mov r4, r4, asr #0x10 + ldrsb lr, [r0, #8] + mul r1, r4, r1 + mul r7, lr, r1 + ldr r4, _02073650 ; =0x82061029 + mov r1, r7, lsr #0x1f + smull lr, r8, r4, r7 + add r8, r7, r8 + add r8, r1, r8, asr #13 + strh r8, [r3, #0x18] + cmp r2, #1 + bne _0207362C + ldrh r7, [r6] + strh r5, [r6] + ldr r4, [r3, #0xb4] + cmp r4, #0 + beq _02073624 +_0207360C: + ldrh r1, [r4, #6] + orr r1, r1, #0x20 + strh r1, [r4, #6] + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _0207360C +_02073624: + ldrh r1, [r6] + strh r7, [r6] +_0207362C: + ldrb r1, [r0, #1] + add ip, ip, #1 + add r3, r3, #0xc8 + cmp ip, r1 + blt _020735C0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02073644: .word _022B7370 +_02073648: .word 0x81020409 +_0207364C: .word 0x04000208 +_02073650: .word 0x82061029 + arm_func_end DseSynth_SetGlobalVolumeIndex + + arm_func_start DseSynth_SetBend +DseSynth_SetBend: ; 0x02073654 + stmdb sp!, {r3, r4, r5, lr} + strh r1, [r0, #4] + ldrb r3, [r0, #1] + add r1, r0, #0x10 + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r3, r4, r5, pc} + ldr lr, _020736E4 ; =0x04000208 + mov ip, r2 +_02073678: + ldr r3, [r1, #0x1c] + ldrsh r4, [r1, #0x54] + mov r3, r3, asr #0x10 + mov r3, r3, lsl #0x10 + ldrsh r5, [r0, #4] + add r3, r4, r3, asr #16 + add r3, r5, r3 + strh r3, [r1, #0x16] + ldrh r5, [lr] + strh ip, [lr] + ldr r4, [r1, #0xb4] + cmp r4, #0 + beq _020736C4 +_020736AC: + ldrh r3, [r4, #6] + orr r3, r3, #0x10 + strh r3, [r4, #6] + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _020736AC +_020736C4: + ldrh r3, [lr] + add r2, r2, #1 + add r1, r1, #0xc8 + strh r5, [lr] + ldrb r3, [r0, #1] + cmp r2, r3 + blt _02073678 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020736E4: .word 0x04000208 + arm_func_end DseSynth_SetBend + + arm_func_start DseSynth_SetVolume +DseSynth_SetVolume: ; 0x020736E8 + stmdb sp!, {r4, r5, r6, lr} + strb r1, [r0, #6] + ldrb r4, [r0, #2] + ldrsb r2, [r0, #6] + ldr r3, _020737AC ; =0x81020409 + add r1, r0, #0x10 + smulbb r4, r4, r2 + smull r2, r5, r3, r4 + add r5, r4, r5 + mov r2, r4, lsr #0x1f + add r5, r2, r5, asr #6 + strb r5, [r0, #8] + ldrb r3, [r0, #1] + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r4, r5, r6, pc} + ldr r4, _020737B0 ; =0x04000208 + ldr ip, _020737B4 ; =0x82061029 + mov lr, r2 +_02073734: + ldr r5, [r1, #0x2c] + ldrb r3, [r1, #0x50] + mov r5, r5, asr #0x10 + ldrsb r6, [r0, #8] + mul r3, r5, r3 + mul r5, r6, r3 + smull r3, r6, ip, r5 + add r6, r5, r6 + mov r3, r5, lsr #0x1f + add r6, r3, r6, asr #13 + strh r6, [r1, #0x18] + ldrh r6, [r4] + strh lr, [r4] + ldr r5, [r1, #0xb4] + cmp r5, #0 + beq _0207378C +_02073774: + ldrh r3, [r5, #6] + orr r3, r3, #0x20 + strh r3, [r5, #6] + ldr r5, [r5, #0x154] + cmp r5, #0 + bne _02073774 +_0207378C: + ldrh r3, [r4] + add r2, r2, #1 + add r1, r1, #0xc8 + strh r6, [r4] + ldrb r3, [r0, #1] + cmp r2, r3 + blt _02073734 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_020737AC: .word 0x81020409 +_020737B0: .word 0x04000208 +_020737B4: .word 0x82061029 + arm_func_end DseSynth_SetVolume + + arm_func_start DseSynth_SetPan +DseSynth_SetPan: ; 0x020737B8 + stmdb sp!, {r3, r4, r5, lr} + strb r1, [r0, #7] + ldrb r3, [r0, #1] + add r1, r0, #0x10 + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r3, r4, r5, pc} + ldr lr, _02073848 ; =0x04000208 + mov ip, r2 +_020737DC: + ldr r3, [r1, #0xc4] + ldr r4, [r1, #0x3c] + ldrsb r3, [r3, #7] + mov r4, r4, asr #0x10 + and r4, r4, #0xff + sub r3, r3, #0x40 + add r3, r4, r3 + strh r3, [r1, #0x1a] + ldrh r5, [lr] + strh ip, [lr] + ldr r4, [r1, #0xb4] + cmp r4, #0 + beq _02073828 +_02073810: + ldrh r3, [r4, #6] + orr r3, r3, #0x40 + strh r3, [r4, #6] + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _02073810 +_02073828: + ldrh r3, [lr] + add r2, r2, #1 + add r1, r1, #0xc8 + strh r5, [lr] + ldrb r3, [r0, #1] + cmp r2, r3 + blt _020737DC + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02073848: .word 0x04000208 + arm_func_end DseSynth_SetPan + + arm_func_start DseSynth_SetBankAndSequence +DseSynth_SetBankAndSequence: ; 0x0207384C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr r3, _020738D8 ; =DRIVER_WORK + mov sl, r0 + ldrsb r6, [r3, #0x3d] + mov r7, #0 + mov sb, r1 + strb r7, [r3, #0x3d] + ldrb r0, [sl, #1] + mov r8, r2 + add r5, sl, #0x10 + cmp r0, #0 + ble _020738CC + mov r0, sb, lsl #0x10 + mov r4, r0, lsr #0x10 +_02073884: + mov r0, r5 + bl DseChannel_DeallocateVoices + mov r0, r5 + mov r1, r8 + bl DseChannel_Init + cmp sb, #0 + blt _020738B8 + mov r0, r5 + mov r1, r4 + bl DseChannel_SetBank + mov r0, r5 + mov r1, r4 + bl DseChannel_SetInstrument +_020738B8: + ldrb r0, [sl, #1] + add r7, r7, #1 + add r5, r5, #0xc8 + cmp r7, r0 + blt _02073884 +_020738CC: + ldr r0, _020738D8 ; =DRIVER_WORK + strb r6, [r0, #0x3d] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_020738D8: .word DRIVER_WORK + arm_func_end DseSynth_SetBankAndSequence + + arm_func_start DseChannel_Init +DseChannel_Init: ; 0x020738DC + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + str r1, [r4] + mov r0, #0 + strb r0, [r4, #4] + strb r0, [r4, #6] + mov r1, #1 + strb r1, [r4, #7] + ldr r1, _02073A80 ; =_022B7A30 + strb r0, [r4, #8] + ldrh r3, [r1, #0x2e] + ldr r1, _02073A84 ; =DRIVER_WORK + mov r2, #0x7f + strb r3, [r4, #9] + strh r0, [r4, #0xa] + strb r0, [r4, #0xc] + strb r0, [r4, #0xd] + add r1, r1, #0x600 + ldrsb ip, [r1, #0x74] + ldrsb r3, [r1, #0x94] + add r3, r3, ip, lsl #8 + strh r3, [r4, #0xe] + strh r0, [r4, #0x10] + strh r0, [r4, #0x14] + str r0, [r4, #0x1c] + strh r0, [r4, #0x28] + ldrsb r3, [r1, #0x7b] + mov r3, r3, lsl #0x10 + str r3, [r4, #0x2c] + strh r0, [r4, #0x38] + ldrsb r3, [r1, #0x7e] + mov r3, r3, lsl #0x10 + str r3, [r4, #0x3c] + strh r0, [r4, #0x48] + strh r0, [r4, #0x54] + ldrsb r3, [r1, #0x7f] + strb r3, [r4, #0x50] + ldrsb r1, [r1, #0x75] + strb r1, [r4, #0x51] + strh r0, [r4, #0x52] + strh r0, [r4, #0x56] + strb r2, [r4, #0x58] + strb r0, [r4, #0x59] + strb r0, [r4, #0x5a] + strb r0, [r4, #0x5b] + strb r0, [r4, #0x5c] + strb r0, [r4, #0x5d] + strb r0, [r4, #0x5e] + strb r0, [r4, #0x5f] + strb r0, [r4, #0x60] + mov r2, r0 +_020739A8: + add r1, r4, r0, lsl #4 + strb r2, [r1, #0x75] + add r0, r0, #1 + strb r2, [r1, #0x76] + cmp r0, #4 + blt _020739A8 + add r0, r4, #0x64 + bl SoundEnvelopeParameters_Reset + mov r0, #0 + ldr r1, _02073A88 ; =0x04000208 + str r0, [r4, #0xb4] + ldrh r5, [r1] + strh r0, [r1] + ldr lr, [r4, #0xb8] + cmp lr, #0 + ldreqh r0, [r1] + streqh r5, [r1] + beq _02073A34 + mov ip, lr + mvn r1, #0 + mov r3, r0 +_020739FC: + str r1, [lr, #4] + strb r3, [ip, #1] + ldr r0, [ip, #8] + cmp r0, #0 + movne ip, r0 + bne _020739FC + ldr r0, _02073A84 ; =DRIVER_WORK + ldr r1, _02073A88 ; =0x04000208 + ldr r2, [r0, #0x650] + str r2, [ip, #8] + str lr, [r0, #0x650] + str r3, [r4, #0xb8] + ldrh r0, [r1] + strh r5, [r1] +_02073A34: + mov r1, #0 + str r1, [r4, #0xbc] + ldr r0, _02073A84 ; =DRIVER_WORK + str r1, [r4, #0xc0] + strh r1, [r4, #0x16] + add r0, r0, #0x600 + ldrsb r3, [r0, #0x7b] + ldrsb r0, [r0, #0x7f] + ldr r1, _02073A8C ; =0x82061029 + mov r2, #0x40 + smulbb r0, r3, r0 + rsb r3, r0, r0, lsl #7 + smull r0, ip, r1, r3 + add ip, r3, ip + mov r0, r3, lsr #0x1f + add ip, r0, ip, asr #13 + strh ip, [r4, #0x18] + strh r2, [r4, #0x1a] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02073A80: .word _022B7A30 +_02073A84: .word DRIVER_WORK +_02073A88: .word 0x04000208 +_02073A8C: .word 0x82061029 + arm_func_end DseChannel_Init + + arm_func_start DseChannel_DeallocateVoices +DseChannel_DeallocateVoices: ; 0x02073A90 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r6, [r0, #0xb4] + mov r1, #0 + str r1, [r0, #0xb4] + cmp r6, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r8, _02073B10 ; =_022B7A30 + mov r5, r1 + mov r4, r1 +_02073AB4: + ldr r7, [r6, #0x154] + add r0, r6, #0x3c + strh r5, [r6, #4] + str r5, [r6, #0x158] + str r5, [r6, #0x154] + bl SoundEnvelope_Stop + ldr r0, [r6, #0x14c] + cmp r7, #0 + and r0, r0, #0xff + str r0, [r6, #0x14c] + str r4, [r6] + strh r4, [r6, #0x18] + ldrh r2, [r6, #0xa] + ldrh r1, [r8, #0x32] + mov r6, r7 + mvn r0, r2 + and r0, r1, r0 + strh r0, [r8, #0x32] + ldrh r0, [r8, #0x36] + orr r0, r0, r2 + strh r0, [r8, #0x36] + bne _02073AB4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02073B10: .word _022B7A30 + arm_func_end DseChannel_DeallocateVoices + + arm_func_start DseChannel_ResetTimerAndVolumeForVoices +DseChannel_ResetTimerAndVolumeForVoices: ; 0x02073B14 + cmp r1, #1 + bne _02073B5C + ldrb r1, [r0, #4] + orr r1, r1, #0x40 + strb r1, [r0, #4] + ldr r2, [r0, #0xb4] + cmp r2, #0 + bxeq lr + mov r1, #0 +_02073B38: + str r1, [r2, #0x13c] + str r1, [r2, #0x140] + ldrh r0, [r2, #6] + orr r0, r0, #0x30 + strh r0, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02073B38 + bx lr +_02073B5C: + ldr r2, [r0, #0xb4] + cmp r2, #0 + beq _02073B80 +_02073B68: + ldrh r1, [r2, #6] + orr r1, r1, #0x30 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02073B68 +_02073B80: + ldrb r1, [r0, #4] + bic r1, r1, #0x40 + strb r1, [r0, #4] + bx lr + arm_func_end DseChannel_ResetTimerAndVolumeForVoices + + arm_func_start DseChannel_SetBank +DseChannel_SetBank: ; 0x02073B90 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, r1 + strh r1, [r4, #0xe] + bl DseSwd_GetBankById + str r0, [r4, #0xbc] + cmp r0, #0 + moveq r0, #0 + streq r0, [r4, #0xc0] + ldmeqia sp!, {r4, pc} + ldrh r1, [r4, #0x10] + mov r0, r4 + bl DseChannel_SetInstrument + ldmia sp!, {r4, pc} + arm_func_end DseChannel_SetBank + + arm_func_start DseChannel_SetInstrument +DseChannel_SetInstrument: ; 0x02073BC8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r5, r0 + ldr r0, [r5, #0xbc] + mov r4, r1 + cmp r0, #0 + bne _02073BF0 + mov r0, #0 + str r0, [r5, #0xc0] + strh r0, [r5, #0x10] + b _02073C4C +_02073BF0: + mov r0, r4, lsl #0x10 + mov r1, r0, asr #0x10 + strh r1, [r5, #0x10] + ldr r0, [r5, #0xbc] + bl DseSwd_GetInstrument + movs lr, r0 + beq _02073C48 + mov r6, #0 + strb r6, [r5, #0x59] + add r7, lr, #0x10 + add r8, r5, #0x74 + mov ip, r6 +_02073C20: + ldrb r0, [r7, #1] + add r6, r6, #1 + cmp r0, #0 + ldmneia r7, {r0, r1, r2, r3} + stmneia r8, {r0, r1, r2, r3} + streqb ip, [r8, #1] + cmp r6, #4 + add r7, r7, #0x10 + add r8, r8, #0x10 + blt _02073C20 +_02073C48: + str lr, [r5, #0xc0] +_02073C4C: + add r0, r5, #0x64 + bl SoundEnvelopeParameters_Reset + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + arm_func_end DseChannel_SetInstrument + + arm_func_start DseChannel_SetLfoConstEnvelopeLevel +DseChannel_SetLfoConstEnvelopeLevel: ; 0x02073C5C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + strb r5, [r0, #0x51] + ldr r4, [r0, #0xb4] + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} +_02073C74: + mov r1, r5 + add r0, r4, #0x5c + bl SoundLfoBank_SetConstEnvelopes + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _02073C74 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseChannel_SetLfoConstEnvelopeLevel + + arm_func_start DseChannel_SetKeyBend +DseChannel_SetKeyBend: ; 0x02073C90 + strh r1, [r0, #0x52] + ldr r2, [r0, #0xb4] + cmp r2, #0 + bxeq lr + mov r3, r1, lsl #8 +_02073CA4: + ldrb r0, [r2, #0xf] + mul r1, r0, r3 + mov r0, r1, asr #0xc + add r0, r1, r0, lsr #19 + mov r0, r0, asr #0xd + strh r0, [r2, #0x10] + ldrh r0, [r2, #6] + orr r0, r0, #0x10 + strh r0, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02073CA4 + bx lr + arm_func_end DseChannel_SetKeyBend + + arm_func_start DseChannel_AllocateNote +DseChannel_AllocateNote: ; 0x02073CD8 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + ldrb r2, [r5, #0xd] + mov r4, r1 + cmp r2, #0 + beq _02073D18 + ldrb r0, [r5, #0xc] + sub r0, r2, r0 + add r6, r0, #1 + bl DseUtil_GetRandomNumber + mul r1, r6, r0 + mov r0, r1, asr #0xe + ldrb r2, [r5, #0xc] + add r0, r1, r0, lsr #17 + add r0, r2, r0, asr #15 + strb r0, [r4, #2] +_02073D18: + ldr r1, _02073D64 ; =DRIVER_WORK + ldr r0, [r1, #0x650] + cmp r0, #0 + moveq r0, #0 + ldrne r2, [r0, #8] + strne r2, [r1, #0x650] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r3, [r4] + ldr r2, [r4, #4] + mov r1, #1 + str r3, [r0] + str r2, [r0, #4] + strb r1, [r0, #1] + ldr r1, [r5, #0xb8] + str r1, [r0, #8] + str r0, [r5, #0xb8] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02073D64: .word DRIVER_WORK + arm_func_end DseChannel_AllocateNote + + arm_func_start DseChannel_ReleaseNoteInternal +DseChannel_ReleaseNoteInternal: ; 0x02073D68 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r0 + ldr r4, [r7, #0xb8] + mov r6, r1 + cmp r4, #0 + add r5, r7, #0xb8 + beq _02073DE4 + ldrb r1, [r6, #2] +_02073D88: + ldrb r0, [r4, #2] + cmp r0, r1 + bne _02073DD4 + ldr r8, [r7, #0xb4] + cmp r8, #0 + beq _02073DC8 +_02073DA0: + ldrb r1, [r8, #0xd] + ldrb r0, [r6, #2] + cmp r1, r0 + bne _02073DBC + mov r0, r7 + mov r1, r8 + bl DseVoice_Release +_02073DBC: + ldr r8, [r8, #0x154] + cmp r8, #0 + bne _02073DA0 +_02073DC8: + ldr r0, [r4, #8] + str r0, [r5] + b _02073DE4 +_02073DD4: + add r5, r4, #8 + ldr r4, [r4, #8] + cmp r4, #0 + bne _02073D88 +_02073DE4: + ldr r0, _02073E0C ; =DRIVER_WORK + mvn r2, #0 + ldr r3, [r0, #0x650] + mov r1, #0 + str r3, [r4, #8] + str r4, [r0, #0x650] + str r2, [r4, #4] + mov r0, r4 + strb r1, [r4, #1] + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02073E0C: .word DRIVER_WORK + arm_func_end DseChannel_ReleaseNoteInternal + + arm_func_start DseChannel_ChangeNote +DseChannel_ChangeNote: ; 0x02073E10 + stmdb sp!, {r4, lr} + ldr r4, [r0, #0xb8] + cmp r4, #0 + beq _02073E54 +_02073E20: + ldrb r3, [r4, #2] + cmp r3, r2 + bne _02073E48 + ldr lr, [r1] + ldr ip, [r1, #4] + mov r3, #1 + str lr, [r4] + str ip, [r4, #4] + strb r3, [r4, #1] + b _02073E54 +_02073E48: + ldr r4, [r4, #8] + cmp r4, #0 + bne _02073E20 +_02073E54: + ldr ip, [r0, #0xb4] + cmp ip, #0 + ldmeqia sp!, {r4, pc} +_02073E60: + ldrb r0, [ip, #0xd] + cmp r0, r2 + bne _02073E90 + ldrb r0, [r1, #2] + strb r0, [ip, #0xd] + ldrb r3, [r1, #2] + ldrsh r0, [ip, #0x14] + add r0, r0, r3, lsl #8 + strh r0, [ip, #0x12] + ldrh r0, [ip, #6] + orr r0, r0, #0x10 + strh r0, [ip, #6] +_02073E90: + ldr ip, [ip, #0x154] + cmp ip, #0 + bne _02073E60 + ldmia sp!, {r4, pc} + arm_func_end DseChannel_ChangeNote + + arm_func_start DseChannel_ReleaseNote +DseChannel_ReleaseNote: ; 0x02073EA0 + stmdb sp!, {r3, lr} + ldr r2, [r0, #0xb8] + cmp r2, #0 + ldmeqia sp!, {r3, pc} + ldrb r3, [r1, #2] +_02073EB4: + ldrb r1, [r2, #2] + cmp r1, r3 + bne _02073ECC + mov r1, r2 + bl DseChannel_ReleaseNoteInternal + ldmia sp!, {r3, pc} +_02073ECC: + ldr r2, [r2, #8] + cmp r2, #0 + bne _02073EB4 + ldmia sp!, {r3, pc} + arm_func_end DseChannel_ReleaseNote + + arm_func_start DseVoice_PlayNote +DseVoice_PlayNote: ; 0x02073EDC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov sl, r0 + ldrsh r4, [sl, #0xa] + mov sb, r1 + cmp r4, #0 + moveq r0, #0 + streq r0, [sp] + beq _02073F28 + bl DseUtil_GetRandomNumber + mov r1, r4, lsl #1 + mul r2, r1, r0 + mov r0, r2, asr #0xe + ldrsh r1, [sl, #0xa] + add r0, r2, r0, lsr #17 + rsb r0, r1, r0, asr #15 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + str r0, [sp] +_02073F28: + ldr r6, [sl, #0xc0] + cmp r6, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r7, [sl, #0xbc] + mov r5, #0 +_02073F40: + ldrb r2, [sb, #2] + ldrsb r3, [sb, #3] + mov r0, r6 + mov r1, r5 + bl DseSwd_GetNextSplitInRange + movs r5, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r3, [r5, #0x1a] + ldrb r0, [r7, #0xc] + ldr r2, [r7, #0x18] + cmp r3, r0 + movge r3, #0 + add r1, r2, r3, lsl #3 + ldr r2, [r2, r3, lsl #3] + ldr r1, [r1, #4] + mov r0, r7 + str r2, [sp, #4] + str r1, [sp, #8] + ldrsh r1, [r5, #0x12] + bl ReadWaviEntry + movs fp, r0 + beq _02073F40 + ldrb r3, [sl, #5] + ldrb r2, [r5, #0x1a] + mov r0, sl + add r1, sp, #4 + add r8, r2, r3, lsl #8 + ldrb r3, [sp, #7] + mov r2, r8 + bl DseVoice_Allocate + movs r4, r0 + beq _02073F40 + mov r0, #0 + strh r0, [r4, #4] + ldr r0, [sl] + add fp, fp, #0x10 + str r0, [r4] + strh r8, [r4, #0x18] + ldrsh r0, [r5, #0x12] + add ip, r4, #0x1c + strb r0, [r4, #0xe] + ldmia fp!, {r0, r1, r2, r3} + stmia ip!, {r0, r1, r2, r3} + ldmia fp, {r0, r1, r2, r3} + stmia ip, {r0, r1, r2, r3} + ldr r1, [r4, #0x30] + ldr r0, [r7, #0x1c] + add r0, r1, r0 + str r0, [r4, #0x30] + ldrb r0, [sb, #2] + strb r0, [r4, #0xd] + ldrsb r1, [r5, #0x17] + ldrsh r0, [r5, #0x14] + add r1, r0, r1, lsl #8 + ldr r0, [sp] + add r0, r0, r1 + strh r0, [r4, #0x14] + ldrb r1, [sb, #2] + ldrsh r0, [r4, #0x14] + add r0, r0, r1, lsl #8 + strh r0, [r4, #0x12] + ldrb r0, [r5, #0x19] + strb r0, [r4, #0x17] + ldr r0, _02074144 ; =DRIVER_WORK + ldrb r0, [r0, #0x39] + cmp r0, #7 + bne _02074084 + ldrb r1, [sl, #0x58] + ldrb r0, [sb, #3] + ldrb r2, [r6, #4] + ldrb r3, [r5, #0x18] + smulbb r0, r1, r0 + mul r0, r2, r0 + mul r2, r3, r0 + ldr r0, _02074148 ; =0x4186143D + smull r1, r3, r0, r2 + mov r0, r2, lsr #0x1f + add r3, r0, r3, asr #19 + strb r3, [r4, #0x16] + b _020740B0 +_02074084: + ldrb r1, [sb, #3] + ldrb r0, [r6, #4] + ldrb r2, [r5, #0x18] + smulbb r0, r1, r0 + mul r3, r2, r0 + ldr r0, _0207414C ; =0x82061029 + smull r1, r2, r0, r3 + add r2, r3, r2 + mov r0, r3, lsr #0x1f + add r2, r0, r2, asr #13 + strb r2, [r4, #0x16] +_020740B0: + ldrb r2, [sl, #0x59] + ldrsh r3, [sl, #0x52] + add r0, r4, #0x5c + cmp r2, #0 + ldreqb r2, [r5, #2] + mov r3, r3, lsl #8 + add r1, sl, #0x74 + mul r8, r2, r3 + mov r3, r8, asr #0xc + add r3, r8, r3, lsr #19 + mov r3, r3, asr #0xd + strh r3, [r4, #0x10] + strb r2, [r4, #0xf] + ldrh r2, [r4, #6] + orr r2, r2, #0xff0 + strh r2, [r4, #6] + ldrsb r2, [sl, #0x51] + bl SoundLfoBank_Set + add r0, r5, #0x20 + add r8, r4, #0x3c + ldmia r0, {r0, r1, r2, r3} + stmia r8, {r0, r1, r2, r3} + mov r0, #1 + strb r0, [r4, #0x3c] + ldrb r0, [sl, #0x64] + cmp r0, #0 + beq _02074128 + mov r0, r8 + add r1, sl, #0x64 + bl SoundEnvelope_SetParameters +_02074128: + mov r1, r4 + mov r0, sl + ldrb r2, [sp, #7] + bl DseVoice_Start + b _02073F40 +_0207413C: + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02074144: .word DRIVER_WORK +_02074148: .word 0x4186143D +_0207414C: .word 0x82061029 + arm_func_end DseVoice_PlayNote + + arm_func_start DseVoice_ReleaseNote +DseVoice_ReleaseNote: ; 0x02074150 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r4, [r6, #0xb4] + mov r5, r1 + cmp r4, #0 + ldmeqia sp!, {r4, r5, r6, pc} +_02074168: + ldrb r1, [r4, #0xd] + ldrb r0, [r5, #2] + cmp r1, r0 + bne _02074184 + mov r0, r6 + mov r1, r4 + bl DseVoice_Release +_02074184: + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _02074168 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseVoice_ReleaseNote + + arm_func_start DseVoice_UpdateParameters +DseVoice_UpdateParameters: ; 0x02074194 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr fp, _0207431C ; =_022B7A30 + ldr r7, _02074320 ; =_022B7A6C + ldrh r0, [fp, #0x2e] + mov sb, #0 + cmp r0, #0 + ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r6, _02074324 ; =_020B1310 + ldr r5, _02074328 ; =_020B1394 + ldr r4, _0207432C ; =0x00FFB0FF +_020741BC: + ldr r8, [r7, #0x158] + cmp r8, #0 + beq _02074304 + ldrh sl, [r7, #6] + cmp sl, #0 + beq _02074300 + tst sl, #0x10 + beq _02074264 + ldrh r2, [r8, #0x16] + ldrsh r1, [r7, #0x12] + ldrsh r3, [r7, #0x10] + ldrsh r0, [r7, #0x5e] + add r1, r2, r1 + add r1, r3, r1 + add r0, r0, r1 + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, r1, asr #8 + and r0, r0, #0x7f + ldrb r0, [r6, r0] + and r2, r1, #0xff + mov r1, r0, lsl #0x1c + add r1, r2, r1, lsr #20 + mov r1, r1, lsl #1 + mov r0, r0, asr #4 + ldrh r1, [r5, r1] + rsbs r0, r0, #4 + movpl r1, r1, lsr r0 + rsbmi r0, r0, #0 + movmi r1, r1, lsl r0 + ldrb r0, [r7, #0x1f] + cmp r0, #3 + mov r0, r4 + blo _0207425C + mov r2, r1, asr #3 + add r1, r1, r2, lsr #28 + mov r1, r1, asr #4 + bl _s32_div_f + str r0, [r7, #0x13c] + b _02074264 +_0207425C: + bl _s32_div_f + str r0, [r7, #0x13c] +_02074264: + tst sl, #0x20 + beq _020742C4 + ldrb r1, [r7, #0x16] + ldrsh r0, [r7, #0x60] + add r1, r1, r0, asr #6 + cmp r1, #0x7f + movgt r1, #0x7f + bgt _0207428C + cmp r1, #0 + movlt r1, #0 +_0207428C: + ldrh r0, [r8, #0x18] + ldrb r2, [r7, #0x14c] + mul r1, r0, r1 + mul r3, r2, r1 + ldr r0, _02074330 ; =0x828CBFBF + smull r1, r2, r0, r3 + add r2, r3, r2 + mov r0, r3, lsr #0x1f + add r2, r0, r2, asr #12 + mul r1, r2, r2 + mov r0, r1, asr #8 + add r0, r1, r0, lsr #23 + mov r0, r0, asr #9 + str r0, [r7, #0x140] +_020742C4: + tst sl, #0x40 + beq _02074300 + ldrsb r1, [r7, #0x17] + ldrsh r2, [r8, #0x1a] + ldrsh r0, [r7, #0x62] + sub r1, r1, #0x40 + add r1, r2, r1 + adds r1, r1, r0, asr #6 + ldr r0, _02074334 ; =_022B8330 + movmi r1, #0 + cmp r1, #0x7f + ldr r0, [r0, #0xed4] + movgt r1, #0x7f + ldrb r0, [r0, r1] + str r0, [r7, #0x144] +_02074300: + strh sl, [r7, #6] +_02074304: + ldrh r0, [fp, #0x2e] + add sb, sb, #1 + add r7, r7, #0x15c + cmp sb, r0 + blt _020741BC + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0207431C: .word _022B7A30 +_02074320: .word _022B7A6C +_02074324: .word _020B1310 +_02074328: .word _020B1394 +_0207432C: .word 0x00FFB0FF +_02074330: .word 0x828CBFBF +_02074334: .word _022B8330 + arm_func_end DseVoice_UpdateParameters + + arm_func_start DseVoice_ResetAll +DseVoice_ResetAll: ; 0x02074338 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr sl, _020743D0 ; =_022B7A30 + mov r8, #0 + ldrh r0, [sl, #0x2e] + cmp r0, #0 + ble _020743C0 + ldr sb, _020743D4 ; =_022B7A6C + mov r7, r8 + mov r6, #1 + mov r5, #0x40 + mov r4, r8 +_02074364: + strh r7, [sb, #4] + strh r7, [sb, #6] + mov r0, r6, lsl r8 + strh r8, [sb, #8] + strh r0, [sb, #0xa] + str r7, [sb] + str r7, [sb, #0x14c] + strb r7, [sb, #0xd] + strb r7, [sb, #0xe] + strh r7, [sb, #0x12] + strb r7, [sb, #0x16] + add r0, sb, #0x3c + strb r5, [sb, #0x17] + bl SoundEnvelope_Reset + add r0, sb, #0x5c + bl SoundLfoBank_Reset + str r4, [sb, #0x154] + str r4, [sb, #0x158] + ldrh r0, [sl, #0x2e] + add r8, r8, #1 + add sb, sb, #0x15c + cmp r8, r0 + blt _02074364 +_020743C0: + ldr r0, _020743D8 ; =DRIVER_WORK + mov r1, #0 + str r1, [r0, #0x654] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_020743D0: .word _022B7A30 +_020743D4: .word _022B7A6C +_020743D8: .word DRIVER_WORK + arm_func_end DseVoice_ResetAll + + arm_func_start DseVoice_ResetHW +DseVoice_ResetHW: ; 0x020743DC + stmdb sp!, {r3, lr} + cmp r0, #0 + ble _02074414 + ldr r1, _0207447C ; =_022B7A30 + mov r2, #0x10 + strh r2, [r1, #0x2c] + cmp r0, #0x10 + movgt r0, r2, lsl #0x10 + ldr r2, _0207447C ; =_022B7A30 + movgt r0, r0, asr #0x10 + strh r0, [r2, #0x2e] + ldr r1, _02074480 ; =_022B8330 + mov r0, #0 + strb r0, [r1, #0xd0c] +_02074414: + ldr r2, _0207447C ; =_022B7A30 + mov r0, #0 + strh r0, [r2, #0x32] + strh r0, [r2, #0x34] + ldr r1, _02074484 ; =DRIVER_WORK + strh r0, [r2, #0x36] + strb r0, [r1, #0x738] + strb r0, [r1, #0x739] + ldr ip, _02074480 ; =_022B8330 + strh r0, [r2, #0x30] + str r0, [ip, #0xcfc] + str r0, [ip, #0xd00] + sub r2, r0, #1 + str r2, [ip, #0xd04] + ldrsh lr, [r1, #0x28] + mov r1, r0 + mov r2, r0 + mov r3, r0 + str lr, [ip, #0xd08] + bl sub_0207C8B8 + ldr r0, _02074488 ; =0x0000FFFF + mov r3, #0 + mov r1, r0 + mov r2, r0 + bl sub_0207C8E0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0207447C: .word _022B7A30 +_02074480: .word _022B8330 +_02074484: .word DRIVER_WORK +_02074488: .word 0x0000FFFF + arm_func_end DseVoice_ResetHW + + arm_func_start UpdateChannels +UpdateChannels: ; 0x0207448C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr sb, _02074570 ; =_022B7A30 + mov r7, #0 + ldrh r0, [sb, #0x2e] + mov r6, r7 + ldr r5, _02074574 ; =_022B7A6C + cmp r0, #0 + ble _0207452C + mov r4, #2 +_020744B0: + add r0, r5, #0x3c + bl SoundEnvelope_Tick + ldrsb r1, [r5, #0x5a] + mov r8, r0 + cmp r1, #1 + bne _02074514 + add r0, r5, #0x5c + bl SoundLfoBank_Tick + ldrh r1, [r5, #6] + orr r0, r1, r0 + strh r0, [r5, #6] + ldrb r0, [r5, #0x58] + cmp r0, #8 + bne _020744F8 + strb r4, [r5, #0x58] + ldrh r0, [r5, #6] + orr r0, r0, #2 + strh r0, [r5, #6] +_020744F8: + ldrb r0, [r5, #0x14c] + cmp r0, r8 + ldrneh r0, [r5, #6] + orrne r0, r0, #0x20 + strneh r0, [r5, #6] + cmp r8, #0 + addgt r7, r7, #1 +_02074514: + strb r8, [r5, #0x14c] + ldrh r0, [sb, #0x2e] + add r6, r6, #1 + add r5, r5, #0x15c + cmp r6, r0 + blt _020744B0 +_0207452C: + ldr r0, _02074578 ; =_022B8330 + ldr r1, [r0, #0xd04] + cmp r1, #0 + movlt r1, #0 + strlt r1, [r0, #0xd00] + ldr r0, _02074578 ; =_022B8330 + str r7, [r0, #0xcfc] + ldr r1, [r0, #0xd00] + cmp r1, r7 + strlt r7, [r0, #0xd00] + movlt r1, #0x64 + strlt r1, [r0, #0xd04] + ldr r0, _02074578 ; =_022B8330 + ldr r1, [r0, #0xd04] + sub r1, r1, #1 + str r1, [r0, #0xd04] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02074570: .word _022B7A30 +_02074574: .word _022B7A6C +_02074578: .word _022B8330 + arm_func_end UpdateChannels + + arm_func_start DseVoice_Cleanup +DseVoice_Cleanup: ; 0x0207457C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r6, _02074610 ; =_022B7A6C + bl sub_0207D470 + ldr r4, _02074614 ; =_022B7A30 + mov r0, r0, lsl #0x10 + ldrh r2, [r4, #0x30] + ldrh r1, [r4, #0x2e] + mov r7, #0 + orr r0, r2, r0, lsr #16 + mov r0, r0, lsl #0x10 + mov r8, r0, lsr #0x10 + cmp r1, #0 + ldmleia sp!, {r4, r5, r6, r7, r8, pc} + mov r5, r7 +_020745B4: + ldrsb r0, [r6, #0x5a] + cmp r0, #1 + bne _020745DC + tst r8, #1 + bne _020745F0 + add r0, r6, #0x3c + bl SoundEnvelope_Stop2 + add r0, r6, #0x100 + strh r5, [r0, #0x4c] + b _020745F0 +_020745DC: + and r0, r8, #1 + cmp r0, #1 + bne _020745F0 + mov r0, r6 + bl DseVoice_FlagForDeactivation +_020745F0: + ldrh r1, [r4, #0x2e] + mov r0, r8, lsl #0xf + add r7, r7, #1 + cmp r7, r1 + mov r8, r0, lsr #0x10 + add r6, r6, #0x15c + blt _020745B4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02074610: .word _022B7A6C +_02074614: .word _022B7A30 + arm_func_end DseVoice_Cleanup + + arm_func_start DseVoice_Allocate +DseVoice_Allocate: ; 0x02074618 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r4, _02074774 ; =_022B7A30 + mov r3, r3, lsl #0x10 + ldrh r5, [r4, #0x2e] + add r3, r3, #0xff + add r8, r3, #0x100 + ldrb r4, [r1, #5] + sub r5, r5, #1 + ldrb r3, [r0, #7] + cmp r4, r5 + movgt r4, r5 + ldrb r7, [r1, #4] + mov r6, #0 + cmp r3, #0 + beq _02074660 + cmp r3, #1 + beq _0207466C + b _0207476C +_02074660: + ldr r6, [r0, #0xb4] + cmp r6, #0 + bne _0207476C +_0207466C: + ldrb r3, [r1] + cmp r3, #0 + beq _02074708 + ldr r5, _02074778 ; =_022B7A6C + mov r3, #0x15c + mla r3, r7, r3, r5 + mov ip, r7 + mov lr, r4 + mov r5, r8 + cmp r7, r4 + mov r6, #0 + bgt _020746E4 + ldr r0, [r0] +_020746A0: + ldr sb, [r3] + cmp sb, r0 + ldreqh sb, [r3, #0x18] + cmpeq sb, r2 + bne _020746D4 + ldr sb, [r3, #0x14c] + add r6, r6, #1 + cmp r5, sb + movhi r5, sb + ldrb sb, [r1, #2] + movhi lr, ip + cmp r6, sb + bge _020746E4 +_020746D4: + add ip, ip, #1 + cmp ip, r4 + add r3, r3, #0x15c + ble _020746A0 +_020746E4: + ldrb r0, [r1, #2] + cmp r6, r0 + blt _02074708 + ldr r1, _02074778 ; =_022B7A6C + mov r0, #0x15c + mla r6, lr, r0, r1 + mov r0, r6 + bl DseVoice_Deallocate + b _0207476C +_02074708: + cmp r7, r4 + add r2, r4, #1 + bgt _0207474C + ldr r1, _0207477C ; =DRIVER_WORK + mov r0, #0x15c + mla r1, r7, r0, r1 +_02074720: + ldr r0, [r1, #0x888] + cmp r8, r0 + bls _0207473C + mov r2, r7 + cmp r0, #0 + beq _0207474C + mov r8, r0 +_0207473C: + add r7, r7, #1 + cmp r7, r4 + add r1, r1, #0x15c + ble _02074720 +_0207474C: + cmp r2, r4 + movgt r6, #0 + bgt _0207476C + ldr r1, _02074778 ; =_022B7A6C + mov r0, #0x15c + mla r6, r2, r0, r1 + mov r0, r6 + bl DseVoice_Deallocate +_0207476C: + mov r0, r6 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02074774: .word _022B7A30 +_02074778: .word _022B7A6C +_0207477C: .word DRIVER_WORK + arm_func_end DseVoice_Allocate + + arm_func_start DseVoice_Start +DseVoice_Start: ; 0x02074780 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + ldrh r3, [r4, #6] + mov r1, r2, lsl #0x10 + add r1, r1, #0xff + orr r2, r3, #1 + bic r2, r2, #2 + strh r2, [r4, #6] + ldr r2, [r4, #0x14c] + add r1, r1, #0x100 + orr r1, r2, r1 + mov r5, r0 + str r1, [r4, #0x14c] + add r0, r4, #0x3c + bl UpdateTrackVolumeEnvelopes + ldr r0, [r4, #0x158] + cmp r0, r5 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r0, [r5, #0xb4] + str r0, [r4, #0x154] + str r4, [r5, #0xb4] + str r5, [r4, #0x158] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseVoice_Start + + arm_func_start DseVoice_ReleaseHeld +DseVoice_ReleaseHeld: ; 0x020747DC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r7, r0 + ldrb r0, [r7, #4] + tst r0, #3 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r4, [r7, #0xb8] + add r6, r7, #0xb8 + cmp r4, #0 + beq _0207484C + ldr r8, _02074858 ; =DRIVER_WORK + mvn sl, #0 + mov sb, #0 +_0207480C: + ldmib r4, {r0, r5} + cmp r0, #0 + strgt r4, [r6] + addgt r6, r4, #8 + bgt _02074840 + mov r0, r7 + mov r1, r4 + bl DseChannel_ReleaseNoteInternal + ldr r0, [r8, #0x650] + str r0, [r4, #8] + str r4, [r8, #0x650] + str sl, [r4, #4] + strb sb, [r4, #1] +_02074840: + mov r4, r5 + cmp r5, #0 + bne _0207480C +_0207484C: + mov r0, #0 + str r0, [r6] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02074858: .word DRIVER_WORK + arm_func_end DseVoice_ReleaseHeld + + arm_func_start DseVoice_Release +DseVoice_Release: ; 0x0207485C + stmdb sp!, {r4, lr} + mov r4, r1 + ldrh r1, [r4, #4] + orr r1, r1, #2 + strh r1, [r4, #4] + ldrb r0, [r0, #4] + tst r0, #1 + ldmneia sp!, {r4, pc} + ldr r1, [r4, #0x14c] + add r0, r4, #0x3c + and r1, r1, #0xff + str r1, [r4, #0x14c] + bl SoundEnvelope_Release + ldrh r0, [r4, #6] + bic r0, r0, #1 + strh r0, [r4, #6] + ldmia sp!, {r4, pc} + arm_func_end DseVoice_Release + + arm_func_start DseVoice_Deallocate +DseVoice_Deallocate: ; 0x020748A0 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r1, [r4, #0x158] + cmp r1, #0 + beq _02074948 + ldr r2, [r1, #0xb4] + cmp r2, r4 + ldreq r0, [r4, #0x154] + streq r0, [r1, #0xb4] + beq _020748F0 + cmp r2, #0 + beq _020748F0 +_020748D0: + ldr r0, [r2, #0x154] + cmp r0, r4 + ldreq r0, [r4, #0x154] + streq r0, [r2, #0x154] + beq _020748F0 + mov r2, r0 + cmp r0, #0 + bne _020748D0 +_020748F0: + mov r0, #0 + strh r0, [r4, #4] + str r0, [r4, #0x158] + str r0, [r4, #0x154] + add r0, r4, #0x3c + bl SoundEnvelope_Stop + ldr r1, [r4, #0x14c] + mov r0, #0 + and r1, r1, #0xff + str r1, [r4, #0x14c] + str r0, [r4] + strh r0, [r4, #0x18] + ldr r1, _020749A0 ; =_022B7A30 + ldrh r0, [r4, #0xa] + ldrh r3, [r1, #0x32] + mvn r2, r0 + and r2, r3, r2 + strh r2, [r1, #0x32] + ldrh r2, [r1, #0x36] + orr r2, r2, r0 + strh r2, [r1, #0x36] + ldmia sp!, {r4, pc} +_02074948: + mov r0, #0 + strh r0, [r4, #4] + str r0, [r4, #0x158] + str r0, [r4, #0x154] + add r0, r4, #0x3c + bl SoundEnvelope_Stop + ldr r1, [r4, #0x14c] + mov r0, #0 + and r1, r1, #0xff + str r1, [r4, #0x14c] + str r0, [r4] + strh r0, [r4, #0x18] + ldr r1, _020749A0 ; =_022B7A30 + ldrh r0, [r4, #0xa] + ldrh r3, [r1, #0x32] + mvn r2, r0 + and r2, r3, r2 + strh r2, [r1, #0x32] + ldrh r2, [r1, #0x36] + orr r2, r2, r0 + strh r2, [r1, #0x36] + ldmia sp!, {r4, pc} + .align 2, 0 +_020749A0: .word _022B7A30 + arm_func_end DseVoice_Deallocate + + arm_func_start DseVoice_FlagForActivation +DseVoice_FlagForActivation: ; 0x020749A4 + mov r1, #0xff0 + strh r1, [r0, #6] + ldr r2, [r0, #0x14c] + ldr r1, _020749F0 ; =_022B7A30 + orr r2, r2, #0xff + orr r2, r2, #0x100 + str r2, [r0, #0x14c] + ldrh r3, [r0, #0xa] + ldrh r0, [r1, #0x34] + mvn r2, r3 + and r0, r0, r2 + strh r0, [r1, #0x34] + ldrh r0, [r1, #0x36] + and r0, r0, r2 + strh r0, [r1, #0x36] + ldrh r0, [r1, #0x32] + orr r0, r0, r3 + strh r0, [r1, #0x32] + bx lr + .align 2, 0 +_020749F0: .word _022B7A30 + arm_func_end DseVoice_FlagForActivation + + arm_func_start DseVoice_FlagForDeactivation +DseVoice_FlagForDeactivation: ; 0x020749F4 + ldr r2, [r0, #0x14c] + ldr r1, _02074A28 ; =_022B7A30 + bic r2, r2, #0xff00 + str r2, [r0, #0x14c] + ldrh r3, [r0, #0xa] + ldrh r2, [r1, #0x32] + mvn r0, r3 + and r0, r2, r0 + strh r0, [r1, #0x32] + ldrh r0, [r1, #0x34] + orr r0, r0, r3 + strh r0, [r1, #0x34] + bx lr + .align 2, 0 +_02074A28: .word _022B7A30 + arm_func_end DseVoice_FlagForDeactivation + + arm_func_start DseVoice_CountNumActiveInChannel +DseVoice_CountNumActiveInChannel: ; 0x02074A2C + ldr r2, [r0, #0xb4] + mov r0, #0 + cmp r2, #0 + bxeq lr +_02074A3C: + ldrb r1, [r2, #0x14c] + ldr r2, [r2, #0x154] + cmp r1, #0 + addne r0, r0, #1 + cmp r2, #0 + bne _02074A3C + bx lr + arm_func_end DseVoice_CountNumActiveInChannel + + arm_func_start DseVoice_UpdateHardware +DseVoice_UpdateHardware: ; 0x02074A58 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x18 + ldr r4, _02074C64 ; =_022B7A30 + ldr r7, _02074C68 ; =_022B7A6C + ldrh r0, [r4, #0x2e] + mov r8, #0 + cmp r0, #0 + ble _02074BC8 + mov fp, #2 + mov sl, #1 + mov r6, r8 + mov r5, r8 +_02074A88: + ldrh sb, [r7, #6] + cmp sb, #0 + beq _02074BB4 + tst sb, #1 + beq _02074B5C + ldrsb r0, [r7, #0x21] + ldrb r1, [r7, #0x1f] + cmp r0, #0 + movne r3, sl + moveq r3, fp + cmp r1, #4 + addls pc, pc, r1, lsl #2 + b _02074B50 +_02074ABC: ; jump table + b _02074AD0 ; case 0 + b _02074AD0 ; case 1 + b _02074AD0 ; case 2 + b _02074B0C ; case 3 + b _02074B34 ; case 4 +_02074AD0: + ldr r0, [r7, #0x34] + str r0, [sp] + ldr r0, [r7, #0x38] + str r0, [sp, #4] + ldr r0, [r7, #0x140] + str r0, [sp, #8] + str r6, [sp, #0xc] + ldr r0, [r7, #0x13c] + str r0, [sp, #0x10] + ldr r0, [r7, #0x144] + str r0, [sp, #0x14] + ldrh r0, [r7, #8] + ldr r2, [r7, #0x30] + bl sub_0207CA6C + b _02074B50 +_02074B0C: + ldr r0, [r7, #0x13c] + mov r3, #0 + str r0, [sp] + ldr r0, [r7, #0x144] + str r0, [sp, #4] + ldrh r0, [r7, #8] + ldrb r1, [r7, #0x25] + ldr r2, [r7, #0x140] + bl sub_0207CAB8 + b _02074B50 +_02074B34: + ldr r0, [r7, #0x144] + mov r2, #0 + str r0, [sp] + ldrh r0, [r7, #8] + ldr r1, [r7, #0x140] + ldr r3, [r7, #0x13c] + bl sub_0207CAE0 +_02074B50: + mov r0, r7 + bl DseVoice_FlagForActivation + b _02074BB0 +_02074B5C: + tst sb, #2 + beq _02074B70 + mov r0, r7 + bl DseVoice_FlagForDeactivation + mov sb, #0 +_02074B70: + tst sb, #0x10 + beq _02074B84 + ldrh r0, [r7, #0xa] + ldr r1, [r7, #0x13c] + bl sub_0207CA04 +_02074B84: + tst sb, #0x20 + beq _02074B9C + ldrh r0, [r7, #0xa] + ldr r1, [r7, #0x140] + mov r2, #0 + bl sub_0207CA24 +_02074B9C: + tst sb, #0x40 + beq _02074BB0 + ldrh r0, [r7, #0xa] + ldr r1, [r7, #0x144] + bl sub_0207CA4C +_02074BB0: + strh r5, [r7, #6] +_02074BB4: + ldrh r0, [r4, #0x2e] + add r8, r8, #1 + add r7, r7, #0x15c + cmp r8, r0 + blt _02074A88 +_02074BC8: + ldr r1, _02074C64 ; =_022B7A30 + ldr r2, _02074C6C ; =DRIVER_WORK + ldrh r0, [r1, #0x32] + strh r0, [r1, #0x30] + ldrb r1, [r2, #0x73a] + ldrb r2, [r2, #0x738] + orr r3, r0, r1 + orrs r3, r2, r3 + beq _02074C0C + mov r3, #0 + bl sub_0207C8B8 + ldr r1, _02074C6C ; =DRIVER_WORK + mov r2, #0 + strb r2, [r1, #0x738] + ldr r0, _02074C64 ; =_022B7A30 + strb r2, [r1, #0x73a] + strh r2, [r0, #0x32] +_02074C0C: + ldr r1, _02074C64 ; =_022B7A30 + ldr r0, _02074C6C ; =DRIVER_WORK + ldrh r4, [r1, #0x34] + ldrh r3, [r1, #0x36] + ldrb r1, [r0, #0x73b] + ldrb r2, [r0, #0x739] + orr r0, r4, r3 + orr r3, r1, r0 + orrs r3, r2, r3 + addeq sp, sp, #0x18 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r3, #0 + bl sub_0207C8E0 + ldr r1, _02074C6C ; =DRIVER_WORK + mov r2, #0 + strb r2, [r1, #0x739] + ldr r0, _02074C64 ; =_022B7A30 + strb r2, [r1, #0x73b] + strh r2, [r0, #0x36] + strh r2, [r0, #0x34] + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02074C64: .word _022B7A30 +_02074C68: .word _022B7A6C +_02074C6C: .word DRIVER_WORK + arm_func_end DseVoice_UpdateHardware diff --git a/include/dse.h b/include/dse.h new file mode 100644 index 00000000..060ece1c --- /dev/null +++ b/include/dse.h @@ -0,0 +1,330 @@ +#ifndef PMDSKY_DSE_H +#define PMDSKY_DSE_H + +struct dse_fade { + s32 val; + u32 delta; + u32 target; + u16 steps; + u8 field4_0xe; + u8 field5_0xf; +}; + +struct dse_lfo { + u8 phase_flags; + u8 type; + u16 voice_update_flags; + u16 ticks_per_phase_change; + u16 ticks_until_phase_change; + s32 current_output; + s32 amplitude; + u32 unk_0x10; + s32 output_delta; + u16 unk_0x18; + u16 ticks_until_lfo_started; + u16 unk_0x1c; + u16 lfo_envelope_ticks_left; + s32 envelope_level; + s32 envelope_delta; + u8 *output_ptr; + u8 *waveform_callback; + struct dse_lfo *next; +}; + +struct dse_lfo_bank { + s16 outputs[6]; + struct dse_lfo *lfo_list; + struct dse_lfo lfos[4]; +}; + +struct dse_sub_loop { + u8 *start; + u8 *end; + u8 count; + u8 octave; + u8 field4_0xa; + u8 field5_0xb; +}; + +struct dse_sound_envelope_parameters { + u8 use_envelope; + u8 slide_time_multiplier; + u16 unk_0x2; + u32 unk_0x4; + u8 attack_begin; + u8 attack_time; + u8 decay_time; + u8 sustain_level; + u8 hold_time; + u8 sustain_time; + u8 release_time; + u8 unk_0xf; +}; + +struct dse_sound_envelope { + struct dse_sound_envelope_parameters parameters; + s32 current_volume; + s32 volume_delta; + s32 ticks_left; + u8 state; + u8 target_volume; + u8 update_volume; + u8 field7_0x1f; +}; + +struct dse_track { + u16 field0_0x0; + u8 active; + u8 field2_0x3; + u8 octave; + u8 duration_multiplier; + u8 n_sub_loops; + u8 field6_0x7; + u8 field7_0x8; + u8 field8_0x9; + u16 maybe_n_reps; + u32 current_wait; + u32 last_wait; + u32 last_duration; + u8 *start; + u8 *next_event; + u8 *loop_start; + struct dse_sub_loop sub_loops[4]; + struct dse_channel *channel; + u8 field18_0x58; + u8 field19_0x59; + u8 field20_0x5a; + u8 field21_0x5b; +}; + +struct dse_voice { + u32 field0_0x0; + u16 unk_flags_0x4; + u16 unk_flags_0x6; + u16 field3_0x8; + u16 field4_0xa; + u8 field5_0xc; + u8 key; /* Created by retype action */ + u8 field7_0xe; + u8 field8_0xf; + u16 field9_0x10; + u16 field10_0x12; + s16 field11_0x14; + u8 field12_0x16; + u8 field13_0x17; + u16 field14_0x18; + u8 field15_0x1a; + u8 field16_0x1b; + u32 field17_0x1c; + u32 field18_0x20; + u32 field19_0x24; + u32 field20_0x28; + u32 field21_0x2c; + u32 field22_0x30; + u32 field23_0x34; + u32 field24_0x38; + struct dse_sound_envelope envelope; + struct dse_lfo_bank lfo_bank; + u8 field27_0x13c; + u8 field28_0x13d; + u8 field29_0x13e; + u8 field30_0x13f; + u8 field31_0x140; + u8 field32_0x141; + u8 field33_0x142; + u8 field34_0x143; + u8 field35_0x144; + u8 field36_0x145; + u8 field37_0x146; + u8 field38_0x147; + u8 field39_0x148; + u8 field40_0x149; + u8 field41_0x14a; + u8 field42_0x14b; + u32 field43_0x14c; + u8 field44_0x150; + u8 field45_0x151; + u8 field46_0x152; + u8 field47_0x153; + struct dse_voice *next; + struct dse_channel *channel; +}; + +struct dse_channel_unk_0x74dt { + u8 field0_0x0; + u8 field1_0x1; + u8 field2_0x2; + u8 field3_0x3; + u32 field4_0x4; + u16 field5_0x8; + u16 field6_0xa; + u16 field7_0xc; + u8 field8_0xe; + u8 field9_0xf; +}; + +struct dse_channel { + u32 field0_0x0; + u8 unk_flags_0x4; + u8 field2_0x5; + u8 field3_0x6; + u8 field4_0x7; + u8 field5_0x8; + u8 field6_0x9; + u16 jitter_range; + u8 random_note_min; + u8 random_note_max; + u16 field10_0xe; + u16 field11_0x10; + u8 field12_0x12; + u8 field13_0x13; + u16 field14_0x14; + u16 tune_final; + u16 vol_final; + u16 pan_final; + struct dse_fade tune_fade; + struct dse_fade vol_fade; + struct dse_fade pan_fade; + u8 field21_0x4c; + u8 field22_0x4d; + u8 field23_0x4e; + u8 field24_0x4f; + u8 expression; + s8 field26_0x51; + u16 field27_0x52; + u16 field28_0x54; + u16 field29_0x56; + u8 opt_volume; /* Created by retype action */ + u8 bend_range; /* Created by retype action */ + u8 field32_0x5a; + u8 field33_0x5b; + u8 field34_0x5c; + u8 field35_0x5d; + u8 field36_0x5e; + u8 field37_0x5f; + u8 field38_0x60; + u8 field39_0x61; + u8 field40_0x62; + u8 field41_0x63; + struct dse_sound_envelope_parameters envelope; + struct dse_channel_unk_0x74dt field43_0x74[4]; + struct dse_voice *voices; + struct dse_note_node *notes; + u32 field46_0xbc; + u32 field47_0xc0; + struct dse_synth *container; +}; + +struct dse_synth { + u8 field0_0x0; + u8 n_channels; + u8 global_vol; + u8 global_vol_idx; + s16 bend; + s8 vol; + s8 pan; + s8 combined_vol; + u8 field8_0x9; + u8 field9_0xa; + u8 field10_0xb; + struct dse_synth *next; + struct dse_channel channels[16]; /* flexible */ +}; + +struct dse_note_parameters { + u8 field0_0x0; + u8 channel_idx; + u8 key; + u8 volume; +}; + +struct dse_note_node { + struct dse_note_parameters parameters; + s32 duration; + struct dse_note_node *next; +}; + +struct dse_seq_unk_0x0 { + u8 field0_0x0; + u8 field1_0x1; + u8 field2_0x2; + u8 field3_0x3; +}; + +struct dse_seq_unk_0x4 { + u8 field0_0x0; + s8 field1_0x1; + u8 field2_0x2; + u8 field3_0x3; +}; + +struct dse_seq_unk_0x8 { + s8 field0_0x0; + u8 field1_0x1; + u8 field2_0x2; + u8 field3_0x3; +}; + +struct dse_seq { + struct dse_seq_unk_0x0 field0_0x0; + struct dse_seq_unk_0x4 field1_0x4; + struct dse_seq_unk_0x8 field2_0x8; + u8 unk_flags_0xc; + u8 n_active_tracks; + u8 field5_0xe; + u8 n_tracks; + u8 n_channels; + u8 field8_0x11; + u8 field9_0x12; + u8 field10_0x13; + u8 field11_0x14; + u8 field12_0x15; + u8 field13_0x16; + u8 bpm; + u8 field15_0x18; + u8 field16_0x19; + s16 field17_0x1a; + u8 *seq_file; + u8 *field19_0x20; + struct dse_synth *synth; + u32 id; + u16 field22_0x2c; + u8 field23_0x2e; + u8 field24_0x2f; + u32 field25_0x30; + u32 field26_0x34; + u32 field27_0x38; + u32 field28_0x3c; + u32 field29_0x40; + s32 us_per_standard_qn; /* us per 256 ticks */ + struct dse_fade tpqn_fade; + struct dse_fade bend_fade; + struct dse_fade vol_fade; + struct dse_fade pan_fade; + u8 field35_0x88; + u8 field36_0x89; + u8 field37_0x8a; + u8 field38_0x8b; + u8 field39_0x8c; + u8 field40_0x8d; + u8 field41_0x8e; + u8 field42_0x8f; + u8 field43_0x90; + u8 field44_0x91; + u8 field45_0x92; + u8 field46_0x93; + u8 field47_0x94; + u8 field48_0x95; + u8 field49_0x96; + u8 field50_0x97; + s8 field51_0x98; + u8 field52_0x99; + u8 field53_0x9a; + u8 field54_0x9b; + u8 *unk_callback; + u32 field56_0xa0; + struct dse_seq *next; + struct dse_track tracks[16]; +}; + +#endif //PMDSKY_DSE_H diff --git a/include/main_02071A98.h b/include/main_02071A98.h new file mode 100644 index 00000000..0526253c --- /dev/null +++ b/include/main_02071A98.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_MAIN_02071A98_H +#define PMDSKY_MAIN_02071A98_H + +#include "dse.h" + +u8* DseTrackEvent_SubLoopBreakOnLastIteration(u8 *cur, struct dse_seq *seq, struct dse_track *trk, struct dse_channel *chn); + +#endif //PMDSKY_MAIN_02071A98_H diff --git a/main.lsf b/main.lsf index 71f982f1..eb3751c0 100644 --- a/main.lsf +++ b/main.lsf @@ -77,6 +77,8 @@ Static main Object asm/main_02058F24.o Object src/main_0206C98C.o Object asm/main_0206C9BC.o + Object src/main_02071A98.o + Object asm/main_02071AC0.o Object lib/DSE/src/dc_envelope.o Object lib/DSE/src/dc_lfo.o Object lib/DSE/asm/dc_lfo_1.o diff --git a/src/main_02071A98.c b/src/main_02071A98.c new file mode 100644 index 00000000..0e3a779e --- /dev/null +++ b/src/main_02071A98.c @@ -0,0 +1,14 @@ +#include "main_02071A98.h" + +u8* DseTrackEvent_SubLoopBreakOnLastIteration(u8 *cur, struct dse_seq *seq, struct dse_track *trk, struct dse_channel *chn) +{ + u8 n = trk->n_sub_loops; + struct dse_sub_loop *last_loop = &trk->sub_loops[n-1]; + + if (last_loop->count - 1 == 0) { + cur = last_loop->end; + trk->n_sub_loops = n - 1; + } + + return cur; +} From 08c20fbc18d5a53b597825cd2fb1dfdead3f108d Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 6 Aug 2025 18:33:48 -0400 Subject: [PATCH 15/40] Decomped DseTrackEvent_SetInstrument Decomped by @Snioflake --- asm/include/main_02071AC0.inc | 41 +- asm/include/main_02071C3C.inc | 42 + asm/main_02071AC0.s | 3874 --------------------------------- asm/main_02071C3C.s | 3855 ++++++++++++++++++++++++++++++++ include/dse.h | 44 +- include/main_02071BF4.h | 8 + main.lsf | 2 + src/main_02071A98.c | 12 +- src/main_02071BF4.c | 14 + 9 files changed, 3950 insertions(+), 3942 deletions(-) create mode 100644 asm/include/main_02071C3C.inc create mode 100644 asm/main_02071C3C.s create mode 100644 include/main_02071BF4.h create mode 100644 src/main_02071BF4.c diff --git a/asm/include/main_02071AC0.inc b/asm/include/main_02071AC0.inc index 15e8429d..f0545f97 100644 --- a/asm/include/main_02071AC0.inc +++ b/asm/include/main_02071AC0.inc @@ -1,42 +1,3 @@ #pragma once -.public DRIVER_WORK -.public DseMem_Allocate -.public DseMem_Free -.public DseSwd_GetBankById -.public DseSwd_GetInstrument -.public DseSwd_GetNextSplitInRange -.public DseUtil_GetRandomNumber -.public ReadWaviEntry -.public SoundEnvelopeParameters_CheckValidity -.public SoundEnvelopeParameters_Reset -.public SoundEnvelope_Release -.public SoundEnvelope_Reset -.public SoundEnvelope_SetParameters -.public SoundEnvelope_Stop -.public SoundEnvelope_Stop2 -.public SoundEnvelope_Tick -.public SoundLfoBank_Reset -.public SoundLfoBank_Set -.public SoundLfoBank_SetConstEnvelopes -.public SoundLfoBank_Tick -.public UpdateTrackVolumeEnvelopes -.public _020B0D50 -.public _020B1310 -.public _020B1394 -.public _022B7370 -.public _022B7988 -.public _022B7A30 -.public _022B7A6C -.public _022B8330 -.public _022B9584 -.public _s32_div_f +.public DseChannel_SetBank .public _u32_div_f -.public sub_0207C8B8 -.public sub_0207C8E0 -.public sub_0207CA04 -.public sub_0207CA24 -.public sub_0207CA4C -.public sub_0207CA6C -.public sub_0207CAB8 -.public sub_0207CAE0 -.public sub_0207D470 diff --git a/asm/include/main_02071C3C.inc b/asm/include/main_02071C3C.inc new file mode 100644 index 00000000..15e8429d --- /dev/null +++ b/asm/include/main_02071C3C.inc @@ -0,0 +1,42 @@ +#pragma once +.public DRIVER_WORK +.public DseMem_Allocate +.public DseMem_Free +.public DseSwd_GetBankById +.public DseSwd_GetInstrument +.public DseSwd_GetNextSplitInRange +.public DseUtil_GetRandomNumber +.public ReadWaviEntry +.public SoundEnvelopeParameters_CheckValidity +.public SoundEnvelopeParameters_Reset +.public SoundEnvelope_Release +.public SoundEnvelope_Reset +.public SoundEnvelope_SetParameters +.public SoundEnvelope_Stop +.public SoundEnvelope_Stop2 +.public SoundEnvelope_Tick +.public SoundLfoBank_Reset +.public SoundLfoBank_Set +.public SoundLfoBank_SetConstEnvelopes +.public SoundLfoBank_Tick +.public UpdateTrackVolumeEnvelopes +.public _020B0D50 +.public _020B1310 +.public _020B1394 +.public _022B7370 +.public _022B7988 +.public _022B7A30 +.public _022B7A6C +.public _022B8330 +.public _022B9584 +.public _s32_div_f +.public _u32_div_f +.public sub_0207C8B8 +.public sub_0207C8E0 +.public sub_0207CA04 +.public sub_0207CA24 +.public sub_0207CA4C +.public sub_0207CA6C +.public sub_0207CAB8 +.public sub_0207CAE0 +.public sub_0207D470 diff --git a/asm/main_02071AC0.s b/asm/main_02071AC0.s index d902eb5a..5d085d65 100644 --- a/asm/main_02071AC0.s +++ b/asm/main_02071AC0.s @@ -113,3877 +113,3 @@ DseTrackEvent_Dummy1Byte: ; 0x02071BEC add r0, r0, #1 bx lr arm_func_end DseTrackEvent_Dummy1Byte - - arm_func_start DseTrackEvent_SetInstrument -DseTrackEvent_SetInstrument: ; 0x02071BF4 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r3 - ldrb r1, [r6] - mov r0, r4 - bl DseChannel_SetInstrument - movs r2, r0 - bpl _02071C34 - ldrh r1, [r4, #0xe] - ldr r0, [r5, #0x28] - ldr r3, [r5, #0xa0] - ldr ip, [r5, #0x9c] - rsb r2, r2, r1, lsl #16 - mvn r1, #0xcb - blx ip -_02071C34: - add r0, r6, #1 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseTrackEvent_SetInstrument - - arm_func_start DseTrackEvent_SongVolumeFade -DseTrackEvent_SongVolumeFade: ; 0x02071C3C - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrb r2, [r5] - ldrb r0, [r5, #1] - mov r4, r1 - add r0, r2, r0, lsl #8 - mov r0, r0, lsl #0x10 - movs r1, r0, lsr #0x10 - moveq r6, #0 - beq _02071C84 - mov r0, #0x3e8 - mul r0, r1, r0 - ldr r1, _02071CC4 ; =DRIVER_WORK - ldrsh r1, [r1, #0x28] - bl _u32_div_f - mov r0, r0, lsl #0x10 - movs r6, r0, lsr #0x10 - moveq r6, #1 -_02071C84: - ldrb r0, [r5, #2] - cmp r6, #0 - mov r1, r0, lsl #0x10 - str r1, [r4, #0x70] - streq r1, [r4, #0x68] - beq _02071CB8 - ldr r0, [r4, #0x68] - subs r0, r1, r0 - moveq r6, #0 - beq _02071CB8 - mov r1, r6 - bl _s32_div_f - str r0, [r4, #0x6c] -_02071CB8: - strh r6, [r4, #0x74] - add r0, r5, #3 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02071CC4: .word DRIVER_WORK - arm_func_end DseTrackEvent_SongVolumeFade - - arm_func_start DseTrackEvent_RestoreEnvelopeDefaults -DseTrackEvent_RestoreEnvelopeDefaults: ; 0x02071CC8 - stmdb sp!, {r4, lr} - mov r4, r0 - add r0, r3, #0x64 - bl SoundEnvelopeParameters_Reset - mov r0, r4 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_RestoreEnvelopeDefaults - - arm_func_start DseTrackEvent_SetEnvelopeAttackBegin -DseTrackEvent_SetEnvelopeAttackBegin: ; 0x02071CE0 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - add r0, r3, #0x64 - strb r1, [r3, #0x6c] - bl SoundEnvelopeParameters_CheckValidity - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetEnvelopeAttackBegin - - arm_func_start DseTrackEvent_SetEnvelopeAttackTime -DseTrackEvent_SetEnvelopeAttackTime: ; 0x02071D00 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - add r0, r3, #0x64 - strb r1, [r3, #0x6d] - bl SoundEnvelopeParameters_CheckValidity - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetEnvelopeAttackTime - - arm_func_start DseTrackEvent_SetEnvelopeHoldTime -DseTrackEvent_SetEnvelopeHoldTime: ; 0x02071D20 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - add r0, r3, #0x64 - strb r1, [r3, #0x70] - bl SoundEnvelopeParameters_CheckValidity - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetEnvelopeHoldTime - - arm_func_start DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel -DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel: ; 0x02071D40 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r0, [r4] - cmp r0, #0xff - strneb r0, [r3, #0x6e] - ldrb r0, [r4, #1] - cmp r0, #0xff - strneb r0, [r3, #0x6f] - add r0, r3, #0x64 - bl SoundEnvelopeParameters_CheckValidity - add r0, r4, #2 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel - - arm_func_start DseTrackEvent_SetEnvelopeSustainTime -DseTrackEvent_SetEnvelopeSustainTime: ; 0x02071D70 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - add r0, r3, #0x64 - strb r1, [r3, #0x71] - bl SoundEnvelopeParameters_CheckValidity - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetEnvelopeSustainTime - - arm_func_start DseTrackEvent_SetEnvelopeReleaseTime -DseTrackEvent_SetEnvelopeReleaseTime: ; 0x02071D90 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - add r0, r3, #0x64 - strb r1, [r3, #0x72] - bl SoundEnvelopeParameters_CheckValidity - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetEnvelopeReleaseTime - - arm_func_start DseTrackEvent_SetNoteDurationMultiplier -DseTrackEvent_SetNoteDurationMultiplier: ; 0x02071DB0 - ldrb r1, [r0], #1 - strb r1, [r2, #5] - bx lr - arm_func_end DseTrackEvent_SetNoteDurationMultiplier - - arm_func_start DseTrackEvent_ForceLfoEnvelopeLevel -DseTrackEvent_ForceLfoEnvelopeLevel: ; 0x02071DBC - stmdb sp!, {r4, lr} - mov r4, r0 - ldrsb r1, [r4] - mov r0, r3 - bl DseChannel_SetLfoConstEnvelopeLevel - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_ForceLfoEnvelopeLevel - - arm_func_start DseTrackEvent_SetHoldNotes -DseTrackEvent_SetHoldNotes: ; 0x02071DD8 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - ldr r0, [r2, #0x54] - cmp r1, #0x40 - ldrb r1, [r0, #4] - orrhs r1, r1, #1 - strhsb r1, [r0, #4] - bhs _02071E08 - bic r1, r1, #1 - strb r1, [r0, #4] - bl DseVoice_ReleaseHeld -_02071E08: - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetHoldNotes - - arm_func_start DseTrackEvent_SetFlagBit1Unknown -DseTrackEvent_SetFlagBit1Unknown: ; 0x02071E10 - ldrb r1, [r3, #4] - orr r1, r1, #2 - strb r1, [r3, #4] - bx lr - arm_func_end DseTrackEvent_SetFlagBit1Unknown - - arm_func_start DseTrackEvent_SetOptionalVolume -DseTrackEvent_SetOptionalVolume: ; 0x02071E20 - ldrb r1, [r0], #1 - strb r1, [r3, #0x58] - bx lr - arm_func_end DseTrackEvent_SetOptionalVolume - - arm_func_start DseTrackEvent_Dummy2Bytes -DseTrackEvent_Dummy2Bytes: ; 0x02071E2C - add r0, r0, #2 - bx lr - arm_func_end DseTrackEvent_Dummy2Bytes - - arm_func_start DseTrackEvent_SetTuning -DseTrackEvent_SetTuning: ; 0x02071E34 - stmdb sp!, {r4, lr} - ldrsb r1, [r0] - ldr ip, _02071EB0 ; =0x04000208 - mov r2, #0 - mov r1, r1, lsl #0x18 - mov r4, r1, asr #0x10 - strh r4, [r3, #0x54] - ldr lr, [r3, #0xc4] - ldr r1, [r3, #0x1c] - ldrsh lr, [lr, #4] - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - add r1, r4, r1, asr #16 - add r1, lr, r1 - strh r1, [r3, #0x16] - ldrh r4, [ip] - strh r2, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _02071E9C -_02071E84: - ldrh r1, [r2, #6] - orr r1, r1, #0x10 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02071E84 -_02071E9C: - ldr r2, _02071EB0 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r4, pc} - .align 2, 0 -_02071EB0: .word 0x04000208 - arm_func_end DseTrackEvent_SetTuning - - arm_func_start DseTrackEvent_TuningDeltaCoarse -DseTrackEvent_TuningDeltaCoarse: ; 0x02071EB4 - stmdb sp!, {r4, lr} - ldrsb r4, [r0] - ldrsh r1, [r3, #0x54] - ldr ip, _02071F38 ; =0x04000208 - mov r2, #0 - add r1, r1, r4, lsl #8 - mov r1, r1, lsl #0x10 - mov r4, r1, asr #0x10 - strh r4, [r3, #0x54] - ldr lr, [r3, #0xc4] - ldr r1, [r3, #0x1c] - ldrsh lr, [lr, #4] - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - add r1, r4, r1, asr #16 - add r1, lr, r1 - strh r1, [r3, #0x16] - ldrh r4, [ip] - strh r2, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _02071F24 -_02071F0C: - ldrh r1, [r2, #6] - orr r1, r1, #0x10 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02071F0C -_02071F24: - ldr r2, _02071F38 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r4, pc} - .align 2, 0 -_02071F38: .word 0x04000208 - arm_func_end DseTrackEvent_TuningDeltaCoarse - - arm_func_start DseTrackEvent_TuningDeltaFine -DseTrackEvent_TuningDeltaFine: ; 0x02071F3C - stmdb sp!, {r4, lr} - ldrsb r4, [r0] - ldrsh r1, [r3, #0x54] - ldr ip, _02071FC0 ; =0x04000208 - mov r2, #0 - add r1, r1, r4, lsl #2 - mov r1, r1, lsl #0x10 - mov r4, r1, asr #0x10 - strh r4, [r3, #0x54] - ldr lr, [r3, #0xc4] - ldr r1, [r3, #0x1c] - ldrsh lr, [lr, #4] - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - add r1, r4, r1, asr #16 - add r1, lr, r1 - strh r1, [r3, #0x16] - ldrh r4, [ip] - strh r2, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _02071FAC -_02071F94: - ldrh r1, [r2, #6] - orr r1, r1, #0x10 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02071F94 -_02071FAC: - ldr r2, _02071FC0 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r4, pc} - .align 2, 0 -_02071FC0: .word 0x04000208 - arm_func_end DseTrackEvent_TuningDeltaFine - - arm_func_start DseTrackEvent_TuningDeltaFull -DseTrackEvent_TuningDeltaFull: ; 0x02071FC4 - stmdb sp!, {r3, lr} - ldrb ip, [r0] - ldrb r1, [r0, #1] - ldrsh lr, [r3, #0x54] - ldr r2, _02072050 ; =0x04000208 - add r1, ip, r1, lsl #8 - add r1, lr, r1 - mov r1, r1, lsl #0x10 - mov lr, r1, asr #0x10 - strh lr, [r3, #0x54] - ldr ip, [r3, #0xc4] - ldr r1, [r3, #0x1c] - ldrsh ip, [ip, #4] - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - add r1, lr, r1, asr #16 - add r1, ip, r1 - strh r1, [r3, #0x16] - ldrh ip, [r2] - mov r1, #0 - strh r1, [r2] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _0207203C -_02072024: - ldrh r1, [r2, #6] - orr r1, r1, #0x10 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02072024 -_0207203C: - ldr r2, _02072050 ; =0x04000208 - add r0, r0, #2 - ldrh r1, [r2] - strh ip, [r2] - ldmia sp!, {r3, pc} - .align 2, 0 -_02072050: .word 0x04000208 - arm_func_end DseTrackEvent_TuningDeltaFull - - arm_func_start DseTrackEvent_TuningFade -DseTrackEvent_TuningFade: ; 0x02072054 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r3 - ldrb r1, [r6, #4] - ldrb r4, [r7] - ldrb r0, [r7, #1] - tst r1, #2 - ldrb r2, [r7, #2] - add r0, r4, r0, lsl #8 - mov r0, r0, lsl #0x10 - mov r5, r0, lsr #0x10 - ldr r4, [r6, #0xc4] - moveq r1, #0 - streq r1, [r6, #0x1c] - ldr r1, [r6, #0x1c] - mov r0, r2, lsl #0x18 - mov r1, r1, asr #0x10 - add r0, r1, r0, lsr #16 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - mov r1, r0, lsl #0x10 - str r1, [r6, #0x24] - cmp r5, #0 - streq r1, [r6, #0x1c] - beq _020720D4 - ldr r0, [r6, #0x1c] - subs r0, r1, r0 - moveq r5, #0 - beq _020720D4 - mov r1, r5 - bl _s32_div_f - str r0, [r6, #0x20] -_020720D4: - strh r5, [r6, #0x28] - ldr r0, [r6, #0x1c] - ldrsh r1, [r6, #0x54] - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - ldrsh r2, [r4, #4] - add r0, r1, r0, lsr #16 - ldr r1, _02072140 ; =0x04000208 - add r0, r2, r0 - strh r0, [r6, #0x16] - ldrh r3, [r1] - mov r0, #0 - strh r0, [r1] - ldr r1, [r6, #0xb4] - cmp r1, #0 - beq _0207212C -_02072114: - ldrh r0, [r1, #6] - orr r0, r0, #0x10 - strh r0, [r1, #6] - ldr r1, [r1, #0x154] - cmp r1, #0 - bne _02072114 -_0207212C: - ldr r2, _02072140 ; =0x04000208 - add r0, r7, #3 - ldrh r1, [r2] - strh r3, [r2] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02072140: .word 0x04000208 - arm_func_end DseTrackEvent_TuningFade - - arm_func_start DseTrackEvent_SetNoteRandomRegion -DseTrackEvent_SetNoteRandomRegion: ; 0x02072144 - ldrb r1, [r0] - ldrb ip, [r0, #1] - add r0, r0, #2 - mov r2, r1 - cmp r1, ip - movhi r2, ip - movhi ip, r1 - strb r2, [r3, #0xc] - strb ip, [r3, #0xd] - bx lr - arm_func_end DseTrackEvent_SetNoteRandomRegion - - arm_func_start DseTrackEvent_SetTuningJitterAmplitude -DseTrackEvent_SetTuningJitterAmplitude: ; 0x0207216C - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r0, r0, #2 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0xa] - bx lr - arm_func_end DseTrackEvent_SetTuningJitterAmplitude - - arm_func_start DseTrackEvent_SetKeyBend -DseTrackEvent_SetKeyBend: ; 0x02072184 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r2, [r4] - ldrb r1, [r4, #1] - mov r0, r3 - add r1, r1, r2, lsl #8 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 - bl DseChannel_SetKeyBend - add r0, r4, #2 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetKeyBend - - arm_func_start DseTrackEvent_SetUnknown2 -DseTrackEvent_SetUnknown2: ; 0x020721B0 - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r0, r0, #2 - add r1, r1, r2, lsl #8 - strh r1, [r3, #0x56] - bx lr - arm_func_end DseTrackEvent_SetUnknown2 - - arm_func_start DseTrackEvent_SetKeyBendRange -DseTrackEvent_SetKeyBendRange: ; 0x020721C8 - ldrb r1, [r0], #1 - strb r1, [r3, #0x59] - bx lr - arm_func_end DseTrackEvent_SetKeyBendRange - - arm_func_start DseTrackEvent_SetupKeyBendLfo -DseTrackEvent_SetupKeyBendLfo: ; 0x020721D4 - stmdb sp!, {r3, r4, r5, lr} - ldrb r5, [r0] - ldrb r4, [r0, #1] - ldrb lr, [r0, #2] - ldrb ip, [r0, #3] - ldrb r2, [r0, #4] - mov r1, #1 - add r4, r5, r4, lsl #8 - strb r1, [r3, #0x75] - strb r1, [r3, #0x76] - mov r1, r4, lsl #0x10 - strb r2, [r3, #0x77] - mov r1, r1, asr #0x10 - str r1, [r3, #0x78] - add r1, lr, ip, lsl #8 - strh r1, [r3, #0x7c] - mov r1, #0 - strh r1, [r3, #0x7e] - strh r1, [r3, #0x80] - strb r1, [r3, #0x82] - add r0, r0, #5 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseTrackEvent_SetupKeyBendLfo - - arm_func_start DseTrackEvent_SetupKeyBendLfoEnvelope -DseTrackEvent_SetupKeyBendLfoEnvelope: ; 0x0207222C - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x7e] - ldrb r2, [r0, #2] - ldrb r1, [r0, #3] - add r0, r0, #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x80] - bx lr - arm_func_end DseTrackEvent_SetupKeyBendLfoEnvelope - - arm_func_start DseTrackEvent_UseKeyBendLfo -DseTrackEvent_UseKeyBendLfo: ; 0x02072254 - ldrb r1, [r0] - add r0, r0, #1 - cmp r1, #2 - moveq r1, #1 - strb r1, [r3, #0x75] - cmp r1, #0 - moveq r1, #0 - movne r1, #1 - strb r1, [r3, #0x76] - bx lr - arm_func_end DseTrackEvent_UseKeyBendLfo - - arm_func_start DseTrackEvent_SetVolume -DseTrackEvent_SetVolume: ; 0x0207227C - stmdb sp!, {r3, r4, r5, lr} - ldrsb r4, [r0] - mov r5, #0 - ldr r2, _02072308 ; =0x82061029 - mov r1, r4, lsl #0x10 - str r1, [r3, #0x34] - str r1, [r3, #0x2c] - strh r5, [r3, #0x38] - ldr ip, [r3, #0xc4] - ldrb r1, [r3, #0x50] - ldrsb lr, [ip, #8] - ldr ip, _0207230C ; =0x04000208 - smulbb r1, r4, r1 - mul r4, lr, r1 - smull r1, lr, r2, r4 - add lr, r4, lr - mov r1, r4, lsr #0x1f - add lr, r1, lr, asr #13 - strh lr, [r3, #0x18] - ldrh r4, [ip] - strh r5, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _020722F4 -_020722DC: - ldrh r1, [r2, #6] - orr r1, r1, #0x20 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _020722DC -_020722F4: - ldr r2, _0207230C ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02072308: .word 0x82061029 -_0207230C: .word 0x04000208 - arm_func_end DseTrackEvent_SetVolume - - arm_func_start DseTrackEvent_VolumeDelta -DseTrackEvent_VolumeDelta: ; 0x02072310 - stmdb sp!, {r3, r4, r5, lr} - ldrsb r2, [r0] - ldr r1, [r3, #0x2c] - add r4, r2, r1, asr #16 - cmp r4, #0x7f - movgt r4, #0x7f - bgt _02072334 - cmp r4, #0 - movlt r4, #0 -_02072334: - mov r1, r4, lsl #0x10 - str r1, [r3, #0x34] - str r1, [r3, #0x2c] - mov r5, #0 - strh r5, [r3, #0x38] - ldrb r1, [r3, #0x50] - ldr ip, [r3, #0xc4] - ldr r2, _020723B8 ; =0x82061029 - mul r1, r4, r1 - ldrsb lr, [ip, #8] - ldr ip, _020723BC ; =0x04000208 - mul r4, lr, r1 - smull r1, lr, r2, r4 - add lr, r4, lr - mov r1, r4, lsr #0x1f - add lr, r1, lr, asr #13 - strh lr, [r3, #0x18] - ldrh r4, [ip] - strh r5, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _020723A4 -_0207238C: - ldrh r1, [r2, #6] - orr r1, r1, #0x20 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _0207238C -_020723A4: - ldr r2, _020723BC ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020723B8: .word 0x82061029 -_020723BC: .word 0x04000208 - arm_func_end DseTrackEvent_VolumeDelta - - arm_func_start DseTrackEvent_VolumeFade -DseTrackEvent_VolumeFade: ; 0x020723C0 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrsb r1, [r5, #2] - ldrb r2, [r5] - ldrb r0, [r5, #1] - mov r4, r3 - mov r1, r1, lsl #0x10 - add r0, r2, r0, lsl #8 - mov r0, r0, lsl #0x10 - str r1, [r4, #0x34] - movs r6, r0, lsr #0x10 - streq r1, [r4, #0x2c] - beq _02072410 - ldr r0, [r4, #0x2c] - subs r0, r1, r0 - moveq r6, #0 - beq _02072410 - mov r1, r6 - bl _s32_div_f - str r0, [r4, #0x30] -_02072410: - strh r6, [r4, #0x38] - add r0, r5, #3 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseTrackEvent_VolumeFade - - arm_func_start DseTrackEvent_SetExpression -DseTrackEvent_SetExpression: ; 0x0207241C - stmdb sp!, {r3, r4, r5, lr} - ldrb r4, [r0] - ldr r2, _020724A0 ; =0x82061029 - ldr lr, _020724A4 ; =0x04000208 - strb r4, [r3, #0x50] - ldr r1, [r3, #0x2c] - ldr ip, [r3, #0xc4] - mov r1, r1, asr #0x10 - mul r4, r1, r4 - ldrsb r1, [ip, #8] - mov ip, #0 - mul r4, r1, r4 - smull r1, r5, r2, r4 - add r5, r4, r5 - mov r1, r4, lsr #0x1f - add r5, r1, r5, asr #13 - strh r5, [r3, #0x18] - ldrh r4, [lr] - strh ip, [lr] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _0207248C -_02072474: - ldrh r1, [r2, #6] - orr r1, r1, #0x20 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02072474 -_0207248C: - ldr r2, _020724A4 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020724A0: .word 0x82061029 -_020724A4: .word 0x04000208 - arm_func_end DseTrackEvent_SetExpression - - arm_func_start DseTrackEvent_SetupVolumeLfo -DseTrackEvent_SetupVolumeLfo: ; 0x020724A8 - stmdb sp!, {r3, r4, r5, lr} - ldrb r5, [r0] - ldrb r1, [r0, #1] - ldrb r4, [r0, #2] - ldrb lr, [r0, #3] - ldrb ip, [r0, #4] - mov r2, #1 - add r1, r5, r1, lsl #8 - mov r1, r1, lsl #0x10 - strb r2, [r3, #0x85] - mov r2, #2 - strb r2, [r3, #0x86] - strb ip, [r3, #0x87] - mov r1, r1, asr #0x10 - str r1, [r3, #0x88] - add r1, r4, lr, lsl #8 - strh r1, [r3, #0x8c] - mov r1, #0 - strh r1, [r3, #0x8e] - strh r1, [r3, #0x90] - strb r1, [r3, #0x92] - add r0, r0, #5 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseTrackEvent_SetupVolumeLfo - - arm_func_start DseTrackEvent_SetupVolumeLfoEnvelope -DseTrackEvent_SetupVolumeLfoEnvelope: ; 0x02072504 - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x8e] - ldrb r2, [r0, #2] - ldrb r1, [r0, #3] - add r0, r0, #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x90] - bx lr - arm_func_end DseTrackEvent_SetupVolumeLfoEnvelope - - arm_func_start DseTrackEvent_UseVolumeLfo -DseTrackEvent_UseVolumeLfo: ; 0x0207252C - ldrb r1, [r0] - add r0, r0, #1 - cmp r1, #2 - moveq r1, #1 - strb r1, [r3, #0x85] - cmp r1, #0 - moveq r1, #0 - movne r1, #2 - strb r1, [r3, #0x86] - bx lr - arm_func_end DseTrackEvent_UseVolumeLfo - - arm_func_start DseTrackEvent_SetPan -DseTrackEvent_SetPan: ; 0x02072554 - stmdb sp!, {r3, lr} - ldrb lr, [r0] - mov ip, #0 - cmp lr, #0x7f - movgt lr, #0x7f - mov r1, lr, lsl #0x10 - str r1, [r3, #0x44] - str r1, [r3, #0x3c] - strh ip, [r3, #0x48] - ldr r2, [r3, #0xc4] - ldr r1, _020725D0 ; =0x04000208 - ldrsb r2, [r2, #7] - sub r2, r2, #0x40 - add r2, lr, r2 - strh r2, [r3, #0x1a] - ldrh lr, [r1] - strh ip, [r1] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _020725BC -_020725A4: - ldrh r1, [r2, #6] - orr r1, r1, #0x40 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _020725A4 -_020725BC: - ldr r2, _020725D0 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh lr, [r2] - ldmia sp!, {r3, pc} - .align 2, 0 -_020725D0: .word 0x04000208 - arm_func_end DseTrackEvent_SetPan - - arm_func_start DseTrackEvent_PanDelta -DseTrackEvent_PanDelta: ; 0x020725D4 - stmdb sp!, {r3, lr} - ldrsb r2, [r0] - ldr r1, [r3, #0x3c] - add lr, r2, r1, asr #16 - cmp lr, #0x7f - movgt lr, #0x7f - bgt _020725F8 - cmp lr, #0 - movlt lr, #0 -_020725F8: - mov r1, lr, lsl #0x10 - str r1, [r3, #0x44] - str r1, [r3, #0x3c] - mov ip, #0 - strh ip, [r3, #0x48] - ldr r2, [r3, #0xc4] - ldr r1, _02072664 ; =0x04000208 - ldrsb r2, [r2, #7] - sub r2, r2, #0x40 - add r2, lr, r2 - strh r2, [r3, #0x1a] - ldrh lr, [r1] - strh ip, [r1] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _02072650 -_02072638: - ldrh r1, [r2, #6] - orr r1, r1, #0x40 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02072638 -_02072650: - ldr r2, _02072664 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh lr, [r2] - ldmia sp!, {r3, pc} - .align 2, 0 -_02072664: .word 0x04000208 - arm_func_end DseTrackEvent_PanDelta - - arm_func_start DseTrackEvent_PanFade -DseTrackEvent_PanFade: ; 0x02072668 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrsb r1, [r5, #2] - ldrb r2, [r5] - ldrb r0, [r5, #1] - mov r4, r3 - mov r1, r1, lsl #0x10 - add r0, r2, r0, lsl #8 - mov r0, r0, lsl #0x10 - str r1, [r4, #0x44] - movs r6, r0, lsr #0x10 - streq r1, [r4, #0x3c] - beq _020726B8 - ldr r0, [r4, #0x3c] - subs r0, r1, r0 - moveq r6, #0 - beq _020726B8 - mov r1, r6 - bl _s32_div_f - str r0, [r4, #0x40] -_020726B8: - strh r6, [r4, #0x48] - add r0, r5, #3 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseTrackEvent_PanFade - - arm_func_start DseTrackEvent_SetupPanLfo -DseTrackEvent_SetupPanLfo: ; 0x020726C4 - stmdb sp!, {r3, r4, r5, lr} - ldrb r5, [r0] - ldrb r1, [r0, #1] - ldrb r4, [r0, #2] - ldrb lr, [r0, #3] - ldrb ip, [r0, #4] - mov r2, #1 - add r1, r5, r1, lsl #8 - mov r1, r1, lsl #0x10 - strb r2, [r3, #0x95] - mov r2, #3 - strb r2, [r3, #0x96] - strb ip, [r3, #0x97] - mov r1, r1, asr #0x10 - str r1, [r3, #0x98] - add r1, r4, lr, lsl #8 - strh r1, [r3, #0x9c] - mov r1, #0 - strh r1, [r3, #0x9e] - strh r1, [r3, #0xa0] - strb r1, [r3, #0xa2] - add r0, r0, #5 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseTrackEvent_SetupPanLfo - - arm_func_start DseTrackEvent_SetupPanLfoEnvelope -DseTrackEvent_SetupPanLfoEnvelope: ; 0x02072720 - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x9e] - ldrb r2, [r0, #2] - ldrb r1, [r0, #3] - add r0, r0, #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0xa0] - bx lr - arm_func_end DseTrackEvent_SetupPanLfoEnvelope - - arm_func_start DseTrackEvent_UsePanLfo -DseTrackEvent_UsePanLfo: ; 0x02072748 - ldrb r1, [r0] - add r0, r0, #1 - cmp r1, #2 - moveq r1, #1 - strb r1, [r3, #0x95] - cmp r1, #0 - moveq r1, #0 - movne r1, #3 - strb r1, [r3, #0x96] - bx lr - arm_func_end DseTrackEvent_UsePanLfo - - arm_func_start DseTrackEvent_SetupLfo -DseTrackEvent_SetupLfo: ; 0x02072770 - stmdb sp!, {r4, lr} - ldrb r2, [r0] - ldrb r1, [r0, #1] - ldrb ip, [r3, #0x61] - add r3, r3, #0x74 - add r1, r2, r1, lsl #8 - mov r1, r1, lsl #0x10 - ldrb r4, [r0, #2] - ldrb lr, [r0, #3] - ldrb r2, [r0, #4] - add r3, r3, ip, lsl #4 - mov r1, r1, asr #0x10 - strb r2, [r3, #3] - str r1, [r3, #4] - add r1, r4, lr, lsl #8 - strh r1, [r3, #8] - mov r1, #0 - strh r1, [r3, #0xa] - strh r1, [r3, #0xc] - strb r1, [r3, #0xe] - add r0, r0, #5 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetupLfo - - arm_func_start DseTrackEvent_SetupLfoEnvelope -DseTrackEvent_SetupLfoEnvelope: ; 0x020727C8 - ldrb ip, [r3, #0x61] - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r3, r3, #0x74 - add r3, r3, ip, lsl #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0xa] - ldrb r2, [r0, #2] - ldrb r1, [r0, #3] - add r0, r0, #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0xc] - bx lr - arm_func_end DseTrackEvent_SetupLfoEnvelope - - arm_func_start DseTrackEvent_SetLfoParameter -DseTrackEvent_SetLfoParameter: ; 0x020727FC - ldrb r1, [r3, #0x61] - ldrb ip, [r0] - add r2, r3, #0x74 - add r1, r2, r1, lsl #4 - ldrb r2, [r0, #1] - cmp ip, #0xa - addls pc, pc, ip, lsl #2 - b _02072930 -_0207281C: ; jump table - b _02072930 ; case 0 - b _02072848 ; case 1 - b _02072850 ; case 2 - b _02072858 ; case 3 - b _02072860 ; case 4 - b _02072868 ; case 5 - b _020728E0 ; case 6 - b _020728EC ; case 7 - b _020728FC ; case 8 - b _02072910 ; case 9 - b _02072924 ; case 10 -_02072848: - strb r2, [r3, #0x61] - b _02072930 -_02072850: - strb r2, [r1, #1] - b _02072930 -_02072858: - strb r2, [r1, #2] - b _02072930 -_02072860: - strb r2, [r1, #3] - b _02072930 -_02072868: - ldrb r3, [r1, #2] - cmp r3, #4 - addls pc, pc, r3, lsl #2 - b _020728CC -_02072878: ; jump table - b _020728CC ; case 0 - b _0207288C ; case 1 - b _0207289C ; case 2 - b _020728AC ; case 3 - b _020728BC ; case 4 -_0207288C: - mov r3, #0xa - mul r3, r2, r3 - mov r2, r3 - b _020728D8 -_0207289C: - mvn r3, #0x13 - mul r3, r2, r3 - mov r2, r3 - b _020728D8 -_020728AC: - mov r3, #0x14 - mul r3, r2, r3 - mov r2, r3 - b _020728D8 -_020728BC: - mov r3, #0xa - mul r3, r2, r3 - mov r2, r3 - b _020728D8 -_020728CC: - mov r3, #0x14 - mul r3, r2, r3 - mov r2, r3 -_020728D8: - str r2, [r1, #4] - b _02072930 -_020728E0: - add r2, r2, r2, lsl #2 - strh r2, [r1, #8] - b _02072930 -_020728EC: - mov r3, #0x14 - mul r3, r2, r3 - strh r3, [r1, #0xa] - b _02072930 -_020728FC: - ldrh r3, [r1, #0xa] - and r3, r3, #0xff00 - orr r2, r3, r2 - strh r2, [r1, #0xa] - b _02072930 -_02072910: - ldrh r3, [r1, #0xa] - and r3, r3, #0xff - orr r2, r3, r2, lsl #8 - strh r2, [r1, #0xa] - b _02072930 -_02072924: - mov r3, #0x14 - mul r3, r2, r3 - strh r3, [r1, #0xc] -_02072930: - add r0, r0, #2 - bx lr - arm_func_end DseTrackEvent_SetLfoParameter - - arm_func_start DseTrackEvent_UseLfo -DseTrackEvent_UseLfo: ; 0x02072938 - stmdb sp!, {r3, lr} - ldrb ip, [r0, #1] - ldrb r2, [r0] - ldrb lr, [r0, #2] - add r1, r3, #0x74 - cmp ip, #2 - strb r2, [r3, #0x61] - add r1, r1, r2, lsl #4 - moveq ip, #1 - strb ip, [r1, #1] - strb lr, [r1, #2] - add r0, r0, #3 - ldmia sp!, {r3, pc} - arm_func_end DseTrackEvent_UseLfo - - arm_func_start DseTrackEvent_Signal -DseTrackEvent_Signal: ; 0x0207296C - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r2, [r4] - mov ip, r1 - mov r1, #8 - strb r2, [ip, #0x16] - ldr r0, [ip, #0x28] - ldr r3, [ip, #0xa0] - ldr ip, [ip, #0x9c] - blx ip - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_Signal - - arm_func_start DseTrackEvent_Dummy2Bytes2 -DseTrackEvent_Dummy2Bytes2: ; 0x0207299C - add r0, r0, #2 - bx lr - arm_func_end DseTrackEvent_Dummy2Bytes2 - - arm_func_start sub_020729A4 -sub_020729A4: ; 0x020729A4 - ldr r0, _020729B4 ; =_022B9584 - mov r1, #0 - str r1, [r0] - bx lr - .align 2, 0 -_020729B4: .word _022B9584 - arm_func_end sub_020729A4 - - arm_func_start sub_020729B8 -sub_020729B8: ; 0x020729B8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr sb, _02072BB4 ; =_022B9584 - ldr r8, [sb] - ldrb r6, [r8, #0x86] - cmp r6, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrb r5, [r8, #0x85] - mov r1, #0 - cmp r6, #0 - str r1, [sp] - beq _02072B98 - mov fp, #3 - mov r1, #2 - mov r2, r1 - mov r3, fp - mov ip, r1 - mov lr, fp - mov r4, fp -_02072A04: - ldrb sl, [r8, #0x88] - add r7, r8, r5 - add r5, r5, #1 - sub r6, r6, #1 - and r5, r5, #0xff - cmp r5, #0x80 - moveq r5, #0 - ldrb r7, [r7, #4] - and r6, r6, #0xff - cmp sl, #0 - bne _02072B28 - tst r7, #0x80 - bne _02072A4C - add sl, sl, #1 - strb sl, [r8, #0x88] - ldr r8, [sb] - strb r7, [r8, #0x8c] - b _02072B30 -_02072A4C: - and sl, r7, #0xf0 - strb sl, [r8, #0x8a] - and r8, r7, #0xf - ldr r7, [sb] - strb r8, [r7, #0x8b] - ldr r7, [sb] - ldrb r8, [r7, #0x8a] - cmp r8, #0xc0 - bgt _02072AA8 - bge _02072AF8 - cmp r8, #0x90 - bgt _02072A8C - bge _02072AE0 - cmp r8, #0x80 - beq _02072AD8 - b _02072B1C -_02072A8C: - cmp r8, #0xa0 - bgt _02072A9C - beq _02072AE8 - b _02072B1C -_02072A9C: - cmp r8, #0xb0 - beq _02072AF0 - b _02072B1C -_02072AA8: - cmp r8, #0xe0 - bgt _02072AC0 - bge _02072B08 - cmp r8, #0xd0 - beq _02072B00 - b _02072B1C -_02072AC0: - cmp r8, #0xf0 - bgt _02072AD0 - beq _02072B10 - b _02072B1C -_02072AD0: - cmp r8, #0xff - b _02072B1C -_02072AD8: - strb r4, [r7, #0x87] - b _02072B30 -_02072AE0: - strb lr, [r7, #0x87] - b _02072B30 -_02072AE8: - strb ip, [r7, #0x87] - b _02072B30 -_02072AF0: - strb r3, [r7, #0x87] - b _02072B30 -_02072AF8: - strb r2, [r7, #0x87] - b _02072B30 -_02072B00: - strb r1, [r7, #0x87] - b _02072B30 -_02072B08: - strb fp, [r7, #0x87] - b _02072B30 -_02072B10: - mov r8, #3 - strb r8, [r7, #0x87] - b _02072B30 -_02072B1C: - mov r8, #0 - strb r8, [r7, #0x87] - b _02072B30 -_02072B28: - add r8, r8, sl - strb r7, [r8, #0x8b] -_02072B30: - ldr r7, [sb] - ldrb r8, [r7, #0x88] - add r8, r8, #1 - strb r8, [r7, #0x88] - ldr r8, [sb] - ldrb sl, [r8, #0x88] - ldrb r7, [r8, #0x87] - cmp sl, r7 - bne _02072B90 - mov r2, #0 - ldr r1, _02072BB4 ; =_022B9584 - strb r2, [r8, #0x88] - ldr r3, [r1] - mov r1, #1 - str r1, [sp] - ldrb r2, [r3, #0x8a] - ldrb r1, [r3, #0x8b] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #0x8c] - ldrb r1, [r3, #0x8d] - strb r2, [r0, #2] - strb r1, [r0, #3] - b _02072B98 -_02072B90: - cmp r6, #0 - bne _02072A04 -_02072B98: - ldr r1, _02072BB4 ; =_022B9584 - ldr r0, [sp] - ldr r2, [r1] - strb r6, [r2, #0x86] - ldr r1, [r1] - strb r5, [r1, #0x85] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02072BB4: .word _022B9584 - arm_func_end sub_020729B8 - - arm_func_start sub_02072BB8 -sub_02072BB8: ; 0x02072BB8 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc - ldr r0, _02072D94 ; =_022B9584 - ldr r0, [r0] - ldr r4, [r0] - cmp r4, #0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - add r0, sp, #8 - bl sub_020729B8 - cmp r0, #0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - add sb, r4, #0x10 - mov r6, #0 - ldr r4, _02072D98 ; =_020B0D50 - add r7, sp, #0 - mov r5, #1 - mov r8, r6 - mov fp, #0xc8 -_02072C08: - ldrb r1, [sp, #9] - ldrb r0, [sp, #8] - mla sl, r1, fp, sb - cmp r0, #0xc0 - bgt _02072C4C - bge _02072D4C - cmp r0, #0x90 - bgt _02072C38 - bge _02072CC0 - cmp r0, #0x80 - beq _02072C8C - b _02072D7C -_02072C38: - cmp r0, #0xa0 - ble _02072D7C - cmp r0, #0xb0 - beq _02072D2C - b _02072D7C -_02072C4C: - cmp r0, #0xf0 - bgt _02072C6C - bge _02072D7C - cmp r0, #0xd0 - ble _02072D7C - cmp r0, #0xe0 - beq _02072D5C - b _02072D7C -_02072C6C: - cmp r0, #0xf7 - ble _02072D7C - cmp r0, #0xff - bgt _02072D7C - cmp r0, #0xfe - blt _02072D7C - cmpne r0, #0xff - b _02072D7C -_02072C8C: - ldrb r1, [sp, #0xa] - ldrb r0, [sp, #0xb] - str r8, [sp, #4] - strb r1, [sp, #2] - strb r0, [sp, #3] - strb r8, [sp] - ldrb r0, [sl, #4] - tst r0, #1 - bne _02072D7C - mov r0, sl - mov r1, r7 - bl DseChannel_ReleaseNoteInternal - b _02072D7C -_02072CC0: - ldrb r0, [sp, #0xb] - ldrb r1, [sp, #0xa] - str r6, [sp, #4] - strb r0, [sp, #3] - strb r1, [sp, #2] - tst r0, #0xff - beq _02072D0C - mov r0, sl - mov r1, r7 - strb r5, [sp] - bl DseChannel_ReleaseNote - mov r0, sl - mov r1, r7 - bl DseChannel_AllocateNote - movs r1, r0 - beq _02072D7C - mov r0, sl - bl DseVoice_PlayNote - b _02072D7C -_02072D0C: - strb r6, [sp] - ldrb r0, [sl, #4] - tst r0, #1 - bne _02072D7C - mov r0, sl - mov r1, r7 - bl DseChannel_ReleaseNoteInternal - b _02072D7C -_02072D2C: - ldrb r0, [sp, #0xa] - ldr r2, [r4, r0, lsl #2] - cmp r2, #0 - beq _02072D7C - ldrb r1, [sp, #0xb] - mov r0, sl - blx r2 - b _02072D7C -_02072D4C: - ldrb r1, [sp, #0xa] - mov r0, sl - bl DseChannel_SetInstrument - b _02072D7C -_02072D5C: - ldrb r2, [sp, #0xa] - ldrb r1, [sp, #0xb] - mov r0, sl - add r1, r2, r1, lsl #7 - sub r1, r1, #0x2000 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 - bl DseChannel_SetKeyBend -_02072D7C: - add r0, sp, #8 - bl sub_020729B8 - cmp r0, #0 - bne _02072C08 - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02072D94: .word _022B9584 -_02072D98: .word _020B0D50 - arm_func_end sub_02072BB8 - - arm_func_start sub_02072D9C -sub_02072D9C: ; 0x02072D9C - ldrh r2, [r0, #0xe] - ldr ip, _02072DB8 ; =DseChannel_SetBank - and r2, r2, #0xff - add r1, r2, r1, lsl #8 - strh r1, [r0, #0xe] - ldrh r1, [r0, #0xe] - bx ip - .align 2, 0 -_02072DB8: .word DseChannel_SetBank - arm_func_end sub_02072D9C - - arm_func_start sub_02072DBC -sub_02072DBC: ; 0x02072DBC - ldrh r2, [r0, #0xe] - ldr ip, _02072DD8 ; =DseChannel_SetBank - bic r2, r2, #0xff - add r1, r2, r1 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bx ip - .align 2, 0 -_02072DD8: .word DseChannel_SetBank - arm_func_end sub_02072DBC - - arm_func_start sub_02072DDC -sub_02072DDC: ; 0x02072DDC - mov r1, r1, lsl #0x18 - mov r1, r1, asr #0x18 - ldr ip, _02072DF0 ; =DseChannel_SetLfoConstEnvelopeLevel - strb r1, [r0, #0x51] - bx ip - .align 2, 0 -_02072DF0: .word DseChannel_SetLfoConstEnvelopeLevel - arm_func_end sub_02072DDC - - arm_func_start sub_02072DF4 -sub_02072DF4: ; 0x02072DF4 - mov r2, #0xa - mul r2, r1, r2 - strh r2, [r0, #0x56] - bx lr - arm_func_end sub_02072DF4 - - arm_func_start sub_02072E04 -sub_02072E04: ; 0x02072E04 - stmdb sp!, {r4, lr} - mov r2, r1, lsl #0x10 - str r2, [r0, #0x34] - str r2, [r0, #0x2c] - mov r4, #0 - strh r4, [r0, #0x38] - ldrb r3, [r0, #0x50] - ldr lr, [r0, #0xc4] - ldr r2, _02072E88 ; =0x82061029 - mul ip, r1, r3 - ldrsb r1, [lr, #8] - ldr r3, _02072E8C ; =0x04000208 - mul ip, r1, ip - smull r1, lr, r2, ip - add lr, ip, lr - mov r1, ip, lsr #0x1f - add lr, r1, lr, asr #13 - strh lr, [r0, #0x18] - ldrh r2, [r3] - strh r4, [r3] - ldr r1, [r0, #0xb4] - cmp r1, #0 - beq _02072E78 -_02072E60: - ldrh r0, [r1, #6] - orr r0, r0, #0x20 - strh r0, [r1, #6] - ldr r1, [r1, #0x154] - cmp r1, #0 - bne _02072E60 -_02072E78: - ldr r1, _02072E8C ; =0x04000208 - ldrh r0, [r1] - strh r2, [r1] - ldmia sp!, {r4, pc} - .align 2, 0 -_02072E88: .word 0x82061029 -_02072E8C: .word 0x04000208 - arm_func_end sub_02072E04 - - arm_func_start sub_02072E90 -sub_02072E90: ; 0x02072E90 - mov r1, r1, lsl #0x10 - str r1, [r0, #0x44] - str r1, [r0, #0x3c] - mov r2, #0 - ldr r1, _02072EE4 ; =0x04000208 - strh r2, [r0, #0x48] - ldrh r3, [r1] - strh r2, [r1] - ldr r1, [r0, #0xb4] - cmp r1, #0 - beq _02072ED4 -_02072EBC: - ldrh r0, [r1, #6] - orr r0, r0, #0x40 - strh r0, [r1, #6] - ldr r1, [r1, #0x154] - cmp r1, #0 - bne _02072EBC -_02072ED4: - ldr r1, _02072EE4 ; =0x04000208 - ldrh r0, [r1] - strh r3, [r1] - bx lr - .align 2, 0 -_02072EE4: .word 0x04000208 - arm_func_end sub_02072E90 - - arm_func_start sub_02072EE8 -sub_02072EE8: ; 0x02072EE8 - ldr r2, _02072F30 ; =0x04000208 - strb r1, [r0, #0x50] - ldrh r3, [r2] - mov r1, #0 - strh r1, [r2] - ldr r1, [r0, #0xb4] - cmp r1, #0 - beq _02072F20 -_02072F08: - ldrh r0, [r1, #6] - orr r0, r0, #0x20 - strh r0, [r1, #6] - ldr r1, [r1, #0x154] - cmp r1, #0 - bne _02072F08 -_02072F20: - ldr r1, _02072F30 ; =0x04000208 - ldrh r0, [r1] - strh r3, [r1] - bx lr - .align 2, 0 -_02072F30: .word 0x04000208 - arm_func_end sub_02072EE8 - - arm_func_start sub_02072F34 -sub_02072F34: ; 0x02072F34 - strb r1, [r0, #0x58] - bx lr - arm_func_end sub_02072F34 - - arm_func_start sub_02072F3C -sub_02072F3C: ; 0x02072F3C - stmdb sp!, {r3, lr} - cmp r1, #0x40 - ldrb r1, [r0, #4] - orrhs r1, r1, #1 - strhsb r1, [r0, #4] - ldmhsia sp!, {r3, pc} - bic r1, r1, #1 - strb r1, [r0, #4] - bl DseVoice_ReleaseHeld - ldmia sp!, {r3, pc} - arm_func_end sub_02072F3C - - arm_func_start sub_02072F64 -sub_02072F64: ; 0x02072F64 - bx lr - arm_func_end sub_02072F64 - - arm_func_start sub_02072F68 -sub_02072F68: ; 0x02072F68 - bx lr - arm_func_end sub_02072F68 - - arm_func_start sub_02072F6C -sub_02072F6C: ; 0x02072F6C - bx lr - arm_func_end sub_02072F6C - - arm_func_start sub_02072F70 -sub_02072F70: ; 0x02072F70 - bx lr - arm_func_end sub_02072F70 - - arm_func_start sub_02072F74 -sub_02072F74: ; 0x02072F74 - strb r1, [r0, #0x5c] - mov r1, #1 - strb r1, [r0, #0x60] - bx lr - arm_func_end sub_02072F74 - - arm_func_start sub_02072F84 -sub_02072F84: ; 0x02072F84 - strb r1, [r0, #0x5a] - mov r1, #0 - strb r1, [r0, #0x60] - bx lr - arm_func_end sub_02072F84 - - arm_func_start sub_02072F94 -sub_02072F94: ; 0x02072F94 - strb r1, [r0, #0x5b] - mov r1, #0 - strb r1, [r0, #0x60] - bx lr - arm_func_end sub_02072F94 - - arm_func_start sub_02072FA4 -sub_02072FA4: ; 0x02072FA4 - bx lr - arm_func_end sub_02072FA4 - - arm_func_start sub_02072FA8 -sub_02072FA8: ; 0x02072FA8 - bx lr - arm_func_end sub_02072FA8 - - arm_func_start sub_02072FAC -sub_02072FAC: ; 0x02072FAC - stmdb sp!, {r3, lr} - ldr r0, _02072FD4 ; =_022B9584 - ldr r0, [r0] - ldr r0, [r0] - bl DseSynth_StopChannels - ldr r0, _02072FD4 ; =_022B9584 - ldr r0, [r0] - ldr r0, [r0] - bl DseSynth_ClearHeldNotes - ldmia sp!, {r3, pc} - .align 2, 0 -_02072FD4: .word _022B9584 - arm_func_end sub_02072FAC - - arm_func_start sub_02072FD8 -sub_02072FD8: ; 0x02072FD8 - ldr r0, _02072FF4 ; =_022B9584 - mov r1, #0 - ldr r0, [r0] - ldr ip, _02072FF8 ; =DseSynth_SetBankAndSequence - mov r2, r1 - ldr r0, [r0] - bx ip - .align 2, 0 -_02072FF4: .word _022B9584 -_02072FF8: .word DseSynth_SetBankAndSequence - arm_func_end sub_02072FD8 - - arm_func_start sub_02072FFC -sub_02072FFC: ; 0x02072FFC - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - bl DseChannel_DeallocateVoices - ldr r1, _02073074 ; =0x04000208 - mov r0, #0 - ldrh r5, [r1] - strh r0, [r1] - ldr lr, [r4, #0xb8] - cmp lr, #0 - ldreqh r0, [r1] - streqh r5, [r1] - ldmeqia sp!, {r3, r4, r5, pc} - mov ip, lr - mvn r1, #0 - mov r3, r0 -_02073038: - str r1, [lr, #4] - strb r3, [ip, #1] - ldr r0, [ip, #8] - cmp r0, #0 - movne ip, r0 - bne _02073038 - ldr r0, _02073078 ; =DRIVER_WORK - ldr r1, _02073074 ; =0x04000208 - ldr r2, [r0, #0x650] - str r2, [ip, #8] - str lr, [r0, #0x650] - str r3, [r4, #0xb8] - ldrh r0, [r1] - strh r5, [r1] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02073074: .word 0x04000208 -_02073078: .word DRIVER_WORK - arm_func_end sub_02072FFC - - arm_func_start sub_0207307C -sub_0207307C: ; 0x0207307C - mov r1, #0 - strb r1, [r0, #7] - bx lr - arm_func_end sub_0207307C - - arm_func_start sub_02073088 -sub_02073088: ; 0x02073088 - mov r1, #1 - strb r1, [r0, #7] - bx lr - arm_func_end sub_02073088 - - arm_func_start sub_02073094 -sub_02073094: ; 0x02073094 - ldr ip, _020730A4 ; =SoundEnvelopeParameters_CheckValidity - strb r1, [r0, #0x72] - add r0, r0, #0x64 - bx ip - .align 2, 0 -_020730A4: .word SoundEnvelopeParameters_CheckValidity - arm_func_end sub_02073094 - - arm_func_start sub_020730A8 -sub_020730A8: ; 0x020730A8 - ldr ip, _020730B8 ; =SoundEnvelopeParameters_CheckValidity - strb r1, [r0, #0x6d] - add r0, r0, #0x64 - bx ip - .align 2, 0 -_020730B8: .word SoundEnvelopeParameters_CheckValidity - arm_func_end sub_020730A8 - - arm_func_start sub_020730BC -sub_020730BC: ; 0x020730BC - ldr ip, _020730CC ; =SoundEnvelopeParameters_CheckValidity - strb r1, [r0, #0x6e] - add r0, r0, #0x64 - bx ip - .align 2, 0 -_020730CC: .word SoundEnvelopeParameters_CheckValidity - arm_func_end sub_020730BC - - arm_func_start sub_020730D0 -sub_020730D0: ; 0x020730D0 - ldr ip, _020730E0 ; =SoundEnvelopeParameters_CheckValidity - strb r1, [r0, #0x71] - add r0, r0, #0x64 - bx ip - .align 2, 0 -_020730E0: .word SoundEnvelopeParameters_CheckValidity - arm_func_end sub_020730D0 - - arm_func_start sub_020730E4 -sub_020730E4: ; 0x020730E4 - ldrb r2, [r0, #0x61] - add r1, r1, r1, lsl #2 - add r0, r0, r2, lsl #4 - strh r1, [r0, #0x7c] - bx lr - arm_func_end sub_020730E4 - - arm_func_start sub_020730F8 -sub_020730F8: ; 0x020730F8 - and r3, r1, #2 - add r2, r0, #0x74 - strb r3, [r0, #0x61] - add r2, r2, r3, lsl #4 - mov r0, r1, asr #2 - strb r0, [r2, #1] - add r0, r3, #1 - strb r0, [r2, #2] - bx lr - arm_func_end sub_020730F8 - - arm_func_start sub_0207311C -sub_0207311C: ; 0x0207311C - ldrb r2, [r0, #0x61] - add r0, r0, r2, lsl #4 - strb r1, [r0, #0x77] - bx lr - arm_func_end sub_0207311C - - arm_func_start sub_0207312C -sub_0207312C: ; 0x0207312C - ldrb r2, [r0, #0x61] - add r0, r0, #0x74 - add r0, r0, r2, lsl #4 - ldrb r2, [r0, #2] - cmp r2, #4 - addls pc, pc, r2, lsl #2 - b _020731AC -_02073148: ; jump table - b _020731AC ; case 0 - b _0207315C ; case 1 - b _02073170 ; case 2 - b _02073184 ; case 3 - b _02073198 ; case 4 -_0207315C: - mov r2, #0xa - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 - b _020731BC -_02073170: - mvn r2, #0x13 - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 - b _020731BC -_02073184: - mov r2, #0x14 - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 - b _020731BC -_02073198: - mov r2, #0xa - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 - b _020731BC -_020731AC: - mov r2, #0x14 - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 -_020731BC: - str r1, [r0, #4] - bx lr - arm_func_end sub_0207312C - - arm_func_start sub_020731C4 -sub_020731C4: ; 0x020731C4 - mov r2, #0x14 - mul r2, r1, r2 - ldrb r1, [r0, #0x61] - add r0, r0, r1, lsl #4 - strh r2, [r0, #0x7e] - bx lr - arm_func_end sub_020731C4 - - arm_func_start sub_020731DC -sub_020731DC: ; 0x020731DC - mov r2, #0x14 - mul r2, r1, r2 - ldrb r1, [r0, #0x61] - add r0, r0, r1, lsl #4 - strh r2, [r0, #0x80] - bx lr - arm_func_end sub_020731DC - - arm_func_start sub_020731F4 -sub_020731F4: ; 0x020731F4 - strb r1, [r0, #0x59] - bx lr - arm_func_end sub_020731F4 - - arm_func_start sub_020731FC -sub_020731FC: ; 0x020731FC - bx lr - arm_func_end sub_020731FC - - arm_func_start sub_02073200 -sub_02073200: ; 0x02073200 - bx lr - arm_func_end sub_02073200 - - arm_func_start sub_02073204 -sub_02073204: ; 0x02073204 - bx lr - arm_func_end sub_02073204 - - arm_func_start DseSynth_Reset -DseSynth_Reset: ; 0x02073208 - stmdb sp!, {r4, lr} - ldr r1, _02073274 ; =DRIVER_WORK - mov r2, #1 - ldrsb r3, [r1, #0x41] - mov r4, #0 - mov r1, #0x7f - strb r3, [r0, #2] - strb r2, [r0, #3] - strh r4, [r0, #4] - strb r1, [r0, #6] - mov r1, #0x40 - strb r1, [r0, #7] - ldrb ip, [r0, #2] - ldrsb r1, [r0, #6] - ldr r2, _02073278 ; =0x81020409 - ldr r3, _0207327C ; =_022B7A30 - smulbb ip, ip, r1 - smull r1, lr, r2, ip - add lr, ip, lr - mov r1, ip, lsr #0x1f - add lr, r1, lr, asr #6 - strb lr, [r0, #8] - strb r4, [r0, #9] - strb r4, [r0, #0xa] - ldrh r1, [r3, #0x2e] - strb r1, [r0, #0xb] - ldmia sp!, {r4, pc} - .align 2, 0 -_02073274: .word DRIVER_WORK -_02073278: .word 0x81020409 -_0207327C: .word _022B7A30 - arm_func_end DseSynth_Reset - - arm_func_start DseSynth_AllocateNew -DseSynth_AllocateNew: ; 0x02073280 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r0, #0xc8 - mul r0, r5, r0 - mov r2, r1 - add r0, r0, #0x10 - mov r1, #0x10 - bl DseMem_Allocate - movs r4, r0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r1, #0 - strb r1, [r4] - strb r5, [r4, #1] - str r1, [r4, #0xc] - bl DseSynth_Reset - cmp r5, #0 - add r1, r4, #0x10 - mov r2, #0 - ble _02073300 - mov r0, r2 -_020732D4: - str r0, [r1] - strb r2, [r1, #5] - str r0, [r1, #0xb4] - str r0, [r1, #0xb8] - str r0, [r1, #0xbc] - str r0, [r1, #0xc0] - add r2, r2, #1 - str r4, [r1, #0xc4] - cmp r2, r5 - add r1, r1, #0xc8 - blt _020732D4 -_02073300: - ldr r1, _02073348 ; =0x04000208 - mov r0, #0 - ldrh r3, [r1] - ldr r2, _0207334C ; =_022B7988 - strh r0, [r1] - ldr r0, [r2] - cmp r0, #0 - beq _02073330 -_02073320: - add r2, r0, #0xc - ldr r0, [r0, #0xc] - cmp r0, #0 - bne _02073320 -_02073330: - ldr r1, _02073348 ; =0x04000208 - str r4, [r2] - ldrh r0, [r1] - mov r0, r4 - strh r3, [r1] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02073348: .word 0x04000208 -_0207334C: .word _022B7988 - arm_func_end DseSynth_AllocateNew - - arm_func_start DseSynth_Unload -DseSynth_Unload: ; 0x02073350 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl DseSynth_StopChannels - ldr r2, _020733B4 ; =0x04000208 - mov r0, r5 - ldrh r4, [r2] - mov r1, #0 - strh r1, [r2] - bl DseSynth_ClearHeldNotes - ldr r1, _020733B8 ; =_022B7988 - b _02073380 -_0207337C: - add r1, r0, #0xc -_02073380: - ldr r0, [r1] - cmp r0, #0 - cmpne r0, r5 - bne _0207337C - cmp r0, r5 - ldreq r0, [r5, #0xc] - ldr r2, _020733B4 ; =0x04000208 - streq r0, [r1] - ldrh r1, [r2] - mov r0, r5 - strh r4, [r2] - bl DseMem_Free - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020733B4: .word 0x04000208 -_020733B8: .word _022B7988 - arm_func_end DseSynth_Unload - - arm_func_start DseSynth_ClearHeldNotes -DseSynth_ClearHeldNotes: ; 0x020733BC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldrb r3, [r0, #1] - add r1, r0, #0x10 - mov r2, #0 - cmp r3, #0 - ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - ldr r7, _02073450 ; =0x04000208 - ldr ip, _02073454 ; =DRIVER_WORK - mvn r5, #0 - mov r4, r2 - mov r6, r2 -_020733E8: - ldrh r3, [r7] - strh r6, [r7] - ldr sb, [r1, #0xb8] - cmp sb, #0 - ldreqh lr, [r7] - streqh r3, [r7] - beq _02073438 - mov r8, sb -_02073408: - str r5, [sb, #4] - strb r4, [r8, #1] - ldr lr, [r8, #8] - cmp lr, #0 - movne r8, lr - bne _02073408 - ldr lr, [ip, #0x650] - str lr, [r8, #8] - str sb, [ip, #0x650] - str r4, [r1, #0xb8] - ldrh lr, [r7] - strh r3, [r7] -_02073438: - ldrb r3, [r0, #1] - add r2, r2, #1 - add r1, r1, #0xc8 - cmp r2, r3 - blt _020733E8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02073450: .word 0x04000208 -_02073454: .word DRIVER_WORK - arm_func_end DseSynth_ClearHeldNotes - - arm_func_start DseSynth_ResetAndSetBankAndSequence -DseSynth_ResetAndSetBankAndSequence: ; 0x02073458 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl DseSynth_Reset - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl DseSynth_SetBankAndSequence - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseSynth_ResetAndSetBankAndSequence - - arm_func_start DseSynth_StopChannels -DseSynth_StopChannels: ; 0x02073480 - stmdb sp!, {r3, r4, r5, lr} - ldrb r5, [r0, #1] - add r4, r0, #0x10 - cmp r5, #0 - ldmeqia sp!, {r3, r4, r5, pc} -_02073494: - mov r0, r4 - bl DseChannel_DeallocateVoices - subs r5, r5, #1 - add r4, r4, #0xc8 - bne _02073494 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseSynth_StopChannels - - arm_func_start DseSynth_ResetAllVoiceTimersAndVolumes -DseSynth_ResetAllVoiceTimersAndVolumes: ; 0x020734AC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r3, _02073500 ; =0x04000208 - mov r2, #0 - ldrh r6, [r3] - mov r7, r1 - add r4, r0, #0x10 - strh r2, [r3] - strb r7, [r0, #9] - ldrb r5, [r0, #1] - cmp r5, #0 - beq _020734F0 -_020734D8: - mov r0, r4 - mov r1, r7 - bl DseChannel_ResetTimerAndVolumeForVoices - subs r5, r5, #1 - add r4, r4, #0xc8 - bne _020734D8 -_020734F0: - ldr r1, _02073500 ; =0x04000208 - ldrh r0, [r1] - strh r6, [r1] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02073500: .word 0x04000208 - arm_func_end DseSynth_ResetAllVoiceTimersAndVolumes - - arm_func_start DseSynth_RestoreHeldNotes -DseSynth_RestoreHeldNotes: ; 0x02073504 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r2, _02073568 ; =0x04000208 - ldrb r6, [r0, #1] - ldrh r4, [r2] - mov r1, #0 - cmp r6, #0 - strh r1, [r2] - add r5, r0, #0x10 - beq _02073558 -_02073528: - ldr r7, [r5, #0xb8] - cmp r7, #0 - beq _0207354C -_02073534: - mov r0, r5 - mov r1, r7 - bl DseVoice_PlayNote - ldr r7, [r7, #8] - cmp r7, #0 - bne _02073534 -_0207354C: - subs r6, r6, #1 - add r5, r5, #0xc8 - bne _02073528 -_02073558: - ldr r1, _02073568 ; =0x04000208 - ldrh r0, [r1] - strh r4, [r1] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02073568: .word 0x04000208 - arm_func_end DseSynth_RestoreHeldNotes - - arm_func_start DseSynth_SetGlobalVolumeIndex -DseSynth_SetGlobalVolumeIndex: ; 0x0207356C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r3, _02073644 ; =_022B7370 - ldr r4, _02073648 ; =0x81020409 - ldrsb r5, [r3, r1] - add r3, r0, #0x10 - mov ip, #0 - strb r5, [r0, #2] - strb r1, [r0, #3] - ldrb r5, [r0, #2] - ldrsb r1, [r0, #6] - smulbb r5, r5, r1 - smull r1, r6, r4, r5 - add r6, r5, r6 - mov r1, r5, lsr #0x1f - add r6, r1, r6, asr #6 - strb r6, [r0, #8] - ldrb r1, [r0, #1] - cmp r1, #0 - ldmleia sp!, {r4, r5, r6, r7, r8, pc} - ldr r6, _0207364C ; =0x04000208 - mov r5, ip -_020735C0: - ldr r4, [r3, #0x2c] - ldrb r1, [r3, #0x50] - mov r4, r4, asr #0x10 - ldrsb lr, [r0, #8] - mul r1, r4, r1 - mul r7, lr, r1 - ldr r4, _02073650 ; =0x82061029 - mov r1, r7, lsr #0x1f - smull lr, r8, r4, r7 - add r8, r7, r8 - add r8, r1, r8, asr #13 - strh r8, [r3, #0x18] - cmp r2, #1 - bne _0207362C - ldrh r7, [r6] - strh r5, [r6] - ldr r4, [r3, #0xb4] - cmp r4, #0 - beq _02073624 -_0207360C: - ldrh r1, [r4, #6] - orr r1, r1, #0x20 - strh r1, [r4, #6] - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _0207360C -_02073624: - ldrh r1, [r6] - strh r7, [r6] -_0207362C: - ldrb r1, [r0, #1] - add ip, ip, #1 - add r3, r3, #0xc8 - cmp ip, r1 - blt _020735C0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02073644: .word _022B7370 -_02073648: .word 0x81020409 -_0207364C: .word 0x04000208 -_02073650: .word 0x82061029 - arm_func_end DseSynth_SetGlobalVolumeIndex - - arm_func_start DseSynth_SetBend -DseSynth_SetBend: ; 0x02073654 - stmdb sp!, {r3, r4, r5, lr} - strh r1, [r0, #4] - ldrb r3, [r0, #1] - add r1, r0, #0x10 - mov r2, #0 - cmp r3, #0 - ldmleia sp!, {r3, r4, r5, pc} - ldr lr, _020736E4 ; =0x04000208 - mov ip, r2 -_02073678: - ldr r3, [r1, #0x1c] - ldrsh r4, [r1, #0x54] - mov r3, r3, asr #0x10 - mov r3, r3, lsl #0x10 - ldrsh r5, [r0, #4] - add r3, r4, r3, asr #16 - add r3, r5, r3 - strh r3, [r1, #0x16] - ldrh r5, [lr] - strh ip, [lr] - ldr r4, [r1, #0xb4] - cmp r4, #0 - beq _020736C4 -_020736AC: - ldrh r3, [r4, #6] - orr r3, r3, #0x10 - strh r3, [r4, #6] - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _020736AC -_020736C4: - ldrh r3, [lr] - add r2, r2, #1 - add r1, r1, #0xc8 - strh r5, [lr] - ldrb r3, [r0, #1] - cmp r2, r3 - blt _02073678 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020736E4: .word 0x04000208 - arm_func_end DseSynth_SetBend - - arm_func_start DseSynth_SetVolume -DseSynth_SetVolume: ; 0x020736E8 - stmdb sp!, {r4, r5, r6, lr} - strb r1, [r0, #6] - ldrb r4, [r0, #2] - ldrsb r2, [r0, #6] - ldr r3, _020737AC ; =0x81020409 - add r1, r0, #0x10 - smulbb r4, r4, r2 - smull r2, r5, r3, r4 - add r5, r4, r5 - mov r2, r4, lsr #0x1f - add r5, r2, r5, asr #6 - strb r5, [r0, #8] - ldrb r3, [r0, #1] - mov r2, #0 - cmp r3, #0 - ldmleia sp!, {r4, r5, r6, pc} - ldr r4, _020737B0 ; =0x04000208 - ldr ip, _020737B4 ; =0x82061029 - mov lr, r2 -_02073734: - ldr r5, [r1, #0x2c] - ldrb r3, [r1, #0x50] - mov r5, r5, asr #0x10 - ldrsb r6, [r0, #8] - mul r3, r5, r3 - mul r5, r6, r3 - smull r3, r6, ip, r5 - add r6, r5, r6 - mov r3, r5, lsr #0x1f - add r6, r3, r6, asr #13 - strh r6, [r1, #0x18] - ldrh r6, [r4] - strh lr, [r4] - ldr r5, [r1, #0xb4] - cmp r5, #0 - beq _0207378C -_02073774: - ldrh r3, [r5, #6] - orr r3, r3, #0x20 - strh r3, [r5, #6] - ldr r5, [r5, #0x154] - cmp r5, #0 - bne _02073774 -_0207378C: - ldrh r3, [r4] - add r2, r2, #1 - add r1, r1, #0xc8 - strh r6, [r4] - ldrb r3, [r0, #1] - cmp r2, r3 - blt _02073734 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_020737AC: .word 0x81020409 -_020737B0: .word 0x04000208 -_020737B4: .word 0x82061029 - arm_func_end DseSynth_SetVolume - - arm_func_start DseSynth_SetPan -DseSynth_SetPan: ; 0x020737B8 - stmdb sp!, {r3, r4, r5, lr} - strb r1, [r0, #7] - ldrb r3, [r0, #1] - add r1, r0, #0x10 - mov r2, #0 - cmp r3, #0 - ldmleia sp!, {r3, r4, r5, pc} - ldr lr, _02073848 ; =0x04000208 - mov ip, r2 -_020737DC: - ldr r3, [r1, #0xc4] - ldr r4, [r1, #0x3c] - ldrsb r3, [r3, #7] - mov r4, r4, asr #0x10 - and r4, r4, #0xff - sub r3, r3, #0x40 - add r3, r4, r3 - strh r3, [r1, #0x1a] - ldrh r5, [lr] - strh ip, [lr] - ldr r4, [r1, #0xb4] - cmp r4, #0 - beq _02073828 -_02073810: - ldrh r3, [r4, #6] - orr r3, r3, #0x40 - strh r3, [r4, #6] - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _02073810 -_02073828: - ldrh r3, [lr] - add r2, r2, #1 - add r1, r1, #0xc8 - strh r5, [lr] - ldrb r3, [r0, #1] - cmp r2, r3 - blt _020737DC - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02073848: .word 0x04000208 - arm_func_end DseSynth_SetPan - - arm_func_start DseSynth_SetBankAndSequence -DseSynth_SetBankAndSequence: ; 0x0207384C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - ldr r3, _020738D8 ; =DRIVER_WORK - mov sl, r0 - ldrsb r6, [r3, #0x3d] - mov r7, #0 - mov sb, r1 - strb r7, [r3, #0x3d] - ldrb r0, [sl, #1] - mov r8, r2 - add r5, sl, #0x10 - cmp r0, #0 - ble _020738CC - mov r0, sb, lsl #0x10 - mov r4, r0, lsr #0x10 -_02073884: - mov r0, r5 - bl DseChannel_DeallocateVoices - mov r0, r5 - mov r1, r8 - bl DseChannel_Init - cmp sb, #0 - blt _020738B8 - mov r0, r5 - mov r1, r4 - bl DseChannel_SetBank - mov r0, r5 - mov r1, r4 - bl DseChannel_SetInstrument -_020738B8: - ldrb r0, [sl, #1] - add r7, r7, #1 - add r5, r5, #0xc8 - cmp r7, r0 - blt _02073884 -_020738CC: - ldr r0, _020738D8 ; =DRIVER_WORK - strb r6, [r0, #0x3d] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_020738D8: .word DRIVER_WORK - arm_func_end DseSynth_SetBankAndSequence - - arm_func_start DseChannel_Init -DseChannel_Init: ; 0x020738DC - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - str r1, [r4] - mov r0, #0 - strb r0, [r4, #4] - strb r0, [r4, #6] - mov r1, #1 - strb r1, [r4, #7] - ldr r1, _02073A80 ; =_022B7A30 - strb r0, [r4, #8] - ldrh r3, [r1, #0x2e] - ldr r1, _02073A84 ; =DRIVER_WORK - mov r2, #0x7f - strb r3, [r4, #9] - strh r0, [r4, #0xa] - strb r0, [r4, #0xc] - strb r0, [r4, #0xd] - add r1, r1, #0x600 - ldrsb ip, [r1, #0x74] - ldrsb r3, [r1, #0x94] - add r3, r3, ip, lsl #8 - strh r3, [r4, #0xe] - strh r0, [r4, #0x10] - strh r0, [r4, #0x14] - str r0, [r4, #0x1c] - strh r0, [r4, #0x28] - ldrsb r3, [r1, #0x7b] - mov r3, r3, lsl #0x10 - str r3, [r4, #0x2c] - strh r0, [r4, #0x38] - ldrsb r3, [r1, #0x7e] - mov r3, r3, lsl #0x10 - str r3, [r4, #0x3c] - strh r0, [r4, #0x48] - strh r0, [r4, #0x54] - ldrsb r3, [r1, #0x7f] - strb r3, [r4, #0x50] - ldrsb r1, [r1, #0x75] - strb r1, [r4, #0x51] - strh r0, [r4, #0x52] - strh r0, [r4, #0x56] - strb r2, [r4, #0x58] - strb r0, [r4, #0x59] - strb r0, [r4, #0x5a] - strb r0, [r4, #0x5b] - strb r0, [r4, #0x5c] - strb r0, [r4, #0x5d] - strb r0, [r4, #0x5e] - strb r0, [r4, #0x5f] - strb r0, [r4, #0x60] - mov r2, r0 -_020739A8: - add r1, r4, r0, lsl #4 - strb r2, [r1, #0x75] - add r0, r0, #1 - strb r2, [r1, #0x76] - cmp r0, #4 - blt _020739A8 - add r0, r4, #0x64 - bl SoundEnvelopeParameters_Reset - mov r0, #0 - ldr r1, _02073A88 ; =0x04000208 - str r0, [r4, #0xb4] - ldrh r5, [r1] - strh r0, [r1] - ldr lr, [r4, #0xb8] - cmp lr, #0 - ldreqh r0, [r1] - streqh r5, [r1] - beq _02073A34 - mov ip, lr - mvn r1, #0 - mov r3, r0 -_020739FC: - str r1, [lr, #4] - strb r3, [ip, #1] - ldr r0, [ip, #8] - cmp r0, #0 - movne ip, r0 - bne _020739FC - ldr r0, _02073A84 ; =DRIVER_WORK - ldr r1, _02073A88 ; =0x04000208 - ldr r2, [r0, #0x650] - str r2, [ip, #8] - str lr, [r0, #0x650] - str r3, [r4, #0xb8] - ldrh r0, [r1] - strh r5, [r1] -_02073A34: - mov r1, #0 - str r1, [r4, #0xbc] - ldr r0, _02073A84 ; =DRIVER_WORK - str r1, [r4, #0xc0] - strh r1, [r4, #0x16] - add r0, r0, #0x600 - ldrsb r3, [r0, #0x7b] - ldrsb r0, [r0, #0x7f] - ldr r1, _02073A8C ; =0x82061029 - mov r2, #0x40 - smulbb r0, r3, r0 - rsb r3, r0, r0, lsl #7 - smull r0, ip, r1, r3 - add ip, r3, ip - mov r0, r3, lsr #0x1f - add ip, r0, ip, asr #13 - strh ip, [r4, #0x18] - strh r2, [r4, #0x1a] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02073A80: .word _022B7A30 -_02073A84: .word DRIVER_WORK -_02073A88: .word 0x04000208 -_02073A8C: .word 0x82061029 - arm_func_end DseChannel_Init - - arm_func_start DseChannel_DeallocateVoices -DseChannel_DeallocateVoices: ; 0x02073A90 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r6, [r0, #0xb4] - mov r1, #0 - str r1, [r0, #0xb4] - cmp r6, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - ldr r8, _02073B10 ; =_022B7A30 - mov r5, r1 - mov r4, r1 -_02073AB4: - ldr r7, [r6, #0x154] - add r0, r6, #0x3c - strh r5, [r6, #4] - str r5, [r6, #0x158] - str r5, [r6, #0x154] - bl SoundEnvelope_Stop - ldr r0, [r6, #0x14c] - cmp r7, #0 - and r0, r0, #0xff - str r0, [r6, #0x14c] - str r4, [r6] - strh r4, [r6, #0x18] - ldrh r2, [r6, #0xa] - ldrh r1, [r8, #0x32] - mov r6, r7 - mvn r0, r2 - and r0, r1, r0 - strh r0, [r8, #0x32] - ldrh r0, [r8, #0x36] - orr r0, r0, r2 - strh r0, [r8, #0x36] - bne _02073AB4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02073B10: .word _022B7A30 - arm_func_end DseChannel_DeallocateVoices - - arm_func_start DseChannel_ResetTimerAndVolumeForVoices -DseChannel_ResetTimerAndVolumeForVoices: ; 0x02073B14 - cmp r1, #1 - bne _02073B5C - ldrb r1, [r0, #4] - orr r1, r1, #0x40 - strb r1, [r0, #4] - ldr r2, [r0, #0xb4] - cmp r2, #0 - bxeq lr - mov r1, #0 -_02073B38: - str r1, [r2, #0x13c] - str r1, [r2, #0x140] - ldrh r0, [r2, #6] - orr r0, r0, #0x30 - strh r0, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02073B38 - bx lr -_02073B5C: - ldr r2, [r0, #0xb4] - cmp r2, #0 - beq _02073B80 -_02073B68: - ldrh r1, [r2, #6] - orr r1, r1, #0x30 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02073B68 -_02073B80: - ldrb r1, [r0, #4] - bic r1, r1, #0x40 - strb r1, [r0, #4] - bx lr - arm_func_end DseChannel_ResetTimerAndVolumeForVoices - - arm_func_start DseChannel_SetBank -DseChannel_SetBank: ; 0x02073B90 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, r1 - strh r1, [r4, #0xe] - bl DseSwd_GetBankById - str r0, [r4, #0xbc] - cmp r0, #0 - moveq r0, #0 - streq r0, [r4, #0xc0] - ldmeqia sp!, {r4, pc} - ldrh r1, [r4, #0x10] - mov r0, r4 - bl DseChannel_SetInstrument - ldmia sp!, {r4, pc} - arm_func_end DseChannel_SetBank - - arm_func_start DseChannel_SetInstrument -DseChannel_SetInstrument: ; 0x02073BC8 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r5, r0 - ldr r0, [r5, #0xbc] - mov r4, r1 - cmp r0, #0 - bne _02073BF0 - mov r0, #0 - str r0, [r5, #0xc0] - strh r0, [r5, #0x10] - b _02073C4C -_02073BF0: - mov r0, r4, lsl #0x10 - mov r1, r0, asr #0x10 - strh r1, [r5, #0x10] - ldr r0, [r5, #0xbc] - bl DseSwd_GetInstrument - movs lr, r0 - beq _02073C48 - mov r6, #0 - strb r6, [r5, #0x59] - add r7, lr, #0x10 - add r8, r5, #0x74 - mov ip, r6 -_02073C20: - ldrb r0, [r7, #1] - add r6, r6, #1 - cmp r0, #0 - ldmneia r7, {r0, r1, r2, r3} - stmneia r8, {r0, r1, r2, r3} - streqb ip, [r8, #1] - cmp r6, #4 - add r7, r7, #0x10 - add r8, r8, #0x10 - blt _02073C20 -_02073C48: - str lr, [r5, #0xc0] -_02073C4C: - add r0, r5, #0x64 - bl SoundEnvelopeParameters_Reset - mov r0, r4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - arm_func_end DseChannel_SetInstrument - - arm_func_start DseChannel_SetLfoConstEnvelopeLevel -DseChannel_SetLfoConstEnvelopeLevel: ; 0x02073C5C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - strb r5, [r0, #0x51] - ldr r4, [r0, #0xb4] - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} -_02073C74: - mov r1, r5 - add r0, r4, #0x5c - bl SoundLfoBank_SetConstEnvelopes - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _02073C74 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseChannel_SetLfoConstEnvelopeLevel - - arm_func_start DseChannel_SetKeyBend -DseChannel_SetKeyBend: ; 0x02073C90 - strh r1, [r0, #0x52] - ldr r2, [r0, #0xb4] - cmp r2, #0 - bxeq lr - mov r3, r1, lsl #8 -_02073CA4: - ldrb r0, [r2, #0xf] - mul r1, r0, r3 - mov r0, r1, asr #0xc - add r0, r1, r0, lsr #19 - mov r0, r0, asr #0xd - strh r0, [r2, #0x10] - ldrh r0, [r2, #6] - orr r0, r0, #0x10 - strh r0, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02073CA4 - bx lr - arm_func_end DseChannel_SetKeyBend - - arm_func_start DseChannel_AllocateNote -DseChannel_AllocateNote: ; 0x02073CD8 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrb r2, [r5, #0xd] - mov r4, r1 - cmp r2, #0 - beq _02073D18 - ldrb r0, [r5, #0xc] - sub r0, r2, r0 - add r6, r0, #1 - bl DseUtil_GetRandomNumber - mul r1, r6, r0 - mov r0, r1, asr #0xe - ldrb r2, [r5, #0xc] - add r0, r1, r0, lsr #17 - add r0, r2, r0, asr #15 - strb r0, [r4, #2] -_02073D18: - ldr r1, _02073D64 ; =DRIVER_WORK - ldr r0, [r1, #0x650] - cmp r0, #0 - moveq r0, #0 - ldrne r2, [r0, #8] - strne r2, [r1, #0x650] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - ldr r3, [r4] - ldr r2, [r4, #4] - mov r1, #1 - str r3, [r0] - str r2, [r0, #4] - strb r1, [r0, #1] - ldr r1, [r5, #0xb8] - str r1, [r0, #8] - str r0, [r5, #0xb8] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02073D64: .word DRIVER_WORK - arm_func_end DseChannel_AllocateNote - - arm_func_start DseChannel_ReleaseNoteInternal -DseChannel_ReleaseNoteInternal: ; 0x02073D68 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r0 - ldr r4, [r7, #0xb8] - mov r6, r1 - cmp r4, #0 - add r5, r7, #0xb8 - beq _02073DE4 - ldrb r1, [r6, #2] -_02073D88: - ldrb r0, [r4, #2] - cmp r0, r1 - bne _02073DD4 - ldr r8, [r7, #0xb4] - cmp r8, #0 - beq _02073DC8 -_02073DA0: - ldrb r1, [r8, #0xd] - ldrb r0, [r6, #2] - cmp r1, r0 - bne _02073DBC - mov r0, r7 - mov r1, r8 - bl DseVoice_Release -_02073DBC: - ldr r8, [r8, #0x154] - cmp r8, #0 - bne _02073DA0 -_02073DC8: - ldr r0, [r4, #8] - str r0, [r5] - b _02073DE4 -_02073DD4: - add r5, r4, #8 - ldr r4, [r4, #8] - cmp r4, #0 - bne _02073D88 -_02073DE4: - ldr r0, _02073E0C ; =DRIVER_WORK - mvn r2, #0 - ldr r3, [r0, #0x650] - mov r1, #0 - str r3, [r4, #8] - str r4, [r0, #0x650] - str r2, [r4, #4] - mov r0, r4 - strb r1, [r4, #1] - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02073E0C: .word DRIVER_WORK - arm_func_end DseChannel_ReleaseNoteInternal - - arm_func_start DseChannel_ChangeNote -DseChannel_ChangeNote: ; 0x02073E10 - stmdb sp!, {r4, lr} - ldr r4, [r0, #0xb8] - cmp r4, #0 - beq _02073E54 -_02073E20: - ldrb r3, [r4, #2] - cmp r3, r2 - bne _02073E48 - ldr lr, [r1] - ldr ip, [r1, #4] - mov r3, #1 - str lr, [r4] - str ip, [r4, #4] - strb r3, [r4, #1] - b _02073E54 -_02073E48: - ldr r4, [r4, #8] - cmp r4, #0 - bne _02073E20 -_02073E54: - ldr ip, [r0, #0xb4] - cmp ip, #0 - ldmeqia sp!, {r4, pc} -_02073E60: - ldrb r0, [ip, #0xd] - cmp r0, r2 - bne _02073E90 - ldrb r0, [r1, #2] - strb r0, [ip, #0xd] - ldrb r3, [r1, #2] - ldrsh r0, [ip, #0x14] - add r0, r0, r3, lsl #8 - strh r0, [ip, #0x12] - ldrh r0, [ip, #6] - orr r0, r0, #0x10 - strh r0, [ip, #6] -_02073E90: - ldr ip, [ip, #0x154] - cmp ip, #0 - bne _02073E60 - ldmia sp!, {r4, pc} - arm_func_end DseChannel_ChangeNote - - arm_func_start DseChannel_ReleaseNote -DseChannel_ReleaseNote: ; 0x02073EA0 - stmdb sp!, {r3, lr} - ldr r2, [r0, #0xb8] - cmp r2, #0 - ldmeqia sp!, {r3, pc} - ldrb r3, [r1, #2] -_02073EB4: - ldrb r1, [r2, #2] - cmp r1, r3 - bne _02073ECC - mov r1, r2 - bl DseChannel_ReleaseNoteInternal - ldmia sp!, {r3, pc} -_02073ECC: - ldr r2, [r2, #8] - cmp r2, #0 - bne _02073EB4 - ldmia sp!, {r3, pc} - arm_func_end DseChannel_ReleaseNote - - arm_func_start DseVoice_PlayNote -DseVoice_PlayNote: ; 0x02073EDC - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc - mov sl, r0 - ldrsh r4, [sl, #0xa] - mov sb, r1 - cmp r4, #0 - moveq r0, #0 - streq r0, [sp] - beq _02073F28 - bl DseUtil_GetRandomNumber - mov r1, r4, lsl #1 - mul r2, r1, r0 - mov r0, r2, asr #0xe - ldrsh r1, [sl, #0xa] - add r0, r2, r0, lsr #17 - rsb r0, r1, r0, asr #15 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp] -_02073F28: - ldr r6, [sl, #0xc0] - cmp r6, #0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r7, [sl, #0xbc] - mov r5, #0 -_02073F40: - ldrb r2, [sb, #2] - ldrsb r3, [sb, #3] - mov r0, r6 - mov r1, r5 - bl DseSwd_GetNextSplitInRange - movs r5, r0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrb r3, [r5, #0x1a] - ldrb r0, [r7, #0xc] - ldr r2, [r7, #0x18] - cmp r3, r0 - movge r3, #0 - add r1, r2, r3, lsl #3 - ldr r2, [r2, r3, lsl #3] - ldr r1, [r1, #4] - mov r0, r7 - str r2, [sp, #4] - str r1, [sp, #8] - ldrsh r1, [r5, #0x12] - bl ReadWaviEntry - movs fp, r0 - beq _02073F40 - ldrb r3, [sl, #5] - ldrb r2, [r5, #0x1a] - mov r0, sl - add r1, sp, #4 - add r8, r2, r3, lsl #8 - ldrb r3, [sp, #7] - mov r2, r8 - bl DseVoice_Allocate - movs r4, r0 - beq _02073F40 - mov r0, #0 - strh r0, [r4, #4] - ldr r0, [sl] - add fp, fp, #0x10 - str r0, [r4] - strh r8, [r4, #0x18] - ldrsh r0, [r5, #0x12] - add ip, r4, #0x1c - strb r0, [r4, #0xe] - ldmia fp!, {r0, r1, r2, r3} - stmia ip!, {r0, r1, r2, r3} - ldmia fp, {r0, r1, r2, r3} - stmia ip, {r0, r1, r2, r3} - ldr r1, [r4, #0x30] - ldr r0, [r7, #0x1c] - add r0, r1, r0 - str r0, [r4, #0x30] - ldrb r0, [sb, #2] - strb r0, [r4, #0xd] - ldrsb r1, [r5, #0x17] - ldrsh r0, [r5, #0x14] - add r1, r0, r1, lsl #8 - ldr r0, [sp] - add r0, r0, r1 - strh r0, [r4, #0x14] - ldrb r1, [sb, #2] - ldrsh r0, [r4, #0x14] - add r0, r0, r1, lsl #8 - strh r0, [r4, #0x12] - ldrb r0, [r5, #0x19] - strb r0, [r4, #0x17] - ldr r0, _02074144 ; =DRIVER_WORK - ldrb r0, [r0, #0x39] - cmp r0, #7 - bne _02074084 - ldrb r1, [sl, #0x58] - ldrb r0, [sb, #3] - ldrb r2, [r6, #4] - ldrb r3, [r5, #0x18] - smulbb r0, r1, r0 - mul r0, r2, r0 - mul r2, r3, r0 - ldr r0, _02074148 ; =0x4186143D - smull r1, r3, r0, r2 - mov r0, r2, lsr #0x1f - add r3, r0, r3, asr #19 - strb r3, [r4, #0x16] - b _020740B0 -_02074084: - ldrb r1, [sb, #3] - ldrb r0, [r6, #4] - ldrb r2, [r5, #0x18] - smulbb r0, r1, r0 - mul r3, r2, r0 - ldr r0, _0207414C ; =0x82061029 - smull r1, r2, r0, r3 - add r2, r3, r2 - mov r0, r3, lsr #0x1f - add r2, r0, r2, asr #13 - strb r2, [r4, #0x16] -_020740B0: - ldrb r2, [sl, #0x59] - ldrsh r3, [sl, #0x52] - add r0, r4, #0x5c - cmp r2, #0 - ldreqb r2, [r5, #2] - mov r3, r3, lsl #8 - add r1, sl, #0x74 - mul r8, r2, r3 - mov r3, r8, asr #0xc - add r3, r8, r3, lsr #19 - mov r3, r3, asr #0xd - strh r3, [r4, #0x10] - strb r2, [r4, #0xf] - ldrh r2, [r4, #6] - orr r2, r2, #0xff0 - strh r2, [r4, #6] - ldrsb r2, [sl, #0x51] - bl SoundLfoBank_Set - add r0, r5, #0x20 - add r8, r4, #0x3c - ldmia r0, {r0, r1, r2, r3} - stmia r8, {r0, r1, r2, r3} - mov r0, #1 - strb r0, [r4, #0x3c] - ldrb r0, [sl, #0x64] - cmp r0, #0 - beq _02074128 - mov r0, r8 - add r1, sl, #0x64 - bl SoundEnvelope_SetParameters -_02074128: - mov r1, r4 - mov r0, sl - ldrb r2, [sp, #7] - bl DseVoice_Start - b _02073F40 -_0207413C: - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02074144: .word DRIVER_WORK -_02074148: .word 0x4186143D -_0207414C: .word 0x82061029 - arm_func_end DseVoice_PlayNote - - arm_func_start DseVoice_ReleaseNote -DseVoice_ReleaseNote: ; 0x02074150 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - ldr r4, [r6, #0xb4] - mov r5, r1 - cmp r4, #0 - ldmeqia sp!, {r4, r5, r6, pc} -_02074168: - ldrb r1, [r4, #0xd] - ldrb r0, [r5, #2] - cmp r1, r0 - bne _02074184 - mov r0, r6 - mov r1, r4 - bl DseVoice_Release -_02074184: - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _02074168 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseVoice_ReleaseNote - - arm_func_start DseVoice_UpdateParameters -DseVoice_UpdateParameters: ; 0x02074194 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr fp, _0207431C ; =_022B7A30 - ldr r7, _02074320 ; =_022B7A6C - ldrh r0, [fp, #0x2e] - mov sb, #0 - cmp r0, #0 - ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r6, _02074324 ; =_020B1310 - ldr r5, _02074328 ; =_020B1394 - ldr r4, _0207432C ; =0x00FFB0FF -_020741BC: - ldr r8, [r7, #0x158] - cmp r8, #0 - beq _02074304 - ldrh sl, [r7, #6] - cmp sl, #0 - beq _02074300 - tst sl, #0x10 - beq _02074264 - ldrh r2, [r8, #0x16] - ldrsh r1, [r7, #0x12] - ldrsh r3, [r7, #0x10] - ldrsh r0, [r7, #0x5e] - add r1, r2, r1 - add r1, r3, r1 - add r0, r0, r1 - mov r0, r0, lsl #0x10 - mov r1, r0, lsr #0x10 - mov r0, r1, asr #8 - and r0, r0, #0x7f - ldrb r0, [r6, r0] - and r2, r1, #0xff - mov r1, r0, lsl #0x1c - add r1, r2, r1, lsr #20 - mov r1, r1, lsl #1 - mov r0, r0, asr #4 - ldrh r1, [r5, r1] - rsbs r0, r0, #4 - movpl r1, r1, lsr r0 - rsbmi r0, r0, #0 - movmi r1, r1, lsl r0 - ldrb r0, [r7, #0x1f] - cmp r0, #3 - mov r0, r4 - blo _0207425C - mov r2, r1, asr #3 - add r1, r1, r2, lsr #28 - mov r1, r1, asr #4 - bl _s32_div_f - str r0, [r7, #0x13c] - b _02074264 -_0207425C: - bl _s32_div_f - str r0, [r7, #0x13c] -_02074264: - tst sl, #0x20 - beq _020742C4 - ldrb r1, [r7, #0x16] - ldrsh r0, [r7, #0x60] - add r1, r1, r0, asr #6 - cmp r1, #0x7f - movgt r1, #0x7f - bgt _0207428C - cmp r1, #0 - movlt r1, #0 -_0207428C: - ldrh r0, [r8, #0x18] - ldrb r2, [r7, #0x14c] - mul r1, r0, r1 - mul r3, r2, r1 - ldr r0, _02074330 ; =0x828CBFBF - smull r1, r2, r0, r3 - add r2, r3, r2 - mov r0, r3, lsr #0x1f - add r2, r0, r2, asr #12 - mul r1, r2, r2 - mov r0, r1, asr #8 - add r0, r1, r0, lsr #23 - mov r0, r0, asr #9 - str r0, [r7, #0x140] -_020742C4: - tst sl, #0x40 - beq _02074300 - ldrsb r1, [r7, #0x17] - ldrsh r2, [r8, #0x1a] - ldrsh r0, [r7, #0x62] - sub r1, r1, #0x40 - add r1, r2, r1 - adds r1, r1, r0, asr #6 - ldr r0, _02074334 ; =_022B8330 - movmi r1, #0 - cmp r1, #0x7f - ldr r0, [r0, #0xed4] - movgt r1, #0x7f - ldrb r0, [r0, r1] - str r0, [r7, #0x144] -_02074300: - strh sl, [r7, #6] -_02074304: - ldrh r0, [fp, #0x2e] - add sb, sb, #1 - add r7, r7, #0x15c - cmp sb, r0 - blt _020741BC - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0207431C: .word _022B7A30 -_02074320: .word _022B7A6C -_02074324: .word _020B1310 -_02074328: .word _020B1394 -_0207432C: .word 0x00FFB0FF -_02074330: .word 0x828CBFBF -_02074334: .word _022B8330 - arm_func_end DseVoice_UpdateParameters - - arm_func_start DseVoice_ResetAll -DseVoice_ResetAll: ; 0x02074338 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - ldr sl, _020743D0 ; =_022B7A30 - mov r8, #0 - ldrh r0, [sl, #0x2e] - cmp r0, #0 - ble _020743C0 - ldr sb, _020743D4 ; =_022B7A6C - mov r7, r8 - mov r6, #1 - mov r5, #0x40 - mov r4, r8 -_02074364: - strh r7, [sb, #4] - strh r7, [sb, #6] - mov r0, r6, lsl r8 - strh r8, [sb, #8] - strh r0, [sb, #0xa] - str r7, [sb] - str r7, [sb, #0x14c] - strb r7, [sb, #0xd] - strb r7, [sb, #0xe] - strh r7, [sb, #0x12] - strb r7, [sb, #0x16] - add r0, sb, #0x3c - strb r5, [sb, #0x17] - bl SoundEnvelope_Reset - add r0, sb, #0x5c - bl SoundLfoBank_Reset - str r4, [sb, #0x154] - str r4, [sb, #0x158] - ldrh r0, [sl, #0x2e] - add r8, r8, #1 - add sb, sb, #0x15c - cmp r8, r0 - blt _02074364 -_020743C0: - ldr r0, _020743D8 ; =DRIVER_WORK - mov r1, #0 - str r1, [r0, #0x654] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_020743D0: .word _022B7A30 -_020743D4: .word _022B7A6C -_020743D8: .word DRIVER_WORK - arm_func_end DseVoice_ResetAll - - arm_func_start DseVoice_ResetHW -DseVoice_ResetHW: ; 0x020743DC - stmdb sp!, {r3, lr} - cmp r0, #0 - ble _02074414 - ldr r1, _0207447C ; =_022B7A30 - mov r2, #0x10 - strh r2, [r1, #0x2c] - cmp r0, #0x10 - movgt r0, r2, lsl #0x10 - ldr r2, _0207447C ; =_022B7A30 - movgt r0, r0, asr #0x10 - strh r0, [r2, #0x2e] - ldr r1, _02074480 ; =_022B8330 - mov r0, #0 - strb r0, [r1, #0xd0c] -_02074414: - ldr r2, _0207447C ; =_022B7A30 - mov r0, #0 - strh r0, [r2, #0x32] - strh r0, [r2, #0x34] - ldr r1, _02074484 ; =DRIVER_WORK - strh r0, [r2, #0x36] - strb r0, [r1, #0x738] - strb r0, [r1, #0x739] - ldr ip, _02074480 ; =_022B8330 - strh r0, [r2, #0x30] - str r0, [ip, #0xcfc] - str r0, [ip, #0xd00] - sub r2, r0, #1 - str r2, [ip, #0xd04] - ldrsh lr, [r1, #0x28] - mov r1, r0 - mov r2, r0 - mov r3, r0 - str lr, [ip, #0xd08] - bl sub_0207C8B8 - ldr r0, _02074488 ; =0x0000FFFF - mov r3, #0 - mov r1, r0 - mov r2, r0 - bl sub_0207C8E0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0207447C: .word _022B7A30 -_02074480: .word _022B8330 -_02074484: .word DRIVER_WORK -_02074488: .word 0x0000FFFF - arm_func_end DseVoice_ResetHW - - arm_func_start UpdateChannels -UpdateChannels: ; 0x0207448C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr sb, _02074570 ; =_022B7A30 - mov r7, #0 - ldrh r0, [sb, #0x2e] - mov r6, r7 - ldr r5, _02074574 ; =_022B7A6C - cmp r0, #0 - ble _0207452C - mov r4, #2 -_020744B0: - add r0, r5, #0x3c - bl SoundEnvelope_Tick - ldrsb r1, [r5, #0x5a] - mov r8, r0 - cmp r1, #1 - bne _02074514 - add r0, r5, #0x5c - bl SoundLfoBank_Tick - ldrh r1, [r5, #6] - orr r0, r1, r0 - strh r0, [r5, #6] - ldrb r0, [r5, #0x58] - cmp r0, #8 - bne _020744F8 - strb r4, [r5, #0x58] - ldrh r0, [r5, #6] - orr r0, r0, #2 - strh r0, [r5, #6] -_020744F8: - ldrb r0, [r5, #0x14c] - cmp r0, r8 - ldrneh r0, [r5, #6] - orrne r0, r0, #0x20 - strneh r0, [r5, #6] - cmp r8, #0 - addgt r7, r7, #1 -_02074514: - strb r8, [r5, #0x14c] - ldrh r0, [sb, #0x2e] - add r6, r6, #1 - add r5, r5, #0x15c - cmp r6, r0 - blt _020744B0 -_0207452C: - ldr r0, _02074578 ; =_022B8330 - ldr r1, [r0, #0xd04] - cmp r1, #0 - movlt r1, #0 - strlt r1, [r0, #0xd00] - ldr r0, _02074578 ; =_022B8330 - str r7, [r0, #0xcfc] - ldr r1, [r0, #0xd00] - cmp r1, r7 - strlt r7, [r0, #0xd00] - movlt r1, #0x64 - strlt r1, [r0, #0xd04] - ldr r0, _02074578 ; =_022B8330 - ldr r1, [r0, #0xd04] - sub r1, r1, #1 - str r1, [r0, #0xd04] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02074570: .word _022B7A30 -_02074574: .word _022B7A6C -_02074578: .word _022B8330 - arm_func_end UpdateChannels - - arm_func_start DseVoice_Cleanup -DseVoice_Cleanup: ; 0x0207457C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r6, _02074610 ; =_022B7A6C - bl sub_0207D470 - ldr r4, _02074614 ; =_022B7A30 - mov r0, r0, lsl #0x10 - ldrh r2, [r4, #0x30] - ldrh r1, [r4, #0x2e] - mov r7, #0 - orr r0, r2, r0, lsr #16 - mov r0, r0, lsl #0x10 - mov r8, r0, lsr #0x10 - cmp r1, #0 - ldmleia sp!, {r4, r5, r6, r7, r8, pc} - mov r5, r7 -_020745B4: - ldrsb r0, [r6, #0x5a] - cmp r0, #1 - bne _020745DC - tst r8, #1 - bne _020745F0 - add r0, r6, #0x3c - bl SoundEnvelope_Stop2 - add r0, r6, #0x100 - strh r5, [r0, #0x4c] - b _020745F0 -_020745DC: - and r0, r8, #1 - cmp r0, #1 - bne _020745F0 - mov r0, r6 - bl DseVoice_FlagForDeactivation -_020745F0: - ldrh r1, [r4, #0x2e] - mov r0, r8, lsl #0xf - add r7, r7, #1 - cmp r7, r1 - mov r8, r0, lsr #0x10 - add r6, r6, #0x15c - blt _020745B4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02074610: .word _022B7A6C -_02074614: .word _022B7A30 - arm_func_end DseVoice_Cleanup - - arm_func_start DseVoice_Allocate -DseVoice_Allocate: ; 0x02074618 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r4, _02074774 ; =_022B7A30 - mov r3, r3, lsl #0x10 - ldrh r5, [r4, #0x2e] - add r3, r3, #0xff - add r8, r3, #0x100 - ldrb r4, [r1, #5] - sub r5, r5, #1 - ldrb r3, [r0, #7] - cmp r4, r5 - movgt r4, r5 - ldrb r7, [r1, #4] - mov r6, #0 - cmp r3, #0 - beq _02074660 - cmp r3, #1 - beq _0207466C - b _0207476C -_02074660: - ldr r6, [r0, #0xb4] - cmp r6, #0 - bne _0207476C -_0207466C: - ldrb r3, [r1] - cmp r3, #0 - beq _02074708 - ldr r5, _02074778 ; =_022B7A6C - mov r3, #0x15c - mla r3, r7, r3, r5 - mov ip, r7 - mov lr, r4 - mov r5, r8 - cmp r7, r4 - mov r6, #0 - bgt _020746E4 - ldr r0, [r0] -_020746A0: - ldr sb, [r3] - cmp sb, r0 - ldreqh sb, [r3, #0x18] - cmpeq sb, r2 - bne _020746D4 - ldr sb, [r3, #0x14c] - add r6, r6, #1 - cmp r5, sb - movhi r5, sb - ldrb sb, [r1, #2] - movhi lr, ip - cmp r6, sb - bge _020746E4 -_020746D4: - add ip, ip, #1 - cmp ip, r4 - add r3, r3, #0x15c - ble _020746A0 -_020746E4: - ldrb r0, [r1, #2] - cmp r6, r0 - blt _02074708 - ldr r1, _02074778 ; =_022B7A6C - mov r0, #0x15c - mla r6, lr, r0, r1 - mov r0, r6 - bl DseVoice_Deallocate - b _0207476C -_02074708: - cmp r7, r4 - add r2, r4, #1 - bgt _0207474C - ldr r1, _0207477C ; =DRIVER_WORK - mov r0, #0x15c - mla r1, r7, r0, r1 -_02074720: - ldr r0, [r1, #0x888] - cmp r8, r0 - bls _0207473C - mov r2, r7 - cmp r0, #0 - beq _0207474C - mov r8, r0 -_0207473C: - add r7, r7, #1 - cmp r7, r4 - add r1, r1, #0x15c - ble _02074720 -_0207474C: - cmp r2, r4 - movgt r6, #0 - bgt _0207476C - ldr r1, _02074778 ; =_022B7A6C - mov r0, #0x15c - mla r6, r2, r0, r1 - mov r0, r6 - bl DseVoice_Deallocate -_0207476C: - mov r0, r6 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02074774: .word _022B7A30 -_02074778: .word _022B7A6C -_0207477C: .word DRIVER_WORK - arm_func_end DseVoice_Allocate - - arm_func_start DseVoice_Start -DseVoice_Start: ; 0x02074780 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - ldrh r3, [r4, #6] - mov r1, r2, lsl #0x10 - add r1, r1, #0xff - orr r2, r3, #1 - bic r2, r2, #2 - strh r2, [r4, #6] - ldr r2, [r4, #0x14c] - add r1, r1, #0x100 - orr r1, r2, r1 - mov r5, r0 - str r1, [r4, #0x14c] - add r0, r4, #0x3c - bl UpdateTrackVolumeEnvelopes - ldr r0, [r4, #0x158] - cmp r0, r5 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, [r5, #0xb4] - str r0, [r4, #0x154] - str r4, [r5, #0xb4] - str r5, [r4, #0x158] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseVoice_Start - - arm_func_start DseVoice_ReleaseHeld -DseVoice_ReleaseHeld: ; 0x020747DC - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r7, r0 - ldrb r0, [r7, #4] - tst r0, #3 - ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - ldr r4, [r7, #0xb8] - add r6, r7, #0xb8 - cmp r4, #0 - beq _0207484C - ldr r8, _02074858 ; =DRIVER_WORK - mvn sl, #0 - mov sb, #0 -_0207480C: - ldmib r4, {r0, r5} - cmp r0, #0 - strgt r4, [r6] - addgt r6, r4, #8 - bgt _02074840 - mov r0, r7 - mov r1, r4 - bl DseChannel_ReleaseNoteInternal - ldr r0, [r8, #0x650] - str r0, [r4, #8] - str r4, [r8, #0x650] - str sl, [r4, #4] - strb sb, [r4, #1] -_02074840: - mov r4, r5 - cmp r5, #0 - bne _0207480C -_0207484C: - mov r0, #0 - str r0, [r6] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02074858: .word DRIVER_WORK - arm_func_end DseVoice_ReleaseHeld - - arm_func_start DseVoice_Release -DseVoice_Release: ; 0x0207485C - stmdb sp!, {r4, lr} - mov r4, r1 - ldrh r1, [r4, #4] - orr r1, r1, #2 - strh r1, [r4, #4] - ldrb r0, [r0, #4] - tst r0, #1 - ldmneia sp!, {r4, pc} - ldr r1, [r4, #0x14c] - add r0, r4, #0x3c - and r1, r1, #0xff - str r1, [r4, #0x14c] - bl SoundEnvelope_Release - ldrh r0, [r4, #6] - bic r0, r0, #1 - strh r0, [r4, #6] - ldmia sp!, {r4, pc} - arm_func_end DseVoice_Release - - arm_func_start DseVoice_Deallocate -DseVoice_Deallocate: ; 0x020748A0 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r1, [r4, #0x158] - cmp r1, #0 - beq _02074948 - ldr r2, [r1, #0xb4] - cmp r2, r4 - ldreq r0, [r4, #0x154] - streq r0, [r1, #0xb4] - beq _020748F0 - cmp r2, #0 - beq _020748F0 -_020748D0: - ldr r0, [r2, #0x154] - cmp r0, r4 - ldreq r0, [r4, #0x154] - streq r0, [r2, #0x154] - beq _020748F0 - mov r2, r0 - cmp r0, #0 - bne _020748D0 -_020748F0: - mov r0, #0 - strh r0, [r4, #4] - str r0, [r4, #0x158] - str r0, [r4, #0x154] - add r0, r4, #0x3c - bl SoundEnvelope_Stop - ldr r1, [r4, #0x14c] - mov r0, #0 - and r1, r1, #0xff - str r1, [r4, #0x14c] - str r0, [r4] - strh r0, [r4, #0x18] - ldr r1, _020749A0 ; =_022B7A30 - ldrh r0, [r4, #0xa] - ldrh r3, [r1, #0x32] - mvn r2, r0 - and r2, r3, r2 - strh r2, [r1, #0x32] - ldrh r2, [r1, #0x36] - orr r2, r2, r0 - strh r2, [r1, #0x36] - ldmia sp!, {r4, pc} -_02074948: - mov r0, #0 - strh r0, [r4, #4] - str r0, [r4, #0x158] - str r0, [r4, #0x154] - add r0, r4, #0x3c - bl SoundEnvelope_Stop - ldr r1, [r4, #0x14c] - mov r0, #0 - and r1, r1, #0xff - str r1, [r4, #0x14c] - str r0, [r4] - strh r0, [r4, #0x18] - ldr r1, _020749A0 ; =_022B7A30 - ldrh r0, [r4, #0xa] - ldrh r3, [r1, #0x32] - mvn r2, r0 - and r2, r3, r2 - strh r2, [r1, #0x32] - ldrh r2, [r1, #0x36] - orr r2, r2, r0 - strh r2, [r1, #0x36] - ldmia sp!, {r4, pc} - .align 2, 0 -_020749A0: .word _022B7A30 - arm_func_end DseVoice_Deallocate - - arm_func_start DseVoice_FlagForActivation -DseVoice_FlagForActivation: ; 0x020749A4 - mov r1, #0xff0 - strh r1, [r0, #6] - ldr r2, [r0, #0x14c] - ldr r1, _020749F0 ; =_022B7A30 - orr r2, r2, #0xff - orr r2, r2, #0x100 - str r2, [r0, #0x14c] - ldrh r3, [r0, #0xa] - ldrh r0, [r1, #0x34] - mvn r2, r3 - and r0, r0, r2 - strh r0, [r1, #0x34] - ldrh r0, [r1, #0x36] - and r0, r0, r2 - strh r0, [r1, #0x36] - ldrh r0, [r1, #0x32] - orr r0, r0, r3 - strh r0, [r1, #0x32] - bx lr - .align 2, 0 -_020749F0: .word _022B7A30 - arm_func_end DseVoice_FlagForActivation - - arm_func_start DseVoice_FlagForDeactivation -DseVoice_FlagForDeactivation: ; 0x020749F4 - ldr r2, [r0, #0x14c] - ldr r1, _02074A28 ; =_022B7A30 - bic r2, r2, #0xff00 - str r2, [r0, #0x14c] - ldrh r3, [r0, #0xa] - ldrh r2, [r1, #0x32] - mvn r0, r3 - and r0, r2, r0 - strh r0, [r1, #0x32] - ldrh r0, [r1, #0x34] - orr r0, r0, r3 - strh r0, [r1, #0x34] - bx lr - .align 2, 0 -_02074A28: .word _022B7A30 - arm_func_end DseVoice_FlagForDeactivation - - arm_func_start DseVoice_CountNumActiveInChannel -DseVoice_CountNumActiveInChannel: ; 0x02074A2C - ldr r2, [r0, #0xb4] - mov r0, #0 - cmp r2, #0 - bxeq lr -_02074A3C: - ldrb r1, [r2, #0x14c] - ldr r2, [r2, #0x154] - cmp r1, #0 - addne r0, r0, #1 - cmp r2, #0 - bne _02074A3C - bx lr - arm_func_end DseVoice_CountNumActiveInChannel - - arm_func_start DseVoice_UpdateHardware -DseVoice_UpdateHardware: ; 0x02074A58 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x18 - ldr r4, _02074C64 ; =_022B7A30 - ldr r7, _02074C68 ; =_022B7A6C - ldrh r0, [r4, #0x2e] - mov r8, #0 - cmp r0, #0 - ble _02074BC8 - mov fp, #2 - mov sl, #1 - mov r6, r8 - mov r5, r8 -_02074A88: - ldrh sb, [r7, #6] - cmp sb, #0 - beq _02074BB4 - tst sb, #1 - beq _02074B5C - ldrsb r0, [r7, #0x21] - ldrb r1, [r7, #0x1f] - cmp r0, #0 - movne r3, sl - moveq r3, fp - cmp r1, #4 - addls pc, pc, r1, lsl #2 - b _02074B50 -_02074ABC: ; jump table - b _02074AD0 ; case 0 - b _02074AD0 ; case 1 - b _02074AD0 ; case 2 - b _02074B0C ; case 3 - b _02074B34 ; case 4 -_02074AD0: - ldr r0, [r7, #0x34] - str r0, [sp] - ldr r0, [r7, #0x38] - str r0, [sp, #4] - ldr r0, [r7, #0x140] - str r0, [sp, #8] - str r6, [sp, #0xc] - ldr r0, [r7, #0x13c] - str r0, [sp, #0x10] - ldr r0, [r7, #0x144] - str r0, [sp, #0x14] - ldrh r0, [r7, #8] - ldr r2, [r7, #0x30] - bl sub_0207CA6C - b _02074B50 -_02074B0C: - ldr r0, [r7, #0x13c] - mov r3, #0 - str r0, [sp] - ldr r0, [r7, #0x144] - str r0, [sp, #4] - ldrh r0, [r7, #8] - ldrb r1, [r7, #0x25] - ldr r2, [r7, #0x140] - bl sub_0207CAB8 - b _02074B50 -_02074B34: - ldr r0, [r7, #0x144] - mov r2, #0 - str r0, [sp] - ldrh r0, [r7, #8] - ldr r1, [r7, #0x140] - ldr r3, [r7, #0x13c] - bl sub_0207CAE0 -_02074B50: - mov r0, r7 - bl DseVoice_FlagForActivation - b _02074BB0 -_02074B5C: - tst sb, #2 - beq _02074B70 - mov r0, r7 - bl DseVoice_FlagForDeactivation - mov sb, #0 -_02074B70: - tst sb, #0x10 - beq _02074B84 - ldrh r0, [r7, #0xa] - ldr r1, [r7, #0x13c] - bl sub_0207CA04 -_02074B84: - tst sb, #0x20 - beq _02074B9C - ldrh r0, [r7, #0xa] - ldr r1, [r7, #0x140] - mov r2, #0 - bl sub_0207CA24 -_02074B9C: - tst sb, #0x40 - beq _02074BB0 - ldrh r0, [r7, #0xa] - ldr r1, [r7, #0x144] - bl sub_0207CA4C -_02074BB0: - strh r5, [r7, #6] -_02074BB4: - ldrh r0, [r4, #0x2e] - add r8, r8, #1 - add r7, r7, #0x15c - cmp r8, r0 - blt _02074A88 -_02074BC8: - ldr r1, _02074C64 ; =_022B7A30 - ldr r2, _02074C6C ; =DRIVER_WORK - ldrh r0, [r1, #0x32] - strh r0, [r1, #0x30] - ldrb r1, [r2, #0x73a] - ldrb r2, [r2, #0x738] - orr r3, r0, r1 - orrs r3, r2, r3 - beq _02074C0C - mov r3, #0 - bl sub_0207C8B8 - ldr r1, _02074C6C ; =DRIVER_WORK - mov r2, #0 - strb r2, [r1, #0x738] - ldr r0, _02074C64 ; =_022B7A30 - strb r2, [r1, #0x73a] - strh r2, [r0, #0x32] -_02074C0C: - ldr r1, _02074C64 ; =_022B7A30 - ldr r0, _02074C6C ; =DRIVER_WORK - ldrh r4, [r1, #0x34] - ldrh r3, [r1, #0x36] - ldrb r1, [r0, #0x73b] - ldrb r2, [r0, #0x739] - orr r0, r4, r3 - orr r3, r1, r0 - orrs r3, r2, r3 - addeq sp, sp, #0x18 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r3, #0 - bl sub_0207C8E0 - ldr r1, _02074C6C ; =DRIVER_WORK - mov r2, #0 - strb r2, [r1, #0x739] - ldr r0, _02074C64 ; =_022B7A30 - strb r2, [r1, #0x73b] - strh r2, [r0, #0x36] - strh r2, [r0, #0x34] - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02074C64: .word _022B7A30 -_02074C68: .word _022B7A6C -_02074C6C: .word DRIVER_WORK - arm_func_end DseVoice_UpdateHardware diff --git a/asm/main_02071C3C.s b/asm/main_02071C3C.s new file mode 100644 index 00000000..f791a3f4 --- /dev/null +++ b/asm/main_02071C3C.s @@ -0,0 +1,3855 @@ + .include "asm/macros.inc" + .include "main_02071C3C.inc" + + .text + + arm_func_start DseTrackEvent_SongVolumeFade +DseTrackEvent_SongVolumeFade: ; 0x02071C3C + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + ldrb r2, [r5] + ldrb r0, [r5, #1] + mov r4, r1 + add r0, r2, r0, lsl #8 + mov r0, r0, lsl #0x10 + movs r1, r0, lsr #0x10 + moveq r6, #0 + beq _02071C84 + mov r0, #0x3e8 + mul r0, r1, r0 + ldr r1, _02071CC4 ; =DRIVER_WORK + ldrsh r1, [r1, #0x28] + bl _u32_div_f + mov r0, r0, lsl #0x10 + movs r6, r0, lsr #0x10 + moveq r6, #1 +_02071C84: + ldrb r0, [r5, #2] + cmp r6, #0 + mov r1, r0, lsl #0x10 + str r1, [r4, #0x70] + streq r1, [r4, #0x68] + beq _02071CB8 + ldr r0, [r4, #0x68] + subs r0, r1, r0 + moveq r6, #0 + beq _02071CB8 + mov r1, r6 + bl _s32_div_f + str r0, [r4, #0x6c] +_02071CB8: + strh r6, [r4, #0x74] + add r0, r5, #3 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02071CC4: .word DRIVER_WORK + arm_func_end DseTrackEvent_SongVolumeFade + + arm_func_start DseTrackEvent_RestoreEnvelopeDefaults +DseTrackEvent_RestoreEnvelopeDefaults: ; 0x02071CC8 + stmdb sp!, {r4, lr} + mov r4, r0 + add r0, r3, #0x64 + bl SoundEnvelopeParameters_Reset + mov r0, r4 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_RestoreEnvelopeDefaults + + arm_func_start DseTrackEvent_SetEnvelopeAttackBegin +DseTrackEvent_SetEnvelopeAttackBegin: ; 0x02071CE0 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r1, [r4] + add r0, r3, #0x64 + strb r1, [r3, #0x6c] + bl SoundEnvelopeParameters_CheckValidity + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetEnvelopeAttackBegin + + arm_func_start DseTrackEvent_SetEnvelopeAttackTime +DseTrackEvent_SetEnvelopeAttackTime: ; 0x02071D00 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r1, [r4] + add r0, r3, #0x64 + strb r1, [r3, #0x6d] + bl SoundEnvelopeParameters_CheckValidity + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetEnvelopeAttackTime + + arm_func_start DseTrackEvent_SetEnvelopeHoldTime +DseTrackEvent_SetEnvelopeHoldTime: ; 0x02071D20 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r1, [r4] + add r0, r3, #0x64 + strb r1, [r3, #0x70] + bl SoundEnvelopeParameters_CheckValidity + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetEnvelopeHoldTime + + arm_func_start DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel +DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel: ; 0x02071D40 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r0, [r4] + cmp r0, #0xff + strneb r0, [r3, #0x6e] + ldrb r0, [r4, #1] + cmp r0, #0xff + strneb r0, [r3, #0x6f] + add r0, r3, #0x64 + bl SoundEnvelopeParameters_CheckValidity + add r0, r4, #2 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel + + arm_func_start DseTrackEvent_SetEnvelopeSustainTime +DseTrackEvent_SetEnvelopeSustainTime: ; 0x02071D70 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r1, [r4] + add r0, r3, #0x64 + strb r1, [r3, #0x71] + bl SoundEnvelopeParameters_CheckValidity + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetEnvelopeSustainTime + + arm_func_start DseTrackEvent_SetEnvelopeReleaseTime +DseTrackEvent_SetEnvelopeReleaseTime: ; 0x02071D90 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r1, [r4] + add r0, r3, #0x64 + strb r1, [r3, #0x72] + bl SoundEnvelopeParameters_CheckValidity + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetEnvelopeReleaseTime + + arm_func_start DseTrackEvent_SetNoteDurationMultiplier +DseTrackEvent_SetNoteDurationMultiplier: ; 0x02071DB0 + ldrb r1, [r0], #1 + strb r1, [r2, #5] + bx lr + arm_func_end DseTrackEvent_SetNoteDurationMultiplier + + arm_func_start DseTrackEvent_ForceLfoEnvelopeLevel +DseTrackEvent_ForceLfoEnvelopeLevel: ; 0x02071DBC + stmdb sp!, {r4, lr} + mov r4, r0 + ldrsb r1, [r4] + mov r0, r3 + bl DseChannel_SetLfoConstEnvelopeLevel + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_ForceLfoEnvelopeLevel + + arm_func_start DseTrackEvent_SetHoldNotes +DseTrackEvent_SetHoldNotes: ; 0x02071DD8 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r1, [r4] + ldr r0, [r2, #0x54] + cmp r1, #0x40 + ldrb r1, [r0, #4] + orrhs r1, r1, #1 + strhsb r1, [r0, #4] + bhs _02071E08 + bic r1, r1, #1 + strb r1, [r0, #4] + bl DseVoice_ReleaseHeld +_02071E08: + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetHoldNotes + + arm_func_start DseTrackEvent_SetFlagBit1Unknown +DseTrackEvent_SetFlagBit1Unknown: ; 0x02071E10 + ldrb r1, [r3, #4] + orr r1, r1, #2 + strb r1, [r3, #4] + bx lr + arm_func_end DseTrackEvent_SetFlagBit1Unknown + + arm_func_start DseTrackEvent_SetOptionalVolume +DseTrackEvent_SetOptionalVolume: ; 0x02071E20 + ldrb r1, [r0], #1 + strb r1, [r3, #0x58] + bx lr + arm_func_end DseTrackEvent_SetOptionalVolume + + arm_func_start DseTrackEvent_Dummy2Bytes +DseTrackEvent_Dummy2Bytes: ; 0x02071E2C + add r0, r0, #2 + bx lr + arm_func_end DseTrackEvent_Dummy2Bytes + + arm_func_start DseTrackEvent_SetTuning +DseTrackEvent_SetTuning: ; 0x02071E34 + stmdb sp!, {r4, lr} + ldrsb r1, [r0] + ldr ip, _02071EB0 ; =0x04000208 + mov r2, #0 + mov r1, r1, lsl #0x18 + mov r4, r1, asr #0x10 + strh r4, [r3, #0x54] + ldr lr, [r3, #0xc4] + ldr r1, [r3, #0x1c] + ldrsh lr, [lr, #4] + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + add r1, r4, r1, asr #16 + add r1, lr, r1 + strh r1, [r3, #0x16] + ldrh r4, [ip] + strh r2, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _02071E9C +_02071E84: + ldrh r1, [r2, #6] + orr r1, r1, #0x10 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02071E84 +_02071E9C: + ldr r2, _02071EB0 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r4, pc} + .align 2, 0 +_02071EB0: .word 0x04000208 + arm_func_end DseTrackEvent_SetTuning + + arm_func_start DseTrackEvent_TuningDeltaCoarse +DseTrackEvent_TuningDeltaCoarse: ; 0x02071EB4 + stmdb sp!, {r4, lr} + ldrsb r4, [r0] + ldrsh r1, [r3, #0x54] + ldr ip, _02071F38 ; =0x04000208 + mov r2, #0 + add r1, r1, r4, lsl #8 + mov r1, r1, lsl #0x10 + mov r4, r1, asr #0x10 + strh r4, [r3, #0x54] + ldr lr, [r3, #0xc4] + ldr r1, [r3, #0x1c] + ldrsh lr, [lr, #4] + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + add r1, r4, r1, asr #16 + add r1, lr, r1 + strh r1, [r3, #0x16] + ldrh r4, [ip] + strh r2, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _02071F24 +_02071F0C: + ldrh r1, [r2, #6] + orr r1, r1, #0x10 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02071F0C +_02071F24: + ldr r2, _02071F38 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r4, pc} + .align 2, 0 +_02071F38: .word 0x04000208 + arm_func_end DseTrackEvent_TuningDeltaCoarse + + arm_func_start DseTrackEvent_TuningDeltaFine +DseTrackEvent_TuningDeltaFine: ; 0x02071F3C + stmdb sp!, {r4, lr} + ldrsb r4, [r0] + ldrsh r1, [r3, #0x54] + ldr ip, _02071FC0 ; =0x04000208 + mov r2, #0 + add r1, r1, r4, lsl #2 + mov r1, r1, lsl #0x10 + mov r4, r1, asr #0x10 + strh r4, [r3, #0x54] + ldr lr, [r3, #0xc4] + ldr r1, [r3, #0x1c] + ldrsh lr, [lr, #4] + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + add r1, r4, r1, asr #16 + add r1, lr, r1 + strh r1, [r3, #0x16] + ldrh r4, [ip] + strh r2, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _02071FAC +_02071F94: + ldrh r1, [r2, #6] + orr r1, r1, #0x10 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02071F94 +_02071FAC: + ldr r2, _02071FC0 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r4, pc} + .align 2, 0 +_02071FC0: .word 0x04000208 + arm_func_end DseTrackEvent_TuningDeltaFine + + arm_func_start DseTrackEvent_TuningDeltaFull +DseTrackEvent_TuningDeltaFull: ; 0x02071FC4 + stmdb sp!, {r3, lr} + ldrb ip, [r0] + ldrb r1, [r0, #1] + ldrsh lr, [r3, #0x54] + ldr r2, _02072050 ; =0x04000208 + add r1, ip, r1, lsl #8 + add r1, lr, r1 + mov r1, r1, lsl #0x10 + mov lr, r1, asr #0x10 + strh lr, [r3, #0x54] + ldr ip, [r3, #0xc4] + ldr r1, [r3, #0x1c] + ldrsh ip, [ip, #4] + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + add r1, lr, r1, asr #16 + add r1, ip, r1 + strh r1, [r3, #0x16] + ldrh ip, [r2] + mov r1, #0 + strh r1, [r2] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _0207203C +_02072024: + ldrh r1, [r2, #6] + orr r1, r1, #0x10 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02072024 +_0207203C: + ldr r2, _02072050 ; =0x04000208 + add r0, r0, #2 + ldrh r1, [r2] + strh ip, [r2] + ldmia sp!, {r3, pc} + .align 2, 0 +_02072050: .word 0x04000208 + arm_func_end DseTrackEvent_TuningDeltaFull + + arm_func_start DseTrackEvent_TuningFade +DseTrackEvent_TuningFade: ; 0x02072054 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r3 + ldrb r1, [r6, #4] + ldrb r4, [r7] + ldrb r0, [r7, #1] + tst r1, #2 + ldrb r2, [r7, #2] + add r0, r4, r0, lsl #8 + mov r0, r0, lsl #0x10 + mov r5, r0, lsr #0x10 + ldr r4, [r6, #0xc4] + moveq r1, #0 + streq r1, [r6, #0x1c] + ldr r1, [r6, #0x1c] + mov r0, r2, lsl #0x18 + mov r1, r1, asr #0x10 + add r0, r1, r0, lsr #16 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r1, r0, lsl #0x10 + str r1, [r6, #0x24] + cmp r5, #0 + streq r1, [r6, #0x1c] + beq _020720D4 + ldr r0, [r6, #0x1c] + subs r0, r1, r0 + moveq r5, #0 + beq _020720D4 + mov r1, r5 + bl _s32_div_f + str r0, [r6, #0x20] +_020720D4: + strh r5, [r6, #0x28] + ldr r0, [r6, #0x1c] + ldrsh r1, [r6, #0x54] + mov r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + ldrsh r2, [r4, #4] + add r0, r1, r0, lsr #16 + ldr r1, _02072140 ; =0x04000208 + add r0, r2, r0 + strh r0, [r6, #0x16] + ldrh r3, [r1] + mov r0, #0 + strh r0, [r1] + ldr r1, [r6, #0xb4] + cmp r1, #0 + beq _0207212C +_02072114: + ldrh r0, [r1, #6] + orr r0, r0, #0x10 + strh r0, [r1, #6] + ldr r1, [r1, #0x154] + cmp r1, #0 + bne _02072114 +_0207212C: + ldr r2, _02072140 ; =0x04000208 + add r0, r7, #3 + ldrh r1, [r2] + strh r3, [r2] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02072140: .word 0x04000208 + arm_func_end DseTrackEvent_TuningFade + + arm_func_start DseTrackEvent_SetNoteRandomRegion +DseTrackEvent_SetNoteRandomRegion: ; 0x02072144 + ldrb r1, [r0] + ldrb ip, [r0, #1] + add r0, r0, #2 + mov r2, r1 + cmp r1, ip + movhi r2, ip + movhi ip, r1 + strb r2, [r3, #0xc] + strb ip, [r3, #0xd] + bx lr + arm_func_end DseTrackEvent_SetNoteRandomRegion + + arm_func_start DseTrackEvent_SetTuningJitterAmplitude +DseTrackEvent_SetTuningJitterAmplitude: ; 0x0207216C + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r0, r0, #2 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0xa] + bx lr + arm_func_end DseTrackEvent_SetTuningJitterAmplitude + + arm_func_start DseTrackEvent_SetKeyBend +DseTrackEvent_SetKeyBend: ; 0x02072184 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r2, [r4] + ldrb r1, [r4, #1] + mov r0, r3 + add r1, r1, r2, lsl #8 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + bl DseChannel_SetKeyBend + add r0, r4, #2 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetKeyBend + + arm_func_start DseTrackEvent_SetUnknown2 +DseTrackEvent_SetUnknown2: ; 0x020721B0 + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r0, r0, #2 + add r1, r1, r2, lsl #8 + strh r1, [r3, #0x56] + bx lr + arm_func_end DseTrackEvent_SetUnknown2 + + arm_func_start DseTrackEvent_SetKeyBendRange +DseTrackEvent_SetKeyBendRange: ; 0x020721C8 + ldrb r1, [r0], #1 + strb r1, [r3, #0x59] + bx lr + arm_func_end DseTrackEvent_SetKeyBendRange + + arm_func_start DseTrackEvent_SetupKeyBendLfo +DseTrackEvent_SetupKeyBendLfo: ; 0x020721D4 + stmdb sp!, {r3, r4, r5, lr} + ldrb r5, [r0] + ldrb r4, [r0, #1] + ldrb lr, [r0, #2] + ldrb ip, [r0, #3] + ldrb r2, [r0, #4] + mov r1, #1 + add r4, r5, r4, lsl #8 + strb r1, [r3, #0x75] + strb r1, [r3, #0x76] + mov r1, r4, lsl #0x10 + strb r2, [r3, #0x77] + mov r1, r1, asr #0x10 + str r1, [r3, #0x78] + add r1, lr, ip, lsl #8 + strh r1, [r3, #0x7c] + mov r1, #0 + strh r1, [r3, #0x7e] + strh r1, [r3, #0x80] + strb r1, [r3, #0x82] + add r0, r0, #5 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseTrackEvent_SetupKeyBendLfo + + arm_func_start DseTrackEvent_SetupKeyBendLfoEnvelope +DseTrackEvent_SetupKeyBendLfoEnvelope: ; 0x0207222C + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x7e] + ldrb r2, [r0, #2] + ldrb r1, [r0, #3] + add r0, r0, #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x80] + bx lr + arm_func_end DseTrackEvent_SetupKeyBendLfoEnvelope + + arm_func_start DseTrackEvent_UseKeyBendLfo +DseTrackEvent_UseKeyBendLfo: ; 0x02072254 + ldrb r1, [r0] + add r0, r0, #1 + cmp r1, #2 + moveq r1, #1 + strb r1, [r3, #0x75] + cmp r1, #0 + moveq r1, #0 + movne r1, #1 + strb r1, [r3, #0x76] + bx lr + arm_func_end DseTrackEvent_UseKeyBendLfo + + arm_func_start DseTrackEvent_SetVolume +DseTrackEvent_SetVolume: ; 0x0207227C + stmdb sp!, {r3, r4, r5, lr} + ldrsb r4, [r0] + mov r5, #0 + ldr r2, _02072308 ; =0x82061029 + mov r1, r4, lsl #0x10 + str r1, [r3, #0x34] + str r1, [r3, #0x2c] + strh r5, [r3, #0x38] + ldr ip, [r3, #0xc4] + ldrb r1, [r3, #0x50] + ldrsb lr, [ip, #8] + ldr ip, _0207230C ; =0x04000208 + smulbb r1, r4, r1 + mul r4, lr, r1 + smull r1, lr, r2, r4 + add lr, r4, lr + mov r1, r4, lsr #0x1f + add lr, r1, lr, asr #13 + strh lr, [r3, #0x18] + ldrh r4, [ip] + strh r5, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _020722F4 +_020722DC: + ldrh r1, [r2, #6] + orr r1, r1, #0x20 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _020722DC +_020722F4: + ldr r2, _0207230C ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02072308: .word 0x82061029 +_0207230C: .word 0x04000208 + arm_func_end DseTrackEvent_SetVolume + + arm_func_start DseTrackEvent_VolumeDelta +DseTrackEvent_VolumeDelta: ; 0x02072310 + stmdb sp!, {r3, r4, r5, lr} + ldrsb r2, [r0] + ldr r1, [r3, #0x2c] + add r4, r2, r1, asr #16 + cmp r4, #0x7f + movgt r4, #0x7f + bgt _02072334 + cmp r4, #0 + movlt r4, #0 +_02072334: + mov r1, r4, lsl #0x10 + str r1, [r3, #0x34] + str r1, [r3, #0x2c] + mov r5, #0 + strh r5, [r3, #0x38] + ldrb r1, [r3, #0x50] + ldr ip, [r3, #0xc4] + ldr r2, _020723B8 ; =0x82061029 + mul r1, r4, r1 + ldrsb lr, [ip, #8] + ldr ip, _020723BC ; =0x04000208 + mul r4, lr, r1 + smull r1, lr, r2, r4 + add lr, r4, lr + mov r1, r4, lsr #0x1f + add lr, r1, lr, asr #13 + strh lr, [r3, #0x18] + ldrh r4, [ip] + strh r5, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _020723A4 +_0207238C: + ldrh r1, [r2, #6] + orr r1, r1, #0x20 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _0207238C +_020723A4: + ldr r2, _020723BC ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020723B8: .word 0x82061029 +_020723BC: .word 0x04000208 + arm_func_end DseTrackEvent_VolumeDelta + + arm_func_start DseTrackEvent_VolumeFade +DseTrackEvent_VolumeFade: ; 0x020723C0 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + ldrsb r1, [r5, #2] + ldrb r2, [r5] + ldrb r0, [r5, #1] + mov r4, r3 + mov r1, r1, lsl #0x10 + add r0, r2, r0, lsl #8 + mov r0, r0, lsl #0x10 + str r1, [r4, #0x34] + movs r6, r0, lsr #0x10 + streq r1, [r4, #0x2c] + beq _02072410 + ldr r0, [r4, #0x2c] + subs r0, r1, r0 + moveq r6, #0 + beq _02072410 + mov r1, r6 + bl _s32_div_f + str r0, [r4, #0x30] +_02072410: + strh r6, [r4, #0x38] + add r0, r5, #3 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseTrackEvent_VolumeFade + + arm_func_start DseTrackEvent_SetExpression +DseTrackEvent_SetExpression: ; 0x0207241C + stmdb sp!, {r3, r4, r5, lr} + ldrb r4, [r0] + ldr r2, _020724A0 ; =0x82061029 + ldr lr, _020724A4 ; =0x04000208 + strb r4, [r3, #0x50] + ldr r1, [r3, #0x2c] + ldr ip, [r3, #0xc4] + mov r1, r1, asr #0x10 + mul r4, r1, r4 + ldrsb r1, [ip, #8] + mov ip, #0 + mul r4, r1, r4 + smull r1, r5, r2, r4 + add r5, r4, r5 + mov r1, r4, lsr #0x1f + add r5, r1, r5, asr #13 + strh r5, [r3, #0x18] + ldrh r4, [lr] + strh ip, [lr] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _0207248C +_02072474: + ldrh r1, [r2, #6] + orr r1, r1, #0x20 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02072474 +_0207248C: + ldr r2, _020724A4 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020724A0: .word 0x82061029 +_020724A4: .word 0x04000208 + arm_func_end DseTrackEvent_SetExpression + + arm_func_start DseTrackEvent_SetupVolumeLfo +DseTrackEvent_SetupVolumeLfo: ; 0x020724A8 + stmdb sp!, {r3, r4, r5, lr} + ldrb r5, [r0] + ldrb r1, [r0, #1] + ldrb r4, [r0, #2] + ldrb lr, [r0, #3] + ldrb ip, [r0, #4] + mov r2, #1 + add r1, r5, r1, lsl #8 + mov r1, r1, lsl #0x10 + strb r2, [r3, #0x85] + mov r2, #2 + strb r2, [r3, #0x86] + strb ip, [r3, #0x87] + mov r1, r1, asr #0x10 + str r1, [r3, #0x88] + add r1, r4, lr, lsl #8 + strh r1, [r3, #0x8c] + mov r1, #0 + strh r1, [r3, #0x8e] + strh r1, [r3, #0x90] + strb r1, [r3, #0x92] + add r0, r0, #5 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseTrackEvent_SetupVolumeLfo + + arm_func_start DseTrackEvent_SetupVolumeLfoEnvelope +DseTrackEvent_SetupVolumeLfoEnvelope: ; 0x02072504 + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x8e] + ldrb r2, [r0, #2] + ldrb r1, [r0, #3] + add r0, r0, #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x90] + bx lr + arm_func_end DseTrackEvent_SetupVolumeLfoEnvelope + + arm_func_start DseTrackEvent_UseVolumeLfo +DseTrackEvent_UseVolumeLfo: ; 0x0207252C + ldrb r1, [r0] + add r0, r0, #1 + cmp r1, #2 + moveq r1, #1 + strb r1, [r3, #0x85] + cmp r1, #0 + moveq r1, #0 + movne r1, #2 + strb r1, [r3, #0x86] + bx lr + arm_func_end DseTrackEvent_UseVolumeLfo + + arm_func_start DseTrackEvent_SetPan +DseTrackEvent_SetPan: ; 0x02072554 + stmdb sp!, {r3, lr} + ldrb lr, [r0] + mov ip, #0 + cmp lr, #0x7f + movgt lr, #0x7f + mov r1, lr, lsl #0x10 + str r1, [r3, #0x44] + str r1, [r3, #0x3c] + strh ip, [r3, #0x48] + ldr r2, [r3, #0xc4] + ldr r1, _020725D0 ; =0x04000208 + ldrsb r2, [r2, #7] + sub r2, r2, #0x40 + add r2, lr, r2 + strh r2, [r3, #0x1a] + ldrh lr, [r1] + strh ip, [r1] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _020725BC +_020725A4: + ldrh r1, [r2, #6] + orr r1, r1, #0x40 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _020725A4 +_020725BC: + ldr r2, _020725D0 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh lr, [r2] + ldmia sp!, {r3, pc} + .align 2, 0 +_020725D0: .word 0x04000208 + arm_func_end DseTrackEvent_SetPan + + arm_func_start DseTrackEvent_PanDelta +DseTrackEvent_PanDelta: ; 0x020725D4 + stmdb sp!, {r3, lr} + ldrsb r2, [r0] + ldr r1, [r3, #0x3c] + add lr, r2, r1, asr #16 + cmp lr, #0x7f + movgt lr, #0x7f + bgt _020725F8 + cmp lr, #0 + movlt lr, #0 +_020725F8: + mov r1, lr, lsl #0x10 + str r1, [r3, #0x44] + str r1, [r3, #0x3c] + mov ip, #0 + strh ip, [r3, #0x48] + ldr r2, [r3, #0xc4] + ldr r1, _02072664 ; =0x04000208 + ldrsb r2, [r2, #7] + sub r2, r2, #0x40 + add r2, lr, r2 + strh r2, [r3, #0x1a] + ldrh lr, [r1] + strh ip, [r1] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _02072650 +_02072638: + ldrh r1, [r2, #6] + orr r1, r1, #0x40 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02072638 +_02072650: + ldr r2, _02072664 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh lr, [r2] + ldmia sp!, {r3, pc} + .align 2, 0 +_02072664: .word 0x04000208 + arm_func_end DseTrackEvent_PanDelta + + arm_func_start DseTrackEvent_PanFade +DseTrackEvent_PanFade: ; 0x02072668 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + ldrsb r1, [r5, #2] + ldrb r2, [r5] + ldrb r0, [r5, #1] + mov r4, r3 + mov r1, r1, lsl #0x10 + add r0, r2, r0, lsl #8 + mov r0, r0, lsl #0x10 + str r1, [r4, #0x44] + movs r6, r0, lsr #0x10 + streq r1, [r4, #0x3c] + beq _020726B8 + ldr r0, [r4, #0x3c] + subs r0, r1, r0 + moveq r6, #0 + beq _020726B8 + mov r1, r6 + bl _s32_div_f + str r0, [r4, #0x40] +_020726B8: + strh r6, [r4, #0x48] + add r0, r5, #3 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseTrackEvent_PanFade + + arm_func_start DseTrackEvent_SetupPanLfo +DseTrackEvent_SetupPanLfo: ; 0x020726C4 + stmdb sp!, {r3, r4, r5, lr} + ldrb r5, [r0] + ldrb r1, [r0, #1] + ldrb r4, [r0, #2] + ldrb lr, [r0, #3] + ldrb ip, [r0, #4] + mov r2, #1 + add r1, r5, r1, lsl #8 + mov r1, r1, lsl #0x10 + strb r2, [r3, #0x95] + mov r2, #3 + strb r2, [r3, #0x96] + strb ip, [r3, #0x97] + mov r1, r1, asr #0x10 + str r1, [r3, #0x98] + add r1, r4, lr, lsl #8 + strh r1, [r3, #0x9c] + mov r1, #0 + strh r1, [r3, #0x9e] + strh r1, [r3, #0xa0] + strb r1, [r3, #0xa2] + add r0, r0, #5 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseTrackEvent_SetupPanLfo + + arm_func_start DseTrackEvent_SetupPanLfoEnvelope +DseTrackEvent_SetupPanLfoEnvelope: ; 0x02072720 + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x9e] + ldrb r2, [r0, #2] + ldrb r1, [r0, #3] + add r0, r0, #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0xa0] + bx lr + arm_func_end DseTrackEvent_SetupPanLfoEnvelope + + arm_func_start DseTrackEvent_UsePanLfo +DseTrackEvent_UsePanLfo: ; 0x02072748 + ldrb r1, [r0] + add r0, r0, #1 + cmp r1, #2 + moveq r1, #1 + strb r1, [r3, #0x95] + cmp r1, #0 + moveq r1, #0 + movne r1, #3 + strb r1, [r3, #0x96] + bx lr + arm_func_end DseTrackEvent_UsePanLfo + + arm_func_start DseTrackEvent_SetupLfo +DseTrackEvent_SetupLfo: ; 0x02072770 + stmdb sp!, {r4, lr} + ldrb r2, [r0] + ldrb r1, [r0, #1] + ldrb ip, [r3, #0x61] + add r3, r3, #0x74 + add r1, r2, r1, lsl #8 + mov r1, r1, lsl #0x10 + ldrb r4, [r0, #2] + ldrb lr, [r0, #3] + ldrb r2, [r0, #4] + add r3, r3, ip, lsl #4 + mov r1, r1, asr #0x10 + strb r2, [r3, #3] + str r1, [r3, #4] + add r1, r4, lr, lsl #8 + strh r1, [r3, #8] + mov r1, #0 + strh r1, [r3, #0xa] + strh r1, [r3, #0xc] + strb r1, [r3, #0xe] + add r0, r0, #5 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetupLfo + + arm_func_start DseTrackEvent_SetupLfoEnvelope +DseTrackEvent_SetupLfoEnvelope: ; 0x020727C8 + ldrb ip, [r3, #0x61] + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r3, r3, #0x74 + add r3, r3, ip, lsl #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0xa] + ldrb r2, [r0, #2] + ldrb r1, [r0, #3] + add r0, r0, #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0xc] + bx lr + arm_func_end DseTrackEvent_SetupLfoEnvelope + + arm_func_start DseTrackEvent_SetLfoParameter +DseTrackEvent_SetLfoParameter: ; 0x020727FC + ldrb r1, [r3, #0x61] + ldrb ip, [r0] + add r2, r3, #0x74 + add r1, r2, r1, lsl #4 + ldrb r2, [r0, #1] + cmp ip, #0xa + addls pc, pc, ip, lsl #2 + b _02072930 +_0207281C: ; jump table + b _02072930 ; case 0 + b _02072848 ; case 1 + b _02072850 ; case 2 + b _02072858 ; case 3 + b _02072860 ; case 4 + b _02072868 ; case 5 + b _020728E0 ; case 6 + b _020728EC ; case 7 + b _020728FC ; case 8 + b _02072910 ; case 9 + b _02072924 ; case 10 +_02072848: + strb r2, [r3, #0x61] + b _02072930 +_02072850: + strb r2, [r1, #1] + b _02072930 +_02072858: + strb r2, [r1, #2] + b _02072930 +_02072860: + strb r2, [r1, #3] + b _02072930 +_02072868: + ldrb r3, [r1, #2] + cmp r3, #4 + addls pc, pc, r3, lsl #2 + b _020728CC +_02072878: ; jump table + b _020728CC ; case 0 + b _0207288C ; case 1 + b _0207289C ; case 2 + b _020728AC ; case 3 + b _020728BC ; case 4 +_0207288C: + mov r3, #0xa + mul r3, r2, r3 + mov r2, r3 + b _020728D8 +_0207289C: + mvn r3, #0x13 + mul r3, r2, r3 + mov r2, r3 + b _020728D8 +_020728AC: + mov r3, #0x14 + mul r3, r2, r3 + mov r2, r3 + b _020728D8 +_020728BC: + mov r3, #0xa + mul r3, r2, r3 + mov r2, r3 + b _020728D8 +_020728CC: + mov r3, #0x14 + mul r3, r2, r3 + mov r2, r3 +_020728D8: + str r2, [r1, #4] + b _02072930 +_020728E0: + add r2, r2, r2, lsl #2 + strh r2, [r1, #8] + b _02072930 +_020728EC: + mov r3, #0x14 + mul r3, r2, r3 + strh r3, [r1, #0xa] + b _02072930 +_020728FC: + ldrh r3, [r1, #0xa] + and r3, r3, #0xff00 + orr r2, r3, r2 + strh r2, [r1, #0xa] + b _02072930 +_02072910: + ldrh r3, [r1, #0xa] + and r3, r3, #0xff + orr r2, r3, r2, lsl #8 + strh r2, [r1, #0xa] + b _02072930 +_02072924: + mov r3, #0x14 + mul r3, r2, r3 + strh r3, [r1, #0xc] +_02072930: + add r0, r0, #2 + bx lr + arm_func_end DseTrackEvent_SetLfoParameter + + arm_func_start DseTrackEvent_UseLfo +DseTrackEvent_UseLfo: ; 0x02072938 + stmdb sp!, {r3, lr} + ldrb ip, [r0, #1] + ldrb r2, [r0] + ldrb lr, [r0, #2] + add r1, r3, #0x74 + cmp ip, #2 + strb r2, [r3, #0x61] + add r1, r1, r2, lsl #4 + moveq ip, #1 + strb ip, [r1, #1] + strb lr, [r1, #2] + add r0, r0, #3 + ldmia sp!, {r3, pc} + arm_func_end DseTrackEvent_UseLfo + + arm_func_start DseTrackEvent_Signal +DseTrackEvent_Signal: ; 0x0207296C + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r2, [r4] + mov ip, r1 + mov r1, #8 + strb r2, [ip, #0x16] + ldr r0, [ip, #0x28] + ldr r3, [ip, #0xa0] + ldr ip, [ip, #0x9c] + blx ip + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_Signal + + arm_func_start DseTrackEvent_Dummy2Bytes2 +DseTrackEvent_Dummy2Bytes2: ; 0x0207299C + add r0, r0, #2 + bx lr + arm_func_end DseTrackEvent_Dummy2Bytes2 + + arm_func_start sub_020729A4 +sub_020729A4: ; 0x020729A4 + ldr r0, _020729B4 ; =_022B9584 + mov r1, #0 + str r1, [r0] + bx lr + .align 2, 0 +_020729B4: .word _022B9584 + arm_func_end sub_020729A4 + + arm_func_start sub_020729B8 +sub_020729B8: ; 0x020729B8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr sb, _02072BB4 ; =_022B9584 + ldr r8, [sb] + ldrb r6, [r8, #0x86] + cmp r6, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r5, [r8, #0x85] + mov r1, #0 + cmp r6, #0 + str r1, [sp] + beq _02072B98 + mov fp, #3 + mov r1, #2 + mov r2, r1 + mov r3, fp + mov ip, r1 + mov lr, fp + mov r4, fp +_02072A04: + ldrb sl, [r8, #0x88] + add r7, r8, r5 + add r5, r5, #1 + sub r6, r6, #1 + and r5, r5, #0xff + cmp r5, #0x80 + moveq r5, #0 + ldrb r7, [r7, #4] + and r6, r6, #0xff + cmp sl, #0 + bne _02072B28 + tst r7, #0x80 + bne _02072A4C + add sl, sl, #1 + strb sl, [r8, #0x88] + ldr r8, [sb] + strb r7, [r8, #0x8c] + b _02072B30 +_02072A4C: + and sl, r7, #0xf0 + strb sl, [r8, #0x8a] + and r8, r7, #0xf + ldr r7, [sb] + strb r8, [r7, #0x8b] + ldr r7, [sb] + ldrb r8, [r7, #0x8a] + cmp r8, #0xc0 + bgt _02072AA8 + bge _02072AF8 + cmp r8, #0x90 + bgt _02072A8C + bge _02072AE0 + cmp r8, #0x80 + beq _02072AD8 + b _02072B1C +_02072A8C: + cmp r8, #0xa0 + bgt _02072A9C + beq _02072AE8 + b _02072B1C +_02072A9C: + cmp r8, #0xb0 + beq _02072AF0 + b _02072B1C +_02072AA8: + cmp r8, #0xe0 + bgt _02072AC0 + bge _02072B08 + cmp r8, #0xd0 + beq _02072B00 + b _02072B1C +_02072AC0: + cmp r8, #0xf0 + bgt _02072AD0 + beq _02072B10 + b _02072B1C +_02072AD0: + cmp r8, #0xff + b _02072B1C +_02072AD8: + strb r4, [r7, #0x87] + b _02072B30 +_02072AE0: + strb lr, [r7, #0x87] + b _02072B30 +_02072AE8: + strb ip, [r7, #0x87] + b _02072B30 +_02072AF0: + strb r3, [r7, #0x87] + b _02072B30 +_02072AF8: + strb r2, [r7, #0x87] + b _02072B30 +_02072B00: + strb r1, [r7, #0x87] + b _02072B30 +_02072B08: + strb fp, [r7, #0x87] + b _02072B30 +_02072B10: + mov r8, #3 + strb r8, [r7, #0x87] + b _02072B30 +_02072B1C: + mov r8, #0 + strb r8, [r7, #0x87] + b _02072B30 +_02072B28: + add r8, r8, sl + strb r7, [r8, #0x8b] +_02072B30: + ldr r7, [sb] + ldrb r8, [r7, #0x88] + add r8, r8, #1 + strb r8, [r7, #0x88] + ldr r8, [sb] + ldrb sl, [r8, #0x88] + ldrb r7, [r8, #0x87] + cmp sl, r7 + bne _02072B90 + mov r2, #0 + ldr r1, _02072BB4 ; =_022B9584 + strb r2, [r8, #0x88] + ldr r3, [r1] + mov r1, #1 + str r1, [sp] + ldrb r2, [r3, #0x8a] + ldrb r1, [r3, #0x8b] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #0x8c] + ldrb r1, [r3, #0x8d] + strb r2, [r0, #2] + strb r1, [r0, #3] + b _02072B98 +_02072B90: + cmp r6, #0 + bne _02072A04 +_02072B98: + ldr r1, _02072BB4 ; =_022B9584 + ldr r0, [sp] + ldr r2, [r1] + strb r6, [r2, #0x86] + ldr r1, [r1] + strb r5, [r1, #0x85] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02072BB4: .word _022B9584 + arm_func_end sub_020729B8 + + arm_func_start sub_02072BB8 +sub_02072BB8: ; 0x02072BB8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + ldr r0, _02072D94 ; =_022B9584 + ldr r0, [r0] + ldr r4, [r0] + cmp r4, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r0, sp, #8 + bl sub_020729B8 + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add sb, r4, #0x10 + mov r6, #0 + ldr r4, _02072D98 ; =_020B0D50 + add r7, sp, #0 + mov r5, #1 + mov r8, r6 + mov fp, #0xc8 +_02072C08: + ldrb r1, [sp, #9] + ldrb r0, [sp, #8] + mla sl, r1, fp, sb + cmp r0, #0xc0 + bgt _02072C4C + bge _02072D4C + cmp r0, #0x90 + bgt _02072C38 + bge _02072CC0 + cmp r0, #0x80 + beq _02072C8C + b _02072D7C +_02072C38: + cmp r0, #0xa0 + ble _02072D7C + cmp r0, #0xb0 + beq _02072D2C + b _02072D7C +_02072C4C: + cmp r0, #0xf0 + bgt _02072C6C + bge _02072D7C + cmp r0, #0xd0 + ble _02072D7C + cmp r0, #0xe0 + beq _02072D5C + b _02072D7C +_02072C6C: + cmp r0, #0xf7 + ble _02072D7C + cmp r0, #0xff + bgt _02072D7C + cmp r0, #0xfe + blt _02072D7C + cmpne r0, #0xff + b _02072D7C +_02072C8C: + ldrb r1, [sp, #0xa] + ldrb r0, [sp, #0xb] + str r8, [sp, #4] + strb r1, [sp, #2] + strb r0, [sp, #3] + strb r8, [sp] + ldrb r0, [sl, #4] + tst r0, #1 + bne _02072D7C + mov r0, sl + mov r1, r7 + bl DseChannel_ReleaseNoteInternal + b _02072D7C +_02072CC0: + ldrb r0, [sp, #0xb] + ldrb r1, [sp, #0xa] + str r6, [sp, #4] + strb r0, [sp, #3] + strb r1, [sp, #2] + tst r0, #0xff + beq _02072D0C + mov r0, sl + mov r1, r7 + strb r5, [sp] + bl DseChannel_ReleaseNote + mov r0, sl + mov r1, r7 + bl DseChannel_AllocateNote + movs r1, r0 + beq _02072D7C + mov r0, sl + bl DseVoice_PlayNote + b _02072D7C +_02072D0C: + strb r6, [sp] + ldrb r0, [sl, #4] + tst r0, #1 + bne _02072D7C + mov r0, sl + mov r1, r7 + bl DseChannel_ReleaseNoteInternal + b _02072D7C +_02072D2C: + ldrb r0, [sp, #0xa] + ldr r2, [r4, r0, lsl #2] + cmp r2, #0 + beq _02072D7C + ldrb r1, [sp, #0xb] + mov r0, sl + blx r2 + b _02072D7C +_02072D4C: + ldrb r1, [sp, #0xa] + mov r0, sl + bl DseChannel_SetInstrument + b _02072D7C +_02072D5C: + ldrb r2, [sp, #0xa] + ldrb r1, [sp, #0xb] + mov r0, sl + add r1, r2, r1, lsl #7 + sub r1, r1, #0x2000 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + bl DseChannel_SetKeyBend +_02072D7C: + add r0, sp, #8 + bl sub_020729B8 + cmp r0, #0 + bne _02072C08 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02072D94: .word _022B9584 +_02072D98: .word _020B0D50 + arm_func_end sub_02072BB8 + + arm_func_start sub_02072D9C +sub_02072D9C: ; 0x02072D9C + ldrh r2, [r0, #0xe] + ldr ip, _02072DB8 ; =DseChannel_SetBank + and r2, r2, #0xff + add r1, r2, r1, lsl #8 + strh r1, [r0, #0xe] + ldrh r1, [r0, #0xe] + bx ip + .align 2, 0 +_02072DB8: .word DseChannel_SetBank + arm_func_end sub_02072D9C + + arm_func_start sub_02072DBC +sub_02072DBC: ; 0x02072DBC + ldrh r2, [r0, #0xe] + ldr ip, _02072DD8 ; =DseChannel_SetBank + bic r2, r2, #0xff + add r1, r2, r1 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bx ip + .align 2, 0 +_02072DD8: .word DseChannel_SetBank + arm_func_end sub_02072DBC + + arm_func_start sub_02072DDC +sub_02072DDC: ; 0x02072DDC + mov r1, r1, lsl #0x18 + mov r1, r1, asr #0x18 + ldr ip, _02072DF0 ; =DseChannel_SetLfoConstEnvelopeLevel + strb r1, [r0, #0x51] + bx ip + .align 2, 0 +_02072DF0: .word DseChannel_SetLfoConstEnvelopeLevel + arm_func_end sub_02072DDC + + arm_func_start sub_02072DF4 +sub_02072DF4: ; 0x02072DF4 + mov r2, #0xa + mul r2, r1, r2 + strh r2, [r0, #0x56] + bx lr + arm_func_end sub_02072DF4 + + arm_func_start sub_02072E04 +sub_02072E04: ; 0x02072E04 + stmdb sp!, {r4, lr} + mov r2, r1, lsl #0x10 + str r2, [r0, #0x34] + str r2, [r0, #0x2c] + mov r4, #0 + strh r4, [r0, #0x38] + ldrb r3, [r0, #0x50] + ldr lr, [r0, #0xc4] + ldr r2, _02072E88 ; =0x82061029 + mul ip, r1, r3 + ldrsb r1, [lr, #8] + ldr r3, _02072E8C ; =0x04000208 + mul ip, r1, ip + smull r1, lr, r2, ip + add lr, ip, lr + mov r1, ip, lsr #0x1f + add lr, r1, lr, asr #13 + strh lr, [r0, #0x18] + ldrh r2, [r3] + strh r4, [r3] + ldr r1, [r0, #0xb4] + cmp r1, #0 + beq _02072E78 +_02072E60: + ldrh r0, [r1, #6] + orr r0, r0, #0x20 + strh r0, [r1, #6] + ldr r1, [r1, #0x154] + cmp r1, #0 + bne _02072E60 +_02072E78: + ldr r1, _02072E8C ; =0x04000208 + ldrh r0, [r1] + strh r2, [r1] + ldmia sp!, {r4, pc} + .align 2, 0 +_02072E88: .word 0x82061029 +_02072E8C: .word 0x04000208 + arm_func_end sub_02072E04 + + arm_func_start sub_02072E90 +sub_02072E90: ; 0x02072E90 + mov r1, r1, lsl #0x10 + str r1, [r0, #0x44] + str r1, [r0, #0x3c] + mov r2, #0 + ldr r1, _02072EE4 ; =0x04000208 + strh r2, [r0, #0x48] + ldrh r3, [r1] + strh r2, [r1] + ldr r1, [r0, #0xb4] + cmp r1, #0 + beq _02072ED4 +_02072EBC: + ldrh r0, [r1, #6] + orr r0, r0, #0x40 + strh r0, [r1, #6] + ldr r1, [r1, #0x154] + cmp r1, #0 + bne _02072EBC +_02072ED4: + ldr r1, _02072EE4 ; =0x04000208 + ldrh r0, [r1] + strh r3, [r1] + bx lr + .align 2, 0 +_02072EE4: .word 0x04000208 + arm_func_end sub_02072E90 + + arm_func_start sub_02072EE8 +sub_02072EE8: ; 0x02072EE8 + ldr r2, _02072F30 ; =0x04000208 + strb r1, [r0, #0x50] + ldrh r3, [r2] + mov r1, #0 + strh r1, [r2] + ldr r1, [r0, #0xb4] + cmp r1, #0 + beq _02072F20 +_02072F08: + ldrh r0, [r1, #6] + orr r0, r0, #0x20 + strh r0, [r1, #6] + ldr r1, [r1, #0x154] + cmp r1, #0 + bne _02072F08 +_02072F20: + ldr r1, _02072F30 ; =0x04000208 + ldrh r0, [r1] + strh r3, [r1] + bx lr + .align 2, 0 +_02072F30: .word 0x04000208 + arm_func_end sub_02072EE8 + + arm_func_start sub_02072F34 +sub_02072F34: ; 0x02072F34 + strb r1, [r0, #0x58] + bx lr + arm_func_end sub_02072F34 + + arm_func_start sub_02072F3C +sub_02072F3C: ; 0x02072F3C + stmdb sp!, {r3, lr} + cmp r1, #0x40 + ldrb r1, [r0, #4] + orrhs r1, r1, #1 + strhsb r1, [r0, #4] + ldmhsia sp!, {r3, pc} + bic r1, r1, #1 + strb r1, [r0, #4] + bl DseVoice_ReleaseHeld + ldmia sp!, {r3, pc} + arm_func_end sub_02072F3C + + arm_func_start sub_02072F64 +sub_02072F64: ; 0x02072F64 + bx lr + arm_func_end sub_02072F64 + + arm_func_start sub_02072F68 +sub_02072F68: ; 0x02072F68 + bx lr + arm_func_end sub_02072F68 + + arm_func_start sub_02072F6C +sub_02072F6C: ; 0x02072F6C + bx lr + arm_func_end sub_02072F6C + + arm_func_start sub_02072F70 +sub_02072F70: ; 0x02072F70 + bx lr + arm_func_end sub_02072F70 + + arm_func_start sub_02072F74 +sub_02072F74: ; 0x02072F74 + strb r1, [r0, #0x5c] + mov r1, #1 + strb r1, [r0, #0x60] + bx lr + arm_func_end sub_02072F74 + + arm_func_start sub_02072F84 +sub_02072F84: ; 0x02072F84 + strb r1, [r0, #0x5a] + mov r1, #0 + strb r1, [r0, #0x60] + bx lr + arm_func_end sub_02072F84 + + arm_func_start sub_02072F94 +sub_02072F94: ; 0x02072F94 + strb r1, [r0, #0x5b] + mov r1, #0 + strb r1, [r0, #0x60] + bx lr + arm_func_end sub_02072F94 + + arm_func_start sub_02072FA4 +sub_02072FA4: ; 0x02072FA4 + bx lr + arm_func_end sub_02072FA4 + + arm_func_start sub_02072FA8 +sub_02072FA8: ; 0x02072FA8 + bx lr + arm_func_end sub_02072FA8 + + arm_func_start sub_02072FAC +sub_02072FAC: ; 0x02072FAC + stmdb sp!, {r3, lr} + ldr r0, _02072FD4 ; =_022B9584 + ldr r0, [r0] + ldr r0, [r0] + bl DseSynth_StopChannels + ldr r0, _02072FD4 ; =_022B9584 + ldr r0, [r0] + ldr r0, [r0] + bl DseSynth_ClearHeldNotes + ldmia sp!, {r3, pc} + .align 2, 0 +_02072FD4: .word _022B9584 + arm_func_end sub_02072FAC + + arm_func_start sub_02072FD8 +sub_02072FD8: ; 0x02072FD8 + ldr r0, _02072FF4 ; =_022B9584 + mov r1, #0 + ldr r0, [r0] + ldr ip, _02072FF8 ; =DseSynth_SetBankAndSequence + mov r2, r1 + ldr r0, [r0] + bx ip + .align 2, 0 +_02072FF4: .word _022B9584 +_02072FF8: .word DseSynth_SetBankAndSequence + arm_func_end sub_02072FD8 + + arm_func_start sub_02072FFC +sub_02072FFC: ; 0x02072FFC + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + bl DseChannel_DeallocateVoices + ldr r1, _02073074 ; =0x04000208 + mov r0, #0 + ldrh r5, [r1] + strh r0, [r1] + ldr lr, [r4, #0xb8] + cmp lr, #0 + ldreqh r0, [r1] + streqh r5, [r1] + ldmeqia sp!, {r3, r4, r5, pc} + mov ip, lr + mvn r1, #0 + mov r3, r0 +_02073038: + str r1, [lr, #4] + strb r3, [ip, #1] + ldr r0, [ip, #8] + cmp r0, #0 + movne ip, r0 + bne _02073038 + ldr r0, _02073078 ; =DRIVER_WORK + ldr r1, _02073074 ; =0x04000208 + ldr r2, [r0, #0x650] + str r2, [ip, #8] + str lr, [r0, #0x650] + str r3, [r4, #0xb8] + ldrh r0, [r1] + strh r5, [r1] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02073074: .word 0x04000208 +_02073078: .word DRIVER_WORK + arm_func_end sub_02072FFC + + arm_func_start sub_0207307C +sub_0207307C: ; 0x0207307C + mov r1, #0 + strb r1, [r0, #7] + bx lr + arm_func_end sub_0207307C + + arm_func_start sub_02073088 +sub_02073088: ; 0x02073088 + mov r1, #1 + strb r1, [r0, #7] + bx lr + arm_func_end sub_02073088 + + arm_func_start sub_02073094 +sub_02073094: ; 0x02073094 + ldr ip, _020730A4 ; =SoundEnvelopeParameters_CheckValidity + strb r1, [r0, #0x72] + add r0, r0, #0x64 + bx ip + .align 2, 0 +_020730A4: .word SoundEnvelopeParameters_CheckValidity + arm_func_end sub_02073094 + + arm_func_start sub_020730A8 +sub_020730A8: ; 0x020730A8 + ldr ip, _020730B8 ; =SoundEnvelopeParameters_CheckValidity + strb r1, [r0, #0x6d] + add r0, r0, #0x64 + bx ip + .align 2, 0 +_020730B8: .word SoundEnvelopeParameters_CheckValidity + arm_func_end sub_020730A8 + + arm_func_start sub_020730BC +sub_020730BC: ; 0x020730BC + ldr ip, _020730CC ; =SoundEnvelopeParameters_CheckValidity + strb r1, [r0, #0x6e] + add r0, r0, #0x64 + bx ip + .align 2, 0 +_020730CC: .word SoundEnvelopeParameters_CheckValidity + arm_func_end sub_020730BC + + arm_func_start sub_020730D0 +sub_020730D0: ; 0x020730D0 + ldr ip, _020730E0 ; =SoundEnvelopeParameters_CheckValidity + strb r1, [r0, #0x71] + add r0, r0, #0x64 + bx ip + .align 2, 0 +_020730E0: .word SoundEnvelopeParameters_CheckValidity + arm_func_end sub_020730D0 + + arm_func_start sub_020730E4 +sub_020730E4: ; 0x020730E4 + ldrb r2, [r0, #0x61] + add r1, r1, r1, lsl #2 + add r0, r0, r2, lsl #4 + strh r1, [r0, #0x7c] + bx lr + arm_func_end sub_020730E4 + + arm_func_start sub_020730F8 +sub_020730F8: ; 0x020730F8 + and r3, r1, #2 + add r2, r0, #0x74 + strb r3, [r0, #0x61] + add r2, r2, r3, lsl #4 + mov r0, r1, asr #2 + strb r0, [r2, #1] + add r0, r3, #1 + strb r0, [r2, #2] + bx lr + arm_func_end sub_020730F8 + + arm_func_start sub_0207311C +sub_0207311C: ; 0x0207311C + ldrb r2, [r0, #0x61] + add r0, r0, r2, lsl #4 + strb r1, [r0, #0x77] + bx lr + arm_func_end sub_0207311C + + arm_func_start sub_0207312C +sub_0207312C: ; 0x0207312C + ldrb r2, [r0, #0x61] + add r0, r0, #0x74 + add r0, r0, r2, lsl #4 + ldrb r2, [r0, #2] + cmp r2, #4 + addls pc, pc, r2, lsl #2 + b _020731AC +_02073148: ; jump table + b _020731AC ; case 0 + b _0207315C ; case 1 + b _02073170 ; case 2 + b _02073184 ; case 3 + b _02073198 ; case 4 +_0207315C: + mov r2, #0xa + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 + b _020731BC +_02073170: + mvn r2, #0x13 + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 + b _020731BC +_02073184: + mov r2, #0x14 + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 + b _020731BC +_02073198: + mov r2, #0xa + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 + b _020731BC +_020731AC: + mov r2, #0x14 + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 +_020731BC: + str r1, [r0, #4] + bx lr + arm_func_end sub_0207312C + + arm_func_start sub_020731C4 +sub_020731C4: ; 0x020731C4 + mov r2, #0x14 + mul r2, r1, r2 + ldrb r1, [r0, #0x61] + add r0, r0, r1, lsl #4 + strh r2, [r0, #0x7e] + bx lr + arm_func_end sub_020731C4 + + arm_func_start sub_020731DC +sub_020731DC: ; 0x020731DC + mov r2, #0x14 + mul r2, r1, r2 + ldrb r1, [r0, #0x61] + add r0, r0, r1, lsl #4 + strh r2, [r0, #0x80] + bx lr + arm_func_end sub_020731DC + + arm_func_start sub_020731F4 +sub_020731F4: ; 0x020731F4 + strb r1, [r0, #0x59] + bx lr + arm_func_end sub_020731F4 + + arm_func_start sub_020731FC +sub_020731FC: ; 0x020731FC + bx lr + arm_func_end sub_020731FC + + arm_func_start sub_02073200 +sub_02073200: ; 0x02073200 + bx lr + arm_func_end sub_02073200 + + arm_func_start sub_02073204 +sub_02073204: ; 0x02073204 + bx lr + arm_func_end sub_02073204 + + arm_func_start DseSynth_Reset +DseSynth_Reset: ; 0x02073208 + stmdb sp!, {r4, lr} + ldr r1, _02073274 ; =DRIVER_WORK + mov r2, #1 + ldrsb r3, [r1, #0x41] + mov r4, #0 + mov r1, #0x7f + strb r3, [r0, #2] + strb r2, [r0, #3] + strh r4, [r0, #4] + strb r1, [r0, #6] + mov r1, #0x40 + strb r1, [r0, #7] + ldrb ip, [r0, #2] + ldrsb r1, [r0, #6] + ldr r2, _02073278 ; =0x81020409 + ldr r3, _0207327C ; =_022B7A30 + smulbb ip, ip, r1 + smull r1, lr, r2, ip + add lr, ip, lr + mov r1, ip, lsr #0x1f + add lr, r1, lr, asr #6 + strb lr, [r0, #8] + strb r4, [r0, #9] + strb r4, [r0, #0xa] + ldrh r1, [r3, #0x2e] + strb r1, [r0, #0xb] + ldmia sp!, {r4, pc} + .align 2, 0 +_02073274: .word DRIVER_WORK +_02073278: .word 0x81020409 +_0207327C: .word _022B7A30 + arm_func_end DseSynth_Reset + + arm_func_start DseSynth_AllocateNew +DseSynth_AllocateNew: ; 0x02073280 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r0, #0xc8 + mul r0, r5, r0 + mov r2, r1 + add r0, r0, #0x10 + mov r1, #0x10 + bl DseMem_Allocate + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r1, #0 + strb r1, [r4] + strb r5, [r4, #1] + str r1, [r4, #0xc] + bl DseSynth_Reset + cmp r5, #0 + add r1, r4, #0x10 + mov r2, #0 + ble _02073300 + mov r0, r2 +_020732D4: + str r0, [r1] + strb r2, [r1, #5] + str r0, [r1, #0xb4] + str r0, [r1, #0xb8] + str r0, [r1, #0xbc] + str r0, [r1, #0xc0] + add r2, r2, #1 + str r4, [r1, #0xc4] + cmp r2, r5 + add r1, r1, #0xc8 + blt _020732D4 +_02073300: + ldr r1, _02073348 ; =0x04000208 + mov r0, #0 + ldrh r3, [r1] + ldr r2, _0207334C ; =_022B7988 + strh r0, [r1] + ldr r0, [r2] + cmp r0, #0 + beq _02073330 +_02073320: + add r2, r0, #0xc + ldr r0, [r0, #0xc] + cmp r0, #0 + bne _02073320 +_02073330: + ldr r1, _02073348 ; =0x04000208 + str r4, [r2] + ldrh r0, [r1] + mov r0, r4 + strh r3, [r1] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02073348: .word 0x04000208 +_0207334C: .word _022B7988 + arm_func_end DseSynth_AllocateNew + + arm_func_start DseSynth_Unload +DseSynth_Unload: ; 0x02073350 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl DseSynth_StopChannels + ldr r2, _020733B4 ; =0x04000208 + mov r0, r5 + ldrh r4, [r2] + mov r1, #0 + strh r1, [r2] + bl DseSynth_ClearHeldNotes + ldr r1, _020733B8 ; =_022B7988 + b _02073380 +_0207337C: + add r1, r0, #0xc +_02073380: + ldr r0, [r1] + cmp r0, #0 + cmpne r0, r5 + bne _0207337C + cmp r0, r5 + ldreq r0, [r5, #0xc] + ldr r2, _020733B4 ; =0x04000208 + streq r0, [r1] + ldrh r1, [r2] + mov r0, r5 + strh r4, [r2] + bl DseMem_Free + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020733B4: .word 0x04000208 +_020733B8: .word _022B7988 + arm_func_end DseSynth_Unload + + arm_func_start DseSynth_ClearHeldNotes +DseSynth_ClearHeldNotes: ; 0x020733BC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldrb r3, [r0, #1] + add r1, r0, #0x10 + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + ldr r7, _02073450 ; =0x04000208 + ldr ip, _02073454 ; =DRIVER_WORK + mvn r5, #0 + mov r4, r2 + mov r6, r2 +_020733E8: + ldrh r3, [r7] + strh r6, [r7] + ldr sb, [r1, #0xb8] + cmp sb, #0 + ldreqh lr, [r7] + streqh r3, [r7] + beq _02073438 + mov r8, sb +_02073408: + str r5, [sb, #4] + strb r4, [r8, #1] + ldr lr, [r8, #8] + cmp lr, #0 + movne r8, lr + bne _02073408 + ldr lr, [ip, #0x650] + str lr, [r8, #8] + str sb, [ip, #0x650] + str r4, [r1, #0xb8] + ldrh lr, [r7] + strh r3, [r7] +_02073438: + ldrb r3, [r0, #1] + add r2, r2, #1 + add r1, r1, #0xc8 + cmp r2, r3 + blt _020733E8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02073450: .word 0x04000208 +_02073454: .word DRIVER_WORK + arm_func_end DseSynth_ClearHeldNotes + + arm_func_start DseSynth_ResetAndSetBankAndSequence +DseSynth_ResetAndSetBankAndSequence: ; 0x02073458 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl DseSynth_Reset + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl DseSynth_SetBankAndSequence + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseSynth_ResetAndSetBankAndSequence + + arm_func_start DseSynth_StopChannels +DseSynth_StopChannels: ; 0x02073480 + stmdb sp!, {r3, r4, r5, lr} + ldrb r5, [r0, #1] + add r4, r0, #0x10 + cmp r5, #0 + ldmeqia sp!, {r3, r4, r5, pc} +_02073494: + mov r0, r4 + bl DseChannel_DeallocateVoices + subs r5, r5, #1 + add r4, r4, #0xc8 + bne _02073494 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseSynth_StopChannels + + arm_func_start DseSynth_ResetAllVoiceTimersAndVolumes +DseSynth_ResetAllVoiceTimersAndVolumes: ; 0x020734AC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r3, _02073500 ; =0x04000208 + mov r2, #0 + ldrh r6, [r3] + mov r7, r1 + add r4, r0, #0x10 + strh r2, [r3] + strb r7, [r0, #9] + ldrb r5, [r0, #1] + cmp r5, #0 + beq _020734F0 +_020734D8: + mov r0, r4 + mov r1, r7 + bl DseChannel_ResetTimerAndVolumeForVoices + subs r5, r5, #1 + add r4, r4, #0xc8 + bne _020734D8 +_020734F0: + ldr r1, _02073500 ; =0x04000208 + ldrh r0, [r1] + strh r6, [r1] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02073500: .word 0x04000208 + arm_func_end DseSynth_ResetAllVoiceTimersAndVolumes + + arm_func_start DseSynth_RestoreHeldNotes +DseSynth_RestoreHeldNotes: ; 0x02073504 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r2, _02073568 ; =0x04000208 + ldrb r6, [r0, #1] + ldrh r4, [r2] + mov r1, #0 + cmp r6, #0 + strh r1, [r2] + add r5, r0, #0x10 + beq _02073558 +_02073528: + ldr r7, [r5, #0xb8] + cmp r7, #0 + beq _0207354C +_02073534: + mov r0, r5 + mov r1, r7 + bl DseVoice_PlayNote + ldr r7, [r7, #8] + cmp r7, #0 + bne _02073534 +_0207354C: + subs r6, r6, #1 + add r5, r5, #0xc8 + bne _02073528 +_02073558: + ldr r1, _02073568 ; =0x04000208 + ldrh r0, [r1] + strh r4, [r1] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02073568: .word 0x04000208 + arm_func_end DseSynth_RestoreHeldNotes + + arm_func_start DseSynth_SetGlobalVolumeIndex +DseSynth_SetGlobalVolumeIndex: ; 0x0207356C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r3, _02073644 ; =_022B7370 + ldr r4, _02073648 ; =0x81020409 + ldrsb r5, [r3, r1] + add r3, r0, #0x10 + mov ip, #0 + strb r5, [r0, #2] + strb r1, [r0, #3] + ldrb r5, [r0, #2] + ldrsb r1, [r0, #6] + smulbb r5, r5, r1 + smull r1, r6, r4, r5 + add r6, r5, r6 + mov r1, r5, lsr #0x1f + add r6, r1, r6, asr #6 + strb r6, [r0, #8] + ldrb r1, [r0, #1] + cmp r1, #0 + ldmleia sp!, {r4, r5, r6, r7, r8, pc} + ldr r6, _0207364C ; =0x04000208 + mov r5, ip +_020735C0: + ldr r4, [r3, #0x2c] + ldrb r1, [r3, #0x50] + mov r4, r4, asr #0x10 + ldrsb lr, [r0, #8] + mul r1, r4, r1 + mul r7, lr, r1 + ldr r4, _02073650 ; =0x82061029 + mov r1, r7, lsr #0x1f + smull lr, r8, r4, r7 + add r8, r7, r8 + add r8, r1, r8, asr #13 + strh r8, [r3, #0x18] + cmp r2, #1 + bne _0207362C + ldrh r7, [r6] + strh r5, [r6] + ldr r4, [r3, #0xb4] + cmp r4, #0 + beq _02073624 +_0207360C: + ldrh r1, [r4, #6] + orr r1, r1, #0x20 + strh r1, [r4, #6] + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _0207360C +_02073624: + ldrh r1, [r6] + strh r7, [r6] +_0207362C: + ldrb r1, [r0, #1] + add ip, ip, #1 + add r3, r3, #0xc8 + cmp ip, r1 + blt _020735C0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02073644: .word _022B7370 +_02073648: .word 0x81020409 +_0207364C: .word 0x04000208 +_02073650: .word 0x82061029 + arm_func_end DseSynth_SetGlobalVolumeIndex + + arm_func_start DseSynth_SetBend +DseSynth_SetBend: ; 0x02073654 + stmdb sp!, {r3, r4, r5, lr} + strh r1, [r0, #4] + ldrb r3, [r0, #1] + add r1, r0, #0x10 + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r3, r4, r5, pc} + ldr lr, _020736E4 ; =0x04000208 + mov ip, r2 +_02073678: + ldr r3, [r1, #0x1c] + ldrsh r4, [r1, #0x54] + mov r3, r3, asr #0x10 + mov r3, r3, lsl #0x10 + ldrsh r5, [r0, #4] + add r3, r4, r3, asr #16 + add r3, r5, r3 + strh r3, [r1, #0x16] + ldrh r5, [lr] + strh ip, [lr] + ldr r4, [r1, #0xb4] + cmp r4, #0 + beq _020736C4 +_020736AC: + ldrh r3, [r4, #6] + orr r3, r3, #0x10 + strh r3, [r4, #6] + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _020736AC +_020736C4: + ldrh r3, [lr] + add r2, r2, #1 + add r1, r1, #0xc8 + strh r5, [lr] + ldrb r3, [r0, #1] + cmp r2, r3 + blt _02073678 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020736E4: .word 0x04000208 + arm_func_end DseSynth_SetBend + + arm_func_start DseSynth_SetVolume +DseSynth_SetVolume: ; 0x020736E8 + stmdb sp!, {r4, r5, r6, lr} + strb r1, [r0, #6] + ldrb r4, [r0, #2] + ldrsb r2, [r0, #6] + ldr r3, _020737AC ; =0x81020409 + add r1, r0, #0x10 + smulbb r4, r4, r2 + smull r2, r5, r3, r4 + add r5, r4, r5 + mov r2, r4, lsr #0x1f + add r5, r2, r5, asr #6 + strb r5, [r0, #8] + ldrb r3, [r0, #1] + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r4, r5, r6, pc} + ldr r4, _020737B0 ; =0x04000208 + ldr ip, _020737B4 ; =0x82061029 + mov lr, r2 +_02073734: + ldr r5, [r1, #0x2c] + ldrb r3, [r1, #0x50] + mov r5, r5, asr #0x10 + ldrsb r6, [r0, #8] + mul r3, r5, r3 + mul r5, r6, r3 + smull r3, r6, ip, r5 + add r6, r5, r6 + mov r3, r5, lsr #0x1f + add r6, r3, r6, asr #13 + strh r6, [r1, #0x18] + ldrh r6, [r4] + strh lr, [r4] + ldr r5, [r1, #0xb4] + cmp r5, #0 + beq _0207378C +_02073774: + ldrh r3, [r5, #6] + orr r3, r3, #0x20 + strh r3, [r5, #6] + ldr r5, [r5, #0x154] + cmp r5, #0 + bne _02073774 +_0207378C: + ldrh r3, [r4] + add r2, r2, #1 + add r1, r1, #0xc8 + strh r6, [r4] + ldrb r3, [r0, #1] + cmp r2, r3 + blt _02073734 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_020737AC: .word 0x81020409 +_020737B0: .word 0x04000208 +_020737B4: .word 0x82061029 + arm_func_end DseSynth_SetVolume + + arm_func_start DseSynth_SetPan +DseSynth_SetPan: ; 0x020737B8 + stmdb sp!, {r3, r4, r5, lr} + strb r1, [r0, #7] + ldrb r3, [r0, #1] + add r1, r0, #0x10 + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r3, r4, r5, pc} + ldr lr, _02073848 ; =0x04000208 + mov ip, r2 +_020737DC: + ldr r3, [r1, #0xc4] + ldr r4, [r1, #0x3c] + ldrsb r3, [r3, #7] + mov r4, r4, asr #0x10 + and r4, r4, #0xff + sub r3, r3, #0x40 + add r3, r4, r3 + strh r3, [r1, #0x1a] + ldrh r5, [lr] + strh ip, [lr] + ldr r4, [r1, #0xb4] + cmp r4, #0 + beq _02073828 +_02073810: + ldrh r3, [r4, #6] + orr r3, r3, #0x40 + strh r3, [r4, #6] + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _02073810 +_02073828: + ldrh r3, [lr] + add r2, r2, #1 + add r1, r1, #0xc8 + strh r5, [lr] + ldrb r3, [r0, #1] + cmp r2, r3 + blt _020737DC + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02073848: .word 0x04000208 + arm_func_end DseSynth_SetPan + + arm_func_start DseSynth_SetBankAndSequence +DseSynth_SetBankAndSequence: ; 0x0207384C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr r3, _020738D8 ; =DRIVER_WORK + mov sl, r0 + ldrsb r6, [r3, #0x3d] + mov r7, #0 + mov sb, r1 + strb r7, [r3, #0x3d] + ldrb r0, [sl, #1] + mov r8, r2 + add r5, sl, #0x10 + cmp r0, #0 + ble _020738CC + mov r0, sb, lsl #0x10 + mov r4, r0, lsr #0x10 +_02073884: + mov r0, r5 + bl DseChannel_DeallocateVoices + mov r0, r5 + mov r1, r8 + bl DseChannel_Init + cmp sb, #0 + blt _020738B8 + mov r0, r5 + mov r1, r4 + bl DseChannel_SetBank + mov r0, r5 + mov r1, r4 + bl DseChannel_SetInstrument +_020738B8: + ldrb r0, [sl, #1] + add r7, r7, #1 + add r5, r5, #0xc8 + cmp r7, r0 + blt _02073884 +_020738CC: + ldr r0, _020738D8 ; =DRIVER_WORK + strb r6, [r0, #0x3d] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_020738D8: .word DRIVER_WORK + arm_func_end DseSynth_SetBankAndSequence + + arm_func_start DseChannel_Init +DseChannel_Init: ; 0x020738DC + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + str r1, [r4] + mov r0, #0 + strb r0, [r4, #4] + strb r0, [r4, #6] + mov r1, #1 + strb r1, [r4, #7] + ldr r1, _02073A80 ; =_022B7A30 + strb r0, [r4, #8] + ldrh r3, [r1, #0x2e] + ldr r1, _02073A84 ; =DRIVER_WORK + mov r2, #0x7f + strb r3, [r4, #9] + strh r0, [r4, #0xa] + strb r0, [r4, #0xc] + strb r0, [r4, #0xd] + add r1, r1, #0x600 + ldrsb ip, [r1, #0x74] + ldrsb r3, [r1, #0x94] + add r3, r3, ip, lsl #8 + strh r3, [r4, #0xe] + strh r0, [r4, #0x10] + strh r0, [r4, #0x14] + str r0, [r4, #0x1c] + strh r0, [r4, #0x28] + ldrsb r3, [r1, #0x7b] + mov r3, r3, lsl #0x10 + str r3, [r4, #0x2c] + strh r0, [r4, #0x38] + ldrsb r3, [r1, #0x7e] + mov r3, r3, lsl #0x10 + str r3, [r4, #0x3c] + strh r0, [r4, #0x48] + strh r0, [r4, #0x54] + ldrsb r3, [r1, #0x7f] + strb r3, [r4, #0x50] + ldrsb r1, [r1, #0x75] + strb r1, [r4, #0x51] + strh r0, [r4, #0x52] + strh r0, [r4, #0x56] + strb r2, [r4, #0x58] + strb r0, [r4, #0x59] + strb r0, [r4, #0x5a] + strb r0, [r4, #0x5b] + strb r0, [r4, #0x5c] + strb r0, [r4, #0x5d] + strb r0, [r4, #0x5e] + strb r0, [r4, #0x5f] + strb r0, [r4, #0x60] + mov r2, r0 +_020739A8: + add r1, r4, r0, lsl #4 + strb r2, [r1, #0x75] + add r0, r0, #1 + strb r2, [r1, #0x76] + cmp r0, #4 + blt _020739A8 + add r0, r4, #0x64 + bl SoundEnvelopeParameters_Reset + mov r0, #0 + ldr r1, _02073A88 ; =0x04000208 + str r0, [r4, #0xb4] + ldrh r5, [r1] + strh r0, [r1] + ldr lr, [r4, #0xb8] + cmp lr, #0 + ldreqh r0, [r1] + streqh r5, [r1] + beq _02073A34 + mov ip, lr + mvn r1, #0 + mov r3, r0 +_020739FC: + str r1, [lr, #4] + strb r3, [ip, #1] + ldr r0, [ip, #8] + cmp r0, #0 + movne ip, r0 + bne _020739FC + ldr r0, _02073A84 ; =DRIVER_WORK + ldr r1, _02073A88 ; =0x04000208 + ldr r2, [r0, #0x650] + str r2, [ip, #8] + str lr, [r0, #0x650] + str r3, [r4, #0xb8] + ldrh r0, [r1] + strh r5, [r1] +_02073A34: + mov r1, #0 + str r1, [r4, #0xbc] + ldr r0, _02073A84 ; =DRIVER_WORK + str r1, [r4, #0xc0] + strh r1, [r4, #0x16] + add r0, r0, #0x600 + ldrsb r3, [r0, #0x7b] + ldrsb r0, [r0, #0x7f] + ldr r1, _02073A8C ; =0x82061029 + mov r2, #0x40 + smulbb r0, r3, r0 + rsb r3, r0, r0, lsl #7 + smull r0, ip, r1, r3 + add ip, r3, ip + mov r0, r3, lsr #0x1f + add ip, r0, ip, asr #13 + strh ip, [r4, #0x18] + strh r2, [r4, #0x1a] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02073A80: .word _022B7A30 +_02073A84: .word DRIVER_WORK +_02073A88: .word 0x04000208 +_02073A8C: .word 0x82061029 + arm_func_end DseChannel_Init + + arm_func_start DseChannel_DeallocateVoices +DseChannel_DeallocateVoices: ; 0x02073A90 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r6, [r0, #0xb4] + mov r1, #0 + str r1, [r0, #0xb4] + cmp r6, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r8, _02073B10 ; =_022B7A30 + mov r5, r1 + mov r4, r1 +_02073AB4: + ldr r7, [r6, #0x154] + add r0, r6, #0x3c + strh r5, [r6, #4] + str r5, [r6, #0x158] + str r5, [r6, #0x154] + bl SoundEnvelope_Stop + ldr r0, [r6, #0x14c] + cmp r7, #0 + and r0, r0, #0xff + str r0, [r6, #0x14c] + str r4, [r6] + strh r4, [r6, #0x18] + ldrh r2, [r6, #0xa] + ldrh r1, [r8, #0x32] + mov r6, r7 + mvn r0, r2 + and r0, r1, r0 + strh r0, [r8, #0x32] + ldrh r0, [r8, #0x36] + orr r0, r0, r2 + strh r0, [r8, #0x36] + bne _02073AB4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02073B10: .word _022B7A30 + arm_func_end DseChannel_DeallocateVoices + + arm_func_start DseChannel_ResetTimerAndVolumeForVoices +DseChannel_ResetTimerAndVolumeForVoices: ; 0x02073B14 + cmp r1, #1 + bne _02073B5C + ldrb r1, [r0, #4] + orr r1, r1, #0x40 + strb r1, [r0, #4] + ldr r2, [r0, #0xb4] + cmp r2, #0 + bxeq lr + mov r1, #0 +_02073B38: + str r1, [r2, #0x13c] + str r1, [r2, #0x140] + ldrh r0, [r2, #6] + orr r0, r0, #0x30 + strh r0, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02073B38 + bx lr +_02073B5C: + ldr r2, [r0, #0xb4] + cmp r2, #0 + beq _02073B80 +_02073B68: + ldrh r1, [r2, #6] + orr r1, r1, #0x30 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02073B68 +_02073B80: + ldrb r1, [r0, #4] + bic r1, r1, #0x40 + strb r1, [r0, #4] + bx lr + arm_func_end DseChannel_ResetTimerAndVolumeForVoices + + arm_func_start DseChannel_SetBank +DseChannel_SetBank: ; 0x02073B90 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, r1 + strh r1, [r4, #0xe] + bl DseSwd_GetBankById + str r0, [r4, #0xbc] + cmp r0, #0 + moveq r0, #0 + streq r0, [r4, #0xc0] + ldmeqia sp!, {r4, pc} + ldrh r1, [r4, #0x10] + mov r0, r4 + bl DseChannel_SetInstrument + ldmia sp!, {r4, pc} + arm_func_end DseChannel_SetBank + + arm_func_start DseChannel_SetInstrument +DseChannel_SetInstrument: ; 0x02073BC8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r5, r0 + ldr r0, [r5, #0xbc] + mov r4, r1 + cmp r0, #0 + bne _02073BF0 + mov r0, #0 + str r0, [r5, #0xc0] + strh r0, [r5, #0x10] + b _02073C4C +_02073BF0: + mov r0, r4, lsl #0x10 + mov r1, r0, asr #0x10 + strh r1, [r5, #0x10] + ldr r0, [r5, #0xbc] + bl DseSwd_GetInstrument + movs lr, r0 + beq _02073C48 + mov r6, #0 + strb r6, [r5, #0x59] + add r7, lr, #0x10 + add r8, r5, #0x74 + mov ip, r6 +_02073C20: + ldrb r0, [r7, #1] + add r6, r6, #1 + cmp r0, #0 + ldmneia r7, {r0, r1, r2, r3} + stmneia r8, {r0, r1, r2, r3} + streqb ip, [r8, #1] + cmp r6, #4 + add r7, r7, #0x10 + add r8, r8, #0x10 + blt _02073C20 +_02073C48: + str lr, [r5, #0xc0] +_02073C4C: + add r0, r5, #0x64 + bl SoundEnvelopeParameters_Reset + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + arm_func_end DseChannel_SetInstrument + + arm_func_start DseChannel_SetLfoConstEnvelopeLevel +DseChannel_SetLfoConstEnvelopeLevel: ; 0x02073C5C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + strb r5, [r0, #0x51] + ldr r4, [r0, #0xb4] + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} +_02073C74: + mov r1, r5 + add r0, r4, #0x5c + bl SoundLfoBank_SetConstEnvelopes + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _02073C74 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseChannel_SetLfoConstEnvelopeLevel + + arm_func_start DseChannel_SetKeyBend +DseChannel_SetKeyBend: ; 0x02073C90 + strh r1, [r0, #0x52] + ldr r2, [r0, #0xb4] + cmp r2, #0 + bxeq lr + mov r3, r1, lsl #8 +_02073CA4: + ldrb r0, [r2, #0xf] + mul r1, r0, r3 + mov r0, r1, asr #0xc + add r0, r1, r0, lsr #19 + mov r0, r0, asr #0xd + strh r0, [r2, #0x10] + ldrh r0, [r2, #6] + orr r0, r0, #0x10 + strh r0, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02073CA4 + bx lr + arm_func_end DseChannel_SetKeyBend + + arm_func_start DseChannel_AllocateNote +DseChannel_AllocateNote: ; 0x02073CD8 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + ldrb r2, [r5, #0xd] + mov r4, r1 + cmp r2, #0 + beq _02073D18 + ldrb r0, [r5, #0xc] + sub r0, r2, r0 + add r6, r0, #1 + bl DseUtil_GetRandomNumber + mul r1, r6, r0 + mov r0, r1, asr #0xe + ldrb r2, [r5, #0xc] + add r0, r1, r0, lsr #17 + add r0, r2, r0, asr #15 + strb r0, [r4, #2] +_02073D18: + ldr r1, _02073D64 ; =DRIVER_WORK + ldr r0, [r1, #0x650] + cmp r0, #0 + moveq r0, #0 + ldrne r2, [r0, #8] + strne r2, [r1, #0x650] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r3, [r4] + ldr r2, [r4, #4] + mov r1, #1 + str r3, [r0] + str r2, [r0, #4] + strb r1, [r0, #1] + ldr r1, [r5, #0xb8] + str r1, [r0, #8] + str r0, [r5, #0xb8] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02073D64: .word DRIVER_WORK + arm_func_end DseChannel_AllocateNote + + arm_func_start DseChannel_ReleaseNoteInternal +DseChannel_ReleaseNoteInternal: ; 0x02073D68 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r0 + ldr r4, [r7, #0xb8] + mov r6, r1 + cmp r4, #0 + add r5, r7, #0xb8 + beq _02073DE4 + ldrb r1, [r6, #2] +_02073D88: + ldrb r0, [r4, #2] + cmp r0, r1 + bne _02073DD4 + ldr r8, [r7, #0xb4] + cmp r8, #0 + beq _02073DC8 +_02073DA0: + ldrb r1, [r8, #0xd] + ldrb r0, [r6, #2] + cmp r1, r0 + bne _02073DBC + mov r0, r7 + mov r1, r8 + bl DseVoice_Release +_02073DBC: + ldr r8, [r8, #0x154] + cmp r8, #0 + bne _02073DA0 +_02073DC8: + ldr r0, [r4, #8] + str r0, [r5] + b _02073DE4 +_02073DD4: + add r5, r4, #8 + ldr r4, [r4, #8] + cmp r4, #0 + bne _02073D88 +_02073DE4: + ldr r0, _02073E0C ; =DRIVER_WORK + mvn r2, #0 + ldr r3, [r0, #0x650] + mov r1, #0 + str r3, [r4, #8] + str r4, [r0, #0x650] + str r2, [r4, #4] + mov r0, r4 + strb r1, [r4, #1] + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02073E0C: .word DRIVER_WORK + arm_func_end DseChannel_ReleaseNoteInternal + + arm_func_start DseChannel_ChangeNote +DseChannel_ChangeNote: ; 0x02073E10 + stmdb sp!, {r4, lr} + ldr r4, [r0, #0xb8] + cmp r4, #0 + beq _02073E54 +_02073E20: + ldrb r3, [r4, #2] + cmp r3, r2 + bne _02073E48 + ldr lr, [r1] + ldr ip, [r1, #4] + mov r3, #1 + str lr, [r4] + str ip, [r4, #4] + strb r3, [r4, #1] + b _02073E54 +_02073E48: + ldr r4, [r4, #8] + cmp r4, #0 + bne _02073E20 +_02073E54: + ldr ip, [r0, #0xb4] + cmp ip, #0 + ldmeqia sp!, {r4, pc} +_02073E60: + ldrb r0, [ip, #0xd] + cmp r0, r2 + bne _02073E90 + ldrb r0, [r1, #2] + strb r0, [ip, #0xd] + ldrb r3, [r1, #2] + ldrsh r0, [ip, #0x14] + add r0, r0, r3, lsl #8 + strh r0, [ip, #0x12] + ldrh r0, [ip, #6] + orr r0, r0, #0x10 + strh r0, [ip, #6] +_02073E90: + ldr ip, [ip, #0x154] + cmp ip, #0 + bne _02073E60 + ldmia sp!, {r4, pc} + arm_func_end DseChannel_ChangeNote + + arm_func_start DseChannel_ReleaseNote +DseChannel_ReleaseNote: ; 0x02073EA0 + stmdb sp!, {r3, lr} + ldr r2, [r0, #0xb8] + cmp r2, #0 + ldmeqia sp!, {r3, pc} + ldrb r3, [r1, #2] +_02073EB4: + ldrb r1, [r2, #2] + cmp r1, r3 + bne _02073ECC + mov r1, r2 + bl DseChannel_ReleaseNoteInternal + ldmia sp!, {r3, pc} +_02073ECC: + ldr r2, [r2, #8] + cmp r2, #0 + bne _02073EB4 + ldmia sp!, {r3, pc} + arm_func_end DseChannel_ReleaseNote + + arm_func_start DseVoice_PlayNote +DseVoice_PlayNote: ; 0x02073EDC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov sl, r0 + ldrsh r4, [sl, #0xa] + mov sb, r1 + cmp r4, #0 + moveq r0, #0 + streq r0, [sp] + beq _02073F28 + bl DseUtil_GetRandomNumber + mov r1, r4, lsl #1 + mul r2, r1, r0 + mov r0, r2, asr #0xe + ldrsh r1, [sl, #0xa] + add r0, r2, r0, lsr #17 + rsb r0, r1, r0, asr #15 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + str r0, [sp] +_02073F28: + ldr r6, [sl, #0xc0] + cmp r6, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r7, [sl, #0xbc] + mov r5, #0 +_02073F40: + ldrb r2, [sb, #2] + ldrsb r3, [sb, #3] + mov r0, r6 + mov r1, r5 + bl DseSwd_GetNextSplitInRange + movs r5, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r3, [r5, #0x1a] + ldrb r0, [r7, #0xc] + ldr r2, [r7, #0x18] + cmp r3, r0 + movge r3, #0 + add r1, r2, r3, lsl #3 + ldr r2, [r2, r3, lsl #3] + ldr r1, [r1, #4] + mov r0, r7 + str r2, [sp, #4] + str r1, [sp, #8] + ldrsh r1, [r5, #0x12] + bl ReadWaviEntry + movs fp, r0 + beq _02073F40 + ldrb r3, [sl, #5] + ldrb r2, [r5, #0x1a] + mov r0, sl + add r1, sp, #4 + add r8, r2, r3, lsl #8 + ldrb r3, [sp, #7] + mov r2, r8 + bl DseVoice_Allocate + movs r4, r0 + beq _02073F40 + mov r0, #0 + strh r0, [r4, #4] + ldr r0, [sl] + add fp, fp, #0x10 + str r0, [r4] + strh r8, [r4, #0x18] + ldrsh r0, [r5, #0x12] + add ip, r4, #0x1c + strb r0, [r4, #0xe] + ldmia fp!, {r0, r1, r2, r3} + stmia ip!, {r0, r1, r2, r3} + ldmia fp, {r0, r1, r2, r3} + stmia ip, {r0, r1, r2, r3} + ldr r1, [r4, #0x30] + ldr r0, [r7, #0x1c] + add r0, r1, r0 + str r0, [r4, #0x30] + ldrb r0, [sb, #2] + strb r0, [r4, #0xd] + ldrsb r1, [r5, #0x17] + ldrsh r0, [r5, #0x14] + add r1, r0, r1, lsl #8 + ldr r0, [sp] + add r0, r0, r1 + strh r0, [r4, #0x14] + ldrb r1, [sb, #2] + ldrsh r0, [r4, #0x14] + add r0, r0, r1, lsl #8 + strh r0, [r4, #0x12] + ldrb r0, [r5, #0x19] + strb r0, [r4, #0x17] + ldr r0, _02074144 ; =DRIVER_WORK + ldrb r0, [r0, #0x39] + cmp r0, #7 + bne _02074084 + ldrb r1, [sl, #0x58] + ldrb r0, [sb, #3] + ldrb r2, [r6, #4] + ldrb r3, [r5, #0x18] + smulbb r0, r1, r0 + mul r0, r2, r0 + mul r2, r3, r0 + ldr r0, _02074148 ; =0x4186143D + smull r1, r3, r0, r2 + mov r0, r2, lsr #0x1f + add r3, r0, r3, asr #19 + strb r3, [r4, #0x16] + b _020740B0 +_02074084: + ldrb r1, [sb, #3] + ldrb r0, [r6, #4] + ldrb r2, [r5, #0x18] + smulbb r0, r1, r0 + mul r3, r2, r0 + ldr r0, _0207414C ; =0x82061029 + smull r1, r2, r0, r3 + add r2, r3, r2 + mov r0, r3, lsr #0x1f + add r2, r0, r2, asr #13 + strb r2, [r4, #0x16] +_020740B0: + ldrb r2, [sl, #0x59] + ldrsh r3, [sl, #0x52] + add r0, r4, #0x5c + cmp r2, #0 + ldreqb r2, [r5, #2] + mov r3, r3, lsl #8 + add r1, sl, #0x74 + mul r8, r2, r3 + mov r3, r8, asr #0xc + add r3, r8, r3, lsr #19 + mov r3, r3, asr #0xd + strh r3, [r4, #0x10] + strb r2, [r4, #0xf] + ldrh r2, [r4, #6] + orr r2, r2, #0xff0 + strh r2, [r4, #6] + ldrsb r2, [sl, #0x51] + bl SoundLfoBank_Set + add r0, r5, #0x20 + add r8, r4, #0x3c + ldmia r0, {r0, r1, r2, r3} + stmia r8, {r0, r1, r2, r3} + mov r0, #1 + strb r0, [r4, #0x3c] + ldrb r0, [sl, #0x64] + cmp r0, #0 + beq _02074128 + mov r0, r8 + add r1, sl, #0x64 + bl SoundEnvelope_SetParameters +_02074128: + mov r1, r4 + mov r0, sl + ldrb r2, [sp, #7] + bl DseVoice_Start + b _02073F40 +_0207413C: + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02074144: .word DRIVER_WORK +_02074148: .word 0x4186143D +_0207414C: .word 0x82061029 + arm_func_end DseVoice_PlayNote + + arm_func_start DseVoice_ReleaseNote +DseVoice_ReleaseNote: ; 0x02074150 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r4, [r6, #0xb4] + mov r5, r1 + cmp r4, #0 + ldmeqia sp!, {r4, r5, r6, pc} +_02074168: + ldrb r1, [r4, #0xd] + ldrb r0, [r5, #2] + cmp r1, r0 + bne _02074184 + mov r0, r6 + mov r1, r4 + bl DseVoice_Release +_02074184: + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _02074168 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseVoice_ReleaseNote + + arm_func_start DseVoice_UpdateParameters +DseVoice_UpdateParameters: ; 0x02074194 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr fp, _0207431C ; =_022B7A30 + ldr r7, _02074320 ; =_022B7A6C + ldrh r0, [fp, #0x2e] + mov sb, #0 + cmp r0, #0 + ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r6, _02074324 ; =_020B1310 + ldr r5, _02074328 ; =_020B1394 + ldr r4, _0207432C ; =0x00FFB0FF +_020741BC: + ldr r8, [r7, #0x158] + cmp r8, #0 + beq _02074304 + ldrh sl, [r7, #6] + cmp sl, #0 + beq _02074300 + tst sl, #0x10 + beq _02074264 + ldrh r2, [r8, #0x16] + ldrsh r1, [r7, #0x12] + ldrsh r3, [r7, #0x10] + ldrsh r0, [r7, #0x5e] + add r1, r2, r1 + add r1, r3, r1 + add r0, r0, r1 + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, r1, asr #8 + and r0, r0, #0x7f + ldrb r0, [r6, r0] + and r2, r1, #0xff + mov r1, r0, lsl #0x1c + add r1, r2, r1, lsr #20 + mov r1, r1, lsl #1 + mov r0, r0, asr #4 + ldrh r1, [r5, r1] + rsbs r0, r0, #4 + movpl r1, r1, lsr r0 + rsbmi r0, r0, #0 + movmi r1, r1, lsl r0 + ldrb r0, [r7, #0x1f] + cmp r0, #3 + mov r0, r4 + blo _0207425C + mov r2, r1, asr #3 + add r1, r1, r2, lsr #28 + mov r1, r1, asr #4 + bl _s32_div_f + str r0, [r7, #0x13c] + b _02074264 +_0207425C: + bl _s32_div_f + str r0, [r7, #0x13c] +_02074264: + tst sl, #0x20 + beq _020742C4 + ldrb r1, [r7, #0x16] + ldrsh r0, [r7, #0x60] + add r1, r1, r0, asr #6 + cmp r1, #0x7f + movgt r1, #0x7f + bgt _0207428C + cmp r1, #0 + movlt r1, #0 +_0207428C: + ldrh r0, [r8, #0x18] + ldrb r2, [r7, #0x14c] + mul r1, r0, r1 + mul r3, r2, r1 + ldr r0, _02074330 ; =0x828CBFBF + smull r1, r2, r0, r3 + add r2, r3, r2 + mov r0, r3, lsr #0x1f + add r2, r0, r2, asr #12 + mul r1, r2, r2 + mov r0, r1, asr #8 + add r0, r1, r0, lsr #23 + mov r0, r0, asr #9 + str r0, [r7, #0x140] +_020742C4: + tst sl, #0x40 + beq _02074300 + ldrsb r1, [r7, #0x17] + ldrsh r2, [r8, #0x1a] + ldrsh r0, [r7, #0x62] + sub r1, r1, #0x40 + add r1, r2, r1 + adds r1, r1, r0, asr #6 + ldr r0, _02074334 ; =_022B8330 + movmi r1, #0 + cmp r1, #0x7f + ldr r0, [r0, #0xed4] + movgt r1, #0x7f + ldrb r0, [r0, r1] + str r0, [r7, #0x144] +_02074300: + strh sl, [r7, #6] +_02074304: + ldrh r0, [fp, #0x2e] + add sb, sb, #1 + add r7, r7, #0x15c + cmp sb, r0 + blt _020741BC + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0207431C: .word _022B7A30 +_02074320: .word _022B7A6C +_02074324: .word _020B1310 +_02074328: .word _020B1394 +_0207432C: .word 0x00FFB0FF +_02074330: .word 0x828CBFBF +_02074334: .word _022B8330 + arm_func_end DseVoice_UpdateParameters + + arm_func_start DseVoice_ResetAll +DseVoice_ResetAll: ; 0x02074338 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr sl, _020743D0 ; =_022B7A30 + mov r8, #0 + ldrh r0, [sl, #0x2e] + cmp r0, #0 + ble _020743C0 + ldr sb, _020743D4 ; =_022B7A6C + mov r7, r8 + mov r6, #1 + mov r5, #0x40 + mov r4, r8 +_02074364: + strh r7, [sb, #4] + strh r7, [sb, #6] + mov r0, r6, lsl r8 + strh r8, [sb, #8] + strh r0, [sb, #0xa] + str r7, [sb] + str r7, [sb, #0x14c] + strb r7, [sb, #0xd] + strb r7, [sb, #0xe] + strh r7, [sb, #0x12] + strb r7, [sb, #0x16] + add r0, sb, #0x3c + strb r5, [sb, #0x17] + bl SoundEnvelope_Reset + add r0, sb, #0x5c + bl SoundLfoBank_Reset + str r4, [sb, #0x154] + str r4, [sb, #0x158] + ldrh r0, [sl, #0x2e] + add r8, r8, #1 + add sb, sb, #0x15c + cmp r8, r0 + blt _02074364 +_020743C0: + ldr r0, _020743D8 ; =DRIVER_WORK + mov r1, #0 + str r1, [r0, #0x654] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_020743D0: .word _022B7A30 +_020743D4: .word _022B7A6C +_020743D8: .word DRIVER_WORK + arm_func_end DseVoice_ResetAll + + arm_func_start DseVoice_ResetHW +DseVoice_ResetHW: ; 0x020743DC + stmdb sp!, {r3, lr} + cmp r0, #0 + ble _02074414 + ldr r1, _0207447C ; =_022B7A30 + mov r2, #0x10 + strh r2, [r1, #0x2c] + cmp r0, #0x10 + movgt r0, r2, lsl #0x10 + ldr r2, _0207447C ; =_022B7A30 + movgt r0, r0, asr #0x10 + strh r0, [r2, #0x2e] + ldr r1, _02074480 ; =_022B8330 + mov r0, #0 + strb r0, [r1, #0xd0c] +_02074414: + ldr r2, _0207447C ; =_022B7A30 + mov r0, #0 + strh r0, [r2, #0x32] + strh r0, [r2, #0x34] + ldr r1, _02074484 ; =DRIVER_WORK + strh r0, [r2, #0x36] + strb r0, [r1, #0x738] + strb r0, [r1, #0x739] + ldr ip, _02074480 ; =_022B8330 + strh r0, [r2, #0x30] + str r0, [ip, #0xcfc] + str r0, [ip, #0xd00] + sub r2, r0, #1 + str r2, [ip, #0xd04] + ldrsh lr, [r1, #0x28] + mov r1, r0 + mov r2, r0 + mov r3, r0 + str lr, [ip, #0xd08] + bl sub_0207C8B8 + ldr r0, _02074488 ; =0x0000FFFF + mov r3, #0 + mov r1, r0 + mov r2, r0 + bl sub_0207C8E0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0207447C: .word _022B7A30 +_02074480: .word _022B8330 +_02074484: .word DRIVER_WORK +_02074488: .word 0x0000FFFF + arm_func_end DseVoice_ResetHW + + arm_func_start UpdateChannels +UpdateChannels: ; 0x0207448C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr sb, _02074570 ; =_022B7A30 + mov r7, #0 + ldrh r0, [sb, #0x2e] + mov r6, r7 + ldr r5, _02074574 ; =_022B7A6C + cmp r0, #0 + ble _0207452C + mov r4, #2 +_020744B0: + add r0, r5, #0x3c + bl SoundEnvelope_Tick + ldrsb r1, [r5, #0x5a] + mov r8, r0 + cmp r1, #1 + bne _02074514 + add r0, r5, #0x5c + bl SoundLfoBank_Tick + ldrh r1, [r5, #6] + orr r0, r1, r0 + strh r0, [r5, #6] + ldrb r0, [r5, #0x58] + cmp r0, #8 + bne _020744F8 + strb r4, [r5, #0x58] + ldrh r0, [r5, #6] + orr r0, r0, #2 + strh r0, [r5, #6] +_020744F8: + ldrb r0, [r5, #0x14c] + cmp r0, r8 + ldrneh r0, [r5, #6] + orrne r0, r0, #0x20 + strneh r0, [r5, #6] + cmp r8, #0 + addgt r7, r7, #1 +_02074514: + strb r8, [r5, #0x14c] + ldrh r0, [sb, #0x2e] + add r6, r6, #1 + add r5, r5, #0x15c + cmp r6, r0 + blt _020744B0 +_0207452C: + ldr r0, _02074578 ; =_022B8330 + ldr r1, [r0, #0xd04] + cmp r1, #0 + movlt r1, #0 + strlt r1, [r0, #0xd00] + ldr r0, _02074578 ; =_022B8330 + str r7, [r0, #0xcfc] + ldr r1, [r0, #0xd00] + cmp r1, r7 + strlt r7, [r0, #0xd00] + movlt r1, #0x64 + strlt r1, [r0, #0xd04] + ldr r0, _02074578 ; =_022B8330 + ldr r1, [r0, #0xd04] + sub r1, r1, #1 + str r1, [r0, #0xd04] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02074570: .word _022B7A30 +_02074574: .word _022B7A6C +_02074578: .word _022B8330 + arm_func_end UpdateChannels + + arm_func_start DseVoice_Cleanup +DseVoice_Cleanup: ; 0x0207457C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r6, _02074610 ; =_022B7A6C + bl sub_0207D470 + ldr r4, _02074614 ; =_022B7A30 + mov r0, r0, lsl #0x10 + ldrh r2, [r4, #0x30] + ldrh r1, [r4, #0x2e] + mov r7, #0 + orr r0, r2, r0, lsr #16 + mov r0, r0, lsl #0x10 + mov r8, r0, lsr #0x10 + cmp r1, #0 + ldmleia sp!, {r4, r5, r6, r7, r8, pc} + mov r5, r7 +_020745B4: + ldrsb r0, [r6, #0x5a] + cmp r0, #1 + bne _020745DC + tst r8, #1 + bne _020745F0 + add r0, r6, #0x3c + bl SoundEnvelope_Stop2 + add r0, r6, #0x100 + strh r5, [r0, #0x4c] + b _020745F0 +_020745DC: + and r0, r8, #1 + cmp r0, #1 + bne _020745F0 + mov r0, r6 + bl DseVoice_FlagForDeactivation +_020745F0: + ldrh r1, [r4, #0x2e] + mov r0, r8, lsl #0xf + add r7, r7, #1 + cmp r7, r1 + mov r8, r0, lsr #0x10 + add r6, r6, #0x15c + blt _020745B4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02074610: .word _022B7A6C +_02074614: .word _022B7A30 + arm_func_end DseVoice_Cleanup + + arm_func_start DseVoice_Allocate +DseVoice_Allocate: ; 0x02074618 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r4, _02074774 ; =_022B7A30 + mov r3, r3, lsl #0x10 + ldrh r5, [r4, #0x2e] + add r3, r3, #0xff + add r8, r3, #0x100 + ldrb r4, [r1, #5] + sub r5, r5, #1 + ldrb r3, [r0, #7] + cmp r4, r5 + movgt r4, r5 + ldrb r7, [r1, #4] + mov r6, #0 + cmp r3, #0 + beq _02074660 + cmp r3, #1 + beq _0207466C + b _0207476C +_02074660: + ldr r6, [r0, #0xb4] + cmp r6, #0 + bne _0207476C +_0207466C: + ldrb r3, [r1] + cmp r3, #0 + beq _02074708 + ldr r5, _02074778 ; =_022B7A6C + mov r3, #0x15c + mla r3, r7, r3, r5 + mov ip, r7 + mov lr, r4 + mov r5, r8 + cmp r7, r4 + mov r6, #0 + bgt _020746E4 + ldr r0, [r0] +_020746A0: + ldr sb, [r3] + cmp sb, r0 + ldreqh sb, [r3, #0x18] + cmpeq sb, r2 + bne _020746D4 + ldr sb, [r3, #0x14c] + add r6, r6, #1 + cmp r5, sb + movhi r5, sb + ldrb sb, [r1, #2] + movhi lr, ip + cmp r6, sb + bge _020746E4 +_020746D4: + add ip, ip, #1 + cmp ip, r4 + add r3, r3, #0x15c + ble _020746A0 +_020746E4: + ldrb r0, [r1, #2] + cmp r6, r0 + blt _02074708 + ldr r1, _02074778 ; =_022B7A6C + mov r0, #0x15c + mla r6, lr, r0, r1 + mov r0, r6 + bl DseVoice_Deallocate + b _0207476C +_02074708: + cmp r7, r4 + add r2, r4, #1 + bgt _0207474C + ldr r1, _0207477C ; =DRIVER_WORK + mov r0, #0x15c + mla r1, r7, r0, r1 +_02074720: + ldr r0, [r1, #0x888] + cmp r8, r0 + bls _0207473C + mov r2, r7 + cmp r0, #0 + beq _0207474C + mov r8, r0 +_0207473C: + add r7, r7, #1 + cmp r7, r4 + add r1, r1, #0x15c + ble _02074720 +_0207474C: + cmp r2, r4 + movgt r6, #0 + bgt _0207476C + ldr r1, _02074778 ; =_022B7A6C + mov r0, #0x15c + mla r6, r2, r0, r1 + mov r0, r6 + bl DseVoice_Deallocate +_0207476C: + mov r0, r6 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02074774: .word _022B7A30 +_02074778: .word _022B7A6C +_0207477C: .word DRIVER_WORK + arm_func_end DseVoice_Allocate + + arm_func_start DseVoice_Start +DseVoice_Start: ; 0x02074780 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + ldrh r3, [r4, #6] + mov r1, r2, lsl #0x10 + add r1, r1, #0xff + orr r2, r3, #1 + bic r2, r2, #2 + strh r2, [r4, #6] + ldr r2, [r4, #0x14c] + add r1, r1, #0x100 + orr r1, r2, r1 + mov r5, r0 + str r1, [r4, #0x14c] + add r0, r4, #0x3c + bl UpdateTrackVolumeEnvelopes + ldr r0, [r4, #0x158] + cmp r0, r5 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r0, [r5, #0xb4] + str r0, [r4, #0x154] + str r4, [r5, #0xb4] + str r5, [r4, #0x158] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseVoice_Start + + arm_func_start DseVoice_ReleaseHeld +DseVoice_ReleaseHeld: ; 0x020747DC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r7, r0 + ldrb r0, [r7, #4] + tst r0, #3 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r4, [r7, #0xb8] + add r6, r7, #0xb8 + cmp r4, #0 + beq _0207484C + ldr r8, _02074858 ; =DRIVER_WORK + mvn sl, #0 + mov sb, #0 +_0207480C: + ldmib r4, {r0, r5} + cmp r0, #0 + strgt r4, [r6] + addgt r6, r4, #8 + bgt _02074840 + mov r0, r7 + mov r1, r4 + bl DseChannel_ReleaseNoteInternal + ldr r0, [r8, #0x650] + str r0, [r4, #8] + str r4, [r8, #0x650] + str sl, [r4, #4] + strb sb, [r4, #1] +_02074840: + mov r4, r5 + cmp r5, #0 + bne _0207480C +_0207484C: + mov r0, #0 + str r0, [r6] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02074858: .word DRIVER_WORK + arm_func_end DseVoice_ReleaseHeld + + arm_func_start DseVoice_Release +DseVoice_Release: ; 0x0207485C + stmdb sp!, {r4, lr} + mov r4, r1 + ldrh r1, [r4, #4] + orr r1, r1, #2 + strh r1, [r4, #4] + ldrb r0, [r0, #4] + tst r0, #1 + ldmneia sp!, {r4, pc} + ldr r1, [r4, #0x14c] + add r0, r4, #0x3c + and r1, r1, #0xff + str r1, [r4, #0x14c] + bl SoundEnvelope_Release + ldrh r0, [r4, #6] + bic r0, r0, #1 + strh r0, [r4, #6] + ldmia sp!, {r4, pc} + arm_func_end DseVoice_Release + + arm_func_start DseVoice_Deallocate +DseVoice_Deallocate: ; 0x020748A0 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r1, [r4, #0x158] + cmp r1, #0 + beq _02074948 + ldr r2, [r1, #0xb4] + cmp r2, r4 + ldreq r0, [r4, #0x154] + streq r0, [r1, #0xb4] + beq _020748F0 + cmp r2, #0 + beq _020748F0 +_020748D0: + ldr r0, [r2, #0x154] + cmp r0, r4 + ldreq r0, [r4, #0x154] + streq r0, [r2, #0x154] + beq _020748F0 + mov r2, r0 + cmp r0, #0 + bne _020748D0 +_020748F0: + mov r0, #0 + strh r0, [r4, #4] + str r0, [r4, #0x158] + str r0, [r4, #0x154] + add r0, r4, #0x3c + bl SoundEnvelope_Stop + ldr r1, [r4, #0x14c] + mov r0, #0 + and r1, r1, #0xff + str r1, [r4, #0x14c] + str r0, [r4] + strh r0, [r4, #0x18] + ldr r1, _020749A0 ; =_022B7A30 + ldrh r0, [r4, #0xa] + ldrh r3, [r1, #0x32] + mvn r2, r0 + and r2, r3, r2 + strh r2, [r1, #0x32] + ldrh r2, [r1, #0x36] + orr r2, r2, r0 + strh r2, [r1, #0x36] + ldmia sp!, {r4, pc} +_02074948: + mov r0, #0 + strh r0, [r4, #4] + str r0, [r4, #0x158] + str r0, [r4, #0x154] + add r0, r4, #0x3c + bl SoundEnvelope_Stop + ldr r1, [r4, #0x14c] + mov r0, #0 + and r1, r1, #0xff + str r1, [r4, #0x14c] + str r0, [r4] + strh r0, [r4, #0x18] + ldr r1, _020749A0 ; =_022B7A30 + ldrh r0, [r4, #0xa] + ldrh r3, [r1, #0x32] + mvn r2, r0 + and r2, r3, r2 + strh r2, [r1, #0x32] + ldrh r2, [r1, #0x36] + orr r2, r2, r0 + strh r2, [r1, #0x36] + ldmia sp!, {r4, pc} + .align 2, 0 +_020749A0: .word _022B7A30 + arm_func_end DseVoice_Deallocate + + arm_func_start DseVoice_FlagForActivation +DseVoice_FlagForActivation: ; 0x020749A4 + mov r1, #0xff0 + strh r1, [r0, #6] + ldr r2, [r0, #0x14c] + ldr r1, _020749F0 ; =_022B7A30 + orr r2, r2, #0xff + orr r2, r2, #0x100 + str r2, [r0, #0x14c] + ldrh r3, [r0, #0xa] + ldrh r0, [r1, #0x34] + mvn r2, r3 + and r0, r0, r2 + strh r0, [r1, #0x34] + ldrh r0, [r1, #0x36] + and r0, r0, r2 + strh r0, [r1, #0x36] + ldrh r0, [r1, #0x32] + orr r0, r0, r3 + strh r0, [r1, #0x32] + bx lr + .align 2, 0 +_020749F0: .word _022B7A30 + arm_func_end DseVoice_FlagForActivation + + arm_func_start DseVoice_FlagForDeactivation +DseVoice_FlagForDeactivation: ; 0x020749F4 + ldr r2, [r0, #0x14c] + ldr r1, _02074A28 ; =_022B7A30 + bic r2, r2, #0xff00 + str r2, [r0, #0x14c] + ldrh r3, [r0, #0xa] + ldrh r2, [r1, #0x32] + mvn r0, r3 + and r0, r2, r0 + strh r0, [r1, #0x32] + ldrh r0, [r1, #0x34] + orr r0, r0, r3 + strh r0, [r1, #0x34] + bx lr + .align 2, 0 +_02074A28: .word _022B7A30 + arm_func_end DseVoice_FlagForDeactivation + + arm_func_start DseVoice_CountNumActiveInChannel +DseVoice_CountNumActiveInChannel: ; 0x02074A2C + ldr r2, [r0, #0xb4] + mov r0, #0 + cmp r2, #0 + bxeq lr +_02074A3C: + ldrb r1, [r2, #0x14c] + ldr r2, [r2, #0x154] + cmp r1, #0 + addne r0, r0, #1 + cmp r2, #0 + bne _02074A3C + bx lr + arm_func_end DseVoice_CountNumActiveInChannel + + arm_func_start DseVoice_UpdateHardware +DseVoice_UpdateHardware: ; 0x02074A58 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x18 + ldr r4, _02074C64 ; =_022B7A30 + ldr r7, _02074C68 ; =_022B7A6C + ldrh r0, [r4, #0x2e] + mov r8, #0 + cmp r0, #0 + ble _02074BC8 + mov fp, #2 + mov sl, #1 + mov r6, r8 + mov r5, r8 +_02074A88: + ldrh sb, [r7, #6] + cmp sb, #0 + beq _02074BB4 + tst sb, #1 + beq _02074B5C + ldrsb r0, [r7, #0x21] + ldrb r1, [r7, #0x1f] + cmp r0, #0 + movne r3, sl + moveq r3, fp + cmp r1, #4 + addls pc, pc, r1, lsl #2 + b _02074B50 +_02074ABC: ; jump table + b _02074AD0 ; case 0 + b _02074AD0 ; case 1 + b _02074AD0 ; case 2 + b _02074B0C ; case 3 + b _02074B34 ; case 4 +_02074AD0: + ldr r0, [r7, #0x34] + str r0, [sp] + ldr r0, [r7, #0x38] + str r0, [sp, #4] + ldr r0, [r7, #0x140] + str r0, [sp, #8] + str r6, [sp, #0xc] + ldr r0, [r7, #0x13c] + str r0, [sp, #0x10] + ldr r0, [r7, #0x144] + str r0, [sp, #0x14] + ldrh r0, [r7, #8] + ldr r2, [r7, #0x30] + bl sub_0207CA6C + b _02074B50 +_02074B0C: + ldr r0, [r7, #0x13c] + mov r3, #0 + str r0, [sp] + ldr r0, [r7, #0x144] + str r0, [sp, #4] + ldrh r0, [r7, #8] + ldrb r1, [r7, #0x25] + ldr r2, [r7, #0x140] + bl sub_0207CAB8 + b _02074B50 +_02074B34: + ldr r0, [r7, #0x144] + mov r2, #0 + str r0, [sp] + ldrh r0, [r7, #8] + ldr r1, [r7, #0x140] + ldr r3, [r7, #0x13c] + bl sub_0207CAE0 +_02074B50: + mov r0, r7 + bl DseVoice_FlagForActivation + b _02074BB0 +_02074B5C: + tst sb, #2 + beq _02074B70 + mov r0, r7 + bl DseVoice_FlagForDeactivation + mov sb, #0 +_02074B70: + tst sb, #0x10 + beq _02074B84 + ldrh r0, [r7, #0xa] + ldr r1, [r7, #0x13c] + bl sub_0207CA04 +_02074B84: + tst sb, #0x20 + beq _02074B9C + ldrh r0, [r7, #0xa] + ldr r1, [r7, #0x140] + mov r2, #0 + bl sub_0207CA24 +_02074B9C: + tst sb, #0x40 + beq _02074BB0 + ldrh r0, [r7, #0xa] + ldr r1, [r7, #0x144] + bl sub_0207CA4C +_02074BB0: + strh r5, [r7, #6] +_02074BB4: + ldrh r0, [r4, #0x2e] + add r8, r8, #1 + add r7, r7, #0x15c + cmp r8, r0 + blt _02074A88 +_02074BC8: + ldr r1, _02074C64 ; =_022B7A30 + ldr r2, _02074C6C ; =DRIVER_WORK + ldrh r0, [r1, #0x32] + strh r0, [r1, #0x30] + ldrb r1, [r2, #0x73a] + ldrb r2, [r2, #0x738] + orr r3, r0, r1 + orrs r3, r2, r3 + beq _02074C0C + mov r3, #0 + bl sub_0207C8B8 + ldr r1, _02074C6C ; =DRIVER_WORK + mov r2, #0 + strb r2, [r1, #0x738] + ldr r0, _02074C64 ; =_022B7A30 + strb r2, [r1, #0x73a] + strh r2, [r0, #0x32] +_02074C0C: + ldr r1, _02074C64 ; =_022B7A30 + ldr r0, _02074C6C ; =DRIVER_WORK + ldrh r4, [r1, #0x34] + ldrh r3, [r1, #0x36] + ldrb r1, [r0, #0x73b] + ldrb r2, [r0, #0x739] + orr r0, r4, r3 + orr r3, r1, r0 + orrs r3, r2, r3 + addeq sp, sp, #0x18 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r3, #0 + bl sub_0207C8E0 + ldr r1, _02074C6C ; =DRIVER_WORK + mov r2, #0 + strb r2, [r1, #0x739] + ldr r0, _02074C64 ; =_022B7A30 + strb r2, [r1, #0x73b] + strh r2, [r0, #0x36] + strh r2, [r0, #0x34] + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02074C64: .word _022B7A30 +_02074C68: .word _022B7A6C +_02074C6C: .word DRIVER_WORK + arm_func_end DseVoice_UpdateHardware diff --git a/include/dse.h b/include/dse.h index 060ece1c..ad45ee22 100644 --- a/include/dse.h +++ b/include/dse.h @@ -74,27 +74,27 @@ struct dse_sound_envelope { struct dse_track { u16 field0_0x0; - u8 active; - u8 field2_0x3; - u8 octave; - u8 duration_multiplier; - u8 n_sub_loops; - u8 field6_0x7; - u8 field7_0x8; - u8 field8_0x9; - u16 maybe_n_reps; - u32 current_wait; - u32 last_wait; - u32 last_duration; - u8 *start; - u8 *next_event; - u8 *loop_start; - struct dse_sub_loop sub_loops[4]; + u8 is_playing; + u8 field_0x3; + u8 current_octave; + u8 note_duration_multiplier; + u8 loop_stack_index; + u8 previous_note_number; + u8 ignore_playnote; + u8 field_0x9; + u16 main_loop_count; + u32 wait_ticks_left; + u32 previous_wait_ticks; + u32 previous_duration; + u8* track_data_location; + u8* position; + u8* loop_start; + struct dse_sub_loop loop_stack[4]; struct dse_channel *channel; - u8 field18_0x58; - u8 field19_0x59; - u8 field20_0x5a; - u8 field21_0x5b; + u8 field_0x58; + u8 field_0x59; + u8 field_0x5a; + u8 field_0x5b; }; struct dse_voice { @@ -174,7 +174,7 @@ struct dse_channel { u16 jitter_range; u8 random_note_min; u8 random_note_max; - u16 field10_0xe; + u16 bank_id; u16 field11_0x10; u8 field12_0x12; u8 field13_0x13; @@ -321,7 +321,7 @@ struct dse_seq { u8 field52_0x99; u8 field53_0x9a; u8 field54_0x9b; - u8 *unk_callback; + void (*unk_callback)(u32, u32, u32, u32); u32 field56_0xa0; struct dse_seq *next; struct dse_track tracks[16]; diff --git a/include/main_02071BF4.h b/include/main_02071BF4.h new file mode 100644 index 00000000..ffab211b --- /dev/null +++ b/include/main_02071BF4.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_MAIN_02071BF4_H +#define PMDSKY_MAIN_02071BF4_H + +#include "dse.h" + +u8* DseTrackEvent_SetInstrument(u8 *cur, struct dse_seq *seq, struct dse_track *trk, struct dse_channel *chn); + +#endif //PMDSKY_MAIN_02071BF4_H diff --git a/main.lsf b/main.lsf index eb3751c0..3afabe00 100644 --- a/main.lsf +++ b/main.lsf @@ -79,6 +79,8 @@ Static main Object asm/main_0206C9BC.o Object src/main_02071A98.o Object asm/main_02071AC0.o + Object src/main_02071BF4.o + Object asm/main_02071C3C.o Object lib/DSE/src/dc_envelope.o Object lib/DSE/src/dc_lfo.o Object lib/DSE/asm/dc_lfo_1.o diff --git a/src/main_02071A98.c b/src/main_02071A98.c index 0e3a779e..4a96df74 100644 --- a/src/main_02071A98.c +++ b/src/main_02071A98.c @@ -1,14 +1,14 @@ #include "main_02071A98.h" -u8* DseTrackEvent_SubLoopBreakOnLastIteration(u8 *cur, struct dse_seq *seq, struct dse_track *trk, struct dse_channel *chn) +u8* DseTrackEvent_SubLoopBreakOnLastIteration(u8 *ptr_next_byte, struct dse_seq *sequence, struct dse_track *track, struct dse_channel *channel) { - u8 n = trk->n_sub_loops; - struct dse_sub_loop *last_loop = &trk->sub_loops[n-1]; + u8 n = track->loop_stack_index; + struct dse_sub_loop *last_loop = &track->loop_stack[n-1]; if (last_loop->count - 1 == 0) { - cur = last_loop->end; - trk->n_sub_loops = n - 1; + ptr_next_byte = last_loop->end; + track->loop_stack_index = n - 1; } - return cur; + return ptr_next_byte; } diff --git a/src/main_02071BF4.c b/src/main_02071BF4.c new file mode 100644 index 00000000..c15d3d1d --- /dev/null +++ b/src/main_02071BF4.c @@ -0,0 +1,14 @@ +#include "main_02071BF4.h" + +extern u32 DseChannel_SetInstrument(struct dse_channel *channel, u16 instrument_index); + +u8* DseTrackEvent_SetInstrument(u8 *ptr_next_byte, struct dse_seq *sequence, struct dse_track *track, struct dse_channel *channel) +{ + s32 iVar1; + + iVar1 = DseChannel_SetInstrument(channel,(u16)*ptr_next_byte); + if (iVar1 < 0) { + sequence->unk_callback(sequence->id,-0xcc,(u32)(u16)channel->bank_id * 0x10000 - iVar1,sequence->field56_0xa0); + } + return ptr_next_byte + 1; +} From fc2648c4a3e1033ae675eff4a4aa85ded6a04c86 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 6 Aug 2025 18:36:10 -0400 Subject: [PATCH 16/40] Rename DSE structs to match pmdsky-debug --- include/dse.h | 419 ++++++++++++++++++++-------------------- include/main_02071A98.h | 2 +- include/main_02071BF4.h | 2 +- src/main_02071A98.c | 2 +- src/main_02071BF4.c | 4 +- 5 files changed, 219 insertions(+), 210 deletions(-) diff --git a/include/dse.h b/include/dse.h index ad45ee22..d89dc633 100644 --- a/include/dse.h +++ b/include/dse.h @@ -2,12 +2,10 @@ #define PMDSKY_DSE_H struct dse_fade { - s32 val; - u32 delta; - u32 target; - u16 steps; - u8 field4_0xe; - u8 field5_0xf; + s32 current; + s32 delta; + s32 target; + u16 ticks_remaining; }; struct dse_lfo { @@ -46,7 +44,7 @@ struct dse_sub_loop { u8 field5_0xb; }; -struct dse_sound_envelope_parameters { +struct sound_envelope_parameters { u8 use_envelope; u8 slide_time_multiplier; u16 unk_0x2; @@ -61,19 +59,18 @@ struct dse_sound_envelope_parameters { u8 unk_0xf; }; -struct dse_sound_envelope { - struct dse_sound_envelope_parameters parameters; +struct sound_envelope { + struct sound_envelope_parameters parameters; s32 current_volume; s32 volume_delta; s32 ticks_left; u8 state; u8 target_volume; u8 update_volume; - u8 field7_0x1f; }; struct dse_track { - u16 field0_0x0; + u16 field_0x0; u8 is_playing; u8 field_0x3; u8 current_octave; @@ -97,233 +94,245 @@ struct dse_track { u8 field_0x5b; }; -struct dse_voice { - u32 field0_0x0; - u16 unk_flags_0x4; - u16 unk_flags_0x6; - u16 field3_0x8; - u16 field4_0xa; - u8 field5_0xc; - u8 key; /* Created by retype action */ - u8 field7_0xe; - u8 field8_0xf; - u16 field9_0x10; - u16 field10_0x12; - s16 field11_0x14; - u8 field12_0x16; - u8 field13_0x17; - u16 field14_0x18; - u8 field15_0x1a; - u8 field16_0x1b; - u32 field17_0x1c; - u32 field18_0x20; - u32 field19_0x24; - u32 field20_0x28; - u32 field21_0x2c; - u32 field22_0x30; - u32 field23_0x34; - u32 field24_0x38; - struct dse_sound_envelope envelope; - struct dse_lfo_bank lfo_bank; - u8 field27_0x13c; - u8 field28_0x13d; - u8 field29_0x13e; - u8 field30_0x13f; - u8 field31_0x140; - u8 field32_0x141; - u8 field33_0x142; - u8 field34_0x143; - u8 field35_0x144; - u8 field36_0x145; - u8 field37_0x146; - u8 field38_0x147; - u8 field39_0x148; - u8 field40_0x149; - u8 field41_0x14a; - u8 field42_0x14b; - u32 field43_0x14c; - u8 field44_0x150; - u8 field45_0x151; - u8 field46_0x152; - u8 field47_0x153; - struct dse_voice *next; - struct dse_channel *channel; +struct dse_sample { + u8 field_0x0[3]; + u8 sample_format; + u8 field_0x4[5]; + u8 psg_duty; + u8 field_0xA[10]; + void* sample_pcm_data; + s32 sample_loop_start; + s32 sample_size; }; -struct dse_channel_unk_0x74dt { - u8 field0_0x0; - u8 field1_0x1; - u8 field2_0x2; - u8 field3_0x3; - u32 field4_0x4; - u16 field5_0x8; - u16 field6_0xa; - u16 field7_0xc; - u8 field8_0xe; - u8 field9_0xf; +struct dse_voice { + u32 allocated_sequence_id; + u16 note_off_flag; + u16 update_flags; + u16 hw_voice_index; + u16 hw_voice_bit; + u8 field_0xC; + u8 current_note_number; + s8 wave_index; + u8 key_bend_sensitivity; + s16 key_bend; + u16 note_key; + s16 key_base; + u8 note_volume; + u8 wave_pan; + u16 channel_and_keygroup; + u16 field_0x1C; + struct dse_sample sample; + struct sound_envelope envelope; + struct dse_lfo_bank lfo_bank; + s32 timer; + s32 volume; + s32 pan; + u32 field_0x148; + u8 envelope_volume; + u8 field_0x14D[7]; + struct dse_voice* next_in_channel_allocation_list; + struct dse_channel* channel_allocation; +}; + +struct dse_lfo_settings { + u8 field_0x0; + u8 type; + u8 output_type; + u8 lfo_waveform_index; + s32 amplitude; + u16 lfo_phase_change_msec; + u16 msec_until_lfo_started; + u16 lfo_envelope_len_msec; +}; + +struct dse_wavebank { + void* file; + u16 id; + u16 mainbank_id; + s16 num_waves; + u16 num_instruments; + u8 num_keygroups; + u8 sample_container_kind; + u16 field_0xE; + + void* wavi_chunk_location; + void* prgi_chunk_location; + void* kgrp_chunk_location; + void* pcmd_chunk_location; + + u32 pcm_data_size; + + struct dse_wavebank* next; }; struct dse_channel { - u32 field0_0x0; - u8 unk_flags_0x4; - u8 field2_0x5; - u8 field3_0x6; - u8 field4_0x7; - u8 field5_0x8; - u8 field6_0x9; - u16 jitter_range; - u8 random_note_min; - u8 random_note_max; - u16 bank_id; - u16 field11_0x10; - u8 field12_0x12; - u8 field13_0x13; - u16 field14_0x14; - u16 tune_final; - u16 vol_final; - u16 pan_final; - struct dse_fade tune_fade; - struct dse_fade vol_fade; - struct dse_fade pan_fade; - u8 field21_0x4c; - u8 field22_0x4d; - u8 field23_0x4e; - u8 field24_0x4f; + u32 sequence_id; + u8 channel_flags; + u8 channel_index; + u8 field_0x6; + u8 field_0x7; + u8 field_0x8; + s8 total_num_voices; + u16 bend_jitter_amplitude; + u8 note_random_region_begin; + u8 note_random_region_end; + u16 swd_id; + u16 selected_instrument_index; + s16 field_0x12; + s16 field_0x14; + u16 bend_final; + u16 volume_final; + s16 pan_final; + struct dse_fade bend; + struct dse_fade volume; + struct dse_fade pan; + u32 field_0x4C; u8 expression; - s8 field26_0x51; - u16 field27_0x52; - u16 field28_0x54; - u16 field29_0x56; - u8 opt_volume; /* Created by retype action */ - u8 bend_range; /* Created by retype action */ - u8 field32_0x5a; - u8 field33_0x5b; - u8 field34_0x5c; - u8 field35_0x5d; - u8 field36_0x5e; - u8 field37_0x5f; - u8 field38_0x60; - u8 field39_0x61; - u8 field40_0x62; - u8 field41_0x63; - struct dse_sound_envelope_parameters envelope; - struct dse_channel_unk_0x74dt field43_0x74[4]; - struct dse_voice *voices; - struct dse_note_node *notes; - u32 field46_0xbc; - u32 field47_0xc0; + u8 lfo_amplitude; + s16 key_bend; + s16 tuning; + s16 field_0x56; + u8 optional_volume; + u8 bend_sensitivity_override; + u8 field_0x5A[10]; + struct sound_envelope_parameters envelope_override; + struct dse_lfo_settings lfo_settings[4]; + struct dse_voice* voice_list; + struct dse_note_list* held_notes_list; + struct dse_wavebank* wavebank; + struct dse_instrument* instrument; struct dse_synth *container; }; +struct dse_instrument_split { + u8 field_0x0; + u8 index; + u8 bend_sensitivity; + u8 field_0x3; + u8 min_note_num; + u8 max_note_num; + u8 field_0x6; + u8 field_0x7; + u8 min_note_volume; + u8 max_note_volume; + u8 field_0xC[8]; + s16 wave_index; + s16 key_base; + u8 field_0x16; + s8 note_delta; + u8 volume; + u8 pan; + u8 keygroup_index; + u8 field_0x1B[5]; + + struct sound_envelope_parameters envelope_params; +}; + +struct dse_instrument { + u16 field_0x0; + u8 num_splits; + u8 field_0x3; + u8 volume; + u8 field_0x5[11]; + + struct dse_lfo_settings lfo_settings; + u8 field_0x20[16]; + + struct dse_instrument_split splits[]; +}; + struct dse_synth { - u8 field0_0x0; - u8 n_channels; - u8 global_vol; - u8 global_vol_idx; + u8 field_0x0; + u8 num_channels; + s8 global_volume; + s8 global_volume_index; s16 bend; - s8 vol; + s8 volume; s8 pan; - s8 combined_vol; - u8 field8_0x9; - u8 field9_0xa; - u8 field10_0xb; + s8 song_and_global_volume; + u8 clear_volume_and_timer; + u8 field_0xA; + u8 num_voices; struct dse_synth *next; struct dse_channel channels[16]; /* flexible */ }; struct dse_note_parameters { - u8 field0_0x0; + u8 field_0x0; u8 channel_idx; u8 key; u8 volume; }; -struct dse_note_node { +struct dse_note_list { struct dse_note_parameters parameters; s32 duration; - struct dse_note_node *next; + struct dse_note_list *next; }; -struct dse_seq_unk_0x0 { - u8 field0_0x0; - u8 field1_0x1; - u8 field2_0x2; - u8 field3_0x3; +struct dse_sequence_unk_0x0 { + s8 initialized; + s8 is_stopped; + s8 restart; + u8 has_looped; }; -struct dse_seq_unk_0x4 { - u8 field0_0x0; - s8 field1_0x1; - u8 field2_0x2; - u8 field3_0x3; +struct dse_sequence_unk_0x4 { + s8 is_playing; + s8 field_0x1; + s8 field_0x2; + s8 field_0x3; }; -struct dse_seq_unk_0x8 { - s8 field0_0x0; - u8 field1_0x1; - u8 field2_0x2; - u8 field3_0x3; +struct dse_sequence_unk_0x8 { + s8 field_0x0; + s8 field_0x1; + s8 field_0x2; + u8 field_0x3; }; -struct dse_seq { - struct dse_seq_unk_0x0 field0_0x0; - struct dse_seq_unk_0x4 field1_0x4; - struct dse_seq_unk_0x8 field2_0x8; - u8 unk_flags_0xc; - u8 n_active_tracks; - u8 field5_0xe; - u8 n_tracks; - u8 n_channels; - u8 field8_0x11; - u8 field9_0x12; - u8 field10_0x13; - u8 field11_0x14; - u8 field12_0x15; - u8 field13_0x16; +struct dse_sequence { + struct dse_sequence_unk_0x0 field_0x0; + struct dse_sequence_unk_0x4 field_0x4; + struct dse_sequence_unk_0x8 field_0x8; + u8 active_fades_flags; + u8 num_tracks_playing; + s8 num_tracks; + s8 num_tracks_2; + s8 num_channels; + u8 field_0x11; + u8 field_0x12; + u8 global_volume_index; + u8 effect_id; + u8 seq_ticks_per_eighth_beat; + u8 field_0x16; u8 bpm; - u8 field15_0x18; - u8 field16_0x19; - s16 field17_0x1a; - u8 *seq_file; - u8 *field19_0x20; - struct dse_synth *synth; - u32 id; - u16 field22_0x2c; - u8 field23_0x2e; - u8 field24_0x2f; - u32 field25_0x30; - u32 field26_0x34; - u32 field27_0x38; - u32 field28_0x3c; - u32 field29_0x40; - s32 us_per_standard_qn; /* us per 256 ticks */ - struct dse_fade tpqn_fade; - struct dse_fade bend_fade; - struct dse_fade vol_fade; - struct dse_fade pan_fade; - u8 field35_0x88; - u8 field36_0x89; - u8 field37_0x8a; - u8 field38_0x8b; - u8 field39_0x8c; - u8 field40_0x8d; - u8 field41_0x8e; - u8 field42_0x8f; - u8 field43_0x90; - u8 field44_0x91; - u8 field45_0x92; - u8 field46_0x93; - u8 field47_0x94; - u8 field48_0x95; - u8 field49_0x96; - u8 field50_0x97; - s8 field51_0x98; - u8 field52_0x99; - u8 field53_0x9a; - u8 field54_0x9b; - void (*unk_callback)(u32, u32, u32, u32); - u32 field56_0xa0; - struct dse_seq *next; + u8 field_0x18; + u8 field_0x19; + s16 ticks_until_update; + u8* file; + u8* field_0x20; + struct dse_synth* synth; + s32 id; + u16 field_0x2C; + u16 field_0x2E; + s32 total_driver_ticks_at_reset; + s32 field_0x34; + s32 seq_tick_counter; + s32 time_since_last_seq_tick; + s32 beatsplit_times_ticktime; + s32 microseconds_per_beat; /* us per 256 ticks */ + struct dse_fade tempo; + struct dse_fade bend; + struct dse_fade volume; + struct dse_fade pan; + u8 field_0x88[16]; + s8 volume_fade_target; + u8 field_0x99[3]; + void (*signal_callback)(u32, u32, u32, void*); + void* callback_arg; + struct dse_sequence* next; struct dse_track tracks[16]; }; diff --git a/include/main_02071A98.h b/include/main_02071A98.h index 0526253c..2edbfaa1 100644 --- a/include/main_02071A98.h +++ b/include/main_02071A98.h @@ -3,6 +3,6 @@ #include "dse.h" -u8* DseTrackEvent_SubLoopBreakOnLastIteration(u8 *cur, struct dse_seq *seq, struct dse_track *trk, struct dse_channel *chn); +u8* DseTrackEvent_SubLoopBreakOnLastIteration(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); #endif //PMDSKY_MAIN_02071A98_H diff --git a/include/main_02071BF4.h b/include/main_02071BF4.h index ffab211b..7df69572 100644 --- a/include/main_02071BF4.h +++ b/include/main_02071BF4.h @@ -3,6 +3,6 @@ #include "dse.h" -u8* DseTrackEvent_SetInstrument(u8 *cur, struct dse_seq *seq, struct dse_track *trk, struct dse_channel *chn); +u8* DseTrackEvent_SetInstrument(u8 *cur, struct dse_sequence *seq, struct dse_track *trk, struct dse_channel *chn); #endif //PMDSKY_MAIN_02071BF4_H diff --git a/src/main_02071A98.c b/src/main_02071A98.c index 4a96df74..f1b30bc3 100644 --- a/src/main_02071A98.c +++ b/src/main_02071A98.c @@ -1,6 +1,6 @@ #include "main_02071A98.h" -u8* DseTrackEvent_SubLoopBreakOnLastIteration(u8 *ptr_next_byte, struct dse_seq *sequence, struct dse_track *track, struct dse_channel *channel) +u8* DseTrackEvent_SubLoopBreakOnLastIteration(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) { u8 n = track->loop_stack_index; struct dse_sub_loop *last_loop = &track->loop_stack[n-1]; diff --git a/src/main_02071BF4.c b/src/main_02071BF4.c index c15d3d1d..2184e691 100644 --- a/src/main_02071BF4.c +++ b/src/main_02071BF4.c @@ -2,13 +2,13 @@ extern u32 DseChannel_SetInstrument(struct dse_channel *channel, u16 instrument_index); -u8* DseTrackEvent_SetInstrument(u8 *ptr_next_byte, struct dse_seq *sequence, struct dse_track *track, struct dse_channel *channel) +u8* DseTrackEvent_SetInstrument(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) { s32 iVar1; iVar1 = DseChannel_SetInstrument(channel,(u16)*ptr_next_byte); if (iVar1 < 0) { - sequence->unk_callback(sequence->id,-0xcc,(u32)(u16)channel->bank_id * 0x10000 - iVar1,sequence->field56_0xa0); + sequence->signal_callback(sequence->id,-0xcc,(u32)(u16)channel->swd_id * 0x10000 - iVar1,sequence->callback_arg); } return ptr_next_byte + 1; } From ad23efbadcfd0469b5a8bbf4e5d18c7918797224 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 6 Aug 2025 19:30:13 -0400 Subject: [PATCH 17/40] Decomped DseTrackEvent_Dummy1Byte Decomped by @Snioflake --- asm/main_02071AC0.s | 6 ------ include/main_02071BF4.h | 3 ++- src/main_02071BF4.c | 5 +++++ 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/asm/main_02071AC0.s b/asm/main_02071AC0.s index 5d085d65..765dddcb 100644 --- a/asm/main_02071AC0.s +++ b/asm/main_02071AC0.s @@ -107,9 +107,3 @@ DseTrackEvent_SetBankLsb: ; 0x02071BBC add r0, r4, #1 ldmia sp!, {r4, pc} arm_func_end DseTrackEvent_SetBankLsb - - arm_func_start DseTrackEvent_Dummy1Byte -DseTrackEvent_Dummy1Byte: ; 0x02071BEC - add r0, r0, #1 - bx lr - arm_func_end DseTrackEvent_Dummy1Byte diff --git a/include/main_02071BF4.h b/include/main_02071BF4.h index 7df69572..9db6b7b1 100644 --- a/include/main_02071BF4.h +++ b/include/main_02071BF4.h @@ -3,6 +3,7 @@ #include "dse.h" -u8* DseTrackEvent_SetInstrument(u8 *cur, struct dse_sequence *seq, struct dse_track *trk, struct dse_channel *chn); +u8* DseTrackEvent_Dummy1Byte(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); +u8* DseTrackEvent_SetInstrument(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); #endif //PMDSKY_MAIN_02071BF4_H diff --git a/src/main_02071BF4.c b/src/main_02071BF4.c index 2184e691..b1c7d79b 100644 --- a/src/main_02071BF4.c +++ b/src/main_02071BF4.c @@ -1,5 +1,10 @@ #include "main_02071BF4.h" +u8* DseTrackEvent_Dummy1Byte(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) +{ + return ptr_next_byte + 1; +} + extern u32 DseChannel_SetInstrument(struct dse_channel *channel, u16 instrument_index); u8* DseTrackEvent_SetInstrument(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) From 607b7b4ee7e44d89b8b0fd759f0723aed0e4e161 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 6 Aug 2025 19:51:24 -0400 Subject: [PATCH 18/40] Decomped DseTrackEvent_SongVolumeFade Decomped by @Snioflake --- .../{main_02071C3C.inc => main_02071CC8.inc} | 1 - asm/{main_02071C3C.s => main_02071CC8.s} | 44 +----- include/dse.h | 145 ++++++++++++++++-- include/main_02071BF4.h | 1 + include/thread.h | 94 ++++++++++++ main.lsf | 2 +- src/main_02071BF4.c | 43 +++++- 7 files changed, 273 insertions(+), 57 deletions(-) rename asm/include/{main_02071C3C.inc => main_02071CC8.inc} (98%) rename asm/{main_02071C3C.s => main_02071CC8.s} (98%) create mode 100644 include/thread.h diff --git a/asm/include/main_02071C3C.inc b/asm/include/main_02071CC8.inc similarity index 98% rename from asm/include/main_02071C3C.inc rename to asm/include/main_02071CC8.inc index 15e8429d..d4166821 100644 --- a/asm/include/main_02071C3C.inc +++ b/asm/include/main_02071CC8.inc @@ -30,7 +30,6 @@ .public _022B8330 .public _022B9584 .public _s32_div_f -.public _u32_div_f .public sub_0207C8B8 .public sub_0207C8E0 .public sub_0207CA04 diff --git a/asm/main_02071C3C.s b/asm/main_02071CC8.s similarity index 98% rename from asm/main_02071C3C.s rename to asm/main_02071CC8.s index f791a3f4..008c439a 100644 --- a/asm/main_02071C3C.s +++ b/asm/main_02071CC8.s @@ -1,50 +1,8 @@ .include "asm/macros.inc" - .include "main_02071C3C.inc" + .include "main_02071CC8.inc" .text - arm_func_start DseTrackEvent_SongVolumeFade -DseTrackEvent_SongVolumeFade: ; 0x02071C3C - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrb r2, [r5] - ldrb r0, [r5, #1] - mov r4, r1 - add r0, r2, r0, lsl #8 - mov r0, r0, lsl #0x10 - movs r1, r0, lsr #0x10 - moveq r6, #0 - beq _02071C84 - mov r0, #0x3e8 - mul r0, r1, r0 - ldr r1, _02071CC4 ; =DRIVER_WORK - ldrsh r1, [r1, #0x28] - bl _u32_div_f - mov r0, r0, lsl #0x10 - movs r6, r0, lsr #0x10 - moveq r6, #1 -_02071C84: - ldrb r0, [r5, #2] - cmp r6, #0 - mov r1, r0, lsl #0x10 - str r1, [r4, #0x70] - streq r1, [r4, #0x68] - beq _02071CB8 - ldr r0, [r4, #0x68] - subs r0, r1, r0 - moveq r6, #0 - beq _02071CB8 - mov r1, r6 - bl _s32_div_f - str r0, [r4, #0x6c] -_02071CB8: - strh r6, [r4, #0x74] - add r0, r5, #3 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02071CC4: .word DRIVER_WORK - arm_func_end DseTrackEvent_SongVolumeFade - arm_func_start DseTrackEvent_RestoreEnvelopeDefaults DseTrackEvent_RestoreEnvelopeDefaults: ; 0x02071CC8 stmdb sp!, {r4, lr} diff --git a/include/dse.h b/include/dse.h index d89dc633..ef0d8861 100644 --- a/include/dse.h +++ b/include/dse.h @@ -1,6 +1,9 @@ #ifndef PMDSKY_DSE_H #define PMDSKY_DSE_H +#include "file.h" +#include "thread.h" + struct dse_fade { s32 current; s32 delta; @@ -24,20 +27,20 @@ struct dse_lfo { u16 lfo_envelope_ticks_left; s32 envelope_level; s32 envelope_delta; - u8 *output_ptr; - u8 *waveform_callback; - struct dse_lfo *next; + u8* output_ptr; + u8* waveform_callback; + struct dse_lfo* next; }; struct dse_lfo_bank { s16 outputs[6]; - struct dse_lfo *lfo_list; + struct dse_lfo* lfo_list; struct dse_lfo lfos[4]; }; struct dse_sub_loop { - u8 *start; - u8 *end; + u8* start; + u8* end; u8 count; u8 octave; u8 field4_0xa; @@ -87,7 +90,7 @@ struct dse_track { u8* position; u8* loop_start; struct dse_sub_loop loop_stack[4]; - struct dse_channel *channel; + struct dse_channel* channel; u8 field_0x58; u8 field_0x59; u8 field_0x5a; @@ -202,7 +205,7 @@ struct dse_channel { struct dse_note_list* held_notes_list; struct dse_wavebank* wavebank; struct dse_instrument* instrument; - struct dse_synth *container; + struct dse_synth* container; }; struct dse_instrument_split { @@ -254,7 +257,7 @@ struct dse_synth { u8 clear_volume_and_timer; u8 field_0xA; u8 num_voices; - struct dse_synth *next; + struct dse_synth* next; struct dse_channel channels[16]; /* flexible */ }; @@ -268,7 +271,7 @@ struct dse_note_parameters { struct dse_note_list { struct dse_note_parameters parameters; s32 duration; - struct dse_note_list *next; + struct dse_note_list* next; }; struct dse_sequence_unk_0x0 { @@ -336,4 +339,126 @@ struct dse_sequence { struct dse_track tracks[16]; }; +struct dse_note { + u8 is_note_on; + u8 is_held; + u8 note_number; + s8 volume; + s32 duration; +}; + +struct dse_note_list_node { + struct dse_note note; + struct dse_note_list_node* next; +}; + +struct dse_se_bank { + void* file; + s16 field_0x4; + u16 id; + struct dse_se_bank* next; + void* seq_location; + void* mcrl_location; + void* bnkl_location; + + u8 field_0x18[4]; +}; + +struct dse_heap_allocator { + void* allocate_fun; + void* free_fun; + void* arg; +}; + +struct dse_mainbank { + u16 id; + u16 num_wavi; + u32 pcm_data_offset; + void* wavi_data; + u32 field_0xC; + u32 field_0x10; + + struct file_stream file; + + struct dse_mainbank* next; +}; + +struct dse_driver_work { + s8 initialized; + u8 stopped; + u16 unknown_0x2; + s32 error_code; + u32 error_data; + u32 error_data2; + s32 error2_code; + u32 error2_data; + u32 error2_data2; + void* error_callback; + void* error2_callback; + u32 field_0x24; + s16 microseconds_per_driver_tick; + u16 field_0x2A; + s32 total_driver_ticks; + s32 driver_tick_rate; + u32 current_rng_seed; + u8 field_0x38; + u8 field_0x39; + u8 last_se_bank_num_sequences; + u8 last_se_bank_tracks_per_sequence; + u8 field_0x3C; + s8 field_0x3D; + u16 field_0x3E; + u8 global_volumes[16]; + struct dse_note_list_node notes[128]; + struct dse_note_list_node* free_notes_list; + u32 field_0x654; + struct dse_synth* synth_list; + u32 field_0x65C; + struct dse_wavebank* loaded_wavebanks_list; + struct dse_sequence* bgm_sequences_list; + struct dse_sequence* se_sequences_list; + struct dse_se_bank* loaded_effect_banks; + u8 field_0x670[132]; + void* heap_node_list; + void* heap_end; + s32 heap_size; + struct dse_heap_allocator heap_allocator; + u8 field_0x70C[36]; + s16 num_voices; + u16 active_voices_bits; + u16 start_voices_bits; + u16 deactivate_voices_bits; + u16 deallocate_voices_bits; + u16 field_0x73C; + + struct dse_voice voices[16]; + + u16 field_0x1CFC; + u16 field_0x1CFE; + s32 num_active_voices; + s32 prev_nom_active_voices; + s32 ticks_until_num_active_voices_timeout; + u32 microseconds_per_driver_tick_2; + u32 field_1D10; + u32 field_1D14; + + struct thread driver_thread; + void* driver_stack; + + u32 field_0x1DDC; + struct dse_mainbank* loaded_mainbanks; + s32 mainbank_max_read_size; + void* mainbank_read_callback; + void* mainbank_read_callback_param; + + u8 loader_thread_priority; + u8 field_0x1DF1; + s8 quit_sample_loader; + s8 is_sample_loader_sleeping; + struct thread sample_loader_thread; + void* sample_loader_thread_stack; + struct dse_wavebank* loading_bank; + void* loading_bank_pcm_data; +}; + #endif //PMDSKY_DSE_H diff --git a/include/main_02071BF4.h b/include/main_02071BF4.h index 9db6b7b1..1d470470 100644 --- a/include/main_02071BF4.h +++ b/include/main_02071BF4.h @@ -5,5 +5,6 @@ u8* DseTrackEvent_Dummy1Byte(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); u8* DseTrackEvent_SetInstrument(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); +u8* DseTrackEvent_SongVolumeFade(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); #endif //PMDSKY_MAIN_02071BF4_H diff --git a/include/thread.h b/include/thread.h new file mode 100644 index 00000000..59ad06d1 --- /dev/null +++ b/include/thread.h @@ -0,0 +1,94 @@ +#ifndef PMDSKY_THREAD_H +#define PMDSKY_THREAD_H + +// Specifies a function called when a thread exits +typedef void (*thread_exit_fn_t)(void); + +// Contains information about a running thread +struct thread { + s32 flags; // Probably a flags field. Usually 0x1F. + struct thread* field_0x4; // r2 parameter in ThreadStart + u32 field_0x8; // Initialized to 0 + u32 field_0xC; // Initialized to 0 + u32 field_0x10; // Initialized to 0 + u32 field_0x14; // Initialized to 0 + u32 field_0x18; // Initialized to 0 + u32 field_0x1C; // Initialized to 0 + u32 field_0x20; // Initialized to 0 + u32 field_0x24; // Initialized to 0 + u32 field_0x28; // Initialized to 0 + u32 field_0x2C; // Initialized to 0 + u32 field_0x30; // Initialized to 0 + u32 field_0x34; // Initialized to 0 + // 0x38: Points to the area of the allocated stack area that can actually be used to store data. + // This is equal to stack_pointer - 0x44, with an additional - 4 if the resulting addess is not + // aligned to 8 bytes. + void* usable_stack_pointer; + // 0x3C: Address of the function to return to once the thread exits. Usually ThreadExit. + thread_exit_fn_t exit_function; + void* function_address_plus_4; // 0x40: Pointer to the function to run + 4 + void* stack_pointer_minus_4; // 0x44: Pointer to the start of the stack area - 4 + u8 field_0x48; + u8 field_0x49; + u8 field_0x4A; + u8 field_0x4B; + u8 field_0x4C; + u8 field_0x4D; + u8 field_0x4E; + u8 field_0x4F; + u8 field_0x50; + u8 field_0x51; + u8 field_0x52; + u8 field_0x53; + u8 field_0x54; + u8 field_0x55; + u8 field_0x56; + u8 field_0x57; + u8 field_0x58; + u8 field_0x59; + u8 field_0x5A; + u8 field_0x5B; + u8 field_0x5C; + u8 field_0x5D; + u8 field_0x5E; + u8 field_0x5F; + u8 field_0x60; + u8 field_0x61; + u8 field_0x62; + u8 field_0x63; + u32 field_0x64; // Initialized to 0 + // 0x68: Pointer to the next thread. This forms a linked list sorted in ascending order + // according to sorting_order + struct thread* next_thread; + // 0x6C: Seems to be a thread ID that gets incremented for each new thread created. + s32 thread_id; + s32 sorting_order; // 0x70: Unknown. Used to sort threads. + u32 field_0x74; // Initialized to 0 + u32 field_0x78; // Initialized to 0 + u32 field_0x7C; // Initialized to 0 + u32 field_0x80; // Initialized to 0 + u32 field_0x84; // Initialized to 0 + u32 field_0x88; // Initialized to 0 + u32 field_0x8C; // Initialized to 0 + void* stack_end_pointer; // 0x90: Pointer to the end of the stack area (exclusive) + void* stack_pointer; // 0x94: Pointer to the start of the stack area (inclusive) + u32 field_0x98; // Initialized to 0 + u32 field_0x9C; // Initialized to 0 + u32 field_0xA0; // Initialized to 0 + // Initialized to 0. Actually part of a separate struct alongside field_0xA8 and field_0xAC. + u32 field_0xA4; + u32 field_0xA8; // Initialized to 0 + u32 field_0xAC; // Initialized to 0 + u32 field_0xB0; // Initialized to 0 + u32 field_0xB4; // Initialized to 0 + u8 field_0xB8; + u8 field_0xB9; + u8 field_0xBA; + u8 field_0xBB; + u8 field_0xBC; + u8 field_0xBD; + u8 field_0xBE; + u8 field_0xBF; +}; + +#endif //PMDSKY_THREAD_H diff --git a/main.lsf b/main.lsf index 3afabe00..c5d5e3bc 100644 --- a/main.lsf +++ b/main.lsf @@ -80,7 +80,7 @@ Static main Object src/main_02071A98.o Object asm/main_02071AC0.o Object src/main_02071BF4.o - Object asm/main_02071C3C.o + Object asm/main_02071CC8.o Object lib/DSE/src/dc_envelope.o Object lib/DSE/src/dc_lfo.o Object lib/DSE/asm/dc_lfo_1.o diff --git a/src/main_02071BF4.c b/src/main_02071BF4.c index b1c7d79b..f27c1b40 100644 --- a/src/main_02071BF4.c +++ b/src/main_02071BF4.c @@ -1,12 +1,16 @@ #include "main_02071BF4.h" +extern struct dse_driver_work DRIVER_WORK; + +extern u32 DseChannel_SetInstrument(struct dse_channel *channel, u16 instrument_index); +extern u32 _u32_div_f(u32 dividend, u32 divisor); +extern u32 _s32_div_f(s32 dividend, s32 divisor); + u8* DseTrackEvent_Dummy1Byte(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) { return ptr_next_byte + 1; } -extern u32 DseChannel_SetInstrument(struct dse_channel *channel, u16 instrument_index); - u8* DseTrackEvent_SetInstrument(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) { s32 iVar1; @@ -17,3 +21,38 @@ u8* DseTrackEvent_SetInstrument(u8 *ptr_next_byte, struct dse_sequence *sequence } return ptr_next_byte + 1; } + +u8* DseTrackEvent_SongVolumeFade(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) +{ + s32 iVar2; + u32 uVar3; + u16 uVar4; + + uVar4 = (u32)*ptr_next_byte + (u32)ptr_next_byte[1] * 0x100 & 0xffff; + if (uVar4 == 0) { + uVar4 = 0; + } + else { + uVar4 = _u32_div_f(uVar4 * 1000,DRIVER_WORK.microseconds_per_driver_tick); + if (uVar4 == 0) { + uVar4 = 1; + } + } + iVar2 = (u32)ptr_next_byte[2] * 0x10000; + (sequence->volume).target = iVar2; + if (uVar4 == 0) { + (sequence->volume).current = iVar2; + } + else { + iVar2 = iVar2 - (sequence->volume).current; + if (iVar2 == 0) { + uVar4 = 0; + } + else { + uVar3 = _s32_div_f(iVar2,uVar4); + (sequence->volume).delta = uVar3; + } + } + (sequence->volume).ticks_remaining = (short)uVar4; + return ptr_next_byte + 3; +} From 6b680ed8d89c373f191a795206ffb1b0e6e40363 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 6 Aug 2025 19:58:17 -0400 Subject: [PATCH 19/40] Decomped DseTrackEvent_SetTuning Decomped by @Snioflake --- asm/include/main_02071CC8.inc | 40 +- asm/include/main_02071EB4.inc | 41 + asm/main_02071CC8.s | 3665 --------------------------------- asm/main_02071EB4.s | 3630 ++++++++++++++++++++++++++++++++ include/main_02071E34.h | 8 + main.lsf | 2 + src/main_02071E34.c | 23 + 7 files changed, 3706 insertions(+), 3703 deletions(-) create mode 100644 asm/include/main_02071EB4.inc create mode 100644 asm/main_02071EB4.s create mode 100644 include/main_02071E34.h create mode 100644 src/main_02071E34.c diff --git a/asm/include/main_02071CC8.inc b/asm/include/main_02071CC8.inc index d4166821..f1d74a81 100644 --- a/asm/include/main_02071CC8.inc +++ b/asm/include/main_02071CC8.inc @@ -1,41 +1,5 @@ #pragma once -.public DRIVER_WORK -.public DseMem_Allocate -.public DseMem_Free -.public DseSwd_GetBankById -.public DseSwd_GetInstrument -.public DseSwd_GetNextSplitInRange -.public DseUtil_GetRandomNumber -.public ReadWaviEntry +.public DseChannel_SetLfoConstEnvelopeLevel +.public DseVoice_ReleaseHeld .public SoundEnvelopeParameters_CheckValidity .public SoundEnvelopeParameters_Reset -.public SoundEnvelope_Release -.public SoundEnvelope_Reset -.public SoundEnvelope_SetParameters -.public SoundEnvelope_Stop -.public SoundEnvelope_Stop2 -.public SoundEnvelope_Tick -.public SoundLfoBank_Reset -.public SoundLfoBank_Set -.public SoundLfoBank_SetConstEnvelopes -.public SoundLfoBank_Tick -.public UpdateTrackVolumeEnvelopes -.public _020B0D50 -.public _020B1310 -.public _020B1394 -.public _022B7370 -.public _022B7988 -.public _022B7A30 -.public _022B7A6C -.public _022B8330 -.public _022B9584 -.public _s32_div_f -.public sub_0207C8B8 -.public sub_0207C8E0 -.public sub_0207CA04 -.public sub_0207CA24 -.public sub_0207CA4C -.public sub_0207CA6C -.public sub_0207CAB8 -.public sub_0207CAE0 -.public sub_0207D470 diff --git a/asm/include/main_02071EB4.inc b/asm/include/main_02071EB4.inc new file mode 100644 index 00000000..d4166821 --- /dev/null +++ b/asm/include/main_02071EB4.inc @@ -0,0 +1,41 @@ +#pragma once +.public DRIVER_WORK +.public DseMem_Allocate +.public DseMem_Free +.public DseSwd_GetBankById +.public DseSwd_GetInstrument +.public DseSwd_GetNextSplitInRange +.public DseUtil_GetRandomNumber +.public ReadWaviEntry +.public SoundEnvelopeParameters_CheckValidity +.public SoundEnvelopeParameters_Reset +.public SoundEnvelope_Release +.public SoundEnvelope_Reset +.public SoundEnvelope_SetParameters +.public SoundEnvelope_Stop +.public SoundEnvelope_Stop2 +.public SoundEnvelope_Tick +.public SoundLfoBank_Reset +.public SoundLfoBank_Set +.public SoundLfoBank_SetConstEnvelopes +.public SoundLfoBank_Tick +.public UpdateTrackVolumeEnvelopes +.public _020B0D50 +.public _020B1310 +.public _020B1394 +.public _022B7370 +.public _022B7988 +.public _022B7A30 +.public _022B7A6C +.public _022B8330 +.public _022B9584 +.public _s32_div_f +.public sub_0207C8B8 +.public sub_0207C8E0 +.public sub_0207CA04 +.public sub_0207CA24 +.public sub_0207CA4C +.public sub_0207CA6C +.public sub_0207CAB8 +.public sub_0207CAE0 +.public sub_0207D470 diff --git a/asm/main_02071CC8.s b/asm/main_02071CC8.s index 008c439a..2f110300 100644 --- a/asm/main_02071CC8.s +++ b/asm/main_02071CC8.s @@ -146,3668 +146,3 @@ DseTrackEvent_Dummy2Bytes: ; 0x02071E2C add r0, r0, #2 bx lr arm_func_end DseTrackEvent_Dummy2Bytes - - arm_func_start DseTrackEvent_SetTuning -DseTrackEvent_SetTuning: ; 0x02071E34 - stmdb sp!, {r4, lr} - ldrsb r1, [r0] - ldr ip, _02071EB0 ; =0x04000208 - mov r2, #0 - mov r1, r1, lsl #0x18 - mov r4, r1, asr #0x10 - strh r4, [r3, #0x54] - ldr lr, [r3, #0xc4] - ldr r1, [r3, #0x1c] - ldrsh lr, [lr, #4] - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - add r1, r4, r1, asr #16 - add r1, lr, r1 - strh r1, [r3, #0x16] - ldrh r4, [ip] - strh r2, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _02071E9C -_02071E84: - ldrh r1, [r2, #6] - orr r1, r1, #0x10 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02071E84 -_02071E9C: - ldr r2, _02071EB0 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r4, pc} - .align 2, 0 -_02071EB0: .word 0x04000208 - arm_func_end DseTrackEvent_SetTuning - - arm_func_start DseTrackEvent_TuningDeltaCoarse -DseTrackEvent_TuningDeltaCoarse: ; 0x02071EB4 - stmdb sp!, {r4, lr} - ldrsb r4, [r0] - ldrsh r1, [r3, #0x54] - ldr ip, _02071F38 ; =0x04000208 - mov r2, #0 - add r1, r1, r4, lsl #8 - mov r1, r1, lsl #0x10 - mov r4, r1, asr #0x10 - strh r4, [r3, #0x54] - ldr lr, [r3, #0xc4] - ldr r1, [r3, #0x1c] - ldrsh lr, [lr, #4] - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - add r1, r4, r1, asr #16 - add r1, lr, r1 - strh r1, [r3, #0x16] - ldrh r4, [ip] - strh r2, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _02071F24 -_02071F0C: - ldrh r1, [r2, #6] - orr r1, r1, #0x10 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02071F0C -_02071F24: - ldr r2, _02071F38 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r4, pc} - .align 2, 0 -_02071F38: .word 0x04000208 - arm_func_end DseTrackEvent_TuningDeltaCoarse - - arm_func_start DseTrackEvent_TuningDeltaFine -DseTrackEvent_TuningDeltaFine: ; 0x02071F3C - stmdb sp!, {r4, lr} - ldrsb r4, [r0] - ldrsh r1, [r3, #0x54] - ldr ip, _02071FC0 ; =0x04000208 - mov r2, #0 - add r1, r1, r4, lsl #2 - mov r1, r1, lsl #0x10 - mov r4, r1, asr #0x10 - strh r4, [r3, #0x54] - ldr lr, [r3, #0xc4] - ldr r1, [r3, #0x1c] - ldrsh lr, [lr, #4] - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - add r1, r4, r1, asr #16 - add r1, lr, r1 - strh r1, [r3, #0x16] - ldrh r4, [ip] - strh r2, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _02071FAC -_02071F94: - ldrh r1, [r2, #6] - orr r1, r1, #0x10 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02071F94 -_02071FAC: - ldr r2, _02071FC0 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r4, pc} - .align 2, 0 -_02071FC0: .word 0x04000208 - arm_func_end DseTrackEvent_TuningDeltaFine - - arm_func_start DseTrackEvent_TuningDeltaFull -DseTrackEvent_TuningDeltaFull: ; 0x02071FC4 - stmdb sp!, {r3, lr} - ldrb ip, [r0] - ldrb r1, [r0, #1] - ldrsh lr, [r3, #0x54] - ldr r2, _02072050 ; =0x04000208 - add r1, ip, r1, lsl #8 - add r1, lr, r1 - mov r1, r1, lsl #0x10 - mov lr, r1, asr #0x10 - strh lr, [r3, #0x54] - ldr ip, [r3, #0xc4] - ldr r1, [r3, #0x1c] - ldrsh ip, [ip, #4] - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - add r1, lr, r1, asr #16 - add r1, ip, r1 - strh r1, [r3, #0x16] - ldrh ip, [r2] - mov r1, #0 - strh r1, [r2] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _0207203C -_02072024: - ldrh r1, [r2, #6] - orr r1, r1, #0x10 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02072024 -_0207203C: - ldr r2, _02072050 ; =0x04000208 - add r0, r0, #2 - ldrh r1, [r2] - strh ip, [r2] - ldmia sp!, {r3, pc} - .align 2, 0 -_02072050: .word 0x04000208 - arm_func_end DseTrackEvent_TuningDeltaFull - - arm_func_start DseTrackEvent_TuningFade -DseTrackEvent_TuningFade: ; 0x02072054 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r3 - ldrb r1, [r6, #4] - ldrb r4, [r7] - ldrb r0, [r7, #1] - tst r1, #2 - ldrb r2, [r7, #2] - add r0, r4, r0, lsl #8 - mov r0, r0, lsl #0x10 - mov r5, r0, lsr #0x10 - ldr r4, [r6, #0xc4] - moveq r1, #0 - streq r1, [r6, #0x1c] - ldr r1, [r6, #0x1c] - mov r0, r2, lsl #0x18 - mov r1, r1, asr #0x10 - add r0, r1, r0, lsr #16 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - mov r1, r0, lsl #0x10 - str r1, [r6, #0x24] - cmp r5, #0 - streq r1, [r6, #0x1c] - beq _020720D4 - ldr r0, [r6, #0x1c] - subs r0, r1, r0 - moveq r5, #0 - beq _020720D4 - mov r1, r5 - bl _s32_div_f - str r0, [r6, #0x20] -_020720D4: - strh r5, [r6, #0x28] - ldr r0, [r6, #0x1c] - ldrsh r1, [r6, #0x54] - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - ldrsh r2, [r4, #4] - add r0, r1, r0, lsr #16 - ldr r1, _02072140 ; =0x04000208 - add r0, r2, r0 - strh r0, [r6, #0x16] - ldrh r3, [r1] - mov r0, #0 - strh r0, [r1] - ldr r1, [r6, #0xb4] - cmp r1, #0 - beq _0207212C -_02072114: - ldrh r0, [r1, #6] - orr r0, r0, #0x10 - strh r0, [r1, #6] - ldr r1, [r1, #0x154] - cmp r1, #0 - bne _02072114 -_0207212C: - ldr r2, _02072140 ; =0x04000208 - add r0, r7, #3 - ldrh r1, [r2] - strh r3, [r2] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02072140: .word 0x04000208 - arm_func_end DseTrackEvent_TuningFade - - arm_func_start DseTrackEvent_SetNoteRandomRegion -DseTrackEvent_SetNoteRandomRegion: ; 0x02072144 - ldrb r1, [r0] - ldrb ip, [r0, #1] - add r0, r0, #2 - mov r2, r1 - cmp r1, ip - movhi r2, ip - movhi ip, r1 - strb r2, [r3, #0xc] - strb ip, [r3, #0xd] - bx lr - arm_func_end DseTrackEvent_SetNoteRandomRegion - - arm_func_start DseTrackEvent_SetTuningJitterAmplitude -DseTrackEvent_SetTuningJitterAmplitude: ; 0x0207216C - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r0, r0, #2 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0xa] - bx lr - arm_func_end DseTrackEvent_SetTuningJitterAmplitude - - arm_func_start DseTrackEvent_SetKeyBend -DseTrackEvent_SetKeyBend: ; 0x02072184 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r2, [r4] - ldrb r1, [r4, #1] - mov r0, r3 - add r1, r1, r2, lsl #8 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 - bl DseChannel_SetKeyBend - add r0, r4, #2 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetKeyBend - - arm_func_start DseTrackEvent_SetUnknown2 -DseTrackEvent_SetUnknown2: ; 0x020721B0 - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r0, r0, #2 - add r1, r1, r2, lsl #8 - strh r1, [r3, #0x56] - bx lr - arm_func_end DseTrackEvent_SetUnknown2 - - arm_func_start DseTrackEvent_SetKeyBendRange -DseTrackEvent_SetKeyBendRange: ; 0x020721C8 - ldrb r1, [r0], #1 - strb r1, [r3, #0x59] - bx lr - arm_func_end DseTrackEvent_SetKeyBendRange - - arm_func_start DseTrackEvent_SetupKeyBendLfo -DseTrackEvent_SetupKeyBendLfo: ; 0x020721D4 - stmdb sp!, {r3, r4, r5, lr} - ldrb r5, [r0] - ldrb r4, [r0, #1] - ldrb lr, [r0, #2] - ldrb ip, [r0, #3] - ldrb r2, [r0, #4] - mov r1, #1 - add r4, r5, r4, lsl #8 - strb r1, [r3, #0x75] - strb r1, [r3, #0x76] - mov r1, r4, lsl #0x10 - strb r2, [r3, #0x77] - mov r1, r1, asr #0x10 - str r1, [r3, #0x78] - add r1, lr, ip, lsl #8 - strh r1, [r3, #0x7c] - mov r1, #0 - strh r1, [r3, #0x7e] - strh r1, [r3, #0x80] - strb r1, [r3, #0x82] - add r0, r0, #5 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseTrackEvent_SetupKeyBendLfo - - arm_func_start DseTrackEvent_SetupKeyBendLfoEnvelope -DseTrackEvent_SetupKeyBendLfoEnvelope: ; 0x0207222C - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x7e] - ldrb r2, [r0, #2] - ldrb r1, [r0, #3] - add r0, r0, #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x80] - bx lr - arm_func_end DseTrackEvent_SetupKeyBendLfoEnvelope - - arm_func_start DseTrackEvent_UseKeyBendLfo -DseTrackEvent_UseKeyBendLfo: ; 0x02072254 - ldrb r1, [r0] - add r0, r0, #1 - cmp r1, #2 - moveq r1, #1 - strb r1, [r3, #0x75] - cmp r1, #0 - moveq r1, #0 - movne r1, #1 - strb r1, [r3, #0x76] - bx lr - arm_func_end DseTrackEvent_UseKeyBendLfo - - arm_func_start DseTrackEvent_SetVolume -DseTrackEvent_SetVolume: ; 0x0207227C - stmdb sp!, {r3, r4, r5, lr} - ldrsb r4, [r0] - mov r5, #0 - ldr r2, _02072308 ; =0x82061029 - mov r1, r4, lsl #0x10 - str r1, [r3, #0x34] - str r1, [r3, #0x2c] - strh r5, [r3, #0x38] - ldr ip, [r3, #0xc4] - ldrb r1, [r3, #0x50] - ldrsb lr, [ip, #8] - ldr ip, _0207230C ; =0x04000208 - smulbb r1, r4, r1 - mul r4, lr, r1 - smull r1, lr, r2, r4 - add lr, r4, lr - mov r1, r4, lsr #0x1f - add lr, r1, lr, asr #13 - strh lr, [r3, #0x18] - ldrh r4, [ip] - strh r5, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _020722F4 -_020722DC: - ldrh r1, [r2, #6] - orr r1, r1, #0x20 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _020722DC -_020722F4: - ldr r2, _0207230C ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02072308: .word 0x82061029 -_0207230C: .word 0x04000208 - arm_func_end DseTrackEvent_SetVolume - - arm_func_start DseTrackEvent_VolumeDelta -DseTrackEvent_VolumeDelta: ; 0x02072310 - stmdb sp!, {r3, r4, r5, lr} - ldrsb r2, [r0] - ldr r1, [r3, #0x2c] - add r4, r2, r1, asr #16 - cmp r4, #0x7f - movgt r4, #0x7f - bgt _02072334 - cmp r4, #0 - movlt r4, #0 -_02072334: - mov r1, r4, lsl #0x10 - str r1, [r3, #0x34] - str r1, [r3, #0x2c] - mov r5, #0 - strh r5, [r3, #0x38] - ldrb r1, [r3, #0x50] - ldr ip, [r3, #0xc4] - ldr r2, _020723B8 ; =0x82061029 - mul r1, r4, r1 - ldrsb lr, [ip, #8] - ldr ip, _020723BC ; =0x04000208 - mul r4, lr, r1 - smull r1, lr, r2, r4 - add lr, r4, lr - mov r1, r4, lsr #0x1f - add lr, r1, lr, asr #13 - strh lr, [r3, #0x18] - ldrh r4, [ip] - strh r5, [ip] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _020723A4 -_0207238C: - ldrh r1, [r2, #6] - orr r1, r1, #0x20 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _0207238C -_020723A4: - ldr r2, _020723BC ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020723B8: .word 0x82061029 -_020723BC: .word 0x04000208 - arm_func_end DseTrackEvent_VolumeDelta - - arm_func_start DseTrackEvent_VolumeFade -DseTrackEvent_VolumeFade: ; 0x020723C0 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrsb r1, [r5, #2] - ldrb r2, [r5] - ldrb r0, [r5, #1] - mov r4, r3 - mov r1, r1, lsl #0x10 - add r0, r2, r0, lsl #8 - mov r0, r0, lsl #0x10 - str r1, [r4, #0x34] - movs r6, r0, lsr #0x10 - streq r1, [r4, #0x2c] - beq _02072410 - ldr r0, [r4, #0x2c] - subs r0, r1, r0 - moveq r6, #0 - beq _02072410 - mov r1, r6 - bl _s32_div_f - str r0, [r4, #0x30] -_02072410: - strh r6, [r4, #0x38] - add r0, r5, #3 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseTrackEvent_VolumeFade - - arm_func_start DseTrackEvent_SetExpression -DseTrackEvent_SetExpression: ; 0x0207241C - stmdb sp!, {r3, r4, r5, lr} - ldrb r4, [r0] - ldr r2, _020724A0 ; =0x82061029 - ldr lr, _020724A4 ; =0x04000208 - strb r4, [r3, #0x50] - ldr r1, [r3, #0x2c] - ldr ip, [r3, #0xc4] - mov r1, r1, asr #0x10 - mul r4, r1, r4 - ldrsb r1, [ip, #8] - mov ip, #0 - mul r4, r1, r4 - smull r1, r5, r2, r4 - add r5, r4, r5 - mov r1, r4, lsr #0x1f - add r5, r1, r5, asr #13 - strh r5, [r3, #0x18] - ldrh r4, [lr] - strh ip, [lr] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _0207248C -_02072474: - ldrh r1, [r2, #6] - orr r1, r1, #0x20 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02072474 -_0207248C: - ldr r2, _020724A4 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh r4, [r2] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020724A0: .word 0x82061029 -_020724A4: .word 0x04000208 - arm_func_end DseTrackEvent_SetExpression - - arm_func_start DseTrackEvent_SetupVolumeLfo -DseTrackEvent_SetupVolumeLfo: ; 0x020724A8 - stmdb sp!, {r3, r4, r5, lr} - ldrb r5, [r0] - ldrb r1, [r0, #1] - ldrb r4, [r0, #2] - ldrb lr, [r0, #3] - ldrb ip, [r0, #4] - mov r2, #1 - add r1, r5, r1, lsl #8 - mov r1, r1, lsl #0x10 - strb r2, [r3, #0x85] - mov r2, #2 - strb r2, [r3, #0x86] - strb ip, [r3, #0x87] - mov r1, r1, asr #0x10 - str r1, [r3, #0x88] - add r1, r4, lr, lsl #8 - strh r1, [r3, #0x8c] - mov r1, #0 - strh r1, [r3, #0x8e] - strh r1, [r3, #0x90] - strb r1, [r3, #0x92] - add r0, r0, #5 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseTrackEvent_SetupVolumeLfo - - arm_func_start DseTrackEvent_SetupVolumeLfoEnvelope -DseTrackEvent_SetupVolumeLfoEnvelope: ; 0x02072504 - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x8e] - ldrb r2, [r0, #2] - ldrb r1, [r0, #3] - add r0, r0, #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x90] - bx lr - arm_func_end DseTrackEvent_SetupVolumeLfoEnvelope - - arm_func_start DseTrackEvent_UseVolumeLfo -DseTrackEvent_UseVolumeLfo: ; 0x0207252C - ldrb r1, [r0] - add r0, r0, #1 - cmp r1, #2 - moveq r1, #1 - strb r1, [r3, #0x85] - cmp r1, #0 - moveq r1, #0 - movne r1, #2 - strb r1, [r3, #0x86] - bx lr - arm_func_end DseTrackEvent_UseVolumeLfo - - arm_func_start DseTrackEvent_SetPan -DseTrackEvent_SetPan: ; 0x02072554 - stmdb sp!, {r3, lr} - ldrb lr, [r0] - mov ip, #0 - cmp lr, #0x7f - movgt lr, #0x7f - mov r1, lr, lsl #0x10 - str r1, [r3, #0x44] - str r1, [r3, #0x3c] - strh ip, [r3, #0x48] - ldr r2, [r3, #0xc4] - ldr r1, _020725D0 ; =0x04000208 - ldrsb r2, [r2, #7] - sub r2, r2, #0x40 - add r2, lr, r2 - strh r2, [r3, #0x1a] - ldrh lr, [r1] - strh ip, [r1] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _020725BC -_020725A4: - ldrh r1, [r2, #6] - orr r1, r1, #0x40 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _020725A4 -_020725BC: - ldr r2, _020725D0 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh lr, [r2] - ldmia sp!, {r3, pc} - .align 2, 0 -_020725D0: .word 0x04000208 - arm_func_end DseTrackEvent_SetPan - - arm_func_start DseTrackEvent_PanDelta -DseTrackEvent_PanDelta: ; 0x020725D4 - stmdb sp!, {r3, lr} - ldrsb r2, [r0] - ldr r1, [r3, #0x3c] - add lr, r2, r1, asr #16 - cmp lr, #0x7f - movgt lr, #0x7f - bgt _020725F8 - cmp lr, #0 - movlt lr, #0 -_020725F8: - mov r1, lr, lsl #0x10 - str r1, [r3, #0x44] - str r1, [r3, #0x3c] - mov ip, #0 - strh ip, [r3, #0x48] - ldr r2, [r3, #0xc4] - ldr r1, _02072664 ; =0x04000208 - ldrsb r2, [r2, #7] - sub r2, r2, #0x40 - add r2, lr, r2 - strh r2, [r3, #0x1a] - ldrh lr, [r1] - strh ip, [r1] - ldr r2, [r3, #0xb4] - cmp r2, #0 - beq _02072650 -_02072638: - ldrh r1, [r2, #6] - orr r1, r1, #0x40 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02072638 -_02072650: - ldr r2, _02072664 ; =0x04000208 - add r0, r0, #1 - ldrh r1, [r2] - strh lr, [r2] - ldmia sp!, {r3, pc} - .align 2, 0 -_02072664: .word 0x04000208 - arm_func_end DseTrackEvent_PanDelta - - arm_func_start DseTrackEvent_PanFade -DseTrackEvent_PanFade: ; 0x02072668 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrsb r1, [r5, #2] - ldrb r2, [r5] - ldrb r0, [r5, #1] - mov r4, r3 - mov r1, r1, lsl #0x10 - add r0, r2, r0, lsl #8 - mov r0, r0, lsl #0x10 - str r1, [r4, #0x44] - movs r6, r0, lsr #0x10 - streq r1, [r4, #0x3c] - beq _020726B8 - ldr r0, [r4, #0x3c] - subs r0, r1, r0 - moveq r6, #0 - beq _020726B8 - mov r1, r6 - bl _s32_div_f - str r0, [r4, #0x40] -_020726B8: - strh r6, [r4, #0x48] - add r0, r5, #3 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseTrackEvent_PanFade - - arm_func_start DseTrackEvent_SetupPanLfo -DseTrackEvent_SetupPanLfo: ; 0x020726C4 - stmdb sp!, {r3, r4, r5, lr} - ldrb r5, [r0] - ldrb r1, [r0, #1] - ldrb r4, [r0, #2] - ldrb lr, [r0, #3] - ldrb ip, [r0, #4] - mov r2, #1 - add r1, r5, r1, lsl #8 - mov r1, r1, lsl #0x10 - strb r2, [r3, #0x95] - mov r2, #3 - strb r2, [r3, #0x96] - strb ip, [r3, #0x97] - mov r1, r1, asr #0x10 - str r1, [r3, #0x98] - add r1, r4, lr, lsl #8 - strh r1, [r3, #0x9c] - mov r1, #0 - strh r1, [r3, #0x9e] - strh r1, [r3, #0xa0] - strb r1, [r3, #0xa2] - add r0, r0, #5 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseTrackEvent_SetupPanLfo - - arm_func_start DseTrackEvent_SetupPanLfoEnvelope -DseTrackEvent_SetupPanLfoEnvelope: ; 0x02072720 - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r1, r2, r1, lsl #8 - strh r1, [r3, #0x9e] - ldrb r2, [r0, #2] - ldrb r1, [r0, #3] - add r0, r0, #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0xa0] - bx lr - arm_func_end DseTrackEvent_SetupPanLfoEnvelope - - arm_func_start DseTrackEvent_UsePanLfo -DseTrackEvent_UsePanLfo: ; 0x02072748 - ldrb r1, [r0] - add r0, r0, #1 - cmp r1, #2 - moveq r1, #1 - strb r1, [r3, #0x95] - cmp r1, #0 - moveq r1, #0 - movne r1, #3 - strb r1, [r3, #0x96] - bx lr - arm_func_end DseTrackEvent_UsePanLfo - - arm_func_start DseTrackEvent_SetupLfo -DseTrackEvent_SetupLfo: ; 0x02072770 - stmdb sp!, {r4, lr} - ldrb r2, [r0] - ldrb r1, [r0, #1] - ldrb ip, [r3, #0x61] - add r3, r3, #0x74 - add r1, r2, r1, lsl #8 - mov r1, r1, lsl #0x10 - ldrb r4, [r0, #2] - ldrb lr, [r0, #3] - ldrb r2, [r0, #4] - add r3, r3, ip, lsl #4 - mov r1, r1, asr #0x10 - strb r2, [r3, #3] - str r1, [r3, #4] - add r1, r4, lr, lsl #8 - strh r1, [r3, #8] - mov r1, #0 - strh r1, [r3, #0xa] - strh r1, [r3, #0xc] - strb r1, [r3, #0xe] - add r0, r0, #5 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetupLfo - - arm_func_start DseTrackEvent_SetupLfoEnvelope -DseTrackEvent_SetupLfoEnvelope: ; 0x020727C8 - ldrb ip, [r3, #0x61] - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r3, r3, #0x74 - add r3, r3, ip, lsl #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0xa] - ldrb r2, [r0, #2] - ldrb r1, [r0, #3] - add r0, r0, #4 - add r1, r2, r1, lsl #8 - strh r1, [r3, #0xc] - bx lr - arm_func_end DseTrackEvent_SetupLfoEnvelope - - arm_func_start DseTrackEvent_SetLfoParameter -DseTrackEvent_SetLfoParameter: ; 0x020727FC - ldrb r1, [r3, #0x61] - ldrb ip, [r0] - add r2, r3, #0x74 - add r1, r2, r1, lsl #4 - ldrb r2, [r0, #1] - cmp ip, #0xa - addls pc, pc, ip, lsl #2 - b _02072930 -_0207281C: ; jump table - b _02072930 ; case 0 - b _02072848 ; case 1 - b _02072850 ; case 2 - b _02072858 ; case 3 - b _02072860 ; case 4 - b _02072868 ; case 5 - b _020728E0 ; case 6 - b _020728EC ; case 7 - b _020728FC ; case 8 - b _02072910 ; case 9 - b _02072924 ; case 10 -_02072848: - strb r2, [r3, #0x61] - b _02072930 -_02072850: - strb r2, [r1, #1] - b _02072930 -_02072858: - strb r2, [r1, #2] - b _02072930 -_02072860: - strb r2, [r1, #3] - b _02072930 -_02072868: - ldrb r3, [r1, #2] - cmp r3, #4 - addls pc, pc, r3, lsl #2 - b _020728CC -_02072878: ; jump table - b _020728CC ; case 0 - b _0207288C ; case 1 - b _0207289C ; case 2 - b _020728AC ; case 3 - b _020728BC ; case 4 -_0207288C: - mov r3, #0xa - mul r3, r2, r3 - mov r2, r3 - b _020728D8 -_0207289C: - mvn r3, #0x13 - mul r3, r2, r3 - mov r2, r3 - b _020728D8 -_020728AC: - mov r3, #0x14 - mul r3, r2, r3 - mov r2, r3 - b _020728D8 -_020728BC: - mov r3, #0xa - mul r3, r2, r3 - mov r2, r3 - b _020728D8 -_020728CC: - mov r3, #0x14 - mul r3, r2, r3 - mov r2, r3 -_020728D8: - str r2, [r1, #4] - b _02072930 -_020728E0: - add r2, r2, r2, lsl #2 - strh r2, [r1, #8] - b _02072930 -_020728EC: - mov r3, #0x14 - mul r3, r2, r3 - strh r3, [r1, #0xa] - b _02072930 -_020728FC: - ldrh r3, [r1, #0xa] - and r3, r3, #0xff00 - orr r2, r3, r2 - strh r2, [r1, #0xa] - b _02072930 -_02072910: - ldrh r3, [r1, #0xa] - and r3, r3, #0xff - orr r2, r3, r2, lsl #8 - strh r2, [r1, #0xa] - b _02072930 -_02072924: - mov r3, #0x14 - mul r3, r2, r3 - strh r3, [r1, #0xc] -_02072930: - add r0, r0, #2 - bx lr - arm_func_end DseTrackEvent_SetLfoParameter - - arm_func_start DseTrackEvent_UseLfo -DseTrackEvent_UseLfo: ; 0x02072938 - stmdb sp!, {r3, lr} - ldrb ip, [r0, #1] - ldrb r2, [r0] - ldrb lr, [r0, #2] - add r1, r3, #0x74 - cmp ip, #2 - strb r2, [r3, #0x61] - add r1, r1, r2, lsl #4 - moveq ip, #1 - strb ip, [r1, #1] - strb lr, [r1, #2] - add r0, r0, #3 - ldmia sp!, {r3, pc} - arm_func_end DseTrackEvent_UseLfo - - arm_func_start DseTrackEvent_Signal -DseTrackEvent_Signal: ; 0x0207296C - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r2, [r4] - mov ip, r1 - mov r1, #8 - strb r2, [ip, #0x16] - ldr r0, [ip, #0x28] - ldr r3, [ip, #0xa0] - ldr ip, [ip, #0x9c] - blx ip - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_Signal - - arm_func_start DseTrackEvent_Dummy2Bytes2 -DseTrackEvent_Dummy2Bytes2: ; 0x0207299C - add r0, r0, #2 - bx lr - arm_func_end DseTrackEvent_Dummy2Bytes2 - - arm_func_start sub_020729A4 -sub_020729A4: ; 0x020729A4 - ldr r0, _020729B4 ; =_022B9584 - mov r1, #0 - str r1, [r0] - bx lr - .align 2, 0 -_020729B4: .word _022B9584 - arm_func_end sub_020729A4 - - arm_func_start sub_020729B8 -sub_020729B8: ; 0x020729B8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr sb, _02072BB4 ; =_022B9584 - ldr r8, [sb] - ldrb r6, [r8, #0x86] - cmp r6, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrb r5, [r8, #0x85] - mov r1, #0 - cmp r6, #0 - str r1, [sp] - beq _02072B98 - mov fp, #3 - mov r1, #2 - mov r2, r1 - mov r3, fp - mov ip, r1 - mov lr, fp - mov r4, fp -_02072A04: - ldrb sl, [r8, #0x88] - add r7, r8, r5 - add r5, r5, #1 - sub r6, r6, #1 - and r5, r5, #0xff - cmp r5, #0x80 - moveq r5, #0 - ldrb r7, [r7, #4] - and r6, r6, #0xff - cmp sl, #0 - bne _02072B28 - tst r7, #0x80 - bne _02072A4C - add sl, sl, #1 - strb sl, [r8, #0x88] - ldr r8, [sb] - strb r7, [r8, #0x8c] - b _02072B30 -_02072A4C: - and sl, r7, #0xf0 - strb sl, [r8, #0x8a] - and r8, r7, #0xf - ldr r7, [sb] - strb r8, [r7, #0x8b] - ldr r7, [sb] - ldrb r8, [r7, #0x8a] - cmp r8, #0xc0 - bgt _02072AA8 - bge _02072AF8 - cmp r8, #0x90 - bgt _02072A8C - bge _02072AE0 - cmp r8, #0x80 - beq _02072AD8 - b _02072B1C -_02072A8C: - cmp r8, #0xa0 - bgt _02072A9C - beq _02072AE8 - b _02072B1C -_02072A9C: - cmp r8, #0xb0 - beq _02072AF0 - b _02072B1C -_02072AA8: - cmp r8, #0xe0 - bgt _02072AC0 - bge _02072B08 - cmp r8, #0xd0 - beq _02072B00 - b _02072B1C -_02072AC0: - cmp r8, #0xf0 - bgt _02072AD0 - beq _02072B10 - b _02072B1C -_02072AD0: - cmp r8, #0xff - b _02072B1C -_02072AD8: - strb r4, [r7, #0x87] - b _02072B30 -_02072AE0: - strb lr, [r7, #0x87] - b _02072B30 -_02072AE8: - strb ip, [r7, #0x87] - b _02072B30 -_02072AF0: - strb r3, [r7, #0x87] - b _02072B30 -_02072AF8: - strb r2, [r7, #0x87] - b _02072B30 -_02072B00: - strb r1, [r7, #0x87] - b _02072B30 -_02072B08: - strb fp, [r7, #0x87] - b _02072B30 -_02072B10: - mov r8, #3 - strb r8, [r7, #0x87] - b _02072B30 -_02072B1C: - mov r8, #0 - strb r8, [r7, #0x87] - b _02072B30 -_02072B28: - add r8, r8, sl - strb r7, [r8, #0x8b] -_02072B30: - ldr r7, [sb] - ldrb r8, [r7, #0x88] - add r8, r8, #1 - strb r8, [r7, #0x88] - ldr r8, [sb] - ldrb sl, [r8, #0x88] - ldrb r7, [r8, #0x87] - cmp sl, r7 - bne _02072B90 - mov r2, #0 - ldr r1, _02072BB4 ; =_022B9584 - strb r2, [r8, #0x88] - ldr r3, [r1] - mov r1, #1 - str r1, [sp] - ldrb r2, [r3, #0x8a] - ldrb r1, [r3, #0x8b] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #0x8c] - ldrb r1, [r3, #0x8d] - strb r2, [r0, #2] - strb r1, [r0, #3] - b _02072B98 -_02072B90: - cmp r6, #0 - bne _02072A04 -_02072B98: - ldr r1, _02072BB4 ; =_022B9584 - ldr r0, [sp] - ldr r2, [r1] - strb r6, [r2, #0x86] - ldr r1, [r1] - strb r5, [r1, #0x85] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02072BB4: .word _022B9584 - arm_func_end sub_020729B8 - - arm_func_start sub_02072BB8 -sub_02072BB8: ; 0x02072BB8 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc - ldr r0, _02072D94 ; =_022B9584 - ldr r0, [r0] - ldr r4, [r0] - cmp r4, #0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - add r0, sp, #8 - bl sub_020729B8 - cmp r0, #0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - add sb, r4, #0x10 - mov r6, #0 - ldr r4, _02072D98 ; =_020B0D50 - add r7, sp, #0 - mov r5, #1 - mov r8, r6 - mov fp, #0xc8 -_02072C08: - ldrb r1, [sp, #9] - ldrb r0, [sp, #8] - mla sl, r1, fp, sb - cmp r0, #0xc0 - bgt _02072C4C - bge _02072D4C - cmp r0, #0x90 - bgt _02072C38 - bge _02072CC0 - cmp r0, #0x80 - beq _02072C8C - b _02072D7C -_02072C38: - cmp r0, #0xa0 - ble _02072D7C - cmp r0, #0xb0 - beq _02072D2C - b _02072D7C -_02072C4C: - cmp r0, #0xf0 - bgt _02072C6C - bge _02072D7C - cmp r0, #0xd0 - ble _02072D7C - cmp r0, #0xe0 - beq _02072D5C - b _02072D7C -_02072C6C: - cmp r0, #0xf7 - ble _02072D7C - cmp r0, #0xff - bgt _02072D7C - cmp r0, #0xfe - blt _02072D7C - cmpne r0, #0xff - b _02072D7C -_02072C8C: - ldrb r1, [sp, #0xa] - ldrb r0, [sp, #0xb] - str r8, [sp, #4] - strb r1, [sp, #2] - strb r0, [sp, #3] - strb r8, [sp] - ldrb r0, [sl, #4] - tst r0, #1 - bne _02072D7C - mov r0, sl - mov r1, r7 - bl DseChannel_ReleaseNoteInternal - b _02072D7C -_02072CC0: - ldrb r0, [sp, #0xb] - ldrb r1, [sp, #0xa] - str r6, [sp, #4] - strb r0, [sp, #3] - strb r1, [sp, #2] - tst r0, #0xff - beq _02072D0C - mov r0, sl - mov r1, r7 - strb r5, [sp] - bl DseChannel_ReleaseNote - mov r0, sl - mov r1, r7 - bl DseChannel_AllocateNote - movs r1, r0 - beq _02072D7C - mov r0, sl - bl DseVoice_PlayNote - b _02072D7C -_02072D0C: - strb r6, [sp] - ldrb r0, [sl, #4] - tst r0, #1 - bne _02072D7C - mov r0, sl - mov r1, r7 - bl DseChannel_ReleaseNoteInternal - b _02072D7C -_02072D2C: - ldrb r0, [sp, #0xa] - ldr r2, [r4, r0, lsl #2] - cmp r2, #0 - beq _02072D7C - ldrb r1, [sp, #0xb] - mov r0, sl - blx r2 - b _02072D7C -_02072D4C: - ldrb r1, [sp, #0xa] - mov r0, sl - bl DseChannel_SetInstrument - b _02072D7C -_02072D5C: - ldrb r2, [sp, #0xa] - ldrb r1, [sp, #0xb] - mov r0, sl - add r1, r2, r1, lsl #7 - sub r1, r1, #0x2000 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 - bl DseChannel_SetKeyBend -_02072D7C: - add r0, sp, #8 - bl sub_020729B8 - cmp r0, #0 - bne _02072C08 - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02072D94: .word _022B9584 -_02072D98: .word _020B0D50 - arm_func_end sub_02072BB8 - - arm_func_start sub_02072D9C -sub_02072D9C: ; 0x02072D9C - ldrh r2, [r0, #0xe] - ldr ip, _02072DB8 ; =DseChannel_SetBank - and r2, r2, #0xff - add r1, r2, r1, lsl #8 - strh r1, [r0, #0xe] - ldrh r1, [r0, #0xe] - bx ip - .align 2, 0 -_02072DB8: .word DseChannel_SetBank - arm_func_end sub_02072D9C - - arm_func_start sub_02072DBC -sub_02072DBC: ; 0x02072DBC - ldrh r2, [r0, #0xe] - ldr ip, _02072DD8 ; =DseChannel_SetBank - bic r2, r2, #0xff - add r1, r2, r1 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bx ip - .align 2, 0 -_02072DD8: .word DseChannel_SetBank - arm_func_end sub_02072DBC - - arm_func_start sub_02072DDC -sub_02072DDC: ; 0x02072DDC - mov r1, r1, lsl #0x18 - mov r1, r1, asr #0x18 - ldr ip, _02072DF0 ; =DseChannel_SetLfoConstEnvelopeLevel - strb r1, [r0, #0x51] - bx ip - .align 2, 0 -_02072DF0: .word DseChannel_SetLfoConstEnvelopeLevel - arm_func_end sub_02072DDC - - arm_func_start sub_02072DF4 -sub_02072DF4: ; 0x02072DF4 - mov r2, #0xa - mul r2, r1, r2 - strh r2, [r0, #0x56] - bx lr - arm_func_end sub_02072DF4 - - arm_func_start sub_02072E04 -sub_02072E04: ; 0x02072E04 - stmdb sp!, {r4, lr} - mov r2, r1, lsl #0x10 - str r2, [r0, #0x34] - str r2, [r0, #0x2c] - mov r4, #0 - strh r4, [r0, #0x38] - ldrb r3, [r0, #0x50] - ldr lr, [r0, #0xc4] - ldr r2, _02072E88 ; =0x82061029 - mul ip, r1, r3 - ldrsb r1, [lr, #8] - ldr r3, _02072E8C ; =0x04000208 - mul ip, r1, ip - smull r1, lr, r2, ip - add lr, ip, lr - mov r1, ip, lsr #0x1f - add lr, r1, lr, asr #13 - strh lr, [r0, #0x18] - ldrh r2, [r3] - strh r4, [r3] - ldr r1, [r0, #0xb4] - cmp r1, #0 - beq _02072E78 -_02072E60: - ldrh r0, [r1, #6] - orr r0, r0, #0x20 - strh r0, [r1, #6] - ldr r1, [r1, #0x154] - cmp r1, #0 - bne _02072E60 -_02072E78: - ldr r1, _02072E8C ; =0x04000208 - ldrh r0, [r1] - strh r2, [r1] - ldmia sp!, {r4, pc} - .align 2, 0 -_02072E88: .word 0x82061029 -_02072E8C: .word 0x04000208 - arm_func_end sub_02072E04 - - arm_func_start sub_02072E90 -sub_02072E90: ; 0x02072E90 - mov r1, r1, lsl #0x10 - str r1, [r0, #0x44] - str r1, [r0, #0x3c] - mov r2, #0 - ldr r1, _02072EE4 ; =0x04000208 - strh r2, [r0, #0x48] - ldrh r3, [r1] - strh r2, [r1] - ldr r1, [r0, #0xb4] - cmp r1, #0 - beq _02072ED4 -_02072EBC: - ldrh r0, [r1, #6] - orr r0, r0, #0x40 - strh r0, [r1, #6] - ldr r1, [r1, #0x154] - cmp r1, #0 - bne _02072EBC -_02072ED4: - ldr r1, _02072EE4 ; =0x04000208 - ldrh r0, [r1] - strh r3, [r1] - bx lr - .align 2, 0 -_02072EE4: .word 0x04000208 - arm_func_end sub_02072E90 - - arm_func_start sub_02072EE8 -sub_02072EE8: ; 0x02072EE8 - ldr r2, _02072F30 ; =0x04000208 - strb r1, [r0, #0x50] - ldrh r3, [r2] - mov r1, #0 - strh r1, [r2] - ldr r1, [r0, #0xb4] - cmp r1, #0 - beq _02072F20 -_02072F08: - ldrh r0, [r1, #6] - orr r0, r0, #0x20 - strh r0, [r1, #6] - ldr r1, [r1, #0x154] - cmp r1, #0 - bne _02072F08 -_02072F20: - ldr r1, _02072F30 ; =0x04000208 - ldrh r0, [r1] - strh r3, [r1] - bx lr - .align 2, 0 -_02072F30: .word 0x04000208 - arm_func_end sub_02072EE8 - - arm_func_start sub_02072F34 -sub_02072F34: ; 0x02072F34 - strb r1, [r0, #0x58] - bx lr - arm_func_end sub_02072F34 - - arm_func_start sub_02072F3C -sub_02072F3C: ; 0x02072F3C - stmdb sp!, {r3, lr} - cmp r1, #0x40 - ldrb r1, [r0, #4] - orrhs r1, r1, #1 - strhsb r1, [r0, #4] - ldmhsia sp!, {r3, pc} - bic r1, r1, #1 - strb r1, [r0, #4] - bl DseVoice_ReleaseHeld - ldmia sp!, {r3, pc} - arm_func_end sub_02072F3C - - arm_func_start sub_02072F64 -sub_02072F64: ; 0x02072F64 - bx lr - arm_func_end sub_02072F64 - - arm_func_start sub_02072F68 -sub_02072F68: ; 0x02072F68 - bx lr - arm_func_end sub_02072F68 - - arm_func_start sub_02072F6C -sub_02072F6C: ; 0x02072F6C - bx lr - arm_func_end sub_02072F6C - - arm_func_start sub_02072F70 -sub_02072F70: ; 0x02072F70 - bx lr - arm_func_end sub_02072F70 - - arm_func_start sub_02072F74 -sub_02072F74: ; 0x02072F74 - strb r1, [r0, #0x5c] - mov r1, #1 - strb r1, [r0, #0x60] - bx lr - arm_func_end sub_02072F74 - - arm_func_start sub_02072F84 -sub_02072F84: ; 0x02072F84 - strb r1, [r0, #0x5a] - mov r1, #0 - strb r1, [r0, #0x60] - bx lr - arm_func_end sub_02072F84 - - arm_func_start sub_02072F94 -sub_02072F94: ; 0x02072F94 - strb r1, [r0, #0x5b] - mov r1, #0 - strb r1, [r0, #0x60] - bx lr - arm_func_end sub_02072F94 - - arm_func_start sub_02072FA4 -sub_02072FA4: ; 0x02072FA4 - bx lr - arm_func_end sub_02072FA4 - - arm_func_start sub_02072FA8 -sub_02072FA8: ; 0x02072FA8 - bx lr - arm_func_end sub_02072FA8 - - arm_func_start sub_02072FAC -sub_02072FAC: ; 0x02072FAC - stmdb sp!, {r3, lr} - ldr r0, _02072FD4 ; =_022B9584 - ldr r0, [r0] - ldr r0, [r0] - bl DseSynth_StopChannels - ldr r0, _02072FD4 ; =_022B9584 - ldr r0, [r0] - ldr r0, [r0] - bl DseSynth_ClearHeldNotes - ldmia sp!, {r3, pc} - .align 2, 0 -_02072FD4: .word _022B9584 - arm_func_end sub_02072FAC - - arm_func_start sub_02072FD8 -sub_02072FD8: ; 0x02072FD8 - ldr r0, _02072FF4 ; =_022B9584 - mov r1, #0 - ldr r0, [r0] - ldr ip, _02072FF8 ; =DseSynth_SetBankAndSequence - mov r2, r1 - ldr r0, [r0] - bx ip - .align 2, 0 -_02072FF4: .word _022B9584 -_02072FF8: .word DseSynth_SetBankAndSequence - arm_func_end sub_02072FD8 - - arm_func_start sub_02072FFC -sub_02072FFC: ; 0x02072FFC - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - bl DseChannel_DeallocateVoices - ldr r1, _02073074 ; =0x04000208 - mov r0, #0 - ldrh r5, [r1] - strh r0, [r1] - ldr lr, [r4, #0xb8] - cmp lr, #0 - ldreqh r0, [r1] - streqh r5, [r1] - ldmeqia sp!, {r3, r4, r5, pc} - mov ip, lr - mvn r1, #0 - mov r3, r0 -_02073038: - str r1, [lr, #4] - strb r3, [ip, #1] - ldr r0, [ip, #8] - cmp r0, #0 - movne ip, r0 - bne _02073038 - ldr r0, _02073078 ; =DRIVER_WORK - ldr r1, _02073074 ; =0x04000208 - ldr r2, [r0, #0x650] - str r2, [ip, #8] - str lr, [r0, #0x650] - str r3, [r4, #0xb8] - ldrh r0, [r1] - strh r5, [r1] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02073074: .word 0x04000208 -_02073078: .word DRIVER_WORK - arm_func_end sub_02072FFC - - arm_func_start sub_0207307C -sub_0207307C: ; 0x0207307C - mov r1, #0 - strb r1, [r0, #7] - bx lr - arm_func_end sub_0207307C - - arm_func_start sub_02073088 -sub_02073088: ; 0x02073088 - mov r1, #1 - strb r1, [r0, #7] - bx lr - arm_func_end sub_02073088 - - arm_func_start sub_02073094 -sub_02073094: ; 0x02073094 - ldr ip, _020730A4 ; =SoundEnvelopeParameters_CheckValidity - strb r1, [r0, #0x72] - add r0, r0, #0x64 - bx ip - .align 2, 0 -_020730A4: .word SoundEnvelopeParameters_CheckValidity - arm_func_end sub_02073094 - - arm_func_start sub_020730A8 -sub_020730A8: ; 0x020730A8 - ldr ip, _020730B8 ; =SoundEnvelopeParameters_CheckValidity - strb r1, [r0, #0x6d] - add r0, r0, #0x64 - bx ip - .align 2, 0 -_020730B8: .word SoundEnvelopeParameters_CheckValidity - arm_func_end sub_020730A8 - - arm_func_start sub_020730BC -sub_020730BC: ; 0x020730BC - ldr ip, _020730CC ; =SoundEnvelopeParameters_CheckValidity - strb r1, [r0, #0x6e] - add r0, r0, #0x64 - bx ip - .align 2, 0 -_020730CC: .word SoundEnvelopeParameters_CheckValidity - arm_func_end sub_020730BC - - arm_func_start sub_020730D0 -sub_020730D0: ; 0x020730D0 - ldr ip, _020730E0 ; =SoundEnvelopeParameters_CheckValidity - strb r1, [r0, #0x71] - add r0, r0, #0x64 - bx ip - .align 2, 0 -_020730E0: .word SoundEnvelopeParameters_CheckValidity - arm_func_end sub_020730D0 - - arm_func_start sub_020730E4 -sub_020730E4: ; 0x020730E4 - ldrb r2, [r0, #0x61] - add r1, r1, r1, lsl #2 - add r0, r0, r2, lsl #4 - strh r1, [r0, #0x7c] - bx lr - arm_func_end sub_020730E4 - - arm_func_start sub_020730F8 -sub_020730F8: ; 0x020730F8 - and r3, r1, #2 - add r2, r0, #0x74 - strb r3, [r0, #0x61] - add r2, r2, r3, lsl #4 - mov r0, r1, asr #2 - strb r0, [r2, #1] - add r0, r3, #1 - strb r0, [r2, #2] - bx lr - arm_func_end sub_020730F8 - - arm_func_start sub_0207311C -sub_0207311C: ; 0x0207311C - ldrb r2, [r0, #0x61] - add r0, r0, r2, lsl #4 - strb r1, [r0, #0x77] - bx lr - arm_func_end sub_0207311C - - arm_func_start sub_0207312C -sub_0207312C: ; 0x0207312C - ldrb r2, [r0, #0x61] - add r0, r0, #0x74 - add r0, r0, r2, lsl #4 - ldrb r2, [r0, #2] - cmp r2, #4 - addls pc, pc, r2, lsl #2 - b _020731AC -_02073148: ; jump table - b _020731AC ; case 0 - b _0207315C ; case 1 - b _02073170 ; case 2 - b _02073184 ; case 3 - b _02073198 ; case 4 -_0207315C: - mov r2, #0xa - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 - b _020731BC -_02073170: - mvn r2, #0x13 - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 - b _020731BC -_02073184: - mov r2, #0x14 - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 - b _020731BC -_02073198: - mov r2, #0xa - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 - b _020731BC -_020731AC: - mov r2, #0x14 - mul r2, r1, r2 - mov r1, r2, lsl #0x10 - mov r1, r1, asr #0x10 -_020731BC: - str r1, [r0, #4] - bx lr - arm_func_end sub_0207312C - - arm_func_start sub_020731C4 -sub_020731C4: ; 0x020731C4 - mov r2, #0x14 - mul r2, r1, r2 - ldrb r1, [r0, #0x61] - add r0, r0, r1, lsl #4 - strh r2, [r0, #0x7e] - bx lr - arm_func_end sub_020731C4 - - arm_func_start sub_020731DC -sub_020731DC: ; 0x020731DC - mov r2, #0x14 - mul r2, r1, r2 - ldrb r1, [r0, #0x61] - add r0, r0, r1, lsl #4 - strh r2, [r0, #0x80] - bx lr - arm_func_end sub_020731DC - - arm_func_start sub_020731F4 -sub_020731F4: ; 0x020731F4 - strb r1, [r0, #0x59] - bx lr - arm_func_end sub_020731F4 - - arm_func_start sub_020731FC -sub_020731FC: ; 0x020731FC - bx lr - arm_func_end sub_020731FC - - arm_func_start sub_02073200 -sub_02073200: ; 0x02073200 - bx lr - arm_func_end sub_02073200 - - arm_func_start sub_02073204 -sub_02073204: ; 0x02073204 - bx lr - arm_func_end sub_02073204 - - arm_func_start DseSynth_Reset -DseSynth_Reset: ; 0x02073208 - stmdb sp!, {r4, lr} - ldr r1, _02073274 ; =DRIVER_WORK - mov r2, #1 - ldrsb r3, [r1, #0x41] - mov r4, #0 - mov r1, #0x7f - strb r3, [r0, #2] - strb r2, [r0, #3] - strh r4, [r0, #4] - strb r1, [r0, #6] - mov r1, #0x40 - strb r1, [r0, #7] - ldrb ip, [r0, #2] - ldrsb r1, [r0, #6] - ldr r2, _02073278 ; =0x81020409 - ldr r3, _0207327C ; =_022B7A30 - smulbb ip, ip, r1 - smull r1, lr, r2, ip - add lr, ip, lr - mov r1, ip, lsr #0x1f - add lr, r1, lr, asr #6 - strb lr, [r0, #8] - strb r4, [r0, #9] - strb r4, [r0, #0xa] - ldrh r1, [r3, #0x2e] - strb r1, [r0, #0xb] - ldmia sp!, {r4, pc} - .align 2, 0 -_02073274: .word DRIVER_WORK -_02073278: .word 0x81020409 -_0207327C: .word _022B7A30 - arm_func_end DseSynth_Reset - - arm_func_start DseSynth_AllocateNew -DseSynth_AllocateNew: ; 0x02073280 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r0, #0xc8 - mul r0, r5, r0 - mov r2, r1 - add r0, r0, #0x10 - mov r1, #0x10 - bl DseMem_Allocate - movs r4, r0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r1, #0 - strb r1, [r4] - strb r5, [r4, #1] - str r1, [r4, #0xc] - bl DseSynth_Reset - cmp r5, #0 - add r1, r4, #0x10 - mov r2, #0 - ble _02073300 - mov r0, r2 -_020732D4: - str r0, [r1] - strb r2, [r1, #5] - str r0, [r1, #0xb4] - str r0, [r1, #0xb8] - str r0, [r1, #0xbc] - str r0, [r1, #0xc0] - add r2, r2, #1 - str r4, [r1, #0xc4] - cmp r2, r5 - add r1, r1, #0xc8 - blt _020732D4 -_02073300: - ldr r1, _02073348 ; =0x04000208 - mov r0, #0 - ldrh r3, [r1] - ldr r2, _0207334C ; =_022B7988 - strh r0, [r1] - ldr r0, [r2] - cmp r0, #0 - beq _02073330 -_02073320: - add r2, r0, #0xc - ldr r0, [r0, #0xc] - cmp r0, #0 - bne _02073320 -_02073330: - ldr r1, _02073348 ; =0x04000208 - str r4, [r2] - ldrh r0, [r1] - mov r0, r4 - strh r3, [r1] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02073348: .word 0x04000208 -_0207334C: .word _022B7988 - arm_func_end DseSynth_AllocateNew - - arm_func_start DseSynth_Unload -DseSynth_Unload: ; 0x02073350 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl DseSynth_StopChannels - ldr r2, _020733B4 ; =0x04000208 - mov r0, r5 - ldrh r4, [r2] - mov r1, #0 - strh r1, [r2] - bl DseSynth_ClearHeldNotes - ldr r1, _020733B8 ; =_022B7988 - b _02073380 -_0207337C: - add r1, r0, #0xc -_02073380: - ldr r0, [r1] - cmp r0, #0 - cmpne r0, r5 - bne _0207337C - cmp r0, r5 - ldreq r0, [r5, #0xc] - ldr r2, _020733B4 ; =0x04000208 - streq r0, [r1] - ldrh r1, [r2] - mov r0, r5 - strh r4, [r2] - bl DseMem_Free - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020733B4: .word 0x04000208 -_020733B8: .word _022B7988 - arm_func_end DseSynth_Unload - - arm_func_start DseSynth_ClearHeldNotes -DseSynth_ClearHeldNotes: ; 0x020733BC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldrb r3, [r0, #1] - add r1, r0, #0x10 - mov r2, #0 - cmp r3, #0 - ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - ldr r7, _02073450 ; =0x04000208 - ldr ip, _02073454 ; =DRIVER_WORK - mvn r5, #0 - mov r4, r2 - mov r6, r2 -_020733E8: - ldrh r3, [r7] - strh r6, [r7] - ldr sb, [r1, #0xb8] - cmp sb, #0 - ldreqh lr, [r7] - streqh r3, [r7] - beq _02073438 - mov r8, sb -_02073408: - str r5, [sb, #4] - strb r4, [r8, #1] - ldr lr, [r8, #8] - cmp lr, #0 - movne r8, lr - bne _02073408 - ldr lr, [ip, #0x650] - str lr, [r8, #8] - str sb, [ip, #0x650] - str r4, [r1, #0xb8] - ldrh lr, [r7] - strh r3, [r7] -_02073438: - ldrb r3, [r0, #1] - add r2, r2, #1 - add r1, r1, #0xc8 - cmp r2, r3 - blt _020733E8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02073450: .word 0x04000208 -_02073454: .word DRIVER_WORK - arm_func_end DseSynth_ClearHeldNotes - - arm_func_start DseSynth_ResetAndSetBankAndSequence -DseSynth_ResetAndSetBankAndSequence: ; 0x02073458 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl DseSynth_Reset - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl DseSynth_SetBankAndSequence - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseSynth_ResetAndSetBankAndSequence - - arm_func_start DseSynth_StopChannels -DseSynth_StopChannels: ; 0x02073480 - stmdb sp!, {r3, r4, r5, lr} - ldrb r5, [r0, #1] - add r4, r0, #0x10 - cmp r5, #0 - ldmeqia sp!, {r3, r4, r5, pc} -_02073494: - mov r0, r4 - bl DseChannel_DeallocateVoices - subs r5, r5, #1 - add r4, r4, #0xc8 - bne _02073494 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseSynth_StopChannels - - arm_func_start DseSynth_ResetAllVoiceTimersAndVolumes -DseSynth_ResetAllVoiceTimersAndVolumes: ; 0x020734AC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r3, _02073500 ; =0x04000208 - mov r2, #0 - ldrh r6, [r3] - mov r7, r1 - add r4, r0, #0x10 - strh r2, [r3] - strb r7, [r0, #9] - ldrb r5, [r0, #1] - cmp r5, #0 - beq _020734F0 -_020734D8: - mov r0, r4 - mov r1, r7 - bl DseChannel_ResetTimerAndVolumeForVoices - subs r5, r5, #1 - add r4, r4, #0xc8 - bne _020734D8 -_020734F0: - ldr r1, _02073500 ; =0x04000208 - ldrh r0, [r1] - strh r6, [r1] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02073500: .word 0x04000208 - arm_func_end DseSynth_ResetAllVoiceTimersAndVolumes - - arm_func_start DseSynth_RestoreHeldNotes -DseSynth_RestoreHeldNotes: ; 0x02073504 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r2, _02073568 ; =0x04000208 - ldrb r6, [r0, #1] - ldrh r4, [r2] - mov r1, #0 - cmp r6, #0 - strh r1, [r2] - add r5, r0, #0x10 - beq _02073558 -_02073528: - ldr r7, [r5, #0xb8] - cmp r7, #0 - beq _0207354C -_02073534: - mov r0, r5 - mov r1, r7 - bl DseVoice_PlayNote - ldr r7, [r7, #8] - cmp r7, #0 - bne _02073534 -_0207354C: - subs r6, r6, #1 - add r5, r5, #0xc8 - bne _02073528 -_02073558: - ldr r1, _02073568 ; =0x04000208 - ldrh r0, [r1] - strh r4, [r1] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02073568: .word 0x04000208 - arm_func_end DseSynth_RestoreHeldNotes - - arm_func_start DseSynth_SetGlobalVolumeIndex -DseSynth_SetGlobalVolumeIndex: ; 0x0207356C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r3, _02073644 ; =_022B7370 - ldr r4, _02073648 ; =0x81020409 - ldrsb r5, [r3, r1] - add r3, r0, #0x10 - mov ip, #0 - strb r5, [r0, #2] - strb r1, [r0, #3] - ldrb r5, [r0, #2] - ldrsb r1, [r0, #6] - smulbb r5, r5, r1 - smull r1, r6, r4, r5 - add r6, r5, r6 - mov r1, r5, lsr #0x1f - add r6, r1, r6, asr #6 - strb r6, [r0, #8] - ldrb r1, [r0, #1] - cmp r1, #0 - ldmleia sp!, {r4, r5, r6, r7, r8, pc} - ldr r6, _0207364C ; =0x04000208 - mov r5, ip -_020735C0: - ldr r4, [r3, #0x2c] - ldrb r1, [r3, #0x50] - mov r4, r4, asr #0x10 - ldrsb lr, [r0, #8] - mul r1, r4, r1 - mul r7, lr, r1 - ldr r4, _02073650 ; =0x82061029 - mov r1, r7, lsr #0x1f - smull lr, r8, r4, r7 - add r8, r7, r8 - add r8, r1, r8, asr #13 - strh r8, [r3, #0x18] - cmp r2, #1 - bne _0207362C - ldrh r7, [r6] - strh r5, [r6] - ldr r4, [r3, #0xb4] - cmp r4, #0 - beq _02073624 -_0207360C: - ldrh r1, [r4, #6] - orr r1, r1, #0x20 - strh r1, [r4, #6] - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _0207360C -_02073624: - ldrh r1, [r6] - strh r7, [r6] -_0207362C: - ldrb r1, [r0, #1] - add ip, ip, #1 - add r3, r3, #0xc8 - cmp ip, r1 - blt _020735C0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02073644: .word _022B7370 -_02073648: .word 0x81020409 -_0207364C: .word 0x04000208 -_02073650: .word 0x82061029 - arm_func_end DseSynth_SetGlobalVolumeIndex - - arm_func_start DseSynth_SetBend -DseSynth_SetBend: ; 0x02073654 - stmdb sp!, {r3, r4, r5, lr} - strh r1, [r0, #4] - ldrb r3, [r0, #1] - add r1, r0, #0x10 - mov r2, #0 - cmp r3, #0 - ldmleia sp!, {r3, r4, r5, pc} - ldr lr, _020736E4 ; =0x04000208 - mov ip, r2 -_02073678: - ldr r3, [r1, #0x1c] - ldrsh r4, [r1, #0x54] - mov r3, r3, asr #0x10 - mov r3, r3, lsl #0x10 - ldrsh r5, [r0, #4] - add r3, r4, r3, asr #16 - add r3, r5, r3 - strh r3, [r1, #0x16] - ldrh r5, [lr] - strh ip, [lr] - ldr r4, [r1, #0xb4] - cmp r4, #0 - beq _020736C4 -_020736AC: - ldrh r3, [r4, #6] - orr r3, r3, #0x10 - strh r3, [r4, #6] - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _020736AC -_020736C4: - ldrh r3, [lr] - add r2, r2, #1 - add r1, r1, #0xc8 - strh r5, [lr] - ldrb r3, [r0, #1] - cmp r2, r3 - blt _02073678 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020736E4: .word 0x04000208 - arm_func_end DseSynth_SetBend - - arm_func_start DseSynth_SetVolume -DseSynth_SetVolume: ; 0x020736E8 - stmdb sp!, {r4, r5, r6, lr} - strb r1, [r0, #6] - ldrb r4, [r0, #2] - ldrsb r2, [r0, #6] - ldr r3, _020737AC ; =0x81020409 - add r1, r0, #0x10 - smulbb r4, r4, r2 - smull r2, r5, r3, r4 - add r5, r4, r5 - mov r2, r4, lsr #0x1f - add r5, r2, r5, asr #6 - strb r5, [r0, #8] - ldrb r3, [r0, #1] - mov r2, #0 - cmp r3, #0 - ldmleia sp!, {r4, r5, r6, pc} - ldr r4, _020737B0 ; =0x04000208 - ldr ip, _020737B4 ; =0x82061029 - mov lr, r2 -_02073734: - ldr r5, [r1, #0x2c] - ldrb r3, [r1, #0x50] - mov r5, r5, asr #0x10 - ldrsb r6, [r0, #8] - mul r3, r5, r3 - mul r5, r6, r3 - smull r3, r6, ip, r5 - add r6, r5, r6 - mov r3, r5, lsr #0x1f - add r6, r3, r6, asr #13 - strh r6, [r1, #0x18] - ldrh r6, [r4] - strh lr, [r4] - ldr r5, [r1, #0xb4] - cmp r5, #0 - beq _0207378C -_02073774: - ldrh r3, [r5, #6] - orr r3, r3, #0x20 - strh r3, [r5, #6] - ldr r5, [r5, #0x154] - cmp r5, #0 - bne _02073774 -_0207378C: - ldrh r3, [r4] - add r2, r2, #1 - add r1, r1, #0xc8 - strh r6, [r4] - ldrb r3, [r0, #1] - cmp r2, r3 - blt _02073734 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_020737AC: .word 0x81020409 -_020737B0: .word 0x04000208 -_020737B4: .word 0x82061029 - arm_func_end DseSynth_SetVolume - - arm_func_start DseSynth_SetPan -DseSynth_SetPan: ; 0x020737B8 - stmdb sp!, {r3, r4, r5, lr} - strb r1, [r0, #7] - ldrb r3, [r0, #1] - add r1, r0, #0x10 - mov r2, #0 - cmp r3, #0 - ldmleia sp!, {r3, r4, r5, pc} - ldr lr, _02073848 ; =0x04000208 - mov ip, r2 -_020737DC: - ldr r3, [r1, #0xc4] - ldr r4, [r1, #0x3c] - ldrsb r3, [r3, #7] - mov r4, r4, asr #0x10 - and r4, r4, #0xff - sub r3, r3, #0x40 - add r3, r4, r3 - strh r3, [r1, #0x1a] - ldrh r5, [lr] - strh ip, [lr] - ldr r4, [r1, #0xb4] - cmp r4, #0 - beq _02073828 -_02073810: - ldrh r3, [r4, #6] - orr r3, r3, #0x40 - strh r3, [r4, #6] - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _02073810 -_02073828: - ldrh r3, [lr] - add r2, r2, #1 - add r1, r1, #0xc8 - strh r5, [lr] - ldrb r3, [r0, #1] - cmp r2, r3 - blt _020737DC - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02073848: .word 0x04000208 - arm_func_end DseSynth_SetPan - - arm_func_start DseSynth_SetBankAndSequence -DseSynth_SetBankAndSequence: ; 0x0207384C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - ldr r3, _020738D8 ; =DRIVER_WORK - mov sl, r0 - ldrsb r6, [r3, #0x3d] - mov r7, #0 - mov sb, r1 - strb r7, [r3, #0x3d] - ldrb r0, [sl, #1] - mov r8, r2 - add r5, sl, #0x10 - cmp r0, #0 - ble _020738CC - mov r0, sb, lsl #0x10 - mov r4, r0, lsr #0x10 -_02073884: - mov r0, r5 - bl DseChannel_DeallocateVoices - mov r0, r5 - mov r1, r8 - bl DseChannel_Init - cmp sb, #0 - blt _020738B8 - mov r0, r5 - mov r1, r4 - bl DseChannel_SetBank - mov r0, r5 - mov r1, r4 - bl DseChannel_SetInstrument -_020738B8: - ldrb r0, [sl, #1] - add r7, r7, #1 - add r5, r5, #0xc8 - cmp r7, r0 - blt _02073884 -_020738CC: - ldr r0, _020738D8 ; =DRIVER_WORK - strb r6, [r0, #0x3d] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_020738D8: .word DRIVER_WORK - arm_func_end DseSynth_SetBankAndSequence - - arm_func_start DseChannel_Init -DseChannel_Init: ; 0x020738DC - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - str r1, [r4] - mov r0, #0 - strb r0, [r4, #4] - strb r0, [r4, #6] - mov r1, #1 - strb r1, [r4, #7] - ldr r1, _02073A80 ; =_022B7A30 - strb r0, [r4, #8] - ldrh r3, [r1, #0x2e] - ldr r1, _02073A84 ; =DRIVER_WORK - mov r2, #0x7f - strb r3, [r4, #9] - strh r0, [r4, #0xa] - strb r0, [r4, #0xc] - strb r0, [r4, #0xd] - add r1, r1, #0x600 - ldrsb ip, [r1, #0x74] - ldrsb r3, [r1, #0x94] - add r3, r3, ip, lsl #8 - strh r3, [r4, #0xe] - strh r0, [r4, #0x10] - strh r0, [r4, #0x14] - str r0, [r4, #0x1c] - strh r0, [r4, #0x28] - ldrsb r3, [r1, #0x7b] - mov r3, r3, lsl #0x10 - str r3, [r4, #0x2c] - strh r0, [r4, #0x38] - ldrsb r3, [r1, #0x7e] - mov r3, r3, lsl #0x10 - str r3, [r4, #0x3c] - strh r0, [r4, #0x48] - strh r0, [r4, #0x54] - ldrsb r3, [r1, #0x7f] - strb r3, [r4, #0x50] - ldrsb r1, [r1, #0x75] - strb r1, [r4, #0x51] - strh r0, [r4, #0x52] - strh r0, [r4, #0x56] - strb r2, [r4, #0x58] - strb r0, [r4, #0x59] - strb r0, [r4, #0x5a] - strb r0, [r4, #0x5b] - strb r0, [r4, #0x5c] - strb r0, [r4, #0x5d] - strb r0, [r4, #0x5e] - strb r0, [r4, #0x5f] - strb r0, [r4, #0x60] - mov r2, r0 -_020739A8: - add r1, r4, r0, lsl #4 - strb r2, [r1, #0x75] - add r0, r0, #1 - strb r2, [r1, #0x76] - cmp r0, #4 - blt _020739A8 - add r0, r4, #0x64 - bl SoundEnvelopeParameters_Reset - mov r0, #0 - ldr r1, _02073A88 ; =0x04000208 - str r0, [r4, #0xb4] - ldrh r5, [r1] - strh r0, [r1] - ldr lr, [r4, #0xb8] - cmp lr, #0 - ldreqh r0, [r1] - streqh r5, [r1] - beq _02073A34 - mov ip, lr - mvn r1, #0 - mov r3, r0 -_020739FC: - str r1, [lr, #4] - strb r3, [ip, #1] - ldr r0, [ip, #8] - cmp r0, #0 - movne ip, r0 - bne _020739FC - ldr r0, _02073A84 ; =DRIVER_WORK - ldr r1, _02073A88 ; =0x04000208 - ldr r2, [r0, #0x650] - str r2, [ip, #8] - str lr, [r0, #0x650] - str r3, [r4, #0xb8] - ldrh r0, [r1] - strh r5, [r1] -_02073A34: - mov r1, #0 - str r1, [r4, #0xbc] - ldr r0, _02073A84 ; =DRIVER_WORK - str r1, [r4, #0xc0] - strh r1, [r4, #0x16] - add r0, r0, #0x600 - ldrsb r3, [r0, #0x7b] - ldrsb r0, [r0, #0x7f] - ldr r1, _02073A8C ; =0x82061029 - mov r2, #0x40 - smulbb r0, r3, r0 - rsb r3, r0, r0, lsl #7 - smull r0, ip, r1, r3 - add ip, r3, ip - mov r0, r3, lsr #0x1f - add ip, r0, ip, asr #13 - strh ip, [r4, #0x18] - strh r2, [r4, #0x1a] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02073A80: .word _022B7A30 -_02073A84: .word DRIVER_WORK -_02073A88: .word 0x04000208 -_02073A8C: .word 0x82061029 - arm_func_end DseChannel_Init - - arm_func_start DseChannel_DeallocateVoices -DseChannel_DeallocateVoices: ; 0x02073A90 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r6, [r0, #0xb4] - mov r1, #0 - str r1, [r0, #0xb4] - cmp r6, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - ldr r8, _02073B10 ; =_022B7A30 - mov r5, r1 - mov r4, r1 -_02073AB4: - ldr r7, [r6, #0x154] - add r0, r6, #0x3c - strh r5, [r6, #4] - str r5, [r6, #0x158] - str r5, [r6, #0x154] - bl SoundEnvelope_Stop - ldr r0, [r6, #0x14c] - cmp r7, #0 - and r0, r0, #0xff - str r0, [r6, #0x14c] - str r4, [r6] - strh r4, [r6, #0x18] - ldrh r2, [r6, #0xa] - ldrh r1, [r8, #0x32] - mov r6, r7 - mvn r0, r2 - and r0, r1, r0 - strh r0, [r8, #0x32] - ldrh r0, [r8, #0x36] - orr r0, r0, r2 - strh r0, [r8, #0x36] - bne _02073AB4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02073B10: .word _022B7A30 - arm_func_end DseChannel_DeallocateVoices - - arm_func_start DseChannel_ResetTimerAndVolumeForVoices -DseChannel_ResetTimerAndVolumeForVoices: ; 0x02073B14 - cmp r1, #1 - bne _02073B5C - ldrb r1, [r0, #4] - orr r1, r1, #0x40 - strb r1, [r0, #4] - ldr r2, [r0, #0xb4] - cmp r2, #0 - bxeq lr - mov r1, #0 -_02073B38: - str r1, [r2, #0x13c] - str r1, [r2, #0x140] - ldrh r0, [r2, #6] - orr r0, r0, #0x30 - strh r0, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02073B38 - bx lr -_02073B5C: - ldr r2, [r0, #0xb4] - cmp r2, #0 - beq _02073B80 -_02073B68: - ldrh r1, [r2, #6] - orr r1, r1, #0x30 - strh r1, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02073B68 -_02073B80: - ldrb r1, [r0, #4] - bic r1, r1, #0x40 - strb r1, [r0, #4] - bx lr - arm_func_end DseChannel_ResetTimerAndVolumeForVoices - - arm_func_start DseChannel_SetBank -DseChannel_SetBank: ; 0x02073B90 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, r1 - strh r1, [r4, #0xe] - bl DseSwd_GetBankById - str r0, [r4, #0xbc] - cmp r0, #0 - moveq r0, #0 - streq r0, [r4, #0xc0] - ldmeqia sp!, {r4, pc} - ldrh r1, [r4, #0x10] - mov r0, r4 - bl DseChannel_SetInstrument - ldmia sp!, {r4, pc} - arm_func_end DseChannel_SetBank - - arm_func_start DseChannel_SetInstrument -DseChannel_SetInstrument: ; 0x02073BC8 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r5, r0 - ldr r0, [r5, #0xbc] - mov r4, r1 - cmp r0, #0 - bne _02073BF0 - mov r0, #0 - str r0, [r5, #0xc0] - strh r0, [r5, #0x10] - b _02073C4C -_02073BF0: - mov r0, r4, lsl #0x10 - mov r1, r0, asr #0x10 - strh r1, [r5, #0x10] - ldr r0, [r5, #0xbc] - bl DseSwd_GetInstrument - movs lr, r0 - beq _02073C48 - mov r6, #0 - strb r6, [r5, #0x59] - add r7, lr, #0x10 - add r8, r5, #0x74 - mov ip, r6 -_02073C20: - ldrb r0, [r7, #1] - add r6, r6, #1 - cmp r0, #0 - ldmneia r7, {r0, r1, r2, r3} - stmneia r8, {r0, r1, r2, r3} - streqb ip, [r8, #1] - cmp r6, #4 - add r7, r7, #0x10 - add r8, r8, #0x10 - blt _02073C20 -_02073C48: - str lr, [r5, #0xc0] -_02073C4C: - add r0, r5, #0x64 - bl SoundEnvelopeParameters_Reset - mov r0, r4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - arm_func_end DseChannel_SetInstrument - - arm_func_start DseChannel_SetLfoConstEnvelopeLevel -DseChannel_SetLfoConstEnvelopeLevel: ; 0x02073C5C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - strb r5, [r0, #0x51] - ldr r4, [r0, #0xb4] - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} -_02073C74: - mov r1, r5 - add r0, r4, #0x5c - bl SoundLfoBank_SetConstEnvelopes - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _02073C74 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseChannel_SetLfoConstEnvelopeLevel - - arm_func_start DseChannel_SetKeyBend -DseChannel_SetKeyBend: ; 0x02073C90 - strh r1, [r0, #0x52] - ldr r2, [r0, #0xb4] - cmp r2, #0 - bxeq lr - mov r3, r1, lsl #8 -_02073CA4: - ldrb r0, [r2, #0xf] - mul r1, r0, r3 - mov r0, r1, asr #0xc - add r0, r1, r0, lsr #19 - mov r0, r0, asr #0xd - strh r0, [r2, #0x10] - ldrh r0, [r2, #6] - orr r0, r0, #0x10 - strh r0, [r2, #6] - ldr r2, [r2, #0x154] - cmp r2, #0 - bne _02073CA4 - bx lr - arm_func_end DseChannel_SetKeyBend - - arm_func_start DseChannel_AllocateNote -DseChannel_AllocateNote: ; 0x02073CD8 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrb r2, [r5, #0xd] - mov r4, r1 - cmp r2, #0 - beq _02073D18 - ldrb r0, [r5, #0xc] - sub r0, r2, r0 - add r6, r0, #1 - bl DseUtil_GetRandomNumber - mul r1, r6, r0 - mov r0, r1, asr #0xe - ldrb r2, [r5, #0xc] - add r0, r1, r0, lsr #17 - add r0, r2, r0, asr #15 - strb r0, [r4, #2] -_02073D18: - ldr r1, _02073D64 ; =DRIVER_WORK - ldr r0, [r1, #0x650] - cmp r0, #0 - moveq r0, #0 - ldrne r2, [r0, #8] - strne r2, [r1, #0x650] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - ldr r3, [r4] - ldr r2, [r4, #4] - mov r1, #1 - str r3, [r0] - str r2, [r0, #4] - strb r1, [r0, #1] - ldr r1, [r5, #0xb8] - str r1, [r0, #8] - str r0, [r5, #0xb8] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02073D64: .word DRIVER_WORK - arm_func_end DseChannel_AllocateNote - - arm_func_start DseChannel_ReleaseNoteInternal -DseChannel_ReleaseNoteInternal: ; 0x02073D68 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r0 - ldr r4, [r7, #0xb8] - mov r6, r1 - cmp r4, #0 - add r5, r7, #0xb8 - beq _02073DE4 - ldrb r1, [r6, #2] -_02073D88: - ldrb r0, [r4, #2] - cmp r0, r1 - bne _02073DD4 - ldr r8, [r7, #0xb4] - cmp r8, #0 - beq _02073DC8 -_02073DA0: - ldrb r1, [r8, #0xd] - ldrb r0, [r6, #2] - cmp r1, r0 - bne _02073DBC - mov r0, r7 - mov r1, r8 - bl DseVoice_Release -_02073DBC: - ldr r8, [r8, #0x154] - cmp r8, #0 - bne _02073DA0 -_02073DC8: - ldr r0, [r4, #8] - str r0, [r5] - b _02073DE4 -_02073DD4: - add r5, r4, #8 - ldr r4, [r4, #8] - cmp r4, #0 - bne _02073D88 -_02073DE4: - ldr r0, _02073E0C ; =DRIVER_WORK - mvn r2, #0 - ldr r3, [r0, #0x650] - mov r1, #0 - str r3, [r4, #8] - str r4, [r0, #0x650] - str r2, [r4, #4] - mov r0, r4 - strb r1, [r4, #1] - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02073E0C: .word DRIVER_WORK - arm_func_end DseChannel_ReleaseNoteInternal - - arm_func_start DseChannel_ChangeNote -DseChannel_ChangeNote: ; 0x02073E10 - stmdb sp!, {r4, lr} - ldr r4, [r0, #0xb8] - cmp r4, #0 - beq _02073E54 -_02073E20: - ldrb r3, [r4, #2] - cmp r3, r2 - bne _02073E48 - ldr lr, [r1] - ldr ip, [r1, #4] - mov r3, #1 - str lr, [r4] - str ip, [r4, #4] - strb r3, [r4, #1] - b _02073E54 -_02073E48: - ldr r4, [r4, #8] - cmp r4, #0 - bne _02073E20 -_02073E54: - ldr ip, [r0, #0xb4] - cmp ip, #0 - ldmeqia sp!, {r4, pc} -_02073E60: - ldrb r0, [ip, #0xd] - cmp r0, r2 - bne _02073E90 - ldrb r0, [r1, #2] - strb r0, [ip, #0xd] - ldrb r3, [r1, #2] - ldrsh r0, [ip, #0x14] - add r0, r0, r3, lsl #8 - strh r0, [ip, #0x12] - ldrh r0, [ip, #6] - orr r0, r0, #0x10 - strh r0, [ip, #6] -_02073E90: - ldr ip, [ip, #0x154] - cmp ip, #0 - bne _02073E60 - ldmia sp!, {r4, pc} - arm_func_end DseChannel_ChangeNote - - arm_func_start DseChannel_ReleaseNote -DseChannel_ReleaseNote: ; 0x02073EA0 - stmdb sp!, {r3, lr} - ldr r2, [r0, #0xb8] - cmp r2, #0 - ldmeqia sp!, {r3, pc} - ldrb r3, [r1, #2] -_02073EB4: - ldrb r1, [r2, #2] - cmp r1, r3 - bne _02073ECC - mov r1, r2 - bl DseChannel_ReleaseNoteInternal - ldmia sp!, {r3, pc} -_02073ECC: - ldr r2, [r2, #8] - cmp r2, #0 - bne _02073EB4 - ldmia sp!, {r3, pc} - arm_func_end DseChannel_ReleaseNote - - arm_func_start DseVoice_PlayNote -DseVoice_PlayNote: ; 0x02073EDC - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc - mov sl, r0 - ldrsh r4, [sl, #0xa] - mov sb, r1 - cmp r4, #0 - moveq r0, #0 - streq r0, [sp] - beq _02073F28 - bl DseUtil_GetRandomNumber - mov r1, r4, lsl #1 - mul r2, r1, r0 - mov r0, r2, asr #0xe - ldrsh r1, [sl, #0xa] - add r0, r2, r0, lsr #17 - rsb r0, r1, r0, asr #15 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp] -_02073F28: - ldr r6, [sl, #0xc0] - cmp r6, #0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r7, [sl, #0xbc] - mov r5, #0 -_02073F40: - ldrb r2, [sb, #2] - ldrsb r3, [sb, #3] - mov r0, r6 - mov r1, r5 - bl DseSwd_GetNextSplitInRange - movs r5, r0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrb r3, [r5, #0x1a] - ldrb r0, [r7, #0xc] - ldr r2, [r7, #0x18] - cmp r3, r0 - movge r3, #0 - add r1, r2, r3, lsl #3 - ldr r2, [r2, r3, lsl #3] - ldr r1, [r1, #4] - mov r0, r7 - str r2, [sp, #4] - str r1, [sp, #8] - ldrsh r1, [r5, #0x12] - bl ReadWaviEntry - movs fp, r0 - beq _02073F40 - ldrb r3, [sl, #5] - ldrb r2, [r5, #0x1a] - mov r0, sl - add r1, sp, #4 - add r8, r2, r3, lsl #8 - ldrb r3, [sp, #7] - mov r2, r8 - bl DseVoice_Allocate - movs r4, r0 - beq _02073F40 - mov r0, #0 - strh r0, [r4, #4] - ldr r0, [sl] - add fp, fp, #0x10 - str r0, [r4] - strh r8, [r4, #0x18] - ldrsh r0, [r5, #0x12] - add ip, r4, #0x1c - strb r0, [r4, #0xe] - ldmia fp!, {r0, r1, r2, r3} - stmia ip!, {r0, r1, r2, r3} - ldmia fp, {r0, r1, r2, r3} - stmia ip, {r0, r1, r2, r3} - ldr r1, [r4, #0x30] - ldr r0, [r7, #0x1c] - add r0, r1, r0 - str r0, [r4, #0x30] - ldrb r0, [sb, #2] - strb r0, [r4, #0xd] - ldrsb r1, [r5, #0x17] - ldrsh r0, [r5, #0x14] - add r1, r0, r1, lsl #8 - ldr r0, [sp] - add r0, r0, r1 - strh r0, [r4, #0x14] - ldrb r1, [sb, #2] - ldrsh r0, [r4, #0x14] - add r0, r0, r1, lsl #8 - strh r0, [r4, #0x12] - ldrb r0, [r5, #0x19] - strb r0, [r4, #0x17] - ldr r0, _02074144 ; =DRIVER_WORK - ldrb r0, [r0, #0x39] - cmp r0, #7 - bne _02074084 - ldrb r1, [sl, #0x58] - ldrb r0, [sb, #3] - ldrb r2, [r6, #4] - ldrb r3, [r5, #0x18] - smulbb r0, r1, r0 - mul r0, r2, r0 - mul r2, r3, r0 - ldr r0, _02074148 ; =0x4186143D - smull r1, r3, r0, r2 - mov r0, r2, lsr #0x1f - add r3, r0, r3, asr #19 - strb r3, [r4, #0x16] - b _020740B0 -_02074084: - ldrb r1, [sb, #3] - ldrb r0, [r6, #4] - ldrb r2, [r5, #0x18] - smulbb r0, r1, r0 - mul r3, r2, r0 - ldr r0, _0207414C ; =0x82061029 - smull r1, r2, r0, r3 - add r2, r3, r2 - mov r0, r3, lsr #0x1f - add r2, r0, r2, asr #13 - strb r2, [r4, #0x16] -_020740B0: - ldrb r2, [sl, #0x59] - ldrsh r3, [sl, #0x52] - add r0, r4, #0x5c - cmp r2, #0 - ldreqb r2, [r5, #2] - mov r3, r3, lsl #8 - add r1, sl, #0x74 - mul r8, r2, r3 - mov r3, r8, asr #0xc - add r3, r8, r3, lsr #19 - mov r3, r3, asr #0xd - strh r3, [r4, #0x10] - strb r2, [r4, #0xf] - ldrh r2, [r4, #6] - orr r2, r2, #0xff0 - strh r2, [r4, #6] - ldrsb r2, [sl, #0x51] - bl SoundLfoBank_Set - add r0, r5, #0x20 - add r8, r4, #0x3c - ldmia r0, {r0, r1, r2, r3} - stmia r8, {r0, r1, r2, r3} - mov r0, #1 - strb r0, [r4, #0x3c] - ldrb r0, [sl, #0x64] - cmp r0, #0 - beq _02074128 - mov r0, r8 - add r1, sl, #0x64 - bl SoundEnvelope_SetParameters -_02074128: - mov r1, r4 - mov r0, sl - ldrb r2, [sp, #7] - bl DseVoice_Start - b _02073F40 -_0207413C: - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02074144: .word DRIVER_WORK -_02074148: .word 0x4186143D -_0207414C: .word 0x82061029 - arm_func_end DseVoice_PlayNote - - arm_func_start DseVoice_ReleaseNote -DseVoice_ReleaseNote: ; 0x02074150 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - ldr r4, [r6, #0xb4] - mov r5, r1 - cmp r4, #0 - ldmeqia sp!, {r4, r5, r6, pc} -_02074168: - ldrb r1, [r4, #0xd] - ldrb r0, [r5, #2] - cmp r1, r0 - bne _02074184 - mov r0, r6 - mov r1, r4 - bl DseVoice_Release -_02074184: - ldr r4, [r4, #0x154] - cmp r4, #0 - bne _02074168 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DseVoice_ReleaseNote - - arm_func_start DseVoice_UpdateParameters -DseVoice_UpdateParameters: ; 0x02074194 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr fp, _0207431C ; =_022B7A30 - ldr r7, _02074320 ; =_022B7A6C - ldrh r0, [fp, #0x2e] - mov sb, #0 - cmp r0, #0 - ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r6, _02074324 ; =_020B1310 - ldr r5, _02074328 ; =_020B1394 - ldr r4, _0207432C ; =0x00FFB0FF -_020741BC: - ldr r8, [r7, #0x158] - cmp r8, #0 - beq _02074304 - ldrh sl, [r7, #6] - cmp sl, #0 - beq _02074300 - tst sl, #0x10 - beq _02074264 - ldrh r2, [r8, #0x16] - ldrsh r1, [r7, #0x12] - ldrsh r3, [r7, #0x10] - ldrsh r0, [r7, #0x5e] - add r1, r2, r1 - add r1, r3, r1 - add r0, r0, r1 - mov r0, r0, lsl #0x10 - mov r1, r0, lsr #0x10 - mov r0, r1, asr #8 - and r0, r0, #0x7f - ldrb r0, [r6, r0] - and r2, r1, #0xff - mov r1, r0, lsl #0x1c - add r1, r2, r1, lsr #20 - mov r1, r1, lsl #1 - mov r0, r0, asr #4 - ldrh r1, [r5, r1] - rsbs r0, r0, #4 - movpl r1, r1, lsr r0 - rsbmi r0, r0, #0 - movmi r1, r1, lsl r0 - ldrb r0, [r7, #0x1f] - cmp r0, #3 - mov r0, r4 - blo _0207425C - mov r2, r1, asr #3 - add r1, r1, r2, lsr #28 - mov r1, r1, asr #4 - bl _s32_div_f - str r0, [r7, #0x13c] - b _02074264 -_0207425C: - bl _s32_div_f - str r0, [r7, #0x13c] -_02074264: - tst sl, #0x20 - beq _020742C4 - ldrb r1, [r7, #0x16] - ldrsh r0, [r7, #0x60] - add r1, r1, r0, asr #6 - cmp r1, #0x7f - movgt r1, #0x7f - bgt _0207428C - cmp r1, #0 - movlt r1, #0 -_0207428C: - ldrh r0, [r8, #0x18] - ldrb r2, [r7, #0x14c] - mul r1, r0, r1 - mul r3, r2, r1 - ldr r0, _02074330 ; =0x828CBFBF - smull r1, r2, r0, r3 - add r2, r3, r2 - mov r0, r3, lsr #0x1f - add r2, r0, r2, asr #12 - mul r1, r2, r2 - mov r0, r1, asr #8 - add r0, r1, r0, lsr #23 - mov r0, r0, asr #9 - str r0, [r7, #0x140] -_020742C4: - tst sl, #0x40 - beq _02074300 - ldrsb r1, [r7, #0x17] - ldrsh r2, [r8, #0x1a] - ldrsh r0, [r7, #0x62] - sub r1, r1, #0x40 - add r1, r2, r1 - adds r1, r1, r0, asr #6 - ldr r0, _02074334 ; =_022B8330 - movmi r1, #0 - cmp r1, #0x7f - ldr r0, [r0, #0xed4] - movgt r1, #0x7f - ldrb r0, [r0, r1] - str r0, [r7, #0x144] -_02074300: - strh sl, [r7, #6] -_02074304: - ldrh r0, [fp, #0x2e] - add sb, sb, #1 - add r7, r7, #0x15c - cmp sb, r0 - blt _020741BC - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0207431C: .word _022B7A30 -_02074320: .word _022B7A6C -_02074324: .word _020B1310 -_02074328: .word _020B1394 -_0207432C: .word 0x00FFB0FF -_02074330: .word 0x828CBFBF -_02074334: .word _022B8330 - arm_func_end DseVoice_UpdateParameters - - arm_func_start DseVoice_ResetAll -DseVoice_ResetAll: ; 0x02074338 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - ldr sl, _020743D0 ; =_022B7A30 - mov r8, #0 - ldrh r0, [sl, #0x2e] - cmp r0, #0 - ble _020743C0 - ldr sb, _020743D4 ; =_022B7A6C - mov r7, r8 - mov r6, #1 - mov r5, #0x40 - mov r4, r8 -_02074364: - strh r7, [sb, #4] - strh r7, [sb, #6] - mov r0, r6, lsl r8 - strh r8, [sb, #8] - strh r0, [sb, #0xa] - str r7, [sb] - str r7, [sb, #0x14c] - strb r7, [sb, #0xd] - strb r7, [sb, #0xe] - strh r7, [sb, #0x12] - strb r7, [sb, #0x16] - add r0, sb, #0x3c - strb r5, [sb, #0x17] - bl SoundEnvelope_Reset - add r0, sb, #0x5c - bl SoundLfoBank_Reset - str r4, [sb, #0x154] - str r4, [sb, #0x158] - ldrh r0, [sl, #0x2e] - add r8, r8, #1 - add sb, sb, #0x15c - cmp r8, r0 - blt _02074364 -_020743C0: - ldr r0, _020743D8 ; =DRIVER_WORK - mov r1, #0 - str r1, [r0, #0x654] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_020743D0: .word _022B7A30 -_020743D4: .word _022B7A6C -_020743D8: .word DRIVER_WORK - arm_func_end DseVoice_ResetAll - - arm_func_start DseVoice_ResetHW -DseVoice_ResetHW: ; 0x020743DC - stmdb sp!, {r3, lr} - cmp r0, #0 - ble _02074414 - ldr r1, _0207447C ; =_022B7A30 - mov r2, #0x10 - strh r2, [r1, #0x2c] - cmp r0, #0x10 - movgt r0, r2, lsl #0x10 - ldr r2, _0207447C ; =_022B7A30 - movgt r0, r0, asr #0x10 - strh r0, [r2, #0x2e] - ldr r1, _02074480 ; =_022B8330 - mov r0, #0 - strb r0, [r1, #0xd0c] -_02074414: - ldr r2, _0207447C ; =_022B7A30 - mov r0, #0 - strh r0, [r2, #0x32] - strh r0, [r2, #0x34] - ldr r1, _02074484 ; =DRIVER_WORK - strh r0, [r2, #0x36] - strb r0, [r1, #0x738] - strb r0, [r1, #0x739] - ldr ip, _02074480 ; =_022B8330 - strh r0, [r2, #0x30] - str r0, [ip, #0xcfc] - str r0, [ip, #0xd00] - sub r2, r0, #1 - str r2, [ip, #0xd04] - ldrsh lr, [r1, #0x28] - mov r1, r0 - mov r2, r0 - mov r3, r0 - str lr, [ip, #0xd08] - bl sub_0207C8B8 - ldr r0, _02074488 ; =0x0000FFFF - mov r3, #0 - mov r1, r0 - mov r2, r0 - bl sub_0207C8E0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0207447C: .word _022B7A30 -_02074480: .word _022B8330 -_02074484: .word DRIVER_WORK -_02074488: .word 0x0000FFFF - arm_func_end DseVoice_ResetHW - - arm_func_start UpdateChannels -UpdateChannels: ; 0x0207448C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr sb, _02074570 ; =_022B7A30 - mov r7, #0 - ldrh r0, [sb, #0x2e] - mov r6, r7 - ldr r5, _02074574 ; =_022B7A6C - cmp r0, #0 - ble _0207452C - mov r4, #2 -_020744B0: - add r0, r5, #0x3c - bl SoundEnvelope_Tick - ldrsb r1, [r5, #0x5a] - mov r8, r0 - cmp r1, #1 - bne _02074514 - add r0, r5, #0x5c - bl SoundLfoBank_Tick - ldrh r1, [r5, #6] - orr r0, r1, r0 - strh r0, [r5, #6] - ldrb r0, [r5, #0x58] - cmp r0, #8 - bne _020744F8 - strb r4, [r5, #0x58] - ldrh r0, [r5, #6] - orr r0, r0, #2 - strh r0, [r5, #6] -_020744F8: - ldrb r0, [r5, #0x14c] - cmp r0, r8 - ldrneh r0, [r5, #6] - orrne r0, r0, #0x20 - strneh r0, [r5, #6] - cmp r8, #0 - addgt r7, r7, #1 -_02074514: - strb r8, [r5, #0x14c] - ldrh r0, [sb, #0x2e] - add r6, r6, #1 - add r5, r5, #0x15c - cmp r6, r0 - blt _020744B0 -_0207452C: - ldr r0, _02074578 ; =_022B8330 - ldr r1, [r0, #0xd04] - cmp r1, #0 - movlt r1, #0 - strlt r1, [r0, #0xd00] - ldr r0, _02074578 ; =_022B8330 - str r7, [r0, #0xcfc] - ldr r1, [r0, #0xd00] - cmp r1, r7 - strlt r7, [r0, #0xd00] - movlt r1, #0x64 - strlt r1, [r0, #0xd04] - ldr r0, _02074578 ; =_022B8330 - ldr r1, [r0, #0xd04] - sub r1, r1, #1 - str r1, [r0, #0xd04] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02074570: .word _022B7A30 -_02074574: .word _022B7A6C -_02074578: .word _022B8330 - arm_func_end UpdateChannels - - arm_func_start DseVoice_Cleanup -DseVoice_Cleanup: ; 0x0207457C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r6, _02074610 ; =_022B7A6C - bl sub_0207D470 - ldr r4, _02074614 ; =_022B7A30 - mov r0, r0, lsl #0x10 - ldrh r2, [r4, #0x30] - ldrh r1, [r4, #0x2e] - mov r7, #0 - orr r0, r2, r0, lsr #16 - mov r0, r0, lsl #0x10 - mov r8, r0, lsr #0x10 - cmp r1, #0 - ldmleia sp!, {r4, r5, r6, r7, r8, pc} - mov r5, r7 -_020745B4: - ldrsb r0, [r6, #0x5a] - cmp r0, #1 - bne _020745DC - tst r8, #1 - bne _020745F0 - add r0, r6, #0x3c - bl SoundEnvelope_Stop2 - add r0, r6, #0x100 - strh r5, [r0, #0x4c] - b _020745F0 -_020745DC: - and r0, r8, #1 - cmp r0, #1 - bne _020745F0 - mov r0, r6 - bl DseVoice_FlagForDeactivation -_020745F0: - ldrh r1, [r4, #0x2e] - mov r0, r8, lsl #0xf - add r7, r7, #1 - cmp r7, r1 - mov r8, r0, lsr #0x10 - add r6, r6, #0x15c - blt _020745B4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02074610: .word _022B7A6C -_02074614: .word _022B7A30 - arm_func_end DseVoice_Cleanup - - arm_func_start DseVoice_Allocate -DseVoice_Allocate: ; 0x02074618 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r4, _02074774 ; =_022B7A30 - mov r3, r3, lsl #0x10 - ldrh r5, [r4, #0x2e] - add r3, r3, #0xff - add r8, r3, #0x100 - ldrb r4, [r1, #5] - sub r5, r5, #1 - ldrb r3, [r0, #7] - cmp r4, r5 - movgt r4, r5 - ldrb r7, [r1, #4] - mov r6, #0 - cmp r3, #0 - beq _02074660 - cmp r3, #1 - beq _0207466C - b _0207476C -_02074660: - ldr r6, [r0, #0xb4] - cmp r6, #0 - bne _0207476C -_0207466C: - ldrb r3, [r1] - cmp r3, #0 - beq _02074708 - ldr r5, _02074778 ; =_022B7A6C - mov r3, #0x15c - mla r3, r7, r3, r5 - mov ip, r7 - mov lr, r4 - mov r5, r8 - cmp r7, r4 - mov r6, #0 - bgt _020746E4 - ldr r0, [r0] -_020746A0: - ldr sb, [r3] - cmp sb, r0 - ldreqh sb, [r3, #0x18] - cmpeq sb, r2 - bne _020746D4 - ldr sb, [r3, #0x14c] - add r6, r6, #1 - cmp r5, sb - movhi r5, sb - ldrb sb, [r1, #2] - movhi lr, ip - cmp r6, sb - bge _020746E4 -_020746D4: - add ip, ip, #1 - cmp ip, r4 - add r3, r3, #0x15c - ble _020746A0 -_020746E4: - ldrb r0, [r1, #2] - cmp r6, r0 - blt _02074708 - ldr r1, _02074778 ; =_022B7A6C - mov r0, #0x15c - mla r6, lr, r0, r1 - mov r0, r6 - bl DseVoice_Deallocate - b _0207476C -_02074708: - cmp r7, r4 - add r2, r4, #1 - bgt _0207474C - ldr r1, _0207477C ; =DRIVER_WORK - mov r0, #0x15c - mla r1, r7, r0, r1 -_02074720: - ldr r0, [r1, #0x888] - cmp r8, r0 - bls _0207473C - mov r2, r7 - cmp r0, #0 - beq _0207474C - mov r8, r0 -_0207473C: - add r7, r7, #1 - cmp r7, r4 - add r1, r1, #0x15c - ble _02074720 -_0207474C: - cmp r2, r4 - movgt r6, #0 - bgt _0207476C - ldr r1, _02074778 ; =_022B7A6C - mov r0, #0x15c - mla r6, r2, r0, r1 - mov r0, r6 - bl DseVoice_Deallocate -_0207476C: - mov r0, r6 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02074774: .word _022B7A30 -_02074778: .word _022B7A6C -_0207477C: .word DRIVER_WORK - arm_func_end DseVoice_Allocate - - arm_func_start DseVoice_Start -DseVoice_Start: ; 0x02074780 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - ldrh r3, [r4, #6] - mov r1, r2, lsl #0x10 - add r1, r1, #0xff - orr r2, r3, #1 - bic r2, r2, #2 - strh r2, [r4, #6] - ldr r2, [r4, #0x14c] - add r1, r1, #0x100 - orr r1, r2, r1 - mov r5, r0 - str r1, [r4, #0x14c] - add r0, r4, #0x3c - bl UpdateTrackVolumeEnvelopes - ldr r0, [r4, #0x158] - cmp r0, r5 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, [r5, #0xb4] - str r0, [r4, #0x154] - str r4, [r5, #0xb4] - str r5, [r4, #0x158] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseVoice_Start - - arm_func_start DseVoice_ReleaseHeld -DseVoice_ReleaseHeld: ; 0x020747DC - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r7, r0 - ldrb r0, [r7, #4] - tst r0, #3 - ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - ldr r4, [r7, #0xb8] - add r6, r7, #0xb8 - cmp r4, #0 - beq _0207484C - ldr r8, _02074858 ; =DRIVER_WORK - mvn sl, #0 - mov sb, #0 -_0207480C: - ldmib r4, {r0, r5} - cmp r0, #0 - strgt r4, [r6] - addgt r6, r4, #8 - bgt _02074840 - mov r0, r7 - mov r1, r4 - bl DseChannel_ReleaseNoteInternal - ldr r0, [r8, #0x650] - str r0, [r4, #8] - str r4, [r8, #0x650] - str sl, [r4, #4] - strb sb, [r4, #1] -_02074840: - mov r4, r5 - cmp r5, #0 - bne _0207480C -_0207484C: - mov r0, #0 - str r0, [r6] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02074858: .word DRIVER_WORK - arm_func_end DseVoice_ReleaseHeld - - arm_func_start DseVoice_Release -DseVoice_Release: ; 0x0207485C - stmdb sp!, {r4, lr} - mov r4, r1 - ldrh r1, [r4, #4] - orr r1, r1, #2 - strh r1, [r4, #4] - ldrb r0, [r0, #4] - tst r0, #1 - ldmneia sp!, {r4, pc} - ldr r1, [r4, #0x14c] - add r0, r4, #0x3c - and r1, r1, #0xff - str r1, [r4, #0x14c] - bl SoundEnvelope_Release - ldrh r0, [r4, #6] - bic r0, r0, #1 - strh r0, [r4, #6] - ldmia sp!, {r4, pc} - arm_func_end DseVoice_Release - - arm_func_start DseVoice_Deallocate -DseVoice_Deallocate: ; 0x020748A0 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r1, [r4, #0x158] - cmp r1, #0 - beq _02074948 - ldr r2, [r1, #0xb4] - cmp r2, r4 - ldreq r0, [r4, #0x154] - streq r0, [r1, #0xb4] - beq _020748F0 - cmp r2, #0 - beq _020748F0 -_020748D0: - ldr r0, [r2, #0x154] - cmp r0, r4 - ldreq r0, [r4, #0x154] - streq r0, [r2, #0x154] - beq _020748F0 - mov r2, r0 - cmp r0, #0 - bne _020748D0 -_020748F0: - mov r0, #0 - strh r0, [r4, #4] - str r0, [r4, #0x158] - str r0, [r4, #0x154] - add r0, r4, #0x3c - bl SoundEnvelope_Stop - ldr r1, [r4, #0x14c] - mov r0, #0 - and r1, r1, #0xff - str r1, [r4, #0x14c] - str r0, [r4] - strh r0, [r4, #0x18] - ldr r1, _020749A0 ; =_022B7A30 - ldrh r0, [r4, #0xa] - ldrh r3, [r1, #0x32] - mvn r2, r0 - and r2, r3, r2 - strh r2, [r1, #0x32] - ldrh r2, [r1, #0x36] - orr r2, r2, r0 - strh r2, [r1, #0x36] - ldmia sp!, {r4, pc} -_02074948: - mov r0, #0 - strh r0, [r4, #4] - str r0, [r4, #0x158] - str r0, [r4, #0x154] - add r0, r4, #0x3c - bl SoundEnvelope_Stop - ldr r1, [r4, #0x14c] - mov r0, #0 - and r1, r1, #0xff - str r1, [r4, #0x14c] - str r0, [r4] - strh r0, [r4, #0x18] - ldr r1, _020749A0 ; =_022B7A30 - ldrh r0, [r4, #0xa] - ldrh r3, [r1, #0x32] - mvn r2, r0 - and r2, r3, r2 - strh r2, [r1, #0x32] - ldrh r2, [r1, #0x36] - orr r2, r2, r0 - strh r2, [r1, #0x36] - ldmia sp!, {r4, pc} - .align 2, 0 -_020749A0: .word _022B7A30 - arm_func_end DseVoice_Deallocate - - arm_func_start DseVoice_FlagForActivation -DseVoice_FlagForActivation: ; 0x020749A4 - mov r1, #0xff0 - strh r1, [r0, #6] - ldr r2, [r0, #0x14c] - ldr r1, _020749F0 ; =_022B7A30 - orr r2, r2, #0xff - orr r2, r2, #0x100 - str r2, [r0, #0x14c] - ldrh r3, [r0, #0xa] - ldrh r0, [r1, #0x34] - mvn r2, r3 - and r0, r0, r2 - strh r0, [r1, #0x34] - ldrh r0, [r1, #0x36] - and r0, r0, r2 - strh r0, [r1, #0x36] - ldrh r0, [r1, #0x32] - orr r0, r0, r3 - strh r0, [r1, #0x32] - bx lr - .align 2, 0 -_020749F0: .word _022B7A30 - arm_func_end DseVoice_FlagForActivation - - arm_func_start DseVoice_FlagForDeactivation -DseVoice_FlagForDeactivation: ; 0x020749F4 - ldr r2, [r0, #0x14c] - ldr r1, _02074A28 ; =_022B7A30 - bic r2, r2, #0xff00 - str r2, [r0, #0x14c] - ldrh r3, [r0, #0xa] - ldrh r2, [r1, #0x32] - mvn r0, r3 - and r0, r2, r0 - strh r0, [r1, #0x32] - ldrh r0, [r1, #0x34] - orr r0, r0, r3 - strh r0, [r1, #0x34] - bx lr - .align 2, 0 -_02074A28: .word _022B7A30 - arm_func_end DseVoice_FlagForDeactivation - - arm_func_start DseVoice_CountNumActiveInChannel -DseVoice_CountNumActiveInChannel: ; 0x02074A2C - ldr r2, [r0, #0xb4] - mov r0, #0 - cmp r2, #0 - bxeq lr -_02074A3C: - ldrb r1, [r2, #0x14c] - ldr r2, [r2, #0x154] - cmp r1, #0 - addne r0, r0, #1 - cmp r2, #0 - bne _02074A3C - bx lr - arm_func_end DseVoice_CountNumActiveInChannel - - arm_func_start DseVoice_UpdateHardware -DseVoice_UpdateHardware: ; 0x02074A58 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x18 - ldr r4, _02074C64 ; =_022B7A30 - ldr r7, _02074C68 ; =_022B7A6C - ldrh r0, [r4, #0x2e] - mov r8, #0 - cmp r0, #0 - ble _02074BC8 - mov fp, #2 - mov sl, #1 - mov r6, r8 - mov r5, r8 -_02074A88: - ldrh sb, [r7, #6] - cmp sb, #0 - beq _02074BB4 - tst sb, #1 - beq _02074B5C - ldrsb r0, [r7, #0x21] - ldrb r1, [r7, #0x1f] - cmp r0, #0 - movne r3, sl - moveq r3, fp - cmp r1, #4 - addls pc, pc, r1, lsl #2 - b _02074B50 -_02074ABC: ; jump table - b _02074AD0 ; case 0 - b _02074AD0 ; case 1 - b _02074AD0 ; case 2 - b _02074B0C ; case 3 - b _02074B34 ; case 4 -_02074AD0: - ldr r0, [r7, #0x34] - str r0, [sp] - ldr r0, [r7, #0x38] - str r0, [sp, #4] - ldr r0, [r7, #0x140] - str r0, [sp, #8] - str r6, [sp, #0xc] - ldr r0, [r7, #0x13c] - str r0, [sp, #0x10] - ldr r0, [r7, #0x144] - str r0, [sp, #0x14] - ldrh r0, [r7, #8] - ldr r2, [r7, #0x30] - bl sub_0207CA6C - b _02074B50 -_02074B0C: - ldr r0, [r7, #0x13c] - mov r3, #0 - str r0, [sp] - ldr r0, [r7, #0x144] - str r0, [sp, #4] - ldrh r0, [r7, #8] - ldrb r1, [r7, #0x25] - ldr r2, [r7, #0x140] - bl sub_0207CAB8 - b _02074B50 -_02074B34: - ldr r0, [r7, #0x144] - mov r2, #0 - str r0, [sp] - ldrh r0, [r7, #8] - ldr r1, [r7, #0x140] - ldr r3, [r7, #0x13c] - bl sub_0207CAE0 -_02074B50: - mov r0, r7 - bl DseVoice_FlagForActivation - b _02074BB0 -_02074B5C: - tst sb, #2 - beq _02074B70 - mov r0, r7 - bl DseVoice_FlagForDeactivation - mov sb, #0 -_02074B70: - tst sb, #0x10 - beq _02074B84 - ldrh r0, [r7, #0xa] - ldr r1, [r7, #0x13c] - bl sub_0207CA04 -_02074B84: - tst sb, #0x20 - beq _02074B9C - ldrh r0, [r7, #0xa] - ldr r1, [r7, #0x140] - mov r2, #0 - bl sub_0207CA24 -_02074B9C: - tst sb, #0x40 - beq _02074BB0 - ldrh r0, [r7, #0xa] - ldr r1, [r7, #0x144] - bl sub_0207CA4C -_02074BB0: - strh r5, [r7, #6] -_02074BB4: - ldrh r0, [r4, #0x2e] - add r8, r8, #1 - add r7, r7, #0x15c - cmp r8, r0 - blt _02074A88 -_02074BC8: - ldr r1, _02074C64 ; =_022B7A30 - ldr r2, _02074C6C ; =DRIVER_WORK - ldrh r0, [r1, #0x32] - strh r0, [r1, #0x30] - ldrb r1, [r2, #0x73a] - ldrb r2, [r2, #0x738] - orr r3, r0, r1 - orrs r3, r2, r3 - beq _02074C0C - mov r3, #0 - bl sub_0207C8B8 - ldr r1, _02074C6C ; =DRIVER_WORK - mov r2, #0 - strb r2, [r1, #0x738] - ldr r0, _02074C64 ; =_022B7A30 - strb r2, [r1, #0x73a] - strh r2, [r0, #0x32] -_02074C0C: - ldr r1, _02074C64 ; =_022B7A30 - ldr r0, _02074C6C ; =DRIVER_WORK - ldrh r4, [r1, #0x34] - ldrh r3, [r1, #0x36] - ldrb r1, [r0, #0x73b] - ldrb r2, [r0, #0x739] - orr r0, r4, r3 - orr r3, r1, r0 - orrs r3, r2, r3 - addeq sp, sp, #0x18 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r3, #0 - bl sub_0207C8E0 - ldr r1, _02074C6C ; =DRIVER_WORK - mov r2, #0 - strb r2, [r1, #0x739] - ldr r0, _02074C64 ; =_022B7A30 - strb r2, [r1, #0x73b] - strh r2, [r0, #0x36] - strh r2, [r0, #0x34] - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02074C64: .word _022B7A30 -_02074C68: .word _022B7A6C -_02074C6C: .word DRIVER_WORK - arm_func_end DseVoice_UpdateHardware diff --git a/asm/main_02071EB4.s b/asm/main_02071EB4.s new file mode 100644 index 00000000..54dd5fa9 --- /dev/null +++ b/asm/main_02071EB4.s @@ -0,0 +1,3630 @@ + .include "asm/macros.inc" + .include "main_02071EB4.inc" + + .text + + arm_func_start DseTrackEvent_TuningDeltaCoarse +DseTrackEvent_TuningDeltaCoarse: ; 0x02071EB4 + stmdb sp!, {r4, lr} + ldrsb r4, [r0] + ldrsh r1, [r3, #0x54] + ldr ip, _02071F38 ; =0x04000208 + mov r2, #0 + add r1, r1, r4, lsl #8 + mov r1, r1, lsl #0x10 + mov r4, r1, asr #0x10 + strh r4, [r3, #0x54] + ldr lr, [r3, #0xc4] + ldr r1, [r3, #0x1c] + ldrsh lr, [lr, #4] + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + add r1, r4, r1, asr #16 + add r1, lr, r1 + strh r1, [r3, #0x16] + ldrh r4, [ip] + strh r2, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _02071F24 +_02071F0C: + ldrh r1, [r2, #6] + orr r1, r1, #0x10 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02071F0C +_02071F24: + ldr r2, _02071F38 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r4, pc} + .align 2, 0 +_02071F38: .word 0x04000208 + arm_func_end DseTrackEvent_TuningDeltaCoarse + + arm_func_start DseTrackEvent_TuningDeltaFine +DseTrackEvent_TuningDeltaFine: ; 0x02071F3C + stmdb sp!, {r4, lr} + ldrsb r4, [r0] + ldrsh r1, [r3, #0x54] + ldr ip, _02071FC0 ; =0x04000208 + mov r2, #0 + add r1, r1, r4, lsl #2 + mov r1, r1, lsl #0x10 + mov r4, r1, asr #0x10 + strh r4, [r3, #0x54] + ldr lr, [r3, #0xc4] + ldr r1, [r3, #0x1c] + ldrsh lr, [lr, #4] + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + add r1, r4, r1, asr #16 + add r1, lr, r1 + strh r1, [r3, #0x16] + ldrh r4, [ip] + strh r2, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _02071FAC +_02071F94: + ldrh r1, [r2, #6] + orr r1, r1, #0x10 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02071F94 +_02071FAC: + ldr r2, _02071FC0 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r4, pc} + .align 2, 0 +_02071FC0: .word 0x04000208 + arm_func_end DseTrackEvent_TuningDeltaFine + + arm_func_start DseTrackEvent_TuningDeltaFull +DseTrackEvent_TuningDeltaFull: ; 0x02071FC4 + stmdb sp!, {r3, lr} + ldrb ip, [r0] + ldrb r1, [r0, #1] + ldrsh lr, [r3, #0x54] + ldr r2, _02072050 ; =0x04000208 + add r1, ip, r1, lsl #8 + add r1, lr, r1 + mov r1, r1, lsl #0x10 + mov lr, r1, asr #0x10 + strh lr, [r3, #0x54] + ldr ip, [r3, #0xc4] + ldr r1, [r3, #0x1c] + ldrsh ip, [ip, #4] + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + add r1, lr, r1, asr #16 + add r1, ip, r1 + strh r1, [r3, #0x16] + ldrh ip, [r2] + mov r1, #0 + strh r1, [r2] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _0207203C +_02072024: + ldrh r1, [r2, #6] + orr r1, r1, #0x10 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02072024 +_0207203C: + ldr r2, _02072050 ; =0x04000208 + add r0, r0, #2 + ldrh r1, [r2] + strh ip, [r2] + ldmia sp!, {r3, pc} + .align 2, 0 +_02072050: .word 0x04000208 + arm_func_end DseTrackEvent_TuningDeltaFull + + arm_func_start DseTrackEvent_TuningFade +DseTrackEvent_TuningFade: ; 0x02072054 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r3 + ldrb r1, [r6, #4] + ldrb r4, [r7] + ldrb r0, [r7, #1] + tst r1, #2 + ldrb r2, [r7, #2] + add r0, r4, r0, lsl #8 + mov r0, r0, lsl #0x10 + mov r5, r0, lsr #0x10 + ldr r4, [r6, #0xc4] + moveq r1, #0 + streq r1, [r6, #0x1c] + ldr r1, [r6, #0x1c] + mov r0, r2, lsl #0x18 + mov r1, r1, asr #0x10 + add r0, r1, r0, lsr #16 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r1, r0, lsl #0x10 + str r1, [r6, #0x24] + cmp r5, #0 + streq r1, [r6, #0x1c] + beq _020720D4 + ldr r0, [r6, #0x1c] + subs r0, r1, r0 + moveq r5, #0 + beq _020720D4 + mov r1, r5 + bl _s32_div_f + str r0, [r6, #0x20] +_020720D4: + strh r5, [r6, #0x28] + ldr r0, [r6, #0x1c] + ldrsh r1, [r6, #0x54] + mov r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + ldrsh r2, [r4, #4] + add r0, r1, r0, lsr #16 + ldr r1, _02072140 ; =0x04000208 + add r0, r2, r0 + strh r0, [r6, #0x16] + ldrh r3, [r1] + mov r0, #0 + strh r0, [r1] + ldr r1, [r6, #0xb4] + cmp r1, #0 + beq _0207212C +_02072114: + ldrh r0, [r1, #6] + orr r0, r0, #0x10 + strh r0, [r1, #6] + ldr r1, [r1, #0x154] + cmp r1, #0 + bne _02072114 +_0207212C: + ldr r2, _02072140 ; =0x04000208 + add r0, r7, #3 + ldrh r1, [r2] + strh r3, [r2] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02072140: .word 0x04000208 + arm_func_end DseTrackEvent_TuningFade + + arm_func_start DseTrackEvent_SetNoteRandomRegion +DseTrackEvent_SetNoteRandomRegion: ; 0x02072144 + ldrb r1, [r0] + ldrb ip, [r0, #1] + add r0, r0, #2 + mov r2, r1 + cmp r1, ip + movhi r2, ip + movhi ip, r1 + strb r2, [r3, #0xc] + strb ip, [r3, #0xd] + bx lr + arm_func_end DseTrackEvent_SetNoteRandomRegion + + arm_func_start DseTrackEvent_SetTuningJitterAmplitude +DseTrackEvent_SetTuningJitterAmplitude: ; 0x0207216C + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r0, r0, #2 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0xa] + bx lr + arm_func_end DseTrackEvent_SetTuningJitterAmplitude + + arm_func_start DseTrackEvent_SetKeyBend +DseTrackEvent_SetKeyBend: ; 0x02072184 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r2, [r4] + ldrb r1, [r4, #1] + mov r0, r3 + add r1, r1, r2, lsl #8 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + bl DseChannel_SetKeyBend + add r0, r4, #2 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetKeyBend + + arm_func_start DseTrackEvent_SetUnknown2 +DseTrackEvent_SetUnknown2: ; 0x020721B0 + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r0, r0, #2 + add r1, r1, r2, lsl #8 + strh r1, [r3, #0x56] + bx lr + arm_func_end DseTrackEvent_SetUnknown2 + + arm_func_start DseTrackEvent_SetKeyBendRange +DseTrackEvent_SetKeyBendRange: ; 0x020721C8 + ldrb r1, [r0], #1 + strb r1, [r3, #0x59] + bx lr + arm_func_end DseTrackEvent_SetKeyBendRange + + arm_func_start DseTrackEvent_SetupKeyBendLfo +DseTrackEvent_SetupKeyBendLfo: ; 0x020721D4 + stmdb sp!, {r3, r4, r5, lr} + ldrb r5, [r0] + ldrb r4, [r0, #1] + ldrb lr, [r0, #2] + ldrb ip, [r0, #3] + ldrb r2, [r0, #4] + mov r1, #1 + add r4, r5, r4, lsl #8 + strb r1, [r3, #0x75] + strb r1, [r3, #0x76] + mov r1, r4, lsl #0x10 + strb r2, [r3, #0x77] + mov r1, r1, asr #0x10 + str r1, [r3, #0x78] + add r1, lr, ip, lsl #8 + strh r1, [r3, #0x7c] + mov r1, #0 + strh r1, [r3, #0x7e] + strh r1, [r3, #0x80] + strb r1, [r3, #0x82] + add r0, r0, #5 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseTrackEvent_SetupKeyBendLfo + + arm_func_start DseTrackEvent_SetupKeyBendLfoEnvelope +DseTrackEvent_SetupKeyBendLfoEnvelope: ; 0x0207222C + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x7e] + ldrb r2, [r0, #2] + ldrb r1, [r0, #3] + add r0, r0, #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x80] + bx lr + arm_func_end DseTrackEvent_SetupKeyBendLfoEnvelope + + arm_func_start DseTrackEvent_UseKeyBendLfo +DseTrackEvent_UseKeyBendLfo: ; 0x02072254 + ldrb r1, [r0] + add r0, r0, #1 + cmp r1, #2 + moveq r1, #1 + strb r1, [r3, #0x75] + cmp r1, #0 + moveq r1, #0 + movne r1, #1 + strb r1, [r3, #0x76] + bx lr + arm_func_end DseTrackEvent_UseKeyBendLfo + + arm_func_start DseTrackEvent_SetVolume +DseTrackEvent_SetVolume: ; 0x0207227C + stmdb sp!, {r3, r4, r5, lr} + ldrsb r4, [r0] + mov r5, #0 + ldr r2, _02072308 ; =0x82061029 + mov r1, r4, lsl #0x10 + str r1, [r3, #0x34] + str r1, [r3, #0x2c] + strh r5, [r3, #0x38] + ldr ip, [r3, #0xc4] + ldrb r1, [r3, #0x50] + ldrsb lr, [ip, #8] + ldr ip, _0207230C ; =0x04000208 + smulbb r1, r4, r1 + mul r4, lr, r1 + smull r1, lr, r2, r4 + add lr, r4, lr + mov r1, r4, lsr #0x1f + add lr, r1, lr, asr #13 + strh lr, [r3, #0x18] + ldrh r4, [ip] + strh r5, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _020722F4 +_020722DC: + ldrh r1, [r2, #6] + orr r1, r1, #0x20 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _020722DC +_020722F4: + ldr r2, _0207230C ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02072308: .word 0x82061029 +_0207230C: .word 0x04000208 + arm_func_end DseTrackEvent_SetVolume + + arm_func_start DseTrackEvent_VolumeDelta +DseTrackEvent_VolumeDelta: ; 0x02072310 + stmdb sp!, {r3, r4, r5, lr} + ldrsb r2, [r0] + ldr r1, [r3, #0x2c] + add r4, r2, r1, asr #16 + cmp r4, #0x7f + movgt r4, #0x7f + bgt _02072334 + cmp r4, #0 + movlt r4, #0 +_02072334: + mov r1, r4, lsl #0x10 + str r1, [r3, #0x34] + str r1, [r3, #0x2c] + mov r5, #0 + strh r5, [r3, #0x38] + ldrb r1, [r3, #0x50] + ldr ip, [r3, #0xc4] + ldr r2, _020723B8 ; =0x82061029 + mul r1, r4, r1 + ldrsb lr, [ip, #8] + ldr ip, _020723BC ; =0x04000208 + mul r4, lr, r1 + smull r1, lr, r2, r4 + add lr, r4, lr + mov r1, r4, lsr #0x1f + add lr, r1, lr, asr #13 + strh lr, [r3, #0x18] + ldrh r4, [ip] + strh r5, [ip] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _020723A4 +_0207238C: + ldrh r1, [r2, #6] + orr r1, r1, #0x20 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _0207238C +_020723A4: + ldr r2, _020723BC ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020723B8: .word 0x82061029 +_020723BC: .word 0x04000208 + arm_func_end DseTrackEvent_VolumeDelta + + arm_func_start DseTrackEvent_VolumeFade +DseTrackEvent_VolumeFade: ; 0x020723C0 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + ldrsb r1, [r5, #2] + ldrb r2, [r5] + ldrb r0, [r5, #1] + mov r4, r3 + mov r1, r1, lsl #0x10 + add r0, r2, r0, lsl #8 + mov r0, r0, lsl #0x10 + str r1, [r4, #0x34] + movs r6, r0, lsr #0x10 + streq r1, [r4, #0x2c] + beq _02072410 + ldr r0, [r4, #0x2c] + subs r0, r1, r0 + moveq r6, #0 + beq _02072410 + mov r1, r6 + bl _s32_div_f + str r0, [r4, #0x30] +_02072410: + strh r6, [r4, #0x38] + add r0, r5, #3 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseTrackEvent_VolumeFade + + arm_func_start DseTrackEvent_SetExpression +DseTrackEvent_SetExpression: ; 0x0207241C + stmdb sp!, {r3, r4, r5, lr} + ldrb r4, [r0] + ldr r2, _020724A0 ; =0x82061029 + ldr lr, _020724A4 ; =0x04000208 + strb r4, [r3, #0x50] + ldr r1, [r3, #0x2c] + ldr ip, [r3, #0xc4] + mov r1, r1, asr #0x10 + mul r4, r1, r4 + ldrsb r1, [ip, #8] + mov ip, #0 + mul r4, r1, r4 + smull r1, r5, r2, r4 + add r5, r4, r5 + mov r1, r4, lsr #0x1f + add r5, r1, r5, asr #13 + strh r5, [r3, #0x18] + ldrh r4, [lr] + strh ip, [lr] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _0207248C +_02072474: + ldrh r1, [r2, #6] + orr r1, r1, #0x20 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02072474 +_0207248C: + ldr r2, _020724A4 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh r4, [r2] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020724A0: .word 0x82061029 +_020724A4: .word 0x04000208 + arm_func_end DseTrackEvent_SetExpression + + arm_func_start DseTrackEvent_SetupVolumeLfo +DseTrackEvent_SetupVolumeLfo: ; 0x020724A8 + stmdb sp!, {r3, r4, r5, lr} + ldrb r5, [r0] + ldrb r1, [r0, #1] + ldrb r4, [r0, #2] + ldrb lr, [r0, #3] + ldrb ip, [r0, #4] + mov r2, #1 + add r1, r5, r1, lsl #8 + mov r1, r1, lsl #0x10 + strb r2, [r3, #0x85] + mov r2, #2 + strb r2, [r3, #0x86] + strb ip, [r3, #0x87] + mov r1, r1, asr #0x10 + str r1, [r3, #0x88] + add r1, r4, lr, lsl #8 + strh r1, [r3, #0x8c] + mov r1, #0 + strh r1, [r3, #0x8e] + strh r1, [r3, #0x90] + strb r1, [r3, #0x92] + add r0, r0, #5 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseTrackEvent_SetupVolumeLfo + + arm_func_start DseTrackEvent_SetupVolumeLfoEnvelope +DseTrackEvent_SetupVolumeLfoEnvelope: ; 0x02072504 + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x8e] + ldrb r2, [r0, #2] + ldrb r1, [r0, #3] + add r0, r0, #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x90] + bx lr + arm_func_end DseTrackEvent_SetupVolumeLfoEnvelope + + arm_func_start DseTrackEvent_UseVolumeLfo +DseTrackEvent_UseVolumeLfo: ; 0x0207252C + ldrb r1, [r0] + add r0, r0, #1 + cmp r1, #2 + moveq r1, #1 + strb r1, [r3, #0x85] + cmp r1, #0 + moveq r1, #0 + movne r1, #2 + strb r1, [r3, #0x86] + bx lr + arm_func_end DseTrackEvent_UseVolumeLfo + + arm_func_start DseTrackEvent_SetPan +DseTrackEvent_SetPan: ; 0x02072554 + stmdb sp!, {r3, lr} + ldrb lr, [r0] + mov ip, #0 + cmp lr, #0x7f + movgt lr, #0x7f + mov r1, lr, lsl #0x10 + str r1, [r3, #0x44] + str r1, [r3, #0x3c] + strh ip, [r3, #0x48] + ldr r2, [r3, #0xc4] + ldr r1, _020725D0 ; =0x04000208 + ldrsb r2, [r2, #7] + sub r2, r2, #0x40 + add r2, lr, r2 + strh r2, [r3, #0x1a] + ldrh lr, [r1] + strh ip, [r1] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _020725BC +_020725A4: + ldrh r1, [r2, #6] + orr r1, r1, #0x40 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _020725A4 +_020725BC: + ldr r2, _020725D0 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh lr, [r2] + ldmia sp!, {r3, pc} + .align 2, 0 +_020725D0: .word 0x04000208 + arm_func_end DseTrackEvent_SetPan + + arm_func_start DseTrackEvent_PanDelta +DseTrackEvent_PanDelta: ; 0x020725D4 + stmdb sp!, {r3, lr} + ldrsb r2, [r0] + ldr r1, [r3, #0x3c] + add lr, r2, r1, asr #16 + cmp lr, #0x7f + movgt lr, #0x7f + bgt _020725F8 + cmp lr, #0 + movlt lr, #0 +_020725F8: + mov r1, lr, lsl #0x10 + str r1, [r3, #0x44] + str r1, [r3, #0x3c] + mov ip, #0 + strh ip, [r3, #0x48] + ldr r2, [r3, #0xc4] + ldr r1, _02072664 ; =0x04000208 + ldrsb r2, [r2, #7] + sub r2, r2, #0x40 + add r2, lr, r2 + strh r2, [r3, #0x1a] + ldrh lr, [r1] + strh ip, [r1] + ldr r2, [r3, #0xb4] + cmp r2, #0 + beq _02072650 +_02072638: + ldrh r1, [r2, #6] + orr r1, r1, #0x40 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02072638 +_02072650: + ldr r2, _02072664 ; =0x04000208 + add r0, r0, #1 + ldrh r1, [r2] + strh lr, [r2] + ldmia sp!, {r3, pc} + .align 2, 0 +_02072664: .word 0x04000208 + arm_func_end DseTrackEvent_PanDelta + + arm_func_start DseTrackEvent_PanFade +DseTrackEvent_PanFade: ; 0x02072668 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + ldrsb r1, [r5, #2] + ldrb r2, [r5] + ldrb r0, [r5, #1] + mov r4, r3 + mov r1, r1, lsl #0x10 + add r0, r2, r0, lsl #8 + mov r0, r0, lsl #0x10 + str r1, [r4, #0x44] + movs r6, r0, lsr #0x10 + streq r1, [r4, #0x3c] + beq _020726B8 + ldr r0, [r4, #0x3c] + subs r0, r1, r0 + moveq r6, #0 + beq _020726B8 + mov r1, r6 + bl _s32_div_f + str r0, [r4, #0x40] +_020726B8: + strh r6, [r4, #0x48] + add r0, r5, #3 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseTrackEvent_PanFade + + arm_func_start DseTrackEvent_SetupPanLfo +DseTrackEvent_SetupPanLfo: ; 0x020726C4 + stmdb sp!, {r3, r4, r5, lr} + ldrb r5, [r0] + ldrb r1, [r0, #1] + ldrb r4, [r0, #2] + ldrb lr, [r0, #3] + ldrb ip, [r0, #4] + mov r2, #1 + add r1, r5, r1, lsl #8 + mov r1, r1, lsl #0x10 + strb r2, [r3, #0x95] + mov r2, #3 + strb r2, [r3, #0x96] + strb ip, [r3, #0x97] + mov r1, r1, asr #0x10 + str r1, [r3, #0x98] + add r1, r4, lr, lsl #8 + strh r1, [r3, #0x9c] + mov r1, #0 + strh r1, [r3, #0x9e] + strh r1, [r3, #0xa0] + strb r1, [r3, #0xa2] + add r0, r0, #5 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseTrackEvent_SetupPanLfo + + arm_func_start DseTrackEvent_SetupPanLfoEnvelope +DseTrackEvent_SetupPanLfoEnvelope: ; 0x02072720 + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r1, r2, r1, lsl #8 + strh r1, [r3, #0x9e] + ldrb r2, [r0, #2] + ldrb r1, [r0, #3] + add r0, r0, #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0xa0] + bx lr + arm_func_end DseTrackEvent_SetupPanLfoEnvelope + + arm_func_start DseTrackEvent_UsePanLfo +DseTrackEvent_UsePanLfo: ; 0x02072748 + ldrb r1, [r0] + add r0, r0, #1 + cmp r1, #2 + moveq r1, #1 + strb r1, [r3, #0x95] + cmp r1, #0 + moveq r1, #0 + movne r1, #3 + strb r1, [r3, #0x96] + bx lr + arm_func_end DseTrackEvent_UsePanLfo + + arm_func_start DseTrackEvent_SetupLfo +DseTrackEvent_SetupLfo: ; 0x02072770 + stmdb sp!, {r4, lr} + ldrb r2, [r0] + ldrb r1, [r0, #1] + ldrb ip, [r3, #0x61] + add r3, r3, #0x74 + add r1, r2, r1, lsl #8 + mov r1, r1, lsl #0x10 + ldrb r4, [r0, #2] + ldrb lr, [r0, #3] + ldrb r2, [r0, #4] + add r3, r3, ip, lsl #4 + mov r1, r1, asr #0x10 + strb r2, [r3, #3] + str r1, [r3, #4] + add r1, r4, lr, lsl #8 + strh r1, [r3, #8] + mov r1, #0 + strh r1, [r3, #0xa] + strh r1, [r3, #0xc] + strb r1, [r3, #0xe] + add r0, r0, #5 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_SetupLfo + + arm_func_start DseTrackEvent_SetupLfoEnvelope +DseTrackEvent_SetupLfoEnvelope: ; 0x020727C8 + ldrb ip, [r3, #0x61] + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r3, r3, #0x74 + add r3, r3, ip, lsl #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0xa] + ldrb r2, [r0, #2] + ldrb r1, [r0, #3] + add r0, r0, #4 + add r1, r2, r1, lsl #8 + strh r1, [r3, #0xc] + bx lr + arm_func_end DseTrackEvent_SetupLfoEnvelope + + arm_func_start DseTrackEvent_SetLfoParameter +DseTrackEvent_SetLfoParameter: ; 0x020727FC + ldrb r1, [r3, #0x61] + ldrb ip, [r0] + add r2, r3, #0x74 + add r1, r2, r1, lsl #4 + ldrb r2, [r0, #1] + cmp ip, #0xa + addls pc, pc, ip, lsl #2 + b _02072930 +_0207281C: ; jump table + b _02072930 ; case 0 + b _02072848 ; case 1 + b _02072850 ; case 2 + b _02072858 ; case 3 + b _02072860 ; case 4 + b _02072868 ; case 5 + b _020728E0 ; case 6 + b _020728EC ; case 7 + b _020728FC ; case 8 + b _02072910 ; case 9 + b _02072924 ; case 10 +_02072848: + strb r2, [r3, #0x61] + b _02072930 +_02072850: + strb r2, [r1, #1] + b _02072930 +_02072858: + strb r2, [r1, #2] + b _02072930 +_02072860: + strb r2, [r1, #3] + b _02072930 +_02072868: + ldrb r3, [r1, #2] + cmp r3, #4 + addls pc, pc, r3, lsl #2 + b _020728CC +_02072878: ; jump table + b _020728CC ; case 0 + b _0207288C ; case 1 + b _0207289C ; case 2 + b _020728AC ; case 3 + b _020728BC ; case 4 +_0207288C: + mov r3, #0xa + mul r3, r2, r3 + mov r2, r3 + b _020728D8 +_0207289C: + mvn r3, #0x13 + mul r3, r2, r3 + mov r2, r3 + b _020728D8 +_020728AC: + mov r3, #0x14 + mul r3, r2, r3 + mov r2, r3 + b _020728D8 +_020728BC: + mov r3, #0xa + mul r3, r2, r3 + mov r2, r3 + b _020728D8 +_020728CC: + mov r3, #0x14 + mul r3, r2, r3 + mov r2, r3 +_020728D8: + str r2, [r1, #4] + b _02072930 +_020728E0: + add r2, r2, r2, lsl #2 + strh r2, [r1, #8] + b _02072930 +_020728EC: + mov r3, #0x14 + mul r3, r2, r3 + strh r3, [r1, #0xa] + b _02072930 +_020728FC: + ldrh r3, [r1, #0xa] + and r3, r3, #0xff00 + orr r2, r3, r2 + strh r2, [r1, #0xa] + b _02072930 +_02072910: + ldrh r3, [r1, #0xa] + and r3, r3, #0xff + orr r2, r3, r2, lsl #8 + strh r2, [r1, #0xa] + b _02072930 +_02072924: + mov r3, #0x14 + mul r3, r2, r3 + strh r3, [r1, #0xc] +_02072930: + add r0, r0, #2 + bx lr + arm_func_end DseTrackEvent_SetLfoParameter + + arm_func_start DseTrackEvent_UseLfo +DseTrackEvent_UseLfo: ; 0x02072938 + stmdb sp!, {r3, lr} + ldrb ip, [r0, #1] + ldrb r2, [r0] + ldrb lr, [r0, #2] + add r1, r3, #0x74 + cmp ip, #2 + strb r2, [r3, #0x61] + add r1, r1, r2, lsl #4 + moveq ip, #1 + strb ip, [r1, #1] + strb lr, [r1, #2] + add r0, r0, #3 + ldmia sp!, {r3, pc} + arm_func_end DseTrackEvent_UseLfo + + arm_func_start DseTrackEvent_Signal +DseTrackEvent_Signal: ; 0x0207296C + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r2, [r4] + mov ip, r1 + mov r1, #8 + strb r2, [ip, #0x16] + ldr r0, [ip, #0x28] + ldr r3, [ip, #0xa0] + ldr ip, [ip, #0x9c] + blx ip + add r0, r4, #1 + ldmia sp!, {r4, pc} + arm_func_end DseTrackEvent_Signal + + arm_func_start DseTrackEvent_Dummy2Bytes2 +DseTrackEvent_Dummy2Bytes2: ; 0x0207299C + add r0, r0, #2 + bx lr + arm_func_end DseTrackEvent_Dummy2Bytes2 + + arm_func_start sub_020729A4 +sub_020729A4: ; 0x020729A4 + ldr r0, _020729B4 ; =_022B9584 + mov r1, #0 + str r1, [r0] + bx lr + .align 2, 0 +_020729B4: .word _022B9584 + arm_func_end sub_020729A4 + + arm_func_start sub_020729B8 +sub_020729B8: ; 0x020729B8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr sb, _02072BB4 ; =_022B9584 + ldr r8, [sb] + ldrb r6, [r8, #0x86] + cmp r6, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r5, [r8, #0x85] + mov r1, #0 + cmp r6, #0 + str r1, [sp] + beq _02072B98 + mov fp, #3 + mov r1, #2 + mov r2, r1 + mov r3, fp + mov ip, r1 + mov lr, fp + mov r4, fp +_02072A04: + ldrb sl, [r8, #0x88] + add r7, r8, r5 + add r5, r5, #1 + sub r6, r6, #1 + and r5, r5, #0xff + cmp r5, #0x80 + moveq r5, #0 + ldrb r7, [r7, #4] + and r6, r6, #0xff + cmp sl, #0 + bne _02072B28 + tst r7, #0x80 + bne _02072A4C + add sl, sl, #1 + strb sl, [r8, #0x88] + ldr r8, [sb] + strb r7, [r8, #0x8c] + b _02072B30 +_02072A4C: + and sl, r7, #0xf0 + strb sl, [r8, #0x8a] + and r8, r7, #0xf + ldr r7, [sb] + strb r8, [r7, #0x8b] + ldr r7, [sb] + ldrb r8, [r7, #0x8a] + cmp r8, #0xc0 + bgt _02072AA8 + bge _02072AF8 + cmp r8, #0x90 + bgt _02072A8C + bge _02072AE0 + cmp r8, #0x80 + beq _02072AD8 + b _02072B1C +_02072A8C: + cmp r8, #0xa0 + bgt _02072A9C + beq _02072AE8 + b _02072B1C +_02072A9C: + cmp r8, #0xb0 + beq _02072AF0 + b _02072B1C +_02072AA8: + cmp r8, #0xe0 + bgt _02072AC0 + bge _02072B08 + cmp r8, #0xd0 + beq _02072B00 + b _02072B1C +_02072AC0: + cmp r8, #0xf0 + bgt _02072AD0 + beq _02072B10 + b _02072B1C +_02072AD0: + cmp r8, #0xff + b _02072B1C +_02072AD8: + strb r4, [r7, #0x87] + b _02072B30 +_02072AE0: + strb lr, [r7, #0x87] + b _02072B30 +_02072AE8: + strb ip, [r7, #0x87] + b _02072B30 +_02072AF0: + strb r3, [r7, #0x87] + b _02072B30 +_02072AF8: + strb r2, [r7, #0x87] + b _02072B30 +_02072B00: + strb r1, [r7, #0x87] + b _02072B30 +_02072B08: + strb fp, [r7, #0x87] + b _02072B30 +_02072B10: + mov r8, #3 + strb r8, [r7, #0x87] + b _02072B30 +_02072B1C: + mov r8, #0 + strb r8, [r7, #0x87] + b _02072B30 +_02072B28: + add r8, r8, sl + strb r7, [r8, #0x8b] +_02072B30: + ldr r7, [sb] + ldrb r8, [r7, #0x88] + add r8, r8, #1 + strb r8, [r7, #0x88] + ldr r8, [sb] + ldrb sl, [r8, #0x88] + ldrb r7, [r8, #0x87] + cmp sl, r7 + bne _02072B90 + mov r2, #0 + ldr r1, _02072BB4 ; =_022B9584 + strb r2, [r8, #0x88] + ldr r3, [r1] + mov r1, #1 + str r1, [sp] + ldrb r2, [r3, #0x8a] + ldrb r1, [r3, #0x8b] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #0x8c] + ldrb r1, [r3, #0x8d] + strb r2, [r0, #2] + strb r1, [r0, #3] + b _02072B98 +_02072B90: + cmp r6, #0 + bne _02072A04 +_02072B98: + ldr r1, _02072BB4 ; =_022B9584 + ldr r0, [sp] + ldr r2, [r1] + strb r6, [r2, #0x86] + ldr r1, [r1] + strb r5, [r1, #0x85] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02072BB4: .word _022B9584 + arm_func_end sub_020729B8 + + arm_func_start sub_02072BB8 +sub_02072BB8: ; 0x02072BB8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + ldr r0, _02072D94 ; =_022B9584 + ldr r0, [r0] + ldr r4, [r0] + cmp r4, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r0, sp, #8 + bl sub_020729B8 + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add sb, r4, #0x10 + mov r6, #0 + ldr r4, _02072D98 ; =_020B0D50 + add r7, sp, #0 + mov r5, #1 + mov r8, r6 + mov fp, #0xc8 +_02072C08: + ldrb r1, [sp, #9] + ldrb r0, [sp, #8] + mla sl, r1, fp, sb + cmp r0, #0xc0 + bgt _02072C4C + bge _02072D4C + cmp r0, #0x90 + bgt _02072C38 + bge _02072CC0 + cmp r0, #0x80 + beq _02072C8C + b _02072D7C +_02072C38: + cmp r0, #0xa0 + ble _02072D7C + cmp r0, #0xb0 + beq _02072D2C + b _02072D7C +_02072C4C: + cmp r0, #0xf0 + bgt _02072C6C + bge _02072D7C + cmp r0, #0xd0 + ble _02072D7C + cmp r0, #0xe0 + beq _02072D5C + b _02072D7C +_02072C6C: + cmp r0, #0xf7 + ble _02072D7C + cmp r0, #0xff + bgt _02072D7C + cmp r0, #0xfe + blt _02072D7C + cmpne r0, #0xff + b _02072D7C +_02072C8C: + ldrb r1, [sp, #0xa] + ldrb r0, [sp, #0xb] + str r8, [sp, #4] + strb r1, [sp, #2] + strb r0, [sp, #3] + strb r8, [sp] + ldrb r0, [sl, #4] + tst r0, #1 + bne _02072D7C + mov r0, sl + mov r1, r7 + bl DseChannel_ReleaseNoteInternal + b _02072D7C +_02072CC0: + ldrb r0, [sp, #0xb] + ldrb r1, [sp, #0xa] + str r6, [sp, #4] + strb r0, [sp, #3] + strb r1, [sp, #2] + tst r0, #0xff + beq _02072D0C + mov r0, sl + mov r1, r7 + strb r5, [sp] + bl DseChannel_ReleaseNote + mov r0, sl + mov r1, r7 + bl DseChannel_AllocateNote + movs r1, r0 + beq _02072D7C + mov r0, sl + bl DseVoice_PlayNote + b _02072D7C +_02072D0C: + strb r6, [sp] + ldrb r0, [sl, #4] + tst r0, #1 + bne _02072D7C + mov r0, sl + mov r1, r7 + bl DseChannel_ReleaseNoteInternal + b _02072D7C +_02072D2C: + ldrb r0, [sp, #0xa] + ldr r2, [r4, r0, lsl #2] + cmp r2, #0 + beq _02072D7C + ldrb r1, [sp, #0xb] + mov r0, sl + blx r2 + b _02072D7C +_02072D4C: + ldrb r1, [sp, #0xa] + mov r0, sl + bl DseChannel_SetInstrument + b _02072D7C +_02072D5C: + ldrb r2, [sp, #0xa] + ldrb r1, [sp, #0xb] + mov r0, sl + add r1, r2, r1, lsl #7 + sub r1, r1, #0x2000 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + bl DseChannel_SetKeyBend +_02072D7C: + add r0, sp, #8 + bl sub_020729B8 + cmp r0, #0 + bne _02072C08 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02072D94: .word _022B9584 +_02072D98: .word _020B0D50 + arm_func_end sub_02072BB8 + + arm_func_start sub_02072D9C +sub_02072D9C: ; 0x02072D9C + ldrh r2, [r0, #0xe] + ldr ip, _02072DB8 ; =DseChannel_SetBank + and r2, r2, #0xff + add r1, r2, r1, lsl #8 + strh r1, [r0, #0xe] + ldrh r1, [r0, #0xe] + bx ip + .align 2, 0 +_02072DB8: .word DseChannel_SetBank + arm_func_end sub_02072D9C + + arm_func_start sub_02072DBC +sub_02072DBC: ; 0x02072DBC + ldrh r2, [r0, #0xe] + ldr ip, _02072DD8 ; =DseChannel_SetBank + bic r2, r2, #0xff + add r1, r2, r1 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bx ip + .align 2, 0 +_02072DD8: .word DseChannel_SetBank + arm_func_end sub_02072DBC + + arm_func_start sub_02072DDC +sub_02072DDC: ; 0x02072DDC + mov r1, r1, lsl #0x18 + mov r1, r1, asr #0x18 + ldr ip, _02072DF0 ; =DseChannel_SetLfoConstEnvelopeLevel + strb r1, [r0, #0x51] + bx ip + .align 2, 0 +_02072DF0: .word DseChannel_SetLfoConstEnvelopeLevel + arm_func_end sub_02072DDC + + arm_func_start sub_02072DF4 +sub_02072DF4: ; 0x02072DF4 + mov r2, #0xa + mul r2, r1, r2 + strh r2, [r0, #0x56] + bx lr + arm_func_end sub_02072DF4 + + arm_func_start sub_02072E04 +sub_02072E04: ; 0x02072E04 + stmdb sp!, {r4, lr} + mov r2, r1, lsl #0x10 + str r2, [r0, #0x34] + str r2, [r0, #0x2c] + mov r4, #0 + strh r4, [r0, #0x38] + ldrb r3, [r0, #0x50] + ldr lr, [r0, #0xc4] + ldr r2, _02072E88 ; =0x82061029 + mul ip, r1, r3 + ldrsb r1, [lr, #8] + ldr r3, _02072E8C ; =0x04000208 + mul ip, r1, ip + smull r1, lr, r2, ip + add lr, ip, lr + mov r1, ip, lsr #0x1f + add lr, r1, lr, asr #13 + strh lr, [r0, #0x18] + ldrh r2, [r3] + strh r4, [r3] + ldr r1, [r0, #0xb4] + cmp r1, #0 + beq _02072E78 +_02072E60: + ldrh r0, [r1, #6] + orr r0, r0, #0x20 + strh r0, [r1, #6] + ldr r1, [r1, #0x154] + cmp r1, #0 + bne _02072E60 +_02072E78: + ldr r1, _02072E8C ; =0x04000208 + ldrh r0, [r1] + strh r2, [r1] + ldmia sp!, {r4, pc} + .align 2, 0 +_02072E88: .word 0x82061029 +_02072E8C: .word 0x04000208 + arm_func_end sub_02072E04 + + arm_func_start sub_02072E90 +sub_02072E90: ; 0x02072E90 + mov r1, r1, lsl #0x10 + str r1, [r0, #0x44] + str r1, [r0, #0x3c] + mov r2, #0 + ldr r1, _02072EE4 ; =0x04000208 + strh r2, [r0, #0x48] + ldrh r3, [r1] + strh r2, [r1] + ldr r1, [r0, #0xb4] + cmp r1, #0 + beq _02072ED4 +_02072EBC: + ldrh r0, [r1, #6] + orr r0, r0, #0x40 + strh r0, [r1, #6] + ldr r1, [r1, #0x154] + cmp r1, #0 + bne _02072EBC +_02072ED4: + ldr r1, _02072EE4 ; =0x04000208 + ldrh r0, [r1] + strh r3, [r1] + bx lr + .align 2, 0 +_02072EE4: .word 0x04000208 + arm_func_end sub_02072E90 + + arm_func_start sub_02072EE8 +sub_02072EE8: ; 0x02072EE8 + ldr r2, _02072F30 ; =0x04000208 + strb r1, [r0, #0x50] + ldrh r3, [r2] + mov r1, #0 + strh r1, [r2] + ldr r1, [r0, #0xb4] + cmp r1, #0 + beq _02072F20 +_02072F08: + ldrh r0, [r1, #6] + orr r0, r0, #0x20 + strh r0, [r1, #6] + ldr r1, [r1, #0x154] + cmp r1, #0 + bne _02072F08 +_02072F20: + ldr r1, _02072F30 ; =0x04000208 + ldrh r0, [r1] + strh r3, [r1] + bx lr + .align 2, 0 +_02072F30: .word 0x04000208 + arm_func_end sub_02072EE8 + + arm_func_start sub_02072F34 +sub_02072F34: ; 0x02072F34 + strb r1, [r0, #0x58] + bx lr + arm_func_end sub_02072F34 + + arm_func_start sub_02072F3C +sub_02072F3C: ; 0x02072F3C + stmdb sp!, {r3, lr} + cmp r1, #0x40 + ldrb r1, [r0, #4] + orrhs r1, r1, #1 + strhsb r1, [r0, #4] + ldmhsia sp!, {r3, pc} + bic r1, r1, #1 + strb r1, [r0, #4] + bl DseVoice_ReleaseHeld + ldmia sp!, {r3, pc} + arm_func_end sub_02072F3C + + arm_func_start sub_02072F64 +sub_02072F64: ; 0x02072F64 + bx lr + arm_func_end sub_02072F64 + + arm_func_start sub_02072F68 +sub_02072F68: ; 0x02072F68 + bx lr + arm_func_end sub_02072F68 + + arm_func_start sub_02072F6C +sub_02072F6C: ; 0x02072F6C + bx lr + arm_func_end sub_02072F6C + + arm_func_start sub_02072F70 +sub_02072F70: ; 0x02072F70 + bx lr + arm_func_end sub_02072F70 + + arm_func_start sub_02072F74 +sub_02072F74: ; 0x02072F74 + strb r1, [r0, #0x5c] + mov r1, #1 + strb r1, [r0, #0x60] + bx lr + arm_func_end sub_02072F74 + + arm_func_start sub_02072F84 +sub_02072F84: ; 0x02072F84 + strb r1, [r0, #0x5a] + mov r1, #0 + strb r1, [r0, #0x60] + bx lr + arm_func_end sub_02072F84 + + arm_func_start sub_02072F94 +sub_02072F94: ; 0x02072F94 + strb r1, [r0, #0x5b] + mov r1, #0 + strb r1, [r0, #0x60] + bx lr + arm_func_end sub_02072F94 + + arm_func_start sub_02072FA4 +sub_02072FA4: ; 0x02072FA4 + bx lr + arm_func_end sub_02072FA4 + + arm_func_start sub_02072FA8 +sub_02072FA8: ; 0x02072FA8 + bx lr + arm_func_end sub_02072FA8 + + arm_func_start sub_02072FAC +sub_02072FAC: ; 0x02072FAC + stmdb sp!, {r3, lr} + ldr r0, _02072FD4 ; =_022B9584 + ldr r0, [r0] + ldr r0, [r0] + bl DseSynth_StopChannels + ldr r0, _02072FD4 ; =_022B9584 + ldr r0, [r0] + ldr r0, [r0] + bl DseSynth_ClearHeldNotes + ldmia sp!, {r3, pc} + .align 2, 0 +_02072FD4: .word _022B9584 + arm_func_end sub_02072FAC + + arm_func_start sub_02072FD8 +sub_02072FD8: ; 0x02072FD8 + ldr r0, _02072FF4 ; =_022B9584 + mov r1, #0 + ldr r0, [r0] + ldr ip, _02072FF8 ; =DseSynth_SetBankAndSequence + mov r2, r1 + ldr r0, [r0] + bx ip + .align 2, 0 +_02072FF4: .word _022B9584 +_02072FF8: .word DseSynth_SetBankAndSequence + arm_func_end sub_02072FD8 + + arm_func_start sub_02072FFC +sub_02072FFC: ; 0x02072FFC + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + bl DseChannel_DeallocateVoices + ldr r1, _02073074 ; =0x04000208 + mov r0, #0 + ldrh r5, [r1] + strh r0, [r1] + ldr lr, [r4, #0xb8] + cmp lr, #0 + ldreqh r0, [r1] + streqh r5, [r1] + ldmeqia sp!, {r3, r4, r5, pc} + mov ip, lr + mvn r1, #0 + mov r3, r0 +_02073038: + str r1, [lr, #4] + strb r3, [ip, #1] + ldr r0, [ip, #8] + cmp r0, #0 + movne ip, r0 + bne _02073038 + ldr r0, _02073078 ; =DRIVER_WORK + ldr r1, _02073074 ; =0x04000208 + ldr r2, [r0, #0x650] + str r2, [ip, #8] + str lr, [r0, #0x650] + str r3, [r4, #0xb8] + ldrh r0, [r1] + strh r5, [r1] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02073074: .word 0x04000208 +_02073078: .word DRIVER_WORK + arm_func_end sub_02072FFC + + arm_func_start sub_0207307C +sub_0207307C: ; 0x0207307C + mov r1, #0 + strb r1, [r0, #7] + bx lr + arm_func_end sub_0207307C + + arm_func_start sub_02073088 +sub_02073088: ; 0x02073088 + mov r1, #1 + strb r1, [r0, #7] + bx lr + arm_func_end sub_02073088 + + arm_func_start sub_02073094 +sub_02073094: ; 0x02073094 + ldr ip, _020730A4 ; =SoundEnvelopeParameters_CheckValidity + strb r1, [r0, #0x72] + add r0, r0, #0x64 + bx ip + .align 2, 0 +_020730A4: .word SoundEnvelopeParameters_CheckValidity + arm_func_end sub_02073094 + + arm_func_start sub_020730A8 +sub_020730A8: ; 0x020730A8 + ldr ip, _020730B8 ; =SoundEnvelopeParameters_CheckValidity + strb r1, [r0, #0x6d] + add r0, r0, #0x64 + bx ip + .align 2, 0 +_020730B8: .word SoundEnvelopeParameters_CheckValidity + arm_func_end sub_020730A8 + + arm_func_start sub_020730BC +sub_020730BC: ; 0x020730BC + ldr ip, _020730CC ; =SoundEnvelopeParameters_CheckValidity + strb r1, [r0, #0x6e] + add r0, r0, #0x64 + bx ip + .align 2, 0 +_020730CC: .word SoundEnvelopeParameters_CheckValidity + arm_func_end sub_020730BC + + arm_func_start sub_020730D0 +sub_020730D0: ; 0x020730D0 + ldr ip, _020730E0 ; =SoundEnvelopeParameters_CheckValidity + strb r1, [r0, #0x71] + add r0, r0, #0x64 + bx ip + .align 2, 0 +_020730E0: .word SoundEnvelopeParameters_CheckValidity + arm_func_end sub_020730D0 + + arm_func_start sub_020730E4 +sub_020730E4: ; 0x020730E4 + ldrb r2, [r0, #0x61] + add r1, r1, r1, lsl #2 + add r0, r0, r2, lsl #4 + strh r1, [r0, #0x7c] + bx lr + arm_func_end sub_020730E4 + + arm_func_start sub_020730F8 +sub_020730F8: ; 0x020730F8 + and r3, r1, #2 + add r2, r0, #0x74 + strb r3, [r0, #0x61] + add r2, r2, r3, lsl #4 + mov r0, r1, asr #2 + strb r0, [r2, #1] + add r0, r3, #1 + strb r0, [r2, #2] + bx lr + arm_func_end sub_020730F8 + + arm_func_start sub_0207311C +sub_0207311C: ; 0x0207311C + ldrb r2, [r0, #0x61] + add r0, r0, r2, lsl #4 + strb r1, [r0, #0x77] + bx lr + arm_func_end sub_0207311C + + arm_func_start sub_0207312C +sub_0207312C: ; 0x0207312C + ldrb r2, [r0, #0x61] + add r0, r0, #0x74 + add r0, r0, r2, lsl #4 + ldrb r2, [r0, #2] + cmp r2, #4 + addls pc, pc, r2, lsl #2 + b _020731AC +_02073148: ; jump table + b _020731AC ; case 0 + b _0207315C ; case 1 + b _02073170 ; case 2 + b _02073184 ; case 3 + b _02073198 ; case 4 +_0207315C: + mov r2, #0xa + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 + b _020731BC +_02073170: + mvn r2, #0x13 + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 + b _020731BC +_02073184: + mov r2, #0x14 + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 + b _020731BC +_02073198: + mov r2, #0xa + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 + b _020731BC +_020731AC: + mov r2, #0x14 + mul r2, r1, r2 + mov r1, r2, lsl #0x10 + mov r1, r1, asr #0x10 +_020731BC: + str r1, [r0, #4] + bx lr + arm_func_end sub_0207312C + + arm_func_start sub_020731C4 +sub_020731C4: ; 0x020731C4 + mov r2, #0x14 + mul r2, r1, r2 + ldrb r1, [r0, #0x61] + add r0, r0, r1, lsl #4 + strh r2, [r0, #0x7e] + bx lr + arm_func_end sub_020731C4 + + arm_func_start sub_020731DC +sub_020731DC: ; 0x020731DC + mov r2, #0x14 + mul r2, r1, r2 + ldrb r1, [r0, #0x61] + add r0, r0, r1, lsl #4 + strh r2, [r0, #0x80] + bx lr + arm_func_end sub_020731DC + + arm_func_start sub_020731F4 +sub_020731F4: ; 0x020731F4 + strb r1, [r0, #0x59] + bx lr + arm_func_end sub_020731F4 + + arm_func_start sub_020731FC +sub_020731FC: ; 0x020731FC + bx lr + arm_func_end sub_020731FC + + arm_func_start sub_02073200 +sub_02073200: ; 0x02073200 + bx lr + arm_func_end sub_02073200 + + arm_func_start sub_02073204 +sub_02073204: ; 0x02073204 + bx lr + arm_func_end sub_02073204 + + arm_func_start DseSynth_Reset +DseSynth_Reset: ; 0x02073208 + stmdb sp!, {r4, lr} + ldr r1, _02073274 ; =DRIVER_WORK + mov r2, #1 + ldrsb r3, [r1, #0x41] + mov r4, #0 + mov r1, #0x7f + strb r3, [r0, #2] + strb r2, [r0, #3] + strh r4, [r0, #4] + strb r1, [r0, #6] + mov r1, #0x40 + strb r1, [r0, #7] + ldrb ip, [r0, #2] + ldrsb r1, [r0, #6] + ldr r2, _02073278 ; =0x81020409 + ldr r3, _0207327C ; =_022B7A30 + smulbb ip, ip, r1 + smull r1, lr, r2, ip + add lr, ip, lr + mov r1, ip, lsr #0x1f + add lr, r1, lr, asr #6 + strb lr, [r0, #8] + strb r4, [r0, #9] + strb r4, [r0, #0xa] + ldrh r1, [r3, #0x2e] + strb r1, [r0, #0xb] + ldmia sp!, {r4, pc} + .align 2, 0 +_02073274: .word DRIVER_WORK +_02073278: .word 0x81020409 +_0207327C: .word _022B7A30 + arm_func_end DseSynth_Reset + + arm_func_start DseSynth_AllocateNew +DseSynth_AllocateNew: ; 0x02073280 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r0, #0xc8 + mul r0, r5, r0 + mov r2, r1 + add r0, r0, #0x10 + mov r1, #0x10 + bl DseMem_Allocate + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r1, #0 + strb r1, [r4] + strb r5, [r4, #1] + str r1, [r4, #0xc] + bl DseSynth_Reset + cmp r5, #0 + add r1, r4, #0x10 + mov r2, #0 + ble _02073300 + mov r0, r2 +_020732D4: + str r0, [r1] + strb r2, [r1, #5] + str r0, [r1, #0xb4] + str r0, [r1, #0xb8] + str r0, [r1, #0xbc] + str r0, [r1, #0xc0] + add r2, r2, #1 + str r4, [r1, #0xc4] + cmp r2, r5 + add r1, r1, #0xc8 + blt _020732D4 +_02073300: + ldr r1, _02073348 ; =0x04000208 + mov r0, #0 + ldrh r3, [r1] + ldr r2, _0207334C ; =_022B7988 + strh r0, [r1] + ldr r0, [r2] + cmp r0, #0 + beq _02073330 +_02073320: + add r2, r0, #0xc + ldr r0, [r0, #0xc] + cmp r0, #0 + bne _02073320 +_02073330: + ldr r1, _02073348 ; =0x04000208 + str r4, [r2] + ldrh r0, [r1] + mov r0, r4 + strh r3, [r1] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02073348: .word 0x04000208 +_0207334C: .word _022B7988 + arm_func_end DseSynth_AllocateNew + + arm_func_start DseSynth_Unload +DseSynth_Unload: ; 0x02073350 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl DseSynth_StopChannels + ldr r2, _020733B4 ; =0x04000208 + mov r0, r5 + ldrh r4, [r2] + mov r1, #0 + strh r1, [r2] + bl DseSynth_ClearHeldNotes + ldr r1, _020733B8 ; =_022B7988 + b _02073380 +_0207337C: + add r1, r0, #0xc +_02073380: + ldr r0, [r1] + cmp r0, #0 + cmpne r0, r5 + bne _0207337C + cmp r0, r5 + ldreq r0, [r5, #0xc] + ldr r2, _020733B4 ; =0x04000208 + streq r0, [r1] + ldrh r1, [r2] + mov r0, r5 + strh r4, [r2] + bl DseMem_Free + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020733B4: .word 0x04000208 +_020733B8: .word _022B7988 + arm_func_end DseSynth_Unload + + arm_func_start DseSynth_ClearHeldNotes +DseSynth_ClearHeldNotes: ; 0x020733BC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldrb r3, [r0, #1] + add r1, r0, #0x10 + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + ldr r7, _02073450 ; =0x04000208 + ldr ip, _02073454 ; =DRIVER_WORK + mvn r5, #0 + mov r4, r2 + mov r6, r2 +_020733E8: + ldrh r3, [r7] + strh r6, [r7] + ldr sb, [r1, #0xb8] + cmp sb, #0 + ldreqh lr, [r7] + streqh r3, [r7] + beq _02073438 + mov r8, sb +_02073408: + str r5, [sb, #4] + strb r4, [r8, #1] + ldr lr, [r8, #8] + cmp lr, #0 + movne r8, lr + bne _02073408 + ldr lr, [ip, #0x650] + str lr, [r8, #8] + str sb, [ip, #0x650] + str r4, [r1, #0xb8] + ldrh lr, [r7] + strh r3, [r7] +_02073438: + ldrb r3, [r0, #1] + add r2, r2, #1 + add r1, r1, #0xc8 + cmp r2, r3 + blt _020733E8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02073450: .word 0x04000208 +_02073454: .word DRIVER_WORK + arm_func_end DseSynth_ClearHeldNotes + + arm_func_start DseSynth_ResetAndSetBankAndSequence +DseSynth_ResetAndSetBankAndSequence: ; 0x02073458 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl DseSynth_Reset + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl DseSynth_SetBankAndSequence + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseSynth_ResetAndSetBankAndSequence + + arm_func_start DseSynth_StopChannels +DseSynth_StopChannels: ; 0x02073480 + stmdb sp!, {r3, r4, r5, lr} + ldrb r5, [r0, #1] + add r4, r0, #0x10 + cmp r5, #0 + ldmeqia sp!, {r3, r4, r5, pc} +_02073494: + mov r0, r4 + bl DseChannel_DeallocateVoices + subs r5, r5, #1 + add r4, r4, #0xc8 + bne _02073494 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseSynth_StopChannels + + arm_func_start DseSynth_ResetAllVoiceTimersAndVolumes +DseSynth_ResetAllVoiceTimersAndVolumes: ; 0x020734AC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r3, _02073500 ; =0x04000208 + mov r2, #0 + ldrh r6, [r3] + mov r7, r1 + add r4, r0, #0x10 + strh r2, [r3] + strb r7, [r0, #9] + ldrb r5, [r0, #1] + cmp r5, #0 + beq _020734F0 +_020734D8: + mov r0, r4 + mov r1, r7 + bl DseChannel_ResetTimerAndVolumeForVoices + subs r5, r5, #1 + add r4, r4, #0xc8 + bne _020734D8 +_020734F0: + ldr r1, _02073500 ; =0x04000208 + ldrh r0, [r1] + strh r6, [r1] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02073500: .word 0x04000208 + arm_func_end DseSynth_ResetAllVoiceTimersAndVolumes + + arm_func_start DseSynth_RestoreHeldNotes +DseSynth_RestoreHeldNotes: ; 0x02073504 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r2, _02073568 ; =0x04000208 + ldrb r6, [r0, #1] + ldrh r4, [r2] + mov r1, #0 + cmp r6, #0 + strh r1, [r2] + add r5, r0, #0x10 + beq _02073558 +_02073528: + ldr r7, [r5, #0xb8] + cmp r7, #0 + beq _0207354C +_02073534: + mov r0, r5 + mov r1, r7 + bl DseVoice_PlayNote + ldr r7, [r7, #8] + cmp r7, #0 + bne _02073534 +_0207354C: + subs r6, r6, #1 + add r5, r5, #0xc8 + bne _02073528 +_02073558: + ldr r1, _02073568 ; =0x04000208 + ldrh r0, [r1] + strh r4, [r1] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02073568: .word 0x04000208 + arm_func_end DseSynth_RestoreHeldNotes + + arm_func_start DseSynth_SetGlobalVolumeIndex +DseSynth_SetGlobalVolumeIndex: ; 0x0207356C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r3, _02073644 ; =_022B7370 + ldr r4, _02073648 ; =0x81020409 + ldrsb r5, [r3, r1] + add r3, r0, #0x10 + mov ip, #0 + strb r5, [r0, #2] + strb r1, [r0, #3] + ldrb r5, [r0, #2] + ldrsb r1, [r0, #6] + smulbb r5, r5, r1 + smull r1, r6, r4, r5 + add r6, r5, r6 + mov r1, r5, lsr #0x1f + add r6, r1, r6, asr #6 + strb r6, [r0, #8] + ldrb r1, [r0, #1] + cmp r1, #0 + ldmleia sp!, {r4, r5, r6, r7, r8, pc} + ldr r6, _0207364C ; =0x04000208 + mov r5, ip +_020735C0: + ldr r4, [r3, #0x2c] + ldrb r1, [r3, #0x50] + mov r4, r4, asr #0x10 + ldrsb lr, [r0, #8] + mul r1, r4, r1 + mul r7, lr, r1 + ldr r4, _02073650 ; =0x82061029 + mov r1, r7, lsr #0x1f + smull lr, r8, r4, r7 + add r8, r7, r8 + add r8, r1, r8, asr #13 + strh r8, [r3, #0x18] + cmp r2, #1 + bne _0207362C + ldrh r7, [r6] + strh r5, [r6] + ldr r4, [r3, #0xb4] + cmp r4, #0 + beq _02073624 +_0207360C: + ldrh r1, [r4, #6] + orr r1, r1, #0x20 + strh r1, [r4, #6] + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _0207360C +_02073624: + ldrh r1, [r6] + strh r7, [r6] +_0207362C: + ldrb r1, [r0, #1] + add ip, ip, #1 + add r3, r3, #0xc8 + cmp ip, r1 + blt _020735C0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02073644: .word _022B7370 +_02073648: .word 0x81020409 +_0207364C: .word 0x04000208 +_02073650: .word 0x82061029 + arm_func_end DseSynth_SetGlobalVolumeIndex + + arm_func_start DseSynth_SetBend +DseSynth_SetBend: ; 0x02073654 + stmdb sp!, {r3, r4, r5, lr} + strh r1, [r0, #4] + ldrb r3, [r0, #1] + add r1, r0, #0x10 + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r3, r4, r5, pc} + ldr lr, _020736E4 ; =0x04000208 + mov ip, r2 +_02073678: + ldr r3, [r1, #0x1c] + ldrsh r4, [r1, #0x54] + mov r3, r3, asr #0x10 + mov r3, r3, lsl #0x10 + ldrsh r5, [r0, #4] + add r3, r4, r3, asr #16 + add r3, r5, r3 + strh r3, [r1, #0x16] + ldrh r5, [lr] + strh ip, [lr] + ldr r4, [r1, #0xb4] + cmp r4, #0 + beq _020736C4 +_020736AC: + ldrh r3, [r4, #6] + orr r3, r3, #0x10 + strh r3, [r4, #6] + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _020736AC +_020736C4: + ldrh r3, [lr] + add r2, r2, #1 + add r1, r1, #0xc8 + strh r5, [lr] + ldrb r3, [r0, #1] + cmp r2, r3 + blt _02073678 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020736E4: .word 0x04000208 + arm_func_end DseSynth_SetBend + + arm_func_start DseSynth_SetVolume +DseSynth_SetVolume: ; 0x020736E8 + stmdb sp!, {r4, r5, r6, lr} + strb r1, [r0, #6] + ldrb r4, [r0, #2] + ldrsb r2, [r0, #6] + ldr r3, _020737AC ; =0x81020409 + add r1, r0, #0x10 + smulbb r4, r4, r2 + smull r2, r5, r3, r4 + add r5, r4, r5 + mov r2, r4, lsr #0x1f + add r5, r2, r5, asr #6 + strb r5, [r0, #8] + ldrb r3, [r0, #1] + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r4, r5, r6, pc} + ldr r4, _020737B0 ; =0x04000208 + ldr ip, _020737B4 ; =0x82061029 + mov lr, r2 +_02073734: + ldr r5, [r1, #0x2c] + ldrb r3, [r1, #0x50] + mov r5, r5, asr #0x10 + ldrsb r6, [r0, #8] + mul r3, r5, r3 + mul r5, r6, r3 + smull r3, r6, ip, r5 + add r6, r5, r6 + mov r3, r5, lsr #0x1f + add r6, r3, r6, asr #13 + strh r6, [r1, #0x18] + ldrh r6, [r4] + strh lr, [r4] + ldr r5, [r1, #0xb4] + cmp r5, #0 + beq _0207378C +_02073774: + ldrh r3, [r5, #6] + orr r3, r3, #0x20 + strh r3, [r5, #6] + ldr r5, [r5, #0x154] + cmp r5, #0 + bne _02073774 +_0207378C: + ldrh r3, [r4] + add r2, r2, #1 + add r1, r1, #0xc8 + strh r6, [r4] + ldrb r3, [r0, #1] + cmp r2, r3 + blt _02073734 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_020737AC: .word 0x81020409 +_020737B0: .word 0x04000208 +_020737B4: .word 0x82061029 + arm_func_end DseSynth_SetVolume + + arm_func_start DseSynth_SetPan +DseSynth_SetPan: ; 0x020737B8 + stmdb sp!, {r3, r4, r5, lr} + strb r1, [r0, #7] + ldrb r3, [r0, #1] + add r1, r0, #0x10 + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r3, r4, r5, pc} + ldr lr, _02073848 ; =0x04000208 + mov ip, r2 +_020737DC: + ldr r3, [r1, #0xc4] + ldr r4, [r1, #0x3c] + ldrsb r3, [r3, #7] + mov r4, r4, asr #0x10 + and r4, r4, #0xff + sub r3, r3, #0x40 + add r3, r4, r3 + strh r3, [r1, #0x1a] + ldrh r5, [lr] + strh ip, [lr] + ldr r4, [r1, #0xb4] + cmp r4, #0 + beq _02073828 +_02073810: + ldrh r3, [r4, #6] + orr r3, r3, #0x40 + strh r3, [r4, #6] + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _02073810 +_02073828: + ldrh r3, [lr] + add r2, r2, #1 + add r1, r1, #0xc8 + strh r5, [lr] + ldrb r3, [r0, #1] + cmp r2, r3 + blt _020737DC + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02073848: .word 0x04000208 + arm_func_end DseSynth_SetPan + + arm_func_start DseSynth_SetBankAndSequence +DseSynth_SetBankAndSequence: ; 0x0207384C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr r3, _020738D8 ; =DRIVER_WORK + mov sl, r0 + ldrsb r6, [r3, #0x3d] + mov r7, #0 + mov sb, r1 + strb r7, [r3, #0x3d] + ldrb r0, [sl, #1] + mov r8, r2 + add r5, sl, #0x10 + cmp r0, #0 + ble _020738CC + mov r0, sb, lsl #0x10 + mov r4, r0, lsr #0x10 +_02073884: + mov r0, r5 + bl DseChannel_DeallocateVoices + mov r0, r5 + mov r1, r8 + bl DseChannel_Init + cmp sb, #0 + blt _020738B8 + mov r0, r5 + mov r1, r4 + bl DseChannel_SetBank + mov r0, r5 + mov r1, r4 + bl DseChannel_SetInstrument +_020738B8: + ldrb r0, [sl, #1] + add r7, r7, #1 + add r5, r5, #0xc8 + cmp r7, r0 + blt _02073884 +_020738CC: + ldr r0, _020738D8 ; =DRIVER_WORK + strb r6, [r0, #0x3d] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_020738D8: .word DRIVER_WORK + arm_func_end DseSynth_SetBankAndSequence + + arm_func_start DseChannel_Init +DseChannel_Init: ; 0x020738DC + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + str r1, [r4] + mov r0, #0 + strb r0, [r4, #4] + strb r0, [r4, #6] + mov r1, #1 + strb r1, [r4, #7] + ldr r1, _02073A80 ; =_022B7A30 + strb r0, [r4, #8] + ldrh r3, [r1, #0x2e] + ldr r1, _02073A84 ; =DRIVER_WORK + mov r2, #0x7f + strb r3, [r4, #9] + strh r0, [r4, #0xa] + strb r0, [r4, #0xc] + strb r0, [r4, #0xd] + add r1, r1, #0x600 + ldrsb ip, [r1, #0x74] + ldrsb r3, [r1, #0x94] + add r3, r3, ip, lsl #8 + strh r3, [r4, #0xe] + strh r0, [r4, #0x10] + strh r0, [r4, #0x14] + str r0, [r4, #0x1c] + strh r0, [r4, #0x28] + ldrsb r3, [r1, #0x7b] + mov r3, r3, lsl #0x10 + str r3, [r4, #0x2c] + strh r0, [r4, #0x38] + ldrsb r3, [r1, #0x7e] + mov r3, r3, lsl #0x10 + str r3, [r4, #0x3c] + strh r0, [r4, #0x48] + strh r0, [r4, #0x54] + ldrsb r3, [r1, #0x7f] + strb r3, [r4, #0x50] + ldrsb r1, [r1, #0x75] + strb r1, [r4, #0x51] + strh r0, [r4, #0x52] + strh r0, [r4, #0x56] + strb r2, [r4, #0x58] + strb r0, [r4, #0x59] + strb r0, [r4, #0x5a] + strb r0, [r4, #0x5b] + strb r0, [r4, #0x5c] + strb r0, [r4, #0x5d] + strb r0, [r4, #0x5e] + strb r0, [r4, #0x5f] + strb r0, [r4, #0x60] + mov r2, r0 +_020739A8: + add r1, r4, r0, lsl #4 + strb r2, [r1, #0x75] + add r0, r0, #1 + strb r2, [r1, #0x76] + cmp r0, #4 + blt _020739A8 + add r0, r4, #0x64 + bl SoundEnvelopeParameters_Reset + mov r0, #0 + ldr r1, _02073A88 ; =0x04000208 + str r0, [r4, #0xb4] + ldrh r5, [r1] + strh r0, [r1] + ldr lr, [r4, #0xb8] + cmp lr, #0 + ldreqh r0, [r1] + streqh r5, [r1] + beq _02073A34 + mov ip, lr + mvn r1, #0 + mov r3, r0 +_020739FC: + str r1, [lr, #4] + strb r3, [ip, #1] + ldr r0, [ip, #8] + cmp r0, #0 + movne ip, r0 + bne _020739FC + ldr r0, _02073A84 ; =DRIVER_WORK + ldr r1, _02073A88 ; =0x04000208 + ldr r2, [r0, #0x650] + str r2, [ip, #8] + str lr, [r0, #0x650] + str r3, [r4, #0xb8] + ldrh r0, [r1] + strh r5, [r1] +_02073A34: + mov r1, #0 + str r1, [r4, #0xbc] + ldr r0, _02073A84 ; =DRIVER_WORK + str r1, [r4, #0xc0] + strh r1, [r4, #0x16] + add r0, r0, #0x600 + ldrsb r3, [r0, #0x7b] + ldrsb r0, [r0, #0x7f] + ldr r1, _02073A8C ; =0x82061029 + mov r2, #0x40 + smulbb r0, r3, r0 + rsb r3, r0, r0, lsl #7 + smull r0, ip, r1, r3 + add ip, r3, ip + mov r0, r3, lsr #0x1f + add ip, r0, ip, asr #13 + strh ip, [r4, #0x18] + strh r2, [r4, #0x1a] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02073A80: .word _022B7A30 +_02073A84: .word DRIVER_WORK +_02073A88: .word 0x04000208 +_02073A8C: .word 0x82061029 + arm_func_end DseChannel_Init + + arm_func_start DseChannel_DeallocateVoices +DseChannel_DeallocateVoices: ; 0x02073A90 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r6, [r0, #0xb4] + mov r1, #0 + str r1, [r0, #0xb4] + cmp r6, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r8, _02073B10 ; =_022B7A30 + mov r5, r1 + mov r4, r1 +_02073AB4: + ldr r7, [r6, #0x154] + add r0, r6, #0x3c + strh r5, [r6, #4] + str r5, [r6, #0x158] + str r5, [r6, #0x154] + bl SoundEnvelope_Stop + ldr r0, [r6, #0x14c] + cmp r7, #0 + and r0, r0, #0xff + str r0, [r6, #0x14c] + str r4, [r6] + strh r4, [r6, #0x18] + ldrh r2, [r6, #0xa] + ldrh r1, [r8, #0x32] + mov r6, r7 + mvn r0, r2 + and r0, r1, r0 + strh r0, [r8, #0x32] + ldrh r0, [r8, #0x36] + orr r0, r0, r2 + strh r0, [r8, #0x36] + bne _02073AB4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02073B10: .word _022B7A30 + arm_func_end DseChannel_DeallocateVoices + + arm_func_start DseChannel_ResetTimerAndVolumeForVoices +DseChannel_ResetTimerAndVolumeForVoices: ; 0x02073B14 + cmp r1, #1 + bne _02073B5C + ldrb r1, [r0, #4] + orr r1, r1, #0x40 + strb r1, [r0, #4] + ldr r2, [r0, #0xb4] + cmp r2, #0 + bxeq lr + mov r1, #0 +_02073B38: + str r1, [r2, #0x13c] + str r1, [r2, #0x140] + ldrh r0, [r2, #6] + orr r0, r0, #0x30 + strh r0, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02073B38 + bx lr +_02073B5C: + ldr r2, [r0, #0xb4] + cmp r2, #0 + beq _02073B80 +_02073B68: + ldrh r1, [r2, #6] + orr r1, r1, #0x30 + strh r1, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02073B68 +_02073B80: + ldrb r1, [r0, #4] + bic r1, r1, #0x40 + strb r1, [r0, #4] + bx lr + arm_func_end DseChannel_ResetTimerAndVolumeForVoices + + arm_func_start DseChannel_SetBank +DseChannel_SetBank: ; 0x02073B90 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, r1 + strh r1, [r4, #0xe] + bl DseSwd_GetBankById + str r0, [r4, #0xbc] + cmp r0, #0 + moveq r0, #0 + streq r0, [r4, #0xc0] + ldmeqia sp!, {r4, pc} + ldrh r1, [r4, #0x10] + mov r0, r4 + bl DseChannel_SetInstrument + ldmia sp!, {r4, pc} + arm_func_end DseChannel_SetBank + + arm_func_start DseChannel_SetInstrument +DseChannel_SetInstrument: ; 0x02073BC8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r5, r0 + ldr r0, [r5, #0xbc] + mov r4, r1 + cmp r0, #0 + bne _02073BF0 + mov r0, #0 + str r0, [r5, #0xc0] + strh r0, [r5, #0x10] + b _02073C4C +_02073BF0: + mov r0, r4, lsl #0x10 + mov r1, r0, asr #0x10 + strh r1, [r5, #0x10] + ldr r0, [r5, #0xbc] + bl DseSwd_GetInstrument + movs lr, r0 + beq _02073C48 + mov r6, #0 + strb r6, [r5, #0x59] + add r7, lr, #0x10 + add r8, r5, #0x74 + mov ip, r6 +_02073C20: + ldrb r0, [r7, #1] + add r6, r6, #1 + cmp r0, #0 + ldmneia r7, {r0, r1, r2, r3} + stmneia r8, {r0, r1, r2, r3} + streqb ip, [r8, #1] + cmp r6, #4 + add r7, r7, #0x10 + add r8, r8, #0x10 + blt _02073C20 +_02073C48: + str lr, [r5, #0xc0] +_02073C4C: + add r0, r5, #0x64 + bl SoundEnvelopeParameters_Reset + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + arm_func_end DseChannel_SetInstrument + + arm_func_start DseChannel_SetLfoConstEnvelopeLevel +DseChannel_SetLfoConstEnvelopeLevel: ; 0x02073C5C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + strb r5, [r0, #0x51] + ldr r4, [r0, #0xb4] + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} +_02073C74: + mov r1, r5 + add r0, r4, #0x5c + bl SoundLfoBank_SetConstEnvelopes + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _02073C74 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseChannel_SetLfoConstEnvelopeLevel + + arm_func_start DseChannel_SetKeyBend +DseChannel_SetKeyBend: ; 0x02073C90 + strh r1, [r0, #0x52] + ldr r2, [r0, #0xb4] + cmp r2, #0 + bxeq lr + mov r3, r1, lsl #8 +_02073CA4: + ldrb r0, [r2, #0xf] + mul r1, r0, r3 + mov r0, r1, asr #0xc + add r0, r1, r0, lsr #19 + mov r0, r0, asr #0xd + strh r0, [r2, #0x10] + ldrh r0, [r2, #6] + orr r0, r0, #0x10 + strh r0, [r2, #6] + ldr r2, [r2, #0x154] + cmp r2, #0 + bne _02073CA4 + bx lr + arm_func_end DseChannel_SetKeyBend + + arm_func_start DseChannel_AllocateNote +DseChannel_AllocateNote: ; 0x02073CD8 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + ldrb r2, [r5, #0xd] + mov r4, r1 + cmp r2, #0 + beq _02073D18 + ldrb r0, [r5, #0xc] + sub r0, r2, r0 + add r6, r0, #1 + bl DseUtil_GetRandomNumber + mul r1, r6, r0 + mov r0, r1, asr #0xe + ldrb r2, [r5, #0xc] + add r0, r1, r0, lsr #17 + add r0, r2, r0, asr #15 + strb r0, [r4, #2] +_02073D18: + ldr r1, _02073D64 ; =DRIVER_WORK + ldr r0, [r1, #0x650] + cmp r0, #0 + moveq r0, #0 + ldrne r2, [r0, #8] + strne r2, [r1, #0x650] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r3, [r4] + ldr r2, [r4, #4] + mov r1, #1 + str r3, [r0] + str r2, [r0, #4] + strb r1, [r0, #1] + ldr r1, [r5, #0xb8] + str r1, [r0, #8] + str r0, [r5, #0xb8] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02073D64: .word DRIVER_WORK + arm_func_end DseChannel_AllocateNote + + arm_func_start DseChannel_ReleaseNoteInternal +DseChannel_ReleaseNoteInternal: ; 0x02073D68 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r0 + ldr r4, [r7, #0xb8] + mov r6, r1 + cmp r4, #0 + add r5, r7, #0xb8 + beq _02073DE4 + ldrb r1, [r6, #2] +_02073D88: + ldrb r0, [r4, #2] + cmp r0, r1 + bne _02073DD4 + ldr r8, [r7, #0xb4] + cmp r8, #0 + beq _02073DC8 +_02073DA0: + ldrb r1, [r8, #0xd] + ldrb r0, [r6, #2] + cmp r1, r0 + bne _02073DBC + mov r0, r7 + mov r1, r8 + bl DseVoice_Release +_02073DBC: + ldr r8, [r8, #0x154] + cmp r8, #0 + bne _02073DA0 +_02073DC8: + ldr r0, [r4, #8] + str r0, [r5] + b _02073DE4 +_02073DD4: + add r5, r4, #8 + ldr r4, [r4, #8] + cmp r4, #0 + bne _02073D88 +_02073DE4: + ldr r0, _02073E0C ; =DRIVER_WORK + mvn r2, #0 + ldr r3, [r0, #0x650] + mov r1, #0 + str r3, [r4, #8] + str r4, [r0, #0x650] + str r2, [r4, #4] + mov r0, r4 + strb r1, [r4, #1] + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02073E0C: .word DRIVER_WORK + arm_func_end DseChannel_ReleaseNoteInternal + + arm_func_start DseChannel_ChangeNote +DseChannel_ChangeNote: ; 0x02073E10 + stmdb sp!, {r4, lr} + ldr r4, [r0, #0xb8] + cmp r4, #0 + beq _02073E54 +_02073E20: + ldrb r3, [r4, #2] + cmp r3, r2 + bne _02073E48 + ldr lr, [r1] + ldr ip, [r1, #4] + mov r3, #1 + str lr, [r4] + str ip, [r4, #4] + strb r3, [r4, #1] + b _02073E54 +_02073E48: + ldr r4, [r4, #8] + cmp r4, #0 + bne _02073E20 +_02073E54: + ldr ip, [r0, #0xb4] + cmp ip, #0 + ldmeqia sp!, {r4, pc} +_02073E60: + ldrb r0, [ip, #0xd] + cmp r0, r2 + bne _02073E90 + ldrb r0, [r1, #2] + strb r0, [ip, #0xd] + ldrb r3, [r1, #2] + ldrsh r0, [ip, #0x14] + add r0, r0, r3, lsl #8 + strh r0, [ip, #0x12] + ldrh r0, [ip, #6] + orr r0, r0, #0x10 + strh r0, [ip, #6] +_02073E90: + ldr ip, [ip, #0x154] + cmp ip, #0 + bne _02073E60 + ldmia sp!, {r4, pc} + arm_func_end DseChannel_ChangeNote + + arm_func_start DseChannel_ReleaseNote +DseChannel_ReleaseNote: ; 0x02073EA0 + stmdb sp!, {r3, lr} + ldr r2, [r0, #0xb8] + cmp r2, #0 + ldmeqia sp!, {r3, pc} + ldrb r3, [r1, #2] +_02073EB4: + ldrb r1, [r2, #2] + cmp r1, r3 + bne _02073ECC + mov r1, r2 + bl DseChannel_ReleaseNoteInternal + ldmia sp!, {r3, pc} +_02073ECC: + ldr r2, [r2, #8] + cmp r2, #0 + bne _02073EB4 + ldmia sp!, {r3, pc} + arm_func_end DseChannel_ReleaseNote + + arm_func_start DseVoice_PlayNote +DseVoice_PlayNote: ; 0x02073EDC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov sl, r0 + ldrsh r4, [sl, #0xa] + mov sb, r1 + cmp r4, #0 + moveq r0, #0 + streq r0, [sp] + beq _02073F28 + bl DseUtil_GetRandomNumber + mov r1, r4, lsl #1 + mul r2, r1, r0 + mov r0, r2, asr #0xe + ldrsh r1, [sl, #0xa] + add r0, r2, r0, lsr #17 + rsb r0, r1, r0, asr #15 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + str r0, [sp] +_02073F28: + ldr r6, [sl, #0xc0] + cmp r6, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r7, [sl, #0xbc] + mov r5, #0 +_02073F40: + ldrb r2, [sb, #2] + ldrsb r3, [sb, #3] + mov r0, r6 + mov r1, r5 + bl DseSwd_GetNextSplitInRange + movs r5, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r3, [r5, #0x1a] + ldrb r0, [r7, #0xc] + ldr r2, [r7, #0x18] + cmp r3, r0 + movge r3, #0 + add r1, r2, r3, lsl #3 + ldr r2, [r2, r3, lsl #3] + ldr r1, [r1, #4] + mov r0, r7 + str r2, [sp, #4] + str r1, [sp, #8] + ldrsh r1, [r5, #0x12] + bl ReadWaviEntry + movs fp, r0 + beq _02073F40 + ldrb r3, [sl, #5] + ldrb r2, [r5, #0x1a] + mov r0, sl + add r1, sp, #4 + add r8, r2, r3, lsl #8 + ldrb r3, [sp, #7] + mov r2, r8 + bl DseVoice_Allocate + movs r4, r0 + beq _02073F40 + mov r0, #0 + strh r0, [r4, #4] + ldr r0, [sl] + add fp, fp, #0x10 + str r0, [r4] + strh r8, [r4, #0x18] + ldrsh r0, [r5, #0x12] + add ip, r4, #0x1c + strb r0, [r4, #0xe] + ldmia fp!, {r0, r1, r2, r3} + stmia ip!, {r0, r1, r2, r3} + ldmia fp, {r0, r1, r2, r3} + stmia ip, {r0, r1, r2, r3} + ldr r1, [r4, #0x30] + ldr r0, [r7, #0x1c] + add r0, r1, r0 + str r0, [r4, #0x30] + ldrb r0, [sb, #2] + strb r0, [r4, #0xd] + ldrsb r1, [r5, #0x17] + ldrsh r0, [r5, #0x14] + add r1, r0, r1, lsl #8 + ldr r0, [sp] + add r0, r0, r1 + strh r0, [r4, #0x14] + ldrb r1, [sb, #2] + ldrsh r0, [r4, #0x14] + add r0, r0, r1, lsl #8 + strh r0, [r4, #0x12] + ldrb r0, [r5, #0x19] + strb r0, [r4, #0x17] + ldr r0, _02074144 ; =DRIVER_WORK + ldrb r0, [r0, #0x39] + cmp r0, #7 + bne _02074084 + ldrb r1, [sl, #0x58] + ldrb r0, [sb, #3] + ldrb r2, [r6, #4] + ldrb r3, [r5, #0x18] + smulbb r0, r1, r0 + mul r0, r2, r0 + mul r2, r3, r0 + ldr r0, _02074148 ; =0x4186143D + smull r1, r3, r0, r2 + mov r0, r2, lsr #0x1f + add r3, r0, r3, asr #19 + strb r3, [r4, #0x16] + b _020740B0 +_02074084: + ldrb r1, [sb, #3] + ldrb r0, [r6, #4] + ldrb r2, [r5, #0x18] + smulbb r0, r1, r0 + mul r3, r2, r0 + ldr r0, _0207414C ; =0x82061029 + smull r1, r2, r0, r3 + add r2, r3, r2 + mov r0, r3, lsr #0x1f + add r2, r0, r2, asr #13 + strb r2, [r4, #0x16] +_020740B0: + ldrb r2, [sl, #0x59] + ldrsh r3, [sl, #0x52] + add r0, r4, #0x5c + cmp r2, #0 + ldreqb r2, [r5, #2] + mov r3, r3, lsl #8 + add r1, sl, #0x74 + mul r8, r2, r3 + mov r3, r8, asr #0xc + add r3, r8, r3, lsr #19 + mov r3, r3, asr #0xd + strh r3, [r4, #0x10] + strb r2, [r4, #0xf] + ldrh r2, [r4, #6] + orr r2, r2, #0xff0 + strh r2, [r4, #6] + ldrsb r2, [sl, #0x51] + bl SoundLfoBank_Set + add r0, r5, #0x20 + add r8, r4, #0x3c + ldmia r0, {r0, r1, r2, r3} + stmia r8, {r0, r1, r2, r3} + mov r0, #1 + strb r0, [r4, #0x3c] + ldrb r0, [sl, #0x64] + cmp r0, #0 + beq _02074128 + mov r0, r8 + add r1, sl, #0x64 + bl SoundEnvelope_SetParameters +_02074128: + mov r1, r4 + mov r0, sl + ldrb r2, [sp, #7] + bl DseVoice_Start + b _02073F40 +_0207413C: + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02074144: .word DRIVER_WORK +_02074148: .word 0x4186143D +_0207414C: .word 0x82061029 + arm_func_end DseVoice_PlayNote + + arm_func_start DseVoice_ReleaseNote +DseVoice_ReleaseNote: ; 0x02074150 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r4, [r6, #0xb4] + mov r5, r1 + cmp r4, #0 + ldmeqia sp!, {r4, r5, r6, pc} +_02074168: + ldrb r1, [r4, #0xd] + ldrb r0, [r5, #2] + cmp r1, r0 + bne _02074184 + mov r0, r6 + mov r1, r4 + bl DseVoice_Release +_02074184: + ldr r4, [r4, #0x154] + cmp r4, #0 + bne _02074168 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end DseVoice_ReleaseNote + + arm_func_start DseVoice_UpdateParameters +DseVoice_UpdateParameters: ; 0x02074194 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr fp, _0207431C ; =_022B7A30 + ldr r7, _02074320 ; =_022B7A6C + ldrh r0, [fp, #0x2e] + mov sb, #0 + cmp r0, #0 + ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r6, _02074324 ; =_020B1310 + ldr r5, _02074328 ; =_020B1394 + ldr r4, _0207432C ; =0x00FFB0FF +_020741BC: + ldr r8, [r7, #0x158] + cmp r8, #0 + beq _02074304 + ldrh sl, [r7, #6] + cmp sl, #0 + beq _02074300 + tst sl, #0x10 + beq _02074264 + ldrh r2, [r8, #0x16] + ldrsh r1, [r7, #0x12] + ldrsh r3, [r7, #0x10] + ldrsh r0, [r7, #0x5e] + add r1, r2, r1 + add r1, r3, r1 + add r0, r0, r1 + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, r1, asr #8 + and r0, r0, #0x7f + ldrb r0, [r6, r0] + and r2, r1, #0xff + mov r1, r0, lsl #0x1c + add r1, r2, r1, lsr #20 + mov r1, r1, lsl #1 + mov r0, r0, asr #4 + ldrh r1, [r5, r1] + rsbs r0, r0, #4 + movpl r1, r1, lsr r0 + rsbmi r0, r0, #0 + movmi r1, r1, lsl r0 + ldrb r0, [r7, #0x1f] + cmp r0, #3 + mov r0, r4 + blo _0207425C + mov r2, r1, asr #3 + add r1, r1, r2, lsr #28 + mov r1, r1, asr #4 + bl _s32_div_f + str r0, [r7, #0x13c] + b _02074264 +_0207425C: + bl _s32_div_f + str r0, [r7, #0x13c] +_02074264: + tst sl, #0x20 + beq _020742C4 + ldrb r1, [r7, #0x16] + ldrsh r0, [r7, #0x60] + add r1, r1, r0, asr #6 + cmp r1, #0x7f + movgt r1, #0x7f + bgt _0207428C + cmp r1, #0 + movlt r1, #0 +_0207428C: + ldrh r0, [r8, #0x18] + ldrb r2, [r7, #0x14c] + mul r1, r0, r1 + mul r3, r2, r1 + ldr r0, _02074330 ; =0x828CBFBF + smull r1, r2, r0, r3 + add r2, r3, r2 + mov r0, r3, lsr #0x1f + add r2, r0, r2, asr #12 + mul r1, r2, r2 + mov r0, r1, asr #8 + add r0, r1, r0, lsr #23 + mov r0, r0, asr #9 + str r0, [r7, #0x140] +_020742C4: + tst sl, #0x40 + beq _02074300 + ldrsb r1, [r7, #0x17] + ldrsh r2, [r8, #0x1a] + ldrsh r0, [r7, #0x62] + sub r1, r1, #0x40 + add r1, r2, r1 + adds r1, r1, r0, asr #6 + ldr r0, _02074334 ; =_022B8330 + movmi r1, #0 + cmp r1, #0x7f + ldr r0, [r0, #0xed4] + movgt r1, #0x7f + ldrb r0, [r0, r1] + str r0, [r7, #0x144] +_02074300: + strh sl, [r7, #6] +_02074304: + ldrh r0, [fp, #0x2e] + add sb, sb, #1 + add r7, r7, #0x15c + cmp sb, r0 + blt _020741BC + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0207431C: .word _022B7A30 +_02074320: .word _022B7A6C +_02074324: .word _020B1310 +_02074328: .word _020B1394 +_0207432C: .word 0x00FFB0FF +_02074330: .word 0x828CBFBF +_02074334: .word _022B8330 + arm_func_end DseVoice_UpdateParameters + + arm_func_start DseVoice_ResetAll +DseVoice_ResetAll: ; 0x02074338 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr sl, _020743D0 ; =_022B7A30 + mov r8, #0 + ldrh r0, [sl, #0x2e] + cmp r0, #0 + ble _020743C0 + ldr sb, _020743D4 ; =_022B7A6C + mov r7, r8 + mov r6, #1 + mov r5, #0x40 + mov r4, r8 +_02074364: + strh r7, [sb, #4] + strh r7, [sb, #6] + mov r0, r6, lsl r8 + strh r8, [sb, #8] + strh r0, [sb, #0xa] + str r7, [sb] + str r7, [sb, #0x14c] + strb r7, [sb, #0xd] + strb r7, [sb, #0xe] + strh r7, [sb, #0x12] + strb r7, [sb, #0x16] + add r0, sb, #0x3c + strb r5, [sb, #0x17] + bl SoundEnvelope_Reset + add r0, sb, #0x5c + bl SoundLfoBank_Reset + str r4, [sb, #0x154] + str r4, [sb, #0x158] + ldrh r0, [sl, #0x2e] + add r8, r8, #1 + add sb, sb, #0x15c + cmp r8, r0 + blt _02074364 +_020743C0: + ldr r0, _020743D8 ; =DRIVER_WORK + mov r1, #0 + str r1, [r0, #0x654] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_020743D0: .word _022B7A30 +_020743D4: .word _022B7A6C +_020743D8: .word DRIVER_WORK + arm_func_end DseVoice_ResetAll + + arm_func_start DseVoice_ResetHW +DseVoice_ResetHW: ; 0x020743DC + stmdb sp!, {r3, lr} + cmp r0, #0 + ble _02074414 + ldr r1, _0207447C ; =_022B7A30 + mov r2, #0x10 + strh r2, [r1, #0x2c] + cmp r0, #0x10 + movgt r0, r2, lsl #0x10 + ldr r2, _0207447C ; =_022B7A30 + movgt r0, r0, asr #0x10 + strh r0, [r2, #0x2e] + ldr r1, _02074480 ; =_022B8330 + mov r0, #0 + strb r0, [r1, #0xd0c] +_02074414: + ldr r2, _0207447C ; =_022B7A30 + mov r0, #0 + strh r0, [r2, #0x32] + strh r0, [r2, #0x34] + ldr r1, _02074484 ; =DRIVER_WORK + strh r0, [r2, #0x36] + strb r0, [r1, #0x738] + strb r0, [r1, #0x739] + ldr ip, _02074480 ; =_022B8330 + strh r0, [r2, #0x30] + str r0, [ip, #0xcfc] + str r0, [ip, #0xd00] + sub r2, r0, #1 + str r2, [ip, #0xd04] + ldrsh lr, [r1, #0x28] + mov r1, r0 + mov r2, r0 + mov r3, r0 + str lr, [ip, #0xd08] + bl sub_0207C8B8 + ldr r0, _02074488 ; =0x0000FFFF + mov r3, #0 + mov r1, r0 + mov r2, r0 + bl sub_0207C8E0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0207447C: .word _022B7A30 +_02074480: .word _022B8330 +_02074484: .word DRIVER_WORK +_02074488: .word 0x0000FFFF + arm_func_end DseVoice_ResetHW + + arm_func_start UpdateChannels +UpdateChannels: ; 0x0207448C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr sb, _02074570 ; =_022B7A30 + mov r7, #0 + ldrh r0, [sb, #0x2e] + mov r6, r7 + ldr r5, _02074574 ; =_022B7A6C + cmp r0, #0 + ble _0207452C + mov r4, #2 +_020744B0: + add r0, r5, #0x3c + bl SoundEnvelope_Tick + ldrsb r1, [r5, #0x5a] + mov r8, r0 + cmp r1, #1 + bne _02074514 + add r0, r5, #0x5c + bl SoundLfoBank_Tick + ldrh r1, [r5, #6] + orr r0, r1, r0 + strh r0, [r5, #6] + ldrb r0, [r5, #0x58] + cmp r0, #8 + bne _020744F8 + strb r4, [r5, #0x58] + ldrh r0, [r5, #6] + orr r0, r0, #2 + strh r0, [r5, #6] +_020744F8: + ldrb r0, [r5, #0x14c] + cmp r0, r8 + ldrneh r0, [r5, #6] + orrne r0, r0, #0x20 + strneh r0, [r5, #6] + cmp r8, #0 + addgt r7, r7, #1 +_02074514: + strb r8, [r5, #0x14c] + ldrh r0, [sb, #0x2e] + add r6, r6, #1 + add r5, r5, #0x15c + cmp r6, r0 + blt _020744B0 +_0207452C: + ldr r0, _02074578 ; =_022B8330 + ldr r1, [r0, #0xd04] + cmp r1, #0 + movlt r1, #0 + strlt r1, [r0, #0xd00] + ldr r0, _02074578 ; =_022B8330 + str r7, [r0, #0xcfc] + ldr r1, [r0, #0xd00] + cmp r1, r7 + strlt r7, [r0, #0xd00] + movlt r1, #0x64 + strlt r1, [r0, #0xd04] + ldr r0, _02074578 ; =_022B8330 + ldr r1, [r0, #0xd04] + sub r1, r1, #1 + str r1, [r0, #0xd04] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02074570: .word _022B7A30 +_02074574: .word _022B7A6C +_02074578: .word _022B8330 + arm_func_end UpdateChannels + + arm_func_start DseVoice_Cleanup +DseVoice_Cleanup: ; 0x0207457C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r6, _02074610 ; =_022B7A6C + bl sub_0207D470 + ldr r4, _02074614 ; =_022B7A30 + mov r0, r0, lsl #0x10 + ldrh r2, [r4, #0x30] + ldrh r1, [r4, #0x2e] + mov r7, #0 + orr r0, r2, r0, lsr #16 + mov r0, r0, lsl #0x10 + mov r8, r0, lsr #0x10 + cmp r1, #0 + ldmleia sp!, {r4, r5, r6, r7, r8, pc} + mov r5, r7 +_020745B4: + ldrsb r0, [r6, #0x5a] + cmp r0, #1 + bne _020745DC + tst r8, #1 + bne _020745F0 + add r0, r6, #0x3c + bl SoundEnvelope_Stop2 + add r0, r6, #0x100 + strh r5, [r0, #0x4c] + b _020745F0 +_020745DC: + and r0, r8, #1 + cmp r0, #1 + bne _020745F0 + mov r0, r6 + bl DseVoice_FlagForDeactivation +_020745F0: + ldrh r1, [r4, #0x2e] + mov r0, r8, lsl #0xf + add r7, r7, #1 + cmp r7, r1 + mov r8, r0, lsr #0x10 + add r6, r6, #0x15c + blt _020745B4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02074610: .word _022B7A6C +_02074614: .word _022B7A30 + arm_func_end DseVoice_Cleanup + + arm_func_start DseVoice_Allocate +DseVoice_Allocate: ; 0x02074618 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r4, _02074774 ; =_022B7A30 + mov r3, r3, lsl #0x10 + ldrh r5, [r4, #0x2e] + add r3, r3, #0xff + add r8, r3, #0x100 + ldrb r4, [r1, #5] + sub r5, r5, #1 + ldrb r3, [r0, #7] + cmp r4, r5 + movgt r4, r5 + ldrb r7, [r1, #4] + mov r6, #0 + cmp r3, #0 + beq _02074660 + cmp r3, #1 + beq _0207466C + b _0207476C +_02074660: + ldr r6, [r0, #0xb4] + cmp r6, #0 + bne _0207476C +_0207466C: + ldrb r3, [r1] + cmp r3, #0 + beq _02074708 + ldr r5, _02074778 ; =_022B7A6C + mov r3, #0x15c + mla r3, r7, r3, r5 + mov ip, r7 + mov lr, r4 + mov r5, r8 + cmp r7, r4 + mov r6, #0 + bgt _020746E4 + ldr r0, [r0] +_020746A0: + ldr sb, [r3] + cmp sb, r0 + ldreqh sb, [r3, #0x18] + cmpeq sb, r2 + bne _020746D4 + ldr sb, [r3, #0x14c] + add r6, r6, #1 + cmp r5, sb + movhi r5, sb + ldrb sb, [r1, #2] + movhi lr, ip + cmp r6, sb + bge _020746E4 +_020746D4: + add ip, ip, #1 + cmp ip, r4 + add r3, r3, #0x15c + ble _020746A0 +_020746E4: + ldrb r0, [r1, #2] + cmp r6, r0 + blt _02074708 + ldr r1, _02074778 ; =_022B7A6C + mov r0, #0x15c + mla r6, lr, r0, r1 + mov r0, r6 + bl DseVoice_Deallocate + b _0207476C +_02074708: + cmp r7, r4 + add r2, r4, #1 + bgt _0207474C + ldr r1, _0207477C ; =DRIVER_WORK + mov r0, #0x15c + mla r1, r7, r0, r1 +_02074720: + ldr r0, [r1, #0x888] + cmp r8, r0 + bls _0207473C + mov r2, r7 + cmp r0, #0 + beq _0207474C + mov r8, r0 +_0207473C: + add r7, r7, #1 + cmp r7, r4 + add r1, r1, #0x15c + ble _02074720 +_0207474C: + cmp r2, r4 + movgt r6, #0 + bgt _0207476C + ldr r1, _02074778 ; =_022B7A6C + mov r0, #0x15c + mla r6, r2, r0, r1 + mov r0, r6 + bl DseVoice_Deallocate +_0207476C: + mov r0, r6 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02074774: .word _022B7A30 +_02074778: .word _022B7A6C +_0207477C: .word DRIVER_WORK + arm_func_end DseVoice_Allocate + + arm_func_start DseVoice_Start +DseVoice_Start: ; 0x02074780 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + ldrh r3, [r4, #6] + mov r1, r2, lsl #0x10 + add r1, r1, #0xff + orr r2, r3, #1 + bic r2, r2, #2 + strh r2, [r4, #6] + ldr r2, [r4, #0x14c] + add r1, r1, #0x100 + orr r1, r2, r1 + mov r5, r0 + str r1, [r4, #0x14c] + add r0, r4, #0x3c + bl UpdateTrackVolumeEnvelopes + ldr r0, [r4, #0x158] + cmp r0, r5 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r0, [r5, #0xb4] + str r0, [r4, #0x154] + str r4, [r5, #0xb4] + str r5, [r4, #0x158] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseVoice_Start + + arm_func_start DseVoice_ReleaseHeld +DseVoice_ReleaseHeld: ; 0x020747DC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r7, r0 + ldrb r0, [r7, #4] + tst r0, #3 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r4, [r7, #0xb8] + add r6, r7, #0xb8 + cmp r4, #0 + beq _0207484C + ldr r8, _02074858 ; =DRIVER_WORK + mvn sl, #0 + mov sb, #0 +_0207480C: + ldmib r4, {r0, r5} + cmp r0, #0 + strgt r4, [r6] + addgt r6, r4, #8 + bgt _02074840 + mov r0, r7 + mov r1, r4 + bl DseChannel_ReleaseNoteInternal + ldr r0, [r8, #0x650] + str r0, [r4, #8] + str r4, [r8, #0x650] + str sl, [r4, #4] + strb sb, [r4, #1] +_02074840: + mov r4, r5 + cmp r5, #0 + bne _0207480C +_0207484C: + mov r0, #0 + str r0, [r6] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02074858: .word DRIVER_WORK + arm_func_end DseVoice_ReleaseHeld + + arm_func_start DseVoice_Release +DseVoice_Release: ; 0x0207485C + stmdb sp!, {r4, lr} + mov r4, r1 + ldrh r1, [r4, #4] + orr r1, r1, #2 + strh r1, [r4, #4] + ldrb r0, [r0, #4] + tst r0, #1 + ldmneia sp!, {r4, pc} + ldr r1, [r4, #0x14c] + add r0, r4, #0x3c + and r1, r1, #0xff + str r1, [r4, #0x14c] + bl SoundEnvelope_Release + ldrh r0, [r4, #6] + bic r0, r0, #1 + strh r0, [r4, #6] + ldmia sp!, {r4, pc} + arm_func_end DseVoice_Release + + arm_func_start DseVoice_Deallocate +DseVoice_Deallocate: ; 0x020748A0 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r1, [r4, #0x158] + cmp r1, #0 + beq _02074948 + ldr r2, [r1, #0xb4] + cmp r2, r4 + ldreq r0, [r4, #0x154] + streq r0, [r1, #0xb4] + beq _020748F0 + cmp r2, #0 + beq _020748F0 +_020748D0: + ldr r0, [r2, #0x154] + cmp r0, r4 + ldreq r0, [r4, #0x154] + streq r0, [r2, #0x154] + beq _020748F0 + mov r2, r0 + cmp r0, #0 + bne _020748D0 +_020748F0: + mov r0, #0 + strh r0, [r4, #4] + str r0, [r4, #0x158] + str r0, [r4, #0x154] + add r0, r4, #0x3c + bl SoundEnvelope_Stop + ldr r1, [r4, #0x14c] + mov r0, #0 + and r1, r1, #0xff + str r1, [r4, #0x14c] + str r0, [r4] + strh r0, [r4, #0x18] + ldr r1, _020749A0 ; =_022B7A30 + ldrh r0, [r4, #0xa] + ldrh r3, [r1, #0x32] + mvn r2, r0 + and r2, r3, r2 + strh r2, [r1, #0x32] + ldrh r2, [r1, #0x36] + orr r2, r2, r0 + strh r2, [r1, #0x36] + ldmia sp!, {r4, pc} +_02074948: + mov r0, #0 + strh r0, [r4, #4] + str r0, [r4, #0x158] + str r0, [r4, #0x154] + add r0, r4, #0x3c + bl SoundEnvelope_Stop + ldr r1, [r4, #0x14c] + mov r0, #0 + and r1, r1, #0xff + str r1, [r4, #0x14c] + str r0, [r4] + strh r0, [r4, #0x18] + ldr r1, _020749A0 ; =_022B7A30 + ldrh r0, [r4, #0xa] + ldrh r3, [r1, #0x32] + mvn r2, r0 + and r2, r3, r2 + strh r2, [r1, #0x32] + ldrh r2, [r1, #0x36] + orr r2, r2, r0 + strh r2, [r1, #0x36] + ldmia sp!, {r4, pc} + .align 2, 0 +_020749A0: .word _022B7A30 + arm_func_end DseVoice_Deallocate + + arm_func_start DseVoice_FlagForActivation +DseVoice_FlagForActivation: ; 0x020749A4 + mov r1, #0xff0 + strh r1, [r0, #6] + ldr r2, [r0, #0x14c] + ldr r1, _020749F0 ; =_022B7A30 + orr r2, r2, #0xff + orr r2, r2, #0x100 + str r2, [r0, #0x14c] + ldrh r3, [r0, #0xa] + ldrh r0, [r1, #0x34] + mvn r2, r3 + and r0, r0, r2 + strh r0, [r1, #0x34] + ldrh r0, [r1, #0x36] + and r0, r0, r2 + strh r0, [r1, #0x36] + ldrh r0, [r1, #0x32] + orr r0, r0, r3 + strh r0, [r1, #0x32] + bx lr + .align 2, 0 +_020749F0: .word _022B7A30 + arm_func_end DseVoice_FlagForActivation + + arm_func_start DseVoice_FlagForDeactivation +DseVoice_FlagForDeactivation: ; 0x020749F4 + ldr r2, [r0, #0x14c] + ldr r1, _02074A28 ; =_022B7A30 + bic r2, r2, #0xff00 + str r2, [r0, #0x14c] + ldrh r3, [r0, #0xa] + ldrh r2, [r1, #0x32] + mvn r0, r3 + and r0, r2, r0 + strh r0, [r1, #0x32] + ldrh r0, [r1, #0x34] + orr r0, r0, r3 + strh r0, [r1, #0x34] + bx lr + .align 2, 0 +_02074A28: .word _022B7A30 + arm_func_end DseVoice_FlagForDeactivation + + arm_func_start DseVoice_CountNumActiveInChannel +DseVoice_CountNumActiveInChannel: ; 0x02074A2C + ldr r2, [r0, #0xb4] + mov r0, #0 + cmp r2, #0 + bxeq lr +_02074A3C: + ldrb r1, [r2, #0x14c] + ldr r2, [r2, #0x154] + cmp r1, #0 + addne r0, r0, #1 + cmp r2, #0 + bne _02074A3C + bx lr + arm_func_end DseVoice_CountNumActiveInChannel + + arm_func_start DseVoice_UpdateHardware +DseVoice_UpdateHardware: ; 0x02074A58 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x18 + ldr r4, _02074C64 ; =_022B7A30 + ldr r7, _02074C68 ; =_022B7A6C + ldrh r0, [r4, #0x2e] + mov r8, #0 + cmp r0, #0 + ble _02074BC8 + mov fp, #2 + mov sl, #1 + mov r6, r8 + mov r5, r8 +_02074A88: + ldrh sb, [r7, #6] + cmp sb, #0 + beq _02074BB4 + tst sb, #1 + beq _02074B5C + ldrsb r0, [r7, #0x21] + ldrb r1, [r7, #0x1f] + cmp r0, #0 + movne r3, sl + moveq r3, fp + cmp r1, #4 + addls pc, pc, r1, lsl #2 + b _02074B50 +_02074ABC: ; jump table + b _02074AD0 ; case 0 + b _02074AD0 ; case 1 + b _02074AD0 ; case 2 + b _02074B0C ; case 3 + b _02074B34 ; case 4 +_02074AD0: + ldr r0, [r7, #0x34] + str r0, [sp] + ldr r0, [r7, #0x38] + str r0, [sp, #4] + ldr r0, [r7, #0x140] + str r0, [sp, #8] + str r6, [sp, #0xc] + ldr r0, [r7, #0x13c] + str r0, [sp, #0x10] + ldr r0, [r7, #0x144] + str r0, [sp, #0x14] + ldrh r0, [r7, #8] + ldr r2, [r7, #0x30] + bl sub_0207CA6C + b _02074B50 +_02074B0C: + ldr r0, [r7, #0x13c] + mov r3, #0 + str r0, [sp] + ldr r0, [r7, #0x144] + str r0, [sp, #4] + ldrh r0, [r7, #8] + ldrb r1, [r7, #0x25] + ldr r2, [r7, #0x140] + bl sub_0207CAB8 + b _02074B50 +_02074B34: + ldr r0, [r7, #0x144] + mov r2, #0 + str r0, [sp] + ldrh r0, [r7, #8] + ldr r1, [r7, #0x140] + ldr r3, [r7, #0x13c] + bl sub_0207CAE0 +_02074B50: + mov r0, r7 + bl DseVoice_FlagForActivation + b _02074BB0 +_02074B5C: + tst sb, #2 + beq _02074B70 + mov r0, r7 + bl DseVoice_FlagForDeactivation + mov sb, #0 +_02074B70: + tst sb, #0x10 + beq _02074B84 + ldrh r0, [r7, #0xa] + ldr r1, [r7, #0x13c] + bl sub_0207CA04 +_02074B84: + tst sb, #0x20 + beq _02074B9C + ldrh r0, [r7, #0xa] + ldr r1, [r7, #0x140] + mov r2, #0 + bl sub_0207CA24 +_02074B9C: + tst sb, #0x40 + beq _02074BB0 + ldrh r0, [r7, #0xa] + ldr r1, [r7, #0x144] + bl sub_0207CA4C +_02074BB0: + strh r5, [r7, #6] +_02074BB4: + ldrh r0, [r4, #0x2e] + add r8, r8, #1 + add r7, r7, #0x15c + cmp r8, r0 + blt _02074A88 +_02074BC8: + ldr r1, _02074C64 ; =_022B7A30 + ldr r2, _02074C6C ; =DRIVER_WORK + ldrh r0, [r1, #0x32] + strh r0, [r1, #0x30] + ldrb r1, [r2, #0x73a] + ldrb r2, [r2, #0x738] + orr r3, r0, r1 + orrs r3, r2, r3 + beq _02074C0C + mov r3, #0 + bl sub_0207C8B8 + ldr r1, _02074C6C ; =DRIVER_WORK + mov r2, #0 + strb r2, [r1, #0x738] + ldr r0, _02074C64 ; =_022B7A30 + strb r2, [r1, #0x73a] + strh r2, [r0, #0x32] +_02074C0C: + ldr r1, _02074C64 ; =_022B7A30 + ldr r0, _02074C6C ; =DRIVER_WORK + ldrh r4, [r1, #0x34] + ldrh r3, [r1, #0x36] + ldrb r1, [r0, #0x73b] + ldrb r2, [r0, #0x739] + orr r0, r4, r3 + orr r3, r1, r0 + orrs r3, r2, r3 + addeq sp, sp, #0x18 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r3, #0 + bl sub_0207C8E0 + ldr r1, _02074C6C ; =DRIVER_WORK + mov r2, #0 + strb r2, [r1, #0x739] + ldr r0, _02074C64 ; =_022B7A30 + strb r2, [r1, #0x73b] + strh r2, [r0, #0x36] + strh r2, [r0, #0x34] + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02074C64: .word _022B7A30 +_02074C68: .word _022B7A6C +_02074C6C: .word DRIVER_WORK + arm_func_end DseVoice_UpdateHardware diff --git a/include/main_02071E34.h b/include/main_02071E34.h new file mode 100644 index 00000000..cd7af4fc --- /dev/null +++ b/include/main_02071E34.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_MAIN_02071E34_H +#define PMDSKY_MAIN_02071E34_H + +#include "dse.h" + +u8* DseTrackEvent_SetTuning(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); + +#endif //PMDSKY_MAIN_02071E34_H diff --git a/main.lsf b/main.lsf index c5d5e3bc..23c60477 100644 --- a/main.lsf +++ b/main.lsf @@ -81,6 +81,8 @@ Static main Object asm/main_02071AC0.o Object src/main_02071BF4.o Object asm/main_02071CC8.o + Object src/main_02071E34.o + Object asm/main_02071EB4.o Object lib/DSE/src/dc_envelope.o Object lib/DSE/src/dc_lfo.o Object lib/DSE/asm/dc_lfo_1.o diff --git a/src/main_02071E34.c b/src/main_02071E34.c new file mode 100644 index 00000000..bb35b940 --- /dev/null +++ b/src/main_02071E34.c @@ -0,0 +1,23 @@ +#include "main_02071E34.h" + +#define IME (*(vu16*)0x4000208) + +u8* DseTrackEvent_SetTuning(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) +{ + s16 tune = *(s8*)ptr_next_byte<<8; + channel->tuning = tune; + + channel->bend_final = tune + (s16)(channel->bend.current >> 0x10) + channel->container->bend; + u16 old_ime = IME; + IME = 0; + struct dse_voice *voice = channel->voice_list; + if(voice) { + do { + voice->update_flags = voice->update_flags | 0x10; + voice = voice->next_in_channel_allocation_list; + } while(voice); + } + u16 unused = IME; + IME = old_ime; + return ptr_next_byte + 1; +} From 9b7ce7a66392d76919b6f3abaefdec7d6b7f4c80 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 6 Aug 2025 20:05:25 -0400 Subject: [PATCH 20/40] Moved DSE functions to DSE folder --- {asm => lib/DSE/asm}/include/main_02071AC0.inc | 0 {asm => lib/DSE/asm}/include/main_02071CC8.inc | 0 {asm => lib/DSE/asm}/include/main_02071EB4.inc | 0 {asm => lib/DSE/asm}/main_02071AC0.s | 2 +- {asm => lib/DSE/asm}/main_02071CC8.s | 2 +- {asm => lib/DSE/asm}/main_02071EB4.s | 2 +- {include => lib/DSE/include}/dse.h | 0 {include => lib/DSE/include}/main_02071A98.h | 0 {include => lib/DSE/include}/main_02071BF4.h | 0 {include => lib/DSE/include}/main_02071E34.h | 0 {src => lib/DSE/src}/main_02071A98.c | 0 {src => lib/DSE/src}/main_02071BF4.c | 0 {src => lib/DSE/src}/main_02071E34.c | 0 main.lsf | 12 ++++++------ 14 files changed, 9 insertions(+), 9 deletions(-) rename {asm => lib/DSE/asm}/include/main_02071AC0.inc (100%) rename {asm => lib/DSE/asm}/include/main_02071CC8.inc (100%) rename {asm => lib/DSE/asm}/include/main_02071EB4.inc (100%) rename {asm => lib/DSE/asm}/main_02071AC0.s (98%) rename {asm => lib/DSE/asm}/main_02071CC8.s (99%) rename {asm => lib/DSE/asm}/main_02071EB4.s (99%) rename {include => lib/DSE/include}/dse.h (100%) rename {include => lib/DSE/include}/main_02071A98.h (100%) rename {include => lib/DSE/include}/main_02071BF4.h (100%) rename {include => lib/DSE/include}/main_02071E34.h (100%) rename {src => lib/DSE/src}/main_02071A98.c (100%) rename {src => lib/DSE/src}/main_02071BF4.c (100%) rename {src => lib/DSE/src}/main_02071E34.c (100%) diff --git a/asm/include/main_02071AC0.inc b/lib/DSE/asm/include/main_02071AC0.inc similarity index 100% rename from asm/include/main_02071AC0.inc rename to lib/DSE/asm/include/main_02071AC0.inc diff --git a/asm/include/main_02071CC8.inc b/lib/DSE/asm/include/main_02071CC8.inc similarity index 100% rename from asm/include/main_02071CC8.inc rename to lib/DSE/asm/include/main_02071CC8.inc diff --git a/asm/include/main_02071EB4.inc b/lib/DSE/asm/include/main_02071EB4.inc similarity index 100% rename from asm/include/main_02071EB4.inc rename to lib/DSE/asm/include/main_02071EB4.inc diff --git a/asm/main_02071AC0.s b/lib/DSE/asm/main_02071AC0.s similarity index 98% rename from asm/main_02071AC0.s rename to lib/DSE/asm/main_02071AC0.s index 765dddcb..c1355086 100644 --- a/asm/main_02071AC0.s +++ b/lib/DSE/asm/main_02071AC0.s @@ -1,5 +1,5 @@ .include "asm/macros.inc" - .include "main_02071AC0.inc" + .include "include/main_02071AC0.inc" .text diff --git a/asm/main_02071CC8.s b/lib/DSE/asm/main_02071CC8.s similarity index 99% rename from asm/main_02071CC8.s rename to lib/DSE/asm/main_02071CC8.s index 2f110300..46e641f8 100644 --- a/asm/main_02071CC8.s +++ b/lib/DSE/asm/main_02071CC8.s @@ -1,5 +1,5 @@ .include "asm/macros.inc" - .include "main_02071CC8.inc" + .include "include/main_02071CC8.inc" .text diff --git a/asm/main_02071EB4.s b/lib/DSE/asm/main_02071EB4.s similarity index 99% rename from asm/main_02071EB4.s rename to lib/DSE/asm/main_02071EB4.s index 54dd5fa9..d9c477d9 100644 --- a/asm/main_02071EB4.s +++ b/lib/DSE/asm/main_02071EB4.s @@ -1,5 +1,5 @@ .include "asm/macros.inc" - .include "main_02071EB4.inc" + .include "include/main_02071EB4.inc" .text diff --git a/include/dse.h b/lib/DSE/include/dse.h similarity index 100% rename from include/dse.h rename to lib/DSE/include/dse.h diff --git a/include/main_02071A98.h b/lib/DSE/include/main_02071A98.h similarity index 100% rename from include/main_02071A98.h rename to lib/DSE/include/main_02071A98.h diff --git a/include/main_02071BF4.h b/lib/DSE/include/main_02071BF4.h similarity index 100% rename from include/main_02071BF4.h rename to lib/DSE/include/main_02071BF4.h diff --git a/include/main_02071E34.h b/lib/DSE/include/main_02071E34.h similarity index 100% rename from include/main_02071E34.h rename to lib/DSE/include/main_02071E34.h diff --git a/src/main_02071A98.c b/lib/DSE/src/main_02071A98.c similarity index 100% rename from src/main_02071A98.c rename to lib/DSE/src/main_02071A98.c diff --git a/src/main_02071BF4.c b/lib/DSE/src/main_02071BF4.c similarity index 100% rename from src/main_02071BF4.c rename to lib/DSE/src/main_02071BF4.c diff --git a/src/main_02071E34.c b/lib/DSE/src/main_02071E34.c similarity index 100% rename from src/main_02071E34.c rename to lib/DSE/src/main_02071E34.c diff --git a/main.lsf b/main.lsf index 23c60477..21adbfd3 100644 --- a/main.lsf +++ b/main.lsf @@ -77,12 +77,12 @@ Static main Object asm/main_02058F24.o Object src/main_0206C98C.o Object asm/main_0206C9BC.o - Object src/main_02071A98.o - Object asm/main_02071AC0.o - Object src/main_02071BF4.o - Object asm/main_02071CC8.o - Object src/main_02071E34.o - Object asm/main_02071EB4.o + Object lib/DSE/src/main_02071A98.o + Object lib/DSE/asm/main_02071AC0.o + Object lib/DSE/src/main_02071BF4.o + Object lib/DSE/asm/main_02071CC8.o + Object lib/DSE/src/main_02071E34.o + Object lib/DSE/asm/main_02071EB4.o Object lib/DSE/src/dc_envelope.o Object lib/DSE/src/dc_lfo.o Object lib/DSE/asm/dc_lfo_1.o From 1aa9bb6d7a3ca5011625e40acf62f16cb6ac9c17 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 6 Aug 2025 20:30:36 -0400 Subject: [PATCH 21/40] Fixed JP build --- src/overlay_31_02383880.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/overlay_31_02383880.c b/src/overlay_31_02383880.c index f05e1a8b..1c2e2611 100644 --- a/src/overlay_31_02383880.c +++ b/src/overlay_31_02383880.c @@ -57,7 +57,11 @@ void ov31_023837C8(void) void ov31_02383854(struct window* w) { + #ifdef JAPAN + DrawTextInWindow(w, 2, 2, StringFromId(0x1d3e)); + #else DrawTextInWindow(w, 2, 2, StringFromId(0x08e6)); + #endif } void ov31_02383880(u8* arg1) From 778824ddcfab9fd708cfefb2cb3404cd8da0aed5 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 6 Aug 2025 20:30:44 -0400 Subject: [PATCH 22/40] Synced from pmd-sky debug --- asm/include/itcm.inc | 2 +- asm/include/itcm_01FFBD20.inc | 2 +- asm/include/main_02003328.inc | 20 +- asm/include/main_020038D8.inc | 10 +- asm/include/main_02010FC4.inc | 148 ++++---- asm/include/main_02013864.inc | 2 +- asm/include/main_02013B70.inc | 2 +- asm/include/main_02013C30.inc | 256 ++++++------- asm/include/main_02034974.inc | 190 +++++----- asm/include/main_0203C774.inc | 406 ++++++++++----------- asm/include/main_0204B018.inc | 166 ++++----- asm/include/main_02051098.inc | 6 +- asm/include/main_02051504.inc | 2 +- asm/include/main_02051788.inc | 42 +-- asm/include/main_0205297C.inc | 104 +++--- asm/include/main_02054AD4.inc | 1 + asm/include/main_02058F24.inc | 2 +- asm/include/main_0206C9BC.inc | 70 ++-- asm/include/main_0207B854.inc | 1 + asm/include/main_0207B87C.inc | 10 +- asm/include/main_020897DC.inc | 42 +-- asm/include/main_rodata_020A1BB0.inc | 212 +++++------ asm/include/overlay_02.inc | 2 +- asm/include/overlay_10_022BCC7C.inc | 2 +- asm/include/overlay_10_022C2588.inc | 26 +- asm/include/overlay_10_rodata_022C4584.inc | 1 + asm/include/overlay_10_rodata_022C464C.inc | 1 + asm/include/overlay_10_rodata_022C490C.inc | 12 +- asm/include/overlay_11.inc | 2 +- asm/include/overlay_14.inc | 2 +- asm/include/overlay_15_0238A234.inc | 2 +- asm/include/overlay_17.inc | 2 +- asm/include/overlay_17_0238A754.inc | 12 +- asm/include/overlay_18.inc | 2 +- asm/include/overlay_21.inc | 2 +- asm/include/overlay_22.inc | 2 +- asm/include/overlay_25.inc | 2 +- asm/include/overlay_29_022DC314.inc | 8 +- asm/include/overlay_29_022DC65C.inc | 10 +- asm/include/overlay_29_022DEBA4.inc | 66 ++-- asm/include/overlay_29_022E0378.inc | 10 +- asm/include/overlay_29_022E08A0.inc | 16 +- asm/include/overlay_29_022E1618.inc | 1 + asm/include/overlay_29_022EB44C.inc | 18 +- asm/include/overlay_29_022EBCE8.inc | 16 +- asm/include/overlay_29_022ECDE4.inc | 12 +- asm/include/overlay_29_022EDCBC.inc | 12 +- asm/include/overlay_29_022EE36C.inc | 4 +- asm/include/overlay_29_022F05B4.inc | 6 +- asm/include/overlay_29_022F52B0.inc | 6 +- asm/include/overlay_29_022F59C4.inc | 2 +- asm/include/overlay_29_022F740C.inc | 4 +- asm/include/overlay_29_022F7768.inc | 28 +- asm/include/overlay_29_022F9194.inc | 8 +- asm/include/overlay_29_022F9744.inc | 34 +- asm/include/overlay_29_022FACBC.inc | 10 +- asm/include/overlay_29_022FB678.inc | 10 +- asm/include/overlay_29_022FE4BC.inc | 4 +- asm/include/overlay_29_022FEDBC.inc | 2 +- asm/include/overlay_29_022FFF4C.inc | 6 +- asm/include/overlay_29_02300FCC.inc | 4 +- asm/include/overlay_29_023016D8.inc | 2 +- asm/include/overlay_29_02301A84.inc | 2 +- asm/include/overlay_29_02301D84.inc | 2 +- asm/include/overlay_29_02302388.inc | 2 +- asm/include/overlay_29_02302A5C.inc | 2 +- asm/include/overlay_29_023085DC.inc | 2 +- asm/include/overlay_29_02308FE0.inc | 2 +- asm/include/overlay_29_0230AA0C.inc | 2 +- asm/include/overlay_29_0230F02C.inc | 2 +- asm/include/overlay_29_0230F9A4.inc | 8 +- asm/include/overlay_29_02311088.inc | 8 +- asm/include/overlay_29_02311C28.inc | 22 +- asm/include/overlay_29_02314810.inc | 12 +- asm/include/overlay_29_02317844.inc | 2 +- asm/include/overlay_29_02318E70.inc | 6 +- asm/include/overlay_29_02319880.inc | 6 +- asm/include/overlay_29_0231A364.inc | 2 +- asm/include/overlay_29_0231A7A0.inc | 2 +- asm/include/overlay_29_0231A8A0.inc | 4 +- asm/include/overlay_29_0231A9F8.inc | 10 +- asm/include/overlay_29_0231AD38.inc | 8 +- asm/include/overlay_29_0231B1B8.inc | 2 +- asm/include/overlay_29_0231B33C.inc | 2 +- asm/include/overlay_29_0231CBEC.inc | 4 +- asm/include/overlay_29_0231F594.inc | 2 +- asm/include/overlay_29_0231FC20.inc | 2 +- asm/include/overlay_29_02320788.inc | 2 +- asm/include/overlay_29_0232145C.inc | 4 +- asm/include/overlay_29_02322DDC.inc | 10 +- asm/include/overlay_29_0232393C.inc | 14 +- asm/include/overlay_29_02324698.inc | 2 +- asm/include/overlay_29_02325644.inc | 2 +- asm/include/overlay_29_02328030.inc | 4 +- asm/include/overlay_29_0232A3FC.inc | 2 +- asm/include/overlay_29_0232C524.inc | 2 +- asm/include/overlay_29_0232E864.inc | 66 ++-- asm/include/overlay_29_02332A0C.inc | 6 +- asm/include/overlay_29_02334D58.inc | 8 +- asm/include/overlay_29_02337CCC.inc | 4 +- asm/include/overlay_29_02337EC0.inc | 2 +- asm/include/overlay_29_0233861C.inc | 2 +- asm/include/overlay_29_02340CE4.inc | 4 +- asm/include/overlay_29_02341E6C.inc | 36 +- asm/include/overlay_29_02344178.inc | 6 +- asm/include/overlay_29_02344B1C.inc | 4 +- asm/include/overlay_29_023456BC.inc | 6 +- asm/include/overlay_29_02346834.inc | 8 +- asm/include/overlay_29_02348020.inc | 16 +- asm/include/overlay_29_023498A0.inc | 24 +- asm/include/overlay_29_0234BEE0.inc | 4 +- asm/include/overlay_29_0234CA84.inc | 14 +- asm/include/overlay_29_rodata_02352780.inc | 1 + asm/include/overlay_31_02382FBC.inc | 8 +- asm/include/overlay_31_023833D8.inc | 2 +- asm/include/overlay_31_023838E4.inc | 80 ++-- asm/main_02013C30.s | 14 +- asm/main_0203C774.s | 8 +- asm/main_0207F894.s | 12 +- asm/overlay_02.s | 4 +- asm/overlay_10_022BCC7C.s | 2 +- asm/overlay_10_022C4394.s | 4 +- asm/overlay_10_rodata_022C464C.s | 8 +- asm/overlay_11.s | 2 +- asm/overlay_14.s | 20 +- asm/overlay_15_0238A234.s | 4 +- asm/overlay_18.s | 4 +- asm/overlay_21.s | 2 +- asm/overlay_22.s | 10 +- asm/overlay_25.s | 2 +- asm/overlay_29_022EE36C.s | 4 +- asm/overlay_29_022F05B4.s | 60 +-- asm/overlay_29_022F52B0.s | 8 +- asm/overlay_29_022F9194.s | 2 +- asm/overlay_29_022F9744.s | 8 +- asm/overlay_29_022FACBC.s | 6 +- asm/overlay_29_022FE4BC.s | 4 +- asm/overlay_29_022FFF4C.s | 2 +- asm/overlay_29_02301A84.s | 2 +- asm/overlay_29_02302388.s | 2 +- asm/overlay_29_02302A5C.s | 6 +- asm/overlay_29_023085DC.s | 4 +- asm/overlay_29_0230AA0C.s | 2 +- asm/overlay_29_0230F02C.s | 12 +- asm/overlay_29_0230F9A4.s | 4 +- asm/overlay_29_02311C28.s | 4 +- asm/overlay_29_02314810.s | 6 +- asm/overlay_29_02317844.s | 4 +- asm/overlay_29_02318E70.s | 4 +- asm/overlay_29_0231A9F8.s | 2 +- asm/overlay_29_0231AD38.s | 2 +- asm/overlay_29_0231B1B8.s | 2 +- asm/overlay_29_0231B33C.s | 4 +- asm/overlay_29_0231CBEC.s | 4 +- asm/overlay_29_0232145C.s | 4 +- asm/overlay_29_02322DDC.s | 4 +- asm/overlay_29_02328030.s | 4 +- asm/overlay_29_0232A3FC.s | 2 +- asm/overlay_29_0232C524.s | 2 +- asm/overlay_29_0232E864.s | 2 +- asm/overlay_29_02344B1C.s | 54 +-- asm/overlay_29_023456BC.s | 16 +- asm/overlay_29_02346834.s | 6 +- asm/overlay_29_02348020.s | 4 +- asm/overlay_29_023498A0.s | 10 +- asm/overlay_31_023838E4.s | 16 +- lib/DSE/asm/include/main_02071AC0.inc | 2 +- lib/DSE/asm/include/main_02071EB4.inc | 42 +-- src/dungeon_projectile_throw.c | 4 +- 169 files changed, 1480 insertions(+), 1474 deletions(-) diff --git a/asm/include/itcm.inc b/asm/include/itcm.inc index c9799fb9..071a0858 100644 --- a/asm/include/itcm.inc +++ b/asm/include/itcm.inc @@ -18,7 +18,6 @@ .public AreMovesEnabled .public CanAiMonsterMoveInDirection .public CanAiUseMove -.public MonsterCannotAttack .public CanSeeTarget .public CanTargetEntity .public CanTargetPosition @@ -56,6 +55,7 @@ .public MemcpyFast .public MemsetFast .public MONSTER_DATA_TABLE_PTR +.public MonsterCannotAttack .public OS_IRQTable .public ov29_022E935C .public ov29_022FBDF0 diff --git a/asm/include/itcm_01FFBD20.inc b/asm/include/itcm_01FFBD20.inc index 9b17c4eb..ddbde918 100644 --- a/asm/include/itcm_01FFBD20.inc +++ b/asm/include/itcm_01FFBD20.inc @@ -9,6 +9,6 @@ .public GetTreatmentBetweenMonsters .public InitMove .public IsMonster__0231A9D4 -.public ResetAiCanAttackInDirection .public ov29_0231B008 +.public ResetAiCanAttackInDirection .public TryAddTargetToAiTargetList diff --git a/asm/include/main_02003328.inc b/asm/include/main_02003328.inc index f683d1ed..80cfada3 100644 --- a/asm/include/main_02003328.inc +++ b/asm/include/main_02003328.inc @@ -1,14 +1,4 @@ #pragma once -.public Debug_Print0 -.public GX_VBlankIntr -.public GetHeldButtons -.public GetReleasedStylus -.public HaltProcessDisp -.public KeyWaitInit -.public MainLoop -.public OS_IRQTable -.public Rand16Bit -.public WaitForever .public _020924D8 .public _020AEF7C .public _020AEFB4 @@ -25,6 +15,15 @@ .public _fadd .public _fflt .public _fmul +.public Debug_Print0 +.public GetHeldButtons +.public GetReleasedStylus +.public GX_VBlankIntr +.public HaltProcessDisp +.public KeyWaitInit +.public MainLoop +.public OS_IRQTable +.public Rand16Bit .public sub_02002580 .public sub_020025F8 .public sub_02002628 @@ -58,3 +57,4 @@ .public sub_0207B4B8 .public sub_020820E8 .public sub_02082420 +.public WaitForever diff --git a/asm/include/main_020038D8.inc b/asm/include/main_020038D8.inc index eee804d6..f70cc250 100644 --- a/asm/include/main_020038D8.inc +++ b/asm/include/main_020038D8.inc @@ -1,9 +1,4 @@ #pragma once -.public Debug_Print0 -.public DisableAllInterrupts -.public EnableAllInterrupts -.public PlayBgmById -.public StopBgmCommand .public _020924E8 .public _020924F8 .public _020AEF7C @@ -12,6 +7,11 @@ .public _020AF050 .public _0229B21C .public _0229B220 +.public Debug_Print0 +.public DisableAllInterrupts +.public EnableAllInterrupts +.public PlayBgmById +.public StopBgmCommand .public sub_02002580 .public sub_020025F8 .public sub_02002628 diff --git a/asm/include/main_02010FC4.inc b/asm/include/main_02010FC4.inc index ac7f8266..9e7bd2dc 100644 --- a/asm/include/main_02010FC4.inc +++ b/asm/include/main_02010FC4.inc @@ -1,78 +1,4 @@ #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 @@ -97,6 +23,74 @@ .public _020AF700 .public _022A4BD8 .public _s32_div_f +.public ApplyExclusiveItemStatBoosts +.public BAG_ITEMS_PTR_MIRROR +.public CALCIUM_STAT_BOOST +.public ConvertStorageItemAtIdxToBulkItem +.public CopyBitsFrom +.public CopyBitsTo +.public CountNbItemsOfTypeInBag +.public CountNbItemsOfTypeInStorage +.public CountNbOfItemsInStorage +.public Debug_Print0 +.public DUNGEON_MOVE_TABLES +.public EXCLUSIVE_ITEM_EFFECT_DATA +.public ExclusiveItemEffectFlagTest +.public FemaleToMaleForm +.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 GINSENG_CHANCE_3 +.public GUMMI_STAT_BOOST +.public HasMonsterBeenAttackedInDungeons +.public InitBulkItem +.public IQ_GUMMI_GAIN_TABLE +.public IRON_STAT_BOOST +.public Is2TurnsMove +.public IsGummi +.public IsMonsterValid +.public IsTicketItem +.public LIFE_SEED_HP_BOOST +.public LoadFileFromRom +.public LoadScriptVariableValue +.public MemAlloc +.public MemFree +.public MemZero +.public OpenWaza +.public PROTEIN_STAT_BOOST +.public Rand16Bit +.public RandInt +.public RandIntSafe +.public RandRange +.public RECYCLE_SHOP_ITEM_LIST +.public RemoveEmptyItemsInBag +.public RemoveItem +.public RemoveItemAtIdxInStorage +.public SaveScriptVariableValue +.public SelectWaza +.public SetExclusiveItemEffect +.public SetNbRecycled +.public SITRUS_BERRY_FULL_HP_BOOST +.public StringFromId .public sub_0200D1F0 .public sub_0200EB90 .public sub_02010044 @@ -108,4 +102,10 @@ .public sub_02054FEC .public sub_02055020 .public sub_02055054 +.public TYPE_SPECIFIC_EXCLUSIVE_ITEMS +.public UnloadFile .public vsprintf +.public WONDER_GUMMI_IQ_GAIN +.public WONDER_GUMMI_STAT_BOOST +.public ZINC_STAT_BOOST +.public ZInit8 diff --git a/asm/include/main_02013864.inc b/asm/include/main_02013864.inc index 6fb85d9b..17e25973 100644 --- a/asm/include/main_02013864.inc +++ b/asm/include/main_02013864.inc @@ -1,3 +1,3 @@ #pragma once -.public DUNGEON_MOVE_TABLES .public _02098D64 +.public DUNGEON_MOVE_TABLES diff --git a/asm/include/main_02013B70.inc b/asm/include/main_02013B70.inc index f501d9b0..04347391 100644 --- a/asm/include/main_02013B70.inc +++ b/asm/include/main_02013B70.inc @@ -1,3 +1,3 @@ #pragma once -.public DUNGEON_MOVE_TABLES .public _s32_div_f +.public DUNGEON_MOVE_TABLES diff --git a/asm/include/main_02013C30.inc b/asm/include/main_02013C30.inc index 482bb415..51aad9b1 100644 --- a/asm/include/main_02013C30.inc +++ b/asm/include/main_02013C30.inc @@ -1,132 +1,4 @@ #pragma once -.public AUDIO_COMMANDS_BUFFER -.public ArrayCopy32 -.public ArrayFill32 -.public BagHasExclusiveItemTypeForMonster -.public CopyAndInterleave -.public CopyAndInterleave0 -.public CopyBitsFrom -.public CopyBitsTo -.public CopyStringFromId -.public DUNGEON_MOVE_TABLES -.public Debug_FatalError -.public Debug_GetDebugFlag -.public Debug_Print -.public Debug_Print0 -.public DirectoryFileMngr_GetDirectoryFileSize -.public DirectoryFileMngr_LoadDirectoryFile -.public DirectoryFileMngr_OpenDirectoryFile -.public DseBgm_IsPlaying -.public DseBgm_Load -.public DseBgm_SetFades -.public DseBgm_SetSignalCallback -.public DseBgm_Stop -.public DseBgm_Unload -.public DseDriver_ConfigureHeap -.public DseDriver_Init -.public DseDriver_LoadDefaultSettings -.public DseSe_GetUsedBankIDs -.public DseSe_HasPlayingInstances -.public DseSe_Load -.public DseSe_Play -.public DseSe_Stop -.public DseSe_StopAll -.public DseSe_Unload -.public DseSequence_GetParameter -.public DseSwd_IsBankLoading -.public DseSwd_LoadBank -.public DseSwd_LoadMainBank -.public DseSwd_LoadWaves -.public DseSwd_Unload -.public DungeonGoesUp -.public DungeonSwapIdxToId -.public ENTITIES -.public EnqueueRender3dTexture -.public FileClose -.public FileGetSize -.public FileRom_HandleOpen -.public FileRom_HandleRead -.public FileRom_InitDataTransfer -.public FileRom_StopDataTransfer -.public FileRom_Veneer_FileInit -.public G3i_LookAt_ -.public G3i_OrthoW_ -.public GXS_BeginLoadBGExtPltt -.public GXS_BeginLoadOBJExtPltt -.public GXS_EndLoadBGExtPltt -.public GXS_EndLoadOBJExtPltt -.public GX_BeginLoadBGExtPltt -.public GX_BeginLoadOBJExtPltt -.public GX_BeginLoadTex -.public GX_BeginLoadTexPltt -.public GX_EndLoadBGExtPltt -.public GX_EndLoadOBJExtPltt -.public GX_EndLoadTex -.public GX_EndLoadTexPltt -.public GX_LoadTex -.public GX_LoadTexPltt -.public GetAbility -.public GetAbilityString -.public GetActiveRosterIndex -.public GetActiveTeamMember -.public GetActorMatchingStorageId -.public GetCurrentBagCapacity -.public GetDsFirmwareUserSettingsVeneer -.public GetExecuteSpecialEpisodeType -.public GetGameMode -.public GetInfoMoveGround -.public GetIqSkillStringId -.public GetItemMoveId16 -.public GetItemNameFormatted -.public GetMainTeamName -.public GetMonsterGender -.public GetMonsterGenderVeneer -.public GetMoveActualAccuracy -.public GetMoveBasePowerFromId -.public GetMoveName -.public GetNameString -.public GetNbFloors -.public GetNbFloorsPlusOne -.public GetPerformanceFlagWithChecks -.public GetStringFromFileVeneer -.public GetTeamMember -.public GetTypeStringId -.public IqSkillFlagTest -.public LANGUAGE_INFO_DATA -.public LoadFileFromRom -.public LoadScriptVariableValue -.public LoadScriptVariableValueAtIndex -.public LoadStringFile -.public MOVE_ACCURACY_STARS_TABLE -.public MOVE_POWER_STARS_TABLE -.public MemAlloc -.public MemArenaAlloc -.public MemFree -.public MemLocateSet -.public MemLocateUnset -.public MemZero -.public MemZero32 -.public Memcpy32 -.public MultiplyByFixedPoint -.public NewRender3dQuadrilateral -.public NewRender3dRectangle -.public NewRender3dTexture -.public NewRender3dTiling -.public PUNCH_MOVE_LIST -.public PointsToZero -.public RECOIL_MOVE_LIST -.public RENDER_3D -.public RENDER_3D_FUNCTIONS_64 -.public Rand16Bit -.public Render3dProcessQueue -.public ResumeBgm -.public Rgb8ToRgb5 -.public StringFromId -.public StrncpySimpleNoPadSafe -.public TEAM_MEMBER_TABLE_PTR -.public UnloadFile -.public WAN_TABLE -.public ZInit8 .public _02098EA8 .public _02098EE0 .public _02098F60 @@ -390,15 +262,139 @@ .public _022A5970 .public _s32_div_f .public _u32_div_f +.public ArrayCopy32 +.public ArrayFill32 +.public AUDIO_COMMANDS_BUFFER +.public BagHasExclusiveItemTypeForMonster +.public CopyAndInterleave +.public CopyAndInterleave0 +.public CopyBitsFrom +.public CopyBitsTo +.public CopyStringFromId +.public Debug_FatalError +.public Debug_GetDebugFlag +.public Debug_Print +.public Debug_Print0 +.public DirectoryFileMngr_GetDirectoryFileSize +.public DirectoryFileMngr_LoadDirectoryFile +.public DirectoryFileMngr_OpenDirectoryFile +.public DseBgm_IsPlaying +.public DseBgm_Load +.public DseBgm_SetFades +.public DseBgm_SetSignalCallback +.public DseBgm_Stop +.public DseBgm_Unload +.public DseDriver_ConfigureHeap +.public DseDriver_Init +.public DseDriver_LoadDefaultSettings +.public DseSe_GetUsedBankIDs +.public DseSe_HasPlayingInstances +.public DseSe_Load +.public DseSe_Play +.public DseSe_Stop +.public DseSe_StopAll +.public DseSe_Unload +.public DseSequence_GetParameter +.public DseSwd_IsBankLoading +.public DseSwd_LoadBank +.public DseSwd_LoadMainBank +.public DseSwd_LoadWaves +.public DseSwd_Unload +.public DUNGEON_MOVE_TABLES +.public DungeonGoesUp +.public DungeonSwapIdxToId +.public EnqueueRender3dTexture +.public ENTITIES +.public FileClose +.public FileGetSize +.public FileRom_HandleOpen +.public FileRom_HandleRead +.public FileRom_InitDataTransfer +.public FileRom_StopDataTransfer +.public FileRom_Veneer_FileInit +.public G3i_LookAt_ +.public G3i_OrthoW_ +.public GetAbility +.public GetAbilityString +.public GetActiveRosterIndex +.public GetActiveTeamMember +.public GetActorMatchingStorageId +.public GetCurrentBagCapacity +.public GetDsFirmwareUserSettingsVeneer +.public GetExecuteSpecialEpisodeType +.public GetGameMode +.public GetInfoMoveGround +.public GetIqSkillStringId +.public GetItemMoveId16 +.public GetItemNameFormatted +.public GetMainTeamName +.public GetMonsterGender +.public GetMonsterGenderVeneer +.public GetMoveActualAccuracy +.public GetMoveBasePowerFromId +.public GetMoveName +.public GetNameString +.public GetNbFloors +.public GetNbFloorsPlusOne +.public GetPerformanceFlagWithChecks +.public GetStringFromFileVeneer +.public GetTeamMember +.public GetTypeStringId +.public GX_BeginLoadBGExtPltt +.public GX_BeginLoadOBJExtPltt +.public GX_BeginLoadTex +.public GX_BeginLoadTexPltt +.public GX_EndLoadBGExtPltt +.public GX_EndLoadOBJExtPltt +.public GX_EndLoadTex +.public GX_EndLoadTexPltt +.public GX_LoadTex +.public GX_LoadTexPltt +.public GXS_BeginLoadBGExtPltt +.public GXS_BeginLoadOBJExtPltt +.public GXS_EndLoadBGExtPltt +.public GXS_EndLoadOBJExtPltt +.public IqSkillFlagTest +.public LANGUAGE_INFO_DATA +.public LoadFileFromRom +.public LoadScriptVariableValue +.public LoadScriptVariableValueAtIndex +.public LoadStringFile +.public MemAlloc +.public MemArenaAlloc +.public Memcpy32 +.public MemFree +.public MemLocateSet +.public MemLocateUnset .public memset +.public MemZero +.public MemZero32 +.public MOVE_ACCURACY_STARS_TABLE +.public MOVE_POWER_STARS_TABLE +.public MultiplyByFixedPoint +.public NewRender3dQuadrilateral +.public NewRender3dRectangle +.public NewRender3dTexture +.public NewRender3dTiling .public ov10_022BDADC .public ov10_022C2528 +.public PointsToZero +.public PUNCH_MOVE_LIST +.public Rand16Bit +.public RECOIL_MOVE_LIST +.public Render3dProcessQueue +.public RENDER_3D +.public RENDER_3D_FUNCTIONS_64 +.public ResumeBgm +.public Rgb8ToRgb5 .public sprintf .public strcat .public strcmp .public strcpy +.public StringFromId .public strlen .public strncmp +.public StrncpySimpleNoPadSafe .public strstr .public sub_01FF8F04 .public sub_02002778 @@ -476,4 +472,8 @@ .public sub_0207C9C4 .public sub_0207C9E4 .public sub_0207CC10 +.public TEAM_MEMBER_TABLE_PTR +.public UnloadFile .public vsprintf +.public WAN_TABLE +.public ZInit8 diff --git a/asm/include/main_02034974.inc b/asm/include/main_02034974.inc index 8463fd25..d222ca94 100644 --- a/asm/include/main_02034974.inc +++ b/asm/include/main_02034974.inc @@ -1,99 +1,4 @@ #pragma once -.public CheckDebugMenuField0x1A4 -.public CheckOptionsMenuField0x1A4 -.public CheckParentMenuField0x1A0 -.public CloseAdvancedMenu -.public CloseAdvancedTextBox -.public CloseDebugMenu -.public CloseDialogueBox -.public CloseOptionsMenu -.public CloseParentMenu -.public ClosePortraitBox -.public CloseSimpleMenu -.public CloseTeamSelectionMenu -.public CloseTextBox -.public CreateAdvancedMenu -.public CreateAdvancedTextBox -.public CreateDebugMenu -.public CreateDialogueBox -.public CreateOptionsMenu -.public CreateParentMenuFromStringIds -.public CreatePortraitBox -.public CreateSimpleMenu -.public CreateSimpleMenuFromStringIds -.public CreateTeamSelectionMenu -.public CreateTextBox -.public Debug_GetDebugFlag -.public Debug_GetLogFlag -.public Debug_Print0 -.public Debug_SetDebugFlag -.public Debug_SetLogFlag -.public DrawTextInWindow -.public FemaleToMaleForm -.public GetActiveRosterIndex -.public GetActiveTeamMember -.public GetAdvancedMenuResult -.public GetDexNumber -.public GetEvolutionPossibilities -.public GetHeldButtons -.public GetHero -.public GetHeroMemberIdx -.public GetItemMoveId16 -.public GetKeyM2NSwitch -.public GetMainCharacter1MemberIdx -.public GetMainCharacter2MemberIdx -.public GetMainCharacter3MemberIdx -.public GetNameString -.public GetOptionsMenuResult -.public GetOptionsMenuStates -.public GetPartner -.public GetPartnerMemberIdx -.public GetPressedButtons -.public GetSimpleMenuResult -.public GetStringFromFileVeneer -.public GetTeamMember -.public GetType -.public GetWindow -.public HidePortraitBox -.public InitPortraitParams -.public IsAdvancedMenuActive2 -.public IsAdvancedTextBoxActive -.public IsDebugMenuActive -.public IsDialogueBoxActive -.public IsMainCharacter -.public IsMovesetValidInTimeDarkness -.public IsOptionsMenuActive -.public IsParentMenuActive -.public IsShaymin -.public IsSimpleMenuActive -.public IsTeamSelectionMenuActive -.public IsTeamSelectionMenuState3 -.public IsValidPortrait -.public IsValidTeamMember -.public KEYBOARD_STRING_IDS -.public LoadOverlay -.public MemAlloc -.public MemFree -.public MemZero -.public MemcpySimple -.public OverlayIsLoaded -.public PlaySeVolumeWrapper -.public PreprocessStringFromId -.public SaveScriptVariableValueBytes -.public SetAdvancedTextBoxField0x1C2 -.public SetAdvancedTextBoxState5 -.public SetMainTeamName -.public SetNotifyNote -.public SetSimpleMenuField0x1AC -.public ShowDialogueBox -.public ShowPortraitInPortraitBox -.public ShowStringIdInDialogueBox -.public ShowStringInDialogueBox -.public StrcpySimple -.public StrncpySimple -.public StrncpySimpleNoPadSafe -.public TEAM_MEMBER_TABLE_PTR -.public UpdateWindow .public _0209B08C .public _0209B09C .public _0209B0EC @@ -173,10 +78,103 @@ .public _020B12A0_JP .public _022AADF8 .public _s32_div_f +.public CheckDebugMenuField0x1A4 +.public CheckOptionsMenuField0x1A4 +.public CheckParentMenuField0x1A0 +.public CloseAdvancedMenu +.public CloseAdvancedTextBox +.public CloseDebugMenu +.public CloseDialogueBox +.public CloseOptionsMenu +.public CloseParentMenu +.public ClosePortraitBox +.public CloseSimpleMenu +.public CloseTeamSelectionMenu +.public CloseTextBox +.public CreateAdvancedMenu +.public CreateAdvancedTextBox +.public CreateDebugMenu +.public CreateDialogueBox +.public CreateOptionsMenu +.public CreateParentMenuFromStringIds +.public CreatePortraitBox +.public CreateSimpleMenu +.public CreateSimpleMenuFromStringIds +.public CreateTeamSelectionMenu +.public CreateTextBox +.public Debug_GetDebugFlag +.public Debug_GetLogFlag +.public Debug_Print0 +.public Debug_SetDebugFlag +.public Debug_SetLogFlag +.public DrawTextInWindow +.public FemaleToMaleForm +.public GetActiveRosterIndex +.public GetActiveTeamMember +.public GetAdvancedMenuResult +.public GetDexNumber +.public GetEvolutionPossibilities +.public GetHeldButtons +.public GetHero +.public GetHeroMemberIdx +.public GetItemMoveId16 +.public GetKeyM2NSwitch +.public GetMainCharacter1MemberIdx +.public GetMainCharacter2MemberIdx +.public GetMainCharacter3MemberIdx +.public GetNameString +.public GetOptionsMenuResult +.public GetOptionsMenuStates +.public GetPartner +.public GetPartnerMemberIdx +.public GetPressedButtons +.public GetSimpleMenuResult +.public GetStringFromFileVeneer +.public GetTeamMember +.public GetType +.public GetWindow +.public HidePortraitBox +.public InitPortraitParams +.public IsAdvancedMenuActive2 +.public IsAdvancedTextBoxActive +.public IsDebugMenuActive +.public IsDialogueBoxActive +.public IsMainCharacter +.public IsMovesetValidInTimeDarkness +.public IsOptionsMenuActive +.public IsParentMenuActive +.public IsShaymin +.public IsSimpleMenuActive +.public IsTeamSelectionMenuActive +.public IsTeamSelectionMenuState3 +.public IsValidPortrait +.public IsValidTeamMember +.public KEYBOARD_STRING_IDS +.public LoadOverlay +.public MemAlloc +.public MemcpySimple +.public MemFree +.public MemZero .public ov11_022E6E68 .public ov11_0230D71C +.public OverlayIsLoaded +.public PlaySeVolumeWrapper +.public PreprocessStringFromId +.public SaveScriptVariableValueBytes +.public SetAdvancedTextBoxField0x1C2 +.public SetAdvancedTextBoxState5 +.public SetMainTeamName +.public SetNotifyNote +.public SetSimpleMenuField0x1AC +.public ShowDialogueBox +.public ShowPortraitInPortraitBox +.public ShowStringIdInDialogueBox +.public ShowStringInDialogueBox .public sprintf .public strcpy +.public StrcpySimple +.public StrncpySimple +.public StrncpySimpleNoPadSafe .public sub_020063F4 .public sub_0202065C .public sub_020236FC @@ -244,4 +242,6 @@ .public sub_02056F60 .public sub_020584F8 .public sub_02059B08 +.public TEAM_MEMBER_TABLE_PTR +.public UpdateWindow .public vsprintf diff --git a/asm/include/main_0203C774.inc b/asm/include/main_0203C774.inc index dc9f9b00..d891668b 100644 --- a/asm/include/main_0203C774.inc +++ b/asm/include/main_0203C774.inc @@ -1,206 +1,4 @@ #pragma once -.public AddItemToStorage -.public AddMoneyCarried -.public ApplyLevelUpBoostsToGroundMonster -.public Arm9LoadUnkFieldNa0x2029EC8 -.public Arm9StoreUnkFieldNa0x2029ED8 -.public BAG_ITEMS_PTR_MIRROR -.public CanMonsterUseMove -.public CardBackupError -.public CardPullOutWithStatus -.public ClearAdventureLogStruct -.public ClearWindow -.public CloseAdvancedMenu -.public CloseAdvancedTextBox -.public CloseAdvancedTextBox2 -.public CloseCollectionMenu -.public CloseDialogueBox -.public CloseParentMenu -.public ClosePortraitBox -.public CloseScrollBox -.public CloseSimpleMenu -.public CloseTextBox -.public CloseTextBox2 -.public ConvertStorageItemAtIdxToItem -.public CopyBitsFrom -.public CopyBitsTo -.public CopyNStringFromId -.public CopyProgressInfoFromScratchFrom -.public CopyProgressInfoFromScratchTo -.public CountNbOfItemsInStorage -.public CountNbOfValidItemsInStorage -.public CountNbOfValidItemsInTimeDarknessInStorage -.public CreateAdvancedMenu -.public CreateAdvancedTextBox -.public CreateAdvancedTextBoxWithArg -.public CreateCollectionMenu -.public CreateDialogueBox -.public CreateParentMenu -.public CreateParentMenuFromStringIds -.public CreatePortraitBox -.public CreateScrollBoxMulti -.public CreateScrollBoxSingle -.public CreateSimpleMenu -.public CreateSimpleMenuFromStringIds -.public CreateTextBox -.public CreateTextBoxWithArg -.public DEFAULT_HERO_ID -.public DUNGEON_PTR -.public Debug_GetDebugFlag -.public Debug_Print0 -.public DisableIqSkill -.public DrawTextInWindow -.public DrawTileGrid -.public DumpScriptVariableValues -.public EnableAllLearnableIqSkills -.public EventFlagBackup -.public EventFlagResume -.public FORBIDDEN_FORGOT_MOVE_LIST -.public FormatMoveStringMore -.public GAME_MODE -.public GetActiveTeamMember -.public GetActualSellPrice -.public GetAdvancedMenuCurrentOption -.public GetAdvancedMenuResult -.public GetAdvancedTextBoxFlags2 -.public GetAdventureLogDungeonFloor -.public GetCurrentBagCapacity -.public GetDexNumber -.public GetDungeonResultString -.public GetExecuteSpecialEpisodeType -.public GetHeldButtons -.public GetHero -.public GetHeroMemberIdx -.public GetInfoGroundMoveset -.public GetIqSkillStringId -.public GetItemAtIdx -.public GetItemCategory -.public GetItemCategoryVeneer -.public GetKeyboardStatus -.public GetKeyboardStringResult -.public GetLanguageType -.public GetLearnableIqSkills -.public GetMaxPp -.public GetMoneyCarried -.public GetMonsterGenderVeneer -.public GetMonsterName -.public GetMoveRangeId -.public GetMoveType -.public GetNameRaw -.public GetNameWithGender -.public GetNbItemsInBag -.public GetNextIqSkill -.public GetPartner -.public GetPartnerMemberIdx -.public GetPerformanceFlagWithChecks -.public GetPpIncrease -.public GetPressedButtons -.public GetRank -.public GetRankUpEntry -.public GetReleasedStylus -.public GetRngSeed -.public GetSimpleMenuResult -.public GetSpecialEpisodeType -.public GetSpeciesString -.public GetStringFromFileVeneer -.public GetTeamMember -.public GetTime -.public GetType -.public GetTypeStringId -.public HidePortraitBox -.public InitMove -.public InitPortraitParams -.public InitPortraitParamsWithMonsterId -.public InitPreprocessorArgs -.public InitScriptVariableValues -.public IqSkillFlagTest -.public Is2TurnsMove -.public IsAdvancedMenuActive2 -.public IsAdvancedTextBoxActive -.public IsCollectionMenuActive -.public IsCollectionMenuState3 -.public IsDeoxys -.public IsDialogueBoxActive -.public IsExclusiveItemIdForMonster -.public IsExperienceLocked -.public IsGummi -.public IsItemInTimeDarkness -.public IsItemValidVeneer -.public IsMonsterIllegalForMissions -.public IsNot2TurnsMoveOrSketch -.public IsParentMenuActive -.public IsScrollBoxActive -.public IsShoppableItem -.public IsSimpleMenuActive -.public IsStorableItem -.public IsStorageFull -.public IsThrownItem -.public IsTreasureBox -.public LAST_NEW_MOVE -.public LearnMoves -.public LoadScriptVariableValue -.public MemAlloc -.public MemFree -.public MemZero -.public MemcpySimple -.public MemsetSimple -.public NOTIFY_NOTE -.public OS_GetLockID -.public PARTNER_TALK_KIND_TABLE -.public PlayAdvancedTextBoxInputSound -.public PlayBgmByIdVeneer -.public PlaySeVolumeWrapper -.public PreprocessString -.public PreprocessStringFromId -.public Rand32Bit -.public RandInt -.public RandIntSafe -.public ReadItemsFromSave -.public ReadMonsterInfoFromSave -.public ReadStringFromDialogueBox -.public RemoveEmptyItemsInBag -.public ResetGlobalProgress -.public RestoreScriptVariableValues -.public ResumeAdvancedMenu -.public SPECIAL_EPISODE_MAIN_CHARACTERS -.public STATUSES_FULL_DESCRIPTION_STRING_IDS -.public SaveScriptVariableValue -.public SaveScriptVariableValueBytes -.public SetActiveInventory -.public SetActiveKecleonShop -.public SetActiveTeam -.public SetAdvancedTextBoxField0x1C2 -.public SetAdvancedTextBoxPartialMenu -.public SetAdvancedTextBoxState5 -.public SetBothScreensWindowsColor -.public SetCollectionMenuField0x1BC -.public SetCollectionMenuVoidFn -.public SetCollectionMenuWidth -.public SetPortraitEmotion -.public SetPortraitLayout -.public SetPortraitOffset -.public SetRngSeed -.public SetTeamSetupHeroAndPartnerOnly -.public SetUnkAdvancedTextBoxFn -.public SetUnkAdvancedTextBoxWindowFn -.public ShowDialogueBox -.public ShowKeyboard -.public ShowPortraitInPortraitBox -.public ShowStringIdInDialogueBox -.public ShowStringInDialogueBox -.public SortItemsInBag -.public SortItemsInStorage -.public StoreDefaultTeamData -.public StrcpySimple -.public StringFromId -.public StrncpyName -.public StrncpySimple -.public StrncpySimpleNoPadSafe -.public TEAM_MEMBER_TABLE_PTR -.public TryPointCameraToMonster -.public UpdateWindow -.public WriteItemsToSave -.public WriteMonsterInfoToSave .public _0209C60C .public _0209C7CC .public _0209C7D4 @@ -356,7 +154,154 @@ .public _f2d .public _fsub .public _s32_div_f +.public AddItemToStorage +.public AddMoneyCarried +.public ApplyLevelUpBoostsToGroundMonster +.public Arm9LoadUnkFieldNa0x2029EC8 +.public Arm9StoreUnkFieldNa0x2029ED8 +.public BAG_ITEMS_PTR_MIRROR +.public CanMonsterUseMove +.public CardBackupError +.public CardPullOutWithStatus +.public ClearAdventureLogStruct +.public ClearWindow +.public CloseAdvancedMenu +.public CloseAdvancedTextBox +.public CloseAdvancedTextBox2 +.public CloseCollectionMenu +.public CloseDialogueBox +.public CloseParentMenu +.public ClosePortraitBox +.public CloseScrollBox +.public CloseSimpleMenu +.public CloseTextBox +.public CloseTextBox2 +.public ConvertStorageItemAtIdxToItem +.public CopyBitsFrom +.public CopyBitsTo +.public CopyNStringFromId +.public CopyProgressInfoFromScratchFrom +.public CopyProgressInfoFromScratchTo +.public CountNbOfItemsInStorage +.public CountNbOfValidItemsInStorage +.public CountNbOfValidItemsInTimeDarknessInStorage +.public CreateAdvancedMenu +.public CreateAdvancedTextBox +.public CreateAdvancedTextBoxWithArg +.public CreateCollectionMenu +.public CreateDialogueBox +.public CreateParentMenu +.public CreateParentMenuFromStringIds +.public CreatePortraitBox +.public CreateScrollBoxMulti +.public CreateScrollBoxSingle +.public CreateSimpleMenu +.public CreateSimpleMenuFromStringIds +.public CreateTextBox +.public CreateTextBoxWithArg +.public Debug_GetDebugFlag +.public Debug_Print0 +.public DEFAULT_HERO_ID +.public DisableIqSkill +.public DrawTextInWindow +.public DrawTileGrid +.public DumpScriptVariableValues +.public DUNGEON_PTR +.public EnableAllLearnableIqSkills +.public EventFlagBackup +.public EventFlagResume +.public FORBIDDEN_FORGOT_MOVE_LIST +.public FormatMoveStringMore +.public GAME_MODE +.public GetActiveTeamMember +.public GetActualSellPrice +.public GetAdvancedMenuCurrentOption +.public GetAdvancedMenuResult +.public GetAdvancedTextBoxFlags2 +.public GetAdventureLogDungeonFloor +.public GetCurrentBagCapacity +.public GetDexNumber +.public GetDungeonResultString +.public GetExecuteSpecialEpisodeType +.public GetHeldButtons +.public GetHero +.public GetHeroMemberIdx +.public GetInfoGroundMoveset +.public GetIqSkillStringId +.public GetItemAtIdx +.public GetItemCategory +.public GetItemCategoryVeneer +.public GetKeyboardStatus +.public GetKeyboardStringResult +.public GetLanguageType +.public GetLearnableIqSkills +.public GetMaxPp +.public GetMoneyCarried +.public GetMonsterGenderVeneer +.public GetMonsterName +.public GetMoveRangeId +.public GetMoveType +.public GetNameRaw +.public GetNameWithGender +.public GetNbItemsInBag +.public GetNextIqSkill +.public GetPartner +.public GetPartnerMemberIdx +.public GetPerformanceFlagWithChecks +.public GetPpIncrease +.public GetPressedButtons +.public GetRank +.public GetRankUpEntry +.public GetReleasedStylus +.public GetRngSeed +.public GetSimpleMenuResult +.public GetSpecialEpisodeType +.public GetSpeciesString +.public GetStringFromFileVeneer +.public GetTeamMember +.public GetTime +.public GetType +.public GetTypeStringId +.public HidePortraitBox +.public InitMove +.public InitPortraitParams +.public InitPortraitParamsWithMonsterId +.public InitPreprocessorArgs +.public InitScriptVariableValues +.public IqSkillFlagTest +.public Is2TurnsMove +.public IsAdvancedMenuActive2 +.public IsAdvancedTextBoxActive +.public IsCollectionMenuActive +.public IsCollectionMenuState3 +.public IsDeoxys +.public IsDialogueBoxActive +.public IsExclusiveItemIdForMonster +.public IsExperienceLocked +.public IsGummi +.public IsItemInTimeDarkness +.public IsItemValidVeneer +.public IsMonsterIllegalForMissions +.public IsNot2TurnsMoveOrSketch +.public IsParentMenuActive +.public IsScrollBoxActive +.public IsShoppableItem +.public IsSimpleMenuActive +.public IsStorableItem +.public IsStorageFull +.public IsThrownItem +.public IsTreasureBox +.public LAST_NEW_MOVE +.public LearnMoves +.public LoadScriptVariableValue +.public MemAlloc .public memcpy +.public MemcpySimple +.public MemFree +.public MemsetSimple +.public MemZero +.public NOTIFY_NOTE +.public OS_GetLockID .public ov11_023061CC .public ov11_023061E4 .public ov11_02306C64 @@ -370,11 +315,62 @@ .public ov29_022EA62C .public ov29_023002F0 .public ov29_02347100 +.public PARTNER_TALK_KIND_TABLE +.public PlayAdvancedTextBoxInputSound +.public PlayBgmByIdVeneer +.public PlaySeByIdVolumeWrapper +.public PlaySeVolumeWrapper +.public PreprocessString +.public PreprocessStringFromId +.public Rand32Bit +.public RandInt +.public RandIntSafe +.public ReadItemsFromSave +.public ReadMonsterInfoFromSave +.public ReadStringFromDialogueBox +.public RemoveEmptyItemsInBag +.public ResetGlobalProgress +.public RestoreScriptVariableValues +.public ResumeAdvancedMenu +.public SaveScriptVariableValue +.public SaveScriptVariableValueBytes +.public SetActiveInventory +.public SetActiveKecleonShop +.public SetActiveTeam +.public SetAdvancedTextBoxField0x1C2 +.public SetAdvancedTextBoxPartialMenu +.public SetAdvancedTextBoxState5 +.public SetBothScreensWindowsColor +.public SetCollectionMenuField0x1BC +.public SetCollectionMenuVoidFn +.public SetCollectionMenuWidth +.public SetPortraitEmotion +.public SetPortraitLayout +.public SetPortraitOffset +.public SetRngSeed +.public SetTeamSetupHeroAndPartnerOnly +.public SetUnkAdvancedTextBoxFn +.public SetUnkAdvancedTextBoxWindowFn +.public ShowDialogueBox +.public ShowKeyboard +.public ShowPortraitInPortraitBox +.public ShowStringIdInDialogueBox +.public ShowStringInDialogueBox +.public SortItemsInBag +.public SortItemsInStorage +.public SPECIAL_EPISODE_MAIN_CHARACTERS +.public STATUSES_FULL_DESCRIPTION_STRING_IDS +.public StoreDefaultTeamData .public strcat .public strcpy +.public StrcpySimple +.public StringFromId .public strlen .public strncmp .public strncpy +.public StrncpyName +.public StrncpySimple +.public StrncpySimpleNoPadSafe .public sub_02001808 .public sub_02002580 .public sub_020027F8 @@ -405,7 +401,6 @@ .public sub_02013F58 .public sub_02017C50 .public sub_02017C74 -.public sub_02017C80 .public sub_0202059C .public sub_020205C0 .public sub_02024D7C @@ -522,4 +517,9 @@ .public sub_02083B14 .public sub_02083B3C .public sub_02084304 +.public TEAM_MEMBER_TABLE_PTR +.public TryPointCameraToMonster +.public UpdateWindow .public vsprintf +.public WriteItemsToSave +.public WriteMonsterInfoToSave diff --git a/asm/include/main_0204B018.inc b/asm/include/main_0204B018.inc index 065e1a27..7960757c 100644 --- a/asm/include/main_0204B018.inc +++ b/asm/include/main_0204B018.inc @@ -1,87 +1,4 @@ #pragma once -.public ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS -.public ADVENTURE_LOG_PTR -.public ARM9_UNKNOWN_DATA__NA_209E6BC -.public ARM9_UNKNOWN_TABLE__NA_209E12C -.public ARM9_UNKNOWN_TABLE__NA_209E164 -.public ARM9_UNKNOWN_TABLE__NA_209E280 -.public AddMoneyCarried -.public ApplyLevelUpBoostsToGroundMonster -.public CLIENT_LEVEL_TABLE -.public Copy16BitsFrom -.public CopyNStringFromId -.public DEBUG_SPECIAL_EPISODE_NUMBER -.public DUNGEON_DATA_LIST -.public Debug_FatalError -.public Debug_Print -.public Debug_Print0 -.public DungeonSwapIdToIdx -.public DungeonSwapIdxToId -.public FemaleToMaleForm -.public FileClose -.public FileRom_HandleOpen -.public FileRom_HandleRead -.public FileRom_HandleSeek -.public FileRom_InitDataTransfer -.public FileRom_StopDataTransfer -.public FileRom_Veneer_FileInit -.public GAME_MODE -.public GLOBAL_PROGRESS_PTR -.public GUEST_MONSTER_DATA -.public GetBaseFormCastformCherrimDeoxys -.public GetBodySize -.public GetDexNumber -.public GetDexNumberVeneer -.public GetDungeonModeSpecial -.public GetGameMode -.public GetLanguageType -.public GetMaxItemsAllowed -.public GetMaxMembersAllowed -.public GetMoneyCarried -.public GetMoneyStored -.public GetNameString -.public GetNbItemsInBag -.public GetNotifyNote -.public GetPartyMembers -.public GetRankUpEntry -.public GetSosMailCount -.public GetStringFromFileVeneer -.public GuestMonsterToGroundMonster -.public IsItemValidVeneer -.public IsLevelResetDungeon -.public IsMoneyAllowed -.public IsRealMove -.public IsRecruitingAllowed -.public KAOMADO_FILEPATH -.public KAOMADO_STREAM -.public MISSION_FLOOR_RANKS_PTRS -.public MemAlloc -.public MemZero -.public MemcpySimple -.public NormalizeTreasureBox -.public OUTLAW_LEVEL_TABLE -.public OUTLAW_MINION_LEVEL_TABLE -.public PENDING_DUNGEON_ID -.public PLAY_TIME_SECONDS -.public PORTRAIT_LAYOUTS -.public RandInt -.public SCRIPT_VARS -.public SCRIPT_VARS_LOCALS -.public SCRIPT_VARS_VALUES -.public SECONDARY_TERRAIN_TYPES -.public SetMoneyCarried -.public SetMoneyStored -.public SetNotifyNote -.public StringFromId -.public StrncpyName -.public StrncpySimpleNoPad -.public StrncpySimpleNoPadSafe -.public TEAM_MEMBER_TABLE_PTR -.public TEAM_NAME -.public VERSION_EXCLUSIVE_MONSTERS -.public WONDER_MAIL_BITS_MAP -.public WONDER_MAIL_BITS_SWAP -.public WONDER_MAIL_ENCRYPTION_TABLE .public _0209CEAC .public _0209CF0C .public _0209CF28 @@ -126,6 +43,83 @@ .public _022AB69C .public _022AB924 .public _s32_div_f +.public AddMoneyCarried +.public ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS +.public ADVENTURE_LOG_PTR +.public ApplyLevelUpBoostsToGroundMonster +.public ARM9_UNKNOWN_DATA__NA_209E6BC +.public ARM9_UNKNOWN_TABLE__NA_209E12C +.public ARM9_UNKNOWN_TABLE__NA_209E164 +.public ARM9_UNKNOWN_TABLE__NA_209E280 +.public CLIENT_LEVEL_TABLE +.public Copy16BitsFrom +.public CopyNStringFromId +.public Debug_FatalError +.public Debug_Print +.public Debug_Print0 +.public DEBUG_SPECIAL_EPISODE_NUMBER +.public DUNGEON_DATA_LIST +.public DungeonSwapIdToIdx +.public DungeonSwapIdxToId +.public FemaleToMaleForm +.public FileClose +.public FileRom_HandleOpen +.public FileRom_HandleRead +.public FileRom_HandleSeek +.public FileRom_InitDataTransfer +.public FileRom_StopDataTransfer +.public FileRom_Veneer_FileInit +.public GAME_MODE +.public GetBaseFormCastformCherrimDeoxys +.public GetBodySize +.public GetDexNumber +.public GetDexNumberVeneer +.public GetDungeonModeSpecial +.public GetGameMode +.public GetLanguageType +.public GetMaxItemsAllowed +.public GetMaxMembersAllowed +.public GetMoneyCarried +.public GetMoneyStored +.public GetNameString +.public GetNbItemsInBag +.public GetNotifyNote +.public GetPartyMembers +.public GetRankUpEntry +.public GetSosMailCount +.public GetStringFromFileVeneer +.public GLOBAL_PROGRESS_PTR +.public GUEST_MONSTER_DATA +.public GuestMonsterToGroundMonster +.public IsItemValidVeneer +.public IsLevelResetDungeon +.public IsMoneyAllowed +.public IsRealMove +.public IsRecruitingAllowed +.public KAOMADO_FILEPATH +.public KAOMADO_STREAM +.public MemAlloc +.public MemcpySimple +.public MemZero +.public MISSION_FLOOR_RANKS_PTRS +.public NormalizeTreasureBox +.public OUTLAW_LEVEL_TABLE +.public OUTLAW_MINION_LEVEL_TABLE +.public PENDING_DUNGEON_ID +.public PLAY_TIME_SECONDS +.public PORTRAIT_LAYOUTS +.public RandInt +.public SCRIPT_VARS +.public SCRIPT_VARS_LOCALS +.public SCRIPT_VARS_VALUES +.public SECONDARY_TERRAIN_TYPES +.public SetMoneyCarried +.public SetMoneyStored +.public SetNotifyNote +.public StringFromId +.public StrncpyName +.public StrncpySimpleNoPad +.public StrncpySimpleNoPadSafe .public sub_02004F80 .public sub_0200C4CC .public sub_02048BFC @@ -144,3 +138,9 @@ .public sub_0205F00C .public sub_0205FD88 .public sub_0205FE80 +.public TEAM_MEMBER_TABLE_PTR +.public TEAM_NAME +.public VERSION_EXCLUSIVE_MONSTERS +.public WONDER_MAIL_BITS_MAP +.public WONDER_MAIL_BITS_SWAP +.public WONDER_MAIL_ENCRYPTION_TABLE diff --git a/asm/include/main_02051098.inc b/asm/include/main_02051098.inc index 5b44259f..e0e22f57 100644 --- a/asm/include/main_02051098.inc +++ b/asm/include/main_02051098.inc @@ -1,7 +1,4 @@ #pragma once -.public CopyBitsFrom -.public CopyBitsTo -.public DUNGEON_RESTRICTIONS .public _020A0C68 .public _020A0C69 .public _020A0C6A @@ -10,3 +7,6 @@ .public _020AFF7C .public _020AFF80 .public _020AFF88 +.public CopyBitsFrom +.public CopyBitsTo +.public DUNGEON_RESTRICTIONS diff --git a/asm/include/main_02051504.inc b/asm/include/main_02051504.inc index 3bea2e2a..ee539950 100644 --- a/asm/include/main_02051504.inc +++ b/asm/include/main_02051504.inc @@ -1,4 +1,5 @@ #pragma once +.public _020A1864 .public CopyBitsFrom .public CopyBitsTo .public DUNGEON_RESTRICTIONS @@ -7,4 +8,3 @@ .public GetNbFloorsPlusOne .public MISSION_FLOORS_FORBIDDEN .public RandIntSafe -.public _020A1864 diff --git a/asm/include/main_02051788.inc b/asm/include/main_02051788.inc index 00891dca..7f552ca8 100644 --- a/asm/include/main_02051788.inc +++ b/asm/include/main_02051788.inc @@ -1,25 +1,4 @@ #pragma once -.public ARM9_UNKNOWN_PTR__NA_20A2C84 -.public ARM9_UNKNOWN_TABLE__NA_20A20B0 -.public AllocateTemp1024ByteBufferFromPool -.public ArrayCopy32 -.public ArrayFill32 -.public BAG_CAPACITY_TABLE -.public BAG_CAPACITY_TABLE_SPECIAL_EPISODES -.public DecompressAtNormalVeneer -.public GetAtSize -.public GetBaseForm -.public LoadFileFromRom -.public LoadM2nAndN2m -.public MONSTER_DATA_TABLE_PTR -.public MONSTER_SPRITE_DATA -.public MemAlloc -.public MemFree -.public MemZero -.public RANK_UP_TABLE -.public StringFromId -.public UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE -.public UnloadFile .public _020A20B1 .public _020A2D09 .public _020A31B8 @@ -32,6 +11,25 @@ .public _020B09B0 .public _020B09C0 .public _s32_div_f +.public AllocateTemp1024ByteBufferFromPool +.public ARM9_UNKNOWN_PTR__NA_20A2C84 +.public ARM9_UNKNOWN_TABLE__NA_20A20B0 +.public ArrayCopy32 +.public ArrayFill32 +.public BAG_CAPACITY_TABLE +.public BAG_CAPACITY_TABLE_SPECIAL_EPISODES +.public DecompressAtNormalVeneer +.public GetAtSize +.public GetBaseForm +.public LoadFileFromRom +.public LoadM2nAndN2m +.public MemAlloc +.public MemFree +.public MemZero +.public MONSTER_DATA_TABLE_PTR +.public MONSTER_SPRITE_DATA +.public RANK_UP_TABLE +.public StringFromId .public strncpy .public sub_0200302C .public sub_020030FC @@ -50,4 +48,6 @@ .public sub_0200B3C0 .public sub_0200B3D4 .public sub_0200B3FC +.public UnloadFile +.public UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE .public vsprintf diff --git a/asm/include/main_0205297C.inc b/asm/include/main_0205297C.inc index be2afaa2..cea97cca 100644 --- a/asm/include/main_0205297C.inc +++ b/asm/include/main_0205297C.inc @@ -1,56 +1,4 @@ #pragma once -.public Debug_Print0 -.public DecompressAtNormalVeneer -.public DexNumbersEqual -.public DirectoryFileMngr_OpenDirectoryFile -.public DungeonToGroundMoveset -.public EnableAllLearnableIqSkills -.public FORBIDDEN_FORGOT_MOVE_LIST -.public FemaleToMaleForm -.public GetBaseHp -.public GetDexNumber -.public GetInfoGroundMoveset -.public GetInfoMoveGround -.public GetKeyM2NSwitch -.public GetKeyN2MSwitch -.public GetLanguage -.public GetMonsterGender -.public GetMovesetEggPtr -.public GetMovesetHmTmPtr -.public GetMovesetIdx__02013CAC -.public GetMovesetLevelUpPtr -.public GetNameRaw -.public GetNameString -.public GetNbMoves -.public GetSpriteSize -.public GroundToDungeonMoveset -.public HIDDEN_POWER_BASE_POWER_TABLE -.public HandleSir0Translation -.public IsShaymin -.public IsValidTeamMember -.public ItemZInit -.public LEVEL_UP_DATA_DECOMPRESS_BUFFER -.public LEVEL_UP_DATA_MONSTER_ID -.public LoadFileFromRom -.public LoadMonsterMd -.public MONSTER_DATA_TABLE_PTR -.public MemAlloc -.public MemFree -.public PointsToZero -.public Rand16Bit -.public RandIntSafe -.public RemoveActiveMembersFromAllTeams -.public RemoveActiveMembersFromRescueTeam -.public RemoveActiveMembersFromSpecialEpisodeTeam -.public SprintfStatic__02052418 -.public StrcpyName -.public StrncmpSimple -.public StrncpyName -.public StrncpySimple -.public TEAM_MEMBER_TABLE -.public TEAM_MEMBER_TABLE_PTR -.public UnloadFile -.public ZInit8 .public _020A1880 .public _020A1884 .public _020A189C @@ -69,6 +17,54 @@ .public _020B12F4_EU .public _020B1308_EU .public _s32_div_f +.public Debug_Print0 +.public DecompressAtNormalVeneer +.public DexNumbersEqual +.public DirectoryFileMngr_OpenDirectoryFile +.public DungeonToGroundMoveset +.public EnableAllLearnableIqSkills +.public FemaleToMaleForm +.public FORBIDDEN_FORGOT_MOVE_LIST +.public GetBaseHp +.public GetDexNumber +.public GetInfoGroundMoveset +.public GetInfoMoveGround +.public GetKeyM2NSwitch +.public GetKeyN2MSwitch +.public GetLanguage +.public GetMonsterGender +.public GetMovesetEggPtr +.public GetMovesetHmTmPtr +.public GetMovesetIdx__02013CAC +.public GetMovesetLevelUpPtr +.public GetNameRaw +.public GetNameString +.public GetNbMoves +.public GetSpriteSize +.public GroundToDungeonMoveset +.public HandleSir0Translation +.public HIDDEN_POWER_BASE_POWER_TABLE +.public IsShaymin +.public IsValidTeamMember +.public ItemZInit +.public LEVEL_UP_DATA_DECOMPRESS_BUFFER +.public LEVEL_UP_DATA_MONSTER_ID +.public LoadFileFromRom +.public LoadMonsterMd +.public MemAlloc +.public MemFree +.public MONSTER_DATA_TABLE_PTR +.public PointsToZero +.public Rand16Bit +.public RandIntSafe +.public RemoveActiveMembersFromAllTeams +.public RemoveActiveMembersFromRescueTeam +.public RemoveActiveMembersFromSpecialEpisodeTeam +.public SprintfStatic__02052418 +.public StrcpyName +.public StrncmpSimple +.public StrncpyName +.public StrncpySimple .public sub_01FF8F28 .public sub_02015090 .public sub_02025304_JP @@ -82,4 +78,8 @@ .public sub_020560B8 .public sub_020564B0 .public sub_02056504 +.public TEAM_MEMBER_TABLE +.public TEAM_MEMBER_TABLE_PTR +.public UnloadFile .public vsprintf +.public ZInit8 diff --git a/asm/include/main_02054AD4.inc b/asm/include/main_02054AD4.inc index 6f70f09b..3f59c932 100644 --- a/asm/include/main_02054AD4.inc +++ b/asm/include/main_02054AD4.inc @@ -1 +1,2 @@ #pragma once + diff --git a/asm/include/main_02058F24.inc b/asm/include/main_02058F24.inc index 96bb4974..db5af7f8 100644 --- a/asm/include/main_02058F24.inc +++ b/asm/include/main_02058F24.inc @@ -363,6 +363,7 @@ .public SetSpecialEpisodeType .public SetSpriteIdForAnimationControl .public ShowPortraitInPortraitBox +.public sin_4096 .public SPECIAL_BAND_STAT_BOOST .public STATUS_NAME_STRING_IDS .public strcat @@ -374,7 +375,6 @@ .public StrncpyName .public StrncpySimple .public StrncpySimpleNoPadSafe -.public sin_4096 .public sub_02001980 .public sub_02001AB0 .public sub_020022C4 diff --git a/asm/include/main_0206C9BC.inc b/asm/include/main_0206C9BC.inc index 44d8157b..60e21ad9 100644 --- a/asm/include/main_0206C9BC.inc +++ b/asm/include/main_0206C9BC.inc @@ -1,39 +1,4 @@ #pragma once -.public ArrayFill32Fast -.public DRIVER_WORK -.public DseChannel_AllocateNote -.public DseChannel_ChangeNote -.public DseChannel_DeallocateVoices -.public DseChannel_ReleaseNote -.public DseMem_AllocateUser -.public DseSynth_AllocateNew -.public DseSynth_ClearHeldNotes -.public DseSynth_ResetAllVoiceTimersAndVolumes -.public DseSynth_ResetAndSetBankAndSequence -.public DseSynth_RestoreHeldNotes -.public DseSynth_SetBend -.public DseSynth_SetGlobalVolumeIndex -.public DseSynth_SetPan -.public DseSynth_SetVolume -.public DseSynth_StopChannels -.public DseSynth_Unload -.public DseUtil_ByteSwap32 -.public DseVoice_Cleanup -.public DseVoice_CountNumActiveInChannel -.public DseVoice_Deallocate -.public DseVoice_PlayNote -.public DseVoice_ReleaseNote -.public DseVoice_UpdateHardware -.public DseVoice_UpdateParameters -.public Dse_SetError -.public Dse_SetError2 -.public FileInit -.public GetTimer0Control -.public SMD_EVENTS_FUN_TABLE -.public SoundEnvelope_ForceVolume -.public SoundLfoBank_Reset -.public StartThread -.public UpdateChannels .public _020B0B7C .public _022B7380 .public _022B7388 @@ -61,6 +26,40 @@ .public _fmul .public _s32_div_f .public _u32_div_f +.public ArrayFill32Fast +.public DRIVER_WORK +.public Dse_SetError +.public Dse_SetError2 +.public DseChannel_AllocateNote +.public DseChannel_ChangeNote +.public DseChannel_DeallocateVoices +.public DseChannel_ReleaseNote +.public DseMem_AllocateUser +.public DseSynth_AllocateNew +.public DseSynth_ClearHeldNotes +.public DseSynth_ResetAllVoiceTimersAndVolumes +.public DseSynth_ResetAndSetBankAndSequence +.public DseSynth_RestoreHeldNotes +.public DseSynth_SetBend +.public DseSynth_SetGlobalVolumeIndex +.public DseSynth_SetPan +.public DseSynth_SetVolume +.public DseSynth_StopChannels +.public DseSynth_Unload +.public DseUtil_ByteSwap32 +.public DseVoice_Cleanup +.public DseVoice_CountNumActiveInChannel +.public DseVoice_Deallocate +.public DseVoice_PlayNote +.public DseVoice_ReleaseNote +.public DseVoice_UpdateHardware +.public DseVoice_UpdateParameters +.public FileInit +.public GetTimer0Control +.public SMD_EVENTS_FUN_TABLE +.public SoundEnvelope_ForceVolume +.public SoundLfoBank_Reset +.public StartThread .public sub_0206C688 .public sub_02072BB8 .public sub_02079800 @@ -81,3 +80,4 @@ .public sub_0207F748 .public sub_0207F808 .public sub_0207F828 +.public UpdateChannels diff --git a/asm/include/main_0207B854.inc b/asm/include/main_0207B854.inc index 6f70f09b..3f59c932 100644 --- a/asm/include/main_0207B854.inc +++ b/asm/include/main_0207B854.inc @@ -1 +1,2 @@ #pragma once + diff --git a/asm/include/main_0207B87C.inc b/asm/include/main_0207B87C.inc index cfd3cebe..edff0b98 100644 --- a/asm/include/main_0207B87C.inc +++ b/asm/include/main_0207B87C.inc @@ -1,15 +1,14 @@ #pragma once +.public _022B99A8 +.public _022B99D0 +.public _022B99D4 +.public _022B99D8 .public ArrayCopy16 .public EnableIrqFlag .public GetTimer0Control .public MemcpyFast .public OS_GetLockID .public SetIrqFlag -.public WaitForever2 -.public _022B99A8 -.public _022B99D0 -.public _022B99D4 -.public _022B99D8 .public sub_01FF97CC .public sub_02078C3C .public sub_02078CC8 @@ -19,3 +18,4 @@ .public sub_0207DAFC .public sub_0207DB20 .public sub_02083434 +.public WaitForever2 diff --git a/asm/include/main_020897DC.inc b/asm/include/main_020897DC.inc index c690056a..356ba4f4 100644 --- a/asm/include/main_020897DC.inc +++ b/asm/include/main_020897DC.inc @@ -1,25 +1,4 @@ #pragma once -.public ARM9_UNKNOWN_DATA__NA_209EAAC -.public GetCharWidth -.public IsAOrBPressed -.public MISSION_FLOOR_RANKS_AND_ITEM_LISTS_1 -.public TryAppendToSlice -.public TryAssignByteWrapper -.public UpdateAdvancedMenu -.public UpdateAdvancedTextBox -.public UpdateAlertBox -.public UpdateAreaNameBox -.public UpdateCollectionMenu -.public UpdateControlsChart -.public UpdateDebugMenu -.public UpdateDialogueBox -.public UpdateOptionsMenu -.public UpdateParentMenu -.public UpdatePortraitBox -.public UpdateScrollBox -.public UpdateSimpleMenu -.public UpdateTeamSelectionMenu -.public UpdateTextBox .public _020908D4 .public _020908DC .public _020908E4 @@ -315,7 +294,11 @@ .public _022BCA70 .public __vsprintf_internal .public __vsprintf_internal_slice +.public ARM9_UNKNOWN_DATA__NA_209EAAC +.public GetCharWidth +.public IsAOrBPressed .public memset +.public MISSION_FLOOR_RANKS_AND_ITEM_LISTS_1 .public snprintf .public sprintf .public sub_02005D14 @@ -444,5 +427,22 @@ .public sub_02087F10 .public sub_02088510 .public sub_020895F4 +.public TryAppendToSlice +.public TryAssignByteWrapper +.public UpdateAdvancedMenu +.public UpdateAdvancedTextBox +.public UpdateAlertBox +.public UpdateAreaNameBox +.public UpdateCollectionMenu +.public UpdateControlsChart +.public UpdateDebugMenu +.public UpdateDialogueBox +.public UpdateOptionsMenu +.public UpdateParentMenu +.public UpdatePortraitBox +.public UpdateScrollBox +.public UpdateSimpleMenu +.public UpdateTeamSelectionMenu +.public UpdateTextBox .public vsprintf .public wcstombs diff --git a/asm/include/main_rodata_020A1BB0.inc b/asm/include/main_rodata_020A1BB0.inc index 7df1c67e..305cef59 100644 --- a/asm/include/main_rodata_020A1BB0.inc +++ b/asm/include/main_rodata_020A1BB0.inc @@ -1,110 +1,4 @@ #pragma once -.public ACTOR_LIST -.public BaseFormsEqual -.public DseTrackEvent_Dummy1Byte -.public DseTrackEvent_Dummy2Bytes -.public DseTrackEvent_Dummy2Bytes2 -.public DseTrackEvent_EndTrack -.public DseTrackEvent_ForceLfoEnvelopeLevel -.public DseTrackEvent_Invalid -.public DseTrackEvent_MainLoopBegin -.public DseTrackEvent_OctaveDelta -.public DseTrackEvent_PanDelta -.public DseTrackEvent_PanFade -.public DseTrackEvent_RestoreEnvelopeDefaults -.public DseTrackEvent_SetBank -.public DseTrackEvent_SetBankLsb -.public DseTrackEvent_SetBankMsb -.public DseTrackEvent_SetBpm -.public DseTrackEvent_SetBpm2 -.public DseTrackEvent_SetEnvelopeAttackBegin -.public DseTrackEvent_SetEnvelopeAttackTime -.public DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel -.public DseTrackEvent_SetEnvelopeHoldTime -.public DseTrackEvent_SetEnvelopeReleaseTime -.public DseTrackEvent_SetEnvelopeSustainTime -.public DseTrackEvent_SetExpression -.public DseTrackEvent_SetFlagBit1Unknown -.public DseTrackEvent_SetHoldNotes -.public DseTrackEvent_SetInstrument -.public DseTrackEvent_SetKeyBend -.public DseTrackEvent_SetKeyBendRange -.public DseTrackEvent_SetLfoParameter -.public DseTrackEvent_SetNoteDurationMultiplier -.public DseTrackEvent_SetNoteRandomRegion -.public DseTrackEvent_SetOctave -.public DseTrackEvent_SetOptionalVolume -.public DseTrackEvent_SetPan -.public DseTrackEvent_SetTuning -.public DseTrackEvent_SetTuningJitterAmplitude -.public DseTrackEvent_SetUnknown2 -.public DseTrackEvent_SetVolume -.public DseTrackEvent_SetupKeyBendLfo -.public DseTrackEvent_SetupKeyBendLfoEnvelope -.public DseTrackEvent_SetupLfo -.public DseTrackEvent_SetupLfoEnvelope -.public DseTrackEvent_SetupPanLfo -.public DseTrackEvent_SetupPanLfoEnvelope -.public DseTrackEvent_SetupVolumeLfo -.public DseTrackEvent_SetupVolumeLfoEnvelope -.public DseTrackEvent_Signal -.public DseTrackEvent_SongVolumeFade -.public DseTrackEvent_SubLoopBegin -.public DseTrackEvent_SubLoopBreakOnLastIteration -.public DseTrackEvent_SubLoopEnd -.public DseTrackEvent_TuningDeltaCoarse -.public DseTrackEvent_TuningDeltaFine -.public DseTrackEvent_TuningDeltaFull -.public DseTrackEvent_TuningFade -.public DseTrackEvent_UseKeyBendLfo -.public DseTrackEvent_UseLfo -.public DseTrackEvent_UsePanLfo -.public DseTrackEvent_UseVolumeLfo -.public DseTrackEvent_VolumeDelta -.public DseTrackEvent_VolumeFade -.public DseTrackEvent_Wait16 -.public DseTrackEvent_Wait24 -.public DseTrackEvent_Wait8 -.public DseTrackEvent_WaitDelta -.public DseTrackEvent_WaitSame -.public DseTrackEvent_WaitUntilFadeout -.public GetKeyM2N -.public GetKeyM2NBaseForm -.public GetKeyN2M -.public GetKeyN2MBaseForm -.public LEVEL_LIST -.public MISSION_FLOOR_RANKS_AND_ITEM_LISTS_2 -.public RANK_STRINGS_1 -.public RANK_STRINGS_2 -.public RANK_STRINGS_3 -.public REMOTE_STRINGS -.public Render3d64Nothing -.public Render3d64Quadrilateral -.public Render3d64Rectangle -.public Render3d64RectangleMulticolor -.public Render3d64Texture -.public Render3d64Texture0x7 -.public Render3d64Tiling -.public Render3d64WindowFrame -.public STRING_BALANCE_M_LEVEL_BIN -.public STRING_DUNGEON_DUNGEON_BIN -.public STRING_EFFECT_EFFECT_BIN -.public STRING_MONSTER_MONSTER_BIN -.public STRING_MONSTER_M_ATTACK_BIN -.public STRING_MONSTER_M_GROUND_BIN -.public SoundLfoWave_FullNoiseFunc -.public SoundLfoWave_FullSquareFunc -.public SoundLfoWave_FullTriangleFunc -.public SoundLfoWave_HalfNoiseFunc -.public SoundLfoWave_HalfSquareFunc -.public SoundLfoWave_HalfTriangleFunc -.public SoundLfoWave_InvalidFunc -.public SoundLfoWave_ReverseSawFunc -.public SoundLfoWave_SawFunc -.public TryAssignByte -.public UNOWN_SPECIES_ADDITIONAL_CHARS -.public ValidateLegendaryChallengeMission -.public ValidateNormalChallengeMission .public _02092474 .public _0209247C .public _02092484 @@ -1693,7 +1587,109 @@ .public _022BC770 .public _022BC870 .public _022BC970 +.public ACTOR_LIST +.public BaseFormsEqual +.public DseTrackEvent_Dummy1Byte +.public DseTrackEvent_Dummy2Bytes +.public DseTrackEvent_Dummy2Bytes2 +.public DseTrackEvent_EndTrack +.public DseTrackEvent_ForceLfoEnvelopeLevel +.public DseTrackEvent_Invalid +.public DseTrackEvent_MainLoopBegin +.public DseTrackEvent_OctaveDelta +.public DseTrackEvent_PanDelta +.public DseTrackEvent_PanFade +.public DseTrackEvent_RestoreEnvelopeDefaults +.public DseTrackEvent_SetBank +.public DseTrackEvent_SetBankLsb +.public DseTrackEvent_SetBankMsb +.public DseTrackEvent_SetBpm +.public DseTrackEvent_SetBpm2 +.public DseTrackEvent_SetEnvelopeAttackBegin +.public DseTrackEvent_SetEnvelopeAttackTime +.public DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel +.public DseTrackEvent_SetEnvelopeHoldTime +.public DseTrackEvent_SetEnvelopeReleaseTime +.public DseTrackEvent_SetEnvelopeSustainTime +.public DseTrackEvent_SetExpression +.public DseTrackEvent_SetFlagBit1Unknown +.public DseTrackEvent_SetHoldNotes +.public DseTrackEvent_SetInstrument +.public DseTrackEvent_SetKeyBend +.public DseTrackEvent_SetKeyBendRange +.public DseTrackEvent_SetLfoParameter +.public DseTrackEvent_SetNoteDurationMultiplier +.public DseTrackEvent_SetNoteRandomRegion +.public DseTrackEvent_SetOctave +.public DseTrackEvent_SetOptionalVolume +.public DseTrackEvent_SetPan +.public DseTrackEvent_SetTuning +.public DseTrackEvent_SetTuningJitterAmplitude +.public DseTrackEvent_SetUnknown2 +.public DseTrackEvent_SetupKeyBendLfo +.public DseTrackEvent_SetupKeyBendLfoEnvelope +.public DseTrackEvent_SetupLfo +.public DseTrackEvent_SetupLfoEnvelope +.public DseTrackEvent_SetupPanLfo +.public DseTrackEvent_SetupPanLfoEnvelope +.public DseTrackEvent_SetupVolumeLfo +.public DseTrackEvent_SetupVolumeLfoEnvelope +.public DseTrackEvent_SetVolume +.public DseTrackEvent_Signal +.public DseTrackEvent_SongVolumeFade +.public DseTrackEvent_SubLoopBegin +.public DseTrackEvent_SubLoopBreakOnLastIteration +.public DseTrackEvent_SubLoopEnd +.public DseTrackEvent_TuningDeltaCoarse +.public DseTrackEvent_TuningDeltaFine +.public DseTrackEvent_TuningDeltaFull +.public DseTrackEvent_TuningFade +.public DseTrackEvent_UseKeyBendLfo +.public DseTrackEvent_UseLfo +.public DseTrackEvent_UsePanLfo +.public DseTrackEvent_UseVolumeLfo +.public DseTrackEvent_VolumeDelta +.public DseTrackEvent_VolumeFade +.public DseTrackEvent_Wait16 +.public DseTrackEvent_Wait24 +.public DseTrackEvent_Wait8 +.public DseTrackEvent_WaitDelta +.public DseTrackEvent_WaitSame +.public DseTrackEvent_WaitUntilFadeout +.public GetKeyM2N +.public GetKeyM2NBaseForm +.public GetKeyN2M +.public GetKeyN2MBaseForm +.public LEVEL_LIST .public mbtowc +.public MISSION_FLOOR_RANKS_AND_ITEM_LISTS_2 +.public RANK_STRINGS_1 +.public RANK_STRINGS_2 +.public RANK_STRINGS_3 +.public REMOTE_STRINGS +.public Render3d64Nothing +.public Render3d64Quadrilateral +.public Render3d64Rectangle +.public Render3d64RectangleMulticolor +.public Render3d64Texture +.public Render3d64Texture0x7 +.public Render3d64Tiling +.public Render3d64WindowFrame +.public SoundLfoWave_FullNoiseFunc +.public SoundLfoWave_FullSquareFunc +.public SoundLfoWave_FullTriangleFunc +.public SoundLfoWave_HalfNoiseFunc +.public SoundLfoWave_HalfSquareFunc +.public SoundLfoWave_HalfTriangleFunc +.public SoundLfoWave_InvalidFunc +.public SoundLfoWave_ReverseSawFunc +.public SoundLfoWave_SawFunc +.public STRING_BALANCE_M_LEVEL_BIN +.public STRING_DUNGEON_DUNGEON_BIN +.public STRING_EFFECT_EFFECT_BIN +.public STRING_MONSTER_M_ATTACK_BIN +.public STRING_MONSTER_M_GROUND_BIN +.public STRING_MONSTER_MONSTER_BIN .public sub_02003620 .public sub_02003780 .public sub_02007EC0 @@ -1766,3 +1762,7 @@ .public sub_0209081C .public sub_0209086C .public sub_020908A0 +.public TryAssignByte +.public UNOWN_SPECIES_ADDITIONAL_CHARS +.public ValidateLegendaryChallengeMission +.public ValidateNormalChallengeMission diff --git a/asm/include/overlay_02.inc b/asm/include/overlay_02.inc index 5bc44402..2f6210cb 100644 --- a/asm/include/overlay_02.inc +++ b/asm/include/overlay_02.inc @@ -164,6 +164,7 @@ .public ov00_02318158 .public ov00_02318160 .public ov00_023250C8 +.public PM_ForceToPowerOff .public SetIrqFlag .public StartThread .public strcpy @@ -256,7 +257,6 @@ .public sub_020818B0 .public sub_020819D4 .public sub_020819EC -.public sub_0208200C .public sub_02082420 .public sub_020824A4 .public sub_02082514 diff --git a/asm/include/overlay_10_022BCC7C.inc b/asm/include/overlay_10_022BCC7C.inc index c4110efa..c71f5035 100644 --- a/asm/include/overlay_10_022BCC7C.inc +++ b/asm/include/overlay_10_022BCC7C.inc @@ -90,6 +90,7 @@ .public ov29_022EA428 .public ov29_0234C584 .public ov29_0234C5EC +.public PlaySeByIdVolumeWrapper .public PreprocessString .public Rand16Bit .public SetAndPlayAnimationForAnimationControl @@ -109,7 +110,6 @@ .public sub_0200B330 .public sub_0200B3FC .public sub_0200D310 -.public sub_02017C80 .public sub_0201B43C .public sub_0201C108 .public sub_0201C138 diff --git a/asm/include/overlay_10_022C2588.inc b/asm/include/overlay_10_022C2588.inc index 2637b1ee..096a7cc4 100644 --- a/asm/include/overlay_10_022C2588.inc +++ b/asm/include/overlay_10_022C2588.inc @@ -1,4 +1,5 @@ #pragma once +.public _020B0A5C .public BAG_ITEMS_PTR_MIRROR .public CleanStickyItemsInBag .public Debug_GetDebugFlag @@ -31,21 +32,9 @@ .public LoadWteFromFileDirectory .public MemAlloc .public MemFree -.public MemZero .public MemsetSimple +.public MemZero .public MultiplyByFixedPoint -.public ProcessWte -.public RandInt -.public RemoveEmptyItemsInBag -.public RemoveHolderForItemInBag -.public RunDungeonMode -.public SaveScriptVariableValue -.public SetMoneyCarried -.public TEAM_MEMBER_TABLE_PTR -.public UnloadFile -.public UnloadOverlay -.public UnloadWte -.public _020B0A5C .public ov10_022C434C .public ov10_022DC094 .public ov10_022DC0B8 @@ -57,6 +46,13 @@ .public ov10_022DC190 .public ov10_022DC218 .public ov10_022DC224 +.public ProcessWte +.public RandInt +.public RemoveEmptyItemsInBag +.public RemoveHolderForItemInBag +.public RunDungeonMode +.public SaveScriptVariableValue +.public SetMoneyCarried .public sub_02001AB0 .public sub_0200C4CC .public sub_02017A68 @@ -88,3 +84,7 @@ .public sub_0205BBFC .public sub_0205BC94 .public sub_0205F504 +.public TEAM_MEMBER_TABLE_PTR +.public UnloadFile +.public UnloadOverlay +.public UnloadWte diff --git a/asm/include/overlay_10_rodata_022C4584.inc b/asm/include/overlay_10_rodata_022C4584.inc index 6f70f09b..3f59c932 100644 --- a/asm/include/overlay_10_rodata_022C4584.inc +++ b/asm/include/overlay_10_rodata_022C4584.inc @@ -1 +1,2 @@ #pragma once + diff --git a/asm/include/overlay_10_rodata_022C464C.inc b/asm/include/overlay_10_rodata_022C464C.inc index 6f70f09b..3f59c932 100644 --- a/asm/include/overlay_10_rodata_022C464C.inc +++ b/asm/include/overlay_10_rodata_022C464C.inc @@ -1 +1,2 @@ #pragma once + diff --git a/asm/include/overlay_10_rodata_022C490C.inc b/asm/include/overlay_10_rodata_022C490C.inc index e8f77d4c..c8cff483 100644 --- a/asm/include/overlay_10_rodata_022C490C.inc +++ b/asm/include/overlay_10_rodata_022C490C.inc @@ -17,6 +17,10 @@ .public DoMoveCrunch .public DoMoveCrushClaw .public DoMoveCurse +.public DoMoveDamage__02325DC0 +.public DoMoveDamage__0232A500 +.public DoMoveDamage__0232B8B0 +.public DoMoveDamage__0232DD88 .public DoMoveDamageBoostAllStats .public DoMoveDamageBurn10FlameWheel .public DoMoveDamageConfuse10 @@ -42,10 +46,6 @@ .public DoMoveDamageStealItem .public DoMoveDamageWeightDependent .public DoMoveDamageWithRecoil -.public DoMoveDamage__02325DC0 -.public DoMoveDamage__0232A500 -.public DoMoveDamage__0232B8B0 -.public DoMoveDamage__0232DD88 .public DoMoveDefog .public DoMoveDestinyBond .public DoMoveDoubleEdge @@ -72,8 +72,8 @@ .public DoMoveGust .public DoMoveGyroBall .public DoMoveHammerArm -.public DoMoveHeadSmash .public DoMoveHeadbutt +.public DoMoveHeadSmash .public DoMoveHeartSwap .public DoMoveHiddenPower .public DoMoveHornDrill @@ -123,8 +123,8 @@ .public DoMoveSwapItems .public DoMoveTaunt .public DoMoveThunderFang -.public DoMoveThunderWave .public DoMoveThundershock +.public DoMoveThunderWave .public DoMoveTickle .public DoMoveTorment .public DoMoveToxic diff --git a/asm/include/overlay_11.inc b/asm/include/overlay_11.inc index 24babdfd..5b277fb9 100644 --- a/asm/include/overlay_11.inc +++ b/asm/include/overlay_11.inc @@ -316,6 +316,7 @@ .public OverlayIsLoaded .public PlayBgmByIdVeneer .public PlayBgmByIdVolumeVeneer +.public PlaySeByIdVolumeWrapper .public PlaySeVolumeWrapper .public PointsToZero .public PopInventoryMenuField0x1A3 @@ -493,7 +494,6 @@ .public sub_02017C5C .public sub_02017C68 .public sub_02017C74 -.public sub_02017C80 .public sub_02017C90 .public sub_02017C9C .public sub_02017CA8 diff --git a/asm/include/overlay_14.inc b/asm/include/overlay_14.inc index d0a3f230..51711a07 100644 --- a/asm/include/overlay_14.inc +++ b/asm/include/overlay_14.inc @@ -45,6 +45,7 @@ .public ov11_022F6FE0 .public ov11_022F7058 .public PlayBgmByIdVeneer +.public PlaySeByIdVolumeWrapper .public PortraitBoxNeedsUpdate .public PreprocessString .public RandRange @@ -63,7 +64,6 @@ .public sub_020063F4 .public sub_02017B70 .public sub_02017B7C -.public sub_02017C80 .public sub_0202BC60 .public sub_0202F334 .public sub_0202F954 diff --git a/asm/include/overlay_15_0238A234.inc b/asm/include/overlay_15_0238A234.inc index 6b085f9c..0d81b624 100644 --- a/asm/include/overlay_15_0238A234.inc +++ b/asm/include/overlay_15_0238A234.inc @@ -27,13 +27,13 @@ .public ov15_0238B10C .public ov15_0238B114 .public OVERLAY15_UNKNOWN_POINTER__NA_238B180 +.public PlaySeByIdVolumeWrapper .public PlaySeVolumeWrapper .public SetAdvancedTextBoxField0x1C2 .public SetAdvancedTextBoxField0x1C4 .public SetAdvancedTextBoxState5 .public ShowDialogueBox .public ShowStringIdInDialogueBox -.public sub_02017C80 .public sub_020288DC .public sub_0202F954 .public sub_020395CC diff --git a/asm/include/overlay_17.inc b/asm/include/overlay_17.inc index 625fffa8..521da1ad 100644 --- a/asm/include/overlay_17.inc +++ b/asm/include/overlay_17.inc @@ -11,11 +11,11 @@ .public IsScrollBoxActive .public IsSimpleMenuActive .public MemAlloc +.public ov11_0238A08C .public OVERLAY17_UNKNOWN_POINTER__NA_238BE00 .public PortraitBoxNeedsUpdate .public SetAdvancedTextBoxState5 .public SetScrollBoxState7 -.public ov11_0238A08C .public sub_0202F334 .public sub_02034A38 .public sub_0203A51C diff --git a/asm/include/overlay_17_0238A754.inc b/asm/include/overlay_17_0238A754.inc index dcfe3924..75ed0b37 100644 --- a/asm/include/overlay_17_0238A754.inc +++ b/asm/include/overlay_17_0238A754.inc @@ -29,6 +29,10 @@ .public IsDialogueBoxActive .public IsMainCharacter .public IsSimpleMenuActive +.public ov11_022DC504 +.public ov11_022E6E68 +.public ov17_0238A278 +.public ov17_0238A364 .public OVERLAY17_FUNCTION_POINTER_TABLE .public OVERLAY17_UNKNOWN_POINTER__NA_238BE00 .public PlaySeVolumeWrapper @@ -38,12 +42,6 @@ .public ShowDialogueBox .public ShowPortraitInPortraitBox .public ShowStringIdInDialogueBox -.public TEAM_MEMBER_TABLE_PTR -.public TryAddMonsterToActiveTeam -.public ov11_022DC504 -.public ov11_022E6E68 -.public ov17_0238A278 -.public ov17_0238A364 .public sub_02017C10 .public sub_02017C50 .public sub_020307EC @@ -89,3 +87,5 @@ .public sub_02057444 .public sub_02058138 .public sub_0205B028 +.public TEAM_MEMBER_TABLE_PTR +.public TryAddMonsterToActiveTeam diff --git a/asm/include/overlay_18.inc b/asm/include/overlay_18.inc index 150c6631..d5489e83 100644 --- a/asm/include/overlay_18.inc +++ b/asm/include/overlay_18.inc @@ -36,6 +36,7 @@ .public MemFree .public ov11_022E6E68 .public ov11_0238A090 +.public PlaySeByIdVolumeWrapper .public PlaySeVolumeWrapper .public PortraitBoxNeedsUpdate .public PreprocessString @@ -50,7 +51,6 @@ .public ShowStringIdInDialogueBox .public StrncpySimpleNoPadSafe .public sub_02017C74 -.public sub_02017C80 .public sub_02026268 .public sub_02027B1C .public sub_0202BC60 diff --git a/asm/include/overlay_21.inc b/asm/include/overlay_21.inc index 329da80d..ecfc04e8 100644 --- a/asm/include/overlay_21.inc +++ b/asm/include/overlay_21.inc @@ -53,6 +53,7 @@ .public ov11_0230D220 .public ov11_0230D92C .public ov11_02310C2C +.public PlaySeByIdVolumeWrapper .public PlaySeVolumeWrapper .public PreprocessString .public PrintIqSkillsMenu @@ -70,7 +71,6 @@ .public sub_0201007C .public sub_02013150 .public sub_02017C74 -.public sub_02017C80 .public sub_02026268 .public sub_02027B1C .public sub_0202836C diff --git a/asm/include/overlay_22.inc b/asm/include/overlay_22.inc index 9a8a161f..f63ca571 100644 --- a/asm/include/overlay_22.inc +++ b/asm/include/overlay_22.inc @@ -37,6 +37,7 @@ .public ov11_022DC504 .public ov11_022E6E68 .public ov11_0238A130 +.public PlaySeByIdVolumeWrapper .public PlaySeVolumeWrapper .public PreprocessString .public RemoveEmptyItemsInBag @@ -63,7 +64,6 @@ .public sub_02010BA4 .public sub_02010BC0 .public sub_02017C74 -.public sub_02017C80 .public sub_0202836C .public sub_0202C620 .public sub_0202C748 diff --git a/asm/include/overlay_25.inc b/asm/include/overlay_25.inc index 797adf5a..8dd06513 100644 --- a/asm/include/overlay_25.inc +++ b/asm/include/overlay_25.inc @@ -38,6 +38,7 @@ .public ov11_0230BCF8 .public ov11_0230BD28 .public ov11_0230C910 +.public PlaySeByIdVolumeWrapper .public PreprocessString .public RemoveItemByIdAndStackNoHole .public SetPortraitEmotion @@ -47,7 +48,6 @@ .public ShowStringIdInDialogueBox .public sub_0200D670 .public sub_02017C74 -.public sub_02017C80 .public sub_02026268 .public sub_02027B1C .public sub_0202836C diff --git a/asm/include/overlay_29_022DC314.inc b/asm/include/overlay_29_022DC314.inc index 560de786..dd3a5e13 100644 --- a/asm/include/overlay_29_022DC314.inc +++ b/asm/include/overlay_29_022DC314.inc @@ -1,10 +1,7 @@ #pragma once +.public _020AFC70 .public Debug_Print0 .public LoadFileFromRom -.public Render3dSetPaletteBase -.public Render3dSetTextureParams -.public Render3dTextureNoSetup -.public _020AFC70 .public ov29_0234FD04 .public ov29_0234FD14 .public ov29_0234FD48 @@ -13,6 +10,9 @@ .public ov29_0234FD54 .public ov29_023534E8 .public ov29_02353880 +.public Render3dSetPaletteBase +.public Render3dSetTextureParams +.public Render3dTextureNoSetup .public sub_02008BF4 .public sub_0201E050 .public sub_0201E380 diff --git a/asm/include/overlay_29_022DC65C.inc b/asm/include/overlay_29_022DC65C.inc index d0130acc..9bed57be 100644 --- a/asm/include/overlay_29_022DC65C.inc +++ b/asm/include/overlay_29_022DC65C.inc @@ -1,7 +1,9 @@ #pragma once -.public DUNGEON_PTR +.public _020AFC4C +.public _s32_div_f .public DirectoryFileMngr_OpenDirectoryFile .public DrawTeamStats +.public DUNGEON_PTR .public FreeMapAndTeam .public FreeTeamStats .public GetDefaultTileTextureId @@ -10,10 +12,6 @@ .public MemAlloc .public MemFree .public MemZero -.public UnloadFile -.public UpdateTeamStats -.public _020AFC4C -.public _s32_div_f .public ov10_022C0814 .public ov10_022C096C .public ov10_022C0998 @@ -80,3 +78,5 @@ .public sub_02063734 .public sub_02063770 .public sub_02063830 +.public UnloadFile +.public UpdateTeamStats diff --git a/asm/include/overlay_29_022DEBA4.inc b/asm/include/overlay_29_022DEBA4.inc index bc43de8d..6892008a 100644 --- a/asm/include/overlay_29_022DEBA4.inc +++ b/asm/include/overlay_29_022DEBA4.inc @@ -4,24 +4,24 @@ .public ClearHiddenStairs .public CloseFixedBin .public CountItemsOnFloorForAcuteSniffer -.public DIRECTIONS_XY -.public DUNGEON_PTR .public Debug_Print0 .public DeleteAllMonsterSpriteFiles .public DetermineAllMonsterShadow .public DetermineAllTilesWalkableNeighbors +.public DIRECTIONS_XY .public DisplayFloorCard .public DisplayFloorTip .public DisplayMessage .public DisplayMessage2 +.public DUNGEON_PTR .public DungeonGoesUp .public DungeonRandInt .public DungeonRngUnsetSecondary .public EnemyEvolution .public EntityIsValid__022E0354 -.public FIXED_ROOM_REVISIT_OVERRIDES .public FadeToBlack .public FillMissionDestinationInfo +.public FIXED_ROOM_REVISIT_OVERRIDES .public FreeLoadedAttackSpriteAndMore .public FreeTopScreenStatus .public GenerateDungeonRngSeed @@ -54,36 +54,6 @@ .public LoadWeather3DFiles .public MemZero .public OpenFixedBin -.public Rand16Bit -.public ReevaluateSnatchMonster -.public RefillTeam -.public ResetGravity -.public RunFractionalTurn -.public SetBaseStatsMovesGroundMonster -.public SetBothScreensWindowColorToDefault -.public SetDungeonRngPreseed -.public SetDungeonRngPreseed23Bit -.public SetEntityPixelPosXY -.public SetForcedLossReason -.public SetHiddenFloorField -.public SetHiddenStairsField -.public SetMaxReachedFloor -.public SetMinimapDataE447 -.public SpawnInitialMonsters -.public SpawnShopkeepers -.public SpawnTeam -.public StartFadeDungeonWrapper -.public TryActivateArtificialWeatherAbilities -.public TryActivateIqBooster -.public TryActivateSlowStart -.public TryActivateWeather -.public TryForcedLoss -.public TryInflictBurnStatusWholeTeam -.public TrySpawnDoughSeedPoke -.public UpdateMinimap -.public UpdateShouldBoostHiddenStairsSpawnChance -.public UpdateShouldBoostKecleonShopSpawnChance -.public UpdateTrapsVisibility .public ov10_022BDAB0 .public ov10_022BDB54 .public ov10_022BDB60 @@ -243,6 +213,25 @@ .public ov29_023510C0 .public ov29_023510C8 .public ov29_02353563 +.public Rand16Bit +.public ReevaluateSnatchMonster +.public RefillTeam +.public ResetGravity +.public RunFractionalTurn +.public SetBaseStatsMovesGroundMonster +.public SetBothScreensWindowColorToDefault +.public SetDungeonRngPreseed +.public SetDungeonRngPreseed23Bit +.public SetEntityPixelPosXY +.public SetForcedLossReason +.public SetHiddenFloorField +.public SetHiddenStairsField +.public SetMaxReachedFloor +.public SetMinimapDataE447 +.public SpawnInitialMonsters +.public SpawnShopkeepers +.public SpawnTeam +.public StartFadeDungeonWrapper .public sub_02001808 .public sub_02009194 .public sub_020091B0 @@ -259,3 +248,14 @@ .public sub_0205B77C .public sub_020634F4 .public sub_02063504 +.public TryActivateArtificialWeatherAbilities +.public TryActivateIqBooster +.public TryActivateSlowStart +.public TryActivateWeather +.public TryForcedLoss +.public TryInflictBurnStatusWholeTeam +.public TrySpawnDoughSeedPoke +.public UpdateMinimap +.public UpdateShouldBoostHiddenStairsSpawnChance +.public UpdateShouldBoostKecleonShopSpawnChance +.public UpdateTrapsVisibility diff --git a/asm/include/overlay_29_022E0378.inc b/asm/include/overlay_29_022E0378.inc index aa7731f0..934b8909 100644 --- a/asm/include/overlay_29_022E0378.inc +++ b/asm/include/overlay_29_022E0378.inc @@ -1,7 +1,7 @@ #pragma once .public CalcSpeedStageWrapper -.public DUNGEON_PTR .public DisplayMessage2 +.public DUNGEON_PTR .public EntityIsValid__022E0354 .public FixedRoomIsSubstituteRoom .public GetForcedLossReason @@ -15,12 +15,12 @@ .public IsFloorOver .public IsJirachiChallengeFloor .public IsMoneyAllowed -.public RemoveAllItems -.public SECONDARY_TERRAIN_TYPES -.public SetMoneyCarried -.public SubInitMonster .public ov29_022E0A18 .public ov29_022E68BC .public ov29_0234B034 .public ov29_0234B0B4 .public ov29_0237CFC0 +.public RemoveAllItems +.public SECONDARY_TERRAIN_TYPES +.public SetMoneyCarried +.public SubInitMonster diff --git a/asm/include/overlay_29_022E08A0.inc b/asm/include/overlay_29_022E08A0.inc index b1a0e72d..fc52fc88 100644 --- a/asm/include/overlay_29_022E08A0.inc +++ b/asm/include/overlay_29_022E08A0.inc @@ -1,8 +1,11 @@ #pragma once +.public _020AFC28 +.public _020AFC4C +.public _020AFC70 .public AnimationDelayOrSomething .public CopyAndInterleaveWrapper -.public DUNGEON_PTR .public DirectoryFileMngr_OpenDirectoryFile +.public DUNGEON_PTR .public DungeonGoesUp .public GetBgRegionArea .public GetFloorType @@ -16,13 +19,6 @@ .public LoadWteFromFileDirectory .public Memcpy32 .public Memset32 -.public SetMinimapDataE447 -.public StartFadeDungeonWrapper -.public UnloadFile -.public UnloadWte -.public _020AFC28 -.public _020AFC4C -.public _020AFC70 .public ov10_022C4D54 .public ov29_022DE15C .public ov29_022DE854 @@ -46,6 +42,8 @@ .public ov29_0237C6A4 .public ov29_0237C6B8 .public ov29_0237C6D4 +.public SetMinimapDataE447 +.public StartFadeDungeonWrapper .public sub_020063F4 .public sub_02006564 .public sub_02006BFC @@ -60,3 +58,5 @@ .public sub_0201E380 .public sub_0201F598 .public sub_0204AE80 +.public UnloadFile +.public UnloadWte diff --git a/asm/include/overlay_29_022E1618.inc b/asm/include/overlay_29_022E1618.inc index 6f70f09b..3f59c932 100644 --- a/asm/include/overlay_29_022E1618.inc +++ b/asm/include/overlay_29_022E1618.inc @@ -1 +1,2 @@ #pragma once + diff --git a/asm/include/overlay_29_022EB44C.inc b/asm/include/overlay_29_022EB44C.inc index c87c3a64..650a8b7f 100644 --- a/asm/include/overlay_29_022EB44C.inc +++ b/asm/include/overlay_29_022EB44C.inc @@ -5,17 +5,9 @@ .public GetItemCategoryVeneer .public GetItemInfo .public GetTile -.public ITEM_CATEGORY_ACTIONS .public IsHM +.public ITEM_CATEGORY_ACTIONS .public ItemZInit -.public RemoveEmptyItemsInBagWrapper -.public RemoveEquivItemNoHole -.public RemoveGroundItem -.public RemoveItem -.public SetItemAcquired -.public SetMonsterActionFields -.public ShouldDisplayEntityWrapper -.public SpawnItem .public ov29_02347040 .public ov29_02352074 .public ov29_0237C918 @@ -24,3 +16,11 @@ .public ov29_0237C920 .public ov29_0237C922 .public ov29_0237C96C +.public RemoveEmptyItemsInBagWrapper +.public RemoveEquivItemNoHole +.public RemoveGroundItem +.public RemoveItem +.public SetItemAcquired +.public SetMonsterActionFields +.public ShouldDisplayEntityWrapper +.public SpawnItem diff --git a/asm/include/overlay_29_022EBCE8.inc b/asm/include/overlay_29_022EBCE8.inc index 3fc6677c..53a0772a 100644 --- a/asm/include/overlay_29_022EBCE8.inc +++ b/asm/include/overlay_29_022EBCE8.inc @@ -1,28 +1,28 @@ #pragma once +.public abs .public AdvanceFrame .public CalcSpeedStageWrapper .public ChangeLeader -.public DUNGEON_PTR .public DecrementWindCounter .public DisplayActions +.public DUNGEON_PTR .public EnemyEvolution .public EntityIsValid__022EC608 .public ExecuteMonsterAction .public FRACTIONAL_TURN_SEQUENCE .public GetLeader .public IsFloorOver +.public ov29_022E81F8 +.public ov29_022EF9C8 +.public ov29_0230FC24 +.public ov29_02348FD8 +.public ov29_023522B6 .public RunMonsterAi .public SetLeaderAction +.public sub_01FFBDF4 .public TickStatusAndHealthRegen .public TryActivateArtificialWeatherAbilities .public TryActivateWeather .public TryForcedLoss .public TryRestoreRoostTyping .public TrySpawnMonsterAndActivatePlusMinus -.public abs -.public ov29_022E81F8 -.public ov29_022EF9C8 -.public ov29_0230FC24 -.public ov29_02348FD8 -.public ov29_023522B6 -.public sub_01FFBDF4 diff --git a/asm/include/overlay_29_022ECDE4.inc b/asm/include/overlay_29_022ECDE4.inc index 9706ca5f..66008d2d 100644 --- a/asm/include/overlay_29_022ECDE4.inc +++ b/asm/include/overlay_29_022ECDE4.inc @@ -1,4 +1,6 @@ #pragma once +.public _020AFC4C +.public _020AFC70 .public AdvanceFrame .public AreLateGameTrapsEnabled .public CreateMonsterSummaryFromMonster @@ -10,13 +12,8 @@ .public GetTileSafe .public InitRender3dElement64 .public LoadWteFromFileDirectory -.public MemZero -.public ProcessWte -.public SpawnTrap -.public StringFromId -.public _020AFC4C -.public _020AFC70 .public memset +.public MemZero .public ov29_022E7A30 .public ov29_02352690 .public ov29_02352698 @@ -25,7 +22,10 @@ .public ov29_0237C864 .public ov29_0237C974 .public ov29_0237C99C +.public ProcessWte +.public SpawnTrap .public strcpy +.public StringFromId .public sub_0201B9F8 .public sub_0201E080 .public sub_0201F2A0 diff --git a/asm/include/overlay_29_022EDCBC.inc b/asm/include/overlay_29_022EDCBC.inc index dba8e5c0..1798b1e4 100644 --- a/asm/include/overlay_29_022EDCBC.inc +++ b/asm/include/overlay_29_022EDCBC.inc @@ -1,8 +1,8 @@ #pragma once .public ApplyTrapEffect .public BindTrapToTile -.public DUNGEON_PTR .public DrawMinimapTile +.public DUNGEON_PTR .public DungeonRandInt .public DungeonRandOutcome__022EAB20 .public EnemyEvolution @@ -16,15 +16,15 @@ .public LogMessageByIdWithPopupCheckUser .public LogMessageByIdWithPopupCheckUserTarget .public LogMessageByIdWithPopupCheckUserUnknown -.public SpawnTrap -.public SubstitutePlaceholderStringTags -.public TRAP_BUSTER_ACTIVATION_CHANCE -.public UpdateShopkeeperModeAfterTrap -.public UpdateTrapsVisibility .public ov29_022E2CA0 .public ov29_022E56A0 .public ov29_022E58B0 .public ov29_022E7A30 .public ov29_022F9840 .public ov29_0234B034 +.public SpawnTrap .public sub_02024FC8 +.public SubstitutePlaceholderStringTags +.public TRAP_BUSTER_ACTIVATION_CHANCE +.public UpdateShopkeeperModeAfterTrap +.public UpdateTrapsVisibility diff --git a/asm/include/overlay_29_022EE36C.inc b/asm/include/overlay_29_022EE36C.inc index 8b165e6c..04c3a518 100644 --- a/asm/include/overlay_29_022EE36C.inc +++ b/asm/include/overlay_29_022EE36C.inc @@ -57,13 +57,13 @@ .public ov29_022FB920 .public ov29_022FBD80 .public ov29_02304A48 -.public ov29_02344B44 .public ov29_02346344 -.public ov29_0234B084 +.public PrepareItemForPrinting__02345728 .public RemoveEmptyItemsInBagWrapper .public RemoveGroundItem .public RemoveHeldItemNoHole .public SetFlagsForHeldItemInBag +.public SetPreprocessorArgsIdVal .public ShouldDisplayEntityWrapper .public SLEEP_TURN_RANGE .public SPATK_STAT_IDX diff --git a/asm/include/overlay_29_022F05B4.inc b/asm/include/overlay_29_022F05B4.inc index 1d10d4ef..5df14a93 100644 --- a/asm/include/overlay_29_022F05B4.inc +++ b/asm/include/overlay_29_022F05B4.inc @@ -10,6 +10,7 @@ .public AnimationDelayOrSomething .public BAG_ITEMS_PTR_MIRROR .public CanMonsterMoveInDirection +.public CanMonsterMoveOrSwapWithAllyInDirection .public CanSeeTarget .public CeilFixedPoint .public ChangeMonsterAnimation @@ -111,7 +112,6 @@ .public ov29_023009CC .public ov29_02300FCC .public ov29_0230105C -.public CanMonsterMoveOrSwapWithAllyInDirection .public ov29_023055B0 .public ov29_02321164 .public ov29_02322DDC @@ -123,7 +123,6 @@ .public ov29_02339D7C .public ov29_0233A0E8 .public ov29_0233A248 -.public ov29_02344B44 .public ov29_02346E5C .public ov29_02346FB8 .public ov29_02348D3C @@ -163,9 +162,11 @@ .public ov29_0237CFBB .public PlayExclamationPointEffect__022E47D4 .public PlayQuestionMarkEffect +.public PlaySeByIdVolumeWrapper .public PlaySeVolumeWrapper .public PointCameraToMonster .public PositionHasMonster +.public PrepareItemForPrinting__02345728 .public PreprocessString .public RemoveEmptyItemsInBagWrapper .public RemoveEquivItemNoHole @@ -181,7 +182,6 @@ .public SpawnItem .public sub_02001AB0 .public sub_02006B70 -.public sub_02017C80 .public sub_0201B9F8 .public sub_0201CF90 .public sub_02026268 diff --git a/asm/include/overlay_29_022F52B0.inc b/asm/include/overlay_29_022F52B0.inc index 0ea33cbb..ab6c33a3 100644 --- a/asm/include/overlay_29_022F52B0.inc +++ b/asm/include/overlay_29_022F52B0.inc @@ -9,6 +9,7 @@ .public ExclusiveItemEffectFlagTest .public GetItemCategoryVeneer .public GetItemToUse +.public HandleCurvedProjectileThrow .public IqSkillIsEnabled .public ItemIsActive__022F5994 .public ItemZInit @@ -25,13 +26,12 @@ .public ov29_02304A48 .public ov29_0230F9A4 .public ov29_02343D30 -.public ov29_02344B44 -.public ov29_02344B70 .public ov29_02346FB8 .public ov29_02347000 .public ov29_02347518 -.public HandleCurvedProjectileThrow .public ov29_0234B034 +.public PrepareItemForPrinting__02345728 +.public PrepareItemForPrinting__02345754 .public RemoveEmptyItemsInBagWrapper .public RemoveEquivItemNoHole .public RemoveGroundItem diff --git a/asm/include/overlay_29_022F59C4.inc b/asm/include/overlay_29_022F59C4.inc index ae3c62be..d33d73df 100644 --- a/asm/include/overlay_29_022F59C4.inc +++ b/asm/include/overlay_29_022F59C4.inc @@ -39,7 +39,6 @@ .public ov29_0230040C .public ov29_023009CC .public ov29_02304AFC -.public TryEndPetrifiedOrSleepStatus .public ov29_0231AE3C .public ov29_0232145C .public ov29_02322374 @@ -63,6 +62,7 @@ .public sub_02024FB8 .public SubstitutePlaceholderStringTags .public TryActivateTruant +.public TryEndPetrifiedOrSleepStatus .public UpdateMapSurveyorFlag .public UpdateMovePp .public YesNoMenu diff --git a/asm/include/overlay_29_022F740C.inc b/asm/include/overlay_29_022F740C.inc index 783b5d91..6b959c27 100644 --- a/asm/include/overlay_29_022F740C.inc +++ b/asm/include/overlay_29_022F740C.inc @@ -1,6 +1,6 @@ #pragma once -.public DUNGEON_PTR .public DirectoryFileMngr_GetDirectoryFileSize +.public DUNGEON_PTR .public GendersEqualNotGenderless .public GetMonsterGender .public GetSpriteFileSize @@ -9,5 +9,5 @@ .public LoadWanTableEntryFromPack .public LoadWanTableEntryFromPackUseProvidedMemory .public MemAlloc -.public WAN_TABLE .public ov29_0237C9B0 +.public WAN_TABLE diff --git a/asm/include/overlay_29_022F7768.inc b/asm/include/overlay_29_022F7768.inc index bf21afdd..4e5f8b2c 100644 --- a/asm/include/overlay_29_022F7768.inc +++ b/asm/include/overlay_29_022F7768.inc @@ -3,14 +3,14 @@ .public CanAttackInDirection .public CeilFixedPoint .public CheckTeamMemberIdx -.public DIRECTIONS_XY -.public DUNGEON_PTR .public DeleteWanTableEntryVeneer .public DetermineMonsterShadow +.public DIRECTIONS_XY .public DiscoverMinimap .public DisplayMessage .public DisplayMessage2 .public DrawMinimapTile +.public DUNGEON_PTR .public EnableAllLearnableIqSkills .public EndFrozenClassStatus .public EntityIsValid__022F7364 @@ -39,18 +39,6 @@ .public LEADER_PTR .public MemFree .public OpenMessageLog -.public PopulateActiveMonsterPtrs -.public RemoveHolderForItemInBag -.public RevertGiratinaAndShaymin -.public SetForcedLossReason -.public SetMissionTargetEnemyDefeated -.public ShouldMonsterRunAway -.public StoryRestrictionsEnabled -.public TEAM_MEMBER_TABLE_PTR -.public UpdateMapSurveyorFlag -.public UpdateMinimap -.public WAN_TABLE -.public YesNoMenu .public ov29_022DDB68 .public ov29_022E1C0C .public ov29_022E2470 @@ -76,8 +64,20 @@ .public ov29_0234B1A4 .public ov29_0234EF24 .public ov29_0237C9B0 +.public PopulateActiveMonsterPtrs +.public RemoveHolderForItemInBag +.public RevertGiratinaAndShaymin +.public SetForcedLossReason +.public SetMissionTargetEnemyDefeated +.public ShouldMonsterRunAway +.public StoryRestrictionsEnabled .public sub_02053250 .public sub_0205349C .public sub_02056228 .public sub_020566C4 .public sub_020585B4 +.public TEAM_MEMBER_TABLE_PTR +.public UpdateMapSurveyorFlag +.public UpdateMinimap +.public WAN_TABLE +.public YesNoMenu diff --git a/asm/include/overlay_29_022F9194.inc b/asm/include/overlay_29_022F9194.inc index e62589ba..1936adce 100644 --- a/asm/include/overlay_29_022F9194.inc +++ b/asm/include/overlay_29_022F9194.inc @@ -15,11 +15,11 @@ .public LogMessageByIdWithPopupCheckUserTarget .public LowerSpeed .public MonsterIsType -.public SubstitutePlaceholderStringTags -.public TryEndStatusWithAbility -.public WEATHER_BALL_TYPE_TABLE .public ov10_022C4C6E .public ov10_022C4C70 .public ov29_022E6260 .public ov29_022E647C -.public ov29_0234B084 +.public SetPreprocessorArgsIdVal +.public SubstitutePlaceholderStringTags +.public TryEndStatusWithAbility +.public WEATHER_BALL_TYPE_TABLE diff --git a/asm/include/overlay_29_022F9744.inc b/asm/include/overlay_29_022F9744.inc index 687640a5..f9489b42 100644 --- a/asm/include/overlay_29_022F9744.inc +++ b/asm/include/overlay_29_022F9744.inc @@ -11,10 +11,10 @@ .public CheckVariousStatuses .public CheckVariousStatuses2 .public Conversion2IsActive -.public DIRECTIONS_XY -.public DUNGEON_PTR .public DefenderAbilityIsActive__022F96CC +.public DIRECTIONS_XY .public DiscoverMinimap +.public DUNGEON_PTR .public DungeonRandInt .public EnableIqSkill .public EndBurnClassStatus @@ -48,19 +48,6 @@ .public LogMessageByIdWithPopup .public LogMessageByIdWithPopupCheckUser .public LogMessageByIdWithPopupCheckUserTarget -.public PointCameraToMonster -.public RestoreAllMovePP -.public SECONDARY_TERRAIN_TYPES -.public SetActionPassTurnOrWalk -.public ShouldDisplayEntityWrapper -.public ShowPpRestoreEffect -.public SubFixedPoint -.public SubstitutePlaceholderStringTags -.public TryInflictBurnStatus -.public TryInflictPausedStatus -.public UpdateCamera -.public UpdateMinimap -.public UpdateStatusIconFlags .public ov29_022E0A04 .public ov29_022E4160 .public ov29_022E68BC @@ -76,12 +63,25 @@ .public ov29_02304A48 .public ov29_02307CE0 .public ov29_02307DD0 -.public ov29_02344B44 .public ov29_0234B034 -.public ov29_0234B084 +.public PointCameraToMonster +.public PrepareItemForPrinting__02345728 +.public RestoreAllMovePP +.public SECONDARY_TERRAIN_TYPES +.public SetActionPassTurnOrWalk +.public SetPreprocessorArgsIdVal +.public ShouldDisplayEntityWrapper +.public ShowPpRestoreEffect .public sub_0201405C .public sub_02017C50 .public sub_0204AEF0 .public sub_02050FF8 .public sub_02052E2C .public sub_02056228 +.public SubFixedPoint +.public SubstitutePlaceholderStringTags +.public TryInflictBurnStatus +.public TryInflictPausedStatus +.public UpdateCamera +.public UpdateMinimap +.public UpdateStatusIconFlags diff --git a/asm/include/overlay_29_022FACBC.inc b/asm/include/overlay_29_022FACBC.inc index 7db5f36e..c04b00cc 100644 --- a/asm/include/overlay_29_022FACBC.inc +++ b/asm/include/overlay_29_022FACBC.inc @@ -20,13 +20,13 @@ .public ItemZInit .public LogMessageByIdWithPopupCheckUser .public LogMessageByIdWithPopupCheckUserTarget +.public ov29_022E6928 +.public ov29_022EA370 +.public ov29_0230F9A4 +.public ov29_0234B09C +.public PrepareItemForPrinting__02345728 .public RandInt .public RemoveEquivItem .public ShouldTryEatItem .public SubstitutePlaceholderStringTags .public TryIncreaseHp -.public ov29_022E6928 -.public ov29_022EA370 -.public ov29_0230F9A4 -.public ov29_02344B44 -.public ov29_0234B09C diff --git a/asm/include/overlay_29_022FB678.inc b/asm/include/overlay_29_022FB678.inc index 4079ad09..c1d564b1 100644 --- a/asm/include/overlay_29_022FB678.inc +++ b/asm/include/overlay_29_022FB678.inc @@ -1,8 +1,9 @@ #pragma once +.public _020A1870 .public Conversion2IsActive .public DIRECTIONS_XY -.public DUNGEON_PTR .public DisplayAnimatedNumbers +.public DUNGEON_PTR .public EntityIsValid__022F7364 .public GetMaxPp .public GetMoveBasePp @@ -10,10 +11,9 @@ .public IqSkillIsEnabled .public IsMonster__022F9720 .public IsSecretBazaarNpcBehavior -.public TeamMemberHasEnabledIqSkill -.public UpdateMapSurveyorFlag -.public UpdateMinimap -.public _020A1870 .public ov29_022E576C .public ov29_02307CE0 .public ov29_02348100 +.public TeamMemberHasEnabledIqSkill +.public UpdateMapSurveyorFlag +.public UpdateMinimap diff --git a/asm/include/overlay_29_022FE4BC.inc b/asm/include/overlay_29_022FE4BC.inc index 7bffaf22..d521ec30 100644 --- a/asm/include/overlay_29_022FE4BC.inc +++ b/asm/include/overlay_29_022FE4BC.inc @@ -3,7 +3,6 @@ .public AdvanceFrame .public AnimationDelayOrSomething .public CanMonsterMoveInDirection -.public MonsterCannotAttack .public CannotStandOnTile .public DIRECTIONS_XY .public DisplayActions @@ -12,11 +11,13 @@ .public EnsureCanStandCurrentTile .public EntityIsValid__022FED98 .public GetHiddenStairsField +.public HandleHeldItemSwaps .public HasHeldItem .public IqSkillIsEnabled .public IsChargingAnyTwoTurnMove .public IsFloorOver .public LogMessageByIdWithPopupCheckUser +.public MonsterCannotAttack .public MonsterCanThrowItems .public MoveMonsterToPos .public ov10_022C4F3C @@ -31,7 +32,6 @@ .public ov29_022F4350 .public ov29_022F4370 .public ov29_022F44F0 -.public ov29_022F45CC .public ov29_022F48D8 .public ov29_022F49E0 .public ov29_022F4BDC diff --git a/asm/include/overlay_29_022FEDBC.inc b/asm/include/overlay_29_022FEDBC.inc index 8a5cd7fb..32c482ff 100644 --- a/asm/include/overlay_29_022FEDBC.inc +++ b/asm/include/overlay_29_022FEDBC.inc @@ -1,12 +1,12 @@ #pragma once .public ActivateFlashFire .public CanMonsterUseMove -.public MonsterCannotAttack .public DUNGEON_PTR .public DungeonRandInt .public EntityIsValid__022FED98 .public IsMonsterSleeping .public LogMessageByIdWithPopupCheckUser +.public MonsterCannotAttack .public ov29_022E56A0 .public ov29_022FAA04 .public ov29_02322374 diff --git a/asm/include/overlay_29_022FFF4C.inc b/asm/include/overlay_29_022FFF4C.inc index d77480ad..05a105b1 100644 --- a/asm/include/overlay_29_022FFF4C.inc +++ b/asm/include/overlay_29_022FFF4C.inc @@ -1,13 +1,13 @@ #pragma once .public AbilityIsActive .public CalcSpeedStage -.public EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST .public EntityIsValid__023000E4 +.public EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST .public ExclusiveItemEffectIsActive__022FFF28 .public GetApparentWeather .public GetExclusiveItemWithEffectFromBag .public LogMessageByIdWithPopupCheckUser +.public ov29_022E655C +.public PrepareItemForPrinting__02345728 .public SubstitutePlaceholderStringTags .public UpdateStateFlags -.public ov29_022E655C -.public ov29_02344B44 diff --git a/asm/include/overlay_29_02300FCC.inc b/asm/include/overlay_29_02300FCC.inc index 41d36e31..416df489 100644 --- a/asm/include/overlay_29_02300FCC.inc +++ b/asm/include/overlay_29_02300FCC.inc @@ -1,4 +1,6 @@ #pragma once +.public DIRECTIONAL_BIT_MASKS__02352788 +.public DIRECTIONAL_BIT_MASKS__02352790 .public DIRECTIONS_XY .public GetDirectionalMobilityType .public GetMobilityTypeCheckSlipAndFloating @@ -6,5 +8,3 @@ .public IqSkillIsEnabled .public IsCurrentTilesetBackground .public ItemIsActive__022FF898 -.public DIRECTIONAL_BIT_MASKS__02352788 -.public DIRECTIONAL_BIT_MASKS__02352790 diff --git a/asm/include/overlay_29_023016D8.inc b/asm/include/overlay_29_023016D8.inc index f8427fbc..53423515 100644 --- a/asm/include/overlay_29_023016D8.inc +++ b/asm/include/overlay_29_023016D8.inc @@ -1,4 +1,4 @@ #pragma once .public AbilityIsActive -.public UpdateStateFlags .public PlayEffectAnimation0x29 +.public UpdateStateFlags diff --git a/asm/include/overlay_29_02301A84.inc b/asm/include/overlay_29_02301A84.inc index 05bb8588..347fbeaa 100644 --- a/asm/include/overlay_29_02301A84.inc +++ b/asm/include/overlay_29_02301A84.inc @@ -8,5 +8,5 @@ .public MistIsActive .public ov29_02314DC4 .public ov29_02324BE8 -.public ov29_02344B44 +.public PrepareItemForPrinting__02345728 .public SubstitutePlaceholderStringTags diff --git a/asm/include/overlay_29_02301D84.inc b/asm/include/overlay_29_02301D84.inc index 625aaec3..95d79e9a 100644 --- a/asm/include/overlay_29_02301D84.inc +++ b/asm/include/overlay_29_02301D84.inc @@ -1,7 +1,7 @@ #pragma once .public AbilityIsActive -.public DUNGEON_PTR .public DefenderAbilityIsActive__02301A0C +.public DUNGEON_PTR .public EntityIsValid__023000E4 .public GravityIsActive .public ov29_022FAFD4 diff --git a/asm/include/overlay_29_02302388.inc b/asm/include/overlay_29_02302388.inc index 821c92cc..37f11755 100644 --- a/asm/include/overlay_29_02302388.inc +++ b/asm/include/overlay_29_02302388.inc @@ -16,6 +16,6 @@ .public MIRACLE_CHEST_EXP_BOOST .public MultiplyByFixedPoint .public ov29_02301A84 -.public ov29_02344B44 +.public PrepareItemForPrinting__02345728 .public SubstitutePlaceholderStringTags .public WONDER_CHEST_EXP_BOOST diff --git a/asm/include/overlay_29_02302A5C.inc b/asm/include/overlay_29_02302A5C.inc index 3f85d335..00183db2 100644 --- a/asm/include/overlay_29_02302A5C.inc +++ b/asm/include/overlay_29_02302A5C.inc @@ -55,7 +55,6 @@ .public ov29_02338988 .public ov29_0234B034 .public ov29_0234B06C -.public ov29_0234B084 .public ov29_0234B09C .public ov29_0234B4E0 .public ov29_0234CFA0 @@ -76,6 +75,7 @@ .public Rand16Bit .public SetAndPlayAnimationForAnimationControl .public SetMonsterTypeAndAbility +.public SetPreprocessorArgsIdVal .public SetSpriteIdForAnimationControl .public SpawnMonster .public strcat diff --git a/asm/include/overlay_29_023085DC.inc b/asm/include/overlay_29_023085DC.inc index a247cd3b..f4aca94d 100644 --- a/asm/include/overlay_29_023085DC.inc +++ b/asm/include/overlay_29_023085DC.inc @@ -5,6 +5,7 @@ .public ATK_STAT_IDX .public BoostOffensiveStat .public CategoryIsNotPhysical +.public CUTE_CHARM_INFATUATE_CHANCE .public DefenderAbilityIsActive__0230A940 .public DUNGEON_PTR .public DungeonRandInt @@ -22,7 +23,6 @@ .public ov10_022C4460 .public ov10_022C4464 .public ov10_022C44C0 -.public ov10_022C4524 .public ov10_022C4550 .public ov10_022C4564 .public ov10_022C45AC diff --git a/asm/include/overlay_29_02308FE0.inc b/asm/include/overlay_29_02308FE0.inc index 16078930..93e66cdf 100644 --- a/asm/include/overlay_29_02308FE0.inc +++ b/asm/include/overlay_29_02308FE0.inc @@ -74,7 +74,6 @@ .public ov29_02303E0C .public ov29_02304830 .public ov29_02304A48 -.public TryEndPetrifiedOrSleepStatus .public ov29_02307C48 .public ov29_02307DC0 .public ov29_0230D628 @@ -110,6 +109,7 @@ .public sub_0204AF00 .public SubInitMonster .public SubstitutePlaceholderStringTags +.public TryEndPetrifiedOrSleepStatus .public TryIncreaseHp .public TryRecruit .public TrySpawnEnemyItemDrop diff --git a/asm/include/overlay_29_0230AA0C.inc b/asm/include/overlay_29_0230AA0C.inc index a1d7f87b..fffefb46 100644 --- a/asm/include/overlay_29_0230AA0C.inc +++ b/asm/include/overlay_29_0230AA0C.inc @@ -133,7 +133,6 @@ .public ov29_0230E658 .public ov29_02337EC0 .public ov29_0234B034 -.public ov29_0234B084 .public ov29_0234B0B4 .public ov29_0234B1A4 .public ov29_0234BA54 @@ -168,6 +167,7 @@ .public SCOPE_LENS_CRIT_RATE_BOOST .public SetItemAcquired .public SetPokemonJoined +.public SetPreprocessorArgsIdVal .public SOLID_ROCK_MULTIPLIER .public SPECIAL_BAND_STAT_BOOST .public StrcpySimple diff --git a/asm/include/overlay_29_0230F02C.inc b/asm/include/overlay_29_0230F02C.inc index d0d2a931..e56d584a 100644 --- a/asm/include/overlay_29_0230F02C.inc +++ b/asm/include/overlay_29_0230F02C.inc @@ -25,13 +25,13 @@ .public ov29_022EACCC .public ov29_022F52BC .public ov29_022F9EA0 -.public ov29_02344B44 .public ov29_02345004 .public ov29_02347040 .public ov29_02348D00 .public ov29_02348D3C .public ov29_02348DD8 .public ov29_02348ECC +.public PrepareItemForPrinting__02345728 .public RemoveGroundItem .public ShouldMonsterRunAwayAndShowEffect .public sub_0200D8AC diff --git a/asm/include/overlay_29_0230F9A4.inc b/asm/include/overlay_29_0230F9A4.inc index 8ba62f5b..91e66fc4 100644 --- a/asm/include/overlay_29_0230F9A4.inc +++ b/asm/include/overlay_29_0230F9A4.inc @@ -7,7 +7,6 @@ .public BoostSpeedOneStage .public BURN_DAMAGE .public BURN_DAMAGE_COOLDOWN -.public MonsterCannotAttack .public CeilFixedPoint .public CheckVariousStatuses .public CheckVariousStatuses2 @@ -34,10 +33,12 @@ .public IsFloating .public IsFloorOver .public IsMonster__0230F980 +.public IsTileGround .public ItemIsActive__02311034 .public LEECH_SEED_DAMAGE_COOLDOWN .public LEECH_SEED_HP_DRAIN .public LogMessageByIdWithPopupCheckUser +.public MonsterCannotAttack .public MonsterHasNegativeStatus .public MonsterIsType .public MultiplyFixedPoint64 @@ -66,19 +67,17 @@ .public ov29_022F2FE4 .public ov29_022F42F8 .public ov29_022FB718 -.public TryEndPetrifiedOrSleepStatus .public ov29_02322374 -.public IsTileGround .public ov29_02344B9C .public ov29_023460DC .public ov29_02347184 .public ov29_0234908C -.public ov29_0234B084 .public ov29_0234B294 .public ov29_023529A8 .public PlayEffectAnimationEntityStandard .public POISON_DAMAGE .public POISON_DAMAGE_COOLDOWN +.public SetPreprocessorArgsIdVal .public SpawnDroppedItemWrapper .public SPEED_BOOST_TURNS .public sub_02050FF8 @@ -87,6 +86,7 @@ .public TickStatusTurnCounter .public TreasureBoxDropsEnabled .public TryActivateBadDreams +.public TryEndPetrifiedOrSleepStatus .public TryGenerateUnownStoneDrop .public TryIncreaseHp .public TryWarp diff --git a/asm/include/overlay_29_02311088.inc b/asm/include/overlay_29_02311088.inc index 08ab09a1..f2ea5572 100644 --- a/asm/include/overlay_29_02311088.inc +++ b/asm/include/overlay_29_02311088.inc @@ -26,12 +26,12 @@ .public IsFloorOver .public ItemIsActive__02311034 .public LogMessageByIdWithPopupCheckUser +.public ov10_022C4674 +.public ov10_022C46F8 +.public ov29_0234B294 +.public ov29_02353318 .public RAIN_ABILITY_BONUS_REGEN .public SubstitutePlaceholderStringTags .public TickStatusTurnCounter .public UpdateStatusIconFlags .public WISH_BONUS_REGEN -.public ov10_022C4674 -.public ov10_022C46F8 -.public ov29_0234B294 -.public ov29_02353318 diff --git a/asm/include/overlay_29_02311C28.inc b/asm/include/overlay_29_02311C28.inc index 2f067a1a..d5161fab 100644 --- a/asm/include/overlay_29_02311C28.inc +++ b/asm/include/overlay_29_02311C28.inc @@ -5,12 +5,12 @@ .public CalcStatusDuration .public ChangeShayminForme .public CopyStringFromId +.public DefenderAbilityIsActive__02311B94 .public DIRECTIONS_XY .public DUNGEON_PTR -.public DefenderAbilityIsActive__02311B94 .public EntityIsValid__023118B4 -.public ExclusiveItemEffectIsActiveWithLogging .public ExclusiveItemEffectIsActive__023147EC +.public ExclusiveItemEffectIsActiveWithLogging .public GetExclusiveItemWithEffectFromBag .public GetTile .public GetTileAtEntity @@ -21,13 +21,6 @@ .public LogMessageByIdWithPopupCheckUserTarget .public MonsterIsType .public MultiplyByFixedPoint -.public PlayExclamationPointEffect__022E5D4C -.public SECONDARY_TERRAIN_TYPES -.public SafeguardIsActive -.public SubstitutePlaceholderStringTags -.public TryActivateQuickFeet -.public TryActivateSteadfast -.public UpdateStatusIconFlags .public ov10_022C4728 .public ov10_022C479C .public ov10_022C47A0 @@ -73,7 +66,14 @@ .public ov29_023018AC .public ov29_02304A48 .public ov29_02304A84 -.public ov29_02344B44 .public ov29_0234B034 -.public ov29_0234B084 .public ov29_0234B0B4 +.public PlayExclamationPointEffect__022E5D4C +.public PrepareItemForPrinting__02345728 +.public SafeguardIsActive +.public SECONDARY_TERRAIN_TYPES +.public SetPreprocessorArgsIdVal +.public SubstitutePlaceholderStringTags +.public TryActivateQuickFeet +.public TryActivateSteadfast +.public UpdateStatusIconFlags diff --git a/asm/include/overlay_29_02314810.inc b/asm/include/overlay_29_02314810.inc index 85c63d73..02408b90 100644 --- a/asm/include/overlay_29_02314810.inc +++ b/asm/include/overlay_29_02314810.inc @@ -12,10 +12,6 @@ .public IsProtectedFromNegativeStatus .public ItemIsActive__0231513C .public LogMessageByIdWithPopupCheckUserTarget -.public SPEED_BOOST_TURN_RANGE -.public SafeguardIsActive -.public SubstitutePlaceholderStringTags -.public UpdateStatusIconFlags .public ov10_022C4618 .public ov10_022C488C .public ov10_022C4890 @@ -24,6 +20,10 @@ .public ov29_022E451C .public ov29_022E543C .public ov29_022E60E4 -.public ov29_02344B44 -.public ov29_0234B084 .public ov29_02353318 +.public PrepareItemForPrinting__02345728 +.public SafeguardIsActive +.public SetPreprocessorArgsIdVal +.public SPEED_BOOST_TURN_RANGE +.public SubstitutePlaceholderStringTags +.public UpdateStatusIconFlags diff --git a/asm/include/overlay_29_02317844.inc b/asm/include/overlay_29_02317844.inc index 985b1b60..7804d4c6 100644 --- a/asm/include/overlay_29_02317844.inc +++ b/asm/include/overlay_29_02317844.inc @@ -5,6 +5,7 @@ .public DungeonRandInt .public EndInvisibleClassStatus .public EntityIsValid__02315118 +.public GASTRO_ACID_TURN_RANGE .public GetMaxPp .public GetMaxPpWrapper .public GetMobilityType @@ -17,7 +18,6 @@ .public ov10_022C4628 .public ov10_022C4764 .public ov10_022C4768 -.public ov10_022C476C .public ov10_022C4774 .public ov10_022C4778 .public ov10_022C477C diff --git a/asm/include/overlay_29_02318E70.inc b/asm/include/overlay_29_02318E70.inc index 5d820d81..c2379108 100644 --- a/asm/include/overlay_29_02318E70.inc +++ b/asm/include/overlay_29_02318E70.inc @@ -3,9 +3,6 @@ .public CalcStatusDuration .public EntityIsValid__02318E4C .public LogMessageByIdWithPopupCheckUserTarget -.public SubstitutePlaceholderStringTags -.public UpdateStatusIconFlags -.public ov10_022C472C .public ov10_022C4730 .public ov10_022C4734 .public ov10_022C4738 @@ -30,3 +27,6 @@ .public ov29_022E415C .public ov29_022E41AC .public ov29_022E543C +.public REFLECT_LIGHT_SCREEN_TURN_RANGE +.public SubstitutePlaceholderStringTags +.public UpdateStatusIconFlags diff --git a/asm/include/overlay_29_02319880.inc b/asm/include/overlay_29_02319880.inc index 1a12536f..95e222fb 100644 --- a/asm/include/overlay_29_02319880.inc +++ b/asm/include/overlay_29_02319880.inc @@ -1,8 +1,9 @@ #pragma once +.public abs .public AI_CAN_ATTACK_IN_DIRECTION -.public AI_POTENTIAL_ATTACK_TARGETS .public AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS .public AI_POTENTIAL_ATTACK_TARGET_WEIGHTS +.public AI_POTENTIAL_ATTACK_TARGETS .public CanAttackInDirection .public CanSeeTarget .public DIRECTIONS_XY @@ -15,12 +16,11 @@ .public GetMoveTypeForMonster .public GetTile .public IqSkillIsEnabled -.public IsUsableWhileTaunted .public IsAiTargetEligible .public IsBlinded .public IsTargetInRange +.public IsUsableWhileTaunted .public ResetAiCanAttackInDirection .public StatusCheckerCheck .public TryAddTargetToAiTargetList .public WeightMoveWithIqSkills -.public abs diff --git a/asm/include/overlay_29_0231A364.inc b/asm/include/overlay_29_0231A364.inc index 0000360b..d189f0b8 100644 --- a/asm/include/overlay_29_0231A364.inc +++ b/asm/include/overlay_29_0231A364.inc @@ -1,4 +1,5 @@ #pragma once +.public _s32_div_f .public AbilityIsActiveVeneer .public CanAttackInDirection .public DIRECTIONS_XY @@ -9,6 +10,5 @@ .public HasHeldItem .public IqSkillIsEnabled .public IsBlinded -.public _s32_div_f .public ov29_0230B7D4 .public ov29_0230F8D0 diff --git a/asm/include/overlay_29_0231A7A0.inc b/asm/include/overlay_29_0231A7A0.inc index baaab640..7cc21de9 100644 --- a/asm/include/overlay_29_0231A7A0.inc +++ b/asm/include/overlay_29_0231A7A0.inc @@ -3,6 +3,6 @@ .public ExclusiveItemEffectIsActive__0231A87C .public IqSkillIsEnabled .public LogMessageByIdWithPopupCheckUser +.public ov10_022C459C .public PlayExclamationPointEffect__022E4880 .public SubstitutePlaceholderStringTags -.public ov10_022C459C diff --git a/asm/include/overlay_29_0231A8A0.inc b/asm/include/overlay_29_0231A8A0.inc index d4a1cc4e..3802029f 100644 --- a/asm/include/overlay_29_0231A8A0.inc +++ b/asm/include/overlay_29_0231A8A0.inc @@ -6,8 +6,8 @@ .public IsFloorOver .public IsMonster__0231A9D4 .public LogMessageByIdWithPopupCheckUser +.public ov29_022FA574 +.public ov29_0232145C .public ShouldUsePp .public TryActivateTruant .public UpdateMovePp -.public ov29_022FA574 -.public ov29_0232145C diff --git a/asm/include/overlay_29_0231A9F8.inc b/asm/include/overlay_29_0231A9F8.inc index ecf2ba88..43505d33 100644 --- a/asm/include/overlay_29_0231A9F8.inc +++ b/asm/include/overlay_29_0231A9F8.inc @@ -9,12 +9,12 @@ .public InitMove .public IsFloorOver .public LogMessageByIdWithPopupCheckUser -.public RemoveUsedItem -.public SubstitutePlaceholderStringTags -.public TryActivateTruant -.public UpdateAiTargetPos .public ov29_022EB4E8 .public ov29_022FBAB4 .public ov29_02321274 .public ov29_02322374 -.public ov29_02344B44 +.public PrepareItemForPrinting__02345728 +.public RemoveUsedItem +.public SubstitutePlaceholderStringTags +.public TryActivateTruant +.public UpdateAiTargetPos diff --git a/asm/include/overlay_29_0231AD38.inc b/asm/include/overlay_29_0231AD38.inc index 0318e07c..8e33a5dd 100644 --- a/asm/include/overlay_29_0231AD38.inc +++ b/asm/include/overlay_29_0231AD38.inc @@ -10,11 +10,11 @@ .public LogMessageByIdWithPopupCheckParticipants .public LogMessageByIdWithPopupCheckUserTarget .public NATURAL_GIFT_ITEM_TABLE -.public SetActionUseMoveAi -.public SubstitutePlaceholderStringTags -.public WEATHER_BALL_TYPE_TABLE .public ov29_022E4110 .public ov29_022FB9E0 .public ov29_0232145C .public ov29_0232E80C -.public ov29_02344B44 +.public PrepareItemForPrinting__02345728 +.public SetActionUseMoveAi +.public SubstitutePlaceholderStringTags +.public WEATHER_BALL_TYPE_TABLE diff --git a/asm/include/overlay_29_0231B1B8.inc b/asm/include/overlay_29_0231B1B8.inc index 292a79a7..e61f4b36 100644 --- a/asm/include/overlay_29_0231B1B8.inc +++ b/asm/include/overlay_29_0231B1B8.inc @@ -6,5 +6,5 @@ .public IsMonsterSleeping .public ov10_022C4530 .public ov29_022E28D4 +.public SetPreprocessorArgsIdVal .public TryEndPetrifiedOrSleepStatus -.public ov29_0234B084 diff --git a/asm/include/overlay_29_0231B33C.inc b/asm/include/overlay_29_0231B33C.inc index 81bed5e2..583bf624 100644 --- a/asm/include/overlay_29_0231B33C.inc +++ b/asm/include/overlay_29_0231B33C.inc @@ -82,8 +82,8 @@ .public ov29_022FB9BC .public ov29_02304830 .public ov29_0230F9A4 -.public ov29_02344B44 .public ov29_0234BA54 +.public PrepareItemForPrinting__02345728 .public PROTEIN_STAT_BOOST .public RARE_FOSSIL_DAMAGE .public RestoreAllMovePP diff --git a/asm/include/overlay_29_0231CBEC.inc b/asm/include/overlay_29_0231CBEC.inc index 1a87d6b3..e867f89d 100644 --- a/asm/include/overlay_29_0231CBEC.inc +++ b/asm/include/overlay_29_0231CBEC.inc @@ -82,8 +82,6 @@ .public ov29_023021F0 .public ov29_023038D4 .public ov29_02339FF4 -.public ov29_02344B44 -.public ov29_0234B084 .public ov29_0234B09C .public ov29_0234BA54 .public ov29_023529AC @@ -94,10 +92,12 @@ .public ov31_02386204 .public ov31_02386308 .public ov31_023877EC +.public PrepareItemForPrinting__02345728 .public RemoveUsedItem .public RestoreAllMovePP .public SetDoughSeedFlag .public SetMonsterActionFields +.public SetPreprocessorArgsIdVal .public ShouldDisplayEntityWrapper .public SPATK_STAT_IDX .public sub_02050FF8 diff --git a/asm/include/overlay_29_0231F594.inc b/asm/include/overlay_29_0231F594.inc index ba7cb5ea..a7558b2b 100644 --- a/asm/include/overlay_29_0231F594.inc +++ b/asm/include/overlay_29_0231F594.inc @@ -24,7 +24,7 @@ .public ov29_023457C8 .public RemoveGroundItem .public SetEntityPixelPosXY -.public SpawnItem .public sin_4096 +.public SpawnItem .public UpdateMinimap .public UpdateTrapsVisibility diff --git a/asm/include/overlay_29_0231FC20.inc b/asm/include/overlay_29_0231FC20.inc index 8d70f0b5..1bfbd01d 100644 --- a/asm/include/overlay_29_0231FC20.inc +++ b/asm/include/overlay_29_0231FC20.inc @@ -18,11 +18,11 @@ .public ov29_022E56A0 .public ov29_022F9C74 .public ov29_022FFB90 -.public TryEndPetrifiedOrSleepStatus .public ov29_0232033C .public ov29_02321238 .public ov29_0232124C .public ShouldDisplayEntityWrapper .public SubstitutePlaceholderStringTags +.public TryEndPetrifiedOrSleepStatus .public TwoTurnMoveForcedMiss .public UpdateEntityPixelPos diff --git a/asm/include/overlay_29_02320788.inc b/asm/include/overlay_29_02320788.inc index 57ee5b0f..e6f34d5a 100644 --- a/asm/include/overlay_29_02320788.inc +++ b/asm/include/overlay_29_02320788.inc @@ -35,7 +35,6 @@ .public ov29_022FF958 .public ov29_02304A48 .public ov29_02305814 -.public TryEndPetrifiedOrSleepStatus .public ov29_02322374 .public ov29_023247B4 .public ov29_02336694 @@ -46,6 +45,7 @@ .public ShouldDisplayEntityWrapper .public sub_01FFB62C .public SubstitutePlaceholderStringTags +.public TryEndPetrifiedOrSleepStatus .public TryInflictPetrifiedStatus .public TwoTurnMoveForcedMiss .public UpdateCamera diff --git a/asm/include/overlay_29_0232145C.inc b/asm/include/overlay_29_0232145C.inc index 54f39558..dba14558 100644 --- a/asm/include/overlay_29_0232145C.inc +++ b/asm/include/overlay_29_0232145C.inc @@ -9,7 +9,6 @@ .public BuildMoveTargetList .public CalcStatusDuration .public CanMonsterUseMove -.public MonsterCannotAttack .public DungeonRandInt .public EndFrozenClassStatus .public EndLeechSeedClassStatus @@ -39,6 +38,7 @@ .public LowerSpeed .public METRONOME_NEXT_INDEX .public METRONOME_TABLE +.public MonsterCannotAttack .public NATURE_POWER_TABLE .public NIGHTMARE_TURN_RANGE .public ov10_022BFD6C @@ -62,9 +62,9 @@ .public ov29_023383A8 .public ov29_02344B9C .public ov29_0234B034 -.public ov29_0234B084 .public ov29_0235370C .public ov29_0237CA68 +.public SetPreprocessorArgsIdVal .public SLEEP_TURN_RANGE .public StringFromId .public sub_0201D1B0 diff --git a/asm/include/overlay_29_02322DDC.inc b/asm/include/overlay_29_02322DDC.inc index 97f69d31..a8c3b9f2 100644 --- a/asm/include/overlay_29_02322DDC.inc +++ b/asm/include/overlay_29_02322DDC.inc @@ -1,4 +1,5 @@ #pragma once +.public _s32_div_f .public AdvanceFrame .public AnimationDelayOrSomething .public DIRECTIONS_XY @@ -18,10 +19,6 @@ .public IsChargingTwoTurnMove .public LogMessageQuiet .public LogMessageWithPopup -.public PlayMoveAnimation -.public ShouldDisplayEntityWrapper -.public TwoTurnMoveForcedMiss -.public _s32_div_f .public ov10_022BDE50 .public ov10_022BE9E8 .public ov10_022BEB2C @@ -38,11 +35,14 @@ .public ov29_02324E78 .public ov29_023250D4 .public ov29_0234B034 -.public ov29_0234B084 .public ov29_0234B4CC .public ov29_0235175C .public ov29_02352A54 .public ov29_02352A6C +.public PlayMoveAnimation +.public SetPreprocessorArgsIdVal +.public ShouldDisplayEntityWrapper .public sin_4096 .public sub_02001980 .public sub_0201CF90 +.public TwoTurnMoveForcedMiss diff --git a/asm/include/overlay_29_0232393C.inc b/asm/include/overlay_29_0232393C.inc index 4e330920..7dab1c15 100644 --- a/asm/include/overlay_29_0232393C.inc +++ b/asm/include/overlay_29_0232393C.inc @@ -1,15 +1,16 @@ #pragma once +.public _s32_div_f .public AbilityIsActiveVeneer .public AdvanceFrame .public AnimationDelayOrSomething +.public DefenderAbilityIsActive__02322D64 .public DETECT_BAND_MOVE_ACCURACY_DROP .public DIRECTIONS_XY .public DUNGEON_PTR -.public DefenderAbilityIsActive__02322D64 .public DungeonRandInt .public DungeonRandRange -.public EXCL_ITEM_EFFECTS_EVASION_BOOST .public EntityIsValid__02321438 +.public EXCL_ITEM_EFFECTS_EVASION_BOOST .public ExclusiveItemEffectIsActive__02323918 .public GetApparentWeather .public GetEntityMoveTargetAndRange @@ -24,11 +25,6 @@ .public MALE_ACCURACY_STAGE_MULTIPLIERS .public MALE_EVASION_STAGE_MULTIPLIERS .public MoveIsNotPhysical -.public PlayMoveAnimation -.public PositionHasMonster -.public QUICK_DODGER_MOVE_ACCURACY_DROP -.public TwoTurnMoveForcedMiss -.public _s32_div_f .public ov10_022BDE50 .public ov10_022BEB2C .public ov29_022E28D4 @@ -42,4 +38,8 @@ .public ov29_0234B4CC .public ov29_02352A8C .public ov29_0235370C +.public PlayMoveAnimation +.public PositionHasMonster +.public QUICK_DODGER_MOVE_ACCURACY_DROP .public sin_4096 +.public TwoTurnMoveForcedMiss diff --git a/asm/include/overlay_29_02324698.inc b/asm/include/overlay_29_02324698.inc index 05cb54a8..fc333ce5 100644 --- a/asm/include/overlay_29_02324698.inc +++ b/asm/include/overlay_29_02324698.inc @@ -18,9 +18,9 @@ .public GetNaturePowerVariant .public GetSpriteIndex__02052708 .public Is2TurnsMove -.public IsUsableWhileTaunted .public IsCopyingMove .public IsFloorOver +.public IsUsableWhileTaunted .public LogMessageByIdWithPopupCheckUser .public NATURE_POWER_TABLE .public ov10_022BF01C diff --git a/asm/include/overlay_29_02325644.inc b/asm/include/overlay_29_02325644.inc index 5de2c26c..1d0990d1 100644 --- a/asm/include/overlay_29_02325644.inc +++ b/asm/include/overlay_29_02325644.inc @@ -50,6 +50,7 @@ .public IRON_TAIL_LOWER_DEFENSE_CHANCE .public IsChargingTwoTurnMove .public IsMonsterSleeping +.public IsTileGround .public LogMessageByIdWithPopupCheckUserTarget .public LowerDefensiveStat .public LowerHitChanceStat @@ -74,7 +75,6 @@ .public ov29_02318D58 .public ov29_02318D98 .public ov29_02332F18 -.public IsTileGround .public ov29_0234B034 .public ov29_0234BA54 .public ov29_02352AD8 diff --git a/asm/include/overlay_29_02328030.inc b/asm/include/overlay_29_02328030.inc index c9534aa3..10a0110b 100644 --- a/asm/include/overlay_29_02328030.inc +++ b/asm/include/overlay_29_02328030.inc @@ -41,6 +41,7 @@ .public InitMove .public IsChargingTwoTurnMove .public IsSameMove +.public IsTileGround .public LevitateIsActive .public LICK_PARALYZE_CHANCE .public LogMessageByIdWithPopupCheckUserTarget @@ -65,9 +66,7 @@ .public ov29_02318BBC .public ov29_02318D58 .public ov29_0232A834 -.public IsTileGround .public ov29_0234B034 -.public ov29_0234B084 .public ov29_0234C738 .public ov29_02352B18 .public POISON_FANG_POISON_CHANCE @@ -75,6 +74,7 @@ .public RemoveEmptyItemsInBagWrapper .public RemoveEquivItemNoHole .public SACRED_FIRE_BURN_CHANCE +.public SetPreprocessorArgsIdVal .public SHADOW_BALL_LOWER_SPECIAL_DEFENSE_CHANCE .public ShouldDisplayEntityAdvanced .public SMOG_POISON_CHANCE diff --git a/asm/include/overlay_29_0232A3FC.inc b/asm/include/overlay_29_0232A3FC.inc index 6610490c..eec4f99e 100644 --- a/asm/include/overlay_29_0232A3FC.inc +++ b/asm/include/overlay_29_0232A3FC.inc @@ -78,7 +78,6 @@ .public ov29_02321260 .public ov29_02324D60 .public ov29_02332F18 -.public ov29_0234B084 .public ov29_02352B1C .public ov29_0237CA84 .public POISON_TAIL_POISON_CHANCE @@ -87,6 +86,7 @@ .public RevealTrapsNearby .public SECRET_POWER_EFFECT_CHANCE .public SetEntityPixelPosXY +.public SetPreprocessorArgsIdVal .public SKULL_BASH_DAMAGE_MULTIPLIER .public SLEEP_TURN_RANGE .public SPATK_STAT_IDX diff --git a/asm/include/overlay_29_0232C524.inc b/asm/include/overlay_29_0232C524.inc index 972a2e62..77dbf2df 100644 --- a/asm/include/overlay_29_0232C524.inc +++ b/asm/include/overlay_29_0232C524.inc @@ -90,7 +90,6 @@ .public ov29_0231F6E4 .public ov29_02332F18 .public ov29_02336694 -.public ov29_0234B084 .public ov29_0234B0B4 .public ov29_0234BA54 .public ov29_02352B38 @@ -101,6 +100,7 @@ .public RevealStairs .public RevealWholeFloor .public ROOST_HP_RESTORATION_TABLE +.public SetPreprocessorArgsIdVal .public SHADOW_FORCE_DAMAGE_MULTIPLIER .public SLEEP_TURN_RANGE .public SPATK_STAT_IDX diff --git a/asm/include/overlay_29_0232E864.inc b/asm/include/overlay_29_0232E864.inc index a75c7198..08767602 100644 --- a/asm/include/overlay_29_0232E864.inc +++ b/asm/include/overlay_29_0232E864.inc @@ -1,16 +1,15 @@ #pragma once -.public ATK_STAT_IDX .public AbilityIsActiveVeneer .public AnimationDelayOrSomething .public ApplyDamageAndEffectsWrapper .public AreEntitiesAdjacent +.public ATK_STAT_IDX .public CalcDamage .public CanBeSnatched .public CanHitWithRegularAttack .public CeilFixedPoint -.public DIRECTIONS_XY -.public DUNGEON_PTR .public DefenderAbilityIsActive__02332A0C +.public DIRECTIONS_XY .public DisplayAnimatedNumbers .public DoMoveAbsorb .public DoMoveAcupressure @@ -53,6 +52,9 @@ .public DoMoveCrunch .public DoMoveCrushClaw .public DoMoveCurse +.public DoMoveDamage__02325DC0 +.public DoMoveDamage__0232A500 +.public DoMoveDamage__0232B8B0 .public DoMoveDamageBoostAllStats .public DoMoveDamageBurn10 .public DoMoveDamageBurn10FlameWheel @@ -80,9 +82,6 @@ .public DoMoveDamageStealItem .public DoMoveDamageWeightDependent .public DoMoveDamageWithRecoil -.public DoMoveDamage__02325DC0 -.public DoMoveDamage__0232A500 -.public DoMoveDamage__0232B8B0 .public DoMoveDecoy .public DoMoveDefendOrder .public DoMoveDefenseCurl @@ -134,16 +133,16 @@ .public DoMoveHail .public DoMoveHammerArm .public DoMoveHaze -.public DoMoveHeadSmash .public DoMoveHeadbutt +.public DoMoveHeadSmash .public DoMoveHealBlock +.public DoMoveHealingWish .public DoMoveHealOrder .public DoMoveHealStatus -.public DoMoveHealingWish .public DoMoveHeartSwap .public DoMoveHelpingHand -.public DoMoveHiJumpKick .public DoMoveHiddenPower +.public DoMoveHiJumpKick .public DoMoveHornDrill .public DoMoveHpGauge .public DoMoveHurl @@ -186,8 +185,8 @@ .public DoMoveNastyPlot .public DoMoveNaturalGift .public DoMoveNaturePower -.public DoMoveNightShade .public DoMoveNightmare +.public DoMoveNightShade .public DoMoveNoMove .public DoMoveOctazooka .public DoMoveOhko @@ -212,9 +211,9 @@ .public DoMovePowerTrick .public DoMovePresent .public DoMoveProtect -.public DoMovePsychUp .public DoMovePsychoBoost .public DoMovePsychoShift +.public DoMovePsychUp .public DoMovePsywave .public DoMoveRage .public DoMoveRainDance @@ -264,8 +263,8 @@ .public DoMoveSolarBeam .public DoMoveSonicBoom .public DoMoveSpikes -.public DoMoveSpitUp .public DoMoveSpite +.public DoMoveSpitUp .public DoMoveSplash .public DoMoveSport .public DoMoveStayAway @@ -292,10 +291,10 @@ .public DoMoveTailGlow .public DoMoveTakeaway .public DoMoveTaunt -.public DoMoveThunderFang -.public DoMoveThunderWave .public DoMoveThunderbolt +.public DoMoveThunderFang .public DoMoveThundershock +.public DoMoveThunderWave .public DoMoveTickle .public DoMoveTorment .public DoMoveToxic @@ -317,8 +316,8 @@ .public DoMoveVitalThrow .public DoMoveWakeUpSlap .public DoMoveWarp -.public DoMoveWaterSpout .public DoMoveWaterfall +.public DoMoveWaterSpout .public DoMoveWeatherBall .public DoMoveWhirlpool .public DoMoveWildCall @@ -328,9 +327,10 @@ .public DoMoveWrap .public DoMoveYawn .public DoMoveZapCannon +.public DUNGEON_PTR .public DungeonRandInt -.public DungeonRandOutcomeUserAction .public DungeonRandOutcome__022EAB20 +.public DungeonRandOutcomeUserAction .public EntityIsValid__0232E840 .public ExclusiveItemEffectIsActive__023329E8 .public FOREWARN_FORCED_MISS_CHANCE @@ -362,21 +362,6 @@ .public MirrorMoveIsActive .public MonsterCannotAttack .public MoveHitCheck -.public PerformDamageSequence -.public PlayMoveAnimation -.public ROLLOUT_ICE_BALL_MISSED -.public SPATK_STAT_IDX -.public ShouldDisplayEntityWrapper -.public SubFixedPoint -.public SubstitutePlaceholderStringTags -.public TryActivateConversion2 -.public TryActivateFrisk -.public TryActivateNondamagingDefenderAbility -.public TryActivateNondamagingDefenderExclusiveItem -.public TryActivateTraceAndColorChange -.public TryWarp -.public TwoTurnMoveForcedMiss -.public UpdateShopkeeperModeAfterAttack .public ov10_022BFD6C .public ov10_022C4480 .public ov10_022C4504 @@ -400,7 +385,6 @@ .public ov29_02301C2C .public ov29_02304A48 .public ov29_02304C3C -.public TryEndPetrifiedOrSleepStatus .public ov29_02314DC4 .public ov29_0231AD38 .public ov29_023201D0 @@ -410,10 +394,26 @@ .public ov29_0232E744 .public ov29_02333044 .public ov29_023381C0 -.public ov29_02344B44 .public ov29_0234B034 .public ov29_02353718 .public ov29_0237CA68 .public ov29_0237CA74 .public ov29_0237CA80 +.public PerformDamageSequence +.public PlayMoveAnimation +.public PrepareItemForPrinting__02345728 +.public ROLLOUT_ICE_BALL_MISSED +.public ShouldDisplayEntityWrapper +.public SPATK_STAT_IDX .public sub_02050FF8 +.public SubFixedPoint +.public SubstitutePlaceholderStringTags +.public TryActivateConversion2 +.public TryActivateFrisk +.public TryActivateNondamagingDefenderAbility +.public TryActivateNondamagingDefenderExclusiveItem +.public TryActivateTraceAndColorChange +.public TryEndPetrifiedOrSleepStatus +.public TryWarp +.public TwoTurnMoveForcedMiss +.public UpdateShopkeeperModeAfterAttack diff --git a/asm/include/overlay_29_02332A0C.inc b/asm/include/overlay_29_02332A0C.inc index 5b1d161c..3096a7bd 100644 --- a/asm/include/overlay_29_02332A0C.inc +++ b/asm/include/overlay_29_02332A0C.inc @@ -1,5 +1,6 @@ #pragma once .public AbilityIsActiveVeneer +.public abs .public ApplyDamageAndEffects .public CalcDamage .public CanAttackInDirection @@ -7,8 +8,8 @@ .public CanSeeTarget .public CeilFixedPoint .public Conversion2IsActive -.public DUNGEON_PTR .public DisplayAnimatedNumbers +.public DUNGEON_PTR .public EntityIsValid__0232E840 .public EntityIsValid__02333FAC .public GetApparentWeather @@ -28,8 +29,6 @@ .public MonsterHasNegativeStatus .public MonsterIsType .public MoveHitCheck -.public ShouldDisplayEntityWrapper -.public abs .public ov10_022C6322 .public ov29_022E576C .public ov29_0230040C @@ -37,3 +36,4 @@ .public ov29_02304A48 .public ov29_0230D088 .public ov29_0234B034 +.public ShouldDisplayEntityWrapper diff --git a/asm/include/overlay_29_02334D58.inc b/asm/include/overlay_29_02334D58.inc index baa90b34..3325f7b8 100644 --- a/asm/include/overlay_29_02334D58.inc +++ b/asm/include/overlay_29_02334D58.inc @@ -1,4 +1,5 @@ #pragma once +.public abs .public AdvanceFrame .public AnimationDelayOrSomething .public DUNGEON_PTR @@ -9,11 +10,10 @@ .public GetWeatherColorTable .public IsSecretFloor .public LogMessageByIdWithPopupCheckUser -.public TryActivateArtificialWeatherAbilities -.public TryActivateWeather -.public TryWeatherFormChange -.public abs .public ov29_022DE608 .public ov29_022E5FE8 .public ov29_02338A4C .public ov29_02353562 +.public TryActivateArtificialWeatherAbilities +.public TryActivateWeather +.public TryWeatherFormChange diff --git a/asm/include/overlay_29_02337CCC.inc b/asm/include/overlay_29_02337CCC.inc index 11d05144..86d9bb0e 100644 --- a/asm/include/overlay_29_02337CCC.inc +++ b/asm/include/overlay_29_02337CCC.inc @@ -1,10 +1,10 @@ #pragma once -.public DUNGEON_PTR .public DetermineMonsterShadow .public DetermineTileWalkableNeighbors .public DrawMinimapTile +.public DUNGEON_PTR .public EntityIsValid__02337CA8 .public GetTileSafe -.public UpdateTrapsVisibility .public ov29_022E66C4 .public ov29_02336694 +.public UpdateTrapsVisibility diff --git a/asm/include/overlay_29_02337EC0.inc b/asm/include/overlay_29_02337EC0.inc index 1213949a..50402b98 100644 --- a/asm/include/overlay_29_02337EC0.inc +++ b/asm/include/overlay_29_02337EC0.inc @@ -10,5 +10,5 @@ .public MemAlloc .public MemFree .public MemZero -.public RandInt .public ov29_022FAFD4 +.public RandInt diff --git a/asm/include/overlay_29_0233861C.inc b/asm/include/overlay_29_0233861C.inc index 9aa3a345..e7a886ce 100644 --- a/asm/include/overlay_29_0233861C.inc +++ b/asm/include/overlay_29_0233861C.inc @@ -80,8 +80,8 @@ .public ResetInnerBoundaryTileRows .public SECONDARY_TERRAIN_TYPES .public ShouldMinimapDisplayEntity -.public StairsAlwaysReachable .public sin_4096 +.public StairsAlwaysReachable .public sub_0200A174 .public sub_0200B330 .public sub_0200B3FC diff --git a/asm/include/overlay_29_02340CE4.inc b/asm/include/overlay_29_02340CE4.inc index 6f39b317..01ed23ec 100644 --- a/asm/include/overlay_29_02340CE4.inc +++ b/asm/include/overlay_29_02340CE4.inc @@ -1,4 +1,6 @@ #pragma once +.public _s32_div_f +.public abs .public DUNGEON_PTR .public DungeonRandInt .public DungeonRandRange @@ -12,5 +14,3 @@ .public MONSTER_HOUSE_MAX_MONSTER_SPAWNS .public MONSTER_HOUSE_MAX_NON_MONSTER_SPAWNS .public SpawnStairs -.public _s32_div_f -.public abs diff --git a/asm/include/overlay_29_02341E6C.inc b/asm/include/overlay_29_02341E6C.inc index 5c860b50..2178320a 100644 --- a/asm/include/overlay_29_02341E6C.inc +++ b/asm/include/overlay_29_02341E6C.inc @@ -1,6 +1,7 @@ #pragma once -.public DUNGEON_PTR +.public _s32_div_f .public DetermineAllTilesWalkableNeighbors +.public DUNGEON_PTR .public DungeonRand16Bit .public DungeonRandInt .public DungeonRandRange @@ -22,11 +23,11 @@ .public GetPerformanceFlagWithChecks .public GetSpecialTargetItem .public GetTileSafe +.public HandleSir0Translation .public HIDDEN_STAIRS_SPAWN_BLOCKED .public HIDDEN_STAIRS_SPAWN_CHANCE_MULTIPLIER -.public HandleSir0Translation -.public InitOtherMonsterData .public InitializeTile +.public InitOtherMonsterData .public IsCurrentMissionType .public IsDestinationFloor .public IsFullFloorFixedRoom @@ -40,21 +41,6 @@ .public MemFree .public MemZero .public MultiplyByFixedPoint -.public PointsToZero -.public SHOP_ITEM_CHANCES -.public SetMonsterLevelAndId -.public SetShouldBoostHiddenStairsSpawnChance -.public SetShouldBoostKecleonShopSpawnChance -.public ShouldBoostHiddenStairsSpawnChance -.public ShouldBoostKecleonShopSpawnChance -.public SpawnEnemyTrapAtPos -.public SpawnMonster -.public TREASURE_BOX_1_ITEM_IDS -.public UnloadFile -.public UpdateMinimap -.public UpdateTrapsVisibility -.public ZInit8 -.public _s32_div_f .public ov10_022C4B34 .public ov10_022C6C75 .public ov10_022C6C77 @@ -73,3 +59,17 @@ .public ov29_02353110 .public ov29_023534F0 .public ov29_0237CFC0 +.public PointsToZero +.public SetMonsterLevelAndId +.public SetShouldBoostHiddenStairsSpawnChance +.public SetShouldBoostKecleonShopSpawnChance +.public SHOP_ITEM_CHANCES +.public ShouldBoostHiddenStairsSpawnChance +.public ShouldBoostKecleonShopSpawnChance +.public SpawnEnemyTrapAtPos +.public SpawnMonster +.public TREASURE_BOX_1_ITEM_IDS +.public UnloadFile +.public UpdateMinimap +.public UpdateTrapsVisibility +.public ZInit8 diff --git a/asm/include/overlay_29_02344178.inc b/asm/include/overlay_29_02344178.inc index f6fed190..024d8aa9 100644 --- a/asm/include/overlay_29_02344178.inc +++ b/asm/include/overlay_29_02344178.inc @@ -19,9 +19,6 @@ .public IsSecretRoom .public LoadScriptVariableValue .public MemZero -.public SpawnItem -.public StartFadeDungeonWrapper -.public SubstitutePlaceholderStringTags .public ov10_022C6C74 .public ov29_022E7BB8 .public ov29_022EFB20 @@ -44,4 +41,7 @@ .public ov29_0234C738 .public ov29_02353798 .public ov29_0237CFFC +.public SpawnItem +.public StartFadeDungeonWrapper .public sub_02056880 +.public SubstitutePlaceholderStringTags diff --git a/asm/include/overlay_29_02344B1C.inc b/asm/include/overlay_29_02344B1C.inc index d6fa441f..6c269712 100644 --- a/asm/include/overlay_29_02344B1C.inc +++ b/asm/include/overlay_29_02344B1C.inc @@ -35,7 +35,6 @@ .public ov29_02348D3C .public ov29_02348DD8 .public ov29_02348ECC -.public ov29_0234B084 .public ov29_023531A0 .public ov29_023531A4 .public ov29_023531BC @@ -44,8 +43,9 @@ .public RemoveEmptyItemsInBag .public RemoveEquivItemNoHole .public RemoveGroundItem +.public SetPreprocessorArgsIdVal .public ShouldMonsterRunAwayAndShowEffect .public SpawnItemEntity .public sub_0200D8AC -.public sub_02024FE8 +.public SubstitutePlaceholderItemTags .public SubstitutePlaceholderStringTags diff --git a/asm/include/overlay_29_023456BC.inc b/asm/include/overlay_29_023456BC.inc index 3bc5248d..f2164c48 100644 --- a/asm/include/overlay_29_023456BC.inc +++ b/asm/include/overlay_29_023456BC.inc @@ -35,7 +35,6 @@ .public ov29_02338430 .public ov29_02344BF8 .public ov29_02347378 -.public ov29_0234B084 .public ov29_023531BC .public ov29_023537B4 .public ov29_023537BC @@ -43,11 +42,12 @@ .public RetrieveFromItemList1 .public SECONDARY_TERRAIN_TYPES .public SetEntityPixelPosXY +.public SetPreprocessorArgsIdVal .public ShouldDisplayEntityWrapper -.public SpawnItem .public sin_4096 +.public SpawnItem .public sub_0200D1FC .public sub_0201B9F8 -.public sub_02024FE8 .public sub_0204F7A8 +.public SubstitutePlaceholderItemTags .public UNOWN_STONE_DROP_CHANCE diff --git a/asm/include/overlay_29_02346834.inc b/asm/include/overlay_29_02346834.inc index 0786b461..a5a957c6 100644 --- a/asm/include/overlay_29_02346834.inc +++ b/asm/include/overlay_29_02346834.inc @@ -51,18 +51,17 @@ .public ov29_022FBA54 .public ov29_022FBA70 .public ov29_023009A0 -.public TryEndPetrifiedOrSleepStatus -.public ov29_02344B44 -.public ov29_02344B70 .public ov29_023457C8 .public ov29_0234B4CC .public ov29_023516FC .public ov29_023531C8 +.public PrepareItemForPrinting__02345728 +.public PrepareItemForPrinting__02345754 .public RemoveEmptyItemsInBag .public SetEntityPixelPosXY .public SetItemAcquired -.public SpawnDroppedItem .public sin_4096 +.public SpawnDroppedItem .public sub_0200CF6C .public sub_0200D894 .public sub_0200D8AC @@ -70,6 +69,7 @@ .public sub_02057CE8 .public SubstitutePlaceholderStringTags .public TestItemAiFlag +.public TryEndPetrifiedOrSleepStatus .public TwoTurnMoveForcedMiss .public UpdateEntityPixelPos .public YesNoMenu diff --git a/asm/include/overlay_29_02348020.inc b/asm/include/overlay_29_02348020.inc index 6bb810a7..4ac43daf 100644 --- a/asm/include/overlay_29_02348020.inc +++ b/asm/include/overlay_29_02348020.inc @@ -1,10 +1,11 @@ #pragma once +.public _020A1878 .public AdvanceFrame .public CanSeeTarget .public CheckAcceptedMissionByTypeAndDungeon -.public DUNGEON_PTR .public DisplayMessage .public DisplayMessage2 +.public DUNGEON_PTR .public DungeonRandInt .public EntityIsValid__0234987C .public ExclusiveItemEffectFlagTest @@ -27,12 +28,6 @@ .public MemAlloc .public MemFree .public MemZero -.public StartFadeDungeonWrapper -.public SubstitutePlaceholderStringTags -.public THROWN_ITEM_HIT_CHANCE -.public TrySpawnGoldenChamber -.public YesNoMenu -.public _020A1878 .public ov10_022C48E4 .public ov29_022E09E8 .public ov29_022E0DD8 @@ -41,7 +36,6 @@ .public ov29_022E0E44 .public ov29_022FB9BC .public ov29_023009CC -.public ov29_02344B44 .public ov29_02344B9C .public ov29_02349A70 .public ov29_02349AD4 @@ -56,6 +50,8 @@ .public ov29_0234C738 .public ov29_023537C4 .public ov29_0237C694 +.public PrepareItemForPrinting__02345728 +.public StartFadeDungeonWrapper .public strcpy .public sub_02011220 .public sub_02015328 @@ -67,3 +63,7 @@ .public sub_02024FB8 .public sub_02051DFC .public sub_02051EB8 +.public SubstitutePlaceholderStringTags +.public THROWN_ITEM_HIT_CHANCE +.public TrySpawnGoldenChamber +.public YesNoMenu diff --git a/asm/include/overlay_29_023498A0.inc b/asm/include/overlay_29_023498A0.inc index 3bcedf56..1af20d8d 100644 --- a/asm/include/overlay_29_023498A0.inc +++ b/asm/include/overlay_29_023498A0.inc @@ -7,9 +7,9 @@ .public ChangeDungeonMusic .public CloseAlertBox .public CreateAlertBox -.public DUNGEON_PTR .public DisplayMessage .public DisplayMessage2 +.public DUNGEON_PTR .public DungeonRandInt .public EndNegativeStatusConditionWrapper .public EntityIsValid__0234987C @@ -47,16 +47,6 @@ .public MemFree .public MemZero .public MusicTableIdxToMusicId -.public PositionIsOnStairs -.public PreprocessString -.public RemoveEmptyItemsInBagWrapper -.public RemoveGroundItem -.public SetPortraitLayout -.public ShouldDisplayEntityWrapper -.public ShouldMonsterHeadToStairs -.public StringFromId -.public SubstitutePlaceholderStringTags -.public YesNoMenu .public ov10_022BFD20 .public ov29_022E09E8 .public ov29_022E0B60 @@ -78,7 +68,6 @@ .public ov29_02300B04 .public ov29_0231AF24 .public ov29_0233A248 -.public ov29_02344B44 .public ov29_02344B9C .public ov29_02348888 .public ov29_02348A18 @@ -92,6 +81,15 @@ .public ov29_023537C8 .public ov29_023537CC .public ov29_0237C694 +.public PositionIsOnStairs +.public PrepareItemForPrinting__02345728 +.public PreprocessString +.public RemoveEmptyItemsInBagWrapper +.public RemoveGroundItem +.public SetPortraitLayout +.public ShouldDisplayEntityWrapper +.public ShouldMonsterHeadToStairs +.public StringFromId .public strlen .public strncmp .public strncpy @@ -109,3 +107,5 @@ .public sub_02048240 .public sub_0204833C .public sub_02048360 +.public SubstitutePlaceholderStringTags +.public YesNoMenu diff --git a/asm/include/overlay_29_0234BEE0.inc b/asm/include/overlay_29_0234BEE0.inc index ccadb1da..85331ac3 100644 --- a/asm/include/overlay_29_0234BEE0.inc +++ b/asm/include/overlay_29_0234BEE0.inc @@ -10,8 +10,6 @@ .public MemAlloc .public MemFree .public MemZero -.public OverlayIsLoaded -.public UnloadOverlay .public ov10_022BF764 .public ov10_022BF7D4 .public ov29_022DC670 @@ -42,6 +40,7 @@ .public ov29_023537D8 .public ov29_023537E4 .public ov30_02382A34 +.public OverlayIsLoaded .public sub_0200383C .public sub_020038D8 .public sub_020038E8 @@ -85,3 +84,4 @@ .public sub_02034710 .public sub_02034A80 .public sub_0204F9CC +.public UnloadOverlay diff --git a/asm/include/overlay_29_0234CA84.inc b/asm/include/overlay_29_0234CA84.inc index e89f2777..6f8c6101 100644 --- a/asm/include/overlay_29_0234CA84.inc +++ b/asm/include/overlay_29_0234CA84.inc @@ -1,7 +1,7 @@ #pragma once -.public DUNGEON_PTR .public Debug_Print0 .public DisplayMessageInternal +.public DUNGEON_PTR .public FixedRoomIsSubstituteRoom .public GetDungeonTipShown .public GetGameMode @@ -17,12 +17,6 @@ .public LoadOverlay .public LoadScriptVariableValue .public LogMessageByIdQuiet -.public OverlayIsLoaded -.public SetBothScreensWindowsColor -.public SetDungeonTipShown -.public StringFromId -.public UnloadOverlay -.public WriteQuicksaveData .public ov29_022EA428 .public ov29_022EACBC .public ov29_0231ADA8 @@ -66,4 +60,10 @@ .public ov29_023537E8 .public ov29_0237D000 .public ov30_023842F4 +.public OverlayIsLoaded +.public SetBothScreensWindowsColor +.public SetDungeonTipShown +.public StringFromId .public sub_02025784 +.public UnloadOverlay +.public WriteQuicksaveData diff --git a/asm/include/overlay_29_rodata_02352780.inc b/asm/include/overlay_29_rodata_02352780.inc index 6f70f09b..3f59c932 100644 --- a/asm/include/overlay_29_rodata_02352780.inc +++ b/asm/include/overlay_29_rodata_02352780.inc @@ -1 +1,2 @@ #pragma once + diff --git a/asm/include/overlay_31_02382FBC.inc b/asm/include/overlay_31_02382FBC.inc index 2194899b..4877d50a 100644 --- a/asm/include/overlay_31_02382FBC.inc +++ b/asm/include/overlay_31_02382FBC.inc @@ -3,21 +3,21 @@ .public CloseParentMenu .public CreateAdvancedTextBox .public CreateParentMenuFromStringIds +.public DrawTextInWindow .public DUNGEON_SUBMENU_ITEMS_1 .public DUNGEON_WINDOW_PARAMS_5 .public DUNGEON_WINDOW_PARAMS_6 .public DUNGEON_WINDOW_PARAMS_7 -.public DrawTextInWindow .public GetLeader .public IsAdvancedTextBoxActive .public IsParentMenuActive .public MemFree +.public ov29_0237C91C +.public ov31_02389E22 +.public ov31_0238A2A0 .public OVERLAY31_UNKNOWN_STRING_IDS .public SetAdvancedTextBoxField0x1C4 .public SetMonsterActionFields .public StairsSubheadingCallback .public StringFromId -.public ov29_0237C91C -.public ov31_02389E22 -.public ov31_0238A2A0 .public sub_0202ABB0 diff --git a/asm/include/overlay_31_023833D8.inc b/asm/include/overlay_31_023833D8.inc index b3e431a6..9f9bf4ee 100644 --- a/asm/include/overlay_31_023833D8.inc +++ b/asm/include/overlay_31_023833D8.inc @@ -1,9 +1,9 @@ #pragma once -.public OVERLAY31_UNKNOWN_POINTER__NA_238A268 .public ov31_02383328 .public ov31_0238335C .public ov31_023833B4 .public ov31_0238A2A8 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A268 .public sub_020355DC .public sub_02035CE4 .public sub_0204AEA0 diff --git a/asm/include/overlay_31_023838E4.inc b/asm/include/overlay_31_023838E4.inc index 4d2cc086..e052c60f 100644 --- a/asm/include/overlay_31_023838E4.inc +++ b/asm/include/overlay_31_023838E4.inc @@ -1,4 +1,5 @@ #pragma once +.public _020A1870 .public AddDungeonSubMenuOption .public AdvanceFrame .public AiMovement @@ -30,6 +31,11 @@ .public CreateScrollBoxSingle .public CreateTextBox .public CreateTextBoxWithArg +.public Debug_Print0 +.public DisableDungeonSubMenuOption +.public DisplayMessage +.public DrawTextInWindow +.public DrawTileGrid .public DUNGEON_PTR .public DUNGEON_SUBMENU_ITEMS_5 .public DUNGEON_SUBMENU_ITEMS_6 @@ -57,11 +63,6 @@ .public DUNGEON_WINDOW_PARAMS_31 .public DUNGEON_WINDOW_PARAMS_32 .public DUNGEON_WINDOW_PARAMS_9 -.public Debug_Print0 -.public DisableDungeonSubMenuOption -.public DisplayMessage -.public DrawTextInWindow -.public DrawTileGrid .public EntityIsValid__02383658 .public FormatMoveString .public FormatMoveStringMore @@ -111,43 +112,12 @@ .public JoinedAtRangeCheck2Veneer .public LogMessageByIdWithPopupCheckUser .public MemAlloc +.public memcpy .public MemFree +.public memset .public MemZero .public MonsterCanThrowItems .public MonsterHasEmbargoStatus -.public OVERLAY31_JP_STRING -.public OVERLAY31_UNKNOWN_POINTER__NA_238A26C -.public OVERLAY31_UNKNOWN_POINTER__NA_238A270 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A27C -.public OVERLAY31_UNKNOWN_POINTER__NA_238A280 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A284 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A288 -.public OVERLAY31_UNKNOWN_POINTER__NA_238A28C -.public OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 -.public OVERLAY31_UNKNOWN_STRUCT__NA_238A144 -.public OVERLAY31_UNKNOWN_STRUCT__NA_238A190 -.public PlaySeVolumeWrapper -.public PlayWindowInputSound -.public PopInventoryMenuField0x1A3 -.public PreprocessString -.public PreprocessStringFromId -.public PrintIqSkillsMenu -.public ResumeParentMenu -.public SetAdvancedTextBoxField0x1C2 -.public SetAdvancedTextBoxState5 -.public SetMonsterActionFields -.public ShowStringInDialogueBox -.public SortItemsInBag -.public SpecificRecruitCheck -.public StringFromId -.public TeamMemberHasEnabledIqSkill -.public TryPointCameraToMonster -.public UpdateMapSurveyorFlag -.public UpdateWindow -.public YesNoMenu -.public _020A1870 -.public memcpy -.public memset .public ov10_022BCC60 .public ov10_022BCC7C .public ov10_022BCCB0 @@ -194,7 +164,6 @@ .public ov29_02347100 .public ov29_02348D00 .public ov29_0234B034 -.public ov29_0234B084 .public ov29_0234E988 .public ov29_0234EA18 .public ov29_0234EBCC @@ -236,12 +205,38 @@ .public ov31_0238A154 .public ov31_0238A228 .public ov31_0238A23C +.public OVERLAY31_JP_STRING +.public OVERLAY31_UNKNOWN_POINTER__NA_238A26C +.public OVERLAY31_UNKNOWN_POINTER__NA_238A270 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A27C +.public OVERLAY31_UNKNOWN_POINTER__NA_238A280 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A284 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A288 +.public OVERLAY31_UNKNOWN_POINTER__NA_238A28C +.public OVERLAY31_UNKNOWN_STRUCT__NA_2389FE8 +.public OVERLAY31_UNKNOWN_STRUCT__NA_238A144 +.public OVERLAY31_UNKNOWN_STRUCT__NA_238A190 +.public PlaySeByIdVolumeWrapper +.public PlaySeVolumeWrapper +.public PlayWindowInputSound +.public PopInventoryMenuField0x1A3 +.public PreprocessString +.public PreprocessStringFromId +.public PrintIqSkillsMenu +.public ResumeParentMenu +.public SetAdvancedTextBoxField0x1C2 +.public SetAdvancedTextBoxState5 +.public SetMonsterActionFields +.public SetPreprocessorArgsIdVal +.public ShowStringInDialogueBox +.public SortItemsInBag +.public SpecificRecruitCheck .public strcpy +.public StringFromId .public sub_02001808 .public sub_0200B3D4 .public sub_0200D310 .public sub_02017C74 -.public sub_02017C80 .public sub_02027B1C .public sub_0202810C .public sub_0202812C @@ -289,4 +284,9 @@ .public sub_02054F44 .public sub_02056228 .public sub_020585B4 +.public TeamMemberHasEnabledIqSkill +.public TryPointCameraToMonster +.public UpdateMapSurveyorFlag +.public UpdateWindow .public vsprintf +.public YesNoMenu diff --git a/asm/main_02013C30.s b/asm/main_02013C30.s index 1d463817..1d7f59f5 100644 --- a/asm/main_02013C30.s +++ b/asm/main_02013C30.s @@ -5496,14 +5496,14 @@ sub_02017C74: ; 0x02017C74 _02017C7C: .word PlaySeByIdVolume arm_func_end sub_02017C74 - arm_func_start sub_02017C80 -sub_02017C80: ; 0x02017C80 + arm_func_start PlaySeByIdVolumeWrapper +PlaySeByIdVolumeWrapper: ; 0x02017C80 ldr ip, _02017C8C ; =PlaySeByIdVolume mov r1, #0x100 bx ip .align 2, 0 _02017C8C: .word PlaySeByIdVolume - arm_func_end sub_02017C80 + arm_func_end PlaySeByIdVolumeWrapper arm_func_start sub_02017C90 sub_02017C90: ; 0x02017C90 @@ -17595,7 +17595,7 @@ _0202194C: bl AtoiTag mov r0, r0, lsl #0x10 mov r0, r0, lsr #0x10 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper b _02021AA0 _02021984: ldr r0, _02021ED4 ; =_020997E4 @@ -22104,8 +22104,8 @@ GetDungeonResultString: ; 0x02024FD8 _02024FE4: .word _022A5268 arm_func_end GetDungeonResultString - arm_func_start sub_02024FE8 -sub_02024FE8: ; 0x02024FE8 + arm_func_start SubstitutePlaceholderItemTags +SubstitutePlaceholderItemTags: ; 0x02024FE8 stmdb sp!, {r3, r4, r5, lr} cmp r1, #0 beq _02025030 @@ -22147,7 +22147,7 @@ _02025068: _02025070: .word _022A596A _02025074: .word _022A5969 _02025078: .word _022A5970 - arm_func_end sub_02024FE8 + arm_func_end SubstitutePlaceholderItemTags arm_func_start sub_0202507C sub_0202507C: ; 0x0202507C diff --git a/asm/main_0203C774.s b/asm/main_0203C774.s index 1d2a6655..f98e20ad 100644 --- a/asm/main_0203C774.s +++ b/asm/main_0203C774.s @@ -5287,7 +5287,7 @@ _02040E34: cmpeq r0, #0 bne _02040E6C ldr r0, _02040FA4 ; =0x00001308 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper b _02040E78 _02040E6C: ldr r0, _02040F9C ; =0x00003F07 @@ -6486,7 +6486,7 @@ _02041CF8: tst r0, #8 beq _02041D54 ldr r0, _020420D0 ; =0x00003F04 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper ldr r0, _020420BC ; =_020AFE90 ldr r0, [r0, #4] ldrsb r0, [r0] @@ -6511,7 +6511,7 @@ _02041D54: cmp r0, #0 beq _02041D7C ldr r0, _020420D4 ; =0x00003F03 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper b _020420B0 _02041D7C: ldrsb r0, [r1] @@ -6594,7 +6594,7 @@ _02041E84: ldr r0, [r3, #0x790] bl DisableIqSkill ldr r0, _020420D8 ; =0x00003F07 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper _02041E98: ldr r0, _020420BC ; =_020AFE90 ldr r0, [r0, #4] diff --git a/asm/main_0207F894.s b/asm/main_0207F894.s index 8cc87b36..c4f1206e 100644 --- a/asm/main_0207F894.s +++ b/asm/main_0207F894.s @@ -2953,8 +2953,8 @@ _02081FF0: _02082008: .word 0x00996A00 arm_func_end sub_02081F60 - arm_func_start sub_0208200C -sub_0208200C: ; 0x0208200C + arm_func_start PM_ForceToPowerOff +PM_ForceToPowerOff: ; 0x0208200C stmdb sp!, {r3, lr} ldr r0, _02082030 ; =_02081A7C add r1, sp, #0 @@ -2966,7 +2966,7 @@ sub_0208200C: ; 0x0208200C ldmia sp!, {r3, pc} .align 2, 0 _02082030: .word sub_02081A7C - arm_func_end sub_0208200C + arm_func_end PM_ForceToPowerOff arm_func_start sub_02082034 sub_02082034: ; 0x02082034 @@ -3170,7 +3170,7 @@ _020822C4: ldrh r0, [r1] strh r8, [r1] beq _020822F8 - bl sub_0208200C + bl PM_ForceToPowerOff _020822F8: ldr r0, _0208230C ; =_022BB6AC ldr r0, [r0, #0x18] @@ -5952,14 +5952,14 @@ sub_020845F8: ; 0x020845F8 and r0, r0, #0x8000 movs r0, r0, asr #0xf beq _02084660 - bl sub_0208200C + bl PM_ForceToPowerOff cmp r0, #4 bne _02084658 ldr r4, _02084680 ; =0x000A3A47 _02084644: mov r0, r4 bl sub_0207B854 - bl sub_0208200C + bl PM_ForceToPowerOff cmp r0, #4 beq _02084644 _02084658: diff --git a/asm/overlay_02.s b/asm/overlay_02.s index b577530e..6bbec6c3 100644 --- a/asm/overlay_02.s +++ b/asm/overlay_02.s @@ -26434,7 +26434,7 @@ ov02_0233A420: ; 0x0233A420 ldmneia sp!, {r3, pc} mov r0, #0x1000000 bl sub_0207B854 - bl sub_0208200C + bl PM_ForceToPowerOff ldmia sp!, {r3, pc} arm_func_end ov02_0233A420 @@ -27739,7 +27739,7 @@ ov02_0233B470: ; 0x0233B470 ldmneia sp!, {r3, pc} mov r0, #0x1000000 bl sub_0207B854 - bl sub_0208200C + bl PM_ForceToPowerOff ldmia sp!, {r3, pc} arm_func_end ov02_0233B470 diff --git a/asm/overlay_10_022BCC7C.s b/asm/overlay_10_022BCC7C.s index 4e48caff..b38c6952 100644 --- a/asm/overlay_10_022BCC7C.s +++ b/asm/overlay_10_022BCC7C.s @@ -3212,7 +3212,7 @@ _022BF6D4: bne _022BF724 mov r0, r1, lsl #0x10 mov r0, r0, lsr #0x10 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper _022BF724: mvn r0, #0 str r0, [r6, #0x58] diff --git a/asm/overlay_10_022C4394.s b/asm/overlay_10_022C4394.s index bea77b63..d90aa555 100644 --- a/asm/overlay_10_022C4394.s +++ b/asm/overlay_10_022C4394.s @@ -248,8 +248,8 @@ SMOG_POISON_CHANCE: .global ov10_022C4520 ov10_022C4520: .byte 0x19, 0x00, 0x00, 0x00 - .global ov10_022C4524 -ov10_022C4524: + .global CUTE_CHARM_INFATUATE_CHANCE +CUTE_CHARM_INFATUATE_CHANCE: .byte 0x0C, 0x00, 0x00, 0x00 .global LICK_PARALYZE_CHANCE LICK_PARALYZE_CHANCE: diff --git a/asm/overlay_10_rodata_022C464C.s b/asm/overlay_10_rodata_022C464C.s index e3b9f966..683bea95 100644 --- a/asm/overlay_10_rodata_022C464C.s +++ b/asm/overlay_10_rodata_022C464C.s @@ -170,8 +170,8 @@ NIGHTMARE_TURN_RANGE: .global ov10_022C4728 ov10_022C4728: .byte 0x7F, 0x00, 0x7F, 0x00 - .global ov10_022C472C -ov10_022C472C: + .global REFLECT_LIGHT_SCREEN_TURN_RANGE +REFLECT_LIGHT_SCREEN_TURN_RANGE: .byte 0x0A, 0x00, 0x0C, 0x00 .global ov10_022C4730 ov10_022C4730: @@ -218,8 +218,8 @@ ov10_022C4764: .global ov10_022C4768 ov10_022C4768: .byte 0x08, 0x00, 0x10, 0x00 - .global ov10_022C476C -ov10_022C476C: + .global GASTRO_ACID_TURN_RANGE +GASTRO_ACID_TURN_RANGE: .byte 0x04, 0x00, 0x0A, 0x00 .global ov10_022C4770 ov10_022C4770: diff --git a/asm/overlay_11.s b/asm/overlay_11.s index 11462773..abfb1aeb 100644 --- a/asm/overlay_11.s +++ b/asm/overlay_11.s @@ -6918,7 +6918,7 @@ _022E22A0: bl ScriptParamToInt mov r0, r0, lsl #0x10 mov r0, r0, lsr #0x10 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper b _022E2464 _022E22B8: ldrh r0, [r5, #2] diff --git a/asm/overlay_14.s b/asm/overlay_14.s index 5f0e2e1c..ab83b641 100644 --- a/asm/overlay_14.s +++ b/asm/overlay_14.s @@ -1452,7 +1452,7 @@ _0238B574: cmp r0, #3 bne _0238B5BC ldr r0, _0238B6D4 ; =0x00002C05 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper _0238B5BC: ldr r6, _0238B694 ; =SENTRY_DUTY_PTR ldr r0, [r6] @@ -2998,7 +2998,7 @@ _0238CA10: mov r2, #1 add r1, r1, #0x3000 strb r2, [r1, #0x870] - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper ldr r1, _0238CA54 ; =SENTRY_DUTY_PTR mov r3, #2 ldr r0, [r1] @@ -3129,7 +3129,7 @@ _0238CBEC: mov r2, #0 add r1, r1, #0x3000 str r2, [r1, #0x8ac] - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper ldr r2, _0238CFA4 ; =SENTRY_DUTY_PTR ldr r1, [r2] add r0, r1, #0x3000 @@ -3156,7 +3156,7 @@ _0238CC5C: cmp r0, #3 bne _0238CC7C ldr r0, _0238CFB0 ; =0x00003F03 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper b _0238CCE0 _0238CC7C: ldr r0, [r1, #0x898] @@ -3191,7 +3191,7 @@ _0238CCE0: tst r0, #0xf0 beq _0238CCF4 ldr r0, _0238CFB4 ; =0x00003F01 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper _0238CCF4: ldr r0, _0238CFA4 ; =SENTRY_DUTY_PTR ldr r0, [r0] @@ -3357,7 +3357,7 @@ _0238CF1C: bne _0238CF5C bl ov14_0238AC40 ldr r0, _0238CFC0 ; =0x00002C06 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper ldr r0, _0238CFA4 ; =SENTRY_DUTY_PTR mov r1, #1 ldr r0, [r0] @@ -3374,7 +3374,7 @@ _0238CF5C: bne _0238CF9C bl ov14_0238AC40 ldr r0, _0238CFC0 ; =0x00002C06 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper ldr r0, _0238CFA4 ; =SENTRY_DUTY_PTR mov r1, #1 ldr r0, [r0] @@ -3654,7 +3654,7 @@ SentryState10: ; 0x0238D320 bl ClearWindow _0238D368: ldr r0, _0238D394 ; =0x00002C08 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper ldr r0, _0238D390 ; =SENTRY_DUTY_PTR mvn r3, #0 ldr r2, [r0] @@ -3738,7 +3738,7 @@ SentryState15: ; 0x0238D428 ldmia sp!, {r3, pc} _0238D450: mov r0, #0x304 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper mov r0, #0x16 bl SentrySetStateIntermediate ldmia sp!, {r3, pc} @@ -3853,7 +3853,7 @@ SentryState1A: ; 0x0238D588 ldmia sp!, {r3, pc} _0238D5B0: mov r0, #0x304 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper mov r0, #0x1b bl SentrySetStateIntermediate ldmia sp!, {r3, pc} diff --git a/asm/overlay_15_0238A234.s b/asm/overlay_15_0238A234.s index d63114d2..4cc9da73 100644 --- a/asm/overlay_15_0238A234.s +++ b/asm/overlay_15_0238A234.s @@ -121,7 +121,7 @@ _0238A3A0: rsb r0, r0, #0 bl AddMoneyCarried ldr r0, _0238A4E0 ; =0x00001308 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper mov r0, #9 bl ov15_0238A4E8 b _0238A4D4 @@ -171,7 +171,7 @@ _0238A444: ldr r0, [r0, #0xc] bl AddMoneyCarried ldr r0, _0238A4E0 ; =0x00001308 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper mov r0, #0xc bl ov15_0238A4E8 b _0238A4D4 diff --git a/asm/overlay_18.s b/asm/overlay_18.s index 4455e495..e6f1c406 100644 --- a/asm/overlay_18.s +++ b/asm/overlay_18.s @@ -2803,7 +2803,7 @@ _0238C5EC: cmp r0, #0 bne _0238C614 ldr r0, _0238C71C ; =0x00001308 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper b _0238C620 _0238C614: ldr r0, _0238C718 ; =0x00003F07 @@ -2851,7 +2851,7 @@ _0238C68C: b _0238C6E4 _0238C6A8: ldr r0, _0238C718 ; =0x00003F07 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper mov r0, #0x21 bl ov18_0238BE28 b _0238C6E4 diff --git a/asm/overlay_21.s b/asm/overlay_21.s index 3d082c6c..f50fdbcf 100644 --- a/asm/overlay_21.s +++ b/asm/overlay_21.s @@ -2108,7 +2108,7 @@ _0238BDA0: mov r0, #0x11 bl ov21_0238A140 ldr r0, _0238C8D8 ; =0x00001308 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper b _0238C7E4 _0238BDB8: bl ov21_0238C920 diff --git a/asm/overlay_22.s b/asm/overlay_22.s index ff788785..bbd7c0ef 100644 --- a/asm/overlay_22.s +++ b/asm/overlay_22.s @@ -4618,7 +4618,7 @@ _0238E1C0: bl ov22_0238ABD4 _0238E1C8: ldr r0, _0238E7A0 ; =0x00001308 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper bl ov22_0238E7E4 mov r0, #0x12 bl ov22_0238ADD8 @@ -4657,7 +4657,7 @@ _0238E22C: bl RemoveItemNoHoleCheck bl sub_02042AF8 ldr r0, _0238E7A0 ; =0x00001308 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper bl ov22_0238E7E4 mov r0, #0x1e bl ov22_0238ADD8 @@ -4693,7 +4693,7 @@ _0238E2A4: b _0238E734 _0238E2D8: ldr r0, _0238E7A0 ; =0x00001308 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper ldr r0, _0238E794 ; =OVERLAY22_UNKNOWN_POINTER__NA_238EC70 ldr r0, [r0] ldr r0, [r0, #0x28] @@ -4767,7 +4767,7 @@ _0238E3DC: bl ov22_0238AC18 _0238E3E0: ldr r0, _0238E7A0 ; =0x00001308 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper bl ov22_0238E7E4 mov r0, #0x1b bl ov22_0238ADD8 @@ -4811,7 +4811,7 @@ _0238E43C: b _0238E734 _0238E480: ldr r0, _0238E7A0 ; =0x00001308 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper ldr r0, _0238E794 ; =OVERLAY22_UNKNOWN_POINTER__NA_238EC70 ldr r0, [r0] ldr r0, [r0, #0x28] diff --git a/asm/overlay_25.s b/asm/overlay_25.s index f29abae5..f78c938f 100644 --- a/asm/overlay_25.s +++ b/asm/overlay_25.s @@ -187,7 +187,7 @@ _0238A3D8: mov r0, #0x11 bl ov25_0238A694 ldr r0, _0238A684 ; =0x00001308 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper b _0238A674 _0238A3EC: bl ov25_0238B380 diff --git a/asm/overlay_29_022EE36C.s b/asm/overlay_29_022EE36C.s index ba916e1a..637eccc2 100644 --- a/asm/overlay_29_022EE36C.s +++ b/asm/overlay_29_022EE36C.s @@ -162,7 +162,7 @@ _022EE574: add r1, sp, #0 ldr r1, [r1, r5, lsl #2] mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 add r0, sp, #0 ldr r1, [r0, r5, lsl #2] ldrb r0, [r1] @@ -673,7 +673,7 @@ _022EEA68: mov r0, #0 strb r0, [r1, #6] ldrh r1, [r1, #4] - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal add r1, sp, #0 ldr r1, [r1, r6, lsl #2] mov r0, r4 diff --git a/asm/overlay_29_022F05B4.s b/asm/overlay_29_022F05B4.s index 74e10788..ed717333 100644 --- a/asm/overlay_29_022F05B4.s +++ b/asm/overlay_29_022F05B4.s @@ -180,7 +180,7 @@ ov29_022F07BC: ; 0x022F07BC rsb r0, r0, #0 bl AddMoneyCarried ldr r0, _022F07D4 ; =0x00001308 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper ldmia sp!, {r3, pc} .align 2, 0 _022F07D4: .word 0x00001308 @@ -644,7 +644,7 @@ _022F0D78: tst r3, #6 beq _022F0D98 ldr r0, _022F0ED8 ; =0x00003F03 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper b _022F0E30 _022F0D98: ldrb r0, [r5] @@ -4519,7 +4519,7 @@ _022F43AC: beq _022F440C add r1, r8, r7 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _022F44D8 ; =0x00000BA9 mov r0, r6 bl LogMessageByIdWithPopupCheckUser @@ -4535,7 +4535,7 @@ _022F441C: blt _022F43AC mov r1, r4 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r0, _022F44DC ; =0x00003F07 bl ov29_022EACCC cmp r5, #0 @@ -4575,7 +4575,7 @@ _022F4494: ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} mov r1, r4 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _022F44EC ; =0x00000BAE mov r0, r6 bl LogMessageByIdWithPopupCheckUser @@ -4627,7 +4627,7 @@ _022F4518: beq _022F4578 add r1, r3, r2 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _022F45C0 ; =0x00000BA9 mov r0, sl bl LogMessageByIdWithPopupCheckUser @@ -4638,7 +4638,7 @@ _022F4578: add r1, r3, r2 bic ip, ip, #0x10 strb ip, [r3, r2] - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r0, _022F45C4 ; =0x00003F07 bl ov29_022EACCC cmp sb, #0 @@ -4665,8 +4665,8 @@ _022F45C8: .word 0x00000BAD #endif arm_func_end ov29_022F44F0 - arm_func_start ov29_022F45CC -ov29_022F45CC: ; 0x022F45CC + arm_func_start HandleHeldItemSwaps +HandleHeldItemSwaps: ; 0x022F45CC stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} sub sp, sp, #0x14 mov sl, r0 @@ -4701,7 +4701,7 @@ ov29_022F45CC: ; 0x022F45CC beq _022F4668 mov r1, r5 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 #ifdef JAPAN ldr r1, _022F5EB8 ; =0x000008EF mov r0, sl @@ -4729,7 +4729,7 @@ _022F4668: beq _022F46C0 add r1, sb, #0x62 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _022F48C0 ; =0x00000BAF mov r0, sl bl LogMessageByIdWithPopupCheckUser @@ -4787,10 +4787,10 @@ _022F4770: _022F4778: add r1, sp, #6 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 add r1, sp, #0xc mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r0, _022F48C4 ; =0x00001317 bl ov29_022EACCC ldr r1, _022F48C8 ; =0x00000BB2 @@ -4837,7 +4837,7 @@ _022F482C: _022F4834: add r1, sp, #0 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r0, _022F48C4 ; =0x00001317 bl ov29_022EACCC ldr r1, _022F48D0 ; =0x00000BB3 @@ -4891,7 +4891,7 @@ _022F48C8: .word 0x00000BB2 + OV29_022F45CC_OFFSET _022F48CC: .word 0x00000BAE + OV29_022F45CC_OFFSET _022F48D0: .word 0x00000BB3 + OV29_022F45CC_OFFSET _022F48D4: .word DUNGEON_PTR - arm_func_end ov29_022F45CC + arm_func_end HandleHeldItemSwaps arm_func_start ov29_022F48D8 ov29_022F48D8: ; 0x022F48D8 @@ -4910,7 +4910,7 @@ ov29_022F48D8: ; 0x022F48D8 mov r0, #0 beq _022F4928 add r1, r5, #0x62 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _022F49D0 ; =0x00000BAE mov r0, r6 bl LogMessageByIdWithPopupCheckUser @@ -4926,7 +4926,7 @@ _022F4928: bic r2, r2, #0x10 strh r3, [sp, #4] strb r2, [sp] - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 mov r0, #0 mov r1, r4 mov r2, r0 @@ -4998,7 +4998,7 @@ ov29_022F49E0: ; 0x022F49E0 beq _022F4A44 add r1, r5, #0x62 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _022F4BCC ; =0x00000BAE mov r0, r7 bl LogMessageByIdWithPopupCheckUser @@ -5015,7 +5015,7 @@ _022F4A44: beq _022F4A84 mov r1, r6 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _022F4BCC ; =0x00000BAE mov r0, r7 bl LogMessageByIdWithPopupCheckUser @@ -5029,10 +5029,10 @@ _022F4A84: ldrb r2, [r6] bic r2, r2, #0x10 strb r2, [r6] - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 mov r1, r6 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 mov r1, r4 mov r0, #1 mov r2, #0 @@ -5160,7 +5160,7 @@ ov29_022F4BF8: ; 0x022F4BF8 mov r4, r0 mov r1, r4 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldrb r1, [r6, #0x4e] cmp r1, #0x80 bne _022F4C3C @@ -5230,7 +5230,7 @@ _022F4D08: mov r0, #0 bic r2, r2, #0x10 strb r2, [r4] - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 mov r1, r4 add r0, r5, #4 mov r2, #1 @@ -5316,7 +5316,7 @@ _022F4DFC: beq _022F4E48 mov r1, r7 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _022F5040 ; =0x00000BAE mov r0, r8 bl LogMessageByIdWithPopupCheckUser @@ -5332,7 +5332,7 @@ _022F4E48: beq _022F4E84 mov r1, r7 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 #ifdef JAPAN mov r0, r8 mov r1, #0x8f0 @@ -5448,10 +5448,10 @@ _022F4FDC: bl RemoveEmptyItemsInBagWrapper add r1, sp, #6 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 add r1, sp, #0 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r0, _022F5054 ; =0x00001317 bl ov29_022EACCC ldr r1, _022F5058 ; =0x00000BBD @@ -5509,7 +5509,7 @@ ov29_022F505C: ; 0x022F505C mov r6, r0 mov r1, r6 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldrb r1, [r5, #0x4e] cmp r1, #0x33 bhs _022F50E8 @@ -5524,7 +5524,7 @@ ov29_022F505C: ; 0x022F505C beq _022F50E8 mov r1, r6 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 #ifdef JAPAN mov r0, r7 mov r1, #0x8f0 @@ -5567,7 +5567,7 @@ _022F513C: mov r4, r0 mov r1, r4 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldrh r2, [r6] add r0, r7, #4 mov r1, #1 diff --git a/asm/overlay_29_022F52B0.s b/asm/overlay_29_022F52B0.s index d2442f94..d173a36d 100644 --- a/asm/overlay_29_022F52B0.s +++ b/asm/overlay_29_022F52B0.s @@ -67,7 +67,7 @@ _022F5334: mov r4, r0 mov r1, r4 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 bl ov29_0234B034 mov r2, r5 mov r1, #0 @@ -205,7 +205,7 @@ _022F550C: beq _022F5558 mov r1, r4 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _022F5980 ; =0x00000BAE mov r0, sb bl LogMessageByIdWithPopupCheckUser @@ -231,7 +231,7 @@ _022F5578: beq _022F55B8 mov r1, r4 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _022F5980 ; =0x00000BAE mov r0, sb bl LogMessageByIdWithPopupCheckUser @@ -383,7 +383,7 @@ _022F579C: _022F57A4: add r1, sp, #0xc mov r0, #0 - bl ov29_02344B70 + bl PrepareItemForPrinting__02345754 bl ov29_0234B034 mov r1, #0 mov r2, r8 diff --git a/asm/overlay_29_022F9194.s b/asm/overlay_29_022F9194.s index c8281569..adb505c8 100644 --- a/asm/overlay_29_022F9194.s +++ b/asm/overlay_29_022F9194.s @@ -408,7 +408,7 @@ _022F9658: bl SubstitutePlaceholderStringTags ldrb r1, [r6, #0x5e] mov r0, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _022F96C8 ; =0x00000C19 mov r0, sb mov r1, r8 diff --git a/asm/overlay_29_022F9744.s b/asm/overlay_29_022F9744.s index d87c269d..565ffcb5 100644 --- a/asm/overlay_29_022F9744.s +++ b/asm/overlay_29_022F9744.s @@ -41,7 +41,7 @@ TryActivateConversion2: ; 0x022F9744 bl SubstitutePlaceholderStringTags mov r1, r4 mov r0, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal mov r0, r7 mov r1, r6 ldr r2, _022F97EC ; =0x00000C16 @@ -822,7 +822,7 @@ _022FA0E4: bl sub_02017C50 mov r0, #0 and r1, r8, #0xff - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r1, _022FA140 ; =0x00000C1C mov r0, #0 bl LogMessageByIdWithPopup @@ -1715,7 +1715,7 @@ _022FAB58: bl SubstitutePlaceholderStringTags mov r0, #1 mov r1, #0x37 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal #ifdef JAPAN ldr r1, _022FC21C ; =0x0000095F mov r0, r5 @@ -1773,7 +1773,7 @@ _022FAC04: bl GetExclusiveItemWithEffectFromBag mov r0, #1 add r1, sp, #0xc - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 cmp sl, #0 bne _022FAC60 ldr r1, _022FAC94 ; =0x00000C23 diff --git a/asm/overlay_29_022FACBC.s b/asm/overlay_29_022FACBC.s index 8fc0c0ea..32957fa5 100644 --- a/asm/overlay_29_022FACBC.s +++ b/asm/overlay_29_022FACBC.s @@ -518,7 +518,7 @@ _022FB24C: bl SubstitutePlaceholderStringTags add r1, r4, #0x62 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r2, _022FB510 ; =0x00000C24 mov r0, sl mov r1, sb @@ -563,7 +563,7 @@ _022FB31C: bl SubstitutePlaceholderStringTags add r1, r4, #0x62 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r2, _022FB510 ; =0x00000C24 mov r0, sl mov r1, sb @@ -654,7 +654,7 @@ _022FB430: bl SubstitutePlaceholderStringTags mov r1, r6 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 mov r0, sl mov r1, sb ldr r2, _022FB518 ; =0x00000C25 diff --git a/asm/overlay_29_022FE4BC.s b/asm/overlay_29_022FE4BC.s index d667dcf8..b258c5d8 100644 --- a/asm/overlay_29_022FE4BC.s +++ b/asm/overlay_29_022FE4BC.s @@ -394,7 +394,7 @@ _022FF45C: b _022FF5E0 _022FF468: mov r0, r6 - bl ov29_022F45CC + bl HandleHeldItemSwaps b _022FF5E0 _022FF474: mov r0, r6 @@ -1041,7 +1041,7 @@ _022FEA30: b _022FEBB4 _022FEA3C: mov r0, sb - bl ov29_022F45CC + bl HandleHeldItemSwaps b _022FEBB4 _022FEA48: mov r0, sb diff --git a/asm/overlay_29_022FFF4C.s b/asm/overlay_29_022FFF4C.s index 051fe154..c908dc60 100644 --- a/asm/overlay_29_022FFF4C.s +++ b/asm/overlay_29_022FFF4C.s @@ -111,7 +111,7 @@ _02300068: bl GetExclusiveItemWithEffectFromBag add r1, sp, #0 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 #ifdef JAPAN mov r0, sl mov r1, #0x970 diff --git a/asm/overlay_29_02301A84.s b/asm/overlay_29_02301A84.s index ce621487..41691ca2 100644 --- a/asm/overlay_29_02301A84.s +++ b/asm/overlay_29_02301A84.s @@ -36,7 +36,7 @@ ov29_02301A84: ; 0x02301A84 bl GetExclusiveItemWithEffectFromBag add r1, sp, #0 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r2, _02301B28 ; =0x00000C39 mov r0, r5 mov r1, r4 diff --git a/asm/overlay_29_02302388.s b/asm/overlay_29_02302388.s index f1554212..430be18a 100644 --- a/asm/overlay_29_02302388.s +++ b/asm/overlay_29_02302388.s @@ -88,7 +88,7 @@ IsProtectedFromNegativeStatus: ; 0x02302430 bl GetExclusiveItemWithEffectFromBag add r1, sp, #0 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r2, _023024DC ; =0x00000C39 mov r0, r6 mov r1, r5 diff --git a/asm/overlay_29_02302A5C.s b/asm/overlay_29_02302A5C.s index 099d9ddf..1af150ed 100644 --- a/asm/overlay_29_02302A5C.s +++ b/asm/overlay_29_02302A5C.s @@ -166,7 +166,7 @@ _02302C6C: bl SubstitutePlaceholderStringTags mov r0, r5 and r1, r7, #0xff - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal mov r0, sl mov r1, sb mov r2, r4 @@ -975,7 +975,7 @@ _02303718: bl ov29_0230040C mov r1, r4 mov r0, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r1, _023038C4 ; =0x0000131B mov r0, sb bl ov29_022E56A0 @@ -1212,7 +1212,7 @@ _02303A30: bl SubstitutePlaceholderStringTags mov r1, r5 mov r0, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r1, _02303B08 ; =0x0000131B mov r0, sl bl ov29_022E56A0 diff --git a/asm/overlay_29_023085DC.s b/asm/overlay_29_023085DC.s index c5bd547d..33f5be04 100644 --- a/asm/overlay_29_023085DC.s +++ b/asm/overlay_29_023085DC.s @@ -616,7 +616,7 @@ _02308E20: bne _02308E80 mov r0, #0x64 bl DungeonRandInt - ldr r1, _02308FB0 ; =ov10_022C4524 + ldr r1, _02308FB0 ; =CUTE_CHARM_INFATUATE_CHANCE ldrsh r1, [r1] cmp r0, r1 addlt r0, r6, #0x100 @@ -720,7 +720,7 @@ _02308FA0: .word ov10_022C4550 _02308FA4: .word ov10_022C45C0 _02308FA8: .word ov10_022C45AC _02308FAC: .word ov10_022C467C -_02308FB0: .word ov10_022C4524 +_02308FB0: .word CUTE_CHARM_INFATUATE_CHANCE _02308FB4: .word ov10_022C4638 _02308FB8: .word DUNGEON_PTR arm_func_end ApplyDamageAndEffects diff --git a/asm/overlay_29_0230AA0C.s b/asm/overlay_29_0230AA0C.s index d994f2c5..1de9a59a 100644 --- a/asm/overlay_29_0230AA0C.s +++ b/asm/overlay_29_0230AA0C.s @@ -4144,7 +4144,7 @@ _0230E2D4: bl ov29_0234B0B4 mov r0, #1 mov r1, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r0, _0230E568 ; =0x00000C7E bl ov29_0230E658 ldrsh r1, [r8, #2] diff --git a/asm/overlay_29_0230F02C.s b/asm/overlay_29_0230F02C.s index bd64ab7d..b09d3fe8 100644 --- a/asm/overlay_29_0230F02C.s +++ b/asm/overlay_29_0230F02C.s @@ -91,7 +91,7 @@ _0230F22C: beq _0230F274 mov r1, r4 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 mov r0, #0 mov r1, r8 mov r2, r0 @@ -130,7 +130,7 @@ _0230F2B0: bl AddMoneyCarried mov r1, r4 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 add r0, r8, #4 mov r1, #1 bl RemoveGroundItem @@ -235,7 +235,7 @@ _0230F408: bl ov29_02347040 mov r1, r4 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 add r0, r8, #4 mov r1, #1 bl RemoveGroundItem @@ -301,7 +301,7 @@ _0230F508: bne _0230F544 mov r1, r4 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _0230F64C ; =0x00000C62 mov r0, r8 bl LogMessageByIdWithPopup @@ -331,7 +331,7 @@ _0230F564: bl ov29_022F9EA0 mov r1, r4 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 add r0, r8, #4 mov r1, #1 bl RemoveGroundItem @@ -362,7 +362,7 @@ _0230F5BC: b _0230F624 _0230F5F8: mov r1, r4 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 add r0, r8, #4 mov r1, #1 bl RemoveGroundItem diff --git a/asm/overlay_29_0230F9A4.s b/asm/overlay_29_0230F9A4.s index 226c3ff3..4657c1ee 100644 --- a/asm/overlay_29_0230F9A4.s +++ b/asm/overlay_29_0230F9A4.s @@ -658,7 +658,7 @@ _02310298: bne _02310360 mov r0, #2 mov r1, #0x5a - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r0, _02310A9C ; =ov10_022C46EC mov r2, #0x19 ldrsh r1, [r0] @@ -683,7 +683,7 @@ _02310304: bne _02310360 mov r0, #2 mov r1, #0x55 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r0, _02310A9C ; =ov10_022C46EC ldr r3, _02310AA0 ; =0x0000025F ldrsh r1, [r0] diff --git a/asm/overlay_29_02311C28.s b/asm/overlay_29_02311C28.s index 532e7a32..b40174fc 100644 --- a/asm/overlay_29_02311C28.s +++ b/asm/overlay_29_02311C28.s @@ -1519,7 +1519,7 @@ TryInflictShadowHoldStatus: ; 0x02312F78 bl SubstitutePlaceholderStringTags mov r0, #1 mov r1, #0x2b - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal cmp r4, #0 bne _02313024 ldr r2, _0231311C ; =0x00000D28 @@ -3209,7 +3209,7 @@ _023145F4: bl GetExclusiveItemWithEffectFromBag add r1, sp, #4 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r2, _023147D8 ; =0x00000DA1 mov r0, sl mov r1, sb diff --git a/asm/overlay_29_02314810.s b/asm/overlay_29_02314810.s index 52f62d5c..d766a19c 100644 --- a/asm/overlay_29_02314810.s +++ b/asm/overlay_29_02314810.s @@ -307,7 +307,7 @@ _02314B74: orr r1, r1, #1 strh r1, [r2, #2] ldrh r1, [r2, #4] - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal mov r0, r8 mov r1, r7 mov r5, #1 @@ -459,7 +459,7 @@ ExclusiveItemEffectIsActiveWithLogging: ; 0x02314D40 bl GetExclusiveItemWithEffectFromBag add r1, sp, #0 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 mov r0, r7 mov r1, r6 mov r2, r4 @@ -491,7 +491,7 @@ ov29_02314DC4: ; 0x02314DC4 bl GetExclusiveItemWithEffectFromBag add r1, sp, #0 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 mov r0, r7 mov r1, r6 mov r2, r5 diff --git a/asm/overlay_29_02317844.s b/asm/overlay_29_02317844.s index 7e498099..e19f6bbe 100644 --- a/asm/overlay_29_02317844.s +++ b/asm/overlay_29_02317844.s @@ -878,7 +878,7 @@ TryInflictGastroAcidStatus: ; 0x0231827C mov r1, r6 bl TryRemoveSnatchedMonsterFromDungeonStruct mov r3, #4 - ldr r1, _023183B0 ; =ov10_022C476C + ldr r1, _023183B0 ; =GASTRO_ACID_TURN_RANGE mov r0, r6 mov r2, #1 strb r3, [r4, #0xd8] @@ -917,7 +917,7 @@ _023183A0: mov r0, #1 ldmia sp!, {r4, r5, r6, r7, r8, pc} .align 2, 0 -_023183B0: .word ov10_022C476C +_023183B0: .word GASTRO_ACID_TURN_RANGE _023183B4: .word DUNGEON_PTR #ifdef JAPAN _023183B8: .word 0x00000ABB diff --git a/asm/overlay_29_02318E70.s b/asm/overlay_29_02318E70.s index 3ba86bcd..c276f410 100644 --- a/asm/overlay_29_02318E70.s +++ b/asm/overlay_29_02318E70.s @@ -282,7 +282,7 @@ TryInflictReflectStatus: ; 0x0231918C ldrb r0, [r4, #0xd5] cmp r0, #1 beq _02319204 - ldr r1, _02319220 ; =ov10_022C472C + ldr r1, _02319220 ; =REFLECT_LIGHT_SCREEN_TURN_RANGE mov r3, #1 mov r0, r5 mov r2, #0 @@ -307,7 +307,7 @@ _02319214: bl UpdateStatusIconFlags ldmia sp!, {r4, r5, r6, pc} .align 2, 0 -_02319220: .word ov10_022C472C +_02319220: .word REFLECT_LIGHT_SCREEN_TURN_RANGE #ifdef JAPAN _02319224: .word 0x00000A36 _02319228: .word 0x00000A37 diff --git a/asm/overlay_29_0231A9F8.s b/asm/overlay_29_0231A9F8.s index d19a200b..ca163f26 100644 --- a/asm/overlay_29_0231A9F8.s +++ b/asm/overlay_29_0231A9F8.s @@ -26,7 +26,7 @@ ov29_0231A9F8: ; 0x0231A9F8 tst r0, #0xff beq _0231AA60 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _0231AC90 ; =0x00000DF8 mov r0, r7 bl LogMessageByIdWithPopupCheckUser diff --git a/asm/overlay_29_0231AD38.s b/asm/overlay_29_0231AD38.s index 13217d06..ab2ebad5 100644 --- a/asm/overlay_29_0231AD38.s +++ b/asm/overlay_29_0231AD38.s @@ -362,7 +362,7 @@ _0231B150: bl SubstitutePlaceholderStringTags add r1, r6, #0x62 mov r0, #2 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r2, _0231B190 ; =0x00000C3C mov r0, r5 mov r1, r4 diff --git a/asm/overlay_29_0231B1B8.s b/asm/overlay_29_0231B1B8.s index 3ed2c11b..2440a454 100644 --- a/asm/overlay_29_0231B1B8.s +++ b/asm/overlay_29_0231B1B8.s @@ -54,7 +54,7 @@ _0231B240: blt _0231B1EC mov r0, #2 mov r1, #0x69 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r0, _0231B310 ; =ov10_022C4530 mov r8, #0 ldrsh r7, [r0] diff --git a/asm/overlay_29_0231B33C.s b/asm/overlay_29_0231B33C.s index a30fcd94..f1b44649 100644 --- a/asm/overlay_29_0231B33C.s +++ b/asm/overlay_29_0231B33C.s @@ -380,7 +380,7 @@ _0231B7D4: bl ov29_022EACCC mov r1, r6 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 mov r0, #0 mov r1, r7 mov r2, r0 @@ -422,7 +422,7 @@ _0231B860: beq _0231B8E4 mov r1, r6 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r2, _0231C6CC ; =0x00000BE7 mov r0, r8 mov r1, r7 diff --git a/asm/overlay_29_0231CBEC.s b/asm/overlay_29_0231CBEC.s index 3406b694..fb79beec 100644 --- a/asm/overlay_29_0231CBEC.s +++ b/asm/overlay_29_0231CBEC.s @@ -289,7 +289,7 @@ _0231CF18: beq _0231CF64 ldrh r1, [r7, #4] mov r0, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal #ifdef JAPAN ldr r2, _0231E440 ; =0x0000092F mov r0, sb @@ -714,7 +714,7 @@ CanMonsterUseItem: ; 0x0231D4A4 tst r2, #0xff beq _0231D4E4 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _0231D52C ; =0x00000BE7 mov r0, r4 bl LogMessageByIdWithPopupCheckUser diff --git a/asm/overlay_29_0232145C.s b/asm/overlay_29_0232145C.s index 3839d1bd..20ac1bdd 100644 --- a/asm/overlay_29_0232145C.s +++ b/asm/overlay_29_0232145C.s @@ -169,7 +169,7 @@ _02321684: bne _023216AC ldrh r1, [r4, #4] mov r0, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r1, _02321A5C ; =0x00000E7F mov r0, sl bl LogMessageByIdWithPopupCheckUser @@ -1368,7 +1368,7 @@ _02322694: mov r0, r5, lsl #0x10 mov r1, r0, asr #0x10 mov r0, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r1, [sp, #0x20] mov r0, r6 bl LogMessageWithPopupCheckUser diff --git a/asm/overlay_29_02322DDC.s b/asm/overlay_29_02322DDC.s index 84cb463a..4c46fde2 100644 --- a/asm/overlay_29_02322DDC.s +++ b/asm/overlay_29_02322DDC.s @@ -53,7 +53,7 @@ _02322E80: mov r0, r7, lsl #0x10 mov r1, r0, asr #0x10 mov r0, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal b _02322EAC _02322E94: cmp r7, #0 @@ -61,7 +61,7 @@ _02322E94: mov r0, r7, lsl #0x10 mov r1, r0, asr #0x10 mov r0, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal _02322EAC: ldrh r1, [sb, #4] ldr r0, _02322F74 ; =0x00000163 diff --git a/asm/overlay_29_02328030.s b/asm/overlay_29_02328030.s index 3ac80100..ae3685d7 100644 --- a/asm/overlay_29_02328030.s +++ b/asm/overlay_29_02328030.s @@ -691,7 +691,7 @@ _02328864: bl InitMove ldrh r1, [r8, #4] mov r0, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldrh r1, [r8, #2] ldr r2, _023288C0 ; =0x00000DB7 mov r0, sl @@ -1783,7 +1783,7 @@ _02329604: mov r1, #1 strb r1, [r7, #0xff] ldrh r1, [r4, #4] - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _02329660 ; =0x00000DB5 mov r0, sl mov r1, sb diff --git a/asm/overlay_29_0232A3FC.s b/asm/overlay_29_0232A3FC.s index b20fd36c..077039ac 100644 --- a/asm/overlay_29_0232A3FC.s +++ b/asm/overlay_29_0232A3FC.s @@ -1431,7 +1431,7 @@ _0232B578: bl SubstitutePlaceholderStringTags mov r1, r6 mov r0, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal #ifdef JAPAN mov r0, r5 mov r1, r4 diff --git a/asm/overlay_29_0232C524.s b/asm/overlay_29_0232C524.s index d1e2280d..5b0f9d71 100644 --- a/asm/overlay_29_0232C524.s +++ b/asm/overlay_29_0232C524.s @@ -2155,7 +2155,7 @@ DoMoveWorrySeed: ; 0x0232DDAC bl SubstitutePlaceholderStringTags mov r0, #1 mov r1, #0x2a - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _0232DE1C ; =0x00000F13 mov r0, r6 mov r1, r5 diff --git a/asm/overlay_29_0232E864.s b/asm/overlay_29_0232E864.s index f22af8ea..dbeb8a63 100644 --- a/asm/overlay_29_0232E864.s +++ b/asm/overlay_29_0232E864.s @@ -570,7 +570,7 @@ _0232EFDC: beq _0232F060 mov r0, #0 add r1, sp, #0xac - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r2, _0232F80C ; =0x00000EB5 mov r0, sb mov r1, r4 diff --git a/asm/overlay_29_02344B1C.s b/asm/overlay_29_02344B1C.s index 43fa5fdd..f1179462 100644 --- a/asm/overlay_29_02344B1C.s +++ b/asm/overlay_29_02344B1C.s @@ -23,44 +23,44 @@ ov29_02344B30: ; 0x02344B30 _02344B40: .word ov29_023537B0 arm_func_end ov29_02344B30 - arm_func_start ov29_02344B44 -ov29_02344B44: ; 0x02344B44 + arm_func_start PrepareItemForPrinting__02345728 +PrepareItemForPrinting__02345728: ; 0x02344B44 stmdb sp!, {r3, r4, r5, lr} mov r5, r0 mov r4, r1 orr r1, r5, #0x40000 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _02344B6C ; =ov29_023531BC mov r0, r5 mov r1, r4 - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags ldmia sp!, {r3, r4, r5, pc} .align 2, 0 _02344B6C: .word ov29_023531BC - arm_func_end ov29_02344B44 + arm_func_end PrepareItemForPrinting__02345728 - arm_func_start ov29_02344B70 -ov29_02344B70: ; 0x02344B70 + arm_func_start PrepareItemForPrinting__02345754 +PrepareItemForPrinting__02345754: ; 0x02344B70 stmdb sp!, {r3, r4, r5, lr} mov r5, r0 mov r4, r1 orr r1, r5, #0x40000 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _02344B98 ; =ov29_023531A4 mov r0, r5 mov r1, r4 - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags ldmia sp!, {r3, r4, r5, pc} .align 2, 0 _02344B98: .word ov29_023531A4 - arm_func_end ov29_02344B70 + arm_func_end PrepareItemForPrinting__02345754 arm_func_start ov29_02344B9C ov29_02344B9C: ; 0x02344B9C - ldr ip, _02344BA4 ; =ov29_0234B084 + ldr ip, _02344BA4 ; =SetPreprocessorArgsIdVal bx ip .align 2, 0 -_02344BA4: .word ov29_0234B084 +_02344BA4: .word SetPreprocessorArgsIdVal arm_func_end ov29_02344B9C arm_func_start ov29_02344BA8 @@ -72,7 +72,7 @@ ov29_02344BA8: ; 0x02344BA8 mov r1, r2 ldr r2, _02344BCC ; =ov29_023531BC str ip, [r3, #0x10] - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags ldmia sp!, {r3, pc} .align 2, 0 _02344BCC: .word ov29_023531BC @@ -454,11 +454,11 @@ TryLeaderItemPickUp: ; 0x02345058 beq _02345508 mov r0, #0 mov r1, #0x40000 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _02345510 ; =ov29_023531BC mov r1, r5 mov r0, #0 - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags mov r0, #0 mov r1, r4 mov r2, r0 @@ -476,11 +476,11 @@ _02345108: beq _02345508 mov r0, #0 mov r1, #0x40000 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _02345510 ; =ov29_023531BC mov r1, r5 mov r0, #0 - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags mov r0, #0 mov r1, r4 mov r2, r0 @@ -512,11 +512,11 @@ _0234515C: bl AddMoneyCarried mov r0, #0 mov r1, #0x40000 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _02345510 ; =ov29_023531BC mov r0, #0 mov r1, r5 - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags mov r0, sl mov r1, #1 bl RemoveGroundItem @@ -608,11 +608,11 @@ _023452D8: bl ov29_02347040 mov r0, #0 mov r1, #0x40000 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _02345510 ; =ov29_023531BC mov r1, r5 mov r0, #0 - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags mov r0, sl mov r1, #1 bl RemoveGroundItem @@ -665,11 +665,11 @@ _023453B4: beq _02345508 mov r0, #0 mov r1, #0x40000 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _02345510 ; =ov29_023531BC mov r1, r5 mov r0, #0 - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags mov r0, #0 mov r1, r4 mov r2, r0 @@ -693,11 +693,11 @@ _02345418: strh r2, [r7, #0x64] ldrh r2, [r5, #4] strh r2, [r7, #0x66] - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _02345510 ; =ov29_023531BC mov r1, r5 mov r0, #0 - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags mov r0, sl mov r1, #1 bl RemoveGroundItem @@ -723,11 +723,11 @@ _02345480: b _02345500 _023454BC: mov r1, #0x40000 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _02345510 ; =ov29_023531BC mov r1, r5 mov r0, #0 - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags mov r0, sl mov r1, #1 bl RemoveGroundItem diff --git a/asm/overlay_29_023456BC.s b/asm/overlay_29_023456BC.s index b51f7c2f..c7913420 100644 --- a/asm/overlay_29_023456BC.s +++ b/asm/overlay_29_023456BC.s @@ -403,11 +403,11 @@ _02345C3C: _02345C44: mov r0, #0 mov r1, #0x40000 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _02345D6C ; =ov29_023531BC mov r1, r7 mov r0, #0 - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags cmp r5, #0 beq _02345CF4 ldrsh r0, [sp, #0xc] @@ -643,11 +643,11 @@ _02345F74: _02345F7C: mov r0, #0 mov r1, #0x40000 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _02346054 ; =ov29_023531BC ldr r1, [sp, #4] mov r0, #0 - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags cmp r4, #0 beq _02345FC4 bl ov29_022EACBC @@ -1102,11 +1102,11 @@ _023465B4: _023465E4: mov r0, #0 mov r1, #0x40000 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _023467D4 ; =ov29_023531BC mov r1, sl mov r0, #0 - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags ldr r1, _023467D8 ; =0x00000BDC ldr r0, [sp, #4] bl LogMessageByIdWithPopupCheckUser @@ -1207,11 +1207,11 @@ _02346724: beq _023467B4 mov r0, fp mov r1, #0x40000 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r2, _023467D4 ; =ov29_023531BC mov r0, #0 mov r1, sl - bl sub_02024FE8 + bl SubstitutePlaceholderItemTags ldr r0, [sp, #4] ldr r1, _023467D8 ; =0x00000BDC bl LogMessageByIdWithPopupCheckUser diff --git a/asm/overlay_29_02346834.s b/asm/overlay_29_02346834.s index 86e9644b..7ccf9dd1 100644 --- a/asm/overlay_29_02346834.s +++ b/asm/overlay_29_02346834.s @@ -1628,7 +1628,7 @@ _02347988: bl SubstitutePlaceholderStringTags ldr r1, [sp, #8] mov r0, #0 - bl ov29_02344B70 + bl PrepareItemForPrinting__02345754 #ifdef JAPAN mov r0, sl mov r1, r7 @@ -1684,7 +1684,7 @@ _02347A38: bl SubstitutePlaceholderStringTags ldr r1, [sp, #8] mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldrb r0, [r8] #ifdef JAPAN mov r1, r7 @@ -1767,7 +1767,7 @@ _02347AF4: _02347B1C: ldr r1, [sp, #8] mov r0, #0 - bl ov29_02344B70 + bl PrepareItemForPrinting__02345754 ldr r1, _02347B4C ; =0x00000BE5 mov r0, sl bl LogMessageByIdWithPopupCheckUser diff --git a/asm/overlay_29_02348020.s b/asm/overlay_29_02348020.s index 84d164a5..c3fbf720 100644 --- a/asm/overlay_29_02348020.s +++ b/asm/overlay_29_02348020.s @@ -887,7 +887,7 @@ ov29_02348B28: ; 0x02348B28 bl ov29_0234B06C mov r1, r4 mov r0, #1 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _02348B98 ; =0x00000E17 mov r0, #0 mov r2, #1 @@ -1147,7 +1147,7 @@ _02348E64: bl SubstitutePlaceholderStringTags mov r1, r5 mov r0, #0 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldr r1, _02348EC8 ; =0x00000BD2 mov r0, r6 bl LogMessageByIdWithPopupCheckUser diff --git a/asm/overlay_29_023498A0.s b/asm/overlay_29_023498A0.s index 5cb20ca3..c29370df 100644 --- a/asm/overlay_29_023498A0.s +++ b/asm/overlay_29_023498A0.s @@ -913,7 +913,7 @@ _0234A47C: ldr r1, [r1] ldr r1, [r1, #0x384] add r1, r1, r4 - bl ov29_02344B44 + bl PrepareItemForPrinting__02345728 ldrsh r4, [sb, #4] add r0, sp, #0x14 mov r2, #0 @@ -1421,7 +1421,7 @@ _0234AAC4: bl GetSpecialTargetItem mov r1, r0 mov r0, #1 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal #ifdef JAPAN mov r0, #0 mov r1, #0xb80 @@ -1930,8 +1930,8 @@ ov29_0234B06C: ; 0x0234B06C _0234B080: .word ov29_023537CC arm_func_end ov29_0234B06C - arm_func_start ov29_0234B084 -ov29_0234B084: ; 0x0234B084 + arm_func_start SetPreprocessorArgsIdVal +SetPreprocessorArgsIdVal: ; 0x0234B084 ldr r2, _0234B098 ; =ov29_023537CC ldr r2, [r2, #4] add r0, r2, r0, lsl #2 @@ -1939,7 +1939,7 @@ ov29_0234B084: ; 0x0234B084 bx lr .align 2, 0 _0234B098: .word ov29_023537CC - arm_func_end ov29_0234B084 + arm_func_end SetPreprocessorArgsIdVal arm_func_start ov29_0234B09C ov29_0234B09C: ; 0x0234B09C diff --git a/asm/overlay_31_023838E4.s b/asm/overlay_31_023838E4.s index c6a05936..29573d12 100644 --- a/asm/overlay_31_023838E4.s +++ b/asm/overlay_31_023838E4.s @@ -627,7 +627,7 @@ _023841A4: tst r0, #8 beq _023842DC ldr r0, _023848D0 ; =0x00003F04 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper ldr r0, _02384898 ; =OVERLAY31_UNKNOWN_POINTER__NA_238A26C ldr r0, [r0] add r0, r0, #0x1100 @@ -3745,7 +3745,7 @@ _02386950: bl sub_02041154 mov r1, r0 mov r0, #0 - bl ov29_0234B084 + bl SetPreprocessorArgsIdVal ldr r0, _02386B0C ; =OVERLAY31_UNKNOWN_POINTER__NA_238A270 ldr r0, [r0] cmp r0, #4 @@ -7220,7 +7220,7 @@ _0238A838: ldrb r5, [r1, #0xb8] bl ov31_02389D80 ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper bl ov29_022EBA70 mov r0, #0x2f mov r1, #0 @@ -7292,7 +7292,7 @@ _0238A998: cmp r1, r0 bne _0238A9AC ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper _0238A9AC: cmp r8, #0 bge _0238A9C8 @@ -7335,7 +7335,7 @@ _0238AA04: b _0238AB68 _0238AA3C: ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper bl sub_02001808 cmp r0, #0xa000 bge _0238AA64 @@ -7518,7 +7518,7 @@ _02389578: ldrb r6, [r1, #0xb8] bl ov31_02389D80 ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper bl ov29_022EBA70 mov r0, #0x2f mov r1, #0 @@ -7590,7 +7590,7 @@ _023896DC: cmp r1, r0 bne _023896F0 ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper _023896F0: cmp r8, #0 bge _0238970C @@ -7633,7 +7633,7 @@ _02389748: b _023898AC _02389780: ldr r0, _02389900 ; =0x00003F02 - bl sub_02017C80 + bl PlaySeByIdVolumeWrapper bl sub_02001808 cmp r0, #0xa000 bge _023897A8 diff --git a/lib/DSE/asm/include/main_02071AC0.inc b/lib/DSE/asm/include/main_02071AC0.inc index f0545f97..b8189f18 100644 --- a/lib/DSE/asm/include/main_02071AC0.inc +++ b/lib/DSE/asm/include/main_02071AC0.inc @@ -1,3 +1,3 @@ #pragma once -.public DseChannel_SetBank .public _u32_div_f +.public DseChannel_SetBank diff --git a/lib/DSE/asm/include/main_02071EB4.inc b/lib/DSE/asm/include/main_02071EB4.inc index d4166821..64f71d3f 100644 --- a/lib/DSE/asm/include/main_02071EB4.inc +++ b/lib/DSE/asm/include/main_02071EB4.inc @@ -1,25 +1,4 @@ #pragma once -.public DRIVER_WORK -.public DseMem_Allocate -.public DseMem_Free -.public DseSwd_GetBankById -.public DseSwd_GetInstrument -.public DseSwd_GetNextSplitInRange -.public DseUtil_GetRandomNumber -.public ReadWaviEntry -.public SoundEnvelopeParameters_CheckValidity -.public SoundEnvelopeParameters_Reset -.public SoundEnvelope_Release -.public SoundEnvelope_Reset -.public SoundEnvelope_SetParameters -.public SoundEnvelope_Stop -.public SoundEnvelope_Stop2 -.public SoundEnvelope_Tick -.public SoundLfoBank_Reset -.public SoundLfoBank_Set -.public SoundLfoBank_SetConstEnvelopes -.public SoundLfoBank_Tick -.public UpdateTrackVolumeEnvelopes .public _020B0D50 .public _020B1310 .public _020B1394 @@ -30,6 +9,26 @@ .public _022B8330 .public _022B9584 .public _s32_div_f +.public DRIVER_WORK +.public DseMem_Allocate +.public DseMem_Free +.public DseSwd_GetBankById +.public DseSwd_GetInstrument +.public DseSwd_GetNextSplitInRange +.public DseUtil_GetRandomNumber +.public ReadWaviEntry +.public SoundEnvelope_Release +.public SoundEnvelope_Reset +.public SoundEnvelope_SetParameters +.public SoundEnvelope_Stop +.public SoundEnvelope_Stop2 +.public SoundEnvelope_Tick +.public SoundEnvelopeParameters_CheckValidity +.public SoundEnvelopeParameters_Reset +.public SoundLfoBank_Reset +.public SoundLfoBank_Set +.public SoundLfoBank_SetConstEnvelopes +.public SoundLfoBank_Tick .public sub_0207C8B8 .public sub_0207C8E0 .public sub_0207CA04 @@ -39,3 +38,4 @@ .public sub_0207CAB8 .public sub_0207CAE0 .public sub_0207D470 +.public UpdateTrackVolumeEnvelopes diff --git a/src/dungeon_projectile_throw.c b/src/dungeon_projectile_throw.c index a5b155c3..43c6ef87 100644 --- a/src/dungeon_projectile_throw.c +++ b/src/dungeon_projectile_throw.c @@ -28,7 +28,7 @@ extern bool8 ov29_023457C8(struct entity *entity, bool8 hallucinating, u8 a2, u8 extern void AdvanceFrame(u32); extern bool8 TwoTurnMoveForcedMiss(struct entity *target, struct move *move); extern bool8 DoesProjectileHitTarget(struct entity *user, struct entity *target); -extern void ov29_02344B70(u8 *buffer, struct item *item); +extern void PrepareItemForPrinting__02345754(u8 *buffer, struct item *item); extern void SubstitutePlaceholderStringTags(u8 *string_id, struct entity *entity, u32 param_3); extern void ov29_02304A84(struct entity *entity, u32 new_dir); extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); @@ -192,7 +192,7 @@ void HandleCurvedProjectileThrow(struct entity *thrower, struct item *item, stru hitResult.did_hit = DoesProjectileHitTarget(thrower, hitResult.target); } - ov29_02344B70(0, item); + PrepareItemForPrinting__02345754(0, item); SubstitutePlaceholderStringTags(0, hitResult.target, 0); if (hitResult.did_hit) { bool8 immobiSlpEndMsg; From cde588512b27df5c0479a9d80097fd9a7766c0bd Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 6 Aug 2025 20:33:01 -0400 Subject: [PATCH 23/40] Fixed unbound local in sync_to_pmdsky_debug --- tools/sync_pmdsky_debug/sync_to_pmdsky_debug.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/sync_pmdsky_debug/sync_to_pmdsky_debug.py b/tools/sync_pmdsky_debug/sync_to_pmdsky_debug.py index b940955d..b0da075b 100644 --- a/tools/sync_pmdsky_debug/sync_to_pmdsky_debug.py +++ b/tools/sync_pmdsky_debug/sync_to_pmdsky_debug.py @@ -260,6 +260,7 @@ def sync_xmap_symbol(address: int, symbol: SymbolDetails, language: str, section symbol_header_path = os.path.join(HEADER_FOLDER, symbol.file_path.replace('.o', '.h')) if not os.path.exists(symbol_header_path): symbol_header_path = os.path.join('lib', 'DSE', symbol_header_path) + symbol_header = None if symbol.is_data: if string_length is not None: symbol_header = f'extern char {base_symbol_name}[{string_length}];\n' From 789278dab496e0a4323647054aa742a17ff27b46 Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Wed, 6 Aug 2025 21:08:32 -0400 Subject: [PATCH 24/40] Decomped DexNumbersEqual --- asm/include/main_02054C24.inc | 76 - asm/include/main_02054E4C.inc | 77 + asm/main_02054C24.s | 5201 --------------------------------- asm/main_02054E4C.s | 5166 ++++++++++++++++++++++++++++++++ include/main_02054DC4.h | 8 + main.lsf | 2 + src/main_02054DC4.c | 17 + 7 files changed, 5270 insertions(+), 5277 deletions(-) create mode 100644 asm/include/main_02054E4C.inc create mode 100644 asm/main_02054E4C.s create mode 100644 include/main_02054DC4.h create mode 100644 src/main_02054DC4.c diff --git a/asm/include/main_02054C24.inc b/asm/include/main_02054C24.inc index bddb8db2..360e27e4 100644 --- a/asm/include/main_02054C24.inc +++ b/asm/include/main_02054C24.inc @@ -1,82 +1,6 @@ #pragma once -.public _020A190C -.public _020A333C -.public _020A3340 -.public _020A3350 -.public _020A336C -.public _020A3398 -.public _020A33B8 -.public _020A33D4 -.public _020A340C -.public _020A343C -.public _020A344C -.public _020A3450 -.public _020A3468 -.public _020AFC28 -.public _020AFC4C -.public _020B0A4C -.public _022B5788 -.public _022B578C -.public AddMoneyCarried -.public CleanStickyItemsInBag -.public CopyAndInterleaveWrapper -.public CopyTacticString -.public Debug_Print0 -.public DirectoryFileMngr_OpenDirectoryFile .public FemaleToMaleForm -.public GetBaseDefensiveStat .public GetBaseFormBurmyWormadamShellosGastrodonCherrim -.public GetBaseFormCastformCherrimDeoxys -.public GetBaseHp -.public GetBaseOffensiveStat -.public GetBodySize .public GetDexNumber -.public GetGameMode -.public GetIqGroup -.public GetItemAtIdx -.public GetItemMoveId16 -.public GetMaxMembersAllowed -.public GetMaxPp -.public GetMonsterGender -.public GetNameRaw -.public GetPerformanceFlagWithChecks -.public GetShadowSize -.public GroundToDungeonMoveset -.public HandleSir0Translation -.public IQ_GROUP_SKILLS -.public IQ_SKILL_RESTRICTIONS -.public IQ_SKILLS -.public IqSkillFlagTest .public IsDeoxys -.public IsLevelResetDungeon -.public IsSkyExclusiveDungeon .public IsUnown -.public ItemZInit -.public MemZero -.public RemoveHolderForItemInBag -.public RemovePokeItemsInBag -.public SetHolderForItemInBag -.public SetPokemonJoined -.public ShuffleHiddenPower -.public SprintfStatic__02054A60 -.public StrcmpMonsterName -.public StrncpyName -.public StrncpySimple -.public StrncpySimpleNoPadSafe -.public sub_0200D8AC -.public sub_0200FA0C -.public sub_0201B43C -.public sub_0201B9F8 -.public sub_0201F598 -.public sub_0204E584 -.public sub_02052CF4 -.public sub_02052E2C -.public sub_020530D4 -.public sub_02053174 -.public sub_0205349C -.public sub_020534BC -.public sub_02053D1C -.public sub_02053F10 -.public TACTICS_UNLOCK_LEVEL_TABLE -.public TEAM_MEMBER_TABLE_PTR -.public UnloadFile diff --git a/asm/include/main_02054E4C.inc b/asm/include/main_02054E4C.inc new file mode 100644 index 00000000..d102867c --- /dev/null +++ b/asm/include/main_02054E4C.inc @@ -0,0 +1,77 @@ +#pragma once +.public AddMoneyCarried +.public CleanStickyItemsInBag +.public CopyAndInterleaveWrapper +.public CopyTacticString +.public Debug_Print0 +.public DirectoryFileMngr_OpenDirectoryFile +.public GetBaseDefensiveStat +.public GetBaseFormCastformCherrimDeoxys +.public GetBaseHp +.public GetBaseOffensiveStat +.public GetBodySize +.public GetGameMode +.public GetIqGroup +.public GetItemAtIdx +.public GetItemMoveId16 +.public GetMaxMembersAllowed +.public GetMaxPp +.public GetMonsterGender +.public GetNameRaw +.public GetPerformanceFlagWithChecks +.public GetShadowSize +.public GroundToDungeonMoveset +.public HandleSir0Translation +.public IQ_GROUP_SKILLS +.public IQ_SKILLS +.public IQ_SKILL_RESTRICTIONS +.public IqSkillFlagTest +.public IsLevelResetDungeon +.public IsSkyExclusiveDungeon +.public ItemZInit +.public MemZero +.public RemoveHolderForItemInBag +.public RemovePokeItemsInBag +.public SetHolderForItemInBag +.public SetPokemonJoined +.public ShuffleHiddenPower +.public SprintfStatic__02054A60 +.public StrcmpMonsterName +.public StrncpyName +.public StrncpySimple +.public StrncpySimpleNoPadSafe +.public TACTICS_UNLOCK_LEVEL_TABLE +.public TEAM_MEMBER_TABLE_PTR +.public UnloadFile +.public _020A190C +.public _020A333C +.public _020A3340 +.public _020A3350 +.public _020A336C +.public _020A3398 +.public _020A33B8 +.public _020A33D4 +.public _020A340C +.public _020A343C +.public _020A344C +.public _020A3450 +.public _020A3468 +.public _020AFC28 +.public _020AFC4C +.public _020B0A4C +.public _022B5788 +.public _022B578C +.public sub_0200D8AC +.public sub_0200FA0C +.public sub_0201B43C +.public sub_0201B9F8 +.public sub_0201F598 +.public sub_0204E584 +.public sub_02052CF4 +.public sub_02052E2C +.public sub_020530D4 +.public sub_02053174 +.public sub_0205349C +.public sub_020534BC +.public sub_02053D1C +.public sub_02053F10 diff --git a/asm/main_02054C24.s b/asm/main_02054C24.s index ee393848..8f101238 100644 --- a/asm/main_02054C24.s +++ b/asm/main_02054C24.s @@ -119,5204 +119,3 @@ _02054DB8: .word 0x000001BF _02054DBC: .word 0x000001C2 _02054DC0: .word 0x000001CE arm_func_end BaseFormsEqual - - arm_func_start DexNumbersEqual -DexNumbersEqual: ; 0x02054DC4 - stmdb sp!, {r4, r5, r6, lr} - mov r4, r1 - bl FemaleToMaleForm - mov r5, r0 - mov r0, r4 - bl FemaleToMaleForm - mov r4, r0 - mov r0, r5 - bl GetBaseFormCastformDeoxysCherrim - mov r5, r0 - mov r0, r4 - bl GetBaseFormCastformDeoxysCherrim - mov r6, r0 - cmp r5, r6 - moveq r0, #1 - ldmeqia sp!, {r4, r5, r6, pc} - mov r0, r5 - bl IsUnown - cmp r0, #0 - beq _02054E28 - mov r0, r6 - bl IsUnown - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, pc} -_02054E28: - mov r0, r5 - bl GetDexNumber - mov r4, r0 - mov r0, r6 - bl GetDexNumber - cmp r4, r0 - moveq r0, #1 - movne r0, #0 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end DexNumbersEqual - - arm_func_start GendersEqual -GendersEqual: ; 0x02054E4C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - bl GetMonsterGender - mov r4, r0 - mov r0, r5 - bl GetMonsterGender - cmp r4, r0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, r4, r5, pc} - arm_func_end GendersEqual - - arm_func_start GendersEqualNotGenderless -GendersEqualNotGenderless: ; 0x02054E78 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - mov r5, r1 - bl GetMonsterGender - cmp r0, #3 - beq _02054EC0 - mov r0, r5 - bl GetMonsterGender - cmp r0, #3 - beq _02054EC0 - mov r0, r4 - bl GetMonsterGender - mov r4, r0 - mov r0, r5 - bl GetMonsterGender - cmp r4, r0 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} -_02054EC0: - mov r0, #0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end GendersEqualNotGenderless - - arm_func_start GendersNotEqualNotGenderless -GendersNotEqualNotGenderless: ; 0x02054EC8 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - mov r5, r1 - bl GetMonsterGender - cmp r0, #3 - beq _02054F10 - mov r0, r5 - bl GetMonsterGender - cmp r0, #3 - beq _02054F10 - mov r0, r4 - bl GetMonsterGender - mov r4, r0 - mov r0, r5 - bl GetMonsterGender - cmp r4, r0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, pc} -_02054F10: - mov r0, #0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end GendersNotEqualNotGenderless - - arm_func_start sub_02054F18 -sub_02054F18: ; 0x02054F18 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add r0, r0, #0xea - add r0, r0, #0xfd00 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #2 - movls r0, #1 - movhi r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end sub_02054F18 - - arm_func_start sub_02054F44 -sub_02054F44: ; 0x02054F44 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x14 - mov r5, r0 - mov r4, r2 - add r0, sp, #0 - mov r2, #0xa - bl StrncpySimpleNoPadSafe - cmp r4, #0 - bne _02054F7C - ldr r1, _02054F98 ; =_020A333C - add r2, sp, #0 - mov r0, r5 - bl SprintfStatic__02054A60 - b _02054F90 -_02054F7C: - ldr r1, _02054F9C ; =_020A3340 - add r3, sp, #0 - mov r0, r5 - mov r2, r4 - bl SprintfStatic__02054A60 -_02054F90: - add sp, sp, #0x14 - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_02054F98: .word _020A333C -_02054F9C: .word _020A3340 - arm_func_end sub_02054F44 - - arm_func_start sub_02054FA0 -sub_02054FA0: ; 0x02054FA0 - ldr ip, _02054FB4 ; =sub_02054F44 - cmp r2, #0 - movne r2, #0x59 - moveq r2, #0x46 - bx ip - .align 2, 0 -_02054FB4: .word sub_02054F44 - arm_func_end sub_02054FA0 - - arm_func_start sub_02054FB8 -sub_02054FB8: ; 0x02054FB8 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - mov r4, r0 - ldrsh r3, [r4] - mov r2, #1 - add r0, sp, #0 - str r3, [sp] - rsb r3, r2, #0x3e8 - bl sub_02055088 - ldr r1, [sp] - strh r1, [r4] - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - arm_func_end sub_02054FB8 - - arm_func_start sub_02054FEC -sub_02054FEC: ; 0x02054FEC - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - mov r4, r0 - ldrb r3, [r4] - add r0, sp, #0 - mov r2, #1 - str r3, [sp] - mov r3, #0xff - bl sub_02055088 - ldr r1, [sp] - strb r1, [r4] - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - arm_func_end sub_02054FEC - - arm_func_start sub_02055020 -sub_02055020: ; 0x02055020 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - mov r4, r0 - ldrb r3, [r4] - add r0, sp, #0 - mov r2, #1 - str r3, [sp] - mov r3, #0xff - bl sub_02055088 - ldr r1, [sp] - strb r1, [r4] - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - arm_func_end sub_02055020 - - arm_func_start sub_02055054 -sub_02055054: ; 0x02055054 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - mov r4, r0 - ldrsh r3, [r4] - mov r2, #1 - add r0, sp, #0 - str r3, [sp] - rsb r3, r2, #0x3e8 - bl sub_02055088 - ldr r1, [sp] - strh r1, [r4] - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - arm_func_end sub_02055054 - - arm_func_start sub_02055088 -sub_02055088: ; 0x02055088 - cmp r1, #0 - ble _020550B4 - ldr r2, [r0] - cmp r2, r3 - moveq r0, #0 - bxeq lr - add r1, r2, r1 - str r1, [r0] - cmp r1, r3 - strgt r3, [r0] - b _020550D4 -_020550B4: - ldr r3, [r0] - cmp r3, r2 - moveq r0, #0 - bxeq lr - add r1, r3, r1 - str r1, [r0] - cmp r1, r2 - strlt r2, [r0] -_020550D4: - mov r0, #1 - bx lr - arm_func_end sub_02055088 - - arm_func_start sub_020550DC -sub_020550DC: ; 0x020550DC - bx lr - arm_func_end sub_020550DC - - arm_func_start sub_020550E0 -sub_020550E0: ; 0x020550E0 - ldr r0, _0205510C ; =TEAM_MEMBER_TABLE_PTR - mov r3, #0 - ldr r2, [r0] - ldr r0, _02055110 ; =0x0000022B - mov r1, r3 -_020550F4: - add r3, r3, #1 - cmp r3, r0 - strb r1, [r2], #0x44 - blt _020550F4 - ldr ip, _02055114 ; =sub_0205523C - bx ip - .align 2, 0 -_0205510C: .word TEAM_MEMBER_TABLE_PTR -_02055110: .word 0x0000022B -_02055114: .word sub_0205523C - arm_func_end sub_020550E0 - - arm_func_start sub_02055118 -sub_02055118: ; 0x02055118 - ldr r0, _02055140 ; =TEAM_MEMBER_TABLE_PTR - mov r2, #0 - ldr r1, [r0] - ldr ip, _02055144 ; =sub_0205523C - strb r2, [r1, #0x88] - ldr r1, [r0] - strb r2, [r1, #0xcc] - ldr r0, [r0] - strb r2, [r0, #0x110] - bx ip - .align 2, 0 -_02055140: .word TEAM_MEMBER_TABLE_PTR -_02055144: .word sub_0205523C - arm_func_end sub_02055118 - - arm_func_start IsMonsterOnTeam -IsMonsterOnTeam: ; 0x02055148 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - mov sb, r1 - bl GetGameMode - cmp r0, #3 -#ifdef JAPAN - mov r6, #1 - bne _020554FC -#else - bne _020551C0 -#endif - ldr r0, _02055230 ; =TEAM_MEMBER_TABLE_PTR - mov r8, #0 - ldr r7, [r0] - mov r5, r8 -#ifndef JAPAN - mov r6, #1 -#endif - ldr r4, _02055234 ; =_020B0A4C - b _020551B8 -_0205517C: - ldrb r0, [r7] - tst r0, #1 - movne r0, r6 - moveq r0, r5 - tst r0, #0xff - beq _020551B0 - ldrsh r0, [r7, #4] - ldr r2, [r4, sb, lsl #2] - mov r1, sl - blx r2 - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_020551B0: - add r8, r8, #1 - add r7, r7, #0x44 -_020551B8: - cmp r8, #2 - blt _0205517C -#ifdef JAPAN - b _020551C0 -_020554FC: - ldr r0, _02055230 ; =_020B0A48 - mov r8, #2 - ldr r0, [r0] - mov r5, #0 - add r7, r0, #0x88 - ldr r4, _02055234 ; =_020B0A4C - b _02055554 -_02055518: - ldrb r0, [r7] - tst r0, #1 - movne r0, r6 - moveq r0, r5 - tst r0, #0xff - beq _0205554C - ldrsh r0, [r7, #4] - ldr r2, [r4, sb, lsl #2] - mov r1, sl - blx r2 - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0205554C: - add r8, r8, #1 - add r7, r7, #0x44 -_02055554: - cmp r8, #5 - blt _02055518 -#endif -_020551C0: - ldr r0, _02055230 ; =TEAM_MEMBER_TABLE_PTR - mov r8, #5 - ldr r0, [r0] - mov fp, #0 - add r7, r0, #0x154 - mov r6, #1 - ldr r5, _02055234 ; =_020B0A4C - ldr r4, _02055238 ; =0x0000022B - b _02055220 -_020551E4: - ldrb r0, [r7] - tst r0, #1 - movne r0, r6 - moveq r0, fp - tst r0, #0xff - beq _02055218 - ldrsh r0, [r7, #4] - ldr r2, [r5, sb, lsl #2] - mov r1, sl - blx r2 - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_02055218: - add r8, r8, #1 - add r7, r7, #0x44 -_02055220: - cmp r8, r4 - blt _020551E4 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02055230: .word TEAM_MEMBER_TABLE_PTR -_02055234: .word _020B0A4C -_02055238: .word 0x0000022B - arm_func_end IsMonsterOnTeam - - arm_func_start sub_0205523C -sub_0205523C: ; 0x0205523C - stmdb sp!, {r3, lr} - mov r0, #0x214 - mov r1, #0 - bl IsMonsterOnTeam - cmp r0, #0 - ldrne r1, _02055268 ; =0x0000022B - ldrne r0, _0205526C ; =_022B5788 - ldreq r1, _02055270 ; =0x0000022A - ldreq r0, _0205526C ; =_022B5788 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02055268: .word 0x0000022B -_0205526C: .word _022B5788 -_02055270: .word 0x0000022A - arm_func_end sub_0205523C - - arm_func_start GetNbRecruited -GetNbRecruited: ; 0x02055274 - stmdb sp!, {r3, r4, r5, lr} - ldr r1, _02055384 ; =0x00000906 - mov r4, r0 - bl MemZero - bl GetGameMode - cmp r0, #3 - mov r3, #1 - bne _020552E0 - ldr r0, _02055388 ; =TEAM_MEMBER_TABLE_PTR - mov lr, #0 - ldr ip, [r0] - mov r2, lr -_020552A4: - ldrb r0, [ip] - add lr, lr, #1 - tst r0, #1 - movne r0, r3 - moveq r0, r2 - tst r0, #0xff - ldrnesh r0, [ip, #4] - add ip, ip, #0x44 - movne r1, r0, lsl #1 - ldrnesh r0, [r4, r1] - addne r0, r0, #1 - strneh r0, [r4, r1] - cmp lr, #2 - blt _020552A4 - b _0205532C -_020552E0: - ldr r0, _02055388 ; =TEAM_MEMBER_TABLE_PTR - mov r5, #2 - ldr r0, [r0] - mov r2, #0 - add ip, r0, #0x88 -_020552F4: - ldrb r0, [ip] - add r5, r5, #1 - tst r0, #1 - movne r0, r3 - moveq r0, r2 - tst r0, #0xff - ldrnesh r0, [ip, #4] - add ip, ip, #0x44 - movne r1, r0, lsl #1 - ldrnesh r0, [r4, r1] - addne r0, r0, #1 - strneh r0, [r4, r1] - cmp r5, #5 - blt _020552F4 -_0205532C: - ldr r0, _02055388 ; =TEAM_MEMBER_TABLE_PTR - mov r5, #5 - ldr r0, [r0] - mov r3, #0 - add lr, r0, #0x154 - ldr r0, _0205538C ; =0x0000022B - mov ip, #1 -_02055348: - ldrb r1, [lr] - add r5, r5, #1 - tst r1, #1 - movne r1, ip - moveq r1, r3 - tst r1, #0xff - ldrnesh r1, [lr, #4] - add lr, lr, #0x44 - movne r2, r1, lsl #1 - ldrnesh r1, [r4, r2] - addne r1, r1, #1 - strneh r1, [r4, r2] - cmp r5, r0 - blt _02055348 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02055384: .word 0x00000906 -_02055388: .word TEAM_MEMBER_TABLE_PTR -_0205538C: .word 0x0000022B - arm_func_end GetNbRecruited - - arm_func_start IsValidTeamMember -IsValidTeamMember: ; 0x02055390 - stmdb sp!, {r4, lr} - ldr r1, _0205540C ; =TEAM_MEMBER_TABLE_PTR - mov r4, r0 - mov r0, #0x44 - smulbb r0, r4, r0 - ldr r1, [r1] - ldrb r0, [r1, r0] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02055404 - cmp r4, #5 - bge _020553FC - bl GetGameMode - cmp r0, #3 - bne _020553EC - cmp r4, #2 - cmpne r4, #3 - cmpne r4, #4 - beq _020553FC - mov r0, #0 - ldmia sp!, {r4, pc} -_020553EC: - cmp r4, #0 - cmpne r4, #1 - movne r0, #0 - ldmneia sp!, {r4, pc} -_020553FC: - mov r0, #1 - ldmia sp!, {r4, pc} -_02055404: - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_0205540C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end IsValidTeamMember - - arm_func_start sub_02055410 -sub_02055410: ; 0x02055410 - stmdb sp!, {r4, lr} - ldr r1, _02055470 ; =TEAM_MEMBER_TABLE_PTR - mov r4, r0 - mov r0, #0x44 - smulbb r0, r4, r0 - ldr r1, [r1] - ldrb r0, [r1, r0] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02055468 - bl GetGameMode - cmp r0, #3 - bne _0205545C - cmp r4, #2 - bne _02055468 - mov r0, #1 - ldmia sp!, {r4, pc} -_0205545C: - cmp r4, #0 - moveq r0, #1 - ldmeqia sp!, {r4, pc} -_02055468: - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_02055470: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02055410 - - arm_func_start sub_02055474 -sub_02055474: ; 0x02055474 - stmdb sp!, {r4, lr} - ldr r1, _020554D4 ; =TEAM_MEMBER_TABLE_PTR - mov r4, r0 - mov r0, #0x44 - smulbb r0, r4, r0 - ldr r1, [r1] - ldrb r0, [r1, r0] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _020554CC - bl GetGameMode - cmp r0, #3 - bne _020554C0 - cmp r4, #3 - bne _020554CC - mov r0, #1 - ldmia sp!, {r4, pc} -_020554C0: - cmp r4, #1 - moveq r0, #1 - ldmeqia sp!, {r4, pc} -_020554CC: - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_020554D4: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02055474 - - arm_func_start sub_020554D8 -sub_020554D8: ; 0x020554D8 - stmdb sp!, {r4, lr} - ldr r1, _02055524 ; =TEAM_MEMBER_TABLE_PTR - mov r4, r0 - mov r0, #0x44 - smulbb r0, r4, r0 - ldr r1, [r1] - ldrb r0, [r1, r0] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _0205551C - bl GetGameMode - cmp r0, #3 - cmpeq r4, #4 - moveq r0, #1 - ldmeqia sp!, {r4, pc} -_0205551C: - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_02055524: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_020554D8 - - arm_func_start IsMainCharacter -IsMainCharacter: ; 0x02055528 - stmdb sp!, {r4, lr} - ldr r1, _020555A4 ; =TEAM_MEMBER_TABLE_PTR - mov r4, r0 - mov r0, #0x44 - smulbb r0, r4, r0 - ldr r1, [r1] - ldrb r0, [r1, r0] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _0205559C - cmp r4, #5 - bge _0205559C - bl GetGameMode - cmp r0, #3 - bne _02055584 - cmp r4, #2 - cmpne r4, #3 - cmpne r4, #4 - beq _02055594 - mov r0, #0 - ldmia sp!, {r4, pc} -_02055584: - cmp r4, #0 - cmpne r4, #1 - movne r0, #0 - ldmneia sp!, {r4, pc} -_02055594: - mov r0, #1 - ldmia sp!, {r4, pc} -_0205559C: - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_020555A4: .word TEAM_MEMBER_TABLE_PTR - arm_func_end IsMainCharacter - - arm_func_start GetTeamMember -GetTeamMember: ; 0x020555A8 - mvn r1, #0 - cmp r0, r1 - moveq r0, #0 - bxeq lr - ldr r2, _020555CC ; =TEAM_MEMBER_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - bx lr - .align 2, 0 -_020555CC: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetTeamMember - - arm_func_start sub_020555D0 -sub_020555D0: ; 0x020555D0 - stmdb sp!, {r4, r5, r6, lr} - ldr r2, _02055648 ; =TEAM_MEMBER_TABLE_PTR - mov r5, #0 - ldr r2, [r2] - mov r6, #5 - add r4, r2, #0x154 - mov ip, r5 - mov lr, #1 - ldr r2, _0205564C ; =0x0000022B - b _02055638 -_020555F8: - ldrb r3, [r4] - tst r3, #1 - movne r3, lr - moveq r3, ip - tst r3, #0xff - beq _02055630 - ldrsh r3, [r4, #4] - cmp r3, r0 - bne _02055630 - cmp r5, r1 - moveq r0, r6, lsl #0x10 - moveq r0, r0, asr #0x10 - ldmeqia sp!, {r4, r5, r6, pc} - add r5, r5, #1 -_02055630: - add r6, r6, #1 - add r4, r4, #0x44 -_02055638: - cmp r6, r2 - blt _020555F8 - mvn r0, #0 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02055648: .word TEAM_MEMBER_TABLE_PTR -_0205564C: .word 0x0000022B - arm_func_end sub_020555D0 - - arm_func_start GetHeroMemberIdx -GetHeroMemberIdx: ; 0x02055650 - ldr r0, _02055678 ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - ldrb r0, [r0] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - movne r0, #0 - mvneq r0, #0 - bx lr - .align 2, 0 -_02055678: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetHeroMemberIdx - - arm_func_start GetPartnerMemberIdx -GetPartnerMemberIdx: ; 0x0205567C - ldr r0, _020556A4 ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x44] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - movne r0, #1 - mvneq r0, #0 - bx lr - .align 2, 0 -_020556A4: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetPartnerMemberIdx - - arm_func_start GetMainCharacter1MemberIdx -GetMainCharacter1MemberIdx: ; 0x020556A8 - stmdb sp!, {r3, lr} - bl GetGameMode - cmp r0, #3 - moveq r0, #2 - ldr r2, _020556E8 ; =TEAM_MEMBER_TABLE_PTR - movne r0, #0 - mov r1, #0x44 - smulbb r1, r0, r1 - ldr r2, [r2] - ldrb r1, [r2, r1] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - mvneq r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_020556E8: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetMainCharacter1MemberIdx - - arm_func_start GetMainCharacter2MemberIdx -GetMainCharacter2MemberIdx: ; 0x020556EC - stmdb sp!, {r3, lr} - bl GetGameMode - cmp r0, #3 - moveq r0, #3 - ldr r2, _0205572C ; =TEAM_MEMBER_TABLE_PTR - movne r0, #1 - mov r1, #0x44 - smulbb r1, r0, r1 - ldr r2, [r2] - ldrb r1, [r2, r1] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - mvneq r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0205572C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetMainCharacter2MemberIdx - - arm_func_start GetMainCharacter3MemberIdx -GetMainCharacter3MemberIdx: ; 0x02055730 - stmdb sp!, {r3, lr} - bl GetGameMode - cmp r0, #3 - mvnne r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _0205576C ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x110] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - movne r0, #4 - mvneq r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0205576C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetMainCharacter3MemberIdx - - arm_func_start GetHero -GetHero: ; 0x02055770 - ldr r0, _02055794 ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - moveq r0, #0 - bx lr - .align 2, 0 -_02055794: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetHero - - arm_func_start GetPartner -GetPartner: ; 0x02055798 - ldr r0, _020557C0 ; =TEAM_MEMBER_TABLE_PTR - ldr r1, [r0] - ldrb r0, [r1, #0x44] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - addne r0, r1, #0x44 - moveq r0, #0 - bx lr - .align 2, 0 -_020557C0: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetPartner - - arm_func_start GetMainCharacter1 -GetMainCharacter1: ; 0x020557C4 - stmdb sp!, {r3, lr} - bl GetGameMode - cmp r0, #3 - moveq r2, #2 - ldr r1, _02055808 ; =TEAM_MEMBER_TABLE_PTR - movne r2, #0 - mov r0, #0x44 - smulbb r2, r2, r0 - ldr r1, [r1] - ldrb r0, [r1, r2] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - addne r0, r1, r2 - moveq r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02055808: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetMainCharacter1 - - arm_func_start GetMainCharacter2 -GetMainCharacter2: ; 0x0205580C - stmdb sp!, {r3, lr} - bl GetGameMode - cmp r0, #3 - moveq r2, #3 - ldr r1, _02055850 ; =TEAM_MEMBER_TABLE_PTR - movne r2, #1 - mov r0, #0x44 - smulbb r2, r2, r0 - ldr r1, [r1] - ldrb r0, [r1, r2] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - addne r0, r1, r2 - moveq r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02055850: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetMainCharacter2 - - arm_func_start GetMainCharacter3 -GetMainCharacter3: ; 0x02055854 - stmdb sp!, {r3, lr} - bl GetGameMode - cmp r0, #3 - movne r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _02055890 ; =TEAM_MEMBER_TABLE_PTR - ldr r1, [r0] - ldrb r0, [r1, #0x110] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - addne r0, r1, #0x110 - moveq r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02055890: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetMainCharacter3 - - arm_func_start sub_02055894 -sub_02055894: ; 0x02055894 - ldr r1, _020558EC ; =TEAM_MEMBER_TABLE_PTR - mov r3, #0 - ldr r2, [r1] - ldr r1, _020558F0 ; =0x0000022B - b _020558DC -_020558A8: - cmp r2, r0 - bne _020558D4 - ldrb r0, [r2] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _020558E4 - mov r0, r3, lsl #0x10 - mov r0, r0, asr #0x10 - bx lr -_020558D4: - add r3, r3, #1 - add r2, r2, #0x44 -_020558DC: - cmp r3, r1 - blt _020558A8 -_020558E4: - mvn r0, #0 - bx lr - .align 2, 0 -_020558EC: .word TEAM_MEMBER_TABLE_PTR -_020558F0: .word 0x0000022B - arm_func_end sub_02055894 - - arm_func_start GetFirstMatchingMemberIdx -GetFirstMatchingMemberIdx: ; 0x020558F4 - stmdb sp!, {r4, lr} - ldr r1, _0205595C ; =TEAM_MEMBER_TABLE_PTR - mov r4, #5 - ldr r1, [r1] - mov r3, #0 - add lr, r1, #0x154 - mov ip, #1 - ldr r1, _02055960 ; =0x0000022B - b _0205594C -_02055918: - ldrb r2, [lr] - tst r2, #1 - movne r2, ip - moveq r2, r3 - tst r2, #0xff - beq _02055944 - ldrsh r2, [lr, #4] - cmp r2, r0 - moveq r0, r4, lsl #0x10 - moveq r0, r0, asr #0x10 - ldmeqia sp!, {r4, pc} -_02055944: - add r4, r4, #1 - add lr, lr, #0x44 -_0205594C: - cmp r4, r1 - blt _02055918 - mvn r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_0205595C: .word TEAM_MEMBER_TABLE_PTR -_02055960: .word 0x0000022B - arm_func_end GetFirstMatchingMemberIdx - - arm_func_start GetFirstEmptyMemberIdx -GetFirstEmptyMemberIdx: ; 0x02055964 - stmdb sp!, {r3, lr} - ldr r1, _020559CC ; =TEAM_MEMBER_TABLE_PTR - cmp r0, #0x214 - ldr r0, [r1] - ldreq lr, _020559D0 ; =0x0000022B - add r3, r0, #0x154 - ldrne r0, _020559D4 ; =_022B5788 - mov ip, #5 - ldrne lr, [r0] - mov r0, #0 - mov r1, #1 - b _020559BC -_02055994: - ldrb r2, [r3] - tst r2, #1 - movne r2, r1 - moveq r2, r0 - tst r2, #0xff - moveq r0, ip, lsl #0x10 - moveq r0, r0, asr #0x10 - ldmeqia sp!, {r3, pc} - add ip, ip, #1 - add r3, r3, #0x44 -_020559BC: - cmp ip, lr - blt _02055994 - mvn r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_020559CC: .word TEAM_MEMBER_TABLE_PTR -_020559D0: .word 0x0000022B -_020559D4: .word _022B5788 - arm_func_end GetFirstEmptyMemberIdx - - arm_func_start sub_020559D8 -sub_020559D8: ; 0x020559D8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r1, _02055B18 ; =TEAM_MEMBER_TABLE_PTR - mov r4, #0 - ldr lr, [r1] - mov r8, r0 - mov r2, r4 - mov r3, #1 - mvn r1, #0 -_020559F8: - ldrb r0, [lr] - add lr, lr, #0x44 - tst r0, #1 - movne r0, r3 - moveq r0, r2 - tst r0, #0xff - mov r0, r4, lsl #1 - strneh r4, [r8, r0] - add r4, r4, #1 - streqh r1, [r8, r0] - cmp r4, #5 - blt _020559F8 - mov r2, #0 - mov r3, #1 - ldr r0, _02055B1C ; =0x0000022B - b _02055B0C -_02055A38: - ldrb r1, [lr] - tst r1, #1 - movne r1, r3 - moveq r1, r2 - tst r1, #0xff - bne _02055AFC - mvn ip, #0 - mov r0, r4, lsl #1 - mov r7, lr - mov r6, r4 - strh ip, [r8, r0] - add lr, lr, #0x44 - add r4, r4, #1 - add sb, ip, #0x22c - b _02055AD4 -_02055A74: - ldrb r0, [lr] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02055AC4 - mov r5, r7 - mov fp, lr - add r7, r7, #0x44 - mov sl, #4 -_02055A9C: - ldmia fp!, {r0, r1, r2, r3} - stmia r5!, {r0, r1, r2, r3} - subs sl, sl, #1 - bne _02055A9C - ldr r0, [fp] - str r0, [r5] - mov r0, r4, lsl #1 - strh r6, [r8, r0] - add r6, r6, #1 - b _02055ACC -_02055AC4: - mov r0, r4, lsl #1 - strh ip, [r8, r0] -_02055ACC: - add r4, r4, #1 - add lr, lr, #0x44 -_02055AD4: - cmp r4, sb - blt _02055A74 - mov r1, #0 - ldr r0, _02055B1C ; =0x0000022B - b _02055AF0 -_02055AE8: - strb r1, [r7], #0x44 - add r6, r6, #1 -_02055AF0: - cmp r6, r0 - blt _02055AE8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_02055AFC: - mov r1, r4, lsl #1 - strh r4, [r8, r1] - add r4, r4, #1 - add lr, lr, #0x44 -_02055B0C: - cmp r4, r0 - blt _02055A38 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02055B18: .word TEAM_MEMBER_TABLE_PTR -_02055B1C: .word 0x0000022B - arm_func_end sub_020559D8 - - arm_func_start sub_02055B20 -sub_02055B20: ; 0x02055B20 - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _02055B74 ; =TEAM_MEMBER_TABLE_PTR - mov r1, #0x44 - smulbb r4, r0, r1 - cmp r0, #5 - ldr r5, [r2] - movlt r0, #0 - ldmltia sp!, {r3, r4, r5, pc} - ldrb r1, [r5, r4] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - bl sub_020564B0 - cmp r0, #0 - mov r0, #0 - streqb r0, [r5, r4] - moveq r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02055B74: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02055B20 - - arm_func_start sub_02055B78 -sub_02055B78: ; 0x02055B78 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x58 - ldr r4, _02055CC4 ; =TEAM_MEMBER_TABLE_PTR - mov lr, #1 - mov r6, r1 - mov r7, r0 - mov ip, #0 - ldr r4, [r4] - mov r1, #0x44 - mov r0, r6 - mov r5, r3 - strb lr, [sp, #0x14] - strb r2, [sp, #0x16] - strb ip, [sp, #0x17] - strb lr, [sp, #0x15] - smlabb r4, r7, r1, r4 - bl GetBaseHp - strh r0, [sp, #0x1e] - mov r0, r6 - mov r1, #0 - bl GetBaseOffensiveStat - strb r0, [sp, #0x20] - mov r0, r6 - mov r1, #1 - bl GetBaseOffensiveStat - strb r0, [sp, #0x21] - mov r0, r6 - mov r1, #0 - bl GetBaseDefensiveStat - strb r0, [sp, #0x22] - mov r0, r6 - mov r1, #1 - bl GetBaseDefensiveStat - strb r0, [sp, #0x23] - mov r0, #0 - mov r2, #1 - strb r0, [sp, #0x1a] - strb r0, [sp, #0x1b] - add r0, sp, #0x28 - mov r1, r6 - strh r2, [sp, #0x1c] - bl EnableAllLearnableIqSkills - mov r2, #0 - add r0, sp, #0x36 - mov r1, r6 - strh r6, [sp, #0x18] - str r2, [sp, #0x24] - strb r2, [sp, #0x34] - bl sub_02053F10 - cmp r5, #0 - beq _02055C58 - add r0, sp, #0x4e - mov r1, r5 - mov r2, #0xa - bl StrncpySimple - b _02055C74 -_02055C58: - add r0, sp, #0 - mov r1, r6 - bl GetNameRaw - add r0, sp, #0x4e - add r1, sp, #0 - mov r2, #0xa - bl StrncpyName -_02055C74: - add r6, sp, #0x14 - mov r5, #4 -_02055C7C: - ldmia r6!, {r0, r1, r2, r3} - stmia r4!, {r0, r1, r2, r3} - subs r5, r5, #1 - bne _02055C7C - ldr r0, [r6] - cmp r7, #0 - str r0, [r4] - cmpne r7, #2 - mov r0, r7 - bne _02055CAC - bl TryAddMonsterToActiveTeam - b _02055CB0 -_02055CAC: - bl sub_02056554 -_02055CB0: - ldr r0, _02055CC8 ; =_020A3350 - mov r1, r7 - bl Debug_Print0 - add sp, sp, #0x58 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02055CC4: .word TEAM_MEMBER_TABLE_PTR -_02055CC8: .word _020A3350 - arm_func_end sub_02055B78 - - arm_func_start sub_02055CCC -sub_02055CCC: ; 0x02055CCC - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - ldrsh r0, [r5, #4] - bl GetFirstEmptyMemberIdx - mov r4, r0 - mvn r0, #0 - cmp r4, r0 - beq _02055D38 - ldr r1, _02055D40 ; =TEAM_MEMBER_TABLE_PTR - mov r0, #0x44 - ldr r1, [r1] - mov r6, r5 - smlabb lr, r4, r0, r1 - mov ip, #4 -_02055D04: - ldmia r6!, {r0, r1, r2, r3} - stmia lr!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _02055D04 - ldr r0, [r6] - str r0, [lr] - ldrsh r0, [r5, #4] - bl SetPokemonJoined - ldrsh r0, [r5, #4] - cmp r0, #0x214 - ldreq r1, _02055D44 ; =0x0000022B - ldreq r0, _02055D48 ; =_022B5788 - streq r1, [r0] -_02055D38: - mov r0, r4 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02055D40: .word TEAM_MEMBER_TABLE_PTR -_02055D44: .word 0x0000022B -_02055D48: .word _022B5788 - arm_func_end sub_02055CCC - - arm_func_start sub_02055D4C -sub_02055D4C: ; 0x02055D4C - stmdb sp!, {r3, lr} - bl sub_02055CCC - mvn r1, #0 - cmp r0, r1 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - ldr r2, _02055D78 ; =TEAM_MEMBER_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldmia sp!, {r3, pc} - .align 2, 0 -_02055D78: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02055D4C - - arm_func_start sub_02055D7C -sub_02055D7C: ; 0x02055D7C - stmdb sp!, {r3, r4, r5, lr} - mvn r2, #0 - mov r5, r1 - cmp r0, r2 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r2, _02055DCC ; =TEAM_MEMBER_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - mov r4, r5 - smlabb lr, r0, r1, r2 - mov ip, #4 -_02055DA8: - ldmia r4!, {r0, r1, r2, r3} - stmia lr!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _02055DA8 - ldr r0, [r4] - str r0, [lr] - ldrsh r0, [r5, #4] - bl SetPokemonJoined - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02055DCC: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02055D7C - - arm_func_start sub_02055DD0 -sub_02055DD0: ; 0x02055DD0 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x4c - ldrb ip, [sp, #0x58] - mov r5, r0 - mov r4, r1 - mov lr, r2 - str r3, [sp] - add r0, sp, #8 - mov r1, r5 - mov r2, r4 - mov r3, lr - str ip, [sp, #4] - bl sub_02052CF4 - add r0, sp, #8 - bl sub_02055D4C - add sp, sp, #0x4c - ldmia sp!, {r4, r5, pc} - arm_func_end sub_02055DD0 - - arm_func_start sub_02055E14 -sub_02055E14: ; 0x02055E14 - stmdb sp!, {r4, r5, r6, lr} - mov r3, r1 - ldrb r1, [r3] - mov r4, r0 - add r0, r3, #0x14 - and r1, r1, #1 - strh r1, [r4] - ldrb r1, [r3, #1] - add r6, r4, #0x18 - add r5, r3, #0x22 - strb r1, [r4, #4] - ldrb r1, [r3, #2] - add lr, r4, #0x2a - mov ip, #0xc - strb r1, [r4, #5] - ldrb r1, [r3, #3] - strb r1, [r4, #6] - ldrsh r1, [r3, #4] - strh r1, [r4, #8] - ldrb r1, [r3, #6] - strb r1, [r4, #0xa] - ldrb r1, [r3, #7] - strb r1, [r4, #0xb] - ldrsh r1, [r3, #8] - strh r1, [r4, #0xc] - ldrsh r1, [r3, #0xa] - strh r1, [r4, #0xe] - ldrb r1, [r3, #0xc] - strb r1, [r4, #0x10] - ldrb r1, [r3, #0xd] - strb r1, [r4, #0x11] - ldrb r1, [r3, #0xe] - strb r1, [r4, #0x12] - ldrb r1, [r3, #0xf] - strb r1, [r4, #0x13] - ldmia r0, {r0, r1, r2} - stmia r6, {r0, r1, r2} - ldr r0, [r3, #0x10] - str r0, [r4, #0x14] - ldrb r0, [r3, #0x20] - strb r0, [r4, #0x24] -_02055EB8: - ldrh r0, [r5], #2 - subs ip, ip, #1 - strh r0, [lr], #2 - bne _02055EB8 - add r0, r4, #0x42 - add r1, r3, #0x3a - mov r2, #0xa - bl StrncpySimple - mov r2, #0 - mov r1, r2 -_02055EE0: - add r0, r4, r2 - add r2, r2, #1 - strb r1, [r0, #2] - cmp r2, #2 - blt _02055EE0 - strb r1, [r4, #0x25] - strh r1, [r4, #0x26] - strh r1, [r4, #0x28] - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_02055E14 - - arm_func_start sub_02055F04 -sub_02055F04: ; 0x02055F04 - stmdb sp!, {r4, r5, r6, lr} - mov r3, r1 - ldrh r1, [r3] - mov ip, r0 - add r0, r3, #0x18 - and r1, r1, #1 - strb r1, [ip] - ldrb r1, [r3, #4] - add r6, ip, #0x14 - add r5, r3, #0x2a - strb r1, [ip, #1] - ldrb r1, [r3, #5] - add r4, ip, #0x22 - mov lr, #0xc - strb r1, [ip, #2] - ldrb r1, [r3, #6] - strb r1, [ip, #3] - ldrsh r1, [r3, #8] - strh r1, [ip, #4] - ldrb r1, [r3, #0xa] - strb r1, [ip, #6] - ldrb r1, [r3, #0xb] - strb r1, [ip, #7] - ldrsh r1, [r3, #0xc] - strh r1, [ip, #8] - ldrsh r1, [r3, #0xe] - strh r1, [ip, #0xa] - ldrb r1, [r3, #0x10] - strb r1, [ip, #0xc] - ldrb r1, [r3, #0x11] - strb r1, [ip, #0xd] - ldrb r1, [r3, #0x12] - strb r1, [ip, #0xe] - ldrb r1, [r3, #0x13] - strb r1, [ip, #0xf] - ldmia r0, {r0, r1, r2} - stmia r6, {r0, r1, r2} - ldr r0, [r3, #0x14] - str r0, [ip, #0x10] - ldrb r0, [r3, #0x24] - strb r0, [ip, #0x20] -_02055FA8: - ldrh r0, [r5], #2 - subs lr, lr, #1 - strh r0, [r4], #2 - bne _02055FA8 - add r0, ip, #0x3a - add r1, r3, #0x42 - mov r2, #0xa - bl StrncpySimple - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_02055F04 - - arm_func_start sub_02055FCC -sub_02055FCC: ; 0x02055FCC - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl IsValidTeamMember - cmp r0, #0 - beq _02056068 - mov r0, r4 - bl GetItemMoveId16 - mov r4, r0 - mov r0, r5 - bl GetTeamMember - mov lr, #0 - mov r3, lr - mov ip, #1 - mov r2, #6 - b _02056040 -_0205600C: - smlabb r5, lr, r2, r0 - ldrb r1, [r5, #0x22] - tst r1, #1 - movne r1, ip - moveq r1, r3 - tst r1, #0xff - beq _02056034 - ldrh r1, [r5, #0x24] - cmp r4, r1 - beq _02056048 -_02056034: - add r1, lr, #1 - mov r1, r1, lsl #0x10 - mov lr, r1, asr #0x10 -_02056040: - cmp lr, #4 - blt _0205600C -_02056048: - cmp lr, #4 - blt _02056068 - ldrsh r1, [r0, #4] - mov r0, r4 - bl sub_02053D1C - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, pc} -_02056068: - mov r0, #0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02055FCC - - arm_func_start IsMonsterNotNicknamed -IsMonsterNotNicknamed: ; 0x02056070 - ldr ip, _02056080 ; =StrcmpMonsterName - ldrsh r1, [r0, #4] - add r0, r0, #0x3a - bx ip - .align 2, 0 -_02056080: .word StrcmpMonsterName - arm_func_end IsMonsterNotNicknamed - - arm_func_start sub_02056084 -sub_02056084: ; 0x02056084 - ldr ip, _02056090 ; =sub_02054F44 - add r1, r1, #0x3a - bx ip - .align 2, 0 -_02056090: .word sub_02054F44 - arm_func_end sub_02056084 - - arm_func_start sub_02056094 -sub_02056094: ; 0x02056094 - ldr ip, _020560A0 ; =sub_02054FA0 - add r1, r1, #0x3a - bx ip - .align 2, 0 -_020560A0: .word sub_02054FA0 - arm_func_end sub_02056094 - - arm_func_start sub_020560A4 -sub_020560A4: ; 0x020560A4 - cmp r0, r1 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end sub_020560A4 - - arm_func_start sub_020560B8 -sub_020560B8: ; 0x020560B8 - ldr ip, _020560C4 ; =SetActiveTeam - mov r0, #0 - bx ip - .align 2, 0 -_020560C4: .word SetActiveTeam - arm_func_end sub_020560B8 - - arm_func_start RemoveActiveMembersFromAllTeams -RemoveActiveMembersFromAllTeams: ; 0x020560C8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov lr, #0 - ldr r7, _02056154 ; =TEAM_MEMBER_TABLE_PTR - mov r1, lr - mvn r0, #0 - mov r2, lr - mov r4, #0x68 - mov r6, #0x1a0 -_020560E8: - mul ip, lr, r6 - mov r3, r2 -_020560F0: - ldr r5, [r7] - add r5, ip, r5 - mla r5, r3, r4, r5 - add r5, r5, #0x9000 - strb r1, [r5, #0x36c] - ldr r5, [r7] - add r5, r5, lr, lsl #3 - add r5, r5, r3, lsl #1 - add r5, r5, #0x9800 - add r3, r3, #1 - strh r0, [r5, #0x56] - cmp r3, #4 - blt _020560F0 - ldr r3, [r7] - add r3, r3, lr, lsl #1 - add r3, r3, #0x9800 - strh r0, [r3, #0x50] - ldr r3, [r7] - add r3, r3, lr - add r3, r3, #0x9000 - add lr, lr, #1 - strb r1, [r3, #0x874] - cmp lr, #3 - blt _020560E8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02056154: .word TEAM_MEMBER_TABLE_PTR - arm_func_end RemoveActiveMembersFromAllTeams - - arm_func_start RemoveActiveMembersFromSpecialEpisodeTeam -RemoveActiveMembersFromSpecialEpisodeTeam: ; 0x02056158 - stmdb sp!, {r3, lr} - mov lr, #0 - ldr r3, _020561BC ; =TEAM_MEMBER_TABLE_PTR - mov r0, lr - mvn ip, #0 - mov r1, #0x68 -_02056170: - ldr r2, [r3] - mla r2, lr, r1, r2 - add r2, r2, #0x9000 - strb r0, [r2, #0x50c] - ldr r2, [r3] - add r2, r2, lr, lsl #1 - add r2, r2, #0x9800 - add lr, lr, #1 - strh ip, [r2, #0x5e] - cmp lr, #4 - blt _02056170 - ldr r2, _020561BC ; =TEAM_MEMBER_TABLE_PTR - ldr r1, [r2] - add r1, r1, #0x9800 - strh ip, [r1, #0x52] - ldr r1, [r2] - add r1, r1, #0x9000 - strb r0, [r1, #0x875] - ldmia sp!, {r3, pc} - .align 2, 0 -_020561BC: .word TEAM_MEMBER_TABLE_PTR - arm_func_end RemoveActiveMembersFromSpecialEpisodeTeam - - arm_func_start RemoveActiveMembersFromRescueTeam -RemoveActiveMembersFromRescueTeam: ; 0x020561C0 - stmdb sp!, {r3, lr} - mov lr, #0 - ldr r3, _02056224 ; =TEAM_MEMBER_TABLE_PTR - mov r0, lr - mvn ip, #0 - mov r1, #0x68 -_020561D8: - ldr r2, [r3] - mla r2, lr, r1, r2 - add r2, r2, #0x9000 - strb r0, [r2, #0x6ac] - ldr r2, [r3] - add r2, r2, lr, lsl #1 - add r2, r2, #0x9800 - add lr, lr, #1 - strh ip, [r2, #0x66] - cmp lr, #4 - blt _020561D8 - ldr r2, _02056224 ; =TEAM_MEMBER_TABLE_PTR - ldr r1, [r2] - add r1, r1, #0x9800 - strh ip, [r1, #0x54] - ldr r1, [r2] - add r1, r1, #0x9000 - strb r0, [r1, #0x876] - ldmia sp!, {r3, pc} - .align 2, 0 -_02056224: .word TEAM_MEMBER_TABLE_PTR - arm_func_end RemoveActiveMembersFromRescueTeam - - arm_func_start sub_02056228 -sub_02056228: ; 0x02056228 - ldr r1, _0205625C ; =0x000055AA - cmp r0, r1 - moveq r0, #1 - bxeq lr - ldr r1, _02056260 ; =0x00005AA5 - cmp r0, r1 - moveq r0, #1 - bxeq lr - cmp r0, #0 - movlt r0, #1 - movge r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_0205625C: .word 0x000055AA -_02056260: .word 0x00005AA5 - arm_func_end sub_02056228 - - arm_func_start CheckTeamMemberIdx -CheckTeamMemberIdx: ; 0x02056264 - ldr r1, _0205628C ; =0x000055AA - cmp r0, r1 - moveq r0, #1 - bxeq lr - ldr r1, _02056290 ; =0x00005AA5 - cmp r0, r1 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_0205628C: .word 0x000055AA -_02056290: .word 0x00005AA5 - arm_func_end CheckTeamMemberIdx - - arm_func_start IsMonsterIdInNormalRange -IsMonsterIdInNormalRange: ; 0x02056294 - cmp r0, #0 - blt _020562AC - ldr r1, _020562B4 ; =0x0000022B - cmp r0, r1 - movlt r0, #1 - bxlt lr -_020562AC: - mov r0, #0 - bx lr - .align 2, 0 -_020562B4: .word 0x0000022B - arm_func_end IsMonsterIdInNormalRange - - arm_func_start sub_020562B8 -sub_020562B8: ; 0x020562B8 - cmp r0, #0 - movlt r0, #1 - movge r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end sub_020562B8 - - arm_func_start SetActiveTeam -SetActiveTeam: ; 0x020562CC - ldr r3, _02056314 ; =TEAM_MEMBER_TABLE_PTR - mov r2, #0x1a0 - ldr r1, [r3] - add r1, r1, #0x9000 - strb r0, [r1, #0x877] - ldr ip, [r3] - add r1, ip, #0x36c - add r1, r1, #0x9000 - mla r2, r0, r2, r1 - add r1, ip, #0x9000 - str r2, [r1, #0x84c] - ldr r2, [r3] - add r1, r2, #0x56 - add r1, r1, #0x9800 - add r1, r1, r0, lsl #3 - add r0, r2, #0x9000 - str r1, [r0, #0x870] - bx lr - .align 2, 0 -_02056314: .word TEAM_MEMBER_TABLE_PTR - arm_func_end SetActiveTeam - - arm_func_start sub_02056318 -sub_02056318: ; 0x02056318 - ldr r1, _02056338 ; =TEAM_MEMBER_TABLE_PTR - ldr r2, [r1] - add r1, r2, #0x9000 - ldrb r1, [r1, #0x877] - add r1, r2, r1 - add r1, r1, #0x9000 - strb r0, [r1, #0x874] - bx lr - .align 2, 0 -_02056338: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056318 - - arm_func_start sub_0205633C -sub_0205633C: ; 0x0205633C - ldr r0, _0205635C ; =TEAM_MEMBER_TABLE_PTR - ldr r1, [r0] - add r0, r1, #0x9000 - ldrb r0, [r0, #0x877] - add r0, r1, r0 - add r0, r0, #0x9000 - ldrb r0, [r0, #0x874] - bx lr - .align 2, 0 -_0205635C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_0205633C - - arm_func_start sub_02056360 -sub_02056360: ; 0x02056360 - ldr r0, _02056388 ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - add r0, r0, #0x9000 - ldrb r1, [r0, #0x874] - cmp r1, #0 - ldreqb r0, [r0, #0x875] - cmpeq r0, #0 - movne r0, #1 - moveq r0, #0 - bx lr - .align 2, 0 -_02056388: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056360 - - arm_func_start GetActiveTeamMember -GetActiveTeamMember: ; 0x0205638C - mvn r1, #0 - cmp r0, r1 - moveq r0, #0 - bxeq lr - ldr r1, _020563B8 ; =TEAM_MEMBER_TABLE_PTR - mov r2, #0x68 - ldr r1, [r1] - add r1, r1, #0x9000 - ldr r1, [r1, #0x84c] - smlabb r0, r0, r2, r1 - bx lr - .align 2, 0 -_020563B8: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetActiveTeamMember - - arm_func_start GetActiveRosterIndex -GetActiveRosterIndex: ; 0x020563BC - mvn r1, #0 - cmp r0, r1 - beq _02056404 - ldr r1, _0205640C ; =TEAM_MEMBER_TABLE_PTR - mov ip, #0 - ldr r1, [r1] - add r1, r1, #0x9000 - b _020563FC -_020563DC: - ldr r3, [r1, #0x870] - mov r2, ip, lsl #1 - ldrsh r2, [r3, r2] - cmp r0, r2 - moveq r0, ip, lsl #0x10 - moveq r0, r0, asr #0x10 - bxeq lr - add ip, ip, #1 -_020563FC: - cmp ip, #4 - blt _020563DC -_02056404: - mvn r0, #0 - bx lr - .align 2, 0 -_0205640C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetActiveRosterIndex - - arm_func_start sub_02056410 -sub_02056410: ; 0x02056410 - mvn r1, #0 - cmp r0, r1 - beq _02056454 - ldr r1, _0205645C ; =TEAM_MEMBER_TABLE_PTR - mov ip, #0 - ldr r1, [r1] - add r1, r1, #0x9000 - b _0205644C -_02056430: - ldr r3, [r1, #0x870] - mov r2, ip, lsl #1 - ldrsh r2, [r3, r2] - cmp r0, r2 - moveq r0, #1 - bxeq lr - add ip, ip, #1 -_0205644C: - cmp ip, #4 - blt _02056430 -_02056454: - mov r0, #0 - bx lr - .align 2, 0 -_0205645C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056410 - - arm_func_start sub_02056460 -sub_02056460: ; 0x02056460 - mvn r2, #0 - cmp r0, r2 - beq _020564A4 - ldr r2, _020564AC ; =TEAM_MEMBER_TABLE_PTR - mov r3, #0 - ldr r2, [r2] - add r2, r2, r1, lsl #3 - b _0205649C -_02056480: - add r1, r2, r3, lsl #1 - add r1, r1, #0x9800 - ldrsh r1, [r1, #0x56] - cmp r0, r1 - moveq r0, #1 - bxeq lr - add r3, r3, #1 -_0205649C: - cmp r3, #4 - blt _02056480 -_020564A4: - mov r0, #0 - bx lr - .align 2, 0 -_020564AC: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056460 - - arm_func_start sub_020564B0 -sub_020564B0: ; 0x020564B0 - mvn r3, #0 - cmp r0, r3 - beq _020564F8 - ldr r1, _02056500 ; =TEAM_MEMBER_TABLE_PTR - ldr ip, [r1] - add r1, ip, #0x9000 - ldrb r2, [r1, #0x877] - add r2, ip, r2, lsl #1 - add r2, r2, #0x9800 - ldrsh ip, [r2, #0x50] - cmp ip, r3 - beq _020564F8 - ldr r2, [r1, #0x870] - mov r1, ip, lsl #1 - ldrsh r1, [r2, r1] - cmp r0, r1 - moveq r0, #1 - bxeq lr -_020564F8: - mov r0, #0 - bx lr - .align 2, 0 -_02056500: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_020564B0 - - arm_func_start sub_02056504 -sub_02056504: ; 0x02056504 - mvn r3, #0 - cmp r0, r3 - beq _02056548 - ldr r2, _02056550 ; =TEAM_MEMBER_TABLE_PTR - ldr ip, [r2] - add r2, ip, r1, lsl #1 - add r2, r2, #0x9800 - ldrsh r2, [r2, #0x50] - cmp r2, r3 - beq _02056548 - add r1, ip, r1, lsl #3 - add r1, r1, r2, lsl #1 - add r1, r1, #0x9800 - ldrsh r1, [r1, #0x56] - cmp r0, r1 - moveq r0, #1 - bxeq lr -_02056548: - mov r0, #0 - bx lr - .align 2, 0 -_02056550: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056504 - - arm_func_start sub_02056554 -sub_02056554: ; 0x02056554 - stmdb sp!, {r4, lr} - mvn r1, #0 - cmp r0, r1 - beq _020565E8 - ldr r1, _020565F0 ; =TEAM_MEMBER_TABLE_PTR - mov ip, #0 - ldr lr, [r1] - add r1, lr, #0x9000 - b _02056598 -_02056578: - ldr r3, [r1, #0x870] - mov r2, ip, lsl #1 - ldrsh r2, [r3, r2] - cmp r0, r2 - moveq r0, ip, lsl #0x10 - moveq r0, r0, asr #0x10 - ldmeqia sp!, {r4, pc} - add ip, ip, #1 -_02056598: - cmp ip, #4 - blt _02056578 - mov r4, #0 - add r1, lr, #0x9000 - mvn r2, #0 - b _020565E0 -_020565B0: - ldr r3, [r1, #0x870] - mov ip, r4, lsl #1 - ldrsh r3, [r3, ip] - cmp r3, r2 - bne _020565DC - add r1, lr, #0x9000 - ldr r2, [r1, #0x870] - mov r1, r4, lsl #0x10 - strh r0, [r2, ip] - mov r0, r1, asr #0x10 - ldmia sp!, {r4, pc} -_020565DC: - add r4, r4, #1 -_020565E0: - cmp r4, #4 - blt _020565B0 -_020565E8: - mvn r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_020565F0: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056554 - - arm_func_start sub_020565F4 -sub_020565F4: ; 0x020565F4 - stmdb sp!, {r4, lr} - mvn r2, #0 - cmp r0, r2 - beq _0205668C - ldr r2, _02056694 ; =TEAM_MEMBER_TABLE_PTR - mov ip, #0 - ldr lr, [r2] - add r3, lr, r1, lsl #3 - b _02056638 -_02056618: - add r2, r3, ip, lsl #1 - add r2, r2, #0x9800 - ldrsh r2, [r2, #0x56] - cmp r0, r2 - moveq r0, ip, lsl #0x10 - moveq r0, r0, asr #0x10 - ldmeqia sp!, {r4, pc} - add ip, ip, #1 -_02056638: - cmp ip, #4 - blt _02056618 - mov r4, #0 - add ip, lr, r1, lsl #3 - mvn r3, #0 - b _02056684 -_02056650: - add r2, ip, r4, lsl #1 - add r2, r2, #0x9800 - ldrsh r2, [r2, #0x56] - cmp r2, r3 - bne _02056680 - add r1, lr, r1, lsl #3 - add r1, r1, r4, lsl #1 - add r1, r1, #0x9800 - mov r2, r4, lsl #0x10 - strh r0, [r1, #0x56] - mov r0, r2, asr #0x10 - ldmia sp!, {r4, pc} -_02056680: - add r4, r4, #1 -_02056684: - cmp r4, #4 - blt _02056650 -_0205668C: - mvn r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_02056694: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_020565F4 - - arm_func_start sub_02056698 -sub_02056698: ; 0x02056698 - mvn r2, #0 - cmp r1, r2 - bxeq lr - ldr r2, _020566C0 ; =TEAM_MEMBER_TABLE_PTR - mov r3, r0, lsl #1 - ldr r0, [r2] - add r0, r0, #0x9000 - ldr r0, [r0, #0x870] - strh r1, [r0, r3] - bx lr - .align 2, 0 -_020566C0: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056698 - - arm_func_start sub_020566C4 -sub_020566C4: ; 0x020566C4 - stmdb sp!, {r3, lr} - mvn r1, #0 - cmp r0, r1 - beq _02056748 - ldr r2, _02056750 ; =TEAM_MEMBER_TABLE_PTR - mov r1, #0 - ldr lr, [r2] - add r2, lr, #0x9000 - b _02056740 -_020566E8: - ldr r3, [r2, #0x870] - mov ip, r1, lsl #1 - ldrsh r3, [r3, ip] - cmp r0, r3 - bne _0205673C - add r0, lr, #0x9000 - ldr r2, [r0, #0x870] - mvn r3, #0 - ldr r0, _02056750 ; =TEAM_MEMBER_TABLE_PTR - strh r3, [r2, ip] - ldr r2, [r0] - add r0, r2, #0x9000 - ldrb r0, [r0, #0x877] - add r0, r2, r0, lsl #1 - add r0, r0, #0x9800 - ldrsh r2, [r0, #0x50] - cmp r1, r2 - streqh r3, [r0, #0x50] - mov r0, r1, lsl #0x10 - mov r0, r0, asr #0x10 - ldmia sp!, {r3, pc} -_0205673C: - add r1, r1, #1 -_02056740: - cmp r1, #4 - blt _020566E8 -_02056748: - mvn r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02056750: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_020566C4 - - arm_func_start TryAddMonsterToActiveTeam -TryAddMonsterToActiveTeam: ; 0x02056754 - stmdb sp!, {r4, lr} - mvn r1, #0 - cmp r0, r1 - beq _02056824 - ldr r1, _0205682C ; =TEAM_MEMBER_TABLE_PTR - mov ip, #0 - ldr lr, [r1] - add r1, lr, #0x9000 - b _020567B8 -_02056778: - ldr r3, [r1, #0x870] - mov r2, ip, lsl #1 - ldrsh r2, [r3, r2] - cmp r0, r2 - bne _020567B4 - ldr r1, _0205682C ; =TEAM_MEMBER_TABLE_PTR - mov r0, ip, lsl #0x10 - ldr r2, [r1] - mov r0, r0, asr #0x10 - add r1, r2, #0x9000 - ldrb r1, [r1, #0x877] - add r1, r2, r1, lsl #1 - add r1, r1, #0x9800 - strh r0, [r1, #0x50] - ldmia sp!, {r4, pc} -_020567B4: - add ip, ip, #1 -_020567B8: - cmp ip, #4 - blt _02056778 - mov r4, #0 - add r1, lr, #0x9000 - mvn r2, #0 - b _0205681C -_020567D0: - ldr r3, [r1, #0x870] - mov ip, r4, lsl #1 - ldrsh r3, [r3, ip] - cmp r3, r2 - bne _02056818 - add r1, lr, #0x9000 - ldr r2, [r1, #0x870] - ldr r1, _0205682C ; =TEAM_MEMBER_TABLE_PTR - strh r0, [r2, ip] - ldr r2, [r1] - mov r0, r4, lsl #0x10 - add r1, r2, #0x9000 - ldrb r1, [r1, #0x877] - mov r0, r0, asr #0x10 - add r1, r2, r1, lsl #1 - add r1, r1, #0x9800 - strh r0, [r1, #0x50] - ldmia sp!, {r4, pc} -_02056818: - add r4, r4, #1 -_0205681C: - cmp r4, #4 - blt _020567D0 -_02056824: - mvn r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_0205682C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end TryAddMonsterToActiveTeam - - arm_func_start sub_02056830 -sub_02056830: ; 0x02056830 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, #0 - mov r6, r7 - mov r4, r7 - mov r5, #1 -_02056844: - mov r0, r6 - bl GetActiveTeamMember - ldrb r0, [r0] - tst r0, #1 - movne r0, r5 - moveq r0, r4 - tst r0, #0xff - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 - addeq r7, r7, #1 - cmp r6, #4 - blt _02056844 - mov r0, r7 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end sub_02056830 - - arm_func_start sub_02056880 -sub_02056880: ; 0x02056880 - ldr r0, _020568A0 ; =TEAM_MEMBER_TABLE_PTR - ldr r1, [r0] - add r0, r1, #0x9000 - ldrb r0, [r0, #0x877] - add r0, r1, r0, lsl #1 - add r0, r0, #0x9800 - ldrsh r0, [r0, #0x50] - bx lr - .align 2, 0 -_020568A0: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056880 - - arm_func_start sub_020568A4 -sub_020568A4: ; 0x020568A4 - ldr r1, _020568D8 ; =TEAM_MEMBER_TABLE_PTR - mvn r0, #0 - ldr r3, [r1] - add r1, r3, #0x9000 - ldrb r2, [r1, #0x877] - add r2, r3, r2, lsl #1 - add r2, r2, #0x9800 - ldrsh r2, [r2, #0x50] - cmp r2, r0 - ldrne r1, [r1, #0x870] - movne r0, r2, lsl #1 - ldrnesh r0, [r1, r0] - bx lr - .align 2, 0 -_020568D8: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_020568A4 - - arm_func_start sub_020568DC -sub_020568DC: ; 0x020568DC - ldr r1, _02056910 ; =TEAM_MEMBER_TABLE_PTR - mvn r3, #0 - ldr r2, [r1] - add r1, r2, r0, lsl #1 - add r1, r1, #0x9800 - ldrsh r1, [r1, #0x50] - cmp r1, r3 - addne r0, r2, r0, lsl #3 - addne r0, r0, r1, lsl #1 - addne r0, r0, #0x9800 - ldrnesh r3, [r0, #0x56] - mov r0, r3 - bx lr - .align 2, 0 -_02056910: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_020568DC - - arm_func_start sub_02056914 -sub_02056914: ; 0x02056914 - ldr r0, _0205695C ; =TEAM_MEMBER_TABLE_PTR - mvn r2, #0 - ldr ip, [r0] - add r0, ip, #0x9000 - ldrb r1, [r0, #0x877] - add r1, ip, r1, lsl #1 - add r1, r1, #0x9800 - ldrsh r3, [r1, #0x50] - cmp r3, r2 - ldrne r1, [r0, #0x870] - movne r0, r3, lsl #1 - ldrnesh r1, [r1, r0] - cmpne r1, r2 - moveq r0, #0 - bxeq lr - mov r0, #0x44 - smlabb r0, r1, r0, ip - bx lr - .align 2, 0 -_0205695C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056914 - - arm_func_start RemoveActiveMembersFromMainTeam -RemoveActiveMembersFromMainTeam: ; 0x02056960 - stmdb sp!, {r3, r4, r5, lr} - mov r0, #0 - ldr r2, _020569C8 ; =TEAM_MEMBER_TABLE_PTR - mov r5, r0 - mvn ip, #0 - mov r3, #1 -_02056978: - ldr r1, [r2] - mov lr, r5, lsl #1 - add r1, r1, #0x9000 - ldr r4, [r1, #0x870] - add r5, r5, #1 - ldrsh r1, [r4, lr] - cmp r1, ip - movne r0, r3 - strneh ip, [r4, lr] - cmp r5, #4 - blt _02056978 - ldr r1, _020569C8 ; =TEAM_MEMBER_TABLE_PTR - mvn r2, #0 - ldr r3, [r1] - add r1, r3, #0x9000 - ldrb r1, [r1, #0x877] - add r1, r3, r1, lsl #1 - add r1, r1, #0x9800 - strh r2, [r1, #0x50] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020569C8: .word TEAM_MEMBER_TABLE_PTR - arm_func_end RemoveActiveMembersFromMainTeam - - arm_func_start SetTeamSetupHeroAndPartnerOnly -SetTeamSetupHeroAndPartnerOnly: ; 0x020569CC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - bl GetMainCharacter1MemberIdx - mov r5, r0 - bl GetMainCharacter2MemberIdx - mov r6, r0 - bl GetMainCharacter3MemberIdx -#ifdef JAPAN - mov sl, #0 - ldr r1, _02056AAC ; =TEAM_MEMBER_TABLE_PTR - mov r7, r0 - ldr r0, [r1] - mov fp, sl - add r0, r0, #0x9000 - ldr sb, [r0, #0x84c] -#else - mov r8, #0 - ldr r1, _02056AAC ; =TEAM_MEMBER_TABLE_PTR - mov r7, r0 - ldr r1, [r1] - mov sl, r8 - add r0, r1, #0x9000 - ldr sb, [r0, #0x84c] - mov fp, r8 -#endif - mov r4, #1 -_02056A08: - ldrb r0, [sb] - tst r0, #1 - movne r0, r4 - moveq r0, fp - tst r0, #0xff - ldrnesh r0, [sb, #8] - cmpne r0, r5 - cmpne r0, r6 - cmpne r0, r7 - beq _02056A40 - mov r0, sl, lsl #0x10 - mov r0, r0, asr #0x10 - mov r8, #1 - bl sub_02058138 -_02056A40: - add sl, sl, #1 - cmp sl, #4 - add sb, sb, #0x68 - blt _02056A08 - bl RemoveActiveMembersFromMainTeam - mvn r0, #0 - cmp r5, r0 - beq _02056A68 - mov r0, r5 - bl TryAddMonsterToActiveTeam -_02056A68: - mvn r0, #0 - cmp r6, r0 - beq _02056A7C - mov r0, r6 - bl sub_02056554 -_02056A7C: - mvn r0, #0 - cmp r7, r0 - beq _02056A90 - mov r0, r7 - bl sub_02056554 -_02056A90: - ldr r0, _02056AAC ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - add r0, r0, #0x9000 - ldrb r0, [r0, #0x877] - bl sub_02057464 - mov r0, r8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02056AAC: .word TEAM_MEMBER_TABLE_PTR - arm_func_end SetTeamSetupHeroAndPartnerOnly - - arm_func_start SetTeamSetupHeroOnly -SetTeamSetupHeroOnly: ; 0x02056AB0 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - bl sub_020568A4 - ldr r1, _02056B54 ; =TEAM_MEMBER_TABLE_PTR - mov r7, r0 -#ifdef JAPAN - ldr r0, [r1] - mov sl, #0 - add r0, r0, #0x9000 - mov r6, #1 - ldr sb, [r0, #0x84c] - mov r5, sl -#else - mov r8, #0 - ldr r1, [r1] - mov r6, #1 - add r0, r1, #0x9000 - ldr sb, [r0, #0x84c] - mov sl, r8 - mov r5, r8 -#endif - mov r4, r6 -_02056AE0: - ldrb r0, [sb] - tst r0, #1 - movne r0, r6 - moveq r0, r5 - tst r0, #0xff - ldrnesh r0, [sb, #8] - cmpne r0, r7 - beq _02056B10 - mov r0, sl, lsl #0x10 - mov r0, r0, asr #0x10 - mov r8, r4 - bl sub_02058138 -_02056B10: - add sl, sl, #1 - cmp sl, #4 - add sb, sb, #0x68 - blt _02056AE0 - bl RemoveActiveMembersFromMainTeam - mvn r0, #0 - cmp r7, r0 - beq _02056B38 - mov r0, r7 - bl TryAddMonsterToActiveTeam -_02056B38: - ldr r0, _02056B54 ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - add r0, r0, #0x9000 - ldrb r0, [r0, #0x877] - bl sub_02057464 - mov r0, r8 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02056B54: .word TEAM_MEMBER_TABLE_PTR - arm_func_end SetTeamSetupHeroOnly - - arm_func_start sub_02056B58 -sub_02056B58: ; 0x02056B58 - stmdb sp!, {r3, lr} - ldr r2, _02056BD0 ; =TEAM_MEMBER_TABLE_PTR - ldr ip, [r2] - add r0, ip, #0x9000 - ldrb r3, [r0, #0x877] - cmp r3, #2 - ldmneia sp!, {r3, pc} - add r0, ip, #0x9800 - ldrsh r1, [r0, #0x50] - add r0, ip, r3, lsl #1 - add r0, r0, #0x9800 - strh r1, [r0, #0x50] - mov lr, #0 -_02056B8C: - ldr r1, [r2] - mov ip, lr, lsl #1 - add r0, r1, lr, lsl #1 - add r0, r0, #0x9800 - add r1, r1, #0x9000 - ldrsh r3, [r0, #0x56] - ldr r0, [r1, #0x870] - add lr, lr, #1 - strh r3, [r0, ip] - cmp lr, #4 - blt _02056B8C - ldr r0, _02056BD0 ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - add r0, r0, #0x9000 - ldrb r0, [r0, #0x877] - bl sub_02057464 - ldmia sp!, {r3, pc} - .align 2, 0 -_02056BD0: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056B58 - - arm_func_start sub_02056BD4 -sub_02056BD4: ; 0x02056BD4 - stmdb sp!, {r3, lr} - ldr r0, _02056C1C ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - add r0, r0, #0x9000 - ldrb r0, [r0, #0x877] - cmp r0, #2 - ldmneia sp!, {r3, pc} - bl RemoveActiveMembersFromMainTeam - bl GetHeroMemberIdx - bl TryAddMonsterToActiveTeam - bl GetPartnerMemberIdx - bl sub_02056554 - ldr r0, _02056C1C ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - add r0, r0, #0x9000 - ldrb r0, [r0, #0x877] - bl sub_02057464 - ldmia sp!, {r3, pc} - .align 2, 0 -_02056C1C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056BD4 - - arm_func_start GetPartyMembers -GetPartyMembers: ; 0x02056C20 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #8 - mov r5, r0 - bl sub_020568A4 - mov r6, r0 - bl GetMainCharacter1MemberIdx - mov r7, r0 - bl GetMainCharacter2MemberIdx - mov r8, r0 - bl GetMainCharacter3MemberIdx - mov sb, r0 - cmp r5, #0 - mvn r0, #0 - addeq r5, sp, #0 - cmp r6, r0 - mov r4, #0 - mvn r0, #0 - strneh r6, [r5] - addne r4, r4, #1 - cmp r7, r0 - beq _02056C90 - mov r0, r7 - bl sub_02056410 - cmp r0, #0 - cmpne r7, r6 - movne r0, r4, lsl #1 - strneh r7, [r5, r0] - addne r4, r4, #1 -_02056C90: - mvn r0, #0 - cmp r8, r0 - beq _02056CB8 - mov r0, r8 - bl sub_02056410 - cmp r0, #0 - cmpne r8, r6 - movne r0, r4, lsl #1 - strneh r8, [r5, r0] - addne r4, r4, #1 -_02056CB8: - mvn r0, #0 - cmp sb, r0 - beq _02056CE0 - mov r0, sb - bl sub_02056410 - cmp r0, #0 - cmpne sb, r6 - movne r0, r4, lsl #1 - strneh sb, [r5, r0] - addne r4, r4, #1 -_02056CE0: - ldr r0, _02056D6C ; =TEAM_MEMBER_TABLE_PTR - mov r8, #0 - ldr r0, [r0] - mov r6, r8 - add r0, r0, #0x9000 - ldr sb, [r0, #0x84c] - mov r7, #1 - b _02056D58 -_02056D00: - ldrb r0, [sb] - tst r0, #2 - movne r0, r7 - moveq r0, r6 - tst r0, #0xff - beq _02056D50 - ldrsh sl, [sb, #8] - mov r0, sl - bl sub_020564B0 - cmp r0, #0 - bne _02056D50 - mov r0, sl - bl IsMainCharacter - cmp r0, #0 - bne _02056D50 - mov r0, r4, lsl #1 - add r4, r4, #1 - strh sl, [r5, r0] - cmp r4, #4 - bge _02056D60 -_02056D50: - add r8, r8, #1 - add sb, sb, #0x68 -_02056D58: - cmp r8, #4 - blt _02056D00 -_02056D60: - mov r0, r4 - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02056D6C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetPartyMembers - - arm_func_start sub_02056D70 -sub_02056D70: ; 0x02056D70 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #8 - movs sl, r0 - ldr r0, _02056E00 ; =TEAM_MEMBER_TABLE_PTR - mov r6, #0 - ldr r0, [r0] - mov sb, #0 - add r0, r0, #0x9000 - ldr r7, [r0, #0x84c] - addeq sl, sp, #0 - mov r4, r6 - mov r5, #1 -_02056DA0: - ldrb r0, [r7] - tst r0, #2 - movne r0, r5 - moveq r0, r4 - tst r0, #0xff - beq _02056DE4 - ldrsh r8, [r7, #8] - mov r0, r8 - bl IsMonsterIdInNormalRange - cmp r0, #0 - beq _02056DE4 - mov r0, r8 - bl sub_020564B0 - cmp r0, #0 - moveq r0, sb, lsl #1 - streqh r8, [sl, r0] - addeq sb, sb, #1 -_02056DE4: - add r6, r6, #1 - cmp r6, #4 - add r7, r7, #0x68 - blt _02056DA0 - mov r0, sb - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02056E00: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056D70 - - arm_func_start sub_02056E04 -sub_02056E04: ; 0x02056E04 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #8 - movs sl, r0 - ldr r0, _02056EB4 ; =TEAM_MEMBER_TABLE_PTR - mov r6, #0 - ldr r0, [r0] - mov sb, #0 - add r0, r0, #0x9000 - ldr r7, [r0, #0x84c] - addeq sl, sp, #0 - mov r4, r6 - mov r5, #1 -_02056E34: - ldrb r0, [r7] - tst r0, #2 - movne r0, r5 - moveq r0, r4 - tst r0, #0xff - beq _02056E98 - ldrsh r8, [r7, #8] - mov r0, r8 - bl IsMonsterIdInNormalRange - cmp r0, #0 - beq _02056E98 - mov r0, r8 - bl sub_02055410 - cmp r0, #0 - bne _02056E98 - mov r0, r8 - bl sub_02055474 - cmp r0, #0 - bne _02056E98 - mov r0, r8 - bl sub_020554D8 - cmp r0, #0 - moveq r0, sb, lsl #1 - streqh r8, [sl, r0] - addeq sb, sb, #1 -_02056E98: - add r6, r6, #1 - cmp r6, #4 - add r7, r7, #0x68 - blt _02056E34 - mov r0, sb - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02056EB4: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056E04 - - arm_func_start sub_02056EB8 -sub_02056EB8: ; 0x02056EB8 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - ldr r1, _02056F5C ; =TEAM_MEMBER_TABLE_PTR - mov r5, #0 - ldr r1, [r1] - mov r8, r0 - add r0, r1, #0x9000 - ldr r4, [r0, #0x84c] - mov r6, r5 - mov r7, r5 - mov sb, r5 - mov sl, #1 -_02056EE4: - ldrb r0, [r4] - tst r0, #1 - movne r0, sl - moveq r0, sb - tst r0, #0xff - beq _02056F1C - ldrsh r0, [r4, #8] - bl sub_02056410 - cmp r0, #0 - beq _02056F1C - ldrsh r0, [r4, #0xc] - bl GetBodySize - add r6, r6, r0 - add r5, r5, #1 -_02056F1C: - add r7, r7, #1 - cmp r7, #4 - add r4, r4, #0x68 - blt _02056EE4 - cmp r5, #4 - movge r0, #0 - ldmgeia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - cmp r8, #0 - beq _02056F4C - mov r0, r8 - bl GetBodySize - add r6, r6, r0 -_02056F4C: - cmp r6, #6 - movgt r0, #0 - movle r0, #1 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02056F5C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056EB8 - - arm_func_start sub_02056F60 -sub_02056F60: ; 0x02056F60 - stmdb sp!, {r3, lr} - mvn r1, #0 - cmp r0, r1 - beq _02057000 - ldr r1, _0205700C ; =TEAM_MEMBER_TABLE_PTR - ldr r3, [r1] - add r1, r3, #0x9000 - ldrb r1, [r1, #0x877] - cmp r1, #0 - bne _02056FB8 - mov r2, #0 - b _02056FAC -_02056F90: - add r1, r3, r2, lsl #1 - add r1, r1, #0x9800 - ldrsh r1, [r1, #0x5e] - cmp r0, r1 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - add r2, r2, #1 -_02056FAC: - cmp r2, #4 - blt _02056F90 - b _02056FEC -_02056FB8: - cmp r1, #1 - bne _02056FEC - mov r2, #0 - b _02056FE4 -_02056FC8: - add r1, r3, r2, lsl #1 - add r1, r1, #0x9800 - ldrsh r1, [r1, #0x56] - cmp r0, r1 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - add r2, r2, #1 -_02056FE4: - cmp r2, #4 - blt _02056FC8 -_02056FEC: - mov r1, #0x44 - smlabb r0, r0, r1, r3 - ldrsh r0, [r0, #4] - bl sub_02056EB8 - ldmia sp!, {r3, pc} -_02057000: - mov r0, #0 - bl sub_02056EB8 - ldmia sp!, {r3, pc} - .align 2, 0 -_0205700C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02056F60 - - arm_func_start sub_02057010 -sub_02057010: ; 0x02057010 - ldr r1, _02057028 ; =TEAM_MEMBER_TABLE_PTR - ldr ip, _0205702C ; =sub_02057030 - ldr r1, [r1] - add r1, r1, #0x9000 - ldrb r1, [r1, #0x877] - bx ip - .align 2, 0 -_02057028: .word TEAM_MEMBER_TABLE_PTR -_0205702C: .word sub_02057030 - arm_func_end sub_02057010 - - arm_func_start sub_02057030 -sub_02057030: ; 0x02057030 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - mov sb, r1 - mov sl, r0 - mov r0, sb - bl sub_020568DC - mov r4, r0 - cmp sl, #0 - mvn r0, #0 - addeq sl, sp, #0 - mov r8, #0 - cmp r4, r0 - beq _0205707C - mov r0, r4 - bl IsValidTeamMember - cmp r0, #0 - strneh r4, [sl] - addne r8, r8, #1 - mvneq r4, #0 -_0205707C: - mov r7, #0 - mvn fp, #0 -_02057084: - ldr r0, _0205717C ; =TEAM_MEMBER_TABLE_PTR - ldr r2, [r0] - add r0, r2, sb, lsl #3 - add r0, r0, r7, lsl #1 - add r0, r0, #0x9800 - ldrsh r5, [r0, #0x56] - cmp r5, fp - cmpne r4, r5 - beq _020570F8 - mov r1, #0x44 - mov r0, r5 - smlabb r6, r5, r1, r2 - bl sub_02055410 - cmp r0, #0 - bne _020570EC - mov r0, r5 - bl sub_02055474 - cmp r0, #0 - bne _020570EC - mov r0, r5 - bl sub_020554D8 - cmp r0, #0 - bne _020570EC - ldrsh r0, [r6, #4] - cmp r0, #0x214 - bne _020570F8 -_020570EC: - mov r0, r8, lsl #1 - strh r5, [sl, r0] - add r8, r8, #1 -_020570F8: - add r7, r7, #1 - cmp r7, #4 - blt _02057084 - mov r0, #0 - ldr r3, _0205717C ; =TEAM_MEMBER_TABLE_PTR - mov r4, r0 - mvn r2, #0 -_02057114: - ldr r1, [r3] - add r1, r1, sb, lsl #3 - add r1, r1, r0, lsl #1 - add r1, r1, #0x9800 - ldrsh r6, [r1, #0x56] - cmp r6, r2 - beq _02057164 - mov r5, r4 - b _0205714C -_02057138: - mov r1, r5, lsl #1 - ldrsh r1, [sl, r1] - cmp r6, r1 - beq _02057154 - add r5, r5, #1 -_0205714C: - cmp r5, r8 - blt _02057138 -_02057154: - cmp r5, r8 - movge r1, r8, lsl #1 - strgeh r6, [sl, r1] - addge r8, r8, #1 -_02057164: - add r0, r0, #1 - cmp r0, #4 - blt _02057114 - mov r0, r8 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0205717C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02057030 - - arm_func_start sub_02057180 -sub_02057180: ; 0x02057180 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x58 - sub sp, sp, #0x400 - add r0, sp, #0 - bl sub_020559D8 - mov r8, #0 - ldr fp, _020572E0 ; =_020A3398 - ldr r5, _020572E4 ; =TEAM_MEMBER_TABLE_PTR - add r6, sp, #0 - mov r7, r8 - mvn r4, #0 -_020571AC: - mov sb, r7 -_020571B0: - ldr r0, [r5] - add r0, r0, r8, lsl #3 - add r0, r0, sb, lsl #1 - add r0, r0, #0x9800 - ldrsh sl, [r0, #0x56] - cmp sl, r4 - beq _02057200 - mov r0, sl, lsl #1 - ldrsh r3, [r6, r0] - mov r0, fp - mov r1, r8 - mov r2, sl - bl Debug_Print0 - ldr r0, [r5] - mov r1, sl, lsl #1 - add r0, r0, r8, lsl #3 - add r0, r0, sb, lsl #1 - ldrsh r1, [r6, r1] - add r0, r0, #0x9800 - strh r1, [r0, #0x56] -_02057200: - add sb, sb, #1 - cmp sb, #4 - blt _020571B0 - add r8, r8, #1 - cmp r8, #3 - blt _020571AC - mov sb, #0 -_0205721C: - ldr r0, _020572E4 ; =TEAM_MEMBER_TABLE_PTR - mov sl, #0 - ldr r0, [r0] - mov r1, #0x1a0 - add r0, r0, #0x36c - add r0, r0, #0x9000 - mla r8, sb, r1, r0 - mov fp, #1 - add r7, sp, #0 - mov r5, sl - mov r6, sl - mvn r4, #0 -_0205724C: - ldrb r0, [r8] - tst r0, #1 - movne r0, fp - moveq r0, #0 - tst r0, #0xff - beq _020572B0 - ldrsh r2, [r8, #8] - ldr r0, _020572E8 ; =_020A33B8 - mov r1, sb - mov r3, r2, lsl #1 - ldrsh r3, [r7, r3] - bl Debug_Print0 - ldrsh r0, [r8, #8] - mov r1, r0, lsl #1 - ldrsh r1, [r7, r1] - cmp r1, r4 - streqb r6, [r8] - beq _020572B0 - bl IsMonsterIdInNormalRange - cmp r0, #0 - ldrnesh r0, [r8, #8] - movne r0, r0, lsl #1 - ldrnesh r0, [r7, r0] - strneh r0, [r8, #8] - streqb r5, [r8] -_020572B0: - add sl, sl, #1 - cmp sl, #4 - add r8, r8, #0x68 - blt _0205724C - and r0, sb, #0xff - bl sub_02057464 - add sb, sb, #1 - cmp sb, #3 - blt _0205721C - add sp, sp, #0x58 - add sp, sp, #0x400 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_020572E0: .word _020A3398 -_020572E4: .word TEAM_MEMBER_TABLE_PTR -_020572E8: .word _020A33B8 - arm_func_end sub_02057180 - - arm_func_start sub_020572EC -sub_020572EC: ; 0x020572EC - ldr r0, _02057304 ; =TEAM_MEMBER_TABLE_PTR - ldr ip, _02057308 ; =sub_0205730C - ldr r0, [r0] - add r0, r0, #0x9000 - ldrb r0, [r0, #0x877] - bx ip - .align 2, 0 -_02057304: .word TEAM_MEMBER_TABLE_PTR -_02057308: .word sub_0205730C - arm_func_end sub_020572EC - - arm_func_start sub_0205730C -sub_0205730C: ; 0x0205730C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r1, _0205739C ; =TEAM_MEMBER_TABLE_PTR - mov r4, r0 - ldr r0, [r1] - mov r8, #0 - add r0, r0, #0x36c - mov r1, #0x1a0 - add r0, r0, #0x9000 - mla r7, r4, r1, r0 - mov r5, r8 - mov r6, #1 -_02057338: - ldrb r0, [r7] - tst r0, #1 - movne r0, r6 - moveq r0, r5 - tst r0, #0xff - beq _02057388 - ldrsh r0, [r7, #8] - bl IsMonsterIdInNormalRange - cmp r0, #0 - beq _02057388 - ldrsh r0, [r7, #8] - bl IsValidTeamMember - cmp r0, #0 - beq _02057388 - ldrsh r1, [r7, #8] - mov r2, r8, lsl #0x10 - mov r0, r7 - mov r3, r4 - mov r2, r2, asr #0x10 - bl sub_02053174 -_02057388: - add r8, r8, #1 - cmp r8, #4 - add r7, r7, #0x68 - blt _02057338 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0205739C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_0205730C - - arm_func_start sub_020573A0 -sub_020573A0: ; 0x020573A0 - ldr r0, _020573B8 ; =TEAM_MEMBER_TABLE_PTR - ldr ip, _020573BC ; =sub_020573C0 - ldr r0, [r0] - add r0, r0, #0x9000 - ldrb r0, [r0, #0x877] - bx ip - .align 2, 0 -_020573B8: .word TEAM_MEMBER_TABLE_PTR -_020573BC: .word sub_020573C0 - arm_func_end sub_020573A0 - - arm_func_start sub_020573C0 -sub_020573C0: ; 0x020573C0 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r1, _02057440 ; =TEAM_MEMBER_TABLE_PTR - mov r4, #0 - ldr r1, [r1] - mov r2, #0x1a0 - add r1, r1, #0x36c - add r1, r1, #0x9000 - mla r7, r0, r2, r1 - mov r5, r4 - mov r6, #1 -_020573E8: - ldrb r0, [r7] - tst r0, #1 - movne r0, r6 - moveq r0, r5 - tst r0, #0xff - beq _0205742C - ldrsh r0, [r7, #8] - bl IsMonsterIdInNormalRange - cmp r0, #0 - beq _0205742C - ldrsh r0, [r7, #8] - bl IsValidTeamMember - cmp r0, #0 - beq _0205742C - ldrsh r0, [r7, #8] - mov r1, r7 - bl sub_0205349C -_0205742C: - add r4, r4, #1 - cmp r4, #4 - add r7, r7, #0x68 - blt _020573E8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02057440: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_020573C0 - - arm_func_start sub_02057444 -sub_02057444: ; 0x02057444 - ldr r0, _0205745C ; =TEAM_MEMBER_TABLE_PTR - ldr ip, _02057460 ; =sub_02057464 - ldr r0, [r0] - add r0, r0, #0x9000 - ldrb r0, [r0, #0x877] - bx ip - .align 2, 0 -_0205745C: .word TEAM_MEMBER_TABLE_PTR -_02057460: .word sub_02057464 - arm_func_end sub_02057444 - - arm_func_start sub_02057464 -sub_02057464: ; 0x02057464 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x8c - ldr r1, _020577B4 ; =TEAM_MEMBER_TABLE_PTR - mov sl, #0 - ldr r2, [r1] - mov r5, r0 - add r0, r2, r5, lsl #1 - add r0, r0, #0x9800 - ldrsh r1, [r0, #0x50] - mvn r4, #0 - mov fp, sl - cmp r1, r4 - addne r0, r2, r5, lsl #3 - addne r0, r0, r1, lsl #1 - addne r0, r0, #0x9800 - ldrnesh r4, [r0, #0x56] - add r0, r2, #0x36c - add r1, r0, #0x9000 - mov r0, #0x1a0 - mla sb, r5, r0, r1 - mov r6, #1 - add r7, sp, #0x1c - mvn r8, #0 -_020574C0: - ldrb r0, [sb] - mov r1, sl, lsl #1 - strh r8, [r7, r1] - tst r0, #1 - movne r0, r6 - moveq r0, fp - tst r0, #0xff - beq _02057514 - ldrsh r0, [sb, #8] - bl IsMonsterIdInNormalRange - cmp r0, #0 - beq _02057514 - ldrsh r0, [sb, #8] - bl IsValidTeamMember - cmp r0, #0 - ldrnesh r1, [sb, #8] - movne r0, sl, lsl #1 - strneh r1, [r7, r0] - bne _02057514 - ldrsh r0, [sb, #8] - bl sub_020566C4 -_02057514: - add sl, sl, #1 - cmp sl, #4 - add sb, sb, #0x68 - blt _020574C0 - add r0, sp, #0x14 - mov r1, r5 - bl sub_02057030 - str r0, [sp, #0xc] - ldr r0, _020577B8 ; =_020A33D4 - ldr r2, [sp, #0xc] - mov r1, r5 - bl Debug_Print0 - mov r0, #0x1a0 - ldr r1, _020577B4 ; =TEAM_MEMBER_TABLE_PTR - mov r7, #0 - mul r2, r5, r0 - ldr r1, [r1] - mov sl, r7 - add r0, r1, #0x36c - add r0, r0, #0x9000 - add r8, r0, r2 - add r0, r1, r2 - str r0, [sp, #8] - b _0205767C -_02057574: - add r0, sp, #0x14 - mov r1, sl, lsl #1 - ldrsh r0, [r0, r1] - mov sb, r8 - mov r6, #0 - str r0, [sp] - mov r0, r0 - cmp r4, r0 - moveq r0, sl, lsl #0x10 - moveq r7, r0, asr #0x10 - add r2, sp, #0x1c - b _020575C0 -_020575A4: - mov r0, r6, lsl #1 - ldrsh r1, [r2, r0] - ldr r0, [sp] - cmp r1, r0 - beq _020575C8 - add r6, r6, #1 - add sb, sb, #0x68 -_020575C0: - cmp r6, #4 - blt _020575A4 -_020575C8: - cmp r6, #4 - bge _02057678 - cmp sl, r6 - beq _02057678 - ldr r0, [sp, #8] - mov r1, #0x68 - mla r0, sl, r1, r0 - str r0, [sp, #4] - add r0, r0, #0x36c - add ip, sp, #0x24 - add lr, r0, #0x9000 - mov fp, #6 -_020575F8: - subs fp, fp, #1 - ldmia lr!, {r0, r1, r2, r3} - stmia ip!, {r0, r1, r2, r3} - bne _020575F8 - ldr r0, [sp, #4] - add r2, r0, #0x36c - ldmia lr, {r0, r1} - stmia ip, {r0, r1} - mov ip, sb - add fp, r2, #0x9000 - mov lr, #6 -_02057624: - ldmia ip!, {r0, r1, r2, r3} - stmia fp!, {r0, r1, r2, r3} - subs lr, lr, #1 - bne _02057624 - ldmia ip, {r0, r1} - stmia fp, {r0, r1} - add fp, sp, #0x24 - mov ip, #6 -_02057644: - ldmia fp!, {r0, r1, r2, r3} - stmia sb!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _02057644 - add r3, sp, #0x1c - mov ip, sl, lsl #1 - ldrsh r2, [r3, ip] - mov r6, r6, lsl #1 - ldmia fp, {r0, r1} - stmia sb, {r0, r1} - ldr r0, [sp] - strh r2, [r3, r6] - strh r0, [r3, ip] -_02057678: - add sl, sl, #1 -_0205767C: - ldr r0, [sp, #0xc] - cmp sl, r0 - blt _02057574 - mov r1, #0 - mov sl, r1 - add r0, sp, #0x10 -_02057694: - strb sl, [r0, r1] - add r1, r1, #1 - cmp r1, #4 - blt _02057694 - add sb, sp, #0x14 - add r6, sp, #0x1c - add r4, sp, #0x10 - mov fp, #1 - b _0205774C -_020576B8: - ldr r0, _020577B4 ; =TEAM_MEMBER_TABLE_PTR - ldr r1, [r0] - mov r0, sl, lsl #1 - add r1, r1, r5, lsl #3 - add r1, r1, sl, lsl #1 - ldrsh r3, [sb, r0] - add r1, r1, #0x9800 - ldrsh r2, [r6, r0] - strh r3, [r1, #0x56] - ldrsh r1, [sb, r0] - cmp r2, r1 - beq _020576FC - mov r0, r8 - mov r2, sl, lsl #0x10 - mov r2, r2, asr #0x10 - bl sub_020530D4 - b _02057724 -_020576FC: - ldrb r0, [r8, #0x3e] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - addne r1, sl, #1 - ldrneb r0, [r8, #0x3f] - andne r1, r1, #0xff - strneb r1, [r4, r0] - strneb r1, [r8, #0x3f] -_02057724: - strh sl, [r8, #0xa] - ldrb r0, [r8] - cmp r7, sl - add sl, sl, #1 - orr r0, r0, #2 - strb r0, [r8] - streqb fp, [r8, #1] - movne r0, #0 - strneb r0, [r8, #1] - add r8, r8, #0x68 -_0205774C: - ldr r0, [sp, #0xc] - cmp sl, r0 - blt _020576B8 - mvn r3, #0 - mov r2, #0 - ldr r1, _020577B4 ; =TEAM_MEMBER_TABLE_PTR - b _02057784 -_02057768: - ldr r0, [r1] - add r0, r0, r5, lsl #3 - add r0, r0, sl, lsl #1 - add r0, r0, #0x9800 - strh r3, [r0, #0x56] - strb r2, [r8], #0x68 - add sl, sl, #1 -_02057784: - cmp sl, #4 - blt _02057768 - ldr r1, _020577B4 ; =TEAM_MEMBER_TABLE_PTR - add r0, sp, #0x10 - ldr r2, [r1] - mov r1, r5 - add r2, r2, r5, lsl #1 - add r2, r2, #0x9800 - strh r7, [r2, #0x50] - bl sub_0200FA0C - add sp, sp, #0x8c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_020577B4: .word TEAM_MEMBER_TABLE_PTR -_020577B8: .word _020A33D4 - arm_func_end sub_02057464 - - arm_func_start sub_020577BC -sub_020577BC: ; 0x020577BC - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x4c - mov sl, r0 - ldr r0, _02057A24 ; =_020A340C - bl Debug_Print0 - cmp sl, #0xff - beq _02057904 - mov r0, sl - bl IsLevelResetDungeon - cmp r0, #0 - beq _020578E0 - ldr r4, _02057A28 ; =TEAM_MEMBER_TABLE_PTR - ldr r0, _02057A2C ; =_020A336C - ldr r3, [r4] - ldrb r2, [r0] - ldrb r1, [r0, #1] - add r0, r3, #0x9000 - ldr r8, [r0, #0x84c] - strb r2, [sp, #4] - strb r1, [sp, #5] - mov sb, #0 - and r7, r2, #0xff - and r6, r1, #0xff - add r5, sp, #0x1c - mov fp, #0x44 -_02057820: - ldrb r0, [r8] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _020578D0 - strb r7, [sp, #6] - strb r6, [sp, #7] - mov r0, #0 - str r0, [sp] - ldrsh r1, [r8, #8] - ldr ip, [r4] - add r0, sp, #8 - smlabb r1, r1, fp, ip - ldrsh r1, [r1, #4] - mov r2, #0 - add r3, sp, #6 - bl sub_02052E2C - ldrb r0, [sp, #9] - add r3, r8, #0x4c - strb r0, [r8, #2] - ldrsh r0, [sp, #0x10] - strh r0, [r8, #6] - ldrsh r0, [sp, #0x12] - strh r0, [r8, #0xe] - ldrsh r0, [sp, #0x12] - strh r0, [r8, #0x10] - ldrb r0, [sp, #0x14] - strb r0, [r8, #0x12] - ldrb r0, [sp, #0x15] - strb r0, [r8, #0x13] - ldrb r0, [sp, #0x16] - strb r0, [r8, #0x14] - ldrb r0, [sp, #0x17] - strb r0, [r8, #0x15] - ldr r0, [sp, #0x18] - str r0, [r8, #0x18] - ldmia r5, {r0, r1, r2} - stmia r3, {r0, r1, r2} - ldrb r2, [sp, #0x28] - add r0, r8, #0x1c - add r1, sp, #0x2a - strb r2, [r8, #0x58] - bl GroundToDungeonMoveset -_020578D0: - add sb, sb, #1 - cmp sb, #4 - add r8, r8, #0x68 - blt _02057820 -_020578E0: - ldr r0, _02057A28 ; =TEAM_MEMBER_TABLE_PTR - mov r2, sb, lsl #1 - ldr r1, [r0] - ldr r0, _02057A30 ; =_020A343C - add r1, r1, #0x9000 - ldr r3, [r1, #0x870] - mov r1, sb - ldrsh r2, [r3, r2] - bl Debug_Print0 -_02057904: - ldr r0, _02057A34 ; =_020A344C - bl Debug_Print0 - mov r0, sl - bl GetMaxMembersAllowed - mov r8, #0 - ldr r1, _02057A28 ; =TEAM_MEMBER_TABLE_PTR - mov r6, #1 - ldr r1, [r1] - mov r7, r0 - add r0, r1, #0x9000 - ldr sl, [r0, #0x84c] - mov sb, r8 - mov fp, sl - mov r5, r8 - mov r3, r8 - mov r4, r6 - mov r0, r8 - mov r1, r6 - b _020579A4 -_02057950: - ldrb r2, [fp] - tst r2, #1 - movne ip, r6 - moveq ip, r5 - tst ip, #0xff - beq _0205799C - tst r2, #2 - movne r2, r4 - moveq r2, r3 - tst r2, #0xff - beq _0205799C - ldrb r2, [fp, #1] - cmp r2, #0 - movne r2, r1 - moveq r2, r0 - tst r2, #0xff - movne r0, sb, lsl #0x10 - movne r8, r0, asr #0x10 - bne _020579AC -_0205799C: - add sb, sb, #1 - add fp, fp, #0x68 -_020579A4: - cmp sb, #4 - blt _02057950 -_020579AC: - mov sb, #0 - mov r6, #1 - mov fp, sb - mov r5, r6 - mov r4, sb -_020579C0: - ldrb r0, [sl] - tst r0, #1 - movne r1, r5 - moveq r1, fp - tst r1, #0xff - beq _02057A08 - tst r0, #2 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - cmpne r8, sb - beq _02057A08 - cmp r6, r7 - addlt r6, r6, #1 - blt _02057A08 - strb r4, [sl] - ldrsh r0, [sl, #8] - bl sub_020566C4 -_02057A08: - add sb, sb, #1 - cmp sb, #4 - add sl, sl, #0x68 - blt _020579C0 - bl sub_02058064 - add sp, sp, #0x4c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02057A24: .word _020A340C -_02057A28: .word TEAM_MEMBER_TABLE_PTR -_02057A2C: .word _020A336C -_02057A30: .word _020A343C -_02057A34: .word _020A344C - arm_func_end sub_020577BC - - arm_func_start sub_02057A38 -sub_02057A38: ; 0x02057A38 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r0 - mvn r0, #0 - cmp r6, r0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - bl sub_020568A4 - ldr r1, _02057AC0 ; =TEAM_MEMBER_TABLE_PTR - mov r2, #0x68 - ldr r1, [r1] - mov r4, r6, lsl #1 - add r1, r1, #0x9000 - ldr r5, [r1, #0x870] - ldr r3, [r1, #0x84c] - ldrsh r4, [r5, r4] - sub r1, r2, #0x69 - mla r5, r6, r2, r3 - mov r7, r0 - cmp r4, r1 - beq _02057AB4 - mov r0, r5 - mov r1, r4 - mov r2, r6 - bl sub_020530D4 - strh r6, [r5, #0xa] - ldrb r0, [r5] - cmp r4, r7 - orr r0, r0, #2 - strb r0, [r5] - moveq r0, #1 - streqb r0, [r5, #1] - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02057AB4: - mov r0, #0 - strb r0, [r5] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02057AC0: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02057A38 - - arm_func_start sub_02057AC4 -sub_02057AC4: ; 0x02057AC4 - stmdb sp!, {r4, lr} - mov r4, #0 -_02057ACC: - mov r0, r4 - bl sub_02057A38 - add r0, r4, #1 - mov r0, r0, lsl #0x10 - mov r4, r0, asr #0x10 - cmp r4, #4 - blt _02057ACC - ldmia sp!, {r4, pc} - arm_func_end sub_02057AC4 - - arm_func_start sub_02057AEC -sub_02057AEC: ; 0x02057AEC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r4, r0 - bl IsLevelResetDungeon - cmp r4, #0xff - moveq sl, #0 - beq _02057B10 - mov r0, r4 - bl IsLevelResetDungeon - mov sl, r0 -_02057B10: - bl GetGameMode - cmp r0, #5 - movne r0, #1 - moveq r0, #0 - and r7, r0, #0xff - bl sub_02057C40 - bl RemoveActiveMembersFromMainTeam - mov sb, #0 - ldr r0, _02057C3C ; =TEAM_MEMBER_TABLE_PTR - mov r6, #1 - ldr r0, [r0] - mov r5, sb - add r0, r0, #0x9000 - ldr r8, [r0, #0x84c] - mov fp, sb - mov r4, r6 -_02057B50: - ldrb r0, [r8] - tst r0, #1 - movne r0, r6 - moveq r0, r5 - tst r0, #0xff - beq _02057C14 - ldrsh r0, [r8, #8] - bl CheckTeamMemberIdx - cmp r0, #0 - bne _02057C14 - ldrsh r0, [r8, #0xc] - bl GetBaseFormCastformCherrimDeoxys - strh r0, [r8, #0xc] - ldrsh r0, [r8, #8] - bl IsMonsterIdInNormalRange - cmp r0, #0 - beq _02057C14 - ldrb r0, [r8, #1] - cmp r0, #0 - movne r0, r4 - moveq r0, fp - tst r0, #0xff - ldrsh r0, [r8, #8] - beq _02057BB8 - bl TryAddMonsterToActiveTeam - b _02057BBC -_02057BB8: - bl sub_02056554 -_02057BBC: - cmp sl, #0 - beq _02057BE8 - mov r0, sb, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02058138 - mov r2, sb, lsl #0x10 - ldrsh r1, [r8, #8] - mov r0, r8 - mov r2, r2, asr #0x10 - bl sub_020530D4 - b _02057C14 -_02057BE8: - cmp r7, #0 - beq _02057C00 - ldrsh r0, [r8, #8] - mov r1, r8 - bl sub_0205349C - b _02057C14 -_02057C00: - ldrsh r1, [r8, #8] - mov r2, sb, lsl #0x10 - mov r0, r8 - mov r2, r2, asr #0x10 - bl sub_020530D4 -_02057C14: - add sb, sb, #1 - cmp sb, #4 - add r8, r8, #0x68 - blt _02057B50 - ldr r0, _02057C3C ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - add r0, r0, #0x9000 - ldrb r0, [r0, #0x877] - bl sub_02057464 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02057C3C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02057AEC - - arm_func_start sub_02057C40 -sub_02057C40: ; 0x02057C40 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r0, _02057CE4 ; =TEAM_MEMBER_TABLE_PTR - mov sb, #0 - ldr r0, [r0] - mov r7, #1 - add r0, r0, #0x9000 - ldr r8, [r0, #0x84c] - mov r6, sb - mov r4, sb - mov r5, r7 -_02057C68: - ldrb r0, [r8] - tst r0, #1 - movne r0, r7 - moveq r0, r6 - tst r0, #0xff - beq _02057CC8 - ldrb r0, [r8, #0x3e] - tst r0, #1 - movne r0, r5 - moveq r0, r4 - tst r0, #0xff - beq _02057CC8 - ldrb r0, [r8, #0x3e] - bic r0, r0, #8 - strb r0, [r8, #0x3e] - ldrsh r0, [r8, #0x42] - cmp r0, #0xb7 - bne _02057CC8 - add r0, r8, #0x3e - bl sub_0200D8AC - bl AddMoneyCarried - mov r0, sb, lsl #0x10 - mov r0, r0, asr #0x10 - bl sub_02058138 -_02057CC8: - add sb, sb, #1 - cmp sb, #4 - add r8, r8, #0x68 - blt _02057C68 - bl CleanStickyItemsInBag - bl RemovePokeItemsInBag - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02057CE4: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02057C40 - - arm_func_start sub_02057CE8 -sub_02057CE8: ; 0x02057CE8 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, #0 - mov r7, #1 - mov r6, r8 - mov r4, r8 - mov r5, r7 -_02057D00: - mov r0, r8 - bl GetActiveTeamMember - ldrb r1, [r0] - tst r1, #1 - movne r1, r7 - moveq r1, r6 - tst r1, #0xff - beq _02057D40 - ldrb r1, [r0, #0x3e] - tst r1, #1 - movne r1, r5 - moveq r1, r4 - tst r1, #0xff - ldrneb r1, [r0, #0x3e] - bicne r1, r1, #8 - strneb r1, [r0, #0x3e] -_02057D40: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 - cmp r8, #4 - blt _02057D00 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - arm_func_end sub_02057CE8 - - arm_func_start RefillTeam -RefillTeam: ; 0x02057D58 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r0, _02057DF8 ; =TEAM_MEMBER_TABLE_PTR - mov r5, #0 - ldr r0, [r0] - add r0, r0, #0x9000 - ldr r4, [r0, #0x84c] -_02057D70: - ldrb r0, [r4] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02057DE4 - ldrsh r1, [r4, #0x10] - mov r0, r4 - strh r1, [r4, #0xe] - bl sub_02058810 - mov r6, #0 - add r7, r4, #0x1c - mov r8, r6 - mov sb, #1 -_02057DA8: - add r0, r4, r6, lsl #3 - ldrb r0, [r0, #0x1c] - tst r0, #1 - movne r0, sb - moveq r0, r8 - tst r0, #0xff - beq _02057DD4 - add r0, r7, r6, lsl #3 - bl GetMaxPp - add r1, r4, r6, lsl #3 - strb r0, [r1, #0x22] -_02057DD4: - add r6, r6, #1 - cmp r6, #4 - blt _02057DA8 - strh r5, [r4, #0xa] -_02057DE4: - add r5, r5, #1 - cmp r5, #4 - add r4, r4, #0x68 - blt _02057D70 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02057DF8: .word TEAM_MEMBER_TABLE_PTR - arm_func_end RefillTeam - -#ifndef JAPAN - arm_func_start sub_02057DFC -sub_02057DFC: ; 0x02057DFC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r1, _02057E8C ; =TEAM_MEMBER_TABLE_PTR - mov r0, #0 - ldr r1, [r1] - mov ip, #1 - add r1, r1, #0x9000 - ldr r6, [r1, #0x84c] - mov r3, r0 - mov r4, r0 - mov r5, ip - mov lr, r0 -_02057E28: - ldrb r1, [r6] - tst r1, #1 - movne r1, r5 - moveq r1, r4 - tst r1, #0xff - beq _02057E78 - mov r7, lr -_02057E44: - add r1, r6, r7, lsl #3 - ldrb r1, [r1, #0x1c] - tst r1, #1 - movne r1, ip - moveq r1, r3 - tst r1, #0xff - addne r2, r6, r7, lsl #3 - ldrneb r1, [r2, #0x1c] - add r7, r7, #1 - andne r1, r1, #0xf - strneb r1, [r2, #0x1c] - cmp r7, #4 - blt _02057E44 -_02057E78: - add r0, r0, #1 - cmp r0, #4 - add r6, r6, #0x68 - blt _02057E28 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02057E8C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02057DFC -#endif - - arm_func_start sub_02057E90 -sub_02057E90: ; 0x02057E90 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r0, _02057EF0 ; =TEAM_MEMBER_TABLE_PTR - mov r4, #0 - ldr r0, [r0] - mov r6, r4 - add r0, r0, #0x9000 - ldr r8, [r0, #0x84c] - mov r7, #1 - mov r5, r4 -_02057EB4: - ldrb r0, [r8] - tst r0, #1 - movne r0, r7 - moveq r0, r6 - tst r0, #0xff - beq _02057EDC - ldrsh r0, [r8, #8] - bl CheckTeamMemberIdx - cmp r0, #0 - strneb r5, [r8] -_02057EDC: - add r4, r4, #1 - cmp r4, #4 - add r8, r8, #0x68 - blt _02057EB4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02057EF0: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02057E90 - - arm_func_start sub_02057EF4 -sub_02057EF4: ; 0x02057EF4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r0, _02058060 ; =TEAM_MEMBER_TABLE_PTR - mov r8, #0 - ldr r0, [r0] - add r0, r0, #0x9000 - ldr r7, [r0, #0x84c] -_02057F0C: - ldrb r0, [r7] - tst r0, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - bne _02057F38 - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _0205804C -_02057F38: - ldrsh sb, [r7, #8] - ldrsh r1, [r7, #0x10] - mov r0, r7 - strh r1, [r7, #0xe] - bl sub_02058810 - mov sl, #0 - add r5, r7, #0x1c - mov fp, sl - mov r6, #1 - mov r4, sl -_02057F60: - add r0, r7, sl, lsl #3 - ldrb r0, [r0, #0x1c] - tst r0, #1 - movne r0, r6 - moveq r0, fp - tst r0, #0xff - beq _02057F90 - add r0, r5, sl, lsl #3 - bl GetMaxPp - add r1, r7, sl, lsl #3 - strb r0, [r1, #0x22] - strh r4, [r1, #0x1e] -_02057F90: - add sl, sl, #1 - cmp sl, #4 - blt _02057F60 - strh r8, [r7, #0xa] - ldrb r1, [r7] - mov r0, sb - bic r2, r1, #8 - and r1, r2, #0xff - orr r1, r1, #1 - strb r1, [r7] - bl CheckTeamMemberIdx - cmp r0, #0 - mov r0, sb - mov r1, #0 - bne _02058048 - bl sub_02056460 - cmp r0, #0 - beq _02057FE4 - mov r0, sb - mov r1, #0 - bl sub_020565F4 -_02057FE4: - mov r0, sb - mov r1, #2 - bl sub_02056460 - cmp r0, #0 - beq _02058004 - mov r0, sb - mov r1, #2 - bl sub_020565F4 -_02058004: - mov r0, sb - mov r1, #0 - bl sub_02056504 - cmp r0, #0 - beq _02058024 - mov r0, sb - mov r1, #0 - bl sub_020565F4 -_02058024: - mov r0, sb - mov r1, #2 - bl sub_02056504 - cmp r0, #0 - beq _0205804C - mov r0, sb - mov r1, #2 - bl sub_020565F4 - b _0205804C -_02058048: - bl sub_020565F4 -_0205804C: - add r8, r8, #1 - cmp r8, #4 - add r7, r7, #0x68 - blt _02057F0C - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02058060: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02057EF4 - - arm_func_start sub_02058064 -sub_02058064: ; 0x02058064 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r0, _020580C0 ; =TEAM_MEMBER_TABLE_PTR - mov r4, #0 - ldr r0, [r0] - mov r5, r4 - add r0, r0, #0x9000 - ldr r7, [r0, #0x84c] - mov r6, #1 -_02058084: - ldrb r0, [r7] - tst r0, #1 - movne r0, r6 - moveq r0, r5 - tst r0, #0xff - beq _020580A4 - add r0, r7, #0x5a - bl ShuffleHiddenPower -_020580A4: - add r0, r4, #1 - mov r0, r0, lsl #0x10 - mov r4, r0, asr #0x10 - cmp r4, #4 - add r7, r7, #0x68 - blt _02058084 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_020580C0: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02058064 - - arm_func_start sub_020580C4 -sub_020580C4: ; 0x020580C4 - stmdb sp!, {r4, r5, r6, lr} - ldr r1, _02058134 ; =TEAM_MEMBER_TABLE_PTR - mov r5, #0 - ldr r1, [r1] - add r2, r5, #1 - add r1, r1, #0x9000 - ldr r4, [r1, #0x84c] - and r6, r2, #0xff - strb r5, [r0] - mov ip, r5 - mov lr, #1 - mov r3, r5 -_020580F4: - ldrb r1, [r4] - add r4, r4, #0x68 - tst r1, #1 - movne r1, lr - moveq r1, ip - tst r1, #0xff - addeq r1, r0, r5 - streqb r3, [r1, #1] - addne r1, r0, r5 - addne r2, r6, #1 - strneb r6, [r1, #1] - add r5, r5, #1 - andne r6, r2, #0xff - cmp r5, #4 - blt _020580F4 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02058134: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_020580C4 - - arm_func_start sub_02058138 -sub_02058138: ; 0x02058138 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr r2, _020581EC ; =TEAM_MEMBER_TABLE_PTR - mov r1, #0x68 - ldr r2, [r2] - smulbb r1, r0, r1 - add r0, r2, #0x9000 - ldr r2, [r0, #0x84c] - ldrb r0, [r2, r1] - add r3, r2, r1 - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _020581E0 - ldrb r1, [r3, #0x3e] - tst r1, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - ldrneb r0, [r3, #0x3f] - cmpne r0, #0 - beq _020581E0 - tst r1, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - bne _020581E0 - ldrh r1, [r3, #0x3e] - add r0, r3, #0x3e - strh r1, [sp] - ldrh r2, [r3, #0x40] - ldrb r1, [sp] - strh r2, [sp, #2] - ldrh r2, [r3, #0x42] - bic r1, r1, #0x10 - strh r2, [sp, #4] - strb r1, [sp] - bl ItemZInit - add r0, sp, #0 - bl RemoveHolderForItemInBag - b _020581E4 -_020581E0: - mov r0, #0 -_020581E4: - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_020581EC: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02058138 - - arm_func_start ClearItem -ClearItem: ; 0x020581F0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #8 - ldr r2, _020582DC ; =TEAM_MEMBER_TABLE_PTR - cmp r0, #0 - ldr r2, [r2] - add r2, r2, #0x9000 - ldr r2, [r2, #0x84c] - beq _020582D0 - mov r8, #0 - mov r7, #1 - mov r6, r8 - mov r4, r8 - mov r5, r7 - mov r3, r8 - mov ip, r7 - b _020582C8 -_02058230: - ldrb lr, [r2] - tst lr, #1 - movne sb, r7 - moveq sb, r6 - tst sb, #0xff - beq _020582C0 - ldrb sb, [r2, #0x3e] - tst sb, #1 - movne lr, r5 - moveq lr, r4 - tst lr, #0xff - beq _020582C0 - ldrb lr, [r2, #0x3f] - cmp lr, r0 - bne _020582C0 - cmp r1, #0 - beq _02058288 - tst sb, #8 - movne sb, ip - moveq sb, r3 - tst sb, #0xff - bne _020582C0 -_02058288: - ldrh r1, [r2, #0x3e] - add r0, r2, #0x3e - strh r1, [sp] - ldrh r3, [r2, #0x40] - ldrb r1, [sp] - strh r3, [sp, #2] - ldrh r2, [r2, #0x42] - bic r1, r1, #0x10 - strh r2, [sp, #4] - strb r1, [sp] - bl ItemZInit - add r0, sp, #0 - bl RemoveHolderForItemInBag - b _020582D4 -_020582C0: - add r8, r8, #1 - add r2, r2, #0x68 -_020582C8: - cmp r8, #4 - blt _02058230 -_020582D0: - mov r0, #0 -_020582D4: - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_020582DC: .word TEAM_MEMBER_TABLE_PTR - arm_func_end ClearItem - - arm_func_start sub_020582E0 -sub_020582E0: ; 0x020582E0 - ldr ip, _020582EC ; =ClearItem - mov r1, #1 - bx ip - .align 2, 0 -_020582EC: .word ClearItem - arm_func_end sub_020582E0 - - arm_func_start sub_020582F0 -sub_020582F0: ; 0x020582F0 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0xc - ldr r3, _0205845C ; =TEAM_MEMBER_TABLE_PTR - mov r2, #0x68 - ldr r3, [r3] - smulbb r2, r0, r2 - add r0, r3, #0x9000 - ldr r3, [r0, #0x84c] - mov r5, r1 - ldrb r0, [r3, r2] - add r4, r3, r2 - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02058450 - mov r0, r5 - bl GetItemAtIdx - ldrb r2, [r4, #0x3e] - mov r1, r0 - tst r2, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02058404 - ldrb r0, [r4, #0x3f] - cmp r0, #0 - bne _02058374 - tst r2, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - bne _02058448 -_02058374: - ldrh r2, [r4, #0x3e] - add r0, sp, #6 - strh r2, [sp, #6] - ldrh r3, [r4, #0x40] - ldrb r2, [sp, #6] - strh r3, [sp, #8] - ldrh ip, [r4, #0x42] - bic r3, r2, #0x10 - strh ip, [sp, #0xa] - ldrh r2, [r1] - strh r2, [sp] - ldrh ip, [r1, #2] - ldrb r2, [sp] - strh ip, [sp, #2] - ldrh ip, [r1, #4] - bic r1, r2, #0x10 - strh ip, [sp, #4] - ldrsh r2, [r4, #0xa] - add r2, r2, #1 - strb r2, [sp, #1] - strb r1, [sp] - strb r3, [sp, #6] - bl RemoveHolderForItemInBag - ldrh r2, [sp] - add r1, sp, #0 - mov r0, r5 - strh r2, [r4, #0x3e] - ldrh r2, [sp, #2] - strh r2, [r4, #0x40] - ldrh r2, [sp, #4] - strh r2, [r4, #0x42] - ldrsh r2, [r4, #0xa] - add r2, r2, #1 - and r2, r2, #0xff - bl SetHolderForItemInBag - b _02058448 -_02058404: - ldrh r2, [r1] - mov r0, r5 - strh r2, [r4, #0x3e] - ldrh r2, [r1, #2] - strh r2, [r4, #0x40] - ldrh r2, [r1, #4] - strh r2, [r4, #0x42] - ldrsh r2, [r4, #0xa] - add r2, r2, #1 - strb r2, [r4, #0x3f] - ldrb r2, [r4, #0x3e] - bic r2, r2, #0x10 - strb r2, [r4, #0x3e] - ldrsh r2, [r4, #0xa] - add r2, r2, #1 - and r2, r2, #0xff - bl SetHolderForItemInBag -_02058448: - mov r0, #1 - b _02058454 -_02058450: - mov r0, #0 -_02058454: - add sp, sp, #0xc - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_0205845C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_020582F0 - - arm_func_start sub_02058460 -sub_02058460: ; 0x02058460 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r2, r0 - cmp r1, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - ldr r0, _020584F4 ; =TEAM_MEMBER_TABLE_PTR - sub r1, r1, #1 - mov ip, r1, lsl #0x10 - ldr r1, [r0] - mov r0, #0 - add r1, r1, #0x9000 - mov r4, r0 - mov r5, #1 - mov r3, #0x68 - b _020584E4 -_0205849C: - smulbb r6, r0, r3 - ldr r7, [r1, #0x84c] - ldrb lr, [r7, r6] - add r6, r7, r6 - tst lr, #1 - movne r7, r5 - moveq r7, r4 - tst r7, #0xff - beq _020584D8 - ldrsh lr, [r6, #0xa] - cmp lr, ip, asr #16 - bne _020584D8 - mov r1, r2 - bl sub_020582F0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_020584D8: - add r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 -_020584E4: - cmp r0, #4 - blt _0205849C - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_020584F4: .word TEAM_MEMBER_TABLE_PTR - arm_func_end sub_02058460 - - arm_func_start sub_020584F8 -sub_020584F8: ; 0x020584F8 - bx lr - arm_func_end sub_020584F8 - - arm_func_start sub_020584FC -sub_020584FC: ; 0x020584FC - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, r1 - bl GetActiveTeamMember - mov r1, r0 - ldrb r0, [r1, #1] - add r1, r1, #0x5e - cmp r0, #0 - movne r2, #1 - moveq r2, #0 - mov r0, r4 - and r2, r2, #0xff - bl sub_02054FA0 - ldmia sp!, {r4, pc} - arm_func_end sub_020584FC - - arm_func_start sub_02058534 -sub_02058534: ; 0x02058534 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r2 - mov r0, r1 - bl GetActiveTeamMember - mov r1, r0 - cmp r4, #0x44 - bne _02058578 - ldrb r0, [r1, #1] - add r1, r1, #0x5e - cmp r0, #0 - movne r2, #1 - moveq r2, #0 - mov r0, r5 - and r2, r2, #0xff - bl sub_02054FA0 - ldmia sp!, {r3, r4, r5, pc} -_02058578: - mov r0, r5 - mov r2, r4 - add r1, r1, #0x5e - bl sub_02054F44 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02058534 - - arm_func_start sub_0205858C -sub_0205858C: ; 0x0205858C - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, r1 - bl GetActiveTeamMember - mov r1, r0 - mov r0, r4 - add r1, r1, #0x5e - mov r2, #0xa - bl StrncpySimpleNoPadSafe - ldmia sp!, {r4, pc} - arm_func_end sub_0205858C - - arm_func_start sub_020585B4 -sub_020585B4: ; 0x020585B4 - ldrb r2, [r1, #1] - ldr ip, _020585D4 ; =sub_02054FA0 - add r1, r1, #0x5e - cmp r2, #0 - movne r2, #1 - moveq r2, #0 - and r2, r2, #0xff - bx ip - .align 2, 0 -_020585D4: .word sub_02054FA0 - arm_func_end sub_020585B4 - - arm_func_start ChangeGiratinaFormIfSkyDungeon -ChangeGiratinaFormIfSkyDungeon: ; 0x020585D8 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - bl IsSkyExclusiveDungeon - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r8, #0 - ldr r4, _02058640 ; =0x00000211 - mov r6, r8 - mov r7, #1 - mov r5, #0x218 -_020585FC: - mov r0, r8 - bl GetActiveTeamMember - ldrb r1, [r0] - tst r1, #1 - movne r1, r7 - moveq r1, r6 - tst r1, #0xff - beq _02058628 - ldrsh r1, [r0, #0xc] - cmp r1, r4 - streqh r5, [r0, #0xc] -_02058628: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 - cmp r8, #4 - blt _020585FC - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02058640: .word 0x00000211 - arm_func_end ChangeGiratinaFormIfSkyDungeon - - arm_func_start sub_02058644 -sub_02058644: ; 0x02058644 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, #0 -_02058650: - mov r0, r4 - mov r1, r5 - bl RevertGiratinaAndShaymin - add r0, r4, #1 - mov r0, r0, lsl #0x10 - mov r4, r0, asr #0x10 - cmp r4, #4 - blt _02058650 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02058644 - - arm_func_start RevertGiratinaAndShaymin -RevertGiratinaAndShaymin: ; 0x02058674 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl sub_02056228 - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - bl GetActiveTeamMember - ldrb r1, [r0] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - ldmeqia sp!, {r3, r4, r5, pc} - tst r4, #2 - beq _020586C8 - ldrsh r1, [r0, #0xc] - cmp r1, #0x218 - ldreq r1, _020586E8 ; =0x00000211 - streqh r1, [r0, #0xc] - ldmeqia sp!, {r3, r4, r5, pc} -_020586C8: - tst r4, #1 - ldmeqia sp!, {r3, r4, r5, pc} - ldrsh r2, [r0, #0xc] - ldr r1, _020586EC ; =0x00000217 - cmp r2, r1 - subeq r1, r1, #1 - streqh r1, [r0, #0xc] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020586E8: .word 0x00000211 -_020586EC: .word 0x00000217 - arm_func_end RevertGiratinaAndShaymin - - arm_func_start sub_020586F0 -sub_020586F0: ; 0x020586F0 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - bl GetActiveTeamMember - mov r4, r0 - ldrb r0, [r4] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _0205878C - mov r0, r5 - bl GetItemMoveId16 - mov ip, #0 - mov r2, ip - mov r3, #1 - b _02058768 -_02058730: - add r1, r4, ip, lsl #3 - ldrb r1, [r1, #0x1c] - tst r1, #1 - movne r1, r3 - moveq r1, r2 - tst r1, #0xff - beq _0205875C - add r1, r4, ip, lsl #3 - ldrh r1, [r1, #0x20] - cmp r0, r1 - beq _02058770 -_0205875C: - add r1, ip, #1 - mov r1, r1, lsl #0x10 - mov ip, r1, asr #0x10 -_02058768: - cmp ip, #4 - blt _02058730 -_02058770: - cmp ip, #4 - blt _0205878C - ldrsh r1, [r4, #0xc] - bl sub_02053D1C - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, pc} -_0205878C: - mov r0, #0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_020586F0 - - arm_func_start sub_02058794 -sub_02058794: ; 0x02058794 - stmdb sp!, {r4, lr} - mov r4, r0 - bl sub_0204E584 - cmp r0, #0 - ldmeqia sp!, {r4, pc} - mov r0, r4 - bl GetActiveTeamMember - mov r4, r0 - ldrsh r0, [r4, #8] - bl GetTeamMember - mov r1, r4 - bl sub_020534BC - ldmia sp!, {r4, pc} - arm_func_end sub_02058794 - - arm_func_start sub_020587C8 -sub_020587C8: ; 0x020587C8 - stmdb sp!, {r3, lr} - bl sub_02057E90 - mvn r0, #0 - bl sub_02058644 - bl RefillTeam - ldmia sp!, {r3, pc} - arm_func_end sub_020587C8 - - arm_func_start sub_020587E0 -sub_020587E0: ; 0x020587E0 - stmdb sp!, {r4, lr} - mov r4, r0 -#ifndef JAPAN - bl sub_02057DFC -#endif - bl sub_02057E90 - mvn r0, #0 - bl sub_02058644 - bl RefillTeam - mov r0, r4 - bl sub_02057AEC - mov r0, #0 - bl sub_02056318 - ldmia sp!, {r4, pc} - arm_func_end sub_020587E0 - - arm_func_start sub_02058810 -sub_02058810: ; 0x02058810 - mov r2, #0x64 - strh r2, [r0, #0x48] - mov r1, #0 - strh r2, [r0, #0x44] - strh r1, [r0, #0x4a] - strh r1, [r0, #0x46] - bx lr - arm_func_end sub_02058810 - - arm_func_start sub_0205882C -sub_0205882C: ; 0x0205882C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x30 - ldr r1, _02058AA4 ; =0x000003E3 - mov r4, r0 - mov r3, #0 - add r2, sp, #0x14 - mov r0, #4 - str r3, [sp, #0x1c] - bl DirectoryFileMngr_OpenDirectoryFile - ldr r1, [sp, #0x14] - add r0, sp, #0x1c - bl HandleSir0Translation - mov r0, r4, lsl #0x10 - mov r0, r0, asr #0x10 - mov r1, #0 - bl sub_02058ABC - mov r0, r4, lsl #0x10 - ldr r5, [sp, #0x1c] - mov r0, r0, asr #0x10 - mov r1, #0 - bl sub_02058ABC - add r1, r5, #4 - mov r2, #0x40 - mov r3, #9 - bl CopyAndInterleaveWrapper - add r0, r4, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r1, #0 - bl sub_02058ABC - add r1, r5, #0x24 - mov r2, #0x80 - mov r3, #9 - bl CopyAndInterleaveWrapper - add r0, r4, #2 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r1, #0 - bl sub_02058ABC - add r1, r5, #0x64 - mov r2, #0x100 - mov r3, #9 - bl CopyAndInterleaveWrapper - add r0, sp, #0x14 - bl UnloadFile - mov lr, #0 -_020588E4: - ldr r3, _02058AA8 ; =_020A3468 - ldr r5, _02058AAC ; =_022B578C - add r2, r3, lr, lsl #4 - ldr r1, [r2, #8] - ldr r0, _02058AB0 ; =0x000003FF - add r1, r4, r1 - add r7, r5, lr, lsl #4 - mov sb, #0x400 - ldr r3, [r3, lr, lsl #4] - and r8, r1, r0 - ldr r2, [r2, #4] - mov r1, r3, lsl #0x1e - mov r5, #0 - mov r0, r2, lsl #0x1e - rsb sb, sb, #0 - mov r2, r5 - mov r3, #1 -_02058928: - mov ip, r5, lsl #3 - ldrh sl, [r7, ip] - add r6, r7, r5, lsl #3 - cmp r5, #1 - bic sl, sl, #0x100 - strh sl, [r7, ip] - ldrh sl, [r7, ip] - add r5, r5, #1 - bic sl, sl, #0x200 - strh sl, [r7, ip] - ldrh sl, [r6] - moveq ip, r3 - movne ip, r2 - bic sl, sl, #0xc00 - strh sl, [r6] - ldrh sl, [r6] - mov ip, ip, lsl #0x1e - cmp r5, #2 - orr sl, sl, ip, lsr #20 - strh sl, [r6] - ldrh ip, [r6] - bic ip, ip, #0x1000 - strh ip, [r6] - ldrh ip, [r6] - bic ip, ip, #0x2000 - strh ip, [r6] - ldrh ip, [r6] - orr ip, ip, #0x2000 - strh ip, [r6] - ldrh ip, [r6] - bic ip, ip, #0xc000 - strh ip, [r6] - ldrh ip, [r6] - orr ip, ip, r1, lsr #16 - strh ip, [r6] - ldrh ip, [r6, #2] - bic ip, ip, #0x3e00 - strh ip, [r6, #2] - ldrh ip, [r6, #2] - bic ip, ip, #0xc000 - strh ip, [r6, #2] - ldrh ip, [r6, #2] - orr ip, ip, r0, lsr #16 - strh ip, [r6, #2] - ldrh ip, [r6, #4] - and ip, ip, sb - strh ip, [r6, #4] - ldrh ip, [r6, #4] - orr ip, ip, r8 - strh ip, [r6, #4] - ldrh ip, [r6, #4] - bic ip, ip, #0xc00 - strh ip, [r6, #4] - ldrh ip, [r6, #4] - orr ip, ip, #0xc00 - strh ip, [r6, #4] - ldrh ip, [r6, #4] - bic ip, ip, #0xf000 - strh ip, [r6, #4] - ldrh ip, [r6, #6] - bic ip, ip, #1 - strh ip, [r6, #6] - ldrh ip, [r6, #6] - bic ip, ip, #2 - strh ip, [r6, #6] - blt _02058928 - add lr, lr, #1 - cmp lr, #3 - blt _020588E4 - ldr r1, _02058AB4 ; =0x000003E5 - add r2, sp, #0xc - mov r0, #4 - mov r3, #0 - bl DirectoryFileMngr_OpenDirectoryFile - ldr r1, [sp, #0xc] - add r0, sp, #8 - bl HandleSir0Translation - mov r0, #0x90 - str r0, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r1, [sp, #8] - add r0, sp, #0x20 - mov r2, #1 - mov r3, #0x20 - bl sub_0201F598 - ldr r0, _02058AB8 ; =_020AFC4C - add r1, sp, #0x20 - ldr r0, [r0] - mov r2, #0 - bl sub_0201B43C - add r0, sp, #0xc - bl UnloadFile - add sp, sp, #0x30 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02058AA4: .word 0x000003E3 -_02058AA8: .word _020A3468 -_02058AAC: .word _022B578C -_02058AB0: .word 0x000003FF -_02058AB4: .word 0x000003E5 -_02058AB8: .word _020AFC4C - arm_func_end sub_0205882C - - arm_func_start sub_02058ABC -sub_02058ABC: ; 0x02058ABC - ldr r3, _02058AF4 ; =_020AFC4C - mov r2, #0x70 - ldr ip, [r3] - ldr r3, _02058AF8 ; =_020AFC28 - mla r2, r1, r2, ip - ldrh r1, [r2, #0xc] - ldr ip, [r2, #0x64] - mov r2, r1, lsr #0x1f - rsb r1, r2, r1, lsl #30 - add r1, r2, r1, ror #30 - mov r1, r1, lsl #1 - ldrsh r1, [r3, r1] - smlabb r0, r0, r1, ip - bx lr - .align 2, 0 -_02058AF4: .word _020AFC4C -_02058AF8: .word _020AFC28 - arm_func_end sub_02058ABC - - arm_func_start sub_02058AFC -sub_02058AFC: ; 0x02058AFC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - cmp r0, #0x32 - mov r6, r1 - mov r5, r2 - mov r4, r3 - cmpne r0, #0x33 - beq _02058B38 - ldr r1, _02058C08 ; =0xFFFFFD76 - add r1, r0, r1 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - cmp r1, #1 - bhi _02058B40 -_02058B38: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_02058B40: - bl GetShadowSize - ldrb r1, [sp, #0x24] - mov r7, #0x200 - ldrsh lr, [r6] - cmp r1, #0 - ldr r1, _02058C0C ; =_022B578C - movne r2, #1 - moveq r2, #0 - add r1, r1, r0, lsl #4 - add r1, r1, r2, lsl #3 - ldr sb, _02058C10 ; =_020A3450 - ldrh r8, [r1, #2] - ldrsh ip, [r5, #0x24] - ldrsh r3, [r6, #2] - ldrsh r2, [r5, #0x26] - rsb r7, r7, #0 - and r5, r8, r7 - strh r5, [r1, #2] - ldr r0, [sb, r0, lsl #2] - add r5, lr, ip - add r0, r5, r0 - ldrh r5, [r1, #2] - and r0, r0, r7, lsr #23 - add r2, r3, r2 - orr r0, r5, r0 - strh r0, [r1, #2] - sub r0, r2, #2 - sub r2, r0, #2 - mov r3, r2, lsl #0x14 - ldrh r5, [r1, #6] - ldr r0, _02058C14 ; =0xFFFF000F - ldr r2, [sp, #0x20] - and r0, r5, r0 - strh r0, [r1, #6] - ldrh r5, [r1, #6] - ldr r0, _02058C18 ; =_020AFC4C - orr r3, r5, r3, lsr #16 - strh r3, [r1, #6] - ldrh r5, [r1, #4] - mov r3, r2, lsl #0x1e - ldr r0, [r0] - bic r2, r5, #0xc00 - strh r2, [r1, #4] - ldrh r5, [r1, #4] - mov r2, r4 - orr r3, r5, r3, lsr #20 - strh r3, [r1, #4] - bl sub_0201B9F8 - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02058C08: .word 0xFFFFFD76 -_02058C0C: .word _022B578C -_02058C10: .word _020A3450 -_02058C14: .word 0xFFFF000F -_02058C18: .word _020AFC4C - arm_func_end sub_02058AFC - - arm_func_start GetIqSkillStringId -GetIqSkillStringId: ; 0x02058C1C -#if defined(EUROPE) - add r0, r0, #0xe7 - add r0, r0, #0x2600 -#elif defined(JAPAN) - add r0, r0, #0x13 - add r0, r0, #0x3f00 -#else - add r0, r0, #0xe5 - add r0, r0, #0x2600 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bx lr - arm_func_end GetIqSkillStringId - - arm_func_start sub_02058C30 -sub_02058C30: ; 0x02058C30 - ldr ip, _02058C38 ; =CopyTacticString - bx ip - .align 2, 0 -_02058C38: .word CopyTacticString - arm_func_end sub_02058C30 - - arm_func_start DoesTacticFollowLeader -DoesTacticFollowLeader: ; 0x02058C3C - ldr r1, _02058C48 ; =_020A190C - ldrb r0, [r1, r0] - bx lr - .align 2, 0 -_02058C48: .word _020A190C - arm_func_end DoesTacticFollowLeader - - arm_func_start GetUnlockedTactics -GetUnlockedTactics: ; 0x02058C4C - stmdb sp!, {r3, lr} - mov lr, #0 - ldr r3, _02058C98 ; =TACTICS_UNLOCK_LEVEL_TABLE - mov ip, lr -_02058C5C: - mov r2, ip, lsl #1 - ldrsh r2, [r3, r2] - cmp r2, r1 - strleb ip, [r0, lr] - add ip, ip, #1 - addle lr, lr, #1 - cmp ip, #0xc - blt _02058C5C - mov r1, #0xb - b _02058C8C -_02058C84: - strb r1, [r0, lr] - add lr, lr, #1 -_02058C8C: - cmp lr, #0xc - blt _02058C84 - ldmia sp!, {r3, pc} - .align 2, 0 -_02058C98: .word TACTICS_UNLOCK_LEVEL_TABLE - arm_func_end GetUnlockedTactics - - arm_func_start GetUnlockedTacticFlags -GetUnlockedTacticFlags: ; 0x02058C9C - stmdb sp!, {r4, lr} - mov r4, #0 - ldr lr, _02058CD4 ; =TACTICS_UNLOCK_LEVEL_TABLE - mov r2, r4 - mov r3, #1 -_02058CB0: - mov ip, r4, lsl #1 - ldrsh ip, [lr, ip] - cmp ip, r1 - strleb r3, [r0, r4] - strgtb r2, [r0, r4] - add r4, r4, #1 - cmp r4, #0xc - blt _02058CB0 - ldmia sp!, {r4, pc} - .align 2, 0 -_02058CD4: .word TACTICS_UNLOCK_LEVEL_TABLE - arm_func_end GetUnlockedTacticFlags - - arm_func_start CanLearnIqSkill -CanLearnIqSkill: ; 0x02058CD8 - cmp r1, #0 - moveq r0, #0 - bxeq lr - ldr r2, _02058D00 ; =IQ_SKILLS - ldr r1, [r2, r1, lsl #2] - cmp r1, r0 - movle r0, #1 - movgt r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_02058D00: .word IQ_SKILLS - arm_func_end CanLearnIqSkill - - arm_func_start GetLearnableIqSkills -GetLearnableIqSkills: ; 0x02058D04 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r6, #0 - mov sl, r0 - mov sb, r1 - mov r8, r2 - mov r5, r6 - ldr r4, _02058DA0 ; =IQ_GROUP_SKILLS - mov fp, #0x19 - b _02058D74 -_02058D28: - mov r0, sb - bl GetIqGroup - mla r1, r0, fp, r4 - and r0, r5, #0xff - ldrb r7, [r0, r1] - cmp r7, #0xff - beq _02058D7C - cmp r7, #0x18 - bne _02058D58 - mov r0, #3 - bl GetPerformanceFlagWithChecks - b _02058D64 -_02058D58: - mov r0, r8 - mov r1, r7 - bl CanLearnIqSkill -_02058D64: - cmp r0, #0 - strneb r7, [sl, r6] - addne r6, r6, #1 - add r5, r5, #1 -_02058D74: - cmp r5, #0x19 - blt _02058D28 -_02058D7C: - mov r1, r6 - mov r0, #0 - b _02058D90 -_02058D88: - strb r0, [sl, r1] - add r1, r1, #1 -_02058D90: - cmp r1, #0x45 - blt _02058D88 - mov r0, r6 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02058DA0: .word IQ_GROUP_SKILLS - arm_func_end GetLearnableIqSkills - - arm_func_start DisableIqSkill -DisableIqSkill: ; 0x02058DA4 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - mov r5, r1 - bl IqSkillFlagTest - cmp r0, #0 - beq _02058DE4 - mov r0, r5, asr #4 - add r0, r5, r0, lsr #27 - mov r2, r0, asr #5 - sub r0, r5, r2, lsl #5 - mov r1, #1 - mvn r0, r1, lsl r0 - ldr r1, [r4, r2, lsl #2] - and r0, r1, r0 - str r0, [r4, r2, lsl #2] - ldmia sp!, {r3, r4, r5, pc} -_02058DE4: - mov r0, r4 - mov r1, r5 - bl EnableIqSkill - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DisableIqSkill - - arm_func_start EnableIqSkill -EnableIqSkill: ; 0x02058DF4 - stmdb sp!, {r4, r5, r6, lr} - ldr r2, _02058E64 ; =IQ_SKILL_RESTRICTIONS - mov r3, r1, lsl #1 - ldrsh ip, [r2, r3] - mov r3, #0 - mov r4, #1 -_02058E0C: - mov r5, r3, lsl #1 - ldrsh r5, [r2, r5] - cmp ip, r5 - bne _02058E3C - mov lr, r3, asr #4 - add lr, r3, lr, lsr #27 - mov r6, lr, asr #5 - sub lr, r3, r6, lsl #5 - mvn lr, r4, lsl lr - ldr r5, [r0, r6, lsl #2] - and r5, r5, lr - str r5, [r0, r6, lsl #2] -_02058E3C: - add r3, r3, #1 - cmp r3, #0x45 - blt _02058E0C - mov ip, r1, lsr #5 - ldr r3, [r0, ip, lsl #2] - sub r1, r1, ip, lsl #5 - mov r2, #1 - orr r1, r3, r2, lsl r1 - str r1, [r0, ip, lsl #2] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02058E64: .word IQ_SKILL_RESTRICTIONS - arm_func_end EnableIqSkill - - arm_func_start GetSpeciesIqSkill -GetSpeciesIqSkill: ; 0x02058E68 - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetIqGroup - ldr r2, _02058E88 ; =IQ_GROUP_SKILLS - mov r1, #0x19 - mla r1, r0, r1, r2 - ldrb r0, [r4, r1] - ldmia sp!, {r4, pc} - .align 2, 0 -_02058E88: .word IQ_GROUP_SKILLS - arm_func_end GetSpeciesIqSkill - - arm_func_start DisableAllIqSkills -DisableAllIqSkills: ; 0x02058E8C - mov r3, #0 - mov r2, r3 -_02058E94: - add r1, r3, #1 - mov r1, r1, lsl #0x10 - str r2, [r0, r3, lsl #2] - mov r3, r1, asr #0x10 - cmp r3, #3 - blt _02058E94 - bx lr - arm_func_end DisableAllIqSkills - - arm_func_start EnableAllLearnableIqSkills -EnableAllLearnableIqSkills: ; 0x02058EB0 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x48 - mov r6, r0 - add r0, sp, #0 - bl GetLearnableIqSkills - mov r0, r6 - bl DisableAllIqSkills - mov r5, #0 - add r4, sp, #0 - b _02058EF4 -_02058ED8: - ldrb r0, [r4, r5] - cmp r0, #0 - beq _02058EFC - ldrb r1, [r4, r5] - mov r0, r6 - bl EnableIqSkill - add r5, r5, #1 -_02058EF4: - cmp r5, #0x45 - blt _02058ED8 -_02058EFC: - add sp, sp, #0x48 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end EnableAllLearnableIqSkills diff --git a/asm/main_02054E4C.s b/asm/main_02054E4C.s new file mode 100644 index 00000000..d80379d7 --- /dev/null +++ b/asm/main_02054E4C.s @@ -0,0 +1,5166 @@ + .include "asm/macros.inc" + .include "main_02054E4C.inc" + + .text + + arm_func_start GendersEqual +GendersEqual: ; 0x02054E4C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + bl GetMonsterGender + mov r4, r0 + mov r0, r5 + bl GetMonsterGender + cmp r4, r0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, r4, r5, pc} + arm_func_end GendersEqual + + arm_func_start GendersEqualNotGenderless +GendersEqualNotGenderless: ; 0x02054E78 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + mov r5, r1 + bl GetMonsterGender + cmp r0, #3 + beq _02054EC0 + mov r0, r5 + bl GetMonsterGender + cmp r0, #3 + beq _02054EC0 + mov r0, r4 + bl GetMonsterGender + mov r4, r0 + mov r0, r5 + bl GetMonsterGender + cmp r4, r0 + moveq r0, #1 + ldmeqia sp!, {r3, r4, r5, pc} +_02054EC0: + mov r0, #0 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end GendersEqualNotGenderless + + arm_func_start GendersNotEqualNotGenderless +GendersNotEqualNotGenderless: ; 0x02054EC8 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + mov r5, r1 + bl GetMonsterGender + cmp r0, #3 + beq _02054F10 + mov r0, r5 + bl GetMonsterGender + cmp r0, #3 + beq _02054F10 + mov r0, r4 + bl GetMonsterGender + mov r4, r0 + mov r0, r5 + bl GetMonsterGender + cmp r4, r0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, pc} +_02054F10: + mov r0, #0 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end GendersNotEqualNotGenderless + + arm_func_start sub_02054F18 +sub_02054F18: ; 0x02054F18 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add r0, r0, #0xea + add r0, r0, #0xfd00 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #2 + movls r0, #1 + movhi r0, #0 + and r0, r0, #0xff + bx lr + arm_func_end sub_02054F18 + + arm_func_start sub_02054F44 +sub_02054F44: ; 0x02054F44 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x14 + mov r5, r0 + mov r4, r2 + add r0, sp, #0 + mov r2, #0xa + bl StrncpySimpleNoPadSafe + cmp r4, #0 + bne _02054F7C + ldr r1, _02054F98 ; =_020A333C + add r2, sp, #0 + mov r0, r5 + bl SprintfStatic__02054A60 + b _02054F90 +_02054F7C: + ldr r1, _02054F9C ; =_020A3340 + add r3, sp, #0 + mov r0, r5 + mov r2, r4 + bl SprintfStatic__02054A60 +_02054F90: + add sp, sp, #0x14 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02054F98: .word _020A333C +_02054F9C: .word _020A3340 + arm_func_end sub_02054F44 + + arm_func_start sub_02054FA0 +sub_02054FA0: ; 0x02054FA0 + ldr ip, _02054FB4 ; =sub_02054F44 + cmp r2, #0 + movne r2, #0x59 + moveq r2, #0x46 + bx ip + .align 2, 0 +_02054FB4: .word sub_02054F44 + arm_func_end sub_02054FA0 + + arm_func_start sub_02054FB8 +sub_02054FB8: ; 0x02054FB8 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + mov r4, r0 + ldrsh r3, [r4] + mov r2, #1 + add r0, sp, #0 + str r3, [sp] + rsb r3, r2, #0x3e8 + bl sub_02055088 + ldr r1, [sp] + strh r1, [r4] + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + arm_func_end sub_02054FB8 + + arm_func_start sub_02054FEC +sub_02054FEC: ; 0x02054FEC + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + mov r4, r0 + ldrb r3, [r4] + add r0, sp, #0 + mov r2, #1 + str r3, [sp] + mov r3, #0xff + bl sub_02055088 + ldr r1, [sp] + strb r1, [r4] + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + arm_func_end sub_02054FEC + + arm_func_start sub_02055020 +sub_02055020: ; 0x02055020 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + mov r4, r0 + ldrb r3, [r4] + add r0, sp, #0 + mov r2, #1 + str r3, [sp] + mov r3, #0xff + bl sub_02055088 + ldr r1, [sp] + strb r1, [r4] + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + arm_func_end sub_02055020 + + arm_func_start sub_02055054 +sub_02055054: ; 0x02055054 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + mov r4, r0 + ldrsh r3, [r4] + mov r2, #1 + add r0, sp, #0 + str r3, [sp] + rsb r3, r2, #0x3e8 + bl sub_02055088 + ldr r1, [sp] + strh r1, [r4] + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + arm_func_end sub_02055054 + + arm_func_start sub_02055088 +sub_02055088: ; 0x02055088 + cmp r1, #0 + ble _020550B4 + ldr r2, [r0] + cmp r2, r3 + moveq r0, #0 + bxeq lr + add r1, r2, r1 + str r1, [r0] + cmp r1, r3 + strgt r3, [r0] + b _020550D4 +_020550B4: + ldr r3, [r0] + cmp r3, r2 + moveq r0, #0 + bxeq lr + add r1, r3, r1 + str r1, [r0] + cmp r1, r2 + strlt r2, [r0] +_020550D4: + mov r0, #1 + bx lr + arm_func_end sub_02055088 + + arm_func_start sub_020550DC +sub_020550DC: ; 0x020550DC + bx lr + arm_func_end sub_020550DC + + arm_func_start sub_020550E0 +sub_020550E0: ; 0x020550E0 + ldr r0, _0205510C ; =TEAM_MEMBER_TABLE_PTR + mov r3, #0 + ldr r2, [r0] + ldr r0, _02055110 ; =0x0000022B + mov r1, r3 +_020550F4: + add r3, r3, #1 + cmp r3, r0 + strb r1, [r2], #0x44 + blt _020550F4 + ldr ip, _02055114 ; =sub_0205523C + bx ip + .align 2, 0 +_0205510C: .word TEAM_MEMBER_TABLE_PTR +_02055110: .word 0x0000022B +_02055114: .word sub_0205523C + arm_func_end sub_020550E0 + + arm_func_start sub_02055118 +sub_02055118: ; 0x02055118 + ldr r0, _02055140 ; =TEAM_MEMBER_TABLE_PTR + mov r2, #0 + ldr r1, [r0] + ldr ip, _02055144 ; =sub_0205523C + strb r2, [r1, #0x88] + ldr r1, [r0] + strb r2, [r1, #0xcc] + ldr r0, [r0] + strb r2, [r0, #0x110] + bx ip + .align 2, 0 +_02055140: .word TEAM_MEMBER_TABLE_PTR +_02055144: .word sub_0205523C + arm_func_end sub_02055118 + + arm_func_start IsMonsterOnTeam +IsMonsterOnTeam: ; 0x02055148 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + mov sb, r1 + bl GetGameMode + cmp r0, #3 +#ifdef JAPAN + mov r6, #1 + bne _020554FC +#else + bne _020551C0 +#endif + ldr r0, _02055230 ; =TEAM_MEMBER_TABLE_PTR + mov r8, #0 + ldr r7, [r0] + mov r5, r8 +#ifndef JAPAN + mov r6, #1 +#endif + ldr r4, _02055234 ; =_020B0A4C + b _020551B8 +_0205517C: + ldrb r0, [r7] + tst r0, #1 + movne r0, r6 + moveq r0, r5 + tst r0, #0xff + beq _020551B0 + ldrsh r0, [r7, #4] + ldr r2, [r4, sb, lsl #2] + mov r1, sl + blx r2 + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_020551B0: + add r8, r8, #1 + add r7, r7, #0x44 +_020551B8: + cmp r8, #2 + blt _0205517C +#ifdef JAPAN + b _020551C0 +_020554FC: + ldr r0, _02055230 ; =_020B0A48 + mov r8, #2 + ldr r0, [r0] + mov r5, #0 + add r7, r0, #0x88 + ldr r4, _02055234 ; =_020B0A4C + b _02055554 +_02055518: + ldrb r0, [r7] + tst r0, #1 + movne r0, r6 + moveq r0, r5 + tst r0, #0xff + beq _0205554C + ldrsh r0, [r7, #4] + ldr r2, [r4, sb, lsl #2] + mov r1, sl + blx r2 + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0205554C: + add r8, r8, #1 + add r7, r7, #0x44 +_02055554: + cmp r8, #5 + blt _02055518 +#endif +_020551C0: + ldr r0, _02055230 ; =TEAM_MEMBER_TABLE_PTR + mov r8, #5 + ldr r0, [r0] + mov fp, #0 + add r7, r0, #0x154 + mov r6, #1 + ldr r5, _02055234 ; =_020B0A4C + ldr r4, _02055238 ; =0x0000022B + b _02055220 +_020551E4: + ldrb r0, [r7] + tst r0, #1 + movne r0, r6 + moveq r0, fp + tst r0, #0xff + beq _02055218 + ldrsh r0, [r7, #4] + ldr r2, [r5, sb, lsl #2] + mov r1, sl + blx r2 + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02055218: + add r8, r8, #1 + add r7, r7, #0x44 +_02055220: + cmp r8, r4 + blt _020551E4 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02055230: .word TEAM_MEMBER_TABLE_PTR +_02055234: .word _020B0A4C +_02055238: .word 0x0000022B + arm_func_end IsMonsterOnTeam + + arm_func_start sub_0205523C +sub_0205523C: ; 0x0205523C + stmdb sp!, {r3, lr} + mov r0, #0x214 + mov r1, #0 + bl IsMonsterOnTeam + cmp r0, #0 + ldrne r1, _02055268 ; =0x0000022B + ldrne r0, _0205526C ; =_022B5788 + ldreq r1, _02055270 ; =0x0000022A + ldreq r0, _0205526C ; =_022B5788 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02055268: .word 0x0000022B +_0205526C: .word _022B5788 +_02055270: .word 0x0000022A + arm_func_end sub_0205523C + + arm_func_start GetNbRecruited +GetNbRecruited: ; 0x02055274 + stmdb sp!, {r3, r4, r5, lr} + ldr r1, _02055384 ; =0x00000906 + mov r4, r0 + bl MemZero + bl GetGameMode + cmp r0, #3 + mov r3, #1 + bne _020552E0 + ldr r0, _02055388 ; =TEAM_MEMBER_TABLE_PTR + mov lr, #0 + ldr ip, [r0] + mov r2, lr +_020552A4: + ldrb r0, [ip] + add lr, lr, #1 + tst r0, #1 + movne r0, r3 + moveq r0, r2 + tst r0, #0xff + ldrnesh r0, [ip, #4] + add ip, ip, #0x44 + movne r1, r0, lsl #1 + ldrnesh r0, [r4, r1] + addne r0, r0, #1 + strneh r0, [r4, r1] + cmp lr, #2 + blt _020552A4 + b _0205532C +_020552E0: + ldr r0, _02055388 ; =TEAM_MEMBER_TABLE_PTR + mov r5, #2 + ldr r0, [r0] + mov r2, #0 + add ip, r0, #0x88 +_020552F4: + ldrb r0, [ip] + add r5, r5, #1 + tst r0, #1 + movne r0, r3 + moveq r0, r2 + tst r0, #0xff + ldrnesh r0, [ip, #4] + add ip, ip, #0x44 + movne r1, r0, lsl #1 + ldrnesh r0, [r4, r1] + addne r0, r0, #1 + strneh r0, [r4, r1] + cmp r5, #5 + blt _020552F4 +_0205532C: + ldr r0, _02055388 ; =TEAM_MEMBER_TABLE_PTR + mov r5, #5 + ldr r0, [r0] + mov r3, #0 + add lr, r0, #0x154 + ldr r0, _0205538C ; =0x0000022B + mov ip, #1 +_02055348: + ldrb r1, [lr] + add r5, r5, #1 + tst r1, #1 + movne r1, ip + moveq r1, r3 + tst r1, #0xff + ldrnesh r1, [lr, #4] + add lr, lr, #0x44 + movne r2, r1, lsl #1 + ldrnesh r1, [r4, r2] + addne r1, r1, #1 + strneh r1, [r4, r2] + cmp r5, r0 + blt _02055348 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02055384: .word 0x00000906 +_02055388: .word TEAM_MEMBER_TABLE_PTR +_0205538C: .word 0x0000022B + arm_func_end GetNbRecruited + + arm_func_start IsValidTeamMember +IsValidTeamMember: ; 0x02055390 + stmdb sp!, {r4, lr} + ldr r1, _0205540C ; =TEAM_MEMBER_TABLE_PTR + mov r4, r0 + mov r0, #0x44 + smulbb r0, r4, r0 + ldr r1, [r1] + ldrb r0, [r1, r0] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02055404 + cmp r4, #5 + bge _020553FC + bl GetGameMode + cmp r0, #3 + bne _020553EC + cmp r4, #2 + cmpne r4, #3 + cmpne r4, #4 + beq _020553FC + mov r0, #0 + ldmia sp!, {r4, pc} +_020553EC: + cmp r4, #0 + cmpne r4, #1 + movne r0, #0 + ldmneia sp!, {r4, pc} +_020553FC: + mov r0, #1 + ldmia sp!, {r4, pc} +_02055404: + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_0205540C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end IsValidTeamMember + + arm_func_start sub_02055410 +sub_02055410: ; 0x02055410 + stmdb sp!, {r4, lr} + ldr r1, _02055470 ; =TEAM_MEMBER_TABLE_PTR + mov r4, r0 + mov r0, #0x44 + smulbb r0, r4, r0 + ldr r1, [r1] + ldrb r0, [r1, r0] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02055468 + bl GetGameMode + cmp r0, #3 + bne _0205545C + cmp r4, #2 + bne _02055468 + mov r0, #1 + ldmia sp!, {r4, pc} +_0205545C: + cmp r4, #0 + moveq r0, #1 + ldmeqia sp!, {r4, pc} +_02055468: + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_02055470: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02055410 + + arm_func_start sub_02055474 +sub_02055474: ; 0x02055474 + stmdb sp!, {r4, lr} + ldr r1, _020554D4 ; =TEAM_MEMBER_TABLE_PTR + mov r4, r0 + mov r0, #0x44 + smulbb r0, r4, r0 + ldr r1, [r1] + ldrb r0, [r1, r0] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _020554CC + bl GetGameMode + cmp r0, #3 + bne _020554C0 + cmp r4, #3 + bne _020554CC + mov r0, #1 + ldmia sp!, {r4, pc} +_020554C0: + cmp r4, #1 + moveq r0, #1 + ldmeqia sp!, {r4, pc} +_020554CC: + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_020554D4: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02055474 + + arm_func_start sub_020554D8 +sub_020554D8: ; 0x020554D8 + stmdb sp!, {r4, lr} + ldr r1, _02055524 ; =TEAM_MEMBER_TABLE_PTR + mov r4, r0 + mov r0, #0x44 + smulbb r0, r4, r0 + ldr r1, [r1] + ldrb r0, [r1, r0] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _0205551C + bl GetGameMode + cmp r0, #3 + cmpeq r4, #4 + moveq r0, #1 + ldmeqia sp!, {r4, pc} +_0205551C: + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_02055524: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_020554D8 + + arm_func_start IsMainCharacter +IsMainCharacter: ; 0x02055528 + stmdb sp!, {r4, lr} + ldr r1, _020555A4 ; =TEAM_MEMBER_TABLE_PTR + mov r4, r0 + mov r0, #0x44 + smulbb r0, r4, r0 + ldr r1, [r1] + ldrb r0, [r1, r0] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _0205559C + cmp r4, #5 + bge _0205559C + bl GetGameMode + cmp r0, #3 + bne _02055584 + cmp r4, #2 + cmpne r4, #3 + cmpne r4, #4 + beq _02055594 + mov r0, #0 + ldmia sp!, {r4, pc} +_02055584: + cmp r4, #0 + cmpne r4, #1 + movne r0, #0 + ldmneia sp!, {r4, pc} +_02055594: + mov r0, #1 + ldmia sp!, {r4, pc} +_0205559C: + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_020555A4: .word TEAM_MEMBER_TABLE_PTR + arm_func_end IsMainCharacter + + arm_func_start GetTeamMember +GetTeamMember: ; 0x020555A8 + mvn r1, #0 + cmp r0, r1 + moveq r0, #0 + bxeq lr + ldr r2, _020555CC ; =TEAM_MEMBER_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + smlabb r0, r0, r1, r2 + bx lr + .align 2, 0 +_020555CC: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetTeamMember + + arm_func_start sub_020555D0 +sub_020555D0: ; 0x020555D0 + stmdb sp!, {r4, r5, r6, lr} + ldr r2, _02055648 ; =TEAM_MEMBER_TABLE_PTR + mov r5, #0 + ldr r2, [r2] + mov r6, #5 + add r4, r2, #0x154 + mov ip, r5 + mov lr, #1 + ldr r2, _0205564C ; =0x0000022B + b _02055638 +_020555F8: + ldrb r3, [r4] + tst r3, #1 + movne r3, lr + moveq r3, ip + tst r3, #0xff + beq _02055630 + ldrsh r3, [r4, #4] + cmp r3, r0 + bne _02055630 + cmp r5, r1 + moveq r0, r6, lsl #0x10 + moveq r0, r0, asr #0x10 + ldmeqia sp!, {r4, r5, r6, pc} + add r5, r5, #1 +_02055630: + add r6, r6, #1 + add r4, r4, #0x44 +_02055638: + cmp r6, r2 + blt _020555F8 + mvn r0, #0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02055648: .word TEAM_MEMBER_TABLE_PTR +_0205564C: .word 0x0000022B + arm_func_end sub_020555D0 + + arm_func_start GetHeroMemberIdx +GetHeroMemberIdx: ; 0x02055650 + ldr r0, _02055678 ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + ldrb r0, [r0] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + movne r0, #0 + mvneq r0, #0 + bx lr + .align 2, 0 +_02055678: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetHeroMemberIdx + + arm_func_start GetPartnerMemberIdx +GetPartnerMemberIdx: ; 0x0205567C + ldr r0, _020556A4 ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x44] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + movne r0, #1 + mvneq r0, #0 + bx lr + .align 2, 0 +_020556A4: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetPartnerMemberIdx + + arm_func_start GetMainCharacter1MemberIdx +GetMainCharacter1MemberIdx: ; 0x020556A8 + stmdb sp!, {r3, lr} + bl GetGameMode + cmp r0, #3 + moveq r0, #2 + ldr r2, _020556E8 ; =TEAM_MEMBER_TABLE_PTR + movne r0, #0 + mov r1, #0x44 + smulbb r1, r0, r1 + ldr r2, [r2] + ldrb r1, [r2, r1] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + mvneq r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_020556E8: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetMainCharacter1MemberIdx + + arm_func_start GetMainCharacter2MemberIdx +GetMainCharacter2MemberIdx: ; 0x020556EC + stmdb sp!, {r3, lr} + bl GetGameMode + cmp r0, #3 + moveq r0, #3 + ldr r2, _0205572C ; =TEAM_MEMBER_TABLE_PTR + movne r0, #1 + mov r1, #0x44 + smulbb r1, r0, r1 + ldr r2, [r2] + ldrb r1, [r2, r1] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + mvneq r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0205572C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetMainCharacter2MemberIdx + + arm_func_start GetMainCharacter3MemberIdx +GetMainCharacter3MemberIdx: ; 0x02055730 + stmdb sp!, {r3, lr} + bl GetGameMode + cmp r0, #3 + mvnne r0, #0 + ldmneia sp!, {r3, pc} + ldr r0, _0205576C ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x110] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + movne r0, #4 + mvneq r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0205576C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetMainCharacter3MemberIdx + + arm_func_start GetHero +GetHero: ; 0x02055770 + ldr r0, _02055794 ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + moveq r0, #0 + bx lr + .align 2, 0 +_02055794: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetHero + + arm_func_start GetPartner +GetPartner: ; 0x02055798 + ldr r0, _020557C0 ; =TEAM_MEMBER_TABLE_PTR + ldr r1, [r0] + ldrb r0, [r1, #0x44] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + addne r0, r1, #0x44 + moveq r0, #0 + bx lr + .align 2, 0 +_020557C0: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetPartner + + arm_func_start GetMainCharacter1 +GetMainCharacter1: ; 0x020557C4 + stmdb sp!, {r3, lr} + bl GetGameMode + cmp r0, #3 + moveq r2, #2 + ldr r1, _02055808 ; =TEAM_MEMBER_TABLE_PTR + movne r2, #0 + mov r0, #0x44 + smulbb r2, r2, r0 + ldr r1, [r1] + ldrb r0, [r1, r2] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + addne r0, r1, r2 + moveq r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_02055808: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetMainCharacter1 + + arm_func_start GetMainCharacter2 +GetMainCharacter2: ; 0x0205580C + stmdb sp!, {r3, lr} + bl GetGameMode + cmp r0, #3 + moveq r2, #3 + ldr r1, _02055850 ; =TEAM_MEMBER_TABLE_PTR + movne r2, #1 + mov r0, #0x44 + smulbb r2, r2, r0 + ldr r1, [r1] + ldrb r0, [r1, r2] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + addne r0, r1, r2 + moveq r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_02055850: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetMainCharacter2 + + arm_func_start GetMainCharacter3 +GetMainCharacter3: ; 0x02055854 + stmdb sp!, {r3, lr} + bl GetGameMode + cmp r0, #3 + movne r0, #0 + ldmneia sp!, {r3, pc} + ldr r0, _02055890 ; =TEAM_MEMBER_TABLE_PTR + ldr r1, [r0] + ldrb r0, [r1, #0x110] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + addne r0, r1, #0x110 + moveq r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_02055890: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetMainCharacter3 + + arm_func_start sub_02055894 +sub_02055894: ; 0x02055894 + ldr r1, _020558EC ; =TEAM_MEMBER_TABLE_PTR + mov r3, #0 + ldr r2, [r1] + ldr r1, _020558F0 ; =0x0000022B + b _020558DC +_020558A8: + cmp r2, r0 + bne _020558D4 + ldrb r0, [r2] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _020558E4 + mov r0, r3, lsl #0x10 + mov r0, r0, asr #0x10 + bx lr +_020558D4: + add r3, r3, #1 + add r2, r2, #0x44 +_020558DC: + cmp r3, r1 + blt _020558A8 +_020558E4: + mvn r0, #0 + bx lr + .align 2, 0 +_020558EC: .word TEAM_MEMBER_TABLE_PTR +_020558F0: .word 0x0000022B + arm_func_end sub_02055894 + + arm_func_start GetFirstMatchingMemberIdx +GetFirstMatchingMemberIdx: ; 0x020558F4 + stmdb sp!, {r4, lr} + ldr r1, _0205595C ; =TEAM_MEMBER_TABLE_PTR + mov r4, #5 + ldr r1, [r1] + mov r3, #0 + add lr, r1, #0x154 + mov ip, #1 + ldr r1, _02055960 ; =0x0000022B + b _0205594C +_02055918: + ldrb r2, [lr] + tst r2, #1 + movne r2, ip + moveq r2, r3 + tst r2, #0xff + beq _02055944 + ldrsh r2, [lr, #4] + cmp r2, r0 + moveq r0, r4, lsl #0x10 + moveq r0, r0, asr #0x10 + ldmeqia sp!, {r4, pc} +_02055944: + add r4, r4, #1 + add lr, lr, #0x44 +_0205594C: + cmp r4, r1 + blt _02055918 + mvn r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_0205595C: .word TEAM_MEMBER_TABLE_PTR +_02055960: .word 0x0000022B + arm_func_end GetFirstMatchingMemberIdx + + arm_func_start GetFirstEmptyMemberIdx +GetFirstEmptyMemberIdx: ; 0x02055964 + stmdb sp!, {r3, lr} + ldr r1, _020559CC ; =TEAM_MEMBER_TABLE_PTR + cmp r0, #0x214 + ldr r0, [r1] + ldreq lr, _020559D0 ; =0x0000022B + add r3, r0, #0x154 + ldrne r0, _020559D4 ; =_022B5788 + mov ip, #5 + ldrne lr, [r0] + mov r0, #0 + mov r1, #1 + b _020559BC +_02055994: + ldrb r2, [r3] + tst r2, #1 + movne r2, r1 + moveq r2, r0 + tst r2, #0xff + moveq r0, ip, lsl #0x10 + moveq r0, r0, asr #0x10 + ldmeqia sp!, {r3, pc} + add ip, ip, #1 + add r3, r3, #0x44 +_020559BC: + cmp ip, lr + blt _02055994 + mvn r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_020559CC: .word TEAM_MEMBER_TABLE_PTR +_020559D0: .word 0x0000022B +_020559D4: .word _022B5788 + arm_func_end GetFirstEmptyMemberIdx + + arm_func_start sub_020559D8 +sub_020559D8: ; 0x020559D8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr r1, _02055B18 ; =TEAM_MEMBER_TABLE_PTR + mov r4, #0 + ldr lr, [r1] + mov r8, r0 + mov r2, r4 + mov r3, #1 + mvn r1, #0 +_020559F8: + ldrb r0, [lr] + add lr, lr, #0x44 + tst r0, #1 + movne r0, r3 + moveq r0, r2 + tst r0, #0xff + mov r0, r4, lsl #1 + strneh r4, [r8, r0] + add r4, r4, #1 + streqh r1, [r8, r0] + cmp r4, #5 + blt _020559F8 + mov r2, #0 + mov r3, #1 + ldr r0, _02055B1C ; =0x0000022B + b _02055B0C +_02055A38: + ldrb r1, [lr] + tst r1, #1 + movne r1, r3 + moveq r1, r2 + tst r1, #0xff + bne _02055AFC + mvn ip, #0 + mov r0, r4, lsl #1 + mov r7, lr + mov r6, r4 + strh ip, [r8, r0] + add lr, lr, #0x44 + add r4, r4, #1 + add sb, ip, #0x22c + b _02055AD4 +_02055A74: + ldrb r0, [lr] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02055AC4 + mov r5, r7 + mov fp, lr + add r7, r7, #0x44 + mov sl, #4 +_02055A9C: + ldmia fp!, {r0, r1, r2, r3} + stmia r5!, {r0, r1, r2, r3} + subs sl, sl, #1 + bne _02055A9C + ldr r0, [fp] + str r0, [r5] + mov r0, r4, lsl #1 + strh r6, [r8, r0] + add r6, r6, #1 + b _02055ACC +_02055AC4: + mov r0, r4, lsl #1 + strh ip, [r8, r0] +_02055ACC: + add r4, r4, #1 + add lr, lr, #0x44 +_02055AD4: + cmp r4, sb + blt _02055A74 + mov r1, #0 + ldr r0, _02055B1C ; =0x0000022B + b _02055AF0 +_02055AE8: + strb r1, [r7], #0x44 + add r6, r6, #1 +_02055AF0: + cmp r6, r0 + blt _02055AE8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02055AFC: + mov r1, r4, lsl #1 + strh r4, [r8, r1] + add r4, r4, #1 + add lr, lr, #0x44 +_02055B0C: + cmp r4, r0 + blt _02055A38 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02055B18: .word TEAM_MEMBER_TABLE_PTR +_02055B1C: .word 0x0000022B + arm_func_end sub_020559D8 + + arm_func_start sub_02055B20 +sub_02055B20: ; 0x02055B20 + stmdb sp!, {r3, r4, r5, lr} + ldr r2, _02055B74 ; =TEAM_MEMBER_TABLE_PTR + mov r1, #0x44 + smulbb r4, r0, r1 + cmp r0, #5 + ldr r5, [r2] + movlt r0, #0 + ldmltia sp!, {r3, r4, r5, pc} + ldrb r1, [r5, r4] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + bl sub_020564B0 + cmp r0, #0 + mov r0, #0 + streqb r0, [r5, r4] + moveq r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02055B74: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02055B20 + + arm_func_start sub_02055B78 +sub_02055B78: ; 0x02055B78 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x58 + ldr r4, _02055CC4 ; =TEAM_MEMBER_TABLE_PTR + mov lr, #1 + mov r6, r1 + mov r7, r0 + mov ip, #0 + ldr r4, [r4] + mov r1, #0x44 + mov r0, r6 + mov r5, r3 + strb lr, [sp, #0x14] + strb r2, [sp, #0x16] + strb ip, [sp, #0x17] + strb lr, [sp, #0x15] + smlabb r4, r7, r1, r4 + bl GetBaseHp + strh r0, [sp, #0x1e] + mov r0, r6 + mov r1, #0 + bl GetBaseOffensiveStat + strb r0, [sp, #0x20] + mov r0, r6 + mov r1, #1 + bl GetBaseOffensiveStat + strb r0, [sp, #0x21] + mov r0, r6 + mov r1, #0 + bl GetBaseDefensiveStat + strb r0, [sp, #0x22] + mov r0, r6 + mov r1, #1 + bl GetBaseDefensiveStat + strb r0, [sp, #0x23] + mov r0, #0 + mov r2, #1 + strb r0, [sp, #0x1a] + strb r0, [sp, #0x1b] + add r0, sp, #0x28 + mov r1, r6 + strh r2, [sp, #0x1c] + bl EnableAllLearnableIqSkills + mov r2, #0 + add r0, sp, #0x36 + mov r1, r6 + strh r6, [sp, #0x18] + str r2, [sp, #0x24] + strb r2, [sp, #0x34] + bl sub_02053F10 + cmp r5, #0 + beq _02055C58 + add r0, sp, #0x4e + mov r1, r5 + mov r2, #0xa + bl StrncpySimple + b _02055C74 +_02055C58: + add r0, sp, #0 + mov r1, r6 + bl GetNameRaw + add r0, sp, #0x4e + add r1, sp, #0 + mov r2, #0xa + bl StrncpyName +_02055C74: + add r6, sp, #0x14 + mov r5, #4 +_02055C7C: + ldmia r6!, {r0, r1, r2, r3} + stmia r4!, {r0, r1, r2, r3} + subs r5, r5, #1 + bne _02055C7C + ldr r0, [r6] + cmp r7, #0 + str r0, [r4] + cmpne r7, #2 + mov r0, r7 + bne _02055CAC + bl TryAddMonsterToActiveTeam + b _02055CB0 +_02055CAC: + bl sub_02056554 +_02055CB0: + ldr r0, _02055CC8 ; =_020A3350 + mov r1, r7 + bl Debug_Print0 + add sp, sp, #0x58 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02055CC4: .word TEAM_MEMBER_TABLE_PTR +_02055CC8: .word _020A3350 + arm_func_end sub_02055B78 + + arm_func_start sub_02055CCC +sub_02055CCC: ; 0x02055CCC + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + ldrsh r0, [r5, #4] + bl GetFirstEmptyMemberIdx + mov r4, r0 + mvn r0, #0 + cmp r4, r0 + beq _02055D38 + ldr r1, _02055D40 ; =TEAM_MEMBER_TABLE_PTR + mov r0, #0x44 + ldr r1, [r1] + mov r6, r5 + smlabb lr, r4, r0, r1 + mov ip, #4 +_02055D04: + ldmia r6!, {r0, r1, r2, r3} + stmia lr!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _02055D04 + ldr r0, [r6] + str r0, [lr] + ldrsh r0, [r5, #4] + bl SetPokemonJoined + ldrsh r0, [r5, #4] + cmp r0, #0x214 + ldreq r1, _02055D44 ; =0x0000022B + ldreq r0, _02055D48 ; =_022B5788 + streq r1, [r0] +_02055D38: + mov r0, r4 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02055D40: .word TEAM_MEMBER_TABLE_PTR +_02055D44: .word 0x0000022B +_02055D48: .word _022B5788 + arm_func_end sub_02055CCC + + arm_func_start sub_02055D4C +sub_02055D4C: ; 0x02055D4C + stmdb sp!, {r3, lr} + bl sub_02055CCC + mvn r1, #0 + cmp r0, r1 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + ldr r2, _02055D78 ; =TEAM_MEMBER_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + smlabb r0, r0, r1, r2 + ldmia sp!, {r3, pc} + .align 2, 0 +_02055D78: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02055D4C + + arm_func_start sub_02055D7C +sub_02055D7C: ; 0x02055D7C + stmdb sp!, {r3, r4, r5, lr} + mvn r2, #0 + mov r5, r1 + cmp r0, r2 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r2, _02055DCC ; =TEAM_MEMBER_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + mov r4, r5 + smlabb lr, r0, r1, r2 + mov ip, #4 +_02055DA8: + ldmia r4!, {r0, r1, r2, r3} + stmia lr!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _02055DA8 + ldr r0, [r4] + str r0, [lr] + ldrsh r0, [r5, #4] + bl SetPokemonJoined + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02055DCC: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02055D7C + + arm_func_start sub_02055DD0 +sub_02055DD0: ; 0x02055DD0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x4c + ldrb ip, [sp, #0x58] + mov r5, r0 + mov r4, r1 + mov lr, r2 + str r3, [sp] + add r0, sp, #8 + mov r1, r5 + mov r2, r4 + mov r3, lr + str ip, [sp, #4] + bl sub_02052CF4 + add r0, sp, #8 + bl sub_02055D4C + add sp, sp, #0x4c + ldmia sp!, {r4, r5, pc} + arm_func_end sub_02055DD0 + + arm_func_start sub_02055E14 +sub_02055E14: ; 0x02055E14 + stmdb sp!, {r4, r5, r6, lr} + mov r3, r1 + ldrb r1, [r3] + mov r4, r0 + add r0, r3, #0x14 + and r1, r1, #1 + strh r1, [r4] + ldrb r1, [r3, #1] + add r6, r4, #0x18 + add r5, r3, #0x22 + strb r1, [r4, #4] + ldrb r1, [r3, #2] + add lr, r4, #0x2a + mov ip, #0xc + strb r1, [r4, #5] + ldrb r1, [r3, #3] + strb r1, [r4, #6] + ldrsh r1, [r3, #4] + strh r1, [r4, #8] + ldrb r1, [r3, #6] + strb r1, [r4, #0xa] + ldrb r1, [r3, #7] + strb r1, [r4, #0xb] + ldrsh r1, [r3, #8] + strh r1, [r4, #0xc] + ldrsh r1, [r3, #0xa] + strh r1, [r4, #0xe] + ldrb r1, [r3, #0xc] + strb r1, [r4, #0x10] + ldrb r1, [r3, #0xd] + strb r1, [r4, #0x11] + ldrb r1, [r3, #0xe] + strb r1, [r4, #0x12] + ldrb r1, [r3, #0xf] + strb r1, [r4, #0x13] + ldmia r0, {r0, r1, r2} + stmia r6, {r0, r1, r2} + ldr r0, [r3, #0x10] + str r0, [r4, #0x14] + ldrb r0, [r3, #0x20] + strb r0, [r4, #0x24] +_02055EB8: + ldrh r0, [r5], #2 + subs ip, ip, #1 + strh r0, [lr], #2 + bne _02055EB8 + add r0, r4, #0x42 + add r1, r3, #0x3a + mov r2, #0xa + bl StrncpySimple + mov r2, #0 + mov r1, r2 +_02055EE0: + add r0, r4, r2 + add r2, r2, #1 + strb r1, [r0, #2] + cmp r2, #2 + blt _02055EE0 + strb r1, [r4, #0x25] + strh r1, [r4, #0x26] + strh r1, [r4, #0x28] + ldmia sp!, {r4, r5, r6, pc} + arm_func_end sub_02055E14 + + arm_func_start sub_02055F04 +sub_02055F04: ; 0x02055F04 + stmdb sp!, {r4, r5, r6, lr} + mov r3, r1 + ldrh r1, [r3] + mov ip, r0 + add r0, r3, #0x18 + and r1, r1, #1 + strb r1, [ip] + ldrb r1, [r3, #4] + add r6, ip, #0x14 + add r5, r3, #0x2a + strb r1, [ip, #1] + ldrb r1, [r3, #5] + add r4, ip, #0x22 + mov lr, #0xc + strb r1, [ip, #2] + ldrb r1, [r3, #6] + strb r1, [ip, #3] + ldrsh r1, [r3, #8] + strh r1, [ip, #4] + ldrb r1, [r3, #0xa] + strb r1, [ip, #6] + ldrb r1, [r3, #0xb] + strb r1, [ip, #7] + ldrsh r1, [r3, #0xc] + strh r1, [ip, #8] + ldrsh r1, [r3, #0xe] + strh r1, [ip, #0xa] + ldrb r1, [r3, #0x10] + strb r1, [ip, #0xc] + ldrb r1, [r3, #0x11] + strb r1, [ip, #0xd] + ldrb r1, [r3, #0x12] + strb r1, [ip, #0xe] + ldrb r1, [r3, #0x13] + strb r1, [ip, #0xf] + ldmia r0, {r0, r1, r2} + stmia r6, {r0, r1, r2} + ldr r0, [r3, #0x14] + str r0, [ip, #0x10] + ldrb r0, [r3, #0x24] + strb r0, [ip, #0x20] +_02055FA8: + ldrh r0, [r5], #2 + subs lr, lr, #1 + strh r0, [r4], #2 + bne _02055FA8 + add r0, ip, #0x3a + add r1, r3, #0x42 + mov r2, #0xa + bl StrncpySimple + ldmia sp!, {r4, r5, r6, pc} + arm_func_end sub_02055F04 + + arm_func_start sub_02055FCC +sub_02055FCC: ; 0x02055FCC + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl IsValidTeamMember + cmp r0, #0 + beq _02056068 + mov r0, r4 + bl GetItemMoveId16 + mov r4, r0 + mov r0, r5 + bl GetTeamMember + mov lr, #0 + mov r3, lr + mov ip, #1 + mov r2, #6 + b _02056040 +_0205600C: + smlabb r5, lr, r2, r0 + ldrb r1, [r5, #0x22] + tst r1, #1 + movne r1, ip + moveq r1, r3 + tst r1, #0xff + beq _02056034 + ldrh r1, [r5, #0x24] + cmp r4, r1 + beq _02056048 +_02056034: + add r1, lr, #1 + mov r1, r1, lsl #0x10 + mov lr, r1, asr #0x10 +_02056040: + cmp lr, #4 + blt _0205600C +_02056048: + cmp lr, #4 + blt _02056068 + ldrsh r1, [r0, #4] + mov r0, r4 + bl sub_02053D1C + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, pc} +_02056068: + mov r0, #0 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02055FCC + + arm_func_start IsMonsterNotNicknamed +IsMonsterNotNicknamed: ; 0x02056070 + ldr ip, _02056080 ; =StrcmpMonsterName + ldrsh r1, [r0, #4] + add r0, r0, #0x3a + bx ip + .align 2, 0 +_02056080: .word StrcmpMonsterName + arm_func_end IsMonsterNotNicknamed + + arm_func_start sub_02056084 +sub_02056084: ; 0x02056084 + ldr ip, _02056090 ; =sub_02054F44 + add r1, r1, #0x3a + bx ip + .align 2, 0 +_02056090: .word sub_02054F44 + arm_func_end sub_02056084 + + arm_func_start sub_02056094 +sub_02056094: ; 0x02056094 + ldr ip, _020560A0 ; =sub_02054FA0 + add r1, r1, #0x3a + bx ip + .align 2, 0 +_020560A0: .word sub_02054FA0 + arm_func_end sub_02056094 + + arm_func_start sub_020560A4 +sub_020560A4: ; 0x020560A4 + cmp r0, r1 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bx lr + arm_func_end sub_020560A4 + + arm_func_start sub_020560B8 +sub_020560B8: ; 0x020560B8 + ldr ip, _020560C4 ; =SetActiveTeam + mov r0, #0 + bx ip + .align 2, 0 +_020560C4: .word SetActiveTeam + arm_func_end sub_020560B8 + + arm_func_start RemoveActiveMembersFromAllTeams +RemoveActiveMembersFromAllTeams: ; 0x020560C8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov lr, #0 + ldr r7, _02056154 ; =TEAM_MEMBER_TABLE_PTR + mov r1, lr + mvn r0, #0 + mov r2, lr + mov r4, #0x68 + mov r6, #0x1a0 +_020560E8: + mul ip, lr, r6 + mov r3, r2 +_020560F0: + ldr r5, [r7] + add r5, ip, r5 + mla r5, r3, r4, r5 + add r5, r5, #0x9000 + strb r1, [r5, #0x36c] + ldr r5, [r7] + add r5, r5, lr, lsl #3 + add r5, r5, r3, lsl #1 + add r5, r5, #0x9800 + add r3, r3, #1 + strh r0, [r5, #0x56] + cmp r3, #4 + blt _020560F0 + ldr r3, [r7] + add r3, r3, lr, lsl #1 + add r3, r3, #0x9800 + strh r0, [r3, #0x50] + ldr r3, [r7] + add r3, r3, lr + add r3, r3, #0x9000 + add lr, lr, #1 + strb r1, [r3, #0x874] + cmp lr, #3 + blt _020560E8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02056154: .word TEAM_MEMBER_TABLE_PTR + arm_func_end RemoveActiveMembersFromAllTeams + + arm_func_start RemoveActiveMembersFromSpecialEpisodeTeam +RemoveActiveMembersFromSpecialEpisodeTeam: ; 0x02056158 + stmdb sp!, {r3, lr} + mov lr, #0 + ldr r3, _020561BC ; =TEAM_MEMBER_TABLE_PTR + mov r0, lr + mvn ip, #0 + mov r1, #0x68 +_02056170: + ldr r2, [r3] + mla r2, lr, r1, r2 + add r2, r2, #0x9000 + strb r0, [r2, #0x50c] + ldr r2, [r3] + add r2, r2, lr, lsl #1 + add r2, r2, #0x9800 + add lr, lr, #1 + strh ip, [r2, #0x5e] + cmp lr, #4 + blt _02056170 + ldr r2, _020561BC ; =TEAM_MEMBER_TABLE_PTR + ldr r1, [r2] + add r1, r1, #0x9800 + strh ip, [r1, #0x52] + ldr r1, [r2] + add r1, r1, #0x9000 + strb r0, [r1, #0x875] + ldmia sp!, {r3, pc} + .align 2, 0 +_020561BC: .word TEAM_MEMBER_TABLE_PTR + arm_func_end RemoveActiveMembersFromSpecialEpisodeTeam + + arm_func_start RemoveActiveMembersFromRescueTeam +RemoveActiveMembersFromRescueTeam: ; 0x020561C0 + stmdb sp!, {r3, lr} + mov lr, #0 + ldr r3, _02056224 ; =TEAM_MEMBER_TABLE_PTR + mov r0, lr + mvn ip, #0 + mov r1, #0x68 +_020561D8: + ldr r2, [r3] + mla r2, lr, r1, r2 + add r2, r2, #0x9000 + strb r0, [r2, #0x6ac] + ldr r2, [r3] + add r2, r2, lr, lsl #1 + add r2, r2, #0x9800 + add lr, lr, #1 + strh ip, [r2, #0x66] + cmp lr, #4 + blt _020561D8 + ldr r2, _02056224 ; =TEAM_MEMBER_TABLE_PTR + ldr r1, [r2] + add r1, r1, #0x9800 + strh ip, [r1, #0x54] + ldr r1, [r2] + add r1, r1, #0x9000 + strb r0, [r1, #0x876] + ldmia sp!, {r3, pc} + .align 2, 0 +_02056224: .word TEAM_MEMBER_TABLE_PTR + arm_func_end RemoveActiveMembersFromRescueTeam + + arm_func_start sub_02056228 +sub_02056228: ; 0x02056228 + ldr r1, _0205625C ; =0x000055AA + cmp r0, r1 + moveq r0, #1 + bxeq lr + ldr r1, _02056260 ; =0x00005AA5 + cmp r0, r1 + moveq r0, #1 + bxeq lr + cmp r0, #0 + movlt r0, #1 + movge r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_0205625C: .word 0x000055AA +_02056260: .word 0x00005AA5 + arm_func_end sub_02056228 + + arm_func_start CheckTeamMemberIdx +CheckTeamMemberIdx: ; 0x02056264 + ldr r1, _0205628C ; =0x000055AA + cmp r0, r1 + moveq r0, #1 + bxeq lr + ldr r1, _02056290 ; =0x00005AA5 + cmp r0, r1 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_0205628C: .word 0x000055AA +_02056290: .word 0x00005AA5 + arm_func_end CheckTeamMemberIdx + + arm_func_start IsMonsterIdInNormalRange +IsMonsterIdInNormalRange: ; 0x02056294 + cmp r0, #0 + blt _020562AC + ldr r1, _020562B4 ; =0x0000022B + cmp r0, r1 + movlt r0, #1 + bxlt lr +_020562AC: + mov r0, #0 + bx lr + .align 2, 0 +_020562B4: .word 0x0000022B + arm_func_end IsMonsterIdInNormalRange + + arm_func_start sub_020562B8 +sub_020562B8: ; 0x020562B8 + cmp r0, #0 + movlt r0, #1 + movge r0, #0 + and r0, r0, #0xff + bx lr + arm_func_end sub_020562B8 + + arm_func_start SetActiveTeam +SetActiveTeam: ; 0x020562CC + ldr r3, _02056314 ; =TEAM_MEMBER_TABLE_PTR + mov r2, #0x1a0 + ldr r1, [r3] + add r1, r1, #0x9000 + strb r0, [r1, #0x877] + ldr ip, [r3] + add r1, ip, #0x36c + add r1, r1, #0x9000 + mla r2, r0, r2, r1 + add r1, ip, #0x9000 + str r2, [r1, #0x84c] + ldr r2, [r3] + add r1, r2, #0x56 + add r1, r1, #0x9800 + add r1, r1, r0, lsl #3 + add r0, r2, #0x9000 + str r1, [r0, #0x870] + bx lr + .align 2, 0 +_02056314: .word TEAM_MEMBER_TABLE_PTR + arm_func_end SetActiveTeam + + arm_func_start sub_02056318 +sub_02056318: ; 0x02056318 + ldr r1, _02056338 ; =TEAM_MEMBER_TABLE_PTR + ldr r2, [r1] + add r1, r2, #0x9000 + ldrb r1, [r1, #0x877] + add r1, r2, r1 + add r1, r1, #0x9000 + strb r0, [r1, #0x874] + bx lr + .align 2, 0 +_02056338: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056318 + + arm_func_start sub_0205633C +sub_0205633C: ; 0x0205633C + ldr r0, _0205635C ; =TEAM_MEMBER_TABLE_PTR + ldr r1, [r0] + add r0, r1, #0x9000 + ldrb r0, [r0, #0x877] + add r0, r1, r0 + add r0, r0, #0x9000 + ldrb r0, [r0, #0x874] + bx lr + .align 2, 0 +_0205635C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_0205633C + + arm_func_start sub_02056360 +sub_02056360: ; 0x02056360 + ldr r0, _02056388 ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + add r0, r0, #0x9000 + ldrb r1, [r0, #0x874] + cmp r1, #0 + ldreqb r0, [r0, #0x875] + cmpeq r0, #0 + movne r0, #1 + moveq r0, #0 + bx lr + .align 2, 0 +_02056388: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056360 + + arm_func_start GetActiveTeamMember +GetActiveTeamMember: ; 0x0205638C + mvn r1, #0 + cmp r0, r1 + moveq r0, #0 + bxeq lr + ldr r1, _020563B8 ; =TEAM_MEMBER_TABLE_PTR + mov r2, #0x68 + ldr r1, [r1] + add r1, r1, #0x9000 + ldr r1, [r1, #0x84c] + smlabb r0, r0, r2, r1 + bx lr + .align 2, 0 +_020563B8: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetActiveTeamMember + + arm_func_start GetActiveRosterIndex +GetActiveRosterIndex: ; 0x020563BC + mvn r1, #0 + cmp r0, r1 + beq _02056404 + ldr r1, _0205640C ; =TEAM_MEMBER_TABLE_PTR + mov ip, #0 + ldr r1, [r1] + add r1, r1, #0x9000 + b _020563FC +_020563DC: + ldr r3, [r1, #0x870] + mov r2, ip, lsl #1 + ldrsh r2, [r3, r2] + cmp r0, r2 + moveq r0, ip, lsl #0x10 + moveq r0, r0, asr #0x10 + bxeq lr + add ip, ip, #1 +_020563FC: + cmp ip, #4 + blt _020563DC +_02056404: + mvn r0, #0 + bx lr + .align 2, 0 +_0205640C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetActiveRosterIndex + + arm_func_start sub_02056410 +sub_02056410: ; 0x02056410 + mvn r1, #0 + cmp r0, r1 + beq _02056454 + ldr r1, _0205645C ; =TEAM_MEMBER_TABLE_PTR + mov ip, #0 + ldr r1, [r1] + add r1, r1, #0x9000 + b _0205644C +_02056430: + ldr r3, [r1, #0x870] + mov r2, ip, lsl #1 + ldrsh r2, [r3, r2] + cmp r0, r2 + moveq r0, #1 + bxeq lr + add ip, ip, #1 +_0205644C: + cmp ip, #4 + blt _02056430 +_02056454: + mov r0, #0 + bx lr + .align 2, 0 +_0205645C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056410 + + arm_func_start sub_02056460 +sub_02056460: ; 0x02056460 + mvn r2, #0 + cmp r0, r2 + beq _020564A4 + ldr r2, _020564AC ; =TEAM_MEMBER_TABLE_PTR + mov r3, #0 + ldr r2, [r2] + add r2, r2, r1, lsl #3 + b _0205649C +_02056480: + add r1, r2, r3, lsl #1 + add r1, r1, #0x9800 + ldrsh r1, [r1, #0x56] + cmp r0, r1 + moveq r0, #1 + bxeq lr + add r3, r3, #1 +_0205649C: + cmp r3, #4 + blt _02056480 +_020564A4: + mov r0, #0 + bx lr + .align 2, 0 +_020564AC: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056460 + + arm_func_start sub_020564B0 +sub_020564B0: ; 0x020564B0 + mvn r3, #0 + cmp r0, r3 + beq _020564F8 + ldr r1, _02056500 ; =TEAM_MEMBER_TABLE_PTR + ldr ip, [r1] + add r1, ip, #0x9000 + ldrb r2, [r1, #0x877] + add r2, ip, r2, lsl #1 + add r2, r2, #0x9800 + ldrsh ip, [r2, #0x50] + cmp ip, r3 + beq _020564F8 + ldr r2, [r1, #0x870] + mov r1, ip, lsl #1 + ldrsh r1, [r2, r1] + cmp r0, r1 + moveq r0, #1 + bxeq lr +_020564F8: + mov r0, #0 + bx lr + .align 2, 0 +_02056500: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_020564B0 + + arm_func_start sub_02056504 +sub_02056504: ; 0x02056504 + mvn r3, #0 + cmp r0, r3 + beq _02056548 + ldr r2, _02056550 ; =TEAM_MEMBER_TABLE_PTR + ldr ip, [r2] + add r2, ip, r1, lsl #1 + add r2, r2, #0x9800 + ldrsh r2, [r2, #0x50] + cmp r2, r3 + beq _02056548 + add r1, ip, r1, lsl #3 + add r1, r1, r2, lsl #1 + add r1, r1, #0x9800 + ldrsh r1, [r1, #0x56] + cmp r0, r1 + moveq r0, #1 + bxeq lr +_02056548: + mov r0, #0 + bx lr + .align 2, 0 +_02056550: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056504 + + arm_func_start sub_02056554 +sub_02056554: ; 0x02056554 + stmdb sp!, {r4, lr} + mvn r1, #0 + cmp r0, r1 + beq _020565E8 + ldr r1, _020565F0 ; =TEAM_MEMBER_TABLE_PTR + mov ip, #0 + ldr lr, [r1] + add r1, lr, #0x9000 + b _02056598 +_02056578: + ldr r3, [r1, #0x870] + mov r2, ip, lsl #1 + ldrsh r2, [r3, r2] + cmp r0, r2 + moveq r0, ip, lsl #0x10 + moveq r0, r0, asr #0x10 + ldmeqia sp!, {r4, pc} + add ip, ip, #1 +_02056598: + cmp ip, #4 + blt _02056578 + mov r4, #0 + add r1, lr, #0x9000 + mvn r2, #0 + b _020565E0 +_020565B0: + ldr r3, [r1, #0x870] + mov ip, r4, lsl #1 + ldrsh r3, [r3, ip] + cmp r3, r2 + bne _020565DC + add r1, lr, #0x9000 + ldr r2, [r1, #0x870] + mov r1, r4, lsl #0x10 + strh r0, [r2, ip] + mov r0, r1, asr #0x10 + ldmia sp!, {r4, pc} +_020565DC: + add r4, r4, #1 +_020565E0: + cmp r4, #4 + blt _020565B0 +_020565E8: + mvn r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_020565F0: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056554 + + arm_func_start sub_020565F4 +sub_020565F4: ; 0x020565F4 + stmdb sp!, {r4, lr} + mvn r2, #0 + cmp r0, r2 + beq _0205668C + ldr r2, _02056694 ; =TEAM_MEMBER_TABLE_PTR + mov ip, #0 + ldr lr, [r2] + add r3, lr, r1, lsl #3 + b _02056638 +_02056618: + add r2, r3, ip, lsl #1 + add r2, r2, #0x9800 + ldrsh r2, [r2, #0x56] + cmp r0, r2 + moveq r0, ip, lsl #0x10 + moveq r0, r0, asr #0x10 + ldmeqia sp!, {r4, pc} + add ip, ip, #1 +_02056638: + cmp ip, #4 + blt _02056618 + mov r4, #0 + add ip, lr, r1, lsl #3 + mvn r3, #0 + b _02056684 +_02056650: + add r2, ip, r4, lsl #1 + add r2, r2, #0x9800 + ldrsh r2, [r2, #0x56] + cmp r2, r3 + bne _02056680 + add r1, lr, r1, lsl #3 + add r1, r1, r4, lsl #1 + add r1, r1, #0x9800 + mov r2, r4, lsl #0x10 + strh r0, [r1, #0x56] + mov r0, r2, asr #0x10 + ldmia sp!, {r4, pc} +_02056680: + add r4, r4, #1 +_02056684: + cmp r4, #4 + blt _02056650 +_0205668C: + mvn r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_02056694: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_020565F4 + + arm_func_start sub_02056698 +sub_02056698: ; 0x02056698 + mvn r2, #0 + cmp r1, r2 + bxeq lr + ldr r2, _020566C0 ; =TEAM_MEMBER_TABLE_PTR + mov r3, r0, lsl #1 + ldr r0, [r2] + add r0, r0, #0x9000 + ldr r0, [r0, #0x870] + strh r1, [r0, r3] + bx lr + .align 2, 0 +_020566C0: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056698 + + arm_func_start sub_020566C4 +sub_020566C4: ; 0x020566C4 + stmdb sp!, {r3, lr} + mvn r1, #0 + cmp r0, r1 + beq _02056748 + ldr r2, _02056750 ; =TEAM_MEMBER_TABLE_PTR + mov r1, #0 + ldr lr, [r2] + add r2, lr, #0x9000 + b _02056740 +_020566E8: + ldr r3, [r2, #0x870] + mov ip, r1, lsl #1 + ldrsh r3, [r3, ip] + cmp r0, r3 + bne _0205673C + add r0, lr, #0x9000 + ldr r2, [r0, #0x870] + mvn r3, #0 + ldr r0, _02056750 ; =TEAM_MEMBER_TABLE_PTR + strh r3, [r2, ip] + ldr r2, [r0] + add r0, r2, #0x9000 + ldrb r0, [r0, #0x877] + add r0, r2, r0, lsl #1 + add r0, r0, #0x9800 + ldrsh r2, [r0, #0x50] + cmp r1, r2 + streqh r3, [r0, #0x50] + mov r0, r1, lsl #0x10 + mov r0, r0, asr #0x10 + ldmia sp!, {r3, pc} +_0205673C: + add r1, r1, #1 +_02056740: + cmp r1, #4 + blt _020566E8 +_02056748: + mvn r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_02056750: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_020566C4 + + arm_func_start TryAddMonsterToActiveTeam +TryAddMonsterToActiveTeam: ; 0x02056754 + stmdb sp!, {r4, lr} + mvn r1, #0 + cmp r0, r1 + beq _02056824 + ldr r1, _0205682C ; =TEAM_MEMBER_TABLE_PTR + mov ip, #0 + ldr lr, [r1] + add r1, lr, #0x9000 + b _020567B8 +_02056778: + ldr r3, [r1, #0x870] + mov r2, ip, lsl #1 + ldrsh r2, [r3, r2] + cmp r0, r2 + bne _020567B4 + ldr r1, _0205682C ; =TEAM_MEMBER_TABLE_PTR + mov r0, ip, lsl #0x10 + ldr r2, [r1] + mov r0, r0, asr #0x10 + add r1, r2, #0x9000 + ldrb r1, [r1, #0x877] + add r1, r2, r1, lsl #1 + add r1, r1, #0x9800 + strh r0, [r1, #0x50] + ldmia sp!, {r4, pc} +_020567B4: + add ip, ip, #1 +_020567B8: + cmp ip, #4 + blt _02056778 + mov r4, #0 + add r1, lr, #0x9000 + mvn r2, #0 + b _0205681C +_020567D0: + ldr r3, [r1, #0x870] + mov ip, r4, lsl #1 + ldrsh r3, [r3, ip] + cmp r3, r2 + bne _02056818 + add r1, lr, #0x9000 + ldr r2, [r1, #0x870] + ldr r1, _0205682C ; =TEAM_MEMBER_TABLE_PTR + strh r0, [r2, ip] + ldr r2, [r1] + mov r0, r4, lsl #0x10 + add r1, r2, #0x9000 + ldrb r1, [r1, #0x877] + mov r0, r0, asr #0x10 + add r1, r2, r1, lsl #1 + add r1, r1, #0x9800 + strh r0, [r1, #0x50] + ldmia sp!, {r4, pc} +_02056818: + add r4, r4, #1 +_0205681C: + cmp r4, #4 + blt _020567D0 +_02056824: + mvn r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_0205682C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end TryAddMonsterToActiveTeam + + arm_func_start sub_02056830 +sub_02056830: ; 0x02056830 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, #0 + mov r6, r7 + mov r4, r7 + mov r5, #1 +_02056844: + mov r0, r6 + bl GetActiveTeamMember + ldrb r0, [r0] + tst r0, #1 + movne r0, r5 + moveq r0, r4 + tst r0, #0xff + add r0, r6, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 + addeq r7, r7, #1 + cmp r6, #4 + blt _02056844 + mov r0, r7 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end sub_02056830 + + arm_func_start sub_02056880 +sub_02056880: ; 0x02056880 + ldr r0, _020568A0 ; =TEAM_MEMBER_TABLE_PTR + ldr r1, [r0] + add r0, r1, #0x9000 + ldrb r0, [r0, #0x877] + add r0, r1, r0, lsl #1 + add r0, r0, #0x9800 + ldrsh r0, [r0, #0x50] + bx lr + .align 2, 0 +_020568A0: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056880 + + arm_func_start sub_020568A4 +sub_020568A4: ; 0x020568A4 + ldr r1, _020568D8 ; =TEAM_MEMBER_TABLE_PTR + mvn r0, #0 + ldr r3, [r1] + add r1, r3, #0x9000 + ldrb r2, [r1, #0x877] + add r2, r3, r2, lsl #1 + add r2, r2, #0x9800 + ldrsh r2, [r2, #0x50] + cmp r2, r0 + ldrne r1, [r1, #0x870] + movne r0, r2, lsl #1 + ldrnesh r0, [r1, r0] + bx lr + .align 2, 0 +_020568D8: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_020568A4 + + arm_func_start sub_020568DC +sub_020568DC: ; 0x020568DC + ldr r1, _02056910 ; =TEAM_MEMBER_TABLE_PTR + mvn r3, #0 + ldr r2, [r1] + add r1, r2, r0, lsl #1 + add r1, r1, #0x9800 + ldrsh r1, [r1, #0x50] + cmp r1, r3 + addne r0, r2, r0, lsl #3 + addne r0, r0, r1, lsl #1 + addne r0, r0, #0x9800 + ldrnesh r3, [r0, #0x56] + mov r0, r3 + bx lr + .align 2, 0 +_02056910: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_020568DC + + arm_func_start sub_02056914 +sub_02056914: ; 0x02056914 + ldr r0, _0205695C ; =TEAM_MEMBER_TABLE_PTR + mvn r2, #0 + ldr ip, [r0] + add r0, ip, #0x9000 + ldrb r1, [r0, #0x877] + add r1, ip, r1, lsl #1 + add r1, r1, #0x9800 + ldrsh r3, [r1, #0x50] + cmp r3, r2 + ldrne r1, [r0, #0x870] + movne r0, r3, lsl #1 + ldrnesh r1, [r1, r0] + cmpne r1, r2 + moveq r0, #0 + bxeq lr + mov r0, #0x44 + smlabb r0, r1, r0, ip + bx lr + .align 2, 0 +_0205695C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056914 + + arm_func_start RemoveActiveMembersFromMainTeam +RemoveActiveMembersFromMainTeam: ; 0x02056960 + stmdb sp!, {r3, r4, r5, lr} + mov r0, #0 + ldr r2, _020569C8 ; =TEAM_MEMBER_TABLE_PTR + mov r5, r0 + mvn ip, #0 + mov r3, #1 +_02056978: + ldr r1, [r2] + mov lr, r5, lsl #1 + add r1, r1, #0x9000 + ldr r4, [r1, #0x870] + add r5, r5, #1 + ldrsh r1, [r4, lr] + cmp r1, ip + movne r0, r3 + strneh ip, [r4, lr] + cmp r5, #4 + blt _02056978 + ldr r1, _020569C8 ; =TEAM_MEMBER_TABLE_PTR + mvn r2, #0 + ldr r3, [r1] + add r1, r3, #0x9000 + ldrb r1, [r1, #0x877] + add r1, r3, r1, lsl #1 + add r1, r1, #0x9800 + strh r2, [r1, #0x50] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020569C8: .word TEAM_MEMBER_TABLE_PTR + arm_func_end RemoveActiveMembersFromMainTeam + + arm_func_start SetTeamSetupHeroAndPartnerOnly +SetTeamSetupHeroAndPartnerOnly: ; 0x020569CC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + bl GetMainCharacter1MemberIdx + mov r5, r0 + bl GetMainCharacter2MemberIdx + mov r6, r0 + bl GetMainCharacter3MemberIdx +#ifdef JAPAN + mov sl, #0 + ldr r1, _02056AAC ; =TEAM_MEMBER_TABLE_PTR + mov r7, r0 + ldr r0, [r1] + mov fp, sl + add r0, r0, #0x9000 + ldr sb, [r0, #0x84c] +#else + mov r8, #0 + ldr r1, _02056AAC ; =TEAM_MEMBER_TABLE_PTR + mov r7, r0 + ldr r1, [r1] + mov sl, r8 + add r0, r1, #0x9000 + ldr sb, [r0, #0x84c] + mov fp, r8 +#endif + mov r4, #1 +_02056A08: + ldrb r0, [sb] + tst r0, #1 + movne r0, r4 + moveq r0, fp + tst r0, #0xff + ldrnesh r0, [sb, #8] + cmpne r0, r5 + cmpne r0, r6 + cmpne r0, r7 + beq _02056A40 + mov r0, sl, lsl #0x10 + mov r0, r0, asr #0x10 + mov r8, #1 + bl sub_02058138 +_02056A40: + add sl, sl, #1 + cmp sl, #4 + add sb, sb, #0x68 + blt _02056A08 + bl RemoveActiveMembersFromMainTeam + mvn r0, #0 + cmp r5, r0 + beq _02056A68 + mov r0, r5 + bl TryAddMonsterToActiveTeam +_02056A68: + mvn r0, #0 + cmp r6, r0 + beq _02056A7C + mov r0, r6 + bl sub_02056554 +_02056A7C: + mvn r0, #0 + cmp r7, r0 + beq _02056A90 + mov r0, r7 + bl sub_02056554 +_02056A90: + ldr r0, _02056AAC ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + add r0, r0, #0x9000 + ldrb r0, [r0, #0x877] + bl sub_02057464 + mov r0, r8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02056AAC: .word TEAM_MEMBER_TABLE_PTR + arm_func_end SetTeamSetupHeroAndPartnerOnly + + arm_func_start SetTeamSetupHeroOnly +SetTeamSetupHeroOnly: ; 0x02056AB0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + bl sub_020568A4 + ldr r1, _02056B54 ; =TEAM_MEMBER_TABLE_PTR + mov r7, r0 +#ifdef JAPAN + ldr r0, [r1] + mov sl, #0 + add r0, r0, #0x9000 + mov r6, #1 + ldr sb, [r0, #0x84c] + mov r5, sl +#else + mov r8, #0 + ldr r1, [r1] + mov r6, #1 + add r0, r1, #0x9000 + ldr sb, [r0, #0x84c] + mov sl, r8 + mov r5, r8 +#endif + mov r4, r6 +_02056AE0: + ldrb r0, [sb] + tst r0, #1 + movne r0, r6 + moveq r0, r5 + tst r0, #0xff + ldrnesh r0, [sb, #8] + cmpne r0, r7 + beq _02056B10 + mov r0, sl, lsl #0x10 + mov r0, r0, asr #0x10 + mov r8, r4 + bl sub_02058138 +_02056B10: + add sl, sl, #1 + cmp sl, #4 + add sb, sb, #0x68 + blt _02056AE0 + bl RemoveActiveMembersFromMainTeam + mvn r0, #0 + cmp r7, r0 + beq _02056B38 + mov r0, r7 + bl TryAddMonsterToActiveTeam +_02056B38: + ldr r0, _02056B54 ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + add r0, r0, #0x9000 + ldrb r0, [r0, #0x877] + bl sub_02057464 + mov r0, r8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02056B54: .word TEAM_MEMBER_TABLE_PTR + arm_func_end SetTeamSetupHeroOnly + + arm_func_start sub_02056B58 +sub_02056B58: ; 0x02056B58 + stmdb sp!, {r3, lr} + ldr r2, _02056BD0 ; =TEAM_MEMBER_TABLE_PTR + ldr ip, [r2] + add r0, ip, #0x9000 + ldrb r3, [r0, #0x877] + cmp r3, #2 + ldmneia sp!, {r3, pc} + add r0, ip, #0x9800 + ldrsh r1, [r0, #0x50] + add r0, ip, r3, lsl #1 + add r0, r0, #0x9800 + strh r1, [r0, #0x50] + mov lr, #0 +_02056B8C: + ldr r1, [r2] + mov ip, lr, lsl #1 + add r0, r1, lr, lsl #1 + add r0, r0, #0x9800 + add r1, r1, #0x9000 + ldrsh r3, [r0, #0x56] + ldr r0, [r1, #0x870] + add lr, lr, #1 + strh r3, [r0, ip] + cmp lr, #4 + blt _02056B8C + ldr r0, _02056BD0 ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + add r0, r0, #0x9000 + ldrb r0, [r0, #0x877] + bl sub_02057464 + ldmia sp!, {r3, pc} + .align 2, 0 +_02056BD0: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056B58 + + arm_func_start sub_02056BD4 +sub_02056BD4: ; 0x02056BD4 + stmdb sp!, {r3, lr} + ldr r0, _02056C1C ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + add r0, r0, #0x9000 + ldrb r0, [r0, #0x877] + cmp r0, #2 + ldmneia sp!, {r3, pc} + bl RemoveActiveMembersFromMainTeam + bl GetHeroMemberIdx + bl TryAddMonsterToActiveTeam + bl GetPartnerMemberIdx + bl sub_02056554 + ldr r0, _02056C1C ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + add r0, r0, #0x9000 + ldrb r0, [r0, #0x877] + bl sub_02057464 + ldmia sp!, {r3, pc} + .align 2, 0 +_02056C1C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056BD4 + + arm_func_start GetPartyMembers +GetPartyMembers: ; 0x02056C20 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #8 + mov r5, r0 + bl sub_020568A4 + mov r6, r0 + bl GetMainCharacter1MemberIdx + mov r7, r0 + bl GetMainCharacter2MemberIdx + mov r8, r0 + bl GetMainCharacter3MemberIdx + mov sb, r0 + cmp r5, #0 + mvn r0, #0 + addeq r5, sp, #0 + cmp r6, r0 + mov r4, #0 + mvn r0, #0 + strneh r6, [r5] + addne r4, r4, #1 + cmp r7, r0 + beq _02056C90 + mov r0, r7 + bl sub_02056410 + cmp r0, #0 + cmpne r7, r6 + movne r0, r4, lsl #1 + strneh r7, [r5, r0] + addne r4, r4, #1 +_02056C90: + mvn r0, #0 + cmp r8, r0 + beq _02056CB8 + mov r0, r8 + bl sub_02056410 + cmp r0, #0 + cmpne r8, r6 + movne r0, r4, lsl #1 + strneh r8, [r5, r0] + addne r4, r4, #1 +_02056CB8: + mvn r0, #0 + cmp sb, r0 + beq _02056CE0 + mov r0, sb + bl sub_02056410 + cmp r0, #0 + cmpne sb, r6 + movne r0, r4, lsl #1 + strneh sb, [r5, r0] + addne r4, r4, #1 +_02056CE0: + ldr r0, _02056D6C ; =TEAM_MEMBER_TABLE_PTR + mov r8, #0 + ldr r0, [r0] + mov r6, r8 + add r0, r0, #0x9000 + ldr sb, [r0, #0x84c] + mov r7, #1 + b _02056D58 +_02056D00: + ldrb r0, [sb] + tst r0, #2 + movne r0, r7 + moveq r0, r6 + tst r0, #0xff + beq _02056D50 + ldrsh sl, [sb, #8] + mov r0, sl + bl sub_020564B0 + cmp r0, #0 + bne _02056D50 + mov r0, sl + bl IsMainCharacter + cmp r0, #0 + bne _02056D50 + mov r0, r4, lsl #1 + add r4, r4, #1 + strh sl, [r5, r0] + cmp r4, #4 + bge _02056D60 +_02056D50: + add r8, r8, #1 + add sb, sb, #0x68 +_02056D58: + cmp r8, #4 + blt _02056D00 +_02056D60: + mov r0, r4 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02056D6C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end GetPartyMembers + + arm_func_start sub_02056D70 +sub_02056D70: ; 0x02056D70 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #8 + movs sl, r0 + ldr r0, _02056E00 ; =TEAM_MEMBER_TABLE_PTR + mov r6, #0 + ldr r0, [r0] + mov sb, #0 + add r0, r0, #0x9000 + ldr r7, [r0, #0x84c] + addeq sl, sp, #0 + mov r4, r6 + mov r5, #1 +_02056DA0: + ldrb r0, [r7] + tst r0, #2 + movne r0, r5 + moveq r0, r4 + tst r0, #0xff + beq _02056DE4 + ldrsh r8, [r7, #8] + mov r0, r8 + bl IsMonsterIdInNormalRange + cmp r0, #0 + beq _02056DE4 + mov r0, r8 + bl sub_020564B0 + cmp r0, #0 + moveq r0, sb, lsl #1 + streqh r8, [sl, r0] + addeq sb, sb, #1 +_02056DE4: + add r6, r6, #1 + cmp r6, #4 + add r7, r7, #0x68 + blt _02056DA0 + mov r0, sb + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02056E00: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056D70 + + arm_func_start sub_02056E04 +sub_02056E04: ; 0x02056E04 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #8 + movs sl, r0 + ldr r0, _02056EB4 ; =TEAM_MEMBER_TABLE_PTR + mov r6, #0 + ldr r0, [r0] + mov sb, #0 + add r0, r0, #0x9000 + ldr r7, [r0, #0x84c] + addeq sl, sp, #0 + mov r4, r6 + mov r5, #1 +_02056E34: + ldrb r0, [r7] + tst r0, #2 + movne r0, r5 + moveq r0, r4 + tst r0, #0xff + beq _02056E98 + ldrsh r8, [r7, #8] + mov r0, r8 + bl IsMonsterIdInNormalRange + cmp r0, #0 + beq _02056E98 + mov r0, r8 + bl sub_02055410 + cmp r0, #0 + bne _02056E98 + mov r0, r8 + bl sub_02055474 + cmp r0, #0 + bne _02056E98 + mov r0, r8 + bl sub_020554D8 + cmp r0, #0 + moveq r0, sb, lsl #1 + streqh r8, [sl, r0] + addeq sb, sb, #1 +_02056E98: + add r6, r6, #1 + cmp r6, #4 + add r7, r7, #0x68 + blt _02056E34 + mov r0, sb + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02056EB4: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056E04 + + arm_func_start sub_02056EB8 +sub_02056EB8: ; 0x02056EB8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr r1, _02056F5C ; =TEAM_MEMBER_TABLE_PTR + mov r5, #0 + ldr r1, [r1] + mov r8, r0 + add r0, r1, #0x9000 + ldr r4, [r0, #0x84c] + mov r6, r5 + mov r7, r5 + mov sb, r5 + mov sl, #1 +_02056EE4: + ldrb r0, [r4] + tst r0, #1 + movne r0, sl + moveq r0, sb + tst r0, #0xff + beq _02056F1C + ldrsh r0, [r4, #8] + bl sub_02056410 + cmp r0, #0 + beq _02056F1C + ldrsh r0, [r4, #0xc] + bl GetBodySize + add r6, r6, r0 + add r5, r5, #1 +_02056F1C: + add r7, r7, #1 + cmp r7, #4 + add r4, r4, #0x68 + blt _02056EE4 + cmp r5, #4 + movge r0, #0 + ldmgeia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + cmp r8, #0 + beq _02056F4C + mov r0, r8 + bl GetBodySize + add r6, r6, r0 +_02056F4C: + cmp r6, #6 + movgt r0, #0 + movle r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02056F5C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056EB8 + + arm_func_start sub_02056F60 +sub_02056F60: ; 0x02056F60 + stmdb sp!, {r3, lr} + mvn r1, #0 + cmp r0, r1 + beq _02057000 + ldr r1, _0205700C ; =TEAM_MEMBER_TABLE_PTR + ldr r3, [r1] + add r1, r3, #0x9000 + ldrb r1, [r1, #0x877] + cmp r1, #0 + bne _02056FB8 + mov r2, #0 + b _02056FAC +_02056F90: + add r1, r3, r2, lsl #1 + add r1, r1, #0x9800 + ldrsh r1, [r1, #0x5e] + cmp r0, r1 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + add r2, r2, #1 +_02056FAC: + cmp r2, #4 + blt _02056F90 + b _02056FEC +_02056FB8: + cmp r1, #1 + bne _02056FEC + mov r2, #0 + b _02056FE4 +_02056FC8: + add r1, r3, r2, lsl #1 + add r1, r1, #0x9800 + ldrsh r1, [r1, #0x56] + cmp r0, r1 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + add r2, r2, #1 +_02056FE4: + cmp r2, #4 + blt _02056FC8 +_02056FEC: + mov r1, #0x44 + smlabb r0, r0, r1, r3 + ldrsh r0, [r0, #4] + bl sub_02056EB8 + ldmia sp!, {r3, pc} +_02057000: + mov r0, #0 + bl sub_02056EB8 + ldmia sp!, {r3, pc} + .align 2, 0 +_0205700C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02056F60 + + arm_func_start sub_02057010 +sub_02057010: ; 0x02057010 + ldr r1, _02057028 ; =TEAM_MEMBER_TABLE_PTR + ldr ip, _0205702C ; =sub_02057030 + ldr r1, [r1] + add r1, r1, #0x9000 + ldrb r1, [r1, #0x877] + bx ip + .align 2, 0 +_02057028: .word TEAM_MEMBER_TABLE_PTR +_0205702C: .word sub_02057030 + arm_func_end sub_02057010 + + arm_func_start sub_02057030 +sub_02057030: ; 0x02057030 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + mov sb, r1 + mov sl, r0 + mov r0, sb + bl sub_020568DC + mov r4, r0 + cmp sl, #0 + mvn r0, #0 + addeq sl, sp, #0 + mov r8, #0 + cmp r4, r0 + beq _0205707C + mov r0, r4 + bl IsValidTeamMember + cmp r0, #0 + strneh r4, [sl] + addne r8, r8, #1 + mvneq r4, #0 +_0205707C: + mov r7, #0 + mvn fp, #0 +_02057084: + ldr r0, _0205717C ; =TEAM_MEMBER_TABLE_PTR + ldr r2, [r0] + add r0, r2, sb, lsl #3 + add r0, r0, r7, lsl #1 + add r0, r0, #0x9800 + ldrsh r5, [r0, #0x56] + cmp r5, fp + cmpne r4, r5 + beq _020570F8 + mov r1, #0x44 + mov r0, r5 + smlabb r6, r5, r1, r2 + bl sub_02055410 + cmp r0, #0 + bne _020570EC + mov r0, r5 + bl sub_02055474 + cmp r0, #0 + bne _020570EC + mov r0, r5 + bl sub_020554D8 + cmp r0, #0 + bne _020570EC + ldrsh r0, [r6, #4] + cmp r0, #0x214 + bne _020570F8 +_020570EC: + mov r0, r8, lsl #1 + strh r5, [sl, r0] + add r8, r8, #1 +_020570F8: + add r7, r7, #1 + cmp r7, #4 + blt _02057084 + mov r0, #0 + ldr r3, _0205717C ; =TEAM_MEMBER_TABLE_PTR + mov r4, r0 + mvn r2, #0 +_02057114: + ldr r1, [r3] + add r1, r1, sb, lsl #3 + add r1, r1, r0, lsl #1 + add r1, r1, #0x9800 + ldrsh r6, [r1, #0x56] + cmp r6, r2 + beq _02057164 + mov r5, r4 + b _0205714C +_02057138: + mov r1, r5, lsl #1 + ldrsh r1, [sl, r1] + cmp r6, r1 + beq _02057154 + add r5, r5, #1 +_0205714C: + cmp r5, r8 + blt _02057138 +_02057154: + cmp r5, r8 + movge r1, r8, lsl #1 + strgeh r6, [sl, r1] + addge r8, r8, #1 +_02057164: + add r0, r0, #1 + cmp r0, #4 + blt _02057114 + mov r0, r8 + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0205717C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02057030 + + arm_func_start sub_02057180 +sub_02057180: ; 0x02057180 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x58 + sub sp, sp, #0x400 + add r0, sp, #0 + bl sub_020559D8 + mov r8, #0 + ldr fp, _020572E0 ; =_020A3398 + ldr r5, _020572E4 ; =TEAM_MEMBER_TABLE_PTR + add r6, sp, #0 + mov r7, r8 + mvn r4, #0 +_020571AC: + mov sb, r7 +_020571B0: + ldr r0, [r5] + add r0, r0, r8, lsl #3 + add r0, r0, sb, lsl #1 + add r0, r0, #0x9800 + ldrsh sl, [r0, #0x56] + cmp sl, r4 + beq _02057200 + mov r0, sl, lsl #1 + ldrsh r3, [r6, r0] + mov r0, fp + mov r1, r8 + mov r2, sl + bl Debug_Print0 + ldr r0, [r5] + mov r1, sl, lsl #1 + add r0, r0, r8, lsl #3 + add r0, r0, sb, lsl #1 + ldrsh r1, [r6, r1] + add r0, r0, #0x9800 + strh r1, [r0, #0x56] +_02057200: + add sb, sb, #1 + cmp sb, #4 + blt _020571B0 + add r8, r8, #1 + cmp r8, #3 + blt _020571AC + mov sb, #0 +_0205721C: + ldr r0, _020572E4 ; =TEAM_MEMBER_TABLE_PTR + mov sl, #0 + ldr r0, [r0] + mov r1, #0x1a0 + add r0, r0, #0x36c + add r0, r0, #0x9000 + mla r8, sb, r1, r0 + mov fp, #1 + add r7, sp, #0 + mov r5, sl + mov r6, sl + mvn r4, #0 +_0205724C: + ldrb r0, [r8] + tst r0, #1 + movne r0, fp + moveq r0, #0 + tst r0, #0xff + beq _020572B0 + ldrsh r2, [r8, #8] + ldr r0, _020572E8 ; =_020A33B8 + mov r1, sb + mov r3, r2, lsl #1 + ldrsh r3, [r7, r3] + bl Debug_Print0 + ldrsh r0, [r8, #8] + mov r1, r0, lsl #1 + ldrsh r1, [r7, r1] + cmp r1, r4 + streqb r6, [r8] + beq _020572B0 + bl IsMonsterIdInNormalRange + cmp r0, #0 + ldrnesh r0, [r8, #8] + movne r0, r0, lsl #1 + ldrnesh r0, [r7, r0] + strneh r0, [r8, #8] + streqb r5, [r8] +_020572B0: + add sl, sl, #1 + cmp sl, #4 + add r8, r8, #0x68 + blt _0205724C + and r0, sb, #0xff + bl sub_02057464 + add sb, sb, #1 + cmp sb, #3 + blt _0205721C + add sp, sp, #0x58 + add sp, sp, #0x400 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_020572E0: .word _020A3398 +_020572E4: .word TEAM_MEMBER_TABLE_PTR +_020572E8: .word _020A33B8 + arm_func_end sub_02057180 + + arm_func_start sub_020572EC +sub_020572EC: ; 0x020572EC + ldr r0, _02057304 ; =TEAM_MEMBER_TABLE_PTR + ldr ip, _02057308 ; =sub_0205730C + ldr r0, [r0] + add r0, r0, #0x9000 + ldrb r0, [r0, #0x877] + bx ip + .align 2, 0 +_02057304: .word TEAM_MEMBER_TABLE_PTR +_02057308: .word sub_0205730C + arm_func_end sub_020572EC + + arm_func_start sub_0205730C +sub_0205730C: ; 0x0205730C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r1, _0205739C ; =TEAM_MEMBER_TABLE_PTR + mov r4, r0 + ldr r0, [r1] + mov r8, #0 + add r0, r0, #0x36c + mov r1, #0x1a0 + add r0, r0, #0x9000 + mla r7, r4, r1, r0 + mov r5, r8 + mov r6, #1 +_02057338: + ldrb r0, [r7] + tst r0, #1 + movne r0, r6 + moveq r0, r5 + tst r0, #0xff + beq _02057388 + ldrsh r0, [r7, #8] + bl IsMonsterIdInNormalRange + cmp r0, #0 + beq _02057388 + ldrsh r0, [r7, #8] + bl IsValidTeamMember + cmp r0, #0 + beq _02057388 + ldrsh r1, [r7, #8] + mov r2, r8, lsl #0x10 + mov r0, r7 + mov r3, r4 + mov r2, r2, asr #0x10 + bl sub_02053174 +_02057388: + add r8, r8, #1 + cmp r8, #4 + add r7, r7, #0x68 + blt _02057338 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0205739C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_0205730C + + arm_func_start sub_020573A0 +sub_020573A0: ; 0x020573A0 + ldr r0, _020573B8 ; =TEAM_MEMBER_TABLE_PTR + ldr ip, _020573BC ; =sub_020573C0 + ldr r0, [r0] + add r0, r0, #0x9000 + ldrb r0, [r0, #0x877] + bx ip + .align 2, 0 +_020573B8: .word TEAM_MEMBER_TABLE_PTR +_020573BC: .word sub_020573C0 + arm_func_end sub_020573A0 + + arm_func_start sub_020573C0 +sub_020573C0: ; 0x020573C0 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r1, _02057440 ; =TEAM_MEMBER_TABLE_PTR + mov r4, #0 + ldr r1, [r1] + mov r2, #0x1a0 + add r1, r1, #0x36c + add r1, r1, #0x9000 + mla r7, r0, r2, r1 + mov r5, r4 + mov r6, #1 +_020573E8: + ldrb r0, [r7] + tst r0, #1 + movne r0, r6 + moveq r0, r5 + tst r0, #0xff + beq _0205742C + ldrsh r0, [r7, #8] + bl IsMonsterIdInNormalRange + cmp r0, #0 + beq _0205742C + ldrsh r0, [r7, #8] + bl IsValidTeamMember + cmp r0, #0 + beq _0205742C + ldrsh r0, [r7, #8] + mov r1, r7 + bl sub_0205349C +_0205742C: + add r4, r4, #1 + cmp r4, #4 + add r7, r7, #0x68 + blt _020573E8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02057440: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_020573C0 + + arm_func_start sub_02057444 +sub_02057444: ; 0x02057444 + ldr r0, _0205745C ; =TEAM_MEMBER_TABLE_PTR + ldr ip, _02057460 ; =sub_02057464 + ldr r0, [r0] + add r0, r0, #0x9000 + ldrb r0, [r0, #0x877] + bx ip + .align 2, 0 +_0205745C: .word TEAM_MEMBER_TABLE_PTR +_02057460: .word sub_02057464 + arm_func_end sub_02057444 + + arm_func_start sub_02057464 +sub_02057464: ; 0x02057464 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x8c + ldr r1, _020577B4 ; =TEAM_MEMBER_TABLE_PTR + mov sl, #0 + ldr r2, [r1] + mov r5, r0 + add r0, r2, r5, lsl #1 + add r0, r0, #0x9800 + ldrsh r1, [r0, #0x50] + mvn r4, #0 + mov fp, sl + cmp r1, r4 + addne r0, r2, r5, lsl #3 + addne r0, r0, r1, lsl #1 + addne r0, r0, #0x9800 + ldrnesh r4, [r0, #0x56] + add r0, r2, #0x36c + add r1, r0, #0x9000 + mov r0, #0x1a0 + mla sb, r5, r0, r1 + mov r6, #1 + add r7, sp, #0x1c + mvn r8, #0 +_020574C0: + ldrb r0, [sb] + mov r1, sl, lsl #1 + strh r8, [r7, r1] + tst r0, #1 + movne r0, r6 + moveq r0, fp + tst r0, #0xff + beq _02057514 + ldrsh r0, [sb, #8] + bl IsMonsterIdInNormalRange + cmp r0, #0 + beq _02057514 + ldrsh r0, [sb, #8] + bl IsValidTeamMember + cmp r0, #0 + ldrnesh r1, [sb, #8] + movne r0, sl, lsl #1 + strneh r1, [r7, r0] + bne _02057514 + ldrsh r0, [sb, #8] + bl sub_020566C4 +_02057514: + add sl, sl, #1 + cmp sl, #4 + add sb, sb, #0x68 + blt _020574C0 + add r0, sp, #0x14 + mov r1, r5 + bl sub_02057030 + str r0, [sp, #0xc] + ldr r0, _020577B8 ; =_020A33D4 + ldr r2, [sp, #0xc] + mov r1, r5 + bl Debug_Print0 + mov r0, #0x1a0 + ldr r1, _020577B4 ; =TEAM_MEMBER_TABLE_PTR + mov r7, #0 + mul r2, r5, r0 + ldr r1, [r1] + mov sl, r7 + add r0, r1, #0x36c + add r0, r0, #0x9000 + add r8, r0, r2 + add r0, r1, r2 + str r0, [sp, #8] + b _0205767C +_02057574: + add r0, sp, #0x14 + mov r1, sl, lsl #1 + ldrsh r0, [r0, r1] + mov sb, r8 + mov r6, #0 + str r0, [sp] + mov r0, r0 + cmp r4, r0 + moveq r0, sl, lsl #0x10 + moveq r7, r0, asr #0x10 + add r2, sp, #0x1c + b _020575C0 +_020575A4: + mov r0, r6, lsl #1 + ldrsh r1, [r2, r0] + ldr r0, [sp] + cmp r1, r0 + beq _020575C8 + add r6, r6, #1 + add sb, sb, #0x68 +_020575C0: + cmp r6, #4 + blt _020575A4 +_020575C8: + cmp r6, #4 + bge _02057678 + cmp sl, r6 + beq _02057678 + ldr r0, [sp, #8] + mov r1, #0x68 + mla r0, sl, r1, r0 + str r0, [sp, #4] + add r0, r0, #0x36c + add ip, sp, #0x24 + add lr, r0, #0x9000 + mov fp, #6 +_020575F8: + subs fp, fp, #1 + ldmia lr!, {r0, r1, r2, r3} + stmia ip!, {r0, r1, r2, r3} + bne _020575F8 + ldr r0, [sp, #4] + add r2, r0, #0x36c + ldmia lr, {r0, r1} + stmia ip, {r0, r1} + mov ip, sb + add fp, r2, #0x9000 + mov lr, #6 +_02057624: + ldmia ip!, {r0, r1, r2, r3} + stmia fp!, {r0, r1, r2, r3} + subs lr, lr, #1 + bne _02057624 + ldmia ip, {r0, r1} + stmia fp, {r0, r1} + add fp, sp, #0x24 + mov ip, #6 +_02057644: + ldmia fp!, {r0, r1, r2, r3} + stmia sb!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _02057644 + add r3, sp, #0x1c + mov ip, sl, lsl #1 + ldrsh r2, [r3, ip] + mov r6, r6, lsl #1 + ldmia fp, {r0, r1} + stmia sb, {r0, r1} + ldr r0, [sp] + strh r2, [r3, r6] + strh r0, [r3, ip] +_02057678: + add sl, sl, #1 +_0205767C: + ldr r0, [sp, #0xc] + cmp sl, r0 + blt _02057574 + mov r1, #0 + mov sl, r1 + add r0, sp, #0x10 +_02057694: + strb sl, [r0, r1] + add r1, r1, #1 + cmp r1, #4 + blt _02057694 + add sb, sp, #0x14 + add r6, sp, #0x1c + add r4, sp, #0x10 + mov fp, #1 + b _0205774C +_020576B8: + ldr r0, _020577B4 ; =TEAM_MEMBER_TABLE_PTR + ldr r1, [r0] + mov r0, sl, lsl #1 + add r1, r1, r5, lsl #3 + add r1, r1, sl, lsl #1 + ldrsh r3, [sb, r0] + add r1, r1, #0x9800 + ldrsh r2, [r6, r0] + strh r3, [r1, #0x56] + ldrsh r1, [sb, r0] + cmp r2, r1 + beq _020576FC + mov r0, r8 + mov r2, sl, lsl #0x10 + mov r2, r2, asr #0x10 + bl sub_020530D4 + b _02057724 +_020576FC: + ldrb r0, [r8, #0x3e] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + addne r1, sl, #1 + ldrneb r0, [r8, #0x3f] + andne r1, r1, #0xff + strneb r1, [r4, r0] + strneb r1, [r8, #0x3f] +_02057724: + strh sl, [r8, #0xa] + ldrb r0, [r8] + cmp r7, sl + add sl, sl, #1 + orr r0, r0, #2 + strb r0, [r8] + streqb fp, [r8, #1] + movne r0, #0 + strneb r0, [r8, #1] + add r8, r8, #0x68 +_0205774C: + ldr r0, [sp, #0xc] + cmp sl, r0 + blt _020576B8 + mvn r3, #0 + mov r2, #0 + ldr r1, _020577B4 ; =TEAM_MEMBER_TABLE_PTR + b _02057784 +_02057768: + ldr r0, [r1] + add r0, r0, r5, lsl #3 + add r0, r0, sl, lsl #1 + add r0, r0, #0x9800 + strh r3, [r0, #0x56] + strb r2, [r8], #0x68 + add sl, sl, #1 +_02057784: + cmp sl, #4 + blt _02057768 + ldr r1, _020577B4 ; =TEAM_MEMBER_TABLE_PTR + add r0, sp, #0x10 + ldr r2, [r1] + mov r1, r5 + add r2, r2, r5, lsl #1 + add r2, r2, #0x9800 + strh r7, [r2, #0x50] + bl sub_0200FA0C + add sp, sp, #0x8c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_020577B4: .word TEAM_MEMBER_TABLE_PTR +_020577B8: .word _020A33D4 + arm_func_end sub_02057464 + + arm_func_start sub_020577BC +sub_020577BC: ; 0x020577BC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x4c + mov sl, r0 + ldr r0, _02057A24 ; =_020A340C + bl Debug_Print0 + cmp sl, #0xff + beq _02057904 + mov r0, sl + bl IsLevelResetDungeon + cmp r0, #0 + beq _020578E0 + ldr r4, _02057A28 ; =TEAM_MEMBER_TABLE_PTR + ldr r0, _02057A2C ; =_020A336C + ldr r3, [r4] + ldrb r2, [r0] + ldrb r1, [r0, #1] + add r0, r3, #0x9000 + ldr r8, [r0, #0x84c] + strb r2, [sp, #4] + strb r1, [sp, #5] + mov sb, #0 + and r7, r2, #0xff + and r6, r1, #0xff + add r5, sp, #0x1c + mov fp, #0x44 +_02057820: + ldrb r0, [r8] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _020578D0 + strb r7, [sp, #6] + strb r6, [sp, #7] + mov r0, #0 + str r0, [sp] + ldrsh r1, [r8, #8] + ldr ip, [r4] + add r0, sp, #8 + smlabb r1, r1, fp, ip + ldrsh r1, [r1, #4] + mov r2, #0 + add r3, sp, #6 + bl sub_02052E2C + ldrb r0, [sp, #9] + add r3, r8, #0x4c + strb r0, [r8, #2] + ldrsh r0, [sp, #0x10] + strh r0, [r8, #6] + ldrsh r0, [sp, #0x12] + strh r0, [r8, #0xe] + ldrsh r0, [sp, #0x12] + strh r0, [r8, #0x10] + ldrb r0, [sp, #0x14] + strb r0, [r8, #0x12] + ldrb r0, [sp, #0x15] + strb r0, [r8, #0x13] + ldrb r0, [sp, #0x16] + strb r0, [r8, #0x14] + ldrb r0, [sp, #0x17] + strb r0, [r8, #0x15] + ldr r0, [sp, #0x18] + str r0, [r8, #0x18] + ldmia r5, {r0, r1, r2} + stmia r3, {r0, r1, r2} + ldrb r2, [sp, #0x28] + add r0, r8, #0x1c + add r1, sp, #0x2a + strb r2, [r8, #0x58] + bl GroundToDungeonMoveset +_020578D0: + add sb, sb, #1 + cmp sb, #4 + add r8, r8, #0x68 + blt _02057820 +_020578E0: + ldr r0, _02057A28 ; =TEAM_MEMBER_TABLE_PTR + mov r2, sb, lsl #1 + ldr r1, [r0] + ldr r0, _02057A30 ; =_020A343C + add r1, r1, #0x9000 + ldr r3, [r1, #0x870] + mov r1, sb + ldrsh r2, [r3, r2] + bl Debug_Print0 +_02057904: + ldr r0, _02057A34 ; =_020A344C + bl Debug_Print0 + mov r0, sl + bl GetMaxMembersAllowed + mov r8, #0 + ldr r1, _02057A28 ; =TEAM_MEMBER_TABLE_PTR + mov r6, #1 + ldr r1, [r1] + mov r7, r0 + add r0, r1, #0x9000 + ldr sl, [r0, #0x84c] + mov sb, r8 + mov fp, sl + mov r5, r8 + mov r3, r8 + mov r4, r6 + mov r0, r8 + mov r1, r6 + b _020579A4 +_02057950: + ldrb r2, [fp] + tst r2, #1 + movne ip, r6 + moveq ip, r5 + tst ip, #0xff + beq _0205799C + tst r2, #2 + movne r2, r4 + moveq r2, r3 + tst r2, #0xff + beq _0205799C + ldrb r2, [fp, #1] + cmp r2, #0 + movne r2, r1 + moveq r2, r0 + tst r2, #0xff + movne r0, sb, lsl #0x10 + movne r8, r0, asr #0x10 + bne _020579AC +_0205799C: + add sb, sb, #1 + add fp, fp, #0x68 +_020579A4: + cmp sb, #4 + blt _02057950 +_020579AC: + mov sb, #0 + mov r6, #1 + mov fp, sb + mov r5, r6 + mov r4, sb +_020579C0: + ldrb r0, [sl] + tst r0, #1 + movne r1, r5 + moveq r1, fp + tst r1, #0xff + beq _02057A08 + tst r0, #2 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + cmpne r8, sb + beq _02057A08 + cmp r6, r7 + addlt r6, r6, #1 + blt _02057A08 + strb r4, [sl] + ldrsh r0, [sl, #8] + bl sub_020566C4 +_02057A08: + add sb, sb, #1 + cmp sb, #4 + add sl, sl, #0x68 + blt _020579C0 + bl sub_02058064 + add sp, sp, #0x4c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02057A24: .word _020A340C +_02057A28: .word TEAM_MEMBER_TABLE_PTR +_02057A2C: .word _020A336C +_02057A30: .word _020A343C +_02057A34: .word _020A344C + arm_func_end sub_020577BC + + arm_func_start sub_02057A38 +sub_02057A38: ; 0x02057A38 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r0 + mvn r0, #0 + cmp r6, r0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + bl sub_020568A4 + ldr r1, _02057AC0 ; =TEAM_MEMBER_TABLE_PTR + mov r2, #0x68 + ldr r1, [r1] + mov r4, r6, lsl #1 + add r1, r1, #0x9000 + ldr r5, [r1, #0x870] + ldr r3, [r1, #0x84c] + ldrsh r4, [r5, r4] + sub r1, r2, #0x69 + mla r5, r6, r2, r3 + mov r7, r0 + cmp r4, r1 + beq _02057AB4 + mov r0, r5 + mov r1, r4 + mov r2, r6 + bl sub_020530D4 + strh r6, [r5, #0xa] + ldrb r0, [r5] + cmp r4, r7 + orr r0, r0, #2 + strb r0, [r5] + moveq r0, #1 + streqb r0, [r5, #1] + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02057AB4: + mov r0, #0 + strb r0, [r5] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02057AC0: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02057A38 + + arm_func_start sub_02057AC4 +sub_02057AC4: ; 0x02057AC4 + stmdb sp!, {r4, lr} + mov r4, #0 +_02057ACC: + mov r0, r4 + bl sub_02057A38 + add r0, r4, #1 + mov r0, r0, lsl #0x10 + mov r4, r0, asr #0x10 + cmp r4, #4 + blt _02057ACC + ldmia sp!, {r4, pc} + arm_func_end sub_02057AC4 + + arm_func_start sub_02057AEC +sub_02057AEC: ; 0x02057AEC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r4, r0 + bl IsLevelResetDungeon + cmp r4, #0xff + moveq sl, #0 + beq _02057B10 + mov r0, r4 + bl IsLevelResetDungeon + mov sl, r0 +_02057B10: + bl GetGameMode + cmp r0, #5 + movne r0, #1 + moveq r0, #0 + and r7, r0, #0xff + bl sub_02057C40 + bl RemoveActiveMembersFromMainTeam + mov sb, #0 + ldr r0, _02057C3C ; =TEAM_MEMBER_TABLE_PTR + mov r6, #1 + ldr r0, [r0] + mov r5, sb + add r0, r0, #0x9000 + ldr r8, [r0, #0x84c] + mov fp, sb + mov r4, r6 +_02057B50: + ldrb r0, [r8] + tst r0, #1 + movne r0, r6 + moveq r0, r5 + tst r0, #0xff + beq _02057C14 + ldrsh r0, [r8, #8] + bl CheckTeamMemberIdx + cmp r0, #0 + bne _02057C14 + ldrsh r0, [r8, #0xc] + bl GetBaseFormCastformCherrimDeoxys + strh r0, [r8, #0xc] + ldrsh r0, [r8, #8] + bl IsMonsterIdInNormalRange + cmp r0, #0 + beq _02057C14 + ldrb r0, [r8, #1] + cmp r0, #0 + movne r0, r4 + moveq r0, fp + tst r0, #0xff + ldrsh r0, [r8, #8] + beq _02057BB8 + bl TryAddMonsterToActiveTeam + b _02057BBC +_02057BB8: + bl sub_02056554 +_02057BBC: + cmp sl, #0 + beq _02057BE8 + mov r0, sb, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02058138 + mov r2, sb, lsl #0x10 + ldrsh r1, [r8, #8] + mov r0, r8 + mov r2, r2, asr #0x10 + bl sub_020530D4 + b _02057C14 +_02057BE8: + cmp r7, #0 + beq _02057C00 + ldrsh r0, [r8, #8] + mov r1, r8 + bl sub_0205349C + b _02057C14 +_02057C00: + ldrsh r1, [r8, #8] + mov r2, sb, lsl #0x10 + mov r0, r8 + mov r2, r2, asr #0x10 + bl sub_020530D4 +_02057C14: + add sb, sb, #1 + cmp sb, #4 + add r8, r8, #0x68 + blt _02057B50 + ldr r0, _02057C3C ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + add r0, r0, #0x9000 + ldrb r0, [r0, #0x877] + bl sub_02057464 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02057C3C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02057AEC + + arm_func_start sub_02057C40 +sub_02057C40: ; 0x02057C40 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r0, _02057CE4 ; =TEAM_MEMBER_TABLE_PTR + mov sb, #0 + ldr r0, [r0] + mov r7, #1 + add r0, r0, #0x9000 + ldr r8, [r0, #0x84c] + mov r6, sb + mov r4, sb + mov r5, r7 +_02057C68: + ldrb r0, [r8] + tst r0, #1 + movne r0, r7 + moveq r0, r6 + tst r0, #0xff + beq _02057CC8 + ldrb r0, [r8, #0x3e] + tst r0, #1 + movne r0, r5 + moveq r0, r4 + tst r0, #0xff + beq _02057CC8 + ldrb r0, [r8, #0x3e] + bic r0, r0, #8 + strb r0, [r8, #0x3e] + ldrsh r0, [r8, #0x42] + cmp r0, #0xb7 + bne _02057CC8 + add r0, r8, #0x3e + bl sub_0200D8AC + bl AddMoneyCarried + mov r0, sb, lsl #0x10 + mov r0, r0, asr #0x10 + bl sub_02058138 +_02057CC8: + add sb, sb, #1 + cmp sb, #4 + add r8, r8, #0x68 + blt _02057C68 + bl CleanStickyItemsInBag + bl RemovePokeItemsInBag + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02057CE4: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02057C40 + + arm_func_start sub_02057CE8 +sub_02057CE8: ; 0x02057CE8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, #0 + mov r7, #1 + mov r6, r8 + mov r4, r8 + mov r5, r7 +_02057D00: + mov r0, r8 + bl GetActiveTeamMember + ldrb r1, [r0] + tst r1, #1 + movne r1, r7 + moveq r1, r6 + tst r1, #0xff + beq _02057D40 + ldrb r1, [r0, #0x3e] + tst r1, #1 + movne r1, r5 + moveq r1, r4 + tst r1, #0xff + ldrneb r1, [r0, #0x3e] + bicne r1, r1, #8 + strneb r1, [r0, #0x3e] +_02057D40: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 + cmp r8, #4 + blt _02057D00 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + arm_func_end sub_02057CE8 + + arm_func_start RefillTeam +RefillTeam: ; 0x02057D58 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r0, _02057DF8 ; =TEAM_MEMBER_TABLE_PTR + mov r5, #0 + ldr r0, [r0] + add r0, r0, #0x9000 + ldr r4, [r0, #0x84c] +_02057D70: + ldrb r0, [r4] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02057DE4 + ldrsh r1, [r4, #0x10] + mov r0, r4 + strh r1, [r4, #0xe] + bl sub_02058810 + mov r6, #0 + add r7, r4, #0x1c + mov r8, r6 + mov sb, #1 +_02057DA8: + add r0, r4, r6, lsl #3 + ldrb r0, [r0, #0x1c] + tst r0, #1 + movne r0, sb + moveq r0, r8 + tst r0, #0xff + beq _02057DD4 + add r0, r7, r6, lsl #3 + bl GetMaxPp + add r1, r4, r6, lsl #3 + strb r0, [r1, #0x22] +_02057DD4: + add r6, r6, #1 + cmp r6, #4 + blt _02057DA8 + strh r5, [r4, #0xa] +_02057DE4: + add r5, r5, #1 + cmp r5, #4 + add r4, r4, #0x68 + blt _02057D70 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02057DF8: .word TEAM_MEMBER_TABLE_PTR + arm_func_end RefillTeam + +#ifndef JAPAN + arm_func_start sub_02057DFC +sub_02057DFC: ; 0x02057DFC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r1, _02057E8C ; =TEAM_MEMBER_TABLE_PTR + mov r0, #0 + ldr r1, [r1] + mov ip, #1 + add r1, r1, #0x9000 + ldr r6, [r1, #0x84c] + mov r3, r0 + mov r4, r0 + mov r5, ip + mov lr, r0 +_02057E28: + ldrb r1, [r6] + tst r1, #1 + movne r1, r5 + moveq r1, r4 + tst r1, #0xff + beq _02057E78 + mov r7, lr +_02057E44: + add r1, r6, r7, lsl #3 + ldrb r1, [r1, #0x1c] + tst r1, #1 + movne r1, ip + moveq r1, r3 + tst r1, #0xff + addne r2, r6, r7, lsl #3 + ldrneb r1, [r2, #0x1c] + add r7, r7, #1 + andne r1, r1, #0xf + strneb r1, [r2, #0x1c] + cmp r7, #4 + blt _02057E44 +_02057E78: + add r0, r0, #1 + cmp r0, #4 + add r6, r6, #0x68 + blt _02057E28 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02057E8C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02057DFC +#endif + + arm_func_start sub_02057E90 +sub_02057E90: ; 0x02057E90 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r0, _02057EF0 ; =TEAM_MEMBER_TABLE_PTR + mov r4, #0 + ldr r0, [r0] + mov r6, r4 + add r0, r0, #0x9000 + ldr r8, [r0, #0x84c] + mov r7, #1 + mov r5, r4 +_02057EB4: + ldrb r0, [r8] + tst r0, #1 + movne r0, r7 + moveq r0, r6 + tst r0, #0xff + beq _02057EDC + ldrsh r0, [r8, #8] + bl CheckTeamMemberIdx + cmp r0, #0 + strneb r5, [r8] +_02057EDC: + add r4, r4, #1 + cmp r4, #4 + add r8, r8, #0x68 + blt _02057EB4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02057EF0: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02057E90 + + arm_func_start sub_02057EF4 +sub_02057EF4: ; 0x02057EF4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr r0, _02058060 ; =TEAM_MEMBER_TABLE_PTR + mov r8, #0 + ldr r0, [r0] + add r0, r0, #0x9000 + ldr r7, [r0, #0x84c] +_02057F0C: + ldrb r0, [r7] + tst r0, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + bne _02057F38 + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _0205804C +_02057F38: + ldrsh sb, [r7, #8] + ldrsh r1, [r7, #0x10] + mov r0, r7 + strh r1, [r7, #0xe] + bl sub_02058810 + mov sl, #0 + add r5, r7, #0x1c + mov fp, sl + mov r6, #1 + mov r4, sl +_02057F60: + add r0, r7, sl, lsl #3 + ldrb r0, [r0, #0x1c] + tst r0, #1 + movne r0, r6 + moveq r0, fp + tst r0, #0xff + beq _02057F90 + add r0, r5, sl, lsl #3 + bl GetMaxPp + add r1, r7, sl, lsl #3 + strb r0, [r1, #0x22] + strh r4, [r1, #0x1e] +_02057F90: + add sl, sl, #1 + cmp sl, #4 + blt _02057F60 + strh r8, [r7, #0xa] + ldrb r1, [r7] + mov r0, sb + bic r2, r1, #8 + and r1, r2, #0xff + orr r1, r1, #1 + strb r1, [r7] + bl CheckTeamMemberIdx + cmp r0, #0 + mov r0, sb + mov r1, #0 + bne _02058048 + bl sub_02056460 + cmp r0, #0 + beq _02057FE4 + mov r0, sb + mov r1, #0 + bl sub_020565F4 +_02057FE4: + mov r0, sb + mov r1, #2 + bl sub_02056460 + cmp r0, #0 + beq _02058004 + mov r0, sb + mov r1, #2 + bl sub_020565F4 +_02058004: + mov r0, sb + mov r1, #0 + bl sub_02056504 + cmp r0, #0 + beq _02058024 + mov r0, sb + mov r1, #0 + bl sub_020565F4 +_02058024: + mov r0, sb + mov r1, #2 + bl sub_02056504 + cmp r0, #0 + beq _0205804C + mov r0, sb + mov r1, #2 + bl sub_020565F4 + b _0205804C +_02058048: + bl sub_020565F4 +_0205804C: + add r8, r8, #1 + cmp r8, #4 + add r7, r7, #0x68 + blt _02057F0C + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02058060: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02057EF4 + + arm_func_start sub_02058064 +sub_02058064: ; 0x02058064 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r0, _020580C0 ; =TEAM_MEMBER_TABLE_PTR + mov r4, #0 + ldr r0, [r0] + mov r5, r4 + add r0, r0, #0x9000 + ldr r7, [r0, #0x84c] + mov r6, #1 +_02058084: + ldrb r0, [r7] + tst r0, #1 + movne r0, r6 + moveq r0, r5 + tst r0, #0xff + beq _020580A4 + add r0, r7, #0x5a + bl ShuffleHiddenPower +_020580A4: + add r0, r4, #1 + mov r0, r0, lsl #0x10 + mov r4, r0, asr #0x10 + cmp r4, #4 + add r7, r7, #0x68 + blt _02058084 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_020580C0: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02058064 + + arm_func_start sub_020580C4 +sub_020580C4: ; 0x020580C4 + stmdb sp!, {r4, r5, r6, lr} + ldr r1, _02058134 ; =TEAM_MEMBER_TABLE_PTR + mov r5, #0 + ldr r1, [r1] + add r2, r5, #1 + add r1, r1, #0x9000 + ldr r4, [r1, #0x84c] + and r6, r2, #0xff + strb r5, [r0] + mov ip, r5 + mov lr, #1 + mov r3, r5 +_020580F4: + ldrb r1, [r4] + add r4, r4, #0x68 + tst r1, #1 + movne r1, lr + moveq r1, ip + tst r1, #0xff + addeq r1, r0, r5 + streqb r3, [r1, #1] + addne r1, r0, r5 + addne r2, r6, #1 + strneb r6, [r1, #1] + add r5, r5, #1 + andne r6, r2, #0xff + cmp r5, #4 + blt _020580F4 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02058134: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_020580C4 + + arm_func_start sub_02058138 +sub_02058138: ; 0x02058138 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr r2, _020581EC ; =TEAM_MEMBER_TABLE_PTR + mov r1, #0x68 + ldr r2, [r2] + smulbb r1, r0, r1 + add r0, r2, #0x9000 + ldr r2, [r0, #0x84c] + ldrb r0, [r2, r1] + add r3, r2, r1 + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _020581E0 + ldrb r1, [r3, #0x3e] + tst r1, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + ldrneb r0, [r3, #0x3f] + cmpne r0, #0 + beq _020581E0 + tst r1, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + bne _020581E0 + ldrh r1, [r3, #0x3e] + add r0, r3, #0x3e + strh r1, [sp] + ldrh r2, [r3, #0x40] + ldrb r1, [sp] + strh r2, [sp, #2] + ldrh r2, [r3, #0x42] + bic r1, r1, #0x10 + strh r2, [sp, #4] + strb r1, [sp] + bl ItemZInit + add r0, sp, #0 + bl RemoveHolderForItemInBag + b _020581E4 +_020581E0: + mov r0, #0 +_020581E4: + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_020581EC: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02058138 + + arm_func_start ClearItem +ClearItem: ; 0x020581F0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #8 + ldr r2, _020582DC ; =TEAM_MEMBER_TABLE_PTR + cmp r0, #0 + ldr r2, [r2] + add r2, r2, #0x9000 + ldr r2, [r2, #0x84c] + beq _020582D0 + mov r8, #0 + mov r7, #1 + mov r6, r8 + mov r4, r8 + mov r5, r7 + mov r3, r8 + mov ip, r7 + b _020582C8 +_02058230: + ldrb lr, [r2] + tst lr, #1 + movne sb, r7 + moveq sb, r6 + tst sb, #0xff + beq _020582C0 + ldrb sb, [r2, #0x3e] + tst sb, #1 + movne lr, r5 + moveq lr, r4 + tst lr, #0xff + beq _020582C0 + ldrb lr, [r2, #0x3f] + cmp lr, r0 + bne _020582C0 + cmp r1, #0 + beq _02058288 + tst sb, #8 + movne sb, ip + moveq sb, r3 + tst sb, #0xff + bne _020582C0 +_02058288: + ldrh r1, [r2, #0x3e] + add r0, r2, #0x3e + strh r1, [sp] + ldrh r3, [r2, #0x40] + ldrb r1, [sp] + strh r3, [sp, #2] + ldrh r2, [r2, #0x42] + bic r1, r1, #0x10 + strh r2, [sp, #4] + strb r1, [sp] + bl ItemZInit + add r0, sp, #0 + bl RemoveHolderForItemInBag + b _020582D4 +_020582C0: + add r8, r8, #1 + add r2, r2, #0x68 +_020582C8: + cmp r8, #4 + blt _02058230 +_020582D0: + mov r0, #0 +_020582D4: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_020582DC: .word TEAM_MEMBER_TABLE_PTR + arm_func_end ClearItem + + arm_func_start sub_020582E0 +sub_020582E0: ; 0x020582E0 + ldr ip, _020582EC ; =ClearItem + mov r1, #1 + bx ip + .align 2, 0 +_020582EC: .word ClearItem + arm_func_end sub_020582E0 + + arm_func_start sub_020582F0 +sub_020582F0: ; 0x020582F0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + ldr r3, _0205845C ; =TEAM_MEMBER_TABLE_PTR + mov r2, #0x68 + ldr r3, [r3] + smulbb r2, r0, r2 + add r0, r3, #0x9000 + ldr r3, [r0, #0x84c] + mov r5, r1 + ldrb r0, [r3, r2] + add r4, r3, r2 + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02058450 + mov r0, r5 + bl GetItemAtIdx + ldrb r2, [r4, #0x3e] + mov r1, r0 + tst r2, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02058404 + ldrb r0, [r4, #0x3f] + cmp r0, #0 + bne _02058374 + tst r2, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + bne _02058448 +_02058374: + ldrh r2, [r4, #0x3e] + add r0, sp, #6 + strh r2, [sp, #6] + ldrh r3, [r4, #0x40] + ldrb r2, [sp, #6] + strh r3, [sp, #8] + ldrh ip, [r4, #0x42] + bic r3, r2, #0x10 + strh ip, [sp, #0xa] + ldrh r2, [r1] + strh r2, [sp] + ldrh ip, [r1, #2] + ldrb r2, [sp] + strh ip, [sp, #2] + ldrh ip, [r1, #4] + bic r1, r2, #0x10 + strh ip, [sp, #4] + ldrsh r2, [r4, #0xa] + add r2, r2, #1 + strb r2, [sp, #1] + strb r1, [sp] + strb r3, [sp, #6] + bl RemoveHolderForItemInBag + ldrh r2, [sp] + add r1, sp, #0 + mov r0, r5 + strh r2, [r4, #0x3e] + ldrh r2, [sp, #2] + strh r2, [r4, #0x40] + ldrh r2, [sp, #4] + strh r2, [r4, #0x42] + ldrsh r2, [r4, #0xa] + add r2, r2, #1 + and r2, r2, #0xff + bl SetHolderForItemInBag + b _02058448 +_02058404: + ldrh r2, [r1] + mov r0, r5 + strh r2, [r4, #0x3e] + ldrh r2, [r1, #2] + strh r2, [r4, #0x40] + ldrh r2, [r1, #4] + strh r2, [r4, #0x42] + ldrsh r2, [r4, #0xa] + add r2, r2, #1 + strb r2, [r4, #0x3f] + ldrb r2, [r4, #0x3e] + bic r2, r2, #0x10 + strb r2, [r4, #0x3e] + ldrsh r2, [r4, #0xa] + add r2, r2, #1 + and r2, r2, #0xff + bl SetHolderForItemInBag +_02058448: + mov r0, #1 + b _02058454 +_02058450: + mov r0, #0 +_02058454: + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_0205845C: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_020582F0 + + arm_func_start sub_02058460 +sub_02058460: ; 0x02058460 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r2, r0 + cmp r1, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + ldr r0, _020584F4 ; =TEAM_MEMBER_TABLE_PTR + sub r1, r1, #1 + mov ip, r1, lsl #0x10 + ldr r1, [r0] + mov r0, #0 + add r1, r1, #0x9000 + mov r4, r0 + mov r5, #1 + mov r3, #0x68 + b _020584E4 +_0205849C: + smulbb r6, r0, r3 + ldr r7, [r1, #0x84c] + ldrb lr, [r7, r6] + add r6, r7, r6 + tst lr, #1 + movne r7, r5 + moveq r7, r4 + tst r7, #0xff + beq _020584D8 + ldrsh lr, [r6, #0xa] + cmp lr, ip, asr #16 + bne _020584D8 + mov r1, r2 + bl sub_020582F0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_020584D8: + add r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 +_020584E4: + cmp r0, #4 + blt _0205849C + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_020584F4: .word TEAM_MEMBER_TABLE_PTR + arm_func_end sub_02058460 + + arm_func_start sub_020584F8 +sub_020584F8: ; 0x020584F8 + bx lr + arm_func_end sub_020584F8 + + arm_func_start sub_020584FC +sub_020584FC: ; 0x020584FC + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, r1 + bl GetActiveTeamMember + mov r1, r0 + ldrb r0, [r1, #1] + add r1, r1, #0x5e + cmp r0, #0 + movne r2, #1 + moveq r2, #0 + mov r0, r4 + and r2, r2, #0xff + bl sub_02054FA0 + ldmia sp!, {r4, pc} + arm_func_end sub_020584FC + + arm_func_start sub_02058534 +sub_02058534: ; 0x02058534 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r2 + mov r0, r1 + bl GetActiveTeamMember + mov r1, r0 + cmp r4, #0x44 + bne _02058578 + ldrb r0, [r1, #1] + add r1, r1, #0x5e + cmp r0, #0 + movne r2, #1 + moveq r2, #0 + mov r0, r5 + and r2, r2, #0xff + bl sub_02054FA0 + ldmia sp!, {r3, r4, r5, pc} +_02058578: + mov r0, r5 + mov r2, r4 + add r1, r1, #0x5e + bl sub_02054F44 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02058534 + + arm_func_start sub_0205858C +sub_0205858C: ; 0x0205858C + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, r1 + bl GetActiveTeamMember + mov r1, r0 + mov r0, r4 + add r1, r1, #0x5e + mov r2, #0xa + bl StrncpySimpleNoPadSafe + ldmia sp!, {r4, pc} + arm_func_end sub_0205858C + + arm_func_start sub_020585B4 +sub_020585B4: ; 0x020585B4 + ldrb r2, [r1, #1] + ldr ip, _020585D4 ; =sub_02054FA0 + add r1, r1, #0x5e + cmp r2, #0 + movne r2, #1 + moveq r2, #0 + and r2, r2, #0xff + bx ip + .align 2, 0 +_020585D4: .word sub_02054FA0 + arm_func_end sub_020585B4 + + arm_func_start ChangeGiratinaFormIfSkyDungeon +ChangeGiratinaFormIfSkyDungeon: ; 0x020585D8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + bl IsSkyExclusiveDungeon + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r8, #0 + ldr r4, _02058640 ; =0x00000211 + mov r6, r8 + mov r7, #1 + mov r5, #0x218 +_020585FC: + mov r0, r8 + bl GetActiveTeamMember + ldrb r1, [r0] + tst r1, #1 + movne r1, r7 + moveq r1, r6 + tst r1, #0xff + beq _02058628 + ldrsh r1, [r0, #0xc] + cmp r1, r4 + streqh r5, [r0, #0xc] +_02058628: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 + cmp r8, #4 + blt _020585FC + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02058640: .word 0x00000211 + arm_func_end ChangeGiratinaFormIfSkyDungeon + + arm_func_start sub_02058644 +sub_02058644: ; 0x02058644 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, #0 +_02058650: + mov r0, r4 + mov r1, r5 + bl RevertGiratinaAndShaymin + add r0, r4, #1 + mov r0, r0, lsl #0x10 + mov r4, r0, asr #0x10 + cmp r4, #4 + blt _02058650 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02058644 + + arm_func_start RevertGiratinaAndShaymin +RevertGiratinaAndShaymin: ; 0x02058674 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl sub_02056228 + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, r5 + bl GetActiveTeamMember + ldrb r1, [r0] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + ldmeqia sp!, {r3, r4, r5, pc} + tst r4, #2 + beq _020586C8 + ldrsh r1, [r0, #0xc] + cmp r1, #0x218 + ldreq r1, _020586E8 ; =0x00000211 + streqh r1, [r0, #0xc] + ldmeqia sp!, {r3, r4, r5, pc} +_020586C8: + tst r4, #1 + ldmeqia sp!, {r3, r4, r5, pc} + ldrsh r2, [r0, #0xc] + ldr r1, _020586EC ; =0x00000217 + cmp r2, r1 + subeq r1, r1, #1 + streqh r1, [r0, #0xc] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020586E8: .word 0x00000211 +_020586EC: .word 0x00000217 + arm_func_end RevertGiratinaAndShaymin + + arm_func_start sub_020586F0 +sub_020586F0: ; 0x020586F0 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + bl GetActiveTeamMember + mov r4, r0 + ldrb r0, [r4] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _0205878C + mov r0, r5 + bl GetItemMoveId16 + mov ip, #0 + mov r2, ip + mov r3, #1 + b _02058768 +_02058730: + add r1, r4, ip, lsl #3 + ldrb r1, [r1, #0x1c] + tst r1, #1 + movne r1, r3 + moveq r1, r2 + tst r1, #0xff + beq _0205875C + add r1, r4, ip, lsl #3 + ldrh r1, [r1, #0x20] + cmp r0, r1 + beq _02058770 +_0205875C: + add r1, ip, #1 + mov r1, r1, lsl #0x10 + mov ip, r1, asr #0x10 +_02058768: + cmp ip, #4 + blt _02058730 +_02058770: + cmp ip, #4 + blt _0205878C + ldrsh r1, [r4, #0xc] + bl sub_02053D1C + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, pc} +_0205878C: + mov r0, #0 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_020586F0 + + arm_func_start sub_02058794 +sub_02058794: ; 0x02058794 + stmdb sp!, {r4, lr} + mov r4, r0 + bl sub_0204E584 + cmp r0, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + bl GetActiveTeamMember + mov r4, r0 + ldrsh r0, [r4, #8] + bl GetTeamMember + mov r1, r4 + bl sub_020534BC + ldmia sp!, {r4, pc} + arm_func_end sub_02058794 + + arm_func_start sub_020587C8 +sub_020587C8: ; 0x020587C8 + stmdb sp!, {r3, lr} + bl sub_02057E90 + mvn r0, #0 + bl sub_02058644 + bl RefillTeam + ldmia sp!, {r3, pc} + arm_func_end sub_020587C8 + + arm_func_start sub_020587E0 +sub_020587E0: ; 0x020587E0 + stmdb sp!, {r4, lr} + mov r4, r0 +#ifndef JAPAN + bl sub_02057DFC +#endif + bl sub_02057E90 + mvn r0, #0 + bl sub_02058644 + bl RefillTeam + mov r0, r4 + bl sub_02057AEC + mov r0, #0 + bl sub_02056318 + ldmia sp!, {r4, pc} + arm_func_end sub_020587E0 + + arm_func_start sub_02058810 +sub_02058810: ; 0x02058810 + mov r2, #0x64 + strh r2, [r0, #0x48] + mov r1, #0 + strh r2, [r0, #0x44] + strh r1, [r0, #0x4a] + strh r1, [r0, #0x46] + bx lr + arm_func_end sub_02058810 + + arm_func_start sub_0205882C +sub_0205882C: ; 0x0205882C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x30 + ldr r1, _02058AA4 ; =0x000003E3 + mov r4, r0 + mov r3, #0 + add r2, sp, #0x14 + mov r0, #4 + str r3, [sp, #0x1c] + bl DirectoryFileMngr_OpenDirectoryFile + ldr r1, [sp, #0x14] + add r0, sp, #0x1c + bl HandleSir0Translation + mov r0, r4, lsl #0x10 + mov r0, r0, asr #0x10 + mov r1, #0 + bl sub_02058ABC + mov r0, r4, lsl #0x10 + ldr r5, [sp, #0x1c] + mov r0, r0, asr #0x10 + mov r1, #0 + bl sub_02058ABC + add r1, r5, #4 + mov r2, #0x40 + mov r3, #9 + bl CopyAndInterleaveWrapper + add r0, r4, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r1, #0 + bl sub_02058ABC + add r1, r5, #0x24 + mov r2, #0x80 + mov r3, #9 + bl CopyAndInterleaveWrapper + add r0, r4, #2 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r1, #0 + bl sub_02058ABC + add r1, r5, #0x64 + mov r2, #0x100 + mov r3, #9 + bl CopyAndInterleaveWrapper + add r0, sp, #0x14 + bl UnloadFile + mov lr, #0 +_020588E4: + ldr r3, _02058AA8 ; =_020A3468 + ldr r5, _02058AAC ; =_022B578C + add r2, r3, lr, lsl #4 + ldr r1, [r2, #8] + ldr r0, _02058AB0 ; =0x000003FF + add r1, r4, r1 + add r7, r5, lr, lsl #4 + mov sb, #0x400 + ldr r3, [r3, lr, lsl #4] + and r8, r1, r0 + ldr r2, [r2, #4] + mov r1, r3, lsl #0x1e + mov r5, #0 + mov r0, r2, lsl #0x1e + rsb sb, sb, #0 + mov r2, r5 + mov r3, #1 +_02058928: + mov ip, r5, lsl #3 + ldrh sl, [r7, ip] + add r6, r7, r5, lsl #3 + cmp r5, #1 + bic sl, sl, #0x100 + strh sl, [r7, ip] + ldrh sl, [r7, ip] + add r5, r5, #1 + bic sl, sl, #0x200 + strh sl, [r7, ip] + ldrh sl, [r6] + moveq ip, r3 + movne ip, r2 + bic sl, sl, #0xc00 + strh sl, [r6] + ldrh sl, [r6] + mov ip, ip, lsl #0x1e + cmp r5, #2 + orr sl, sl, ip, lsr #20 + strh sl, [r6] + ldrh ip, [r6] + bic ip, ip, #0x1000 + strh ip, [r6] + ldrh ip, [r6] + bic ip, ip, #0x2000 + strh ip, [r6] + ldrh ip, [r6] + orr ip, ip, #0x2000 + strh ip, [r6] + ldrh ip, [r6] + bic ip, ip, #0xc000 + strh ip, [r6] + ldrh ip, [r6] + orr ip, ip, r1, lsr #16 + strh ip, [r6] + ldrh ip, [r6, #2] + bic ip, ip, #0x3e00 + strh ip, [r6, #2] + ldrh ip, [r6, #2] + bic ip, ip, #0xc000 + strh ip, [r6, #2] + ldrh ip, [r6, #2] + orr ip, ip, r0, lsr #16 + strh ip, [r6, #2] + ldrh ip, [r6, #4] + and ip, ip, sb + strh ip, [r6, #4] + ldrh ip, [r6, #4] + orr ip, ip, r8 + strh ip, [r6, #4] + ldrh ip, [r6, #4] + bic ip, ip, #0xc00 + strh ip, [r6, #4] + ldrh ip, [r6, #4] + orr ip, ip, #0xc00 + strh ip, [r6, #4] + ldrh ip, [r6, #4] + bic ip, ip, #0xf000 + strh ip, [r6, #4] + ldrh ip, [r6, #6] + bic ip, ip, #1 + strh ip, [r6, #6] + ldrh ip, [r6, #6] + bic ip, ip, #2 + strh ip, [r6, #6] + blt _02058928 + add lr, lr, #1 + cmp lr, #3 + blt _020588E4 + ldr r1, _02058AB4 ; =0x000003E5 + add r2, sp, #0xc + mov r0, #4 + mov r3, #0 + bl DirectoryFileMngr_OpenDirectoryFile + ldr r1, [sp, #0xc] + add r0, sp, #8 + bl HandleSir0Translation + mov r0, #0x90 + str r0, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r1, [sp, #8] + add r0, sp, #0x20 + mov r2, #1 + mov r3, #0x20 + bl sub_0201F598 + ldr r0, _02058AB8 ; =_020AFC4C + add r1, sp, #0x20 + ldr r0, [r0] + mov r2, #0 + bl sub_0201B43C + add r0, sp, #0xc + bl UnloadFile + add sp, sp, #0x30 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02058AA4: .word 0x000003E3 +_02058AA8: .word _020A3468 +_02058AAC: .word _022B578C +_02058AB0: .word 0x000003FF +_02058AB4: .word 0x000003E5 +_02058AB8: .word _020AFC4C + arm_func_end sub_0205882C + + arm_func_start sub_02058ABC +sub_02058ABC: ; 0x02058ABC + ldr r3, _02058AF4 ; =_020AFC4C + mov r2, #0x70 + ldr ip, [r3] + ldr r3, _02058AF8 ; =_020AFC28 + mla r2, r1, r2, ip + ldrh r1, [r2, #0xc] + ldr ip, [r2, #0x64] + mov r2, r1, lsr #0x1f + rsb r1, r2, r1, lsl #30 + add r1, r2, r1, ror #30 + mov r1, r1, lsl #1 + ldrsh r1, [r3, r1] + smlabb r0, r0, r1, ip + bx lr + .align 2, 0 +_02058AF4: .word _020AFC4C +_02058AF8: .word _020AFC28 + arm_func_end sub_02058ABC + + arm_func_start sub_02058AFC +sub_02058AFC: ; 0x02058AFC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + cmp r0, #0x32 + mov r6, r1 + mov r5, r2 + mov r4, r3 + cmpne r0, #0x33 + beq _02058B38 + ldr r1, _02058C08 ; =0xFFFFFD76 + add r1, r0, r1 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + cmp r1, #1 + bhi _02058B40 +_02058B38: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_02058B40: + bl GetShadowSize + ldrb r1, [sp, #0x24] + mov r7, #0x200 + ldrsh lr, [r6] + cmp r1, #0 + ldr r1, _02058C0C ; =_022B578C + movne r2, #1 + moveq r2, #0 + add r1, r1, r0, lsl #4 + add r1, r1, r2, lsl #3 + ldr sb, _02058C10 ; =_020A3450 + ldrh r8, [r1, #2] + ldrsh ip, [r5, #0x24] + ldrsh r3, [r6, #2] + ldrsh r2, [r5, #0x26] + rsb r7, r7, #0 + and r5, r8, r7 + strh r5, [r1, #2] + ldr r0, [sb, r0, lsl #2] + add r5, lr, ip + add r0, r5, r0 + ldrh r5, [r1, #2] + and r0, r0, r7, lsr #23 + add r2, r3, r2 + orr r0, r5, r0 + strh r0, [r1, #2] + sub r0, r2, #2 + sub r2, r0, #2 + mov r3, r2, lsl #0x14 + ldrh r5, [r1, #6] + ldr r0, _02058C14 ; =0xFFFF000F + ldr r2, [sp, #0x20] + and r0, r5, r0 + strh r0, [r1, #6] + ldrh r5, [r1, #6] + ldr r0, _02058C18 ; =_020AFC4C + orr r3, r5, r3, lsr #16 + strh r3, [r1, #6] + ldrh r5, [r1, #4] + mov r3, r2, lsl #0x1e + ldr r0, [r0] + bic r2, r5, #0xc00 + strh r2, [r1, #4] + ldrh r5, [r1, #4] + mov r2, r4 + orr r3, r5, r3, lsr #20 + strh r3, [r1, #4] + bl sub_0201B9F8 + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02058C08: .word 0xFFFFFD76 +_02058C0C: .word _022B578C +_02058C10: .word _020A3450 +_02058C14: .word 0xFFFF000F +_02058C18: .word _020AFC4C + arm_func_end sub_02058AFC + + arm_func_start GetIqSkillStringId +GetIqSkillStringId: ; 0x02058C1C +#if defined(EUROPE) + add r0, r0, #0xe7 + add r0, r0, #0x2600 +#elif defined(JAPAN) + add r0, r0, #0x13 + add r0, r0, #0x3f00 +#else + add r0, r0, #0xe5 + add r0, r0, #0x2600 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bx lr + arm_func_end GetIqSkillStringId + + arm_func_start sub_02058C30 +sub_02058C30: ; 0x02058C30 + ldr ip, _02058C38 ; =CopyTacticString + bx ip + .align 2, 0 +_02058C38: .word CopyTacticString + arm_func_end sub_02058C30 + + arm_func_start DoesTacticFollowLeader +DoesTacticFollowLeader: ; 0x02058C3C + ldr r1, _02058C48 ; =_020A190C + ldrb r0, [r1, r0] + bx lr + .align 2, 0 +_02058C48: .word _020A190C + arm_func_end DoesTacticFollowLeader + + arm_func_start GetUnlockedTactics +GetUnlockedTactics: ; 0x02058C4C + stmdb sp!, {r3, lr} + mov lr, #0 + ldr r3, _02058C98 ; =TACTICS_UNLOCK_LEVEL_TABLE + mov ip, lr +_02058C5C: + mov r2, ip, lsl #1 + ldrsh r2, [r3, r2] + cmp r2, r1 + strleb ip, [r0, lr] + add ip, ip, #1 + addle lr, lr, #1 + cmp ip, #0xc + blt _02058C5C + mov r1, #0xb + b _02058C8C +_02058C84: + strb r1, [r0, lr] + add lr, lr, #1 +_02058C8C: + cmp lr, #0xc + blt _02058C84 + ldmia sp!, {r3, pc} + .align 2, 0 +_02058C98: .word TACTICS_UNLOCK_LEVEL_TABLE + arm_func_end GetUnlockedTactics + + arm_func_start GetUnlockedTacticFlags +GetUnlockedTacticFlags: ; 0x02058C9C + stmdb sp!, {r4, lr} + mov r4, #0 + ldr lr, _02058CD4 ; =TACTICS_UNLOCK_LEVEL_TABLE + mov r2, r4 + mov r3, #1 +_02058CB0: + mov ip, r4, lsl #1 + ldrsh ip, [lr, ip] + cmp ip, r1 + strleb r3, [r0, r4] + strgtb r2, [r0, r4] + add r4, r4, #1 + cmp r4, #0xc + blt _02058CB0 + ldmia sp!, {r4, pc} + .align 2, 0 +_02058CD4: .word TACTICS_UNLOCK_LEVEL_TABLE + arm_func_end GetUnlockedTacticFlags + + arm_func_start CanLearnIqSkill +CanLearnIqSkill: ; 0x02058CD8 + cmp r1, #0 + moveq r0, #0 + bxeq lr + ldr r2, _02058D00 ; =IQ_SKILLS + ldr r1, [r2, r1, lsl #2] + cmp r1, r0 + movle r0, #1 + movgt r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_02058D00: .word IQ_SKILLS + arm_func_end CanLearnIqSkill + + arm_func_start GetLearnableIqSkills +GetLearnableIqSkills: ; 0x02058D04 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r6, #0 + mov sl, r0 + mov sb, r1 + mov r8, r2 + mov r5, r6 + ldr r4, _02058DA0 ; =IQ_GROUP_SKILLS + mov fp, #0x19 + b _02058D74 +_02058D28: + mov r0, sb + bl GetIqGroup + mla r1, r0, fp, r4 + and r0, r5, #0xff + ldrb r7, [r0, r1] + cmp r7, #0xff + beq _02058D7C + cmp r7, #0x18 + bne _02058D58 + mov r0, #3 + bl GetPerformanceFlagWithChecks + b _02058D64 +_02058D58: + mov r0, r8 + mov r1, r7 + bl CanLearnIqSkill +_02058D64: + cmp r0, #0 + strneb r7, [sl, r6] + addne r6, r6, #1 + add r5, r5, #1 +_02058D74: + cmp r5, #0x19 + blt _02058D28 +_02058D7C: + mov r1, r6 + mov r0, #0 + b _02058D90 +_02058D88: + strb r0, [sl, r1] + add r1, r1, #1 +_02058D90: + cmp r1, #0x45 + blt _02058D88 + mov r0, r6 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02058DA0: .word IQ_GROUP_SKILLS + arm_func_end GetLearnableIqSkills + + arm_func_start DisableIqSkill +DisableIqSkill: ; 0x02058DA4 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + mov r5, r1 + bl IqSkillFlagTest + cmp r0, #0 + beq _02058DE4 + mov r0, r5, asr #4 + add r0, r5, r0, lsr #27 + mov r2, r0, asr #5 + sub r0, r5, r2, lsl #5 + mov r1, #1 + mvn r0, r1, lsl r0 + ldr r1, [r4, r2, lsl #2] + and r0, r1, r0 + str r0, [r4, r2, lsl #2] + ldmia sp!, {r3, r4, r5, pc} +_02058DE4: + mov r0, r4 + mov r1, r5 + bl EnableIqSkill + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DisableIqSkill + + arm_func_start EnableIqSkill +EnableIqSkill: ; 0x02058DF4 + stmdb sp!, {r4, r5, r6, lr} + ldr r2, _02058E64 ; =IQ_SKILL_RESTRICTIONS + mov r3, r1, lsl #1 + ldrsh ip, [r2, r3] + mov r3, #0 + mov r4, #1 +_02058E0C: + mov r5, r3, lsl #1 + ldrsh r5, [r2, r5] + cmp ip, r5 + bne _02058E3C + mov lr, r3, asr #4 + add lr, r3, lr, lsr #27 + mov r6, lr, asr #5 + sub lr, r3, r6, lsl #5 + mvn lr, r4, lsl lr + ldr r5, [r0, r6, lsl #2] + and r5, r5, lr + str r5, [r0, r6, lsl #2] +_02058E3C: + add r3, r3, #1 + cmp r3, #0x45 + blt _02058E0C + mov ip, r1, lsr #5 + ldr r3, [r0, ip, lsl #2] + sub r1, r1, ip, lsl #5 + mov r2, #1 + orr r1, r3, r2, lsl r1 + str r1, [r0, ip, lsl #2] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02058E64: .word IQ_SKILL_RESTRICTIONS + arm_func_end EnableIqSkill + + arm_func_start GetSpeciesIqSkill +GetSpeciesIqSkill: ; 0x02058E68 + stmdb sp!, {r4, lr} + mov r4, r1 + bl GetIqGroup + ldr r2, _02058E88 ; =IQ_GROUP_SKILLS + mov r1, #0x19 + mla r1, r0, r1, r2 + ldrb r0, [r4, r1] + ldmia sp!, {r4, pc} + .align 2, 0 +_02058E88: .word IQ_GROUP_SKILLS + arm_func_end GetSpeciesIqSkill + + arm_func_start DisableAllIqSkills +DisableAllIqSkills: ; 0x02058E8C + mov r3, #0 + mov r2, r3 +_02058E94: + add r1, r3, #1 + mov r1, r1, lsl #0x10 + str r2, [r0, r3, lsl #2] + mov r3, r1, asr #0x10 + cmp r3, #3 + blt _02058E94 + bx lr + arm_func_end DisableAllIqSkills + + arm_func_start EnableAllLearnableIqSkills +EnableAllLearnableIqSkills: ; 0x02058EB0 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x48 + mov r6, r0 + add r0, sp, #0 + bl GetLearnableIqSkills + mov r0, r6 + bl DisableAllIqSkills + mov r5, #0 + add r4, sp, #0 + b _02058EF4 +_02058ED8: + ldrb r0, [r4, r5] + cmp r0, #0 + beq _02058EFC + ldrb r1, [r4, r5] + mov r0, r6 + bl EnableIqSkill + add r5, r5, #1 +_02058EF4: + cmp r5, #0x45 + blt _02058ED8 +_02058EFC: + add sp, sp, #0x48 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end EnableAllLearnableIqSkills diff --git a/include/main_02054DC4.h b/include/main_02054DC4.h new file mode 100644 index 00000000..ff8a7ea4 --- /dev/null +++ b/include/main_02054DC4.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_MAIN_02054DC4_H +#define PMDSKY_MAIN_02054DC4_H + +#include "util.h" + +bool32 DexNumbersEqual(s16 monster1, s16 monster2); + +#endif //PMDSKY_MAIN_02054DC4_H diff --git a/main.lsf b/main.lsf index 21adbfd3..ed4cce31 100644 --- a/main.lsf +++ b/main.lsf @@ -73,6 +73,8 @@ Static main Object asm/main_02054AD4.o Object src/main_02054BE0.o Object asm/main_02054C24.o + Object src/main_02054DC4.o + Object asm/main_02054E4C.o Object src/pokemon.o Object asm/main_02058F24.o Object src/main_0206C98C.o diff --git a/src/main_02054DC4.c b/src/main_02054DC4.c new file mode 100644 index 00000000..93d58093 --- /dev/null +++ b/src/main_02054DC4.c @@ -0,0 +1,17 @@ +#include "main_02054DC4.h" +#include "util.h" +#include "main_02054AA4.h" +#include "main_02054BE0.h" + +extern s16 GetBaseFormCastformDeoxysCherrim(s16 monster_id); +extern s16 GetDexNumber(s16 monster_id); + +bool32 DexNumbersEqual(s16 monster1, s16 monster2) { + s16 base_form_1 = FemaleToMaleForm(monster1); + s16 base_form_2 = FemaleToMaleForm(monster2); + s16 true_base_1 = GetBaseFormCastformDeoxysCherrim(base_form_1); + s16 true_base_2 = GetBaseFormCastformDeoxysCherrim(base_form_2); + if (true_base_1 == true_base_2) return TRUE; + else if (IsUnown(true_base_1) && IsUnown(true_base_2)) return FALSE; + else return GetDexNumber(true_base_1) == GetDexNumber(true_base_2); +} From fb220bff0e8cfa04f5fe5faba9a0f4059113003d Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 7 Aug 2025 17:53:12 -0400 Subject: [PATCH 25/40] Corrected name of _dgeq to _dgr --- asm/main_020897DC.s | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/asm/main_020897DC.s b/asm/main_020897DC.s index e8eea906..00cdd52c 100644 --- a/asm/main_020897DC.s +++ b/asm/main_020897DC.s @@ -1426,7 +1426,7 @@ _0208AAE4: mov r0, r4 mov r1, r6 mvn r2, #0 - bl _dgeq + bl _dgr bls _0208AB10 ldr r0, [sp, #0xd0] mov r2, #1 @@ -1626,7 +1626,7 @@ sub_0208AD28: ; 0x0208AD28 mov r0, r6 mov r1, r7 mvn r2, #0 - bl _dgeq + bl _dgr bls _0208ADEC _0208ADE0: ldr r0, _0208AE04 ; =_022BCA70 @@ -2993,7 +2993,7 @@ _0208C104: mov r3, r1 mov r0, r4 mov r1, sl - bl _dgeq + bl _dgr bls _0208C238 ldr r0, _0208BA48 ; =0x8800759C ldr r1, _0208BA4C ; =0x7E37E43C @@ -6338,9 +6338,9 @@ sub_0208EED4: ; 0x0208EED4 bx lr arm_func_end sub_0208EED4 - ; Other names: _d_fge - arm_func_start _dgeq -_dgeq: ; 0x0208EEDC + ; Other names: _d_fgt + arm_func_start _dgr +_dgr: ; 0x0208EEDC mov ip, #0x200000 cmn ip, r1, lsl #1 bhs _0208EF50 @@ -6384,7 +6384,7 @@ _0208EF64: cmp r2, #0 bhi _0208EF0C b _0208EEF0 - arm_func_end _dgeq + arm_func_end _dgr ; Other names: _d_fle arm_func_start _dleq From b0b0b958d275fcf575c2fd5bf70f4d77af077ec2 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 7 Aug 2025 19:30:18 -0400 Subject: [PATCH 26/40] Moved ChooseAiMove nonmatching to C file --- asm/itcm.s | 499 ------------------------------- include/dungeon_ai_parameters.h | 6 + lib/include/nitro/itcm_begin.h | 4 + lib/include/nitro/itcm_end.h | 4 + lib/include/nitro/section.h | 14 + main.lsf | 2 +- src/dungeon_ai_itcm.c | 505 +++++++++++++++++++++++++++++++- src/dungeon_ai_parameters.c | 3 + 8 files changed, 533 insertions(+), 504 deletions(-) create mode 100644 include/dungeon_ai_parameters.h create mode 100644 lib/include/nitro/itcm_begin.h create mode 100644 lib/include/nitro/itcm_end.h create mode 100644 lib/include/nitro/section.h create mode 100644 src/dungeon_ai_parameters.c diff --git a/asm/itcm.s b/asm/itcm.s index ba07977f..8d26d3ec 100644 --- a/asm/itcm.s +++ b/asm/itcm.s @@ -4137,502 +4137,3 @@ sub_01FFB62C: ; 0x01FFB62C .global _01FFB654 _01FFB654: .byte 0x05, 0x03, 0x00, 0x00 - -; https://decomp.me/scratch/zg7V6 -#ifndef NONMATCHING - arm_func_start ChooseAiMove -ChooseAiMove: ; 0x01FFB658 -#ifdef JAPAN -#define CHOOSE_AI_MOVE_OFFSET -4 -#else -#define CHOOSE_AI_MOVE_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x44 - ldr r1, _01FFBD14 ; =DUNGEON_PTR - mov sl, r0 - ldr r0, [r1] - ldr r7, [sl, #0xb4] - add r0, r0, #0x4000 -#ifdef JAPAN - ldrb r0, [r0, #0x36] -#else - ldrb r0, [r0, #0xda] -#endif - bl AreMovesEnabled - cmp r0, #0 - beq _01FFBD0C - mov r0, sl - mov r1, #0 - bl MonsterCannotAttack - cmp r0, #0 - bne _01FFBD0C - mov r0, sl - mov r1, #1 - bl ShouldMonsterRunAwayAndShowEffect - cmp r0, #0 - bne _01FFBD0C - ldr r0, [sl, #0xb4] - ldrb r0, [r0, #0xbc] - cmp r0, #3 - bne _01FFB6CC - mov r0, sl - bl IsMonsterCornered - cmp r0, #0 - bne _01FFBD0C -_01FFB6CC: - mov r0, sl - mov r1, #8 - bl IsTacticSet - cmp r0, #0 - bne _01FFBD0C - ldrb r0, [r7, #0xd0] - cmp r0, #2 - bne _01FFB700 - ldr r0, _01FFBD18 ; =AI_CONFUSED_NO_ATTACK_CHANCE - ldrsh r0, [r0] - bl DungeonRandOutcome__022EAB20 - cmp r0, #0 - bne _01FFBD0C -_01FFB700: - ldrb r0, [r7, #0xd2] - cmp r0, #0 - beq _01FFB7A8 - mov r8, #0 - add r6, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET - mov r4, r8 - mov r5, #1 - b _01FFB7A0 -_01FFB720: - ldrb r0, [r6, r8, lsl #3] - mov r1, r8, lsl #3 - tst r0, #1 - movne r0, r5 - moveq r0, r4 - tst r0, #0xff - beq _01FFB79C - mov r0, sl - add r1, r6, r1 - bl IsChargingTwoTurnMove - cmp r0, #0 - beq _01FFB79C - ldrb r0, [r7, #0xd4] - cmp r0, r8 - bne _01FFB79C - b _01FFB774 -_01FFB760: - add r0, r7, r8, lsl #3 - ldrb r0, [r0, #0x124 + CHOOSE_AI_MOVE_OFFSET] - tst r0, #2 - beq _01FFB77C - sub r8, r8, #1 -_01FFB774: - cmp r8, #0 - bgt _01FFB760 -_01FFB77C: - ldrb r2, [r7, #0x4c] - mov r1, r8, lsl #0x10 - add r0, r7, #0x4a - mov r1, r1, asr #0x10 - bl SetActionUseMoveAi - mov r0, sl - bl UpdateAiTargetPos - b _01FFBD0C -_01FFB79C: - add r8, r8, #1 -_01FFB7A0: - cmp r8, #4 - blt _01FFB720 -_01FFB7A8: - mov r5, #0 - str r5, [sp] - mov r0, r5 - add r4, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET - mov r2, r5 - mov r3, #1 -_01FFB7C0: - ldrb r1, [r4, r0, lsl #3] - add r6, r4, r0, lsl #3 - tst r1, #1 - movne r1, r3 - moveq r1, r2 - tst r1, #0xff - beq _01FFB7F8 - ldrb r1, [r6] - tst r1, #4 - ldrne r1, [sp] - addne r1, r1, #1 - strne r1, [sp] - ldrb r1, [r6, #6] - add r5, r5, r1 -_01FFB7F8: - add r0, r0, #1 - cmp r0, #4 - blt _01FFB7C0 - cmp r5, #0 - bne _01FFB84C - add r0, sp, #0x14 - mov r1, #0x160 - bl InitMove - add r0, sp, #0x1c - add r2, sp, #0x14 - mov r1, sl - bl AiConsiderMove - ldrb r0, [sp, #0x1c] - cmp r0, #0 - beq _01FFBD0C - ldrb r1, [sp, #0x1d] - add r0, r7, #0x4a - bl SetActionStruggle - mov r0, sl - bl UpdateAiTargetPos - b _01FFBD0C -_01FFB84C: - mov r0, sl - mov r1, #0xb - bl IqSkillIsEnabled - mov r5, r0 - mov r0, sl - mov r1, #0x17 - bl IqSkillIsEnabled - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - mov r8, #0 - and r0, r0, #0xff - str r0, [sp, #4] - mov r2, r8 - mov r1, #1 - add r0, sp, #0xc -_01FFB88C: - strb r1, [r0, r2] - add r2, r2, #1 - cmp r2, #4 - blt _01FFB88C - ldr r0, [sp, #4] - cmp r0, #0 - beq _01FFB96C - mov r2, #0 - mov r3, r2 - mov r4, #0x63 - add r0, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET - mov sb, r2 - add r6, sp, #0xc - mov lr, #1 - b _01FFB938 -_01FFB8C8: - ldrb ip, [r0, r3, lsl #3] - add r1, r0, r3, lsl #3 - tst ip, #1 - movne ip, lr - moveq ip, #0 - tst ip, #0xff - beq _01FFB940 - cmp r3, #0 - beq _01FFB928 - ldrb ip, [r1] - tst ip, #2 - bne _01FFB928 - add ip, r2, #1 - cmp ip, r3 - cmplt r4, #2 - bge _01FFB91C - b _01FFB914 -_01FFB90C: - strb sb, [r6, r2] - add r2, r2, #1 -_01FFB914: - cmp r2, r3 - blt _01FFB90C -_01FFB91C: - ldrb r4, [r1, #6] - mov r2, r3 - b _01FFB934 -_01FFB928: - ldrb r1, [r1, #6] - cmp r4, r1 - movge r4, r1 -_01FFB934: - add r3, r3, #1 -_01FFB938: - cmp r3, #4 - blt _01FFB8C8 -_01FFB940: - add r0, r2, #1 - cmp r0, r3 - cmplt r4, #2 - bge _01FFB96C - mov r1, #0 - add r0, sp, #0xc - b _01FFB964 -_01FFB95C: - strb r1, [r0, r2] - add r2, r2, #1 -_01FFB964: - cmp r2, r3 - blt _01FFB95C -_01FFB96C: - add r0, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET - mov sb, #0 - str r0, [sp, #8] - add r4, sp, #0x1c -_01FFB97C: - mov r0, #0 - strb r0, [r4, sb, lsl #3] - ldr r0, [sp, #8] - add r6, r0, sb, lsl #3 - ldrb r0, [r0, sb, lsl #3] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - addne r0, sp, #0xc - ldrneb r0, [r0, sb] - cmpne r0, #0 - beq _01FFBA7C - ldr r2, [sp, #4] - mov r0, sl - mov r1, sb - bl CanAiUseMove - cmp r0, #0 - beq _01FFBA7C - ldrb r0, [r6] - tst r0, #4 - beq _01FFBA7C - mov r0, #1 - strb r0, [r4, sb, lsl #3] - ldrb r0, [r7, #0xd2] - mov r2, sb, lsl #3 - cmp r0, #0xb - bne _01FFBA38 - ldrh r0, [r6, #4] - cmp r0, #0x80 - addeq r1, r4, r2 - moveq r0, #0 - streq r0, [r1, #4] - beq _01FFBA7C - mov r0, sl - mov r1, r6 - bl GetMoveTypeForMonster - cmp r0, #5 - addne r1, r4, sb, lsl #3 - movne r0, #1 - strne r0, [r1, #4] - bne _01FFBA70 - mov r0, r6 - bl GetMoveAiWeight - add r1, r4, sb, lsl #3 - str r0, [r1, #4] - b _01FFBA70 -_01FFBA38: - cmp r5, #0 - beq _01FFBA60 - ldr r1, [sp, #8] - add r0, r4, r2 - add r2, r1, r2 - mov r1, sl - bl AiConsiderMove - add r1, r4, sb, lsl #3 - str r0, [r1, #4] - b _01FFBA70 -_01FFBA60: - mov r0, r6 - bl GetMoveAiWeight - add r1, r4, sb, lsl #3 - str r0, [r1, #4] -_01FFBA70: - add r0, r4, sb, lsl #3 - ldr r0, [r0, #4] - add r8, r8, r0 -_01FFBA7C: - add sb, sb, #1 - cmp sb, #4 - blt _01FFB97C - mov r2, #0 - mov r0, sl - mov r1, #0x17 - str r2, [sp, #0x40] - bl IqSkillIsEnabled - cmp r0, #0 - bne _01FFBAF0 - ldrb r0, [r7, #0xd2] - cmp r0, #0xb - beq _01FFBAF0 - mov r1, #1 - strb r1, [sp, #0x3c] - ldrb r0, [r7, #0xd2] - cmp r0, #0xb - streq r1, [sp, #0x40] - beq _01FFBAE8 - cmp r5, #0 - movne r0, #2 - strne r0, [sp, #0x40] - ldreq r0, [sp] - ldreq r1, _01FFBD1C ; =AI_REGULAR_ATTACK_WEIGHTS - moveq r0, r0, lsl #1 - ldreqsh r0, [r1, r0] - streq r0, [sp, #0x40] -_01FFBAE8: - ldr r0, [sp, #0x40] - add r8, r8, r0 -_01FFBAF0: - cmp r5, #0 - beq _01FFBB80 - mov r0, #0 - mov r8, r0 - mov r5, r0 - mov r2, r0 - add r3, sp, #0x1c -_01FFBB0C: - ldrb r1, [r3, r5, lsl #3] - mov r4, r5, lsl #3 - cmp r1, #0 - add r1, r3, r4 - streq r2, [r1, #4] - beq _01FFBB30 - ldr r1, [r1, #4] - cmp r0, r1 - movlt r0, r1 -_01FFBB30: - add r5, r5, #1 - cmp r5, #5 - blt _01FFBB0C - mov r1, #0 - mov r3, r1 - add r5, sp, #0x1c -_01FFBB48: - ldrb r2, [r5, r1, lsl #3] - mov r4, r1, lsl #3 - cmp r2, #0 - beq _01FFBB74 - add r4, r5, r4 - ldr r2, [r4, #4] - cmp r0, r2 - strne r3, [r4, #4] - add r2, r5, r1, lsl #3 - ldr r2, [r2, #4] - add r8, r8, r2 -_01FFBB74: - add r1, r1, #1 - cmp r1, #5 - blt _01FFBB48 -_01FFBB80: - cmp r8, #0 - beq _01FFBD0C - mov r0, r8 - bl DungeonRandInt - mov r5, r0 - mov r4, #0 - mov r0, sl - mov r1, #0x4e - mov r6, r4 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _01FFBBD8 - mov r0, sl - bl ov29_02338350 - cmp r0, #0 - bne _01FFBBD8 - mov r6, #1 - add r1, sp, #0x10 - mov r0, sl - mov r2, r6 - bl TargetRegularAttack - mov fp, r0 -_01FFBBD8: - cmp r6, #0 - bne _01FFBC10 - mov r0, sl - mov r1, #0x17 - bl IqSkillIsEnabled - cmp r0, #0 - movne fp, #0 - strne fp, [sp, #0x10] - bne _01FFBC10 - add r1, sp, #0x10 - mov r0, sl - mov r2, #1 - bl TargetRegularAttack - mov fp, r0 -_01FFBC10: - mov r8, #0 - add r3, sp, #0x1c - b _01FFBCE4 -_01FFBC1C: - ldrb r0, [r3, r8, lsl #3] - mov r2, r8, lsl #3 - cmp r0, #0 - addne r0, r3, r2 - ldrne r1, [r0, #4] - cmpne r1, #0 - beq _01FFBCE0 - add r4, r4, r1 - cmp r4, r5 - blt _01FFBCE0 - cmp r6, #0 - bne _01FFBC54 - cmp r8, #4 - bne _01FFBC78 -_01FFBC54: - cmp fp, #0 - beq _01FFBCEC - ldr r1, [sp, #0x10] - add r0, r7, #0x4a - and r1, r1, #0xff - bl SetActionRegularAttack - mov r0, sl - bl UpdateAiTargetPos - b _01FFBD0C -_01FFBC78: - add r3, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET - mov r1, sl - add r2, r3, r2 - bl AiConsiderMove - add r0, sp, #0x1c - ldrb r0, [r0, r8, lsl #3] - cmp r0, #0 - beq _01FFBCEC - mov r1, r8 - b _01FFBCB4 -_01FFBCA0: - add r0, r7, r1, lsl #3 - ldrb r0, [r0, #0x124 + CHOOSE_AI_MOVE_OFFSET] - tst r0, #2 - beq _01FFBCBC - sub r1, r1, #1 -_01FFBCB4: - cmp r1, #0 - bgt _01FFBCA0 -_01FFBCBC: - add r0, sp, #0x1d - ldrb r2, [r0, r8, lsl #3] - mov r1, r1, lsl #0x10 - add r0, r7, #0x4a - mov r1, r1, asr #0x10 - bl SetActionUseMoveAi - mov r0, sl - bl UpdateAiTargetPos - b _01FFBD0C -_01FFBCE0: - add r8, r8, #1 -_01FFBCE4: - cmp r8, #5 - blt _01FFBC1C -_01FFBCEC: - cmp fp, #0 - beq _01FFBD0C - ldr r1, [sp, #0x10] - add r0, r7, #0x4a - and r1, r1, #0xff - bl SetActionRegularAttack - mov r0, sl - bl UpdateAiTargetPos -_01FFBD0C: - add sp, sp, #0x44 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_01FFBD14: .word DUNGEON_PTR -_01FFBD18: .word AI_CONFUSED_NO_ATTACK_CHANCE -_01FFBD1C: .word AI_REGULAR_ATTACK_WEIGHTS - arm_func_end ChooseAiMove -#endif diff --git a/include/dungeon_ai_parameters.h b/include/dungeon_ai_parameters.h new file mode 100644 index 00000000..84a27d5e --- /dev/null +++ b/include/dungeon_ai_parameters.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_DUNGEON_AI_PARAMETERS_H +#define PMDSKY_DUNGEON_AI_PARAMETERS_H + +extern const s16 AI_REGULAR_ATTACK_WEIGHTS[5]; + +#endif //PMDSKY_DUNGEON_AI_PARAMETERS_H \ No newline at end of file diff --git a/lib/include/nitro/itcm_begin.h b/lib/include/nitro/itcm_begin.h new file mode 100644 index 00000000..582c8bcf --- /dev/null +++ b/lib/include/nitro/itcm_begin.h @@ -0,0 +1,4 @@ +#include +#ifdef SDK_ARM9 +#pragma section ITCM begin +#endif diff --git a/lib/include/nitro/itcm_end.h b/lib/include/nitro/itcm_end.h new file mode 100644 index 00000000..ad3474e0 --- /dev/null +++ b/lib/include/nitro/itcm_end.h @@ -0,0 +1,4 @@ +#include +#ifdef SDK_ARM9 +#pragma section ITCM end +#endif diff --git a/lib/include/nitro/section.h b/lib/include/nitro/section.h new file mode 100644 index 00000000..d3318a46 --- /dev/null +++ b/lib/include/nitro/section.h @@ -0,0 +1,14 @@ +#ifndef NITRO_SECTION_H_ +#define NITRO_SECTION_H_ + +#ifdef SDK_ARM9 +#pragma define_section ITCM ".itcm" ".itcm.bss" abs32 RWX +#pragma define_section DTCM ".dtcm" ".dtcm.bss" abs32 RWX +#else +#pragma define_section WRAM ".wram" ".wram.bss" abs32 RWX +#endif + +#pragma define_section PARENT ".parent" abs32 RWX +#pragma define_section VERSION ".version" abs32 RWX + +#endif //NITRO_SECTION_H_ diff --git a/main.lsf b/main.lsf index ed4cce31..90c4d1ea 100644 --- a/main.lsf +++ b/main.lsf @@ -189,7 +189,7 @@ Overlay OVY_10 Object asm/overlay_10_rodata_022C4584.o Object src/dungeon_parameters_1.o Object asm/overlay_10_rodata_022C464C.o - Object src/dungeon_ai_itcm.o + Object src/dungeon_ai_parameters.o Object asm/overlay_10_rodata_022C490C.o } Overlay OVY_11 diff --git a/src/dungeon_ai_itcm.c b/src/dungeon_ai_itcm.c index 42ad0148..c260d6d5 100644 --- a/src/dungeon_ai_itcm.c +++ b/src/dungeon_ai_itcm.c @@ -4,6 +4,7 @@ #include "dungeon_action.h" #include "dungeon_action_helper.h" #include "dungeon_ai_attack.h" +#include "dungeon_ai_parameters.h" #include "dungeon_ai_targeting.h" #include "dungeon_capabilities_3.h" #include "dungeon_capabilities_4.h" @@ -19,10 +20,6 @@ #define REGULAR_ATTACK_INDEX 4 -// The weight of the regular attack in the weighted random when the AI is deciding which move to use, depending on how many other attacks the AI can currently use. -// Each index in the array corresponds to the number of attacks (0-4) the AI can use (i.e., is enabled and has PP remaining). -const s16 AI_REGULAR_ATTACK_WEIGHTS[5] = { 100, 20, 30, 40, 50 }; - extern bool8 ov29_02338350(struct entity *monster); extern bool8 TargetRegularAttack(struct entity *pokemon, u32 *target_dir, bool8 skip_petrified); extern void SetActionRegularAttack(struct action_data *monster_action, u8 direction); @@ -31,6 +28,10 @@ extern bool8 CanAiUseMove(struct entity *monster, u32 move_index, bool8 extra_ch extern enum type_id GetMoveTypeForMonster(struct entity *entity, struct move *move); extern u8 GetMoveAiWeight(struct move *move); +#ifdef SDK_ARM9 +#include +#endif //SDK_ARM9 + // https://decomp.me/scratch/zg7V6 #ifdef NONMATCHING void ChooseAiMove(struct entity *monster) @@ -291,4 +292,500 @@ void ChooseAiMove(struct entity *monster) UpdateAiTargetPos(monster); } } +#else +asm void ChooseAiMove(struct entity *monster) +{ +#ifdef JAPAN +#define CHOOSE_AI_MOVE_OFFSET -4 +#else +#define CHOOSE_AI_MOVE_OFFSET 0 #endif + stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr} + sub sp, sp, #0x44 + ldr r1, =DUNGEON_PTR + mov r10, r0 + ldr r0, [r1] + ldr r7, [r10, #0xb4] + add r0, r0, #0x4000 +#ifdef JAPAN + ldrb r0, [r0, #0x36] +#else + ldrb r0, [r0, #0xda] +#endif + bl AreMovesEnabled + cmp r0, #0 + beq _01FFBD0C + mov r0, r10 + mov r1, #0 + bl MonsterCannotAttack + cmp r0, #0 + bne _01FFBD0C + mov r0, r10 + mov r1, #1 + bl ShouldMonsterRunAwayAndShowEffect + cmp r0, #0 + bne _01FFBD0C + ldr r0, [r10, #0xb4] + ldrb r0, [r0, #0xbc] + cmp r0, #3 + bne _01FFB6CC + mov r0, r10 + bl IsMonsterCornered + cmp r0, #0 + bne _01FFBD0C +_01FFB6CC: + mov r0, r10 + mov r1, #8 + bl IsTacticSet + cmp r0, #0 + bne _01FFBD0C + ldrb r0, [r7, #0xd0] + cmp r0, #2 + bne _01FFB700 + ldr r0, =AI_CONFUSED_NO_ATTACK_CHANCE + ldrsh r0, [r0] + bl DungeonRandOutcome__022EAB20 + cmp r0, #0 + bne _01FFBD0C +_01FFB700: + ldrb r0, [r7, #0xd2] + cmp r0, #0 + beq _01FFB7A8 + mov r8, #0 + add r6, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET + mov r4, r8 + mov r5, #1 + b _01FFB7A0 +_01FFB720: + ldrb r0, [r6, r8, lsl #3] + mov r1, r8, lsl #3 + tst r0, #1 + movne r0, r5 + moveq r0, r4 + tst r0, #0xff + beq _01FFB79C + mov r0, r10 + add r1, r6, r1 + bl IsChargingTwoTurnMove + cmp r0, #0 + beq _01FFB79C + ldrb r0, [r7, #0xd4] + cmp r0, r8 + bne _01FFB79C + b _01FFB774 +_01FFB760: + add r0, r7, r8, lsl #3 + ldrb r0, [r0, #0x124 + CHOOSE_AI_MOVE_OFFSET] + tst r0, #2 + beq _01FFB77C + sub r8, r8, #1 +_01FFB774: + cmp r8, #0 + bgt _01FFB760 +_01FFB77C: + ldrb r2, [r7, #0x4c] + mov r1, r8, lsl #0x10 + add r0, r7, #0x4a + mov r1, r1, asr #0x10 + bl SetActionUseMoveAi + mov r0, r10 + bl UpdateAiTargetPos + b _01FFBD0C +_01FFB79C: + add r8, r8, #1 +_01FFB7A0: + cmp r8, #4 + blt _01FFB720 +_01FFB7A8: + mov r5, #0 + str r5, [sp] + mov r0, r5 + add r4, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET + mov r2, r5 + mov r3, #1 +_01FFB7C0: + ldrb r1, [r4, r0, lsl #3] + add r6, r4, r0, lsl #3 + tst r1, #1 + movne r1, r3 + moveq r1, r2 + tst r1, #0xff + beq _01FFB7F8 + ldrb r1, [r6] + tst r1, #4 + ldrne r1, [sp] + addne r1, r1, #1 + strne r1, [sp] + ldrb r1, [r6, #6] + add r5, r5, r1 +_01FFB7F8: + add r0, r0, #1 + cmp r0, #4 + blt _01FFB7C0 + cmp r5, #0 + bne _01FFB84C + add r0, sp, #0x14 + mov r1, #0x160 + bl InitMove + add r0, sp, #0x1c + add r2, sp, #0x14 + mov r1, r10 + bl AiConsiderMove + ldrb r0, [sp, #0x1c] + cmp r0, #0 + beq _01FFBD0C + ldrb r1, [sp, #0x1d] + add r0, r7, #0x4a + bl SetActionStruggle + mov r0, r10 + bl UpdateAiTargetPos + b _01FFBD0C +_01FFB84C: + mov r0, r10 + mov r1, #0xb + bl IqSkillIsEnabled + mov r5, r0 + mov r0, r10 + mov r1, #0x17 + bl IqSkillIsEnabled + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + mov r8, #0 + and r0, r0, #0xff + str r0, [sp, #4] + mov r2, r8 + mov r1, #1 + add r0, sp, #0xc +_01FFB88C: + strb r1, [r0, r2] + add r2, r2, #1 + cmp r2, #4 + blt _01FFB88C + ldr r0, [sp, #4] + cmp r0, #0 + beq _01FFB96C + mov r2, #0 + mov r3, r2 + mov r4, #0x63 + add r0, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET + mov r9, r2 + add r6, sp, #0xc + mov lr, #1 + b _01FFB938 +_01FFB8C8: + ldrb ip, [r0, r3, lsl #3] + add r1, r0, r3, lsl #3 + tst ip, #1 + movne ip, lr + moveq ip, #0 + tst ip, #0xff + beq _01FFB940 + cmp r3, #0 + beq _01FFB928 + ldrb ip, [r1] + tst ip, #2 + bne _01FFB928 + add ip, r2, #1 + cmp ip, r3 + cmplt r4, #2 + bge _01FFB91C + b _01FFB914 +_01FFB90C: + strb r9, [r6, r2] + add r2, r2, #1 +_01FFB914: + cmp r2, r3 + blt _01FFB90C +_01FFB91C: + ldrb r4, [r1, #6] + mov r2, r3 + b _01FFB934 +_01FFB928: + ldrb r1, [r1, #6] + cmp r4, r1 + movge r4, r1 +_01FFB934: + add r3, r3, #1 +_01FFB938: + cmp r3, #4 + blt _01FFB8C8 +_01FFB940: + add r0, r2, #1 + cmp r0, r3 + cmplt r4, #2 + bge _01FFB96C + mov r1, #0 + add r0, sp, #0xc + b _01FFB964 +_01FFB95C: + strb r1, [r0, r2] + add r2, r2, #1 +_01FFB964: + cmp r2, r3 + blt _01FFB95C +_01FFB96C: + add r0, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET + mov r9, #0 + str r0, [sp, #8] + add r4, sp, #0x1c +_01FFB97C: + mov r0, #0 + strb r0, [r4, r9, lsl #3] + ldr r0, [sp, #8] + add r6, r0, r9, lsl #3 + ldrb r0, [r0, r9, lsl #3] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + addne r0, sp, #0xc + ldrneb r0, [r0, r9] + cmpne r0, #0 + beq _01FFBA7C + ldr r2, [sp, #4] + mov r0, r10 + mov r1, r9 + bl CanAiUseMove + cmp r0, #0 + beq _01FFBA7C + ldrb r0, [r6] + tst r0, #4 + beq _01FFBA7C + mov r0, #1 + strb r0, [r4, r9, lsl #3] + ldrb r0, [r7, #0xd2] + mov r2, r9, lsl #3 + cmp r0, #0xb + bne _01FFBA38 + ldrh r0, [r6, #4] + cmp r0, #0x80 + addeq r1, r4, r2 + moveq r0, #0 + streq r0, [r1, #4] + beq _01FFBA7C + mov r0, r10 + mov r1, r6 + bl GetMoveTypeForMonster + cmp r0, #5 + addne r1, r4, r9, lsl #3 + movne r0, #1 + strne r0, [r1, #4] + bne _01FFBA70 + mov r0, r6 + bl GetMoveAiWeight + add r1, r4, r9, lsl #3 + str r0, [r1, #4] + b _01FFBA70 +_01FFBA38: + cmp r5, #0 + beq _01FFBA60 + ldr r1, [sp, #8] + add r0, r4, r2 + add r2, r1, r2 + mov r1, r10 + bl AiConsiderMove + add r1, r4, r9, lsl #3 + str r0, [r1, #4] + b _01FFBA70 +_01FFBA60: + mov r0, r6 + bl GetMoveAiWeight + add r1, r4, r9, lsl #3 + str r0, [r1, #4] +_01FFBA70: + add r0, r4, r9, lsl #3 + ldr r0, [r0, #4] + add r8, r8, r0 +_01FFBA7C: + add r9, r9, #1 + cmp r9, #4 + blt _01FFB97C + mov r2, #0 + mov r0, r10 + mov r1, #0x17 + str r2, [sp, #0x40] + bl IqSkillIsEnabled + cmp r0, #0 + bne _01FFBAF0 + ldrb r0, [r7, #0xd2] + cmp r0, #0xb + beq _01FFBAF0 + mov r1, #1 + strb r1, [sp, #0x3c] + ldrb r0, [r7, #0xd2] + cmp r0, #0xb + streq r1, [sp, #0x40] + beq _01FFBAE8 + cmp r5, #0 + movne r0, #2 + strne r0, [sp, #0x40] + ldreq r0, [sp] + ldreq r1, =AI_REGULAR_ATTACK_WEIGHTS + moveq r0, r0, lsl #1 + ldreqsh r0, [r1, r0] + streq r0, [sp, #0x40] +_01FFBAE8: + ldr r0, [sp, #0x40] + add r8, r8, r0 +_01FFBAF0: + cmp r5, #0 + beq _01FFBB80 + mov r0, #0 + mov r8, r0 + mov r5, r0 + mov r2, r0 + add r3, sp, #0x1c +_01FFBB0C: + ldrb r1, [r3, r5, lsl #3] + mov r4, r5, lsl #3 + cmp r1, #0 + add r1, r3, r4 + streq r2, [r1, #4] + beq _01FFBB30 + ldr r1, [r1, #4] + cmp r0, r1 + movlt r0, r1 +_01FFBB30: + add r5, r5, #1 + cmp r5, #5 + blt _01FFBB0C + mov r1, #0 + mov r3, r1 + add r5, sp, #0x1c +_01FFBB48: + ldrb r2, [r5, r1, lsl #3] + mov r4, r1, lsl #3 + cmp r2, #0 + beq _01FFBB74 + add r4, r5, r4 + ldr r2, [r4, #4] + cmp r0, r2 + strne r3, [r4, #4] + add r2, r5, r1, lsl #3 + ldr r2, [r2, #4] + add r8, r8, r2 +_01FFBB74: + add r1, r1, #1 + cmp r1, #5 + blt _01FFBB48 +_01FFBB80: + cmp r8, #0 + beq _01FFBD0C + mov r0, r8 + bl DungeonRandInt + mov r5, r0 + mov r4, #0 + mov r0, r10 + mov r1, #0x4e + mov r6, r4 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _01FFBBD8 + mov r0, r10 + bl ov29_02338350 + cmp r0, #0 + bne _01FFBBD8 + mov r6, #1 + add r1, sp, #0x10 + mov r0, r10 + mov r2, r6 + bl TargetRegularAttack + mov r11, r0 +_01FFBBD8: + cmp r6, #0 + bne _01FFBC10 + mov r0, r10 + mov r1, #0x17 + bl IqSkillIsEnabled + cmp r0, #0 + movne r11, #0 + strne r11, [sp, #0x10] + bne _01FFBC10 + add r1, sp, #0x10 + mov r0, r10 + mov r2, #1 + bl TargetRegularAttack + mov r11, r0 +_01FFBC10: + mov r8, #0 + add r3, sp, #0x1c + b _01FFBCE4 +_01FFBC1C: + ldrb r0, [r3, r8, lsl #3] + mov r2, r8, lsl #3 + cmp r0, #0 + addne r0, r3, r2 + ldrne r1, [r0, #4] + cmpne r1, #0 + beq _01FFBCE0 + add r4, r4, r1 + cmp r4, r5 + blt _01FFBCE0 + cmp r6, #0 + bne _01FFBC54 + cmp r8, #4 + bne _01FFBC78 +_01FFBC54: + cmp r11, #0 + beq _01FFBCEC + ldr r1, [sp, #0x10] + add r0, r7, #0x4a + and r1, r1, #0xff + bl SetActionRegularAttack + mov r0, r10 + bl UpdateAiTargetPos + b _01FFBD0C +_01FFBC78: + add r3, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET + mov r1, r10 + add r2, r3, r2 + bl AiConsiderMove + add r0, sp, #0x1c + ldrb r0, [r0, r8, lsl #3] + cmp r0, #0 + beq _01FFBCEC + mov r1, r8 + b _01FFBCB4 +_01FFBCA0: + add r0, r7, r1, lsl #3 + ldrb r0, [r0, #0x124 + CHOOSE_AI_MOVE_OFFSET] + tst r0, #2 + beq _01FFBCBC + sub r1, r1, #1 +_01FFBCB4: + cmp r1, #0 + bgt _01FFBCA0 +_01FFBCBC: + add r0, sp, #0x1d + ldrb r2, [r0, r8, lsl #3] + mov r1, r1, lsl #0x10 + add r0, r7, #0x4a + mov r1, r1, asr #0x10 + bl SetActionUseMoveAi + mov r0, r10 + bl UpdateAiTargetPos + b _01FFBD0C +_01FFBCE0: + add r8, r8, #1 +_01FFBCE4: + cmp r8, #5 + blt _01FFBC1C +_01FFBCEC: + cmp r11, #0 + beq _01FFBD0C + ldr r1, [sp, #0x10] + add r0, r7, #0x4a + and r1, r1, #0xff + bl SetActionRegularAttack + mov r0, r10 + bl UpdateAiTargetPos +_01FFBD0C: + add sp, sp, #0x44 + ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc} +} +#endif + +#ifdef SDK_ARM9 +#include +#endif //SDK_ARM9 diff --git a/src/dungeon_ai_parameters.c b/src/dungeon_ai_parameters.c new file mode 100644 index 00000000..e9b4c907 --- /dev/null +++ b/src/dungeon_ai_parameters.c @@ -0,0 +1,3 @@ +// The weight of the regular attack in the weighted random when the AI is deciding which move to use, depending on how many other attacks the AI can currently use. +// Each index in the array corresponds to the number of attacks (0-4) the AI can use (i.e., is enabled and has PP remaining). +const s16 AI_REGULAR_ATTACK_WEIGHTS[5] = { 100, 20, 30, 40, 50 }; \ No newline at end of file From bf5943365359f6f57e8d03828e5c0b9bb0fefde9 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 7 Aug 2025 19:42:07 -0400 Subject: [PATCH 27/40] Moved StatusCheckerCheck nonmatching to C file --- asm/overlay_29_02332A0C.s | 1152 ------------------------------------- include/move_checks.h | 4 + src/move_checks.c | 1149 +++++++++++++++++++++++++++++++++++- 3 files changed, 1152 insertions(+), 1153 deletions(-) diff --git a/asm/overlay_29_02332A0C.s b/asm/overlay_29_02332A0C.s index 2c00d675..ee6f0f31 100644 --- a/asm/overlay_29_02332A0C.s +++ b/asm/overlay_29_02332A0C.s @@ -489,1155 +489,3 @@ ov29_02333044: ; 0x02333044 bl ov29_02304A48 ldmia sp!, {r3, r4, r5, pc} arm_func_end ov29_02333044 - -; https://decomp.me/scratch/TnODN -#ifndef NONMATCHING - arm_func_start StatusCheckerCheck -StatusCheckerCheck: ; 0x02333074 -#ifdef JAPAN -#define STATUS_CHECKER_CHECK_OFFSET -4 -#define STATUS_CHECKER_CHECK_OFFSET_2 -0xA4 -#else -#define STATUS_CHECKER_CHECK_OFFSET 0 -#define STATUS_CHECKER_CHECK_OFFSET_2 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldrh r2, [r1, #4] - ldr r1, _02333F98 ; =0x00000109 - mov r4, r0 - cmp r2, r1 - ldr r3, [r4, #0xb4] - bgt _02333314 - cmp r2, r1 - bge _02333834 - cmp r2, #0x9c - bgt _023331F4 - bge _023339D8 - cmp r2, #0x4a - bgt _02333170 - bge _0233397C - cmp r2, #0x2b - bgt _02333114 - bge _02333BCC - cmp r2, #0x13 - bgt _023330F8 - bge _02333620 - sub r1, r2, #7 - cmp r1, #7 - addls pc, pc, r1, lsl #2 - b _02333F90 -_023330D8: ; jump table - b _02333BCC ; case 0 - b _023339F0 ; case 1 - b _02333F90 ; case 2 - b _02333F90 ; case 3 - b _02333F90 ; case 4 - b _02333918 ; case 5 - b _02333F90 ; case 6 - b _0233360C ; case 7 -_023330F8: - cmp r2, #0x26 - bgt _02333108 - beq _02333634 - b _02333F90 -_02333108: - cmp r2, #0x28 - beq _02333648 - b _02333F90 -_02333114: - cmp r2, #0x37 - bgt _0233313C - bge _02333660 - cmp r2, #0x31 - bgt _02333130 - beq _02333A84 - b _02333F90 -_02333130: - cmp r2, #0x33 - beq _02333634 - b _02333F90 -_0233313C: - cmp r2, #0x3d - bgt _02333164 - cmp r2, #0x38 - blt _02333F90 - beq _02333B00 - cmp r2, #0x3a - beq _023336B0 - cmp r2, #0x3d - beq _023336D8 - b _02333F90 -_02333164: - cmp r2, #0x46 - beq _023336B0 - b _02333F90 -_02333170: - cmp r2, #0x68 - bgt _023331B0 - bge _02333730 - cmp r2, #0x62 - bgt _02333194 - bge _02333700 - cmp r2, #0x5f - beq _023336EC - b _02333F90 -_02333194: - cmp r2, #0x63 - bgt _023331A4 - beq _02333714 - b _02333F90 -_023331A4: - cmp r2, #0x66 - beq _02333A98 - b _02333F90 -_023331B0: - cmp r2, #0x86 - bgt _023331D8 - bge _02333954 - cmp r2, #0x80 - bgt _023331CC - beq _02333744 - b _02333F90 -_023331CC: - cmp r2, #0x82 - beq _02333758 - b _02333F90 -_023331D8: - cmp r2, #0x8d - bgt _023331E8 - beq _0233392C - b _02333F90 -_023331E8: - cmp r2, #0x94 - beq _02333B14 - b _02333F90 -_023331F4: - cmp r2, #0xd7 - bgt _02333284 - bge _023336C4 - cmp r2, #0xb9 - bgt _02333240 - bge _02333BF4 - cmp r2, #0xa9 - bgt _02333224 - bge _02333780 - cmp r2, #0xa0 - beq _02333AB8 - b _02333F90 -_02333224: - cmp r2, #0xb5 - bgt _02333234 - beq _02333B28 - b _02333F90 -_02333234: - cmp r2, #0xb8 - beq _02333BE0 - b _02333F90 -_02333240: - cmp r2, #0xc3 - bgt _02333268 - bge _02333660 - cmp r2, #0xba - bgt _0233325C - beq _023336B0 - b _02333F90 -_0233325C: - cmp r2, #0xbb - beq _02333BCC - b _02333F90 -_02333268: - cmp r2, #0xca - bgt _02333278 - beq _023336B0 - b _02333F90 -_02333278: - cmp r2, #0xd4 - beq _02333A44 - b _02333F90 -_02333284: - cmp r2, #0xec - bgt _023332C4 - bge _023337D4 - cmp r2, #0xe1 - bgt _023332A8 - bge _02333B3C - cmp r2, #0xdf - beq _02333940 - b _02333F90 -_023332A8: - cmp r2, #0xe8 - bgt _023332B8 - beq _023339B0 - b _02333F90 -_023332B8: - cmp r2, #0xe9 - beq _02333794 - b _02333F90 -_023332C4: - sub r0, r1, #8 - cmp r2, r0 - bgt _023332F0 - bge _02333674 - cmp r2, #0xf5 - bgt _023332E4 - beq _0233380C - b _02333F90 -_023332E4: - cmp r2, #0x100 - beq _02333820 - b _02333F90 -_023332F0: - sub r0, r1, #7 - cmp r2, r0 - bgt _02333304 - beq _023336B0 - b _02333F90 -_02333304: - sub r0, r1, #6 - cmp r2, r0 - beq _0233376C - b _02333F90 -_02333314: - add r5, r1, #0x68 - cmp r2, r5 - bgt _023334B4 - bge _02333BCC - add r5, r1, #0x34 - cmp r2, r5 - bgt _02333414 - bge _02333820 - cmp r2, #0x120 - bgt _02333398 - bge _02333884 - add r4, r1, #0x11 - cmp r2, r4 - bgt _02333378 - mov r0, r4 - cmp r2, r0 - bge _02333B60 - add r0, r1, #4 - cmp r2, r0 - bgt _02333F90 - cmp r2, #0x10c - blt _02333F90 - cmpne r2, r0 - beq _02333BCC - b _02333F90 -_02333378: - cmp r2, #0x11c - bgt _02333388 - beq _02333BCC - b _02333F90 -_02333388: - add r1, r1, #0x15 - cmp r2, r1 - beq _02333850 - b _02333F90 -_02333398: - add r0, r1, #0x2a - cmp r2, r0 - bgt _023333F4 - add r0, r1, #0x24 - subs r0, r2, r0 - addpl pc, pc, r0, lsl #2 - b _023333D0 -_023333B4: ; jump table - b _02333904 ; case 0 - b _023336B0 ; case 1 - b _02333F90 ; case 2 - b _02333A98 ; case 3 - b _02333904 ; case 4 - b _02333F90 ; case 5 - b _02333A64 ; case 6 -_023333D0: - ldr r0, _02333F9C ; =0x00000127 - cmp r2, r0 - bgt _023333E4 - beq _02333B84 - b _02333F90 -_023333E4: - add r0, r0, #3 - cmp r2, r0 - beq _023338F0 - b _02333F90 -_023333F4: - add r0, r1, #0x30 - cmp r2, r0 - bgt _02333408 - beq _02333898 - b _02333F90 -_02333408: - cmp r2, #0x13c - beq _023338AC - b _02333F90 -_02333414: - cmp r2, #0x154 - bgt _02333464 - bge _023336D8 - add r0, r1, #0x44 - cmp r2, r0 - bgt _02333440 - bge _02333660 - add r0, r1, #0x36 - cmp r2, r0 - beq _02333B9C - b _02333F90 -_02333440: - add r0, r1, #0x45 - cmp r2, r0 - bgt _02333454 - beq _02333BB8 - b _02333F90 -_02333454: - add r0, r1, #0x49 - cmp r2, r0 - beq _023338C0 - b _02333F90 -_02333464: - cmp r2, #0x16c - bgt _02333494 - bge _02333990 - add r0, r1, #0x4e - cmp r2, r0 - bgt _02333484 - beq _023338D4 - b _02333F90 -_02333484: - add r0, r1, #0x54 - cmp r2, r0 - beq _02333700 - b _02333F90 -_02333494: - add r0, r1, #0x66 - cmp r2, r0 - bgt _023334A8 - beq _02333BCC - b _02333F90 -_023334A8: - cmp r2, #0x170 - beq _02333BCC - b _02333F90 -_023334B4: - cmp r2, #0x1d8 - bgt _02333578 - bge _02333634 - add r5, r1, #0x7e - cmp r2, r5 - bgt _02333520 - mov r4, r5 - cmp r2, r4 - bge _02333968 - add r4, r1, #0x71 - cmp r2, r4 - bgt _02333500 - mov r0, r4 - cmp r2, r0 - bge _02333ACC - add r0, r1, #0x6e - cmp r2, r0 - beq _02333BCC - b _02333F90 -_02333500: - cmp r2, #0x17c - bgt _02333510 - beq _02333A98 - b _02333F90 -_02333510: - add r1, r1, #0x7c - cmp r2, r1 - beq _02333A1C - b _02333F90 -_02333520: - cmp r2, #0x1bc - bgt _02333550 - bge _023336EC - add r0, r1, #0x8d - cmp r2, r0 - bgt _02333540 - beq _02333BCC - b _02333F90 -_02333540: - add r0, r1, #0xa9 - cmp r2, r0 - beq _02333CEC - b _02333F90 -_02333550: - add r5, r1, #0xb6 - cmp r2, r5 - bgt _0233356C - mov r0, r5 - cmp r2, r0 - beq _02333D00 - b _02333F90 -_0233356C: - cmp r2, #0x1d0 - beq _02333DE0 - b _02333F90 -_02333578: - add r0, r1, #0xea - cmp r2, r0 - bgt _023335C0 - bge _02333F24 - cmp r2, #0x1ec - bgt _023335A0 - bge _02333DF8 - cmp r2, #0x1e0 - beq _02333B84 - b _02333F90 -_023335A0: - add r0, r1, #0xe4 - cmp r2, r0 - bgt _023335B4 - beq _02333F10 - b _02333F90 -_023335B4: - cmp r2, #0x1f0 - beq _02333B84 - b _02333F90 -_023335C0: - rsb r0, r1, #0x320 - cmp r2, r0 - bgt _023335EC - bge _023336D8 - cmp r2, #0x208 - bgt _023335E0 - beq _02333F38 - b _02333F90 -_023335E0: - cmp r2, #0x214 - beq _02333F6C - b _02333F90 -_023335EC: - cmp r2, #0x21c - bgt _023335FC - beq _023336EC - b _02333F90 -_023335FC: - ldr r0, _02333FA0 ; =0x0000021E - cmp r2, r0 - beq _02333F80 - b _02333F90 -_0233360C: - bl GetApparentWeather - cmp r0, #5 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333620: - ldrb r0, [r3, #0xd2] - cmp r0, #0xc - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333634: - ldrb r0, [r3, #0xd5] - cmp r0, #4 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333648: - mov r0, r4 - bl MirrorMoveIsActive - cmp r0, #0 - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333660: - ldrsh r0, [r3, #0x24] - cmp r0, #0x13 - ble _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333674: - ldrsh r0, [r3, #0x24] - cmp r0, #0x13 - bgt _023336A8 - add r0, r3, #0x100 - ldrh r1, [r0, #0x46 + STATUS_CHECKER_CHECK_OFFSET] - sub r2, sp, #4 - strh r1, [r2] - ldrh r0, [r0, #0x48 + STATUS_CHECKER_CHECK_OFFSET] - strh r0, [r2, #2] - ldr r0, [r2] - bl CeilFixedPoint - cmp r0, #1 - bge _02333F90 -_023336A8: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_023336B0: - ldrsh r0, [r3, #0x28] - cmp r0, #0x13 - ble _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_023336C4: - ldrsh r0, [r3, #0x2a] - cmp r0, #0x13 - ble _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_023336D8: - ldrb r0, [r3, #0xd2] - cmp r0, #1 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_023336EC: - ldr r0, [r3, #0x110 + STATUS_CHECKER_CHECK_OFFSET] - cmp r0, #3 - ble _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333700: - ldrb r0, [r3, #0xec] - cmp r0, #1 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333714: - ldrsh r0, [r3, #0x28] - cmp r0, #0x13 - ldrgtsh r0, [r3, #0x2a] - cmpgt r0, #0x13 - ble _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333730: - ldrb r0, [r3, #0xd5] - cmp r0, #9 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333744: - ldrb r0, [r3, #0xd2] - cmp r0, #0xb - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333758: - bl MistIsActive - cmp r0, #0 - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0233376C: - ldrb r0, [r3, #0xd5] - cmp r0, #3 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333780: - ldrsh r0, [r3, #0x2e] - cmp r0, #0x13 - ble _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333794: - ldrb r0, [r3, #0xc4] - cmp r0, #5 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - ldrsh r4, [r3, #0x12] - ldrsh r2, [r3, #0x16] - rsb r0, r1, #0x4f0 - ldrsh r1, [r3, #0x10] - add r2, r4, r2 - cmp r2, r0 - movgt r2, r0 - add r0, r2, r2, lsr #31 - cmp r1, r0, asr #1 - ble _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_023337D4: - ldrsh r4, [r3, #0x12] - ldrsh r2, [r3, #0x16] - rsb r0, r1, #0x4f0 - add r2, r4, r2 - cmp r2, r0 - movgt r2, r0 - ldrsh r0, [r3, #0x10] - cmp r2, r0 - ble _02333804 - ldrb r0, [r3, #0x11e + STATUS_CHECKER_CHECK_OFFSET] - cmp r0, #0 - bne _02333F90 -_02333804: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0233380C: - ldrb r0, [r3, #0x11e + STATUS_CHECKER_CHECK_OFFSET] - cmp r0, #0 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333820: - ldrb r0, [r3, #0xec] - cmp r0, #3 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333834: - ldrsh r0, [r3, #0x24] - cmp r0, #0x13 - ldrgtsh r0, [r3, #0x28] - cmpgt r0, #0x13 - ble _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333850: - ldr r1, _02333FA4 ; =DUNGEON_PTR - mov r2, #0xc - ldr r1, [r1] - ldr r3, _02333FA8 ; =ov10_022C6322 - add r1, r1, #0x4000 -#ifdef JAPAN - ldrsh r1, [r1, #0x30] -#else - ldrsh r1, [r1, #0xd4] -#endif - smulbb r1, r1, r2 - ldrb r1, [r3, r1] - bl MonsterIsType - cmp r0, #0 - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333884: - ldrsh r0, [r3, #0x26] - cmp r0, #0x13 - ble _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333898: - ldrb r0, [r3, #0xe0] - cmp r0, #2 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_023338AC: - ldrb r0, [r3, #0xd5] - cmp r0, #8 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_023338C0: - ldrb r0, [r3, #0xd5] - cmp r0, #1 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_023338D4: - ldrsh r0, [r3, #0x24] - cmp r0, #0x13 - ldrgt r0, [r3, #0x110 + STATUS_CHECKER_CHECK_OFFSET] - cmpgt r0, #3 - ble _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_023338F0: - ldrb r0, [r3, #0xd5] - cmp r0, #5 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333904: - ldrb r0, [r3, #0xd5] - cmp r0, #7 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333918: - bl GetApparentWeather - cmp r0, #4 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0233392C: - bl GetApparentWeather - cmp r0, #2 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333940: - bl GetApparentWeather - cmp r0, #1 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333954: - ldrb r0, [r3, #0xd5] - cmp r0, #2 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333968: - ldrb r0, [r3, #0xef] - cmp r0, #1 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0233397C: - ldrb r0, [r3, #0xec] - cmp r0, #4 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333990: - ldrb r0, [r3, #0x62] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_023339B0: - bl ov29_023007DC - cmp r0, #0 - bne _02333F90 - mov r0, r4 - mov r1, #0 - bl MonsterHasNegativeStatus - cmp r0, #0 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_023339D8: - bl GetTileAtEntity - bl IsTileGround - cmp r0, #0 - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_023339F0: - bl GetTileAtEntity - mov r4, r0 - bl IsTileGround - cmp r0, #0 - beq _02333A14 - ldrh r0, [r4] - and r0, r0, #3 - cmp r0, #1 - beq _02333F90 -_02333A14: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333A1C: - bl GetTileAtEntity - ldr r0, [r0, #0x10] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - ldr r0, [r0] - cmp r0, #2 - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333A44: - ldr r0, _02333FA4 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0xc000 - ldrb r0, [r0, #0xd5b + STATUS_CHECKER_CHECK_OFFSET_2] - cmp r0, #0 - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333A64: - ldr r0, _02333FA4 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0xc000 - ldrb r0, [r0, #0xd5c + STATUS_CHECKER_CHECK_OFFSET_2] - cmp r0, #0 - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333A84: - ldrb r0, [r3, #0xfd] - cmp r0, #0 - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333A98: - ldr r0, _02333FA4 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x3000 - ldrb r0, [r0, #0xe38 + STATUS_CHECKER_CHECK_OFFSET_2] - cmp r0, #0 - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333AB8: - ldrb r0, [r3, #0x11e + STATUS_CHECKER_CHECK_OFFSET] - cmp r0, #3 - blo _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333ACC: - ldrb r0, [r3, #0x62] - tst r0, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _02333F90 - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333B00: - ldrsh r0, [r3, #0x2e] - cmp r0, #0x14 - blt _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333B14: - ldrsh r0, [r3, #0x26] - cmp r0, #0x14 - blt _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333B28: - ldrsh r0, [r3, #0x24] - cmp r0, #0x14 - blt _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333B3C: - ldrb r0, [r3, #6] - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldrb r0, [r3, #0xd5] - cmp r0, #6 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333B60: - ldrb r0, [r3, #0xef] - cmp r0, #2 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - bl IsCurrentFixedRoomBossFight - cmp r0, #0 - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333B84: - add r0, r4, #4 - bl CanLayTrap - cmp r0, #0 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333B9C: - ldrsh r0, [r3, #0x26] - cmp r0, #0x14 - ldrgesh r0, [r3, #0x2a] - cmpge r0, #0x14 - blt _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333BB8: - ldrb r0, [r3, #0xd8] - cmp r0, #3 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333BCC: - bl IsCurrentFixedRoomBossFight - cmp r0, #0 - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333BE0: - bl Conversion2IsActive - cmp r0, #0 - beq _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333BF4: - ldrb r0, [r3, #6] - mov r5, #0 - cmp r0, #0 - beq _02333C78 - ldr r6, _02333FA4 ; =DUNGEON_PTR - b _02333C60 -_02333C0C: - ldr r0, [r6] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 - ldr r7, [r0, #0xb38 + STATUS_CHECKER_CHECK_OFFSET_2] - mov r0, r7 - bl EntityIsValid__02333FAC - cmp r0, #0 - cmpne r7, r4 - beq _02333C5C - mov r0, r4 - mov r1, r7 - bl CanSeeTarget - cmp r0, #0 - beq _02333C5C - ldr r1, [r7, #0xb4] - ldrsh r0, [r1, #0x24] - cmp r0, #0x14 - ldrltsh r0, [r1, #0x26] - cmplt r0, #0x14 - blt _02333C68 -_02333C5C: - add r5, r5, #1 -_02333C60: - cmp r5, #0x10 - blt _02333C0C -_02333C68: - cmp r5, #0x10 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333C78: - ldr r6, _02333FA4 ; =DUNGEON_PTR - b _02333CD4 -_02333C80: - ldr r0, [r6] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 - ldr r7, [r0, #0xb28 + STATUS_CHECKER_CHECK_OFFSET_2] - mov r0, r7 - bl EntityIsValid__02333FAC - cmp r0, #0 - cmpne r7, r4 - beq _02333CD0 - mov r0, r4 - mov r1, r7 - bl CanSeeTarget - cmp r0, #0 - beq _02333CD0 - ldr r1, [r7, #0xb4] - ldrsh r0, [r1, #0x24] - cmp r0, #0x14 - ldrltsh r0, [r1, #0x26] - cmplt r0, #0x14 - blt _02333CDC -_02333CD0: - add r5, r5, #1 -_02333CD4: - cmp r5, #4 - blt _02333C80 -_02333CDC: - cmp r5, #4 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333CEC: - ldrb r0, [r3, #0xd5] - cmp r0, #0x10 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333D00: - ldrb r0, [r3, #6] - mov r5, #0 - cmp r0, #0 - beq _02333D78 - ldr r6, _02333FA4 ; =DUNGEON_PTR - b _02333D60 -_02333D18: - ldr r0, [r6] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 - ldr r7, [r0, #0xb38 + STATUS_CHECKER_CHECK_OFFSET_2] - mov r0, r7 - bl EntityIsValid__02333FAC - cmp r0, #0 - cmpne r7, r4 - beq _02333D5C - mov r0, r4 - mov r1, r7 - bl CanSeeTarget - cmp r0, #0 - ldrne r0, [r7, #0xb4] - ldrneb r0, [r0, #0xd5] - cmpne r0, #0x11 - bne _02333D68 -_02333D5C: - add r5, r5, #1 -_02333D60: - cmp r5, #0x10 - blt _02333D18 -_02333D68: - cmp r5, #0x10 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333D78: - ldr r6, _02333FA4 ; =DUNGEON_PTR - b _02333DC8 -_02333D80: - ldr r0, [r6] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 - ldr r7, [r0, #0xb28 + STATUS_CHECKER_CHECK_OFFSET_2] - mov r0, r7 - bl EntityIsValid__02333FAC - cmp r0, #0 - cmpne r7, r4 - beq _02333DC4 - mov r0, r4 - mov r1, r7 - bl CanSeeTarget - cmp r0, #0 - ldrne r0, [r7, #0xb4] - ldrneb r0, [r0, #0xd5] - cmpne r0, #0x11 - bne _02333DD0 -_02333DC4: - add r5, r5, #1 -_02333DC8: - cmp r5, #4 - blt _02333D80 -_02333DD0: - cmp r5, #4 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333DE0: - mov r1, #0 - bl MonsterHasNegativeStatus - cmp r0, #0 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333DF8: - ldrb r0, [r3, #6] - mov r5, #0 - cmp r0, #0 - beq _02333E8C - ldr r6, _02333FA4 ; =DUNGEON_PTR - b _02333E74 -_02333E10: - ldr r0, [r6] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 - ldr r7, [r0, #0xb38 + STATUS_CHECKER_CHECK_OFFSET_2] - mov r0, r7 - bl EntityIsValid__02333FAC - cmp r0, #0 - cmpne r7, r4 - beq _02333E70 - mov r0, r4 - mov r1, r7 - bl CanSeeTarget - cmp r0, #0 - beq _02333E70 - ldr r1, [r7, #0xb4] - ldrsh r0, [r1, #0x24] - cmp r0, #0x14 - ldrgesh r0, [r1, #0x28] - cmpge r0, #0x14 - ldrgesh r0, [r1, #0x26] - cmpge r0, #0x14 - ldrgesh r0, [r1, #0x2a] - cmpge r0, #0x14 - blt _02333E7C -_02333E70: - add r5, r5, #1 -_02333E74: - cmp r5, #0x10 - blt _02333E10 -_02333E7C: - cmp r5, #0x10 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333E8C: - ldr r6, _02333FA4 ; =DUNGEON_PTR - b _02333EF8 -_02333E94: - ldr r0, [r6] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 - ldr r7, [r0, #0xb28 + STATUS_CHECKER_CHECK_OFFSET_2] - mov r0, r7 - bl EntityIsValid__02333FAC - cmp r0, #0 - cmpne r7, r4 - beq _02333EF4 - mov r0, r4 - mov r1, r7 - bl CanSeeTarget - cmp r0, #0 - beq _02333EF4 - ldr r1, [r7, #0xb4] - ldrsh r0, [r1, #0x24] - cmp r0, #0x14 - ldrgesh r0, [r1, #0x28] - cmpge r0, #0x14 - ldrgesh r0, [r1, #0x26] - cmpge r0, #0x14 - ldrgesh r0, [r1, #0x2a] - cmpge r0, #0x14 - blt _02333F00 -_02333EF4: - add r5, r5, #1 -_02333EF8: - cmp r5, #4 - blt _02333E94 -_02333F00: - cmp r5, #4 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333F10: - ldrb r0, [r3, #0xf7] - cmp r0, #1 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333F24: - ldr r0, [r3, #0x110 + STATUS_CHECKER_CHECK_OFFSET] - cmp r0, #1 - ble _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333F38: - mov r1, #0 - b _02333F54 -_02333F40: - add r0, r3, r1, lsl #1 - ldrsh r0, [r0, #0x28] - cmp r0, #0x14 - blt _02333F5C - add r1, r1, #1 -_02333F54: - cmp r1, #2 - blt _02333F40 -_02333F5C: - cmp r1, #2 - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333F6C: - ldrb r0, [r3, #0xd5] - cmp r0, #0xf - bne _02333F90 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02333F80: - ldrsh r0, [r3, #0x26] - cmp r0, #0x14 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} -_02333F90: - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02333F98: .word 0x00000109 -_02333F9C: .word 0x00000127 -_02333FA0: .word 0x0000021E -_02333FA4: .word DUNGEON_PTR -_02333FA8: .word ov10_022C6322 - arm_func_end StatusCheckerCheck -#endif diff --git a/include/move_checks.h b/include/move_checks.h index e950a5cf..e7933a4a 100644 --- a/include/move_checks.h +++ b/include/move_checks.h @@ -3,6 +3,10 @@ #include "dungeon_mode.h" +// Determines if using a given move against its intended targets would be redundant because all of them already have the effect caused by said move. Used for moves that affect the user or allies. +// attacker: Pointer to the entity that is considering using the move +// move: Move pointer +// return: True if it makes sense to use the move, false if it would be redundant given the effects it causes and the effects that all the targets already have. bool8 StatusCheckerCheck(struct entity *attacker, struct move *move); // Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity). bool8 EntityIsValid__02333FAC(struct entity *entity); diff --git a/src/move_checks.c b/src/move_checks.c index 679970e6..adf64179 100644 --- a/src/move_checks.c +++ b/src/move_checks.c @@ -13,6 +13,8 @@ #include "trap.h" #include "weather.h" +extern bool8 ov29_023007DC(struct entity *entity); + // https://decomp.me/scratch/TnODN #ifdef NONMATCHING bool8 StatusCheckerCheck(struct entity *attacker, struct move *move) @@ -195,7 +197,7 @@ bool8 StatusCheckerCheck(struct entity *attacker, struct move *move) return FALSE; break; case MOVE_REST: - if (!HasLowHealth(attacker) && !MonsterHasNegativeStatus(attacker, FALSE)) + if (!ov29_023007DC(attacker) && !MonsterHasNegativeStatus(attacker, FALSE)) return FALSE; break; case MOVE_DIVE: @@ -461,6 +463,1151 @@ bool8 StatusCheckerCheck(struct entity *attacker, struct move *move) } return TRUE; } +#else +extern void *ov10_022C6322; + +asm bool8 StatusCheckerCheck(struct entity *attacker, struct move *move) +{ +#ifdef JAPAN +#define STATUS_CHECKER_CHECK_OFFSET -4 +#define STATUS_CHECKER_CHECK_OFFSET_2 -0xA4 +#else +#define STATUS_CHECKER_CHECK_OFFSET 0 +#define STATUS_CHECKER_CHECK_OFFSET_2 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldrh r2, [r1, #4] + ldr r1, =0x00000109 + mov r4, r0 + cmp r2, r1 + ldr r3, [r4, #0xb4] + bgt _02333314 + cmp r2, r1 + bge _02333834 + cmp r2, #0x9c + bgt _023331F4 + bge _023339D8 + cmp r2, #0x4a + bgt _02333170 + bge _0233397C + cmp r2, #0x2b + bgt _02333114 + bge _02333BCC + cmp r2, #0x13 + bgt _023330F8 + bge _02333620 + sub r1, r2, #7 + cmp r1, #7 + addls pc, pc, r1, lsl #2 + b _02333F90 +_023330D8: + b _02333BCC + b _023339F0 + b _02333F90 + b _02333F90 + b _02333F90 + b _02333918 + b _02333F90 + b _0233360C +_023330F8: + cmp r2, #0x26 + bgt _02333108 + beq _02333634 + b _02333F90 +_02333108: + cmp r2, #0x28 + beq _02333648 + b _02333F90 +_02333114: + cmp r2, #0x37 + bgt _0233313C + bge _02333660 + cmp r2, #0x31 + bgt _02333130 + beq _02333A84 + b _02333F90 +_02333130: + cmp r2, #0x33 + beq _02333634 + b _02333F90 +_0233313C: + cmp r2, #0x3d + bgt _02333164 + cmp r2, #0x38 + blt _02333F90 + beq _02333B00 + cmp r2, #0x3a + beq _023336B0 + cmp r2, #0x3d + beq _023336D8 + b _02333F90 +_02333164: + cmp r2, #0x46 + beq _023336B0 + b _02333F90 +_02333170: + cmp r2, #0x68 + bgt _023331B0 + bge _02333730 + cmp r2, #0x62 + bgt _02333194 + bge _02333700 + cmp r2, #0x5f + beq _023336EC + b _02333F90 +_02333194: + cmp r2, #0x63 + bgt _023331A4 + beq _02333714 + b _02333F90 +_023331A4: + cmp r2, #0x66 + beq _02333A98 + b _02333F90 +_023331B0: + cmp r2, #0x86 + bgt _023331D8 + bge _02333954 + cmp r2, #0x80 + bgt _023331CC + beq _02333744 + b _02333F90 +_023331CC: + cmp r2, #0x82 + beq _02333758 + b _02333F90 +_023331D8: + cmp r2, #0x8d + bgt _023331E8 + beq _0233392C + b _02333F90 +_023331E8: + cmp r2, #0x94 + beq _02333B14 + b _02333F90 +_023331F4: + cmp r2, #0xd7 + bgt _02333284 + bge _023336C4 + cmp r2, #0xb9 + bgt _02333240 + bge _02333BF4 + cmp r2, #0xa9 + bgt _02333224 + bge _02333780 + cmp r2, #0xa0 + beq _02333AB8 + b _02333F90 +_02333224: + cmp r2, #0xb5 + bgt _02333234 + beq _02333B28 + b _02333F90 +_02333234: + cmp r2, #0xb8 + beq _02333BE0 + b _02333F90 +_02333240: + cmp r2, #0xc3 + bgt _02333268 + bge _02333660 + cmp r2, #0xba + bgt _0233325C + beq _023336B0 + b _02333F90 +_0233325C: + cmp r2, #0xbb + beq _02333BCC + b _02333F90 +_02333268: + cmp r2, #0xca + bgt _02333278 + beq _023336B0 + b _02333F90 +_02333278: + cmp r2, #0xd4 + beq _02333A44 + b _02333F90 +_02333284: + cmp r2, #0xec + bgt _023332C4 + bge _023337D4 + cmp r2, #0xe1 + bgt _023332A8 + bge _02333B3C + cmp r2, #0xdf + beq _02333940 + b _02333F90 +_023332A8: + cmp r2, #0xe8 + bgt _023332B8 + beq _023339B0 + b _02333F90 +_023332B8: + cmp r2, #0xe9 + beq _02333794 + b _02333F90 +_023332C4: + sub r0, r1, #8 + cmp r2, r0 + bgt _023332F0 + bge _02333674 + cmp r2, #0xf5 + bgt _023332E4 + beq _0233380C + b _02333F90 +_023332E4: + cmp r2, #0x100 + beq _02333820 + b _02333F90 +_023332F0: + sub r0, r1, #7 + cmp r2, r0 + bgt _02333304 + beq _023336B0 + b _02333F90 +_02333304: + sub r0, r1, #6 + cmp r2, r0 + beq _0233376C + b _02333F90 +_02333314: + add r5, r1, #0x68 + cmp r2, r5 + bgt _023334B4 + bge _02333BCC + add r5, r1, #0x34 + cmp r2, r5 + bgt _02333414 + bge _02333820 + cmp r2, #0x120 + bgt _02333398 + bge _02333884 + add r4, r1, #0x11 + cmp r2, r4 + bgt _02333378 + mov r0, r4 + cmp r2, r0 + bge _02333B60 + add r0, r1, #4 + cmp r2, r0 + bgt _02333F90 + cmp r2, #0x10c + blt _02333F90 + cmpne r2, r0 + beq _02333BCC + b _02333F90 +_02333378: + cmp r2, #0x11c + bgt _02333388 + beq _02333BCC + b _02333F90 +_02333388: + add r1, r1, #0x15 + cmp r2, r1 + beq _02333850 + b _02333F90 +_02333398: + add r0, r1, #0x2a + cmp r2, r0 + bgt _023333F4 + add r0, r1, #0x24 + subs r0, r2, r0 + addpl pc, pc, r0, lsl #2 + b _023333D0 +_023333B4: + b _02333904 + b _023336B0 + b _02333F90 + b _02333A98 + b _02333904 + b _02333F90 + b _02333A64 +_023333D0: + ldr r0, =0x00000127 + cmp r2, r0 + bgt _023333E4 + beq _02333B84 + b _02333F90 +_023333E4: + add r0, r0, #3 + cmp r2, r0 + beq _023338F0 + b _02333F90 +_023333F4: + add r0, r1, #0x30 + cmp r2, r0 + bgt _02333408 + beq _02333898 + b _02333F90 +_02333408: + cmp r2, #0x13c + beq _023338AC + b _02333F90 +_02333414: + cmp r2, #0x154 + bgt _02333464 + bge _023336D8 + add r0, r1, #0x44 + cmp r2, r0 + bgt _02333440 + bge _02333660 + add r0, r1, #0x36 + cmp r2, r0 + beq _02333B9C + b _02333F90 +_02333440: + add r0, r1, #0x45 + cmp r2, r0 + bgt _02333454 + beq _02333BB8 + b _02333F90 +_02333454: + add r0, r1, #0x49 + cmp r2, r0 + beq _023338C0 + b _02333F90 +_02333464: + cmp r2, #0x16c + bgt _02333494 + bge _02333990 + add r0, r1, #0x4e + cmp r2, r0 + bgt _02333484 + beq _023338D4 + b _02333F90 +_02333484: + add r0, r1, #0x54 + cmp r2, r0 + beq _02333700 + b _02333F90 +_02333494: + add r0, r1, #0x66 + cmp r2, r0 + bgt _023334A8 + beq _02333BCC + b _02333F90 +_023334A8: + cmp r2, #0x170 + beq _02333BCC + b _02333F90 +_023334B4: + cmp r2, #0x1d8 + bgt _02333578 + bge _02333634 + add r5, r1, #0x7e + cmp r2, r5 + bgt _02333520 + mov r4, r5 + cmp r2, r4 + bge _02333968 + add r4, r1, #0x71 + cmp r2, r4 + bgt _02333500 + mov r0, r4 + cmp r2, r0 + bge _02333ACC + add r0, r1, #0x6e + cmp r2, r0 + beq _02333BCC + b _02333F90 +_02333500: + cmp r2, #0x17c + bgt _02333510 + beq _02333A98 + b _02333F90 +_02333510: + add r1, r1, #0x7c + cmp r2, r1 + beq _02333A1C + b _02333F90 +_02333520: + cmp r2, #0x1bc + bgt _02333550 + bge _023336EC + add r0, r1, #0x8d + cmp r2, r0 + bgt _02333540 + beq _02333BCC + b _02333F90 +_02333540: + add r0, r1, #0xa9 + cmp r2, r0 + beq _02333CEC + b _02333F90 +_02333550: + add r5, r1, #0xb6 + cmp r2, r5 + bgt _0233356C + mov r0, r5 + cmp r2, r0 + beq _02333D00 + b _02333F90 +_0233356C: + cmp r2, #0x1d0 + beq _02333DE0 + b _02333F90 +_02333578: + add r0, r1, #0xea + cmp r2, r0 + bgt _023335C0 + bge _02333F24 + cmp r2, #0x1ec + bgt _023335A0 + bge _02333DF8 + cmp r2, #0x1e0 + beq _02333B84 + b _02333F90 +_023335A0: + add r0, r1, #0xe4 + cmp r2, r0 + bgt _023335B4 + beq _02333F10 + b _02333F90 +_023335B4: + cmp r2, #0x1f0 + beq _02333B84 + b _02333F90 +_023335C0: + rsb r0, r1, #0x320 + cmp r2, r0 + bgt _023335EC + bge _023336D8 + cmp r2, #0x208 + bgt _023335E0 + beq _02333F38 + b _02333F90 +_023335E0: + cmp r2, #0x214 + beq _02333F6C + b _02333F90 +_023335EC: + cmp r2, #0x21c + bgt _023335FC + beq _023336EC + b _02333F90 +_023335FC: + ldr r0, =0x0000021E + cmp r2, r0 + beq _02333F80 + b _02333F90 +_0233360C: + bl GetApparentWeather + cmp r0, #5 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333620: + ldrb r0, [r3, #0xd2] + cmp r0, #0xc + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333634: + ldrb r0, [r3, #0xd5] + cmp r0, #4 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333648: + mov r0, r4 + bl MirrorMoveIsActive + cmp r0, #0 + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333660: + ldrsh r0, [r3, #0x24] + cmp r0, #0x13 + ble _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333674: + ldrsh r0, [r3, #0x24] + cmp r0, #0x13 + bgt _023336A8 + add r0, r3, #0x100 + ldrh r1, [r0, #0x46 + STATUS_CHECKER_CHECK_OFFSET] + sub r2, sp, #4 + strh r1, [r2] + ldrh r0, [r0, #0x48 + STATUS_CHECKER_CHECK_OFFSET] + strh r0, [r2, #2] + ldr r0, [r2] + bl CeilFixedPoint + cmp r0, #1 + bge _02333F90 +_023336A8: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_023336B0: + ldrsh r0, [r3, #0x28] + cmp r0, #0x13 + ble _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_023336C4: + ldrsh r0, [r3, #0x2a] + cmp r0, #0x13 + ble _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_023336D8: + ldrb r0, [r3, #0xd2] + cmp r0, #1 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_023336EC: + ldr r0, [r3, #0x110 + STATUS_CHECKER_CHECK_OFFSET] + cmp r0, #3 + ble _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333700: + ldrb r0, [r3, #0xec] + cmp r0, #1 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333714: + ldrsh r0, [r3, #0x28] + cmp r0, #0x13 + ldrgtsh r0, [r3, #0x2a] + cmpgt r0, #0x13 + ble _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333730: + ldrb r0, [r3, #0xd5] + cmp r0, #9 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333744: + ldrb r0, [r3, #0xd2] + cmp r0, #0xb + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333758: + bl MistIsActive + cmp r0, #0 + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_0233376C: + ldrb r0, [r3, #0xd5] + cmp r0, #3 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333780: + ldrsh r0, [r3, #0x2e] + cmp r0, #0x13 + ble _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333794: + ldrb r0, [r3, #0xc4] + cmp r0, #5 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + ldrsh r4, [r3, #0x12] + ldrsh r2, [r3, #0x16] + rsb r0, r1, #0x4f0 + ldrsh r1, [r3, #0x10] + add r2, r4, r2 + cmp r2, r0 + movgt r2, r0 + add r0, r2, r2, lsr #31 + cmp r1, r0, asr #1 + ble _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_023337D4: + ldrsh r4, [r3, #0x12] + ldrsh r2, [r3, #0x16] + rsb r0, r1, #0x4f0 + add r2, r4, r2 + cmp r2, r0 + movgt r2, r0 + ldrsh r0, [r3, #0x10] + cmp r2, r0 + ble _02333804 + ldrb r0, [r3, #0x11e + STATUS_CHECKER_CHECK_OFFSET] + cmp r0, #0 + bne _02333F90 +_02333804: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_0233380C: + ldrb r0, [r3, #0x11e + STATUS_CHECKER_CHECK_OFFSET] + cmp r0, #0 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333820: + ldrb r0, [r3, #0xec] + cmp r0, #3 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333834: + ldrsh r0, [r3, #0x24] + cmp r0, #0x13 + ldrgtsh r0, [r3, #0x28] + cmpgt r0, #0x13 + ble _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333850: + ldr r1, =DUNGEON_PTR + mov r2, #0xc + ldr r1, [r1] + ldr r3, =ov10_022C6322 + add r1, r1, #0x4000 +#ifdef JAPAN + ldrsh r1, [r1, #0x30] +#else + ldrsh r1, [r1, #0xd4] +#endif + smulbb r1, r1, r2 + ldrb r1, [r3, r1] + bl MonsterIsType + cmp r0, #0 + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333884: + ldrsh r0, [r3, #0x26] + cmp r0, #0x13 + ble _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333898: + ldrb r0, [r3, #0xe0] + cmp r0, #2 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_023338AC: + ldrb r0, [r3, #0xd5] + cmp r0, #8 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_023338C0: + ldrb r0, [r3, #0xd5] + cmp r0, #1 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_023338D4: + ldrsh r0, [r3, #0x24] + cmp r0, #0x13 + ldrgt r0, [r3, #0x110 + STATUS_CHECKER_CHECK_OFFSET] + cmpgt r0, #3 + ble _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_023338F0: + ldrb r0, [r3, #0xd5] + cmp r0, #5 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333904: + ldrb r0, [r3, #0xd5] + cmp r0, #7 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333918: + bl GetApparentWeather + cmp r0, #4 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_0233392C: + bl GetApparentWeather + cmp r0, #2 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333940: + bl GetApparentWeather + cmp r0, #1 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333954: + ldrb r0, [r3, #0xd5] + cmp r0, #2 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333968: + ldrb r0, [r3, #0xef] + cmp r0, #1 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_0233397C: + ldrb r0, [r3, #0xec] + cmp r0, #4 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333990: + ldrb r0, [r3, #0x62] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_023339B0: + bl ov29_023007DC + cmp r0, #0 + bne _02333F90 + mov r0, r4 + mov r1, #0 + bl MonsterHasNegativeStatus + cmp r0, #0 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_023339D8: + bl GetTileAtEntity + bl IsTileGround + cmp r0, #0 + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_023339F0: + bl GetTileAtEntity + mov r4, r0 + bl IsTileGround + cmp r0, #0 + beq _02333A14 + ldrh r0, [r4] + and r0, r0, #3 + cmp r0, #1 + beq _02333F90 +_02333A14: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333A1C: + bl GetTileAtEntity + ldr r0, [r0, #0x10] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + ldr r0, [r0] + cmp r0, #2 + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333A44: + ldr r0, =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0xc000 + ldrb r0, [r0, #0xd5b + STATUS_CHECKER_CHECK_OFFSET_2] + cmp r0, #0 + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333A64: + ldr r0, =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0xc000 + ldrb r0, [r0, #0xd5c + STATUS_CHECKER_CHECK_OFFSET_2] + cmp r0, #0 + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333A84: + ldrb r0, [r3, #0xfd] + cmp r0, #0 + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333A98: + ldr r0, =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x3000 + ldrb r0, [r0, #0xe38 + STATUS_CHECKER_CHECK_OFFSET_2] + cmp r0, #0 + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333AB8: + ldrb r0, [r3, #0x11e + STATUS_CHECKER_CHECK_OFFSET] + cmp r0, #3 + blo _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333ACC: + ldrb r0, [r3, #0x62] + tst r0, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _02333F90 + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333B00: + ldrsh r0, [r3, #0x2e] + cmp r0, #0x14 + blt _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333B14: + ldrsh r0, [r3, #0x26] + cmp r0, #0x14 + blt _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333B28: + ldrsh r0, [r3, #0x24] + cmp r0, #0x14 + blt _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333B3C: + ldrb r0, [r3, #6] + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldrb r0, [r3, #0xd5] + cmp r0, #6 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333B60: + ldrb r0, [r3, #0xef] + cmp r0, #2 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + bl IsCurrentFixedRoomBossFight + cmp r0, #0 + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333B84: + add r0, r4, #4 + bl CanLayTrap + cmp r0, #0 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333B9C: + ldrsh r0, [r3, #0x26] + cmp r0, #0x14 + ldrgesh r0, [r3, #0x2a] + cmpge r0, #0x14 + blt _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333BB8: + ldrb r0, [r3, #0xd8] + cmp r0, #3 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333BCC: + bl IsCurrentFixedRoomBossFight + cmp r0, #0 + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333BE0: + bl Conversion2IsActive + cmp r0, #0 + beq _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333BF4: + ldrb r0, [r3, #6] + mov r5, #0 + cmp r0, #0 + beq _02333C78 + ldr r6, =DUNGEON_PTR + b _02333C60 +_02333C0C: + ldr r0, [r6] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 + ldr r7, [r0, #0xb38 + STATUS_CHECKER_CHECK_OFFSET_2] + mov r0, r7 + bl EntityIsValid__02333FAC + cmp r0, #0 + cmpne r7, r4 + beq _02333C5C + mov r0, r4 + mov r1, r7 + bl CanSeeTarget + cmp r0, #0 + beq _02333C5C + ldr r1, [r7, #0xb4] + ldrsh r0, [r1, #0x24] + cmp r0, #0x14 + ldrltsh r0, [r1, #0x26] + cmplt r0, #0x14 + blt _02333C68 +_02333C5C: + add r5, r5, #1 +_02333C60: + cmp r5, #0x10 + blt _02333C0C +_02333C68: + cmp r5, #0x10 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333C78: + ldr r6, =DUNGEON_PTR + b _02333CD4 +_02333C80: + ldr r0, [r6] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 + ldr r7, [r0, #0xb28 + STATUS_CHECKER_CHECK_OFFSET_2] + mov r0, r7 + bl EntityIsValid__02333FAC + cmp r0, #0 + cmpne r7, r4 + beq _02333CD0 + mov r0, r4 + mov r1, r7 + bl CanSeeTarget + cmp r0, #0 + beq _02333CD0 + ldr r1, [r7, #0xb4] + ldrsh r0, [r1, #0x24] + cmp r0, #0x14 + ldrltsh r0, [r1, #0x26] + cmplt r0, #0x14 + blt _02333CDC +_02333CD0: + add r5, r5, #1 +_02333CD4: + cmp r5, #4 + blt _02333C80 +_02333CDC: + cmp r5, #4 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333CEC: + ldrb r0, [r3, #0xd5] + cmp r0, #0x10 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333D00: + ldrb r0, [r3, #6] + mov r5, #0 + cmp r0, #0 + beq _02333D78 + ldr r6, =DUNGEON_PTR + b _02333D60 +_02333D18: + ldr r0, [r6] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 + ldr r7, [r0, #0xb38 + STATUS_CHECKER_CHECK_OFFSET_2] + mov r0, r7 + bl EntityIsValid__02333FAC + cmp r0, #0 + cmpne r7, r4 + beq _02333D5C + mov r0, r4 + mov r1, r7 + bl CanSeeTarget + cmp r0, #0 + ldrne r0, [r7, #0xb4] + ldrneb r0, [r0, #0xd5] + cmpne r0, #0x11 + bne _02333D68 +_02333D5C: + add r5, r5, #1 +_02333D60: + cmp r5, #0x10 + blt _02333D18 +_02333D68: + cmp r5, #0x10 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333D78: + ldr r6, =DUNGEON_PTR + b _02333DC8 +_02333D80: + ldr r0, [r6] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 + ldr r7, [r0, #0xb28 + STATUS_CHECKER_CHECK_OFFSET_2] + mov r0, r7 + bl EntityIsValid__02333FAC + cmp r0, #0 + cmpne r7, r4 + beq _02333DC4 + mov r0, r4 + mov r1, r7 + bl CanSeeTarget + cmp r0, #0 + ldrne r0, [r7, #0xb4] + ldrneb r0, [r0, #0xd5] + cmpne r0, #0x11 + bne _02333DD0 +_02333DC4: + add r5, r5, #1 +_02333DC8: + cmp r5, #4 + blt _02333D80 +_02333DD0: + cmp r5, #4 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333DE0: + mov r1, #0 + bl MonsterHasNegativeStatus + cmp r0, #0 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333DF8: + ldrb r0, [r3, #6] + mov r5, #0 + cmp r0, #0 + beq _02333E8C + ldr r6, =DUNGEON_PTR + b _02333E74 +_02333E10: + ldr r0, [r6] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 + ldr r7, [r0, #0xb38 + STATUS_CHECKER_CHECK_OFFSET_2] + mov r0, r7 + bl EntityIsValid__02333FAC + cmp r0, #0 + cmpne r7, r4 + beq _02333E70 + mov r0, r4 + mov r1, r7 + bl CanSeeTarget + cmp r0, #0 + beq _02333E70 + ldr r1, [r7, #0xb4] + ldrsh r0, [r1, #0x24] + cmp r0, #0x14 + ldrgesh r0, [r1, #0x28] + cmpge r0, #0x14 + ldrgesh r0, [r1, #0x26] + cmpge r0, #0x14 + ldrgesh r0, [r1, #0x2a] + cmpge r0, #0x14 + blt _02333E7C +_02333E70: + add r5, r5, #1 +_02333E74: + cmp r5, #0x10 + blt _02333E10 +_02333E7C: + cmp r5, #0x10 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333E8C: + ldr r6, =DUNGEON_PTR + b _02333EF8 +_02333E94: + ldr r0, [r6] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 + ldr r7, [r0, #0xb28 + STATUS_CHECKER_CHECK_OFFSET_2] + mov r0, r7 + bl EntityIsValid__02333FAC + cmp r0, #0 + cmpne r7, r4 + beq _02333EF4 + mov r0, r4 + mov r1, r7 + bl CanSeeTarget + cmp r0, #0 + beq _02333EF4 + ldr r1, [r7, #0xb4] + ldrsh r0, [r1, #0x24] + cmp r0, #0x14 + ldrgesh r0, [r1, #0x28] + cmpge r0, #0x14 + ldrgesh r0, [r1, #0x26] + cmpge r0, #0x14 + ldrgesh r0, [r1, #0x2a] + cmpge r0, #0x14 + blt _02333F00 +_02333EF4: + add r5, r5, #1 +_02333EF8: + cmp r5, #4 + blt _02333E94 +_02333F00: + cmp r5, #4 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333F10: + ldrb r0, [r3, #0xf7] + cmp r0, #1 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333F24: + ldr r0, [r3, #0x110 + STATUS_CHECKER_CHECK_OFFSET] + cmp r0, #1 + ble _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333F38: + mov r1, #0 + b _02333F54 +_02333F40: + add r0, r3, r1, lsl #1 + ldrsh r0, [r0, #0x28] + cmp r0, #0x14 + blt _02333F5C + add r1, r1, #1 +_02333F54: + cmp r1, #2 + blt _02333F40 +_02333F5C: + cmp r1, #2 + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333F6C: + ldrb r0, [r3, #0xd5] + cmp r0, #0xf + bne _02333F90 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02333F80: + ldrsh r0, [r3, #0x26] + cmp r0, #0x14 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} +_02333F90: + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +} #endif bool8 EntityIsValid__02333FAC(struct entity *entity) From ea0f80715b1f9d5fd24ed4af2af3bab0ea367b99 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 7 Aug 2025 19:49:57 -0400 Subject: [PATCH 28/40] Moved AiConsiderMove nonmatching to C file --- asm/include/overlay_29_02319880.inc | 26 -- asm/overlay_29_02319880.s | 508 ---------------------------- asm/overlay_29_bss_0237CA18.s | 2 + include/dungeon_ai_attack.h | 2 + include/dungeon_ai_attack_2.h | 7 - main.lsf | 2 - src/dungeon_ai_attack.c | 504 ++++++++++++++++++++++++++- src/dungeon_ai_attack_2.c | 13 - 8 files changed, 507 insertions(+), 557 deletions(-) delete mode 100644 asm/include/overlay_29_02319880.inc delete mode 100644 asm/overlay_29_02319880.s delete mode 100644 include/dungeon_ai_attack_2.h delete mode 100644 src/dungeon_ai_attack_2.c diff --git a/asm/include/overlay_29_02319880.inc b/asm/include/overlay_29_02319880.inc deleted file mode 100644 index 95e222fb..00000000 --- a/asm/include/overlay_29_02319880.inc +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once -.public abs -.public AI_CAN_ATTACK_IN_DIRECTION -.public AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS -.public AI_POTENTIAL_ATTACK_TARGET_WEIGHTS -.public AI_POTENTIAL_ATTACK_TARGETS -.public CanAttackInDirection -.public CanSeeTarget -.public DIRECTIONS_XY -.public DUNGEON_PTR -.public DungeonRandInt -.public EntityIsValid__02319F8C -.public GetDirectionTowardsPosition -.public GetEntityMoveTargetAndRange -.public GetMoveTargetAndRange -.public GetMoveTypeForMonster -.public GetTile -.public IqSkillIsEnabled -.public IsAiTargetEligible -.public IsBlinded -.public IsTargetInRange -.public IsUsableWhileTaunted -.public ResetAiCanAttackInDirection -.public StatusCheckerCheck -.public TryAddTargetToAiTargetList -.public WeightMoveWithIqSkills diff --git a/asm/overlay_29_02319880.s b/asm/overlay_29_02319880.s deleted file mode 100644 index 784380e6..00000000 --- a/asm/overlay_29_02319880.s +++ /dev/null @@ -1,508 +0,0 @@ - .include "asm/macros.inc" - .include "overlay_29_02319880.inc" - - .text - -; https://decomp.me/scratch/jVfou -#ifndef NONMATCHING - arm_func_start AiConsiderMove -AiConsiderMove: ; 0x02319880 -#ifdef JAPAN -#define AI_CONSIDER_MOVE_OFFSET -0xA4 -#else -#define AI_CONSIDER_MOVE_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2c - mov sl, r1 - str r0, [sp, #8] - mov r0, #1 - mov sb, r2 - ldr r6, [sl, #0xb4] - str r0, [sp, #0x14] - mov r5, #0 - bl ResetAiCanAttackInDirection - mov r0, sl - mov r1, sb - mov r2, #1 - bl GetEntityMoveTargetAndRange - str r0, [sp, #0x24] - mov r0, sl - mov r1, #8 - bl IqSkillIsEnabled - mov r4, r0 - ldr r0, [sp, #8] - mov r1, r5 - strb r1, [r0] - ldrb r0, [r6, #0xd0] - cmp r0, #5 - bne _023198F8 - mov r0, sb - bl IsUsableWhileTaunted - cmp r0, #0 - moveq r0, #1 - beq _02319F64 -_023198F8: - cmp r4, #0 - beq _02319918 - mov r0, sl - mov r1, sb - bl StatusCheckerCheck - cmp r0, #0 - moveq r0, #1 - beq _02319F64 -_02319918: - mov r0, sb - mov r1, #0 - bl GetMoveTargetAndRange - ldr r1, _02319F6C ; =0x00000273 - cmp r0, r1 - bne _02319958 - ldrsh r3, [r6, #0x12] - ldrsh r2, [r6, #0x16] - add r0, r1, #0x174 - add r2, r3, r2 - cmp r2, r0 - movgt r2, r0 - ldrsh r0, [r6, #0x10] - cmp r0, r2 - moveq r0, #1 - beq _02319F64 -_02319958: - ldr r0, [sp, #0x24] - ands r7, r0, #0xf0 - cmpne r7, #0x10 - cmpne r7, #0x20 - bne _02319A54 - mov r0, sl - mov r1, #1 - bl IsBlinded - cmp r0, #0 - beq _023199C0 - ldrb r6, [r6, #0x4c] - ldr r4, _02319F70 ; =AI_CAN_ATTACK_IN_DIRECTION - ldrb r0, [r4, r6] - cmp r0, #0 - bne _02319E88 - ldr r1, _02319F74 ; =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS - mov r3, #1 - ldr r0, _02319F78 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS - mov r2, #0x63 - strb r3, [r4, r6] - strb r6, [r1] - str r2, [r0] - mov r1, #0 - str r1, [r0, #0x20] - add r5, r5, #1 - b _02319E88 -_023199C0: - ldr fp, _02319F7C ; =DIRECTIONS_XY - mov r8, #0 -_023199C8: - mov r1, r8, lsl #2 - add r0, fp, r8, lsl #2 - ldrsh r6, [sl, #4] - ldrsh r3, [fp, r1] - ldrsh r2, [sl, #6] - ldrsh r1, [r0, #2] - add r0, r6, r3 - add r1, r2, r1 - bl GetTile - ldr r6, [r0, #0xc] - cmp r6, #0 - beq _02319A44 - ldr r0, [r6] - cmp r0, #1 - bne _02319A44 - cmp r7, #0x10 - cmpne r7, #0x20 - beq _02319A24 - mov r0, sl - mov r1, r8 - bl CanAttackInDirection - cmp r0, #0 - beq _02319A44 -_02319A24: - str sb, [sp] - ldr r1, [sp, #0x24] - mov r0, r5 - mov r2, sl - mov r3, r6 - str r4, [sp, #4] - bl TryAddTargetToAiTargetList - mov r5, r0 -_02319A44: - add r8, r8, #1 - cmp r8, #8 - blt _023199C8 - b _02319E88 -_02319A54: - cmp r7, #0x30 - bne _02319AC8 - ldr r7, _02319F80 ; =DUNGEON_PTR - mov r6, #0 -_02319A64: - ldr r0, [r7] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 - ldr r8, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET] - mov r0, r8 - bl EntityIsValid__02319F8C - cmp r0, #0 - beq _02319AB8 - mov r0, sl - mov r1, r8 - bl CanSeeTarget - cmp r0, #0 - beq _02319AB8 - str sb, [sp] - ldr r1, [sp, #0x24] - mov r0, r5 - mov r2, sl - mov r3, r8 - str r4, [sp, #4] - bl TryAddTargetToAiTargetList - mov r5, r0 -_02319AB8: - add r6, r6, #1 - cmp r6, #0x14 - blt _02319A64 - b _02319E88 -_02319AC8: - cmp r7, #0x40 - bne _02319BB0 - mov r8, #0 -_02319AD4: - ldr r0, _02319F7C ; =DIRECTIONS_XY - mov r2, r8, lsl #2 - add r0, r0, r8, lsl #2 - ldrsh r6, [r0, #2] - ldr r0, _02319F7C ; =DIRECTIONS_XY - ldrsh r1, [sl, #6] - ldrsh r7, [r0, r2] - ldrsh r0, [sl, #4] - add r1, r1, r6 - add r0, r0, r7 - bl GetTile - mov fp, r0 - mov r0, sl - mov r1, r8 - bl CanAttackInDirection - cmp r0, #0 - beq _02319BA0 - ldr r3, [fp, #0xc] - cmp r3, #0 - beq _02319B58 - ldr r0, [r3] - cmp r0, #1 - bne _02319B58 - str sb, [sp] - ldr r1, [sp, #0x24] - mov r0, r5 - mov r2, sl - str r4, [sp, #4] - mov fp, r5 - bl TryAddTargetToAiTargetList - mov r5, r0 - cmp fp, r5 - bne _02319BA0 -_02319B58: - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - add r0, r0, r7, lsl #1 - add r1, r1, r6, lsl #1 - bl GetTile - ldr r3, [r0, #0xc] - cmp r3, #0 - beq _02319BA0 - ldr r0, [r3] - cmp r0, #1 - bne _02319BA0 - str sb, [sp] - ldr r1, [sp, #0x24] - mov r0, r5 - mov r2, sl - str r4, [sp, #4] - bl TryAddTargetToAiTargetList - mov r5, r0 -_02319BA0: - add r8, r8, #1 - cmp r8, #8 - blt _02319AD4 - b _02319E88 -_02319BB0: - cmp r7, #0x50 - cmpne r7, #0x80 - cmpne r7, #0x90 - bne _02319E00 - cmp r7, #0x50 - moveq r0, #0xa - streq r0, [sp, #0xc] - movne r0, #1 - strne r0, [sp, #0xc] - cmp r7, #0x90 - moveq r0, #2 - streq r0, [sp, #0xc] - mov r0, #0 - str r0, [sp, #0x20] - mvn r0, #0 - str r0, [sp, #0x28] -_02319BF0: - ldr r0, _02319F80 ; =DUNGEON_PTR - ldr r1, [r0] - ldr r0, [sp, #0x20] - add r0, r1, r0, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET] - str r0, [sp, #0x18] - bl EntityIsValid__02319F8C - cmp r0, #0 - ldrne r0, [sp, #0x18] - cmpne sl, r0 - beq _02319DE8 - ldr r1, [sp, #0x18] - add r0, sl, #4 - add r1, r1, #4 - bl GetDirectionTowardsPosition - ldr r1, _02319F70 ; =AI_CAN_ATTACK_IN_DIRECTION - str r0, [sp, #0x1c] - ldrb r0, [r1, r0] - cmp r0, #0 - bne _02319DE8 - ldr r1, [sp, #0x18] - mov r0, sl - bl CanSeeTarget - cmp r0, #0 - beq _02319DE8 - ldr r0, [sp, #0x18] - ldrsh r6, [sl, #4] - ldrsh fp, [r0, #4] - sub r0, r6, fp - bl abs - str r0, [sp, #0x10] - ldr r0, [sp, #0x18] - ldrsh r8, [sl, #6] - ldrsh r7, [r0, #6] - sub r0, r8, r7 - bl abs - ldr r1, [sp, #0x10] - cmp r1, r0 - movgt r2, r1 - movle r2, r0 - cmp r2, #0xa - movgt r0, #0 - bgt _02319D50 - ldr r1, [sp, #0xc] - cmp r2, r1 - movgt r0, #0 - bgt _02319D50 - ldr r1, [sp, #0x10] - cmp r1, r0 - ldr r0, [sp, #0x28] - bne _02319CF8 - cmp r6, fp - cmplt r8, r7 - movlt r0, #1 - blt _02319D44 - cmp r6, fp - bge _02319CE4 - cmp r8, r7 - movgt r0, #3 - bgt _02319D44 -_02319CE4: - cmp r6, fp - cmpgt r8, r7 - movgt r0, #5 - movle r0, #7 - b _02319D44 -_02319CF8: - cmp r6, fp - bne _02319D0C - cmp r8, r7 - movlt r0, #0 - blt _02319D44 -_02319D0C: - cmp r6, fp - bge _02319D20 - cmp r8, r7 - moveq r0, #2 - beq _02319D44 -_02319D20: - cmp r6, fp - bne _02319D34 - cmp r8, r7 - movgt r0, #4 - bgt _02319D44 -_02319D34: - cmp r6, fp - ble _02319D44 - cmp r8, r7 - moveq r0, #6 -_02319D44: - cmp r0, #0 - movge r0, #1 - movlt r0, #0 -_02319D50: - cmp r0, #0 - beq _02319DE8 - str r4, [sp] - ldr r0, [sp, #0x24] - ldr r2, [sp, #0x18] - mov r1, sl - mov r3, sb - bl IsAiTargetEligible - cmp r0, #0 - beq _02319DE8 - ldr r1, [sp, #0x18] - ldr r2, [sp, #0x1c] - ldr r3, [sp, #0xc] - mov r0, sl - bl IsTargetInRange - cmp r0, #0 - beq _02319DE8 - ldr r1, _02319F70 ; =AI_CAN_ATTACK_IN_DIRECTION - ldr r0, [sp, #0x1c] - mov r2, #1 - strb r2, [r1, r0] - mov r1, r0 - ldr r0, _02319F74 ; =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS - strb r1, [r0, r5] - mov r0, sl - mov r1, sb - bl GetMoveTypeForMonster - mov r3, r0 - ldr r1, [sp, #0x24] - ldr r2, [sp, #0x18] - mov r0, sl - bl WeightMoveWithIqSkills - ldr r1, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS - str r0, [r1, r5, lsl #2] - ldr r1, [sp, #0x18] - ldr r0, _02319F88 ; =AI_POTENTIAL_ATTACK_TARGETS - str r1, [r0, r5, lsl #2] - add r5, r5, #1 -_02319DE8: - ldr r0, [sp, #0x20] - add r0, r0, #1 - str r0, [sp, #0x20] - cmp r0, #0x14 - blt _02319BF0 - b _02319E88 -_02319E00: - cmp r7, #0x60 - bne _02319E60 - ldr r7, _02319F80 ; =DUNGEON_PTR - mov r6, #0 -_02319E10: - ldr r0, [r7] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 - ldr r8, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET] - mov r0, r8 - bl EntityIsValid__02319F8C - cmp r0, #0 - beq _02319E50 - str sb, [sp] - ldr r1, [sp, #0x24] - mov r0, r5 - mov r2, sl - mov r3, r8 - str r4, [sp, #4] - bl TryAddTargetToAiTargetList - mov r5, r0 -_02319E50: - add r6, r6, #1 - cmp r6, #0x14 - blt _02319E10 - b _02319E88 -_02319E60: - cmp r7, #0x70 - bne _02319E88 - str sb, [sp] - ldr r1, [sp, #0x24] - mov r2, sl - mov r3, sl - mov r0, #0 - str r4, [sp, #4] - bl TryAddTargetToAiTargetList - mov r5, r0 -_02319E88: - cmp r5, #0 - ldreq r0, [sp, #8] - moveq r1, #0 - streqb r1, [r0] - beq _02319F60 - mov r0, #0 - str r0, [sp, #0x14] - mov r4, r0 - ldr r3, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS - b _02319EC4 -_02319EB0: - ldr r2, [r3, r4, lsl #2] - ldr r1, [sp, #0x14] - add r4, r4, #1 - cmp r1, r2 - strlt r2, [sp, #0x14] -_02319EC4: - cmp r4, r5 - blt _02319EB0 - mov r6, #0 - mov r2, r6 - ldr r4, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS - b _02319EF0 -_02319EDC: - ldr r3, [r4, r6, lsl #2] - ldr r1, [sp, #0x14] - cmp r1, r3 - strne r2, [r4, r6, lsl #2] - add r6, r6, #1 -_02319EF0: - cmp r6, r5 - blt _02319EDC - mov r3, #0 - ldr r2, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS - b _02319F10 -_02319F04: - ldr r1, [r2, r3, lsl #2] - add r3, r3, #1 - add r0, r0, r1 -_02319F10: - cmp r3, r5 - blt _02319F04 - bl DungeonRandInt - mov r3, #0 - ldr r2, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS - b _02319F38 -_02319F28: - ldr r1, [r2, r3, lsl #2] - subs r0, r0, r1 - bmi _02319F40 - add r3, r3, #1 -_02319F38: - cmp r3, r5 - blt _02319F28 -_02319F40: - ldr r1, _02319F74 ; =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS - ldr r0, [sp, #8] - mov r2, #1 - strb r2, [r0] - ldrb r2, [r1, r3] - mov r1, #8 - strb r2, [r0, #1] - str r1, [r0, #4] -_02319F60: - ldr r0, [sp, #0x14] -_02319F64: - add sp, sp, #0x2c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02319F6C: .word 0x00000273 -_02319F70: .word AI_CAN_ATTACK_IN_DIRECTION -_02319F74: .word AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS -_02319F78: .word AI_POTENTIAL_ATTACK_TARGET_WEIGHTS -_02319F7C: .word DIRECTIONS_XY -_02319F80: .word DUNGEON_PTR -_02319F84: .word AI_POTENTIAL_ATTACK_TARGET_WEIGHTS -_02319F88: .word AI_POTENTIAL_ATTACK_TARGETS - arm_func_end AiConsiderMove -#endif diff --git a/asm/overlay_29_bss_0237CA18.s b/asm/overlay_29_bss_0237CA18.s index 070c8dd6..25ad1cb6 100644 --- a/asm/overlay_29_bss_0237CA18.s +++ b/asm/overlay_29_bss_0237CA18.s @@ -10,6 +10,8 @@ AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS: .space 0x8 .global AI_POTENTIAL_ATTACK_TARGET_WEIGHTS AI_POTENTIAL_ATTACK_TARGET_WEIGHTS: + .global AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2 +AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2: .space 0x20 .global AI_POTENTIAL_ATTACK_TARGETS AI_POTENTIAL_ATTACK_TARGETS: diff --git a/include/dungeon_ai_attack.h b/include/dungeon_ai_attack.h index 3275b6ce..64977477 100644 --- a/include/dungeon_ai_attack.h +++ b/include/dungeon_ai_attack.h @@ -12,6 +12,8 @@ struct ai_possible_move s32 weight; }; +// Sets all values in AI_CAN_ATTACK_IN_DIRECTION to false. +void ResetAiCanAttackInDirection(); // The AI uses this function to check if a move has any potential targets, to calculate the list of potential targets and to calculate the move's special weight. The weight is calculated using WeightMoveWithIqSkills. // This function also sets the flag can_be_used on the ai_possible_move struct if it makes sense to use it. // The weight returned by this function is not the same as GetMoveAiWeight. If the AI does not have Weak-Type Picker, AiConsiderMove is called after the AI has selected which move it will use (using GetMoveAiWeight). It determines whether it makes sense for the AI to actually use the chosen move (i.e., whether targets are in range), and which direction the AI will use the move in if so. The return value of this function is not used anywhere in this case. diff --git a/include/dungeon_ai_attack_2.h b/include/dungeon_ai_attack_2.h deleted file mode 100644 index 7f372595..00000000 --- a/include/dungeon_ai_attack_2.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PMDSKY_DUNGEON_AI_ATTACK_2_H -#define PMDSKY_DUNGEON_AI_ATTACK_2_H - -// Sets all values in AI_CAN_ATTACK_IN_DIRECTION to false. -void ResetAiCanAttackInDirection(); - -#endif //PMDSKY_DUNGEON_AI_ATTACK_2_H diff --git a/main.lsf b/main.lsf index 90c4d1ea..5d6caa13 100644 --- a/main.lsf +++ b/main.lsf @@ -474,8 +474,6 @@ Overlay OVY_29 Object src/overlay_29_02318E4C.o Object asm/overlay_29_02318E70.o Object src/inflict_status.o - Object src/dungeon_ai_attack_2.o - Object asm/overlay_29_02319880.o Object src/dungeon_ai_attack.o Object asm/overlay_29_0231A364.o Object src/dungeon_ai_attack_1.o diff --git a/src/dungeon_ai_attack.c b/src/dungeon_ai_attack.c index d311e326..8e400d5b 100644 --- a/src/dungeon_ai_attack.c +++ b/src/dungeon_ai_attack.c @@ -1,7 +1,6 @@ #include "dungeon_ai_attack.h" #include "dg_random.h" #include "dungeon_ai_attack_1.h" -#include "dungeon_ai_attack_2.h" #include "dungeon_ai_targeting_1.h" #include "dungeon_capabilities_4.h" #include "dungeon_logic.h" @@ -32,6 +31,14 @@ extern bool8 ov29_023007DC(struct entity *entity); extern bool8 IsMonsterSleeping(struct entity *monster); extern u8 GetMoveAccuracyOrAiChance(struct move *move, u32 which); +void ResetAiCanAttackInDirection() +{ + for (s32 i = 0; i < NUM_DIRECTIONS; i++) + { + AI_CAN_ATTACK_IN_DIRECTION[i] = FALSE; + } +} + // https://decomp.me/scratch/jVfou #ifdef NONMATCHING u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *monster, struct move *move) @@ -252,6 +259,501 @@ u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *mon return move_weight; } +#else +// AI_POTENTIAL_ATTACK_TARGET_WEIGHTS is defined two separate times in the ASM, so define it twice here to match. +extern s32 AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2[NUM_DIRECTIONS]; + +asm u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *monster, struct move *move) +{ +#ifdef JAPAN +#define AI_CONSIDER_MOVE_OFFSET -0xA4 +#else +#define AI_CONSIDER_MOVE_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr} + sub sp, sp, #0x2c + mov r10, r1 + str r0, [sp, #8] + mov r0, #1 + mov r9, r2 + ldr r6, [r10, #0xb4] + str r0, [sp, #0x14] + mov r5, #0 + bl ResetAiCanAttackInDirection + mov r0, r10 + mov r1, r9 + mov r2, #1 + bl GetEntityMoveTargetAndRange + str r0, [sp, #0x24] + mov r0, r10 + mov r1, #8 + bl IqSkillIsEnabled + mov r4, r0 + ldr r0, [sp, #8] + mov r1, r5 + strb r1, [r0] + ldrb r0, [r6, #0xd0] + cmp r0, #5 + bne _023198F8 + mov r0, r9 + bl IsUsableWhileTaunted + cmp r0, #0 + moveq r0, #1 + beq _02319F64 +_023198F8: + cmp r4, #0 + beq _02319918 + mov r0, r10 + mov r1, r9 + bl StatusCheckerCheck + cmp r0, #0 + moveq r0, #1 + beq _02319F64 +_02319918: + mov r0, r9 + mov r1, #0 + bl GetMoveTargetAndRange + ldr r1, =0x00000273 + cmp r0, r1 + bne _02319958 + ldrsh r3, [r6, #0x12] + ldrsh r2, [r6, #0x16] + add r0, r1, #0x174 + add r2, r3, r2 + cmp r2, r0 + movgt r2, r0 + ldrsh r0, [r6, #0x10] + cmp r0, r2 + moveq r0, #1 + beq _02319F64 +_02319958: + ldr r0, [sp, #0x24] + ands r7, r0, #0xf0 + cmpne r7, #0x10 + cmpne r7, #0x20 + bne _02319A54 + mov r0, r10 + mov r1, #1 + bl IsBlinded + cmp r0, #0 + beq _023199C0 + ldrb r6, [r6, #0x4c] + ldr r4, =AI_CAN_ATTACK_IN_DIRECTION + ldrb r0, [r4, r6] + cmp r0, #0 + bne _02319E88 + ldr r1, =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS + mov r3, #1 + ldr r0, =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS + mov r2, #0x63 + strb r3, [r4, r6] + strb r6, [r1] + str r2, [r0] + mov r1, #0 + str r1, [r0, #0x20] + add r5, r5, #1 + b _02319E88 +_023199C0: + ldr r11, =DIRECTIONS_XY + mov r8, #0 +_023199C8: + mov r1, r8, lsl #2 + add r0, r11, r8, lsl #2 + ldrsh r6, [r10, #4] + ldrsh r3, [r11, r1] + ldrsh r2, [r10, #6] + ldrsh r1, [r0, #2] + add r0, r6, r3 + add r1, r2, r1 + bl GetTile + ldr r6, [r0, #0xc] + cmp r6, #0 + beq _02319A44 + ldr r0, [r6] + cmp r0, #1 + bne _02319A44 + cmp r7, #0x10 + cmpne r7, #0x20 + beq _02319A24 + mov r0, r10 + mov r1, r8 + bl CanAttackInDirection + cmp r0, #0 + beq _02319A44 +_02319A24: + str r9, [sp] + ldr r1, [sp, #0x24] + mov r0, r5 + mov r2, r10 + mov r3, r6 + str r4, [sp, #4] + bl TryAddTargetToAiTargetList + mov r5, r0 +_02319A44: + add r8, r8, #1 + cmp r8, #8 + blt _023199C8 + b _02319E88 +_02319A54: + cmp r7, #0x30 + bne _02319AC8 + ldr r7, =DUNGEON_PTR + mov r6, #0 +_02319A64: + ldr r0, [r7] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 + ldr r8, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET] + mov r0, r8 + bl EntityIsValid__02319F8C + cmp r0, #0 + beq _02319AB8 + mov r0, r10 + mov r1, r8 + bl CanSeeTarget + cmp r0, #0 + beq _02319AB8 + str r9, [sp] + ldr r1, [sp, #0x24] + mov r0, r5 + mov r2, r10 + mov r3, r8 + str r4, [sp, #4] + bl TryAddTargetToAiTargetList + mov r5, r0 +_02319AB8: + add r6, r6, #1 + cmp r6, #0x14 + blt _02319A64 + b _02319E88 +_02319AC8: + cmp r7, #0x40 + bne _02319BB0 + mov r8, #0 +_02319AD4: + ldr r0, =DIRECTIONS_XY + mov r2, r8, lsl #2 + add r0, r0, r8, lsl #2 + ldrsh r6, [r0, #2] + ldr r0, =DIRECTIONS_XY + ldrsh r1, [r10, #6] + ldrsh r7, [r0, r2] + ldrsh r0, [r10, #4] + add r1, r1, r6 + add r0, r0, r7 + bl GetTile + mov r11, r0 + mov r0, r10 + mov r1, r8 + bl CanAttackInDirection + cmp r0, #0 + beq _02319BA0 + ldr r3, [r11, #0xc] + cmp r3, #0 + beq _02319B58 + ldr r0, [r3] + cmp r0, #1 + bne _02319B58 + str r9, [sp] + ldr r1, [sp, #0x24] + mov r0, r5 + mov r2, r10 + str r4, [sp, #4] + mov r11, r5 + bl TryAddTargetToAiTargetList + mov r5, r0 + cmp r11, r5 + bne _02319BA0 +_02319B58: + ldrsh r0, [r10, #4] + ldrsh r1, [r10, #6] + add r0, r0, r7, lsl #1 + add r1, r1, r6, lsl #1 + bl GetTile + ldr r3, [r0, #0xc] + cmp r3, #0 + beq _02319BA0 + ldr r0, [r3] + cmp r0, #1 + bne _02319BA0 + str r9, [sp] + ldr r1, [sp, #0x24] + mov r0, r5 + mov r2, r10 + str r4, [sp, #4] + bl TryAddTargetToAiTargetList + mov r5, r0 +_02319BA0: + add r8, r8, #1 + cmp r8, #8 + blt _02319AD4 + b _02319E88 +_02319BB0: + cmp r7, #0x50 + cmpne r7, #0x80 + cmpne r7, #0x90 + bne _02319E00 + cmp r7, #0x50 + moveq r0, #0xa + streq r0, [sp, #0xc] + movne r0, #1 + strne r0, [sp, #0xc] + cmp r7, #0x90 + moveq r0, #2 + streq r0, [sp, #0xc] + mov r0, #0 + str r0, [sp, #0x20] + mvn r0, #0 + str r0, [sp, #0x28] +_02319BF0: + ldr r0, =DUNGEON_PTR + ldr r1, [r0] + ldr r0, [sp, #0x20] + add r0, r1, r0, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET] + str r0, [sp, #0x18] + bl EntityIsValid__02319F8C + cmp r0, #0 + ldrne r0, [sp, #0x18] + cmpne r10, r0 + beq _02319DE8 + ldr r1, [sp, #0x18] + add r0, r10, #4 + add r1, r1, #4 + bl GetDirectionTowardsPosition + ldr r1, =AI_CAN_ATTACK_IN_DIRECTION + str r0, [sp, #0x1c] + ldrb r0, [r1, r0] + cmp r0, #0 + bne _02319DE8 + ldr r1, [sp, #0x18] + mov r0, r10 + bl CanSeeTarget + cmp r0, #0 + beq _02319DE8 + ldr r0, [sp, #0x18] + ldrsh r6, [r10, #4] + ldrsh r11, [r0, #4] + sub r0, r6, r11 + bl abs + str r0, [sp, #0x10] + ldr r0, [sp, #0x18] + ldrsh r8, [r10, #6] + ldrsh r7, [r0, #6] + sub r0, r8, r7 + bl abs + ldr r1, [sp, #0x10] + cmp r1, r0 + movgt r2, r1 + movle r2, r0 + cmp r2, #0xa + movgt r0, #0 + bgt _02319D50 + ldr r1, [sp, #0xc] + cmp r2, r1 + movgt r0, #0 + bgt _02319D50 + ldr r1, [sp, #0x10] + cmp r1, r0 + ldr r0, [sp, #0x28] + bne _02319CF8 + cmp r6, r11 + cmplt r8, r7 + movlt r0, #1 + blt _02319D44 + cmp r6, r11 + bge _02319CE4 + cmp r8, r7 + movgt r0, #3 + bgt _02319D44 +_02319CE4: + cmp r6, r11 + cmpgt r8, r7 + movgt r0, #5 + movle r0, #7 + b _02319D44 +_02319CF8: + cmp r6, r11 + bne _02319D0C + cmp r8, r7 + movlt r0, #0 + blt _02319D44 +_02319D0C: + cmp r6, r11 + bge _02319D20 + cmp r8, r7 + moveq r0, #2 + beq _02319D44 +_02319D20: + cmp r6, r11 + bne _02319D34 + cmp r8, r7 + movgt r0, #4 + bgt _02319D44 +_02319D34: + cmp r6, r11 + ble _02319D44 + cmp r8, r7 + moveq r0, #6 +_02319D44: + cmp r0, #0 + movge r0, #1 + movlt r0, #0 +_02319D50: + cmp r0, #0 + beq _02319DE8 + str r4, [sp] + ldr r0, [sp, #0x24] + ldr r2, [sp, #0x18] + mov r1, r10 + mov r3, r9 + bl IsAiTargetEligible + cmp r0, #0 + beq _02319DE8 + ldr r1, [sp, #0x18] + ldr r2, [sp, #0x1c] + ldr r3, [sp, #0xc] + mov r0, r10 + bl IsTargetInRange + cmp r0, #0 + beq _02319DE8 + ldr r1, =AI_CAN_ATTACK_IN_DIRECTION + ldr r0, [sp, #0x1c] + mov r2, #1 + strb r2, [r1, r0] + mov r1, r0 + ldr r0, =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS + strb r1, [r0, r5] + mov r0, r10 + mov r1, r9 + bl GetMoveTypeForMonster + mov r3, r0 + ldr r1, [sp, #0x24] + ldr r2, [sp, #0x18] + mov r0, r10 + bl WeightMoveWithIqSkills + ldr r1, =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2 + str r0, [r1, r5, lsl #2] + ldr r1, [sp, #0x18] + ldr r0, =AI_POTENTIAL_ATTACK_TARGETS + str r1, [r0, r5, lsl #2] + add r5, r5, #1 +_02319DE8: + ldr r0, [sp, #0x20] + add r0, r0, #1 + str r0, [sp, #0x20] + cmp r0, #0x14 + blt _02319BF0 + b _02319E88 +_02319E00: + cmp r7, #0x60 + bne _02319E60 + ldr r7, =DUNGEON_PTR + mov r6, #0 +_02319E10: + ldr r0, [r7] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 + ldr r8, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET] + mov r0, r8 + bl EntityIsValid__02319F8C + cmp r0, #0 + beq _02319E50 + str r9, [sp] + ldr r1, [sp, #0x24] + mov r0, r5 + mov r2, r10 + mov r3, r8 + str r4, [sp, #4] + bl TryAddTargetToAiTargetList + mov r5, r0 +_02319E50: + add r6, r6, #1 + cmp r6, #0x14 + blt _02319E10 + b _02319E88 +_02319E60: + cmp r7, #0x70 + bne _02319E88 + str r9, [sp] + ldr r1, [sp, #0x24] + mov r2, r10 + mov r3, r10 + mov r0, #0 + str r4, [sp, #4] + bl TryAddTargetToAiTargetList + mov r5, r0 +_02319E88: + cmp r5, #0 + ldreq r0, [sp, #8] + moveq r1, #0 + streqb r1, [r0] + beq _02319F60 + mov r0, #0 + str r0, [sp, #0x14] + mov r4, r0 + ldr r3, =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2 + b _02319EC4 +_02319EB0: + ldr r2, [r3, r4, lsl #2] + ldr r1, [sp, #0x14] + add r4, r4, #1 + cmp r1, r2 + strlt r2, [sp, #0x14] +_02319EC4: + cmp r4, r5 + blt _02319EB0 + mov r6, #0 + mov r2, r6 + ldr r4, =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2 + b _02319EF0 +_02319EDC: + ldr r3, [r4, r6, lsl #2] + ldr r1, [sp, #0x14] + cmp r1, r3 + strne r2, [r4, r6, lsl #2] + add r6, r6, #1 +_02319EF0: + cmp r6, r5 + blt _02319EDC + mov r3, #0 + ldr r2, =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2 + b _02319F10 +_02319F04: + ldr r1, [r2, r3, lsl #2] + add r3, r3, #1 + add r0, r0, r1 +_02319F10: + cmp r3, r5 + blt _02319F04 + bl DungeonRandInt + mov r3, #0 + ldr r2, =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2 + b _02319F38 +_02319F28: + ldr r1, [r2, r3, lsl #2] + subs r0, r0, r1 + bmi _02319F40 + add r3, r3, #1 +_02319F38: + cmp r3, r5 + blt _02319F28 +_02319F40: + ldr r1, =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS + ldr r0, [sp, #8] + mov r2, #1 + strb r2, [r0] + ldrb r2, [r1, r3] + mov r1, #8 + strb r2, [r0, #1] + str r1, [r0, #4] +_02319F60: + ldr r0, [sp, #0x14] +_02319F64: + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc} +} #endif bool8 EntityIsValid__02319F8C(struct entity *entity) diff --git a/src/dungeon_ai_attack_2.c b/src/dungeon_ai_attack_2.c deleted file mode 100644 index d6be156a..00000000 --- a/src/dungeon_ai_attack_2.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "dungeon_ai_attack_2.h" -#include "direction.h" -#include "util.h" - -extern bool8 AI_CAN_ATTACK_IN_DIRECTION[NUM_DIRECTIONS]; - -void ResetAiCanAttackInDirection() -{ - for (s32 i = 0; i < NUM_DIRECTIONS; i++) - { - AI_CAN_ATTACK_IN_DIRECTION[i] = FALSE; - } -} From 1331886e471ef26ef6773a2e0f43cc08711d9de2 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 7 Aug 2025 20:22:28 -0400 Subject: [PATCH 29/40] Extract new nonmatching format in extract_function --- tools/extract_function/extract_function.py | 37 ++++++++++++++++++---- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/tools/extract_function/extract_function.py b/tools/extract_function/extract_function.py index 56232bc5..c0f55a31 100644 --- a/tools/extract_function/extract_function.py +++ b/tools/extract_function/extract_function.py @@ -109,12 +109,7 @@ new_asm_header = f"""\t.include "asm/macros.inc" new_asm_name = f'{new_asm_base_name}.s' new_asm_lines = original_lines[function_end_line + 1:] -if nonmatching: - original_asm_lines = original_lines[:function_end_line + 1] - original_asm_lines.append('#endif\n') - original_asm_lines[function_start_line] = '#ifndef NONMATCHING\n' + original_asm_lines[function_start_line] -else: - original_asm_lines = original_lines[:function_start_line - 1] +original_asm_lines = original_lines[:function_start_line - 1] with open(LSF_FILE_PATH, 'r') as lsf_file: lsf_lines = lsf_file.readlines() @@ -177,9 +172,39 @@ function_body = f"""{function_header} {{ }}""" + if nonmatching: + asm_lines = original_lines[function_start_line + 2 : function_end_line - 1] + for i, line in enumerate(asm_lines): + # Replace some register mnemonics with numbered registers. These don't work when ASM is embedded in C. + if not line.startswith('bl') and line.startswith('\t'): + space_index = line.find(' ') + line = line[:space_index] + line[space_index:].replace('sb', 'r9').replace('sl', 'r10').replace('fp', 'r11') + + semicolon_index = line.find(';') + if semicolon_index >= 0: + if 'jump table' in line or 'case' in line: + # Jump tables have comments, but semicolons are not recognized as comment markers in embedded ASM, so remove them. + line = line[:semicolon_index - 1] + else: + # Replace word values at the end of the function. + # They are conveniently already included within the ASM as comments. + line = line[:line.find('_')] + line[semicolon_index + 2:] + + asm_lines[i] = line + + # .align is not needed in embedded ASM + if '.align' in asm_lines[-1]: + asm_lines = asm_lines[:-1] + + asm_string = str.join('', asm_lines) + function_body = f"""#ifdef NONMATCHING {function_body} +#else +asm {function_header} +{{ +{asm_string}}} #endif""" # Add the extracted function to a .h and .c file. From d37282fba3dad851f059905f3b37396ff473fcf6 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 7 Aug 2025 20:37:10 -0400 Subject: [PATCH 30/40] Added ASM symbol hack to pmdsky-debug sync blacklist --- tools/sync_pmdsky_debug/pmdsky_debug_reader.py | 4 ++-- tools/sync_pmdsky_debug/xmap_reader.py | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/tools/sync_pmdsky_debug/pmdsky_debug_reader.py b/tools/sync_pmdsky_debug/pmdsky_debug_reader.py index 1108480e..1193827d 100644 --- a/tools/sync_pmdsky_debug/pmdsky_debug_reader.py +++ b/tools/sync_pmdsky_debug/pmdsky_debug_reader.py @@ -17,7 +17,7 @@ LANGUAGE_KEYS_PMDSKY_DEBUG_TO_XMAP = { LANGUAGE_KEYS_XMAP_TO_PMDSKY_DEBUG = {value: key for key, value in LANGUAGE_KEYS_PMDSKY_DEBUG_TO_XMAP.items()} # Symbols with duplicate addresses that should be ignored. -SYMBOL_BLACKLIST = set([ +PMDSKY_DEBUG_SYMBOL_BLACKLIST = set([ 'GAME_STATE_VALUES', 'MEMORY_ALLOCATION_TABLE' ]) @@ -81,7 +81,7 @@ def read_pmdsky_debug_symbols() -> Dict[str, Dict[str, Dict[int, SymbolDetails]] addresses: int | List[int] = symbol['address'][language] symbol_name: str = symbol['name'] - if symbol_name in SYMBOL_BLACKLIST: + if symbol_name in PMDSKY_DEBUG_SYMBOL_BLACKLIST: continue if 'aliases' in symbol: diff --git a/tools/sync_pmdsky_debug/xmap_reader.py b/tools/sync_pmdsky_debug/xmap_reader.py index 5b4a2c55..367333ea 100644 --- a/tools/sync_pmdsky_debug/xmap_reader.py +++ b/tools/sync_pmdsky_debug/xmap_reader.py @@ -8,6 +8,11 @@ HEADER_FOLDER = 'include' XMAP_PATH_ARM7 = os.path.join('sub', 'build', 'arm7.nef.xMAP') MAIN_LSF_PATH = 'main.lsf' +# Symbols with duplicate addresses that should be ignored. +XMAP_SYMBOL_BLACKLIST = set([ + 'AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2' +]) + """ Dictionary format: { @@ -78,6 +83,10 @@ def read_xmap_symbols_for_language(language: str) -> Dict[str, Dict[int, SymbolD elif current_section is not None and line.startswith(' ') and ('.text' in line or '.itcm' in line or line_is_data(line)) and len(line) > 28 and line[28] not in NON_FUNCTION_SYMBOLS: symbol_split = line[28:-1].split('\t') symbol_name = symbol_split[0] + + if symbol_name in XMAP_SYMBOL_BLACKLIST: + continue + symbol_address = int(line[2:10], 16) if line_is_data(line): if not symbol_name.startswith('$'): From 58dd36fe3da3552965e1ab976cadd773d8afbe71 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Fri, 8 Aug 2025 23:47:03 -0400 Subject: [PATCH 31/40] Synced from pmdsky-debug --- asm/include/main_02058F24.inc | 2 +- asm/include/overlay_29_0231EDFC.inc | 2 +- asm/include/overlay_29_0231F594.inc | 2 +- asm/include/overlay_29_023201A0.inc | 2 +- asm/include/overlay_29_02322DDC.inc | 2 +- asm/include/overlay_29_0232393C.inc | 2 +- asm/include/overlay_29_0233861C.inc | 2 +- asm/include/overlay_29_023456BC.inc | 2 +- asm/include/overlay_29_02346834.inc | 2 +- asm/include/overlay_31_023838E4.inc | 2 +- asm/main_02000DE0.s | 6 +++--- asm/main_02058F24.s | 4 ++-- asm/overlay_29_0231EDFC.s | 2 +- asm/overlay_29_0231F594.s | 2 +- asm/overlay_29_023201A0.s | 2 +- asm/overlay_29_02322DDC.s | 12 ++++++------ asm/overlay_29_0232393C.s | 2 +- asm/overlay_29_0233861C.s | 4 ++-- asm/overlay_29_023456BC.s | 2 +- asm/overlay_29_02346834.s | 2 +- asm/overlay_31_023838E4.s | 8 ++++---- include/dungeon_projectile_throw.h | 4 ++-- include/overlay_31_02383478.h | 2 +- src/dungeon_projectile_throw.c | 24 ++++++++++++------------ src/overlay_31_02383478.c | 4 ++-- src/overlay_31_02383880.c | 2 +- 26 files changed, 51 insertions(+), 51 deletions(-) diff --git a/asm/include/main_02058F24.inc b/asm/include/main_02058F24.inc index db5af7f8..471c4607 100644 --- a/asm/include/main_02058F24.inc +++ b/asm/include/main_02058F24.inc @@ -363,7 +363,7 @@ .public SetSpecialEpisodeType .public SetSpriteIdForAnimationControl .public ShowPortraitInPortraitBox -.public sin_4096 +.public SinAbs4096 .public SPECIAL_BAND_STAT_BOOST .public STATUS_NAME_STRING_IDS .public strcat diff --git a/asm/include/overlay_29_0231EDFC.inc b/asm/include/overlay_29_0231EDFC.inc index 2c462e7d..98ab670f 100644 --- a/asm/include/overlay_29_0231EDFC.inc +++ b/asm/include/overlay_29_0231EDFC.inc @@ -26,7 +26,7 @@ .public ov29_0232033C .public ov29_02321238 .public ShouldDisplayEntityWrapper -.public sin_4096 +.public SinAbs4096 .public SubstitutePlaceholderStringTags .public TryWarp .public TwoTurnMoveForcedMiss diff --git a/asm/include/overlay_29_0231F594.inc b/asm/include/overlay_29_0231F594.inc index a7558b2b..50d62935 100644 --- a/asm/include/overlay_29_0231F594.inc +++ b/asm/include/overlay_29_0231F594.inc @@ -24,7 +24,7 @@ .public ov29_023457C8 .public RemoveGroundItem .public SetEntityPixelPosXY -.public sin_4096 +.public SinAbs4096 .public SpawnItem .public UpdateMinimap .public UpdateTrapsVisibility diff --git a/asm/include/overlay_29_023201A0.inc b/asm/include/overlay_29_023201A0.inc index 9c76d4c9..ed625026 100644 --- a/asm/include/overlay_29_023201A0.inc +++ b/asm/include/overlay_29_023201A0.inc @@ -29,7 +29,7 @@ .public ov29_02353700 .public RemoveGroundItem .public ShouldDisplayEntityWrapper -.public sin_4096 +.public SinAbs4096 .public SubstitutePlaceholderStringTags .public UpdateEntityPixelPos .public UpdateMinimap diff --git a/asm/include/overlay_29_02322DDC.inc b/asm/include/overlay_29_02322DDC.inc index a8c3b9f2..98dd030a 100644 --- a/asm/include/overlay_29_02322DDC.inc +++ b/asm/include/overlay_29_02322DDC.inc @@ -42,7 +42,7 @@ .public PlayMoveAnimation .public SetPreprocessorArgsIdVal .public ShouldDisplayEntityWrapper -.public sin_4096 +.public SinAbs4096 .public sub_02001980 .public sub_0201CF90 .public TwoTurnMoveForcedMiss diff --git a/asm/include/overlay_29_0232393C.inc b/asm/include/overlay_29_0232393C.inc index 7dab1c15..e9c10ec8 100644 --- a/asm/include/overlay_29_0232393C.inc +++ b/asm/include/overlay_29_0232393C.inc @@ -41,5 +41,5 @@ .public PlayMoveAnimation .public PositionHasMonster .public QUICK_DODGER_MOVE_ACCURACY_DROP -.public sin_4096 +.public SinAbs4096 .public TwoTurnMoveForcedMiss diff --git a/asm/include/overlay_29_0233861C.inc b/asm/include/overlay_29_0233861C.inc index e7a886ce..b6ee7c40 100644 --- a/asm/include/overlay_29_0233861C.inc +++ b/asm/include/overlay_29_0233861C.inc @@ -80,7 +80,7 @@ .public ResetInnerBoundaryTileRows .public SECONDARY_TERRAIN_TYPES .public ShouldMinimapDisplayEntity -.public sin_4096 +.public SinAbs4096 .public StairsAlwaysReachable .public sub_0200A174 .public sub_0200B330 diff --git a/asm/include/overlay_29_023456BC.inc b/asm/include/overlay_29_023456BC.inc index f2164c48..09b2304a 100644 --- a/asm/include/overlay_29_023456BC.inc +++ b/asm/include/overlay_29_023456BC.inc @@ -44,7 +44,7 @@ .public SetEntityPixelPosXY .public SetPreprocessorArgsIdVal .public ShouldDisplayEntityWrapper -.public sin_4096 +.public SinAbs4096 .public SpawnItem .public sub_0200D1FC .public sub_0201B9F8 diff --git a/asm/include/overlay_29_02346834.inc b/asm/include/overlay_29_02346834.inc index a5a957c6..d4559f85 100644 --- a/asm/include/overlay_29_02346834.inc +++ b/asm/include/overlay_29_02346834.inc @@ -60,7 +60,7 @@ .public RemoveEmptyItemsInBag .public SetEntityPixelPosXY .public SetItemAcquired -.public sin_4096 +.public SinAbs4096 .public SpawnDroppedItem .public sub_0200CF6C .public sub_0200D894 diff --git a/asm/include/overlay_31_023838E4.inc b/asm/include/overlay_31_023838E4.inc index e052c60f..5ec83f86 100644 --- a/asm/include/overlay_31_023838E4.inc +++ b/asm/include/overlay_31_023838E4.inc @@ -63,7 +63,7 @@ .public DUNGEON_WINDOW_PARAMS_31 .public DUNGEON_WINDOW_PARAMS_32 .public DUNGEON_WINDOW_PARAMS_9 -.public EntityIsValid__02383658 +.public EntityIsValidOverlay31 .public FormatMoveString .public FormatMoveStringMore .public GetActiveTeamMember diff --git a/asm/main_02000DE0.s b/asm/main_02000DE0.s index 2019133f..c3cd5f62 100644 --- a/asm/main_02000DE0.s +++ b/asm/main_02000DE0.s @@ -859,8 +859,8 @@ _020018C4: bx lr arm_func_end sub_020018A4 - arm_func_start sin_4096 -sin_4096: ; 0x020018D0 + arm_func_start SinAbs4096 +SinAbs4096: ; 0x020018D0 and r1, r0, #0xc00 cmp r1, #0x400 bgt _020018EC @@ -913,7 +913,7 @@ _02001970: .align 2, 0 _02001978: .word _02090C48 _0200197C: .word 0x000003FF - arm_func_end sin_4096 + arm_func_end SinAbs4096 arm_func_start sub_02001980 sub_02001980: ; 0x02001980 diff --git a/asm/main_02058F24.s b/asm/main_02058F24.s index 7f00ecbd..0f1a5b6e 100644 --- a/asm/main_02058F24.s +++ b/asm/main_02058F24.s @@ -22511,7 +22511,7 @@ _0206B580: bl MultiplyByFixedPoint str r0, [r6, #0x18] ldr r0, [r6, #0x20] - bl sin_4096 + bl SinAbs4096 add r1, sl, #0x300 rsb r0, r0, #0 bl MultiplyByFixedPoint @@ -23206,7 +23206,7 @@ sub_0206BFA8: ; 0x0206BFA8 ldr r1, [r4, #0x30] add r7, r1, r0 ldr r0, [r4, #0x20] - bl sin_4096 + bl SinAbs4096 ldr r1, [r4, #0x24] rsb r0, r0, #0 bl MultiplyByFixedPoint diff --git a/asm/overlay_29_0231EDFC.s b/asm/overlay_29_0231EDFC.s index 32f209a7..f5e21dc3 100644 --- a/asm/overlay_29_0231EDFC.s +++ b/asm/overlay_29_0231EDFC.s @@ -345,7 +345,7 @@ _0231F294: cmp r0, #0 beq _0231F308 mov r0, r7 - bl sin_4096 + bl SinAbs4096 mov r0, r0, lsl #5 str r0, [r4, #0x1c] mov r0, #0x3b diff --git a/asm/overlay_29_0231F594.s b/asm/overlay_29_0231F594.s index c424e382..39a64e91 100644 --- a/asm/overlay_29_0231F594.s +++ b/asm/overlay_29_0231F594.s @@ -407,7 +407,7 @@ _0231FA9C: str r0, [sp, #4] bl IncrementEntityPixelPosXY mov r0, r8 - bl sin_4096 + bl SinAbs4096 mov r1, #0xc mul r1, r0, r1 ldr r0, [sp, #4] diff --git a/asm/overlay_29_023201A0.s b/asm/overlay_29_023201A0.s index b972f4b6..853bb1b1 100644 --- a/asm/overlay_29_023201A0.s +++ b/asm/overlay_29_023201A0.s @@ -164,7 +164,7 @@ _023203C0: mov r0, r5 str r8, [sp, #4] str sb, [sp, #8] - bl sin_4096 + bl SinAbs4096 mov r1, #0xc mul r1, r0, r1 str r1, [sl, #0x1c] diff --git a/asm/overlay_29_02322DDC.s b/asm/overlay_29_02322DDC.s index 4c46fde2..d4831d0b 100644 --- a/asm/overlay_29_02322DDC.s +++ b/asm/overlay_29_02322DDC.s @@ -532,7 +532,7 @@ _02323538: cmp fp, #1 bne _02323564 mov r0, sb, asr #8 - bl sin_4096 + bl SinAbs4096 mul r0, r4, r0 str r0, [sp, #0x50] mov r2, #0 @@ -544,13 +544,13 @@ _02323564: movne r2, r0 bne _023235B4 mov r0, sb, asr #8 - bl sin_4096 + bl SinAbs4096 ldr r1, [sp, #0x3c] mul r0, r1, r0 mov r0, r0, asr #8 str r0, [sp, #0x74] ldr r0, [sp, #0x40] - bl sin_4096 + bl SinAbs4096 ldr r1, [sp, #0x74] mul r0, r1, r0 str r0, [sp, #0x50] @@ -584,7 +584,7 @@ _02323600: cmp fp, #1 bne _0232362C mov r0, sb, asr #8 - bl sin_4096 + bl SinAbs4096 ldr r1, [sp, #0x34] mov r2, #0 mul r0, r1, r0 @@ -597,13 +597,13 @@ _0232362C: strne r0, [sp, #0x4c] bne _0232367C mov r0, sb, asr #8 - bl sin_4096 + bl SinAbs4096 ldr r1, [sp, #0x3c] mul r0, r1, r0 mov r0, r0, asr #8 str r0, [sp, #0x70] ldr r0, [sp, #0x30] - bl sin_4096 + bl SinAbs4096 ldr r1, [sp, #0x70] mul r0, r1, r0 str r0, [sp, #0x4c] diff --git a/asm/overlay_29_0232393C.s b/asm/overlay_29_0232393C.s index bcf64803..568f4008 100644 --- a/asm/overlay_29_0232393C.s +++ b/asm/overlay_29_0232393C.s @@ -139,7 +139,7 @@ _02323B14: movne r0, #0 bne _02323B3C mov r0, r5, asr #8 - bl sin_4096 + bl SinAbs4096 ldr r1, [sp, #0x14] mul r0, r1, r0 _02323B3C: diff --git a/asm/overlay_29_0233861C.s b/asm/overlay_29_0233861C.s index 44e9d653..db6e2bf4 100644 --- a/asm/overlay_29_0233861C.s +++ b/asm/overlay_29_0233861C.s @@ -516,7 +516,7 @@ _02338B74: b _02338C48 _02338BBC: ldr r0, [r6, #0x25c] - bl sin_4096 + bl SinAbs4096 ldr r3, [r6, #0x254] mov r2, #0xa mov r1, r0 @@ -526,7 +526,7 @@ _02338BBC: add r0, r1, r0 str r0, [r6, #0x24c] ldr r0, [r6, #0x260] - bl sin_4096 + bl SinAbs4096 ldr r3, [r6, #0x258] mov r2, #0xa mov r1, r0 diff --git a/asm/overlay_29_023456BC.s b/asm/overlay_29_023456BC.s index c7913420..427ec1ef 100644 --- a/asm/overlay_29_023456BC.s +++ b/asm/overlay_29_023456BC.s @@ -1158,7 +1158,7 @@ _0234665C: str r0, [sp, #0xc] bl IncrementEntityPixelPosXY mov r0, fp - bl sin_4096 + bl SinAbs4096 mov r1, #0xc mul r1, r0, r1 ldr r0, [sp, #0xc] diff --git a/asm/overlay_29_02346834.s b/asm/overlay_29_02346834.s index 7ccf9dd1..29d38b3e 100644 --- a/asm/overlay_29_02346834.s +++ b/asm/overlay_29_02346834.s @@ -1066,7 +1066,7 @@ _0234744C: add r0, r1, r0 str r0, [sp, #0x10] mov r0, r7 - bl sin_4096 + bl SinAbs4096 mov r1, #0xc mul r1, r0, r1 str r1, [sl, #0x1c] diff --git a/asm/overlay_31_023838E4.s b/asm/overlay_31_023838E4.s index 29573d12..7aa3fd41 100644 --- a/asm/overlay_31_023838E4.s +++ b/asm/overlay_31_023838E4.s @@ -219,7 +219,7 @@ _02383BEC: add r0, r0, #0x12000 ldr r8, [r0, #0xb28 + OV31_023838E4_OFFSET] mov r0, r8 - bl EntityIsValid__02383658 + bl EntityIsValidOverlay31 cmp r0, #0 beq _02383C38 ldr r1, [r8, #0xb4] @@ -730,7 +730,7 @@ _02384320: add r0, r0, #0x12000 ldr fp, [r0, #0xb28 + OV31_023838E4_OFFSET] mov r0, fp - bl EntityIsValid__02383658 + bl EntityIsValidOverlay31 cmp r0, #0 beq _02384374 ldr r1, [fp, #0xb4] @@ -1025,7 +1025,7 @@ _02384758: add r0, r0, #0x12000 ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] str r0, [sp, #0x1c] - bl EntityIsValid__02383658 + bl EntityIsValidOverlay31 cmp r0, #0 beq _023847A0 ldr r0, [sp, #0x1c] @@ -1224,7 +1224,7 @@ _023849F4: add r0, r0, #0x12000 ldr r0, [r0, #0xb28 + OV31_023838E4_OFFSET] str r0, [sp, #0x20] - bl EntityIsValid__02383658 + bl EntityIsValidOverlay31 cmp r0, #0 beq _02384C48 mov r0, #0 diff --git a/include/dungeon_projectile_throw.h b/include/dungeon_projectile_throw.h index 9229c4b3..b2aac0e7 100644 --- a/include/dungeon_projectile_throw.h +++ b/include/dungeon_projectile_throw.h @@ -24,11 +24,11 @@ bool8 ExclusiveItemEffectIsActive__02347B80(struct entity *entity, enum exclusiv // Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity). bool8 EntityIsValid__02347BA4(struct entity *entity); // Throws an item in a curved arc, like a Gravelerock. -// thrower: monster entity throwing the item +// user: monster entity throwing the item // item: item being thrown // start_pos: position to start throwing the item from // target_pos: position to throw the item to // projectile_throw_info: Metadata about the item being thrown -void HandleCurvedProjectileThrow(struct entity *thrower, struct item *item, struct position *start_pos, struct position *target_pos, struct projectile_throw_info *projectile_throw_info); +void HandleCurvedProjectileThrow(struct entity *user, struct item *item, struct position *start_pos, struct position *target_pos, struct projectile_throw_info *projectile_throw_info); #endif //PMDSKY_OVERLAY_29_02347BA4_H diff --git a/include/overlay_31_02383478.h b/include/overlay_31_02383478.h index 9b5f557b..605fb520 100644 --- a/include/overlay_31_02383478.h +++ b/include/overlay_31_02383478.h @@ -23,6 +23,6 @@ struct loc_struct { char* ov31_02383478(char* arg1, s32 arg2, u32 arg3); // Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity). -bool8 EntityIsValid__02383658(struct entity *entity); +bool8 EntityIsValidOverlay31(struct entity *entity); #endif //PMDSKY_OVERLAY_31_02383478_H diff --git a/src/dungeon_projectile_throw.c b/src/dungeon_projectile_throw.c index 43c6ef87..2cfb254a 100644 --- a/src/dungeon_projectile_throw.c +++ b/src/dungeon_projectile_throw.c @@ -22,7 +22,7 @@ extern bool8 ov29_022E2CA0(struct position *pos); extern void ov29_0234B4CC(bool8 val); -extern s32 sin_4096(s32 x); +extern s32 SinAbs4096(s32 x); extern bool8 ov29_022E9488(s32 inX, s32 inY, u8 index); extern bool8 ov29_023457C8(struct entity *entity, bool8 hallucinating, u8 a2, u8 a3, u8 a4); extern void AdvanceFrame(u32); @@ -32,7 +32,7 @@ extern void PrepareItemForPrinting__02345754(u8 *buffer, struct item *item); extern void SubstitutePlaceholderStringTags(u8 *string_id, struct entity *entity, u32 param_3); extern void ov29_02304A84(struct entity *entity, u32 new_dir); extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); -extern bool8 TryEndPetrifiedOrSleepStatus(struct entity *pokemon, struct entity *target); +extern bool8 TryEndPetrifiedOrSleepStatus(struct entity *user, struct entity *target); extern void ApplyItemEffect(char param_1, u8 param_2, u8 param_3, struct entity *attacker, struct entity *defender, struct item *thrown_item); extern void SpawnDroppedItem(struct entity *entity, struct entity *item_entity, struct item *item, bool8 param_4, struct position *dir_xy, u32 param_6); @@ -61,7 +61,7 @@ bool8 EntityIsValid__02347BA4(struct entity *entity) return GetEntityType(entity) != ENTITY_NOTHING; } -void HandleCurvedProjectileThrow(struct entity *thrower, struct item *item, struct position *start_pos, struct position *target_pos, struct projectile_throw_info *projectile_throw_info) +void HandleCurvedProjectileThrow(struct entity *user, struct item *item, struct position *start_pos, struct position *target_pos, struct projectile_throw_info *projectile_throw_info) { struct entity *projectile; bool8 r4; @@ -88,7 +88,7 @@ void HandleCurvedProjectileThrow(struct entity *thrower, struct item *item, stru throwResult = 1; lockOnSpecs = FALSE; - if (GetEntityType(thrower) == ENTITY_MONSTER && ItemIsActive__02347B50(thrower, ITEM_LOCKON_SPECS)) { + if (GetEntityType(user) == ENTITY_MONSTER && ItemIsActive__02347B50(user, ITEM_LOCKON_SPECS)) { lockOnSpecs = TRUE; } @@ -140,7 +140,7 @@ void HandleCurvedProjectileThrow(struct entity *thrower, struct item *item, stru u8 terrainArg; runFrameActions = FALSE; - sinVal = sin_4096(sinePhase >> 8) * arcHeight; + sinVal = SinAbs4096(sinePhase >> 8) * arcHeight; displayX = posXFixed + 0x400; displayY = posYFixed + 0x400; @@ -189,7 +189,7 @@ void HandleCurvedProjectileThrow(struct entity *thrower, struct item *item, stru hitResult.did_hit = FALSE; } else { - hitResult.did_hit = DoesProjectileHitTarget(thrower, hitResult.target); + hitResult.did_hit = DoesProjectileHitTarget(user, hitResult.target); } PrepareItemForPrinting__02345754(0, item); @@ -198,17 +198,17 @@ void HandleCurvedProjectileThrow(struct entity *thrower, struct item *item, stru bool8 immobiSlpEndMsg; ov29_02304A84(hitResult.target, 8); - LogMessageByIdWithPopupCheckUserTarget(thrower, hitResult.target, CURVED_PROJECTILE_LOG_MESSAGE_1); - immobiSlpEndMsg = TryEndPetrifiedOrSleepStatus(thrower, hitResult.target); - ApplyItemEffect(1, (lockOnSpecs || projectile_throw_info->unk0 != 0) ? 1 : 0, immobiSlpEndMsg, thrower, hitResult.target, item); + LogMessageByIdWithPopupCheckUserTarget(user, hitResult.target, CURVED_PROJECTILE_LOG_MESSAGE_1); + immobiSlpEndMsg = TryEndPetrifiedOrSleepStatus(user, hitResult.target); + ApplyItemEffect(1, (lockOnSpecs || projectile_throw_info->unk0 != 0) ? 1 : 0, immobiSlpEndMsg, user, hitResult.target, item); throwResult = 0; } else { if (hasBounceBand) { - LogMessageByIdWithPopupCheckUserTarget(thrower, hitResult.target, CURVED_PROJECTILE_LOG_MESSAGE_2); + LogMessageByIdWithPopupCheckUserTarget(user, hitResult.target, CURVED_PROJECTILE_LOG_MESSAGE_2); } else { - LogMessageByIdWithPopupCheckUserTarget(thrower, hitResult.target, CURVED_PROJECTILE_LOG_MESSAGE_3); + LogMessageByIdWithPopupCheckUserTarget(user, hitResult.target, CURVED_PROJECTILE_LOG_MESSAGE_3); } throwResult = 1; } @@ -220,7 +220,7 @@ void HandleCurvedProjectileThrow(struct entity *thrower, struct item *item, stru case 2: break; case 1: - SpawnDroppedItem(thrower, projectile, item, FALSE, NULL, 0); + SpawnDroppedItem(user, projectile, item, FALSE, NULL, 0); break; } } diff --git a/src/overlay_31_02383478.c b/src/overlay_31_02383478.c index b2647696..5df68809 100644 --- a/src/overlay_31_02383478.c +++ b/src/overlay_31_02383478.c @@ -47,7 +47,7 @@ char* ov31_02383478(char* arg1, s32 arg2, u32 arg3) if (GET_BIT(BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].flags, 0) && BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].held_by) { u32 r1 = (BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2].held_by - 1); - if (EntityIsValid__02383658(DUNGEON_PTR[0]->monster_slots.party_members[r1]) == 0) { + if (EntityIsValidOverlay31(DUNGEON_PTR[0]->monster_slots.party_members[r1]) == 0) { sub_0200D894(&(BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[arg2])); } } @@ -56,7 +56,7 @@ char* ov31_02383478(char* arg1, s32 arg2, u32 arg3) return arg1; } -bool8 EntityIsValid__02383658(struct entity *entity) +bool8 EntityIsValidOverlay31(struct entity *entity) { if (entity == NULL) return FALSE; diff --git a/src/overlay_31_02383880.c b/src/overlay_31_02383880.c index 1c2e2611..6efec43a 100644 --- a/src/overlay_31_02383880.c +++ b/src/overlay_31_02383880.c @@ -70,7 +70,7 @@ void ov31_02383880(u8* arg1) arg1[0] = 0; count = arg1[0] + 1; for (s32 i=0; i < MAX_TEAM_MEMBERS; i++) { - u8 test = EntityIsValid__02383658(DUNGEON_PTR[0]->monster_slots.party_members[i]); + u8 test = EntityIsValidOverlay31(DUNGEON_PTR[0]->monster_slots.party_members[i]); if (!test) { arg1[i+1] = 0; } else { From b9b44cb45dcd47006e27b82bc5333885fb5657cb Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Tue, 12 Aug 2025 10:38:18 -0600 Subject: [PATCH 32/40] Draft documentation for monster.md info --- include/monster_data.h | 63 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/include/monster_data.h b/include/monster_data.h index c47507c4..c016e701 100644 --- a/include/monster_data.h +++ b/include/monster_data.h @@ -1,18 +1,63 @@ #ifndef PMDSKY_MONSTER_DATA_TABLE_PTR_H #define PMDSKY_MONSTER_DATA_TABLE_PTR_H -#include "enums.h" - -struct monster_data { - u8 fill0[0x16]; - enum mobility_type mobility_type; - u8 fill17[0x3]; - u8 can_throw_items; - u8 fill1B[0x29]; +struct monster_data_table_entry { + u16 entity_id; // 0x0: A entity-unique ID to identify the entity in both of its 2 entries. Seems to match pokedex number. + u16 unk_0x2; // 0x2: Unknown. Pokemon with the same category string have the same value in here. + u16 pokedex_number; // 0x4: The national Pokedex number, as displayed in Chimecho Assembly. + u16 base_movement_speed; // 0x6: The base movement speed in dungeons. + u16 pre_evolution_idx; // 0x8: The pre-evolution of the monster. [Enum?] + u16 evolution_method; // 0xA: The evolution method required to evolve to this Pokemon from the pre-evo specified in PreEvoIndex. Null if unused. + u16 evolution_param_1; // 0xC: The first parameter for the evolution method. Null if unused. + u16 evolution_param_2; // 0xE: The second parameter for the evolution method. Null if unused. + u16 sprite_index; // 0x10: The index of the entity's sprite. It's the index inside the three Pokemon sprite files inside the "/MONSTER/" directory! + u8 gender; // 0x12: Gender of this particular entity entry. [Enum?] + u8 body_size; // 0x13: The body size of the Pokemon. Used when determining how many Pokemon fits in the party. + u8 primary_type; // 0x14: The Pokemon's primary type. [Enum?] + u8 secondary_type; // 0x15: The Pokemon's secondary type. [Enum?] + u8 movement_type; // 0x16: This decides what terrains the entity can move over, and whether its hovering or not. [Enum?] + u8 iq_group; // 0x17: The IQ group the Pokemon belongs to. [Enum?] + u8 primary_ability; // 0x18: The Pokemon's primary ability's ID. [Enum?] + u8 secondary_ability; // 0x19: The Pokemon's secondary ability's ID. [Enum?] + u16 flags; // 0x1A: Stores bitflags. Bits 0-3: Unknown. Bit 4: If false, the Pokemon can't move inside of dungeons. Bit 5: If false, the Pokemon can't throw items. Bit 6: If false, the Pokemon can't evolve at Luminous Spring, even if it has an evolution. Bit 7: If true, the Pokemon requires a special item to spawn. Bits 8-15: Unknown. + u16 exp_yield; // 0x1C: The Exp yield. + s16 recruit_rate_1; // 0x1E: Another recruit rate, this one is usually closer to 0 when RecruitRate1 and RecruitRate2 are different! + s16 base_hp; // 0x20: The HP the Pokemon has at lvl 1. + s16 recruit_rate_2; // 0x22: Recruit rate. + s8 base_atk; // 0x24: The attack stat of the Pokemon at lvl 1. + s8 base_sp_atk; // 0x25: The special attack stat of the Pokemon at lvl 1. + s8 base_def; // 0x26: The defense stat of the pokemon at lvl 1. + s8 base_sp_def; // 0x27: The base special defense of the pokemon at lvl 1. + s16 weight; // 0x28: The weight tier for weight based damages. + s16 size; // 0x2A: The size tier for size based damages. + s8 unk_0x2c; // 0x2C: Unknown. Most of the time 0xA. + s8 unk_0x2d; // 0x2D: Unknown. Most of the time 0xA. + s8 shadow_size; // 0x2E: The size of the Pokemon's shadow. + s8 spawn_asleep_chance; // 0x2F: The percent chance that a Pokemon will spawn asleep. Most of the time 0x8. + u8 hp_regeneration; // 0x30: The rate at which a Pokemon regenerates HP. Always 0x64. + s8 unk_0x31; // 0x31: Unknown. + s16 base_form_idx; // 0x32: The base evolutionary stage of the Pokemon. Seems to always be between 0 and 600. + s16 exclusive_item_1; // 0x34: The first 1-star exclusive item for this Pokemon. Null if NA. [Enum?] + s16 exclusive_item_2; // 0x36: The second 1-star exclusive item for this Pokemon. Null if NA. [Enum?] + s16 exclusive_item_3; // 0x38: The 2-star exclusive item for this Pokemon. Null if NA. [Enum?] + s16 exclusive_item_4; // 0x3A: The 3-star exclusive item for this Pokemon. Null if NA. [Enum?] + s16 unk_0x3c; // 0x3C: Unknown. + s16 unk_0x3e; // 0x3E: Unknown. Often 0xF. + s16 unk_0x40; // 0x40: Unknown. + s16 unk_0x42; // 0x42: Unknown. }; +// The monster.md file without the header. This is what MONSTER_DATA_TABLE_PTR points to, though the +// full monster_file_contents struct is loaded in RAM. struct monster_data_table { - struct monster_data entries[MONSTER_RESERVE_45 + 1]; + struct monster_data_table_entry entries[MONSTER_RESERVE_45 + 1]; +}; + +// Format of the monster.md file. +struct monster_file_contents { + char magic_number[4]; // 0x0: The string "MD\0\0". + u32 nb_entries; // 0x4: The number of entries in the body of the table. + struct monster_data_table table; // 0x8: The main contents of the data table. }; #endif //PMDSKY_MONSTER_DATA_TABLE_PTR_H From bb8c7a842974fc0d55ebe23de7af54186dd46476 Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Tue, 12 Aug 2025 18:09:55 -0600 Subject: [PATCH 33/40] Integrated revised monster data into existing code It compiles and matches now! Yay! --- include/monster_data.h | 89 ++++++++++++++++++++++-------------------- src/main_02052874.c | 2 +- src/main_02052950.c | 2 +- 3 files changed, 48 insertions(+), 45 deletions(-) diff --git a/include/monster_data.h b/include/monster_data.h index c016e701..8dca6c28 100644 --- a/include/monster_data.h +++ b/include/monster_data.h @@ -1,50 +1,53 @@ #ifndef PMDSKY_MONSTER_DATA_TABLE_PTR_H #define PMDSKY_MONSTER_DATA_TABLE_PTR_H +#include "enums.h" + struct monster_data_table_entry { - u16 entity_id; // 0x0: A entity-unique ID to identify the entity in both of its 2 entries. Seems to match pokedex number. - u16 unk_0x2; // 0x2: Unknown. Pokemon with the same category string have the same value in here. - u16 pokedex_number; // 0x4: The national Pokedex number, as displayed in Chimecho Assembly. - u16 base_movement_speed; // 0x6: The base movement speed in dungeons. - u16 pre_evolution_idx; // 0x8: The pre-evolution of the monster. [Enum?] - u16 evolution_method; // 0xA: The evolution method required to evolve to this Pokemon from the pre-evo specified in PreEvoIndex. Null if unused. - u16 evolution_param_1; // 0xC: The first parameter for the evolution method. Null if unused. - u16 evolution_param_2; // 0xE: The second parameter for the evolution method. Null if unused. - u16 sprite_index; // 0x10: The index of the entity's sprite. It's the index inside the three Pokemon sprite files inside the "/MONSTER/" directory! - u8 gender; // 0x12: Gender of this particular entity entry. [Enum?] - u8 body_size; // 0x13: The body size of the Pokemon. Used when determining how many Pokemon fits in the party. - u8 primary_type; // 0x14: The Pokemon's primary type. [Enum?] - u8 secondary_type; // 0x15: The Pokemon's secondary type. [Enum?] - u8 movement_type; // 0x16: This decides what terrains the entity can move over, and whether its hovering or not. [Enum?] - u8 iq_group; // 0x17: The IQ group the Pokemon belongs to. [Enum?] - u8 primary_ability; // 0x18: The Pokemon's primary ability's ID. [Enum?] - u8 secondary_ability; // 0x19: The Pokemon's secondary ability's ID. [Enum?] - u16 flags; // 0x1A: Stores bitflags. Bits 0-3: Unknown. Bit 4: If false, the Pokemon can't move inside of dungeons. Bit 5: If false, the Pokemon can't throw items. Bit 6: If false, the Pokemon can't evolve at Luminous Spring, even if it has an evolution. Bit 7: If true, the Pokemon requires a special item to spawn. Bits 8-15: Unknown. - u16 exp_yield; // 0x1C: The Exp yield. - s16 recruit_rate_1; // 0x1E: Another recruit rate, this one is usually closer to 0 when RecruitRate1 and RecruitRate2 are different! - s16 base_hp; // 0x20: The HP the Pokemon has at lvl 1. - s16 recruit_rate_2; // 0x22: Recruit rate. - s8 base_atk; // 0x24: The attack stat of the Pokemon at lvl 1. - s8 base_sp_atk; // 0x25: The special attack stat of the Pokemon at lvl 1. - s8 base_def; // 0x26: The defense stat of the pokemon at lvl 1. - s8 base_sp_def; // 0x27: The base special defense of the pokemon at lvl 1. - s16 weight; // 0x28: The weight tier for weight based damages. - s16 size; // 0x2A: The size tier for size based damages. - s8 unk_0x2c; // 0x2C: Unknown. Most of the time 0xA. - s8 unk_0x2d; // 0x2D: Unknown. Most of the time 0xA. - s8 shadow_size; // 0x2E: The size of the Pokemon's shadow. - s8 spawn_asleep_chance; // 0x2F: The percent chance that a Pokemon will spawn asleep. Most of the time 0x8. - u8 hp_regeneration; // 0x30: The rate at which a Pokemon regenerates HP. Always 0x64. - s8 unk_0x31; // 0x31: Unknown. - s16 base_form_idx; // 0x32: The base evolutionary stage of the Pokemon. Seems to always be between 0 and 600. - s16 exclusive_item_1; // 0x34: The first 1-star exclusive item for this Pokemon. Null if NA. [Enum?] - s16 exclusive_item_2; // 0x36: The second 1-star exclusive item for this Pokemon. Null if NA. [Enum?] - s16 exclusive_item_3; // 0x38: The 2-star exclusive item for this Pokemon. Null if NA. [Enum?] - s16 exclusive_item_4; // 0x3A: The 3-star exclusive item for this Pokemon. Null if NA. [Enum?] - s16 unk_0x3c; // 0x3C: Unknown. - s16 unk_0x3e; // 0x3E: Unknown. Often 0xF. - s16 unk_0x40; // 0x40: Unknown. - s16 unk_0x42; // 0x42: Unknown. + u16 entity_id; // 0x0: A entity-unique ID to identify the entity in both of its 2 entries. Seems to match pokedex number. + u16 unk_0x2; // 0x2: Unknown. Pokemon with the same category string have the same value in here. + u16 pokedex_number; // 0x4: The national Pokedex number, as displayed in Chimecho Assembly. + u16 base_movement_speed; // 0x6: The base movement speed in dungeons. + u16 pre_evolution_idx; // 0x8: The pre-evolution of the monster. [Enum?] + u16 evolution_method; // 0xA: The evolution method required to evolve to this Pokemon from the pre-evo specified in PreEvoIndex. Null if unused. + u16 evolution_param_1; // 0xC: The first parameter for the evolution method. Null if unused. + u16 evolution_param_2; // 0xE: The second parameter for the evolution method. Null if unused. + u16 sprite_index; // 0x10: The index of the entity's sprite. It's the index inside the three Pokemon sprite files inside the "/MONSTER/" directory! + u8 gender; // 0x12: Gender of this particular entity entry. [Enum?] + u8 body_size; // 0x13: The body size of the Pokemon. Used when determining how many Pokemon fits in the party. + u8 primary_type; // 0x14: The Pokemon's primary type. [Enum?] + u8 secondary_type; // 0x15: The Pokemon's secondary type. [Enum?] + enum mobility_type movement_type; // 0x16: This decides what terrains the entity can move over, and whether its hovering or not. + u8 iq_group; // 0x17: The IQ group the Pokemon belongs to. [Enum?] + u8 primary_ability; // 0x18: The Pokemon's primary ability's ID. [Enum?] + u8 secondary_ability; // 0x19: The Pokemon's secondary ability's ID. [Enum?] + u8 flags; // 0x1A: Stores bitflags. Bits 0-3: Unknown. Bit 4: If false, the Pokemon can't move inside of dungeons. Bit 5: If false, the Pokemon can't throw items. Bit 6: If false, the Pokemon can't evolve at Luminous Spring, even if it has an evolution. Bit 7: If true, the Pokemon requires a special item to spawn. + u8 unk_0x1b; // 0x1B: Unknown. Possibly more flags? + u16 exp_yield; // 0x1C: The Exp yield. + s16 recruit_rate_1; // 0x1E: Another recruit rate, this one is usually closer to 0 when RecruitRate1 and RecruitRate2 are different! + s16 base_hp; // 0x20: The HP the Pokemon has at lvl 1. + s16 recruit_rate_2; // 0x22: Recruit rate. + s8 base_atk; // 0x24: The attack stat of the Pokemon at lvl 1. + s8 base_sp_atk; // 0x25: The special attack stat of the Pokemon at lvl 1. + s8 base_def; // 0x26: The defense stat of the pokemon at lvl 1. + s8 base_sp_def; // 0x27: The base special defense of the pokemon at lvl 1. + s16 weight; // 0x28: The weight tier for weight based damages. + s16 size; // 0x2A: The size tier for size based damages. + s8 unk_0x2c; // 0x2C: Unknown. Most of the time 0xA. + s8 unk_0x2d; // 0x2D: Unknown. Most of the time 0xA. + s8 shadow_size; // 0x2E: The size of the Pokemon's shadow. + s8 spawn_asleep_chance; // 0x2F: The percent chance that a Pokemon will spawn asleep. Most of the time 0x8. + u8 hp_regeneration; // 0x30: The rate at which a Pokemon regenerates HP. Always 0x64. + s8 unk_0x31; // 0x31: Unknown. + s16 base_form_idx; // 0x32: The base evolutionary stage of the Pokemon. Seems to always be between 0 and 600. + s16 exclusive_item_1; // 0x34: The first 1-star exclusive item for this Pokemon. Null if NA. [Enum?] + s16 exclusive_item_2; // 0x36: The second 1-star exclusive item for this Pokemon. Null if NA. [Enum?] + s16 exclusive_item_3; // 0x38: The 2-star exclusive item for this Pokemon. Null if NA. [Enum?] + s16 exclusive_item_4; // 0x3A: The 3-star exclusive item for this Pokemon. Null if NA. [Enum?] + s16 unk_0x3c; // 0x3C: Unknown. + s16 unk_0x3e; // 0x3E: Unknown. Often 0xF. + s16 unk_0x40; // 0x40: Unknown. + s16 unk_0x42; // 0x42: Unknown. }; // The monster.md file without the header. This is what MONSTER_DATA_TABLE_PTR points to, though the diff --git a/src/main_02052874.c b/src/main_02052874.c index 21c45b57..85db0cd8 100644 --- a/src/main_02052874.c +++ b/src/main_02052874.c @@ -5,5 +5,5 @@ extern struct monster_data_table *MONSTER_DATA_TABLE_PTR; enum mobility_type GetMobilityType(s16 monster_id) { - return MONSTER_DATA_TABLE_PTR->entries[monster_id].mobility_type; + return MONSTER_DATA_TABLE_PTR->entries[monster_id].movement_type; } diff --git a/src/main_02052950.c b/src/main_02052950.c index 1765c90d..42dde747 100644 --- a/src/main_02052950.c +++ b/src/main_02052950.c @@ -5,5 +5,5 @@ extern struct monster_data_table *MONSTER_DATA_TABLE_PTR; bool8 CanThrowItems(s16 monster_id) { - return MONSTER_DATA_TABLE_PTR->entries[monster_id].can_throw_items & 0x20 ? TRUE : FALSE; + return MONSTER_DATA_TABLE_PTR->entries[monster_id].flags & 0b00100000 ? TRUE : FALSE; } From 2f5fddf34303cf44b96dd2ef2704a182158ab8ae Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Tue, 12 Aug 2025 19:09:25 -0600 Subject: [PATCH 34/40] First batch of monster.md functions --- asm/include/main_02052890.inc | 2 - asm/main_02052890.s | 82 ----------------------------------- include/main_02052874.h | 8 ++++ include/main_02052950.h | 8 ---- include/monster_data.h | 10 +++-- main.lsf | 2 - src/dungeon_action.c | 3 +- src/dungeon_ai.c | 2 +- src/dungeon_logic_2.c | 2 +- src/main_02052874.c | 37 +++++++++++++++- src/main_02052950.c | 9 ---- 11 files changed, 52 insertions(+), 113 deletions(-) delete mode 100644 asm/include/main_02052890.inc delete mode 100644 asm/main_02052890.s delete mode 100644 include/main_02052950.h delete mode 100644 src/main_02052950.c diff --git a/asm/include/main_02052890.inc b/asm/include/main_02052890.inc deleted file mode 100644 index b57dda60..00000000 --- a/asm/include/main_02052890.inc +++ /dev/null @@ -1,2 +0,0 @@ -#pragma once -.public MONSTER_DATA_TABLE_PTR diff --git a/asm/main_02052890.s b/asm/main_02052890.s deleted file mode 100644 index a37257c2..00000000 --- a/asm/main_02052890.s +++ /dev/null @@ -1,82 +0,0 @@ - .include "asm/macros.inc" - .include "main_02052890.inc" - - .text - - arm_func_start GetRegenSpeed -GetRegenSpeed: ; 0x02052890 - ldr r2, _020528B0 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrb r0, [r0, #0x30] - mov r0, r0, lsl #1 - and r0, r0, #0xff - bx lr - .align 2, 0 -_020528B0: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetRegenSpeed - - arm_func_start GetCanMoveFlag -GetCanMoveFlag: ; 0x020528B4 - ldr r2, _020528DC ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrb r0, [r0, #0x1a] - tst r0, #0x10 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_020528DC: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetCanMoveFlag - - arm_func_start GetChanceAsleep -GetChanceAsleep: ; 0x020528E0 - ldr r2, _020528F8 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrb r0, [r0, #0x2f] - bx lr - .align 2, 0 -_020528F8: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetChanceAsleep - - arm_func_start GetWeightMultiplier -GetWeightMultiplier: ; 0x020528FC - ldr r2, _02052914 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrh r0, [r0, #0x28] - bx lr - .align 2, 0 -_02052914: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetWeightMultiplier - - arm_func_start GetSize -GetSize: ; 0x02052918 - ldr r2, _02052930 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrh r0, [r0, #0x2a] - bx lr - .align 2, 0 -_02052930: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetSize - - arm_func_start GetBaseHp -GetBaseHp: ; 0x02052934 - ldr r2, _0205294C ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrh r0, [r0, #0x20] - bx lr - .align 2, 0 -_0205294C: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetBaseHp diff --git a/include/main_02052874.h b/include/main_02052874.h index c7460646..cecb8825 100644 --- a/include/main_02052874.h +++ b/include/main_02052874.h @@ -2,7 +2,15 @@ #define PMDSKY_MAIN_02052874_H #include "enums.h" +#include "util.h" enum mobility_type GetMobilityType(s16 monster_id); +u8 GetRegenSpeed(s16 monster_id); +bool8 GetCanMoveFlag(s16 monster_id); +u8 GetChanceAsleep(s16 monster_id); +u16 GetWeightMultiplier(s16 monster_id); +u16 GetSize(s16 monster_id); +u16 GetBaseHp(s16 monster_id); +bool8 CanThrowItems(s16 monster_id); #endif //PMDSKY_MAIN_02052874_H diff --git a/include/main_02052950.h b/include/main_02052950.h deleted file mode 100644 index 8a0de94d..00000000 --- a/include/main_02052950.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef PMDSKY_MAIN_02052950_H -#define PMDSKY_MAIN_02052950_H - -#include "util.h" - -bool8 CanThrowItems(s16 monster_id); - -#endif //PMDSKY_MAIN_02052950_H diff --git a/include/monster_data.h b/include/monster_data.h index 8dca6c28..4635ebd5 100644 --- a/include/monster_data.h +++ b/include/monster_data.h @@ -3,6 +3,8 @@ #include "enums.h" +extern struct monster_data_table *MONSTER_DATA_TABLE_PTR; + struct monster_data_table_entry { u16 entity_id; // 0x0: A entity-unique ID to identify the entity in both of its 2 entries. Seems to match pokedex number. u16 unk_0x2; // 0x2: Unknown. Pokemon with the same category string have the same value in here. @@ -25,18 +27,18 @@ struct monster_data_table_entry { u8 unk_0x1b; // 0x1B: Unknown. Possibly more flags? u16 exp_yield; // 0x1C: The Exp yield. s16 recruit_rate_1; // 0x1E: Another recruit rate, this one is usually closer to 0 when RecruitRate1 and RecruitRate2 are different! - s16 base_hp; // 0x20: The HP the Pokemon has at lvl 1. + u16 base_hp; // 0x20: The HP the Pokemon has at lvl 1. s16 recruit_rate_2; // 0x22: Recruit rate. s8 base_atk; // 0x24: The attack stat of the Pokemon at lvl 1. s8 base_sp_atk; // 0x25: The special attack stat of the Pokemon at lvl 1. s8 base_def; // 0x26: The defense stat of the pokemon at lvl 1. s8 base_sp_def; // 0x27: The base special defense of the pokemon at lvl 1. - s16 weight; // 0x28: The weight tier for weight based damages. - s16 size; // 0x2A: The size tier for size based damages. + u16 weight; // 0x28: The weight tier for weight based damages. + u16 size; // 0x2A: The size tier for size based damages. s8 unk_0x2c; // 0x2C: Unknown. Most of the time 0xA. s8 unk_0x2d; // 0x2D: Unknown. Most of the time 0xA. s8 shadow_size; // 0x2E: The size of the Pokemon's shadow. - s8 spawn_asleep_chance; // 0x2F: The percent chance that a Pokemon will spawn asleep. Most of the time 0x8. + u8 spawn_asleep_chance; // 0x2F: The percent chance that a Pokemon will spawn asleep. Most of the time 0x8. u8 hp_regeneration; // 0x30: The rate at which a Pokemon regenerates HP. Always 0x64. s8 unk_0x31; // 0x31: Unknown. s16 base_form_idx; // 0x32: The base evolutionary stage of the Pokemon. Seems to always be between 0 and 600. diff --git a/main.lsf b/main.lsf index 5d6caa13..0e1eb4f7 100644 --- a/main.lsf +++ b/main.lsf @@ -66,8 +66,6 @@ Static main Object src/main_02051760.o Object asm/main_02051788.o Object src/main_02052874.o - Object asm/main_02052890.o - Object src/main_02052950.o Object asm/main_0205297C.o Object src/main_02054AA4.o Object asm/main_02054AD4.o diff --git a/src/dungeon_action.c b/src/dungeon_action.c index 284a22e3..6351673d 100644 --- a/src/dungeon_action.c +++ b/src/dungeon_action.c @@ -1,6 +1,5 @@ #include "dungeon_action.h" - -extern bool8 GetCanMoveFlag(s16 monster_id); +#include "main_02052874.h" void ClearMonsterActionFields(struct action_data *monster_action) { diff --git a/src/dungeon_ai.c b/src/dungeon_ai.c index 1deeeeac..f5b827c5 100644 --- a/src/dungeon_ai.c +++ b/src/dungeon_ai.c @@ -10,6 +10,7 @@ #include "dungeon_util_static.h" #include "dungeon_util.h" #include "dungeon_visibility.h" +#include "main_02052874.h" #include "overlay_29_022FB538.h" #include "status_checks.h" #include "targeting.h" @@ -25,7 +26,6 @@ extern void EndFrozenClassStatus(struct entity *user, struct entity *target, bool8 log); extern void SubstitutePlaceholderStringTags(u8 *string_id, struct entity *entity, u32 param_3); extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id); -extern bool8 GetCanMoveFlag(s16 monster_id); extern void AiMovement(struct entity *monster, bool8 show_run_away_effect); void RunMonsterAi(struct entity *monster, u32 unused) diff --git a/src/dungeon_logic_2.c b/src/dungeon_logic_2.c index b16faa23..abee525c 100644 --- a/src/dungeon_logic_2.c +++ b/src/dungeon_logic_2.c @@ -1,5 +1,5 @@ #include "dungeon_logic_2.h" -#include "main_02052950.h" +#include "main_02052874.h" bool8 MonsterCanThrowItems(struct monster *monster) { diff --git a/src/main_02052874.c b/src/main_02052874.c index 85db0cd8..76aa32aa 100644 --- a/src/main_02052874.c +++ b/src/main_02052874.c @@ -1,9 +1,42 @@ #include "main_02052874.h" #include "monster_data.h" -extern struct monster_data_table *MONSTER_DATA_TABLE_PTR; - enum mobility_type GetMobilityType(s16 monster_id) { return MONSTER_DATA_TABLE_PTR->entries[monster_id].movement_type; } + +u8 GetRegenSpeed(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].hp_regeneration << 1; +} + +bool8 GetCanMoveFlag(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].flags & 0b00010000 ? TRUE : FALSE; +} + +u8 GetChanceAsleep(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].spawn_asleep_chance; +} + +u16 GetWeightMultiplier(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].weight; +} + +u16 GetSize(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].size; +} + +u16 GetBaseHp(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].base_hp; +} + +bool8 CanThrowItems(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].flags & 0b00100000 ? TRUE : FALSE; +} diff --git a/src/main_02052950.c b/src/main_02052950.c deleted file mode 100644 index 42dde747..00000000 --- a/src/main_02052950.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "main_02052950.h" -#include "monster_data.h" - -extern struct monster_data_table *MONSTER_DATA_TABLE_PTR; - -bool8 CanThrowItems(s16 monster_id) -{ - return MONSTER_DATA_TABLE_PTR->entries[monster_id].flags & 0b00100000 ? TRUE : FALSE; -} From ed5011c4f0cfe104d4cd3cd53c5f3392a8c28e98 Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Tue, 12 Aug 2025 20:34:46 -0600 Subject: [PATCH 35/40] monster.md functions batch 2 --- asm/get_category_string.s | 35 ++++++ asm/include/get_category_string.inc | 6 ++ asm/include/main_02051788.inc | 30 +++--- asm/include/main_020527E0.inc | 4 + asm/main_02051788.s | 160 ---------------------------- asm/main_020527E0.s | 37 +++++++ include/main_020526EC.h | 9 ++ include/main_020527A8.h | 7 ++ include/main_0205283C.h | 7 ++ include/monster_data.h | 6 +- main.lsf | 5 + src/main_020526EC.c | 22 ++++ src/main_020527A8.c | 12 +++ src/main_0205283C.c | 12 +++ src/main_02054BE0.c | 9 +- src/main_02054DC4.c | 2 +- 16 files changed, 177 insertions(+), 186 deletions(-) create mode 100644 asm/get_category_string.s create mode 100644 asm/include/get_category_string.inc create mode 100644 asm/include/main_020527E0.inc create mode 100644 asm/main_020527E0.s create mode 100644 include/main_020526EC.h create mode 100644 include/main_020527A8.h create mode 100644 include/main_0205283C.h create mode 100644 src/main_020526EC.c create mode 100644 src/main_020527A8.c create mode 100644 src/main_0205283C.c diff --git a/asm/get_category_string.s b/asm/get_category_string.s new file mode 100644 index 00000000..ba2d4c63 --- /dev/null +++ b/asm/get_category_string.s @@ -0,0 +1,35 @@ + .include "asm/macros.inc" + .include "get_category_string.inc" + + .text + + arm_func_start GetCategoryString +GetCategoryString: ; 0x0205275C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl AllocateTemp1024ByteBufferFromPool + mov r4, r0 + mov r0, r5 + mov r1, #0x258 + bl _s32_div_f +#if defined(EUROPE) + add r0, r1, #0x79 + add r0, r0, #0x2400 +#elif defined(JAPAN) + add r0, r1, #0x1a40 +#else + add r0, r1, #0x77 + add r0, r0, #0x2400 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r2, r0 + ldr r1, _020527A4 ; =_020A3200 + mov r0, r4 + bl SprintfStatic__02052418 + mov r0, r4 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020527A4: .word _020A3200 + arm_func_end GetCategoryString diff --git a/asm/include/get_category_string.inc b/asm/include/get_category_string.inc new file mode 100644 index 00000000..564d02af --- /dev/null +++ b/asm/include/get_category_string.inc @@ -0,0 +1,6 @@ +#pragma once +.public AllocateTemp1024ByteBufferFromPool +.public SprintfStatic__02052418 +.public StringFromId +.public _020A3200 +.public _s32_div_f diff --git a/asm/include/main_02051788.inc b/asm/include/main_02051788.inc index 7f552ca8..71f8d757 100644 --- a/asm/include/main_02051788.inc +++ b/asm/include/main_02051788.inc @@ -1,17 +1,4 @@ #pragma once -.public _020A20B1 -.public _020A2D09 -.public _020A31B8 -.public _020A31D4 -.public _020A31E4 -.public _020A31F4 -.public _020A31FC -.public _020A3200 -.public _020A45C8_JP -.public _020B09B0 -.public _020B09C0 -.public _s32_div_f -.public AllocateTemp1024ByteBufferFromPool .public ARM9_UNKNOWN_PTR__NA_20A2C84 .public ARM9_UNKNOWN_TABLE__NA_20A20B0 .public ArrayCopy32 @@ -23,13 +10,24 @@ .public GetBaseForm .public LoadFileFromRom .public LoadM2nAndN2m +.public MONSTER_DATA_TABLE_PTR .public MemAlloc .public MemFree .public MemZero -.public MONSTER_DATA_TABLE_PTR -.public MONSTER_SPRITE_DATA .public RANK_UP_TABLE .public StringFromId +.public UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE +.public UnloadFile +.public _020A20B1 +.public _020A31B8 +.public _020A31D4 +.public _020A31E4 +.public _020A31F4 +.public _020A31FC +.public _020A45C8_JP +.public _020B09B0 +.public _020B09C0 +.public _s32_div_f .public strncpy .public sub_0200302C .public sub_020030FC @@ -48,6 +46,4 @@ .public sub_0200B3C0 .public sub_0200B3D4 .public sub_0200B3FC -.public UnloadFile -.public UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE .public vsprintf diff --git a/asm/include/main_020527E0.inc b/asm/include/main_020527E0.inc new file mode 100644 index 00000000..244f6d40 --- /dev/null +++ b/asm/include/main_020527E0.inc @@ -0,0 +1,4 @@ +#pragma once +.public MONSTER_SPRITE_DATA +.public _020A2D09 +.public _s32_div_f diff --git a/asm/main_02051788.s b/asm/main_02051788.s index 1804dea7..3d61be58 100644 --- a/asm/main_02051788.s +++ b/asm/main_02051788.s @@ -1251,163 +1251,3 @@ GetNameString: ; 0x020526C8 bl StringFromId ldmia sp!, {r3, pc} arm_func_end GetNameString - - arm_func_start GetSpriteIndex__020526EC -GetSpriteIndex__020526EC: ; 0x020526EC - ldr r2, _02052704 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrh r0, [r0, #0x10] - bx lr - .align 2, 0 -_02052704: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetSpriteIndex__020526EC - - arm_func_start GetSpriteIndex__02052708 -GetSpriteIndex__02052708: ; 0x02052708 - ldr r2, _02052720 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrh r0, [r0, #0x10] - bx lr - .align 2, 0 -_02052720: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetSpriteIndex__02052708 - - arm_func_start GetSpriteIndex__02052724 -GetSpriteIndex__02052724: ; 0x02052724 - ldr r2, _0205273C ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrh r0, [r0, #0x10] - bx lr - .align 2, 0 -_0205273C: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetSpriteIndex__02052724 - - arm_func_start GetDexNumber -GetDexNumber: ; 0x02052740 - ldr r2, _02052758 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrsh r0, [r0, #4] - bx lr - .align 2, 0 -_02052758: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetDexNumber - - arm_func_start GetCategoryString -GetCategoryString: ; 0x0205275C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl AllocateTemp1024ByteBufferFromPool - mov r4, r0 - mov r0, r5 - mov r1, #0x258 - bl _s32_div_f -#if defined(EUROPE) - add r0, r1, #0x79 - add r0, r0, #0x2400 -#elif defined(JAPAN) - add r0, r1, #0x1a40 -#else - add r0, r1, #0x77 - add r0, r0, #0x2400 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r2, r0 - ldr r1, _020527A4 ; =_020A3200 - mov r0, r4 - bl SprintfStatic__02052418 - mov r0, r4 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020527A4: .word _020A3200 - arm_func_end GetCategoryString - - arm_func_start GetMonsterGender -GetMonsterGender: ; 0x020527A8 - ldr r2, _020527C0 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrb r0, [r0, #0x12] - bx lr - .align 2, 0 -_020527C0: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetMonsterGender - - arm_func_start GetBodySize -GetBodySize: ; 0x020527C4 - ldr r2, _020527DC ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrb r0, [r0, #0x13] - bx lr - .align 2, 0 -_020527DC: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetBodySize - - arm_func_start GetSpriteSize -GetSpriteSize: ; 0x020527E0 - stmdb sp!, {r3, lr} - mov r1, #0x258 - bl _s32_div_f - mov r0, r1, lsl #0x10 - ldr r2, _02052818 ; =MONSTER_SPRITE_DATA - mov r0, r0, asr #0x10 - ldrb r0, [r2, r0, lsl #1] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - cmp r0, #6 - movls r0, #6 - ldrhib r0, [r2, r1, lsl #1] - ldmia sp!, {r3, pc} - .align 2, 0 -_02052818: .word MONSTER_SPRITE_DATA - arm_func_end GetSpriteSize - - arm_func_start GetSpriteFileSize -GetSpriteFileSize: ; 0x0205281C - stmdb sp!, {r3, lr} - mov r1, #0x258 - bl _s32_div_f - ldr r0, _02052838 ; =_020A2D09 - ldrb r0, [r0, r1, lsl #1] - mov r0, r0, lsl #9 - ldmia sp!, {r3, pc} - .align 2, 0 -_02052838: .word _020A2D09 - arm_func_end GetSpriteFileSize - - arm_func_start GetShadowSize -GetShadowSize: ; 0x0205283C - ldr r2, _02052854 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrb r0, [r0, #0x2e] - bx lr - .align 2, 0 -_02052854: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetShadowSize - - arm_func_start GetSpeedStatus -GetSpeedStatus: ; 0x02052858 - ldr r2, _02052870 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrsh r0, [r0, #6] - bx lr - .align 2, 0 -_02052870: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetSpeedStatus diff --git a/asm/main_020527E0.s b/asm/main_020527E0.s new file mode 100644 index 00000000..315443cb --- /dev/null +++ b/asm/main_020527E0.s @@ -0,0 +1,37 @@ + .include "asm/macros.inc" + .include "main_020527E0.inc" + + .text + + arm_func_start GetSpriteSize +GetSpriteSize: ; 0x020527E0 + stmdb sp!, {r3, lr} + mov r1, #0x258 + bl _s32_div_f + mov r0, r1, lsl #0x10 + ldr r2, _02052818 ; =MONSTER_SPRITE_DATA + mov r0, r0, asr #0x10 + ldrb r0, [r2, r0, lsl #1] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + cmp r0, #6 + movls r0, #6 + ldrhib r0, [r2, r1, lsl #1] + ldmia sp!, {r3, pc} + .align 2, 0 +_02052818: .word MONSTER_SPRITE_DATA + arm_func_end GetSpriteSize + + arm_func_start GetSpriteFileSize +GetSpriteFileSize: ; 0x0205281C + stmdb sp!, {r3, lr} + mov r1, #0x258 + bl _s32_div_f + ldr r0, _02052838 ; =_020A2D09 + ldrb r0, [r0, r1, lsl #1] + mov r0, r0, lsl #9 + ldmia sp!, {r3, pc} + .align 2, 0 +_02052838: .word _020A2D09 + arm_func_end GetSpriteFileSize diff --git a/include/main_020526EC.h b/include/main_020526EC.h new file mode 100644 index 00000000..84b57784 --- /dev/null +++ b/include/main_020526EC.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_MAIN_020526EC_H +#define PMDSKY_MAIN_020526EC_H + +u16 GetSpriteIndex__020526EC(s16 monster_id); +u16 GetSpriteIndex__02052708(s16 monster_id); +u16 GetSpriteIndex__02052724(s16 monster_id); +s16 GetDexNumber(s16 monster_id); + +#endif //PMDSKY_MAIN_020526EC_H diff --git a/include/main_020527A8.h b/include/main_020527A8.h new file mode 100644 index 00000000..86039c78 --- /dev/null +++ b/include/main_020527A8.h @@ -0,0 +1,7 @@ +#ifndef PMDSKY_MAIN_020527A8_H +#define PMDSKY_MAIN_020527A8_H + +u8 GetMonsterGender(s16 monster_id); +u8 GetBodySize(s16 monster_id); + +#endif //PMDSKY_MAIN_020527A8_H diff --git a/include/main_0205283C.h b/include/main_0205283C.h new file mode 100644 index 00000000..fb081eb1 --- /dev/null +++ b/include/main_0205283C.h @@ -0,0 +1,7 @@ +#ifndef PMDSKY_MAIN_0205283C_H +#define PMDSKY_MAIN_0205283C_H + +u8 GetShadowSize(s16 monster_id); +s16 GetSpeedStatus(s16 monster_id); + +#endif //PMDSKY_MAIN_0205283C_H diff --git a/include/monster_data.h b/include/monster_data.h index 4635ebd5..06c59a33 100644 --- a/include/monster_data.h +++ b/include/monster_data.h @@ -8,8 +8,8 @@ extern struct monster_data_table *MONSTER_DATA_TABLE_PTR; struct monster_data_table_entry { u16 entity_id; // 0x0: A entity-unique ID to identify the entity in both of its 2 entries. Seems to match pokedex number. u16 unk_0x2; // 0x2: Unknown. Pokemon with the same category string have the same value in here. - u16 pokedex_number; // 0x4: The national Pokedex number, as displayed in Chimecho Assembly. - u16 base_movement_speed; // 0x6: The base movement speed in dungeons. + s16 pokedex_number; // 0x4: The national Pokedex number, as displayed in Chimecho Assembly. + s16 base_movement_speed; // 0x6: The base movement speed in dungeons. u16 pre_evolution_idx; // 0x8: The pre-evolution of the monster. [Enum?] u16 evolution_method; // 0xA: The evolution method required to evolve to this Pokemon from the pre-evo specified in PreEvoIndex. Null if unused. u16 evolution_param_1; // 0xC: The first parameter for the evolution method. Null if unused. @@ -37,7 +37,7 @@ struct monster_data_table_entry { u16 size; // 0x2A: The size tier for size based damages. s8 unk_0x2c; // 0x2C: Unknown. Most of the time 0xA. s8 unk_0x2d; // 0x2D: Unknown. Most of the time 0xA. - s8 shadow_size; // 0x2E: The size of the Pokemon's shadow. + u8 shadow_size; // 0x2E: The size of the Pokemon's shadow. u8 spawn_asleep_chance; // 0x2F: The percent chance that a Pokemon will spawn asleep. Most of the time 0x8. u8 hp_regeneration; // 0x30: The rate at which a Pokemon regenerates HP. Always 0x64. s8 unk_0x31; // 0x31: Unknown. diff --git a/main.lsf b/main.lsf index 0e1eb4f7..e89bac11 100644 --- a/main.lsf +++ b/main.lsf @@ -65,6 +65,11 @@ Static main Object asm/main_02051504.o Object src/main_02051760.o Object asm/main_02051788.o + Object src/main_020526EC.o + Object asm/get_category_string.o + Object src/main_020527A8.o + Object asm/main_020527E0.o + Object src/main_0205283C.o Object src/main_02052874.o Object asm/main_0205297C.o Object src/main_02054AA4.o diff --git a/src/main_020526EC.c b/src/main_020526EC.c new file mode 100644 index 00000000..d6a4f347 --- /dev/null +++ b/src/main_020526EC.c @@ -0,0 +1,22 @@ +#include "main_020526EC.h" +#include "monster_data.h" + +u16 GetSpriteIndex__020526EC(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].sprite_index; +} + +u16 GetSpriteIndex__02052708(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].sprite_index; +} + +u16 GetSpriteIndex__02052724(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].sprite_index; +} + +s16 GetDexNumber(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].pokedex_number; +} diff --git a/src/main_020527A8.c b/src/main_020527A8.c new file mode 100644 index 00000000..b761569c --- /dev/null +++ b/src/main_020527A8.c @@ -0,0 +1,12 @@ +#include "main_020527A8.h" +#include "monster_data.h" + +u8 GetMonsterGender(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].gender; +} + +u8 GetBodySize(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].body_size; +} diff --git a/src/main_0205283C.c b/src/main_0205283C.c new file mode 100644 index 00000000..515eef61 --- /dev/null +++ b/src/main_0205283C.c @@ -0,0 +1,12 @@ +#include "main_0205283C.h" +#include "monster_data.h" + +u8 GetShadowSize(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].shadow_size; +} + +s16 GetSpeedStatus(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].base_movement_speed; +} diff --git a/src/main_02054BE0.c b/src/main_02054BE0.c index 40f98942..e2f5291e 100644 --- a/src/main_02054BE0.c +++ b/src/main_02054BE0.c @@ -1,4 +1,5 @@ #include "main_02054BE0.h" +#include "main_020527A8.h" #include "enums.h" #include "util.h" @@ -7,11 +8,9 @@ bool8 IsDeoxys(s16 monster_id) return (u16)(s16)(monster_id - MONSTER_DEOXYS_NORMAL) <= 3; } -extern s16 GetMonsterGender(s16 monster_id); - s16 GetSecondFormIfValid(s16 id) { - s16 ret = GetMonsterGender(id); + u8 ret = GetMonsterGender(id); if (ret == 1) { if (GetMonsterGender(id + MONSTER_GENDER_ID_OFFSET) == 2) @@ -22,10 +21,10 @@ s16 GetSecondFormIfValid(s16 id) s16 FemaleToMaleForm(s16 monster_id) { - s16 gender = GetMonsterGender(monster_id); + u8 gender = GetMonsterGender(monster_id); if (gender == 2 && monster_id >= MONSTER_GENDER_ID_OFFSET) { - s16 gender = GetMonsterGender(monster_id - MONSTER_GENDER_ID_OFFSET); + u8 gender = GetMonsterGender(monster_id - MONSTER_GENDER_ID_OFFSET); if (gender == 1) { return monster_id - MONSTER_GENDER_ID_OFFSET; diff --git a/src/main_02054DC4.c b/src/main_02054DC4.c index 93d58093..6490ac63 100644 --- a/src/main_02054DC4.c +++ b/src/main_02054DC4.c @@ -1,10 +1,10 @@ #include "main_02054DC4.h" #include "util.h" +#include "main_020526EC.h" #include "main_02054AA4.h" #include "main_02054BE0.h" extern s16 GetBaseFormCastformDeoxysCherrim(s16 monster_id); -extern s16 GetDexNumber(s16 monster_id); bool32 DexNumbersEqual(s16 monster1, s16 monster2) { s16 base_form_1 = FemaleToMaleForm(monster1); From 91fc06a840474c9d1a75c845845100e21a04f489 Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Tue, 12 Aug 2025 20:45:44 -0600 Subject: [PATCH 36/40] Merge two c files --- include/main_0205283C.h | 11 ++++++++++ include/main_02052874.h | 16 -------------- main.lsf | 1 - src/dungeon_action.c | 2 +- src/dungeon_ai.c | 2 +- src/dungeon_ai_item_weight.c | 2 +- src/dungeon_logic_2.c | 2 +- src/dungeon_mobility.c | 2 +- src/main_0205283C.c | 40 ++++++++++++++++++++++++++++++++++ src/main_02052874.c | 42 ------------------------------------ 10 files changed, 56 insertions(+), 64 deletions(-) delete mode 100644 include/main_02052874.h delete mode 100644 src/main_02052874.c diff --git a/include/main_0205283C.h b/include/main_0205283C.h index fb081eb1..cf0b698f 100644 --- a/include/main_0205283C.h +++ b/include/main_0205283C.h @@ -1,7 +1,18 @@ #ifndef PMDSKY_MAIN_0205283C_H #define PMDSKY_MAIN_0205283C_H +#include "enums.h" +#include "util.h" + u8 GetShadowSize(s16 monster_id); s16 GetSpeedStatus(s16 monster_id); +enum mobility_type GetMobilityType(s16 monster_id); +u8 GetRegenSpeed(s16 monster_id); +bool8 GetCanMoveFlag(s16 monster_id); +u8 GetChanceAsleep(s16 monster_id); +u16 GetWeightMultiplier(s16 monster_id); +u16 GetSize(s16 monster_id); +u16 GetBaseHp(s16 monster_id); +bool8 CanThrowItems(s16 monster_id); #endif //PMDSKY_MAIN_0205283C_H diff --git a/include/main_02052874.h b/include/main_02052874.h deleted file mode 100644 index cecb8825..00000000 --- a/include/main_02052874.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef PMDSKY_MAIN_02052874_H -#define PMDSKY_MAIN_02052874_H - -#include "enums.h" -#include "util.h" - -enum mobility_type GetMobilityType(s16 monster_id); -u8 GetRegenSpeed(s16 monster_id); -bool8 GetCanMoveFlag(s16 monster_id); -u8 GetChanceAsleep(s16 monster_id); -u16 GetWeightMultiplier(s16 monster_id); -u16 GetSize(s16 monster_id); -u16 GetBaseHp(s16 monster_id); -bool8 CanThrowItems(s16 monster_id); - -#endif //PMDSKY_MAIN_02052874_H diff --git a/main.lsf b/main.lsf index e89bac11..15619cb7 100644 --- a/main.lsf +++ b/main.lsf @@ -70,7 +70,6 @@ Static main Object src/main_020527A8.o Object asm/main_020527E0.o Object src/main_0205283C.o - Object src/main_02052874.o Object asm/main_0205297C.o Object src/main_02054AA4.o Object asm/main_02054AD4.o diff --git a/src/dungeon_action.c b/src/dungeon_action.c index 6351673d..273f81dc 100644 --- a/src/dungeon_action.c +++ b/src/dungeon_action.c @@ -1,5 +1,5 @@ #include "dungeon_action.h" -#include "main_02052874.h" +#include "main_0205283C.h" void ClearMonsterActionFields(struct action_data *monster_action) { diff --git a/src/dungeon_ai.c b/src/dungeon_ai.c index f5b827c5..f72325f8 100644 --- a/src/dungeon_ai.c +++ b/src/dungeon_ai.c @@ -10,7 +10,7 @@ #include "dungeon_util_static.h" #include "dungeon_util.h" #include "dungeon_visibility.h" -#include "main_02052874.h" +#include "main_0205283C.h" #include "overlay_29_022FB538.h" #include "status_checks.h" #include "targeting.h" diff --git a/src/dungeon_ai_item_weight.c b/src/dungeon_ai_item_weight.c index 8624060f..9c04afdd 100644 --- a/src/dungeon_ai_item_weight.c +++ b/src/dungeon_ai_item_weight.c @@ -6,7 +6,7 @@ #include "dungeon_statuses.h" #include "dungeon_util.h" #include "dungeon_util_static.h" -#include "main_02052874.h" +#include "main_0205283C.h" #include "main_02054BE0.h" #include "number_util.h" #include "overlay_29_0231E9F0.h" diff --git a/src/dungeon_logic_2.c b/src/dungeon_logic_2.c index abee525c..1583f47f 100644 --- a/src/dungeon_logic_2.c +++ b/src/dungeon_logic_2.c @@ -1,5 +1,5 @@ #include "dungeon_logic_2.h" -#include "main_02052874.h" +#include "main_0205283C.h" bool8 MonsterCanThrowItems(struct monster *monster) { diff --git a/src/dungeon_mobility.c b/src/dungeon_mobility.c index 354aa29a..286731a4 100644 --- a/src/dungeon_mobility.c +++ b/src/dungeon_mobility.c @@ -1,6 +1,6 @@ #include "dungeon_mobility.h" #include "dungeon_util_static.h" -#include "main_02052874.h" +#include "main_0205283C.h" #include "overlay_29_02318A4C.h" extern enum mobility_type MOBILITY_TYPE_TO_DUNGEON_MOBILITY_TYPE[NUM_MOBILITY_TYPES]; diff --git a/src/main_0205283C.c b/src/main_0205283C.c index 515eef61..345f37a6 100644 --- a/src/main_0205283C.c +++ b/src/main_0205283C.c @@ -10,3 +10,43 @@ s16 GetSpeedStatus(s16 monster_id) { return MONSTER_DATA_TABLE_PTR->entries[monster_id].base_movement_speed; } + +enum mobility_type GetMobilityType(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].movement_type; +} + +u8 GetRegenSpeed(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].hp_regeneration << 1; +} + +bool8 GetCanMoveFlag(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].flags & 0b00010000 ? TRUE : FALSE; +} + +u8 GetChanceAsleep(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].spawn_asleep_chance; +} + +u16 GetWeightMultiplier(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].weight; +} + +u16 GetSize(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].size; +} + +u16 GetBaseHp(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].base_hp; +} + +bool8 CanThrowItems(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].flags & 0b00100000 ? TRUE : FALSE; +} diff --git a/src/main_02052874.c b/src/main_02052874.c deleted file mode 100644 index 76aa32aa..00000000 --- a/src/main_02052874.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "main_02052874.h" -#include "monster_data.h" - -enum mobility_type GetMobilityType(s16 monster_id) -{ - return MONSTER_DATA_TABLE_PTR->entries[monster_id].movement_type; -} - -u8 GetRegenSpeed(s16 monster_id) -{ - return MONSTER_DATA_TABLE_PTR->entries[monster_id].hp_regeneration << 1; -} - -bool8 GetCanMoveFlag(s16 monster_id) -{ - return MONSTER_DATA_TABLE_PTR->entries[monster_id].flags & 0b00010000 ? TRUE : FALSE; -} - -u8 GetChanceAsleep(s16 monster_id) -{ - return MONSTER_DATA_TABLE_PTR->entries[monster_id].spawn_asleep_chance; -} - -u16 GetWeightMultiplier(s16 monster_id) -{ - return MONSTER_DATA_TABLE_PTR->entries[monster_id].weight; -} - -u16 GetSize(s16 monster_id) -{ - return MONSTER_DATA_TABLE_PTR->entries[monster_id].size; -} - -u16 GetBaseHp(s16 monster_id) -{ - return MONSTER_DATA_TABLE_PTR->entries[monster_id].base_hp; -} - -bool8 CanThrowItems(s16 monster_id) -{ - return MONSTER_DATA_TABLE_PTR->entries[monster_id].flags & 0b00100000 ? TRUE : FALSE; -} From f686cb3abae0dfdbe6abd5dc3bc023191f4bf637 Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Tue, 12 Aug 2025 21:22:01 -0600 Subject: [PATCH 37/40] monster.md functions batch 3 That should be the rest of the functions that have the simple logic. --- .../{main_0205297C.inc => main_02052A7C.inc} | 107 +++++++++--------- asm/{main_0205297C.s => main_02052A7C.s} | 106 +---------------- include/main_0205283C.h | 8 ++ include/monster_data.h | 14 +-- main.lsf | 2 +- src/main_0205283C.c | 40 +++++++ 6 files changed, 110 insertions(+), 167 deletions(-) rename asm/include/{main_0205297C.inc => main_02052A7C.inc} (95%) rename asm/{main_0205297C.s => main_02052A7C.s} (95%) diff --git a/asm/include/main_0205297C.inc b/asm/include/main_02052A7C.inc similarity index 95% rename from asm/include/main_0205297C.inc rename to asm/include/main_02052A7C.inc index cea97cca..21794d85 100644 --- a/asm/include/main_0205297C.inc +++ b/asm/include/main_02052A7C.inc @@ -1,4 +1,59 @@ #pragma once +.public Debug_Print0 +.public DecompressAtNormalVeneer +.public DexNumbersEqual +.public DirectoryFileMngr_OpenDirectoryFile +.public DungeonToGroundMoveset +.public EnableAllLearnableIqSkills +.public FORBIDDEN_FORGOT_MOVE_LIST +.public FemaleToMaleForm +.public GetBaseDefensiveStat +.public GetBaseHp +.public GetBaseOffensiveStat +.public GetDexNumber +.public GetInfoGroundMoveset +.public GetInfoMoveGround +.public GetKeyM2NSwitch +.public GetKeyN2MSwitch +.public GetLanguage +.public GetMonsterGender +.public GetMonsterPreEvolution +.public GetMovesetEggPtr +.public GetMovesetHmTmPtr +.public GetMovesetIdx__02013CAC +.public GetMovesetLevelUpPtr +.public GetNameRaw +.public GetNameString +.public GetNbMoves +.public GetSpriteSize +.public GroundToDungeonMoveset +.public HIDDEN_POWER_BASE_POWER_TABLE +.public HandleSir0Translation +.public IsShaymin +.public IsValidTeamMember +.public ItemZInit +.public LEVEL_UP_DATA_DECOMPRESS_BUFFER +.public LEVEL_UP_DATA_MONSTER_ID +.public LoadFileFromRom +.public LoadMonsterMd +.public MONSTER_DATA_TABLE_PTR +.public MemAlloc +.public MemFree +.public PointsToZero +.public Rand16Bit +.public RandIntSafe +.public RemoveActiveMembersFromAllTeams +.public RemoveActiveMembersFromRescueTeam +.public RemoveActiveMembersFromSpecialEpisodeTeam +.public SprintfStatic__02052418 +.public StrcpyName +.public StrncmpSimple +.public StrncpyName +.public StrncpySimple +.public TEAM_MEMBER_TABLE +.public TEAM_MEMBER_TABLE_PTR +.public UnloadFile +.public ZInit8 .public _020A1880 .public _020A1884 .public _020A189C @@ -17,54 +72,6 @@ .public _020B12F4_EU .public _020B1308_EU .public _s32_div_f -.public Debug_Print0 -.public DecompressAtNormalVeneer -.public DexNumbersEqual -.public DirectoryFileMngr_OpenDirectoryFile -.public DungeonToGroundMoveset -.public EnableAllLearnableIqSkills -.public FemaleToMaleForm -.public FORBIDDEN_FORGOT_MOVE_LIST -.public GetBaseHp -.public GetDexNumber -.public GetInfoGroundMoveset -.public GetInfoMoveGround -.public GetKeyM2NSwitch -.public GetKeyN2MSwitch -.public GetLanguage -.public GetMonsterGender -.public GetMovesetEggPtr -.public GetMovesetHmTmPtr -.public GetMovesetIdx__02013CAC -.public GetMovesetLevelUpPtr -.public GetNameRaw -.public GetNameString -.public GetNbMoves -.public GetSpriteSize -.public GroundToDungeonMoveset -.public HandleSir0Translation -.public HIDDEN_POWER_BASE_POWER_TABLE -.public IsShaymin -.public IsValidTeamMember -.public ItemZInit -.public LEVEL_UP_DATA_DECOMPRESS_BUFFER -.public LEVEL_UP_DATA_MONSTER_ID -.public LoadFileFromRom -.public LoadMonsterMd -.public MemAlloc -.public MemFree -.public MONSTER_DATA_TABLE_PTR -.public PointsToZero -.public Rand16Bit -.public RandIntSafe -.public RemoveActiveMembersFromAllTeams -.public RemoveActiveMembersFromRescueTeam -.public RemoveActiveMembersFromSpecialEpisodeTeam -.public SprintfStatic__02052418 -.public StrcpyName -.public StrncmpSimple -.public StrncpyName -.public StrncpySimple .public sub_01FF8F28 .public sub_02015090 .public sub_02025304_JP @@ -78,8 +85,4 @@ .public sub_020560B8 .public sub_020564B0 .public sub_02056504 -.public TEAM_MEMBER_TABLE -.public TEAM_MEMBER_TABLE_PTR -.public UnloadFile .public vsprintf -.public ZInit8 diff --git a/asm/main_0205297C.s b/asm/main_02052A7C.s similarity index 95% rename from asm/main_0205297C.s rename to asm/main_02052A7C.s index da9d6c16..9bb25301 100644 --- a/asm/main_0205297C.s +++ b/asm/main_02052A7C.s @@ -1,112 +1,8 @@ .include "asm/macros.inc" - .include "main_0205297C.inc" + .include "main_02052A7C.inc" .text - arm_func_start CanEvolve -CanEvolve: ; 0x0205297C - ldr r2, _020529A4 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrb r0, [r0, #0x1a] - tst r0, #0x40 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_020529A4: .word MONSTER_DATA_TABLE_PTR - arm_func_end CanEvolve - - arm_func_start GetMonsterPreEvolution -GetMonsterPreEvolution: ; 0x020529A8 - ldr r2, _020529C0 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrsh r0, [r0, #8] - bx lr - .align 2, 0 -_020529C0: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetMonsterPreEvolution - - arm_func_start GetBaseOffensiveStat -GetBaseOffensiveStat: ; 0x020529C4 - ldr r3, _020529E0 ; =MONSTER_DATA_TABLE_PTR - mov r2, #0x44 - ldr r3, [r3] - smlabb r0, r0, r2, r3 - add r0, r0, r1 - ldrb r0, [r0, #0x24] - bx lr - .align 2, 0 -_020529E0: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetBaseOffensiveStat - - arm_func_start GetBaseDefensiveStat -GetBaseDefensiveStat: ; 0x020529E4 - ldr r3, _02052A00 ; =MONSTER_DATA_TABLE_PTR - mov r2, #0x44 - ldr r3, [r3] - smlabb r0, r0, r2, r3 - add r0, r0, r1 - ldrb r0, [r0, #0x26] - bx lr - .align 2, 0 -_02052A00: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetBaseDefensiveStat - - arm_func_start GetType -GetType: ; 0x02052A04 - ldr r3, _02052A20 ; =MONSTER_DATA_TABLE_PTR - mov r2, #0x44 - ldr r3, [r3] - smlabb r0, r0, r2, r3 - add r0, r0, r1 - ldrb r0, [r0, #0x14] - bx lr - .align 2, 0 -_02052A20: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetType - - arm_func_start GetAbility -GetAbility: ; 0x02052A24 - ldr r3, _02052A40 ; =MONSTER_DATA_TABLE_PTR - mov r2, #0x44 - ldr r3, [r3] - smlabb r0, r0, r2, r3 - add r0, r0, r1 - ldrb r0, [r0, #0x18] - bx lr - .align 2, 0 -_02052A40: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetAbility - - arm_func_start GetRecruitRate2 -GetRecruitRate2: ; 0x02052A44 - ldr r2, _02052A5C ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrsh r0, [r0, #0x22] - bx lr - .align 2, 0 -_02052A5C: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetRecruitRate2 - - arm_func_start GetRecruitRate1 -GetRecruitRate1: ; 0x02052A60 - ldr r2, _02052A78 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrsh r0, [r0, #0x1e] - bx lr - .align 2, 0 -_02052A78: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetRecruitRate1 - arm_func_start GetExp GetExp: ; 0x02052A7C stmdb sp!, {r4, lr} diff --git a/include/main_0205283C.h b/include/main_0205283C.h index cf0b698f..ef9f1c4d 100644 --- a/include/main_0205283C.h +++ b/include/main_0205283C.h @@ -14,5 +14,13 @@ u16 GetWeightMultiplier(s16 monster_id); u16 GetSize(s16 monster_id); u16 GetBaseHp(s16 monster_id); bool8 CanThrowItems(s16 monster_id); +bool8 CanEvolve(s16 monster_id); +s16 GetMonsterPreEvolution(s16 monster_id); +u8 GetBaseOffensiveStat(s16 monster_id, u8 stat_idx); +u8 GetBaseDefensiveStat(s16 monster_id, u8 stat_idx); +u8 GetType(s16 monster_id, u8 type_idx); +u8 GetAbility(s16 monster_id, u8 ability_idx); +s16 GetRecruitRate2(s16 monster_id); +s16 GetRecruitRate1(s16 monster_id); #endif //PMDSKY_MAIN_0205283C_H diff --git a/include/monster_data.h b/include/monster_data.h index 06c59a33..ab4aabd2 100644 --- a/include/monster_data.h +++ b/include/monster_data.h @@ -10,29 +10,25 @@ struct monster_data_table_entry { u16 unk_0x2; // 0x2: Unknown. Pokemon with the same category string have the same value in here. s16 pokedex_number; // 0x4: The national Pokedex number, as displayed in Chimecho Assembly. s16 base_movement_speed; // 0x6: The base movement speed in dungeons. - u16 pre_evolution_idx; // 0x8: The pre-evolution of the monster. [Enum?] + s16 pre_evolution_idx; // 0x8: The pre-evolution of the monster. [Enum?] u16 evolution_method; // 0xA: The evolution method required to evolve to this Pokemon from the pre-evo specified in PreEvoIndex. Null if unused. u16 evolution_param_1; // 0xC: The first parameter for the evolution method. Null if unused. u16 evolution_param_2; // 0xE: The second parameter for the evolution method. Null if unused. u16 sprite_index; // 0x10: The index of the entity's sprite. It's the index inside the three Pokemon sprite files inside the "/MONSTER/" directory! u8 gender; // 0x12: Gender of this particular entity entry. [Enum?] u8 body_size; // 0x13: The body size of the Pokemon. Used when determining how many Pokemon fits in the party. - u8 primary_type; // 0x14: The Pokemon's primary type. [Enum?] - u8 secondary_type; // 0x15: The Pokemon's secondary type. [Enum?] + u8 types[2]; // 0x14: The Pokemon's types. [Enum?] enum mobility_type movement_type; // 0x16: This decides what terrains the entity can move over, and whether its hovering or not. u8 iq_group; // 0x17: The IQ group the Pokemon belongs to. [Enum?] - u8 primary_ability; // 0x18: The Pokemon's primary ability's ID. [Enum?] - u8 secondary_ability; // 0x19: The Pokemon's secondary ability's ID. [Enum?] + u8 abilities[2]; // 0x18: The Pokemon's abilities. [Enum?] u8 flags; // 0x1A: Stores bitflags. Bits 0-3: Unknown. Bit 4: If false, the Pokemon can't move inside of dungeons. Bit 5: If false, the Pokemon can't throw items. Bit 6: If false, the Pokemon can't evolve at Luminous Spring, even if it has an evolution. Bit 7: If true, the Pokemon requires a special item to spawn. u8 unk_0x1b; // 0x1B: Unknown. Possibly more flags? u16 exp_yield; // 0x1C: The Exp yield. s16 recruit_rate_1; // 0x1E: Another recruit rate, this one is usually closer to 0 when RecruitRate1 and RecruitRate2 are different! u16 base_hp; // 0x20: The HP the Pokemon has at lvl 1. s16 recruit_rate_2; // 0x22: Recruit rate. - s8 base_atk; // 0x24: The attack stat of the Pokemon at lvl 1. - s8 base_sp_atk; // 0x25: The special attack stat of the Pokemon at lvl 1. - s8 base_def; // 0x26: The defense stat of the pokemon at lvl 1. - s8 base_sp_def; // 0x27: The base special defense of the pokemon at lvl 1. + u8 base_atk[2]; // 0x24: The attack stat of the Pokemon at lvl 1, followed by the special attack stat of the Pokemon at lvl 1. + u8 base_def[2]; // 0x26: The defense stat of the Pokemon at lvl 1, followed by the special defense stat of the Pokemon at lvl 1. u16 weight; // 0x28: The weight tier for weight based damages. u16 size; // 0x2A: The size tier for size based damages. s8 unk_0x2c; // 0x2C: Unknown. Most of the time 0xA. diff --git a/main.lsf b/main.lsf index 15619cb7..c96a246a 100644 --- a/main.lsf +++ b/main.lsf @@ -70,7 +70,7 @@ Static main Object src/main_020527A8.o Object asm/main_020527E0.o Object src/main_0205283C.o - Object asm/main_0205297C.o + Object asm/main_02052A7C.o Object src/main_02054AA4.o Object asm/main_02054AD4.o Object src/main_02054BE0.o diff --git a/src/main_0205283C.c b/src/main_0205283C.c index 345f37a6..4a340a76 100644 --- a/src/main_0205283C.c +++ b/src/main_0205283C.c @@ -50,3 +50,43 @@ bool8 CanThrowItems(s16 monster_id) { return MONSTER_DATA_TABLE_PTR->entries[monster_id].flags & 0b00100000 ? TRUE : FALSE; } + +bool8 CanEvolve(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].flags & 0b01000000 ? TRUE : FALSE; +} + +s16 GetMonsterPreEvolution(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].pre_evolution_idx; +} + +u8 GetBaseOffensiveStat(s16 monster_id, u8 stat_idx) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].base_atk[stat_idx]; +} + +u8 GetBaseDefensiveStat(s16 monster_id, u8 stat_idx) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].base_def[stat_idx]; +} + +u8 GetType(s16 monster_id, u8 type_idx) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].types[type_idx]; +} + +u8 GetAbility(s16 monster_id, u8 ability_idx) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].abilities[ability_idx]; +} + +s16 GetRecruitRate2(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].recruit_rate_2; +} + +s16 GetRecruitRate1(s16 monster_id) +{ + return MONSTER_DATA_TABLE_PTR->entries[monster_id].recruit_rate_1; +} From cafd43d7faf9f1b56ff70885e35c07a7720ebf1f Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Tue, 12 Aug 2025 21:33:32 -0600 Subject: [PATCH 38/40] Use enums for types/abilities --- include/main_0205283C.h | 4 ++-- include/monster_data.h | 18 +++++++++--------- src/main_0205283C.c | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/main_0205283C.h b/include/main_0205283C.h index ef9f1c4d..d639329a 100644 --- a/include/main_0205283C.h +++ b/include/main_0205283C.h @@ -18,8 +18,8 @@ bool8 CanEvolve(s16 monster_id); s16 GetMonsterPreEvolution(s16 monster_id); u8 GetBaseOffensiveStat(s16 monster_id, u8 stat_idx); u8 GetBaseDefensiveStat(s16 monster_id, u8 stat_idx); -u8 GetType(s16 monster_id, u8 type_idx); -u8 GetAbility(s16 monster_id, u8 ability_idx); +enum type_id GetType(s16 monster_id, u8 type_idx); +enum ability_id GetAbility(s16 monster_id, u8 ability_idx); s16 GetRecruitRate2(s16 monster_id); s16 GetRecruitRate1(s16 monster_id); diff --git a/include/monster_data.h b/include/monster_data.h index ab4aabd2..eddf2c9c 100644 --- a/include/monster_data.h +++ b/include/monster_data.h @@ -10,17 +10,17 @@ struct monster_data_table_entry { u16 unk_0x2; // 0x2: Unknown. Pokemon with the same category string have the same value in here. s16 pokedex_number; // 0x4: The national Pokedex number, as displayed in Chimecho Assembly. s16 base_movement_speed; // 0x6: The base movement speed in dungeons. - s16 pre_evolution_idx; // 0x8: The pre-evolution of the monster. [Enum?] + s16 pre_evolution_idx; // 0x8: The pre-evolution of the monster. u16 evolution_method; // 0xA: The evolution method required to evolve to this Pokemon from the pre-evo specified in PreEvoIndex. Null if unused. u16 evolution_param_1; // 0xC: The first parameter for the evolution method. Null if unused. u16 evolution_param_2; // 0xE: The second parameter for the evolution method. Null if unused. u16 sprite_index; // 0x10: The index of the entity's sprite. It's the index inside the three Pokemon sprite files inside the "/MONSTER/" directory! - u8 gender; // 0x12: Gender of this particular entity entry. [Enum?] + u8 gender; // 0x12: Gender of this particular entity entry. u8 body_size; // 0x13: The body size of the Pokemon. Used when determining how many Pokemon fits in the party. - u8 types[2]; // 0x14: The Pokemon's types. [Enum?] + enum type_id types[2]; // 0x14: The Pokemon's types. enum mobility_type movement_type; // 0x16: This decides what terrains the entity can move over, and whether its hovering or not. - u8 iq_group; // 0x17: The IQ group the Pokemon belongs to. [Enum?] - u8 abilities[2]; // 0x18: The Pokemon's abilities. [Enum?] + u8 iq_group; // 0x17: The IQ group the Pokemon belongs to. + enum ability_id abilities[2]; // 0x18: The Pokemon's abilities. u8 flags; // 0x1A: Stores bitflags. Bits 0-3: Unknown. Bit 4: If false, the Pokemon can't move inside of dungeons. Bit 5: If false, the Pokemon can't throw items. Bit 6: If false, the Pokemon can't evolve at Luminous Spring, even if it has an evolution. Bit 7: If true, the Pokemon requires a special item to spawn. u8 unk_0x1b; // 0x1B: Unknown. Possibly more flags? u16 exp_yield; // 0x1C: The Exp yield. @@ -38,10 +38,10 @@ struct monster_data_table_entry { u8 hp_regeneration; // 0x30: The rate at which a Pokemon regenerates HP. Always 0x64. s8 unk_0x31; // 0x31: Unknown. s16 base_form_idx; // 0x32: The base evolutionary stage of the Pokemon. Seems to always be between 0 and 600. - s16 exclusive_item_1; // 0x34: The first 1-star exclusive item for this Pokemon. Null if NA. [Enum?] - s16 exclusive_item_2; // 0x36: The second 1-star exclusive item for this Pokemon. Null if NA. [Enum?] - s16 exclusive_item_3; // 0x38: The 2-star exclusive item for this Pokemon. Null if NA. [Enum?] - s16 exclusive_item_4; // 0x3A: The 3-star exclusive item for this Pokemon. Null if NA. [Enum?] + s16 exclusive_item_1; // 0x34: The first 1-star exclusive item for this Pokemon. Null if NA. + s16 exclusive_item_2; // 0x36: The second 1-star exclusive item for this Pokemon. Null if NA. + s16 exclusive_item_3; // 0x38: The 2-star exclusive item for this Pokemon. Null if NA. + s16 exclusive_item_4; // 0x3A: The 3-star exclusive item for this Pokemon. Null if NA. s16 unk_0x3c; // 0x3C: Unknown. s16 unk_0x3e; // 0x3E: Unknown. Often 0xF. s16 unk_0x40; // 0x40: Unknown. diff --git a/src/main_0205283C.c b/src/main_0205283C.c index 4a340a76..3bf1ef39 100644 --- a/src/main_0205283C.c +++ b/src/main_0205283C.c @@ -71,12 +71,12 @@ u8 GetBaseDefensiveStat(s16 monster_id, u8 stat_idx) return MONSTER_DATA_TABLE_PTR->entries[monster_id].base_def[stat_idx]; } -u8 GetType(s16 monster_id, u8 type_idx) +enum type_id GetType(s16 monster_id, u8 type_idx) { return MONSTER_DATA_TABLE_PTR->entries[monster_id].types[type_idx]; } -u8 GetAbility(s16 monster_id, u8 ability_idx) +enum ability_id GetAbility(s16 monster_id, u8 ability_idx) { return MONSTER_DATA_TABLE_PTR->entries[monster_id].abilities[ability_idx]; } From 8fc12852841a850c9fda1a5fcbeb12df5ed06023 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 13 Aug 2025 17:44:38 -0400 Subject: [PATCH 39/40] Synced from pmdsky-debug --- asm/include/get_category_string.inc | 4 +-- asm/include/main_0200EB30.inc | 2 +- asm/include/main_02010FC4.inc | 2 +- asm/include/main_02051788.inc | 26 +++++++-------- asm/include/main_020527E0.inc | 2 +- asm/include/main_02052A7C.inc | 50 ++++++++++++++--------------- asm/include/main_02054E4C.inc | 44 ++++++++++++------------- asm/include/overlay_11.inc | 4 +-- asm/include/overlay_24.inc | 2 +- asm/include/overlay_26.inc | 2 +- asm/main_0200EB30.s | 10 +++--- asm/main_02010FC4.s | 18 +++++------ asm/main_02058F24.s | 6 ++-- asm/main_020897DC.s | 4 +-- asm/overlay_11.s | 12 +++---- asm/overlay_24.s | 2 +- asm/overlay_26.s | 6 ++-- asm/overlay_29_02333FD0.s | 12 +++---- 18 files changed, 104 insertions(+), 104 deletions(-) diff --git a/asm/include/get_category_string.inc b/asm/include/get_category_string.inc index 564d02af..45cd5215 100644 --- a/asm/include/get_category_string.inc +++ b/asm/include/get_category_string.inc @@ -1,6 +1,6 @@ #pragma once +.public _020A3200 +.public _s32_div_f .public AllocateTemp1024ByteBufferFromPool .public SprintfStatic__02052418 .public StringFromId -.public _020A3200 -.public _s32_div_f diff --git a/asm/include/main_0200EB30.inc b/asm/include/main_0200EB30.inc index b23d63ea..9f841db6 100644 --- a/asm/include/main_0200EB30.inc +++ b/asm/include/main_0200EB30.inc @@ -1,5 +1,5 @@ #pragma once -.public ARM9_UNKNOWN_TABLE__NA_2097FF8 +.public BABY_EXCLUSIVE_ITEM_PAIRS .public BAG_ITEMS_PTR_MIRROR .public IsItemValid .public ITEM_DATA_TABLE_PTRS diff --git a/asm/include/main_02010FC4.inc b/asm/include/main_02010FC4.inc index 9e7bd2dc..fc07ff54 100644 --- a/asm/include/main_02010FC4.inc +++ b/asm/include/main_02010FC4.inc @@ -85,6 +85,7 @@ .public RemoveEmptyItemsInBag .public RemoveItem .public RemoveItemAtIdxInStorage +.public ReturnEggExclusiveItem .public SaveScriptVariableValue .public SelectWaza .public SetExclusiveItemEffect @@ -92,7 +93,6 @@ .public SITRUS_BERRY_FULL_HP_BOOST .public StringFromId .public sub_0200D1F0 -.public sub_0200EB90 .public sub_02010044 .public sub_0201007C .public sub_02050974 diff --git a/asm/include/main_02051788.inc b/asm/include/main_02051788.inc index 71f8d757..62d165d9 100644 --- a/asm/include/main_02051788.inc +++ b/asm/include/main_02051788.inc @@ -1,4 +1,14 @@ #pragma once +.public _020A20B1 +.public _020A31B8 +.public _020A31D4 +.public _020A31E4 +.public _020A31F4 +.public _020A31FC +.public _020A45C8_JP +.public _020B09B0 +.public _020B09C0 +.public _s32_div_f .public ARM9_UNKNOWN_PTR__NA_20A2C84 .public ARM9_UNKNOWN_TABLE__NA_20A20B0 .public ArrayCopy32 @@ -10,24 +20,12 @@ .public GetBaseForm .public LoadFileFromRom .public LoadM2nAndN2m -.public MONSTER_DATA_TABLE_PTR .public MemAlloc .public MemFree .public MemZero +.public MONSTER_DATA_TABLE_PTR .public RANK_UP_TABLE .public StringFromId -.public UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE -.public UnloadFile -.public _020A20B1 -.public _020A31B8 -.public _020A31D4 -.public _020A31E4 -.public _020A31F4 -.public _020A31FC -.public _020A45C8_JP -.public _020B09B0 -.public _020B09C0 -.public _s32_div_f .public strncpy .public sub_0200302C .public sub_020030FC @@ -46,4 +44,6 @@ .public sub_0200B3C0 .public sub_0200B3D4 .public sub_0200B3FC +.public UnloadFile +.public UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE .public vsprintf diff --git a/asm/include/main_020527E0.inc b/asm/include/main_020527E0.inc index 244f6d40..f2690b2e 100644 --- a/asm/include/main_020527E0.inc +++ b/asm/include/main_020527E0.inc @@ -1,4 +1,4 @@ #pragma once -.public MONSTER_SPRITE_DATA .public _020A2D09 .public _s32_div_f +.public MONSTER_SPRITE_DATA diff --git a/asm/include/main_02052A7C.inc b/asm/include/main_02052A7C.inc index 21794d85..213ac5de 100644 --- a/asm/include/main_02052A7C.inc +++ b/asm/include/main_02052A7C.inc @@ -1,12 +1,30 @@ #pragma once +.public _020A1880 +.public _020A1884 +.public _020A189C +.public _020A18C0 +.public _020A3210 +.public _020A322C +.public _020A3248 +.public _020A3258 +.public _020A327C +.public _020A328C +.public _020A32D4 +.public _020A32F8 +.public _020A3330 +.public _020B09C8 +.public _020B09D0 +.public _020B12F4_EU +.public _020B1308_EU +.public _s32_div_f .public Debug_Print0 .public DecompressAtNormalVeneer .public DexNumbersEqual .public DirectoryFileMngr_OpenDirectoryFile .public DungeonToGroundMoveset .public EnableAllLearnableIqSkills -.public FORBIDDEN_FORGOT_MOVE_LIST .public FemaleToMaleForm +.public FORBIDDEN_FORGOT_MOVE_LIST .public GetBaseDefensiveStat .public GetBaseHp .public GetBaseOffensiveStat @@ -27,8 +45,8 @@ .public GetNbMoves .public GetSpriteSize .public GroundToDungeonMoveset -.public HIDDEN_POWER_BASE_POWER_TABLE .public HandleSir0Translation +.public HIDDEN_POWER_BASE_POWER_TABLE .public IsShaymin .public IsValidTeamMember .public ItemZInit @@ -36,9 +54,9 @@ .public LEVEL_UP_DATA_MONSTER_ID .public LoadFileFromRom .public LoadMonsterMd -.public MONSTER_DATA_TABLE_PTR .public MemAlloc .public MemFree +.public MONSTER_DATA_TABLE_PTR .public PointsToZero .public Rand16Bit .public RandIntSafe @@ -50,28 +68,6 @@ .public StrncmpSimple .public StrncpyName .public StrncpySimple -.public TEAM_MEMBER_TABLE -.public TEAM_MEMBER_TABLE_PTR -.public UnloadFile -.public ZInit8 -.public _020A1880 -.public _020A1884 -.public _020A189C -.public _020A18C0 -.public _020A3210 -.public _020A322C -.public _020A3248 -.public _020A3258 -.public _020A327C -.public _020A328C -.public _020A32D4 -.public _020A32F8 -.public _020A3330 -.public _020B09C8 -.public _020B09D0 -.public _020B12F4_EU -.public _020B1308_EU -.public _s32_div_f .public sub_01FF8F28 .public sub_02015090 .public sub_02025304_JP @@ -85,4 +81,8 @@ .public sub_020560B8 .public sub_020564B0 .public sub_02056504 +.public TEAM_MEMBER_TABLE +.public TEAM_MEMBER_TABLE_PTR +.public UnloadFile .public vsprintf +.public ZInit8 diff --git a/asm/include/main_02054E4C.inc b/asm/include/main_02054E4C.inc index d102867c..1a1d24f2 100644 --- a/asm/include/main_02054E4C.inc +++ b/asm/include/main_02054E4C.inc @@ -1,4 +1,22 @@ #pragma once +.public _020A190C +.public _020A333C +.public _020A3340 +.public _020A3350 +.public _020A336C +.public _020A3398 +.public _020A33B8 +.public _020A33D4 +.public _020A340C +.public _020A343C +.public _020A344C +.public _020A3450 +.public _020A3468 +.public _020AFC28 +.public _020AFC4C +.public _020B0A4C +.public _022B5788 +.public _022B578C .public AddMoneyCarried .public CleanStickyItemsInBag .public CopyAndInterleaveWrapper @@ -23,8 +41,8 @@ .public GroundToDungeonMoveset .public HandleSir0Translation .public IQ_GROUP_SKILLS -.public IQ_SKILLS .public IQ_SKILL_RESTRICTIONS +.public IQ_SKILLS .public IqSkillFlagTest .public IsLevelResetDungeon .public IsSkyExclusiveDungeon @@ -40,27 +58,6 @@ .public StrncpyName .public StrncpySimple .public StrncpySimpleNoPadSafe -.public TACTICS_UNLOCK_LEVEL_TABLE -.public TEAM_MEMBER_TABLE_PTR -.public UnloadFile -.public _020A190C -.public _020A333C -.public _020A3340 -.public _020A3350 -.public _020A336C -.public _020A3398 -.public _020A33B8 -.public _020A33D4 -.public _020A340C -.public _020A343C -.public _020A344C -.public _020A3450 -.public _020A3468 -.public _020AFC28 -.public _020AFC4C -.public _020B0A4C -.public _022B5788 -.public _022B578C .public sub_0200D8AC .public sub_0200FA0C .public sub_0201B43C @@ -75,3 +72,6 @@ .public sub_020534BC .public sub_02053D1C .public sub_02053F10 +.public TACTICS_UNLOCK_LEVEL_TABLE +.public TEAM_MEMBER_TABLE_PTR +.public UnloadFile diff --git a/asm/include/overlay_11.inc b/asm/include/overlay_11.inc index 5b277fb9..7f0d8e2c 100644 --- a/asm/include/overlay_11.inc +++ b/asm/include/overlay_11.inc @@ -89,6 +89,7 @@ .public FreeTeamStats .public FX_Atan2Idx .public G3X_Reset +.public GenerateCroagunkItems .public GenerateDailyMissions .public GenerateKecleonItems1 .public GenerateKecleonItems2 @@ -137,6 +138,7 @@ .public GetRankupPoints .public GetReleasedStylus .public GetScenarioBalance +.public GetScriptEntityMonsterId .public GetSimpleMenuResult .public GetSosMailCount .public GetSpriteIndex__02052724 @@ -466,7 +468,6 @@ .public sub_02011420 .public sub_020114F8 .public sub_02011FA0 -.public sub_02012B7C .public sub_020130B8 .public sub_02015328 .public sub_02016300 @@ -762,7 +763,6 @@ .public sub_02065014 .public sub_02065050 .public sub_0206549C -.public sub_02065974 .public sub_02065B80 .public sub_02065BC8 .public sub_02065BD8 diff --git a/asm/include/overlay_24.inc b/asm/include/overlay_24.inc index ab49f0c9..46b79c02 100644 --- a/asm/include/overlay_24.inc +++ b/asm/include/overlay_24.inc @@ -34,6 +34,7 @@ .public ov11_0230D220 .public ov11_02310BDC .public Rand16Bit +.public ReturnEggExclusiveItem .public SetPokemonJoined .public SetPortraitEmotion .public SetPortraitLayout @@ -48,7 +49,6 @@ .public StrncpySimple .public StrncpySimpleNoPadSafe .public sub_0200D670 -.public sub_0200EB90 .public sub_0201077C .public sub_02010794 .public sub_020107AC diff --git a/asm/include/overlay_26.inc b/asm/include/overlay_26.inc index 3b71e2b1..851130b2 100644 --- a/asm/include/overlay_26.inc +++ b/asm/include/overlay_26.inc @@ -8,6 +8,7 @@ .public GetGameMode .public GetMaxItemsAllowed .public GetOutlawLeaderLevel +.public GetScriptEntityMonsterId .public IncrementExclusiveMonsterCounts .public IncrementNbAdventures .public IncrementNbDungeonsCleared @@ -58,4 +59,3 @@ .public sub_0205F9D4 .public sub_02062E5C .public sub_0206351C -.public sub_02065974 diff --git a/asm/main_0200EB30.s b/asm/main_0200EB30.s index 7531126c..20a93ca9 100644 --- a/asm/main_0200EB30.s +++ b/asm/main_0200EB30.s @@ -46,10 +46,10 @@ _0200EB88: .word ITEM_DATA_TABLE_PTRS _0200EB8C: .word 0x000007FF arm_func_end sub_0200EB64 - arm_func_start sub_0200EB90 -sub_0200EB90: ; 0x0200EB90 + arm_func_start ReturnEggExclusiveItem +ReturnEggExclusiveItem: ; 0x0200EB90 mov ip, #0 - ldr r2, _0200EBC8 ; =ARM9_UNKNOWN_TABLE__NA_2097FF8 + ldr r2, _0200EBC8 ; =BABY_EXCLUSIVE_ITEM_PAIRS b _0200EBB8 _0200EB9C: add r1, r2, ip, lsl #2 @@ -65,8 +65,8 @@ _0200EBB8: mov r0, #0 bx lr .align 2, 0 -_0200EBC8: .word ARM9_UNKNOWN_TABLE__NA_2097FF8 - arm_func_end sub_0200EB90 +_0200EBC8: .word BABY_EXCLUSIVE_ITEM_PAIRS + arm_func_end ReturnEggExclusiveItem arm_func_start SetActiveInventoryToMain SetActiveInventoryToMain: ; 0x0200EBCC diff --git a/asm/main_02010FC4.s b/asm/main_02010FC4.s index c9ab8096..dfbe89af 100644 --- a/asm/main_02010FC4.s +++ b/asm/main_02010FC4.s @@ -2171,8 +2171,8 @@ _02012B74: .word _020AF6D0 _02012B78: .word _020AF6D4 arm_func_end CloseSynthBin - arm_func_start sub_02012B7C -sub_02012B7C: ; 0x02012B7C + arm_func_start GenerateCroagunkItems +GenerateCroagunkItems: ; 0x02012B7C stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} sub sp, sp, #0x160 bl GetScenarioBalance @@ -2273,7 +2273,7 @@ _02012CB8: mla r1, r6, r2, r1 mov r0, sl add r2, sp, #0x2c - bl sub_020132A4 + bl GetValidSynthsForSpecies cmp r0, #0 addne r0, r4, r5, lsl #1 addne r0, r0, #0x900 @@ -2347,7 +2347,7 @@ _02012DD4: mla r1, r6, r0, r1 add r2, sp, #0x2c mov r0, sb - bl sub_020132A4 + bl GetValidSynthsForSpecies cmp r0, #0 addne r0, r4, r5, lsl #1 addne r0, r0, #0x900 @@ -2557,7 +2557,7 @@ _020130A8: .word 0x00000229 _020130AC: .word TYPE_SPECIFIC_EXCLUSIVE_ITEMS _020130B0: .word _022A4BD8 _020130B4: .word _02098D48 - arm_func_end sub_02012B7C + arm_func_end GenerateCroagunkItems arm_func_start sub_020130B8 sub_020130B8: ; 0x020130B8 @@ -2717,8 +2717,8 @@ _0201328C: _020132A0: .word _020AF6D0 arm_func_end GetSynthItem - arm_func_start sub_020132A4 -sub_020132A4: ; 0x020132A4 + arm_func_start GetValidSynthsForSpecies +GetValidSynthsForSpecies: ; 0x020132A4 stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} mov sl, r0 mov sb, r1 @@ -2759,7 +2759,7 @@ _0201332C: cmp r6, #4 blt _020132D0 mov r0, sl - bl sub_0200EB90 + bl ReturnEggExclusiveItem cmp r0, #0 beq _0201338C bl GetSynthItem @@ -2794,7 +2794,7 @@ _0201338C: strneb r1, [r8, r0] mov r0, r5 ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end sub_020132A4 + arm_func_end GetValidSynthsForSpecies arm_func_start LoadWazaP LoadWazaP: ; 0x020133C4 diff --git a/asm/main_02058F24.s b/asm/main_02058F24.s index 0f1a5b6e..b799b4e2 100644 --- a/asm/main_02058F24.s +++ b/asm/main_02058F24.s @@ -15463,8 +15463,8 @@ _0206596C: .word TEAM_MEMBER_TABLE_PTR _02065970: .word _020B0B08 arm_func_end sub_0206549C - arm_func_start sub_02065974 -sub_02065974: ; 0x02065974 + arm_func_start GetScriptEntityMonsterId +GetScriptEntityMonsterId: ; 0x02065974 stmdb sp!, {r0, r1, r2, r3} stmdb sp!, {r3, lr} add r0, sp, #8 @@ -15474,7 +15474,7 @@ sub_02065974: ; 0x02065974 ldmia sp!, {r3, lr} add sp, sp, #0x10 bx lr - arm_func_end sub_02065974 + arm_func_end GetScriptEntityMonsterId arm_func_start GetActorMatchingStorageId GetActorMatchingStorageId: ; 0x02065998 diff --git a/asm/main_020897DC.s b/asm/main_020897DC.s index 00cdd52c..a84b7c28 100644 --- a/asm/main_020897DC.s +++ b/asm/main_020897DC.s @@ -11115,8 +11115,8 @@ _02098434: .byte 0x73, 0x74, 0x5F, 0x69, 0x32, 0x6E, 0x5F, 0x66 .byte 0x2E, 0x62, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00 #endif - .global ARM9_UNKNOWN_TABLE__NA_2097FF8 -ARM9_UNKNOWN_TABLE__NA_2097FF8: + .global BABY_EXCLUSIVE_ITEM_PAIRS +BABY_EXCLUSIVE_ITEM_PAIRS: .byte 0xC8, 0x01, 0xAC, 0x00, 0xC9, 0x01, 0xAD, 0x00, 0xCA, 0x01, 0xAE, 0x00 .byte 0xCB, 0x01, 0xAF, 0x00, 0xCC, 0x01, 0x07, 0x01, 0xCD, 0x01, 0x09, 0x01, 0xCE, 0x01, 0x0A, 0x01 .byte 0xCF, 0x01, 0x0B, 0x01, 0xD0, 0x01, 0x46, 0x01, 0xD1, 0x01, 0x88, 0x01, 0xD2, 0x01, 0xE0, 0x01 diff --git a/asm/overlay_11.s b/asm/overlay_11.s index abfb1aeb..0dbd267d 100644 --- a/asm/overlay_11.s +++ b/asm/overlay_11.s @@ -3685,7 +3685,7 @@ _022DF504: bl ScriptParamToInt mov r0, r0, lsl #0x10 mov r0, r0, asr #0x10 - bl sub_02065974 + bl GetScriptEntityMonsterId mov r7, r0 b _022DF6FC _022DF520: @@ -3855,7 +3855,7 @@ _022DF760: ; 0x022DF760 mov r1, r7, lsl #0x10 mov r4, r0 mov r0, r1, asr #0x10 - bl sub_02065974 + bl GetScriptEntityMonsterId mov r1, r0, lsl #0x10 ldr r2, _022DFE18 ; =ov11_02324ECC orr r3, r7, #0x10000 @@ -3886,7 +3886,7 @@ _022DF7CC: ; 0x022DF7CC mov r3, #0x60000 mov r0, r1, asr #0x10 str r3, [r2, #0x4c] - bl sub_02065974 + bl GetScriptEntityMonsterId mov r1, r0 ldr r0, _022DFE1C ; =ov11_02324EA4 bl InitPortraitParamsWithMonsterId @@ -3913,7 +3913,7 @@ _022DF834: ; 0x022DF834 mov r3, #0x70000 mov r0, r1, asr #0x10 str r3, [r2, #0x4c] - bl sub_02065974 + bl GetScriptEntityMonsterId mov r1, r0 ldr r0, _022DFE1C ; =ov11_02324EA4 bl InitPortraitParamsWithMonsterId @@ -4170,7 +4170,7 @@ _022DFBDC: b _022E2478 _022DFBF0: mov r0, #0x2f - bl sub_02065974 + bl GetScriptEntityMonsterId cmp r0, #0 mvneq r6, #0 beq _022DFC44 @@ -15400,7 +15400,7 @@ _022E9498: mov r0, r4 bl GenerateKecleonItems2 bl GenerateDailyMissions - bl sub_02012B7C + bl GenerateCroagunkItems bl sub_0201080C bl sub_02011FA0 ldmia sp!, {r4, pc} diff --git a/asm/overlay_24.s b/asm/overlay_24.s index 3d459495..bd26892c 100644 --- a/asm/overlay_24.s +++ b/asm/overlay_24.s @@ -2345,7 +2345,7 @@ _0238C2FC: ldr r0, [r1] strb r2, [r0, #0x21] bl sub_0201077C - bl sub_0200EB90 + bl ReturnEggExclusiveItem ldr r1, _0238C33C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 ldr r1, [r1] strh r0, [r1, #0x16] diff --git a/asm/overlay_26.s b/asm/overlay_26.s index fe40293c..3c232ef8 100644 --- a/asm/overlay_26.s +++ b/asm/overlay_26.s @@ -381,7 +381,7 @@ _0238A678: ldr r1, [r0] mov r0, #0x3c str r2, [r1, #0x54] - bl sub_02065974 + bl GetScriptEntityMonsterId mov r5, r0 b _0238A74C _0238A698: @@ -390,7 +390,7 @@ _0238A698: ldr r1, [r0] mov r0, #0x3d str r2, [r1, #0x54] - bl sub_02065974 + bl GetScriptEntityMonsterId mov r5, r0 b _0238A74C _0238A6B8: @@ -399,7 +399,7 @@ _0238A6B8: ldr r1, [r0] mov r0, #0x3f str r2, [r1, #0x54] - bl sub_02065974 + bl GetScriptEntityMonsterId mov r5, r0 b _0238A74C _0238A6D8: diff --git a/asm/overlay_29_02333FD0.s b/asm/overlay_29_02333FD0.s index b48f4dba..b7b29843 100644 --- a/asm/overlay_29_02333FD0.s +++ b/asm/overlay_29_02333FD0.s @@ -411,7 +411,7 @@ _0233454C: moveq r0, #0 ldmeqia sp!, {r4, r5, r6, r7, r8, pc} add r0, r5, #0x124 + OV29_02333FD0_OFFSET - bl ov29_02334CAC + bl HasLastUsedMove cmp r0, #0 bne _02334C9C mov r0, #0 @@ -459,7 +459,7 @@ _023345F4: movne r0, #0 ldmneia sp!, {r4, r5, r6, r7, r8, pc} add r0, r5, #0x124 + OV29_02333FD0_OFFSET - bl ov29_02334CAC + bl HasLastUsedMove cmp r0, #0 bne _02334C9C mov r0, #0 @@ -757,7 +757,7 @@ _023349E0: ldmia sp!, {r4, r5, r6, r7, r8, pc} _023349F4: add r0, r5, #0x124 + OV29_02333FD0_OFFSET - bl ov29_02334CAC + bl HasLastUsedMove cmp r0, #0 bne _02334C9C mov r0, #0 @@ -958,8 +958,8 @@ _02334CA4: .word 0x0000010A _02334CA8: .word 0x0000020D arm_func_end StatusCheckerCheckOnTarget - arm_func_start ov29_02334CAC -ov29_02334CAC: ; 0x02334CAC + arm_func_start HasLastUsedMove +HasLastUsedMove: ; 0x02334CAC stmdb sp!, {r3, lr} mov r3, #0 mov r1, r3 @@ -986,4 +986,4 @@ _02334CE8: moveq r0, #0 and r0, r0, #0xff ldmia sp!, {r3, pc} - arm_func_end ov29_02334CAC + arm_func_end HasLastUsedMove From c984945d419655bf05d95ff7e545e6f06f08fa58 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 17 Aug 2025 10:57:29 -0700 Subject: [PATCH 40/40] fix: add -lm to gen_fx_consts Makefile --- tools/gen_fx_consts/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/gen_fx_consts/Makefile b/tools/gen_fx_consts/Makefile index 9c9d3f4e..1770743f 100644 --- a/tools/gen_fx_consts/Makefile +++ b/tools/gen_fx_consts/Makefile @@ -17,7 +17,7 @@ all: $(prog) clean: ; $(RM) -r $(DEPDIR) $(OBJS) $(prog) $(prog).exe $(prog): $(OBJS) - $(CC) $(LDFLAGS) -o $@ $^ + $(CC) $(LDFLAGS) -lm -o $@ $^ $(OBJS): %.o: %.c $(OBJS): %.o: %.c $(DEPDIR)/%.d | $(DEPDIR)