diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-11-01 15:59:24 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-11-01 15:59:24 -0400 |
commit | 36bea47ea6d2a76a0add9eaf7f5f817eea9c49e5 (patch) | |
tree | 82baa5aa7b7ab4ea6a2047f96c816d66c90766b7 | |
parent | 486a3abf6b9904bbef7219ea66023ba6ac2bb886 (diff) |
Static symbols in easy_chat
-rw-r--r-- | asm/easy_chat.s | 1863 | ||||
-rw-r--r-- | asm/link_rfu.s | 2 | ||||
-rw-r--r-- | asm/mon_markings.s | 6 | ||||
-rw-r--r-- | data/strings.s | 2 | ||||
-rw-r--r-- | include/constants/easy_chat.h | 2 | ||||
-rw-r--r-- | include/easy_chat.h | 13 | ||||
-rw-r--r-- | include/global.h | 8 | ||||
-rw-r--r-- | include/mevent.h | 1 | ||||
-rw-r--r-- | include/strings.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/easy_chat.c | 4318 | ||||
-rw-r--r-- | src/mail.c | 4 | ||||
-rw-r--r-- | src/mevent.c | 2 | ||||
-rw-r--r-- | src/trade_scene.c | 3 | ||||
-rw-r--r-- | sym_bss.txt | 22 | ||||
-rw-r--r-- | sym_ewram.txt | 13 |
16 files changed, 197 insertions, 6065 deletions
diff --git a/asm/easy_chat.s b/asm/easy_chat.s deleted file mode 100644 index 295487be2..000000000 --- a/asm/easy_chat.s +++ /dev/null @@ -1,1863 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80BD718 -sub_80BD718: @ 80BD718 - push {lr} - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - cmp r0, 0x14 - beq _080BD73E - cmp r0, 0x14 - bgt _080BD738 - cmp r0, 0x11 - blt _080BD74C - ldr r0, _080BD734 @ =0x0000082c - bl FlagGet - b _080BD746 - .align 2, 0 -_080BD734: .4byte 0x0000082c -_080BD738: - cmp r1, 0x15 - beq _080BD742 - b _080BD74C -_080BD73E: - movs r0, 0 - b _080BD74E -_080BD742: - bl sub_80BDCA8 -_080BD746: - lsls r0, 24 - lsrs r0, 24 - b _080BD74E -_080BD74C: - movs r0, 0x1 -_080BD74E: - pop {r1} - bx r1 - thumb_func_end sub_80BD718 - - thumb_func_start start_menu_is_selected_item_valid -start_menu_is_selected_item_valid: @ 80BD754 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - cmp r0, 0x15 - bne _080BD76C - movs r0, 0 - bl GetNationalPokedexCount - lsls r0, 16 - lsrs r0, 16 - b _080BD782 -_080BD76C: - bl sub_80BD718 - lsls r0, 24 - cmp r0, 0 - bne _080BD77A - movs r0, 0 - b _080BD782 -_080BD77A: - ldr r0, _080BD788 @ =gEasyChatGroups - lsls r1, r4, 3 - adds r1, r0 - ldrh r0, [r1, 0x6] -_080BD782: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080BD788: .4byte gEasyChatGroups - thumb_func_end start_menu_is_selected_item_valid - - thumb_func_start sub_80BD78C -sub_80BD78C: @ 80BD78C - push {r4,r5,lr} - lsls r2, r0, 16 - lsrs r1, r2, 16 - ldr r0, _080BD7B8 @ =0x0000ffff - cmp r1, r0 - beq _080BD7EC - lsrs r3, r2, 25 - ldr r5, _080BD7BC @ =0x000001ff - ands r5, r1 - cmp r3, 0x15 - bhi _080BD7F0 - ldr r0, _080BD7C0 @ =gEasyChatGroups - lsls r2, r3, 3 - adds r1, r2, r0 - ldrh r4, [r1, 0x4] - cmp r3, 0x13 - bgt _080BD7C4 - cmp r3, 0x12 - bge _080BD7C8 - cmp r3, 0 - beq _080BD7C8 - b _080BD7E8 - .align 2, 0 -_080BD7B8: .4byte 0x0000ffff -_080BD7BC: .4byte 0x000001ff -_080BD7C0: .4byte gEasyChatGroups -_080BD7C4: - cmp r3, 0x15 - bne _080BD7E8 -_080BD7C8: - adds r0, r2, r0 - ldr r2, [r0] - movs r1, 0 - cmp r1, r4 - bcs _080BD7F0 -_080BD7D2: - lsls r0, r1, 1 - adds r0, r2 - ldrh r0, [r0] - cmp r5, r0 - beq _080BD7EC - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, r4 - bcc _080BD7D2 - b _080BD7F0 -_080BD7E8: - cmp r5, r4 - bcs _080BD7F0 -_080BD7EC: - movs r0, 0 - b _080BD7F2 -_080BD7F0: - movs r0, 0x1 -_080BD7F2: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80BD78C - - thumb_func_start GetEasyChatWord -GetEasyChatWord: @ 80BD7F8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r2, r1, 16 - cmp r0, 0x13 - bgt _080BD810 - cmp r0, 0x12 - bge _080BD824 - cmp r0, 0 - beq _080BD814 - b _080BD834 -_080BD810: - cmp r0, 0x15 - bne _080BD834 -_080BD814: - movs r0, 0xB - muls r0, r2 - ldr r1, _080BD820 @ =gSpeciesNames - adds r0, r1 - b _080BD846 - .align 2, 0 -_080BD820: .4byte gSpeciesNames -_080BD824: - movs r0, 0xD - muls r0, r2 - ldr r1, _080BD830 @ =gMoveNames - adds r0, r1 - b _080BD846 - .align 2, 0 -_080BD830: .4byte gMoveNames -_080BD834: - ldr r1, _080BD84C @ =gEasyChatGroups - lsls r0, 3 - adds r0, r1 - ldr r1, [r0] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] -_080BD846: - pop {r1} - bx r1 - .align 2, 0 -_080BD84C: .4byte gEasyChatGroups - thumb_func_end GetEasyChatWord - - thumb_func_start CopyEasyChatWord -CopyEasyChatWord: @ 80BD850 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r6, r1, 16 - lsrs r0, r6, 16 - adds r4, r0, 0 - bl sub_80BD78C - lsls r0, 24 - cmp r0, 0 - beq _080BD86C - ldr r1, _080BD868 @ =gUnknown_841E093 - b _080BD87E - .align 2, 0 -_080BD868: .4byte gUnknown_841E093 -_080BD86C: - ldr r0, _080BD888 @ =0x0000ffff - cmp r4, r0 - beq _080BD890 - ldr r1, _080BD88C @ =0x000001ff - ands r1, r4 - lsrs r0, r6, 25 - bl GetEasyChatWord - adds r1, r0, 0 -_080BD87E: - adds r0, r5, 0 - bl StringCopy - b _080BD896 - .align 2, 0 -_080BD888: .4byte 0x0000ffff -_080BD88C: .4byte 0x000001ff -_080BD890: - movs r0, 0xFF - strb r0, [r5] - adds r0, r5, 0 -_080BD896: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end CopyEasyChatWord - - thumb_func_start ConvertEasyChatWordsToString -ConvertEasyChatWordsToString: @ 80BD89C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r2, 16 - lsls r3, 16 - lsrs r3, 16 - mov r9, r3 - ldr r0, _080BD924 @ =0xffff0000 - adds r2, r0 - lsrs r7, r2, 16 - movs r0, 0 - cmp r0, r9 - bcs _080BD90C -_080BD8BE: - movs r6, 0 - adds r0, 0x1 - mov r8, r0 - cmp r6, r7 - bcs _080BD8F0 - ldr r2, _080BD928 @ =0x0000ffff -_080BD8CA: - ldrh r1, [r5] - adds r0, r4, 0 - str r2, [sp] - bl CopyEasyChatWord - adds r4, r0, 0 - ldrh r0, [r5] - ldr r2, [sp] - cmp r0, r2 - beq _080BD8E4 - movs r0, 0 - strb r0, [r4] - adds r4, 0x1 -_080BD8E4: - adds r5, 0x2 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, r7 - bcc _080BD8CA -_080BD8F0: - ldrh r1, [r5] - adds r5, 0x2 - adds r0, r4, 0 - bl CopyEasyChatWord - adds r4, r0, 0 - movs r0, 0xFE - strb r0, [r4] - adds r4, 0x1 - mov r1, r8 - lsls r0, r1, 16 - lsrs r0, 16 - cmp r0, r9 - bcc _080BD8BE -_080BD90C: - subs r4, 0x1 - movs r0, 0xFF - strb r0, [r4] - adds r0, r4, 0 - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080BD924: .4byte 0xffff0000 -_080BD928: .4byte 0x0000ffff - thumb_func_end ConvertEasyChatWordsToString - - thumb_func_start sub_80BD92C -sub_80BD92C: @ 80BD92C - push {r4,r5,lr} - lsls r5, r0, 16 - lsrs r0, r5, 16 - adds r4, r0, 0 - ldr r0, _080BD940 @ =0x0000ffff - cmp r4, r0 - bne _080BD944 - movs r0, 0 - b _080BD96A - .align 2, 0 -_080BD940: .4byte 0x0000ffff -_080BD944: - adds r0, r4, 0 - bl sub_80BD78C - lsls r0, 24 - cmp r0, 0 - bne _080BD960 - ldr r1, _080BD95C @ =0x000001ff - ands r1, r4 - lsrs r0, r5, 25 - bl GetEasyChatWord - b _080BD962 - .align 2, 0 -_080BD95C: .4byte 0x000001ff -_080BD960: - ldr r0, _080BD970 @ =gUnknown_841E093 -_080BD962: - bl StringLength - lsls r0, 16 - lsrs r0, 16 -_080BD96A: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080BD970: .4byte gUnknown_841E093 - thumb_func_end sub_80BD92C - - thumb_func_start sub_80BD974 -sub_80BD974: @ 80BD974 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r6, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - lsls r3, 16 - lsrs r3, 16 - mov r10, r3 - movs r7, 0 - cmp r7, r8 - bcs _080BD9D6 - subs r0, r1, 0x1 - lsls r0, 16 - mov r9, r0 -_080BD99E: - mov r0, r9 - lsrs r4, r0, 16 - movs r5, 0 - cmp r5, r1 - bcs _080BD9C4 -_080BD9A8: - ldrh r0, [r6] - adds r6, 0x2 - str r1, [sp] - bl sub_80BD92C - adds r0, r4, r0 - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, [sp] - cmp r5, r1 - bcc _080BD9A8 -_080BD9C4: - cmp r4, r10 - bls _080BD9CC - movs r0, 0x1 - b _080BD9D8 -_080BD9CC: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, r8 - bcc _080BD99E -_080BD9D6: - movs r0, 0 -_080BD9D8: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80BD974 - - thumb_func_start sub_80BD9E8 -sub_80BD9E8: @ 80BD9E8 - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - bl Random - ldr r2, _080BDA38 @ =gEasyChatGroups - lsls r1, r4, 3 - adds r1, r2 - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r1, 0x4] - bl __umodsi3 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r4, 0 - beq _080BDA16 - cmp r4, 0x15 - beq _080BDA16 - cmp r4, 0x12 - beq _080BDA16 - cmp r4, 0x13 - bne _080BDA24 -_080BDA16: - ldr r1, _080BDA38 @ =gEasyChatGroups - lsls r0, r4, 3 - adds r0, r1 - ldr r1, [r0] - lsls r0, r2, 1 - adds r0, r1 - ldrh r2, [r0] -_080BDA24: - movs r0, 0x7F - ands r0, r4 - lsls r0, 9 - ldr r1, _080BDA3C @ =0x000001ff - ands r2, r1 - orrs r0, r2 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080BDA38: .4byte gEasyChatGroups -_080BDA3C: .4byte 0x000001ff - thumb_func_end sub_80BD9E8 - - thumb_func_start sub_80BDA40 -sub_80BDA40: @ 80BDA40 - push {r4,lr} - lsls r0, 16 - lsrs r0, 16 - adds r4, r0, 0 - lsls r0, r4, 24 - lsrs r0, 24 - bl sub_80BD718 - lsls r0, 24 - cmp r0, 0 - bne _080BDA60 - ldr r0, _080BDA5C @ =0x0000ffff - b _080BDA74 - .align 2, 0 -_080BDA5C: .4byte 0x0000ffff -_080BDA60: - cmp r4, 0x15 - beq _080BDA6C - adds r0, r4, 0 - bl sub_80BD9E8 - b _080BDA70 -_080BDA6C: - bl sub_80BDCB8 -_080BDA70: - lsls r0, 16 - lsrs r0, 16 -_080BDA74: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80BDA40 - - thumb_func_start sub_80BDA7C -sub_80BDA7C: @ 80BDA7C - push {r4,r5,lr} - ldr r0, _080BDA90 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x1 - beq _080BDAB4 - cmp r0, 0x1 - bgt _080BDA94 - cmp r0, 0 - beq _080BDA9E - b _080BDB08 - .align 2, 0 -_080BDA90: .4byte gSpecialVar_0x8004 -_080BDA94: - cmp r0, 0x2 - beq _080BDADC - cmp r0, 0x3 - beq _080BDAEC - b _080BDB08 -_080BDA9E: - ldr r0, _080BDAAC @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, _080BDAB0 @ =0x00002ca0 - adds r5, r0, r1 - movs r2, 0x2 - b _080BDAF6 - .align 2, 0 -_080BDAAC: .4byte gSaveBlock1Ptr -_080BDAB0: .4byte 0x00002ca0 -_080BDAB4: - ldr r0, _080BDAD4 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, _080BDAD8 @ =0x00002cac - adds r5, r0, r1 - adds r0, r5, 0 - movs r1, 0x3 - movs r2, 0x2 - movs r3, 0x12 - bl sub_80BD974 - lsls r0, 24 - cmp r0, 0 - beq _080BDAF4 - movs r2, 0x2 - movs r3, 0x3 - b _080BDAF8 - .align 2, 0 -_080BDAD4: .4byte gSaveBlock1Ptr -_080BDAD8: .4byte 0x00002cac -_080BDADC: - ldr r0, _080BDAE4 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, _080BDAE8 @ =0x00002cb8 - b _080BDAF2 - .align 2, 0 -_080BDAE4: .4byte gSaveBlock1Ptr -_080BDAE8: .4byte 0x00002cb8 -_080BDAEC: - ldr r0, _080BDB10 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, _080BDB14 @ =0x00002cc4 -_080BDAF2: - adds r5, r0, r1 -_080BDAF4: - movs r2, 0x3 -_080BDAF6: - movs r3, 0x2 -_080BDAF8: - ldr r4, _080BDB18 @ =gStringVar4 - adds r0, r4, 0 - adds r1, r5, 0 - bl ConvertEasyChatWordsToString - adds r0, r4, 0 - bl ShowFieldAutoScrollMessage -_080BDB08: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BDB10: .4byte gSaveBlock1Ptr -_080BDB14: .4byte 0x00002cc4 -_080BDB18: .4byte gStringVar4 - thumb_func_end sub_80BDA7C - - thumb_func_start BufferRandomHobbyOrLifestyleString -BufferRandomHobbyOrLifestyleString: @ 80BDB1C - push {lr} - bl Random - movs r1, 0x1 - ands r1, r0 - movs r0, 0xC - cmp r1, 0 - beq _080BDB2E - movs r0, 0xD -_080BDB2E: - bl sub_80BDA40 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - ldr r0, _080BDB44 @ =gStringVar2 - bl CopyEasyChatWord - pop {r0} - bx r0 - .align 2, 0 -_080BDB44: .4byte gStringVar2 - thumb_func_end BufferRandomHobbyOrLifestyleString - - thumb_func_start sub_80BDB48 -sub_80BDB48: @ 80BDB48 - lsls r0, 24 - lsrs r2, r0, 27 - movs r1, 0xE0 - lsls r1, 19 - ands r1, r0 - lsrs r1, 24 - ldr r0, _080BDB68 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r3, _080BDB6C @ =0x00002f10 - adds r0, r3 - adds r0, r2 - ldrb r0, [r0] - asrs r0, r1 - movs r1, 0x1 - ands r0, r1 - bx lr - .align 2, 0 -_080BDB68: .4byte gSaveBlock1Ptr -_080BDB6C: .4byte 0x00002f10 - thumb_func_end sub_80BDB48 - - thumb_func_start EnableRareWord -EnableRareWord: @ 80BDB70 - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x20 - bhi _080BDB94 - lsrs r3, r0, 27 - movs r2, 0x7 - ands r2, r1 - ldr r0, _080BDB98 @ =gSaveBlock1Ptr - ldr r1, [r0] - ldr r0, _080BDB9C @ =0x00002f10 - adds r1, r0 - adds r1, r3 - movs r0, 0x1 - lsls r0, r2 - ldrb r2, [r1] - orrs r0, r2 - strb r0, [r1] -_080BDB94: - pop {r0} - bx r0 - .align 2, 0 -_080BDB98: .4byte gSaveBlock1Ptr -_080BDB9C: .4byte 0x00002f10 - thumb_func_end EnableRareWord - - thumb_func_start sub_80BDBA0 -sub_80BDBA0: @ 80BDBA0 - push {r4,r5,lr} - movs r4, 0 - movs r5, 0 -_080BDBA6: - adds r0, r4, 0 - bl sub_80BDB48 - lsls r0, 24 - cmp r0, 0 - beq _080BDBB8 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_080BDBB8: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x20 - bls _080BDBA6 - adds r0, r5, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80BDBA0 - - thumb_func_start sub_80BDBCC -sub_80BDBCC: @ 80BDBCC - push {r4-r6,lr} - bl sub_80BDBA0 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x21 - bne _080BDBF8 - b _080BDC32 -_080BDBDC: - adds r0, r5, 0 - bl EnableRareWord - ldr r0, _080BDBF4 @ =0x000001ff - ands r4, r0 - movs r1, 0xA0 - lsls r1, 6 - adds r0, r1, 0 - orrs r4, r0 - adds r0, r4, 0 - b _080BDC34 - .align 2, 0 -_080BDBF4: .4byte 0x000001ff -_080BDBF8: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x21 - subs r1, r4 - bl __modsi3 - lsls r0, 16 - lsrs r6, r0, 16 - movs r4, 0 -_080BDC0E: - lsls r0, r4, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - bl sub_80BDB48 - lsls r0, 24 - cmp r0, 0 - bne _080BDC28 - cmp r6, 0 - beq _080BDBDC - subs r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 -_080BDC28: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x20 - bls _080BDC0E -_080BDC32: - ldr r0, _080BDC3C @ =0x0000ffff -_080BDC34: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080BDC3C: .4byte 0x0000ffff - thumb_func_end sub_80BDBCC - - thumb_func_start sub_80BDC40 -sub_80BDC40: @ 80BDC40 - push {r4,r5,lr} - bl sub_80BDBA0 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080BDC64 - b _080BDC9A -_080BDC50: - ldr r0, _080BDC60 @ =0x000001ff - ands r4, r0 - movs r1, 0xA0 - lsls r1, 6 - adds r0, r1, 0 - orrs r4, r0 - adds r0, r4, 0 - b _080BDC9C - .align 2, 0 -_080BDC60: .4byte 0x000001ff -_080BDC64: - bl Random - lsls r0, 16 - lsrs r0, 16 - adds r1, r5, 0 - bl __umodsi3 - lsls r0, 16 - lsrs r5, r0, 16 - movs r4, 0 -_080BDC78: - lsls r0, r4, 24 - lsrs r0, 24 - bl sub_80BDB48 - lsls r0, 24 - cmp r0, 0 - beq _080BDC90 - cmp r5, 0 - beq _080BDC50 - subs r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_080BDC90: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x20 - bls _080BDC78 -_080BDC9A: - ldr r0, _080BDCA4 @ =0x0000ffff -_080BDC9C: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080BDCA4: .4byte 0x0000ffff - thumb_func_end sub_80BDC40 - - thumb_func_start sub_80BDCA8 -sub_80BDCA8: @ 80BDCA8 - push {lr} - bl IsNationalPokedexEnabled - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_80BDCA8 - - thumb_func_start sub_80BDCB8 -sub_80BDCB8: @ 80BDCB8 - push {r4-r7,lr} - movs r0, 0 - bl start_menu_is_selected_item_valid - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0 - bne _080BDCD8 - b _080BDD22 -_080BDCCA: - ldrh r1, [r5] - ldr r0, _080BDCD4 @ =0x000001ff - ands r0, r1 - b _080BDD24 - .align 2, 0 -_080BDCD4: .4byte 0x000001ff -_080BDCD8: - bl Random - lsls r0, 16 - lsrs r0, 16 - adds r1, r4, 0 - bl __umodsi3 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, _080BDD2C @ =gEasyChatGroups - ldr r5, [r0] - ldrh r7, [r0, 0x4] - movs r6, 0 - cmp r6, r7 - bcs _080BDD22 -_080BDCF6: - ldrh r0, [r5] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0 - bl GetSetPokedexFlag - lsls r0, 24 - cmp r0, 0 - beq _080BDD16 - cmp r4, 0 - beq _080BDCCA - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 -_080BDD16: - adds r5, 0x2 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, r7 - bcc _080BDCF6 -_080BDD22: - ldr r0, _080BDD30 @ =0x0000ffff -_080BDD24: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080BDD2C: .4byte gEasyChatGroups -_080BDD30: .4byte 0x0000ffff - thumb_func_end sub_80BDCB8 - - thumb_func_start InitEasyChatPhrases -InitEasyChatPhrases: @ 80BDD34 - push {r4-r7,lr} - movs r4, 0 - ldr r5, _080BDE00 @ =gSaveBlock1Ptr - ldr r3, _080BDE04 @ =0x00002ca0 - ldr r2, _080BDE08 @ =sDefaultProfileWords -_080BDD3E: - ldr r1, [r5] - lsls r0, r4, 1 - adds r1, r3 - adds r1, r0 - adds r0, r2 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x3 - bls _080BDD3E - movs r4, 0 - ldr r5, _080BDE00 @ =gSaveBlock1Ptr - ldr r3, _080BDE0C @ =0x00002cac - ldr r2, _080BDE10 @ =sDefaultBattleStartWords -_080BDD5E: - ldr r1, [r5] - lsls r0, r4, 1 - adds r1, r3 - adds r1, r0 - adds r0, r2 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x5 - bls _080BDD5E - movs r4, 0 - ldr r0, _080BDE00 @ =gSaveBlock1Ptr - mov r12, r0 - ldr r7, _080BDE14 @ =0x00002cb8 - ldr r0, _080BDE18 @ =0x0000ffff - adds r5, r0, 0 - ldr r6, _080BDE1C @ =0x00002cc4 -_080BDD84: - mov r0, r12 - ldr r2, [r0] - lsls r3, r4, 1 - adds r1, r2, r7 - adds r1, r3 - ldrh r0, [r1] - orrs r0, r5 - strh r0, [r1] - adds r2, r6 - adds r2, r3 - ldrh r0, [r2] - orrs r0, r5 - strh r0, [r2] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x5 - bls _080BDD84 - movs r4, 0 - ldr r7, _080BDE00 @ =gSaveBlock1Ptr - ldr r6, _080BDE20 @ =0x00002cd0 - ldr r0, _080BDE18 @ =0x0000ffff - adds r5, r0, 0 -_080BDDB2: - movs r2, 0 - lsls r0, r4, 3 - adds r0, r4 - lsls r3, r0, 2 -_080BDDBA: - ldr r1, [r7] - lsls r0, r2, 1 - adds r0, r3 - adds r1, r6 - adds r1, r0 - ldrh r0, [r1] - orrs r0, r5 - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x8 - bls _080BDDBA - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0xF - bls _080BDDB2 - movs r4, 0 - ldr r3, _080BDE00 @ =gSaveBlock1Ptr - ldr r2, _080BDE24 @ =0x00002f10 - movs r1, 0 -_080BDDE6: - ldr r0, [r3] - adds r0, r2 - adds r0, r4 - strb r1, [r0] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x3F - bls _080BDDE6 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BDE00: .4byte gSaveBlock1Ptr -_080BDE04: .4byte 0x00002ca0 -_080BDE08: .4byte sDefaultProfileWords -_080BDE0C: .4byte 0x00002cac -_080BDE10: .4byte sDefaultBattleStartWords -_080BDE14: .4byte 0x00002cb8 -_080BDE18: .4byte 0x0000ffff -_080BDE1C: .4byte 0x00002cc4 -_080BDE20: .4byte 0x00002cd0 -_080BDE24: .4byte 0x00002f10 - thumb_func_end InitEasyChatPhrases - - thumb_func_start sub_80BDE28 -sub_80BDE28: @ 80BDE28 - push {lr} - bl sub_8143DA8 - ldr r1, _080BDE40 @ =0x0000ffff - adds r2, r1, 0 - adds r1, r0, 0x6 -_080BDE34: - strh r2, [r1] - subs r1, 0x2 - cmp r1, r0 - bge _080BDE34 - pop {r0} - bx r0 - .align 2, 0 -_080BDE40: .4byte 0x0000ffff - thumb_func_end sub_80BDE28 - - thumb_func_start sub_80BDE44 -sub_80BDE44: @ 80BDE44 - push {r4,lr} - ldr r4, _080BDE60 @ =gUnknown_20399BC - ldr r0, _080BDE64 @ =0x00003ba4 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _080BDE68 - bl sub_80BDE88 - bl sub_80BDFF8 - movs r0, 0x1 - b _080BDE6A - .align 2, 0 -_080BDE60: .4byte gUnknown_20399BC -_080BDE64: .4byte 0x00003ba4 -_080BDE68: - movs r0, 0 -_080BDE6A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80BDE44 - - thumb_func_start sub_80BDE70 -sub_80BDE70: @ 80BDE70 - push {lr} - ldr r0, _080BDE84 @ =gUnknown_20399BC - ldr r0, [r0] - cmp r0, 0 - beq _080BDE7E - bl Free -_080BDE7E: - pop {r0} - bx r0 - .align 2, 0 -_080BDE84: .4byte gUnknown_20399BC - thumb_func_end sub_80BDE70 - - thumb_func_start sub_80BDE88 -sub_80BDE88: @ 80BDE88 - push {r4,lr} - ldr r4, _080BDF30 @ =gUnknown_20399BC - ldr r1, [r4] - movs r0, 0 - strh r0, [r1] - bl GetNationalPokedexCount - lsls r0, 16 - cmp r0, 0 - beq _080BDEB0 - ldr r0, [r4] - ldrh r1, [r0] - adds r2, r1, 0x1 - strh r2, [r0] - lsls r1, 16 - lsrs r1, 15 - adds r0, 0x2 - adds r0, r1 - movs r1, 0x15 - strh r1, [r0] -_080BDEB0: - movs r3, 0x1 -_080BDEB2: - ldr r0, [r4] - ldrh r2, [r0] - adds r1, r2, 0x1 - strh r1, [r0] - lsls r2, 16 - lsrs r2, 15 - adds r0, 0x2 - adds r0, r2 - strh r3, [r0] - adds r3, 0x1 - cmp r3, 0x10 - ble _080BDEB2 - ldr r0, _080BDF34 @ =0x0000082c - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080BDF0C - ldr r0, _080BDF30 @ =gUnknown_20399BC - ldr r2, [r0] - ldrh r0, [r2] - adds r1, r0, 0x1 - strh r1, [r2] - lsls r0, 16 - lsrs r0, 15 - adds r3, r2, 0x2 - adds r0, r3, r0 - movs r1, 0x11 - strh r1, [r0] - ldrh r0, [r2] - adds r1, r0, 0x1 - strh r1, [r2] - lsls r0, 16 - lsrs r0, 15 - adds r0, r3, r0 - movs r1, 0x12 - strh r1, [r0] - ldrh r0, [r2] - adds r1, r0, 0x1 - strh r1, [r2] - lsls r0, 16 - lsrs r0, 15 - adds r3, r0 - movs r0, 0x13 - strh r0, [r3] -_080BDF0C: - bl IsNationalPokedexEnabled - cmp r0, 0 - beq _080BDF2A - ldr r0, _080BDF30 @ =gUnknown_20399BC - ldr r0, [r0] - ldrh r1, [r0] - adds r2, r1, 0x1 - strh r2, [r0] - lsls r1, 16 - lsrs r1, 15 - adds r0, 0x2 - adds r0, r1 - movs r1, 0 - strh r1, [r0] -_080BDF2A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BDF30: .4byte gUnknown_20399BC -_080BDF34: .4byte 0x0000082c - thumb_func_end sub_80BDE88 - - thumb_func_start sub_80BDF38 -sub_80BDF38: @ 80BDF38 - ldr r0, _080BDF40 @ =gUnknown_20399BC - ldr r0, [r0] - ldrb r0, [r0] - bx lr - .align 2, 0 -_080BDF40: .4byte gUnknown_20399BC - thumb_func_end sub_80BDF38 - - thumb_func_start sub_80BDF44 -sub_80BDF44: @ 80BDF44 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080BDF60 @ =gUnknown_20399BC - ldr r1, [r0] - ldrh r0, [r1] - cmp r2, r0 - bcs _080BDF64 - lsls r0, r2, 1 - adds r1, 0x2 - adds r1, r0 - ldrb r0, [r1] - b _080BDF66 - .align 2, 0 -_080BDF60: .4byte gUnknown_20399BC -_080BDF64: - movs r0, 0x16 -_080BDF66: - pop {r1} - bx r1 - thumb_func_end sub_80BDF44 - - thumb_func_start sub_80BDF6C -sub_80BDF6C: @ 80BDF6C - push {r4,r5,lr} - adds r4, r0, 0 - lsls r1, 24 - lsls r2, 16 - lsrs r5, r2, 16 - ldr r0, _080BDFAC @ =gEasyChatGroupNamePointers - lsrs r1, 22 - adds r1, r0 - ldr r1, [r1] - adds r0, r4, 0 - bl StringCopy - adds r1, r0, 0 - subs r4, r1, r4 - lsls r4, 16 - lsrs r0, r4, 16 - cmp r0, r5 - bcs _080BDFA0 - movs r2, 0 -_080BDF92: - strb r2, [r1] - adds r1, 0x1 - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, r5 - bcc _080BDF92 -_080BDFA0: - movs r0, 0xFF - strb r0, [r1] - adds r0, r1, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080BDFAC: .4byte gEasyChatGroupNamePointers - thumb_func_end sub_80BDF6C - - thumb_func_start sub_80BDFB0 -sub_80BDFB0: @ 80BDFB0 - lsls r0, 24 - ldr r1, _080BDFBC @ =gEasyChatGroupNamePointers - lsrs r0, 22 - adds r0, r1 - ldr r0, [r0] - bx lr - .align 2, 0 -_080BDFBC: .4byte gEasyChatGroupNamePointers - thumb_func_end sub_80BDFB0 - - thumb_func_start CopyEasyChatWordPadded -CopyEasyChatWordPadded: @ 80BDFC0 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r5, r2, 16 - bl CopyEasyChatWord - adds r1, r0, 0 - subs r4, r1, r4 - lsls r4, 16 - lsrs r0, r4, 16 - cmp r0, r5 - bcs _080BDFEC - movs r2, 0 -_080BDFDE: - strb r2, [r1] - adds r1, 0x1 - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, r5 - bcc _080BDFDE -_080BDFEC: - movs r0, 0xFF - strb r0, [r1] - adds r0, r1, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end CopyEasyChatWordPadded - - thumb_func_start sub_80BDFF8 -sub_80BDFF8: @ 80BDFF8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r1, _080BE06C @ =gUnknown_300116C - movs r0, 0 - str r0, [r1] - mov r10, r0 -_080BE00A: - ldr r3, _080BE070 @ =gEasyChatWordsByLetterPointers - ldr r2, [r1] - lsls r1, r2, 3 - adds r0, r3, 0x4 - adds r0, r1, r0 - ldr r4, [r0] - ldr r0, _080BE074 @ =gUnknown_300117C - str r4, [r0] - adds r1, r3 - ldr r0, [r1] - ldr r1, _080BE078 @ =gUnknown_3001184 - str r0, [r1] - ldr r0, _080BE07C @ =gUnknown_20399BC - ldr r0, [r0] - lsls r2, 1 - adds r0, 0x2E - adds r0, r2 - mov r2, r10 - strh r2, [r0] - ldr r5, _080BE080 @ =gUnknown_3001178 - mov r3, r10 - str r3, [r5] - ldr r0, _080BE084 @ =gUnknown_3001170 - str r3, [r0] - cmp r10, r4 - blt _080BE040 - b _080BE13C -_080BE040: - ldr r1, _080BE088 @ =gUnknown_3001180 - mov r9, r1 - adds r2, r0, 0 - mov r8, r2 -_080BE048: - ldr r3, _080BE078 @ =gUnknown_3001184 - ldr r2, [r3] - ldrh r0, [r2] - ldr r1, _080BE08C @ =0x0000ffff - cmp r0, r1 - bne _080BE0E4 - adds r1, r2, 0x2 - str r1, [r3] - ldrh r0, [r2, 0x2] - mov r2, r9 - str r0, [r2] - adds r1, 0x2 - str r1, [r3] - mov r3, r8 - ldr r0, [r3] - adds r0, 0x2 - str r0, [r3] - b _080BE0EA - .align 2, 0 -_080BE06C: .4byte gUnknown_300116C -_080BE070: .4byte gEasyChatWordsByLetterPointers -_080BE074: .4byte gUnknown_300117C -_080BE078: .4byte gUnknown_3001184 -_080BE07C: .4byte gUnknown_20399BC -_080BE080: .4byte gUnknown_3001178 -_080BE084: .4byte gUnknown_3001170 -_080BE088: .4byte gUnknown_3001180 -_080BE08C: .4byte 0x0000ffff -_080BE090: - ldr r0, _080BE0D4 @ =gUnknown_20399BC - ldr r4, [r0] - ldr r0, _080BE0D8 @ =gUnknown_3001178 - ldr r5, [r0] - lsls r1, r5, 1 - ldr r0, _080BE0DC @ =gUnknown_300116C - ldr r3, [r0] - lsls r0, r3, 4 - adds r0, r3 - lsls r0, 3 - subs r0, r3 - lsls r0, 2 - adds r1, r0 - adds r2, r4, 0 - adds r2, 0x64 - adds r2, r1 - ldr r0, [r6] - ldr r1, [r7] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - adds r5, 0x1 - ldr r1, _080BE0D8 @ =gUnknown_3001178 - str r5, [r1] - lsls r3, 1 - adds r4, 0x2E - adds r4, r3 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - ldr r4, _080BE0E0 @ =gUnknown_3001180 - b _080BE120 - .align 2, 0 -_080BE0D4: .4byte gUnknown_20399BC -_080BE0D8: .4byte gUnknown_3001178 -_080BE0DC: .4byte gUnknown_300116C -_080BE0E0: .4byte gUnknown_3001180 -_080BE0E4: - movs r0, 0x1 - mov r2, r9 - str r0, [r2] -_080BE0EA: - ldr r4, _080BE158 @ =gUnknown_3001180 - ldr r1, _080BE15C @ =gUnknown_3001174 - mov r3, r10 - str r3, [r1] - ldr r0, [r4] - cmp r10, r0 - bge _080BE120 - adds r6, r1, 0 - ldr r7, _080BE160 @ =gUnknown_3001184 - ldr r4, _080BE158 @ =gUnknown_3001180 -_080BE0FE: - ldr r0, [r6] - ldr r1, [r7] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - bl sub_80BE440 - lsls r0, 24 - cmp r0, 0 - bne _080BE090 - ldr r1, [r6] - adds r1, 0x1 - str r1, [r6] - mov r2, r9 - ldr r0, [r2] - cmp r1, r0 - blt _080BE0FE -_080BE120: - ldr r2, [r4] - lsls r1, r2, 1 - ldr r3, _080BE160 @ =gUnknown_3001184 - ldr r0, [r3] - adds r0, r1 - str r0, [r3] - mov r0, r8 - ldr r1, [r0] - adds r1, r2 - str r1, [r0] - ldr r0, _080BE164 @ =gUnknown_300117C - ldr r0, [r0] - cmp r1, r0 - blt _080BE048 -_080BE13C: - ldr r1, _080BE168 @ =gUnknown_300116C - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - cmp r0, 0x1A - bgt _080BE14A - b _080BE00A -_080BE14A: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BE158: .4byte gUnknown_3001180 -_080BE15C: .4byte gUnknown_3001174 -_080BE160: .4byte gUnknown_3001184 -_080BE164: .4byte gUnknown_300117C -_080BE168: .4byte gUnknown_300116C - thumb_func_end sub_80BDFF8 - - thumb_func_start sub_80BE16C -sub_80BE16C: @ 80BE16C - push {lr} - lsls r1, 16 - lsrs r1, 16 - cmp r0, 0 - bne _080BE17E - adds r0, r1, 0 - bl sub_80BE1E8 - b _080BE184 -_080BE17E: - adds r0, r1, 0 - bl sub_80BE2F8 -_080BE184: - ldr r1, _080BE194 @ =gUnknown_20399BC - ldr r1, [r1] - ldr r2, _080BE198 @ =0x00003ba0 - adds r1, r2 - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080BE194: .4byte gUnknown_20399BC -_080BE198: .4byte 0x00003ba0 - thumb_func_end sub_80BE16C - - thumb_func_start sub_80BE19C -sub_80BE19C: @ 80BE19C - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _080BE1BC @ =gUnknown_20399BC - ldr r1, [r0] - ldr r3, _080BE1C0 @ =0x00003ba0 - adds r0, r1, r3 - ldrh r0, [r0] - cmp r2, r0 - bcs _080BE1C8 - lsls r0, r2, 1 - ldr r2, _080BE1C4 @ =0x00003984 - adds r1, r2 - adds r1, r0 - ldrh r0, [r1] - b _080BE1CA - .align 2, 0 -_080BE1BC: .4byte gUnknown_20399BC -_080BE1C0: .4byte 0x00003ba0 -_080BE1C4: .4byte 0x00003984 -_080BE1C8: - ldr r0, _080BE1D0 @ =0x0000ffff -_080BE1CA: - pop {r1} - bx r1 - .align 2, 0 -_080BE1D0: .4byte 0x0000ffff - thumb_func_end sub_80BE19C - - thumb_func_start sub_80BE1D4 -sub_80BE1D4: @ 80BE1D4 - ldr r0, _080BE1E0 @ =gUnknown_20399BC - ldr r0, [r0] - ldr r1, _080BE1E4 @ =0x00003ba0 - adds r0, r1 - ldrh r0, [r0] - bx lr - .align 2, 0 -_080BE1E0: .4byte gUnknown_20399BC -_080BE1E4: .4byte 0x00003ba0 - thumb_func_end sub_80BE1D4 - - thumb_func_start sub_80BE1E8 -sub_80BE1E8: @ 80BE1E8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 16 - lsrs r2, r0, 16 - ldr r1, _080BE270 @ =gEasyChatGroups - lsls r0, r2, 3 - adds r0, r1 - ldrh r7, [r0, 0x4] - cmp r2, 0 - beq _080BE20E - cmp r2, 0x15 - beq _080BE20E - cmp r2, 0x12 - beq _080BE20E - cmp r2, 0x13 - bne _080BE280 -_080BE20E: - lsls r0, r2, 3 - adds r0, r1 - ldr r0, [r0] - mov r10, r0 - movs r5, 0 - movs r6, 0 - cmp r6, r7 - bcs _080BE2DC - movs r0, 0x7F - ands r0, r2 - lsls r0, 9 - mov r9, r0 - lsls r2, 24 - mov r8, r2 -_080BE22A: - lsls r0, r5, 1 - mov r1, r10 - adds r4, r0, r1 - ldrh r0, [r4] - mov r2, r8 - lsrs r1, r2, 24 - bl sub_80BE3A4 - lsls r0, 24 - cmp r0, 0 - beq _080BE262 - ldr r0, _080BE274 @ =gUnknown_20399BC - ldr r2, [r0] - adds r1, r6, 0 - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 1 - ldr r3, _080BE278 @ =0x00003984 - adds r2, r3 - adds r2, r1 - ldrh r0, [r4] - ldr r3, _080BE27C @ =0x000001ff - adds r1, r3, 0 - ands r0, r1 - mov r1, r9 - orrs r0, r1 - strh r0, [r2] -_080BE262: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, r7 - bcc _080BE22A - b _080BE2DC - .align 2, 0 -_080BE270: .4byte gEasyChatGroups -_080BE274: .4byte gUnknown_20399BC -_080BE278: .4byte 0x00003984 -_080BE27C: .4byte 0x000001ff -_080BE280: - ldr r0, [r0] - mov r10, r0 - movs r5, 0 - movs r6, 0 - cmp r6, r7 - bcs _080BE2DC - movs r0, 0x7F - ands r0, r2 - lsls r0, 9 - mov r9, r0 - lsls r2, 24 - mov r8, r2 -_080BE298: - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 2 - add r0, r10 - ldrh r4, [r0, 0x4] - adds r0, r4, 0 - mov r2, r8 - lsrs r1, r2, 24 - bl sub_80BE3A4 - lsls r0, 24 - cmp r0, 0 - beq _080BE2D2 - ldr r0, _080BE2EC @ =gUnknown_20399BC - ldr r2, [r0] - adds r1, r6, 0 - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 1 - ldr r3, _080BE2F0 @ =0x00003984 - adds r2, r3 - adds r2, r1 - ldr r1, _080BE2F4 @ =0x000001ff - adds r0, r1, 0 - ands r4, r0 - mov r3, r9 - orrs r4, r3 - strh r4, [r2] -_080BE2D2: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, r7 - bcc _080BE298 -_080BE2DC: - adds r0, r6, 0 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080BE2EC: .4byte gUnknown_20399BC -_080BE2F0: .4byte 0x00003984 -_080BE2F4: .4byte 0x000001ff - thumb_func_end sub_80BE1E8 - - thumb_func_start sub_80BE2F8 -sub_80BE2F8: @ 80BE2F8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - lsrs r1, r0, 16 - movs r4, 0 - movs r6, 0 - ldr r3, _080BE364 @ =gUnknown_20399BC - ldr r0, [r3] - lsls r5, r1, 1 - adds r0, 0x2E - adds r0, r5 - ldrh r0, [r0] - cmp r6, r0 - bcs _080BE358 - mov r8, r3 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 3 - subs r0, r1 - lsls r7, r0, 2 - ldr r0, _080BE368 @ =0x00003984 - mov r12, r0 -_080BE326: - mov r0, r8 - ldr r3, [r0] - adds r1, r6, 0 - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 1 - mov r0, r12 - adds r2, r3, r0 - adds r2, r1 - lsls r1, r4, 1 - adds r1, r7 - adds r0, r3, 0 - adds r0, 0x64 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - adds r3, 0x2E - adds r3, r5 - ldrh r3, [r3] - cmp r4, r3 - bcc _080BE326 -_080BE358: - adds r0, r6, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080BE364: .4byte gUnknown_20399BC -_080BE368: .4byte 0x00003984 - thumb_func_end sub_80BE2F8 - - thumb_func_start sub_80BE36C -sub_80BE36C: @ 80BE36C - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - movs r2, 0 - ldr r0, _080BE390 @ =gUnknown_20399BC - ldr r0, [r0] - ldrh r1, [r0] - cmp r2, r1 - bge _080BE39C - adds r4, r3, 0 - adds r3, r1, 0 - adds r1, r0, 0x2 -_080BE384: - ldrh r0, [r1] - cmp r0, r4 - bne _080BE394 - movs r0, 0x1 - b _080BE39E - .align 2, 0 -_080BE390: .4byte gUnknown_20399BC -_080BE394: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r3 - blt _080BE384 -_080BE39C: - movs r0, 0 -_080BE39E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80BE36C - - thumb_func_start sub_80BE3A4 -sub_80BE3A4: @ 80BE3A4 - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 24 - lsrs r0, r1, 24 - cmp r0, 0x13 - bgt _080BE3BC - cmp r0, 0x12 - bge _080BE3F6 - cmp r0, 0 - beq _080BE3D6 - b _080BE3FA -_080BE3BC: - cmp r0, 0x15 - bne _080BE3FA - adds r0, r4, 0 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0 - bl GetSetPokedexFlag - lsls r0, 24 - lsrs r0, 24 - b _080BE40C -_080BE3D6: - adds r0, r4, 0 - bl sub_80BE418 - cmp r0, 0 - beq _080BE3F6 - adds r0, r4, 0 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0 - bl GetSetPokedexFlag - lsls r0, 24 - lsrs r0, 24 - b _080BE40C -_080BE3F6: - movs r0, 0x1 - b _080BE40C -_080BE3FA: - ldr r1, _080BE414 @ =gEasyChatGroups - lsls r0, 3 - adds r0, r1 - ldr r1, [r0] - lsls r0, r4, 1 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x8] -_080BE40C: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080BE414: .4byte gEasyChatGroups - thumb_func_end sub_80BE3A4 - - thumb_func_start sub_80BE418 -sub_80BE418: @ 80BE418 - push {lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0 - ldr r1, _080BE42C @ =gUnknown_83EE004 -_080BE422: - ldrh r0, [r1] - cmp r0, r3 - bne _080BE430 - movs r0, 0x1 - b _080BE43A - .align 2, 0 -_080BE42C: .4byte gUnknown_83EE004 -_080BE430: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, 0 - beq _080BE422 - movs r0, 0 -_080BE43A: - pop {r1} - bx r1 - thumb_func_end sub_80BE418 - - thumb_func_start sub_80BE440 -sub_80BE440: @ 80BE440 - push {r4,r5,lr} - lsls r0, 16 - lsrs r5, r0, 25 - lsls r0, 7 - lsrs r4, r0, 23 - adds r0, r5, 0 - bl sub_80BE36C - lsls r0, 24 - cmp r0, 0 - beq _080BE464 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80BE3A4 - lsls r0, 24 - lsrs r0, 24 - b _080BE466 -_080BE464: - movs r0, 0 -_080BE466: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80BE440 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/link_rfu.s b/asm/link_rfu.s index c6918f6ad..b70c877ad 100644 --- a/asm/link_rfu.s +++ b/asm/link_rfu.s @@ -8497,7 +8497,7 @@ _0810134A: lsrs r0, 24 cmp r0, 0x16 beq _0810138A - bl sub_80BDFB0 + bl GetEasyChatWordGroupName adds r2, r0, 0 movs r0, 0x54 adds r3, r4, 0 diff --git a/asm/mon_markings.s b/asm/mon_markings.s index 5408a70be..a0dad2280 100644 --- a/asm/mon_markings.s +++ b/asm/mon_markings.s @@ -981,4 +981,10 @@ sub_80BEBD0: @ 80BEBD0 _080BEBE8: .4byte gUnknown_83EE028 thumb_func_end sub_80BEBD0 + .section ewram_data + .align 2, 0 +gUnknown_20399C0: + .4byte 0 + + .text .align 2, 0 @ Don't pad with nop. diff --git a/data/strings.s b/data/strings.s index a4b4c51b4..5599847de 100644 --- a/data/strings.s +++ b/data/strings.s @@ -4368,7 +4368,7 @@ gEasyChatGroupName_Pokemon2:: @ 841DFDE .string "POKéMON2$" @ trade-related -gUnknown_841E093:: @ 841E093 +gText_ThreeQuestionMarks:: @ 841E093 .string "???$" .string "$" diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h index 5d6536490..11a8a1ba7 100644 --- a/include/constants/easy_chat.h +++ b/include/constants/easy_chat.h @@ -23,6 +23,7 @@ #define EC_GROUP_MOVE_2 0x13 #define EC_GROUP_TRENDY_SAYING 0x14 #define EC_GROUP_POKEMON 0x15 +#define EC_NUM_GROUPS 0x16 // TRAINER #define EC_WORD_I_CHOOSE_YOU (EC_GROUP_TRAINER << 9) | 0x0 @@ -1073,5 +1074,6 @@ #define EC_GROUP(word) ((word) >> 9) #define EC_INDEX(word) ((word) & 0x1FF) +#define EC_WORD(groupId, index) ((((groupId) & 0x7F) << 9) | ((index) & 0x1FF)) #endif // GUARD_CONSTANTS_EASY_CHAT_H diff --git a/include/easy_chat.h b/include/easy_chat.h index b64916123..3aee386ad 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -2,6 +2,7 @@ #define GUARD_EASYCHAT_H #include "global.h" +#include "constants/easy_chat.h" struct EasyChatWordInfo { @@ -31,13 +32,21 @@ struct EasyChatWordsByLetter void InitEasyChatPhrases(void); void easy_chat_input_maybe(void); -void CopyEasyChatWord(u8 *dest, u16 word); +u8 *CopyEasyChatWord(u8 *dest, u16 word); bool32 sub_811F8D8(u16 word); void InitializeEasyChatWordArray(u16 *words, u16 length); -void ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 length1, u16 length2); +u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 length1, u16 length2); bool8 ECWord_CheckIfOutsideOfValidRange(u16 word); void sub_80BDE28(void); void InitEasyChatPhrases(void); void EnableRareWord(u8); +bool8 sub_80BDE44(void); +void sub_80BDE70(void); +u8 sub_80BDF44(u8); +void sub_80BE16C(int, u16); +u16 sub_80BE1D4(void); +u16 sub_80BE19C(u16); +const u8 *GetEasyChatWordGroupName(u8); +u8 *CopyEasyChatWordPadded(u8 *, u16, u16); #endif // GUARD_EASYCHAT_H diff --git a/include/global.h b/include/global.h index 9588deae3..22faa7b1c 100644 --- a/include/global.h +++ b/include/global.h @@ -754,10 +754,10 @@ struct SaveBlock1 /*0x1000*/ u16 vars[VARS_COUNT]; /*0x1200*/ u32 gameStats[NUM_GAME_STATS]; /*0x1300*/ struct QuestLog questLog[4]; - /*0x2CA0*/ u16 unk2CA0[6]; - /*0x2CAC*/ u16 unk2CAC[6]; - /*0x2CB8*/ u16 unk2CB8[6]; - /*0x2CC4*/ u16 unk2CC4[6]; + /*0x2CA0*/ u16 easyChatProfile[6]; + /*0x2CAC*/ u16 easyChatBattleStart[6]; + /*0x2CB8*/ u16 easyChatBattleWon[6]; + /*0x2CC4*/ u16 easyChatBattleLost[6]; /*0x2CD0*/ struct MailStruct mail[MAIL_COUNT]; /*0x2F10*/ u8 additionalPhrases[EASY_CHAT_EXTRA_PHRASES_SIZE]; /*0x2F18*/ OldMan oldMan; // unused diff --git a/include/mevent.h b/include/mevent.h index 6b67aa27c..31ab9e421 100644 --- a/include/mevent.h +++ b/include/mevent.h @@ -69,5 +69,6 @@ u32 MENews_GetInput(u16 input); void sub_8143D24(void); u16 sub_81445C0(u32 command); void sub_8144714(u32 a0, u32 a1); +u16 *sub_8143DA8(void); #endif //GUARD_MEVENT_H diff --git a/include/strings.h b/include/strings.h index 86a26f332..45f228e19 100644 --- a/include/strings.h +++ b/include/strings.h @@ -708,5 +708,6 @@ extern const u8 gEasyChatGroupName_Move1[]; extern const u8 gEasyChatGroupName_Move2[]; extern const u8 gEasyChatGroupName_TrendySaying[]; extern const u8 gEasyChatGroupName_Pokemon2[]; +extern const u8 gText_ThreeQuestionMarks[]; #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 02bf0d371..4955916e3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -174,7 +174,7 @@ SECTIONS { src/battle_anim_utility_funcs.o(.text); src/battle_intro.o(.text); asm/bike.o(.text); - asm/easy_chat.o(.text); + src/easy_chat.o(.text); asm/mon_markings.o(.text); src/mail.o(.text); src/menu_helpers.o(.text); diff --git a/src/easy_chat.c b/src/easy_chat.c index 3f03dec54..76fcdf109 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -13,6 +13,7 @@ #include "main.h" #include "mevent.h" #include "menu.h" +#include "mail.h" #include "overworld.h" #include "palette.h" #include "pokedex.h" @@ -29,210 +30,33 @@ #include "constants/songs.h" #include "constants/species.h" -#define EZCHAT_TASK_STATE 0 -#define EZCHAT_TASK_TYPE 1 -#define EZCHAT_TASK_WORDS 2 -#define EZCHAT_TASK_MAINCALLBACK 4 -#define EZCHAT_TASK_UNK06 6 -#define EZCHAT_TASK_SIZE 7 - -EWRAM_DATA struct EasyChatScreen *sEasyChatScreen = NULL; -EWRAM_DATA struct Unk203A11C *sUnknown_0203A11C = NULL; -EWRAM_DATA struct Unk203A120 *sUnknown_0203A120 = NULL; - -void sub_811A2C0(u8); -void MainCallback_EasyChatScreen(void); -bool8 sub_811A428(u8); -void sub_811A2FC(u8); -void sub_811A4D0(MainCallback); -bool32 sub_811A88C(u16); -void sub_811A8A4(u16); -bool8 EasyChat_AllocateResources(u8, u16 *, u8); -void EasyChat_FreeResources(void); -u16 sub_811AAAC(void); -u16 sub_811AB68(void); -u16 sub_811ACDC(void); -u16 sub_811AE44(void); -u16 sub_811AF00(void); -u16 sub_811AF8C(void); -u16 sub_811AFEC(void); -u16 sub_811B040(void); -u16 sub_811B08C(void); -u16 sub_811B0BC(void); -u16 sub_811B0E8(void); -u16 sub_811B0F8(void); -u16 sub_811B150(void); -u16 sub_811B1B4(void); -u8 GetEasyChatScreenFrameId(void); -u8 GetEachChatScreenTemplateId(u8); -void sub_811BDF0(u8 *); -void sub_811BF78(void); -bool8 sub_811BF8C(void); -bool8 sub_811BFA4(void); -void sub_811C13C(void); -void sub_811C158(u16); -bool8 sub_811C170(void); -bool8 sub_811F28C(void); -void sub_811F2B8(void); -u8 sub_811F3AC(void); -int FooterHasFourOptions(void); -int sub_811B184(void); -int sub_811B264(void); -int sub_811B32C(void); -int sub_811B2B0(void); -int sub_811B33C(void); -int sub_811B368(void); -u16 sub_811B528(int); -u16 sub_811B794(u32); -int sub_811B394(void); -u8 sub_811B2A4(void); -void sub_811B3E4(void); -void sub_811BE9C(void); -int sub_811B4EC(void); -void sub_811B418(void); -void sub_811B454(void); -int sub_811BD64(void); -int sub_811BDB0(void); -int sub_811BD2C(void); -int sub_811BCF4(void); -u16 sub_811B8E8(void); -u8 sub_811F3B8(u8); -void sub_811F548(int, u16); -int sub_811B908(void); -u16 sub_811F5B0(void); -void sub_811B488(u16); -u16 sub_811B940(void); -u16 sub_811F578(u16); -int sub_811BF88(int); -u16 sub_811B8C8(void); -int sub_811B568(u32); -int sub_811B634(u32); -int sub_811B6C4(u32); -void sub_811B978(void); -void sub_811B744(void); -u8 sub_811B9C8(void); -void sub_811B768(void); -u8 sub_811B960(u8); -void sub_811B9A0(void); -u8 sub_811BA1C(void); -int sub_811BF20(void); -u16 sub_811BF40(void); -bool8 sub_811CE94(void); -void sub_811CF64(void); -void sub_811CF04(void); -void sub_811D60C(void); -void sub_811D424(u16 *); -void sub_811D230(void); -void sub_811E948(void); -void sub_811CFCC(void); -void sub_811D0BC(void); -void sub_811D2C8(void); -void sub_811D684(void); -void sub_811DE90(void); -void sub_811DEC4(void); -void sub_811DF28(struct Sprite *); -void sub_811DE5C(u8, u8, u8, u8); -void sub_811E5D4(void); -void sub_811E720(void); -void sub_811E828(void); -bool8 sub_811C2D4(void); -bool8 sub_811C30C(void); -bool8 sub_811C3E4(void); -bool8 sub_811C48C(void); -bool8 sub_811C404(void); -bool8 sub_811C448(void); -bool8 sub_811C4D0(void); -bool8 sub_811C518(void); -bool8 sub_811C554(void); -bool8 sub_811C620(void); -bool8 sub_811C830(void); -bool8 sub_811C8F0(void); -bool8 sub_811C99C(void); -bool8 sub_811CA5C(void); -bool8 sub_811C780(void); -bool8 sub_811C78C(void); -bool8 sub_811C7D4(void); -bool8 sub_811CB18(void); -bool8 sub_811CB98(void); -bool8 sub_811CB24(void); -bool8 sub_811CC90(void); -bool8 sub_811CC08(void); -bool8 sub_811C6C0(void); -bool8 sub_811CD14(void); -bool8 sub_811CD54(void); -bool8 sub_811CD94(void); -bool8 sub_811CDD4(void); -bool8 sub_811CE14(void); -bool8 sub_811CE54(void); -void sub_811DF60(u8, u8); -int GetFooterOptionXOffset(int); -void sub_811DF90(void); -void sub_811D104(u8); -void sub_811D214(u8); -void sub_811DFB0(void); -void sub_811D6D4(void); -void sub_811D9CC(int); -void sub_811E3AC(void); -bool8 sub_811E418(void); -void sub_811DFC8(void); -void sub_811E6E0(int); -bool8 sub_811DAA4(void); -void sub_811E64C(void); -void sub_811E050(void); -void sub_811E4AC(void); -void sub_811E6B0(void); -void sub_811E55C(void); -bool8 sub_811E4D0(void); -bool8 sub_811E5B8(void); -void sub_811E578(void); -void sub_811E088(void); -void sub_811DDAC(s16, u8); -bool8 sub_811DE10(void); -void sub_811D9B4(void); -void sub_811D698(u32); -void sub_811E288(void); -void sub_811E794(void); -void sub_811E380(void); -void sub_811E7F8(void); -void sub_811E30C(void); -void sub_811D7A4(void); -void sub_811D7C8(void); -int sub_811DE48(void); -void sub_811D7EC(void); -void sub_811D830(void); -void sub_811D058(u8, u8, const u8 *, u8, u8, u8, u8, u8, u8); -void sub_811DD84(void); -void sub_811D6F4(void); -void PrintEasyChatKeyboardText(void); -void sub_811D794(void); -const u8 *GetEasyChatWordGroupName(u8); -void sub_811D864(u8, u8); -void sub_811D950(u8, u8); -void sub_811DADC(u8); -void sub_811DC28(int, int, int, int); -void sub_811E0EC(s8, s8); -void sub_811E1A4(s8, s8); -void sub_811E2DC(struct Sprite *); -void sub_811E34C(u8, u8); -bool8 sub_811F0F8(void); -u16 sub_811F108(void); -void sub_811F2D4(void); -void sub_811F46C(void); -u8 *CopyEasyChatWordPadded(u8 *, u16, u16); -u8 sub_811F860(u16); -u16 sub_811F5C4(u16); -u16 sub_811F6B8(u16); -bool8 sub_811F764(u16, u8); -int sub_811F838(u16); -void DoQuizAnswerEasyChatScreen(void); -void DoQuizQuestionEasyChatScreen(void); -void DoQuizSetAnswerEasyChatScreen(void); -void DoQuizSetQuestionEasyChatScreen(void); +struct Unk203A120 +{ + u16 unk0; + u16 unk2[EC_NUM_GROUPS]; + u16 unk2E[27]; + u16 unk64[27][270]; + u8 filler3958[0x2C]; + u16 unk3984[0x10E]; + u16 unk3BA0; +}; /*size = 0x3BA4*/ + +static EWRAM_DATA struct Unk203A120 * gUnknown_20399BC = NULL; + +static bool8 sub_80BDCA8(void); +static u16 GetRandomECPokemon(void); +static void sub_80BDE88(void); +static void sub_80BDFF8(void); +static u16 sub_80BE1E8(u16); +static u16 sub_80BE2F8(u16); +static bool8 sub_80BE3A4(u16, u8); +static int sub_80BE418(u16 species); +static u8 sub_80BE440(u16 word); #include "data/easy_chat/easy_chat_groups.h" #include "data/easy_chat/easy_chat_words_by_letter.h" -const u8 *const gEasyChatGroupNamePointers[] = { +static const u8 *const gEasyChatGroupNamePointers[] = { [EC_GROUP_POKEMON] = gEasyChatGroupName_Pokemon, [EC_GROUP_TRAINER] = gEasyChatGroupName_Trainer, [EC_GROUP_STATUS] = gEasyChatGroupName_Status, @@ -257,14 +81,14 @@ const u8 *const gEasyChatGroupNamePointers[] = { [EC_GROUP_POKEMON_2] = gEasyChatGroupName_Pokemon2, }; -const u16 sDefaultProfileWords[] = { +static const u16 sDefaultProfileWords[] = { EC_WORD_I_AM, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_FRIEND, }; -const u16 sDefaultBattleStartWords[] = { +static const u16 sDefaultBattleStartWords[] = { EC_WORD_ARE, EC_WORD_YOU, EC_WORD_READY, @@ -273,3767 +97,39 @@ const u16 sDefaultBattleStartWords[] = { EC_WORD_EXCL, }; -const u16 gUnknown_83EE004[] = { +static const u16 gUnknown_83EE004[] = { SPECIES_DEOXYS, }; -/* - -void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback, u8 displayedPersonType) -{ - u8 taskId; - - ResetTasks(); - taskId = CreateTask(sub_811A2C0, 0); - gTasks[taskId].data[EZCHAT_TASK_TYPE] = type; - gTasks[taskId].data[EZCHAT_TASK_SIZE] = displayedPersonType; - SetWordTaskArg(taskId, EZCHAT_TASK_WORDS, (u32)words); - SetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK, (u32)callback); - SetMainCallback2(MainCallback_EasyChatScreen); -} - -void MainCallback_EasyChatScreen(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void VBlankCallback_EasyChatScreen(void) -{ - TransferPlttBuffer(); - LoadOam(); - ProcessSpriteCopyRequests(); -} - -void sub_811A2A4(u8 taskId, TaskFunc taskFunc) -{ - gTasks[taskId].func = taskFunc; - gTasks[taskId].data[EZCHAT_TASK_STATE] = 0; -} - -void sub_811A2C0(u8 taskId) -{ - if (!IsUpdateLinkStateCBActive()) - { - while (sub_811A428(taskId)); - } - else - { - if (sub_811A428(taskId) == TRUE) - { - return; - } - } - sub_811A2A4(taskId, sub_811A2FC); -} - -void sub_811A2FC(u8 taskId) -{ - u16 v0; - s16 *data; - - data = gTasks[taskId].data; - switch (data[EZCHAT_TASK_STATE]) - { - case 0: - SetVBlankCallback(VBlankCallback_EasyChatScreen); - BlendPalettes(0xFFFFFFFF, 16, 0); - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - data[EZCHAT_TASK_STATE] = 5; - break; - case 1: - v0 = sub_811AAAC(); - if (sub_811A88C(v0)) - { - BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); - data[EZCHAT_TASK_STATE] = 3; - data[EZCHAT_TASK_UNK06] = v0; - } - else if (v0 == 0x18) - { - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - data[EZCHAT_TASK_STATE] = 4; - } - else if (v0 != 0) - { - PlaySE(SE_SELECT); - sub_811C158(v0); - data[EZCHAT_TASK_STATE] ++; - } - break; - case 2: - if (!sub_811C170()) - data[EZCHAT_TASK_STATE] = 1; - break; - case 3: - if (!gPaletteFade.active) - sub_811A8A4(data[EZCHAT_TASK_UNK06]); - break; - case 4: - if (!gPaletteFade.active) - sub_811A4D0((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); - break; - case 5: - if (!gPaletteFade.active) - data[EZCHAT_TASK_STATE] = 1; - break; - } -} -bool8 sub_811A428(u8 taskId) -{ - s16 *data; - - data = gTasks[taskId].data; - switch (data[EZCHAT_TASK_STATE]) - { - case 0: - SetVBlankCallback(NULL); - ResetSpriteData(); - FreeAllSpritePalettes(); - ResetPaletteFade(); - break; - case 1: - if (!sub_811F28C()) - { - sub_811A4D0((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); - } - break; - case 2: - if (!EasyChat_AllocateResources(data[EZCHAT_TASK_TYPE], (u16 *)GetWordTaskArg(taskId, EZCHAT_TASK_WORDS), data[EZCHAT_TASK_SIZE])) - { - sub_811A4D0((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); - } - break; - case 3: - if (!sub_811BF8C()) - { - sub_811A4D0((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); - } - break; - case 4: - if (sub_811BFA4()) - { - return TRUE; - } - break; - default: - return FALSE; - } - data[EZCHAT_TASK_STATE] ++; - return TRUE; -} - -void sub_811A4D0(MainCallback callback) -{ - sub_811C13C(); - EasyChat_FreeResources(); - sub_811F2B8(); - FreeAllWindowBuffers(); - SetMainCallback2(callback); -} - -void ShowEasyChatScreen(void) -{ - int i; - u16 *words; - struct MauvilleManBard *bard; - u8 displayedPersonType = EASY_CHAT_PERSON_DISPLAY_NONE; - switch (gSpecialVar_0x8004) - { - case EASY_CHAT_TYPE_PROFILE: - words = gSaveBlock1Ptr->easyChatProfile; - break; - case EASY_CHAT_TYPE_BATTLE_START: - words = gSaveBlock1Ptr->easyChatBattleStart; - break; - case EASY_CHAT_TYPE_BATTLE_WON: - words = gSaveBlock1Ptr->easyChatBattleWon; - break; - case EASY_CHAT_TYPE_BATTLE_LOST: - words = gSaveBlock1Ptr->easyChatBattleLost; - break; - case EASY_CHAT_TYPE_MAIL: - words = gSaveBlock1Ptr->mail[gSpecialVar_0x8005].words; - break; - case EASY_CHAT_TYPE_BARD_SONG: - bard = &gSaveBlock1Ptr->oldMan.bard; - for (i = 0; i < 6; i ++) - bard->temporaryLyrics[i] = bard->songLyrics[i]; - - words = bard->temporaryLyrics; - break; - case EASY_CHAT_TYPE_INTERVIEW: - words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].bravoTrainer.words; - displayedPersonType = gSpecialVar_0x8006; - break; - case EASY_CHAT_TYPE_FAN_CLUB: - words = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].fanclubOpinions.words[gSpecialVar_0x8006]; - displayedPersonType = EASY_CHAT_PERSON_REPORTER_FEMALE; - break; - case EASY_CHAT_TYPE_UNK_8: - words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].unkShow04.words; - displayedPersonType = EASY_CHAT_PERSON_REPORTER_MALE; - break; - case EASY_CHAT_TYPE_TRENDY_PHRASE: - words = (u16 *)gStringVar3; - words[0] = gSaveBlock1Ptr->easyChatPairs[0].words[0]; - words[1] = gSaveBlock1Ptr->easyChatPairs[0].words[1]; - break; - case EASY_CHAT_TYPE_GABBY_AND_TY: - words = gSaveBlock1Ptr->gabbyAndTyData.quote; - *words = -1; - displayedPersonType = EASY_CHAT_PERSON_REPORTER_FEMALE; - break; - case EASY_CHAT_TYPE_CONTEST_INTERVIEW: - words = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].bravoTrainer.words[gSpecialVar_0x8006]; - displayedPersonType = EASY_CHAT_PERSON_REPORTER_MALE; - break; - case EASY_CHAT_TYPE_BATTLE_TOWER_INTERVIEW: - words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].fanclubOpinions.words18; - displayedPersonType = EASY_CHAT_PERSON_REPORTER_FEMALE; - break; - case EASY_CHAT_TYPE_GOOD_SAYING: - words = (u16 *)gStringVar3; - InitializeEasyChatWordArray(words, 2); - break; - case EASY_CHAT_TYPE_FAN_QUESTION: - words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].fanClubSpecial.words; - words[0] = -1; - displayedPersonType = EASY_CHAT_PERSON_BOY; - break; - case EASY_CHAT_TYPE_QUIZ_ANSWER: - words = &gSaveBlock1Ptr->lilycoveLady.quiz.playerAnswer; - break; - case EASY_CHAT_TYPE_QUIZ_QUESTION: - return; - case EASY_CHAT_TYPE_QUIZ_SET_QUESTION: - words = gSaveBlock1Ptr->lilycoveLady.quiz.question; - break; - case EASY_CHAT_TYPE_QUIZ_SET_ANSWER: - words = &gSaveBlock1Ptr->lilycoveLady.quiz.correctAnswer; - break; - case EASY_CHAT_TYPE_APPRENTICE: - words = gSaveBlock2Ptr->apprentices[0].easyChatWords; - break; - case EASY_CHAT_TYPE_QUESTIONNAIRE: - words = sub_801B058(); - break; - default: - return; - } - - CleanupOverworldWindowsAndTilemaps(); - DoEasyChatScreen(gSpecialVar_0x8004, words, CB2_ReturnToFieldContinueScript, displayedPersonType); -} - -void CB2_QuizLadyQuestion(void) -{ - LilycoveLady *lilycoveLady; - - UpdatePaletteFade(); - switch (gMain.state) - { - case 0: - FadeScreen(1, 0); - break; - case 1: - if (!gPaletteFade.active) - { - lilycoveLady = &gSaveBlock1Ptr->lilycoveLady; - lilycoveLady->quiz.playerAnswer = -1; - CleanupOverworldWindowsAndTilemaps(); - DoQuizQuestionEasyChatScreen(); - } - return; - } - gMain.state ++; -} - -void QuizLadyShowQuizQuestion(void) -{ - SetMainCallback2(CB2_QuizLadyQuestion); -} - -int sub_811A868(u16 word) -{ - int i; - - for (i = 0; i < ARRAY_COUNT(sUnknown_08597530); i ++) - { - if (word == sUnknown_08597530[i].word) - return i; - } - return -1; -} - -bool32 sub_811A88C(u16 word) -{ - return sub_811A868(word) == -1 ? FALSE : TRUE; -} - -void sub_811A8A4(u16 word) -{ - int i; - - i = sub_811A868(word); - ResetTasks(); - sub_811A4D0(sUnknown_08597530[i].callback); -} - -void DoQuizAnswerEasyChatScreen(void) -{ - DoEasyChatScreen( - EASY_CHAT_TYPE_QUIZ_ANSWER, - &gSaveBlock1Ptr->lilycoveLady.quiz.playerAnswer, - CB2_ReturnToFieldContinueScript, - EASY_CHAT_PERSON_DISPLAY_NONE); -} - -void DoQuizQuestionEasyChatScreen(void) -{ - DoEasyChatScreen(EASY_CHAT_TYPE_QUIZ_QUESTION, - gSaveBlock1Ptr->lilycoveLady.quiz.question, - CB2_ReturnToFieldContinueScript, - EASY_CHAT_PERSON_DISPLAY_NONE); -} - -void DoQuizSetAnswerEasyChatScreen(void) -{ - DoEasyChatScreen(EASY_CHAT_TYPE_QUIZ_SET_ANSWER, - &gSaveBlock1Ptr->lilycoveLady.quiz.correctAnswer, - CB2_ReturnToFieldContinueScript, - EASY_CHAT_PERSON_DISPLAY_NONE); -} - -void DoQuizSetQuestionEasyChatScreen(void) -{ - DoEasyChatScreen(EASY_CHAT_TYPE_QUIZ_SET_QUESTION, - gSaveBlock1Ptr->lilycoveLady.quiz.question, - CB2_ReturnToFieldContinueScript, - EASY_CHAT_PERSON_DISPLAY_NONE); -} - -bool8 EasyChat_AllocateResources(u8 type, u16 *words, u8 displayedPersonType) -{ - u8 templateId; - int i; - - sEasyChatScreen = malloc(sizeof(*sEasyChatScreen)); - if (sEasyChatScreen == NULL) - return FALSE; - - sEasyChatScreen->type = type; - sEasyChatScreen->words = words; - sEasyChatScreen->mainCursorColumn = 0; - sEasyChatScreen->mainCursorRow = 0; - sEasyChatScreen->unk_09 = 0; - sEasyChatScreen->displayedPersonType = displayedPersonType; - sEasyChatScreen->unk_13 = 0; - templateId = GetEachChatScreenTemplateId(type); - if (type == EASY_CHAT_TYPE_QUIZ_QUESTION) - { - sub_811BDF0(sEasyChatScreen->unk_14); - sEasyChatScreen->titleText = sEasyChatScreen->unk_14; - sEasyChatScreen->state = 7; - } - else - { - sEasyChatScreen->state = 0; - sEasyChatScreen->titleText = sEasyChatScreenTemplates[templateId].titleText; - } - - sEasyChatScreen->numColumns = sEasyChatScreenTemplates[templateId].numColumns; - sEasyChatScreen->numRows = sEasyChatScreenTemplates[templateId].numRows; - sEasyChatScreen->unk_07 = sEasyChatScreen->numColumns * sEasyChatScreen->numRows; - sEasyChatScreen->templateId = templateId; - if (sEasyChatScreen->unk_07 > 9) - sEasyChatScreen->unk_07 = 9; - - if (words != NULL) - { - CpuCopy16(words, sEasyChatScreen->ecWordBuffer, sEasyChatScreen->unk_07 * sizeof(u16)); - } - else - { - for (i = 0; i < sEasyChatScreen->unk_07; i ++) - sEasyChatScreen->ecWordBuffer[i] = -1; - - sEasyChatScreen->words = sEasyChatScreen->ecWordBuffer; - } - - sEasyChatScreen->unk_0d = (sub_811F3AC() - 1) / 2 + 1; - return TRUE; -} - -void EasyChat_FreeResources(void) -{ - if (sEasyChatScreen != NULL) - FREE_AND_SET_NULL(sEasyChatScreen); -} - -u16 sub_811AAAC(void) -{ - switch (sEasyChatScreen->state) - { - case 0: - return sub_811AB68(); - case 1: - return sub_811ACDC(); - case 2: - return sub_811AE44(); - case 3: - return sub_811AF00(); - case 4: - return sub_811AF8C(); - case 5: - return sub_811B040(); - case 6: - return sub_811AFEC(); - case 7: - return sub_811B08C(); - case 8: - return sub_811B0BC(); - case 9: - return sub_811B0E8(); - case 10: - return sub_811B0F8(); - } - return 0; -} - -bool32 sub_811AB44(void) -{ - switch (GetEasyChatScreenFrameId()) - { - case 2: - case 7: - case 8: - return TRUE; - } - return FALSE; -} - -u16 sub_811AB68(void) -{ - do - { - if (gMain.newKeys & A_BUTTON) - { - sub_811BF78(); - sEasyChatScreen->state = 2; - sEasyChatScreen->unk_0a = 0; - sEasyChatScreen->unk_0b = 0; - sEasyChatScreen->unk_0c = 0; - return 9; - } - else if (gMain.newKeys & B_BUTTON) - { - return sub_811B150(); - } - else if (gMain.newKeys & START_BUTTON) - { - return sub_811B1B4(); - } - else if (gMain.newKeys & DPAD_UP) - { - sEasyChatScreen->mainCursorRow--; - break; - } - else if (gMain.newKeys & DPAD_LEFT) - { - sEasyChatScreen->mainCursorColumn--; - break; - } - else if (gMain.newKeys & DPAD_DOWN) - { - sEasyChatScreen->mainCursorRow++; - break; - } - else if (gMain.newKeys & DPAD_RIGHT) - { - sEasyChatScreen->mainCursorColumn++; - break; - } - - return 0; - } while (0); - - if (sEasyChatScreen->mainCursorRow < 0) - sEasyChatScreen->mainCursorRow = sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows; - - if (sEasyChatScreen->mainCursorRow > sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows) - sEasyChatScreen->mainCursorRow = 0; - - if (sEasyChatScreen->mainCursorRow == sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows) - { - if (sEasyChatScreen->mainCursorColumn > 2) - sEasyChatScreen->mainCursorColumn = 2; - - sEasyChatScreen->state = 1; - return 3; - } - - if (sEasyChatScreen->mainCursorColumn < 0) - sEasyChatScreen->mainCursorColumn = sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns - 1; - - if (sEasyChatScreen->mainCursorColumn >= sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns) - sEasyChatScreen->mainCursorColumn = 0; - - if (sub_811AB44() && sEasyChatScreen->mainCursorColumn == 1 && sEasyChatScreen->mainCursorRow == 4) - sEasyChatScreen->mainCursorColumn = 0; - - return 2; -} - -u16 sub_811ACDC(void) -{ - do - { - if (gMain.newKeys & A_BUTTON) - { - switch (sEasyChatScreen->mainCursorColumn) - { - case 0: - return sub_811B184(); - case 1: - return sub_811B150(); - case 2: - return sub_811B1B4(); - case 3: - return sub_811B264(); - } - } - - if (gMain.newKeys & B_BUTTON) - { - return sub_811B150(); - } - else if (gMain.newKeys & START_BUTTON) - { - return sub_811B1B4(); - } - else if (gMain.newKeys & DPAD_UP) - { - sEasyChatScreen->mainCursorRow--; - break; - } - else if (gMain.newKeys & DPAD_LEFT) - { - sEasyChatScreen->mainCursorColumn--; - break; - } - else if (gMain.newKeys & DPAD_DOWN) - { - sEasyChatScreen->mainCursorRow = 0; - break; - } - else if (gMain.newKeys & DPAD_RIGHT) - { - sEasyChatScreen->mainCursorColumn++; - break; - } - - return 0; - } while (0); - - if (sEasyChatScreen->mainCursorRow == sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows) - { - int numFooterColumns = FooterHasFourOptions() ? 4 : 3; - if (sEasyChatScreen->mainCursorColumn < 0) - sEasyChatScreen->mainCursorColumn = numFooterColumns - 1; - - if (sEasyChatScreen->mainCursorColumn >= numFooterColumns) - sEasyChatScreen->mainCursorColumn = 0; - - return 3; - } - - if (sEasyChatScreen->mainCursorColumn >= sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns) - sEasyChatScreen->mainCursorColumn = sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns - 1; - - if (sub_811AB44() && sEasyChatScreen->mainCursorColumn == 1 && sEasyChatScreen->mainCursorRow == 4) - sEasyChatScreen->mainCursorColumn = 0; - - sEasyChatScreen->state = 0; - return 2; -} - -u16 sub_811AE44(void) -{ - if (gMain.newKeys & B_BUTTON) - return sub_811B32C(); - - if (gMain.newKeys & A_BUTTON) - { - if (sEasyChatScreen->unk_0a != -1) - return sub_811B2B0(); - - switch (sEasyChatScreen->unk_0b) - { - case 0: - return sub_811B33C(); - case 1: - return sub_811B368(); - case 2: - return sub_811B32C(); - } - } - - if (gMain.newKeys & SELECT_BUTTON) - return sub_811B33C(); - - if (gMain.newAndRepeatedKeys & DPAD_UP) - return sub_811B528(2); - - if (gMain.newAndRepeatedKeys & DPAD_DOWN) - return sub_811B528(3); - - if (gMain.newAndRepeatedKeys & DPAD_LEFT) - return sub_811B528(1); - - if (gMain.newAndRepeatedKeys & DPAD_RIGHT) - return sub_811B528(0); - - return 0; -} - -u16 sub_811AF00(void) -{ - if (gMain.newKeys & B_BUTTON) - { - sEasyChatScreen->state = 2; - return 14; - } - - if (gMain.newKeys & A_BUTTON) - return sub_811B394(); - - if (gMain.newKeys & START_BUTTON) - return sub_811B794(4); - - if (gMain.newKeys & SELECT_BUTTON) - return sub_811B794(5); - - if (gMain.newAndRepeatedKeys & DPAD_UP) - return sub_811B794(2); - - if (gMain.newAndRepeatedKeys & DPAD_DOWN) - return sub_811B794(3); - - if (gMain.newAndRepeatedKeys & DPAD_LEFT) - return sub_811B794(1); - - if (gMain.newAndRepeatedKeys & DPAD_RIGHT) - return sub_811B794(0); - - return 0; -} - -u16 sub_811AF8C(void) -{ - u8 var0; - - switch (Menu_ProcessInputNoWrapClearOnChoose()) - { - case MENU_B_PRESSED: // B Button - case 1: // No - sEasyChatScreen->state = sub_811B2A4(); - return 7; - case 0: // Yes - gSpecialVar_Result = 0; - var0 = sEasyChatScreen->type - EASY_CHAT_TYPE_QUIZ_SET_QUESTION; - if (var0 < 2) - sub_811B3E4(); - - return 24; - default: - return 0; - } -} - -u16 sub_811AFEC(void) -{ - switch (Menu_ProcessInputNoWrapClearOnChoose()) - { - case MENU_B_PRESSED: // B Button - case 1: // No - sEasyChatScreen->state = sub_811B2A4(); - return 7; - case 0: // Yes - sub_811BE9C(); - gSpecialVar_Result = sub_811B4EC(); - sub_811B3E4(); - return 24; - default: - return 0; - } -} - -u16 sub_811B040(void) -{ - switch (Menu_ProcessInputNoWrapClearOnChoose()) - { - case MENU_B_PRESSED: // B Button - case 1: // No - sEasyChatScreen->state = 1; - return 7; - case 0: // Yes - sub_811B418(); - sEasyChatScreen->state = 1; - return 8; - default: - return 0; - } -} - -u16 sub_811B08C(void) -{ - if (gMain.newKeys & A_BUTTON) - return 26; - - if (gMain.newKeys & B_BUTTON) - return sub_811B150(); - - return 0; -} - -u16 sub_811B0BC(void) -{ - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - sEasyChatScreen->state = sub_811B2A4(); - return 7; - } - - return 0; -} - -u16 sub_811B0E8(void) -{ - sEasyChatScreen->state = 10; - return 6; -} - -u16 sub_811B0F8(void) -{ - switch (Menu_ProcessInputNoWrapClearOnChoose()) - { - case MENU_B_PRESSED: // B Button - case 1: // No - sub_811B454(); - sEasyChatScreen->stateBackup = 0; - sEasyChatScreen->state = 8; - return 31; - case 0: // Yes - gSpecialVar_Result = sub_811B4EC(); - sub_811B3E4(); - return 24; - default: - return 0; - } -} - -u16 sub_811B150(void) -{ - if (sEasyChatScreen->type == EASY_CHAT_TYPE_APPRENTICE - || sEasyChatScreen->type == EASY_CHAT_TYPE_CONTEST_INTERVIEW) - { - sEasyChatScreen->stateBackup = sEasyChatScreen->state; - sEasyChatScreen->state = 8; - return 34; - } - else - { - sEasyChatScreen->stateBackup = sEasyChatScreen->state; - sEasyChatScreen->state = 4; - return 5; - } -} - -int sub_811B184(void) -{ - sEasyChatScreen->stateBackup = sEasyChatScreen->state; - if (sEasyChatScreen->type != EASY_CHAT_TYPE_BARD_SONG) - { - sEasyChatScreen->state = 5; - return 4; - } - else - { - sEasyChatScreen->stateBackup = sEasyChatScreen->state; - sEasyChatScreen->state = 8; - return 32; - } -} - -u16 sub_811B1B4(void) -{ - sEasyChatScreen->stateBackup = sEasyChatScreen->state; - if (sEasyChatScreen->type == EASY_CHAT_TYPE_QUIZ_SET_QUESTION) - { - if (sub_811BD64()) - { - sEasyChatScreen->state = 8; - return 29; - } - - if (sub_811BDB0()) - { - sEasyChatScreen->state = 8; - return 30; - } - - sEasyChatScreen->state = 6; - return 6; - } - else if (sEasyChatScreen->type == EASY_CHAT_TYPE_QUIZ_SET_ANSWER) - { - if (sub_811BDB0()) - { - sEasyChatScreen->state = 8; - return 30; - } - - if (sub_811BD64()) - { - sEasyChatScreen->state = 8; - return 29; - } - - sEasyChatScreen->state = 6; - return 6; - } - else if (sEasyChatScreen->type == EASY_CHAT_TYPE_TRENDY_PHRASE - || sEasyChatScreen->type == EASY_CHAT_TYPE_GOOD_SAYING) - { - if (!sub_811BD2C()) - { - sEasyChatScreen->state = 8; - return 33; - } - - sEasyChatScreen->state = 6; - return 6; - } - else if (sEasyChatScreen->type == EASY_CHAT_TYPE_APPRENTICE - || sEasyChatScreen->type == EASY_CHAT_TYPE_CONTEST_INTERVIEW) - { - if (sub_811BCF4()) - { - sEasyChatScreen->state = 8; - return 34; - } - - sEasyChatScreen->state = 6; - return 6; - } - else if (sEasyChatScreen->type == EASY_CHAT_TYPE_QUESTIONNAIRE) - { - sEasyChatScreen->state = 6; - return 6; - } - else - { - if (sub_811BCF4() == 1 || !sub_811B4EC()) - { - sEasyChatScreen->state = 4; - return 5; - } - - sEasyChatScreen->state = 6; - return 6; - } -} - -int sub_811B264(void) -{ - sEasyChatScreen->stateBackup = sEasyChatScreen->state; - switch (sEasyChatScreen->type) - { - case EASY_CHAT_TYPE_QUIZ_ANSWER: - return 25; - case EASY_CHAT_TYPE_QUIZ_SET_QUESTION: - sub_811B3E4(); - return 28; - case EASY_CHAT_TYPE_QUIZ_SET_ANSWER: - sub_811B3E4(); - return 27; - default: - return 0; - } -} - -u8 sub_811B2A4(void) -{ - return sEasyChatScreen->stateBackup; -} - -int sub_811B2B0(void) -{ - u16 var1; - - if (sEasyChatScreen->unk_09 == 0) - { - u8 groupId = sub_811F3B8(sub_811B8E8()); - sub_811F548(0, groupId); - } - else - { - sub_811F548(1, sub_811B908()); - } - - var1 = sub_811F5B0(); - if (var1 == 0) - return 0; - - sEasyChatScreen->unk_0f = (var1 - 1) / 2; - sEasyChatScreen->unk_0e = 0; - sEasyChatScreen->unk_10 = 0; - sEasyChatScreen->unk_11 = 0; - sEasyChatScreen->state = 3; - return 11; -} - -int sub_811B32C(void) -{ - sEasyChatScreen->state = 0; - return 10; -} - -int sub_811B33C(void) -{ - sEasyChatScreen->unk_0a = 0; - sEasyChatScreen->unk_0b = 0; - sEasyChatScreen->unk_0c = 0; - if (!sEasyChatScreen->unk_09) - sEasyChatScreen->unk_09 = 1; - else - sEasyChatScreen->unk_09 = 0; - - return 23; -} - -int sub_811B368(void) -{ - if (sEasyChatScreen->type == EASY_CHAT_TYPE_BARD_SONG) - { - PlaySE(SE_HAZURE); - return 0; - } - else - { - sub_811B488(0xFFFF); - return 1; - } -} - -int sub_811B394(void) -{ - u16 easyChatWord = sub_811F578(sub_811B940()); - if (sub_811BF88(easyChatWord)) - { - PlaySE(SE_HAZURE); - return 0; - } - else - { - sub_811B488(easyChatWord); - if (sEasyChatScreen->type != EASY_CHAT_TYPE_BARD_SONG) - { - sEasyChatScreen->state = 0; - return 12; - } - else - { - sEasyChatScreen->state = 9; - return 13; - } - } -} - -void sub_811B3E4(void) -{ - int i; - for (i = 0; i < sEasyChatScreen->unk_07; i++) - sEasyChatScreen->words[i] = sEasyChatScreen->ecWordBuffer[i]; -} - -void sub_811B418(void) -{ - int i; - for (i = 0; i < sEasyChatScreen->unk_07; i++) - sEasyChatScreen->ecWordBuffer[i] = 0xFFFF; -} - -void sub_811B454(void) -{ - int i; - for (i = 0; i < sEasyChatScreen->unk_07; i++) - sEasyChatScreen->ecWordBuffer[i] = sEasyChatScreen->words[i]; -} - -void sub_811B488(u16 easyChatWord) -{ - u16 index = sub_811B8C8(); - sEasyChatScreen->ecWordBuffer[index] = easyChatWord; -} - -u8 sub_811B4AC(void) -{ - u16 i; - for (i = 0; i < sEasyChatScreen->unk_07; i++) - { - if (sEasyChatScreen->ecWordBuffer[i] != sEasyChatScreen->words[i]) - return 1; - } - - return 0; -} - -int sub_811B4EC(void) -{ - u8 var0 = sEasyChatScreen->type - EASY_CHAT_TYPE_QUIZ_SET_QUESTION; - if (var0 < 2) - { - if (sub_811BD64()) - return 0; - - if (sub_811BDB0()) - return 0; - - return 1; - } - else - { - return sub_811B4AC(); - } -} - -u16 sub_811B528(int arg0) -{ - if (sEasyChatScreen->unk_0a != -1) - { - if (sEasyChatScreen->unk_09 == 0) - return sub_811B568(arg0); - else - return sub_811B634(arg0); - } - else - { - return sub_811B6C4(arg0); - } -} - -int sub_811B568(u32 arg0) -{ - switch (arg0) - { - case 2: - if (sEasyChatScreen->unk_0b != -sEasyChatScreen->unk_0c) - { - if (sEasyChatScreen->unk_0b) - { - sEasyChatScreen->unk_0b--; - return 15; - } - else - { - sEasyChatScreen->unk_0c--; - return 17; - } - } - break; - case 3: - if (sEasyChatScreen->unk_0b + sEasyChatScreen->unk_0c < sEasyChatScreen->unk_0d - 1) - { - int var0; - if (sEasyChatScreen->unk_0b < 3) - { - sEasyChatScreen->unk_0b++; - var0 = 15; - } - else - { - sEasyChatScreen->unk_0c++; - var0 = 16; - } - - sub_811B978(); - return var0; - } - break; - case 1: - if (sEasyChatScreen->unk_0a) - sEasyChatScreen->unk_0a--; - else - sub_811B744(); - - return 15; - case 0: - if (sEasyChatScreen->unk_0a < 1) - { - sEasyChatScreen->unk_0a++; - if (sub_811B9C8()) - sub_811B744(); - } - else - { - sub_811B744(); - } - return 15; - } - - return 0; -} - -int sub_811B634(u32 arg0) -{ - switch (arg0) - { - case 2: - if (sEasyChatScreen->unk_0b > 0) - sEasyChatScreen->unk_0b--; - else - sEasyChatScreen->unk_0b = 3; - - sub_811B978(); - return 15; - case 3: - if (sEasyChatScreen->unk_0b < 3) - sEasyChatScreen->unk_0b++; - else - sEasyChatScreen->unk_0b = 0; - - sub_811B978(); - return 15; - case 0: - sEasyChatScreen->unk_0a++; - if (sub_811B9C8()) - sub_811B744(); - - return 15; - case 1: - sEasyChatScreen->unk_0a--; - if (sEasyChatScreen->unk_0a < 0) - sub_811B744(); - - return 15; - } - - return 0; -} - -int sub_811B6C4(u32 arg0) -{ - switch (arg0) - { - case 2: - if (sEasyChatScreen->unk_0b) - sEasyChatScreen->unk_0b--; - else - sEasyChatScreen->unk_0b = 2; - - return 15; - case 3: - if (sEasyChatScreen->unk_0b < 2) - sEasyChatScreen->unk_0b++; - else - sEasyChatScreen->unk_0b = 0; - - return 15; - case 1: - sEasyChatScreen->unk_0b++; - sub_811B768(); - return 15; - case 0: - sEasyChatScreen->unk_0a = 0; - sEasyChatScreen->unk_0b++; - return 15; - } - - return 0; -} - -void sub_811B744(void) -{ - sEasyChatScreen->unk_0a = 0xFF; - if (sEasyChatScreen->unk_0b) - sEasyChatScreen->unk_0b--; -} - -void sub_811B768(void) -{ - if (sEasyChatScreen->unk_09 == 0) - { - sEasyChatScreen->unk_0a = 1; - sub_811B978(); - } - else - { - sEasyChatScreen->unk_0a = sub_811B960(sEasyChatScreen->unk_0b); - } -} - -u16 sub_811B794(u32 arg0) -{ - u16 result; - switch (arg0) - { - case 2: - if (sEasyChatScreen->unk_11 + sEasyChatScreen->unk_0e > 0) - { - if (sEasyChatScreen->unk_11 > 0) - { - sEasyChatScreen->unk_11--; - result = 18; - } - else - { - sEasyChatScreen->unk_0e--; - result = 19; - } - - sub_811B9A0(); - return result; - } - break; - case 3: - if (sEasyChatScreen->unk_11 + sEasyChatScreen->unk_0e < sEasyChatScreen->unk_0f) - { - if (sEasyChatScreen->unk_11 < 3) - { - sEasyChatScreen->unk_11++; - result = 18; - } - else - { - sEasyChatScreen->unk_0e++; - result = 20; - } - - sub_811B9A0(); - return result; - } - break; - case 1: - if (sEasyChatScreen->unk_10 > 0) - sEasyChatScreen->unk_10--; - else - sEasyChatScreen->unk_10 = 1; - - sub_811B9A0(); - return 18; - case 0: - if (sEasyChatScreen->unk_10 < 1) - { - sEasyChatScreen->unk_10++; - if (sub_811BA1C()) - sEasyChatScreen->unk_10 = 0; - } - else - { - sEasyChatScreen->unk_10 = 0; - } - return 18; - case 4: - if (sEasyChatScreen->unk_0e) - { - if (sEasyChatScreen->unk_0e > 3) - sEasyChatScreen->unk_0e -= 4; - else - sEasyChatScreen->unk_0e = 0; - - return 21; - } - break; - case 5: - if (sEasyChatScreen->unk_0e <= sEasyChatScreen->unk_0f - 4) - { - sEasyChatScreen->unk_0e += 4; - if (sEasyChatScreen->unk_0e > sEasyChatScreen->unk_0f - 3) - sEasyChatScreen->unk_0e = sEasyChatScreen->unk_0f + 0xFD; - - sub_811B9A0(); - return 22; - } - break; - } - - return 0; -} - -u16 sub_811B8C8(void) -{ - return (sEasyChatScreen->mainCursorRow * sEasyChatScreen->numColumns) + sEasyChatScreen->mainCursorColumn; -} - -u16 sub_811B8E8(void) -{ - return 2 * (sEasyChatScreen->unk_0b + sEasyChatScreen->unk_0c) + sEasyChatScreen->unk_0a; -} - -int sub_811B908(void) -{ - int var0 = (u8)sEasyChatScreen->unk_0a < 7 ? sEasyChatScreen->unk_0a : 0; - int var1 = (u8)sEasyChatScreen->unk_0b < 4 ? sEasyChatScreen->unk_0b : 0; - return sUnknown_08597748[var1][var0]; -} - -u16 sub_811B940(void) -{ - return 2 * (sEasyChatScreen->unk_11 + sEasyChatScreen->unk_0e) + sEasyChatScreen->unk_10; -} - -u8 sub_811B960(u8 arg0) -{ - switch (arg0) - { - case 0: - default: - return 6; - case 1: - return 5; - } -} - -void sub_811B978(void) -{ - while (sub_811B9C8()) - { - if (sEasyChatScreen->unk_0a) - sEasyChatScreen->unk_0a--; - else - break; - } -} - -void sub_811B9A0(void) -{ - while (sub_811BA1C()) - { - if (sEasyChatScreen->unk_10) - sEasyChatScreen->unk_10--; - else - break; - } -} - -u8 sub_811B9C8(void) -{ - if (sEasyChatScreen->unk_09 == 0) - return sub_811B8E8() >= sub_811F3AC() ? 1 : 0; - else - return sEasyChatScreen->unk_0a > sub_811B960(sEasyChatScreen->unk_0b) ? 1 : 0; -} - -u8 sub_811BA1C(void) -{ - return sub_811B940() >= sub_811F5B0() ? 1 : 0; -} - -int FooterHasFourOptions(void) -{ - return sEasyChatScreenTemplates[sEasyChatScreen->templateId].fourFooterOptions; -} - -u8 GetEasyChatScreenType(void) -{ - return sEasyChatScreen->type; -} - -u8 GetEasyChatScreenFrameId(void) -{ - return sEasyChatScreenTemplates[sEasyChatScreen->templateId].frameId; -} - -const u8 *GetTitleText(void) -{ - return sEasyChatScreen->titleText; -} - -u16 *GetEasyChatWordBuffer(void) -{ - return sEasyChatScreen->ecWordBuffer; -} - -u8 GetNumRows(void) -{ - return sEasyChatScreen->numRows; -} - -u8 GetNumColumns(void) -{ - return sEasyChatScreen->numColumns; -} - -u8 GetMainCursorColumn(void) -{ - return sEasyChatScreen->mainCursorColumn; -} - -u8 GetMainCursorRow(void) -{ - return sEasyChatScreen->mainCursorRow; -} - -void GetEasyChatInstructionsText(const u8 **str1, const u8 **str2) -{ - *str1 = sEasyChatScreenTemplates[sEasyChatScreen->templateId].instructionsText1; - *str2 = sEasyChatScreenTemplates[sEasyChatScreen->templateId].instructionsText2; -} - -void GetEasyChatConfirmText(const u8 **str1, const u8 **str2) -{ - *str1 = sEasyChatScreenTemplates[sEasyChatScreen->templateId].confirmText1; - *str2 = sEasyChatScreenTemplates[sEasyChatScreen->templateId].confirmText2; -} - -void sub_811BB40(const u8 **str1, const u8 **str2) -{ - switch (sEasyChatScreen->type) - { - case EASY_CHAT_TYPE_MAIL: - *str1 = gText_StopGivingPkmnMail; - *str2 = NULL; - break; - case EASY_CHAT_TYPE_QUIZ_ANSWER: - case EASY_CHAT_TYPE_QUIZ_QUESTION: - *str1 = gText_LikeToQuitQuiz; - *str2 = gText_ChallengeQuestionMark; - break; - default: - *str1 = gText_QuitEditing; - *str2 = NULL; - break; - } - -} - -void GetEasyChatConfirmDeletionText(const u8 **str1, const u8 **str2) -{ - *str1 = gText_AllTextBeingEditedWill; - *str2 = gText_BeDeletedThatOkay; -} - -void sub_811BB9C(u8 *arg0, u8 *arg1) -{ - *arg0 = sEasyChatScreen->unk_0a; - *arg1 = sEasyChatScreen->unk_0b; -} - -u8 sub_811BBB0(void) -{ - return sEasyChatScreen->unk_09; -} - -u8 sub_811BBBC(void) -{ - return sEasyChatScreen->unk_0c; -} - -void sub_811BBC8(u8 *arg0, u8 *arg1) -{ - *arg0 = sEasyChatScreen->unk_10; - *arg1 = sEasyChatScreen->unk_11; -} - -u8 sub_811BBDC(void) -{ - return sEasyChatScreen->unk_0e; -} - -u8 sub_811BBE8(void) -{ - return sEasyChatScreen->unk_0f; -} - -u8 unref_sub_811BBF4(void) -{ - return 0; -} - -int sub_811BBF8(void) -{ - switch (sEasyChatScreen->state) - { - case 2: - if (sEasyChatScreen->unk_09 == 0 && sEasyChatScreen->unk_0c) - return 1; - break; - case 3: - if (sEasyChatScreen->unk_0e) - return 1; - break; - } - - return 0; -} - -int sub_811BC2C(void) -{ - switch (sEasyChatScreen->state) - { - case 2: - if (sEasyChatScreen->unk_09 == 0 && sEasyChatScreen->unk_0c + 4 <= sEasyChatScreen->unk_0d - 1) - return 1; - break; - case 3: - if (sEasyChatScreen->unk_0e + 4 <= sEasyChatScreen->unk_0f) - return 1; - break; - } - - return 0; -} - -int FooterHasFourOptions_(void) -{ - return FooterHasFourOptions(); -} - -u8 sub_811BC7C(const u16 *arg0, u8 arg1) -{ - u8 i; - - for (i = 0; i < arg1; i++) - { - if (arg0[i] != sEasyChatScreen->ecWordBuffer[i]) - return 1; - } - - return 0; -} - -u8 GetDisplayedPersonType(void) -{ - return sEasyChatScreen->displayedPersonType; -} - -u8 GetEachChatScreenTemplateId(u8 type) -{ - u32 i; - - for (i = 0; i < ARRAY_COUNT(sEasyChatScreenTemplates); i++) - { - if (sEasyChatScreenTemplates[i].type == type) - return i; - } - - return 0; -} - -int sub_811BCF4(void) -{ - int i; - - for (i = 0; i < sEasyChatScreen->unk_07; i++) - { - if (sEasyChatScreen->ecWordBuffer[i] != 0xFFFF) - return 0; - } - - return 1; -} - -int sub_811BD2C(void) -{ - int i; - - for (i = 0; i < sEasyChatScreen->unk_07; i++) - { - if (sEasyChatScreen->ecWordBuffer[i] == 0xFFFF) - return 0; - } - - return 1; -} - -int sub_811BD64(void) -{ - int i; - struct SaveBlock1 *saveBlock1; - - if (sEasyChatScreen->type == EASY_CHAT_TYPE_QUIZ_SET_QUESTION) - return sub_811BCF4(); - - saveBlock1 = gSaveBlock1Ptr; - for (i = 0; i < QUIZ_QUESTION_LEN; i++) - { - if (saveBlock1->lilycoveLady.quiz.question[i] != 0xFFFF) - return 0; - } - - return 1; -} - -int sub_811BDB0(void) -{ - struct LilycoveLadyQuiz *quiz; - if (sEasyChatScreen->type == EASY_CHAT_TYPE_QUIZ_SET_ANSWER) - return sub_811BCF4(); - - quiz = &gSaveBlock1Ptr->lilycoveLady.quiz; - return quiz->correctAnswer == 0xFFFF ? 1 : 0; -} - -void sub_811BDF0(u8 *arg0) -{ - u8 name[32]; - struct SaveBlock1 *saveBlock1 = gSaveBlock1Ptr; - DynamicPlaceholderTextUtil_Reset(); - if (StringLength(saveBlock1->lilycoveLady.quiz.playerName) != 0) - { - TVShowConvertInternationalString(name, saveBlock1->lilycoveLady.quiz.playerName, saveBlock1->lilycoveLady.quiz.language); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name); - } - else - { - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gText_Lady); - } - - DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700sQuiz); -} - -void sub_811BE54(void) -{ - int i; - u16 *ecWord; - u8 *str; - - ecWord = sEasyChatScreen->ecWordBuffer; - str = gStringVar2; - i = 0; - while (i < sEasyChatScreen->unk_07) - { - str = CopyEasyChatWordPadded(str, *ecWord, 0); - *str = 0; - str++; - ecWord++; - i++; - } - - str--; - str[0] = 0xFF; -} - -void sub_811BE9C(void) -{ - switch (sEasyChatScreen->type) - { - case EASY_CHAT_TYPE_PROFILE: - FlagSet(FLAG_SYS_CHAT_USED); - break; - case EASY_CHAT_TYPE_QUESTIONNAIRE: - if (sub_811BF20()) - gSpecialVar_0x8004 = 2; - else - gSpecialVar_0x8004 = 0; - break; - case EASY_CHAT_TYPE_TRENDY_PHRASE: - sub_811BE54(); - gSpecialVar_0x8004 = sub_81226D8(sEasyChatScreen->ecWordBuffer); - break; - case EASY_CHAT_TYPE_GOOD_SAYING: - gSpecialVar_0x8004 = sub_811BF40(); - break; - } -} - -int sub_811BF20(void) -{ - return sub_811BC7C(sMysteryGiftPhrase, ARRAY_COUNT(sMysteryGiftPhrase)) == 0; -} - -u16 sub_811BF40(void) -{ - int i; - for (i = 0; i < 5; i++) - { - if (!sub_811BC7C(sBerryMasterWifePhrases[i], ARRAY_COUNT(*sBerryMasterWifePhrases))) - return i + 1; - } - - return 0; -} - -void sub_811BF78(void) -{ - sEasyChatScreen->unk_13 = 0; -} - -int sub_811BF88(int easyChatWord) -{ - return 0; -} - -bool8 sub_811BF8C(void) -{ - if (!sub_811CE94()) - return 0; - else - return 1; -} - -bool8 sub_811BFA4(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sEasyChatBgTemplates, ARRAY_COUNT(sEasyChatBgTemplates)); - SetBgTilemapBuffer(3, sUnknown_0203A11C->unkB00); - SetBgTilemapBuffer(1, sUnknown_0203A11C->unk300); - InitWindows(sEasyChatWindowTemplates); - DeactivateAllTextPrinters(); - sub_811CF64(); - sub_811CF04(); - CpuFastFill(0, (void *)VRAM + 0x1000000, 0x400); - break; - case 1: - DecompressAndLoadBgGfxUsingHeap(3, gEasyChatWindow_Gfx, 0, 0, 0); - CopyToBgTilemapBuffer(3, gEasyChatWindow_Tilemap, 0, 0); - sub_811D60C(); - sub_811D424(sUnknown_0203A11C->unk300); - sub_811D230(); - sub_811E948(); - CopyBgTilemapBufferToVram(3); - break; - case 2: - DecompressAndLoadBgGfxUsingHeap(1, sUnknown_08597B54, 0, 0, 0); - CopyBgTilemapBufferToVram(1); - break; - case 3: - sub_811CFCC(); - sub_811D0BC(); - sub_811D2C8(); - sub_811D684(); - break; - case 4: - sub_811DE90(); - if (GetEasyChatScreenType() != EASY_CHAT_TYPE_QUIZ_QUESTION) - sub_811DEC4(); - break; - case 5: - if (IsDma3ManagerBusyWithBgCopy()) - { - return TRUE; - } - else - { - sub_811DE5C(0, 0, 0, 0); - SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(0, 63)); - SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0, 59)); - ShowBg(3); - ShowBg(1); - ShowBg(2); - ShowBg(0); - sub_811E5D4(); - sub_811E720(); - sub_811E828(); - } - break; - default: - return FALSE; - } - - sUnknown_0203A11C->unk0++; - return TRUE; -} - -void sub_811C13C(void) -{ - if (sUnknown_0203A11C) - FREE_AND_SET_NULL(sUnknown_0203A11C); -} - -void sub_811C158(u16 arg0) -{ - sUnknown_0203A11C->unk4 = arg0; - sUnknown_0203A11C->unk0 = 0; - sub_811C170(); -} - -bool8 sub_811C170(void) -{ - switch (sUnknown_0203A11C->unk4) - { - case 0: return FALSE; - case 1: return sub_811C2D4(); - case 2: return sub_811C30C(); - case 3: return sub_811C3E4(); - case 4: return sub_811C48C(); - case 5: return sub_811C404(); - case 6: return sub_811C448(); - case 7: return sub_811C4D0(); - case 8: return sub_811C518(); - case 9: return sub_811C554(); - case 10: return sub_811C620(); - case 11: return sub_811C830(); - case 12: return sub_811C8F0(); - case 13: return sub_811C99C(); - case 14: return sub_811CA5C(); - case 15: return sub_811C780(); - case 16: return sub_811C78C(); - case 17: return sub_811C7D4(); - case 18: return sub_811CB18(); - case 19: return sub_811CB98(); - case 20: return sub_811CB24(); - case 21: return sub_811CC90(); - case 22: return sub_811CC08(); - case 23: return sub_811C6C0(); - case 24: return FALSE; - case 25: return FALSE; - case 26: return FALSE; - case 27: return FALSE; - case 28: return FALSE; - case 29: return sub_811CD14(); - case 30: return sub_811CD54(); - case 31: return sub_811CD94(); - case 32: return sub_811CDD4(); - case 33: return sub_811CE14(); - case 34: return sub_811CE54(); - default: return FALSE; - } -} - -bool8 sub_811C2D4(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811D2C8(); - sUnknown_0203A11C->unk0++; - break; - case 1: - return IsDma3ManagerBusyWithBgCopy(); - } - - return TRUE; -} - -bool8 sub_811C30C(void) -{ - u8 i; - u16 *ecWordBuffer; - u16 *ecWord; - u8 frameId; - u8 cursorColumn, cursorRow, numColumns; - s16 var1; - int stringWidth; - int trueStringWidth; - u8 var2; - u8 str[64]; - - ecWordBuffer = GetEasyChatWordBuffer(); - frameId = GetEasyChatScreenFrameId(); - cursorColumn = GetMainCursorColumn(); - cursorRow = GetMainCursorRow(); - numColumns = GetNumColumns(); - ecWord = &ecWordBuffer[cursorRow * numColumns]; - var1 = 8 * sPhraseFrameDimensions[frameId].left + 13; - for (i = 0; i < cursorColumn; i++) - { - if (*ecWord == 0xFFFF) - { - stringWidth = 72; - } - else - { - CopyEasyChatWord(str, *ecWord); - stringWidth = GetStringWidth(1, str, 0); - } - - trueStringWidth = stringWidth + 17; - var1 += trueStringWidth; - ecWord++; - } - - var2 = 8 * (sPhraseFrameDimensions[frameId].top + cursorRow * 2); - sub_811DF60(var1, var2 + 8); - return FALSE; -} - -bool8 sub_811C3E4(void) -{ - u8 xOffset = GetFooterOptionXOffset(GetMainCursorColumn()); - sub_811DF60(xOffset, 96); - return FALSE; -} - -bool8 sub_811C404(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DF90(); - sub_811D104(2); - sub_811D214(1); - sUnknown_0203A11C->unk0++; - break; - case 1: - return IsDma3ManagerBusyWithBgCopy(); - } - - return TRUE; -} - -bool8 sub_811C448(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DF90(); - sub_811D104(3); - sub_811D214(0); - sUnknown_0203A11C->unk0++; - break; - case 1: - return IsDma3ManagerBusyWithBgCopy(); - } - - return TRUE; -} - -bool8 sub_811C48C(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DF90(); - sub_811D104(1); - sub_811D214(1); - sUnknown_0203A11C->unk0++; - break; - case 1: - return IsDma3ManagerBusyWithBgCopy(); - } - - return TRUE; -} - -bool8 sub_811C4D0(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DFB0(); - sub_811D104(0); - sub_811D2C8(); - ShowBg(0); - sUnknown_0203A11C->unk0++; - break; - case 1: - return IsDma3ManagerBusyWithBgCopy(); - } - - return TRUE; -} - -bool8 sub_811C518(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DFB0(); - sub_811D104(0); - sub_811D2C8(); - sUnknown_0203A11C->unk0++; - // Fall through - case 1: - return IsDma3ManagerBusyWithBgCopy(); - } - - return TRUE; -} - -bool8 sub_811C554(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DF90(); - HideBg(0); - sub_811DE5C(0, 0, 0, 0); - sub_811D6D4(); - sUnknown_0203A11C->unk0++; - break; - case 1: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811D9CC(0); - sUnknown_0203A11C->unk0++; - } - break; - case 2: - if (!IsDma3ManagerBusyWithBgCopy() && !sub_811DAA4()) - sUnknown_0203A11C->unk0++; - break; - case 3: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811E3AC(); - sUnknown_0203A11C->unk0++; - } - break; - case 4: - if (!sub_811E418()) - { - sub_811DFC8(); - sub_811E6E0(0); - sub_811E64C(); - sUnknown_0203A11C->unk0++; - return FALSE; - } - break; - default: - return FALSE; - } - - return TRUE; -} - -bool8 sub_811C620(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811E050(); - sub_811E4AC(); - sub_811E6B0(); - sUnknown_0203A11C->unk0++; - break; - case 1: - if (sub_811E4D0() == TRUE) - break; - - sub_811D9CC(1); - sUnknown_0203A11C->unk0++; - // Fall through - case 2: - if (!sub_811DAA4()) - sUnknown_0203A11C->unk0++; - break; - case 3: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811DFB0(); - ShowBg(0); - sUnknown_0203A11C->unk0++; - } - break; - case 4: - return FALSE; - } - - return TRUE; -} - -bool8 sub_811C6C0(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811E050(); - sub_811E6B0(); - sub_811E55C(); - sub_811D9CC(5); - sUnknown_0203A11C->unk0++; - break; - case 1: - if (!sub_811DAA4() && !sub_811E5B8()) - { - sub_811D6D4(); - sUnknown_0203A11C->unk0++; - } - break; - case 2: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811D9CC(6); - sub_811E578(); - sUnknown_0203A11C->unk0++; - } - break; - case 3: - if (!sub_811DAA4() && !sub_811E5B8()) - { - sub_811E64C(); - sub_811DFC8(); - sUnknown_0203A11C->unk0++; - return FALSE; - } - break; - case 4: - return FALSE; - } - - return TRUE; -} - -bool8 sub_811C780(void) -{ - sub_811E088(); - return FALSE; -} - -bool8 sub_811C78C(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DDAC(1, 4); - sUnknown_0203A11C->unk0++; - // Fall through - case 1: - if (!sub_811DE10()) - { - sub_811E088(); - sub_811E64C(); - return FALSE; - } - break; - } - - return TRUE; -} - -bool8 sub_811C7D4(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DDAC(-1, 4); - sUnknown_0203A11C->unk0++; - // Fall through - case 1: - if (!sub_811DE10()) - { - sub_811E64C(); - sUnknown_0203A11C->unk0++; - return FALSE; - } - break; - case 2: - return FALSE; - } - - return TRUE; -} - -bool8 sub_811C830(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811E050(); - sub_811E4AC(); - sub_811E6B0(); - sUnknown_0203A11C->unk0++; - break; - case 1: - if (!sub_811E4D0()) - { - sub_811D9B4(); - sUnknown_0203A11C->unk0++; - } - break; - case 2: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811D9CC(2); - sUnknown_0203A11C->unk0++; - } - break; - case 3: - if (!sub_811DAA4()) - { - sub_811D698(2); - sUnknown_0203A11C->unk0++; - } - break; - case 4: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811E288(); - sub_811E6E0(1); - sub_811E64C(); - sub_811E794(); - sUnknown_0203A11C->unk0++; - return FALSE; - } - break; - case 5: - return FALSE; - } - - return TRUE; -} - -bool8 sub_811C8F0(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811D2C8(); - sUnknown_0203A11C->unk0++; - break; - case 1: - sub_811E380(); - sub_811E6B0(); - sub_811E7F8(); - sub_811D9B4(); - sUnknown_0203A11C->unk0++; - break; - case 2: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811D9CC(3); - sUnknown_0203A11C->unk0++; - } - break; - case 3: - if (!sub_811DAA4()) - { - ShowBg(0); - sUnknown_0203A11C->unk0++; - } - break; - case 4: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811DFB0(); - sUnknown_0203A11C->unk0++; - return FALSE; - } - break; - case 5: - return FALSE; - } - - return TRUE; -} - -bool8 sub_811C99C(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811D2C8(); - sUnknown_0203A11C->unk0++; - break; - case 1: - sub_811E380(); - sub_811E6B0(); - sub_811E7F8(); - sub_811D9B4(); - sUnknown_0203A11C->unk0++; - break; - case 2: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811D9CC(3); - sUnknown_0203A11C->unk0++; - } - break; - case 3: - if (!sub_811DAA4()) - { - sub_811D104(3); - sUnknown_0203A11C->unk0++; - } - break; - case 4: - if (!IsDma3ManagerBusyWithBgCopy()) - { - ShowBg(0); - sUnknown_0203A11C->unk0++; - } - break; - case 5: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811DFB0(); - sUnknown_0203A11C->unk0++; - return FALSE; - } - break; - case 6: - return FALSE; - } - - return TRUE; -} - -bool8 sub_811CA5C(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811E380(); - sub_811E6B0(); - sub_811E7F8(); - sub_811D9B4(); - sUnknown_0203A11C->unk0++; - break; - case 1: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811D9CC(4); - sUnknown_0203A11C->unk0++; - } - break; - case 2: - if (!sub_811DAA4()) - { - sub_811D6D4(); - sUnknown_0203A11C->unk0++; - } - break; - case 3: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811E3AC(); - sUnknown_0203A11C->unk0++; - } - break; - case 4: - if (!sub_811E418()) - { - sub_811DFC8(); - sub_811E6E0(0); - sub_811E64C(); - sUnknown_0203A11C->unk0++; - return FALSE; - } - break; - } - - return TRUE; -} - -bool8 sub_811CB18(void) -{ - sub_811E30C(); - return FALSE; -} - -bool8 sub_811CB24(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811D7A4(); - sUnknown_0203A11C->unk0++; - break; - case 1: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811DDAC(1, 4); - sUnknown_0203A11C->unk0++; - } - break; - case 2: - if (!sub_811DE10()) - { - sub_811E30C(); - sub_811E64C(); - sub_811E794(); - sUnknown_0203A11C->unk0++; - return FALSE; - } - break; - case 3: - return FALSE; - } - - return TRUE; -} - -bool8 sub_811CB98(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811D7C8(); - sUnknown_0203A11C->unk0++; - break; - case 1: - if (!IsDma3ManagerBusyWithBgCopy()) - { - sub_811DDAC(-1, 4); - sUnknown_0203A11C->unk0++; - } - break; - case 2: - if (!sub_811DE10()) - { - sub_811E64C(); - sub_811E794(); - sUnknown_0203A11C->unk0++; - return FALSE; - } - break; - case 3: - return FALSE; - } - - return TRUE; -} - -bool8 sub_811CC08(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811D7EC(); - sUnknown_0203A11C->unk0++; - break; - case 1: - if (!IsDma3ManagerBusyWithBgCopy()) - { - s16 var0 = sub_811BBDC() - sub_811DE48(); - sub_811DDAC(var0, 8); - sUnknown_0203A11C->unk0++; - } - break; - case 2: - if (!sub_811DE10()) - { - sub_811E30C(); - sub_811E64C(); - sub_811E794(); - sUnknown_0203A11C->unk0++; - return FALSE; - } - break; - case 3: - return FALSE; - } - - return TRUE; -} - -bool8 sub_811CC90(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811D830(); - sUnknown_0203A11C->unk0++; - break; - case 1: - if (!IsDma3ManagerBusyWithBgCopy()) - { - s16 var0 = sub_811BBDC() - sub_811DE48(); - sub_811DDAC(var0, 8); - sUnknown_0203A11C->unk0++; - } - break; - case 2: - if (!sub_811DE10()) - { - sub_811E64C(); - sub_811E794(); - sUnknown_0203A11C->unk0++; - return FALSE; - } - break; - case 3: - return FALSE; - } - - return TRUE; -} - -bool8 sub_811CD14(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DF90(); - sub_811D104(4); - sUnknown_0203A11C->unk0++; - break; - case 1: - return IsDma3ManagerBusyWithBgCopy(); - } - - return TRUE; -} - -bool8 sub_811CD54(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DF90(); - sub_811D104(5); - sUnknown_0203A11C->unk0++; - break; - case 1: - return IsDma3ManagerBusyWithBgCopy(); - } - - return TRUE; -} - -bool8 sub_811CD94(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DF90(); - sub_811D104(6); - sUnknown_0203A11C->unk0++; - break; - case 1: - return IsDma3ManagerBusyWithBgCopy(); - } - - return TRUE; -} - -bool8 sub_811CDD4(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DF90(); - sub_811D104(7); - sUnknown_0203A11C->unk0++; - break; - case 1: - return IsDma3ManagerBusyWithBgCopy(); - } - - return TRUE; -} - -bool8 sub_811CE14(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DF90(); - sub_811D104(8); - sUnknown_0203A11C->unk0++; - break; - case 1: - return IsDma3ManagerBusyWithBgCopy(); - } - - return TRUE; -} - -bool8 sub_811CE54(void) -{ - switch (sUnknown_0203A11C->unk0) - { - case 0: - sub_811DF90(); - sub_811D104(9); - sUnknown_0203A11C->unk0++; - break; - case 1: - return IsDma3ManagerBusyWithBgCopy(); - } - - return TRUE; -} - -bool8 sub_811CE94(void) -{ - sUnknown_0203A11C = Alloc(sizeof(*sUnknown_0203A11C)); - if (!sUnknown_0203A11C) - return FALSE; - - sUnknown_0203A11C->unk0 = 0; - sUnknown_0203A11C->unk2D8 = NULL; - sUnknown_0203A11C->unk2DC = NULL; - sUnknown_0203A11C->unk2E0 = NULL; - sUnknown_0203A11C->unk2E4 = NULL; - sUnknown_0203A11C->unk2E8 = NULL; - sUnknown_0203A11C->unk2EC = NULL; - sUnknown_0203A11C->unk2F0 = NULL; - sUnknown_0203A11C->unk2F4 = NULL; - sUnknown_0203A11C->unk2F8 = NULL; - sUnknown_0203A11C->unk2FC = NULL; - sUnknown_0203A11C->unkA = FooterHasFourOptions_(); - return TRUE; -} - -void sub_811CF04(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_811CF64(void) -{ - ResetPaletteFade(); - LoadPalette(gEasyChatMode_Pal, 0, 32); - LoadPalette(sUnknown_08597B14, 1 * 16, 32); - LoadPalette(sUnknown_08597B34, 4 * 16, 32); - LoadPalette(sUnknown_08597C1C, 10 * 16, 8); - LoadPalette(sUnknown_08597C24, 11 * 16, 12); - LoadPalette(sUnknown_08597C24, 15 * 16, 12); - LoadPalette(sUnknown_08597C24, 3 * 16, 12); -} - -void sub_811CFCC(void) -{ - int xOffset; - const u8 *titleText = GetTitleText(); - if (!titleText) - return; - - xOffset = GetStringCenterAlignXOffset(1, titleText, 144); - FillWindowPixelBuffer(0, PIXEL_FILL(0)); - sub_811D058(0, 1, titleText, xOffset, 1, 0xFF, 0, 2, 3); - PutWindowTilemap(0); - CopyWindowToVram(0, 3); -} - -void sub_811D028(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) -{ - AddTextPrinterParameterized(windowId, fontId, str, x, y, speed, callback); -} - -void sub_811D058(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 red, u8 green, u8 blue) -{ - u8 color[3]; - color[0] = red; - color[1] = green; - color[2] = blue; - AddTextPrinterParameterized3(windowId, fontId, left, top, color, speed, str); -} - -void sub_811D0BC(void) -{ - FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17); - LoadUserWindowBorderGfx(1, 1, 0xE0); - DrawTextBorderOuter(1, 1, 14); - sub_811D104(0); - PutWindowTilemap(1); - CopyBgTilemapBufferToVram(0); -} - -void sub_811D104(u8 arg0) -{ - const u8 *text2 = NULL; - const u8 *text1 = NULL; - switch (arg0) - { - case 0: - GetEasyChatInstructionsText(&text1, &text2); - break; - case 2: - sub_811BB40(&text1, &text2); - break; - case 3: - GetEasyChatConfirmText(&text1, &text2); - break; - case 1: - GetEasyChatConfirmDeletionText(&text1, &text2); - break; - case 4: - text1 = gText_CreateAQuiz; - break; - case 5: - text1 = gText_SelectTheAnswer; - break; - case 6: - text1 = gText_OnlyOnePhrase; - text2 = gText_OriginalSongWillBeUsed; - break; - case 7: - text1 = gText_LyricsCantBeDeleted; - break; - case 8: - text1 = gText_CombineTwoWordsOrPhrases3; - break; - case 9: - text1 = gText_YouCannotQuitHere; - text2 = gText_SectionMustBeCompleted; - break; - } - - FillWindowPixelBuffer(1, PIXEL_FILL(1)); - if (text1) - sub_811D028(1, 1, text1, 0, 1, 0xFF, 0); - - if (text2) - sub_811D028(1, 1, text2, 0, 17, 0xFF, 0); - - CopyWindowToVram(1, 3); -} - -void sub_811D214(u8 initialCursorPos) -{ - CreateYesNoMenu(&sEasyChatYesNoWindowTemplate, 1, 14, initialCursorPos); -} - -void sub_811D230(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 = 0x6C; - sUnknown_0203A11C->windowId = AddWindow(&template); - PutWindowTilemap(sUnknown_0203A11C->windowId); -} - -void sub_811D2C8(void) -{ - u8 spC[4]; - u16 *ecWord; - u8 numColumns, numRows; - u8 *str; - int frameId; - int var1; - int i, j, k; - - ecWord = GetEasyChatWordBuffer(); - numColumns = GetNumColumns(); - numRows = GetNumRows(); - frameId = GetEasyChatScreenFrameId(); - var1 = 0; - if (frameId == 7) - var1 = 1; - - FillWindowPixelBuffer(sUnknown_0203A11C->windowId, PIXEL_FILL(1)); - for (i = 0; i < numRows; i++) - { - memcpy(spC, sText_Clear17, sizeof(sText_Clear17)); - if (var1) - spC[2] = 6; - - str = sUnknown_0203A11C->unkB; - sUnknown_0203A11C->unkB[0] = EOS; - str = StringAppend(str, spC); - for (j = 0; j < numColumns; j++) - { - if (*ecWord != 0xFFFF) - { - str = CopyEasyChatWord(str, *ecWord); - ecWord++; - } - else - { - ecWord++; - if (!var1) - { - str = WriteColorChangeControlCode(str, 0, 4); - for (k = 0; k < 12; k++) - { - *str = CHAR_HYPHEN; - str++; - } - - str = WriteColorChangeControlCode(str, 0, 2); - } - } - - if (var1) - spC[2] = 3; - - str = StringAppend(str, spC); - if (frameId == 2 || frameId == 7 || frameId == 8) - { - if (j == 0 && i == 4) - break; - } - } - - *str = EOS; - sub_811D028(sUnknown_0203A11C->windowId, 1, sUnknown_0203A11C->unkB, 0, i * 16 + 1, 0xFF, 0); - } - - CopyWindowToVram(sUnknown_0203A11C->windowId, 3); -} - -void sub_811D424(u16 *tilemap) -{ - u8 frameId; - int right, bottom; - int x, y; - - frameId = GetEasyChatScreenFrameId(); - CpuFastFill(0, tilemap, BG_SCREEN_SIZE); - if (frameId == 2 || frameId == 8) - { - 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_811D60C(void) -{ - u8 frameId; - u16 *tilemap; - - tilemap = GetBgTilemapBuffer(3); - frameId = GetEasyChatScreenFrameId(); - switch (sPhraseFrameDimensions[frameId].footerId) - { - case 2: - tilemap += 0x2A0; - CopyToBgTilemapBufferRect(3, tilemap, 0, 11, 32, 2); - break; - case 1: - tilemap += 0x300; - CopyToBgTilemapBufferRect(3, tilemap, 0, 11, 32, 2); - break; - case 3: - CopyToBgTilemapBufferRect(3, tilemap, 0, 10, 32, 4); - break; - } -} - -void sub_811D684(void) -{ - PutWindowTilemap(2); - CopyBgTilemapBufferToVram(2); -} - -void sub_811D698(u32 arg0) -{ - sub_811DD84(); - FillWindowPixelBuffer(2, PIXEL_FILL(1)); - switch (arg0) - { - case 0: - sub_811D6F4(); - break; - case 1: - PrintEasyChatKeyboardText(); - break; - case 2: - sub_811D794(); - break; - } - - CopyWindowToVram(2, 2); -} - -void sub_811D6D4(void) -{ - if (!sub_811BBB0()) - sub_811D698(0); - else - sub_811D698(1); -} - -void sub_811D6F4(void) -{ - int i; - int x, y; - - i = 0; - y = 97; - while (1) - { - for (x = 0; x < 2; x++) - { - u8 groupId = sub_811F3B8(i++); - if (groupId == EC_NUM_GROUPS) - { - sub_811DDAC(sub_811BBBC(), 0); - return; - } - - sub_811D028(2, 1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, 0xFF, NULL); - } - - y += 16; - } -} - -void PrintEasyChatKeyboardText(void) -{ - u32 i; - - for (i = 0; i < ARRAY_COUNT(sEasyChatKeyboardText); i++) - sub_811D028(2, 1, sEasyChatKeyboardText[i], 10, 97 + i * 16, 0xFF, NULL); -} - -void sub_811D794(void) -{ - sub_811D864(0, 4); -} - -void sub_811D7A4(void) -{ - u8 var0 = sub_811BBDC() + 3; - sub_811D950(var0, 1); - sub_811D864(var0, 1); -} - -void sub_811D7C8(void) -{ - u8 var0 = sub_811BBDC(); - sub_811D950(var0, 1); - sub_811D864(var0, 1); -} - -void sub_811D7EC(void) -{ - u8 var0 = sub_811BBDC(); - u8 var1 = var0 + 4; - u8 var2 = sub_811BBE8() + 1; - if (var1 > var2) - var1 = var2; - - if (var0 < var1) - { - u8 var3 = var1 - var0; - sub_811D950(var0, var3); - sub_811D864(var0, var3); - } -} - -void sub_811D830(void) -{ - u8 var0 = sub_811BBDC(); - u8 var1 = sub_811DE48(); - if (var0 < var1) - { - u8 var2 = var1 - var0; - sub_811D950(var0, var2); - sub_811D864(var0, var2); - } -} - -void sub_811D864(u8 arg0, u8 arg1) -{ - int i, j; - u16 easyChatWord; - u8 *str; - int y; - int var0; - - var0 = arg0 * 2; - y = (arg0 * 16 + 96) & 0xFF; - y++; - for (i = 0; i < arg1; i++) - { - for (j = 0; j < 2; j++) - { - easyChatWord = sub_811F578(var0++); - if (easyChatWord != 0xFFFF) - { - CopyEasyChatWordPadded(sUnknown_0203A11C->unkCC, easyChatWord, 0); - if (!sub_811BF88(easyChatWord)) - sub_811D028(2, 1, sUnknown_0203A11C->unkCC, (j * 13 + 3) * 8, y, 0xFF, NULL); - else - sub_811D058(2, 1, sUnknown_0203A11C->unkCC, (j * 13 + 3) * 8, y, 0xFF, 1, 5, 3); - } - } - - y += 16; - } - - CopyWindowToVram(2, 2); -} - -void sub_811D950(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); -} - -void sub_811D9B4(void) -{ - FillWindowPixelBuffer(2, PIXEL_FILL(1)); - CopyWindowToVram(2, 2); -} - -void sub_811D9CC(int arg0) -{ - switch (arg0) - { - case 0: - sUnknown_0203A11C->unk6 = 0; - sUnknown_0203A11C->unk7 = 10; - break; - case 1: - sUnknown_0203A11C->unk6 = 9; - sUnknown_0203A11C->unk7 = 0; - break; - case 2: - sUnknown_0203A11C->unk6 = 11; - sUnknown_0203A11C->unk7 = 17; - break; - case 3: - sUnknown_0203A11C->unk6 = 17; - sUnknown_0203A11C->unk7 = 0; - break; - case 4: - sUnknown_0203A11C->unk6 = 17; - sUnknown_0203A11C->unk7 = 10; - break; - case 5: - sUnknown_0203A11C->unk6 = 18; - sUnknown_0203A11C->unk7 = 22; - break; - case 6: - sUnknown_0203A11C->unk6 = 22; - sUnknown_0203A11C->unk7 = 18; - break; - } - - sUnknown_0203A11C->unk8 = sUnknown_0203A11C->unk6 < sUnknown_0203A11C->unk7 ? 1 : -1; -} - -bool8 sub_811DAA4(void) -{ - u8 var0, var1; - if (sUnknown_0203A11C->unk6 == sUnknown_0203A11C->unk7) - return FALSE; - - sUnknown_0203A11C->unk6 += sUnknown_0203A11C->unk8; - sub_811DADC(sUnknown_0203A11C->unk6); - var0 = sUnknown_0203A11C->unk6; - var1 = sUnknown_0203A11C->unk7; - return (var0 ^ var1) > 0; -} - -void sub_811DADC(u8 arg0) -{ - FillBgTilemapBufferRect_Palette0(1, 0, 0, 10, 30, 10); - switch (arg0) - { - case 0: - break; - case 1: - sub_811DC28(11, 14, 3, 2); - break; - case 2: - sub_811DC28(9, 14, 7, 2); - break; - case 3: - sub_811DC28(7, 14, 11, 2); - break; - case 4: - sub_811DC28(5, 14, 15, 2); - break; - case 5: - sub_811DC28(3, 14, 19, 2); - break; - case 6: - sub_811DC28(1, 14, 23, 2); - break; - case 11: - sub_811DC28(1, 10, 24, 10); - break; - case 12: - sub_811DC28(1, 10, 25, 10); - break; - case 13: - sub_811DC28(1, 10, 26, 10); - break; - case 14: - sub_811DC28(1, 10, 27, 10); - break; - case 15: - sub_811DC28(1, 10, 28, 10); - break; - case 16: - sub_811DC28(1, 10, 29, 10); - break; - case 17: - sub_811DC28(0, 10, 30, 10); - break; - case 10: - case 18: - sub_811DC28(1, 10, 23, 10); - break; - case 9: - case 19: - sub_811DC28(1, 11, 23, 8); - break; - case 8: - case 20: - sub_811DC28(1, 12, 23, 6); - break; - case 7: - case 21: - sub_811DC28(1, 13, 23, 4); - break; - case 22: - sub_811DC28(1, 14, 23, 2); - break; - } - - CopyBgTilemapBufferToVram(1); -} - -void sub_811DC28(int left, int top, int width, int height) -{ - u16 *tilemap; - int right; - int bottom; - int x, y; - - tilemap = sUnknown_0203A11C->unk300; - right = left + width - 1; - bottom = top + height - 1; - x = left; - y = top; - tilemap[y * 32 + x] = 0x4001; - x++; - for (; x < right; x++) - tilemap[y * 32 + x] = 0x4002; - - tilemap[y * 32 + x] = 0x4003; - y++; - for (; y < bottom; y++) - { - tilemap[y * 32 + left] = 0x4005; - x = left + 1; - for (; x < right; x++) - tilemap[y * 32 + x] = 0x4000; - - tilemap[y * 32 + x] = 0x4007; - } - - tilemap[y * 32 + left] = 0x4009; - x = left + 1; - for (; x < right; x++) - tilemap[y * 32 + x] = 0x400A; - - tilemap[y * 32 + x] = 0x400B; - sub_811DE5C((left + 1) * 8, (top + 1) * 8, (width - 2) * 8, (height - 2) * 8); -} - -void sub_811DD84(void) -{ - ChangeBgY(2, 0x800, 0); - sUnknown_0203A11C->unk2CE = 0; -} - -void sub_811DDAC(s16 arg0, u8 arg1) -{ - int bgY; - s16 var0; - - bgY = GetBgY(2); - sUnknown_0203A11C->unk2CE += arg0; - var0 = arg0 * 16; - bgY += var0 << 8; - if (arg1) - { - sUnknown_0203A11C->unk2D0 = bgY; - sUnknown_0203A11C->unk2D4 = arg1 * 256; - if (var0 < 0) - sUnknown_0203A11C->unk2D4 = -sUnknown_0203A11C->unk2D4; - } - else - { - ChangeBgY(2, bgY, 0); - } -} - -bool8 sub_811DE10(void) -{ - int bgY; - - bgY = GetBgY(2); - if (bgY == sUnknown_0203A11C->unk2D0) - { - return FALSE; - } - else - { - ChangeBgY(2, sUnknown_0203A11C->unk2D4, 1); - return TRUE; - } -} - -int sub_811DE48(void) -{ - return sUnknown_0203A11C->unk2CE; -} - -void sub_811DE5C(u8 left, u8 top, u8 width, u8 height) -{ - u16 horizontalDimensions = WIN_RANGE(left, left + width); - u16 verticalDimensions = WIN_RANGE(top, top + height); - SetGpuReg(REG_OFFSET_WIN0H, horizontalDimensions); - SetGpuReg(REG_OFFSET_WIN0V, verticalDimensions); -} - -void sub_811DE90(void) -{ - u32 i; - - LoadSpriteSheets(sEasyChatSpriteSheets); - LoadSpritePalettes(sEasyChatSpritePalettes); - for (i = 0; i < ARRAY_COUNT(sUnknown_08597CE8); i++) - LoadCompressedSpriteSheet(&sUnknown_08597CE8[i]); -} - -void sub_811DEC4(void) -{ - u8 frameId = GetEasyChatScreenFrameId(); - int x = sPhraseFrameDimensions[frameId].left * 8 + 13; - int y = sPhraseFrameDimensions[frameId].top * 8 + 8; - u8 spriteId = CreateSprite(&sUnknown_08597D18, x, y, 2); - sUnknown_0203A11C->unk2D8 = &gSprites[spriteId]; - gSprites[spriteId].data[1] = 1; -} - -void sub_811DF28(struct Sprite *sprite) -{ - if (sprite->data[1]) - { - if (++sprite->data[0] > 2) - { - sprite->data[0] = 0; - if (++sprite->pos2.x > 0) - sprite->pos2.x = -6; - } - } -} - -void sub_811DF60(u8 x, u8 y) -{ - sUnknown_0203A11C->unk2D8->pos1.x = x; - sUnknown_0203A11C->unk2D8->pos1.y = y; - sUnknown_0203A11C->unk2D8->pos2.x = 0; - sUnknown_0203A11C->unk2D8->data[0] = 0; -} - -void sub_811DF90(void) -{ - sUnknown_0203A11C->unk2D8->data[0] = 0; - sUnknown_0203A11C->unk2D8->data[1] = 0; - sUnknown_0203A11C->unk2D8->pos2.x = 0; -} - -void sub_811DFB0(void) -{ - sUnknown_0203A11C->unk2D8->data[1] = 1; -} - -void sub_811DFC8(void) -{ - u8 spriteId = CreateSprite(&sUnknown_08597D68, 0, 0, 3); - sUnknown_0203A11C->unk2DC = &gSprites[spriteId]; - sUnknown_0203A11C->unk2DC->pos2.x = 32; - - spriteId = CreateSprite(&sUnknown_08597D68, 0, 0, 3); - sUnknown_0203A11C->unk2E0 = &gSprites[spriteId]; - sUnknown_0203A11C->unk2E0->pos2.x = -32; - - sUnknown_0203A11C->unk2DC->hFlip = 1; - sub_811E088(); -} - -void sub_811E050(void) -{ - DestroySprite(sUnknown_0203A11C->unk2DC); - sUnknown_0203A11C->unk2DC = NULL; - DestroySprite(sUnknown_0203A11C->unk2E0); - sUnknown_0203A11C->unk2E0 = NULL; -} - -void sub_811E088(void) -{ - u8 var0; - u8 var1; - - if (sUnknown_0203A11C->unk2DC && sUnknown_0203A11C->unk2E0) - { - sub_811BB9C(&var0, &var1); - if (!sub_811BBB0()) - sub_811E0EC(var0, var1); - else - sub_811E1A4(var0, var1); - } -} - -void sub_811E0EC(s8 arg0, s8 arg1) -{ - if (arg0 != -1) - { - StartSpriteAnim(sUnknown_0203A11C->unk2DC, 0); - sUnknown_0203A11C->unk2DC->pos1.x = arg0 * 84 + 58; - sUnknown_0203A11C->unk2DC->pos1.y = arg1 * 16 + 96; - - StartSpriteAnim(sUnknown_0203A11C->unk2E0, 0); - sUnknown_0203A11C->unk2E0->pos1.x = arg0 * 84 + 58; - sUnknown_0203A11C->unk2E0->pos1.y = arg1 * 16 + 96; - } - else - { - StartSpriteAnim(sUnknown_0203A11C->unk2DC, 1); - sUnknown_0203A11C->unk2DC->pos1.x = 216; - sUnknown_0203A11C->unk2DC->pos1.y = arg1 * 16 + 112; - - StartSpriteAnim(sUnknown_0203A11C->unk2E0, 1); - sUnknown_0203A11C->unk2E0->pos1.x = 216; - sUnknown_0203A11C->unk2E0->pos1.y = arg1 * 16 + 112; - } -} - -void sub_811E1A4(s8 arg0, s8 arg1) -{ - int anim; - int x, y; - - if (arg0 != -1) - { - y = arg1 * 16 + 96; - x = 32; - if (arg0 == 6 && arg1 == 0) - { - x = 158; - anim = 2; - } - else - { - x += sUnknown_08597D08[arg0 < ARRAY_COUNT(sUnknown_08597D08) ? arg0 : 0]; - anim = 3; - } - - StartSpriteAnim(sUnknown_0203A11C->unk2DC, anim); - sUnknown_0203A11C->unk2DC->pos1.x = x; - sUnknown_0203A11C->unk2DC->pos1.y = y; - - StartSpriteAnim(sUnknown_0203A11C->unk2E0, anim); - sUnknown_0203A11C->unk2E0->pos1.x = x; - sUnknown_0203A11C->unk2E0->pos1.y = y; - } - else - { - StartSpriteAnim(sUnknown_0203A11C->unk2DC, 1); - sUnknown_0203A11C->unk2DC->pos1.x = 216; - sUnknown_0203A11C->unk2DC->pos1.y = arg1 * 16 + 112; - - StartSpriteAnim(sUnknown_0203A11C->unk2E0, 1); - sUnknown_0203A11C->unk2E0->pos1.x = 216; - sUnknown_0203A11C->unk2E0->pos1.y = arg1 * 16 + 112; - } -} - -void sub_811E288(void) -{ - u8 spriteId = CreateSprite(&sUnknown_08597D18, 0, 0, 4); - sUnknown_0203A11C->unk2E4 = &gSprites[spriteId]; - sUnknown_0203A11C->unk2E4->callback = sub_811E2DC; - sUnknown_0203A11C->unk2E4->oam.priority = 2; - sub_811E30C(); -} - -void sub_811E2DC(struct Sprite *sprite) -{ - if (++sprite->data[0] > 2) - { - sprite->data[0] = 0; - if (++sprite->pos2.x > 0) - sprite->pos2.x = -6; - } -} - -void sub_811E30C(void) -{ - s8 var0, var1, x, y; - - sub_811BBC8(&var0, &var1); - x = var0 * 13; - x = x * 8 + 28; - y = var1 * 16 + 96; - sub_811E34C(x, y); -} - -void sub_811E34C(u8 x, u8 y) -{ - if (sUnknown_0203A11C->unk2E4) - { - sUnknown_0203A11C->unk2E4->pos1.x = x; - sUnknown_0203A11C->unk2E4->pos1.y = y; - sUnknown_0203A11C->unk2E4->pos2.x = 0; - sUnknown_0203A11C->unk2E4->data[0] = 0; - } -} - -void sub_811E380(void) -{ - if (sUnknown_0203A11C->unk2E4) - { - DestroySprite(sUnknown_0203A11C->unk2E4); - sUnknown_0203A11C->unk2E4 = NULL; - } -} - -void sub_811E3AC(void) -{ - u8 spriteId = CreateSprite(&sUnknown_08597DF0, 208, 128, 6); - sUnknown_0203A11C->unk2E8 = &gSprites[spriteId]; - sUnknown_0203A11C->unk2E8->pos2.x = -64; - - spriteId = CreateSprite(&sUnknown_08597DD0, 208, 80, 5); - sUnknown_0203A11C->unk2EC = &gSprites[spriteId]; - sUnknown_0203A11C->unk9 = 0; -} - -bool8 sub_811E418(void) -{ - switch (sUnknown_0203A11C->unk9) - { - default: - return FALSE; - case 0: - sUnknown_0203A11C->unk2E8->pos2.x += 8; - if (sUnknown_0203A11C->unk2E8->pos2.x >= 0) - { - sUnknown_0203A11C->unk2E8->pos2.x = 0; - if (!sub_811BBB0()) - StartSpriteAnim(sUnknown_0203A11C->unk2EC, 1); - else - StartSpriteAnim(sUnknown_0203A11C->unk2EC, 2); - - sUnknown_0203A11C->unk9++; - } - break; - case 1: - if (sUnknown_0203A11C->unk2EC->animEnded) - { - sUnknown_0203A11C->unk9 = 2; - return FALSE; - } - } - - return TRUE; -} - -void sub_811E4AC(void) -{ - sUnknown_0203A11C->unk9 = 0; - StartSpriteAnim(sUnknown_0203A11C->unk2EC, 3); -} - -bool8 sub_811E4D0(void) -{ - switch (sUnknown_0203A11C->unk9) - { - default: - return FALSE; - case 0: - if (sUnknown_0203A11C->unk2EC->animEnded) - sUnknown_0203A11C->unk9 = 1; - break; - case 1: - sUnknown_0203A11C->unk2E8->pos2.x -= 8; - if (sUnknown_0203A11C->unk2E8->pos2.x <= -64) - { - DestroySprite(sUnknown_0203A11C->unk2EC); - DestroySprite(sUnknown_0203A11C->unk2E8); - sUnknown_0203A11C->unk2EC = NULL; - sUnknown_0203A11C->unk2E8 = NULL; - sUnknown_0203A11C->unk9++; - return FALSE; - } - } - - return TRUE; -} - -void sub_811E55C(void) -{ - StartSpriteAnim(sUnknown_0203A11C->unk2EC, 4); -} - -void sub_811E578(void) -{ - if (!sub_811BBB0()) - StartSpriteAnim(sUnknown_0203A11C->unk2EC, 1); - else - StartSpriteAnim(sUnknown_0203A11C->unk2EC, 2); -} - -bool8 sub_811E5B8(void) -{ - return !sUnknown_0203A11C->unk2EC->animEnded; -} - -void sub_811E5D4(void) -{ - u8 spriteId = CreateSprite(&sUnknown_08597E48, 96, 80, 0); - if (spriteId != MAX_SPRITES) - sUnknown_0203A11C->unk2F0 = &gSprites[spriteId]; - - spriteId = CreateSprite(&sUnknown_08597E48, 96, 156, 0); - if (spriteId != MAX_SPRITES) - { - sUnknown_0203A11C->unk2F4 = &gSprites[spriteId]; - sUnknown_0203A11C->unk2F4->vFlip = 1; - } - - sub_811E6B0(); -} - -void sub_811E64C(void) -{ - sUnknown_0203A11C->unk2F0->invisible = !sub_811BBF8(); - sUnknown_0203A11C->unk2F4->invisible = !sub_811BC2C(); -} - -void sub_811E6B0(void) -{ - sUnknown_0203A11C->unk2F0->invisible = 1; - sUnknown_0203A11C->unk2F4->invisible = 1; -} - -void sub_811E6E0(int arg0) -{ - if (!arg0) - { - sUnknown_0203A11C->unk2F0->pos1.x = 96; - sUnknown_0203A11C->unk2F4->pos1.x = 96; - } - else - { - sUnknown_0203A11C->unk2F0->pos1.x = 120; - sUnknown_0203A11C->unk2F4->pos1.x = 120; - } -} - -void sub_811E720(void) -{ - u8 spriteId = CreateSprite(&sUnknown_08597E30, 220, 84, 1); - if (spriteId != MAX_SPRITES) - sUnknown_0203A11C->unk2F8 = &gSprites[spriteId]; - - spriteId = CreateSprite(&sUnknown_08597E30, 220, 156, 1); - if (spriteId != MAX_SPRITES) - { - sUnknown_0203A11C->unk2FC = &gSprites[spriteId]; - StartSpriteAnim(sUnknown_0203A11C->unk2FC, 1); - } - - sub_811E7F8(); -} - -void sub_811E794(void) -{ - sUnknown_0203A11C->unk2F8->invisible = !sub_811BBF8(); - sUnknown_0203A11C->unk2FC->invisible = !sub_811BC2C(); -} - -void sub_811E7F8(void) -{ - sUnknown_0203A11C->unk2F8->invisible = 1; - sUnknown_0203A11C->unk2FC->invisible = 1; -} - -void sub_811E828(void) -{ - int graphicsId; - u8 spriteId; - - switch (GetDisplayedPersonType()) - { - case EASY_CHAT_PERSON_REPORTER_MALE: - graphicsId = EVENT_OBJ_GFX_REPORTER_M; - break; - case EASY_CHAT_PERSON_REPORTER_FEMALE: - graphicsId = EVENT_OBJ_GFX_REPORTER_F; - break; - case EASY_CHAT_PERSON_BOY: - graphicsId = EVENT_OBJ_GFX_BOY_1; - break; - default: - return; - } - - if (GetEasyChatScreenFrameId() != 4) - return; - - spriteId = AddPseudoEventObject(graphicsId, SpriteCallbackDummy, 76, 40, 0); - if (spriteId != MAX_SPRITES) - { - gSprites[spriteId].oam.priority = 0; - StartSpriteAnim(&gSprites[spriteId], 2); - } - - spriteId = AddPseudoEventObject( - gSaveBlock2Ptr->playerGender == MALE ? EVENT_OBJ_GFX_RIVAL_BRENDAN_NORMAL : EVENT_OBJ_GFX_RIVAL_MAY_NORMAL, - SpriteCallbackDummy, - 52, - 40, - 0); - - if (spriteId != MAX_SPRITES) - { - gSprites[spriteId].oam.priority = 0; - StartSpriteAnim(&gSprites[spriteId], 3); - } -} - -int GetFooterIndex(void) -{ - u8 frameId = GetEasyChatScreenFrameId(); - switch (sPhraseFrameDimensions[frameId].footerId) - { - case 1: - return 1; - case 2: - return 2; - case 0: - return 0; - default: - return 3; - } -} - -int GetFooterOptionXOffset(int option) -{ - int footerIndex = GetFooterIndex(); - if (footerIndex < 3) - return sFooterOptionXOffsets[footerIndex][option] + 4; - else - return 0; -} - -void sub_811E948(void) -{ - int i; - u16 windowId; - struct WindowTemplate template; - int footerId = GetFooterIndex(); - if (footerId == 3) - return; - - template.bg = 3; - template.tilemapLeft = 1; - template.tilemapTop = 11; - template.width = 28; - template.height = 2; - template.paletteNum = 11; - template.baseBlock = 0x34; - windowId = AddWindow(&template); - FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - for (i = 0; i < 4; i++) - { - const u8 *str = sFooterTextOptions[footerId][i]; - if (str) - { - int x = sFooterOptionXOffsets[footerId][i]; - sub_811D028(windowId, 1, str, x, 1, 0, NULL); - } - } - - PutWindowTilemap(windowId); -} - -bool8 sub_811EA28(u8 groupId) +static bool8 sub_80BD718(u8 groupId) { switch (groupId) { case EC_GROUP_TRENDY_SAYING: - return FlagGet(FLAG_SYS_HIPSTER_MEET); + return FALSE; case EC_GROUP_EVENTS: case EC_GROUP_MOVE_1: case EC_GROUP_MOVE_2: return FlagGet(FLAG_SYS_GAME_CLEAR); - case EC_GROUP_POKEMON_2: - return sub_811F0F8(); + case EC_GROUP_POKEMON: + return sub_80BDCA8(); default: return TRUE; } } -u16 EasyChat_GetNumWordsInGroup(u8 groupId) +static u16 EasyChat_GetNumWordsInGroup(u8 groupId) { if (groupId == EC_GROUP_POKEMON) return GetNationalPokedexCount(FLAG_GET_SEEN); - if (sub_811EA28(groupId)) + if (sub_80BD718(groupId)) return gEasyChatGroups[groupId].numEnabledWords; return 0; } -bool8 sub_811EAA4(u16 easyChatWord) +static bool8 sub_80BD78C(u16 easyChatWord) { u16 i; u8 groupId; @@ -4070,36 +166,7 @@ bool8 sub_811EAA4(u16 easyChatWord) } } -bool8 ECWord_CheckIfOutsideOfValidRange(u16 easyChatWord) -{ - int numWordsInGroup; - u8 groupId = EC_GROUP(easyChatWord); - u32 index = EC_INDEX(easyChatWord); - if (groupId >= EC_NUM_GROUPS) - return TRUE; - - switch (groupId) - { - case EC_GROUP_POKEMON: - case EC_GROUP_POKEMON_2: - numWordsInGroup = gNumSpeciesNames; - break; - case EC_GROUP_MOVE_1: - case EC_GROUP_MOVE_2: - numWordsInGroup = gUnknown_085FA1D4; - break; - default: - numWordsInGroup = gEasyChatGroups[groupId].numWords; - break; - } - - if (numWordsInGroup <= index) - return TRUE; - else - return FALSE; -} - -const u8 *GetEasyChatWord(u8 groupId, u16 index) +static const u8 *GetEasyChatWord(u8 groupId, u16 index) { switch (groupId) { @@ -4117,7 +184,7 @@ const u8 *GetEasyChatWord(u8 groupId, u16 index) u8 *CopyEasyChatWord(u8 *dest, u16 easyChatWord) { u8 *resultStr; - if (sub_811EAA4(easyChatWord)) + if (sub_80BD78C(easyChatWord)) { resultStr = StringCopy(dest, gText_ThreeQuestionMarks); } @@ -4165,64 +232,12 @@ u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows return dest; } -u8 *unref_sub_811EC98(u8 *dest, const u16 *src, u16 columns, u16 rows) -{ - u16 i, j, k; - u16 numColumns; - int var0, var1; - - numColumns = columns; - var1 = 0; - columns--; - for (i = 0; i < rows; i++) - { - const u16 *var2 = src; - var0 = 0; - for (j = 0; j < numColumns; j++) - { - if (var2[j] != 0xFFFF) - var0 = 1; - } - - if (!var0) - { - src += numColumns; - continue; - } - - for (k = 0; k < columns; k++) - { - dest = CopyEasyChatWord(dest, *src); - if (*src != 0xFFFF) - { - *dest = CHAR_SPACE; - dest++; - } - - src++; - } - - dest = CopyEasyChatWord(dest, *(src++)); - if (var1 == 0) - *dest = CHAR_NEWLINE; - else - *dest = CHAR_PROMPT_SCROLL; - - dest++; - var1++; - } - - dest--; - *dest = EOS; - return dest; -} - -u16 GetEasyChatWordStringLength(u16 easyChatWord) +static u16 GetEasyChatWordStringLength(u16 easyChatWord) { if (easyChatWord == 0xFFFF) return 0; - if (sub_811EAA4(easyChatWord)) + if (sub_80BD78C(easyChatWord)) { return StringLength(gText_ThreeQuestionMarks); } @@ -4234,7 +249,7 @@ u16 GetEasyChatWordStringLength(u16 easyChatWord) } } -bool8 sub_811EDC4(const u16 *easyChatWords, u8 arg1, u8 arg2, u16 arg3) +bool8 sub_80BD974(const u16 *easyChatWords, u8 arg1, u8 arg2, u16 arg3) { u8 i, j; @@ -4251,11 +266,11 @@ bool8 sub_811EDC4(const u16 *easyChatWords, u8 arg1, u8 arg2, u16 arg3) return FALSE; } -u16 sub_811EE38(u16 groupId) +static u16 sub_80BD9E8(u16 groupId) { u16 index = Random() % gEasyChatGroups[groupId].numWords; - if (groupId == EC_GROUP_POKEMON - || groupId == EC_GROUP_POKEMON_2 + if (groupId == EC_GROUP_POKEMON_2 + || groupId == EC_GROUP_POKEMON || groupId == EC_GROUP_MOVE_1 || groupId == EC_GROUP_MOVE_2) { @@ -4265,18 +280,18 @@ u16 sub_811EE38(u16 groupId) return EC_WORD(groupId, index); } -u16 sub_811EE90(u16 groupId) +static u16 sub_80BDA40(u16 groupId) { - if (!sub_811EA28(groupId)) + if (!sub_80BD718(groupId)) return 0xFFFF; if (groupId == EC_GROUP_POKEMON) - return sub_811F108(); + return GetRandomECPokemon(); - return sub_811EE38(groupId); + return sub_80BD9E8(groupId); } -void sub_811EECC(void) +void sub_80BDA7C(void) { u16 *easyChatWords; int columns, rows; @@ -4289,7 +304,7 @@ void sub_811EECC(void) break; case 1: easyChatWords = gSaveBlock1Ptr->easyChatBattleStart; - if (sub_811EDC4(gSaveBlock1Ptr->easyChatBattleStart, 3, 2, 18)) + if (sub_80BD974(gSaveBlock1Ptr->easyChatBattleStart, 3, 2, 18)) { columns = 2; rows = 3; @@ -4318,21 +333,21 @@ void sub_811EECC(void) ShowFieldAutoScrollMessage(gStringVar4); } -void sub_811EF6C(void) +void BufferRandomHobbyOrLifestyleString(void) { int groupId = Random() & 1 ? EC_GROUP_HOBBIES : EC_GROUP_LIFESTYLE; - u16 easyChatWord = sub_811EE90(groupId); + u16 easyChatWord = sub_80BDA40(groupId); CopyEasyChatWord(gStringVar2, easyChatWord); } -bool8 sub_811EF98(u8 additionalPhraseId) +static bool8 IsTrendySayingUnlocked(u8 additionalPhraseId) { int byteOffset = additionalPhraseId / 8; int shift = additionalPhraseId % 8; return (gSaveBlock1Ptr->additionalPhrases[byteOffset] >> shift) & 1; } -void sub_811EFC0(u8 additionalPhraseId) +void EnableRareWord(u8 additionalPhraseId) { if (additionalPhraseId < 33) { @@ -4342,32 +357,32 @@ void sub_811EFC0(u8 additionalPhraseId) } } -u8 sub_811EFF0(void) +static u8 GetNumUnlockedTrendySayings(void) { u8 i; u8 numAdditionalPhrasesUnlocked; for (i = 0, numAdditionalPhrasesUnlocked = 0; i < 33; i++) { - if (sub_811EF98(i)) + if (IsTrendySayingUnlocked(i)) numAdditionalPhrasesUnlocked++; } return numAdditionalPhrasesUnlocked; } -u16 sub_811F01C(void) +static u16 UnlockRandomTrendySaying(void) { u16 i; u16 additionalPhraseId; - u8 numAdditionalPhrasesUnlocked = sub_811EFF0(); + u8 numAdditionalPhrasesUnlocked = GetNumUnlockedTrendySayings(); if (numAdditionalPhrasesUnlocked == 33) return 0xFFFF; additionalPhraseId = Random() % (33 - numAdditionalPhrasesUnlocked); for (i = 0; i < 33; i++) { - if (!sub_811EF98(i)) + if (!IsTrendySayingUnlocked(i)) { if (additionalPhraseId) { @@ -4375,7 +390,7 @@ u16 sub_811F01C(void) } else { - sub_811EFC0(i); + EnableRareWord(i); return EC_WORD(EC_GROUP_TRENDY_SAYING, i); } } @@ -4384,17 +399,17 @@ u16 sub_811F01C(void) return 0xFFFF; } -u16 sub_811F090(void) +static u16 GetRandomUnlockedTrendySaying(void) { u16 i; - u16 additionalPhraseId = sub_811EFF0(); + u16 additionalPhraseId = GetNumUnlockedTrendySayings(); if (additionalPhraseId == 0) return 0xFFFF; additionalPhraseId = Random() % additionalPhraseId; for (i = 0; i < 33; i++) { - if (sub_811EF98(i)) + if (IsTrendySayingUnlocked(i)) { if (additionalPhraseId) additionalPhraseId--; @@ -4406,23 +421,23 @@ u16 sub_811F090(void) return 0xFFFF; } -bool8 sub_811F0F8(void) +static bool8 sub_80BDCA8(void) { return IsNationalPokedexEnabled(); } -u16 sub_811F108(void) +static u16 GetRandomECPokemon(void) { u16 i; u16 numWords; const u16 *species; - u16 index = EasyChat_GetNumWordsInGroup(EC_GROUP_POKEMON); + u16 index = EasyChat_GetNumWordsInGroup(EC_GROUP_POKEMON_2); if (index == 0) return 0xFFFF; index = Random() % index; - species = gEasyChatGroups[EC_GROUP_POKEMON].wordData.valueList; - numWords = gEasyChatGroups[EC_GROUP_POKEMON].numWords; + species = gEasyChatGroups[EC_GROUP_POKEMON_2].wordData.valueList; + numWords = gEasyChatGroups[EC_GROUP_POKEMON_2].numWords; for (i = 0; i < numWords; i++) { u16 dexNum = SpeciesToNationalPokedexNum(*species); @@ -4431,7 +446,7 @@ u16 sub_811F108(void) if (index) index--; else - return EC_WORD(EC_GROUP_POKEMON, *species); + return EC_WORD(EC_GROUP_POKEMON_2, *species); } species++; @@ -4446,16 +461,16 @@ void InitEasyChatPhrases(void) for (i = 0; i < 4; i++) gSaveBlock1Ptr->easyChatProfile[i] = sDefaultProfileWords[i]; - + for (i = 0; i < 6; i++) gSaveBlock1Ptr->easyChatBattleStart[i] = sDefaultBattleStartWords[i]; - - for (i = 0; i < 6; i++) - gSaveBlock1Ptr->easyChatBattleWon[i] = sUnknown_0859E640[i]; - + for (i = 0; i < 6; i++) - gSaveBlock1Ptr->easyChatBattleLost[i] = sUnknown_0859E64C[i]; - + { + gSaveBlock1Ptr->easyChatBattleWon[i] = 0xFFFF; + gSaveBlock1Ptr->easyChatBattleLost[i] = 0xFFFF; + } + for (i = 0; i < MAIL_COUNT; i++) { for (j = 0; j < MAIL_WORDS_COUNT; j++) @@ -4470,62 +485,67 @@ void InitEasyChatPhrases(void) gSaveBlock1Ptr->additionalPhrases[i] = 0; } -bool8 sub_811F28C(void) +void sub_80BDE28(void) +{ + s32 i; + u16 *ptr = sub_8143DA8(); + for (i = 0; i < 4; i++) + ptr[i] = 0xFFFF; +} + +bool8 sub_80BDE44(void) { - sUnknown_0203A120 = Alloc(sizeof(*sUnknown_0203A120)); - if (!sUnknown_0203A120) + gUnknown_20399BC = Alloc(sizeof(*gUnknown_20399BC)); + if (!gUnknown_20399BC) return FALSE; - sub_811F2D4(); - sub_811F46C(); + sub_80BDE88(); + sub_80BDFF8(); return TRUE; } -void sub_811F2B8(void) +void sub_80BDE70(void) { - if (sUnknown_0203A120) - FREE_AND_SET_NULL(sUnknown_0203A120); + if (gUnknown_20399BC != NULL) + Free(gUnknown_20399BC); } -void sub_811F2D4(void) +static void sub_80BDE88(void) { int i; - sUnknown_0203A120->unk0 = 0; + gUnknown_20399BC->unk0 = 0; if (GetNationalPokedexCount(FLAG_GET_SEEN)) - sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = EC_GROUP_POKEMON; - + gUnknown_20399BC->unk2[gUnknown_20399BC->unk0++] = EC_GROUP_POKEMON; + for (i = EC_GROUP_TRAINER; i <= EC_GROUP_ADJECTIVES; i++) - sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = i; - + gUnknown_20399BC->unk2[gUnknown_20399BC->unk0++] = i; + if (FlagGet(FLAG_SYS_GAME_CLEAR)) { - sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = EC_GROUP_EVENTS; - sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = EC_GROUP_MOVE_1; - sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = EC_GROUP_MOVE_2; + gUnknown_20399BC->unk2[gUnknown_20399BC->unk0++] = EC_GROUP_EVENTS; + gUnknown_20399BC->unk2[gUnknown_20399BC->unk0++] = EC_GROUP_MOVE_1; + gUnknown_20399BC->unk2[gUnknown_20399BC->unk0++] = EC_GROUP_MOVE_2; } - if (FlagGet(FLAG_SYS_HIPSTER_MEET)) - sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = EC_GROUP_TRENDY_SAYING; - if (IsNationalPokedexEnabled()) - sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = EC_GROUP_POKEMON_2; + gUnknown_20399BC->unk2[gUnknown_20399BC->unk0++] = EC_GROUP_POKEMON_2; } -u8 sub_811F3AC(void) +u8 sub_80BDF38(void) { - return sUnknown_0203A120->unk0; + return gUnknown_20399BC->unk0; } -u8 sub_811F3B8(u8 index) +u8 sub_80BDF44(u8 index) { - if (index >= sUnknown_0203A120->unk0) + if (index >= gUnknown_20399BC->unk0) return EC_NUM_GROUPS; else - return sUnknown_0203A120->unk2[index]; + return gUnknown_20399BC->unk2[index]; } -u8 *unref_sub_811F3E0(u8 *dest, u8 groupId, u16 totalChars) +static u8 *unref_sub_80BDF6C(u8 *dest, u8 groupId, u16 totalChars) { u16 i; u8 *str = StringCopy(dest, gEasyChatGroupNamePointers[groupId]); @@ -4534,7 +554,7 @@ u8 *unref_sub_811F3E0(u8 *dest, u8 groupId, u16 totalChars) *str = CHAR_SPACE; str++; } - + *str = EOS; return str; } @@ -4553,33 +573,34 @@ u8 *CopyEasyChatWordPadded(u8 *dest, u16 easyChatWord, u16 totalChars) *str = CHAR_SPACE; str++; } - + *str = EOS; return str; } -void sub_811F46C(void) +static void sub_80BDFF8(void) { - int i, j, k; - int numWords; - const u16 *words; - u16 numToProcess; - int index; + static int i; + static int j; + static int k; + static int index; + static int numWords; + static int numToProcess; + static const u16 *words; for (i = 0; i < 27; i++) { numWords = gEasyChatWordsByLetterPointers[i].numWords; words = gEasyChatWordsByLetterPointers[i].words; - sUnknown_0203A120->unk2E[i] = 0; + gUnknown_20399BC->unk2E[i] = 0; index = 0; - for (j = 0; j < numWords; j++) + for (j = 0; j < numWords; ) { if (*words == 0xFFFF) { words++; - numToProcess = *words; - words++; - j += 1 + numToProcess; + numToProcess = *words++; + j += 2; } else { @@ -4588,56 +609,57 @@ void sub_811F46C(void) for (k = 0; k < numToProcess; k++) { - if (sub_811F860(words[k])) + if (sub_80BE440(words[k])) { - sUnknown_0203A120->unk64[i][index++] = words[k]; - sUnknown_0203A120->unk2E[i]++; + gUnknown_20399BC->unk64[i][index++] = words[k]; + gUnknown_20399BC->unk2E[i]++; break; } } words += numToProcess; + j += numToProcess; } } } -void sub_811F548(int arg0, u16 groupId) +void sub_80BE16C(int arg0, u16 groupId) { if (!arg0) - sUnknown_0203A120->unk3BA0 = sub_811F5C4(groupId); + gUnknown_20399BC->unk3BA0 = sub_80BE1E8(groupId); else - sUnknown_0203A120->unk3BA0 = sub_811F6B8(groupId); + gUnknown_20399BC->unk3BA0 = sub_80BE2F8(groupId); } -u16 sub_811F578(u16 arg0) +u16 sub_80BE19C(u16 arg0) { - if (arg0 >= sUnknown_0203A120->unk3BA0) + if (arg0 >= gUnknown_20399BC->unk3BA0) return 0xFFFF; else - return sUnknown_0203A120->unk3984[arg0]; + return gUnknown_20399BC->unk3984[arg0]; } -u16 sub_811F5B0(void) +u16 sub_80BE1D4(void) { - return sUnknown_0203A120->unk3BA0; + return gUnknown_20399BC->unk3BA0; } -u16 sub_811F5C4(u16 groupId) +static u16 sub_80BE1E8(u16 groupId) { - u32 i; - int totalWords; + u16 i; + u16 totalWords; const u16 *list; - const struct EasyChatWordInfo *wordInfo; + const struct EasyChatWordInfo * wordInfo; u16 numWords = gEasyChatGroups[groupId].numWords; - if (groupId == EC_GROUP_POKEMON || groupId == EC_GROUP_POKEMON_2 + if (groupId == EC_GROUP_POKEMON_2 || groupId == EC_GROUP_POKEMON || groupId == EC_GROUP_MOVE_1 || groupId == EC_GROUP_MOVE_2) { list = gEasyChatGroups[groupId].wordData.valueList; for (i = 0, totalWords = 0; i < numWords; i++) { - if (sub_811F764(list[i], groupId)) - sUnknown_0203A120->unk3984[totalWords++] = EC_WORD(groupId, list[i]); + if (sub_80BE3A4(list[i], groupId)) + gUnknown_20399BC->unk3984[totalWords++] = EC_WORD(groupId, list[i]); } return totalWords; @@ -4648,102 +670,74 @@ u16 sub_811F5C4(u16 groupId) for (i = 0, totalWords = 0; i < numWords; i++) { u16 alphabeticalOrder = wordInfo[i].alphabeticalOrder; - if (sub_811F764(alphabeticalOrder, groupId)) - sUnknown_0203A120->unk3984[totalWords++] = EC_WORD(groupId, alphabeticalOrder); + if (sub_80BE3A4(alphabeticalOrder, groupId)) + gUnknown_20399BC->unk3984[totalWords++] = EC_WORD(groupId, alphabeticalOrder); } return totalWords; } } -u16 sub_811F6B8(u16 alphabeticalGroup) +static u16 sub_80BE2F8(u16 alphabeticalGroup) { u16 i; u16 totalWords; - for (i = 0, totalWords = 0; i < sUnknown_0203A120->unk2E[alphabeticalGroup]; i++) - sUnknown_0203A120->unk3984[totalWords++] = sUnknown_0203A120->unk64[alphabeticalGroup][i]; + for (i = 0, totalWords = 0; i < gUnknown_20399BC->unk2E[alphabeticalGroup]; i++) + gUnknown_20399BC->unk3984[totalWords++] = gUnknown_20399BC->unk64[alphabeticalGroup][i]; return totalWords; } -bool8 sub_811F72C(u8 arg0) +static bool8 sub_80BE36C(u8 arg0) { int i; - for (i = 0; i < sUnknown_0203A120->unk0; i++) + for (i = 0; i < gUnknown_20399BC->unk0; i++) { - if (sUnknown_0203A120->unk2[i] == arg0) + if (gUnknown_20399BC->unk2[i] == arg0) return TRUE; } return FALSE; } -bool8 sub_811F764(u16 wordIndex, u8 groupId) +static bool8 sub_80BE3A4(u16 wordIndex, u8 groupId) { switch (groupId) { case EC_GROUP_POKEMON: return GetSetPokedexFlag(SpeciesToNationalPokedexNum(wordIndex), FLAG_GET_SEEN); case EC_GROUP_POKEMON_2: - if (sub_811F838(wordIndex)) - GetSetPokedexFlag(SpeciesToNationalPokedexNum(wordIndex), FLAG_GET_SEEN); + if (sub_80BE418(wordIndex)) + return GetSetPokedexFlag(SpeciesToNationalPokedexNum(wordIndex), FLAG_GET_SEEN); return TRUE; case EC_GROUP_MOVE_1: case EC_GROUP_MOVE_2: return TRUE; - case EC_GROUP_TRENDY_SAYING: - return sub_811EF98(wordIndex); default: return gEasyChatGroups[groupId].wordData.words[wordIndex].enabled; } } -int sub_811F838(u16 species) +static int sub_80BE418(u16 species) { u32 i; - for (i = 0; i < ARRAY_COUNT(sUnknown_0859E658); i++) + for (i = 0; i < ARRAY_COUNT(gUnknown_83EE004); i++) { - if (sUnknown_0859E658[i] == species) + if (gUnknown_83EE004[i] == species) return TRUE; } return FALSE; } -u8 sub_811F860(u16 easyChatWord) +static u8 sub_80BE440(u16 easyChatWord) { u8 groupId = EC_GROUP(easyChatWord); u32 index = EC_INDEX(easyChatWord); - if (!sub_811F72C(groupId)) + if (!sub_80BE36C(groupId)) return FALSE; else - return sub_811F764(index, groupId); -} - -void InitializeEasyChatWordArray(u16 *words, u16 length) -{ - u16 i; - for (i = length - 1; i != 0xFFFF; i--) - *(words++) = 0xFFFF; -} - -void sub_811F8BC(void) -{ - int i; - u16 *words = sub_801B058(); - for (i = 0; i < 4; i++) - words[i] = 0xFFFF; + return sub_80BE3A4(index, groupId); } -bool32 sub_811F8D8(int easyChatWord) -{ - int groupId = EC_GROUP(easyChatWord); - int mask = 0x7F; - int index = EC_INDEX(easyChatWord); - if (!sub_811EA28(groupId & mask)) - return FALSE; - else - return sub_811F764(index, groupId & mask); -} -*/ diff --git a/src/mail.c b/src/mail.c index a9cb66683..7d5e33944 100644 --- a/src/mail.c +++ b/src/mail.c @@ -70,8 +70,8 @@ struct MailViewResources { u8 monIconSpriteId; u8 unused; u8 mailArrangementType; - void (*copyEasyChatWord)(u8 *dest, u16 word); - void (*convertEasyChatWordsToString)(u8 *dest, const u16 *src, u16 length1, u16 length2); + u8 *(*copyEasyChatWord)(u8 *dest, u16 word); + u8 *(*convertEasyChatWordsToString)(u8 *dest, const u16 *src, u16 length1, u16 length2); const struct MailAttrStruct * messageLayout; u16 bg1TilemapBuffer[BG_SCREEN_SIZE]; u16 bg2TilemapBuffer[BG_SCREEN_SIZE]; diff --git a/src/mevent.c b/src/mevent.c index dc8df05d0..903166e7e 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -772,7 +772,7 @@ void sub_81442CC(struct MEventStruct_Unk1442CC * data) CopyTrainerId(data->unk_4C, gSaveBlock2Ptr->playerTrainerId); StringCopy(data->unk_45, gSaveBlock2Ptr->playerName); for (i = 0; i < 6; i++) - data->unk_50[i] = gSaveBlock1Ptr->unk2CA0[i]; + data->unk_50[i] = gSaveBlock1Ptr->easyChatProfile[i]; memcpy(data->unk_5C, RomHeaderGameCode, 4); data->unk_60 = RomHeaderSoftwareVersion; } diff --git a/src/trade_scene.c b/src/trade_scene.c index 94fdadd5d..7b738aa52 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -22,6 +22,7 @@ #include "script.h" #include "event_data.h" #include "string_util.h" +#include "mail.h" #include "mail_data.h" #include "pokeball.h" #include "evolution_scene.h" @@ -2484,7 +2485,7 @@ static void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade) { int i; - for (i = 0; i < 9; i++) + for (i = 0; i < MAIL_WORDS_COUNT; i++) mail->words[i] = sInGameTradeMailMessages[inGameTrade->mailNum][i]; StringCopy(mail->playerName, inGameTrade->otName); mail->trainerId[0] = inGameTrade->otId >> 24; diff --git a/sym_bss.txt b/sym_bss.txt index 1f9f5b3d8..06502497e 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -68,26 +68,8 @@ gUnknown_3000FC8: @ 3000FC8 gUnknown_3000FE8: @ 3000FE8 .space 0x184 -gUnknown_300116C: @ 300116C - .space 0x4 - -gUnknown_3001170: @ 3001170 - .space 0x4 - -gUnknown_3001174: @ 3001174 - .space 0x4 - -gUnknown_3001178: @ 3001178 - .space 0x4 - -gUnknown_300117C: @ 300117C - .space 0x4 - -gUnknown_3001180: @ 3001180 - .space 0x4 - -gUnknown_3001184: @ 3001184 - .space 0x4 + .align 2 + .include "src/easy_chat.o" gUnknown_3001188: @ 3001188 .space 0x8 diff --git a/sym_ewram.txt b/sym_ewram.txt index 51501e162..5d5cbaaeb 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -362,17 +362,16 @@ gUnknown_203998C: @ 203998C gUnknown_203999C: @ 203999C .space 0x8 + .align 2 .include "src/dragon.o" + .align 2 .include "src/battle_anim_utility_funcs.o" + .align 2 .include "src/battle_intro.o" - .align 2 -gUnknown_20399BC: @ 20399BC - .space 0x4 - -gUnknown_20399C0: @ 20399C0 - .space 0x4 - + .include "src/easy_chat.o" + .align 2 + .include "asm/mon_markings.o" @ TODO: Move to src .align 2 .include "src/mail.o" .align 2 |