diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-07-06 16:45:21 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-07-07 01:46:06 +0800 |
commit | 050bb937533b98a6828f0b276bbe13608b7e2fb0 (patch) | |
tree | 8643c5ef255ec82035688cb441e364f239b67e2c | |
parent | cc4d2f524cbac1610e6ff517d55d7de48ebcafc7 (diff) |
finished list_menu
-rw-r--r-- | asm/battle_script_commands.s | 2 | ||||
-rw-r--r-- | asm/berry_pouch.s | 10 | ||||
-rw-r--r-- | asm/field_specials.s | 4 | ||||
-rw-r--r-- | asm/item_menu.s | 42 | ||||
-rw-r--r-- | asm/learn_move.s | 14 | ||||
-rw-r--r-- | asm/link_rfu_3.s | 60 | ||||
-rw-r--r-- | asm/list_menu.s | 2019 | ||||
-rw-r--r-- | asm/player_pc.s | 6 | ||||
-rw-r--r-- | asm/pokedex_screen.s | 34 | ||||
-rw-r--r-- | asm/pokemon_icon.s | 6 | ||||
-rw-r--r-- | asm/pokemon_summary_screen.s | 12 | ||||
-rw-r--r-- | asm/shop.s | 4 | ||||
-rw-r--r-- | common_syms/list_menu.txt | 2 | ||||
-rw-r--r-- | data/data_83FECCC.s | 3 | ||||
-rw-r--r-- | data/graphics.s | 12 | ||||
-rw-r--r-- | graphics/interface/menu.png | bin | 0 -> 1803 bytes | |||
-rw-r--r-- | graphics/interface/menu1.pal | 19 | ||||
-rw-r--r-- | graphics/interface/menu2.pal | 19 | ||||
-rw-r--r-- | include/graphics.h | 3 | ||||
-rw-r--r-- | include/list_menu.h | 22 | ||||
-rw-r--r-- | include/menu.h | 7 | ||||
-rw-r--r-- | include/menu_indicators.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/daycare.c | 6 | ||||
-rw-r--r-- | src/fame_checker.c | 6 | ||||
-rw-r--r-- | src/item_pc.c | 14 | ||||
-rw-r--r-- | src/list_menu.c | 790 | ||||
-rw-r--r-- | src/teachy_tv.c | 4 | ||||
-rw-r--r-- | src/tm_case.c | 24 | ||||
-rw-r--r-- | sym_common.txt | 9 | ||||
-rw-r--r-- | sym_ewram.txt | 5 |
31 files changed, 989 insertions, 2175 deletions
diff --git a/asm/battle_script_commands.s b/asm/battle_script_commands.s index 60b06f8a6..b240c3da2 100644 --- a/asm/battle_script_commands.s +++ b/asm/battle_script_commands.s @@ -17903,7 +17903,7 @@ PutMonIconOnLvlUpBox: @ 8026688 orrs r0, r1 str r0, [sp, 0x4] adds r0, r4, 0 - bl sub_80971CC + bl GetValidMonIconPalettePtr str r0, [sp, 0x8] add r4, sp, 0x8 ldr r0, [r4, 0x4] diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index 6aaa9ba76..8eb127d52 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -1409,7 +1409,7 @@ sub_813D844: @ 813D844 ldr r4, _0813D884 @ =gUnknown_203F37A subs r2, r4, 0x2 adds r1, r4, 0 - bl DestroyListMenu + bl DestroyListMenuTask ldr r0, _0813D888 @ =gUnknown_203F36C ldr r0, [r0] ldr r0, [r0] @@ -1688,7 +1688,7 @@ _0813DA90: b _0813DB9E _0813DA9E: ldrb r0, [r7] - bl ListMenuHandleInput + bl ListMenu_ProcessInput adds r5, r0, 0 ldrb r0, [r7] ldr r4, _0813DAE0 @ =gUnknown_203F37A @@ -2504,7 +2504,7 @@ _0813E18A: ldr r4, _0813E1F8 @ =gUnknown_203F37A subs r2, r4, 0x2 adds r1, r4, 0 - bl DestroyListMenu + bl DestroyListMenuTask bl sub_813D8AC bl sub_813D6F4 bl sub_813D204 @@ -2646,7 +2646,7 @@ sub_813E2B8: @ 813E2B8 ldr r4, _0813E318 @ =gUnknown_203F37A subs r2, r4, 0x2 adds r1, r4, 0 - bl DestroyListMenu + bl DestroyListMenuTask bl sub_813D8AC bl sub_813D6F4 bl sub_813D204 @@ -3277,7 +3277,7 @@ sub_813E7F0: @ 813E7F0 ldr r4, _0813E8C8 @ =gUnknown_203F37A subs r2, r4, 0x2 adds r1, r4, 0 - bl DestroyListMenu + bl DestroyListMenuTask bl sub_813D8AC bl sub_813D6F4 bl sub_813D204 diff --git a/asm/field_specials.s b/asm/field_specials.s index d81dc424e..c1555f2bb 100644 --- a/asm/field_specials.s +++ b/asm/field_specials.s @@ -2781,7 +2781,7 @@ sub_80CBB28: @ 80CBB28 ldrh r0, [r6, 0x24] lsls r0, 24 lsrs r0, 24 - bl ListMenuHandleInput + bl ListMenu_ProcessInput adds r4, r0, 0 movs r0, 0x2 negs r0, r0 @@ -2854,7 +2854,7 @@ sub_80CBBAC: @ 80CBBAC lsrs r0, 24 movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask ldr r0, _080CBC28 @ =gUnknown_2039A14 ldr r0, [r0] bl Free diff --git a/asm/item_menu.s b/asm/item_menu.s index 001198d95..8d01691a5 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -1802,7 +1802,7 @@ sub_8108B8C: @ 8108B8C adds r3, r4, 0 adds r3, 0x8 adds r2, r3 - bl DestroyListMenu + bl DestroyListMenuTask ldr r0, _08108BF0 @ =gUnknown_203AD10 ldr r0, [r0] ldr r0, [r0] @@ -2341,7 +2341,7 @@ _08108FA0: _08108FE0: .4byte gUnknown_203AD10 _08108FE4: ldrb r0, [r7] - bl ListMenuHandleInput + bl ListMenu_ProcessInput adds r4, r0, 0 ldrb r0, [r7] ldr r5, _08109014 @ =gUnknown_203ACFC @@ -2617,7 +2617,7 @@ sub_81091D0: @ 81091D0 adds r1, r2, r1 adds r3, 0x8 adds r2, r3 - bl DestroyListMenu + bl DestroyListMenuTask movs r0, 0 bl ScheduleBgCopyTilemapToVram ldr r0, _08109290 @ =gUnknown_203AD10 @@ -2835,7 +2835,7 @@ sub_81093B8: @ 81093B8 ldrb r0, [r2] movs r1, 0x10 movs r2, 0x1 - bl sub_8107BD0 + bl ListMenuSetUnkIndicatorsStructField mov r0, r8 strh r4, [r0, 0x2] ldr r0, _08109498 @ =gUnknown_203AD10 @@ -2931,7 +2931,7 @@ sub_81094B0: @ 81094B0 cmp r0, 0x1 beq _0810959E ldrb r0, [r4] - bl ListMenuHandleInput + bl ListMenu_ProcessInput adds r5, r0, 0 ldrb r0, [r4] ldr r3, _0810953C @ =gUnknown_203ACFC @@ -3082,7 +3082,7 @@ _081095E8: adds r7, r4, 0 adds r7, 0x8 adds r2, r7 - bl DestroyListMenu + bl DestroyListMenuTask movs r3, 0x2 ldrsh r0, [r6, r3] cmp r0, r5 @@ -3160,7 +3160,7 @@ sub_810967C: @ 810967C adds r7, r5, 0 adds r7, 0x8 adds r2, r7 - bl DestroyListMenu + bl DestroyListMenuTask movs r3, 0x2 ldrsh r0, [r6, r3] cmp r0, r4 @@ -4213,7 +4213,7 @@ _08109F6E: adds r6, r4, 0 adds r6, 0x8 adds r2, r6 - bl DestroyListMenu + bl DestroyListMenuTask ldrb r0, [r4, 0x6] bl sub_8108DC8 ldrb r0, [r4, 0x6] @@ -4304,7 +4304,7 @@ _0810A052: adds r6, r4, 0 adds r6, 0x8 adds r2, r6 - bl DestroyListMenu + bl DestroyListMenuTask ldrb r0, [r4, 0x6] bl sub_810842C ldr r0, _0810A0A4 @ =gMultiuseListMenuTemplate @@ -4519,7 +4519,7 @@ sub_810A1F8: @ 810A1F8 adds r3, r4 mov r9, r3 add r2, r9 - bl DestroyListMenu + bl DestroyListMenuTask ldrb r0, [r4, 0x6] bl sub_8108DC8 ldrb r0, [r4, 0x6] @@ -5497,7 +5497,7 @@ sub_810A9D4: @ 810A9D4 adds r3, r4 mov r9, r3 add r2, r9 - bl DestroyListMenu + bl DestroyListMenuTask ldrb r0, [r4, 0x6] bl sub_8108DC8 ldrb r0, [r4, 0x6] @@ -6212,7 +6212,7 @@ _0810B01C: ldrb r0, [r5] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask bl sub_810AECC bl sub_8108CB4 adds r0, r7, 0 @@ -6537,7 +6537,7 @@ _0810B29E: adds r6, r4, 0 adds r6, 0x8 adds r2, r6 - bl DestroyListMenu + bl DestroyListMenuTask ldrb r0, [r4, 0x6] bl sub_810842C ldr r0, _0810B328 @ =gMultiuseListMenuTemplate @@ -6573,7 +6573,7 @@ _0810B32C: movs r0, 0x80 strh r0, [r1, 0x30] ldrb r0, [r7] - bl ListMenuHandleInput + bl ListMenu_ProcessInput b _0810B36C .align 2, 0 _0810B340: .4byte gMain @@ -6583,7 +6583,7 @@ _0810B344: ldrb r0, [r7] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask bl sub_810AECC bl sub_8108CB4 adds r0, r6, 0 @@ -6701,7 +6701,7 @@ _0810B428: _0810B430: strh r0, [r1, 0x30] ldrb r0, [r4] - bl ListMenuHandleInput + bl ListMenu_ProcessInput b _0810B4B0 .align 2, 0 _0810B43C: .4byte gMain @@ -6738,7 +6738,7 @@ _0810B468: ldrb r0, [r4] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask bl sub_810AECC bl sub_8108CB4 adds r0, r7, 0 @@ -6817,7 +6817,7 @@ _0810B528: strh r6, [r0, 0x2E] strh r7, [r0, 0x30] ldrb r0, [r5] - bl ListMenuHandleInput + bl ListMenu_ProcessInput b _0810B5C0 .align 2, 0 _0810B538: .4byte gMain @@ -6854,7 +6854,7 @@ _0810B564: ldrb r0, [r5] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask bl sub_810AECC ldr r1, _0810B5B0 @ =gUnknown_3005E98 ldr r0, _0810B5B4 @ =ItemUseCB_Medicine @@ -6950,7 +6950,7 @@ _0810B64E: strh r5, [r0, 0x2E] strh r7, [r0, 0x30] ldrb r0, [r6] - bl ListMenuHandleInput + bl ListMenu_ProcessInput b _0810B6E0 .align 2, 0 _0810B65C: .4byte gMain @@ -6989,7 +6989,7 @@ _0810B68C: ldrb r0, [r6] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask bl sub_810AECC ldr r0, _0810B6D4 @ =gUnknown_203AD10 ldr r1, [r0] diff --git a/asm/learn_move.s b/asm/learn_move.s index f00135fda..6684874bb 100644 --- a/asm/learn_move.s +++ b/asm/learn_move.s @@ -1409,7 +1409,7 @@ sub_80E5204: @ 80E5204 ldr r1, _080E525C @ =0x00000263 adds r0, r1 ldrb r0, [r0] - bl ListMenuHandleInput + bl ListMenu_ProcessInput ldr r0, _080E5260 @ =gMain ldrh r1, [r0, 0x2E] movs r0, 0x1 @@ -1568,7 +1568,7 @@ sub_80E5340: @ 80E5340 movs r0, 0x2 movs r2, 0x1 movs r3, 0x4 - bl blit_move_info_icon + bl BlitMoveInfoIcon ldrb r0, [r4, 0x1] cmp r0, 0x1 bhi _080E5388 @@ -1680,27 +1680,27 @@ sub_80E5444: @ 80E5444 movs r1, 0x13 movs r2, 0x1 movs r3, 0x4 - bl blit_move_info_icon + bl BlitMoveInfoIcon movs r0, 0x1 movs r1, 0x14 movs r2, 0 movs r3, 0x4 - bl blit_move_info_icon + bl BlitMoveInfoIcon movs r0, 0x1 movs r1, 0x15 movs r2, 0 movs r3, 0x13 - bl blit_move_info_icon + bl BlitMoveInfoIcon movs r0, 0 movs r1, 0x16 movs r2, 0x1 movs r3, 0x13 - bl blit_move_info_icon + bl BlitMoveInfoIcon movs r0, 0 movs r1, 0x17 movs r2, 0x1 movs r3, 0x22 - bl blit_move_info_icon + bl BlitMoveInfoIcon movs r0, 0 bl PutWindowTilemap movs r0, 0x1 diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index f46ac9953..78c09b0ff 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -620,7 +620,7 @@ _08115DD4: bl sub_81165E8 strb r0, [r5, 0x13] ldrb r0, [r5, 0x12] - bl sub_8107180 + bl RedrawListMenu b _0811610C .align 2, 0 _08115DE4: .4byte gUnknown_203B058 @@ -783,7 +783,7 @@ _08115EF4: movs r0, 0 strb r0, [r1, 0x1B] ldrb r0, [r5, 0x12] - bl sub_8107180 + bl RedrawListMenu ldrb r0, [r5, 0x13] adds r0, 0x1 strb r0, [r5, 0x13] @@ -870,7 +870,7 @@ _08115FB4: ldr r0, [r5] bl sub_81165E8 ldrb r0, [r5, 0x12] - bl sub_8107180 + bl RedrawListMenu _08115FF0: movs r0, 0x4 strb r0, [r5, 0xC] @@ -1139,7 +1139,7 @@ sub_81161E4: @ 81161E4 ldrb r0, [r4, 0x12] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask ldrb r0, [r4, 0x10] bl ClearWindowTilemap ldrb r0, [r4, 0xF] @@ -1400,7 +1400,7 @@ _08116460: movs r0, 0x2 bl PlaySE ldrb r0, [r5, 0x12] - bl sub_8107180 + bl RedrawListMenu ldr r4, _081164A0 @ =gStringVar2 ldrb r0, [r5, 0x13] lsls r0, 5 @@ -1433,7 +1433,7 @@ _081164AC: movs r1, 0 bl sub_80FB9E4 ldrb r0, [r5, 0x12] - bl sub_8107180 + bl RedrawListMenu strb r4, [r5, 0xC] movs r0, 0x1 b _081164C2 @@ -1972,7 +1972,7 @@ _08116916: b _08116BF6 _0811691E: ldrb r0, [r6, 0xE] - bl ListMenuHandleInput + bl ListMenu_ProcessInput adds r4, r0, 0 ldr r0, _0811696C @ =gMain ldrh r1, [r0, 0x2E] @@ -2301,7 +2301,7 @@ _08116BF4: strb r0, [r6, 0x8] _08116BF6: ldrb r0, [r6, 0xE] - bl sub_8107180 + bl RedrawListMenu b _08116D06 _08116BFE: bl sub_80FB9F4 @@ -2322,7 +2322,7 @@ _08116C10: ldrb r0, [r6, 0xE] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask ldrb r0, [r6, 0xC] bl ClearWindowTilemap ldrb r0, [r6, 0xB] @@ -2480,7 +2480,7 @@ sub_8116D60: @ 8116D60 movs r1, 0 bl sub_80FCD74 ldrb r0, [r4, 0xE] - bl sub_8107180 + bl RedrawListMenu ldr r5, _08116DD4 @ =gStringVar1 ldrb r0, [r4, 0xF] lsls r0, 5 @@ -4151,7 +4151,7 @@ _08117BF4: bl sub_81165E8 strb r0, [r5, 0x13] ldrb r0, [r5, 0x12] - bl sub_8107180 + bl RedrawListMenu _08117C02: movs r0, 0x2 strb r0, [r5, 0xC] @@ -4198,7 +4198,7 @@ _08117C42: adds r1, r0 strb r4, [r1, 0x1B] ldrb r0, [r5, 0x12] - bl sub_8107180 + bl RedrawListMenu movs r0, 0x5 strb r0, [r5, 0x19] ldrb r1, [r5, 0x13] @@ -4268,7 +4268,7 @@ _08117CB2: movs r0, 0 strb r0, [r1, 0x1B] ldrb r0, [r5, 0x12] - bl sub_8107180 + bl RedrawListMenu ldrb r0, [r5, 0x13] adds r0, 0x1 strb r0, [r5, 0x13] @@ -4327,7 +4327,7 @@ _08117D3C: ldr r0, [r5] bl sub_81165E8 ldrb r0, [r5, 0x12] - bl sub_8107180 + bl RedrawListMenu movs r0, 0x2 strb r0, [r5, 0xC] _08117D7C: @@ -4398,7 +4398,7 @@ _08117DEE: ldrb r0, [r5, 0x12] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask movs r0, 0 bl CopyBgTilemapBufferToVram ldrb r0, [r5, 0xF] @@ -4457,7 +4457,7 @@ _08117E80: ldrb r0, [r5, 0x12] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask movs r0, 0 bl CopyBgTilemapBufferToVram ldrb r0, [r5, 0xF] @@ -4673,11 +4673,11 @@ _08118070: bl PlaySE _08118086: ldrb r0, [r5, 0xE] - bl sub_8107180 + bl RedrawListMenu b _08118288 _0811808E: ldrb r0, [r5, 0xE] - bl ListMenuHandleInput + bl ListMenu_ProcessInput adds r2, r0, 0 ldr r0, _08118128 @ =gMain ldrh r1, [r0, 0x2E] @@ -4707,7 +4707,7 @@ _0811808E: movs r1, 0 bl sub_80FCD74 ldrb r0, [r5, 0xE] - bl sub_8107180 + bl RedrawListMenu ldr r4, _0811812C @ =gStringVar1 ldrb r0, [r5, 0xF] lsls r0, 5 @@ -4842,7 +4842,7 @@ _081181EC: ldrb r0, [r5, 0xE] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask movs r0, 0 bl CopyBgTilemapBufferToVram ldrb r0, [r5, 0xD] @@ -5085,14 +5085,14 @@ _0811841E: b _08118604 _08118426: ldrb r0, [r5, 0xE] - bl sub_8107180 + bl RedrawListMenu b _08118604 _0811842E: ldrb r0, [r5, 0x13] cmp r0, 0 beq _0811843A ldrb r0, [r5, 0xE] - bl ListMenuHandleInput + bl ListMenu_ProcessInput _0811843A: ldrb r0, [r5, 0x14] cmp r0, 0x78 @@ -5242,7 +5242,7 @@ _08118564: ldrb r0, [r5, 0xE] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask movs r0, 0 bl CopyBgTilemapBufferToVram ldrb r0, [r5, 0xB] @@ -8715,7 +8715,7 @@ _0811A270: .4byte gMultiuseListMenuTemplate _0811A274: mov r3, r9 ldrb r0, [r3] - bl ListMenuHandleInput + bl ListMenu_ProcessInput mov r8, r0 ldr r0, _0811A2AC @ =gMain ldrh r1, [r0, 0x2E] @@ -8726,7 +8726,7 @@ _0811A274: ldrb r0, [r4] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask ldrb r0, [r5] movs r1, 0x1 bl ClearStdWindowAndFrame @@ -8747,7 +8747,7 @@ _0811A2B0: ldrb r0, [r6] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask ldrb r0, [r5] movs r1, 0x1 bl ClearStdWindowAndFrame @@ -8821,7 +8821,7 @@ _0811A350: .4byte gUnknown_8456F1C _0811A354: .4byte gMultiuseListMenuTemplate _0811A358: ldrb r0, [r5] - bl ListMenuHandleInput + bl ListMenu_ProcessInput adds r1, r0, 0 ldr r0, _0811A3A8 @ =gMain ldrh r2, [r0, 0x2E] @@ -8842,7 +8842,7 @@ _0811A37E: ldrb r0, [r5] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask ldrb r0, [r4] movs r1, 0x1 bl ClearStdWindowAndFrame @@ -8867,7 +8867,7 @@ _0811A3AC: ldrb r0, [r5] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask ldrb r0, [r4] movs r1, 0x1 bl ClearStdWindowAndFrame @@ -9999,7 +9999,7 @@ _0811AC3C: adds r0, r6, 0 movs r2, 0x44 adds r3, r5, 0 - bl blit_move_info_icon + bl BlitMoveInfoIcon movs r0, 0xB mov r2, r8 muls r2, r0 diff --git a/asm/list_menu.s b/asm/list_menu.s deleted file mode 100644 index e6e316fb7..000000000 --- a/asm/list_menu.s +++ /dev/null @@ -1,2019 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start nullsub_90 -nullsub_90: @ 8106ECC - bx lr - thumb_func_end nullsub_90 - - thumb_func_start DoMysteryGiftListMenu -DoMysteryGiftListMenu: @ 8106ED0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - mov r12, r0 - str r1, [sp] - ldr r0, [sp, 0x28] - lsls r2, 24 - lsrs r6, r2, 24 - mov r10, r6 - lsls r3, 16 - lsrs r7, r3, 16 - str r7, [sp, 0x4] - lsls r0, 16 - mov r8, r0 - lsrs r0, 16 - mov r9, r0 - ldr r5, _08106F60 @ =gUnknown_203ACF4 - ldrb r4, [r5, 0x4] - cmp r4, 0x1 - beq _08106F68 - cmp r4, 0x1 - ble _08106F06 - cmp r4, 0x2 - beq _08106FCC -_08106F06: - mov r0, r12 - bl AddWindow - strb r0, [r5, 0x5] - cmp r6, 0x1 - beq _08106F24 - cmp r6, 0x2 - bne _08106F34 - ldrb r0, [r5, 0x5] - mov r1, r9 - lsls r2, r1, 24 - lsrs r2, 24 - adds r1, r7, 0 - bl TextWindow_SetUserSelectedFrame -_08106F24: - ldrb r0, [r5, 0x5] - mov r3, r8 - lsrs r2, r3, 20 - lsls r2, 24 - lsrs r2, 24 - ldr r1, [sp, 0x4] - bl DrawTextBorderOuter -_08106F34: - ldr r0, _08106F64 @ =gMultiuseListMenuTemplate - adds r2, r0, 0 - ldr r1, [sp] - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldr r4, _08106F60 @ =gUnknown_203ACF4 - ldrb r1, [r4, 0x5] - strb r1, [r0, 0x10] - movs r1, 0 - movs r2, 0 - bl ListMenuInit - strb r0, [r4, 0x6] - ldrb r0, [r4, 0x5] - movs r1, 0x1 - bl CopyWindowToVram - movs r0, 0x1 - strb r0, [r4, 0x4] - b _08106FE4 - .align 2, 0 -_08106F60: .4byte gUnknown_203ACF4 -_08106F64: .4byte gMultiuseListMenuTemplate -_08106F68: - ldrb r0, [r5, 0x6] - bl ListMenuHandleInput - str r0, [r5] - ldr r1, _08106FA4 @ =gMain - ldrh r0, [r1, 0x2E] - ands r4, r0 - cmp r4, 0 - beq _08106F7E - movs r0, 0x2 - strb r0, [r5, 0x4] -_08106F7E: - ldrh r1, [r1, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08106F92 - movs r0, 0x2 - negs r0, r0 - str r0, [r5] - movs r0, 0x2 - strb r0, [r5, 0x4] -_08106F92: - ldrb r0, [r5, 0x4] - cmp r0, 0x2 - bne _08106FE4 - cmp r6, 0 - bne _08106FA8 - ldrb r0, [r5, 0x5] - bl ClearWindowTilemap - b _08106FBA - .align 2, 0 -_08106FA4: .4byte gMain -_08106FA8: - mov r4, r10 - cmp r4, 0 - blt _08106FBA - cmp r4, 0x2 - bgt _08106FBA - ldrb r0, [r5, 0x5] - movs r1, 0 - bl ClearStdWindowAndFrame -_08106FBA: - ldr r0, _08106FC8 @ =gUnknown_203ACF4 - ldrb r0, [r0, 0x5] - movs r1, 0x1 - bl CopyWindowToVram - b _08106FE4 - .align 2, 0 -_08106FC8: .4byte gUnknown_203ACF4 -_08106FCC: - ldrb r0, [r5, 0x6] - movs r1, 0 - movs r2, 0 - bl DestroyListMenu - ldrb r0, [r5, 0x5] - bl RemoveWindow - movs r0, 0 - strb r0, [r5, 0x4] - ldr r0, [r5] - b _08106FE8 -_08106FE4: - movs r0, 0x1 - negs r0, r0 -_08106FE8: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end DoMysteryGiftListMenu - - thumb_func_start ListMenuInit -ListMenuInit: @ 8106FF8 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - bl ListMenuInitInternal - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r5, 0x10] - bl PutWindowTilemap - ldrb r0, [r5, 0x10] - movs r1, 0x2 - bl CopyWindowToVram - adds r0, r4, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end ListMenuInit - - thumb_func_start Unused_ListMenuInit2 -Unused_ListMenuInit2: @ 8107024 - push {r4-r7,lr} - sub sp, 0x8 - adds r6, r0, 0 - adds r4, r1, 0 - adds r1, r2, 0 - adds r2, r3, 0 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - bl ListMenuInitInternal - lsls r0, 24 - lsrs r7, r0, 24 - ldrb r0, [r4, 0x4] - cmp r0, 0xFF - beq _08107064 - adds r5, r4, 0 -_08107048: - ldrb r0, [r6, 0x10] - ldrb r1, [r5] - ldrb r2, [r5, 0x1] - ldrb r3, [r5, 0x2] - ldrb r4, [r5, 0x3] - str r4, [sp] - ldrb r4, [r5, 0x4] - str r4, [sp, 0x4] - bl PutWindowRectTilemapOverridePalette - adds r5, 0x8 - ldrb r0, [r5, 0x4] - cmp r0, 0xFF - bne _08107048 -_08107064: - ldrb r0, [r6, 0x10] - movs r1, 0x2 - bl CopyWindowToVram - adds r0, r7, 0 - add sp, 0x8 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end Unused_ListMenuInit2 - - thumb_func_start ListMenuHandleInput -ListMenuHandleInput: @ 8107078 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _081070A4 @ =gTasks+0x8 - adds r3, r1, r0 - ldr r2, _081070A8 @ =gMain - ldrh r1, [r2, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _081070AC - ldrh r0, [r3, 0x18] - ldrh r1, [r3, 0x1A] - adds r0, r1 - ldr r1, [r3] - lsls r0, 3 - adds r0, r1 - ldr r0, [r0, 0x4] - b _08107136 - .align 2, 0 -_081070A4: .4byte gTasks+0x8 -_081070A8: .4byte gMain -_081070AC: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _081070BA - movs r0, 0x2 - negs r0, r0 - b _08107136 -_081070BA: - ldrh r1, [r2, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _081070CE - adds r0, r3, 0 - movs r1, 0x1 - movs r2, 0x1 - movs r3, 0 - b _0810712E -_081070CE: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081070DE - adds r0, r3, 0 - movs r1, 0x1 - movs r2, 0x1 - b _0810712C -_081070DE: - ldrb r0, [r3, 0x16] - lsrs r0, 6 - cmp r0, 0x1 - beq _081070F4 - cmp r0, 0x1 - ble _081070EE - cmp r0, 0x2 - beq _08107100 -_081070EE: - movs r2, 0 - movs r0, 0 - b _08107114 -_081070F4: - movs r0, 0x20 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - movs r0, 0x10 - b _0810710E -_08107100: - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - movs r0, 0x80 - lsls r0, 1 -_0810710E: - ands r0, r1 - lsls r0, 16 - lsrs r0, 16 -_08107114: - cmp r2, 0 - beq _08107122 - ldrb r2, [r3, 0xE] - adds r0, r3, 0 - movs r1, 0x1 - movs r3, 0 - b _0810712E -_08107122: - cmp r0, 0 - beq _08107132 - ldrb r2, [r3, 0xE] - adds r0, r3, 0 - movs r1, 0x1 -_0810712C: - movs r3, 0x1 -_0810712E: - bl ListMenuChangeSelection -_08107132: - movs r0, 0x1 - negs r0, r0 -_08107136: - pop {r1} - bx r1 - thumb_func_end ListMenuHandleInput - - thumb_func_start DestroyListMenu -DestroyListMenu: @ 810713C - push {r4,lr} - adds r3, r1, 0 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _0810717C @ =gTasks+0x8 - adds r1, r0, r1 - cmp r3, 0 - beq _08107158 - ldrh r0, [r1, 0x18] - strh r0, [r3] -_08107158: - cmp r2, 0 - beq _08107160 - ldrh r0, [r1, 0x1A] - strh r0, [r2] -_08107160: - ldrb r0, [r1, 0x1E] - cmp r0, 0xFF - beq _08107170 - ldrb r1, [r1, 0x17] - lsrs r1, 6 - subs r1, 0x2 - bl ListMenuRemoveCursorObject -_08107170: - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810717C: .4byte gTasks+0x8 - thumb_func_end DestroyListMenu - - thumb_func_start sub_8107180 -sub_8107180: @ 8107180 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _081071C0 @ =gTasks+0x8 - adds r4, r0 - ldrb r0, [r4, 0x10] - ldrb r2, [r4, 0x15] - lsls r2, 28 - lsrs r1, r2, 4 - orrs r1, r2 - lsrs r1, 24 - bl FillWindowPixelBuffer - ldrh r1, [r4, 0x18] - ldrh r3, [r4, 0xE] - adds r0, r4, 0 - movs r2, 0 - bl ListMenuPrintEntries - adds r0, r4, 0 - bl ListMenuDrawCursor - ldrb r0, [r4, 0x10] - movs r1, 0x2 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081071C0: .4byte gTasks+0x8 - thumb_func_end sub_8107180 - - thumb_func_start sub_81071C4 -sub_81071C4: @ 81071C4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _08107204 @ =gTasks+0x8 - adds r4, r0 - lsrs r1, 20 - ldrb r6, [r4, 0x14] - movs r5, 0xF - adds r0, r5, 0 - ands r0, r6 - orrs r0, r1 - strb r0, [r4, 0x14] - ands r2, r5 - ldrb r1, [r4, 0x15] - movs r0, 0x10 - negs r0, r0 - ands r0, r1 - orrs r0, r2 - lsrs r3, 20 - ands r0, r5 - orrs r0, r3 - strb r0, [r4, 0x15] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08107204: .4byte gTasks+0x8 - thumb_func_end sub_81071C4 - - thumb_func_start sub_8107208 -sub_8107208: @ 8107208 - push {r4,r5,lr} - adds r3, r1, 0 - adds r5, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r3, 24 - lsrs r3, 24 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _08107240 @ =gTasks+0x8 - adds r4, r0 - ldrb r0, [r4, 0x10] - movs r1, 0x1 - adds r2, r3, 0 - bl SetWindowAttribute - ldrb r0, [r4, 0x10] - movs r1, 0x2 - adds r2, r5, 0 - bl SetWindowAttribute - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08107240: .4byte gTasks+0x8 - thumb_func_end sub_8107208 - - thumb_func_start sub_8107244 -sub_8107244: @ 8107244 - push {r4-r7,lr} - sub sp, 0x20 - mov r12, r2 - ldr r5, [sp, 0x34] - lsls r3, 16 - lsrs r3, 16 - adds r4, r3, 0 - mov r3, sp - ldm r0!, {r2,r6,r7} - stm r3!, {r2,r6,r7} - ldm r0!, {r2,r6,r7} - stm r3!, {r2,r6,r7} - mov r0, sp - movs r3, 0 - strh r1, [r0, 0x18] - mov r1, r12 - strh r1, [r0, 0x1A] - strb r3, [r0, 0x1C] - strb r3, [r0, 0x1D] - cmp r4, 0x40 - bne _08107278 - movs r1, 0 - movs r2, 0x1 - movs r3, 0 - bl ListMenuChangeSelection -_08107278: - cmp r4, 0x80 - bne _08107288 - mov r0, sp - movs r1, 0 - movs r2, 0x1 - movs r3, 0x1 - bl ListMenuChangeSelection -_08107288: - cmp r5, 0 - beq _08107292 - mov r0, sp - ldrh r0, [r0, 0x18] - strh r0, [r5] -_08107292: - ldr r2, [sp, 0x38] - cmp r2, 0 - beq _0810729E - mov r0, sp - ldrh r0, [r0, 0x1A] - strh r0, [r2] -_0810729E: - movs r0, 0x1 - negs r0, r0 - add sp, 0x20 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8107244 - - thumb_func_start sub_81072AC -sub_81072AC: @ 81072AC - push {lr} - adds r2, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _081072D0 @ =gTasks+0x8 - adds r1, r0 - cmp r2, 0 - beq _081072CA - ldrh r0, [r1, 0x1A] - ldrh r1, [r1, 0x18] - adds r0, r1 - strh r0, [r2] -_081072CA: - pop {r0} - bx r0 - .align 2, 0 -_081072D0: .4byte gTasks+0x8 - thumb_func_end sub_81072AC - - thumb_func_start ListMenuGetScrollAndRow -ListMenuGetScrollAndRow: @ 81072D4 - push {lr} - adds r3, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _081072FC @ =gTasks+0x8 - adds r1, r0 - cmp r3, 0 - beq _081072EE - ldrh r0, [r1, 0x18] - strh r0, [r3] -_081072EE: - cmp r2, 0 - beq _081072F6 - ldrh r0, [r1, 0x1A] - strh r0, [r2] -_081072F6: - pop {r0} - bx r0 - .align 2, 0 -_081072FC: .4byte gTasks+0x8 - thumb_func_end ListMenuGetScrollAndRow - - thumb_func_start ListMenuGetYCoordForPrintingArrowCursor -ListMenuGetYCoordForPrintingArrowCursor: @ 8107300 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _08107344 @ =gTasks+0x8 - adds r4, r0 - ldrb r0, [r4, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetFontAttribute - ldrb r1, [r4, 0x16] - lsls r1, 26 - lsrs r1, 29 - adds r0, r1 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x1A] - adds r2, r1, 0 - muls r2, r0 - adds r1, r2, 0 - ldrb r0, [r4, 0x14] - lsls r0, 28 - lsrs r0, 28 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08107344: .4byte gTasks+0x8 - thumb_func_end ListMenuGetYCoordForPrintingArrowCursor - - thumb_func_start ListMenuInitInternal -ListMenuInitInternal: @ 8107348 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - ldr r0, _08107418 @ =nullsub_90 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r0, 2 - add r0, r8 - lsls r0, 3 - ldr r1, _0810741C @ =gTasks+0x8 - adds r7, r0, r1 - adds r0, r7, 0 - ldm r4!, {r1-r3} - stm r0!, {r1-r3} - ldm r4!, {r1-r3} - stm r0!, {r1-r3} - movs r1, 0 - strh r5, [r7, 0x18] - strh r6, [r7, 0x1A] - strb r1, [r7, 0x1C] - strb r1, [r7, 0x1D] - movs r0, 0xFF - strb r0, [r7, 0x1E] - strb r1, [r7, 0x1F] - ldr r3, _08107420 @ =gUnknown_3005E60 - ldrb r1, [r7, 0x14] - movs r5, 0xF - lsrs r1, 4 - ldrb r4, [r3] - movs r2, 0x10 - negs r2, r2 - adds r0, r2, 0 - ands r0, r4 - orrs r0, r1 - strb r0, [r3] - ldrb r1, [r7, 0x15] - lsls r1, 28 - lsrs r1, 24 - ands r0, r5 - orrs r0, r1 - strb r0, [r3] - ldrb r0, [r7, 0x15] - lsrs r0, 4 - ands r5, r0 - ldrb r0, [r3, 0x1] - ands r2, r0 - orrs r2, r5 - strb r2, [r3, 0x1] - ldrb r1, [r7, 0x16] - lsls r1, 29 - lsrs r1, 17 - ldr r0, [r3] - ldr r2, _08107424 @ =0xfffc0fff - ands r0, r2 - orrs r0, r1 - str r0, [r3] - ldrb r0, [r7, 0x17] - lsls r0, 26 - lsrs r0, 26 - strb r0, [r3, 0x3] - ldrh r0, [r7, 0xC] - ldrh r1, [r7, 0xE] - cmp r0, r1 - bcs _081073E0 - strh r0, [r7, 0xE] -_081073E0: - ldrb r0, [r7, 0x10] - ldrb r2, [r7, 0x15] - lsls r2, 28 - lsrs r1, r2, 4 - orrs r1, r2 - lsrs r1, 24 - bl FillWindowPixelBuffer - ldrh r1, [r7, 0x18] - ldrh r3, [r7, 0xE] - adds r0, r7, 0 - movs r2, 0 - bl ListMenuPrintEntries - adds r0, r7, 0 - bl ListMenuDrawCursor - adds r0, r7, 0 - movs r1, 0x1 - bl ListMenuCallSelectionChangedCallback - mov r0, r8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08107418: .4byte nullsub_90 -_0810741C: .4byte gTasks+0x8 -_08107420: .4byte gUnknown_3005E60 -_08107424: .4byte 0xfffc0fff - thumb_func_end ListMenuInitInternal - - thumb_func_start ListMenuPrint -ListMenuPrint: @ 8107428 - push {r4-r7,lr} - sub sp, 0x18 - adds r4, r0, 0 - adds r6, r1, 0 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 24 - lsrs r3, 24 - mov r12, r3 - ldr r5, _08107490 @ =gUnknown_3005E60 - ldrb r1, [r5, 0x3] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0 - beq _08107494 - add r1, sp, 0x14 - ldr r2, [r5] - lsls r0, r2, 24 - lsrs r0, 28 - movs r3, 0 - strb r0, [r1] - lsls r0, r2, 28 - lsrs r0, 28 - strb r0, [r1, 0x1] - lsls r0, r2, 20 - lsrs r0, 28 - strb r0, [r1, 0x2] - ldrb r0, [r4, 0x10] - lsls r1, r2, 1 - lsrs r1, 25 - lsls r2, 14 - lsrs r2, 26 - str r2, [sp] - str r3, [sp, 0x4] - add r2, sp, 0x14 - str r2, [sp, 0x8] - movs r2, 0x1 - negs r2, r2 - str r2, [sp, 0xC] - str r6, [sp, 0x10] - adds r2, r7, 0 - mov r3, r12 - bl AddTextPrinterParameterized4 - ldrb r1, [r5, 0x3] - movs r0, 0x7F - ands r0, r1 - strb r0, [r5, 0x3] - b _081074D2 - .align 2, 0 -_08107490: .4byte gUnknown_3005E60 -_08107494: - add r2, sp, 0x14 - ldrb r1, [r4, 0x15] - lsls r0, r1, 28 - lsrs r0, 28 - strb r0, [r2] - ldrb r0, [r4, 0x14] - lsrs r0, 4 - strb r0, [r2, 0x1] - adds r0, r2, 0 - lsls r1, 24 - lsrs r1, 28 - strb r1, [r0, 0x2] - ldrb r0, [r4, 0x10] - ldrb r1, [r4, 0x17] - lsls r1, 26 - lsrs r1, 26 - ldrb r2, [r4, 0x16] - lsls r2, 29 - lsrs r2, 29 - str r2, [sp] - str r3, [sp, 0x4] - add r2, sp, 0x14 - str r2, [sp, 0x8] - movs r2, 0x1 - negs r2, r2 - str r2, [sp, 0xC] - str r6, [sp, 0x10] - adds r2, r7, 0 - mov r3, r12 - bl AddTextPrinterParameterized4 -_081074D2: - add sp, 0x18 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ListMenuPrint - - thumb_func_start ListMenuPrintEntries -ListMenuPrintEntries: @ 81074DC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r4, r0, 0 - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - lsls r2, 16 - lsrs r2, 16 - str r2, [sp] - lsls r3, 16 - lsrs r3, 16 - mov r10, r3 - ldrb r0, [r4, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetFontAttribute - ldrb r1, [r4, 0x16] - lsls r1, 26 - lsrs r1, 29 - adds r0, r1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - movs r0, 0 - mov r8, r0 - cmp r8, r10 - bge _08107584 -_0810751E: - ldr r0, [r4] - mov r2, r9 - lsls r1, r2, 3 - adds r0, r1, r0 - ldr r2, [r0, 0x4] - movs r0, 0x3 - negs r0, r0 - adds r5, r1, 0 - cmp r2, r0 - beq _08107536 - ldrb r6, [r4, 0x12] - b _08107538 -_08107536: - ldrb r6, [r4, 0x11] -_08107538: - ldr r0, [sp] - add r0, r8 - ldr r2, [sp, 0x4] - adds r1, r0, 0 - muls r1, r2 - ldrb r0, [r4, 0x14] - lsls r0, 28 - lsrs r0, 28 - adds r0, r1 - lsls r0, 24 - lsrs r2, r0, 24 - adds r7, r2, 0 - ldr r3, [r4, 0x8] - cmp r3, 0 - beq _08107562 - ldrb r0, [r4, 0x10] - ldr r1, [r4] - adds r1, r5, r1 - ldr r1, [r1, 0x4] - bl _call_via_r3 -_08107562: - ldr r0, [r4] - adds r0, r5, r0 - ldr r1, [r0] - adds r0, r4, 0 - adds r2, r6, 0 - adds r3, r7, 0 - bl ListMenuPrint - mov r0, r9 - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - movs r0, 0x1 - add r8, r0 - cmp r8, r10 - blt _0810751E -_08107584: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ListMenuPrintEntries - - thumb_func_start ListMenuDrawCursor -ListMenuDrawCursor: @ 8107594 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - ldrb r0, [r6, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetFontAttribute - ldrb r1, [r6, 0x16] - lsls r1, 26 - lsrs r1, 29 - adds r0, r1 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r6, 0x13] - mov r8, r1 - ldrh r1, [r6, 0x1A] - muls r1, r0 - ldrb r0, [r6, 0x14] - lsls r0, 28 - lsrs r0, 28 - adds r0, r1 - lsls r0, 24 - lsrs r7, r0, 24 - ldrb r0, [r6, 0x17] - lsrs r0, 6 - cmp r0, 0x1 - beq _08107680 - cmp r0, 0x1 - bgt _081075DA - cmp r0, 0 - beq _081075E4 - b _08107680 -_081075DA: - cmp r0, 0x2 - beq _081075F8 - cmp r0, 0x3 - beq _08107640 - b _08107680 -_081075E4: - ldr r1, _081075F4 @ =gFameCheckerText_ListMenuCursor - adds r0, r6, 0 - mov r2, r8 - adds r3, r7, 0 - bl ListMenuPrint - b _08107680 - .align 2, 0 -_081075F4: .4byte gFameCheckerText_ListMenuCursor -_081075F8: - ldrb r0, [r6, 0x1E] - cmp r0, 0xFF - bne _08107608 - adds r0, r6, 0 - movs r1, 0 - bl ListMenuAddCursorObject - strb r0, [r6, 0x1E] -_08107608: - ldrb r5, [r6, 0x1E] - ldrb r0, [r6, 0x10] - movs r1, 0x1 - bl GetWindowAttribute - adds r4, r0, 0 - lsls r4, 19 - ldr r0, _0810763C @ =0xffff0000 - adds r4, r0 - lsrs r4, 16 - ldrb r0, [r6, 0x10] - movs r1, 0x2 - bl GetWindowAttribute - adds r2, r0, 0 - lsls r2, 3 - adds r2, r7 - subs r2, 0x1 - lsls r2, 16 - lsrs r2, 16 - adds r0, r5, 0 - adds r1, r4, 0 - movs r3, 0 - bl ListMenuUpdateCursorObject - b _08107680 - .align 2, 0 -_0810763C: .4byte 0xffff0000 -_08107640: - ldrb r0, [r6, 0x1E] - cmp r0, 0xFF - bne _08107650 - adds r0, r6, 0 - movs r1, 0x1 - bl ListMenuAddCursorObject - strb r0, [r6, 0x1E] -_08107650: - ldrb r5, [r6, 0x1E] - ldrb r0, [r6, 0x10] - movs r1, 0x1 - bl GetWindowAttribute - adds r4, r0, 0 - lsls r4, 3 - add r4, r8 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r6, 0x10] - movs r1, 0x2 - bl GetWindowAttribute - adds r2, r0, 0 - lsls r2, 3 - adds r2, r7 - lsls r2, 16 - lsrs r2, 16 - adds r0, r5, 0 - adds r1, r4, 0 - movs r3, 0x1 - bl ListMenuUpdateCursorObject -_08107680: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ListMenuDrawCursor - - thumb_func_start ListMenuAddCursorObject -ListMenuAddCursorObject: @ 810768C - push {r4,r5,lr} - sub sp, 0xC - adds r4, r0, 0 - adds r5, r1, 0 - mov r1, sp - movs r0, 0 - strb r0, [r1] - movs r0, 0xA0 - strb r0, [r1, 0x1] - ldrb r0, [r4, 0x10] - movs r1, 0x3 - bl GetWindowAttribute - mov r1, sp - lsls r0, 3 - adds r0, 0x2 - strh r0, [r1, 0x2] - ldrb r0, [r4, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetFontAttribute - mov r1, sp - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x2 - strh r0, [r1, 0x4] - movs r0, 0x80 - lsls r0, 7 - strh r0, [r1, 0x6] - ldr r0, _081076E8 @ =0x0000ffff - strh r0, [r1, 0x8] - movs r0, 0xF - strb r0, [r1, 0xA] - mov r0, sp - adds r1, r5, 0 - bl ListMenuAddCursorObjectInternal - lsls r0, 24 - lsrs r0, 24 - add sp, 0xC - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_081076E8: .4byte 0x0000ffff - thumb_func_end ListMenuAddCursorObject - - thumb_func_start ListMenuErasePrintedCursor -ListMenuErasePrintedCursor: @ 81076EC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - adds r7, r0, 0 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - ldrb r1, [r7, 0x17] - lsrs r0, r1, 6 - cmp r0, 0 - bne _08107768 - lsls r0, r1, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetFontAttribute - adds r4, r0, 0 - ldrb r0, [r7, 0x16] - lsls r0, 26 - lsrs r0, 29 - adds r4, r0 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r7, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0 - bl GetMenuCursorDimensionByFont - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldrb r0, [r7, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetMenuCursorDimensionByFont - lsls r0, 24 - lsrs r0, 24 - ldrb r6, [r7, 0x10] - ldrb r2, [r7, 0x15] - lsls r2, 28 - lsrs r1, r2, 4 - orrs r1, r2 - lsrs r1, 24 - ldrb r2, [r7, 0x13] - mov r3, r8 - muls r3, r4 - adds r4, r3, 0 - ldrb r3, [r7, 0x14] - lsls r3, 28 - lsrs r3, 28 - adds r3, r4 - lsls r3, 16 - lsrs r3, 16 - str r5, [sp] - str r0, [sp, 0x4] - adds r0, r6, 0 - bl FillWindowPixelRect -_08107768: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ListMenuErasePrintedCursor - - thumb_func_start ListMenuUpdateSelectedRowIndexAndScrollOffset -ListMenuUpdateSelectedRowIndexAndScrollOffset: @ 8107774 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 24 - ldrh r3, [r4, 0x1A] - ldrh r5, [r4, 0x18] - cmp r1, 0 - bne _081077E8 - ldrh r0, [r4, 0xE] - cmp r0, 0x1 - bne _0810778C - movs r2, 0 - b _0810779E -_0810778C: - ldrh r0, [r4, 0xE] - lsrs r2, r0, 1 - movs r1, 0x1 - ands r1, r0 - adds r2, r1 - subs r0, r2 - subs r0, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 -_0810779E: - cmp r5, 0 - bne _081077C4 - cmp r3, 0 - beq _0810782A - ldr r1, [r4] - movs r2, 0x3 - negs r2, r2 -_081077AC: - subs r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - adds r0, r5, r3 - lsls r0, 3 - adds r0, r1 - ldr r0, [r0, 0x4] - cmp r0, r2 - bne _0810782E - cmp r3, 0 - bne _081077AC - b _0810782A -_081077C4: - cmp r3, r2 - bls _081077E4 - ldr r1, [r4] - movs r6, 0x3 - negs r6, r6 -_081077CE: - subs r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - adds r0, r5, r3 - lsls r0, 3 - adds r0, r1 - ldr r0, [r0, 0x4] - cmp r0, r6 - bne _0810782E - cmp r3, r2 - bhi _081077CE -_081077E4: - subs r0, r5, 0x1 - b _08107856 -_081077E8: - ldrh r0, [r4, 0xE] - cmp r0, 0x1 - bne _081077F2 - movs r2, 0 - b _081077FC -_081077F2: - ldrh r0, [r4, 0xE] - lsrs r2, r0, 1 - movs r1, 0x1 - ands r1, r0 - adds r2, r1 -_081077FC: - adds r1, r0, 0 - ldrh r0, [r4, 0xC] - subs r0, r1 - cmp r5, r0 - bne _08107834 - subs r0, r1, 0x1 - cmp r3, r0 - bge _0810782A - ldr r2, [r4] - movs r6, 0x3 - negs r6, r6 - adds r1, r0, 0 -_08107814: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - adds r0, r5, r3 - lsls r0, 3 - adds r0, r2 - ldr r0, [r0, 0x4] - cmp r0, r6 - bne _0810782E - cmp r3, r1 - blt _08107814 -_0810782A: - movs r0, 0 - b _0810785C -_0810782E: - strh r3, [r4, 0x1A] - movs r0, 0x1 - b _0810785C -_08107834: - cmp r3, r2 - bcs _08107854 - ldr r1, [r4] - movs r6, 0x3 - negs r6, r6 -_0810783E: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - adds r0, r5, r3 - lsls r0, 3 - adds r0, r1 - ldr r0, [r0, 0x4] - cmp r0, r6 - bne _0810782E - cmp r3, r2 - bcc _0810783E -_08107854: - adds r0, r5, 0x1 -_08107856: - strh r2, [r4, 0x1A] - strh r0, [r4, 0x18] - movs r0, 0x2 -_0810785C: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end ListMenuUpdateSelectedRowIndexAndScrollOffset - - thumb_func_start ListMenuScroll -ListMenuScroll: @ 8107864 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - adds r6, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - adds r7, r5, 0 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldrh r0, [r6, 0xE] - cmp r5, r0 - bcc _0810789E - ldrb r0, [r6, 0x10] - ldrb r2, [r6, 0x15] - lsls r2, 28 - lsrs r1, r2, 4 - orrs r1, r2 - lsrs r1, 24 - bl FillWindowPixelBuffer - ldrh r1, [r6, 0x18] - ldrh r3, [r6, 0xE] - adds r0, r6, 0 - movs r2, 0 - bl ListMenuPrintEntries - b _0810798E -_0810789E: - ldrb r0, [r6, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetFontAttribute - ldrb r1, [r6, 0x16] - lsls r1, 26 - lsrs r1, 29 - adds r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - mov r1, r8 - cmp r1, 0 - bne _08107930 - ldrb r0, [r6, 0x10] - adds r2, r5, 0 - muls r2, r4 - lsls r2, 24 - lsrs r2, 24 - ldrb r1, [r6, 0x15] - lsls r1, 28 - lsrs r3, r1, 4 - orrs r3, r1 - lsrs r3, 24 - movs r1, 0x1 - bl ScrollWindow - ldrh r1, [r6, 0x18] - adds r0, r6, 0 - movs r2, 0 - adds r3, r5, 0 - bl ListMenuPrintEntries - ldrh r0, [r6, 0xE] - adds r1, r0, 0 - muls r1, r4 - adds r0, r1, 0 - ldrb r4, [r6, 0x14] - lsls r4, 28 - lsrs r4, 28 - adds r4, r0 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r6, 0x10] - movs r1, 0x3 - bl GetWindowAttribute - adds r5, r0, 0 - lsls r5, 19 - lsrs r5, 16 - ldrb r0, [r6, 0x10] - movs r1, 0x4 - bl GetWindowAttribute - lsls r0, 3 - subs r0, r4 - lsls r0, 16 - lsrs r0, 16 - ldrb r3, [r6, 0x10] - ldrb r2, [r6, 0x15] - lsls r2, 28 - lsrs r1, r2, 4 - orrs r1, r2 - lsrs r1, 24 - str r5, [sp] - str r0, [sp, 0x4] - adds r0, r3, 0 - movs r2, 0 - adds r3, r4, 0 - bl FillWindowPixelRect - b _0810798E -_08107930: - ldrb r0, [r6, 0x10] - adds r2, r7, 0 - muls r2, r4 - lsls r2, 24 - lsrs r2, 24 - ldrb r1, [r6, 0x15] - lsls r1, 28 - lsrs r3, r1, 4 - orrs r3, r1 - lsrs r3, 24 - movs r1, 0 - bl ScrollWindow - ldrh r2, [r6, 0xE] - subs r2, r7 - ldrh r1, [r6, 0x18] - adds r1, r2 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - adds r0, r6, 0 - adds r3, r7, 0 - bl ListMenuPrintEntries - ldrb r0, [r6, 0x10] - movs r1, 0x3 - bl GetWindowAttribute - lsls r0, 19 - lsrs r0, 16 - ldrb r3, [r6, 0x10] - ldrb r2, [r6, 0x15] - lsls r2, 28 - lsrs r1, r2, 4 - orrs r1, r2 - lsrs r1, 24 - str r0, [sp] - ldrb r0, [r6, 0x14] - lsls r0, 28 - lsrs r0, 28 - str r0, [sp, 0x4] - adds r0, r3, 0 - movs r2, 0 - movs r3, 0 - bl FillWindowPixelRect -_0810798E: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ListMenuScroll - - thumb_func_start ListMenuChangeSelection -ListMenuChangeSelection: @ 810799C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r4, r0, 0 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp] - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - lsls r3, 24 - lsrs r3, 24 - mov r9, r3 - ldrh r0, [r4, 0x1A] - mov r10, r0 - movs r7, 0 - movs r5, 0 - movs r0, 0 - cmp r7, r8 - bcs _08107A04 -_081079CA: - adds r6, r0, 0x1 - b _081079EA -_081079CE: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - ldrh r0, [r4, 0x18] - ldrh r1, [r4, 0x1A] - adds r0, r1 - ldr r1, [r4] - lsls r0, 3 - adds r0, r1 - ldr r1, [r0, 0x4] - movs r0, 0x3 - negs r0, r0 - cmp r1, r0 - bne _081079FC -_081079EA: - adds r0, r4, 0 - mov r1, r9 - bl ListMenuUpdateSelectedRowIndexAndScrollOffset - lsls r0, 24 - lsrs r0, 24 - orrs r5, r0 - cmp r0, 0x2 - beq _081079CE -_081079FC: - lsls r0, r6, 24 - lsrs r0, 24 - cmp r0, r8 - bcc _081079CA -_08107A04: - ldr r0, [sp] - cmp r0, 0 - beq _08107A62 - cmp r5, 0x1 - beq _08107A1A - cmp r5, 0x1 - ble _08107A16 - cmp r5, 0x3 - ble _08107A3A -_08107A16: - movs r0, 0x1 - b _08107A64 -_08107A1A: - adds r0, r4, 0 - mov r1, r10 - bl ListMenuErasePrintedCursor - adds r0, r4, 0 - bl ListMenuDrawCursor - adds r0, r4, 0 - movs r1, 0 - bl ListMenuCallSelectionChangedCallback - ldrb r0, [r4, 0x10] - movs r1, 0x2 - bl CopyWindowToVram - b _08107A62 -_08107A3A: - adds r0, r4, 0 - mov r1, r10 - bl ListMenuErasePrintedCursor - adds r0, r4, 0 - adds r1, r7, 0 - mov r2, r9 - bl ListMenuScroll - adds r0, r4, 0 - bl ListMenuDrawCursor - adds r0, r4, 0 - movs r1, 0 - bl ListMenuCallSelectionChangedCallback - ldrb r0, [r4, 0x10] - movs r1, 0x2 - bl CopyWindowToVram -_08107A62: - movs r0, 0 -_08107A64: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end ListMenuChangeSelection - - thumb_func_start ListMenuCallSelectionChangedCallback -ListMenuCallSelectionChangedCallback: @ 8107A74 - push {r4,lr} - adds r2, r0, 0 - lsls r1, 24 - lsrs r4, r1, 24 - ldr r3, [r2, 0x4] - cmp r3, 0 - beq _08107A96 - ldrh r0, [r2, 0x18] - ldrh r1, [r2, 0x1A] - adds r0, r1 - ldr r1, [r2] - lsls r0, 3 - adds r0, r1 - ldr r0, [r0, 0x4] - adds r1, r4, 0 - bl _call_via_r3 -_08107A96: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ListMenuCallSelectionChangedCallback - - thumb_func_start sub_8107A9C -sub_8107A9C: @ 8107A9C - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsls r2, 24 - lsrs r2, 24 - ldr r6, _08107AE8 @ =gUnknown_3005E60 - movs r5, 0xF - ands r0, r5 - ldrb r3, [r6] - mov r8, r3 - movs r4, 0x10 - negs r4, r4 - adds r3, r4, 0 - mov r7, r8 - ands r3, r7 - orrs r3, r0 - lsrs r1, 20 - ands r3, r5 - orrs r3, r1 - strb r3, [r6] - ands r2, r5 - ldrb r0, [r6, 0x1] - ands r4, r0 - orrs r4, r2 - strb r4, [r6, 0x1] - ldrb r0, [r6, 0x3] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r6, 0x3] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08107AE8: .4byte gUnknown_3005E60 - thumb_func_end sub_8107A9C - - thumb_func_start ListMenuDefaultCursorMoveFunc -ListMenuDefaultCursorMoveFunc: @ 8107AEC - push {lr} - lsls r1, 24 - cmp r1, 0 - bne _08107AFA - movs r0, 0x5 - bl PlaySE -_08107AFA: - pop {r0} - bx r0 - thumb_func_end ListMenuDefaultCursorMoveFunc - - thumb_func_start sub_8107B00 -sub_8107B00: @ 8107B00 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08107B24 @ =gTasks+0x8 - adds r2, r1, r0 - cmp r3, 0x10 - bhi _08107BC8 - lsls r0, r3, 2 - ldr r1, _08107B28 @ =_08107B2C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08107B24: .4byte gTasks+0x8 -_08107B28: .4byte _08107B2C - .align 2, 0 -_08107B2C: - .4byte _08107B70 - .4byte _08107B70 - .4byte _08107B74 - .4byte _08107B78 - .4byte _08107B7C - .4byte _08107B80 - .4byte _08107B84 - .4byte _08107B88 - .4byte _08107B8C - .4byte _08107B90 - .4byte _08107B96 - .4byte _08107B9E - .4byte _08107BA4 - .4byte _08107BAC - .4byte _08107BB4 - .4byte _08107BBA - .4byte _08107BC2 -_08107B70: - ldr r0, [r2, 0x4] - b _08107BCC -_08107B74: - ldrh r0, [r2, 0xC] - b _08107BCC -_08107B78: - ldrh r0, [r2, 0xE] - b _08107BCC -_08107B7C: - ldrb r0, [r2, 0x10] - b _08107BCC -_08107B80: - ldrb r0, [r2, 0x11] - b _08107BCC -_08107B84: - ldrb r0, [r2, 0x12] - b _08107BCC -_08107B88: - ldrb r0, [r2, 0x13] - b _08107BCC -_08107B8C: - ldrb r0, [r2, 0x14] - b _08107B98 -_08107B90: - ldrb r0, [r2, 0x14] - lsrs r0, 4 - b _08107BCC -_08107B96: - ldrb r0, [r2, 0x15] -_08107B98: - lsls r0, 28 - lsrs r0, 28 - b _08107BCC -_08107B9E: - ldrb r0, [r2, 0x15] - lsrs r0, 4 - b _08107BCC -_08107BA4: - ldrb r0, [r2, 0x16] - lsls r0, 29 - lsrs r0, 29 - b _08107BCC -_08107BAC: - ldrb r0, [r2, 0x16] - lsls r0, 26 - lsrs r0, 29 - b _08107BCC -_08107BB4: - ldrb r0, [r2, 0x16] - lsrs r0, 6 - b _08107BCC -_08107BBA: - ldrb r0, [r2, 0x17] - lsls r0, 26 - lsrs r0, 26 - b _08107BCC -_08107BC2: - ldrb r0, [r2, 0x17] - lsrs r0, 6 - b _08107BCC -_08107BC8: - movs r0, 0x1 - negs r0, r0 -_08107BCC: - pop {r1} - bx r1 - thumb_func_end sub_8107B00 - - thumb_func_start sub_8107BD0 -sub_8107BD0: @ 8107BD0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08107BF4 @ =gTasks+0x8 - adds r3, r1, r0 - cmp r4, 0x10 - bhi _08107CD0 - lsls r0, r4, 2 - ldr r1, _08107BF8 @ =_08107BFC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08107BF4: .4byte gTasks+0x8 -_08107BF8: .4byte _08107BFC - .align 2, 0 -_08107BFC: - .4byte _08107C40 - .4byte _08107C40 - .4byte _08107C44 - .4byte _08107C48 - .4byte _08107C4C - .4byte _08107C50 - .4byte _08107C54 - .4byte _08107C58 - .4byte _08107C5C - .4byte _08107C68 - .4byte _08107C76 - .4byte _08107C82 - .4byte _08107C90 - .4byte _08107C9C - .4byte _08107CAA - .4byte _08107CB8 - .4byte _08107CC4 -_08107C40: - str r2, [r3, 0x4] - b _08107CD0 -_08107C44: - strh r2, [r3, 0xC] - b _08107CD0 -_08107C48: - strh r2, [r3, 0xE] - b _08107CD0 -_08107C4C: - strb r2, [r3, 0x10] - b _08107CD0 -_08107C50: - strb r2, [r3, 0x11] - b _08107CD0 -_08107C54: - strb r2, [r3, 0x12] - b _08107CD0 -_08107C58: - strb r2, [r3, 0x13] - b _08107CD0 -_08107C5C: - movs r0, 0xF - ands r2, r0 - ldrb r1, [r3, 0x14] - movs r0, 0x10 - negs r0, r0 - b _08107C6E -_08107C68: - lsls r2, 4 - ldrb r1, [r3, 0x14] - movs r0, 0xF -_08107C6E: - ands r0, r1 - orrs r0, r2 - strb r0, [r3, 0x14] - b _08107CD0 -_08107C76: - movs r0, 0xF - ands r2, r0 - ldrb r1, [r3, 0x15] - movs r0, 0x10 - negs r0, r0 - b _08107C88 -_08107C82: - lsls r2, 4 - ldrb r1, [r3, 0x15] - movs r0, 0xF -_08107C88: - ands r0, r1 - orrs r0, r2 - strb r0, [r3, 0x15] - b _08107CD0 -_08107C90: - movs r0, 0x7 - ands r2, r0 - ldrb r1, [r3, 0x16] - movs r0, 0x8 - negs r0, r0 - b _08107CB0 -_08107C9C: - movs r0, 0x7 - ands r2, r0 - lsls r2, 3 - ldrb r1, [r3, 0x16] - movs r0, 0x39 - negs r0, r0 - b _08107CB0 -_08107CAA: - lsls r2, 6 - ldrb r1, [r3, 0x16] - movs r0, 0x3F -_08107CB0: - ands r0, r1 - orrs r0, r2 - strb r0, [r3, 0x16] - b _08107CD0 -_08107CB8: - movs r0, 0x3F - ands r2, r0 - ldrb r1, [r3, 0x17] - movs r0, 0x40 - negs r0, r0 - b _08107CCA -_08107CC4: - lsls r2, 6 - ldrb r1, [r3, 0x17] - movs r0, 0x3F -_08107CCA: - ands r0, r1 - orrs r0, r2 - strb r0, [r3, 0x17] -_08107CD0: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8107BD0 - - thumb_func_start sub_8107CD8 -sub_8107CD8: @ 8107CD8 - push {r4,lr} - adds r4, r0, 0 - adds r0, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r0, 16 - lsrs r0, 16 - bl sub_80971CC - adds r1, r4, 0 - movs r2, 0x20 - bl LoadPalette - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8107CD8 - - thumb_func_start sub_8107CF8 -sub_8107CF8: @ 8107CF8 - push {r4-r6,lr} - sub sp, 0x8 - adds r6, r0, 0 - adds r0, r1, 0 - adds r1, r2, 0 - adds r4, r3, 0 - ldr r5, [sp, 0x18] - lsls r6, 24 - lsrs r6, 24 - lsls r0, 16 - lsrs r0, 16 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - movs r2, 0x1 - bl GetMonIconPtr - adds r1, r0, 0 - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - adds r0, r6, 0 - adds r2, r4, 0 - adds r3, r5, 0 - bl BlitBitmapToWindow - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8107CF8 - - thumb_func_start sub_8107D38 -sub_8107D38: @ 8107D38 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0 - beq _08107D4A - cmp r1, 0x1 - beq _08107D54 -_08107D4A: - ldr r0, _08107D50 @ =gUnknown_8E95D9C - b _08107D56 - .align 2, 0 -_08107D50: .4byte gUnknown_8E95D9C -_08107D54: - ldr r0, _08107D64 @ =gUnknown_8E95DBC -_08107D56: - adds r1, r2, 0 - movs r2, 0x20 - bl LoadPalette - pop {r0} - bx r0 - .align 2, 0 -_08107D64: .4byte gUnknown_8E95DBC - thumb_func_end sub_8107D38 - - thumb_func_start blit_move_info_icon -blit_move_info_icon: @ 8107D68 - push {r4,r5,lr} - sub sp, 0x18 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsls r2, 16 - lsrs r2, 16 - lsls r3, 16 - lsrs r3, 16 - ldr r4, _08107DAC @ =gUnknown_8452C94 - lsrs r1, 22 - adds r1, r4 - ldrh r5, [r1, 0x2] - lsls r5, 5 - ldr r4, _08107DB0 @ =gUnknown_8E95DDC - adds r5, r4 - movs r4, 0x80 - str r4, [sp] - str r4, [sp, 0x4] - str r2, [sp, 0x8] - str r3, [sp, 0xC] - ldrb r2, [r1] - str r2, [sp, 0x10] - ldrb r1, [r1, 0x1] - str r1, [sp, 0x14] - adds r1, r5, 0 - movs r2, 0 - movs r3, 0 - bl BlitBitmapRectToWindow - add sp, 0x18 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08107DAC: .4byte gUnknown_8452C94 -_08107DB0: .4byte gUnknown_8E95DDC - thumb_func_end blit_move_info_icon - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/player_pc.s b/asm/player_pc.s index 4d917504a..dfcac85f4 100644 --- a/asm/player_pc.s +++ b/asm/player_pc.s @@ -1134,7 +1134,7 @@ sub_80EBF40: @ 80EBF40 cmp r0, 0 bne _080EBFEA ldrb r0, [r4, 0x16] - bl ListMenuHandleInput + bl ListMenu_ProcessInput adds r6, r0, 0 ldrb r0, [r4, 0x16] ldr r7, _080EBF9C @ =gUnknown_203AAC6 @@ -1174,7 +1174,7 @@ _080EBFB6: ldrb r0, [r4, 0x16] adds r1, r7, 0 mov r2, r8 - bl DestroyListMenu + bl DestroyListMenuTask movs r0, 0 bl ScheduleBgCopyTilemapToVram mov r1, r8 @@ -1288,7 +1288,7 @@ sub_80EC094: @ 80EC094 ldrb r0, [r4, 0x16] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask movs r0, 0 bl ScheduleBgCopyTilemapToVram bl sub_810EDB0 diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s index 80cc1ab5d..268b65fd8 100644 --- a/asm/pokedex_screen.s +++ b/asm/pokedex_screen.s @@ -621,7 +621,7 @@ _08102A10: .4byte gUnknown_203ACF0 _08102A14: ldr r0, [r4] ldrb r0, [r0, 0x17] - bl ListMenuHandleInput + bl ListMenu_ProcessInput ldr r1, [r4] str r0, [r1, 0xC] ldrb r0, [r1, 0x17] @@ -754,7 +754,7 @@ _08102B24: adds r1, r2, 0 adds r1, 0x12 adds r2, 0x10 - bl DestroyListMenu + bl DestroyListMenuTask movs r0, 0x20 str r0, [sp] movs r0, 0x14 @@ -804,7 +804,7 @@ _08102B94: adds r1, r2, 0 adds r1, 0x12 adds r2, 0x10 - bl DestroyListMenu + bl DestroyListMenuTask movs r0, 0x1 bl HideBg ldr r0, [r4] @@ -832,7 +832,7 @@ _08102BD8: adds r1, r2, 0 adds r1, 0x12 adds r2, 0x10 - bl DestroyListMenu + bl DestroyListMenuTask movs r0, 0x1 bl HideBg ldr r0, [r4] @@ -1238,7 +1238,7 @@ _08102F60: movs r0, 0x1 movs r1, 0 movs r2, 0x3 - bl sub_8107A9C + bl ListMenuOverrideSetColors b _08102F7A .align 2, 0 _08102F6C: .4byte gUnknown_203ACF0 @@ -1246,7 +1246,7 @@ _08102F70: movs r0, 0xA movs r1, 0 movs r2, 0xB - bl sub_8107A9C + bl ListMenuOverrideSetColors _08102F7A: pop {r0} bx r0 @@ -1379,7 +1379,7 @@ _08103098: ldr r0, [r4] adds r0, 0x41 ldrb r0, [r0] - bl ListMenuHandleInput + bl ListMenu_ProcessInput ldr r1, [r4] str r0, [r1, 0x30] ldrb r0, [r1, 0x17] @@ -1700,7 +1700,7 @@ _08103362: ldr r0, [r4] adds r0, 0x41 ldrb r0, [r0] - bl ListMenuHandleInput + bl ListMenu_ProcessInput ldr r1, [r4] str r0, [r1, 0x30] ldrb r0, [r1, 0x17] @@ -2433,7 +2433,7 @@ _08103964: ldrh r3, [r0, 0x3C] _0810396E: adds r0, r5, 0 - bl Unused_ListMenuInit2 + bl ListMenuInitInRect ldr r1, [r4] adds r1, 0x41 strb r0, [r1] @@ -2467,7 +2467,7 @@ _0810399C: adds r1, r2, 0 adds r1, 0x36 adds r2, 0x34 - bl DestroyListMenu + bl DestroyListMenuTask b _081039E8 .align 2, 0 _081039B4: .4byte gUnknown_203ACF0 @@ -2480,7 +2480,7 @@ _081039B8: adds r1, r2, 0 adds r1, 0x3A adds r2, 0x38 - bl DestroyListMenu + bl DestroyListMenuTask b _081039E8 .align 2, 0 _081039D0: .4byte gUnknown_203ACF0 @@ -2493,7 +2493,7 @@ _081039D4: adds r1, r2, 0 adds r1, 0x3E adds r2, 0x3C - bl DestroyListMenu + bl DestroyListMenuTask _081039E8: pop {r0} bx r0 @@ -2572,7 +2572,7 @@ sub_8103A40: @ 8103A40 movs r1, 0 movs r2, 0x28 adds r3, r6, 0 - bl blit_move_info_icon + bl BlitMoveInfoIcon ldr r0, _08103AC4 @ =gBaseStats lsls r4, r5, 3 subs r4, r5 @@ -2587,7 +2587,7 @@ sub_8103A40: @ 8103A40 lsrs r1, 24 movs r2, 0x78 adds r3, r6, 0 - bl blit_move_info_icon + bl BlitMoveInfoIcon ldrb r1, [r4, 0x7] cmp r5, r1 beq _08103AB6 @@ -2599,7 +2599,7 @@ sub_8103A40: @ 8103A40 lsrs r1, 24 movs r2, 0x98 adds r3, r6, 0 - bl blit_move_info_icon + bl BlitMoveInfoIcon _08103AB6: add sp, 0x4 pop {r4-r7} @@ -7753,7 +7753,7 @@ _08106478: lsrs r1, 24 movs r2, 0 movs r3, 0x1 - bl blit_move_info_icon + bl BlitMoveInfoIcon ldrb r1, [r4, 0x7] cmp r5, r1 beq _08106504 @@ -7765,7 +7765,7 @@ _08106478: lsrs r1, 24 movs r2, 0x20 movs r3, 0x1 - bl blit_move_info_icon + bl BlitMoveInfoIcon _08106504: ldr r7, _081066B8 @ =gUnknown_203ACF0 ldr r0, [r7] diff --git a/asm/pokemon_icon.s b/asm/pokemon_icon.s index a6a83033a..4eb654a50 100644 --- a/asm/pokemon_icon.s +++ b/asm/pokemon_icon.s @@ -519,8 +519,8 @@ _080971C0: _080971C8: .4byte gUnknown_83D4038 thumb_func_end sub_8097198 - thumb_func_start sub_80971CC -sub_80971CC: @ 80971CC + thumb_func_start GetValidMonIconPalettePtr +GetValidMonIconPalettePtr: @ 80971CC push {lr} lsls r0, 16 lsrs r2, r0, 16 @@ -542,7 +542,7 @@ _080971DC: .align 2, 0 _080971F0: .4byte gUnknown_83D4038 _080971F4: .4byte gUnknown_83D3E80 - thumb_func_end sub_80971CC + thumb_func_end GetValidMonIconPalettePtr thumb_func_start sub_80971F8 sub_80971F8: @ 80971F8 diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 62afb042c..2fa836876 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -6636,7 +6636,7 @@ _08137CA4: adds r3, r2 lsrs r3, 16 movs r2, 0x3 - bl blit_move_info_icon + bl BlitMoveInfoIcon _08137CDE: adds r0, r4, 0x1 lsls r0, 24 @@ -6660,7 +6660,7 @@ _08137CDE: lsrs r1, 24 movs r2, 0x3 movs r3, 0x75 - bl blit_move_info_icon + bl BlitMoveInfoIcon _08137D0E: pop {r4,r5} pop {r0} @@ -8325,7 +8325,7 @@ _08138A62: lsrs r1, 24 movs r2, 0x2F movs r3, 0x23 - bl blit_move_info_icon + bl BlitMoveInfoIcon ldr r1, [r6] adds r4, r1, r4 ldr r3, _08138AB8 @ =0x00003221 @@ -8342,7 +8342,7 @@ _08138A62: lsrs r1, 24 movs r2, 0x53 movs r3, 0x23 - bl blit_move_info_icon + bl BlitMoveInfoIcon b _08138B0E .align 2, 0 _08138AB0: .4byte 0x00003003 @@ -8365,7 +8365,7 @@ _08138ABC: lsrs r1, 24 movs r2, 0 movs r3, 0x3 - bl blit_move_info_icon + bl BlitMoveInfoIcon ldr r2, [r6] adds r4, r2, r4 ldr r1, _08138B1C @ =0x00003221 @@ -8381,7 +8381,7 @@ _08138ABC: lsrs r1, 24 movs r2, 0x24 movs r3, 0x3 - bl blit_move_info_icon + bl BlitMoveInfoIcon _08138B04: ldr r0, [r6] adds r0, r5 diff --git a/asm/shop.s b/asm/shop.s index 0ef2de1c0..01bca8033 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -2164,7 +2164,7 @@ sub_809BBC0: @ 809BBC0 cmp r0, 0 bne _0809BC8E ldrb r0, [r5, 0xE] - bl ListMenuHandleInput + bl ListMenu_ProcessInput adds r4, r0, 0 ldrb r0, [r5, 0xE] ldr r7, _0809BC08 @ =gUnknown_2039942 @@ -2691,7 +2691,7 @@ sub_809C04C: @ 809C04C ldrb r0, [r2, 0xE] movs r1, 0 movs r2, 0 - bl DestroyListMenu + bl DestroyListMenuTask bl sub_809B604 ldr r0, _0809C090 @ =CB2_ReturnToField bl SetMainCallback2 diff --git a/common_syms/list_menu.txt b/common_syms/list_menu.txt new file mode 100644 index 000000000..ed5343618 --- /dev/null +++ b/common_syms/list_menu.txt @@ -0,0 +1,2 @@ +gListMenuOverride +gMultiuseListMenuTemplate diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s index bbd53eca8..d16de696f 100644 --- a/data/data_83FECCC.s +++ b/data/data_83FECCC.s @@ -759,8 +759,7 @@ gUnknown_84524C4:: @ 84524C4 gUnknown_8452C4C:: @ 8452C4C .incbin "baserom.gba", 0x452C4C, 0x48 -gUnknown_8452C94:: @ 8452C94 - .incbin "baserom.gba", 0x452C94, 0x60 + .section .rodata.8452CF4 gUnknown_8452CF4:: @ 8452CF4 .incbin "baserom.gba", 0x452CF4, 0x8 diff --git a/data/graphics.s b/data/graphics.s index b655cadc7..a8018aaf3 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -16029,14 +16029,14 @@ gFile_graphics_mail_retro_map_tilemap:: @ 8E95C88 .incbin "graphics/mail/retro/map.bin.lz" .align 2 -gUnknown_8E95D9C:: @ 8E95D9C - .incbin "baserom.gba", 0xE95D9C, 0x20 @UNKNOWN +gFireRedMenuElements1_Pal:: @ 8E95D9C + .incbin "graphics/interface/menu1.gbapal" -gUnknown_8E95DBC:: @ 8E95DBC - .incbin "baserom.gba", 0xE95DBC, 0x20 @UNKNOWN +gFireRedMenuElements2_Pal:: @ 8E95DBC + .incbin "graphics/interface/menu2.gbapal" -gUnknown_8E95DDC:: @ 8E95DDC - .incbin "baserom.gba", 0xE95DDC, 0x2000 @UNKNOWN +gFireRedMenuElements_Gfx:: @ 8E95DDC + .incbin "graphics/interface/menu.4bpp" gUnknown_8E97DDC:: @ 8E97DDC .incbin "baserom.gba", 0xE97DDC, 0x20 @UNKNOWN diff --git a/graphics/interface/menu.png b/graphics/interface/menu.png Binary files differnew file mode 100644 index 000000000..4a9e67954 --- /dev/null +++ b/graphics/interface/menu.png diff --git a/graphics/interface/menu1.pal b/graphics/interface/menu1.pal new file mode 100644 index 000000000..ab57da621 --- /dev/null +++ b/graphics/interface/menu1.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +123 156 131 +238 238 238 +0 0 0 +213 213 189 +172 164 123 +255 131 123 +238 49 0 +222 49 16 +197 49 41 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/interface/menu2.pal b/graphics/interface/menu2.pal new file mode 100644 index 000000000..16a03be2c --- /dev/null +++ b/graphics/interface/menu2.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +123 156 131 +238 49 0 +246 131 49 +255 180 16 +222 230 49 +123 205 82 +156 222 222 +106 148 246 +164 65 164 +172 172 123 +222 222 197 +189 164 57 +255 90 139 +82 123 139 +65 65 65 +255 255 255 diff --git a/include/graphics.h b/include/graphics.h index e12a6755b..e8503609e 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -32,6 +32,9 @@ extern const u8 gInterfacePal_LuxuryBall[]; extern const u8 gInterfaceGfx_PremierBall[]; extern const u8 gInterfacePal_PremierBall[]; extern const u8 gOpenPokeballGfx[]; +extern const u8 gFireRedMenuElements_Gfx[]; +extern const u16 gFireRedMenuElements1_Pal[]; +extern const u16 gFireRedMenuElements2_Pal[]; extern const u8 gItemIcon_QuestionMark[]; extern const u8 gItemIconPalette_QuestionMark[]; diff --git a/include/list_menu.h b/include/list_menu.h index 5614580eb..df53bb529 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -70,20 +70,18 @@ struct ListMenuWindowRect u8 palNum; }; -extern struct ListMenuTemplate gUnknown_03006310; extern struct ListMenuTemplate gMultiuseListMenuTemplate; -// Exported ROM declarations - -u8 ListMenuInit(struct ListMenuTemplate *template, u16 a1, u16 a2); -s32 ListMenuHandleInput(u8 id); -void ListMenuGetScrollAndRow(u8 a0, u16 *a1, u16 *a2); -void sub_81AE6C8(u8 a0, u16 *a1, u16 *a2); -void DestroyListMenu(u8, u16 *, u16 *); -u16 ListMenuGetYCoordForPrintingArrowCursor(u8); -void sub_8107D38(u8, u8); s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum); -void ListMenuDefaultCursorMoveFunc(s32, u8, struct ListMenu *); -void sub_8107BD0(u8 taskId, u8 attr, s32 value); +u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow); +u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *rect, u16 scrollOffset, u16 selectedRow); +s32 ListMenu_ProcessInput(u8 listTaskId); +void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow); +void RedrawListMenu(u8 listTaskId); +void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow); +u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId); +void ListMenuOverrideSetColors(u8 cursorPal, u8 fillValue, u8 cursorShadowPal); +void ListMenuDefaultCursorMoveFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); +void ListMenuSetUnkIndicatorsStructField(u8 taskId, u8 field, s32 value); #endif //GUARD_LIST_MENU_H diff --git a/include/menu.h b/include/menu.h index 3231587de..19efc3ad9 100644 --- a/include/menu.h +++ b/include/menu.h @@ -27,12 +27,10 @@ void InitMenuInUpperLeftCornerPlaySoundWhenAPressed(u8 idx, u8 nstrs,u8); u8 GetMenuCursorPos(void); s8 ProcessMenuInput(void); s8 ProcessMenuInputNoWrapAround(void); -void blit_move_info_icon(u8 winId, u8 a2, u16 x, u16 y); void ResetTempTileDataBuffers(void); void *DecompressAndCopyTileDataToVram(u8 bg_id, const void *src, u32 size, u16 offset, u8 mode); bool8 FreeTempTileDataBuffersIfPossible(void); u64 sub_8198A50(struct WindowTemplate*, u8, u8, u8, u8, u8, u8, u16); // returns something but it isn't used, fix when menu.s is decomp'd -//void CreateYesNoMenu(const struct WindowTemplate *windowTemplate, u16 borderFirstTileNum, u8 borderPalette, u8 initialCursorPos); s8 Menu_ProcessInputNoWrapClearOnChoose(void); void DoScheduledBgTilemapCopiesToVram(void); void ClearScheduledBgCopiesToVram(void); @@ -54,4 +52,9 @@ void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 l void ClearMenuWindow_BorderThickness2(u8 windowId, u8 a1); void PrintTextArray(u8, u8, u8, u8, u8, u8, const struct MenuAction *); +void sub_8107CD8(u8 palOffset, u16 speciesId); +void sub_8107CF8(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y); +void sub_8107D38(u8, u8); +void BlitMoveInfoIcon(u8 windowId, u8 iconId, u16 x, u16 y); + #endif // GUARD_MENU_H diff --git a/include/menu_indicators.h b/include/menu_indicators.h index fb6b65ecc..156dcd694 100644 --- a/include/menu_indicators.h +++ b/include/menu_indicators.h @@ -77,5 +77,7 @@ u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind); u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor); void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y); void ListMenuRemoveRedOutlineCursorObject(u8 taskId); +void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind); +void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind); #endif //GUARD_MENU_INDICATORS_H diff --git a/ld_script.txt b/ld_script.txt index e493157c8..2867cd998 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -226,7 +226,7 @@ SECTIONS { asm/link_rfu_2.o(.text); asm/link_rfu.o(.text); asm/pokedex_screen.o(.text); - asm/list_menu.o(.text); + src/list_menu.o(.text); asm/item_menu.o(.text); src/save_location.o(.text); src/bag.o(.text); @@ -424,6 +424,8 @@ SECTIONS { data/data_83FECCC.o(.rodata.841EE44); src/new_menu_helpers.o(.rodata); data/data_83FECCC.o(.rodata.841F4B4); + src/list_menu.o(.rodata); + data/data_83FECCC.o(.rodata.8452CF4); src/save_location.o(.rodata); src/bag.o(.rodata); src/trainer_pokemon_sprites.o(.rodata); diff --git a/src/daycare.c b/src/daycare.c index 7a2cb0698..abc3b23ca 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1533,7 +1533,7 @@ static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y) static void Task_HandleDaycareLevelMenuInput(u8 taskId) { - u32 input = ListMenuHandleInput(gTasks[taskId].tMenuListTaskId); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuListTaskId); if (gMain.newKeys & A_BUTTON) { @@ -1547,7 +1547,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) gSpecialVar_Result = 2; break; } - DestroyListMenu(gTasks[taskId].tMenuListTaskId, NULL, NULL); + DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL); ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); RemoveWindow(gTasks[taskId].tWindowId); DestroyTask(taskId); @@ -1556,7 +1556,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) else if (gMain.newKeys & B_BUTTON) { gSpecialVar_Result = 2; - DestroyListMenu(gTasks[taskId].tMenuListTaskId, NULL, NULL); + DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL); ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); RemoveWindow(gTasks[taskId].tWindowId); DestroyTask(taskId); diff --git a/src/fame_checker.c b/src/fame_checker.c index bf99bdf56..aa1684981 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -580,7 +580,7 @@ static void Task_TopMenuHandleInput(u8 taskId) } else if (JOY_NEW(A_BUTTON)) { - cursorPos = ListMenuHandleInput(0); + cursorPos = ListMenu_ProcessInput(0); if (cursorPos == sFameCheckerData->numUnlockedPersons - 1) // CANCEL task->func = Task_StartToCloseFameChecker; else if (sFameCheckerData->inPickMode) @@ -615,7 +615,7 @@ static void Task_TopMenuHandleInput(u8 taskId) task->func = Task_StartToCloseFameChecker; } else - ListMenuHandleInput(0); + ListMenu_ProcessInput(0); } } @@ -853,7 +853,7 @@ static void Task_DestroyAssetsAndCloseFameChecker(u8 taskId) FreeQuestionMarkSpriteResources(); FreeListMenuSelectorArrowPairResources(); SetMainCallback2(sFameCheckerData->savedCallback); - DestroyListMenu(sFameCheckerData->listMenuTaskId, NULL, NULL); + DestroyListMenuTask(sFameCheckerData->listMenuTaskId, NULL, NULL); Free(sBg3TilemapBuffer); Free(sBg1TilemapBuffer); Free(sBg2TilemapBuffer); diff --git a/src/item_pc.c b/src/item_pc.c index 2d30416c9..abafaa8d9 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -653,7 +653,7 @@ static void Task_ItemPcTurnOff2(u8 taskId) if (!gPaletteFade.active && !sub_80A0AAC()) { - DestroyListMenu(data[0], &sListMenuState.scroll, &sListMenuState.row); + DestroyListMenuTask(data[0], &sListMenuState.scroll, &sListMenuState.row); if (sStateDataPtr->savedCallback != NULL) SetMainCallback2(sStateDataPtr->savedCallback); else @@ -737,7 +737,7 @@ static void Task_ItemPcMain(u8 taskId) return; } } - input = ListMenuHandleInput(data[0]); + input = ListMenu_ProcessInput(data[0]); ListMenuGetScrollAndRow(data[0], &sListMenuState.scroll, &sListMenuState.row); switch (input) { @@ -772,7 +772,7 @@ static void ItemPc_MoveItemModeInit(u8 taskId, s16 pos) { s16 * data = gTasks[taskId].data; - sub_8107BD0(data[0], 16, 1); + ListMenuSetUnkIndicatorsStructField(data[0], 16, 1); data[1] = pos; sStateDataPtr->moveModeOrigPos = pos; StringCopy(gStringVar1, ItemId_GetName(ItemPc_GetItemIdBySlotId(data[1]))); @@ -789,7 +789,7 @@ static void Task_ItemPcMoveItemModeRun(u8 taskId) { s16 * data = gTasks[taskId].data; - ListMenuHandleInput(data[0]); + ListMenu_ProcessInput(data[0]); ListMenuGetScrollAndRow(data[0], &sListMenuState.scroll, &sListMenuState.row); sub_80986A8(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); if (JOY_NEW(A_BUTTON | SELECT_BUTTON)) @@ -814,7 +814,7 @@ static void ItemPc_InsertItemIntoNewSlot(u8 taskId, u32 pos) else { ItemMenu_MoveItemSlotToNewPositionInArray(gSaveBlock1Ptr->pcItems, data[1], pos); - DestroyListMenu(data[0], &sListMenuState.scroll, &sListMenuState.row); + DestroyListMenuTask(data[0], &sListMenuState.scroll, &sListMenuState.row); if (data[1] < pos) sListMenuState.row--; ItemPc_BuildListMenuTemplate(); @@ -828,7 +828,7 @@ static void ItemPc_MoveItemModeCancel(u8 taskId, u32 pos) { s16 * data = gTasks[taskId].data; - DestroyListMenu(data[0], &sListMenuState.scroll, &sListMenuState.row); + DestroyListMenuTask(data[0], &sListMenuState.scroll, &sListMenuState.row); if (data[1] < pos) sListMenuState.row--; ItemPc_BuildListMenuTemplate(); @@ -947,7 +947,7 @@ static void Task_ItemPcCleanUpWithdraw(u8 taskId) ItemPc_DestroySubwindow(2); PutWindowTilemap(1); - DestroyListMenu(data[0], &sListMenuState.scroll, &sListMenuState.row); + DestroyListMenuTask(data[0], &sListMenuState.scroll, &sListMenuState.row); ItemPc_CountPcItems(); ItemPc_SetCursorPosition(); ItemPc_BuildListMenuTemplate(); diff --git a/src/list_menu.c b/src/list_menu.c new file mode 100644 index 000000000..a819ffc22 --- /dev/null +++ b/src/list_menu.c @@ -0,0 +1,790 @@ +#include "global.h" +#include "menu.h" +#include "list_menu.h" +#include "menu_indicators.h" +#include "new_menu_helpers.h" +#include "window.h" +#include "text_window.h" +#include "main.h" +#include "task.h" +#include "graphics.h" +#include "decompress.h" +#include "palette.h" +#include "malloc.h" +#include "strings.h" +#include "sound.h" +#include "pokemon_icon.h" +#include "constants/songs.h" + +struct UnkIndicatorsStruct +{ + u8 field_0; + u16 *field_4; + u16 field_8; + u16 field_A; + u16 field_C; + u16 field_E; + u8 field_10; + u8 field_11; + u8 field_12; + u8 field_13; + u8 field_14_0:4; + u8 field_14_1:4; + u8 field_15_0:4; + u8 field_15_1:4; + u8 field_16_0:3; + u8 field_16_1:3; + u8 field_16_2:2; + u8 field_17_0:6; + u8 field_17_1:2; +}; + +struct MysteryGiftLinkMenuStruct +{ + s32 currItemId; + u8 state; + u8 windowId; + u8 listTaskId; +}; + +struct ListMenuOverride +{ + u8 cursorPal:4; + u8 fillValue:4; + u8 cursorShadowPal:4; + u8 lettersSpacing:6; + u8 field_2_2:6; // unused + u8 fontId:7; + bool8 enabled:1; +}; + +struct MoveMenuInfoIcon +{ + u8 width; + u8 height; + u16 offset; +}; + +static EWRAM_DATA struct MysteryGiftLinkMenuStruct sMysteryGiftLinkMenu = {0}; + +struct ListMenuOverride gListMenuOverride; +struct ListMenuTemplate gMultiuseListMenuTemplate; + +static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow); +static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown); +static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count); +static void ListMenuDrawCursor(struct ListMenu *list); +static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 onInit); +static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind); + +const struct MoveMenuInfoIcon gMoveMenuInfoIcons[] = +{ + { 12, 12, 0x00 }, // Unused + { 32, 12, 0x20 }, // Normal icon + { 32, 12, 0x64 }, // Fight icon + { 32, 12, 0x60 }, // Flying icon + { 32, 12, 0x80 }, // Poison icon + { 32, 12, 0x48 }, // Ground icon + { 32, 12, 0x44 }, // Rock icon + { 32, 12, 0x6C }, // Bug icon + { 32, 12, 0x68 }, // Ghost icon + { 32, 12, 0x88 }, // Steel icon + { 32, 12, 0xA4 }, // ??? (Mystery) icon + { 32, 12, 0x24 }, // Fire icon + { 32, 12, 0x28 }, // Water icon + { 32, 12, 0x2C }, // Grass icon + { 32, 12, 0x40 }, // Electric icon + { 32, 12, 0x84 }, // Psychic icon + { 32, 12, 0x4C }, // Ice icon + { 32, 12, 0xA0 }, // Dragon icon + { 32, 12, 0x8C }, // Dark icon + { 40, 12, 0xA8 }, // -Type- icon + { 40, 12, 0xC0 }, // -Power- icon + { 40, 12, 0xC8 }, // -Accuracy- icon + { 40, 12, 0xE0 }, // -PP- icon + { 40, 12, 0xE8 }, // -Effect- icon +}; + +static void ListMenuDummyTask(u8 taskId) +{ +} + +s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum) +{ + switch (sMysteryGiftLinkMenu.state) + { + case 0: + default: + sMysteryGiftLinkMenu.windowId = AddWindow(windowTemplate); + switch (arg2) + { + case 2: + TextWindow_SetUserSelectedFrame(sMysteryGiftLinkMenu.windowId, tileNum, palNum); + case 1: + DrawTextBorderOuter(sMysteryGiftLinkMenu.windowId, tileNum, palNum / 16); + break; + } + gMultiuseListMenuTemplate = *listMenuTemplate; + gMultiuseListMenuTemplate.windowId = sMysteryGiftLinkMenu.windowId; + sMysteryGiftLinkMenu.listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + CopyWindowToVram(sMysteryGiftLinkMenu.windowId, 1); + sMysteryGiftLinkMenu.state = 1; + break; + case 1: + sMysteryGiftLinkMenu.currItemId = ListMenu_ProcessInput(sMysteryGiftLinkMenu.listTaskId); + if (gMain.newKeys & A_BUTTON) + { + sMysteryGiftLinkMenu.state = 2; + } + if (gMain.newKeys & B_BUTTON) + { + sMysteryGiftLinkMenu.currItemId = LIST_CANCEL; + sMysteryGiftLinkMenu.state = 2; + } + if (sMysteryGiftLinkMenu.state == 2) + { + if (!arg2) + { + ClearWindowTilemap(sMysteryGiftLinkMenu.windowId); + } + else + { + switch (arg2) + { + case 0: // can never be reached, because of the if statement above + ClearStdWindowAndFrame(sMysteryGiftLinkMenu.windowId, FALSE); + break; + case 2: + case 1: + ClearStdWindowAndFrame(sMysteryGiftLinkMenu.windowId, FALSE); + break; + } + } + CopyWindowToVram(sMysteryGiftLinkMenu.windowId, 1); + } + break; + case 2: + DestroyListMenuTask(sMysteryGiftLinkMenu.listTaskId, NULL, NULL); + RemoveWindow(sMysteryGiftLinkMenu.windowId); + sMysteryGiftLinkMenu.state = 0; + return sMysteryGiftLinkMenu.currItemId; + } + return LIST_NOTHING_CHOSEN; +} + +u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow) +{ + u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow); + PutWindowTilemap(listMenuTemplate->windowId); + CopyWindowToVram(listMenuTemplate->windowId, 2); + return taskId; +} + +u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *rect, u16 scrollOffset, u16 selectedRow) +{ + s32 i; + u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow); + + for (i = 0; rect[i].palNum != 0xFF; i++) + PutWindowRectTilemapOverridePalette(listMenuTemplate->windowId, rect[i].x, rect[i].y, rect[i].width, rect[i].height, rect[i].palNum); + CopyWindowToVram(listMenuTemplate->windowId, 2); + return taskId; +} + +s32 ListMenu_ProcessInput(u8 listTaskId) +{ + struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data; + + if (gMain.newKeys & A_BUTTON) + { + return list->template.items[list->scrollOffset + list->selectedRow].index; + } + else if (gMain.newKeys & B_BUTTON) + { + return LIST_CANCEL; + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + ListMenuChangeSelection(list, TRUE, 1, FALSE); + return LIST_NOTHING_CHOSEN; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + ListMenuChangeSelection(list, TRUE, 1, TRUE); + return LIST_NOTHING_CHOSEN; + } + else // try to move by one window scroll + { + bool16 rightButton, leftButton; + switch (list->template.scrollMultiple) + { + case LIST_NO_MULTIPLE_SCROLL: + default: + leftButton = FALSE; + rightButton = FALSE; + break; + case LIST_MULTIPLE_SCROLL_DPAD: + leftButton = gMain.newAndRepeatedKeys & DPAD_LEFT; + rightButton = gMain.newAndRepeatedKeys & DPAD_RIGHT; + break; + case LIST_MULTIPLE_SCROLL_L_R: + leftButton = gMain.newAndRepeatedKeys & L_BUTTON; + rightButton = gMain.newAndRepeatedKeys & R_BUTTON; + break; + } + if (leftButton) + { + ListMenuChangeSelection(list, TRUE, list->template.maxShowed, FALSE); + return LIST_NOTHING_CHOSEN; + } + else if (rightButton) + { + ListMenuChangeSelection(list, TRUE, list->template.maxShowed, TRUE); + return LIST_NOTHING_CHOSEN; + } + else + { + return LIST_NOTHING_CHOSEN; + } + } +} + +#define TASK_NONE 0xFF + +void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow) +{ + struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data; + + if (scrollOffset != NULL) + *scrollOffset = list->scrollOffset; + if (selectedRow != NULL) + *selectedRow = list->selectedRow; + + if (list->taskId != TASK_NONE) + ListMenuRemoveCursorObject(list->taskId, list->template.cursorKind - 2); + + DestroyTask(listTaskId); +} + +void RedrawListMenu(u8 listTaskId) +{ + struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data; + + FillWindowPixelBuffer(list->template.windowId, PIXEL_FILL(list->template.fillValue)); + ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed); + ListMenuDrawCursor(list); + CopyWindowToVram(list->template.windowId, 2); +} + +static void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShadowPal) +{ + struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data; + + list->template.cursorPal = cursorPal; + list->template.fillValue = fillValue; + list->template.cursorShadowPal = cursorShadowPal; +} + +static void ChangeListMenuCoords(u8 listTaskId, u8 x, u8 y) +{ + struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data; + + SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT, x); + SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP, y); +} + +static s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset, u32 selectedRow, u16 keys, u16 *newScrollOffset, u16 *newSelectedRow) +{ + struct ListMenu list; + + list.template = *template; + list.scrollOffset = scrollOffset; + list.selectedRow = selectedRow; + list.unk_1C = 0; + list.unk_1D = 0; + if (keys == DPAD_UP) + ListMenuChangeSelection(&list, FALSE, 1, FALSE); + if (keys == DPAD_DOWN) + ListMenuChangeSelection(&list, FALSE, 1, TRUE); + + if (newScrollOffset != NULL) + *newScrollOffset = list.scrollOffset; + if (newSelectedRow != NULL) + *newSelectedRow = list.selectedRow; + return LIST_NOTHING_CHOSEN; +} + +static void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId) +{ + struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data; + + if (arrayId != NULL) + *arrayId = list->scrollOffset + list->selectedRow; +} + +void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow) +{ + struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data; + + if (scrollOffset != NULL) + *scrollOffset = list->scrollOffset; + if (selectedRow != NULL) + *selectedRow = list->selectedRow; +} + +u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId) +{ + struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data; + u8 yMultiplier = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + list->template.itemVerticalPadding; + + return list->selectedRow * yMultiplier + list->template.upText_Y; +} + +static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow) +{ + u8 listTaskId = CreateTask(ListMenuDummyTask, 0); + struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data; + + list->template = *listMenuTemplate; + list->scrollOffset = scrollOffset; + list->selectedRow = selectedRow; + list->unk_1C = 0; + list->unk_1D = 0; + list->taskId = TASK_NONE; + list->unk_1F = 0; + gListMenuOverride.cursorPal = list->template.cursorPal; + gListMenuOverride.fillValue = list->template.fillValue; + gListMenuOverride.cursorShadowPal = list->template.cursorShadowPal; + gListMenuOverride.lettersSpacing = list->template.lettersSpacing; + gListMenuOverride.fontId = list->template.fontId; + gListMenuOverride.enabled = FALSE; + if (list->template.totalItems < list->template.maxShowed) + list->template.maxShowed = list->template.totalItems; + FillWindowPixelBuffer(list->template.windowId, PIXEL_FILL(list->template.fillValue)); + ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed); + ListMenuDrawCursor(list); + ListMenuCallSelectionChangedCallback(list, TRUE); + + return listTaskId; +} + +static void ListMenuPrint(struct ListMenu *list, const u8 *str, u8 x, u8 y) +{ + struct TextColor colors; + if (gListMenuOverride.enabled) + { + colors.fgColor = gListMenuOverride.fillValue; + colors.bgColor = gListMenuOverride.cursorPal; + colors.shadowColor = gListMenuOverride.cursorShadowPal; + AddTextPrinterParameterized4(list->template.windowId, gListMenuOverride.fontId, x, y, gListMenuOverride.lettersSpacing, 0, &colors, TEXT_SPEED_FF, str); + gListMenuOverride.enabled = FALSE; + } + else + { + colors.fgColor = list->template.fillValue; + colors.bgColor = list->template.cursorPal; + colors.shadowColor = list->template.cursorShadowPal; + AddTextPrinterParameterized4(list->template.windowId, list->template.fontId, x, y, list->template.lettersSpacing, 0, &colors, TEXT_SPEED_FF, str); + } +} + +static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count) +{ + s32 i; + u8 x, y; + u8 yMultiplier = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + list->template.itemVerticalPadding; + + for (i = 0; i < count; i++) + { + if (list->template.items[startIndex].index != LIST_HEADER) + x = list->template.item_X; + else + x = list->template.header_X; + y = (yOffset + i) * yMultiplier + list->template.upText_Y; + if (list->template.itemPrintFunc != NULL) + list->template.itemPrintFunc(list->template.windowId, list->template.items[startIndex].index, y); + ListMenuPrint(list, list->template.items[startIndex].label, x, y); + startIndex++; + } +} + +static void ListMenuDrawCursor(struct ListMenu *list) +{ + u8 yMultiplier = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + list->template.itemVerticalPadding; + u8 x = list->template.cursor_X; + u8 y = list->selectedRow * yMultiplier + list->template.upText_Y; + + switch (list->template.cursorKind) + { + case 0: + ListMenuPrint(list, gFameCheckerText_ListMenuCursor, x, y); + break; + case 1: + break; + case 2: + if (list->taskId == TASK_NONE) + list->taskId = ListMenuAddCursorObject(list, 0); + ListMenuUpdateCursorObject(list->taskId, GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 - 1, GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y - 1, 0); + break; + case 3: + if (list->taskId == TASK_NONE) + list->taskId = ListMenuAddCursorObject(list, 1); + ListMenuUpdateCursorObject(list->taskId, GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 + x, GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y, 1); + break; + } +} + +#undef TASK_NONE + +static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind) +{ + struct CursorStruct cursor; + + cursor.left = 0; + cursor.top = 160; + cursor.rowWidth = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8 + 2; + cursor.rowHeight = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + 2; + cursor.tileTag = 0x4000; + cursor.palTag = SPRITE_INVALID_TAG; + cursor.palNum = 15; + return ListMenuAddCursorObjectInternal(&cursor, cursorKind); +} + +static void ListMenuErasePrintedCursor(struct ListMenu *list, u16 selectedRow) +{ + u8 cursorKind = list->template.cursorKind; + if (cursorKind == 0) + { + u8 yMultiplier = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + list->template.itemVerticalPadding; + u8 width = GetMenuCursorDimensionByFont(list->template.fontId, 0); + u8 height = GetMenuCursorDimensionByFont(list->template.fontId, 1); + FillWindowPixelRect(list->template.windowId, + PIXEL_FILL(list->template.fillValue), + list->template.cursor_X, + selectedRow * yMultiplier + list->template.upText_Y, + width, + height); + } +} + +static u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, bool8 movingDown) +{ + u16 selectedRow = list->selectedRow; + u16 scrollOffset = list->scrollOffset; + u16 newRow; + u32 newScroll; + + if (!movingDown) + { + if (list->template.maxShowed == 1) + newRow = 0; + else + newRow = list->template.maxShowed - ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)) - 1; + + if (scrollOffset == 0) + { + while (selectedRow != 0) + { + selectedRow--; + if (list->template.items[scrollOffset + selectedRow].index != LIST_HEADER) + { + list->selectedRow = selectedRow; + return 1; + } + } + return 0; + } + else + { + while (selectedRow > newRow) + { + selectedRow--; + if (list->template.items[scrollOffset + selectedRow].index != LIST_HEADER) + { + list->selectedRow = selectedRow; + return 1; + } + } + newScroll = scrollOffset - 1; + } + } + else + { + if (list->template.maxShowed == 1) + newRow = 0; + else + newRow = ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)); + + if (scrollOffset == list->template.totalItems - list->template.maxShowed) + { + while (selectedRow < list->template.maxShowed - 1) + { + selectedRow++; + if (list->template.items[scrollOffset + selectedRow].index != LIST_HEADER) + { + list->selectedRow = selectedRow; + return 1; + } + } + return 0; + } + else + { + while (selectedRow < newRow) + { + selectedRow++; + if (list->template.items[scrollOffset + selectedRow].index != LIST_HEADER) + { + list->selectedRow = selectedRow; + return 1; + } + } + newScroll = scrollOffset + 1; + } + } + list->selectedRow = newRow; + list->scrollOffset = newScroll; + return 2; +} + +static void ListMenuScroll(struct ListMenu *list, u8 count, bool8 movingDown) +{ + if (count >= list->template.maxShowed) + { + FillWindowPixelBuffer(list->template.windowId, PIXEL_FILL(list->template.fillValue)); + ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed); + } + else + { + u8 yMultiplier = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + list->template.itemVerticalPadding; + + if (!movingDown) + { + u16 y, width, height; + + ScrollWindow(list->template.windowId, 1, count * yMultiplier, PIXEL_FILL(list->template.fillValue)); + ListMenuPrintEntries(list, list->scrollOffset, 0, count); + + y = (list->template.maxShowed * yMultiplier) + list->template.upText_Y; + width = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8; + height = (GetWindowAttribute(list->template.windowId, WINDOW_HEIGHT) * 8) - y; + FillWindowPixelRect(list->template.windowId, + PIXEL_FILL(list->template.fillValue), + 0, y, width, height); + } + else + { + u16 width; + + ScrollWindow(list->template.windowId, 0, count * yMultiplier, PIXEL_FILL(list->template.fillValue)); + ListMenuPrintEntries(list, list->scrollOffset + (list->template.maxShowed - count), list->template.maxShowed - count, count); + + width = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8; + FillWindowPixelRect(list->template.windowId, + PIXEL_FILL(list->template.fillValue), + 0, 0, width, list->template.upText_Y); + } + } +} + +static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown) +{ + u16 oldSelectedRow; + u8 selectionChange, i, cursorCount; + + oldSelectedRow = list->selectedRow; + cursorCount = 0; + selectionChange = 0; + for (i = 0; i < count; i++) + { + do + { + u8 ret = ListMenuUpdateSelectedRowIndexAndScrollOffset(list, movingDown); + + selectionChange |= ret; + if (ret != 2) + break; + cursorCount++; + } + while (list->template.items[list->scrollOffset + list->selectedRow].index == LIST_HEADER); + } + + if (updateCursorAndCallCallback) + { + switch (selectionChange) + { + case 0: + default: + return TRUE; + case 1: + ListMenuErasePrintedCursor(list, oldSelectedRow); + ListMenuDrawCursor(list); + ListMenuCallSelectionChangedCallback(list, FALSE); + CopyWindowToVram(list->template.windowId, 2); + break; + case 2: + case 3: + ListMenuErasePrintedCursor(list, oldSelectedRow); + ListMenuScroll(list, cursorCount, movingDown); + ListMenuDrawCursor(list); + ListMenuCallSelectionChangedCallback(list, FALSE); + CopyWindowToVram(list->template.windowId, 2); + break; + } + } + return FALSE; +} + +static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 onInit) +{ + if (list->template.moveCursorFunc != NULL) + list->template.moveCursorFunc(list->template.items[list->scrollOffset + list->selectedRow].index, onInit, list); +} + +void ListMenuOverrideSetColors(u8 cursorPal, u8 fillValue, u8 cursorShadowPal) +{ + gListMenuOverride.cursorPal = cursorPal; + gListMenuOverride.fillValue = fillValue; + gListMenuOverride.cursorShadowPal = cursorShadowPal; + gListMenuOverride.enabled = TRUE; +} + +void ListMenuDefaultCursorMoveFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) +{ + if (!onInit) + PlaySE(SE_SELECT); +} + +static s32 ListMenuGetUnkIndicatorsStructFields(u8 taskId, u8 field) +{ + struct UnkIndicatorsStruct *data = (struct UnkIndicatorsStruct *)gTasks[taskId].data; + + switch (field) + { + case 0: + case 1: + return (s32)(data->field_4); + case 2: + return data->field_C; + case 3: + return data->field_E; + case 4: + return data->field_10; + case 5: + return data->field_11; + case 6: + return data->field_12; + case 7: + return data->field_13; + case 8: + return data->field_14_0; + case 9: + return data->field_14_1; + case 10: + return data->field_15_0; + case 11: + return data->field_15_1; + case 12: + return data->field_16_0; + case 13: + return data->field_16_1; + case 14: + return data->field_16_2; + case 15: + return data->field_17_0; + case 16: + return data->field_17_1; + default: + return -1; + } +} + +void ListMenuSetUnkIndicatorsStructField(u8 taskId, u8 field, s32 value) +{ + struct UnkIndicatorsStruct *data = (struct UnkIndicatorsStruct *)gTasks[taskId].data; + + switch (field) + { + case 0: + case 1: + data->field_4 = (void *)value; + break; + case 2: + data->field_C = value; + break; + case 3: + data->field_E = value; + break; + case 4: + data->field_10 = value; + break; + case 5: + data->field_11 = value; + break; + case 6: + data->field_12 = value; + break; + case 7: + data->field_13 = value; + break; + case 8: + data->field_14_0 = value; + break; + case 9: + data->field_14_1 = value; + break; + case 10: + data->field_15_0 = value; + break; + case 11: + data->field_15_1 = value; + break; + case 12: + data->field_16_0 = value; + break; + case 13: + data->field_16_1 = value; + break; + case 14: + data->field_16_2 = value; + break; + case 15: + data->field_17_0 = value; + break; + case 16: + data->field_17_1 = value; + break; + } +} + +void sub_8107CD8(u8 palOffset, u16 speciesId) +{ + LoadPalette(GetValidMonIconPalettePtr(speciesId), palOffset, 0x20); +} + +void sub_8107CF8(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y) +{ + BlitBitmapToWindow(windowId, GetMonIconPtr(speciesId, personality, 1), x, y, 32, 32); +} + +void sub_8107D38(u8 palOffset, u8 palId) +{ + const u16 *palette; + + switch (palId) + { + case 0: + default: + palette = gFireRedMenuElements1_Pal; + break; + case 1: + palette = gFireRedMenuElements2_Pal; + break; + } + LoadPalette(palette, palOffset, 0x20); +} + +void BlitMoveInfoIcon(u8 windowId, u8 iconId, u16 x, u16 y) +{ + BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + gMoveMenuInfoIcons[iconId].offset * 32, 0, 0, 128, 128, x, y, gMoveMenuInfoIcons[iconId].width, gMoveMenuInfoIcons[iconId].height); +} diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 1e3f42027..0b0e7b932 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -734,7 +734,7 @@ static void TeachyTvOptionListController(u8 taskId) TeachyTvBg2AnimController(); if (!gPaletteFade.active) { - input = ListMenuHandleInput(data[0]); + input = ListMenu_ProcessInput(data[0]); ListMenuGetScrollAndRow(data[0], &sStaticResources.scrollOffset, &sStaticResources.selectedRow); if ((JOY_NEW(SELECT_BUTTON) && sStaticResources.callback != ReturnToBagFromKeyItem)) { @@ -754,7 +754,7 @@ static void TeachyTvOptionListController(u8 taskId) default: PlaySE(SE_SELECT); sStaticResources.whichScript = input; - DestroyListMenu(data[0], &sStaticResources.scrollOffset, &sStaticResources.selectedRow); + DestroyListMenuTask(data[0], &sStaticResources.scrollOffset, &sStaticResources.selectedRow); TeachyTvClearWindowRegs(); ClearWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); diff --git a/src/tm_case.c b/src/tm_case.c index 54c50cc71..0266f9c90 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -716,7 +716,7 @@ static void Task_FadeOutAndCloseTMCase(u8 taskId) if (!gPaletteFade.active) { - DestroyListMenu(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); + DestroyListMenuTask(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); if (sTMCaseDynamicResources->savedCallback != NULL) SetMainCallback2(sTMCaseDynamicResources->savedCallback); else @@ -736,7 +736,7 @@ static void Task_TMCaseMain(u8 taskId) { if (sub_80BF72C() != TRUE) { - input = ListMenuHandleInput(data[0]); + input = ListMenu_ProcessInput(data[0]); ListMenuGetScrollAndRow(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); if (JOY_NEW(SELECT_BUTTON) && sTMCaseStaticResources.unk_05 == 1) { @@ -909,7 +909,7 @@ static void Subtask_CloseContextMenuAndReturnToMain(u8 taskId) { s16 * data = gTasks[taskId].data; - DestroyListMenu(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); + DestroyListMenuTask(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sTMCaseStaticResources.scrollOffset, sTMCaseStaticResources.selectedRow); PrintListMenuCursorByID_WithColorIdx(data[0], 1); ClearMenuWindow_BorderThickness2(6, 0); @@ -1108,7 +1108,7 @@ static void Task_DoSaleOfTMs(u8 taskId) RemoveBagItem(gSpecialVar_ItemId, data[8]); AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); sub_809C09C(gSpecialVar_ItemId, data[8], 2); - DestroyListMenu(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); + DestroyListMenuTask(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); TMCaseSetup_GetTMCount(); TMCaseSetup_InitListMenuPositions(); InitTMCaseListMenuItems(); @@ -1204,7 +1204,7 @@ static void Task_TMCaseDude_Playback(u8 taskId) { gMain.newKeys = 0; gMain.newAndRepeatedKeys = DPAD_DOWN; - ListMenuHandleInput(data[0]); + ListMenu_ProcessInput(data[0]); } data[9]++; if (data[9] > 0x65) @@ -1223,7 +1223,7 @@ static void Task_TMCaseDude_Playback(u8 taskId) { gMain.newKeys = 0; gMain.newAndRepeatedKeys = DPAD_UP; - ListMenuHandleInput(data[0]); + ListMenu_ProcessInput(data[0]); } data[9]++; if (data[9] > 0x65) @@ -1269,7 +1269,7 @@ static void Task_TMCaseDude_Playback(u8 taskId) { memcpy(gSaveBlock1Ptr->bagPocket_TMHM, sPokeDudePackBackup->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, sPokeDudePackBackup->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); - DestroyListMenu(data[0], NULL, NULL); + DestroyListMenuTask(data[0], NULL, NULL); sTMCaseStaticResources.selectedRow = sPokeDudePackBackup->unk_160; sTMCaseStaticResources.scrollOffset = sPokeDudePackBackup->unk_162; Free(sPokeDudePackBackup); @@ -1344,10 +1344,10 @@ static void PrintStringTMCaseOnWindow3(void) static void DrawMoveInfoUIMarkers(void) { - blit_move_info_icon(4, 19, 0, 0); - blit_move_info_icon(4, 20, 0, 12); - blit_move_info_icon(4, 21, 0, 24); - blit_move_info_icon(4, 22, 0, 36); + BlitMoveInfoIcon(4, 19, 0, 0); + BlitMoveInfoIcon(4, 20, 0, 12); + BlitMoveInfoIcon(4, 21, 0, 24); + BlitMoveInfoIcon(4, 22, 0, 36); CopyWindowToVram(4, 2); } @@ -1369,7 +1369,7 @@ static void TMCase_MoveCursor_UpdatePrintedTMInfo(u16 itemId) else { move = ItemIdToBattleMoveId(itemId); - blit_move_info_icon(5, gBattleMoves[move].type + 1, 0, 0); + BlitMoveInfoIcon(5, gBattleMoves[move].type + 1, 0, 0); if (gBattleMoves[move].power < 2) str = gText_ThreeHyphens; else diff --git a/sym_common.txt b/sym_common.txt index 56eed9a16..e875d439b 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -298,12 +298,9 @@ gUnknown_3005E10: @ 3005E10 gUnknown_3005E20: @ 3005E20 .space 0x40 -gUnknown_3005E60: @ 3005E60 - .space 0x10 - -gMultiuseListMenuTemplate: @ 3005E70 - .space 0x18 - + .align 4 + .include "list_menu.o" + .align 2 .include "quest_log.o" gUnknown_3005E8C: @ 3005E8C diff --git a/sym_ewram.txt b/sym_ewram.txt index cd1cc1d97..bec821a2f 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1168,9 +1168,8 @@ gUnknown_203ACEC: @ 203ACEC gUnknown_203ACF0: @ 203ACF0 .space 0x4 -gUnknown_203ACF4: @ 203ACF4 - .space 0x8 - + .include "src/list_menu.o" + .align 2 gUnknown_203ACFC: @ 203ACFC .space 0x6 |