diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-03-07 18:05:54 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-03-07 18:05:54 -0500 |
commit | ab1d075682a34164ed82810108f909e1f9b46390 (patch) | |
tree | bbf4391d137a1ea2249aa3720a735a9b4c2f28fa | |
parent | 6ce70985ebcb78267290e35e65aadb6a433c1cba (diff) |
through sub_8101558
-rw-r--r-- | asm/easy_chat_2.s | 1266 | ||||
-rw-r--r-- | data/data_8479668.s | 6 | ||||
-rw-r--r-- | data/easy_chat_2.s | 7 | ||||
-rw-r--r-- | include/data_8479668.h | 5 | ||||
-rw-r--r-- | include/graphics.h | 1 | ||||
-rw-r--r-- | src/easy_chat_3.c | 446 | ||||
-rw-r--r-- | src/graphics.c | 2 |
7 files changed, 453 insertions, 1280 deletions
diff --git a/asm/easy_chat_2.s b/asm/easy_chat_2.s index 1c5bb0fdc..e21664561 100644 --- a/asm/easy_chat_2.s +++ b/asm/easy_chat_2.s @@ -5,1272 +5,6 @@ .text - thumb_func_start sub_8100BF4 -sub_8100BF4: @ 8100BF4 - push {r4,lr} - ldr r4, _08100C50 @ =gUnknown_203ACEC - movs r0, 0x98 - lsls r0, 5 - bl Alloc - adds r2, r0, 0 - str r2, [r4] - cmp r2, 0 - beq _08100C54 - movs r1, 0 - strh r1, [r2] - movs r3, 0xB6 - lsls r3, 2 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - movs r0, 0x1 - b _08100C56 - .align 2, 0 -_08100C50: .4byte gUnknown_203ACEC -_08100C54: - movs r0, 0 -_08100C56: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8100BF4 - - thumb_func_start sub_8100C5C -sub_8100C5C: @ 8100C5C - push {lr} - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r1, 0xC1 - lsls r1, 6 - movs r0, 0 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_8100C5C - - thumb_func_start sub_8100CBC -sub_8100CBC: @ 8100CBC - push {r4,lr} - bl ResetPaletteFade - ldr r0, _08100D10 @ =gUnknown_8E99D8C - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08100D14 @ =gUnknown_843F76C - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08100D18 @ =gUnknown_843F78C - movs r1, 0x40 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08100D1C @ =gUnknown_843F874 - movs r1, 0xA0 - movs r2, 0x8 - bl LoadPalette - ldr r4, _08100D20 @ =gUnknown_843F87C - adds r0, r4, 0 - movs r1, 0xB0 - movs r2, 0xA - bl LoadPalette - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA - bl LoadPalette - adds r0, r4, 0 - movs r1, 0x30 - movs r2, 0xA - bl LoadPalette - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08100D10: .4byte gUnknown_8E99D8C -_08100D14: .4byte gUnknown_843F76C -_08100D18: .4byte gUnknown_843F78C -_08100D1C: .4byte gUnknown_843F874 -_08100D20: .4byte gUnknown_843F87C - thumb_func_end sub_8100CBC - - thumb_func_start sub_8100D24 -sub_8100D24: @ 8100D24 - push {r4,r5,lr} - sub sp, 0x14 - bl GetTitleText - adds r5, r0, 0 - cmp r5, 0 - beq _08100D7A - movs r0, 0x1 - adds r1, r5, 0 - movs r2, 0 - bl GetStringWidth - movs r4, 0x80 - subs r4, r0 - lsrs r4, 1 - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - lsls r4, 24 - lsrs r4, 24 - movs r1, 0 - str r1, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - str r1, [sp, 0x8] - movs r0, 0x2 - str r0, [sp, 0xC] - movs r0, 0x3 - str r0, [sp, 0x10] - movs r0, 0 - movs r1, 0x1 - adds r2, r5, 0 - adds r3, r4, 0 - bl sub_8100DC4 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram -_08100D7A: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8100D24 - - thumb_func_start sub_8100D84 -sub_8100D84: @ 8100D84 - push {r4-r6,lr} - sub sp, 0xC - adds r6, r2, 0 - ldr r2, [sp, 0x1C] - ldr r4, [sp, 0x20] - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r3, 24 - lsrs r3, 24 - lsls r2, 24 - lsrs r0, r2, 24 - lsls r4, 24 - lsrs r4, 24 - cmp r1, 0x1 - bne _08100DAC - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 -_08100DAC: - str r0, [sp] - str r4, [sp, 0x4] - ldr r0, [sp, 0x24] - str r0, [sp, 0x8] - adds r0, r5, 0 - adds r2, r6, 0 - bl AddTextPrinterParameterized - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8100D84 - - thumb_func_start sub_8100DC4 -sub_8100DC4: @ 8100DC4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - mov r9, r2 - ldr r2, [sp, 0x2C] - ldr r4, [sp, 0x30] - ldr r5, [sp, 0x34] - ldr r6, [sp, 0x38] - ldr r7, [sp, 0x3C] - mov r8, r7 - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - lsls r1, 24 - lsrs r1, 24 - lsls r3, 24 - lsrs r7, r3, 24 - lsls r2, 24 - lsrs r3, r2, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - mov r0, r8 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r1, 0x1 - bne _08100E0A - adds r0, r3, 0x2 - lsls r0, 24 - lsrs r3, r0, 24 -_08100E0A: - add r0, sp, 0xC - strb r5, [r0] - strb r6, [r0, 0x1] - strb r2, [r0, 0x2] - str r0, [sp] - lsls r0, r4, 24 - asrs r0, 24 - str r0, [sp, 0x4] - mov r0, r9 - str r0, [sp, 0x8] - mov r0, r12 - adds r2, r7, 0 - bl AddTextPrinterParameterized3 - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8100DC4 - - thumb_func_start sub_8100E34 -sub_8100E34: @ 8100E34 - push {lr} - sub sp, 0xC - movs r0, 0x20 - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0xE0 - bl TextWindow_SetUserSelectedFrame - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0xE - bl DrawTextBorderOuter - movs r0, 0 - bl sub_8100E7C - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl CopyBgTilemapBufferToVram - add sp, 0xC - pop {r0} - bx r0 - thumb_func_end sub_8100E34 - - thumb_func_start sub_8100E7C -sub_8100E7C: @ 8100E7C - push {lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r1, r0, 24 - adds r2, r1, 0 - movs r0, 0 - str r0, [sp, 0x10] - str r0, [sp, 0xC] - cmp r1, 0x1 - beq _08100EC2 - cmp r1, 0x1 - bgt _08100E9A - cmp r1, 0 - beq _08100EA4 - b _08100ECA -_08100E9A: - cmp r2, 0x2 - beq _08100EAE - cmp r2, 0x3 - beq _08100EB8 - b _08100ECA -_08100EA4: - add r1, sp, 0x10 - add r0, sp, 0xC - bl GetEasyChatInstructionsText - b _08100ECA -_08100EAE: - add r1, sp, 0x10 - add r0, sp, 0xC - bl sub_80FFDC8 - b _08100ECA -_08100EB8: - add r1, sp, 0x10 - add r0, sp, 0xC - bl GetEasyChatConfirmText - b _08100ECA -_08100EC2: - add r1, sp, 0x10 - add r0, sp, 0xC - bl GetEasyChatConfirmDeletionText -_08100ECA: - movs r0, 0x1 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r2, [sp, 0xC] - cmp r2, 0 - beq _08100EEC - movs r1, 0 - str r1, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - str r1, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x1 - movs r3, 0 - bl sub_8100D84 -_08100EEC: - ldr r2, [sp, 0x10] - cmp r2, 0 - beq _08100F08 - movs r0, 0x10 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x1 - movs r3, 0 - bl sub_8100D84 -_08100F08: - movs r0, 0x1 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0x14 - pop {r0} - bx r0 - thumb_func_end sub_8100E7C - - thumb_func_start sub_8100F18 -sub_8100F18: @ 8100F18 - push {lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08100F40 @ =gUnknown_843F8D0 - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - str r0, [sp, 0x8] - adds r0, r2, 0 - movs r1, 0x1 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - add sp, 0xC - pop {r0} - bx r0 - .align 2, 0 -_08100F40: .4byte gUnknown_843F8D0 - thumb_func_end sub_8100F18 - - thumb_func_start sub_8100F44 -sub_8100F44: @ 8100F44 - push {r4,r5,lr} - sub sp, 0x8 - bl GetEasyChatScreenFrameId - lsls r0, 24 - ldr r5, _08100FC0 @ =0xffffff00 - ldr r3, [sp] - ands r3, r5 - movs r1, 0x3 - orrs r3, r1 - str r3, [sp] - ldr r1, _08100FC4 @ =sPhraseFrameDimensions - lsrs r0, 22 - adds r0, r1 - ldrb r2, [r0] - lsls r2, 8 - ldr r4, _08100FC8 @ =0xffff00ff - adds r1, r4, 0 - ands r1, r3 - orrs r1, r2 - str r1, [sp] - ldrb r2, [r0, 0x1] - lsls r2, 16 - ldr r3, _08100FCC @ =0xff00ffff - ands r3, r1 - orrs r3, r2 - str r3, [sp] - ldrb r2, [r0, 0x2] - lsls r2, 24 - ldr r1, _08100FD0 @ =0x00ffffff - ands r1, r3 - orrs r1, r2 - str r1, [sp] - ldrb r1, [r0, 0x3] - ldr r0, [sp, 0x4] - ands r0, r5 - orrs r0, r1 - ands r0, r4 - movs r1, 0xB0 - lsls r1, 4 - orrs r0, r1 - ldr r1, _08100FD4 @ =0x0000ffff - ands r0, r1 - movs r1, 0xC0 - lsls r1, 15 - orrs r0, r1 - str r0, [sp, 0x4] - mov r0, sp - bl AddWindow - ldr r1, _08100FD8 @ =gUnknown_203ACEC - ldr r1, [r1] - strh r0, [r1, 0x2] - lsls r0, 24 - lsrs r0, 24 - bl PutWindowTilemap - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08100FC0: .4byte 0xffffff00 -_08100FC4: .4byte sPhraseFrameDimensions -_08100FC8: .4byte 0xffff00ff -_08100FCC: .4byte 0xff00ffff -_08100FD0: .4byte 0x00ffffff -_08100FD4: .4byte 0x0000ffff -_08100FD8: .4byte gUnknown_203ACEC - thumb_func_end sub_8100F44 - - thumb_func_start sub_8100FDC -sub_8100FDC: @ 8100FDC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - bl GetEasyChatWordBuffer - adds r4, r0, 0 - bl GetNumColumns - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - bl GetNumRows - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0xC] - bl GetEasyChatScreenFrameId - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x10] - ldr r0, _0810101C @ =gUnknown_203ACEC - ldr r0, [r0] - ldrb r0, [r0, 0x2] - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r6, 0 - b _081010D6 - .align 2, 0 -_0810101C: .4byte gUnknown_203ACEC -_08101020: - ldr r0, _0810105C @ =gUnknown_203ACEC - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0xA - movs r0, 0xFF - strb r0, [r1, 0xA] - adds r0, r2, 0 - ldr r1, _08101060 @ =gUnknown_843F8DB - bl StringAppend - adds r2, r0, 0 - movs r5, 0 - lsls r7, r6, 28 - adds r0, r6, 0x1 - mov r9, r0 - cmp r5, r8 - bge _081010B4 - ldr r0, _08101064 @ =0x0000ffff - mov r10, r0 -_08101046: - ldrh r0, [r4] - cmp r0, r10 - beq _08101068 - adds r1, r0, 0 - adds r0, r2, 0 - bl CopyEasyChatWord - adds r2, r0, 0 - adds r4, 0x2 - b _08101096 - .align 2, 0 -_0810105C: .4byte gUnknown_203ACEC -_08101060: .4byte gUnknown_843F8DB -_08101064: .4byte 0x0000ffff -_08101068: - adds r0, r2, 0 - movs r1, 0 - movs r2, 0x4 - bl WriteColorChangeControlCode - adds r2, r0, 0 - adds r4, 0x2 - movs r3, 0xF9 - movs r1, 0x9 - movs r0, 0x6 -_0810107C: - strb r3, [r2] - adds r2, 0x1 - strb r1, [r2] - adds r2, 0x1 - subs r0, 0x1 - cmp r0, 0 - bge _0810107C - adds r0, r2, 0 - movs r1, 0 - movs r2, 0x2 - bl WriteColorChangeControlCode - adds r2, r0, 0 -_08101096: - adds r0, r2, 0 - ldr r1, _081010F8 @ =gUnknown_843F8DB - bl StringAppend - adds r2, r0, 0 - ldr r0, [sp, 0x10] - cmp r0, 0x2 - bne _081010AE - cmp r5, 0 - bne _081010AE - cmp r6, 0x4 - beq _081010B4 -_081010AE: - adds r5, 0x1 - cmp r5, r8 - blt _08101046 -_081010B4: - movs r0, 0xFF - strb r0, [r2] - ldr r0, _081010FC @ =gUnknown_203ACEC - ldr r2, [r0] - ldrb r0, [r2, 0x2] - adds r2, 0xA - lsrs r1, r7, 24 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl sub_8100D84 - mov r6, r9 -_081010D6: - ldr r0, [sp, 0xC] - cmp r6, r0 - blt _08101020 - ldr r0, _081010FC @ =gUnknown_203ACEC - ldr r0, [r0] - ldrb r0, [r0, 0x2] - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081010F8: .4byte gUnknown_843F8DB -_081010FC: .4byte gUnknown_203ACEC - thumb_func_end sub_8100FDC - - thumb_func_start sub_8101100 -sub_8101100: @ 8101100 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r8, r0 - bl GetEasyChatScreenFrameId - lsls r0, 24 - lsrs r5, r0, 24 - movs r0, 0 - str r0, [sp] - ldr r2, _08101194 @ =0x01000200 - mov r0, sp - mov r1, r8 - bl CpuFastSet - cmp r5, 0x2 - bne _081011A4 - ldr r0, _08101198 @ =sPhraseFrameDimensions - adds r1, r0, 0 - adds r1, 0x8 - ldrb r5, [r0, 0x8] - ldrb r0, [r1, 0x2] - adds r4, r5, r0 - ldrb r2, [r1, 0x1] - ldrb r0, [r1, 0x3] - adds r0, r2 - mov r12, r0 - adds r7, r2, 0 - cmp r7, r12 - blt _08101144 - b _08101296 -_08101144: - adds r3, r5, 0 - lsls r0, r3, 1 - mov r9, r0 -_0810114A: - subs r6, r3, 0x1 - lsls r0, r7, 5 - adds r1, r0, r6 - lsls r1, 1 - add r1, r8 - ldr r5, _0810119C @ =0x00001005 - adds r2, r5, 0 - strh r2, [r1] - adds r6, r3, 0 - adds r5, r0, 0 - adds r2, r7, 0x1 - cmp r6, r4 - bge _0810117E - movs r0, 0x80 - lsls r0, 5 - adds r1, r0, 0 - lsls r0, r7, 6 - add r0, r8 - add r0, r9 - subs r6, r4, r6 -_08101172: - strh r1, [r0] - adds r0, 0x2 - subs r6, 0x1 - cmp r6, 0 - bne _08101172 - adds r6, r4, 0 -_0810117E: - adds r0, r5, r6 - lsls r0, 1 - add r0, r8 - ldr r5, _081011A0 @ =0x00001007 - adds r1, r5, 0 - strh r1, [r0] - adds r7, r2, 0 - cmp r7, r12 - blt _0810114A - b _08101296 - .align 2, 0 -_08101194: .4byte 0x01000200 -_08101198: .4byte sPhraseFrameDimensions -_0810119C: .4byte 0x00001005 -_081011A0: .4byte 0x00001007 -_081011A4: - ldr r6, _081012A8 @ =sPhraseFrameDimensions - mov r9, r6 - lsls r5, 2 - adds r1, r5, r6 - ldrb r3, [r1, 0x1] - subs r7, r3, 0x1 - ldrb r2, [r1] - subs r6, r2, 0x1 - ldrb r0, [r1, 0x2] - adds r4, r2, r0 - ldrb r0, [r1, 0x3] - adds r3, r0 - mov r12, r3 - lsls r0, r7, 5 - adds r0, r6 - lsls r0, 1 - add r0, r8 - ldr r3, _081012AC @ =0x00001001 - adds r1, r3, 0 - strh r1, [r0] - adds r6, r2, 0 - mov r10, r9 - mov r9, r5 - cmp r6, r4 - bge _081011F0 - ldr r5, _081012B0 @ =0x00001002 - adds r2, r5, 0 - lsls r1, r6, 1 - lsls r0, r7, 6 - add r0, r8 - adds r1, r0 - subs r6, r4, r6 -_081011E4: - strh r2, [r1] - adds r1, 0x2 - subs r6, 0x1 - cmp r6, 0 - bne _081011E4 - adds r6, r4, 0 -_081011F0: - lsls r0, r7, 5 - adds r0, r6 - lsls r0, 1 - add r0, r8 - ldr r6, _081012B4 @ =0x00001003 - adds r1, r6, 0 - strh r1, [r0] - adds r7, 0x1 - cmp r7, r12 - bge _08101252 - ldr r0, _081012A8 @ =sPhraseFrameDimensions - add r0, r9 - ldrb r3, [r0] - lsls r5, r3, 1 -_0810120C: - subs r6, r3, 0x1 - lsls r0, r7, 5 - adds r0, r6 - lsls r0, 1 - add r0, r8 - ldr r2, _081012B8 @ =0x00001005 - adds r1, r2, 0 - strh r1, [r0] - adds r6, r3, 0 - adds r2, r7, 0x1 - cmp r6, r4 - bge _0810123E - movs r0, 0x80 - lsls r0, 5 - adds r1, r0, 0 - lsls r0, r7, 6 - add r0, r8 - adds r0, r5, r0 - subs r6, r4, r6 -_08101232: - strh r1, [r0] - adds r0, 0x2 - subs r6, 0x1 - cmp r6, 0 - bne _08101232 - adds r6, r4, 0 -_0810123E: - lsls r0, r7, 5 - adds r0, r6 - lsls r0, 1 - add r0, r8 - ldr r6, _081012BC @ =0x00001007 - adds r1, r6, 0 - strh r1, [r0] - adds r7, r2, 0 - cmp r7, r12 - blt _0810120C -_08101252: - mov r0, r9 - add r0, r10 - ldrb r3, [r0] - subs r6, r3, 0x1 - lsls r2, r7, 5 - adds r0, r2, r6 - lsls r0, 1 - add r0, r8 - ldr r5, _081012C0 @ =0x00001009 - adds r1, r5, 0 - strh r1, [r0] - adds r6, r3, 0 - adds r5, r2, 0 - cmp r6, r4 - bge _0810128A - ldr r0, _081012C4 @ =0x0000100a - adds r2, r0, 0 - lsls r1, r6, 1 - lsls r0, r7, 6 - add r0, r8 - adds r0, r1, r0 - subs r6, r4, r6 -_0810127E: - strh r2, [r0] - adds r0, 0x2 - subs r6, 0x1 - cmp r6, 0 - bne _0810127E - adds r6, r4, 0 -_0810128A: - adds r0, r5, r6 - lsls r0, 1 - add r0, r8 - ldr r2, _081012C8 @ =0x0000100b - adds r1, r2, 0 - strh r1, [r0] -_08101296: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081012A8: .4byte sPhraseFrameDimensions -_081012AC: .4byte 0x00001001 -_081012B0: .4byte 0x00001002 -_081012B4: .4byte 0x00001003 -_081012B8: .4byte 0x00001005 -_081012BC: .4byte 0x00001007 -_081012C0: .4byte 0x00001009 -_081012C4: .4byte 0x0000100a -_081012C8: .4byte 0x0000100b - thumb_func_end sub_8101100 - - thumb_func_start sub_81012CC -sub_81012CC: @ 81012CC - push {lr} - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - pop {r0} - bx r0 - thumb_func_end sub_81012CC - - thumb_func_start sub_81012E0 -sub_81012E0: @ 81012E0 - push {r4,lr} - adds r4, r0, 0 - bl sub_810198C - movs r0, 0x2 - movs r1, 0x11 - bl FillWindowPixelBuffer - cmp r4, 0x1 - beq _08101304 - cmp r4, 0x1 - bcc _081012FE - cmp r4, 0x2 - beq _0810130A - b _0810130E -_081012FE: - bl sub_810133C - b _0810130E -_08101304: - bl sub_81013A0 - b _0810130E -_0810130A: - bl sub_81013DC -_0810130E: - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81012E0 - - thumb_func_start sub_810131C -sub_810131C: @ 810131C - push {lr} - bl sub_80FFE1C - lsls r0, 24 - cmp r0, 0 - bne _08101330 - movs r0, 0 - bl sub_81012E0 - b _08101336 -_08101330: - movs r0, 0x1 - bl sub_81012E0 -_08101336: - pop {r0} - bx r0 - thumb_func_end sub_810131C - - thumb_func_start sub_810133C -sub_810133C: @ 810133C - push {r4-r7,lr} - sub sp, 0xC - movs r5, 0 - movs r7, 0x60 -_08101344: - movs r4, 0 - lsls r0, r7, 24 - lsrs r6, r0, 24 -_0810134A: - lsls r0, r5, 24 - lsrs r0, 24 - adds r5, 0x1 - bl GetSelectedGroupByIndex - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x16 - beq _0810138A - bl GetEasyChatWordGroupName - adds r2, r0, 0 - movs r0, 0x54 - adds r3, r4, 0 - muls r3, r0 - adds r3, 0xA - lsls r3, 24 - lsrs r3, 24 - str r6, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0x1 - bl sub_8100D84 - adds r4, 0x1 - cmp r4, 0x1 - ble _0810134A - adds r7, 0x10 - b _08101344 -_0810138A: - bl sub_80FFE28 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_81019B0 - add sp, 0xC - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_810133C - - thumb_func_start sub_81013A0 -sub_81013A0: @ 81013A0 - push {r4-r6,lr} - sub sp, 0xC - movs r5, 0 - movs r4, 0xC0 - lsls r4, 23 - ldr r6, _081013D8 @ =gUnknown_843F8E0 -_081013AC: - ldm r6!, {r2} - lsrs r0, r4, 24 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0x1 - movs r3, 0xA - bl sub_8100D84 - movs r0, 0x80 - lsls r0, 21 - adds r4, r0 - adds r5, 0x1 - cmp r5, 0x3 - bls _081013AC - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081013D8: .4byte gUnknown_843F8E0 - thumb_func_end sub_81013A0 - - thumb_func_start sub_81013DC -sub_81013DC: @ 81013DC - push {lr} - movs r0, 0 - movs r1, 0x4 - bl sub_81014AC - pop {r0} - bx r0 - thumb_func_end sub_81013DC - - thumb_func_start sub_81013EC -sub_81013EC: @ 81013EC - push {r4,lr} - bl sub_80FFE48 - adds r4, r0, 0 - adds r4, 0x3 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8101558 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_81014AC - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81013EC - - thumb_func_start sub_8101410 -sub_8101410: @ 8101410 - push {r4,lr} - bl sub_80FFE48 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8101558 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_81014AC - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8101410 - - thumb_func_start sub_8101434 -sub_8101434: @ 8101434 - push {r4,r5,lr} - bl sub_80FFE48 - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - adds r0, r5, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_80FFE54 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bls _08101456 - adds r4, r0, 0 -_08101456: - cmp r5, r4 - bcs _08101470 - subs r4, r5 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8101558 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_81014AC -_08101470: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8101434 - - thumb_func_start sub_8101478 -sub_8101478: @ 8101478 - push {r4,r5,lr} - bl sub_80FFE48 - lsls r0, 24 - lsrs r5, r0, 24 - bl sub_8101A48 - lsls r0, 24 - lsrs r0, 24 - cmp r5, r0 - bcs _081014A4 - subs r4, r0, r5 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8101558 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_81014AC -_081014A4: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8101478 - - thumb_func_start sub_81014AC -sub_81014AC: @ 81014AC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - lsls r4, r0, 1 - lsls r0, 4 - adds r1, r0, 0 - adds r1, 0x60 - movs r0, 0xFF - ands r1, r0 - movs r0, 0 - cmp r0, r10 - bge _08101538 - ldr r2, _08101550 @ =gUnknown_203ACEC - mov r9, r2 -_081014D8: - movs r5, 0 - movs r2, 0x10 - adds r2, r1 - mov r8, r2 - adds r7, r0, 0x1 - lsls r0, r1, 24 - lsrs r6, r0, 24 -_081014E6: - lsls r0, r4, 16 - lsrs r0, 16 - adds r4, 0x1 - bl GetDisplayedWordByIndex - lsls r0, 16 - lsrs r1, r0, 16 - ldr r0, _08101554 @ =0x0000ffff - cmp r1, r0 - beq _0810152A - mov r2, r9 - ldr r0, [r2] - adds r0, 0xCB - movs r2, 0 - bl CopyEasyChatWordPadded - mov r0, r9 - ldr r2, [r0] - adds r2, 0xCB - movs r0, 0xD - adds r3, r5, 0 - muls r3, r0 - adds r3, 0x3 - lsls r3, 27 - lsrs r3, 24 - str r6, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0x1 - bl sub_8100D84 -_0810152A: - adds r5, 0x1 - cmp r5, 0x1 - ble _081014E6 - mov r1, r8 - adds r0, r7, 0 - cmp r0, r10 - blt _081014D8 -_08101538: - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08101550: .4byte gUnknown_203ACEC -_08101554: .4byte 0x0000ffff - thumb_func_end sub_81014AC - - thumb_func_start sub_8101558 -sub_8101558: @ 8101558 - push {r4,r5,lr} - sub sp, 0x8 - lsls r0, 24 - lsls r1, 24 - lsrs r0, 20 - adds r3, r0, 0 - adds r3, 0x60 - movs r0, 0xFF - ands r3, r0 - lsrs r0, r1, 20 - adds r1, r3, r0 - cmp r1, 0xFF - ble _08101584 - ldr r0, _08101580 @ =0xffffff00 - adds r4, r1, r0 - movs r0, 0x80 - lsls r0, 1 - subs r0, r3 - b _08101586 - .align 2, 0 -_08101580: .4byte 0xffffff00 -_08101584: - movs r4, 0 -_08101586: - movs r5, 0xE0 - str r5, [sp] - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x4] - movs r0, 0x2 - movs r1, 0x11 - movs r2, 0 - bl FillWindowPixelRect - cmp r4, 0 - beq _081015B2 - str r5, [sp] - lsls r0, r4, 16 - lsrs r0, 16 - str r0, [sp, 0x4] - movs r0, 0x2 - movs r1, 0x11 - movs r2, 0 - movs r3, 0 - bl FillWindowPixelRect -_081015B2: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8101558 - thumb_func_start sub_81015BC sub_81015BC: @ 81015BC push {lr} diff --git a/data/data_8479668.s b/data/data_8479668.s index 0ddecfe58..50ce06127 100644 --- a/data/data_8479668.s +++ b/data/data_8479668.s @@ -13,7 +13,7 @@ .section .rodata - // berry_fix_program + // easy_chat_2 gUnknown_847A8D8:: .string "{CLEAR 11}A{CLEAR 6}B{CLEAR 6}C{CLEAR 26}D{CLEAR 6}E{CLEAR 6}F{CLEAR 26}others$" @@ -27,6 +27,8 @@ gUnknown_847A913:: gUnknown_847A934:: .string "{CLEAR 11}T{CLEAR 6}U{CLEAR 6}V{CLEAR 26}W{CLEAR 6}X{CLEAR 6}Y{CLEAR 6}Z{CLEAR 26} $" + // naming_screen + gUnknown_847A955:: .string "{CLEAR 11}a{CLEAR 6}b{CLEAR 6}c{CLEAR 26}d{CLEAR 6}e{CLEAR 6}f{CLEAR 6} {CLEAR 26}.$" @@ -63,6 +65,8 @@ gUnknown_847AA8F:: gUnknown_847AAA8:: .string "{CLEAR 11}…{CLEAR 16}“{CLEAR 16}”{CLEAR 18}‘{CLEAR 18}'{CLEAR 18} $" + // union_room_chat + gText_UnionRoomChatKeyboard_ABCDE:: .string "ABCDE$" diff --git a/data/easy_chat_2.s b/data/easy_chat_2.s index 04270adac..2eca1d8b0 100644 --- a/data/easy_chat_2.s +++ b/data/easy_chat_2.s @@ -7,13 +7,6 @@ .section .rodata .align 2 - .align 2 -gUnknown_843F8E0:: @ 843F8E0 - .4byte gUnknown_847A8D8 - .4byte gUnknown_847A8FA - .4byte gUnknown_847A913 - .4byte gUnknown_847A934 - gUnknown_843F8F0:: @ 843F8F0 sprite_sheet obj_tiles gUnknown_843F3F8, 0x0020, 0 obj_tiles gUnknown_843F418, 0x0100, 2 diff --git a/include/data_8479668.h b/include/data_8479668.h index 1a1f44267..aba3721c8 100644 --- a/include/data_8479668.h +++ b/include/data_8479668.h @@ -32,4 +32,9 @@ extern const u8 gText_UnionRoomChatKeyboard_Emoji8[]; extern const u8 gText_UnionRoomChatKeyboard_Emoji9[]; extern const u8 gText_UnionRoomChatKeyboard_Emoji10[]; +extern const u8 gUnknown_847A8D8[]; +extern const u8 gUnknown_847A8FA[]; +extern const u8 gUnknown_847A913[]; +extern const u8 gUnknown_847A934[]; + #endif //GUARD_DATA_8479668_H diff --git a/include/graphics.h b/include/graphics.h index 5bac692a4..2b449ea94 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4889,5 +4889,6 @@ extern const u32 gUnknown_8EB0ADC[]; // easy_chat_3 extern const u32 gEasyChatWindow_Gfx[]; extern const u32 gEasyChatWindow_Tilemap[]; +extern const u32 gEasyChatMode_Pal[]; #endif //GUARD_GRAPHICS_H diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index d01203dcc..84a53aa1a 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -1,8 +1,11 @@ #include "global.h" #include "gflib.h" +#include "data_8479668.h" #include "easy_chat.h" #include "graphics.h" +#include "menu.h" #include "new_menu_helpers.h" +#include "text_window.h" struct Unk203A11C { @@ -13,8 +16,7 @@ struct Unk203A11C u8 unk7; s8 unk8; u8 unk9; - u8 unkA; - u8 unkB[0xC1]; + u8 unkA[0xC1]; u8 unkCC[0x202]; u16 unk2CE; int unk2D0; @@ -69,6 +71,7 @@ bool8 sub_8100BF4(void); void sub_8100C5C(void); void sub_8100CBC(void); void sub_8100D24(void); +void sub_8100DC4(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 bg, u8 fg, u8 shadow); void sub_8100E34(void); void sub_8100E7C(u8 a0); void sub_8100F18(u8 initialCursorPos); @@ -76,15 +79,21 @@ void sub_8100F44(void); void sub_8100FDC(void); void sub_8101100(u16 *buffer); void sub_81012CC(void); -void sub_81012E0(u8 a0); +void sub_81012E0(u32 a0); void sub_810131C(void); +void sub_810133C(void); +void PrintEasyChatKeyboardText(void); +void sub_81013DC(void); void sub_81013EC(void); void sub_8101410(void); void sub_8101434(void); void sub_8101478(void); +void sub_81014AC(u8 a0, u8 a1); +void sub_8101558(u8 a0, u8 a1); void sub_81015BC(void); void sub_81015D4(u8 a0); bool8 sub_81016AC(void); +void sub_810198C(void); void sub_81019B0(s16 a0, u8 a1); bool8 sub_8101A10(void); s32 sub_8101A48(void); @@ -243,7 +252,7 @@ const struct WindowTemplate sEasyChatWindowTemplates[] = { DUMMY_WIN_TEMPLATE, }; -const struct WindowTemplate gUnknown_843F8D0 = { +const struct WindowTemplate sEasyChatYesNoWindowTemplate = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 9, @@ -254,7 +263,14 @@ const struct WindowTemplate gUnknown_843F8D0 = { }; const u8 gUnknown_843F8D8[] = _("{UNDERSCORE}"); -const u8 gUnknown_843F8DB[] = _("{CLEAR 17}"); +const u8 sText_Clear17[] = _("{CLEAR 17}"); + +const u8 *const sEasyChatKeyboardText[] = { + gUnknown_847A8D8, + gUnknown_847A8FA, + gUnknown_847A913, + gUnknown_847A934 +}; bool8 sub_80FFF80(void) { @@ -981,3 +997,423 @@ bool8 sub_8100B70(void) return TRUE; } + +bool8 sub_8100BF4(void) +{ + gUnknown_203ACEC = Alloc(sizeof(*gUnknown_203ACEC)); + if (!gUnknown_203ACEC) + return FALSE; + + gUnknown_203ACEC->unk0 = 0; + gUnknown_203ACEC->unk2D8 = NULL; + gUnknown_203ACEC->unk2DC = NULL; + gUnknown_203ACEC->unk2E0 = NULL; + gUnknown_203ACEC->unk2E4 = NULL; + gUnknown_203ACEC->unk2E8 = NULL; + gUnknown_203ACEC->unk2EC = NULL; + gUnknown_203ACEC->unk2F0 = NULL; + gUnknown_203ACEC->unk2F4 = NULL; + gUnknown_203ACEC->unk2F8 = NULL; + gUnknown_203ACEC->unk2FC = NULL; + return TRUE; +} + +void sub_8100C5C(void) +{ + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON); +} + +void sub_8100CBC(void) +{ + ResetPaletteFade(); + LoadPalette(gEasyChatMode_Pal, 0, 32); + LoadPalette(gUnknown_843F76C, 1 * 16, 32); + LoadPalette(gUnknown_843F78C, 4 * 16, 32); + LoadPalette(gUnknown_843F874, 10 * 16, 8); + LoadPalette(gUnknown_843F87C, 11 * 16, 10); + LoadPalette(gUnknown_843F87C, 15 * 16, 10); + LoadPalette(gUnknown_843F87C, 3 * 16, 10); +} + +void sub_8100D24(void) +{ + int xOffset; + const u8 *titleText = GetTitleText(); + if (!titleText) + return; + + xOffset = (128 - GetStringWidth(1, titleText, 0)) / 2u; + FillWindowPixelBuffer(0, PIXEL_FILL(0)); + sub_8100DC4(0, 1, titleText, xOffset, 0, TEXT_SPEED_FF, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + +void sub_8100D84(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) +{ + if (fontId == 1) y += 2; + AddTextPrinterParameterized(windowId, fontId, str, x, y, speed, callback); +} + +void sub_8100DC4(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, u8 bg, u8 fg, u8 shadow) +{ + u8 color[3]; + if (fontId == 1) y += 2; + color[0] = bg; + color[1] = fg; + color[2] = shadow; + AddTextPrinterParameterized3(windowId, fontId, x, y, color, speed, str); +} + +void sub_8100E34(void) +{ + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17); + TextWindow_SetUserSelectedFrame(1, 1, 0xE0); + DrawTextBorderOuter(1, 1, 14); + sub_8100E7C(0); + PutWindowTilemap(1); + CopyBgTilemapBufferToVram(0); +} + +void sub_8100E7C(u8 arg0) +{ + const u8 *text2 = NULL; + const u8 *text1 = NULL; + switch (arg0) + { + case 0: + GetEasyChatInstructionsText(&text1, &text2); + break; + case 2: + sub_80FFDC8(&text1, &text2); + break; + case 3: + GetEasyChatConfirmText(&text1, &text2); + break; + case 1: + GetEasyChatConfirmDeletionText(&text1, &text2); + break; + } + + FillWindowPixelBuffer(1, PIXEL_FILL(1)); + if (text1) + sub_8100D84(1, 1, text1, 0, 0, TEXT_SPEED_FF, NULL); + + if (text2) + sub_8100D84(1, 1, text2, 0, 16, TEXT_SPEED_FF, NULL); + + CopyWindowToVram(1, 3); +} + +void sub_8100F18(u8 initialCursorPos) +{ + CreateYesNoMenu(&sEasyChatYesNoWindowTemplate, 1, 0, 2, 0x001, 14, initialCursorPos); +} + +void sub_8100F44(void) +{ + u8 frameId; + struct WindowTemplate template; + + frameId = GetEasyChatScreenFrameId(); + template.bg = 3; + template.tilemapLeft = sPhraseFrameDimensions[frameId].left; + template.tilemapTop = sPhraseFrameDimensions[frameId].top; + template.width = sPhraseFrameDimensions[frameId].width; + template.height = sPhraseFrameDimensions[frameId].height; + template.paletteNum = 11; + template.baseBlock = 0x060; + gUnknown_203ACEC->windowId = AddWindow(&template); + PutWindowTilemap(gUnknown_203ACEC->windowId); +} + +void sub_8100FDC(void) +{ + u16 *ecWord; + u8 numColumns, numRows; + u8 *str; + u8 frameId; + int i, j, k; + + ecWord = GetEasyChatWordBuffer(); + numColumns = GetNumColumns(); + numRows = GetNumRows(); + frameId = GetEasyChatScreenFrameId(); + FillWindowPixelBuffer(gUnknown_203ACEC->windowId, PIXEL_FILL(1)); + for (i = 0; i < numRows; i++) + { + str = gUnknown_203ACEC->unkA; + str[0] = EOS; + str = StringAppend(str, sText_Clear17); + for (j = 0; j < numColumns; j++) + { + if (*ecWord != 0xFFFF) + { + str = CopyEasyChatWord(str, *ecWord); + ecWord++; + } + else + { + str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_RED); + ecWord++; + for (k = 0; k < 7; k++) + { + *str++ = CHAR_EXTRA_EMOJI; + *str++ = 9; + } + + str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_DARK_GREY); + } + + str = StringAppend(str, sText_Clear17); + if (frameId == 2) + { + if (j == 0 && i == 4) + break; + } + } + + *str = EOS; + sub_8100D84(gUnknown_203ACEC->windowId, 1, gUnknown_203ACEC->unkA, 0, i * 16, TEXT_SPEED_FF, NULL); + } + + CopyWindowToVram(gUnknown_203ACEC->windowId, 3); +} + +void sub_8101100(u16 *tilemap) +{ + u8 frameId; + int right, bottom; + int x, y; + + frameId = GetEasyChatScreenFrameId(); + CpuFastFill(0, tilemap, BG_SCREEN_SIZE); + if (frameId == 2) + { + right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width; + bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height; + for (y = sPhraseFrameDimensions[frameId].top; y < bottom; y++) + { + x = sPhraseFrameDimensions[frameId].left - 1; + tilemap[y * 32 + x] = 0x1005; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x1000; + + tilemap[y* 32 + x] = 0x1007; + } + } + else + { + y = sPhraseFrameDimensions[frameId].top - 1; + x = sPhraseFrameDimensions[frameId].left - 1; + right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width; + bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height; + tilemap[y * 32 + x] = 0x1001; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x1002; + + tilemap[y * 32 + x] = 0x1003; + y++; + for (; y < bottom; y++) + { + x = sPhraseFrameDimensions[frameId].left - 1; + tilemap[y * 32 + x] = 0x1005; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x1000; + + tilemap[y* 32 + x] = 0x1007; + } + + x = sPhraseFrameDimensions[frameId].left - 1; + tilemap[y * 32 + x] = 0x1009; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x100A; + + tilemap[y * 32 + x] = 0x100B; + } +} + +void sub_81012CC(void) +{ + PutWindowTilemap(2); + CopyBgTilemapBufferToVram(2); +} + +void sub_81012E0(u32 arg0) +{ + sub_810198C(); + FillWindowPixelBuffer(2, PIXEL_FILL(1)); + switch (arg0) + { + case 0: + sub_810133C(); + break; + case 1: + PrintEasyChatKeyboardText(); + break; + case 2: + sub_81013DC(); + break; + } + + CopyWindowToVram(2, 2); +} + +void sub_810131C(void) +{ + if (!sub_80FFE1C()) + sub_81012E0(0); + else + sub_81012E0(1); +} + +void sub_810133C(void) +{ + int i; + int x, y; + + i = 0; + y = 96; + while (1) + { + for (x = 0; x < 2; x++) + { + u8 groupId = GetSelectedGroupByIndex(i++); + if (groupId == EC_NUM_GROUPS) + { + sub_81019B0(sub_80FFE28(), 0); + return; + } + + sub_8100D84(2, 1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SPEED_FF, NULL); + } + + y += 16; + } +} + +void PrintEasyChatKeyboardText(void) +{ + u32 i; + + for (i = 0; i < NELEMS(sEasyChatKeyboardText); i++) + sub_8100D84(2, 1, sEasyChatKeyboardText[i], 10, 96 + i * 16, TEXT_SPEED_FF, NULL); +} + +void sub_81013DC(void) +{ + sub_81014AC(0, 4); +} + +void sub_81013EC(void) +{ + u8 var0 = sub_80FFE48() + 3; + sub_8101558(var0, 1); + sub_81014AC(var0, 1); +} + +void sub_8101410(void) +{ + u8 var0 = sub_80FFE48(); + sub_8101558(var0, 1); + sub_81014AC(var0, 1); +} + +void sub_8101434(void) +{ + u8 var0 = sub_80FFE48(); + u8 var1 = var0 + 4; + u8 var2 = sub_80FFE54() + 1; + if (var1 > var2) + var1 = var2; + + if (var0 < var1) + { + u8 var3 = var1 - var0; + sub_8101558(var0, var3); + sub_81014AC(var0, var3); + } +} + +void sub_8101478(void) +{ + u8 var0 = sub_80FFE48(); + u8 var1 = sub_8101A48(); + if (var0 < var1) + { + u8 var2 = var1 - var0; + sub_8101558(var0, var2); + sub_81014AC(var0, var2); + } +} + +void sub_81014AC(u8 arg0, u8 arg1) +{ + int i, j; + u16 easyChatWord; + u8 *str; + int y; + u8 y_; + int var0; + + var0 = arg0 * 2; + y = (arg0 * 16 + 96) & 0xFF; + + for (i = 0; i < arg1; i++) + { + for (j = 0; j < 2; j++) + { + // FIXME: Dumb trick needed to match + y_ = y << 18 >> 18; + easyChatWord = GetDisplayedWordByIndex(var0++); + if (easyChatWord != 0xFFFF) + { + + CopyEasyChatWordPadded(gUnknown_203ACEC->unkCC, easyChatWord, 0); + + sub_8100D84(2, 1, gUnknown_203ACEC->unkCC, (j * 13 + 3) * 8, y_, TEXT_SPEED_FF, NULL); + } + } + y += 16; + + } + + CopyWindowToVram(2, 2); +} + +void sub_8101558(u8 arg0, u8 arg1) +{ + int y; + int var0; + int var1; + int var2; + + y = (arg0 * 16 + 96) & 0xFF; + var2 = arg1 * 16; + var0 = y + var2; + if (var0 > 255) + { + var1 = var0 - 256; + var2 = 256 - y; + } + else + { + var1 = 0; + } + + FillWindowPixelRect(2, PIXEL_FILL(1), 0, y, 224, var2); + if (var1) + FillWindowPixelRect(2, PIXEL_FILL(1), 0, 0, 224, var1); +} diff --git a/src/graphics.c b/src/graphics.c index b0712ca8a..100ddfdf6 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1215,7 +1215,7 @@ const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp. const u16 gHoennTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star_em.gbapal"); const u32 gHoennTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_em.4bpp.lz"); -const u16 gUnknown_8E99D8C[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal"); +const u16 gEasyChatMode_Pal[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal"); const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz"); const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz"); |