summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2018-01-03 14:30:23 -0600
committercamthesaxman <cameronghall@cox.net>2018-01-03 14:30:23 -0600
commitcf37681831a9a8289d5941e66ce673b896abf71f (patch)
tree1cdf9fa4eacec724c32dd228dc6134e29e353a1c
parent967d010f6dc9b7e07550154894307a24f165bbd8 (diff)
decompile sub_80E810C - sub_80E872C
-rw-r--r--asm/easy_chat.s828
-rw-r--r--data.txt10
-rw-r--r--data/easy_chat.s147
-rw-r--r--include/easy_chat.h92
-rw-r--r--include/graphics.h2
-rw-r--r--ld_script.txt2
-rw-r--r--src/easy_chat_2.c403
-rw-r--r--src/easy_chat_before.c135
8 files changed, 561 insertions, 1058 deletions
diff --git a/asm/easy_chat.s b/asm/easy_chat.s
index 117fa693f..5d2089c19 100644
--- a/asm/easy_chat.s
+++ b/asm/easy_chat.s
@@ -5,834 +5,6 @@
.text
- thumb_func_start sub_80E810C
-sub_80E810C: @ 80E810C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r5, 0
- ldr r6, _080E8198 @ =gSharedMem + 0xAE6E
- ldr r0, _080E819C @ =0xffff6192
- adds r0, r6
- mov r9, r0
- movs r1, 0
- mov r8, r1
- adds r7, r6, 0
- adds r7, 0x80
- ldr r2, _080E81A0 @ =gBerryMasterWifePhrases
- mov r10, r2
-_080E812C:
- mov r0, r9
- ldrh r1, [r0, 0xC]
- adds r0, r6, 0
- movs r2, 0
- bl sub_80EB218
- mov r1, r8
- strb r1, [r0]
- adds r0, 0x1
- mov r2, r9
- ldrh r1, [r2, 0xE]
- movs r2, 0
- bl sub_80EB218
- lsls r4, r5, 2
- mov r1, r10
- adds r0, r4, r1
- ldrh r1, [r0]
- adds r0, r7, 0
- movs r2, 0
- bl sub_80EB218
- mov r2, r8
- strb r2, [r0]
- adds r0, 0x1
- ldr r1, _080E81A4 @ =gBerryMasterWifePhrases + 0x2
- adds r4, r1
- ldrh r1, [r4]
- movs r2, 0
- bl sub_80EB218
- adds r0, r6, 0
- adds r3, r7, 0
- adds r4, r5, 0x1
-_080E8170:
- ldrb r2, [r0]
- cmp r2, 0xFF
- beq _080E818A
- ldrb r1, [r3]
- cmp r1, 0xFF
- beq _080E8184
- adds r3, 0x1
- adds r0, 0x1
- cmp r2, r1
- beq _080E8170
-_080E8184:
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _080E81A8
-_080E818A:
- ldrb r0, [r3]
- cmp r0, 0xFF
- bne _080E81A8
- lsls r0, r4, 24
- lsrs r0, 24
- b _080E81B2
- .align 2, 0
-_080E8198: .4byte gSharedMem + 0xAE6E
-_080E819C: .4byte 0xffff6192
-_080E81A0: .4byte gBerryMasterWifePhrases
-_080E81A4: .4byte gBerryMasterWifePhrases + 0x2
-_080E81A8:
- lsls r0, r4, 16
- lsrs r5, r0, 16
- cmp r5, 0x4
- bls _080E812C
- movs r0, 0
-_080E81B2:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80E810C
-
- thumb_func_start sub_80E81C0
-sub_80E81C0: @ 80E81C0
- push {r4,lr}
- ldr r0, _080E81EC @ =gStringVar2
- ldr r4, _080E81F0 @ =gSharedMem + 0x1000
- ldr r2, _080E81F4 @ =0x00009c7c
- adds r1, r4, r2
- ldrh r1, [r1]
- movs r2, 0
- bl sub_80EB218
- movs r1, 0
- strb r1, [r0]
- adds r0, 0x1
- ldr r1, _080E81F8 @ =0x00009c7e
- adds r4, r1
- ldrh r1, [r4]
- movs r2, 0
- bl sub_80EB218
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080E81EC: .4byte gStringVar2
-_080E81F0: .4byte gSharedMem + 0x1000
-_080E81F4: .4byte 0x00009c7c
-_080E81F8: .4byte 0x00009c7e
- thumb_func_end sub_80E81C0
-
- thumb_func_start sub_80E81FC
-sub_80E81FC: @ 80E81FC
- push {lr}
- movs r0, 0x5
- bl PlaySE
- bl sub_80E95A4
- movs r0, 0
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- pop {r0}
- bx r0
- thumb_func_end sub_80E81FC
-
- thumb_func_start sub_80E8218
-sub_80E8218: @ 80E8218
- push {r4,r5,lr}
- sub sp, 0x40
- mov r1, sp
- ldr r0, _080E8260 @ =gSpriteSheets_Interview
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldm r0!, {r2,r4,r5}
- stm r1!, {r2,r4,r5}
- ldr r0, [r0]
- str r0, [r1]
- add r4, sp, 0x28
- adds r1, r4, 0
- ldr r0, _080E8264 @ =gSpritePalettes_Interview
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- mov r0, sp
- bl LoadSpriteSheets
- adds r0, r4, 0
- bl LoadSpritePalettes
- bl sub_80E8268
- bl sub_80E8818
- bl sub_80E8A7C
- add sp, 0x40
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080E8260: .4byte gSpriteSheets_Interview
-_080E8264: .4byte gSpritePalettes_Interview
- thumb_func_end sub_80E8218
-
- thumb_func_start sub_80E8268
-sub_80E8268: @ 80E8268
- push {lr}
- ldr r0, _080E82B0 @ =gSpriteTemplate_83DBBFC
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080E82B4 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldr r0, _080E82B8 @ =gUnknown_083DB694
- ldr r3, [r0]
- adds r0, r3, 0
- adds r0, 0x8A
- ldrh r0, [r0]
- lsls r0, 3
- adds r0, 0x8
- movs r2, 0
- strh r0, [r1, 0x22]
- adds r0, r3, 0
- adds r0, 0x88
- ldrh r0, [r0]
- lsls r0, 3
- adds r0, 0x4
- strh r0, [r1, 0x20]
- strh r2, [r1, 0x2E]
- strh r2, [r1, 0x30]
- adds r0, r3, 0
- adds r0, 0x98
- str r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_080E82B0: .4byte gSpriteTemplate_83DBBFC
-_080E82B4: .4byte gSprites
-_080E82B8: .4byte gUnknown_083DB694
- thumb_func_end sub_80E8268
-
- thumb_func_start sub_80E82BC
-sub_80E82BC: @ 80E82BC
- push {r4-r7,lr}
- adds r3, r0, 0
- movs r1, 0x30
- ldrsh r0, [r3, r1]
- cmp r0, 0
- bne _080E838C
- ldr r0, _080E8334 @ =gUnknown_083DB694
- ldr r2, [r0]
- adds r1, r2, 0
- adds r1, 0x87
- ldrb r1, [r1]
- mov r12, r0
- cmp r1, 0
- beq _080E836C
- adds r0, r2, 0
- adds r0, 0x86
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r2, 0
- adds r0, 0x85
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 16
- lsrs r4, r0, 16
- movs r7, 0
- movs r1, 0
- cmp r7, r4
- bcs _080E8316
- lsls r6, r5, 1
- adds r2, 0x8C
-_080E8300:
- adds r0, r1, r6
- adds r0, r2, r0
- ldrb r0, [r0]
- adds r0, r7, r0
- lsls r0, 16
- lsrs r7, r0, 16
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r4
- bcc _080E8300
-_080E8316:
- mov r0, r12
- ldr r2, [r0]
- adds r0, r2, 0
- adds r0, 0x84
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r5, r0
- bne _080E8338
- movs r0, 0x60
- strh r0, [r3, 0x22]
- lsls r0, r4, 3
- subs r0, r4
- adds r0, 0x3
- b _080E8356
- .align 2, 0
-_080E8334: .4byte gUnknown_083DB694
-_080E8338:
- adds r1, r2, 0
- adds r1, 0x8A
- lsls r0, r5, 1
- ldrh r1, [r1]
- adds r0, r1
- lsls r0, 3
- adds r0, 0x8
- strh r0, [r3, 0x22]
- adds r0, r2, 0
- adds r0, 0x88
- ldrh r0, [r0]
- adds r0, r7
- movs r1, 0xB
- muls r1, r4
- adds r0, r1
-_080E8356:
- lsls r0, 3
- adds r0, 0x4
- strh r0, [r3, 0x20]
- movs r1, 0
- ldr r0, _080E8368 @ =0x0000fffa
- strh r0, [r3, 0x24]
- strh r1, [r3, 0x2E]
- b _080E838C
- .align 2, 0
-_080E8368: .4byte 0x0000fffa
-_080E836C:
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080E838C
- strh r1, [r3, 0x2E]
- ldrh r0, [r3, 0x24]
- adds r0, 0x1
- strh r0, [r3, 0x24]
- lsls r0, 16
- cmp r0, 0
- ble _080E838C
- ldr r0, _080E8394 @ =0x0000fffa
- strh r0, [r3, 0x24]
-_080E838C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080E8394: .4byte 0x0000fffa
- thumb_func_end sub_80E82BC
-
- thumb_func_start sub_80E8398
-sub_80E8398: @ 80E8398
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x1
- beq _080E83D4
- cmp r3, 0x1
- bgt _080E83AC
- cmp r3, 0
- beq _080E83B2
- b _080E8416
-_080E83AC:
- cmp r3, 0x2
- beq _080E83F8
- b _080E8416
-_080E83B2:
- ldr r0, _080E83D0 @ =gUnknown_083DB694
- ldr r0, [r0]
- adds r0, 0x98
- ldr r1, [r0]
- strh r3, [r1, 0x30]
- ldr r1, [r0]
- strh r3, [r1, 0x24]
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- b _080E8414
- .align 2, 0
-_080E83D0: .4byte gUnknown_083DB694
-_080E83D4:
- ldr r0, _080E83F4 @ =gUnknown_083DB694
- ldr r1, [r0]
- adds r1, 0x98
- ldr r0, [r1]
- movs r2, 0
- strh r3, [r0, 0x30]
- ldr r0, [r1]
- strh r2, [r0, 0x24]
- ldr r1, [r1]
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- b _080E8414
- .align 2, 0
-_080E83F4: .4byte gUnknown_083DB694
-_080E83F8:
- ldr r0, _080E841C @ =gUnknown_083DB694
- ldr r1, [r0]
- adds r1, 0x98
- ldr r2, [r1]
- movs r3, 0
- movs r0, 0x1
- strh r0, [r2, 0x30]
- ldr r0, [r1]
- strh r3, [r0, 0x24]
- ldr r1, [r1]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
-_080E8414:
- strb r0, [r1]
-_080E8416:
- pop {r0}
- bx r0
- .align 2, 0
-_080E841C: .4byte gUnknown_083DB694
- thumb_func_end sub_80E8398
-
- thumb_func_start sub_80E8420
-sub_80E8420: @ 80E8420
- push {r4-r7,lr}
- sub sp, 0x18
- mov r1, sp
- ldr r0, _080E84E0 @ =gSpriteTemplate_83DBCAC
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- mov r0, sp
- movs r1, 0
- movs r2, 0
- movs r3, 0x3
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080E84E4 @ =gUnknown_083DB694
- ldr r7, [r1]
- adds r5, r7, 0
- adds r5, 0x9C
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r4, _080E84E8 @ =gSprites
- adds r1, r4
- str r1, [r5]
- ldr r0, _080E84EC @ =gSpriteAnimTable_83DBC8C
- str r0, [sp, 0x8]
- ldr r0, _080E84F0 @ =sub_80E872C
- str r0, [sp, 0x14]
- mov r0, sp
- movs r1, 0
- movs r2, 0
- movs r3, 0x4
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- adds r6, r7, 0
- adds r6, 0xA0
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- str r1, [r6]
- ldr r0, _080E84F4 @ =gSpriteAnimTable_83DBC9C
- str r0, [sp, 0x8]
- ldr r0, _080E84F8 @ =sub_80E8760
- str r0, [sp, 0x14]
- mov r0, sp
- movs r1, 0
- movs r2, 0
- movs r3, 0x5
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- adds r2, r7, 0
- adds r2, 0xA4
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- str r1, [r2]
- ldr r0, [r5]
- movs r1, 0
- strh r1, [r0, 0x2E]
- ldr r0, [r6]
- strh r1, [r0, 0x2E]
- ldr r0, [r2]
- strh r1, [r0, 0x2E]
- movs r0, 0x1
- bl IndexOfSpritePaletteTag
- ldr r1, [r5]
- lsls r0, 24
- lsrs r0, 20
- ldr r2, _080E84FC @ =0x00000101
- adds r0, r2
- strh r0, [r1, 0x34]
- bl sub_80E8534
- adds r1, r7, 0
- adds r1, 0x96
- movs r0, 0x1
- strb r0, [r1]
- ldr r1, _080E8500 @ =REG_BLDCNT
- movs r3, 0xFD
- lsls r3, 6
- adds r0, r3, 0
- strh r0, [r1]
- add sp, 0x18
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080E84E0: .4byte gSpriteTemplate_83DBCAC
-_080E84E4: .4byte gUnknown_083DB694
-_080E84E8: .4byte gSprites
-_080E84EC: .4byte gSpriteAnimTable_83DBC8C
-_080E84F0: .4byte sub_80E872C
-_080E84F4: .4byte gSpriteAnimTable_83DBC9C
-_080E84F8: .4byte sub_80E8760
-_080E84FC: .4byte 0x00000101
-_080E8500: .4byte REG_BLDCNT
- thumb_func_end sub_80E8420
-
- thumb_func_start sub_80E8504
-sub_80E8504: @ 80E8504
- push {r4,lr}
- ldr r0, _080E8530 @ =gUnknown_083DB694
- ldr r4, [r0]
- adds r0, r4, 0
- adds r0, 0x9C
- ldr r0, [r0]
- bl DestroySprite
- adds r0, r4, 0
- adds r0, 0xA0
- ldr r0, [r0]
- bl DestroySprite
- adds r0, r4, 0
- adds r0, 0xA4
- ldr r0, [r0]
- bl DestroySprite
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080E8530: .4byte gUnknown_083DB694
- thumb_func_end sub_80E8504
-
- thumb_func_start sub_80E8534
-sub_80E8534: @ 80E8534
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r1, _080E8554 @ =gUnknown_083DB694
- ldr r3, [r1]
- ldr r2, _080E8558 @ =0x000001b7
- adds r0, r3, r2
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- adds r4, r1, 0
- cmp r0, 0
- beq _080E8560
- ldr r1, _080E855C @ =gUnknown_020388AC
- movs r0, 0x1
- b _080E8598
- .align 2, 0
-_080E8554: .4byte gUnknown_083DB694
-_080E8558: .4byte 0x000001b7
-_080E855C: .4byte gUnknown_020388AC
-_080E8560:
- adds r0, r3, 0
- adds r0, 0x26
- ldrb r2, [r0]
- cmp r2, 0
- bne _080E8578
- ldr r0, _080E8574 @ =gUnknown_020388AC
- strb r2, [r0]
- adds r7, r0, 0
- b _080E859C
- .align 2, 0
-_080E8574: .4byte gUnknown_020388AC
-_080E8578:
- movs r1, 0xD4
- lsls r1, 1
- adds r0, r3, r1
- ldrh r1, [r0]
- movs r0, 0xC0
- lsls r0, 3
- cmp r1, r0
- bne _080E8594
- ldr r1, _080E8590 @ =gUnknown_020388AC
- movs r0, 0x2
- b _080E8598
- .align 2, 0
-_080E8590: .4byte gUnknown_020388AC
-_080E8594:
- ldr r1, _080E85F4 @ =gUnknown_020388AC
- movs r0, 0x3
-_080E8598:
- strb r0, [r1]
- adds r7, r1, 0
-_080E859C:
- ldr r2, [r4]
- adds r4, r2, 0
- adds r4, 0x9C
- ldr r1, [r4]
- ldrb r0, [r7]
- movs r3, 0
- mov r8, r3
- strh r0, [r1, 0x32]
- adds r5, r2, 0
- adds r5, 0xA0
- ldr r1, [r5]
- ldrb r0, [r7]
- strh r0, [r1, 0x32]
- adds r6, r2, 0
- adds r6, 0xA4
- ldr r1, [r6]
- ldrb r0, [r7]
- strh r0, [r1, 0x32]
- ldr r0, [r4]
- ldrb r1, [r7]
- bl StartSpriteAnim
- ldr r0, [r5]
- ldrb r1, [r7]
- bl StartSpriteAnim
- ldr r0, [r6]
- ldrb r1, [r7]
- bl StartSpriteAnim
- ldr r0, [r4]
- movs r1, 0x8
- strh r1, [r0, 0x38]
- ldr r0, [r4]
- strh r1, [r0, 0x3A]
- ldr r0, [r4]
- mov r1, r8
- strh r1, [r0, 0x30]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080E85F4: .4byte gUnknown_020388AC
- thumb_func_end sub_80E8534
-
- thumb_func_start sub_80E85F8
-sub_80E85F8: @ 80E85F8
- push {r4-r6,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080E8624
- ldr r1, _080E8620 @ =gSineTable
- movs r2, 0x30
- ldrsh r0, [r5, r2]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- lsls r0, 16
- asrs r0, 21
- adds r0, 0x8
- strh r0, [r5, 0x38]
- b _080E863A
- .align 2, 0
-_080E8620: .4byte gSineTable
-_080E8624:
- ldr r1, _080E8688 @ =gSineTable
- movs r2, 0x30
- ldrsh r0, [r5, r2]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 16
- asrs r1, 21
- movs r0, 0x8
- subs r0, r1
- strh r0, [r5, 0x3A]
-_080E863A:
- ldrh r0, [r5, 0x30]
- adds r0, 0x5
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r5, 0x30]
- ldr r2, _080E868C @ =REG_BLDALPHA
- ldrh r0, [r5, 0x3A]
- lsls r0, 8
- ldrh r1, [r5, 0x38]
- orrs r0, r1
- strh r0, [r2]
- ldr r0, _080E8690 @ =gUnknown_083DB694
- ldr r6, [r0]
- adds r0, r6, 0
- adds r0, 0x96
- ldrb r0, [r0]
- cmp r0, 0
- beq _080E871A
- bl sub_80E8534
- adds r1, r6, 0
- adds r1, 0x9C
- ldr r0, [r1]
- movs r2, 0x8
- strh r2, [r0, 0x38]
- ldr r0, [r1]
- strh r2, [r0, 0x3A]
- ldr r1, [r1]
- movs r0, 0
- strh r0, [r1, 0x30]
- movs r1, 0x32
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- beq _080E86C4
- cmp r0, 0x1
- bgt _080E8694
- cmp r0, 0
- beq _080E869E
- b _080E871A
- .align 2, 0
-_080E8688: .4byte gSineTable
-_080E868C: .4byte REG_BLDALPHA
-_080E8690: .4byte gUnknown_083DB694
-_080E8694:
- cmp r0, 0x2
- beq _080E86D6
- cmp r0, 0x3
- beq _080E86DE
- b _080E871A
-_080E869E:
- ldr r2, _080E86C0 @ =0x000001a9
- adds r0, r6, r2
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0x58
- muls r0, r1
- adds r0, 0x20
- strh r0, [r5, 0x20]
- movs r1, 0xD4
- lsls r1, 1
- adds r0, r6, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- adds r2, 0xC
- b _080E870A
- .align 2, 0
-_080E86C0: .4byte 0x000001a9
-_080E86C4:
- movs r0, 0xD8
- strh r0, [r5, 0x20]
- movs r1, 0xD4
- lsls r1, 1
- adds r0, r6, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- b _080E8714
-_080E86D6:
- movs r0, 0x97
- strh r0, [r5, 0x20]
- movs r0, 0x60
- b _080E8718
-_080E86DE:
- ldr r4, _080E8720 @ =gUnknown_083DBCC4
- ldr r2, _080E8724 @ =0x000001a9
- adds r0, r6, r2
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0xD4
- lsls r0, 1
- adds r3, r6, r0
- movs r2, 0
- ldrsb r2, [r3, r2]
- lsls r0, r2, 3
- subs r0, r2
- adds r1, r0
- adds r1, r4
- movs r0, 0
- ldrsb r0, [r1, r0]
- lsls r0, 3
- adds r0, 0x1F
- strh r0, [r5, 0x20]
- movs r0, 0
- ldrsb r0, [r3, r0]
- ldr r2, _080E8728 @ =0x000001b5
-_080E870A:
- adds r1, r6, r2
- ldrb r1, [r1]
- lsls r1, 24
- asrs r1, 24
- subs r0, r1
-_080E8714:
- lsls r0, 4
- adds r0, 0x60
-_080E8718:
- strh r0, [r5, 0x22]
-_080E871A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080E8720: .4byte gUnknown_083DBCC4
-_080E8724: .4byte 0x000001a9
-_080E8728: .4byte 0x000001b5
- thumb_func_end sub_80E85F8
-
- thumb_func_start sub_80E872C
-sub_80E872C: @ 80E872C
- push {lr}
- adds r2, r0, 0
- ldr r0, _080E875C @ =gUnknown_083DB694
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0x96
- ldrb r0, [r0]
- cmp r0, 0
- beq _080E8756
- movs r3, 0x32
- ldrsh r0, [r2, r3]
- cmp r0, 0
- bne _080E8756
- adds r1, 0x9C
- ldr r0, [r1]
- ldrh r0, [r0, 0x20]
- adds r0, 0x20
- strh r0, [r2, 0x20]
- ldr r0, [r1]
- ldrh r0, [r0, 0x22]
- strh r0, [r2, 0x22]
-_080E8756:
- pop {r0}
- bx r0
- .align 2, 0
-_080E875C: .4byte gUnknown_083DB694
- thumb_func_end sub_80E872C
-
thumb_func_start sub_80E8760
sub_80E8760: @ 80E8760
push {lr}
diff --git a/data.txt b/data.txt
new file mode 100644
index 000000000..4c3a16e5a
--- /dev/null
+++ b/data.txt
@@ -0,0 +1,10 @@
+const struct SpriteTemplate gSpriteTemplate_83DBCAC =
+{
+ .tileTag = 1,
+ .paletteTag = 1,
+ .oam = &gOamData_83DBC14,
+ .anims = gSpriteAnimTable_83DBC7C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E85F8,
+};
diff --git a/data/easy_chat.s b/data/easy_chat.s
index 98f88b1fc..6630e19d2 100644
--- a/data/easy_chat.s
+++ b/data/easy_chat.s
@@ -9,153 +9,6 @@
.section .rodata
.align 2
-InterviewPalette_1:: @ 83DB820
- .incbin "graphics/misc/interview_pal1.gbapal"
-
- .align 2
-InterviewArrowTiles: @ 83DB840
- .incbin "graphics/misc/interview_arrow.4bpp"
-
- .align 2
-InterviewButtonTiles: @ 83DB940
- .incbin "graphics/misc/interview_buttons.4bpp"
-
- .align 2
-gMenuInterviewFrame_Pal::
- .incbin "graphics/misc/interview_frame.gbapal"
-
- .align 2
-gMenuInterviewFrame_Gfx::
- .incbin "graphics/misc/interview_frame.4bpp.lz"
-
- .align 2
-InterviewTriangleCursorTiles: @ 83DBB94
- .incbin "graphics/misc/interview_triangle_cursor.4bpp"
-
- .align 2
-gSpriteSheets_Interview:: @ 83DBBB4
- obj_tiles InterviewTriangleCursorTiles, 0x20, 0
- obj_tiles gInterviewOutlineCursorTiles, 0x700, 1
- obj_tiles InterviewArrowTiles, 0x100, 2
- obj_tiles InterviewButtonTiles, 0x100, 3
- null_obj_tiles
-
- .align 2
-gSpritePalettes_Interview:: @ 83DBBDC
- obj_pal InterviewPalette_0, 0
- obj_pal InterviewPalette_1, 1
- null_obj_pal
-
- .align 2
-gOamData_83DBBF4:: @ 83DBBF4
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
-
- .align 2
-gSpriteTemplate_83DBBFC:: @ 83DBBFC
- spr_template 0, 0, gOamData_83DBBF4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80E82BC
-
- .align 2
-gOamData_83DBC14:: @ 83DBC14
- .2byte 0x4400
- .2byte 0x8000
- .2byte 0x0400
-
- .align 2
-gSpriteAnim_83DBC1C:: @ 83DBC1C
- obj_image_anim_frame 0, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DBC24:: @ 83DBC24
-.ifdef ENGLISH
- obj_image_anim_frame 8, 5
-.else
- obj_image_anim_frame 0, 5
-.endif
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DBC2C:: @ 83DBC2C
- obj_image_anim_frame 0, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DBC34:: @ 83DBC34
- obj_image_anim_frame 24, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DBC3C:: @ 83DBC3C
- obj_image_anim_frame 32, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DBC44:: @ 83DBC44
- obj_image_anim_frame 40, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DBC4C:: @ 83DBC4C
- obj_image_anim_frame 40, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DBC54:: @ 83DBC54
- obj_image_anim_frame 40, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DBC5C:: @ 83DBC5C
- obj_image_anim_frame 48, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DBC64:: @ 83DBC64
-.ifdef ENGLISH
- obj_image_anim_frame 40, 5
-.else
- obj_image_anim_frame 16, 5
-.endif
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DBC6C:: @ 83DBC6C
- obj_image_anim_frame 48, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DBC74:: @ 83DBC74
- obj_image_anim_frame 40, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DBC7C:: @ 83DBC7C
- .4byte gSpriteAnim_83DBC1C
- .4byte gSpriteAnim_83DBC24
- .4byte gSpriteAnim_83DBC2C
- .4byte gSpriteAnim_83DBC34
-
- .align 2
-gSpriteAnimTable_83DBC8C:: @ 83DBC8C
- .4byte gSpriteAnim_83DBC3C
- .4byte gSpriteAnim_83DBC44
- .4byte gSpriteAnim_83DBC4C
- .4byte gSpriteAnim_83DBC54
-
- .align 2
-gSpriteAnimTable_83DBC9C:: @ 83DBC9C
- .4byte gSpriteAnim_83DBC5C
- .4byte gSpriteAnim_83DBC64
- .4byte gSpriteAnim_83DBC6C
- .4byte gSpriteAnim_83DBC74
-
- .align 2
-gSpriteTemplate_83DBCAC:: @ 83DBCAC
- spr_template 1, 1, gOamData_83DBC14, gSpriteAnimTable_83DBC7C, NULL, gDummySpriteAffineAnimTable, sub_80E85F8
-
- .align 2
gUnknown_083DBCC4:: @ 83DBCC4
.byte 1, 3, 5, 8, 10, 12, 15
.byte 1, 3, 5, 8, 10, 12, 0
diff --git a/include/easy_chat.h b/include/easy_chat.h
index a752720a6..8d13ecc42 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -1,8 +1,100 @@
#ifndef GUARD_EASYCHAT_H
#define GUARD_EASYCHAT_H
+struct Sprite;
+
+struct Shared1000
+{
+ void (*unk0)(void); // main cb 2
+ u16 *unk4;
+ u8 unk8;
+ u8 unk9;
+ u8 unkA;
+ u8 unkB;
+ u16 unkC[(0x20-0xC)/2]; // unknown length
+ void (*unk20)(void);
+ u16 unk24;
+ u8 unk26;
+ u8 unk27;
+ u16 unk28;
+ u8 unk2A[11][2]; // unknown length
+ u8 unk40[4][14];
+ u8 unk78[0x7D - 0x78]; // unknown length
+ u8 unk7D;
+ u8 unk7E[0x83-0x7E];
+ s8 unk83; // s8?
+ //u8 unk83; // s8?
+ s8 unk84;
+ s8 unk85;
+ s8 unk86;
+ bool8 unk87;
+ u16 unk88;
+ u16 unk8A;
+ u8 unk8C[(0x96-0x8C)/2][2];
+ u8 unk96;
+ u8 filler97;
+ struct Sprite *unk98;
+ struct Sprite *unk9C;
+ struct Sprite *unkA0;
+ struct Sprite *unkA4;
+ u8 fillerA8[0x1A8-0xA8];
+ s8 unk1A8;
+ s8 unk1A9;
+ s8 unk1AA[0xB5-0xAA]; // unknown length
+ s8 unk1B5;
+ s8 unk1B6;
+ s8 unk1B7;
+ u8 unk1B8;
+ u8 unk1B9;
+ u16 unk1BA;
+ u8 filler1BC[0xBE - 0xBC];
+ u8 unk1BE;
+ u8 filler1BF;
+ s8 unk1C0;
+ u8 filler1C1[3];
+ void (*unk1C4)(void);
+ u8 filler1C8[0x4142-0x1C8];
+#if GERMAN
+ u8 filler4142_de[0x32A];
+#endif
+ u16 unk4142[(0x78-0x42)/2];
+ u16 unk4178[(0x99A4-0x4178)/2]; // unknown length
+#if GERMAN
+ u8 filler99A4_de[2];
+#endif
+ s8 unk99A4;
+ s8 unk99A5;
+ s8 unk99A6[0xA28-0x9A6];
+ s8 unk9A28;
+ s8 unk9A29;
+ //u8 filler9A2A[0xC7C-0xA2A];
+ u16 unk9A2A[0x94][2]; // unknown length
+ u8 filler9C7A[2];
+ u16 unk9C7C; // this is at 0x9FA8 in German
+ s16 unk9C7E;
+ u8 unk9C80[0xC9-0x80];
+ u8 unk9CC9[0xD12-0xCC9];
+ u8 unk9D12[0x5B-0x12];
+ u8 unk9D5B[0xA4-0x5B];
+ u8 unk9DA4[0xC8-0xA4];
+ u8 filler9DC8[0xE14 - 0xDC8];
+ u8 unk9E14[0xE41 - 0xE14];
+ u8 unk9E41[0x6E - 0x41];
+ u8 unk9E6E[0xEE - 0x6E];
+ u8 unk9EEE[0xF6E - 0xEEE];
+ u8 unk9F6E[1]; // unknown length
+};
+
+#define static_assert(cond) \
+ typedef char test_[(cond) ? 1 : -1]
+
+//static_assert(offsetof(struct Shared1000, unk1A8) == 0x1A8);
+
extern u8 gUnknown_020388AC;
+// const pointer to shared1000. easy_chat might be two separate files.
+extern struct Shared1000 *const gUnknown_083DB694;
+
void sub_80E62A0(u8 arg0, u16 *arg1, void (*arg2)(void), u8 arg3);
u16 sub_80EB72C(u16 group);
void sub_80EB6FC(u16 *, u16);
diff --git a/include/graphics.h b/include/graphics.h
index 488de07c0..130e21f58 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2656,4 +2656,6 @@ extern const u8 gNamingScreenRightPointingTriangleTiles[];
extern const u8 gNamingScreenUnderscoreTiles[];
extern const u16 gNamingScreenPalettes[][16];
+extern const u8 gInterviewOutlineCursorTiles[];
+
#endif // GUARD_GRAPHICS_H
diff --git a/ld_script.txt b/ld_script.txt
index e74f57f7f..fc56922fe 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -303,6 +303,7 @@ SECTIONS {
asm/battle_intro.o(.text);
src/field/bike.o(.text);
src/easy_chat_before.o(.text);
+ src/easy_chat_2.o(.text);
asm/easy_chat.o(.text);
src/easy_chat.o(.text);
src/pokenav_before.o(.text);
@@ -544,6 +545,7 @@ SECTIONS {
data/battle_anim_80CA710.o(.rodata);
src/field/bike.o(.rodata);
src/easy_chat_before.o(.rodata);
+ src/easy_chat_2.o(.rodata);
data/easy_chat.o(.rodata);
data/pokenav.o(.rodata);
src/pokemon/mon_markings.o(.rodata);
diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c
new file mode 100644
index 000000000..cc1877db1
--- /dev/null
+++ b/src/easy_chat_2.c
@@ -0,0 +1,403 @@
+#include "global.h"
+#include "easy_chat.h"
+#include "graphics.h"
+#include "sprite.h"
+#include "trig.h"
+
+void sub_80E8268(void);
+void sub_80E82BC(struct Sprite *);
+void sub_80E8534(void);
+void sub_80E85F8(struct Sprite *);
+void sub_80E872C(struct Sprite *);
+void sub_80E8760(struct Sprite *);
+void sub_80E8818(void);
+void sub_80E8A7C(void);
+
+const u16 InterviewPalette_0[] = INCBIN_U16("graphics/misc/interview_pal0.gbapal");
+const u16 InterviewPalette_1[] = INCBIN_U16("graphics/misc/interview_pal1.gbapal");
+const u8 InterviewArrowTiles[] = INCBIN_U8("graphics/misc/interview_arrow.4bpp");
+const u8 InterviewButtonTiles[] = INCBIN_U8("graphics/misc/interview_buttons.4bpp");
+const u16 gMenuInterviewFrame_Pal[] = INCBIN_U16("graphics/misc/interview_frame.gbapal");
+const u8 gMenuInterviewFrame_Gfx[] = INCBIN_U8("graphics/misc/interview_frame.4bpp.lz");
+const u8 InterviewTriangleCursorTiles[] = INCBIN_U8("graphics/misc/interview_triangle_cursor.4bpp");
+
+void sub_80E8218(void)
+{
+ struct SpriteSheet interviewSpriteSheets[] =
+ {
+ {InterviewTriangleCursorTiles, 0x20, 0},
+ {gInterviewOutlineCursorTiles, 0x700, 1},
+ {InterviewArrowTiles, 0x100, 2},
+ {InterviewButtonTiles, 0x100, 3},
+ {NULL, 0, 0},
+ };
+ struct SpritePalette interviewSpritePalettes[] =
+ {
+ {InterviewPalette_0, 0},
+ {InterviewPalette_1, 1},
+ {NULL, 0},
+ };
+
+ LoadSpriteSheets(interviewSpriteSheets);
+ LoadSpritePalettes(interviewSpritePalettes);
+ sub_80E8268();
+ sub_80E8818();
+ sub_80E8A7C();
+}
+
+const struct OamData gOamData_83DBBF4 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DBBFC =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gOamData_83DBBF4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E82BC,
+};
+
+void sub_80E8268(void)
+{
+ u8 spriteId;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83DBBFC, 0, 0, 0);
+ gSprites[spriteId].pos1.y = gUnknown_083DB694->unk8A * 8 + 8;
+ gSprites[spriteId].pos1.x = gUnknown_083DB694->unk88 * 8 + 4;
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = 0;
+ gUnknown_083DB694->unk98 = &gSprites[spriteId];
+}
+
+void sub_80E82BC(struct Sprite *sprite)
+{
+ if (sprite->data[1] == 0)
+ {
+ if (gUnknown_083DB694->unk87)
+ {
+ u16 r5 = gUnknown_083DB694->unk86;
+ u16 r4 = gUnknown_083DB694->unk85;
+ u16 r7 = 0;
+ u16 i;
+
+ for (i = 0; i < r4; i++)
+ r7 += gUnknown_083DB694->unk8C[r5][i];
+
+ if (r5 == gUnknown_083DB694->unk84)
+ {
+ sprite->pos1.y = 96;
+ sprite->pos1.x = (r4 * 7 + 3) * 8 + 4;
+ }
+ else
+ {
+ sprite->pos1.y = (gUnknown_083DB694->unk8A + r5 * 2) * 8 + 8;
+ sprite->pos1.x = (gUnknown_083DB694->unk88 + r7 + r4 * 11) * 8 + 4;
+ }
+
+ sprite->pos2.x = -6;
+ sprite->data[0] = 0;
+ }
+ else
+ {
+ if (++sprite->data[0] > 2)
+ {
+ sprite->data[0] = 0;
+ if (++sprite->pos2.x > 0)
+ sprite->pos2.x = -6;
+ }
+ }
+ }
+}
+
+void sub_80E8398(u8 a)
+{
+ switch (a)
+ {
+ case 0:
+ gUnknown_083DB694->unk98->data[1] = a;
+ gUnknown_083DB694->unk98->pos2.x = a;
+ gUnknown_083DB694->unk98->invisible = FALSE;
+ break;
+ case 1:
+ gUnknown_083DB694->unk98->data[1] = a;
+ gUnknown_083DB694->unk98->pos2.x = 0;
+ gUnknown_083DB694->unk98->invisible = FALSE;
+ break;
+ case 2:
+ gUnknown_083DB694->unk98->data[1] = 1;
+ gUnknown_083DB694->unk98->pos2.x = 0;
+ gUnknown_083DB694->unk98->invisible = TRUE;
+ break;
+ }
+}
+
+const struct OamData gOamData_83DBC14 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 1,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_83DBC1C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC24[] =
+{
+#if ENGLISH
+ ANIMCMD_FRAME(8, 5),
+#else
+ ANIMCMD_FRAME(0, 5),
+#endif
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC2C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC34[] =
+{
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC3C[] =
+{
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC44[] =
+{
+ ANIMCMD_FRAME(40, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC4C[] =
+{
+ ANIMCMD_FRAME(40, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC54[] =
+{
+ ANIMCMD_FRAME(40, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC5C[] =
+{
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC64[] =
+{
+#if ENGLISH
+ ANIMCMD_FRAME(40, 5),
+#else
+ ANIMCMD_FRAME(16, 5),
+#endif
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC6C[] =
+{
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DBC74[] =
+{
+ ANIMCMD_FRAME(40, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DBC7C[] =
+{
+ gSpriteAnim_83DBC1C,
+ gSpriteAnim_83DBC24,
+ gSpriteAnim_83DBC2C,
+ gSpriteAnim_83DBC34,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DBC8C[] =
+{
+ gSpriteAnim_83DBC3C,
+ gSpriteAnim_83DBC44,
+ gSpriteAnim_83DBC4C,
+ gSpriteAnim_83DBC54,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DBC9C[] =
+{
+ gSpriteAnim_83DBC5C,
+ gSpriteAnim_83DBC64,
+ gSpriteAnim_83DBC6C,
+ gSpriteAnim_83DBC74,
+};
+
+/*
+const struct SpriteTemplate gSpriteTemplate_83DBCAC =
+{
+ .tileTag = 1,
+ .paletteTag = 1,
+ .oam = &gOamData_83DBC14,
+ .anims = gSpriteAnimTable_83DBC7C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E85F8,
+};
+*/
+
+void sub_80E8420(void)
+{
+ struct SpriteTemplate spriteTemplate_83DBCAC =
+ {
+ .tileTag = 1,
+ .paletteTag = 1,
+ .oam = &gOamData_83DBC14,
+ .anims = gSpriteAnimTable_83DBC7C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E85F8,
+ };
+ u8 spriteId;
+
+ spriteId = CreateSprite(&spriteTemplate_83DBCAC, 0, 0, 3);
+ gUnknown_083DB694->unk9C = &gSprites[spriteId];
+
+ spriteTemplate_83DBCAC.anims = gSpriteAnimTable_83DBC8C;
+ spriteTemplate_83DBCAC.callback = sub_80E872C;
+ spriteId = CreateSprite(&spriteTemplate_83DBCAC, 0, 0, 4);
+ gUnknown_083DB694->unkA0 = &gSprites[spriteId];
+
+ spriteTemplate_83DBCAC.anims = gSpriteAnimTable_83DBC9C;
+ spriteTemplate_83DBCAC.callback = sub_80E8760;
+ spriteId = CreateSprite(&spriteTemplate_83DBCAC, 0, 0, 5);
+ gUnknown_083DB694->unkA4 = &gSprites[spriteId];
+
+ gUnknown_083DB694->unk9C->data[0] = 0;
+ gUnknown_083DB694->unkA0->data[0] = 0;
+ gUnknown_083DB694->unkA4->data[0] = 0;
+
+ gUnknown_083DB694->unk9C->data[3] = 0x0101 + IndexOfSpritePaletteTag(1) * 16;
+ sub_80E8534();
+ gUnknown_083DB694->unk96 = 1;
+ REG_BLDCNT = 0x3F40;
+}
+
+void sub_80E8504(void)
+{
+ DestroySprite(gUnknown_083DB694->unk9C);
+ DestroySprite(gUnknown_083DB694->unkA0);
+ DestroySprite(gUnknown_083DB694->unkA4);
+}
+
+void sub_80E8534(void)
+{
+ if (gUnknown_083DB694->unk1B7 != 0)
+ gUnknown_020388AC = 1;
+ else if (gUnknown_083DB694->unk26 == 0)
+ gUnknown_020388AC = 0;
+ else if (gUnknown_083DB694->unk1A8 == 0 && gUnknown_083DB694->unk1A9 == 6)
+ gUnknown_020388AC = 2;
+ else
+ gUnknown_020388AC = 3;
+
+ gUnknown_083DB694->unk9C->data[2] = gUnknown_020388AC;
+ gUnknown_083DB694->unkA0->data[2] = gUnknown_020388AC;
+ gUnknown_083DB694->unkA4->data[2] = gUnknown_020388AC;
+
+ StartSpriteAnim(gUnknown_083DB694->unk9C, gUnknown_020388AC);
+ StartSpriteAnim(gUnknown_083DB694->unkA0, gUnknown_020388AC);
+ StartSpriteAnim(gUnknown_083DB694->unkA4, gUnknown_020388AC);
+
+ gUnknown_083DB694->unk9C->data[5] = 8;
+ gUnknown_083DB694->unk9C->data[6] = 8;
+ gUnknown_083DB694->unk9C->data[1] = 0;
+}
+
+extern const s8 gUnknown_083DBCC4[][7];
+
+void sub_80E85F8(struct Sprite *sprite)
+{
+ sprite->data[0]++;
+ if (sprite->data[0] & 1)
+ sprite->data[5] = 8 + (gSineTable[sprite->data[1]] >> 5);
+ else
+ sprite->data[6] = 8 - (gSineTable[sprite->data[1]] >> 5);
+
+ sprite->data[1] = (sprite->data[1] + 5) & 0xFF;
+
+ REG_BLDALPHA = (sprite->data[6] << 8) | sprite->data[5];
+
+ if (gUnknown_083DB694->unk96 != 0)
+ {
+ sub_80E8534();
+
+ gUnknown_083DB694->unk9C->data[5] = 8;
+ gUnknown_083DB694->unk9C->data[6] = 8;
+ gUnknown_083DB694->unk9C->data[1] = 0;
+
+ switch (sprite->data[2])
+ {
+ case 0:
+ sprite->pos1.x = gUnknown_083DB694->unk1A9 * 88 + 32;
+ sprite->pos1.y = (gUnknown_083DB694->unk1A8 - gUnknown_083DB694->unk1B5) * 16 + 96;
+ break;
+ case 1:
+ sprite->pos1.x = 216;
+ sprite->pos1.y = gUnknown_083DB694->unk1A8 * 16 + 96;
+ break;
+ case 2:
+ sprite->pos1.x = 151;
+ sprite->pos1.y = 96;
+ break;
+ case 3:
+ sprite->pos1.x = gUnknown_083DBCC4[gUnknown_083DB694->unk1A8][gUnknown_083DB694->unk1A9] * 8 + 31;
+ sprite->pos1.y = (gUnknown_083DB694->unk1A8 - gUnknown_083DB694->unk1B5) * 16 + 96;
+ break;
+ }
+ }
+}
+
+void sub_80E872C(struct Sprite *sprite)
+{
+ if (gUnknown_083DB694->unk96 != 0 && sprite->data[2] == 0)
+ {
+ sprite->pos1.x = gUnknown_083DB694->unk9C->pos1.x + 32;
+ sprite->pos1.y = gUnknown_083DB694->unk9C->pos1.y;
+ }
+}
diff --git a/src/easy_chat_before.c b/src/easy_chat_before.c
index b5e87337f..5d606ef10 100644
--- a/src/easy_chat_before.c
+++ b/src/easy_chat_before.c
@@ -6,10 +6,12 @@
#include "easy_chat.h"
#include "event_data.h"
#include "ewram.h"
+#include "graphics.h"
#include "main.h"
#include "menu.h"
#include "palette.h"
#include "sound.h"
+#include "sprite.h"
#include "string_util.h"
#include "strings.h"
#include "unknown_task.h"
@@ -19,86 +21,6 @@ extern const struct WindowConfig gWindowConfig_81E6DA8;
extern void sub_80546B8(void);
-struct Shared1000
-{
- void (*unk0)(void); // main cb 2
- u16 *unk4;
- u8 unk8;
- u8 unk9;
- u8 unkA;
- u8 unkB;
- u16 unkC[(0x20-0xC)/2]; // unknown length
- void (*unk20)(void);
- u16 unk24;
- u8 unk26;
- u8 unk27;
- u16 unk28;
- u8 unk2A[11][2]; // unknown length
- u8 unk40[4][14];
- u8 unk78[0x7D - 0x78]; // unknown length
- u8 unk7D;
- u8 unk7E[0x83-0x7E];
- s8 unk83; // s8?
- //u8 unk83; // s8?
- s8 unk84;
- s8 unk85;
- s8 unk86;
- bool8 unk87;
- u16 unk88;
- u16 unk8A;
- u8 unk8C[(0x96-0x8C)/2][2];
- u8 unk96;
- u8 filler97[0x1A8-0x97];
- s8 unk1A8;
- s8 unk1A9;
- s8 unk1AA[0xB5-0xAA]; // unknown length
- s8 unk1B5;
- s8 unk1B6;
- s8 unk1B7;
- u8 unk1B8;
- u8 unk1B9;
- u16 unk1BA;
- u8 filler1BC[0xBE - 0xBC];
- u8 unk1BE;
- u8 filler1BF;
- s8 unk1C0;
- u8 filler1C1[3];
- void (*unk1C4)(void);
- u8 filler1C8[0x4142-0x1C8];
-#if GERMAN
- u8 filler4142_de[0x32A];
-#endif
- u16 unk4142[(0x78-0x42)/2];
- u16 unk4178[(0x99A4-0x4178)/2]; // unknown length
-#if GERMAN
- u8 filler99A4_de[2];
-#endif
- s8 unk99A4;
- s8 unk99A5;
- s8 unk99A6[0xA28-0x9A6];
- s8 unk9A28;
- s8 unk9A29;
- //u8 filler9A2A[0xC7C-0xA2A];
- u16 unk9A2A[0x94][2]; // unknown length
- u8 filler9C7A[2];
- u16 unk9C7C; // this is at 0x9FA8 in German
- s16 unk9C7E;
- u8 unk9C80[0xC9-0x80];
- u8 unk9CC9[0xD12-0xCC9];
- u8 unk9D12[0x5B-0x12];
- u8 unk9D5B[0xA4-0x5B];
- u8 unk9DA4[0xC8-0xA4];
- u8 filler9DC8[0xE14 - 0xDC8];
- u8 unk9E14[0xE41 - 0xE14];
- u8 unk9E41[0xF6E - 0xE41];
- u8 unk9F6E[1]; // unknown length
-};
-
-#define static_assert(cond) \
- typedef char test_[(cond) ? 1 : -1]
-
-//static_assert(offsetof(struct Shared1000, unk9DA4) == 0x9DA4);
-
#define shared1000 (*(struct Shared1000 *)(gSharedMem + 0x1000))
const u16 gMysteryEventPhrase[] = {EC_WORD_MYSTERY, EC_WORD_EVENT, EC_WORD_IS, EC_WORD_EXCITING};
@@ -231,12 +153,15 @@ u8 sub_80E810C(void);
void sub_80E81C0(void);
void sub_80E81FC(void);
void sub_80E8218(void);
+
void sub_80E8398();
void sub_80E8420(void);
void sub_80E8504(void);
void sub_80E87CC();
+
void sub_80E88F0(void);
void sub_80E8958();
+
void sub_80E8BF4();
void sub_80E8CEC(void);
void sub_80E8D54(void);
@@ -270,7 +195,7 @@ u8 sub_80EAD7C(u8);
void sub_80EAECC(void);
void sub_80EB040(void);
void sub_80EB0B0(void);
-void sub_80EB218();
+u8 *sub_80EB218(u8 *, u16, u16);
u16 sub_80EB2D4();
bool8 sub_80EB680(u16 *, u16, u16, u16);
@@ -602,8 +527,6 @@ const u16 gUnknown_083DB7F4[] =
EC_WORD_EXCL,
};
-const u16 InterviewPalette_0[] = INCBIN_U16("graphics/misc/interview_pal0.gbapal");
-
// ResetDefaultEasyChatPhrases
void InitEasyChatPhrases(void)
{
@@ -1773,3 +1696,49 @@ bool8 sub_80E8094(void)
}
return TRUE;
}
+
+u8 sub_80E810C(void)
+{
+ u16 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ u8 *ptr;
+ u8 *r3;
+
+ ptr = sub_80EB218(shared1000.unk9E6E, shared1000.unkC[0], 0);
+ *ptr++ = CHAR_SPACE;
+ sub_80EB218(ptr, shared1000.unkC[1], 0);
+
+ ptr = sub_80EB218(shared1000.unk9EEE, gBerryMasterWifePhrases[i][0], 0);
+ *ptr++ = CHAR_SPACE;
+ sub_80EB218(ptr, gBerryMasterWifePhrases[i][1], 0);
+
+ ptr = shared1000.unk9E6E;
+ r3 = shared1000.unk9EEE;
+ while (*ptr != EOS && *r3 != EOS)
+ {
+ if (*ptr++ != *r3++)
+ break;
+ }
+ if (*ptr == EOS && *r3 == EOS)
+ return i + 1;
+ }
+ return 0;
+}
+
+void sub_80E81C0(void)
+{
+ u8 *ptr;
+
+ ptr = sub_80EB218(gStringVar2, shared1000.unk9C7C, 0);
+ *ptr++ = CHAR_SPACE;
+ sub_80EB218(ptr, shared1000.unk9C7E, 0);
+}
+
+void sub_80E81FC(void)
+{
+ PlaySE(SE_SELECT);
+ sub_80E95A4();
+ MenuZeroFillWindowRect(0, 0, 29, 13);
+}