From 27fade4e9c0c902b33742ade1923b75bd286ba92 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 30 Jun 2023 07:41:42 -0700 Subject: [PATCH] decomp more menu_input --- asm/menu_input.s | 628 --------------------------------------------- include/input.h | 4 +- include/text.h | 7 +- ld_script.txt | 1 + src/menu_input_1.c | 350 +++++++++++++++++++++++++ 5 files changed, 357 insertions(+), 633 deletions(-) create mode 100644 src/menu_input_1.c diff --git a/asm/menu_input.s b/asm/menu_input.s index 21dc1ddd7..d13df4a6d 100644 --- a/asm/menu_input.s +++ b/asm/menu_input.s @@ -582,632 +582,4 @@ _08013658: .4byte 0x000001ff _0801365C: .4byte 0x000003f3 thumb_func_end sub_8013470 - thumb_func_start sub_8013660 -sub_8013660: - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1A - ldrsh r0, [r4, r1] - cmp r0, 0 - ble _0801367A - adds r0, r4, 0 - bl UpdateMenuCursorSpriteCoords - adds r0, r4, 0 - adds r0, 0x8 - bl sub_801332C -_0801367A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8013660 - - thumb_func_start UpdateMenuCursorSpriteCoords -UpdateMenuCursorSpriteCoords: - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, [r5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 3 - ldr r0, _080136B8 - adds r4, r0 - movs r1, 0 - ldrsh r0, [r4, r1] - lsls r0, 3 - ldrh r2, [r5, 0x4] - adds r0, r2 - strh r0, [r5, 0x8] - movs r0, 0x18 - ldrsh r1, [r5, r0] - adds r0, r5, 0 - bl sub_8013800 - movs r2, 0x2 - ldrsh r1, [r4, r2] - lsls r1, 3 - adds r1, r0 - strh r1, [r5, 0xA] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080136B8: .4byte gUnknown_2027370 - thumb_func_end UpdateMenuCursorSpriteCoords - - thumb_func_start MoveMenuCursorDown -MoveMenuCursorDown: - push {lr} - adds r1, r0, 0 - movs r3, 0 - strh r3, [r1, 0x24] - movs r0, 0x1A - ldrsh r2, [r1, r0] - cmp r2, 0 - ble _080136DA - ldrh r0, [r1, 0x18] - adds r0, 0x1 - strh r0, [r1, 0x18] - lsls r0, 16 - asrs r0, 16 - cmp r0, r2 - blt _080136DC -_080136DA: - strh r3, [r1, 0x18] -_080136DC: - pop {r0} - bx r0 - thumb_func_end MoveMenuCursorDown - - thumb_func_start sub_80136E0 -sub_80136E0: - push {r4,r5,lr} - adds r2, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - movs r1, 0 - strh r1, [r2, 0x24] - ldrh r4, [r2, 0x1A] - movs r0, 0x1A - ldrsh r3, [r2, r0] - cmp r3, 0 - ble _08013708 - ldrh r0, [r2, 0x18] - adds r0, 0x1 - strh r0, [r2, 0x18] - lsls r0, 16 - asrs r0, 16 - cmp r0, r3 - blt _08013710 - cmp r5, 0 - beq _0801370C -_08013708: - strh r1, [r2, 0x18] - b _08013710 -_0801370C: - subs r0, r4, 0x1 - strh r0, [r2, 0x18] -_08013710: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80136E0 - - thumb_func_start MoveMenuCursorUp -MoveMenuCursorUp: - push {r4,lr} - adds r1, r0, 0 - movs r2, 0 - strh r2, [r1, 0x24] - ldrh r3, [r1, 0x1A] - movs r4, 0x1A - ldrsh r0, [r1, r4] - cmp r0, 0 - bgt _0801372E - strh r2, [r1, 0x18] - b _0801373E -_0801372E: - ldrh r0, [r1, 0x18] - subs r0, 0x1 - strh r0, [r1, 0x18] - lsls r0, 16 - cmp r0, 0 - bge _0801373E - subs r0, r3, 0x1 - strh r0, [r1, 0x18] -_0801373E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end MoveMenuCursorUp - - thumb_func_start sub_8013744 -sub_8013744: - push {r4-r6,lr} - adds r2, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r5, r1, 0 - movs r3, 0 - strh r3, [r2, 0x24] - ldrh r4, [r2, 0x1A] - movs r6, 0x1A - ldrsh r0, [r2, r6] - cmp r0, 0 - bgt _08013760 - strh r3, [r2, 0x18] - b _08013778 -_08013760: - ldrh r0, [r2, 0x18] - subs r0, 0x1 - strh r0, [r2, 0x18] - lsls r0, 16 - cmp r0, 0 - bge _08013778 - cmp r1, 0 - beq _08013776 - subs r0, r4, 0x1 - strh r0, [r2, 0x18] - b _08013778 -_08013776: - strh r5, [r2, 0x18] -_08013778: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8013744 - - thumb_func_start sub_8013780 -sub_8013780: - push {lr} - adds r2, r0, 0 - cmp r1, 0 - bge _0801378E - movs r0, 0 - strh r0, [r2, 0x18] - b _080137A0 -_0801378E: - movs r3, 0x1A - ldrsh r0, [r2, r3] - cmp r1, r0 - blt _0801379E - ldrh r0, [r2, 0x1A] - subs r0, 0x1 - strh r0, [r2, 0x18] - b _080137A0 -_0801379E: - strh r1, [r2, 0x18] -_080137A0: - movs r0, 0 - strh r0, [r2, 0x24] - pop {r0} - bx r0 - thumb_func_end sub_8013780 - - thumb_func_start sub_80137A8 -sub_80137A8: - movs r1, 0x18 - ldrsh r0, [r0, r1] - bx lr - thumb_func_end sub_80137A8 - - thumb_func_start sub_80137B0 -sub_80137B0: - push {r4,lr} - adds r4, r0, 0 - cmp r1, 0 - ble _080137BC - lsls r0, r1, 8 - b _080137E2 -_080137BC: - ldr r3, _080137F4 - ldr r1, [r4] - lsls r0, r1, 3 - adds r0, r1 - lsls r1, r0, 3 - adds r0, r3, 0 - adds r0, 0xC - adds r0, r1, r0 - ldr r0, [r0] - movs r2, 0 - cmp r0, 0x6 - bne _080137D6 - movs r2, 0x10 -_080137D6: - adds r0, r1, r3 - movs r1, 0x6 - ldrsh r0, [r0, r1] - lsls r0, 3 - subs r0, r2 - lsls r0, 8 -_080137E2: - movs r2, 0x1C - ldrsh r1, [r4, r2] - bl __divsi3 - str r0, [r4, 0x10] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080137F4: .4byte gUnknown_2027370 - thumb_func_end sub_80137B0 - - thumb_func_start sub_80137F8 -sub_80137F8: - lsls r1, 8 - str r1, [r0, 0x10] - bx lr - thumb_func_end sub_80137F8 - - thumb_func_start sub_8013800 -sub_8013800: - push {lr} - movs r3, 0x6 - ldrsh r2, [r0, r3] - ldr r0, [r0, 0x10] - muls r0, r1 - cmp r0, 0 - bge _08013810 - adds r0, 0xFF -_08013810: - asrs r0, 8 - adds r0, r2, r0 - pop {r1} - bx r1 - thumb_func_end sub_8013800 - - thumb_func_start sub_8013818 -sub_8013818: - push {r4,lr} - adds r4, r0, 0 - str r3, [r4] - movs r0, 0 - strh r1, [r4, 0x22] - strh r2, [r4, 0x1C] - strh r0, [r4, 0x14] - strh r0, [r4, 0x24] - strh r0, [r4, 0x18] - strh r0, [r4, 0x1E] - adds r0, r4, 0 - adds r0, 0x28 - bl sub_801317C - adds r0, r4, 0 - bl sub_8013984 - adds r0, r4, 0 - movs r1, 0xC - bl sub_80137F8 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8013818 - - thumb_func_start sub_8013848 -sub_8013848: - push {r4,lr} - adds r4, r0, 0 - str r3, [r4] - movs r0, 0 - strh r1, [r4, 0x22] - strh r2, [r4, 0x1C] - strh r0, [r4, 0x14] - strh r0, [r4, 0x24] - strh r0, [r4, 0x18] - strh r0, [r4, 0x1E] - adds r0, r4, 0 - adds r0, 0x28 - bl sub_801317C - adds r0, r4, 0 - bl sub_8013984 - adds r0, r4, 0 - movs r1, 0x18 - bl sub_80137F8 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8013848 - - thumb_func_start sub_8013878 -sub_8013878: - push {r4-r6,lr} - adds r5, r0, 0 - adds r6, r1, 0 - cmp r6, 0 - bge _08013886 - movs r6, 0 - b _08013890 -_08013886: - movs r1, 0x22 - ldrsh r0, [r5, r1] - cmp r6, r0 - blt _08013890 - subs r6, r0, 0x1 -_08013890: - movs r0, 0x1C - ldrsh r1, [r5, r0] - adds r0, r6, 0 - bl __divsi3 - movs r4, 0 - strh r0, [r5, 0x1E] - movs r0, 0x1C - ldrsh r1, [r5, r0] - adds r0, r6, 0 - bl __modsi3 - strh r0, [r5, 0x18] - strh r4, [r5, 0x24] - adds r0, r5, 0 - bl sub_8013984 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8013878 - - thumb_func_start sub_80138B8 -sub_80138B8: - push {r4-r7,lr} - adds r5, r0, 0 - lsls r4, r1, 24 - lsrs r4, 24 - movs r0, 0x1E - ldrsh r7, [r5, r0] - movs r1, 0x18 - ldrsh r6, [r5, r1] - adds r0, r5, 0 - bl AddMenuCursorSprite - cmp r4, 0 - beq _0801391C - adds r0, r5, 0 - bl GetKeyPress - cmp r0, 0x8 - beq _080138F8 - cmp r0, 0x8 - bgt _080138E6 - cmp r0, 0x7 - beq _080138F0 - b _0801391C -_080138E6: - cmp r0, 0x9 - beq _0801390E - cmp r0, 0xA - beq _08013916 - b _0801391C -_080138F0: - adds r0, r5, 0 - bl MoveMenuCursorUp - b _080138FE -_080138F8: - adds r0, r5, 0 - bl MoveMenuCursorDown -_080138FE: - movs r1, 0x18 - ldrsh r0, [r5, r1] - cmp r6, r0 - beq _0801391C - movs r0, 0x3 - bl PlayMenuSoundEffect - b _0801391C -_0801390E: - adds r0, r5, 0 - bl sub_8013A7C - b _0801391C -_08013916: - adds r0, r5, 0 - bl sub_8013A54 -_0801391C: - movs r1, 0x1E - ldrsh r0, [r5, r1] - cmp r7, r0 - bne _08013928 - movs r0, 0 - b _08013930 -_08013928: - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0x1 -_08013930: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80138B8 - - thumb_func_start sub_8013938 -sub_8013938: - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x1E - ldrsh r5, [r4, r0] - movs r0, 0 - strh r0, [r4, 0x1A] - strh r0, [r4, 0x14] - adds r0, r4, 0 - bl AddMenuCursorSprite - adds r0, r4, 0 - bl GetKeyPress - cmp r0, 0x9 - beq _0801395C - cmp r0, 0xA - beq _08013964 - b _0801396A -_0801395C: - adds r0, r4, 0 - bl sub_8013A7C - b _0801396A -_08013964: - adds r0, r4, 0 - bl sub_8013A54 -_0801396A: - movs r1, 0x1E - ldrsh r0, [r4, r1] - cmp r5, r0 - bne _08013976 - movs r0, 0 - b _0801397E -_08013976: - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0x1 -_0801397E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8013938 - - thumb_func_start sub_8013984 -sub_8013984: - push {r4-r6,lr} - adds r4, r0, 0 - ldr r1, [r4] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 3 - ldr r1, _08013A20 - adds r6, r0, r1 - ldrh r1, [r4, 0x1C] - movs r2, 0x1C - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080139A2 - adds r0, r1, 0x1 - strh r0, [r4, 0x1C] -_080139A2: - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x1C - ldrsh r1, [r4, r2] - bl __divsi3 - adds r5, r0, 0 - strh r5, [r4, 0x20] - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x1C - ldrsh r1, [r4, r2] - bl __modsi3 - cmp r0, 0 - beq _080139C6 - adds r0, r5, 0x1 - strh r0, [r4, 0x20] -_080139C6: - movs r0, 0x1E - ldrsh r1, [r4, r0] - movs r2, 0x20 - ldrsh r0, [r4, r2] - subs r0, 0x1 - ldrh r5, [r4, 0x20] - cmp r1, r0 - ble _080139DA - subs r0, r5, 0x1 - strh r0, [r4, 0x1E] -_080139DA: - movs r0, 0x1E - ldrsh r1, [r4, r0] - movs r2, 0x20 - ldrsh r0, [r4, r2] - subs r0, 0x1 - cmp r1, r0 - bne _080139F8 - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x1C - ldrsh r1, [r4, r2] - bl __modsi3 - cmp r0, 0 - bne _080139FA -_080139F8: - ldrh r0, [r4, 0x1C] -_080139FA: - strh r0, [r4, 0x1A] - movs r0, 0x18 - ldrsh r1, [r4, r0] - movs r2, 0x1A - ldrsh r0, [r4, r2] - subs r0, 0x1 - cmp r1, r0 - ble _08013A10 - ldrh r0, [r4, 0x1A] - subs r0, 0x1 - strh r0, [r4, 0x18] -_08013A10: - movs r1, 0 - strh r1, [r4, 0x4] - ldr r0, [r6, 0xC] - cmp r0, 0x6 - bne _08013A24 - movs r0, 0x10 - strh r0, [r4, 0x6] - b _08013A26 - .align 2, 0 -_08013A20: .4byte gUnknown_2027370 -_08013A24: - strh r1, [r4, 0x6] -_08013A26: - lsls r0, r5, 16 - asrs r0, 16 - cmp r0, 0x1 - bgt _08013A32 - movs r0, 0 - b _08013A40 -_08013A32: - movs r1, 0 - ldrsh r0, [r6, r1] - movs r2, 0x4 - ldrsh r1, [r6, r2] - adds r0, r1 - subs r0, 0x2 - lsls r0, 3 -_08013A40: - strh r0, [r4, 0xC] - movs r1, 0x2 - ldrsh r0, [r6, r1] - adds r0, 0x1 - lsls r0, 3 - subs r0, 0x2 - strh r0, [r4, 0xE] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8013984 - - thumb_func_start sub_8013A54 -sub_8013A54: - push {lr} - adds r2, r0, 0 - movs r0, 0x1E - ldrsh r1, [r2, r0] - movs r3, 0x20 - ldrsh r0, [r2, r3] - subs r0, 0x1 - cmp r1, r0 - bge _08013A6C - ldrh r0, [r2, 0x1E] - adds r0, 0x1 - b _08013A6E -_08013A6C: - movs r0, 0 -_08013A6E: - strh r0, [r2, 0x1E] - adds r0, r2, 0 - bl sub_8013984 - pop {r0} - bx r0 - thumb_func_end sub_8013A54 - - thumb_func_start sub_8013A7C -sub_8013A7C: - push {lr} - adds r1, r0, 0 - ldrh r2, [r1, 0x1E] - movs r3, 0x1E - ldrsh r0, [r1, r3] - cmp r0, 0 - bgt _08013A90 - ldrh r0, [r1, 0x20] - subs r0, 0x1 - b _08013A92 -_08013A90: - subs r0, r2, 0x1 -_08013A92: - strh r0, [r1, 0x1E] - adds r0, r1, 0 - bl sub_8013984 - pop {r0} - bx r0 - thumb_func_end sub_8013A7C - .align 2,0 diff --git a/include/input.h b/include/input.h index b01834561..c66080997 100644 --- a/include/input.h +++ b/include/input.h @@ -64,13 +64,13 @@ struct MenuInputStruct { s32 unk0; /* 0x4 */ u16 unk4; - /* 0x6 */ u16 unk6; + /* 0x6 */ s16 unk6; /* 0x8 */ u16 unk8; /* 0x8 */ u16 unkA; /* 0xC */ u16 unkC; /* 0xE */ u16 unkE; /* 0x10 */ u32 unk10; - /* 0x14 */ u16 unk14; + /* 0x14 */ s16 unk14; /* 0x16 */ u16 unk16; /* 0x18 */ s16 menuIndex; /* 0x1A */ s16 unk1A; diff --git a/include/text.h b/include/text.h index 13413d659..a04486e70 100644 --- a/include/text.h +++ b/include/text.h @@ -2,9 +2,10 @@ #define GUARD_TEXT_H struct UnkTextStruct1 { - u8 fill00[4]; - u16 unk04; - u8 fill06[2]; + s16 unk0; + s16 unk2; + s16 unk04; + s16 unk6; u16 unk08; u16 fillA; u32 unkC; diff --git a/ld_script.txt b/ld_script.txt index 78440caf9..2a168de35 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -95,6 +95,7 @@ SECTIONS { src/more_input.o(.text); src/menu_input.o(.text); asm/menu_input.o(.text); + src/menu_input_1.o(.text); asm/code_80130A8.o(.text); src/code_8012A18_1.o(.text); src/felicity_bank.o(.text); diff --git a/src/menu_input_1.c b/src/menu_input_1.c new file mode 100644 index 000000000..106d4297b --- /dev/null +++ b/src/menu_input_1.c @@ -0,0 +1,350 @@ +#include "global.h" +#include "constants/input.h" +#include "input.h" +#include "text.h" + +extern struct UnkTextStruct1 gUnknown_2027370[4]; +extern void PlayMenuSoundEffect(u32); +extern void AddMenuCursorSprite(struct MenuInputStruct *); +extern void sub_8013A7C(struct MenuInputStruct *); +extern void sub_8013A54(struct MenuInputStruct *); +extern s32 GetKeyPress(struct MenuInputStruct *); +extern void MoveMenuCursorUp(struct MenuInputStruct *); +extern void MoveMenuCursorDown(struct MenuInputStruct *); +void sub_8013984(struct MenuInputStruct *); +void sub_801317C(struct MenuInputStructSub *); +void sub_80137F8(struct MenuInputStruct *, u32); +s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2); +void UpdateMenuCursorSpriteCoords(struct MenuInputStruct *param_1); +void sub_801332C(u16 *); + +void sub_8013660(struct MenuInputStruct *param_1) +{ + if (0 < param_1->unk1A) + { + UpdateMenuCursorSpriteCoords(param_1); + sub_801332C(¶m_1->unk8); + } +} + +void UpdateMenuCursorSpriteCoords(struct MenuInputStruct *param_1) +{ + s32 index; + struct UnkTextStruct1 *temp; + + index = param_1->unk0; + temp = &gUnknown_2027370[index]; + param_1->unk8 = temp->unk0 * 8 + param_1->unk4; + param_1->unkA = temp->unk2 * 8 + sub_8013800(param_1, param_1->menuIndex); +} + +void MoveMenuCursorDown(struct MenuInputStruct *param_1) +{ + param_1->unk24 = 0; + if (param_1->unk1A < 1) { + param_1->menuIndex = 0; + } + else { + param_1->menuIndex++; + if (param_1->menuIndex >= param_1->unk1A) { + param_1->menuIndex = 0; + } + } +} + +void sub_80136E0(struct MenuInputStruct *param_1, u8 param_2) +{ + param_1->unk24 = 0; + if (param_1->unk1A < 1) { + param_1->menuIndex = 0; + } + else { + param_1->menuIndex++; + if (param_1->menuIndex >= param_1->unk1A) { + if (param_2 != 0) { + param_1->menuIndex = 0; + } + else + { + param_1->menuIndex = param_1->unk1A - 1; + } + } + } +} + +void MoveMenuCursorUp(struct MenuInputStruct *param_1) +{ + param_1->unk24 = 0; + if (param_1->unk1A < 1) { + param_1->menuIndex = 0; + } + else { + param_1->menuIndex--; + if (param_1->menuIndex < 0) { + param_1->menuIndex = param_1->unk1A + -1; + } + } +} + +void sub_8013744(struct MenuInputStruct *param_1, u8 param_2) +{ + param_1->unk24 = 0; + if (param_1->unk1A < 1) { + param_1->menuIndex = 0; + } + else { + param_1->menuIndex--; + if (param_1->menuIndex < 0) { + if (param_2 != 0) { + param_1->menuIndex = param_1->unk1A + -1; + } + else { + param_1->menuIndex = 0; + } + } + } +} + +void sub_8013780(struct MenuInputStruct *param_1, s32 param_2) +{ + if (param_2 < 0) { + param_1->menuIndex = 0; + } + else if (param_2 >= param_1->unk1A) { + param_1->menuIndex = param_1->unk1A - 1; + } + else { + param_1->menuIndex = param_2; + } + param_1->unk24 = 0; +} + +s32 sub_80137A8(struct MenuInputStruct *param_1) +{ + return param_1->menuIndex; +} + +void sub_80137B0(struct MenuInputStruct *param_1, s32 param_2) +{ + s32 iVar1; +#ifndef NONMATCHING + register s32 iVar2 asm("r0"); +#else + s32 iVar2; +#endif + + if (param_2 >= 1) { + iVar2 = param_2 << 8; + } + else + { + if (gUnknown_2027370[param_1->unk0].unkC == 6) + { + iVar1 = 0x10; + } + else + { + iVar1 = 0; + } + iVar2 = (gUnknown_2027370[param_1->unk0].unk6 * 8 - iVar1); + iVar2 <<= 8; + } + param_1->unk10 = iVar2 / param_1->unk1C; +} + +void sub_80137F8(struct MenuInputStruct *param_1, u32 param_2) +{ + param_1->unk10 = param_2 << 8; +} + +s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2) +{ + s32 iVar1; + s32 iVar2; + + iVar2 = param_1->unk6; + iVar1 = param_2 * param_1->unk10; + if (iVar1 < 0) { + iVar1 = iVar1 + 0xff; + } + return (iVar2 + (iVar1 >> 8)); +} + +void sub_8013818(struct MenuInputStruct *param_1, short param_2, u16 param_3, s32 param_4) +{ + param_1->unk0 = param_4; + param_1->unk22 = param_2; + param_1->unk1C = param_3; + param_1->unk14 = 0; + param_1->unk24 = 0; + param_1->menuIndex = 0; + param_1->unk1E = 0; + sub_801317C(¶m_1->unk28); + sub_8013984(param_1); + sub_80137F8(param_1,0xC); +} + + +void sub_8013848(struct MenuInputStruct *param_1, short param_2, u16 param_3, s32 param_4) +{ + param_1->unk0 = param_4; + param_1->unk22 = param_2; + param_1->unk1C = param_3; + param_1->unk14 = 0; + param_1->unk24 = 0; + param_1->menuIndex = 0; + param_1->unk1E = 0; + sub_801317C(¶m_1->unk28); + sub_8013984(param_1); + sub_80137F8(param_1,0x18); +} + +void sub_8013878(struct MenuInputStruct *param_1, int param_2) +{ + if (param_2 < 0) { + param_2 = 0; + } + else if (param_2 >= param_1->unk22) { + param_2 = param_1->unk22 + -1; + } + param_1->unk1E = param_2 / param_1->unk1C; + param_1->menuIndex = param_2 % param_1->unk1C; + param_1->unk24 = 0; + sub_8013984(param_1); +} + +bool8 sub_80138B8(struct MenuInputStruct *param_1, bool8 param_2) +{ + s32 sVar1; + s32 oldIndex; + + sVar1 = param_1->unk1E; + oldIndex = param_1->menuIndex; + AddMenuCursorSprite(param_1); + if(param_2) + { + switch(GetKeyPress(param_1)) + { + case INPUT_DPAD_UP: + MoveMenuCursorUp(param_1); + if(oldIndex != param_1->menuIndex) + PlayMenuSoundEffect(3); + break; + case INPUT_DPAD_DOWN: + MoveMenuCursorDown(param_1); + if(oldIndex != param_1->menuIndex) + PlayMenuSoundEffect(3); + break; + case INPUT_DPAD_LEFT: + sub_8013A7C(param_1); + break; + case INPUT_DPAD_RIGHT: + sub_8013A54(param_1); + break; + } + } + if (sVar1 != param_1->unk1E) { + PlayMenuSoundEffect(4); + return TRUE; + } + else + { + return FALSE; + } +} + +bool8 sub_8013938(struct MenuInputStruct *param_1) +{ + s32 sVar1; + + sVar1 = param_1->unk1E; + param_1->unk1A = 0; + param_1->unk14 = 0; + AddMenuCursorSprite(param_1); + switch(GetKeyPress(param_1)) + { + case INPUT_DPAD_LEFT: + sub_8013A7C(param_1); + break; + case INPUT_DPAD_RIGHT: + sub_8013A54(param_1); + break; + } + if (sVar1 != param_1->unk1E) { + PlayMenuSoundEffect(4); + return TRUE; + } + else + { + return FALSE; + } +} + +void sub_8013984(struct MenuInputStruct * param_1) { + s32 iVar2; + s32 iVar4; + struct UnkTextStruct1 *ptr; + + iVar4 = param_1->unk0; + ptr = &gUnknown_2027370[iVar4]; + if (param_1->unk1C == 0) { + param_1->unk1C++; + } + param_1->unk20 = param_1->unk22 / param_1->unk1C; + iVar2 = (param_1->unk22 % param_1->unk1C); + if (iVar2 != 0) { + param_1->unk20++; + } + if (param_1->unk1E > param_1->unk20 - 1) { + param_1->unk1E = param_1->unk20 - 1; + } + if ((param_1->unk1E != param_1->unk20 - 1) || (param_1->unk22 % param_1->unk1C == 0)) + { + param_1->unk1A = param_1->unk1C; + } + else + { + param_1->unk1A = param_1->unk22 % param_1->unk1C; + } + if (param_1->menuIndex > param_1->unk1A - 1) { + param_1->menuIndex = param_1->unk1A - 1; + } + param_1->unk4 = 0; + if (ptr->unkC == 6) { + param_1->unk6 = 0x10; + } + else { + param_1->unk6 = 0; + } + if (param_1->unk20 < 2) { + param_1->unkC = 0; + } + else { + param_1->unkC = (ptr->unk0 + ptr->unk04 + -2) * 8; + } + param_1->unkE = ((ptr->unk2) + 1) * 8 + -2; +} + +void sub_8013A54(struct MenuInputStruct *param_1) +{ + if (param_1->unk1E < param_1->unk20 - 1) { + param_1->unk1E++; + } + else + { + param_1->unk1E = 0; + } + sub_8013984(param_1); +} + +void sub_8013A7C(struct MenuInputStruct *param_1) +{ + if (param_1->unk1E < 1) { + param_1->unk1E = param_1->unk20 - 1; + } + else + { + param_1->unk1E--; + } + sub_8013984(param_1); +}