diff --git a/asm/code_8012A18.s b/asm/code_80130A8.s similarity index 89% rename from asm/code_8012A18.s rename to asm/code_80130A8.s index 37425eeee..93f2eaa6a 100644 --- a/asm/code_8012A18.s +++ b/asm/code_80130A8.s @@ -5,750 +5,6 @@ .text - thumb_func_start sub_8012BC4 -sub_8012BC4: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - mov r10, r0 - mov r9, r1 - adds r1, r2, 0 - adds r7, r3, 0 - movs r0, 0 - mov r8, r0 - add r0, sp, 0x4 - adds r2, r7, 0 - bl ConvertToDecimal - subs r5, r7, 0x1 - cmp r5, 0 - ble _08012C0A - lsls r0, r5, 2 - mov r1, sp - adds r1, r0 - adds r1, 0x4 - ldr r0, [r1] - cmp r0, 0 - bne _08012C0A - movs r2, 0xFF -_08012BFA: - str r2, [r1] - subs r1, 0x4 - subs r5, 0x1 - cmp r5, 0 - ble _08012C0A - ldr r0, [r1] - cmp r0, 0 - beq _08012BFA -_08012C0A: - movs r5, 0 - cmp r5, r7 - bge _08012C50 - ldr r0, [sp, 0x4] - cmp r0, 0xFF - beq _08012C50 - add r6, sp, 0x4 -_08012C18: - ldm r6!, {r0} - adds r0, 0x30 - lsls r0, 24 - lsrs r0, 24 - bl ReturnIntFromChar2 - adds r4, r0, 0 - bl GetCharacter - movs r1, 0x6 - ldrsh r0, [r0, r1] - add r8, r0 - mov r2, r10 - mov r1, r8 - subs r0, r2, r1 - ldr r2, [sp, 0x48] - str r2, [sp] - mov r1, r9 - adds r2, r4, 0 - ldr r3, [sp, 0x44] - bl xxx_call_draw_char - adds r5, 0x1 - cmp r5, r7 - bge _08012C50 - ldr r0, [r6] - cmp r0, 0xFF - bne _08012C18 -_08012C50: - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8012BC4 - - thumb_func_start sub_8012C60 -sub_8012C60: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - adds r0, r2, 0 - adds r7, r3, 0 - lsls r0, 24 - lsrs r0, 24 - bl ReturnIntFromChar2 - adds r4, r0, 0 - bl GetCharacter - adds r1, r0, 0 - movs r2, 0x6 - ldrsh r0, [r1, r2] - cmp r0, 0xB - bgt _08012C90 - movs r1, 0xC - subs r1, r0 - lsrs r0, r1, 31 - adds r1, r0 - asrs r0, r1, 1 - b _08012C92 -_08012C90: - movs r0, 0 -_08012C92: - adds r0, r5, r0 - ldr r1, [sp, 0x18] - str r1, [sp] - adds r1, r6, 0 - adds r2, r4, 0 - adds r3, r7, 0 - bl xxx_call_draw_char - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8012C60 - - thumb_func_start sub_8012CAC -sub_8012CAC: - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r0 - adds r4, r1, 0 - movs r7, 0 - movs r6, 0 - ldr r0, [r4] - cmp r0, 0 - beq _08012CE6 - movs r5, 0x80 - lsls r5, 9 -_08012CC4: - adds r0, r5, 0 - movs r1, 0x80 - lsls r1, 9 - adds r5, r1 - asrs r7, r0, 16 - ldr r0, [r4] - bl sub_8008ED0 - lsls r0, 16 - asrs r0, 16 - cmp r0, r6 - ble _08012CDE - adds r6, r0, 0 -_08012CDE: - adds r4, 0x8 - ldr r0, [r4] - cmp r0, 0 - bne _08012CC4 -_08012CE6: - adds r0, r6, 0 - cmp r0, 0 - bge _08012CEE - adds r0, 0x7 -_08012CEE: - asrs r0, 3 - adds r0, 0x2 - mov r1, r8 - strh r0, [r1, 0xC] - mov r0, r8 - adds r1, r7, 0 - bl sub_8012D08 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8012CAC - - thumb_func_start sub_8012D08 -sub_8012D08: - push {r4,lr} - adds r4, r0, 0 - adds r0, r1, 0 - movs r1, 0xC - bl sub_80095E4 - lsls r0, 16 - asrs r1, r0, 16 - ldr r0, [r4, 0x4] - cmp r0, 0x6 - bne _08012D24 - adds r0, r1, 0x2 - lsls r0, 16 - asrs r1, r0, 16 -_08012D24: - lsls r0, r1, 16 - lsrs r0, 16 - strh r0, [r4, 0xE] - strh r0, [r4, 0x10] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8012D08 - - thumb_func_start sub_8012D34 -sub_8012D34: - push {r4,lr} - adds r4, r0, 0 - adds r0, r1, 0 - movs r1, 0x18 - bl sub_8009614 - lsls r0, 16 - asrs r1, r0, 16 - ldr r0, [r4, 0x4] - cmp r0, 0x6 - bne _08012D50 - adds r0, r1, 0x2 - lsls r0, 16 - asrs r1, r0, 16 -_08012D50: - lsls r0, r1, 16 - lsrs r0, 16 - strh r0, [r4, 0xE] - strh r0, [r4, 0x10] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8012D34 - - thumb_func_start sub_8012D60 -sub_8012D60: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r4, r0, 0 - adds r5, r3, 0 - ldr r7, [sp, 0x20] - movs r3, 0 - movs r6, 0x1 - negs r6, r6 - mov r12, r3 - ldr r0, [sp, 0x24] - str r0, [r4, 0x10] - str r1, [r4, 0x4] - str r2, [r4, 0x8] - cmp r2, 0 - bne _08012D88 - ldr r0, _08012E00 - str r0, [r4, 0x8] -_08012D88: - str r5, [r4, 0xC] - ldr r0, [r1] - adds r5, r4, 0 - adds r5, 0x14 - movs r2, 0x4C - adds r2, r4 - mov r8, r2 - movs r2, 0x4D - adds r2, r4 - mov r9, r2 - movs r2, 0x4E - adds r2, r4 - mov r10, r2 - cmp r0, 0 - beq _08012DC6 -_08012DA6: - cmp r7, 0 - blt _08012DB2 - ldr r0, [r1, 0x4] - cmp r7, r0 - bne _08012DB2 - adds r6, r3, 0 -_08012DB2: - ldr r0, [r1] - ldrb r0, [r0] - cmp r0, 0x2A - bne _08012DBC - mov r12, r3 -_08012DBC: - adds r1, 0x8 - adds r3, 0x1 - ldr r0, [r1] - cmp r0, 0 - bne _08012DA6 -_08012DC6: - cmp r6, 0 - bge _08012DCC - mov r6, r12 -_08012DCC: - adds r0, r5, 0 - adds r1, r3, 0 - ldr r2, [sp, 0x24] - bl sub_8013134 - strh r6, [r4, 0x2C] - adds r0, r5, 0 - movs r1, 0 - bl sub_80137B0 - movs r0, 0x1 - mov r1, r8 - strb r0, [r1] - mov r2, r9 - strb r0, [r2] - mov r1, r10 - strb r0, [r1] - subs r0, 0x2 - str r0, [r4, 0x48] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08012E00: .4byte gUnknown_80D47B8 - thumb_func_end sub_8012D60 - - thumb_func_start sub_8012E04 -sub_8012E04: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r5, r0, 0 - adds r7, r1, 0 - mov r8, r2 - mov r9, r3 - ldr r3, [sp, 0x1C] - movs r1, 0 - movs r6, 0x1 - negs r6, r6 - movs r4, 0 - ldr r0, [r7] - cmp r0, 0 - beq _08012E46 - adds r2, r7, 0 -_08012E26: - cmp r3, 0 - blt _08012E32 - ldr r0, [r2, 0x4] - cmp r3, r0 - bne _08012E32 - adds r6, r1, 0 -_08012E32: - ldr r0, [r2] - ldrb r0, [r0] - cmp r0, 0x2A - bne _08012E3C - adds r4, r1, 0 -_08012E3C: - adds r2, 0x8 - adds r1, 0x1 - ldr r0, [r2] - cmp r0, 0 - bne _08012E26 -_08012E46: - cmp r6, 0 - bge _08012E4C - adds r6, r4, 0 -_08012E4C: - adds r4, r5, 0 - adds r4, 0x14 - adds r0, r4, 0 - ldr r2, [sp, 0x20] - bl sub_8013134 - strh r6, [r5, 0x2C] - adds r0, r4, 0 - movs r1, 0 - bl sub_80137B0 - ldr r0, [sp, 0x20] - str r0, [r5, 0x10] - mov r0, r8 - str r0, [r5, 0x8] - cmp r0, 0 - bne _08012E72 - ldr r0, _08012EA0 - str r0, [r5, 0x8] -_08012E72: - mov r0, r9 - str r0, [r5, 0xC] - str r7, [r5, 0x4] - adds r1, r5, 0 - adds r1, 0x4E - movs r0, 0 - strb r0, [r1] - adds r0, r5, 0 - adds r0, 0x4C - movs r1, 0x1 - strb r1, [r0] - adds r0, 0x1 - strb r1, [r0] - movs r0, 0x1 - negs r0, r0 - str r0, [r5, 0x48] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08012EA0: .4byte gUnknown_80D47B8 - thumb_func_end sub_8012E04 - - thumb_func_start sub_8012EA4 -sub_8012EA4: - push {lr} - adds r2, r0, 0 - adds r2, 0x4C - strb r1, [r2] - adds r2, 0x1 - movs r1, 0x1 - strb r1, [r2] - bl sub_8012EBC - pop {r0} - bx r0 - thumb_func_end sub_8012EA4 - - thumb_func_start sub_8012EBC -sub_8012EBC: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x164 - adds r5, r0, 0 - movs r0, 0x4D - adds r0, r5 - mov r8, r0 - ldrb r0, [r0] - cmp r0, 0 - beq _08012F9E - ldr r0, [r5, 0x10] - bl sub_80073B8 - ldr r2, [r5, 0x10] - lsls r0, r2, 3 - adds r0, r2 - lsls r0, 3 - ldr r1, _08012F54 - adds r0, r1 - ldr r0, [r0, 0xC] - cmp r0, 0x6 - bne _08012F24 - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - mov r4, sp - adds r4, r0 - adds r4, 0x4 - add r0, sp, 0x4 - bl sub_8006518 - ldr r0, [r5] - bl sub_8008ED0 - adds r1, r0, 0 - ldr r0, [r4, 0x14] - ldrb r0, [r0, 0x2] - lsls r0, 3 - subs r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - adds r0, 0x8 - ldr r2, [r5] - ldr r3, [r5, 0x10] - movs r1, 0 - str r1, [sp] - bl xxx_format_and_draw -_08012F24: - ldr r7, [r5, 0x8] - ldr r4, [r5, 0x4] - ldr r6, [r5, 0xC] - movs r1, 0 - mov r9, r1 - ldr r0, [r4] - mov r10, r8 - cmp r0, 0 - beq _08012F92 - add r0, sp, 0x64 - mov r8, r0 -_08012F3A: - ldr r3, [r4] - ldrb r0, [r3] - cmp r0, 0x2A - bne _08012F44 - adds r3, 0x1 -_08012F44: - cmp r6, 0 - beq _08012F58 - ldrh r0, [r6] - lsls r0, 2 - adds r0, r7 - ldr r2, [r0] - adds r6, 0x2 - b _08012F64 - .align 2, 0 -_08012F54: .4byte gUnknown_2027370 -_08012F58: - ldr r0, [r4, 0x4] - cmp r0, 0 - bge _08012F62 - ldr r2, [r7, 0x4] - b _08012F64 -_08012F62: - ldr r2, [r7] -_08012F64: - mov r0, r8 - ldr r1, _08012FBC - bl sprintfStatic - adds r0, r5, 0 - adds r0, 0x14 - mov r1, r9 - bl sub_8013800 - adds r1, r0, 0 - ldr r3, [r5, 0x10] - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - mov r2, r8 - bl xxx_format_and_draw - adds r4, 0x8 - movs r1, 0x1 - add r9, r1 - ldr r0, [r4] - cmp r0, 0 - bne _08012F3A -_08012F92: - ldr r0, [r5, 0x10] - bl sub_80073E0 - movs r0, 0 - mov r1, r10 - strb r0, [r1] -_08012F9E: - adds r0, r5, 0 - adds r0, 0x4E - ldrb r0, [r0] - cmp r0, 0 - beq _08012FC8 - adds r0, r5, 0 - adds r0, 0x4C - ldrb r0, [r0] - cmp r0, 0 - beq _08012FC0 - adds r0, r5, 0 - adds r0, 0x14 - bl AddMenuCursorSprite - b _08012FC8 - .align 2, 0 -_08012FBC: .4byte gUnknown_80D4828 -_08012FC0: - adds r0, r5, 0 - adds r0, 0x14 - bl sub_8013660 -_08012FC8: - add sp, 0x164 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8012EBC - - thumb_func_start sub_8012FD8 -sub_8012FD8: - push {r4-r7,lr} - adds r4, r0, 0 - movs r0, 0x2C - ldrsh r7, [r4, r0] - adds r6, r4, 0 - adds r6, 0x4C - ldrb r0, [r6] - cmp r0, 0 - beq _08013094 - adds r5, r4, 0 - adds r5, 0x14 - adds r0, r5, 0 - bl GetKeyPress - cmp r0, 0x2 - beq _08013078 - cmp r0, 0x2 - bgt _08013002 - cmp r0, 0x1 - beq _08013028 - b _08013094 -_08013002: - cmp r0, 0x7 - beq _08013012 - cmp r0, 0x8 - bne _08013094 - adds r0, r5, 0 - bl MoveMenuCursorDown - b _08013018 -_08013012: - adds r0, r5, 0 - bl MoveMenuCursorUp -_08013018: - movs r1, 0x2C - ldrsh r0, [r4, r1] - cmp r7, r0 - beq _08013094 - movs r0, 0x3 - bl PlayMenuSoundEffect - b _08013094 -_08013028: - adds r0, r5, 0 - bl sub_80137A8 - adds r2, r0, 0 - lsls r1, r2, 3 - ldr r0, [r4, 0x4] - adds r0, r1 - ldr r3, [r0, 0x4] - cmp r3, 0 - blt _08013068 - ldr r1, [r4, 0xC] - cmp r1, 0 - beq _0801304C - lsls r0, r2, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0x1 - beq _08013068 -_0801304C: - str r3, [r4, 0x48] - adds r1, r4, 0 - adds r1, 0x4C - movs r0, 0 - strb r0, [r1] - strh r0, [r4, 0x38] - ldr r1, [r4, 0xC] - cmp r1, 0 - beq _08013070 - lsls r0, r2, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0x2 - bne _08013070 -_08013068: - movs r0, 0x2 - bl PlayMenuSoundEffect - b _08013094 -_08013070: - movs r0, 0 - bl PlayMenuSoundEffect - b _08013094 -_08013078: - movs r1, 0x2E - ldrsh r0, [r4, r1] - ldr r1, [r4, 0x4] - lsls r0, 3 - adds r0, r1 - ldr r0, [r0, 0x4] - cmp r0, 0 - blt _08013094 - str r0, [r4, 0x48] - movs r0, 0 - strb r0, [r6] - movs r0, 0x1 - bl PlayMenuSoundEffect -_08013094: - adds r0, r4, 0 - bl sub_8012EBC - adds r0, r4, 0 - adds r0, 0x4C - ldrb r0, [r0] - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8012FD8 - - thumb_func_start sub_80130A8 -sub_80130A8: - push {r4-r6,lr} - adds r4, r0, 0 - adds r6, r4, 0 - adds r6, 0x4C - ldrb r0, [r6] - cmp r0, 0 - beq _08013100 - adds r5, r4, 0 - adds r5, 0x14 - adds r0, r5, 0 - bl GetKeyPress - cmp r0, 0x1 - beq _080130CA - cmp r0, 0x2 - beq _080130E6 - b _08013100 -_080130CA: - adds r0, r5, 0 - bl sub_80137A8 - lsls r0, 3 - ldr r1, [r4, 0x4] - adds r1, r0 - ldr r0, [r1, 0x4] - str r0, [r4, 0x48] - movs r0, 0 - strb r0, [r6] - strh r0, [r4, 0x38] - bl PlayMenuSoundEffect - b _08013100 -_080130E6: - movs r1, 0x2E - ldrsh r0, [r4, r1] - ldr r1, [r4, 0x4] - lsls r0, 3 - adds r0, r1 - ldr r0, [r0, 0x4] - cmp r0, 0 - blt _08013100 - str r0, [r4, 0x48] - movs r0, 0 - strb r0, [r6] - bl PlayMenuSoundEffect -_08013100: - adds r0, r4, 0 - bl sub_8012EBC - adds r0, r4, 0 - adds r0, 0x4C - ldrb r0, [r0] - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80130A8 - - thumb_func_start sub_8013114 -sub_8013114: - push {lr} - adds r2, r0, 0 - adds r0, 0x4C - ldrb r0, [r0] - cmp r0, 0 - beq _08013124 - movs r0, 0x1 - b _0801312E -_08013124: - cmp r1, 0 - beq _0801312C - ldr r0, [r2, 0x48] - str r0, [r1] -_0801312C: - movs r0, 0 -_0801312E: - pop {r1} - bx r1 - thumb_func_end sub_8013114 thumb_func_start sub_8013134 sub_8013134: @@ -6766,4 +6022,4 @@ _08015FE4: bx r0 thumb_func_end sub_8015F84 - .align 2, 0 @ Don't pad with nop. + .align 2,0 diff --git a/asm/code_801B3C0.s b/asm/code_801B3C0.s index 9b840723e..9aeef9e0b 100644 --- a/asm/code_801B3C0.s +++ b/asm/code_801B3C0.s @@ -109,1244 +109,4 @@ _0801BC1C: bx r0 thumb_func_end sub_801BB5C - thumb_func_start sub_801BC24 -sub_801BC24: - ldr r0, _0801BC58 - ldr r0, [r0] - mov r12, r0 - movs r3, 0 - mov r1, r12 - adds r1, 0xCC - ldr r0, _0801BC5C - ldr r0, [r0] - str r0, [r1] - adds r1, 0x4 - movs r0, 0x2 - str r0, [r1] - movs r2, 0x1 - adds r1, 0x4 - ldr r0, _0801BC60 - ldr r0, [r0] - str r0, [r1] - adds r1, 0x4 - movs r0, 0x3 - str r0, [r1] - mov r0, r12 - adds r0, 0xDC - str r3, [r0] - adds r0, 0x4 - str r2, [r0] - bx lr - .align 2, 0 -_0801BC58: .4byte gUnknown_203B234 -_0801BC5C: .4byte gUnknown_80D4920 -_0801BC60: .4byte gUnknown_80D4928 - thumb_func_end sub_801BC24 - - thumb_func_start sub_801BC64 -sub_801BC64: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0801BC8C - ldr r0, [sp] - cmp r0, 0x4 - beq _0801BC7E - cmp r0, 0x5 - beq _0801BC86 - b _0801BC8C -_0801BC7E: - movs r0, 0x8 - bl sub_801B748 - b _0801BC8C -_0801BC86: - movs r0, 0x7 - bl sub_801B748 -_0801BC8C: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_801BC64 - - thumb_func_start sub_801BC94 -sub_801BC94: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0801BCC6 - ldr r0, [sp] - cmp r0, 0x2 - beq _0801BCB8 - cmp r0, 0x2 - bgt _0801BCB2 - cmp r0, 0x1 - beq _0801BCC0 - b _0801BCC6 -_0801BCB2: - cmp r0, 0x3 - beq _0801BCC0 - b _0801BCC6 -_0801BCB8: - movs r0, 0xD - bl sub_801B748 - b _0801BCC6 -_0801BCC0: - movs r0, 0x6 - bl sub_801B748 -_0801BCC6: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_801BC94 - - thumb_func_start sub_801BCCC -sub_801BCCC: - push {lr} - movs r0, 0x1 - bl sub_801A6E8 - cmp r0, 0x4 - bhi _0801BD7A - lsls r0, 2 - ldr r1, _0801BCE4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801BCE4: .4byte _0801BCE8 - .align 2, 0 -_0801BCE8: - .4byte _0801BD7A - .4byte _0801BD7A - .4byte _0801BD70 - .4byte _0801BCFC - .4byte _0801BD34 -_0801BCFC: - bl sub_801A8AC - ldr r1, _0801BD28 - ldr r2, [r1] - str r0, [r2, 0x24] - ldr r1, _0801BD2C - ldr r1, [r1] - lsls r0, 2 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x20] - ldr r0, _0801BD30 - adds r1, r2, 0 - adds r1, 0x20 - adds r2, 0x14 - bl sub_8090E14 - movs r0, 0xA - bl sub_801B748 - b _0801BD7A - .align 2, 0 -_0801BD28: .4byte gUnknown_203B234 -_0801BD2C: .4byte gTeamInventory_203B460 -_0801BD30: .4byte gUnknown_202DEA8 -_0801BD34: - bl sub_801A8AC - ldr r1, _0801BD64 - ldr r2, [r1] - str r0, [r2, 0x24] - ldr r1, _0801BD68 - ldr r1, [r1] - lsls r0, 2 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x20] - ldr r0, _0801BD6C - adds r1, r2, 0 - adds r1, 0x20 - adds r2, 0x14 - bl sub_8090E14 - movs r0, 0 - bl sub_8099690 - movs r0, 0xB - bl sub_801B748 - b _0801BD7A - .align 2, 0 -_0801BD64: .4byte gUnknown_203B234 -_0801BD68: .4byte gTeamInventory_203B460 -_0801BD6C: .4byte gUnknown_202DEA8 -_0801BD70: - bl sub_801A928 - movs r0, 0x6 - bl sub_801B748 -_0801BD7A: - pop {r0} - bx r0 - thumb_func_end sub_801BCCC - - thumb_func_start sub_801BD80 -sub_801BD80: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_801A6E8 - ldr r4, _0801BDC4 - ldr r0, [r4] - adds r0, 0x28 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _0801BDB2 - ldr r0, [r4] - adds r0, 0x28 - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _0801BDB2 - ldr r0, [r4] - adds r0, 0xC8 - str r1, [r0] -_0801BDB2: - ldr r0, [sp] - cmp r0, 0x6 - beq _0801BDD2 - cmp r0, 0x6 - bgt _0801BDC8 - cmp r0, 0x1 - beq _0801BE22 - b _0801BE28 - .align 2, 0 -_0801BDC4: .4byte gUnknown_203B234 -_0801BDC8: - cmp r0, 0x7 - beq _0801BE0C - cmp r0, 0x8 - beq _0801BE14 - b _0801BE28 -_0801BDD2: - ldr r4, _0801BE08 - ldr r0, [r4] - adds r0, 0x20 - bl MoveToStorage - ldr r0, [r4] - ldr r0, [r0, 0x24] - bl ShiftItemsDownFrom - ldr r0, [r4] - adds r0, 0x10 - bl AddItemToInventory - bl FillInventoryGaps - movs r0, 0xCB - bl PlaySound - movs r0, 0 - bl sub_8099690 - bl sub_801A928 - movs r0, 0xE - bl sub_801B748 - b _0801BE28 - .align 2, 0 -_0801BE08: .4byte gUnknown_203B234 -_0801BE0C: - movs r0, 0xC - bl sub_801B748 - b _0801BE28 -_0801BE14: - movs r0, 0 - bl sub_8099690 - movs r0, 0xB - bl sub_801B748 - b _0801BE28 -_0801BE22: - movs r0, 0x9 - bl sub_801B748 -_0801BE28: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_801BD80 - - thumb_func_start sub_801BE30 -sub_801BE30: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_801A6E8 - ldr r4, _0801BE70 - ldr r0, [r4] - adds r0, 0x28 - bl sub_8012FD8 - ldr r0, [r4] - adds r0, 0x78 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _0801BE5E - ldr r0, [r4] - adds r0, 0x78 - mov r1, sp - bl sub_8013114 -_0801BE5E: - ldr r0, [sp] - cmp r0, 0x2 - beq _0801BE80 - cmp r0, 0x2 - bgt _0801BE74 - cmp r0, 0x1 - beq _0801BE78 - b _0801BEA4 - .align 2, 0 -_0801BE70: .4byte gUnknown_203B234 -_0801BE74: - cmp r0, 0x3 - bne _0801BEA4 -_0801BE78: - movs r0, 0x9 - bl sub_801B748 - b _0801BEA4 -_0801BE80: - ldr r0, [r4] - ldr r0, [r0, 0x24] - bl ShiftItemsDownFrom - ldr r0, [r4] - adds r0, 0x10 - bl AddItemToInventory - bl FillInventoryGaps - movs r0, 0xCB - bl PlaySound - bl sub_801A928 - movs r0, 0xF - bl sub_801B748 -_0801BEA4: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_801BE30 - - thumb_func_start sub_801BEAC -sub_801BEAC: - push {lr} - bl sub_801B410 - cmp r0, 0x1 - bls _0801BEC4 - cmp r0, 0x3 - bhi _0801BEC4 - bl sub_801B450 - movs r0, 0x9 - bl sub_801B748 -_0801BEC4: - pop {r0} - bx r0 - thumb_func_end sub_801BEAC - - thumb_func_start sub_801BEC8 -sub_801BEC8: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0801BEE0 - ldr r0, _0801BEE8 - ldr r0, [r0] - ldr r0, [r0, 0x8] - bl sub_801B748 -_0801BEE0: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0801BEE8: .4byte gUnknown_203B234 - thumb_func_end sub_801BEC8 - - thumb_func_start sub_801BEEC -sub_801BEEC: - push {r4-r6,lr} - lsls r0, 16 - asrs r5, r0, 16 - adds r0, r5, 0 - bl HasNoAvailIQSkills - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0 - bne _0801BF40 - ldr r4, _0801BF38 - movs r0, 0x92 - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r4] - str r6, [r0, 0x30] - strh r5, [r0, 0x4] - ldr r3, _0801BF3C - movs r1, 0x58 - adds r2, r5, 0 - muls r2, r1 - ldr r1, [r3] - adds r1, r2 - str r1, [r0, 0x8] - adds r0, 0xC - movs r2, 0x14 - ldrsh r1, [r1, r2] - bl GetNumAvailableIQSkills - ldr r1, [r4] - str r0, [r1, 0x2C] - movs r0, 0 - bl sub_801BFB4 - movs r0, 0x1 - b _0801BF42 - .align 2, 0 -_0801BF38: .4byte gUnknown_203B238 -_0801BF3C: .4byte gRecruitedPokemonRef -_0801BF40: - movs r0, 0 -_0801BF42: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_801BEEC - - thumb_func_start sub_801BF48 -sub_801BF48: - push {lr} - ldr r0, _0801BF60 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0x4 - bhi _0801BF90 - lsls r0, 2 - ldr r1, _0801BF64 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801BF60: .4byte gUnknown_203B238 -_0801BF64: .4byte _0801BF68 - .align 2, 0 -_0801BF68: - .4byte _0801BF80 - .4byte _0801BF80 - .4byte _0801BF86 - .4byte _0801BF8C - .4byte _0801BF7C -_0801BF7C: - movs r0, 0x3 - b _0801BF92 -_0801BF80: - bl sub_801C118 - b _0801BF90 -_0801BF86: - bl sub_801C1A0 - b _0801BF90 -_0801BF8C: - bl sub_801C228 -_0801BF90: - movs r0, 0 -_0801BF92: - pop {r1} - bx r1 - thumb_func_end sub_801BF48 - - thumb_func_start sub_801BF98 -sub_801BF98: - push {r4,lr} - ldr r4, _0801BFB0 - ldr r0, [r4] - cmp r0, 0 - beq _0801BFAA - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0801BFAA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801BFB0: .4byte gUnknown_203B238 - thumb_func_end sub_801BF98 - - thumb_func_start sub_801BFB4 -sub_801BFB4: - push {lr} - ldr r1, _0801BFC8 - ldr r1, [r1] - str r0, [r1] - bl sub_801BFCC - bl sub_801C03C - pop {r0} - bx r0 - .align 2, 0 -_0801BFC8: .4byte gUnknown_203B238 - thumb_func_end sub_801BFB4 - - thumb_func_start sub_801BFCC -sub_801BFCC: - push {r4-r7,lr} - ldr r4, _0801BFF0 - ldr r0, [r4] - adds r0, 0xC4 - bl sub_8006518 - ldr r1, [r4] - ldr r0, [r1] - cmp r0, 0x2 - bne _0801BFF8 - adds r1, 0xF4 - ldr r0, _0801BFF4 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - b _0801C01A - .align 2, 0 -_0801BFF0: .4byte gUnknown_203B238 -_0801BFF4: .4byte gUnknown_80DBDB0 -_0801BFF8: - mov r12, r4 - ldr r4, _0801C034 - movs r3, 0 - movs r2, 0x3 -_0801C000: - mov r0, r12 - ldr r1, [r0] - adds r1, r3 - adds r1, 0xC4 - adds r0, r4, 0 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - adds r3, 0x18 - subs r2, 0x1 - cmp r2, 0 - bge _0801C000 -_0801C01A: - bl ResetUnusedInputStruct - ldr r0, _0801C038 - ldr r0, [r0] - adds r0, 0xC4 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801C034: .4byte gUnknown_80DBD98 -_0801C038: .4byte gUnknown_203B238 - thumb_func_end sub_801BFCC - - thumb_func_start sub_801C03C -sub_801C03C: - push {lr} - sub sp, 0x8 - ldr r1, _0801C058 - ldr r0, [r1] - ldr r0, [r0] - adds r2, r1, 0 - cmp r0, 0x4 - bhi _0801C0C2 - lsls r0, 2 - ldr r1, _0801C05C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801C058: .4byte gUnknown_203B238 -_0801C05C: .4byte _0801C060 - .align 2, 0 -_0801C060: - .4byte _0801C074 - .4byte _0801C084 - .4byte _0801C08C - .4byte _0801C0B8 - .4byte _0801C0C2 -_0801C074: - ldr r0, [r2] - movs r1, 0x4 - ldrsh r0, [r0, r1] - movs r1, 0 - movs r2, 0x8 - bl sub_801C244 - b _0801C0C2 -_0801C084: - movs r0, 0x1 - bl sub_801C3B0 - b _0801C0C2 -_0801C08C: - bl sub_801C4C8 - bl sub_801C0C8 - ldr r0, _0801C0B4 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x74 - adds r1, r2, 0 - adds r1, 0x34 - ldr r2, [r2, 0x30] - str r2, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_8012D60 - b _0801C0C2 - .align 2, 0 -_0801C0B4: .4byte gUnknown_203B238 -_0801C0B8: - ldr r0, [r2] - adds r0, 0x28 - ldrb r0, [r0] - bl sub_801C620 -_0801C0C2: - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_801C03C - - thumb_func_start sub_801C0C8 -sub_801C0C8: - push {r4,r5,lr} - ldr r3, _0801C10C - ldr r1, [r3] - movs r4, 0 - ldr r0, _0801C110 - str r0, [r1, 0x34] - movs r0, 0x2 - str r0, [r1, 0x38] - movs r2, 0x1 - ldr r0, _0801C114 - ldr r0, [r0] - str r0, [r1, 0x3C] - movs r0, 0x3 - str r0, [r1, 0x40] - movs r5, 0x2 - str r4, [r1, 0x44] - str r2, [r1, 0x48] - movs r2, 0 - ldr r4, [r1, 0x30] - adds r1, 0x38 -_0801C0F0: - ldr r0, [r1] - cmp r0, r4 - beq _0801C104 - adds r1, 0x8 - adds r2, 0x1 - cmp r2, r5 - blt _0801C0F0 - ldr r1, [r3] - movs r0, 0x2 - str r0, [r1, 0x30] -_0801C104: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801C10C: .4byte gUnknown_203B238 -_0801C110: .4byte gUnknown_80DBDC8 -_0801C114: .4byte gUnknown_80D4970 - thumb_func_end sub_801C0C8 - - thumb_func_start sub_801C118 -sub_801C118: - push {lr} - movs r0, 0x1 - bl sub_801C308 - cmp r0, 0x4 - bhi _0801C19A - lsls r0, 2 - ldr r1, _0801C130 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801C130: .4byte _0801C134 - .align 2, 0 -_0801C134: - .4byte _0801C19A - .4byte _0801C19A - .4byte _0801C190 - .4byte _0801C148 - .4byte _0801C16C -_0801C148: - bl sub_801C390 - ldr r1, _0801C168 - ldr r2, [r1] - str r0, [r2, 0x24] - adds r1, r2, 0 - adds r1, 0xC - adds r1, r0 - ldrb r0, [r1] - adds r2, 0x28 - strb r0, [r2] - movs r0, 0x2 - bl sub_801BFB4 - b _0801C19A - .align 2, 0 -_0801C168: .4byte gUnknown_203B238 -_0801C16C: - bl sub_801C390 - ldr r1, _0801C18C - ldr r2, [r1] - str r0, [r2, 0x24] - adds r1, r2, 0 - adds r1, 0xC - adds r1, r0 - ldrb r0, [r1] - adds r2, 0x28 - strb r0, [r2] - movs r0, 0x3 - bl sub_801BFB4 - b _0801C19A - .align 2, 0 -_0801C18C: .4byte gUnknown_203B238 -_0801C190: - bl sub_801C3F8 - movs r0, 0x4 - bl sub_801BFB4 -_0801C19A: - pop {r0} - bx r0 - thumb_func_end sub_801C118 - - thumb_func_start sub_801C1A0 -sub_801C1A0: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_801C308 - ldr r4, _0801C1E0 - ldr r0, [r4] - adds r0, 0x74 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _0801C1D0 - ldr r0, [r4] - adds r0, 0x74 - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _0801C1D0 - ldr r0, [r4] - str r1, [r0, 0x30] -_0801C1D0: - ldr r0, [sp] - cmp r0, 0x2 - beq _0801C1EA - cmp r0, 0x2 - bgt _0801C1E4 - cmp r0, 0x1 - beq _0801C218 - b _0801C21E - .align 2, 0 -_0801C1E0: .4byte gUnknown_203B238 -_0801C1E4: - cmp r0, 0x3 - beq _0801C210 - b _0801C21E -_0801C1EA: - ldr r0, _0801C208 - bl PlaySound - ldr r0, _0801C20C - ldr r1, [r0] - ldr r0, [r1, 0x8] - adds r0, 0x20 - adds r1, 0x28 - ldrb r1, [r1] - bl ToggleIQSkill - movs r0, 0x1 - bl sub_801BFB4 - b _0801C21E - .align 2, 0 -_0801C208: .4byte 0x00000133 -_0801C20C: .4byte gUnknown_203B238 -_0801C210: - movs r0, 0x3 - bl sub_801BFB4 - b _0801C21E -_0801C218: - movs r0, 0x1 - bl sub_801BFB4 -_0801C21E: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_801C1A0 - - thumb_func_start sub_801C228 -sub_801C228: - push {lr} - bl sub_801C674 - cmp r0, 0x1 - bls _0801C240 - cmp r0, 0x3 - bhi _0801C240 - bl sub_801C6B4 - movs r0, 0x1 - bl sub_801BFB4 -_0801C240: - pop {r0} - bx r0 - thumb_func_end sub_801C228 - - thumb_func_start sub_801C244 -sub_801C244: - push {r4-r7,lr} - adds r6, r1, 0 - adds r7, r2, 0 - lsls r0, 16 - asrs r0, 16 - adds r4, r0, 0 - bl HasNoAvailIQSkills - lsls r0, 24 - cmp r0, 0 - beq _0801C25E - movs r0, 0 - b _0801C2F6 -_0801C25E: - ldr r5, _0801C2FC - ldr r0, [r5] - cmp r0, 0 - bne _0801C270 - movs r0, 0xC4 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] -_0801C270: - ldr r0, [r5] - strh r4, [r0] - ldr r3, _0801C300 - movs r1, 0x58 - adds r2, r4, 0 - muls r2, r1 - ldr r1, [r3] - adds r1, r2 - str r1, [r0, 0x4] - adds r0, 0x8 - movs r2, 0x14 - ldrsh r1, [r1, r2] - bl GetNumAvailableIQSkills - adds r1, r0, 0 - ldr r0, [r5] - str r1, [r0, 0x20] - str r6, [r0, 0x58] - lsls r1, r6, 1 - adds r1, r6 - lsls r1, 3 - adds r1, 0x60 - adds r1, r0, r1 - str r1, [r0, 0x5C] - adds r0, 0x60 - bl sub_8006518 - ldr r1, [r5] - ldr r2, [r1, 0x58] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0x60 - ldr r0, _0801C304 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r1, [r5] - ldr r0, [r1, 0x5C] - adds r1, 0xC0 - str r1, [r0, 0x14] - adds r1, r7, 0 - bl sub_8012D08 - bl ResetUnusedInputStruct - ldr r0, [r5] - adds r0, 0x60 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x20] - adds r2, r7, 0 - adds r3, r6, 0 - bl sub_8013818 - bl sub_801C440 - bl sub_801C4C8 - movs r0, 0x1 -_0801C2F6: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0801C2FC: .4byte gUnknown_203B23C -_0801C300: .4byte gRecruitedPokemonRef -_0801C304: .4byte gUnknown_80DBDF0 - thumb_func_end sub_801C244 - - thumb_func_start sub_801C308 -sub_801C308: - push {lr} - lsls r0, 24 - cmp r0, 0 - bne _0801C324 - ldr r0, _0801C320 - ldr r0, [r0] - adds r0, 0x24 - bl sub_8013660 - movs r0, 0 - b _0801C38A - .align 2, 0 -_0801C320: .4byte gUnknown_203B23C -_0801C324: - ldr r0, _0801C33C - ldr r0, [r0] - adds r0, 0x24 - bl GetKeyPress - cmp r0, 0x2 - beq _0801C346 - cmp r0, 0x2 - bgt _0801C340 - cmp r0, 0x1 - beq _0801C350 - b _0801C364 - .align 2, 0 -_0801C33C: .4byte gUnknown_203B23C -_0801C340: - cmp r0, 0x4 - beq _0801C35A - b _0801C364 -_0801C346: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _0801C38A -_0801C350: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _0801C38A -_0801C35A: - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0x4 - b _0801C38A -_0801C364: - ldr r0, _0801C37C - ldr r0, [r0] - adds r0, 0x24 - movs r1, 0x1 - bl sub_80138B8 - lsls r0, 24 - cmp r0, 0 - bne _0801C380 - movs r0, 0 - b _0801C38A - .align 2, 0 -_0801C37C: .4byte gUnknown_203B23C -_0801C380: - bl sub_801C440 - bl sub_801C4C8 - movs r0, 0x1 -_0801C38A: - pop {r1} - bx r1 - thumb_func_end sub_801C308 - - thumb_func_start sub_801C390 -sub_801C390: - ldr r0, _0801C3AC - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x42 - movs r3, 0 - ldrsh r1, [r0, r3] - subs r0, 0x2 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r0, r1 - movs r3, 0x3C - ldrsh r1, [r2, r3] - adds r0, r1 - bx lr - .align 2, 0 -_0801C3AC: .4byte gUnknown_203B23C - thumb_func_end sub_801C390 - - thumb_func_start sub_801C3B0 -sub_801C3B0: - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl ResetUnusedInputStruct - ldr r5, _0801C3F4 - ldr r0, [r5] - adds r0, 0x60 - movs r1, 0 - movs r2, 0 - bl sub_800641C - ldr r0, [r5] - ldr r1, [r0, 0x20] - adds r2, r0, 0 - adds r2, 0x46 - strh r1, [r2] - adds r0, 0x24 - bl sub_8013984 - bl sub_801C440 - bl sub_801C4C8 - cmp r4, 0 - beq _0801C3EE - ldr r0, [r5] - adds r0, 0x24 - bl AddMenuCursorSprite -_0801C3EE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801C3F4: .4byte gUnknown_203B23C - thumb_func_end sub_801C3B0 - - thumb_func_start sub_801C3F8 -sub_801C3F8: - push {r4,r5,lr} - ldr r4, _0801C438 - ldr r2, [r4] - cmp r2, 0 - beq _0801C432 - ldr r0, [r2, 0x58] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x60 - ldr r0, _0801C43C - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x60 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0801C432: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801C438: .4byte gUnknown_203B23C -_0801C43C: .4byte gUnknown_80DBDD8 - thumb_func_end sub_801C3F8 - - thumb_func_start sub_801C440 -sub_801C440: - push {r4,lr} - ldr r4, _0801C4C4 - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x44 - ldrh r1, [r1] - adds r0, 0xC0 - movs r2, 0 - strb r1, [r0] - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x42 - ldrh r1, [r1] - adds r0, 0xC1 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xC2 - movs r1, 0xA - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xC3 - strb r2, [r0] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x60 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - movs r1, 0x3E - ldrsh r0, [r0, r1] - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - ldr r2, [r4] - ldr r3, [r2, 0x58] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x6E - lsls r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r3, [r2, 0x58] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r2, r1 - adds r2, 0x70 - strh r0, [r2] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x60 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801C4C4: .4byte gUnknown_203B23C - thumb_func_end sub_801C440 - - thumb_func_start sub_801C4C8 -sub_801C4C8: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - ldr r6, _0801C594 - ldr r0, [r6] - ldr r0, [r0, 0x58] - bl sub_8008C54 - ldr r0, [r6] - ldr r0, [r0, 0x58] - bl sub_80073B8 - ldr r0, [r6] - adds r1, r0, 0 - adds r1, 0x42 - movs r2, 0 - ldrsh r4, [r1, r2] - lsls r4, 3 - adds r5, r4, 0 - adds r5, 0xA - ldr r2, _0801C598 - ldr r3, [r0, 0x58] - movs r0, 0 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0 - bl xxx_call_draw_string - adds r4, 0x4 - ldr r1, [r6] - adds r0, r1, 0 - adds r0, 0xC2 - ldrb r0, [r0] - lsls r0, 3 - adds r5, r4, r0 - adds r0, r1, 0 - adds r0, 0x42 - movs r3, 0 - ldrsh r2, [r0, r3] - adds r2, 0x1 - movs r0, 0x7 - str r0, [sp] - ldr r0, [r1, 0x58] - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r1, 0 - movs r3, 0x1 - bl sub_8012BC4 - movs r5, 0 - ldr r0, [r6] - movs r1, 0x3E - ldrsh r0, [r0, r1] - cmp r5, r0 - bge _0801C5CC - ldr r2, _0801C59C - mov r8, r2 -_0801C53C: - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0x42 - movs r3, 0 - ldrsh r1, [r0, r3] - subs r0, 0x2 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r1, r0 - adds r1, r5 - adds r0, r2, 0 - adds r0, 0x8 - adds r0, r1 - ldrb r4, [r0] - adds r0, r2, 0 - adds r0, 0x24 - adds r1, r5, 0 - bl sub_8013800 - adds r7, r0, 0 - adds r0, r4, 0 - bl GetIQSkillName - adds r1, r0, 0 - mov r0, r8 - movs r2, 0x50 - bl strncpy - ldr r0, [r6] - ldr r0, [r0, 0x4] - adds r0, 0x20 - movs r1, 0x1 - lsls r1, r4 - bl IsIQSkillSet - lsls r0, 24 - cmp r0, 0 - beq _0801C5A4 - mov r0, r8 - subs r0, 0x50 - ldr r1, _0801C5A0 - bl strcpy - b _0801C5AE - .align 2, 0 -_0801C594: .4byte gUnknown_203B23C -_0801C598: .4byte gUnknown_80DBE08 -_0801C59C: .4byte gUnknown_202DEA8 -_0801C5A0: .4byte gUnknown_80DBE14 -_0801C5A4: - mov r0, r8 - subs r0, 0x50 - ldr r1, _0801C5E4 - bl strcpy -_0801C5AE: - ldr r0, [r6] - ldr r3, [r0, 0x58] - movs r0, 0 - str r0, [sp] - movs r0, 0xC - adds r1, r7, 0 - ldr r2, _0801C5E8 - bl xxx_format_and_draw - adds r5, 0x1 - ldr r0, [r6] - movs r1, 0x3E - ldrsh r0, [r0, r1] - cmp r5, r0 - blt _0801C53C -_0801C5CC: - ldr r0, _0801C5EC - ldr r0, [r0] - ldr r0, [r0, 0x58] - bl sub_80073E0 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801C5E4: .4byte gUnknown_80DBE18 -_0801C5E8: .4byte gUnknown_80DBE1C -_0801C5EC: .4byte gUnknown_203B23C - thumb_func_end sub_801C4C8 - .align 2,0 diff --git a/asm/code_801DCC4.s b/asm/code_801DCC4.s deleted file mode 100644 index 9ac7c8ab9..000000000 --- a/asm/code_801DCC4.s +++ /dev/null @@ -1,311 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_801E198 -sub_801E198: - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _0801E210 - movs r0, 0xAC - movs r1, 0x8 - bl MemoryAlloc - str r0, [r4] - stm r0!, {r5} - bl sub_801317C - ldr r1, [r4] - movs r0, 0 - str r0, [r1, 0x44] - adds r0, r1, 0 - adds r0, 0x4C - str r0, [r1, 0x48] - bl sub_8006518 - ldr r1, [r4] - ldr r2, [r1, 0x44] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0x4C - ldr r0, _0801E214 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldr r0, [r4] - ldr r0, [r0, 0x48] - movs r1, 0x1 - bl sub_8012D08 - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x4C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x10 - ldr r3, [r1, 0x44] - movs r1, 0x1 - movs r2, 0x1 - bl sub_8013818 - bl nullsub_38 - bl CreateOptionsMenu - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0801E210: .4byte gUnknown_203B260 -_0801E214: .4byte gUnknown_80DC03C - thumb_func_end sub_801E198 - - thumb_func_start sub_801E218 -sub_801E218: - push {r4,lr} - movs r4, 0 - bl sub_8012AE8 - cmp r0, 0x2 - beq _0801E238 - cmp r0, 0x2 - bgt _0801E22E - cmp r0, 0x1 - beq _0801E242 - b _0801E294 -_0801E22E: - cmp r0, 0x9 - beq _0801E24C - cmp r0, 0xA - beq _0801E26C - b _0801E294 -_0801E238: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _0801E2BE -_0801E242: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _0801E2BE -_0801E24C: - ldr r0, _0801E264 - ldr r1, [r0] - movs r2, 0x28 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _0801E294 - ldr r1, [r1] - ldrb r0, [r1, 0x8] - cmp r0, 0 - bne _0801E268 - movs r0, 0x2 - b _0801E28A - .align 2, 0 -_0801E264: .4byte gUnknown_203B260 -_0801E268: - subs r0, 0x1 - b _0801E28A -_0801E26C: - ldr r0, _0801E284 - ldr r1, [r0] - movs r2, 0x28 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _0801E294 - ldr r1, [r1] - ldrb r0, [r1, 0x8] - cmp r0, 0x1 - bls _0801E288 - strb r4, [r1, 0x8] - b _0801E28C - .align 2, 0 -_0801E284: .4byte gUnknown_203B260 -_0801E288: - adds r0, 0x1 -_0801E28A: - strb r0, [r1, 0x8] -_0801E28C: - movs r0, 0x3 - bl PlayMenuSoundEffect - movs r4, 0x1 -_0801E294: - ldr r0, _0801E2B8 - ldr r0, [r0] - adds r0, 0x10 - movs r1, 0x1 - bl sub_80138B8 - lsls r0, 24 - cmp r0, 0 - bne _0801E2AA - cmp r4, 0x1 - bne _0801E2BC -_0801E2AA: - bl nullsub_38 - bl CreateOptionsMenu - movs r0, 0x1 - b _0801E2BE - .align 2, 0 -_0801E2B8: .4byte gUnknown_203B260 -_0801E2BC: - movs r0, 0 -_0801E2BE: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_801E218 - - thumb_func_start sub_801E2C4 -sub_801E2C4: - push {r4,r5,lr} - ldr r4, _0801E304 - ldr r2, [r4] - cmp r2, 0 - beq _0801E2FE - ldr r0, [r2, 0x44] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x4C - ldr r0, _0801E308 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x4C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0801E2FE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801E304: .4byte gUnknown_203B260 -_0801E308: .4byte gUnknown_80DC020 - thumb_func_end sub_801E2C4 - - thumb_func_start nullsub_38 -nullsub_38: - bx lr - thumb_func_end nullsub_38 - - thumb_func_start CreateOptionsMenu -CreateOptionsMenu: - push {r4-r6,lr} - sub sp, 0x4 - ldr r5, _0801E368 - ldr r0, [r5] - ldr r0, [r0, 0x44] - bl sub_8008C54 - ldr r0, [r5] - ldr r0, [r0, 0x44] - bl sub_80073B8 - ldr r2, _0801E36C - ldr r0, [r5] - ldr r3, [r0, 0x44] - movs r4, 0 - str r4, [sp] - movs r0, 0x10 - movs r1, 0 - bl xxx_call_draw_string - ldr r0, [r5] - adds r0, 0x10 - movs r1, 0 - bl sub_8013800 - adds r6, r0, 0 - ldr r2, _0801E370 - ldr r0, [r5] - ldr r3, [r0, 0x44] - str r4, [sp] - movs r0, 0x8 - adds r1, r6, 0 - bl xxx_call_draw_string - ldr r0, [r5] - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0x1 - beq _0801E384 - cmp r0, 0x1 - bgt _0801E374 - cmp r0, 0 - beq _0801E37A - b _0801E3D6 - .align 2, 0 -_0801E368: .4byte gUnknown_203B260 -_0801E36C: .4byte gWindowBGTitle -_0801E370: .4byte gUnknown_80DC064 -_0801E374: - cmp r0, 0x2 - beq _0801E3B0 - b _0801E3D6 -_0801E37A: - ldr r0, _0801E380 - b _0801E386 - .align 2, 0 -_0801E380: .4byte gWindowBGBlueString -_0801E384: - ldr r0, _0801E3AC -_0801E386: - bl sub_8008ED0 - adds r4, r0, 0 - ldr r1, [r5] - ldr r0, [r1, 0x44] - ldr r1, [r1] - ldrb r2, [r1, 0x8] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, 0x50 - adds r2, r6, 0 - adds r2, 0xA - movs r3, 0x7 - str r3, [sp] - adds r3, r4, 0 - bl sub_80078A4 - b _0801E3D6 - .align 2, 0 -_0801E3AC: .4byte gWindowBGRedString -_0801E3B0: - ldr r0, _0801E3E8 - bl sub_8008ED0 - adds r4, r0, 0 - ldr r1, [r5] - ldr r0, [r1, 0x44] - ldr r1, [r1] - ldrb r2, [r1, 0x8] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, 0x50 - adds r2, r6, 0 - adds r2, 0xA - movs r3, 0x7 - str r3, [sp] - adds r3, r4, 0 - bl sub_80078A4 -_0801E3D6: - ldr r0, _0801E3EC - ldr r0, [r0] - ldr r0, [r0, 0x44] - bl sub_80073E0 - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0801E3E8: .4byte gWindowBGGreenString -_0801E3EC: .4byte gUnknown_203B260 - thumb_func_end CreateOptionsMenu - - .align 2,0 diff --git a/asm/code_801EE10.s b/asm/code_801EE10.s index ff9e8a497..4bbae13c2 100644 --- a/asm/code_801EE10.s +++ b/asm/code_801EE10.s @@ -5,148 +5,6 @@ .text - thumb_func_start sub_801EE10 -sub_801EE10: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r6, r0, 0 - mov r9, r2 - adds r4, r3, 0 - ldr r0, [sp, 0x20] - mov r8, r0 - lsls r1, 16 - asrs r7, r1, 16 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _0801EF28 - movs r0, 0xBC - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] - movs r2, 0 - strb r4, [r0, 0x4] - ldr r0, [r5] - movs r1, 0x1 - strb r1, [r0, 0x5] - ldr r0, [r5] - strb r1, [r0, 0x6] - ldr r0, [r5] - strb r1, [r0, 0x7] - ldr r0, [r5] - str r6, [r0] - cmp r6, 0x1 - bls _0801EE5E - cmp r6, 0x3 - bhi _0801EE5E - strb r2, [r0, 0x5] - ldr r0, [r5] - strb r2, [r0, 0x6] - ldr r0, [r5] - strb r2, [r0, 0x7] -_0801EE5E: - ldr r4, _0801EF28 - ldr r3, [r4] - ldr r2, _0801EF2C - movs r0, 0x58 - adds r1, r7, 0 - muls r1, r0 - ldr r0, [r2] - adds r0, r1 - str r0, [r3, 0x8] - ldrb r0, [r0, 0x2] - strb r0, [r3, 0xC] - ldr r0, [r4] - mov r1, r9 - str r1, [r0, 0x10] - adds r0, 0xB8 - ldr r1, [sp, 0x1C] - str r1, [r0] - bl sub_801F3F8 - adds r5, r0, 0 - adds r6, r5, 0 - cmp r5, 0x4 - bge _0801EE8E - movs r6, 0x4 -_0801EE8E: - ldr r0, [r4] - adds r0, 0x58 - bl sub_8006518 - ldr r1, [r4] - mov r2, r8 - str r2, [r1, 0x50] - lsls r0, r2, 1 - add r0, r8 - lsls r0, 3 - adds r1, r0 - adds r1, 0x58 - ldr r0, _0801EF30 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldr r0, [r4] - adds r0, 0xB8 - ldr r0, [r0] - cmp r0, 0 - beq _0801EED8 - mov r0, r8 - bl sub_8006544 - ldr r1, [r4] - str r0, [r1, 0x54] - lsls r2, r0, 1 - adds r2, r0 - lsls r2, 3 - adds r1, r2 - adds r1, 0x58 - ldr r0, _0801EF34 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} -_0801EED8: - ldr r0, [r4] - ldr r2, [r0, 0x50] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 3 - adds r1, 0x58 - adds r0, r1 - adds r1, r6, 0 - bl sub_8012D08 - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x58 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - adds r0, 0x1C - adds r1, r5, 0 - adds r2, r5, 0 - mov r3, r8 - bl sub_8013818 - ldr r0, [r4] - adds r0, 0x1C - movs r1, 0 - bl sub_8013780 - movs r0, 0x1 - bl sub_801F280 - movs r0, 0x1 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0801EF28: .4byte gUnknown_203B270 -_0801EF2C: .4byte gRecruitedPokemonRef -_0801EF30: .4byte gUnknown_80DC25C -_0801EF34: .4byte gUnknown_80DC274 - thumb_func_end sub_801EE10 - thumb_func_start sub_801EF38 sub_801EF38: push {r4-r7,lr} @@ -3962,7 +3820,7 @@ sub_8020D90: bcc _08020DC6 cmp r0, 0x3 bne _08020DC6 - bl sub_801E930 + bl GulpinIsNextMoveLinked ldr r1, _08020DB8 ldr r1, [r1] strb r0, [r1, 0x14] diff --git a/asm/code_807CABC.s b/asm/code_807CABC.s index 9735b7161..d97abc6c7 100644 --- a/asm/code_807CABC.s +++ b/asm/code_807CABC.s @@ -5,70 +5,6 @@ .text - thumb_func_start sub_807CABC -sub_807CABC: - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r6, 0 - b _0807CADC -_0807CAC6: - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - bne _0807CB0A - ldr r1, _0807CB38 - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _0807CB0A - adds r6, 0x1 -_0807CADC: - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8070828 - cmp r6, r0 - bge _0807CB0A - ldr r5, [r4, 0x70] - adds r0, r5, 0 - adds r0, 0x48 - ldrb r1, [r0] - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x1 - movs r3, 0 - bl sub_8055A00 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _0807CAC6 -_0807CB0A: - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8057588 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807CB2A - ldr r0, [r4, 0x70] - adds r0, 0x48 - ldrb r1, [r0] - adds r0, r4, 0 - bl sub_806A9B4 -_0807CB2A: - adds r0, r4, 0 - bl sub_806A1B0 - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0807CB38: .4byte 0x00000159 - thumb_func_end sub_807CABC - thumb_func_start sub_807CB3C sub_807CB3C: push {r4-r7,lr} diff --git a/asm/unk_menu_203B360.s b/asm/unk_menu_203B360.s deleted file mode 100644 index d2962a7a4..000000000 --- a/asm/unk_menu_203B360.s +++ /dev/null @@ -1,76 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8038440 -sub_8038440: - push {r4,r5,lr} - movs r5, 0 - ldr r0, _080384B0 - ldr r0, [r0] - mov r12, r0 - movs r3, 0xD4 - lsls r3, 1 - add r3, r12 - ldrh r1, [r3] - ldr r0, _080384B4 - ands r0, r1 - ldr r1, _080384B8 - ands r0, r1 - ldr r4, _080384BC - ands r0, r4 - ldr r1, _080384C0 - ands r0, r1 - ldr r1, _080384C4 - ands r0, r1 - movs r2, 0x80 - lsls r2, 7 - ldr r1, _080384C8 - ands r0, r1 - orrs r0, r2 - strh r0, [r3] - movs r2, 0xFC - lsls r2, 2 - ldrh r1, [r3, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - ands r0, r4 - movs r2, 0xF - movs r4, 0xF0 - lsls r4, 8 - ldr r1, _080384CC - ands r0, r1 - orrs r0, r4 - strh r0, [r3, 0x4] - movs r0, 0x70 - strh r0, [r3, 0x2] - movs r1, 0xE0 - lsls r1, 3 - ldrh r0, [r3, 0x6] - ands r2, r0 - orrs r2, r1 - strh r2, [r3, 0x6] - movs r0, 0xD8 - lsls r0, 1 - add r0, r12 - str r5, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080384B0: .4byte gUnknown_203B360 -_080384B4: .4byte 0x0000feff -_080384B8: .4byte 0x0000fdff -_080384BC: .4byte 0x0000f3ff -_080384C0: .4byte 0x0000efff -_080384C4: .4byte 0x0000dfff -_080384C8: .4byte 0x00003fff -_080384CC: .4byte 0x00000fff - thumb_func_end sub_8038440 - - .align 2,0 diff --git a/asm/unk_menu_203B364.s b/asm/unk_menu_203B364.s deleted file mode 100644 index d0a2b6e2a..000000000 --- a/asm/unk_menu_203B364.s +++ /dev/null @@ -1,364 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start UpdateSaveMenu -UpdateSaveMenu: - push {r4-r6,lr} - sub sp, 0x18 - ldr r5, _080386A8 - movs r0, 0x3 - str r0, [sp, 0x14] - ldr r6, _080386AC - ldr r0, [r6] - ldr r4, [r0, 0x4] - cmp r4, 0x1 - bne _08038646 - b _08038798 -_08038646: - cmp r4, 0x1 - bcc _0803864C - b _08038824 -_0803864C: - adds r0, 0x8 - bl sub_8012FD8 - movs r5, 0 - str r5, [sp, 0x10] - bl sub_80140F8 - bl sub_8011C1C - adds r1, r0, 0 - add r0, sp, 0x10 - bl WriteSavetoPak - adds r4, r0, 0 - bl sub_8014114 - cmp r4, 0 - beq _080386B8 - cmp r4, 0x1 - beq _08038738 - ldr r0, [r6] - movs r4, 0xA4 - lsls r4, 1 - adds r0, r4 - movs r1, 0 - bl sub_8035CC0 - ldr r1, [r6] - ldr r0, [r1] - cmp r0, 0x2E - bne _08038750 - adds r0, r1, 0 - adds r0, 0x8 - adds r1, r4 - ldr r3, _080386B0 - ldr r2, _080386B4 - str r2, [sp] - str r5, [sp, 0x4] - movs r2, 0x6 - str r2, [sp, 0x8] - str r5, [sp, 0xC] - movs r2, 0 - bl SetMenuItems - b _0803876E - .align 2, 0 -_080386A8: .4byte 0x0000ffdc -_080386AC: .4byte gUnknown_203B364 -_080386B0: .4byte gUnknown_80E6F38 -_080386B4: .4byte gUnknown_80E7114 -_080386B8: - ldr r0, [r6] - movs r1, 0xA4 - lsls r1, 1 - adds r0, r1 - movs r1, 0 - bl sub_8035CC0 - ldr r1, [r6] - ldr r0, [r1] - cmp r0, 0x2E - bne _080386F8 - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _080386F0 - ldr r2, _080386F4 - str r2, [sp] - str r5, [sp, 0x4] - movs r2, 0x6 - str r2, [sp, 0x8] - str r5, [sp, 0xC] - movs r2, 0 - bl SetMenuItems - b _08038716 - .align 2, 0 -_080386F0: .4byte gUnknown_80E6F38 -_080386F4: .4byte gUnknown_80E70CC -_080386F8: - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038728 - ldr r2, _0803872C - str r2, [sp] - str r5, [sp, 0x4] - movs r2, 0x6 - str r2, [sp, 0x8] - str r5, [sp, 0xC] - movs r2, 0 - bl SetMenuItems -_08038716: - ldr r4, _08038730 - ldr r1, [r4] - ldr r0, [r1] - cmp r0, 0x2D - bne _08038734 - movs r0, 0x1 - str r0, [r1, 0x4] - movs r0, 0x13 - b _08038826 - .align 2, 0 -_08038728: .4byte gUnknown_80E6F38 -_0803872C: .4byte gUnknown_80E6FBC -_08038730: .4byte gUnknown_203B364 -_08038734: - adds r0, r1, 0 - b _08038772 -_08038738: - ldr r0, _0803874C - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80141B4 - ldr r1, [r6] - movs r0, 0x5 - b _08038780 - .align 2, 0 -_0803874C: .4byte gUnknown_80E7178 -_08038750: - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038788 - ldr r2, _0803878C - str r2, [sp] - str r5, [sp, 0x4] - movs r2, 0x6 - str r2, [sp, 0x8] - str r5, [sp, 0xC] - movs r2, 0 - bl SetMenuItems -_0803876E: - ldr r4, _08038790 - ldr r0, [r4] -_08038772: - adds r0, 0x8 - movs r1, 0 - movs r2, 0x1 - bl sub_8035CF4 - ldr r1, [r4] - movs r0, 0x1 -_08038780: - str r0, [r1, 0x4] - ldr r5, _08038794 - b _08038824 - .align 2, 0 -_08038788: .4byte gUnknown_80E6F38 -_0803878C: .4byte gUnknown_80E701C -_08038790: .4byte gUnknown_203B364 -_08038794: .4byte 0x0000ffdc -_08038798: - adds r0, 0x8 - bl sub_80130A8 - lsls r0, 24 - cmp r0, 0 - bne _080387AE - ldr r0, [r6] - adds r0, 0x8 - add r1, sp, 0x14 - bl sub_8013114 -_080387AE: - ldr r0, [sp, 0x14] - cmp r0, 0x3 - beq _0803881C - cmp r0, 0x3 - bhi _080387BE - cmp r0, 0x2 - beq _080387C2 - b _08038820 -_080387BE: - cmp r0, 0x4 - bne _08038820 -_080387C2: - ldr r4, _080387D8 - ldr r1, [r4] - ldr r0, [r1] - cmp r0, 0x29 - beq _080387D0 - cmp r0, 0x2E - bne _080387DC -_080387D0: - movs r0, 0x1 - str r0, [r1, 0x4] - movs r5, 0x1 - b _08038820 - .align 2, 0 -_080387D8: .4byte gUnknown_203B364 -_080387DC: - cmp r0, 0x2D - bne _080387E8 - movs r0, 0x1 - str r0, [r1, 0x4] - movs r5, 0x13 - b _08038820 -_080387E8: - cmp r0, 0x2C - bne _080387F4 - movs r0, 0x1 - str r0, [r1, 0x4] - movs r5, 0x1F - b _08038820 -_080387F4: - bl GetMainMenu - adds r0, 0x3A - ldrb r0, [r0] - cmp r0, 0 - beq _0803880A - ldr r1, [r4] - movs r0, 0x1 - str r0, [r1, 0x4] - movs r5, 0x35 - b _08038820 -_0803880A: - ldr r0, [r4] - movs r1, 0x1 - str r1, [r0, 0x4] - ldr r0, [r0] - movs r5, 0xB - cmp r0, 0x2B - bne _08038820 - movs r5, 0xD - b _08038820 -_0803881C: - ldr r0, [r6] - str r4, [r0, 0x4] -_08038820: - bl sub_80388C4 -_08038824: - adds r0, r5, 0 -_08038826: - add sp, 0x18 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end UpdateSaveMenu - - thumb_func_start sub_8038830 -sub_8038830: - push {r4,r5,lr} - movs r5, 0 - ldr r0, _080388A4 - ldr r0, [r0] - mov r12, r0 - movs r3, 0xD4 - lsls r3, 1 - add r3, r12 - ldrh r1, [r3] - ldr r0, _080388A8 - ands r0, r1 - ldr r1, _080388AC - ands r0, r1 - ldr r4, _080388B0 - ands r0, r4 - ldr r1, _080388B4 - ands r0, r1 - ldr r1, _080388B8 - ands r0, r1 - movs r2, 0x80 - lsls r2, 7 - ldr r1, _080388BC - ands r0, r1 - orrs r0, r2 - strh r0, [r3] - movs r2, 0xFC - lsls r2, 2 - ldrh r1, [r3, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - ands r0, r4 - movs r2, 0xF - movs r4, 0xF0 - lsls r4, 8 - ldr r1, _080388C0 - ands r0, r1 - orrs r0, r4 - strh r0, [r3, 0x4] - movs r0, 0x70 - strh r0, [r3, 0x2] - movs r1, 0xD0 - lsls r1, 3 - ldrh r0, [r3, 0x6] - ands r2, r0 - orrs r2, r1 - strh r2, [r3, 0x6] - movs r0, 0xD8 - lsls r0, 1 - add r0, r12 - str r5, [r0] - movs r0, 0 - bl ResetSprites - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080388A4: .4byte gUnknown_203B364 -_080388A8: .4byte 0x0000feff -_080388AC: .4byte 0x0000fdff -_080388B0: .4byte 0x0000f3ff -_080388B4: .4byte 0x0000efff -_080388B8: .4byte 0x0000dfff -_080388BC: .4byte 0x00003fff -_080388C0: .4byte 0x00000fff - thumb_func_end sub_8038830 - - thumb_func_start sub_80388C4 -sub_80388C4: - push {r4,r5,lr} - ldr r5, _080388FC - ldr r2, [r5] - movs r4, 0xD8 - lsls r4, 1 - adds r0, r2, r4 - ldr r0, [r0] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080388EA - movs r1, 0xD4 - lsls r1, 1 - adds r0, r2, r1 - subs r1, 0xA8 - movs r2, 0 - movs r3, 0 - bl AddSprite -_080388EA: - ldr r1, [r5] - adds r1, r4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080388FC: .4byte gUnknown_203B364 - thumb_func_end sub_80388C4 - - .align 2,0 diff --git a/data/data_80D47B8.s b/data/data_80D47B8.s index 3f7836b7c..800485966 100644 --- a/data/data_80D47B8.s +++ b/data/data_80D47B8.s @@ -1,10 +1,5 @@ .section .rodata - .global gUnknown_80D47B8 -gUnknown_80D47B8: @ 80D47B8 - .byte 0x07, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00 .global UnkData_80D47C4 UnkData_80D47C4: diff --git a/data/data_80E59A8.s b/data/data_80E59A8.s index 01f63de40..0858fac51 100644 --- a/data/data_80E59A8.s +++ b/data/data_80E59A8.s @@ -520,358 +520,3 @@ gUnknown_80E6EAC: @ 80E6EAC .asciz "pksdir0" - .global gUnknown_80E6F20 -gUnknown_80E6F20: @ 80E6F20 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E6F38 -gUnknown_80E6F38: @ 80E6F38 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x05, 0x00, 0x08, 0x00 - .byte 0x15, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E6F50 -gUnknown_80E6F50: @ 80E6F50 - .4byte sUnknown_80E6FAC, 0x4 - .4byte sUnknown_80E6F90, 0x4 - .4byte sUnknown_80E6F70, 0x4 - .4byte 0, 0x2 - -sUnknown_80E6F70: - .string "#+Don~27t turn off the power.\0" - .align 2, 0 - -sUnknown_80E6F90: - .string "#+Saving your adventure!\0" - .align 2, 0 - -sUnknown_80E6FAC: - .string "#+#C2Beware!#R \0" - .align 2, 0 - - .global gUnknown_80E6FBC -gUnknown_80E6FBC: @ 80E6FBC - .4byte sUnknown_80E7008, 0x4 - .4byte sUnknown_80E6FF0, 0x4 - .4byte sUnknown_80E6FDC, 0x4 - .4byte 0, 0x2 - -sUnknown_80E6FDC: - .string "#+has been saved.\0" - .align 2, 0 - -sUnknown_80E6FF0: - .string "#+Your adventure so far\0" - .align 2, 0 - -sUnknown_80E7008: - .string "#+#CGSuccess!#R \0" - .align 2, 0 - - .global gUnknown_80E701C -gUnknown_80E701C: @ 80E701C - .4byte sUnknown_80E7078, 0x4 - .4byte sUnknown_80E7050, 0x4 - .4byte sUnknown_80E703C, 0x4 - .4byte 0, 0x2 - -sUnknown_80E703C: - .string "#+Please try again.\0" - .align 2, 0 - -sUnknown_80E7050: - .string "#+Your adventure could not be saved.\0" - .align 2, 0 - -sUnknown_80E7078: - .string "#+#C2Save failed!#R \0" - .align 2, 0 - - .global gUnknown_80E7090 -gUnknown_80E7090: @ 80E7090 - .4byte sUnknown_80E6FAC, 0x4 - .4byte DeletingAdventure_80E70B0, 0x4 - .4byte sUnknown_80E6F70, 0x4 - .4byte 0, 0x2 - -DeletingAdventure_80E70B0: - .string "{CENTER_ALIGN}Deleting your adventure!\0" - .align 2, 0 - - .global gUnknown_80E70CC -gUnknown_80E70CC: @ 80E70CC - .4byte sUnknown_80E7008, 0x4 - .4byte AdventureDeleted_80E70F0, 0x4 - .4byte Data_80E70EC, 0x4 - .4byte 0, 0x2 - -Data_80E70EC: - .string " \0" - .align 2, 0 - -AdventureDeleted_80E70F0: - .string "{CENTER_ALIGN}Your adventure has been deleted.\0" - .align 2, 0 - - .global gUnknown_80E7114 -gUnknown_80E7114: @ 80E7114 - .4byte sUnknown_80E715C, 0x4 - .4byte sUnknown_80E7134, 0x4 - .4byte sUnknown_80E703C, 0x4 - .4byte 0, 0x2 - -sUnknown_80E7134: - .string "#+Your adventure could not be deleted.\0" - .align 2, 0 - -sUnknown_80E715C: - .string "#+#C2Deletion failed!#R \0" - .align 2, 0 - - .global gUnknown_80E7178 -gUnknown_80E7178: @ 80E7178 - .string "#+The data could not be written.\n" - .string "#+Please turn off the power and remove\n" - .string "#+and reinsert the DS Card.\0" - .align 2, 0 - - .string "pksdir0\0" - - .global gUnknown_80E71E4 -gUnknown_80E71E4: @ 80E71E4 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E71FC -gUnknown_80E71FC: @ 80E71FC - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E7214 -gUnknown_80E7214: @ 80E7214 - .4byte Error_80E7268, 0xC - .4byte IncorrectPassword_80E7250, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -CheckAgain_80E7234: - .string "{CENTER_ALIGN}Please check it again.\0" - .align 2, 0 - -IncorrectPassword_80E7250: - .string "{CENTER_ALIGN}Incorrect password!\0" - .align 2, 0 - -Error_80E7268: - .string "{CENTER_ALIGN}{COLOR_1 RED}Error!{END_COLOR_TEXT_1} \0" - .align 2, 0 - - .global gUnknown_80E7278 -gUnknown_80E7278: @ 80E7278 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E7290 -gUnknown_80E7290: @ 80E7290 - .4byte Success_80E72D8, 0xC - .4byte PasswordAccept_80E72B4, 0xC - .4byte DATA_80E72B0, 0xC - .4byte 0, 0xA - -DATA_80E72B0: - .string " \0" - .align 2, 0 - -PasswordAccept_80E72B4: - .string "{CENTER_ALIGN}The password has been accepted.\0" - .align 2, 0 - -Success_80E72D8: - .string "{CENTER_ALIGN}{COLOR_1 LIGHT_BLUE_2}Success!{END_COLOR_TEXT_1} \0" - .align 2, 0 - - .global gUnknown_80E72EC -gUnknown_80E72EC: @ 80E72EC - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E7304 -gUnknown_80E7304: @ 80E7304 - .4byte Error_80E7268, 0xC - .4byte NotSOSMail_80E7324, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -NotSOSMail_80E7324: - .string "{CENTER_ALIGN}This is not an {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1}.\0" - .align 2, 0 - - .global gUnknown_80E7344 -gUnknown_80E7344: @ 80E7344 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E735C -gUnknown_80E735C: @ 80E735C - .4byte Error_80E7268, 0xC - .4byte ReceiveSOSMail_80E737C, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -ReceiveSOSMail_80E737C: - .string "{CENTER_ALIGN}This {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1} has been received already.\0" - .align 2, 0 - - .global gUnknown_80E73AC -gUnknown_80E73AC: @ 80E73AC - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E73C4 -gUnknown_80E73C4: @ 80E73C4 - .4byte Error_80E7268, 0xC - .4byte sUnknown_80E73E4, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -sUnknown_80E73E4: - .string "#+This is not an #CGA-OK Mail#R.\0" - .align 2, 0 - - .global gUnknown_80E7408 -gUnknown_80E7408: @ 80E7408 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E7420 -gUnknown_80E7420: @ 80E7420 - .4byte Error_80E7268, 0xC - .4byte sUnknown_80E7440, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -sUnknown_80E7440: - .string "#+This #CGA-OK Mail#R cannot be used.\0" - .align 2, 0 - - .global gUnknown_80E7468 -gUnknown_80E7468: @ 80E7468 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E7480 -gUnknown_80E7480: @ 80E7480 - .4byte Error_80E7268, 0xC - .4byte sUnknown_80E74A0, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -sUnknown_80E74A0: - .string "#+This is not a #CGThank-You Mail#R.\0" - .align 2, 0 - - .global gUnknown_80E74C8 -gUnknown_80E74C8: @ 80E74C8 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E74E0 -gUnknown_80E74E0: @ 80E74E0 - .4byte Error_80E7268, 0xC - .4byte sUnknown_80E7500, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -sUnknown_80E7500: - .string "#+This #CGThank-You Mail#R cannot be used.\0" - .align 2, 0 - - .global gUnknown_80E752C -gUnknown_80E752C: @ 80E752C - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E7544 -gUnknown_80E7544: @ 80E7544 - .4byte Error_80E7268, 0xC - .4byte sUnknown_80E7564, 0xC - .4byte CheckAgain_80E7234, 0xC - .4byte 0, 0xA - -sUnknown_80E7564: - .string "#+This is not a #CGWonder Mail#R.\0" - .align 2, 0 - - .global gUnknown_80E7588 -gUnknown_80E7588: @ 80E7588 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x09, 0x00 - .byte 0x17, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80E75A0 -gUnknown_80E75A0: @ 80E75A0 - .4byte Error_80E7268, 0xC - .4byte sUnknown_80E75CC, 0xC - .4byte sUnknown_80E75C0, 0xC - .4byte 0, 0xA - -sUnknown_80E75C0: - .string "#+new mail.\0" - .align 2, 0 - -sUnknown_80E75CC: - .string "#+There is no space for receiving\0" - .align 2, 0 - - .string "pksdir0\0" diff --git a/data/data_80E6F20.s b/data/data_80E6F20.s new file mode 100644 index 000000000..3b966715b --- /dev/null +++ b/data/data_80E6F20.s @@ -0,0 +1,233 @@ + .section .rodata + + .global gUnknown_80E71E4 +gUnknown_80E71E4: @ 80E71E4 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E71FC +gUnknown_80E71FC: @ 80E71FC + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E7214 +gUnknown_80E7214: @ 80E7214 + .4byte Error_80E7268, 0xC + .4byte IncorrectPassword_80E7250, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +CheckAgain_80E7234: + .string "{CENTER_ALIGN}Please check it again.\0" + .align 2, 0 + +IncorrectPassword_80E7250: + .string "{CENTER_ALIGN}Incorrect password!\0" + .align 2, 0 + +Error_80E7268: + .string "{CENTER_ALIGN}{COLOR_1 RED}Error!{END_COLOR_TEXT_1} \0" + .align 2, 0 + + .global gUnknown_80E7278 +gUnknown_80E7278: @ 80E7278 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E7290 +gUnknown_80E7290: @ 80E7290 + .4byte Success_80E72D8, 0xC + .4byte PasswordAccept_80E72B4, 0xC + .4byte DATA_80E72B0, 0xC + .4byte 0, 0xA + +DATA_80E72B0: + .string " \0" + .align 2, 0 + +PasswordAccept_80E72B4: + .string "{CENTER_ALIGN}The password has been accepted.\0" + .align 2, 0 + +Success_80E72D8: + .string "{CENTER_ALIGN}{COLOR_1 LIGHT_BLUE_2}Success!{END_COLOR_TEXT_1} \0" + .align 2, 0 + + .global gUnknown_80E72EC +gUnknown_80E72EC: @ 80E72EC + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E7304 +gUnknown_80E7304: @ 80E7304 + .4byte Error_80E7268, 0xC + .4byte NotSOSMail_80E7324, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +NotSOSMail_80E7324: + .string "{CENTER_ALIGN}This is not an {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1}.\0" + .align 2, 0 + + .global gUnknown_80E7344 +gUnknown_80E7344: @ 80E7344 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E735C +gUnknown_80E735C: @ 80E735C + .4byte Error_80E7268, 0xC + .4byte ReceiveSOSMail_80E737C, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +ReceiveSOSMail_80E737C: + .string "{CENTER_ALIGN}This {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1} has been received already.\0" + .align 2, 0 + + .global gUnknown_80E73AC +gUnknown_80E73AC: @ 80E73AC + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E73C4 +gUnknown_80E73C4: @ 80E73C4 + .4byte Error_80E7268, 0xC + .4byte sUnknown_80E73E4, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +sUnknown_80E73E4: + .string "#+This is not an #CGA-OK Mail#R.\0" + .align 2, 0 + + .global gUnknown_80E7408 +gUnknown_80E7408: @ 80E7408 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E7420 +gUnknown_80E7420: @ 80E7420 + .4byte Error_80E7268, 0xC + .4byte sUnknown_80E7440, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +sUnknown_80E7440: + .string "#+This #CGA-OK Mail#R cannot be used.\0" + .align 2, 0 + + .global gUnknown_80E7468 +gUnknown_80E7468: @ 80E7468 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E7480 +gUnknown_80E7480: @ 80E7480 + .4byte Error_80E7268, 0xC + .4byte sUnknown_80E74A0, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +sUnknown_80E74A0: + .string "#+This is not a #CGThank-You Mail#R.\0" + .align 2, 0 + + .global gUnknown_80E74C8 +gUnknown_80E74C8: @ 80E74C8 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E74E0 +gUnknown_80E74E0: @ 80E74E0 + .4byte Error_80E7268, 0xC + .4byte sUnknown_80E7500, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +sUnknown_80E7500: + .string "#+This #CGThank-You Mail#R cannot be used.\0" + .align 2, 0 + + .global gUnknown_80E752C +gUnknown_80E752C: @ 80E752C + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E7544 +gUnknown_80E7544: @ 80E7544 + .4byte Error_80E7268, 0xC + .4byte sUnknown_80E7564, 0xC + .4byte CheckAgain_80E7234, 0xC + .4byte 0, 0xA + +sUnknown_80E7564: + .string "#+This is not a #CGWonder Mail#R.\0" + .align 2, 0 + + .global gUnknown_80E7588 +gUnknown_80E7588: @ 80E7588 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x09, 0x00 + .byte 0x17, 0x00, 0x05, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80E75A0 +gUnknown_80E75A0: @ 80E75A0 + .4byte Error_80E7268, 0xC + .4byte sUnknown_80E75CC, 0xC + .4byte sUnknown_80E75C0, 0xC + .4byte 0, 0xA + +sUnknown_80E75C0: + .string "#+new mail.\0" + .align 2, 0 + +sUnknown_80E75CC: + .string "#+There is no space for receiving\0" + .align 2, 0 + + .string "pksdir0\0" + diff --git a/include/constants/input.h b/include/constants/input.h new file mode 100644 index 000000000..e7d42ad79 --- /dev/null +++ b/include/constants/input.h @@ -0,0 +1,25 @@ +#ifndef GUARD_CONSTANTS_INPUT_H +#define GUARD_CONSTANTS_INPUT_H + +#define INPUT_NONE 0 +#define INPUT_A_BUTTON 1 +#define INPUT_B_BUTTON 2 +#define INPUT_SELECT_BUTTON 3 +#define INPUT_START_BUTTON 4 +#define INPUT_L_BUTTON 5 +#define INPUT_R_BUTTON 6 +#define INPUT_DPAD_UP 7 +#define INPUT_DPAD_DOWN 8 +#define INPUT_DPAD_LEFT 9 +#define INPUT_DPAD_RIGHT 10 + +// When R button is pressed in combination with other keys +#define INPUT_R_A_BUTTONS 11 +#define INPUT_R_DPAD_UP_BUTTONS 12 +#define INPUT_R_DPAD_DOWN_BUTTONS 13 +#define INPUT_R_DPAD_LEFT_BUTTONS 14 +#define INPUT_R_DPAD_RIGHT_BUTTONS 15 + + +#endif // GUARD_CONSTANTS_INPUT_H + diff --git a/include/debug_menu.h b/include/debug_menu.h index ea3b3d6f1..ceeca6511 100644 --- a/include/debug_menu.h +++ b/include/debug_menu.h @@ -3,6 +3,7 @@ #include "text.h" #include "menu.h" +#include "menu_input.h" enum DebugMenuOptions { @@ -19,7 +20,7 @@ enum DebugMenuOptions struct DebugMenu { // size: 0x1A4 - u8 fill0[0x140]; + struct MenuStruct unk0[4]; /* 0x140 */ struct UnkTextStruct2 unk140[4]; u32 fill1A0; }; @@ -33,8 +34,7 @@ struct unkStruct_203B3F8 u16 unk6; struct PokemonStruct *pokemon; u32 unkC; - const char *unk10; - u8 fill14[0x60 - 0x14]; + struct MenuStruct unk10; u32 unk60; u32 unk64; u32 unk68; diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index 8a18c7d73..17be84fbb 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -96,7 +96,7 @@ struct Dungeon u8 fill662[0x666 - 0x662]; /* 0x666 */ u16 windTurns; // Turns remaining before getting swept out of the dungeon. u8 fill668[0x66A - 0x668]; - u16 unk66A; + u16 bossSongIndex; u8 unk66C; u8 unk66D; /* 0x66E */ u8 unk66E; diff --git a/include/friend_area_action_menu.h b/include/friend_area_action_menu.h index e204acda1..01d76cfd4 100644 --- a/include/friend_area_action_menu.h +++ b/include/friend_area_action_menu.h @@ -1,18 +1,19 @@ #ifndef GUARD_FRIEND_AREA_ACTION_MENU_H #define GUARD_FRIEND_AREA_ACTION_MENU_H +#include "menu.h" struct unkStruct_203B2BC { // size: 0x1E0 u32 state; - u32 unk4; + u32 fallbackState; s16 targetPoke; u16 unkA; u32 id; struct BulkItem itemToGive; struct BulkItem item2; struct PokemonStruct *unk18; - u8 unk1C; + bool8 isTeamLeader; u32 moveIndex; // some sort of move index u16 moveID; struct Move moves[8]; @@ -21,18 +22,23 @@ struct unkStruct_203B2BC u32 unk70; s32 unk74; u32 unk78; - u32 unk7C; - u8 fill80[0xFD - 0x80]; + struct MenuStruct unk7C; + u8 fill80[0xFD - 0xCC]; u32 unkFD; u8 fill101[0x11C - 0x104]; struct MenuItem menuItems[4]; u8 fill120[0x16C - 0x13C]; // Structure of some sort - u32 unk16C; + u16 unk16C; u8 fill170[0x180 - 0x170]; struct UnkTextStruct2 unk180[4]; }; +enum FriendAreaActionMenuStates { + FRIEND_AREA_ACTION_MENU_INIT, + FRIEND_AREA_ACTION_MENU_EXIT = 0x11, +}; + #endif diff --git a/include/friend_rescue.h b/include/friend_rescue.h index 19a5ef128..2fbc33e9f 100644 --- a/include/friend_rescue.h +++ b/include/friend_rescue.h @@ -5,6 +5,7 @@ #include "item.h" #include "pokemon.h" #include "wonder_mail.h" +#include "menu.h" struct WonderMailStruct_203B33C { @@ -21,13 +22,7 @@ struct WonderMailStruct_203B33C struct unkStruct_203B480 unk1B8; struct unkStruct_203B480 unk1E8; u8 unk218; - u8 padding7[3]; - u32 unk21C; - u8 padding[0x7C]; - u32 unk29C; - u8 padding6[0x6C]; - u32 unk30C; - u8 padding8[0x4C]; + struct MenuStruct unk21C[4]; struct UnkTextStruct2 unk35C[4]; struct UnkTextStruct2 unk3BC[4]; struct Item unk41C; diff --git a/include/gulpin_shop.h b/include/gulpin_shop.h index cbc266f16..1f5421e56 100644 --- a/include/gulpin_shop.h +++ b/include/gulpin_shop.h @@ -8,8 +8,8 @@ struct unkStruct_203B26C s32 state; u32 unk8; s16 speciesNum; // species of chosen Pokemon - u8 unkE; - struct Move * unk10; + bool8 isNextMoveLinked; + struct Move * moves; u32 unk14; u32 unk18; u16 unk1C; @@ -18,8 +18,8 @@ struct unkStruct_203B26C u32 unk24; struct MenuItem unk28[8]; u16 unk68[8]; - u32 unk78; - u8 fill7C[0x118 - 0x7C]; + struct MenuStruct unk78; + u8 fillC8[0x118 - 0xC8]; /* 0x118 */ struct OpenedFile *faceFile; /* 0x11C */ u8 *faceData; /* 0x120 */ u16 unk120; diff --git a/include/input.h b/include/input.h index fb1322b40..083c4ccc5 100644 --- a/include/input.h +++ b/include/input.h @@ -55,13 +55,13 @@ struct UnkInputStruct /* 0x2 */ u8 unk2; /* 0x3 */ u8 unk3; /* 0x4 */ u8 unk4; - /* 0x5 */ u32 unk5; - /* 0x9 */ u32 unk9; - /* 0xD */ u32 unkD; - /* 0x12 */ u32 unk11; - /* 0x16 */ u32 unk15; - /* 0x1A */ u32 unk19; - /* 0x1E */ u32 unk1D; + /* 0x8 */ u32 unk8; + /* 0xC */ u32 unkC; + /* 0x10 */ u32 unk10; + /* 0x14 */ u32 unk14; + /* 0x18 */ u32 unk18; + /* 0x1C */ u32 unk1C; + /* 0x20 */ u32 unk20; /* 0x24 */ u32 unk24; /* 0x28 */ u8 unk28; /* 0x29 */ u8 a_button; diff --git a/include/kangaskhan_storage.h b/include/kangaskhan_storage.h index 2ef0cfc7b..3833e9a82 100644 --- a/include/kangaskhan_storage.h +++ b/include/kangaskhan_storage.h @@ -20,8 +20,7 @@ struct unkStruct_203B208 u32 unk20; struct MenuItem unk24[5]; u16 unk4C[5]; - u32 unk58; - u8 unk5C[0xA8 - 0x5C]; + struct MenuStruct unk58; u32 unkA8; u8 unkAC[0xBC - 0xAC]; u32 unkBC; @@ -51,8 +50,7 @@ struct unkStruct_203B20C u32 unk1C; struct MenuItem unk20[8]; u16 unk60[8]; - u32 unk70; - u8 fill74[0xC0 - 0x74]; + struct MenuStruct unk70; u32 unkC0; u32 unkC4; u32 unkC8; diff --git a/include/kecleon_items.h b/include/kecleon_items.h index db4827c48..b952896b1 100644 --- a/include/kecleon_items.h +++ b/include/kecleon_items.h @@ -25,8 +25,7 @@ struct unkStruct_203B210 u32 unk30; struct MenuItem unk34[8]; u16 unk74[8]; - u32 unk84; - u8 fill88[0xD4 - 0x88]; + struct MenuStruct unk84; struct OpenedFile *faceFile; u8 *unkD8; u16 unkDC; diff --git a/include/mailbox.h b/include/mailbox.h index 22133e0c4..79e4d1e41 100644 --- a/include/mailbox.h +++ b/include/mailbox.h @@ -19,8 +19,7 @@ struct unkStruct_203B304 u8 fill51[0x64 - 0x51]; u32 unk64; u32 unk68; - u32 unk6C; - u8 fill70[0xBC - 0x70]; + struct MenuStruct unk6C; struct MenuItem unkBC[8]; u16 unkFC[8]; struct UnkTextStruct2 unk10C[4]; diff --git a/include/main_menu.h b/include/main_menu.h index 9df4513b7..606b6086b 100644 --- a/include/main_menu.h +++ b/include/main_menu.h @@ -74,5 +74,6 @@ void CleanUpMenu(void); bool8 sub_80363E0(void); struct unkStruct_8035D94 *sub_8035D94(void); void sub_8035DA0(void); +struct MainMenu *GetMainMenu(void); #endif // GUARD_MAIN_MENU_H diff --git a/include/memory.h b/include/memory.h index 1c8a61ba8..618b962d3 100644 --- a/include/memory.h +++ b/include/memory.h @@ -53,7 +53,7 @@ void InitHeapInternal(void); void DoInitHeap(struct HeapDescriptor *, struct HeapSettings *, struct HeapFreeListElement *, u32); void InitSubHeap(struct HeapDescriptor *, struct HeapMemoryBlock *, u32); s32 _LocateSet(struct HeapDescriptor *heap, s32 size, s32 param_3); -void *MemoryAlloc(s32 size, s32 b); +void *MemoryAlloc(s32 size, s32 group); void MemoryFree(void *a); #endif // GUARD_MEMORY_H diff --git a/include/menu.h b/include/menu.h index 4e463607e..4c8a93ba7 100644 --- a/include/menu.h +++ b/include/menu.h @@ -4,7 +4,28 @@ struct MenuItem { const u8 *text; - u32 menuAction; // action?? + s32 menuAction; // action?? +}; + +struct MenuStruct +{ + // size: 0x50 + const u8 *unk0; // header text? + /* 0x4 */ const struct MenuItem *menuItems; + const u32 *menuTextColorArray; + u16 *unkC; + /* 0x10 */ s32 index; + /* 0x14 */ u32 unk14; + u8 fill18[0x2C - 0x18]; + /* 0x2C */ s16 menuIndex; + s16 unk2E; + u8 fill30[0x38 - 0x30]; + u16 unk38; + u8 fill3A[0x48 - 0x3A]; + /* 0x48 */ s32 menuAction; + bool8 unk4C; + bool8 unk4D; + bool8 unk4E; }; #endif // GUARD_MENU_H diff --git a/include/menu_input.h b/include/menu_input.h new file mode 100644 index 000000000..bf14abb22 --- /dev/null +++ b/include/menu_input.h @@ -0,0 +1,14 @@ +#include "menu.h" + +void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 param_5, u32 param_6); +void sub_8012C60(u32 x, u32 y, u32 param_3, u32 param_4, u32 param_5); +void sub_8012CAC(struct UnkTextStruct2 *param_1, const struct MenuItem *param_2); +void sub_8012D08(struct UnkTextStruct2 *param_1, s32 param_2); +void sub_8012D34(struct UnkTextStruct2 *param_1, s32 param_2); +void sub_8012D60(struct MenuStruct *param_1, const struct MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 param_5, s32 index); +void sub_8012E04(struct MenuStruct *param_1, const struct MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 param_5, s32 index); +void sub_8012EA4(struct MenuStruct *param_1, bool8 r1); +void sub_8012EBC(struct MenuStruct *param_1); +bool8 sub_8012FD8(struct MenuStruct *param_1); +bool8 sub_80130A8(struct MenuStruct *param_1); +bool8 sub_8013114(struct MenuStruct *param_1, s32 *menuAction); diff --git a/include/rescue_password_menu.h b/include/rescue_password_menu.h index b4be7198a..244b5bec0 100644 --- a/include/rescue_password_menu.h +++ b/include/rescue_password_menu.h @@ -1,6 +1,8 @@ #ifndef GUARD_RESCUE_PASSWORD_MENU_H #define GUARD_RESCUE_PASSWORD_MENU_H +#include "menu.h" + struct unkSprite { u16 unk208; @@ -14,13 +16,10 @@ struct RescuePasswordMenu // size: 0x214 u32 currMenu; u32 state; - u32 unk8; - u8 fillC[0x148 - 0xC]; + struct MenuStruct unk8[4]; struct UnkTextStruct2 unk148[4]; struct UnkTextStruct2 unk1A8[4]; - struct unkSprite unk208; - u32 unk210; }; diff --git a/include/status_checks_1.h b/include/status_checks_1.h index 6d0c3e999..e469c6988 100644 --- a/include/status_checks_1.h +++ b/include/status_checks_1.h @@ -6,5 +6,6 @@ bool8 HasNegativeStatus(struct Entity *pokemon); bool8 IsSleeping(struct Entity *pokemon); bool8 HasLowHealth(struct Entity *pokemon); +s32 sub_8070828(struct Entity *pokemon, bool8 displayMessage); #endif diff --git a/include/text.h b/include/text.h index eaf2ffc1b..13413d659 100644 --- a/include/text.h +++ b/include/text.h @@ -6,7 +6,9 @@ struct UnkTextStruct1 { u16 unk04; u8 fill06[2]; u16 unk08; - u8 fill04[0x3c]; + u16 fillA; + u32 unkC; + u8 fill04[0x36]; u8 unk46; }; @@ -19,9 +21,10 @@ struct UnkTextStruct2_sub }; struct UnkTextStruct2 { - u8 fill00[0x08]; + u8 fill00[0x04]; + s32 unk4; struct UnkTextStruct2_sub unk08; - s16 unk0c; + s16 unkC; s16 unkE; s16 unk10; s16 unk12; diff --git a/include/trade_items_menu.h b/include/trade_items_menu.h index a659795d3..9e13e26d8 100644 --- a/include/trade_items_menu.h +++ b/include/trade_items_menu.h @@ -3,6 +3,7 @@ #include "text.h" #include "item.h" +#include "menu.h" struct TradeSubStruct { @@ -32,10 +33,7 @@ struct TradeItemsMenu u32 unk30; u32 unk34; u8 fill38[0x44 - 0x38]; - u32 unk44; - u8 fill8[0x134 - 0x48]; - u32 unk134; - u8 fill138[0x184 - 0x138]; + struct MenuStruct unk44[4]; struct UnkTextStruct2 unk184[4]; struct UnkTextStruct2 unk1E4[4]; diff --git a/include/wonder_mail.h b/include/wonder_mail.h index 432d723d7..eb83c7801 100644 --- a/include/wonder_mail.h +++ b/include/wonder_mail.h @@ -4,6 +4,7 @@ #include "file_system.h" #include "text.h" #include "item.h" +#include "menu.h" #include "pokemon.h" #include "code_8094F88.h" @@ -61,12 +62,7 @@ struct WonderMailStruct_203B2C0 struct WonderMailStruct_203B2C0_sub unk130; u8 fill16A[0x218 - 0x1B8]; u8 mailIndex; - u32 unk21C; - u8 padding[0x7C]; - u32 unk29C; - u8 padding6[0x6C]; - u32 unk30C; - u8 padding8[0x4C]; + struct MenuStruct unk21C[4]; struct UnkTextStruct2 unk35C[4]; struct UnkTextStruct2 unk3BC[4]; /* 0x41C */ u32 unkfill; // ItemSlot? @@ -99,10 +95,7 @@ struct WonderMailStruct_203B2C4 struct unkStruct_203B480 unk1B8; struct unkStruct_203B480 unk1E8; s8 mailIndex; - u32 unk21C; - u8 filler220[0x30C - 0x220]; - u32 unk30C; - u8 filler310[0x35C - 0x310]; + struct MenuStruct unk21C[4]; struct UnkTextStruct2 unk35C[4]; struct UnkTextStruct2 unk3BC[4]; struct Item unk41C; diff --git a/include/wonder_mail_3.h b/include/wonder_mail_3.h index ceac36012..3d161c449 100644 --- a/include/wonder_mail_3.h +++ b/include/wonder_mail_3.h @@ -1,3 +1,4 @@ +#include "menu.h" struct unkStruct_203B2F4 { u8 fill0[0x1A]; @@ -50,9 +51,8 @@ struct unkStruct_203B2F8 u32 unk6C; u32 unk70; u32 unk74; - u8 unk78[0xC8 - 0x78]; - u8 unkC8[4]; - u8 fillCC[0x118 - 0xCC]; + struct MenuStruct unk78; + struct MenuStruct unkC8; struct MenuItem unk118[8]; struct MenuItem unk158[8]; u16 unk198[8]; diff --git a/ld_script.txt b/ld_script.txt index ec32f1569..e46f2abee 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -89,7 +89,8 @@ SECTIONS { src/save.o(.text); src/code_8012A18.o(.text); src/more_input.o(.text); - asm/code_8012A18.o(.text); + src/menu_input.o(.text); + asm/code_80130A8.o(.text); src/code_8012A18_1.o(.text); src/felicity_bank.o(.text); asm/felicity_bank.o(.text); @@ -111,16 +112,16 @@ SECTIONS { asm/code_801C620.o(.text); src/code_801D760.o(.text); asm/code_801D760.o(.text); - src/code_801DCC4.o(.text); - asm/code_801DCC4.o(.text); + src/options_menu.o(.text); src/hints_menu.o(.text); src/gulpin_shop.o(.text); asm/gulpin_shop.o(.text); src/gulpin_shop_1.o(.text); + src/code_801EE10.o(.text); asm/code_801EE10.o(.text); src/code_8023144.o(.text); asm/code_801EE10_1.o(.text); - src/code_801EE10.o(.text); + src/code_801EE10_1.o(.text); src/luminous_cave.o(.text); src/friend_list_menu_1.o(.text); asm/friend_list_menu.o(.text); @@ -166,10 +167,7 @@ SECTIONS { asm/other_menus.o(.text); src/adventure_log_menu.o(.text); src/unk_menu_203B360.o(.text); - asm/unk_menu_203B360.o(.text); - src/unk_menu_203B360_1.o(.text); - src/unk_menu_203B364.o(.text); - asm/unk_menu_203B364.o(.text); + src/save_menu.o(.text); src/rescue_password_menu.o(.text); asm/rescue_password_menu.o(.text); src/rescue_password_menu_1.o(.text); @@ -424,6 +422,7 @@ SECTIONS { data/data_80B9BB8.o(.rodata); src/debug.o(.rodata); src/save.o(.rodata); + src/menu_input.o(.rodata); data/data_80D47B8.o(.rodata); src/friend_area_action_menu.o(.rodata); src/friend_area_action_menu_1.o(.rodata); @@ -448,6 +447,8 @@ SECTIONS { src/main_menu.o(.rodata); src/trade_items_menu.o(.rodata); data/data_80E59A8.o(.rodata); + src/save_menu.o(.rodata); + data/data_80E6F20.o(.rodata); src/load_screen.o(.rodata); src/wonder_mail_main_menu.o(.rodata); src/debug_menu.o(.rodata); diff --git a/src/adventure_log.c b/src/adventure_log.c index 8829b062b..05e5dabd9 100644 --- a/src/adventure_log.c +++ b/src/adventure_log.c @@ -1,8 +1,9 @@ #include "global.h" +#include "constants/input.h" #include "input.h" -#include "gba/io_reg.h" #include "memory.h" #include "text.h" +#include "menu_input.h" struct AdventureLog { @@ -23,7 +24,7 @@ extern struct AdventureLog *gAdventureLog; const struct UnkTextStruct2 gUnknown_80E1FF0 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -31,7 +32,7 @@ const struct UnkTextStruct2 gUnknown_80E1FF0 = { }; const struct UnkTextStruct2 gUnknown_80E2008 = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x1A, 0x04, 0x06, 0x00, @@ -62,7 +63,6 @@ extern void xxx_call_draw_string(s32, u32, const u8 *, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); extern void xxx_format_and_draw(u32, u32, const char *, u32, u32); const u8 *GetAdventureLogLine(u8 index); extern s32 sub_8013800(void *, s32); @@ -94,10 +94,10 @@ u32 HandleAdventureLogInput(u8 param_1) else { switch(GetKeyPress(gAdventureLog)) { - case B_BUTTON: + case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; - case A_BUTTON: + case INPUT_A_BUTTON: PlayMenuSoundEffect(0); return 3; default: diff --git a/src/code_8012A18_1.c b/src/code_8012A18_1.c index d654e5761..6e7104ccc 100644 --- a/src/code_8012A18_1.c +++ b/src/code_8012A18_1.c @@ -67,10 +67,10 @@ s32 sub_8015FEC(u8 *buffer, s32 size) { struct unkChar *iVar2; s32 currLength; - s32 iVar4; + s32 length; u8 *bufferPtr; - iVar4 = 0; + length = 0; currLength = 0; if(currLength < size && *buffer != '\0') @@ -78,12 +78,12 @@ s32 sub_8015FEC(u8 *buffer, s32 size) bufferPtr = buffer; // Had to have another variable to match.. do { iVar2 = GetCharacter(ReturnIntFromChar2(*bufferPtr)); - iVar4 += iVar2->unk6; + length += iVar2->unk6; bufferPtr++; currLength++; } while (currLength < size && *bufferPtr != '\0'); } - return iVar4; + return length; } s32 sub_8016028(void) @@ -205,7 +205,7 @@ void CreateConfirmNameMenu(void) void sub_80161F8(void) { - s32 iVar2; + s32 length; s32 maxLength; if (sub_80154F0() == 3) { @@ -214,9 +214,9 @@ void sub_80161F8(void) sub_80160F4(3); } else{ - iVar2 = sub_8015FEC(gUnknown_203B200->pokeName, POKEMON_NAME_LENGTH); + length = sub_8015FEC(gUnknown_203B200->pokeName, POKEMON_NAME_LENGTH); maxLength = sub_8016028(); // returns 60 - if (iVar2 > maxLength) { + if (length > maxLength) { sub_80160F4(2); } else { diff --git a/src/code_801B3C0.c b/src/code_801B3C0.c index b7e915560..e13caa43b 100644 --- a/src/code_801B3C0.c +++ b/src/code_801B3C0.c @@ -7,6 +7,7 @@ #include "menu.h" #include "pokemon.h" #include "team_inventory.h" +#include "menu_input.h" struct subStruct_203B240 { @@ -38,17 +39,14 @@ struct unkStruct_203B234 // size: 0x154 u32 unk0; u32 state; - u32 unk8; + u32 fallbackState; u8 unkC; - u8 fillD[0x10 - 0xD]; struct Item unk10; struct unkStruct_8090F58 unk14; struct Item unk20; u32 unk24; - u32 unk28; - u8 fill2C[0x78 - 0x2C]; - u32 unk78; - u8 fill7C[0xC8 - 0x7C]; + struct MenuStruct unk28; + struct MenuStruct unk78; u32 unkC8; struct MenuItem unkCC[5]; struct UnkTextStruct2 unkF4[4]; @@ -78,7 +76,6 @@ extern struct UnkTextStruct2 gUnknown_80DBA88; extern struct UnkTextStruct2 gUnknown_80DBA70; extern void sub_801BB5C(void); -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern void sub_801B748(u32); extern void sub_8008C54(u32); @@ -90,8 +87,6 @@ extern void sub_8013F84(void); extern u32 sub_8012A64(u32 *, u32); extern s32 sub_80913E0(struct Item *, u32, struct subStruct_203B240 **); extern void sub_80141B4(u8 *, u32, u32 *, u32); -extern void sub_8012EA4(u32 *, u32); -extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32); extern void sub_801BB20(void); extern void sub_801A8D0(u32); extern void sub_801A9E0(void); @@ -375,7 +370,7 @@ void sub_801B874(void) { case 0: if (gUnknown_203B234->unk10.id == ITEM_WEAVILE_FIG) { - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; if(sub_8001784(0,0x47,1) != 0) { AddToTeamMoney(1000); @@ -389,7 +384,7 @@ void sub_801B874(void) } else if (gUnknown_203B234->unk10.id == ITEM_MIME_JR_FIG) { - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; if(sub_8001784(0, 0x47, 0) != 0) { AddToTeamMoney(1000); @@ -410,13 +405,13 @@ void sub_801B874(void) if((gTeamInventory_203B460->teamStorage[gUnknown_203B234->unk10.id] + gUnknown_203B234->unkC) > 0x3e7) { store: - gUnknown_203B234->unk8 = 6; + gUnknown_203B234->fallbackState = 6; } else { gTeamInventory_203B460->teamStorage[gUnknown_203B234->unk10.id] += gUnknown_203B234->unkC; PlaySound(0xCB); - gUnknown_203B234->unk8 = 5; + gUnknown_203B234->fallbackState = 5; } } else @@ -429,7 +424,7 @@ void sub_801B874(void) AddItemToInventory(&gUnknown_203B234->unk10); FillInventoryGaps(); PlaySound(0xCB); - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; } if(gUnknown_203B234->unk0 == 1) sub_801B748(2); @@ -456,7 +451,7 @@ void sub_801B874(void) sub_80141B4(gUnknown_80DBB9C,0,0,0x101); break; case 5: - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; sub_80141B4(gUnknown_80DBC28,0,0,0x101); break; case 6: @@ -488,15 +483,15 @@ void sub_801B874(void) sub_8012D60(&gUnknown_203B234->unk78,gUnknown_203B234->unkCC,0,0,3,1); break; case 0xd: - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; sub_80141B4(gUnknown_80DBCC4,0,0,0x101); break; case 0xe: - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; sub_80141B4(gUnknown_80DBCE8,0,0,0x101); break; case 0xf: - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; sub_80141B4(gUnknown_80DBD24,0,0,0x101); break; case 0x10: diff --git a/src/code_801C620.c b/src/code_801C620.c index 1e02c268c..eff453107 100644 --- a/src/code_801C620.c +++ b/src/code_801C620.c @@ -3,15 +3,81 @@ #include "input.h" #include "memory.h" #include "pokemon.h" +#include "pokemon_3.h" +#include "team_inventory.h" #include "text.h" #include "subStruct_203B240.h" +#include "menu_input.h" + +struct unkStruct_203B234 +{ + // size: 0x154 + u32 unk0; + u32 state; + u32 fallbackState; + u8 unkC; + struct Item unk10; + struct unkStruct_8090F58 unk14; + struct Item unk20; + u32 unk24; + struct MenuStruct unk28; + struct MenuStruct unk78; + u32 unkC8; + struct MenuItem unkCC[5]; + struct UnkTextStruct2 unkF4[4]; +}; + +extern struct unkStruct_203B234 *gUnknown_203B234; + + +struct unkStruct_203B238 +{ + // size: 0x124 + u32 state; + s16 species; + struct PokemonStruct *pokeStruct; + u8 iqSkills[NUM_IQ_SKILLS]; + u32 unk24; + u8 iqSkillIndex; + u32 numIQSkills; + s32 unk30; + struct MenuItem unk34[8]; + struct MenuStruct unk74; + struct UnkTextStruct2 unkC4[4]; +}; + +struct unkStruct_203B23C +{ + // size: 0xC4 + /* 0x0 */ s16 species; + /* 0x4 */ struct PokemonStruct *pokeStruct; + /* 0x8 */ u8 iqSkills[NUM_IQ_SKILLS]; + /* 0x20 */ s32 numIQSkills; + /* 0x24 */ u32 unk24; + u8 fill28[0x3C - 0x28]; + s16 unk3C; + s16 unk3E; + s16 unk40; + s16 unk42; + s16 unk44; + s16 unk46; + u8 fill48[0x52 - 0x48]; + u8 unk52; + u8 fill52[0x58 - 0x53]; + u32 unk58; + /* 0x5C */ struct UnkTextStruct2 *unk5C; + /* 0x60 */ struct UnkTextStruct2 unk60[4]; + u8 unkC0; + u8 unkC1; + u8 unkC2; + u8 unkC3; +}; struct unkStruct_203B240 { // size: 0x94 s32 state; u8 chosenIQSkill; - u8 fill5[3]; s32 unk8; s32 unkC; struct subStruct_203B240 *unk10[2]; @@ -43,51 +109,680 @@ struct unkStruct_203B244 }; extern const struct UnkTextStruct2 gUnknown_80DBE54; +extern struct UnkTextStruct2 gUnknown_80DBDD8; +extern struct UnkTextStruct2 gUnknown_80DBDF0; +extern struct UnkTextStruct2 gUnknown_80DBDB0; +extern struct UnkTextStruct2 gUnknown_80DBD98; -extern struct unkStruct_203B244 *gUnknown_203B244; +extern struct unkStruct_203B238 *gUnknown_203B238; +extern struct unkStruct_203B23C *gUnknown_203B23C; extern struct unkStruct_203B240 *gUnknown_203B240; +extern struct unkStruct_203B244 *gUnknown_203B244; + extern u32 gUnknown_203B248; extern u16 gUnknown_203B24C; extern u16 gUnknown_203B24E; - -extern char gUnknown_80DBE2C[]; // {ARG_MOVE_ITEM_0} -extern char gUnknown_80DBE30[]; // {ARG_POKEMON_0} extern u8 gUnknown_202DE58[0x58]; extern u8 gAvailablePokemonNames[0x58]; +extern u8 gUnknown_80DBE18[]; +extern u8 gUnknown_80DBE14[]; +extern u8 gUnknown_202DEA8[]; +extern u8 gUnknown_202DE58[]; +extern u8 gUnknown_80DBE08[]; +extern u8 gUnknown_80DBE1C[]; +extern char gUnknown_80DBE2C[]; // {ARG_MOVE_ITEM_0} +extern char gUnknown_80DBE30[]; // {ARG_POKEMON_0} +extern u8 gUnknown_80DBDC8[]; +extern u8 *gUnknown_80D4970[]; + + extern bool8 sub_801CF14(u32); -extern void sub_8012D08(struct UnkTextStruct2 *, u32); extern void sub_8013818(u32 *, u32, u32, u32); extern u32 sub_801CE58(void); extern void sub_8013984(void *); extern void sub_801CC38(void); extern void sub_801CCD8(void); extern void sub_801CF94(void); - - extern void ResetSprites(u32); extern void sub_801317C(u32 *); extern void sub_80140B4(struct UnkTextStruct2 *); - - -extern void xxx_format_and_draw(u32, u32, char *, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); -extern void xxx_call_draw_string(u32, u32, char *, u32, u32); extern void sub_80073E0(u32); extern u32 sub_8097DF0(char *, struct subStruct_203B240 **); extern u32 sub_8012A64(u32 *, u32); extern void sub_8013F84(); extern void PlayMenuSoundEffect(u32); -extern char * GetIQSkillName(u8 r0); extern char * GetIQSkillDescription(u8 r0); extern s32 GetNumAvailableIQSkills(u8 *param_1, s32 pokeIQ); +extern void sub_8013C68(u32 *); +extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); +extern char * GetIQSkillName(u8 r0); +extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); +extern s32 sub_8013800(u32 *, s32); +extern u32 sub_80095E4(s16, u32); +extern void sub_801C440(void); +extern void sub_801C4C8(void); +extern void AddMenuCursorSprite(u32 *); +extern u8 sub_80138B8(u32 *, u32); +extern void sub_8013660(u32 *); +extern s32 GetKeyPress(u32 *); +extern bool8 HasNoAvailIQSkills(s16 species); +extern u32 sub_801C674(void); +extern void sub_801C6B4(void); +void sub_801BFB4(s32); void sub_801C6D0(s32); void sub_801C7D4(); void sub_801C6E4(); void sub_801C848(); +u32 sub_801C308(u8); +extern void PlaySound(u32); +void ToggleIQSkill(u8 *param_1, u32 skillIndex); +s32 sub_801C390(void); +void sub_801C3F8(void); + +bool8 sub_801C244(s16 species, u32 index, u32 param_3); +void sub_801C0C8(void); +u32 sub_801C620(u8 iqSkill); +void sub_801C3B0(u8); +void sub_801BFCC(void); +void sub_801C03C(void); + +void sub_801C118(); +void sub_801C1A0(); +void sub_801C228(); + +void sub_801B748(u32); + + +extern s32 sub_80144A4(s32 *); +extern u32 sub_801B410(void); +extern void sub_801B450(void); +extern u32 sub_801A6E8(u32); +extern void sub_801A928(void); +extern void sub_8099690(u32); +extern u32 sub_801A8AC(); + +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; + +void sub_801BC24(void) +{ + struct unkStruct_203B234 *puVar1; + u8 *nullText; + u32 menuAction; + + puVar1 = gUnknown_203B234; + nullText = NULL; + puVar1->unkCC[0].text = *gUnknown_80D4920; + gUnknown_203B234->unkCC[0].menuAction = 2; + menuAction = 1; + gUnknown_203B234->unkCC[1].text = *gUnknown_80D4928; + gUnknown_203B234->unkCC[1].menuAction = 3; + gUnknown_203B234->unkCC[2].text = nullText; + gUnknown_203B234->unkCC[2].menuAction = menuAction; +} + +void sub_801BC64(void) +{ + s32 temp; + if(sub_80144A4(&temp)== 0) + { + switch(temp) + { + case 4: + sub_801B748(0x8); + break; + case 5: + sub_801B748(0x7); + break; + } + } +} + +void sub_801BC94(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 2: + sub_801B748(0xD); + break; + case 1: + case 3: + sub_801B748(0x6); + break; + } + } +} + +void sub_801BCCC(void) +{ + switch(sub_801A6E8(1)) + { + case 0: + case 1: + break; + case 3: + gUnknown_203B234->unk24 = sub_801A8AC(); + gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24]; + sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14); + sub_801B748(0xA); + break; + case 4: + gUnknown_203B234->unk24 = sub_801A8AC(); + gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24]; + sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14); + sub_8099690(0); + sub_801B748(0xB); + break; + case 2: + sub_801A928(); + sub_801B748(6); + break; + } +} + +void sub_801BD80(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801A6E8(0); + if (sub_8012FD8(&gUnknown_203B234->unk28) == '\0') { + sub_8013114(&gUnknown_203B234->unk28,&menuAction); + if (menuAction != 1) gUnknown_203B234->unkC8 = menuAction; + } + switch(menuAction) + { + case 6: + MoveToStorage(&gUnknown_203B234->unk20); + ShiftItemsDownFrom(gUnknown_203B234->unk24); + AddItemToInventory(&gUnknown_203B234->unk10); + FillInventoryGaps(); + PlaySound(0xcb); + sub_8099690(0); + sub_801A928(); + sub_801B748(0xE); + break; + case 7: + sub_801B748(0xC); + break; + case 8: + sub_8099690(0); + sub_801B748(0xB); + break; + case 1: + sub_801B748(0x9); + break; + } +} + +void sub_801BE30(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801A6E8(0); + sub_8012FD8(&gUnknown_203B234->unk28); + if (sub_8012FD8(&gUnknown_203B234->unk78) == '\0') { + sub_8013114(&gUnknown_203B234->unk78,&menuAction); + } + switch(menuAction) + { + case 1: + case 3: + sub_801B748(9); + break; + case 2: + ShiftItemsDownFrom(gUnknown_203B234->unk24); + AddItemToInventory(&gUnknown_203B234->unk10); + FillInventoryGaps(); + PlaySound(0xcb); + sub_801A928(); + sub_801B748(0xf); + break; + } +} + +void sub_801BEAC(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + sub_801B748(9); + case 0: + case 1: + break; + } +} + +void sub_801BEC8(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + sub_801B748(gUnknown_203B234->fallbackState); + } +} + +bool8 sub_801BEEC(s16 species) +{ + s32 species_s32 = species; + if (HasNoAvailIQSkills(species_s32)) { + return FALSE; + } + else { + gUnknown_203B238 = MemoryAlloc(sizeof(struct unkStruct_203B238),8); + gUnknown_203B238->unk30 = 0; + gUnknown_203B238->species = species_s32; + gUnknown_203B238->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32]; + gUnknown_203B238->numIQSkills = GetNumAvailableIQSkills(gUnknown_203B238->iqSkills,gUnknown_203B238->pokeStruct->IQ); + sub_801BFB4(0); + return TRUE; + } +} + +u32 sub_801BF48(void) +{ + switch(gUnknown_203B238->state) + { + case 4: + return 3; + case 0: + case 1: + sub_801C118(); + break; + case 2: + sub_801C1A0(); + break; + case 3: + sub_801C228(); + break; + } + return 0; +} + +void sub_801BF98(void) +{ + if(gUnknown_203B238 != NULL) + { + MemoryFree(gUnknown_203B238); + gUnknown_203B238 = NULL; + } +} + +void sub_801BFB4(s32 newState) +{ + gUnknown_203B238->state = newState; + sub_801BFCC(); + sub_801C03C(); +} + +void sub_801BFCC(void) +{ + s32 index; + + sub_8006518(gUnknown_203B238->unkC4); + if(gUnknown_203B238->state == 2) + { + gUnknown_203B238->unkC4[2] = gUnknown_80DBDB0; + } + else + { + for(index = 0; index < 4; index++) + { + gUnknown_203B238->unkC4[index] = gUnknown_80DBD98; + } + + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B238->unkC4, 1, 1); +} + +void sub_801C03C(void) +{ + switch(gUnknown_203B238->state) { + case 0: + sub_801C244(gUnknown_203B238->species,0,8); + break; + case 1: + sub_801C3B0(1); + break; + case 2: + sub_801C4C8(); + sub_801C0C8(); + sub_8012D60(&gUnknown_203B238->unk74,gUnknown_203B238->unk34,0,0,gUnknown_203B238->unk30,2); + break; + case 3: + sub_801C620(gUnknown_203B238->iqSkillIndex); + break; + case 4: + break; + } +} + +void sub_801C0C8(void) +{ + struct unkStruct_203B238 *puVar1; + int index; + u8 *nullText; + u32 menuAction; + s32 max; + + puVar1 = gUnknown_203B238; + nullText = NULL; + gUnknown_203B238->unk34[0].text = gUnknown_80DBDC8; + puVar1->unk34[0].menuAction = 2; + menuAction = 1; + puVar1->unk34[1].text = *gUnknown_80D4970; + puVar1->unk34[1].menuAction = 3; + + max = 2; + puVar1->unk34[2].text = nullText; + puVar1->unk34[2].menuAction = menuAction; + + for(index = 0; index < max; index++) + { + if(gUnknown_203B238->unk34[index].menuAction == gUnknown_203B238->unk30) + return; + } + gUnknown_203B238->unk30 = 2; +} + +void sub_801C118(void) +{ + switch(sub_801C308(1)) { + case 3: + gUnknown_203B238->unk24 = sub_801C390(); + gUnknown_203B238->iqSkillIndex = gUnknown_203B238->iqSkills[gUnknown_203B238->unk24]; + sub_801BFB4(2); + break; + case 4: + gUnknown_203B238->unk24 = sub_801C390(); + gUnknown_203B238->iqSkillIndex = gUnknown_203B238->iqSkills[gUnknown_203B238->unk24]; + sub_801BFB4(3); + break; + case 2: + sub_801C3F8(); + sub_801BFB4(4); + break; + case 0: + case 1: + break; + } +} + +void sub_801C1A0(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801C308(0); + if (!(sub_8012FD8(&gUnknown_203B238->unk74)) && (sub_8013114(&gUnknown_203B238->unk74,&menuAction), menuAction != 1)) { + gUnknown_203B238->unk30 = menuAction; + } + + switch(menuAction) + { + case 2: + PlaySound(0x133); + ToggleIQSkill((u8 *)&gUnknown_203B238->pokeStruct->IQSkills,gUnknown_203B238->iqSkillIndex); + sub_801BFB4(1); + break; + case 3: + sub_801BFB4(3); + break; + case 1: + sub_801BFB4(1); + break; + } +} + +void sub_801C228(void) +{ + switch(sub_801C674()) + { + case 2: + case 3: + sub_801C6B4(); + sub_801BFB4(1); + case 0: + case 1: + break; + } +} + +bool8 sub_801C244(s16 species, u32 index, u32 param_3) +{ +#ifndef NONMATCHING + register s32 species_s32 asm("r4"); +#else + s32 species_s32; +#endif + + species_s32 = species; + + if (HasNoAvailIQSkills(species)) { + return FALSE; + } + else + { + if (gUnknown_203B23C == NULL) { + gUnknown_203B23C = MemoryAlloc(sizeof(struct unkStruct_203B23C),8); + } + gUnknown_203B23C->species = species_s32; + gUnknown_203B23C->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32]; + gUnknown_203B23C->numIQSkills = GetNumAvailableIQSkills(gUnknown_203B23C->iqSkills,gUnknown_203B23C->pokeStruct->IQ); + gUnknown_203B23C->unk58 = index; + gUnknown_203B23C->unk5C = &gUnknown_203B23C->unk60[index]; + sub_8006518(gUnknown_203B23C->unk60); + gUnknown_203B23C->unk60[gUnknown_203B23C->unk58] = gUnknown_80DBDF0; + gUnknown_203B23C->unk5C->unk14 = &gUnknown_203B23C->unkC0; + sub_8012D08(gUnknown_203B23C->unk5C,param_3); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B23C->unk60,1,1); + sub_8013818(&gUnknown_203B23C->unk24,gUnknown_203B23C->numIQSkills,param_3,index); + sub_801C440(); + sub_801C4C8(); + return TRUE; + } +} + +u32 sub_801C308(u8 r0) +{ + if(r0 == 0) + { + sub_8013660(&gUnknown_203B23C->unk24); + return 0; + } + switch(GetKeyPress(&gUnknown_203B23C->unk24)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + case 4: + PlayMenuSoundEffect(4); + return 4; + default: + if(sub_80138B8(&gUnknown_203B23C->unk24, 1) != 0) + { + sub_801C440(); + sub_801C4C8(); + return 1; + } + else + return 0; + } +} + +s32 sub_801C390(void) +{ + return (gUnknown_203B23C->unk42 * gUnknown_203B23C->unk40) + gUnknown_203B23C->unk3C; +} + +void sub_801C3B0(u8 r0) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B23C->unk60, 0, 0); + gUnknown_203B23C->unk46 = gUnknown_203B23C->numIQSkills; + sub_8013984(&gUnknown_203B23C->unk24); + sub_801C440(); + sub_801C4C8(); + if(r0) + AddMenuCursorSprite(&gUnknown_203B23C->unk24); +} + +void sub_801C3F8(void) +{ + if(gUnknown_203B23C != NULL) + { + gUnknown_203B23C->unk60[gUnknown_203B23C->unk58] = gUnknown_80DBDD8; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B23C->unk60, 1, 1); + MemoryFree(gUnknown_203B23C); + gUnknown_203B23C = NULL; + } +} + +#ifdef NONMATCHING +// https://decomp.me/scratch/NdDP3 (98.06% matching) - Seth +void sub_801C440(void) +{ + u16 sVar2; + + gUnknown_203B23C->unkC0 = gUnknown_203B23C->unk44; + gUnknown_203B23C->unkC1 = gUnknown_203B23C->unk42; + gUnknown_203B23C->unkC2 = 0xA; + gUnknown_203B23C->unkC3 = 0; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B23C->unk60, 1, 1); + sVar2 = sub_80095E4(gUnknown_203B23C->unk3E, 0xc) + 2; + gUnknown_203B23C->unk60[gUnknown_203B23C->unk58].unkE = sVar2; + gUnknown_203B23C->unk60[gUnknown_203B23C->unk58].unk10 = sVar2; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B23C->unk60, 1, 1); +} +#else +NAKED +void sub_801C440(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _0801C4C4\n" + "\tldr r0, [r4]\n" + "\tadds r1, r0, 0\n" + "\tadds r1, 0x44\n" + "\tldrh r1, [r1]\n" + "\tadds r0, 0xC0\n" + "\tmovs r2, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r1, r0, 0\n" + "\tadds r1, 0x42\n" + "\tldrh r1, [r1]\n" + "\tadds r0, 0xC1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xC2\n" + "\tmovs r1, 0xA\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xC3\n" + "\tstrb r2, [r0]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x60\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0x3E\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tadds r0, 0x2\n" + "\tldr r2, [r4]\n" + "\tldr r3, [r2, 0x58]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x6E\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r3, [r2, 0x58]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r2, r1\n" + "\tadds r2, 0x70\n" + "\tstrh r0, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x60\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0801C4C4: .4byte gUnknown_203B23C" + ); +} +#endif + + +void sub_801C4C8(void) +{ + u32 y; + s32 x; + s32 x2; + u32 skillIndex; + s32 counter; + + sub_8008C54(gUnknown_203B23C->unk58); + sub_80073B8(gUnknown_203B23C->unk58); + x = gUnknown_203B23C->unk42 * 8; + x2 = x; + x2 += 10; + xxx_call_draw_string(x2,0,gUnknown_80DBE08,gUnknown_203B23C->unk58,0); + x += 4; + x2 = x + gUnknown_203B23C->unkC2 * 8; + sub_8012BC4(x2,0,gUnknown_203B23C->unk42 + 1,1,7, + gUnknown_203B23C->unk58); + counter = 0; + if (counter < gUnknown_203B23C->unk3E) { + do { + skillIndex = gUnknown_203B23C->iqSkills + [gUnknown_203B23C->unk42 * gUnknown_203B23C->unk40 + counter]; + y = sub_8013800(&gUnknown_203B23C->unk24,counter); + strncpy(gUnknown_202DEA8,GetIQSkillName(skillIndex),0x50); + if (IsIQSkillSet((u8 *)&gUnknown_203B23C->pokeStruct->IQSkills,1 << skillIndex)) { + strcpy(gUnknown_202DEA8 - 0x50,gUnknown_80DBE14); + } + else { + strcpy(gUnknown_202DEA8 - 0x50,gUnknown_80DBE18); + } + xxx_format_and_draw(0xc,y,gUnknown_80DBE1C,gUnknown_203B23C->unk58,0); + counter++; + } while (counter < gUnknown_203B23C->unk3E); + } + sub_80073E0(gUnknown_203B23C->unk58); +} + bool8 HasNoAvailIQSkills(s16 species) { s32 species_s32; diff --git a/src/code_801D760.c b/src/code_801D760.c index 61d30d501..59063f118 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -1,14 +1,17 @@ #include "global.h" #include "friend_area.h" #include "constants/friend_area.h" +#include "constants/input.h" #include "file_system.h" #include "item.h" +#include "menu.h" #include "team_inventory.h" #include "memory.h" #include "input.h" #include "text.h" #include "rescue_team_info.h" #include "code_800D090.h" +#include "menu_input.h" struct unkStruct_203B258 { @@ -63,8 +66,6 @@ extern u32 sub_80270A4(); extern u32 sub_802C898(void); extern void sub_802C8F4(void); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, s32 *); extern const char *sub_8098FB4(); extern void xxx_format_string(const char *, u8 *, u32 **, u32); extern s32 sub_8008ED0(u8 *); @@ -98,7 +99,7 @@ struct unk_203B250 u8 unk9; u8 fillA[0x14 - 0xA]; u32 unk14; - u32 unk18; // an input struct?? + struct MenuStruct unk18; }; struct unk_203B250 *gUnknown_203B250; @@ -394,10 +395,10 @@ u32 sub_801DA78(void) { switch(GetKeyPress(gUnknown_203B258)) { - case 2: + case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; - case 1: + case INPUT_A_BUTTON: return 3; default: if(sub_80138B8(gUnknown_203B258, 1) != 0) diff --git a/src/code_801EE10.c b/src/code_801EE10.c index e62e05e71..b00ac1ec7 100644 --- a/src/code_801EE10.c +++ b/src/code_801EE10.c @@ -1,311 +1,89 @@ #include "global.h" -#include "code_800D090.h" #include "pokemon.h" -#include "input.h" -#include "memory.h" #include "text.h" +#include "memory.h" +#include "input.h" -struct unkStruct_203B2AC -{ - u8 unk0[0x1E]; - s16 unk1E; - s16 unk20; - u8 unk22[0x34 - 0x22]; - u32 unk34[3]; - u8 unk40[0x48 - 0x40]; - s16 speciesNum; - u32 unk4C; - u8 unk50[0xB0 - 0x50]; - u32 unkB0; - u8 fillB4[0xE0 - 0xB4]; - u32 unkE0; - struct UnkTextStruct2 *unkE4; - struct UnkTextStruct2 unkE8[4]; - u8 unk148[4]; -}; -extern struct unkStruct_203B2AC *gUnknown_203B2AC; - -struct unkStruct_3001B60 +struct unkStruct_203B270 { + // size 0xBC u32 unk0; - u32 sortMethod; - u32 unk8; - u32 unkC; - u32 unk10; - u8 fill14[0x18 - 0x14]; - s16 unk18; - s16 unk1A[2]; - u8 fill1C[0x370 - 0x1E]; - s16 unk370; - s16 unk372; - s16 unk374; - s16 unk376; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + /* 0x8 */ struct PokemonStruct *pokeStruct; + /* 0xC */ u8 isTeamLeader; + /* 0x10 */ struct Move *moves; + u8 fill14[0x1C - 0x14]; + u32 unk1C; + u8 fill20[0x50 - 0x20]; + u32 unk50; + u32 unk54; + struct UnkTextStruct2 unk58[4]; + u32 unkB8; }; -extern struct unkStruct_3001B60 *gUnknown_3001B60; - -extern struct UnkTextStruct2 gUnknown_80DC9B0; -extern struct UnkTextStruct2 gUnknown_80DC9C8; +extern struct unkStruct_203B270 *gUnknown_203B270; +extern struct UnkTextStruct2 gUnknown_80DC25C; +extern struct UnkTextStruct2 gUnknown_80DC274; +extern void sub_8012D08(void *, u32); extern void sub_8013818(void *, u32, u32, u32); -extern bool8 sub_80023E4(u32); -extern void sub_808FF20(u32 *, struct PokemonStruct *, bool8); -extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32); -extern s32 GetKeyPress(void *); -extern bool8 sub_8013938(void *); -extern void sub_802452C(void); -extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(void *); -void sub_80922B4(u8 *buffer, u8 *string, s32 size); -bool8 ComparePokemonNames(s16 a1, s16 a2); +u32 sub_8006544(u32 index); +s32 sub_801F3F8(void); +void sub_8013780(u32 *, u32); +void sub_801F280(u32); -void sub_8024588(void); -void sub_80245D0(void); -void sub_8024604(void); - -extern u8 gUnknown_80DC9A4[]; - -void SortbyInternalNo(s32 param_1, s32 param_2); -void SortbyAlphabetNo(s32 param_1,s32 param_2); -void SortbyName(s32 param_1,s32 param_2); - -bool8 sub_8024184(struct PokemonStruct *pokemon, u8 area) +u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u32 param_5,u32 param_6) { - if(area == GetFriendArea(pokemon->speciesNum)) - return TRUE; - else - return FALSE; -} - -void sub_80241A8(void) -{ - switch(gUnknown_3001B60->sortMethod) - { - case 2: - if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) { - SortbyAlphabetNo(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10); - } - if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) { - SortbyAlphabetNo(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8); - } - break; - case 3: - if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) { - SortbyName(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10); - } - if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) { - SortbyName(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8); - } - break; - case 1: - if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) { - SortbyInternalNo(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10); - } - if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) { - SortbyInternalNo(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8); - } - break; - } -} - - -void SortbyInternalNo(s32 param_1, s32 param_2) -{ - s16 *r4; - s32 iVar4; - s16 *r10; - s16 *r5; - s32 r6; - s32 r1; - s32 r7; - s32 r9; - - r10 = &gUnknown_3001B60->unk18 + param_2; - r7 = param_1; - r1 = param_2 - 1; - if (r7 < r1) { - r9 = r1; - do { - r4 = r10; - r6 = r1; - iVar4 = r7 + 1; - for (; r6 > r7; r6--) { - if (GetInternalNo(gRecruitedPokemonRef->pokemon[r5 = r4 - 1, *r5].speciesNum) > GetInternalNo(gRecruitedPokemonRef->pokemon[*r4].speciesNum)) { - r1 = *r4; - *r4 = *r5; - *r5 = r1; - } - r4 = r5; - } - r7 = iVar4; - r1 = r9; - } while (iVar4 < r1); - } -} - -void SortbyAlphabetNo(s32 param_1,s32 param_2) -{ - s16 *r4; - s32 iVar4; - s16 *r10; - s16 *r5; - s32 r6; - s32 r1; - s32 r7; - s32 r9; - - r10 = &gUnknown_3001B60->unk18 + param_2; - r7 = param_1; - r1 = param_2 - 1; - if (r7 < r1) { - r9 = r1; - do { - r4 = r10; - r6 = r1; - iVar4 = r7 + 1; - for (; r6 > r7; r6--) { - if (GetAlphabetParentNo(gRecruitedPokemonRef->pokemon[r5 = r4 - 1, *r5].speciesNum, 0) > GetAlphabetParentNo(gRecruitedPokemonRef->pokemon[*r4].speciesNum, 0)) { - r1 = *r4; - *r4 = *r5; - *r5 = r1; - } - r4 = r5; - } - r7 = iVar4; - r1 = r9; - } while (iVar4 < r1); - } -} - -void SortbyName(s32 param_1,s32 param_2) -{ - s16 *r4; - s32 iVar4; - s16 *r10; - s16 *r5; - s32 r6; - s32 r1; - s32 r7; - s32 r9; - - r10 = &gUnknown_3001B60->unk18 + param_2; - r7 = param_1; - r1 = param_2 - 1; - if (r7 < r1) { - r9 = r1; - do { - r4 = r10; - r6 = r1; - iVar4 = r7 + 1; - for (; r6 > r7; r6--) { - r5 = r4 - 1; - if (ComparePokemonNames(*r5, *r4)) { - r1 = *r4; - *r4 = *r5; - *r5 = r1; - } - r4 = r5; - } - r7 = iVar4; - r1 = r9; - } while (iVar4 < r1); - } -} - -struct PokemonStruct *sub_80243E8(void) -{ - u8 buffer [40]; - u8 nameBuffer [20]; - struct PokemonStruct *pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_3001B60->unk1A[gUnknown_3001B60->unk376 * gUnknown_3001B60->unk374 + gUnknown_3001B60->unk370]]; - - sub_80922B4(nameBuffer, pokeStruct->name, POKEMON_NAME_LENGTH); - sprintfStatic(buffer, gUnknown_80DC9A4,nameBuffer); // %s - return pokeStruct; -} - -bool8 sub_8024458(s16 speciesNum, s32 param_2) -{ - s32 speciesNum_s32 = speciesNum; - gUnknown_203B2AC = MemoryAlloc(sizeof(struct unkStruct_203B2AC), 8); - gUnknown_203B2AC->speciesNum = speciesNum_s32; - gUnknown_203B2AC->unkE0 = param_2; - gUnknown_203B2AC->unkE4 = &gUnknown_203B2AC->unkE8[param_2]; - sub_8006518(gUnknown_203B2AC->unkE8); - gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9C8; - gUnknown_203B2AC->unkE4->unk14 = gUnknown_203B2AC->unk148; - gUnknown_203B2AC->unk148[2] = 10; - sub_8024604(); - sub_802452C(); - sub_8013984(gUnknown_203B2AC); - return TRUE; -} - -u8 sub_80244E4(void) -{ - switch(GetKeyPress(gUnknown_203B2AC)) + s32 iVar5; + s32 iVar8; + s32 species_s32; + u8 param_4_u8; + s32 four; + + species_s32 = species; + param_4_u8 = param_4; + gUnknown_203B270 = MemoryAlloc(sizeof(struct unkStruct_203B270), 8); + gUnknown_203B270->unk4 = param_4_u8; + gUnknown_203B270->unk5 = 1; + gUnknown_203B270->unk6 = 1; + gUnknown_203B270->unk7 = 1; + gUnknown_203B270->unk0 = param_1; + switch(param_1) { case 2: - PlayMenuSoundEffect(1); - return 2; + case 3: + gUnknown_203B270->unk5 = 0; + gUnknown_203B270->unk6 = 0; + gUnknown_203B270->unk7 = 0; + break; + case 0: case 1: - PlayMenuSoundEffect(0); - return 3; - default: - if (sub_8013938(gUnknown_203B2AC) != 0) { - sub_802452C(); - return 1; - } - else { - return 0; - } + break; } -} - -void sub_802452C(void) -{ - sub_8024588(); - sub_80245D0(); -} - -void sub_802453C(void) -{ - if(gUnknown_203B2AC) - { - gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9B0; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2AC->unkE8, 1, 1); - MemoryFree(gUnknown_203B2AC); - gUnknown_203B2AC = NULL; - } -} - -void sub_8024588(void) -{ - gUnknown_203B2AC->unk148[0] = gUnknown_203B2AC->unk20; - gUnknown_203B2AC->unk148[1] = gUnknown_203B2AC->unk1E; - gUnknown_203B2AC->unk148[3] = 0; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2AC->unkE8,1,1); -} - -void sub_80245D0(void) -{ - CreatePokemonInfoTabScreen - (gUnknown_203B2AC->unk34[gUnknown_203B2AC->unk1E], - gUnknown_203B2AC->unk1E,&gUnknown_203B2AC->unk4C, - &gUnknown_203B2AC->unkB0,gUnknown_203B2AC->unkE0); -} - -void sub_8024604(void) -{ - struct PokemonStruct *pokeStruct; - u32 *iVar3; - - gUnknown_203B2AC->unk34[0] = 2; - gUnknown_203B2AC->unk34[1] = 3; - gUnknown_203B2AC->unk34[2] = 5; - sub_8013818(gUnknown_203B2AC,3,1,gUnknown_203B2AC->unkE0); - iVar3 = &gUnknown_203B2AC->unk4C; - pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2AC->speciesNum]; - sub_808FF20(iVar3,pokeStruct, sub_80023E4(7)); + gUnknown_203B270->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32]; + gUnknown_203B270->isTeamLeader = gUnknown_203B270->pokeStruct->isTeamLeader; + gUnknown_203B270->moves = moves; + gUnknown_203B270->unkB8 = param_5; + iVar8 = iVar5 = sub_801F3F8(); + four = 4; + if (iVar8 < four) { + iVar8 = 4; + } + sub_8006518(gUnknown_203B270->unk58); + gUnknown_203B270->unk50 = param_6; + gUnknown_203B270->unk58[param_6] = gUnknown_80DC25C; + if (gUnknown_203B270->unkB8 != 0) { + gUnknown_203B270->unk54 = sub_8006544(param_6); + gUnknown_203B270->unk58[gUnknown_203B270->unk54] = gUnknown_80DC274; + } + sub_8012D08(&gUnknown_203B270->unk58[gUnknown_203B270->unk50],iVar8); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B270->unk58,1,1); + sub_8013818(&gUnknown_203B270->unk1C,iVar5,iVar5,param_6); + sub_8013780(&gUnknown_203B270->unk1C,0); + sub_801F280(1); + return 1; } diff --git a/src/code_801EE10_1.c b/src/code_801EE10_1.c new file mode 100644 index 000000000..ec3f969d6 --- /dev/null +++ b/src/code_801EE10_1.c @@ -0,0 +1,312 @@ +#include "global.h" +#include "constants/input.h" +#include "code_800D090.h" +#include "pokemon.h" +#include "input.h" +#include "memory.h" +#include "text.h" + +struct unkStruct_203B2AC +{ + u8 unk0[0x1E]; + s16 unk1E; + s16 unk20; + u8 unk22[0x34 - 0x22]; + u32 unk34[3]; + u8 unk40[0x48 - 0x40]; + s16 speciesNum; + u32 unk4C; + u8 unk50[0xB0 - 0x50]; + u32 unkB0; + u8 fillB4[0xE0 - 0xB4]; + u32 unkE0; + struct UnkTextStruct2 *unkE4; + struct UnkTextStruct2 unkE8[4]; + u8 unk148[4]; +}; +extern struct unkStruct_203B2AC *gUnknown_203B2AC; + +struct unkStruct_3001B60 +{ + u32 unk0; + u32 sortMethod; + u32 unk8; + u32 unkC; + u32 unk10; + u8 fill14[0x18 - 0x14]; + s16 unk18; + s16 unk1A[2]; + u8 fill1C[0x370 - 0x1E]; + s16 unk370; + s16 unk372; + s16 unk374; + s16 unk376; +}; + +extern struct unkStruct_3001B60 *gUnknown_3001B60; + +extern struct UnkTextStruct2 gUnknown_80DC9B0; +extern struct UnkTextStruct2 gUnknown_80DC9C8; + +extern void sub_8013818(void *, u32, u32, u32); +extern bool8 sub_80023E4(u32); +extern void sub_808FF20(u32 *, struct PokemonStruct *, bool8); +extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32); +extern s32 GetKeyPress(void *); +extern bool8 sub_8013938(void *); +extern void sub_802452C(void); +extern void PlayMenuSoundEffect(u32); +extern void sub_8013984(void *); +void sub_80922B4(u8 *buffer, u8 *string, s32 size); +bool8 ComparePokemonNames(s16 a1, s16 a2); + +void sub_8024588(void); +void sub_80245D0(void); +void sub_8024604(void); + +extern u8 gUnknown_80DC9A4[]; + +void SortbyInternalNo(s32 param_1, s32 param_2); +void SortbyAlphabetNo(s32 param_1,s32 param_2); +void SortbyName(s32 param_1,s32 param_2); + +bool8 sub_8024184(struct PokemonStruct *pokemon, u8 area) +{ + if(area == GetFriendArea(pokemon->speciesNum)) + return TRUE; + else + return FALSE; +} + +void sub_80241A8(void) +{ + switch(gUnknown_3001B60->sortMethod) + { + case 2: + if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) { + SortbyAlphabetNo(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10); + } + if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) { + SortbyAlphabetNo(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8); + } + break; + case 3: + if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) { + SortbyName(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10); + } + if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) { + SortbyName(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8); + } + break; + case 1: + if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) { + SortbyInternalNo(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10); + } + if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) { + SortbyInternalNo(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8); + } + break; + } +} + + +void SortbyInternalNo(s32 param_1, s32 param_2) +{ + s16 *r4; + s32 iVar4; + s16 *r10; + s16 *r5; + s32 r6; + s32 r1; + s32 r7; + s32 r9; + + r10 = &gUnknown_3001B60->unk18 + param_2; + r7 = param_1; + r1 = param_2 - 1; + if (r7 < r1) { + r9 = r1; + do { + r4 = r10; + r6 = r1; + iVar4 = r7 + 1; + for (; r6 > r7; r6--) { + if (GetInternalNo(gRecruitedPokemonRef->pokemon[r5 = r4 - 1, *r5].speciesNum) > GetInternalNo(gRecruitedPokemonRef->pokemon[*r4].speciesNum)) { + r1 = *r4; + *r4 = *r5; + *r5 = r1; + } + r4 = r5; + } + r7 = iVar4; + r1 = r9; + } while (iVar4 < r1); + } +} + +void SortbyAlphabetNo(s32 param_1,s32 param_2) +{ + s16 *r4; + s32 iVar4; + s16 *r10; + s16 *r5; + s32 r6; + s32 r1; + s32 r7; + s32 r9; + + r10 = &gUnknown_3001B60->unk18 + param_2; + r7 = param_1; + r1 = param_2 - 1; + if (r7 < r1) { + r9 = r1; + do { + r4 = r10; + r6 = r1; + iVar4 = r7 + 1; + for (; r6 > r7; r6--) { + if (GetAlphabetParentNo(gRecruitedPokemonRef->pokemon[r5 = r4 - 1, *r5].speciesNum, 0) > GetAlphabetParentNo(gRecruitedPokemonRef->pokemon[*r4].speciesNum, 0)) { + r1 = *r4; + *r4 = *r5; + *r5 = r1; + } + r4 = r5; + } + r7 = iVar4; + r1 = r9; + } while (iVar4 < r1); + } +} + +void SortbyName(s32 param_1,s32 param_2) +{ + s16 *r4; + s32 iVar4; + s16 *r10; + s16 *r5; + s32 r6; + s32 r1; + s32 r7; + s32 r9; + + r10 = &gUnknown_3001B60->unk18 + param_2; + r7 = param_1; + r1 = param_2 - 1; + if (r7 < r1) { + r9 = r1; + do { + r4 = r10; + r6 = r1; + iVar4 = r7 + 1; + for (; r6 > r7; r6--) { + r5 = r4 - 1; + if (ComparePokemonNames(*r5, *r4)) { + r1 = *r4; + *r4 = *r5; + *r5 = r1; + } + r4 = r5; + } + r7 = iVar4; + r1 = r9; + } while (iVar4 < r1); + } +} + +struct PokemonStruct *sub_80243E8(void) +{ + u8 buffer [40]; + u8 nameBuffer [20]; + struct PokemonStruct *pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_3001B60->unk1A[gUnknown_3001B60->unk376 * gUnknown_3001B60->unk374 + gUnknown_3001B60->unk370]]; + + sub_80922B4(nameBuffer, pokeStruct->name, POKEMON_NAME_LENGTH); + sprintfStatic(buffer, gUnknown_80DC9A4,nameBuffer); // %s + return pokeStruct; +} + +bool8 sub_8024458(s16 speciesNum, s32 param_2) +{ + s32 speciesNum_s32 = speciesNum; + gUnknown_203B2AC = MemoryAlloc(sizeof(struct unkStruct_203B2AC), 8); + gUnknown_203B2AC->speciesNum = speciesNum_s32; + gUnknown_203B2AC->unkE0 = param_2; + gUnknown_203B2AC->unkE4 = &gUnknown_203B2AC->unkE8[param_2]; + sub_8006518(gUnknown_203B2AC->unkE8); + gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9C8; + gUnknown_203B2AC->unkE4->unk14 = gUnknown_203B2AC->unk148; + gUnknown_203B2AC->unk148[2] = 10; + sub_8024604(); + sub_802452C(); + sub_8013984(gUnknown_203B2AC); + return TRUE; +} + +u8 sub_80244E4(void) +{ + switch(GetKeyPress(gUnknown_203B2AC)) + { + case INPUT_B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case INPUT_A_BUTTON: + PlayMenuSoundEffect(0); + return 3; + default: + if (sub_8013938(gUnknown_203B2AC) != 0) { + sub_802452C(); + return 1; + } + else { + return 0; + } + } +} + +void sub_802452C(void) +{ + sub_8024588(); + sub_80245D0(); +} + +void sub_802453C(void) +{ + if(gUnknown_203B2AC) + { + gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9B0; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2AC->unkE8, 1, 1); + MemoryFree(gUnknown_203B2AC); + gUnknown_203B2AC = NULL; + } +} + +void sub_8024588(void) +{ + gUnknown_203B2AC->unk148[0] = gUnknown_203B2AC->unk20; + gUnknown_203B2AC->unk148[1] = gUnknown_203B2AC->unk1E; + gUnknown_203B2AC->unk148[3] = 0; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2AC->unkE8,1,1); +} + +void sub_80245D0(void) +{ + CreatePokemonInfoTabScreen + (gUnknown_203B2AC->unk34[gUnknown_203B2AC->unk1E], + gUnknown_203B2AC->unk1E,&gUnknown_203B2AC->unk4C, + &gUnknown_203B2AC->unkB0,gUnknown_203B2AC->unkE0); +} + +void sub_8024604(void) +{ + struct PokemonStruct *pokeStruct; + u32 *iVar3; + + gUnknown_203B2AC->unk34[0] = 2; + gUnknown_203B2AC->unk34[1] = 3; + gUnknown_203B2AC->unk34[2] = 5; + sub_8013818(gUnknown_203B2AC,3,1,gUnknown_203B2AC->unkE0); + iVar3 = &gUnknown_203B2AC->unk4C; + pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2AC->speciesNum]; + sub_808FF20(iVar3,pokeStruct, sub_80023E4(7)); +} diff --git a/src/code_8023144.c b/src/code_8023144.c index 735b328a0..278d455b2 100644 --- a/src/code_8023144.c +++ b/src/code_8023144.c @@ -1,11 +1,14 @@ +#include "constants/input.h" #include "global.h" #include "constants/iq_skill.h" #include "memory.h" +#include "menu.h" #include "pokemon.h" #include "team_inventory.h" #include "text.h" #include "input.h" #include "item.h" +#include "menu_input.h" struct unkStruct_3001B5C { @@ -39,8 +42,7 @@ extern u16 gUnknown_203B29E; extern struct UnkTextStruct2 gUnknown_80DC91C; extern struct UnkTextStruct2 gUnknown_80DC904; -extern u8 sub_8023704(); -extern void sub_8012D08(void *, u32); +extern u8 sub_8023704(u8); extern void sub_8013818(void *, u32, u32, u32); extern void sub_8013984(u8 *); extern void sub_8023420(void); @@ -66,10 +68,8 @@ struct unkStruct_203B294 /* 0x48 */ struct PokemonStruct *pokeStruct; u32 unk4C; struct Item unk50; - u32 unk54; - u8 fill58[0xA4 - 0x58]; - u32 unkA4; - u8 fillA8[0xF4 - 0xA8]; + struct MenuStruct unk54; + struct MenuStruct unkA4; u32 unkF4; u32 unkF8; u16 unkFC; @@ -86,8 +86,6 @@ extern void sub_801B048(void); extern u32 sub_801B410(void); extern void sub_801B450(void); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, s32 *); extern u32 sub_801A6E8(u32); extern void sub_8099690(u32); extern void sub_801A928(void); @@ -299,13 +297,13 @@ u8 sub_8023278(u8 param_1) } switch(GetKeyPress(&gUnknown_3001B5C->unk35C)) { - case 2: + case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; - case 1: + case INPUT_A_BUTTON: PlayMenuSoundEffect(0); return 3; - case 3: + case INPUT_SELECT_BUTTON: PlayMenuSoundEffect(5); if (temp = gUnknown_3001B5C->unk4, iVar3 = 1, temp < 2) { iVar3 = temp + 1; diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index 3cbc3f7f0..35a3b80fb 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -392,7 +392,7 @@ extern u8 JirachiFriendAreaSearch(void); extern u8 sub_80860A8(u32); extern void sub_8049ED4(); extern void sub_8092578(u8 *buffer, u8 index, u8 r2); -extern void sub_8052D44(u8 *, struct Entity *, struct Entity *); +extern void sub_8052D44(s16 *, struct Entity *, struct Entity *); extern void sub_8097FD0(u32); extern void SetMessageArgument(u8 *, struct Entity *, u32); extern struct Entity *GetLeader(); @@ -513,7 +513,7 @@ void ZapdosReFightDialogue(void) DisplayDungeonDialogue(&gZapdosReFightDialogue_3); ZapdosScreenFlash(2); DisplayDungeonDialogue(&gZapdosReFightDialogue_4); - SetupBossFightHP(ZapdosEntity,300,0xb); + SetupBossFightHP(ZapdosEntity,300,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -541,7 +541,7 @@ void ZapdosPostStoryPreFightDialogue(void) ZapdosScreenFlash(2); DisplayDungeonDialogue(&gZapdosPostStoryPreFightDialogue_5); sub_803E708(10,0x46); - SetupBossFightHP(ZapdosEntity,300,0xb); + SetupBossFightHP(ZapdosEntity,300,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } } @@ -719,7 +719,7 @@ void MoltresPreFightDialogue(void) MoltresScreenFlash2(0xb,6); DisplayDungeonDialogue(&gMoltresPreFightDialogue_12); sub_803E708(10,0x46); - SetupBossFightHP(MoltresEntity,400,0xb); + SetupBossFightHP(MoltresEntity,400,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -762,7 +762,7 @@ void MoltresReFightDialogue(void) sub_803E708(10,0x46); DisplayDungeonDialogue(&gMoltresReFightDialogue_5); sub_803E708(10,0x46); - SetupBossFightHP(MoltresEntity,400,0xb); + SetupBossFightHP(MoltresEntity,400,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -800,7 +800,7 @@ void MoltresPostStoryPreFightDialogue(void) MoltresScreenFlash2(0xb,6); DisplayDungeonDialogue(&gMoltresPostStoryPreFightDialogue_5); sub_803E708(10,0x46); - SetupBossFightHP(MoltresEntity,400,0xb); + SetupBossFightHP(MoltresEntity,400,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } } @@ -1147,7 +1147,7 @@ void ArticunoPreFightDialogue(void) DisplayDungeonDialogue(&gArticunoPreFightDialogue_12); sub_806CDD4(ArticunoEntity,0xf,DIRECTION_SOUTH); sub_803E708(0x10,0x46); - SetupBossFightHP(ArticunoEntity,0x1c2,0xb); + SetupBossFightHP(ArticunoEntity,0x1c2,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -1169,7 +1169,7 @@ void ArticunoReFightDialogue(void) DisplayDungeonDialogue(&gArticunoReFightDialogue_3); sub_806CDD4(ArticunoEntity,0xf,DIRECTION_SOUTH); sub_803E708(0x28,0x46); - SetupBossFightHP(ArticunoEntity,0x1c2,0xb); + SetupBossFightHP(ArticunoEntity,0x1c2,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -1205,7 +1205,7 @@ void ArticunoPostStoryPreFightDialogue(void) DisplayDungeonDialogue(&gArticunoPostStoryPreFightDialogue_5); sub_806CDD4(ArticunoEntity,0xf,DIRECTION_SOUTH); sub_803E708(0x28,0x46); - SetupBossFightHP(ArticunoEntity,0x1c2,0xb); + SetupBossFightHP(ArticunoEntity,0x1c2,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } } @@ -1468,7 +1468,7 @@ void GroudonPreFightDialogue(void) sub_8086A54(GroudonEntity); sub_8085930(DIRECTION_NORTH); sub_8086764(); - SetupBossFightHP(GroudonEntity,500,0xb); + SetupBossFightHP(GroudonEntity,500,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -1500,7 +1500,7 @@ void GroudonReFightDialogue(void) sub_8086A54(GroudonEntity); sub_8085930(DIRECTION_NORTH); sub_8086764(); - SetupBossFightHP(GroudonEntity,500,0xb); + SetupBossFightHP(GroudonEntity,500,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -1528,7 +1528,7 @@ void GroudonPostStoryPreFightDialogue(void) GroudonScreenFlash(); DisplayDungeonDialogue(&gGroudonPostStoryPreFightDialogue_4); sub_803E708(10,0x46); - SetupBossFightHP(GroudonEntity,500,0xb); + SetupBossFightHP(GroudonEntity,500,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } } @@ -1672,14 +1672,14 @@ void MagmaCavernMidDialogue(void) struct Entity * PartnerEntity; struct Entity * iVar3; struct Entity * iVar4; - u8 auStack36 [4]; + s16 IDStack [2]; struct Position32 local_20; LeaderEntity = xxx_call_GetLeader(); PartnerEntity = GetPartnerEntity(); iVar3 = GetEntityFromClientType(0xb); iVar4 = GetEntityFromClientType(0xc); - sub_8052D44(auStack36,LeaderEntity,PartnerEntity); + sub_8052D44(IDStack,LeaderEntity,PartnerEntity); sub_8086448(); SpriteLookAroundEffect(PartnerEntity); // Let's see.. @@ -1970,7 +1970,7 @@ void RayquazaPreFightDialogue(void) DisplayDungeonDialogue(&gRayquazaPreFightDialogue_10); RayquazaScreenFlash(); DisplayDungeonDialogue(&gRayquazaPreFightDialogue_11); - SetupBossFightHP(RayquazaEntity,600,0x20); + SetupBossFightHP(RayquazaEntity,600,MUS_BATTLE_WITH_RAYQUAZA); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -1994,7 +1994,7 @@ void RayquazaReFightDialogue(void) DisplayDungeonDialogue(&gRayquazaReFightDialogue_3); RayquazaScreenFlash(); DisplayDungeonDialogue(&gRayquazaReFightDialogue_4); - SetupBossFightHP(RayquazaEntity,600,0x20); + SetupBossFightHP(RayquazaEntity,600,MUS_BATTLE_WITH_RAYQUAZA); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -2020,7 +2020,7 @@ void RayquazaPostStoryPreFightDialogue(void) DisplayDungeonDialogue(&gRayquazaPostStoryPreFightDialogue_4); RayquazaScreenFlash(); DisplayDungeonDialogue(&gRayquazaPostStoryPreFightDialogue_5); - SetupBossFightHP(RayquazaEntity,600,0xb); + SetupBossFightHP(RayquazaEntity,600,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } } @@ -2267,7 +2267,7 @@ void MewtwoPreFightDialogue(void) MewtwoScreenFlash(); DisplayDungeonDialogue(&gMewtwoPreFightDialogue_5); sub_803E708(10,0x46); - SetupBossFightHP(MewtwoEntity,900,0x20); + SetupBossFightHP(MewtwoEntity,900,MUS_BATTLE_WITH_RAYQUAZA); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -2293,7 +2293,7 @@ void MewtwoReFightDialogue(void) DisplayDungeonDialogue(&gMewtwoReFightDialogue_3); MewtwoScreenFlash(); DisplayDungeonDialogue(&gMewtwoReFightDialogue_4); - SetupBossFightHP(MewtwoEntity,900,0x20); + SetupBossFightHP(MewtwoEntity,900,MUS_BATTLE_WITH_RAYQUAZA); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } } @@ -2406,7 +2406,7 @@ void EnteiPreFightDialogue(void) EnteiScreenFlash(); DisplayDungeonDialogue(&gEnteiPreFightDialogue_3); sub_803E708(10,70); - SetupBossFightHP(EnteiEntity,600,0xb); + SetupBossFightHP(EnteiEntity,600,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -2424,7 +2424,7 @@ void EnteiReFightDialogue(void) EnteiScreenFlash(); DisplayDungeonDialogue(&gEnteiReFightDialogue_3); sub_803E708(10,70); - SetupBossFightHP(EnteiEntity,600,0xb); + SetupBossFightHP(EnteiEntity,600,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -2446,7 +2446,7 @@ void EnteiPostStoryPreFightDialogue(void) EnteiScreenFlash(); DisplayDungeonDialogue(&gEnteiPostStoryPreFightDialogue_3); sub_803E708(10,70); - SetupBossFightHP(EnteiEntity,600,0xb); + SetupBossFightHP(EnteiEntity,600,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } } @@ -2559,7 +2559,7 @@ void RaikouPreFightDialogue(void) RaikouScreenFlash(); DisplayDungeonDialogue(&gRaikouPreFightDialogue_6); sub_803E708(10,70); - SetupBossFightHP(RaikouEntity,0x28a,0xb); + SetupBossFightHP(RaikouEntity,0x28a,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -2579,7 +2579,7 @@ void RaikouReFightDialogue(void) RaikouScreenFlash(); DisplayDungeonDialogue(&gRaikouReFightDialogue_3); sub_803E708(10,70); - SetupBossFightHP(RaikouEntity,0x28a,0xb); + SetupBossFightHP(RaikouEntity,0x28a,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -2602,7 +2602,7 @@ void RaikouPostStoryPreFightDialogue(void) RaikouScreenFlash(); DisplayDungeonDialogue(&gRaikouPostStoryPreFightDialogue_3); sub_803E708(10,70); - SetupBossFightHP(RaikouEntity,0x28a,0xb); + SetupBossFightHP(RaikouEntity,0x28a,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } } @@ -2717,7 +2717,7 @@ void SuicunePreFightDialogue(void) SuicuneScreenFlash(); DisplayDungeonDialogue(&gSuicunePreFightDialogue_7); sub_803E708(10,70); - SetupBossFightHP(SuicuneEntity,0x28a,0xb); + SetupBossFightHP(SuicuneEntity,0x28a,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -2734,7 +2734,7 @@ void SuicuneReFightDialogue(void) SuicuneScreenFlash(); DisplayDungeonDialogue(&gSuicuneReFightDialogue_3); sub_803E708(10,70); - SetupBossFightHP(SuicuneEntity,0x28a,0xb); + SetupBossFightHP(SuicuneEntity,0x28a,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -2755,7 +2755,7 @@ void SuicunePostStoryPreFightDialogue(void) SuicuneScreenFlash(); DisplayDungeonDialogue(&gSuicunePostStoryPreFightDialogue_3); sub_803E708(10,70); - SetupBossFightHP(SuicuneEntity,0x28a,0xb); + SetupBossFightHP(SuicuneEntity,0x28a,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } } @@ -2898,7 +2898,7 @@ void HoOhPreFightDialogue(void) HoOhScreenFlash(); DisplayDungeonDialogue(&gHoOhPreFightDialogue_6); sub_803E708(10,70); - SetupBossFightHP(HoOhEntity,800,0x20); + SetupBossFightHP(HoOhEntity,800,MUS_BATTLE_WITH_RAYQUAZA); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -2934,7 +2934,7 @@ void HoOhReFightDialogue(void) HoOhScreenFlash(); DisplayDungeonDialogue(&HoOhReFightDialogue_4); sub_803E708(10,70); - SetupBossFightHP(HoOhEntity,800,0x20); + SetupBossFightHP(HoOhEntity,800,MUS_BATTLE_WITH_RAYQUAZA); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } } @@ -3071,7 +3071,7 @@ void LatiosPreFightDialogue(void) LatiosScreenFlash(); DisplayDungeonDialogue(&gLatiosPreFightDialogue_3); sub_803E708(10,70); - SetupBossFightHP(LatiosEntity,600,0xb); + SetupBossFightHP(LatiosEntity,600,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -3090,7 +3090,7 @@ void LatiosReFightDialogue(void) LatiosScreenFlash(); DisplayDungeonDialogue(&gLatiosPreFightDialogue_3); sub_803E708(10,70); - SetupBossFightHP(LatiosEntity,600,0xb); + SetupBossFightHP(LatiosEntity,600,MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -3207,17 +3207,17 @@ void sub_808ADCC(void) void sub_808AE54(char param_1,char param_2,u32 *param_3) { struct Entity * LeaderEntity; - u8 auStack24 [4]; - struct Item auStack20; + s16 IDStack[2]; + struct Item item; LeaderEntity = xxx_call_GetLeader(); - sub_8052D44(auStack24,LeaderEntity,0); + sub_8052D44(IDStack,LeaderEntity,0); if ((sub_8098100(0x22) == 0) && (param_2 == 0x2E) && (param_1 == 0x17)) { sub_808B1CC(0); if (sub_8098100(0x1d) == 0) { - xxx_init_itemslot_8090A8C(&auStack20,ITEM_ROCK_PART,0); - sub_80464C8(GetLeader(),param_3,&auStack20); + xxx_init_itemslot_8090A8C(&item,ITEM_ROCK_PART,0); + sub_80464C8(GetLeader(),param_3,&item); DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); // Something fell from Regirock's body // Regirock was apparently guarding this item @@ -3230,17 +3230,17 @@ void sub_808AE54(char param_1,char param_2,u32 *param_3) void sub_808AEC8(char param_1,char param_2,u32 *param_3) { struct Entity * LeaderEntity; - u8 auStack24 [4]; - struct Item auStack20; + s16 IDStack[2]; + struct Item item; LeaderEntity = xxx_call_GetLeader(); - sub_8052D44(auStack24,LeaderEntity,0); + sub_8052D44(IDStack,LeaderEntity,0); if ((sub_8098100(0x22) == 0) && (param_2 == 0x2F) && (param_1 == 0x18)) { sub_808B1CC(0); if (sub_8098100(0x1d) == 0) { - xxx_init_itemslot_8090A8C(&auStack20,ITEM_ICE_PART,0); - sub_80464C8(GetLeader(),param_3,&auStack20); + xxx_init_itemslot_8090A8C(&item,ITEM_ICE_PART,0); + sub_80464C8(GetLeader(),param_3,&item); DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); // Something fell from Regice's body // Regice was apparently guarding this item @@ -3252,17 +3252,17 @@ void sub_808AEC8(char param_1,char param_2,u32 *param_3) void sub_808AF3C(char param_1,char param_2,u32 *param_3) { struct Entity * LeaderEntity; - u8 auStack24 [4]; - struct Item auStack20; + s16 IDStack[2]; + struct Item item; LeaderEntity = xxx_call_GetLeader(); - sub_8052D44(auStack24,LeaderEntity,0); + sub_8052D44(IDStack,LeaderEntity,0); if ((sub_8098100(0x22) == 0) && (param_2 == 0x30) && (param_1 == 0x19)) { sub_808B1CC(0); if (sub_8098100(0x1d) == 0) { - xxx_init_itemslot_8090A8C(&auStack20,ITEM_STEEL_PART,0); - sub_80464C8(GetLeader(),param_3, &auStack20); + xxx_init_itemslot_8090A8C(&item,ITEM_STEEL_PART,0); + sub_80464C8(GetLeader(),param_3, &item); DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); // Something fell from Registeel's body // Registeel was apparently guarding this item @@ -3274,10 +3274,10 @@ void sub_808AF3C(char param_1,char param_2,u32 *param_3) void sub_808AFB0(char param_1) { struct Entity * LeaderEntity; - u8 auStack12 [4]; + s16 IDStack [2]; LeaderEntity = xxx_call_GetLeader(); - sub_8052D44(auStack12,LeaderEntity,0); + sub_8052D44(IDStack,LeaderEntity,0); if ((sub_8098100(0x22) == 0) && (param_1 == 0x2E) && (sub_8098100(0x1d) == 0) && (sub_80860A8(ITEM_ROCK_PART) != 0)) { sub_8097FD0(0x1d); SetMessageArgument(gAvailablePokemonNames,GetLeader(),0); @@ -3292,10 +3292,10 @@ void sub_808AFB0(char param_1) void sub_808B030(char param_1) { struct Entity * LeaderEntity; - u8 auStack12 [4]; + s16 IDStack [2]; LeaderEntity = xxx_call_GetLeader(); - sub_8052D44(auStack12,LeaderEntity,0); + sub_8052D44(IDStack,LeaderEntity,0); if ((sub_8098100(0x22) == 0) && (param_1 == 0x2F) && (sub_8098100(0x1d) == 0) && (sub_80860A8(ITEM_ICE_PART) != 0)) { sub_8097FD0(0x1d); SetMessageArgument(gAvailablePokemonNames,GetLeader(),0); @@ -3310,10 +3310,10 @@ void sub_808B030(char param_1) void sub_808B0B0(char param_1) { struct Entity * LeaderEntity; - u8 auStack12 [4]; + s16 IDStack [2]; LeaderEntity = xxx_call_GetLeader(); - sub_8052D44(auStack12,LeaderEntity,0); + sub_8052D44(IDStack,LeaderEntity,0); if ((sub_8098100(0x22) == 0) && (param_1 == 0x30) && (sub_8098100(0x1d) == 0) && (sub_80860A8(ITEM_STEEL_PART) != 0)) { sub_8097FD0(0x1d); SetMessageArgument(gAvailablePokemonNames, GetLeader(), 0); @@ -3482,19 +3482,19 @@ void SetupRegiFacingDirection(struct Entity *regiEntity) void SetupRegirockFightHP(struct Entity *r0) { - SetupBossFightHP(r0, 450, 0xB); + SetupBossFightHP(r0, 450, MUS_BOSS_BATTLE); } void SetupRegiceFightHP(struct Entity *r0) { - SetupBossFightHP(r0, 450, 0xB); + SetupBossFightHP(r0, 450, MUS_BOSS_BATTLE); } void SetupRegisteelFightHP(struct Entity *r0) { - SetupBossFightHP(r0, 450, 0xB); + SetupBossFightHP(r0, 450, MUS_BOSS_BATTLE); } void sub_808B2F4(void) @@ -3653,7 +3653,7 @@ void JirachiPreFightDialogue(void) sub_803E708(10,70); DisplayDungeonDialogue(&gJirachiPreFightDialogue_4); sub_803E708(10,70); - SetupBossFightHP(JirachiEntity,0x15e,0x20); + SetupBossFightHP(JirachiEntity,0x15e,MUS_BATTLE_WITH_RAYQUAZA); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -3692,12 +3692,12 @@ void JirachiWish(void) struct Position *LeaderPos; struct Entity *LeaderEntity; s32 wishChoice; - s32 iVar4; - u32 uVar6; - s32 iVar9; - struct Item auStack152 [9]; - struct Item auStack116 [9]; - struct Item auStack80 [9]; + s32 counter; + u32 direction; + s32 index; + struct Item money [9]; + struct Item itemStack [9]; + struct Item strengthItems [9]; s32 local_2c; s32 local_28; s32 local_24; @@ -3751,12 +3751,12 @@ void JirachiWish(void) sub_803E708(10,0x46); JirachiWishGrantDialogue(JirachiEntity); - for(iVar4 = 0; iVar4 < 6; iVar4 = r8) + for(counter = 0; counter < 6; counter = r8) { - r8 = iVar4 + 1; - for(iVar9 = 0; iVar9 < 9; iVar9++) + r8 = counter + 1; + for(index = 0; index < 9; index++) { - sub_8045C28(&auStack152[iVar9], 0x69, 0); + sub_8045C28(&money[index], 0x69, 0); } temp = (u16)(((((u16)JirachiEntity->pos.x + DungeonRandInt(3)) - 1) << 16) >> 16); local_2c &= 0xffff0000; @@ -3768,7 +3768,7 @@ void JirachiWish(void) if ((GetTileSafe((s16)local_2c, local_2c >> 16)->terrainType & 3) != 0) { PlaySoundEffect(0x14c); sub_808BB3C((s16 *)&local_2c); - sub_8046860(JirachiEntity,&local_2c,auStack152,9); + sub_8046860(JirachiEntity,&local_2c,money,9); } } JirachiEntity->info->unk15D = 0; @@ -3779,14 +3779,14 @@ void JirachiWish(void) sub_803E708(10,0x46); JirachiWishGrantDialogue(JirachiEntity); - for(iVar4 = 0; iVar4 < 6; iVar4++) + for(counter = 0; counter < 6; counter++) { #ifndef NONMATCHING asm("":::"sl"); #endif - for(iVar9 = 0; iVar9 < 9; iVar9++) + for(index = 0; index < 9; index++) { - sub_8045C28(&auStack116[iVar9], sub_803D73C(0),0); + sub_8045C28(&itemStack[index], sub_803D73C(0),0); } temp2 = (u16)(((((u16)JirachiEntity->pos.x + DungeonRandInt(3)) - 1) << 16) >> 16); local_28 &= 0xffff0000; @@ -3798,7 +3798,7 @@ void JirachiWish(void) if ((GetTileSafe((s16)local_28, local_28 >> 16)->terrainType & 3) != 0) { PlaySoundEffect(400); sub_808BB3C((s16 *)&local_28); - sub_8046860(JirachiEntity,&local_28,auStack116,9); + sub_8046860(JirachiEntity,&local_28,itemStack,9); } } JirachiEntity->info->unk15D = 0; @@ -3838,12 +3838,12 @@ void JirachiWish(void) sub_803E708(10,0x46); JirachiWishGrantDialogue(JirachiEntity); - for(iVar4 = 0; iVar4 < 5; iVar4++) + for(counter = 0; counter < 5; counter++) { - for(iVar9 = 0; iVar9 < 4; iVar9++) + for(index = 0; index < 4; index++) { - sub_8045C28(&auStack80[iVar9],gUnknown_81074FC[DungeonRandInt(8)],0); + sub_8045C28(&strengthItems[index],gUnknown_81074FC[DungeonRandInt(8)],0); } temp3 = (u16)(((((u16)JirachiEntity->pos.x + DungeonRandInt(3)) - 1) << 16) >> 16); local_24 &= 0xffff0000; @@ -3855,7 +3855,7 @@ void JirachiWish(void) if ((GetTileSafe((s16)local_24, local_24 >> 16)->terrainType & 3) != 0) { PlaySoundEffect(400); sub_808BB3C((s16 *)&local_24); - sub_8046860(JirachiEntity,&local_24,auStack80,4); + sub_8046860(JirachiEntity,&local_24,strengthItems,4); } } JirachiEntity->info->unk15D = 0; @@ -3871,8 +3871,8 @@ void JirachiWish(void) DisplayDungeonDialogue(&gUnknown_8105D80); sub_803E708(10,0x46); LeaderPos = &GetLeader()->pos; - uVar6 = GetDirectionTowardsPosition(&JirachiEntity->pos,LeaderPos); - SetFacingDirection(JirachiEntity,uVar6); + direction = GetDirectionTowardsPosition(&JirachiEntity->pos,LeaderPos); + SetFacingDirection(JirachiEntity,direction); sub_803E708(10,0x46); DisplayDungeonDialogue(&gUnknown_8105D9C); sub_803E708(10,0x46); @@ -4157,7 +4157,7 @@ void LugiaPreFightDialogue(void) sub_80861D4(LugiaEntity,7,0); DisplayDungeonDialogue(&gLugiaPreFightDialogue_7); LugiaScreenFlash(); - SetupBossFightHP(LugiaEntity,800,0x20); + SetupBossFightHP(LugiaEntity,800,MUS_BATTLE_WITH_RAYQUAZA); DungeonStartNewBGM(MUS_FRIEND_AREA_CRYPTIC_CAVE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -4307,7 +4307,7 @@ void KyogrePreFightDialogue(void) // power! DisplayDungeonDialogue(&gKyogrePreFightDialogue_7); sub_803E708(10,0x46); - SetupBossFightHP(KyogreEntity,600,0xb); + SetupBossFightHP(KyogreEntity,600,MUS_BOSS_BATTLE); DungeonStartNewBGM(MUS_FRIEND_AREA_CRYPTIC_CAVE); ShiftCameraToPosition(&LeaderEntity->pixelPos,0x10); } @@ -4449,7 +4449,7 @@ void SetupDeoxysFacingDirection(struct Entity *deoxysEntity) void SetupDeoxysFightHP(struct Entity *deoxysEntity) { - SetupBossFightHP(deoxysEntity, 950, 0x20); + SetupBossFightHP(deoxysEntity, 950, MUS_BATTLE_WITH_RAYQUAZA); } void sub_808C5C0(void) @@ -4910,13 +4910,13 @@ void sub_808C938(void) void sub_808C948(struct Entity *param_1, u8 param_2) { bool8 flag; - s32 iVar3; + s32 index; struct Entity *iVar2; if (param_2 == 0x37) { flag = FALSE; - for(iVar3 = 0; iVar3 < DUNGEON_MAX_WILD_POKEMON; iVar3++){ - iVar2 = gDungeon->wildPokemon[iVar3]; + for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++){ + iVar2 = gDungeon->wildPokemon[index]; if ((iVar2 != param_1) && (EntityExists(iVar2) != 0)) { flag = TRUE; break; diff --git a/src/code_8086A3C.c b/src/code_8086A3C.c index be38ab767..7ee1402ae 100644 --- a/src/code_8086A3C.c +++ b/src/code_8086A3C.c @@ -57,7 +57,7 @@ void sub_8086A54(struct Entity *pokemon) pokemon->info->unk15E = 0; } -void SetupBossFightHP(struct Entity *pokemon, s32 newHP, u16 param_3) +void SetupBossFightHP(struct Entity *pokemon, s32 newHP, u16 songIndex) { // NOTE: needed two of these to match.. very dumb @@ -79,7 +79,7 @@ void SetupBossFightHP(struct Entity *pokemon, s32 newHP, u16 param_3) entityInfo->HP = newHP; } - gDungeon->unk66A = param_3; + gDungeon->bossSongIndex = songIndex; SetDefaultIQSkills(enityData_1->IQSkillMenuFlags, enityData_1->bossFlag); LoadIQSkills(pokemon); } diff --git a/src/debug_menu.c b/src/debug_menu.c index c0c41bf51..fccfd1e6b 100644 --- a/src/debug_menu.c +++ b/src/debug_menu.c @@ -9,13 +9,14 @@ #include "pokemon.h" #include "save.h" #include "text_util.h" +#include "menu_input.h" extern struct DebugMenu *gUnknown_203B3EC; const struct UnkTextStruct2 gUnknown_80E7D40 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -25,7 +26,7 @@ const struct UnkTextStruct2 gUnknown_80E7D40 = const struct UnkTextStruct2 gUnknown_80E7D58 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x02, 0x00, 0x09, 0x0b, 0x0b, 0x00, @@ -54,14 +55,12 @@ ALIGNED(4) static const char debug_menu_fill6[] = "pksdir0"; -extern u8 sub_8012FD8(struct DebugMenu *); -extern void sub_8013114(struct DebugMenu *, s32 *); extern void sub_80976F8(u8); extern void sub_803A3BC(void); extern void sub_803A3A0(void); -extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); -extern void sub_8035CF4(struct DebugMenu *, u32, u32); +extern void SetMenuItems(struct MenuStruct *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); +extern void sub_8035CF4(struct MenuStruct*, u32, u32); extern void sub_8035CC0(struct UnkTextStruct2 *, u32); extern void sub_808D1DC(u8 *); extern void sub_808CFD0(u8 *, s32, u8 *, u32, u32 *, u16 *); @@ -102,8 +101,8 @@ u32 UpdateDebugMenu(void) nextMenu = MENU_NO_SCREEN_CHANGE; debugMenuAction = 11; - if (sub_8012FD8(gUnknown_203B3EC) == 0) { - sub_8013114(gUnknown_203B3EC, &debugMenuAction); + if (sub_8012FD8(&gUnknown_203B3EC->unk0[0]) == 0) { + sub_8013114(&gUnknown_203B3EC->unk0[0], &debugMenuAction); } switch(debugMenuAction) { @@ -147,8 +146,8 @@ u32 UpdateDebugMenu(void) void SetDebugMenuItems(void) { - SetMenuItems(gUnknown_203B3EC, gUnknown_203B3EC->unk140, 0, &gUnknown_80E7D58, gDebugMenuItems, 1, 0xd, 0); - sub_8035CF4(gUnknown_203B3EC,0,1); + SetMenuItems(gUnknown_203B3EC->unk0, gUnknown_203B3EC->unk140, 0, &gUnknown_80E7D58, gDebugMenuItems, 1, 0xd, 0); + sub_8035CF4(gUnknown_203B3EC->unk0,0,1); } void sub_803A3A0(void) diff --git a/src/debug_menu_1.c b/src/debug_menu_1.c index f23e1eb6b..cfa79fe38 100644 --- a/src/debug_menu_1.c +++ b/src/debug_menu_1.c @@ -4,12 +4,10 @@ extern struct unkStruct_203B3F8 *gUnknown_203B3F8; extern u32 sub_8013BBC(u32 *); -extern u8 sub_8012FD8(void *); extern void sub_803AE58(void); extern u32 sub_8016080(void); extern void sub_803ACD0(u32); extern void sub_80160D8(void); -extern void sub_8013114(void *, s32 *); extern u32 sub_8023A94(u32); extern s16 sub_8023B44(void); @@ -36,14 +34,14 @@ void sub_803AF38(void) void sub_803AF88(void) { - s32 local_c; + s32 menuAction; - local_c = 0; - sub_8023A94(local_c); + menuAction = 0; + sub_8023A94(0); if (sub_8012FD8(&gUnknown_203B3F8->unk10) == 0) { - sub_8013114(&gUnknown_203B3F8->unk10, &local_c); + sub_8013114(&gUnknown_203B3F8->unk10, &menuAction); } - switch(local_c) + switch(menuAction) { case 4: sub_803ACD0(5); diff --git a/src/debug_menu_2.c b/src/debug_menu_2.c index 56c73c648..093b6766f 100644 --- a/src/debug_menu_2.c +++ b/src/debug_menu_2.c @@ -5,6 +5,7 @@ #include "input.h" #include "menu.h" #include "debug_menu.h" +#include "menu_input.h" extern struct unkStruct_203B3F8 *gUnknown_203B3F8; extern struct UnkTextStruct2 gUnknown_80E7ED4; @@ -17,7 +18,6 @@ extern void sub_80073B8(u32); extern void sub_8013C68(u32 *); extern void sub_80073E0(u32); extern void sub_8023DA4(void); -extern void sub_8012EA4(const char **, u32); extern void xxx_call_draw_string(u32, u32, u8 *, u32, u32); void sub_803ACD0(u32); @@ -35,8 +35,6 @@ extern void sub_803AE58(); extern void sub_801602C(u32, u8 *); extern void sub_803AEB0(); -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); -extern void sub_8012D60(const char **, struct MenuItem *, u32, u16 *, u32, u32); u32 sub_803AC24(void) { diff --git a/src/debug_menu_mid.c b/src/debug_menu_mid.c index 27c8bcf6f..976bb8e22 100644 --- a/src/debug_menu_mid.c +++ b/src/debug_menu_mid.c @@ -5,6 +5,7 @@ #include "memory.h" #include "menu.h" #include "text.h" +#include "menu_input.h" struct unkStruct_203B3F0 { @@ -14,8 +15,7 @@ struct unkStruct_203B3F0 u8 fill5[0x8 - 5]; u32 unk8; struct MenuItem menuItems[8]; - u32 unk4C; - u8 fill50[0x9C - 0x50]; + struct MenuStruct unk4C; u32 unk9C; u32 unkA0; u32 unkA4; @@ -39,8 +39,7 @@ struct unkStruct_203B3F4 u8 fill5[0x8 - 5]; u32 unk8; struct MenuItem menuItems[8]; - u32 unk4C; - u8 fill50[0x9C - 0x50]; + struct MenuStruct unk4C; struct UnkTextStruct2 unk9C[4]; }; @@ -63,18 +62,14 @@ extern const char *gUnknown_80D4970[]; extern void sub_801C8C4(u32, u32, u32, u32); extern void sub_801CB5C(u32); extern void sub_801CCD8(); -extern void sub_8012D60(u32 *, struct MenuItem *, u32, u32, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); -extern void sub_8012EA4(u32 *, u32); extern void sub_80073E0(u32); extern void sub_8013C68(u32 *); extern void xxx_call_draw_string(s32, u32, const char *, u32, u32); extern u32 sub_801CA08(u32); extern u8 sub_801CB24(); extern void sub_801CBB8(); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, s32 *); extern u32 sub_8013BBC(u32 *); extern u32 sub_801B410(); extern void sub_801B450(); diff --git a/src/dungeon_ai_attack.c b/src/dungeon_ai_attack.c index 3234f2e19..9da995229 100644 --- a/src/dungeon_ai_attack.c +++ b/src/dungeon_ai_attack.c @@ -40,6 +40,13 @@ extern s32 gPotentialAttackTargetWeights[NUM_DIRECTIONS]; extern u8 gPotentialAttackTargetDirections[NUM_DIRECTIONS]; extern struct Entity *gPotentialTargets[NUM_DIRECTIONS]; +extern void sub_8055A00(struct Entity *, u8, u32, u32, u32); +extern void sub_806A9B4(struct Entity *, u8); +extern bool8 sub_8044B28(void); +extern void sub_8057588(struct Entity *, u32); +extern void sub_806A1B0(struct Entity *); + + void DecideAttack(struct Entity *pokemon) { struct EntityInfo *pokemonInfo = pokemon->info; @@ -922,3 +929,26 @@ bool8 IsTargetInRange(struct Entity *pokemon, struct Entity *targetPokemon, s32 } return FALSE; } + +void sub_807CABC(struct Entity *target) +{ + struct EntityInfo *entityInfo; + s32 counter; + + counter = 0; + while (1) { + if(counter >= sub_8070828(target, TRUE)) break; + entityInfo = target->info; + sub_8055A00(target,(entityInfo->action).actionUseIndex,1,0,0); + if(!EntityExists(target)) break; + if(sub_8044B28()) break; + if(entityInfo->unk159) break; + counter++; + } + + sub_8057588(target,1); + if (EntityExists(target)) { + sub_806A9B4(target,(target->info->action).actionUseIndex); + } + sub_806A1B0(target); +} diff --git a/src/dungeon_music.c b/src/dungeon_music.c index 4a8e03813..4d4ae5ea3 100644 --- a/src/dungeon_music.c +++ b/src/dungeon_music.c @@ -28,6 +28,10 @@ extern void sub_80709C8(u8 *buffer, struct EntityInfo *entityInfo); void FadeOutAllMusic(u16); void xxx_call_stop_bgm(void); +// Dungeon Music Player adds in this flag to tell +// the system to fade in rather than immediately playing +#define DUNGEON_MUSIC_FADE_IN 0x8000 + void sub_8083AB0(s16 param_0, struct Entity * target, struct Entity * entity) { u8 *defPtr; @@ -144,48 +148,48 @@ bool8 sub_8083C88(u8 param_1) void sub_8083CE0(u8 param_1) { if ((param_1 == 0) || (1 < gUnknown_202EE10.unk1A)) { - PlayFanfareSE(0x12d,0x100); + PlayFanfareSE(0x12d,MAX_VOLUME); } } void sub_8083D08(void) { - PlayFanfareSE(0x12E, 0x100); + PlayFanfareSE(0x12E, MAX_VOLUME); } void sub_8083D1C(void) { - PlayFanfareSE(0x133, 0x100); + PlayFanfareSE(0x133, MAX_VOLUME); } void sub_8083D30(void) { - PlayFanfareSE(0x12F, 0x100); + PlayFanfareSE(0x12F, MAX_VOLUME); } void sub_8083D44(void) { - PlayFanfareSE(0x130, 0x100); + PlayFanfareSE(0x130, MAX_VOLUME); } void sub_8083D58(void) { - PlayFanfareSE(0xC8, 0x100); + PlayFanfareSE(0xC8, MAX_VOLUME); } void sub_8083D68(void) { - PlayFanfareSE(0xCF, 0x100); + PlayFanfareSE(0xCF, MAX_VOLUME); } void sub_8083D78(void) { - PlayFanfareSE(0xD3, 0x100); + PlayFanfareSE(0xD3, MAX_VOLUME); } void sub_8083D88(void) { - PlayFanfareSE(0xCC, 0x100); + PlayFanfareSE(0xCC, MAX_VOLUME); } void PlayDungeonFailBGM(void) @@ -194,7 +198,7 @@ void PlayDungeonFailBGM(void) gDungeon->unk66F = 0; gDungeon->unk672 = 0; gDungeon->unk699 = 0; - gDungeon->unk66A = 999; + gDungeon->bossSongIndex = STOP_BGM; } void PlayDungeonCompleteBGM(void) @@ -203,25 +207,25 @@ void PlayDungeonCompleteBGM(void) gDungeon->unk66F = 0; gDungeon->unk672 = 0; gDungeon->unk699 = 0; - gDungeon->unk66A = 999; + gDungeon->bossSongIndex = STOP_BGM; } void sub_8083E28(void) { - PlayFanfareSE(0xCF, 0x100); + PlayFanfareSE(0xCF, MAX_VOLUME); } void PlaySoundEffect(u32 songIndex) { u16 songIndex_u32 = songIndex; - if(songIndex_u32 != 0x3E5) - PlayFanfareSE(songIndex_u32, 0x100); + if(songIndex_u32 != STOP_SOUND_EFFECT) + PlayFanfareSE(songIndex_u32, MAX_VOLUME); } void StopSoundEffect(u32 songIndex) { u16 songIndex_u32 = songIndex; - if(songIndex_u32 != 0x3E5) + if(songIndex_u32 != STOP_SOUND_EFFECT) StopFanfareSE(songIndex_u32); } @@ -238,16 +242,16 @@ void DungeonStartNewBGM(u16 songIndex) void DungeonFadeInNewBGM(u16 songIndex, u32 fadeInSpeed) { - gDungeon->musPlayer.queuedSongIndex = 0x80 << 8 | songIndex; + gDungeon->musPlayer.queuedSongIndex = DUNGEON_MUSIC_FADE_IN | songIndex; gDungeon->musPlayer.fadeInSpeed = fadeInSpeed; } void DungeonFadeOutBGM(u16 speed) { FadeOutAllMusic(speed); - gDungeon->musPlayer.songIndex = 999; - gDungeon->musPlayer.pastSongIndex = 999; - gDungeon->musPlayer.queuedSongIndex = 999; + gDungeon->musPlayer.songIndex = STOP_BGM; + gDungeon->musPlayer.pastSongIndex = STOP_BGM; + gDungeon->musPlayer.queuedSongIndex = STOP_BGM; } void DungeonStopBGM(void) @@ -266,50 +270,50 @@ void StopDungeonBGM(void) struct DungeonMusicPlayer *temp = &gDungeon->musPlayer; temp->state = 0; temp->fadeOutSpeed = 0; - temp->songIndex = 999; - temp->pastSongIndex = 999; - temp->queuedSongIndex = 999; + temp->songIndex = STOP_BGM; + temp->pastSongIndex = STOP_BGM; + temp->queuedSongIndex = STOP_BGM; } void UpdateDungeonMusic(void) { #ifndef NONMATCHING - register s32 uVar1 asm("r1"); - register u16 *uVar3 asm("r3"); + register s32 currSongIndex asm("r1"); + register u16 *bossSongIndex asm("r3"); #else - s32 uVar1; - u16 *uVar3; + s32 currSongIndex; + u16 *bossSongIndex; #endif - s32 songIndex1; + s32 newSongIndex; struct DungeonMusicPlayer *musPlayer; musPlayer = &gDungeon->musPlayer; - uVar3 = &gDungeon->unk66A; - songIndex1 = *uVar3; - if (songIndex1 == 999) { + bossSongIndex = &gDungeon->bossSongIndex; + newSongIndex = *bossSongIndex; + if (newSongIndex == STOP_BGM) { if (gDungeon->unk66F != 0) { - songIndex1 = MUS_STOP_THIEF; + newSongIndex = MUS_STOP_THIEF; } else if (gDungeon->unk672 != 0) { - songIndex1 = MUS_MONSTER_HOUSE; + newSongIndex = MUS_MONSTER_HOUSE; } else if (gDungeon->unk699 != 0) { - songIndex1 = MUS_KECLEON_SHOP; + newSongIndex = MUS_KECLEON_SHOP; } else { - songIndex1 = musPlayer->queuedSongIndex; + newSongIndex = musPlayer->queuedSongIndex; } } if (musPlayer->state == 4) { - if (songIndex1 != musPlayer->pastSongIndex) { + if (newSongIndex != musPlayer->pastSongIndex) { musPlayer->state = 2; - musPlayer->songIndex = songIndex1; + musPlayer->songIndex = newSongIndex; } } - else if ((songIndex1 != 999) && (musPlayer->songIndex == 999)) { + else if ((newSongIndex != STOP_BGM) && (musPlayer->songIndex == STOP_BGM)) { musPlayer->state = 1; - musPlayer->songIndex = songIndex1; + musPlayer->songIndex = newSongIndex; } switch(musPlayer->state) { case 0: @@ -317,21 +321,21 @@ void UpdateDungeonMusic(void) default: break; case 1: - uVar1 = musPlayer->songIndex; - if (uVar1 == 999) { + currSongIndex = musPlayer->songIndex; + if (currSongIndex == STOP_BGM) { musPlayer->state = 0; } else { - if ((uVar1 & 0x8000) != 0) { - StartNewBGM(uVar1 & 0x7fff); + if ((currSongIndex & DUNGEON_MUSIC_FADE_IN)) { + StartNewBGM(currSongIndex & ~(DUNGEON_MUSIC_FADE_IN)); } else { - FadeInNewBGM(uVar1 & 0x7fff, musPlayer->fadeInSpeed); + FadeInNewBGM(currSongIndex & ~(DUNGEON_MUSIC_FADE_IN), musPlayer->fadeInSpeed); } musPlayer->pastSongIndex = musPlayer->songIndex; musPlayer->state = 4; } - musPlayer->songIndex = 999; + musPlayer->songIndex = STOP_BGM; break; case 2: FadeOutBGM(0x1e); @@ -342,7 +346,7 @@ void UpdateDungeonMusic(void) if ((musPlayer->fadeOutSpeed != 0) && (musPlayer->fadeOutSpeed--, musPlayer->fadeOutSpeed != 0)) { break; } - if (musPlayer->songIndex == 999) { + if (musPlayer->songIndex == STOP_BGM) { StopBGM(); musPlayer->state = 0; } diff --git a/src/event_flag_1.c b/src/event_flag_1.c index 377f7d927..1bbdc201a 100644 --- a/src/event_flag_1.c +++ b/src/event_flag_1.c @@ -9,7 +9,7 @@ extern bool8 HasCompletedAllMazes(void); extern u8 sub_80973F4(u32); -extern u8 _FlagJudge(u32, u32, u32); +extern u8 _FlagJudge(s32, s32, u32); extern u32 sub_8001658(u32, s32); extern u32 _FlagCalc(s32, s32, u32); extern void sub_80018D8(u32, u32, u32); @@ -365,7 +365,7 @@ u32 _FlagCalc(s32 param_1, s32 param_2, u32 operation) } } -u8 _FlagJudge(u32 param_1, u32 param_2, u32 operation) +u8 _FlagJudge(s32 param_1, s32 param_2, u32 operation) { switch(operation) { case 0: @@ -375,21 +375,21 @@ u8 _FlagJudge(u32 param_1, u32 param_2, u32 operation) case 2: return param_1 == param_2; case 7: - return (-(param_1 ^ param_2) | (param_1 ^ param_2)) >> 0x1f; + return param_1 != param_2; case 3: - return (int)param_1 > (int)param_2; + return param_1 > param_2; case 5: - return (int)param_1 >= (int)param_2; + return param_1 >= param_2; case 4: - return (int)param_1 < (int)param_2; + return param_1 < param_2; case 6: - return (int)param_1 <= (int)param_2; + return param_1 <= param_2; case 8: return (param_1 & param_2) != 0; case 9: return (param_1 ^ param_2) != 0; case 10: - return (int)param_1 >> (param_2) & 1; + return param_1 >> (param_2) & 1; default: FatalError(&gUnknown_80B7350,gUnknown_80B735C, operation); // event flag rule error %d } @@ -415,9 +415,9 @@ void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 operation) void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 operation) { - u32 uVar1; - u32 uVar2; - u32 uVar3; + s32 uVar1; + s32 uVar2; + s32 uVar3; s32 param_2_s32 = param_2; s32 param_3_s32 = param_3; @@ -429,14 +429,14 @@ void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 operation) sub_80018D8(param_1,param_2_s32,uVar3); } -u8 FlagJudge(u32 r0, u32 r1, u32 operation) +u8 FlagJudge(s32 r0, s32 r1, u32 operation) { return _FlagJudge(r0, r1, operation); } u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 operation) { - u32 uVar1; + s32 uVar1; uVar1 = sub_8001658(param_1, param_2); return _FlagJudge(uVar1,param_3,operation); @@ -444,8 +444,8 @@ u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 operation) u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 operation) { - u32 uVar1; - u32 uVar2; + s32 uVar1; + s32 uVar2; s32 param_2_s32 = param_2; s32 param_3_s32 = param_3; diff --git a/src/felicity_bank_1.c b/src/felicity_bank_1.c index d9e4fc57d..504e487fd 100644 --- a/src/felicity_bank_1.c +++ b/src/felicity_bank_1.c @@ -2,6 +2,7 @@ #include "item.h" #include "team_inventory.h" #include "felicity_bank.h" +#include "menu_input.h" extern struct unkStruct_203B204 *gUnknown_203B204; @@ -14,7 +15,6 @@ extern u8 *gFelicityDeposit; extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void xxx_call_draw_string(s32 x, u32 y, u8 *, u32 , u32); -extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); extern void sub_80073E0(u32); extern void sub_8013C68(u32 *); extern s32 sub_80144A4(s32 *); diff --git a/src/friend_area.c b/src/friend_area.c index 34824d843..2e6c52808 100644 --- a/src/friend_area.c +++ b/src/friend_area.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/dungeon.h" #include "constants/friend_area.h" #include "friend_area.h" #include "pokemon.h" @@ -359,9 +360,9 @@ void sub_8092404(u8 r0, u16 *r1, bool8 r2, bool8 r3) pokemon = &gRecruitedPokemonRef->pokemon[counter]; if((u8)(pokemon->unk0) & 1) { - if((pokemon->unk2 == 0) || r2) + if((pokemon->isTeamLeader == 0) || r2) { - flag = (u8)pokemon->fill4[0] == 65; + flag = pokemon->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER; if(!flag || r3) { if(sub_80923D4(counter) == r0) @@ -463,123 +464,35 @@ NAKED void sub_8092404(u8 r0, u16 *r1, bool8 r2, bool8 r3) } #endif -#ifdef NONMATCHING -void sub_809249C(u8 index, u8 clear) +void sub_809249C(u8 friendArea, u8 clear) { - s32 counter; - bool32 flag; - u8 temp8; - u8 neg8; + s32 index; + bool32 dungeonCheck; + bool32 isTeamLeader; - if(!gFriendAreas[index]) + if(!gFriendAreas[friendArea]) return; - for(counter = 0; counter <= 412; counter++) + for(index = 0; index < NUM_MONSTERS; index++) { - if((u8)(gRecruitedPokemonRef[counter].unk0) & 1) + struct PokemonStruct *pokemon = &gRecruitedPokemonRef->pokemon[index]; + + if((u8)(pokemon->unk0) & 1) { - if(sub_80923D4(counter) == index) + if(sub_80923D4(index) == friendArea) { - flag = (u8)gRecruitedPokemonRef[counter].unk4[0] == 65; - if(!flag) - { - temp8 = (u8)gRecruitedPokemonRef[counter].unk2; - neg8 = -temp8; - neg8 |= temp8; - // still tries to left shift before the right shift.. - neg8 >>= 7; - if(neg8 != 0) - { - clear = 0; - } - else - { - gRecruitedPokemonRef[counter].unk0 = neg8; - } - } + dungeonCheck = pokemon->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER; + if(dungeonCheck || (isTeamLeader = pokemon->isTeamLeader != FALSE, isTeamLeader)) + clear = FALSE; + else + pokemon->unk0 = 0; } } } if(clear) { - gFriendAreas[index] = FALSE; + gFriendAreas[friendArea] = FALSE; } } -#else -NAKED void sub_809249C(u8 index, u8 clear) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tlsls r1, 24\n" - "\tlsrs r7, r1, 24\n" - "\tldr r0, _080924F8\n" - "\tldr r0, [r0]\n" - "\tadds r0, r6\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbeq _0809251A\n" - "\tmovs r5, 0\n" -"_080924B4:\n" - "\tldr r2, _080924FC\n" - "\tmovs r0, 0x58\n" - "\tadds r1, r5, 0\n" - "\tmuls r1, r0\n" - "\tldr r0, [r2]\n" - "\tadds r4, r0, r1\n" - "\tldrb r1, [r4]\n" - "\tmovs r0, 0x1\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbeq _08092502\n" - "\tadds r0, r5, 0\n" - "\tbl sub_80923D4\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, r6\n" - "\tbne _08092502\n" - "\tmovs r1, 0\n" - "\tldrb r0, [r4, 0x4]\n" - "\tcmp r0, 0x41\n" - "\tbne _080924E2\n" - "\tmovs r1, 0x1\n" -"_080924E2:\n" - "\tcmp r1, 0\n" - "\tbne _080924F2\n" - "\tldrb r1, [r4, 0x2]\n" - "\tnegs r0, r1\n" - "\torrs r0, r1\n" - "\tlsrs r0, 31\n" - "\tcmp r0, 0\n" - "\tbeq _08092500\n" -"_080924F2:\n" - "\tmovs r7, 0\n" - "\tb _08092502\n" - "\t.align 2, 0\n" -"_080924F8: .4byte gFriendAreas\n" -"_080924FC: .4byte gRecruitedPokemonRef\n" -"_08092500:\n" - "\tstrh r0, [r4]\n" -"_08092502:\n" - "\tadds r5, 0x1\n" - "\tmovs r0, 0xCE\n" - "\tlsls r0, 1\n" - "\tcmp r5, r0\n" - "\tble _080924B4\n" - "\tcmp r7, 0\n" - "\tbeq _0809251A\n" - "\tldr r0, _08092520\n" - "\tldr r0, [r0]\n" - "\tadds r0, r6\n" - "\tmovs r1, 0\n" - "\tstrb r1, [r0]\n" -"_0809251A:\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_08092520: .4byte gFriendAreas"); -} -#endif const char *GetFriendAreaName(u8 index) { diff --git a/src/friend_area_action_menu.c b/src/friend_area_action_menu.c index d96bcb56f..865fdfea7 100644 --- a/src/friend_area_action_menu.c +++ b/src/friend_area_action_menu.c @@ -7,12 +7,12 @@ #include "pokemon.h" #include "team_inventory.h" #include "friend_area_action_menu.h" +#include "menu_input.h" extern struct unkStruct_203B2BC *gUnknown_203B2BC; extern void sub_80141B4(const char *r0, u32, u32 *r1, u32); extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32); -extern void sub_8012D60(u32 *, struct MenuItem *, u32, u32 *, u32, u32); extern void sub_8027D40(u32, struct BulkItem *); extern void sub_8023868(u32, u32, u32, u32); extern void sub_8023B7C(u32); @@ -30,7 +30,6 @@ extern void sub_801B3C0(struct Item *); extern void unk_CopyMoves4To8(struct Move *, struct Move *); extern void sub_801EE10(u32, s16, struct Move *, u32, u32, u32); -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern void SetFriendAreaActionMenuState(u32); extern void ResetSprites(u8 ); extern void sub_802719C(); @@ -39,7 +38,7 @@ extern void sub_80277FC(); extern void sub_80278B4(); extern void sub_8027A40(); extern void sub_8027A5C(); -extern void sub_8027D1C(); +extern void FriendAreaActionMenu_GotoFallbackState(); extern void sub_8027A78(); extern void sub_8027AE4(); extern void sub_8027B28(); @@ -53,7 +52,7 @@ extern void sub_80276A8(); const struct UnkTextStruct2 gUnknown_80DD6EC = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -64,7 +63,7 @@ const struct UnkTextStruct2 gUnknown_80DD6EC = const struct UnkTextStruct2 gUnknown_80DD704 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x13, 0x00, 0x04, 0x00, 0x09, 0x03, 0x03, 0x00, @@ -74,7 +73,7 @@ const struct UnkTextStruct2 gUnknown_80DD704 = const struct UnkTextStruct2 gUnknown_80DD71C = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x14, 0x00, 0x04, 0x00, 0x06, 0x03, 0x03, 0x00, @@ -84,7 +83,7 @@ const struct UnkTextStruct2 gUnknown_80DD71C = const struct UnkTextStruct2 gUnknown_80DD734 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x16, 0x00, 0x04, 0x00, 0x06, 0x03, 0x03, 0x00, @@ -94,7 +93,7 @@ const struct UnkTextStruct2 gUnknown_80DD734 = const struct UnkTextStruct2 gUnknown_80DD74C = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x11, 0x00, 0x1A, 0x02, 0x02, 0x00, @@ -131,14 +130,14 @@ u32 sub_8027074(void) gUnknown_203B2BC->unk70 = 0; gUnknown_203B2BC->unk74 = 0; gUnknown_203B2BC->unk78 = 0; - SetFriendAreaActionMenuState(0); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_INIT); return 1; } u32 sub_80270A4(void) { switch(gUnknown_203B2BC->state) { - case 0: + case FRIEND_AREA_ACTION_MENU_INIT: SetFriendAreaActionMenuState(1); break; case 1: @@ -178,9 +177,9 @@ u32 sub_80270A4(void) sub_8027D00(); break; default: - sub_8027D1C(); + FriendAreaActionMenu_GotoFallbackState(); break; - case 0x11: + case FRIEND_AREA_ACTION_MENU_EXIT: return 3; } return 0; @@ -236,8 +235,8 @@ void sub_8027274(void) struct Item slot; switch(gUnknown_203B2BC->state) { - case 0: - case 0x11: + case FRIEND_AREA_ACTION_MENU_INIT: + case FRIEND_AREA_ACTION_MENU_EXIT: break; case 1: sub_8023868(1,0,0,7); @@ -290,13 +289,13 @@ void sub_8027274(void) sub_801F808(gUnknown_203B2BC->moveIDs); break; case 6: - gUnknown_203B2BC->unk4 = 2; + gUnknown_203B2BC->fallbackState = 2; // The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was // returned to the Toolbox sub_80141B4(gUnknown_80DD8A0,0,0,0x101); break; case 7: - gUnknown_203B2BC->unk4 = 2; + gUnknown_203B2BC->fallbackState = 2; // The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was // returned to storage sub_80141B4(gUnknown_80DD8D0,0,0,0x101); diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c index b63b2eec6..ae673096f 100644 --- a/src/friend_area_action_menu_1.c +++ b/src/friend_area_action_menu_1.c @@ -6,6 +6,7 @@ #include "team_inventory.h" #include "pokemon.h" #include "friend_area_action_menu.h" +#include "menu_input.h" extern struct unkStruct_203B2BC *gUnknown_203B2BC; extern struct TeamInventory *gTeamInventory_203B460; @@ -16,8 +17,6 @@ extern u32 sub_801EF38(u8 r0); extern void sub_801F214(); extern void SetFriendAreaActionMenuState(u32); -extern u8 sub_8012FD8(u32 *r0); -extern void sub_8013114(u32 *, s32 *); extern void PlaySound(u32); extern void nullsub_104(); extern void sub_801A928(); @@ -81,7 +80,7 @@ void sub_80277FC(void) gUnknown_203B2BC->targetPoke = sub_8023B44(); pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; gUnknown_203B2BC->unk18 = pokeStruct; - gUnknown_203B2BC->unk1C = pokeStruct->isTeamLeader; + gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader; PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2); SetFriendAreaActionMenuState(3); break; @@ -89,13 +88,13 @@ void sub_80277FC(void) gUnknown_203B2BC->targetPoke = sub_8023B44(); pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; gUnknown_203B2BC->unk18 = pokeStruct; - gUnknown_203B2BC->unk1C = pokeStruct->isTeamLeader; + gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader; PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2); SetFriendAreaActionMenuState(4); break; case 2: sub_8023C60(); - SetFriendAreaActionMenuState(0x11); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_EXIT); break; } } @@ -105,14 +104,14 @@ void sub_80278B4(void) struct PokemonStruct *playerStruct; struct PokemonStruct *pokeStruct1; struct PokemonStruct *pokeStruct2; - int local_c; + int menuAction; - local_c = 0; + menuAction = 0; sub_8023A94(0); - if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&local_c), local_c != 1)) { - gUnknown_203B2BC->unk70 = local_c; + if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != 1)) { + gUnknown_203B2BC->unk70 = menuAction; } - switch(local_c) { + switch(menuAction) { case 6: if (sub_808D750(gUnknown_203B2BC->targetPoke)) { #ifdef NONMATCHING @@ -242,10 +241,10 @@ void sub_8027A78(void) void sub_8027AE4(void) { - s32 local_8; + s32 menuAction; - if (sub_80144A4(&local_8) == 0) { - switch(local_8) + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction) { case 1: case 3: @@ -368,12 +367,12 @@ void sub_8027D00(void) } } -void sub_8027D1C(void) +void FriendAreaActionMenu_GotoFallbackState(void) { s32 temp; if(sub_80144A4(&temp) == 0) { - SetFriendAreaActionMenuState(gUnknown_203B2BC->unk4); + SetFriendAreaActionMenuState(gUnknown_203B2BC->fallbackState); } } diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 92f9f1404..db0eff817 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -1,34 +1,35 @@ #include "global.h" #include "constants/dungeon.h" #include "item.h" +#include "menu.h" #include "pokemon.h" #include "text.h" #include "team_inventory.h" #include "constants/move.h" #include "code_800D090.h" +#include "menu_input.h" struct unkStruct_203B2B8 { // size: 0x280 u32 state; - u32 unk4; + u32 fallbackState; u8 unk8; /* 0xA */ s16 pokeSpecies; - u32 unkC; + u32 id; /* 0x10 */ struct BulkItem item1; /* 0x14 */ struct BulkItem item2; struct PokemonStruct *unk18; - u8 fill1C[0x4]; - u32 unk20; + bool8 isTeamLeader; + u32 moveIndex; /* 0x24 */ u16 moveID; - struct Move unk28[4]; - u8 fill48[0x70 - 0x48]; + struct Move moves[8]; + u16 moveIDs[4]; // some list of move IDs u32 unk70; u32 unk74; u32 unk78; - u32 unk7C; - u8 fill80[0xCC - 0x80]; - u32 unkCC; + struct MenuStruct unk7C; + struct MenuStruct unkCC; }; extern struct unkStruct_203B2B8 *gUnknown_203B2B8; extern u8 gAvailablePokemonNames[0x58]; @@ -69,8 +70,6 @@ extern void nullsub_104(void); extern void sub_801A928(void); extern void sub_8099690(u32); extern u32 sub_801A6E8(u32); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, s32 *); extern u32 sub_801A8AC(void); extern u32 sub_8022860(void); @@ -268,15 +267,15 @@ void sub_8026B64(void) switch(sub_801A6E8(1)) { case 3: - gUnknown_203B2B8->unkC = sub_801A8AC(); - gUnknown_203B2B8->item1.id = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].id; - gUnknown_203B2B8->item1.quantity = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].quantity; + gUnknown_203B2B8->id = sub_801A8AC(); + gUnknown_203B2B8->item1.id = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->id].id; + gUnknown_203B2B8->item1.quantity = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->id].quantity; sub_8026074(0x14); break; case 4: - gUnknown_203B2B8->unkC = sub_801A8AC(); - gUnknown_203B2B8->item1.id = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].id; - gUnknown_203B2B8->item1.quantity = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].quantity; + gUnknown_203B2B8->id = sub_801A8AC(); + gUnknown_203B2B8->item1.id = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->id].id; + gUnknown_203B2B8->item1.quantity = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->id].quantity; sub_8099690(0); sub_8026074(0x15); break; @@ -307,7 +306,7 @@ void sub_8026C14(void) case 0xb: nextState = 0xF; PlaySound(0x14d); - ShiftItemsDownFrom(gUnknown_203B2B8->unkC); + ShiftItemsDownFrom(gUnknown_203B2B8->id); FillInventoryGaps(); if (gUnknown_203B2B8->item2.id != ITEM_NOTHING) { AddHeldItemToInventory(&gUnknown_203B2B8->item2); @@ -359,8 +358,8 @@ void sub_8026D0C(void) break; case 3: case 4: - gUnknown_203B2B8->unk20 = sub_801F194(); - gUnknown_203B2B8->moveID = gUnknown_203B2B8->unk28[gUnknown_203B2B8->unk20].id; + gUnknown_203B2B8->moveIndex = sub_801F194(); + gUnknown_203B2B8->moveID = gUnknown_203B2B8->moves[gUnknown_203B2B8->moveIndex].id; sub_8026074(0x18); break; case 2: @@ -390,7 +389,7 @@ void sub_8026D88(void) s32 temp; if(sub_80144A4(&temp) == 0) { - sub_8026074(gUnknown_203B2B8->unk4); + sub_8026074(gUnknown_203B2B8->fallbackState); } } @@ -423,7 +422,7 @@ void sub_8026E08(u32 r0) sub_808D930(buffer, gUnknown_203B2B8->unk18->speciesNum); sprintfStatic(buffer1, gUnknown_80DD6E0, gAvailablePokemonNames); x = sub_8008ED0(buffer1); - xxx_call_draw_string(((gUnknown_80DD370.unk0c << 3) - x) / 2, 3, buffer1, r0, 0); + xxx_call_draw_string(((gUnknown_80DD370.unkC << 3) - x) / 2, 3, buffer1, r0, 0); sub_80073E0(r0); } diff --git a/src/friend_list_menu_1.c b/src/friend_list_menu_1.c index 1d60ce4ac..19f1ae683 100644 --- a/src/friend_list_menu_1.c +++ b/src/friend_list_menu_1.c @@ -6,6 +6,7 @@ #include "item.h" #include "pokemon.h" #include "moves.h" +#include "menu_input.h" // there might be more overlap with unkStruct_203B2BC @@ -19,10 +20,10 @@ struct unkStruct_203B2B4 u32 unk8; u8 unkC; u8 unkD; - s16 unkE; + s16 species; u32 unk10; struct BulkItem unk14; - u32 unk18; + struct BulkItem unk18; /* 0x1C */ struct PokemonStruct *pokeStruct; u32 moveIndex; // some sort of move index u16 moveID; @@ -30,9 +31,7 @@ struct unkStruct_203B2B4 u16 moveIDs[4]; // some list of move IDs u32 unk70; s32 unk74; - u32 unk78; - u32 unk7C; - u8 fill7C[0xC8 - 0x80]; + struct MenuStruct unk78; struct MenuItem unkC8[4]; u8 fillE8[0x108 - 0xE8]; s16 unk108[8]; @@ -70,7 +69,6 @@ extern void sub_8025E24(void); extern void sub_8025E44(void); extern void sub_802544C(void); extern void sub_8025518(void); -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern void sub_8025728(void); extern void sub_802591C(void); extern u32 sub_801B3C0(struct Item *param_1); @@ -80,19 +78,17 @@ extern void sub_801A5D8(u32,u32, u32, u32); extern void sub_801A8D0(u32); extern void sub_801A9E0(void); extern void PlaySound(u32); -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); -extern void sub_8012D60(u32 *, struct MenuItem *, u32, s16 *, u32, u32); extern void sub_8024458(s16, u32); extern void sub_801BEEC(s16); extern void sub_8023B7C(u32); extern void sub_8023DA4(void); -extern void unk_CopyMoves4To8(struct Move *, struct Move *); // TODO convert arg 0 to PokemonMove struct * +extern void unk_CopyMoves4To8(struct Move *, struct Move *); extern void sub_801EE10(u32, s16, struct Move *, u32, u32, u32); extern void GetLinkedSequence(u32, struct Move *, u16*); extern void sub_801F808(u16 *); u32 sub_801602C(u32 r0, u8 *name); -extern void sub_8025E68(u32 , u32 *); +extern void sub_8025E68(u32 , struct BulkItem *); bool8 sub_80252F0(s32 param_1) { @@ -246,10 +242,10 @@ void sub_8025518(void) sub_8012D60(&gUnknown_203B2B4->unk78,gUnknown_203B2B4->unkC8,0,gUnknown_203B2B4->unk108,gUnknown_203B2B4->unk70,2); break; case 4: - sub_8024458(gUnknown_203B2B4->unkE,2); + sub_8024458(gUnknown_203B2B4->species,2); break; case 5: - sub_801BEEC(gUnknown_203B2B4->unkE); + sub_801BEEC(gUnknown_203B2B4->species); break; case 0xb: sub_801A5D8(1,0,0,10); @@ -284,7 +280,7 @@ void sub_8025518(void) break; case 0xf: unk_CopyMoves4To8(gUnknown_203B2B4->moves,gUnknown_203B2B4->pokeStruct->moves); - sub_801EE10(3,gUnknown_203B2B4->unkE,gUnknown_203B2B4->moves,0,0,0); + sub_801EE10(3,gUnknown_203B2B4->species,gUnknown_203B2B4->moves,0,0,0); break; case 0x10: sub_801F1B0(1,0); diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c index 549e9d7ad..25fe93abc 100644 --- a/src/friend_rescue_1.c +++ b/src/friend_rescue_1.c @@ -12,6 +12,7 @@ #include "save.h" #include "menu.h" #include "rescue_password_menu.h" +#include "menu_input.h" extern struct TeamInventory *gTeamInventory_203B460; @@ -45,10 +46,7 @@ extern u32 sub_80154F0(); extern void sub_80155F0(); extern void sub_80141B4(u8 *r0, u32, u32 *r1, u32); extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32); -extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, s32 *); extern u32 sub_801CA08(u32); extern void sub_801CBB8(void); extern void sub_801CB5C(u32); @@ -56,7 +54,7 @@ extern void sub_8035CC0(struct UnkTextStruct2 *, u32); extern void sub_801B3C0(struct Item *); extern u32 sub_801B410(void); extern void sub_801B450(void); -extern void sub_8035CF4(u32 *, u32, u32); +extern void sub_8035CF4(struct MenuStruct *, u32, u32); extern u8 sub_801CB24(void); extern u32 sub_8030DA0(void); extern void sub_8030DE4(void); @@ -232,7 +230,6 @@ extern void sub_8023868(u32, u32, u32, u32); extern u32 sub_801D008(void); extern void sub_8023DA4(void); extern void sub_8023C60(void); -extern void sub_8035CF4(u32 *, u32, u32); extern s32 sub_8037B28(u32); extern void sub_803092C(void); extern void sub_801CCD8(void); @@ -240,7 +237,6 @@ extern void sub_80151C0(u32, u8 *); extern void sub_801C8C4(u32, u32, s32 * , u32); extern void xxx_call_start_bg_music(void); extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); -extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); extern void sub_802F204(struct unkStruct_802F204 *, u32); extern void nullsub_23(u32); extern s32 sub_8037D64(u32, void *, void *); @@ -828,8 +824,8 @@ void sub_8034074(void) menuAction = -1; sub_8030768(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk30C)) - sub_8013114(&gUnknown_203B33C->unk30C, &menuAction); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); switch(menuAction) { case 9: @@ -865,7 +861,7 @@ void sub_8034130(void) sub_803092C(); if(gUnknown_203B33C->fallbackState == 0x7E) { - sub_8035CF4(&gUnknown_203B33C->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); SetFriendRescueMenuState(0x1E); } else @@ -911,8 +907,8 @@ void sub_8034254(void) menuAction = -1; sub_8023A94(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk30C)) - sub_8013114(&gUnknown_203B33C->unk30C, &menuAction); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); switch(menuAction) { case 9: @@ -951,7 +947,7 @@ void sub_8034310(void) sub_8023B7C(1); if(gUnknown_203B33C->fallbackState == 0x7E) { - sub_8035CF4(&gUnknown_203B33C->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); SetFriendRescueMenuState(0x27); } else @@ -1106,8 +1102,8 @@ void sub_8034590(void) menuAction = -1; sub_8030768(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk30C)) - sub_8013114(&gUnknown_203B33C->unk30C, &menuAction); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); switch(menuAction) { case 9: @@ -1143,7 +1139,7 @@ void sub_803464C(void) sub_803092C(); if(gUnknown_203B33C->fallbackState == 0x7E) { - sub_8035CF4(&gUnknown_203B33C->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); SetFriendRescueMenuState(0x33); } else @@ -1431,8 +1427,8 @@ void sub_8034A70(void) menuAction = -1; sub_8030768(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk30C)) - sub_8013114(&gUnknown_203B33C->unk30C, &menuAction); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); switch(menuAction) { case 9: @@ -1468,7 +1464,7 @@ void sub_8034B2C(void) sub_803092C(); if(gUnknown_203B33C->fallbackState == 0x7E) { - sub_8035CF4(&gUnknown_203B33C->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); SetFriendRescueMenuState(0x5D); } else @@ -1518,7 +1514,7 @@ void sub_8034C38(void) sub_801CB5C(1); if(gUnknown_203B33C->fallbackState == 0x7E) { - sub_8035CF4(&gUnknown_203B33C->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); SetFriendRescueMenuState(0x60); } else @@ -1536,8 +1532,8 @@ void sub_8034C98(void) menuAction = -1; sub_801CA08(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk30C)) - sub_8013114(&gUnknown_203B33C->unk30C, &menuAction); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); switch(menuAction) { case 9: diff --git a/src/gulpin_shop.c b/src/gulpin_shop.c index d80151481..8ef689fb1 100644 --- a/src/gulpin_shop.c +++ b/src/gulpin_shop.c @@ -6,6 +6,7 @@ #include "input.h" #include "menu.h" #include "gulpin_shop.h" +#include "menu_input.h" extern struct unkStruct_203B26C *gUnknown_203B26C; extern const struct UnkTextStruct2 gUnknown_80DC11C; @@ -18,7 +19,6 @@ extern void sub_801EDA4(); extern void sub_801EDC0(); extern void sub_801E980(); extern void sub_801EA28(); -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern void sub_801EBC4(); u32 DisplayGulpinDialogueSprite(s32 param_1,s16 pokeSpecies,struct Move *param_3) @@ -31,7 +31,7 @@ u32 DisplayGulpinDialogueSprite(s32 param_1,s16 pokeSpecies,struct Move *param_3 gUnknown_203B26C = MemoryAlloc(sizeof(struct unkStruct_203B26C),8); gUnknown_203B26C->unk0 = param_1; gUnknown_203B26C->speciesNum = species_32; - gUnknown_203B26C->unk10 = param_3; + gUnknown_203B26C->moves = param_3; gUnknown_203B26C->unk1C = param_3[4].id; if (param_1 == 0) { @@ -81,9 +81,9 @@ u32 sub_801E8C0(void) return 0; } -u8 sub_801E930(void) +bool8 GulpinIsNextMoveLinked(void) { - return gUnknown_203B26C->unkE; + return gUnknown_203B26C->isNextMoveLinked; } void sub_801E93C(void) diff --git a/src/gulpin_shop_1.c b/src/gulpin_shop_1.c index 305f4e70a..1e3df6f10 100644 --- a/src/gulpin_shop_1.c +++ b/src/gulpin_shop_1.c @@ -6,6 +6,7 @@ #include "input.h" #include "menu.h" #include "gulpin_shop.h" +#include "menu_input.h" extern struct unkStruct_203B26C *gUnknown_203B26C; extern void UpdateGulpinShopState(u32); @@ -14,8 +15,6 @@ extern void sub_801F214(void); extern s32 sub_80144A4(s32 *); extern u32 sub_801F890(void); extern void sub_801F8D0(void); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, u32 *); extern u8 IsNextMoveLinked(u32, struct Move *); extern void PlaySound(u32); extern void sub_801EF38(u32); @@ -36,7 +35,7 @@ void sub_801ED28(void) break; case 2: PlaySound(0x133); - gUnknown_203B26C->unkE = IsNextMoveLinked(gUnknown_203B26C->unk20, gUnknown_203B26C->unk10); + gUnknown_203B26C->isNextMoveLinked = IsNextMoveLinked(gUnknown_203B26C->unk20, gUnknown_203B26C->moves); UpdateGulpinShopState(4); break; case 3: @@ -67,7 +66,7 @@ void sub_801EDC0(void) { case 4: sub_801F214(); - RemoveLinkSequenceFromMoves8(gUnknown_203B26C->unk10, gUnknown_203B26C->unk20); + RemoveLinkSequenceFromMoves8(gUnknown_203B26C->moves, gUnknown_203B26C->unk20); gUnknown_203B26C->state = 5; break; case 1: diff --git a/src/kangaskhan_storage_1.c b/src/kangaskhan_storage_1.c index 539788bdd..685beb005 100644 --- a/src/kangaskhan_storage_1.c +++ b/src/kangaskhan_storage_1.c @@ -4,6 +4,7 @@ #include "input.h" #include "item.h" #include "kangaskhan_storage.h" +#include "menu_input.h" extern struct unkStruct_203B208 *gUnknown_203B208; @@ -12,7 +13,6 @@ extern u8 gUnknown_80DB7A8; extern void xxx_call_draw_string(u32 x, u32 y, u8 *, u32, u32); extern void sub_801CCD8(); extern void sub_801AD34(u32); -extern void sub_8012EA4(u32 *, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_8013C68(u32 *); diff --git a/src/kangaskhan_storage_2.c b/src/kangaskhan_storage_2.c index 1eea97e9b..ceffe6d45 100644 --- a/src/kangaskhan_storage_2.c +++ b/src/kangaskhan_storage_2.c @@ -7,6 +7,7 @@ #include "team_inventory.h" #include "input.h" #include "kangaskhan_storage.h" +#include "menu_input.h" extern struct unkStruct_203B208 *gUnknown_203B208; @@ -30,8 +31,6 @@ extern s32 sub_80144A4(s32 *); extern void sub_801B450(); extern u32 sub_801B410(void); -extern u8 sub_8012FD8(u32 *r0); -extern void sub_8013114(u32 *, s32 *); extern void sub_801CBB8(); extern bool8 sub_801ADA0(u32); @@ -47,13 +46,11 @@ extern u32 sub_801A6E8(u32); extern u32 sub_801AEA8(void); extern u32 sub_801A8AC(void); extern void sub_801A928(void); -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern void sub_80182E4(void); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_8013C68(u32 *); extern void sub_80073E0(u32); -extern void sub_8012EA4(u32 *, u32); extern void xxx_call_draw_string(u32 x, u32 y, u8 *, u32, u32); extern void sub_801A9E0(); @@ -65,7 +62,6 @@ extern void sub_8013AA0(u32 *); extern void sub_801B3C0(struct Item *); extern void sub_801A5D8(u32, u32, u32, u32); extern void sub_801C8C4(u32, u32, u32, u32); -extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32); extern void sub_801CB5C(u32); extern void sub_801A8D0(u32); extern u32 sub_801CFE0(u8); diff --git a/src/kangaskhan_storage_3.c b/src/kangaskhan_storage_3.c index f9a0f27e3..c0a611dd1 100644 --- a/src/kangaskhan_storage_3.c +++ b/src/kangaskhan_storage_3.c @@ -2,6 +2,7 @@ #include "item.h" #include "kangaskhan_storage.h" #include "team_inventory.h" +#include "menu_input.h" extern struct unkStruct_203B20C *gUnknown_203B20C; @@ -11,11 +12,8 @@ extern void sub_8017F10(u32); extern u8 sub_801CF14(u32); -extern u8 sub_8012FD8(u32 *r0); -extern void sub_8013114(u32 *, s32 *); extern void sub_801CBB8(void); extern void sub_8017F10(u32); -extern void sub_8012EA4(u32 *, u32); extern u8 sub_801ADA0(s32); extern void sub_801A928(void); diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index ea9d3623c..1feb29807 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/input.h" #include "file_system.h" #include "memory.h" #include "pokemon.h" @@ -7,6 +8,7 @@ #include "kecleon_items.h" #include "team_inventory.h" #include "code_800D090.h" +#include "menu_input.h" extern struct unkStruct_203B210 *gUnknown_203B210; extern u16 gUnknown_203B218; @@ -34,8 +36,6 @@ extern u32 sub_801B410(void); extern void sub_801B450(void); extern void sub_8099690(u32); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, u32 *); extern u32 sub_8019EDC(u8); extern u32 sub_801A2A8(u8); extern s32 sub_801A8AC(void); @@ -47,12 +47,10 @@ extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern s32 sub_8013800(void *, u32); extern void xxx_call_draw_string(s32 x, s32, u8 *, u32, u32); -extern void sub_8012BC4(s32, s32, s32, s32, s32, s32); extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32); extern s32 sub_801AED0(s32); void sub_8007B7C(s32, s32, s32, s32, s32); extern void sub_801AE84(void); -extern void sub_8012D08(void *, u32); extern void sub_801A998(void); extern void sub_801A9E0(void); extern void Kecleon_SortItems(void); @@ -527,10 +525,10 @@ u32 sub_8019EDC(u8 r0) { switch(GetKeyPress(gUnknown_203B214)) { - case 2: + case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; - case 1: + case INPUT_A_BUTTON: item = GetKecleonShopItem(sub_8019FB0()); slot.id = item->id; slot.quantity = item->quantity; @@ -543,7 +541,7 @@ u32 sub_8019EDC(u8 r0) PlayMenuSoundEffect(0); } return 3; - case 4: + case INPUT_START_BUTTON: PlayMenuSoundEffect(4); return 4; default: @@ -737,13 +735,12 @@ u32 sub_801A2A8(u8 r0) { switch(GetKeyPress(gUnknown_203B21C)) { - case 2: + case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; - case 1: + case INPUT_A_BUTTON: item = GetKecleonWareItem(sub_801A37C()); - // NOTE: needs seperate vars to match slot.id = item->id; slot.quantity = item->quantity; @@ -756,7 +753,7 @@ u32 sub_801A2A8(u8 r0) PlayMenuSoundEffect(0); } return 3; - case 4: + case INPUT_START_BUTTON: PlayMenuSoundEffect(4); return 4; default: @@ -958,10 +955,10 @@ u32 sub_801A6E8(u8 param_1) return 0; } switch(GetKeyPress(&gUnknown_203B224->unk54)) { - case 2: + case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; - case 1: + case INPUT_A_BUTTON: switch(gUnknown_203B224->unk0) { case 0: case 1: @@ -989,11 +986,11 @@ u32 sub_801A6E8(u8 param_1) break; } return 3; - case 4: + case INPUT_START_BUTTON: PlayMenuSoundEffect(4); return 4; - case 5: - case 6: + case INPUT_L_BUTTON: + case INPUT_R_BUTTON: if (gUnknown_203B224->unk0 != 3) goto _0801A87C; index = sub_801A8AC(); if ((gUnknown_203B224->unk4[index] != 0) || (sub_801ADA0(index) != 0)) { @@ -1008,7 +1005,7 @@ u32 sub_801A6E8(u8 param_1) PlayMenuSoundEffect(2); goto _0801A87C; } - case 3: + case INPUT_SELECT_BUTTON: if (gUnknown_203B224->unk0 != 2) { PlayMenuSoundEffect(5); Kecleon_SortItems(); @@ -1169,7 +1166,7 @@ void sub_801A9E0(void) break; } if ((sub_801AED0(teamItemIndex) & 1) != 0) { - sub_8007B7C(gUnknown_203B224->unk88,8,sub_8013800(&gUnknown_203B224->unk54,r7),(gUnknown_203B224->unk8C->unk0c - 2) * 8,10); + sub_8007B7C(gUnknown_203B224->unk88,8,sub_8013800(&gUnknown_203B224->unk54,r7),(gUnknown_203B224->unk8C->unkC - 2) * 8,10); } } sub_80073E0(gUnknown_203B224->unk88); diff --git a/src/load_screen.c b/src/load_screen.c index c1474a932..23af94777 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -11,6 +11,7 @@ #include "save.h" #include "code_800D090.h" #include "code_8094F88.h" +#include "menu_input.h" extern const struct FileArchive gTitleMenuFileArchive; @@ -18,12 +19,7 @@ struct LoadScreen { // size: 0x27c u32 currMenu; - u32 unk4; - u8 fill8[0x54 - 8]; - u32 unk54; - u8 fill58[0xA4 - 0x58]; - u32 unkA4; - u8 fillA8[0x144 - 0xA8]; + struct MenuStruct unk4[4]; struct UnkTextStruct2 unk144[4]; /* 0x1A4 */ u8 formattedTeamName[0x24]; /* 0x1C8 */ u8 formattedPlayerName[0x24]; @@ -44,10 +40,8 @@ u8 IsQuickSave(void); void DrawLoadScreenText(void); void sub_80397B4(void); -extern void sub_8035CF4(u32 *, u32, u32); -extern void SetMenuItems(u32 *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, u32 *); +extern void sub_8035CF4(struct MenuStruct *, u32, u32); +extern void SetMenuItems(struct MenuStruct *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); extern void sub_80920D8(u8 *); extern struct PokemonStruct *GetPlayerPokemonStruct(void); @@ -71,7 +65,7 @@ extern void sub_8007E20(s32, s32, s32, u32, u32, s32, u32); const struct UnkTextStruct2 gUnknown_80E75F8 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -80,7 +74,7 @@ const struct UnkTextStruct2 gUnknown_80E75F8 = { const struct UnkTextStruct2 gUnknown_80E7610 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x02, 0x00, 0x1A, 0x0B, 0x0B, 0x00, @@ -91,7 +85,7 @@ const u8 gUnkData_80E7628[] = {0x20, 0x00, 0x00, 0x00}; const struct UnkTextStruct2 gUnknown_80E762C = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x0F, 0x00, 0x13, 0x03, 0x03, 0x00, @@ -136,7 +130,7 @@ const struct MenuItem gDeleteSaveConfirmMenuItems[3] = const struct UnkTextStruct2 gUnknown_80E7784 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x17, 0x00, 0x0F, 0x00, 0x05, 0x03, 0x03, 0x00, @@ -170,40 +164,40 @@ ALIGNED(4) const char load_screen_fill[] = "pksdir0"; void CreateLoadScreen(u32 currMenu) { - int iVar8; + int index; if (gLoadScreen == NULL) { gLoadScreen = MemoryAlloc(sizeof(struct LoadScreen),8); MemoryFill8((u8 *)gLoadScreen,0,sizeof(struct LoadScreen)); } gLoadScreen->currMenu = currMenu; - for(iVar8 = 0; iVar8 < 4; iVar8++){ - gLoadScreen->unk144[iVar8] = gUnknown_80E75F8; + for(index = 0; index < 4; index++){ + gLoadScreen->unk144[index] = gUnknown_80E75F8; } ResetUnusedInputStruct(); sub_800641C(gLoadScreen->unk144,1,1); - SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,0,&gUnknown_80E7610,gUnknown_203B378,0,6,0); + SetMenuItems(gLoadScreen->unk4,gLoadScreen->unk144,0,&gUnknown_80E7610,gUnknown_203B378,0,6,0); switch(gLoadScreen->currMenu){ case MENU_CONTINUE: if (IsQuickSave()) - SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C,gResumeQuicksaveMenuItems,0,6,0); + SetMenuItems(gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C,gResumeQuicksaveMenuItems,0,6,0); else - SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C,gResumeAdventureMenuItems,0,6,0); + SetMenuItems(gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C,gResumeAdventureMenuItems,0,6,0); break; case MENU_AWAITING_RESCUE: - SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C,gQuitWaitingRescueMenuItems,0,6,0); + SetMenuItems(gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C,gQuitWaitingRescueMenuItems,0,6,0); break; case MENU_DELETE_SAVE_PROMPT: - SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C,gDeleteSavePromptMenuItems,0,6,0); + SetMenuItems(gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C,gDeleteSavePromptMenuItems,0,6,0); break; case MENU_DELETE_SAVE_CONFIRM: - SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C, gDeleteSaveConfirmMenuItems,0,6,0); + SetMenuItems(gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C, gDeleteSaveConfirmMenuItems,0,6,0); break; } - SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,2,&gUnknown_80E7784,gLoadScreenYesNoMenu,1,2,0); - sub_8035CF4(&gLoadScreen->unk4,0,0); - sub_8035CF4(&gLoadScreen->unk4,1,0); - sub_8035CF4(&gLoadScreen->unk4,2,1); + SetMenuItems(gLoadScreen->unk4,gLoadScreen->unk144,2,&gUnknown_80E7784,gLoadScreenYesNoMenu,1,2,0); + sub_8035CF4(gLoadScreen->unk4,0,0); + sub_8035CF4(gLoadScreen->unk4,1,0); + sub_8035CF4(gLoadScreen->unk4,2,1); DrawLoadScreenText(); } @@ -225,9 +219,9 @@ u32 UpdateLoadScreenMenu(void) nextMenu = MENU_NO_SCREEN_CHANGE; menuAction = 4; - sub_8012FD8(&gLoadScreen->unk54); - if (sub_8012FD8(&gLoadScreen->unkA4) == '\0') { - sub_8013114(&gLoadScreen->unkA4,&menuAction); + sub_8012FD8(&gLoadScreen->unk4[1]); + if (sub_8012FD8(&gLoadScreen->unk4[2]) == '\0') { + sub_8013114(&gLoadScreen->unk4[2],&menuAction); } switch(menuAction) diff --git a/src/luminous_cave.c b/src/luminous_cave.c index 44ef0cb5b..5ba77795e 100644 --- a/src/luminous_cave.c +++ b/src/luminous_cave.c @@ -9,6 +9,7 @@ #include "random.h" #include "text.h" #include "team_inventory.h" +#include "menu_input.h" struct unkStruct_203B2B0 { @@ -32,8 +33,8 @@ struct unkStruct_203B2B0 u32 unk30; struct MenuItem unk34[8]; u16 unk74[0x8]; - u32 unk84; - u8 fill88[0x104 - 0x88]; + struct MenuStruct unk84; + u8 fillD4[0x104 - 0xD4]; struct OpenedFile *unk104; u8 *unk108; u16 unk10C; @@ -111,7 +112,6 @@ extern void nullsub_104(); void sub_8024DBC(void); void sub_8024E30(void); void sub_801AEE4(u32, u32); -extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32); void sub_808F734(struct PokemonStruct *, s16); void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size); u32 sub_801602C(u32 r0, u8 *name); @@ -121,8 +121,6 @@ extern s32 sub_801A8AC(void); extern void sub_8099690(u32); extern void sub_801A928(void); extern void PlayMenuSoundEffect(u32); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, u32 *); extern u32 sub_801B410(void); extern void sub_801B450(void); extern u32 sub_8016080(void); diff --git a/src/mailbox.c b/src/mailbox.c index 0c5d537e9..490341886 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -5,6 +5,7 @@ #include "input.h" #include "mailbox.h" #include "wonder_mail.h" +#include "menu_input.h" extern void HandleMailboxMenu(void); @@ -23,7 +24,7 @@ extern void sub_802E1AC(void); const struct UnkTextStruct2 gUnknown_80E0284 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -33,7 +34,7 @@ const struct UnkTextStruct2 gUnknown_80E0284 = const struct UnkTextStruct2 gUnknown_80E029C = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x03, 0x00, 0x03, 0x00, 0x07, 0x03, 0x03, 0x00, @@ -43,7 +44,7 @@ const struct UnkTextStruct2 gUnknown_80E029C = const struct UnkTextStruct2 gUnknown_80E02B4 = { 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x00, 0x06, 0x00, 0x07, 0x03, 0x03, 0x00, @@ -53,7 +54,7 @@ const struct UnkTextStruct2 gUnknown_80E02B4 = const struct UnkTextStruct2 gUnknown_80E02CC = { 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x00, 0x0f, 0x00, 0x06, 0x03, 0x03, 0x00, @@ -71,11 +72,9 @@ static const u8 mailbox_fill[] = "pksdir0"; extern struct unkStruct_203B304 *gUnknown_203B304; extern void sub_802E088(u32); -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern void CreateMailboxMenu(void); extern void CreateMailActionMenu(void); -extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32); extern void sub_802BD14(u32, u32, u32); extern void sub_802BE94(u32); extern void CreateMailMenu(void); @@ -172,7 +171,7 @@ void sub_802E0A0(void) CreateMailActionMenu(); gUnknown_203B304->unk10C[2] = gUnknown_80E02B4; sub_8012CAC(&gUnknown_203B304->unk10C[2], gUnknown_203B304->unkBC); - gUnknown_203B304->unk10C[2].unk0c = 6; + gUnknown_203B304->unk10C[2].unkC = 6; gUnknown_203B304->unk10C[3] = gUnknown_80E02CC; break; default: diff --git a/src/mailbox_1.c b/src/mailbox_1.c index ec9f0883e..e42d7d45d 100644 --- a/src/mailbox_1.c +++ b/src/mailbox_1.c @@ -5,6 +5,7 @@ #include "input.h" #include "mailbox.h" #include "wonder_mail.h" +#include "menu_input.h" extern struct unkStruct_203B304 *gUnknown_203B304; @@ -12,7 +13,6 @@ extern u8 gMailAccepted[]; extern u8 gUnknown_80E0324[]; extern void xxx_call_draw_string(s32 x, u32 y, u8 *, u32 , u32); -extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); @@ -27,8 +27,6 @@ extern u32 sub_802DEE0(void); extern void sub_802DF24(void); extern struct WonderMail *GetMailboxSlotInfo(u8); extern u8 HasNoMailinMailbox(void); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, s32 *); extern u32 sub_802BDEC(u32); extern void sub_8096A78(struct WonderMail *); extern void sub_8096C80(void); @@ -42,7 +40,6 @@ extern void sub_802BEDC(void); extern u8 sub_802BE74(void); extern u8 HasNoAcceptedJobs(void); extern u8 HasNoPKMNNews(void); -extern void sub_8012EA4(u32 *, u32); void HandleMailboxMenu(void) { diff --git a/src/main_menu.c b/src/main_menu.c index 8ca92435b..8973d35fe 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -2,6 +2,7 @@ #include "text.h" #include "menu.h" #include "input.h" +#include "menu_input.h" #include "adventure_log.h" #include "debug_menu.h" @@ -30,30 +31,11 @@ // Deletes the Save -struct unkStruct_Menu -{ - // size 0x50; - u8 fil0[0x4C]; - u8 unk4C; - u8 fill4D[0x50 - 0x4D]; -}; - struct unkStruct_203B34C { // size: 0x1A8 u32 unk0; - u32 unk4; - struct MenuItem *unk8; // Array of menu choices?? - u8 fillC[0x30 - 0xC]; - s16 menuIndex; - u8 fill32[0x54 - 0x32]; - - u32 unk54; - u8 fill58[0xA4 - 0x58]; - - u32 unkA4; - u32 unkA8; - u8 fillAC[0x144 - 0xAC]; + struct MenuStruct unk4[4]; struct UnkTextStruct2 unk144[4]; /* 0x1A4 */ u32 currMenuChoice; }; @@ -76,11 +58,7 @@ extern void sub_80370D4(void); extern void CleanWonderMailMenu(void); extern void sub_80383A8(void); extern void CleanSaveMenu(void); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, s32 *); extern u8 sub_803D0D8(); -extern void sub_8012D60(struct unkStruct_Menu *, const struct MenuItem *, u32, u32, u32, u32); -extern void sub_8012E04(struct unkStruct_Menu *, const struct MenuItem *, u32, u32, u32, u32); void CleanMainMenu(void); void DrawMainMenu(void); @@ -113,7 +91,7 @@ static const u8 sUnknown_80E6070[]; const struct UnkTextStruct2 gUnknown_80E59A8 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -124,7 +102,7 @@ static const char main_menu_fill[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80E59C8 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -133,7 +111,7 @@ const struct UnkTextStruct2 gUnknown_80E59C8 = { const struct UnkTextStruct2 gUnknown_80E59E0 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x02, 0x00, 0x0A, 0x03, 0x03, 0x00, @@ -149,7 +127,7 @@ const struct MenuItem gUnknown_80E59F8[] = const struct UnkTextStruct2 gUnknown_80E5A29 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x02, 0x00, 0x0A, 0x02, 0x02, 0x00, @@ -164,7 +142,7 @@ const struct MenuItem gUnknown_80E5A44[] = const struct UnkTextStruct2 gUnknown_80E5A60 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x02, 0x00, 0x0A, 0x08, 0x08, 0x00, @@ -173,7 +151,7 @@ const struct UnkTextStruct2 gUnknown_80E5A60 = { const struct UnkTextStruct2 gUnknown_80E5A78 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x02, 0x00, 0x0B, 0x09, 0x09, 0x00, @@ -203,7 +181,7 @@ const struct MenuItem gUnknown_80E5AFC[] = const struct UnkTextStruct2 gUnknown_80E5B34 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x02, 0x00, 0x0A, 0x08, 0x08, 0x00, @@ -233,7 +211,7 @@ const struct MenuItem gUnknown_80E5B8C[] = const struct UnkTextStruct2 gUnknown_80E5BC4 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x02, 0x00, 0x0A, 0x08, 0x08, 0x00, @@ -263,7 +241,7 @@ const struct MenuItem gUnknown_80E5C18[] = const struct UnkTextStruct2 gUnknown_80E5C50 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x02, 0x00, 0x0A, 0x03, 0x03, 0x00, @@ -286,7 +264,7 @@ const struct MenuItem gUnknown_80E5C9C[] = const struct UnkTextStruct2 gUnknown_80E5CB4 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x00, 0x0F, 0x00, 0x1A, 0x03, 0x03, 0x00, @@ -645,18 +623,18 @@ void sub_8035C1C(void) } void -SetMenuItems(struct unkStruct_Menu *param_1, struct UnkTextStruct2 *unkData, int param_3, const struct UnkTextStruct2 *param_4, const struct MenuItem *param_5, char param_6 ,u32 param_7, u32 unused_8) +SetMenuItems(struct MenuStruct *param_1, struct UnkTextStruct2 *unkData, s32 index, const struct UnkTextStruct2 *param_4, const struct MenuItem *menuItems, u8 param_6 ,u32 param_7, u32 unused_8) { - unkData[param_3] = *param_4; + unkData[index] = *param_4; ResetUnusedInputStruct(); sub_800641C(unkData,1,1); - if (param_6 != '\0') { - sub_8012D60(¶m_1[param_3],param_5,0,0,param_7,param_3); + if (param_6 != 0) { + sub_8012D60(¶m_1[index],menuItems,0,0,param_7,index); } else { - sub_8012E04(¶m_1[param_3],param_5,0,0,0,param_3); + sub_8012E04(¶m_1[index],menuItems,0,0,0,index); } - param_1[param_3].unk4C = 1; + param_1[index].unk4C = TRUE; } void sub_8035CC0(struct UnkTextStruct2 *dataArray, u32 index) @@ -667,27 +645,12 @@ void sub_8035CC0(struct UnkTextStruct2 *dataArray, u32 index) sub_800641C(dataArray, 1, 1); } -NAKED -void sub_8035CF4(void * Menu, u32 index, u8 r2) -{ - asm_unified("\tpush {lr}\n" - "\tadds r3, r0, 0\n" - "\tlsls r0, r1, 2\n" - "\tadds r0, r1\n" - "\tlsls r0, 4\n" - "\tadds r0, r3\n" - "\tadds r1, r0, 0\n" - "\tadds r1, 0x4C\n" - "\tstrb r2, [r1]\n" - "\tadds r2, r0, 0\n" - "\tadds r2, 0x4D\n" - "\tmovs r1, 0x1\n" - "\tstrb r1, [r2]\n" - "\tsubs r1, 0x2\n" - "\tstr r1, [r0, 0x48]\n" - "\tbl sub_8012EBC\n" - "\tpop {r0}\n" - "\tbx r0"); +void sub_8035CF4(struct MenuStruct * Menu, u32 index, bool8 r2) + { + Menu[index].unk4C = r2; + Menu[index].unk4D = 1; + Menu[index].menuAction = -1; + sub_8012EBC(&Menu[index]); } void sub_8035D1C(void) @@ -814,10 +777,10 @@ void DrawMainMenu(void) if(SetMainMenuText()) { - sub_8035CF4(&gUnknown_203B34C->unk4,2,0); + sub_8035CF4(gUnknown_203B34C->unk4,2,0); } - sub_8035CF4(&gUnknown_203B34C->unk4,0,1); + sub_8035CF4(gUnknown_203B34C->unk4,0,1); gUnknown_203B34C->unk0 = 1; } @@ -838,14 +801,14 @@ u32 UpdateMainMenu(void) switch(gUnknown_203B34C->unk0) { case 1: - sub_8012FD8(&gUnknown_203B34C->unkA4); - if(!sub_8012FD8(&gUnknown_203B34C->unk4)) - sub_8013114(&gUnknown_203B34C->unk4, &nextMenu); + sub_8012FD8(&gUnknown_203B34C->unk4[2]); + if(!sub_8012FD8(gUnknown_203B34C->unk4)) + sub_8013114(gUnknown_203B34C->unk4, &nextMenu); if(SetMainMenuText()) { - sub_8035CF4(&gUnknown_203B34C->unk4, 0, 1); - sub_8035CF4(&gUnknown_203B34C->unk4, 2, 0); + sub_8035CF4(gUnknown_203B34C->unk4, 0, 1); + sub_8035CF4(gUnknown_203B34C->unk4, 2, 0); } switch(nextMenu) { @@ -856,8 +819,8 @@ u32 UpdateMainMenu(void) gUnknown_203B34C->unk0 = 1; nextMenu = MENU_NO_SCREEN_CHANGE; ResetUnusedInputStruct(); - sub_8035CF4(&gUnknown_203B34C->unk4, 0, 1); - sub_8035CF4(&gUnknown_203B34C->unk4, 2, 0); + sub_8035CF4(gUnknown_203B34C->unk4, 0, 1); + sub_8035CF4(gUnknown_203B34C->unk4, 2, 0); break; case MENU_TRADE_ITEMS: sub_8035DA0(); @@ -880,8 +843,8 @@ u32 UpdateMainMenu(void) } break; case 0xC: - if(!sub_8012FD8(&gUnknown_203B34C->unk54)) - sub_8013114(&gUnknown_203B34C->unk54, &nextMenu); + if(!sub_8012FD8(&gUnknown_203B34C->unk4[1])) + sub_8013114(&gUnknown_203B34C->unk4[1], &nextMenu); switch(nextMenu) { case 0xffdd: @@ -914,11 +877,11 @@ u32 UpdateMainMenu(void) bool8 SetMainMenuText(void) { u32 menuChoice; - struct MenuItem *preload; + const struct MenuItem *preload; // Have to load the pointer before the index - preload = gUnknown_203B34C->unk8; - menuChoice = preload[gUnknown_203B34C->menuIndex].menuAction; // chosen menu action? + preload = gUnknown_203B34C->unk4[0].menuItems; + menuChoice = preload[gUnknown_203B34C->unk4[0].menuIndex].menuAction; // chosen menu action? if (gUnknown_203B34C->currMenuChoice == menuChoice) { return FALSE; } @@ -929,50 +892,50 @@ bool8 SetMainMenuText(void) switch(menuChoice) { case MENU_WIRELESS_COMMS: // Using wireless communications, you can go on an adventure to unknown worlds. - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E6030,0,0,0); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E6030,0,0,0); break; case MENU_WONDER_MAIL: // Using passwords, you can receive Wonder Mail - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F80,0,0,0); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F80,0,0,0); break; case MENU_AWAITING_RESCUE: // You are awaiting resuce by a friend // You can give up waiting for rescue - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F1C,0,0,0); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F1C,0,0,0); break; case MENU_NEW_GAME: // Start an entirely new adventure - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5CCC,0,0,0); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5CCC,0,0,0); break; case MENU_CONTINUE: // Resume your adventure from where you last saved - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DA0,0,0,0); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DA0,0,0,0); break; case MENU_DELETE_SAVE_PROMPT: // This will delete your saved game data. // Beware! This will delete it forever - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DF0,0,0,0); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DF0,0,0,0); break; case MENU_ADVENTURE_LOG: // Check your career as an adventurer - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D0C,0,0,0); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D0C,0,0,0); break; case MENU_FRIEND_RESCUE: // Using a Game Link cable or passwords, friends may rescue each other - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5E5C,0,0,0); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5E5C,0,0,0); break; case MENU_TRADE_ITEMS: // Using a Game Link cable you can trade stored items with a friend - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5EBC,0,0,0); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5EBC,0,0,0); break; case MENU_DUAL_SLOT: // Using Dual Slot function, you can receive teams from your friends - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5FCC,0,0,0); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5FCC,0,0,0); break; case MENU_DEBUG: // This is the Debug Mode. // It won't be in the release version - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D48,0,0,0); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D48,0,0,0); break; default: break; @@ -986,9 +949,9 @@ void sub_803623C(void) SetMainMenuItems(); gUnknown_203B34C->currMenuChoice = -1; if (SetMainMenuText()) { - sub_8035CF4(&gUnknown_203B34C->unk4,2,0); + sub_8035CF4(gUnknown_203B34C->unk4,2,0); } - sub_8035CF4(&gUnknown_203B34C->unk4,0,1); + sub_8035CF4(gUnknown_203B34C->unk4,0,1); } void SetMainMenuItems(void) @@ -1003,7 +966,7 @@ void SetMainMenuItems(void) // Friend Rescue // Trade Items // Wonder Mail - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5C18,1,gUnknown_203B350,1); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5C18,1,gUnknown_203B350,1); } else { // Revive Team @@ -1011,7 +974,7 @@ void SetMainMenuItems(void) // Adventure Log // Friend Rescue // Trade Items - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5BC4,gUnknown_80E5BDC,1,gUnknown_203B350,1); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5BC4,gUnknown_80E5BDC,1,gUnknown_203B350,1); } } else { @@ -1022,7 +985,7 @@ void SetMainMenuItems(void) // Friend Rescue // Trade Items // Wonder Mail - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5AFC,1,gUnknown_203B350,1); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5AFC,1,gUnknown_203B350,1); } else { // Continue @@ -1030,7 +993,7 @@ void SetMainMenuItems(void) // Adventure Log // Friend Rescue // Trade Items - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A60,gUnknown_80E5A90,1,gUnknown_203B350,1); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A60,gUnknown_80E5A90,1,gUnknown_203B350,1); } } } @@ -1042,7 +1005,7 @@ void SetMainMenuItems(void) // Friend Rescue // Trade Items // Wonder Mail - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5B8C,1,gUnknown_203B350,1); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5B8C,1,gUnknown_203B350,1); } else { // Awaiting Rescue @@ -1050,7 +1013,7 @@ void SetMainMenuItems(void) // Adventure Log // Friend Rescue // Trade Items - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5B34,gUnknown_80E5B4C,1,gUnknown_203B350,1); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5B34,gUnknown_80E5B4C,1,gUnknown_203B350,1); } } } @@ -1058,7 +1021,7 @@ void SetMainMenuItems(void) { // New Game // Adventure Log - SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E59E0,gUnknown_80E59F8,1,gUnknown_203B350,1); + SetMenuItems(gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E59E0,gUnknown_80E59F8,1,gUnknown_203B350,1); } } diff --git a/src/makuhita_dojo.c b/src/makuhita_dojo.c index b34ccc3ee..b98f3a5ff 100644 --- a/src/makuhita_dojo.c +++ b/src/makuhita_dojo.c @@ -17,7 +17,7 @@ ALIGNED(4) const u8 gUnknown_80E0754[] = {0x83, 0xC0}; static const u8 makuhita_dojo_fill[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80E0760 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/src/makuhita_dojo_1.c b/src/makuhita_dojo_1.c index 8a849f9f9..4be0926a8 100644 --- a/src/makuhita_dojo_1.c +++ b/src/makuhita_dojo_1.c @@ -1,6 +1,7 @@ #include "global.h" #include "constants/colors.h" #include "constants/dungeon.h" +#include "constants/input.h" #include "code_800D090.h" #include "dungeon.h" #include "input.h" @@ -8,6 +9,7 @@ #include "text.h" #include "menu.h" #include "makuhita_dojo.h" +#include "menu_input.h" struct unkStruct_203B31C { @@ -35,7 +37,7 @@ static const u8 makuhita_dojo_fill[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80E07EC = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -43,7 +45,7 @@ const struct UnkTextStruct2 gUnknown_80E07EC = { }; const struct UnkTextStruct2 gUnknown_80E0804 = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x0E, 0x0E, 0x0E, 0x00, @@ -65,7 +67,6 @@ extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32); -extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); extern u8 sub_80A2740(s32 r0); extern s16 sub_80A2668(u32 r0); extern s32 sub_8013800(void *, u32); @@ -80,7 +81,6 @@ extern u8 sub_80138B8(void *, u32); extern void PlayMenuSoundEffect(u32); extern s32 GetKeyPress(void *); extern void sub_8013660(void *); -extern void sub_8012D08(void *, u32); extern void sub_8013818(void *, u32, u32, u32); extern void sub_803053C(void); extern u8 sub_80306A4(void); @@ -215,10 +215,10 @@ u32 sub_80303AC(u8 param_1) } switch(GetKeyPress(&gUnknown_203B31C->unk30)) { - case 2: + case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; - case 1: + case INPUT_A_BUTTON: PlayMenuSoundEffect(0); return 3; default: diff --git a/src/memory_mid.c b/src/memory_mid.c index 546820afa..3bb1e5194 100644 --- a/src/memory_mid.c +++ b/src/memory_mid.c @@ -54,9 +54,9 @@ error: heap,size,atb,group); } -void *MemoryAlloc(s32 size, s32 b) +void *MemoryAlloc(s32 size, s32 group) { - DoAlloc(&gMainHeapDescriptor, size, b); + DoAlloc(&gMainHeapDescriptor, size, group); } void MemoryFree(void *a) diff --git a/src/menu_input.c b/src/menu_input.c new file mode 100644 index 000000000..979aee9f5 --- /dev/null +++ b/src/menu_input.c @@ -0,0 +1,459 @@ +#include "global.h" +#include "constants/colors.h" +#include "constants/input.h" +#include "menu.h" +#include "text.h" +#include "util.h" +#include "code_800D090.h" +#include "menu_input.h" + +struct unkChar +{ + u32 unk0; + s16 unk4; + s16 unk6; +}; +extern struct UnkTextStruct1 gUnknown_2027370[4]; +extern u8 gUnknown_80D4828[]; + +extern void PlayMenuSoundEffect(u32); +extern s32 GetKeyPress(u32 *); +extern u32 sub_80137A8(u32 *); +void MoveMenuCursorUp(u32 *); +void MoveMenuCursorDown(u32 *); +extern void sub_80073B8(u32); +extern s32 sub_8008ED0(const u8 *); +extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32); +extern s32 sub_8013800(u32 *, s32); +extern void sub_80073E0(u32); +extern void sub_8013660(u32 *); +void AddMenuCursorSprite(void *); +void sub_8012EBC(struct MenuStruct *param_1); +extern void sub_8013134(u32 *, u32, u32); +extern void sub_80137B0(u32 *, u32); +extern s16 sub_8009614(u32, u32); +extern u32 ReturnIntFromChar2(u8); +struct unkChar *GetCharacter(u32); +extern void xxx_call_draw_char(u32, u32, u32, u32, u32); + +const u32 gDefaultMenuTextColors[] = { COLOR_WHITE_2, COLOR_RED, COLOR_RED }; + +void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 param_5, u32 param_6) +{ + s32 iVar1; + u32 uVar2; + struct unkChar *iVar3; + s32 counter; + s32 *piVar3; + s32 *piVar4; + s32 total_x; + s32 decimal [8]; + + total_x = 0; + ConvertToDecimal(decimal,n,len); + counter = len - 1; + if (0 < counter) { + piVar3 = &decimal[counter]; + if(*piVar3 == 0) + { + do { + *piVar3 = 0xff; + piVar3--; + counter--; + if (counter <= 0) break; + } while(*piVar3 == 0); + } + } + + counter = 0; + if ((counter < len) && (decimal[0] != 0xFF)) { + piVar4 = &decimal[0]; + do { + iVar1 = *piVar4; + piVar4++; + uVar2 = ReturnIntFromChar2(iVar1 + 0x30); + iVar3 = GetCharacter(uVar2); + total_x += iVar3->unk6; + xxx_call_draw_char(x - total_x,y,uVar2,param_5,param_6); + counter++; + if (counter >= len) { + break; + } + } while (*piVar4 != 0xff); + } +} + +void sub_8012C60(u32 x,u32 y,u32 param_3,u32 param_4,u32 param_5) +{ + u32 add_x; + struct unkChar *iVar3; + u32 uVar2; + + uVar2 = ReturnIntFromChar2(param_3); + iVar3 = GetCharacter(uVar2); + if (iVar3->unk6 < 0xc) { + add_x = ((0xc - iVar3->unk6) / 2); + } + else { + add_x = 0; + } + xxx_call_draw_char(x + add_x,y,uVar2,param_4,param_5); +} + +void sub_8012CAC(struct UnkTextStruct2 *param_1, const struct MenuItem *param_2) +{ + s16 length; + int r5; + int r6; + int r7; + s32 iVar4; +#ifndef NONMATCHING + register s32 r0 asm("r0"); +#else + s32 r0; +#endif + + r7 = 0; + r6 = 0; + if (param_2->text != NULL) { + r5 = 0x10000; + r0 = r5; + do { + r0 = r5; + r5 = r5 + 0x10000; + r7 = r0 >> 0x10; + length = sub_8008ED0(param_2->text); + if (length > r6) { + r6 = length; + } + param_2++; + } while (param_2->text != NULL); + } + if (r6 < 0) + iVar4 = r6 + 7; + else + iVar4 = r6; + param_1->unkC = (iVar4 >> 3) + 2; + sub_8012D08(param_1, r7); +} + +NAKED +void sub_8012D08(struct UnkTextStruct2 *param_1, s32 param_2) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tadds r4, r0, 0\n" + "\tadds r0, r1, 0\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tlsls r0, 16\n" + "\tasrs r1, r0, 16\n" + "\tldr r0, [r4, 0x4]\n" + "\tcmp r0, 0x6\n" + "\tbne _08012D24\n" + "\tadds r0, r1, 0x2\n" + "\tlsls r0, 16\n" + "\tasrs r1, r0, 16\n" +"_08012D24:\n" + "\tlsls r0, r1, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r4, 0xE]\n" + "\tstrh r0, [r4, 0x10]\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0"); +} + +// https://decomp.me/scratch/QadfW (200 - 90% matched) - Seth +NAKED +void sub_8012D34(struct UnkTextStruct2 *param_1, s32 param_2) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tadds r4, r0, 0\n" + "\tadds r0, r1, 0\n" + "\tmovs r1, 0x18\n" + "\tbl sub_8009614\n" + "\tlsls r0, 16\n" + "\tasrs r1, r0, 16\n" + "\tldr r0, [r4, 0x4]\n" + "\tcmp r0, 0x6\n" + "\tbne _08012D50\n" + "\tadds r0, r1, 0x2\n" + "\tlsls r0, 16\n" + "\tasrs r1, r0, 16\n" +"_08012D50:\n" + "\tlsls r0, r1, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r4, 0xE]\n" + "\tstrh r0, [r4, 0x10]\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0"); +} + +void sub_8012D60(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 *colorArray,u16 *param_4,s32 param_5, + s32 index) +{ + const u8 *textPtr; + s32 counter; + s32 menuIndex; + s32 iVar1; + + counter = 0; + menuIndex = -1; + iVar1 = 0; + param_1->index = index; + param_1->menuItems = menuItems; + param_1->menuTextColorArray = colorArray; + if (colorArray == NULL) { + param_1->menuTextColorArray = gDefaultMenuTextColors; + } + param_1->unkC = param_4; + textPtr = menuItems->text; + if(textPtr) + { + while (textPtr != 0) { + if ((0 <= param_5) && (param_5 == menuItems->menuAction)) { + menuIndex = counter; + } + if (*menuItems->text == '*') { + iVar1 = counter; + } + menuItems++; + counter++; + textPtr = menuItems->text; + } + } + if (menuIndex < 0) { + menuIndex = iVar1; + } + sub_8013134(¶m_1->unk14,counter,index); + param_1->menuIndex = menuIndex; + sub_80137B0(¶m_1->unk14,0); + param_1->unk4C = TRUE; + param_1->unk4D = TRUE; + param_1->unk4E = TRUE; + param_1->menuAction = -1; +} + +void sub_8012E04(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 *colorArray,u16 *param_4,s32 param_5, + s32 index) +{ + const u8 *textPtr; + s32 counter; + const struct MenuItem *menuItemPtr; + s32 iVar1; + s32 menuIndex; + + counter = 0; + menuIndex = -1; + iVar1 = 0; + textPtr = menuItems->text; + if (textPtr) { + menuItemPtr = menuItems; + while (textPtr != NULL) { + if ((0 <= param_5) && (param_5 == menuItemPtr->menuAction)) { + menuIndex = counter; + } + if (*menuItemPtr->text == '*') { + iVar1 = counter; + } + menuItemPtr++; + counter++; + textPtr = menuItemPtr->text; + } + } + + if (menuIndex < 0) { + menuIndex = iVar1; + } + sub_8013134(¶m_1->unk14,counter,index); + param_1->menuIndex = menuIndex; + sub_80137B0(¶m_1->unk14,0); + param_1->index = index; + param_1->menuTextColorArray = colorArray; + if (colorArray == NULL) { + param_1->menuTextColorArray = gDefaultMenuTextColors; + } + param_1->unkC = param_4; + param_1->menuItems = menuItems; + param_1->unk4E = FALSE; + param_1->unk4C = TRUE; + param_1->unk4D = TRUE; + param_1->menuAction = -1; +} + +void sub_8012EA4(struct MenuStruct *param_1, bool8 r1) +{ + param_1->unk4C = r1; + param_1->unk4D = TRUE; + sub_8012EBC(param_1); +} + +void sub_8012EBC(struct MenuStruct *param_1) +{ + s32 x; + s32 y; + u32 color; + const u8 *textPtr; + const struct MenuItem *menuItemsPtr; + u16 *_puVar2; + const u32 *colorArray; + s32 counter; + s32 index; + struct UnkTextStruct2 textStack[4]; + u8 buffer [256]; + struct UnkTextStruct1 *ptr_text; + struct UnkTextStruct2 *ptr_text2; + + if (param_1->unk4D) { + sub_80073B8(param_1->index); + index = param_1->index; + ptr_text = &gUnknown_2027370[index]; + if ((ptr_text->unkC) == 6) { + ptr_text2 = &textStack[index]; + sub_8006518(textStack); + x = sub_8008ED0(param_1->unk0); + xxx_format_and_draw((((ptr_text2->unk14[2]) * 8 - x) /2) + 8, + 0,*(u8 **)param_1, param_1->index, 0); + } + colorArray = param_1->menuTextColorArray; + menuItemsPtr = param_1->menuItems; + _puVar2 = param_1->unkC; + counter = 0; + if (menuItemsPtr->text != NULL) { + do { + textPtr = menuItemsPtr->text; + if (*textPtr == '*') { + textPtr++; + } + if (_puVar2 != NULL) { + color = colorArray[*_puVar2]; + _puVar2++; + } + else if (menuItemsPtr->menuAction < 0) { + // Color the action red + color = colorArray[1]; + } + else { + // Use the default white + color = colorArray[0]; + } + sprintfStatic(buffer,gUnknown_80D4828,color,textPtr); + y = sub_8013800(¶m_1->unk14,counter); + xxx_format_and_draw(8,y,buffer,param_1->index,0); + menuItemsPtr++; + counter++; + } while (menuItemsPtr->text != NULL); + } + sub_80073E0(param_1->index); + param_1->unk4D = FALSE; + } + if (param_1->unk4E) { + if (param_1->unk4C) { + AddMenuCursorSprite(¶m_1->unk14); + } + else { + sub_8013660(¶m_1->unk14); + } + } +} + +bool8 sub_8012FD8(struct MenuStruct *param_1) +{ + u32 prevMenuIndex; + s32 index; + const struct MenuItem *item; + + prevMenuIndex = param_1->menuIndex; + if (param_1->unk4C) { + switch(GetKeyPress(¶m_1->unk14)) + { + case INPUT_DPAD_DOWN: + MoveMenuCursorDown(¶m_1->unk14); + if (prevMenuIndex != param_1->menuIndex) { + PlayMenuSoundEffect(3); + } + break; + case INPUT_DPAD_UP: + MoveMenuCursorUp(¶m_1->unk14); + if (prevMenuIndex != param_1->menuIndex) { + PlayMenuSoundEffect(3); + } + break; + case INPUT_A_BUTTON: + index = sub_80137A8(¶m_1->unk14); + item = ¶m_1->menuItems[index]; + if ((-1 < item->menuAction) && + ((param_1->unkC == NULL || (param_1->unkC[index] != 1)))) { + param_1->menuAction = item->menuAction; + ++param_1; --param_1; + param_1->unk4C = FALSE; + param_1->unk38 = 0; + } + else + { + PlayMenuSoundEffect(2); + break; + } + if ((param_1->unkC != NULL) && (param_1->unkC[index] == 2)) { + PlayMenuSoundEffect(2); + } + else + PlayMenuSoundEffect(0); + break; + case INPUT_B_BUTTON: + if (-1 < param_1->menuItems[param_1->unk2E].menuAction) { + param_1->menuAction = param_1->menuItems[param_1->unk2E].menuAction; + param_1->unk4C = FALSE; + PlayMenuSoundEffect(1); + } + break; + } + } + sub_8012EBC(param_1); + return param_1->unk4C; +} + +bool8 sub_80130A8(struct MenuStruct *param_1) +{ + s32 index; + s32 menuAction; + const struct MenuItem *menuItem; + + if (param_1->unk4C) { + + switch(GetKeyPress(¶m_1->unk14)) + { + case INPUT_A_BUTTON: + index = sub_80137A8(¶m_1->unk14); + menuItem = ¶m_1->menuItems[index]; + param_1->menuAction = menuItem->menuAction; + param_1->unk4C = FALSE; + param_1->unk38 = 0; + PlayMenuSoundEffect(0); + break; + case INPUT_B_BUTTON: + if(menuAction = param_1->menuItems[param_1->unk2E].menuAction, -1 < menuAction) { + param_1->menuAction = menuAction; + param_1->unk4C = FALSE; + PlayMenuSoundEffect(0); + } + break; + } + } + sub_8012EBC(param_1); + return param_1->unk4C; +} + +bool8 sub_8013114(struct MenuStruct *param_1, s32 *menuAction) +{ + if(param_1->unk4C){ + return TRUE; + } + if (menuAction != NULL){ + *menuAction = param_1->menuAction; + } + return FALSE; +} diff --git a/src/more_input.c b/src/more_input.c index cd8dd5b4e..4d02d4bed 100644 --- a/src/more_input.c +++ b/src/more_input.c @@ -1,3 +1,4 @@ +#include "constants/input.h" #include "global.h" #include "input.h" @@ -34,19 +35,19 @@ u32 GetKeyPress(struct UnkInputStruct *r0) { if(r0->a_button != 0) { - return 1; + return INPUT_A_BUTTON; } if(r0->b_button != 0) { - return 2; + return INPUT_B_BUTTON; } if(r0->dpad_left != 0) { - return 9; + return INPUT_DPAD_LEFT; } if(r0->dpad_right != 0) { - return 10; + return INPUT_DPAD_RIGHT; } } return sub_8012AE8(); @@ -56,54 +57,54 @@ u32 sub_8012AE8(void) { if ((gRealInputs.held & R_BUTTON) != 0) { if ((gRealInputs.pressed & A_BUTTON) != 0) { - return 11; + return INPUT_R_A_BUTTONS; } if ((gRealInputs.repeated & DPAD_UP) != 0) { - return 12; + return INPUT_R_DPAD_UP_BUTTONS; } if ((gRealInputs.repeated & DPAD_DOWN) != 0) { - return 13; + return INPUT_R_DPAD_DOWN_BUTTONS; } if ((gRealInputs.repeated & DPAD_LEFT) != 0) { - return 14; + return INPUT_R_DPAD_LEFT_BUTTONS; } if ((gRealInputs.repeated & DPAD_RIGHT) != 0) { - return 15; + return INPUT_R_DPAD_RIGHT_BUTTONS; } if ((gRealInputs.repeated & R_BUTTON) != 0) { - return 6; + return INPUT_R_BUTTON; } } else { if ((gRealInputs.pressed & A_BUTTON) != 0) { - return 1; + return INPUT_A_BUTTON; } if ((gRealInputs.pressed & B_BUTTON) != 0) { - return 2; + return INPUT_B_BUTTON; } if ((gRealInputs.pressed & SELECT_BUTTON) != 0) { - return 3; + return INPUT_SELECT_BUTTON; } if ((gRealInputs.pressed & START_BUTTON) != 0) { - return 4; + return INPUT_START_BUTTON; } if ((gRealInputs.repeated & DPAD_UP) != 0) { - return 7; + return INPUT_DPAD_UP; } if ((gRealInputs.repeated & DPAD_DOWN) != 0) { - return 8; + return INPUT_DPAD_DOWN; } if ((gRealInputs.repeated & DPAD_LEFT) != 0) { - return 9; + return INPUT_DPAD_LEFT; } if ((gRealInputs.repeated & DPAD_RIGHT) != 0) { - return 10; + return INPUT_DPAD_RIGHT; } if ((gRealInputs.repeated & L_BUTTON) != 0) { - return 5; + return INPUT_L_BUTTON; } } - return 0; + return INPUT_NONE; } diff --git a/src/music.c b/src/music.c index cfa436294..469de1325 100644 --- a/src/music.c +++ b/src/music.c @@ -61,7 +61,7 @@ struct PMDMusicPlayer u16 unk0; u16 songIndex; u16 volume; - bool8 unk6; + bool8 isNotMaxVolume; }; extern struct PMDMusicPlayer gUnknown_3000FD8[8]; @@ -418,7 +418,7 @@ void InitMusic(void) musicPlayer->unk0 = 0; musicPlayer->songIndex = STOP_SOUND_EFFECT; musicPlayer->volume = 0; - musicPlayer->unk6 = FALSE; + musicPlayer->isNotMaxVolume = FALSE; } nullsub_19(); } @@ -677,11 +677,11 @@ void PlayFanfareSE(u16 songIndex, u16 volume) musicPlayer->songIndex = songIndex; if(volume == MAX_VOLUME) { - musicPlayer->unk6 = FALSE; + musicPlayer->isNotMaxVolume = FALSE; } else { - musicPlayer->unk6 = TRUE; + musicPlayer->isNotMaxVolume = TRUE; } musicPlayer->volume = volume; if (interrupt_flag2) @@ -739,7 +739,7 @@ void StopFanfareSE(u16 songIndex) musicPlayer1->unk0 = 0; musicPlayer1->songIndex = STOP_SOUND_EFFECT; musicPlayer1->volume = 0; - musicPlayer1->unk6 = FALSE; + musicPlayer1->isNotMaxVolume = FALSE; } if (cVar1 != '\0') { EnableInterrupts(); @@ -760,7 +760,7 @@ void StopFanfareSE(u16 songIndex) musicPlayer->unk0 = 0; musicPlayer->songIndex = STOP_SOUND_EFFECT; musicPlayer->volume = 0; - musicPlayer->unk6 = FALSE; + musicPlayer->isNotMaxVolume = FALSE; } if (cVar2 != '\0') { EnableInterrupts(); @@ -834,7 +834,7 @@ void FadeOutFanfareSE(u16 songIndex, u16 speed) musicPlayer1->unk0 = 0; musicPlayer1->songIndex = STOP_SOUND_EFFECT; musicPlayer1->volume = 0; - musicPlayer1->unk6 = FALSE; + musicPlayer1->isNotMaxVolume = FALSE; } } } @@ -856,7 +856,7 @@ void FadeOutFanfareSE(u16 songIndex, u16 speed) musicPlayer->unk0 = 0; musicPlayer->songIndex = STOP_SOUND_EFFECT; musicPlayer->volume = 0; - musicPlayer->unk6 = FALSE; + musicPlayer->isNotMaxVolume = FALSE; } } if (cVar2 != '\0') { @@ -1089,9 +1089,9 @@ void UpdateSound(void) case 2: if (IsMusicPlayerPlaying(musicPlayerIndex)) { - if(musicPlayer->unk6) + if(musicPlayer->isNotMaxVolume) { - musicPlayer->unk6 = FALSE; + musicPlayer->isNotMaxVolume = FALSE; m4aMPlayVolumeControl(gMPlayTable[musicPlayerIndex].info,0xff,musicPlayer->volume); } } @@ -1100,7 +1100,7 @@ void UpdateSound(void) musicPlayer->unk0 = 0; musicPlayer->songIndex = STOP_SOUND_EFFECT; musicPlayer->volume = 0; - musicPlayer->unk6 = FALSE; + musicPlayer->isNotMaxVolume = FALSE; } break; case 3: diff --git a/src/code_801DCC4.c b/src/options_menu.c similarity index 70% rename from src/code_801DCC4.c rename to src/options_menu.c index d5e331aab..522c986a0 100644 --- a/src/code_801DCC4.c +++ b/src/options_menu.c @@ -1,8 +1,10 @@ #include "global.h" +#include "constants/input.h" +#include "input.h" #include "memory.h" -#include "menu.h" -#include "game_options.h" #include "text.h" +#include "game_options.h" +#include "menu_input.h" struct unkStruct_203B25C { @@ -11,16 +13,63 @@ struct unkStruct_203B25C u32 chosenHintIndex; struct GameOptions newOptions; u32 unk18; - const char *unk1C; - u8 fill20[0x6C - 0x20]; + struct MenuStruct unk1C; struct MenuItem menuItems[8]; u16 unkAC[8]; struct UnkTextStruct2 unkBC[4]; }; +struct unkStruct_203B260 +{ + struct GameOptions *optionsMenu; + u32 unk4; + u8 unk8; + u8 fill9[0x10 - 0x9]; + u32 unk10; + u8 fill14[0x28 - 0x14]; + s16 unk28; + u8 fill2A[0x44 - 0x2A]; + u32 unk44; + struct UnkTextStruct2 * unk48; + struct UnkTextStruct2 unk4C[4]; +}; +struct unkStruct_203B260 *gUnknown_203B260; +extern struct GameOptions *gGameOptionsRef; +extern struct unkStruct_203B25C *gUnknown_203B25C; +extern const struct UnkTextStruct2 gUnknown_80DBFB0; +extern const struct UnkTextStruct2 gUnknown_80DBFCC; +extern const struct UnkTextStruct2 gUnknown_80DC020; +extern const struct UnkTextStruct2 gUnknown_80DC03C; + +extern u8 gWindowBGTitle[]; +extern u8 gUnknown_80DC064[]; +extern u8 gWindowBGGreenString[]; +extern u8 gWindowBGRedString[]; +extern u8 gWindowBGBlueString[]; + +extern const char gOthers_MenuOption[]; +extern const char gUnknown_80DBFEC[]; +extern const char gOthers_GameOptions[]; +extern const char gOthers_Hints[]; +extern const char *gUnknown_80D4920[]; +extern const char *gUnknown_80D4928[]; + +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void xxx_call_draw_string(u32, u32, u8 *, u32, u32); +extern s32 sub_8008ED0(u8 *); +extern s32 sub_8013800(u32 *, u32); +extern void sub_80078A4(u32, u32, u32, u32, u32); +extern u8 sub_80138B8(u32 *, u32); +void PlayMenuSoundEffect(u32); +s32 sub_8012AE8(void); +void sub_801317C(u32 *); +extern void sub_8013818(void *, u32, u32, u32); +void CreateOptionsMenu(void); +void nullsub_38(void); extern void sub_801DD6C(u32); - extern void HandleOthersMenu(); extern void sub_801E088(); extern void sub_801E0E0(); @@ -28,15 +77,12 @@ extern void sub_801E0FC(); extern void HandleChangeSettingsMenu(); extern void sub_801DD84(); extern void sub_801DED0(); -extern void sub_8012D60(const char **, struct MenuItem *, u32, u16 *, u32, u32); -extern u32 sub_801E198(struct GameOptions *); +extern bool8 sub_801E198(struct GameOptions *); extern void sub_8014248(const char *, u32, u32, struct MenuItem *, u32, u32, u32, u32, u32); extern void CreateHintDisplayScreen(u32); extern void sub_801E3F0(u32); extern void CreateHintSelectionScreen(u32); extern void CreateChangeSettingsConfirmMenu(void); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, u32 *); extern u32 sub_801E474(u32); extern u32 GetChosenHintIndex(void); extern void sub_801E54C(void); @@ -47,20 +93,6 @@ extern void sub_801E2C4(void); extern s32 sub_80144A4(s32 *); extern void SetWindowBGColor(void); extern void sub_8099690(u32); -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); - -extern struct GameOptions *gGameOptionsRef; -extern struct unkStruct_203B25C *gUnknown_203B25C; -extern const struct UnkTextStruct2 gUnknown_80DBFCC; -extern const struct UnkTextStruct2 gUnknown_80DBFB0; - -extern const char gOthers_MenuOption[]; -extern const char gUnknown_80DBFEC[]; -extern const char gOthers_GameOptions[]; -extern const char gOthers_Hints[]; -extern const char *gUnknown_80D4920[]; -extern const char *gUnknown_80D4928[]; - enum { @@ -350,7 +382,7 @@ void sub_801DED0(void) switch(gUnknown_203B25C->state) { case 0: case 1: - gUnknown_203B25C->unk1C = gOthers_MenuOption; + gUnknown_203B25C->unk1C.unk0 = gOthers_MenuOption; sub_8012D60(&gUnknown_203B25C->unk1C,gUnknown_203B25C->menuItems,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->unk18,0); break; case 3: @@ -420,8 +452,8 @@ void HandleOthersMenu(void) s32 menuAction; menuAction = 0; - if (sub_8012FD8((u32 *)&gUnknown_203B25C->unk1C) == '\0') { - sub_8013114((u32 *)&gUnknown_203B25C->unk1C,&menuAction); + if (sub_8012FD8(&gUnknown_203B25C->unk1C) == '\0') { + sub_8013114(&gUnknown_203B25C->unk1C,&menuAction); gUnknown_203B25C->unk18 = menuAction; } switch(menuAction) @@ -519,3 +551,123 @@ void HandleChangeSettingsMenu(void) } } } + +bool8 sub_801E198(struct GameOptions *optionsMenu) +{ + gUnknown_203B260 = MemoryAlloc(sizeof(struct unkStruct_203B260), 8); + gUnknown_203B260->optionsMenu = optionsMenu; + sub_801317C(&gUnknown_203B260->unk4); + gUnknown_203B260->unk44 = 0; + gUnknown_203B260->unk48 = &gUnknown_203B260->unk4C[0]; + sub_8006518(gUnknown_203B260->unk4C); + gUnknown_203B260->unk4C[gUnknown_203B260->unk44] = gUnknown_80DC03C; + sub_8012D08(gUnknown_203B260->unk48,1); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B260->unk4C,1,1); + sub_8013818(&gUnknown_203B260->unk10,1,1,gUnknown_203B260->unk44); + nullsub_38(); + CreateOptionsMenu(); + return TRUE; +} + +u32 sub_801E218(void) +{ + bool32 flag; + + flag = FALSE; + + switch(sub_8012AE8()) + { + case INPUT_B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case INPUT_A_BUTTON: + PlayMenuSoundEffect(0); + return 3; + case INPUT_DPAD_LEFT: + if (gUnknown_203B260->unk28 == 0) + { + if (gUnknown_203B260->optionsMenu->windowColor == WINDOW_COLOR_BLUE) { + gUnknown_203B260->optionsMenu->windowColor = WINDOW_COLOR_GREEN; + } + else { + gUnknown_203B260->optionsMenu->windowColor--; + } + PlayMenuSoundEffect(3); + flag = TRUE; + } + break; + case INPUT_DPAD_RIGHT: + if(gUnknown_203B260->unk28 == 0) + { + if (gUnknown_203B260->optionsMenu->windowColor > WINDOW_COLOR_RED) { + gUnknown_203B260->optionsMenu->windowColor = WINDOW_COLOR_BLUE; + } + else + gUnknown_203B260->optionsMenu->windowColor++; + PlayMenuSoundEffect(3); + flag = TRUE; + } + break; + } + + // == 1 is needed for matching + if ((sub_80138B8(&gUnknown_203B260->unk10,1) != 0) || (flag == TRUE)) { + nullsub_38(); + CreateOptionsMenu(); + return 1; + } + else { + return 0; + } +} + +void sub_801E2C4(void) +{ + if(gUnknown_203B260 != NULL) + { + gUnknown_203B260->unk4C[gUnknown_203B260->unk44] = gUnknown_80DC020; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B260->unk4C, 1, 1); + MemoryFree(gUnknown_203B260); + gUnknown_203B260 = NULL; + } +} + + +void nullsub_38(void) +{ + +} + +void CreateOptionsMenu(void) +{ + u32 length; + u32 y; + + sub_8008C54(gUnknown_203B260->unk44); + sub_80073B8(gUnknown_203B260->unk44); + xxx_call_draw_string(0x10,0,gWindowBGTitle,gUnknown_203B260->unk44,0); + y = sub_8013800(&gUnknown_203B260->unk10,0); + xxx_call_draw_string(8,y,gUnknown_80DC064,gUnknown_203B260->unk44,0); + + switch(gUnknown_203B260->optionsMenu->windowColor) + { + case WINDOW_COLOR_BLUE: + length = sub_8008ED0(gWindowBGBlueString); + sub_80078A4(gUnknown_203B260->unk44,gUnknown_203B260->optionsMenu->windowColor * 0x28 + 0x50, + y + 0xA,length,7); + break; + case WINDOW_COLOR_RED: + length = sub_8008ED0(gWindowBGRedString); + sub_80078A4(gUnknown_203B260->unk44,gUnknown_203B260->optionsMenu->windowColor * 0x28 + 0x50, + y + 0xA,length,7); + break; + case WINDOW_COLOR_GREEN: + length = sub_8008ED0(gWindowBGGreenString); + sub_80078A4(gUnknown_203B260->unk44,gUnknown_203B260->optionsMenu->windowColor * 0x28 + 0x50, + y + 0xA,length,7); + break; + } + sub_80073E0(gUnknown_203B260->unk44); +} diff --git a/src/other_menus.c b/src/other_menus.c index 845ede24b..851a4a4d6 100644 --- a/src/other_menus.c +++ b/src/other_menus.c @@ -7,6 +7,7 @@ #include "menu.h" #include "memory.h" #include "text.h" +#include "menu_input.h" struct unkStruct_203B35C { @@ -15,8 +16,7 @@ struct unkStruct_203B35C u32 linkStatus; u32 state; u8 fillC[0x1C - 0xC]; - u32 unk1C; - u8 fill20[0x15C - 0x20]; + struct MenuStruct unk1C[4]; struct UnkTextStruct2 unk15C[4]; u8 unk1BC[4]; u32 unk1C0[9]; @@ -56,19 +56,17 @@ extern struct MenuItem gUnknown_80E6D6C[]; extern void sub_8037400(void); extern void ResetSprites(u32); -extern void sub_8035CF4(u32 *,u32, u32); +extern void sub_8035CF4(struct MenuStruct *,u32, u32); extern void sub_80376CC(); extern void sub_8035CC0(struct UnkTextStruct2 *, u32); -extern u8 sub_80130A8(u32 *); -extern void sub_8013114(u32 *, u32 *); extern u32 sub_8037C10(u32); extern void sub_8037748(void); extern void sub_80371B8(void); extern void sub_8037900(void); extern void PlayMenuSoundEffect(u32); extern u32 sub_8037798(void); -extern void SetMenuItems(void *, void *, u32, struct UnkTextStruct2 *, struct MenuItem *, u32, u32, u32); +extern void SetMenuItems(struct MenuStruct *, void *, u32, struct UnkTextStruct2 *, struct MenuItem *, u32, u32, u32); extern void sub_8005838(u32, u32); extern void sub_80060EC(); extern void sub_800CB20(); @@ -107,9 +105,9 @@ void sub_8036FDC(s32 param_1) } ResetUnusedInputStruct(); sub_800641C(gUnknown_203B35C->unk15C,1,1); - SetMenuItems(&gUnknown_203B35C->unk1C,gUnknown_203B35C->unk15C,0,&gUnknown_80E6CD0,gUnknown_80E6CE8,0, + SetMenuItems(gUnknown_203B35C->unk1C,gUnknown_203B35C->unk15C,0,&gUnknown_80E6CD0,gUnknown_80E6CE8,0, 6,0); - sub_8035CF4(&gUnknown_203B35C->unk1C,0,1); + sub_8035CF4(gUnknown_203B35C->unk1C,0,1); sub_80376CC(); } #else @@ -250,8 +248,8 @@ u32 sub_80370F0(void) nextMenu = MENU_NO_SCREEN_CHANGE; switch(gUnknown_203B35C->state){ case 0: - if (sub_80130A8(&gUnknown_203B35C->unk1C) == '\0') { - sub_8013114(&gUnknown_203B35C->unk1C,&local_10); + if (sub_80130A8(&gUnknown_203B35C->unk1C[0]) == '\0') { + sub_8013114(&gUnknown_203B35C->unk1C[0],&local_10); } if (local_10 == 4) { sub_8037748(); @@ -271,8 +269,8 @@ u32 sub_80370F0(void) return 0x29; // TODO: what screen is this? } else { - if (sub_80130A8(&gUnknown_203B35C->unk1C) == '\0') { - sub_8013114(&gUnknown_203B35C->unk1C,&local_10); + if (sub_80130A8(&gUnknown_203B35C->unk1C[0]) == '\0') { + sub_8013114(&gUnknown_203B35C->unk1C[0],&local_10); } if (local_10 != 4) { PlayMenuSoundEffect(3); @@ -302,8 +300,8 @@ void sub_80371B8(void) // Success! // The item exchange with your friend // went through successfully - SetMenuItems(&gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, &gUnknown_80E6C50, gUnknown_80E6C68, 0, 6, 0); - sub_8035CF4(&gUnknown_203B35C->unk1C, 0, 1); + SetMenuItems(gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, &gUnknown_80E6C50, gUnknown_80E6C68, 0, 6, 0); + sub_8035CF4(gUnknown_203B35C->unk1C, 0, 1); } } else { @@ -362,8 +360,8 @@ void sub_80371B8(void) MenuItems = gUnknown_80E6C0C; break; } - SetMenuItems(&gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, puVar5, MenuItems, 0, 6, 0); - sub_8035CF4(&gUnknown_203B35C->unk1C, 0, 1); + SetMenuItems(gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, puVar5, MenuItems, 0, 6, 0); + sub_8035CF4(gUnknown_203B35C->unk1C, 0, 1); if ((gUnknown_203B35C->linkStatus != COMMS_GOOD) && (gUnknown_203B35C->unk0 == 0) && (item = sub_8035D94(), item->itemIndex.itemIndex_u8 != ITEM_NOTHING) && (item->numItems != 0)) { gTeamInventory_203B460->teamStorage[item->itemIndex.itemIndex_u8] += item->numItems; diff --git a/src/pelipper_board.c b/src/pelipper_board.c index 1df26c3c0..92c2b1b30 100644 --- a/src/pelipper_board.c +++ b/src/pelipper_board.c @@ -3,6 +3,7 @@ #include "text.h" #include "menu.h" #include "input.h" +#include "menu_input.h" // Guessing based off of 203B304 struct unkStruct_203B308 @@ -18,8 +19,7 @@ struct unkStruct_203B308 u8 fill51[0x64 - 0x51]; u32 unk64; u32 unk68; - u32 unk6C; - u8 fill70[0xBC - 0x70]; + struct MenuStruct unk6C; struct MenuItem unkBC[8]; u16 unkFC[8]; struct UnkTextStruct2 unk10C[4]; @@ -30,7 +30,7 @@ extern void SetPelipperBoardState(u32); const struct UnkTextStruct2 gUnknown_80E0330 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -40,7 +40,7 @@ const struct UnkTextStruct2 gUnknown_80E0330 = const struct UnkTextStruct2 gUnknown_80E0348 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x03, 0x00, 0x03, 0x00, 0x07, 0x03, 0x03, 0x00, @@ -50,7 +50,7 @@ const struct UnkTextStruct2 gUnknown_80E0348 = const struct UnkTextStruct2 gUnknown_80E0360 = { 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x00, 0x06, 0x00, 0x07, 0x03, 0x03, 0x00, @@ -60,7 +60,7 @@ const struct UnkTextStruct2 gUnknown_80E0360 = const struct UnkTextStruct2 gUnknown_80E0378 = { 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x00, 0x0f, 0x00, 0x06, 0x03, 0x03, 0x00, @@ -73,7 +73,6 @@ const u8 gPelipperBoard_Accepted[] = "Accepted"; const u8 gPelipperStatusSlash[] = "/"; static const u8 gPelipperfill[] = "pksdir0"; -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern void sub_802ECB4(void); extern void nullsub_134(void); extern void sub_802ED4C(void); @@ -85,7 +84,6 @@ extern void sub_802EA58(void); extern void CreatePelipperBoardMenu(void); extern void sub_802EC10(void); -extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32); extern void sub_802C10C(u32, u32, u32); extern void sub_802C28C(u32); extern void sub_802C39C(void); @@ -178,7 +176,7 @@ void sub_802E94C(void) sub_802EC10(); gUnknown_203B308->unk10C[2] = gUnknown_80E0360; sub_8012CAC(&gUnknown_203B308->unk10C[2], gUnknown_203B308->unkBC); - gUnknown_203B308->unk10C[2].unk0c = 6; + gUnknown_203B308->unk10C[2].unkC = 6; gUnknown_203B308->unk10C[3] = gUnknown_80E0378; break; default: diff --git a/src/pelipper_board_1.c b/src/pelipper_board_1.c index 011b8c8b7..74b9d3ff8 100644 --- a/src/pelipper_board_1.c +++ b/src/pelipper_board_1.c @@ -7,6 +7,7 @@ #include "text.h" #include "team_inventory.h" #include "wonder_mail.h" +#include "menu_input.h" struct unkStruct_203B308 { @@ -21,8 +22,7 @@ struct unkStruct_203B308 u8 fill51[0x64 - 0x51]; u32 unk64; u32 unk68; - u32 unk6C; - u8 fill70[0xBC - 0x70]; + struct MenuStruct unk6C; struct MenuItem unkBC[8]; u16 unkFC[8]; struct UnkTextStruct2 unk10C[4]; @@ -32,7 +32,6 @@ extern struct unkStruct_203B308 *gUnknown_203B308; extern u8 gPelipperBoard_Accepted[]; extern u8 gPelipperStatusSlash[]; extern void xxx_call_draw_string(s32 x, u32 y, u8 *, u32 , u32); -extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); @@ -48,14 +47,11 @@ extern void sub_8096A78(struct WonderMail*); extern void ResetPelipperBoardSlot(u8); extern void sub_80965F4(void); extern void sub_802C2D4(void); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, s32 *); extern u32 sub_802C1E4(u32); extern void PlaySound(u32); extern void SetPelipperBoardState(u32); extern u8 sub_802C26C(void); extern u8 HasNoAcceptedJobs(void); -extern void sub_8012EA4(u32 *, u32); void sub_802ECB4(void) { diff --git a/src/personality_test.c b/src/personality_test.c index 870a28a92..9333b835c 100644 --- a/src/personality_test.c +++ b/src/personality_test.c @@ -1,6 +1,8 @@ #include "global.h" #include "personality_test.h" #include "constants/emotions.h" +#include "constants/input.h" +#include "constants/type.h" #include "random.h" #include "file_system.h" #include "pokemon.h" @@ -355,7 +357,7 @@ const char * const gPersonalityTypeDescriptionTable[NUM_PERSONALITIES] = const struct UnkTextStruct2 gUnknown_80F4244 = { 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, + 0x05, 0x0C, 0x00, 0x06, 0x00, 0x05, 0x05, 0x05, 0x00, @@ -381,7 +383,7 @@ const s16 gPartners[NUM_PARTNERS] = const struct UnkTextStruct2 gUnknown_80F4278 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -391,7 +393,7 @@ const struct UnkTextStruct2 gUnknown_80F4278 = const struct UnkTextStruct2 gUnknown_80F4290 = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x09, 0x0B, 0x0D, 0x00, @@ -401,7 +403,7 @@ const struct UnkTextStruct2 gUnknown_80F4290 = const struct UnkTextStruct2 gUnknown_80F42A8 = { 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, + 0x05, 0x0E, 0x00, 0x04, 0x00, 0x05, 0x05, 0x05, 0x00, @@ -801,7 +803,7 @@ u16 HandlePartnerSelectionInput(void) partnerID = gUnknown_203B404->currPartnerSelection; gUnknown_203B404->unk16 = 0; - if (GetKeyPress(&gUnknown_203B404->unk18) == A_BUTTON) { + if (GetKeyPress(&gUnknown_203B404->unk18) == INPUT_A_BUTTON) { PlayMenuSoundEffect(0); return gUnknown_203B404->PartnerArray[gUnknown_203B404->currPartnerSelection]; } @@ -1034,8 +1036,8 @@ s32 GetValidPartners(void) CurrentPartnerID = gPartners[counter]; currentPartnerTypes[0] = GetPokemonType(CurrentPartnerID, 0); currentPartnerTypes[1] = GetPokemonType(CurrentPartnerID, 1); - if (((currentPartnerTypes[0] == '\0') || ((currentPartnerTypes[0] != PlayerType[0] && (currentPartnerTypes[0] != PlayerType[1])))) - && ((currentPartnerTypes[1] == '\0' || ((currentPartnerTypes[1] != PlayerType[0] && (currentPartnerTypes[1] != PlayerType[1]))) + if (((currentPartnerTypes[0] == TYPE_NONE) || ((currentPartnerTypes[0] != PlayerType[0] && (currentPartnerTypes[0] != PlayerType[1])))) + && ((currentPartnerTypes[1] == TYPE_NONE || ((currentPartnerTypes[1] != PlayerType[0] && (currentPartnerTypes[1] != PlayerType[1]))) ))) { gUnknown_203B404->PartnerArray[ValidPartnerCounter] = CurrentPartnerID; ValidPartnerCounter++; diff --git a/src/post_office_guide.c b/src/post_office_guide.c index a8740dc0e..1b11151e4 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -144,7 +144,7 @@ ALIGNED(4) const u8 wonder_mail_fill[] = _("pksdir0"); const struct UnkTextStruct2 gUnknown_80E1EFC = { 0, 0, 0, 0, - 3, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, @@ -156,7 +156,7 @@ const u8 gUnkData_80E1F14[] = {1, 0, 8, 0}; const struct UnkTextStruct2 gUnknown_80E1F18 = { 0, 0, 0, 0, - 6, 0, 0, 0, + 6, 2, 0, 2, 0, 0x14, 4, 4, 0, diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 73b416033..08da6d89b 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -10,6 +10,7 @@ #include "rescue_password_menu.h" #include "code_8094F88.h" #include "wonder_mail.h" +#include "menu_input.h" extern u8 gRescuePasswordBuffer[]; extern u32 gUnknown_202EC4C; @@ -34,8 +35,6 @@ extern u32 sub_8039068(u32, u8 *passwordBuffer, struct unkStruct_203B480 *r0); extern void sub_80951BC(struct unkStruct_203B480 *r0); extern bool8 sub_80951FC(struct unkStruct_203B480 *r0); -extern u8 sub_8012FD8(u32 *r0); -extern void sub_8013114(u32 *, s32 *); extern u32 sub_80154F0(void); extern void sub_8095274(u32); extern u32 sub_8031DCC(void); @@ -45,8 +44,8 @@ extern void DisplayRescuePasswordError(u32); extern struct MainMenu *GetMainMenu(void); -extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); -extern void sub_8035CF4(u32 *r0, u32, u32); +extern void SetMenuItems(struct MenuStruct *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); +extern void sub_8035CF4(struct MenuStruct *r0, u32, u32); bool8 IsInvalidItemReward(u8); bool8 sub_8095298(s32); bool8 sub_803D204(u8 *, struct unkStruct_203B480 *); @@ -304,8 +303,8 @@ s32 UpdateRescuePasswordMenu(void) } break; case 8: - if (sub_8012FD8(&gRescuePasswordMenu->unk8) == '\0') { - sub_8013114(&gRescuePasswordMenu->unk8, &local_14); + if (sub_8012FD8(&gRescuePasswordMenu->unk8[0]) == '\0') { + sub_8013114(&gRescuePasswordMenu->unk8[0], &local_14); } switch(local_14) { @@ -332,8 +331,8 @@ s32 UpdateRescuePasswordMenu(void) } break; case 9: - if (sub_8012FD8(&gRescuePasswordMenu->unk8) == '\0') { - sub_8013114(&gRescuePasswordMenu->unk8, &local_14); + if (sub_8012FD8(&gRescuePasswordMenu->unk8[0]) == '\0') { + sub_8013114(&gRescuePasswordMenu->unk8[0], &local_14); } switch(local_14) { @@ -371,36 +370,36 @@ void DisplayRescuePasswordError(u32 passwordError) sub_80155F0(); switch(passwordError) { case PASSWORD_ENTRY_INCORRECT_PASSWORD: - SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E71FC,gUnknown_80E7214,0,0xd,0); + SetMenuItems(gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E71FC,gUnknown_80E7214,0,0xd,0); break; case PASSWORD_ENTRY_NOT_SOS_MAIL: - SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E72EC,gUnknown_80E7304,0,0xd,0); + SetMenuItems(gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E72EC,gUnknown_80E7304,0,0xd,0); break; case PASSWORD_ENTRY_DUPLICATE_SOS_MAIL: - SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7344,gUnknown_80E735C,0,0xd,0); + SetMenuItems(gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7344,gUnknown_80E735C,0,0xd,0); break; case PASSWORD_ENTRY_NO_SPACE: - SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7588,gUnknown_80E75A0,0,0xd,0); + SetMenuItems(gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7588,gUnknown_80E75A0,0,0xd,0); break; case PASSWORD_ENTRY_NOT_AOK_MAIL: - SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E73AC,gUnknown_80E73C4,0,0xd,0); + SetMenuItems(gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E73AC,gUnknown_80E73C4,0,0xd,0); break; case PASSWORD_ENTRY_DUPLICATE_AOK_MAIL: - SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7408,gUnknown_80E7420,0,0xd,0); + SetMenuItems(gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7408,gUnknown_80E7420,0,0xd,0); break; case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL: - SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7468,gUnknown_80E7480,0,0xd,0); + SetMenuItems(gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7468,gUnknown_80E7480,0,0xd,0); break; case PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL: - SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E74C8,gUnknown_80E74E0,0,0xd,0); + SetMenuItems(gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E74C8,gUnknown_80E74E0,0,0xd,0); break; case PASSWORD_ENTRY_NOT_WONDER_MAIL: - SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E752C,gUnknown_80E7544,0,0xd,0); + SetMenuItems(gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E752C,gUnknown_80E7544,0,0xd,0); break; default: break; } - sub_8035CF4(&gRescuePasswordMenu->unk8,0,1); + sub_8035CF4(gRescuePasswordMenu->unk8,0,1); } void DisplayPasswordAcceptScreen(void) @@ -409,8 +408,8 @@ void DisplayPasswordAcceptScreen(void) ResetUnusedInputStruct(); sub_800641C(0,1,1); sub_80155F0(); - SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7278,gUnknown_80E7290,0,0xd,0); - sub_8035CF4(&gRescuePasswordMenu->unk8,0,1); + SetMenuItems(gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7278,gUnknown_80E7290,0,0xd,0); + sub_8035CF4(gRescuePasswordMenu->unk8,0,1); } u32 ConvertMenutoRescuePasswordState(u32 unused) diff --git a/src/save_menu.c b/src/save_menu.c new file mode 100644 index 000000000..18bd592df --- /dev/null +++ b/src/save_menu.c @@ -0,0 +1,350 @@ +#include "gba/defines.h" +#include "global.h" +#include "input.h" +#include "menu.h" +#include "main_menu.h" +#include "memory.h" +#include "text.h" +#include "save.h" +#include "menu_input.h" + +struct unkSprite +{ + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; +}; + +struct unkStruct_203B360 +{ + // size: 0x1b4 + u32 currMenu; + u32 unk4; + struct MenuStruct unk8[4]; + struct UnkTextStruct2 unk148[4]; + struct unkSprite unk1A8; + u32 unk1B0; // Sprite count? +}; + +extern struct unkStruct_203B360 *gUnknown_203B364; + +const struct UnkTextStruct2 gUnknown_80E6F20 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80E6F38 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x05, 0x00, 0x08, 0x00, + 0x15, 0x05, + 0x05, 0x00, + NULL +}; + +const u8 sUnknown_80E6F70[]; +const u8 sUnknown_80E6F90[]; +const u8 sUnknown_80E6FAC[]; + +const struct MenuItem gSavingAdventureMenuItems[] = { + {sUnknown_80E6FAC, 4}, + {sUnknown_80E6F90, 4}, + {sUnknown_80E6F70, 4}, + {NULL, 2} +}; +ALIGNED(4) const u8 sUnknown_80E6F70[] = _("{CENTER_ALIGN}Don{APOSTROPHE}t turn off the power."); +ALIGNED(4) const u8 sUnknown_80E6F90[] = _("{CENTER_ALIGN}Saving your adventure!"); +ALIGNED(4) const u8 sUnknown_80E6FAC[] = _("{CENTER_ALIGN}{COLOR_1 RED}Beware!{END_COLOR_TEXT_1} "); + +extern const u8 sUnknown_80E6FDC[]; +extern const u8 sUnknown_80E7008[]; +extern const u8 sUnknown_80E6FF0[]; + +const struct MenuItem gAdventureSavedMenuItems[] = { + {sUnknown_80E7008, 4}, + {sUnknown_80E6FF0, 4}, + {sUnknown_80E6FDC, 4}, + {NULL, 2} +}; +ALIGNED(4) const u8 sUnknown_80E6FDC[] = _("{CENTER_ALIGN}has been saved."); +ALIGNED(4) const u8 sUnknown_80E6FF0[] = _("{CENTER_ALIGN}Your adventure so far"); +ALIGNED(4) const u8 sUnknown_80E7008[] = _("{CENTER_ALIGN}{COLOR_1 LIGHT_BLUE_2}Success!{END_COLOR_TEXT_1} "); + +extern const u8 sUnknown_80E7078[]; +extern const u8 sUnknown_80E7050[]; +extern const u8 sUnknown_80E703C[]; + +const struct MenuItem gAdventureCouldNotBeSavedMenuItems[] = { + {sUnknown_80E7078, 4}, + {sUnknown_80E7050, 4}, + {sUnknown_80E703C, 4}, + {NULL, 2} +}; +ALIGNED(4) const u8 sUnknown_80E703C[] = _("{CENTER_ALIGN}Please try again."); +ALIGNED(4) const u8 sUnknown_80E7050[] = _("{CENTER_ALIGN}Your adventure could not be saved."); +ALIGNED(4) const u8 sUnknown_80E7078[] = _("{CENTER_ALIGN}{COLOR_1 RED}Save failed!{END_COLOR_TEXT_1} "); + + +extern const u8 DeletingAdventure_80E70B0[]; + +const struct MenuItem gDeletingYourAdventureMenuItems[] = { + {sUnknown_80E6FAC, 4}, + {DeletingAdventure_80E70B0, 4}, + {sUnknown_80E6F70, 4}, + {NULL, 2} +}; +ALIGNED(4) const u8 DeletingAdventure_80E70B0[] = _("{CENTER_ALIGN}Deleting your adventure!"); + +extern const u8 Data_80E70EC[]; +extern const u8 AdventureDeleted_80E70F0[]; + +const struct MenuItem gDeletedSaveMenuItems[] = { + {sUnknown_80E7008, 4}, + {AdventureDeleted_80E70F0, 4}, + {Data_80E70EC, 4}, + {NULL, 2}, +}; + +ALIGNED(4) const u8 Data_80E70EC[] = _(" "); +ALIGNED(4) const u8 AdventureDeleted_80E70F0[] = _("{CENTER_ALIGN}Your adventure has been deleted."); + +extern const u8 sUnknown_80E7134[]; +extern const u8 sUnknown_80E715C[]; + +const struct MenuItem gAdventureCouldNotBeDeletedMenuItems[] = { + {sUnknown_80E715C, 4}, + {sUnknown_80E7134, 4}, + {sUnknown_80E703C, 4}, + {NULL, 2}, +}; +ALIGNED(4) const u8 sUnknown_80E7134[] = _("{CENTER_ALIGN}Your adventure could not be deleted."); +ALIGNED(4) const u8 sUnknown_80E715C[] = _("{CENTER_ALIGN}{COLOR_1 RED}Deletion failed!{END_COLOR_TEXT_1} "); + +ALIGNED(4) const u8 gUnknown_80E7178[] = _("{CENTER_ALIGN}The data could not be written.\n" + "{CENTER_ALIGN}Please turn off the power and remove\n" + "{CENTER_ALIGN}and reinsert the DS Card."); + +ALIGNED(4) static const u8 save_menu_fill0[] = "pksdir0"; + +extern void ResetSprites(u32); +extern void sub_8038440(); +extern void sub_8035CF4(struct MenuStruct *, u32, u32); +extern void SetMenuItems(struct MenuStruct *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); +extern void sub_80384D0(); +extern void sub_8038830(); +extern void sub_80388C4(void); +extern void sub_8014114(); +extern void sub_80140F8(void); +extern void sub_8035CC0(struct UnkTextStruct2 *, u32); +extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); +extern void AddSprite(struct unkSprite *, u32, u32, u32); + +void CreateSaveMenu(s32 currMenu) +{ + s32 index; + + if (gUnknown_203B364 == NULL) { + gUnknown_203B364 = MemoryAlloc(sizeof(struct unkStruct_203B360),8); + MemoryFill8((u8 *)gUnknown_203B364,0,sizeof(struct unkStruct_203B360)); + } + for(index = 0; index < 4; index++){ + gUnknown_203B364->unk148[index] = gUnknown_80E6F20; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B364->unk148,1,1); + + if (currMenu == MENU_DELETE_SAVE) { + // Beware, Deleting your Adventure + SetMenuItems(gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,gDeletingYourAdventureMenuItems, + 0,6,0); + } + else { + // Saving your Adventure + SetMenuItems(gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,gSavingAdventureMenuItems, + 0,6,0); + } + sub_8035CF4(gUnknown_203B364->unk8,0,1); + gUnknown_203B364->unk4 = 0; + gUnknown_203B364->currMenu = currMenu; + sub_8038830(); +} + +void CleanSaveMenu(void) +{ + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + if (gUnknown_203B364 != NULL) { + MemoryFree(gUnknown_203B364); + gUnknown_203B364 = NULL; + } +} + +s32 UpdateSaveMenu(void) +{ + int saveStatus; + struct MainMenu *mainMenu; + u32 menu; + u32 uStack_18; + u32 action; + + menu = MENU_NO_SCREEN_CHANGE; + action = 3; + + switch(gUnknown_203B364->unk4) + { + default: + case 2: + menu = MENU_NO_SCREEN_CHANGE; + break; + case 0: + sub_8012FD8(&gUnknown_203B364->unk8[0]); + uStack_18 = 0; + sub_80140F8(); + saveStatus = WriteSavetoPak(&uStack_18,sub_8011C1C()); + sub_8014114(); + switch(saveStatus) + { + case SAVE_COMPLETED: + sub_8035CC0(gUnknown_203B364->unk148,0); + if (gUnknown_203B364->currMenu == MENU_DELETE_SAVE) { + SetMenuItems(gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38, + gDeletedSaveMenuItems,0,6,0); + } + else { + SetMenuItems(gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38, + gAdventureSavedMenuItems,0,6,0); + } + if (gUnknown_203B364->currMenu == 0x2d) { + gUnknown_203B364->unk4 = 1; + return MENU_COMMUNICATION_1; + } + sub_8035CF4(gUnknown_203B364->unk8,0,1); + gUnknown_203B364->unk4 = 1; + break; + case SAVE_NOT_WRTTEN: + sub_80141B4(gUnknown_80E7178,0,0,0); + gUnknown_203B364->unk4 = 5; + break; + default: + sub_8035CC0(gUnknown_203B364->unk148,0); + if (gUnknown_203B364->currMenu == MENU_DELETE_SAVE) { + SetMenuItems(gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38, + gAdventureCouldNotBeDeletedMenuItems,0,6,0); + } + else { + SetMenuItems(gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38, + gAdventureCouldNotBeSavedMenuItems,0,6,0); + } + sub_8035CF4(gUnknown_203B364->unk8,0,1); + gUnknown_203B364->unk4 = 1; + break; + } + menu = MENU_NO_SCREEN_CHANGE; + break; + case 1: + if (sub_80130A8(&gUnknown_203B364->unk8[0]) == '\0') { + sub_8013114(&gUnknown_203B364->unk8[0],&action); + } + switch(action) + { + case 2: + case 4: + if ((gUnknown_203B364->currMenu == 0x29) || (gUnknown_203B364->currMenu == MENU_DELETE_SAVE)) { + gUnknown_203B364->unk4 = 1; + menu = MENU_MAIN_SCREEN; + } + else if (gUnknown_203B364->currMenu == 0x2d) { + gUnknown_203B364->unk4 = 1; + menu = MENU_COMMUNICATION_1; + } + else if (gUnknown_203B364->currMenu == 0x2c) { + gUnknown_203B364->unk4 = 1; + menu = 0x1f; + } + else { + mainMenu = GetMainMenu(); + if (mainMenu->unk3A != 0) { + gUnknown_203B364->unk4 = 1; + menu = 0x35; + } + else { + gUnknown_203B364->unk4 = 1; + menu = gUnknown_203B364->currMenu == 0x2b ? MENU_WONDER_MAIL : MENU_FRIEND_RESCUE; + } + } + break; + case 3: + gUnknown_203B364->unk4 = 1; + break; + } + sub_80388C4(); + } + return menu; +} + +void sub_8038830(void) +{ +#ifdef NONMATCHING + u32 r0; + u32 r2; +#else + register u32 r0 asm("r0"); + register u32 r2 asm("r2"); +#endif + u32 r1; + u32 r4; + u32 r5; + struct unkSprite *sprite; + + r5 = 0; + sprite = &gUnknown_203B364->unk1A8; + + r1 = sprite->unk0; + r0 = 0xfeff; + r0 &= r1; + r0 &= 0xfdff; + r0 &= 0xf3ff; + r0 &= 0xefff; + r0 &= 0xdfff; + r2 = 0x4000; + r0 &= 0x3fff; + r0 |= r2; + sprite->unk0 = r0; + + r2 = 0x3F0; + r1 = sprite->unk4; + r0 = 0xFC00; + r0 &= r1; + r0 |= r2; + r0 &= 0xf3ff; + r2 = 0xF; + r4 = 0xF000; + r0 &= 0xfff; + r0 |= r4; + + sprite->unk4 = r0; + + sprite->unk2 = 0x70; + + r1 = 0x680; + r2 &= sprite->unk6; + r2 |= r1; + sprite->unk6 = r2; + + gUnknown_203B364->unk1B0 = r5; + ResetSprites(0); +} + +void sub_80388C4(void) { + if ((gUnknown_203B364->unk1B0 & 8) != 0) { + AddSprite(&gUnknown_203B364->unk1A8, 0x100, 0, 0); + } + gUnknown_203B364->unk1B0++; +} diff --git a/src/status_checks_1.c b/src/status_checks_1.c index 3c1871027..028c78708 100644 --- a/src/status_checks_1.c +++ b/src/status_checks_1.c @@ -26,7 +26,7 @@ extern u8 *gUnknown_80F8968[]; extern u8 *gUnknown_80F8988[]; extern u8 gUnknown_8106FA4[]; -u8 sub_8070828(struct Entity *pokemon, bool8 displayMessage) +s32 sub_8070828(struct Entity *pokemon, bool8 displayMessage) { bool8 flag; diff --git a/src/text.c b/src/text.c index 2c74e537b..4c1d95a8c 100644 --- a/src/text.c +++ b/src/text.c @@ -154,11 +154,11 @@ void sub_8006438(const struct UnkTextStruct2 *a0, u8 a1, u8 a2, u32 *a3) for (i = 0; i < 4; i++) { gUnknown_202AFC0[i] = a0[i]; - if (a0[i].unk0c) + if (a0[i].unkC) { sub_8006554(gUnknown_2027370, (void *)VRAM, gUnknown_20274B4, gUnknown_202B038, gUnknown_80B8804[i], a0 + i, a1, r9, a3, 0); sub_80089AC(a0 + i, a3); - r9 += a0[i].unk0c * a0[i].unk10; + r9 += a0[i].unkC * a0[i].unk10; } } #ifdef NONMATCHING diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index 110afd248..bdee3a07b 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -13,6 +13,7 @@ #include "text.h" #include "team_inventory.h" #include "code_800D090.h" +#include "menu_input.h" extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4; @@ -55,7 +56,7 @@ extern char gAvailablePokemonNames[0x50]; const struct UnkTextStruct2 gUnknown_80DED48 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x15, 0x00, 0x04, 0x00, 0x06, 0x05, 0x05, 0x00, @@ -65,7 +66,7 @@ const struct UnkTextStruct2 gUnknown_80DED48 = const struct UnkTextStruct2 gUnknown_80DED60 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x16, 0x00, 0x07, 0x00, 0x06, 0x05, 0x05, 0x00, @@ -86,7 +87,7 @@ const struct MenuItem gUnknown_80DED78[3] = const struct UnkTextStruct2 gUnknown_80DEDA0 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -155,7 +156,6 @@ const struct MenuItem gUnknown_80DEEE4[4] = extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32); -extern u8 sub_8012FD8(u32 *r0); extern void sub_8035CC0(struct UnkTextStruct2 *r0, u32); extern void sub_8030810(u32); extern u32 sub_8031DCC(void); @@ -167,7 +167,6 @@ extern u32 sub_8030768(u32); extern s8 sub_80307EC(void); extern void sub_8030D40(u8, u32); extern u32 sub_8030DA0(); -extern void sub_8013114(u32 *r0, s32 *r1); extern void HandleThankYouMailPelipperMainMenu(); extern void sub_802AAC8(); extern void ReturnToThankYouMailMainMenu(); @@ -218,7 +217,7 @@ extern void sub_802F2C0(); extern u32 sub_80144A4(s32 *r0); extern void SetThankYouMailMenuState(u32); extern struct PokemonStruct *GetPlayerPokemonStruct(void); -extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); +extern void SetMenuItems(struct MenuStruct *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); extern void sub_80922B4(u8 *, u8 *, u32); extern void sub_802F204(struct unkStruct_802F204 *, u32); extern void sub_80151C0(u32, u8 *); @@ -239,7 +238,7 @@ extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); extern void sub_8031D70(u8, u32); extern void sub_803092C(void); -extern void sub_8035CF4(u32 *, u32, u32); +extern void sub_8035CF4(struct MenuStruct *, u32, u32); extern u32 sub_801CA08(u32); extern void sub_801CBB8(void); extern void sub_801B3C0(struct Item *); @@ -620,8 +619,8 @@ void sub_802A174(void) menuAction = -1; sub_8030768(0); - if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) { - sub_8013114(&gUnknown_203B2C4->unk30C, &menuAction); + if (sub_8012FD8(&gUnknown_203B2C4->unk21C[3]) == 0) { + sub_8013114(&gUnknown_203B2C4->unk21C[3], &menuAction); } switch(menuAction) @@ -659,7 +658,7 @@ void sub_802A230(void) sub_800641C(gUnknown_203B2C4->unk3BC, 1, 1); sub_803092C(); if (gUnknown_203B2C4->fallbackState == 0x2b) { - sub_8035CF4(&gUnknown_203B2C4->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B2C4->unk21C, 3, 1); SetThankYouMailMenuState(0x11); } else { @@ -711,7 +710,7 @@ void sub_802A33C(void) sub_800641C(gUnknown_203B2C4->unk3BC,1,1); sub_801CB5C(1); if (gUnknown_203B2C4->fallbackState == 0x2b) { - sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1); + sub_8035CF4(gUnknown_203B2C4->unk21C,3,1); SetThankYouMailMenuState(0x14); } else { @@ -730,8 +729,8 @@ void sub_802A39C(void) menuAction = -1; sub_801CA08(0); - if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) { - sub_8013114(&gUnknown_203B2C4->unk30C, &menuAction); + if (sub_8012FD8(&gUnknown_203B2C4->unk21C[3]) == 0) { + sub_8013114(&gUnknown_203B2C4->unk21C[3], &menuAction); } switch(menuAction) @@ -1299,9 +1298,9 @@ void UpdateThankYouMailText(void) break; case 0x11: sub_8006518(gUnknown_203B2C4->unk35C); - SetMenuItems(&gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED60,gUnknown_80DED78,1,0,0); + SetMenuItems(gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED60,gUnknown_80DED78,1,0,0); sub_803092C(); - sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1); + sub_8035CF4(gUnknown_203B2C4->unk21C,3,1); break; case 0x13: if (sub_801D008() != 0) @@ -1316,9 +1315,9 @@ void UpdateThankYouMailText(void) break; case 0x14: sub_8006518(gUnknown_203B2C4->unk35C); - SetMenuItems(&gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED48,gUnknown_80DED78,1,0,0); + SetMenuItems(gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED48,gUnknown_80DED78,1,0,0); sub_801CCD8(); - sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1); + sub_8035CF4(gUnknown_203B2C4->unk21C,3,1); break; case THANK_YOU_MAIL_COMMS_FINISHED: gUnknown_203B2C4->linkError = COMMS_GOOD; diff --git a/src/trade_items_menu.c b/src/trade_items_menu.c index 2eb251776..e17d25d75 100644 --- a/src/trade_items_menu.c +++ b/src/trade_items_menu.c @@ -8,6 +8,7 @@ #include "memory.h" #include "save.h" #include "menu.h" +#include "menu_input.h" extern struct TradeItemsMenu *gTradeItemsMenu; @@ -29,7 +30,7 @@ const struct MenuItem gUnknown_80E60D4[3] = { const struct UnkTextStruct2 gUnknown_80E60EC = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x15, 0x00, 0x04, 0x00, 0x06, 0x05, 0x05, 0x00, @@ -46,7 +47,7 @@ const struct MenuItem gUnknown_80E6104[4] = { static const struct UnkTextStruct2 unused = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x16, 0x00, 0x09, 0x00, 0x05, 0x03, 0x03, 0x00, @@ -63,7 +64,7 @@ const struct MenuItem gUnknown_80E6154[3] = { const struct UnkTextStruct2 gUnknown_80E6174 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x15, 0x00, 0x0D, 0x00, 0x06, 0x04, 0x04, 0x00, @@ -87,14 +88,12 @@ extern u32 sub_801CA08(u32); extern void sub_801CBB8(); extern u8 sub_801CB24(); extern void sub_801B3C0(struct Item *); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, s32 *); extern void sub_8035CC0(struct UnkTextStruct2 *, u32); extern void sub_801CCD8(); extern u32 sub_801B410(); extern void sub_801B450(); extern void sub_801CB5C(u32); -extern void sub_8035CF4(u32 *, u32, u32); +extern void sub_8035CF4(struct MenuStruct *, u32, u32); extern u32 sub_8013BBC(u32 *); extern void sub_80141B4(const u8 *, u32, u32, u32); @@ -109,7 +108,7 @@ extern void sub_801C8C4(u32, u32, s32 *, u32); extern s32 sub_8037B28(u32); extern void sub_8011830(void); extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, void *r5, u32); -extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); +extern void SetMenuItems(struct MenuStruct *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); extern void nullsub_23(u32); extern void xxx_call_start_bg_music(void); extern s32 sub_80381F4(u32, void *, void *); @@ -312,8 +311,8 @@ void sub_8036674(void) menuAction = -1; sub_801CA08(0); - if (sub_8012FD8(&gTradeItemsMenu->unk134) == '\0') { - sub_8013114(&gTradeItemsMenu->unk134, &menuAction); + if (sub_8012FD8(&gTradeItemsMenu->unk44[3]) == '\0') { + sub_8013114(&gTradeItemsMenu->unk44[3], &menuAction); } switch(menuAction){ case 3: // confirm @@ -348,7 +347,7 @@ void sub_8036728(void) sub_800641C(gTradeItemsMenu->unk1E4, 1, 1); sub_801CB5C(1); if (gTradeItemsMenu->fallbackState == 0x13) { - sub_8035CF4(&gTradeItemsMenu->unk44, 3, 1); + sub_8035CF4(gTradeItemsMenu->unk44, 3, 1); SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_POPUP_MENU); } else { @@ -362,20 +361,20 @@ void sub_8036728(void) void sub_8036788(void) { - sub_8012FD8(&gTradeItemsMenu->unk134); + sub_8012FD8(&gTradeItemsMenu->unk44[3]); sub_801CA08(0); switch(sub_8013BBC(&gTradeItemsMenu->quantityToSend)){ case 1: // When you change the # sub_801CCD8(); - sub_8035CF4(&gTradeItemsMenu->unk44, 3, 0); + sub_8035CF4(gTradeItemsMenu->unk44, 3, 0); sub_8036F30(); break; case 2: // If you back out of the # selection sub_8035CC0(gTradeItemsMenu->unk184, 2); sub_801CCD8(); - sub_8035CF4(&gTradeItemsMenu->unk44, 3, 1); + sub_8035CF4(gTradeItemsMenu->unk44, 3, 1); SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_POPUP_MENU); break; case 3: @@ -634,10 +633,10 @@ void sub_8036B28(void) break; case TRADE_ITEMS_SEND_ITEM_POPUP_MENU: sub_8006518(gTradeItemsMenu->unk184); - SetMenuItems(&gTradeItemsMenu->unk44,gTradeItemsMenu->unk184,3,&gUnknown_80E60EC, + SetMenuItems(gTradeItemsMenu->unk44,gTradeItemsMenu->unk184,3,&gUnknown_80E60EC, gUnknown_80E6104,1,0,0); sub_801CCD8(); - sub_8035CF4(&gTradeItemsMenu->unk44,3,1); + sub_8035CF4(gTradeItemsMenu->unk44,3,1); break; case TRADE_ITEMS_SEND_ITEM_NUMBER: sub_8036F74(); @@ -793,7 +792,7 @@ void sub_8036F74(void) sub_8006518(gTradeItemsMenu->unk184); sub_8036ECC(2, gTeamInventory_203B460->teamStorage[gTradeItemsMenu->itemToSend.id]); sub_801CCD8(); - sub_8035CF4(&gTradeItemsMenu->unk44, 3, 0); + sub_8035CF4(gTradeItemsMenu->unk44, 3, 0); sub_8036F30(); } diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c index beb5205f4..1ae4ac76d 100644 --- a/src/unk_menu_203B360.c +++ b/src/unk_menu_203B360.c @@ -2,18 +2,26 @@ #include "input.h" #include "main_menu.h" #include "memory.h" +#include "menu.h" #include "text.h" +#include "menu_input.h" + +struct unkSprite +{ + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; +}; struct unkStruct_203B360 { // size: 0x1b4 u32 currMenu; u32 unk4; // state - u32 unk8; - u8 fill8[0x148 - 0xC]; + struct MenuStruct unk8[4]; struct UnkTextStruct2 unk148[4]; - u32 unk1A8; - u32 unk1AC; + struct unkSprite unk1A8; u32 unk1B0; // sprite count? }; @@ -22,11 +30,10 @@ extern struct UnkTextStruct2 gUnknown_80E6E7C; extern struct UnkTextStruct2 gUnknown_80E6E94; extern struct MenuItem gUnknown_80E6EAC[]; +extern void AddSprite(struct unkSprite *, u32, u32, u32); extern void sub_8038440(); -extern void sub_8035CF4(u32 *, u32, u32); -extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, struct UnkTextStruct2 *, struct MenuItem *, u32, u32, u32); -extern u8 sub_80130A8(u32 *); -extern void sub_8013114(u32 *, u32 *); +extern void sub_8035CF4(struct MenuStruct *, u32, u32); +extern void SetMenuItems(struct MenuStruct *, struct UnkTextStruct2 *, u32, struct UnkTextStruct2 *, struct MenuItem *, u32, u32, u32); extern void sub_80384D0(); void sub_80382E4(s32 param_1) @@ -46,10 +53,10 @@ void sub_80382E4(s32 param_1) // Caution! // The storage space is empty! // Please check again. - SetMenuItems(&gUnknown_203B360->unk8,gUnknown_203B360->unk148,0,&gUnknown_80E6E94,gUnknown_80E6EAC, + SetMenuItems(gUnknown_203B360->unk8,gUnknown_203B360->unk148,0,&gUnknown_80E6E94,gUnknown_80E6EAC, 0,4,0); } - sub_8035CF4(&gUnknown_203B360->unk8,0,1); + sub_8035CF4(gUnknown_203B360->unk8,0,1); gUnknown_203B360->currMenu = param_1; gUnknown_203B360->unk4 = 0; sub_8038440(); @@ -74,8 +81,8 @@ u32 sub_80383D4(void) nextMenu = MENU_NO_SCREEN_CHANGE; if (gUnknown_203B360->unk4 == 0){ - if (sub_80130A8(&gUnknown_203B360->unk8) == '\0') { - sub_8013114(&gUnknown_203B360->unk8, &menuAction); + if (sub_80130A8(&gUnknown_203B360->unk8[0]) == '\0') { + sub_8013114(&gUnknown_203B360->unk8[0], &menuAction); } switch(menuAction) { @@ -94,3 +101,65 @@ u32 sub_80383D4(void) return nextMenu; } + +void sub_8038440(void) +{ +#ifdef NONMATCHING + u32 r0; + u32 r2; +#else + register u32 r0 asm("r0"); + register u32 r2 asm("r2"); +#endif + u32 r1; + u32 r4; + u32 r5; + struct unkSprite *sprite; + + r5 = 0; + sprite = &gUnknown_203B360->unk1A8; + + r1 = sprite->unk0; + r0 = 0xfeff; + r0 &= r1; + r0 &= 0xfdff; + r0 &= 0xf3ff; + r0 &= 0xefff; + r0 &= 0xdfff; + r2 = 0x4000; + r0 &= 0x3fff; + r0 |= r2; + sprite->unk0 = r0; + + r2 = 0x3F0; + r1 = sprite->unk4; + r0 = 0xFC00; + r0 &= r1; + r0 |= r2; + r0 &= 0xf3ff; + r2 = 0xF; + r4 = 0xF000; + r0 &= 0xfff; + r0 |= r4; + + sprite->unk4 = r0; + + sprite->unk2 = 0x70; + + r1 = 0x700; + r2 &= sprite->unk6; + r2 |= r1; + sprite->unk6 = r2; + + gUnknown_203B360->unk1B0 = r5; +} + + +void sub_80384D0(void) +{ + if ((gUnknown_203B360->unk1B0 & 8) != 0) { + AddSprite(&gUnknown_203B360->unk1A8, 0x100, 0, 0); + } + gUnknown_203B360->unk1B0++; +} + diff --git a/src/unk_menu_203B360_1.c b/src/unk_menu_203B360_1.c deleted file mode 100644 index 743b134d4..000000000 --- a/src/unk_menu_203B360_1.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "global.h" -#include "text.h" - -struct unkStruct_203B360 -{ - // size: 0x1b4 - u32 currMenu; - u32 unk4; - u32 unk8; - u8 fill8[0x148 - 0xC]; - struct UnkTextStruct2 unk148[4]; - u16 unk1A8; - u16 unk1AA; - u16 unk1AC; - u16 unk1AE; - u32 unk1B0; // Sprite count? -}; - -extern struct unkStruct_203B360 *gUnknown_203B360; -extern void AddSprite(u16 *, u32, u32, u32); - -void sub_80384D0(void) -{ - if ((gUnknown_203B360->unk1B0 & 8) != 0) { - AddSprite(&gUnknown_203B360->unk1A8, 0x100, 0, 0); - } - gUnknown_203B360->unk1B0++; -} diff --git a/src/unk_menu_203B364.c b/src/unk_menu_203B364.c deleted file mode 100644 index c4dcd62fc..000000000 --- a/src/unk_menu_203B364.c +++ /dev/null @@ -1,76 +0,0 @@ -#include "global.h" -#include "input.h" -#include "menu.h" -#include "main_menu.h" -#include "memory.h" -#include "text.h" - -struct unkStruct_203B360 -{ - // size: 0x1b4 - u32 currMenu; - u32 unk4; - u32 unk8; - u8 fill8[0x148 - 0xC]; - struct UnkTextStruct2 unk148[4]; - u16 unk1A8; - u16 unk1AA; - u16 unk1AC; - u16 unk1AE; - u32 unk1B0; // Sprite count? -}; - -extern struct unkStruct_203B360 *gUnknown_203B364; -extern struct UnkTextStruct2 gUnknown_80E6F20; -extern struct UnkTextStruct2 gUnknown_80E6F38; -extern struct MenuItem gUnknown_80E7090[]; -extern struct MenuItem gUnknown_80E6F50[]; - -extern void sub_8038440(); -extern void sub_8035CF4(u32 *, u32, u32); -extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, struct UnkTextStruct2 *, struct MenuItem *, u32, u32, u32); -extern u8 sub_80130A8(u32 *); -extern void sub_8013114(u32 *, u32 *); -extern void sub_80384D0(); -extern void sub_8038830(); - -void CreateSaveMenu(s32 currMenu) -{ - s32 iVar4; - - if (gUnknown_203B364 == NULL) { - gUnknown_203B364 = MemoryAlloc(sizeof(struct unkStruct_203B360),8); - MemoryFill8((u8 *)gUnknown_203B364,0,sizeof(struct unkStruct_203B360)); - } - for(iVar4 = 0; iVar4 < 4; iVar4++){ - gUnknown_203B364->unk148[iVar4] = gUnknown_80E6F20; - } - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B364->unk148,1,1); - - if (currMenu == MENU_DELETE_SAVE) { - // Beware, Deleting your Adventure - SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,gUnknown_80E7090, - 0,6,0); - } - else { - // Saving your Adventure - SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,gUnknown_80E6F50, - 0,6,0); - } - sub_8035CF4(&gUnknown_203B364->unk8,0,1); - gUnknown_203B364->unk4 = 0; - gUnknown_203B364->currMenu = currMenu; - sub_8038830(); -} - -void CleanSaveMenu(void) -{ - ResetUnusedInputStruct(); - sub_800641C(0,1,1); - if (gUnknown_203B364 != NULL) { - MemoryFree(gUnknown_203B364); - gUnknown_203B364 = NULL; - } -} - diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 1f8ebc377..2cc3c97f4 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -11,6 +11,7 @@ #include "text.h" #include "team_inventory.h" #include "rescue_password_menu.h" +#include "menu_input.h" extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0; @@ -36,10 +37,9 @@ extern void sub_803084C(); extern u32 sub_8030768(u32); extern s8 sub_80307EC(); extern void sub_8030D40(u8, u32); -extern u8 sub_8012FD8(u32 *r0); extern void sub_8030810(u32); extern void sub_8035CC0(struct UnkTextStruct2 *r0, u32); -extern void sub_8035CF4(u32 *r0, u32, u32); +extern void sub_8035CF4(struct MenuStruct *r0, u32, u32); extern u32 sub_8030DA0(void); extern void sub_8030DE4(void); extern void sub_803092C(void); @@ -50,7 +50,6 @@ extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32 extern void sub_8095274(u32); extern void sub_80155F0(); extern void sub_80951BC(struct unkStruct_203B480 *r0); -extern void sub_8013114(u32 *r0, s32 *r1); extern void sub_8023C60(); extern u32 sub_8023A94(u32); extern void sub_8024458(s16, u32); @@ -86,7 +85,7 @@ extern u32 sub_8023CE8(void); extern u32 sub_8030894(void); extern void sub_8030F58(u32); extern void sub_8023DA4(void); -extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); +extern void SetMenuItems(struct MenuStruct *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); extern void sub_8029B34(void); extern void sub_8029AD8(void); extern void sub_8029AF4(void); @@ -203,7 +202,7 @@ ALIGNED(4) const u8 SendWOPokemon[] = _("Send w/o Pokémon"); const struct UnkTextStruct2 gUnknown_80DDACC = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x16, 0x00, 0x07, 0x00, 0x06, 0x04, 0x04, 0x00, @@ -213,7 +212,7 @@ const struct UnkTextStruct2 gUnknown_80DDACC = const struct UnkTextStruct2 gUnknown_80DDAE4 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x16, 0x00, 0x06, 0x00, 0x06, 0x04, 0x04, 0x00, @@ -536,9 +535,9 @@ void sub_8028348(void) break; case 0x34: sub_8006518(gUnknown_203B2C0->unk35C); - SetMenuItems(&gUnknown_203B2C0->unk21C, gUnknown_203B2C0->unk35C, 3, &gUnknown_80DDAE4, gUnknown_80DDAFC, 1, 0, 0); + SetMenuItems(gUnknown_203B2C0->unk21C, gUnknown_203B2C0->unk35C, 3, &gUnknown_80DDAE4, gUnknown_80DDAFC, 1, 0, 0); sub_8023DA4(); - sub_8035CF4(&gUnknown_203B2C0->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B2C0->unk21C, 3, 1); break; case 0x31: sub_8014248(gUnknown_80DDD2C, 0, 0xA, gUnknown_80DDAA0, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); @@ -698,9 +697,9 @@ void sub_8028348(void) case 0x20: case 0x2B: sub_8006518(gUnknown_203B2C0->unk35C); - SetMenuItems(&gUnknown_203B2C0->unk21C, gUnknown_203B2C0->unk35C, 3, &gUnknown_80DDACC, gUnknown_80DDAFC, 1, 0, 0); + SetMenuItems(gUnknown_203B2C0->unk21C, gUnknown_203B2C0->unk35C, 3, &gUnknown_80DDACC, gUnknown_80DDAFC, 1, 0, 0); sub_803092C(); - sub_8035CF4(&gUnknown_203B2C0->unk21C, 3, 1); + sub_8035CF4(gUnknown_203B2C0->unk21C, 3, 1); break; case 0xA: gUnknown_203B2C0->unk540 = sub_8095350(); @@ -1233,9 +1232,9 @@ void sub_80290F0(void) s32 menuAction; menuAction = -1; sub_8030768(0); - if(sub_8012FD8(&(gUnknown_203B2C0->unk30C)) == 0) + if(sub_8012FD8(&(gUnknown_203B2C0->unk21C[3])) == 0) { - sub_8013114(&(gUnknown_203B2C0->unk30C), &menuAction); + sub_8013114(&(gUnknown_203B2C0->unk21C[3]), &menuAction); } switch(menuAction) { @@ -1274,7 +1273,7 @@ void sub_80291AC(void) sub_803092C(); if(gUnknown_203B2C0->fallbackState == 0x3D) { - sub_8035CF4(&(gUnknown_203B2C0->unk21C), 3, 1); + sub_8035CF4(gUnknown_203B2C0->unk21C, 3, 1); sub_8028B04(0x20); } else @@ -1582,9 +1581,9 @@ void sub_8029684(void) s32 menuAction; menuAction = -1; sub_8030768(0); - if(sub_8012FD8(&(gUnknown_203B2C0->unk30C)) == 0) + if(sub_8012FD8(&(gUnknown_203B2C0->unk21C[3])) == 0) { - sub_8013114(&(gUnknown_203B2C0->unk30C), &menuAction); + sub_8013114(&(gUnknown_203B2C0->unk21C[3]), &menuAction); } switch(menuAction) { @@ -1621,7 +1620,7 @@ void sub_8029740(void) sub_803092C(); if(gUnknown_203B2C0->fallbackState == 0x3D) { - sub_8035CF4(&(gUnknown_203B2C0->unk21C), 3, 1); + sub_8035CF4(gUnknown_203B2C0->unk21C, 3, 1); sub_8028B04(0x2B); } else @@ -1682,9 +1681,9 @@ void sub_8029884(void) s32 menuAction; menuAction = -1; sub_8023A94(0); - if(sub_8012FD8(&(gUnknown_203B2C0->unk30C)) == 0) + if(sub_8012FD8(&(gUnknown_203B2C0->unk21C[3])) == 0) { - sub_8013114(&(gUnknown_203B2C0->unk30C), &menuAction); + sub_8013114(&(gUnknown_203B2C0->unk21C[3]), &menuAction); } switch(menuAction) { @@ -1730,7 +1729,7 @@ void sub_8029944(void) sub_8023B7C(1); if(gUnknown_203B2C0->fallbackState == 0x3D) { - sub_8035CF4(&(gUnknown_203B2C0->unk21C), 3, 1); + sub_8035CF4(gUnknown_203B2C0->unk21C, 3, 1); sub_8028B04(0x34); } else diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 8d930e095..4c4b40e07 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -13,6 +13,7 @@ #include "wonder_mail.h" #include "code_800D090.h" #include "code_8094F88.h" +#include "menu_input.h" struct unkStruct_203B2C8 { @@ -155,7 +156,6 @@ extern void sub_80073B8(u32); extern void sub_802BC7C(void); extern void sub_80073E0(u32); extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32); -extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); extern void sub_803B6B0(u32, u32, u32, u32); extern s32 sub_8013800(u32 *, s32); @@ -166,7 +166,6 @@ extern void sub_801317C(u32 *); extern u8 HasNoMailinMailbox(void); extern void sub_802BF30(void); extern void CreateMailMenu(void); -extern void sub_8012D34(struct UnkTextStruct2 *, u32); extern s32 CountEmptyMailSlots(void); extern void sub_8013848(u32 *, s32, u32, u32); @@ -199,7 +198,7 @@ ALIGNED(4) const char wonder_mail_2_fill[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80DFBD0 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -211,7 +210,7 @@ const u8 gUnknown_80DFBE8[] = { 0x01, 0x00, 0x0C, 0x00 }; const struct UnkTextStruct2 gUnknown_80DFBEC = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x18, 0x0E, 0x0E, 0x00, @@ -224,7 +223,7 @@ ALIGNED(4) static const char wonder_mail_2_fill1[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80DFC18 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -236,7 +235,7 @@ const u8 gUnkData_80DFC30[] = { 0x01, 0x00, 0x16, 0x00 }; const struct UnkTextStruct2 gUnknown_80DFC34 = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x1A, 0x10, 0x10, 0x00, @@ -250,7 +249,7 @@ ALIGNED(4) static const char wonder_mail_2_fill2[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80DFC5C = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -260,7 +259,7 @@ const struct UnkTextStruct2 gUnknown_80DFC5C = const struct UnkTextStruct2 gUnknown_80DFC74 = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x18, 0x0E, 0x0E, 0x00, @@ -273,7 +272,7 @@ ALIGNED(4) static const char wonder_mail_2_fill3[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80DFC9C = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -283,7 +282,7 @@ const struct UnkTextStruct2 gUnknown_80DFC9C = const struct UnkTextStruct2 gUnknown_80DFCB4 = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x18, 0x0E, 0x0E, 0x00, diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index 0ac2e7d04..70664e93b 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -5,6 +5,7 @@ #include "text.h" #include "menu.h" #include "code_802C39C.h" +#include "menu_input.h" struct unkStruct_203B2E8 { @@ -37,8 +38,8 @@ struct unkStruct_203B2F0 u32 unk10; u8 fill14[0x68 - 0x14]; u32 unk68; - u8 fill6C[0xBC - 0x6C]; - u8 unkBC[0x10C - 0xBC]; + struct MenuStruct unk6C; + struct MenuStruct unkBC; struct MenuItem unk10C[8]; struct MenuItem unk14C[8]; u8 fill18C[0x19C - 0x18C]; @@ -54,7 +55,7 @@ u16 gUnknown_203B2EC; const struct UnkTextStruct2 gUnknown_80DFCE4 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -64,7 +65,7 @@ const struct UnkTextStruct2 gUnknown_80DFCE4 = const struct UnkTextStruct2 gUnknown_80DFCFC = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x18, 0x0E, 0x0E, 0x00, @@ -77,7 +78,7 @@ static const u8 wonder_mail_fill[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80DFD28 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -87,7 +88,7 @@ const struct UnkTextStruct2 gUnknown_80DFD28 = const struct UnkTextStruct2 gUnknown_80DFD40 = { 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x00, 0x06, 0x00, 0x07, 0x03, 0x03, 0x00, @@ -97,7 +98,7 @@ const struct UnkTextStruct2 gUnknown_80DFD40 = const struct UnkTextStruct2 gUnknown_80DFD58 = { 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x00, 0x0f, 0x00, 0x06, 0x03, 0x03, 0x00, @@ -111,7 +112,7 @@ static const u8 wonder_mail_fill0[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80DFD8C = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -121,7 +122,7 @@ const struct UnkTextStruct2 gUnknown_80DFD8C = const struct UnkTextStruct2 gUnknown_80DFDA4 = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x18, 0x0e, 0x0e, 0x00, @@ -131,7 +132,6 @@ const struct UnkTextStruct2 gUnknown_80DFDA4 = const u8 gUnknown_80DFDBC[] = "RESCUE EVENT"; static const u8 wonder_mail_fill1[] = "pksdir0"; -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern void sub_802CAA4(void); extern u8 IsJobSlotEmpty(u8); extern void sub_8008C54(u32); @@ -142,7 +142,6 @@ extern struct WonderMail* GetJobSlotInfo(u8); extern s32 sub_8013800(void *, u32); extern void sub_803B35C(void *, u32 *); extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); -extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); extern void CreateRescueTitle(void *); extern void sub_8013984(u32 *); @@ -154,7 +153,6 @@ extern s32 GetKeyPress(void *); extern void PlayMenuSoundEffect(u32); extern void sub_8013660(void *); extern void sub_8013848(u32 *, s32, u32, u32); -extern void sub_8012D34(struct UnkTextStruct2 *, u32); extern bool8 IsPelipperBoardSlotEmpty(u8); extern void sub_802C910(u32); extern void sub_802CC00(void); @@ -163,9 +161,7 @@ extern void sub_802CD38(void); extern void sub_802CDB8(void); extern void sub_802C928(void); extern void sub_802C9D8(void); -extern void sub_8012D60(u8 *, struct MenuItem *, u32, u16 *, u32, u32); extern void sub_802DE84(u32 *); -extern void sub_8012EA4(u8 *, u32); extern void sub_802CBAC(void); s32 CountAcceptedJobs(void); @@ -499,13 +495,13 @@ void sub_802C9D8(void) break; case 2: sub_802C750(); - sub_8012D60(gUnknown_203B2F0->fill6C, gUnknown_203B2F0->unk10C, 0, 0, gUnknown_203B2F0->unk68, 2); + sub_8012D60(&gUnknown_203B2F0->unk6C, gUnknown_203B2F0->unk10C, 0, 0, gUnknown_203B2F0->unk68, 2); break; case 3: sub_802CBAC(); sub_802C750(); - sub_8012EA4(gUnknown_203B2F0->fill6C, 0); - sub_8012D60(gUnknown_203B2F0->unkBC, gUnknown_203B2F0->unk14C, 0, 0, 6, 3); + sub_8012EA4(&gUnknown_203B2F0->unk6C, 0); + sub_8012D60(&gUnknown_203B2F0->unkBC, gUnknown_203B2F0->unk14C, 0, 0, 6, 3); break; case 4: sub_803B35C(GetJobSlotInfo(gUnknown_203B2F0->unkC), &gUnknown_203B2F0->unk10); diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c index 2ab0d7a75..8f4db0157 100644 --- a/src/wonder_mail_2_mid.c +++ b/src/wonder_mail_2_mid.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/input.h" #include "constants/mailbox.h" #include "code_800D090.h" #include "input.h" @@ -7,12 +8,12 @@ #include "pokemon_mail.h" #include "wonder_mail.h" #include "code_802C39C.h" +#include "menu_input.h" bool8 IsMailSlotEmpty(u8); extern void sub_8013984(void *); extern void sub_8013848(u32 *, s32, u32, u32); extern s32 sub_802C474(void); -extern void sub_8012D34(struct UnkTextStruct2 *, u32); extern void sub_802C328(void); extern void sub_802C39C(void); extern void PlayMenuSoundEffect(u32); @@ -32,7 +33,6 @@ extern u8 gBulletinBoardText[]; extern bool8 IsMailinJobSlot(struct WonderMail *); extern void CreateRescueTitle(void *); extern void xxx_call_draw_string(s32, s32, u8 *, s32, s32); -extern void sub_8012BC4(s32, s32, s32, s32 ,s32 ,s32); struct unkStruct_203B2D8 @@ -196,13 +196,13 @@ u32 sub_802C1E4(u8 param_1) else { switch(GetKeyPress(&gUnknown_203B2E0->unk8)) { - case 2: + case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; - case 1: + case INPUT_A_BUTTON: PlayMenuSoundEffect(0); return 3; - case 4: + case INPUT_START_BUTTON: PlayMenuSoundEffect(4); return 4; default: diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index 8fd82a046..f6e97b5e8 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -8,11 +8,12 @@ #include "wonder_mail.h" #include "wonder_mail_3.h" #include "code_802C39C.h" +#include "menu_input.h" const struct UnkTextStruct2 gUnknown_80DFDD4 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -23,7 +24,7 @@ const struct UnkTextStruct2 gUnknown_80DFDD4 = const struct UnkTextStruct2 gUnknown_80DFDEC = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x03, 0x00, 0x03, 0x00, 0x07, 0x03, 0x03, 0x00, @@ -33,7 +34,7 @@ const struct UnkTextStruct2 gUnknown_80DFDEC = const struct UnkTextStruct2 gUnknown_80DFE04 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x15, 0x00, 0x06, 0x00, 0x07, 0x03, 0x03, 0x00, @@ -42,7 +43,7 @@ const struct UnkTextStruct2 gUnknown_80DFE04 = const struct UnkTextStruct2 gUnknown_80DFE1C = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x15, 0x00, 0x0f, 0x00, 0x07, 0x03, 0x03, 0x00, @@ -53,7 +54,7 @@ const struct UnkTextStruct2 gUnknown_80DFE1C = const struct UnkTextStruct2 gUnknown_80DFE34 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x15, 0x00, 0x0f, 0x00, 0x06, 0x03, 0x03, 0x00, @@ -104,7 +105,6 @@ ALIGNED(4) const u8 gUnknown_80E014C[] = "New Mail"; ALIGNED(4) const u8 gUnknown_80E0158[] = "Old Mail"; static const u8 wonder_mail_3_fill[] = "pksdir0"; -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern void sub_802D63C(void); extern void sub_802D5A4(void); @@ -131,7 +131,6 @@ extern u8 *sub_8096DD8(void); extern u8 sub_8096C08(u8 *); extern void sub_802C750(void); extern void sub_802D1A0(u32); -extern void sub_8012EA4(u8 *, u32); extern struct WonderMail* GetJobSlotInfo(u8); extern void sub_803B35C(void *, u32*); extern void sub_802DE84(u32 *); @@ -143,13 +142,11 @@ extern void sub_802D690(void); extern void sub_8096C80(void); extern void sub_8096D24(void); extern void sub_80141B4(const u8 *, u32, u32, u32); -extern void sub_8012D60(u8 *, struct MenuItem *, u32, u16 *, u32, u32); extern u8 *sub_8096DE8(void); extern void sub_8096A78(struct unkSubStruct_203B2F8 *); extern void sub_8014248(const char *text, u32, u32, struct MenuItem *r0, u32, u32, u32, u32, u32); struct unkStruct_803B344 *sub_803B344(u8); extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); -extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); @@ -272,13 +269,13 @@ void sub_802D1B8(void) sub_802D5A4(); gUnknown_203B2F8->unk1A8[2] = gUnknown_80DFE04; sub_8012CAC(&gUnknown_203B2F8->unk1A8[2], gUnknown_203B2F8->unk118); - gUnknown_203B2F8->unk1A8[2].unk0c = 6; + gUnknown_203B2F8->unk1A8[2].unkC = 6; break; case 0xE: sub_802D63C(); gUnknown_203B2F8->unk1A8[3] = gUnknown_80DFE1C; sub_8012CAC(&gUnknown_203B2F8->unk1A8[3], gUnknown_203B2F8->unk158); - gUnknown_203B2F8->unk1A8[3].unk0c = 6; + gUnknown_203B2F8->unk1A8[3].unkC = 6; break; default: for(iVar2 = 0; iVar2 < 4; iVar2++) @@ -391,13 +388,13 @@ void sub_802D2A8(void) break; case 0xd: sub_802C750(); - sub_8012D60(gUnknown_203B2F8->unk78,gUnknown_203B2F8->unk118,0,gUnknown_203B2F8->unk198, + sub_8012D60(&gUnknown_203B2F8->unk78,gUnknown_203B2F8->unk118,0,gUnknown_203B2F8->unk198, gUnknown_203B2F8->unk6C,2); break; case 0xe: sub_802C750(); - sub_8012EA4(gUnknown_203B2F8->unk78,0); - sub_8012D60(gUnknown_203B2F8->unkC8,gUnknown_203B2F8->unk158,0,0,4,3); + sub_8012EA4(&gUnknown_203B2F8->unk78,0); + sub_8012D60(&gUnknown_203B2F8->unkC8,gUnknown_203B2F8->unk158,0,0,4,3); break; case 0xf: sub_803B35C(GetJobSlotInfo(gUnknown_203B2F8->jobSlotIndex),&gUnknown_203B2F8->unk14); diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 69acf1e96..a3918e39c 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/input.h" #include "memory.h" #include "text.h" #include "input.h" @@ -8,6 +9,7 @@ #include "rescue_team_info.h" #include "friend_area.h" #include "item.h" +#include "menu_input.h" struct unkStruct_803B344 { @@ -33,8 +35,7 @@ struct unkStruct_203B30C u8 fill4D[0x58 - 0x4D]; u8 *unk58; u32 unk5C; - u32 unk60; - u8 fill64[0xB0 - 0x64]; + struct MenuStruct unk60; struct MenuItem unkB0[8]; struct UnkTextStruct2 unkF0[4]; }; @@ -100,7 +101,6 @@ extern struct unkStruct_203B314 *gUnknown_203B314; extern u8 sub_802FCF0(u32); extern void sub_802F9C0(void); extern void sub_802FA50(void); -extern void sub_8012D08(struct UnkTextStruct2 *, u32); extern void sub_8013818(u32 *, u32, u32, u32); extern u32 sub_802FBF4(void); extern void sub_8013878(u32 *, s32); @@ -118,18 +118,14 @@ extern void sub_801B72C(void); extern u32 sub_801B6AC(void); extern void sub_802F108(void); extern s32 sub_80144A4(s32 *); -extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern void sub_803B35C(struct WonderMail*, u32 *); extern void sub_802DE84(u32 *); -extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32); extern void sub_802CDD4(u32); extern void sub_802CED8(u32); extern void sub_802CFD0(void); extern u8 sub_802CEBC(void); extern u32 sub_802CE5C(u32); extern void sub_802CF14(void); -extern u8 sub_8012FD8(u32 *r0); -extern void sub_8013114(u32 *, s32 *); extern u32 sub_802DEE0(void); extern void sub_802DF24(void); extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); @@ -150,7 +146,7 @@ void HandleMissionReward(void); const struct UnkTextStruct2 gUnknown_80E03C4 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -158,7 +154,7 @@ const struct UnkTextStruct2 gUnknown_80E03C4 = { }; const struct UnkTextStruct2 gUnknown_80E03DC = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x03, 0x00, 0x03, 0x00, 0x07, 0x03, 0x03, 0x00, @@ -166,7 +162,7 @@ const struct UnkTextStruct2 gUnknown_80E03DC = { }; const struct UnkTextStruct2 gUnknown_80E03F4 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x15, 0x00, 0x06, 0x00, 0x07, 0x03, 0x03, 0x00, @@ -177,7 +173,7 @@ const u8 gUnknown_80E040C[] = "Send"; static const u8 wonder_mail_fill[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80E041C = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -238,7 +234,7 @@ static const u8 wonder_mail_fill2[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80E06FC = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -247,7 +243,7 @@ const struct UnkTextStruct2 gUnknown_80E06FC = { const struct UnkTextStruct2 gUnknown_80E0714 = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x0E, 0x0E, 0x0E, 0x00, @@ -255,7 +251,7 @@ const struct UnkTextStruct2 gUnknown_80E0714 = { }; const struct UnkTextStruct2 gUnknown_80E072C = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x10, 0x10, 0x10, 0x00, @@ -798,10 +794,10 @@ u32 sub_802F8A0(u8 r0) { switch(GetKeyPress(&gUnknown_203B314->unkBC)) { - case 2: + case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; - case 1: + case INPUT_A_BUTTON: PlayMenuSoundEffect(0); return 3; default: diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index 182858268..d5608e381 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -7,6 +7,7 @@ #include "code_8094F88.h" #include "constants/wonder_mail.h" #include "code_802C39C.h" +#include "menu_input.h" struct unkStruct_203B320 { @@ -33,7 +34,7 @@ extern struct unkStruct_203B480 *gUnknown_203B480; const struct UnkTextStruct2 gUnknown_80E083C = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -42,7 +43,7 @@ const struct UnkTextStruct2 gUnknown_80E083C = { const struct UnkTextStruct2 gUnknown_80E0854 = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x18, 0x11, 0x11, 0x00, @@ -96,7 +97,6 @@ extern void sub_8013984(u32 *); extern void AddMenuCursorSprite(u32 *); extern s32 sub_8013800(void *, u32); extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); -extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); diff --git a/src/wonder_mail_5.c b/src/wonder_mail_5.c index cf1e75690..bc06f252b 100644 --- a/src/wonder_mail_5.c +++ b/src/wonder_mail_5.c @@ -24,7 +24,7 @@ extern struct unkStruct_203B480 *gUnknown_203B480; const struct UnkTextStruct2 gUnknown_80E0900 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -35,7 +35,7 @@ const u8 DATA_80E0918[] = {0x01, 0x00, 0x12, 0x00}; const struct UnkTextStruct2 gUnknown_80E091C = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x1A, 0x10, 0x10, 0x00, diff --git a/src/wonder_mail_6.c b/src/wonder_mail_6.c index 9264d8d9f..65db98e1e 100644 --- a/src/wonder_mail_6.c +++ b/src/wonder_mail_6.c @@ -6,6 +6,7 @@ #include "pokemon.h" #include "menu.h" #include "code_8094F88.h" +#include "menu_input.h" extern bool8 HasNoWonderMailType(u32); @@ -14,10 +15,8 @@ struct unkStruct_203B328 // size: 0x11C u32 state; u8 mailIndex; - u32 unk8; - u8 fillC[0x58 - 0xC]; - u32 unk58; - u8 fill5C[0xA8 - 0x5C]; + struct MenuStruct unk8; + struct MenuStruct unk58; struct UnkTextStruct2 unkA8[4]; /* 0x108 */ struct OpenedFile *faceFile; /* 0x10C */ u8 *faceData; @@ -47,7 +46,7 @@ const struct MenuItem gUnknown_80E0968[] = const struct UnkTextStruct2 gUnknown_80E0990 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -55,7 +54,7 @@ const struct UnkTextStruct2 gUnknown_80E0990 = { }; const struct UnkTextStruct2 gUnknown_80E09A8 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x13, 0x00, 0x0B, 0x00, 0x08, 0x03, 0x03, 0x00, @@ -63,7 +62,7 @@ const struct UnkTextStruct2 gUnknown_80E09A8 = { }; const struct UnkTextStruct2 gUnknown_80E09C0 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x11, 0x00, 0x0F, 0x00, 0x07, 0x03, 0x03, 0x00, @@ -79,7 +78,6 @@ ALIGNED(4) const u8 gUnknown_80E0A0C[] = _( "You don{APOSTROPHE}t have any {COLOR_1 LIGHT_BLUE_2}A-OK Mail{END_COLOR_TEXT_1}."); const u8 wonder_mail_6_fill[] = "pksdir0"; -extern void sub_8012CAC(struct UnkTextStruct2 *, const struct MenuItem *); extern void sub_80306A8(s32, u32, u32, u32); extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern void sub_8031300(void); @@ -97,10 +95,6 @@ extern void sub_8030DE4(); extern void sub_8030810(u32); extern void sub_803092C(void); extern void sub_8030D40(u8, u32); -extern void sub_8012EA4(u32 *, u32); -extern void sub_8012D60(u32 *, const struct MenuItem *, u32, u32, u32, u32); -extern u8 sub_8012FD8(u32 *); -extern void sub_8013114(u32 *, s32 *); extern void sub_8095240(u8); bool8 sub_8030F58(u32 wonderMailType) diff --git a/src/wonder_mail_802DF88.c b/src/wonder_mail_802DF88.c index 7140140f4..1e201dedc 100644 --- a/src/wonder_mail_802DF88.c +++ b/src/wonder_mail_802DF88.c @@ -9,6 +9,7 @@ #include "wonder_mail.h" #include "wonder_mail_3.h" #include "code_80958E8.h" +#include "menu_input.h" struct unkStruct_203B2FC { @@ -54,7 +55,7 @@ extern u8 gUnknown_202DE58[]; const struct UnkTextStruct2 gUnknown_80E016C = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -84,7 +85,7 @@ static const u8 wonder_mail_802DF88_fill[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80E0248 = { 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -96,7 +97,7 @@ const u8 UnkData_80E0260[] = {0x01, 0x00, 0x12, 0x00}; const struct UnkTextStruct2 gUnknown_80E0264 = { 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x00, 0x02, 0x00, 0x1A, 0x10, 0x10, 0x00, @@ -123,8 +124,6 @@ struct WonderMail *GetJobSlotInfo(u8); extern void sub_8096AF8(u8 *, u32, u32); extern void sub_8096EEC(void); extern void sub_803C21C(struct WonderMail *, u32 *); -extern u8 sub_8012FD8(u8 *); -extern void sub_8013114(u8 *r0, s32 *r1); extern u32 sub_802C598(s32); extern void sub_802C688(void); extern void sub_8096C80(void); @@ -227,7 +226,7 @@ void sub_802D940(void) menuAction = 0; sub_802C598(0); - if ((sub_8012FD8(gUnknown_203B2F8->unk78) == 0) && (sub_8013114(gUnknown_203B2F8->unk78,&menuAction), menuAction != 1)) { + if ((sub_8012FD8(&gUnknown_203B2F8->unk78) == 0) && (sub_8013114(&gUnknown_203B2F8->unk78,&menuAction), menuAction != 1)) { gUnknown_203B2F8->unk6C = menuAction; } @@ -258,9 +257,9 @@ void sub_802D9F0(void) menuAction = 0; sub_802C598(0); - sub_8012FD8(gUnknown_203B2F8->unk78); - if (sub_8012FD8(gUnknown_203B2F8->unkC8) == 0) { - sub_8013114(gUnknown_203B2F8->unkC8,&menuAction); + sub_8012FD8(&gUnknown_203B2F8->unk78); + if (sub_8012FD8(&gUnknown_203B2F8->unkC8) == 0) { + sub_8013114(&gUnknown_203B2F8->unkC8,&menuAction); } switch(menuAction)