diff options
-rw-r--r-- | asm/easy_chat.s | 828 | ||||
-rw-r--r-- | data.txt | 10 | ||||
-rw-r--r-- | data/easy_chat.s | 147 | ||||
-rw-r--r-- | include/easy_chat.h | 92 | ||||
-rw-r--r-- | include/graphics.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/easy_chat_2.c | 403 | ||||
-rw-r--r-- | src/easy_chat_before.c | 135 |
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); +} |