diff --git a/asm/code_80140DC.s b/asm/code_80140DC.s index c7e8fd940..83f9a2b81 100644 --- a/asm/code_80140DC.s +++ b/asm/code_80140DC.s @@ -2,1398 +2,9 @@ #include "asm/macros.inc" .syntax unified - .text - thumb_func_start sub_8014490 -sub_8014490: - ldr r0, _0801449C - movs r1, 0 - str r1, [r0] - ldr r0, _080144A0 - str r1, [r0] - bx lr - .align 2, 0 -_0801449C: .4byte gUnknown_202E744 -_080144A0: .4byte gUnknown_202EC1C - thumb_func_end sub_8014490 - - thumb_func_start sub_80144A4 -sub_80144A4: - push {lr} - adds r1, r0, 0 - cmp r1, 0 - beq _080144B2 - ldr r0, _080144BC - ldr r0, [r0] - str r0, [r1] -_080144B2: - ldr r0, _080144C0 - ldr r0, [r0] - pop {r1} - bx r1 - .align 2, 0 -_080144BC: .4byte gUnknown_202EC1C -_080144C0: .4byte gUnknown_202E744 - thumb_func_end sub_80144A4 - - thumb_func_start DrawDialogueBoxString -DrawDialogueBoxString: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - movs r0, 0x1 - mov r10, r0 - ldr r1, _080144F4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_080144DC: - ldr r0, _080144F8 - ldr r1, [r0] - adds r3, r0, 0 - cmp r1, 0xB - bls _080144E8 - b _08014A6A -_080144E8: - lsls r0, r1, 2 - ldr r1, _080144FC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080144F4: .4byte gUnknown_202E784 -_080144F8: .4byte gUnknown_202E744 -_080144FC: .4byte _08014500 - .align 2, 0 -_08014500: - .4byte _08014A72 - .4byte _08014530 - .4byte _08014708 - .4byte _08014A38 - .4byte _08014A48 - .4byte _08014A60 - .4byte _08014778 - .4byte _080147E2 - .4byte _080147E2 - .4byte _080147E2 - .4byte _080149D8 - .4byte _08014A04 -_08014530: - ldr r0, _08014540 - ldr r6, [r0] - ldr r0, _08014544 - ldrb r0, [r0] - cmp r0, 0 - beq _0801457C - ldr r7, _08014548 - b _08014580 - .align 2, 0 -_08014540: .4byte gUnknown_202E794 -_08014544: .4byte gUnknown_202E790 -_08014548: .4byte 0x0001869f -_0801454C: - str r2, [r3, 0x1C] - adds r1, r3, 0 - adds r1, 0x20 - movs r0, 0x1 - strb r0, [r1] - ldr r1, _0801456C - movs r0, 0x8 - str r0, [r1] - ldr r0, _08014570 - strb r2, [r0] - ldr r1, _08014574 - ldr r0, _08014578 - ldr r0, [r0] - str r0, [r1] - b _0801466C - .align 2, 0 -_0801456C: .4byte gUnknown_202E744 -_08014570: .4byte gUnknown_202E791 -_08014574: .4byte gUnknown_202E780 -_08014578: .4byte gUnknown_202E738 -_0801457C: - ldr r0, _08014594 - ldr r7, [r0] -_08014580: - ldr r1, _08014598 - movs r0, 0 - str r0, [r1, 0x2C] - bl sub_80073B8 - ldr r1, _0801459C - mov r8, r1 - ldr r2, _080145A0 - mov r9, r2 - b _08014652 - .align 2, 0 -_08014594: .4byte gUnknown_202E788 -_08014598: .4byte gUnknown_202E748 -_0801459C: .4byte gUnknown_202E744 -_080145A0: .4byte gUnknown_202E780 -_080145A4: - adds r0, r4, 0 - adds r0, 0x20 - ldrb r5, [r0] - cmp r5, 0 - beq _080145EC - movs r3, 0x2 - ldrsh r0, [r4, r3] - cmp r0, 0x22 - ble _080145CC - movs r0, 0x8 - mov r4, r8 - str r0, [r4] - ldr r0, _080145C8 - ldr r0, [r0] - mov r1, r9 - str r0, [r1] - b _080145DA - .align 2, 0 -_080145C8: .4byte gUnknown_202E738 -_080145CC: - movs r0, 0x7 - mov r2, r8 - str r0, [r2] - ldr r0, _080145E4 - ldr r0, [r0] - mov r3, r9 - str r0, [r3] -_080145DA: - ldr r1, _080145E8 - movs r0, 0 - strb r0, [r1] - b _0801466C - .align 2, 0 -_080145E4: .4byte gUnknown_202E73C -_080145E8: .4byte gUnknown_202E791 -_080145EC: - ldrb r0, [r6] - cmp r0, 0 - beq _0801466C - cmp r0, 0xD - beq _080145FA - cmp r0, 0xA - bne _08014608 -_080145FA: - movs r0, 0x4 - strh r0, [r4] - ldrh r0, [r4, 0x2] - adds r0, 0xB - strh r0, [r4, 0x2] - adds r6, 0x1 - b _08014630 -_08014608: - adds r0, r6, 0 - add r1, sp, 0x4 - bl xxx_get_next_char_from_string - adds r6, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - ldr r2, [sp, 0x4] - ldr r3, [r4, 0x10] - str r5, [sp] - bl xxx_call_draw_char - ldrh r1, [r4] - adds r1, r0 - strh r1, [r4] - ldr r0, _08014694 - ldr r0, [r0] - str r0, [r4, 0x2C] -_08014630: - ldr r3, _08014698 - movs r4, 0x2 - ldrsh r0, [r3, r4] - cmp r0, 0x22 - ble _08014650 - ldr r0, _0801469C - ldrh r1, [r0] - movs r0, 0x10 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - bne _0801464C - b _0801454C -_0801464C: - movs r0, 0x4 - strh r0, [r3, 0x2] -_08014650: - subs r7, 0x1 -_08014652: - cmp r7, 0 - ble _0801466C - ldr r4, _08014698 - adds r0, r6, 0 - adds r1, r4, 0 - bl xxx_handle_format_global - adds r6, r0, 0 - adds r0, r4, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0 - beq _080145A4 -_0801466C: - movs r0, 0 - bl sub_80073E0 - ldr r4, _080146A0 - str r6, [r4] - ldr r0, _080146A4 - bl sub_801317C - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0 - bne _080146BC - ldr r0, _080146A8 - ldr r0, [r0] - cmp r0, 0 - beq _080146B0 - ldr r1, _080146AC - movs r0, 0x3 - str r0, [r1] - b _08014A72 - .align 2, 0 -_08014694: .4byte gUnknown_202E78C -_08014698: .4byte gUnknown_202E748 -_0801469C: .4byte gUnknown_202E77C -_080146A0: .4byte gUnknown_202E794 -_080146A4: .4byte gUnknown_202EC28 -_080146A8: .4byte gUnknown_202EC14 -_080146AC: .4byte gUnknown_202E744 -_080146B0: - ldr r1, _080146B8 - movs r0, 0x6 - str r0, [r1] - b _08014A72 - .align 2, 0 -_080146B8: .4byte gUnknown_202E744 -_080146BC: - ldr r0, _080146E8 - movs r2, 0 - str r2, [r0, 0x30] - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0 - beq _080146FC - ldr r1, _080146EC - ldr r0, [r1] - cmp r0, 0x1 - beq _080146D4 - b _08014A72 -_080146D4: - movs r0, 0x7 - str r0, [r1] - ldr r0, _080146F0 - strb r2, [r0] - ldr r1, _080146F4 - ldr r0, _080146F8 - ldr r0, [r0] - str r0, [r1] - b _08014A72 - .align 2, 0 -_080146E8: .4byte gUnknown_202E748 -_080146EC: .4byte gUnknown_202E744 -_080146F0: .4byte gUnknown_202E791 -_080146F4: .4byte gUnknown_202E780 -_080146F8: .4byte gUnknown_202E738 -_080146FC: - ldr r1, _08014704 - movs r0, 0x2 - b _08014A68 - .align 2, 0 -_08014704: .4byte gUnknown_202E744 -_08014708: - ldr r4, _08014760 - ldrh r1, [r4] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08014718 - bl sub_8011A04 -_08014718: - ldrh r1, [r4] - movs r0, 0x2 - ands r0, r1 - ldr r2, _08014764 - cmp r0, 0 - bne _08014742 - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08014742 - ldr r0, _08014768 - ldrh r1, [r0, 0x2] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _08014742 - ldr r0, _0801476C - movs r1, 0x1 - strb r1, [r0] - ldr r0, _08014770 - str r0, [r2, 0x30] -_08014742: - ldr r1, [r2, 0x30] - adds r1, 0x1 - str r1, [r2, 0x30] - ldr r0, [r2, 0x2C] - cmp r1, r0 - bgt _08014750 - b _08014A72 -_08014750: - ldr r1, _08014774 - movs r0, 0x1 - str r0, [r1] - adds r1, r2, 0 - adds r1, 0x21 - movs r0, 0 - strb r0, [r1] - b _08014A6A - .align 2, 0 -_08014760: .4byte gUnknown_202E77C -_08014764: .4byte gUnknown_202E748 -_08014768: .4byte gRealInputs -_0801476C: .4byte gUnknown_202E790 -_08014770: .4byte 0x0001869f -_08014774: .4byte gUnknown_202E744 -_08014778: - ldr r0, _080147B4 - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _080147DC - movs r0, 0x9 - str r0, [r3] - ldr r1, _080147B8 - movs r0, 0 - strb r0, [r1] - ldr r0, _080147BC - ldr r1, [r0] - cmp r1, 0 - ble _080147C8 - ldr r2, _080147C0 - ldr r0, _080147C4 - ldr r0, [r0] - subs r0, r1, r0 - str r0, [r2] - cmp r0, 0 - blt _080147A8 - b _08014A6A -_080147A8: - movs r0, 0xB - str r0, [r3] - movs r0, 0 - str r0, [r2] - b _08014A6A - .align 2, 0 -_080147B4: .4byte gUnknown_202E77C -_080147B8: .4byte gUnknown_202E791 -_080147BC: .4byte gUnknown_202E740 -_080147C0: .4byte gUnknown_202E780 -_080147C4: .4byte gUnknown_202E784 -_080147C8: - ldr r0, _080147D4 - ldr r1, _080147D8 - ldr r1, [r1] - str r1, [r0] - b _08014A6A - .align 2, 0 -_080147D4: .4byte gUnknown_202E780 -_080147D8: .4byte gUnknown_202E738 -_080147DC: - movs r0, 0xB - str r0, [r3] - b _08014A6A -_080147E2: - movs r5, 0 - ldr r0, _0801481C - adds r0, 0x20 - strb r5, [r0] - ldr r4, _08014820 - adds r0, r4, 0 - movs r1, 0 - bl nullsub_34 - ldr r0, _08014824 - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08014802 - b _0801494C -_08014802: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0801482C - ldr r1, _08014828 - ldr r0, [r1] - cmp r0, 0 - bgt _08014814 - b _0801494C -_08014814: - subs r0, 0x1 - str r0, [r1] - b _08014856 - .align 2, 0 -_0801481C: .4byte gUnknown_202E748 -_08014820: .4byte gUnknown_202EC28 -_08014824: .4byte gUnknown_202E77C -_08014828: .4byte gUnknown_202E780 -_0801482C: - ldr r2, _080148E4 - ldrh r1, [r2, 0x2] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0801483A - b _0801494C -_0801483A: - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _08014842 - b _0801494C -_08014842: - ldrh r1, [r2] - movs r0, 0xF2 - ands r0, r1 - cmp r0, 0x2 - bne _0801484E - b _0801494C -_0801484E: - ldrb r0, [r4, 0x5] - cmp r0, 0 - beq _08014856 - movs r5, 0x1 -_08014856: - cmp r5, 0 - bne _0801494C - ldr r1, _080148E8 - ldrb r0, [r1] - adds r2, r0, 0x1 - strb r2, [r1] - ldr r0, _080148EC - ldrh r7, [r0] - movs r0, 0x2 - ands r0, r7 - cmp r0, 0 - beq _08014870 - b _08014A72 -_08014870: - movs r0, 0x8 - ands r2, r0 - cmp r2, 0 - bne _0801487A - b _08014A72 -_0801487A: - ldr r3, _080148F0 - ldrh r1, [r3] - ldr r0, _080148F4 - ands r0, r1 - ldr r1, _080148F8 - ands r0, r1 - ldr r4, _080148FC - ands r0, r4 - ldr r1, _08014900 - ands r0, r1 - ldr r1, _08014904 - ands r0, r1 - movs r1, 0x80 - lsls r1, 7 - ldr r2, _08014908 - ands r0, r2 - orrs r0, r1 - strh r0, [r3] - ldrh r0, [r3, 0x2] - ldr r5, _0801490C - ands r5, r0 - ands r5, r2 - strh r5, [r3, 0x2] - 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 r6, 0xF - lsls r1, r6, 12 - ldr r2, _08014910 - ands r0, r2 - movs r4, 0 - mov r8, r4 - orrs r0, r1 - strh r0, [r3, 0x4] - movs r0, 0x10 - ands r0, r7 - adds r4, r3, 0 - cmp r0, 0 - beq _08014914 - movs r2, 0xF0 - lsls r2, 3 - ldrh r1, [r4, 0x6] - adds r0, r6, 0 - ands r0, r1 - orrs r0, r2 - strh r0, [r4, 0x6] - movs r0, 0x70 - b _08014932 - .align 2, 0 -_080148E4: .4byte gRealInputs -_080148E8: .4byte gUnknown_202E791 -_080148EC: .4byte gUnknown_202E77C -_080148F0: .4byte gUnknown_202E6E0 -_080148F4: .4byte 0x0000feff -_080148F8: .4byte 0x0000fdff -_080148FC: .4byte 0x0000f3ff -_08014900: .4byte 0x0000efff -_08014904: .4byte 0x0000dfff -_08014908: .4byte 0x00003fff -_0801490C: .4byte 0x0000c1ff -_08014910: .4byte 0x00000fff -_08014914: - ldr r3, _08014944 - movs r0, 0xA - ldrsh r1, [r3, r0] - adds r1, 0x1 - ands r1, r2 - lsls r1, 4 - ldrh r2, [r4, 0x6] - adds r0, r6, 0 - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x6] - movs r1, 0x8 - ldrsh r0, [r3, r1] - ldr r1, _08014948 - ands r0, r1 -_08014932: - strh r0, [r4, 0x2] - movs r1, 0x80 - lsls r1, 1 - adds r0, r4, 0 - movs r2, 0 - movs r3, 0 - bl AddSprite - b _08014A72 - .align 2, 0 -_08014944: .4byte gUnknown_202E748 -_08014948: .4byte 0x000001ff -_0801494C: - ldr r0, _08014960 - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0 - bne _08014968 - ldr r1, _08014964 - movs r0, 0xB - str r0, [r1] - b _080149BA - .align 2, 0 -_08014960: .4byte gUnknown_202E794 -_08014964: .4byte gUnknown_202E744 -_08014968: - ldr r4, _08014974 - ldr r0, [r4] - cmp r0, 0x9 - bne _08014978 - movs r0, 0xB - b _080149B8 - .align 2, 0 -_08014974: .4byte gUnknown_202E744 -_08014978: - cmp r0, 0x8 - bne _080149B6 - ldr r2, _080149A0 - movs r1, 0x4 - strh r1, [r2] - movs r3, 0x2 - ldrsh r0, [r2, r3] - cmp r0, 0x22 - ble _080149B6 - strh r1, [r2, 0x2] - ldr r0, _080149A4 - ldrh r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080149A8 -_08014998: - movs r0, 0 - bl CallPrepareTextbox_8008C54 - b _080149B6 - .align 2, 0 -_080149A0: .4byte gUnknown_202E748 -_080149A4: .4byte gUnknown_202E77C -_080149A8: - ldr r1, [r2, 0x1C] - cmp r1, 0 - bne _08014998 - movs r0, 0xA - str r0, [r4] - str r1, [r2, 0x28] - b _080149BA -_080149B6: - movs r0, 0x1 -_080149B8: - str r0, [r4] -_080149BA: - ldr r1, _080149D0 - movs r0, 0x70 - strh r0, [r1, 0x8] - ldr r0, _080149D4 - movs r4, 0x2 - ldrsh r0, [r0, r4] - lsls r0, 3 - adds r0, 0x22 - strh r0, [r1, 0xA] - b _08014A72 - .align 2, 0 -_080149D0: .4byte gUnknown_202E748 -_080149D4: .4byte gUnknown_2027370 -_080149D8: - ldr r4, _080149F8 - ldr r0, [r4, 0x28] - adds r0, 0x1 - str r0, [r4, 0x28] - ldr r0, _080149FC - ldr r1, [r0] - movs r0, 0 - bl _call_via_r1 - ldr r0, [r4, 0x28] - cmp r0, 0x11 - ble _08014A72 - ldr r1, _08014A00 - movs r0, 0x1 - str r0, [r1] - b _08014A72 - .align 2, 0 -_080149F8: .4byte gUnknown_202E748 -_080149FC: .4byte gUnknown_203B088 -_08014A00: .4byte gUnknown_202E744 -_08014A04: - ldr r0, _08014A2C - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - beq _08014A34 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl xxx_call_save_unk_text_struct_800641C - ldr r1, _08014A30 - movs r0, 0 - str r0, [r1] - b _08014A72 - .align 2, 0 -_08014A2C: .4byte gUnknown_202E77C -_08014A30: .4byte gUnknown_202E744 -_08014A34: - str r0, [r3] - b _08014A72 -_08014A38: - bl sub_8014A88 - ldr r1, _08014A44 - movs r0, 0x4 - str r0, [r1] - b _08014A72 - .align 2, 0 -_08014A44: .4byte gUnknown_202E744 -_08014A48: - bl sub_8014B94 - lsls r0, 24 - cmp r0, 0 - beq _08014A72 - ldr r1, _08014A5C - movs r0, 0x5 - str r0, [r1] - b _08014A72 - .align 2, 0 -_08014A5C: .4byte gUnknown_202E744 -_08014A60: - bl nullsub_35 - ldr r1, _08014A84 - movs r0, 0xB -_08014A68: - str r0, [r1] -_08014A6A: - mov r0, r10 - cmp r0, 0 - beq _08014A72 - b _080144DC -_08014A72: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08014A84: .4byte gUnknown_202E744 - thumb_func_end DrawDialogueBoxString - - thumb_func_start sub_8014A88 -sub_8014A88: - push {r4-r7,lr} - sub sp, 0x88 - ldr r0, _08014A98 - ldr r4, [r0] - movs r5, 0 - movs r7, 0 - movs r6, 0 - b _08014ABE - .align 2, 0 -_08014A98: .4byte gUnknown_202EC14 -_08014A9C: - adds r5, 0xC - ldr r0, [r4] - add r1, sp, 0x8 - add r2, sp, 0x88 - movs r3, 0 - bl xxx_format_string - add r0, sp, 0x8 - bl sub_8008ED0 - cmp r7, r0 - bge _08014AB6 - adds r7, r0, 0 -_08014AB6: - adds r4, 0x8 - adds r6, 0x1 - cmp r6, 0x9 - bgt _08014AC4 -_08014ABE: - ldr r0, [r4] - cmp r0, 0 - bne _08014A9C -_08014AC4: - adds r0, r5, 0 - cmp r5, 0 - bge _08014ACC - adds r0, r5, 0x7 -_08014ACC: - asrs r2, r0, 3 - movs r0, 0x7 - ands r5, r0 - cmp r5, 0 - beq _08014AD8 - adds r2, 0x1 -_08014AD8: - ldr r4, _08014B74 - ldr r0, _08014B78 - ldr r0, [r0] - str r0, [r4, 0x34] - adds r1, r7, 0 - cmp r1, 0 - bge _08014AE8 - adds r1, 0x7 -_08014AE8: - asrs r1, 3 - adds r1, 0x2 - strh r1, [r4, 0x3C] - adds r0, r4, 0 - adds r0, 0x40 - strh r2, [r0] - strh r2, [r4, 0x3E] - movs r0, 0x1C - subs r0, r1 - strh r0, [r4, 0x38] - movs r0, 0xE - subs r0, r2 - strh r0, [r4, 0x3A] - movs r0, 0x80 - strb r0, [r4] - movs r0, 0xC0 - strb r0, [r4, 0x18] - ldr r5, _08014B7C - ldr r0, [r5] - cmp r0, 0 - beq _08014B1E - adds r1, r4, 0 - adds r1, 0x48 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} -_08014B1E: - bl ResetUnusedInputStruct - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0 - bl xxx_call_save_unk_text_struct_800641C - ldr r0, _08014B80 - ldr r1, _08014B84 - ldr r1, [r1] - ldr r2, _08014B88 - ldr r3, _08014B8C - ldr r3, [r3] - ldr r4, _08014B90 - ldr r4, [r4] - str r4, [sp] - movs r4, 0x2 - str r4, [sp, 0x4] - bl sub_8012D60 - ldr r0, [r5] - cmp r0, 0 - beq _08014B6A - movs r0, 0x3 - bl sub_80073B8 - ldr r0, [r5] - ldr r2, [r0, 0x18] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - movs r1, 0x2 - movs r3, 0x3 - bl PrintStringOnWindow - movs r0, 0x3 - bl sub_80073E0 -_08014B6A: - add sp, 0x88 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08014B74: .4byte gUnknown_203B198 -_08014B78: .4byte gUnknown_202EC10 -_08014B7C: .4byte gUnknown_202EC20 -_08014B80: .4byte gUnknown_202EBC0 -_08014B84: .4byte gUnknown_202EC14 -_08014B88: .4byte gUnknown_80D48A0 -_08014B8C: .4byte gUnknown_202EC18 -_08014B90: .4byte gUnknown_202EC1C - thumb_func_end sub_8014A88 - - thumb_func_start sub_8014B94 -sub_8014B94: - push {r4,lr} - ldr r4, _08014BA8 - adds r0, r4, 0 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - beq _08014BAC - movs r0, 0 - b _08014BB6 - .align 2, 0 -_08014BA8: .4byte gUnknown_202EBC0 -_08014BAC: - ldr r1, _08014BBC - adds r0, r4, 0 - bl sub_8013114 - movs r0, 0x1 -_08014BB6: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08014BBC: .4byte gUnknown_202EC1C - thumb_func_end sub_8014B94 - - thumb_func_start nullsub_35 -nullsub_35: - bx lr - thumb_func_end nullsub_35 - - thumb_func_start xxx_format_string -xxx_format_string: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x40 - adds r5, r0, 0 - str r1, [sp, 0x3C] - adds r7, r2, 0 - lsls r3, 16 - lsrs r3, 16 - mov r8, r3 - movs r0, 0x1 - mov r10, r0 - mov r9, r0 - subs r7, 0x1 - b _08014F62 -_08014BE6: - movs r1, 0x1 - b _08014C2C -_08014BEA: - mov r0, r10 - cmp r0, 0 - beq _08014C24 - movs r1, 0 - mov r10, r1 - mov r9, r1 - movs r0, 0x8 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - beq _08014C2E - ldr r0, _08014C1C - add r4, sp, 0x3C - adds r1, r4, 0 - adds r2, r7, 0 - mov r3, r8 - bl AppendString_8014FA8 - ldr r0, _08014C20 - adds r1, r4, 0 - adds r2, r7, 0 - mov r3, r8 - bl AppendString_8014FA8 - b _08014C2E - .align 2, 0 -_08014C1C: .4byte gUnknown_202E5D8 -_08014C20: .4byte gUnknown_80D48F4 -_08014C24: - mov r0, r9 - cmp r0, 0 - beq _08014C2E - movs r1, 0 -_08014C2C: - mov r9, r1 -_08014C2E: - cmp r6, 0x23 - bne _08014C5A - ldrb r3, [r5, 0x1] - cmp r3, 0x50 - beq _08014C3C - cmp r3, 0x70 - bne _08014C42 -_08014C3C: - movs r0, 0x1 - mov r10, r0 - mov r9, r0 -_08014C42: - ldr r1, [sp, 0x3C] - adds r2, r1, 0x1 - cmp r2, r7 - bcs _08014C56 - movs r0, 0x23 - strb r0, [r1] - str r2, [sp, 0x3C] - strb r3, [r1, 0x1] - adds r0, r2, 0x1 - str r0, [sp, 0x3C] -_08014C56: - adds r5, 0x2 - b _08014F62 -_08014C5A: - cmp r6, 0x24 - beq _08014C60 - b _08014F26 -_08014C60: - movs r4, 0 - adds r5, 0x1 - ldrb r0, [r5] - subs r0, 0x24 - cmp r0, 0x52 - bls _08014C6E - b _08014F0E -_08014C6E: - lsls r0, 2 - ldr r1, _08014C78 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08014C78: .4byte _08014C7C - .align 2, 0 -_08014C7C: - .4byte _08014F04 - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0C - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014EC4 - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014E60 - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014E54 - .4byte _08014DC8 - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014DDC - .4byte _08014E10 - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014F0E - .4byte _08014E24 - .4byte _08014F0E - .4byte _08014E84 -_08014DC8: - adds r5, 0x1 - ldrb r0, [r5] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 4 - ldr r0, _08014DD8 - adds r4, r1, r0 - b _08014F0C - .align 2, 0 -_08014DD8: .4byte gUnknown_202CF58 -_08014DDC: - adds r5, 0x1 - ldrb r0, [r5] - cmp r0, 0x6D - bne _08014DFC - bl sub_808D3BC - adds r1, r0, 0 - ldr r4, _08014DF8 - adds r0, r4, 0 - movs r2, 0 - bl PrintColoredPokeNameToBuffer - b _08014F0E - .align 2, 0 -_08014DF8: .4byte gUnknown_202EB80 -_08014DFC: - ldrb r0, [r5] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 4 - ldr r0, _08014E0C - adds r4, r1, r0 - b _08014F0C - .align 2, 0 -_08014E0C: .4byte gUnknown_202D098 -_08014E10: - adds r5, 0x1 - ldrb r0, [r5] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 4 - ldr r0, _08014E20 - adds r4, r1, r0 - b _08014F0C - .align 2, 0 -_08014E20: .4byte gFileCache + 0x110 -_08014E24: - adds r5, 0x1 - movs r0, 0 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - beq _08014E40 - ldr r0, _08014E3C - bl sub_80920D8 - b _08014E48 - .align 2, 0 -_08014E3C: .4byte gTeamName -_08014E40: - ldr r0, _08014E4C - ldr r1, _08014E50 - bl strcpy -_08014E48: - ldr r4, _08014E4C - b _08014F0E - .align 2, 0 -_08014E4C: .4byte gTeamName -_08014E50: .4byte gUnknown_80D48F8 -_08014E54: - adds r5, 0x1 - ldr r4, _08014E5C - b _08014F0E - .align 2, 0 -_08014E5C: .4byte gUnknown_202E628 -_08014E60: - adds r5, 0x1 - ldr r1, _08014E7C - ldr r2, _08014E80 - ldrb r0, [r5] - subs r0, 0x30 - lsls r0, 2 - adds r0, r2 - adds r5, 0x1 - ldr r2, [r0] - mov r0, sp - bl sprintfStatic -_08014E78: - mov r4, sp - b _08014F0E - .align 2, 0 -_08014E7C: .4byte gUnknown_80D4900 -_08014E80: .4byte gFormatData_202DE30 -_08014E84: - adds r5, 0x1 - ldr r1, _08014EBC - ldrb r0, [r5] - subs r0, 0x30 - lsls r0, 2 - adds r0, r1 - ldr r3, [r0] - adds r5, 0x1 - ldr r1, _08014EC0 - ldrb r2, [r5] - subs r2, 0x30 - adds r5, 0x1 - mov r0, sp - bl sprintfStatic - mov r0, sp - ldrb r1, [r0] - cmp r1, 0 - beq _08014E78 - movs r2, 0x60 -_08014EAC: - cmp r1, 0x20 - bne _08014EB2 - strb r2, [r0] -_08014EB2: - adds r0, 0x1 - ldrb r1, [r0] - cmp r1, 0 - bne _08014EAC - b _08014E78 - .align 2, 0 -_08014EBC: .4byte gFormatData_202DE30 -_08014EC0: .4byte gUnknown_80D4904 -_08014EC4: - adds r5, 0x1 - ldr r1, _08014EFC - ldrb r0, [r5] - subs r0, 0x30 - lsls r0, 2 - adds r0, r1 - ldr r3, [r0] - adds r5, 0x1 - ldr r1, _08014F00 - ldrb r2, [r5] - subs r2, 0x30 - adds r5, 0x1 - mov r0, sp - bl sprintfStatic - mov r0, sp - ldrb r1, [r0] - cmp r1, 0 - beq _08014E78 - movs r2, 0x60 -_08014EEC: - cmp r1, 0x20 - bne _08014EF2 - strb r2, [r0] -_08014EF2: - adds r0, 0x1 - ldrb r1, [r0] - cmp r1, 0 - bne _08014EEC - b _08014E78 - .align 2, 0 -_08014EFC: .4byte gFormatData_202DE30 -_08014F00: .4byte gUnknown_80D4908 -_08014F04: - ldr r4, _08014F08 - b _08014F0E - .align 2, 0 -_08014F08: .4byte gUnknown_80D4910 -_08014F0C: - adds r5, 0x1 -_08014F0E: - cmp r4, 0 - beq _08014F62 - add r1, sp, 0x3C - adds r0, r4, 0 - adds r2, r7, 0 - mov r3, r8 - bl AppendString_8014FA8 - lsls r0, 24 - cmp r0, 0 - bne _08014F7E - b _08014F62 -_08014F26: - adds r0, r6, 0 - adds r0, 0x7F - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bls _08014F36 - cmp r6, 0x87 - bne _08014F54 -_08014F36: - ldr r0, [sp, 0x3C] - cmp r0, r7 - bcs _08014F42 - strb r6, [r0] - adds r0, 0x1 - str r0, [sp, 0x3C] -_08014F42: - adds r5, 0x1 - ldrb r1, [r5] - cmp r1, 0 - beq _08014F7E - ldr r0, [sp, 0x3C] - cmp r0, r7 - bcs _08014F60 - strb r1, [r0] - b _08014F5C -_08014F54: - ldr r0, [sp, 0x3C] - cmp r0, r7 - bcs _08014F60 - strb r6, [r0] -_08014F5C: - adds r0, 0x1 - str r0, [sp, 0x3C] -_08014F60: - adds r5, 0x1 -_08014F62: - ldrb r6, [r5] - cmp r6, 0 - beq _08014F7E - cmp r6, 0xD - beq _08014F72 - cmp r6, 0xA - beq _08014F72 - b _08014BEA -_08014F72: - movs r0, 0x80 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - bne _08014F7E - b _08014BE6 -_08014F7E: - ldr r0, [sp, 0x3C] - movs r1, 0 - strb r1, [r0] - ldrb r0, [r5] - cmp r0, 0xD - bne _08014F8C - adds r5, 0x1 -_08014F8C: - ldrb r0, [r5] - cmp r0, 0xA - bne _08014F94 - adds r5, 0x1 -_08014F94: - adds r0, r5, 0 - add sp, 0x40 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end xxx_format_string - - thumb_func_start AppendString_8014FA8 -AppendString_8014FA8: - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r3, 16 - lsrs r3, 16 - ldr r2, [r5] - ldrb r1, [r4] - cmp r1, 0 - beq _08014FE4 - movs r0, 0x80 - ands r0, r3 - lsls r0, 16 - lsrs r3, r0, 16 -_08014FC4: - cmp r3, 0 - beq _08014FD2 - cmp r1, 0xD - bne _08014FD2 - str r2, [r5] - movs r0, 0x1 - b _08014FE8 -_08014FD2: - cmp r2, r6 - bcs _08014FDC - ldrb r0, [r4] - strb r0, [r2] - adds r2, 0x1 -_08014FDC: - adds r4, 0x1 - ldrb r1, [r4] - cmp r1, 0 - bne _08014FC4 -_08014FE4: - str r2, [r5] - movs r0, 0 -_08014FE8: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end AppendString_8014FA8 - thumb_func_start PrintFormatStringOnWindow PrintFormatStringOnWindow: push {r4-r6,lr} diff --git a/include/code_80130A8.h b/include/code_80130A8.h index 211590a6a..dd39e14da 100644 --- a/include/code_80130A8.h +++ b/include/code_80130A8.h @@ -32,16 +32,16 @@ void sub_8013F84(void); void sub_80140B4(UnkTextStruct2 *); void sub_80140DC(void); void sub_8014114(void); -void CreateDialogueBoxAndPortrait(const u8 *, u32, struct MonPortraitMsg *, u16); +void CreateDialogueBoxAndPortrait(const u8 *text, void *param_2, struct MonPortraitMsg *monPortraitPtr, u16 param_4); void CreateYesNoDialogueBoxAndPortrait_DefaultYes(const u8 *text, struct MonPortraitMsg *monPortraitPtr, u16 param_3); void CreateYesNoDialogueBoxAndPortrait_DefaultNo(const u8 *text, struct MonPortraitMsg *monPortraitPtr, u16 param_3); -void CreateMenuDialogueBoxAndPortrait(const u8 *text, u32 a1, u32 r9, const MenuItem *menuItems, void *arg_0, u32 a5, u32 unknownUnused, struct MonPortraitMsg *monPortraitPtr, u16 r10); +void CreateMenuDialogueBoxAndPortrait(const u8 *text, void *a1, u32 r9, const MenuItem *menuItems, void *arg_0, u32 a5, u32 unknownUnused, struct MonPortraitMsg *monPortraitPtr, u16 r10); s32 sub_80144A4(s32 *); void sub_80151C0(u32, u8 *); u32 sub_80154F0(void); void sub_80155F0(void); void DrawDialogueBoxString(void); void PrintFormatStringOnWindow(u32, u32, const u8 *, u32 windowId, u32); -u8 *xxx_format_string(const u8 *, u8 *, u8 *, u32); +const u8 *xxx_format_string(const u8 *str, u8 *a1, u8 *r7, u16 r8); #endif // GUARD_CODE_80130A8_H diff --git a/include/menu_input.h b/include/menu_input.h index 0f7415b78..0ffe36cda 100644 --- a/include/menu_input.h +++ b/include/menu_input.h @@ -12,8 +12,8 @@ void sub_8012C60(u32 x, u32 y, u32 param_3, u32 color, u32 param_5); void sub_8012CAC(UnkTextStruct2 *param_1, const MenuItem *param_2); void sub_8012D08(UnkTextStruct2 *param_1, s32 param_2); void sub_8012D34(UnkTextStruct2 *param_1, s32 param_2); -void sub_8012D60(MenuStruct *param_1, const MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 menuAction, s32 index); -void sub_8012E04(MenuStruct *param_1, const MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 menuAction, s32 index); +void sub_8012D60(MenuStruct *param_1, const MenuItem *menuItems, const u32 *colorArray, u16 *param_4, s32 menuAction, s32 index); +void sub_8012E04(MenuStruct *param_1, const MenuItem *menuItems, const u32 *colorArray, u16 *param_4, s32 menuAction, s32 index); void sub_8012EA4(MenuStruct *param_1, bool8 r1); void sub_8012EBC(MenuStruct *param_1); bool8 sub_8012FD8(MenuStruct *param_1); diff --git a/include/structs/menu.h b/include/structs/menu.h index 1d16a514b..96391e592 100644 --- a/include/structs/menu.h +++ b/include/structs/menu.h @@ -13,7 +13,8 @@ typedef struct MenuInputStructSub /* 0x2 */ u8 b_button; /* 0x3 */ u8 dpad_right; /* 0x4 */ u8 dpad_left; - u8 fill5[3]; + /* 0x5 */ u8 unk5; + u8 fill6[2]; u16 unk8; s16 unkA; } MenuInputStructSub; diff --git a/include/text2.h b/include/text2.h index c55f610e5..8ded6267b 100644 --- a/include/text2.h +++ b/include/text2.h @@ -52,15 +52,9 @@ struct UnkDrawStringStruct u8 fill22; u8 fill23; const u8* (*unk24)(const u8 *, const u8 *, struct UnkDrawStringStruct*); - u8 fill28; - u8 fill29; - u8 fill2A; - u8 fill2B; - u32 unk2C; - u8 fill30; - u8 fill31; - u8 fill32; - u8 fill33; + s32 unk28; + s32 unk2C; + s32 unk30; u32 unk34; }; diff --git a/src/code_80140DC.c b/src/code_80140DC.c index 33b6cc351..7fac5314e 100644 --- a/src/code_80140DC.c +++ b/src/code_80140DC.c @@ -10,6 +10,10 @@ #include "text1.h" #include "text2.h" #include "game_options.h" +#include "pokemon.h" +#include "code_800D090.h" +#include "rescue_team_info.h" +#include "event_flag.h" extern s32 gUnknown_202E738; extern s32 gUnknown_202E73C; @@ -96,57 +100,43 @@ void sub_801416C(s32 param_1,s32 param_2) gUnknown_202E73C = (param_2 < 0 ) ? 0 : param_2; } -void CreateDialogueBoxAndPortrait(const u8 *text, u32 param_2, struct MonPortraitMsg *monPortraitPtr, u16 param_4) +void CreateDialogueBoxAndPortrait(const u8 *text, void *param_2, struct MonPortraitMsg *monPortraitPtr, u16 param_4) { CreateMenuDialogueBoxAndPortrait(text, param_2, -1, NULL, NULL, 3, 0, monPortraitPtr, param_4); } void CreateYesNoDialogueBoxAndPortrait_DefaultYes(const u8 *text, struct MonPortraitMsg *monPortraitPtr, u16 param_3) { - CreateMenuDialogueBoxAndPortrait(text, 0, -1, gUnknown_80D485C, NULL, 3, 0, monPortraitPtr, param_3 | 0x300); + CreateMenuDialogueBoxAndPortrait(text, NULL, -1, gUnknown_80D485C, NULL, 3, 0, monPortraitPtr, param_3 | 0x300); } void CreateYesNoDialogueBoxAndPortrait_DefaultNo(const u8 *text, struct MonPortraitMsg *monPortraitPtr, u16 param_3) { - CreateMenuDialogueBoxAndPortrait(text, 0, -1, gUnknown_80D4880, NULL, 3, 0, monPortraitPtr, param_3 | 0x300); + CreateMenuDialogueBoxAndPortrait(text, NULL, -1, gUnknown_80D4880, NULL, 3, 0, monPortraitPtr, param_3 | 0x300); } extern u8 gUnknown_202E798[]; -extern u8 *gUnknown_202E794; +extern const u8 *gUnknown_202E794; -struct UnkStruct_202E748 -{ - u16 unk0; - u16 unk2; - u8 fill4; - u8 fill5; - u8 fill6; - u8 fill7; - u16 unk8; - u16 unkA; - u8 fillB; - u8 fillC; - u8 fillD; - u8 fillE; - u32 unk10; - u8 fill14[6]; - u32 unk1C; - u8 unk20; - u32 unk24; -}; - -extern struct UnkStruct_202E748 gUnknown_202E748; +extern struct UnkDrawStringStruct gUnknown_202E748; extern u32 gUnknown_202EC10; extern const MenuItem *gUnknown_202EC14; extern void *gUnknown_202EC18; -extern u32 gUnknown_202EC1C; +extern s32 gUnknown_202EC1C; extern MenuInputStructSub gUnknown_202EC28; struct SubStruct_203B198 { - u8 fill0[0x18]; + u8 unk0; + u32 unk4; // x34 + u16 unk8; // x38 + u16 unkA; // x3A + u16 unkC; // x3C + u16 unkE; // x3E + u16 unk10; // x40 + u8 fill12[0x48-0x42]; // x42 }; struct UnkStruct_203B198 @@ -182,7 +172,7 @@ extern void SetCharacterMask(int a0); extern void sub_8008274(s32 a0, const u8 *compressedData, s32 a2); extern void sub_80073E0(s32 a0); -void CreateMenuDialogueBoxAndPortrait(const u8 *text, u32 a1, u32 r9, const MenuItem *menuItems, void *arg_0, u32 a5, u32 unknownUnused, struct MonPortraitMsg *monPortraitPtr, u16 r10) +void CreateMenuDialogueBoxAndPortrait(const u8 *text, void *a1, u32 r9, const MenuItem *menuItems, void *arg_0, u32 a5, u32 unknownUnused, struct MonPortraitMsg *monPortraitPtr, u16 r10) { bool8 portraitOn = FALSE; @@ -268,3 +258,611 @@ void CreateMenuDialogueBoxAndPortrait(const u8 *text, u32 a1, u32 r9, const Menu sub_80073E0(1); } } + +void sub_8014490(void) +{ + gUnknown_202E744 = 0; + gUnknown_202EC1C = 0; +} + +s32 sub_80144A4(s32 *a0) +{ + if (a0 != NULL) { + *a0 = gUnknown_202EC1C; + } + return gUnknown_202E744; +} + +extern s32 gUnknown_202E780; +extern void sub_8011A04(void); + +extern SpriteOAM gUnknown_202E6E0; + +extern void (*gUnknown_203B088)(s32 a0); + +void sub_8014A88(void); +bool8 sub_8014B94(void); +static void nullsub_35(void); + +void DrawDialogueBoxString(void) +{ + bool8 keepLooping = TRUE; + + gUnknown_202E784++; + while (keepLooping) { + switch (gUnknown_202E744) { + case 0: { + keepLooping = FALSE; + } + break; + case 1: { + const u8 *str = gUnknown_202E794; + s32 r7; + + if (gUnknown_202E790 != 0) { + r7 = 99999; + } + else { + r7 = gUnknown_202E788; + } + gUnknown_202E748.unk2C = 0; + sub_80073B8(0); + while (r7 > 0) { + str = xxx_handle_format_global(str, &gUnknown_202E748); + if (gUnknown_202E748.unk21 != 0) { + break; + } + if (gUnknown_202E748.unk20 != 0) { + if (gUnknown_202E748.unk2 > 34) { + gUnknown_202E744 = 8; + gUnknown_202E780 = gUnknown_202E738; + } + else { + gUnknown_202E744 = 7; + gUnknown_202E780 = gUnknown_202E73C; + } + gUnknown_202E791 = 0; + break; + } + if (*str == '\0') { + break; + } + + if (*str == '\r' || *str == '\n') { + gUnknown_202E748.unk0 = 4; + gUnknown_202E748.unk2 += 11; + str++; + } + else { + u32 sp; + + str = xxx_get_next_char_from_string(str, &sp); + gUnknown_202E748.unk0 += xxx_call_draw_char(gUnknown_202E748.unk0, gUnknown_202E748.unk2, sp, gUnknown_202E748.unk10, 0); + gUnknown_202E748.unk2C = gUnknown_202E78C; + } + + if (gUnknown_202E748.unk2 > 34) { + if (!(gUnknown_202E77C & 0x10)) { + gUnknown_202E748.unk1C = 0; + gUnknown_202E748.unk20 = 1; + gUnknown_202E744 = 8; + gUnknown_202E791 = 0; + gUnknown_202E780 = gUnknown_202E738; + break; + } + else { + gUnknown_202E748.unk2 = 4; + } + } + r7--; + } + sub_80073E0(0); + gUnknown_202E794 = str; + sub_801317C(&gUnknown_202EC28); + if (gUnknown_202E794[0] == '\0') { + if (gUnknown_202EC14 != NULL) { + gUnknown_202E744 = 3; + } + else { + gUnknown_202E744 = 6; + } + keepLooping = FALSE; + } + else { + gUnknown_202E748.unk30 = 0; + if (gUnknown_202E748.unk20 != 0) { + if (gUnknown_202E744 == 1) { + gUnknown_202E744 = 7; + gUnknown_202E791 = 0; + gUnknown_202E780 = gUnknown_202E738; + } + keepLooping = FALSE; + } + else { + gUnknown_202E744 = 2; + } + } + } + break; + case 2: { + if (gUnknown_202E77C & 4) { + sub_8011A04(); + } + if (!(gUnknown_202E77C & 2)) { + if (gUnknown_202E77C & 0x40 && gRealInputs.pressed & AB_BUTTONS) { + gUnknown_202E790 = 1; + gUnknown_202E748.unk30 = 99999; + } + } + + if (++gUnknown_202E748.unk30 > gUnknown_202E748.unk2C) { + gUnknown_202E744 = 1; + gUnknown_202E748.unk21 = 0; + } + else { + keepLooping = FALSE; + } + } + break; + case 6: { + if (gUnknown_202E77C & 0x100) { + gUnknown_202E744 = 9; + gUnknown_202E791 = 0; + if (gUnknown_202E740 > 0) { + gUnknown_202E780 = gUnknown_202E740 - gUnknown_202E784; + if (gUnknown_202E780 < 0) { + gUnknown_202E744 = 11; + gUnknown_202E780 = 0; + } + } + else { + gUnknown_202E780 = gUnknown_202E738; + } + } + else { + gUnknown_202E744 = 11; + } + } + break; + case 7: + case 8: + case 9: { + bool8 buttonPress = FALSE; + gUnknown_202E748.unk20 = 0; + nullsub_34(&gUnknown_202EC28, 0); + if (!(gUnknown_202E77C & 1)) { + buttonPress = TRUE; + } + else + { + if (gUnknown_202E77C & 2) + { + if (gUnknown_202E780 > 0) { + gUnknown_202E780--; + } + else { + buttonPress = TRUE; + } + } + else if (gRealInputs.pressed & AB_BUTTONS || gUnknown_202EC28.a_button) { + buttonPress = TRUE; + } + else if ((gRealInputs.held & (DPAD_ANY | B_BUTTON)) == B_BUTTON) { + buttonPress = TRUE; + } + else if (gUnknown_202EC28.unk5) { + buttonPress = TRUE; + } + } + + if (!buttonPress) { + gUnknown_202E791++; + if (!(gUnknown_202E77C & 0x2) && gUnknown_202E791 & 8) { + u32 shape, tileNum, palNum, pal; + + gUnknown_202E6E0.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1; + gUnknown_202E6E0.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2; + gUnknown_202E6E0.attrib1 &= ~SPRITEOAM_MASK_OBJMODE; + gUnknown_202E6E0.attrib1 &= ~SPRITEOAM_MASK_MOSAIC; + gUnknown_202E6E0.attrib1 &= ~SPRITEOAM_MASK_BPP; + + shape = 1; + shape <<= SPRITEOAM_SHIFT_SHAPE; + gUnknown_202E6E0.attrib1 &= ~SPRITEOAM_MASK_SHAPE; + gUnknown_202E6E0.attrib1 |= shape; + + gUnknown_202E6E0.attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM; + gUnknown_202E6E0.attrib2 &= ~SPRITEOAM_MASK_SIZE; + + tileNum = 0x3F0 << SPRITEOAM_SHIFT_TILENUM; + gUnknown_202E6E0.attrib3 &= ~SPRITEOAM_MASK_TILENUM; + gUnknown_202E6E0.attrib3 |= tileNum; + + gUnknown_202E6E0.attrib3 &= ~SPRITEOAM_MASK_PRIORITY; + + pal = 15; + palNum = (pal & SPRITEOAM_MAX_PALETTENUM) << SPRITEOAM_SHIFT_PALETTENUM; + gUnknown_202E6E0.attrib3 &= ~SPRITEOAM_MASK_PALETTENUM; + gUnknown_202E6E0.attrib3 |= palNum; + + + if (gUnknown_202E77C & 0x10) { + u32 var = 0x780; + gUnknown_202E6E0.unk6 &= 0xF; + gUnknown_202E6E0.unk6 |= var; + gUnknown_202E6E0.attrib2 &= ~SPRITEOAM_MASK_X; + gUnknown_202E6E0.attrib2 |= 0x70; + } + else { + s16 x; + + u32 var = ((gUnknown_202E748.unkA + 1) & 0xFFF) << 4; + gUnknown_202E6E0.unk6 &= 0xF; + gUnknown_202E6E0.unk6 |= var; + x = gUnknown_202E748.unk8; + gUnknown_202E6E0.attrib2 &= ~SPRITEOAM_MASK_X; + gUnknown_202E6E0.attrib2 |= x & 0x1FF; + } + + AddSprite(&gUnknown_202E6E0, 0x100, NULL, NULL); + } + } + else { + if (*gUnknown_202E794 == '\0') { + gUnknown_202E744 = 11; + } + else if (gUnknown_202E744 == 9) { + gUnknown_202E744 = 11; + } + else if (gUnknown_202E744 == 8) { + gUnknown_202E748.unk0 = 4; + if (gUnknown_202E748.unk2 > 34) { + gUnknown_202E748.unk2 = 4; + if (gUnknown_202E77C & 0x10) { + CallPrepareTextbox_8008C54(0); + gUnknown_202E744 = 1; + } + else if (gUnknown_202E748.unk1C != 0) { + CallPrepareTextbox_8008C54(0); + gUnknown_202E744 = 1; + } + else { + gUnknown_202E744 = 10; + gUnknown_202E748.unk28 = 0; + } + } + else { + gUnknown_202E744 = 1; + } + } + else { + gUnknown_202E744 = 1; + } + + gUnknown_202E748.unk8 = 0x70; + gUnknown_202E748.unkA = (gUnknown_2027370[0].unk2 * 8) + 34; + } + keepLooping = FALSE; + } + break; + case 10: { + gUnknown_202E748.unk28++; + gUnknown_203B088(0); + if (gUnknown_202E748.unk28 > 17) { + gUnknown_202E744 = 1; + } + keepLooping = FALSE; + } + break; + case 11: { + if (gUnknown_202E77C & 0x200) { + ResetUnusedInputStruct(); + xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE); + gUnknown_202E744 = 0; + } + else { + gUnknown_202E744 = 0; + } + keepLooping = FALSE; + } + break; + case 3: { + sub_8014A88(); + gUnknown_202E744 = 4; + keepLooping = FALSE; + } + break; + case 4: { + if (sub_8014B94()) { + gUnknown_202E744 = 5; + } + keepLooping = FALSE; + } + break; + case 5: { + nullsub_35(); + gUnknown_202E744 = 11; + } + break; + } + } +} + +// Only read, but never written to. Possibly used in Blue? +struct NeverWrittenToStruct202EC20 +{ + struct SubStruct_203B198 unk0; + const u8 *unk18; +}; + +extern struct NeverWrittenToStruct202EC20 *gUnknown_202EC20; +extern MenuStruct gUnknown_202EBC0; +extern const u32 gUnknown_80D48A0[]; + +void sub_8014A88(void) +{ + s32 r2, r1; + u8 text[128]; + const MenuItem *menuItem = gUnknown_202EC14; + s32 r5 = 0; + s32 r7 = 0; + s32 i; + + for (i = 0; i < 10; menuItem++, i++) { + s32 val; + + if (menuItem->text == NULL) + break; + + r5 += 12;; + xxx_format_string(menuItem->text, text, text + sizeof(text), 0); + val = sub_8008ED0(text); + if (r7 < val) { + r7 = val; + } + } + + r2 = r5 / 8; + if (r5 % 8) + r2++; + + gUnknown_203B198.unk30.unk4 = gUnknown_202EC10; + r1 = r7 / 8; + r1 += 2; + gUnknown_203B198.unk30.unkC = r1; + gUnknown_203B198.unk30.unk10 = r2; + gUnknown_203B198.unk30.unkE = r2; + gUnknown_203B198.unk30.unk8 = 28 - r1; + gUnknown_203B198.unk30.unkA = 14 - r2; + gUnknown_203B198.unk0.unk0 = 0x80; + gUnknown_203B198.unk18 = 0xC0; + if (gUnknown_202EC20 != NULL) { + gUnknown_203B198.unk48 = gUnknown_202EC20->unk0; + } + ResetUnusedInputStruct(); + xxx_call_save_unk_text_struct_800641C(&gUnknown_203B198.unk0, TRUE, FALSE); + sub_8012D60(&gUnknown_202EBC0, gUnknown_202EC14, gUnknown_80D48A0, gUnknown_202EC18, gUnknown_202EC1C, 2); + if (gUnknown_202EC20 != NULL) { + sub_80073B8(3); + PrintStringOnWindow(4, 2, gUnknown_202EC20->unk18, 3, 0); + sub_80073E0(3); + } +} + +bool8 sub_8014B94(void) +{ + if (!sub_8012FD8(&gUnknown_202EBC0)) { + sub_8013114(&gUnknown_202EBC0, &gUnknown_202EC1C); + return TRUE; + } + else { + return FALSE; + } +} + +static void UNUSED nullsub_35(void) {} + +extern u8 gUnknown_202E5D8[]; +extern const u8 gUnknown_80D48F4[]; +bool8 AppendString_8014FA8(const u8 *, u8 **, u8 *, u16 r3); + +extern u8 gUnknown_202EB80[]; +extern u8 gUnknown_202E628[]; +extern u8 gFormatItems[][80]; +extern u8 gAvailablePokemonNames[][80]; +extern u8 gPlayerName[][80]; +extern s32 gFormatData_202DE30[]; +extern u8 gTeamName[]; + +extern const u8 gUnknown_80D48F8[]; +extern const u8 gUnknown_80D4900[]; +extern const u8 gUnknown_80D4904[]; +extern const u8 gUnknown_80D4908[]; +extern const u8 gUnknown_80D4910[]; + +const u8 *xxx_format_string(const u8 *str, u8 *a1, u8 *r7, u16 r8) +{ + u8 txtArray[60]; + bool8 r10 = TRUE; + bool8 r9 = TRUE; + r7--; + + while (1) { + u8 currChar = *str; + + if (currChar == '\0') + break; + if (currChar == '\r' || currChar == '\n') { + if (r8 & 0x80) + break; + r9 = TRUE; + } + else { + if (r10) { + r10 = FALSE; + r9 = FALSE; + if (r8 & 8) { + AppendString_8014FA8(gUnknown_202E5D8, &a1, r7, r8); + AppendString_8014FA8(gUnknown_80D48F4, &a1, r7, r8); + } + } + else if (r9) { + r9 = FALSE; + } + } + + if (currChar == '#') { + u8 chrPls1 = str[1]; + if (chrPls1 == 'P' || chrPls1 == 'p') { + r10 = TRUE; + r9 = TRUE; + } + if (a1 + 1 < r7) { + *(a1++) = '#'; + *(a1++) = chrPls1; + } + + str += 2; + } + else if (currChar == '$') { + const u8 *txtPtr = NULL; + str++; + + switch (*str) { + case 'i': + str++; + txtPtr = gFormatItems[*str - '0']; + str++; + break; + case 'm': + str++; + if (*str == 'm') { + PokemonStruct1 *monStruct = sub_808D3BC(); + txtPtr = gUnknown_202EB80; + PrintColoredPokeNameToBuffer(gUnknown_202EB80, monStruct, 0); + } + else { + txtPtr = gAvailablePokemonNames[*str - '0']; + str++; + } + break; + case 'n': + str++; + txtPtr = gPlayerName[*str - '0']; + str++; + break; + case 't': + str++; + if (sub_80023E4(0)) { + sub_80920D8(gTeamName); + } + else { + strcpy(gTeamName, gUnknown_80D48F8); // ???? + } + txtPtr = gTeamName; + break; + case 'h': + str++; + txtPtr = gUnknown_202E628; + break; + case 'd': + str++; + sprintfStatic(txtArray, gUnknown_80D4900, gFormatData_202DE30[*(str++) - '0']); + txtPtr = txtArray; + break; + case 'v': { + s32 a; + u8 *unkTxtPtr; + + str++; + a = gFormatData_202DE30[*(str++) - '0']; + sprintfStatic(txtArray, gUnknown_80D4904, *(str++) - '0', a); + unkTxtPtr = txtArray; + while (*unkTxtPtr != '\0') { + if (*unkTxtPtr == ' ') { + *unkTxtPtr = '`'; + } + unkTxtPtr++; + } + txtPtr = txtArray; + } + break; + // the same as above except "%0*d" instead of "%*d" + case 'V': { + s32 a; + u8 *unkTxtPtr; + + str++; + a = gFormatData_202DE30[*(str++) - '0']; + sprintfStatic(txtArray, gUnknown_80D4908, *(str++) - '0', a); + unkTxtPtr = txtArray; + while (*unkTxtPtr != '\0') { + if (*unkTxtPtr == ' ') { + *unkTxtPtr = '`'; + } + unkTxtPtr++; + } + txtPtr = txtArray; + } + break; + case '$': + txtPtr = gUnknown_80D4910; + break; + case '-': + str++; + break; + } + + if (txtPtr != NULL) { + + if (AppendString_8014FA8(txtPtr, &a1, r7, r8)) + break; + } + } + else if (currChar == 0x81 || currChar == 0x82 || currChar == 0x83 || currChar == 0x84 || currChar == 0x87) { + if (a1 < r7) { + *(a1++) = currChar; + } + str++; + if (*str == '\0') + break; + if (a1 < r7) { + *(a1++) = *str; + } + str++; + } + else { + if (a1 < r7) { + *(a1++) = currChar; + } + str++; + } + } + + *a1 = 0; + if (*str == '\r') str++; + if (*str == '\n') str++; + + return str; +} + +bool8 AppendString_8014FA8(const u8 *str, u8 **r5, u8 *r6, u16 r3) +{ + u8 *r2 = *r5; + while (*str != '\0') { + if (r3 & 0x80 && *str == '\r') { + *r5 = r2; + return TRUE; + } + if (r2 < r6) { + *r2 = *str; + r2++; + } + str++; + } + + *r5 = r2; + return FALSE; +} + +// diff --git a/src/menu_input.c b/src/menu_input.c index 5b8333d39..18c841b61 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -322,7 +322,7 @@ void sub_8012D34(UnkTextStruct2 *a0, s32 a1) "\tbx r0"); } -void sub_8012D60(MenuStruct *param_1, const MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 menuAction, s32 index) +void sub_8012D60(MenuStruct *param_1, const MenuItem *menuItems, const u32 *colorArray, u16 *param_4, s32 menuAction, s32 index) { const u8 *textPtr; s32 counter; @@ -369,7 +369,7 @@ void sub_8012D60(MenuStruct *param_1, const MenuItem *menuItems, u32 *colorArray param_1->menuAction = -1; } -void sub_8012E04(MenuStruct *param_1, const MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 menuAction, s32 index) +void sub_8012E04(MenuStruct *param_1, const MenuItem *menuItems, const u32 *colorArray, u16 *param_4, s32 menuAction, s32 index) { const u8 *textPtr; s32 counter;