summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/easy_chat_2.s7654
-rw-r--r--data/data_8479668.s6
-rw-r--r--data/easy_chat_2.s296
-rw-r--r--data/scripts/mystery_event_club.inc2
-rw-r--r--include/constants/easy_chat.h4
-rw-r--r--include/data_8479668.h5
-rw-r--r--include/easy_chat.h27
-rw-r--r--include/graphics.h9
-rw-r--r--include/overworld.h1
-rw-r--r--include/strings.h37
-rw-r--r--ld_script.txt6
-rw-r--r--src/clear_save_data_screen.c4
-rw-r--r--src/easy_chat_2.c1363
-rw-r--r--src/easy_chat_3.c2298
-rw-r--r--src/graphics.c12
-rw-r--r--sym_ewram.txt11
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