diff options
-rw-r--r-- | asm/easy_chat_2.s | 7654 | ||||
-rw-r--r-- | data/data_8479668.s | 6 | ||||
-rw-r--r-- | data/easy_chat_2.s | 296 | ||||
-rw-r--r-- | data/scripts/mystery_event_club.inc | 2 | ||||
-rw-r--r-- | include/constants/easy_chat.h | 4 | ||||
-rw-r--r-- | include/data_8479668.h | 5 | ||||
-rw-r--r-- | include/easy_chat.h | 27 | ||||
-rw-r--r-- | include/graphics.h | 9 | ||||
-rw-r--r-- | include/overworld.h | 1 | ||||
-rw-r--r-- | include/strings.h | 37 | ||||
-rw-r--r-- | ld_script.txt | 6 | ||||
-rw-r--r-- | src/clear_save_data_screen.c | 4 | ||||
-rw-r--r-- | src/easy_chat_2.c | 1363 | ||||
-rw-r--r-- | src/easy_chat_3.c | 2298 | ||||
-rw-r--r-- | src/graphics.c | 12 | ||||
-rw-r--r-- | sym_ewram.txt | 11 |
16 files changed, 3764 insertions, 7971 deletions
diff --git a/asm/easy_chat_2.s b/asm/easy_chat_2.s deleted file mode 100644 index 40b0eeb1f..000000000 --- a/asm/easy_chat_2.s +++ /dev/null @@ -1,7654 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start DoEasyChatScreen -DoEasyChatScreen: @ 80FEBAC - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r5, r0, 0 - adds r6, r1, 0 - mov r8, r2 - lsls r5, 24 - lsrs r5, 24 - bl ResetTasks - ldr r0, _080FEC00 @ =sub_80FEC54 - movs r1, 0 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _080FEC04 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - strh r5, [r0, 0xA] - adds r0, r4, 0 - movs r1, 0x2 - adds r2, r6, 0 - bl SetWordTaskArg - adds r0, r4, 0 - movs r1, 0x4 - mov r2, r8 - bl SetWordTaskArg - ldr r0, _080FEC08 @ =sub_80FEC0C - bl SetMainCallback2 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FEC00: .4byte sub_80FEC54 -_080FEC04: .4byte gTasks -_080FEC08: .4byte sub_80FEC0C - thumb_func_end DoEasyChatScreen - - thumb_func_start sub_80FEC0C -sub_80FEC0C: @ 80FEC0C - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_80FEC0C - - thumb_func_start sub_80FEC24 -sub_80FEC24: @ 80FEC24 - push {lr} - bl TransferPlttBuffer - bl LoadOam - bl ProcessSpriteCopyRequests - pop {r0} - bx r0 - thumb_func_end sub_80FEC24 - - thumb_func_start sub_80FEC38 -sub_80FEC38: @ 80FEC38 - lsls r0, 24 - lsrs r0, 24 - ldr r3, _080FEC50 @ =gTasks - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 3 - adds r2, r3 - str r1, [r2] - movs r0, 0 - strh r0, [r2, 0x8] - bx lr - .align 2, 0 -_080FEC50: .4byte gTasks - thumb_func_end sub_80FEC38 - - thumb_func_start sub_80FEC54 -sub_80FEC54: @ 80FEC54 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsUpdateLinkStateCBActive - cmp r0, 0 - bne _080FEC70 -_080FEC62: - adds r0, r4, 0 - bl sub_80FED80 - lsls r0, 24 - cmp r0, 0 - bne _080FEC62 - b _080FEC7E -_080FEC70: - adds r0, r4, 0 - bl sub_80FED80 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080FEC86 -_080FEC7E: - ldr r1, _080FEC8C @ =sub_80FEC90 - adds r0, r4, 0 - bl sub_80FEC38 -_080FEC86: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FEC8C: .4byte sub_80FEC90 - thumb_func_end sub_80FEC54 - - thumb_func_start sub_80FEC90 -sub_80FEC90: @ 80FEC90 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080FECB4 @ =gTasks+0x8 - adds r6, r0, r1 - movs r0, 0 - ldrsh r5, [r6, r0] - cmp r5, 0x1 - beq _080FECEC - cmp r5, 0x1 - bgt _080FECB8 - cmp r5, 0 - beq _080FECC2 - b _080FED6E - .align 2, 0 -_080FECB4: .4byte gTasks+0x8 -_080FECB8: - cmp r5, 0x2 - beq _080FED28 - cmp r5, 0x3 - beq _080FED38 - b _080FED6E -_080FECC2: - ldr r0, _080FECE8 @ =sub_80FEC24 - bl SetVBlankCallback - movs r4, 0x1 - negs r4, r4 - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - str r5, [sp] - adds r0, r4, 0 - adds r1, r4, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _080FED20 - .align 2, 0 -_080FECE8: .4byte sub_80FEC24 -_080FECEC: - bl sub_80FF028 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x17 - bne _080FED10 - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - movs r0, 0x3 - strh r0, [r6] - b _080FED6E -_080FED10: - cmp r4, 0 - beq _080FED6E - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl sub_8100134 -_080FED20: - ldrh r0, [r6] - adds r0, 0x1 - strh r0, [r6] - b _080FED6E -_080FED28: - bl sub_810014C - lsls r0, 24 - cmp r0, 0 - bne _080FED6E - movs r0, 0x1 - strh r0, [r6] - b _080FED6E -_080FED38: - ldr r0, _080FED78 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080FED6E - movs r1, 0x2 - ldrsh r0, [r6, r1] - cmp r0, 0xE - bne _080FED50 - bl sub_80FEF4C -_080FED50: - movs r1, 0x2 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080FED62 - ldr r0, _080FED7C @ =0x0000082d - bl FlagSet - bl sub_80FEF2C -_080FED62: - adds r0, r4, 0 - movs r1, 0x4 - bl GetWordTaskArg - bl sub_80FEE24 -_080FED6E: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FED78: .4byte gPaletteFade -_080FED7C: .4byte 0x0000082d - thumb_func_end sub_80FEC90 - - thumb_func_start sub_80FED80 -sub_80FED80: @ 80FED80 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080FEDA4 @ =gTasks+0x8 - adds r6, r0, r1 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0x4 - bhi _080FEE12 - lsls r0, 2 - ldr r1, _080FEDA8 @ =_080FEDAC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FEDA4: .4byte gTasks+0x8 -_080FEDA8: .4byte _080FEDAC - .align 2, 0 -_080FEDAC: - .4byte _080FEDC0 - .4byte _080FEDD4 - .4byte _080FEDDA - .4byte _080FEDEE - .4byte _080FEE06 -_080FEDC0: - movs r0, 0 - bl SetVBlankCallback - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetPaletteFade - b _080FEE16 -_080FEDD4: - bl InitEasyChatSelection - b _080FEDF2 -_080FEDDA: - ldrb r4, [r6, 0x2] - adds r0, r5, 0 - movs r1, 0x2 - bl GetWordTaskArg - adds r1, r0, 0 - adds r0, r4, 0 - bl sub_80FEF6C - b _080FEDF2 -_080FEDEE: - bl sub_80FFF80 -_080FEDF2: - lsls r0, 24 - cmp r0, 0 - bne _080FEE16 - adds r0, r5, 0 - movs r1, 0x4 - bl GetWordTaskArg - bl sub_80FEE24 - b _080FEE16 -_080FEE06: - bl sub_80FFF98 - lsls r0, 24 - cmp r0, 0 - beq _080FEE16 - b _080FEE1C -_080FEE12: - movs r0, 0 - b _080FEE1E -_080FEE16: - ldrh r0, [r6] - adds r0, 0x1 - strh r0, [r6] -_080FEE1C: - movs r0, 0x1 -_080FEE1E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80FED80 - - thumb_func_start sub_80FEE24 -sub_80FEE24: @ 80FEE24 - push {r4,lr} - adds r4, r0, 0 - bl DestroyEasyChatSelectionData - bl sub_80FF010 - bl sub_810011C - bl FreeAllWindowBuffers - adds r0, r4, 0 - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80FEE24 - - thumb_func_start ShowEasyChatScreen -ShowEasyChatScreen: @ 80FEE44 - push {lr} - ldr r0, _080FEE58 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0xE - bhi _080FEF12 - lsls r0, 2 - ldr r1, _080FEE5C @ =_080FEE60 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FEE58: .4byte gSpecialVar_0x8004 -_080FEE5C: .4byte _080FEE60 - .align 2, 0 -_080FEE60: - .4byte _080FEE9C - .4byte _080FEEB0 - .4byte _080FEEC4 - .4byte _080FEED8 - .4byte _080FEEF4 - .4byte _080FEF12 - .4byte _080FEF12 - .4byte _080FEF12 - .4byte _080FEF12 - .4byte _080FEF12 - .4byte _080FEF12 - .4byte _080FEF12 - .4byte _080FEF12 - .4byte _080FEF12 - .4byte _080FEEEC -_080FEE9C: - ldr r0, _080FEEA8 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r2, _080FEEAC @ =0x00002ca0 - adds r1, r0, r2 - b _080FEF08 - .align 2, 0 -_080FEEA8: .4byte gSaveBlock1Ptr -_080FEEAC: .4byte 0x00002ca0 -_080FEEB0: - ldr r0, _080FEEBC @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r2, _080FEEC0 @ =0x00002cac - adds r1, r0, r2 - b _080FEF08 - .align 2, 0 -_080FEEBC: .4byte gSaveBlock1Ptr -_080FEEC0: .4byte 0x00002cac -_080FEEC4: - ldr r0, _080FEED0 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r2, _080FEED4 @ =0x00002cb8 - adds r1, r0, r2 - b _080FEF08 - .align 2, 0 -_080FEED0: .4byte gSaveBlock1Ptr -_080FEED4: .4byte 0x00002cb8 -_080FEED8: - ldr r0, _080FEEE4 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r2, _080FEEE8 @ =0x00002cc4 - adds r1, r0, r2 - b _080FEF08 - .align 2, 0 -_080FEEE4: .4byte gSaveBlock1Ptr -_080FEEE8: .4byte 0x00002cc4 -_080FEEEC: - bl GetMEventProfileECWordsMaybe - adds r1, r0, 0 - b _080FEF08 -_080FEEF4: - ldr r2, _080FEF18 @ =gSaveBlock1Ptr - ldr r0, _080FEF1C @ =gSpecialVar_0x8005 - ldrh r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080FEF20 @ =0x00002cd0 - adds r0, r1 - ldr r1, [r2] - adds r1, r0 -_080FEF08: - ldr r0, _080FEF24 @ =gSpecialVar_0x8004 - ldrb r0, [r0] - ldr r2, _080FEF28 @ =sub_80568C4 - bl DoEasyChatScreen -_080FEF12: - pop {r0} - bx r0 - .align 2, 0 -_080FEF18: .4byte gSaveBlock1Ptr -_080FEF1C: .4byte gSpecialVar_0x8005 -_080FEF20: .4byte 0x00002cd0 -_080FEF24: .4byte gSpecialVar_0x8004 -_080FEF28: .4byte sub_80568C4 - thumb_func_end ShowEasyChatScreen - - thumb_func_start sub_80FEF2C -sub_80FEF2C: @ 80FEF2C - push {r4,lr} - ldr r4, _080FEF44 @ =gSpecialVar_0x8004 - ldr r0, _080FEF48 @ =gUnknown_843F29C - movs r1, 0x4 - bl sub_80FFEDC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FEF44: .4byte gSpecialVar_0x8004 -_080FEF48: .4byte gUnknown_843F29C - thumb_func_end sub_80FEF2C - - thumb_func_start sub_80FEF4C -sub_80FEF4C: @ 80FEF4C - push {r4,lr} - ldr r4, _080FEF64 @ =gSpecialVar_0x8004 - ldr r0, _080FEF68 @ =gUnknown_843F2A4 - movs r1, 0x4 - bl sub_80FFEDC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FEF64: .4byte gSpecialVar_0x8004 -_080FEF68: .4byte gUnknown_843F2A4 - thumb_func_end sub_80FEF4C - - thumb_func_start sub_80FEF6C -sub_80FEF6C: @ 80FEF6C - push {r4-r6,lr} - adds r6, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _080FEF88 @ =gUnknown_203ACE8 - movs r0, 0x2C - bl Alloc - str r0, [r4] - cmp r0, 0 - bne _080FEF8C - movs r0, 0 - b _080FF006 - .align 2, 0 -_080FEF88: .4byte gUnknown_203ACE8 -_080FEF8C: - movs r1, 0 - strb r5, [r0] - ldr r0, [r4] - str r6, [r0, 0x14] - strb r1, [r0, 0x4] - ldr r0, [r4] - strb r1, [r0, 0x5] - ldr r0, [r4] - strb r1, [r0, 0x6] - ldr r0, [r4] - strb r1, [r0, 0x9] - adds r0, r5, 0 - bl sub_80FFF1C - lsls r0, 24 - lsrs r0, 24 - ldr r3, [r4] - ldr r2, _080FF00C @ =gUnknown_843F2AC - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldrb r2, [r1, 0x1] - strb r2, [r3, 0x2] - ldr r2, [r4] - ldrb r1, [r1, 0x2] - strb r1, [r2, 0x3] - ldr r1, [r4] - ldrb r3, [r1, 0x2] - ldrb r2, [r1, 0x3] - adds r5, r3, 0 - muls r5, r2 - adds r2, r5, 0 - strb r2, [r1, 0x7] - ldr r1, [r4] - strb r0, [r1, 0x1] - ldr r1, [r4] - ldrb r0, [r1, 0x7] - cmp r0, 0x9 - bls _080FEFE0 - movs r0, 0x9 - strb r0, [r1, 0x7] -_080FEFE0: - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x18 - ldrb r2, [r0, 0x7] - adds r0, r6, 0 - bl CpuSet - bl GetNumDisplayableGroups - ldr r2, [r4] - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - adds r0, 0x1 - strb r0, [r2, 0xD] - movs r0, 0x1 -_080FF006: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080FF00C: .4byte gUnknown_843F2AC - thumb_func_end sub_80FEF6C - - thumb_func_start sub_80FF010 -sub_80FF010: @ 80FF010 - push {lr} - ldr r0, _080FF024 @ =gUnknown_203ACE8 - ldr r0, [r0] - cmp r0, 0 - beq _080FF01E - bl Free -_080FF01E: - pop {r0} - bx r0 - .align 2, 0 -_080FF024: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FF010 - - thumb_func_start sub_80FF028 -sub_80FF028: @ 80FF028 - push {lr} - ldr r0, _080FF040 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r0, 0x6 - bhi _080FF092 - lsls r0, 2 - ldr r1, _080FF044 @ =_080FF048 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FF040: .4byte gUnknown_203ACE8 -_080FF044: .4byte _080FF048 - .align 2, 0 -_080FF048: - .4byte _080FF064 - .4byte _080FF06A - .4byte _080FF070 - .4byte _080FF076 - .4byte _080FF07C - .4byte _080FF082 - .4byte _080FF088 -_080FF064: - bl sub_80FF098 - b _080FF08C -_080FF06A: - bl sub_80FF20C - b _080FF08C -_080FF070: - bl sub_80FF360 - b _080FF08C -_080FF076: - bl sub_80FF41C - b _080FF08C -_080FF07C: - bl sub_80FF4A8 - b _080FF08C -_080FF082: - bl sub_80FF544 - b _080FF08C -_080FF088: - bl sub_80FF4F0 -_080FF08C: - lsls r0, 16 - lsrs r0, 16 - b _080FF094 -_080FF092: - movs r0, 0 -_080FF094: - pop {r1} - bx r1 - thumb_func_end sub_80FF028 - - thumb_func_start sub_80FF098 -sub_80FF098: @ 80FF098 - push {r4-r7,lr} - ldr r0, _080FF0C0 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080FF0E4 - ldr r1, _080FF0C4 @ =gUnknown_203ACE8 - ldr r3, [r1] - movs r2, 0 - movs r0, 0x2 - strb r0, [r3, 0x4] - ldr r0, [r1] - strb r2, [r0, 0xA] - ldr r0, [r1] - strb r2, [r0, 0xB] - ldr r0, [r1] - strb r2, [r0, 0xC] - movs r0, 0x9 - b _080FF1FC - .align 2, 0 -_080FF0C0: .4byte gMain -_080FF0C4: .4byte gUnknown_203ACE8 -_080FF0C8: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _080FF194 - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080FF184 - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _080FF174 - movs r0, 0 - b _080FF1FC -_080FF0E4: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _080FF1A4 - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _080FF1AA - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080FF0C8 - ldr r2, _080FF16C @ =gUnknown_203ACE8 - ldr r1, [r2] - ldrb r0, [r1, 0x6] - subs r0, 0x1 -_080FF104: - strb r0, [r1, 0x6] -_080FF106: - adds r7, r2, 0 - adds r4, r7, 0 - ldr r2, [r4] - movs r0, 0x6 - ldrsb r0, [r2, r0] - ldr r6, _080FF170 @ =gUnknown_843F2AC - cmp r0, 0 - bge _080FF124 - ldrb r0, [r2, 0x1] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r6 - ldrb r0, [r1, 0x2] - strb r0, [r2, 0x6] -_080FF124: - ldr r3, [r4] - movs r2, 0x6 - ldrsb r2, [r3, r2] - adds r5, r6, 0 - ldrb r1, [r3, 0x1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r5 - ldrb r0, [r0, 0x2] - cmp r2, r0 - ble _080FF140 - movs r0, 0 - strb r0, [r3, 0x6] -_080FF140: - ldr r3, [r4] - movs r2, 0x6 - ldrsb r2, [r3, r2] - ldrb r1, [r3, 0x1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r1, r0, r5 - ldrb r0, [r1, 0x2] - cmp r2, r0 - bne _080FF1B4 - movs r0, 0x5 - ldrsb r0, [r3, r0] - cmp r0, 0x2 - ble _080FF162 - movs r0, 0x2 - strb r0, [r3, 0x5] -_080FF162: - ldr r1, [r4] - movs r0, 0x1 - strb r0, [r1, 0x4] - movs r0, 0x3 - b _080FF1FC - .align 2, 0 -_080FF16C: .4byte gUnknown_203ACE8 -_080FF170: .4byte gUnknown_843F2AC -_080FF174: - ldr r2, _080FF180 @ =gUnknown_203ACE8 - ldr r1, [r2] - ldrb r0, [r1, 0x5] - adds r0, 0x1 - strb r0, [r1, 0x5] - b _080FF106 - .align 2, 0 -_080FF180: .4byte gUnknown_203ACE8 -_080FF184: - ldr r2, _080FF190 @ =gUnknown_203ACE8 - ldr r1, [r2] - ldrb r0, [r1, 0x6] - adds r0, 0x1 - b _080FF104 - .align 2, 0 -_080FF190: .4byte gUnknown_203ACE8 -_080FF194: - ldr r2, _080FF1A0 @ =gUnknown_203ACE8 - ldr r1, [r2] - ldrb r0, [r1, 0x5] - subs r0, 0x1 - strb r0, [r1, 0x5] - b _080FF106 - .align 2, 0 -_080FF1A0: .4byte gUnknown_203ACE8 -_080FF1A4: - bl sub_80FF590 - b _080FF1AE -_080FF1AA: - bl sub_80FF5C0 -_080FF1AE: - lsls r0, 16 - lsrs r0, 16 - b _080FF1FC -_080FF1B4: - movs r0, 0x5 - ldrsb r0, [r3, r0] - cmp r0, 0 - bge _080FF1C2 - ldrb r0, [r1, 0x1] - subs r0, 0x1 - strb r0, [r3, 0x5] -_080FF1C2: - ldr r3, [r4] - movs r2, 0x5 - ldrsb r2, [r3, r2] - ldrb r1, [r3, 0x1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - ldrb r0, [r0, 0x1] - cmp r2, r0 - blt _080FF1DC - movs r0, 0 - strb r0, [r3, 0x5] -_080FF1DC: - bl sub_80FFCE0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _080FF1FA - ldr r2, [r7] - ldr r0, [r2, 0x4] - ldr r1, _080FF204 @ =0x00ffff00 - ands r0, r1 - ldr r1, _080FF208 @ =0x00040100 - cmp r0, r1 - bne _080FF1FA - movs r0, 0 - strb r0, [r2, 0x5] -_080FF1FA: - movs r0, 0x2 -_080FF1FC: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080FF204: .4byte 0x00ffff00 -_080FF208: .4byte 0x00040100 - thumb_func_end sub_80FF098 - - thumb_func_start sub_80FF20C -sub_80FF20C: @ 80FF20C - push {r4-r6,lr} - ldr r2, _080FF22C @ =gMain - ldrh r1, [r2, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080FF270 - ldr r0, _080FF230 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0, 0x5] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - beq _080FF26A - b _080FF254 - .align 2, 0 -_080FF22C: .4byte gMain -_080FF230: .4byte gUnknown_203ACE8 -_080FF234: - movs r0, 0x20 - ands r0, r2 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0 - bne _080FF2F8 - movs r0, 0x80 - ands r0, r2 - cmp r0, 0 - bne _080FF2E8 - movs r0, 0x10 - ands r0, r2 - cmp r0, 0 - bne _080FF2D8 - movs r0, 0 - b _080FF34E -_080FF254: - cmp r0, 0x1 - bgt _080FF25E - cmp r0, 0 - beq _080FF264 - b _080FF270 -_080FF25E: - cmp r0, 0x2 - beq _080FF30E - b _080FF270 -_080FF264: - bl sub_80FF5A8 - b _080FF312 -_080FF26A: - bl sub_80FF590 - b _080FF312 -_080FF270: - ldrh r2, [r2, 0x2E] - movs r0, 0x2 - ands r0, r2 - cmp r0, 0 - bne _080FF308 - movs r0, 0x8 - ands r0, r2 - cmp r0, 0 - bne _080FF30E - movs r0, 0x40 - ands r0, r2 - cmp r0, 0 - beq _080FF234 - ldr r2, _080FF2D0 @ =gUnknown_203ACE8 - ldr r1, [r2] - ldrb r0, [r1, 0x6] - subs r0, 0x1 - strb r0, [r1, 0x6] -_080FF294: - adds r6, r2, 0 -_080FF296: - adds r5, r6, 0 - ldr r4, [r5] - movs r3, 0x6 - ldrsb r3, [r4, r3] - ldr r2, _080FF2D4 @ =gUnknown_843F2AC - ldrb r1, [r4, 0x1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r1, r0, r2 - ldrb r0, [r1, 0x2] - cmp r3, r0 - bne _080FF318 - movs r0, 0x5 - ldrsb r0, [r4, r0] - cmp r0, 0 - bge _080FF2BC - movs r0, 0x2 - strb r0, [r4, 0x5] -_080FF2BC: - ldr r1, [r5] - movs r0, 0x5 - ldrsb r0, [r1, r0] - cmp r0, 0x2 - ble _080FF2CA - movs r0, 0 - strb r0, [r1, 0x5] -_080FF2CA: - movs r0, 0x3 - b _080FF34E - .align 2, 0 -_080FF2D0: .4byte gUnknown_203ACE8 -_080FF2D4: .4byte gUnknown_843F2AC -_080FF2D8: - ldr r2, _080FF2E4 @ =gUnknown_203ACE8 - ldr r1, [r2] - ldrb r0, [r1, 0x5] - adds r0, 0x1 - strb r0, [r1, 0x5] - b _080FF294 - .align 2, 0 -_080FF2E4: .4byte gUnknown_203ACE8 -_080FF2E8: - ldr r1, _080FF2F4 @ =gUnknown_203ACE8 - ldr r0, [r1] - strb r3, [r0, 0x6] - adds r6, r1, 0 - b _080FF296 - .align 2, 0 -_080FF2F4: .4byte gUnknown_203ACE8 -_080FF2F8: - ldr r2, _080FF304 @ =gUnknown_203ACE8 - ldr r1, [r2] - ldrb r0, [r1, 0x5] - subs r0, 0x1 - strb r0, [r1, 0x5] - b _080FF294 - .align 2, 0 -_080FF304: .4byte gUnknown_203ACE8 -_080FF308: - bl sub_80FF590 - b _080FF312 -_080FF30E: - bl sub_80FF5C0 -_080FF312: - lsls r0, 16 - lsrs r0, 16 - b _080FF34E -_080FF318: - movs r0, 0x5 - ldrsb r0, [r4, r0] - ldrb r1, [r1, 0x1] - cmp r0, r1 - blt _080FF326 - subs r0, r1, 0x1 - strb r0, [r4, 0x5] -_080FF326: - bl sub_80FFCE0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _080FF344 - ldr r2, [r6] - ldr r0, [r2, 0x4] - ldr r1, _080FF354 @ =0x00ffff00 - ands r0, r1 - ldr r1, _080FF358 @ =0x00040100 - cmp r0, r1 - bne _080FF344 - movs r0, 0 - strb r0, [r2, 0x5] -_080FF344: - ldr r0, _080FF35C @ =gUnknown_203ACE8 - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x4] - movs r0, 0x2 -_080FF34E: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080FF354: .4byte 0x00ffff00 -_080FF358: .4byte 0x00040100 -_080FF35C: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FF20C - - thumb_func_start sub_80FF360 -sub_80FF360: @ 80FF360 - push {lr} - ldr r1, _080FF378 @ =gMain - ldrh r2, [r1, 0x2E] - movs r0, 0x2 - ands r0, r2 - adds r3, r1, 0 - cmp r0, 0 - beq _080FF37C - bl sub_80FF678 - b _080FF412 - .align 2, 0 -_080FF378: .4byte gMain -_080FF37C: - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - beq _080FF3CA - ldr r0, _080FF39C @ =gUnknown_203ACE8 - ldr r2, [r0] - movs r1, 0xA - ldrsb r1, [r2, r1] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080FF3A0 - bl sub_80FF5FC - b _080FF412 - .align 2, 0 -_080FF39C: .4byte gUnknown_203ACE8 -_080FF3A0: - movs r0, 0xB - ldrsb r0, [r2, r0] - cmp r0, 0x1 - beq _080FF3BE - cmp r0, 0x1 - bgt _080FF3B2 - cmp r0, 0 - beq _080FF3B8 - b _080FF3CA -_080FF3B2: - cmp r0, 0x2 - beq _080FF3C4 - b _080FF3CA -_080FF3B8: - bl sub_80FF688 - b _080FF412 -_080FF3BE: - bl sub_80FF6B4 - b _080FF412 -_080FF3C4: - bl sub_80FF678 - b _080FF412 -_080FF3CA: - ldrh r1, [r3, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080FF3DA - bl sub_80FF688 - b _080FF412 -_080FF3DA: - ldrh r1, [r3, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080FF3E8 - movs r0, 0x2 - b _080FF40E -_080FF3E8: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080FF3F4 - movs r0, 0x3 - b _080FF40E -_080FF3F4: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080FF400 - movs r0, 0x1 - b _080FF40E -_080FF400: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _080FF40C - movs r0, 0 - b _080FF416 -_080FF40C: - movs r0, 0 -_080FF40E: - bl sub_80FF7CC -_080FF412: - lsls r0, 16 - lsrs r0, 16 -_080FF416: - pop {r1} - bx r1 - thumb_func_end sub_80FF360 - - thumb_func_start sub_80FF41C -sub_80FF41C: @ 80FF41C - push {lr} - ldr r2, _080FF438 @ =gMain - ldrh r1, [r2, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080FF440 - ldr r0, _080FF43C @ =gUnknown_203ACE8 - ldr r1, [r0] - movs r0, 0x2 - strb r0, [r1, 0x4] - movs r0, 0xD - b _080FF4A2 - .align 2, 0 -_080FF438: .4byte gMain -_080FF43C: .4byte gUnknown_203ACE8 -_080FF440: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080FF44E - bl sub_80FF6C8 - b _080FF49E -_080FF44E: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080FF45A - movs r0, 0x4 - b _080FF49A -_080FF45A: - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080FF466 - movs r0, 0x5 - b _080FF49A -_080FF466: - ldrh r1, [r2, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080FF474 - movs r0, 0x2 - b _080FF49A -_080FF474: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080FF480 - movs r0, 0x3 - b _080FF49A -_080FF480: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080FF48C - movs r0, 0x1 - b _080FF49A -_080FF48C: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _080FF498 - movs r0, 0 - b _080FF4A2 -_080FF498: - movs r0, 0 -_080FF49A: - bl sub_80FFA38 -_080FF49E: - lsls r0, 16 - lsrs r0, 16 -_080FF4A2: - pop {r1} - bx r1 - thumb_func_end sub_80FF41C - - thumb_func_start sub_80FF4A8 -sub_80FF4A8: @ 80FF4A8 - push {lr} - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080FF4DC - cmp r1, 0 - bgt _080FF4C4 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080FF4C8 - b _080FF4E8 -_080FF4C4: - cmp r1, 0x1 - bne _080FF4E8 -_080FF4C8: - bl sub_80FF5F0 - ldr r1, _080FF4D8 @ =gUnknown_203ACE8 - ldr r1, [r1] - strb r0, [r1, 0x4] - movs r0, 0x7 - b _080FF4EA - .align 2, 0 -_080FF4D8: .4byte gUnknown_203ACE8 -_080FF4DC: - ldr r0, _080FF4E4 @ =gSpecialVar_Result - strh r1, [r0] - movs r0, 0x17 - b _080FF4EA - .align 2, 0 -_080FF4E4: .4byte gSpecialVar_Result -_080FF4E8: - movs r0, 0 -_080FF4EA: - pop {r1} - bx r1 - thumb_func_end sub_80FF4A8 - - thumb_func_start sub_80FF4F0 -sub_80FF4F0: @ 80FF4F0 - push {r4,lr} - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080FF524 - cmp r1, 0 - bgt _080FF50C - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080FF510 - b _080FF53C -_080FF50C: - cmp r1, 0x1 - bne _080FF53C -_080FF510: - bl sub_80FF5F0 - ldr r1, _080FF520 @ =gUnknown_203ACE8 - ldr r1, [r1] - strb r0, [r1, 0x4] - movs r0, 0x7 - b _080FF53E - .align 2, 0 -_080FF520: .4byte gUnknown_203ACE8 -_080FF524: - ldr r4, _080FF538 @ =gSpecialVar_Result - bl sub_80FF78C - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4] - bl sub_80FF6F0 - movs r0, 0x17 - b _080FF53E - .align 2, 0 -_080FF538: .4byte gSpecialVar_Result -_080FF53C: - movs r0, 0 -_080FF53E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80FF4F0 - - thumb_func_start sub_80FF544 -sub_80FF544: @ 80FF544 - push {lr} - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080FF574 - cmp r1, 0 - bgt _080FF560 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080FF564 - b _080FF588 -_080FF560: - cmp r1, 0x1 - bne _080FF588 -_080FF564: - ldr r0, _080FF570 @ =gUnknown_203ACE8 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x4] - movs r0, 0x7 - b _080FF58A - .align 2, 0 -_080FF570: .4byte gUnknown_203ACE8 -_080FF574: - bl sub_80FF728 - ldr r0, _080FF584 @ =gUnknown_203ACE8 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x4] - movs r0, 0x8 - b _080FF58A - .align 2, 0 -_080FF584: .4byte gUnknown_203ACE8 -_080FF588: - movs r0, 0 -_080FF58A: - pop {r1} - bx r1 - thumb_func_end sub_80FF544 - - thumb_func_start sub_80FF590 -sub_80FF590: @ 80FF590 - ldr r2, _080FF5A4 @ =gUnknown_203ACE8 - ldr r1, [r2] - ldrb r0, [r1, 0x4] - strb r0, [r1, 0x8] - ldr r1, [r2] - movs r0, 0x4 - strb r0, [r1, 0x4] - movs r0, 0x5 - bx lr - .align 2, 0 -_080FF5A4: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FF590 - - thumb_func_start sub_80FF5A8 -sub_80FF5A8: @ 80FF5A8 - ldr r2, _080FF5BC @ =gUnknown_203ACE8 - ldr r1, [r2] - ldrb r0, [r1, 0x4] - strb r0, [r1, 0x8] - ldr r1, [r2] - movs r0, 0x5 - strb r0, [r1, 0x4] - movs r0, 0x4 - bx lr - .align 2, 0 -_080FF5BC: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FF5A8 - - thumb_func_start sub_80FF5C0 -sub_80FF5C0: @ 80FF5C0 - push {r4,lr} - ldr r4, _080FF5DC @ =gUnknown_203ACE8 - ldr r0, [r4] - ldrb r1, [r0, 0x4] - strb r1, [r0, 0x8] - bl sub_80FFF48 - cmp r0, 0 - bne _080FF5E0 - ldr r1, [r4] - movs r0, 0x6 - strb r0, [r1, 0x4] - b _080FF5E8 - .align 2, 0 -_080FF5DC: .4byte gUnknown_203ACE8 -_080FF5E0: - ldr r1, [r4] - movs r0, 0x4 - strb r0, [r1, 0x4] - movs r0, 0x5 -_080FF5E8: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80FF5C0 - - thumb_func_start sub_80FF5F0 -sub_80FF5F0: @ 80FF5F0 - ldr r0, _080FF5F8 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0, 0x8] - bx lr - .align 2, 0 -_080FF5F8: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FF5F0 - - thumb_func_start sub_80FF5FC -sub_80FF5FC: @ 80FF5FC - push {lr} - ldr r0, _080FF624 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0, 0x9] - cmp r0, 0 - bne _080FF628 - bl sub_80FFB8C - lsls r0, 24 - lsrs r0, 24 - bl GetSelectedGroupByIndex - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0 - bl GetUnlockedECWords - b _080FF638 - .align 2, 0 -_080FF624: .4byte gUnknown_203ACE8 -_080FF628: - bl sub_80FFBAC - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x1 - bl GetUnlockedECWords -_080FF638: - bl GetNumDisplayedWords - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - beq _080FF670 - ldr r2, _080FF66C @ =gUnknown_203ACE8 - ldr r3, [r2] - subs r0, 0x1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - movs r1, 0 - strb r0, [r3, 0xF] - ldr r0, [r2] - strb r1, [r0, 0xE] - ldr r0, [r2] - strb r1, [r0, 0x10] - ldr r0, [r2] - strb r1, [r0, 0x11] - ldr r1, [r2] - movs r0, 0x3 - strb r0, [r1, 0x4] - movs r0, 0xB - b _080FF672 - .align 2, 0 -_080FF66C: .4byte gUnknown_203ACE8 -_080FF670: - movs r0, 0 -_080FF672: - pop {r1} - bx r1 - thumb_func_end sub_80FF5FC - - thumb_func_start sub_80FF678 -sub_80FF678: @ 80FF678 - ldr r0, _080FF684 @ =gUnknown_203ACE8 - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x4] - movs r0, 0xA - bx lr - .align 2, 0 -_080FF684: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FF678 - - thumb_func_start sub_80FF688 -sub_80FF688: @ 80FF688 - push {lr} - ldr r1, _080FF6A8 @ =gUnknown_203ACE8 - ldr r0, [r1] - movs r2, 0 - strb r2, [r0, 0xA] - ldr r0, [r1] - strb r2, [r0, 0xB] - ldr r0, [r1] - strb r2, [r0, 0xC] - ldr r1, [r1] - ldrb r0, [r1, 0x9] - cmp r0, 0 - bne _080FF6AC - movs r0, 0x1 - strb r0, [r1, 0x9] - b _080FF6AE - .align 2, 0 -_080FF6A8: .4byte gUnknown_203ACE8 -_080FF6AC: - strb r2, [r1, 0x9] -_080FF6AE: - movs r0, 0x16 - pop {r1} - bx r1 - thumb_func_end sub_80FF688 - - thumb_func_start sub_80FF6B4 -sub_80FF6B4: @ 80FF6B4 - push {lr} - ldr r0, _080FF6C4 @ =0x0000ffff - bl sub_80FF768 - movs r0, 0x1 - pop {r1} - bx r1 - .align 2, 0 -_080FF6C4: .4byte 0x0000ffff - thumb_func_end sub_80FF6B4 - - thumb_func_start sub_80FF6C8 -sub_80FF6C8: @ 80FF6C8 - push {lr} - bl sub_80FFBE4 - lsls r0, 16 - lsrs r0, 16 - bl GetDisplayedWordByIndex - lsls r0, 16 - lsrs r0, 16 - bl sub_80FF768 - ldr r0, _080FF6EC @ =gUnknown_203ACE8 - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x4] - movs r0, 0xC - pop {r1} - bx r1 - .align 2, 0 -_080FF6EC: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FF6C8 - - thumb_func_start sub_80FF6F0 -sub_80FF6F0: @ 80FF6F0 - push {r4,r5,lr} - movs r4, 0 - ldr r3, _080FF724 @ =gUnknown_203ACE8 - ldr r0, [r3] - ldrb r0, [r0, 0x7] - cmp r4, r0 - bcs _080FF71E - adds r5, r3, 0 -_080FF700: - ldr r3, [r5] - ldr r1, [r3, 0x14] - lsls r2, r4, 1 - adds r1, r2, r1 - adds r0, r3, 0 - adds r0, 0x18 - adds r0, r2 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - ldrb r3, [r3, 0x7] - cmp r4, r3 - bcc _080FF700 -_080FF71E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FF724: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FF6F0 - - thumb_func_start sub_80FF728 -sub_80FF728: @ 80FF728 - push {r4,r5,lr} - movs r3, 0 - ldr r2, _080FF760 @ =gUnknown_203ACE8 - ldr r0, [r2] - ldrb r0, [r0, 0x7] - cmp r3, r0 - bcs _080FF758 - adds r5, r2, 0 - ldr r0, _080FF764 @ =0x0000ffff - adds r4, r0, 0 -_080FF73C: - ldr r2, [r5] - lsls r0, r3, 1 - adds r1, r2, 0 - adds r1, 0x18 - adds r1, r0 - ldrh r0, [r1] - orrs r0, r4 - strh r0, [r1] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - ldrb r2, [r2, 0x7] - cmp r3, r2 - bcc _080FF73C -_080FF758: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FF760: .4byte gUnknown_203ACE8 -_080FF764: .4byte 0x0000ffff - thumb_func_end sub_80FF728 - - thumb_func_start sub_80FF768 -sub_80FF768: @ 80FF768 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - bl sub_80FFB6C - lsls r0, 16 - ldr r1, _080FF788 @ =gUnknown_203ACE8 - ldr r1, [r1] - lsrs r0, 15 - adds r1, 0x18 - adds r1, r0 - strh r4, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FF788: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FF768 - - thumb_func_start sub_80FF78C -sub_80FF78C: @ 80FF78C - push {r4,r5,lr} - movs r2, 0 - ldr r0, _080FF7B4 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r1, [r0, 0x7] - cmp r2, r1 - bcs _080FF7C2 - adds r5, r1, 0 - adds r4, r0, 0 - adds r4, 0x18 - ldr r3, [r0, 0x14] -_080FF7A2: - lsls r0, r2, 1 - adds r1, r4, r0 - adds r0, r3 - ldrh r1, [r1] - ldrh r0, [r0] - cmp r1, r0 - beq _080FF7B8 - movs r0, 0x1 - b _080FF7C4 - .align 2, 0 -_080FF7B4: .4byte gUnknown_203ACE8 -_080FF7B8: - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, r5 - bcc _080FF7A2 -_080FF7C2: - movs r0, 0 -_080FF7C4: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80FF78C - - thumb_func_start sub_80FF7CC -sub_80FF7CC: @ 80FF7CC - push {lr} - adds r2, r0, 0 - ldr r0, _080FF7F0 @ =gUnknown_203ACE8 - ldr r3, [r0] - movs r1, 0xA - ldrsb r1, [r3, r1] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080FF7FC - ldrb r0, [r3, 0x9] - cmp r0, 0 - bne _080FF7F4 - adds r0, r2, 0 - bl sub_80FF80C - b _080FF802 - .align 2, 0 -_080FF7F0: .4byte gUnknown_203ACE8 -_080FF7F4: - adds r0, r2, 0 - bl sub_80FF8D8 - b _080FF802 -_080FF7FC: - adds r0, r2, 0 - bl sub_80FF968 -_080FF802: - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_80FF7CC - - thumb_func_start sub_80FF80C -sub_80FF80C: @ 80FF80C - push {r4,lr} - cmp r0, 0x1 - beq _080FF882 - cmp r0, 0x1 - bcc _080FF8A2 - cmp r0, 0x2 - beq _080FF820 - cmp r0, 0x3 - beq _080FF848 - b _080FF8CE -_080FF820: - ldr r0, _080FF83C @ =gUnknown_203ACE8 - ldr r1, [r0] - movs r0, 0xB - ldrsb r0, [r1, r0] - ldrb r3, [r1, 0xC] - cmn r0, r3 - beq _080FF8CE - ldrb r2, [r1, 0xB] - cmp r0, 0 - beq _080FF840 - subs r0, r2, 0x1 - strb r0, [r1, 0xB] -_080FF838: - movs r0, 0xE - b _080FF8D0 - .align 2, 0 -_080FF83C: .4byte gUnknown_203ACE8 -_080FF840: - subs r0, r3, 0x1 - strb r0, [r1, 0xC] - movs r0, 0x10 - b _080FF8D0 -_080FF848: - ldr r0, _080FF870 @ =gUnknown_203ACE8 - ldr r2, [r0] - movs r1, 0xB - ldrsb r1, [r2, r1] - ldrb r3, [r2, 0xC] - adds r1, r3 - ldrb r0, [r2, 0xD] - subs r0, 0x1 - cmp r1, r0 - bge _080FF8CE - ldrb r1, [r2, 0xB] - movs r0, 0xB - ldrsb r0, [r2, r0] - cmp r0, 0x2 - bgt _080FF874 - adds r0, r1, 0x1 - strb r0, [r2, 0xB] - movs r4, 0xE - b _080FF87A - .align 2, 0 -_080FF870: .4byte gUnknown_203ACE8 -_080FF874: - adds r0, r3, 0x1 - strb r0, [r2, 0xC] - movs r4, 0xF -_080FF87A: - bl sub_80FFC1C - adds r0, r4, 0 - b _080FF8D0 -_080FF882: - ldr r0, _080FF898 @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r2, [r1, 0xA] - movs r0, 0xA - ldrsb r0, [r1, r0] - cmp r0, 0 - beq _080FF89C - subs r0, r2, 0x1 - strb r0, [r1, 0xA] - b _080FF838 - .align 2, 0 -_080FF898: .4byte gUnknown_203ACE8 -_080FF89C: - bl sub_80FF9E8 - b _080FF838 -_080FF8A2: - ldr r0, _080FF8C4 @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r2, [r1, 0xA] - movs r0, 0xA - ldrsb r0, [r1, r0] - cmp r0, 0 - bgt _080FF8C8 - adds r0, r2, 0x1 - strb r0, [r1, 0xA] - bl sub_80FFC6C - lsls r0, 24 - cmp r0, 0 - beq _080FF838 - bl sub_80FF9E8 - b _080FF838 - .align 2, 0 -_080FF8C4: .4byte gUnknown_203ACE8 -_080FF8C8: - bl sub_80FF9E8 - b _080FF838 -_080FF8CE: - movs r0, 0 -_080FF8D0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80FF80C - - thumb_func_start sub_80FF8D8 -sub_80FF8D8: @ 80FF8D8 - push {lr} - cmp r0, 0x1 - beq _080FF944 - cmp r0, 0x1 - bcc _080FF928 - cmp r0, 0x2 - beq _080FF8EE - cmp r0, 0x3 - beq _080FF90E - movs r0, 0 - b _080FF960 -_080FF8EE: - ldr r0, _080FF900 @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r2, [r1, 0xB] - movs r0, 0xB - ldrsb r0, [r1, r0] - cmp r0, 0 - ble _080FF904 - subs r0, r2, 0x1 - b _080FF906 - .align 2, 0 -_080FF900: .4byte gUnknown_203ACE8 -_080FF904: - movs r0, 0x3 -_080FF906: - strb r0, [r1, 0xB] - bl sub_80FFC1C - b _080FF95E -_080FF90E: - ldr r0, _080FF920 @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r2, [r1, 0xB] - movs r0, 0xB - ldrsb r0, [r1, r0] - cmp r0, 0x2 - bgt _080FF924 - adds r0, r2, 0x1 - b _080FF906 - .align 2, 0 -_080FF920: .4byte gUnknown_203ACE8 -_080FF924: - movs r0, 0 - b _080FF906 -_080FF928: - ldr r0, _080FF940 @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r0, [r1, 0xA] - adds r0, 0x1 - strb r0, [r1, 0xA] - bl sub_80FFC6C - lsls r0, 24 - cmp r0, 0 - beq _080FF95E - b _080FF95A - .align 2, 0 -_080FF940: .4byte gUnknown_203ACE8 -_080FF944: - ldr r2, _080FF964 @ =gUnknown_203ACE8 - ldr r1, [r2] - ldrb r0, [r1, 0xA] - subs r0, 0x1 - strb r0, [r1, 0xA] - ldr r0, [r2] - ldrb r0, [r0, 0xA] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - bge _080FF95E -_080FF95A: - bl sub_80FF9E8 -_080FF95E: - movs r0, 0xE -_080FF960: - pop {r1} - bx r1 - .align 2, 0 -_080FF964: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FF8D8 - - thumb_func_start sub_80FF968 -sub_80FF968: @ 80FF968 - push {lr} - adds r2, r0, 0 - cmp r2, 0x1 - beq _080FF9B8 - cmp r2, 0x1 - bcc _080FF9CC - cmp r2, 0x2 - beq _080FF980 - cmp r2, 0x3 - beq _080FF99C - movs r0, 0 - b _080FF9DE -_080FF980: - ldr r0, _080FF994 @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r3, [r1, 0xB] - movs r0, 0xB - ldrsb r0, [r1, r0] - cmp r0, 0 - beq _080FF998 - subs r0, r3, 0x1 - b _080FF9DA - .align 2, 0 -_080FF994: .4byte gUnknown_203ACE8 -_080FF998: - strb r2, [r1, 0xB] - b _080FF9DC -_080FF99C: - ldr r0, _080FF9B0 @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r2, [r1, 0xB] - movs r0, 0xB - ldrsb r0, [r1, r0] - cmp r0, 0x1 - bgt _080FF9B4 - adds r0, r2, 0x1 - b _080FF9DA - .align 2, 0 -_080FF9B0: .4byte gUnknown_203ACE8 -_080FF9B4: - movs r0, 0 - b _080FF9DA -_080FF9B8: - ldr r0, _080FF9C8 @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r0, [r1, 0xB] - adds r0, 0x1 - strb r0, [r1, 0xB] - bl sub_80FFA0C - b _080FF9DC - .align 2, 0 -_080FF9C8: .4byte gUnknown_203ACE8 -_080FF9CC: - ldr r2, _080FF9E4 @ =gUnknown_203ACE8 - ldr r1, [r2] - movs r0, 0 - strb r0, [r1, 0xA] - ldr r1, [r2] - ldrb r0, [r1, 0xB] - adds r0, 0x1 -_080FF9DA: - strb r0, [r1, 0xB] -_080FF9DC: - movs r0, 0xE -_080FF9DE: - pop {r1} - bx r1 - .align 2, 0 -_080FF9E4: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FF968 - - thumb_func_start sub_80FF9E8 -sub_80FF9E8: @ 80FF9E8 - push {lr} - ldr r2, _080FFA08 @ =gUnknown_203ACE8 - ldr r1, [r2] - movs r0, 0xFF - strb r0, [r1, 0xA] - ldr r2, [r2] - ldrb r1, [r2, 0xB] - movs r0, 0xB - ldrsb r0, [r2, r0] - cmp r0, 0 - beq _080FFA02 - subs r0, r1, 0x1 - strb r0, [r2, 0xB] -_080FFA02: - pop {r0} - bx r0 - .align 2, 0 -_080FFA08: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FF9E8 - - thumb_func_start sub_80FFA0C -sub_80FFA0C: @ 80FFA0C - push {r4,lr} - ldr r4, _080FFA24 @ =gUnknown_203ACE8 - ldr r1, [r4] - ldrb r0, [r1, 0x9] - cmp r0, 0 - bne _080FFA28 - movs r0, 0x1 - strb r0, [r1, 0xA] - bl sub_80FFC1C - b _080FFA32 - .align 2, 0 -_080FFA24: .4byte gUnknown_203ACE8 -_080FFA28: - ldrb r0, [r1, 0xB] - bl sub_80FFC04 - ldr r1, [r4] - strb r0, [r1, 0xA] -_080FFA32: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80FFA0C - - thumb_func_start sub_80FFA38 -sub_80FFA38: @ 80FFA38 - push {r4,lr} - cmp r0, 0x5 - bls _080FFA40 - b _080FFB64 -_080FFA40: - lsls r0, 2 - ldr r1, _080FFA4C @ =_080FFA50 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FFA4C: .4byte _080FFA50 - .align 2, 0 -_080FFA50: - .4byte _080FFAEC - .4byte _080FFACA - .4byte _080FFA68 - .4byte _080FFA94 - .4byte _080FFB14 - .4byte _080FFB34 -_080FFA68: - ldr r0, _080FFA88 @ =gUnknown_203ACE8 - ldr r1, [r0] - movs r0, 0x11 - ldrsb r0, [r1, r0] - ldrb r3, [r1, 0xE] - adds r0, r3 - cmp r0, 0 - bgt _080FFA7A - b _080FFB64 -_080FFA7A: - ldrb r2, [r1, 0x11] - movs r0, 0x11 - ldrsb r0, [r1, r0] - cmp r0, 0 - ble _080FFA8C - subs r0, r2, 0x1 - b _080FFAB2 - .align 2, 0 -_080FFA88: .4byte gUnknown_203ACE8 -_080FFA8C: - subs r0, r3, 0x1 - strb r0, [r1, 0xE] - movs r4, 0x12 - b _080FFAC2 -_080FFA94: - ldr r0, _080FFAB8 @ =gUnknown_203ACE8 - ldr r1, [r0] - movs r0, 0x11 - ldrsb r0, [r1, r0] - ldrb r3, [r1, 0xE] - adds r0, r3 - ldrb r2, [r1, 0xF] - cmp r0, r2 - bge _080FFB64 - ldrb r2, [r1, 0x11] - movs r0, 0x11 - ldrsb r0, [r1, r0] - cmp r0, 0x2 - bgt _080FFABC - adds r0, r2, 0x1 -_080FFAB2: - strb r0, [r1, 0x11] - movs r4, 0x11 - b _080FFAC2 - .align 2, 0 -_080FFAB8: .4byte gUnknown_203ACE8 -_080FFABC: - adds r0, r3, 0x1 - strb r0, [r1, 0xE] - movs r4, 0x13 -_080FFAC2: - bl sub_80FFC44 - adds r0, r4, 0 - b _080FFB66 -_080FFACA: - ldr r0, _080FFADC @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r2, [r1, 0x10] - movs r0, 0x10 - ldrsb r0, [r1, r0] - cmp r0, 0 - ble _080FFAE0 - subs r0, r2, 0x1 - b _080FFAE2 - .align 2, 0 -_080FFADC: .4byte gUnknown_203ACE8 -_080FFAE0: - movs r0, 0x1 -_080FFAE2: - strb r0, [r1, 0x10] - bl sub_80FFC44 -_080FFAE8: - movs r0, 0x11 - b _080FFB66 -_080FFAEC: - ldr r4, _080FFB10 @ =gUnknown_203ACE8 - ldr r1, [r4] - ldrb r2, [r1, 0x10] - movs r0, 0x10 - ldrsb r0, [r1, r0] - cmp r0, 0 - bgt _080FFB0A - adds r0, r2, 0x1 - strb r0, [r1, 0x10] - bl sub_80FFCC0 - lsls r0, 24 - cmp r0, 0 - beq _080FFAE8 - ldr r1, [r4] -_080FFB0A: - movs r0, 0 - strb r0, [r1, 0x10] - b _080FFAE8 - .align 2, 0 -_080FFB10: .4byte gUnknown_203ACE8 -_080FFB14: - ldr r0, _080FFB28 @ =gUnknown_203ACE8 - ldr r2, [r0] - ldrb r0, [r2, 0xE] - adds r1, r0, 0 - cmp r1, 0 - beq _080FFB64 - cmp r1, 0x3 - bls _080FFB2C - subs r0, 0x4 - b _080FFB2E - .align 2, 0 -_080FFB28: .4byte gUnknown_203ACE8 -_080FFB2C: - movs r0, 0 -_080FFB2E: - strb r0, [r2, 0xE] - movs r0, 0x14 - b _080FFB66 -_080FFB34: - ldr r3, _080FFB60 @ =gUnknown_203ACE8 - ldr r1, [r3] - ldrb r2, [r1, 0xE] - ldrb r0, [r1, 0xF] - subs r0, 0x4 - cmp r2, r0 - bgt _080FFB64 - adds r0, r2, 0x4 - strb r0, [r1, 0xE] - ldr r2, [r3] - ldrb r1, [r2, 0xE] - ldrb r3, [r2, 0xF] - subs r0, r3, 0x3 - cmp r1, r0 - ble _080FFB58 - adds r0, r3, 0 - adds r0, 0xFD - strb r0, [r2, 0xE] -_080FFB58: - bl sub_80FFC44 - movs r0, 0x15 - b _080FFB66 - .align 2, 0 -_080FFB60: .4byte gUnknown_203ACE8 -_080FFB64: - movs r0, 0 -_080FFB66: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80FFA38 - - thumb_func_start sub_80FFB6C -sub_80FFB6C: @ 80FFB6C - ldr r0, _080FFB88 @ =gUnknown_203ACE8 - ldr r0, [r0] - movs r2, 0x6 - ldrsb r2, [r0, r2] - ldrb r1, [r0, 0x2] - muls r1, r2 - ldrb r0, [r0, 0x5] - lsls r0, 24 - asrs r0, 24 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - bx lr - .align 2, 0 -_080FFB88: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFB6C - - thumb_func_start sub_80FFB8C -sub_80FFB8C: @ 80FFB8C - ldr r0, _080FFBA8 @ =gUnknown_203ACE8 - ldr r0, [r0] - movs r1, 0xB - ldrsb r1, [r0, r1] - ldrb r2, [r0, 0xC] - adds r1, r2 - lsls r1, 1 - ldrb r0, [r0, 0xA] - lsls r0, 24 - asrs r0, 24 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - bx lr - .align 2, 0 -_080FFBA8: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFB8C - - thumb_func_start sub_80FFBAC -sub_80FFBAC: @ 80FFBAC - push {lr} - ldr r0, _080FFBDC @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r0, [r1, 0xA] - movs r3, 0 - cmp r0, 0x6 - bhi _080FFBBE - movs r3, 0xA - ldrsb r3, [r1, r3] -_080FFBBE: - ldrb r0, [r1, 0xB] - movs r2, 0 - cmp r0, 0x3 - bhi _080FFBCA - movs r2, 0xB - ldrsb r2, [r1, r2] -_080FFBCA: - ldr r0, _080FFBE0 @ =gUnknown_843F39C - lsls r1, r2, 3 - subs r1, r2 - adds r1, r3, r1 - adds r1, r0 - ldrb r0, [r1] - pop {r1} - bx r1 - .align 2, 0 -_080FFBDC: .4byte gUnknown_203ACE8 -_080FFBE0: .4byte gUnknown_843F39C - thumb_func_end sub_80FFBAC - - thumb_func_start sub_80FFBE4 -sub_80FFBE4: @ 80FFBE4 - ldr r0, _080FFC00 @ =gUnknown_203ACE8 - ldr r0, [r0] - movs r1, 0x11 - ldrsb r1, [r0, r1] - ldrb r2, [r0, 0xE] - adds r1, r2 - lsls r1, 1 - ldrb r0, [r0, 0x10] - lsls r0, 24 - asrs r0, 24 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - bx lr - .align 2, 0 -_080FFC00: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFBE4 - - thumb_func_start sub_80FFC04 -sub_80FFC04: @ 80FFC04 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080FFC12 - cmp r0, 0x1 - beq _080FFC16 -_080FFC12: - movs r0, 0x6 - b _080FFC18 -_080FFC16: - movs r0, 0x5 -_080FFC18: - pop {r1} - bx r1 - thumb_func_end sub_80FFC04 - - thumb_func_start sub_80FFC1C -sub_80FFC1C: @ 80FFC1C - push {lr} - b _080FFC32 -_080FFC20: - ldr r0, _080FFC40 @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r2, [r1, 0xA] - movs r0, 0xA - ldrsb r0, [r1, r0] - cmp r0, 0 - beq _080FFC3C - subs r0, r2, 0x1 - strb r0, [r1, 0xA] -_080FFC32: - bl sub_80FFC6C - lsls r0, 24 - cmp r0, 0 - bne _080FFC20 -_080FFC3C: - pop {r0} - bx r0 - .align 2, 0 -_080FFC40: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFC1C - - thumb_func_start sub_80FFC44 -sub_80FFC44: @ 80FFC44 - push {lr} - b _080FFC5A -_080FFC48: - ldr r0, _080FFC68 @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r2, [r1, 0x10] - movs r0, 0x10 - ldrsb r0, [r1, r0] - cmp r0, 0 - beq _080FFC64 - subs r0, r2, 0x1 - strb r0, [r1, 0x10] -_080FFC5A: - bl sub_80FFCC0 - lsls r0, 24 - cmp r0, 0 - bne _080FFC48 -_080FFC64: - pop {r0} - bx r0 - .align 2, 0 -_080FFC68: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFC44 - - thumb_func_start sub_80FFC6C -sub_80FFC6C: @ 80FFC6C - push {r4,lr} - ldr r4, _080FFC98 @ =gUnknown_203ACE8 - ldr r1, [r4] - ldrb r0, [r1, 0x9] - cmp r0, 0 - bne _080FFC9C - bl sub_80FFB8C - adds r4, r0, 0 - bl GetNumDisplayableGroups - movs r1, 0 - lsls r0, 24 - lsls r4, 16 - lsrs r4, 16 - lsrs r0, 24 - cmp r4, r0 - bcc _080FFC92 - movs r1, 0x1 -_080FFC92: - adds r0, r1, 0 - b _080FFCB8 - .align 2, 0 -_080FFC98: .4byte gUnknown_203ACE8 -_080FFC9C: - ldrb r0, [r1, 0xB] - bl sub_80FFC04 - movs r2, 0 - ldr r1, [r4] - ldrb r1, [r1, 0xA] - lsls r1, 24 - asrs r1, 24 - lsls r0, 24 - lsrs r0, 24 - cmp r1, r0 - ble _080FFCB6 - movs r2, 0x1 -_080FFCB6: - adds r0, r2, 0 -_080FFCB8: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80FFC6C - - thumb_func_start sub_80FFCC0 -sub_80FFCC0: @ 80FFCC0 - push {r4,lr} - bl sub_80FFBE4 - adds r4, r0, 0 - bl GetNumDisplayedWords - movs r1, 0 - lsls r4, 16 - lsls r0, 16 - cmp r4, r0 - bcc _080FFCD8 - movs r1, 0x1 -_080FFCD8: - adds r0, r1, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80FFCC0 - - thumb_func_start sub_80FFCE0 -sub_80FFCE0: @ 80FFCE0 - ldr r2, _080FFCF4 @ =gUnknown_843F2AC - ldr r0, _080FFCF8 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r1, [r0, 0x1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0, 0x3] - bx lr - .align 2, 0 -_080FFCF4: .4byte gUnknown_843F2AC -_080FFCF8: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFCE0 - - thumb_func_start sub_80FFCFC -sub_80FFCFC: @ 80FFCFC - ldr r2, _080FFD14 @ =gUnknown_843F2AC - ldr r0, _080FFD18 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r1, [r0, 0x1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r2, 0x4 - adds r0, r2 - ldr r0, [r0] - bx lr - .align 2, 0 -_080FFD14: .4byte gUnknown_843F2AC -_080FFD18: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFCFC - - thumb_func_start sub_80FFD1C -sub_80FFD1C: @ 80FFD1C - ldr r0, _080FFD24 @ =gUnknown_203ACE8 - ldr r0, [r0] - adds r0, 0x18 - bx lr - .align 2, 0 -_080FFD24: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFD1C - - thumb_func_start sub_80FFD28 -sub_80FFD28: @ 80FFD28 - ldr r0, _080FFD30 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0, 0x3] - bx lr - .align 2, 0 -_080FFD30: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFD28 - - thumb_func_start sub_80FFD34 -sub_80FFD34: @ 80FFD34 - ldr r0, _080FFD3C @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0, 0x2] - bx lr - .align 2, 0 -_080FFD3C: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFD34 - - thumb_func_start sub_80FFD40 -sub_80FFD40: @ 80FFD40 - ldr r0, _080FFD48 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0, 0x5] - bx lr - .align 2, 0 -_080FFD48: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFD40 - - thumb_func_start sub_80FFD4C -sub_80FFD4C: @ 80FFD4C - ldr r0, _080FFD54 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0, 0x6] - bx lr - .align 2, 0 -_080FFD54: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFD4C - - thumb_func_start sub_80FFD58 -sub_80FFD58: @ 80FFD58 - push {r4,r5,lr} - ldr r4, _080FFD88 @ =gUnknown_843F2AC - ldr r2, _080FFD8C @ =gUnknown_203ACE8 - ldr r5, [r2] - ldrb r3, [r5, 0x1] - lsls r2, r3, 1 - adds r2, r3 - lsls r2, 3 - adds r3, r4, 0 - adds r3, 0x8 - adds r2, r3 - ldr r2, [r2] - str r2, [r0] - ldrb r2, [r5, 0x1] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r4, 0xC - adds r0, r4 - ldr r0, [r0] - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FFD88: .4byte gUnknown_843F2AC -_080FFD8C: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFD58 - - thumb_func_start sub_80FFD90 -sub_80FFD90: @ 80FFD90 - push {r4,r5,lr} - ldr r4, _080FFDC0 @ =gUnknown_843F2AC - ldr r2, _080FFDC4 @ =gUnknown_203ACE8 - ldr r5, [r2] - ldrb r3, [r5, 0x1] - lsls r2, r3, 1 - adds r2, r3 - lsls r2, 3 - adds r3, r4, 0 - adds r3, 0x10 - adds r2, r3 - ldr r2, [r2] - str r2, [r0] - ldrb r2, [r5, 0x1] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r4, 0x14 - adds r0, r4 - ldr r0, [r0] - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FFDC0: .4byte gUnknown_843F2AC -_080FFDC4: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFD90 - - thumb_func_start sub_80FFDC8 -sub_80FFDC8: @ 80FFDC8 - push {lr} - adds r2, r0, 0 - ldr r0, _080FFDDC @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x4 - bne _080FFDE4 - ldr r0, _080FFDE0 @ =gUnknown_84189EE - b _080FFDE6 - .align 2, 0 -_080FFDDC: .4byte gUnknown_203ACE8 -_080FFDE0: .4byte gUnknown_84189EE -_080FFDE4: - ldr r0, _080FFDF0 @ =gUnknown_84189E0 -_080FFDE6: - str r0, [r2] - movs r0, 0 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080FFDF0: .4byte gUnknown_84189E0 - thumb_func_end sub_80FFDC8 - - thumb_func_start sub_80FFDF4 -sub_80FFDF4: @ 80FFDF4 - ldr r2, _080FFE00 @ =gUnknown_8418937 - str r2, [r0] - ldr r0, _080FFE04 @ =gUnknown_8418956 - str r0, [r1] - bx lr - .align 2, 0 -_080FFE00: .4byte gUnknown_8418937 -_080FFE04: .4byte gUnknown_8418956 - thumb_func_end sub_80FFDF4 - - thumb_func_start sub_80FFE08 -sub_80FFE08: @ 80FFE08 - ldr r2, _080FFE18 @ =gUnknown_203ACE8 - ldr r3, [r2] - ldrb r2, [r3, 0xA] - strb r2, [r0] - ldrb r0, [r3, 0xB] - strb r0, [r1] - bx lr - .align 2, 0 -_080FFE18: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFE08 - - thumb_func_start sub_80FFE1C -sub_80FFE1C: @ 80FFE1C - ldr r0, _080FFE24 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0, 0x9] - bx lr - .align 2, 0 -_080FFE24: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFE1C - - thumb_func_start sub_80FFE28 -sub_80FFE28: @ 80FFE28 - ldr r0, _080FFE30 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0, 0xC] - bx lr - .align 2, 0 -_080FFE30: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFE28 - - thumb_func_start sub_80FFE34 -sub_80FFE34: @ 80FFE34 - ldr r2, _080FFE44 @ =gUnknown_203ACE8 - ldr r3, [r2] - ldrb r2, [r3, 0x10] - strb r2, [r0] - ldrb r0, [r3, 0x11] - strb r0, [r1] - bx lr - .align 2, 0 -_080FFE44: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFE34 - - thumb_func_start sub_80FFE48 -sub_80FFE48: @ 80FFE48 - ldr r0, _080FFE50 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0, 0xE] - bx lr - .align 2, 0 -_080FFE50: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFE48 - - thumb_func_start sub_80FFE54 -sub_80FFE54: @ 80FFE54 - ldr r0, _080FFE5C @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r0, [r0, 0xF] - bx lr - .align 2, 0 -_080FFE5C: .4byte gUnknown_203ACE8 - thumb_func_end sub_80FFE54 - - thumb_func_start sub_80FFE60 -sub_80FFE60: @ 80FFE60 - movs r0, 0 - bx lr - thumb_func_end sub_80FFE60 - - thumb_func_start sub_80FFE64 -sub_80FFE64: @ 80FFE64 - push {lr} - ldr r0, _080FFE78 @ =gUnknown_203ACE8 - ldr r1, [r0] - ldrb r0, [r1, 0x4] - cmp r0, 0x2 - beq _080FFE7C - cmp r0, 0x3 - beq _080FFE86 - b _080FFE90 - .align 2, 0 -_080FFE78: .4byte gUnknown_203ACE8 -_080FFE7C: - ldrb r0, [r1, 0x9] - cmp r0, 0 - bne _080FFE90 - ldrb r0, [r1, 0xC] - b _080FFE88 -_080FFE86: - ldrb r0, [r1, 0xE] -_080FFE88: - cmp r0, 0 - beq _080FFE90 - movs r0, 0x1 - b _080FFE92 -_080FFE90: - movs r0, 0 -_080FFE92: - pop {r1} - bx r1 - thumb_func_end sub_80FFE64 - - thumb_func_start sub_80FFE98 -sub_80FFE98: @ 80FFE98 - push {lr} - ldr r0, _080FFEAC @ =gUnknown_203ACE8 - ldr r2, [r0] - ldrb r0, [r2, 0x4] - cmp r0, 0x2 - beq _080FFEB0 - cmp r0, 0x3 - beq _080FFEC6 - b _080FFED4 - .align 2, 0 -_080FFEAC: .4byte gUnknown_203ACE8 -_080FFEB0: - ldrb r0, [r2, 0x9] - cmp r0, 0 - bne _080FFED4 - ldrb r1, [r2, 0xC] - adds r1, 0x4 - ldrb r0, [r2, 0xD] - subs r0, 0x1 - cmp r1, r0 - bgt _080FFED4 - movs r0, 0x1 - b _080FFED6 -_080FFEC6: - ldrb r0, [r2, 0xE] - adds r0, 0x4 - ldrb r2, [r2, 0xF] - cmp r0, r2 - bgt _080FFED4 - movs r0, 0x1 - b _080FFED6 -_080FFED4: - movs r0, 0 -_080FFED6: - pop {r1} - bx r1 - thumb_func_end sub_80FFE98 - - thumb_func_start sub_80FFEDC -sub_80FFEDC: @ 80FFEDC - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 24 - lsrs r3, r1, 24 - movs r2, 0 - cmp r2, r3 - bcs _080FFF12 - ldr r0, _080FFF04 @ =gUnknown_203ACE8 - ldr r0, [r0] - adds r4, r0, 0 - adds r4, 0x18 -_080FFEF2: - lsls r0, r2, 1 - adds r1, r0, r5 - adds r0, r4, r0 - ldrh r1, [r1] - ldrh r0, [r0] - cmp r1, r0 - beq _080FFF08 - movs r0, 0x1 - b _080FFF14 - .align 2, 0 -_080FFF04: .4byte gUnknown_203ACE8 -_080FFF08: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r3 - bcc _080FFEF2 -_080FFF12: - movs r0, 0 -_080FFF14: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80FFEDC - - thumb_func_start sub_80FFF1C -sub_80FFF1C: @ 80FFF1C - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - movs r1, 0 - ldr r2, _080FFF34 @ =gUnknown_843F2AC -_080FFF26: - ldrb r0, [r2] - cmp r0, r3 - bne _080FFF38 - lsls r0, r1, 24 - lsrs r0, 24 - b _080FFF42 - .align 2, 0 -_080FFF34: .4byte gUnknown_843F2AC -_080FFF38: - adds r2, 0x18 - adds r1, 0x1 - cmp r1, 0x9 - bls _080FFF26 - movs r0, 0 -_080FFF42: - pop {r1} - bx r1 - thumb_func_end sub_80FFF1C - - thumb_func_start sub_80FFF48 -sub_80FFF48: @ 80FFF48 - push {r4,lr} - movs r2, 0 - ldr r0, _080FFF68 @ =gUnknown_203ACE8 - ldr r0, [r0] - ldrb r1, [r0, 0x7] - cmp r2, r1 - bge _080FFF78 - ldr r4, _080FFF6C @ =0x0000ffff - adds r3, r1, 0 - adds r1, r0, 0 - adds r1, 0x18 -_080FFF5E: - ldrh r0, [r1] - cmp r0, r4 - beq _080FFF70 - movs r0, 0 - b _080FFF7A - .align 2, 0 -_080FFF68: .4byte gUnknown_203ACE8 -_080FFF6C: .4byte 0x0000ffff -_080FFF70: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r3 - blt _080FFF5E -_080FFF78: - movs r0, 0x1 -_080FFF7A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80FFF48 - - thumb_func_start sub_80FFF80 -sub_80FFF80: @ 80FFF80 - push {lr} - bl sub_8100BF4 - lsls r0, 24 - cmp r0, 0 - beq _080FFF90 - movs r0, 0x1 - b _080FFF92 -_080FFF90: - movs r0, 0 -_080FFF92: - pop {r1} - bx r1 - thumb_func_end sub_80FFF80 - - thumb_func_start sub_80FFF98 -sub_80FFF98: @ 80FFF98 - push {r4,lr} - sub sp, 0x8 - ldr r0, _080FFFB4 @ =gUnknown_203ACEC - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x5 - bls _080FFFA8 - b _08100100 -_080FFFA8: - lsls r0, 2 - ldr r1, _080FFFB8 @ =_080FFFBC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FFFB4: .4byte gUnknown_203ACEC -_080FFFB8: .4byte _080FFFBC - .align 2, 0 -_080FFFBC: - .4byte _080FFFD4 - .4byte _08100038 - .4byte _0810006C - .4byte _0810009C - .4byte _081000AE - .4byte _081000B8 -_080FFFD4: - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _08100028 @ =gUnknown_843F8A0 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - ldr r4, _0810002C @ =gUnknown_203ACEC - ldr r1, [r4] - movs r0, 0xB0 - lsls r0, 4 - adds r1, r0 - movs r0, 0x3 - bl SetBgTilemapBuffer - ldr r1, [r4] - movs r0, 0xC0 - lsls r0, 2 - adds r1, r0 - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r0, _08100030 @ =gUnknown_843F8B0 - bl InitWindows - bl DeactivateAllTextPrinters - bl sub_8100CBC - bl sub_8100C5C - movs r0, 0 - str r0, [sp, 0x4] - movs r1, 0xE0 - lsls r1, 19 - ldr r2, _08100034 @ =0x01000100 - add r0, sp, 0x4 - bl CpuFastSet - b _08100104 - .align 2, 0 -_08100028: .4byte gUnknown_843F8A0 -_0810002C: .4byte gUnknown_203ACEC -_08100030: .4byte gUnknown_843F8B0 -_08100034: .4byte 0x01000100 -_08100038: - ldr r1, _08100064 @ =gUnknown_8E99DAC - movs r0, 0 - str r0, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl DecompressAndLoadBgGfxUsingHeap - ldr r1, _08100068 @ =gUnknown_8E99E74 - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - bl sub_8100F44 - bl sub_8102428 - movs r0, 0x3 - bl CopyBgTilemapBufferToVram - b _08100104 - .align 2, 0 -_08100064: .4byte gUnknown_8E99DAC -_08100068: .4byte gUnknown_8E99E74 -_0810006C: - ldr r0, _08100094 @ =gUnknown_203ACEC - ldr r0, [r0] - movs r1, 0xC0 - lsls r1, 2 - adds r0, r1 - bl sub_8101100 - ldr r1, _08100098 @ =gUnknown_843F7AC - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndLoadBgGfxUsingHeap - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - b _08100104 - .align 2, 0 -_08100094: .4byte gUnknown_203ACEC -_08100098: .4byte gUnknown_843F7AC -_0810009C: - bl sub_8100D24 - bl sub_8100E34 - bl sub_8100FDC - bl sub_81012CC - b _08100104 -_081000AE: - bl sub_8101A90 - bl sub_8101AC4 - b _08100104 -_081000B8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0810010E - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_8101A5C - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - movs r0, 0x4A - movs r1, 0x3B - bl SetGpuReg - movs r0, 0x3 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0 - bl ShowBg - bl sub_81021D4 - bl sub_8102320 - b _08100104 -_08100100: - movs r0, 0 - b _08100110 -_08100104: - ldr r0, _08100118 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_0810010E: - movs r0, 0x1 -_08100110: - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08100118: .4byte gUnknown_203ACEC - thumb_func_end sub_80FFF98 - - thumb_func_start sub_810011C -sub_810011C: @ 810011C - push {lr} - ldr r0, _08100130 @ =gUnknown_203ACEC - ldr r0, [r0] - cmp r0, 0 - beq _0810012A - bl Free -_0810012A: - pop {r0} - bx r0 - .align 2, 0 -_08100130: .4byte gUnknown_203ACEC - thumb_func_end sub_810011C - - thumb_func_start sub_8100134 -sub_8100134: @ 8100134 - push {lr} - ldr r1, _08100148 @ =gUnknown_203ACEC - ldr r1, [r1] - movs r2, 0 - strh r0, [r1, 0x4] - strh r2, [r1] - bl sub_810014C - pop {r0} - bx r0 - .align 2, 0 -_08100148: .4byte gUnknown_203ACEC - thumb_func_end sub_8100134 - - thumb_func_start sub_810014C -sub_810014C: @ 810014C - push {lr} - ldr r0, _08100164 @ =gUnknown_203ACEC - ldr r0, [r0] - ldrh r0, [r0, 0x4] - cmp r0, 0x16 - bhi _08100250 - lsls r0, 2 - ldr r1, _08100168 @ =_0810016C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08100164: .4byte gUnknown_203ACEC -_08100168: .4byte _0810016C - .align 2, 0 -_0810016C: - .4byte _08100250 - .4byte _081001C8 - .4byte _081001CE - .4byte _081001D4 - .4byte _081001DA - .4byte _081001E0 - .4byte _081001E6 - .4byte _081001EC - .4byte _081001F2 - .4byte _081001F8 - .4byte _081001FE - .4byte _08100204 - .4byte _0810020A - .4byte _08100210 - .4byte _08100216 - .4byte _0810021C - .4byte _08100222 - .4byte _08100228 - .4byte _0810022E - .4byte _08100234 - .4byte _0810023A - .4byte _08100240 - .4byte _08100246 -_081001C8: - bl sub_8100258 - b _0810024A -_081001CE: - bl sub_8100290 - b _0810024A -_081001D4: - bl sub_8100374 - b _0810024A -_081001DA: - bl sub_8100430 - b _0810024A -_081001E0: - bl sub_81003A8 - b _0810024A -_081001E6: - bl sub_81003EC - b _0810024A -_081001EC: - bl sub_8100474 - b _0810024A -_081001F2: - bl sub_81004B8 - b _0810024A -_081001F8: - bl sub_81004F4 - b _0810024A -_081001FE: - bl sub_81005C0 - b _0810024A -_08100204: - bl sub_81007D0 - b _0810024A -_0810020A: - bl sub_8100890 - b _0810024A -_08100210: - bl sub_810093C - b _0810024A -_08100216: - bl sub_8100720 - b _0810024A -_0810021C: - bl sub_810072C - b _0810024A -_08100222: - bl sub_8100774 - b _0810024A -_08100228: - bl sub_81009F8 - b _0810024A -_0810022E: - bl sub_8100A78 - b _0810024A -_08100234: - bl sub_8100A04 - b _0810024A -_0810023A: - bl sub_8100B70 - b _0810024A -_08100240: - bl sub_8100AE8 - b _0810024A -_08100246: - bl sub_8100660 -_0810024A: - lsls r0, 24 - lsrs r0, 24 - b _08100252 -_08100250: - movs r0, 0 -_08100252: - pop {r1} - bx r1 - thumb_func_end sub_810014C - - thumb_func_start sub_8100258 -sub_8100258: @ 8100258 - push {r4,lr} - ldr r4, _0810026C @ =gUnknown_203ACEC - ldr r0, [r4] - ldrh r0, [r0] - cmp r0, 0 - beq _08100270 - cmp r0, 0x1 - beq _0810027E - b _08100288 - .align 2, 0 -_0810026C: .4byte gUnknown_203ACEC -_08100270: - bl sub_8100FDC - ldr r1, [r4] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08100288 -_0810027E: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0810028A -_08100288: - movs r0, 0x1 -_0810028A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8100258 - - thumb_func_start sub_8100290 -sub_8100290: @ 8100290 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x40 - bl sub_80FFD1C - adds r4, r0, 0 - bl sub_80FFCE0 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - bl sub_80FFD40 - lsls r0, 24 - lsrs r7, r0, 24 - bl sub_80FFD4C - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - bl sub_80FFD34 - lsls r0, 24 - lsrs r0, 24 - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - lsls r0, 1 - adds r4, r0 - ldr r1, _08100304 @ =gUnknown_843F888 - mov r2, r9 - lsls r0, r2, 2 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 19 - movs r1, 0xD0 - lsls r1, 12 - adds r0, r1 - lsrs r6, r0, 16 - movs r5, 0 - cmp r5, r7 - bcs _0810033A - ldr r2, _08100308 @ =0x0000ffff - mov r10, r2 -_081002EE: - ldrh r0, [r4] - cmp r0, r10 - bne _08100310 - movs r0, 0x1 - ldr r1, _0810030C @ =gUnknown_843F8D8 - movs r2, 0 - bl GetStringWidth - lsls r1, r0, 3 - subs r0, r1, r0 - b _08100322 - .align 2, 0 -_08100304: .4byte gUnknown_843F888 -_08100308: .4byte 0x0000ffff -_0810030C: .4byte gUnknown_843F8D8 -_08100310: - ldrh r1, [r4] - mov r0, sp - bl CopyEasyChatWord - movs r0, 0x1 - mov r1, sp - movs r2, 0 - bl GetStringWidth -_08100322: - adds r0, 0x11 - lsls r1, r6, 16 - asrs r1, 16 - adds r1, r0 - lsls r1, 16 - lsrs r6, r1, 16 - adds r4, 0x2 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, r7 - bcc _081002EE -_0810033A: - ldr r1, _08100370 @ =gUnknown_843F888 - mov r2, r9 - lsls r0, r2, 2 - adds r0, r1 - mov r2, r8 - lsls r1, r2, 1 - ldrb r0, [r0, 0x1] - adds r1, r0 - adds r1, 0x1 - lsls r1, 3 - adds r1, 0x1 - lsls r0, r6, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - bl sub_8101B58 - movs r0, 0 - add sp, 0x40 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08100370: .4byte gUnknown_843F888 - thumb_func_end sub_8100290 - - thumb_func_start sub_8100374 -sub_8100374: @ 8100374 - push {lr} - bl sub_80FFD40 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08100396 - cmp r0, 0x1 - bgt _0810038C - cmp r0, 0 - beq _08100392 - b _081003A2 -_0810038C: - cmp r0, 0x2 - beq _0810039A - b _081003A2 -_08100392: - movs r0, 0x1C - b _0810039C -_08100396: - movs r0, 0x73 - b _0810039C -_0810039A: - movs r0, 0xBF -_0810039C: - movs r1, 0x61 - bl sub_8101B58 -_081003A2: - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8100374 - - thumb_func_start sub_81003A8 -sub_81003A8: @ 81003A8 - push {r4,lr} - ldr r4, _081003BC @ =gUnknown_203ACEC - ldr r0, [r4] - ldrh r0, [r0] - cmp r0, 0 - beq _081003C0 - cmp r0, 0x1 - beq _081003DA - b _081003E4 - .align 2, 0 -_081003BC: .4byte gUnknown_203ACEC -_081003C0: - bl sub_8101B88 - movs r0, 0x2 - bl sub_8100E7C - movs r0, 0x1 - bl sub_8100F18 - ldr r1, [r4] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _081003E4 -_081003DA: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _081003E6 -_081003E4: - movs r0, 0x1 -_081003E6: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81003A8 - - thumb_func_start sub_81003EC -sub_81003EC: @ 81003EC - push {r4,lr} - ldr r4, _08100400 @ =gUnknown_203ACEC - ldr r0, [r4] - ldrh r0, [r0] - cmp r0, 0 - beq _08100404 - cmp r0, 0x1 - beq _0810041E - b _08100428 - .align 2, 0 -_08100400: .4byte gUnknown_203ACEC -_08100404: - bl sub_8101B88 - movs r0, 0x3 - bl sub_8100E7C - movs r0, 0 - bl sub_8100F18 - ldr r1, [r4] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08100428 -_0810041E: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0810042A -_08100428: - movs r0, 0x1 -_0810042A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81003EC - - thumb_func_start sub_8100430 -sub_8100430: @ 8100430 - push {r4,lr} - ldr r4, _08100444 @ =gUnknown_203ACEC - ldr r0, [r4] - ldrh r0, [r0] - cmp r0, 0 - beq _08100448 - cmp r0, 0x1 - beq _08100462 - b _0810046C - .align 2, 0 -_08100444: .4byte gUnknown_203ACEC -_08100448: - bl sub_8101B88 - movs r0, 0x1 - bl sub_8100E7C - movs r0, 0x1 - bl sub_8100F18 - ldr r1, [r4] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _0810046C -_08100462: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0810046E -_0810046C: - movs r0, 0x1 -_0810046E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8100430 - - thumb_func_start sub_8100474 -sub_8100474: @ 8100474 - push {r4,lr} - ldr r4, _08100488 @ =gUnknown_203ACEC - ldr r0, [r4] - ldrh r0, [r0] - cmp r0, 0 - beq _0810048C - cmp r0, 0x1 - beq _081004A6 - b _081004B0 - .align 2, 0 -_08100488: .4byte gUnknown_203ACEC -_0810048C: - bl sub_8101BA8 - movs r0, 0 - bl sub_8100E7C - movs r0, 0 - bl ShowBg - ldr r1, [r4] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _081004B0 -_081004A6: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _081004B2 -_081004B0: - movs r0, 0x1 -_081004B2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8100474 - - thumb_func_start sub_81004B8 -sub_81004B8: @ 81004B8 - push {r4,lr} - ldr r4, _081004CC @ =gUnknown_203ACEC - ldr r0, [r4] - ldrh r0, [r0] - cmp r0, 0 - beq _081004D0 - cmp r0, 0x1 - beq _081004E6 - movs r0, 0x1 - b _081004EE - .align 2, 0 -_081004CC: .4byte gUnknown_203ACEC -_081004D0: - bl sub_8101BA8 - movs r0, 0 - bl sub_8100E7C - bl sub_8100FDC - ldr r1, [r4] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_081004E6: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 -_081004EE: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81004B8 - - thumb_func_start sub_81004F4 -sub_81004F4: @ 81004F4 - push {lr} - ldr r0, _0810050C @ =gUnknown_203ACEC - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x4 - bhi _081005AE - lsls r0, 2 - ldr r1, _08100510 @ =_08100514 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0810050C: .4byte gUnknown_203ACEC -_08100510: .4byte _08100514 - .align 2, 0 -_08100514: - .4byte _08100528 - .4byte _08100544 - .4byte _08100556 - .4byte _0810056C - .4byte _0810058C -_08100528: - bl sub_8101B88 - movs r0, 0 - bl HideBg - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_8101A5C - bl sub_810131C - b _0810057A -_08100544: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081005B8 - movs r0, 0 - bl sub_81015D4 - b _0810057A -_08100556: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081005B8 - bl sub_81016AC - lsls r0, 24 - cmp r0, 0 - bne _081005B8 - b _0810057A -_0810056C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081005B8 - bl sub_8101FAC -_0810057A: - ldr r0, _08100588 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _081005B8 - .align 2, 0 -_08100588: .4byte gUnknown_203ACEC -_0810058C: - bl sub_8102018 - lsls r0, 24 - cmp r0, 0 - bne _081005B8 - bl sub_8101BC0 - movs r0, 0 - bl sub_81022E0 - bl sub_810224C - ldr r0, _081005B4 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_081005AE: - movs r0, 0 - b _081005BA - .align 2, 0 -_081005B4: .4byte gUnknown_203ACEC -_081005B8: - movs r0, 0x1 -_081005BA: - pop {r1} - bx r1 - thumb_func_end sub_81004F4 - - thumb_func_start sub_81005C0 -sub_81005C0: @ 81005C0 - push {lr} - ldr r0, _081005D8 @ =gUnknown_203ACEC - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x4 - bhi _08100658 - lsls r0, 2 - ldr r1, _081005DC @ =_081005E0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081005D8: .4byte gUnknown_203ACEC -_081005DC: .4byte _081005E0 - .align 2, 0 -_081005E0: - .4byte _081005F4 - .4byte _08100602 - .4byte _0810061E - .4byte _08100630 - .4byte _08100654 -_081005F4: - bl sub_8101C48 - bl sub_81020AC - bl sub_81022B0 - b _08100644 -_08100602: - bl sub_81020D0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08100658 - movs r0, 0x1 - bl sub_81015D4 - ldr r0, _0810062C @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_0810061E: - bl sub_81016AC - lsls r0, 24 - cmp r0, 0 - bne _08100658 - b _08100644 - .align 2, 0 -_0810062C: .4byte gUnknown_203ACEC -_08100630: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08100658 - bl sub_8101BA8 - movs r0, 0 - bl ShowBg -_08100644: - ldr r0, _08100650 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08100658 - .align 2, 0 -_08100650: .4byte gUnknown_203ACEC -_08100654: - movs r0, 0 - b _0810065A -_08100658: - movs r0, 0x1 -_0810065A: - pop {r1} - bx r1 - thumb_func_end sub_81005C0 - - thumb_func_start sub_8100660 -sub_8100660: @ 8100660 - push {lr} - ldr r0, _08100678 @ =gUnknown_203ACEC - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x4 - bhi _08100718 - lsls r0, 2 - ldr r1, _0810067C @ =_08100680 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08100678: .4byte gUnknown_203ACEC -_0810067C: .4byte _08100680 - .align 2, 0 -_08100680: - .4byte _08100694 - .4byte _081006A8 - .4byte _081006C2 - .4byte _081006E8 - .4byte _0810070E -_08100694: - bl sub_8101C48 - bl sub_81022B0 - bl sub_810215C - movs r0, 0x5 - bl sub_81015D4 - b _081006D6 -_081006A8: - bl sub_81016AC - lsls r0, 24 - cmp r0, 0 - bne _08100718 - bl sub_81021B8 - lsls r0, 24 - cmp r0, 0 - bne _08100718 - bl sub_810131C - b _081006D6 -_081006C2: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08100718 - movs r0, 0x6 - bl sub_81015D4 - bl sub_8102178 -_081006D6: - ldr r0, _081006E4 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08100718 - .align 2, 0 -_081006E4: .4byte gUnknown_203ACEC -_081006E8: - bl sub_81016AC - lsls r0, 24 - cmp r0, 0 - bne _08100718 - bl sub_81021B8 - lsls r0, 24 - cmp r0, 0 - bne _08100718 - bl sub_810224C - bl sub_8101BC0 - ldr r0, _08100714 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_0810070E: - movs r0, 0 - b _0810071A - .align 2, 0 -_08100714: .4byte gUnknown_203ACEC -_08100718: - movs r0, 0x1 -_0810071A: - pop {r1} - bx r1 - thumb_func_end sub_8100660 - - thumb_func_start sub_8100720 -sub_8100720: @ 8100720 - push {lr} - bl sub_8101C80 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8100720 - - thumb_func_start sub_810072C -sub_810072C: @ 810072C - push {r4,lr} - ldr r4, _08100740 @ =gUnknown_203ACEC - ldr r0, [r4] - ldrh r0, [r0] - cmp r0, 0 - beq _08100744 - cmp r0, 0x1 - beq _08100754 - b _0810076A - .align 2, 0 -_08100740: .4byte gUnknown_203ACEC -_08100744: - movs r0, 0x1 - movs r1, 0x2 - bl sub_81019B0 - ldr r1, [r4] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_08100754: - bl sub_8101A10 - lsls r0, 24 - cmp r0, 0 - bne _0810076A - bl sub_8101C80 - bl sub_810224C - movs r0, 0 - b _0810076C -_0810076A: - movs r0, 0x1 -_0810076C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_810072C - - thumb_func_start sub_8100774 -sub_8100774: @ 8100774 - push {r4,lr} - ldr r4, _0810078C @ =gUnknown_203ACEC - ldr r0, [r4] - ldrh r0, [r0] - cmp r0, 0x1 - beq _081007A8 - cmp r0, 0x1 - bgt _08100790 - cmp r0, 0 - beq _08100796 - b _081007C8 - .align 2, 0 -_0810078C: .4byte gUnknown_203ACEC -_08100790: - cmp r0, 0x2 - beq _081007C0 - b _081007C8 -_08100796: - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - bl sub_81019B0 - ldr r1, [r4] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_081007A8: - bl sub_8101A10 - lsls r0, 24 - cmp r0, 0 - bne _081007C8 - bl sub_810224C - ldr r0, _081007C4 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_081007C0: - movs r0, 0 - b _081007CA - .align 2, 0 -_081007C4: .4byte gUnknown_203ACEC -_081007C8: - movs r0, 0x1 -_081007CA: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8100774 - - thumb_func_start sub_81007D0 -sub_81007D0: @ 81007D0 - push {lr} - ldr r0, _081007E8 @ =gUnknown_203ACEC - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x5 - bhi _08100888 - lsls r0, 2 - ldr r1, _081007EC @ =_081007F0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081007E8: .4byte gUnknown_203ACEC -_081007EC: .4byte _081007F0 - .align 2, 0 -_081007F0: - .4byte _08100808 - .4byte _08100816 - .4byte _08100826 - .4byte _08100838 - .4byte _08100858 - .4byte _0810087E -_08100808: - bl sub_8101C48 - bl sub_81020AC - bl sub_81022B0 - b _08100848 -_08100816: - bl sub_81020D0 - lsls r0, 24 - cmp r0, 0 - bne _08100888 - bl sub_81015BC - b _08100848 -_08100826: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08100888 - movs r0, 0x2 - bl sub_81015D4 - b _08100848 -_08100838: - bl sub_81016AC - lsls r0, 24 - cmp r0, 0 - bne _08100888 - movs r0, 0x2 - bl sub_81012E0 -_08100848: - ldr r0, _08100854 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08100888 - .align 2, 0 -_08100854: .4byte gUnknown_203ACEC -_08100858: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08100888 - bl sub_8101E80 - movs r0, 0x1 - bl sub_81022E0 - bl sub_810224C - bl sub_8102394 - ldr r0, _08100884 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_0810087E: - movs r0, 0 - b _0810088A - .align 2, 0 -_08100884: .4byte gUnknown_203ACEC -_08100888: - movs r0, 0x1 -_0810088A: - pop {r1} - bx r1 - thumb_func_end sub_81007D0 - - thumb_func_start sub_8100890 -sub_8100890: @ 8100890 - push {lr} - ldr r0, _081008A8 @ =gUnknown_203ACEC - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x5 - bhi _08100934 - lsls r0, 2 - ldr r1, _081008AC @ =_081008B0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081008A8: .4byte gUnknown_203ACEC -_081008AC: .4byte _081008B0 - .align 2, 0 -_081008B0: - .4byte _081008C8 - .4byte _081008CE - .4byte _081008E0 - .4byte _081008F2 - .4byte _08100914 - .4byte _0810092C -_081008C8: - bl sub_8100FDC - b _08100902 -_081008CE: - bl sub_8101F80 - bl sub_81022B0 - bl sub_81023F8 - bl sub_81015BC - b _08100902 -_081008E0: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08100934 - movs r0, 0x3 - bl sub_81015D4 - b _08100902 -_081008F2: - bl sub_81016AC - lsls r0, 24 - cmp r0, 0 - bne _08100934 - movs r0, 0 - bl ShowBg -_08100902: - ldr r0, _08100910 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08100934 - .align 2, 0 -_08100910: .4byte gUnknown_203ACEC -_08100914: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08100934 - bl sub_8101BA8 - ldr r0, _08100930 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_0810092C: - movs r0, 0 - b _08100936 - .align 2, 0 -_08100930: .4byte gUnknown_203ACEC -_08100934: - movs r0, 0x1 -_08100936: - pop {r1} - bx r1 - thumb_func_end sub_8100890 - - thumb_func_start sub_810093C -sub_810093C: @ 810093C - push {lr} - ldr r0, _08100954 @ =gUnknown_203ACEC - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x4 - bhi _081009F0 - lsls r0, 2 - ldr r1, _08100958 @ =_0810095C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08100954: .4byte gUnknown_203ACEC -_08100958: .4byte _0810095C - .align 2, 0 -_0810095C: - .4byte _08100970 - .4byte _08100982 - .4byte _08100994 - .4byte _081009A4 - .4byte _081009C4 -_08100970: - bl sub_8101F80 - bl sub_81022B0 - bl sub_81023F8 - bl sub_81015BC - b _081009B2 -_08100982: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081009F0 - movs r0, 0x4 - bl sub_81015D4 - b _081009B2 -_08100994: - bl sub_81016AC - lsls r0, 24 - cmp r0, 0 - bne _081009F0 - bl sub_810131C - b _081009B2 -_081009A4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081009F0 - bl sub_8101FAC -_081009B2: - ldr r0, _081009C0 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _081009F0 - .align 2, 0 -_081009C0: .4byte gUnknown_203ACEC -_081009C4: - bl sub_8102018 - lsls r0, 24 - cmp r0, 0 - bne _081009F0 - bl sub_8101BC0 - movs r0, 0 - bl sub_81022E0 - bl sub_810224C - ldr r0, _081009EC @ =gUnknown_203ACEC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - movs r0, 0 - b _081009F2 - .align 2, 0 -_081009EC: .4byte gUnknown_203ACEC -_081009F0: - movs r0, 0x1 -_081009F2: - pop {r1} - bx r1 - thumb_func_end sub_810093C - - thumb_func_start sub_81009F8 -sub_81009F8: @ 81009F8 - push {lr} - bl sub_8101F04 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_81009F8 - - thumb_func_start sub_8100A04 -sub_8100A04: @ 8100A04 - push {r4,lr} - ldr r4, _08100A1C @ =gUnknown_203ACEC - ldr r0, [r4] - ldrh r0, [r0] - cmp r0, 0x1 - beq _08100A30 - cmp r0, 0x1 - bgt _08100A20 - cmp r0, 0 - beq _08100A2A - b _08100A6E - .align 2, 0 -_08100A1C: .4byte gUnknown_203ACEC -_08100A20: - cmp r0, 0x2 - beq _08100A4C - cmp r0, 0x3 - beq _08100A6A - b _08100A6E -_08100A2A: - bl sub_81013EC - b _08100A42 -_08100A30: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08100A6E - movs r0, 0x1 - movs r1, 0x2 - bl sub_81019B0 -_08100A42: - ldr r1, [r4] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08100A6E -_08100A4C: - bl sub_8101A10 - lsls r0, 24 - cmp r0, 0 - bne _08100A6E - bl sub_8101F04 - bl sub_810224C - bl sub_8102394 - ldr r1, [r4] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_08100A6A: - movs r0, 0 - b _08100A70 -_08100A6E: - movs r0, 0x1 -_08100A70: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8100A04 - - thumb_func_start sub_8100A78 -sub_8100A78: @ 8100A78 - push {r4,lr} - ldr r4, _08100A90 @ =gUnknown_203ACEC - ldr r0, [r4] - ldrh r0, [r0] - cmp r0, 0x1 - beq _08100AA4 - cmp r0, 0x1 - bgt _08100A94 - cmp r0, 0 - beq _08100A9E - b _08100AE0 - .align 2, 0 -_08100A90: .4byte gUnknown_203ACEC -_08100A94: - cmp r0, 0x2 - beq _08100AC2 - cmp r0, 0x3 - beq _08100ADC - b _08100AE0 -_08100A9E: - bl sub_8101410 - b _08100AB8 -_08100AA4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08100AE0 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - bl sub_81019B0 -_08100AB8: - ldr r1, [r4] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08100AE0 -_08100AC2: - bl sub_8101A10 - lsls r0, 24 - cmp r0, 0 - bne _08100AE0 - bl sub_810224C - bl sub_8102394 - ldr r1, [r4] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_08100ADC: - movs r0, 0 - b _08100AE2 -_08100AE0: - movs r0, 0x1 -_08100AE2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8100A78 - - thumb_func_start sub_8100AE8 -sub_8100AE8: @ 8100AE8 - push {r4,r5,lr} - ldr r5, _08100B00 @ =gUnknown_203ACEC - ldr r0, [r5] - ldrh r0, [r0] - cmp r0, 0x1 - beq _08100B14 - cmp r0, 0x1 - bgt _08100B04 - cmp r0, 0 - beq _08100B0E - b _08100B66 - .align 2, 0 -_08100B00: .4byte gUnknown_203ACEC -_08100B04: - cmp r0, 0x2 - beq _08100B44 - cmp r0, 0x3 - beq _08100B62 - b _08100B66 -_08100B0E: - bl sub_8101434 - b _08100B3A -_08100B14: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08100B66 - bl sub_80FFE48 - adds r4, r0, 0 - bl sub_8101A48 - lsls r4, 24 - lsrs r4, 24 - subs r4, r0 - lsls r4, 16 - asrs r4, 16 - adds r0, r4, 0 - movs r1, 0x4 - bl sub_81019B0 -_08100B3A: - ldr r1, [r5] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08100B66 -_08100B44: - bl sub_8101A10 - lsls r0, 24 - cmp r0, 0 - bne _08100B66 - bl sub_8101F04 - bl sub_810224C - bl sub_8102394 - ldr r1, [r5] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_08100B62: - movs r0, 0 - b _08100B68 -_08100B66: - movs r0, 0x1 -_08100B68: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8100AE8 - - thumb_func_start sub_8100B70 -sub_8100B70: @ 8100B70 - push {r4,r5,lr} - ldr r5, _08100B88 @ =gUnknown_203ACEC - ldr r0, [r5] - ldrh r0, [r0] - cmp r0, 0x1 - beq _08100B9C - cmp r0, 0x1 - bgt _08100B8C - cmp r0, 0 - beq _08100B96 - b _08100BEA - .align 2, 0 -_08100B88: .4byte gUnknown_203ACEC -_08100B8C: - cmp r0, 0x2 - beq _08100BCC - cmp r0, 0x3 - beq _08100BE6 - b _08100BEA -_08100B96: - bl sub_8101478 - b _08100BC2 -_08100B9C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08100BEA - bl sub_80FFE48 - adds r4, r0, 0 - bl sub_8101A48 - lsls r4, 24 - lsrs r4, 24 - subs r4, r0 - lsls r4, 16 - asrs r4, 16 - adds r0, r4, 0 - movs r1, 0x4 - bl sub_81019B0 -_08100BC2: - ldr r1, [r5] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08100BEA -_08100BCC: - bl sub_8101A10 - lsls r0, 24 - cmp r0, 0 - bne _08100BEA - bl sub_810224C - bl sub_8102394 - ldr r1, [r5] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_08100BE6: - movs r0, 0 - b _08100BEC -_08100BEA: - movs r0, 0x1 -_08100BEC: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8100B70 - - thumb_func_start sub_8100BF4 -sub_8100BF4: @ 8100BF4 - push {r4,lr} - ldr r4, _08100C50 @ =gUnknown_203ACEC - movs r0, 0x98 - lsls r0, 5 - bl Alloc - adds r2, r0, 0 - str r2, [r4] - cmp r2, 0 - beq _08100C54 - movs r1, 0 - strh r1, [r2] - movs r3, 0xB6 - lsls r3, 2 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - adds r3, 0x4 - adds r0, r2, r3 - str r1, [r0] - movs r0, 0x1 - b _08100C56 - .align 2, 0 -_08100C50: .4byte gUnknown_203ACEC -_08100C54: - movs r0, 0 -_08100C56: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8100BF4 - - thumb_func_start sub_8100C5C -sub_8100C5C: @ 8100C5C - push {lr} - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r1, 0xC1 - lsls r1, 6 - movs r0, 0 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_8100C5C - - thumb_func_start sub_8100CBC -sub_8100CBC: @ 8100CBC - push {r4,lr} - bl ResetPaletteFade - ldr r0, _08100D10 @ =gUnknown_8E99D8C - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08100D14 @ =gUnknown_843F76C - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08100D18 @ =gUnknown_843F78C - movs r1, 0x40 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08100D1C @ =gUnknown_843F874 - movs r1, 0xA0 - movs r2, 0x8 - bl LoadPalette - ldr r4, _08100D20 @ =gUnknown_843F87C - adds r0, r4, 0 - movs r1, 0xB0 - movs r2, 0xA - bl LoadPalette - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA - bl LoadPalette - adds r0, r4, 0 - movs r1, 0x30 - movs r2, 0xA - bl LoadPalette - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08100D10: .4byte gUnknown_8E99D8C -_08100D14: .4byte gUnknown_843F76C -_08100D18: .4byte gUnknown_843F78C -_08100D1C: .4byte gUnknown_843F874 -_08100D20: .4byte gUnknown_843F87C - thumb_func_end sub_8100CBC - - thumb_func_start sub_8100D24 -sub_8100D24: @ 8100D24 - push {r4,r5,lr} - sub sp, 0x14 - bl sub_80FFCFC - adds r5, r0, 0 - cmp r5, 0 - beq _08100D7A - movs r0, 0x1 - adds r1, r5, 0 - movs r2, 0 - bl GetStringWidth - movs r4, 0x80 - subs r4, r0 - lsrs r4, 1 - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - lsls r4, 24 - lsrs r4, 24 - movs r1, 0 - str r1, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - str r1, [sp, 0x8] - movs r0, 0x2 - str r0, [sp, 0xC] - movs r0, 0x3 - str r0, [sp, 0x10] - movs r0, 0 - movs r1, 0x1 - adds r2, r5, 0 - adds r3, r4, 0 - bl sub_8100DC4 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram -_08100D7A: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8100D24 - - thumb_func_start sub_8100D84 -sub_8100D84: @ 8100D84 - push {r4-r6,lr} - sub sp, 0xC - adds r6, r2, 0 - ldr r2, [sp, 0x1C] - ldr r4, [sp, 0x20] - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r3, 24 - lsrs r3, 24 - lsls r2, 24 - lsrs r0, r2, 24 - lsls r4, 24 - lsrs r4, 24 - cmp r1, 0x1 - bne _08100DAC - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 -_08100DAC: - str r0, [sp] - str r4, [sp, 0x4] - ldr r0, [sp, 0x24] - str r0, [sp, 0x8] - adds r0, r5, 0 - adds r2, r6, 0 - bl AddTextPrinterParameterized - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8100D84 - - thumb_func_start sub_8100DC4 -sub_8100DC4: @ 8100DC4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - mov r9, r2 - ldr r2, [sp, 0x2C] - ldr r4, [sp, 0x30] - ldr r5, [sp, 0x34] - ldr r6, [sp, 0x38] - ldr r7, [sp, 0x3C] - mov r8, r7 - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - lsls r1, 24 - lsrs r1, 24 - lsls r3, 24 - lsrs r7, r3, 24 - lsls r2, 24 - lsrs r3, r2, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - mov r0, r8 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r1, 0x1 - bne _08100E0A - adds r0, r3, 0x2 - lsls r0, 24 - lsrs r3, r0, 24 -_08100E0A: - add r0, sp, 0xC - strb r5, [r0] - strb r6, [r0, 0x1] - strb r2, [r0, 0x2] - str r0, [sp] - lsls r0, r4, 24 - asrs r0, 24 - str r0, [sp, 0x4] - mov r0, r9 - str r0, [sp, 0x8] - mov r0, r12 - adds r2, r7, 0 - bl AddTextPrinterParameterized3 - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8100DC4 - - thumb_func_start sub_8100E34 -sub_8100E34: @ 8100E34 - push {lr} - sub sp, 0xC - movs r0, 0x20 - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0xE0 - bl TextWindow_SetUserSelectedFrame - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0xE - bl DrawTextBorderOuter - movs r0, 0 - bl sub_8100E7C - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl CopyBgTilemapBufferToVram - add sp, 0xC - pop {r0} - bx r0 - thumb_func_end sub_8100E34 - - thumb_func_start sub_8100E7C -sub_8100E7C: @ 8100E7C - push {lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r1, r0, 24 - adds r2, r1, 0 - movs r0, 0 - str r0, [sp, 0x10] - str r0, [sp, 0xC] - cmp r1, 0x1 - beq _08100EC2 - cmp r1, 0x1 - bgt _08100E9A - cmp r1, 0 - beq _08100EA4 - b _08100ECA -_08100E9A: - cmp r2, 0x2 - beq _08100EAE - cmp r2, 0x3 - beq _08100EB8 - b _08100ECA -_08100EA4: - add r1, sp, 0x10 - add r0, sp, 0xC - bl sub_80FFD58 - b _08100ECA -_08100EAE: - add r1, sp, 0x10 - add r0, sp, 0xC - bl sub_80FFDC8 - b _08100ECA -_08100EB8: - add r1, sp, 0x10 - add r0, sp, 0xC - bl sub_80FFD90 - b _08100ECA -_08100EC2: - add r1, sp, 0x10 - add r0, sp, 0xC - bl sub_80FFDF4 -_08100ECA: - movs r0, 0x1 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r2, [sp, 0xC] - cmp r2, 0 - beq _08100EEC - movs r1, 0 - str r1, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - str r1, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x1 - movs r3, 0 - bl sub_8100D84 -_08100EEC: - ldr r2, [sp, 0x10] - cmp r2, 0 - beq _08100F08 - movs r0, 0x10 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x1 - movs r3, 0 - bl sub_8100D84 -_08100F08: - movs r0, 0x1 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0x14 - pop {r0} - bx r0 - thumb_func_end sub_8100E7C - - thumb_func_start sub_8100F18 -sub_8100F18: @ 8100F18 - push {lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08100F40 @ =gUnknown_843F8D0 - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - str r0, [sp, 0x8] - adds r0, r2, 0 - movs r1, 0x1 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - add sp, 0xC - pop {r0} - bx r0 - .align 2, 0 -_08100F40: .4byte gUnknown_843F8D0 - thumb_func_end sub_8100F18 - - thumb_func_start sub_8100F44 -sub_8100F44: @ 8100F44 - push {r4,r5,lr} - sub sp, 0x8 - bl sub_80FFCE0 - lsls r0, 24 - ldr r5, _08100FC0 @ =0xffffff00 - ldr r3, [sp] - ands r3, r5 - movs r1, 0x3 - orrs r3, r1 - str r3, [sp] - ldr r1, _08100FC4 @ =gUnknown_843F888 - lsrs r0, 22 - adds r0, r1 - ldrb r2, [r0] - lsls r2, 8 - ldr r4, _08100FC8 @ =0xffff00ff - adds r1, r4, 0 - ands r1, r3 - orrs r1, r2 - str r1, [sp] - ldrb r2, [r0, 0x1] - lsls r2, 16 - ldr r3, _08100FCC @ =0xff00ffff - ands r3, r1 - orrs r3, r2 - str r3, [sp] - ldrb r2, [r0, 0x2] - lsls r2, 24 - ldr r1, _08100FD0 @ =0x00ffffff - ands r1, r3 - orrs r1, r2 - str r1, [sp] - ldrb r1, [r0, 0x3] - ldr r0, [sp, 0x4] - ands r0, r5 - orrs r0, r1 - ands r0, r4 - movs r1, 0xB0 - lsls r1, 4 - orrs r0, r1 - ldr r1, _08100FD4 @ =0x0000ffff - ands r0, r1 - movs r1, 0xC0 - lsls r1, 15 - orrs r0, r1 - str r0, [sp, 0x4] - mov r0, sp - bl AddWindow - ldr r1, _08100FD8 @ =gUnknown_203ACEC - ldr r1, [r1] - strh r0, [r1, 0x2] - lsls r0, 24 - lsrs r0, 24 - bl PutWindowTilemap - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08100FC0: .4byte 0xffffff00 -_08100FC4: .4byte gUnknown_843F888 -_08100FC8: .4byte 0xffff00ff -_08100FCC: .4byte 0xff00ffff -_08100FD0: .4byte 0x00ffffff -_08100FD4: .4byte 0x0000ffff -_08100FD8: .4byte gUnknown_203ACEC - thumb_func_end sub_8100F44 - - thumb_func_start sub_8100FDC -sub_8100FDC: @ 8100FDC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - bl sub_80FFD1C - adds r4, r0, 0 - bl sub_80FFD34 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - bl sub_80FFD28 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0xC] - bl sub_80FFCE0 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x10] - ldr r0, _0810101C @ =gUnknown_203ACEC - ldr r0, [r0] - ldrb r0, [r0, 0x2] - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r6, 0 - b _081010D6 - .align 2, 0 -_0810101C: .4byte gUnknown_203ACEC -_08101020: - ldr r0, _0810105C @ =gUnknown_203ACEC - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0xA - movs r0, 0xFF - strb r0, [r1, 0xA] - adds r0, r2, 0 - ldr r1, _08101060 @ =gUnknown_843F8DB - bl StringAppend - adds r2, r0, 0 - movs r5, 0 - lsls r7, r6, 28 - adds r0, r6, 0x1 - mov r9, r0 - cmp r5, r8 - bge _081010B4 - ldr r0, _08101064 @ =0x0000ffff - mov r10, r0 -_08101046: - ldrh r0, [r4] - cmp r0, r10 - beq _08101068 - adds r1, r0, 0 - adds r0, r2, 0 - bl CopyEasyChatWord - adds r2, r0, 0 - adds r4, 0x2 - b _08101096 - .align 2, 0 -_0810105C: .4byte gUnknown_203ACEC -_08101060: .4byte gUnknown_843F8DB -_08101064: .4byte 0x0000ffff -_08101068: - adds r0, r2, 0 - movs r1, 0 - movs r2, 0x4 - bl WriteColorChangeControlCode - adds r2, r0, 0 - adds r4, 0x2 - movs r3, 0xF9 - movs r1, 0x9 - movs r0, 0x6 -_0810107C: - strb r3, [r2] - adds r2, 0x1 - strb r1, [r2] - adds r2, 0x1 - subs r0, 0x1 - cmp r0, 0 - bge _0810107C - adds r0, r2, 0 - movs r1, 0 - movs r2, 0x2 - bl WriteColorChangeControlCode - adds r2, r0, 0 -_08101096: - adds r0, r2, 0 - ldr r1, _081010F8 @ =gUnknown_843F8DB - bl StringAppend - adds r2, r0, 0 - ldr r0, [sp, 0x10] - cmp r0, 0x2 - bne _081010AE - cmp r5, 0 - bne _081010AE - cmp r6, 0x4 - beq _081010B4 -_081010AE: - adds r5, 0x1 - cmp r5, r8 - blt _08101046 -_081010B4: - movs r0, 0xFF - strb r0, [r2] - ldr r0, _081010FC @ =gUnknown_203ACEC - ldr r2, [r0] - ldrb r0, [r2, 0x2] - adds r2, 0xA - lsrs r1, r7, 24 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl sub_8100D84 - mov r6, r9 -_081010D6: - ldr r0, [sp, 0xC] - cmp r6, r0 - blt _08101020 - ldr r0, _081010FC @ =gUnknown_203ACEC - ldr r0, [r0] - ldrb r0, [r0, 0x2] - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081010F8: .4byte gUnknown_843F8DB -_081010FC: .4byte gUnknown_203ACEC - thumb_func_end sub_8100FDC - - thumb_func_start sub_8101100 -sub_8101100: @ 8101100 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r8, r0 - bl sub_80FFCE0 - lsls r0, 24 - lsrs r5, r0, 24 - movs r0, 0 - str r0, [sp] - ldr r2, _08101194 @ =0x01000200 - mov r0, sp - mov r1, r8 - bl CpuFastSet - cmp r5, 0x2 - bne _081011A4 - ldr r0, _08101198 @ =gUnknown_843F888 - adds r1, r0, 0 - adds r1, 0x8 - ldrb r5, [r0, 0x8] - ldrb r0, [r1, 0x2] - adds r4, r5, r0 - ldrb r2, [r1, 0x1] - ldrb r0, [r1, 0x3] - adds r0, r2 - mov r12, r0 - adds r7, r2, 0 - cmp r7, r12 - blt _08101144 - b _08101296 -_08101144: - adds r3, r5, 0 - lsls r0, r3, 1 - mov r9, r0 -_0810114A: - subs r6, r3, 0x1 - lsls r0, r7, 5 - adds r1, r0, r6 - lsls r1, 1 - add r1, r8 - ldr r5, _0810119C @ =0x00001005 - adds r2, r5, 0 - strh r2, [r1] - adds r6, r3, 0 - adds r5, r0, 0 - adds r2, r7, 0x1 - cmp r6, r4 - bge _0810117E - movs r0, 0x80 - lsls r0, 5 - adds r1, r0, 0 - lsls r0, r7, 6 - add r0, r8 - add r0, r9 - subs r6, r4, r6 -_08101172: - strh r1, [r0] - adds r0, 0x2 - subs r6, 0x1 - cmp r6, 0 - bne _08101172 - adds r6, r4, 0 -_0810117E: - adds r0, r5, r6 - lsls r0, 1 - add r0, r8 - ldr r5, _081011A0 @ =0x00001007 - adds r1, r5, 0 - strh r1, [r0] - adds r7, r2, 0 - cmp r7, r12 - blt _0810114A - b _08101296 - .align 2, 0 -_08101194: .4byte 0x01000200 -_08101198: .4byte gUnknown_843F888 -_0810119C: .4byte 0x00001005 -_081011A0: .4byte 0x00001007 -_081011A4: - ldr r6, _081012A8 @ =gUnknown_843F888 - mov r9, r6 - lsls r5, 2 - adds r1, r5, r6 - ldrb r3, [r1, 0x1] - subs r7, r3, 0x1 - ldrb r2, [r1] - subs r6, r2, 0x1 - ldrb r0, [r1, 0x2] - adds r4, r2, r0 - ldrb r0, [r1, 0x3] - adds r3, r0 - mov r12, r3 - lsls r0, r7, 5 - adds r0, r6 - lsls r0, 1 - add r0, r8 - ldr r3, _081012AC @ =0x00001001 - adds r1, r3, 0 - strh r1, [r0] - adds r6, r2, 0 - mov r10, r9 - mov r9, r5 - cmp r6, r4 - bge _081011F0 - ldr r5, _081012B0 @ =0x00001002 - adds r2, r5, 0 - lsls r1, r6, 1 - lsls r0, r7, 6 - add r0, r8 - adds r1, r0 - subs r6, r4, r6 -_081011E4: - strh r2, [r1] - adds r1, 0x2 - subs r6, 0x1 - cmp r6, 0 - bne _081011E4 - adds r6, r4, 0 -_081011F0: - lsls r0, r7, 5 - adds r0, r6 - lsls r0, 1 - add r0, r8 - ldr r6, _081012B4 @ =0x00001003 - adds r1, r6, 0 - strh r1, [r0] - adds r7, 0x1 - cmp r7, r12 - bge _08101252 - ldr r0, _081012A8 @ =gUnknown_843F888 - add r0, r9 - ldrb r3, [r0] - lsls r5, r3, 1 -_0810120C: - subs r6, r3, 0x1 - lsls r0, r7, 5 - adds r0, r6 - lsls r0, 1 - add r0, r8 - ldr r2, _081012B8 @ =0x00001005 - adds r1, r2, 0 - strh r1, [r0] - adds r6, r3, 0 - adds r2, r7, 0x1 - cmp r6, r4 - bge _0810123E - movs r0, 0x80 - lsls r0, 5 - adds r1, r0, 0 - lsls r0, r7, 6 - add r0, r8 - adds r0, r5, r0 - subs r6, r4, r6 -_08101232: - strh r1, [r0] - adds r0, 0x2 - subs r6, 0x1 - cmp r6, 0 - bne _08101232 - adds r6, r4, 0 -_0810123E: - lsls r0, r7, 5 - adds r0, r6 - lsls r0, 1 - add r0, r8 - ldr r6, _081012BC @ =0x00001007 - adds r1, r6, 0 - strh r1, [r0] - adds r7, r2, 0 - cmp r7, r12 - blt _0810120C -_08101252: - mov r0, r9 - add r0, r10 - ldrb r3, [r0] - subs r6, r3, 0x1 - lsls r2, r7, 5 - adds r0, r2, r6 - lsls r0, 1 - add r0, r8 - ldr r5, _081012C0 @ =0x00001009 - adds r1, r5, 0 - strh r1, [r0] - adds r6, r3, 0 - adds r5, r2, 0 - cmp r6, r4 - bge _0810128A - ldr r0, _081012C4 @ =0x0000100a - adds r2, r0, 0 - lsls r1, r6, 1 - lsls r0, r7, 6 - add r0, r8 - adds r0, r1, r0 - subs r6, r4, r6 -_0810127E: - strh r2, [r0] - adds r0, 0x2 - subs r6, 0x1 - cmp r6, 0 - bne _0810127E - adds r6, r4, 0 -_0810128A: - adds r0, r5, r6 - lsls r0, 1 - add r0, r8 - ldr r2, _081012C8 @ =0x0000100b - adds r1, r2, 0 - strh r1, [r0] -_08101296: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081012A8: .4byte gUnknown_843F888 -_081012AC: .4byte 0x00001001 -_081012B0: .4byte 0x00001002 -_081012B4: .4byte 0x00001003 -_081012B8: .4byte 0x00001005 -_081012BC: .4byte 0x00001007 -_081012C0: .4byte 0x00001009 -_081012C4: .4byte 0x0000100a -_081012C8: .4byte 0x0000100b - thumb_func_end sub_8101100 - - thumb_func_start sub_81012CC -sub_81012CC: @ 81012CC - push {lr} - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - pop {r0} - bx r0 - thumb_func_end sub_81012CC - - thumb_func_start sub_81012E0 -sub_81012E0: @ 81012E0 - push {r4,lr} - adds r4, r0, 0 - bl sub_810198C - movs r0, 0x2 - movs r1, 0x11 - bl FillWindowPixelBuffer - cmp r4, 0x1 - beq _08101304 - cmp r4, 0x1 - bcc _081012FE - cmp r4, 0x2 - beq _0810130A - b _0810130E -_081012FE: - bl sub_810133C - b _0810130E -_08101304: - bl sub_81013A0 - b _0810130E -_0810130A: - bl sub_81013DC -_0810130E: - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81012E0 - - thumb_func_start sub_810131C -sub_810131C: @ 810131C - push {lr} - bl sub_80FFE1C - lsls r0, 24 - cmp r0, 0 - bne _08101330 - movs r0, 0 - bl sub_81012E0 - b _08101336 -_08101330: - movs r0, 0x1 - bl sub_81012E0 -_08101336: - pop {r0} - bx r0 - thumb_func_end sub_810131C - - thumb_func_start sub_810133C -sub_810133C: @ 810133C - push {r4-r7,lr} - sub sp, 0xC - movs r5, 0 - movs r7, 0x60 -_08101344: - movs r4, 0 - lsls r0, r7, 24 - lsrs r6, r0, 24 -_0810134A: - lsls r0, r5, 24 - lsrs r0, 24 - adds r5, 0x1 - bl GetSelectedGroupByIndex - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x16 - beq _0810138A - bl GetEasyChatWordGroupName - adds r2, r0, 0 - movs r0, 0x54 - adds r3, r4, 0 - muls r3, r0 - adds r3, 0xA - lsls r3, 24 - lsrs r3, 24 - str r6, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0x1 - bl sub_8100D84 - adds r4, 0x1 - cmp r4, 0x1 - ble _0810134A - adds r7, 0x10 - b _08101344 -_0810138A: - bl sub_80FFE28 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_81019B0 - add sp, 0xC - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_810133C - - thumb_func_start sub_81013A0 -sub_81013A0: @ 81013A0 - push {r4-r6,lr} - sub sp, 0xC - movs r5, 0 - movs r4, 0xC0 - lsls r4, 23 - ldr r6, _081013D8 @ =gUnknown_843F8E0 -_081013AC: - ldm r6!, {r2} - lsrs r0, r4, 24 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0x1 - movs r3, 0xA - bl sub_8100D84 - movs r0, 0x80 - lsls r0, 21 - adds r4, r0 - adds r5, 0x1 - cmp r5, 0x3 - bls _081013AC - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081013D8: .4byte gUnknown_843F8E0 - thumb_func_end sub_81013A0 - - thumb_func_start sub_81013DC -sub_81013DC: @ 81013DC - push {lr} - movs r0, 0 - movs r1, 0x4 - bl sub_81014AC - pop {r0} - bx r0 - thumb_func_end sub_81013DC - - thumb_func_start sub_81013EC -sub_81013EC: @ 81013EC - push {r4,lr} - bl sub_80FFE48 - adds r4, r0, 0 - adds r4, 0x3 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8101558 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_81014AC - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81013EC - - thumb_func_start sub_8101410 -sub_8101410: @ 8101410 - push {r4,lr} - bl sub_80FFE48 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8101558 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_81014AC - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8101410 - - thumb_func_start sub_8101434 -sub_8101434: @ 8101434 - push {r4,r5,lr} - bl sub_80FFE48 - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - adds r0, r5, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_80FFE54 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bls _08101456 - adds r4, r0, 0 -_08101456: - cmp r5, r4 - bcs _08101470 - subs r4, r5 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8101558 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_81014AC -_08101470: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8101434 - - thumb_func_start sub_8101478 -sub_8101478: @ 8101478 - push {r4,r5,lr} - bl sub_80FFE48 - lsls r0, 24 - lsrs r5, r0, 24 - bl sub_8101A48 - lsls r0, 24 - lsrs r0, 24 - cmp r5, r0 - bcs _081014A4 - subs r4, r0, r5 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8101558 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_81014AC -_081014A4: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8101478 - - thumb_func_start sub_81014AC -sub_81014AC: @ 81014AC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - lsls r4, r0, 1 - lsls r0, 4 - adds r1, r0, 0 - adds r1, 0x60 - movs r0, 0xFF - ands r1, r0 - movs r0, 0 - cmp r0, r10 - bge _08101538 - ldr r2, _08101550 @ =gUnknown_203ACEC - mov r9, r2 -_081014D8: - movs r5, 0 - movs r2, 0x10 - adds r2, r1 - mov r8, r2 - adds r7, r0, 0x1 - lsls r0, r1, 24 - lsrs r6, r0, 24 -_081014E6: - lsls r0, r4, 16 - lsrs r0, 16 - adds r4, 0x1 - bl GetDisplayedWordByIndex - lsls r0, 16 - lsrs r1, r0, 16 - ldr r0, _08101554 @ =0x0000ffff - cmp r1, r0 - beq _0810152A - mov r2, r9 - ldr r0, [r2] - adds r0, 0xCB - movs r2, 0 - bl CopyEasyChatWordPadded - mov r0, r9 - ldr r2, [r0] - adds r2, 0xCB - movs r0, 0xD - adds r3, r5, 0 - muls r3, r0 - adds r3, 0x3 - lsls r3, 27 - lsrs r3, 24 - str r6, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0x1 - bl sub_8100D84 -_0810152A: - adds r5, 0x1 - cmp r5, 0x1 - ble _081014E6 - mov r1, r8 - adds r0, r7, 0 - cmp r0, r10 - blt _081014D8 -_08101538: - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08101550: .4byte gUnknown_203ACEC -_08101554: .4byte 0x0000ffff - thumb_func_end sub_81014AC - - thumb_func_start sub_8101558 -sub_8101558: @ 8101558 - push {r4,r5,lr} - sub sp, 0x8 - lsls r0, 24 - lsls r1, 24 - lsrs r0, 20 - adds r3, r0, 0 - adds r3, 0x60 - movs r0, 0xFF - ands r3, r0 - lsrs r0, r1, 20 - adds r1, r3, r0 - cmp r1, 0xFF - ble _08101584 - ldr r0, _08101580 @ =0xffffff00 - adds r4, r1, r0 - movs r0, 0x80 - lsls r0, 1 - subs r0, r3 - b _08101586 - .align 2, 0 -_08101580: .4byte 0xffffff00 -_08101584: - movs r4, 0 -_08101586: - movs r5, 0xE0 - str r5, [sp] - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x4] - movs r0, 0x2 - movs r1, 0x11 - movs r2, 0 - bl FillWindowPixelRect - cmp r4, 0 - beq _081015B2 - str r5, [sp] - lsls r0, r4, 16 - lsrs r0, 16 - str r0, [sp, 0x4] - movs r0, 0x2 - movs r1, 0x11 - movs r2, 0 - movs r3, 0 - bl FillWindowPixelRect -_081015B2: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8101558 - - thumb_func_start sub_81015BC -sub_81015BC: @ 81015BC - push {lr} - movs r0, 0x2 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_81015BC - - thumb_func_start sub_81015D4 -sub_81015D4: @ 81015D4 - push {lr} - ldr r1, _081015E8 @ =gUnknown_203ACEC - cmp r0, 0x6 - bhi _0810168E - lsls r0, 2 - ldr r1, _081015EC @ =_081015F0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081015E8: .4byte gUnknown_203ACEC -_081015EC: .4byte _081015F0 - .align 2, 0 -_081015F0: - .4byte _0810160C - .4byte _08101620 - .4byte _08101630 - .4byte _08101644 - .4byte _08101658 - .4byte _0810166C - .4byte _08101680 -_0810160C: - ldr r1, _0810161C @ =gUnknown_203ACEC - ldr r2, [r1] - movs r0, 0 - strb r0, [r2, 0x6] - ldr r2, [r1] - movs r0, 0xA - b _0810168C - .align 2, 0 -_0810161C: .4byte gUnknown_203ACEC -_08101620: - ldr r1, _0810162C @ =gUnknown_203ACEC - ldr r2, [r1] - movs r3, 0 - movs r0, 0x9 - b _0810164C - .align 2, 0 -_0810162C: .4byte gUnknown_203ACEC -_08101630: - ldr r1, _08101640 @ =gUnknown_203ACEC - ldr r2, [r1] - movs r0, 0xB - strb r0, [r2, 0x6] - ldr r2, [r1] - movs r0, 0x11 - b _0810168C - .align 2, 0 -_08101640: .4byte gUnknown_203ACEC -_08101644: - ldr r1, _08101654 @ =gUnknown_203ACEC - ldr r2, [r1] - movs r3, 0 - movs r0, 0x11 -_0810164C: - strb r0, [r2, 0x6] - ldr r0, [r1] - strb r3, [r0, 0x7] - b _0810168E - .align 2, 0 -_08101654: .4byte gUnknown_203ACEC -_08101658: - ldr r1, _08101668 @ =gUnknown_203ACEC - ldr r2, [r1] - movs r0, 0x11 - strb r0, [r2, 0x6] - ldr r2, [r1] - movs r0, 0xA - b _0810168C - .align 2, 0 -_08101668: .4byte gUnknown_203ACEC -_0810166C: - ldr r1, _0810167C @ =gUnknown_203ACEC - ldr r2, [r1] - movs r0, 0x12 - strb r0, [r2, 0x6] - ldr r2, [r1] - movs r0, 0x16 - b _0810168C - .align 2, 0 -_0810167C: .4byte gUnknown_203ACEC -_08101680: - ldr r1, _081016A8 @ =gUnknown_203ACEC - ldr r2, [r1] - movs r0, 0x16 - strb r0, [r2, 0x6] - ldr r2, [r1] - movs r0, 0x12 -_0810168C: - strb r0, [r2, 0x7] -_0810168E: - ldr r1, [r1] - ldrb r0, [r1, 0x6] - movs r3, 0x1 - negs r3, r3 - adds r2, r3, 0 - ldrb r3, [r1, 0x7] - cmp r0, r3 - bcs _081016A0 - movs r2, 0x1 -_081016A0: - strb r2, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_081016A8: .4byte gUnknown_203ACEC - thumb_func_end sub_81015D4 - - thumb_func_start sub_81016AC -sub_81016AC: @ 81016AC - push {r4,lr} - ldr r4, _081016D8 @ =gUnknown_203ACEC - ldr r1, [r4] - ldrb r2, [r1, 0x6] - ldrb r0, [r1, 0x7] - cmp r2, r0 - beq _081016DC - ldrb r0, [r1, 0x8] - adds r0, r2, r0 - strb r0, [r1, 0x6] - ldr r0, [r4] - ldrb r0, [r0, 0x6] - bl sub_81016E4 - ldr r0, [r4] - ldrb r1, [r0, 0x6] - ldrb r0, [r0, 0x7] - eors r1, r0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - b _081016DE - .align 2, 0 -_081016D8: .4byte gUnknown_203ACEC -_081016DC: - movs r0, 0 -_081016DE: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81016AC - - thumb_func_start sub_81016E4 -sub_81016E4: @ 81016E4 - push {r4,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x1E - str r0, [sp] - movs r0, 0xA - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0xA - bl FillBgTilemapBufferRect_Palette0 - cmp r4, 0x16 - bls _08101706 - b _08101822 -_08101706: - lsls r0, r4, 2 - ldr r1, _08101710 @ =_08101714 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08101710: .4byte _08101714 - .align 2, 0 -_08101714: - .4byte _08101822 - .4byte _08101770 - .4byte _08101778 - .4byte _08101780 - .4byte _08101788 - .4byte _08101790 - .4byte _08101798 - .4byte _08101808 - .4byte _081017FA - .4byte _081017EC - .4byte _081017DE - .4byte _081017A6 - .4byte _081017AE - .4byte _081017B6 - .4byte _081017BE - .4byte _081017C6 - .4byte _081017CE - .4byte _081017D6 - .4byte _081017DE - .4byte _081017EC - .4byte _081017FA - .4byte _08101808 - .4byte _08101816 -_08101770: - movs r0, 0xB - movs r1, 0xE - movs r2, 0x3 - b _0810179E -_08101778: - movs r0, 0x9 - movs r1, 0xE - movs r2, 0x7 - b _0810179E -_08101780: - movs r0, 0x7 - movs r1, 0xE - movs r2, 0xB - b _0810179E -_08101788: - movs r0, 0x5 - movs r1, 0xE - movs r2, 0xF - b _0810179E -_08101790: - movs r0, 0x3 - movs r1, 0xE - movs r2, 0x13 - b _0810179E -_08101798: - movs r0, 0x1 - movs r1, 0xE - movs r2, 0x17 -_0810179E: - movs r3, 0x2 - bl sub_8101830 - b _08101822 -_081017A6: - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x18 - b _081017E4 -_081017AE: - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x19 - b _081017E4 -_081017B6: - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x1A - b _081017E4 -_081017BE: - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x1B - b _081017E4 -_081017C6: - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x1C - b _081017E4 -_081017CE: - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x1D - b _081017E4 -_081017D6: - movs r0, 0 - movs r1, 0xA - movs r2, 0x1E - b _081017E4 -_081017DE: - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x17 -_081017E4: - movs r3, 0xA - bl sub_8101830 - b _08101822 -_081017EC: - movs r0, 0x1 - movs r1, 0xB - movs r2, 0x17 - movs r3, 0x8 - bl sub_8101830 - b _08101822 -_081017FA: - movs r0, 0x1 - movs r1, 0xC - movs r2, 0x17 - movs r3, 0x6 - bl sub_8101830 - b _08101822 -_08101808: - movs r0, 0x1 - movs r1, 0xD - movs r2, 0x17 - movs r3, 0x4 - bl sub_8101830 - b _08101822 -_08101816: - movs r0, 0x1 - movs r1, 0xE - movs r2, 0x17 - movs r3, 0x2 - bl sub_8101830 -_08101822: - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81016E4 - - thumb_func_start sub_8101830 -sub_8101830: @ 8101830 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - mov r12, r0 - adds r7, r1, 0 - mov r9, r2 - mov r10, r3 - ldr r0, _08101968 @ =gUnknown_203ACEC - ldr r0, [r0] - movs r1, 0xC0 - lsls r1, 2 - adds r6, r0, r1 - mov r0, r12 - add r0, r9 - subs r5, r0, 0x1 - adds r0, r7, r3 - subs r0, 0x1 - mov r8, r0 - mov r2, r12 - adds r3, r7, 0 - lsls r0, r3, 5 - adds r0, r2 - lsls r0, 1 - adds r0, r6 - ldr r4, _0810196C @ =0x00004001 - adds r1, r4, 0 - strh r1, [r0] - adds r2, 0x1 - cmp r2, r5 - bge _0810188C - ldr r0, _08101970 @ =0x00004002 - adds r4, r0, 0 - lsls r1, r2, 1 - lsls r0, r3, 6 - adds r0, r6 - adds r1, r0 - subs r2, r5, r2 -_08101880: - strh r4, [r1] - adds r1, 0x2 - subs r2, 0x1 - cmp r2, 0 - bne _08101880 - adds r2, r5, 0 -_0810188C: - lsls r0, r3, 5 - adds r0, r2 - lsls r0, 1 - adds r0, r6 - ldr r2, _08101974 @ =0x00004003 - adds r1, r2, 0 - strh r1, [r0] - adds r3, 0x1 - mov r4, r12 - adds r4, 0x1 - adds r0, r7, 0x1 - str r0, [sp, 0x4] - mov r1, r9 - subs r1, 0x2 - str r1, [sp] - movs r2, 0x2 - negs r2, r2 - add r10, r2 - cmp r3, r8 - bge _081018FC - lsls r7, r4, 1 - mov r9, r7 -_081018B8: - lsls r0, r3, 5 - add r0, r12 - lsls r0, 1 - adds r0, r6 - ldr r2, _08101978 @ =0x00004005 - adds r1, r2, 0 - strh r1, [r0] - adds r2, r4, 0 - adds r7, r3, 0x1 - cmp r4, r5 - bge _081018E8 - movs r0, 0x80 - lsls r0, 7 - adds r1, r0, 0 - lsls r0, r3, 6 - adds r0, r6 - add r0, r9 - subs r2, r5, r4 -_081018DC: - strh r1, [r0] - adds r0, 0x2 - subs r2, 0x1 - cmp r2, 0 - bne _081018DC - adds r2, r5, 0 -_081018E8: - lsls r0, r3, 5 - adds r0, r2 - lsls r0, 1 - adds r0, r6 - ldr r2, _0810197C @ =0x00004007 - adds r1, r2, 0 - strh r1, [r0] - adds r3, r7, 0 - cmp r3, r8 - blt _081018B8 -_081018FC: - lsls r0, r3, 5 - mov r7, r12 - adds r1, r0, r7 - lsls r1, 1 - adds r1, r6 - ldr r7, _08101980 @ =0x00004009 - adds r2, r7, 0 - strh r2, [r1] - adds r2, r4, 0 - mov r12, r0 - cmp r4, r5 - bge _0810192E - ldr r0, _08101984 @ =0x0000400a - adds r7, r0, 0 - lsls r1, r4, 1 - lsls r0, r3, 6 - adds r0, r6 - adds r0, r1, r0 - subs r2, r5, r4 -_08101922: - strh r7, [r0] - adds r0, 0x2 - subs r2, 0x1 - cmp r2, 0 - bne _08101922 - adds r2, r5, 0 -_0810192E: - mov r1, r12 - adds r0, r1, r2 - lsls r0, 1 - adds r0, r6 - ldr r2, _08101988 @ =0x0000400b - adds r1, r2, 0 - strh r1, [r0] - lsls r0, r4, 27 - lsrs r0, 24 - ldr r3, [sp, 0x4] - lsls r1, r3, 27 - lsrs r1, 24 - ldr r4, [sp] - lsls r2, r4, 27 - lsrs r2, 24 - mov r7, r10 - lsls r3, r7, 27 - lsrs r3, 24 - bl sub_8101A5C - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08101968: .4byte gUnknown_203ACEC -_0810196C: .4byte 0x00004001 -_08101970: .4byte 0x00004002 -_08101974: .4byte 0x00004003 -_08101978: .4byte 0x00004005 -_0810197C: .4byte 0x00004007 -_08101980: .4byte 0x00004009 -_08101984: .4byte 0x0000400a -_08101988: .4byte 0x0000400b - thumb_func_end sub_8101830 - - thumb_func_start sub_810198C -sub_810198C: @ 810198C - push {lr} - movs r1, 0x80 - lsls r1, 4 - movs r0, 0x2 - movs r2, 0 - bl ChangeBgY - ldr r0, _081019AC @ =gUnknown_203ACEC - ldr r0, [r0] - movs r1, 0xB3 - lsls r1, 2 - adds r0, r1 - movs r1, 0 - strh r1, [r0] - pop {r0} - bx r0 - .align 2, 0 -_081019AC: .4byte gUnknown_203ACEC - thumb_func_end sub_810198C - - thumb_func_start sub_81019B0 -sub_81019B0: @ 81019B0 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r1, 24 - lsrs r5, r1, 24 - movs r0, 0x2 - bl GetBgY - adds r2, r0, 0 - ldr r0, _081019FC @ =gUnknown_203ACEC - ldr r3, [r0] - movs r0, 0xB3 - lsls r0, 2 - adds r1, r3, r0 - ldrh r0, [r1] - adds r0, r4 - strh r0, [r1] - lsls r4, 20 - asrs r4, 16 - lsls r0, r4, 8 - adds r2, r0 - cmp r5, 0 - beq _08101A00 - movs r1, 0xB4 - lsls r1, 2 - adds r0, r3, r1 - str r2, [r0] - movs r0, 0xB5 - lsls r0, 2 - adds r1, r3, r0 - lsls r0, r5, 8 - str r0, [r1] - cmp r4, 0 - bge _08101A0A - negs r0, r0 - str r0, [r1] - b _08101A0A - .align 2, 0 -_081019FC: .4byte gUnknown_203ACEC -_08101A00: - movs r0, 0x2 - adds r1, r2, 0 - movs r2, 0 - bl ChangeBgY -_08101A0A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81019B0 - - thumb_func_start sub_8101A10 -sub_8101A10: @ 8101A10 - push {lr} - movs r0, 0x2 - bl GetBgY - ldr r1, _08101A3C @ =gUnknown_203ACEC - ldr r2, [r1] - movs r3, 0xB4 - lsls r3, 2 - adds r1, r2, r3 - ldr r1, [r1] - cmp r0, r1 - beq _08101A40 - movs r1, 0xB5 - lsls r1, 2 - adds r0, r2, r1 - ldr r1, [r0] - movs r0, 0x2 - movs r2, 0x1 - bl ChangeBgY - movs r0, 0x1 - b _08101A42 - .align 2, 0 -_08101A3C: .4byte gUnknown_203ACEC -_08101A40: - movs r0, 0 -_08101A42: - pop {r1} - bx r1 - thumb_func_end sub_8101A10 - - thumb_func_start sub_8101A48 -sub_8101A48: @ 8101A48 - ldr r0, _08101A58 @ =gUnknown_203ACEC - ldr r0, [r0] - movs r1, 0xB3 - lsls r1, 2 - adds r0, r1 - ldrh r0, [r0] - bx lr - .align 2, 0 -_08101A58: .4byte gUnknown_203ACEC - thumb_func_end sub_8101A48 - - thumb_func_start sub_8101A5C -sub_8101A5C: @ 8101A5C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - lsls r4, r0, 8 - adds r0, r2 - orrs r4, r0 - lsls r5, r1, 8 - adds r1, r3 - orrs r5, r1 - movs r0, 0x40 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x44 - adds r1, r5, 0 - bl SetGpuReg - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8101A5C - - thumb_func_start sub_8101A90 -sub_8101A90: @ 8101A90 - push {r4,r5,lr} - ldr r0, _08101AB8 @ =gUnknown_843F8F0 - bl LoadSpriteSheets - ldr r0, _08101ABC @ =gUnknown_843F910 - bl LoadSpritePalettes - movs r5, 0 - ldr r4, _08101AC0 @ =gUnknown_843F938 -_08101AA2: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x3 - bls _08101AA2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08101AB8: .4byte gUnknown_843F8F0 -_08101ABC: .4byte gUnknown_843F910 -_08101AC0: .4byte gUnknown_843F938 - thumb_func_end sub_8101A90 - - thumb_func_start sub_8101AC4 -sub_8101AC4: @ 8101AC4 - push {lr} - bl sub_80FFCE0 - lsls r0, 24 - ldr r1, _08101B10 @ =gUnknown_843F888 - lsrs r0, 22 - adds r0, r1 - ldrb r1, [r0] - lsls r1, 19 - ldrb r2, [r0, 0x1] - adds r2, 0x1 - lsls r2, 3 - adds r2, 0x1 - ldr r0, _08101B14 @ =gUnknown_843F968 - movs r3, 0xD0 - lsls r3, 12 - adds r1, r3 - asrs r1, 16 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08101B18 @ =gUnknown_203ACEC - ldr r2, [r1] - movs r1, 0xB6 - lsls r1, 2 - adds r2, r1 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08101B1C @ =gSprites - adds r1, r0 - str r1, [r2] - movs r0, 0x1 - strh r0, [r1, 0x30] - pop {r0} - bx r0 - .align 2, 0 -_08101B10: .4byte gUnknown_843F888 -_08101B14: .4byte gUnknown_843F968 -_08101B18: .4byte gUnknown_203ACEC -_08101B1C: .4byte gSprites - thumb_func_end sub_8101AC4 - - thumb_func_start sub_8101B20 -sub_8101B20: @ 8101B20 - push {lr} - adds r1, r0, 0 - movs r2, 0x30 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _08101B4E - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _08101B4E - movs r0, 0 - strh r0, [r1, 0x2E] - ldrh r0, [r1, 0x24] - adds r0, 0x1 - strh r0, [r1, 0x24] - lsls r0, 16 - cmp r0, 0 - ble _08101B4E - ldr r0, _08101B54 @ =0x0000fffa - strh r0, [r1, 0x24] -_08101B4E: - pop {r0} - bx r0 - .align 2, 0 -_08101B54: .4byte 0x0000fffa - thumb_func_end sub_8101B20 - - thumb_func_start sub_8101B58 -sub_8101B58: @ 8101B58 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r2, _08101B84 @ =gUnknown_203ACEC - ldr r2, [r2] - movs r3, 0xB6 - lsls r3, 2 - adds r2, r3 - ldr r3, [r2] - movs r4, 0 - strh r0, [r3, 0x20] - ldr r0, [r2] - strh r1, [r0, 0x22] - ldr r0, [r2] - strh r4, [r0, 0x24] - ldr r0, [r2] - strh r4, [r0, 0x2E] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08101B84: .4byte gUnknown_203ACEC - thumb_func_end sub_8101B58 - - thumb_func_start sub_8101B88 -sub_8101B88: @ 8101B88 - ldr r0, _08101BA4 @ =gUnknown_203ACEC - ldr r1, [r0] - movs r0, 0xB6 - lsls r0, 2 - adds r1, r0 - ldr r0, [r1] - movs r2, 0 - strh r2, [r0, 0x2E] - ldr r0, [r1] - strh r2, [r0, 0x30] - ldr r0, [r1] - strh r2, [r0, 0x24] - bx lr - .align 2, 0 -_08101BA4: .4byte gUnknown_203ACEC - thumb_func_end sub_8101B88 - - thumb_func_start sub_8101BA8 -sub_8101BA8: @ 8101BA8 - ldr r0, _08101BBC @ =gUnknown_203ACEC - ldr r0, [r0] - movs r1, 0xB6 - lsls r1, 2 - adds r0, r1 - ldr r1, [r0] - movs r0, 0x1 - strh r0, [r1, 0x30] - bx lr - .align 2, 0 -_08101BBC: .4byte gUnknown_203ACEC - thumb_func_end sub_8101BA8 - - thumb_func_start sub_8101BC0 -sub_8101BC0: @ 8101BC0 - push {r4-r6,lr} - mov r6, r8 - push {r6} - ldr r6, _08101C38 @ =gUnknown_843F9B8 - adds r0, r6, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x3 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08101C3C @ =gUnknown_203ACEC - ldr r2, [r5] - movs r1, 0xB7 - lsls r1, 2 - mov r8, r1 - add r2, r8 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r4, _08101C40 @ =gSprites - adds r1, r4 - str r1, [r2] - movs r0, 0x20 - strh r0, [r1, 0x24] - adds r0, r6, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x3 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r5] - movs r1, 0xB8 - lsls r1, 2 - adds r3, r2, r1 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - str r1, [r3] - ldr r0, _08101C44 @ =0x0000ffe0 - strh r0, [r1, 0x24] - add r2, r8 - ldr r1, [r2] - adds r1, 0x3F - ldrb r0, [r1] - movs r2, 0x1 - orrs r0, r2 - strb r0, [r1] - bl sub_8101C80 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08101C38: .4byte gUnknown_843F9B8 -_08101C3C: .4byte gUnknown_203ACEC -_08101C40: .4byte gSprites -_08101C44: .4byte 0x0000ffe0 - thumb_func_end sub_8101BC0 - - thumb_func_start sub_8101C48 -sub_8101C48: @ 8101C48 - push {r4-r6,lr} - ldr r5, _08101C7C @ =gUnknown_203ACEC - ldr r0, [r5] - movs r4, 0xB7 - lsls r4, 2 - adds r0, r4 - ldr r0, [r0] - bl DestroySprite - ldr r0, [r5] - adds r4, r0, r4 - movs r6, 0 - str r6, [r4] - movs r4, 0xB8 - lsls r4, 2 - adds r0, r4 - ldr r0, [r0] - bl DestroySprite - ldr r0, [r5] - adds r0, r4 - str r6, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08101C7C: .4byte gUnknown_203ACEC - thumb_func_end sub_8101C48 - - thumb_func_start sub_8101C80 -sub_8101C80: @ 8101C80 - push {r4,lr} - sub sp, 0x4 - ldr r0, _08101CC8 @ =gUnknown_203ACEC - ldr r1, [r0] - movs r2, 0xB7 - lsls r2, 2 - adds r0, r1, r2 - ldr r0, [r0] - cmp r0, 0 - beq _08101CDC - adds r2, 0x4 - adds r0, r1, r2 - ldr r0, [r0] - cmp r0, 0 - beq _08101CDC - mov r4, sp - adds r4, 0x1 - mov r0, sp - adds r1, r4, 0 - bl sub_80FFE08 - bl sub_80FFE1C - lsls r0, 24 - cmp r0, 0 - bne _08101CCC - mov r0, sp - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - movs r1, 0 - ldrsb r1, [r4, r1] - bl sub_8101CE4 - b _08101CDC - .align 2, 0 -_08101CC8: .4byte gUnknown_203ACEC -_08101CCC: - mov r0, sp - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - movs r1, 0 - ldrsb r1, [r4, r1] - bl sub_8101D9C -_08101CDC: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8101C80 - - thumb_func_start sub_8101CE4 -sub_8101CE4: @ 8101CE4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r1, 24 - lsrs r7, r1, 24 - lsls r0, 24 - asrs r5, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r5, r0 - beq _08101D48 - ldr r0, _08101D44 @ =gUnknown_203ACEC - mov r8, r0 - ldr r0, [r0] - movs r4, 0xB7 - lsls r4, 2 - adds r0, r4 - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim - mov r2, r8 - ldr r1, [r2] - adds r4, r1, r4 - ldr r2, [r4] - movs r0, 0x54 - muls r5, r0 - adds r5, 0x3A - strh r5, [r2, 0x20] - ldr r0, [r4] - lsls r4, r7, 24 - asrs r4, 20 - adds r4, 0x60 - strh r4, [r0, 0x22] - movs r6, 0xB8 - lsls r6, 2 - adds r1, r6 - ldr r0, [r1] - movs r1, 0 - bl StartSpriteAnim - mov r1, r8 - ldr r0, [r1] - adds r0, r6 - ldr r1, [r0] - strh r5, [r1, 0x20] - b _08101D8A - .align 2, 0 -_08101D44: .4byte gUnknown_203ACEC -_08101D48: - ldr r6, _08101D98 @ =gUnknown_203ACEC - ldr r0, [r6] - movs r4, 0xB7 - lsls r4, 2 - adds r0, r4 - ldr r0, [r0] - movs r1, 0x1 - bl StartSpriteAnim - ldr r1, [r6] - adds r4, r1, r4 - ldr r0, [r4] - movs r2, 0xD8 - mov r8, r2 - mov r2, r8 - strh r2, [r0, 0x20] - ldr r0, [r4] - lsls r4, r7, 24 - asrs r4, 20 - adds r4, 0x70 - strh r4, [r0, 0x22] - movs r5, 0xB8 - lsls r5, 2 - adds r1, r5 - ldr r0, [r1] - movs r1, 0x1 - bl StartSpriteAnim - ldr r0, [r6] - adds r0, r5 - ldr r1, [r0] - mov r2, r8 - strh r2, [r1, 0x20] -_08101D8A: - ldr r0, [r0] - strh r4, [r0, 0x22] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08101D98: .4byte gUnknown_203ACEC - thumb_func_end sub_8101CE4 - - thumb_func_start sub_8101D9C -sub_8101D9C: @ 8101D9C - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - lsrs r4, r0, 24 - asrs r2, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - beq _08101E2C - lsls r0, r5, 24 - asrs r1, r0, 24 - lsls r0, r1, 4 - adds r0, 0x60 - mov r8, r0 - movs r7, 0x20 - cmp r2, 0x6 - bne _08101DCE - cmp r1, 0 - bne _08101DCE - movs r7, 0x9D - movs r6, 0x2 - b _08101DE4 -_08101DCE: - ldr r3, _08101E24 @ =gUnknown_843F958 - lsls r1, r4, 24 - lsrs r0, r1, 24 - movs r2, 0 - cmp r0, 0x6 - bhi _08101DDC - asrs r2, r1, 24 -_08101DDC: - adds r0, r2, r3 - ldrb r0, [r0] - adds r7, r0 - movs r6, 0x3 -_08101DE4: - ldr r5, _08101E28 @ =gUnknown_203ACEC - ldr r0, [r5] - movs r4, 0xB7 - lsls r4, 2 - adds r0, r4 - ldr r0, [r0] - adds r1, r6, 0 - bl StartSpriteAnim - ldr r1, [r5] - adds r4, r1, r4 - ldr r0, [r4] - strh r7, [r0, 0x20] - ldr r0, [r4] - mov r2, r8 - strh r2, [r0, 0x22] - movs r4, 0xB8 - lsls r4, 2 - adds r1, r4 - ldr r0, [r1] - adds r1, r6, 0 - bl StartSpriteAnim - ldr r0, [r5] - adds r0, r4 - ldr r1, [r0] - strh r7, [r1, 0x20] - ldr r0, [r0] - mov r1, r8 - strh r1, [r0, 0x22] - b _08101E72 - .align 2, 0 -_08101E24: .4byte gUnknown_843F958 -_08101E28: .4byte gUnknown_203ACEC -_08101E2C: - ldr r6, _08101E7C @ =gUnknown_203ACEC - ldr r0, [r6] - movs r4, 0xB7 - lsls r4, 2 - adds r0, r4 - ldr r0, [r0] - movs r1, 0x1 - bl StartSpriteAnim - ldr r1, [r6] - adds r4, r1, r4 - ldr r0, [r4] - movs r2, 0xD8 - mov r8, r2 - mov r2, r8 - strh r2, [r0, 0x20] - ldr r0, [r4] - lsls r4, r5, 24 - asrs r4, 20 - adds r4, 0x70 - strh r4, [r0, 0x22] - movs r5, 0xB8 - lsls r5, 2 - adds r1, r5 - ldr r0, [r1] - movs r1, 0x1 - bl StartSpriteAnim - ldr r0, [r6] - adds r0, r5 - ldr r1, [r0] - mov r2, r8 - strh r2, [r1, 0x20] - ldr r0, [r0] - strh r4, [r0, 0x22] -_08101E72: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08101E7C: .4byte gUnknown_203ACEC - thumb_func_end sub_8101D9C - - thumb_func_start sub_8101E80 -sub_8101E80: @ 8101E80 - push {lr} - ldr r0, _08101EC4 @ =gUnknown_843F968 - movs r1, 0 - movs r2, 0 - movs r3, 0x4 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08101EC8 @ =gUnknown_203ACEC - ldr r2, [r1] - movs r1, 0xB9 - lsls r1, 2 - adds r2, r1 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08101ECC @ =gSprites - adds r1, r0 - str r1, [r2] - ldr r0, _08101ED0 @ =sub_8101ED4 - str r0, [r1, 0x1C] - ldrb r2, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - movs r2, 0x8 - orrs r0, r2 - strb r0, [r1, 0x5] - bl sub_8101F04 - pop {r0} - bx r0 - .align 2, 0 -_08101EC4: .4byte gUnknown_843F968 -_08101EC8: .4byte gUnknown_203ACEC -_08101ECC: .4byte gSprites -_08101ED0: .4byte sub_8101ED4 - thumb_func_end sub_8101E80 - - thumb_func_start sub_8101ED4 -sub_8101ED4: @ 8101ED4 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _08101EFA - movs r0, 0 - strh r0, [r1, 0x2E] - ldrh r0, [r1, 0x24] - adds r0, 0x1 - strh r0, [r1, 0x24] - lsls r0, 16 - cmp r0, 0 - ble _08101EFA - ldr r0, _08101F00 @ =0x0000fffa - strh r0, [r1, 0x24] -_08101EFA: - pop {r0} - bx r0 - .align 2, 0 -_08101F00: .4byte 0x0000fffa - thumb_func_end sub_8101ED4 - - thumb_func_start sub_8101F04 -sub_8101F04: @ 8101F04 - push {r4,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x1 - mov r0, sp - adds r1, r4, 0 - bl sub_80FFE34 - mov r0, sp - movs r1, 0 - ldrsb r1, [r0, r1] - movs r0, 0xD - muls r0, r1 - adds r0, 0x3 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - ldrsb r1, [r4, r1] - lsls r1, 25 - movs r2, 0xB0 - lsls r2, 20 - adds r1, r2 - lsrs r1, 24 - bl sub_8101F40 - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8101F04 - - thumb_func_start sub_8101F40 -sub_8101F40: @ 8101F40 - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - ldr r0, _08101F7C @ =gUnknown_203ACEC - ldr r0, [r0] - movs r1, 0xB9 - lsls r1, 2 - adds r3, r0, r1 - ldr r1, [r3] - cmp r1, 0 - beq _08101F74 - lsls r0, r2, 3 - adds r0, 0x4 - movs r2, 0 - strh r0, [r1, 0x20] - ldr r1, [r3] - adds r0, r4, 0x1 - lsls r0, 3 - adds r0, 0x1 - strh r0, [r1, 0x22] - ldr r0, [r3] - strh r2, [r0, 0x24] - ldr r0, [r3] - strh r2, [r0, 0x2E] -_08101F74: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08101F7C: .4byte gUnknown_203ACEC - thumb_func_end sub_8101F40 - - thumb_func_start sub_8101F80 -sub_8101F80: @ 8101F80 - push {r4,lr} - ldr r4, _08101FA8 @ =gUnknown_203ACEC - ldr r0, [r4] - movs r1, 0xB9 - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - beq _08101FA2 - bl DestroySprite - ldr r0, [r4] - movs r1, 0xB9 - lsls r1, 2 - adds r0, r1 - movs r1, 0 - str r1, [r0] -_08101FA2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08101FA8: .4byte gUnknown_203ACEC - thumb_func_end sub_8101F80 - - thumb_func_start sub_8101FAC -sub_8101FAC: @ 8101FAC - push {r4-r6,lr} - ldr r0, _08102004 @ =gUnknown_843FA40 - movs r1, 0xD0 - movs r2, 0x80 - movs r3, 0x6 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08102008 @ =gUnknown_203ACEC - ldr r2, [r5] - movs r1, 0xBA - lsls r1, 2 - adds r2, r1 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r4, _0810200C @ =gSprites - adds r1, r4 - str r1, [r2] - movs r6, 0 - ldr r0, _08102010 @ =0x0000ffc0 - strh r0, [r1, 0x24] - ldr r0, _08102014 @ =gUnknown_843FA20 - movs r1, 0xD0 - movs r2, 0x50 - movs r3, 0x5 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r5] - movs r1, 0xBB - lsls r1, 2 - adds r3, r2, r1 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - str r1, [r3] - strb r6, [r2, 0x9] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08102004: .4byte gUnknown_843FA40 -_08102008: .4byte gUnknown_203ACEC -_0810200C: .4byte gSprites -_08102010: .4byte 0x0000ffc0 -_08102014: .4byte gUnknown_843FA20 - thumb_func_end sub_8101FAC - - thumb_func_start sub_8102018 -sub_8102018: @ 8102018 - push {r4,lr} - ldr r4, _0810202C @ =gUnknown_203ACEC - ldr r2, [r4] - ldrb r3, [r2, 0x9] - cmp r3, 0 - beq _08102030 - cmp r3, 0x1 - beq _08102088 - movs r0, 0 - b _081020A6 - .align 2, 0 -_0810202C: .4byte gUnknown_203ACEC -_08102030: - movs r0, 0xBA - lsls r0, 2 - adds r2, r0 - ldr r1, [r2] - ldrh r0, [r1, 0x24] - adds r0, 0x8 - strh r0, [r1, 0x24] - ldr r2, [r2] - movs r1, 0x24 - ldrsh r0, [r2, r1] - cmp r0, 0 - blt _081020A4 - strh r3, [r2, 0x24] - bl sub_80FFE1C - lsls r0, 24 - cmp r0, 0 - bne _08102066 - ldr r0, [r4] - movs r1, 0xBB - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x1 - bl StartSpriteAnim - b _08102076 -_08102066: - ldr r0, [r4] - movs r1, 0xBB - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x2 - bl StartSpriteAnim -_08102076: - ldr r0, _08102084 @ =gUnknown_203ACEC - ldr r1, [r0] - ldrb r0, [r1, 0x9] - adds r0, 0x1 - strb r0, [r1, 0x9] - b _081020A4 - .align 2, 0 -_08102084: .4byte gUnknown_203ACEC -_08102088: - movs r1, 0xBB - lsls r1, 2 - adds r0, r2, r1 - ldr r0, [r0] - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _081020A4 - movs r0, 0x2 - strb r0, [r2, 0x9] - movs r0, 0 - b _081020A6 -_081020A4: - movs r0, 0x1 -_081020A6: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8102018 - - thumb_func_start sub_81020AC -sub_81020AC: @ 81020AC - push {lr} - ldr r2, _081020CC @ =gUnknown_203ACEC - ldr r1, [r2] - movs r0, 0 - strb r0, [r1, 0x9] - ldr r0, [r2] - movs r1, 0xBB - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x3 - bl StartSpriteAnim - pop {r0} - bx r0 - .align 2, 0 -_081020CC: .4byte gUnknown_203ACEC - thumb_func_end sub_81020AC - - thumb_func_start sub_81020D0 -sub_81020D0: @ 81020D0 - push {r4-r6,lr} - ldr r5, _081020E4 @ =gUnknown_203ACEC - ldr r3, [r5] - ldrb r0, [r3, 0x9] - cmp r0, 0 - beq _081020E8 - cmp r0, 0x1 - beq _08102102 - movs r0, 0 - b _08102154 - .align 2, 0 -_081020E4: .4byte gUnknown_203ACEC -_081020E8: - movs r1, 0xBB - lsls r1, 2 - adds r0, r3, r1 - ldr r0, [r0] - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08102152 - movs r0, 0x1 - strb r0, [r3, 0x9] - b _08102152 -_08102102: - movs r0, 0xBA - lsls r0, 2 - adds r2, r3, r0 - ldr r1, [r2] - ldrh r0, [r1, 0x24] - subs r0, 0x8 - movs r6, 0 - strh r0, [r1, 0x24] - ldr r0, [r2] - movs r2, 0x24 - ldrsh r1, [r0, r2] - movs r0, 0x40 - negs r0, r0 - cmp r1, r0 - bgt _08102152 - movs r4, 0xBB - lsls r4, 2 - adds r0, r3, r4 - ldr r0, [r0] - bl DestroySprite - ldr r0, [r5] - movs r1, 0xBA - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - bl DestroySprite - ldr r1, [r5] - adds r4, r1, r4 - str r6, [r4] - movs r2, 0xBA - lsls r2, 2 - adds r0, r1, r2 - str r6, [r0] - ldrb r0, [r1, 0x9] - adds r0, 0x1 - strb r0, [r1, 0x9] - movs r0, 0 - b _08102154 -_08102152: - movs r0, 0x1 -_08102154: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81020D0 - - thumb_func_start sub_810215C -sub_810215C: @ 810215C - push {lr} - ldr r0, _08102174 @ =gUnknown_203ACEC - ldr r0, [r0] - movs r1, 0xBB - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x4 - bl StartSpriteAnim - pop {r0} - bx r0 - .align 2, 0 -_08102174: .4byte gUnknown_203ACEC - thumb_func_end sub_810215C - - thumb_func_start sub_8102178 -sub_8102178: @ 8102178 - push {lr} - bl sub_80FFE1C - lsls r0, 24 - cmp r0, 0 - bne _0810219C - ldr r0, _08102198 @ =gUnknown_203ACEC - ldr r0, [r0] - movs r1, 0xBB - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x1 - bl StartSpriteAnim - b _081021AE - .align 2, 0 -_08102198: .4byte gUnknown_203ACEC -_0810219C: - ldr r0, _081021B4 @ =gUnknown_203ACEC - ldr r0, [r0] - movs r1, 0xBB - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x2 - bl StartSpriteAnim -_081021AE: - pop {r0} - bx r0 - .align 2, 0 -_081021B4: .4byte gUnknown_203ACEC - thumb_func_end sub_8102178 - - thumb_func_start sub_81021B8 -sub_81021B8: @ 81021B8 - ldr r0, _081021D0 @ =gUnknown_203ACEC - ldr r0, [r0] - movs r1, 0xBB - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - adds r0, 0x3F - ldrb r1, [r0] - lsrs r1, 4 - movs r0, 0x1 - bics r0, r1 - bx lr - .align 2, 0 -_081021D0: .4byte gUnknown_203ACEC - thumb_func_end sub_81021B8 - - thumb_func_start sub_81021D4 -sub_81021D4: @ 81021D4 - push {r4,lr} - ldr r4, _08102240 @ =gUnknown_843FA98 - adds r0, r4, 0 - movs r1, 0x60 - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _08102202 - ldr r0, _08102244 @ =gUnknown_203ACEC - ldr r2, [r0] - movs r0, 0xBC - lsls r0, 2 - adds r2, r0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08102248 @ =gSprites - adds r0, r1 - str r0, [r2] -_08102202: - adds r0, r4, 0 - movs r1, 0x60 - movs r2, 0x9C - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _08102236 - ldr r0, _08102244 @ =gUnknown_203ACEC - ldr r2, [r0] - movs r0, 0xBD - lsls r0, 2 - adds r2, r0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08102248 @ =gSprites - adds r0, r1 - str r0, [r2] - adds r0, 0x3F - ldrb r1, [r0] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r0] -_08102236: - bl sub_81022B0 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08102240: .4byte gUnknown_843FA98 -_08102244: .4byte gUnknown_203ACEC -_08102248: .4byte gSprites - thumb_func_end sub_81021D4 - - thumb_func_start sub_810224C -sub_810224C: @ 810224C - push {r4-r6,lr} - bl sub_80FFE64 - ldr r6, _081022AC @ =gUnknown_203ACEC - ldr r1, [r6] - movs r2, 0xBC - lsls r2, 2 - adds r1, r2 - ldr r1, [r1] - movs r2, 0 - cmp r0, 0 - bne _08102266 - movs r2, 0x1 -_08102266: - adds r3, r1, 0 - adds r3, 0x3E - movs r4, 0x1 - lsls r2, 2 - ldrb r1, [r3] - movs r5, 0x5 - negs r5, r5 - adds r0, r5, 0 - ands r0, r1 - orrs r0, r2 - strb r0, [r3] - bl sub_80FFE98 - ldr r1, [r6] - movs r2, 0xBD - lsls r2, 2 - adds r1, r2 - ldr r1, [r1] - movs r2, 0 - cmp r0, 0 - bne _08102292 - movs r2, 0x1 -_08102292: - adds r3, r1, 0 - adds r3, 0x3E - adds r1, r4, 0 - ands r1, r2 - lsls r1, 2 - ldrb r2, [r3] - adds r0, r5, 0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081022AC: .4byte gUnknown_203ACEC - thumb_func_end sub_810224C - - thumb_func_start sub_81022B0 -sub_81022B0: @ 81022B0 - ldr r3, _081022DC @ =gUnknown_203ACEC - ldr r0, [r3] - movs r1, 0xBC - lsls r1, 2 - adds r0, r1 - ldr r1, [r0] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - ldr r0, [r3] - movs r1, 0xBD - lsls r1, 2 - adds r0, r1 - ldr r1, [r0] - adds r1, 0x3E - ldrb r0, [r1] - orrs r0, r2 - strb r0, [r1] - bx lr - .align 2, 0 -_081022DC: .4byte gUnknown_203ACEC - thumb_func_end sub_81022B0 - - thumb_func_start sub_81022E0 -sub_81022E0: @ 81022E0 - push {lr} - cmp r0, 0 - bne _081022FC - ldr r0, _081022F8 @ =gUnknown_203ACEC - ldr r2, [r0] - movs r1, 0xBC - lsls r1, 2 - adds r0, r2, r1 - ldr r0, [r0] - movs r1, 0x60 - b _0810230A - .align 2, 0 -_081022F8: .4byte gUnknown_203ACEC -_081022FC: - ldr r0, _0810231C @ =gUnknown_203ACEC - ldr r2, [r0] - movs r1, 0xBC - lsls r1, 2 - adds r0, r2, r1 - ldr r0, [r0] - movs r1, 0x78 -_0810230A: - strh r1, [r0, 0x20] - movs r3, 0xBD - lsls r3, 2 - adds r0, r2, r3 - ldr r0, [r0] - strh r1, [r0, 0x20] - pop {r0} - bx r0 - .align 2, 0 -_0810231C: .4byte gUnknown_203ACEC - thumb_func_end sub_81022E0 - - thumb_func_start sub_8102320 -sub_8102320: @ 8102320 - push {r4,lr} - ldr r4, _08102388 @ =gUnknown_843FA80 - adds r0, r4, 0 - movs r1, 0xDC - movs r2, 0x54 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _0810234E - ldr r0, _0810238C @ =gUnknown_203ACEC - ldr r2, [r0] - movs r0, 0xBE - lsls r0, 2 - adds r2, r0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08102390 @ =gSprites - adds r0, r1 - str r0, [r2] -_0810234E: - adds r0, r4, 0 - movs r1, 0xDC - movs r2, 0x9C - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _0810237E - ldr r0, _0810238C @ =gUnknown_203ACEC - ldr r2, [r0] - movs r0, 0xBF - lsls r0, 2 - adds r2, r0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08102390 @ =gSprites - adds r0, r1 - str r0, [r2] - movs r1, 0x1 - bl StartSpriteAnim -_0810237E: - bl sub_81023F8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08102388: .4byte gUnknown_843FA80 -_0810238C: .4byte gUnknown_203ACEC -_08102390: .4byte gSprites - thumb_func_end sub_8102320 - - thumb_func_start sub_8102394 -sub_8102394: @ 8102394 - push {r4-r6,lr} - bl sub_80FFE64 - ldr r6, _081023F4 @ =gUnknown_203ACEC - ldr r1, [r6] - movs r2, 0xBE - lsls r2, 2 - adds r1, r2 - ldr r1, [r1] - movs r2, 0 - cmp r0, 0 - bne _081023AE - movs r2, 0x1 -_081023AE: - adds r3, r1, 0 - adds r3, 0x3E - movs r4, 0x1 - lsls r2, 2 - ldrb r1, [r3] - movs r5, 0x5 - negs r5, r5 - adds r0, r5, 0 - ands r0, r1 - orrs r0, r2 - strb r0, [r3] - bl sub_80FFE98 - ldr r1, [r6] - movs r2, 0xBF - lsls r2, 2 - adds r1, r2 - ldr r1, [r1] - movs r2, 0 - cmp r0, 0 - bne _081023DA - movs r2, 0x1 -_081023DA: - adds r3, r1, 0 - adds r3, 0x3E - adds r1, r4, 0 - ands r1, r2 - lsls r1, 2 - ldrb r2, [r3] - adds r0, r5, 0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081023F4: .4byte gUnknown_203ACEC - thumb_func_end sub_8102394 - - thumb_func_start sub_81023F8 -sub_81023F8: @ 81023F8 - ldr r3, _08102424 @ =gUnknown_203ACEC - ldr r0, [r3] - movs r1, 0xBE - lsls r1, 2 - adds r0, r1 - ldr r1, [r0] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - ldr r0, [r3] - movs r1, 0xBF - lsls r1, 2 - adds r0, r1 - ldr r1, [r0] - adds r1, 0x3E - ldrb r0, [r1] - orrs r0, r2 - strb r0, [r1] - bx lr - .align 2, 0 -_08102424: .4byte gUnknown_203ACEC - thumb_func_end sub_81023F8 - - thumb_func_start sub_8102428 -sub_8102428: @ 8102428 - push {r4,lr} - sub sp, 0x14 - ldr r3, _081024A8 @ =0xffffff00 - ldr r0, [sp, 0xC] - ands r0, r3 - movs r1, 0x3 - orrs r0, r1 - ldr r2, _081024AC @ =0xffff00ff - ands r0, r2 - movs r1, 0x80 - lsls r1, 3 - orrs r0, r1 - ldr r1, _081024B0 @ =0xff00ffff - ands r0, r1 - movs r1, 0xB0 - lsls r1, 12 - orrs r0, r1 - ldr r1, _081024B4 @ =0x00ffffff - ands r0, r1 - movs r1, 0xC0 - lsls r1, 21 - orrs r0, r1 - str r0, [sp, 0xC] - ldr r0, [sp, 0x10] - ands r0, r3 - movs r1, 0x2 - orrs r0, r1 - ands r0, r2 - movs r1, 0xB0 - lsls r1, 4 - orrs r0, r1 - ldr r1, _081024B8 @ =0x0000ffff - ands r0, r1 - movs r1, 0xC0 - lsls r1, 14 - orrs r0, r1 - str r0, [sp, 0x10] - add r0, sp, 0xC - bl AddWindow - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r2, _081024BC @ =gUnknown_841EE2B - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0x1 - movs r3, 0 - bl sub_8100D84 - adds r0, r4, 0 - bl PutWindowTilemap - add sp, 0x14 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081024A8: .4byte 0xffffff00 -_081024AC: .4byte 0xffff00ff -_081024B0: .4byte 0xff00ffff -_081024B4: .4byte 0x00ffffff -_081024B8: .4byte 0x0000ffff -_081024BC: .4byte gUnknown_841EE2B - thumb_func_end sub_8102428 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_8479668.s b/data/data_8479668.s index 0ddecfe58..50ce06127 100644 --- a/data/data_8479668.s +++ b/data/data_8479668.s @@ -13,7 +13,7 @@ .section .rodata - // berry_fix_program + // easy_chat_2 gUnknown_847A8D8:: .string "{CLEAR 11}A{CLEAR 6}B{CLEAR 6}C{CLEAR 26}D{CLEAR 6}E{CLEAR 6}F{CLEAR 26}others$" @@ -27,6 +27,8 @@ gUnknown_847A913:: gUnknown_847A934:: .string "{CLEAR 11}T{CLEAR 6}U{CLEAR 6}V{CLEAR 26}W{CLEAR 6}X{CLEAR 6}Y{CLEAR 6}Z{CLEAR 26} $" + // naming_screen + gUnknown_847A955:: .string "{CLEAR 11}a{CLEAR 6}b{CLEAR 6}c{CLEAR 26}d{CLEAR 6}e{CLEAR 6}f{CLEAR 6} {CLEAR 26}.$" @@ -63,6 +65,8 @@ gUnknown_847AA8F:: gUnknown_847AAA8:: .string "{CLEAR 11}…{CLEAR 16}“{CLEAR 16}”{CLEAR 18}‘{CLEAR 18}'{CLEAR 18} $" + // union_room_chat + gText_UnionRoomChatKeyboard_ABCDE:: .string "ABCDE$" diff --git a/data/easy_chat_2.s b/data/easy_chat_2.s deleted file mode 100644 index 79be01714..000000000 --- a/data/easy_chat_2.s +++ /dev/null @@ -1,296 +0,0 @@ -#include "constants/region_map.h" -#include "constants/flags.h" -#include "constants/moves.h" -#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10)) - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 - -gUnknown_843F29C:: @ 843F29C - .2byte 0x143a, 0x1817, 0x100b, 0x200f - -gUnknown_843F2A4:: @ 843F2A4 - .2byte 0x0209, 0x140b, 0x1030, 0x102a - -gUnknown_843F2AC:: @ 843F2AC - .byte 0, 2, 2, 0 - .4byte gUnknown_8418A2B - .4byte gUnknown_84186D1 - .4byte gUnknown_84186EF - .4byte gUnknown_841880E - .4byte gUnknown_8418902 - .byte 1, 2, 3, 1 - .4byte gUnknown_8418A33 - .4byte gUnknown_8418706 - .4byte gUnknown_8418725 - .4byte gUnknown_841881B - .4byte gUnknown_8418902 - .byte 2, 2, 3, 1 - .4byte gUnknown_8418A4A - .4byte gUnknown_8418706 - .4byte gUnknown_8418725 - .4byte gUnknown_841883E - .4byte gUnknown_8418902 - .byte 3, 2, 3, 1 - .4byte gUnknown_8418A61 - .4byte gUnknown_8418706 - .4byte gUnknown_8418725 - .4byte gUnknown_841885F - .4byte gUnknown_8418902 - .byte 4, 2, 5, 2 - .4byte NULL - .4byte gUnknown_8418780 - .4byte gUnknown_841879E - .4byte gUnknown_841888C - .4byte gUnknown_8418902 - .byte 5, 2, 2, 0 - .4byte NULL - .4byte gUnknown_8418780 - .4byte gUnknown_841879E - .4byte NULL - .4byte NULL - .byte 6, 2, 3, 1 - .4byte gUnknown_8418A77 - .4byte gUnknown_84187B2 - .4byte gUnknown_84187D1 - .4byte gUnknown_84188AC - .4byte gUnknown_8418902 - .byte 7, 2, 3, 1 - .4byte gUnknown_8418AA1 - .4byte gUnknown_8418745 - .4byte gUnknown_8418763 - .4byte gUnknown_8418881 - .4byte gUnknown_8418902 - .byte 9, 2, 1, 3 - .4byte gUnknown_8418A87 - .4byte gUnknown_84188B9 - .4byte gUnknown_84188D6 - .4byte gUnknown_84188F0 - .4byte gUnknown_8418902 - .byte 14, 2, 2, 0 - .4byte gUnknown_8418AB2 - .4byte gUnknown_84186D1 - .4byte gUnknown_84187EE - .4byte gUnknown_8418881 - .4byte gUnknown_8418902 - -gUnknown_843F39C:: @ 843F39C data8 4x7 - .byte 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 - .byte 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x00 - .byte 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13 - .byte 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a - -gUnknown_843F3B8:: @ 843F3B8 gbapal - .incbin "graphics/link_rfu/unk_843F3F8.gbapal" - -gUnknown_843F3D8:: @ 843F3D8 gbapal - .incbin "graphics/link_rfu/unk_8E9BD28.gbapal" - -gUnknown_843F3F8:: @ 843F3F8 4bpp - .incbin "graphics/link_rfu/unk_843F3F8.4bpp" - -gUnknown_843F418:: @ 843F418 4bpp - .incbin "graphics/link_rfu/unk_843F418.4bpp" - -gUnknown_843F518:: @ 843F518 4bpp - .incbin "graphics/link_rfu/unk_843F518.4bpp" - -gUnknown_843F618:: @ 843F618 gbapal - .incbin "graphics/link_rfu/unk_843F638.gbapal" - -gUnknown_843F638:: @ 843F638 4bpp.lz - .incbin "graphics/link_rfu/unk_843F638.4bpp.lz" - -gUnknown_843F76C:: @ 843F76C gbapal - .incbin "graphics/link_rfu/unk_843F76C.gbapal" - -gUnknown_843F78C:: @ 843F78C gbapal - .incbin "graphics/link_rfu/unk_843F78C.gbapal" - -gUnknown_843F7AC:: @ 843F7AC 4bpp.lz - .incbin "graphics/link_rfu/unk_843F7AC.4bpp.lz" - -gUnknown_843F874:: @ 843F874 gbapal - .2byte RGB(0, 0, 0) - .2byte RGB(0, 0, 0) - .2byte RGB(7, 25, 31) - .2byte RGB(21, 21, 29) - -gUnknown_843F87C:: @ 843F87C gbapal - .2byte RGB(0, 0, 0) - .2byte RGB(31, 31, 31) - .2byte RGB(12, 12, 12) - .2byte RGB(27, 26, 27) - .2byte RGB(8, 17, 9) - - .align 2 -gUnknown_843F888:: @ 843F888 data8 6x4 - .byte 0x03, 0x04, 0x18, 0x04 - .byte 0x01, 0x04, 0x1b, 0x04 - .byte 0x03, 0x00, 0x18, 0x0a - .byte 0x06, 0x06, 0x12, 0x04 - .byte 0x10, 0x04, 0x09, 0x02 - .byte 0x0e, 0x04, 0x12, 0x04 - -gUnknown_843F8A0:: @ 843F8A0 bg_template - .4byte 0x000001c0, 0x000011dd, 0x002021e2, 0x000031fb - -gUnknown_843F8B0:: @ 843F8B0 window_template - .align 2 - .byte 0x01, 0x07, 0x00, 0x10, 0x02, 0x0a - .2byte 0x0010 - @ {0x01, 0x07, 0x00, 0x10, 0x02, 0x0a, 0x0010} - .align 2 - .byte 0x00, 0x04, 0x0f, 0x16, 0x04, 0x0f - .2byte 0x000a - @ {0x00, 0x04, 0x0f, 0x16, 0x04, 0x0f, 0x000a} - .align 2 - .byte 0x02, 0x01, 0x00, 0x1c, 0x20, 0x03 - .2byte 0x0000 - @ {0x02, 0x01, 0x00, 0x1c, 0x20, 0x03, 0x0000} - .align 2 - .byte 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 - .2byte 0x0000 - @ {0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000} - -gUnknown_843F8D0:: @ 843F8D0 window_template - .align 2 - .byte 0x00, 0x16, 0x09, 0x05, 0x04, 0x0f - .2byte 0x0062 - @ {0x00, 0x16, 0x09, 0x05, 0x04, 0x0f, 0x0062} - -gUnknown_843F8D8:: @ 843F8D8 text - .string "{UNDERSCORE}$" - -gUnknown_843F8DB:: @ 843F8DB text - .string "{CLEAR 17}$" - - .align 2 -gUnknown_843F8E0:: @ 843F8E0 - .4byte gUnknown_847A8D8 - .4byte gUnknown_847A8FA - .4byte gUnknown_847A913 - .4byte gUnknown_847A934 - -gUnknown_843F8F0:: @ 843F8F0 sprite_sheet - obj_tiles gUnknown_843F3F8, 0x0020, 0 - obj_tiles gUnknown_843F418, 0x0100, 2 - obj_tiles gUnknown_843F518, 0x0100, 3 - null_obj_tiles - -gUnknown_843F910:: @ 843F910 sprite_palette - obj_pal gUnknown_843F3B8, 0 - obj_pal gUnknown_843F3D8, 1 - obj_pal gUnknown_8E99F24, 2 - obj_pal gUnknown_843F618, 3 - null_obj_pal - -gUnknown_843F938:: @ 843F938 sprite_sheet - obj_tiles gUnknown_843F638, 0x0800, 5 - obj_tiles gUnknown_8E9BD28, 0x1000, 1 - obj_tiles gUnknown_8E99F44, 0x0800, 6 - obj_tiles gUnknown_8E9A168, 0x1000, 4 - -gUnknown_843F958:: @ 843F958 data8 - .byte 0x00, 0x0c, 0x18, 0x38, 0x44, 0x50, 0x5c, 0x00 - -gUnknown_843F960:: - .4byte 0x00000000, 0x00000c00 - -gUnknown_843F968:: @ 843F968 sprite_template - spr_template 0, 0, gUnknown_843F960, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8101B20 - -gUnknown_843F980:: - .4byte 0xc0004000, 0x00000400 - -gUnknown_843F988:: - obj_image_anim_frame 0x0000, 0 - obj_image_anim_end - -gUnknown_843F990:: - obj_image_anim_frame 0x0020, 0 - obj_image_anim_end - -gUnknown_843F998:: - obj_image_anim_frame 0x0040, 0 - obj_image_anim_end - -gUnknown_843F9A0:: - obj_image_anim_frame 0x0060, 0 - obj_image_anim_end - -gUnknown_843F9A8:: - .4byte gUnknown_843F988 - .4byte gUnknown_843F990 - .4byte gUnknown_843F998 - .4byte gUnknown_843F9A0 - -gUnknown_843F9B8:: @ 843F9B8 sprite_template - spr_template 1, 1, gUnknown_843F980, gUnknown_843F9A8, NULL, gDummySpriteAffineAnimTable, sub_8101B20 - -gUnknown_843F9D0:: - .4byte 0xc0004000, 0x00000400 - -gUnknown_843F9D8:: - obj_image_anim_frame 0x0060, 0 - obj_image_anim_end - -gUnknown_843F9E0:: - obj_image_anim_frame 0x0040, 4 - obj_image_anim_frame 0x0020, 4 - obj_image_anim_end - -gUnknown_843F9EC:: - obj_image_anim_frame 0x0040, 4 - obj_image_anim_frame 0x0000, 4 - obj_image_anim_end - -gUnknown_843F9F8:: - obj_image_anim_frame 0x0040, 4 - obj_image_anim_frame 0x0060, 0 - obj_image_anim_end - -gUnknown_843FA04:: - obj_image_anim_frame 0x0040, 4 - obj_image_anim_end - -gUnknown_843FA0C:: - .4byte gUnknown_843F9D8 - .4byte gUnknown_843F9E0 - .4byte gUnknown_843F9EC - .4byte gUnknown_843F9F8 - .4byte gUnknown_843FA04 - -gUnknown_843FA20:: @ 843FA20 sprite_template - spr_template 4, 2, gUnknown_843F9D0, gUnknown_843FA0C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_843FA38:: - .4byte 0xc0000000, 0x00000c00 - -gUnknown_843FA40:: @ 843FA40 sprite_template - spr_template 6, 2, gUnknown_843FA38, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_843FA58:: - .4byte 0x40004000, 0x00000400 - -gUnknown_843FA60:: - .4byte 0x40000000, 0x00000400 - -gUnknown_843FA68:: - obj_image_anim_frame 0x0000, 0 - obj_image_anim_end - -gUnknown_843FA70:: - obj_image_anim_frame 0x0004, 0 - obj_image_anim_end - -gUnknown_843FA78:: - .4byte gUnknown_843FA68 - .4byte gUnknown_843FA70 - -gUnknown_843FA80:: @ 843FA80 sprite_template - spr_template 3, 2, gUnknown_843FA58, gUnknown_843FA78, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_843FA98:: @ 843FA98 sprite_template - spr_template 2, 2, gUnknown_843FA60, gUnknown_843FA78, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy diff --git a/data/scripts/mystery_event_club.inc b/data/scripts/mystery_event_club.inc index 8034ee0b1..5c4432714 100644 --- a/data/scripts/mystery_event_club.inc +++ b/data/scripts/mystery_event_club.inc @@ -100,7 +100,7 @@ EventScript_GaveSpecialProfile: @ 81BEF3F end EventScript_GiveProfile: @ 81BEF5A - setvar VAR_0x8004, 0 + setvar VAR_0x8004, EASY_CHAT_TYPE_PROFILE call Common_ShowEasyChatScreen lock faceplayer diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h index 7261365c2..b43e93da2 100644 --- a/include/constants/easy_chat.h +++ b/include/constants/easy_chat.h @@ -6,6 +6,10 @@ #define EASY_CHAT_TYPE_BATTLE_WON 2 #define EASY_CHAT_TYPE_BATTLE_LOST 3 #define EASY_CHAT_TYPE_MAIL 4 +#define EASY_CHAT_TYPE_MAIL_NO_CONFIRM 5 +#define EASY_CHAT_TYPE_BARD_SONG 6 +#define EASY_CHAT_TYPE_INTERVIEW 7 +#define EASY_CHAT_TYPE_TRENDY_PHRASE 9 #define EASY_CHAT_TYPE_QUESTIONNAIRE 14 #define EC_GROUP_POKEMON_2 0x0 diff --git a/include/data_8479668.h b/include/data_8479668.h index 1a1f44267..aba3721c8 100644 --- a/include/data_8479668.h +++ b/include/data_8479668.h @@ -32,4 +32,9 @@ extern const u8 gText_UnionRoomChatKeyboard_Emoji8[]; extern const u8 gText_UnionRoomChatKeyboard_Emoji9[]; extern const u8 gText_UnionRoomChatKeyboard_Emoji10[]; +extern const u8 gUnknown_847A8D8[]; +extern const u8 gUnknown_847A8FA[]; +extern const u8 gUnknown_847A913[]; +extern const u8 gUnknown_847A934[]; + #endif //GUARD_DATA_8479668_H diff --git a/include/easy_chat.h b/include/easy_chat.h index e7ec52fd1..11711cbbc 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -30,7 +30,6 @@ struct EasyChatWordsByLetter int numWords; }; -void InitEasyChatPhrases(void); u8 *CopyEasyChatWord(u8 *dest, u16 word); u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 length1, u16 length2); bool8 EC_DoesEasyChatStringFitOnLine(const u16 *easyChatWords, u8 columns, u8 rows, u16 maxLength); @@ -46,5 +45,31 @@ u16 GetNumDisplayedWords(void); const u8 *GetEasyChatWordGroupName(u8); u8 *CopyEasyChatWordPadded(u8 *, u16, u16); void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback); +u8 GetNumDisplayableGroups(void); +bool8 InitEasyChatGraphicsWork(void); +bool8 LoadEasyChatGraphics(void); +void DestroyEasyChatGraphicsResources(void); +void EasyChatInterfaceCommand_Setup(u16 id); +bool8 EasyChatInterfaceCommand_Run(void); +u8 GetEasyChatScreenFrameId(void); +const u8 *GetTitleText(void); +u16 *GetEasyChatWordBuffer(void); +u8 GetNumRows(void); +u8 GetNumColumns(void); +u8 GetMainCursorColumn(void); +u8 GetMainCursorRow(void); +void GetEasyChatInstructionsText(const u8 **str1, const u8 **str2); +void GetEasyChatConfirmText(const u8 **str1, const u8 **str2); +void GetEasyChatConfirmCancelText(const u8 **str1, const u8 **str2); +void GetEasyChatConfirmDeletionText(const u8 **str1, const u8 **str2); +void GetECSelectGroupCursorCoords(u8 *Xp, u8 *Yp); +bool8 IsEasyChatAlphaMode(void); +u8 GetECSelectGroupRowsAbove(void); +void GetECSelectWordCursorCoords(s8 *arg0, s8 *arg1); +u8 GetECSelectWordRowsAbove(void); +u8 GetECSelectWordNumRows(void); +u8 unref_sub_80FFE60(void); +bool32 ShouldDrawECUpArrow(void); +bool32 ShouldDrawECDownArrow(void); #endif // GUARD_EASY_CHAT_H diff --git a/include/graphics.h b/include/graphics.h index 2c3aa7c4b..a61d5f62f 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4886,4 +4886,13 @@ extern const u16 gUnknown_8EAFEA0[]; extern const u32 gUnknown_8EAFFC0[]; extern const u32 gUnknown_8EB0ADC[]; +// easy_chat_3 +extern const u32 gEasyChatWindow_Gfx[]; +extern const u32 gEasyChatWindow_Tilemap[]; +extern const u32 gEasyChatMode_Pal[]; +extern const u16 gUnknown_8E99F24[]; +extern const u32 gEasyChatRedRectangularCursor_Tiles[]; +extern const u32 gEasyChatSelectGroupHelp_Tiles[]; +extern const u32 gEasyChatModeIcons_Tiles[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/overworld.h b/include/overworld.h index a67c7cd88..daaa5e6e8 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -191,6 +191,7 @@ void sub_8057F70(void); void sub_8057F48(void); void SetMainCallback1(MainCallback cb); void CB1_Overworld(void); +void sub_80568C4(void); extern u16 gHeldKeyCodeToSend; diff --git a/include/strings.h b/include/strings.h index d5c6f4b58..443d84de2 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1313,4 +1313,41 @@ extern const u8 gText_QuestLog_CeruleanCave[]; extern const u8 gUnknown_841B69E[]; extern const u8 gUnknown_841B6B9[]; +// easy_chat_2 +extern const u8 gUnknown_84186D1[]; +extern const u8 gUnknown_84186EF[]; +extern const u8 gUnknown_8418706[]; +extern const u8 gUnknown_8418725[]; +extern const u8 gUnknown_8418745[]; +extern const u8 gUnknown_8418763[]; +extern const u8 gUnknown_8418780[]; +extern const u8 gUnknown_841879E[]; +extern const u8 gUnknown_84187B2[]; +extern const u8 gUnknown_84187D1[]; +extern const u8 gUnknown_84187EE[]; +extern const u8 gUnknown_841880E[]; +extern const u8 gUnknown_841881B[]; +extern const u8 gUnknown_841883E[]; +extern const u8 gUnknown_841885F[]; +extern const u8 gUnknown_8418881[]; +extern const u8 gUnknown_841888C[]; +extern const u8 gUnknown_84188AC[]; +extern const u8 gUnknown_84188B9[]; +extern const u8 gUnknown_84188D6[]; +extern const u8 gUnknown_84188F0[]; +extern const u8 gUnknown_8418902[]; +extern const u8 gUnknown_8418937[]; +extern const u8 gUnknown_8418956[]; +extern const u8 gUnknown_84189E0[]; +extern const u8 gUnknown_84189EE[]; +extern const u8 gUnknown_8418A2B[]; +extern const u8 gUnknown_8418A33[]; +extern const u8 gUnknown_8418A4A[]; +extern const u8 gUnknown_8418A61[]; +extern const u8 gUnknown_8418A77[]; +extern const u8 gUnknown_8418A87[]; +extern const u8 gUnknown_8418AA1[]; +extern const u8 gUnknown_8418AB2[]; +extern const u8 gUnknown_841EE2B[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 1de01ca5f..b919db2ef 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -226,7 +226,8 @@ SECTIONS { src/link_rfu_2.o(.text); src/link_rfu_3.o(.text); src/AgbRfu_LinkManager.o(.text); - asm/easy_chat_2.o(.text); + src/easy_chat_2.o(.text); + src/easy_chat_3.o(.text); src/pokedex_screen.o(.text); asm/pokedex_screen.o(.text); src/list_menu.o(.text); @@ -517,7 +518,8 @@ SECTIONS { src/map_preview_screen.o(.rodata); src/link_rfu_2.o(.rodata); src/link_rfu_3.o(.rodata); - data/easy_chat_2.o(.rodata); + src/easy_chat_2.o(.rodata); + src/easy_chat_3.o(.rodata); src/pokedex_screen.o(.rodata); data/pokedex_screen.o(.rodata); src/list_menu.o(.rodata); diff --git a/src/clear_save_data_screen.c b/src/clear_save_data_screen.c index 5485e8da9..b6f8b83e9 100644 --- a/src/clear_save_data_screen.c +++ b/src/clear_save_data_screen.c @@ -131,7 +131,7 @@ static void Task_HandleYesNoMenu(u8 taskId) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case -1: + case MENU_B_PRESSED: case 1: PlaySE(SE_SELECT); break; @@ -142,7 +142,7 @@ static void Task_HandleYesNoMenu(u8 taskId) CopyWindowToVram(1, 3); ClearSaveData(); break; - case -2: + case MENU_NOTHING_CHOSEN: default: return; } diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c new file mode 100644 index 000000000..4b3c70b67 --- /dev/null +++ b/src/easy_chat_2.c @@ -0,0 +1,1363 @@ +#include "global.h" +#include "gflib.h" +#include "easy_chat.h" +#include "event_data.h" +#include "menu.h" +#include "mevent.h" +#include "overworld.h" +#include "strings.h" +#include "task.h" +#include "constants/songs.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 + +struct EasyChatScreenTemplate +{ + u8 type; + u8 numColumns; + u8 numRows; + u8 frameId; + const u8 *titleText; + const u8 *instructionsText1; + const u8 *instructionsText2; + const u8 *confirmText1; + const u8 *confirmText2; +}; + +struct EasyChatScreen +{ + /*0x00*/ u8 type; + /*0x01*/ u8 templateId; + /*0x02*/ u8 numColumns; + /*0x03*/ u8 numRows; + /*0x04*/ u8 state; + /*0x05*/ s8 mainCursorColumn; + /*0x06*/ s8 mainCursorRow; + /*0x07*/ u8 numWords; + /*0x08*/ u8 stateBackup; + /*0x09*/ bool8 isAlphaMode; + /*0x0A*/ s8 selectGroupCursorX; + /*0x0B*/ s8 selectGroupCursorY; + /*0x0C*/ u8 selectGroupRowsAbove; + /*0x0D*/ u8 selectGroupNumRows; + /*0x0E*/ u8 selectWordRowsAbove; + /*0x0F*/ u8 selectWordNumRows; + /*0x10*/ s8 selectWordCursorX; + /*0x11*/ s8 selectWordCursorY; + /*0x14*/ u16 *words; + /*0x18*/ u16 ecWordBuffer[9]; +}; + +static EWRAM_DATA struct EasyChatScreen * sEasyChatScreen = NULL; + +static void CB2_EasyChatScreen(void); +static void Task_InitEasyChat(u8 taskId); +static void Task_RunEasyChat(u8 taskId); +static bool8 Task_InitEasyChatInternal(u8 taskId); +static void DismantleEasyChat(MainCallback cb); +static void CompareProfileResponseWithPassphrase(void); +static void CompareQuestionnaireResponseWithPassphrase(void); +static bool8 EasyChat_AllocateResources(u8 type, u16 *words); +static void EasyChat_FreeResources(void); +static u16 EasyChatScreen_HandleJoypad(void); +static u16 HandleJoypad_SelectField(void); +static u16 HandleJoypad_SelectFooter(void); +static u16 HandleJoypad_SelectGroup(void); +static u16 HandleJoypad_SelectWord(void); +static u16 Cancel_HandleYesNoMenu(void); +static u16 Confirm_HandleYesNoMenu(void); +static u16 DelAll_HandleYesNoMenu(void); +static u16 Cancel_CreateYesNoMenu(void); +static u16 DelAll_CreateYesNoMenu(void); +static u16 Confirm_CreateYesNoMenu(void); +static u8 GetStateBackup(void); +static int OpenSelectedGroup(void); +static int BackOutFromGroupToFieldSelect(void); +static int ToggleGroupAlphaMode(void); +static int DeleteSelectedWord(void); +static int PlaceSelectedWord(void); +static void CommitECWords(void); +static void DeleteAllECFields(void); +static void SetEasyChatWordToField(u16 word); +static bool8 HasECMessageChanged(void); +static u16 SelectGroupCursorAction(u32 action); +static int UpdateSelectGroupCursorPos_OutsideBlueBox_GroupMode(u32 action); +static int UpdateSelectGroupCursorPos_OutsideBlueBox_AlphaMode(u32 action); +static int UpdateSelectGroupCursorPos_InsideBlueBox(u32 action); +static void GroupCursorMoveToBlueBox(void); +static void GroupCursorWrapAroundLeft(void); +static u16 SelectWordCursorAction(u32 action); +static u16 GetSelectedFieldIndex(void); +static u16 GetSelectedGroupIndex(void); +static int GetSelectedLetter(void); +static u16 GetSelectWordCursorPos(void); +static u8 GetMaxGroupCursorXinAlphaMode(u8 unkB); +static void MoveGroupCursorXToMaxCol(void); +static void MoveWordCursorXToMaxCol(void); +static bool8 GroupSelectCursorXPosTooFarRight(void); +static bool8 WordSelectCursorXPosTooFarRight(void); +static bool8 IsPhraseDifferentThanPlayerInput(const u16 *wordsToCompare, u8 numWords); +static u8 GetEasyChatScreenTemplateId(u8 type); +static bool32 IsEcWordBufferUninitialized(void); + +void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback) +{ + u8 taskId; + ResetTasks(); + taskId = CreateTask(Task_InitEasyChat, 0); + gTasks[taskId].data[EZCHAT_TASK_TYPE] = type; + SetWordTaskArg(taskId, EZCHAT_TASK_WORDS, (uintptr_t)words); + SetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK, (uintptr_t)callback); + SetMainCallback2(CB2_EasyChatScreen); +} + +static void CB2_EasyChatScreen(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void VBlankCallback_EasyChatScreen(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); +} + +static void SetEasyChatTaskFunc(u8 taskId, TaskFunc func) +{ + gTasks[taskId].func = func; + gTasks[taskId].data[EZCHAT_TASK_STATE] = 0; +} + +static void Task_InitEasyChat(u8 taskId) +{ + if (!IsUpdateLinkStateCBActive()) + { + while (Task_InitEasyChatInternal(taskId)) + ; + } + else + { + if (Task_InitEasyChatInternal(taskId) == TRUE) + return; + } + SetEasyChatTaskFunc(taskId, Task_RunEasyChat); +} + +static void Task_RunEasyChat(u8 taskId) +{ + u16 action; + s16 *data; + + data = gTasks[taskId].data; + switch (data[EZCHAT_TASK_STATE]) + { + case 0: + SetVBlankCallback(VBlankCallback_EasyChatScreen); + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + data[EZCHAT_TASK_STATE]++; + break; + case 1: + action = EasyChatScreen_HandleJoypad(); + if (action == 23) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + data[EZCHAT_TASK_STATE] = 3; + } + else if (action != 0) + { + PlaySE(SE_SELECT); + EasyChatInterfaceCommand_Setup(action); + data[EZCHAT_TASK_STATE]++; + } + break; + case 2: + if (!EasyChatInterfaceCommand_Run()) + data[EZCHAT_TASK_STATE] = 1; + break; + case 3: + if (!gPaletteFade.active) + { + if (data[EZCHAT_TASK_TYPE] == EASY_CHAT_TYPE_QUESTIONNAIRE) + CompareQuestionnaireResponseWithPassphrase(); + if (data[EZCHAT_TASK_TYPE] == EASY_CHAT_TYPE_PROFILE) + { + FlagSet(FLAG_SYS_SET_TRAINER_CARD_PROFILE); + CompareProfileResponseWithPassphrase(); + } + DismantleEasyChat((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); + } + break; + } +} + +static bool8 Task_InitEasyChatInternal(u8 taskId) +{ + s16 *data; + + data = gTasks[taskId].data; + switch (data[EZCHAT_TASK_STATE]) + { + case 0: + SetVBlankCallback(NULL); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + break; + case 1: + if (!InitEasyChatSelection()) + { + DismantleEasyChat((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); + } + break; + case 2: + if (!EasyChat_AllocateResources(data[EZCHAT_TASK_TYPE], (u16 *)GetWordTaskArg(taskId, EZCHAT_TASK_WORDS))) + { + DismantleEasyChat((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); + } + break; + case 3: + if (!InitEasyChatGraphicsWork()) + { + DismantleEasyChat((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); + } + break; + case 4: + if (LoadEasyChatGraphics()) + { + return TRUE; + } + break; + default: + return FALSE; + } + data[EZCHAT_TASK_STATE]++; + return TRUE; +} + +static void DismantleEasyChat(MainCallback callback) +{ + DestroyEasyChatSelectionData(); + EasyChat_FreeResources(); + DestroyEasyChatGraphicsResources(); + FreeAllWindowBuffers(); + SetMainCallback2(callback); +} + +void ShowEasyChatScreen(void) +{ + u16 *words; + 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_QUESTIONNAIRE: + words = GetMEventProfileECWordsMaybe(); + break; + case EASY_CHAT_TYPE_MAIL: + words = gSaveBlock1Ptr->mail[gSpecialVar_0x8005].words; + break; + default: + return; + } + DoEasyChatScreen(gSpecialVar_0x8004, words, sub_80568C4); +} + +static const u16 sECPhrase_MysteryEventIsExciting[] = { + EC_WORD_MYSTERY, + EC_WORD_EVENT, + EC_WORD_IS, + EC_WORD_EXCITING +}; + +static void CompareProfileResponseWithPassphrase(void) +{ + gSpecialVar_0x8004 = IsPhraseDifferentThanPlayerInput(sECPhrase_MysteryEventIsExciting, NELEMS(sECPhrase_MysteryEventIsExciting)); +} + +static const u16 sECPhrase_LinkTogetherWithAll[] = { + EC_WORD_LINK, + EC_WORD_TOGETHER, + EC_WORD_WITH, + EC_WORD_ALL +}; + +static void CompareQuestionnaireResponseWithPassphrase(void) +{ + gSpecialVar_0x8004 = IsPhraseDifferentThanPlayerInput(sECPhrase_LinkTogetherWithAll, NELEMS(sECPhrase_LinkTogetherWithAll)); +} + +static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = { + { + .type = EASY_CHAT_TYPE_PROFILE, + .numColumns = 2, + .numRows = 2, + .frameId = 0, + .titleText = gUnknown_8418A2B, + .instructionsText1 = gUnknown_84186D1, + .instructionsText2 = gUnknown_84186EF, + .confirmText1 = gUnknown_841880E, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_BATTLE_START, + .numColumns = 2, + .numRows = 3, + .frameId = 1, + .titleText = gUnknown_8418A33, + .instructionsText1 = gUnknown_8418706, + .instructionsText2 = gUnknown_8418725, + .confirmText1 = gUnknown_841881B, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_BATTLE_WON, + .numColumns = 2, + .numRows = 3, + .frameId = 1, + .titleText = gUnknown_8418A4A, + .instructionsText1 = gUnknown_8418706, + .instructionsText2 = gUnknown_8418725, + .confirmText1 = gUnknown_841883E, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_BATTLE_LOST, + .numColumns = 2, + .numRows = 3, + .frameId = 1, + .titleText = gUnknown_8418A61, + .instructionsText1 = gUnknown_8418706, + .instructionsText2 = gUnknown_8418725, + .confirmText1 = gUnknown_841885F, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_MAIL, + .numColumns = 2, + .numRows = 5, + .frameId = 2, + .titleText = NULL, + .instructionsText1 = gUnknown_8418780, + .instructionsText2 = gUnknown_841879E, + .confirmText1 = gUnknown_841888C, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_MAIL_NO_CONFIRM, + .numColumns = 2, + .numRows = 2, + .frameId = 0, + .instructionsText1 = gUnknown_8418780, + .instructionsText2 = gUnknown_841879E, + }, { + .type = EASY_CHAT_TYPE_BARD_SONG, + .numColumns = 2, + .numRows = 3, + .frameId = 1, + .titleText = gUnknown_8418A77, + .instructionsText1 = gUnknown_84187B2, + .instructionsText2 = gUnknown_84187D1, + .confirmText1 = gUnknown_84188AC, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_INTERVIEW, + .numColumns = 2, + .numRows = 3, + .frameId = 1, + .titleText = gUnknown_8418AA1, + .instructionsText1 = gUnknown_8418745, + .instructionsText2 = gUnknown_8418763, + .confirmText1 = gUnknown_8418881, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_TRENDY_PHRASE, + .numColumns = 2, + .numRows = 1, + .frameId = 3, + .titleText = gUnknown_8418A87, + .instructionsText1 = gUnknown_84188B9, + .instructionsText2 = gUnknown_84188D6, + .confirmText1 = gUnknown_84188F0, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_QUESTIONNAIRE, + .numColumns = 2, + .numRows = 2, + .frameId = 0, + .titleText = gUnknown_8418AB2, + .instructionsText1 = gUnknown_84186D1, + .instructionsText2 = gUnknown_84187EE, + .confirmText1 = gUnknown_8418881, + .confirmText2 = gUnknown_8418902 + } +}; + +static bool8 EasyChat_AllocateResources(u8 type, u16 *words) +{ + u8 templateId; + int i; + + sEasyChatScreen = malloc(sizeof(*sEasyChatScreen)); + if (sEasyChatScreen == NULL) + return FALSE; + + sEasyChatScreen->type = type; + sEasyChatScreen->words = words; + sEasyChatScreen->state = 0; + sEasyChatScreen->mainCursorColumn = 0; + sEasyChatScreen->mainCursorRow = 0; + sEasyChatScreen->isAlphaMode = FALSE; + templateId = GetEasyChatScreenTemplateId(type); + + sEasyChatScreen->numColumns = sEasyChatScreenTemplates[templateId].numColumns; + sEasyChatScreen->numRows = sEasyChatScreenTemplates[templateId].numRows; + sEasyChatScreen->numWords = sEasyChatScreen->numColumns * sEasyChatScreen->numRows; + sEasyChatScreen->templateId = templateId; + if (sEasyChatScreen->numWords > 9) + sEasyChatScreen->numWords = 9; + + CpuCopy16(words, sEasyChatScreen->ecWordBuffer, sEasyChatScreen->numWords * sizeof(u16)); + sEasyChatScreen->selectGroupNumRows = (GetNumDisplayableGroups() - 1) / 2 + 1; + return TRUE; +} + +static void EasyChat_FreeResources(void) +{ + if (sEasyChatScreen != NULL) + Free(sEasyChatScreen); +} + +static u16 EasyChatScreen_HandleJoypad(void) +{ + switch (sEasyChatScreen->state) + { + case 0: + return HandleJoypad_SelectField(); + case 1: + return HandleJoypad_SelectFooter(); + case 2: + return HandleJoypad_SelectGroup(); + case 3: + return HandleJoypad_SelectWord(); + case 4: + return Cancel_HandleYesNoMenu(); + case 5: + return DelAll_HandleYesNoMenu(); + case 6: + return Confirm_HandleYesNoMenu(); + } + return 0; +} + +static u16 HandleJoypad_SelectField(void) +{ + do + { + if (JOY_NEW(A_BUTTON)) + { + sEasyChatScreen->state = 2; + sEasyChatScreen->selectGroupCursorX = 0; + sEasyChatScreen->selectGroupCursorY = 0; + sEasyChatScreen->selectGroupRowsAbove = 0; + return 9; + } + else if (JOY_NEW(B_BUTTON)) + { + return Cancel_CreateYesNoMenu(); + } + else if (JOY_NEW(START_BUTTON)) + { + return Confirm_CreateYesNoMenu(); + } + else if (JOY_NEW(DPAD_UP)) + { + sEasyChatScreen->mainCursorRow--; + break; + } + else if (JOY_NEW(DPAD_LEFT)) + { + sEasyChatScreen->mainCursorColumn--; + break; + } + else if (JOY_NEW(DPAD_DOWN)) + { + sEasyChatScreen->mainCursorRow++; + break; + } + else if (JOY_NEW(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 (GetEasyChatScreenFrameId() == 2 && sEasyChatScreen->mainCursorColumn == 1 && sEasyChatScreen->mainCursorRow == 4) + sEasyChatScreen->mainCursorColumn = 0; + + return 2; +} + +static u16 HandleJoypad_SelectFooter(void) +{ + do + { + if (JOY_NEW(A_BUTTON)) + { + switch (sEasyChatScreen->mainCursorColumn) + { + case 0: + return DelAll_CreateYesNoMenu(); + case 1: + return Cancel_CreateYesNoMenu(); + case 2: + return Confirm_CreateYesNoMenu(); + } + } + + if (JOY_NEW(B_BUTTON)) + { + return Cancel_CreateYesNoMenu(); + } + else if (JOY_NEW(START_BUTTON)) + { + return Confirm_CreateYesNoMenu(); + } + else if (JOY_NEW(DPAD_UP)) + { + sEasyChatScreen->mainCursorRow--; + break; + } + else if (JOY_NEW(DPAD_LEFT)) + { + sEasyChatScreen->mainCursorColumn--; + break; + } + else if (JOY_NEW(DPAD_DOWN)) + { + sEasyChatScreen->mainCursorRow = 0; + break; + } + else if (JOY_NEW(DPAD_RIGHT)) + { + sEasyChatScreen->mainCursorColumn++; + break; + } + + return 0; + } while (0); + + if (sEasyChatScreen->mainCursorRow == sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows) + { + if (sEasyChatScreen->mainCursorColumn < 0) + sEasyChatScreen->mainCursorColumn = 2; + + if (sEasyChatScreen->mainCursorColumn >= 3) + sEasyChatScreen->mainCursorColumn = 0; + + return 3; + } + + if (sEasyChatScreen->mainCursorColumn >= sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns) + sEasyChatScreen->mainCursorColumn = sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns - 1; + + if (GetEasyChatScreenFrameId() == 2 && sEasyChatScreen->mainCursorColumn == 1 && sEasyChatScreen->mainCursorRow == 4) + sEasyChatScreen->mainCursorColumn = 0; + + sEasyChatScreen->state = 0; + return 2; +} + +static u16 HandleJoypad_SelectGroup(void) +{ + if (JOY_NEW(B_BUTTON)) + return BackOutFromGroupToFieldSelect(); + + if (JOY_NEW(A_BUTTON)) + { + if (sEasyChatScreen->selectGroupCursorX != -1) + return OpenSelectedGroup(); + + switch (sEasyChatScreen->selectGroupCursorY) + { + case 0: + return ToggleGroupAlphaMode(); + case 1: + return DeleteSelectedWord(); + case 2: + return BackOutFromGroupToFieldSelect(); + } + } + + if (JOY_NEW(SELECT_BUTTON)) + return ToggleGroupAlphaMode(); + + if (JOY_REPT(DPAD_UP)) + return SelectGroupCursorAction(2); + + if (JOY_REPT(DPAD_DOWN)) + return SelectGroupCursorAction(3); + + if (JOY_REPT(DPAD_LEFT)) + return SelectGroupCursorAction(1); + + if (JOY_REPT(DPAD_RIGHT)) + return SelectGroupCursorAction(0); + + return 0; +} + +static u16 HandleJoypad_SelectWord(void) +{ + if (JOY_NEW(B_BUTTON)) + { + sEasyChatScreen->state = 2; + return 13; + } + + if (JOY_NEW(A_BUTTON)) + return PlaceSelectedWord(); + + if (JOY_NEW(START_BUTTON)) + return SelectWordCursorAction(4); + + if (JOY_NEW(SELECT_BUTTON)) + return SelectWordCursorAction(5); + + if (JOY_REPT(DPAD_UP)) + return SelectWordCursorAction(2); + + if (JOY_REPT(DPAD_DOWN)) + return SelectWordCursorAction(3); + + if (JOY_REPT(DPAD_LEFT)) + return SelectWordCursorAction(1); + + if (JOY_REPT(DPAD_RIGHT)) + return SelectWordCursorAction(0); + + return 0; +} + +static u16 Cancel_HandleYesNoMenu(void) +{ + u8 var0; + + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case MENU_B_PRESSED: // B Button + case 1: // No + sEasyChatScreen->state = GetStateBackup(); + return 7; + case 0: // Yes + gSpecialVar_Result = 0; + + return 23; + default: + return 0; + } +} + +static u16 Confirm_HandleYesNoMenu(void) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case MENU_B_PRESSED: // B Button + case 1: // No + sEasyChatScreen->state = GetStateBackup(); + return 7; + case 0: // Yes + gSpecialVar_Result = HasECMessageChanged(); + CommitECWords(); + return 23; + default: + return 0; + } +} + +static u16 DelAll_HandleYesNoMenu(void) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case MENU_B_PRESSED: // B Button + case 1: // No + sEasyChatScreen->state = 1; + return 7; + case 0: // Yes + DeleteAllECFields(); + sEasyChatScreen->state = 1; + return 8; + default: + return 0; + } +} + +static u16 Cancel_CreateYesNoMenu(void) +{ + sEasyChatScreen->stateBackup = sEasyChatScreen->state; + sEasyChatScreen->state = 4; + return 5; +} + +static u16 DelAll_CreateYesNoMenu(void) +{ + sEasyChatScreen->stateBackup = sEasyChatScreen->state; + sEasyChatScreen->state = 5; + return 4; +} + +static u16 Confirm_CreateYesNoMenu(void) +{ + sEasyChatScreen->stateBackup = sEasyChatScreen->state; + if (IsEcWordBufferUninitialized()) + { + sEasyChatScreen->state = 4; + return 5; + } + else + { + sEasyChatScreen->state = 6; + return 6; + } +} + +static u8 GetStateBackup(void) +{ + return sEasyChatScreen->stateBackup; +} + +static int OpenSelectedGroup(void) +{ + u16 numDisplayedWords; + + if (!sEasyChatScreen->isAlphaMode) + { + u8 groupId = GetSelectedGroupByIndex(GetSelectedGroupIndex()); + GetUnlockedECWords(FALSE, groupId); + } + else + { + GetUnlockedECWords(TRUE, GetSelectedLetter()); + } + + numDisplayedWords = GetNumDisplayedWords(); + if (numDisplayedWords == 0) + return 0; + + sEasyChatScreen->selectWordNumRows = (numDisplayedWords - 1) / 2; + sEasyChatScreen->selectWordRowsAbove = 0; + sEasyChatScreen->selectWordCursorX = 0; + sEasyChatScreen->selectWordCursorY = 0; + sEasyChatScreen->state = 3; + return 11; +} + +static int BackOutFromGroupToFieldSelect(void) +{ + sEasyChatScreen->state = 0; + return 10; +} + +static int ToggleGroupAlphaMode(void) +{ + sEasyChatScreen->selectGroupCursorX = 0; + sEasyChatScreen->selectGroupCursorY = 0; + sEasyChatScreen->selectGroupRowsAbove = 0; + if (!sEasyChatScreen->isAlphaMode) + sEasyChatScreen->isAlphaMode = TRUE; + else + sEasyChatScreen->isAlphaMode = FALSE; + + return 22; +} + +static int DeleteSelectedWord(void) +{ + SetEasyChatWordToField(0xFFFF); + return 1; +} + +static int PlaceSelectedWord(void) +{ + u16 easyChatWord = GetDisplayedWordByIndex(GetSelectWordCursorPos()); + SetEasyChatWordToField(easyChatWord); + sEasyChatScreen->state = 0; + return 12; +} + +static void CommitECWords(void) +{ + u16 i; + for (i = 0; i < sEasyChatScreen->numWords; i++) + sEasyChatScreen->words[i] = sEasyChatScreen->ecWordBuffer[i]; +} + +static void DeleteAllECFields(void) +{ + u16 i; + for (i = 0; i < sEasyChatScreen->numWords; i++) + sEasyChatScreen->ecWordBuffer[i] = 0xFFFF; +} + +static void SetEasyChatWordToField(u16 easyChatWord) +{ + u16 index = GetSelectedFieldIndex(); + sEasyChatScreen->ecWordBuffer[index] = easyChatWord; +} + +static bool8 HasECMessageChanged(void) +{ + u16 i; + for (i = 0; i < sEasyChatScreen->numWords; i++) + { + if (sEasyChatScreen->ecWordBuffer[i] != sEasyChatScreen->words[i]) + return TRUE; + } + + return FALSE; +} + +static u16 SelectGroupCursorAction(u32 action) +{ + if (sEasyChatScreen->selectGroupCursorX != -1) + { + if (!sEasyChatScreen->isAlphaMode) + return UpdateSelectGroupCursorPos_OutsideBlueBox_GroupMode(action); + else + return UpdateSelectGroupCursorPos_OutsideBlueBox_AlphaMode(action); + } + else + { + return UpdateSelectGroupCursorPos_InsideBlueBox(action); + } +} + +static int UpdateSelectGroupCursorPos_OutsideBlueBox_GroupMode(u32 arg0) +{ + switch (arg0) + { + case 2: + if (sEasyChatScreen->selectGroupCursorY != -sEasyChatScreen->selectGroupRowsAbove) + { + if (sEasyChatScreen->selectGroupCursorY) + { + sEasyChatScreen->selectGroupCursorY--; + return 14; + } + else + { + sEasyChatScreen->selectGroupRowsAbove--; + return 16; + } + } + break; + case 3: + if (sEasyChatScreen->selectGroupCursorY + sEasyChatScreen->selectGroupRowsAbove < sEasyChatScreen->selectGroupNumRows - 1) + { + int var0; + if (sEasyChatScreen->selectGroupCursorY < 3) + { + sEasyChatScreen->selectGroupCursorY++; + var0 = 14; + } + else + { + sEasyChatScreen->selectGroupRowsAbove++; + var0 = 15; + } + + MoveGroupCursorXToMaxCol(); + return var0; + } + break; + case 1: + if (sEasyChatScreen->selectGroupCursorX) + sEasyChatScreen->selectGroupCursorX--; + else + GroupCursorMoveToBlueBox(); + + return 14; + case 0: + if (sEasyChatScreen->selectGroupCursorX < 1) + { + sEasyChatScreen->selectGroupCursorX++; + if (GroupSelectCursorXPosTooFarRight()) + GroupCursorMoveToBlueBox(); + } + else + { + GroupCursorMoveToBlueBox(); + } + return 14; + } + + return 0; +} + +static int UpdateSelectGroupCursorPos_OutsideBlueBox_AlphaMode(u32 arg0) +{ + switch (arg0) + { + case 2: + if (sEasyChatScreen->selectGroupCursorY > 0) + sEasyChatScreen->selectGroupCursorY--; + else + sEasyChatScreen->selectGroupCursorY = 3; + + MoveGroupCursorXToMaxCol(); + return 14; + case 3: + if (sEasyChatScreen->selectGroupCursorY < 3) + sEasyChatScreen->selectGroupCursorY++; + else + sEasyChatScreen->selectGroupCursorY = 0; + + MoveGroupCursorXToMaxCol(); + return 14; + case 0: + sEasyChatScreen->selectGroupCursorX++; + if (GroupSelectCursorXPosTooFarRight()) + GroupCursorMoveToBlueBox(); + + return 14; + case 1: + sEasyChatScreen->selectGroupCursorX--; + if (sEasyChatScreen->selectGroupCursorX < 0) + GroupCursorMoveToBlueBox(); + + return 14; + } + + return 0; +} + +static int UpdateSelectGroupCursorPos_InsideBlueBox(u32 arg0) +{ + switch (arg0) + { + case 2: + if (sEasyChatScreen->selectGroupCursorY) + sEasyChatScreen->selectGroupCursorY--; + else + sEasyChatScreen->selectGroupCursorY = 2; + + return 14; + case 3: + if (sEasyChatScreen->selectGroupCursorY < 2) + sEasyChatScreen->selectGroupCursorY++; + else + sEasyChatScreen->selectGroupCursorY = 0; + + return 14; + case 1: + sEasyChatScreen->selectGroupCursorY++; + GroupCursorWrapAroundLeft(); + return 14; + case 0: + sEasyChatScreen->selectGroupCursorX = 0; + sEasyChatScreen->selectGroupCursorY++; + return 14; + } + + return 0; +} + +static void GroupCursorMoveToBlueBox(void) +{ + sEasyChatScreen->selectGroupCursorX = 0xFF; + if (sEasyChatScreen->selectGroupCursorY) + sEasyChatScreen->selectGroupCursorY--; +} + +static void GroupCursorWrapAroundLeft(void) +{ + if (!sEasyChatScreen->isAlphaMode) + { + sEasyChatScreen->selectGroupCursorX = 1; + MoveGroupCursorXToMaxCol(); + } + else + { + sEasyChatScreen->selectGroupCursorX = GetMaxGroupCursorXinAlphaMode(sEasyChatScreen->selectGroupCursorY); + } +} + +static u16 SelectWordCursorAction(u32 arg0) +{ + u16 result; + switch (arg0) + { + case 2: // up + if (sEasyChatScreen->selectWordCursorY + sEasyChatScreen->selectWordRowsAbove > 0) + { + if (sEasyChatScreen->selectWordCursorY > 0) + { + sEasyChatScreen->selectWordCursorY--; + result = 17; + } + else + { + sEasyChatScreen->selectWordRowsAbove--; + result = 18; + } + + MoveWordCursorXToMaxCol(); + return result; + } + break; + case 3: // down + if (sEasyChatScreen->selectWordCursorY + sEasyChatScreen->selectWordRowsAbove < sEasyChatScreen->selectWordNumRows) + { + if (sEasyChatScreen->selectWordCursorY < 3) + { + sEasyChatScreen->selectWordCursorY++; + result = 17; + } + else + { + sEasyChatScreen->selectWordRowsAbove++; + result = 19; + } + + MoveWordCursorXToMaxCol(); + return result; + } + break; + case 1: // left + if (sEasyChatScreen->selectWordCursorX > 0) + sEasyChatScreen->selectWordCursorX--; + else + sEasyChatScreen->selectWordCursorX = 1; + + MoveWordCursorXToMaxCol(); + return 17; + case 0: // right + if (sEasyChatScreen->selectWordCursorX < 1) + { + sEasyChatScreen->selectWordCursorX++; + if (WordSelectCursorXPosTooFarRight()) + sEasyChatScreen->selectWordCursorX = 0; + } + else + { + sEasyChatScreen->selectWordCursorX = 0; + } + return 17; + case 4: // pg up + if (sEasyChatScreen->selectWordRowsAbove) + { + if (sEasyChatScreen->selectWordRowsAbove > 3) + sEasyChatScreen->selectWordRowsAbove -= 4; + else + sEasyChatScreen->selectWordRowsAbove = 0; + + return 20; + } + break; + case 5: // pg dn + if (sEasyChatScreen->selectWordRowsAbove <= sEasyChatScreen->selectWordNumRows - 4) + { + sEasyChatScreen->selectWordRowsAbove += 4; + if (sEasyChatScreen->selectWordRowsAbove > sEasyChatScreen->selectWordNumRows - 3) + sEasyChatScreen->selectWordRowsAbove = sEasyChatScreen->selectWordNumRows + -3u; + + MoveWordCursorXToMaxCol(); + return 21; + } + break; + } + + return 0; +} + +static u16 GetSelectedFieldIndex(void) +{ + return (sEasyChatScreen->mainCursorRow * sEasyChatScreen->numColumns) + sEasyChatScreen->mainCursorColumn; +} + +static u16 GetSelectedGroupIndex(void) +{ + return 2 * (sEasyChatScreen->selectGroupCursorY + sEasyChatScreen->selectGroupRowsAbove) + sEasyChatScreen->selectGroupCursorX; +} + +static const u8 sAlphabetLayout[][7] = { + { 1, 2, 3, 4, 5, 6}, + { 7, 8, 9, 10, 11, 12}, + {13, 14, 15, 16, 17, 18, 19}, + {20, 21, 22, 23, 24, 25, 26} +}; + +static int GetSelectedLetter(void) +{ + int col = sEasyChatScreen->selectGroupCursorX < NELEMS(*sAlphabetLayout) ? sEasyChatScreen->selectGroupCursorX : 0; + int row = sEasyChatScreen->selectGroupCursorY < NELEMS(sAlphabetLayout) ? sEasyChatScreen->selectGroupCursorY : 0; + return sAlphabetLayout[row][col]; +} + +static u16 GetSelectWordCursorPos(void) +{ + return 2 * (sEasyChatScreen->selectWordCursorY + sEasyChatScreen->selectWordRowsAbove) + sEasyChatScreen->selectWordCursorX; +} + +static u8 GetMaxGroupCursorXinAlphaMode(u8 arg0) +{ + switch (arg0) + { + case 0: + default: + return 6; + case 1: + return 5; + } +} + +static void MoveGroupCursorXToMaxCol(void) +{ + while (GroupSelectCursorXPosTooFarRight()) + { + if (sEasyChatScreen->selectGroupCursorX) + sEasyChatScreen->selectGroupCursorX--; + else + break; + } +} + +static void MoveWordCursorXToMaxCol(void) +{ + while (WordSelectCursorXPosTooFarRight()) + { + if (sEasyChatScreen->selectWordCursorX) + sEasyChatScreen->selectWordCursorX--; + else + break; + } +} + +static bool8 GroupSelectCursorXPosTooFarRight(void) +{ + if (!sEasyChatScreen->isAlphaMode) + return GetSelectedGroupIndex() >= GetNumDisplayableGroups() ? TRUE : FALSE; + else + return sEasyChatScreen->selectGroupCursorX > GetMaxGroupCursorXinAlphaMode(sEasyChatScreen->selectGroupCursorY) ? TRUE : FALSE; +} + +static bool8 WordSelectCursorXPosTooFarRight(void) +{ + return GetSelectWordCursorPos() >= GetNumDisplayedWords() ? TRUE : FALSE; +} + +u8 GetEasyChatScreenFrameId(void) +{ + return sEasyChatScreenTemplates[sEasyChatScreen->templateId].frameId; +} + +const u8 *GetTitleText(void) +{ + return sEasyChatScreenTemplates[sEasyChatScreen->templateId].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 GetEasyChatConfirmCancelText(const u8 **str1, const u8 **str2) +{ + switch (sEasyChatScreen->type) + { + case EASY_CHAT_TYPE_MAIL: + *str1 = gUnknown_84189EE; + *str2 = NULL; + break; + default: + *str1 = gUnknown_84189E0; + *str2 = NULL; + break; + } + +} + +void GetEasyChatConfirmDeletionText(const u8 **str1, const u8 **str2) +{ + *str1 = gUnknown_8418937; + *str2 = gUnknown_8418956; +} + +void GetECSelectGroupCursorCoords(u8 *Xp, u8 *Yp) +{ + *Xp = sEasyChatScreen->selectGroupCursorX; + *Yp = sEasyChatScreen->selectGroupCursorY; +} + +bool8 IsEasyChatAlphaMode(void) +{ + return sEasyChatScreen->isAlphaMode; +} + +u8 GetECSelectGroupRowsAbove(void) +{ + return sEasyChatScreen->selectGroupRowsAbove; +} + +void GetECSelectWordCursorCoords(s8 *Xp, s8 *Yp) +{ + *Xp = sEasyChatScreen->selectWordCursorX; + *Yp = sEasyChatScreen->selectWordCursorY; +} + +u8 GetECSelectWordRowsAbove(void) +{ + return sEasyChatScreen->selectWordRowsAbove; +} + +u8 GetECSelectWordNumRows(void) +{ + return sEasyChatScreen->selectWordNumRows; +} + +u8 unref_sub_80FFE60(void) +{ + return 0; +} + +bool32 ShouldDrawECUpArrow(void) +{ + switch (sEasyChatScreen->state) + { + case 2: + if (!sEasyChatScreen->isAlphaMode && sEasyChatScreen->selectGroupRowsAbove != 0) + return TRUE; + break; + case 3: + if (sEasyChatScreen->selectWordRowsAbove != 0) + return TRUE; + break; + } + + return FALSE; +} + +bool32 ShouldDrawECDownArrow(void) +{ + switch (sEasyChatScreen->state) + { + case 2: + if (!sEasyChatScreen->isAlphaMode && sEasyChatScreen->selectGroupRowsAbove + 4 <= sEasyChatScreen->selectGroupNumRows - 1) + return TRUE; + break; + case 3: + if (sEasyChatScreen->selectWordRowsAbove + 4 <= sEasyChatScreen->selectWordNumRows) + return TRUE; + break; + } + + return FALSE; +} + +static bool8 IsPhraseDifferentThanPlayerInput(const u16 *phrase, u8 phraseLength) +{ + u8 i; + + for (i = 0; i < phraseLength; i++) + { + if (phrase[i] != sEasyChatScreen->ecWordBuffer[i]) + return TRUE; + } + + return FALSE; +} + +static u8 GetEasyChatScreenTemplateId(u8 type) +{ + u32 i; + + for (i = 0; i < NELEMS(sEasyChatScreenTemplates); i++) + { + if (sEasyChatScreenTemplates[i].type == type) + return i; + } + + return 0; +} + +static bool32 IsEcWordBufferUninitialized(void) +{ + int i; + + for (i = 0; i < sEasyChatScreen->numWords; i++) + { + if (sEasyChatScreen->ecWordBuffer[i] != 0xFFFF) + return FALSE; + } + + return TRUE; +} diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c new file mode 100644 index 000000000..3d9d6c9f7 --- /dev/null +++ b/src/easy_chat_3.c @@ -0,0 +1,2298 @@ +#include "global.h" +#include "gflib.h" +#include "data_8479668.h" +#include "decompress.h" +#include "easy_chat.h" +#include "graphics.h" +#include "menu.h" +#include "new_menu_helpers.h" +#include "strings.h" +#include "text_window.h" + +struct ECWork +{ + u16 state; + u16 windowId; + u16 id; + u8 frameAnimIdx; + u8 frameAnimTarget; + s8 frameAnimDelta; + u8 modeIconState; + u8 ecPrintBuffer[0xC1]; + u8 ecPaddedWordBuffer[0x200]; + u16 bg2ScrollRow; + int tgtBgY; + int deltaBgY; + struct Sprite * selectDestFieldCursorSprite; + struct Sprite * rectCursorSpriteRight; + struct Sprite * rectCursorSpriteLeft; + struct Sprite * selectWordCursorSprite; + struct Sprite * selectGroupHelpSprite; + struct Sprite * modeIconsSprite; + struct Sprite * upTriangleCursorSprite; + struct Sprite * downTriangleCursorSprite; + struct Sprite * startPgUpButtonSprite; + struct Sprite * selectPgDnButtonSprite; + u16 bg1TilemapBuffer[BG_SCREEN_SIZE / 2]; + u16 bg3TilemapBuffer[BG_SCREEN_SIZE / 2]; +}; + +struct EasyChatPhraseFrameDimensions +{ + u8 left; + u8 top; + u8 width; + u8 height; +}; + +static EWRAM_DATA struct ECWork * sEasyChatGraphicsResources = NULL; + +static bool8 ECInterfaceCmd_01(void); +static bool8 ECInterfaceCmd_02(void); +static bool8 ECInterfaceCmd_03(void); +static bool8 ECInterfaceCmd_05(void); +static bool8 ECInterfaceCmd_06(void); +static bool8 ECInterfaceCmd_04(void); +static bool8 ECInterfaceCmd_07(void); +static bool8 ECInterfaceCmd_08(void); +static bool8 ECInterfaceCmd_09(void); +static bool8 ECInterfaceCmd_10(void); +static bool8 ECInterfaceCmd_22(void); +static bool8 ECInterfaceCmd_14(void); +static bool8 ECInterfaceCmd_15(void); +static bool8 ECInterfaceCmd_16(void); +static bool8 ECInterfaceCmd_11(void); +static bool8 ECInterfaceCmd_12(void); +static bool8 ECInterfaceCmd_13(void); +static bool8 ECInterfaceCmd_17(void); +static bool8 ECInterfaceCmd_19(void); +static bool8 ECInterfaceCmd_18(void); +static bool8 ECInterfaceCmd_21(void); +static bool8 ECInterfaceCmd_20(void); +static bool8 InitEasyChatGraphicsWork_Internal(void); +static void SetGpuRegsForEasyChatInit(void); +static void LoadEasyChatPals(void); +static void PrintTitleText(void); +static void EC_AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 bg, u8 fg, u8 shadow); +static void PrintECInstructionsText(void); +static void PrintECInterfaceTextById(u8 a0); +static void EC_CreateYesNoMenuWithInitialCursorPos(u8 initialCursorPos); +static void CreatePhraseFrameWindow(void); +static void PrintECFields(void); +static void DrawECFrameInTilemapBuffer(u16 *buffer); +static void PutWin2TilemapAndCopyToVram(void); +static void PrintECMenuById(u32 a0); +static void PrintECGroupOrAlphaMenu(void); +static void PrintECGroupsMenu(void); +static void PrintEasyChatKeyboardText(void); +static void PrintECWordsMenu(void); +static void UpdateWin2PrintWordsScrollDown(void); +static void UpdateWin2PrintWordsScrollUp(void); +static void UpdateWin2PrintWordsScrollPageDown(void); +static void UpdateWin2PrintWordsScrollPageUp(void); +static void PrintECRowsWin2(u8 row, u8 remrow); +static void ClearECRowsWin2(u8 row, u8 remrow); +static void ClearWin2AndCopyToVram(void); +static void StartWin2FrameAnim(int a0); +static bool8 AnimateFrameResize(void); +static void RedrawFrameByIndex(u8 a0); +static void RedrawFrameByRect(int left, int top, int width, int height); +static void InitBg2Scroll(void); +static void ScheduleBg2VerticalScroll(s16 direction, u8 speed); +static bool8 AnimateBg2VerticalScroll(void); +static int GetBg2ScrollRow(void); +static void SetRegWin0Coords(u8 left, u8 top, u8 right, u8 bottom); +static void LoadSpriteGfx(void); +static void CreateSelectDestFieldCursorSprite(void); +static void SpriteCB_BounceCursor(struct Sprite * sprite); +static void SetSelectDestFieldCursorSpritePosAndResetAnim(u8 x, u8 y); +static void FreezeSelectDestFieldCursorSprite(void); +static void UnfreezeSelectDestFieldCursorSprite(void); +static void CreateRedRectangularCursorSpritePair(void); +static void DestroyRedRectangularCursor(void); +static void EC_MoveCursor(void); +static void MoveCursor_Group(s8 a0, s8 a1); +static void MoveCursor_Alpha(s8 a0, s8 a1); +static void CreateSelectWordCursorSprite(void); +static void SpriteCB_SelectWordCursorSprite(struct Sprite * sprite); +static void SetSelectWordCursorSpritePos(void); +static void SetSelectWordCursorSpritePosExplicit(u8 x, u8 y); +static void DestroySelectWordCursorSprite(void); +static void CreateSelectGroupHelpSprite(void); +static bool8 AnimateSeletGroupModeAndHelpSpriteEnter(void); +static void StartModeIconHidingAnimation(void); +static bool8 RunModeIconHidingAnimation(void); +static void ShrinkModeIconsSprite(void); +static void ShowModeIconsSprite(void); +static bool8 ModeIconsSpriteAnimIsEnded(void); +static void CreateVerticalScrollArrowSprites(void); +static void UpdateVerticalScrollArrowVisibility(void); +static void HideVerticalScrollArrowSprites(void); +static void UpdateVerticalScrollArrowSpriteXPos(int a0); +static void CreateStartSelectButtonsSprites(void); +static void UpdateStartSelectButtonSpriteVisibility(void); +static void HideStartSelectButtonSprites(void); +static void CreateFooterWindow(void); + +static const u16 gUnknown_843F3B8[] = INCBIN_U16("graphics/link_rfu/unk_843F3F8.gbapal"); +static const u16 gUnknown_843F3D8[] = INCBIN_U16("graphics/link_rfu/unk_8E9BD28.gbapal"); +static const u16 sRightTriangleCursor_Tiles[] = INCBIN_U16("graphics/link_rfu/unk_843F3F8.4bpp"); +static const u16 sUpTriangleCursor_Tiles[] = INCBIN_U16("graphics/link_rfu/unk_843F418.4bpp"); +static const u16 sStartSelectButtons_Tiles[] = INCBIN_U16("graphics/link_rfu/unk_843F518.4bpp"); +static const u16 gUnknown_843F618[] = INCBIN_U16("graphics/link_rfu/unk_843F638.gbapal"); +static const u32 gUnknown_843F638[] = INCBIN_U32("graphics/link_rfu/unk_843F638.4bpp.lz"); +static const u16 gUnknown_843F76C[] = INCBIN_U16("graphics/link_rfu/unk_843F76C.gbapal"); +static const u16 gUnknown_843F78C[] = INCBIN_U16("graphics/link_rfu/unk_843F78C.gbapal"); +static const u32 gUnknown_843F7AC[] = INCBIN_U32("graphics/link_rfu/unk_843F7AC.4bpp.lz"); + +static const u16 gUnknown_843F874[] = { + RGB( 0, 0, 0), + RGB( 0, 0, 0), + RGB( 7, 25, 31), + RGB(21, 21, 29) +}; + +static const u16 gUnknown_843F87C[] = { + RGB( 0, 0, 0), + RGB(31, 31, 31), + RGB(12, 12, 12), + RGB(27, 26, 27), + RGB( 8, 17, 9) +}; + +static const struct EasyChatPhraseFrameDimensions sPhraseFrameDimensions[] = { + { + .left = 0x03, + .top = 0x04, + .width = 0x18, + .height = 0x04 + }, { + .left = 0x01, + .top = 0x04, + .width = 0x1b, + .height = 0x04 + }, { + .left = 0x03, + .top = 0x00, + .width = 0x18, + .height = 0x0a + }, { + .left = 0x06, + .top = 0x06, + .width = 0x12, + .height = 0x04 + }, { + .left = 0x10, + .top = 0x04, + .width = 0x09, + .height = 0x02 + }, { + .left = 0x0e, + .top = 0x04, + .width = 0x12, + .height = 0x04 + } +}; + +static const struct BgTemplate sEasyChatBgTemplates[] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0, + }, { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0, + }, { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x80, + }, { + .bg = 3, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0, + } +}; + +static const struct WindowTemplate sEasyChatWindowTemplates[] = { + { + .bg = 1, + .tilemapLeft = 7, + .tilemapTop = 0, + .width = 16, + .height = 2, + .paletteNum = 10, + .baseBlock = 0x10, + }, + { + .bg = 0, + .tilemapLeft = 4, + .tilemapTop = 15, + .width = 22, + .height = 4, + .paletteNum = 15, + .baseBlock = 0xA, + }, + { + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 0, + .width = 28, + .height = 32, + .paletteNum = 3, + .baseBlock = 0, + }, + DUMMY_WIN_TEMPLATE, +}; + +static const struct WindowTemplate sEasyChatYesNoWindowTemplate = { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 9, + .width = 5, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x062 +}; + +static const u8 gUnknown_843F8D8[] = _("{UNDERSCORE}"); +static const u8 sText_Clear17[] = _("{CLEAR 17}"); + +static const u8 *const sEasyChatKeyboardText[] = { + gUnknown_847A8D8, + gUnknown_847A8FA, + gUnknown_847A913, + gUnknown_847A934 +}; + +static const struct SpriteSheet sEasyChatSpriteSheets[] = { + {sRightTriangleCursor_Tiles, 0x0020, 0}, + {sUpTriangleCursor_Tiles, 0x0100, 2}, + {sStartSelectButtons_Tiles, 0x0100, 3}, + {} +}; + +static const struct SpritePalette sEasyChatSpritePalettes[] = { + {gUnknown_843F3B8, 0}, + {gUnknown_843F3D8, 1}, + {gUnknown_8E99F24, 2}, + {gUnknown_843F618, 3}, + {} +}; + +static const struct CompressedSpriteSheet sEasyChatCompressedSpriteSheets[] = { + {gUnknown_843F638, 0x0800, 5}, + {gEasyChatRedRectangularCursor_Tiles, 0x1000, 1}, + {gEasyChatSelectGroupHelp_Tiles, 0x0800, 6}, + {gEasyChatModeIcons_Tiles, 0x1000, 4} +}; + +static const u8 sECDisplay_AlphaModeXCoords[] = { + 0, + 12, + 24, + 56, + 68, + 80, + 92 +}; + +static const struct OamData sOamData_RightTriangleCursor = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .mosaic = FALSE, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0x000, + .priority = 3, + .paletteNum = 0 +}; + +static const struct SpriteTemplate sSpriteTemplate_RightTriangleCursor = { + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_RightTriangleCursor, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_BounceCursor +}; + +static const struct OamData sOamData_RedRectangularCursor = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .mosaic = FALSE, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0x000, + .priority = 1, + .paletteNum = 0 +}; + +static const union AnimCmd sAnimCmd_RectCursor_Wide[] = { + ANIMCMD_FRAME(0x00, 0), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_RectCursor_Norm[] = { + ANIMCMD_FRAME(0x20, 0), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_RectCursor_NormTaller[] = { + ANIMCMD_FRAME(0x40, 0), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_RectCursor_Narrow[] = { + ANIMCMD_FRAME(0x60, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sAnimTable_RedRectangularCursor[] = { + sAnimCmd_RectCursor_Wide, + sAnimCmd_RectCursor_Norm, + sAnimCmd_RectCursor_NormTaller, + sAnimCmd_RectCursor_Narrow +}; + +static const struct SpriteTemplate sSpriteTemplate_RedRectangularCursor = { + .tileTag = 1, + .paletteTag = 1, + .oam = &sOamData_RedRectangularCursor, + .anims = sAnimTable_RedRectangularCursor, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_BounceCursor +}; + +static const struct OamData sOamData_EasyChatModeIcons = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .mosaic = FALSE, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0x000, + .priority = 1, + .paletteNum = 0 +}; + +static const union AnimCmd sAnim_EasyChatModeIcon_Hidden[] = { + ANIMCMD_FRAME(0x60, 0), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_EasyChatModeIcon_ToGroupMode[] = { + ANIMCMD_FRAME(0x40, 4), + ANIMCMD_FRAME(0x20, 4), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_EasyChatModeIcon_ToAlphaMode[] = { + ANIMCMD_FRAME(0x40, 4), + ANIMCMD_FRAME(0x00, 4), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_EasyChatModeIcon_ToHidden[] = { + ANIMCMD_FRAME(0x40, 4), + ANIMCMD_FRAME(0x60, 0), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_EasyChatModeIcon_HoldSmall[] = { + ANIMCMD_FRAME(0x40, 4), + ANIMCMD_END +}; + +static const union AnimCmd *const sAnimTable_EasyChatModeIcons[] = { + sAnim_EasyChatModeIcon_Hidden, + sAnim_EasyChatModeIcon_ToGroupMode, + sAnim_EasyChatModeIcon_ToAlphaMode, + sAnim_EasyChatModeIcon_ToHidden, + sAnim_EasyChatModeIcon_HoldSmall +}; + +static const struct SpriteTemplate sSpriteTemplate_EasyChatModeIcons = { + .tileTag = 4, + .paletteTag = 2, + .oam = &sOamData_EasyChatModeIcons, + .anims = sAnimTable_EasyChatModeIcons, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct OamData sOamData_SelectGroupHelp = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0x000, + .priority = 3, + .paletteNum = 0 +}; + +static const struct SpriteTemplate sSpriteTemplate_SelectGroupHelp = { + .tileTag = 6, + .paletteTag = 2, + .oam = &sOamData_SelectGroupHelp, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct OamData gUnknown_843FA58 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0x000, + .priority = 1, + .paletteNum = 0 +}; + +static const struct OamData sOamData_UpTriangleCursor = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0x000, + .priority = 1, + .paletteNum = 0 +}; + +static const union AnimCmd gUnknown_843FA68[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_843FA70[] = { + ANIMCMD_FRAME(4, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_843FA78[] = { + gUnknown_843FA68, + gUnknown_843FA70, +}; + +static const struct SpriteTemplate sSpriteTemplate_StartSelectButtons = { + .tileTag = 3, + .paletteTag = 2, + .oam = &gUnknown_843FA58, + .anims = gUnknown_843FA78, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_UpTriangleCursor = { + .tileTag = 2, + .paletteTag = 2, + .oam = &sOamData_UpTriangleCursor, + .anims = gUnknown_843FA78, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +bool8 InitEasyChatGraphicsWork(void) +{ + if (!InitEasyChatGraphicsWork_Internal()) + return FALSE; + else + return TRUE; +} + +bool8 LoadEasyChatGraphics(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sEasyChatBgTemplates, NELEMS(sEasyChatBgTemplates)); + SetBgTilemapBuffer(3, sEasyChatGraphicsResources->bg3TilemapBuffer); + SetBgTilemapBuffer(1, sEasyChatGraphicsResources->bg1TilemapBuffer); + InitWindows(sEasyChatWindowTemplates); + DeactivateAllTextPrinters(); + LoadEasyChatPals(); + SetGpuRegsForEasyChatInit(); + CpuFastFill(0, (void *)VRAM + 0x1000000, 0x400); + break; + case 1: + DecompressAndLoadBgGfxUsingHeap(3, gEasyChatWindow_Gfx, 0, 0, 0); + CopyToBgTilemapBuffer(3, gEasyChatWindow_Tilemap, 0, 0); + CreatePhraseFrameWindow(); + CreateFooterWindow(); + CopyBgTilemapBufferToVram(3); + break; + case 2: + DrawECFrameInTilemapBuffer(sEasyChatGraphicsResources->bg1TilemapBuffer); + DecompressAndLoadBgGfxUsingHeap(1, gUnknown_843F7AC, 0, 0, 0); + CopyBgTilemapBufferToVram(1); + break; + case 3: + PrintTitleText(); + PrintECInstructionsText(); + PrintECFields(); + PutWin2TilemapAndCopyToVram(); + break; + case 4: + LoadSpriteGfx(); + CreateSelectDestFieldCursorSprite(); + break; + case 5: + if (IsDma3ManagerBusyWithBgCopy()) + { + return TRUE; + } + else + { + SetRegWin0Coords(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); + CreateVerticalScrollArrowSprites(); + CreateStartSelectButtonsSprites(); + } + break; + default: + return FALSE; + } + + sEasyChatGraphicsResources->state++; + return TRUE; +} + +void DestroyEasyChatGraphicsResources(void) +{ + if (sEasyChatGraphicsResources) + Free(sEasyChatGraphicsResources); +} + +void EasyChatInterfaceCommand_Setup(u16 id) +{ + sEasyChatGraphicsResources->id = id; + sEasyChatGraphicsResources->state = 0; + EasyChatInterfaceCommand_Run(); +} + +bool8 EasyChatInterfaceCommand_Run(void) +{ + switch (sEasyChatGraphicsResources->id) + { + case 0: return FALSE; + case 1: return ECInterfaceCmd_01(); + case 2: return ECInterfaceCmd_02(); + case 3: return ECInterfaceCmd_03(); + case 4: return ECInterfaceCmd_04(); + case 5: return ECInterfaceCmd_05(); + case 6: return ECInterfaceCmd_06(); + case 7: return ECInterfaceCmd_07(); + case 8: return ECInterfaceCmd_08(); + case 9: return ECInterfaceCmd_09(); + case 10: return ECInterfaceCmd_10(); + case 11: return ECInterfaceCmd_11(); + case 12: return ECInterfaceCmd_12(); + case 13: return ECInterfaceCmd_13(); + case 14: return ECInterfaceCmd_14(); + case 15: return ECInterfaceCmd_15(); + case 16: return ECInterfaceCmd_16(); + case 17: return ECInterfaceCmd_17(); + case 18: return ECInterfaceCmd_18(); + case 19: return ECInterfaceCmd_19(); + case 20: return ECInterfaceCmd_20(); + case 21: return ECInterfaceCmd_21(); + case 22: return ECInterfaceCmd_22(); + default: return FALSE; + } +} + +static bool8 ECInterfaceCmd_01(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + PrintECFields(); + sEasyChatGraphicsResources->state++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_02(void) +{ + u8 i; + u16 *ecWordBuffer; + u16 *ecWord; + u8 frameId; + u8 cursorColumn, cursorRow, numColumns; + s16 var1; + int stringWidth; + int trueStringWidth; + int 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 = GetStringWidth(1, gUnknown_843F8D8, 0) * 7; + } + else + { + CopyEasyChatWord(str, *ecWord); + stringWidth = GetStringWidth(1, str, 0); + } + + trueStringWidth = stringWidth + 17; + var1 += trueStringWidth; + ecWord++; + } + + var2 = 8 * (sPhraseFrameDimensions[frameId].top + cursorRow * 2 + 1) + 1; + SetSelectDestFieldCursorSpritePosAndResetAnim(var1, var2); + return FALSE; +} + +static bool8 ECInterfaceCmd_03(void) +{ + u8 xOffset; + switch (GetMainCursorColumn()) + { + case 0: + xOffset = 28; + break; + case 1: + xOffset = 115; + break; + case 2: + xOffset = 191; + break; + default: + return FALSE; + } + SetSelectDestFieldCursorSpritePosAndResetAnim(xOffset, 97); + return FALSE; +} + +static bool8 ECInterfaceCmd_05(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + FreezeSelectDestFieldCursorSprite(); + PrintECInterfaceTextById(2); + EC_CreateYesNoMenuWithInitialCursorPos(1); + sEasyChatGraphicsResources->state++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_06(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + FreezeSelectDestFieldCursorSprite(); + PrintECInterfaceTextById(3); + EC_CreateYesNoMenuWithInitialCursorPos(0); + sEasyChatGraphicsResources->state++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_04(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + FreezeSelectDestFieldCursorSprite(); + PrintECInterfaceTextById(1); + EC_CreateYesNoMenuWithInitialCursorPos(1); + sEasyChatGraphicsResources->state++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_07(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + UnfreezeSelectDestFieldCursorSprite(); + PrintECInterfaceTextById(0); + ShowBg(0); + sEasyChatGraphicsResources->state++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_08(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + UnfreezeSelectDestFieldCursorSprite(); + PrintECInterfaceTextById(0); + PrintECFields(); + sEasyChatGraphicsResources->state++; + // Fall through + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_09(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + FreezeSelectDestFieldCursorSprite(); + HideBg(0); + SetRegWin0Coords(0, 0, 0, 0); + PrintECGroupOrAlphaMenu(); + sEasyChatGraphicsResources->state++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + StartWin2FrameAnim(0); + sEasyChatGraphicsResources->state++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy() && !AnimateFrameResize()) + sEasyChatGraphicsResources->state++; + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + CreateSelectGroupHelpSprite(); + sEasyChatGraphicsResources->state++; + } + break; + case 4: + if (!AnimateSeletGroupModeAndHelpSpriteEnter()) + { + CreateRedRectangularCursorSpritePair(); + UpdateVerticalScrollArrowSpriteXPos(0); + UpdateVerticalScrollArrowVisibility(); + sEasyChatGraphicsResources->state++; + return FALSE; + } + break; + default: + return FALSE; + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_10(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + DestroyRedRectangularCursor(); + StartModeIconHidingAnimation(); + HideVerticalScrollArrowSprites(); + sEasyChatGraphicsResources->state++; + break; + case 1: + if (RunModeIconHidingAnimation() == TRUE) + break; + + StartWin2FrameAnim(1); + sEasyChatGraphicsResources->state++; + // Fall through + case 2: + if (!AnimateFrameResize()) + sEasyChatGraphicsResources->state++; + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + UnfreezeSelectDestFieldCursorSprite(); + ShowBg(0); + sEasyChatGraphicsResources->state++; + } + break; + case 4: + return FALSE; + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_22(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + DestroyRedRectangularCursor(); + HideVerticalScrollArrowSprites(); + ShrinkModeIconsSprite(); + StartWin2FrameAnim(5); + sEasyChatGraphicsResources->state++; + break; + case 1: + if (!AnimateFrameResize() && !ModeIconsSpriteAnimIsEnded()) + { + PrintECGroupOrAlphaMenu(); + sEasyChatGraphicsResources->state++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + StartWin2FrameAnim(6); + ShowModeIconsSprite(); + sEasyChatGraphicsResources->state++; + } + break; + case 3: + if (!AnimateFrameResize() && !ModeIconsSpriteAnimIsEnded()) + { + UpdateVerticalScrollArrowVisibility(); + CreateRedRectangularCursorSpritePair(); + sEasyChatGraphicsResources->state++; + return FALSE; + } + break; + case 4: + return FALSE; + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_14(void) +{ + EC_MoveCursor(); + return FALSE; +} + +static bool8 ECInterfaceCmd_15(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + ScheduleBg2VerticalScroll(1, 2); + sEasyChatGraphicsResources->state++; + // Fall through + case 1: + if (!AnimateBg2VerticalScroll()) + { + EC_MoveCursor(); + UpdateVerticalScrollArrowVisibility(); + return FALSE; + } + break; + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_16(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + ScheduleBg2VerticalScroll(-1, 2); + sEasyChatGraphicsResources->state++; + // Fall through + case 1: + if (!AnimateBg2VerticalScroll()) + { + UpdateVerticalScrollArrowVisibility(); + sEasyChatGraphicsResources->state++; + return FALSE; + } + break; + case 2: + return FALSE; + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_11(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + DestroyRedRectangularCursor(); + StartModeIconHidingAnimation(); + HideVerticalScrollArrowSprites(); + sEasyChatGraphicsResources->state++; + break; + case 1: + if (!RunModeIconHidingAnimation()) + { + ClearWin2AndCopyToVram(); + sEasyChatGraphicsResources->state++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + StartWin2FrameAnim(2); + sEasyChatGraphicsResources->state++; + } + break; + case 3: + if (!AnimateFrameResize()) + { + PrintECMenuById(2); + sEasyChatGraphicsResources->state++; + } + break; + case 4: + if (!IsDma3ManagerBusyWithBgCopy()) + { + CreateSelectWordCursorSprite(); + UpdateVerticalScrollArrowSpriteXPos(1); + UpdateVerticalScrollArrowVisibility(); + UpdateStartSelectButtonSpriteVisibility(); + sEasyChatGraphicsResources->state++; + return FALSE; + } + break; + case 5: + return FALSE; + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_12(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + PrintECFields(); + sEasyChatGraphicsResources->state++; + break; + case 1: + DestroySelectWordCursorSprite(); + HideVerticalScrollArrowSprites(); + HideStartSelectButtonSprites(); + ClearWin2AndCopyToVram(); + sEasyChatGraphicsResources->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + StartWin2FrameAnim(3); + sEasyChatGraphicsResources->state++; + } + break; + case 3: + if (!AnimateFrameResize()) + { + ShowBg(0); + sEasyChatGraphicsResources->state++; + } + break; + case 4: + if (!IsDma3ManagerBusyWithBgCopy()) + { + UnfreezeSelectDestFieldCursorSprite(); + sEasyChatGraphicsResources->state++; + return FALSE; + } + break; + case 5: + return FALSE; + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_13(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + DestroySelectWordCursorSprite(); + HideVerticalScrollArrowSprites(); + HideStartSelectButtonSprites(); + ClearWin2AndCopyToVram(); + sEasyChatGraphicsResources->state++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + StartWin2FrameAnim(4); + sEasyChatGraphicsResources->state++; + } + break; + case 2: + if (!AnimateFrameResize()) + { + PrintECGroupOrAlphaMenu(); + sEasyChatGraphicsResources->state++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + CreateSelectGroupHelpSprite(); + sEasyChatGraphicsResources->state++; + } + break; + case 4: + if (!AnimateSeletGroupModeAndHelpSpriteEnter()) + { + CreateRedRectangularCursorSpritePair(); + UpdateVerticalScrollArrowSpriteXPos(0); + UpdateVerticalScrollArrowVisibility(); + sEasyChatGraphicsResources->state++; + return FALSE; + } + break; + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_17(void) +{ + SetSelectWordCursorSpritePos(); + return FALSE; +} + +static bool8 ECInterfaceCmd_19(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + UpdateWin2PrintWordsScrollDown(); + sEasyChatGraphicsResources->state++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + ScheduleBg2VerticalScroll(1, 2); + sEasyChatGraphicsResources->state++; + } + break; + case 2: + if (!AnimateBg2VerticalScroll()) + { + SetSelectWordCursorSpritePos(); + UpdateVerticalScrollArrowVisibility(); + UpdateStartSelectButtonSpriteVisibility(); + sEasyChatGraphicsResources->state++; + return FALSE; + } + break; + case 3: + return FALSE; + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_18(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + UpdateWin2PrintWordsScrollUp(); + sEasyChatGraphicsResources->state++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + ScheduleBg2VerticalScroll(-1, 2); + sEasyChatGraphicsResources->state++; + } + break; + case 2: + if (!AnimateBg2VerticalScroll()) + { + UpdateVerticalScrollArrowVisibility(); + UpdateStartSelectButtonSpriteVisibility(); + sEasyChatGraphicsResources->state++; + return FALSE; + } + break; + case 3: + return FALSE; + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_21(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + UpdateWin2PrintWordsScrollPageDown(); + sEasyChatGraphicsResources->state++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + s16 direction = GetECSelectWordRowsAbove() - GetBg2ScrollRow(); + ScheduleBg2VerticalScroll(direction, 4); + sEasyChatGraphicsResources->state++; + } + break; + case 2: + if (!AnimateBg2VerticalScroll()) + { + SetSelectWordCursorSpritePos(); + UpdateVerticalScrollArrowVisibility(); + UpdateStartSelectButtonSpriteVisibility(); + sEasyChatGraphicsResources->state++; + return FALSE; + } + break; + case 3: + return FALSE; + } + + return TRUE; +} + +static bool8 ECInterfaceCmd_20(void) +{ + switch (sEasyChatGraphicsResources->state) + { + case 0: + UpdateWin2PrintWordsScrollPageUp(); + sEasyChatGraphicsResources->state++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + s16 direction = GetECSelectWordRowsAbove() - GetBg2ScrollRow(); + ScheduleBg2VerticalScroll(direction, 4); + sEasyChatGraphicsResources->state++; + } + break; + case 2: + if (!AnimateBg2VerticalScroll()) + { + UpdateVerticalScrollArrowVisibility(); + UpdateStartSelectButtonSpriteVisibility(); + sEasyChatGraphicsResources->state++; + return FALSE; + } + break; + case 3: + return FALSE; + } + + return TRUE; +} + +static bool8 InitEasyChatGraphicsWork_Internal(void) +{ + sEasyChatGraphicsResources = Alloc(sizeof(*sEasyChatGraphicsResources)); + if (sEasyChatGraphicsResources == NULL) + return FALSE; + + sEasyChatGraphicsResources->state = 0; + sEasyChatGraphicsResources->selectDestFieldCursorSprite = NULL; + sEasyChatGraphicsResources->rectCursorSpriteRight = NULL; + sEasyChatGraphicsResources->rectCursorSpriteLeft = NULL; + sEasyChatGraphicsResources->selectWordCursorSprite = NULL; + sEasyChatGraphicsResources->selectGroupHelpSprite = NULL; + sEasyChatGraphicsResources->modeIconsSprite = NULL; + sEasyChatGraphicsResources->upTriangleCursorSprite = NULL; + sEasyChatGraphicsResources->downTriangleCursorSprite = NULL; + sEasyChatGraphicsResources->startPgUpButtonSprite = NULL; + sEasyChatGraphicsResources->selectPgDnButtonSprite = NULL; + return TRUE; +} + +static void SetGpuRegsForEasyChatInit(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); +} + +static void LoadEasyChatPals(void) +{ + ResetPaletteFade(); + LoadPalette(gEasyChatMode_Pal, 0, 32); + LoadPalette(gUnknown_843F76C, 1 * 16, 32); + LoadPalette(gUnknown_843F78C, 4 * 16, 32); + LoadPalette(gUnknown_843F874, 10 * 16, 8); + LoadPalette(gUnknown_843F87C, 11 * 16, 10); + LoadPalette(gUnknown_843F87C, 15 * 16, 10); + LoadPalette(gUnknown_843F87C, 3 * 16, 10); +} + +static void PrintTitleText(void) +{ + int xOffset; + const u8 *titleText = GetTitleText(); + if (titleText == NULL) + return; + + xOffset = (128 - GetStringWidth(1, titleText, 0)) / 2u; + FillWindowPixelBuffer(0, PIXEL_FILL(0)); + EC_AddTextPrinterParameterized2(0, 1, titleText, xOffset, 0, TEXT_SPEED_FF, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + +static void EC_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) +{ + if (fontId == 1) y += 2; + AddTextPrinterParameterized(windowId, fontId, str, x, y, speed, callback); +} + +static void EC_AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, u8 bg, u8 fg, u8 shadow) +{ + u8 color[3]; + if (fontId == 1) y += 2; + color[0] = bg; + color[1] = fg; + color[2] = shadow; + AddTextPrinterParameterized3(windowId, fontId, x, y, color, speed, str); +} + +static void PrintECInstructionsText(void) +{ + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17); + TextWindow_SetUserSelectedFrame(1, 1, 0xE0); + DrawTextBorderOuter(1, 1, 14); + PrintECInterfaceTextById(0); + PutWindowTilemap(1); + CopyBgTilemapBufferToVram(0); +} + +static void PrintECInterfaceTextById(u8 direction) +{ + const u8 *text2 = NULL; + const u8 *text1 = NULL; + switch (direction) + { + case 0: + GetEasyChatInstructionsText(&text1, &text2); + break; + case 2: + GetEasyChatConfirmCancelText(&text1, &text2); + break; + case 3: + GetEasyChatConfirmText(&text1, &text2); + break; + case 1: + GetEasyChatConfirmDeletionText(&text1, &text2); + break; + } + + FillWindowPixelBuffer(1, PIXEL_FILL(1)); + if (text1) + EC_AddTextPrinterParameterized(1, 1, text1, 0, 0, TEXT_SPEED_FF, NULL); + + if (text2) + EC_AddTextPrinterParameterized(1, 1, text2, 0, 16, TEXT_SPEED_FF, NULL); + + CopyWindowToVram(1, 3); +} + +static void EC_CreateYesNoMenuWithInitialCursorPos(u8 initialCursorPos) +{ + CreateYesNoMenu(&sEasyChatYesNoWindowTemplate, 1, 0, 2, 0x001, 14, initialCursorPos); +} + +static void CreatePhraseFrameWindow(void) +{ + u8 frameId; + struct WindowTemplate template; + + frameId = GetEasyChatScreenFrameId(); + template.bg = 3; + template.tilemapLeft = sPhraseFrameDimensions[frameId].left; + template.tilemapTop = sPhraseFrameDimensions[frameId].top; + template.width = sPhraseFrameDimensions[frameId].width; + template.height = sPhraseFrameDimensions[frameId].height; + template.paletteNum = 11; + template.baseBlock = 0x060; + sEasyChatGraphicsResources->windowId = AddWindow(&template); + PutWindowTilemap(sEasyChatGraphicsResources->windowId); +} + +static void PrintECFields(void) +{ + u16 *ecWord; + u8 numColumns, numRows; + u8 *str; + u8 frameId; + int i, j, k; + + ecWord = GetEasyChatWordBuffer(); + numColumns = GetNumColumns(); + numRows = GetNumRows(); + frameId = GetEasyChatScreenFrameId(); + FillWindowPixelBuffer(sEasyChatGraphicsResources->windowId, PIXEL_FILL(1)); + for (i = 0; i < numRows; i++) + { + str = sEasyChatGraphicsResources->ecPrintBuffer; + str[0] = EOS; + str = StringAppend(str, sText_Clear17); + for (j = 0; j < numColumns; j++) + { + if (*ecWord != 0xFFFF) + { + str = CopyEasyChatWord(str, *ecWord); + ecWord++; + } + else + { + str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_RED); + ecWord++; + for (k = 0; k < 7; k++) + { + *str++ = CHAR_EXTRA_EMOJI; + *str++ = 9; + } + + str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_DARK_GREY); + } + + str = StringAppend(str, sText_Clear17); + if (frameId == 2) + { + if (j == 0 && i == 4) + break; + } + } + + *str = EOS; + EC_AddTextPrinterParameterized(sEasyChatGraphicsResources->windowId, 1, sEasyChatGraphicsResources->ecPrintBuffer, 0, i * 16, TEXT_SPEED_FF, NULL); + } + + CopyWindowToVram(sEasyChatGraphicsResources->windowId, 3); +} + +static void DrawECFrameInTilemapBuffer(u16 *tilemap) +{ + u8 frameId; + int right, bottom; + int x, y; + + frameId = GetEasyChatScreenFrameId(); + CpuFastFill(0, tilemap, BG_SCREEN_SIZE); + if (frameId == 2) + { + right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width; + bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height; + for (y = sPhraseFrameDimensions[frameId].top; y < bottom; y++) + { + x = sPhraseFrameDimensions[frameId].left - 1; + tilemap[y * 32 + x] = 0x1005; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x1000; + + tilemap[y* 32 + x] = 0x1007; + } + } + else + { + y = sPhraseFrameDimensions[frameId].top - 1; + x = sPhraseFrameDimensions[frameId].left - 1; + right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width; + bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height; + tilemap[y * 32 + x] = 0x1001; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x1002; + + tilemap[y * 32 + x] = 0x1003; + y++; + for (; y < bottom; y++) + { + x = sPhraseFrameDimensions[frameId].left - 1; + tilemap[y * 32 + x] = 0x1005; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x1000; + + tilemap[y* 32 + x] = 0x1007; + } + + x = sPhraseFrameDimensions[frameId].left - 1; + tilemap[y * 32 + x] = 0x1009; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x100A; + + tilemap[y * 32 + x] = 0x100B; + } +} + +static void PutWin2TilemapAndCopyToVram(void) +{ + PutWindowTilemap(2); + CopyBgTilemapBufferToVram(2); +} + +static void PrintECMenuById(u32 id) +{ + InitBg2Scroll(); + FillWindowPixelBuffer(2, PIXEL_FILL(1)); + switch (id) + { + case 0: + PrintECGroupsMenu(); + break; + case 1: + PrintEasyChatKeyboardText(); + break; + case 2: + PrintECWordsMenu(); + break; + } + + CopyWindowToVram(2, 2); +} + +static void PrintECGroupOrAlphaMenu(void) +{ + if (!IsEasyChatAlphaMode()) + PrintECMenuById(0); + else + PrintECMenuById(1); +} + +static void PrintECGroupsMenu(void) +{ + int i; + int x, y; + + i = 0; + y = 96; + while (1) + { + for (x = 0; x < 2; x++) + { + u8 groupId = GetSelectedGroupByIndex(i++); + if (groupId == EC_NUM_GROUPS) + { + ScheduleBg2VerticalScroll(GetECSelectGroupRowsAbove(), 0); + return; + } + + EC_AddTextPrinterParameterized(2, 1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SPEED_FF, NULL); + } + + y += 16; + } +} + +static void PrintEasyChatKeyboardText(void) +{ + u32 i; + + for (i = 0; i < NELEMS(sEasyChatKeyboardText); i++) + EC_AddTextPrinterParameterized(2, 1, sEasyChatKeyboardText[i], 10, 96 + i * 16, TEXT_SPEED_FF, NULL); +} + +static void PrintECWordsMenu(void) +{ + PrintECRowsWin2(0, 4); +} + +static void UpdateWin2PrintWordsScrollDown(void) +{ + u8 rowsAbove = GetECSelectWordRowsAbove() + 3; + ClearECRowsWin2(rowsAbove, 1); + PrintECRowsWin2(rowsAbove, 1); +} + +static void UpdateWin2PrintWordsScrollUp(void) +{ + u8 rowsAbove = GetECSelectWordRowsAbove(); + ClearECRowsWin2(rowsAbove, 1); + PrintECRowsWin2(rowsAbove, 1); +} + +static void UpdateWin2PrintWordsScrollPageDown(void) +{ + u8 row = GetECSelectWordRowsAbove(); + u8 maxrow = row + 4; + u8 numrowsplus1 = GetECSelectWordNumRows() + 1; + if (maxrow > numrowsplus1) + maxrow = numrowsplus1; + + if (row < maxrow) + { + u8 remrow = maxrow - row; + ClearECRowsWin2(row, remrow); + PrintECRowsWin2(row, remrow); + } +} + +static void UpdateWin2PrintWordsScrollPageUp(void) +{ + u8 row = GetECSelectWordRowsAbove(); + u8 maxrow = GetBg2ScrollRow(); + if (row < maxrow) + { + u8 remrow = maxrow - row; + ClearECRowsWin2(row, remrow); + PrintECRowsWin2(row, remrow); + } +} + +static void PrintECRowsWin2(u8 row, u8 remrow) +{ + int i, j; + u16 easyChatWord; + u8 *str; + int y; + u8 y_; + int ecWordIdx; + + ecWordIdx = row * 2; + y = (row * 16 + 96) & 0xFF; + + for (i = 0; i < remrow; i++) + { + for (j = 0; j < 2; j++) + { + // FIXME: Dumb trick needed to match + y_ = y << 18 >> 18; + easyChatWord = GetDisplayedWordByIndex(ecWordIdx++); + if (easyChatWord != 0xFFFF) + { + + CopyEasyChatWordPadded(sEasyChatGraphicsResources->ecPaddedWordBuffer, easyChatWord, 0); + + EC_AddTextPrinterParameterized(2, 1, sEasyChatGraphicsResources->ecPaddedWordBuffer, (j * 13 + 3) * 8, y_, TEXT_SPEED_FF, NULL); + } + } + y += 16; + + } + + CopyWindowToVram(2, 2); +} + +static void ClearECRowsWin2(u8 row, u8 remrow) +{ + int y; + int totalHeight; + int heightWrappedAround; + int heightToBottom; + + y = (row * 16 + 96) & 0xFF; + heightToBottom = remrow * 16; + totalHeight = y + heightToBottom; + if (totalHeight > 255) + { + heightWrappedAround = totalHeight - 256; + heightToBottom = 256 - y; + } + else + { + heightWrappedAround = 0; + } + + FillWindowPixelRect(2, PIXEL_FILL(1), 0, y, 224, heightToBottom); + if (heightWrappedAround) + FillWindowPixelRect(2, PIXEL_FILL(1), 0, 0, 224, heightWrappedAround); +} + +static void ClearWin2AndCopyToVram(void) +{ + FillWindowPixelBuffer(2, PIXEL_FILL(1)); + CopyWindowToVram(2, 2); +} + +static void StartWin2FrameAnim(int animNo) +{ + switch (animNo) + { + case 0: + sEasyChatGraphicsResources->frameAnimIdx = 0; + sEasyChatGraphicsResources->frameAnimTarget = 10; + break; + case 1: + sEasyChatGraphicsResources->frameAnimIdx = 9; + sEasyChatGraphicsResources->frameAnimTarget = 0; + break; + case 2: + sEasyChatGraphicsResources->frameAnimIdx = 11; + sEasyChatGraphicsResources->frameAnimTarget = 17; + break; + case 3: + sEasyChatGraphicsResources->frameAnimIdx = 17; + sEasyChatGraphicsResources->frameAnimTarget = 0; + break; + case 4: + sEasyChatGraphicsResources->frameAnimIdx = 17; + sEasyChatGraphicsResources->frameAnimTarget = 10; + break; + case 5: + sEasyChatGraphicsResources->frameAnimIdx = 18; + sEasyChatGraphicsResources->frameAnimTarget = 22; + break; + case 6: + sEasyChatGraphicsResources->frameAnimIdx = 22; + sEasyChatGraphicsResources->frameAnimTarget = 18; + break; + } + + sEasyChatGraphicsResources->frameAnimDelta = sEasyChatGraphicsResources->frameAnimIdx < sEasyChatGraphicsResources->frameAnimTarget ? 1 : -1; +} + +static bool8 AnimateFrameResize(void) +{ + if (sEasyChatGraphicsResources->frameAnimIdx == sEasyChatGraphicsResources->frameAnimTarget) + return FALSE; + + sEasyChatGraphicsResources->frameAnimIdx += sEasyChatGraphicsResources->frameAnimDelta; + RedrawFrameByIndex(sEasyChatGraphicsResources->frameAnimIdx); + return sEasyChatGraphicsResources->frameAnimIdx != sEasyChatGraphicsResources->frameAnimTarget; +} + +static void RedrawFrameByIndex(u8 direction) +{ + FillBgTilemapBufferRect_Palette0(1, 0, 0, 10, 30, 10); + switch (direction) + { + case 0: + break; + case 1: + RedrawFrameByRect(11, 14, 3, 2); + break; + case 2: + RedrawFrameByRect(9, 14, 7, 2); + break; + case 3: + RedrawFrameByRect(7, 14, 11, 2); + break; + case 4: + RedrawFrameByRect(5, 14, 15, 2); + break; + case 5: + RedrawFrameByRect(3, 14, 19, 2); + break; + case 6: + RedrawFrameByRect(1, 14, 23, 2); + break; + case 7: + RedrawFrameByRect(1, 13, 23, 4); + break; + case 8: + RedrawFrameByRect(1, 12, 23, 6); + break; + case 9: + RedrawFrameByRect(1, 11, 23, 8); + break; + case 10: + RedrawFrameByRect(1, 10, 23, 10); + break; + case 11: + RedrawFrameByRect(1, 10, 24, 10); + break; + case 12: + RedrawFrameByRect(1, 10, 25, 10); + break; + case 13: + RedrawFrameByRect(1, 10, 26, 10); + break; + case 14: + RedrawFrameByRect(1, 10, 27, 10); + break; + case 15: + RedrawFrameByRect(1, 10, 28, 10); + break; + case 16: + RedrawFrameByRect(1, 10, 29, 10); + break; + case 17: + RedrawFrameByRect(0, 10, 30, 10); + break; + case 18: + RedrawFrameByRect(1, 10, 23, 10); + break; + case 19: + RedrawFrameByRect(1, 11, 23, 8); + break; + case 20: + RedrawFrameByRect(1, 12, 23, 6); + break; + case 21: + RedrawFrameByRect(1, 13, 23, 4); + break; + case 22: + RedrawFrameByRect(1, 14, 23, 2); + break; + } + + CopyBgTilemapBufferToVram(1); +} + +static void RedrawFrameByRect(int left, int top, int width, int height) +{ + u16 *tilemap; + int right; + int bottom; + int x, y; + + tilemap = sEasyChatGraphicsResources->bg1TilemapBuffer; + 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; + SetRegWin0Coords((left + 1) * 8, (top + 1) * 8, (width - 2) * 8, (height - 2) * 8); +} + +static void InitBg2Scroll(void) +{ + ChangeBgY(2, 0x800, 0); + sEasyChatGraphicsResources->bg2ScrollRow = 0; +} + +static void ScheduleBg2VerticalScroll(s16 direction, u8 speed) +{ + int bgY; + s16 totalDelta; + + bgY = GetBgY(2); + sEasyChatGraphicsResources->bg2ScrollRow += direction; + totalDelta = direction * 16; + bgY += totalDelta << 8; + if (speed) + { + sEasyChatGraphicsResources->tgtBgY = bgY; + sEasyChatGraphicsResources->deltaBgY = speed * 256; + if (totalDelta < 0) + sEasyChatGraphicsResources->deltaBgY = -sEasyChatGraphicsResources->deltaBgY; + } + else + { + ChangeBgY(2, bgY, 0); + } +} + +static bool8 AnimateBg2VerticalScroll(void) +{ + int bgY; + + bgY = GetBgY(2); + if (bgY == sEasyChatGraphicsResources->tgtBgY) + { + return FALSE; + } + else + { + ChangeBgY(2, sEasyChatGraphicsResources->deltaBgY, 1); + return TRUE; + } +} + +static int GetBg2ScrollRow(void) +{ + return sEasyChatGraphicsResources->bg2ScrollRow; +} + +static void SetRegWin0Coords(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); +} + +static void LoadSpriteGfx(void) +{ + u32 i; + + LoadSpriteSheets(sEasyChatSpriteSheets); + LoadSpritePalettes(sEasyChatSpritePalettes); + for (i = 0; i < NELEMS(sEasyChatCompressedSpriteSheets); i++) + LoadCompressedSpriteSheet(&sEasyChatCompressedSpriteSheets[i]); +} + +static void CreateSelectDestFieldCursorSprite(void) +{ + u8 frameId = GetEasyChatScreenFrameId(); + s16 x = sPhraseFrameDimensions[frameId].left * 8 + 13; + s16 y = (sPhraseFrameDimensions[frameId].top + 1) * 8 + 1; + u8 spriteId = CreateSprite(&sSpriteTemplate_RightTriangleCursor, x, y, 2); + sEasyChatGraphicsResources->selectDestFieldCursorSprite = &gSprites[spriteId]; + gSprites[spriteId].data[1] = 1; +} + +static void SpriteCB_BounceCursor(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; + } + } +} + +static void SetSelectDestFieldCursorSpritePosAndResetAnim(u8 x, u8 y) +{ + sEasyChatGraphicsResources->selectDestFieldCursorSprite->pos1.x = x; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->pos1.y = y; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->pos2.x = 0; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->data[0] = 0; +} + +static void FreezeSelectDestFieldCursorSprite(void) +{ + sEasyChatGraphicsResources->selectDestFieldCursorSprite->data[0] = 0; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->data[1] = 0; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->pos2.x = 0; +} + +static void UnfreezeSelectDestFieldCursorSprite(void) +{ + sEasyChatGraphicsResources->selectDestFieldCursorSprite->data[1] = 1; +} + +static void CreateRedRectangularCursorSpritePair(void) +{ + u8 spriteId = CreateSprite(&sSpriteTemplate_RedRectangularCursor, 0, 0, 3); + sEasyChatGraphicsResources->rectCursorSpriteRight = &gSprites[spriteId]; + sEasyChatGraphicsResources->rectCursorSpriteRight->pos2.x = 32; + + spriteId = CreateSprite(&sSpriteTemplate_RedRectangularCursor, 0, 0, 3); + sEasyChatGraphicsResources->rectCursorSpriteLeft = &gSprites[spriteId]; + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos2.x = -32; + + sEasyChatGraphicsResources->rectCursorSpriteRight->hFlip = TRUE; + EC_MoveCursor(); +} + +static void DestroyRedRectangularCursor(void) +{ + DestroySprite(sEasyChatGraphicsResources->rectCursorSpriteRight); + sEasyChatGraphicsResources->rectCursorSpriteRight = NULL; + DestroySprite(sEasyChatGraphicsResources->rectCursorSpriteLeft); + sEasyChatGraphicsResources->rectCursorSpriteLeft = NULL; +} + +static void EC_MoveCursor(void) +{ + u8 x; + u8 y; + + if (sEasyChatGraphicsResources->rectCursorSpriteRight && sEasyChatGraphicsResources->rectCursorSpriteLeft) + { + GetECSelectGroupCursorCoords(&x, &y); + if (!IsEasyChatAlphaMode()) + MoveCursor_Group(x, y); + else + MoveCursor_Alpha(x, y); + } +} + +static void MoveCursor_Group(s8 x, s8 y) +{ + if (x != -1) + { + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, 0); + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.x = x * 84 + 58; + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.y = y * 16 + 96; + + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, 0); + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.x = x * 84 + 58; + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.y = y * 16 + 96; + } + else + { + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, 1); + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.x = 216; + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.y = y * 16 + 112; + + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, 1); + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.x = 216; + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.y = y * 16 + 112; + } +} + +static void MoveCursor_Alpha(s8 cursorX, s8 cursorY) +{ + int anim; + int x, y; + + if (cursorX != -1) + { + y = cursorY * 16 + 96; + x = 32; + if (cursorX == 6 && cursorY == 0) + { + x = 157; + anim = 2; + } + else + { + x += sECDisplay_AlphaModeXCoords[cursorX < NELEMS(sECDisplay_AlphaModeXCoords) ? cursorX : 0]; + anim = 3; + } + + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, anim); + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.x = x; + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.y = y; + + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, anim); + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.x = x; + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.y = y; + } + else + { + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, 1); + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.x = 216; + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.y = cursorY * 16 + 112; + + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, 1); + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.x = 216; + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.y = cursorY * 16 + 112; + } +} + +static void CreateSelectWordCursorSprite(void) +{ + u8 spriteId = CreateSprite(&sSpriteTemplate_RightTriangleCursor, 0, 0, 4); + sEasyChatGraphicsResources->selectWordCursorSprite = &gSprites[spriteId]; + sEasyChatGraphicsResources->selectWordCursorSprite->callback = SpriteCB_SelectWordCursorSprite; + sEasyChatGraphicsResources->selectWordCursorSprite->oam.priority = 2; + SetSelectWordCursorSpritePos(); +} + +static void SpriteCB_SelectWordCursorSprite(struct Sprite * sprite) +{ + if (++sprite->data[0] > 2) + { + sprite->data[0] = 0; + if (++sprite->pos2.x > 0) + sprite->pos2.x = -6; + } +} + +static void SetSelectWordCursorSpritePos(void) +{ + s8 cursorX, cursorY; + u8 x, y; + + GetECSelectWordCursorCoords(&cursorX, &cursorY); + x = cursorX * 13 + 3; + y = cursorY * 2 + 11; + SetSelectWordCursorSpritePosExplicit(x, y); +} + +static void SetSelectWordCursorSpritePosExplicit(u8 x, u8 y) +{ + if (sEasyChatGraphicsResources->selectWordCursorSprite) + { + sEasyChatGraphicsResources->selectWordCursorSprite->pos1.x = x * 8 + 4; + sEasyChatGraphicsResources->selectWordCursorSprite->pos1.y = (y + 1) * 8 + 1; + sEasyChatGraphicsResources->selectWordCursorSprite->pos2.x = 0; + sEasyChatGraphicsResources->selectWordCursorSprite->data[0] = 0; + } +} + +static void DestroySelectWordCursorSprite(void) +{ + if (sEasyChatGraphicsResources->selectWordCursorSprite) + { + DestroySprite(sEasyChatGraphicsResources->selectWordCursorSprite); + sEasyChatGraphicsResources->selectWordCursorSprite = NULL; + } +} + +static void CreateSelectGroupHelpSprite(void) +{ + u8 spriteId = CreateSprite(&sSpriteTemplate_SelectGroupHelp, 208, 128, 6); + sEasyChatGraphicsResources->selectGroupHelpSprite = &gSprites[spriteId]; + sEasyChatGraphicsResources->selectGroupHelpSprite->pos2.x = -64; + + spriteId = CreateSprite(&sSpriteTemplate_EasyChatModeIcons, 208, 80, 5); + sEasyChatGraphicsResources->modeIconsSprite = &gSprites[spriteId]; + sEasyChatGraphicsResources->modeIconState = 0; +} + +static bool8 AnimateSeletGroupModeAndHelpSpriteEnter(void) +{ + switch (sEasyChatGraphicsResources->modeIconState) + { + default: + return FALSE; + case 0: + sEasyChatGraphicsResources->selectGroupHelpSprite->pos2.x += 8; + if (sEasyChatGraphicsResources->selectGroupHelpSprite->pos2.x >= 0) + { + sEasyChatGraphicsResources->selectGroupHelpSprite->pos2.x = 0; + if (!IsEasyChatAlphaMode()) + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 1); + else + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 2); + + sEasyChatGraphicsResources->modeIconState++; + } + break; + case 1: + if (sEasyChatGraphicsResources->modeIconsSprite->animEnded) + { + sEasyChatGraphicsResources->modeIconState = 2; + return FALSE; + } + } + + return TRUE; +} + +static void StartModeIconHidingAnimation(void) +{ + sEasyChatGraphicsResources->modeIconState = 0; + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 3); +} + +static bool8 RunModeIconHidingAnimation(void) +{ + switch (sEasyChatGraphicsResources->modeIconState) + { + default: + return FALSE; + case 0: + if (sEasyChatGraphicsResources->modeIconsSprite->animEnded) + sEasyChatGraphicsResources->modeIconState = 1; + break; + case 1: + sEasyChatGraphicsResources->selectGroupHelpSprite->pos2.x -= 8; + if (sEasyChatGraphicsResources->selectGroupHelpSprite->pos2.x <= -64) + { + DestroySprite(sEasyChatGraphicsResources->modeIconsSprite); + DestroySprite(sEasyChatGraphicsResources->selectGroupHelpSprite); + sEasyChatGraphicsResources->modeIconsSprite = NULL; + sEasyChatGraphicsResources->selectGroupHelpSprite = NULL; + sEasyChatGraphicsResources->modeIconState++; + return FALSE; + } + } + + return TRUE; +} + +static void ShrinkModeIconsSprite(void) +{ + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 4); +} + +static void ShowModeIconsSprite(void) +{ + if (!IsEasyChatAlphaMode()) + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 1); + else + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 2); +} + +static bool8 ModeIconsSpriteAnimIsEnded(void) +{ + return !sEasyChatGraphicsResources->modeIconsSprite->animEnded; +} + +static void CreateVerticalScrollArrowSprites(void) +{ + u8 spriteId = CreateSprite(&sSpriteTemplate_UpTriangleCursor, 96, 80, 0); + if (spriteId != MAX_SPRITES) + sEasyChatGraphicsResources->upTriangleCursorSprite = &gSprites[spriteId]; + + spriteId = CreateSprite(&sSpriteTemplate_UpTriangleCursor, 96, 156, 0); + if (spriteId != MAX_SPRITES) + { + sEasyChatGraphicsResources->downTriangleCursorSprite = &gSprites[spriteId]; + sEasyChatGraphicsResources->downTriangleCursorSprite->vFlip = TRUE; + } + + HideVerticalScrollArrowSprites(); +} + +static void UpdateVerticalScrollArrowVisibility(void) +{ + sEasyChatGraphicsResources->upTriangleCursorSprite->invisible = !ShouldDrawECUpArrow(); + sEasyChatGraphicsResources->downTriangleCursorSprite->invisible = !ShouldDrawECDownArrow(); +} + +static void HideVerticalScrollArrowSprites(void) +{ + sEasyChatGraphicsResources->upTriangleCursorSprite->invisible = TRUE; + sEasyChatGraphicsResources->downTriangleCursorSprite->invisible = TRUE; +} + +static void UpdateVerticalScrollArrowSpriteXPos(int direction) +{ + if (!direction) + { + // Group select + sEasyChatGraphicsResources->upTriangleCursorSprite->pos1.x = 96; + sEasyChatGraphicsResources->downTriangleCursorSprite->pos1.x = 96; + } + else + { + // Word select + sEasyChatGraphicsResources->upTriangleCursorSprite->pos1.x = 120; + sEasyChatGraphicsResources->downTriangleCursorSprite->pos1.x = 120; + } +} + +static void CreateStartSelectButtonsSprites(void) +{ + u8 spriteId = CreateSprite(&sSpriteTemplate_StartSelectButtons, 220, 84, 1); + if (spriteId != MAX_SPRITES) + sEasyChatGraphicsResources->startPgUpButtonSprite = &gSprites[spriteId]; + + spriteId = CreateSprite(&sSpriteTemplate_StartSelectButtons, 220, 156, 1); + if (spriteId != MAX_SPRITES) + { + sEasyChatGraphicsResources->selectPgDnButtonSprite = &gSprites[spriteId]; + StartSpriteAnim(sEasyChatGraphicsResources->selectPgDnButtonSprite, 1); + } + + HideStartSelectButtonSprites(); +} + +static void UpdateStartSelectButtonSpriteVisibility(void) +{ + sEasyChatGraphicsResources->startPgUpButtonSprite->invisible = !ShouldDrawECUpArrow(); + sEasyChatGraphicsResources->selectPgDnButtonSprite->invisible = !ShouldDrawECDownArrow(); +} + +static void HideStartSelectButtonSprites(void) +{ + sEasyChatGraphicsResources->startPgUpButtonSprite->invisible = TRUE; + sEasyChatGraphicsResources->selectPgDnButtonSprite->invisible = TRUE; +} + +static void CreateFooterWindow(void) +{ + u16 windowId; + struct WindowTemplate template; + template.bg = 3; + template.tilemapLeft = 4; + template.tilemapTop = 11; + template.width = 24; + template.height = 2; + template.paletteNum = 11; + template.baseBlock = 0x030; + windowId = AddWindow(&template); + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + EC_AddTextPrinterParameterized(windowId, 1, gUnknown_841EE2B, 0, 0, 0, NULL); + PutWindowTilemap(windowId); +} diff --git a/src/graphics.c b/src/graphics.c index eaa49247c..cb35568fa 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1215,13 +1215,13 @@ const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp. const u16 gHoennTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star_em.gbapal"); const u32 gHoennTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_em.4bpp.lz"); -const u16 gUnknown_8E99D8C[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal"); -const u32 gUnknown_8E99DAC[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz"); -const u32 gUnknown_8E99E74[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz"); +const u16 gEasyChatMode_Pal[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal"); +const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz"); +const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz"); const u16 gUnknown_8E99F24[] = INCBIN_U16("graphics/link_rfu/unk_8E9A168.gbapal"); -const u32 gUnknown_8E99F44[] = INCBIN_U32("graphics/link_rfu/unk_8E99F44.4bpp.lz"); -const u32 gUnknown_8E9A168[] = INCBIN_U32("graphics/link_rfu/unk_8E9A168.4bpp.lz"); +const u32 gEasyChatSelectGroupHelp_Tiles[] = INCBIN_U32("graphics/link_rfu/unk_8E99F44.4bpp.lz"); +const u32 gEasyChatModeIcons_Tiles[] = INCBIN_U32("graphics/link_rfu/unk_8E9A168.4bpp.lz"); const u32 gUnknown_8E9A460[] = INCBIN_U32("graphics/interface/trainer_memo.4bpp.lz"); const u32 gUnknown_8E9B310[] = INCBIN_U32("graphics/interface/trainer_memo_pal1.gbapal"); @@ -1240,7 +1240,7 @@ const u32 gUnknown_8E9BBCC[] = INCBIN_U32("graphics/interface/trainer_memo_5.bin const u16 gUnknown_8E9BD08[] = INCBIN_U16("graphics/unknown/unknown_E9BD08.gbapal"); // might be an alternate unused palette of the link_rfu gfx below. -const u32 gUnknown_8E9BD28[] = INCBIN_U32("graphics/interface/link_rfu_frame.4bpp.lz"); +const u32 gEasyChatRedRectangularCursor_Tiles[] = INCBIN_U32("graphics/interface/link_rfu_frame.4bpp.lz"); const u16 gUnknown_8E9BF28[] = INCBIN_U16("graphics/interface/link_rfu_frame.gbapal"); const u32 gUnknown_8E9BF48[] = INCBIN_U32("graphics/interface/link_rfu_status.4bpp.lz"); diff --git a/sym_ewram.txt b/sym_ewram.txt index c6d2d73dd..ea2b7b749 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -314,14 +314,9 @@ gUnknown_203998C: @ 203998C .align 2 .include "src/link_rfu_3.o" .align 2 - - @ .include "src/easy_chat_2.o" -gUnknown_203ACE8: @ 203ACE8 - .space 0x4 - -gUnknown_203ACEC: @ 203ACEC - .space 0x4 - + .include "src/easy_chat_2.o" + .align 2 + .include "src/easy_chat_3.o" .align 2 .include "src/pokedex_screen.o" .align 2 |